ruby-graphviz 0.8.3 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog CHANGED
@@ -1,3 +1,16 @@
1
+ 0.9.0 :
2
+ * Add fdp example (sample 15)
3
+ * Add edge between cluster and node and cluster and cluster support
4
+ * GraphViz.add_node now support array (sample 16)
5
+ * Bug correction in GraphViz.output (sample 19)
6
+ * Add GraphViz#default to set default options (:use, :path and :output)
7
+ * Add possibility to set node or edge attribut via :
8
+ node.<attribut>=<value> or node.<attribut>( <value> )
9
+ adge.<attribut>=<value> or adge.<attribut>( <value> )
10
+ * Add GraphViz::Edge.set and GraphViz::Node.net
11
+ * Add sample 20
12
+ * Add GraphViz.node_count and GraphViz.edge_count by Daniel Cadenas Nión
13
+
1
14
  0.8.2 :
2
15
  * Update Node, Edge and Graph Attributes (see http://www.graphviz.org/doc/info/attrs.html)
3
16
  * Bugs corrections
@@ -1,7 +1,7 @@
1
1
  $:.unshift( "../lib" );
2
2
  require "graphviz"
3
3
 
4
- g = GraphViz::new( "structs", "output" => "png", :path => ARGV[0] )
4
+ g = GraphViz::new( "structs", :output => "png" )
5
5
 
6
6
  g.node["shape"] = "plaintext"
7
7
 
@@ -17,4 +17,4 @@ g.add_edge( "struct1:f2", "struct3:here" )
17
17
 
18
18
  g.add_edge( "HTML", "struct1" )
19
19
 
20
- g.output( "file" => "HTML-Labels.png" )
20
+ g.output( :path => '/usr/local/bin/', :file => "#{$0}.png" )
@@ -94,4 +94,4 @@ g.edge["arrowhead"] = "normal"
94
94
  g.add_edge( p, s, "arrowhead" => s )
95
95
  }
96
96
 
97
- g.output()
97
+ g.output( :file => "#{$0}.png" )
data/examples/maketest.sh CHANGED
@@ -1,15 +1,28 @@
1
1
  #!/bin/sh
2
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
3
+ ruby shapes.rb $1
4
+ ruby arrowhead.rb $1
7
5
 
8
- ruby sample07.rb $1 > sample07.png
9
- ruby sample08.rb $1 > sample08.png
10
- ruby sample09.rb $1 > sample09.png
6
+ ruby sample01.rb $1
7
+ ruby sample02.rb $1
8
+ ruby sample03.rb $1
9
+ ruby sample04.rb $1
10
+ ruby sample05.rb $1
11
+
12
+ ruby sample07.rb $1
13
+ ruby sample08.rb $1
14
+ ruby sample09.rb $1
15
+ ruby sample10.rb $1
16
+ ruby sample11.rb $1
17
+ ruby sample12.rb $1
18
+ ruby sample13.rb
19
+ ruby sample14.rb
20
+ ruby sample15.rb
21
+ ruby sample16.rb
22
+ ruby sample17.rb
23
+ ruby sample18.rb
24
+ ruby sample19.rb
11
25
 
12
- ruby sample11.rb $1 > sample11.png
13
-
14
- ruby shapes.rb $1 > shapes.png
15
- ruby arrowhead.rb $1 > arrowhead.png
26
+ ruby testorder.rb $1
27
+ ruby testxml.rb $1
28
+ ruby HTML-Labels.rb
data/examples/sample01.rb CHANGED
@@ -29,4 +29,4 @@ g.add_edge( init, make_string )
29
29
  g.add_edge( main, printf )
30
30
  g.add_edge( execute, compare )
31
31
 
32
- g.output( :output => "png" )
32
+ g.output( :output => "png", :file => "#{$0}.png" )
data/examples/sample02.rb CHANGED
@@ -39,4 +39,4 @@ g.add_edge( init, make_string )
39
39
  g.add_edge( main, printf, :color => "red", :style => "bold", :label => "100 times" )
40
40
  g.add_edge( execute, compare, :color => "red" )
41
41
 
42
- g.output( )
42
+ g.output( :file => "#{$0}.png" )
data/examples/sample03.rb CHANGED
@@ -28,4 +28,4 @@ g.add_edge( a, b )
28
28
  g.add_edge( b, c )
29
29
  g.add_edge( b, d )
30
30
 
