ruby-graphviz 0.9.0 → 0.9.1

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,37 @@
1
+ # http://www.graphviz.org/Gallery/undirected/process.html
2
+ #
3
+ # graph G {
4
+ # run -- intr;
5
+ # intr -- runbl;
6
+ # runbl -- run;
7
+ # run -- kernel;
8
+ # kernel -- zombie;
9
+ # kernel -- sleep;
10
+ # kernel -- runmem;
11
+ # sleep -- swap;
12
+ # swap -- runswap;
13
+ # runswap -- new;
14
+ # runswap -- runmem;
15
+ # new -- runmem;
16
+ # sleep -- runmem;
17
+ # }
18
+
19
+ $:.unshift( "../../lib" );
20
+ require "graphviz"
21
+
22
+ GraphViz::new( :G, :type => :graph ) { |g|
23
+ g._new[:label] = "new"
24
+ g.run << g.intr
25
+ g.intr << g.runbl
26
+ g.runbl << g.run
27
+ g.run << g.kernel
28
+ g.kernel << g.zombie
29
+ g.kernel << g.sleep
30
+ g.kernel << g.runmem
31
+ g.sleep << g.swap
32
+ g.swap << g.runswap
33
+ g.runswap << g._new
34
+ g.runswap << g.runmem
35
+ g._new << g.runmem
36
+ g.sleep << g.runmem
37
+ }.output( :output => :png, :file => "process.png", :use => :fdp )
File without changes
@@ -29,4 +29,4 @@ g.add_edge( init, make_string )
29
29
  g.add_edge( main, printf )
30
30
  g.add_edge( execute, compare )
31
31
 
32
- g.output( :output => "png", :file => "#{$0}.png" )
32
+ g.output( :png => "#{$0}.png" )
@@ -5,9 +5,9 @@ require "graphviz"
5
5
 
6
6
  g = nil
7
7
  if ARGV[0]
8
- g = GraphViz::new( "G", :output => "png", :path => ARGV[0] )
8
+ g = GraphViz::new( "G", :path => ARGV[0] )
9
9
  else
10
- g = GraphViz::new( "G", :output => "png" )
10
+ g = GraphViz::new( "G" )
11
11
  end
12
12
 
13
13
  g.node[:shape] = "ellipse"
@@ -39,4 +39,4 @@ g.add_edge( init, make_string )
39
39
  g.add_edge( main, printf, :color => "red", :style => "bold", :label => "100 times" )
40
40
  g.add_edge( execute, compare, :color => "red" )
41
41
 
42
- g.output( :file => "#{$0}.png" )
42
+ g.output( :png => "#{$0}.png" )
@@ -5,9 +5,9 @@ require "graphviz"
5
5
 
6
6
  g = nil
7
7
  if ARGV[0]
8
- g = GraphViz::new( "G", "output" => "png", "path" => ARGV[0] )
8
+ g = GraphViz::new( "G", "path" => ARGV[0] )
9
9
  else
10
- g = GraphViz::new( "G", "output" => "png" )
10
+ g = GraphViz::new( "G" )
11
11
  end
12
12
 
13
13
  g.node["shape"] = "ellipse"
@@ -28,4 +28,4 @@ g.add_edge( a, b )
28
28
  g.add_edge( b, c )
29
29
  g.add_edge( b, d )
30
30
 
31
- g.output( :file => "#{$0}.png" )
31
+ g.output( :png => "#{$0}.png" )
@@ -5,9 +5,9 @@ require "graphviz"
5
5
 
6
6
  g = nil
7
7
  if ARGV[0]
8
- g = GraphViz::new( "structs", "output" => "png", "path" => ARGV[0] )
8
+ g = GraphViz::new( "structs", "path" => ARGV[0] )
9
9
  else
10
- g = GraphViz::new( "structs", "output" => "png" )
10
+ g = GraphViz::new( "structs" )
11
11
  end
12
12
 
13
13
  g.node["shape"] = "record"
