ruby-graphviz 0.8.0 → 0.8.1

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog CHANGED
@@ -1,3 +1,6 @@
1
+ 0.8.1 :
2
+ * Documentation
3
+
1
4
  0.8.0 :
2
5
  * Add all the features of the current graphviz version
3
6
 
@@ -0,0 +1,20 @@
1
+ $:.unshift( "../lib" );
2
+ require "graphviz"
3
+
4
+ g = GraphViz::new( "structs", "output" => "png", :path => ARGV[0] )
5
+
6
+ g.node["shape"] = "plaintext"
7
+
8
+ g.add_node( "HTML" )
9
+
10
+ g.add_node( "struct1", "html" => '<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0"> <TR><TD>left</TD><TD PORT="f1">mid dle</TD><TD PORT="f2">right</TD></TR> </TABLE>>]; struct2 [label=< <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0"> <TR><TD PORT="f0">one</TD><TD>two</TD></TR> </TABLE>')
11
+
12
+ g.add_node( "struct2", "html" => '<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0"> <TR><TD PORT="f0">one</TD><TD>two</TD></TR> </TABLE>' )
13
+ g.add_node( "struct3", "html" => '<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="4"> <TR> <TD ROWSPAN="3">hello<BR/>world</TD> <TD COLSPAN="3">b</TD> <TD ROWSPAN="3">g</TD> <TD ROWSPAN="3">h</TD> </TR> <TR> <TD>c</TD><TD PORT="here">d</TD><TD>e</TD> </TR> <TR> <TD COLSPAN="3">f</TD> </TR> </TABLE>' )
14
+
15
+ g.add_edge( "struct1:f1", "struct2:f0" )
16
+ g.add_edge( "struct1:f2", "struct3:here" )
17
+
18
+ g.add_edge( "HTML", "struct1" )
19
+
20
+ g.output( "file" => "HTML-Labels.png" )
@@ -0,0 +1,97 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift( "../lib" );
4
+ require "graphviz"
5
+
6
+ g = nil
7
+ if ARGV[0]
8
+ g = GraphViz::new( "G", "output" => "png", "path" => ARGV[0] )
9
+ else
10
+ g = GraphViz::new( "G", "output" => "png" )
11
+ end
12
+
13
+ g["rankdir"] = "LR"
14
+ g.node["shape"] = "ellipse"
15
+ g.edge["arrowhead"] = "normal"
16
+
17
+ [
18
+ "box",
19
+ "boxbox",
20
+ "lbox",
21
+ "lboxlbox",
22
+ "rbox",
23
+ "rboxrbox",
24
+ "olbox",
25
+ "olboxolbox",
26
+ "orbox",
27
+ "orboxorbox",
28
+ "obox",
29
+ "oboxobox",
30
+ "crow",
31
+ "crowcrow",
32
+ "lcrow",
33
+ "lcrowlcrow",
34
+ "rcrow",
35
+ "rcrowrcrow",
36
+ "diamond",
37
+ "diamonddiamond",
38
+ "ldiamond",
39
+ "ldiamondldiamond",
40
+ "rdiamond",
41
+ "rdiamondrdiamond",
42
+ "oldiamond",
43
+ "oldiamondoldiamond",
44
+ "ordiamond",
45
+ "ordiamondordiamond",
46
+ "odiamond",
47
+ "odiamondodiamond",
48
+ "dot",
49
+ "dotdot",
50
+ "odot",
51
+ "odotodot",
52
+ "inv",
53
+ "invinv",
54
+ "linv",
55
+ "linvlinv",
56
+ "rinv",
57
+ "rinvrinv",
58
+ "olinv",
59
+ "olinvolinv",
60
+ "orinv",
61
+ "orinvorinv",
62
+ "oinv",
63
+ "oinvoinv",
64
+ "none",
65
+ "nonenone",
66
+ "normal",
67
+ "normalnormal",
68
+ "lnormal",
69
+ "lnormallnormal",
70
+ "rnormal",
71
+ "rnormalrnormal",
72
+ "olnormal",
73
+ "olnormalolnormal",
74
+ "ornormal",
75
+ "ornormalornormal",
76
+ "onormal",
77
+ "onormalonormal",
78
+ "tee",
79
+ "teetee",
80
+ "ltee",
81
+ "lteeltee",
82
+ "rtee",
83
+ "rteertee",
84
+ "vee",
85
+ "veevee",
86
+ "lvee",
87
+ "lveelvee",
88
+ "rvee",
89
+ "rveervee"
90
+ ].each { |s|
91
+ p = "p_" << s
92
+ g.add_node( p, "shape" => "point" )
93
+ g.add_node( s )
94
+ g.add_edge( p, s, "arrowhead" => s )
95
+ }
96
+
97
+ g.output()
@@ -0,0 +1,15 @@
1
+ #!/bin/sh
2
+
3
+ ruby sample01.rb $1 > sample01.png
4
+ ruby sample02.rb $1 > sample02.png
5
+ ruby sample03.rb $1 > sample03.png
6
+ ruby sample04.rb $1 > sample04.png
7
+
8
+ ruby sample07.rb $1 > sample07.png
9
+ ruby sample08.rb $1 > sample08.png
10
+ ruby sample09.rb $1 > sample09.png
11
+
12
+ ruby sample11.rb $1 > sample11.png
13
+
14
+ ruby shapes.rb $1 > shapes.png
15
+ ruby arrowhead.rb $1 > arrowhead.png
data/examples/p2p.rb ADDED
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift( "../lib" );
4
+ require "graphviz"
5
+
6
+ g = nil
7
+ if ARGV[0]
8
+ g = GraphViz::new( "G", "output" => "png", "path" => ARGV[0], :use => "circo" )
9
+ else
10
+ g = GraphViz::new( "G", "output" => "png" )
11
+ end
12
+
13
+ c0 = g.add_graph( "cluster0" )
14
+ c0["label"] = "Environnement de Brad !"
15
+ c0["style"] = "filled"
16
+ c0["color"] = "blue"
17
+
18
+ ja = c0.add_node( "Jennifer_Aniston", :style => "filled", :color => "red" )
19
+ bp = c0.add_node( "Brad_Pitt", :style => "filled", :color => "white" )
20
+ aj = c0.add_node( "Angelina_Jolie", :style => "filled", :color => "green" )
21
+
22
+ c0.add_edge( ja, bp ) # On ete mariés
23
+ c0.add_edge( bp, aj ) # Sont ensemble
24
+
25
+ jv = g.add_node( "John_Voight", :label => "John Voight", :shape => "rectangle" )
26
+ md = g.add_node( "Madonna" )
27
+ gr = g.add_node( "Guy_Ritchie" )
28
+
29
+ g.add_edge( aj, jv ) # est la fille de
30
+ g.add_edge( jv, aj ) # est le pere de
31
+ g.add_edge( bp, jv, :color => "red", :label => "Est le beau fils de" ) # Beau fils
32
+ g.add_edge( bp, gr )
33
+ g.add_edge( gr, md )
34
+
35
+ g.output
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift( "../lib" );
4
+ require "graphviz"
5
+
6
+ g = nil
7
+ if ARGV[0]
8
+ g = GraphViz::new( "G", :path => ARGV[0] )
9
+ else
10
+ g = GraphViz::new( "G" )
11
+ end
12
+
13
+ main = g.add_node( "main" )
14
+ parse = g.add_node( "parse" )
15
+ execute = g.add_node( "execute" )
16
+ init = g.add_node( "init" )
17
+ cleanup = g.add_node( "cleanup" )
18
+ make_string = g.add_node( "make_string" )
19
+ printf = g.add_node( "printf" )
20
+ compare = g.add_node( "compare" )
21
+
22
+ g.add_edge( main, parse )
23
+ g.add_edge( parse, execute )
24
+ g.add_edge( main, init )
25
+ g.add_edge( main, cleanup )
26
+ g.add_edge( execute, make_string )
27
+ g.add_edge( execute, printf )
28
+ g.add_edge( init, make_string )
29
+ g.add_edge( main, printf )
30
+ g.add_edge( execute, compare )
31
+
32
+ g.output( :output => "png" )
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift( "../lib" );
4
+ require "graphviz"
5
+
6
+ g = nil
7
+ if ARGV[0]
8
+ g = GraphViz::new( "G", :output => "png", :path => ARGV[0] )
9
+ else
10
+ g = GraphViz::new( "G", :output => "png" )
11
+ end
12
+
13
+ g.node[:shape] = "ellipse"
14
+ g.node[:color] = "black"
15
+
16
+ g.edge[:color] = "black"
17
+ g.edge[:weight] = "1"
18
+ g.edge[:style] = "filled"
19
+ g.edge[:label] = ""
20
+
21
+ g[:size] = "4,4"
22
+
23
+ main = g.add_node( "main", :shape => "box" )
24
+ parse = g.add_node( "parse" )
25
+ execute = g.add_node( "execute" )
26
+ init = g.add_node( "init" )
27
+ cleanup = g.add_node( "cleanup" )
28
+ make_string = g.add_node( "make_string", :label => 'make a\nstring' )
29
+ printf = g.add_node( "printf" )
30
+ compare = g.add_node( "compare", :shape => "box", :style => "filled", :color => ".7 .3 1.0" )
31
+
32
+ g.add_edge( main, parse, :weight => "8" )
33
+ g.add_edge( parse, execute )
34
+ g.add_edge( main, init, :style => "dotted" )
35
+ g.add_edge( main, cleanup )
36
+ g.add_edge( execute, make_string )
37
+ g.add_edge( execute, printf )
38
+ g.add_edge( init, make_string )
39
+ g.add_edge( main, printf, :color => "red", :style => "bold", :label => "100 times" )
40
+ g.add_edge( execute, compare, :color => "red" )
41
+
42
+ g.output( )
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift( "../lib" );
4
+ require "graphviz"
5
+
6
+ g = nil
7
+ if ARGV[0]
8
+ g = GraphViz::new( "G", "output" => "png", "path" => ARGV[0] )
9
+ else
10
+ g = GraphViz::new( "G", "output" => "png" )
11
+ end
12
+
13
+ g.node["shape"] = "ellipse"
14
+ g.node["sides"] = "4"
15
+ g.node["peripheries"] = ""
16
+ g.node["color"] = "black"
17
+ g.node["style"] = ""
18
+ g.node["skew"] = "0.0"
19
+ g.node["distortion"] = "0.0"
20
+
21
+ a = g.add_node( "a", "shape" => "polygon", "sides" => "5", "peripheries" => "3", "color" => "lightblue", "style" => "filled" )
22
+ b = g.add_node( "b" )
23
+ c = g.add_node( "c", "shape" => "polygon", "sides" => "4", "skew" => ".4", "label" => "hello world" )
24
+ d = g.add_node( "d", "shape" => "invtriangle" )
25
+ e = g.add_node( "e", "shape" => "polygon", "sides" => "4", "distortion" => ".7" )
26
+
27
+ g.add_edge( a, b )
28
+ g.add_edge( b, c )
29
+ g.add_edge( b, d )
30
+
31
+ g.output()
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift( "../lib" );
4
+ require "graphviz"
5
+
6
+ g = nil
7
+ if ARGV[0]
8
+ g = GraphViz::new( "structs", "output" => "png", "path" => ARGV[0] )
9
+ else
10
+ g = GraphViz::new( "structs", "output" => "png" )
11
+ end
12
+
13
+ g.node["shape"] = "record"
14
+
15
+ struct1 = g.add_node( "struct1", "shape" => "record", "label" => "<f0> left|<f1> mid\ dle|<f2> right" )
16
+ struct2 = g.add_node( "struct2", "shape" => "record", "label" => "<f0> one|<f1> two" )
17
+ struct3 = g.add_node( "struct3", "shape" => "record", "label" => 'hello\nworld |{ b |{c|<here> d|e}| f}| g | h' )
18
+
19
+ g.add_edge( struct1, struct2 )
20
+ g.add_edge( struct1, struct3 )
21
+
22
+ g.output()
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift( "../lib" );
4
+ require "graphviz"
5
+
6
+ g = nil
7
+ if ARGV[0]
8
+ g = GraphViz::new( "structs", "type" => "graph", "path" => ARGV[0] )
9
+ else
10
+ g = GraphViz::new( "structs", "type" => "graph" )
11
+ end
12
+
13
+ main = g.add_node( "main" )
14
+ parse = g.add_node( "parse" )
15
+ execute = g.add_node( "execute" )
16
+ init = g.add_node( "init" )
17
+ cleanup = g.add_node( "cleanup" )
18
+ make_string = g.add_node( "make_string" )
19
+ printf = g.add_node( "printf" )
20
+ compare = g.add_node( "compare" )
21
+
22
+ g.add_edge( main, parse )
23
+ g.add_edge( parse, execute )
24
+ g.add_edge( main, init )
25
+ g.add_edge( main, cleanup )
26
+ g.add_edge( execute, make_string )
27
+ g.add_edge( execute, printf )
28
+ g.add_edge( init, make_string )
29
+ g.add_edge( main, printf )
30
+ g.add_edge( execute, compare )
31
+
32
+ g.output( "output" => "png" )
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift( "../lib" );
4
+ require "graphviz"
5
+
6
+ g = nil
7
+ if ARGV[0]
8
+ g = GraphViz::new( "structs", "output" => "png", "path" => ARGV[0] )
9
+ else
10
+ g = GraphViz::new( "structs", "output" => "png" )
11
+ end
12
+
13
+ g.node["shape"] = "record"
14
+
15
+ g.add_node( "struct1", "shape" => "record", "label" => "<f0> left|<f1> middle|<f2> right" )
16
+ g.add_node( "struct2", "shape" => "record", "label" => "<f0> one|<f1> two" )
17
+ g.add_node( "struct3", "shape" => "record", "label" => 'hello\nworld |{ b |{c|<here> d|e}| f}| g | h' )
18
+
19
+ g.add_edge( "struct1:f1", "struct2:f0" )
20
+ g.add_edge( "struct1:f2", "struct3:here" )
21
+
22
+ g.output()
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift( "../lib" );
4
+ require "graphviz"
5
+
6
+ g = nil
7
+ if ARGV[0]
8
+ g = GraphViz::new( "G", "output" => "png", "nodesep" => ".05", "rankdir" => "LR", "path" => ARGV[0] )
9
+ else
10
+ g = GraphViz::new( "G", "output" => "png", "nodesep" => ".05", "rankdir" => "LR" )
11
+ end
12
+
13
+ g.node["shape"] = "record"
14
+ g.node["width"] = ".1"
15
+ g.node["height"] = ".1"
16
+
17
+ g.add_node( "node0", "label" => "<f0> |<f1> |<f2> |<f3> |<f4> |<f5> |<f6> |<f7> | ", "height" => "2.5" )
18
+ g.add_node( "node1", "label" => "{<n> n14 | 719 |<p> }", "width" => "1.5" )
19
+ g.add_node( "node2", "label" => "{<n> a1 | 805 |<p> }", "width" => "1.5" )
20
+ g.add_node( "node3", "label" => "{<n> i9 | 718 |<p> }", "width" => "1.5" )
21
+ g.add_node( "node4", "label" => "{<n> e5 | 989 |<p> }", "width" => "1.5" )
22
+ g.add_node( "node5", "label" => "{<n> t20 | 959 |<p> }", "width" => "1.5" )
23
+ g.add_node( "node6", "label" => "{<n> o15 | 794 |<p> }", "width" => "1.5" )
24
+ g.add_node( "node7", "label" => "{<n> s19 | 659 |<p> }", "width" => "1.5" )
25
+
26
+ g.add_edge( "node0:f0", "node1:n" )
27
+ g.add_edge( "node0:f1", "node2:n" )
28
+ g.add_edge( "node0:f2", "node3:n" )
29
+ g.add_edge( "node0:f5", "node4:n" )
30
+ g.add_edge( "node0:f6", "node5:n" )
31
+ g.add_edge( "node2:p", "node6:n" )
32
+ g.add_edge( "node4:p", "node7:n" )
33
+
34
+ g.output()
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift( "../lib" );
4
+ require "graphviz"
5
+
6
+ g = nil
7
+ if ARGV[0]
8
+ g = GraphViz::new( "G", "output" => "png", "path" => ARGV[0] )
9
+ else
10
+ g = GraphViz::new( "G", "output" => "png" )
11
+ end
12
+
13
+ g.node["shape"] = "ellipse"
14
+ g.node["color"] = "black"
15
+
16
+ g["color"] = "black"
17
+
18
+ c0 = g.add_graph( "cluster0" )
19
+ c0["label"] = "process #1"
20
+ c0["style"] = "filled"
21
+ c0["color"] = "lightgrey"
22
+ a0 = c0.add_node( "a0", "style" => "filled", "color" => "white" )
23
+ a1 = c0.add_node( "a1", "style" => "filled", "color" => "white" )
24
+ a2 = c0.add_node( "a2", "style" => "filled", "color" => "white" )
25
+ a3 = c0.add_node( "a3", "style" => "filled", "color" => "white" )
26
+ c0.add_edge( a0, a1 )
27
+ c0.add_edge( a1, a2 )
28
+ c0.add_edge( a2, a3 )
29
+
30
+ c1 = g.add_graph( "cluster1", "label" => "process #2" )
31
+ b0 = c1.add_node( "b0", "style" => "filled", "color" => "blue" )
32
+ b1 = c1.add_node( "b1", "style" => "filled", "color" => "blue" )
33
+ b2 = c1.add_node( "b2", "style" => "filled", "color" => "blue" )
34
+ b3 = c1.add_node( "b3", "style" => "filled", "color" => "blue" )
35
+ c1.add_edge( b0, b1 )
36
+ c1.add_edge( b1, b2 )
37
+ c1.add_edge( b2, b3 )
38
+
39
+ start = g.add_node( "start", "shape" => "Mdiamond" )
40
+ endn = g.add_node( "end", "shape" => "Msquare" )
41
+
42
+ g.add_edge( start, a0 )
43
+ g.add_edge( start, b0 )
44
+ g.add_edge( a1, b3 )
45
+ g.add_edge( b2, a3 )
46
+ g.add_edge( a3, a0 )
47
+ g.add_edge( a3, endn )
48
+ g.add_edge( b3, endn )
49
+
50
+ g.output()
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift( "../lib" );
4
+ require "graphviz"
5
+
6
+ g = nil
7
+ if ARGV[0]
8
+ g = GraphViz::new( "G", "output" => "png", "type" => "graph", "path" => ARGV[0] )
9
+ else
10
+ g = GraphViz::new( "G", "output" => "png", "type" => "graph" )
11
+ end
12
+
13
+ g.node["shape"] = "ellipse"
14
+ g.node["color"] = "black"
15
+
16
+ g["color"] = "black"
17
+
18
+ c0 = g.add_graph( "cluster0" )
19
+ c0["label"] = "process #1"
20
+ c0["style"] = "filled"
21
+ c0["color"] = "lightgrey"
22
+ a0 = c0.add_node( "a0", "style" => "filled", "color" => "white" )
23
+ a1 = c0.add_node( "a1", "style" => "filled", "color" => "white" )
24
+ a2 = c0.add_node( "a2", "style" => "filled", "color" => "white" )
25
+ a3 = c0.add_node( "a3", "style" => "filled", "color" => "white" )
26
+ c0.add_edge( a0, a1 )
27
+ c0.add_edge( a1, a2 )
28
+ c0.add_edge( a2, a3 )
29
+
30
+ c1 = g.add_graph( "cluster1", "label" => "process #2" )
31
+ b0 = c1.add_node( "b0", "style" => "filled", "color" => "blue" )
32
+ b1 = c1.add_node( "b1", "style" => "filled", "color" => "blue" )
33
+ b2 = c1.add_node( "b2", "style" => "filled", "color" => "blue" )
34
+ b3 = c1.add_node( "b3", "style" => "filled", "color" => "blue" )
35
+ c1.add_edge( b0, b1 )
36
+ c1.add_edge( b1, b2 )
37
+ c1.add_edge( b2, b3 )
38
+
39
+ start = g.add_node( "start", "shape" => "Mdiamond" )
40
+ endn = g.add_node( "end", "shape" => "Msquare" )
41
+
42
+ g.add_edge( start, a0 )
43
+ g.add_edge( start, b0 )
44
+ g.add_edge( a1, b3 )
45
+ g.add_edge( b2, a3 )
46
+ g.add_edge( a3, a0 )
47
+ g.add_edge( a3, endn )
48
+ g.add_edge( b3, endn )
49
+
50
+ g.output()
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift( "../lib" );
4
+ require "graphviz"
5
+
6
+ graph = nil
7
+ if ARGV[0]
8
+ graph = GraphViz::new( "G", "output" => "png", "path" => ARGV[0] )
9
+ else
10
+ graph = GraphViz::new( "G", "output" => "png" )
11
+ end
12
+
13
+ graph["compound"] = "true"
14
+ graph.edge["lhead"] = ""
15
+ graph.edge["ltail"] = ""
16
+
17
+ c0 = graph.add_graph( "cluster0" )
18
+ a = c0.add_node( "a" )
19
+ b = c0.add_node( "b" )
20
+ c = c0.add_node( "c" )
21
+ d = c0.add_node( "d" )
22
+ c0.add_edge( a, b )
23
+ c0.add_edge( a, c )
24
+ c0.add_edge( b, d )
25
+ c0.add_edge( c, d )
26
+
27
+ c1 = graph.add_graph( "cluster1" )
28
+ e = c1.add_node( "e" )
29
+ f = c1.add_node( "f" )
30
+ g = c1.add_node( "g" )
31
+ c1.add_edge( e, g )
32
+ c1.add_edge( e, f )
33
+
34
+ h = graph.add_node( "h" )
35
+
36
+ graph.add_edge( b, f, "lhead" => "cluster1" )
37
+ graph.add_edge( d, e )
38
+ graph.add_edge( c, g, "ltail" => "cluster0", "lhead" => "cluster1" )
39
+ graph.add_edge( c, e, "ltail" => "cluster0" )
40
+ graph.add_edge( d, h )
41
+
42
+ graph.output()
@@ -0,0 +1,64 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift( "../lib" );
4
+ require "graphviz"
5
+
6
+ g = nil
7
+ if ARGV[0]
8
+ g = GraphViz::new( "G", "output" => "png", "path" => ARGV[0] )
9
+ else
10
+ g = GraphViz::new( "G", "output" => "png" )
11
+ end
12
+
13
+ g.node[:shape] = "ellipse"
14
+ g.node[:color] = "black"
15
+
16
+ g[:color] = "black"
17
+
18
+ g.cluster0( ) do |cluster|
19
+ cluster[:label] = "process #1"
20
+ cluster[:style] = "filled"
21
+ cluster[:color] = "lightgrey"
22
+
23
+ cluster.a0 :style => "filled", :color => "white"
24
+ cluster.a1 :style => "filled", :color => "white"
25
+ cluster.a2 :style => "filled", :color => "white"
26
+ cluster.a3 :style => "filled", :color => "white"
27
+
28
+ cluster.a0 << cluster.a1
29
+ cluster.a1 << cluster.a2
30
+ cluster.a2 << cluster.a3
31
+ end
32
+
33
+ g.cluster1( :label => "process #2" ) do |cluster|
34
+ cluster.b0 :style => "filled", :color => "blue"
35
+ cluster.b1 :style => "filled", :color => "blue"
36
+ cluster.b2 :style => "filled", :color => "blue"
37
+ cluster.b3 :style => "filled", :color => "blue"
38
+
39
+ cluster.b0 << cluster.b1
40
+ cluster.b1 << cluster.b2
41
+ cluster.b2 << cluster.b3
42
+ end
43
+
44
+ g.start :shape => "Mdiamond"
45
+ g.endn :shape => "Msquare"
46
+
47
+ ## THIS DON'T WORK !!!
48
+ #g.start << g.cluster0.a0
49
+ #g.start << g.cluster1.b0
50
+ #g.cluster0.a1 << g.cluster1.b3
51
+ #g.cluster1.b2 << g.cluster0.a3
52
+ #g.cluster0.a3 << g.cluster0.a0
53
+ #g.cluster0.a3 << g.endn
54
+ #g.cluster1.b3 << g.endn
55
+
56
+ g.add_edge( g.start, g.cluster0.a0 )
57
+ g.add_edge( g.start, g.cluster1.b0 )
58
+ g.add_edge( g.cluster0.a1, g.cluster1.b3 )
59
+ g.add_edge( g.cluster1.b2, g.cluster0.a3 )
60
+ g.add_edge( g.cluster0.a3, g.cluster0.a0 )
61
+ g.add_edge( g.cluster0.a3, g.endn )
62
+ g.add_edge( g.cluster1.b3, g.endn )
63
+
64
+ g.output
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift( "../lib" );
4
+ require "graphviz"
5
+
6
+ g = nil
7
+ if ARGV[0]
8
+ g = GraphViz::new( "G", "output" => "png", "path" => ARGV[0] )
9
+ else
10
+ g = GraphViz::new( "G", "output" => "png" )
11
+ end
12
+
13
+ g.node["shape"] = "ellipse"
14
+
15
+ [ "box", "polygon", "ellipse", "circle", "point",
16
+ "egg", "triangle", "plaintext", "diamond", "trapezium",
17
+ "parallelogram", "house", "hexagon", "octagon", "doublecircle",
18
+ "doubleoctagon", "tripleoctagon", "invtriangle", "invtrapezium", "invhouse",
19
+ "Mdiamond", "Msquare", "Mcircle" ].each { |s|
20
+ g.add_node( s, "shape" => s )
21
+ }
22
+
23
+ g.output()
data/examples/test.xml ADDED
@@ -0,0 +1,26 @@
1
+ <inventory title="OmniCorp Store #45x10^3">
2
+ <section name="health">
3
+ <item upc="123456789" stock="12">
4
+ <name>Invisibility Cream</name>
5
+ <price>14.50</price>
6
+ <description>Makes you invisible</description>
7
+ </item>
8
+ <item upc="445322344" stock="18">
9
+ <name>Levitation Salve</name>
10
+ <price>23.99</price>
11
+ <description>Levitate yourself for up to 3 hours per application</description>
12
+ </item>
13
+ </section>
14
+ <section name="food">
15
+ <item upc="485672034" stock="653">
16
+ <name>Blork and Freen Instameal</name>
17
+ <price>4.95</price>
18
+ <description>A tasty meal in a tablet; just add water</description>
19
+ </item>
20
+ <item upc="132957764" stock="44">
21
+ <name>Grob winglets</name>
22
+ <price>3.56</price>
23
+ <description>Tender winglets of Grob. Just add water</description>
24
+ </item>
25
+ </section>
26
+ </inventory>
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift( "../lib" );
4
+ require "graphviz"
5
+
6
+ g = nil
7
+ if ARGV[0]
8
+ g = GraphViz::new( "G", "output" => "png", "path" => ARGV[0] )
9
+ else
10
+ g = GraphViz::new( "G", "output" => "png" )
11
+ end
12
+
13
+ g.node["color"] = "black"
14
+
15
+ g.edge["color"] = "black"
16
+ g.edge["weight"] = "1"
17
+ g.edge["style"] = "filled"
18
+ g.edge["label"] = ""
19
+
20
+ g["size"] = "4,4"
21
+
22
+ g.node["shape"] = "box"
23
+ main = g.add_node( "main" )
24
+ g.node["shape"] = "ellipse"
25
+ parse = g.add_node( "parse" )
26
+ execute = g.add_node( "execute" )
27
+ init = g.add_node( "init" )
28
+ cleanup = g.add_node( "cleanup" )
29
+ make_string = g.add_node( "make_string", "label" => 'make a\nstring' )
30
+ printf = g.add_node( "printf" )
31
+ compare = g.add_node( "compare", "shape" => "box", "style" => "filled", "color" => ".7 .3 1.0" )
32
+
33
+ g.add_edge( main, parse, "weight" => "8" )
34
+ g.add_edge( parse, execute )
35
+ g.add_edge( main, init, "style" => "dotted" )
36
+ g.add_edge( main, cleanup )
37
+ g.add_edge( execute, make_string )
38
+ g.add_edge( execute, printf )
39
+ g.add_edge( init, make_string )
40
+ g.add_edge( main, printf, "color" => "red", "style" => "bold", "label" => "100 times" )
41
+ g.add_edge( execute, compare, "color" => "red" )
42
+
43
+ g.output( )
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift( "../lib" )
4
+ require 'graphviz/xml'
5
+
6
+ gvxml = GraphViz::XML::new( "test.xml", :text => true, :attrs => true )
7
+ gvxml.output( :output => "png", :file => "test.png", :use => "dot", :path => ARGV[0] )
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2004, 2005, 2006, 2007 Gregoire Lejeune <gregoire.lejeune@free.fr>
1
+ # Copyright (C) 2004, 2005, 2006, 2007, 2008 Gregoire Lejeune <gregoire.lejeune@free.fr>
2
2
  #