31
- g.output()
31
+ g.output( :file => "#{$0}.png" )
data/examples/sample04.rb CHANGED
@@ -19,4 +19,4 @@ struct3 = g.add_node( "struct3", "shape" => "record", "label" => 'hello\nworld |
19
19
  g.add_edge( struct1, struct2 )
20
20
  g.add_edge( struct1, struct3 )
21
21
 
22
- g.output()
22
+ g.output( :file => "#{$0}.png" )
data/examples/sample05.rb CHANGED
@@ -29,4 +29,4 @@ g.add_edge( init, make_string )
29
29
  g.add_edge( main, printf )
30
30
  g.add_edge( execute, compare )
31
31
 
32
- g.output( "output" => "png" )
32
+ g.output( "output" => "png", :file => "#{$0}.png" )
data/examples/sample07.rb CHANGED
@@ -3,13 +3,14 @@
3
3
  $:.unshift( "../lib" );
4
4
  require "graphviz"
5
5
 
6
- g = nil
6
+ GraphViz::options( :output => "png", :use => "dot" )
7
+
7
8
  if ARGV[0]
8
- g = GraphViz::new( "structs", "output" => "png", "path" => ARGV[0] )
9
- else
10
- g = GraphViz::new( "structs", "output" => "png" )
9
+ GraphViz::options( :path => ARGV[0] )
11
10
  end
12
11
 
12
+ g = GraphViz::new( "structs", "output" => "png" )
13
+
13
14
  g.node["shape"] = "record"
14
15
 
15
16
  g.add_node( "struct1", "shape" => "record", "label" => "<f0> left|<f1> middle|<f2> right" )
@@ -19,4 +20,4 @@ g.add_node( "struct3", "shape" => "record", "label" => 'hello\nworld |{ b |{c|<h
19
20
  g.add_edge( "struct1:f1", "struct2:f0" )
20
21
  g.add_edge( "struct1:f2", "struct3:here" )
21
22
 
22
- g.output()
23
+ g.output( :file => "#{$0}.png" )
data/examples/sample08.rb CHANGED
@@ -31,4 +31,4 @@ g.add_edge( "node0:f6", "node5:n" )
31
31
  g.add_edge( "node2:p", "node6:n" )
32
32
  g.add_edge( "node4:p", "node7:n" )
33
33
 
34
- g.output()
34
+ g.output( :file => "#{$0}.png" )
data/examples/sample09.rb CHANGED
@@ -47,4 +47,4 @@ g.add_edge( a3, a0 )
47
47
  g.add_edge( a3, endn )
48
48
  g.add_edge( b3, endn )
49
49
 
50
- g.output()
50
+ g.output( :file => "#{$0}.png" )
data/examples/sample10.rb CHANGED
@@ -47,4 +47,4 @@ g.add_edge( a3, a0 )
47
47
  g.add_edge( a3, endn )
48
48
  g.add_edge( b3, endn )
49
49
 
50
- g.output()
50
+ g.output( :file => "#{$0}.png" )
data/examples/sample11.rb CHANGED
@@ -39,4 +39,4 @@ graph.add_edge( c, g, "ltail" => "cluster0", "lhead" => "cluster1" )
39
39
  graph.add_edge( c, e, "ltail" => "cluster0" )
40
40
  graph.add_edge( d, h )
41
41
 
42
- graph.output()
42
+ graph.output( :file => "#{$0}.png" )
data/examples/sample12.rb CHANGED
@@ -52,4 +52,4 @@ g.cluster0.a3 << g.cluster0.a0
52
52
  g.cluster0.a3 << g.endn
53
53
  g.cluster1.b3 << g.endn
54
54
 
55
- g.output( :path => '/usr/local/graphviz-2.14/bin/' )
55
+ g.output( :file => "#{$0}.png" )
data/examples/sample13.rb CHANGED
@@ -45,4 +45,4 @@ GraphViz::new( "G", "output" => "png" ) { |graph|
45
45
  graph.cluster0.a3 << graph.cluster0.a0
46
46
  graph.cluster0.a3 << graph.endn
47
47
  graph.cluster1.b3 << graph.endn
48
- }.output( :path => '/usr/local/graphviz-2.14/bin/' )
48
+ }.output( :path => '/usr/local/bin/', :file => "#{$0}.png" )
data/examples/sample14.rb CHANGED
@@ -41,4 +41,4 @@ GraphViz::new( "G", "output" => "png" ) { |graph|
41
41
  graph.cluster0.a3 << graph.cluster0.a0
42
42
  graph.cluster0.a3 << graph.endn
43
43
  graph.cluster1.b3 << graph.endn
44
- }.output( :path => '/usr/local/graphviz-2.14/bin/' )
44
+ }.output( :path => '/usr/local/bin/', :file => "#{$0}.png" )
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # fdp example
4
+ # see : http://www.graphviz.org/Gallery/undirected/fdpclust.html
5
+
6
+ $:.unshift( "../lib" );
7
+ require "graphviz"
8
+
9
+ GraphViz::new( "G", :type => "graph", :output => "png", :use => "fdp" ) { |graph|
10
+ graph.e
11
+ graph.clusterA { |cA|
12
+ cA.a << cA.b
13
+ cA.clusterC { |cC|
14
+ cC._c( :label => "C" ) << cC._d( :label => "D" )
15
+ }
16
+ }
17
+ graph.clusterB { |cB|
18
+ cB.d << cB.f
19
+ }
20
+ graph.clusterB.d << graph.clusterA.clusterC._d
21
+ graph.e << graph.clusterB
22
+ graph.clusterA.clusterC << graph.clusterB
23
+ }.output( :path => '/usr/local/bin/', :file => "#{$0}.png" )
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift( "../lib" );
4
+ require "graphviz"
5
+
6
+ GraphViz::new( "G", :type => "graph", :output => "png", :rankdir => "LR" ) { |graph|
7
+ graph.add_edge( [graph.a, graph.b, graph.c], [ graph.d, graph.e, graph.f ] )
8
+ }.output( :path => '/usr/local/bin/', :file => "#{$0}.png" )
@@ -0,0 +1,92 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift( "../lib" );
4
+ require "graphviz"
5
+
6
+ GraphViz::new( "G", :type => "graph", :output => "png", :rankdir => "LR", :bgcolor => "#808080" ) { |graph|
7
+ graph.edge[:dir] = "none"
8
+
9
+ graph.node[:width] = "0.3"
10
+ graph.node[:height] = "0.3"
11
+ graph.node[:label] = ""
12
+
13
+ _ = {}
14
+
15
+ ("1".."8").each do |v|
16
+ _[v] = graph.add_node( v, :shape => "circle", :style => "invis")
17
+ end
18
+ ["10","20","30","40","50","60","70","80"].each do |v|
19
+ _[v] = graph.add_node( v, :shape => "circle", :style => "invis")
20
+ end
21
+
22
+ ("a".."x").each do |v|
23
+ _[v] = graph.add_node( v, :shape => "circle")
24
+ end
25
+
26
+ ("A".."X").each do |v|
27
+ _[v] = graph.add_node( v, :shape => "diamond")
28
+ end
29
+
30
+ (_["1"] << _["a"])[:color]="#0000ff"
31
+ (_["a"] << _["A"])[:color]="#0000ff"
32
+ (_["a"] << _["B"])[:color]="#0000ff"
33
+ (_["2"] << _["b"])[:color]="#ff0000"
34
+ (_["b"] << _["B"])[:color]="#ff0000"
35
+ (_["b"] << _["A"])[:color]="#ff0000"
36
+ (_["3"] << _["c"])[:color]="#ffff00"
37
+ (_["c"] << _["C"])[:color]="#ffff00"
38
+ (_["c"] << _["D"])[:color]="#ffff00"
39
+ (_["4"] << _["d"])[:color]="#00ff00"
40
+ (_["d"] << _["D"])[:color]="#00ff00"
41
+ (_["d"] << _["C"])[:color]="#00ff00"
42
+ (_["5"] << _["e"])[:color]="#000000"
43
+ (_["e"] << _["E"])[:color]="#000000"
44
+ (_["e"] << _["F"])[:color]="#000000"
45
+ (_["6"] << _["f"])[:color]="#00ffff"
46
+ (_["f"] << _["F"])[:color]="#00ffff"
47
+ (_["f"] << _["E"])[:color]="#00ffff"
48
+ (_["7"] << _["g"])[:color]="#ffffff"
49
+ (_["g"] << _["G"])[:color]="#ffffff"
50
+ (_["g"] << _["H"])[:color]="#ffffff"
51
+ (_["8"] << _["h"])[:color]="#ff00ff"
52
+ (_["h"] << _["H"])[:color]="#ff00ff"
53
+ (_["h"] << _["G"])[:color]="#ff00ff"
54
+
55
+ graph.edge[:color]="#ff0000:#0000ff"
56
+ _["A"] << _["i"]; _["i"] << [_["I"], _["K"]]
57
+ _["B"] << _["j"]; _["j"] << [_["J"], _["L"]]
58
+
59
+ graph.edge[:color]="#00ff00:#ffff00"
60
+ _["C"] << _["k"]; _["k"] << [_["K"], _["I"]]
61
+ _["D"] << _["l"]; _["l"] << [_["L"], _["J"]]
62
+
63
+ graph.edge[:color]="#00ffff:#000000"
64
+ _["E"] << _["m"]; _["m"] << [_["M"], _["O"]]
65
+ _["F"] << _["n"]; _["n"] << [_["N"], _["P"]]
66
+
67
+ graph.edge[:color]="#ff00ff:#ffffff"
68
+ _["G"] << _["o"]; _["o"] << [_["O"], _["M"]]
69
+ _["H"] << _["p"]; _["p"] << [_["P"], _["N"]]
70
+
71
+ graph.edge[:color]="#00ff00:#ffff00:#ff0000:#0000ff"
72
+ _["I"] << _["q"]; _["q"] << [_["Q"], _["U"]]
73
+ _["J"] << _["r"]; _["r"] << [_["R"], _["V"]]
74
+ _["K"] << _["s"]; _["s"] << [_["S"], _["W"]]
75
+ _["L"] << _["t"]; _["t"] << [_["T"], _["X"]]
76
+
77
+ graph.edge[:color]="#ff00ff:#ffffff:#00ffff:#000000"
78
+ _["M"] << _["u"]; _["u"] << [_["U"], _["Q"]]
79
+ _["N"] << _["v"]; _["v"] << [_["V"], _["R"]]
80
+ _["O"] << _["w"]; _["w"] << [_["W"], _["S"]]
81
+ _["P"] << _["x"]; _["x"] << [_["X"], _["T"]]
82
+
83
+ graph.edge[:color]="#ff00ff:#ffffff:#00ffff:#000000:#00ff00:#ffff00:#ff0000:#0000ff"
84
+ _["Q"] << _["10"]
85
+ _["R"] << _["20"]
86
+ _["S"] << _["30"]
87
+ _["T"] << _["40"]
88
+ _["U"] << _["50"]
89
+ _["V"] << _["60"]
90
+ _["W"] << _["70"]
91
+ _["X"] << _["80"]
92
+ }.output( :path => '/usr/local/bin/', :file => "#{$0}.png" )
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift( "../lib" );
4
+ require "graphviz"
5
+
6
+ GraphViz::new( "G", :output => "png", :rankdir => "LR", :size => "8,5" ) { |graph|
7
+ graph.node[:shape] = "doublecircle"
8
+ graph._LR_0; graph._LR_3; graph._LR_4; graph._LR_8
9
+ graph.node[:shape] = "circle"
10
+ (graph._LR_0 << graph._LR_2)[:label] = "SS(B)"
11
+ (graph._LR_0 << graph._LR_1)[:label] = "SS(S)"
12
+ (graph._LR_1 << graph._LR_3)[:label] = "S($end)"
13
+ (graph._LR_2 << graph._LR_6)[:label] = "SS(b)"
14
+ (graph._LR_2 << graph._LR_5)[:label] = "SS(a)"
15
+ (graph._LR_2 << graph._LR_4)[:label] = "S(A)"
16
+ (graph._LR_5 << graph._LR_7)[:label] = "S(b)"
17
+ (graph._LR_5 << graph._LR_5)[:label] = "S(a)"
18
+ (graph._LR_6 << graph._LR_6)[:label] = "S(b)"
19
+ (graph._LR_6 << graph._LR_5)[:label] = "S(a)"
20
+ (graph._LR_7 << graph._LR_8)[:label] = "S(b)"
21
+ (graph._LR_7 << graph._LR_5)[:label] = "S(a)"
22
+ (graph._LR_8 << graph._LR_6)[:label] = "S(b)"
23
+ (graph._LR_8 << graph._LR_5)[:label] = "S(a)"
24
+ }.output( :path => '/usr/local/bin/', :file => "#{$0}.png" )
@@ -0,0 +1,59 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift( "../lib" );
4
+ require "graphviz"
5
+
6
+ GraphViz::new( "ER", :type => "graph", :output => "png", :use => "neato" ) { |graph|
7
+ graph.node[:shape] = "box"
8
+ graph.course; graph.institute; graph.student
9
+
10
+ graph.node[:shape] = "ellipse"
11
+ graph.name0(:label => "name")
12
+ graph.name1(:label => "name")
13
+ graph.name2(:label => "name")
14
+ graph.code; graph.grade; graph.number
15
+
16
+ graph.node[:shape] = "diamond"
17
+ graph.node[:style] = "filled"
18
+ graph.node[:color] = "lightgrey"
19
+ graph.ci( :label => "C-I" )
20
+ graph.sc( :label => "S-C" )
21
+ graph.si( :label => "S-I" )
22
+
23
+ graph.name0 << graph.course;
24
+ graph.code << graph.course;
25
+
26
+ (graph.course << graph.ci).set { |e|
27
+ e.label = "n"
28
+ e.len = "1.00"
29
+ }
30
+
31
+ e = (graph.ci << graph.institute)
32
+ e.label = "1"
33
+ e[:len] = "1.00"
34
+
35
+ graph.institute << graph.name1;
36
+
37
+ e = (graph.institute << graph.si)
38
+ e[:label] = "1"
39
+ e[:len] = "1.00"
40
+
41
+ e = (graph.si << graph.student)
42
+ e[:label] = "n"
43
+ e[:len] = "1.00"
44
+
45
+ graph.student << graph.grade
46
+ graph.student << graph.name2
47
+ graph.student << graph.number
48
+
49
+ e = (graph.student << graph.sc)
50
+ e[:label] = "m"
51
+ e[:len] = "1.00"
52
+
53
+ e = (graph.sc << graph.course)
54
+ e[:label] = "n"
55
+ e[:len] = "1.00"
56
+
57
+ graph[:label] = "\\n\\nEntity Relation Diagram\\ndrawn by NEATO";
58
+ graph[:fontsize] = "20";
59
+ }.output( :path => '/usr/local/bin/', :file => "#{$0}.png" )
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift( "../lib" );
4
+ require "graphviz"
5
+
6
+ GraphViz::options( :output => "png", :use => "dot" )
7
+
8
+ if ARGV[0]
9
+ GraphViz::options( :path => ARGV[0] )
10
+ end
11
+
12
+ GraphViz::new( "g", :rankdir => "LR", :type => "digraph" ) { |g|
13
+ g.node[:fontsize] = "16"
14
+ g.node[:shape] = "record"
15
+
16
+ g.node0( :label => "<f0> 0x10ba8| <f1>" )
17
+ g.node1( :label => "<f0> 0xf7fc4380| <f1> | <f2> |-1" )
18
+ g.node2( :label => "<f0> 0xf7fc44b8| | |2" )
19
+ g.node3( :label => "<f0> 3.43322790286038071e-06|44.79998779296875|0" )
20
+ g.node4( :label => "<f0> 0xf7fc4380| <f1> | <f2> |2" )
21
+ g.node5( :label => "<f0> (nil)| | |-1" )
22
+ g.node6( :label => "<f0> 0xf7fc4380| <f1> | <f2> |1" )
23
+ g.node7( :label => "<f0> 0xf7fc4380| <f1> | <f2> |2" )
24
+ g.node8( :label => "<f0> (nil)| | |-1" )
25
+ g.node9( :label => "<f0> (nil)| | |-1" )
26
+ g.node10( :label => "<f0> (nil)| <f1> | <f2> |-1" )
27
+ g.node11( :label => "<f0> (nil)| <f1> | <f2> |-1" )
28
+ g.node12( :label => "<f0> 0xf7fc43e0| | |1" )
29
+
30
+ g.add_edge( g.node0(:f0), g.node1(:f0) )
31
+ g.add_edge( g.node0(:f1), g.node2(:f0) )
32
+ g.add_edge( g.node1(:f0), g.node3(:f0) )
33
+ g.add_edge( g.node1(:f1), g.node4(:f0) )
34
+ g.add_edge( g.node1(:f2), g.node5(:f0) )
35
+ g.add_edge( g.node4(:f0), g.node3(:f0) )
36
+ g.add_edge( g.node4(:f1), g.node6(:f0) )
37
+ g.add_edge( g.node4(:f2), g.node10(:f0) )
38
+ g.add_edge( g.node6(:f0), g.node3(:f0) )
39
+ g.add_edge( g.node6(:f1), g.node7(:f0) )
40
+ g.add_edge( g.node6(:f2), g.node9(:f0) )
41
+ g.add_edge( g.node7(:f0), g.node3(:f0) )
42
+ g.add_edge( g.node7(:f1), g.node1(:f0) )
43
+ g.add_edge( g.node7(:f2), g.node8(:f0) )
44
+ g.add_edge( g.node10(:f1), g.node11(:f0) )
45
+ g.add_edge( g.node10(:f2), g.node12(:f0) )
46
+ g.add_edge( g.node11(:f2), g.node1(:f0) )
47
+ }.output( :file => "#{$0}.png" )
data/examples/shapes.rb CHANGED
@@ -14,10 +14,11 @@ g.node["shape"] = "ellipse"
14
14
 