@@ -19,4 +19,4 @@ struct3 = g.add_node( "struct3", "shape" => "record", "label" => 'hello\nworld |
19
19
  g.add_edge( struct1, struct2 )
20
20
  g.add_edge( struct1, struct3 )
21
21
 
22
- g.output( :file => "#{$0}.png" )
22
+ g.output( :png => "#{$0}.png" )
@@ -29,4 +29,4 @@ g.add_edge( init, make_string )
29
29
  g.add_edge( main, printf )
30
30
  g.add_edge( execute, compare )
31
31
 
32
- g.output( "output" => "png", :file => "#{$0}.png" )
32
+ g.output( :png => "#{$0}.png" )
@@ -0,0 +1,46 @@
1
+ $:.unshift( "../lib" );
2
+ require "graphviz"
3
+
4
+ GraphViz::new( "G", :rankdir => "LR", :type => "graph" ) { |graph|
5
+ graph.cluster0 { |cluster|
6
+ cluster[:label] = "Back Office"
7
+
8
+ cluster.fatman.set { |n|
9
+ n.label = "FatMan"
10
+ n.shape = "rect"
11
+ }
12
+ cluster.grobil.set { |n|
13
+ n.label = "GroBil"
14
+ n.shape = "rect"
15
+ }
16
+ }
17
+
18
+ graph.cluster1 { |cluster|
19
+ cluster[:label] = "DMZ"
20
+
21
+ cluster.dupont.set { |n|
22
+ n.label = "Dupont"
23
+ n.shape = "rect"
24
+ }
25
+ cluster.dupond.set { |n|
26
+ n.label = "Dupond"
27
+ n.shape = "rect"
28
+ }
29
+ }
30
+
31
+ graph.cluster2() { |cluster|
32
+ cluster[:label] = "Front Office"
33
+
34
+ cluster.door.set { |n|
35
+ n.label = "Door"
36
+ n.shape = "rect"
37
+ }
38
+ }
39
+
40
+ graph.cluster0.fatman << graph.cluster1.dupont
41
+ graph.cluster0.fatman << graph.cluster1.dupond
42
+ graph.cluster0.grobil << graph.cluster1.dupont
43
+ graph.cluster0.grobil << graph.cluster1.dupond
44
+ graph.cluster1.dupont << graph.cluster2.door
45
+ graph.cluster1.dupond << graph.cluster2.door
46
+ }.output( :path => '/usr/local/bin/', :png => "#{$0}.png" )
@@ -3,7 +3,7 @@
3
3
  $:.unshift( "../lib" );
4
4
  require "graphviz"
5
5
 
6
- GraphViz::options( :output => "png", :use => "dot" )
6
+ GraphViz::options( :use => "dot" )
7
7
 
8
8
  if ARGV[0]
9
9
  GraphViz::options( :path => ARGV[0] )
@@ -20,4 +20,4 @@ g.add_node( "struct3", "shape" => "record", "label" => 'hello\nworld |{ b |{c|<h
20
20
  g.add_edge( "struct1:f1", "struct2:f0" )
21
21
  g.add_edge( "struct1:f2", "struct3:here" )
22
22
 
23
- g.output( :file => "#{$0}.png" )
23
+ g.output( :png => "#{$0}.png" )
@@ -5,9 +5,9 @@ require "graphviz"
5
5
 
6
6
  g = nil
7
7
  if ARGV[0]
8
- g = GraphViz::new( "G", "output" => "png", "nodesep" => ".05", "rankdir" => "LR", "path" => ARGV[0] )
8
+ g = GraphViz::new( "G" "nodesep" => ".05", "rankdir" => "LR", "path" => ARGV[0] )
9
9
  else
10
- g = GraphViz::new( "G", "output" => "png", "nodesep" => ".05", "rankdir" => "LR" )
10
+ g = GraphViz::new( "G", "nodesep" => ".05", "rankdir" => "LR" )
11
11
  end
12
12
 
13
13
  g.node["shape"] = "record"
@@ -31,4 +31,4 @@ g.add_edge( "node0:f6", "node5:n" )
31
31
  g.add_edge( "node2:p", "node6:n" )
32
32
  g.add_edge( "node4:p", "node7:n" )
33
33
 
34
- g.output( :file => "#{$0}.png" )
34
+ g.output( :png => "#{$0}.png" )
@@ -5,9 +5,9 @@ require "graphviz"
5
5
 
6
6
  g = nil
7
7
  if ARGV[0]
8
- g = GraphViz::new( "G", "output" => "png", "path" => ARGV[0] )
8
+ g = GraphViz::new( "G", "path" => ARGV[0] )
9
9
  else
10
- g = GraphViz::new( "G", "output" => "png" )
10
+ g = GraphViz::new( "G" )
11
11
  end
12
12
 
13
13
  g.node["shape"] = "ellipse"
@@ -47,4 +47,4 @@ g.add_edge( a3, a0 )
47
47
  g.add_edge( a3, endn )
48
48
  g.add_edge( b3, endn )
49
49
 
50
- g.output( :file => "#{$0}.png" )
50
+ g.output( :png => "#{$0}.png" )
@@ -5,9 +5,9 @@ require "graphviz"
5
5
 
6
6
  g = nil
7
7
  if ARGV[0]
8
- g = GraphViz::new( "G", "output" => "png", "path" => ARGV[0] )
8
+ g = GraphViz::new( "G", "path" => ARGV[0] )
9
9
  else
10
- g = GraphViz::new( "G", "output" => "png" )
10
+ g = GraphViz::new( "G" )
11
11
  end
12
12
 
13
13
  g.node["shape"] = "ellipse"
@@ -47,4 +47,4 @@ g.add_edge( a3, a0 )
47
47
  g.add_edge( a3, endn )
48
48
  g.add_edge( b3, endn )
49
49
 
50
- g.output( :file => "#{$0}.png" )
50
+ g.output( :png => "#{$0}.png" )
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift( "../lib" );
4
+ require "graphviz"
5
+
6
+ {"png" => "#{$0}.png", "imap" => "#{$0}.html"}.each do |format, file|
7
+ GraphViz::new( "G", :output => format ) { |g|
8
+ g.command #(:URL => "http://www.research.att.com/base.html")
9
+ g._output(:label => "output") #(:URL => "colors.html")
10
+ g.command << g._output
11
+ }.output( :file => file )
12
+ end
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/ruby
2
+
3
+ $:.unshift( "../lib" );
4
+ require "graphviz"
5
+
6
+ GraphViz::new( "mainmap" ) { |graph|
7
+ graph[:URL] = "http://www.research.att.com/base.html"
8
+ graph.command( :URL => "http://www.research.att.com/command.html" )
9
+ (graph.command << graph._output( :label => "output" ))[:URL] = "colors.html"
10
+ }.output( :canon => nil, :cmapx => "#{$0}.html", :png => "#{$0}.png" )
@@ -21,6 +21,7 @@ require 'graphviz/node'
21
21
  require 'graphviz/edge'
22
22
  require 'graphviz/attrs'
23
23
  require 'graphviz/constants'
24
+ require 'graphviz/parser'
24
25
 
25
26
  class GraphViz
26
27
  include Constants
@@ -28,10 +29,12 @@ class GraphViz
28
29
  public
29
30
 
30
31
  ## Var: Output format (dot, png, jpeg, ...)
31
- @@format = "canon"
32
+ @@format = nil #"canon"
32
33
  @format
33
34
  ## Var: Output file name
34
35
  @filename
36
+ ## Var: Output format and file
37
+ @output
35
38
  ## Var: program to use (dot|twopi)
36
39
  @@prog = "dot"
37
40
  @prog
@@ -46,7 +49,12 @@ class GraphViz
46
49
  @graph
47
50
  @node
48
51
  @edge
49
- attr_accessor :node, :edge
52
+
53
+ # This accessor allow you to set global nodes attributs
54
+ attr_accessor :node
55
+
56
+ # This accessor allow you to set global edges attributs
57
+ attr_accessor :edge
50
58
 
51
59
  @elements_order
52
60
 
@@ -77,6 +85,17 @@ class GraphViz
77
85
  return( @hoNodes[xNodeName] )
78
86
  end
79
87
 
88
+ #
89
+ # Return the node object for the given name (or nil)
90
+ #
91
+ def get_node( xNodeName, &block )
92
+ node = @hoNodes[xNodeName] || nil
93
+
94
+ yield( node ) if( block and node.nil? == false )
95
+
96
+ return node
97
+ end
98
+
80
99
  ##
81
100
  # Create a new edge
82
101
  #
@@ -142,6 +161,17 @@ class GraphViz
142
161
  return( @hoGraphs[xGraphName] )
143
162
  end
144
163
 
164
+ #
165
+ # Return the graph object for the given name (or nil)
166
+ #
167
+ def get_graph( xGraphName, &block )
168
+ graph = @hoGraphs[xGraphName] || nil
169
+
170
+ yield( graph ) if( block and graph.nil? == false )
171
+
172
+ return graph
173
+ end
174
+
145
175
  #
146
176
  # Get the number of nodes
147
177
  #
@@ -186,6 +216,7 @@ class GraphViz
186
216
  # Set value +xValue+ to the graph attribut +xAttrName+
187
217
  #
188
218
  def []=( xAttrName, xValue )
219
+ xValue = xValue.to_s if xValue.class == Symbol
189
220
  @graph[xAttrName] = xValue
190
221
  end
191
222
 
@@ -204,6 +235,7 @@ class GraphViz
204
235
  # :file : Output file name
205
236
  # :use : Program to use (Constants::PROGRAMS)
206
237
  # :path : Program PATH
238
+ # :<format> => :<file>
207
239
  #
208
240
  def output( *hOpt )
209
241
  xDOTScript = ""
@@ -288,13 +320,16 @@ class GraphViz
288
320
  else
289
321
  if hOpt.nil? == false and hOpt[0].nil? == false
290
322
  hOpt[0].each do |xKey, xValue|
323
+ xValue = xValue.to_s unless xValue.nil?
291
324
  case xKey.to_s
292
325
  when "output"
326
+ warn ":output option is deprecated, please use :<format> => :<file>"
293
327
  if FORMATS.index( xValue ).nil? == true
294
328
  raise ArgumentError, "output format '#{xValue}' invalid"
295
329
  end
296
330
  @format = xValue
297
331
  when "file"
332
+ warn ":file option is deprecated, please use :<format> => :<file>"
298
333
  @filename = xValue
299
334
  when "use"
300
335
  if PROGRAMS.index( xValue ).nil? == true
@@ -304,7 +339,10 @@ class GraphViz
304
339
  when "path"
305
340
  @path = xValue
306
341
  else
307
- raise ArgumentError, "option #{xKey.to_s} unknown"
342
+ if FORMATS.index( xKey.to_s ).nil? == true
343
+ raise ArgumentError, "output format '#{xValue}' invalid"
344
+ end
345
+ @output[xKey.to_s] = xValue
308
346
  end
309
347
  end
310
348
  end
@@ -324,9 +362,24 @@ class GraphViz
324
362
  raise StandardError, "GraphViz not installed or #{@prog} not in PATH. Install GraphViz or use the 'path' option"
325
363
  end
326
364
 
327
- xFile = ""
328
- xFile = "-o #{@filename}" if @filename.nil? == false
329
- xCmd = "#{cmd} -T#{@format} #{xFile} #{t.path}"
365
+ xOutputWithFile = ""
366
+ xOutputWithoutFile = ""
367
+ unless @format.nil?
368
+ if @filename.nil?
369
+ xOutputWithoutFile = "-T#{@format} "
370
+ else
371
+ xOutputWithFile = "-T#{@format} -o#{@filename} "
372
+ end
373
+ end
374
+ @output.each do |format, file|
375
+ if file.nil?
376
+ xOutputWithoutFile << "-T#{format} "
377
+ else
378
+ xOutputWithFile << "-T#{format} -o#{file} "
379
+ end
380
+ end
381
+
382
+ xCmd = "#{cmd} #{xOutputWithFile} #{xOutputWithoutFile} #{t.path}"
330
383
 
331
384
  f = IO.popen( xCmd )
332
385
  print f.readlines
@@ -398,6 +451,7 @@ class GraphViz
398
451
  when "path"
399
452
  @@path = v
400
453
  when "output"
454
+ warn ":output option is deprecated!"
401
455
  @@format = v
402
456
  else
403
457
  warn "Invalide option #{k}!"
@@ -409,6 +463,24 @@ class GraphViz
409
463
  GraphViz::default( hOpts )
410
464
  end
411
465
 
466
+ ## ----------------------------------------------------------------------------
467
+
468
+ #
469
+ # Create a new graph from a GraphViz File
470
+ #
471
+ # Options :
472
+ # :output : Output format (Constants::FORMATS) (default : dot)
473
+ # :file : Output file name (default : none)
474
+ # :use : Program to use (Constants::PROGRAMS) (default : dot)
475
+ # :path : Program PATH
476
+ # :parent : Parent graph (default : none)
477
+ # :type : Graph type (Constants::GRAPHTYPE) (default : digraph)
478
+ #
479
+ def self.parse( xFile, *hOpts, &block )
480
+ g = GraphViz::Parser.parse( xFile, hOpts[0], &block )
481
+ return g
482
+ end
483
+
412
484
  ## ----------------------------------------------------------------------------
413
485
 
414
486
  private
@@ -437,10 +509,11 @@ class GraphViz
437
509
  #
438
510
  def initialize( xGraphName, *hOpt, &block )
439
511
  @filename = nil
440
- @name = xGraphName
512
+ @name = xGraphName.to_s
441
513
  @format = @@format
442
514
  @prog = @@prog
443
515
  @path = @@path
516
+ @output = {}
444
517
 
445
518
  @elements_order = Array::new()
446
519
 
@@ -459,28 +532,30 @@ class GraphViz
459
532
  hOpt[0].each do |xKey, xValue|
460
533
  case xKey.to_s
461
534
  when "output"
462
- if FORMATS.index( xValue ).nil? == true
535
+ warn ":output option is deprecated, please use :<format> => :<file>"
536
+ if FORMATS.index( xValue.to_s ).nil? == true
463
537
  raise ArgumentError, "output format '#{xValue}' invalid"
464
538
  end
465
- @format = xValue
539
+ @format = xValue.to_s
466
540
  when "use"
467
- if PROGRAMS.index( xValue ).nil? == true
541
+ if PROGRAMS.index( xValue.to_s ).nil? == true
468
542
  raise ArgumentError, "can't use '#{xValue}'"
469
543
  end
470
- @prog = xValue
544
+ @prog = xValue.to_s
471
545
  when "file"
472
- @filename = xValue
546
+ warn ":file option is deprecated, please use :<format> => :<file>"
547
+ @filename = xValue.to_s
473
548
  when "parent"
474
549
  @oParentGraph = xValue
475
550
  when "type"
476
- if GRAPHTYPE.index( xValue ).nil? == true
551
+ if GRAPHTYPE.index( xValue.to_s ).nil? == true
477
552
  raise ArgumentError, "graph type '#{xValue}' unknow"
478
553
  end
479
- @oGraphType = xValue
554
+ @oGraphType = xValue.to_s
480
555
  when "path"
481
- @path = xValue
556
+ @path = xValue.to_s
482
557
  else
483
- self[xKey.to_s] = xValue
558
+ self[xKey.to_s] = xValue.to_s
484
559
  end
485
560
  end
486
561
  end