Commits

Shlomi Fish committed c4d5dd6

Correct a bug and more tests pass.

Comments (0)

Files changed (111)

Graph-Easy/lib/Graph/Easy/Util.pm

     }
     else
     {
-        return (wantarray ? @{$href}{sort keys( %$href )} : 0);
+        return (wantarray ? @{$href}{sort keys( %$href )} : scalar(keys(%$href)));
     }
 }
 

Graph-Easy/t/copy.t

 
 ( Cities )
 
-[ Berlin ]
 [ Bonn ] --> { fill: blue; } [ Berlin ]
 EOF
 , 'as_txt for 2 nodes');

Graph-Easy/t/easypm.t

 
 ( Cities )
 
+[ Bonn ] --> [ Berlin ]
 [ Berlin ] --> [ Frankfurt ]
 [ Berlin ] --> [ Potsdam ]
-[ Bonn ] --> [ Berlin ]
-[ Cottbus ]
-[ Dresden ]
 [ Frankfurt ] --> [ Dresden ]
 [ Potsdam ] --> [ Cottbus ]
 HERE
   [ Bonn ]
 )
 
+[ Bonn ] --> [ Berlin ]
 [ Berlin ] --> [ Frankfurt ]
 [ Berlin ] --> [ Potsdam ]
-[ Bonn ] --> [ Berlin ]
-[ Cottbus ]
-[ Dresden ]
 [ Frankfurt ] --> [ Dresden ]
 [ Potsdam ] --> [ Cottbus ]
 HERE
-, 'with empty group Cities'); 
+, 'with empty group Cities');
 
 
 #############################################################################
 $graph = Graph::Easy->new('[A]->[B]->[C]->[D]');
 
 $graph->merge_nodes( 'A', 'B' );
-is ($graph->as_txt(), "[ A ] --> [ C ]\n[ C ] --> [ D ]\n[ D ]\n", 'merge worked');
+is ($graph->as_txt(), "[ A ] --> [ C ]\n[ C ] --> [ D ]\n", 'merge worked');
 
 $graph->merge_nodes( 'A', 'C', ' ' );
-is ($graph->as_txt(), "[ A ] { label: A C; }\n\n[ A ] --> [ D ]\n[ D ]\n", 'merge worked');
+is ($graph->as_txt(), "[ A ] { label: A C; }\n\n[ A ] --> [ D ]\n", 'merge worked');
 
 $graph->merge_nodes( 'A', 'D', ' \n ' );
 is ($graph->as_txt(), "[ A ] { label: A C \\n D; }\n\n", 'merge worked');

Graph-Easy/t/graph.t

 is ($graph->nodes(), 2, '2 nodes added');
 is ($graph->edges(), 1, '1 edge');
 
-is ($graph->as_txt(), "[ Berlin ]\n[ Bonn ] --> [ Berlin ]\n", 'as_txt for 2 nodes');
+is ($graph->as_txt(), "[ Bonn ] --> [ Berlin ]\n", 'as_txt for 2 nodes');
 
 is (ref($graph->edge($bonn,$berlin)), 'Graph::Easy::Edge', 'edge from objects');
 is ($graph->edge($berlin,$bonn), undef, 'berlin not connecting to bonn');
 # as_txt() (simple nodes)
 
 is ( $graph->as_txt(), <<'HERE',
-[ Berlin ]
+[ Frankfurt a. M. ] -- train --> [ Bonn ]
 [ Bonn ] --> [ Berlin ]
-[ Frankfurt a. M. ] -- train --> [ Bonn ]
 HERE
 'as_txt() for 3 nodes with 2 edges');
 
 is ($graph->edges (), 3, '3 edges');
 
 is ( $graph->as_txt(), <<'HERE',
-[ Berlin ]
-[ Bonn ] --> [ Berlin ]
 [ Frankfurt a. M. ] -- train --> [ Bonn ]
 [ Schweinfurt ] --> [ Bonn ]
+[ Bonn ] --> [ Berlin ]
 HERE
 'as_txt() for 4 nodes with 3 edges');
 
 is ( $graph->as_txt(), <<'HERE'
 [ Bonn ] { class: cities; }
 
-[ Berlin ]
-[ Bonn ] --> [ Berlin ]
 [ Frankfurt a. M. ] -- train --> [ Bonn ]
 [ Schweinfurt ] --> [ Bonn ]
+[ Bonn ] --> [ Berlin ]
 HERE
 , 'as_txt() for 4 nodes with 3 edges and attributes');
 
 [ Berlin ] { color: blue; }
 [ Bonn ] { color: red; border: none; class: cities; }
 
-[ Bonn ] --> [ Berlin ]
 [ Frankfurt a. M. ] -- train --> [ Bonn ]
 [ Schweinfurt ] --> [ Bonn ]
+[ Bonn ] --> [ Berlin ]
 HERE
 , 'as_txt() for 4 nodes with 3 edges and class attribute');
 
 [ Berlin ] { color: blue; }
 [ Bonn ] { color: red; border: none; class: cities; }
 
-[ Bonn ] --> [ Berlin ]
 [ Frankfurt a. M. ] -- train --> [ Bonn ]
 [ Schweinfurt ] --> [ Bonn ]
+[ Bonn ] --> [ Berlin ]
 HERE
 , 'as_txt() for 4 nodes with 3 edges and graph/node/edge attributes');
 

