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
@@ -7,17 +7,17 @@ class GraphViz
7
7
  @kids = []
8
8
  @persons = persons
9
9
  end
10
-
10
+
11
11
  def node #:nodoc:
12
12
  @node
13
13
  end
14
-
14
+
15
15
  # Add kids to a couple
16
16
  def kids( *z )
17
17
  @kids = GraphViz::FamilyTree::Sibling.new( z, @persons )
18
-
18
+
19
19
  return
20
-
20
+
21
21
  if z.size == 1
22
22
  @graph.add_edges( @node, z[0].node, "dir" => "none" )
23
23
  else
@@ -27,7 +27,7 @@ class GraphViz
27
27
  last = nil
28
28
  count = 0
29
29
  add = (z.size-1)%2 * z.size/2 + (z.size-1)%2
30
- link = (z.size/2)+1
30
+ link = (z.size/2)+1
31
31
 
32
32
  z.each do |person|
33
33
  count = count + 1
@@ -36,25 +36,25 @@ class GraphViz
36
36
  @graph.add_edges( @node, middle, "dir" => "none" )
37
37
  unless last.nil?
38
38
  cluster.add_edges( last, middle, "dir" => "none" )
39
- end
39
+ end
40
40
  last = middle
41
41
  end
42
-
42
+
43
43
  kid = cluster.add_nodes( "#{person.node.id}Kid", "shape" => "point" )
44
44
  @graph.add_edges( kid, person.node, "dir" => "none" )
45
-
45
+
46
46
  if add == 0 and count == link
47
47
  @graph.add_edges( @node, kid, "dir" => "none" )
48
48
  end
49
-
49
+
50
50
  unless last.nil?
51
51
  cluster.add_edges( last, kid, "dir" => "none" )
52
52
  end
53
53
  last = kid
54
54
  end
55
- end
55
+ end
56
56
  end
57
-
57
+
58
58
  def getKids
59
59
  @kids
60
60
  end
@@ -8,28 +8,28 @@ class GraphViz
8
8
  @tree = tree
9
9
  @gen_number = gen_number
10
10
  end
11
-
11
+
12
12
  def all_persons #:nodoc:
13
13
  @all_persons
14
14
  end
15
-
15
+
16
16
  def persons
17
17
  @persons
18
18
  end
19
-
19
+
20
20
  def make( &block ) #:nodoc:
21
21
  instance_eval(&block) if block
22
22
  end
23
-
23
+
24
24
  def method_missing(sym, *args, &block) #:nodoc:
25
25
  all_persons[sym.to_s] ||= (persons[sym.to_s] ||= GraphViz::FamilyTree::Person.new( @graph, @tree, self, sym.to_s ))
26
26
  end
27
-
27
+
28
28
  # Generation number
29
29
  def number
30
30
  @gen_number
31
31
  end
32
-
32
+
33
33
  # Generation size
34
34
  def size
35
35
  @persons.size
@@ -13,31 +13,31 @@ class GraphViz
13
13
  @x, @y = 0, 0
14
14
  @sibling = nil
15
15
  end
16
-
16
+
17
17
  def id
18
18
  @node.id
19
19
  end
20
-
20
+
21
21
  def name
22
22
  @node.label || @node.id
23
23
  end
24
-
24
+
25
25
  def sibling
26
26
  @sibling
27
27
  end
28
-
28
+
29
29
  def sibling=(x)
30
30
  @sibling=x
31
31
  end
32
-
32
+
33
33
  def couples #:nodoc:
34
34
  @couples
35
35
  end
36
-
36
+
37
37
  def node #:nodoc:
38
38
  @node
39
39
  end
40
-
40
+
41
41
  # Define the current person as a man
42
42
  #
43
43
  # greg.is_a_man( "Greg" )
@@ -45,14 +45,14 @@ class GraphViz
45
45
  @node["label"] = name
46
46
  @node["color"] = "blue"
47
47
  end
48
-
48
+
49
49
  # Define the current person as a boy
50
50
  #
51
51
  # greg.is_a_boy( "Greg" )
52
52
  def is_a_boy( name )
53
53
  is_a_man( name )
54
54
  end
55
-
55
+
56
56
  # Define the current perdon as a woman
57
57
  #
58
58
  # mu.is_a_woman( "Muriel" )
@@ -66,7 +66,7 @@ class GraphViz
66
66
  def is_a_girl( name )
67
67
  is_a_woman( name )
68
68
  end
69
-
69
+
70
70
  # Define that's two persons are maried
71
71
  #
72
72
  # mu.is_maried_with greg
@@ -77,7 +77,7 @@ class GraphViz
77
77
  @graph.add_edges( node, x.node, "dir" => "none" )
78
78
  @tree.add_couple( self, x, node )
