squib 0.14.2 → 0.14.3.pre1
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/.gitignore +41 -41
- data/.travis.yml +19 -19
- data/CHANGELOG.md +366 -357
- data/CONTRIBUTING.md +40 -40
- data/Gemfile +2 -2
- data/LICENSE.txt +22 -22
- data/README.md +121 -121
- data/RELEASE TODO.md +21 -21
- data/Rakefile +48 -48
- data/appveyor.yml +24 -24
- data/bin/squib +4 -4
- data/lib/squib.rb +32 -32
- data/lib/squib/api/background.rb +15 -15
- data/lib/squib/api/data.rb +137 -137
- data/lib/squib/api/groups.rb +54 -54
- data/lib/squib/api/image.rb +49 -49
- data/lib/squib/api/save.rb +83 -83
- data/lib/squib/api/settings.rb +21 -21
- data/lib/squib/api/shapes.rb +124 -124
- data/lib/squib/api/text.rb +25 -25
- data/lib/squib/api/text_embed.rb +71 -71
- data/lib/squib/api/units.rb +27 -27
- data/lib/squib/args/arg_loader.rb +126 -126
- data/lib/squib/args/box.rb +55 -55
- data/lib/squib/args/card_range.rb +32 -32
- data/lib/squib/args/color_validator.rb +12 -12
- data/lib/squib/args/coords.rb +35 -35
- data/lib/squib/args/csv_opts.rb +25 -25
- 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 +40 -40
- data/lib/squib/args/input_file.rb +37 -37
- data/lib/squib/args/paint.rb +44 -44
- data/lib/squib/args/paragraph.rb +116 -116
- data/lib/squib/args/save_batch.rb +63 -63
- data/lib/squib/args/scale_box.rb +53 -53
- data/lib/squib/args/sheet.rb +172 -172
- data/lib/squib/args/showcase_special.rb +38 -38
- data/lib/squib/args/sprue_file.rb +44 -44
- data/lib/squib/args/svg_special.rb +37 -37
- data/lib/squib/args/transform.rb +61 -61
- data/lib/squib/args/typographer.rb +119 -119
- data/lib/squib/args/unit_conversion.rb +29 -29
- 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 +53 -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 +53 -49
- 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 +275 -275
- data/lib/squib/commands/new.rb +77 -77
- data/lib/squib/conf.rb +144 -139
- data/lib/squib/constants.rb +17 -17
- data/lib/squib/deck.rb +116 -116
- data/lib/squib/graphics/background.rb +14 -14
- data/lib/squib/graphics/cairo_context_wrapper.rb +113 -113
- 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 +129 -108
- data/lib/squib/graphics/save_doc.rb +61 -61
- data/lib/squib/graphics/save_images.rb +52 -52
- data/lib/squib/graphics/save_pdf.rb +90 -90
- data/lib/squib/graphics/save_sprue.rb +204 -204
- data/lib/squib/graphics/shapes.rb +143 -143
- data/lib/squib/graphics/showcase.rb +85 -85
- data/lib/squib/graphics/text.rb +174 -174
- data/lib/squib/import/data_frame.rb +108 -108
- data/lib/squib/layout_parser.rb +138 -138
- 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 +203 -203
- data/lib/squib/sprues/sprue_schema.rb +48 -48
- data/lib/squib/version.rb +10 -10
- data/samples/autoscale_font/_autoscale_font.rb +29 -29
- data/samples/backend/_backend.rb +26 -26
- data/samples/basic.rb +19 -19
- data/samples/bug256/_bug256.rb +13 -0
- data/samples/build_groups/build_groups.rb +36 -36
- data/samples/colors/_colors.rb +38 -38
- data/samples/colors/_gradients.rb +34 -34
- 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/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_pdf.rb +29 -29
- data/samples/saves/_saves.rb +51 -51
- data/samples/saves/_showcase.rb +25 -25
- data/samples/shapes/_draw_shapes.rb +60 -60
- data/samples/shapes/_proofs.rb +22 -22
- data/samples/sprues/_advanced_sprues.rb +24 -24
- data/samples/sprues/_builtin_sprues.rb +21 -21
- data/samples/sprues/_fold_sheet.rb +27 -27
- data/samples/sprues/_hex_tiles.rb +15 -15
- data/samples/sprues/_mints.rb +11 -11
- data/samples/sprues/_sprue_example.rb +11 -11
- data/samples/text/_embed_text.rb +128 -128
- data/samples/text/_text.rb +47 -47
- data/samples/text/_text_options.rb +102 -102
- data/samples/text/bug134.rb +14 -14
- data/samples/units/_units.rb +32 -32
- data/squib.gemspec +52 -52
- metadata +51 -48
data/lib/squib/layout_parser.rb
CHANGED
|
@@ -1,138 +1,138 @@
|
|
|
1
|
-
require 'yaml'
|
|
2
|
-
|
|
3
|
-
module Squib
|
|
4
|
-
# Internal class for handling layouts
|
|
5
|
-
# @api private
|
|
6
|
-
class LayoutParser
|
|
7
|
-
|
|
8
|
-
def initialize(dpi = 300)
|
|
9
|
-
@dpi = dpi
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
# Load the layout file(s), if exists
|
|
13
|
-
# @api private
|
|
14
|
-
def load_layout(files, initial = {})
|
|
15
|
-
layout = initial
|
|
16
|
-
Squib::logger.info { " using layout(s): #{files}" }
|
|
17
|
-
Array(files).each do |file|
|
|
18
|
-
thefile = file
|
|
19
|
-
thefile = builtin(file) unless File.exists?(file)
|
|
20
|
-
if File.exists? thefile
|
|
21
|
-
# note: YAML.load_file returns false on empty file
|
|
22
|
-
yml = layout.merge(YAML.load_file(thefile) || {})
|
|
23
|
-
yml.each do |key, value|
|
|
24
|
-
layout[key] = recurse_extends(yml, key, {})
|
|
25
|
-
end
|
|
26
|
-
else
|
|
27
|
-
Squib::logger.error { "Layout file not found: #{file}. Skipping..." }
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
return layout
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
private
|
|
34
|
-
|
|
35
|
-
# Determine the file path of the built-in layout file
|
|
36
|
-
def builtin(file)
|
|
37
|
-
"#{File.dirname(__FILE__)}/builtin/layouts/#{file}"
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
# Process the extends recursively
|
|
41
|
-
# :nodoc:
|
|
42
|
-
# @api private
|
|
43
|
-
def recurse_extends(yml, key, visited)
|
|
44
|
-
assert_not_visited(key, visited)
|
|
45
|
-
return yml[key] unless has_extends?(yml, key)
|
|
46
|
-
return yml[key] unless parents_exist?(yml, key)
|
|
47
|
-
visited[key] = key
|
|
48
|
-
parent_keys = [yml[key]['extends']].flatten
|
|
49
|
-
h = {}
|
|
50
|
-
parent_keys.each do |parent_key|
|
|
51
|
-
from_extends = yml[key].merge(recurse_extends(yml, parent_key, visited)) do |key, child_val, parent_val|
|
|
52
|
-
handle_relative_operators(parent_val, child_val)
|
|
53
|
-
end
|
|
54
|
-
h = h.merge(from_extends) do |key, older_sibling, younger_sibling|
|
|
55
|
-
# In general, go with the younger sibling.
|
|
56
|
-
# UNLESS that younger sibling had a relative operator, in which use the
|
|
57
|
-
# (already computed) relative operator applied, which lands in older_sibling
|
|
58
|
-
# See bug 244.
|
|
59
|
-
sibling = younger_sibling
|
|
60
|
-
%w(+= -= *= /=).each do |op|
|
|
61
|
-
sibling = older_sibling if younger_sibling.to_s.strip.start_with? op
|
|
62
|
-
end
|
|
63
|
-
sibling
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
return h
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
def handle_relative_operators(parent_val, child_val)
|
|
70
|
-
if child_val.to_s.strip.start_with?('+=')
|
|
71
|
-
add_parent_child(parent_val, child_val)
|
|
72
|
-
elsif child_val.to_s.strip.start_with?('-=')
|
|
73
|
-
sub_parent_child(parent_val, child_val)
|
|
74
|
-
elsif child_val.to_s.strip.start_with?('*=')
|
|
75
|
-
mul_parent_child(parent_val, child_val)
|
|
76
|
-
elsif child_val.to_s.strip.start_with?('/=')
|
|
77
|
-
div_parent_child(parent_val, child_val)
|
|
78
|
-
else
|
|
79
|
-
child_val # child overrides parent when merging, no +=
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
def add_parent_child(parent, child)
|
|
84
|
-
parent_pixels = Args::UnitConversion.parse(parent, @dpi).to_f
|
|
85
|
-
child_pixels = Args::UnitConversion.parse(child.sub('+=', ''), @dpi).to_f
|
|
86
|
-
parent_pixels + child_pixels
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
def sub_parent_child(parent, child)
|
|
90
|
-
parent_pixels = Args::UnitConversion.parse(parent, @dpi).to_f
|
|
91
|
-
child_pixels = Args::UnitConversion.parse(child.sub('-=', ''), @dpi).to_f
|
|
92
|
-
parent_pixels - child_pixels
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
def mul_parent_child(parent, child)
|
|
96
|
-
parent_pixels = Args::UnitConversion.parse(parent, @dpi).to_f
|
|
97
|
-
child_float = child.sub('*=', '').to_f
|
|
98
|
-
parent_pixels * child_float
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
def div_parent_child(parent, child)
|
|
102
|
-
parent_pixels = Args::UnitConversion.parse(parent, @dpi).to_f
|
|
103
|
-
child_float = child.sub('/=', '').to_f
|
|
104
|
-
parent_pixels / child_float
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
# Does this layout entry have an extends field?
|
|
108
|
-
# i.e. is it a base-case or will it need recursion?
|
|
109
|
-
# :nodoc:
|
|
110
|
-
# @api private
|
|
111
|
-
def has_extends?(yml, key)
|
|
112
|
-
!!yml[key] && yml[key].key?('extends')
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
# Checks if we have any absentee parents
|
|
116
|
-
# @api private
|
|
117
|
-
def parents_exist?(yml, key)
|
|
118
|
-
exists = true
|
|
119
|
-
Array(yml[key]['extends']).each do |parent|
|
|
120
|
-
unless yml.key?(parent)
|
|
121
|
-
exists = false unless
|
|
122
|
-
Squib.logger.error "Processing layout: '#{key}' attempts to extend a missing '#{yml[key]['extends']}'"
|
|
123
|
-
end
|
|
124
|
-
end
|
|
125
|
-
return exists
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
# Safeguard against malformed circular extends
|
|
129
|
-
# :nodoc:
|
|
130
|
-
# @api private
|
|
131
|
-
def assert_not_visited(key, visited)
|
|
132
|
-
if visited.key? key
|
|
133
|
-
raise "Invalid layout: circular extends with '#{key}'"
|
|
134
|
-
end
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
end
|
|
138
|
-
end
|
|
1
|
+
require 'yaml'
|
|
2
|
+
|
|
3
|
+
module Squib
|
|
4
|
+
# Internal class for handling layouts
|
|
5
|
+
# @api private
|
|
6
|
+
class LayoutParser
|
|
7
|
+
|
|
8
|
+
def initialize(dpi = 300)
|
|
9
|
+
@dpi = dpi
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Load the layout file(s), if exists
|
|
13
|
+
# @api private
|
|
14
|
+
def load_layout(files, initial = {})
|
|
15
|
+
layout = initial
|
|
16
|
+
Squib::logger.info { " using layout(s): #{files}" }
|
|
17
|
+
Array(files).each do |file|
|
|
18
|
+
thefile = file
|
|
19
|
+
thefile = builtin(file) unless File.exists?(file)
|
|
20
|
+
if File.exists? thefile
|
|
21
|
+
# note: YAML.load_file returns false on empty file
|
|
22
|
+
yml = layout.merge(YAML.load_file(thefile) || {})
|
|
23
|
+
yml.each do |key, value|
|
|
24
|
+
layout[key] = recurse_extends(yml, key, {})
|
|
25
|
+
end
|
|
26
|
+
else
|
|
27
|
+
Squib::logger.error { "Layout file not found: #{file}. Skipping..." }
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
return layout
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
private
|
|
34
|
+
|
|
35
|
+
# Determine the file path of the built-in layout file
|
|
36
|
+
def builtin(file)
|
|
37
|
+
"#{File.dirname(__FILE__)}/builtin/layouts/#{file}"
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# Process the extends recursively
|
|
41
|
+
# :nodoc:
|
|
42
|
+
# @api private
|
|
43
|
+
def recurse_extends(yml, key, visited)
|
|
44
|
+
assert_not_visited(key, visited)
|
|
45
|
+
return yml[key] unless has_extends?(yml, key)
|
|
46
|
+
return yml[key] unless parents_exist?(yml, key)
|
|
47
|
+
visited[key] = key
|
|
48
|
+
parent_keys = [yml[key]['extends']].flatten
|
|
49
|
+
h = {}
|
|
50
|
+
parent_keys.each do |parent_key|
|
|
51
|
+
from_extends = yml[key].merge(recurse_extends(yml, parent_key, visited)) do |key, child_val, parent_val|
|
|
52
|
+
handle_relative_operators(parent_val, child_val)
|
|
53
|
+
end
|
|
54
|
+
h = h.merge(from_extends) do |key, older_sibling, younger_sibling|
|
|
55
|
+
# In general, go with the younger sibling.
|
|
56
|
+
# UNLESS that younger sibling had a relative operator, in which use the
|
|
57
|
+
# (already computed) relative operator applied, which lands in older_sibling
|
|
58
|
+
# See bug 244.
|
|
59
|
+
sibling = younger_sibling
|
|
60
|
+
%w(+= -= *= /=).each do |op|
|
|
61
|
+
sibling = older_sibling if younger_sibling.to_s.strip.start_with? op
|
|
62
|
+
end
|
|
63
|
+
sibling
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
return h
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def handle_relative_operators(parent_val, child_val)
|
|
70
|
+
if child_val.to_s.strip.start_with?('+=')
|
|
71
|
+
add_parent_child(parent_val, child_val)
|
|
72
|
+
elsif child_val.to_s.strip.start_with?('-=')
|
|
73
|
+
sub_parent_child(parent_val, child_val)
|
|
74
|
+
elsif child_val.to_s.strip.start_with?('*=')
|
|
75
|
+
mul_parent_child(parent_val, child_val)
|
|
76
|
+
elsif child_val.to_s.strip.start_with?('/=')
|
|
77
|
+
div_parent_child(parent_val, child_val)
|
|
78
|
+
else
|
|
79
|
+
child_val # child overrides parent when merging, no +=
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def add_parent_child(parent, child)
|
|
84
|
+
parent_pixels = Args::UnitConversion.parse(parent, @dpi).to_f
|
|
85
|
+
child_pixels = Args::UnitConversion.parse(child.sub('+=', ''), @dpi).to_f
|
|
86
|
+
parent_pixels + child_pixels
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def sub_parent_child(parent, child)
|
|
90
|
+
parent_pixels = Args::UnitConversion.parse(parent, @dpi).to_f
|
|
91
|
+
child_pixels = Args::UnitConversion.parse(child.sub('-=', ''), @dpi).to_f
|
|
92
|
+
parent_pixels - child_pixels
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def mul_parent_child(parent, child)
|
|
96
|
+
parent_pixels = Args::UnitConversion.parse(parent, @dpi).to_f
|
|
97
|
+
child_float = child.sub('*=', '').to_f
|
|
98
|
+
parent_pixels * child_float
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def div_parent_child(parent, child)
|
|
102
|
+
parent_pixels = Args::UnitConversion.parse(parent, @dpi).to_f
|
|
103
|
+
child_float = child.sub('/=', '').to_f
|
|
104
|
+
parent_pixels / child_float
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
# Does this layout entry have an extends field?
|
|
108
|
+
# i.e. is it a base-case or will it need recursion?
|
|
109
|
+
# :nodoc:
|
|
110
|
+
# @api private
|
|
111
|
+
def has_extends?(yml, key)
|
|
112
|
+
!!yml[key] && yml[key].key?('extends')
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Checks if we have any absentee parents
|
|
116
|
+
# @api private
|
|
117
|
+
def parents_exist?(yml, key)
|
|
118
|
+
exists = true
|
|
119
|
+
Array(yml[key]['extends']).each do |parent|
|
|
120
|
+
unless yml.key?(parent)
|
|
121
|
+
exists = false unless
|
|
122
|
+
Squib.logger.error "Processing layout: '#{key}' attempts to extend a missing '#{yml[key]['extends']}'"
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
return exists
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
# Safeguard against malformed circular extends
|
|
129
|
+
# :nodoc:
|
|
130
|
+
# @api private
|
|
131
|
+
def assert_not_visited(key, visited)
|
|
132
|
+
if visited.key? key
|
|
133
|
+
raise "Invalid layout: circular extends with '#{key}'"
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
end
|
|
138
|
+
end
|
data/lib/squib/progress.rb
CHANGED
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
require 'ruby-progressbar'
|
|
2
|
-
|
|
3
|
-
module Squib
|
|
4
|
-
|
|
5
|
-
# :nodoc:
|
|
6
|
-
# @api private
|
|
7
|
-
class DoNothing
|
|
8
|
-
def increment
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def finish
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
# A facade that handles (or doesn't) the progress bar on the console
|
|
16
|
-
#
|
|
17
|
-
# :nodoc:
|
|
18
|
-
# @api private
|
|
19
|
-
class Progress
|
|
20
|
-
attr_accessor :enabled
|
|
21
|
-
|
|
22
|
-
def initialize(enabled)
|
|
23
|
-
@enabled = enabled
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def start(title='', total=100, &block)
|
|
27
|
-
if @enabled
|
|
28
|
-
@bar = ProgressBar.create(title: title, total: total, format: '%t <%B> %p%% %a')
|
|
29
|
-
yield(@bar)
|
|
30
|
-
@bar.finish
|
|
31
|
-
else
|
|
32
|
-
yield(Squib::DoNothing.new)
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
end
|
|
1
|
+
require 'ruby-progressbar'
|
|
2
|
+
|
|
3
|
+
module Squib
|
|
4
|
+
|
|
5
|
+
# :nodoc:
|
|
6
|
+
# @api private
|
|
7
|
+
class DoNothing
|
|
8
|
+
def increment
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def finish
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# A facade that handles (or doesn't) the progress bar on the console
|
|
16
|
+
#
|
|
17
|
+
# :nodoc:
|
|
18
|
+
# @api private
|
|
19
|
+
class Progress
|
|
20
|
+
attr_accessor :enabled
|
|
21
|
+
|
|
22
|
+
def initialize(enabled)
|
|
23
|
+
@enabled = enabled
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def start(title='', total=100, &block)
|
|
27
|
+
if @enabled
|
|
28
|
+
@bar = ProgressBar.create(title: title, total: total, format: '%t <%B> %p%% %a')
|
|
29
|
+
yield(@bar)
|
|
30
|
+
@bar.finish
|
|
31
|
+
else
|
|
32
|
+
yield(Squib::DoNothing.new)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
end
|
data/lib/squib/sample_helpers.rb
CHANGED
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
module Squib
|
|
2
|
-
|
|
3
|
-
# Some helper methods specifically for samples
|
|
4
|
-
# @api private
|
|
5
|
-
#:nodoc:
|
|
6
|
-
class Deck
|
|
7
|
-
|
|
8
|
-
# Draw graph paper for samples
|
|
9
|
-
def draw_graph_paper(width, height)
|
|
10
|
-
background color: 'white'
|
|
11
|
-
grid width: 50, height: 50, stroke_color: '#659ae9', stroke_width: 1.5
|
|
12
|
-
grid width: 200, height: 200, stroke_color: '#659ae9', stroke_width: 3, x: 50, y: 50
|
|
13
|
-
(50..height).step(200) do |y|
|
|
14
|
-
text str: "y=#{y}", x: 3, y: y - 18, font: 'Open Sans, Sans 10'
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
# Define a set of samples on some graph paper
|
|
19
|
-
def sample(str)
|
|
20
|
-
@sample_x ||= 100
|
|
21
|
-
@sample_y ||= 100
|
|
22
|
-
rect x: 460, y: @sample_y - 40, width: 600,
|
|
23
|
-
height: 180, fill_color: '#FFD655', stroke_color: 'black', radius: 15
|
|
24
|
-
text str: str, x: 460, y: @sample_y - 40,
|
|
25
|
-
width: 540, height: 180,
|
|
26
|
-
valign: 'middle', align: 'center',
|
|
27
|
-
font: 'Times New Roman,Serif 8'
|
|
28
|
-
yield @sample_x, @sample_y
|
|
29
|
-
@sample_y += 200
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
end
|
|
1
|
+
module Squib
|
|
2
|
+
|
|
3
|
+
# Some helper methods specifically for samples
|
|
4
|
+
# @api private
|
|
5
|
+
#:nodoc:
|
|
6
|
+
class Deck
|
|
7
|
+
|
|
8
|
+
# Draw graph paper for samples
|
|
9
|
+
def draw_graph_paper(width, height)
|
|
10
|
+
background color: 'white'
|
|
11
|
+
grid width: 50, height: 50, stroke_color: '#659ae9', stroke_width: 1.5
|
|
12
|
+
grid width: 200, height: 200, stroke_color: '#659ae9', stroke_width: 3, x: 50, y: 50
|
|
13
|
+
(50..height).step(200) do |y|
|
|
14
|
+
text str: "y=#{y}", x: 3, y: y - 18, font: 'Open Sans, Sans 10'
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Define a set of samples on some graph paper
|
|
19
|
+
def sample(str)
|
|
20
|
+
@sample_x ||= 100
|
|
21
|
+
@sample_y ||= 100
|
|
22
|
+
rect x: 460, y: @sample_y - 40, width: 600,
|
|
23
|
+
height: 180, fill_color: '#FFD655', stroke_color: 'black', radius: 15
|
|
24
|
+
text str: str, x: 460, y: @sample_y - 40,
|
|
25
|
+
width: 540, height: 180,
|
|
26
|
+
valign: 'middle', align: 'center',
|
|
27
|
+
font: 'Times New Roman,Serif 8'
|
|
28
|
+
yield @sample_x, @sample_y
|
|
29
|
+
@sample_y += 200
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
module Squib
|
|
2
|
-
module Sprues
|
|
3
|
-
class CropLine
|
|
4
|
-
attr_reader :x1, :y1, :x2, :y2
|
|
5
|
-
|
|
6
|
-
def initialize(type, position, sheet_width, sheet_height, dpi)
|
|
7
|
-
method = "parse_#{type}"
|
|
8
|
-
send method, position, sheet_width, sheet_height, dpi
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def parse_horizontal(position, sheet_width, _, dpi)
|
|
12
|
-
position = Args::UnitConversion.parse(position, dpi)
|
|
13
|
-
@x1 = 0
|
|
14
|
-
@y1 = position
|
|
15
|
-
@x2 = sheet_width
|
|
16
|
-
@y2 = position
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def parse_vertical(position, _, sheet_height, dpi)
|
|
20
|
-
position = Args::UnitConversion.parse(position, dpi)
|
|
21
|
-
@x1 = position
|
|
22
|
-
@y1 = 0
|
|
23
|
-
@x2 = position
|
|
24
|
-
@y2 = sheet_height
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
1
|
+
module Squib
|
|
2
|
+
module Sprues
|
|
3
|
+
class CropLine
|
|
4
|
+
attr_reader :x1, :y1, :x2, :y2
|
|
5
|
+
|
|
6
|
+
def initialize(type, position, sheet_width, sheet_height, dpi)
|
|
7
|
+
method = "parse_#{type}"
|
|
8
|
+
send method, position, sheet_width, sheet_height, dpi
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def parse_horizontal(position, sheet_width, _, dpi)
|
|
12
|
+
position = Args::UnitConversion.parse(position, dpi)
|
|
13
|
+
@x1 = 0
|
|
14
|
+
@y1 = position
|
|
15
|
+
@x2 = sheet_width
|
|
16
|
+
@y2 = position
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def parse_vertical(position, _, sheet_height, dpi)
|
|
20
|
+
position = Args::UnitConversion.parse(position, dpi)
|
|
21
|
+
@x1 = position
|
|
22
|
+
@y1 = 0
|
|
23
|
+
@x2 = position
|
|
24
|
+
@y2 = sheet_height
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|