3
3
  # This program is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License as published by
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2004 Gregoire Lejeune <gregoire.lejeune@free.fr>
1
+ # Copyright (C) 2004, 2005, 2006, 2007, 2008 Gregoire Lejeune <gregoire.lejeune@free.fr>
2
2
  #
3
3
  # This program is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License as published by
@@ -15,8 +15,7 @@
15
15
  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16
16
 
17
17
  module Constants
18
- RGV_VERSION = "0.8.0"
19
- RGV_DATE = "2007-05-15"
18
+ RGV_VERSION = "0.8.1"
20
19
 
21
20
  ## Const: Output formats
22
21
  FORMATS = [
@@ -52,7 +51,8 @@ module Constants
52
51
  "dot",
53
52
  "neato",
54
53
  "twopi",
55
- "fdp"
54
+ "fdp",
55
+ "circo"
56
56
  ]
57
57
 
58
58
  ## Const: type de graphs
data/lib/graphviz/edge.rb CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2004, 2005, 2006, 2007 Gregoire Lejeune <gregoire.lejeune@free.fr>
1
+ # Copyright (C) 2004, 2005, 2006, 2007, 2008 Gregoire Lejeune <gregoire.lejeune@free.fr>
2
2
  #
3
3
  # This program is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License as published by
@@ -23,8 +23,17 @@ class GraphViz
23
23
  @xNodeOne
