ruby-graphviz 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. data/.gemrc +0 -0
  2. data/.gitignore +6 -0
  3. data/AUTHORS +3 -0
  4. data/Gemfile +4 -0
  5. data/README.rdoc +25 -45
  6. data/Rakefile +59 -0
  7. data/bin/dot2ruby +0 -0
  8. data/bin/gem2gv +0 -0
  9. data/bin/git2gv +0 -0
  10. data/bin/ruby2gv +0 -0
  11. data/bin/xml2gv +0 -0
  12. data/examples/sample48.rb +2 -2
  13. data/examples/sample62.rb +24 -0
  14. data/examples/sample63.rb +32 -0
  15. data/examples/sample64.rb +31 -0
  16. data/examples/sample65.rb +9 -0
  17. data/lib/graphviz.rb +55 -25
  18. data/lib/graphviz/constants.rb +103 -100
  19. data/lib/graphviz/core_ext.rb +57 -34
  20. data/lib/graphviz/dot2ruby.rb +9 -0
  21. data/lib/graphviz/dsl.rb +59 -0
  22. data/lib/graphviz/node.rb +2 -1
  23. data/lib/graphviz/types.rb +0 -4
  24. data/lib/graphviz/types/arrow_type.rb +32 -0
  25. data/lib/graphviz/types/color.rb +56 -0
  26. data/lib/graphviz/types/color_list.rb +22 -0
  27. data/lib/graphviz/types/esc_string.rb +5 -14
  28. data/lib/graphviz/types/gv_bool.rb +49 -0
  29. data/lib/graphviz/types/gv_double.rb +12 -2
  30. data/lib/graphviz/types/html_string.rb +3 -1
  31. data/lib/graphviz/types/lbl_string.rb +2 -1
  32. data/lib/graphviz/types/rect.rb +34 -0
  33. data/lib/graphviz/types/spline_type.rb +75 -0
  34. data/lib/graphviz/utils.rb +2 -2
  35. data/lib/graphviz/utils/colors.rb +1019 -0
  36. data/ruby-graphviz.gemspec +57 -0
  37. data/test/test_examples.rb +4 -0
  38. data/test/{test_init.rb → test_graph.rb} +1 -1
  39. data/test/test_types.rb +65 -0
  40. data/test/test_utils_colors.rb +57 -0
  41. metadata +100 -112
  42. data/examples/rgv/rgv.ps +0 -125
  43. data/examples/rgv/test_rgv.rb +0 -12
  44. data/examples/rgv/test_rgv.rb.ps +0 -393
  45. data/examples/simpsons.gv +0 -69
  46. data/test/output/sample01.rb.png +0 -0
  47. data/test/output/sample02.rb.png +0 -0
  48. data/test/output/sample03.rb.png +0 -0
  49. data/test/output/sample04.rb.png +0 -0
  50. data/test/output/sample05.rb.png +0 -0
  51. data/test/output/sample06.rb.png +0 -0
  52. data/test/output/sample07.rb.png +0 -0
  53. data/test/output/sample08.rb.png +0 -0
  54. data/test/output/sample09.rb.png +0 -0
  55. data/test/output/sample10.rb.png +0 -0
  56. data/test/output/sample11.rb.png +0 -0
  57. data/test/output/sample12.rb.png +0 -0
  58. data/test/output/sample13.rb.png +0 -0
  59. data/test/output/sample14.rb.png +0 -0
  60. data/test/output/sample15.rb.png +0 -0
  61. data/test/output/sample16.rb.png +0 -0
  62. data/test/output/sample17.rb.png +0 -0
  63. data/test/output/sample18.rb.png +0 -0
  64. data/test/output/sample19.rb.png +0 -0
  65. data/test/output/sample20.rb.png +0 -0
  66. data/test/output/sample21.rb.html +0 -3
  67. data/test/output/sample21.rb.png +0 -0
  68. data/test/output/sample22.rb.html +0 -5
  69. data/test/output/sample22.rb.png +0 -0
  70. data/test/output/sample23.rb.png +0 -0
  71. data/test/output/sample24.rb.png +0 -0
  72. data/test/output/sample25.rb.png +0 -0
  73. data/test/output/sample26.rb.png +0 -0
  74. data/test/output/sample28.rb.png +0 -0
  75. data/test/output/sample29.rb.svg +0 -21
  76. data/test/output/sample30.rb.ps +0 -923
  77. data/test/output/sample31.rb.png +0 -0
  78. data/test/output/sample32.rb.png +0 -0
  79. data/test/output/sample35.rb.gv +0 -24
  80. data/test/output/sample35.rb.png +0 -0
  81. data/test/output/sample37.rb.dot +0 -50
  82. data/test/output/sample37.rb.png +0 -0
  83. data/test/output/sample38.rb.png +0 -0
  84. data/test/output/sample39.rb.png +0 -0
  85. data/test/output/sample40.rb.png +0 -0
  86. data/test/output/sample41.rb.svg +0 -8
  87. data/test/output/sample42.rb.png +0 -0
  88. data/test/output/sample43.rb.png +0 -0
  89. data/test/output/sample44.rb.png +0 -0
  90. data/test/output/sample45.rb.png +0 -0
  91. data/test/output/sample46.rb.png +0 -0
  92. data/test/output/sample47.rb.png +0 -0
  93. data/test/output/sample48.rb.png +0 -0
  94. data/test/output/sample49.rb.png +0 -0
  95. data/test/output/sample50.rb.png +0 -0
  96. data/test/output/sample51.rb.png +0 -0
  97. data/test/output/sample52.rb.png +0 -0
  98. data/test/output/sample53.rb.png +0 -0
  99. data/test/output/sample54.rb.png +0 -0
  100. data/test/output/sample55.rb.png +0 -0
  101. data/test/output/sample56.rb.svg +0 -28
  102. data/test/output/sample58.rb.png +0 -0
  103. data/test/output/sample59.rb.png +0 -0
  104. data/test/output/sample60.rb.png +0 -0
  105. data/test/output/sample61.rb.png +0 -0
  106. data/test/output/sample99.rb.png +0 -0
