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.
- checksums.yaml +4 -4
- data/.github/ISSUE_TEMPLATE/bug_report.md +39 -39
- data/.github/ISSUE_TEMPLATE/feature_request.md +22 -22
- data/.github/ISSUE_TEMPLATE/help-wanted.md +13 -13
- data/.github/ISSUE_TEMPLATE/release-todo.md +45 -33
- data/.github/PULL_REQUEST_TEMPLATE.md +13 -13
- data/.github/workflows/tests.yml +22 -22
- data/.gitignore +41 -41
- data/.vscode/settings.json +4 -3
- data/CHANGELOG.md +460 -460
- data/CONTRIBUTING.md +40 -40
- data/Dockerfile +27 -27
- data/Gemfile +2 -2
- data/Guardfile +8 -8
- data/LICENSE.txt +22 -22
- data/README.md +139 -139
- data/Rakefile +51 -51
- data/bin/squib +5 -5
- data/lib/squib/api/settings.rb +21 -21
- data/lib/squib/args/arg_loader.rb +138 -138
- data/lib/squib/args/box.rb +59 -59
- data/lib/squib/args/card_range.rb +34 -34
- data/lib/squib/args/color_validator.rb +7 -7
- data/lib/squib/args/coords.rb +49 -49
- data/lib/squib/args/csv_opts.rb +22 -22
- data/lib/squib/args/dir_validator.rb +11 -11
- data/lib/squib/args/draw.rb +93 -93
- data/lib/squib/args/drop_shadow.rb +39 -39
- data/lib/squib/args/embed_adjust.rb +22 -22
- data/lib/squib/args/embed_key.rb +12 -12
- data/lib/squib/args/hand_special.rb +37 -37
- data/lib/squib/args/import.rb +67 -67
- data/lib/squib/args/input_file.rb +55 -55
- data/lib/squib/args/paint.rb +43 -43
- data/lib/squib/args/paragraph.rb +118 -118
- data/lib/squib/args/save_batch.rb +65 -65
- data/lib/squib/args/scale_box.rb +57 -57
- data/lib/squib/args/sheet.rb +165 -165
- data/lib/squib/args/showcase_special.rb +41 -41
- data/lib/squib/args/sprue_file.rb +44 -44
- data/lib/squib/args/svg_special.rb +37 -37
- data/lib/squib/args/transform.rb +55 -55
- data/lib/squib/args/typographer.rb +115 -115
- data/lib/squib/args/unit_conversion.rb +27 -27
- data/lib/squib/args/xywh_shorthands.rb +50 -50
- data/lib/squib/builtin/layouts/economy.yml +85 -85
- data/lib/squib/builtin/layouts/fantasy.yml +101 -101
- data/lib/squib/builtin/layouts/hand.yml +62 -62
- data/lib/squib/builtin/layouts/party.yml +94 -94
- data/lib/squib/builtin/layouts/playing-card.yml +35 -35
- data/lib/squib/builtin/layouts/tuck_box.yml +46 -46
- data/lib/squib/builtin/projects/advanced/.gitignore +4 -4
- data/lib/squib/builtin/projects/advanced/ABOUT.md +19 -19
- data/lib/squib/builtin/projects/advanced/Gemfile +11 -11
- data/lib/squib/builtin/projects/advanced/Guardfile +21 -21
- data/lib/squib/builtin/projects/advanced/IDEAS.md +22 -22
- data/lib/squib/builtin/projects/advanced/PLAYTESTING.md +26 -26
- data/lib/squib/builtin/projects/advanced/Rakefile +27 -27
- data/lib/squib/builtin/projects/advanced/config.yml +49 -49
- data/lib/squib/builtin/projects/advanced/docs/PNP NOTES.md +3 -3
- data/lib/squib/builtin/projects/advanced/docs/RULES.md +21 -21
- data/lib/squib/builtin/projects/advanced/img/example.svg +60 -60
- data/lib/squib/builtin/projects/advanced/layouts/deck.yml +27 -27
- data/lib/squib/builtin/projects/advanced/src/deck.rb +34 -34
- data/lib/squib/builtin/projects/advanced/src/version.rb +3 -3
- data/lib/squib/builtin/projects/basic/.gitignore +4 -4
- data/lib/squib/builtin/projects/basic/ABOUT.md +19 -19
- data/lib/squib/builtin/projects/basic/Gemfile +3 -3
- data/lib/squib/builtin/projects/basic/IDEAS.md +22 -22
- data/lib/squib/builtin/projects/basic/PLAYTESTING.md +26 -26
- data/lib/squib/builtin/projects/basic/PNP NOTES.md +3 -3
- data/lib/squib/builtin/projects/basic/RULES.md +21 -21
- data/lib/squib/builtin/projects/basic/Rakefile +7 -7
- data/lib/squib/builtin/projects/basic/config.yml +50 -50
- data/lib/squib/builtin/projects/basic/deck.rb +6 -6
- data/lib/squib/builtin/sprues/a4_euro_card.yml +42 -42
- data/lib/squib/builtin/sprues/a4_poker_card_8up.yml +40 -40
- data/lib/squib/builtin/sprues/a4_poker_card_9up.yml +42 -42
- data/lib/squib/builtin/sprues/a4_usa_card.yml +42 -42
- data/lib/squib/builtin/sprues/drivethrucards_1up.yml +10 -10
- data/lib/squib/builtin/sprues/letter_poker_card_9up.yml +25 -25
- data/lib/squib/builtin/sprues/letter_poker_foldable_8up.yml +52 -52
- data/lib/squib/builtin/sprues/printplaygames_18up.yml +68 -68
- data/lib/squib/card.rb +75 -75
- data/lib/squib/commands/cli.rb +39 -39
- data/lib/squib/commands/data/template_option.rb +109 -109
- data/lib/squib/commands/make_sprue.rb +277 -277
- data/lib/squib/commands/new.rb +77 -77
- data/lib/squib/conf.rb +149 -149
- data/lib/squib/constants.rb +17 -17
- data/lib/squib/deck.rb +138 -138
- data/lib/squib/dsl/background.rb +35 -35
- data/lib/squib/dsl/circle.rb +39 -39
- data/lib/squib/dsl/csv.rb +42 -42
- data/lib/squib/dsl/curve.rb +35 -35
- data/lib/squib/dsl/cut_zone.rb +47 -47
- data/lib/squib/dsl/ellipse.rb +37 -37
- data/lib/squib/dsl/grid.rb +35 -35
- data/lib/squib/dsl/groups.rb +54 -54
- data/lib/squib/dsl/hand.rb +42 -42
- data/lib/squib/dsl/line.rb +35 -35
- data/lib/squib/dsl/png.rb +57 -57
- data/lib/squib/dsl/polygon.rb +36 -36
- data/lib/squib/dsl/rect.rb +37 -37
- data/lib/squib/dsl/safe_zone.rb +48 -48
- data/lib/squib/dsl/save.rb +21 -21
- data/lib/squib/dsl/save_pdf.rb +50 -50
- data/lib/squib/dsl/save_png.rb +48 -48
- data/lib/squib/dsl/save_sheet.rb +53 -53
- data/lib/squib/dsl/showcase.rb +43 -43
- data/lib/squib/dsl/star.rb +37 -37
- data/lib/squib/dsl/svg.rb +63 -63
- data/lib/squib/dsl/text.rb +54 -54
- data/lib/squib/dsl/text_embed.rb +79 -79
- data/lib/squib/dsl/triangle.rb +35 -35
- data/lib/squib/dsl/units.rb +37 -37
- data/lib/squib/dsl/xlsx.rb +40 -40
- data/lib/squib/dsl/yaml.rb +40 -40
- data/lib/squib/errors_warnings/warn_unexpected_params.rb +14 -14
- data/lib/squib/graphics/background.rb +14 -14
- data/lib/squib/graphics/cairo_context_wrapper.rb +115 -115
- data/lib/squib/graphics/embedding_utils.rb +28 -28
- data/lib/squib/graphics/gradient_regex.rb +47 -47
- data/lib/squib/graphics/hand.rb +42 -42
- data/lib/squib/graphics/image.rb +123 -123
- data/lib/squib/graphics/save_doc.rb +77 -77
- data/lib/squib/graphics/save_images.rb +91 -91
- data/lib/squib/graphics/save_pdf.rb +90 -90
- data/lib/squib/graphics/save_sprue.rb +231 -231
- data/lib/squib/graphics/shapes.rb +143 -143
- data/lib/squib/graphics/showcase.rb +85 -85
- data/lib/squib/graphics/text.rb +202 -202
- data/lib/squib/import/csv_importer.rb +45 -45
- data/lib/squib/import/data_frame.rb +108 -108
- data/lib/squib/import/quantity_exploder.rb +17 -17
- data/lib/squib/import/xlsx_importer.rb +28 -28
- data/lib/squib/import/yaml_importer.rb +30 -30
- data/lib/squib/layout_parser.rb +155 -155
- data/lib/squib/progress.rb +38 -38
- data/lib/squib/sample_helpers.rb +34 -34
- data/lib/squib/sprues/crop_line.rb +28 -28
- data/lib/squib/sprues/crop_line_dash.rb +35 -35
- data/lib/squib/sprues/invalid_sprue_definition.rb +9 -9
- data/lib/squib/sprues/sprue.rb +208 -208
- data/lib/squib/sprues/sprue_schema.rb +51 -51
- data/lib/squib/system_fonts.rb +16 -16
- data/lib/squib/version.rb +11 -11
- data/lib/squib.rb +35 -35
- data/samples/autoscale_font/_autoscale_font.rb +98 -98
- data/samples/backend/_backend.rb +26 -26
- data/samples/basic.rb +19 -19
- data/samples/build_groups/build_groups.rb +36 -36
- data/samples/colors/_colors.rb +44 -44
- data/samples/colors/_gradients.rb +34 -34
- data/samples/colors/_switch_color.rb +33 -33
- data/samples/config/config_text_markup.rb +20 -20
- data/samples/config/custom_config.rb +18 -18
- data/samples/data/_csv.rb +33 -33
- data/samples/data/_excel.rb +55 -55
- data/samples/data/_yaml.rb +12 -12
- data/samples/hello_world.rb +6 -6
- data/samples/images/_cairo_access.rb +39 -39
- data/samples/images/_images.rb +104 -104
- data/samples/images/_more_load_images.rb +102 -102
- data/samples/images/_placeholders.rb +48 -48
- data/samples/intro/01_hello.rb +8 -8
- data/samples/intro/02_options.rb +14 -14
- data/samples/intro/03_layout.rb +11 -11
- data/samples/intro/04_arrays.rb +15 -15
- data/samples/intro/05_excel.rb +14 -14
- data/samples/layouts/builtin_layouts.rb +97 -97
- data/samples/layouts/layouts.rb +71 -71
- data/samples/project/src/characters.rb +8 -8
- data/samples/project/src/skills.rb +7 -7
- data/samples/proofs/_tgc_proofs.rb +16 -16
- data/samples/ranges/_ranges.rb +64 -64
- data/samples/saves/_hand.rb +23 -23
- data/samples/saves/_portrait_landscape.rb +23 -23
- data/samples/saves/_save_filenames.rb +28 -28
- data/samples/saves/_save_pdf.rb +29 -29
- data/samples/saves/_saves.rb +75 -75
- data/samples/saves/_showcase.rb +25 -25
- data/samples/shadows/_shadow.rb +71 -71
- data/samples/shapes/_draw_shapes.rb +60 -60
- data/samples/shapes/_proofs.rb +22 -22
- data/samples/sprues/_advanced_sprues.rb +25 -25
- data/samples/sprues/_builtin_sprues.rb +22 -22
- data/samples/sprues/_fold_sheet.rb +30 -30
- data/samples/sprues/_hex_tiles.rb +15 -15
- data/samples/sprues/_mints.rb +11 -11
- data/samples/sprues/_negative_coords.rb +6 -6
- data/samples/sprues/_sprue_example.rb +11 -11
- data/samples/system_font_debug/_list_fonts.rb +14 -14
- data/samples/text/_embed_text.rb +128 -128
- data/samples/text/_text.rb +52 -52
- data/samples/text/_text_options.rb +103 -103
- data/samples/text/bug134.rb +14 -14
- data/samples/units/_cells.rb +50 -50
- data/samples/units/_shorthands.rb +48 -48
- data/samples/units/_units.rb +39 -39
- data/squib.gemspec +58 -58
- 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
|