ruby-graphviz_c 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (184) hide show
  1. checksums.yaml +7 -0
  2. data/.gemrc +0 -0
  3. data/.gitignore +9 -0
  4. data/.travis.yml +7 -0
  5. data/AUTHORS.rdoc +33 -0
  6. data/CHANGELOG.rdoc +287 -0
  7. data/COPYING.rdoc +133 -0
  8. data/Gemfile +4 -0
  9. data/README.rdoc +206 -0
  10. data/Rakefile +71 -0
  11. data/bin/dot2ruby +91 -0
  12. data/bin/gem2gv +165 -0
  13. data/bin/git2gv +167 -0
  14. data/bin/ruby2gv +234 -0
  15. data/bin/xml2gv +96 -0
  16. data/examples/dot/JSP.dot +52 -0
  17. data/examples/dot/balanced.dot +36 -0
  18. data/examples/dot/cluster.dot +30 -0
  19. data/examples/dot/dotgraph.dot +28 -0
  20. data/examples/dot/fsm.dot +20 -0
  21. data/examples/dot/genetic.dot +118 -0
  22. data/examples/dot/hello.dot +1 -0
  23. data/examples/dot/hello_test.rb +33 -0
  24. data/examples/dot/lion_share.dot +103 -0
  25. data/examples/dot/prof.dot +150 -0
  26. data/examples/dot/psg.dot +28 -0
  27. data/examples/dot/rank.dot +6 -0
  28. data/examples/dot/sdh.dot +284 -0
  29. data/examples/dot/siblings.dot +492 -0
  30. data/examples/dot/so-sample001.gv +30 -0
  31. data/examples/dot/so-sample002.gv +33 -0
  32. data/examples/dot/so-sample003.gv +45 -0
  33. data/examples/dot/test.dot +17 -0
  34. data/examples/dot/test_parse.rb +13 -0
  35. data/examples/dot/this_crach_with_dot_2.20.dot +24 -0
  36. data/examples/dot/unix.dot +104 -0
  37. data/examples/graphml/attributes.ext.graphml +12 -0
  38. data/examples/graphml/attributes.graphml +40 -0
  39. data/examples/graphml/cluster.graphml +75 -0
  40. data/examples/graphml/failed_graph.graphml +461 -0
  41. data/examples/graphml/hyper.graphml +29 -0
  42. data/examples/graphml/nested.graphml +54 -0
  43. data/examples/graphml/port.graphml +32 -0
  44. data/examples/graphml/simple.graphml +30 -0
  45. data/examples/hello.png +0 -0
  46. data/examples/rgv/rgv.ps +125 -0
  47. data/examples/rgv/test_rgv.rb +12 -0
  48. data/examples/sample01.rb +32 -0
  49. data/examples/sample02.rb +42 -0
  50. data/examples/sample03.rb +31 -0
  51. data/examples/sample04.rb +22 -0
  52. data/examples/sample05.rb +32 -0
  53. data/examples/sample06.rb +46 -0
  54. data/examples/sample07.rb +23 -0
  55. data/examples/sample08.rb +34 -0
  56. data/examples/sample09.rb +50 -0
  57. data/examples/sample10.rb +50 -0
  58. data/examples/sample11.rb +42 -0
  59. data/examples/sample12.rb +55 -0
  60. data/examples/sample13.rb +48 -0
  61. data/examples/sample14.rb +44 -0
  62. data/examples/sample15.rb +25 -0
  63. data/examples/sample16.rb +8 -0
  64. data/examples/sample17.rb +92 -0
  65. data/examples/sample18.rb +24 -0
  66. data/examples/sample19.rb +59 -0
  67. data/examples/sample20.rb +47 -0
  68. data/examples/sample21.rb +12 -0
  69. data/examples/sample22.rb +10 -0
  70. data/examples/sample23.rb +11 -0
  71. data/examples/sample24.rb +11 -0
  72. data/examples/sample25.rb +11 -0
  73. data/examples/sample26.rb +8 -0
  74. data/examples/sample27.rb +8 -0
  75. data/examples/sample28.rb +12 -0
  76. data/examples/sample29.rb +8 -0
  77. data/examples/sample30.rb +12 -0
  78. data/examples/sample31.rb +10 -0
  79. data/examples/sample32.rb +14 -0
  80. data/examples/sample33.rb +43 -0
  81. data/examples/sample34.rb +29 -0
  82. data/examples/sample35.rb +43 -0
  83. data/examples/sample36.rb +35 -0
  84. data/examples/sample37.rb +87 -0
  85. data/examples/sample38.rb +12 -0
  86. data/examples/sample39.rb +11 -0
  87. data/examples/sample40.rb +17 -0
  88. data/examples/sample41.rb +8 -0
  89. data/examples/sample42.rb +35 -0
  90. data/examples/sample43.rb +26 -0
  91. data/examples/sample44.rb +97 -0
  92. data/examples/sample45.rb +24 -0
  93. data/examples/sample46.rb +43 -0
  94. data/examples/sample47.rb +7 -0
  95. data/examples/sample48.rb +62 -0
  96. data/examples/sample49.rb +10 -0
  97. data/examples/sample50.rb +215 -0
  98. data/examples/sample51.rb +37 -0
  99. data/examples/sample52.rb +62 -0
  100. data/examples/sample53.rb +26 -0
  101. data/examples/sample54.rb +26 -0
  102. data/examples/sample55.rb +9 -0
  103. data/examples/sample56.rb +10 -0
  104. data/examples/sample57.rb +8 -0
  105. data/examples/sample58.rb +33 -0
  106. data/examples/sample59.rb +14 -0
  107. data/examples/sample60.rb +12 -0
  108. data/examples/sample61.rb +12 -0
  109. data/examples/sample62.rb +24 -0
  110. data/examples/sample63.rb +32 -0
  111. data/examples/sample64.rb +31 -0
  112. data/examples/sample65.rb +9 -0
  113. data/examples/sample66.rb +4 -0
  114. data/examples/sample67.rb +10 -0
  115. data/examples/sample68.rb +27 -0
  116. data/examples/sample69.rb +23 -0
  117. data/examples/sample70.rb +9 -0
  118. data/examples/sample99.rb +70 -0
  119. data/examples/sdlshapes/README +2 -0
  120. data/examples/sdlshapes/sdl.ps +655 -0
  121. data/examples/sdlshapes/sdlshapes.dot +78 -0
  122. data/examples/test.xml +26 -0
  123. data/examples/theory/pert.rb +47 -0
  124. data/examples/theory/tests.rb +87 -0
  125. data/lib/ext/gvpr/dot2ruby.g +185 -0
  126. data/lib/graphviz/attrs.rb +73 -0
  127. data/lib/graphviz/constants.rb +294 -0
  128. data/lib/graphviz/core_ext.rb +64 -0
  129. data/lib/graphviz/dot2ruby.rb +59 -0
  130. data/lib/graphviz/dot_script.rb +109 -0
  131. data/lib/graphviz/dsl.rb +67 -0
  132. data/lib/graphviz/edge.rb +197 -0
  133. data/lib/graphviz/elements.rb +39 -0
  134. data/lib/graphviz/ext.rb +17 -0
  135. data/lib/graphviz/family_tree/couple.rb +63 -0
  136. data/lib/graphviz/family_tree/generation.rb +39 -0
  137. data/lib/graphviz/family_tree/person.rb +120 -0
  138. data/lib/graphviz/family_tree/sibling.rb +13 -0
  139. data/lib/graphviz/family_tree.rb +118 -0
  140. data/lib/graphviz/graphml.rb +268 -0
  141. data/lib/graphviz/math/matrix.rb +221 -0
  142. data/lib/graphviz/node.rb +160 -0
  143. data/lib/graphviz/nothugly/nothugly.xsl +321 -0
  144. data/lib/graphviz/nothugly.rb +63 -0
  145. data/lib/graphviz/theory.rb +321 -0
  146. data/lib/graphviz/types/arrow_type.rb +32 -0
  147. data/lib/graphviz/types/color.rb +58 -0
  148. data/lib/graphviz/types/color_list.rb +24 -0
  149. data/lib/graphviz/types/esc_string.rb +20 -0
  150. data/lib/graphviz/types/gv_bool.rb +49 -0
  151. data/lib/graphviz/types/gv_double.rb +32 -0
  152. data/lib/graphviz/types/html_string.rb +18 -0
  153. data/lib/graphviz/types/lbl_string.rb +22 -0
  154. data/lib/graphviz/types/rect.rb +35 -0
  155. data/lib/graphviz/types/spline_type.rb +77 -0
  156. data/lib/graphviz/types.rb +22 -0
  157. data/lib/graphviz/utils/colors.rb +1018 -0
  158. data/lib/graphviz/utils.rb +70 -0
  159. data/lib/graphviz/xml.rb +119 -0
  160. data/lib/graphviz.rb +967 -0
  161. data/lib/ruby-graphviz.rb +1 -0
  162. data/man/dot2ruby.1 +66 -0
  163. data/man/dot2ruby.1.ronn +55 -0
  164. data/man/gem2gv.1 +60 -0
  165. data/man/gem2gv.1.ronn +47 -0
  166. data/man/git2gv.1 +48 -0
  167. data/man/git2gv.1.ronn +40 -0
  168. data/man/ruby2gv.1 +60 -0
  169. data/man/ruby2gv.1.ronn +47 -0
  170. data/man/xml2gv.1 +48 -0
  171. data/man/xml2gv.1.ronn +39 -0
  172. data/ruby-graphviz.gemspec +47 -0
  173. data/setup.rb +1585 -0
  174. data/test/helper.rb +13 -0
  175. data/test/support.rb +95 -0
  176. data/test/test_dot_script.rb +47 -0
  177. data/test/test_examples.rb +151 -0
  178. data/test/test_graph.rb +115 -0
  179. data/test/test_search.rb +29 -0
  180. data/test/test_subgraph.rb +27 -0
  181. data/test/test_theory.rb +98 -0
  182. data/test/test_types.rb +65 -0
  183. data/test/test_utils_colors.rb +52 -0
  184. metadata +301 -0
