ruby-graphviz 1.0.7 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. data/CHANGELOG.rdoc +4 -0
  2. data/bin/dot2ruby +5 -5
  3. data/bin/gem2gv +18 -18
  4. data/bin/git2gv +20 -20
  5. data/bin/ruby2gv +26 -26
  6. data/bin/xml2gv +5 -5
  7. data/examples/sample06.rb +5 -5
  8. data/examples/sample12.rb +3 -3
  9. data/examples/sample13.rb +8 -8
  10. data/examples/sample14.rb +8 -8
  11. data/examples/sample15.rb +1 -1
  12. data/examples/sample17.rb +7 -7
  13. data/examples/sample19.rb +10 -10
  14. data/examples/sample20.rb +2 -2
  15. data/examples/sample21.rb +1 -1
  16. data/examples/sample28.rb +1 -1
  17. data/examples/sample31.rb +1 -1
  18. data/examples/sample33.rb +10 -10
  19. data/examples/sample34.rb +1 -1
  20. data/examples/sample35.rb +7 -7
  21. data/examples/sample36.rb +2 -2
  22. data/examples/sample40.rb +4 -4
  23. data/examples/sample44.rb +72 -72
  24. data/examples/sample45.rb +4 -4
  25. data/examples/sample48.rb +7 -7
  26. data/examples/sample50.rb +1 -1
  27. data/examples/sample52.rb +2 -2
  28. data/examples/sample53.rb +2 -2
  29. data/examples/sample54.rb +3 -3
  30. data/examples/sample60.rb +2 -2
  31. data/examples/sample61.rb +2 -2
  32. data/examples/sample62.rb +2 -2
  33. data/examples/sample99.rb +15 -15
  34. data/examples/theory/pert.rb +2 -2
  35. data/examples/theory/tests.rb +2 -2
  36. data/lib/graphviz.rb +140 -140
  37. data/lib/graphviz/attrs.rb +6 -11
  38. data/lib/graphviz/constants.rb +35 -35
  39. data/lib/graphviz/core_ext.rb +1 -1
  40. data/lib/graphviz/dot2ruby.rb +7 -7
  41. data/lib/graphviz/dsl.rb +5 -5
  42. data/lib/graphviz/edge.rb +13 -13
  43. data/lib/graphviz/elements.rb +5 -5
  44. data/lib/graphviz/ext.rb +1 -1
  45. data/lib/graphviz/family_tree.rb +15 -15
  46. data/lib/graphviz/family_tree/couple.rb +11 -11
  47. data/lib/graphviz/family_tree/generation.rb +6 -6
  48. data/lib/graphviz/family_tree/person.rb +13 -13
  49. data/lib/graphviz/graphml.rb +39 -39
  50. data/lib/graphviz/math/matrix.rb +23 -23
  51. data/lib/graphviz/node.rb +8 -8
  52. data/lib/graphviz/nothugly.rb +3 -3
  53. data/lib/graphviz/theory.rb +8 -8
  54. data/lib/graphviz/types.rb +3 -3
  55. data/lib/graphviz/types/arrow_type.rb +3 -3
  56. data/lib/graphviz/types/color.rb +2 -2
  57. data/lib/graphviz/types/color_list.rb +2 -2
  58. data/lib/graphviz/types/esc_string.rb +2 -2
  59. data/lib/graphviz/types/gv_bool.rb +3 -3
  60. data/lib/graphviz/types/gv_double.rb +3 -3
  61. data/lib/graphviz/types/html_string.rb +2 -2
  62. data/lib/graphviz/types/lbl_string.rb +2 -2
  63. data/lib/graphviz/types/rect.rb +2 -2
  64. data/lib/graphviz/types/spline_type.rb +9 -9
  65. data/lib/graphviz/utils.rb +13 -13
  66. data/lib/graphviz/utils/colors.rb +35 -35
  67. data/lib/graphviz/xml.rb +24 -24
  68. data/setup.rb +4 -4
  69. data/test/test_graph.rb +9 -9
  70. data/test/test_subgraph.rb +1 -1
  71. data/test/test_theory.rb +4 -4
  72. data/test/test_utils_colors.rb +4 -4
  73. metadata +2 -2
data/examples/sample45.rb CHANGED
@@ -12,10 +12,10 @@ end
12
12
 
13
13
  g.node["shape"] = "ellipse"
14
14
 
