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.
- data/README.rdoc +112 -0
- data/examples/dot/dotgraph.dot +28 -0
- data/examples/dot/rank.dot +6 -0
- data/examples/dot/test_parse.rb +13 -0
- data/examples/hello.png +0 -0
- data/examples/maketest.bat +5 -0
- data/examples/maketest.sh +4 -0
- data/examples/sample13b.rb +48 -0
- data/examples/sample33.rb +43 -0
- data/examples/sample34.rb +29 -0
- data/examples/sample35.rb +43 -0
- data/examples/sample36.rb +35 -0
- data/examples/sample40.rb +46 -0
- data/examples/simpsons.gv +69 -0
- data/lib/graphviz/constants.rb +2 -2
- data/lib/graphviz/core_ext.rb +20 -0
- data/lib/graphviz/dot.treetop +8 -0
- data/lib/graphviz/family_tree/couple.rb +52 -0
- data/lib/graphviz/family_tree/generation.rb +25 -0
- data/lib/graphviz/family_tree/person.rb +70 -0
- data/lib/graphviz/family_tree.rb +46 -0
- data/lib/graphviz/parser.rb +42 -13
- data/lib/graphviz.rb +111 -105
- metadata +34 -11
- data/ChangeLog.rdoc +0 -95
@@ -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
|
data/lib/graphviz/parser.rb
CHANGED
@@ -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
|
-
|
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
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
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
|
-
|
245
|
-
|
246
|
-
|
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
|
-
# *
|
84
|
+
# * hOpts : Node attributs
|
84
85
|
#
|
85
86
|
# Return the GraphViz::Node object created
|
86
87
|
#
|
87
|
-
def add_node( xNodeName,
|
88
|
+
def add_node( xNodeName, hOpts = {} )
|
88
89
|
@hoNodes[xNodeName] = GraphViz::Node::new( xNodeName, self )
|
89
90
|
|
90
|
-
|
91
|
-
|
92
|
-
|
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
|
-
|
97
|
-
|
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
|
-
# *
|
141
|
+
# * hOpts : Edge attributs
|
144
142
|
#
|
145
|
-
def add_edge( oNodeOne, oNodeTwo,
|
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,
|
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,
|
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
|
-
|
161
|
-
|
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
|
-
# *
|
194
|
+
# * hOpts : Graph attributs
|
199
195
|
#
|
200
|
-
def add_graph( xGraphName,
|
201
|
-
|
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
|
-
|
204
|
-
|
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[
|
218
|
+
"value" => @hoGraphs[xGraphID]
|
213
219
|
} )
|
214
220
|
|
215
|
-
return( @hoGraphs[
|
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(
|
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
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
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,
|
608
|
-
g = GraphViz::Parser.parse( xFile, hOpts
|
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,
|
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
|
-
|
666
|
-
|
667
|
-
|
668
|
-
|
669
|
-
|
670
|
-
|
671
|
-
|
672
|
-
|
673
|
-
|
674
|
-
|
675
|
-
|
676
|
-
|
677
|
-
|
678
|
-
|
679
|
-
|
680
|
-
|
681
|
-
|
682
|
-
|
683
|
-
|
684
|
-
|
685
|
-
|
686
|
-
|
687
|
-
|
688
|
-
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
|
693
|
-
|
694
|
-
|
695
|
-
|
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
|
-
|
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-
|
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
|
-
|
18
|
-
|
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
|
-
|
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.
|
178
|
+
rubygems_version: 1.3.6
|
156
179
|
signing_key:
|
157
180
|
specification_version: 3
|
158
181
|
summary: Interface to the GraphViz graphing tool
|