data/.gemrc ADDED
File without changes
@@ -0,0 +1,6 @@
1
+ .DS_Store
2
+ .idea
3
+ *.iml
4
+ doc
5
+ pkg
6
+ test/output/
data/AUTHORS CHANGED
@@ -12,6 +12,9 @@ Nigel Thorne <http://github.com/NigelThorne>
12
12
  Rolf Timmermans <http://github.com/rolftimmermans>
13
13
  Jonas Elfström <http://github.com/jonelf>
14
14
  oupo <http://github.com/oupo>
15
+ Daniel Zollinger <https://github.com/dznz>
16
+ Ronen Barzel <https://github.com/ronen>
17
+ Jamison Dance <https://github.com/jergason>
15
18
 
16
19
  Thanks to :
17
20
 
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in ruby-graphviz.gemspec
4
+ gemspec
@@ -14,21 +14,19 @@ Interface to the GraphViz graphing tool
14
14
 
15
15
  * New FamilyTree
16
16
 
17
- == WARNING
18
-
19
- <b>We are close to the 1.0 version... So if you use one of the following method or attribut, please update your code because they will be remove.</b>
20
-
21
- * GraphViz::Node#name must be replaced by GraphViz::Node#id
22
- * The html attribut must be replaced by a label attribut (<tt>:label => '<<html/>>'</tt>)
23
- * :output option must be replaced by :<format> => :<file>
24
- * :file option must be replaced by :<format> => :<file>
25
-
26
17
  == CHANGELOG
27
18
 
19
+ === 1.0.1 :
20
+ * Add GraphViz::DSL
21
+ * Change project to use Bundler gem tools
22
+ * Fix a few typos in the README
23
+ * Change Config to RbConfig
24
+ * Add possibility to get the x,y coordinates of each of the nodes
25
+
28
26
  === 1.0.0 :
29
27
  * \o/
30
28
  * GraphViz::Node#name has been removed - use GraphViz::Node#id
31
- * The html attribut has been removed - use a label attribut (<tt>:label => '<<html/>>'</tt>)
29
+ * The html attribute has been removed - use a label attribut (<tt>:label => '<<html/>>'</tt>)
32
30
  * :output option has been removed - use :<format> => :<file>
33
31
  * :file option has been removed - use :<format> => :<file>
34
32
  * Add GraphViz#to_s
@@ -37,7 +35,7 @@ Interface to the GraphViz graphing tool
37
35
  * Issue #22 : Error when generating a graph with an ID containing a space.
38
36
 
39
37
  === 0.9.21 :
40
- * Add attributs "label_scheme" and "rotation"
38
+ * Add attributes "label_scheme" and "rotation"
41
39
  * Add missing options :
42
40
  * <tt>:scale => v</tt> : Scale input by 'v' (=72)
43
41
  * <tt>:inverty => [true|false]</tt> : Invert y coordinate in output
@@ -263,6 +261,15 @@ The same but with a block
263
261
  g.world( :label => "World" ) << g.hello( :label => "Hello" )
264
262
  }.output( :png => "hello_world.png" )
265
263
 
264
+ Or with the DSL
265
+
266
+ require 'graphviz/dsl'
267
+ digraph :G do
268
+ world[:label => "World"] << hello[:label => "Hello"]
269
+
270
+ output :png => "hello_world.png"
271
+ end
272
+
266
273
  Create a graph from a file
267
274
 
268
275
  require 'graphviz'
@@ -286,47 +293,20 @@ GraphML[http://graphml.graphdrawing.org/] support
286
293
  g = GraphViz::GraphML.new( "graphml/cluster.graphml" )
287
294
  g.graph.output( :path => "/usr/local/bin", :png => "#{$0}.png" )
288
295
 
289
- At last, you can create familly tree with GraphViz::FamilyTree (<b>beta</b>) :
290
-
291
- require 'graphviz/family_tree'
292
-
293
- tree = GraphViz::FamilyTree.new do
294
- generation do
295
- benoist.is_a_man( "Benoist" )
296
- nathalie.is_a_woman( "Nathalie" )
297
-
298
- benoist.is_maried_with nathalie
299
- end
300
-
301
- generation do
302
- charlotte.is_a_woman( "Charlotte" )
303
- amelie.is_a_woman( "Amelie" )
304
- clement.is_a_man( "Clement" )
305
- gregoire.is_a_man( "Gregoire" )
306
-
307
- muriel.is_a_woman( "Muriel" )
308
-
309
- gregoire.is_maried_with muriel
310
- end
311
-
312
- couple( benoist, nathalie ).kids( charlotte, amelie, clement, gregoire )
313
- end
314
-
315
- tree.graph.save( :png => "#{$0}.png" )
316
296
 
317
297
  == TOOLS
318
298
 
319
- Ruby/GraphViz also include :
299
+ Ruby/GraphViz also includes :
320
300
 
321
- * <tt>ruby2gv</tt>, a simple tool that's allow you to create a dependency graph from a ruby script. Example : http://drp.ly/dShaZ
301
+ * <tt>ruby2gv</tt>, a simple tool that allows you to create a dependency graph from a ruby script. Example : http://drp.ly/dShaZ
322
302
 
323
303
  ruby2gv -Tpng -oruby2gv.png ruby2gv
324
304
 
325
- * <tt>gem2gv</tt>, a tools that's allow you to create a dependency graph between gems. Example : http://drp.ly/dSj9Y
305
+ * <tt>gem2gv</tt>, a tool that allows you to create a dependency graph between gems. Example : http://drp.ly/dSj9Y
326
306
 
327
307
  gem2gv -Tpng -oruby-graphviz.png ruby-graphviz
328
308
 
329
- * <tt>dot2ruby</tt>, a tools that's allow you to create a ruby script from a graphviz script
309
+ * <tt>dot2ruby</tt>, a tool that allows you to create a ruby script from a graphviz script
330
310
 
331
311
  $ cat hello.dot
332
312
  digraph G {Hello->World;}
@@ -344,9 +324,9 @@ Ruby/GraphViz also include :
344
324
  }
