ruby-graphviz 1.0.3 → 1.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/AUTHORS.rdoc +24 -0
- data/CHANGELOG.rdoc +242 -0
- data/COPYING.rdoc +133 -0
- data/README.rdoc +6 -241
- data/Rakefile +1 -1
- data/examples/dot/test_parse.rb +1 -1
- data/examples/sample15.rb +4 -2
- data/examples/sample69.rb +23 -0
- data/lib/graphviz/attrs.rb +20 -10
- data/lib/graphviz/constants.rb +4 -4
- data/lib/graphviz/edge.rb +22 -18
- data/lib/graphviz/graphml.rb +14 -9
- data/lib/graphviz/node.rb +22 -18
- data/lib/graphviz/types/color.rb +2 -0
- data/lib/graphviz/types/color_list.rb +2 -0
- data/lib/graphviz/types/gv_bool.rb +3 -3
- data/lib/graphviz/types/gv_double.rb +3 -1
- data/lib/graphviz/types/rect.rb +1 -0
- data/lib/graphviz/types/spline_type.rb +2 -0
- data/lib/graphviz/xml.rb +5 -5
- data/lib/graphviz.rb +22 -45
- data/ruby-graphviz.gemspec +7 -5
- data/test/test_types.rb +5 -3
- metadata +17 -10
- data/AUTHORS +0 -23
- data/COPYING +0 -340
data/README.rdoc
CHANGED
@@ -14,241 +14,6 @@ Interface to the GraphViz graphing tool
|
|
14
14
|
|
15
15
|
* New FamilyTree
|
16
16
|
|
17
|
-
== CHANGELOG
|
18
|
-
|
19
|
-
=== 1.0.3 :
|
20
|
-
* The GraphViz::Theory#moore_dijkstra return a path which contains GraphViz::Node instead of GraphViz::Node#id
|
21
|
-
* Add Breadth First Search algorithm (GraphViz::Theory#bfs)
|
22
|
-
* Add Depth First Search algorithm (GraphViz::Theory#dfs)
|
23
|
-
* Add GraphViz#add_edges (GraphViz#add_edge is deprecated)
|
24
|
-
* Add GraphViz#add_nodes (GraphViz#add_node is deprecated)
|
25
|
-
* Add GraphViz::generate
|
26
|
-
* Remove definition of Array#all?
|
27
|
-
|
28
|
-
=== 1.0.2 :
|
29
|
-
* Add PageRank algorithm
|
30
|
-
* Major bug corrections
|
31
|
-
* Fix utils/colors.rb's case syntax
|
32
|
-
* Modify deprecated method: Hash#index to Hash#key
|
33
|
-
|
34
|
-
=== 1.0.1 :
|
35
|
-
* Add GraphViz::DSL
|
36
|
-
* Change project to use Bundler gem tools
|
37
|
-
* Fix a few typos in the README
|
38
|
-
* Change Config to RbConfig
|
39
|
-
* Add possibility to get the x,y coordinates of each of the nodes
|
40
|
-
|
41
|
-
=== 1.0.0 :
|
42
|
-
* \o/
|
43
|
-
* GraphViz::Node#name has been removed - use GraphViz::Node#id
|
44
|
-
* The html attribute has been removed - use a label attribut (<tt>:label => '<<html/>>'</tt>)
|
45
|
-
* :output option has been removed - use :<format> => :<file>
|
46
|
-
* :file option has been removed - use :<format> => :<file>
|
47
|
-
* Add GraphViz#to_s
|
48
|
-
* Add GraphViz#add (see sample59.rb)
|
49
|
-
* GraphViz::XML.output is deprecated, use GraphViz::XML.graph.output
|
50
|
-
* Issue #22 : Error when generating a graph with an ID containing a space.
|
51
|
-
|
52
|
-
=== 0.9.21 :
|
53
|
-
* Add attributes "label_scheme" and "rotation"
|
54
|
-
* Add missing options :
|
55
|
-
* <tt>:scale => v</tt> : Scale input by 'v' (=72)
|
56
|
-
* <tt>:inverty => [true|false]</tt> : Invert y coordinate in output
|
57
|
-
* <tt>:no_layout => v</tt> : No layout mode 'v' (=1) -- neato only
|
58
|
-
* <tt>:reduce => [true|false]</tt> : Reduce graph -- neato only
|
59
|
-
* <tt>:Lg => [true|false]</tt> : Don't use grid -- fdp only
|
60
|
-
* <tt>:LO => [true|false]</tt> : Use old attractive force -- fdp only
|
61
|
-
* <tt>:Ln => i</tt> : Set number of iterations to i -- fdp only
|
62
|
-
* <tt>:LU => i</tt> : Set unscaled factor to i -- fdp only
|
63
|
-
* <tt>:LC => v</tt> : Set overlap expansion factor to v -- fdp only
|
64
|
-
* <tt>:LT => [*]v</tt> : Set temperature (temperature factor) to v -- fdp only
|
65
|
-
|
66
|
-
=== 0.9.20 :
|
67
|
-
* Add GraphViz#each_attribut, Node#each_attribut and Edge#each_attribut
|
68
|
-
* Bugs corrections in tests (by oupo)
|
69
|
-
* Major bug correction in GraphViz#output for subgraphs
|
70
|
-
* Update GraphViz.escape
|
71
|
-
|
72
|
-
=== 0.9.19 :
|
73
|
-
* Add strict digraph support (by Jonas Elfström) (see sample58.rb)
|
74
|
-
g = GraphViz.new(:G, :type => "strict digraph")
|
75
|
-
# or
|
76
|
-
g = GraphViz.new(:G, :type => "digraph", :strict => true)
|
77
|
-
# or
|
78
|
-
g = GraphViz.digraph(:G, :strict => true)
|
79
|
-
# or
|
80
|
-
g = GraphViz.strict_digraph(:G)
|
81
|
-
* Add GraphViz#root_graph, Node#root_graph, Edge#root_graph
|
82
|
-
* The GraphML parser now accept a graphml file or string
|
83
|
-
|
84
|
-
=== 0.9.18 :
|
85
|
-
* JRuby bug correction (by Nigel Thorne)
|
86
|
-
* Fix autoload problem for Rubinius (by Rolf Timmermans)
|
87
|
-
* Bugs corrections
|
88
|
-
|
89
|
-
=== 0.9.17 :
|
90
|
-
* GraphViz::Edge#node_one and GraphViz::Edge#node_one now have un optional parameter to indicate if you want to (or not) get the port in the name (default: true)
|
91
|
-
* GraphViz#each_node now returns the Hash of nodes if there is no block given.
|
92
|
-
* GraphViz#each_edge now returns the list of edges if there is no block given.
|
93
|
-
* GraphViz#each_graph now returns the Hash of graphs if there is no block given.
|
94
|
-
* Add GraphViz::Node#index : return the node index
|
95
|
-
* Add GraphViz::Edge#index : return the edge index
|
96
|
-
* Add GraphViz#type : return the graph type (graph or digraph)
|
97
|
-
* Add GraphViz#get_edge_at_index and GraphViz#get_node_at_index
|
98
|
-
* Add GvDouble
|
99
|
-
* Add GraphViz::Theory (see examples/theory/tests.rb)
|
100
|
-
* Add GraphML[http://graphml.graphdrawing.org/] support (see sample57.rb)
|
101
|
-
* fixed "edge attribut 'to_ary' invalid" on mri 1.9.2 (by Stefan Huber)
|
102
|
-
|
103
|
-
=== 0.9.16 :
|
104
|
-
* Add <tt>xml2gv</tt>
|
105
|
-
* Rename <tt>GraphViz.parser2</tt> to <tt>GraphViz.parser</tt>
|
106
|
-
* Remove treetop dependency
|
107
|
-
* Ruby 1.9 (and MacRuby) compatibility -- Issue #12: see sample38.rb
|
108
|
-
* Add GraphViz::Attrs#each and GraphViz::Attrs#to_h
|
109
|
-
* Add GraphViz::Edge#node_one and GraphViz::Edge#node_two
|
110
|
-
|
111
|
-
=== 0.9.15 :
|
112
|
-
* Add <tt>GraphViz.parser2</tt>. <b>WARNING</b> this method will replace <tt>GraphViz.parser</tt>. So please don't use it, or only for testing.
|
113
|
-
* Bug correction in <tt>dot2ruby</tt>
|
114
|
-
* Add <tt>--output-format</tt> option to <tt>dot2ruby</tt>
|
115
|
-
* Add <tt>git2gv</tt>
|
116
|
-
* Issue #16 : escape graph ID
|
117
|
-
|
118
|
-
=== 0.9.14 :
|
119
|
-
* Add dot2ruby script
|
120
|
-
* Remove NULL character in the DOT script
|
121
|
-
* <b>WARNING</b> : FamilyTree is (still) broken in this version !
|
122
|
-
|
123
|
-
=== 0.9.13 :
|
124
|
-
* Add dot2ruby.g
|
125
|
-
* Bug correction with HTML label
|
126
|
-
* The html attribut is deprecated. You can use the label attribut, as dot do it : <tt>:label => '<<html/>>'</tt>
|
127
|
-
* Issue #15 : Thin server
|
128
|
-
* <b>WARNING</b> : FamilyTree is (still) broken in this version !
|
129
|
-
|
130
|
-
=== 0.9.12 :
|
131
|
-
* GraphViz::Node#name is deprecated, you must use GraphViz::Node#id (issue #14)
|
132
|
-
* Add :nothugly option to GraphViz#output (see sample41.rb and http://www.hokstad.com/making-graphviz-output-pretty-with-xsl.html)
|
133
|
-
* Issue #13 : you must now specify a port in GraphViz::Edge.new with a syntax like this :
|
134
|
-
GraphViz::Edge.new( {nodeOne => :port}, {nodeTwo => :other} )
|
135
|
-
* Issue #12 : UTF8 support (see sample38.rb)
|
136
|
-
* Move and rename examples + remove maketest.[sh|bat]
|
137
|
-
* <b>WARNING</b> : FamilyTree is broken in this version !
|
138
|
-
|
139
|
-
=== 0.9.11 :
|
140
|
-
* Issue #11 : Cygwin PATH
|
141
|
-
* Major bugs correction in output
|
142
|
-
* Bug correction in find_executable
|
143
|
-
* Add tests (by Chip Malice : http://github.com/hipe)
|
144
|
-
|
145
|
-
=== 0.9.10 :
|
146
|
-
* Move ChangeLog in README
|
147
|
-
* Add GraphViz::FamilyTree (alpha). See examples/sample33.rb
|
148
|
-
* Major bugs corrections in GraphViz::Parser
|
149
|
-
* Issue #10 : Anonymous graph (see Subgraphs and Clusters at http://www.graphviz.org/doc/info/lang.html). See examples/sample34.rb
|
150
|
-
* GraphViz#add_graph can now take a block parameter. See example/sample34.rb
|
151
|
-
* Add GraphViz.digraph and GraphViz.graph (same as GraphViz.new( ..., :type => "digraph" ) and GraphViz.new( ..., :type => "graph" )). See examples/sample35.rb
|
152
|
-
* Add GraphViz#subgraph. See examples/sample35.rb
|
153
|
-
* GraphViz::Parser support anonymous graph
|
154
|
-
* Add lage node example. See examples/sample36.rb
|
155
|
-
|
156
|
-
=== 0.9.9 :
|
157
|
-
* Add graph as an accessor to allow you to set global graph attributs (like edge and node)
|
158
|
-
* Add each_node, each_edge, each_graph (thanks to @metellius) and graph_count
|
159
|
-
* Issue #9 (partial) - Solution : by default, a node will have his label set with the node ID)
|
160
|
-
|
161
|
-
=== 0.9.8 :
|
162
|
-
* Update graph and node posibility to set properties (see sample28.rb)
|
163
|
-
* Issue #7: Path option is never being used to find the executable
|
164
|
-
* Adding classes to check if the attributes are in the correct type
|
165
|
-
* Issue #8: dots in href are escaped with backslash, which corrupts the URL (see sample29.rb)
|
166
|
-
* Add posibility to use external libraries (see sample30.rb)
|
167
|
-
* Add options -u and -s to ruby2gv
|
168
|
-
* Add gem2gv
|
169
|
-
|
170
|
-
=== 0.9.7 :
|
171
|
-
* Issue #2: Small bug correction in escape_path_containing_blanks (by Andreas Ronge)
|
172
|
-
* Issue #4: New find_executable (by reactive)
|
173
|
-
* Issue #3: Tempfiles created in current working directory only in Windows
|
174
|
-
* Issue #6: Respect "none" format in output options hash and respect String output-filename when the "none" format is selected. See examples/sample27.rb (by Dave Burt)
|
175
|
-
|
176
|
-
=== 0.9.6 :
|
177
|
-
* jRuby support (by obruening)
|
178
|
-
* Issue #1 : STDOUT in binmode
|
179
|
-
|
180
|
-
=== 0.9.5 :
|
181
|
-
* Remove 'mkmf' dependency
|
182
|
-
* GraphViz::Edge#[] modification
|
183
|
-
* Small correction to escape the dot ('.') character (by Miguel Cabrera)
|
184
|
-
|
185
|
-
=== 0.9.4 :
|
186
|
-
* Escape nodes and edges attributs
|
187
|
-
* GraphViz::escape corrections (by Dave Burt)
|
188
|
-
* Add :errors option to set level of message suppression (default : suppress warning messages)
|
189
|
-
|
190
|
-
=== 0.9.3 :
|
191
|
-
* Minor bug correction for Windows
|
192
|
-
* Use Open3.popen3 if installed, else use IO.popen (by Dave Burt)
|
193
|
-
* Add '-', '>' and '>>' has aliases of '<<' to create an edge.
|
194
|
-
|
195
|
-
=== 0.9.2 :
|
196
|
-
* Escape nodes (by Dave Burt)
|
197
|
-
* Handle errors from graphviz command (by Dave Burt)
|
198
|
-
* Output as string (if String class is passed as file i.e. output(:pdf => String)) (by Dave Burt)
|
199
|
-
|
200
|
-
=== 0.9.1 :
|
201
|
-
* Bugs corrections
|
202
|
-
* Add the ability to create edge like that : node1 << node2 << node3 ...
|
203
|
-
* Complete README
|
204
|
-
* Add a DOT parser. This parser has a lot of limitations. So don't use it in a production context !
|
205
|
-
* :output and :file options are deprecated, please use :<format> => :<file>
|
206
|
-
* You can now specify multiple outputs via :<format> => :<file> (see sample 22).
|
207
|
-
|
208
|
-
=== 0.9.0 :
|
209
|
-
* Add fdp example (sample 15)
|
210
|
-
* Add edge between cluster and node and cluster and cluster support
|
211
|
-
* GraphViz.add_node now support array (sample 16)
|
212
|
-
* Bug correction in GraphViz.output (sample 19)
|
213
|
-
* Add GraphViz#default to set default options (:use, :path and :output)
|
214
|
-
* Add possibility to set node or edge attribut via :
|
215
|
-
node.<attribut>=<value> or node.<attribut>( <value> )
|
216
|
-
edge.<attribut>=<value> or edge.<attribut>( <value> )
|
217
|
-
* Add GraphViz::Edge.set and GraphViz::Node.set
|
218
|
-
* Add sample 20
|
219
|
-
* Add GraphViz.node_count and GraphViz.edge_count by Daniel Cadenas Nión
|
220
|
-
|
221
|
-
=== 0.8.2 :
|
222
|
-
* Update Node, Edge and Graph Attributes (see http://www.graphviz.org/doc/info/attrs.html)
|
223
|
-
* Bugs corrections
|
224
|
-
|
225
|
-
=== 0.8.1 :
|
226
|
-
* Documentation
|
227
|
-
|
228
|
-
=== 0.8.0 :
|
229
|
-
* Add all the features of the current graphviz version
|
230
|
-
|
231
|
-
=== 0.7.0 :
|
232
|
-
* Add option "path" to output
|
233
|
-
|
234
|
-
=== 0.6.0 :
|
235
|
-
* Add undirected graph support
|
236
|
-
|
237
|
-
=== 0.5.0 :
|
238
|
-
* Preserve the original order of creation of nodes and edges
|
239
|
-
|
240
|
-
=== 0.4.0 :
|
241
|
-
* Add HTML-Labels
|
242
|
-
|
243
|
-
=== 0.3.0 :
|
244
|
-
* Bugs corrections
|
245
|
-
|
246
|
-
=== 0.2.0 :
|
247
|
-
* Pure ruby
|
248
|
-
|
249
|
-
=== 0.1.0 :
|
250
|
-
* Initial version
|
251
|
-
|
252
17
|
== SYNOPSIS
|
253
18
|
|
254
19
|
A basic example
|
@@ -259,11 +24,11 @@ A basic example
|
|
259
24
|
g = GraphViz.new( :G, :type => :digraph )
|
260
25
|
|
261
26
|
# Create two nodes
|
262
|
-
hello = g.
|
263
|
-
world = g.
|
27
|
+
hello = g.add_nodes( "Hello" )
|
28
|
+
world = g.add_nodes( "World" )
|
264
29
|
|
265
30
|
# Create an edge between the two nodes
|
266
|
-
g.
|
31
|
+
g.add_edges( hello, world )
|
267
32
|
|
268
33
|
# Generate output image
|
269
34
|
g.output( :png => "hello_world.png" )
|
@@ -333,9 +98,9 @@ Ruby/GraphViz also includes :
|
|
333
98
|
require 'graphviz'
|
334
99
|
graph_g = GraphViz.digraph( "G" ) { |graph_g|
|
335
100
|
graph_g[:bb] = '0,0,70,108'
|
336
|
-
node_hello = graph_g.
|
337
|
-
graph_g.
|
338
|
-
node_world = graph_g.
|
101
|
+
node_hello = graph_g.add_nodes( "Hello", :height => '0.5', :label => '\N', :pos => '35,90', :width => '0.88889' )
|
102
|
+
graph_g.add_edges( "Hello", "World", :pos => 'e,35,36.413 35,71.831 35,64.131 35,54.974 35,46.417' )
|
103
|
+
node_world = graph_g.add_nodes( "World", :height => '0.5', :label => '\N', :pos => '35,18', :width => '0.97222' )
|
339
104
|
}
|
340
105
|
puts graph_g.output( :canon => String )
|
341
106
|
|
data/Rakefile
CHANGED
@@ -27,7 +27,7 @@ RDoc::Task.new do |rdoc|
|
|
27
27
|
rdoc.options += RDOC_OPTS
|
28
28
|
rdoc.main = "README.rdoc"
|
29
29
|
rdoc.title = "Ruby/GraphViz, the Documentation"
|
30
|
-
rdoc.rdoc_files.add ['README.rdoc', 'AUTHORS', 'COPYING',
|
30
|
+
rdoc.rdoc_files.add ['README.rdoc', 'CHANGELOG.rdoc', 'AUTHORS.rdoc', 'COPYING.rdoc',
|
31
31
|
'lib/graphviz.rb',
|
32
32
|
'lib/graphviz/node.rb',
|
33
33
|
'lib/graphviz/edge.rb',
|
data/examples/dot/test_parse.rb
CHANGED
data/examples/sample15.rb
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
$:.unshift( "../lib" );
|
7
7
|
require "graphviz"
|
8
8
|
|
9
|
-
GraphViz::new( "G", :type => "graph", :use => "fdp" ) { |graph|
|
9
|
+
g = GraphViz::new( "G", :type => "graph", :use => "fdp" ) { |graph|
|
10
10
|
graph.e
|
11
11
|
graph.clusterA { |cA|
|
12
12
|
cA.a << cA.b
|
@@ -20,4 +20,6 @@ GraphViz::new( "G", :type => "graph", :use => "fdp" ) { |graph|
|
|
20
20
|
graph.clusterB.d << graph.clusterA.clusterC._d
|
21
21
|
graph.e << graph.clusterB
|
22
22
|
graph.clusterA.clusterC << graph.clusterB
|
23
|
-
}
|
23
|
+
}
|
24
|
+
|
25
|
+
g.output( :path => '/usr/local/bin/', :png => "#{$0}.png" )
|
@@ -0,0 +1,23 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
$:.unshift( "../lib" );
|
4
|
+
require "graphviz"
|
5
|
+
|
6
|
+
g = GraphViz::new( "G", :type => "graph" )
|
7
|
+
g[:compound] = true
|
8
|
+
g[:rankdir] = "LR"
|
9
|
+
|
10
|
+
c0 = g.add_graph( "cluster0", "label" => "cluster #1" )
|
11
|
+
a0 = c0.add_nodes( "a0" )
|
12
|
+
|
13
|
+
c1 = g.add_graph( "cluster1", "label" => "cluster #2" )
|
14
|
+
b0 = c1.add_nodes( "b0" )
|
15
|
+
|
16
|
+
e1 = g.add_edges(a0,b0)
|
17
|
+
e1[:lhead] = c1.id
|
18
|
+
e1[:ltail] = c0.id
|
19
|
+
|
20
|
+
e2 = g.add_edges(a0,b0)
|
21
|
+
e2[:lhead] = c1.id
|
22
|
+
|
23
|
+
g.output( :png => "#{$0}.png" )
|
data/lib/graphviz/attrs.rb
CHANGED
@@ -14,15 +14,18 @@
|
|
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
|
16
16
|
|
17
|
+
class AttributeException < RuntimeError
|
18
|
+
end
|
19
|
+
|
17
20
|
class GraphViz
|
18
21
|
class Attrs
|
19
22
|
attr_accessor :data
|
20
23
|
|
21
|
-
def initialize( gviz, name,
|
22
|
-
@name
|
23
|
-
@
|
24
|
-
@data
|
25
|
-
@graphviz
|
24
|
+
def initialize( gviz, name, attributes )
|
25
|
+
@name = name
|
26
|
+
@attributes = attributes
|
27
|
+
@data = Hash::new( )
|
28
|
+
@graphviz = gviz
|
26
29
|
end
|
27
30
|
|
28
31
|
def each
|
@@ -49,14 +52,21 @@ class GraphViz
|
|
49
52
|
end
|
50
53
|
|
51
54
|
def []=( key, value )
|
52
|
-
unless @
|
53
|
-
raise ArgumentError, "#{@name}
|
55
|
+
unless @attributes.keys.include?( key.to_s )
|
56
|
+
raise ArgumentError, "#{@name} attribute '#{key.to_s}' invalid"
|
54
57
|
end
|
55
58
|
|
56
|
-
|
59
|
+
begin
|
60
|
+
value = GraphViz::Types.const_get(@attributes[key.to_s]).new( value )
|
61
|
+
rescue => e
|
62
|
+
raise AttributeException, "Invalide value `#{value}` for attribute `#{key}` : #{e}"
|
63
|
+
end
|
64
|
+
unless value.nil?
|
65
|
+
@data[key.to_s] = value
|
57
66
|
|
58
|
-
|
59
|
-
|
67
|
+
if @graphviz.nil? == false
|
68
|
+
@graphviz.set_position( @name, key.to_s, @data[key.to_s] )
|
69
|
+
end
|
60
70
|
end
|
61
71
|
end
|
62
72
|
end
|
data/lib/graphviz/constants.rb
CHANGED
@@ -40,7 +40,7 @@
|
|
40
40
|
# C => cluster
|
41
41
|
#
|
42
42
|
module Constants
|
43
|
-
RGV_VERSION = "1.0.
|
43
|
+
RGV_VERSION = "1.0.4"
|
44
44
|
|
45
45
|
## Const: Output formats
|
46
46
|
FORMATS = [
|
@@ -276,12 +276,12 @@ module Constants
|
|
276
276
|
"z" => { :usedBy => "N", :type => :GvDouble }
|
277
277
|
}
|
278
278
|
|
279
|
-
## Const: Graph
|
279
|
+
## Const: Graph attributes
|
280
280
|
GRAPHSATTRS = Constants::getAttrsFor( /G|S|C/ )
|
281
281
|
|
282
|
-
## Const: Node
|
282
|
+
## Const: Node attributes
|
283
283
|
NODESATTRS = Constants::getAttrsFor( /N/ )
|
284
284
|
|
285
|
-
## Const: Edge
|
285
|
+
## Const: Edge attributes
|
286
286
|
EDGESATTRS = Constants::getAttrsFor( /E/ )
|
287
287
|
end
|
data/lib/graphviz/edge.rb
CHANGED
@@ -32,7 +32,7 @@ class GraphViz
|
|
32
32
|
@node_two_id, @node_two_port = getNodeNameAndPort( vNodeTwo )
|
33
33
|
|
34
34
|
@parent_graph = parent_graph
|
35
|
-
@
|
35
|
+
@edge_attributes = GraphViz::Attrs::new( nil, "edge", EDGESATTRS )
|
36
36
|
@index = nil
|
37
37
|
|
38
38
|
unless @parent_graph.directed?
|
@@ -71,23 +71,23 @@ class GraphViz
|
|
71
71
|
@index = i if @index == nil
|
72
72
|
end
|
73
73
|
|
74
|
-
# Set value +
|
75
|
-
def []=(
|
76
|
-
|
77
|
-
@
|
74
|
+
# Set value +attribute_value+ to the edge attribute +attribute_name+
|
75
|
+
def []=( attribute_name, attribute_value )
|
76
|
+
attribute_value = attribute_value.to_s if attribute_value.class == Symbol
|
77
|
+
@edge_attributes[attribute_name.to_s] = attribute_value
|
78
78
|
end
|
79
79
|
|
80
|
-
# Set values for edge
|
81
|
-
# get the value of the given edge
|
82
|
-
def [](
|
80
|
+
# Set values for edge attributes or
|
81
|
+
# get the value of the given edge attribute +attribute_name+
|
82
|
+
def []( attribute_name )
|
83
83
|
# Modification by axgle (http://github.com/axgle)
|
84
|
-
if Hash ===
|
85
|
-
|
84
|
+
if Hash === attribute_name
|
85
|
+
attribute_name.each do |key, value|
|
86
86
|
self[key] = value
|
87
87
|
end
|
88
88
|
else
|
89
|
-
if @
|
90
|
-
@
|
89
|
+
if @edge_attributes[attribute_name.to_s]
|
90
|
+
@edge_attributes[attribute_name.to_s].clone
|
91
91
|
else
|
92
92
|
nil
|
93
93
|
end
|
@@ -95,13 +95,13 @@ class GraphViz
|
|
95
95
|
end
|
96
96
|
|
97
97
|
#
|
98
|
-
# Calls block once for each
|
98
|
+
# Calls block once for each attribute of the edge, passing the name and value to the
|
99
99
|
# block as a two-element array.
|
100
100
|
#
|
101
|
-
# If global is set to false, the block does not receive the
|
101
|
+
# If global is set to false, the block does not receive the attributes set globally
|
102
102
|
#
|
103
|
-
def
|
104
|
-
attrs = @
|
103
|
+
def each_attribute(global = true, &b)
|
104
|
+
attrs = @edge_attributes.to_h
|
105
105
|
if global
|
106
106
|
attrs = pg.edge.to_h.merge attrs
|
107
107
|
end
|
@@ -109,6 +109,10 @@ class GraphViz
|
|
109
109
|
yield(k,v)
|
110
110
|
end
|
111
111
|
end
|
112
|
+
def each_attribut(global = true, &b)
|
113
|
+
warn "`GraphViz::Edge#each_attribut` is deprecated, please use `GraphViz::Edge#each_attribute`"
|
114
|
+
each_attribute(global, &b)
|
115
|
+
end
|
112
116
|
|
113
117
|
def <<( node ) #:nodoc:
|
114
118
|
n = @parent_graph.get_node(@node_two_id)
|
@@ -130,7 +134,7 @@ class GraphViz
|
|
130
134
|
@parent_graph
|
131
135
|
end
|
132
136
|
|
133
|
-
# Set edge
|
137
|
+
# Set edge attributes
|
134
138
|
#
|
135
139
|
# Example :
|
136
140
|
# e = graph.add_edges( ... )
|
@@ -161,7 +165,7 @@ class GraphViz
|
|
161
165
|
xOut = self.node_one + xLink + self.node_two
|
162
166
|
xAttr = ""
|
163
167
|
xSeparator = ""
|
164
|
-
@
|
168
|
+
@edge_attributes.data.each do |k, v|
|
165
169
|
xAttr << xSeparator + k + " = " + v.to_gv
|
166
170
|
xSeparator = ", "
|
167
171
|
end
|
data/lib/graphviz/graphml.rb
CHANGED
@@ -20,7 +20,11 @@ require 'rexml/document'
|
|
20
20
|
|
21
21
|
class GraphViz
|
22
22
|
class GraphML
|
23
|
-
attr_reader :
|
23
|
+
attr_reader :attributes
|
24
|
+
def attributs
|
25
|
+
warn "`GraphViz::GraphML#attributs` is deprecated, please, use `GraphViz::GraphML#attributes`"
|
26
|
+
return @attributes
|
27
|
+
end
|
24
28
|
|
25
29
|
# The GraphViz object
|
26
30
|
attr_accessor :graph
|
@@ -41,7 +45,7 @@ class GraphViz
|
|
41
45
|
def initialize( file_or_str )
|
42
46
|
data = ((File.file?( file_or_str )) ? File::new(file_or_str) : file_or_str)
|
43
47
|
@xmlDoc = REXML::Document::new( data )
|
44
|
-
@
|
48
|
+
@attributes = {
|
45
49
|
:nodes => {},
|
46
50
|
:edges => {},
|
47
51
|
:graphs => {}
|
@@ -80,7 +84,7 @@ class GraphViz
|
|
80
84
|
:type => node.attributes['attr.type']
|
81
85
|
}
|
82
86
|
DEST[node.attributes['for']].each do |d|
|
83
|
-
@
|
87
|
+
@attributes[d][id] = @current_attr
|
84
88
|
end
|
85
89
|
|
86
90
|
node.each_element( ) do |child|
|
@@ -110,13 +114,13 @@ class GraphViz
|
|
110
114
|
@current_graph = previous_graph.add_graph( node.attributes['id'] )
|
111
115
|
end
|
112
116
|
|
113
|
-
@
|
117
|
+
@attributes[:graphs].each do |id, data|
|
114
118
|
@current_graph.graph[data[:name]] = data[:default] if data.has_key?(:default)
|
115
119
|
end
|
116
|
-
@
|
120
|
+
@attributes[:nodes].each do |id, data|
|
117
121
|
@current_graph.node[data[:name]] = data[:default] if data.has_key?(:default)
|
118
122
|
end
|
119
|
-
@
|
123
|
+
@attributes[:edges].each do |id, data|
|
120
124
|
@current_graph.edge[data[:name]] = data[:default] if data.has_key?(:default)
|
121
125
|
end
|
122
126
|
|
@@ -132,7 +136,7 @@ class GraphViz
|
|
132
136
|
end
|
133
137
|
|
134
138
|
def graphml_graph_data( node ) #:nodoc:
|
135
|
-
@current_graph[@
|
139
|
+
@current_graph[@attributes[:graphs][node.attributes['key']][:name]] = node.texts().to_s
|
136
140
|
end
|
137
141
|
|
138
142
|
def graphml_graph_node( node ) #:nodoc:
|
@@ -162,7 +166,8 @@ class GraphViz
|
|
162
166
|
end
|
163
167
|
|
164
168
|
def graphml_graph_node_data( node ) #:nodoc:
|
165
|
-
|
169
|
+
#@current_node[@attributes[:nodes][node.attributes['key']][:name]] = node.texts().to_s
|
170
|
+
@current_node[@attributes[:nodes][node.attributes['key']][:name]] = node.texts().join(sep='\n',)
|
166
171
|
end
|
167
172
|
|
168
173
|
def graphml_graph_node_port( node ) #:nodoc:
|
@@ -196,7 +201,7 @@ class GraphViz
|
|
196
201
|
end
|
197
202
|
|
198
203
|
def graphml_graph_edge_data( node ) #:nodoc:
|
199
|
-
@current_edge[@
|
204
|
+
@current_edge[@attributes[:edges][node.attributes['key']][:name]] = node.texts().to_s
|
200
205
|
end
|
201
206
|
|
202
207
|
def graphml_graph_hyperedge( node ) #:nodoc:
|
data/lib/graphviz/node.rb
CHANGED
@@ -35,7 +35,7 @@ class GraphViz
|
|
35
35
|
@incidents = []
|
36
36
|
@node_id = node_id
|
37
37
|
@parent_graph = parent_graph
|
38
|
-
@
|
38
|
+
@node_attributes = GraphViz::Attrs::new( nil, "node", NODESATTRS )
|
39
39
|
@index = nil
|
40
40
|
end
|
41
41
|
|
@@ -57,30 +57,30 @@ class GraphViz
|
|
57
57
|
return( (self.pg.nil?) ? nil : self.pg.root_graph )
|
58
58
|
end
|
59
59
|
|
60
|
-
# Set value +
|
61
|
-
def []=(
|
62
|
-
|
63
|
-
@
|
60
|
+
# Set value +attribute_value+ to the node attribute +attribute_name+
|
61
|
+
def []=( attribute_name, attribute_value )
|
62
|
+
attribute_value = attribute_value.to_s if attribute_value.class == Symbol
|
63
|
+
@node_attributes[attribute_name.to_s] = attribute_value
|
64
64
|
end
|
65
65
|
|
66
|
-
# Get the value of the node
|
67
|
-
def [](
|
68
|
-
if Hash ===
|
69
|
-
|
66
|
+
# Get the value of the node attribute +attribute_name+
|
67
|
+
def []( attribute_name )
|
68
|
+
if Hash === attribute_name
|
69
|
+
attribute_name.each do |key, value|
|
70
70
|
self[key] = value
|
71
71
|
end
|
72
72
|
return self
|
73
73
|
else
|
74
|
-
(@
|
74
|
+
(@node_attributes[attribute_name.to_s].nil?)?nil:@node_attributes[attribute_name.to_s].clone
|
75
75
|
end
|
76
76
|
end
|
77
77
|
|
78
|
-
# Calls block once for each
|
78
|
+
# Calls block once for each attribute of the node, passing the name and value to the
|
79
79
|
# block as a two-element array.
|
80
80
|
#
|
81
|
-
# If global is set to false, the block does not receive the
|
82
|
-
def
|
83
|
-
attrs = @
|
81
|
+
# If global is set to false, the block does not receive the attributes set globally
|
82
|
+
def each_attribute(global = true, &b)
|
83
|
+
attrs = @node_attributes.to_h
|
84
84
|
if global
|
85
85
|
attrs = pg.node.to_h.merge attrs
|
86
86
|
end
|
@@ -88,6 +88,10 @@ class GraphViz
|
|
88
88
|
yield(k,v)
|
89
89
|
end
|
90
90
|
end
|
91
|
+
def each_attribut(global = true, &b)
|
92
|
+
warn "`GraphViz::Node#each_attribut` is deprecated, please use `GraphViz::Node#each_attribute`"
|
93
|
+
each_attribute(global, &b)
|
94
|
+
end
|
91
95
|
|
92
96
|
# Create an edge between the current node and the node +node+
|
93
97
|
def <<( node )
|
@@ -103,7 +107,7 @@ class GraphViz
|
|
103
107
|
alias :- :<<
|
104
108
|
alias :>> :<<
|
105
109
|
|
106
|
-
# Set node
|
110
|
+
# Set node attributes
|
107
111
|
#
|
108
112
|
# Example :
|
109
113
|
# n = graph.add_nodes( ... )
|
@@ -138,10 +142,10 @@ class GraphViz
|
|
138
142
|
xAttr = ""
|
139
143
|
xSeparator = ""
|
140
144
|
|
141
|
-
if @
|
142
|
-
@
|
145
|
+
if @node_attributes.data.has_key?("label") and @node_attributes.data.has_key?("html")
|
146
|
+
@node_attributes.data.delete("label")
|
143
147
|
end
|
144
|
-
@
|
148
|
+
@node_attributes.data.each do |k, v|
|
145
149
|
xAttr << xSeparator + k + " = " + v.to_gv
|
146
150
|
xSeparator = ", "
|
147
151
|
end
|
data/lib/graphviz/types/color.rb
CHANGED