rghost 0.6.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. data/History.txt +4 -0
  2. data/Manifest.txt +101 -0
  3. data/README.txt +3 -0
  4. data/Rakefile +93 -0
  5. data/lib/rghost.rb +3 -0
  6. data/lib/rghost/arc.rb +39 -0
  7. data/lib/rghost/barcode.rb +40 -0
  8. data/lib/rghost/callback.rb +55 -0
  9. data/lib/rghost/color.rb +118 -0
  10. data/lib/rghost/constants.rb +616 -0
  11. data/lib/rghost/convert.rb +24 -0
  12. data/lib/rghost/cursor.rb +82 -0
  13. data/lib/rghost/data_grid/basic_grid.rb +136 -0
  14. data/lib/rghost/data_grid/csv_grid.rb +27 -0
  15. data/lib/rghost/data_grid/data_grid.rb +14 -0
  16. data/lib/rghost/data_grid/dynamic_callback.rb +12 -0
  17. data/lib/rghost/data_grid/field_format.rb +60 -0
  18. data/lib/rghost/data_grid/grid.rb +18 -0
  19. data/lib/rghost/data_grid/header.rb +111 -0
  20. data/lib/rghost/data_grid/rails_grid.rb +37 -0
  21. data/lib/rghost/data_grid/static_callback.rb +13 -0
  22. data/lib/rghost/data_grid/style/border_lines.rb +47 -0
  23. data/lib/rghost/data_grid/style/bottom_lines.rb +30 -0
  24. data/lib/rghost/data_grid/style/old_forms.rb +30 -0
  25. data/lib/rghost/data_grid/style/style.rb +8 -0
  26. data/lib/rghost/document.rb +380 -0
  27. data/lib/rghost/dsc_entry.rb +20 -0
  28. data/lib/rghost/dynamic_document_callback.rb +27 -0
  29. data/lib/rghost/eps.rb +22 -0
  30. data/lib/rghost/font.rb +52 -0
  31. data/lib/rghost/function.rb +36 -0
  32. data/lib/rghost/gif.rb +28 -0
  33. data/lib/rghost/graphic.rb +28 -0
  34. data/lib/rghost/gs_alone.rb +17 -0
  35. data/lib/rghost/helpers.rb +13 -0
  36. data/lib/rghost/horizontal_line.rb +29 -0
  37. data/lib/rghost/image.rb +26 -0
  38. data/lib/rghost/jpeg.rb +26 -0
  39. data/lib/rghost/line.rb +40 -0
  40. data/lib/rghost/line_width.rb +17 -0
  41. data/lib/rghost/load.rb +37 -0
  42. data/lib/rghost/newpath.rb +20 -0
  43. data/lib/rghost/paper.rb +88 -0
  44. data/lib/rghost/point.rb +22 -0
  45. data/lib/rghost/point_with_command.rb +17 -0
  46. data/lib/rghost/ps/basic.ps +14 -0
  47. data/lib/rghost/ps/begin_document.ps +7 -0
  48. data/lib/rghost/ps/callbacks.ps +146 -0
  49. data/lib/rghost/ps/code128.font +344 -0
  50. data/lib/rghost/ps/code39.font +195 -0
  51. data/lib/rghost/ps/cursor.ps +41 -0
  52. data/lib/rghost/ps/datagrid.ps +52 -0
  53. data/lib/rghost/ps/ean.font +150 -0
  54. data/lib/rghost/ps/eps.ps +42 -0
  55. data/lib/rghost/ps/font.ps +31 -0
  56. data/lib/rghost/ps/functions.ps +646 -0
  57. data/lib/rghost/ps/gif.ps +150 -0
  58. data/lib/rghost/ps/horizontal_line.ps +3 -0
  59. data/lib/rghost/ps/i25.font +103 -0
  60. data/lib/rghost/ps/jpeg.ps +122 -0
  61. data/lib/rghost/ps/paper.ps +8 -0
  62. data/lib/rghost/ps/rectangle.ps +5 -0
  63. data/lib/rghost/ps/row.ps +4 -0
  64. data/lib/rghost/ps/show.ps +20 -0
  65. data/lib/rghost/ps/table_callbacks.ps +96 -0
  66. data/lib/rghost/ps/textarea.ps +11 -0
  67. data/lib/rghost/ps/type.ps +1 -0
  68. data/lib/rghost/ps/unit.ps +3 -0
  69. data/lib/rghost/ps/vertical_line.ps +14 -0
  70. data/lib/rghost/ps_object.rb +51 -0
  71. data/lib/rghost/rectangle.rb +39 -0
  72. data/lib/rghost/rgengine.so +0 -0
  73. data/lib/rghost/rghost.rb +3 -0
  74. data/lib/rghost/ruby_ghost_config.rb +25 -0
  75. data/lib/rghost/ruby_ghost_engine.rb +175 -0
  76. data/lib/rghost/ruby_to_ps.rb +92 -0
  77. data/lib/rghost/scale.rb +14 -0
  78. data/lib/rghost/show.rb +31 -0
  79. data/lib/rghost/static_document_callback.rb +22 -0
  80. data/lib/rghost/text_in.rb +29 -0
  81. data/lib/rghost/textarea.rb +115 -0
  82. data/lib/rghost/units.rb +81 -0
  83. data/lib/rghost/variable.rb +12 -0
  84. data/lib/rghost/version.rb +9 -0
  85. data/lib/rghost/vertical_line.rb +29 -0
  86. data/scripts/txt2html +67 -0
  87. data/setup.rb +1585 -0
  88. data/test/test_helper.rb +2 -0
  89. data/test/test_rghost.rb +11 -0
  90. data/website/index.html +11 -0
  91. data/website/index.txt +30 -0
  92. data/website/javascripts/rounded_corners_lite.inc.js +285 -0
  93. data/website/stylesheets/screen.css +129 -0
  94. data/website/template.rhtml +48 -0
  95. metadata +145 -0