79
79
  end
80
-
80
+
81
81
  # Define that's two persons are divorced
82
82
  #
83
83
  # sophie.is_divorced_with john
@@ -89,7 +89,7 @@ class GraphViz
89
89
  @graph.add_edges( node, x.node, "dir" => "none", "color" => "red" )
90
90
  @tree.add_couple( self, x, node )
91
91
  end
92
-
92
+
93
93
  # Define that's a person is widower of another
94
94
  #
95
95
  # simon.is_widower_of elisa
@@ -108,7 +108,7 @@ class GraphViz
108
108
  def is_dead
109
109
  @node["style"] = "filled"
110
110
  end
111
-
111
+
112
112
  # Define the kids of a single person
113
113
  #
114
114
  # alice.kids( john, jack, julie )
@@ -1,16 +1,16 @@
1
1
  #!/usr/bin/env ruby
2
2
  # Copyright (C) 2010 Gregoire Lejeune <gregoire.lejeune@free.fr>
3
- #
3
+ #
4
4
  # This program is free software; you can redistribute it and/or modify
5
5
  # it under the terms of the GNU General Public License as published by
6
6
  # the Free Software Foundation; either version 2 of the License, or
7
7
  # (at your option) any later version.
8
- #
8
+ #
9
9
  # This program is distributed in the hope that it will be useful,
10
10
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
11
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
12
  # GNU General Public License for more details.
13
- #
13
+ #
14
14
  # You should have received a copy of the GNU General Public License
15
15
  # along with this program; if not, write to the Free Software
16
16
  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
@@ -28,10 +28,10 @@ class GraphViz
28
28
  warn "`GraphViz::GraphML#attributs` is deprecated, please, use `GraphViz::GraphML#attributes`"
29
29
  return @attributes
30
30
  end
31
-
31
+
32
32
  # The GraphViz object
33
33
  attr_accessor :graph
34
-
34
+
35
35
  DEST = {
36
36
  'node' => [:nodes],
37
37
  'edge' => [:edges],
@@ -42,15 +42,15 @@ class GraphViz
42
42
  'endpoint' => [:endpoint],
43
43
  'all' => [:nodes, :edges, :graphs, :graphml, :hyperedge, :port, :endpoint]
44
44
  }
45
-
45
+
46
46
  GTYPE = {
47
47
  'directed' => :digraph,
48
48
  'undirected' => :graph
49
49
  }
50
-
50
+
51
51
  # Create a new GraphViz object from a GraphML file of string
52
52
  def initialize( file_or_str )
53
- data = ((File.file?( file_or_str )) ? File::new(file_or_str) : file_or_str)
53
+ data = ((File.file?( file_or_str )) ? File::new(file_or_str) : file_or_str)
54
54
  @xmlDoc = REXML::Document::new( data )
55
55
  @attributes = {
56
56
  :nodes => {},
@@ -67,14 +67,14 @@ class GraphViz
67
67
  @current_node = nil
68
68
  @current_edge = nil
69
69
  @current_graph = nil
70
-
70
+
71
71
  parse( @xmlDoc.root )
72
72
  end
73
-
73
+
74
74
  def parse( node ) #:nodoc:
75
75
  send( node.name.to_sym, node )
76
76
  end
77
-
77
+
78
78
  def graphml( node ) #:nodoc:
79
79
  node.each_element( ) do |child|
80
80
  begin
@@ -85,23 +85,23 @@ class GraphViz
85
85
  end
86
86
  end
87
87
 
88
- def graphml_data(node)
88
+ def graphml_data(node)
89
89
  warn "graphml/data not supported!"
90
90
  end
91
-
91
+
92
92
  def graphml_key( node ) #:nodoc:
93
93
  id = node.attributes['id']
94
94
  @current_attr = {
95
95
  :name => node.attributes['attr.name'],
96
96
  :type => node.attributes['attr.type']
97
- }
97
+ }
98
98
  if @current_attr[:name].nil?
99
99
  @ignored_keys << id
100
100
  else
101
101
  DEST[node.attributes['for']].each do |d|
102
102
  @attributes[d][id] = @current_attr
103
103
  end
104
-
104
+
105
105
  node.each_element( ) do |child|
106
106
  begin
107
107
  send( "graphml_key_#{child.name}".to_sym, child )
@@ -110,26 +110,26 @@ class GraphViz
110
110
  end
111
111
  end
112
112
  end
113
-
113
+
114
114
  @current_attr = nil
115
115
  end
116
-
116
+
117
117
  def graphml_key_default( node ) #:nodoc:
118
118
  @current_attr[:default] = node.texts().join('\n')
119
119
  end
120
-
120
+
121
121
  def graphml_graph( node ) #:nodoc:
122
122
  @current_node = nil
