Revision history for Graph::Layout::Simple.
2004-12-27 v0.01 Tels 18 tests
* original version; created by h2xs 1.23 with options
-A -X -n Graph::Layout::Simple -b 5.6.1 --skip-autoloader
2004-12-28 v0.02 Tels 20 tests
* added a stack-based, backtracking layout routine, that stuffs nodes and
paths between them into cells
* Simple.pm: as_ascii: deal with cell-layout and convert this to ASCII
* Simple.pm: add doc stub for METHODS
* Simple.pm: add score(), as_XXX() do layout if it hasn't done before
* Node.pm: revised code, and better parameter handling
* no longer needs Graph::Directed or Graph::Layout::Aesthetic as prereq
* added examples/ascii.pl
* forgot to add graph.t to MANIFEST
Renamed to Graph::Simple:
2004-12-29 v0.03 Tels 52 tests
* is a subclass of Graph::Directed, so add it as prereq again :o)
* Graph::Layout::Simple::Parser - parse graph from text
* Graph::Layout::Simple::Edge - an edge between two nodes
* Graph: added node() - find node by name
* Graph: add quite some more documentation
* Graph, Node: added as_txt()
* Node: added incoming(), and track incoming edges from other nodes
* added t/parser.t - test text parser
* added t/ascii.t - parse various text files to ascii
2005-01-03 v0.04 Tels 84 tests
* change code to work with Graph 0.50
* require Graph 0.50
* added: Group.pm -- a group of nodes
* added: examples/html.pl, examples/common.pl and TODO
* tests: use strict;, add t/edge.t
* Parser: document the different edge directions and styles
* Parser: construct edges with the proper style
* Parser: allow '..>' style
* Node:
+ document successorts()/predecessors(), as_txt(), as_html()
+ implement as_html($tag)
* Graph:
+ _trace_path() can also trace short, straight paths upwards
+ as_txt() uses $edge->as_txt() to render edge
+ as_ascii() generates proper output for edges with the right style
+ as_ascii() no longer generates trailing whitespace on lines
+ add css(), as_html_page(), html_page_footer(), html_page_header()
+ extend documentation, fix typos, add list of limitations
2005-01-03 v0.05 Tels 87 tests
* fix special paragraphs in pod to use =begin instead of =for
* typos in pod
* some more clarifications for LIMITATIONS
* move the layout code to Graph::Simple::Layout
* add a testcase with two not-connected node-pools in one graph
* amend README, INSTALL
2005-01-08 v0.06 Tels 94 tests
* fix version in Layout
* Edge: add EDGE_START, EDGE_END, EDGE_HOR, EDGE_VER, EDGE_CROSS
* Edge: add cell_type(), add_cell()
* fix pod with "=end graph" (vs. "=end") sections
* fix error message in t/ascii.t when reading file fails
* fix parser: did not add edge if both nodes already existed
* Layout: add _trace_straight_path() - trace a path horizontal/vertical
* Layout: add _remove_path() - remove a traced path
* tests: add t/layout.t, t/syntax/*
* add examples/syntax.pl, examples/syntax.tpl to create automatic
syntax test page for website
* Parser: add reset() and call it from from_text()
* Parser: handle quoted characters in node names
* Parser: handle comments
2005-01-09 v0.07 Tels 124 tests
* Parser: ignore empty lines
* Parser: unquote all special chars, not only the first
* Node: quote node name in as_txt()
* Parser: _parse_attributes();
* Graph: added attribute(), set_attributes()
* Graph: added id() to set/get a unique ID per graph
* Graph: default ID is '', CSS code contains ID in class names
* Parser: teach it to parse CSS and call $graph->set_attributes()
* Edge: output name in as_txt()
* Layout: use strict, fix _trace_straight_path()
* t/layout.t: add tests for _trace_straight_path()
* Layout: simplify _trace_path() by using _trace_straight_path()
* Layout: can trace straight edges occupying multiple cells
2005-01-10 v0.08 Tels 133 tests - Fix, fix, fix, fix the stupid bugs...
* grapher tries to place nodes without any incoming edges into first column
(this fixes all the examples which have groups of not-connected nodes)
* in HTML, use monospaced font for edges (prepare for box-art)
* Layout: set error if layout stage fails
* Edge: add EDGE_N_E, EDGE_N_W, EDGE_N_E_W etc for corner pieces
* Edge: add clear_cells()
* make _trace_path() more general by having _trace_straight_path() creating
the edge types
* Node: as_html(): no longer outputs 'style="border: none"' for class="edge"
* Node: include attributes in as_txt() as well as classes (for subclasses)
* Node: add class()
* Graph: always register nodes/edges with the graph
* Graph: as_txt() includes attributes (unless they are the defaults)
* Node: postpone calculation of 'w' (called by as_ascii() from Graph)
* add a stress test with a bend edge
2005-01-12 v0.09 Tels 147 tests - Place, place, place, place the pesky nodes...
* Layout: try to place node with only one predecessor around the predecessor
* add a stress test with a star-shaped graph (5 nodes)
* add a syntax test with newlines and one without any spaces
* Parser: accumulate left-over fragments to parse examples broken by newlines
* Parser: use compiled regexps for nodes, attributes etc
* Parser: finally handle trailing attributes on nodes
* Node: add set_attributes() for setting multiple ones at once
* Node: setting attribute "class" will set subclass instead
* add tests for parsing:
[ node ] { attribute: value; }
[ node ] { attribute: value; } -> [ node2] { attribute: value }
* fix edges going to the left
* tests for quoting in node names
2005-01-24 v0.10 Tels 248 tests - Color, color, color, color the pretty graph...
* added more stress/syntax tests
* fix parser to not treat colors in attributes as comments (like in
"color: #808080")
* use a pre-compiled regexp to match edges (cut down code-duplication)
* parser now handles successfully node chains like:
[ Ulm ] -> [ Lahn ] -> [ Bonn ]
-> [ Trier ]
[ Stein ] -> [ Wahns ]
* Simple.pm: fix edges() in list context to actually work
* require Graph v0.55 (to be safe)
* Node: add attributes_as_txt(), as_txt_node() to allow $graph->as_txt() to
output node attributes only once
* Graph: as_txt(): output node attributes only once
* Graph: add set_attribute()
* examples/syntax.pl: generate headlines from comments in input, add footer
* Graph: support attributes: linkbase, autolink, autotitle, link, title
* Graph: as_html(): output title attributes, as well as links
2005-01-31 v0.11 Tels 294 tests - Close, close, close, close the ugly holes...
* Parser: add parsing of groups like in "( Groupname [ Node ] )"
* Parser: fix for "[1] -> [2] -> [3] { ... }" to not lose attributes on 3
* Parser: can now handle "[1], [2], [3] -> [4]" correctly
* Parser: cut out rendundant parsing code
* Graph: add group(), add_group(), del_group(), groups()
* Graph: fix css(): 'link', 'label' and 'title' do not need to appear in CSS
* Graph: suppress default attributes from groups, too
* Graph: close "holes" in "arrows" (edges) with line-height & letter-spacing
* Graph: inherit background from page, no border as default
* Graph: as_html() - remove trailing empty tags for shorter output
* Node: add group(), groups(), add_to_groups()
* Node: rename as_txt_node() to as_pure_txt(), document it
* Node: add label() and the handling of the label-attribute
* Node: support "label" as property in autolink/autotitle
* Node: as_txt(): no need to quote ":" and " " in attribute values
* Node: as_html(): quote " " in URLs
* Move as_txt() to As_txt.pm to reduce code size
* Group: keep nodes indexed by their name
* Group: fix as_txt() to quote group name, and include nodes
* Group: fix: add_nodes() did include the group itself by accident
* include examples/base.css for output of syntax.pl
* fix examples/syntax.tpl to have a non-scrolling menu
* add command-line dirnames to syntax.pl
* include t/fun/ - fun with graph-examples
* added Graph::Simple::Path and refactored Edge code - an edge now only
knows as_txt(); The other two, as_html() and as_ascii() are handled by
Path.pm (for each element of the edge seperately)
* more syntax examples
2005-02-07 v0.12 Tels 345 tests - Group, group, group, group the nodes...
* register groups with the graph when adding them
* Parser: parse attributes on groups like: "( Group [ Node ] ) { ... }"
* Parser: parse attributes on edges like: "[ 1 ] -> { ... } [ 2 ]"
* Group: handle attribute "nodeclass" - put nodes into that class
* Node: handle attribute "group" - puts node into that group
* Node: query "node.class" from graph before trying just "node"
* Node: convert literal "\n" in label/name to "<br>"
* Layout: padd around all cells with filler cells (to make group backgrounds
really work)
* Layout: cleanup on group output
* as_txt(): output attributes of a group
* add Graph::Simple::Node::Cell, Graph::Simple::Group::Cell
* moved Graph::Simple::Path to Graph::Simple::Edge::Cell
* Graph: shorten HTML output by combining table cells with colspan=X
* Graph: use CSS child selectors to shorten classnames (and remove
class='fill' or class='' from output)
* Graph: as_html(): fix IDs on labels, lines etc
* Graph: fix layout code for edges with labels: no longer needs position:
relative, allows better copy&paste and is not garbled on scrolling
* syntax.pl: support custom template name
* simplifiy and generalize t/simple.t
* always run test files under -w
* don't use warnings (for older perls)
* remove needless routines in subclasses of "Node"
* use Test::Differences if t/ascii.t fails