15
15
  [ "box", "polygon", "ellipse", "circle", "point",
16
16
  "egg", "triangle", "plaintext", "diamond", "trapezium",
17
- "parallelogram", "house", "hexagon", "octagon", "doublecircle",
17
+ "parallelogram", "house", "pentagon", "hexagon", "septagon", "octagon", "doublecircle",
18
18
  "doubleoctagon", "tripleoctagon", "invtriangle", "invtrapezium", "invhouse",
19
- "Mdiamond", "Msquare", "Mcircle" ].each { |s|
19
+ "Mdiamond", "Msquare", "Mcircle", "rect", "rectangle", "none", "note", "tab", "folder",
20
+ "box3d", "component" ].each { |s|
20
21
  g.add_node( s, "shape" => s )
21
22
  }
22
23
 
23
- g.output()
24
+ g.output( :file => "shapes.png")
@@ -40,4 +40,4 @@ g.add_edge( init, make_string )
40
40
  g.add_edge( main, printf, "color" => "red", "style" => "bold", "label" => "100 times" )
41
41
  g.add_edge( execute, compare, "color" => "red" )
42
42
 
43
- g.output( )
43
+ g.output( :file => "#{$0}.png" )
data/examples/testxml.rb CHANGED
@@ -4,4 +4,4 @@ $:.unshift( "../lib" )
4
4
  require 'graphviz/xml'