123
-
123
+
124
124
  if @current_graph.nil?
125
125
  @graph = GraphViz.new( node.attributes['id'], :type => GTYPE[node.attributes['edgedefault']] )
126
126
  @current_graph = @graph
127
127
  previous_graph = @graph
128
128
  else
129
- previous_graph = @current_graph
129
+ previous_graph = @current_graph
130
130
  @current_graph = previous_graph.add_graph( node.attributes['id'] )
131
131
  end
132
-
132
+
133
133
  @attributes[:graphs].each do |id, data|
134
134
  begin
135
135
  @current_graph.graph[data[:name]] = data[:default] if data.has_key?(:default)
@@ -151,14 +151,14 @@ class GraphViz
151
151
  warn e
152
152
  end
153
153
  end
154
-
154
+
155
155
  node.each_element( ) do |child|
156
156
  send( "graphml_graph_#{child.name}".to_sym, child )
157
157
  end
158
-
158
+
159
159
  @current_graph = previous_graph
160
160
  end
161
-
161
+
162
162
  def graphml_graph_data( node ) #:nodoc:
163
163
  begin
164
164
  @current_graph[@attributes[:graphs][node.attributes['key']][:name]] = node.texts().join('\n')
@@ -166,10 +166,10 @@ class GraphViz
166
166
  warn e
167
167
  end
168
168
  end
169
-
169
+
170
170
  def graphml_graph_node( node ) #:nodoc:
171
171
  @current_node = {}
172
-
172
+
173
173
  node.each_element( ) do |child|
174
174
  case child.name
175
175
  when "graph"
@@ -182,7 +182,7 @@ class GraphViz
182
182
  end
183
183
  end
184
184
  end
185
-
185
+
186
186
  unless @current_node.nil?
187
187
  node = @current_graph.add_nodes( node.attributes['id'] )
188
188
  @current_node.each do |k, v|
@@ -193,10 +193,10 @@ class GraphViz
193
193
  end
194
194
  end
195
195
  end
196
-
196
+
197
197
  @current_node = nil
198
198
  end
199
-
199
+
200
200
  def graphml_graph_node_data( node ) #:nodoc:
201
201
  return if @ignored_keys.include?(node.attributes['key'])
202
202
  begin
@@ -205,7 +205,7 @@ class GraphViz
205
205
  warn e
206
206
  end
207
207
  end
208
-
208
+
209
209
  def graphml_graph_node_port( node ) #:nodoc:
210
210
  @current_node[:shape] = :record
211
211
  port = node.attributes['name']
@@ -216,15 +216,15 @@ class GraphViz
216
216
  @current_node[:label] = "<#{port}> #{port}"
217
217
  end
218
218
  end
219
-
219
+
220
220
  def graphml_graph_edge( node ) #:nodoc:
221
221
  source = node.attributes['source']
222
222
  source = {source => node.attributes['sourceport']} if node.attributes['sourceport']
223
223
  target = node.attributes['target']
224
224
  target = {target => node.attributes['targetport']} if node.attributes['targetport']
225
-
225
+
226
226
  @current_edge = @current_graph.add_edges( source, target )
227
-
227
+
228
228
  node.each_element( ) do |child|
229
229
  begin
230
230
  send( "graphml_graph_edge_#{child.name}".to_sym, child )
@@ -232,10 +232,10 @@ class GraphViz
232
232
  raise GraphMLError, "node #{child.name} can be child of edge"
233
233
  end
234
234
  end
235
-
235
+
236
236
  @current_edge = nil
237
237
  end
238
-
238
+
239
239
  def graphml_graph_edge_data( node ) #:nodoc:
240
240
  return if @ignored_keys.include?(node.attributes['key'])
241
241
  begin
@@ -244,10 +244,10 @@ class GraphViz
244
244
  warn e
245
245
  end
246
246
  end
247
-
247
+
248
248
  def graphml_graph_hyperedge( node ) #:nodoc:
249
249
  list = []
250
-
250
+
251
251
  node.each_element( ) do |child|
252
252
  if child.name == "endpoint"
253
253
  if child.attributes['port']
@@ -257,12 +257,12 @@ class GraphViz
257
257
  end
258
258
  end
259
259
  end
260
-
260
+
261
261
  list.each { |s|
262
262
  list.each { |t|
263
263
  @current_graph.add_edges( s, t ) unless s == t
264
264
  }
265
- }
265
+ }
266
266
  end
267
267
  end
268
268
  end
@@ -3,12 +3,12 @@ class GraphViz
3
3
  def self.Matrix( line, column = 0, val = 0 )
4
4
  GraphViz::Math::Matrix.new(line, column, val)
5
5
  end
6
-
6
+
7
7
  class CoordinateError < RuntimeError
8
8
  end
