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/sheet.rb
CHANGED
|
@@ -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
|
data/lib/squib/args/transform.rb
CHANGED
|
@@ -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
|