squib 0.8.0 → 0.9.0
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/.gitmodules +14 -0
- data/.travis.yml +4 -0
- data/CHANGELOG.md +201 -175
- data/Gemfile +2 -4
- data/README.md +650 -645
- data/RELEASE TODO.md +18 -18
- data/Rakefile +106 -99
- data/appveyor.yml +29 -0
- data/lib/squib.rb +32 -32
- data/lib/squib/api/background.rb +20 -20
- data/lib/squib/api/data.rb +131 -131
- data/lib/squib/api/image.rb +108 -90
- data/lib/squib/api/save.rb +151 -149
- data/lib/squib/api/settings.rb +35 -35
- data/lib/squib/api/shapes.rb +255 -230
- data/lib/squib/api/text.rb +65 -65
- data/lib/squib/api/text_embed.rb +96 -96
- data/lib/squib/args/arg_loader.rb +138 -138
- data/lib/squib/args/box.rb +54 -54
- data/lib/squib/args/card_range.rb +32 -32
- data/lib/squib/args/color_validator.rb +11 -11
- data/lib/squib/args/coords.rb +32 -32
- data/lib/squib/args/dir_validator.rb +16 -16
- data/lib/squib/args/draw.rb +92 -92
- data/lib/squib/args/embed_adjust.rb +25 -25
- data/lib/squib/args/embed_key.rb +17 -17
- data/lib/squib/args/hand_special.rb +37 -37
- data/lib/squib/args/import.rb +39 -39
- data/lib/squib/args/input_file.rb +37 -37
- data/lib/squib/args/paint.rb +43 -43
- data/lib/squib/args/paragraph.rb +116 -115
- data/lib/squib/args/save_batch.rb +63 -60
- data/lib/squib/args/scale_box.rb +53 -53
- data/lib/squib/args/sheet.rb +72 -72
- data/lib/squib/args/showcase_special.rb +38 -38
- data/lib/squib/args/svg_special.rb +37 -37
- data/lib/squib/args/transform.rb +60 -24
- data/lib/squib/args/typographer.rb +117 -117
- data/lib/squib/card.rb +66 -67
- data/lib/squib/conf.rb +131 -117
- data/lib/squib/constants.rb +12 -178
- data/lib/squib/deck.rb +113 -113
- data/lib/squib/graphics/cairo_context_wrapper.rb +113 -99
- data/lib/squib/graphics/gradient_regex.rb +46 -46
- data/lib/squib/graphics/hand.rb +42 -42
- data/lib/squib/graphics/image.rb +103 -76
- data/lib/squib/graphics/save_doc.rb +103 -103
- data/lib/squib/graphics/save_images.rb +39 -33
- data/lib/squib/graphics/shapes.rb +135 -119
- data/lib/squib/graphics/showcase.rb +85 -85
- data/lib/squib/graphics/text.rb +176 -176
- data/lib/squib/layout_parser.rb +91 -91
- data/lib/squib/layouts/economy.yml +85 -85
- data/lib/squib/layouts/fantasy.yml +101 -101
- data/lib/squib/layouts/hand.yml +62 -62
- data/lib/squib/layouts/playing-card.yml +35 -35
- data/lib/squib/layouts/tuck_box.yml +45 -45
- data/lib/squib/project_template/IDEAS.md +22 -0
- data/lib/squib/project_template/PLAYTESTING.md +26 -0
- data/lib/squib/project_template/RULES.md +21 -0
- data/lib/squib/project_template/config.yml +49 -45
- data/lib/squib/sample_helpers.rb +34 -0
- data/lib/squib/version.rb +10 -10
- data/samples/autoscale_font/_autoscale_font.rb +29 -0
- data/samples/color_shortcuts.rb +6 -6
- data/samples/csv_import.rb +26 -26
- data/samples/custom-config.yml +5 -5
- data/samples/custom_config.rb +18 -18
- data/samples/draw_shapes.rb +48 -45
- data/samples/embed_text.rb +88 -88
- data/samples/excel.rb +55 -55
- data/samples/hand.rb +24 -24
- data/samples/images/_images.rb +104 -0
- data/samples/intro/01_hello.rb +9 -0
- data/samples/intro/02_options.rb +15 -0
- data/samples/intro/03_layout.rb +12 -0
- data/samples/intro/04_arrays.rb +16 -0
- data/samples/intro/05_excel.rb +15 -0
- data/samples/layouts.rb +62 -62
- data/samples/layouts_builtin.rb +51 -51
- data/samples/load_images.rb +99 -78
- data/samples/load_images_config.yml +1 -0
- data/samples/quantity_explosion.csv +2 -2
- data/samples/ranges.rb +64 -64
- data/samples/sample.csv +2 -2
- data/samples/saves.rb +9 -1
- data/samples/sprites.png +0 -0
- data/samples/text/_text.rb +46 -0
- data/samples/text_options.rb +102 -102
- data/spec/api/api_data_spec.rb +117 -117
- data/spec/api/api_settings_spec.rb +37 -37
- data/spec/args/box_spec.rb +127 -127
- data/spec/args/draw_spec.rb +101 -95
- data/spec/args/embed_key_spec.rb +13 -13
- data/spec/args/input_file_spec.rb +21 -21
- data/spec/args/paint_spec.rb +21 -21
- data/spec/args/paragraph_spec.rb +152 -152
- data/spec/args/range_spec.rb +40 -40
- data/spec/args/save_batch_spec.rb +51 -51
- data/spec/args/scale_box_spec.rb +71 -71
- data/spec/args/sheet_spec.rb +58 -58
- data/spec/args/showcase_special_spec.rb +15 -15
- data/spec/args/transform_spec.rb +25 -0
- data/spec/card_spec.rb +11 -0
- data/spec/conf_spec.rb +13 -3
- data/spec/data/conf/unrecognized.yml +4 -0
- data/spec/data/csv/qty.csv +2 -2
- data/spec/data/csv/qty_named.csv +2 -2
- data/spec/data/csv/with_spaces.csv +2 -2
- data/spec/data/samples/autoscale_font.rb.txt +84 -84
- data/spec/data/samples/basic.rb.txt +227 -209
- data/spec/data/samples/config_text_markup.rb.txt +72 -72
- data/spec/data/samples/csv_import.rb.txt +213 -213
- data/spec/data/samples/custom_config.rb.txt +57 -48
- data/spec/data/samples/draw_shapes.rb.txt +555 -3
- data/spec/data/samples/embed_text.rb.txt +283 -283
- data/spec/data/samples/excel.rb.txt +661 -661
- data/spec/data/samples/gradients.rb.txt +77 -79
- data/spec/data/samples/hand.rb.txt +538 -538
- data/spec/data/samples/hello_world.rb.txt +36 -36
- data/spec/data/samples/load_images.rb.txt +170 -0
- data/spec/data/samples/portrait-landscape.rb.txt +51 -49
- data/spec/data/samples/ranges.rb.txt +472 -460
- data/spec/data/samples/saves.rb.txt +810 -801
- data/spec/data/samples/showcase.rb.txt +5926 -5910
- data/spec/data/samples/text_options.rb.txt +1125 -1125
- data/spec/data/samples/tgc_proofs.rb.txt +95 -81
- data/spec/graphics/cairo_context_wrapper_spec.rb +104 -84
- data/spec/graphics/graphics_save_doc_spec.rb +67 -67
- data/spec/samples/diff-with-css.example.html +39 -0
- data/spec/samples/expected/load_images_00.png +0 -0
- data/spec/samples/expected/shape_00.png +0 -0
- data/spec/samples/run_samples_spec.rb +17 -0
- data/spec/samples/samples_regression_spec.rb +72 -82
- data/spec/spec_helper.rb +9 -1
- data/squib.gemspec +49 -48
- data/squib.sublime-project +42 -42
- metadata +94 -48
- data/spec/graphics/graphics_images_spec.rb +0 -94
@@ -1,60 +1,63 @@
|
|
1
|
-
require 'squib/args/arg_loader'
|
2
|
-
require 'squib/args/dir_validator'
|
3
|
-
|
4
|
-
module Squib
|
5
|
-
# @api private
|
6
|
-
module Args
|
7
|
-
class SaveBatch
|
8
|
-
include ArgLoader
|
9
|
-
include DirValidator
|
10
|
-
|
11
|
-
def initialize
|
12
|
-
end
|
13
|
-
|
14
|
-
def self.parameters
|
15
|
-
{
|
16
|
-
|
17
|
-
count_format: '%02d',
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
when :
|
41
|
-
angle[i] =
|
42
|
-
return true
|
43
|
-
when
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
1
|
+
require 'squib/args/arg_loader'
|
2
|
+
require 'squib/args/dir_validator'
|
3
|
+
|
4
|
+
module Squib
|
5
|
+
# @api private
|
6
|
+
module Args
|
7
|
+
class SaveBatch
|
8
|
+
include ArgLoader
|
9
|
+
include DirValidator
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.parameters
|
15
|
+
{
|
16
|
+
angle: 0,
|
17
|
+
count_format: '%02d',
|
18
|
+
dir: '_output',
|
19
|
+
prefix: 'card_',
|
20
|
+
rotate: false,
|
21
|
+
trim_radius: 0,
|
22
|
+
trim: 0,
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.expanding_parameters
|
27
|
+
self.parameters.keys # all of them
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.params_with_units
|
31
|
+
[:trim, :trim_radius]
|
32
|
+
end
|
33
|
+
|
34
|
+
def validate_dir(arg, _i)
|
35
|
+
ensure_dir_created(arg)
|
36
|
+
end
|
37
|
+
|
38
|
+
def validate_rotate(arg, i)
|
39
|
+
case arg
|
40
|
+
when true, :clockwise
|
41
|
+
angle[i] = 0.5 * Math::PI
|
42
|
+
return true
|
43
|
+
when :counterclockwise
|
44
|
+
angle[i] = 1.5 * Math::PI
|
45
|
+
return true
|
46
|
+
when false
|
47
|
+
false
|
48
|
+
else
|
49
|
+
raise 'invalid option to rotate: only [true, false, :clockwise, :counterclockwise]'
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def full_filename(i)
|
54
|
+
"#{dir[i]}/#{prefix[i]}#{count_format[i] % i}.png"
|
55
|
+
end
|
56
|
+
|
57
|
+
def summary
|
58
|
+
"#{dir[0]}/#{prefix[0]}_*"
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
data/lib/squib/args/scale_box.rb
CHANGED
@@ -1,53 +1,53 @@
|
|
1
|
-
require 'squib/args/arg_loader'
|
2
|
-
|
3
|
-
module Squib
|
4
|
-
# @api private
|
5
|
-
module Args
|
6
|
-
|
7
|
-
class ScaleBox
|
8
|
-
include ArgLoader
|
9
|
-
|
10
|
-
def initialize(deck)
|
11
|
-
@deck = deck
|
12
|
-
end
|
13
|
-
|
14
|
-
def self.parameters
|
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_width(arg, i)
|
29
|
-
return @deck.width if arg.to_s == 'deck'
|
30
|
-
return :native if arg.to_s == 'native'
|
31
|
-
return arg if arg.respond_to? :to_f
|
32
|
-
if arg.to_s == 'scale'
|
33
|
-
raise 'if width is :scale, height must be a number' unless height[i].respond_to? :to_f
|
34
|
-
return arg
|
35
|
-
end
|
36
|
-
raise 'width must be a number, :scale, :native, or :deck'
|
37
|
-
end
|
38
|
-
|
39
|
-
def validate_height(arg, i)
|
40
|
-
return @deck.height if arg.to_s == 'deck'
|
41
|
-
return :native if arg.to_s == 'native'
|
42
|
-
return arg if arg.respond_to? :to_f
|
43
|
-
if arg.to_s == 'scale'
|
44
|
-
raise 'if height is \'scale\', width must be a number' unless width[i].respond_to? :to_f
|
45
|
-
return arg
|
46
|
-
end
|
47
|
-
raise 'height must be a number, :scale, :native, or :deck'
|
48
|
-
end
|
49
|
-
|
50
|
-
end
|
51
|
-
|
52
|
-
end
|
53
|
-
end
|
1
|
+
require 'squib/args/arg_loader'
|
2
|
+
|
3
|
+
module Squib
|
4
|
+
# @api private
|
5
|
+
module Args
|
6
|
+
|
7
|
+
class ScaleBox
|
8
|
+
include ArgLoader
|
9
|
+
|
10
|
+
def initialize(deck)
|
11
|
+
@deck = deck
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.parameters
|
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_width(arg, i)
|
29
|
+
return @deck.width if arg.to_s == 'deck'
|
30
|
+
return :native if arg.to_s == 'native'
|
31
|
+
return arg if arg.respond_to? :to_f
|
32
|
+
if arg.to_s == 'scale'
|
33
|
+
raise 'if width is :scale, height must be a number' unless height[i].respond_to? :to_f
|
34
|
+
return arg
|
35
|
+
end
|
36
|
+
raise 'width must be a number, :scale, :native, or :deck'
|
37
|
+
end
|
38
|
+
|
39
|
+
def validate_height(arg, i)
|
40
|
+
return @deck.height if arg.to_s == 'deck'
|
41
|
+
return :native if arg.to_s == 'native'
|
42
|
+
return arg if arg.respond_to? :to_f
|
43
|
+
if arg.to_s == 'scale'
|
44
|
+
raise 'if height is \'scale\', width must be a number' unless width[i].respond_to? :to_f
|
45
|
+
return arg
|
46
|
+
end
|
47
|
+
raise 'height must be a number, :scale, :native, or :deck'
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
data/lib/squib/args/sheet.rb
CHANGED
@@ -1,72 +1,72 @@
|
|
1
|
-
require 'cairo'
|
2
|
-
require 'squib/args/arg_loader'
|
3
|
-
require 'squib/args/color_validator'
|
4
|
-
require 'squib/args/dir_validator'
|
5
|
-
|
6
|
-
module Squib
|
7
|
-
# @api private
|
8
|
-
module Args
|
9
|
-
|
10
|
-
class Sheet
|
11
|
-
include ArgLoader
|
12
|
-
include ColorValidator
|
13
|
-
include DirValidator
|
14
|
-
|
15
|
-
def initialize(custom_colors = {}, dsl_method_defaults = {}, deck_size = 1)
|
16
|
-
@custom_colors = custom_colors
|
17
|
-
@dsl_method_defaults = dsl_method_defaults
|
18
|
-
@deck_size = deck_size
|
19
|
-
end
|
20
|
-
|
21
|
-
def self.parameters
|
22
|
-
{
|
23
|
-
dir: '_output',
|
24
|
-
file: 'sheet.png',
|
25
|
-
fill_color: :white,
|
26
|
-
gap: 0,
|
27
|
-
height: 2550,
|
28
|
-
margin: 75,
|
29
|
-
rows: :infinite,
|
30
|
-
columns: 5,
|
31
|
-
trim_radius: 38,
|
32
|
-
trim: 0,
|
33
|
-
width: 3300,
|
34
|
-
}
|
35
|
-
end
|
36
|
-
|
37
|
-
def self.expanding_parameters
|
38
|
-
[] # none of them
|
39
|
-
end
|
40
|
-
|
41
|
-
def self.params_with_units
|
42
|
-
[ :gap, :height, :margin, :trim_radius, :trim, :width ]
|
43
|
-
end
|
44
|
-
|
45
|
-
def validate_fill_color(arg)
|
46
|
-
colorify(arg, @custom_colors)
|
47
|
-
end
|
48
|
-
|
49
|
-
def validate_dir(arg)
|
50
|
-
ensure_dir_created(arg)
|
51
|
-
end
|
52
|
-
|
53
|
-
def validate_columns(arg)
|
54
|
-
raise 'columns must be an integer' unless arg.respond_to? :to_i
|
55
|
-
arg.to_i
|
56
|
-
end
|
57
|
-
|
58
|
-
def validate_rows(arg)
|
59
|
-
raise 'columns must be an integer' unless columns.respond_to? :to_i
|
60
|
-
return 1 if @deck_size < columns
|
61
|
-
return arg if arg.respond_to? :to_i
|
62
|
-
(@deck_size.to_i / columns.to_i).ceil
|
63
|
-
end
|
64
|
-
|
65
|
-
def full_filename
|
66
|
-
"#{dir}/#{file}"
|
67
|
-
end
|
68
|
-
|
69
|
-
end
|
70
|
-
|
71
|
-
end
|
72
|
-
end
|
1
|
+
require 'cairo'
|
2
|
+
require 'squib/args/arg_loader'
|
3
|
+
require 'squib/args/color_validator'
|
4
|
+
require 'squib/args/dir_validator'
|
5
|
+
|
6
|
+
module Squib
|
7
|
+
# @api private
|
8
|
+
module Args
|
9
|
+
|
10
|
+
class Sheet
|
11
|
+
include ArgLoader
|
12
|
+
include ColorValidator
|
13
|
+
include DirValidator
|
14
|
+
|
15
|
+
def initialize(custom_colors = {}, dsl_method_defaults = {}, deck_size = 1)
|
16
|
+
@custom_colors = custom_colors
|
17
|
+
@dsl_method_defaults = dsl_method_defaults
|
18
|
+
@deck_size = deck_size
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.parameters
|
22
|
+
{
|
23
|
+
dir: '_output',
|
24
|
+
file: 'sheet.png',
|
25
|
+
fill_color: :white,
|
26
|
+
gap: 0,
|
27
|
+
height: 2550,
|
28
|
+
margin: 75,
|
29
|
+
rows: :infinite,
|
30
|
+
columns: 5,
|
31
|
+
trim_radius: 38,
|
32
|
+
trim: 0,
|
33
|
+
width: 3300,
|
34
|
+
}
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.expanding_parameters
|
38
|
+
[] # none of them
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.params_with_units
|
42
|
+
[ :gap, :height, :margin, :trim_radius, :trim, :width ]
|
43
|
+
end
|
44
|
+
|
45
|
+
def validate_fill_color(arg)
|
46
|
+
colorify(arg, @custom_colors)
|
47
|
+
end
|
48
|
+
|
49
|
+
def validate_dir(arg)
|
50
|
+
ensure_dir_created(arg)
|
51
|
+
end
|
52
|
+
|
53
|
+
def validate_columns(arg)
|
54
|
+
raise 'columns must be an integer' unless arg.respond_to? :to_i
|
55
|
+
arg.to_i
|
56
|
+
end
|
57
|
+
|
58
|
+
def validate_rows(arg)
|
59
|
+
raise 'columns must be an integer' unless columns.respond_to? :to_i
|
60
|
+
return 1 if @deck_size < columns
|
61
|
+
return arg if arg.respond_to? :to_i
|
62
|
+
(@deck_size.to_i / columns.to_i).ceil
|
63
|
+
end
|
64
|
+
|
65
|
+
def full_filename
|
66
|
+
"#{dir}/#{file}"
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
end
|
@@ -1,38 +1,38 @@
|
|
1
|
-
require 'cairo'
|
2
|
-
require 'squib/args/arg_loader'
|
3
|
-
require 'squib/args/dir_validator'
|
4
|
-
|
5
|
-
module Squib
|
6
|
-
# @api private
|
7
|
-
module Args
|
8
|
-
|
9
|
-
class ShowcaseSpecial
|
10
|
-
include ArgLoader
|
11
|
-
include DirValidator
|
12
|
-
|
13
|
-
def self.parameters
|
14
|
-
{ scale: 0.85,
|
15
|
-
offset: 1.1,
|
16
|
-
reflect_offset: 15,
|
17
|
-
reflect_percent: 0.25,
|
18
|
-
reflect_strength: 0.2,
|
19
|
-
face: :left,
|
20
|
-
}
|
21
|
-
end
|
22
|
-
|
23
|
-
def self.expanding_parameters
|
24
|
-
[] # none of them
|
25
|
-
end
|
26
|
-
|
27
|
-
def self.params_with_units
|
28
|
-
[ :reflect_offset ]
|
29
|
-
end
|
30
|
-
|
31
|
-
def face_right?
|
32
|
-
@face.to_s.strip.downcase == 'right'
|
33
|
-
end
|
34
|
-
|
35
|
-
end
|
36
|
-
|
37
|
-
end
|
38
|
-
end
|
1
|
+
require 'cairo'
|
2
|
+
require 'squib/args/arg_loader'
|
3
|
+
require 'squib/args/dir_validator'
|
4
|
+
|
5
|
+
module Squib
|
6
|
+
# @api private
|
7
|
+
module Args
|
8
|
+
|
9
|
+
class ShowcaseSpecial
|
10
|
+
include ArgLoader
|
11
|
+
include DirValidator
|
12
|
+
|
13
|
+
def self.parameters
|
14
|
+
{ scale: 0.85,
|
15
|
+
offset: 1.1,
|
16
|
+
reflect_offset: 15,
|
17
|
+
reflect_percent: 0.25,
|
18
|
+
reflect_strength: 0.2,
|
19
|
+
face: :left,
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.expanding_parameters
|
24
|
+
[] # none of them
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.params_with_units
|
28
|
+
[ :reflect_offset ]
|
29
|
+
end
|
30
|
+
|
31
|
+
def face_right?
|
32
|
+
@face.to_s.strip.downcase == 'right'
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|