9
9
  class ValueError < RuntimeError
10
10
  end
11
-
11
+
12
12
  class Matrix
13
13
  def initialize( line_or_array, column = 0, val = 0 )
14
14
  if line_or_array.kind_of?(Array)
@@ -27,7 +27,7 @@ class GraphViz
27
27
  raise ValueError, "Element at [#{l+1}, #{c+1}] is not a number"
28
28
  end
29
29
  end
30
- end
30
+ end
31
31
 
32
32
  @matrix = line_or_array
33
33
  @line = line
@@ -45,8 +45,8 @@ class GraphViz
45
45
  else
46
46
  raise ArgumentError, "Wrong matrix definition"
47
47
  end
48
- end
49
-
48
+ end
49
+
50
50
  def [](line, column)
51
51
  unless (0...@line).to_a.include?(line-1)
52
52
  raise CoordinateError, "Line out of range (#{line} for 1..#{@line})!"
@@ -56,7 +56,7 @@ class GraphViz
56
56
  end
57
57
  @matrix[line-1][column-1]
58
58
  end
59
-
59
+
60
60
  def []=( line, column, val )
61
61
  unless (0...@line).to_a.include?(line-1)
62
62
  raise CoordinateError, "Line out of range (#{line} for 1..#{@line})!"
@@ -66,20 +66,20 @@ class GraphViz
66
66
  end
67
67
  @matrix[line-1][column-1] = val
68
68
  end
69
-
69
+
70
70
  def matrix
71
71
  @matrix
72
72
  end
73
73
  alias :to_a :matrix
74
-
74
+
75
75
  def columns
76
76
  @column
77
77
  end
78
-
78
+
79
79
  def lines
80
80
  @line
81
81
  end
82
-
82
+
83
83
  def to_s
84
84
  size = bigger
85
85
  out = ""
@@ -92,7 +92,7 @@ class GraphViz
92
92
  end
93
93
  return out
94
94
  end
95
-
95
+
96
96
  def -(m)
97
97
  matrix = GraphViz::Math::Matrix.new( @line, @column )
98
98
  @line.times do |line|
@@ -102,10 +102,10 @@ class GraphViz
102
102
  end
103
103
  return matrix
104
104
  end
105
-
105
+
106
106
  def *(m)
107
107
  matrix = GraphViz::Math::Matrix.new( @line, @line )
108
-
108
+
109
109
  @line.times do |line|
110
110
  @line.times do |column|
111
111
  l = self.line(line+1)
@@ -117,17 +117,17 @@ class GraphViz
117
117
  matrix[line+1,column+1] = v
118
118
  end
119
119
  end
120
-
120
+
121
121
  return matrix
122
122
  end
123
-
123
+
124
124
  def line( line )
125
125
  unless (0...@line).to_a.include?(line-1)
126
126
  raise CoordinateError, "Line out of range (#{line} for 1..#{@line})!"
127
127
  end
128
128
  @matrix[line-1]
129
129
  end
130
-
130
+
131
131
  def column( column )
132
132
  col = []
133
133
  unless (0...@column).to_a.include?(column-1)
@@ -136,10 +136,10 @@ class GraphViz
136
136
  @line.times do |line|
137
137
  col << self[line+1, column]
138
138
  end
139
-
139
+
140
140
  return col
141
141
  end
142
-
142
+
143
143
  def transpose
144
144
  matrix = GraphViz::Math::Matrix.new( @column, @line )
145
145
  @line.times do |line|
@@ -149,7 +149,7 @@ class GraphViz
149
149
  end
150
150
  return matrix
151
151
  end
152
-
152
+
153
153
  def ==(m)
154
154
  equal = true
155
155
  @line.times do |line|
@@ -159,7 +159,7 @@ class GraphViz
159
159
  end
160
160
  return equal
161
161
  end
162
-
162
+
163
163
  def remove_line(n)
164
164
  unless (0...@line).to_a.include?(n-1)
165
165
  raise CoordinateError, "Line out of range (#{n} for 1..#{@line})!"
@@ -176,7 +176,7 @@ class GraphViz
176
176
  end
177
177
  return matrix
178
178
  end
179
-
179
+
180
180
  def remove_column(n)
181
181
  unless (0...@column).to_a.include?(n-1)
182
182
  raise CoordinateError, "Column out of range (#{n} for 1..#{@column})!"
@@ -193,11 +193,11 @@ class GraphViz
193
193
  end
194
194
  return matrix
195
195
  end
196
-
196
+
197
197
  def sum_of_column(n)
198
198
  column(n).inject(0){|sum,item| sum + item}
199
199
  end
200
-
200
+
201
201
  def sum_of_line(n)
202
202
  line(n).inject(0){|sum,item| sum + item}
203
203
  end