squib 0.18.0 → 0.19.0a

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 (202) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE/bug_report.md +39 -39
  3. data/.github/ISSUE_TEMPLATE/feature_request.md +22 -22
  4. data/.github/ISSUE_TEMPLATE/help-wanted.md +13 -13
  5. data/.github/ISSUE_TEMPLATE/release-todo.md +45 -33
  6. data/.github/PULL_REQUEST_TEMPLATE.md +13 -13
  7. data/.github/workflows/tests.yml +22 -22
  8. data/.gitignore +41 -41
  9. data/.vscode/settings.json +4 -3
  10. data/CHANGELOG.md +460 -460
  11. data/CONTRIBUTING.md +40 -40
  12. data/Dockerfile +27 -27
  13. data/Gemfile +2 -2
  14. data/Guardfile +8 -8
  15. data/LICENSE.txt +22 -22
  16. data/README.md +139 -139
  17. data/Rakefile +51 -51
  18. data/bin/squib +5 -5
  19. data/lib/squib/api/settings.rb +21 -21
  20. data/lib/squib/args/arg_loader.rb +138 -138
  21. data/lib/squib/args/box.rb +59 -59
  22. data/lib/squib/args/card_range.rb +34 -34
  23. data/lib/squib/args/color_validator.rb +7 -7
  24. data/lib/squib/args/coords.rb +49 -49
  25. data/lib/squib/args/csv_opts.rb +22 -22
  26. data/lib/squib/args/dir_validator.rb +11 -11
  27. data/lib/squib/args/draw.rb +93 -93
  28. data/lib/squib/args/drop_shadow.rb +39 -39
  29. data/lib/squib/args/embed_adjust.rb +22 -22
  30. data/lib/squib/args/embed_key.rb +12 -12
  31. data/lib/squib/args/hand_special.rb +37 -37
  32. data/lib/squib/args/import.rb +67 -67
  33. data/lib/squib/args/input_file.rb +55 -55
  34. data/lib/squib/args/paint.rb +43 -43
  35. data/lib/squib/args/paragraph.rb +118 -118
  36. data/lib/squib/args/save_batch.rb +65 -65
  37. data/lib/squib/args/scale_box.rb +57 -57
  38. data/lib/squib/args/sheet.rb +165 -165
  39. data/lib/squib/args/showcase_special.rb +41 -41
  40. data/lib/squib/args/sprue_file.rb +44 -44
  41. data/lib/squib/args/svg_special.rb +37 -37
  42. data/lib/squib/args/transform.rb +55 -55
  43. data/lib/squib/args/typographer.rb +115 -115
  44. data/lib/squib/args/unit_conversion.rb +27 -27
  45. data/lib/squib/args/xywh_shorthands.rb +50 -50
  46. data/lib/squib/builtin/layouts/economy.yml +85 -85
  47. data/lib/squib/builtin/layouts/fantasy.yml +101 -101
  48. data/lib/squib/builtin/layouts/hand.yml +62 -62
  49. data/lib/squib/builtin/layouts/party.yml +94 -94
  50. data/lib/squib/builtin/layouts/playing-card.yml +35 -35
  51. data/lib/squib/builtin/layouts/tuck_box.yml +46 -46
  52. data/lib/squib/builtin/projects/advanced/.gitignore +4 -4
  53. data/lib/squib/builtin/projects/advanced/ABOUT.md +19 -19
  54. data/lib/squib/builtin/projects/advanced/Gemfile +11 -11
  55. data/lib/squib/builtin/projects/advanced/Guardfile +21 -21
  56. data/lib/squib/builtin/projects/advanced/IDEAS.md +22 -22
  57. data/lib/squib/builtin/projects/advanced/PLAYTESTING.md +26 -26
  58. data/lib/squib/builtin/projects/advanced/Rakefile +27 -27
  59. data/lib/squib/builtin/projects/advanced/config.yml +49 -49
  60. data/lib/squib/builtin/projects/advanced/docs/PNP NOTES.md +3 -3
  61. data/lib/squib/builtin/projects/advanced/docs/RULES.md +21 -21
  62. data/lib/squib/builtin/projects/advanced/img/example.svg +60 -60
  63. data/lib/squib/builtin/projects/advanced/layouts/deck.yml +27 -27
  64. data/lib/squib/builtin/projects/advanced/src/deck.rb +34 -34
  65. data/lib/squib/builtin/projects/advanced/src/version.rb +3 -3
  66. data/lib/squib/builtin/projects/basic/.gitignore +4 -4
  67. data/lib/squib/builtin/projects/basic/ABOUT.md +19 -19
  68. data/lib/squib/builtin/projects/basic/Gemfile +3 -3
  69. data/lib/squib/builtin/projects/basic/IDEAS.md +22 -22
  70. data/lib/squib/builtin/projects/basic/PLAYTESTING.md +26 -26
  71. data/lib/squib/builtin/projects/basic/PNP NOTES.md +3 -3
  72. data/lib/squib/builtin/projects/basic/RULES.md +21 -21
  73. data/lib/squib/builtin/projects/basic/Rakefile +7 -7
  74. data/lib/squib/builtin/projects/basic/config.yml +50 -50
  75. data/lib/squib/builtin/projects/basic/deck.rb +6 -6
  76. data/lib/squib/builtin/sprues/a4_euro_card.yml +42 -42
  77. data/lib/squib/builtin/sprues/a4_poker_card_8up.yml +40 -40
  78. data/lib/squib/builtin/sprues/a4_poker_card_9up.yml +42 -42
  79. data/lib/squib/builtin/sprues/a4_usa_card.yml +42 -42
  80. data/lib/squib/builtin/sprues/drivethrucards_1up.yml +10 -10
  81. data/lib/squib/builtin/sprues/letter_poker_card_9up.yml +25 -25
  82. data/lib/squib/builtin/sprues/letter_poker_foldable_8up.yml +52 -52
  83. data/lib/squib/builtin/sprues/printplaygames_18up.yml +68 -68
  84. data/lib/squib/card.rb +75 -75
  85. data/lib/squib/commands/cli.rb +39 -39
  86. data/lib/squib/commands/data/template_option.rb +109 -109
  87. data/lib/squib/commands/make_sprue.rb +277 -277
  88. data/lib/squib/commands/new.rb +77 -77
  89. data/lib/squib/conf.rb +149 -149
  90. data/lib/squib/constants.rb +17 -17
  91. data/lib/squib/deck.rb +138 -138
  92. data/lib/squib/dsl/background.rb +35 -35
  93. data/lib/squib/dsl/circle.rb +39 -39
  94. data/lib/squib/dsl/csv.rb +42 -42
  95. data/lib/squib/dsl/curve.rb +35 -35
  96. data/lib/squib/dsl/cut_zone.rb +47 -47
  97. data/lib/squib/dsl/ellipse.rb +37 -37
  98. data/lib/squib/dsl/grid.rb +35 -35
  99. data/lib/squib/dsl/groups.rb +54 -54
  100. data/lib/squib/dsl/hand.rb +42 -42
  101. data/lib/squib/dsl/line.rb +35 -35
  102. data/lib/squib/dsl/png.rb +57 -57
  103. data/lib/squib/dsl/polygon.rb +36 -36
  104. data/lib/squib/dsl/rect.rb +37 -37
  105. data/lib/squib/dsl/safe_zone.rb +48 -48
  106. data/lib/squib/dsl/save.rb +21 -21
  107. data/lib/squib/dsl/save_pdf.rb +50 -50
  108. data/lib/squib/dsl/save_png.rb +48 -48
  109. data/lib/squib/dsl/save_sheet.rb +53 -53
  110. data/lib/squib/dsl/showcase.rb +43 -43
  111. data/lib/squib/dsl/star.rb +37 -37
  112. data/lib/squib/dsl/svg.rb +63 -63
  113. data/lib/squib/dsl/text.rb +54 -54
  114. data/lib/squib/dsl/text_embed.rb +79 -79
  115. data/lib/squib/dsl/triangle.rb +35 -35
  116. data/lib/squib/dsl/units.rb +37 -37
  117. data/lib/squib/dsl/xlsx.rb +40 -40
  118. data/lib/squib/dsl/yaml.rb +40 -40
  119. data/lib/squib/errors_warnings/warn_unexpected_params.rb +14 -14
  120. data/lib/squib/graphics/background.rb +14 -14
  121. data/lib/squib/graphics/cairo_context_wrapper.rb +115 -115
  122. data/lib/squib/graphics/embedding_utils.rb +28 -28
  123. data/lib/squib/graphics/gradient_regex.rb +47 -47
  124. data/lib/squib/graphics/hand.rb +42 -42
  125. data/lib/squib/graphics/image.rb +123 -123
  126. data/lib/squib/graphics/save_doc.rb +77 -77
  127. data/lib/squib/graphics/save_images.rb +91 -91
  128. data/lib/squib/graphics/save_pdf.rb +90 -90
  129. data/lib/squib/graphics/save_sprue.rb +231 -231
  130. data/lib/squib/graphics/shapes.rb +143 -143
  131. data/lib/squib/graphics/showcase.rb +85 -85
  132. data/lib/squib/graphics/text.rb +202 -202
  133. data/lib/squib/import/csv_importer.rb +45 -45
  134. data/lib/squib/import/data_frame.rb +108 -108
  135. data/lib/squib/import/quantity_exploder.rb +17 -17
  136. data/lib/squib/import/xlsx_importer.rb +28 -28
  137. data/lib/squib/import/yaml_importer.rb +30 -30
  138. data/lib/squib/layout_parser.rb +155 -155
  139. data/lib/squib/progress.rb +38 -38
  140. data/lib/squib/sample_helpers.rb +34 -34
  141. data/lib/squib/sprues/crop_line.rb +28 -28
  142. data/lib/squib/sprues/crop_line_dash.rb +35 -35
  143. data/lib/squib/sprues/invalid_sprue_definition.rb +9 -9
  144. data/lib/squib/sprues/sprue.rb +208 -208
  145. data/lib/squib/sprues/sprue_schema.rb +51 -51
  146. data/lib/squib/system_fonts.rb +16 -16
  147. data/lib/squib/version.rb +11 -11
  148. data/lib/squib.rb +35 -35
  149. data/samples/autoscale_font/_autoscale_font.rb +98 -98
  150. data/samples/backend/_backend.rb +26 -26
  151. data/samples/basic.rb +19 -19
  152. data/samples/build_groups/build_groups.rb +36 -36
  153. data/samples/colors/_colors.rb +44 -44
  154. data/samples/colors/_gradients.rb +34 -34
  155. data/samples/colors/_switch_color.rb +33 -33
  156. data/samples/config/config_text_markup.rb +20 -20
  157. data/samples/config/custom_config.rb +18 -18
  158. data/samples/data/_csv.rb +33 -33
  159. data/samples/data/_excel.rb +55 -55
  160. data/samples/data/_yaml.rb +12 -12
  161. data/samples/hello_world.rb +6 -6
  162. data/samples/images/_cairo_access.rb +39 -39
  163. data/samples/images/_images.rb +104 -104
  164. data/samples/images/_more_load_images.rb +102 -102
  165. data/samples/images/_placeholders.rb +48 -48
  166. data/samples/intro/01_hello.rb +8 -8
  167. data/samples/intro/02_options.rb +14 -14
  168. data/samples/intro/03_layout.rb +11 -11
  169. data/samples/intro/04_arrays.rb +15 -15
  170. data/samples/intro/05_excel.rb +14 -14
  171. data/samples/layouts/builtin_layouts.rb +97 -97
  172. data/samples/layouts/layouts.rb +71 -71
  173. data/samples/project/src/characters.rb +8 -8
  174. data/samples/project/src/skills.rb +7 -7
  175. data/samples/proofs/_tgc_proofs.rb +16 -16
  176. data/samples/ranges/_ranges.rb +64 -64
  177. data/samples/saves/_hand.rb +23 -23
  178. data/samples/saves/_portrait_landscape.rb +23 -23
  179. data/samples/saves/_save_filenames.rb +28 -28
  180. data/samples/saves/_save_pdf.rb +29 -29
  181. data/samples/saves/_saves.rb +75 -75
  182. data/samples/saves/_showcase.rb +25 -25
  183. data/samples/shadows/_shadow.rb +71 -71
  184. data/samples/shapes/_draw_shapes.rb +60 -60
  185. data/samples/shapes/_proofs.rb +22 -22
  186. data/samples/sprues/_advanced_sprues.rb +25 -25
  187. data/samples/sprues/_builtin_sprues.rb +22 -22
  188. data/samples/sprues/_fold_sheet.rb +30 -30
  189. data/samples/sprues/_hex_tiles.rb +15 -15
  190. data/samples/sprues/_mints.rb +11 -11
  191. data/samples/sprues/_negative_coords.rb +6 -6
  192. data/samples/sprues/_sprue_example.rb +11 -11
  193. data/samples/system_font_debug/_list_fonts.rb +14 -14
  194. data/samples/text/_embed_text.rb +128 -128
  195. data/samples/text/_text.rb +52 -52
  196. data/samples/text/_text_options.rb +103 -103
  197. data/samples/text/bug134.rb +14 -14
  198. data/samples/units/_cells.rb +50 -50
  199. data/samples/units/_shorthands.rb +48 -48
  200. data/samples/units/_units.rb +39 -39
  201. data/squib.gemspec +58 -58
  202. metadata +21 -21