24
24
  @xNodeTwo
25
25
  @oAttrEdge
26
+ @oGParrent
26
27
 
27
- def initialize( vNodeOne, vNodeTwo )
28
+ #
29
+ # Create a new edge
30
+ #
31
+ # In:
32
+ # vNodeOne : First node
33
+ # vNodeTwo : Second node
34
+ # oGParrent : Graph
35
+ #
36
+ def initialize( vNodeOne, vNodeTwo, oGParrent = nil )
28
37
  if vNodeOne.class == String
29
38
  @xNodeOne = vNodeOne
30
39
  else
@@ -36,19 +45,27 @@ class GraphViz
36
45
  else
37
46
  @xNodeTwo = vNodeTwo.name
38
47
  end
48
+
49
+ @oGParrent = oGParrent
39
50
 
40
51
  @oAttrEdge = GraphViz::Attrs::new( nil, "edge", EDGESATTRS )
41
52
  end
42
53
 
43
- def []=( xAttrName, xAttrValue )
54
+ #
55
+ # Set value +xAttrValue+ to the edge attribut +xAttrName+
56
+ #
57
+ def []=( xAttrName, xAttrValue )
44
58
  @oAttrEdge[xAttrName.to_s] = xAttrValue
45
59
  end
46
60
 
61
+ #
62
+ # Get the value of the node attribut +xAttrName+
63
+ #
47
64
  def []( xAttrName )
