ruby-graphviz 0.9.9 → 0.9.10

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.
@@ -0,0 +1,70 @@
1
+ require 'rubygems'
2
+ require 'graphviz'
3
+
4
+ class GraphViz
5
+ class FamilyTree
6
+ class Person
7
+ def initialize( graph, cluster, tree, name )
8
+ @graph = graph
9
+ @cluster = cluster
10
+ @node = @cluster.add_node( name )
11
+ @node["shape"] = "box"
12
+ @tree = tree
13
+ end
14
+
15
+ def couples
16
+ @couples
17
+ end
18
+
19
+ def node
20
+ @node
21
+ end
22
+
23
+ def is_a_man( name )
24
+ @node["label"] = name
25
+ @node["color"] = "blue"
26
+ end
27
+ def is_a_boy( name )
28
+ is_a_man( name )
29
+ end
30
+
31
+ def is_a_woman( name )
32
+ @node["label"] = name
33
+ @node["color"] = "pink"
34
+ end
35
+ def is_a_girl( name )
36
+ is_a_woman( name )
37
+ end
38
+
39
+ def is_maried_with( x )
40
+ node = @cluster.add_node( "#{@node.name}And#{x.node.name}" )
41
+ node["shape"] = "point"
42
+ @cluster.add_edge( @node, node, "dir" => "none" )
43
+ @cluster.add_edge( node, x.node, "dir" => "none" )
44
+ @tree.add_couple( self, x, node )
45
+ end
46
+
47
+ def is_divorced_with( x )
48
+ node = @cluster.add_node( "#{@node.name}And#{x.node.name}" )
49
+ node["shape"] = "point"
50
+ node["color"] = "red"
51
+ @cluster.add_edge( @node, node, "dir" => "none", "color" => "red" )
52
+ @cluster.add_edge( node, x.node, "dir" => "none", "color" => "red" )
53
+ @tree.add_couple( self, x, node )
54
+ end
55
+
56
+ def is_widower_of( x ) #veuf
57
+ node = @cluster.add_node( "#{@node.name}And#{x.node.name}" )
58
+ node["shape"] = "point"
59
+ node["color"] = "green"
60
+ @cluster.add_edge( @node, node, "dir" => "none", "color" => "green" )
61
+ @cluster.add_edge( node, x.node, "dir" => "none", "color" => "green" )
62
+ @tree.add_couple( self, x, node )
63
+ end
64
+
65
+ def kids( *z )
66
+ GraphViz::FamilyTree::Couple.new( @graph, @node ).kids( *z )
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,46 @@
1
+ require 'rubygems'
2
+ require 'graphviz'
3
+ require 'graphviz/family_tree/generation'
4
+ require 'graphviz/family_tree/person'
5
+ require 'graphviz/family_tree/couple'
6
+
7
+ class GraphViz
8
+ class FamilyTree
9
+ def initialize( &block )
10
+ @persons = {}
11
+ @graph = GraphViz.new( "FamilyTree" )
12
+ @generation = 0
13
+ @couples = {}
14
+
15
+ instance_eval(&block) if block
16
+ end
17
+
18
+ def generation( &b )
19
+ GraphViz::FamilyTree::Generation.new( @graph, @persons, self, @generation ).make( &b )
20
+ @generation += 1
21
+ end
22
+
23
+ def persons
24
+ @persons ||= {}
25
+ end
26
+
27
+ def add_couple( x, y, node )
28
+ @couples[x] = {} if @couples[x].nil?
29
+ @couples[x][y] = GraphViz::FamilyTree::Couple.new( @graph, node )
30
+ @couples[y] = {} if @couples[y].nil?
31
+ @couples[y][x] = @couples[x][y]
32
+ end
33
+
34
+ def couple( x, y )
35
+ @couples[x][y]
36
+ end
37
+
38
+ def method_missing(sym, *args, &block)
39
+ persons[sym.to_s]
40
+ end
41
+
42
+ def graph
43
+ @graph
44
+ end
45
+ end
46
+ end
@@ -58,11 +58,15 @@ class GraphViz
58
58
  end
59
59
 
60
60
  class Graph < Treetop::Runtime::SyntaxNode
61
- def eval( context, hOpts )
61
+ def eval( context, hOpts = [] )
62
62
  # puts "GRAPH TYPE = #{type.text_value}"
63
63
  # puts "GRAPH NAME = #{name.text_value}"
64
64
 
