ruby-graphviz 0.9.7 → 0.9.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,78 @@
1
+ digraph test
2
+ {
3
+ sdl_task [shape=sdl_task, color=red, fillcolor=cyan, style=filled, peripheries=0];
4
+ sdl_task2 [shape=sdl_task, label="sdl_task", peripheries=0];
5
+ sdl_task -> sdl_task2;
6
+ sdl_input_from_right [shape=sdl_input_from_right, color=red, fillcolor=cyan, style=filled, peripheries=0];
7
+ sdl_input_from_right2 [shape=sdl_input_from_right, label="sdl_input_from_right ", peripheries=0];
8
+ sdl_input_from_right -> sdl_input_from_right2;
9
+ sdl_input_from_left [shape=sdl_input_from_left, color=red, fillcolor=cyan, style=filled, peripheries=0];
10
+ sdl_input_from_left2 [shape=sdl_input_from_left, label=" sdl_input_from_left", peripheries=0];
11
+ sdl_input_from_left -> sdl_input_from_left2;
12
+ sdl_priority_input_from_right [shape=sdl_priority_input_from_right, color=red, fillcolor=cyan, style=filled, peripheries=0];
13
+ sdl_priority_input_from_right2 [shape=sdl_priority_input_from_right, label="sdl_priority_input_from_right ", peripheries=0];
14
+ sdl_priority_input_from_right -> sdl_priority_input_from_right2;
15
+ sdl_priority_input_from_left [shape=sdl_priority_input_from_left, color=red, fillcolor=cyan, style=filled, peripheries=0];
16
+ sdl_priority_input_from_left2 [shape=sdl_priority_input_from_left, label=" sdl_priority_input_from_left", peripheries=0];
17
+ sdl_priority_input_from_left -> sdl_priority_input_from_left2;
18
+ sdl_start [shape=sdl_start, color=red, fillcolor=cyan, style=filled, peripheries=0];
19
+ sdl_start2 [shape=sdl_start, label=" ", peripheries=0];
20
+ sdl_start -> sdl_start2;
21
+ sdl_procedure_start [shape=sdl_procedure_start, color=red, fillcolor=cyan, style=filled, peripheries=0];
22
+ sdl_procedure_start2 [shape=sdl_procedure_start, label=" ", peripheries=0];
23
+ sdl_procedure_start -> sdl_procedure_start2;
24
+ sdl_state [shape=sdl_state, color=red, fillcolor=cyan, style=filled, peripheries=0];
25
+ sdl_state2 [shape=sdl_state, peripheries=0];
26
+ sdl_state -> sdl_state2;
27
+ sdl_output_to_right [shape=sdl_output_to_right, color=red, fillcolor=cyan, style=filled, peripheries=0];
28
+ sdl_output_to_right2 [shape=sdl_output_to_right, label="sdl_output_to_right ", peripheries=0];
29
+ sdl_output_to_right -> sdl_output_to_right2;
30
+ sdl_output_to_left [shape=sdl_output_to_left, color=red, fillcolor=cyan, style=filled, peripheries=0];
31
+ sdl_output_to_left2 [shape=sdl_output_to_left, label=" sdl_output_to_left", peripheries=0];
32
+ sdl_output_to_left -> sdl_output_to_left2;
33
+ sdl_condition [shape=sdl_condition, color=red, fillcolor=cyan, style=filled, peripheries=0];
34
+ sdl_condition2 [shape=sdl_condition, label=" sdl_condition ", peripheries=0];
35
+ sdl_condition -> sdl_condition2;
36
+ sdl_save [shape=sdl_save, color=red, fillcolor=cyan, style=filled, peripheries=0];
37
+ sdl_save2 [shape=sdl_save, label=" sdl_save ", peripheries=0];
38
+ sdl_save -> sdl_save2;
39
+ sdl_stop [shape=sdl_stop, peripheries=0];
40
+ sdl_stop2 [shape=sdl_stop, label="", peripheries=0];
41
+ sdl_stop -> sdl_stop2 [arrowhead=none, headclip=false];
42
+ sdl_return [shape=sdl_return, color=red, fillcolor=cyan, style=filled, peripheries=0];
43
+ sdl_return2 [shape=sdl_return, label="", peripheries=0];
44
+ sdl_return -> sdl_return2;
45
+ sdl_create [shape=sdl_create, color=red, fillcolor=cyan, style=filled, peripheries=0];
46
+ sdl_create2 [shape=sdl_create, peripheries=0];
47
+ sdl_create -> sdl_create2;
48
+ sdl_call [shape=sdl_call, color=red, fillcolor=cyan, style=filled, peripheries=0];
49
+ sdl_call2 [shape=sdl_call, label=" sdl_call ", peripheries=0];
50
+ sdl_call -> sdl_call2;
51
+ sdl_text [shape=sdl_text, color=red, fillcolor=cyan, style=filled, peripheries=0];
52
+ sdl_text2 [shape=sdl_text, peripheries=0];
53
+ sdl_text -> sdl_text2;
54
+ sdl_text_extension_from_left [shape=sdl_text_extension_from_left, color=red, fillcolor=cyan, style=filled, peripheries=0];
55
+ sdl_text_extension_from_left2 [shape=sdl_text_extension_from_left, peripheries=0];
56
+ sdl_text_extension_from_left -> sdl_text_extension_from_left2;
57
+ sdl_text_extension_from_right [shape=sdl_text_extension_from_right, color=red, fillcolor=cyan, style=filled, peripheries=0];
58
+ sdl_text_extension_from_right2 [shape=sdl_text_extension_from_right, peripheries=0];
59
+ sdl_text_extension_from_right -> sdl_text_extension_from_right2;
60
+ sdl_comment_from_left [shape=sdl_comment_from_left, color=red, fillcolor=cyan, style=filled, peripheries=0];
61
+ sdl_comment_from_left2 [shape=sdl_comment_from_left, style=dashed, peripheries=0];
62
+ sdl_comment_from_left -> sdl_comment_from_left2;
63
+ sdl_comment_from_right [shape=sdl_comment_from_right, color=red, fillcolor=cyan, style=filled, peripheries=0];
64
+ sdl_comment_from_right2 [shape=sdl_comment_from_right, style=dashed, peripheries=0];
65
+ sdl_comment_from_right -> sdl_comment_from_right2;
66
+ sdl_connector [shape=sdl_connector, color=red, fillcolor=cyan, style=filled, peripheries=0];
67
+ sdl_connector2 [shape=sdl_connector, peripheries=0];
68
+ sdl_connector -> sdl_connector2;
69
+ sdl_set [shape=sdl_set, color=red, fillcolor=cyan, style=filled, peripheries=0];
70
+ sdl_set2 [shape=sdl_set, label=" sdl_set2", peripheries=0];
71
+ sdl_set -> sdl_set2;
72
+ sdl_reset [shape=sdl_reset, color=red, fillcolor=cyan, style=filled, peripheries=0];
73
+ sdl_reset2 [shape=sdl_reset, label=" sdl_reset2", peripheries=0];
74
+ sdl_reset -> sdl_reset2;
75
+ sdl_export [shape=sdl_export, color=red, fillcolor=cyan, style=filled, peripheries=0];
76
+ sdl_export2 [shape=sdl_export, label=" sdl_export", peripheries=0];
77
+ sdl_export -> sdl_export2;
78
+ }
data/examples/testxml.rb CHANGED
@@ -4,4 +4,4 @@ $:.unshift( "../lib" )
4
4
  require 'graphviz/xml'
