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
data/lib/squib/args/box.rb
CHANGED
@@ -1,55 +1,55 @@
|
|
1
|
-
require 'squib/args/arg_loader'
|
2
|
-
|
3
|
-
module Squib
|
4
|
-
# @api private
|
5
|
-
module Args
|
6
|
-
|
7
|
-
class Box
|
8
|
-
include ArgLoader
|
9
|
-
|
10
|
-
def initialize(deck = nil, dsl_method_defaults = {})
|
11
|
-
@deck = deck
|
12
|
-
@dsl_method_defaults = dsl_method_defaults
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.parameters
|
16
|
-
{ x: 0, y: 0,
|
17
|
-
width: :deck, height: :deck,
|
18
|
-
radius: nil, x_radius: 0, y_radius: 0
|
19
|
-
}
|
20
|
-
end
|
21
|
-
|
22
|
-
def self.expanding_parameters
|
23
|
-
parameters.keys # all of them
|
24
|
-
end
|
25
|
-
|
26
|
-
def self.params_with_units
|
27
|
-
parameters.keys # all of them
|
28
|
-
end
|
29
|
-
|
30
|
-
def validate_width(arg, _i)
|
31
|
-
return arg if @deck.nil?
|
32
|
-
return @deck.width if arg == :deck
|
33
|
-
arg
|
34
|
-
end
|
35
|
-
|
36
|
-
def validate_height(arg, _i)
|
37
|
-
return arg if @deck.nil?
|
38
|
-
return @deck.height if arg == :deck
|
39
|
-
arg
|
40
|
-
end
|
41
|
-
|
42
|
-
def validate_x_radius(arg, i)
|
43
|
-
return radius[i] unless radius[i].nil?
|
44
|
-
arg
|
45
|
-
end
|
46
|
-
|
47
|
-
def validate_y_radius(arg, i)
|
48
|
-
return radius[i] unless radius[i].nil?
|
49
|
-
arg
|
50
|
-
end
|
51
|
-
|
52
|
-
end
|
53
|
-
|
54
|
-
end
|
1
|
+
require 'squib/args/arg_loader'
|
2
|
+
|
3
|
+
module Squib
|
4
|
+
# @api private
|
5
|
+
module Args
|
6
|
+
|
7
|
+
class Box
|
8
|
+
include ArgLoader
|
9
|
+
|
10
|
+
def initialize(deck = nil, dsl_method_defaults = {})
|
11
|
+
@deck = deck
|
12
|
+
@dsl_method_defaults = dsl_method_defaults
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.parameters
|
16
|
+
{ x: 0, y: 0,
|
17
|
+
width: :deck, height: :deck,
|
18
|
+
radius: nil, x_radius: 0, y_radius: 0
|
19
|
+
}
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.expanding_parameters
|
23
|
+
parameters.keys # all of them
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.params_with_units
|
27
|
+
parameters.keys # all of them
|
28
|
+
end
|
29
|
+
|
30
|
+
def validate_width(arg, _i)
|
31
|
+
return arg if @deck.nil?
|
32
|
+
return @deck.width if arg == :deck
|
33
|
+
arg
|
34
|
+
end
|
35
|
+
|
36
|
+
def validate_height(arg, _i)
|
37
|
+
return arg if @deck.nil?
|
38
|
+
return @deck.height if arg == :deck
|
39
|
+
arg
|
40
|
+
end
|
41
|
+
|
42
|
+
def validate_x_radius(arg, i)
|
43
|
+
return radius[i] unless radius[i].nil?
|
44
|
+
arg
|
45
|
+
end
|
46
|
+
|
47
|
+
def validate_y_radius(arg, i)
|
48
|
+
return radius[i] unless radius[i].nil?
|
49
|
+
arg
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
55
|
end
|
@@ -1,32 +1,32 @@
|
|
1
|
-
module Squib
|
2
|
-
# @api private
|
3
|
-
module Args
|
4
|
-
class CardRange
|
5
|
-
include Enumerable
|
6
|
-
|
7
|
-
def initialize(input, deck_size: 1)
|
8
|
-
@range = validate(input, deck_size)
|
9
|
-
end
|
10
|
-
|
11
|
-
# Hook into enumerable by delegating to @range
|
12
|
-
def each(&block)
|
13
|
-
@range.each { |i| block.call(i) }
|
14
|
-
end
|
15
|
-
|
16
|
-
def size
|
17
|
-
@range.size
|
18
|
-
end
|
19
|
-
|
20
|
-
private
|
21
|
-
def validate(input, deck_size)
|
22
|
-
input ||= :all # default
|
23
|
-
input = 0..(deck_size - 1) if input == :all
|
24
|
-
input = (input.to_i)..(input.to_i) if input.respond_to? :to_i
|
25
|
-
raise ArgumentError.new("#{input} must be Enumerable (i.e. respond_to :each).") unless input.respond_to? :each
|
26
|
-
raise ArgumentError.new("#{input} is outside of deck range of 0..#{deck_size-1}") if (!input.max.nil?) && (input.max > (deck_size - 1))
|
27
|
-
input
|
28
|
-
end
|
29
|
-
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
1
|
+
module Squib
|
2
|
+
# @api private
|
3
|
+
module Args
|
4
|
+
class CardRange
|
5
|
+
include Enumerable
|
6
|
+
|
7
|
+
def initialize(input, deck_size: 1)
|
8
|
+
@range = validate(input, deck_size)
|
9
|
+
end
|
10
|
+
|
11
|
+
# Hook into enumerable by delegating to @range
|
12
|
+
def each(&block)
|
13
|
+
@range.each { |i| block.call(i) }
|
14
|
+
end
|
15
|
+
|
16
|
+
def size
|
17
|
+
@range.size
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
def validate(input, deck_size)
|
22
|
+
input ||= :all # default
|
23
|
+
input = 0..(deck_size - 1) if input == :all
|
24
|
+
input = (input.to_i)..(input.to_i) if input.respond_to? :to_i
|
25
|
+
raise ArgumentError.new("#{input} must be Enumerable (i.e. respond_to :each).") unless input.respond_to? :each
|
26
|
+
raise ArgumentError.new("#{input} is outside of deck range of 0..#{deck_size-1}") if (!input.max.nil?) && (input.max > (deck_size - 1))
|
27
|
+
input
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -1,12 +1,12 @@
|
|
1
|
-
module Squib
|
2
|
-
#@api private
|
3
|
-
module Args
|
4
|
-
module ColorValidator
|
5
|
-
|
6
|
-
def colorify(color, custom_colors = {})
|
7
|
-
custom_colors[color.to_s] || color.to_s
|
8
|
-
end
|
9
|
-
|
10
|
-
end
|
11
|
-
end
|
1
|
+
module Squib
|
2
|
+
#@api private
|
3
|
+
module Args
|
4
|
+
module ColorValidator
|
5
|
+
|
6
|
+
def colorify(color, custom_colors = {})
|
7
|
+
custom_colors[color.to_s] || color.to_s
|
8
|
+
end
|
9
|
+
|
10
|
+
end
|
11
|
+
end
|
12
12
|
end
|
data/lib/squib/args/coords.rb
CHANGED
@@ -1,33 +1,33 @@
|
|
1
|
-
require 'squib/args/arg_loader'
|
2
|
-
|
3
|
-
module Squib
|
4
|
-
# @api private
|
5
|
-
module Args
|
6
|
-
|
7
|
-
class Coords
|
8
|
-
include ArgLoader
|
9
|
-
|
10
|
-
def self.parameters
|
11
|
-
{ x: 0, y: 0,
|
12
|
-
x1: 100, y1: 100,
|
13
|
-
x2: 150, y2: 150,
|
14
|
-
x3: 100, y3: 150,
|
15
|
-
cx1: 0 , cy1: 0,
|
16
|
-
cx2: 0 , cy2: 0,
|
17
|
-
inner_radius: 50, outer_radius: 100,
|
18
|
-
radius: 100,
|
19
|
-
n: 5, }
|
20
|
-
end
|
21
|
-
|
22
|
-
def self.expanding_parameters
|
23
|
-
parameters.keys # all of them
|
24
|
-
end
|
25
|
-
|
26
|
-
def self.params_with_units
|
27
|
-
parameters.keys # all of them
|
28
|
-
end
|
29
|
-
|
30
|
-
end
|
31
|
-
|
32
|
-
end
|
1
|
+
require 'squib/args/arg_loader'
|
2
|
+
|
3
|
+
module Squib
|
4
|
+
# @api private
|
5
|
+
module Args
|
6
|
+
|
7
|
+
class Coords
|
8
|
+
include ArgLoader
|
9
|
+
|
10
|
+
def self.parameters
|
11
|
+
{ x: 0, y: 0,
|
12
|
+
x1: 100, y1: 100,
|
13
|
+
x2: 150, y2: 150,
|
14
|
+
x3: 100, y3: 150,
|
15
|
+
cx1: 0 , cy1: 0,
|
16
|
+
cx2: 0 , cy2: 0,
|
17
|
+
inner_radius: 50, outer_radius: 100,
|
18
|
+
radius: 100,
|
19
|
+
n: 5, }
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.expanding_parameters
|
23
|
+
parameters.keys # all of them
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.params_with_units
|
27
|
+
parameters.keys # all of them
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
33
|
end
|
@@ -1,16 +1,16 @@
|
|
1
|
-
module Squib
|
2
|
-
#@api private
|
3
|
-
module Args
|
4
|
-
module DirValidator
|
5
|
-
|
6
|
-
def ensure_dir_created(dir)
|
7
|
-
unless Dir.exists?(dir)
|
8
|
-
Squib.logger.warn "Dir '#{dir}' does not exist, creating it."
|
9
|
-
Dir.mkdir dir
|
10
|
-
end
|
11
|
-
return dir
|
12
|
-
end
|
13
|
-
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
1
|
+
module Squib
|
2
|
+
#@api private
|
3
|
+
module Args
|
4
|
+
module DirValidator
|
5
|
+
|
6
|
+
def ensure_dir_created(dir)
|
7
|
+
unless Dir.exists?(dir)
|
8
|
+
Squib.logger.warn "Dir '#{dir}' does not exist, creating it."
|
9
|
+
Dir.mkdir dir
|
10
|
+
end
|
11
|
+
return dir
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/squib/args/draw.rb
CHANGED
@@ -1,92 +1,92 @@
|
|
1
|
-
require 'cairo'
|
2
|
-
require 'squib/args/arg_loader'
|
3
|
-
require 'squib/args/color_validator'
|
4
|
-
|
5
|
-
module Squib
|
6
|
-
# @api private
|
7
|
-
module Args
|
8
|
-
|
9
|
-
class Draw
|
10
|
-
include ArgLoader
|
11
|
-
include ColorValidator
|
12
|
-
|
13
|
-
def initialize(custom_colors, dsl_method_defaults = {})
|
14
|
-
@custom_colors = custom_colors
|
15
|
-
@dsl_method_defaults = dsl_method_defaults
|
16
|
-
end
|
17
|
-
|
18
|
-
def self.parameters
|
19
|
-
{ color: :black,
|
20
|
-
fill_color: '#0000',
|
21
|
-
stroke_color: :black,
|
22
|
-
stroke_width: 2.0,
|
23
|
-
stroke_strategy: :fill_first,
|
24
|
-
join: :miter,
|
25
|
-
cap: 'butt',
|
26
|
-
dash: ''
|
27
|
-
}
|
28
|
-
end
|
29
|
-
|
30
|
-
def self.expanding_parameters
|
31
|
-
parameters.keys # all of them are expandable
|
32
|
-
end
|
33
|
-
|
34
|
-
def self.params_with_units
|
35
|
-
[:stroke_width]
|
36
|
-
end
|
37
|
-
|
38
|
-
def validate_join(arg, _i)
|
39
|
-
case arg.to_s.strip.downcase
|
40
|
-
when 'miter'
|
41
|
-
Cairo::LINE_JOIN_MITER
|
42
|
-
when 'round'
|
43
|
-
Cairo::LINE_JOIN_ROUND
|
44
|
-
when 'bevel'
|
45
|
-
Cairo::LINE_JOIN_BEVEL
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
def validate_cap(arg, _i)
|
50
|
-
case arg.to_s.strip.downcase
|
51
|
-
when 'butt'
|
52
|
-
Cairo::LINE_CAP_BUTT
|
53
|
-
when 'round'
|
54
|
-
Cairo::LINE_CAP_ROUND
|
55
|
-
when 'square'
|
56
|
-
Cairo::LINE_CAP_SQUARE
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
def validate_dash(arg, _i)
|
61
|
-
arg.to_s.split.collect do |x|
|
62
|
-
convert_unit(x, @dpi).to_f
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
def validate_fill_color(arg, _i)
|
67
|
-
colorify(arg, @custom_colors)
|
68
|
-
end
|
69
|
-
|
70
|
-
def validate_stroke_color(arg, _i)
|
71
|
-
colorify(arg, @custom_colors)
|
72
|
-
end
|
73
|
-
|
74
|
-
def validate_color(arg, _i)
|
75
|
-
colorify(arg, @custom_colors)
|
76
|
-
end
|
77
|
-
|
78
|
-
def validate_stroke_strategy(arg, _i)
|
79
|
-
case arg.to_s.downcase.strip
|
80
|
-
when 'fill_first'
|
81
|
-
:fill_first
|
82
|
-
when 'stroke_first'
|
83
|
-
:stroke_first
|
84
|
-
else
|
85
|
-
raise "Only 'stroke_first' or 'fill_first' allowed"
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
end
|
90
|
-
|
91
|
-
end
|
92
|
-
end
|
1
|
+
require 'cairo'
|
2
|
+
require 'squib/args/arg_loader'
|
3
|
+
require 'squib/args/color_validator'
|
4
|
+
|
5
|
+
module Squib
|
6
|
+
# @api private
|
7
|
+
module Args
|
8
|
+
|
9
|
+
class Draw
|
10
|
+
include ArgLoader
|
11
|
+
include ColorValidator
|
12
|
+
|
13
|
+
def initialize(custom_colors, dsl_method_defaults = {})
|
14
|
+
@custom_colors = custom_colors
|
15
|
+
@dsl_method_defaults = dsl_method_defaults
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.parameters
|
19
|
+
{ color: :black,
|
20
|
+
fill_color: '#0000',
|
21
|
+
stroke_color: :black,
|
22
|
+
stroke_width: 2.0,
|
23
|
+
stroke_strategy: :fill_first,
|
24
|
+
join: :miter,
|
25
|
+
cap: 'butt',
|
26
|
+
dash: ''
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.expanding_parameters
|
31
|
+
parameters.keys # all of them are expandable
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.params_with_units
|
35
|
+
[:stroke_width]
|
36
|
+
end
|
37
|
+
|
38
|
+
def validate_join(arg, _i)
|
39
|
+
case arg.to_s.strip.downcase
|
40
|
+
when 'miter'
|
41
|
+
Cairo::LINE_JOIN_MITER
|
42
|
+
when 'round'
|
43
|
+
Cairo::LINE_JOIN_ROUND
|
44
|
+
when 'bevel'
|
45
|
+
Cairo::LINE_JOIN_BEVEL
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def validate_cap(arg, _i)
|
50
|
+
case arg.to_s.strip.downcase
|
51
|
+
when 'butt'
|
52
|
+
Cairo::LINE_CAP_BUTT
|
53
|
+
when 'round'
|
54
|
+
Cairo::LINE_CAP_ROUND
|
55
|
+
when 'square'
|
56
|
+
Cairo::LINE_CAP_SQUARE
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def validate_dash(arg, _i)
|
61
|
+
arg.to_s.split.collect do |x|
|
62
|
+
convert_unit(x, @dpi).to_f
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def validate_fill_color(arg, _i)
|
67
|
+
colorify(arg, @custom_colors)
|
68
|
+
end
|
69
|
+
|
70
|
+
def validate_stroke_color(arg, _i)
|
71
|
+
colorify(arg, @custom_colors)
|
72
|
+
end
|
73
|
+
|
74
|
+
def validate_color(arg, _i)
|
75
|
+
colorify(arg, @custom_colors)
|
76
|
+
end
|
77
|
+
|
78
|
+
def validate_stroke_strategy(arg, _i)
|
79
|
+
case arg.to_s.downcase.strip
|
80
|
+
when 'fill_first'
|
81
|
+
:fill_first
|
82
|
+
when 'stroke_first'
|
83
|
+
:stroke_first
|
84
|
+
else
|
85
|
+
raise "Only 'stroke_first' or 'fill_first' allowed"
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
92
|
+
end
|