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/dsl/star.rb
CHANGED
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
require_relative '../errors_warnings/warn_unexpected_params'
|
|
2
|
-
|
|
3
|
-
module Squib
|
|
4
|
-
class Deck
|
|
5
|
-
def star(opts = {})
|
|
6
|
-
DSL::Star.new(self, __callee__).run(opts)
|
|
7
|
-
end
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
module DSL
|
|
11
|
-
class Star
|
|
12
|
-
include WarnUnexpectedParams
|
|
13
|
-
attr_reader :dsl_method, :deck
|
|
14
|
-
|
|
15
|
-
def initialize(deck, dsl_method)
|
|
16
|
-
@deck = deck
|
|
17
|
-
@dsl_method = dsl_method
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def self.accepted_params
|
|
21
|
-
%i(n x y
|
|
22
|
-
inner_radius outer_radius angle
|
|
23
|
-
fill_color stroke_color stroke_width stroke_strategy join dash cap
|
|
24
|
-
range layout)
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def run(opts)
|
|
28
|
-
warn_if_unexpected opts
|
|
29
|
-
range = Args.extract_range opts, deck
|
|
30
|
-
draw = Args.extract_draw opts, deck
|
|
31
|
-
coords = Args.extract_coords opts, deck
|
|
32
|
-
trans = Args.extract_transform opts, deck
|
|
33
|
-
range.each { |i| deck.cards[i].star(coords[i], trans[i], draw[i]) }
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
1
|
+
require_relative '../errors_warnings/warn_unexpected_params'
|
|
2
|
+
|
|
3
|
+
module Squib
|
|
4
|
+
class Deck
|
|
5
|
+
def star(opts = {})
|
|
6
|
+
DSL::Star.new(self, __callee__).run(opts)
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
module DSL
|
|
11
|
+
class Star
|
|
12
|
+
include WarnUnexpectedParams
|
|
13
|
+
attr_reader :dsl_method, :deck
|
|
14
|
+
|
|
15
|
+
def initialize(deck, dsl_method)
|
|
16
|
+
@deck = deck
|
|
17
|
+
@dsl_method = dsl_method
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def self.accepted_params
|
|
21
|
+
%i(n x y
|
|
22
|
+
inner_radius outer_radius angle
|
|
23
|
+
fill_color stroke_color stroke_width stroke_strategy join dash cap
|
|
24
|
+
range layout)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def run(opts)
|
|
28
|
+
warn_if_unexpected opts
|
|
29
|
+
range = Args.extract_range opts, deck
|
|
30
|
+
draw = Args.extract_draw opts, deck
|
|
31
|
+
coords = Args.extract_coords opts, deck
|
|
32
|
+
trans = Args.extract_transform opts, deck
|
|
33
|
+
range.each { |i| deck.cards[i].star(coords[i], trans[i], draw[i]) }
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
data/lib/squib/dsl/svg.rb
CHANGED
|
@@ -1,63 +1,63 @@
|
|
|
1
|
-
require_relative '../errors_warnings/warn_unexpected_params'
|
|
2
|
-
require_relative '../args/card_range'
|
|
3
|
-
require_relative '../args/paint'
|
|
4
|
-
require_relative '../args/scale_box'
|
|
5
|
-
require_relative '../args/transform'
|
|
6
|
-
require_relative '../args/input_file'
|
|
7
|
-
require_relative '../args/svg_special'
|
|
8
|
-
|
|
9
|
-
module Squib
|
|
10
|
-
class Deck
|
|
11
|
-
def svg(opts = {})
|
|
12
|
-
DSL::SVG.new(self, __callee__).run(opts)
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
module DSL
|
|
17
|
-
class SVG
|
|
18
|
-
include WarnUnexpectedParams
|
|
19
|
-
attr_reader :dsl_method, :deck
|
|
20
|
-
|
|
21
|
-
def initialize(deck, dsl_method)
|
|
22
|
-
@deck = deck
|
|
23
|
-
@dsl_method = dsl_method
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def self.accepted_params
|
|
27
|
-
%i(
|
|
28
|
-
file
|
|
29
|
-
x y width height
|
|
30
|
-
blend mask
|
|
31
|
-
crop_x crop_y crop_width crop_height
|
|
32
|
-
crop_corner_radius crop_corner_x_radius crop_corner_y_radius
|
|
33
|
-
flip_horizontal flip_vertical angle
|
|
34
|
-
id force_id data
|
|
35
|
-
range layout
|
|
36
|
-
placeholder
|
|
37
|
-
)
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def run(opts)
|
|
41
|
-
warn_if_unexpected opts
|
|
42
|
-
Dir.chdir(deck.img_dir) do
|
|
43
|
-
range = Args.extract_range opts, deck
|
|
44
|
-
paint = Args.extract_paint opts, deck
|
|
45
|
-
box = Args.extract_scale_box opts, deck
|
|
46
|
-
trans = Args.extract_transform opts, deck
|
|
47
|
-
ifile = Args.extract_input_file opts, deck
|
|
48
|
-
svg_args = Args.extract_svg_special opts, deck
|
|
49
|
-
deck.progress_bar.start('Loading PNG(s)', range.size) do |bar|
|
|
50
|
-
range.each do |i|
|
|
51
|
-
if svg_args.render?(i)
|
|
52
|
-
deck.cards[i].svg(ifile[i].file, svg_args[i], box[i], paint[i],
|
|
53
|
-
trans[i])
|
|
54
|
-
end
|
|
55
|
-
bar.increment
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
end
|
|
1
|
+
require_relative '../errors_warnings/warn_unexpected_params'
|
|
2
|
+
require_relative '../args/card_range'
|
|
3
|
+
require_relative '../args/paint'
|
|
4
|
+
require_relative '../args/scale_box'
|
|
5
|
+
require_relative '../args/transform'
|
|
6
|
+
require_relative '../args/input_file'
|
|
7
|
+
require_relative '../args/svg_special'
|
|
8
|
+
|
|
9
|
+
module Squib
|
|
10
|
+
class Deck
|
|
11
|
+
def svg(opts = {})
|
|
12
|
+
DSL::SVG.new(self, __callee__).run(opts)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
module DSL
|
|
17
|
+
class SVG
|
|
18
|
+
include WarnUnexpectedParams
|
|
19
|
+
attr_reader :dsl_method, :deck
|
|
20
|
+
|
|
21
|
+
def initialize(deck, dsl_method)
|
|
22
|
+
@deck = deck
|
|
23
|
+
@dsl_method = dsl_method
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def self.accepted_params
|
|
27
|
+
%i(
|
|
28
|
+
file
|
|
29
|
+
x y width height
|
|
30
|
+
blend mask
|
|
31
|
+
crop_x crop_y crop_width crop_height
|
|
32
|
+
crop_corner_radius crop_corner_x_radius crop_corner_y_radius
|
|
33
|
+
flip_horizontal flip_vertical angle
|
|
34
|
+
id force_id data
|
|
35
|
+
range layout
|
|
36
|
+
placeholder
|
|
37
|
+
)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def run(opts)
|
|
41
|
+
warn_if_unexpected opts
|
|
42
|
+
Dir.chdir(deck.img_dir) do
|
|
43
|
+
range = Args.extract_range opts, deck
|
|
44
|
+
paint = Args.extract_paint opts, deck
|
|
45
|
+
box = Args.extract_scale_box opts, deck
|
|
46
|
+
trans = Args.extract_transform opts, deck
|
|
47
|
+
ifile = Args.extract_input_file opts, deck
|
|
48
|
+
svg_args = Args.extract_svg_special opts, deck
|
|
49
|
+
deck.progress_bar.start('Loading PNG(s)', range.size) do |bar|
|
|
50
|
+
range.each do |i|
|
|
51
|
+
if svg_args.render?(i)
|
|
52
|
+
deck.cards[i].svg(ifile[i].file, svg_args[i], box[i], paint[i],
|
|
53
|
+
trans[i])
|
|
54
|
+
end
|
|
55
|
+
bar.increment
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
data/lib/squib/dsl/text.rb
CHANGED
|
@@ -1,54 +1,54 @@
|
|
|
1
|
-
require_relative '../args/box'
|
|
2
|
-
require_relative '../args/card_range'
|
|
3
|
-
require_relative '../args/draw'
|
|
4
|
-
require_relative '../args/paragraph'
|
|
5
|
-
require_relative '../args/transform'
|
|
6
|
-
require_relative '../dsl/text_embed'
|
|
7
|
-
require_relative '../errors_warnings/warn_unexpected_params'
|
|
8
|
-
|
|
9
|
-
module Squib
|
|
10
|
-
class Deck
|
|
11
|
-
def text(opts = {})
|
|
12
|
-
embed = TextEmbed.new self, __callee__
|
|
13
|
-
yield(embed) if block_given? # store the opts for later use
|
|
14
|
-
DSL::Text.new(self, __callee__, embed).run(opts)
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
module DSL
|
|
19
|
-
class Text
|
|
20
|
-
include WarnUnexpectedParams
|
|
21
|
-
attr_reader :dsl_method, :deck, :embed
|
|
22
|
-
|
|
23
|
-
def initialize(deck, dsl_method, embed)
|
|
24
|
-
@deck = deck
|
|
25
|
-
@dsl_method = dsl_method
|
|
26
|
-
@embed = embed
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def self.accepted_params
|
|
30
|
-
%i(
|
|
31
|
-
str font font_size x y markup width height
|
|
32
|
-
wrap spacing align justify valign ellipsize angle dash cap join
|
|
33
|
-
hint color fill_color
|
|
34
|
-
stroke_color stroke_width stroke_width stroke_color stroke_strategy
|
|
35
|
-
range layout
|
|
36
|
-
)
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def run(opts)
|
|
40
|
-
warn_if_unexpected opts
|
|
41
|
-
range = Args.extract_range opts, deck
|
|
42
|
-
para = Args.extract_para opts, deck
|
|
43
|
-
box = Args.extract_box opts, deck, { width: :auto, height: :auto }
|
|
44
|
-
trans = Args.extract_transform opts, deck
|
|
45
|
-
draw = Args.extract_draw opts, deck, { stroke_width: 0.0 }
|
|
46
|
-
extents = Array.new(deck.size)
|
|
47
|
-
range.each do |i|
|
|
48
|
-
extents[i] = deck.cards[i].text(embed, para[i], box[i], trans[i], draw[i], deck.dpi)
|
|
49
|
-
end
|
|
50
|
-
return extents
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
end
|
|
1
|
+
require_relative '../args/box'
|
|
2
|
+
require_relative '../args/card_range'
|
|
3
|
+
require_relative '../args/draw'
|
|
4
|
+
require_relative '../args/paragraph'
|
|
5
|
+
require_relative '../args/transform'
|
|
6
|
+
require_relative '../dsl/text_embed'
|
|
7
|
+
require_relative '../errors_warnings/warn_unexpected_params'
|
|
8
|
+
|
|
9
|
+
module Squib
|
|
10
|
+
class Deck
|
|
11
|
+
def text(opts = {})
|
|
12
|
+
embed = TextEmbed.new self, __callee__
|
|
13
|
+
yield(embed) if block_given? # store the opts for later use
|
|
14
|
+
DSL::Text.new(self, __callee__, embed).run(opts)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
module DSL
|
|
19
|
+
class Text
|
|
20
|
+
include WarnUnexpectedParams
|
|
21
|
+
attr_reader :dsl_method, :deck, :embed
|
|
22
|
+
|
|
23
|
+
def initialize(deck, dsl_method, embed)
|
|
24
|
+
@deck = deck
|
|
25
|
+
@dsl_method = dsl_method
|
|
26
|
+
@embed = embed
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def self.accepted_params
|
|
30
|
+
%i(
|
|
31
|
+
str font font_size x y markup width height
|
|
32
|
+
wrap spacing align justify valign ellipsize angle dash cap join
|
|
33
|
+
hint color fill_color
|
|
34
|
+
stroke_color stroke_width stroke_width stroke_color stroke_strategy
|
|
35
|
+
range layout
|
|
36
|
+
)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def run(opts)
|
|
40
|
+
warn_if_unexpected opts
|
|
41
|
+
range = Args.extract_range opts, deck
|
|
42
|
+
para = Args.extract_para opts, deck
|
|
43
|
+
box = Args.extract_box opts, deck, { width: :auto, height: :auto }
|
|
44
|
+
trans = Args.extract_transform opts, deck
|
|
45
|
+
draw = Args.extract_draw opts, deck, { stroke_width: 0.0 }
|
|
46
|
+
extents = Array.new(deck.size)
|
|
47
|
+
range.each do |i|
|
|
48
|
+
extents[i] = deck.cards[i].text(embed, para[i], box[i], trans[i], draw[i], deck.dpi)
|
|
49
|
+
end
|
|
50
|
+
return extents
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
data/lib/squib/dsl/text_embed.rb
CHANGED
|
@@ -1,79 +1,79 @@
|
|
|
1
|
-
require_relative '../args/box'
|
|
2
|
-
require_relative '../args/card_range'
|
|
3
|
-
require_relative '../args/embed_adjust'
|
|
4
|
-
require_relative '../args/embed_key'
|
|
5
|
-
require_relative '../args/input_file'
|
|
6
|
-
require_relative '../args/paint'
|
|
7
|
-
require_relative '../args/transform'
|
|
8
|
-
require_relative '../errors_warnings/warn_unexpected_params'
|
|
9
|
-
|
|
10
|
-
module Squib
|
|
11
|
-
class TextEmbed
|
|
12
|
-
include WarnUnexpectedParams
|
|
13
|
-
attr_reader :rules, :deck, :dsl_method
|
|
14
|
-
|
|
15
|
-
def initialize(deck, dsl_method)
|
|
16
|
-
@deck = deck
|
|
17
|
-
@rules = {} # store an array of options for later usage
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def self.accepted_params
|
|
21
|
-
%i(
|
|
22
|
-
key file id force_id layout width height dx dy
|
|
23
|
-
id force_id data
|
|
24
|
-
flip_horizontal flip_vertical
|
|
25
|
-
alpha angle blend mask
|
|
26
|
-
placeholder
|
|
27
|
-
)
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def svg(opts = {})
|
|
31
|
-
warn_if_unexpected opts
|
|
32
|
-
key = Args::EmbedKey.new.validate_key(opts[:key])
|
|
33
|
-
range = Args.extract_range opts, deck
|
|
34
|
-
paint = Args.extract_paint opts, deck
|
|
35
|
-
box = Args.extract_box opts, deck, { width: :native, height: :native }
|
|
36
|
-
adjust = Args::EmbedAdjust.new.load!(opts, expand_by: deck.size, layout: deck.layout, dpi: deck.dpi)
|
|
37
|
-
trans = Args.extract_transform opts, deck
|
|
38
|
-
ifile = Args.extract_input_file opts, deck
|
|
39
|
-
svg_args = Args.extract_svg_special opts, deck
|
|
40
|
-
rule = { type: :svg, file: ifile, box: box, paint: paint, trans: trans,
|
|
41
|
-
adjust: adjust, svg_args: svg_args }
|
|
42
|
-
rule[:draw] = Proc.new do |card, x, y, scale|
|
|
43
|
-
i = card.index
|
|
44
|
-
b = box[i]
|
|
45
|
-
b.x, b.y = x, y
|
|
46
|
-
b.width = b.width * scale if b.width.is_a? Numeric
|
|
47
|
-
b.height = b.height * scale if b.height.is_a? Numeric
|
|
48
|
-
Dir.chdir(deck.img_dir) do
|
|
49
|
-
card.svg(ifile[i].file, svg_args[i], b, paint[i], trans[i])
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
@rules[key] = rule
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
def png(opts = {})
|
|
56
|
-
warn_if_unexpected opts
|
|
57
|
-
key = Args::EmbedKey.new.validate_key(opts[:key])
|
|
58
|
-
range = Args.extract_range opts, deck
|
|
59
|
-
paint = Args.extract_paint opts, deck
|
|
60
|
-
box = Args.extract_box opts, deck, { width: :native, height: :native }
|
|
61
|
-
adjust = Args::EmbedAdjust.new.load!(opts, expand_by: deck.size, layout: deck.layout, dpi: deck.dpi)
|
|
62
|
-
trans = Args.extract_transform opts, deck
|
|
63
|
-
ifile = Args.extract_input_file opts, deck
|
|
64
|
-
rule = { type: :png, file: ifile, box: box, paint: paint, trans: trans, adjust: adjust }
|
|
65
|
-
rule[:draw] = Proc.new do |card, x, y, scale|
|
|
66
|
-
i = card.index
|
|
67
|
-
b = box[i]
|
|
68
|
-
b.x, b.y = x, y
|
|
69
|
-
b.width = b.width * scale if b.width.is_a? Numeric
|
|
70
|
-
b.height = b.height * scale if b.height.is_a? Numeric
|
|
71
|
-
Dir.chdir(deck.img_dir) do
|
|
72
|
-
card.png(ifile[i].file, b, paint[i], trans[i])
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
@rules[key] = rule
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
end
|
|
79
|
-
end
|
|
1
|
+
require_relative '../args/box'
|
|
2
|
+
require_relative '../args/card_range'
|
|
3
|
+
require_relative '../args/embed_adjust'
|
|
4
|
+
require_relative '../args/embed_key'
|
|
5
|
+
require_relative '../args/input_file'
|
|
6
|
+
require_relative '../args/paint'
|
|
7
|
+
require_relative '../args/transform'
|
|
8
|
+
require_relative '../errors_warnings/warn_unexpected_params'
|
|
9
|
+
|
|
10
|
+
module Squib
|
|
11
|
+
class TextEmbed
|
|
12
|
+
include WarnUnexpectedParams
|
|
13
|
+
attr_reader :rules, :deck, :dsl_method
|
|
14
|
+
|
|
15
|
+
def initialize(deck, dsl_method)
|
|
16
|
+
@deck = deck
|
|
17
|
+
@rules = {} # store an array of options for later usage
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def self.accepted_params
|
|
21
|
+
%i(
|
|
22
|
+
key file id force_id layout width height dx dy
|
|
23
|
+
id force_id data
|
|
24
|
+
flip_horizontal flip_vertical
|
|
25
|
+
alpha angle blend mask
|
|
26
|
+
placeholder
|
|
27
|
+
)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def svg(opts = {})
|
|
31
|
+
warn_if_unexpected opts
|
|
32
|
+
key = Args::EmbedKey.new.validate_key(opts[:key])
|
|
33
|
+
range = Args.extract_range opts, deck
|
|
34
|
+
paint = Args.extract_paint opts, deck
|
|
35
|
+
box = Args.extract_box opts, deck, { width: :native, height: :native }
|
|
36
|
+
adjust = Args::EmbedAdjust.new.load!(opts, expand_by: deck.size, layout: deck.layout, dpi: deck.dpi)
|
|
37
|
+
trans = Args.extract_transform opts, deck
|
|
38
|
+
ifile = Args.extract_input_file opts, deck
|
|
39
|
+
svg_args = Args.extract_svg_special opts, deck
|
|
40
|
+
rule = { type: :svg, file: ifile, box: box, paint: paint, trans: trans,
|
|
41
|
+
adjust: adjust, svg_args: svg_args }
|
|
42
|
+
rule[:draw] = Proc.new do |card, x, y, scale|
|
|
43
|
+
i = card.index
|
|
44
|
+
b = box[i]
|
|
45
|
+
b.x, b.y = x, y
|
|
46
|
+
b.width = b.width * scale if b.width.is_a? Numeric
|
|
47
|
+
b.height = b.height * scale if b.height.is_a? Numeric
|
|
48
|
+
Dir.chdir(deck.img_dir) do
|
|
49
|
+
card.svg(ifile[i].file, svg_args[i], b, paint[i], trans[i])
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
@rules[key] = rule
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def png(opts = {})
|
|
56
|
+
warn_if_unexpected opts
|
|
57
|
+
key = Args::EmbedKey.new.validate_key(opts[:key])
|
|
58
|
+
range = Args.extract_range opts, deck
|
|
59
|
+
paint = Args.extract_paint opts, deck
|
|
60
|
+
box = Args.extract_box opts, deck, { width: :native, height: :native }
|
|
61
|
+
adjust = Args::EmbedAdjust.new.load!(opts, expand_by: deck.size, layout: deck.layout, dpi: deck.dpi)
|
|
62
|
+
trans = Args.extract_transform opts, deck
|
|
63
|
+
ifile = Args.extract_input_file opts, deck
|
|
64
|
+
rule = { type: :png, file: ifile, box: box, paint: paint, trans: trans, adjust: adjust }
|
|
65
|
+
rule[:draw] = Proc.new do |card, x, y, scale|
|
|
66
|
+
i = card.index
|
|
67
|
+
b = box[i]
|
|
68
|
+
b.x, b.y = x, y
|
|
69
|
+
b.width = b.width * scale if b.width.is_a? Numeric
|
|
70
|
+
b.height = b.height * scale if b.height.is_a? Numeric
|
|
71
|
+
Dir.chdir(deck.img_dir) do
|
|
72
|
+
card.png(ifile[i].file, b, paint[i], trans[i])
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
@rules[key] = rule
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
end
|
|
79
|
+
end
|
data/lib/squib/dsl/triangle.rb
CHANGED
|
@@ -1,35 +1,35 @@
|
|
|
1
|
-
require_relative '../errors_warnings/warn_unexpected_params'
|
|
2
|
-
|
|
3
|
-
module Squib
|
|
4
|
-
class Deck
|
|
5
|
-
def triangle(opts = {})
|
|
6
|
-
DSL::Triangle.new(self, __callee__).run(opts)
|
|
7
|
-
end
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
module DSL
|
|
11
|
-
class Triangle
|
|
12
|
-
include WarnUnexpectedParams
|
|
13
|
-
attr_reader :dsl_method, :deck
|
|
14
|
-
|
|
15
|
-
def initialize(deck, dsl_method)
|
|
16
|
-
@deck = deck
|
|
17
|
-
@dsl_method = dsl_method
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def self.accepted_params
|
|
21
|
-
%i(x1 y1 x2 y2 x3 y3
|
|
22
|
-
fill_color stroke_color stroke_width stroke_strategy join dash cap
|
|
23
|
-
range layout)
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def run(opts)
|
|
27
|
-
warn_if_unexpected opts
|
|
28
|
-
range = Args.extract_range opts, deck
|
|
29
|
-
draw = Args.extract_draw opts, deck
|
|
30
|
-
coords = Args.extract_coords opts, deck
|
|
31
|
-
range.each { |i| deck.cards[i].triangle(coords[i], draw[i]) }
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
1
|
+
require_relative '../errors_warnings/warn_unexpected_params'
|
|
2
|
+
|
|
3
|
+
module Squib
|
|
4
|
+
class Deck
|
|
5
|
+
def triangle(opts = {})
|
|
6
|
+
DSL::Triangle.new(self, __callee__).run(opts)
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
module DSL
|
|
11
|
+
class Triangle
|
|
12
|
+
include WarnUnexpectedParams
|
|
13
|
+
attr_reader :dsl_method, :deck
|
|
14
|
+
|
|
15
|
+
def initialize(deck, dsl_method)
|
|
16
|
+
@deck = deck
|
|
17
|
+
@dsl_method = dsl_method
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def self.accepted_params
|
|
21
|
+
%i(x1 y1 x2 y2 x3 y3
|
|
22
|
+
fill_color stroke_color stroke_width stroke_strategy join dash cap
|
|
23
|
+
range layout)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def run(opts)
|
|
27
|
+
warn_if_unexpected opts
|
|
28
|
+
range = Args.extract_range opts, deck
|
|
29
|
+
draw = Args.extract_draw opts, deck
|
|
30
|
+
coords = Args.extract_coords opts, deck
|
|
31
|
+
range.each { |i| deck.cards[i].triangle(coords[i], draw[i]) }
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
data/lib/squib/dsl/units.rb
CHANGED
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
require_relative '../constants'
|
|
2
|
-
|
|
3
|
-
module Squib
|
|
4
|
-
class Deck
|
|
5
|
-
|
|
6
|
-
# DSL method. See http://squib.readthedocs.io
|
|
7
|
-
def inches(n)
|
|
8
|
-
@dpi * n.to_f
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
# DSL method. See http://squib.readthedocs.io
|
|
12
|
-
def points(n)
|
|
13
|
-
@dpi / Squib::POINTS_PER_IN * n.to_f
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
# DSL method. See http://squib.readthedocs.io
|
|
17
|
-
def cm(n)
|
|
18
|
-
@dpi * Squib::INCHES_IN_CM * n.to_f
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
# DSL method. See http://squib.readthedocs.io
|
|
22
|
-
def mm(n)
|
|
23
|
-
@dpi * Squib::INCHES_IN_CM * n.to_f / 10.0
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
# DSL method. See http://squib.readthedocs.io
|
|
27
|
-
def deg(n)
|
|
28
|
-
n.to_f * (Math::PI / 180.0)
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
# DSL method. See http://squib.readthedocs.io
|
|
32
|
-
def cells(n)
|
|
33
|
-
n.to_f * @cell_px
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
end
|
|
37
|
-
end
|
|
1
|
+
require_relative '../constants'
|
|
2
|
+
|
|
3
|
+
module Squib
|
|
4
|
+
class Deck
|
|
5
|
+
|
|
6
|
+
# DSL method. See http://squib.readthedocs.io
|
|
7
|
+
def inches(n)
|
|
8
|
+
@dpi * n.to_f
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# DSL method. See http://squib.readthedocs.io
|
|
12
|
+
def points(n)
|
|
13
|
+
@dpi / Squib::POINTS_PER_IN * n.to_f
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# DSL method. See http://squib.readthedocs.io
|
|
17
|
+
def cm(n)
|
|
18
|
+
@dpi * Squib::INCHES_IN_CM * n.to_f
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# DSL method. See http://squib.readthedocs.io
|
|
22
|
+
def mm(n)
|
|
23
|
+
@dpi * Squib::INCHES_IN_CM * n.to_f / 10.0
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# DSL method. See http://squib.readthedocs.io
|
|
27
|
+
def deg(n)
|
|
28
|
+
n.to_f * (Math::PI / 180.0)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# DSL method. See http://squib.readthedocs.io
|
|
32
|
+
def cells(n)
|
|
33
|
+
n.to_f * @cell_px
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
end
|
|
37
|
+
end
|