5
5
 
6
6
  gvxml = GraphViz::XML::new( "test.xml", :text => true, :attrs => true )
7
- gvxml.output( :png => "#{$0}.png", :use => "dot", :path => ARGV[0] )
7
+ gvxml.output( :png => "#{$0}.png", :use => "dot" )
data/lib/graphviz.rb CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2003, 2004, 2005, 2006, 2007 Gregoire Lejeune <gregoire.lejeune@free.fr>
1
+ # Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Gregoire Lejeune <gregoire.lejeune@free.fr>
2
2
  #
3
3
  # This program is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License as published by
@@ -29,6 +29,7 @@ require 'graphviz/edge'
29
29
  require 'graphviz/attrs'
30
30
  require 'graphviz/constants'
31
31
  require 'graphviz/parser'
32
+ require 'graphviz/types'
32
33
 
33
34
  class GraphViz
34
35
  include Constants
@@ -46,11 +47,14 @@ class GraphViz
46
47
  @@prog = "dot"
47
48
  @prog
48
49
  ## Var: program path
49
- @@path = nil
50
+ @@path = []
50
51
  @path
51
52
  ## Var: Error level
52
53
  @@errors = 1
53
54
  @errors
55
+ ## Var: External libraries
56
+ @@extlibs = []
57
+ @extlibs
54
58
 
55
59
  ## Var: Graph name
56
60
  @name
@@ -234,7 +238,13 @@ class GraphViz
234
238
  # Get the value of the graph attribut +xAttrName+