Graph-Easy/t/txt/10_repair.txt

   [ Server ]
 )
 
-[ 1Check ] --> [ 1Backend ]
-[ 1Check ] --> [ 1Backend ]
-[ 1Database ] --> [ 1Backend ]
-[ 1Database ] --> [ 1Backend ]
 [ 1Proxy ] --> [ 1Check ]
 [ 1Proxy ] --> [ 1Check ]
 [ 1Proxy ] --> { flow: south; } [ 1Database ]
 [ 1Proxy ] --> { flow: south; } [ 1Database ]
 [ 1Proxy ] --> [ 1Server ]
 [ 1Proxy ] --> [ 1Server ]
-[ Check ] --> [ Backend ]
-[ Database ] --> [ Backend ]
 [ Proxy ] --> [ Check ]
 [ Proxy ] --> { flow: south; } [ Database ]
 [ Proxy ] --> [ Server ]
+[ 1Check ] --> [ 1Backend ]
+[ 1Check ] --> [ 1Backend ]
+[ 1Database ] --> [ 1Backend ]
+[ 1Database ] --> [ 1Backend ]
+[ Check ] --> [ Backend ]
+[ Database ] --> [ Backend ]

Graph-Easy/t/txt/18_multiples.txt

 node { background: yellow; }
 
-[ 1Bautzen ] --> [ 1Berlin ]
-[ 1Berlin ] --> [ 1Kassel ]
+[ 1Bonn ] --> [ 1Ulm ]
 [ 1Bonn ] ..> [ 1Berlin ]
 [ 1Bonn ] .-> [ 1Koblenz ]
-[ 1Bonn ] --> [ 1Ulm ]
-[ 1Kassel ]
-[ 1Koblenz ]
+[ 2Bonn ] --> [ 2Ulm ]
+[ 2Bonn ] ..> [ 2Berlin ]
+[ 2Bonn ] .-> [ 2Koblenz ]
+[ Bonn ] --> [ Ulm ]
+[ Bonn ] ..> [ Berlin ]
+[ Bonn ] .-> [ Koblenz ]
+[ 1Berlin ] --> [ 1Kassel ]
 [ 1Ulm ] --> [ 1Bautzen ]
 [ 1Ulm ] --> [ 1Koblenz ]
-[ 2Bautzen ] --> [ 2Berlin ]
 [ 2Berlin ] --> [ 2Kassel ]
-[ 2Bonn ] ..> [ 2Berlin ]
-[ 2Bonn ] .-> [ 2Koblenz ]
-[ 2Bonn ] --> [ 2Ulm ]
-[ 2Kassel ]
-[ 2Koblenz ]
 [ 2Ulm ] --> [ 2Bautzen ]
 [ 2Ulm ] --> [ 2Koblenz ]
-[ Bautzen ] --> [ Berlin ]
 [ Berlin ] --> [ Kassel ]
-[ Bonn ] ..> [ Berlin ]
-[ Bonn ] .-> [ Koblenz ]
-[ Bonn ] --> [ Ulm ]
-[ Kassel ]
-[ Koblenz ]
 [ Ulm ] --> [ Bautzen ]
 [ Ulm ] --> [ Koblenz ]
+[ 1Bautzen ] --> [ 1Berlin ]
+[ 2Bautzen ] --> [ 2Berlin ]
+[ Bautzen ] --> [ Berlin ]

Graph-Easy/t/txt/25_autosplit_empty.txt

 [ | F | ] { class: empty; }
 [ |G| ] { class: empty; }
 
-[ A1 ]
-[ A2 ]
-[ A3 ]
-[ A4 ]
-[ A5 ]
-[ A6 ]
 [ | C | ]
 [ C.2 ] --> [ A1 ]
 [ D.2 ] --> [ A2 ]

Graph-Easy/t/txt/2_autolabel.txt

 [ Bonn ] { label: Bonn (ehemalige Bundeshauptstadt); }
 
 [ Bonn ] -- Acme Travels Incorporated --> [ Frankfurt (Main) / Flughafen ]
-[ Frankfurt (Main) / Flughafen ]

Graph-Easy/t/txt/2_dot.txt

 graph { label: // digraph G {; }
 
-[ Düsburg ]
 [ Kummersbach ] --> [ Düsburg ]

Graph-Easy/t/txt/2_edges.txt

 [ One ] --> [ Two ]
 [ One ] --> [ Two ]
-[ Two ]

Graph-Easy/t/txt/2_flow.txt

 graph { flow: 90; }
 
 [ Left ] --> { end: left; start: left; } [ Right ]
-[ Right ]

Graph-Easy/t/txt/2_graph_label.txt

   labelpos: top;
 }
 
-[ Passau ]
 [ Regensburg ] --> [ Passau ]

Graph-Easy/t/txt/2_invisible_left.txt

 [ ] --> [ Berlin ]
-[ Berlin ]

Graph-Easy/t/txt/2_invisible_right.txt

-[ ]
 [ Bonn ] --> [ ]

Graph-Easy/t/txt/2_label_align.txt

-[ B ]
 [ Long Node Label\l left\r right\c center ] -- A\r long\n edge label --> [ B ]

Graph-Easy/t/txt/2_long_labels.txt

-[ B ]
 [ My\n long\n node\n name ] -- A\n long\n label --> [ B ]

Graph-Easy/t/txt/2_selfloop.txt

 graph { flow: 180; }
 