65
- hOpts = hOpts[0].merge( {:type => type.text_value} )
65
+ begin
66
+ hOpts = hOpts[0].merge( {:type => type.text_value} )
67
+ rescue
68
+ hOpts = {:type => type.text_value}
69
+ end
66
70
 
67
71
  # Create Graph
68
72
  context.graph = GraphViz.new( name.text_value.gsub(/"/, ""), hOpts )
@@ -231,19 +235,44 @@ class GraphViz
231
235
  end
232
236
  end
233
237
 
234
- class Options < Treetop::Runtime::SyntaxNode
235
- def eval
236
- options = {}
237
- elements[2].elements.each do |e|
238
- # puts " #{e.elements[0].text_value} = #{e.elements[4].text_value}"
239
- options[e.elements[0].text_value] = e.elements[4].text_value.gsub( /"/, "" )
238
+ class AnonymousSubgraph < Treetop::Runtime::SyntaxNode
239
+ def eval( context )
240
+ # puts "CREATE ANONYMOUS SUBGRAPH"
241
+
242
+ # Save options
243
+ saved_options = context.options.clone
244
+ # Save graph
245
+ saved_graph = context.graph
246
+
247
+ # Create Graph
248
+ context.graph = context.graph.add_graph( )
249
+ #context.options = {
250
+ # :node => {},
251
+ # :edge => {}
252
+ #}
253
+
254
+ # Eval cluster
255
+ cluster.eval( context )
256
+
257
+ # Reinitialize graph and options
258
+ context.graph = saved_graph
259
+ context.options = saved_options
260
+ end
240
261
  end
241
- # puts " #{elements[3].text_value} = #{elements[7].text_value}"
242
- options[elements[3].text_value] = elements[7].text_value.gsub( /"/, "" )
243
262
 
244
- return options
245
- end
246
- end
263
+ class Options < Treetop::Runtime::SyntaxNode
264
+ def eval
265
+ options = {}
266
+ elements[2].elements.each do |e|
267
+ # puts " #{e.elements[0].text_value} = #{e.elements[4].text_value}"
268
+ options[e.elements[0].text_value] = e.elements[4].text_value.gsub( /"/, "" )
269
+ end
270
+ # puts " #{elements[3].text_value} = #{elements[7].text_value}"
271
+ options[elements[3].text_value] = elements[7].text_value.gsub( /"/, "" )
272
+
273
+ return options
274
+ end
275
+ end
247
276
 
248
277
  def self.parse( file, *hOpts, &block )
249
278
  dot = open(file).read
data/lib/graphviz.rb CHANGED
@@ -30,6 +30,7 @@ require 'graphviz/attrs'
30
30
  require 'graphviz/constants'
31
31
  require 'graphviz/parser'
32
32
  require 'graphviz/types'
33
+ require 'graphviz/core_ext'
33
34
 
34
35
  class GraphViz
35
36
  include Constants
@@ -80,24 +81,21 @@ class GraphViz
80
81
  #
81
82
  # In:
82
83
  # * xNodeName : Name of the new node
83
- # * *hOpt : Node attributs
84
+ # * hOpts : Node attributs
84
85
  #
85
86
  # Return the GraphViz::Node object created
86
87
  #
87
- def add_node( xNodeName, *hOpt )
88
+ def add_node( xNodeName, hOpts = {} )
88
89
  @hoNodes[xNodeName] = GraphViz::Node::new( xNodeName, self )
89
90
 
90
- if hOpt.nil? == false and hOpt[0].nil? == false
91
-
92
- unless hOpt[0].keys.include?(:label) or hOpt[0].keys.include?("label")
93
- hOpt[0][:label] = xNodeName
94
- end
91
+ unless hOpts.keys.include?(:label) or hOpts.keys.include?("label")
92
+ hOpts[:label] = xNodeName
93
+ end
95
94
 
96
- hOpt[0].each do |xKey, xValue|
97
- @hoNodes[xNodeName][xKey.to_s] = xValue
98
- end
95
+ hOpts.each do |xKey, xValue|
96
+ @hoNodes[xNodeName][xKey.to_s] = xValue
99
97
  end
100
-
98
+
101
99
  @elements_order.push( {
102
100
  "type" => "node",
103
101
  "name" => xNodeName,
@@ -140,29 +138,27 @@ class GraphViz
140
138
  # In:
141
139
  # * oNodeOne : First node (or node list)
142
140
  # * oNodeTwo : Second Node (or node list)
143
- # * *hOpt : Edge attributs
141
+ # * hOpts : Edge attributs
144
142
  #
145
- def add_edge( oNodeOne, oNodeTwo, *hOpt )
143
+ def add_edge( oNodeOne, oNodeTwo, hOpts = {} )
146
144
 
147
145
  if( oNodeOne.class == Array )
148
146
  oNodeOne.each do |no|
149
- add_edge( no, oNodeTwo, *hOpt )
147
+ add_edge( no, oNodeTwo, hOpts )
150
148
  end
151
149
  else
152
150
  if( oNodeTwo.class == Array )
153
151
  oNodeTwo.each do |nt|
154
- add_edge( oNodeOne, nt, *hOpt )
152
+ add_edge( oNodeOne, nt, hOpts )
155
153
  end
156
154
  else
157
155
 
158
156
  oEdge = GraphViz::Edge::new( oNodeOne, oNodeTwo, self )
159
157
 
160
- if hOpt.nil? == false and hOpt[0].nil? == false
161
- hOpt[0].each do |xKey, xValue|
162
- oEdge[xKey.to_s] = xValue
163
- end
158
+ hOpts.each do |xKey, xValue|
159
+ oEdge[xKey.to_s] = xValue
164
160
  end
165
-
161
+
166
162
  @elements_order.push( {
167
163
  "type" => "edge",
168
164
  "value" => oEdge
@@ -195,26 +191,36 @@ class GraphViz
195
191
  #
196
192
  # In:
197
193
  # * xGraphName : Graph name
198
- # * *hOpt : Graph attributs
194
+ # * hOpts : Graph attributs
199
195
  #
200
- def add_graph( xGraphName, *hOpt )
201
- @hoGraphs[xGraphName] = GraphViz::new( xGraphName, :parent => self, :type => @oGraphType )
196
+ def add_graph( xGraphName = nil, hOpts = {}, &block )
197
+ if xGraphName.kind_of?(Hash)
198
+ hOpts = xGraphName
199
+ xGraphName = nil
200
+ end
201
+
202
+ if xGraphName.nil?
203
+ xGraphID = String.random(11)
204
+ xGraphName = ""
205
+ else
206
+ xGraphID = xGraphName
207
+ end
208
+
209
+ @hoGraphs[xGraphID] = GraphViz::new( xGraphName, {:parent => self, :type => @oGraphType}, &block )
202
210
 
203
- if hOpt.nil? == false and hOpt[0].nil? == false
204
- hOpt[0].each do |xKey, xValue|
205
- @hoGraphs[xGraphName][xKey.to_s] = xValue
206
- end
211
+ hOpts.each do |xKey, xValue|
212
+ @hoGraphs[xGraphID][xKey.to_s] = xValue
207
213
  end
208
-
214
+
209
215
  @elements_order.push( {
210
216
  "type" => "graph",
211
217
  "name" => xGraphName,
212
- "value" => @hoGraphs[xGraphName]
218
+ "value" => @hoGraphs[xGraphID]
213
219
  } )
214
220
 
215
- return( @hoGraphs[xGraphName] )
221
+ return( @hoGraphs[xGraphID] )
216
222
  end
217
-
223
+ alias :subgraph :add_graph
218
224
  #
219
225
  # Return the graph object for the given name (or nil)
220
226
  #
@@ -249,7 +255,7 @@ class GraphViz
249
255
 
250
256
  if block
251
257
  # Creating a cluster named '#{xName}'
252
- rCod = add_graph( xName, args[0] )
258
+ rCod = add_graph( xName, args[0]||{} )
253
259
  yield( rCod )
254
260
  else
255
261
  # Create a node named '#{xName}' or search for a node, edge or cluster
@@ -262,7 +268,7 @@ class GraphViz
262
268
  end
263
269
  return( @hoGraphs[xName] ) if @hoGraphs.keys.include?( xName )
264
270
 
265
- rCod = add_node( xName, args[0] )
271
+ rCod = add_node( xName, args[0]||{} )
266
272
  end
267
273
 
268
274
  return rCod
@@ -306,7 +312,7 @@ class GraphViz
306
312
  # * 1 = Error
307
313
  # * 2 = none
308
314
  #
309
- def output( *hOpt )
315
+ def output( hOpts = {} )
310
316
  xDOTScript = ""
311
317
  xLastType = nil
312
318
  xSeparator = ""
@@ -387,36 +393,34 @@ class GraphViz
387
393
 
388
394
  return( xDOTScript )
389
395
  else
390
- if hOpt.nil? == false and hOpt[0].nil? == false
391
- hOpt[0].each do |xKey, xValue|
392
- xValue = xValue.to_s unless xValue.nil? or [Class, TrueClass, FalseClass].include?(xValue.class)
393
- case xKey.to_s
394
- when "output"
395
- warn ":output option is deprecated, please use :<format> => :<file>"
396
- if FORMATS.index( xValue ).nil? == true
397
- raise ArgumentError, "output format '#{xValue}' invalid"
398
- end
399
- @format = xValue
400
- when "file"
401
- warn ":file option is deprecated, please use :<format> => :<file>"
402
- @filename = xValue
403
- when "use"
404
- if PROGRAMS.index( xValue ).nil? == true
405
- raise ArgumentError, "can't use '#{xValue}'"
406
- end
407
- @prog = xValue
408
- when "path"
409
- @path = xValue.split( "," ).map{ |x| x.strip }
410
- when "errors"
411
- @errors = xValue
412
- when "extlib"
413
- @extlibs = xValue.split( "," ).map{ |x| x.strip }
414
- else
415
- if FORMATS.index( xKey.to_s ).nil? == true
416
- raise ArgumentError, "output format '#{xValue}' invalid"
417
- end
418
- @output[xKey.to_s] = xValue
419
- end
396
+ hOpts.each do |xKey, xValue|
397
+ xValue = xValue.to_s unless xValue.nil? or [Class, TrueClass, FalseClass].include?(xValue.class)
398
+ case xKey.to_s
399
+ when "output"
400
+ warn ":output option is deprecated, please use :<format> => :<file>"
401
+ if FORMATS.index( xValue ).nil? == true
402
+ raise ArgumentError, "output format '#{xValue}' invalid"
403
+ end
404
+ @format = xValue
405
+ when "file"
406
+ warn ":file option is deprecated, please use :<format> => :<file>"
407
+ @filename = xValue
408
+ when "use"
409
+ if PROGRAMS.index( xValue ).nil? == true
410
+ raise ArgumentError, "can't use '#{xValue}'"
411
+ end
412
+ @prog = xValue
413
+ when "path"
414
+ @path = xValue.split( "," ).map{ |x| x.strip }
415
+ when "errors"
416
+ @errors = xValue
417
+ when "extlib"
418
+ @extlibs = xValue.split( "," ).map{ |x| x.strip }
419
+ else
420
+ if FORMATS.index( xKey.to_s ).nil? == true
421
+ raise ArgumentError, "output format '#{xValue}' invalid"
422
+ end
423
+ @output[xKey.to_s] = xValue
420
424
  end
421
425
  end
422
426
 
@@ -604,8 +608,8 @@ class GraphViz
604
608
  # * :parent : Parent graph (default : none)
605
609
  # * :type : Graph type (Constants::GRAPHTYPE) (default : digraph)
606
610
  #
607
- def self.parse( xFile, *hOpts, &block )
608
- g = GraphViz::Parser.parse( xFile, hOpts[0], &block )
611
+ def self.parse( xFile, hOpts = {}, &block )
612
+ g = GraphViz::Parser.parse( xFile, hOpts, &block )
609
613
  return g
610
614
  end
611
615
 
@@ -639,7 +643,7 @@ class GraphViz
639
643
  # * 1 = Error
640
644
  # * 2 = none
641
645
  #
642
- def initialize( xGraphName, *hOpt, &block )
646
+ def initialize( xGraphName, hOpts = {}, &block )
643
647
  @filename = nil
644
648
  @name = xGraphName.to_s
645
649
  @format = @@format
@@ -662,45 +666,50 @@ class GraphViz
662
666
  @edge = GraphViz::Attrs::new( self, "edge", EDGESATTRS )
663
667
  @graph = GraphViz::Attrs::new( self, "graph", GRAPHSATTRS )
664
668
 
665
- if hOpt.nil? == false and hOpt[0].nil? == false
666
- hOpt[0].each do |xKey, xValue|
667
- case xKey.to_s
668
- when "output"
669
- warn ":output option is deprecated, please use :<format> => :<file>"
670
- if FORMATS.index( xValue.to_s ).nil? == true
671
- raise ArgumentError, "output format '#{xValue}' invalid"
672
- end
673
- @format = xValue.to_s
674
- when "use"
675
- if PROGRAMS.index( xValue.to_s ).nil? == true
676
- raise ArgumentError, "can't use '#{xValue}'"
677
- end
678
- @prog = xValue.to_s
679
- when "file"
680
- warn ":file option is deprecated, please use :<format> => :<file>"
681
- @filename = xValue.to_s
682
- when "parent"
683
- @oParentGraph = xValue
684
- when "type"
685
- if GRAPHTYPE.index( xValue.to_s ).nil? == true
686
- raise ArgumentError, "graph type '#{xValue}' unknow"
687
- end
688
- @oGraphType = xValue.to_s
689
- when "path"
690
- @path = xValue.split( "," ).map{ |x| x.strip }
691
- when "errors"
692
- @errors = xValue
693
- when "extlibs"
694
- @extlibs = xValue.split( "," ).map{ |x| x.strip }
695
- else
696
- self[xKey.to_s] = xValue.to_s
697
- end
669
+ hOpts.each do |xKey, xValue|
670
+ case xKey.to_s
671
+ when "output"
672
+ warn ":output option is deprecated, please use :<format> => :<file>"
673
+ if FORMATS.index( xValue.to_s ).nil? == true
674
+ raise ArgumentError, "output format '#{xValue}' invalid"
675
+ end
676
+ @format = xValue.to_s
677
+ when "use"
678
+ if PROGRAMS.index( xValue.to_s ).nil? == true
679
+ raise ArgumentError, "can't use '#{xValue}'"
680
+ end
681
+ @prog = xValue.to_s
682
+ when "file"
683
+ warn ":file option is deprecated, please use :<format> => :<file>"
684
+ @filename = xValue.to_s
685
+ when "parent"
686
+ @oParentGraph = xValue
687
+ when "type"
688
+ if GRAPHTYPE.index( xValue.to_s ).nil? == true
689
+ raise ArgumentError, "graph type '#{xValue}' unknow"
690
+ end
691
+ @oGraphType = xValue.to_s
692
+ when "path"
693
+ @path = xValue.split( "," ).map{ |x| x.strip }
694
+ when "errors"
695
+ @errors = xValue
696
+ when "extlibs"
697
+ @extlibs = xValue.split( "," ).map{ |x| x.strip }
698
+ else
699
+ self[xKey.to_s] = xValue.to_s
698
700
  end
699
701
  end
700
702
 
701
703
  yield( self ) if( block )
702
704
  end
703
705
 
706
+ def self.graph( xGraphName, hOpts = {}, &block )
707
+ new( xGraphName, hOpts.symbolize_keys.merge( {:type => "graph"} ), &block )
708
+ end
709
+ def self.digraph( xGraphName, hOpts = {}, &block )
710
+ new( xGraphName, hOpts.symbolize_keys.merge( {:type => "digraph"} ), &block )
711
+ end
712
+
704
713
  #
705
714
  # Escape a string to be acceptable as a node name in a graphviz input file
706
715
  #
@@ -755,7 +764,7 @@ class GraphViz
755
764
  # return nil
756
765
  # end
757
766
 
758
- def add_exe_suffix(prog)
767
+ def add_exe_suffix(prog) #:nodoc:
759
768
  if /Windows/.match( ENV['OS'] )
760
769
  suffix = '.exe'
761
770
  else
@@ -764,8 +773,7 @@ class GraphViz
764
773
  "#{prog}#{suffix}"
765
774
  end
766
775
 
767
-
768
- def escape_path_containing_blanks(path)
776
+ def escape_path_containing_blanks(path) #:nodoc:
769
777
  path.gsub!(File::ALT_SEPARATOR, File::SEPARATOR) if File::ALT_SEPARATOR
770
778
  path_elements = path.split(File::SEPARATOR)
771
779
  path_elements.map! do |element|
@@ -778,6 +786,4 @@ class GraphViz
778
786
  path_elements.join(File::SEPARATOR)
779
787
  end
780
788
 
781
-
782
789
  end
783
-
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-graphviz
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.9
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 9
8
+ - 10
9
+ version: 0.9.10
5
10
  platform: ruby
6
11
  authors:
7
12
  - Gregoire Lejeune
@@ -9,19 +14,21 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2010-02-12 00:00:00 +01:00
17
+ date: 2010-03-17 00:00:00 +01:00
13
18
  default_executable:
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
21
  name: treetop
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
20
24
  requirements:
21
25
  - - ">="
22
26
  - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
23
29
  version: "0"
24
- version:
30
+ type: :runtime
31
+ version_requirements: *id001
25
32
  description: Ruby/Graphviz provides an interface to layout and generate images of directed graphs in a variety of formats (PostScript, PNG, etc.) using GraphViz.
26
33
  email: gregoire.lejeune@free.fr
27
34
  executables:
@@ -31,11 +38,9 @@ extensions: []
31
38
 
32
39
  extra_rdoc_files:
33
40
  - README.rdoc
34
- - ChangeLog.rdoc
35
41
  - COPYING
36
42
  - AUTHORS
37
43
  files:
38
- - ChangeLog.rdoc
39
44
  - COPYING
40
45
  - README.rdoc
41
46
  - AUTHORS
@@ -44,6 +49,7 @@ files:
44
49
  - bin/ruby2gv
45
50
  - examples/arrowhead.rb
46
51
  - examples/dot/cluster.dot
52
+ - examples/dot/dotgraph.dot
47
53
  - examples/dot/fsm.dot
48
54
  - examples/dot/genetic.dot
49
55
  - examples/dot/hello.dot
@@ -51,15 +57,18 @@ files:
51
57
  - examples/dot/lion_share.dot
52
58
  - examples/dot/prof.dot
53
59
  - examples/dot/psg.dot
60
+ - examples/dot/rank.dot
54
61
  - examples/dot/sdh.dot
55
62
  - examples/dot/siblings.dot
56
63
  - examples/dot/test.dot
64
+ - examples/dot/test_parse.rb
57
65
  - examples/dot/unix.dot
58
66
  - examples/graphviz.org/cluster.rb
59
67
  - examples/graphviz.org/hello_world.rb
60
68
  - examples/graphviz.org/lion_share.rb
61
69
  - examples/graphviz.org/process.rb
62
70
  - examples/graphviz.org/TrafficLights.rb
71
+ - examples/hello.png
63
72
  - examples/HTML-Labels.rb
64
73
  - examples/maketest.bat
65
74
  - examples/maketest.sh
@@ -80,6 +89,7 @@ files:
80
89
  - examples/sample11.rb
81
90
  - examples/sample12.rb
82
91
  - examples/sample13.rb
92
+ - examples/sample13b.rb
83
93
  - examples/sample14.rb
84
94
  - examples/sample15.rb
85
95
  - examples/sample16.rb
@@ -99,17 +109,28 @@ files:
99
109
  - examples/sample30.rb
100
110
  - examples/sample31.rb
101
111
  - examples/sample32.rb
112
+ - examples/sample33.rb
113
+ - examples/sample34.rb
114
+ - examples/sample35.rb
115
+ - examples/sample36.rb
116
+ - examples/sample40.rb
102
117
  - examples/sdlshapes/README
103
118
  - examples/sdlshapes/sdl.ps
104
119
  - examples/sdlshapes/sdlshapes.dot
105
120
  - examples/shapes.rb
121
+ - examples/simpsons.gv
106
122
  - examples/test.xml
107
123
  - examples/testorder.rb
108
124
  - examples/testxml.rb
109
125
  - lib/graphviz/attrs.rb
110
126
  - lib/graphviz/constants.rb
127
+ - lib/graphviz/core_ext.rb
111
128
  - lib/graphviz/dot.treetop
112
129
  - lib/graphviz/edge.rb
130
+ - lib/graphviz/family_tree/couple.rb
131
+ - lib/graphviz/family_tree/generation.rb
132
+ - lib/graphviz/family_tree/person.rb
133
+ - lib/graphviz/family_tree.rb
113
134
  - lib/graphviz/node.rb
114
135
  - lib/graphviz/parser.rb
115
136
  - lib/graphviz/types/esc_string.rb
@@ -141,18 +162,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
141
162
  requirements:
142
163
  - - ">="
143
164
  - !ruby/object:Gem::Version
165
+ segments:
166
+ - 0
144
167
  version: "0"
145
- version:
146
168
  required_rubygems_version: !ruby/object:Gem::Requirement
147
169
  requirements:
148
170
  - - ">="
149
171
  - !ruby/object:Gem::Version
172
+ segments:
173
+ - 0
150
174
  version: "0"
151
- version:
152
175
  requirements: []
153
176
 
154
177
  rubyforge_project: ruby-asp
155
- rubygems_version: 1.3.5
178
+ rubygems_version: 1.3.6
156
179
  signing_key:
157
180
  specification_version: 3
158
181
  summary: Interface to the GraphViz graphing tool