@@ -0,0 +1,37 @@
1
+ # http://www.graphviz.org/Gallery/undirected/process.html
2
+ #
3
+ # graph G {
4
+ # run -- intr;
5
+ # intr -- runbl;
6
+ # runbl -- run;
7
+ # run -- kernel;
8
+ # kernel -- zombie;
9
+ # kernel -- sleep;
10
+ # kernel -- runmem;
11
+ # sleep -- swap;
12
+ # swap -- runswap;
13
+ # runswap -- new;
14
+ # runswap -- runmem;
15
+ # new -- runmem;
16
+ # sleep -- runmem;
17
+ # }
18
+
19
+ $:.unshift( "../../lib" );
20
+ require "graphviz"
21
+
22
+ GraphViz::new( :G, :type => :graph ) { |g|
23
+ g._new[:label] = "new"
24
+ g.run << g.intr
25
+ g.intr << g.runbl
26
+ g.runbl << g.run
27
+ g.run << g.kernel
28
+ g.kernel << g.zombie
29
+ g.kernel << g.sleep
30
+ g.kernel << g.runmem
31
+ g.sleep << g.swap
32
+ g.swap << g.runswap
33
+ g.runswap << g._new
34
+ g.runswap << g.runmem
35
+ g._new << g.runmem
36
+ g.sleep << g.runmem
37
+ }.output( :png => "#{$0}.png", :use => :fdp )
@@ -0,0 +1,62 @@
1
+ # http://www.graphviz.org/Gallery/directed/traffic_lights.gv.txt
2
+ #
3
+ # digraph TrafficLights {
4
+ # node [shape=box]; gy2; yr2; rg2; gy1; yr1; rg1;
5
+ # node [shape=circle,fixedsize=true,width=0.9]; green2; yellow2; red2; safe2; safe1; green1; yellow1; red1;
6
+ # gy2->yellow2;
7
+ # rg2->green2;
8
+ # yr2->safe1;
9
+ # yr2->red2;
10
+ # safe2->rg2;
11
+ # green2->gy2;
12
+ # yellow2->yr2;
13
+ # red2->rg2;
14
+ # gy1->yellow1;
15
+ # rg1->green1;
16
+ # yr1->safe2;
17
+ # yr1->red1;
18
+ # safe1->rg1;
19
+ # green1->gy1;
20
+ # yellow1->yr1;
21
+ # red1->rg1;
22
+ #
23
+ # overlap=false
24
+ # label="PetriNet Model TrafficLights\nExtracted from ConceptBase and layed out by Graphviz"
25
+ # fontsize=12;
26
+ # }
27
+
28
+ $:.unshift( "../../lib" );
29
+ require "graphviz"
30
+
31
+ GraphViz::new( "TrafficLights", :type => :digraph ) { |g|
32
+ g.gy2[:shape] = :box; g.yr2[:shape] = :box; g.rg2[:shape] = :box; g.gy1[:shape] = :box; g.yr1[:shape] = :box; g.rg1[:shape] = :box;
33
+ g.green2.set { |n| n[:shape] = :circle; n[:fixedsize] = :true; n[:width] = 0.9 }
34
+ g.yellow2.set { |n| n[:shape] = :circle; n[:fixedsize] = :true; n[:width] = 0.9 }
35
+ g.red2.set { |n| n[:shape] = :circle; n[:fixedsize] = :true; n[:width] = 0.9 }
36
+ g.safe2.set { |n| n[:shape] = :circle; n[:fixedsize] = :true; n[:width] = 0.9 }
37
+ g.safe1.set { |n| n[:shape] = :circle; n[:fixedsize] = :true; n[:width] = 0.9 }
38
+ g.green1.set { |n| n[:shape] = :circle; n[:fixedsize] = :true; n[:width] = 0.9 }
39
+ g.yellow1.set { |n| n[:shape] = :circle; n[:fixedsize] = :true; n[:width] = 0.9 }
40
+ g.red1.set { |n| n[:shape] = :circle; n[:fixedsize] = :true; n[:width] = 0.9 }
41
+
42
+ g.gy2 << g.yellow2
43
+ g.rg2 << g.green2
44
+ g.yr2 << g.safe1
45
+ g.yr2 << g.red2
46
+ g.safe2 << g.rg2
47
+ g.green2 << g.gy2
48
+ g.yellow2 << g.yr2
49
+ g.red2 << g.rg2
50
+ g.gy1 << g.yellow1
51
+ g.rg1 << g.green1
52
+ g.yr1 << g.safe2
53
+ g.yr1 << g.red1
54
+ g.safe1 << g.rg1
55
+ g.green1 << g.gy1
56
+ g.yellow1 << g.yr1
57
+ g.red1 << g.rg1
58
+
59
+ g[:overlap] = :false
60
+ g[:label] = 'PetriNet Model TrafficLights\nExtracted from ConceptBase and layed out by Graphviz'
61
+ g[:fontsize] = 12;
62
+ }.output( :errors => 1, :png => "#{$0}.png" )
@@ -0,0 +1,26 @@
1
+ $:.unshift( "../lib" )
2
+ require 'graphviz/family_tree'
3
+
4
+ tree = GraphViz::FamilyTree.new do
5
+ generation do
6
+ benoist.is_a_man( "Benoist" )
7
+ nathalie.is_a_woman( "Nathalie" )
8
+
9
+ benoist.is_maried_with nathalie
10
+ end
11
+
12
+ generation do
13
+ charlotte.is_a_woman( "Charlotte" )
14
+ amelie.is_a_woman( "Amelie" )
15
+ clement.is_a_man( "Clement" )
16
+ gregoire.is_a_man( "Gregoire" )
17
+
18
+ muriel.is_a_woman( "Muriel" )
19
+
20
+ gregoire.is_maried_with muriel
21
+ end
22
+
23
+ couple( benoist, nathalie ).kids( charlotte, amelie, clement, gregoire )
24
+ end
25
+
26
+ tree.graph.save( :png => "#{$0}.png" )
@@ -0,0 +1,26 @@
1
+ $:.unshift( "../lib" )
2
+ require 'graphviz'
3
+
4
+ class Array
5
+ def rotate
6
+ ## Solution #1 by greg
7
+ # self.push(r = self.shift)
8
+ # return r
9
+
10
+ ## Solution #2 by madx
11
+ # shift.tap {|e| push e }
12
+
13
+ ## Solution #3 by greg
14
+ push(shift)[-1]
15
+ end
16
+ end
17
+
18
+ type = ["box", "point"]
19
+
20
+ GraphViz.graph( :G, :use => :neato ) { |g|
21
+ (1..5).each do |x|
22
+ (1..5).each do |y|
23
+ g.add_nodes( "n#{x}x#{y}", :pos => "#{x},#{y}!", :shape => type.rotate )
24
+ end
25
+ end
26
+ }.output( :png => "#{$0}.png" )
@@ -0,0 +1,9 @@
1
+ $:.unshift( "../lib" )
2
+ require 'graphviz'
3
+
4
+ puts GraphViz.graph( :G ) { |g|
5
+ g[:label] = "<<b>This</b> is <i>a</i> <b>test</b>>"
6
+ n1 = g.add_nodes( "N1", :label => '<<b>node 1</b>>')
7
+ n2 = g.add_nodes( "N2", :label => '<<b>node 2</b>>')
8
+ g.add_edges( n1, n2, :label => '<<u>edge</u>>')
9
+ }.output( :png => "#{$0}.png", :none => String )
@@ -0,0 +1,10 @@
1
+ # http://www.graphviz.org/Gallery/directed/hello.html
2
+ #
3
+ # digraph G {Hello->World}
4
+
5
+ $:.unshift( "../lib" );
6
+ require "graphviz"
7
+
8
+ GraphViz::new( :G, :type => :digraph ) { |g|
9
+ g.world( :label => "<World" ) << g.hello( :label => "Hello>" )
10
+ }.output( :svg => "#{$0}.svg" )
@@ -0,0 +1,8 @@
1
+ $:.unshift( "../lib" )
2
+
3
+ require 'graphviz/graphml'
4
+
5
+ graphml = File.join( File.dirname( File.expand_path( __FILE__ ) ), "graphml", "port.graphml" )
6
+ g = GraphViz::GraphML.new( graphml )
7
+ g.graph.output( :png => "#{$0}.png" )
8
+ puts g.graph.output( :none => String )
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/ruby
2
+
3
+ # By Jonas Elfström - http://github.com/jonelf
4
+ $:.unshift( "../lib" )
5
+ require 'graphviz'
6
+
7
+ @min_level=1
8
+ @max_level=12
9
+ @max_depth=10
10
+ start_level=6
11
+
12
+ @g = GraphViz.new(:G, :type => "strict digraph")
13
+ # or @g = GraphViz.new(:G, :type => "digraph", :strict => true)
14
+ # or @g = GraphViz.digraph(:G, :strict => true)
15
+ # or @g = GraphViz.strict_digraph(:G)
16
+
17
+ def add_nodes(level, depth, parent)
18
+ if depth<@max_depth
19
+ current=[level, depth].join(",")
20
+
21
+ sub=level<=>@min_level
22
+ add=@max_level<=>level
23
+ add_nodes(level-sub, depth+1, current)
24
+ add_nodes(level+add, depth+1, current)
25
+
26
+ @g.add_nodes(current).label=level.to_s
27
+ @g.add_edges(parent, current) unless parent=="00"
28
+ end
29
+ end
30
+
31
+ add_nodes(start_level, 0, "00")
32
+
33
+ @g.output( :png => "#{$0}.png" )
@@ -0,0 +1,14 @@
1
+ $:.unshift( "../lib" )
2
+ require "graphviz"
3
+
4
+ graph = {
5
+ "a" => {
6
+ "b" => "d",
7
+ "c" => ["e", "f", "a"]
8
+ },
9
+ "g" => "e",
10
+ }
11
+
12
+ g = GraphViz::new( "G" )
13
+ g.add(graph)
14
+ g.output( :png => "#{$0}.png" )
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift( "../lib" );
4
+ require "graphviz"
5
+
6
+ asm = GraphViz::new( "My ASM" )
7
+
8
+ my = asm.add_nodes("My")
9
+ asmn = asm.add_nodes("ASM")
10
+ asm.add_edges(my, asmn)
11
+
12
+ asm.output( :png => "#{$0}.png" )
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift( "../lib" );
4
+ require "graphviz"
5
+
6
+ asm = GraphViz::new( "" )
7
+
8
+ my = asm.add_nodes("My")
9
+ asmn = asm.add_nodes("ASM")
10
+ asm.add_edges(my, asmn)
11
+
12
+ asm.output( :png => "#{$0}.png" )
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift( "../lib" );
4
+ require "graphviz"
5
+
6
+ hello_world = GraphViz::new( "" )
7
+
8
+ hello = hello_world.add_nodes("Hello")
9
+ world = hello_world.add_nodes("World")
10
+ hello_world.add_edges(hello, world)
11
+
12
+ # final_graph = GraphViz.parse_string( hello_world.output( :dot => String ) )
13
+ # final_graph.each_node do |_, node|
14
+ # puts "Node #{node.id} : position = #{node[:pos]}"
15
+ # end
16
+
17
+ hello_world = hello_world.complete
18
+ hello_world.each_node do |_, node|
19
+ puts "Node #{node.id} : position = " ; p node[:pos].point
20
+ end
21
+
22
+ puts "---------"
23
+
24
+ puts hello_world.output( :canon => String )
@@ -0,0 +1,32 @@
1
+ $:.unshift( "../lib" )
2
+ require 'graphviz/dsl'
3
+
4
+ digraph :G do
5
+ cluster_0 do
6
+ graph[:style => :filled, :color => :lightgrey]
7
+ node[:style => :filled, :color => :white]
8
+ a0 << a1 << a2 << a3
9
+ graph[:label => "process #1"]
10
+ end
11
+
12
+ cluster_1 do
13
+ node[:style => :filled]
14
+ b0 << b1 << b2 << b3
15
+ graph[:label => "process #2", :color => :blue]
16
+ end
17
+
18
+ start << a0
19
+ start << b0
20
+ a1 << b3
21
+ b2 << a3
22
+ a3 << a0
23
+ a3 << _end
24
+ b3 << _end
25
+
26
+ start[:shape] = :Mdiamond
27
+ _end[:label] = "end"
28
+ _end[:shape] = :Mdiamond
29
+
30
+ output(:png => "#{$0}.png")
31
+ end
32
+
@@ -0,0 +1,31 @@
1
+ $:.unshift( "../lib" )
2
+ require 'graphviz/dsl'
3
+
4
+ digraph :G do
5
+
6
+ node[:color => :lightblue, :style => :filled, :shape => :egg]
7
+ edge[:color => :gray, :arrowhead => :vee]
8
+
9
+ e "C/C++", "Java"
10
+
11
+ java do
12
+ n("Java") << n("Groovy")
13
+ n("Java") << n("Clojure")
14
+ n("Java") << n("JRuby")
15
+ graph[:label => "Java", :color => :blue]
16
+ end
17
+
18
+ e "C/C++", "Perl"
19
+ e "Perl", "PHP"
20
+ e "Perl", "Ruby"
21
+ e "Ruby", "Rubinius"
22
+ e "Ruby", "MacRuby"
23
+ e "Ruby", "JRuby"
24
+
25
+ %w{ Ruby JRuby MacRuby Rubinius }.each do |ruby|
26
+ n(ruby)[:color => :tomato]
27
+ end
28
+
29
+ output :png => "#{$0}.png"
30
+ end
31
+
@@ -0,0 +1,9 @@
1
+ $:.unshift("../lib")
2
+
3
+ require 'graphviz/dsl'
4
+ digraph :G do
5
+ world[:label => "World"] << hello[:label => "Hello"]
6
+ #world << hello
7
+
8
+ output :png => "#{$0}.png"
9
+ end
@@ -0,0 +1,4 @@
1
+ $:.unshift("../lib")
2
+
3
+ require 'graphviz'
4
+ GraphViz.generate(30, 44, true, (1..8)).output(:png => "#{$0}.png")
@@ -0,0 +1,10 @@
1
+ $:.unshift("../lib")
2
+
3
+ require 'graphviz'
4
+ graph = GraphViz.graph(:G)
5
+ graph.add_nodes(["A", "B", "C", "D", "E", "F", "G"])
6
+ graph.add_edges("A", ["B", "C", "E"])
7
+ graph.add_edges("B", ["D", "F"])
8
+ graph.add_edges("C", "G")
9
+ graph.add_edges("F", "E")
10
+ graph.output(:png => "#{$0}.png")
@@ -0,0 +1,27 @@
1
+ $:.unshift("../lib")
2
+
3
+ require 'graphviz'
4
+ require 'graphviz/theory'
5
+ g = GraphViz.graph(:G)
6
+ g.add_nodes(["A", "B", "C", "D", "E", "F", "G"])
7
+ g.add_edges("A", ["B", "C", "E"])
8
+ g.add_edges("B", ["D", "F"])
9
+ g.add_edges("C", "G")
10
+ g.add_edges("F", "E")
11
+ g.output(:png => "#{$0}000.png")
12
+
13
+ t = GraphViz::Theory.new(g)
14
+ i = 1
15
+ t.dfs("A") { |node|
16
+ name = sprintf("%s%03d.png", $0, i)
17
+ node[:color => :lightblue, :style => :filled]
18
+ g.output(:png => name)
19
+ i = i + 1
20
+ }
21
+
22
+ t.bfs("A") { |node|
23
+ name = sprintf("%s%03d.png", $0, i)
24
+ node[:color => :red, :style => :filled]
25
+ g.output(:png => name)
26
+ i = i + 1
27
+ }
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift( "../lib" );
4
+ require "graphviz"
5
+
6
+ g = GraphViz::new( "G", :type => "graph" )
7
+ g[:compound] = true
8
+ g[:rankdir] = "LR"
9
+
10
+ c0 = g.add_graph( "cluster0", "label" => "cluster #1" )
11
+ a0 = c0.add_nodes( "a0" )
12
+
13
+ c1 = g.add_graph( "cluster1", "label" => "cluster #2" )
14
+ b0 = c1.add_nodes( "b0" )
15
+
16
+ e1 = g.add_edges(a0,b0)
17
+ e1[:lhead] = c1.id
18
+ e1[:ltail] = c0.id
19
+
20
+ e2 = g.add_edges(a0,b0)
21
+ e2[:lhead] = c1.id
22
+
23
+ g.output( :png => "#{$0}.png" )