+[ Start ] --> [ Main ]
 [ Main ] -- Until not done --> [ Main ]
 [ Main ] -- Until not done --> [ Main ]
 [ Main ] -- Until not done --> [ Main ]
-[ Start ] --> [ Main ]

Graph-Easy/t/txt/2_selfloop_flow_down.txt

 graph { flow: 180; }
 
+[ Start ] --> [ Main ]
 [ Main ] -- Until not done --> [ Main ]
 [ Main ] -- Until done --> [ Main ]
-[ Start ] --> [ Main ]

Graph-Easy/t/txt/2nodes.txt

 [ One ] ==> [ Two ]
-[ Two ]

Graph-Easy/t/txt/3_cache_bug.txt

   [ A ]
 )
 
-[ ]
 [ A ] -- C --> { end: north; start: east; } [ B ]
 [ B ] --> [ ]

Graph-Easy/t/txt/3_edge_labels_from_class.txt

 
 [ A ] --> { class: yes; } [ B ]
 [ B ] --> [ C ]
-[ C ]

Graph-Easy/t/txt/3_edge_repair.txt

 )
 
 [ Input ] --> [ Output ]
-[ Network ]
 [ Output ] ==> { end: north; start: south; } [ Network ]

Graph-Easy/t/txt/3_edge_start.txt

 [ A ] --> { start: front; } [ B ]
 [ A ] --> { start: front; } [ C ]
-[ B ]
-[ C ]

Graph-Easy/t/txt/3_flow.txt

 
 [ Enschede ] { flow: left; }
 
+[ Enschede ] --> [ Bielefeld ]
 [ Bielefeld ] --> [ Wolfsburg ]
-[ Enschede ] --> [ Bielefeld ]
-[ Wolfsburg ]

Graph-Easy/t/txt/3_group_align_center.txt

   [ Right\nAligned ]
 ) { align: center; border: none; }
 
+[ Right\nAligned ] -- label\n text --> { align: right; } [ Left\naligned ]
 [ Left\naligned ] --> [ Center\n aligned ]
-[ Right\nAligned ] -- label\n text --> { align: right; } [ Left\naligned ]

Graph-Easy/t/txt/3_invisible_both.txt

 [ ] --> [ Bonn ]
-[ ]
 [ Bonn ] --> [ ]

Graph-Easy/t/txt/3_joining.txt

 [ A ] --> { start: north,0; } [ B ]
 [ A ] --> { start: south,0; } [ C ]
 [ A ] --> { start: north,0; } [ C ]
-[ B ]
-[ C ]

Graph-Easy/t/txt/3_joint.txt

 [ Mannheim ] --> { end: back,0; } [ Weimar ]
 [ Potsdam ] --> { end: back,0; } [ Weimar ]
-[ Weimar ]

Graph-Easy/t/txt/3_lists.txt

-[ Berlin ]
 [ Bonn ] --> [ Berlin ]
 [ Ulm ] --> [ Berlin ]

Graph-Easy/t/txt/3_nodes_5_edges.txt

+[ Default Page ] --> [ Sign Up ]
 [ Default Page ] .-> [ Main Page ]
 [ Default Page ] = > [ Main Page ]
 [ Default Page ] - > [ Main Page ]
-[ Default Page ] --> [ Sign Up ]
-[ Main Page ]
 [ Sign Up ] --> [ Main Page ]

Graph-Easy/t/txt/3_selfloop.txt

-[ End ]
+[ Start ] --> [ Main ]
+[ Main ] -- Until not done --> [ Main ]
 [ Main ] --> [ End ]
-[ Main ] -- Until not done --> [ Main ]
-[ Start ] --> [ Main ]

Graph-Easy/t/txt/3_selfloop_flip.txt

 [ Adenau ] --> [ Monschau ]
+[ Nideggen ] --> [ Monschau ]
 [ Monschau ] --> [ Monschau ]
-[ Nideggen ] --> [ Monschau ]

Graph-Easy/t/txt/3_selfloop_flow_down.txt

 graph { flow: 180; }
 
-[ End ]
+[ Start ] --> [ Main ]
+[ Main ] -- Until not done --> [ Main ]
 [ Main ] --> [ End ]
-[ Main ] -- Until not done --> [ Main ]
-[ Start ] --> [ Main ]

Graph-Easy/t/txt/3_selfloop_flow_left.txt

 graph { flow: 270; }
 
-[ End ]
+[ Start ] --> [ Main ]
+[ Main ] -- Until not done --> [ Main ]
 [ Main ] --> [ End ]
-[ Main ] -- Until not done --> [ Main ]
-[ Start ] --> [ Main ]

Graph-Easy/t/txt/3_selfloop_flow_up.txt

 graph { flow: 0; }
 
-[ End ]
+[ Start ] --> [ Main ]
+[ Main ] -- Until not done --> [ Main ]
 [ Main ] --> [ End ]
-[ Main ] -- Until not done --> [ Main ]
-[ Start ] --> [ Main ]

Graph-Easy/t/txt/3nodes.txt

 [ One ] ==> [ Two ]
-[ Three ]
 [ Two ] - > [ Three ]

Graph-Easy/t/txt/4_2x2nodes.txt

-[ Altona ]
 [ Frankfurt ] --> [ Hof ]
 [ Hamburg ] --> [ Altona ]
-[ Hof ]