5
5
 
6
6
  gvxml = GraphViz::XML::new( "test.xml", :text => true, :attrs => true )
7
- gvxml.output( :output => "png", :file => "test.png", :use => "dot", :path => ARGV[0] )
7
+ gvxml.output( :output => "png", :file => "#{$0}.png", :use => "dot", :path => ARGV[0] )
data/lib/graphviz.rb CHANGED
@@ -28,14 +28,17 @@ class GraphViz
28
28
  public
29
29
 
30
30
  ## Var: Output format (dot, png, jpeg, ...)
31
+ @@format = "canon"
31
32
  @format
32
33
  ## Var: Output file name
33
34
  @filename
34
35
  ## Var: program to use (dot|twopi)
36
+ @@prog = "dot"
35
37
  @prog
36
38
  ## Var: program path
39
+ @@path = nil
37
40
  @path
38
-
41
+
39
42
  ## Var: Graph name
40
43
  @name
41
44
 
@@ -78,30 +81,44 @@ class GraphViz
78
81
  # Create a new edge
79
82
  #
80
83
  # In:
81
- # oNodeOne : First node
82
- # oNodeTwo : Second Node
84
+ # oNodeOne : First node (or node list)
85
+ # oNodeTwo : Second Node (or node list)
83
86
  # *hOpt : Edge attributs
