petit-felix 0.1.4 → 0.1.6
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.
- checksums.yaml +4 -4
- data/lib/felix/config.rb +34 -24
- data/lib/felix/error.rb +4 -2
- data/lib/felix/generator.rb +6 -3
- data/lib/felix/metadata.rb +33 -4
- data/lib/felix/task_manager.rb +17 -7
- data/lib/petit-felix.rb +3 -1
- data/lib/task/basic_pdf_classic_task.rb +182 -0
- data/lib/task/default_task.rb +54 -9
- data/lib/task/pdf_single_task.rb +74 -0
- data/lib/task/template_pdf_task.rb +51 -0
- data/lib/version.rb +3 -1
- data/lib/worker/{basic_pdf_writer.rb → basic_pdf_writer_classic.rb} +38 -66
- data/lib/worker/pdf_writer/bounding_box.rb +135 -0
- data/lib/worker/pdf_writer/column_box.rb +38 -0
- data/lib/worker/pdf_writer.rb +98 -0
- data/lib/worker/template_pdf_writer.rb +300 -0
- data/lib/worker/templater/error.rb +90 -0
- data/lib/worker/templater/font.rb +59 -0
- data/lib/worker/templater/methods.rb +1072 -0
- data/lib/worker/templater/validation.rb +213 -0
- data/templates/zine-single.json +774 -0
- metadata +29 -3
- data/lib/task/basic_pdf_task.rb +0 -133
@@ -0,0 +1,1072 @@
|
|
1
|
+
require "prawn"
|
2
|
+
require "prawndown-ext"
|
3
|
+
require "eqn"
|
4
|
+
require "felix/metadata"
|
5
|
+
|
6
|
+
## Commands for TemplatePDFWriter
|
7
|
+
|
8
|
+
module PetitFelix
|
9
|
+
module Worker
|
10
|
+
|
11
|
+
class TemplatePDFWriter < PetitFelix::Worker::DefaultPDFWriter
|
12
|
+
|
13
|
+
# List of executable commands
|
14
|
+
|
15
|
+
COMMAND = {
|
16
|
+
:print => -> (obj, args) { obj.com_print args, obj },
|
17
|
+
:call => -> (obj, args) { obj.com_call args, obj },
|
18
|
+
:if => -> (obj, args) { obj.com_if args, obj },
|
19
|
+
:elif => -> (obj, args) { obj.com_elif args, obj },
|
20
|
+
:each => -> (obj, args) { obj.com_each args, obj },
|
21
|
+
:times => -> (obj, args) { obj.com_times args, obj },
|
22
|
+
:set => -> (obj, args) { obj.com_set args, obj },
|
23
|
+
|
24
|
+
# Loads Markdown file data into @variables
|
25
|
+
:read_markdown => -> (obj, args) { obj.com_read_markdown args, obj },
|
26
|
+
:clear_markdown => -> (obj, args) { obj.com_clear_markdown args, obj },
|
27
|
+
|
28
|
+
# PDF functions
|
29
|
+
:text => -> (obj, args) { obj.com_text args, obj },
|
30
|
+
:markdown => -> (obj, args) { obj.com_markdown args, obj },
|
31
|
+
:text_box => -> (obj, args) { obj.com_text_box args, obj },
|
32
|
+
:move_down => -> (obj, args) { obj.com_move_down args, obj },
|
33
|
+
:move_to => -> (obj, args) { obj.com_move_to args, obj },
|
34
|
+
:move_cursor_to => -> (obj, args) { obj.com_move_cursor_to args, obj },
|
35
|
+
:delete_page => -> (obj, args) { obj.com_delete_page args, obj },
|
36
|
+
:start_new_page => -> (obj, args) { obj.com_start_new_page args, obj },
|
37
|
+
:draw_text => -> (obj, args) { obj.com_draw_text args, obj },
|
38
|
+
:font => -> (obj, args) { obj.com_font args, obj },
|
39
|
+
:font_size => -> (obj, args) { obj.com_font_size args, obj },
|
40
|
+
:go_to_page => -> (obj, args) { obj.com_go_to_page args, obj },
|
41
|
+
:horizontal_rule => -> (obj, args) { obj.com_horizontal_rule args, obj },
|
42
|
+
:image => -> (obj, args) { obj.com_image args, obj },
|
43
|
+
:move_up => -> (obj, args) { obj.com_move_up args, obj },
|
44
|
+
:number_pages => -> (obj, args) { obj.com_number_pages args, obj },
|
45
|
+
:bounding_box => -> (obj, args) { obj.com_bounding_box args, obj },
|
46
|
+
:column_box => -> (obj, args) { obj.com_column_box args, obj },
|
47
|
+
:indent => -> (obj, args) { obj.com_indent args, obj },
|
48
|
+
:pad => -> (obj, args) { obj.com_pad args, obj },
|
49
|
+
:pad_bottom => -> (obj, args) { obj.com_pad_bottom args, obj },
|
50
|
+
:pad_top => -> (obj, args) { obj.com_pad_top args, obj },
|
51
|
+
:rotate => -> (obj, args) { obj.com_rotate args, obj },
|
52
|
+
:scale => -> (obj, args) { obj.com_scale args, obj },
|
53
|
+
:span => -> (obj, args) { obj.com_span args, obj },
|
54
|
+
:translate => -> (obj, args) { obj.com_translate args, obj },
|
55
|
+
:transparent => -> (obj, args) { obj.com_transparent args, obj },
|
56
|
+
}
|
57
|
+
|
58
|
+
# Prawn commands
|
59
|
+
|
60
|
+
def com_bounding_box args, obj
|
61
|
+
|
62
|
+
validate = args_has_arr :at, args, :int
|
63
|
+
|
64
|
+
if validate != 0
|
65
|
+
return validate
|
66
|
+
end
|
67
|
+
|
68
|
+
validate = args_has_int :width, args
|
69
|
+
|
70
|
+
if validate != 0
|
71
|
+
return validate
|
72
|
+
end
|
73
|
+
|
74
|
+
validate = args_has_string :func, args
|
75
|
+
|
76
|
+
if validate != 0
|
77
|
+
return validate
|
78
|
+
end
|
79
|
+
|
80
|
+
args_has_int :height, args
|
81
|
+
|
82
|
+
args_has_arr :margin, args, :hash, { :second_type => :int }
|
83
|
+
|
84
|
+
args[:base_margins] = args[:margin]
|
85
|
+
|
86
|
+
args = args_correct_values args
|
87
|
+
|
88
|
+
# Calls the function at "func"
|
89
|
+
obj.bounding_box args[:at], args do
|
90
|
+
|
91
|
+
val = obj.execute_function @template_stack[-1], args[:func], obj
|
92
|
+
|
93
|
+
if val[0] != 0
|
94
|
+
return val[0]
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
98
|
+
|
99
|
+
return 0
|
100
|
+
end
|
101
|
+
|
102
|
+
def com_column_box args, obj
|
103
|
+
validate = args_has_arr :at, args, :int
|
104
|
+
|
105
|
+
if validate != 0
|
106
|
+
return validate
|
107
|
+
end
|
108
|
+
|
109
|
+
validate = args_has_int :width, args
|
110
|
+
|
111
|
+
if validate != 0
|
112
|
+
return validate
|
113
|
+
end
|
114
|
+
|
115
|
+
|
116
|
+
validate = args_has_string :func, args
|
117
|
+
|
118
|
+
if validate != 0
|
119
|
+
return validate
|
120
|
+
end
|
121
|
+
|
122
|
+
args_has_int :height, args
|
123
|
+
args_has_int :columns, args
|
124
|
+
args_has_float :spacer, args
|
125
|
+
|
126
|
+
args_has_arr :margin, args, :hash, { :second_type => :int }
|
127
|
+
|
128
|
+
args[:base_margins] = args[:margin]
|
129
|
+
|
130
|
+
# Calls the function at "func"
|
131
|
+
obj.column_box args[:at], args do
|
132
|
+
|
133
|
+
val = obj.execute_function @template_stack[-1], args[:func], obj
|
134
|
+
|
135
|
+
if val[0] != 0
|
136
|
+
return val[0]
|
137
|
+
end
|
138
|
+
|
139
|
+
end
|
140
|
+
|
141
|
+
return 0
|
142
|
+
end
|
143
|
+
|
144
|
+
def com_delete_page args, obj
|
145
|
+
validate = args_has_int :val, args
|
146
|
+
|
147
|
+
if validate != 0
|
148
|
+
return validate
|
149
|
+
end
|
150
|
+
|
151
|
+
obj.delete_page(args[:val])
|
152
|
+
|
153
|
+
return 0
|
154
|
+
end
|
155
|
+
|
156
|
+
def com_draw_text args, obj
|
157
|
+
validate = args_has_string :text, args
|
158
|
+
|
159
|
+
if validate != 0
|
160
|
+
return validate
|
161
|
+
end
|
162
|
+
|
163
|
+
validate = args_has_arr :at, args, :int
|
164
|
+
|
165
|
+
if validate != 0
|
166
|
+
return validate
|
167
|
+
end
|
168
|
+
|
169
|
+
args_has_float :size, args
|
170
|
+
args_has_rotate :size, args
|
171
|
+
|
172
|
+
args = args_correct_values args
|
173
|
+
|
174
|
+
obj.draw_text args[:text], args
|
175
|
+
|
176
|
+
return 0
|
177
|
+
end
|
178
|
+
|
179
|
+
def com_font args, obj
|
180
|
+
validate = args_has_string :val, args
|
181
|
+
|
182
|
+
if validate != 0
|
183
|
+
return validate
|
184
|
+
end
|
185
|
+
|
186
|
+
validate = args_has_string :style, args
|
187
|
+
|
188
|
+
args = args_correct_values args
|
189
|
+
|
190
|
+
obj.font args[:val]
|
191
|
+
|
192
|
+
return 0
|
193
|
+
end
|
194
|
+
|
195
|
+
def com_font_size args, obj
|
196
|
+
validate = args_has_int :val, args
|
197
|
+
|
198
|
+
if validate != 0
|
199
|
+
return validate
|
200
|
+
end
|
201
|
+
|
202
|
+
obj.font_size args[:val]
|
203
|
+
|
204
|
+
return 0
|
205
|
+
end
|
206
|
+
|
207
|
+
def com_go_to_page args, obj
|
208
|
+
validate = args_has_int :val, args
|
209
|
+
|
210
|
+
if validate != 0
|
211
|
+
return validate
|
212
|
+
end
|
213
|
+
|
214
|
+
obj.go_to_page(args[:val])
|
215
|
+
|
216
|
+
return 0
|
217
|
+
end
|
218
|
+
|
219
|
+
def com_horizontal_rule args, obj
|
220
|
+
|
221
|
+
obj.horizontal_rule
|
222
|
+
|
223
|
+
return 0
|
224
|
+
end
|
225
|
+
|
226
|
+
def com_image args, obj
|
227
|
+
|
228
|
+
validate = args_has_string :file, args
|
229
|
+
|
230
|
+
if validate != 0
|
231
|
+
return validate
|
232
|
+
end
|
233
|
+
|
234
|
+
# if no width defined, use bounds width
|
235
|
+
if !args.key?(:width) && !args.key?(:height)
|
236
|
+
args[:width] = obj.bounds.width
|
237
|
+
end
|
238
|
+
|
239
|
+
args_has_arr :at, args, :float
|
240
|
+
args_has_float :height, args
|
241
|
+
args_has_float :width, args
|
242
|
+
args_has_float :scale, args
|
243
|
+
|
244
|
+
args = args_correct_values args
|
245
|
+
|
246
|
+
if File.file?(args[:file])
|
247
|
+
|
248
|
+
obj.image args[:file], args
|
249
|
+
else
|
250
|
+
|
251
|
+
var = PetitFelix::Metadata.new.get_image_location(@metaoptions["image_dir"], args[:file])
|
252
|
+
|
253
|
+
if File.file?(var)
|
254
|
+
|
255
|
+
obj.image var, args
|
256
|
+
|
257
|
+
else
|
258
|
+
|
259
|
+
@error_param["arg"] = args[:file].strip
|
260
|
+
return 14
|
261
|
+
|
262
|
+
end
|
263
|
+
|
264
|
+
end
|
265
|
+
|
266
|
+
|
267
|
+
return 0
|
268
|
+
end
|
269
|
+
|
270
|
+
def com_indent args, obj
|
271
|
+
left = 0
|
272
|
+
|
273
|
+
if args.key?(:left)
|
274
|
+
right = args[:left].to_i
|
275
|
+
end
|
276
|
+
|
277
|
+
right = 0
|
278
|
+
|
279
|
+
if args.key?(:right)
|
280
|
+
right = args[:right].to_i
|
281
|
+
end
|
282
|
+
|
283
|
+
validate = args_has_string :func, args
|
284
|
+
|
285
|
+
if validate != 0
|
286
|
+
return validate
|
287
|
+
end
|
288
|
+
|
289
|
+
# Calls the function at "func"
|
290
|
+
obj.indent left, right do
|
291
|
+
|
292
|
+
val = obj.execute_function @template_stack[-1], args[:func], obj
|
293
|
+
|
294
|
+
if val[0] != 0
|
295
|
+
return val[0]
|
296
|
+
end
|
297
|
+
|
298
|
+
end
|
299
|
+
|
300
|
+
return 0
|
301
|
+
end
|
302
|
+
|
303
|
+
# Later - change this to reading a file's input.
|
304
|
+
def com_markdown args, obj
|
305
|
+
validate = args_has_string :text, args
|
306
|
+
|
307
|
+
if validate != 0
|
308
|
+
return validate
|
309
|
+
end
|
310
|
+
|
311
|
+
args = args_correct_values args
|
312
|
+
|
313
|
+
set_variables
|
314
|
+
|
315
|
+
optio = Marshal.load(Marshal.dump(@variables))
|
316
|
+
|
317
|
+
obj.markdown args[:text], options: optio
|
318
|
+
|
319
|
+
return 0
|
320
|
+
end
|
321
|
+
|
322
|
+
def com_move_cursor_to args, obj
|
323
|
+
validate = args_has_int :val, args
|
324
|
+
|
325
|
+
if validate != 0
|
326
|
+
return validate
|
327
|
+
end
|
328
|
+
|
329
|
+
obj.move_cursor_to args[:val]
|
330
|
+
|
331
|
+
return 0
|
332
|
+
end
|
333
|
+
|
334
|
+
def com_move_down args, obj
|
335
|
+
validate = args_has_int :val, args
|
336
|
+
|
337
|
+
if validate != 0
|
338
|
+
return validate
|
339
|
+
end
|
340
|
+
|
341
|
+
obj.move_down args[:val]
|
342
|
+
|
343
|
+
return 0
|
344
|
+
end
|
345
|
+
|
346
|
+
def com_move_to args, obj
|
347
|
+
validate = args_has_arr :pos, args, :float
|
348
|
+
|
349
|
+
if validate != 0
|
350
|
+
return validate
|
351
|
+
end
|
352
|
+
|
353
|
+
if !args[:pos].instance_of? Array || args[:pos].count != 2
|
354
|
+
# position invalid
|
355
|
+
return 11
|
356
|
+
end
|
357
|
+
|
358
|
+
obj.move_to args[:pos]
|
359
|
+
|
360
|
+
return 0
|
361
|
+
end
|
362
|
+
|
363
|
+
def com_move_up args, obj
|
364
|
+
validate = args_has_int :val, args
|
365
|
+
|
366
|
+
if validate != 0
|
367
|
+
return validate
|
368
|
+
end
|
369
|
+
|
370
|
+
obj.move_up args[:val]
|
371
|
+
|
372
|
+
return 0
|
373
|
+
end
|
374
|
+
|
375
|
+
def com_number_pages args, obj
|
376
|
+
validate = args_has_string :text, args
|
377
|
+
|
378
|
+
if validate != 0
|
379
|
+
return validate
|
380
|
+
end
|
381
|
+
|
382
|
+
args = args_correct_values args
|
383
|
+
|
384
|
+
args_has_int :width, args
|
385
|
+
args_has_arr :at, args, :int
|
386
|
+
args_has_arr :odd_at, args, :int
|
387
|
+
args_has_arr :even_at, args, :int
|
388
|
+
args_has_int :page_finish, args
|
389
|
+
|
390
|
+
page_mode = :default
|
391
|
+
|
392
|
+
if args.key?(:page_mode)
|
393
|
+
page_mode = args[:page_mode].to_sym
|
394
|
+
end
|
395
|
+
|
396
|
+
if page_mode == :alternate
|
397
|
+
|
398
|
+
if !args.key?(:odd_start_count_at) && !args[:start_count_at].nil?
|
399
|
+
args[:odd_start_count_at] = args[:start_count_at]
|
400
|
+
end
|
401
|
+
|
402
|
+
if !args.key?(:even_start_count_at) && !args[:start_count_at].nil?
|
403
|
+
args[:even_start_count_at] = args[:start_count_at]
|
404
|
+
end
|
405
|
+
|
406
|
+
args_has_int :start_count_at, args
|
407
|
+
args_has_int :odd_start_count_at, args
|
408
|
+
args_has_int :even_start_count_at, args
|
409
|
+
|
410
|
+
if !args.key?(:page_finish)
|
411
|
+
args[:page_finish] = -1
|
412
|
+
end
|
413
|
+
|
414
|
+
odd_array = {
|
415
|
+
:start_count_at => args[:odd_start_count_at],
|
416
|
+
:at => args[:odd_at],
|
417
|
+
:align => args[:odd_align]
|
418
|
+
}
|
419
|
+
|
420
|
+
even_array = {
|
421
|
+
:start_count_at => args[:even_start_count_at],
|
422
|
+
:at => args[:even_at],
|
423
|
+
:align => args[:even_align]
|
424
|
+
}
|
425
|
+
|
426
|
+
odd_options = odd_array.merge(args)
|
427
|
+
|
428
|
+
even_options = even_array.merge(args)
|
429
|
+
|
430
|
+
args_has_int :page_start, args
|
431
|
+
args_has_int :page_finish, args
|
432
|
+
|
433
|
+
odd_options[:start_count_at] += 1
|
434
|
+
|
435
|
+
if !args.key?(:page_start)
|
436
|
+
@variables["paginator_start"] = @metaoptions["paginator_start"]
|
437
|
+
else
|
438
|
+
@variables["paginator_start"] = args[:page_start]
|
439
|
+
end
|
440
|
+
|
441
|
+
@variables["paginator_end"] = args[:page_finish]
|
442
|
+
|
443
|
+
if @metaoptions["paginator_switch"]
|
444
|
+
odd_options[:page_filter] = ->(pg) { pg > @variables["paginator_start"] && (pg < @variables["paginator_end"] || @variables["paginator_end"] <= -1) && pg % 2 == 1 }
|
445
|
+
even_options[:page_filter] = ->(pg) { pg > @variables["paginator_start"] && (pg < @variables["paginator_end"] || @variables["paginator_end"] <= -1) && pg % 2 == 0 }
|
446
|
+
|
447
|
+
else
|
448
|
+
even_options[:page_filter] = ->(pg) { pg > @variables["paginator_start"] && (pg < @variables["paginator_end"] || @variables["paginator_end"] <= -1) && pg % 2 == 1 }
|
449
|
+
odd_options[:page_filter] = ->(pg) { pg > @variables["paginator_start"] && (pg < @variables["paginator_end"] || @variables["paginator_end"] <= -1) && pg % 2 == 0 }
|
450
|
+
|
451
|
+
end
|
452
|
+
|
453
|
+
string = replace_variable args[:text]
|
454
|
+
|
455
|
+
number_pages string, odd_options
|
456
|
+
number_pages string, even_options
|
457
|
+
|
458
|
+
else
|
459
|
+
|
460
|
+
obj.number_pages args[:text], args
|
461
|
+
|
462
|
+
end
|
463
|
+
|
464
|
+
return 0
|
465
|
+
|
466
|
+
end
|
467
|
+
|
468
|
+
def com_pad args, obj
|
469
|
+
validate = args_has_int :val, args
|
470
|
+
|
471
|
+
if validate != 0
|
472
|
+
return validate
|
473
|
+
end
|
474
|
+
|
475
|
+
validate = args_has_string :func, args
|
476
|
+
|
477
|
+
if validate != 0
|
478
|
+
return validate
|
479
|
+
end
|
480
|
+
|
481
|
+
# Calls the function at "func"
|
482
|
+
obj.pad args[:val] do
|
483
|
+
|
484
|
+
val = obj.execute_function @template_stack[-1], args[:func], obj
|
485
|
+
|
486
|
+
if val[0] != 0
|
487
|
+
return val[0]
|
488
|
+
end
|
489
|
+
|
490
|
+
end
|
491
|
+
|
492
|
+
return 0
|
493
|
+
end
|
494
|
+
|
495
|
+
def com_pad_bottom args, obj
|
496
|
+
validate = args_has_int :val, args
|
497
|
+
|
498
|
+
if validate != 0
|
499
|
+
return validate
|
500
|
+
end
|
501
|
+
|
502
|
+
validate = args_has_string :func, args
|
503
|
+
|
504
|
+
if validate != 0
|
505
|
+
return validate
|
506
|
+
end
|
507
|
+
|
508
|
+
# Calls the function at "func"
|
509
|
+
obj.pad_bottom args[:val] do
|
510
|
+
|
511
|
+
val = obj.execute_function @template_stack[-1], args[:func], obj
|
512
|
+
|
513
|
+
if val[0] != 0
|
514
|
+
return val[0]
|
515
|
+
end
|
516
|
+
|
517
|
+
end
|
518
|
+
|
519
|
+
return 0
|
520
|
+
end
|
521
|
+
|
522
|
+
|
523
|
+
def com_pad_top args, obj
|
524
|
+
validate = args_has_int :val, args
|
525
|
+
|
526
|
+
if validate != 0
|
527
|
+
return validate
|
528
|
+
end
|
529
|
+
|
530
|
+
validate = args_has_string :func, args
|
531
|
+
|
532
|
+
if validate != 0
|
533
|
+
return validate
|
534
|
+
end
|
535
|
+
|
536
|
+
# Calls the function at "func"
|
537
|
+
obj.pad_top args[:val] do
|
538
|
+
|
539
|
+
val = obj.execute_function @template_stack[-1], args[:func], obj
|
540
|
+
|
541
|
+
if val[0] != 0
|
542
|
+
return val[0]
|
543
|
+
end
|
544
|
+
|
545
|
+
end
|
546
|
+
|
547
|
+
return 0
|
548
|
+
end
|
549
|
+
|
550
|
+
def com_rotate args, obj
|
551
|
+
validate = args_has_float :angle, args
|
552
|
+
|
553
|
+
if validate != 0
|
554
|
+
return validate
|
555
|
+
end
|
556
|
+
|
557
|
+
if args.key?(:func)
|
558
|
+
|
559
|
+
validate = args_has_arr :origin, args, :float
|
560
|
+
|
561
|
+
if validate != 0
|
562
|
+
return validate
|
563
|
+
end
|
564
|
+
|
565
|
+
obj.rotate(args[:angle], args) do
|
566
|
+
val = obj.execute_function @template_stack[-1], args[:func], obj
|
567
|
+
|
568
|
+
if val[0] != 0
|
569
|
+
return val[0]
|
570
|
+
end
|
571
|
+
end
|
572
|
+
|
573
|
+
else
|
574
|
+
|
575
|
+
obj.rotate args[:angle]
|
576
|
+
|
577
|
+
end
|
578
|
+
|
579
|
+
return 0
|
580
|
+
end
|
581
|
+
|
582
|
+
def com_scale args, obj
|
583
|
+
validate = args_has_float :factor, args
|
584
|
+
|
585
|
+
if validate != 0
|
586
|
+
return validate
|
587
|
+
end
|
588
|
+
|
589
|
+
if args.key?(:func)
|
590
|
+
|
591
|
+
validate = args_has_arr :origin, args, :float
|
592
|
+
|
593
|
+
if validate != 0
|
594
|
+
return validate
|
595
|
+
end
|
596
|
+
|
597
|
+
obj.scale(args[:factor], args) do
|
598
|
+
val = obj.execute_function @template_stack[-1], args[:func], obj
|
599
|
+
|
600
|
+
if val[0] != 0
|
601
|
+
return val[0]
|
602
|
+
end
|
603
|
+
end
|
604
|
+
|
605
|
+
else
|
606
|
+
|
607
|
+
obj.scale args[:factor]
|
608
|
+
|
609
|
+
end
|
610
|
+
|
611
|
+
return 0
|
612
|
+
end
|
613
|
+
|
614
|
+
def com_span args, obj
|
615
|
+
args = args_correct_values args
|
616
|
+
|
617
|
+
validate = args_has_float :width, args
|
618
|
+
|
619
|
+
if validate != 0
|
620
|
+
return validate
|
621
|
+
end
|
622
|
+
|
623
|
+
args_has_string :position, args
|
624
|
+
|
625
|
+
if args.key?(:func)
|
626
|
+
|
627
|
+
obj.span(args[:width], args) do
|
628
|
+
val = obj.execute_function @template_stack[-1], args[:func], obj
|
629
|
+
|
630
|
+
if val[0] != 0
|
631
|
+
return val[0]
|
632
|
+
end
|
633
|
+
|
634
|
+
end
|
635
|
+
|
636
|
+
end
|
637
|
+
|
638
|
+
return 0
|
639
|
+
end
|
640
|
+
|
641
|
+
def com_text args, obj
|
642
|
+
validate = args_has_string :text, args
|
643
|
+
|
644
|
+
if validate != 0
|
645
|
+
return validate
|
646
|
+
end
|
647
|
+
|
648
|
+
args_has_int :size, args
|
649
|
+
args_has_float :character_spacing, args
|
650
|
+
args_has_float :leading, args
|
651
|
+
args_has_string :direction, args
|
652
|
+
args_has_string :align, args
|
653
|
+
args_has_string :valign, args
|
654
|
+
args_has_string :mode, args
|
655
|
+
|
656
|
+
args = args_correct_values args
|
657
|
+
|
658
|
+
obj.text args[:text], args
|
659
|
+
|
660
|
+
return 0
|
661
|
+
end
|
662
|
+
|
663
|
+
def com_text_box args, obj
|
664
|
+
|
665
|
+
validate = args_has_string :text, args
|
666
|
+
|
667
|
+
if validate != 0
|
668
|
+
return validate
|
669
|
+
end
|
670
|
+
|
671
|
+
args_has_int :size, args
|
672
|
+
args_has_float :width, args
|
673
|
+
args_has_float :height, args
|
674
|
+
args_has_string :direction, args
|
675
|
+
args_has_string :align, args
|
676
|
+
args_has_string :valign, args
|
677
|
+
args_has_float :rotate, args
|
678
|
+
args_has_string :rotate_around, args
|
679
|
+
args_has_float :character_spacing, args
|
680
|
+
args_has_float :leading, args
|
681
|
+
args_has_string :overflow, args
|
682
|
+
args_has_int :min_font_size, args
|
683
|
+
|
684
|
+
args = args_correct_values args
|
685
|
+
|
686
|
+
obj.text_box args[:text], args
|
687
|
+
|
688
|
+
return 0
|
689
|
+
end
|
690
|
+
|
691
|
+
def com_translate args, obj
|
692
|
+
validate = args_has_int :x, args
|
693
|
+
|
694
|
+
if validate != 0
|
695
|
+
return validate
|
696
|
+
end
|
697
|
+
|
698
|
+
validate = args_has_int :y, args
|
699
|
+
|
700
|
+
if validate != 0
|
701
|
+
return validate
|
702
|
+
end
|
703
|
+
|
704
|
+
validate = args_has_string :func, args
|
705
|
+
|
706
|
+
if validate != 0
|
707
|
+
return validate
|
708
|
+
end
|
709
|
+
|
710
|
+
obj.translate(args[:x], args[:y]) do
|
711
|
+
val = obj.execute_function @template_stack[-1], args[:func], obj
|
712
|
+
|
713
|
+
if val[0] != 0
|
714
|
+
return val[0]
|
715
|
+
end
|
716
|
+
|
717
|
+
end
|
718
|
+
|
719
|
+
return 0
|
720
|
+
end
|
721
|
+
|
722
|
+
def com_start_new_page args, obj
|
723
|
+
|
724
|
+
obj.start_new_page
|
725
|
+
|
726
|
+
return 0
|
727
|
+
end
|
728
|
+
|
729
|
+
def com_transparent args, obj
|
730
|
+
validate = args_has_float :opacity, args
|
731
|
+
|
732
|
+
if validate != 0
|
733
|
+
return validate
|
734
|
+
end
|
735
|
+
|
736
|
+
stroke_opacity = args[:opacity]
|
737
|
+
|
738
|
+
if args.key?(:stroke_opacity)
|
739
|
+
stroke_opacity = args[:stroke_opacity].to_f
|
740
|
+
end
|
741
|
+
|
742
|
+
validate = args_has_string :func, args
|
743
|
+
|
744
|
+
if validate != 0
|
745
|
+
return validate
|
746
|
+
end
|
747
|
+
|
748
|
+
obj.transparent(args[:opacity], stroke_opacity) do
|
749
|
+
val = obj.execute_function @template_stack[-1], args[:func], obj
|
750
|
+
|
751
|
+
if val[0] != 0
|
752
|
+
return val[0]
|
753
|
+
end
|
754
|
+
|
755
|
+
end
|
756
|
+
|
757
|
+
return 0
|
758
|
+
end
|
759
|
+
|
760
|
+
def com_start_new_page args, obj
|
761
|
+
|
762
|
+
obj.start_new_page
|
763
|
+
|
764
|
+
return 0
|
765
|
+
end
|
766
|
+
|
767
|
+
## Extra commands
|
768
|
+
|
769
|
+
def com_print args, obj
|
770
|
+
validate = args_has_string :text, args
|
771
|
+
|
772
|
+
if validate != 0
|
773
|
+
return validate
|
774
|
+
end
|
775
|
+
|
776
|
+
print args[:text]
|
777
|
+
|
778
|
+
return 0
|
779
|
+
end
|
780
|
+
|
781
|
+
def com_call args, obj
|
782
|
+
validate = args_has_string :func, args
|
783
|
+
|
784
|
+
if validate != 0
|
785
|
+
return validate
|
786
|
+
end
|
787
|
+
|
788
|
+
val = obj.execute_function @template_stack[-1], args[:func], obj
|
789
|
+
|
790
|
+
if val[0] != 0
|
791
|
+
return val[0]
|
792
|
+
end
|
793
|
+
|
794
|
+
return 0
|
795
|
+
end
|
796
|
+
|
797
|
+
def com_if args, obj
|
798
|
+
validate = args_has_string :exp, args
|
799
|
+
|
800
|
+
if validate != 0
|
801
|
+
return validate
|
802
|
+
end
|
803
|
+
|
804
|
+
result = false
|
805
|
+
|
806
|
+
if ["true","false"].include? args[:exp].strip
|
807
|
+
if args[:exp] == "true"
|
808
|
+
result = true
|
809
|
+
else
|
810
|
+
result = false
|
811
|
+
end
|
812
|
+
else
|
813
|
+
|
814
|
+
begin
|
815
|
+
result = Eqn::Calculator.calc(args[:exp].strip)
|
816
|
+
rescue
|
817
|
+
# expression cannot be evaluated
|
818
|
+
return 9
|
819
|
+
end
|
820
|
+
|
821
|
+
end
|
822
|
+
|
823
|
+
if [true, false].include? result
|
824
|
+
|
825
|
+
validate = args_has_string :func, args
|
826
|
+
|
827
|
+
if validate != 0
|
828
|
+
return validate
|
829
|
+
end
|
830
|
+
|
831
|
+
if result
|
832
|
+
|
833
|
+
val = obj.execute_function @template_stack[-1], args[:func], obj
|
834
|
+
|
835
|
+
if val[0] != 0
|
836
|
+
return val[0]
|
837
|
+
end
|
838
|
+
|
839
|
+
end
|
840
|
+
|
841
|
+
return 0
|
842
|
+
|
843
|
+
end
|
844
|
+
|
845
|
+
|
846
|
+
# expression does not return boolean
|
847
|
+
@error_param["arg"] = args[:exp].strip
|
848
|
+
return 8
|
849
|
+
|
850
|
+
end
|
851
|
+
|
852
|
+
def com_elif args, obj
|
853
|
+
validate = args_has_string :exp, args
|
854
|
+
|
855
|
+
if validate != 0
|
856
|
+
return validate
|
857
|
+
end
|
858
|
+
|
859
|
+
result = false
|
860
|
+
|
861
|
+
if ["true","false"].include? args[:exp].strip
|
862
|
+
if args[:exp] == "true"
|
863
|
+
result = true
|
864
|
+
else
|
865
|
+
result = false
|
866
|
+
end
|
867
|
+
else
|
868
|
+
|
869
|
+
begin
|
870
|
+
result = Eqn::Calculator.calc(args[:exp].strip)
|
871
|
+
rescue
|
872
|
+
# expression cannot be evaluated
|
873
|
+
@error_param["arg"] = args[:exp].strip
|
874
|
+
return 9
|
875
|
+
end
|
876
|
+
|
877
|
+
end
|
878
|
+
|
879
|
+
if [true, false].include? result
|
880
|
+
|
881
|
+
validate = args_has_string :func, args
|
882
|
+
|
883
|
+
if validate != 0
|
884
|
+
return validate
|
885
|
+
end
|
886
|
+
|
887
|
+
validate = args_has_string :func_else, args
|
888
|
+
|
889
|
+
if validate != 0
|
890
|
+
return validate
|
891
|
+
end
|
892
|
+
|
893
|
+
if result
|
894
|
+
|
895
|
+
val = obj.execute_function @template_stack[-1], args[:func], obj
|
896
|
+
|
897
|
+
if val[0] != 0
|
898
|
+
return val[0]
|
899
|
+
end
|
900
|
+
|
901
|
+
else
|
902
|
+
|
903
|
+
val = obj.execute_function @template_stack[-1], args[:func_else], obj
|
904
|
+
|
905
|
+
if val[0] != 0
|
906
|
+
return val[0]
|
907
|
+
end
|
908
|
+
|
909
|
+
end
|
910
|
+
|
911
|
+
return 0
|
912
|
+
|
913
|
+
end
|
914
|
+
|
915
|
+
|
916
|
+
# expression does not return boolean
|
917
|
+
@error_param["arg"] = args[:exp].strip
|
918
|
+
return 8
|
919
|
+
|
920
|
+
end
|
921
|
+
|
922
|
+
|
923
|
+
# this reads markdown and also adds the metadata
|
924
|
+
def com_read_markdown args, obj
|
925
|
+
# clears the current markdown file
|
926
|
+
com_clear_markdown args, obj
|
927
|
+
|
928
|
+
validate = args_has_string :file, args
|
929
|
+
|
930
|
+
if validate != 0
|
931
|
+
return validate
|
932
|
+
end
|
933
|
+
|
934
|
+
if File.file? args[:file]
|
935
|
+
|
936
|
+
markdown = {}
|
937
|
+
|
938
|
+
page = File.read(args[:file])
|
939
|
+
|
940
|
+
# splits the page into parts for metadata and content
|
941
|
+
|
942
|
+
# Felix metadata handler
|
943
|
+
metadata_helper = PetitFelix::Metadata.new
|
944
|
+
|
945
|
+
page_data = metadata_helper.split page
|
946
|
+
|
947
|
+
@variables[:markdown_metadata] = metadata_helper.get_metadata page_data[0]
|
948
|
+
|
949
|
+
@variables[:markdown_content] = page_data[1].strip
|
950
|
+
|
951
|
+
set_variables
|
952
|
+
add_fonts
|
953
|
+
|
954
|
+
return 0
|
955
|
+
|
956
|
+
else
|
957
|
+
# File not found
|
958
|
+
@error_param["arg"] = args[:file].strip
|
959
|
+
return 10
|
960
|
+
end
|
961
|
+
|
962
|
+
end
|
963
|
+
|
964
|
+
# This clears the markdown file from memory
|
965
|
+
def com_clear_markdown args, obj
|
966
|
+
@variables.delete(:markdown_metadata)
|
967
|
+
@variables.delete(:markdown_content)
|
968
|
+
|
969
|
+
return 0
|
970
|
+
end
|
971
|
+
|
972
|
+
|
973
|
+
# Reads from an array of objects and performs a function on all of them
|
974
|
+
# populates @variables[:each] with the each value
|
975
|
+
def com_each args, obj
|
976
|
+
validate = args_has_string :data, args
|
977
|
+
|
978
|
+
if validate != 0
|
979
|
+
return validate
|
980
|
+
end
|
981
|
+
|
982
|
+
validate = args_has_string :func, args
|
983
|
+
|
984
|
+
if validate != 0
|
985
|
+
return validate
|
986
|
+
end
|
987
|
+
|
988
|
+
arr = PetitFelix::Metadata.new.parse_property args[:data]
|
989
|
+
|
990
|
+
if arr.instance_of? Array
|
991
|
+
|
992
|
+
arr.each do |arr_obj|
|
993
|
+
@variables[:each] = arr_obj
|
994
|
+
|
995
|
+
val = obj.execute_function @template_stack[-1], args[:func], obj
|
996
|
+
|
997
|
+
if val[0] != 0
|
998
|
+
return val[0]
|
999
|
+
end
|
1000
|
+
|
1001
|
+
end
|
1002
|
+
|
1003
|
+
@variables.delete(:each)
|
1004
|
+
|
1005
|
+
else
|
1006
|
+
@error_param["arg"] = args[:data].strip
|
1007
|
+
return 13
|
1008
|
+
end
|
1009
|
+
|
1010
|
+
return 0
|
1011
|
+
|
1012
|
+
end
|
1013
|
+
|
1014
|
+
# Does an operation a number of times
|
1015
|
+
# populates @variables[:each] with the each value
|
1016
|
+
def com_times args, obj
|
1017
|
+
validate = args_has_int :val, args
|
1018
|
+
|
1019
|
+
if validate != 0
|
1020
|
+
return validate
|
1021
|
+
end
|
1022
|
+
|
1023
|
+
validate = args_has_string :func, args
|
1024
|
+
|
1025
|
+
if validate != 0
|
1026
|
+
return validate
|
1027
|
+
end
|
1028
|
+
|
1029
|
+
val = args[:val].to_i
|
1030
|
+
|
1031
|
+
if val.is_a? Integer
|
1032
|
+
|
1033
|
+
val.times do
|
1034
|
+
valz = obj.execute_function @template_stack[-1], args[:func], obj
|
1035
|
+
|
1036
|
+
if valz[0] != 0
|
1037
|
+
return valz[0]
|
1038
|
+
end
|
1039
|
+
|
1040
|
+
end
|
1041
|
+
|
1042
|
+
else
|
1043
|
+
@error_param["arg"] = args[:val].strip
|
1044
|
+
return 13
|
1045
|
+
end
|
1046
|
+
|
1047
|
+
return 0
|
1048
|
+
|
1049
|
+
end
|
1050
|
+
|
1051
|
+
## sets a variable to a value
|
1052
|
+
def com_set args, obj
|
1053
|
+
validate = args_has_int :val, args
|
1054
|
+
|
1055
|
+
if validate != 0
|
1056
|
+
return validate
|
1057
|
+
end
|
1058
|
+
|
1059
|
+
validate = args_has_string :var, args
|
1060
|
+
|
1061
|
+
if validate != 0
|
1062
|
+
return validate
|
1063
|
+
end
|
1064
|
+
|
1065
|
+
@variables[args[:var]] = args[:val]
|
1066
|
+
|
1067
|
+
return 0
|
1068
|
+
end
|
1069
|
+
|
1070
|
+
end
|
1071
|
+
end
|
1072
|
+
end
|