ruby-graphviz_c 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.
Files changed (184) hide show
  1. checksums.yaml +7 -0
  2. data/.gemrc +0 -0
  3. data/.gitignore +9 -0
  4. data/.travis.yml +7 -0
  5. data/AUTHORS.rdoc +33 -0
  6. data/CHANGELOG.rdoc +287 -0
  7. data/COPYING.rdoc +133 -0
  8. data/Gemfile +4 -0
  9. data/README.rdoc +206 -0
  10. data/Rakefile +71 -0
  11. data/bin/dot2ruby +91 -0
  12. data/bin/gem2gv +165 -0
  13. data/bin/git2gv +167 -0
  14. data/bin/ruby2gv +234 -0
  15. data/bin/xml2gv +96 -0
  16. data/examples/dot/JSP.dot +52 -0
  17. data/examples/dot/balanced.dot +36 -0
  18. data/examples/dot/cluster.dot +30 -0
  19. data/examples/dot/dotgraph.dot +28 -0
  20. data/examples/dot/fsm.dot +20 -0
  21. data/examples/dot/genetic.dot +118 -0
  22. data/examples/dot/hello.dot +1 -0
  23. data/examples/dot/hello_test.rb +33 -0
  24. data/examples/dot/lion_share.dot +103 -0
  25. data/examples/dot/prof.dot +150 -0
  26. data/examples/dot/psg.dot +28 -0
  27. data/examples/dot/rank.dot +6 -0
  28. data/examples/dot/sdh.dot +284 -0
  29. data/examples/dot/siblings.dot +492 -0
  30. data/examples/dot/so-sample001.gv +30 -0
  31. data/examples/dot/so-sample002.gv +33 -0
  32. data/examples/dot/so-sample003.gv +45 -0
  33. data/examples/dot/test.dot +17 -0
  34. data/examples/dot/test_parse.rb +13 -0
  35. data/examples/dot/this_crach_with_dot_2.20.dot +24 -0
  36. data/examples/dot/unix.dot +104 -0
  37. data/examples/graphml/attributes.ext.graphml +12 -0
  38. data/examples/graphml/attributes.graphml +40 -0
  39. data/examples/graphml/cluster.graphml +75 -0
  40. data/examples/graphml/failed_graph.graphml +461 -0
  41. data/examples/graphml/hyper.graphml +29 -0
  42. data/examples/graphml/nested.graphml +54 -0
  43. data/examples/graphml/port.graphml +32 -0
  44. data/examples/graphml/simple.graphml +30 -0
  45. data/examples/hello.png +0 -0
  46. data/examples/rgv/rgv.ps +125 -0
  47. data/examples/rgv/test_rgv.rb +12 -0
  48. data/examples/sample01.rb +32 -0
  49. data/examples/sample02.rb +42 -0
  50. data/examples/sample03.rb +31 -0
  51. data/examples/sample04.rb +22 -0
  52. data/examples/sample05.rb +32 -0
  53. data/examples/sample06.rb +46 -0
  54. data/examples/sample07.rb +23 -0
  55. data/examples/sample08.rb +34 -0
  56. data/examples/sample09.rb +50 -0
  57. data/examples/sample10.rb +50 -0
  58. data/examples/sample11.rb +42 -0
  59. data/examples/sample12.rb +55 -0
  60. data/examples/sample13.rb +48 -0
  61. data/examples/sample14.rb +44 -0
  62. data/examples/sample15.rb +25 -0
  63. data/examples/sample16.rb +8 -0
  64. data/examples/sample17.rb +92 -0
  65. data/examples/sample18.rb +24 -0
  66. data/examples/sample19.rb +59 -0
  67. data/examples/sample20.rb +47 -0
  68. data/examples/sample21.rb +12 -0
  69. data/examples/sample22.rb +10 -0
  70. data/examples/sample23.rb +11 -0
  71. data/examples/sample24.rb +11 -0
  72. data/examples/sample25.rb +11 -0
  73. data/examples/sample26.rb +8 -0
  74. data/examples/sample27.rb +8 -0
  75. data/examples/sample28.rb +12 -0
  76. data/examples/sample29.rb +8 -0
  77. data/examples/sample30.rb +12 -0
  78. data/examples/sample31.rb +10 -0
  79. data/examples/sample32.rb +14 -0
  80. data/examples/sample33.rb +43 -0
  81. data/examples/sample34.rb +29 -0
  82. data/examples/sample35.rb +43 -0
  83. data/examples/sample36.rb +35 -0
  84. data/examples/sample37.rb +87 -0
  85. data/examples/sample38.rb +12 -0
  86. data/examples/sample39.rb +11 -0
  87. data/examples/sample40.rb +17 -0
  88. data/examples/sample41.rb +8 -0
  89. data/examples/sample42.rb +35 -0
  90. data/examples/sample43.rb +26 -0
  91. data/examples/sample44.rb +97 -0
  92. data/examples/sample45.rb +24 -0
  93. data/examples/sample46.rb +43 -0
  94. data/examples/sample47.rb +7 -0
  95. data/examples/sample48.rb +62 -0
  96. data/examples/sample49.rb +10 -0
  97. data/examples/sample50.rb +215 -0
  98. data/examples/sample51.rb +37 -0
  99. data/examples/sample52.rb +62 -0
  100. data/examples/sample53.rb +26 -0
  101. data/examples/sample54.rb +26 -0
  102. data/examples/sample55.rb +9 -0
  103. data/examples/sample56.rb +10 -0
  104. data/examples/sample57.rb +8 -0
  105. data/examples/sample58.rb +33 -0
  106. data/examples/sample59.rb +14 -0
  107. data/examples/sample60.rb +12 -0
  108. data/examples/sample61.rb +12 -0
  109. data/examples/sample62.rb +24 -0
  110. data/examples/sample63.rb +32 -0
  111. data/examples/sample64.rb +31 -0
  112. data/examples/sample65.rb +9 -0
  113. data/examples/sample66.rb +4 -0
  114. data/examples/sample67.rb +10 -0
  115. data/examples/sample68.rb +27 -0
  116. data/examples/sample69.rb +23 -0
  117. data/examples/sample70.rb +9 -0
  118. data/examples/sample99.rb +70 -0
  119. data/examples/sdlshapes/README +2 -0
  120. data/examples/sdlshapes/sdl.ps +655 -0
  121. data/examples/sdlshapes/sdlshapes.dot +78 -0
  122. data/examples/test.xml +26 -0
  123. data/examples/theory/pert.rb +47 -0
  124. data/examples/theory/tests.rb +87 -0
  125. data/lib/ext/gvpr/dot2ruby.g +185 -0
  126. data/lib/graphviz/attrs.rb +73 -0
  127. data/lib/graphviz/constants.rb +294 -0
  128. data/lib/graphviz/core_ext.rb +64 -0
  129. data/lib/graphviz/dot2ruby.rb +59 -0
  130. data/lib/graphviz/dot_script.rb +109 -0
  131. data/lib/graphviz/dsl.rb +67 -0
  132. data/lib/graphviz/edge.rb +197 -0
  133. data/lib/graphviz/elements.rb +39 -0
  134. data/lib/graphviz/ext.rb +17 -0
  135. data/lib/graphviz/family_tree/couple.rb +63 -0
  136. data/lib/graphviz/family_tree/generation.rb +39 -0
  137. data/lib/graphviz/family_tree/person.rb +120 -0
  138. data/lib/graphviz/family_tree/sibling.rb +13 -0
  139. data/lib/graphviz/family_tree.rb +118 -0
  140. data/lib/graphviz/graphml.rb +268 -0
  141. data/lib/graphviz/math/matrix.rb +221 -0
  142. data/lib/graphviz/node.rb +160 -0
  143. data/lib/graphviz/nothugly/nothugly.xsl +321 -0
  144. data/lib/graphviz/nothugly.rb +63 -0
  145. data/lib/graphviz/theory.rb +321 -0
  146. data/lib/graphviz/types/arrow_type.rb +32 -0
  147. data/lib/graphviz/types/color.rb +58 -0
  148. data/lib/graphviz/types/color_list.rb +24 -0
  149. data/lib/graphviz/types/esc_string.rb +20 -0
  150. data/lib/graphviz/types/gv_bool.rb +49 -0
  151. data/lib/graphviz/types/gv_double.rb +32 -0
  152. data/lib/graphviz/types/html_string.rb +18 -0
  153. data/lib/graphviz/types/lbl_string.rb +22 -0
  154. data/lib/graphviz/types/rect.rb +35 -0
  155. data/lib/graphviz/types/spline_type.rb +77 -0
  156. data/lib/graphviz/types.rb +22 -0
  157. data/lib/graphviz/utils/colors.rb +1018 -0
  158. data/lib/graphviz/utils.rb +70 -0
  159. data/lib/graphviz/xml.rb +119 -0
  160. data/lib/graphviz.rb +967 -0
  161. data/lib/ruby-graphviz.rb +1 -0
  162. data/man/dot2ruby.1 +66 -0
  163. data/man/dot2ruby.1.ronn +55 -0
  164. data/man/gem2gv.1 +60 -0
  165. data/man/gem2gv.1.ronn +47 -0
  166. data/man/git2gv.1 +48 -0
  167. data/man/git2gv.1.ronn +40 -0
  168. data/man/ruby2gv.1 +60 -0
  169. data/man/ruby2gv.1.ronn +47 -0
  170. data/man/xml2gv.1 +48 -0
  171. data/man/xml2gv.1.ronn +39 -0
  172. data/ruby-graphviz.gemspec +47 -0
  173. data/setup.rb +1585 -0
  174. data/test/helper.rb +13 -0
  175. data/test/support.rb +95 -0
  176. data/test/test_dot_script.rb +47 -0
  177. data/test/test_examples.rb +151 -0
  178. data/test/test_graph.rb +115 -0
  179. data/test/test_search.rb +29 -0
  180. data/test/test_subgraph.rb +27 -0
  181. data/test/test_theory.rb +98 -0
  182. data/test/test_types.rb +65 -0
  183. data/test/test_utils_colors.rb +52 -0
  184. metadata +301 -0
