ruby-graphviz 1.0.7 → 1.0.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.
Files changed (73) hide show
  1. data/CHANGELOG.rdoc +4 -0
  2. data/bin/dot2ruby +5 -5
  3. data/bin/gem2gv +18 -18
  4. data/bin/git2gv +20 -20
  5. data/bin/ruby2gv +26 -26
  6. data/bin/xml2gv +5 -5
  7. data/examples/sample06.rb +5 -5
  8. data/examples/sample12.rb +3 -3
  9. data/examples/sample13.rb +8 -8
  10. data/examples/sample14.rb +8 -8
  11. data/examples/sample15.rb +1 -1
  12. data/examples/sample17.rb +7 -7
  13. data/examples/sample19.rb +10 -10
  14. data/examples/sample20.rb +2 -2
  15. data/examples/sample21.rb +1 -1
  16. data/examples/sample28.rb +1 -1
  17. data/examples/sample31.rb +1 -1
  18. data/examples/sample33.rb +10 -10
  19. data/examples/sample34.rb +1 -1
  20. data/examples/sample35.rb +7 -7
  21. data/examples/sample36.rb +2 -2
  22. data/examples/sample40.rb +4 -4
  23. data/examples/sample44.rb +72 -72
  24. data/examples/sample45.rb +4 -4
  25. data/examples/sample48.rb +7 -7
  26. data/examples/sample50.rb +1 -1
  27. data/examples/sample52.rb +2 -2
  28. data/examples/sample53.rb +2 -2
  29. data/examples/sample54.rb +3 -3
  30. data/examples/sample60.rb +2 -2
  31. data/examples/sample61.rb +2 -2
  32. data/examples/sample62.rb +2 -2
  33. data/examples/sample99.rb +15 -15
  34. data/examples/theory/pert.rb +2 -2
  35. data/examples/theory/tests.rb +2 -2
  36. data/lib/graphviz.rb +140 -140
  37. data/lib/graphviz/attrs.rb +6 -11
  38. data/lib/graphviz/constants.rb +35 -35
  39. data/lib/graphviz/core_ext.rb +1 -1
  40. data/lib/graphviz/dot2ruby.rb +7 -7
  41. data/lib/graphviz/dsl.rb +5 -5
  42. data/lib/graphviz/edge.rb +13 -13
  43. data/lib/graphviz/elements.rb +5 -5
  44. data/lib/graphviz/ext.rb +1 -1
  45. data/lib/graphviz/family_tree.rb +15 -15
  46. data/lib/graphviz/family_tree/couple.rb +11 -11
  47. data/lib/graphviz/family_tree/generation.rb +6 -6
  48. data/lib/graphviz/family_tree/person.rb +13 -13
  49. data/lib/graphviz/graphml.rb +39 -39
  50. data/lib/graphviz/math/matrix.rb +23 -23
  51. data/lib/graphviz/node.rb +8 -8
  52. data/lib/graphviz/nothugly.rb +3 -3
  53. data/lib/graphviz/theory.rb +8 -8
  54. data/lib/graphviz/types.rb +3 -3
  55. data/lib/graphviz/types/arrow_type.rb +3 -3
  56. data/lib/graphviz/types/color.rb +2 -2
  57. data/lib/graphviz/types/color_list.rb +2 -2
  58. data/lib/graphviz/types/esc_string.rb +2 -2
  59. data/lib/graphviz/types/gv_bool.rb +3 -3
  60. data/lib/graphviz/types/gv_double.rb +3 -3
  61. data/lib/graphviz/types/html_string.rb +2 -2
  62. data/lib/graphviz/types/lbl_string.rb +2 -2
  63. data/lib/graphviz/types/rect.rb +2 -2
  64. data/lib/graphviz/types/spline_type.rb +9 -9
  65. data/lib/graphviz/utils.rb +13 -13
  66. data/lib/graphviz/utils/colors.rb +35 -35
  67. data/lib/graphviz/xml.rb +24 -24
  68. data/setup.rb +4 -4
  69. data/test/test_graph.rb +9 -9
  70. data/test/test_subgraph.rb +1 -1
  71. data/test/test_theory.rb +4 -4
  72. data/test/test_utils_colors.rb +4 -4
  73. metadata +2 -2
