ruby-graphviz_c 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
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
data/bin/git2gv ADDED
@@ -0,0 +1,167 @@
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 'rubygems'
19
+ require 'getoptlong'
20
+ require 'graphviz'
21
+
22
+ class Git2Gv
23
+ def initialize( xGVPath, xOutFile, xOutFormat, bNothugly )
24
+ @xGVPath, @xOutFile, @xOutFormat, @bNothugly = xGVPath, xOutFile, xOutFormat.to_sym, bNothugly
25
+ end
26
+
27
+ def run
28
+ git = GraphViz.new( :G, :path => @xGVPath )
29
+
30
+ git.node[:shape => "record"]
31
+
32
+ branches.each do |branch|
33
+ git.add_nodes( branch, :style => "filled", :fillcolor => :lightgrey )
34
+ end
35
+
36
+ commits.each do |commit|
37
+ git.add_nodes(
38
+ commit[:short],
39
+ :style => "filled",
40
+ :fillcolor => :lightblue,
41
+ :label => "{ #{commit[:long]} |{ #{commit[:comment].gsub(/\{/, "\\{").gsub(/\}/, "\\}").gsub(/\|/, "\\|").gsub(/</, "\\<").gsub(/>/, "\\>")}}| { #{commit[:commiter]} | #{commit[:date]} } }"
42
+ )
43
+ end
44
+
45
+ refs.each do |from, to|
46
+ git.add_edges( from, to )
47
+ end
48
+
49
+ relations.each do |from, to|
50
+ git.add_edges( to, from, :dir => "back" )
51
+ end
52
+
53
+ git.output( @xOutFormat => @xOutFile, :nothugly => @bNothugly )
54
+ end
55
+
56
+ # private
57
+ def cmd(c, &blk)
58
+ `#{c}`.split($/).map(&blk || proc {|a| a })
59
+ end
60
+
61
+ def commits
62
+ @commits ||= begin
63
+ data = []
64
+ cmd('git log --pretty=format:"%h - %H - %s - %cn - %cd" --date=short').each do |commit|
65
+ x = commit.split( " - " )
66
+ data << {
67
+ :short => x[0],
68
+ :long => x[1],
69
+ :comment => x[2],
70
+ :commiter => x[3],
71
+ :date => x[4]
72
+ }
73
+ end
74
+ data
75
+ end
76
+ end
77
+
78
+ def relations
79
+ @rels ||= cmd("git log --pretty=format:\"%h %p\"") { |l|
80
+ c, *parents = l.split
81
+ parents.map {|p| [p, c] }
82
+ }.flatten(1)
83
+ end
84
+
85
+ def branches
86
+ @branches ||= cmd("git branch") {|b| b[2..-1] }
87
+ end
88
+
89
+ def refs
90
+ branches.inject({}) {|h,b|
91
+ h.tap { h[b] = `git log -1 #{b} --pretty=format:"%h"` }
92
+ }
93
+ end
94
+
95
+ def current_branch
96
+ cmd("git branch").select {|l| l =~ /^\*/ }.first.strip[2..-1]
97
+ end
98
+ end
99
+
100
+ def usage
101
+ puts "usage: git2gv [-Tformat] [-ofile] [-h] [-V]"
102
+ puts "-T, --output-format format Output format (default: png)"
103
+ puts " --nothugly Use nothugly if SVG output"
104
+ puts "-o, --output-file file Output file (default: STDOUT)"
105
+ puts "-p, --path Graphviz path"
106
+ puts "-V, --version Show version"
107
+ puts "-h, --help Show this usage message"
108
+ end
109
+
110
+ def version
111
+ puts "Git2GraphViz v#{GraphViz::Constants::RGV_VERSION}, (c)2010 Gregoire Lejeune <gregoire.lejeune@free.fr>"
112
+ puts ""
113
+ puts "This program is free software; you can redistribute it and/or modify"
114
+ puts "it under the terms of the GNU General Public License as published by"
115
+ puts "the Free Software Foundation; either version 2 of the License, or"
116
+ puts "(at your option) any later version."
117
+ puts ""
118
+ puts "This program is distributed in the hope that it will be useful,"
119
+ puts "but WITHOUT ANY WARRANTY; without even the implied warranty of"
120
+ puts "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the"
121
+ puts "GNU General Public License for more details."
122
+ puts ""
123
+ puts "You should have received a copy of the GNU General Public License"
124
+ puts "along with this program; if not, write to the Free Software"
125
+ puts "Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA"
126
+ end
127
+
128
+ oOpt = GetoptLong.new(
129
+ ['--output-format', '-T', GetoptLong::REQUIRED_ARGUMENT],
130
+ ['--output-file', '-o', GetoptLong::REQUIRED_ARGUMENT],
131
+ ['--path', '-p', GetoptLong::REQUIRED_ARGUMENT],
132
+ ['--nothugly', GetoptLong::NO_ARGUMENT],
133
+ ['--help', '-h', GetoptLong::NO_ARGUMENT],
134
+ ['--version', '-V', GetoptLong::NO_ARGUMENT]
135
+ )
136
+
137
+ xOutFormat = "png"
138
+ xOutFile = nil
139
+ xGVPath = ""
140
+ bNothugly = false
141
+
142
+ begin
143
+ oOpt.each_option do |xOpt, xValue|
144
+ case xOpt
145
+ when '--output-format'
146
+ xOutFormat = xValue
147
+ when '--output-file'
148
+ xOutFile = xValue
149
+ when '--path'
150
+ xGVPath = xValue
151
+ when '--nothugly'
152
+ bNothugly = true
153
+ when '--help'
154
+ usage( )
155
+ exit
156
+ when '--version'
157
+ version( )
158
+ exit
159
+ end
160
+ end
161
+ rescue GetoptLong::InvalidOption
162
+ usage( )
163
+ exit
164
+ end
165
+
166
+ Git2Gv.new( xGVPath, xOutFile, xOutFormat, bNothugly ).run
167
+
data/bin/ruby2gv ADDED
@@ -0,0 +1,234 @@
1
+ #!/usr/bin/env ruby
2
+ # Copyright (C) 2005 - 2012 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 'rubygems'
19
+ require 'getoptlong'
20
+ require 'graphviz'
21
+ require 'graphviz/constants'
22
+ require 'rbconfig'
23
+ require 'mkmf'
24
+
25
+ DEBUG = false
26
+
27
+ class Rb2Gv
28
+ REQUIRE = /^\s*require\s*("|')([^\1\s]*)(\1)/
29
+
30
+ def initialize( xGVPath, xUse = "dot", xStops = [] )
31
+ @oGraph = GraphViz::new( "G", :path => xGVPath, :use => xUse )
32
+ # @oGraph['size'] = '10,10'
33
+ @hxNodes = Hash::new( )
34
+ @hxEdge = Array::new( )
35
+ @lxStops = xStops
36
+ end
37
+
38
+ public
39
+ def parse( xFile )
40
+ @hxNodes[xFile] = gv_newNode( xFile, "box", "forestgreen" )
41
+ puts "+ Node #{xFile}" if DEBUG
42
+
43
+ parseFile( xFile, nil, xFile )
44
+ end
45
+
46
+ def out( xFormat = "dot", xFile = nil )
47
+ if xFile.nil?
48
+ @oGraph.output( xFormat => String )
49
+ else
50
+ @oGraph.output( xFormat => xFile )
51
+ end
52
+ end
53
+
54
+ private
55
+ def gv_newNode( xNode, xShape = "box", xColor = nil )
56
+ xNodeName = xNode.gsub( /[^a-zA-Z0-9]/, "_" )
57
+ if xColor.nil?
58
+ @oGraph.add_nodes( xNodeName, "label" => xNode, "shape" => xShape )
59
+ else
60
+ @oGraph.add_nodes( xNodeName, "label" => xNode, "shape" => xShape, "style" => "filled", "color" => xColor )
61
+ end
62
+ end
63
+
64
+ def getLibraryPath( xLib, xExt = ["rb"] )
65
+
66
+ xPath = [ "libexecdir", "libdir", "sitedir", "rubylibdir", "sitelibdir", "archdir", "sitedir", "sitearchdir" ]
67
+ xRbLib = with_config( xLib+'lib', xLib)
68
+
69
+ if /\.(rb|so|bundle|dll)$/.match( xRbLib )
70
+ match = /^(.*)\.([^\.]*)$/.match(xRbLib)
71
+ xRbFile, xExt = match[1], [match[2]]
72
+ else
73
+ xRbFile = xRbLib
74
+ end
75
+
76
+ xExt.each do |e|
77
+ xRbFileWithExt = xRbFile + "." + e
78
+
79
+ # Search in "standard" paths
80
+ xPath.each do |xDir|
81
+ xCurrentPath = RbConfig::expand( RbConfig::CONFIG[xDir] )
82
+ xFileFound = File.join( xCurrentPath, xRbFileWithExt )
83
+ if File.exist?( xFileFound )
84
+ return xFileFound
85
+ end
86
+ end
87
+
88
+ # Search in "rubygems" :: This is not utile but...
89
+ Gem::Specification.find_all do |spec|
90
+ if spec == xLib
91
+ spec.require_paths.unshift spec.bindir if spec.bindir
92
+ xPath = spec.require_paths.map do |path|
93
+ File.join spec.full_gem_path, path
94
+ end
95
+ xPath.each do |xCurrentPath|
96
+ xFileFound = File.join( xCurrentPath, xRbFileWithExt )
97
+ if File.exist?( xFileFound )
98
+ return xFileFound
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
104
+
105
+ return nil
106
+ end
107
+
108
+ def parseFile( xFile, xFromFile = nil, xLib = nil )
109
+
110
+ if xFromFile
111
+ puts "Parse #{xFile} required in #{xFromFile} :" if DEBUG
112
+ else
113
+ puts "Parse #{xFile} :" if DEBUG
114
+ end
115
+
116
+ File.open(xFile, 'r').each_line do |xLine|
117
+ if lxLineMatch = REQUIRE.match( xLine )
118
+ xRequiredLib = lxLineMatch[2].gsub( /\.(rb|so)$/, "" )
119
+
120
+ if not @hxNodes.has_key?( xRequiredLib )
121
+ puts " + Node #{xRequiredLib}" if DEBUG
122
+
123
+ xRequiredFile = getLibraryPath( xRequiredLib )
124
+ if xRequiredFile
125
+ unless @lxStops.include?(xRequiredLib)
126
+ @hxNodes[xRequiredLib] = gv_newNode( xRequiredLib )
127
+ parseFile( xRequiredFile, xFile, xRequiredLib )
128
+ else
129
+ @hxNodes[xRequiredLib] = gv_newNode( xRequiredLib, "invhouse", "deepskyblue" )
130
+ end
131
+ else
132
+ if getLibraryPath( xRequiredLib, ["so", "bundle", "dll"] ) == nil
133
+ @hxNodes[xRequiredLib] = gv_newNode( xRequiredLib, "box", "red" )
134
+ else
135
+ @hxNodes[xRequiredLib] = gv_newNode( xRequiredLib, "box", "grey" )
136
+ end
137
+ end
138
+
139
+ end
140
+
141
+ puts " + Edge #{xLib} -> #{xRequiredLib}" if DEBUG
142
+ unless @hxEdge.include?( "#{@hxNodes[xLib].id}-#{@hxNodes[xRequiredLib].id}" )
143
+ @oGraph.add_edges( @hxNodes[xLib], @hxNodes[xRequiredLib] )
144
+ @hxEdge << "#{@hxNodes[xLib].id}-#{@hxNodes[xRequiredLib].id}"
145
+ end
146
+ end
147
+ end
148
+
149
+ end
150
+
151
+ end
152
+
153
+ def usage
154
+ puts "usage: ruby2gv [-Tformat] [-ofile] [-h] [-V] script"
155
+ puts "-T, --output-format format Output format (default: PNG)"
156
+ puts "-o, --output-file file Output file (default: STDOUT)"
157
+ puts "-p, --path Graphviz path"
158
+ puts "-u, --use PROGRAM Program to use (default: dot)"
159
+ puts "-s, --stop LIB[,LIB, ...] Stop on libs"
160
+ puts "-V, --version Show version"
161
+ puts "-h, --help Show this usage message"
162
+ end
163
+
164
+ def version
165
+ puts "Ruby2GraphViz v#{GraphViz::Constants::RGV_VERSION}, (c)2005, 2009, 2010 Gregoire Lejeune <gregoire.lejeune@free.fr>"
166
+ puts ""
167
+ puts "This program is free software; you can redistribute it and/or modify"
168
+ puts "it under the terms of the GNU General Public License as published by"
169
+ puts "the Free Software Foundation; either version 2 of the License, or"
170
+ puts "(at your option) any later version."
171
+ puts ""
172
+ puts "This program is distributed in the hope that it will be useful,"
173
+ puts "but WITHOUT ANY WARRANTY; without even the implied warranty of"
174
+ puts "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the"
175
+ puts "GNU General Public License for more details."
176
+ puts ""
177
+ puts "You should have received a copy of the GNU General Public License"
178
+ puts "along with this program; if not, write to the Free Software"
179
+ puts "Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA"
180
+ end
181
+
182
+ xOutFormat = "png"
183
+ xOutFile = nil
184
+ xGVPath = ""
185
+ xUse = "dot"
186
+ xStops = []
187
+
188
+ oOpt = GetoptLong.new(
189
+ ['--output-format', '-T', GetoptLong::REQUIRED_ARGUMENT],
190
+ ['--output-file', '-o', GetoptLong::REQUIRED_ARGUMENT],
191
+ ['--path', '-p', GetoptLong::REQUIRED_ARGUMENT],
192
+ ['--use', '-u', GetoptLong::REQUIRED_ARGUMENT],
193
+ ['--stop', '-s', GetoptLong::REQUIRED_ARGUMENT],
194
+ ['--help', '-h', GetoptLong::NO_ARGUMENT],
195
+ ['--version', '-V', GetoptLong::NO_ARGUMENT]
196
+ )
197
+
198
+ begin
199
+ oOpt.each_option do |xOpt, xValue|
200
+ case xOpt
201
+ when '--output-format'
202
+ xOutFormat = xValue
203
+ when '--output-file'
204
+ xOutFile = xValue
205
+ when '--path'
206
+ xGVPath = xValue
207
+ when '--use'
208
+ xUse = xValue
209
+ when '--stop'
210
+ xStops = xValue.split( "," ).map{ |x| x.strip }
211
+ when '--help'
212
+ usage( )
213
+ exit
214
+ when '--version'
215
+ version( )
216
+ exit
217
+ end
218
+ end
219
+ rescue GetoptLong::InvalidOption
220
+ usage( )
221
+ exit
222
+ end
223
+
224
+ xFile = ARGV[0]
225
+
226
+ if xFile.nil?
227
+ usage( )
228
+ exit
229
+ end
230
+
231
+ o = Rb2Gv::new( xGVPath, xUse, xStops )
232
+ o.parse( xFile )
233
+ result = o.out( xOutFormat, xOutFile )
234
+ puts result unless result.nil?
data/bin/xml2gv ADDED
@@ -0,0 +1,96 @@
1
+ #!/usr/bin/env ruby
2
+ # Copyright (C) 2005 - 2012 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 'rubygems'
19
+ require 'getoptlong'
20
+ require 'graphviz/xml'
21
+
22
+ def usage
23
+ puts "usage: xml2gv [-Tformat] [-ofile] [-h] [-V] script"
24
+ puts "-T, --output-format format Output format (default: PNG)"
25
+ puts "-o, --output-file file Output file (default: STDOUT)"
26
+ puts "-p, --path Graphviz path"
27
+ puts "-u, --use PROGRAM Program to use (default: dot)"
28
+ puts "-V, --version Show version"
29
+ puts "-h, --help Show this usage message"
30
+ end
31
+
32
+ def version
33
+ puts "XML2GraphViz v#{GraphViz::Constants::RGV_VERSION}, (c)2010 Gregoire Lejeune <gregoire.lejeune@free.fr>"
34
+ puts ""
35
+ puts "This program is free software; you can redistribute it and/or modify"
36
+ puts "it under the terms of the GNU General Public License as published by"
37
+ puts "the Free Software Foundation; either version 2 of the License, or"
38
+ puts "(at your option) any later version."
39
+ puts ""
40
+ puts "This program is distributed in the hope that it will be useful,"
41
+ puts "but WITHOUT ANY WARRANTY; without even the implied warranty of"
42
+ puts "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the"
43
+ puts "GNU General Public License for more details."
44
+ puts ""
45
+ puts "You should have received a copy of the GNU General Public License"
46
+ puts "along with this program; if not, write to the Free Software"
47
+ puts "Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA"
48
+ end
49
+
50
+ xOutFormat = "png"
51
+ xOutFile = nil
52
+ xGVPath = ""
53
+ xUse = "dot"
54
+
55
+ oOpt = GetoptLong.new(
56
+ ['--output-format', '-T', GetoptLong::REQUIRED_ARGUMENT],
57
+ ['--output-file', '-o', GetoptLong::REQUIRED_ARGUMENT],
58
+ ['--path', '-p', GetoptLong::REQUIRED_ARGUMENT],
59
+ ['--use', '-u', GetoptLong::REQUIRED_ARGUMENT],
60
+ ['--help', '-h', GetoptLong::NO_ARGUMENT],
61
+ ['--version', '-V', GetoptLong::NO_ARGUMENT]
62
+ )
63
+
64
+ begin
65
+ oOpt.each_option do |xOpt, xValue|
66
+ case xOpt
67
+ when '--output-format'
68
+ xOutFormat = xValue
69
+ when '--output-file'
70
+ xOutFile = xValue
71
+ when '--path'
72
+ xGVPath = xValue
73
+ when '--use'
74
+ xUse = xValue
75
+ when '--help'
76
+ usage( )
77
+ exit
78
+ when '--version'
79
+ version( )
80
+ exit
81
+ end
82
+ end
83
+ rescue GetoptLong::InvalidOption
84
+ usage( )
85
+ exit
86
+ end
87
+
88
+ xFile = ARGV[0]
89
+
90
+ if xFile.nil?
91
+ usage( )
92
+ exit
93
+ end
94
+
95
+ gvxml = GraphViz::XML::new( xFile, :text => true, :attrs => true )
96
+ gvxml.graph.output( xOutFormat => xOutFile, :path => xGVPath )