84
87
  #
85
88
  def add_edge( oNodeOne, oNodeTwo, *hOpt )
86
- oEdge = GraphViz::Edge::new( oNodeOne, oNodeTwo, self )
87
89
 
88
- if hOpt.nil? == false and hOpt[0].nil? == false
89
- hOpt[0].each do |xKey, xValue|
90
- oEdge[xKey.to_s] = xValue
90
+ if( oNodeOne.class == Array )
91
+ oNodeOne.each do |no|
92
+ add_edge( no, oNodeTwo, *hOpt )
91
93
  end
92
- end
94
+ else
95
+ if( oNodeTwo.class == Array )
96
+ oNodeTwo.each do |nt|
97
+ add_edge( oNodeOne, nt, *hOpt )
98
+ end
99
+ else
93
100
 
94
- @elements_order.push( {
95
- "type" => "edge",
96
- "value" => oEdge
97
- } )
98
-
99
- @loEdges.push( oEdge )
100
- return( oEdge )
101
+ oEdge = GraphViz::Edge::new( oNodeOne, oNodeTwo, self )
102
+
103
+ if hOpt.nil? == false and hOpt[0].nil? == false
104
+ hOpt[0].each do |xKey, xValue|
105
+ oEdge[xKey.to_s] = xValue
106
+ end
107
+ end
108
+
109
+ @elements_order.push( {
110
+ "type" => "edge",
111
+ "value" => oEdge
112
+ } )
113
+ @loEdges.push( oEdge )
114
+
115
+ return( oEdge )
116
+ end
117
+ end
101
118
  end
