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,43 +1,43 @@
1
- require 'cairo'
2
- require_relative 'arg_loader'
3
- require_relative 'color_validator'
4
-
5
- module Squib::Args
6
- module_function def extract_paint(opts, deck)
7
- Paint.new(deck.custom_colors).extract!(opts, deck)
8
- end
9
-
10
- class Paint
11
- include ArgLoader
12
- include ColorValidator
13
-
14
- def initialize(custom_colors)
15
- @custom_colors = custom_colors
16
- end
17
-
18
- def self.parameters
19
- { alpha: 1.0,
20
- blend: :none,
21
- mask: nil,
22
- }
23
- end
24
-
25
- def self.expanding_parameters
26
- parameters.keys # all of them are expandable
27
- end
28
-
29
- def self.params_with_units
30
- []
31
- end
32
-
33
- def validate_alpha(arg, _i)
34
- raise 'alpha must respond to to_f' unless arg.respond_to? :to_f
35
- arg.to_f
36
- end
37
-
38
- def validate_mask(arg, _i)
39
- colorify(arg, @custom_colors)
40
- end
41
-
42
- end
43
- end
1
+ require 'cairo'
2
+ require_relative 'arg_loader'
3
+ require_relative 'color_validator'
4
+
5
+ module Squib::Args
6
+ module_function def extract_paint(opts, deck)
7
+ Paint.new(deck.custom_colors).extract!(opts, deck)
8
+ end
9
+
10
+ class Paint
11
+ include ArgLoader
12
+ include ColorValidator
13
+
14
+ def initialize(custom_colors)
15
+ @custom_colors = custom_colors
16
+ end
17
+
18
+ def self.parameters
19
+ { alpha: 1.0,
20
+ blend: :none,
21
+ mask: nil,
22
+ }
23
+ end
24
+
25
+ def self.expanding_parameters
26
+ parameters.keys # all of them are expandable
27
+ end
28
+
29
+ def self.params_with_units
30
+ []
31
+ end
32
+
33
+ def validate_alpha(arg, _i)
34
+ raise 'alpha must respond to to_f' unless arg.respond_to? :to_f
35
+ arg.to_f
36
+ end
37
+
38
+ def validate_mask(arg, _i)
39
+ colorify(arg, @custom_colors)
40
+ end
41
+
42
+ end
43
+ end
@@ -1,118 +1,118 @@
1
- require_relative '../constants'
2
- require_relative 'arg_loader'
3
-
4
- module Squib::Args
5
-
6
- module_function def extract_para(opts, deck, dsl_method_defaults = {})
7
- Paragraph.new(deck.font).extract!(opts, deck)
8
- end
9
-
10
- class Paragraph
11
- include ArgLoader
12
-
13
- def self.parameters
14
- { align: :left,
15
- str: 'Hello, World!',
16
- font: :use_set,
17
- font_size: nil,
18
- markup: false,
19
- justify: false,
20
- wrap: true,
21
- ellipsize: :end,
22
- spacing: nil,
23
- valign: :top,
24
- hint: :off
25
- }
26
- end
27
-
28
- def self.expanding_parameters
29
- parameters.keys # all of them
30
- end
31
-
32
- def self.params_with_units
33
- [] # none of them
34
- end
35
-
36
- def initialize(deck_font)
37
- @deck_font = deck_font
38
- end
39
-
40
- def validate_str(arg, _i)
41
- arg.to_s
42
- end
43
-
44
- def validate_font(arg, _i)
45
- arg = @deck_font if arg == :use_set
46
- arg = Squib::DEFAULT_FONT if arg == :default
47
- arg
48
- end
49
-
50
- def validate_align(arg, _i)
51
- case arg.to_s.downcase.strip
52
- when 'left'
53
- Pango::Alignment::LEFT
54
- when 'right'
55
- Pango::Alignment::RIGHT
56
- when 'center'
57
- Pango::Alignment::CENTER
58
- else
59
- raise ArgumentError, 'align must be one of: center, left, right'
60
- end
61
- end
62
-
63
- def validate_wrap(arg, _i)
64
- case arg.to_s.downcase.strip
65
- when 'word'
66
- Pango::WrapMode::WORD
67
- when 'char', 'false'
68
- Pango::WrapMode::CHAR
69
- when 'word_char', 'true'
70
- Pango::WrapMode::WORD_CHAR
71
- else
72
- raise ArgumentError, 'wrap must be one of: word, char, word_char, true, or false'
73
- end
74
- end
75
-
76
- def validate_ellipsize(arg, _i)
77
- case arg.to_s.downcase.strip
78
- when 'none', 'false'
79
- Pango::EllipsizeMode::NONE
80
- when 'start'
81
- Pango::EllipsizeMode::START
82
- when 'middle'
83
- Pango::EllipsizeMode::MIDDLE
84
- when 'end', 'true'
85
- Pango::EllipsizeMode::END
86
- when 'autoscale'
87
- :autoscale
88
- else
89
- raise ArgumentError, 'ellipsize must be one of: none, start, middle, end, true, false or autoscale'
90
- end
91
- end
92
-
93
- def validate_justify(arg, _i)
94
- case arg
95
- when nil, true, false
96
- arg
97
- else
98
- raise ArgumentError, 'justify must be one of: nil, true, or false'
99
- end
100
- end
101
-
102
- def validate_spacing(arg, _i)
103
- return nil if arg.nil?
104
- raise ArgumentError, 'spacing must be a number or nil' unless arg.respond_to? :to_f
105
- arg.to_f * Pango::SCALE
106
- end
107
-
108
- def validate_valign(arg, _i)
109
- if %w(top middle bottom).include? arg.to_s.downcase
110
- arg.to_s.downcase
111
- else
112
- raise ArgumentError, 'valign must be one of: top, middle, bottom'
113
- end
114
- end
115
-
116
- end
117
-
118
- end
1
+ require_relative '../constants'
2
+ require_relative 'arg_loader'
3
+
4
+ module Squib::Args
5
+
6
+ module_function def extract_para(opts, deck, dsl_method_defaults = {})
7
+ Paragraph.new(deck.font).extract!(opts, deck)
8
+ end
9
+
10
+ class Paragraph
11
+ include ArgLoader
12
+
13
+ def self.parameters
14
+ { align: :left,
15
+ str: 'Hello, World!',
16
+ font: :use_set,
17
+ font_size: nil,
18
+ markup: false,
19
+ justify: false,
20
+ wrap: true,
21
+ ellipsize: :end,
22
+ spacing: nil,
23
+ valign: :top,
24
+ hint: :off
25
+ }
26
+ end
27
+
28
+ def self.expanding_parameters
29
+ parameters.keys # all of them
30
+ end
31
+
32
+ def self.params_with_units
33
+ [] # none of them
34
+ end
35
+
36
+ def initialize(deck_font)
37
+ @deck_font = deck_font
38
+ end
39
+
40
+ def validate_str(arg, _i)
41
+ arg.to_s
42
+ end
43
+
44
+ def validate_font(arg, _i)
45
+ arg = @deck_font if arg == :use_set
46
+ arg = Squib::DEFAULT_FONT if arg == :default
47
+ arg
48
+ end
49
+
50
+ def validate_align(arg, _i)
51
+ case arg.to_s.downcase.strip
52
+ when 'left'
53
+ Pango::Alignment::LEFT
54
+ when 'right'
55
+ Pango::Alignment::RIGHT
56
+ when 'center'
57
+ Pango::Alignment::CENTER
58
+ else
59
+ raise ArgumentError, 'align must be one of: center, left, right'
60
+ end
61
+ end
62
+
63
+ def validate_wrap(arg, _i)
64
+ case arg.to_s.downcase.strip
65
+ when 'word'
66
+ Pango::WrapMode::WORD
67
+ when 'char', 'false'
68
+ Pango::WrapMode::CHAR
69
+ when 'word_char', 'true'
70
+ Pango::WrapMode::WORD_CHAR
71
+ else
72
+ raise ArgumentError, 'wrap must be one of: word, char, word_char, true, or false'
73
+ end
74
+ end
75
+
76
+ def validate_ellipsize(arg, _i)
77
+ case arg.to_s.downcase.strip
78
+ when 'none', 'false'
79
+ Pango::EllipsizeMode::NONE
80
+ when 'start'
81
+ Pango::EllipsizeMode::START
82
+ when 'middle'
83
+ Pango::EllipsizeMode::MIDDLE
84
+ when 'end', 'true'
85
+ Pango::EllipsizeMode::END
86
+ when 'autoscale'
87
+ :autoscale
88
+ else
89
+ raise ArgumentError, 'ellipsize must be one of: none, start, middle, end, true, false or autoscale'
90
+ end
91
+ end
92
+
93
+ def validate_justify(arg, _i)
94
+ case arg
95
+ when nil, true, false
96
+ arg
97
+ else
98
+ raise ArgumentError, 'justify must be one of: nil, true, or false'
99
+ end
100
+ end
101
+
102
+ def validate_spacing(arg, _i)
103
+ return nil if arg.nil?
104
+ raise ArgumentError, 'spacing must be a number or nil' unless arg.respond_to? :to_f
105
+ arg.to_f * Pango::SCALE
106
+ end
107
+
108
+ def validate_valign(arg, _i)
109
+ if %w(top middle bottom).include? arg.to_s.downcase
110
+ arg.to_s.downcase
111
+ else
112
+ raise ArgumentError, 'valign must be one of: top, middle, bottom'
113
+ end
114
+ end
115
+
116
+ end
117
+
118
+ end
@@ -1,65 +1,65 @@
1
- require_relative 'arg_loader'
2
- require_relative 'dir_validator'
3
-
4
- module Squib::Args
5
- module_function def extract_save_batch(opts, deck)
6
- SaveBatch.new.extract! opts, deck
7
- end
8
-
9
- class SaveBatch
10
- include ArgLoader
11
- include DirValidator
12
-
13
- def initialize
14
- end
15
-
16
- def self.parameters
17
- {
18
- angle: 0,
19
- count_format: '%02d',
20
- dir: '_output',
21
- prefix: 'card_',
22
- rotate: false,
23
- suffix: '',
24
- trim_radius: 0,
25
- trim: 0,
26
- }
27
- end
28
-
29
- def self.expanding_parameters
30
- self.parameters.keys # all of them
31
- end
32
-
33
- def self.params_with_units
34
- [:trim, :trim_radius]
35
- end
36
-
37
- def validate_dir(arg, _i)
38
- ensure_dir_created(arg)
39
- end
40
-
41
- def validate_rotate(arg, i)
42
- case arg
43
- when true, :clockwise
44
- angle[i] = 0.5 * Math::PI
45
- return true
46
- when :counterclockwise
47
- angle[i] = 1.5 * Math::PI
48
- return true
49
- when false
50
- false
51
- else
52
- raise 'invalid option to rotate: only [true, false, :clockwise, :counterclockwise]'
53
- end
54
- end
55
-
56
- def full_filename(i)
57
- "#{dir[i]}/#{prefix[i]}#{count_format[i] % i}#{suffix[i]}.png"
58
- end
59
-
60
- def summary
61
- "#{dir[0]}/#{prefix[0]}_*#{suffix[0]}"
62
- end
63
-
64
- end
65
- end
1
+ require_relative 'arg_loader'
2
+ require_relative 'dir_validator'
3
+
4
+ module Squib::Args
5
+ module_function def extract_save_batch(opts, deck)
6
+ SaveBatch.new.extract! opts, deck
7
+ end
8
+
9
+ class SaveBatch
10
+ include ArgLoader
11
+ include DirValidator
12
+
13
+ def initialize
14
+ end
15
+
16
+ def self.parameters
17
+ {
18
+ angle: 0,
19
+ count_format: '%02d',
20
+ dir: '_output',
21
+ prefix: 'card_',
22
+ rotate: false,
23
+ suffix: '',
24
+ trim_radius: 0,
25
+ trim: 0,
26
+ }
27
+ end
28
+
29
+ def self.expanding_parameters
30
+ self.parameters.keys # all of them
31
+ end
32
+
33
+ def self.params_with_units
34
+ [:trim, :trim_radius]
35
+ end
36
+
37
+ def validate_dir(arg, _i)
38
+ ensure_dir_created(arg)
39
+ end
40
+
41
+ def validate_rotate(arg, i)
42
+ case arg
43
+ when true, :clockwise
44
+ angle[i] = 0.5 * Math::PI
45
+ return true
46
+ when :counterclockwise
47
+ angle[i] = 1.5 * Math::PI
48
+ return true
49
+ when false
50
+ false
51
+ else
52
+ raise 'invalid option to rotate: only [true, false, :clockwise, :counterclockwise]'
53
+ end
54
+ end
55
+
56
+ def full_filename(i)
57
+ "#{dir[i]}/#{prefix[i]}#{count_format[i] % i}#{suffix[i]}.png"
58
+ end
59
+
60
+ def summary
61
+ "#{dir[0]}/#{prefix[0]}_*#{suffix[0]}"
62
+ end
63
+
64
+ end
65
+ end
@@ -1,57 +1,57 @@
1
- require_relative 'arg_loader'
2
- require_relative 'xywh_shorthands'
3
-
4
- module Squib::Args
5
- module_function def extract_scale_box(opts, deck)
6
- ScaleBox.new.extract!(opts, deck)
7
- end
8
-
9
- class ScaleBox
10
- include ArgLoader
11
- include XYWHShorthands
12
-
13
- def self.parameters
14
- {
15
- x: 0, y: 0,
16
- width: :native, height: :native
17
- }
18
- end
19
-
20
- def self.expanding_parameters
21
- parameters.keys # all of them
22
- end
23
-
24
- def self.params_with_units
25
- parameters.keys # all of them
26
- end
27
-
28
- def validate_x(arg, i) apply_shorthands(arg, @deck, axis: :x) end
29
- def validate_y(arg,_i) apply_shorthands(arg, @deck, axis: :y) end
30
-
31
- def validate_width(arg, i)
32
- return @deck.width if arg.to_s == 'deck'
33
- return :native if arg.to_s == 'native'
34
- arg = apply_shorthands(arg, @deck, axis: :x)
35
- return arg if arg.respond_to? :to_f
36
- if arg.to_s == 'scale'
37
- raise 'if width is :scale, height must be a number' unless height[i].respond_to? :to_f
38
- return arg
39
- end
40
- raise 'width must be a number, :scale, :native, or :deck'
41
- end
42
-
43
- def validate_height(arg, i)
44
- return @deck.height if arg.to_s == 'deck'
45
- return :native if arg.to_s == 'native'
46
- arg = apply_shorthands(arg, @deck, axis: :y)
47
- return arg if arg.respond_to? :to_f
48
- if arg.to_s == 'scale'
49
- raise 'if height is \'scale\', width must be a number' unless width[i].respond_to? :to_f
50
- return arg
51
- end
52
- raise 'height must be a number, :scale, :native, or :deck'
53
- end
54
-
55
- end
56
-
57
- end
1
+ require_relative 'arg_loader'
2
+ require_relative 'xywh_shorthands'
3
+
4
+ module Squib::Args
5
+ module_function def extract_scale_box(opts, deck)
6
+ ScaleBox.new.extract!(opts, deck)
7
+ end
8
+
9
+ class ScaleBox
10
+ include ArgLoader
11
+ include XYWHShorthands
12
+
13
+ def self.parameters
14
+ {
15
+ x: 0, y: 0,
16
+ width: :native, height: :native
17
+ }
18
+ end
19
+
20
+ def self.expanding_parameters
21
+ parameters.keys # all of them
22
+ end
23
+
24
+ def self.params_with_units
25
+ parameters.keys # all of them
26
+ end
27
+
28
+ def validate_x(arg, i) apply_shorthands(arg, @deck, axis: :x) end
29
+ def validate_y(arg,_i) apply_shorthands(arg, @deck, axis: :y) end
30
+
31
+ def validate_width(arg, i)
32
+ return @deck.width if arg.to_s == 'deck'
33
+ return :native if arg.to_s == 'native'
34
+ arg = apply_shorthands(arg, @deck, axis: :x)
35
+ return arg if arg.respond_to? :to_f
36
+ if arg.to_s == 'scale'
37
+ raise 'if width is :scale, height must be a number' unless height[i].respond_to? :to_f
38
+ return arg
39
+ end
40
+ raise 'width must be a number, :scale, :native, or :deck'
41
+ end
42
+
43
+ def validate_height(arg, i)
44
+ return @deck.height if arg.to_s == 'deck'
45
+ return :native if arg.to_s == 'native'
46
+ arg = apply_shorthands(arg, @deck, axis: :y)
47
+ return arg if arg.respond_to? :to_f
48
+ if arg.to_s == 'scale'
49
+ raise 'if height is \'scale\', width must be a number' unless width[i].respond_to? :to_f
50
+ return arg
51
+ end
52
+ raise 'height must be a number, :scale, :native, or :deck'
53
+ end
54
+
55
+ end
56
+
57
+ end