Graph-Easy/t/txt/4_att.txt

 [ 3 ] { label: $a = %22%3b%25; }
 
 [ 1 ] --> [ 2 ]
-[ 2 ]
 [ 3 ] --> [ 4 ]
-[ 4 ]

Graph-Easy/t/txt/4_autosplit_offset.txt

 
 [ 1 ] --> [ 23.1 ]
 [ 23.1 ] --> [ 3 ]
-[ 3 ]

Graph-Easy/t/txt/4_collapse.txt

 
 [ A ] -- S P A C E --> [ B ]
 [ A B C ] -- A B C D --> [ X Z Y ]
-[ X Z Y ]

Graph-Easy/t/txt/4_comma.txt

 [ 1 ] --> [ 4 ]
 [ 2 ] --> [ 4 ]
 [ 3 ] --> [ 4 ]
-[ 4 ]

Graph-Easy/t/txt/4_edge_cross.txt

 [ E2 ] --> [ S1 ]
 [ E2 ] --> [ S2 ]
 [ S1 ] --> [ S2 ]
-[ S2 ]

Graph-Easy/t/txt/4_edge_labels.txt

+[ Bonn ] == train ==> [ Berlin ]
+[ Bonn ] -- car --> [ Potsdam ]
 [ Berlin ] .. bus ..> [ Potsdam ]
 [ Berlin ] .- bike .-> [ Ulm ]
-[ Bonn ] == train ==> [ Berlin ]
-[ Bonn ] -- car --> [ Potsdam ]
-[ Potsdam ]
-[ Ulm ]

Graph-Easy/t/txt/4_edge_types.txt

 [ Bingen ] <--> [ Mainz ]
 [ Bischofswerde ] -- test-text --> [ Finsterwalde ]
-[ Finsterwalde ]
-[ Mainz ]

Graph-Easy/t/txt/4_endless_loop_2.txt

 [ 4 ] { offset: 1,0; origin: 3; }
 
 [ 1 ] --> [ 2 ]
-[ 2 ]
 [ 3 ]

Graph-Easy/t/txt/4_flow.txt

-[ Aschaffenburg ]
 [ Passau ] --> { flow: down; } [ Siegen ]
-[ Regensburg ]
 [ Siegen ] --> { flow: left; } [ Aschaffenburg ]
 [ Siegen ] --> { flow: right; } [ Regensburg ]

Graph-Easy/t/txt/4_flow_chain.txt

-[ Berlin ]
+[ Bonn ] --> [ Cottbus ]
 [ Bonn ] --> { flow: forward; } [ Berlin ]
-[ Bonn ] --> [ Cottbus ]
 [ Cottbus ] --> [ Ulm ]
-[ Ulm ]