235
239
  #
236
240
  def []( xAttrName )
237
- return( @graph[xAttrName].clone )
241
+ if Hash === xAttrName
242
+ xAttrName.each do |key, value|
243
+ self[key] = value
244
+ end
245
+ else
246
+ return( @graph[xAttrName].clone )
247
+ end
238
248
  end
239
249
 
240
250
  #
@@ -291,15 +301,15 @@ class GraphViz
291
301
 
292
302
  case kElement["type"]
293
303
  when "graph_attr"
294
- xData << xSeparator + kElement["name"] + " = \"" + kElement["value"] + "\""
304
+ xData << xSeparator + kElement["name"] + " = " + kElement["value"].to_gv
295
305
  xSeparator = "; "
296
306
 
297
307
  when "node_attr"
298
- xData << xSeparator + kElement["name"] + " = \"" + kElement["value"] + "\""
308
+ xData << xSeparator + kElement["name"] + " = " + kElement["value"].to_gv
299
309
  xSeparator = ", "
300
310
 
301
311
  when "edge_attr"
302
- xData << xSeparator + kElement["name"] + " = \"" + kElement["value"] + "\""
312
+ xData << xSeparator + kElement["name"] + " = " + kElement["value"].to_gv
303
313
  xSeparator = ", "
304
314
 
305
315
  when "node"
@@ -354,9 +364,11 @@ class GraphViz
354
364
  end
355
365
  @prog = xValue
356
366
  when "path"
357
- @path = xValue
367
+ @path = xValue.split( "," ).map{ |x| x.strip }
358
368
  when "errors"
359
369
  @errors = xValue
370
+ when "extlib"
371
+ @extlibs = xValue.split( "," ).map{ |x| x.strip }
360
372
  else
361
373
  if FORMATS.index( xKey.to_s ).nil? == true
362
374
  raise ArgumentError, "output format '#{xValue}' invalid"
@@ -370,7 +382,7 @@ class GraphViz
370
382
 
371
383
  xOutputString = (@filename == String ||
372
384
  @output.any? {|format, file| file == String })
373
-
385
+
374
386
  xOutput =
375
387
  if @format.to_s == "none" || @output.any? {|fmt, fn| fmt.to_s == "none" }
376
388
  xDOTScript
@@ -380,7 +392,7 @@ class GraphViz
380
392
  t.print( xDOTScript )
381
393
  t.close
382
394
 
383
- cmd = find_executable( )
395
+ cmd = find_executable( @prog, @path )
384
396
  if cmd == nil
385
397
  raise StandardError, "GraphViz not installed or #{@prog} not in PATH. Install GraphViz or use the 'path' option"
386
398
  end
@@ -404,10 +416,15 @@ class GraphViz
404
416
  end
405
417
  end
406
418
 
419
+ xExternalLibraries = ""
420
+ @extlibs.each do |lib|
421
+ xExternalLibraries << "-l#{lib} "
422
+ end
423
+
407
424
  if IS_JRUBY
408
- xCmd = "#{cmd} -q#{@errors} #{xOutputWithFile} #{xOutputWithoutFile} #{t.path}"
425
+ xCmd = "#{cmd} -q#{@errors} #{xExternalLibraries} #{xOutputWithFile} #{xOutputWithoutFile} #{t.path}"
409
426
  else
410
- xCmd = "\"#{cmd}\" -q#{@errors} #{xOutputWithFile} #{xOutputWithoutFile} #{t.path}"
427
+ xCmd = "\"#{cmd}\" -q#{@errors} #{xExternalLibraries} #{xOutputWithFile} #{xOutputWithoutFile} #{t.path}"
411
428
  end
412
429
 
413
430
  output_from_command( xCmd )
@@ -514,9 +531,11 @@ class GraphViz
514
531
  when "use"
515
532
  @@prog = v
516
533
  when "path"
517
- @@path = v
534
+ @@path = v.split( "," ).map{ |x| x.strip }
518
535
  when "errors"
519
536
  @@errors = v
537
+ when "extlibs"
538
+ @@extlibs = v.split( "," ).map{ |x| x.strip }
520
539
  when "output"
521
540
  warn ":output option is deprecated!"
522
541
  @@format = v
@@ -585,6 +604,7 @@ class GraphViz
585
604
  @prog = @@prog
586
605
  @path = @@path
587
606
  @errors = @@errors
607
+ @extlibs = @@extlibs
588
608
  @output = {}
589
609
 
590
610
  @elements_order = Array::new()
@@ -625,9 +645,11 @@ class GraphViz
625
645
  end
