lib/squib/args/sheet.rb in squib-0.15.3 vs lib/squib/args/sheet.rb in squib-0.16.0.pre.preview1
- old
+ new
@@ -1,172 +1,170 @@
require 'cairo'
require_relative 'arg_loader'
require_relative 'color_validator'
require_relative 'dir_validator'
-module Squib
- # @api private
- module Args
+module Squib::Args
+ module_function def extract_sheet(opts, deck, dsl_method_defaults = {})
+ Sheet.new(dsl_method_defaults).extract! opts, deck
+ end
- class Sheet
- include ArgLoader
- include ColorValidator
- include DirValidator
+ class Sheet
+ include ArgLoader
+ include ColorValidator
+ include DirValidator
- def initialize(custom_colors = {}, dsl_method_defaults = {}, deck_size = 1, dpi = 300)
- @custom_colors = custom_colors
- @dsl_method_defaults = dsl_method_defaults
- @deck_size = deck_size
- @dpi = dpi
- end
+ def initialize(dsl_method_defaults = {})
+ @dsl_method_defaults = dsl_method_defaults
+ end
- def self.parameters
- {
- count_format: '%02d',
- crop_margin_bottom: 0,
- crop_margin_left: 0,
- crop_margin_right: 0,
- crop_margin_top: 0,
- crop_marks: false,
- crop_stroke_color: :black,
- crop_stroke_dash: '',
- crop_stroke_width: 1.5,
- dir: '_output',
- file: 'sheet.png',
- fill_color: :white,
- gap: 0,
- height: 2550,
- margin: 75,
- prefix: 'sheet_',
- rows: :infinite,
- columns: 5,
- trim_radius: 0,
- trim: 0,
- width: 3300,
- range: :all,
- rtl: false,
- }
- end
+ def self.parameters
+ {
+ count_format: '%02d',
+ crop_margin_bottom: 0,
+ crop_margin_left: 0,
+ crop_margin_right: 0,
+ crop_margin_top: 0,
+ crop_marks: false,
+ crop_stroke_color: :black,
+ crop_stroke_dash: '',
+ crop_stroke_width: 1.5,
+ dir: '_output',
+ file: 'sheet.png',
+ fill_color: :white,
+ gap: 0,
+ height: 2550,
+ margin: 75,
+ prefix: 'sheet_',
+ suffix: '',
+ rows: :infinite,
+ columns: 5,
+ trim_radius: 0,
+ trim: 0,
+ width: 3300,
+ range: :all,
+ rtl: false,
+ }
+ end
- def self.expanding_parameters
- [] # none of them
- end
+ def self.expanding_parameters
+ [] # none of them
+ end
- def self.params_with_units
- [ :crop_margin_bottom, :crop_margin_left, :crop_margin_right,
- :crop_margin_top, :gap, :height, :margin, :trim_radius, :trim,
- :width
- ]
- end
+ def self.params_with_units
+ [ :crop_margin_bottom, :crop_margin_left, :crop_margin_right,
+ :crop_margin_top, :gap, :height, :margin, :trim_radius, :trim,
+ :width
+ ]
+ end
- def validate_crop_stroke_dash(arg)
- arg.to_s.split.collect do |x|
- UnitConversion.parse(x, @dpi).to_f
- end
+ def validate_crop_stroke_dash(arg)
+ arg.to_s.split.collect do |x|
+ UnitConversion.parse(x, @deck.dpi, @deck.cell_px).to_f
end
+ end
- def validate_crop_marks(arg)
- arg.to_s.downcase.to_sym unless arg == false
- end
+ def validate_crop_marks(arg)
+ arg.to_s.downcase.to_sym unless arg == false
+ end
- def validate_fill_color(arg)
- colorify(arg, @custom_colors)
- end
+ def validate_fill_color(arg)
+ colorify(arg, @deck.custom_colors)
+ end
- def validate_dir(arg)
- ensure_dir_created(arg)
- end
+ def validate_dir(arg)
+ ensure_dir_created(arg)
+ end
- def validate_columns(arg)
- raise 'columns must be an integer' unless arg.respond_to? :to_i
- arg.to_i
- end
+ def validate_columns(arg)
+ raise 'columns must be an integer' unless arg.respond_to? :to_i
+ arg.to_i
+ end
- def validate_rows(arg)
- raise 'columns must be an integer' unless columns.respond_to? :to_i
- count = if range == :all
- @deck_size
- else
- count = range.to_a.length
- end
- return 1 if count <= columns
- return arg if arg.respond_to? :to_i
- (count.to_f / columns.to_f).ceil
- end
+ def validate_rows(arg)
+ raise 'columns must be an integer' unless columns.respond_to? :to_i
+ count = if range == :all
+ @deck.size
+ else
+ count = range.to_a.length
+ end
+ return 1 if count <= columns
+ return arg if arg.respond_to? :to_i
+ (count.to_f / columns.to_f).ceil
+ end
- def full_filename(i=nil)
- if i.nil?
- "#{dir}/#{file}"
- else
- "#{dir}/#{prefix}#{count_format % i}.png"
- end
+ def full_filename(i=nil)
+ if i.nil?
+ "#{dir}/#{file}"
+ else
+ "#{dir}/#{prefix}#{count_format % i}#{suffix}.png"
end
+ end
- def crop_coords(x, y, deck_w, deck_h)
- case crop_marks
- when false
- []
- when :full
- [
- {
- # Vertical, Left
- x1: x + trim + crop_margin_left, y1: 0,
- x2: x + trim + crop_margin_left, y2: height - margin + 1
- },
- {
- # Vertical, Right
- x1: x + deck_w - trim - crop_margin_right, y1: 0,
- x2: x + deck_w - trim - crop_margin_right, y2: height - margin + 1
- },
- {
- # Horizontal, Top
- x1: 0 , y1: y + trim + crop_margin_top,
- x2: width - margin + 1, y2: y + trim + crop_margin_top
- },
- {
- # Horizontal, Bottom
- x1: 0 , y1: y + deck_h - trim - crop_margin_bottom,
- x2: width - margin + 1, y2: y + deck_h - trim - crop_margin_bottom
- },
- ]
- else # e.g. :margin
- [
- { # Vertical, Upper-left
- x1: x + trim + crop_margin_left, y1: 0,
- x2: x + trim + crop_margin_left, y2: margin - 1
- },
- { # Vertical , Upper-right
- x1: x + deck_w - trim - crop_margin_right, y1: 0,
- x2: x + deck_w - trim - crop_margin_right, y2: margin - 1
- },
- { # Vertical , Lower-left
- x1: x + trim + crop_margin_left, y1: height,
- x2: x + trim + crop_margin_left, y2: height - margin + 1
- },
- { # Vertical , Lower-right
- x1: x + deck_w - trim - crop_margin_right, y1: height,
- x2: x + deck_w - trim - crop_margin_right, y2: height - margin + 1
- },
- { # Horizontal, Upper-left
- x1: 0 , y1: y + trim + crop_margin_top,
- x2: margin - 1, y2: y + trim + crop_margin_top
- },
- { # Horizontal, Upper-Right
- x1: width , y1: y + trim + crop_margin_top,
- x2: width - margin + 1, y2: y + trim + crop_margin_top
- },
- { # Horizontal, Lower-Left
- x1: 0 , y1: y + deck_h - trim - crop_margin_bottom,
- x2: margin - 1, y2: y + deck_h - trim - crop_margin_bottom
- },
- { # Horizontal, Lower-Right
- x1: width, y1: y + deck_h - trim - crop_margin_bottom,
- x2: width - margin + 1, y2: y + deck_h - trim - crop_margin_bottom
- },
- ]
- end
+ def crop_coords(x, y, deck_w, deck_h)
+ case crop_marks
+ when false
+ []
+ when :full
+ [
+ {
+ # Vertical, Left
+ x1: x + trim + crop_margin_left, y1: 0,
+ x2: x + trim + crop_margin_left, y2: height - margin + 1
+ },
+ {
+ # Vertical, Right
+ x1: x + deck_w - trim - crop_margin_right, y1: 0,
+ x2: x + deck_w - trim - crop_margin_right, y2: height - margin + 1
+ },
+ {
+ # Horizontal, Top
+ x1: 0 , y1: y + trim + crop_margin_top,
+ x2: width - margin + 1, y2: y + trim + crop_margin_top
+ },
+ {
+ # Horizontal, Bottom
+ x1: 0 , y1: y + deck_h - trim - crop_margin_bottom,
+ x2: width - margin + 1, y2: y + deck_h - trim - crop_margin_bottom
+ },
+ ]
+ else # e.g. :margin
+ [
+ { # Vertical, Upper-left
+ x1: x + trim + crop_margin_left, y1: 0,
+ x2: x + trim + crop_margin_left, y2: margin - 1
+ },
+ { # Vertical , Upper-right
+ x1: x + deck_w - trim - crop_margin_right, y1: 0,
+ x2: x + deck_w - trim - crop_margin_right, y2: margin - 1
+ },
+ { # Vertical , Lower-left
+ x1: x + trim + crop_margin_left, y1: height,
+ x2: x + trim + crop_margin_left, y2: height - margin + 1
+ },
+ { # Vertical , Lower-right
+ x1: x + deck_w - trim - crop_margin_right, y1: height,
+ x2: x + deck_w - trim - crop_margin_right, y2: height - margin + 1
+ },
+ { # Horizontal, Upper-left
+ x1: 0 , y1: y + trim + crop_margin_top,
+ x2: margin - 1, y2: y + trim + crop_margin_top
+ },
+ { # Horizontal, Upper-Right
+ x1: width , y1: y + trim + crop_margin_top,
+ x2: width - margin + 1, y2: y + trim + crop_margin_top
+ },
+ { # Horizontal, Lower-Left
+ x1: 0 , y1: y + deck_h - trim - crop_margin_bottom,
+ x2: margin - 1, y2: y + deck_h - trim - crop_margin_bottom
+ },
+ { # Horizontal, Lower-Right
+ x1: width, y1: y + deck_h - trim - crop_margin_bottom,
+ x2: width - margin + 1, y2: y + deck_h - trim - crop_margin_bottom
+ },
+ ]
end
-
end
end
+
end