petit-felix 0.1.4 → 0.1.5

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,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