626
646
  @oGraphType = xValue.to_s
627
647
  when "path"
628
- @path = xValue.to_s
648
+ @path = xValue.split( "," ).map{ |x| x.strip }
629
649
  when "errors"
630
650
  @errors = xValue
651
+ when "extlibs"
652
+ @extlibs = xValue.split( "," ).map{ |x| x.strip }
631
653
  else
632
654
  self[xKey.to_s] = xValue.to_s
633
655
  end
@@ -640,9 +662,11 @@ class GraphViz
640
662
  #
641
663
  # Escape a string to be acceptable as a node name in a graphviz input file
642
664
  #
643
- def self.escape(str, force = false) #:nodoc:
665
+ def self.escape(str, force = false ) #:nodoc:
644
666
  if force or str.match( /\A[a-zA-Z_]+[a-zA-Z0-9_:]*\Z/ ).nil?
645
667
  '"' + str.gsub('"', '\\"').gsub("\n", '\\\\n').gsub(".","\\.") + '"'
668
+ #if force or str.match( /\A[a-zA-Z_]+[a-zA-Z0-9_:\.]*\Z/ ).nil?
669
+ # '"' + str.gsub('"', '\\"').gsub("\n", '\\\\n') + '"'
646
670
  else
647
671
  str
648
672
  end
@@ -663,10 +687,11 @@ class GraphViz
663
687
  # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
664
688
  # OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
665
689
  # CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
666
- def find_executable(bin = @prog, *paths) #:nodoc:
667
- paths = ENV['PATH'].split(File::PATH_SEPARATOR) if paths.empty?
668
- paths.each do |path|
669
- file = File.join(path,bin)
690
+ def find_executable(bin, paths) #:nodoc:
691
+ paths = ENV['PATH'].split(File::PATH_SEPARATOR) if paths.nil? or paths.empty?
692
+
693
+ paths.each do |path|
694
+ file = (path.nil?)?bin:File.join(path,bin)
670
695
  if File.executable?(file) then
671
696
  return file
672
697
  elsif RUBY_PLATFORM =~ /mswin|mingw/
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2004, 2005, 2006, 2007, 2008 Gregoire Lejeune <gregoire.lejeune@free.fr>
1
+ # Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Gregoire Lejeune <gregoire.lejeune@free.fr>
2
2
  #
3
3
  # This program is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License as published by
@@ -38,13 +38,14 @@ class GraphViz
38
38
  end
39
39
 
40
40
  def []=( xKey, xValue )
41
- if @attributs.index( xKey.to_s ).nil? == true
41
+ unless @attributs.keys.include?( xKey.to_s )
42
42
  raise ArgumentError, "#{@name} attribut '#{xKey.to_s}' invalid"
43
43
  end
44
- @data[xKey.to_s] = xValue.to_s
44
+
45
+ @data[xKey.to_s] = GraphViz::Types.const_get(@attributs[xKey.to_s]).new( xValue )
45
46
 
46
47
  if @graphviz.nil? == false
47
- @graphviz.set_position( @name, xKey.to_s, xValue.to_s )
48
+ @graphviz.set_position( @name, xKey.to_s, @data[xKey.to_s] )
48
49
  end
49
50
  end
50
51
  end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2004, 2005, 2006, 2007, 2008 Gregoire Lejeune <gregoire.lejeune@free.fr>
1
+ # Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Gregoire Lejeune <gregoire.lejeune@free.fr>
2
2
  #
3
3
  # This program is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License as published by
@@ -14,8 +14,33 @@
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
+ # Constants for ruby-graphviz
18
+ #
19
+ # Constants::FORMATS: the possible output formats
20
+ # "bmp", "canon", "dot", "xdot", "cmap", "dia", "eps",
21
+ # "fig", "gd", "gd2", "gif", "gtk", "hpgl", "ico", "imap",
22
+ # "cmapx", "imap_np", "cmapx_np", "ismap", "jpeg", "jpg",
23
+ # "jpe", "mif", "mp", "pcl", "pdf", "pic", "plain",
24
+ # "plain-ext", "png", "ps", "ps2", "svg", "svgz", "tga",
25
+ # "tiff", "tif", "vml", "vmlz", "vrml", "vtx", "wbmp",
26
+ # "xlib", "none"
27
+ #
28
+ # Constants::PROGRAMS: The possible programs
29
+ # "dot", "neato", "twopi", "fdp", "circo"
30
+ #
31
+ # Constants::GRAPHTYPE The possible types of graph
32
+ # "digraph", "graph"
33
+ #
34
+ #
35
+ # The single letter codes used in constructors map as follows:
36
+ # G => The root graph, with GRAPHATTRS
37
+ # E => Edge, with EDGESATTRS
38
+ # N => Node, with NODESATTRS
39
+ # S => subgraph
40
+ # C => cluster
41
+ #
17
42
  module Constants