15
- [ "box", "polygon", "ellipse", "circle", "point",
16
- "egg", "triangle", "plaintext", "diamond", "trapezium",
17
- "parallelogram", "house", "pentagon", "hexagon", "septagon", "octagon", "doublecircle",
18
- "doubleoctagon", "tripleoctagon", "invtriangle", "invtrapezium", "invhouse",
15
+ [ "box", "polygon", "ellipse", "circle", "point",
16
+ "egg", "triangle", "plaintext", "diamond", "trapezium",
17
+ "parallelogram", "house", "pentagon", "hexagon", "septagon", "octagon", "doublecircle",
18
+ "doubleoctagon", "tripleoctagon", "invtriangle", "invtrapezium", "invhouse",
19
19
  "Mdiamond", "Msquare", "Mcircle", "rect", "rectangle", "none", "note", "tab", "folder",
20
20
  "box3d", "component" ].each { |s|
21
21
  g.add_nodes( s, "shape" => s )
data/examples/sample48.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # http://www.graphviz.org/Gallery/directed/cluster.html
2
- #
2
+ #
3
3
  # digraph G {
4
- #
4
+ #
5
5
  # subgraph cluster_0 {
6
6
  # style=filled;
7
7
  # color=lightgrey;
@@ -9,7 +9,7 @@
9
9
  # a0 -> a1 -> a2 -> a3;
10
10
  # label = "process #1";
11
11
  # }
12
- #
12
+ #
13
13
  # subgraph cluster_1 {
14
14
  # node [style=filled];
15
15
  # b0 -> b1 -> b2 -> b3;
@@ -23,7 +23,7 @@
23
23
  # a3 -> a0;
24
24
  # a3 -> end;
25
25
  # b3 -> end;
26
- #
26
+ #
27
27
  # start [shape=Mdiamond];
28
28
  # end [shape=Msquare];
29
29
  # }
@@ -40,14 +40,14 @@ GraphViz.new( :G, :type => :digraph ) { |g|
40
40
  c.a0 << c.a1 << c.a2 << c.a3
41
41
  c[:label] = "process #1"
42
42
  }
43
-
43
+
44
44
  g.cluster_1 { |c|
45
45
  c.node[:style] = :filled
46
46
  c.b0 << c.b1 << c.b2 << c.b3
47
47
  c[:label] = "process #1"
48
48
  c[:color] = :blue
49
49
  }
50
-
50
+
51
51
  g.start << g.cluster_0.a0
52
52
  g.start << g.cluster_1.b0
53
53
  g.cluster_0.a1 << g.cluster_1.b3
@@ -55,7 +55,7 @@ GraphViz.new( :G, :type => :digraph ) { |g|
55
55
  g.cluster_0.a3 << g.cluster_0.a0
56
56
  g.cluster_0.a3 << g._end
57
57
  g.cluster_1.b3 << g._end
58
-
58
+
59
59
  g.start[:shape] = :Mdiamond
60
60
  g._end[:label] = "end"
61
61
  g._end[:shape] = :Mdiamond
data/examples/sample50.rb CHANGED
@@ -5,7 +5,7 @@
5
5
  # ratio = "auto" ;
6
6
  # mincross = 2.0 ;
7
7
  # label = "Pedigree Lion_Share" ;
8
- #
8
+ #
9
9
  # "001" [shape=box , regular=1,style=filled,fillcolor=white ] ;
10
10
  # "002" [shape=box , regular=1,style=filled,fillcolor=white ] ;
11
11
  # "003" [shape=circle , regular=1,style=filled,fillcolor=white ] ;
data/examples/sample52.rb CHANGED
@@ -19,7 +19,7 @@
19
19
  # green1->gy1;
20
20
  # yellow1->yr1;
21
21
  # red1->rg1;
22
- #
22
+ #
23
23
  # overlap=false
24
24
  # label="PetriNet Model TrafficLights\nExtracted from ConceptBase and layed out by Graphviz"
25
25
  # fontsize=12;
@@ -38,7 +38,7 @@ GraphViz::new( "TrafficLights", :type => :digraph ) { |g|
38
38
  g.green1.set { |n| n[:shape] = :circle; n[:fixedsize] = :true; n[:width] = 0.9 }
39
39
  g.yellow1.set { |n| n[:shape] = :circle; n[:fixedsize] = :true; n[:width] = 0.9 }
40
40
  g.red1.set { |n| n[:shape] = :circle; n[:fixedsize] = :true; n[:width] = 0.9 }
41
-
41
+
42
42
  g.gy2 << g.yellow2
43
43
  g.rg2 << g.green2
44
44
  g.yr2 << g.safe1
data/examples/sample53.rb CHANGED
@@ -5,7 +5,7 @@ tree = GraphViz::FamilyTree.new do
5
5
  generation do
6
6
  benoist.is_a_man( "Benoist" )
7
7
  nathalie.is_a_woman( "Nathalie" )
8
-
8
+
9
9
  benoist.is_maried_with nathalie
10
10
  end
11
11
 
@@ -14,7 +14,7 @@ tree = GraphViz::FamilyTree.new do
14
14
  amelie.is_a_woman( "Amelie" )
15
15
  clement.is_a_man( "Clement" )
16
16
  gregoire.is_a_man( "Gregoire" )
17
-
17
+
18
18
  muriel.is_a_woman( "Muriel" )
19
19
 
20
20
  gregoire.is_maried_with muriel
data/examples/sample54.rb CHANGED
@@ -6,10 +6,10 @@ class Array
6
6
  ## Solution #1 by greg
7
7
  # self.push(r = self.shift)
8
8
  # return r
9
-
9
+
10
10
  ## Solution #2 by madx
11
11
  # shift.tap {|e| push e }
12
-
12
+
13
13
  ## Solution #3 by greg
14
14
  push(shift)[-1]
15
15
  end
@@ -22,5 +22,5 @@ GraphViz.graph( :G, :use => :neato ) { |g|
22
22
  (1..5).each do |y|
23
23
  g.add_nodes( "n#{x}x#{y}", :pos => "#{x},#{y}!", :shape => type.rotate )
24
24
  end
25
- end
25
+ end
26
26
  }.output( :png => "#{$0}.png" )
data/examples/sample60.rb CHANGED
@@ -3,10 +3,10 @@
3
3
  $:.unshift( "../lib" );
4
4
  require "graphviz"
5
5
 
6
- asm = GraphViz::new( "My ASM" )
6
+ asm = GraphViz::new( "My ASM" )
7
7
 
8
8
  my = asm.add_nodes("My")
9
9
  asmn = asm.add_nodes("ASM")
10
- asm.add_edges(my, asmn)
10
+ asm.add_edges(my, asmn)
11
11
 
12
12
  asm.output( :png => "#{$0}.png" )
data/examples/sample61.rb CHANGED
@@ -3,10 +3,10 @@
3
3
  $:.unshift( "../lib" );
4
4
  require "graphviz"
5
5
 
6
- asm = GraphViz::new( "" )
6
+ asm = GraphViz::new( "" )
7
7
 
8
8
  my = asm.add_nodes("My")
9
9
  asmn = asm.add_nodes("ASM")
10
- asm.add_edges(my, asmn)
10
+ asm.add_edges(my, asmn)
11
11
 
12
12
  asm.output( :png => "#{$0}.png" )
data/examples/sample62.rb CHANGED
@@ -3,11 +3,11 @@
3
3
  $:.unshift( "../lib" );
4
4
  require "graphviz"
5
5
 
6
- hello_world = GraphViz::new( "" )
6
+ hello_world = GraphViz::new( "" )
7
7
 
8
8
  hello = hello_world.add_nodes("Hello")
9
9
  world = hello_world.add_nodes("World")
10
- hello_world.add_edges(hello, world)
10
+ hello_world.add_edges(hello, world)
11
11
 
12
12
  # final_graph = GraphViz.parse_string( hello_world.output( :dot => String ) )
13
13
  # final_graph.each_node do |_, node|
data/examples/sample99.rb CHANGED
@@ -5,53 +5,53 @@ tree = GraphViz::FamilyTree.new do
5
5
  generation do
6
6
  chantale.is_a_woman( "Chantale" )
7
7
  jacques.is_a_man( "Jacques" )
8
-
8
+
9
9
  jacques.is_dead
10
10
  jacques.is_maried_with chantale
11
-
11
+
12
12
  rose.is_a_woman( "Rose Marie" )
13
13
  andre.is_a_man( "Andre" )
14
-
14
+
15
15
  andre.is_maried_with rose
16
16
  andre.is_dead
17
17
  end
18
-
18
+
19
19
  generation do
20
20
  benoist.is_a_man( "Benoist" )
21
21
  nathalie.is_a_woman( "Nathalie" )
22
-
22
+
23
23
  benoist.is_maried_with nathalie
24
-
24
+
25
25
  michel.is_a_man( "Michel" )
26
26
  brigitte.is_a_woman( "Brigitte" )
27
-
27
+
28
28
  michel.is_maried_with brigitte
29
29
  end
30
-
30
+
31
31
  couple( chantale, jacques ).kids( nathalie )
32
32
  couple( rose, andre ).kids( benoist )
33
-
33
+
34
34
  generation do
35
35
  charlotte.is_a_woman( "Charlotte" )
36
36
  amelie.is_a_woman( "Amelie" )
37
37
  clement.is_a_man( "Clement" )
38
38
  gregoire.is_a_man( "Gregoire" )
39
-
39
+
40
40
  muriel.is_a_woman( "Muriel" )
41
41
  gilles.is_a_man( "Gilles" )
42
-
42
+
43
43
  morgane.is_a_woman( "Morgane" )
44
44
  gregoire.is_divorced_with morgane
45
45
 
46
46
  pascal.is_a_man( "Pascal" )
47
47
  muriel.is_divorced_with pascal
48
48
 
49
- gregoire.is_maried_with muriel
49
+ gregoire.is_maried_with muriel
50
50
  end
51
-
51
+
52
52
  couple( michel, brigitte ).kids( muriel, gilles )
53
53
  couple( benoist, nathalie ).kids( charlotte, amelie, clement, gregoire )
54
-
54
+
55
55
  generation do
56
56
  arthur.is_a_boy( "Arthur" )
57
57
  colyne.is_a_girl( "Colyne" )
@@ -60,7 +60,7 @@ tree = GraphViz::FamilyTree.new do
60
60
  enaitz.is_a_boy( "Enaitz" )
61
61
  milo.is_a_boy( "Milo" )
62
62
  end
63
-
63
+
64
64
  couple( gregoire, morgane ).kids( arthur, colyne, benedict )
65
65
  couple( gregoire, muriel ).kids( maia )
66
66
  couple( muriel, pascal ).kids( milo )
@@ -4,7 +4,7 @@ require 'graphviz/theory'
4
4
 
5
5
  g = GraphViz.digraph( "G", :path => "/usr/local/bin", :use => "fdp" ) do |g|
6
6
  g.node[:shape => "record"]
7
-
7
+
8
8
  g.start[:label => "Start"]
9
9
  g.task_1[:label => "Task #1 - Duration : 4d"]
10
10
  g.task_2[:label => "Task #2 - Duration : 5.25d"]
@@ -14,7 +14,7 @@ g = GraphViz.digraph( "G", :path => "/usr/local/bin", :use => "fdp" ) do |g|
14
14
  g.task_6[:label => "Task #6 - Duration : 4.5d"]
15
15
  g.task_7[:label => "Task #7 - Duration : 5.17d"]
16
16
  g.finish[:label => "End"]
17
-
17
+
18
18
  (g.start << g.task_1)[:weight => 0.0]
19
19
  (g.start << g.task_2)[:weight => 0.0]
20
20
  (g.task_1 << g.task_3)[:weight => 4.0]
@@ -9,7 +9,7 @@ g = GraphViz.digraph( "G", :path => "/usr/local/bin" ) do |g|
9
9
  g.d[:label => "4"]
10
10
  g.e[:label => "5"]
11
11
  g.f[:label => "6"]
12
-
12
+
13
13
  # g.a << g.a
14
14
  g.a << g.b
15
15
  g.a << g.d
@@ -82,6 +82,6 @@ rrr = t.critical_path
82
82
  print "\tPath "; p rrr[:path]
83
83
  puts "\tDistance : #{rrr[:distance]}"
84
84
 
85
- t.pagerank.each { |node, rank|
85
+ t.pagerank.each { |node, rank|
86
86
  puts "Pagerank for node #{node.id} = #{rank}"
87
87
  }
data/lib/graphviz.rb CHANGED
@@ -1,15 +1,15 @@
1
1
  # Copyright (C) 2003 - 2012 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
5
5
  # the Free Software Foundation; either version 2 of the License, or
6
6
  # (at your option) any later version.
7
- #
7
+ #
8
8
  # This program is distributed in the hope that it will be useful,
9
9
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
10
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
11
  # GNU General Public License for more details.
12
- #
12
+ #
13
13
  # You should have received a copy of the GNU General Public License
14
14
  # along with this program; if not, write to the Free Software
15
15
  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
@@ -35,7 +35,7 @@ if /^1.8/.match RUBY_VERSION
35
35
  $KCODE = "UTF8"
36
36
  end
37
37
 
38
- class GraphViz
38
+ class GraphViz
39
39
  include Constants
40
40
  include GVUtils
41
41
 
@@ -60,7 +60,7 @@ class GraphViz
60
60
  ## Var: External libraries
61
61
  @@extlibs = []
62
62
  @extlibs
63
-
63
+
64
64
  ## Var: Graph name
65
65
  @name
66
66
 
@@ -72,7 +72,7 @@ class GraphViz
72
72
  # This accessor allow you to set global graph attributes
73
73
  attr_accessor :graph
74
74
  alias_method :graph_attrs, :graph
75
-
75
+
76
76
  # This accessor allow you to set global nodes attributes
77
77
  attr_accessor :node
78
78
  alias_method :node_attrs, :node
@@ -82,7 +82,7 @@ class GraphViz
82
82
  alias_method :edge_attrs, :edge
83
83
 
84
84
  @elements_order
85
-
85
+
86
86
  #<b>DEPRECATED</b> please use GraphViz#add_nodes
87
87
  def add_node( xNodeName, hOpts = {} )
88
88
  warn "GraphViz#add_node is deprecated, please use GraphViz#add_nodes"
@@ -94,7 +94,7 @@ class GraphViz
94
94
  # In:
95
95
  # * xNodeName : Name of the new node
96
96
  # * hOpts : Node attributes
97
- #
97
+ #
98
98
  # Return the GraphViz::Node object created
99
99
  def add_nodes(node_name, options = {})
100
100
  if node_name.kind_of? Array
@@ -110,10 +110,10 @@ class GraphViz
110
110
  options[:label] = node_name
111
111
  end
112
112
 
113
- @elements_order.push( {
114
- "type" => "node",
113
+ @elements_order.push( {
114
+ "type" => "node",
115
115
  "name" => node_name,
116
- "value" => @hoNodes[node_name]
116
+ "value" => @hoNodes[node_name]
117
117
  } )
118
118
 
119
119
  node = @hoNodes[node_name]
@@ -130,14 +130,14 @@ class GraphViz
130
130
  # Return the node object for the given name (or nil) in the current graph
131
131
  def get_node( xNodeName, &block )
132
132
  node = @hoNodes[xNodeName] || nil
133
-
134
- yield( node ) if( block and node.nil? == false )
135
-
133
+
134
+ yield( node ) if( block and node )
135
+
136
136
  return node
137
137
  end
138
138
 
139
139
  # Returns the first node found in the entire graph, starting from the root graph
140
- def find_node(name)
140
+ def find_node(name)
141
141
  root = root_graph
142
142
  return root.search_node(name)
143
143
  end
@@ -152,7 +152,7 @@ class GraphViz
152
152
  }
153
153
  return nil
154
154
  end
155
-
155
+
156
156
  #
157
157
  # Return the node object for the given index
158
158
  #
@@ -160,7 +160,7 @@ class GraphViz
160
160
  element = @elements_order[index, "node"]
161
161
  (element.nil?) ? nil : element["value"]
162
162
  end
163
-
163
+
164
164
  #
165
165
  # Allow you to traverse nodes
166
166
  #
@@ -173,12 +173,12 @@ class GraphViz
173
173
  return( @hoNodes )
174
174
  end
175
175
  end
176
-
176
+
177
177
  # Get the number of nodes
178
178
  def node_count
179
179
  @hoNodes.size
180
180
  end
181
-
181
+
182
182
  #<b>DEPRECATED</b> please use GraphViz#add_edges
183
183
  def add_edge( oNodeOne, oNodeTwo, hOpts = {} )
184
184
  warn "GraphViz#add_edge is deprecated, please use GraphViz#add_edges"
@@ -186,14 +186,14 @@ class GraphViz
186
186
  end
187
187
 
188
188
  # Create a new edge
189
- #
189
+ #
190
190
  # In:
191
191
  # * node_one : First node (or node list)
192
192
  # * node_two : Second Node (or node list)
193
193
  # * options : Edge attributes
194
194
  def add_edges( node_one, node_two, options = {} )
195
-
196
- if( node_one.class == Array )
195
+
196
+ if( node_one.class == Array )
197
197
  node_one.each do |no|
198
198
  add_edges( no, node_two, options )
199
199
  end
@@ -205,17 +205,17 @@ class GraphViz
205
205
  else
206
206
  edge = GraphViz::Edge::new( node_one, node_two, self )
207
207
  edge.index = @elements_order.size_of( "edge" )
208
-
208
+
209
209
  options.each do |xKey, xValue|
210
210
  edge[xKey.to_s] = xValue
211
211
  end
212
-
213
- @elements_order.push( {
214
- "type" => "edge",
212
+
213
+ @elements_order.push( {
214
+ "type" => "edge",
215
215
  "value" => edge
216
216
  } )
217
217
  @loEdges.push( edge )
218
-
218
+
219
219
  return( edge )
220
220
  end
221
221
  end
@@ -233,14 +233,14 @@ class GraphViz
233
233
  return @loEdges
234
234
  end
235
235
  end
236
-
236
+
237
237
  #
238
238
  # Get the number of edges
239
239
  #
240
240
  def edge_count
241
241
  @loEdges.size
242
242
  end
243
-
243
+
244
244
  #
245
245
  # Return the edge object for the given index
246
246
  #
@@ -248,21 +248,21 @@ class GraphViz
248
248
  element = @elements_order[index, "edge"]
249
249
  (element.nil?) ? nil : element["value"]
250
250
  end
251
-
252
- #
251
+
252
+ #
253
253
  # Create a new graph
254
- #
254
+ #
255
255
  # In:
256
256
  # * xGraphName : Graph name
257
257
  # * hOpts : Graph attributes
258
258
  #
259
259
  def add_graph( xGraphName = nil, hOpts = {}, &block )
260
- if xGraphName.kind_of?(GraphViz)
260
+ if xGraphName.kind_of?(GraphViz)
261
261
  xGraphID = xGraphName.id
262
262
  @hoGraphs[xGraphID] = xGraphName.clone
263
263
  @hoGraphs[xGraphID].type = @oGraphType
264
264
  @hoGraphs[xGraphID].pg = self
265
- xGraphName = xGraphID
265
+ xGraphName = xGraphID
266
266
  else
267
267
  if xGraphName.kind_of?(Hash)
268
268
  hOpts = xGraphName
@@ -283,10 +283,10 @@ class GraphViz
283
283
  end
284
284
  end
285
285
 
286
- @elements_order.push( {
287
- "type" => "graph",
286
+ @elements_order.push( {
287
+ "type" => "graph",
288
288
  "name" => xGraphName,
289
- "value" => @hoGraphs[xGraphID]
289
+ "value" => @hoGraphs[xGraphID]
290
290
  } )
291
291
 
292
292
  return( @hoGraphs[xGraphID] )
@@ -297,12 +297,12 @@ class GraphViz
297
297
  #
298
298
  def get_graph( xGraphName, &block )
299
299
  graph = @hoGraphs[xGraphName] || nil
300
-
301
- yield( graph ) if( block and graph.nil? == false )
302
-
300
+
301
+ yield( graph ) if( block and graph )
302
+
303
303
  return graph
304
304
  end
305
-
305
+
306
306
  #
307
307
  # Allow you to traverse graphs
308
308
  #
@@ -315,7 +315,7 @@ class GraphViz
315
315
  return @hoGraphs
316
316
  end
317
317
  end
318
-
318
+
319
319
  #
320
320
  # Add nodes and edges defined by a Hash
321
321
  #
@@ -324,9 +324,9 @@ class GraphViz
324
324
  h.each do |node, data|
325
325
  add_hash_edge(node, data)
326
326
  end
327
- end
327
+ end
328
328
  end
329
-
329
+
330
330
  #
331
331
  # Return the graph type (graph digraph)
332
332
  #
@@ -336,51 +336,51 @@ class GraphViz
336
336
  def type=(x) #:nodoc:
337
337
  @oGraphType = x
338
338
  end
339
-
339
+
340
340
  #
341
341
  # Get the number of graphs
342
342
  #
343
343
  def graph_count
344
344
  @hoGraphs.size
345
345
  end
346
-
346
+
347
347
  def method_missing( idName, *args, &block ) #:nodoc:
348
348
  xName = idName.id2name
349
-
349
+
350
350
  rCod = nil
351
-
351
+
352
352
  if block
353
353
  # Creating a cluster named '#{xName}'
354
354
  rCod = add_graph( xName, args[0]||{} )
355
355
  yield( rCod )
356
356
  else
357
- # Create a node named '#{xName}' or search for a node, edge or cluster
357
+ # Create a node named '#{xName}' or search for a node, edge or cluster
358
358
  if @hoNodes.keys.include?( xName )
359
359
  if( args[0] )
360
360
  return { xName => args[0] }
361
361
  else
362
- return( @hoNodes[xName] )
362
+ return( @hoNodes[xName] )
363
363
  end
364
364
  end
365
365
  return( @hoGraphs[xName] ) if @hoGraphs.keys.include?( xName )
366
-
366
+
367
367
  rCod = add_nodes( xName, args[0]||{} )
368
368
  end
369
369
 
370
370
  return rCod
371
371
  end
372
-
373
- #
372
+
373
+ #
374
374
  # Set value +xValue+ to the graph attribute +xAttrName+
375
- #
375
+ #
376
376
  def []=( xAttrName, xValue )
377
377
  xValue = xValue.to_s if xValue.class == Symbol
378
378
  @graph[xAttrName] = xValue
379
379
  end
380
380
 
381
- #
381
+ #
382
382
  # Get the value of the graph attribute +xAttrName+
383
- #
383
+ #
384
384
  def []( xAttrName )
385
385
  if Hash === xAttrName
386
386
  xAttrName.each do |key, value|
@@ -390,9 +390,9 @@ class GraphViz
390
390
  return( @graph[xAttrName].clone )
391
391
  end
392
392
  end
393
-
393
+
394
394
  #
395
- # Calls block once for each attribute of the graph, passing the name and value to the
395
+ # Calls block once for each attribute of the graph, passing the name and value to the
396
396
  # block as a two-element array.
397
397
  #
398
398
  def each_attribute(&b)
@@ -404,10 +404,10 @@ class GraphViz
404
404
  warn "`GraphViz#each_attribut` is deprecated, please use `GraphViz#each_attribute`"
405
405
  each_attribute(&b)
406
406
  end
407
-
408
- #
407
+
408
+ #
409
409
  # Generate the graph
410
- #
410
+ #
411
411
  # Options :
412
412
  # * :output : Output format (Constants::FORMATS)
413
413
  # * :file : Output file name
@@ -421,7 +421,7 @@ class GraphViz
421
421
  # * 0 = Error + Warning
422
422
  # * 1 = Error
423
423
  # * 2 = none
424
- #
424
+ #
425
425
  def output( hOpts = {} )
426
426
  xDOTScript = ""
427
427
  xLastType = nil
@@ -430,21 +430,21 @@ class GraphViz
430
430
  lNotHugly = []
431
431
 
432
432
  @elements_order.each { |kElement|
433
- if xLastType.nil? == true or xLastType != kElement["type"]
434
-
435
- if xData.length > 0
433
+ if xLastType.nil? or xLastType != kElement["type"]
434
+
435
+ if xData.length > 0
436
436
  case xLastType
437
437
  when "graph_attr"
438
438
  xDOTScript << " " + xData + ";\n"
439
-
439
+
440
440
  when "node_attr"
441
441
  xDOTScript << " node [" + xData + "];\n"
442
-
442
+
443
443
  when "edge_attr"
444
444
  xDOTScript << " edge [" + xData + "];\n"
445
445
  end
446
446
  end
447
-
447
+
448
448
  xSeparator = ""
449
449
  xData = ""
450
450
  end
@@ -452,7 +452,7 @@ class GraphViz
452
452
  xLastType = kElement["type"]
453
453
 
454
454
  #Modified by
455
- #Brandon Coleman
455
+ #Brandon Coleman
456
456
  #verify value is NOT NULL
457
457
  if kElement["value"] == nil then
458
458
  raise ArgumentError, "#{kElement["name"]} has a nil value!"
@@ -484,33 +484,33 @@ class GraphViz
484
484
  raise ArgumentError, "Don't know what to do with element type '#{kElement['type']}'"
485
485
  end
486
486
  }
487
-
488
- if xData.length > 0
487
+
488
+ if xData.length > 0
489
489
  case xLastType
490
490
  when "graph_attr"
491
491
  xDOTScript << " " + xData + ";\n"
492
492
 
493
493
  when "node_attr"
494
494
  xDOTScript << " node [" + xData + "];\n"
495
-
495
+
496
496
  when "edge_attr"
497
497
  xDOTScript << " edge [" + xData + "];\n"
498
498
  end
499
499
  end
500
500
  xDOTScript << "}"
501
501
 
502
- if @oParentGraph.nil? == false
502
+ if @oParentGraph
503
503
  xDOTScript = "subgraph #{GraphViz.escape(@name, :unquote_empty => true)} {\n" << xDOTScript
504
504
 
505
505
  return( xDOTScript )
506
506
  else
507
507
  hOutput = {}
508
-
508
+
509
509
  hOpts.each do |xKey, xValue|
510
510
  xValue = xValue.to_s unless xValue.nil? or [Class, TrueClass, FalseClass].include?(xValue.class)
511
511
  case xKey.to_s
512
512
  when "use"
513
- if PROGRAMS.index( xValue ).nil? == true
513
+ if PROGRAMS.index( xValue ).nil?
514
514
  raise ArgumentError, "can't use '#{xValue}'"
515
515
  end
516
516
  @prog = xValue
@@ -559,21 +559,21 @@ class GraphViz
559
559
  @nothugly = false
560
560
  end
561
561
  else
562
- if FORMATS.index( xKey.to_s ).nil? == true
562
+ if FORMATS.index( xKey.to_s ).nil?
563
563
  raise ArgumentError, "output format '#{xValue}' invalid"
564
564
  end
565
565
  hOutput[xKey.to_s] = xValue
566
566
  end
567
567
  end
568
-
568
+
569
569
  @output = hOutput if hOutput.size > 0
570
-
570
+
571
571
  xStict = ((@strict && @oGraphType == "digraph") ? "strict " : "")
572
572
  xDOTScript = ("#{xStict}#{@oGraphType} #{GraphViz.escape(@name, :unquote_empty => true)} {\n" << xDOTScript).gsub( "\0", "" )
573
573
 
574
574
  xOutputString = (@filename == String ||
575
575
  @output.any? {|format, file| file == String })
576
-
576
+
577
577
  xOutput = ""
578
578
  if @format.to_s == "none" or @output.any? {|fmt, fn| fmt.to_s == "none"}
579
579
  if xOutputString
@@ -585,13 +585,13 @@ class GraphViz
585
585
  end
586
586
  end
587
587
  end
588
-
588
+
589
589
  if (@format.to_s != "none" and not @format.nil?) or (@output.any? {|format, file| format != "none" } and @output.size > 0)
590
590
  ## Act: Save script and send it to dot
591
591
  t = Tempfile::open( File.basename(__FILE__) )
592
592
  t.print( xDOTScript )
593
593
  t.close
594
-
594
+
595
595
  cmd = find_executable( @prog, @path )
596
596
  if cmd == nil
597
597
  raise StandardError, "GraphViz not installed or #{@prog} not in PATH. Install GraphViz or use the 'path' option"
@@ -617,27 +617,27 @@ class GraphViz
617
617
  xOutputWithFile << "-T#{format} -o#{file} "
618
618
  end
619
619
  end
620
-
620
+
621
621
  xExternalLibraries = ""
622
622
  @extlibs.each do |lib|
623
623
  xExternalLibraries << "-l#{lib} "
624
624
  end
625
-
626
- xOtherOptions = ""
625
+
626
+ xOtherOptions = ""
627
627
  xOtherOptions += " -s#{@scale}" unless @scale.nil?
628
- xOtherOptions += " -y" if @inverty == true
628
+ xOtherOptions += " -y" if @inverty
629
629
  unless @no_layout.nil?
630
630
  xOtherOptions += " -n"
631
631
  xOtherOptions += "2" if @no_layout.to_i == 2
632
632
  end
633
- xOtherOptions += " -x" if @reduce_graph == true
634
- xOtherOptions += " -Lg" if @Lg == true
635
- xOtherOptions += " -LO" if @LO == true
633
+ xOtherOptions += " -x" if @reduce_graph
634
+ xOtherOptions += " -Lg" if @Lg
635
+ xOtherOptions += " -LO" if @LO
636
636
  xOtherOptions += " -Ln#{@Ln}" unless @LN.nil?
637
637
  xOtherOptions += " -LU#{@LU}" unless @LU.nil?
638
638
  xOtherOptions += " -LC#{@LC}" unless @LC.nil?
639
639
  xOtherOptions += " -LT#{@LT}" unless @LT.nil?
640
-
640
+
641
641
  if IS_JRUBY
642
642
  xCmd = "#{cmd} -q#{@errors} #{xExternalLibraries} #{xOtherOptions} #{xOutputWithFile} #{xOutputWithoutFile} #{t.path}"
643
643
  elsif IS_CYGWIN
@@ -654,7 +654,7 @@ class GraphViz
654
654
 
655
655
  xOutput << output_from_command( xCmd )
656
656
  end
657
-
657
+
658
658
  # Not Hugly
659
659
  lNotHugly.each do |f|
660
660
  if f.nil? or f == String
@@ -663,7 +663,7 @@ class GraphViz
663
663
  GraphViz.nothugly( f, true )
664
664
  end
665
665
  end
666
-
666
+
667
667
  if xOutputString
668
668
  xOutput
669
669
  else
@@ -671,28 +671,28 @@ class GraphViz
671
671
  end
672
672
  end
673
673
  end
674
-
674
+
675
675
  alias :save :output
676
-
676
+
677
677
  def to_s
678
678
  self.output(:none => String)
679
679
  end
680
-
681
- #
680
+
681
+ #
682
682
  # Get the graph name
683
683
  #
684
- def name
684
+ def name
685
685
  @name.clone
686
686
  end
687
687
  alias :id :name
688
-
689
- #
688
+
689
+ #
690
690
  # Create an edge between the current cluster and the node or cluster +oNode+
691
- #
691
+ #
692
692
  def <<( oNode )
693
693
  raise( ArgumentError, "Edge between root graph and node or cluster not allowed!" ) if self.pg.nil?
694
694
 
695
- if( oNode.class == Array )
695
+ if( oNode.class == Array )
696
696
  oNode.each do |no|
697
697
  self << no
698
698
  end
@@ -703,46 +703,46 @@ class GraphViz
703
703
  alias :> :<<
704
704
  alias :- :<<
705
705
  alias :>> :<<
706
-
706
+
707
707
  def pg #:nodoc:
708
708
  @oParentGraph
709
709
  end
710
710
  def pg=(x) #:nodoc:
711
711
  @oParentGraph = x
712
712
  end
713
-
713
+
714
714
  #
715
715
  # Return the root graph
716
716
  #
717
717
  def root_graph
718
718
  return( (self.pg.nil?) ? self : self.pg.root_graph )
719
719
  end
720
-
720
+
721
721
  def self.commonGraph( o1, o2 ) #:nodoc:
722
722
  g1 = o1.pg
723
723
  g2 = o2.pg
724
724
 
725
725
  return o1 if g1.nil?
726
726
  return o2 if g2.nil?
727
-
727
+
728
728
  return g1 if g1.object_id == g2.object_id
729
-
729
+
730
730
  return GraphViz::commonGraph( g1, g2 )
731
731
  end
732
-
732
+
733
733
  def set_position( xType, xKey, xValue ) #:nodoc:
734
- @elements_order.push( {
735
- "type" => "#{xType}_attr",
734
+ @elements_order.push( {
735
+ "type" => "#{xType}_attr",
736
736
  "name" => xKey,
737
- "value" => xValue
737
+ "value" => xValue
738
738
  } )
739
739
  end
740
-
740
+
741
741
  ## ----------------------------------------------------------------------------
742
742
 
743
743
  #
744
744
  # Change default options (:use, :path, :errors and :output)
745
- #
745
+ #
746
746
  def self.default( hOpts )
747
747
  hOpts.each do |k, v|
748
748
  case k.to_s
@@ -759,29 +759,29 @@ class GraphViz
759
759
  end
760
760
  end
761
761
  end
762
-
762
+
763
763
  def self.options( hOpts )
764
764
  GraphViz::default( hOpts )
765
765
  end
766
-
766
+
767
767
  ## ----------------------------------------------------------------------------
768
768
 
769
769
  # Create a new graph from a GraphViz File
770
- #
770
+ #
771
771
  # Options :
772
772
  # * :output : Output format (Constants::FORMATS) (default : dot)
773
773
  # * :file : Output file name (default : none)
774
774
  # * :use : Program to use (Constants::PROGRAMS) (default : dot)
775
775
  # * :path : Program PATH
776
776
  #
777
- def self.parse( xFile, hOpts = {}, &block )
777
+ def self.parse( xFile, hOpts = {}, &block )
778
778
  graph = Dot2Ruby::new( hOpts[:path], nil, nil ).eval( xFile )
779
- yield( graph ) if( block and graph.nil? == false )
779
+ yield( graph ) if( block and graph )
780
780
  return graph
781
781
  end
782
782
 
783
783
  # Create a new graph from a GraphViz File
784
- #
784
+ #
785
785
  # Options :
786
786
  # * :output : Output format (Constants::FORMATS) (default : dot)
787
787
  # * :file : Output file name (default : none)
@@ -790,11 +790,11 @@ class GraphViz
790
790
  #
791
791
  def self.parse_string( str, hOpts = {}, &block )
792
792
  graph = Dot2Ruby::new( hOpts[:path], nil, nil ).eval_string( str )
793
- yield( graph ) if( block and graph.nil? == false )
793
+ yield( graph ) if( block and graph )
794
794
  return graph
795
795
  end
796
796
 
797
- # Return a new completed graph
797
+ # Return a new completed graph
798
798
  def complete
799
799
  GraphViz.parse_string( root_graph.output( :dot => String ) )
800
800
  end
@@ -811,7 +811,7 @@ class GraphViz
811
811
  end
812
812
  ## ----------------------------------------------------------------------------
813
813
 
814
- private
814
+ private
815
815
 
816
816
  ## Var: Nodes, Edges and Graphs tables
817
817
  @hoNodes
@@ -823,10 +823,10 @@ class GraphViz
823
823
 
824
824
  ## Var: Type de graphe (orienté ou non)
825
825
  @oGraphType
826
-
827
- #
826
+
827
+ #
828
828
  # Create a new graph object
829
- #
829
+ #
830
830
  # Options :
831
831
  # * :output : Output format (Constants::FORMATS) (default : dot)
832
832
  # * :file : Output file name (default : nil)
@@ -838,7 +838,7 @@ class GraphViz
838
838
  # * 0 = Error + Warning
839
839
  # * 1 = Error
840
840
  # * 2 = none
841
- #
841
+ #
842
842
  def initialize( xGraphName, hOpts = {}, &block )
843
843
  @filename = nil
844
844
  @name = xGraphName.to_s
@@ -850,7 +850,7 @@ class GraphViz
850
850
  @output = {}
851
851
  @nothugly = false
852
852
  @strict = false
853
-
853
+
854
854
  @scale = nil
855
855
  @inverty = nil
856
856
  @no_layout = nil
@@ -861,16 +861,16 @@ class GraphViz
861
861
  @LU = nil
862
862
  @LC = nil
863
863
  @LT = nil
864
-
864
+
865
865
  @elements_order = GraphViz::Elements::new()
866
866
 
867
867
  @oParentGraph = nil
868
868
  @oGraphType = "digraph"
869
-
869
+
870
870
  @hoNodes = Hash::new()
871
871
  @loEdges = Array::new()
872
872
  @hoGraphs = Hash::new()
873
-
873
+
874
874
  @node = GraphViz::Attrs::new( self, "node", NODESATTRS )
875
875
  @edge = GraphViz::Attrs::new( self, "edge", EDGESATTRS )
876
876
  @graph = GraphViz::Attrs::new( self, "graph", GRAPHSATTRS )
@@ -878,14 +878,14 @@ class GraphViz
878
878
  hOpts.each do |xKey, xValue|
879
879
  case xKey.to_s
880
880
  when "use"
881
- if PROGRAMS.index( xValue.to_s ).nil? == true
881
+ if PROGRAMS.index( xValue.to_s ).nil?
882
882
  raise ArgumentError, "can't use '#{xValue}'"
883
883
  end
884
884
  @prog = xValue.to_s
885
885
  when "parent"
886
886
  @oParentGraph = xValue
887
887
  when "type"
888
- if GRAPHTYPE.index( xValue.to_s ).nil? == true
888
+ if GRAPHTYPE.index( xValue.to_s ).nil?
889
889
  raise ArgumentError, "graph type '#{xValue}' unknow"
890
890
  end
891
891
  @oGraphType = xValue.to_s
@@ -901,10 +901,10 @@ class GraphViz
901
901
  self[xKey.to_s] = xValue.to_s
902
902
  end
903
903
  end
904
-
904
+
905
905
  yield( self ) if( block )
906
906
  end
907
-
907
+
908
908
  # Edge between a node and a Hash
909
909
  # Used by GraphViz#add
910
910
  def add_hash_edge(node, hash)
@@ -917,7 +917,7 @@ class GraphViz
917
917
  add_edges(node, hash)
918
918
  end
919
919
  end
920
-
920
+
921
921
  #
922
922
  # Create a new undirected graph
923
923
  #
@@ -935,14 +935,14 @@ class GraphViz
935
935
  def self.digraph( xGraphName, hOpts = {}, &block )
936
936
  new( xGraphName, hOpts.symbolize_keys.merge( {:type => "digraph"} ), &block )
937
937
  end
938
-
938
+
939
939
  # Create a new strict directed graph
940
940
  #
941
941
  # See also GraphViz::new
942
942
  def self.strict_digraph( xGraphName, hOpts = {}, &block )
943
943
  new( xGraphName, hOpts.symbolize_keys.merge( {:type => "digraph", :strict => true} ), &block )
944
944
  end
945
-
945
+
946
946
  # Create a random graph.
947
947
  def self.generate(num_nodes, num_edges, directed = false, weight_range = (1..1))
948
948
  g = nil
@@ -980,13 +980,13 @@ class GraphViz
980
980
  :force => false,
981
981
  :unquote_empty => false,
982
982
  }.merge(opts)
983
-
984
- if (options[:force] or str.match( /\A[a-zA-Z_]+[a-zA-Z0-9_]*\Z/ ).nil?)
985
- unless options[:unquote_empty] == true and str.size == 0
986
- '"' + str.gsub('"', '\\"').gsub("\n", '\\\\n') + '"'
983
+
984
+ if (options[:force] or str.match( /\A[a-zA-Z_]+[a-zA-Z0-9_]*\Z/ ).nil?)
985
+ unless options[:unquote_empty] and str.size == 0
986
+ '"' + str.gsub('"', '\\"').gsub("\n", '\\\\n') + '"'
987
987
  end
988
988
  else
989
989
  str
990
990
  end
991
- end
991
+ end
992
992
  end