Graph-Easy/t/txt/4_invisible.txt

 [ You don't see me! ] { shape: invisible; }
 
 [ Bischofswerda ] --> [ You don't see me! ]
-[ Borna ] --> [ Bremen ]
-[ Bremen ]
 [ You don't see me! ] --> [ Bischofswerda ]
 [ You don't see me! ] --> [ Borna ]
+[ Borna ] --> [ Bremen ]

Graph-Easy/t/txt/4_joint.txt

 [ A ] --> { end: south, 0; start: south; } [ C ]
 [ B ] --> { end: south, 0; start: south; } [ C ]
 [ B ] --> [ U ]
-[ U ]

Graph-Easy/t/txt/4_lists.txt

-[ Berlin ]
 [ Bonn ] --> [ Berlin ]
 [ Bonn ] --> [ Frankfurt ]
-[ Frankfurt ]
 [ Ulm ] --> [ Berlin ]
 [ Ulm ] --> [ Frankfurt ]

Graph-Easy/t/txt/4_minlen.txt

 [ Berlin ] --> { minlen: 4; } [ Cottbus ]
 [ Berlin ] --> { minlen: 4; } [ Leipzig ]
 [ Berlin ] --> { minlen: 4; } [ Potsdam ]
-[ Cottbus ]
-[ Leipzig ]
-[ Potsdam ]

Graph-Easy/t/txt/4_near.txt

-[ Berlin ] --> [ Koeln ]
 [ Bonn ] --> [ Berlin ]
 [ Essen ] --> [ Berlin ]
-[ Koeln ]
+[ Berlin ] --> [ Koeln ]

Graph-Easy/t/txt/4_node_edge.txt

 [ test ] { shape: edge; }
 
+[ A ] -- [ test ]
+[ test ] -- [ ]
 [ ] --> [ B ]
-[ A ] -- [ test ]
-[ B ]
-[ test ] -- [ ]

Graph-Easy/t/txt/4_nodes_5_edges.txt

-[ Default Page ] ..> [ Main Page ]
 [ Default Page ] --> [ Sign Up ]
 [ Default Page ] --> [ Test Search ]
-[ Main Page ]
+[ Default Page ] ..> [ Main Page ]
 [ Sign Up ] --> [ Main Page ]
 [ Test Search ] --> [ Sign Up ]

Graph-Easy/t/txt/4_nodes_6_edges.txt

-[ Default Page ] --> [ Main Page ]
-[ Default Page ] --> [ Main Page ]
 [ Default Page ] --> [ Sign Up ]
 [ Default Page ] --> [ Test Search ]
-[ Main Page ]
+[ Default Page ] --> [ Main Page ]
+[ Default Page ] --> [ Main Page ]
 [ Sign Up ] --> [ Main Page ]
 [ Test Search ] --> [ Sign Up ]

Graph-Easy/t/txt/4_nodes_edge.txt

 [ test ] { shape: edge; }
 
 [ A ] -- [ test ]
-[ B ]
 [ C ] --> [ test ]
 [ test ] --> [ B ]

Graph-Easy/t/txt/4nodes.txt

-[ Berlin ] ..> [ Cottbus ]
 [ Bonn ] --> [ Berlin ]
 [ Bonn ] --> [ Frankfurt ]
-[ Cottbus ]
-[ Frankfurt ]
+[ Berlin ] ..> [ Cottbus ]

Graph-Easy/t/txt/5_flow.txt

-[ Berlin ]
+[ Bonn ] --> [ Cottbus ]
 [ Bonn ] --> { flow: forward; } [ Berlin ]
-[ Bonn ] --> [ Cottbus ]
 [ Cottbus ] --> [ Moselkern ]
 [ Moselkern ] --> [ Ulm ]
-[ Ulm ]

Graph-Easy/t/txt/5_group_repair.txt

   [ Server ]
 )
 
-[ Check ] --> [ Backend ]
-[ Database ] --> [ Backend ]
 [ Proxy ] --> [ Check ]
 [ Proxy ] --> { flow: south; } [ Database ]
 [ Proxy ] --> [ Server ]
+[ Check ] --> [ Backend ]
+[ Database ] --> [ Backend ]

Graph-Easy/t/txt/5_group_split.txt

   [ Hagen ]
 )
 
-[ Berlin ] --> [ Frankfurt ]
 [ Bonn ] --> [ Berlin ]
 [ Bonn ] --> [ Ulm ]
+[ Berlin ] --> [ Frankfurt ]
 [ Frankfurt ] --> [ Hagen ]

Graph-Easy/t/txt/5_joint.txt

 [ Hannover ] { flow: down; }
 [ Zwickau ] { offset: 2,-2; origin: Hannover; }
 
+[ Hannover ] --> { start: south; } [ Aachen ]
+[ Hannover ] --> { start: south; } [ Berlin ]
+[ Hannover ] --> { start: south; } [ Cuxhaven ]
 [ Aachen ] --> { end: south, 0; start: south; } [ Zwickau ]
 [ Berlin ] --> { end: south, 0; start: south; } [ Zwickau ]
 [ Cuxhaven ] --> { end: south, 0; start: south; } [ Zwickau ]
-[ Hannover ] --> { start: south; } [ Aachen ]
-[ Hannover ] --> { start: south; } [ Berlin ]
-[ Hannover ] --> { start: south; } [ Cuxhaven ]

Graph-Easy/t/txt/5_joint_label.txt

 [ Buxtehude ] -- travel --> { end: back, 0; } [ Zittau ]
 [ Cottbus ] -- travel --> { end: back, 0; } [ Zittau ]
 [ Dachau ] -- travel --> { end: back, 0; } [ Zittau ]
-[ Zittau ]

Graph-Easy/t/txt/5_long_edge_labels.txt

 [ A ] --> [ B ]
 [ A ] -- very long edge label --> [ E ]
 [ B ] --> [ C ]
+[ E ] -- another very long edge label --> [ A ]
 [ C ] --> [ D ]
 [ D ] --> [ E ]
-[ E ] -- another very long edge label --> [ A ]

Graph-Easy/t/txt/5_offsets.txt

 [ B ] --> [ C ]
 [ C ] --> [ D ]
 [ D ] --> [ E ]
-[ E ]

Graph-Easy/t/txt/5_offsets_2.txt

 [ C ] { offset: 1,1; origin: D; }
 
 [ A ] --> [ B ]
+[ E ] --> [ D ]
 [ B ] --> [ A ]
 [ B ] --> [ C ]
 [ B ] --> [ C ]
 [ D ] --> [ C ]
 [ D ] --> [ C ]
-[ E ] --> [ D ]

Graph-Easy/t/txt/5_rounded.txt

 [ Pullach ] { border: dotted; }
 [ Pullheim ] { border: bold; }
 
-[ Paderborn ]
+[ Pullach ] --> [ Parsing ]
+[ Parsing ] --> [ Pankow\n (Berlin) ]
 [ Pankow\n (Berlin) ] --> [ Pullheim ]
-[ Parsing ] --> [ Pankow\n (Berlin) ]
-[ Pullach ] --> [ Parsing ]
 [ Pullheim ] --> [ Paderborn ]

Graph-Easy/t/txt/6_autosplit_class.txt

 [ 1 ] --> [ A.0 ]
 [ 2 ] --> [ 3 ]
 [ 2 ] --> [ A.0 ]
-[ 3 ]

Graph-Easy/t/txt/6_chain_10_edges.txt

-[ Bautzen ] --> [ Berlin ]
-[ Bautzen ] --> [ Berlin ]
-[ Berlin ] --> [ Kassel ]
+[ Bonn ] --> [ Ulm ]
 [ Bonn ] --> [ Berlin ]
 [ Bonn ] --> [ Koblenz ]
-[ Bonn ] --> [ Ulm ]
-[ Kassel ]
+[ Berlin ] --> [ Kassel ]
 [ Koblenz ] --> [ Berlin ]
 [ Ulm ] --> [ Bautzen ]
 [ Ulm ] --> [ Bautzen ]
 [ Ulm ] --> [ Koblenz ]
+[ Bautzen ] --> [ Berlin ]
+[ Bautzen ] --> [ Berlin ]

Graph-Easy/t/txt/6_chained.txt

-[ Bautzen ] --> [ Berlin ]
-[ Berlin ] --> [ Kassel ]
+[ Bonn ] --> [ Ulm ]
 [ Bonn ] --> [ Berlin ]
 [ Bonn ] --> [ Koblenz ]
-[ Bonn ] --> [ Ulm ]
-[ Kassel ]
-[ Koblenz ]
+[ Berlin ] --> [ Kassel ]
 [ Ulm ] --> [ Bautzen ]
 [ Ulm ] --> [ Koblenz ]
+[ Bautzen ] --> [ Berlin ]

Graph-Easy/t/txt/6_joint.txt

-[ Bonn ] --> [ Prag ]
 [ Hagen ] --> { end: back, 0; } [ Bonn ]
 [ Hamburg ] --> { end: back, 0; } [ Bonn ]
 [ Hanau ] --> { end: back, 0; } [ Bonn ]
 [ Hannover ] --> { end: back, 0; } [ Bonn ]
-[ Prag ]
+[ Bonn ] --> [ Prag ]

Graph-Easy/t/txt/6_multicell.txt

 [ B ] --> [ C ]
 [ C ] --> [ D ]
 [ D ] --> [ C ]
-[ F ]
-[ G ]

Graph-Easy/t/txt/6_ranks.txt

 [ F ] { rank: 0; }
 
 [ A ] --> [ B ]
+[ D ] --> [ E ]
 [ B ] --> [ C ]
+[ E ] --> { end: north; } [ F ]
 [ C ] --> [ D ]
-[ D ] --> [ E ]
-[ E ] --> { end: north; } [ F ]

Graph-Easy/t/txt/6_split_join_loop.txt

 [ B ] --> [ C ]
 [ C ] --> { start: front, 0; } [ X ]
 [ C ] --> { start: front, 0; } [ Y ]
-[ I ] --> [ A ]
 [ X ] --> { end: back, 0; } [ I ]
 [ Y ] --> { end: back, 0; } [ I ]
+[ I ] --> [ A ]

Graph-Easy/t/txt/7_star.txt

-[ Berlin ]
-[ Chemnitz ]
 [ Dachau ] --> [ Berlin ]
 [ Dachau ] --> [ Chemnitz ]
 [ Dachau ] --> [ Frankfurt ]
 [ Dachau ] --> [ Kiel ]
 [ Dachau ] --> [ Ulm ]
 [ Dachau ] --> [ Weimar ]
-[ Frankfurt ]
-[ Kiel ]
-[ Ulm ]
-[ Weimar ]

Graph-Easy/t/txt/7_tree.txt

 [ A1 ] { offset: 2,1; origin: A; }
 [ A23 ] { offset: 2,1; origin: A2; }
 
+[ A ] --> [ A2 ]
 [ A ] --> [ A1 ]
-[ A ] --> [ A2 ]
 [ A ] --> [ A3 ]
 [ A2 ] --> [ A21 ]
 [ A2 ] --> [ A22 ]
 [ A2 ] --> [ A23 ]
-[ A21 ]
-[ A22 ]
-[ A3 ]

Graph-Easy/t/txt/8_align.txt

   [ Right\nAligned ]
 ) { align: right; }
 
-[ A ]
 [ B ] --> [ Left\n align\n no border ]
 [ Center\n aligned text ] -- aligned\n left --> { align: left; } [ Rightmost ]
+[ Right\nAligned ] -- label\n text --> { align: right; } [ Left\naligned ]
 [ Left\n align\n no border ] --> [ center\n align\n no border ]
-[ Right\nAligned ] -- label\n text --> { align: right; } [ Left\naligned ]
 [ center\n align\n no border ] --> [ A ]

Graph-Easy/t/txt/8_chain.txt

+[ Bonn ] --> [ Berlin ]
 [ Berlin ] --> [ Koeln ]
-[ Bonn ] --> [ Berlin ]
-[ Chemnitz ]
-[ Dresden ]
+[ Koeln ] --> [ Frankfurt ]
+[ Frankfurt ] --> [ Hannover ]
 [ Frankfurt ] --> [ Chemnitz ]
 [ Frankfurt ] --> [ Dresden ]
-[ Frankfurt ] --> [ Hannover ]
-[ Hamburg ]
 [ Hannover ] --> [ Hamburg ]
-[ Koeln ] --> [ Frankfurt ]

Graph-Easy/t/txt/8_endless_loop.txt

 [ 1 ] --> [ 2 ]
 [ 1 ] --> [ 3 ]
-[ 2 ] --> [ 3 ]
-[ 3 ]
 [ 3|4 ]
 [ 5|6|7 ]
+[ 2 ] --> [ 3 ]

Graph-Easy/t/txt/8_flow.txt

 
 [ East ] --> [ South ]
 [ South ] --> [ West ]
+[ West ] --> { flow: west; } [ South Too ]
 [ South Too ] --> { flow: down; } [ right (west) ]
-[ West ] --> { flow: west; } [ South Too ]
+[ right (west) ] --> { flow: right; } [ left (south) ]
+[ left (south) ] --> { flow: left; } [ east (default) ]
 [ east (default) ] --> [ final ]
-[ final ]
-[ left (south) ] --> { flow: left; } [ east (default) ]
-[ right (west) ] --> { flow: right; } [ left (south) ]

Graph-Easy/t/txt/8_invisible.txt

 [ One ] { color: white; fill: seagreen; }
 [ Two ] { shape: triangle; }
 
-[ Eight ]
-[ Five ] --> [ Eight ]
 [ Five ] -  Test label - > { color: red; labelcolor: darkslategrey; } [ Seven ]
 [ Five ] --> [ Seven ]
 [ Five ] <==> [ Three ]
-[ Four ]
+[ Five ] --> [ Eight ]
+[ One ] ==> [ Three ]
 [ One ] .. Test\n label ..> [ Four ]
-[ One ] ==> [ Three ]
 [ One ] -- label --> [ Two ]
 [ Seven ] -- [ Eight ]
-[ Six ]
 [ Three ] <.. Test label ..> [ Six ]

Graph-Easy/t/txt/8_labels.txt

 [ One ] { color: white; fill: seagreen; }
 [ Two ] { shape: triangle; }
 
-[ Eight ]
-[ Five ] --> [ Eight ]
 [ Five ] -  Test label - > { color: red; labelcolor: darkslategrey; } [ Seven ]
 [ Five ] --> [ Seven ]
 [ Five ] <==> [ Three ]
-[ Four ]
+[ Five ] --> [ Eight ]
+[ One ] ==> [ Three ]
 [ One ] .. Test\n label ..> [ Four ]
-[ One ] ==> [ Three ]
 [ One ] -- label --> [ Two ]
 [ Seven ] -- [ Eight ]
-[ Six ]
 [ Three ] <.. Test label ..> [ Six ]

Graph-Easy/t/txt/8_optimize_bend.txt

 [ main ] { shape: rect; }
 [ make_string ] { label: make a\n string; }
 
-[ cleanup ]
+[ main ] ..> [ init ]
+[ main ] --> [ parse ]
+[ main ] -- Testlabel --> [ cleanup ]
+[ main ] -  100 times - > { color: red; } [ printf ]
+[ init ] --> [ make_string ]
+[ parse ] --> [ execute ]
 [ execute ] --> { color: red; } [ compare ]
 [ execute ] --> [ make_string ]
-[ init ] --> [ make_string ]
-[ main ] -- Testlabel --> [ cleanup ]
-[ main ] ..> [ init ]
-[ main ] --> [ parse ]
-[ main ] -  100 times - > { color: red; } [ printf ]
-[ parse ] --> [ execute ]
-[ printf ]

Graph-Easy/t/txt/9_chain.txt

+[ Bonn ] --> [ Berlin ]
+[ Berlin ] --> [ Koeln ]
 [ Berlin ] --> [ Cottbus ]
-[ Berlin ] --> [ Koeln ]
-[ Bonn ] --> [ Berlin ]
-[ Chemnitz ]
-[ Cottbus ]
-[ Dresden ]
+[ Koeln ] --> [ Frankfurt ]
+[ Frankfurt ] --> [ Hannover ]
 [ Frankfurt ] --> [ Chemnitz ]
 [ Frankfurt ] --> [ Dresden ]
-[ Frankfurt ] --> [ Hannover ]
-[ Hamburg ]
 [ Hannover ] --> [ Hamburg ]
-[ Koeln ] --> [ Frankfurt ]

Graph-Easy/t/txt/9_cross.txt

 [ B|I ] { offset: 32,0; origin: A; }
 [ C | D||E ] { offset: 0,1; origin: A; }
 
-[ A ] --> [ BI.0 ]
-[ A ] --> [ BI.1 ]
-[ BI.1 ] --> [ I ]
-[ I ] --> [ Z ]
 [ U ] --> [ A ]
 [ U ] --> { start: north; } [ I ]
-[ Z ]
+[ A ] --> [ BI.1 ]
+[ A ] --> [ BI.0 ]
+[ I ] --> [ Z ]
+[ BI.1 ] --> [ I ]

Graph-Easy/t/txt/9_flow_south.txt

 [ A ] --> [ A6 ]
 [ A ] --> [ A7 ]
 [ A ] --> [ A8 ]
-[ A1 ]
-[ A2 ]
-[ A3 ]
-[ A4 ]
-[ A5 ]
-[ A6 ]
-[ A7 ]
-[ A8 ]

Graph-Easy/t/txt/dot/10_numbers.txt

   title: G;
 }
 