data/lib/graphviz/node.rb CHANGED
@@ -1,15 +1,15 @@
1
1
  # Copyright (C) 2004 - 2011 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
5
5
  # the Free Software Foundation; either version 2 of the License, or
6
6
  # (at your option) any later version.
7
- #
7
+ #
8
8
  # This program is distributed in the hope that it will be useful,
9
9
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
10
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
11
  # GNU General Public License for more details.
12
- #
12
+ #
13
13
  # You should have received a copy of the GNU General Public License
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
@@ -27,9 +27,9 @@ class GraphViz
27
27
  attr_reader :incidents
28
28
 
29
29
  # Create a new node
30
- #
30
+ #
31
31
  # * node_id : ID of the node
32
- # * parent_graph : Graph
32
+ # * parent_graph : Graph
33
33
  def initialize( node_id, parent_graph )
34
34
  @neighbors = []
35
35
  @incidents = []
@@ -75,7 +75,7 @@ class GraphViz
75
75
  end
76
76
  end
77
77
 
78
- # Calls block once for each attribute of the node, passing the name and value to the
78
+ # Calls block once for each attribute of the node, passing the name and value to the
79
79
  # block as a two-element array.
80
80
  #
81
81
  # If global is set to false, the block does not receive the attributes set globally
@@ -95,7 +95,7 @@ class GraphViz
95
95
 
96
96
  # Create an edge between the current node and the node +node+
97
97
  def <<( node )
98
- if( node.class == Array )
98
+ if( node.class == Array )
99
99
  node.each do |no|
100
100
  self << no
101
101
  end
@@ -116,7 +116,7 @@ class GraphViz
116
116
  # _n.color = "blue"
117
117
  # _n.fontcolor = "red"
118
118
  # }
119
- #
119
+ #
120
120
  def set( &b )
121
121
  yield( self )
122
122
  end
@@ -1,8 +1,8 @@
1
1
  # This file use notugly.xsl: An XSL transform to pretty up the SVG output from Graphviz
2
- #
2
+ #
3
3
  # See: http://www.hokstad.com/making-graphviz-output-pretty-with-xsl.html
4
4
  # And: http://www.hokstad.com/making-graphviz-output-pretty-with-xsl-updated.html
5
- #
5
+ #
6
6
  # By Vidar Hokstad and Ryan Shea; Contributions by Jonas Tingborn,
7
7
  # Earl Cummings, Michael Kennedy (Graphviz 2.20.2 compatibility, bug fixes,
8
8
  # testing, lots of gradients)
@@ -33,7 +33,7 @@ class GraphViz
33
33
  def self.nothugly( file, save = true )
34
34
  xsl = File.join( File.dirname(File.expand_path(__FILE__)), "nothugly", "nothugly.xsl" )
35
35
  out = self.send(XSLT_METHOD, file, xsl)
36
-
36
+
37
37
  if save
38
38
  fname = File.join( File.dirname(File.expand_path(file)), File.basename(file))
