squib 0.15.0 → 0.16.0.pre.preview2

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.
Files changed (104) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/tests.yml +22 -0
  3. data/CHANGELOG.md +41 -1
  4. data/Dockerfile +18 -16
  5. data/Guardfile +8 -0
  6. data/README.md +24 -6
  7. data/RELEASE TODO.md +1 -0
  8. data/Rakefile +3 -0
  9. data/lib/squib.rb +3 -1
  10. data/lib/squib/args/arg_loader.rb +109 -106
  11. data/lib/squib/args/box.rb +52 -48
  12. data/lib/squib/args/card_range.rb +26 -24
  13. data/lib/squib/args/color_validator.rb +4 -9
  14. data/lib/squib/args/coords.rb +39 -25
  15. data/lib/squib/args/csv_opts.rb +13 -16
  16. data/lib/squib/args/dir_validator.rb +7 -12
  17. data/lib/squib/args/draw.rb +69 -68
  18. data/lib/squib/args/embed_adjust.rb +12 -15
  19. data/lib/squib/args/embed_key.rb +6 -11
  20. data/lib/squib/args/hand_special.rb +25 -25
  21. data/lib/squib/args/import.rb +54 -27
  22. data/lib/squib/args/input_file.rb +22 -26
  23. data/lib/squib/args/paint.rb +30 -31
  24. data/lib/squib/args/paragraph.rb +95 -93
  25. data/lib/squib/args/save_batch.rb +50 -48
  26. data/lib/squib/args/scale_box.rb +43 -39
  27. data/lib/squib/args/sheet.rb +147 -149
  28. data/lib/squib/args/showcase_special.rb +32 -32
  29. data/lib/squib/args/sprue_file.rb +30 -30
  30. data/lib/squib/args/svg_special.rb +26 -26
  31. data/lib/squib/args/transform.rb +48 -54
  32. data/lib/squib/args/typographer.rb +88 -92
  33. data/lib/squib/args/unit_conversion.rb +6 -8
  34. data/lib/squib/args/xywh_shorthands.rb +51 -0
  35. data/lib/squib/builtin/projects/advanced/config.yml +4 -3
  36. data/lib/squib/builtin/projects/basic/config.yml +4 -3
  37. data/lib/squib/conf.rb +5 -0
  38. data/lib/squib/deck.rb +34 -12
  39. data/lib/squib/dsl/background.rb +35 -0
  40. data/lib/squib/dsl/circle.rb +39 -0
  41. data/lib/squib/dsl/csv.rb +42 -0
  42. data/lib/squib/dsl/curve.rb +35 -0
  43. data/lib/squib/dsl/cut_zone.rb +47 -0
  44. data/lib/squib/dsl/ellipse.rb +37 -0
  45. data/lib/squib/dsl/grid.rb +35 -0
  46. data/lib/squib/{api → dsl}/groups.rb +0 -0
  47. data/lib/squib/dsl/hand.rb +42 -0
  48. data/lib/squib/dsl/line.rb +35 -0
  49. data/lib/squib/dsl/png.rb +56 -0
  50. data/lib/squib/dsl/polygon.rb +36 -0
  51. data/lib/squib/dsl/rect.rb +37 -0
  52. data/lib/squib/dsl/safe_zone.rb +48 -0
  53. data/lib/squib/dsl/save.rb +21 -0
  54. data/lib/squib/dsl/save_pdf.rb +50 -0
  55. data/lib/squib/dsl/save_png.rb +44 -0
  56. data/lib/squib/dsl/save_sheet.rb +53 -0
  57. data/lib/squib/dsl/showcase.rb +43 -0
  58. data/lib/squib/dsl/star.rb +37 -0
  59. data/lib/squib/dsl/svg.rb +62 -0
  60. data/lib/squib/dsl/text.rb +54 -0
  61. data/lib/squib/dsl/text_embed.rb +78 -0
  62. data/lib/squib/dsl/triangle.rb +35 -0
  63. data/lib/squib/{api → dsl}/units.rb +10 -0
  64. data/lib/squib/dsl/xlsx.rb +40 -0
  65. data/lib/squib/dsl/yaml.rb +40 -0
  66. data/lib/squib/errors_warnings/warn_unexpected_params.rb +14 -0
  67. data/lib/squib/graphics/save_images.rb +3 -3
  68. data/lib/squib/graphics/save_sprue.rb +14 -2
  69. data/lib/squib/graphics/text.rb +37 -9
  70. data/lib/squib/import/csv_importer.rb +45 -0
  71. data/lib/squib/import/quantity_exploder.rb +18 -0
  72. data/lib/squib/import/xlsx_importer.rb +28 -0
  73. data/lib/squib/import/yaml_importer.rb +30 -0
  74. data/lib/squib/layout_parser.rb +24 -7
  75. data/lib/squib/sprues/crop_line.rb +6 -6
  76. data/lib/squib/sprues/crop_line_dash.rb +6 -6
  77. data/lib/squib/sprues/sprue.rb +16 -14
  78. data/lib/squib/version.rb +2 -1
  79. data/samples/autoscale_font/_autoscale_font.rb +77 -8
  80. data/samples/colors/_switch_color.rb +2 -2
  81. data/samples/data/_excel.rb +1 -1
  82. data/samples/ranges/_ranges.rb +1 -1
  83. data/samples/saves/_save_filenames.rb +4 -0
  84. data/samples/saves/_save_pdf.rb +1 -1
  85. data/samples/saves/_saves.rb +2 -1
  86. data/samples/shapes/_draw_shapes.rb +2 -2
  87. data/samples/sprues/_builtin_sprues.rb +1 -0
  88. data/samples/sprues/_fold_sheet.rb +4 -1
  89. data/samples/text/_text.rb +6 -1
  90. data/samples/text/_text_options.rb +2 -1
  91. data/samples/units/_cells.rb +51 -0
  92. data/samples/units/_shorthands.rb +48 -0
  93. data/samples/units/_units.rb +7 -0
  94. data/squib.gemspec +18 -12
  95. metadata +144 -58
  96. data/.travis.yml +0 -17
  97. data/appveyor.yml +0 -25
  98. data/lib/squib/api/background.rb +0 -15
  99. data/lib/squib/api/data.rb +0 -137
  100. data/lib/squib/api/image.rb +0 -49
  101. data/lib/squib/api/save.rb +0 -83
  102. data/lib/squib/api/shapes.rb +0 -124
  103. data/lib/squib/api/text.rb +0 -25
  104. data/lib/squib/api/text_embed.rb +0 -71