-[ -1. ]
 [ -100 ] --> [ 123.1230 ]
 [ .1 ] --> [ -1. ]
 [ .99 ] --> [ 0. ]
-[ 0. ]
 [ 0.99 ] --> [ 12.88 ]
 [ 00019.1001 ] --> [ 1000. ]
-[ 1000. ]
-[ 12.88 ]
-[ 123.1230 ]

Graph-Easy/t/txt/dot/2_bool.txt

   title: G;
 }
 
-[ Berlin ]
 [ Bonn ] --> [ Berlin ]

Graph-Easy/t/txt/dot/2_comment_inside_attr.txt

 [ a ] { label: a; }
 
 [ a ] --> [ b ]
-[ b ]

Graph-Easy/t/txt/dot/2_graph_label_bottom.txt

 }
 
 [ Köln ] --> [ Stralsund ]
-[ Stralsund ]

Graph-Easy/t/txt/dot/2_ignore.txt

 }
 
 [ node1 ] --> [ node2 ]
-[ node2 ]

Graph-Easy/t/txt/dot/2_no_spaces.txt

   type: undirected;
 }
 
-[ berlin ]
 [ bonn ] -- [ berlin ]

Graph-Easy/t/txt/dot/2_nospace.txt

   title: mike;
 }
 
-[ michael ]
 [ mike ] --> [ michael ]