@@ -1,165 +1,165 @@
1
- require 'cairo'
2
- require_relative 'arg_loader'
3
- require_relative 'color_validator'
4
- require_relative 'dir_validator'
5
-
6
- module Squib::Args
7
- module_function def extract_sheet(opts, deck, dsl_method_defaults = {})
8
- Sheet.new(dsl_method_defaults).extract! opts, deck
9
- end
10
-
11
- class Sheet
12
- include ArgLoader
13
- include ColorValidator
14
- include DirValidator
15
-
16
- def initialize(dsl_method_defaults = {})
17
- @dsl_method_defaults = dsl_method_defaults
18
- end
19
-
20
- def self.parameters
21
- {
22
- count_format: '%02d',
23
- crop_margin_bottom: 0,
24
- crop_margin_left: 0,
25
- crop_margin_right: 0,
26
- crop_margin_top: 0,
27
- crop_marks: false,
28
- crop_stroke_color: :black,
29
- crop_stroke_dash: '',
30
- crop_stroke_width: 1.5,
31
- dir: '_output',
32
- file: 'sheet.png',
33
- fill_color: :white,
34
- gap: 0,
35
- height: 2550,
36
- margin: 75,
37
- prefix: 'sheet_',
38
- suffix: '',
39
- rows: :infinite,
40
- columns: 5,
41
- trim_radius: 0,
42
- trim: 0,
43
- width: 3300,
44
- range: :all,
45
- rtl: false,
46
- }
47
- end
48
-
49
- def self.expanding_parameters
50
- [] # none of them
51
- end
52
-
53
- def self.params_with_units
54
- [ :crop_margin_bottom, :crop_margin_left, :crop_margin_right,
55
- :crop_margin_top, :gap, :height, :margin, :trim_radius, :trim,
56
- :width
57
- ]
58
- end
59
-
60
- def validate_crop_stroke_dash(arg)
61
- arg.to_s.split.collect do |x|
62
- UnitConversion.parse(x, @deck.dpi, @deck.cell_px).to_f
63
- end
64
- end
65
-
66
- def validate_crop_marks(arg)
67
- arg.to_s.downcase.to_sym unless arg == false
68
- end
69
-
70
- def validate_fill_color(arg)
71
- colorify(arg, @deck.custom_colors)
72
- end
73
-
74
- def validate_dir(arg)
75
- ensure_dir_created(arg)
76
- end
77
-
78
- def validate_columns(arg)
79
- raise 'columns must be an integer' unless arg.respond_to? :to_i
80
- arg.to_i
81
- end
82
-
83
- def validate_rows(arg)
84
- raise 'columns must be an integer' unless columns.respond_to? :to_i
85
- count = (range == :all) ? @deck.size : count = range.to_a.length
86
- return arg.to_i if arg.respond_to? :to_i
87
- (count.to_f / columns.to_f).ceil # e.g. :infinite
88
- end
89
-
90
- def full_filename(i=nil)
91
- if i.nil?
92
- "#{dir}/#{file}"
93
- else
94
- "#{dir}/#{prefix}#{count_format % i}#{suffix}.png"
95
- end
96
- end
97
-
98
- def crop_coords(x, y, deck_w, deck_h)
99
- case crop_marks
100
- when false
101
- []
102
- when :full
103
- [
104
- {
105
- # Vertical, Left
106
- x1: x + trim + crop_margin_left, y1: 0,
107
- x2: x + trim + crop_margin_left, y2: height - margin + 1
108
- },
109
- {
110
- # Vertical, Right
111
- x1: x + deck_w - trim - crop_margin_right, y1: 0,
112
- x2: x + deck_w - trim - crop_margin_right, y2: height - margin + 1
113
- },
114
- {
115
- # Horizontal, Top
116
- x1: 0 , y1: y + trim + crop_margin_top,
117
- x2: width - margin + 1, y2: y + trim + crop_margin_top
118
- },
119
- {
120
- # Horizontal, Bottom
121
- x1: 0 , y1: y + deck_h - trim - crop_margin_bottom,
122
- x2: width - margin + 1, y2: y + deck_h - trim - crop_margin_bottom
123
- },
124
- ]
125
- else # e.g. :margin
126
- [
127
- { # Vertical, Upper-left
128
- x1: x + trim + crop_margin_left, y1: 0,
129
- x2: x + trim + crop_margin_left, y2: margin - 1
130
- },
131
- { # Vertical , Upper-right
132
- x1: x + deck_w - trim - crop_margin_right, y1: 0,
133
- x2: x + deck_w - trim - crop_margin_right, y2: margin - 1
134
- },
135
- { # Vertical , Lower-left
136
- x1: x + trim + crop_margin_left, y1: height,
137
- x2: x + trim + crop_margin_left, y2: height - margin + 1
138
- },
139
- { # Vertical , Lower-right
140
- x1: x + deck_w - trim - crop_margin_right, y1: height,
141
- x2: x + deck_w - trim - crop_margin_right, y2: height - margin + 1
142
- },
143
- { # Horizontal, Upper-left
144
- x1: 0 , y1: y + trim + crop_margin_top,
145
- x2: margin - 1, y2: y + trim + crop_margin_top
146
- },
147
- { # Horizontal, Upper-Right
148
- x1: width , y1: y + trim + crop_margin_top,
149
- x2: width - margin + 1, y2: y + trim + crop_margin_top
150
- },
151
- { # Horizontal, Lower-Left
152
- x1: 0 , y1: y + deck_h - trim - crop_margin_bottom,
153
- x2: margin - 1, y2: y + deck_h - trim - crop_margin_bottom
154
- },
155
- { # Horizontal, Lower-Right
156
- x1: width, y1: y + deck_h - trim - crop_margin_bottom,
157
- x2: width - margin + 1, y2: y + deck_h - trim - crop_margin_bottom
158
- },
159
- ]
160
- end
161
- end
162
-
163
- end
164
-
165
- end
1
+ require 'cairo'
2
+ require_relative 'arg_loader'
3
+ require_relative 'color_validator'
4
+ require_relative 'dir_validator'
5
+
6
+ module Squib::Args
7
+ module_function def extract_sheet(opts, deck, dsl_method_defaults = {})
8
+ Sheet.new(dsl_method_defaults).extract! opts, deck
9
+ end
10
+
11
+ class Sheet
12
+ include ArgLoader
13
+ include ColorValidator
14
+ include DirValidator
15
+
16
+ def initialize(dsl_method_defaults = {})
17
+ @dsl_method_defaults = dsl_method_defaults
18
+ end
19
+
20
+ def self.parameters
21
+ {
22
+ count_format: '%02d',
23
+ crop_margin_bottom: 0,
24
+ crop_margin_left: 0,
25
+ crop_margin_right: 0,
26
+ crop_margin_top: 0,
27
+ crop_marks: false,
28
+ crop_stroke_color: :black,
29
+ crop_stroke_dash: '',
30
+ crop_stroke_width: 1.5,
31
+ dir: '_output',
32
+ file: 'sheet.png',
33
+ fill_color: :white,
34
+ gap: 0,
35
+ height: 2550,
36
+ margin: 75,
37
+ prefix: 'sheet_',
38
+ suffix: '',
39
+ rows: :infinite,
40
+ columns: 5,
41
+ trim_radius: 0,
42
+ trim: 0,
43
+ width: 3300,
44
+ range: :all,
45
+ rtl: false,
46
+ }
47
+ end
48
+
49
+ def self.expanding_parameters
50
+ [] # none of them
51
+ end
52
+
53
+ def self.params_with_units
54
+ [ :crop_margin_bottom, :crop_margin_left, :crop_margin_right,
55
+ :crop_margin_top, :gap, :height, :margin, :trim_radius, :trim,
56
+ :width
57
+ ]
58
+ end
59
+
60
+ def validate_crop_stroke_dash(arg)
61
+ arg.to_s.split.collect do |x|
62
+ UnitConversion.parse(x, @deck.dpi, @deck.cell_px).to_f
63
+ end
64
+ end
65
+
66
+ def validate_crop_marks(arg)
67
+ arg.to_s.downcase.to_sym unless arg == false
68
+ end
69
+
70
+ def validate_fill_color(arg)
71
+ colorify(arg, @deck.custom_colors)
72
+ end
73
+
74
+ def validate_dir(arg)
75
+ ensure_dir_created(arg)
76
+ end
77
+
78
+ def validate_columns(arg)
79
+ raise 'columns must be an integer' unless arg.respond_to? :to_i
80
+ arg.to_i
81
+ end
82
+
83
+ def validate_rows(arg)
84
+ raise 'columns must be an integer' unless columns.respond_to? :to_i
85
+ count = (range == :all) ? @deck.size : count = range.to_a.length
86
+ return arg.to_i if arg.respond_to? :to_i
87
+ (count.to_f / columns.to_f).ceil # e.g. :infinite
88
+ end
89
+
90
+ def full_filename(i=nil)
91
+ if i.nil?
92
+ "#{dir}/#{file}"
93
+ else
94
+ "#{dir}/#{prefix}#{count_format % i}#{suffix}.png"
95
+ end
96
+ end
97
+
98
+ def crop_coords(x, y, deck_w, deck_h)
99
+ case crop_marks
100
+ when false
101
+ []
102
+ when :full
103
+ [
104
+ {
105
+ # Vertical, Left
106
+ x1: x + trim + crop_margin_left, y1: 0,
107
+ x2: x + trim + crop_margin_left, y2: height - margin + 1
108
+ },
109
+ {
110
+ # Vertical, Right
111
+ x1: x + deck_w - trim - crop_margin_right, y1: 0,
112
+ x2: x + deck_w - trim - crop_margin_right, y2: height - margin + 1
113
+ },
114
+ {
115
+ # Horizontal, Top
116
+ x1: 0 , y1: y + trim + crop_margin_top,
117
+ x2: width - margin + 1, y2: y + trim + crop_margin_top
118
+ },
119
+ {
120
+ # Horizontal, Bottom
121
+ x1: 0 , y1: y + deck_h - trim - crop_margin_bottom,
122
+ x2: width - margin + 1, y2: y + deck_h - trim - crop_margin_bottom
123
+ },
124
+ ]
125
+ else # e.g. :margin
126
+ [
127
+ { # Vertical, Upper-left
128
+ x1: x + trim + crop_margin_left, y1: 0,
129
+ x2: x + trim + crop_margin_left, y2: margin - 1
130
+ },
131
+ { # Vertical , Upper-right
132
+ x1: x + deck_w - trim - crop_margin_right, y1: 0,
133
+ x2: x + deck_w - trim - crop_margin_right, y2: margin - 1
134
+ },
135
+ { # Vertical , Lower-left
136
+ x1: x + trim + crop_margin_left, y1: height,
137
+ x2: x + trim + crop_margin_left, y2: height - margin + 1
138
+ },
139
+ { # Vertical , Lower-right
140
+ x1: x + deck_w - trim - crop_margin_right, y1: height,
141
+ x2: x + deck_w - trim - crop_margin_right, y2: height - margin + 1
142
+ },
143
+ { # Horizontal, Upper-left
144
+ x1: 0 , y1: y + trim + crop_margin_top,
145
+ x2: margin - 1, y2: y + trim + crop_margin_top
146
+ },
147
+ { # Horizontal, Upper-Right
148
+ x1: width , y1: y + trim + crop_margin_top,
149
+ x2: width - margin + 1, y2: y + trim + crop_margin_top
150
+ },
151
+ { # Horizontal, Lower-Left
152
+ x1: 0 , y1: y + deck_h - trim - crop_margin_bottom,
153
+ x2: margin - 1, y2: y + deck_h - trim - crop_margin_bottom
154
+ },
155
+ { # Horizontal, Lower-Right
156
+ x1: width, y1: y + deck_h - trim - crop_margin_bottom,
157
+ x2: width - margin + 1, y2: y + deck_h - trim - crop_margin_bottom
158
+ },
159
+ ]
160
+ end
161
+ end
162
+
163
+ end
164
+
165
+ end
@@ -1,41 +1,41 @@
1
- require 'cairo'
2
- require_relative 'arg_loader'
3
- require_relative 'dir_validator'
4
-
5
- module Squib::Args
6
- module_function def extract_showcase_special(opts, deck)
7
- ShowcaseSpecial.new.extract! opts, deck
8
- end
9
-
10
- class ShowcaseSpecial
11
- include ArgLoader
12
- include DirValidator
13
-
14
- def self.parameters
15
- {
16
- scale: 0.85,
17
- trim: 0,
18
- trim_radius: 38,
19
- offset: 1.1,
20
- reflect_offset: 15,
21
- reflect_percent: 0.25,
22
- reflect_strength: 0.2,
23
- face: :left,
24
- }
25
- end
26
-
27
- def self.expanding_parameters
28
- [] # none of them
29
- end
30
-
31
- def self.params_with_units
32
- [ :reflect_offset ]
33
- end
34
-
35
- def face_right?
36
- @face.to_s.strip.downcase == 'right'
37
- end
38
-
39
- end
40
-
41
- end
1
+ require 'cairo'
2
+ require_relative 'arg_loader'
3
+ require_relative 'dir_validator'
4
+
5
+ module Squib::Args
6
+ module_function def extract_showcase_special(opts, deck)
7
+ ShowcaseSpecial.new.extract! opts, deck
8
+ end
9
+
10
+ class ShowcaseSpecial
11
+ include ArgLoader
12
+ include DirValidator
13
+
14
+ def self.parameters
15
+ {
16
+ scale: 0.85,
17
+ trim: 0,
18
+ trim_radius: 38,
19
+ offset: 1.1,
20
+ reflect_offset: 15,
21
+ reflect_percent: 0.25,
22
+ reflect_strength: 0.2,
23
+ face: :left,
24
+ }
25
+ end
26
+
27
+ def self.expanding_parameters
28
+ [] # none of them
29
+ end
30
+
31
+ def self.params_with_units
32
+ [ :reflect_offset ]
33
+ end
34
+
35
+ def face_right?
36
+ @face.to_s.strip.downcase == 'right'
37
+ end
38
+
39
+ end
40
+
41
+ end
@@ -1,44 +1,44 @@
1
- require_relative 'arg_loader'
2
-
3
- module Squib::Args
4
- module_function def extract_sprue_file(opts, deck, dsl_method_default = {})
5
- SprueFile.new.extract! opts, deck
6
- end
7
- class SprueFile
8
- include ArgLoader
9
-
10
- def initialize(dsl_method_default = {})
11
- @dsl_method_default = dsl_method_default
12
- end
13
-
14
- def self.parameters
15
- {
16
- sprue: nil
17
- }
18
- end
19
-
20
- def self.expanding_parameters
21
- []
22
- end
23
-
24
- def self.params_with_units
25
- [] # none of them
26
- end
27
-
28
- def validate_template_file(arg)
29
- return nil if arg.nil?
30
-
31
- thefile = File.exist?(arg) ? arg : builtin(arg)
32
- raise "File #{File.expand_path(arg)} does not exist!" unless
33
- File.exist? thefile
34
-
35
- File.expand_path(thefile)
36
- end
37
-
38
- private
39
-
40
- def builtin(file)
41
- "#{File.dirname(__FILE__)}/../builtin/sprues/#{file}"
42
- end
43
- end
44
- end
1
+ require_relative 'arg_loader'
2
+
3
+ module Squib::Args
4
+ module_function def extract_sprue_file(opts, deck, dsl_method_default = {})
5
+ SprueFile.new.extract! opts, deck
6
+ end
7
+ class SprueFile
8
+ include ArgLoader
9
+
10
+ def initialize(dsl_method_default = {})
11
+ @dsl_method_default = dsl_method_default
12
+ end
13
+
14
+ def self.parameters
15
+ {
16
+ sprue: nil
17
+ }
18
+ end
19
+
20
+ def self.expanding_parameters
21
+ []
22
+ end
23
+
24
+ def self.params_with_units
25
+ [] # none of them
26
+ end
27
+
28
+ def validate_template_file(arg)
29
+ return nil if arg.nil?
30
+
31
+ thefile = File.exist?(arg) ? arg : builtin(arg)
32
+ raise "File #{File.expand_path(arg)} does not exist!" unless
33
+ File.exist? thefile
34
+
35
+ File.expand_path(thefile)
36
+ end
37
+
38
+ private
39
+
40
+ def builtin(file)
41
+ "#{File.dirname(__FILE__)}/../builtin/sprues/#{file}"
42
+ end
43
+ end
44
+ end
@@ -1,37 +1,37 @@
1
- require_relative 'arg_loader'
2
-
3
- module Squib::Args
4
- module_function def extract_svg_special(opts, deck)
5
- SvgSpecial.new.extract! opts, deck
6
- end
7
-
8
- class SvgSpecial
9
- include ArgLoader
10
-
11
- def self.parameters
12
- { data: nil, id: nil, force_id: false }
13
- end
14
-
15
- def self.expanding_parameters
16
- parameters.keys # all of them
17
- end
18
-
19
- def self.params_with_units
20
- []
21
- end
22
-
23
- def validate_id(arg, _i)
24
- return nil if arg.to_s.empty?
25
- arg = '#' << arg unless arg.start_with? '#'
26
- arg
27
- end
28
-
29
- # Only render if we have an ID specified, or we are forcing an ID
30
- def render?(i)
31
- return false if force_id[i] && id[i].to_s.empty?
32
- return true
33
- end
34
-
35
- end
36
-
37
- end
1
+ require_relative 'arg_loader'
2
+
3
+ module Squib::Args
4
+ module_function def extract_svg_special(opts, deck)
5
+ SvgSpecial.new.extract! opts, deck
6
+ end
7
+
8
+ class SvgSpecial
9
+ include ArgLoader
10
+
11
+ def self.parameters
12
+ { data: nil, id: nil, force_id: false }
13
+ end
14
+
15
+ def self.expanding_parameters
16
+ parameters.keys # all of them
17
+ end
18
+
19
+ def self.params_with_units
20
+ []
21
+ end
22
+
23
+ def validate_id(arg, _i)
24
+ return nil if arg.to_s.empty?
25
+ arg = '#' << arg unless arg.start_with? '#'
26
+ arg
27
+ end
28
+
29
+ # Only render if we have an ID specified, or we are forcing an ID
30
+ def render?(i)
31
+ return false if force_id[i] && id[i].to_s.empty?
32
+ return true
33
+ end
34
+
35
+ end
36
+
37
+ end
@@ -1,55 +1,55 @@
1
- require_relative 'arg_loader'
2
-
3
- module Squib::Args
4
- module_function def extract_transform(opts, deck)
5
- Transform.new.extract!(opts, deck)
6
- end
7
-
8
- class Transform
9
- include ArgLoader
10
-
11
- def self.parameters
12
- { angle: 0,
13
- crop_x: 0,
14
- crop_y: 0,
15
- crop_width: :native,
16
- crop_height: :native,
17
- crop_corner_radius: nil,
18
- crop_corner_x_radius: 0,
19
- crop_corner_y_radius: 0,
20
- flip_vertical: false,
21
- flip_horizontal: false,
22
- }
23
- end
24
-
25
- def self.expanding_parameters
26
- parameters.keys # all of them
27
- end
28
-
29
- def self.params_with_units
30
- parameters.keys - [:flip_vertical, :flip_horizontal]
31
- end
32
-
33
- def validate_crop_width(arg, _i)
34
- return arg if @deck.nil?
35
- return @deck.width if arg == :deck
36
- arg
37
- end
38
-
39
- def validate_crop_height(arg, _i)
40
- return arg if @deck.nil?
41
- return @deck.height if arg == :deck
42
- arg
43
- end
44
-
45
- def validate_crop_corner_x_radius(arg, i)
46
- return crop_corner_radius[i] unless crop_corner_radius[i].nil?
47
- arg
48
- end
49
-
50
- def validate_crop_corner_y_radius(arg, i)
51
- return crop_corner_radius[i] unless crop_corner_radius[i].nil?
52
- arg
53
- end
54
- end
55
- end
1
+ require_relative 'arg_loader'
2
+
3
+ module Squib::Args
4
+ module_function def extract_transform(opts, deck)
5
+ Transform.new.extract!(opts, deck)
6
+ end
7
+
8
+ class Transform
9
+ include ArgLoader
10
+
11
+ def self.parameters
12
+ { angle: 0,
13
+ crop_x: 0,
14
+ crop_y: 0,
15
+ crop_width: :native,
16
+ crop_height: :native,
17
+ crop_corner_radius: nil,
18
+ crop_corner_x_radius: 0,
19
+ crop_corner_y_radius: 0,
20
+ flip_vertical: false,
21
+ flip_horizontal: false,
22
+ }
23
+ end
24
+
25
+ def self.expanding_parameters
26
+ parameters.keys # all of them
27
+ end
28
+
29
+ def self.params_with_units
30
+ parameters.keys - [:flip_vertical, :flip_horizontal]
31
+ end
32
+
33
+ def validate_crop_width(arg, _i)
34
+ return arg if @deck.nil?
35
+ return @deck.width if arg == :deck
36
+ arg
37
+ end
38
+
39
+ def validate_crop_height(arg, _i)
40
+ return arg if @deck.nil?
41
+ return @deck.height if arg == :deck
42
+ arg
43
+ end
44
+
45
+ def validate_crop_corner_x_radius(arg, i)
46
+ return crop_corner_radius[i] unless crop_corner_radius[i].nil?
47
+ arg
48
+ end
49
+
50
+ def validate_crop_corner_y_radius(arg, i)
51
+ return crop_corner_radius[i] unless crop_corner_radius[i].nil?
52
+ arg
53
+ end
54
+ end
55
+ end