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
data/lib/squib/args/paint.rb
CHANGED
|
@@ -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
|
data/lib/squib/args/paragraph.rb
CHANGED
|
@@ -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
|
data/lib/squib/args/scale_box.rb
CHANGED
|
@@ -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
|