48
65
  @oAttrEdge[xAttrName.to_s].clone
49
66
  end
50
67
 
51
- def output( oGraphType )
68
+ def output( oGraphType ) #:nodoc:
52
69
  xLink = " -> "
53
70
  if oGraphType == "graph"
54
71
  xLink = " -- "
data/lib/graphviz/node.rb CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2004, 2005, 2006, 2007 Gregoire Lejeune <gregoire.lejeune@free.fr>
1
+ # Copyright (C) 2004, 2005, 2006, 2007, 2008 Gregoire Lejeune <gregoire.lejeune@free.fr>
2
2
  #
3
3
  # This program is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License as published by
@@ -22,25 +22,50 @@ class GraphViz
22
22
  include Constants
23
23
  @xNodeName
24
24
  @oAttrNode
25
-
26
- def initialize( xNodeName )
25
+ @oGParrent
26
+
27
+ #
28
+ # Create a new node
29
+ #
30
+ # In:
31
+ # xNodeName : Name of the node
32
+ # oGParrent : Graph
33
+ #
34
+ def initialize( xNodeName, oGParrent = nil )
27
35
  @xNodeName = xNodeName
36
+ @oGParrent = oGParrent
28
37
  @oAttrNode = GraphViz::Attrs::new( nil, "node", NODESATTRS )
