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,109 +1,109 @@
1
- module Squib
2
- class Margin
3
- attr_reader :top
4
- attr_reader :right
5
- attr_reader :bottom
6
- attr_reader :left
7
-
8
- ##
9
- # Create a new margin definition.
10
- #
11
- # Takes +definition+ which can either be a space-separated +String+ or an
12
- # +Array+ of +Float+ and will translate it to the top, right, bottom and
13
- # left members.
14
- #
15
- # The syntax follows how CSS parses margin shorthand strings.
16
- def initialize(definition)
17
- if definition.instance_of? String
18
- @top, @right, @bottom, @left = expand_shorthand(
19
- definition.split(/\s+/).map!(&:to_f))
20
- elsif definition.is_a? Numeric
21
- @top, @right, @bottom, @left = expand_shorthand [definition]
22
- elsif definition.instance_of? Array
23
- @top, @right, @bottom, @left = expand_shorthand definition
24
- else
25
- raise ArgumentError, 'Invalid value, must be either string or array'
26
- end
27
- end
28
-
29
- ##
30
- # Map out the margin array.
31
- #
32
- # Takes +margin_arr+ and attempt to expand it to a strict [top, right,
33
- # bottom, left] array.
34
- private def expand_shorthand(margin_arr)
35
- if margin_arr.size == 1
36
- all = margin_arr[0]
37
- [all, all, all, all]
38
- elsif margin_arr.size == 2
39
- margin_arr + margin_arr
40
- elsif margin_arr.size == 3
41
- margin_arr + [margin_arr[1]]
42
- elsif margin_arr.size >= 4
43
- margin_arr[0..3]
44
- else
45
- raise ArgumentError, 'Invalid array'
46
- end
47
- end
48
- end
49
-
50
-
51
- class Gap
52
- attr_reader :horizontal
53
- attr_reader :vertical
54
-
55
- def initialize(definition)
56
- if definition.instance_of? String
57
- @horizontal, @vertical = expand_shorthand(
58
- definition.split(/\s+/).map!(&:to_f))
59
- elsif definition.instance_of? Array
60
- @horizontal, @vertical = expand_shorthand definition
61
- elsif definition.is_a? Numeric
62
- @horizontal, @vertical = definition, definition
63
- else
64
- raise ArgumentError, 'Invalid value, must be either string or array'
65
- end
66
- end
67
-
68
- private def expand_shorthand(gap_arr)
69
- if gap_arr.size >= 2
70
- gap_arr[0..1]
71
- elsif gap_arr.size == 1
72
- gap_arr + gap_arr
73
- else
74
- raise ArgumentError, 'Invalid array'
75
- end
76
- end
77
- end
78
-
79
-
80
- class TemplateOption
81
- attr_accessor :unit
82
- attr_accessor :sheet_width
83
- attr_accessor :sheet_height
84
- attr_writer :sheet_margin
85
- attr_accessor :sheet_align
86
- attr_accessor :card_width
87
- attr_accessor :card_height
88
- attr_writer :card_gap
89
- attr_accessor :card_ordering
90
- attr_accessor :output_file
91
- attr_accessor :crop_lines
92
-
93
- def sheet_margin
94
- if not @sheet_margin.instance_of? Margin
95
- @sheet_margin = Margin.new @sheet_margin
96
- else
97
- @sheet_margin
98
- end
99
- end
100
-
101
- def card_gap
102
- if not @card_gap.instance_of? Gap
103
- @card_gap = Gap.new @card_gap
104
- else
105
- @card_gap
106
- end
107
- end
108
- end
109
- end
1
+ module Squib
2
+ class Margin
3
+ attr_reader :top
4
+ attr_reader :right
5
+ attr_reader :bottom
6
+ attr_reader :left
7
+
8
+ ##
9
+ # Create a new margin definition.
10
+ #
11
+ # Takes +definition+ which can either be a space-separated +String+ or an
12
+ # +Array+ of +Float+ and will translate it to the top, right, bottom and
13
+ # left members.
14
+ #
15
+ # The syntax follows how CSS parses margin shorthand strings.
16
+ def initialize(definition)
17
+ if definition.instance_of? String
18
+ @top, @right, @bottom, @left = expand_shorthand(
19
+ definition.split(/\s+/).map!(&:to_f))
20
+ elsif definition.is_a? Numeric
21
+ @top, @right, @bottom, @left = expand_shorthand [definition]
22
+ elsif definition.instance_of? Array
23
+ @top, @right, @bottom, @left = expand_shorthand definition
24
+ else
25
+ raise ArgumentError, 'Invalid value, must be either string or array'
26
+ end
27
+ end
28
+
29
+ ##
30
+ # Map out the margin array.
31
+ #
32
+ # Takes +margin_arr+ and attempt to expand it to a strict [top, right,
33
+ # bottom, left] array.
34
+ private def expand_shorthand(margin_arr)
35
+ if margin_arr.size == 1
36
+ all = margin_arr[0]
37
+ [all, all, all, all]
38
+ elsif margin_arr.size == 2
39
+ margin_arr + margin_arr
40
+ elsif margin_arr.size == 3
41
+ margin_arr + [margin_arr[1]]
42
+ elsif margin_arr.size >= 4
43
+ margin_arr[0..3]
44
+ else
45
+ raise ArgumentError, 'Invalid array'
46
+ end
47
+ end
48
+ end
49
+
50
+
51
+ class Gap
52
+ attr_reader :horizontal
53
+ attr_reader :vertical
54
+
55
+ def initialize(definition)
56
+ if definition.instance_of? String
57
+ @horizontal, @vertical = expand_shorthand(
58
+ definition.split(/\s+/).map!(&:to_f))
59
+ elsif definition.instance_of? Array
60
+ @horizontal, @vertical = expand_shorthand definition
61
+ elsif definition.is_a? Numeric
62
+ @horizontal, @vertical = definition, definition
63
+ else
64
+ raise ArgumentError, 'Invalid value, must be either string or array'
65
+ end
66
+ end
67
+
68
+ private def expand_shorthand(gap_arr)
69
+ if gap_arr.size >= 2
70
+ gap_arr[0..1]
71
+ elsif gap_arr.size == 1
72
+ gap_arr + gap_arr
73
+ else
74
+ raise ArgumentError, 'Invalid array'
75
+ end
76
+ end
77
+ end
78
+
79
+
80
+ class TemplateOption
81
+ attr_accessor :unit
82
+ attr_accessor :sheet_width
83
+ attr_accessor :sheet_height
84
+ attr_writer :sheet_margin
85
+ attr_accessor :sheet_align
86
+ attr_accessor :card_width
87
+ attr_accessor :card_height
88
+ attr_writer :card_gap
89
+ attr_accessor :card_ordering
90
+ attr_accessor :output_file
91
+ attr_accessor :crop_lines
92
+
93
+ def sheet_margin
94
+ if not @sheet_margin.instance_of? Margin
95
+ @sheet_margin = Margin.new @sheet_margin
96
+ else
97
+ @sheet_margin
98
+ end
99
+ end
100
+
101
+ def card_gap
102
+ if not @card_gap.instance_of? Gap
103
+ @card_gap = Gap.new @card_gap
104
+ else
105
+ @card_gap
106
+ end
107
+ end
108
+ end
109
+ end