345
325
  puts graph_g.output( :canon => String )
346
326
 
347
- * <tt>git2gv</tt>, a tools that's allow you to show your git commits : http://dl.dropbox.com/u/72629/ruby-graphviz-git.svg
327
+ * <tt>git2gv</tt>, a tool that allows you to show your git commits : http://dl.dropbox.com/u/72629/ruby-graphviz-git.svg
348
328
 
349
- * <tt>xml2gv</tt>, a tools that's allow you to show a xml file as graph.
329
+ * <tt>xml2gv</tt>, a tool that allows you to show a xml file as graph.
350
330
 
351
331
  == GRAPH THEORY
352
332
 
@@ -395,7 +375,7 @@ Ruby/GraphViz also include :
395
375
 
396
376
  sudo gem install ruby-graphviz
397
377
 
398
- You also need to install GraphViz[http://www.graphviz.org] and Treetop[http://treetop.rubyforge.org/]
378
+ You also need to install GraphViz[http://www.graphviz.org]
399
379
 
400
380
  On *Windows* you also need to install win32-open3. This is not an absolute requirement.
401
381
 
@@ -0,0 +1,59 @@
1
+ $:.unshift( "lib" )
2
+ require "graphviz/constants"
3
+
4
+ require 'rake/clean'
5
+ require 'bundler'
6
+ require 'rubygems/package_task'
7
+ require 'rdoc/task'
8
+ require 'rake/testtask'
9
+ require 'fileutils'
10
+ require 'open-uri'
11
+ include FileUtils
12
+
13
+ CLEAN.include ['**/.*.sw?', '*.gem', '.config', 'test/test.log']
14
+ RDOC_OPTS = ['--quiet', '--title', "Ruby/GraphViz, the Documentation",
15
+ "--opname", "index.html",
16
+ "--line-numbers",
17
+ "--main", "README.rdoc"]
18
+
19
+ desc "Packages up Ruby/GraphViz."
20
+ task :default => [:test, :package]
21
+ task :package => [:clean]
22
+
23
+ task :doc => :rdoc
24
+
25
+ RDoc::Task.new do |rdoc|
26
+ rdoc.rdoc_dir = 'doc/rdoc'
27
+ rdoc.options += RDOC_OPTS
28
+ rdoc.main = "README.rdoc"
29
+ rdoc.title = "Ruby/GraphViz, the Documentation"
30
+ rdoc.rdoc_files.add ['README.rdoc', 'AUTHORS', 'COPYING',
31
+ 'lib/graphviz.rb',
32
+ 'lib/graphviz/node.rb',
33
+ 'lib/graphviz/edge.rb',
34
+ 'lib/graphviz/constants.rb',
35
+ 'lib/graphviz/xml.rb',
36
+ 'lib/graphviz/graphml.rb',
37
+ 'lib/graphviz/family_tree.rb',
38
+ 'lib/graphviz/family_tree/couple.rb',
39
+ 'lib/graphviz/family_tree/generation.rb',
40
+ 'lib/graphviz/family_tree/person.rb',
41
+ 'lib/graphviz/family_tree/sibling.rb']
42
+ end
43
+
44
+ Rake::TestTask.new(:test) do |t|
45
+ t.test_files = FileList['test/test_*.rb']
46
+ end
47
+
48
+ Bundler::GemHelper.install_tasks
49
+
50
+ namespace :gemcutter do
51
+ desc "check gemcutter status"
52
+ task :status do
53
+ if Rubygems.status
54
+ puts "This gem already existe in version #{PKG_VERS}!"
55
+ else
56
+ puts "This gem (#{Constants::RGV_VERSION}) has not been published! Last version at gemcutter is #{Rubygems.version}"
57
+ end
58
+ end
59
+ end
File without changes
data/bin/gem2gv CHANGED
File without changes
data/bin/git2gv CHANGED
File without changes
File without changes
data/bin/xml2gv CHANGED
File without changes
@@ -28,7 +28,7 @@
28
28
  # end [shape=Msquare];
29
29
  # }
30
30
 
31
- $:.unshift( "../../lib" );
31
+ $:.unshift( "../lib" );
32
32
  require "graphviz"
33
33
 
34
34
  GraphViz.new( :G, :type => :digraph ) { |g|
@@ -59,4 +59,4 @@ GraphViz.new( :G, :type => :digraph ) { |g|
59
59
  g.start[:shape] = :Mdiamond
60
60
  g._end[:label] = "end"
61
61
  g._end[:shape] = :Mdiamond
62
- }.output( :png => "#{$0}.png" )
62
+ }.output( :png => "#{$0}.png" )
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift( "../lib" );
4
+ require "graphviz"
5
+
6
+ hello_world = GraphViz::new( "" )
7
+
8
+ hello = hello_world.add_node("Hello")
9
+ world = hello_world.add_node("World")
10
+ hello_world.add_edge(hello, world)
11
+
12
+ # final_graph = GraphViz.parse_string( hello_world.output( :dot => String ) )
13
+ # final_graph.each_node do |_, node|
14
+ # puts "Node #{node.id} : position = #{node[:pos]}"
15
+ # end
16
+
17
+ hello_world = hello_world.complete
18
+ hello_world.each_node do |_, node|
19
+ puts "Node #{node.id} : position = " ; p node[:pos].point
20
+ end
21
+
22
+ puts "---------"
23
+
24
+ puts hello_world.output( :dot => String )
@@ -0,0 +1,32 @@
1
+ $:.unshift( "../lib" )
2
+ require 'graphviz/dsl'
3
+
4
+ digraph :G do
5
+ cluster_0 do
6
+ graph[:style => :filled, :color => :lightgrey]
7
+ node[:style => :filled, :color => :white]
8
+ a0 << a1 << a2 << a3
9
+ graph[:label => "process #1"]
10
+ end
11
+
12
+ cluster_1 do
13
+ node[:style => :filled]
14
+ b0 << b1 << b2 << b3
15
+ graph[:label => "process #2", :color => :blue]
16
+ end
17
+
18
+ start << a0
19
+ start << b0
20
+ a1 << b3
21
+ b2 << a3
22
+ a3 << a0
23
+ a3 << _end
24
+ b3 << _end
25
+
26
+ start[:shape] = :Mdiamond
27
+ _end[:label] = "end"
28
+ _end[:shape] = :Mdiamond
29
+
30
+ output(:png => "#{$0}.png")
31
+ end
32
+
@@ -0,0 +1,31 @@
1
+ $:.unshift( "../lib" )
2
+ require 'graphviz/dsl'
3
+
4
+ digraph :G do
5
+
6
+ node[:color => :lightblue, :style => :filled, :shape => :egg]
7
+ edge[:color => :gray, :arrowhead => :vee]
8
+
9
+ e "C/C++", "Java"
10
+
11
+ java do
12
+ n("Java") << n("Groovy")
13
+ n("Java") << n("Clojure")
14
+ n("Java") << n("JRuby")
15
+ graph[:label => "Java", :color => :blue]
16
+ end
17
+
18
+ e "C/C++", "Perl"
19
+ e "Perl", "PHP"
20
+ e "Perl", "Ruby"
21
+ e "Ruby", "Rubinius"
22
+ e "Ruby", "MacRuby"
23
+ e "Ruby", "JRuby"
24
+
25
+ %w{ Ruby JRuby MacRuby Rubinius }.each do |ruby|
26
+ n(ruby)[:color => :tomato]
27
+ end
28
+
29
+ output :png => "#{$0}.png"
30
+ end
31
+
@@ -0,0 +1,9 @@
1
+ $:.unshift("../lib")
2
+
3
+ require 'graphviz/dsl'
4
+ digraph :G do
5
+ world[:label => "World"] << hello[:label => "Hello"]
6
+ #world << hello
7
+
8
+ output :png => "#{$0}.png"
9
+ end
@@ -228,31 +228,37 @@ class GraphViz
228
228
  # * hOpts : Graph attributs
229
229
  #
230
230
  def add_graph( xGraphName = nil, hOpts = {}, &block )
231
- if xGraphName.kind_of?(Hash)
232
- hOpts = xGraphName
233
- xGraphName = nil
234
- end
231
+ if xGraphName.kind_of?(GraphViz)
232
+ xGraphID = xGraphName.id
233
+ @hoGraphs[xGraphID] = xGraphName.clone
234
+ xGraphName = xGraphID
235
+ else
236
+ if xGraphName.kind_of?(Hash)
237
+ hOpts = xGraphName
238
+ xGraphName = nil
239
+ end
235
240
 
236
- if xGraphName.nil?
237
- xGraphID = String.random(11)
238
- xGraphName = ""
239
- else
240
- xGraphID = xGraphName
241
- end
242
-
243
- @hoGraphs[xGraphID] = GraphViz::new( xGraphName, {:parent => self, :type => @oGraphType}, &block )
244
-
245
- hOpts.each do |xKey, xValue|
246
- @hoGraphs[xGraphID][xKey.to_s] = xValue
247
- end
248
-
249
- @elements_order.push( {
250
- "type" => "graph",
251
- "name" => xGraphName,
252
- "value" => @hoGraphs[xGraphID]
253
- } )
254
-
255
- return( @hoGraphs[xGraphID] )
241
+ if xGraphName.nil?
242
+ xGraphID = String.random(11)
243
+ xGraphName = ""
244
+ else
245
+ xGraphID = xGraphName
246
+ end
247
+
248
+ @hoGraphs[xGraphID] = GraphViz::new( xGraphName, {:parent => self, :type => @oGraphType}, &block )
249
+
250
+ hOpts.each do |xKey, xValue|
251
+ @hoGraphs[xGraphID][xKey.to_s] = xValue
252
+ end
253
+ end
254
+
255
+ @elements_order.push( {
256
+ "type" => "graph",
257
+ "name" => xGraphName,
258
+ "value" => @hoGraphs[xGraphID]
259
+ } )
260
+
261
+ return( @hoGraphs[xGraphID] )
256
262
  end
257
263
  alias :subgraph :add_graph
258
264
  #
@@ -719,7 +725,6 @@ class GraphViz
719
725
 
720
726
  ## ----------------------------------------------------------------------------
721
727
 
722
- #
723
728
  # Create a new graph from a GraphViz File
724
729
  #
725
730
  # Options :
@@ -734,6 +739,31 @@ class GraphViz
734
739
  return graph
735
740
  end
736
741
 
742
+ # Create a new graph from a GraphViz File
743
+ #
744
+ # Options :
745
+ # * :output : Output format (Constants::FORMATS) (default : dot)
746
+ # * :file : Output file name (default : none)
747
+ # * :use : Program to use (Constants::PROGRAMS) (default : dot)
748
+ # * :path : Program PATH
749
+ #
750
+ def self.parse_string( str, hOpts = {}, &block )
751
+ graph = Dot2Ruby::new( hOpts[:path], nil, nil ).eval_string( str )
752
+ yield( graph ) if( block and graph.nil? == false )
753
+ return graph
754
+ end
755
+
756
+ # Return a new completed graph
757
+ def complete
758
+ GraphViz.parse_string( root_graph.output( :dot => String ) )
759
+ end
760
+
761
+ # Complete the current graph
762
+ def complete!
763
+ # TODO: Keep options
764
+ complete
765
+ end
766
+
737
767
  ## ----------------------------------------------------------------------------
738
768
 
739
769
  private
@@ -40,7 +40,7 @@
40
40
  # C => cluster
41
41
  #
42
42
  module Constants
43
- RGV_VERSION = "1.0.0"
43
+ RGV_VERSION = "1.0.1"
44
44
 
45
45
  ## Const: Output formats
46
46
  FORMATS = [
@@ -120,156 +120,159 @@ module Constants
120
120
  "Damping" => { :usedBy => "G", :type => :GvDouble },
121
121
  "K" => { :usedBy => "GC", :type => :GvDouble },
122
122
  "URL" => { :usedBy => "ENGC", :type => :EscString },
123
- "arrowhead" => { :usedBy => "E", :type => :EscString },
123
+ "area" => { :usedBy => "NC", :type => :GvDouble },
124
+ "arrowhead" => { :usedBy => "E", :type => :ArrowType }, # arrowType
124
125
  "arrowsize" => { :usedBy => "E", :type => :GvDouble },
125
- "arrowtail" => { :usedBy => "E", :type => :EscString },
126
- "aspect" => { :usedBy => "G", :type => :EscString },
127
- "bb" => { :usedBy => "G", :type => :EscString },
128
- "bgcolor" => { :usedBy => "GC", :type => :EscString },
129
- "center" => { :usedBy => "G", :type => :EscString },
130
- "charset" => { :usedBy => "G", :type => :EscString },
131
- "clusterrank" => { :usedBy => "G", :type => :EscString },
132
- "color" => { :usedBy => "ENC", :type => :EscString },
133
- "colorscheme" => { :usedBy => "ENCG", :type => :EscString },
134
- "comment" => { :usedBy => "ENG", :type => :EscString },
135
- "compound" => { :usedBy => "G", :type => :EscString },
136
- "concentrate" => { :usedBy => "G", :type => :EscString },
137
- "constraint" => { :usedBy => "E", :type => :EscString },
138
- "decorate" => { :usedBy => "E", :type => :EscString },
126
+ "arrowtail" => { :usedBy => "E", :type => :ArrowType }, # arrowType
127
+ "aspect" => { :usedBy => "G", :type => :EscString }, # aspectType
128
+ "bb" => { :usedBy => "G", :type => :Rect }, # rect
129
+ "bgcolor" => { :usedBy => "GC", :type => :Color }, # color
130
+ "center" => { :usedBy => "G", :type => :GvBool }, # bool
131
+ "charset" => { :usedBy => "G", :type => :EscString }, # string
132
+ "clusterrank" => { :usedBy => "G", :type => :EscString }, # clusterMode
133
+ "color" => { :usedBy => "ENC", :type => :ColorList }, # color, colorList
134
+ "colorscheme" => { :usedBy => "ENCG", :type => :EscString }, # string
135
+ "comment" => { :usedBy => "ENG", :type => :EscString }, # string
136
+ "compound" => { :usedBy => "G", :type => :GvBool }, # bool
137
+ "concentrate" => { :usedBy => "G", :type => :GvBool }, # bool
138
+ "constraint" => { :usedBy => "E", :type => :GvBool }, # bool
139
+ "decorate" => { :usedBy => "E", :type => :GvBool }, # bool
139
140
  "defaultdist" => { :usedBy => "G", :type => :GvDouble },
140
- "dim" => { :usedBy => "G", :type => :EscString },
141
- "dimen" => { :usedBy => "G", :type => :EscString },
142
- "dir" => { :usedBy => "E", :type => :EscString },
143
- "diredgeconstraints" => { :usedBy => "G", :type => :EscString },
144
- "distortion" => { :usedBy => "N", :type => :GvDouble },
145
- "dpi" => { :usedBy => "G", :type => :GvDouble },
141
+ "dim" => { :usedBy => "G", :type => :EscString }, # int
142
+ "dimen" => { :usedBy => "G", :type => :EscString }, # int
143
+ "dir" => { :usedBy => "E", :type => :EscString }, # dirType
144
+ "diredgeconstraints" => { :usedBy => "G", :type => :EscString }, # string, bool
145
+ "distortion" => { :usedBy => "N", :type => :GvDouble },
146
+ "dpi" => { :usedBy => "G", :type => :GvDouble },
146
147
  "edgeURL" => { :usedBy => "E", :type => :EscString },
147
148
  "edgehref" => { :usedBy => "E", :type => :EscString },
148
149
  "edgetarget" => { :usedBy => "E", :type => :EscString },
149
150
  "edgetooltip" => { :usedBy => "E", :type => :EscString },
150
151
  "epsilon" => { :usedBy => "G", :type => :GvDouble },
151
152
  "esep" => { :usedBy => "G", :type => :EscString }, # GvDouble , pointf
152
- "fillcolor" => { :usedBy => "NC", :type => :EscString },
153
- "fixedsize" => { :usedBy => "N", :type => :EscString },
154
- "fontcolor" => { :usedBy => "ENGC", :type => :EscString },
155
- "fontname" => { :usedBy => "ENGC", :type => :EscString },
156
- "fontnames" => { :usedBy => "G", :type => :EscString },
157
- "fontpath" => { :usedBy => "G", :type => :EscString },
153
+ "fillcolor" => { :usedBy => "NC", :type => :Color }, # color
154
+ "fixedsize" => { :usedBy => "N", :type => :GvBool }, # bool
155
+ "fontcolor" => { :usedBy => "ENGC", :type => :Color }, # color
156
+ "fontname" => { :usedBy => "ENGC", :type => :EscString }, # string
157
+ "fontnames" => { :usedBy => "G", :type => :EscString }, # string
158
+ "fontpath" => { :usedBy => "G", :type => :EscString }, # string
158
159
  "fontsize" => { :usedBy => "ENGC", :type => :GvDouble },
159
- "group" => { :usedBy => "N", :type => :EscString },
160
+ "group" => { :usedBy => "N", :type => :EscString }, # string
160
161
  "headURL" => { :usedBy => "E", :type => :EscString },
161
- "headclip" => { :usedBy => "E", :type => :EscString },
162
+ "headclip" => { :usedBy => "E", :type => :GvBool }, # bool
162
163
  "headhref" => { :usedBy => "E", :type => :EscString },
163
- "headlabel" => { :usedBy => "E", :type => :EscString },
164
- "headport" => { :usedBy => "E", :type => :EscString },
164
+ "headlabel" => { :usedBy => "E", :type => :EscString }, # LblString
165
+ "headport" => { :usedBy => "E", :type => :EscString }, # portPos
165
166
  "headtarget" => { :usedBy => "E", :type => :EscString },
166
167
  "headtooltip" => { :usedBy => "E", :type => :EscString },
167
168
  "height" => { :usedBy => "N", :type => :GvDouble },
168
169
  "href" => { :usedBy => "NE", :type => :EscString },
169
170
  "id" => { :usedBy => "ENG", :type => :EscString },
170
- "image" => { :usedBy => "N", :type => :EscString },
171
- "imagescale" => { :usedBy => "N", :type => :EscString },
171
+ "image" => { :usedBy => "N", :type => :EscString }, # string
172
+ "imagescale" => { :usedBy => "N", :type => :EscString }, # bool, string
172
173
  "label" => { :usedBy => "ENGC", :type => :LblString },
173
174
  "labelURL" => { :usedBy => "E", :type => :EscString },
174
- "label_scheme" => { :usedBy => "G", :type => :EscString },
175
+ "label_scheme" => { :usedBy => "G", :type => :EscString }, # int
175
176
  "labelangle" => { :usedBy => "E", :type => :GvDouble },
176
177
  "labeldistance" => { :usedBy => "E", :type => :GvDouble },
177
- "labelfloat" => { :usedBy => "E", :type => :EscString },
178
- "labelfontcolor" => { :usedBy => "E", :type => :EscString },
179
- "labelfontname" => { :usedBy => "E", :type => :EscString },
178
+ "labelfloat" => { :usedBy => "E", :type => :GvBool }, # bool
179
+ "labelfontcolor" => { :usedBy => "E", :type => :Color }, # color
180
+ "labelfontname" => { :usedBy => "E", :type => :EscString }, # string
180
181
  "labelfontsize" => { :usedBy => "E", :type => :GvDouble },
181
182
  "labelhref" => { :usedBy => "E", :type => :EscString },
182
- "labeljust" => { :usedBy => "GC", :type => :EscString },
183
- "labelloc" => { :usedBy => "GCN", :type => :EscString },
183
+ "labeljust" => { :usedBy => "GC", :type => :EscString }, # string
184
+ "labelloc" => { :usedBy => "GCN", :type => :EscString }, # string
184
185
  "labeltarget" => { :usedBy => "E", :type => :EscString },
185
186
  "labeltooltip" => { :usedBy => "E", :type => :EscString },
186
- "landscape" => { :usedBy => "G", :type => :EscString },
187
- "layer" => { :usedBy => "EN", :type => :EscString },
188
- "layers" => { :usedBy => "G", :type => :EscString },
189
- "layersep" => { :usedBy => "G", :type => :EscString },
190
- "layout" => { :usedBy => "G", :type => :EscString },
191
- "len" => { :usedBy => "E", :type => :GvDouble },
192
- "levels" => { :usedBy => "G", :type => :EscString },
187
+ "landscape" => { :usedBy => "G", :type => :GvBool }, # bool
188
+ "layer" => { :usedBy => "EN", :type => :EscString }, # layerRange
189
+ "layers" => { :usedBy => "G", :type => :EscString }, # layerList
190
+ "layersep" => { :usedBy => "G", :type => :EscString }, # string
191
+ "layout" => { :usedBy => "G", :type => :EscString }, # string
192
+ "len" => { :usedBy => "E", :type => :GvDouble },
193
+ "levels" => { :usedBy => "G", :type => :EscString }, # int
193
194
  "levelsgap" => { :usedBy => "G", :type => :GvDouble },
194
- "lhead" => { :usedBy => "E", :type => :EscString },
195
+ "lhead" => { :usedBy => "E", :type => :EscString }, # string
195
196
  "lheight" => { :usedBy => "GC", :type => :GvDouble },
196
- "lp" => { :usedBy => "EGC", :type => :EscString },
197
- "ltail" => { :usedBy => "E", :type => :EscString },
198
- "lweight" => { :usedBy => "GC", :type => :GvDouble },
197
+ "lp" => { :usedBy => "EGC", :type => :EscString }, # point
198
+ "ltail" => { :usedBy => "E", :type => :EscString }, # string
199
+ "lwidth" => { :usedBy => "GC", :type => :GvDouble },
199
200
  "margin" => { :usedBy => "NG", :type => :EscString }, # GvDouble , pointf
200
- "maxiter" => { :usedBy => "G", :type => :EscString },
201
+ "maxiter" => { :usedBy => "G", :type => :EscString }, # int
201
202
  "mclimit" => { :usedBy => "G", :type => :GvDouble },
202
203
  "mindist" => { :usedBy => "G", :type => :GvDouble },
203
- "minlen" => { :usedBy => "E", :type => :EscString },
204
- "mode" => { :usedBy => "G", :type => :EscString },
205
- "model" => { :usedBy => "G", :type => :EscString },
206
- "mosek" => { :usedBy => "G", :type => :EscString },
204
+ "minlen" => { :usedBy => "E", :type => :EscString }, # int
205
+ "mode" => { :usedBy => "G", :type => :EscString }, # string
206
+ "model" => { :usedBy => "G", :type => :EscString }, # string
207
+ "mosek" => { :usedBy => "G", :type => :GvBool }, # bool
207
208
  "nodesep" => { :usedBy => "G", :type => :GvDouble },
208
- "nojustify" => { :usedBy => "GCNE", :type => :EscString },
209
- "normalize" => { :usedBy => "G", :type => :EscString },
209
+ "nojustify" => { :usedBy => "GCNE", :type => :GvBool }, # bool
210
+ "normalize" => { :usedBy => "G", :type => :GvBool }, # bool
210
211
  "nslimit" => { :usedBy => "G", :type => :GvDouble },
211
212
  "nslimit1" => { :usedBy => "G", :type => :GvDouble },
212
- "ordering" => { :usedBy => "G", :type => :EscString },
213
- "orientation" => { :usedBy => "NG", :type => :GvDouble },
214
- "outputorder" => { :usedBy => "G", :type => :EscString },
215
- "overlap" => { :usedBy => "G", :type => :EscString },
213
+ "ordering" => { :usedBy => "G", :type => :EscString }, # string
214
+ "orientation" => { :usedBy => "NG", :type => :GvDouble }, # N: double, G: string
215
+ "outputorder" => { :usedBy => "G", :type => :EscString }, # outputMode
216
+ "overlap" => { :usedBy => "G", :type => :EscString }, # string, bool
216
217
  "overlap_scaling" => { :usedBy => "G", :type => :GvDouble },
217
- "pack" => { :usedBy => "G", :type => :EscString },
218
- "packmode" => { :usedBy => "G", :type => :EscString },
218
+ "pack" => { :usedBy => "G", :type => :EscString }, # bool, int
219
+ "packmode" => { :usedBy => "G", :type => :EscString }, # packMode
219
220
  "pad" => { :usedBy => "G", :type => :EscString }, # GvDouble , pointf
220
221
  "page" => { :usedBy => "G", :type => :EscString }, # GvDouble , pointf
221
- "pagedir" => { :usedBy => "G", :type => :EscString },
222
- "pencolor" => { :usedBy => "C", :type => :EscString },
222
+ "pagedir" => { :usedBy => "G", :type => :EscString }, # pageDir
223
+ "pencolor" => { :usedBy => "C", :type => :Color }, # color
223
224
  "penwidth" => { :usedBy => "CNE", :type => :GvDouble },
224
- "peripheries" => { :usedBy => "NC", :type => :EscString },
225
- "pin" => { :usedBy => "N", :type => :EscString },
226
- "pos" => { :usedBy => "EN", :type => :EscString },
227
- "quadtree" => { :usedBy => "G", :type => :EscString },
225
+ "peripheries" => { :usedBy => "NC", :type => :EscString }, # int
226
+ "pin" => { :usedBy => "N", :type => :GvBool }, # bool
227
+ "pos" => { :usedBy => "EN", :type => :SplineType }, # point, splineTypes
228
+ "quadtree" => { :usedBy => "G", :type => :GvBool }, # bool
228
229
  "quantum" => { :usedBy => "G", :type => :GvDouble },
229
- "rank" => { :usedBy => "S", :type => :EscString },
230
- "rankdir" => { :usedBy => "G", :type => :EscString },
230
+ "rank" => { :usedBy => "S", :type => :EscString }, # rankType
231
+ "rankdir" => { :usedBy => "G", :type => :EscString }, # rankDir
231
232
  "ranksep" => { :usedBy => "G", :type => :EscString }, # GvDouble, doubleList
232
233
  "ratio" => { :usedBy => "G", :type => :EscString }, # GvDouble, String
233
- "rects" => { :usedBy => "N", :type => :EscString },
234
- "regular" => { :usedBy => "N", :type => :EscString },
235
- "remincross" => { :usedBy => "G", :type => :EscString },
234
+ "rects" => { :usedBy => "N", :type => :Rect }, # rect
235
+ "regular" => { :usedBy => "N", :type => :GvBool }, # bool
236
+ "remincross" => { :usedBy => "G", :type => :GvBool }, # bool
236
237
  "repulsiveforce" => { :usedBy => "G", :type => :GvDouble },
237
238
  "resolution" => { :usedBy => "G", :type => :GvDouble },
238
- "root" => { :usedBy => "GN", :type => :EscString },
239
- "rotate" => { :usedBy => "G", :type => :EscString },
239
+ "root" => { :usedBy => "GN", :type => :EscString }, # bool, string
240
+ "rotate" => { :usedBy => "G", :type => :EscString }, # int
240
241
  "rotation" => { :usedBy => "G", :type => :GvDouble },
241
- "samehead" => { :usedBy => "E", :type => :EscString },
242
- "sametail" => { :usedBy => "E", :type => :EscString },
243
- "samplepoints" => { :usedBy => "G", :type => :EscString },
244
- "searchsize" => { :usedBy => "G", :type => :EscString },
245
- "sep" => { :usedBy => "G", :type => :EscString }, # GvDouble , pointf
246
- "shape" => { :usedBy => "N", :type => :EscString },
247
- "shapefile" => { :usedBy => "N", :type => :EscString },
248
- "showboxes" => { :usedBy => "ENG", :type => :EscString },
249
- "sides" => { :usedBy => "N", :type => :EscString },
250
- "size" => { :usedBy => "NG", :type => :EscString }, # GvDouble , pointf
242
+ "samehead" => { :usedBy => "E", :type => :EscString }, # string
243
+ "sametail" => { :usedBy => "E", :type => :EscString }, # string
244
+ "samplepoints" => { :usedBy => "G", :type => :EscString }, # int
245
+ "scale" => { :usedBy => "G", :type => :EscString }, # double, pointf
246
+ "searchsize" => { :usedBy => "G", :type => :EscString }, # int
247
+ "sep" => { :usedBy => "G", :type => :EscString }, # double , pointf
248
+ "shape" => { :usedBy => "N", :type => :EscString }, # shape
249
+ "shapefile" => { :usedBy => "N", :type => :EscString }, # string
250
+ "showboxes" => { :usedBy => "ENG", :type => :EscString }, # int
251
+ "sides" => { :usedBy => "N", :type => :EscString }, # int
252
+ "size" => { :usedBy => "NG", :type => :EscString }, # double , pointf
251
253
  "skew" => { :usedBy => "N", :type => :GvDouble },
252
- "smoothing" => { :usedBy => "G", :type => :EscString },
253
- "sortv" => { :usedBy => "GCN", :type => :EscString },
254
- "splines" => { :usedBy => "G", :type => :EscString },
255
- "start" => { :usedBy => "G", :type => :EscString },
256
- "style" => { :usedBy => "ENC", :type => :EscString },
257
- "stylesheet" => { :usedBy => "G", :type => :EscString },
254
+ "smoothing" => { :usedBy => "G", :type => :EscString }, # smoothType
255
+ "sortv" => { :usedBy => "GCN", :type => :EscString }, # int
256
+ "splines" => { :usedBy => "G", :type => :EscString }, # bool, string
257
+ "start" => { :usedBy => "G", :type => :EscString }, # startType
258
+ "style" => { :usedBy => "ENC", :type => :EscString }, # style
259
+ "stylesheet" => { :usedBy => "G", :type => :EscString }, # string
258
260
  "tailURL" => { :usedBy => "E", :type => :EscString },
259
- "tailclip" => { :usedBy => "E", :type => :EscString },
261
+ "tailclip" => { :usedBy => "E", :type => :GvBool }, # bool
260
262
  "tailhref" => { :usedBy => "E", :type => :EscString },
261
- "taillabel" => { :usedBy => "E", :type => :EscString },
262
- "tailport" => { :usedBy => "E", :type => :EscString },
263
+ "taillabel" => { :usedBy => "E", :type => :EscString }, # lblString
264
+ "tailport" => { :usedBy => "E", :type => :EscString }, # portPos
263
265
  "tailtarget" => { :usedBy => "E", :type => :EscString },
264
266
  "tailtooltip" => { :usedBy => "E", :type => :EscString },
265
- "target" => { :usedBy => "ENGC", :type => :EscString },
267
+ "target" => { :usedBy => "ENGC", :type => :EscString }, # escString, string
266
268
  "tooltip" => { :usedBy => "NEC", :type => :EscString },
267
- "truecolor" => { :usedBy => "G", :type => :EscString },
268
- "vertices" => { :usedBy => "N", :type => :EscString },
269
- "viewport" => { :usedBy => "G", :type => :EscString },
269
+ "truecolor" => { :usedBy => "G", :type => :GvBool }, # bool
270
+ "vertices" => { :usedBy => "N", :type => :EscString }, # pointfList
271
+ "viewport" => { :usedBy => "G", :type => :EscString }, # viewPort
270
272
  "voro_margin" => { :usedBy => "G", :type => :GvDouble },
271
273
  "weight" => { :usedBy => "E", :type => :GvDouble },
272
274
  "width" => { :usedBy => "N", :type => :GvDouble },
275
+ "xlabel" => { :usedBy => "EN", :type => :LblString },
273
276
  "z" => { :usedBy => "N", :type => :GvDouble }
274
277
  }
275
278