Graph-Easy
view release on metacpan or search on metacpan
+ support "status" attribute for subgraphs
+ support "textmode" attribute for nodes
+ support "orientation" attribute on graphs
+ support "invisible" on nodes
+ handle "colorentry 7: ..." (more than one space)
+ port_sharing, inport_sharing and outport_sharing => autojoin/autosplit
+ fix attribute remapping to go through custom filter
+ strip out \\f- (hor line), \\f01 (colors) for now until we can
support them for real
+ improve detection of multi-line labels
+ better support for node shapes
+ handle both "0x0c" (aka ^L) and \\f in input
* as_vcg()/as_gdl():
+ remap flow to orientation for graph flows
+ remap align to textmode
+ output class attributes for edges/nodes
+ support "invisible" nodes
* as_graphviz():
+ handle "align" attribute on nodes properly
* unify error handling for unknown attributes
* remove Build.PL support (updated Module::Build to 0.71)
2008-03-16 v0.61 Tels 2778 tests
* graph-easy:
+ reject unknown input format specifications
+ support --from_vcg and --from_gdl, too
* various POD fixes
* relax rules for custom attributes by also allowing digits anywhere
* fix bug #32206: Fix for as_vcg.t test failures when disk io is very slow
* fix bug #31958: Missing methods in Edge class
+ add as_ascii() (and simplify it)
+ add as_txt() stub (require Graph::Easy::As_txt and call _as_txt)
+ add nodes()
+ remove the to_nodes() and from_nodes() POD entries
* disallow border attributes on edges (it was ignored in all output formats)
* make it possible to call Graph::Easy->new('[A]->[B]');
* add:
+ $graph->copy() - clone the entire graph
+ get_custom_attributes()
+ merge_nodes() takes a third parameter: the string to join the label
of the second node to the label of the first node (thanx Brad Bowman!)
* Parser/Graphviz:
+ handle "border: 0"
+ handle graph attributes: maxiter, minquit and pagedir
+ handle edge attribute: weight
+ better parsing of attributes on HTML-like labels (no longer generates
bogus attribute names like "balign" and warns about unknown ones)
+ convert <BR/> in HTML-like labels to line breaks
+ re-connect edges between nodes with HTML-like labels to the generated
autosplit parts (formerly, these edges were simply lost)
* Parser/VGC:
+ attributes like "node.color:" are valid for all following nodes only
* as_graphviz():
+ suppress style and peripheries for borderwidth == 0
2007-11-19 v0.60 Tels 2700 tests
* Base:
+ prepend 'Warning: ' to warnings
* Graph::Easy:
+ add add_anon_node()
+ _class_styles(): allow extra class names in overlay (for SVG)
+ fix typo in SYNOPSIS (thanx skim!)
* Graph::Easy::Node:
+ set attributes for origin/offset properly, too, so that get_attribute()
works for these (Thanx Amanda B Hickman!)
+ allow numbers on custom attributes so "infoname1" in VCG works correctly
* Parser:
+ warn on nodes with offset, but no origin (Thanx Amanda B Hickman!)
* Parser/VCG:
+ allow "layoutalgorithm" (Thanx Sid Touati for the report!)
+ handle 'classname 1: "foo"' correctly (Thanx Sid Touati again!)
* Layout:
+ remove one call to ->attribute() per Node by re-using the shape
+ fix A* boundaries cache: create it if it doesn't exist yet, otherwise
edges went missing (see t/in/3_cache_bug.txt for an example)
* as_vcg:
+ output classname attributes correctly (Thanx Sid Touati!)
* as_graphviz:
+ remap "\c" to "\n" since graphviz doesn't know "\c"
* Tests:
+ fix test failures in t/graphml.t when second changes while comparing
as_graphml() and as_graphml_file() output
+ fix test failures with Pod-Coverage v0.19 - a few alias routines in
Graph::Easy::Node need to have POD replicated from Graph::Easy
+ require Pod-Coverage v0.19
2007-09-10 v0.59 Tels 2686 tests
* fix test failures in t/graphml.t (oops)
2007-09-09 v0.58 Tels 2686 tests
* add Graph/Easy/As_graphml.pm - output graph as GraphML text
* bin/graph-easy:
+ make "graph-easy --png input.txt output.png" work
+ fix POD structure for example outputs
+ expand section about conversion limits and problems
* Parser: speed up all parsers by:
+ making the regexp for empty/commented lines simpler and by combining
two regexps to replace/remove tabs and 0x0d into one tr// (~ 5%)
+ cache regexps needed for _parse_attributes() as these calls can be
expensive and occur frequently per graph (~ 10% for Graphviz)
* Parser/VCG:
+ about 3x as fast by swapping out the matchstack while we are in
matching multi-line labels. The speedup depends on how many lines
are in multi-line labels compared to the rest of the graph.
* Graph:
+ fix rename_node() to work with plain node names
* Graph::Easy and Graph::Easy::Group:
+ add: root_node(), type()
* Base:
+ add:
+ catch_messages(), catch_errors(), catch_warnings(), errors(), warnings()
* Layout:
+ add a stub for force-directed layouts (doesn't work yet)
+ fix bug #29039: hang in path-straighten code (Thanx mperilstein!)
(also fixes the hang reported in bug #27759)
* as_html:
+ fix undef warning in Graph/Easy.pm line 1038
2007-08-12 v0.57 Tels 2673 tests
* bin/graph-easy:
+ don't die on non-fatal parser errors (good for unknown dot attributes)
* Graph: added del_node(), del_edge(), merge_nodes()
* Graph: edge(X,Y) returns list of all edges from X to Y in list context
* Node: add incoming(), outgoing()
* Node/Edge: setting an attribute resets the size cache to force a re-calc
(the node should grow/shrink when you change the label)
* fix an undef warning in Edge/Cell line 713
* streamline printfb_line() and use it whenever possible
* Node: more rebust detection of class in set_attribute (no longer depends
on blessed class name)
* Node: add attribute "rotate"
* preserve cell sizes after as_ascii()/as_boxart() for next call
(multiple calls to as_ascii()/as_boxart() in a row did grow node-heights
by 3 every iteration)
2005-10-30 v0.31 Tels 1171 tests
* require at least Perl 5.8.0 (we need proper Unicode support)
* Edge.pm: remove unnec. _formatted_label()
* fix examples in t/fun and t/syntax
* include newline before first =head1 (Thanx to Ivan Tubert-Brohman!)
* fix package name in As_ascii.pm
* As_ascii: add _u8() (for box-art)
* add: as_boxart(), as_boxart_file(), as_boxart_html()
* add examples/as_boxart
* examples/as_*: input utf8 from STDIN
* Parser: do a binmode ':utf8' on input files
* support "graph { output: boxart; }"
* add some X<> keywords for POD indexing
* Graph: you can call get_attribute('attribute'), too (the class is now
optional and defaults to 'graph' if missing)
* Graph: you can do set_attribute('attribute','value'), too.
* added attributes:
+ edgeclass for groups
+ font-size for graphs, groups, nodes and edges
+ text-style for graphs, groups, nodes and edges
+ arrow-style: none for edges
* clarify that "label-color" falls back to "color" if unspecified
* setting "edge { style: X; }" changes the style for all solid edges to X
* Node: add parent() - return parent object (group or graph)
* Parser: throw correct error message for unknown attribute names
* horizontal straight, non-short edges were missing their arrows
* as_txt(): fix output of undirected edges (" -- " vs. " -- <")
* as_txt(): "origin" and "offset" attributes were missing in output
* handle a label of "0" correctly
* as_html(): render edge cross sections with the correct styles and colors
* as_html(): do not output invalid CSS definitions for edges (style, label
link, title etc)
* as_html(): setting a color on a node with a link works correctly now
* as_html(): 'autolink' and 'link' on edges correctly create links
* as_html(): 'title' on edges inserts a mouse-over title on the edge label
* as_html(): remove trailing empty <tr></tr> pairs
* as_html(): put the "empty-cells" definition inside table.graph
* as_html(): create links on graph label (caption) if requested
* as_html(): include the graph label into the table, this looks more
consistent than the <caption>, which placed it floating above
or below the graph
* as_html(): repaired the output of group cells (see t/fun/0131.txt)
* as_ascii(): do not draw border for nodes with "shape: none;"
* as_graphviz(): nodes with shape none work now correctly
* as_graphviz(): color of edge labels falls back to edge color if no
label-color is specified (was formerly rendered black)
* _css_styles(): inplement $overlay support (add custom attributes) and
skip the border-attribute generation if it matches $skip
(both fixes are mainly for SVG output)
* setting attributes on Edges/Nodes/Groups invalidates a former layout
2005-09-23 v0.30 Tels 1114 tests - Draw, draw, draw, draw the corners...
* ascii.t could fail on very slow machines
* fix pod/t. and pod_cov.t when the Pod::Test modules are not installed
* fix as_ascii_html() to end with "</pre>"
* as_html(): do not combine non-empty cells
2005-09-18 v0.29 Tels 1113 tests - Draw, draw, draw, draw the corners...
* add attribute "label-pos" to class "graph"
* remove only quotation marks in attributes when they are both at the start
and end of the text. So "label: 2';" will work correctly now.
* as_html(): work-around for IE not displaying edge corner pieces
* as_html(): put caption below graph if label-pos: bottom
* as_html(): use remap_attributes()
* as_html(): correctly output nodes with "shape: none;"
* as_html(): encode ' in links to %27
* as_html(): do not combine cells with a set border (this produces incorrect
output)
* as_html_file(): set correct document charset, and <title> tag
* as_ascii(): output graph label, below or above, according to label-pos
* as_graphviz(): remap border-styles, add support for border-style: double
* as_graphviz(): handle attributes in node, edge and group classes, too
* as_graphviz(): handle graph attributes: label-pos, label
* as_graphviz(): skip over graph attributes: gid, autolink etc
* as_graphviz(): fix output of groups
* as_graphviz(): fix output of graph border and style: none
* as_txt(): do not list nodes twice in output of groups with 'nodeclass'
* Graph: set_attributes() also goes via set_attribute(), e.g. properly
checking arguments, handling "gid", decomposing "border" into
border-(style|color|width) etc.
* default background attribute is ''
* drop node shapes:
egg (looks ugly, and impossible to support except in graphviz and SVG)
doubleoctagon (already done by "shape: octagon; border-style: double")
* optimize Graph::Easy::Group::Cell::_set_type, makes complex layouts with
groups about 10% faster overall
* remove unnec. routines in Graph::Easy::Group::Cell
* streamline $graph->groups() in list context
* Layout: Nodes are not placed next to each other (unless offset: is set)
* Layout: consider HOR and VER edge pieces running alongside a node as
potential start fields with penalty
* Edge/Cell: export EDGE_NO_M_MASK
* Node: add backgroud() routine that finds out the real background (for
groups etc)
* add POD tests via Test::POD (t/pod.t)
* add POD coverage tests via Test::POD::Coverage (t/pod_cov.t)
* 100% POD coverage for Nodes, Groups, Edges and Graph::Easy
* move build/ dir to Graph::Easy::Manual
2005-09-05 v0.28 Tels 1058 tests - Offset, offset, offset, offset the position...
* fix LIMITATIONS section in POD
* fix POD in Graph::Easy::Attributes
* fix testsuite to match reality
* as_html(): fix output for groups
* as_html(): combine equal table cells to shorten output (by 10% or so)
* as_html(): remap "fill" to "background" for classes (especially "graph")
* as_html(): caption gets graph's background as background
( run in 1.759 second using v1.01-cache-2.11-cpan-39bf76dae61 )