29
38
  end
30
39
 
40
+ #
41
+ # Get the node name
42
+ #
31
43
  def name
32
44
  @xNodeName.clone
33
45
  end
34
46
 
47
+ #
48
+ # Set value +xAttrValue+ to the node attribut +xAttrName+
49
+ #
35
50
  def []=( xAttrName, xAttrValue )
36
51
  @oAttrNode[xAttrName.to_s] = xAttrValue
37
52
  end
38
53
 
54
+ #
55
+ # Get the value of the node attribut +xAttrName+
56
+ #
39
57
  def []( xAttrName )
40
58
  @oAttrNode[xAttrName.to_s].clone
41
59
  end
42
60
 
43
- def output
61
+ #
62
+ # Create an edge between the current node and the node +oNode+
63
+ #
64
+ def <<( oNode )
65
+ return @oGParrent.add_edge( self, oNode )
66
+ end
67
+
68
+ def output #:nodoc:
44
69
  xOut = "" << @xNodeName.clone
45
70
  xAttr = ""
46
71
  xSeparator = ""
data/lib/graphviz/xml.rb CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2004, 2005, 2006, 2007 Gregoire Lejeune <gregoire.lejeune@free.fr>
1
+ # Copyright (C) 2004, 2005, 2006, 2007, 2008 Gregoire Lejeune <gregoire.lejeune@free.fr>
2
2
  #