Graph-Easy/t/txt/dot/2_ports.txt

 }
 
 [ north ] --> { end: west; start: east; } [ south ]
-[ south ]

Graph-Easy/t/txt/dot/2_square_bracket_in_attr.txt

 [ a ] { label:  ] ; }
 
 [ a ] --> [ b ]
-[ b ]

Graph-Easy/t/txt/dot/2_strict.txt

   title: G;
 }
 
-[ Köln ]
 [ Wolfsbüttel ] --> [ Köln ]

Graph-Easy/t/txt/dot/3_graph_label_long.txt

   title: GRAPH_0;
 }
 
+[ Köln ] --> [ Bonn ]
 [ Bonn ] --> [ Koblenz ]
-[ Koblenz ]
-[ Köln ] --> [ Bonn ]

Graph-Easy/t/txt/dot/3_ids.txt

 
 [ 123 ]
 [ abc ] --> [ test ]
-[ test ]

Graph-Easy/t/txt/dot/3_output_lone.txt

 }
 
 [ a ] --> [ b ]
-[ b ]
 [ c ]

Graph-Easy/t/txt/dot/5_scope_atr.txt

 [ b ] --> [ u ]
 [ c ] --> [ u ]
 [ d ] --> [ u ]
-[ u ]

Graph-Easy/t/txt/dot/5_scopes.txt

 [ b ] --> [ u ]
 [ c ] --> [ u ]
 [ d ] --> [ u ]