102
119
 
103
120
  #
104
- # Create new graph
121
+ # Create à new graph
105
122
  #
106
123
  # In:
107
124
  # xGraphName : Graph name
@@ -124,7 +141,21 @@ class GraphViz
124
141
 
125
142
  return( @hoGraphs[xGraphName] )
126
143
  end
127
-
144
+
145
+ #
146
+ # Get the number of nodes
147
+ #
148
+ def node_count
149
+ @hoNodes.size
150
+ end
151
+
152
+ #
153
+ # Get the number of edges
154
+ #
155
+ def edge_count
156
+ @loEdges.size
157
+ end
158
+
128
159
  def method_missing( idName, *args, &block ) #:nodoc:
129
160
  xName = idName.id2name
130
161
 
@@ -136,7 +167,13 @@ class GraphViz
136
167
  yield( rCod )
137
168
  else
138
169
  # Create a node named '#{xName}' or search for a node, edge or cluster
139
- return( @hoNodes[xName] ) if @hoNodes.keys.include?( xName )
170
+ if @hoNodes.keys.include?( xName )
171
+ if( args[0] )
172
+ return "#{xName}:#{args[0].to_s}"
173
+ else
174
+ return( @hoNodes[xName] )
175
+ end
176
+ end
140
177
  return( @hoGraphs[xName] ) if @hoGraphs.keys.include?( xName )
141
178
 
142
179
  rCod = add_node( xName, args[0] )
@@ -202,7 +239,7 @@ class GraphViz
202
239
  if kElement["value"] == nil then
203
240
  raise ArgumentError, "#{kElement["name"]} has a nil value!"
204
241
  end
205
-
242
+
206
243
  case kElement["type"]