3
3
  # This program is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License as published by
@@ -26,12 +26,28 @@ class GraphViz
26
26
  @bShowText
27
27
  @bShowAttrs
28
28
 
29
+ #
30
+ # Generate the graph
31
+ #
32
+ # Options :
33
+ # :output : Output format (Constants::FORMATS)
34
+ # :file : Output file name
35
+ # :use : Program to use (Constants::PROGRAMS)
36
+ # :path : Program PATH
37
+ #
29
38
  def output( *hOpt )
30
39
  @oGraph.output( *hOpt )
31
40
  end
32
41
 
33
42
  private
34
43
 
44
+ #
45
+ # Create a graph from a XML file
46
+ #
47
+ # In:
48
+ # xFile : XML File
49
+ # *hOpt : Graph options
50
+ #
35
51
  def initialize( xFile, *hOpt )
36
52
  @xNodeName = "00000"
37
53
  @bShowText = true
@@ -55,7 +71,7 @@ class GraphViz
55
71
  _init( @oReXML.root() )
56
72
  end
57
73
 
58
- def _init( oXMLNode )
74
+ def _init( oXMLNode ) #:nodoc:
59
75
  xLocalNodeName = @xNodeName.clone
60
76
  @xNodeName.succ!
61
77
 
data/lib/graphviz.rb CHANGED
@@ -46,16 +46,18 @@ class GraphViz
46
46
  attr_accessor :node, :edge