39
39
  File.open( fname, "w" ) { |io|
@@ -42,7 +42,7 @@ class GraphViz
42
42
  # Return the degree of the given node
43
43
  def degree( node )
44
44
  degree = 0
45
- name = node
45
+ name = node
46
46
  if node.kind_of?(GraphViz::Node)
47
47
  name = node.id
48
48
  end
@@ -59,7 +59,7 @@ class GraphViz
59
59
  return degree_matrix - adjancy_matrix
60
60
  end
61
61
 
62
- # Return <tt>true</tt> if the graph if symmetric, <tt>false</tt> otherwise
62
+ # Return <tt>true</tt> if the graph if symmetric, <tt>false</tt> otherwise
63
63
  def symmetric?
64
64
  adjancy_matrix == adjancy_matrix.transpose
65
65
  end
@@ -124,7 +124,7 @@ class GraphViz
124
124
  if d[arv.index].to_f.infinite?
125
125
  return nil
126
126
  else
127
- return( {
127
+ return( {
128
128
  :path => ch,
129
129
  :distance => d[arv.index]
130
130
  } )
@@ -187,7 +187,7 @@ class GraphViz
187
187
  return pagerank
188
188
  end
189
189
 
190
- # Return the list of nodes that are directly accessible from given node
190
+ # Return the list of nodes that are directly accessible from given node
191
191
  def neighbors(node)
192
192
  if node.class == String
193
193
  @graph.get_node(node).neighbors
@@ -231,9 +231,9 @@ class GraphViz
231
231
  recursive_dfs(node, visited_nodes, &b)
232
232
  end
233
233
 
234
- private
234
+ private
235
235
  def recursive_dfs(node, visited_nodes, &b)
236
- node = @graph.get_node(node) if node.kind_of? String
236
+ node = @graph.get_node(node) if node.kind_of? String
237
237
  b.call(node)
238
238
  visited_nodes << node
239
239
  neighbors(node).each do |n|
@@ -256,7 +256,7 @@ class GraphViz
256
256
  }
257
257
 
258
258
  return matrix
259
- end
259
+ end
260
260
 
261
261
  def degree_matrix
262
262
  matrix = GraphViz::Math::Matrix.new( @graph.node_count, @graph.node_count )
@@ -312,7 +312,7 @@ class GraphViz
312
312
  capth = critical_path_recursion( d, a, [cpath], result, level+1 )
313
313
  else
314
314
  result << cpath
315
- end
315
+ end
316
316
  end
317
317
  end
318
318
  return result
@@ -4,16 +4,16 @@ class GraphViz
4
4
  def initialize( data )
5
5
  @data = check(data)
6
6
  end
7
-
7
+
8
8
  def output
9
9
  return @data
10
10
  end
11
-
11
+
12
12
  def source
13
13
  return @data
14
14
  end
15
15
  end
16
-
16
+
17
17
  Dir.glob( File.dirname( File.expand_path(__FILE__) )+"/types/*.rb" ).each do |f|
18
18
  autoload File.basename(f).gsub(File.extname(f), "").split( "_" ).map{|n| n.capitalize }.join.to_sym, f
19
19
  end
@@ -4,7 +4,7 @@
4
4
  # "hello\n\t\l\"world\""
5
5
  #
6
6
  # OR
7
- #
7
+ #
8
8
  # >> x = 'hello\n\t\l"world"'
9
9
  # => "hello\\n\\t\\l\"world\""
10
10
  # >> puts x.inspect.gsub( "\\\\", "\\" )
@@ -16,11 +16,11 @@ class GraphViz
16
16
  def check(data)
17
17
  return data
18
18
  end
19
-
19
+
20
20
  def output
21
21
  return @data.to_s.inspect.gsub( "\\\\", "\\" )
22
22
  end
23
-
23
+
24
24
  alias :to_gv :output
25
25
  alias :to_s :output
26
26
 
@@ -42,11 +42,11 @@ class GraphViz
42
42
  return data
43
43
  end
44
44
  end
45
-
45
+
46
46
  def output
47
47
  return @data.to_s.inspect.gsub( "\\\\", "\\" )
48
48
  end
49
-
49
+
50
50
  alias :to_gv :output
51
51
  alias :to_s :output
52
52
 
@@ -8,11 +8,11 @@ class GraphViz
8
8
  @to_ruby = data.split(/\s*:\s*/).map { |c| GraphViz::Types::Color.new(c).to_ruby }
9
9
  return data
10
10
  end
11
-
11
+
12
12
  def output
13
13
  return @data.to_s.inspect.gsub( "\\\\", "\\" )
14
14
  end
15
-
15
+
16
16
  alias :to_gv :output
17
17
  alias :to_s :output
18
18
 
@@ -4,11 +4,11 @@ class GraphViz
4
4
  def check(data)
5
5
  return data
6
6
  end
7
-
7
+
8
8
  def output
9
9
  return @data.to_s.inspect.gsub( "\\\\", "\\" )
10
10
  end
11
-
11
+
12
12
  alias :to_gv :output
13
13
  alias :to_s :output
14
14
 
@@ -3,11 +3,11 @@ end
3
3
 
4
4
  # bool
5
5
  #
6
- # For the bool type,
6
+ # For the bool type,
7
7
  # - TRUE values are represented by "true" or "yes" (case-insensitive), true and any non-zero integer
8
8
  # - FALSE values by "false", "no" or empty string (case-insensitive), false and zero.
9
9
  #
10
- # Example
10
+ # Example
11
11
  #
12
12
  # graph[:center] = "true"
13
13
  # or
@@ -25,7 +25,7 @@ class GraphViz
25
25
  @to_ruby = true
26
26
  return data
27
27
  end
28
-
28
+
29
29
  if false == data or (data.is_a?(Integer) and data == 0) or (data.is_a?(String) and BOOL_FALSE.include?(data.downcase))
30
30
  @to_ruby = false
31
31
  return data
@@ -15,15 +15,15 @@ class GraphViz
15
15
 
16
16
  raise DoubleException, "Invalid double value for `#{data}`"
17
17
  end
18
-
18
+
19
19
  def output
20
20
  return @data.to_s.inspect.gsub( "\\\\", "\\" )
21
21
  end
22
-
22
+
23
23
  def to_f
24
24
  @data.to_f
25
25
  end
26
-
26
+
27
27
  alias :to_gv :output
28
28
  alias :to_s :output
29
29
  alias :to_ruby :to_f
@@ -5,11 +5,11 @@ class GraphViz
5
5
  def check(data)
6
6
  return data
7
7
  end
8
-
8
+
9
9
  def output
10
10
  return "<"+@data+">"
11
11
  end
12
-
12
+
13
13
  alias :to_gv :output
14
14
  alias :to_s :output
15
15
  alias :to_ruby :output
@@ -4,7 +4,7 @@ class GraphViz
4
4
  def check(data)
5
5
  return data
6
6
  end
7
-
7
+
8
8
  def output
9
9
  html = /^<([<|(^<)*<].*)>$/m.match(@data)
10
10
  if html != nil
@@ -13,7 +13,7 @@ class GraphViz
13
13
  @data.to_s.inspect.gsub( "\\\\", "\\" )
14
14
  end
15
15
  end
16
-
16
+
17
17
  alias :to_gv :output
18
18
  alias :to_s :output
19
19
  alias :to_ruby :output
@@ -19,11 +19,11 @@ class GraphViz
19
19
 
20
20
  raise RectException, "Invalid rect value"
21
21
  end
22
-
22
+
23
23
  def output
24
24
  return @data.to_s.inspect.gsub( "\\\\", "\\" )
25
25
  end
26
-
26
+
27
27
  alias :to_gv :output
28
28
  alias :to_s :output
29
29
 
@@ -1,7 +1,7 @@
1
1
  class SplineTypeException < RuntimeError
2
2
  end
3
3
 
4
- # spliteType or point
4
+ # spliteType or point
5
5
  #
6
6
  # spline ( ';' spline )*
7
7
  # where spline = (endp)? (startp)? point (triple)+
@@ -9,16 +9,16 @@ end
9
9
  # and endp = "e,%f,%f"
10
10
  # and startp = "s,%f,%f"
11
11
  #
12
- # If a spline has points p1 p2 p3 ... pn, (n = 1 (mod 3)), the points correspond
13
- # to the control points of a B-spline from p1 to pn. If startp is given, it touches
14
- # one node of the edge, and the arrowhead goes from p1 to startp. If startp is not
15
- # given, p1 touches a node. Similarly for pn and endp.
12
+ # If a spline has points p1 p2 p3 ... pn, (n = 1 (mod 3)), the points correspond
13
+ # to the control points of a B-spline from p1 to pn. If startp is given, it touches
14
+ # one node of the edge, and the arrowhead goes from p1 to startp. If startp is not
15
+ # given, p1 touches a node. Similarly for pn and endp.
16
16
  class GraphViz
17
17
  class Types
18
18
  class SplineType < Common
19
19
  FLOAT_MASK = /[-+]?(?:[0-9]*\.[0-9]+|[0-9]+)/
20
20
  ENDP_MASK = /e\s*,\s*#{FLOAT_MASK}\s*,\s*#{FLOAT_MASK}/
21
- STARTP_MASK = /s\s*,\s*#{FLOAT_MASK}\s*,\s*#{FLOAT_MASK}/
21
+ STARTP_MASK = /s\s*,\s*#{FLOAT_MASK}\s*,\s*#{FLOAT_MASK}/
22
22
  POINT_MASK = /#{FLOAT_MASK}\s*,\s*#{FLOAT_MASK}(?:\s*,\s*#{FLOAT_MASK})?!?/
23
23
  TRIPLE_MASK = /#{POINT_MASK}\s+#{POINT_MASK}\s+#{POINT_MASK}/
24
24
  SPLINE_MASK = /(?:#{ENDP_MASK}\s+)?(?:#{STARTP_MASK}\s+)?#{POINT_MASK}(?:\s*#{TRIPLE_MASK})+/
@@ -39,11 +39,11 @@ class GraphViz
39
39
 
40
40
  raise SplineTypeException, "Invalid spline type value"
41
41
  end
42
-
42
+
43
43
  def output
44
44
  return @data.to_s.inspect.gsub( "\\\\", "\\" )
45
45
  end
46
-
46
+
47
47
  alias :to_gv :output
48
48
  alias :to_s :output
49
49
 
@@ -64,7 +64,7 @@ class GraphViz
64
64
  def triples
65
65
  end
66
66
 
67
- private
67
+ private
68
68
  def point?
69
69
  not @is_spline
70
70
  end
@@ -5,16 +5,16 @@ module GVUtils
5
5
  # (http://copiousfreetime.rubyforge.org/launchy/Launchy/Application.html)
6
6
  # it follow is licence :
7
7
  #
8
- # Permission to use, copy, modify, and/or distribute this software for any
9
- # purpose with or without fee is hereby granted, provided that the above
8
+ # Permission to use, copy, modify, and/or distribute this software for any
9
+ # purpose with or without fee is hereby granted, provided that the above
10
10
  # copyright notice and this permission notice appear in all copies.
11
11
  #
12
- # THE SOFTWARE IS PROVIDED AS IS AND THE AUTHOR DISCLAIMS ALL WARRANTIES
13
- # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14
- # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
15
- # SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16
- # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
17
- # OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
12
+ # THE SOFTWARE IS PROVIDED AS IS AND THE AUTHOR DISCLAIMS ALL WARRANTIES
13
+ # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14
+ # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
15
+ # SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16
+ # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
17
+ # OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
18
18
  # CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19
19
  def find_executable(bin, custom_paths) #:nodoc:
20
20
  system_path = ENV['PATH']
@@ -26,13 +26,13 @@ module GVUtils
26
26
  return file_path if File.executable?(file_path) and File.file?(file_path)
27
27
 
28
28
  if RbConfig::CONFIG['host_os'] =~ /mswin|mingw/ # WAS: elsif RUBY_PLATFORM =~ /mswin|mingw/
29
- found_ext = (ENV['PATHEXT'] || '.exe;.bat;.com').split(";").find {|ext| File.executable?(file + ext) }
30
- return file + found_ext if found_ext
29
+ found_ext = (ENV['PATHEXT'] || '.exe;.bat;.com').split(";").find {|ext| File.executable?(file_path + ext) }
30
+ return file_path + found_ext if found_ext
31
31
  end
32
32
  end
33
33
  return nil
34
34
  end
35
-
35
+
36
36
  def escape_path_containing_blanks(path) #:nodoc:
37
37
  path.gsub!(File::ALT_SEPARATOR, File::SEPARATOR) if File::ALT_SEPARATOR
38
38
  path_elements = path.split(File::SEPARATOR)
@@ -45,7 +45,7 @@ module GVUtils
45
45
  end
46
46
  path_elements.join(File::SEPARATOR)
47
47
  end
48
-
48
+
49
49
  def output_and_errors_from_command(cmd) #:nodoc:
50
50
  unless defined? Open3
51
51
  begin
@@ -76,5 +76,5 @@ module GVUtils
76
76
  raise "Error from #{cmd}:\n#{errors}"
77
77
  end
78
78
  end
79
-
79
+
80
80
  end
@@ -2,17 +2,17 @@ require 'graphviz/core_ext'
2
2
 
3
3
  class GraphViz
4
4
  class Utils
5
- class Colors
5
+ class Colors
6
6
  HEX_FOR_COLOR = /[0-9a-fA-F]{2}/
7
7
  RGBA = /^(#{HEX_FOR_COLOR})(#{HEX_FOR_COLOR})(#{HEX_FOR_COLOR})(#{HEX_FOR_COLOR})?$/
8
-
8
+
9
9
  attr_reader :r, :g, :b, :a
10
10
  attr_reader :h, :s, :v
11
-
11
+
12
12
  def initialize
13
13
  @r, @g, @b, @a, @h, @s, @v, @color = nil, nil, nil, nil, nil, nil, nil, nil
14
14
  end
15
-
15
+
16
16
  def rgb(r, g, b, a = nil)
17
17
  if r.is_a?(Fixnum)
18
18
  r = r.to_s.convert_base(10, 16)
@@ -20,64 +20,64 @@ class GraphViz
20
20
  unless r.is_a?(String) and HEX_FOR_COLOR.match(r)
21
21
  raise ColorException, "Bad red value"
22
22
  end
23
-
23
+
24
24
  if g.is_a?(Fixnum)
25
25
  g = g.to_s.convert_base(10, 16)
26
26
  end
27
27
  unless g.is_a?(String) and HEX_FOR_COLOR.match(g)
28
28
  raise ColorException, "Bad green value"
29
29
  end
30
-
30
+
31
31
  if b.is_a?(Fixnum)
32
32
  b = b.to_s.convert_base(10, 16)
33
33
  end
34
34
  unless b.is_a?(String) and HEX_FOR_COLOR.match(b)
35
35
  raise ColorException, "Bad blue value"
36
36
  end
37
-
37
+
38
38
  if a.is_a?(Fixnum)
39
39
  a = a.to_s.convert_base(10, 16)
40
40
  end
41
41
  unless a.nil? or (a.is_a?(String) and HEX_FOR_COLOR.match(a))
42
42
  raise ColorException, "Bad alpha value"
43
43
  end
44
-
44
+
45
45
  @r = r
46
46
  @g = g
47
47
  @b = b
48
48
  @a = a
49
-
49
+
50
50
  @color = COLORS.key(rgba_string.downcase)
51
-
51
+
52
52
  @h, @s, @v = rgb_to_hsv(@r, @g, @b)
53
53
  end
54
-
54
+
55
55
  def hsv(h, s, v)
56
56
  unless h.is_a?(Float) and s.is_a?(Float) and v.is_a?(Float)
57
57
  raise ColorException, "Bas HSV value"
58
58
  end
59
-
59
+
60
60
  @h = h
61
61
  @s = s
62
62
  @v = v
63
-
63
+
64
64
  @r, @g, @b = hsv_to_rgb(@h, @s, @v)
65
-
65
+
66
66
  @color = COLORS.key(rgba_string.downcase);
67
67
  end
68
-
68
+
69
69
  def name(c = nil)
70
70
  return @color if c.nil?
71
71
 
72
72
  @color = c
73
-
73
+
74
74
  rgb = COLORS[c]
75
75
  unless rgb.nil?
76
76
  m = RGBA.match(rgb)
77
77
  @r = m[1]
78
78
  @g = m[2]
79
79
  @b = m[3]
80
-
80
+
81
81
  @h, @s, @v = rgb_to_hsv(@r, @g, @b)
82
82
  end
83
83
  end
@@ -89,7 +89,7 @@ class GraphViz
89
89
  nil
90
90
  end
91
91
  end
92
-
92
+
93
93
  def hsv_string(s = ", ")
94
94
  unless @h.nil?
95
95
  "#{@h}#{s}#{@s}#{s}#{@v}"
@@ -105,45 +105,45 @@ class GraphViz
105
105
  def hsv_to_rgb(h, s, v)
106
106
  Colors.hsv_to_rgb(h, s, v)
107
107
  end
108
-
108
+
109
109
  class <<self
110
110
  def rgb(r, g, b, a = nil)
111
111
  color = Colors.new
112
112
  color.rgb(r, g, b, a)
113
113
  color
114
114
  end
115
-
115
+
116
116
  def hsv(h, s, v)
117
117
  color = Colors.new
118
118
  color.hsv(h, s, v)
119
119
  color
120
120
  end
121
-
121
+
122
122
  def name(c)
123
123
  color = Colors.new
124
124
  color.name(c)
125
125
  color
126
126
  end
127
-
127
+
128
128
  def rgb_to_hsv(r, g, b)
129
129
  h, s, v = 0.0, 0.0, 0.0
130
-
130
+
131
131
  _r = r.convert_base(16, 10).to_f / 255.0
132
132
  _g = g.convert_base(16, 10).to_f / 255.0
133
133
  _b = b.convert_base(16, 10).to_f / 255.0
134
134
  rgb = [ _r, _g, _b ]
135
-
135
+
136
136
  min = rgb.min
137
137
  max = rgb.max
138
138
  v = max
139
-
139
+
140
140
  delta = max - min
141
141
  if max != 0.0
142
142
  s = delta / max
143
143
  else
144
144
  return [-1, 0, v]
145
145
  end
146
-
146
+
147
147
  if _r == max
148
148
  h = ( _g - _b ) / delta
149
149
  elsif( _g == max )
@@ -151,29 +151,29 @@ class GraphViz
151
151
  else
152
152
  h = 4 + ( _r - _g ) / delta
153
153
  end
154
-
154
+
155
155
  h = h * 60
156
156
  h = h + 360 if h < 0
157
157
  h = h / 360.0
158
-
158
+
159
159
  [h, s, v]
160
160
  end
161
-
161
+
162
162
  def hsv_to_rgb(h, s, v)
163
163
  _h, _s, _v = h.to_f * 360.0, s.to_f, v.to_f
164
-
165
- if _s == 0.0
164
+
165
+ if _s == 0.0
166
166
  r = (_v * 255 ).to_i.to_s.convert_base(10,16)
167
167
  return [r, r, r]
168
168
  end
169
-
169
+
170
170
  _h = _h / 60.0
171
171
  i = _h.floor
172
172
  f = _h - i
173
173
  p = _v * ( 1.0 - _s )
174
174
  q = _v * ( 1.0 - _s * f )
175
175
  t = _v * ( 1.0 - _s * ( 1 - f ) )
176
- case i
176
+ case i
177
177
  when 0
178
178
  r = _v
179
179
  g = t
@@ -199,7 +199,7 @@ class GraphViz
199
199
  g = p
200
200
  b = q
201
201
  end
202
-
202
+
203
203
  [
204
204
  (r * 255).to_i.to_s.convert_base(10, 16),
205
205
  (g * 255).to_i.to_s.convert_base(10, 16),
@@ -207,7 +207,7 @@ class GraphViz
207
207
  ]
208
208
  end
209
209
  end
210
-
210
+
211
211
  COLORS = {
212
212
  "aliceblue" => "f0f8ff",
213
213
  "antiquewhite" => "faebd7",