Graph-Easy
view release on metacpan or search on metacpan
+ clarify rules when to quote, escape and encode
+ only decode %xx for xx between 0x20 and 0x7e (to stop exploits)
* add Graph::Easy::Parser::Graphviz - parse graphviz text and convert it
2006-02-21 v0.42 Tels 1674 tests
* add the missing testfiles to MANIFEST
* add a few examples to the doc
* remove the static classes "l" (a) and "i" (img) - these can be styled
by CSS selectors, so there is no need for them.
* as_html:
+ use unicode chars for filled/closed arrow heads
+ fix garbled class names on undirected edges (caused by removing "v")
+ fix output of default left-aligned group labels and add test for that
+ output "<br \>" instead of "\n <br \>", because due to
"whitespace: nowrap;" this did insert spurious spaces before each line
break, throwing center-aligned labels off-center.
* as_graphviz:
+ output correct minlen
* Parser:
+ Reverse the removing of trailing/leading "|" in autosplit nodes,
introduced in v0.34.
[|G|] is " ", "G", " ", and not just "G". The unconditional removal
of leading/trailing empty parts meant you could never have an empty
trailing part, ever. Fixes also the regression from todos/hash.txt
no longer working. Adjust doc to reflect this change.
+ add more tests for trailing/leading empty parts.
* Layout.pm:
+ typo: {_chain} vs. {chain} (Thanx Jim Cromie)
+ don't use alarm when under the debugger (Thanx Jim Cromie)
2006-02-05 v0.41 Tels 1670 tests
* use Module::Install and bundle it in inc/
* add "point-style: invisible" for very small, invisible nodes - nodes with
"shape: invisible;" will still have a minimum size.
* add support for '\l', '\r' and '\c' as line breaks to align individual
label lines left, right or center
* as_ascii:
+ support proper alignment on edge labels
* as_graphviz():
+ fix invisible nodes to not show their label
+ add support for nodes with "shape: point;"
* t/graphviz.t: reduce the number of unnec. calls to as_graphviz()
* as_html():
+ use white-space: nowrap; (not "pre")
+ add support for \l, \r, \c and don't include text-align twice
* Node:
+ remove the unused and undocumented "noquote" param from as_html()
* Graph:
+ add: add_edge_once(): add an edge from A to B only once
(Thanx to Florian Lindner for the suggestion!)
2006-01-29 v0.40 Tels 1652 tests
* add attribute:
+ "invisible" as edge style
+ "minlen" - for edges (minimum distance in cells)
+ "align" - alignment for graph, group, edge and node labels
* General:
+ fix Makefile.PL to work with newer YAML
+ avoid duplicate code when dealing with labels and dimensions
+ empty attribute-parts on autosplit nodes work now:
[ A|B ] { class: |legend; }
will put B into class 'legend' and leave the class of A alone
[ A|B ] { class: legend|; }
will put A into class 'legend' and leave the class of B alone
[ A|B ] { class: legend; }
will put A *and* B into class 'legend'
+ _class_styles(): use correct indent instead of hard-coded ' '
* Edge:
* start_port()/end_port(): + remove spaces to normalize result
+ return list in list context
* Node:
+ add nodes_sharing_end(), is_anon()
+ remove place() from public API (is now _do_place())
+ allow spaces in set_attribute('size', '9 , 8')
* Node::Cell:
+ add a group() method to make things like $cell->group() easier
* Group:
+ is also a Graph::Easy, to inherit from it (for nesting)
+ find right-most cell for label if "align: right"
+ rename find_label_cell() to _find_label_cell() (is internal use only)
* Graph:
+ add use_class(), and use it instead of hard-coded class names
+ due to bad caching, one couldn't set the node size as class-attribute
+ weaken() is costly and O(N), so avoid it whenever possible.
Graph creation and destroy are now O(1) again. Creating a graph with
N nodes and N-1 edges takes (bench/stress.pl):
N 0.39 0.39 | 0.40 0.40
Create Destroy | Create Destroy
----------------------------|------------------------
4000 0.35 0.23 | 0.31 0.12
8000 0.77 0.68 | 0.61 0.21
16000 1.91 2.26 | 1.19 0.48
32000 9.32 8.02 | 2.32 0.78
* Parser:
+ add use_class() to use user-provided classes for generated objects
+ referencing an (empty) part of an autosplit node before the autosplit
node itself would create wrongly a stray node
+ simplify group code ($graph->add_group() does everything nec. already)
+ store labels for autosplit nodes not in the label attribute, but
separately. This fixes the problem that you couldn't put a node
(resulting from an autosplit) into a class and set a label on the
class - the node would always show the part name as label. In addition
that fixes the long-standing bug that as_txt() would output stray labels
for autosplit nodes.
+ parts in an autosplit node are relative to their preceding part, not
to the first part. This enables setting columns/rows/size on parts
and the other parts will flow/adjust properly.
+ set the basename property on the first part in an autosplit node,
enabling proper as_txt() output of it.
* Layouter:
+ implement the same spacing rules between nodes for end points as
0.39 did for start points: edges joining up to a node work now
+ only use 3 cells space when there are more than one node sharing
the same port (was "more than zero")
+ fix a problem when placing nodes without an edge object resulting in
a crash
+ repair edges outside of groups, as well as edges that end at a corner
+ multi-celled nodes in spliced layouts (e.g. with group fillers)
did not preserve their filler-cells correctly
* as_txt():
+ clean up nodes after output so that a following as_graphviz() does work
* as_graphviz():
+ fix links involving groups: lhead/ltail were swapped
+ generate shorter invisible node names ("A,south,0" vs "A,south,0,0")
+ do not create invisible joint-nodes when there is only one edge sharing
the start/end port
( run in 2.464 seconds using v1.01-cache-2.11-cpan-5837b0d9d2c )