207
244
  when "graph_attr"
208
245
  xData << xSeparator + kElement["name"] + " = \"" + kElement["value"] + "\""
@@ -230,6 +267,18 @@ class GraphViz
230
267
  end
231
268
  }
232
269
 
270
+ if xData.length > 0
271
+ case xLastType
272
+ when "graph_attr"
273
+ xDOTScript << " " + xData + ";\n"
274
+
275
+ when "node_attr"
276
+ xDOTScript << " node [" + xData + "];\n"
277
+
278
+ when "edge_attr"
279
+ xDOTScript << " edge [" + xData + "];\n"
280
+ end
281
+ end
233
282
  xDOTScript << "}"
234
283
 
235
284
  if @oParentGraph.nil? == false
@@ -288,6 +337,30 @@ class GraphViz
288
337
  end
289
338
  end
290
339
 
340
+ alias :save :output
341
+
342
+ #
343
+ # Get the graph name
344
+ #
345
+ def name
346
+ @name.clone
347
+ end
348
+
349
+ #
350
+ # Create an edge between the current cluster and the node or cluster +oNode+
351
+ #
352
+ def <<( oNode )
353
+ raise( ArgumentError, "Edge between root graph and node or cluster not allowed!" ) if self.pg.nil?
354
+
355
+ if( oNode.class == Array )
356
+ oNode.each do |no|
357
+ self << no
358
+ end
359
+ else
360
+ return GraphViz::commonGraph( oNode, self ).add_edge( self, oNode )
361
+ end
362
+ end
363
+
291
364
  def pg #:nodoc:
292
365
  @oParentGraph
293
366
  end
@@ -312,6 +385,30 @@ class GraphViz
312
385
  } )
313
386
  end
314
387
 
388
+ ## ----------------------------------------------------------------------------
389
+
390
+ #
391
+ # Change default options (:use, :path and :output)
392
+ #
393
+ def self.default( hOpts )
394
+ hOpts.each do |k, v|
395
+ case k.to_s
396
+ when "use"
397
+ @@prog = v
398
+ when "path"
399
+ @@path = v
400
+ when "output"
401
+ @@format = v
402
+ else
403
+ warn "Invalide option #{k}!"
404
+ end
405
+ end
406
+ end
407
+
408
+ def self.options( hOpts )
409
+ GraphViz::default( hOpts )
410
+ end
411
+
315
412
  ## ----------------------------------------------------------------------------
316
413
 
317
414
  private
@@ -324,7 +421,7 @@ class GraphViz
324
421
  ## Var: Parent graph
325
422
  @oParentGraph
326
423
 
327
- ## Var: Type de graphe (orient� ou non)
424
+ ## Var: Type de graphe (orienté ou non)
328
425
  @oGraphType
329
426
 
330
427
  #
@@ -339,11 +436,11 @@ class GraphViz
339
436
  # :type : Graph type (Constants::GRAPHTYPE) (default : digraph)
340
437
  #
341
438
  def initialize( xGraphName, *hOpt, &block )
342
- @format = "dot"
343
439
  @filename = nil
344
- @prog = "dot"
345
- @path = nil
346
440
  @name = xGraphName
441
+ @format = @@format
442
+ @prog = @@prog
443
+ @path = @@path
347
444
 
348
445
  @elements_order = Array::new()
349
446
 
@@ -15,34 +15,53 @@
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.3"
18
+ RGV_VERSION = "0.9.0"
19
19
 
20
20
  ## Const: Output formats
21
21
  FORMATS = [
22
+ "bmp",
23
+ "canon",
22
24
  "dot",
23
- "ps",
24
- "mif",
25
+ "xdot",
26
+ "cmap",
27
+ "dia",
28
+ "eps",
29
+ "fig",
30
+ "gd",
31
+ "gd2",
32
+ "gif",
33
+ "gtk",
25
34
  "hpgl",
26
- "pcl",
27
- "gif",
35
+ "ico",
28
36
  "imap",
37
+ "cmapx",
38
+ "imap_np",
39
+ "cmapx_np",
29
40
  "ismap",
30
- "cmap",
31
41
  "jpeg",
32
- "png",
33
- "xpm",
42
+ "jpg",
43
+ "jpe",
44
+ "mif",
45
+ "mp",
46
+ "pcl",
47
+ "pdf",
34
48
  "pic",
35
- "gd",
36
- "gd2",
37
- "wbmp",
49
+ "plain",
50
+ "plain-ext",
51
+ "png",
52
+ "ps",
53
+ "ps2",
54
+ "svg",
55
+ "svgz",
56
+ "tga",
57
+ "tiff",
58
+ "tif",
59
+ "vml",
60
+ "vmlz",
38
61
  "vrml",
39
62
  "vtx",
40
- "mp",
41
- "fig",
42
- "svg",
43
- "plain",
44
- "text",
45
- "canon",
63
+ "wbmp",
64
+ "xlib",
46
65
  "none"
47
66
  ]