47
47
 
48
48
  @elements_order
49
-
49
+
50
50
  ##
51
+ # Create a new node
52
+ #
51
53
  # In:
52
- # - xNodeName : Name of the new node
53
- # - *hOpt : Node options
54
- # Out:
55
- # - xNodeName as In
54
+ # xNodeName : Name of the new node
55
+ # *hOpt : Node attributs
56
+ #
57
+ # Return the GraphViz::Node object created
56
58
  #
57
59
  def add_node( xNodeName, *hOpt )
58
- @hoNodes[xNodeName] = GraphViz::Node::new( xNodeName )
60
+ @hoNodes[xNodeName] = GraphViz::Node::new( xNodeName, self )
59
61
 
60
62
  if hOpt.nil? == false and hOpt[0].nil? == false
61
63
  hOpt[0].each do |xKey, xValue|
@@ -72,8 +74,16 @@ class GraphViz
72
74
  return( @hoNodes[xNodeName] )
73
75
  end
74
76
 
77
+ ##
78
+ # Create a new edge
79
+ #
80
+ # In:
81
+ # oNodeOne : First node
82
+ # oNodeTwo : Second Node
83
+ # *hOpt : Edge attributs
84
+ #
75
85
  def add_edge( oNodeOne, oNodeTwo, *hOpt )
76
- oEdge = GraphViz::Edge::new( oNodeOne, oNodeTwo )
86
+ oEdge = GraphViz::Edge::new( oNodeOne, oNodeTwo, self )
77
87
 
78
88
  if hOpt.nil? == false and hOpt[0].nil? == false
79
89
  hOpt[0].each do |xKey, xValue|
@@ -90,8 +100,15 @@ class GraphViz
90
100
  return( oEdge )
91
101
  end
92
102
 
103
+ #
104
+ # Create � new graph
105
+ #
106
+ # In:
107
+ # xGraphName : Graph name
108
+ # *hOpt : Graph attributs
109
+ #
93
110
  def add_graph( xGraphName, *hOpt )
94
- @hoGraphs[xGraphName] = GraphViz::new( xGraphName, "parent" => self, "type" => @oGraphType )
111
+ @hoGraphs[xGraphName] = GraphViz::new( xGraphName, :parent => self, :type => @oGraphType )
95
112
 
96
113
  if hOpt.nil? == false and hOpt[0].nil? == false
97
114
  hOpt[0].each do |xKey, xValue|
@@ -108,14 +125,49 @@ class GraphViz
108
125
  return( @hoGraphs[xGraphName] )
109
126
  end
110
127
 
128
+ def method_missing( idName, *args, &block )
129
+ xName = idName.id2name
130
+
131
+ rCod = nil
132
+
133
+ if block
134
+ # Creating a cluster named '#{xName}'
135
+ rCod = add_graph( xName, args[0] )
136
+ yield( rCod )
137
+ else
138
+ # Create a node named '#{xName}' or search for a node, edge or cluster
139
+ return( @hoNodes[xName] ) if @hoNodes.keys.include?( xName )
140
+ return( @hoGraphs[xName] ) if @hoGraphs.keys.include?( xName )
141
+
142
+ rCod = add_node( xName, args[0] )
143
+ end
144
+
145
+ return rCod
146
+ end
147
+
148
+ #
149
+ # Set value +xValue+ to the graph attribut +xAttrName+
150
+ #
111
151
  def []=( xAttrName, xValue )
112
152
  @graph[xAttrName] = xValue
113
153
  end
114
154
 
155
+ #
156
+ # Get the value of the graph attribut +xAttrName+
157
+ #
115
158
  def []( xAttrName )
116
159
  return( @graph[xAttrName].clone )
117
160
  end
118
161
 