data/History.txt ADDED
@@ -0,0 +1,4 @@
1
+ +++ 0.0.1 2007-06-06
2
+
3
+ + 1 major enhancement:
4
+ + Initial release
data/Manifest.txt ADDED
@@ -0,0 +1,101 @@
1
+ History.txt
2
+ Manifest.txt
3
+ README.txt
4
+ Rakefile
5
+ lib/rghost.rb
6
+ lib/rghost/version.rb
7
+ scripts/txt2html
8
+ setup.rb
9
+ test/test_helper.rb
10
+ test/test_rghost.rb
11
+ website/index.html
12
+ website/index.txt
13
+ website/javascripts/rounded_corners_lite.inc.js
14
+ website/stylesheets/screen.css
15
+ website/template.rhtml
16
+ lib/
17
+ lib/rghost
18
+ lib/rghost/vertical_line.rb
19
+ lib/rghost/graphic.rb
20
+ lib/rghost/color.rb
21
+ lib/rghost/document.rb
22
+ lib/rghost/load.rb
23
+ lib/rghost/convert.rb
24
+ lib/rghost/function.rb
25
+ lib/rghost/jpeg.rb
26
+ lib/rghost/point_with_command.rb
27
+ lib/rghost/horizontal_line.rb
28
+ lib/rghost/ruby_to_ps.rb
29
+ lib/rghost/line_width.rb
30
+ lib/rghost/gs_alone.rb
31
+ lib/rghost/eps.rb
32
+ lib/rghost/point.rb
33
+ lib/rghost/callback.rb
34
+ lib/rghost/barcode.rb
35
+ lib/rghost/rghost.rb
36
+ lib/rghost/units.rb
37
+ lib/rghost/gif.rb
38
+ lib/rghost/font.rb
39
+ lib/rghost/text_in.rb
40
+ lib/rghost/paper.rb
41
+ lib/rghost/data_grid
42
+ lib/rghost/data_grid/style
43
+ lib/rghost/data_grid/style/bottom_lines.rb
44
+ lib/rghost/data_grid/style/style.rb
45
+ lib/rghost/data_grid/style/old_forms.rb
46
+ lib/rghost/data_grid/style/border_lines.rb
47
+ lib/rghost/data_grid/data_grid.rb
48
+ lib/rghost/data_grid/dynamic_callback.rb
49
+ lib/rghost/data_grid/rails_grid.rb
50
+ lib/rghost/data_grid/csv_grid.rb
51
+ lib/rghost/data_grid/static_callback.rb
52
+ lib/rghost/data_grid/grid.rb
53
+ lib/rghost/data_grid/basic_grid.rb
54
+ lib/rghost/data_grid/header.rb
55
+ lib/rghost/data_grid/field_format.rb
56
+ lib/rghost/rgengine.so
57
+ lib/rghost/constants.rb
58
+ lib/rghost/ps
59
+ lib/rghost/ps/horizontal_line.ps
60
+ lib/rghost/ps/rectangle.ps
61
+ lib/rghost/ps/gif.ps
62
+ lib/rghost/ps/font.ps
63
+ lib/rghost/ps/paper.ps
64
+ lib/rghost/ps/row.ps
65
+ lib/rghost/ps/functions.ps
66
+ lib/rghost/ps/code39.font
67
+ lib/rghost/ps/cursor.ps
68
+ lib/rghost/ps/textarea.ps
69
+ lib/rghost/ps/datagrid.ps
70
+ lib/rghost/ps/callbacks.ps
71
+ lib/rghost/ps/unit.ps
72
+ lib/rghost/ps/show.ps
73
+ lib/rghost/ps/vertical_line.ps
74
+ lib/rghost/ps/basic.ps
75
+ lib/rghost/ps/type.ps
76
+ lib/rghost/ps/begin_document.ps
77
+ lib/rghost/ps/i25.font
78
+ lib/rghost/ps/jpeg.ps
79
+ lib/rghost/ps/table_callbacks.ps
80
+ lib/rghost/ps/eps.ps
81
+ lib/rghost/ps/ean.font
82
+ lib/rghost/ps/code128.font
83
+ lib/rghost/cursor.rb
84
+ lib/rghost/textarea.rb
85
+ lib/rghost/variable.rb
86
+ lib/rghost/show.rb
87
+ lib/rghost/image.rb
88
+ lib/rghost/version.rb
89
+ lib/rghost/line.rb
90
+ lib/rghost/scale.rb
91
+ lib/rghost/dsc_entry.rb
92
+ lib/rghost/helpers.rb
93
+ lib/rghost/rectangle.rb
94
+ lib/rghost/dynamic_document_callback.rb
95
+ lib/rghost/static_document_callback.rb
96
+ lib/rghost/arc.rb
97
+ lib/rghost/newpath.rb
98
+ lib/rghost/ps_object.rb
99
+ lib/rghost/ruby_ghost_config.rb
100
+ lib/rghost/ruby_ghost_engine.rb
101
+ lib/rghost.rb
data/README.txt ADDED
@@ -0,0 +1,3 @@
1
+ README for rghost
2
+ =================
3
+
data/Rakefile ADDED
@@ -0,0 +1,93 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'rake/clean'
4
+ require 'rake/testtask'
5
+ require 'rake/packagetask'
6
+ require 'rake/gempackagetask'
7
+ require 'rake/rdoctask'
8
+ require 'rake/contrib/rubyforgepublisher'
9
+ require 'fileutils'
10
+ require 'hoe'
11
+ include FileUtils
12
+ require File.join(File.dirname(__FILE__), 'lib', 'rghost', 'version')
13
+
14
+ AUTHOR = 'shairon' # can also be an array of Authors
15
+ EMAIL = "your contact email for bug fixes and info"
16
+ DESCRIPTION = "description of gem"
17
+ GEM_NAME = 'rghost' # what ppl will type to install your gem
18
+ RUBYFORGE_PROJECT = 'rghost' # The unix name for your project
19
+ HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"
20
+ DOWNLOAD_PATH = "http://rubyforge.org/projects/#{RUBYFORGE_PROJECT}"
21
+
22
+ NAME = "rghost"
23
+ REV = nil # UNCOMMENT IF REQUIRED: File.read(".svn/entries")[/committed-rev="(d+)"/, 1] rescue nil
24
+ VERS = Rghost::VERSION::STRING + (REV ? ".#{REV}" : "")
25
+ CLEAN.include ['**/.*.sw?', '*.gem', '.config', '**/.DS_Store']
26
+ RDOC_OPTS = ['--quiet', '--title', 'rghost documentation',
27
+ "--opname", "index.html",
28
+ "--line-numbers",
29
+ "--main", "README",
30
+ "--inline-source"]
31
+
32
+ class Hoe
33
+ def extra_deps
34
+ @extra_deps.reject { |x| Array(x).first == 'hoe' }
35
+ end
36
+ end
37
+
38
+ # Generate all the Rake tasks
39
+ # Run 'rake -T' to see list of generated tasks (from gem root directory)
40
+ hoe = Hoe.new(GEM_NAME, VERS) do |p|
41
+ p.author = AUTHOR
42
+ p.description = DESCRIPTION
43
+ p.email = EMAIL
44
+ p.summary = DESCRIPTION
45
+ p.url = HOMEPATH
46
+ p.rubyforge_name = RUBYFORGE_PROJECT if RUBYFORGE_PROJECT
47
+ p.test_globs = ["test/**/test_*.rb"]
48
+ p.clean_globs = CLEAN #An array of file patterns to delete on clean.
49
+
50
+ # == Optional
51
+ p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
52
+ #p.extra_deps = [] # An array of rubygem dependencies [name, version], e.g. [ ['active_support', '>= 1.3.1'] ]
53
+ #p.spec_extras = {} # A hash of extra values to set in the gemspec.
54
+ end
55
+
56
+
57
+ desc 'Generate website files'
58
+ task :website_generate do
59
+ Dir['website/**/*.txt'].each do |txt|
60
+ sh %{ ruby scripts/txt2html #{txt} > #{txt.gsub(/txt$/,'html')} }
61
+ end
62
+ end
63
+
64
+ desc 'Upload website files to rubyforge'
65
+ task :website_upload do
66
+ config = YAML.load(File.read(File.expand_path("~/.rubyforge/user-config.yml")))
67
+ host = "#{config["username"]}@rubyforge.org"
68
+ remote_dir = "/var/www/gforge-projects/#{RUBYFORGE_PROJECT}/"
69
+ # remote_dir = "/var/www/gforge-projects/#{RUBYFORGE_PROJECT}/#{GEM_NAME}"
70
+ local_dir = 'website'
71
+ sh %{rsync -av #{local_dir}/ #{host}:#{remote_dir}}
72
+ end
73
+
74
+ desc 'Generate and upload website files'
75
+ task :website => [:website_generate, :website_upload]
76
+
77
+ desc 'Release the website and new gem version'
78
+ task :deploy => [:check_version, :website, :release]
79
+
80
+ desc 'Runs tasks website_generate and install_gem as a local deployment of the gem'
81
+ task :local_deploy => [:website_generate, :install_gem]
82
+
83
+ task :check_version do
84
+ unless ENV['VERSION']
85
+ puts 'Must pass a VERSION=x.y.z release version'
86
+ exit
87
+ end
88
+ unless ENV['VERSION'] == VERS
89
+ puts "Please update your version.rb to match the release version, currently #{VERS}"
90
+ exit
91
+ end
92
+ end
93
+
data/lib/rghost.rb ADDED
@@ -0,0 +1,3 @@
1
+ $LOAD_PATH << File.dirname(__FILE__)+File::SEPARATOR+"rghost"
2
+ require 'document'
3
+ require 'data_grid/data_grid'
data/lib/rghost/arc.rb ADDED
@@ -0,0 +1,39 @@
1
+ require "ps_object"
2
+ require "units"
3
+ # Arc representa arcos, onde ang2 acende os pontos e ang2 apaga os pontos, ambos no sentido anti-hor�rio para valores positivos.
4
+ # Para evitar surpresas no esbo�o do Arc recomenda-se o uso dentro de um bloco newpath.
5
+ #
6
+ # doc=Document.new
7
+ # doc.newpath do
8
+ # set Arc.new(:x => 3, :y => 3, :radius => 70, :ang2 => 180)
9
+ # end
10
+ class Arc < PsObject
11
+ DEFAULT_OPTIONS={:fill => false, :x => :limit_left, :y=> :current_row, :radius => 50, :ang1 => 0, :ang2 => 360 , :use => :arc }
12
+ #Nova inst�ncia de Arc
13
+ # Responde as op��es
14
+ # :x => :limit_left # Posi��o X
15
+ # :y => :current_row # Posi��o Y
16
+ # :fill => false # false - N�o preenche o arco mas desenha a borda, true - Preenche o arco
17
+ # :radius => 50 # O raio do arco, valor em pontos
18
+ # :ang1 => 0 # Apaga os pontos
19
+ # :ang2 => 360 # Acende os Pontos
20
+ # :use => :arc # Usa o comando :arc e :arcn
21
+ #
22
+ #Postscript Command: x y r ang1 ang2 arc
23
+ def initialize(options={})
24
+ @options=DEFAULT_OPTIONS.dup.merge(options)
25
+ end
26
+
27
+ def ps
28
+ x,y=@options[:x], @options[:y]
29
+ x,y=Units::parse(x),Units::parse(y) #with parse
30
+
31
+
32
+ cmd=@options[:fill] ? :fill : :stroke
33
+ "#{x} #{y} #{@options[:radius]} #{@options[:ang1]} #{@options[:ang2]} #{@options[:use]} #{cmd}"
34
+ end
35
+
36
+
37
+
38
+
39
+ end
@@ -0,0 +1,40 @@
1
+ require "ps_object"
2
+ #Trata das fontes bin�rias dispon�veis na API(GNU Barcodes)
3
+ class Barcode < PsObject
4
+ DEFAULT_BARCODES={
5
+ :ean => "EANJK",
6
+ :code128 => "Code128JK" ,
7
+ :code39 => "Code39JK",
8
+ :i25 => "Codei25JK",
9
+ }
10
+ #Nova inst�ncia de Barcode
11
+ def initialize(barcode_name)
12
+ @barcode=barcode_name
13
+
14
+ end
15
+
16
+ def ps
17
+ Load.library(name,:font)
18
+ end
19
+ #Obtem o nome da real da fonte Postscript
20
+ def font_name
21
+ DEFAULT_BARCODES[@barcode]
22
+
23
+ end
24
+ #Codifica a fonte em N,n,W e w. Formato esperado pela fonte i25.
25
+ def Barcode.i25_encode(string_integers)
26
+ cd=%w(00110 10001 01001 11000 00101 10100 01100 00011 10010 01010) # binaries
27
+ hash={'00' => 'n' , '01' => 'N', '10' => 'w', '11' => 'W'}
28
+ cnv= ''
29
+ v=-1;
30
+ barcode=barcode.scan(/./).map {|c| c.to_i}
31
+ (barcode.size.div 2).times do
32
+ b1,b2=cd[barcode[v+=1]],cd[barcode[v+=1]]
33
+ 0.upto(4) { |i| cnv << hash[ b1[i].chr+b2[i].chr] }
34
+ end
35
+ "<#{cnv}>"
36
+ end
37
+ end
38
+
39
+
40
+ #puts Barcode.new(:EAN).binary_font
@@ -0,0 +1,55 @@
1
+ require "ps_object"
2
+ require "ruby_to_ps"
3
+
4
+ # Callback representa uma chamada com condi��o :only e :except para elementos inteiros.
5
+ # � gerado metac�digo em Postscript tendo como base um dict no formato abaixo.
6
+ # /dictname 3 dict def
7
+ # dictname begin
8
+ # /proc {} bind def
9
+ # /except [ ] def
10
+ # /only [ ] def
11
+ # end
12
+ # Obs: Se detectado pelo menos uma entrada para :only o :except n�o ser� executado
13
+ #
14
+ class Callback < PsObject
15
+ attr_accessor :only, :except, :name
16
+ include RubyToPs
17
+ #Nova inst�ncia de Callback
18
+ # Responde as op��es
19
+ # :only => [1,2] # Array - Callback ser� executado somente para os valores
20
+ # :except => [3,4] # Array - Callback n�o executar� para os valores
21
+ #Exemplo:
22
+ # Callback.new :only => [4,10,11]
23
+ def initialize(name,options={},&block) #((|name|)) nome do callback
24
+ super(&block)
25
+ @name=name
26
+ @options=options
27
+
28
+ end
29
+
30
+ def ps
31
+
32
+
33
+ @only=num_to_array(@options[:only])
34
+ @except=num_to_array(@options[:except])
35
+
36
+
37
+
38
+ "\n/#{@name} 3 dict def #{@name} begin \n/proc { #{super} } bind def \n/except #{to_array(@except)} def \n/only #{to_array(@only)} def \nend "
39
+
40
+ end
41
+
42
+ private
43
+ def num_to_array(value)
44
+ case value
45
+ when Fixnum:
46
+ a=[]
47
+ a << value
48
+ when NilClass: []
49
+ else
50
+ value
51
+ end
52
+
53
+ end
54
+ end
55
+
@@ -0,0 +1,118 @@
1
+ require "ps_object"
2
+ require "constants"
3
+ require "ruby_to_ps" #array_to_stack
4
+
5
+ #Prototype de Colores
6
+ #Os valores no intevalo de 0.0 a 1.0 se o valor for maior que 1 ser� dividido por 100.
7
+ class Color < PsObject
8
+
9
+ include RubyToPs
10
+ #Cria uma cor RGB ou CMYK ou Gray dependendo do tipo do valor de entrada(factory).
11
+ # Para o tipo
12
+ # String => RGB valor em Hexa color='#FFAA33'
13
+ # Array => CMYK com 4 elementos color=[0.5, 0, 0, 1]
14
+ # Array => RGB com 3 elementos color=[0.5, 0, 0]
15
+ # Hash => CMYK - color={:cyan=> 1 ,:magenta => 0, :yellow => 0, :black => 0}
16
+ # Hash => RGB - color={:red => 0, :green => 0, :blue => 0}
17
+ # Numeric => Gray - color=0.5
18
+ #Exemplos:
19
+ # Color.create("#03D5F2") #RGB
20
+ # Color.create([0.3, 0.4, 0.2, 0.9]) #CMYK
21
+ # Color.create(0.9) #Gray
22
+ def Color.create(color='#000000')
23
+
24
+ return case color
25
+ when String: RGB.new(color)
26
+ when Array, Hash:
27
+ if color.size == 3
28
+ RGB.new(color)
29
+ elsif color.size == 4
30
+ CMYK.new(color)
31
+ else
32
+ raise ArgumentError.new
33
+ end
34
+ when Numeric: Gray.new(color)
35
+ else
36
+ raise ArgumentError.new
37
+ end
38
+
39
+ end
40
+
41
+
42
+ end
43
+
44
+ #Espa�o de cor RGB
45
+ class RGB < Color
46
+ attr_accessor :red, :green, :blue
47
+ CONSTANTS=Constants::Colors::RGB
48
+ DEFAULT_RGB={:red => 0, :green => 0, :blue => 0}
49
+ #Nova inst�ncia de RGB
50
+ #Por sequ�ncia de parametros
51
+ # RGB.new(0.5,1,0)
52
+ # #ou Hash
53
+ # RGB.new(:red => 0.5, :green => 1, :blue => 0)
54
+ # #ou String
55
+ # RGB.new('#F0FF00')
56
+ def initialize(color_or_red=nil,green=nil,blue=nil)
57
+ @color=color_or_red
58
+ @color=[color_or_red.to_f,green.to_f,blue.to_f] if color_or_red.is_a? Numeric
59
+ @color=DEFAULT_RGB.merge(color_or_red) if color_or_red.is_a? Hash
60
+
61
+ end
62
+
63
+ def ps
64
+
65
+ value=case @color
66
+ when Hash: [@color[:red],@color[:green],@color[:blue]]
67
+ when Array: @color
68
+ when String: hex_to_rgb(@color)
69
+ when NilClass: [0,0,1]
70
+ end
71
+ array_to_stack(value.map{|n| n > 1 ? n/100.0: n})+"setrgbcolor"
72
+ end
73
+
74
+ private
75
+
76
+ def hex_to_rgb(color="#FFFFFF")
77
+
78
+ color.gsub(/#/,'').scan(/[\dA-F]{2}/).map{|h| h.hex / 255.0}
79
+ end
80
+
81
+ end
82
+
83
+ #Espa�o de cor CMYK
84
+ class CMYK < Color
85
+ attr_accessor :cyan ,:magenta, :yellow, :black
86
+ CONSTANTS=Constants::Colors::CMYK
87
+ #Nova inst�ncia de CMYK
88
+ # CMYK.new(:cyan=> 1 ,:magenta => 0, :yellow => 0, :black => 0)
89
+ def initialize(color={:cyan=> 1 ,:magenta => 0, :yellow => 0, :black => 0})
90
+ @color=color
91
+ end
92
+
93
+ def ps
94
+
95
+ value=case @color
96
+ when Hash: [@color[:cyan],@color[:magenta],@color[:yellow],@color[:black]]
97
+ when Array: @color
98
+ end
99
+ array_to_stack(value.map{|n| n > 1 ? n/100.0: n})+"setcmykcolor"
100
+
101
+ end
102
+
103
+ end
104
+ #Espa�o de cor Gray
105
+ class Gray < Color
106
+ attr_accessor :gray
107
+ #Nova inst�ncia de Gray
108
+ # Gray.new(0.7)
109
+ def initialize(gray=0.8)
110
+ @gray=gray
111
+ end
112
+
113
+ def ps
114
+ @gray = @gray/100.0 if @gray > 1
115
+ "#{@gray} setgray"
116
+ end
117
+
118
+ end