ruby-graphviz 1.0.9 → 1.1.0
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.
- checksums.yaml +4 -4
- data/.travis.yml +3 -2
- data/AUTHORS.rdoc +5 -1
- data/CHANGELOG.rdoc +10 -0
- data/README.rdoc +2 -1
- data/Rakefile +32 -24
- data/examples/sample70.rb +9 -0
- data/examples/sample71.rb +21 -0
- data/examples/sample72.rb +22 -0
- data/lib/ext/gvpr/dot2ruby.g +80 -62
- data/lib/graphviz.rb +51 -40
- data/lib/graphviz/attrs.rb +1 -1
- data/lib/graphviz/constants.rb +1 -1
- data/lib/graphviz/dot2ruby.rb +5 -2
- data/lib/graphviz/edge.rb +181 -176
- data/lib/graphviz/node.rb +6 -1
- data/lib/graphviz/theory.rb +7 -7
- data/lib/graphviz/utils.rb +6 -22
- data/ruby-graphviz.gemspec +1 -5
- data/test/helper.rb +13 -0
- data/test/test_dot_script.rb +45 -41
- data/test/test_examples.rb +20 -30
- data/test/test_graph.rb +14 -3
- data/test/test_search.rb +1 -4
- data/test/test_subgraph.rb +14 -3
- data/test/test_theory.rb +15 -5
- data/test/test_types.rb +1 -3
- data/test/test_utils_colors.rb +1 -3
- metadata +26 -53
- data/test/support.rb +0 -105
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b41b2ddc156dd0ea02af2fdc5914e9494e61a4e0
|
4
|
+
data.tar.gz: a10df946f3a81fb23d44dafe6b3d89c46dc64cad
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 343df04cb63e2694e04ae3c6cb1343207aa13f6e4b7abdbd6f394613045bb04aa508050903179c757eeec9699dd3034dddfe0305a0e2d2ee0244454586593b2e
|
7
|
+
data.tar.gz: 3f9eb3928166fc170e924a6c302d2baf1c685930431700f3bf792fd1d51712c5ba85f8f7f33fa13a533a77629279f4fea270ee9dda6318f81f4d83a18a243a8b
|
data/.travis.yml
CHANGED
data/AUTHORS.rdoc
CHANGED
@@ -19,8 +19,12 @@
|
|
19
19
|
* coding64 <https://github.com/coding46>
|
20
20
|
* Neven Has <https://github.com/nevenh>
|
21
21
|
* Postmodern <https://github.com/postmodern>
|
22
|
-
* markus1189 <https://github.com/markus1189>
|
23
22
|
* Mike Fiedler <https://github.com/miketheman>
|
23
|
+
* Kenichi Kamiya <https://github.com/kachick>
|
24
|
+
* Gabe Kopley <https://github.com/gkop>
|
25
|
+
* markus1189 <https://github.com/markus1189>
|
26
|
+
* Praveen Arimbrathodiyil <https://github.com/pravi>
|
27
|
+
* Andrew <https://github.com/AndrewKvalheim>
|
24
28
|
|
25
29
|
Thanks to :
|
26
30
|
|
data/CHANGELOG.rdoc
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
= CHANGELOG
|
2
2
|
|
3
|
+
== 1.1.0 :
|
4
|
+
* Issue #61 : Combine graphviz instances
|
5
|
+
* Issue #73 : Avoid constructing shell commands as strings
|
6
|
+
* Bug correction with development dependencies on JRuby
|
7
|
+
|
3
8
|
== 1.0.9 :
|
4
9
|
* Add support for attributs
|
5
10
|
* forcelabels
|
@@ -10,6 +15,11 @@
|
|
10
15
|
* Issue #52 : Extracted xDOTScript to DOTScript class (by markus1189)
|
11
16
|
* Issue #54 : Fixes a couple of typos and spacing (by Mike Fiedler)
|
12
17
|
* Issue #55 : Avoid autoload
|
18
|
+
* Issue #57 : Add man pages for the commandline programs (by Praveen Arimbrathodiyil)
|
19
|
+
* Issue #59 : Support label as Fixnum (by Gabe Kopley)
|
20
|
+
* Issue #62 : Remove warnings (by Kenichi Kamiya)
|
21
|
+
* Issue #63 : Fix typo (by Kenichi Kamiya)
|
22
|
+
* Issue #65 : ruby-graphviz breaks autoloading of ActiveSupport::Concerns
|
13
23
|
* Update graphviz attributs
|
14
24
|
|
15
25
|
== 1.0.8 :
|
data/README.rdoc
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
= Ruby/GraphViz
|
2
2
|
|
3
3
|
{<img src="https://secure.travis-ci.org/glejeune/Ruby-Graphviz.png" />}[http://travis-ci.org/glejeune/Ruby-Graphviz]
|
4
|
+
{<img src="https://badge.fury.io/rb/ruby-graphviz.png" alt="Gem Version" />}[http://badge.fury.io/rb/ruby-graphviz]
|
4
5
|
|
5
|
-
Copyright (C) 2004-
|
6
|
+
Copyright (C) 2004-2013 Gregoire Lejeune
|
6
7
|
|
7
8
|
* Doc : http://rdoc.info/projects/glejeune/Ruby-Graphviz
|
8
9
|
* Sources : http://github.com/glejeune/Ruby-Graphviz
|
data/Rakefile
CHANGED
@@ -13,9 +13,9 @@ include FileUtils
|
|
13
13
|
|
14
14
|
CLEAN.include ['**/.*.sw?', '*.gem', '.config', 'test/test.log']
|
15
15
|
RDOC_OPTS = ['--quiet', '--title', "Ruby/GraphViz, the Documentation",
|
16
|
-
|
17
|
-
|
18
|
-
|
16
|
+
"--opname", "index.html",
|
17
|
+
"--line-numbers",
|
18
|
+
"--main", "README.rdoc"]
|
19
19
|
|
20
20
|
desc "Packages up Ruby/GraphViz."
|
21
21
|
task :default => [:test, :package]
|
@@ -24,38 +24,46 @@ task :package => [:clean]
|
|
24
24
|
task :doc => :rdoc
|
25
25
|
|
26
26
|
RDoc::Task.new do |rdoc|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
27
|
+
rdoc.rdoc_dir = 'doc/rdoc'
|
28
|
+
rdoc.options += RDOC_OPTS
|
29
|
+
rdoc.main = "README.rdoc"
|
30
|
+
rdoc.title = "Ruby/GraphViz, the Documentation"
|
31
|
+
rdoc.rdoc_files.add ['README.rdoc', 'CHANGELOG.rdoc', 'AUTHORS.rdoc', 'COPYING.rdoc',
|
32
|
+
'lib/graphviz.rb',
|
33
|
+
'lib/graphviz/node.rb',
|
34
|
+
'lib/graphviz/edge.rb',
|
35
|
+
'lib/graphviz/constants.rb',
|
36
|
+
'lib/graphviz/xml.rb',
|
37
|
+
'lib/graphviz/graphml.rb',
|
38
|
+
'lib/graphviz/family_tree.rb',
|
39
|
+
'lib/graphviz/family_tree/couple.rb',
|
40
|
+
'lib/graphviz/family_tree/generation.rb',
|
41
|
+
'lib/graphviz/family_tree/person.rb',
|
42
|
+
'lib/graphviz/family_tree/sibling.rb']
|
43
43
|
end
|
44
44
|
|
45
45
|
Rake::TestTask.new(:test) do |t|
|
46
|
+
t.libs << 'lib' << 'test'
|
47
|
+
t.verbose = true
|
48
|
+
|
46
49
|
require 'graphviz/utils'
|
47
50
|
include GraphViz::Utils
|
48
|
-
test_files = FileList['test/test_*.rb']
|
49
|
-
test_files.unshift('test/test_dot_script.rb')
|
51
|
+
test_files = FileList['test/test_*.rb']
|
50
52
|
test_files.exclude("test/test_examples.rb") unless find_executable("dot", nil)
|
53
|
+
|
54
|
+
p test_files
|
51
55
|
t.test_files = test_files
|
52
56
|
end
|
53
57
|
|
54
58
|
desc "Generate man pages"
|
55
59
|
task :man do
|
56
|
-
|
57
|
-
|
58
|
-
|
60
|
+
unless RUBY_PLATFORM == 'java'
|
61
|
+
require 'ronn'
|
62
|
+
chdir 'man' do
|
63
|
+
sh "ronn -r *.ronn"
|
64
|
+
end
|
65
|
+
else
|
66
|
+
puts "Can't generate man pages with JRuby"
|
59
67
|
end
|
60
68
|
end
|
61
69
|
|
@@ -0,0 +1,9 @@
|
|
1
|
+
$:.unshift( "../lib" )
|
2
|
+
require 'graphviz'
|
3
|
+
|
4
|
+
puts GraphViz.graph( :G ) { |g|
|
5
|
+
g[:label] = "<<b>This</b> is <i>a</i> <b>test</b>>"
|
6
|
+
n1 = g.add_nodes( "N1", :label => '<<b>node 1</b>>')
|
7
|
+
n2 = g.add_nodes( "N2", :label => '<<b>node 2</b>>')
|
8
|
+
g.add_edges( n1, n2, :label => '<<u>edge</u>>')
|
9
|
+
}.output( :svg => "#{$0}.svg", :none => String )
|
@@ -0,0 +1,21 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
$:.unshift( "../lib" )
|
4
|
+
require "graphviz"
|
5
|
+
|
6
|
+
g = nil
|
7
|
+
if ARGV[0]
|
8
|
+
g = GraphViz::new( "G", :path => ARGV[0] )
|
9
|
+
else
|
10
|
+
g = GraphViz::new( "G" )
|
11
|
+
end
|
12
|
+
|
13
|
+
g.add_edges("noDe", "graph")
|
14
|
+
g.add_edges("node", "graph")
|
15
|
+
g.add_edges("node", "Graph")
|
16
|
+
g.add_edges("graph", "subgraph")
|
17
|
+
g.add_edges("edge", "node")
|
18
|
+
g.add_edges("subgraph", "digraph")
|
19
|
+
g.add_edges("subgraph", "strict")
|
20
|
+
|
21
|
+
g.output( :png => "#{$0}.png" )
|
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
$:.unshift( "../lib" )
|
4
|
+
require "graphviz"
|
5
|
+
|
6
|
+
g = nil
|
7
|
+
if ARGV[0]
|
8
|
+
g = GraphViz::new( "G", :path => ARGV[0] )
|
9
|
+
else
|
10
|
+
g = GraphViz::new( "G" )
|
11
|
+
end
|
12
|
+
|
13
|
+
g.node[:color] = "#FF0000:#FFFFFF"
|
14
|
+
g.add_edges("noDe", "graph")
|
15
|
+
g.add_edges("node", "graph")
|
16
|
+
g.add_edges("node", "Graph")
|
17
|
+
g.add_edges("graph", "subgraph")
|
18
|
+
g.add_edges("edge", "node")
|
19
|
+
g.add_edges("subgraph", "digraph")
|
20
|
+
g.add_edges("subgraph", "strict")
|
21
|
+
|
22
|
+
g.output( :png => "#{$0}.png" )
|
data/lib/ext/gvpr/dot2ruby.g
CHANGED
@@ -25,6 +25,8 @@ BEGIN {
|
|
25
25
|
string attr; string attrv;
|
26
26
|
graph_t subgraph; graph_t pgraph;
|
27
27
|
graph_t ofgraph;
|
28
|
+
graph_t sub_graph;
|
29
|
+
graph_t tmp_g;
|
28
30
|
|
29
31
|
string xOut;
|
30
32
|
if( ARGC == 0 ) {
|
@@ -49,6 +51,55 @@ BEGIN {
|
|
49
51
|
sout = gsub(sout, "$", "\\$");
|
50
52
|
return( sout );
|
51
53
|
}
|
54
|
+
|
55
|
+
void load_sub_graph( graph_t p ) {
|
56
|
+
if(p == NULL) {
|
57
|
+
return;
|
58
|
+
}
|
59
|
+
sub_graph = fstsubg(p);
|
60
|
+
while( sub_graph != NULL ) {
|
61
|
+
pgraph = sub_graph.parent;
|
62
|
+
printf ( " graph_%s = graph_%s.add_graph( \"%s\" )\n", rubyfy(sub_graph.name), rubyfy(pgraph.name), rubyfy(sub_graph.name) );
|
63
|
+
|
64
|
+
// ATTRS
|
65
|
+
attr = fstAttr(sub_graph, "G");
|
66
|
+
while( attr != "" ) {
|
67
|
+
attrv = aget( sub_graph, attr );
|
68
|
+
if( attrv != "" ) {
|
69
|
+
printf( " graph_%s[:%s] = '%s'\n", rubyfy(sub_graph.name), attr, attrv );
|
70
|
+
}
|
71
|
+
attr = nxtAttr( sub_graph, "G", attr );
|
72
|
+
}
|
73
|
+
tmp_g = sub_graph;
|
74
|
+
load_sub_graph(sub_graph);
|
75
|
+
sub_graph = nxtsubg( tmp_g );
|
76
|
+
|
77
|
+
}
|
78
|
+
}
|
79
|
+
|
80
|
+
graph_t get_node_graph(node_t n, graph_t p) {
|
81
|
+
sub_graph = fstsubg(p);
|
82
|
+
while( sub_graph != NULL ) {
|
83
|
+
if( isSubnode( sub_graph, n) != 0 ) {
|
84
|
+
return get_node_graph(n, sub_graph);
|
85
|
+
}
|
86
|
+
sub_graph = nxtsubg( sub_graph );
|
87
|
+
}
|
88
|
+
return p;
|
89
|
+
}
|
90
|
+
|
91
|
+
graph_t get_edge_graph(edge_t e, graph_t p) {
|
92
|
+
sub_graph = fstsubg(p);
|
93
|
+
while( sub_graph != NULL ) {
|
94
|
+
if( isSubedge( sub_graph, e) != 0 ) {
|
95
|
+
return get_edge_graph(e, sub_graph);
|
96
|
+
}
|
97
|
+
sub_graph = nxtsubg( sub_graph );
|
98
|
+
}
|
99
|
+
return p;
|
100
|
+
}
|
101
|
+
|
102
|
+
|
52
103
|
}
|
53
104
|
|
54
105
|
BEG_G {
|
@@ -77,83 +128,50 @@ BEG_G {
|
|
77
128
|
attr = nxtAttr( $, "G", attr );
|
78
129
|
}
|
79
130
|
|
80
|
-
|
81
|
-
subgraph = fstsubg( $ );
|
82
|
-
while( subgraph != NULL ) {
|
83
|
-
pgraph = subgraph.parent;
|
84
|
-
printf ( " graph_%s = graph_%s.add_graph( \"%s\" )\n", rubyfy(subgraph.name), rubyfy(pgraph.name), rubyfy(subgraph.name) );
|
85
|
-
|
86
|
-
// ATTRS
|
87
|
-
attr = fstAttr(subgraph, "G");
|
88
|
-
while( attr != "" ) {
|
89
|
-
attrv = aget( subgraph, attr );
|
90
|
-
if( attrv != "" ) {
|
91
|
-
printf( " graph_%s[:%s] = '%s'\n", rubyfy(subgraph.name), attr, attrv );
|
92
|
-
}
|
93
|
-
attr = nxtAttr( subgraph, "G", attr );
|
94
|
-
}
|
95
|
-
|
96
|
-
subgraph = nxtsubg( subgraph );
|
97
|
-
}
|
131
|
+
load_sub_graph($);
|
98
132
|
}
|
99
133
|
|
100
134
|
N {
|
101
135
|
pgraph = $.root;
|
102
|
-
ofgraph = pgraph;
|
103
|
-
|
104
|
-
subgraph = fstsubg( pgraph );
|
105
|
-
while( subgraph != NULL ) {
|
106
|
-
if( isSubnode( subgraph, $ ) != 0 ) {
|
107
|
-
ofgraph = subgraph;
|
108
|
-
}
|
109
|
-
subgraph = nxtsubg( subgraph );
|
110
|
-
}
|
136
|
+
ofgraph = get_node_graph($, pgraph);
|
111
137
|
|
112
138
|
printf( " node_%s = graph_%s.add_nodes( \"%s\"", rubyfy($.name), rubyfy(ofgraph.name), stringify($.name) );
|
113
139
|
|
114
140
|
// Attributs of N
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
141
|
+
attr = fstAttr($G, "N");
|
142
|
+
while( attr != "" ) {
|
143
|
+
attrv = aget( $, attr );
|
144
|
+
if( attrv != "" ) {
|
145
|
+
printf( ", :%s => '%s'", attr, gsub( attrv, "'", "\\'" ) );
|
146
|
+
} else {
|
147
|
+
printf( ", :%s => ''", attr );
|
148
|
+
}
|
149
|
+
attr = nxtAttr( $G, "N", attr );
|
122
150
|
}
|
123
|
-
|
151
|
+
|
152
|
+
printf( " )\n");
|
124
153
|
}
|
125
|
-
|
126
|
-
printf( " )\n");
|
127
|
-
}
|
128
154
|
|
129
155
|
E {
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
subgraph = fstsubg( pgraph );
|
134
|
-
while( subgraph != NULL ) {
|
135
|
-
if( isSubedge( subgraph, $ ) != 0 ) {
|
136
|
-
ofgraph = subgraph;
|
137
|
-
}
|
138
|
-
subgraph = nxtsubg( subgraph );
|
139
|
-
}
|
156
|
+
pgraph = $.root;
|
157
|
+
ofgraph = get_edge_graph($, $.root);
|
140
158
|
|
141
159
|
printf( " graph_%s.add_edges( \"%s\", \"%s\"", rubyfy(ofgraph.name), stringify($.tail.name), stringify($.head.name) );
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
160
|
+
|
161
|
+
// Attributs of E
|
162
|
+
attr = fstAttr($G, "E");
|
163
|
+
while( attr != "" ) {
|
164
|
+
attrv = aget( $, attr );
|
165
|
+
if( attrv != "" ) {
|
166
|
+
printf( ", :%s => '%s'", attr, gsub( attrv, "'", "\\'" ) );
|
167
|
+
} else {
|
168
|
+
printf( ", :%s => ''", attr );
|
169
|
+
}
|
170
|
+
attr = nxtAttr( $G, "E", attr );
|
151
171
|
}
|
152
|
-
|
172
|
+
|
173
|
+
printf( " )\n" );
|
153
174
|
}
|
154
|
-
|
155
|
-
printf( " )\n" );
|
156
|
-
}
|
157
175
|
|
158
176
|
END_G {
|
159
177
|
printf( "}\n" );
|
@@ -161,7 +179,7 @@ END_G {
|
|
161
179
|
if( xOut == "-" ) {
|
162
180
|
printf( "@_graph_eval = graph_%s\n", rubyfy($.name) );
|
163
181
|
} else {
|
164
|
-
|
182
|
+
printf( "graph_%s.output( :%s => \"%s.%s\" )\n", rubyfy($.name), xOut, gsub($F, ".*/", ""), xOut );
|
165
183
|
}
|
166
184
|
}
|
167
185
|
}
|
data/lib/graphviz.rb
CHANGED
@@ -82,6 +82,7 @@ class GraphViz
|
|
82
82
|
attr_accessor :edge
|
83
83
|
alias_method :edge_attrs, :edge
|
84
84
|
|
85
|
+
|
85
86
|
@elements_order = nil
|
86
87
|
|
87
88
|
def add_node( xNodeName, hOpts = {} )
|
@@ -390,7 +391,12 @@ class GraphViz
|
|
390
391
|
self[key] = value
|
391
392
|
end
|
392
393
|
else
|
393
|
-
|
394
|
+
attr = @graph[xAttrName]
|
395
|
+
if attr.nil?
|
396
|
+
return nil
|
397
|
+
else
|
398
|
+
return( @graph[xAttrName].clone )
|
399
|
+
end
|
394
400
|
end
|
395
401
|
end
|
396
402
|
|
@@ -408,6 +414,13 @@ class GraphViz
|
|
408
414
|
each_attribute(&b)
|
409
415
|
end
|
410
416
|
|
417
|
+
# Create a new graph from the current subgraph
|
418
|
+
def to_graph
|
419
|
+
graph = self.clone
|
420
|
+
graph.pg = nil
|
421
|
+
return graph
|
422
|
+
end
|
423
|
+
|
411
424
|
#
|
412
425
|
# Generate the graph
|
413
426
|
#
|
@@ -531,61 +544,59 @@ class GraphViz
|
|
531
544
|
raise StandardError, "GraphViz not installed or #{@prog} not in PATH. Install GraphViz or use the 'path' option"
|
532
545
|
end
|
533
546
|
|
534
|
-
|
535
|
-
|
536
|
-
xOutputWithFile = ""
|
537
|
-
xOutputWithoutFile = ""
|
547
|
+
xOutputWithFile = []
|
548
|
+
xOutputWithoutFile = []
|
538
549
|
unless @format.nil? or @format == "none"
|
539
550
|
lNotHugly << @filename if @format.to_s == "svg" and @nothugly
|
540
551
|
if @filename.nil? or @filename == String
|
541
|
-
xOutputWithoutFile = "-T#{@format}
|
552
|
+
xOutputWithoutFile = ["-T#{@format}"]
|
542
553
|
else
|
543
|
-
xOutputWithFile = "-T#{@format} -o#{@filename}
|
554
|
+
xOutputWithFile = ["-T#{@format}", "-o#{@filename}"]
|
544
555
|
end
|
545
556
|
end
|
546
557
|
@output.each_except( :key => ["none"] ) do |format, file|
|
547
558
|
lNotHugly << file if format.to_s == "svg" and @nothugly
|
548
559
|
if file.nil? or file == String
|
549
|
-
xOutputWithoutFile
|
560
|
+
xOutputWithoutFile += ["-T#{format}"]
|
550
561
|
else
|
551
|
-
xOutputWithFile
|
562
|
+
xOutputWithFile += ["-T#{format}", "-o#{file}"]
|
552
563
|
end
|
553
564
|
end
|
554
565
|
|
555
|
-
xExternalLibraries = ""
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
|
560
|
-
xOtherOptions
|
561
|
-
xOtherOptions
|
562
|
-
xOtherOptions
|
563
|
-
|
564
|
-
|
565
|
-
|
566
|
-
|
567
|
-
xOtherOptions
|
568
|
-
|
569
|
-
|
570
|
-
|
571
|
-
xOtherOptions += " -LU#{@LU}" unless @LU.nil?
|
572
|
-
xOtherOptions += " -LC#{@LC}" unless @LC.nil?
|
573
|
-
xOtherOptions += " -LT#{@LT}" unless @LT.nil?
|
574
|
-
|
575
|
-
if IS_JRUBY
|
576
|
-
xCmd = "#{cmd} -q#{@errors} #{xExternalLibraries} #{xOtherOptions} #{xOutputWithFile} #{xOutputWithoutFile} #{t.path}"
|
566
|
+
xExternalLibraries = @extlibs.map { |lib| "-l#{lib}" }
|
567
|
+
|
568
|
+
xOtherOptions = []
|
569
|
+
xOtherOptions << "-s#{@scale}" if @scale
|
570
|
+
xOtherOptions << "-y" if @inverty
|
571
|
+
xOtherOptions << "-n#{@no_layout}" if @no_layout
|
572
|
+
xOtherOptions << "-x" if @reduce_graph
|
573
|
+
xOtherOptions << "-Lg" if @Lg
|
574
|
+
xOtherOptions << "-LO" if @LO
|
575
|
+
xOtherOptions << "-Ln#{@Ln}" if @Ln
|
576
|
+
xOtherOptions << "-LU#{@LU}" if @LU
|
577
|
+
xOtherOptions << "-LC#{@LC}" if @LC
|
578
|
+
xOtherOptions << "-LT#{@LT}" if @LT
|
579
|
+
|
580
|
+
tmpPath = if IS_JRUBY
|
581
|
+
t.path
|
577
582
|
elsif IS_CYGWIN
|
578
|
-
tmpPath = t.path
|
579
583
|
begin
|
580
|
-
|
584
|
+
IO.popen("cygpath", "-w", t.path).chomp
|
581
585
|
rescue
|
582
586
|
warn "cygpath is not installed!"
|
587
|
+
t.path
|
583
588
|
end
|
584
|
-
xCmd = "\"#{cmd}\" -q#{@errors} #{xExternalLibraries} #{xOtherOptions} #{xOutputWithFile} #{xOutputWithoutFile} #{tmpPath}"
|
585
589
|
else
|
586
|
-
|
590
|
+
t.path
|
587
591
|
end
|
588
592
|
|
593
|
+
xCmd = [cmd, "-q#{@errors}"] +
|
594
|
+
xExternalLibraries +
|
595
|
+
xOtherOptions +
|
596
|
+
xOutputWithFile +
|
597
|
+
xOutputWithoutFile +
|
598
|
+
[tmpPath]
|
599
|
+
|
589
600
|
xOutput << output_from_command( xCmd )
|
590
601
|
end
|
591
602
|
|
@@ -613,9 +624,7 @@ class GraphViz
|
|
613
624
|
@elements_order.each { |kElement|
|
614
625
|
is_new_type = script_data.type != kElement["type"]
|
615
626
|
if is_new_type
|
616
|
-
unless script_data.type.nil? or script_data.empty?
|
617
|
-
script << script_data
|
618
|
-
end
|
627
|
+
script << script_data unless script_data.type.nil? or script_data.empty?
|
619
628
|
script_data = DOTScriptData.new(kElement["type"])
|
620
629
|
end
|
621
630
|
|
@@ -634,6 +643,7 @@ class GraphViz
|
|
634
643
|
"Don't know what to do with element type '#{kElement['type']}'"
|
635
644
|
end
|
636
645
|
}
|
646
|
+
script << script_data unless script_data.type.nil? or script_data.empty?
|
637
647
|
end
|
638
648
|
|
639
649
|
def to_s
|
@@ -773,7 +783,7 @@ class GraphViz
|
|
773
783
|
end
|
774
784
|
|
775
785
|
def has_parent_graph?
|
776
|
-
@oParentGraph
|
786
|
+
not @oParentGraph.nil?
|
777
787
|
end
|
778
788
|
## ----------------------------------------------------------------------------
|
779
789
|
|
@@ -947,7 +957,8 @@ class GraphViz
|
|
947
957
|
:unquote_empty => false,
|
948
958
|
}.merge(opts)
|
949
959
|
|
950
|
-
|
960
|
+
reserved_words = %w{node edge graph digraph subgraph strict}
|
961
|
+
if (options[:force] or str.match( /\A[a-zA-Z_]+[a-zA-Z0-9_]*\Z/ ).nil? or reserved_words.include?(str.downcase))
|
951
962
|
unless options[:unquote_empty] and str.size == 0
|
952
963
|
'"' + str.gsub('"', '\\"').gsub("\n", '\\\\n') + '"'
|
953
964
|
end
|