18
- RGV_VERSION = "0.9.7"
43
+ RGV_VERSION = "0.9.8"
19
44
 
20
45
  ## Const: Output formats
21
46
  FORMATS = [
@@ -81,166 +106,174 @@ module Constants
81
106
  ]
82
107
 
83
108
  def self.getAttrsFor( x )
84
- r = []
109
+ list = {}
85
110
  GENCS_ATTRS.each { |k,v|
86
- r << k if /#{x}/.match( x.to_s ) and not r.include?( k )
111
+ list[k] = v[:type] if x.match( v[:usedBy] ) and not list.keys.include?(k)
87
112
  }
88
- r
113
+ list
89
114
  end
90
115
 
91
116
  # E, N, G, S and C represent edges, nodes, the root graph, subgraphs and cluster subgraphs, respectively
92
117
  GENCS_ATTRS = {
93
- "Damping" => "G",
94
- "K" => "GC",
95
- "URL" => "ENGC",
96
- "arrowhead" => "E",
97
- "arrowsize" => "E",
98
- "arrowtail" => "E",
99
- "bb" => "G",
100
- "bgcolor" => "GC",
101
- # "bottomlabel" => "N",
102
- "center" => "G",
103
- "charset" => "G",
104
- "clusterrank" => "G",
105
- "color" => "ENC",
106
- "colorscheme" => "ENCG",
107
- "comment" => "ENG",
108
- "compound" => "G",
109
- "concentrate" => "G",
110
- "constraint" => "E",
111
- "decorate" => "E",
112
- "defaultdist" => "G",
113
- "dim" => "G",
114
- "dir" => "E",
115
- "diredgeconstraints" => "G",
116
- "distortion" => "N",
117
- "dpi" => "G",
118
- "edgeURL" => "E",
119
- "edgehref" => "E",
120
- "edgetarget" => "E",
121
- "edgetooltip" => "E",
122
- "epsilon" => "G",
123
- "esep" => "G",
124
- "fillcolor" => "NC",
125
- "fixedsize" => "N",
126
- "fontcolor" => "ENGC",
127
- "fontname" => "ENGC",
128
- "fontnames" => "G",
129
- "fontpath" => "G",
130
- "fontsize" => "ENGC",
131
- "group" => "N",
132
- "headURL" => "E",
133
- "headclip" => "E",
134
- "headhref" => "E",
135
- "headlabel" => "E",
136
- "headport" => "E",
137
- "headtarget" => "E",
138
- "headtooltip" => "E",
139
- "height" => "N",
140
- "href" => "E",
141
- "html" => "N", # API extension
142
- "image" => "N",
143
- "imagescale" => "N",
144
- "label" => "ENGC",
145
- "labelURL" => "E",
146
- "labelangle" => "E",
147
- "labeldistance" => "E",
148
- "labelfloat" => "E",
149
- "labelfontcolor" => "E",
150
- "labelfontname" => "E",
151
- "labelfontsize" => "E",
152
- "labelhref" => "E",
153
- "labeljust" => "GC",
154
- "labelloc" => "GCN",
155
- "labeltarget" => "E",
156
- "labeltooltip" => "E",
157
- "landscape" => "G",
158
- "layer" => "EN",
159
- "layers" => "G",
160
- "layersep" => "G",
161
- "len" => "E",
162
- "levelsgap" => "G",
163
- "lhead" => "E",
164
- "lp" => "EGC",
165
- "ltail" => "E",
166
- "margin" => "NG",
167
- "maxiter" => "G",
168
- "mclimit" => "G",
169
- "mindist" => "G",
170
- "minlen" => "E",
171
- "mode" => "G",
172
- "model" => "G",
173
- "mosek" => "G",
174
- "nodesep" => "G",
175
- "nojustify" => "GCNE",
176
- "normalize" => "G",
177
- "nslimit" => "G",
178
- "nslimit1" => "G",
179
- "ordering" => "G",
180
- "orientation" => "NG",
181
- "outputorder" => "G",
182
- "overlap" => "G",
183
- "pack" => "G",
184
- "packmode" => "G",
185
- "pad" => "G",
186
- "page" => "G",
187
- "pagedir" => "G",
188
- "pencolor" => "C",
189
- "penwidth" => "CNE",
190
- "peripheries" => "NC",
191
- "pin" => "N",
192
- "pos" => "EN",
193
- "quantum" => "G",
194
- "rank" => "S",
195
- "rankdir" => "G",
196
- "ranksep" => "G",
197
- "ratio" => "G",
198
- "rects" => "N",
199
- "regular" => "N",
200
- "remincross" => "G",
201
- "resolution" => "G",
202
- "root" => "GN",
203
- "rotate" => "G",
204
- "samehead" => "E",
205
- "sametail" => "E",
206
- "samplepoints" => "G",
207
- "searchsize" => "G",
208
- "sep" => "G",
209
- "shape" => "N",
210
- "shapefile" => "N",
211
- "showboxes" => "ENG",
212
- "sides" => "N",
213
- "size" => "G",
214
- "skew" => "N",
215
- "splines" => "G",
216
- "start" => "G",
217
- "style" => "ENC",
218
- "stylesheet" => "G",
219
- "tailURL" => "E",
220
- "tailclip" => "E",
221
- "tailhref" => "E",
222
- "taillabel" => "E",
223
- "tailport" => "E",
224
- "tailtarget" => "E",
225
- "tailtooltip" => "E",
226
- "target" => "ENGC",
227
- "tooltip" => "NEC",
228
- # "toplabel" => "N",
229
- "truecolor" => "G",
230
- "vertices" => "N",
231
- "viewport" => "G",
232
- "voro_margin" => "G",
233
- "weight" => "E",
234
- "width" => "N",
235
- "z" => "N"
118
+ "Damping" => { :usedBy => "G", :type => :EscString },
119
+ "K" => { :usedBy => "GC", :type => :EscString },
120
+ "URL" => { :usedBy => "ENGC", :type => :EscString },
121
+ "arrowhead" => { :usedBy => "E", :type => :EscString },
122
+ "arrowsize" => { :usedBy => "E", :type => :EscString },
123
+ "arrowtail" => { :usedBy => "E", :type => :EscString },
124
+ "aspect" => { :usedBy => "G", :type => :EscString },
125
+ "bb" => { :usedBy => "G", :type => :EscString },
126
+ "bgcolor" => { :usedBy => "GC", :type => :EscString },
127
+ "center" => { :usedBy => "G", :type => :EscString },
128
+ "charset" => { :usedBy => "G", :type => :EscString },
129
+ "clusterrank" => { :usedBy => "G", :type => :EscString },
130
+ "color" => { :usedBy => "ENC", :type => :EscString },
131
+ "colorscheme" => { :usedBy => "ENCG", :type => :EscString },
132
+ "comment" => { :usedBy => "ENG", :type => :EscString },
133
+ "compound" => { :usedBy => "G", :type => :EscString },
134
+ "concentrate" => { :usedBy => "G", :type => :EscString },
135
+ "constraint" => { :usedBy => "E", :type => :EscString },
136
+ "decorate" => { :usedBy => "E", :type => :EscString },
137
+ "defaultdist" => { :usedBy => "G", :type => :EscString },
138
+ "dim" => { :usedBy => "G", :type => :EscString },
139
+ "dimen" => { :usedBy => "G", :type => :EscString },
140
+ "dir" => { :usedBy => "E", :type => :EscString },
141
+ "diredgeconstraints" => { :usedBy => "G", :type => :EscString },
142
+ "distortion" => { :usedBy => "N", :type => :EscString },
143
+ "dpi" => { :usedBy => "G", :type => :EscString },
144
+ "edgeURL" => { :usedBy => "E", :type => :EscString },
145
+ "edgehref" => { :usedBy => "E", :type => :EscString },
146
+ "edgetarget" => { :usedBy => "E", :type => :EscString },
147
+ "edgetooltip" => { :usedBy => "E", :type => :EscString },
148
+ "epsilon" => { :usedBy => "G", :type => :EscString },
149
+ "esep" => { :usedBy => "G", :type => :EscString },
150
+ "fillcolor" => { :usedBy => "NC", :type => :EscString },
151
+ "fixedsize" => { :usedBy => "N", :type => :EscString },
152
+ "fontcolor" => { :usedBy => "ENGC", :type => :EscString },
153
+ "fontname" => { :usedBy => "ENGC", :type => :EscString },
154
+ "fontnames" => { :usedBy => "G", :type => :EscString },
155
+ "fontpath" => { :usedBy => "G", :type => :EscString },
156
+ "fontsize" => { :usedBy => "ENGC", :type => :EscString },
157
+ "group" => { :usedBy => "N", :type => :EscString },
158
+ "headURL" => { :usedBy => "E", :type => :EscString },
159
+ "headclip" => { :usedBy => "E", :type => :EscString },
160
+ "headhref" => { :usedBy => "E", :type => :EscString },
161
+ "headlabel" => { :usedBy => "E", :type => :EscString },
162
+ "headport" => { :usedBy => "E", :type => :EscString },
163
+ "headtarget" => { :usedBy => "E", :type => :EscString },
164
+ "headtooltip" => { :usedBy => "E", :type => :EscString },
165
+ "height" => { :usedBy => "N", :type => :EscString },
166
+ "href" => { :usedBy => "NE", :type => :EscString },
167
+ "html" => { :usedBy => "N", :type => :HtmlString }, # API extension
168
+ "id" => { :usedBy => "ENG", :type => :EscString },
169
+ "image" => { :usedBy => "N", :type => :EscString },
170
+ "imagescale" => { :usedBy => "N", :type => :EscString },
171
+ "label" => { :usedBy => "ENGC", :type => :EscString },
172
+ "labelURL" => { :usedBy => "E", :type => :EscString },
173
+ "labelangle" => { :usedBy => "E", :type => :EscString },
174
+ "labeldistance" => { :usedBy => "E", :type => :EscString },
175
+ "labelfloat" => { :usedBy => "E", :type => :EscString },
176
+ "labelfontcolor" => { :usedBy => "E", :type => :EscString },
177
+ "labelfontname" => { :usedBy => "E", :type => :EscString },
178
+ "labelfontsize" => { :usedBy => "E", :type => :EscString },
179
+ "labelhref" => { :usedBy => "E", :type => :EscString },
180
+ "labeljust" => { :usedBy => "GC", :type => :EscString },
181
+ "labelloc" => { :usedBy => "GCN", :type => :EscString },
182
+ "labeltarget" => { :usedBy => "E", :type => :EscString },
183
+ "labeltooltip" => { :usedBy => "E", :type => :EscString },
184
+ "landscape" => { :usedBy => "G", :type => :EscString },
185
+ "layer" => { :usedBy => "EN", :type => :EscString },
186
+ "layers" => { :usedBy => "G", :type => :EscString },
187
+ "layersep" => { :usedBy => "G", :type => :EscString },
188
+ "layout" => { :usedBy => "G", :type => :EscString },
189
+ "len" => { :usedBy => "E", :type => :EscString },
190
+ "levels" => { :usedBy => "G", :type => :EscString },
191
+ "levelsgap" => { :usedBy => "G", :type => :EscString },
192
+ "lhead" => { :usedBy => "E", :type => :EscString },
193
+ "lp" => { :usedBy => "EGC", :type => :EscString },
194
+ "ltail" => { :usedBy => "E", :type => :EscString },
195
+ "margin" => { :usedBy => "NG", :type => :EscString },
196
+ "maxiter" => { :usedBy => "G", :type => :EscString },
197
+ "mclimit" => { :usedBy => "G", :type => :EscString },
198
+ "mindist" => { :usedBy => "G", :type => :EscString },
199
+ "minlen" => { :usedBy => "E", :type => :EscString },
200
+ "mode" => { :usedBy => "G", :type => :EscString },
201
+ "model" => { :usedBy => "G", :type => :EscString },
202
+ "mosek" => { :usedBy => "G", :type => :EscString },
203
+ "nodesep" => { :usedBy => "G", :type => :EscString },
204
+ "nojustify" => { :usedBy => "GCNE", :type => :EscString },
205
+ "normalize" => { :usedBy => "G", :type => :EscString },
206
+ "nslimit" => { :usedBy => "G", :type => :EscString },
207
+ "nslimit1" => { :usedBy => "G", :type => :EscString },
208
+ "ordering" => { :usedBy => "G", :type => :EscString },
209
+ "orientation" => { :usedBy => "NG", :type => :EscString },
210
+ "outputorder" => { :usedBy => "G", :type => :EscString },
211
+ "overlap" => { :usedBy => "G", :type => :EscString },
212
+ "overlap_scaling" => { :usedBy => "G", :type => :EscString },
213
+ "pack" => { :usedBy => "G", :type => :EscString },
214
+ "packmode" => { :usedBy => "G", :type => :EscString },
215
+ "pad" => { :usedBy => "G", :type => :EscString },
216
+ "page" => { :usedBy => "G", :type => :EscString },
217
+ "pagedir" => { :usedBy => "G", :type => :EscString },
218
+ "pencolor" => { :usedBy => "C", :type => :EscString },
219
+ "penwidth" => { :usedBy => "CNE", :type => :EscString },
220
+ "peripheries" => { :usedBy => "NC", :type => :EscString },
221
+ "pin" => { :usedBy => "N", :type => :EscString },
222
+ "pos" => { :usedBy => "EN", :type => :EscString },
223
+ "quadtree" => { :usedBy => "G", :type => :EscString },
224
+ "quantum" => { :usedBy => "G", :type => :EscString },
225
+ "rank" => { :usedBy => "S", :type => :EscString },
226
+ "rankdir" => { :usedBy => "G", :type => :EscString },
227
+ "ranksep" => { :usedBy => "G", :type => :EscString },
228
+ "ratio" => { :usedBy => "G", :type => :EscString },
229
+ "rects" => { :usedBy => "N", :type => :EscString },
230
+ "regular" => { :usedBy => "N", :type => :EscString },
231
+ "remincross" => { :usedBy => "G", :type => :EscString },
232
+ "repulsiveforce" => { :usedBy => "G", :type => :EscString },
233
+ "resolution" => { :usedBy => "G", :type => :EscString },
234
+ "root" => { :usedBy => "GN", :type => :EscString },
235
+ "rotate" => { :usedBy => "G", :type => :EscString },
236
+ "samehead" => { :usedBy => "E", :type => :EscString },
237
+ "sametail" => { :usedBy => "E", :type => :EscString },
238
+ "samplepoints" => { :usedBy => "G", :type => :EscString },
239
+ "searchsize" => { :usedBy => "G", :type => :EscString },
240
+ "sep" => { :usedBy => "G", :type => :EscString },
241
+ "shape" => { :usedBy => "N", :type => :EscString },
242
+ "shapefile" => { :usedBy => "N", :type => :EscString },
243
+ "showboxes" => { :usedBy => "ENG", :type => :EscString },
244
+ "sides" => { :usedBy => "N", :type => :EscString },
245
+ "size" => { :usedBy => "G", :type => :EscString },
246
+ "skew" => { :usedBy => "N", :type => :EscString },
247
+ "smoothing" => { :usedBy => "G", :type => :EscString },
248
+ "sortv" => { :usedBy => "GCN", :type => :EscString },
249
+ "splines" => { :usedBy => "G", :type => :EscString },
250
+ "start" => { :usedBy => "G", :type => :EscString },
251
+ "style" => { :usedBy => "ENC", :type => :EscString },
252
+ "stylesheet" => { :usedBy => "G", :type => :EscString },
253
+ "tailURL" => { :usedBy => "E", :type => :EscString },
254
+ "tailclip" => { :usedBy => "E", :type => :EscString },
255
+ "tailhref" => { :usedBy => "E", :type => :EscString },
256
+ "taillabel" => { :usedBy => "E", :type => :EscString },
257
+ "tailport" => { :usedBy => "E", :type => :EscString },
258
+ "tailtarget" => { :usedBy => "E", :type => :EscString },
259
+ "tailtooltip" => { :usedBy => "E", :type => :EscString },
260
+ "target" => { :usedBy => "ENGC", :type => :EscString },
261
+ "tooltip" => { :usedBy => "NEC", :type => :EscString },
262
+ "truecolor" => { :usedBy => "G", :type => :EscString },
263
+ "vertices" => { :usedBy => "N", :type => :EscString },
264
+ "viewport" => { :usedBy => "G", :type => :EscString },
265
+ "voro_margin" => { :usedBy => "G", :type => :EscString },
266
+ "weight" => { :usedBy => "E", :type => :EscString },
267
+ "width" => { :usedBy => "N", :type => :EscString },
268
+ "z" => { :usedBy => "N", :type => :EscString }
236
269
  }
237
270
 
238
271
  ## Const: Graph attributs
239
- GRAPHSATTRS = Constants::getAttrsFor( :G ) + Constants::getAttrsFor( :S ) + Constants::getAttrsFor( :C )
272
+ GRAPHSATTRS = Constants::getAttrsFor( /G|S|C/ )
240
273
 
241
274
  ## Const: Node attributs
242
- NODESATTRS = Constants::getAttrsFor( :N )
275
+ NODESATTRS = Constants::getAttrsFor( /N/ )
243
276
 
244
277
  ## Const: Edge attributs
245
- EDGESATTRS = Constants::getAttrsFor( :E )
278
+ EDGESATTRS = Constants::getAttrsFor( /E/ )
246
279
  end