162
+ #
163
+ # Generate the graph
164
+ #
165
+ # Options :
166
+ # :output : Output format (Constants::FORMATS)
167
+ # :file : Output file name
168
+ # :use : Program to use (Constants::PROGRAMS)
169
+ # :path : Program PATH
170
+ #
119
171
  def output( *hOpt )
120
172
  xDOTScript = ""
121
173
  xLastType = nil
@@ -236,7 +288,7 @@ class GraphViz
236
288
  end
237
289
  end
238
290
 
239
- def set_position( xType, xKey, xValue )
291
+ def set_position( xType, xKey, xValue ) #:nodoc:
240
292
  @elements_order.push( {
241
293
  "type" => "#{xType}_attr",
242
294
  "name" => xKey,
@@ -259,13 +311,24 @@ class GraphViz
259
311
  ## Var: Type de graphe (orient� ou non)
260
312
  @oGraphType
261
313
 
314
+ #
315
+ # Create a new Graphviz object
316
+ #
317
+ # Options :
318
+ # :output : Output format (Constants::FORMATS)
319
+ # :file : Output file name
320
+ # :use : Program to use (Constants::PROGRAMS)
321
+ # :path : Program PATH
322
+ # :parent : Parent graph
323
+ # :type : Graph type (Constants::GRAPHTYPE)
324
+ #
262
325
  def initialize( xGraphName, *hOpt )
263
326
  @format = "dot"
264
327
  @filename = nil
265
328
  @prog = "dot"
266
329
  @path = nil
267
330
  @name = xGraphName
268
-
331
+
269
332
  @elements_order = Array::new()
270
333
 
271
334
  @oParentGraph = nil
@@ -310,7 +373,7 @@ class GraphViz
310
373
  end
311
374
  end
312
375
 
313
- def find_executable( )
376
+ def find_executable( ) #:nodoc:
314
377
  cmd = find_executable0( @prog )
315
378
  if cmd == nil and @path != nil
316
379
  __cmd = File.join( @path, @prog )
metadata CHANGED
@@ -1,33 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.3
3
- specification_version: 1
4
2
  name: ruby-graphviz
5
3
  version: !ruby/object:Gem::Version
6
- version: 0.8.0
7
- date: 2007-05-15 00:00:00 +02:00
8
- summary: Interface to the GraphViz graphing tool
9
- require_paths:
10
- - lib
11
- email: gregoire.lejeune@free.fr
12
- homepage: http://raa.ruby-lang.org/project/ruby-graphviz/
13
- rubyforge_project:
14
- description: Ruby/Graphviz provides an interface to layout and generate images of directed graphs in a variety of formats (PostScript, PNG, etc.) using GraphViz.
15
- autorequire:
16
- default_executable:
17
- bindir: bin
18
- has_rdoc: true
19
- required_ruby_version: !ruby/object:Gem::Version::Requirement
20
- requirements:
21
- - - ">"
22
- - !ruby/object:Gem::Version
23
- version: 0.0.0
24
- version:
4
+ version: 0.8.1
25
5
  platform: ruby
26
- signing_key:
27
- cert_chain:
28
- post_install_message:
29
6
  authors:
30
7
  - Gregoire Lejeune
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-04-06 00:00:00 +02:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: Ruby/Graphviz provides an interface to layout and generate images of directed graphs in a variety of formats (PostScript, PNG, etc.) using GraphViz.
17
+ email: gregoire.lejeune@free.fr
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README
24
+ - ChangeLog
25
+ - COPYING
26
+ - AUTHORS
31
27
  files:
32
28
  - ChangeLog
33
29
  - COPYING
@@ -35,31 +31,61 @@ files:
35
31
  - AUTHORS
36
32
  - setup.rb
37
33
  - bin/ruby2gv.rb
34
+ - examples/arrowhead.rb
35
+ - examples/HTML-Labels.rb
36
+ - examples/maketest.sh
37
+ - examples/p2p.rb
38
+ - examples/sample01.rb
39
+ - examples/sample02.rb
40
+ - examples/sample03.rb
41
+ - examples/sample04.rb
42
+ - examples/sample05.rb
43
+ - examples/sample07.rb
44
+ - examples/sample08.rb
45
+ - examples/sample09.rb
46
+ - examples/sample10.rb
47
+ - examples/sample11.rb
48
+ - examples/sample12.rb
49
+ - examples/shapes.rb
50
+ - examples/test.xml
51
+ - examples/testorder.rb
52
+ - examples/testxml.rb
38
53
  - lib/graphviz
39
- - lib/graphviz.rb
40
54
  - lib/graphviz/attrs.rb
41
55
  - lib/graphviz/constants.rb
42
56
  - lib/graphviz/edge.rb
43
57
  - lib/graphviz/node.rb
44
58
  - lib/graphviz/xml.rb
45
- test_files: []
46
-
59
+ - lib/graphviz.rb
60
+ has_rdoc: true
61
+ homepage: http://raa.ruby-lang.org/project/ruby-graphviz/
62
+ post_install_message:
47
63
  rdoc_options:
48
64
  - --title
49
65
  - Ruby/GraphViz
50
66
  - --main
51
67
  - README
52
68
  - --line-numbers
53
- extra_rdoc_files:
54
- - README
55
- - ChangeLog
56
- - COPYING
57
- - AUTHORS
58
- executables: []
59
-
60
- extensions: []
61
-
69
+ require_paths:
70
+ - lib
71
+ required_ruby_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: "0"
76
+ version:
77
+ required_rubygems_version: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: "0"
82
+ version:
62
83
  requirements: []
63
84
 
64
- dependencies: []
85
+ rubyforge_project: ruby-asp
86
+ rubygems_version: 1.1.0
87
+ signing_key:
88
+ specification_version: 2
89
+ summary: Interface to the GraphViz graphing tool
90
+ test_files: []
65
91