@@ -1,17 +0,0 @@
1
- language: ruby
2
- sudo: true # need this for libgirepository1.0-dev
3
- addons:
4
- apt:
5
- packages:
6
- - libgirepository1.0-dev # for gobject-introspection
7
- rvm:
8
- - 2.4.2
9
- - 2.5.3
10
- - 2.6.3
11
- - ruby-head
12
- before_install:
13
- - gem update --system
14
- - gem install bundler
15
- matrix:
16
- allow_failures:
17
- - rvm: ruby-head
@@ -1,25 +0,0 @@
1
- version: '{build}'
2
-
3
- skip_tags: true
4
-
5
- environment:
6
- matrix:
7
- - ruby_version: "24"
8
- - ruby_version: "24-x64"
9
- - ruby_version: "25"
10
- - ruby_version: "25-x64"
11
- - ruby_version: "26"
12
- - ruby_version: "26-x64"
13
-
14
- install:
15
- - SET PATH=C:\Ruby%ruby_version%\bin;%PATH%
16
- - ruby --version
17
- - gem --version
18
- - gem install bundler
19
- - bundler --version
20
- - bundle install
21
-
22
- test_script:
23
- - rake
24
-
25
- build: off
@@ -1,15 +0,0 @@
1
- require_relative '../args/card_range'
2
- require_relative '../args/draw'
3
-
4
- module Squib
5
- class Deck
6
-
7
- # DSL method. See http://squib.readthedocs.io
8
- def background(opts = {})
9
- range = Args::CardRange.new(opts[:range], deck_size: size)
10
- draw = Args::Draw.new(custom_colors).load!(opts, expand_by: size, layout: layout, dpi: dpi)
11
- range.each { |i| @cards[i].background(draw.color[i]) }
12
- end
13
-
14
- end
15
- end
@@ -1,137 +0,0 @@
1
- require 'roo'
2
- require 'csv'
3
- require 'yaml'
4
- require_relative '../args/input_file'
5
- require_relative '../args/import'
6
- require_relative '../args/csv_opts'
7
- require_relative '../import/data_frame'
8
-
9
- module Squib
10
-
11
- # DSL method. See http://squib.readthedocs.io
12
- def xlsx(opts = {})
13
- input = Args::InputFile.new(file: 'deck.xlsx').load!(opts)
14
- import = Args::Import.new.load!(opts)
15
- s = Roo::Excelx.new(input.file[0])
16
- s.default_sheet = s.sheets[input.sheet[0]]
17
- data = Squib::DataFrame.new
18
- s.first_column.upto(s.last_column) do |col|
19
- header = s.cell(s.first_row, col).to_s
20
- header.strip! if import.strip?
21
- data[header] = []
22
- (s.first_row + 1).upto(s.last_row) do |row|
23
- cell = s.cell(row, col)
24
- # Roo hack for avoiding unnecessary .0's on whole integers (https://github.com/roo-rb/roo/issues/139)
25
- cell = s.excelx_value(row, col) if s.excelx_type(row, col) == [:numeric_or_formula, 'General']
26
- cell.strip! if cell.respond_to?(:strip) && import.strip?
27
- cell = yield(header, cell) if block_given?
28
- data[header] << cell
29
- end# row
30
- end# col
31
- explode_quantities(data, import.explode)
32
- end# xlsx
33
- module_function :xlsx
34
-
35
- # DSL method. See http://squib.readthedocs.io
36
- def csv(opts = {})
37
- # TODO refactor all this out to separate methods, and its own class
38
- import = Args::Import.new.load!(opts)
39
- file = Args::InputFile.new(file: 'deck.csv').load!(opts).file[0]
40
- data = opts.key?(:data) ? opts[:data] : File.read(file)
41
- csv_opts = Args::CSV_Opts.new(opts)
42
- table = CSV.parse(data, csv_opts.to_hash)
43
- check_duplicate_csv_headers(table)
44
- hash = Squib::DataFrame.new
45
- table.headers.each do |header|
46
- new_header = header.to_s
47
- new_header = new_header.strip if import.strip?
48
- hash[new_header] ||= table[header]
49
- end
50
- if import.strip?
51
- new_hash = Squib::DataFrame.new
52
- hash.each do |header, col|
53
- new_hash[header] = col.map do |str|
54
- str = str.strip if str.respond_to?(:strip)
55
- str
56
- end
57
- end
58
- hash = new_hash
59
- end
60
- if block_given?
61
- hash.each do |header, col|
62
- col.map! do |val|
63
- yield(header, val)
64
- end
65
- end
66
- end
67
- return explode_quantities(hash, import.explode)
68
- end
69
- module_function :csv
70
-
71
- # DSL method. See http://squib.readthedocs.io
72
- def yaml(opts = {})
73
- input = Args::InputFile.new(file: 'deck.yml').load!(opts)
74
- import = Args::Import.new.load!(opts)
75
- yml = YAML.load_file(input.file[0])
76
- data = Squib::DataFrame.new
77
- # Get a universal list of keys to ensure everything is covered.
78
- keys = yml.map { |c| c.keys}.flatten.uniq
79
- keys.each { |k| data[k] = [] } #init arrays
80
- yml.each do |card|
81
- # nil value if key isn't set.
82
- keys.each { |k| data[k] << card[k] }
83
- end
84
- if block_given?
85
- data.each do |header, col|
86
- col.map! do |val|
87
- yield(header, val)
88
- end
89
- end
90
- end
91
- explode_quantities(data, import.explode)
92
- end
93
- module_function :yaml
94
-
95
- # Check if the given CSV table has duplicate columns, and throw a warning
96
- # @api private
97
- def check_duplicate_csv_headers(table)
98
- if table.headers.size != table.headers.uniq.size
99
- dups = table.headers.select{|e| table.headers.count(e) > 1 }
100
- Squib.logger.warn "CSV duplicated the following column keys: #{dups.join(',')}"
101
- end
102
- end
103
- module_function :check_duplicate_csv_headers
104
-
105
- # @api private
106
- def explode_quantities(data, qty)
107
- return data unless data.col? qty.to_s.strip
108
- qtys = data[qty]
109
- new_data = Squib::DataFrame.new
110
- data.each do |col, arr|
111
- new_data[col] = []
112
- qtys.each_with_index do |qty, index|
113
- qty.to_i.times { new_data[col] << arr[index] }
114
- end
115
- end
116
- return new_data
117
- end
118
- module_function :explode_quantities
119
-
120
- class Deck
121
-
122
- # DSL method. See http://squib.readthedocs.io
123
- def xlsx(opts = {})
124
- Squib.xlsx(opts)
125
- end
126
-
127
- # DSL method. See http://squib.readthedocs.io
128
- def csv(opts = {})
129
- Squib.csv(opts)
130
- end
131
-
132
- # DSL method. See http://squib.readthedocs.io
133
- def yaml(opts = {})
134
- Squib.yaml(opts)
135
- end
136
- end
137
- end
@@ -1,49 +0,0 @@
1
- require_relative '../args/card_range'
2
- require_relative '../args/paint'
3
- require_relative '../args/scale_box'
4
- require_relative '../args/transform'
5
- require_relative '../args/input_file'
6
- require_relative '../args/svg_special'
7
-
8
- module Squib
9
- class Deck
10
-
11
- # DSL method. See http://squib.readthedocs.io
12
- def png(opts = {})
13
- Dir.chdir(img_dir) do
14
- range = Args::CardRange.new(opts[:range], deck_size: size)
15
- paint = Args::Paint.new(custom_colors).load!(opts, expand_by: size, layout: layout)
16
- box = Args::ScaleBox.new(self).load!(opts, expand_by: size, layout: layout, dpi: dpi)
17
- trans = Args::Transform.new(self).load!(opts, expand_by: size, layout: layout, dpi: dpi)
18
- ifile = Args::InputFile.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
19
- @progress_bar.start('Loading PNG(s)', range.size) do |bar|
20
- range.each do |i|
21
- @cards[i].png(ifile[i].file, box[i], paint[i], trans[i])
22
- bar.increment
23
- end
24
- end
25
- end
26
- end
27
-
28
- # DSL method. See http://squib.readthedocs.io
29
- def svg(opts = {})
30
- Dir.chdir(img_dir) do
31
- range = Args::CardRange.new(opts[:range], deck_size: size)
32
- paint = Args::Paint.new(custom_colors).load!(opts, expand_by: size, layout: layout)
33
- box = Args::ScaleBox.new(self).load!(opts, expand_by: size, layout: layout, dpi: dpi)
34
- trans = Args::Transform.new(self).load!(opts, expand_by: size, layout: layout, dpi: dpi)
35
- ifile = Args::InputFile.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
36
- svg_args = Args::SvgSpecial.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
37
- @progress_bar.start('Loading SVG(s)', range.size) do |bar|
38
- range.each do |i|
39
- if svg_args.render?(i)
40
- @cards[i].svg(ifile[i].file, svg_args[i], box[i], paint[i], trans[i])
41
- end
42
- bar.increment
43
- end
44
- end
45
- end
46
- end
47
-
48
- end
49
- end
@@ -1,83 +0,0 @@
1
- require_relative '../args/card_range'
2
- require_relative '../args/hand_special'
3
- require_relative '../args/save_batch'
4
- require_relative '../args/sheet'
5
- require_relative '../args/showcase_special'
6
- require_relative '../args/sprue_file'
7
- require_relative '../graphics/save_pdf'
8
- require_relative '../graphics/save_sprue'
9
- require_relative '../sprues/sprue'
10
-
11
- module Squib
12
- class Deck
13
-
14
- # DSL method. See http://squib.readthedocs.io
15
- def save(opts = {})
16
- save_png(opts) if Array(opts[:format]).include? :png
17
- save_pdf(opts) if Array(opts[:format]).include? :pdf
18
- self
19
- end
20
-
21
- # DSL method. See http://squib.readthedocs.io
22
- def save_pdf(opts = {})
23
- range = Args::CardRange.new(opts[:range], deck_size: size)
24
- sheet = Args::Sheet.new(custom_colors, { file: 'output.pdf' }).load!(opts, expand_by: size, layout: layout, dpi: dpi)
25
- sprue_file = Args::SprueFile.new.load!(opts, expand_by: size)
26
-
27
- if sprue_file.sprue.nil?
28
- Graphics::SavePDF.new(self).render_pdf(range, sheet)
29
- else
30
- tmpl = Sprue.load sprue_file.sprue, dpi
31
- Graphics::SaveSpruePDF.
32
- new(self, tmpl, sheet).
33
- render_sheet(range)
34
- end
35
- end
36
-
37
- # DSL method. See http://squib.readthedocs.io
38
- def save_png(opts = {})
39
- range = Args::CardRange.new(opts[:range], deck_size: size)
40
- batch = Args::SaveBatch.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
41
- @progress_bar.start("Saving PNGs to #{batch.summary}", size) do |bar|
42
- range.each do |i|
43
- @cards[i].save_png(batch[i])
44
- bar.increment
45
- end
46
- end
47
- end
48
-
49
- # DSL method. See http://squib.readthedocs.io
50
- def save_sheet(opts = {})
51
- range = Args::CardRange.new(opts[:range], deck_size: size)
52
- batch = Args::SaveBatch.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
53
- sheet = Args::Sheet.new(custom_colors, { margin: 0 }, size).load!(opts, expand_by: size, layout: layout, dpi: dpi)
54
- sprue_file = Args::SprueFile.new.load!(opts, expand_by: size)
55
-
56
- if sprue_file.sprue.nil?
57
- render_sheet(range, batch, sheet)
58
- else
59
- tmpl = Sprue.load sprue_file.sprue, dpi
60
- Graphics::SaveSpruePNG.
61
- new(self, tmpl, sheet).
62
- render_sheet(range)
63
- end
64
- end
65
-
66
- # DSL method. See http://squib.readthedocs.io
67
- def showcase(opts = {})
68
- range = Args::CardRange.new(opts[:range], deck_size: size)
69
- showcase = Args::ShowcaseSpecial.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
70
- sheet = Args::Sheet.new(custom_colors, { file: 'showcase.png' }).load!(opts, expand_by: size, layout: layout, dpi: dpi)
71
- render_showcase(range, sheet, showcase)
72
- end
73
-
74
- # DSL method. See http://squib.readthedocs.io
75
- def hand(opts = {})
76
- range = Args::CardRange.new(opts[:range], deck_size: size)
77
- hand = Args::HandSpecial.new(height).load!(opts, expand_by: size, layout: layout, dpi: dpi)
78
- sheet = Args::Sheet.new(custom_colors, { file: 'hand.png', trim_radius: 0 }).load!(opts, expand_by: size, layout: layout, dpi: dpi)
79
- render_hand(range, sheet, hand)
80
- end
81
-
82
- end
83
- end
@@ -1,124 +0,0 @@
1
- require_relative '../args/box'
2
- require_relative '../args/draw'
3
- require_relative '../args/card_range'
4
- require_relative '../args/transform'
5
- require_relative '../args/coords'
6
-
7
- module Squib
8
- class Deck
9
-
10
- # DSL method. See http://squib.readthedocs.io
11
- def rect(opts = {})
12
- range = Args::CardRange.new(opts[:range], deck_size: size)
13
- box = Args::Box.new(self).load!(opts, expand_by: size, layout: layout, dpi: dpi)
14
- draw = Args::Draw.new(custom_colors).load!(opts, expand_by: size, layout: layout, dpi: dpi)
15
- trans = Args::Transform.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
16
- range.each { |i| @cards[i].rect(box[i], draw[i], trans[i]) }
17
- end
18
-
19
- # DSL method. See http://squib.readthedocs.io
20
- def circle(opts = {})
21
- range = Args::CardRange.new(opts[:range], deck_size: size)
22
- coords = Args::Coords.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
23
- draw = Args::Draw.new(custom_colors).load!(opts, expand_by: size, layout: layout, dpi: dpi)
24
- range.each { |i| @cards[i].circle(coords[i], draw[i]) }
25
- end
26
-
27
- # DSL method. See http://squib.readthedocs.io
28
- def ellipse(opts = {})
29
- range = Args::CardRange.new(opts[:range], deck_size: size)
30
- draw = Args::Draw.new(custom_colors).load!(opts, expand_by: size, layout: layout, dpi: dpi)
31
- box = Args::Box.new(self, { width: '0.25in', height: '0.25in' }).load!(opts, expand_by: size, layout: layout, dpi: dpi)
32
- trans = Args::Transform.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
33
- range.each { |i| @cards[i].ellipse(box[i], draw[i], trans[i]) }
34
- end
35
-
36
- # DSL method. See http://squib.readthedocs.io
37
- def grid(opts = {})
38
- range = Args::CardRange.new(opts[:range], deck_size: size)
39
- draw = Args::Draw.new(custom_colors).load!(opts, expand_by: size, layout: layout, dpi: dpi)
40
- box = Args::Box.new(self).load!(opts, expand_by: size, layout: layout, dpi: dpi)
41
- range.each { |i| @cards[i].grid(box[i], draw[i]) }
42
- end
43
-
44
- # DSL method. See http://squib.readthedocs.io
45
- def triangle(opts = {})
46
- range = Args::CardRange.new(opts[:range], deck_size: size)
47
- draw = Args::Draw.new(custom_colors).load!(opts, expand_by: size, layout: layout, dpi: dpi)
48
- coords = Args::Coords.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
49
- range.each { |i| @cards[i].triangle(coords[i], draw[i]) }
50
- end
51
-
52
- # DSL method. See http://squib.readthedocs.io
53
- def line(opts = {})
54
- range = Args::CardRange.new(opts[:range], deck_size: size)
55
- draw = Args::Draw.new(custom_colors).load!(opts, expand_by: size, layout: layout, dpi: dpi)
56
- coords = Args::Coords.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
57
- range.each { |i| @cards[i].line(coords[i], draw[i]) }
58
- end
59
-
60
- # DSL method. See http://squib.readthedocs.io
61
- def curve(opts = {})
62
- range = Args::CardRange.new(opts[:range], deck_size: size)
63
- draw = Args::Draw.new(custom_colors).load!(opts, expand_by: size, layout: layout, dpi: dpi)
64
- coords = Args::Coords.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
65
- range.each { |i| @cards[i].curve(coords[i], draw[i]) }
66
- end
67
-
68
- # DSL method. See http://squib.readthedocs.io
69
- def star(opts = {})
70
- range = Args::CardRange.new(opts[:range], deck_size: size)
71
- draw = Args::Draw.new(custom_colors).load!(opts, expand_by: size, layout: layout, dpi: dpi)
72
- coords = Args::Coords.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
73
- trans = Args::Transform.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
74
- range.each { |i| @cards[i].star(coords[i], trans[i], draw[i]) }
75
- end
76
-
77
- # DSL method. See http://squib.readthedocs.io
78
- def polygon(opts = {})
79
- range = Args::CardRange.new(opts[:range], deck_size: size)
80
- draw = Args::Draw.new(custom_colors).load!(opts, expand_by: size, layout: layout, dpi: dpi)
81
- coords = Args::Coords.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
82
- trans = Args::Transform.new.load!(opts, expand_by: size, layout: layout, dpi: dpi)
83
- range.each { |i| @cards[i].polygon(coords[i], trans[i], draw[i]) }
84
- end
85
-
86
- # DSL method. See http://squib.readthedocs.io
87
- def safe_zone(opts = {})
88
- safe_defaults = {
89
- margin: '0.25in',
90
- radius: '0.125in',
91
- stroke_color: :blue,
92
- fill_color: '#0000',
93
- stroke_width: 1.0,
94
- dash: '3 3',
95
- }
96
- new_opts = safe_defaults.merge(opts)
97
- margin = Args::UnitConversion.parse new_opts[:margin]
98
- new_opts[:x] = margin
99
- new_opts[:y] = margin
100
- new_opts[:width] = width - (2 * margin)
101
- new_opts[:height] = height - (2 * margin)
102
- rect new_opts
103
- end
104
-
105
- # DSL method. See http://squib.readthedocs.io
106
- def cut_zone(opts = {})
107
- safe_defaults = {
108
- margin: '0.125in',
109
- radius: '0.125in',
110
- stroke_color: :red,
111
- fill_color: '#0000',
112
- stroke_width: 2.0,
113
- }
114
- new_opts = safe_defaults.merge(opts)
115
- margin = Args::UnitConversion.parse new_opts[:margin]
116
- new_opts[:x] = margin
117
- new_opts[:y] = margin
118
- new_opts[:width] = width - (2 * margin)
119
- new_opts[:height] = height - (2 * margin)
120
- rect new_opts
121
- end
122
-
123
- end
124
- end