48
67
 
data/lib/graphviz/edge.rb CHANGED
@@ -64,7 +64,30 @@ class GraphViz
64
64
  def []( xAttrName )
65
65
  @oAttrEdge[xAttrName.to_s].clone
66
66
  end
67
-
67
+
68
+ #
69
+ # Set edge attributs
70
+ #
71
+ # Example :
72
+ # e = graph.add_edge( ... )
73
+ # ...
74
+ # e.set { |_e|
75
+ # _e.color = "blue"
76
+ # _e.fontcolor = "red"
77
+ # }
78
+ #
79
+ def set( &b )
80
+ yield( self )
81
+ end
82
+
83
+ # Add edge options
84
+ # use edge.<option>=<value> or edge.<option>( <value> )
85
+ def method_missing( idName, *args, &block ) #:nodoc:
86
+ xName = idName.id2name
87
+
88
+ self[xName.gsub( /=$/, "" )]=args[0]
89
+ end
90
+
68
91
  def output( oGraphType ) #:nodoc:
69
92
  xLink = " -> "
70
93
  if oGraphType == "graph"
data/lib/graphviz/node.rb CHANGED
@@ -62,7 +62,36 @@ class GraphViz
62
62
  # Create an edge between the current node and the node +oNode+
63
63
  #
64
64
  def <<( oNode )
65
- return GraphViz::commonGraph( oNode, self ).add_edge( self, oNode )
65
+ if( oNode.class == Array )
66
+ oNode.each do |no|
67
+ self << no
68
+ end
69
+ else
70
+ return GraphViz::commonGraph( oNode, self ).add_edge( self, oNode )
71
+ end
72
+ end
73
+
74
+ #
75
+ # Set node attributs
76
+ #
77
+ # Example :
78
+ # n = graph.add_node( ... )
79
+ # ...
80
+ # n.set { |_n|
81
+ # _n.color = "blue"
82
+ # _n.fontcolor = "red"
83
+ # }
84
+ #
85
+ def set( &b )
86
+ yield( self )
87
+ end
88
+
89
+ # Add node options
90
+ # use node.<option>=<value> or node.<option>( <value> )
91
+ def method_missing( idName, *args, &block ) #:nodoc:
92
+ xName = idName.id2name
93
+
94
+ self[xName.gsub( /=$/, "" )]=args[0]
66
95
  end
67
96
 
68
97
  def pg #:nodoc:
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-graphviz
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.3
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gregoire Lejeune
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-05-16 00:00:00 +02:00
12
+ date: 2008-06-12 00:00:00 +02:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -35,11 +35,6 @@ files:
35
35
  - examples/HTML-Labels.rb
36
36
  - examples/maketest.sh
37
37
  - examples/p2p.rb
38
- - examples/s10.png
39
- - examples/s12.png
40
- - examples/s13.png
41
- - examples/s14.png
42
- - examples/sample-dsl-10.rb
43
38
  - examples/sample01.rb
44
39
  - examples/sample02.rb
45
40
  - examples/sample03.rb
@@ -53,6 +48,12 @@ files:
53
48
  - examples/sample12.rb
54
49
  - examples/sample13.rb
55
50
  - examples/sample14.rb
51
+ - examples/sample15.rb
52
+ - examples/sample16.rb
53
+ - examples/sample17.rb
54
+ - examples/sample18.rb
55
+ - examples/sample19.rb
56
+ - examples/sample20.rb
56
57
  - examples/shapes.rb
57
58
  - examples/test.xml
58
59
  - examples/testorder.rb
data/examples/s10.png DELETED
Binary file
data/examples/s12.png DELETED
Binary file
data/examples/s13.png DELETED
Binary file
data/examples/s14.png DELETED
Binary file
@@ -1,33 +0,0 @@
1
- $:.unshift( "../lib" );
2
- require "graphviz"
3
-
4
- g = GraphViz::new( :path => ARGV[0] )
5
-
6
- g.digraph :G {
7
-
8
- subgraph :cluster_0 {
9
- style :filled
10
- color :lightgrey
11
- node :style => :filled, :color => :white
12
- a0 << a1 << a2 << a3
13
- label "process #1"
14
- }
15
-
16
- subgraph :cluster_1 {
17
- node :style => :filled
18
- b0 << b1 << b2 << b3
19
- label "process #2"
20
- color :blue
21
- }
22
-
23
- start << a0;
24
- start << b0;
25
- a1 << b3;
26
- b2 << a3;
27
- a3 << a0;
28
- a3 << _end;
29
- b3 << _end;
30
-
31
- start :shape => :Mdiamond
32
- _end :shape=> :Msquare
33
- }