Graph-Easy
==========

See Graph::Easy under LIMITATIONS for some hot topics.

In addition:

Important short-term TODO:

* HTML output is broken and misses the edges
  + use 3x3 table-cells to render the edges with border-attributes
* todos/invisible.txt causes an endless loop in the chain-finding code
  (because the code follows a link back to a node already in the chain
   currently processed. Stoping this will, however, make other tests
   fail to find the longest possible chain)
* Node::Empty need to render their right/bottom border if their
  right/bottom neighbour is in the same cluster

Parser:

* edge parsing " -- test \>-->" => "test >" as edge label

* deal with " -> [ node ], [node2], [node3]"
* parse nested graphs
* support for node splitting ala:

    "[ A ] | [ B | C ] || [ D | E ]"

* support for attribute lists on autosplit nodes ala:

    "[ A || B | C ] { background: red|blue|green; }"

* use "{}" to nest blocks?
* Nodes with both "|" and "\|" in their name are not parsed correctly
* handle RGB colors with percentages or fractions like: rgb(100%,50%,0.5)

Output:

* selfloop edges should counter the general flow:

                    Until not done
                  +----------------+
                  v                |
  +-------+     +--------------------+     +-----+
  | Start | --> | Main               | --> | End |
  +-------+     +--------------------+     +-----+

  versus (loop still going left):

                  Until not done
                +----------------+
                v                |
  +-----+     +--------------------+     +-------+
  | End | <-- | Main               | <-- | Start |
  +-----+     +--------------------+     +-------+

* write as_box(): output with box-drawing chars (unicode or iso)
* support different edge starting point styles ala:

  ----->  |----->  o----->  +----->  *----->  >----->

* as_txt(): output of node clusters is not optimal
* as_txt(): output of node chains is not optimal
* as_ascii(): render dotted nodes with ":" on their lower corners
* as_ascii(): output group borders and group labels
* as_html: "border-width: 1" should be "border-width: 1px"
* as_html: node clusters have spacings between nodes:
           The spacing comes from the filler cells to make groups
	   work - arg!
* as_html(): output group labels
* as_html(): edges are borked in Opera, the table cell is not big enough
	     to hold them (*sigh*)
* as_html(): add a class "link" to generated links (so they can be styled
             differently)
* better support for different shapes (circle, box, rounded, polygon etc)
  in HTML/ASCII/Graphviz
* better support for different edge styles in HTML/Graphviz
* as_html: deal with multi-celled nodes
* as_ascii() and others: grow cells around point-shaped nodes to intrude:

	...........................
        :      :  |   :     :     :
	:      :  |   :     :     :
	:      :  v   :     :     :
	...........................
        :       :   :       :     :
	:-----> : * : <---- :     :
        :       :   :       :     :
	...........................

Layout:

* the longest-chain code (walk recursively children of startig node) needs
  some tuning, especially when it encounters loops in the graph.
* allow user to specify max graph width (in cells) to avoid overly wide graphs
* auto-grow nodes to be multicelled depending on the dimensions of their label
  ("main page" gets 2x1, while "a \nb \nc \nd \ne \n" gets 1x2 cells)
  This currently causes problems and wierd layouts.
* Use the seed to generate randomized layouts
* allow user to specify on an edge:
    direction: (up|down|left|right|north|south|west|east|0|90|180|270|360);
    flow: (up|down|left|right|north|south|west|east|0|90|180|270|360);
  to force or suggest direction of edges leaving a node
* allow user to specifiy "align: left, top;" or "align: center, middle" to
  specify alignment of label inside node. (left|right|center|middle|top|bottom)
* the A* algorithm needs fine-tuning to generate less bendy paths

Optimizer:

* write an optimizer for already laid out graphs to optimize layout
* less memory: store border and edge styles as ints instead of "solid" etc
* use AUTOLOAD for accessors in Node.pm: most are never used by normal code
* edges_to() is the new hot-spot. It could be faster if we keep track of
  edges per node indexed by their target, too.

Manual:

* finish the HTML conversion (Graph::Easy::Pod2HTML)
* improve the actual manual text, add chapters about topics like:
  + clusters, groups etc