-[ u ]

Graph-Easy/t/txt/dot/5_scopes_chain.txt

 [ b ] --> [ o ]
 [ c ] --> [ o ]
 [ d ] --> [ o ]
-[ o ]

Graph-Easy/t/txt/dot/5_scopes_uni.txt

 [ b ] -- [ o ]
 [ c ] -- [ o ]
 [ d ] -- [ o ]
-[ o ]

Graph-Easy/t/txt/dot/6_2_cluster.txt

 
 [ a ] --> [ b ]
 [ b ] --> [ q ]
-[ p ] --> [ q ]
 [ q ] --> [ r ]
 [ r ] --> { style: bold; } [ a ]
 [ r ] --> [ s ]
 [ s ] --> [ p ]
+[ p ] --> [ q ]

Graph-Easy/t/txt/dot/6_comments.txt

 [ a ] --> [ b ]
 [ a ] --> [ c ]
 [ a ] --> [ d ]
+[ my node /* not a comment */ ] --> [ b ]
 [ b ] --> [ u ]
 [ c ] --> [ u ]
 [ d ] --> [ u ]
-[ my node /* not a comment */ ] --> [ b ]
-[ u ]

Graph-Easy/t/txt/dot/9_back.txt

 }
 
 [ 0 ] --> [ 11 ]
+[ 5 ] --> [ 6 ]
+[ 5 ] --> [ 8 ]
+[ 11 ] --> [ 1 ]
 [ 1 ] --> [ 10 ]
 [ 1 ] --> [ 2 ]
 [ 10 ] --> [ 6 ]
-[ 11 ] --> [ 1 ]
 [ 2 ] --> [ 3 ]
 [ 3 ] --> [ 8 ]
-[ 5 ] --> [ 6 ]
-[ 5 ] --> [ 8 ]
-[ 6 ]
-[ 8 ]

Graph-Easy/t/txt/dot/9_edge_styles.txt

 [ A ] --> { style: bold; } [ B ]
 [ A ] --> { style: bold; } [ F ]
 [ B ] --> { style: bold; } [ C ]
+[ F ] --> { style: bold; } [ G ]
 [ C ] --> { style: bold; } [ D ]
+[ G ] --> { style: bold; } [ H ]
 [ D ] --> { style: bold; } [ E ]
-[ F ] --> { style: bold; } [ G ]
-[ G ] --> { style: bold; } [ H ]
 [ H ] --> { style: bold; } [ I ]

Graph-Easy/t/txt/dot/9_stacking.txt

 }
 
 [ 0 ] --> [ 11 ]
+[ 11 ] --> [ 1 ]
 [ 1 ] --> [ 10 ]
 [ 1 ] --> [ 2 ]
 [ 10 ] --> [ 6 ]
-[ 11 ] --> [ 1 ]
 [ 2 ] --> [ 3 ]
 [ 3 ] --> [ 8 ]
+[ 8 ] --> [ 5 ]
 [ 5 ] --> [ 6 ]
-[ 6 ]
-[ 8 ] --> [ 5 ]

Graph-Easy/t/txt/gdl/2_bottom_to_top.txt

 node { align: left; }
 
 [ A ] --> [ B ]
-[ B ]

Graph-Easy/t/txt/gdl/2_left_to_right.txt

 node { align: left; }
 
 [ A ] --> [ B ]
-[ B ]

Graph-Easy/t/txt/gdl/2_right_to_left.txt

 node { align: left; }
 
 [ A ] --> [ B ]
-[ B ]

Graph-Easy/t/txt/gdl/2_top_to_bottom.txt

 node { align: left; }
 
 [ A ] --> [ B ]
-[ B ]