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
@@ -0,0 +1,37 @@
1
+ require 'ps_object'
2
+ #Cria uma Grid para ActiveRecord::Base obtendo o valor de @attributes atraves do nome.
3
+ class DataGrid::RailsGrid < DataGrid::BasicGrid
4
+ #Adiciona um Array de objetos ActiveRecord::Base
5
+ def data(_data)
6
+ _data.collect do |d|
7
+ line=@rails_cols.collect{|c| d[c[:field_name]] }
8
+ proc_line(line)
9
+ end
10
+ end
11
+ #Adiciona colunas associando :field_name ao t�tulo da coluna
12
+ #Exemplo:
13
+ #Para o exemplo abaixo a classe Calls � uma heran�a de ActiveRecord::Base. Constru��o normal.
14
+ # rails_grid=DataGrid::RailsGrid.new(:align => :center, :width => 3)
15
+ #Mapeamento, primeiro o nome do atributo, depois as op��es j� conhecidas
16
+ #
17
+ # rails_grid.col :mobile, :title => "Mobile", :align => :right
18
+ # rails_grid.col :duration, :title => "Dura��o",:width => 3
19
+ # rails_grid.col :start, :title => "Inicio", :format => :eurodate
20
+ # rails_grid.col :called, :title => "N�mero", :align => :right, :title_align => :center
21
+ # Carregamento dos dados
22
+ # calls = Calls.find(:all, :limit => 5000)
23
+ # rails_grid.data(calls)
24
+ def col(field_name, options={})
25
+ super(options[:title],options)
26
+ @rails_cols||=[]
27
+ owf=options.dup #from options with field
28
+ owf[:field_name]||=field_name
29
+ @rails_cols << owf
30
+
31
+ end
32
+ # Alias col
33
+ def column(field_name, options={})
34
+ col(field_name,options)
35
+ end
36
+
37
+ end
@@ -0,0 +1,13 @@
1
+ require "ps_object"
2
+ require "function"
3
+ #Callbacks est�ticos a n�vel de Grid
4
+ class DataGrid::StaticCallback < Function
5
+ ACCEPT=[:before_table_create, :after_table_create]
6
+
7
+ def initialize(name,&block)
8
+ raise NameError.new("#{name} no accept in #{self.class}") unless ACCEPT.include? name
9
+ super(name,&block)
10
+ end
11
+
12
+ end
13
+
@@ -0,0 +1,47 @@
1
+
2
+
3
+ class DataGrid::Style::BorderLines
4
+
5
+ def set_style(grid)
6
+
7
+ grid.before_row do
8
+
9
+ set HorizontalLine.new(:top, :size => grid.header.size)
10
+ set HorizontalLine.new(:bottom,:size => grid.header.size)
11
+ end
12
+
13
+ grid.before_column :only => 0 do
14
+ set VerticalLine.row
15
+ end
16
+
17
+ grid.after_column do
18
+ set VerticalLine.row
19
+ end
20
+
21
+
22
+ grid.header.before_create do
23
+ set LineWidth.new(0)
24
+ call :font_bold
25
+ set HorizontalLine.new(:top, :size => grid.header.size)
26
+ set HorizontalLine.new(:bottom,:size => grid.header.size)
27
+ end
28
+
29
+ grid.header.after_create { call :font_normal }
30
+
31
+
32
+
33
+ grid.header.before_column :only => 0 do
34
+ set VerticalLine.row
35
+ end
36
+
37
+ grid.header.after_column do
38
+ set VerticalLine.row
39
+ end
40
+
41
+
42
+
43
+
44
+ end
45
+
46
+
47
+ end
@@ -0,0 +1,30 @@
1
+
2
+
3
+ class DataGrid::Style::BottomLines
4
+
5
+ def set_style(grid)
6
+
7
+ size=grid.header.size
8
+ grid.before_row do
9
+ set HorizontalLine.new(:bottom,:size => grid.header.size)
10
+
11
+ end
12
+
13
+ grid.header.before_create do
14
+ set LineWidth.new(0)
15
+ set HorizontalLine.new(:bottom,:size => grid.header.size)
16
+ call :font_bold
17
+ end
18
+
19
+ grid.header.after_create { call :font_normal }
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+ end
28
+
29
+
30
+ end
@@ -0,0 +1,30 @@
1
+
2
+
3
+ class DataGrid::Style::OldForms
4
+
5
+ def set_style(grid)
6
+
7
+ size=grid.header.size
8
+ grid.odd_row do
9
+ set Rectangle.background_row(:size => size)
10
+
11
+ end
12
+
13
+ grid.header.before_create do
14
+ set LineWidth.new(0)
15
+ set Rectangle.background_row(:size => size, :color => Gray.new(0.9) )
16
+ call :font_bold
17
+ end
18
+
19
+ grid.header.after_create { call :font_normal }
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+ end
28
+
29
+
30
+ end
@@ -0,0 +1,8 @@
1
+
2
+ module DataGrid
3
+ module Style
4
+ require 'data_grid/style/border_lines'
5
+ require 'data_grid/style/old_forms'
6
+ require 'data_grid/style/bottom_lines'
7
+ end
8
+ end
@@ -0,0 +1,380 @@
1
+ ##
2
+ # Ruby Ghost Engine - Document Builder.
3
+ # http://rubyforge.org/projects/rghost/
4
+ # Author Shairon Toledo <shairon.toledo at gmail.com> http://www.hashcode.eti.br
5
+ # Brazil Jun/2007
6
+ #
7
+ # Licensed under a Creative Commons licence.
8
+ # http://creativecommons.org/licenses/by-sa/2.5/br/
9
+ ##
10
+
11
+ require "ps_object"
12
+ require "dynamic_document_callback"
13
+ require "static_document_callback"
14
+ require "paper"
15
+ require "load"
16
+ require "horizontal_line"
17
+ require "vertical_line"
18
+ require "function"
19
+ require "font"
20
+ require "cursor"
21
+ require "show"
22
+ require "rectangle"
23
+ require "color"
24
+ require "graphic"
25
+ require "arc"
26
+ require "newpath"
27
+ require "line"
28
+ require "line_width"
29
+ require "textarea"
30
+ require "variable"
31
+ require "eps"
32
+ require "jpeg"
33
+ require "gif"
34
+ require "text_in"
35
+ require "ruby_ghost_engine"
36
+ require "barcode"
37
+ require "convert"
38
+
39
+
40
+ #Document � a classe que centraliza a estrutura do documento
41
+ class Document < PsObject
42
+ DEFAULT_OPTIONS={
43
+ :rows_per_page => 80 ,
44
+ :count_pages => 10,
45
+ :row_height => 0.4,
46
+ :row_padding => 0.1,
47
+ :fontsize=> 8
48
+ }
49
+ #Nova inst�ncia de Document com proxy da classe Paper.
50
+ # Responde as op��es
51
+ #Document
52
+ # :rows_per_page => 80 , # M�ximo de linhas por p�gina
53
+ # :count_pages => 10, # Total de p�ginas do documento
54
+ # :row_height => 0.4, # Altura da faixa
55
+ # :row_padding => 0.1, # Espa�o entre cada faixa
56
+ # :fontsize=> 8 # Tamanho da fonte padr�o
57
+ #Paper
58
+ # :paper => :A4 # Tamanho do papel, personalizavel com array width X height(em pontos). Exmp: :paper => [400,300]
59
+ # :landscape => false # Disposi��o do papel em 90�
60
+ # :margin_top => 1, # Margin de topo
61
+ # :margin_right => 1, # Margin direita
62
+ # :margin_bottom => 1, # Margin da base
63
+ # :margin_left => 1, # Margin esquerda
64
+ # :duplex => false, # true - duas faces(para impress�o)
65
+ # :tumble => false # true - tipo do duplex(para impress�o)
66
+ #
67
+ #
68
+ def initialize(options={},&block)
69
+ super("%!RubyGhostEngine")
70
+ @head,@callbacks=PsObject.new,PsObject.new
71
+ @head.set Load.library(:type)
72
+ @head.set Load.library(:unit)
73
+ @paper=Paper.new(options[:paper] || :A4, options)
74
+ @head.set @paper
75
+
76
+ @variables=DEFAULT_OPTIONS.dup.merge(options)
77
+ @defines=[]
78
+
79
+ default_variables
80
+ instance_eval(&block) if block
81
+ end
82
+ #Facade Paper.gs_paper
83
+ #Obtem o valor no formato esperado pelo GS.
84
+ def gs_paper
85
+ @paper.gs_paper
86
+ end
87
+
88
+
89
+ #Aceita StaticDocumentCallback::ACCEPT e DynamicDocumentCallback::ACCEPT
90
+ # doc=Document.new
91
+ # doc.before_page_create :only => [1,2] do
92
+ # set HorizontalLine.new
93
+ # end
94
+ # doc.even_pages :except => [1] do
95
+ # set Show.new("ET say: Hello Humans!!")
96
+ # end
97
+ # doc.last_page do
98
+ # set Cursor.jump_rows(3)
99
+ # set TextIn.new(:x=> 4, :y => 15.5, :text => "Total: %current_page%")
100
+ # end
101
+ def method_missing(name,*args,&block)
102
+ case name
103
+ when *DynamicDocumentCallback::ACCEPT:
104
+
105
+ @callbacks.set DynamicDocumentCallback.new(name,args.shift || {},&block) #args.shift || {} without args
106
+
107
+ when *StaticDocumentCallback::ACCEPT:
108
+
109
+ @callbacks.set StaticDocumentCallback.new(name,&block)
110
+
111
+ else
112
+ raise NameError.new(name.to_s)
113
+ end
114
+ end
115
+
116
+ def ps
117
+ out=PsObject.new
118
+ out.set @head
119
+ out.set @default_variables
120
+ out.set Load.rg_enviroment
121
+ out.raw @defines.join
122
+ out.set @callbacks
123
+ out.set Variable.new(:fontsize,@variables[:fontsize])
124
+ out.call :font_normal
125
+ out.set Load.library(:begin_document)
126
+ out.set Cursor.moveto
127
+
128
+ "#{out} #{super}"
129
+
130
+ #"#{@head} \n%%endhead\n#{@default_variables}\n\n #{Load.rg_enviroment} #{@defines.join} #{@callbacks} #{Load.library(:begin_document)}\n #{Cursor.moveto}#{super}"
131
+
132
+
133
+ end
134
+
135
+ #Facade RubyGhostEngine.render
136
+ #Renderiza o documento.
137
+ # Valores v�lidos para options.
138
+ #
139
+ # :tmpdir => File::SEPARATOR + "tmp", # Diret�rio tempor�rio
140
+ # :logfile => File::SEPARATOR + "tmp" +File::SEPARATOR + "ruby_ghost.log" # Arquivo de log
141
+ # :multipage=> true # Para imagens em v�rios arquivos
142
+ # :resolution => 72 # Resolu��o
143
+ # :size => "200x180" # Para crop da imagem de sa�da
144
+ # :range =>2..3 # Range de p�ginas (PDF Only)
145
+ # Array contendo um Hash para op��es em modo raw do Ghostscript :d ou :s
146
+ # :s => [{:GenericResourceDir => /dir, :DEFAULTPAPERSIZE=> "a3"}]
147
+ # :d => [ {:TextAlphaBits => 2} ]
148
+ #Ou usando string
149
+ # :raw => "-sGenericResourceDir=/test -dTextAlphaBits=2"
150
+ #
151
+ #Exemplo:
152
+ # d=Document.new
153
+ # #fa�a o documento ....
154
+ #
155
+ # d.render :pdf # Sa�da em pdf
156
+ # d.render :jpeg # Sa�da em jpeg
157
+ # d.render :png, :multipage => true # Uma imagem por arquivo
158
+ # d.render :tiff, :resolution => 300 # Imagem com resolu��o de 300 dpi
159
+ def render(device,options={})
160
+ rg=RubyGhostEngine.new(self,options)
161
+ rg.render(device)
162
+ rg
163
+ end
164
+ #Renderiza, abre o stream e deleta o arquivo de sa�da. N�o aceita multipage=>true
165
+ def render_stream(device,options={})
166
+ rg=render(device,options)
167
+ out=rg.output.readlines.join
168
+ rg.clear_output
169
+ out
170
+ end
171
+ #Facade Function.new
172
+ #Define uma fun��o.
173
+ #Exemplo:
174
+ # doc=Document.new
175
+ # doc.define :myfont do
176
+ # set Font.new(:name => "ZapfChancery-MediumItalic", :size => 10)
177
+ # end
178
+ def define(name,&block)
179
+ @defines << Function.new(name,&block)
180
+ end
181
+ #Define e chama uma fun��o.
182
+ # doc=Document.new
183
+ # doc.define_and_call :my_photo do
184
+ # set Jpeg.new("/local/img/my_photo.jpg", :y=> 5,:x => 8, :zoom=> 50)
185
+ # end
186
+ def define_and_call(name,&block)
187
+ define(name,&block)
188
+ call(name)
189
+ end
190
+ #Salta uma faixa e usa a faixa corrente.
191
+ # d=Document.new
192
+ # doc.next_line do
193
+ # set Show.new("single text in page center", :align => :page_center)
194
+ # end
195
+ #Para cada linha de um arquivo.
196
+ # d=Document.new
197
+ # File.open(__FILE__).each { |line| doc.next_row{ set Show.new(line) } }
198
+ # d.done
199
+ # d.render :pdf
200
+ #Uma linha separando cada faixa
201
+ #File.open(__FILE__).each do |line|
202
+ # doc.next_row do
203
+ # set HorizontalLine.new(:top)
204
+ # set Show.new(line)
205
+ # end
206
+ #end
207
+ def next_row(&block)
208
+ set PsObject.new(&block)
209
+ set Cursor.next_row
210
+
211
+
212
+ end
213
+ #Carrega o texto do arquivo em uma itera��o de linhas.
214
+ def print_file(file)
215
+ File.open(file).each do |line|
216
+ next_row do
217
+ set Show.new(line)
218
+ end
219
+ end
220
+ end
221
+
222
+ #Salta a p�gina com controlando o documento.
223
+ def next_page
224
+ call :next_page
225
+ end
226
+ #Facade Graphic
227
+ #Condiciona em um bloco gr�fico. Defini��es gr�ficas v�lidas apenas para o escopo do bloco n�o interferindo nos demais gr�ficos.
228
+ # doc=Document.new
229
+ # doc.graphic do
230
+ # set LineWidth.new(0)
231
+ # set Line.lineto(5,7)
232
+ # end
233
+ def graphic(ps_obj=PsObject.new,&block)
234
+ set Graphic.new(ps_obj,&block)
235
+ end
236
+ #Facade Newpath
237
+ #Cria um bloco que cria um novo path sem alterar o path corrente. O path v�lido apenas para o escopo do bloco. Contudo fecha o path(closepath) ao fim do bloco.
238
+ # doc=Document.new
239
+ # doc.newpath do
240
+ # set Arc.new(:x => 10, :y => 10, :radius => 100)
241
+ # end
242
+ def newpath(ps_obj=PsObject.new,&block)
243
+ set NewPath.new(ps_obj,&block)
244
+ end
245
+ #Facade Variable.new
246
+ #Define uma vari�vel global em Postscript.
247
+ # d=Document.new
248
+ # d.define_variable(:my_var,[3,4,5,6])
249
+ #
250
+ def define_variable(name,value)
251
+ @defines << Variable.new(name,value)
252
+ end
253
+ #Use showpage para o fim do documento ou para saltar p�ginas.
254
+ # Obs.: showpage n�o reseta os contadores de p�ginas,faixas, etc.
255
+ def showpage
256
+ call :stroke
257
+ call :showpage
258
+ end
259
+
260
+ #Facade Cursor.goto_row
261
+ def goto_row(row)
262
+ set Cursor.goto_row(row)
263
+ end
264
+ #Facade Cursor.jump_rows
265
+ def jump_rows(row)
266
+ set Cursor.jump_rows(row)
267
+ end
268
+ #Facade Cursor.rotate
269
+ def rotate(angle)
270
+ set Cursor.rotate(angle)
271
+ end
272
+ #Facade Cursor.moveto
273
+ def moveto(point={})
274
+ set Cursor.moveto(point)
275
+ end
276
+ #Facade Cursor.rmoveto
277
+ def rmoveto(point={})
278
+ set Cursor.rmoveto(point)
279
+ end
280
+ #Facade Cursor.translate
281
+ def translate(point={})
282
+ set Cursor.translate(point)
283
+ end
284
+ #Facade DSCEntry.new
285
+ def dsc_entry(&block)
286
+ set DSCEntry.new(&block)
287
+ end
288
+ #Facade EPS.new
289
+ def template(file_path,options={})
290
+ set EPS.new(file_path,options)
291
+ end
292
+ #Define um template/eps
293
+ # dt=Document.new
294
+ # dt.define_template(:myform, '/local/template/form1.eps', :x=> 3, :y => 5)
295
+ # dt.call :myform # Executa o template
296
+ def define_template(name,file_path,options)
297
+ set Function.new(name,EPS.new(file_path,options))
298
+ end
299
+ #Facade Font.new
300
+ def font(options)
301
+ set Font.new(options)
302
+ end
303
+ #Facade Image.for
304
+ def image(path,options={})
305
+ set Image.for(path,options)
306
+ end
307
+ #Idem horizontal_line
308
+ def hl(valign=:middle,options={})
309
+ set HorizontalLine.new(valign,options)
310
+ end
311
+ #Facade HorizontalLine.new
312
+ def horizontal_line(valign=:middle,options={})
313
+ hl(valign,options)
314
+ end
315
+ #Facade Rectangle.new
316
+ def rectangle(options={})
317
+ set Rectangle.new(options)
318
+ end
319
+ #Facade Rectangle.background_row
320
+ def background_row(options={})
321
+ set Rectangle.background_row(options={})
322
+ end
323
+ #Facade Scale.new
324
+ def scale(sx,sy)
325
+ set Scale.new(sx,sy)
326
+ end
327
+ #Facade TextIn.new
328
+ def text_in(options={})
329
+ set TextIn.new(options)
330
+ end
331
+ #Facade Show.new
332
+ def text(text,align={ :align=>:show_left })
333
+ set Show.new(text,align)
334
+ end
335
+ #Facade Show.new
336
+ def show(text,align={ :align=>:show_left })
337
+ set Show.new(text,align)
338
+ end
339
+ #Facade TextArea.new
340
+ def text_area(text,options={})
341
+ set TextArea.new(text,options)
342
+ end
343
+ #Facade VerticalLine.new
344
+ def vertical_line(start_in=:limit_left,size=:area_y)
345
+ set TextArea.new(start_in, size)
346
+ end
347
+ #Carrega de c�digo de barras(GNU Barcodes) da API
348
+ def load_font(name=:CODE39)
349
+
350
+ raw Load.library(name,:font)
351
+
352
+ end
353
+ #Executa o comando stoke para desenho de vertores
354
+ def stroke
355
+
356
+ call :stroke
357
+ end
358
+ #Informa que o documento est� pronto para ser convertido/impresso
359
+ def done
360
+ showpage
361
+ raw "\n%%EOF"
362
+ end
363
+
364
+ private
365
+ def default_variables
366
+ ps=PsObject.new
367
+ ps.set Variable.new(:rows_per_page,@variables[:rows_per_page])
368
+ ps.set Variable.new(:count_pages,@variables[:count_pages])
369
+ ps.set Variable.new(:row_height,Units::parse(@variables[:row_height]))
370
+ ps.set Variable.new(:row_padding,Units::parse(@variables[:row_padding]))
371
+
372
+
373
+ @default_variables=ps
374
+
375
+
376
+ end
377
+
378
+ end
379
+
380
+