@@ -0,0 +1,294 @@
1
+ # Copyright (C) 2004 - 2012 Gregoire Lejeune <gregoire.lejeune@free.fr>
2
+ #
3
+ # This program is free software; you can redistribute it and/or modify
4
+ # it under the terms of the GNU General Public License as published by
5
+ # the Free Software Foundation; either version 2 of the License, or
6
+ # (at your option) any later version.
7
+ #
8
+ # This program is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
+ # GNU General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU General Public License
14
+ # along with this program; if not, write to the Free Software
15
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16
+
17
+ # Constants for ruby-graphviz
18
+ #
19
+ # GraphViz::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
+ # GraphViz::Constants::PROGRAMS: The possible programs
29
+ # "dot", "neato", "twopi", "fdp", "circo"
30
+ #
31
+ # GraphViz::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
+ #
42
+ class GraphViz
43
+ module Constants
44
+ RGV_VERSION = "1.1.0"
45
+
46
+ ## Const: Output formats
47
+ FORMATS = [
48
+ "bmp",
49
+ "canon",
50
+ "dot",
51
+ "xdot",
52
+ "cmap",
53
+ "dia",
54
+ "eps",
55
+ "fig",
56
+ "gd",
57
+ "gd2",
58
+ "gif",
59
+ "gtk",
60
+ "hpgl",
61
+ "ico",
62
+ "imap",
63
+ "cmapx",
64
+ "imap_np",
65
+ "cmapx_np",
66
+ "ismap",
67
+ "jpeg",
68
+ "jpg",
69
+ "jpe",
70
+ "mif",
71
+ "mp",
72
+ "pcl",
73
+ "pdf",
74
+ "pic",
75
+ "plain",
76
+ "plain-ext",
77
+ "png",
78
+ "ps",
79
+ "ps2",
80
+ "svg",
81
+ "svgz",
82
+ "tga",
83
+ "tiff",
84
+ "tif",
85
+ "vml",
86
+ "vmlz",
87
+ "vrml",
88
+ "vtx",
89
+ "wbmp",
90
+ "xlib",
91
+ "none"
92
+ ]
93
+
94
+ ## Const: programs
95
+ PROGRAMS = [
96
+ "dot",
97
+ "neato",
98
+ "twopi",
99
+ "fdp",
100
+ "circo",
101
+ "sfdp"
102
+ ]
103
+
104
+ ## Const: graphs type
105
+ GRAPHTYPE = [
106
+ "digraph",
107
+ "graph",
108
+ "strict digraph"
109
+ ]
110
+
111
+ def self.getAttrsFor( x )
112
+ list = {}
113
+ GENCS_ATTRS.each { |k,v|
114
+ list[k] = v[:type] if x.match( v[:usedBy] ) and not list.keys.include?(k)
115
+ }
116
+ list
117
+ end
118
+
119
+ # E, N, G, S and C represent edges, nodes, the root graph, subgraphs and cluster subgraphs, respectively
120
+ GENCS_ATTRS = {
121
+ "Damping" => { :usedBy => "G", :type => :GvDouble },
122
+ "K" => { :usedBy => "GC", :type => :GvDouble },
123
+ "URL" => { :usedBy => "ENGC", :type => :EscString },
124
+ "area" => { :usedBy => "NC", :type => :GvDouble },
125
+ "arrowhead" => { :usedBy => "E", :type => :ArrowType }, # arrowType
126
+ "arrowsize" => { :usedBy => "E", :type => :GvDouble },
127
+ "arrowtail" => { :usedBy => "E", :type => :ArrowType }, # arrowType
128
+ "aspect" => { :usedBy => "G", :type => :EscString }, # aspectType
129
+ "bb" => { :usedBy => "G", :type => :Rect }, # rect
130
+ "bgcolor" => { :usedBy => "GC", :type => :Color }, # color
131
+ "center" => { :usedBy => "G", :type => :GvBool }, # bool
132
+ "charset" => { :usedBy => "G", :type => :EscString }, # string
133
+ "clusterrank" => { :usedBy => "G", :type => :EscString }, # clusterMode
134
+ "color" => { :usedBy => "ENC", :type => :ColorList }, # color, colorList
135
+ "colorscheme" => { :usedBy => "ENCG", :type => :EscString }, # string
136
+ "comment" => { :usedBy => "ENG", :type => :EscString }, # string
137
+ "compound" => { :usedBy => "G", :type => :GvBool }, # bool
138
+ "concentrate" => { :usedBy => "G", :type => :GvBool }, # bool
139
+ "constraint" => { :usedBy => "E", :type => :GvBool }, # bool
140
+ "decorate" => { :usedBy => "E", :type => :GvBool }, # bool
141
+ "defaultdist" => { :usedBy => "G", :type => :GvDouble },
142
+ "dim" => { :usedBy => "G", :type => :EscString }, # int
143
+ "dimen" => { :usedBy => "G", :type => :EscString }, # int
144
+ "dir" => { :usedBy => "E", :type => :EscString }, # dirType
145
+ "diredgeconstraints" => { :usedBy => "G", :type => :EscString }, # string, bool
146
+ "distortion" => { :usedBy => "N", :type => :GvDouble },
147
+ "dpi" => { :usedBy => "G", :type => :GvDouble },
148
+ "edgeURL" => { :usedBy => "E", :type => :EscString },
149
+ "edgehref" => { :usedBy => "E", :type => :EscString },
150
+ "edgetarget" => { :usedBy => "E", :type => :EscString },
151
+ "edgetooltip" => { :usedBy => "E", :type => :EscString },
152
+ "epsilon" => { :usedBy => "G", :type => :GvDouble },
153
+ "esep" => { :usedBy => "G", :type => :EscString }, # GvDouble , pointf
154
+ "fillcolor" => { :usedBy => "NEC", :type => :Color }, # color
155
+ "fixedsize" => { :usedBy => "N", :type => :GvBool }, # bool
156
+ "fontcolor" => { :usedBy => "ENGC", :type => :Color }, # color
157
+ "fontname" => { :usedBy => "ENGC", :type => :EscString }, # string
158
+ "fontnames" => { :usedBy => "G", :type => :EscString }, # string
159
+ "fontpath" => { :usedBy => "G", :type => :EscString }, # string
160
+ "fontsize" => { :usedBy => "ENGC", :type => :GvDouble },
161
+ "forcelabels" => { :usedBy => "G", :type => :GvBool}, # bool
162
+ "gradientangle" => { :usedBy => "NCG", :type => :EscString }, # int
163
+ "group" => { :usedBy => "N", :type => :EscString }, # string
164
+ "headURL" => { :usedBy => "E", :type => :EscString },
165
+ "headclip" => { :usedBy => "E", :type => :GvBool }, # bool
166
+ "headhref" => { :usedBy => "E", :type => :EscString },
167
+ "headlabel" => { :usedBy => "E", :type => :EscString }, # LblString
168
+ "headport" => { :usedBy => "E", :type => :EscString }, # portPos
169
+ "headtarget" => { :usedBy => "E", :type => :EscString },
170
+ "headtooltip" => { :usedBy => "E", :type => :EscString },
171
+ "height" => { :usedBy => "N", :type => :GvDouble },
172
+ "href" => { :usedBy => "ENGC", :type => :EscString },
173
+ "id" => { :usedBy => "ENG", :type => :EscString },
174
+ "image" => { :usedBy => "N", :type => :EscString }, # string
175
+ "imagepath" => { :usedBy => "G", :type => :EscString }, # string
176
+ "imagescale" => { :usedBy => "N", :type => :EscString }, # bool, string
177
+ "label" => { :usedBy => "ENGC", :type => :LblString },
178
+ "labelURL" => { :usedBy => "E", :type => :EscString },
179
+ "label_scheme" => { :usedBy => "G", :type => :EscString }, # int
180
+ "labelangle" => { :usedBy => "E", :type => :GvDouble },
181
+ "labeldistance" => { :usedBy => "E", :type => :GvDouble },
182
+ "labelfloat" => { :usedBy => "E", :type => :GvBool }, # bool
183
+ "labelfontcolor" => { :usedBy => "E", :type => :Color }, # color
184
+ "labelfontname" => { :usedBy => "E", :type => :EscString }, # string
185
+ "labelfontsize" => { :usedBy => "E", :type => :GvDouble },
186
+ "labelhref" => { :usedBy => "E", :type => :EscString },
187
+ "labeljust" => { :usedBy => "GC", :type => :EscString }, # string
188
+ "labelloc" => { :usedBy => "GCN", :type => :EscString }, # string
189
+ "labeltarget" => { :usedBy => "E", :type => :EscString },
190
+ "labeltooltip" => { :usedBy => "E", :type => :EscString },
191
+ "landscape" => { :usedBy => "G", :type => :GvBool }, # bool
192
+ "layer" => { :usedBy => "ENC", :type => :EscString }, # layerRange
193
+ "layerlistsep" => { :usedBy => "G", :type => :EscString }, # string
194
+ "layers" => { :usedBy => "G", :type => :EscString }, # layerList
195
+ "layerselect" => { :usedBy => "G", :type => :EscString }, # layerRange
196
+ "layersep" => { :usedBy => "G", :type => :EscString }, # string
197
+ "layout" => { :usedBy => "G", :type => :EscString }, # string
198
+ "len" => { :usedBy => "E", :type => :GvDouble },
199
+ "levels" => { :usedBy => "G", :type => :EscString }, # int
200
+ "levelsgap" => { :usedBy => "G", :type => :GvDouble },
201
+ "lhead" => { :usedBy => "E", :type => :EscString }, # string
202
+ "lheight" => { :usedBy => "GC", :type => :GvDouble },
203
+ "lp" => { :usedBy => "EGC", :type => :EscString }, # point
204
+ "ltail" => { :usedBy => "E", :type => :EscString }, # string
205
+ "lwidth" => { :usedBy => "GC", :type => :GvDouble },
206
+ "margin" => { :usedBy => "NGC", :type => :EscString }, # GvDouble , pointf
207
+ "maxiter" => { :usedBy => "G", :type => :EscString }, # int
208
+ "mclimit" => { :usedBy => "G", :type => :GvDouble },
209
+ "mindist" => { :usedBy => "G", :type => :GvDouble },
210
+ "minlen" => { :usedBy => "E", :type => :EscString }, # int
211
+ "mode" => { :usedBy => "G", :type => :EscString }, # string
212
+ "model" => { :usedBy => "G", :type => :EscString }, # string
213
+ "mosek" => { :usedBy => "G", :type => :GvBool }, # bool
214
+ "nodesep" => { :usedBy => "G", :type => :GvDouble },
215
+ "nojustify" => { :usedBy => "GCNE", :type => :GvBool }, # bool
216
+ "normalize" => { :usedBy => "G", :type => :GvBool }, # bool
217
+ "nslimit" => { :usedBy => "G", :type => :GvDouble },
218
+ "nslimit1" => { :usedBy => "G", :type => :GvDouble },
219
+ "ordering" => { :usedBy => "GN", :type => :EscString }, # string
220
+ "orientation" => { :usedBy => "NG", :type => :GvDouble }, # N: double, G: string
221
+ "outputorder" => { :usedBy => "G", :type => :EscString }, # outputMode
222
+ "overlap" => { :usedBy => "G", :type => :EscString }, # string, bool
223
+ "overlap_scaling" => { :usedBy => "G", :type => :GvDouble },
224
+ "pack" => { :usedBy => "G", :type => :EscString }, # bool, int
225
+ "packmode" => { :usedBy => "G", :type => :EscString }, # packMode
226
+ "pad" => { :usedBy => "G", :type => :EscString }, # GvDouble , pointf
227
+ "page" => { :usedBy => "G", :type => :EscString }, # GvDouble , pointf
228
+ "pagedir" => { :usedBy => "G", :type => :EscString }, # pageDir
229
+ "pencolor" => { :usedBy => "C", :type => :Color }, # color
230
+ "penwidth" => { :usedBy => "CNE", :type => :GvDouble },
231
+ "peripheries" => { :usedBy => "NC", :type => :EscString }, # int
232
+ "pin" => { :usedBy => "N", :type => :GvBool }, # bool
233
+ "pos" => { :usedBy => "EN", :type => :SplineType }, # point, splineTypes
234
+ "quadtree" => { :usedBy => "G", :type => :GvBool }, # bool
235
+ "quantum" => { :usedBy => "G", :type => :GvDouble },
236
+ "rank" => { :usedBy => "S", :type => :EscString }, # rankType
237
+ "rankdir" => { :usedBy => "G", :type => :EscString }, # rankDir
238
+ "ranksep" => { :usedBy => "G", :type => :EscString }, # GvDouble, doubleList
239
+ "ratio" => { :usedBy => "G", :type => :EscString }, # GvDouble, String
240
+ "rects" => { :usedBy => "N", :type => :Rect }, # rect
241
+ "regular" => { :usedBy => "N", :type => :GvBool }, # bool
242
+ "remincross" => { :usedBy => "G", :type => :GvBool }, # bool
243
+ "repulsiveforce" => { :usedBy => "G", :type => :GvDouble },
244
+ "resolution" => { :usedBy => "G", :type => :GvDouble },
245
+ "root" => { :usedBy => "GN", :type => :EscString }, # bool, string
246
+ "rotate" => { :usedBy => "G", :type => :EscString }, # int
247
+ "rotation" => { :usedBy => "G", :type => :GvDouble },
248
+ "samehead" => { :usedBy => "E", :type => :EscString }, # string
249
+ "sametail" => { :usedBy => "E", :type => :EscString }, # string
250
+ "samplepoints" => { :usedBy => "G", :type => :EscString }, # int
251
+ "scale" => { :usedBy => "G", :type => :EscString }, # double, pointf
252
+ "searchsize" => { :usedBy => "G", :type => :EscString }, # int
253
+ "sep" => { :usedBy => "G", :type => :EscString }, # double , pointf
254
+ "shape" => { :usedBy => "N", :type => :EscString }, # shape
255
+ "shapefile" => { :usedBy => "N", :type => :EscString }, # string
256
+ "showboxes" => { :usedBy => "ENG", :type => :EscString }, # int
257
+ "sides" => { :usedBy => "N", :type => :EscString }, # int
258
+ "size" => { :usedBy => "NG", :type => :EscString }, # double , pointf
259
+ "skew" => { :usedBy => "N", :type => :GvDouble },
260
+ "smoothing" => { :usedBy => "G", :type => :EscString }, # smoothType
261
+ "sortv" => { :usedBy => "GCN", :type => :EscString }, # int
262
+ "splines" => { :usedBy => "G", :type => :EscString }, # bool, string
263
+ "start" => { :usedBy => "G", :type => :EscString }, # startType
264
+ "style" => { :usedBy => "ENCG", :type => :EscString }, # style
265
+ "stylesheet" => { :usedBy => "G", :type => :EscString }, # string
266
+ "tailURL" => { :usedBy => "E", :type => :EscString },
267
+ "tailclip" => { :usedBy => "E", :type => :GvBool }, # bool
268
+ "tailhref" => { :usedBy => "E", :type => :EscString },
269
+ "taillabel" => { :usedBy => "E", :type => :EscString }, # lblString
270
+ "tailport" => { :usedBy => "E", :type => :EscString }, # portPos
271
+ "tailtarget" => { :usedBy => "E", :type => :EscString },
272
+ "tailtooltip" => { :usedBy => "E", :type => :EscString },
273
+ "target" => { :usedBy => "ENGC", :type => :EscString }, # escString, string
274
+ "tooltip" => { :usedBy => "NEC", :type => :EscString },
275
+ "truecolor" => { :usedBy => "G", :type => :GvBool }, # bool
276
+ "vertices" => { :usedBy => "N", :type => :EscString }, # pointfList
277
+ "viewport" => { :usedBy => "G", :type => :EscString }, # viewPort
278
+ "voro_margin" => { :usedBy => "G", :type => :GvDouble },
279
+ "weight" => { :usedBy => "E", :type => :GvDouble },
280
+ "width" => { :usedBy => "N", :type => :GvDouble },
281
+ "xlabel" => { :usedBy => "EN", :type => :LblString },
282
+ "z" => { :usedBy => "N", :type => :GvDouble }
283
+ }
284
+
285
+ ## Const: Graph attributes
286
+ GRAPHSATTRS = GraphViz::Constants::getAttrsFor( /G|S|C/ )
287
+
288
+ ## Const: Node attributes
289
+ NODESATTRS = GraphViz::Constants::getAttrsFor( /N/ )
290
+
291
+ ## Const: Edge attributes
292
+ EDGESATTRS = GraphViz::Constants::getAttrsFor( /E/ )
293
+ end
294
+ end
@@ -0,0 +1,64 @@
1
+ class String
2
+ def self.random(size)
3
+ s = ""
4
+ d = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a
5
+ size.times {
6
+ s << d[rand(d.size)]
7
+ }
8
+ return s
9
+ end
10
+
11
+ def convert_base(from, to)
12
+ self.to_i(from).to_s(to)
13
+ end
14
+ end
15
+
16
+ class Object
17
+ def to_ruby
18
+ begin
19
+ eval self
20
+ rescue
21
+ self
22
+ end
23
+ end
24
+ end
25
+
26
+ # From : http://www.geekmade.co.uk/2008/09/ruby-tip-normalizing-hash-keys-as-symbols/
27
+ class Hash
28
+ def symbolize_keys
29
+ inject({}) do |options, (key, value)|
30
+ options[(key.to_sym rescue key) || key] = value
31
+ options
32
+ end
33
+ end
34
+
35
+ # x = {
36
+ # :none => String,
37
+ # :png => "file.png",
38
+ # :svg => "file.svg"
39
+ # }
40
+ #
41
+ # x.each_except( :key => [:none], :value => [/\.png$/] ) do |k, v|
42
+ # puts "#{k} -> #{v}"
43
+ # end
44
+ #
45
+ # => svg -> file.svg
46
+ def each_except( e, &b )
47
+ key_table = (e[:key]||[]).clone.delete_if {|i| i.kind_of? Regexp }
48
+ key_regexp = (e[:key]||[]).clone.delete_if {|i| key_table.include? i }.map {|i| i.to_s }.join("|")
49
+
50
+ value_table = (e[:value]||[]).clone.delete_if {|i| i.kind_of? Regexp }
51
+ value_regexp = (e[:value]||[]).clone.delete_if {|i| value_table.include? i }.map {|i| i.to_s }.join("|")
52
+
53
+ self.each do |k, v|
54
+ yield( k, v ) unless (key_table.size > 0 and key_table.include?(k)) or (key_regexp.size > 0 and k.to_s.match(key_regexp)) or (value_table.size > 0 and value_table.include?(v)) or (value_regexp.size > 0 and v.to_s.match(value_regexp))
55
+ end
56
+ end
57
+
58
+ unless self.method_defined? :key
59
+ # Add Hash#key to Ruby < 1.9
60
+ def key(v)
61
+ index(v)
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,59 @@
1
+ #!/usr/bin/env ruby
2
+ # Copyright (C) 2010 Gregoire Lejeune <gregoire.lejeune@free.fr>
3
+ #
4
+ # This program is free software; you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation; either version 2 of the License, or
7
+ # (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program; if not, write to the Free Software
16
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
+
18
+ require 'graphviz/ext'
19
+ require 'graphviz/utils'
20
+
21
+ class Dot2Ruby #:nodoc:
22
+ include GraphViz::Utils
23
+
24
+ def initialize( xGVPath, xOutFile, xOutFormat = nil ) #:nodoc:
25
+ paths = (xGVPath.nil?) ? [] : [xGVPath]
26
+ @xGvprPath = find_executable( 'gvpr', paths )
27
+ @xOutFile = xOutFile
28
+ @xOutFormat = xOutFormat || "_"
29
+ @gvprScript = GraphViz::Ext.find( "dot2ruby.g" )
30
+ end
31
+
32
+ def run( xFile ) #:nodoc:
33
+ xCmd = [@xGvprPath, '-f', @gvprScript, '-a', @xOutFormat, xFile]
34
+ xOutput = output_from_command( xCmd )
35
+ if @xOutFile.nil?
36
+ puts xOutput
37
+ else
38
+ File.open( @xOutFile, "w" ) do |io|
39
+ io.print xOutput
40
+ end
41
+ end
42
+ end
43
+
44
+ def eval( xFile ) #:nodoc:
45
+ xCmd = [@xGvprPath, '-f', @gvprScript, '-a', '-', xFile]
46
+ xOutput = output_from_command( xCmd )
47
+ instance_eval(xOutput)
48
+ return @_graph_eval
49
+ end
50
+
51
+ def eval_string( data ) #:nodoc:
52
+ t = Tempfile::open( File.basename(__FILE__) )
53
+ t.print( data )
54
+ t.close
55
+ result = self.eval(t.path)
56
+ t.close
57
+ return result
58
+ end
59
+ end
@@ -0,0 +1,109 @@
1
+ require "forwardable"
2
+ class GraphViz
3
+
4
+ class DOTScriptData
5
+ attr_accessor :type
6
+ def initialize(type = nil)
7
+ @data = []
8
+ @separator = ""
9
+ @type = type
10
+ end
11
+
12
+ def append(data)
13
+ @data << data
14
+ end
15
+ alias :<< :append
16
+
17
+ def add_attribute(name, value)
18
+ @data << @separator << name << " = " << value
19
+ @separator = determine_separator
20
+ end
21
+
22
+ def to_str
23
+ case @type
24
+ when "graph_attr" then "#{@data.join}#{@separator}"
25
+ when "node_attr" then "node[#{@data.join(' ')}];"
26
+ when "edge_attr" then "edge[#{@data.join(' ')}];"
27
+ else raise ArgumentError, "Wrong type: #{@type}."
28
+ end
29
+ end
30
+ alias :to_s :to_str
31
+
32
+ def empty?
33
+ @data.empty?
34
+ end
35
+
36
+ private
37
+
38
+ def determine_separator
39
+ case @type
40
+ when "graph_attr" then ";\n"
41
+ when "node_attr", "edge_attr" then ","
42
+ else raise ArgumentError, "Wrong type: #{@type}."
43
+ end
44
+ end
45
+
46
+ end
47
+
48
+ class DOTScript
49
+ extend Forwardable
50
+
51
+ def_delegators :@script, :end_with?
52
+
53
+ def initialize
54
+ @script = ''
55
+ end
56
+
57
+ def append(line)
58
+ @script << assure_ends_with(line.to_s,"\n")
59
+
60
+ self
61
+ end
62
+ alias :<< :append
63
+
64
+ def prepend(line)
65
+ @script = assure_ends_with(line.to_s,"\n") + @script
66
+
67
+ self
68
+ end
69
+
70
+ def make_subgraph(name)
71
+ prepend(assure_ends_with("subgraph #{name}"," {"))
72
+ end
73
+
74
+ def add_type(type, data)
75
+ return self if data.empty?
76
+
77
+ case type
78
+ when "graph_attr"
79
+ append_statement(" " + data)
80
+ when "node_attr"
81
+ append_statement(" node [" + data + "]")
82
+ when "edge_attr"
83
+ append_statement(" edge [" + data + "]")
84
+ else
85
+ raise ArgumentError,
86
+ "Unknown type: #{type}." <<
87
+ "Possible: 'graph_attr','node_attr','edge_attr'"
88
+ end
89
+
90
+ self
91
+ end
92
+
93
+ def to_str
94
+ @script
95
+ end
96
+ alias :to_s :to_str
97
+
98
+ private
99
+
100
+ def assure_ends_with(str,ending="\n")
101
+ str.to_s.end_with?("\n") ? str : str + ending
102
+ end
103
+
104
+ def append_statement(statement)
105
+ append(assure_ends_with(statement, ";\n"))
106
+ end
107
+
108
+ end
109
+ end