22 changed files with 541 additions and 449 deletions
@ -1,49 +0,0 @@ |
|||||||
require_relative '../args/card_range' |
|
||||||
require_relative '../args/paint' |
|
||||||
require_relative '../args/scale_box' |
|
||||||
require_relative '../args/transform' |
|
||||||
require_relative '../args/input_file' |
|
||||||
require_relative '../args/svg_special' |
|
||||||
|
|
||||||
module Squib |
|
||||||
class Deck |
|
||||||
|
|
||||||
# DSL method. See http://squib.readthedocs.io |
|
||||||
def png(opts = {}) |
|
||||||
Dir.chdir(img_dir) do |
|
||||||
range = Args::CardRange.new(opts[:range], deck_size: size) |
|
||||||
paint = Args::Paint.new(custom_colors).load!(opts, expand_by: size, layout: layout) |
|
||||||
box = Args::ScaleBox.new(self).load!(opts, expand_by: size, layout: layout, dpi: dpi) |
|
||||||
trans = Args::Transform.new(self).load!(opts, expand_by: size, layout: layout, dpi: dpi) |
|
||||||
ifile = Args::InputFile.new.load!(opts, expand_by: size, layout: layout, dpi: dpi) |
|
||||||
@progress_bar.start('Loading PNG(s)', range.size) do |bar| |
|
||||||
range.each do |i| |
|
||||||
@cards[i].png(ifile[i].file, box[i], paint[i], trans[i]) |
|
||||||
bar.increment |
|
||||||
end |
|
||||||
end |
|
||||||
end |
|
||||||
end |
|
||||||
|
|
||||||
# DSL method. See http://squib.readthedocs.io |
|
||||||
def svg(opts = {}) |
|
||||||
Dir.chdir(img_dir) do |
|
||||||
range = Args::CardRange.new(opts[:range], deck_size: size) |
|
||||||
paint = Args::Paint.new(custom_colors).load!(opts, expand_by: size, layout: layout) |
|
||||||
box = Args::ScaleBox.new(self).load!(opts, expand_by: size, layout: layout, dpi: dpi) |
|
||||||
trans = Args::Transform.new(self).load!(opts, expand_by: size, layout: layout, dpi: dpi) |
|
||||||
ifile = Args::InputFile.new.load!(opts, expand_by: size, layout: layout, dpi: dpi) |
|
||||||
svg_args = Args::SvgSpecial.new.load!(opts, expand_by: size, layout: layout, dpi: dpi) |
|
||||||
@progress_bar.start('Loading SVG(s)', range.size) do |bar| |
|
||||||
range.each do |i| |
|
||||||
if svg_args.render?(i) |
|
||||||
@cards[i].svg(ifile[i].file, svg_args[i], box[i], paint[i], trans[i]) |
|
||||||
end |
|
||||||
bar.increment |
|
||||||
end |
|
||||||
end |
|
||||||
end |
|
||||||
end |
|
||||||
|
|
||||||
end |
|
||||||
end |
|
||||||
@ -1,37 +1,35 @@ |
|||||||
require_relative 'arg_loader' |
require_relative 'arg_loader' |
||||||
|
|
||||||
module Squib |
module Squib::Args |
||||||
# @api private |
module_function def extract_input_file(opts, deck, dsl_method_default = {}) |
||||||
module Args |
InputFile.new(dsl_method_default).extract!(opts, deck) |
||||||
|
end |
||||||
class InputFile |
|
||||||
include ArgLoader |
|
||||||
|
|
||||||
def initialize(dsl_method_default = {}) |
|
||||||
@dsl_method_default = dsl_method_default |
|
||||||
end |
|
||||||
|
|
||||||
def self.parameters |
class InputFile |
||||||
{ file: nil, |
include ArgLoader |
||||||
sheet: 0, |
|
||||||
} |
|
||||||
end |
|
||||||
|
|
||||||
def self.expanding_parameters |
def initialize(dsl_method_default = {}) |
||||||
parameters.keys # all of them |
@dsl_method_default = dsl_method_default |
||||||
end |
end |
||||||
|
|
||||||
def self.params_with_units |
def self.parameters |
||||||
[] # none of them |
{ file: nil, |
||||||
end |
sheet: 0, |
||||||
|
} |
||||||
|
end |
||||||
|
|
||||||
def validate_file(arg, _i) |
def self.expanding_parameters |
||||||
return nil if arg.nil? |
parameters.keys # all of them |
||||||
raise "File #{File.expand_path(arg)} does not exist!" unless File.exists?(arg) |
end |
||||||
File.expand_path(arg) |
|
||||||
end |
|
||||||
|
|
||||||
|
def self.params_with_units |
||||||
|
[] # none of them |
||||||
end |
end |
||||||
|
|
||||||
|
def validate_file(arg, _i) |
||||||
|
return nil if arg.nil? |
||||||
|
raise "File #{File.expand_path(arg)} does not exist!" unless File.exists?(arg) |
||||||
|
File.expand_path(arg) |
||||||
|
end |
||||||
end |
end |
||||||
end |
end |
||||||
|
|||||||
@ -1,53 +1,50 @@ |
|||||||
require_relative 'arg_loader' |
require_relative 'arg_loader' |
||||||
|
|
||||||
module Squib |
module Squib::Args |
||||||
# @api private |
module_function def extract_scale_box(opts, deck) |
||||||
module Args |
ScaleBox.new.extract!(opts, deck) |
||||||
|
end |
||||||
class ScaleBox |
|
||||||
include ArgLoader |
|
||||||
|
|
||||||
def initialize(deck) |
class ScaleBox |
||||||
@deck = deck |
include ArgLoader |
||||||
end |
|
||||||
|
|
||||||
def self.parameters |
def self.parameters |
||||||
{ x: 0, y: 0, |
{ |
||||||
width: :native, height: :native |
x: 0, y: 0, |
||||||
} |
width: :native, height: :native |
||||||
end |
} |
||||||
|
end |
||||||
|
|
||||||
def self.expanding_parameters |
def self.expanding_parameters |
||||||
parameters.keys # all of them |
parameters.keys # all of them |
||||||
end |
end |
||||||
|
|
||||||
def self.params_with_units |
def self.params_with_units |
||||||
parameters.keys # all of them |
parameters.keys # all of them |
||||||
end |
end |
||||||
|
|
||||||
def validate_width(arg, i) |
def validate_width(arg, i) |
||||||
return @deck.width if arg.to_s == 'deck' |
return @deck.width if arg.to_s == 'deck' |
||||||
return :native if arg.to_s == 'native' |
return :native if arg.to_s == 'native' |
||||||
return arg if arg.respond_to? :to_f |
return arg if arg.respond_to? :to_f |
||||||
if arg.to_s == 'scale' |
if arg.to_s == 'scale' |
||||||
raise 'if width is :scale, height must be a number' unless height[i].respond_to? :to_f |
raise 'if width is :scale, height must be a number' unless height[i].respond_to? :to_f |
||||||
return arg |
return arg |
||||||
end |
|
||||||
raise 'width must be a number, :scale, :native, or :deck' |
|
||||||
end |
end |
||||||
|
raise 'width must be a number, :scale, :native, or :deck' |
||||||
|
end |
||||||
|
|
||||||
def validate_height(arg, i) |
def validate_height(arg, i) |
||||||
return @deck.height if arg.to_s == 'deck' |
return @deck.height if arg.to_s == 'deck' |
||||||
return :native if arg.to_s == 'native' |
return :native if arg.to_s == 'native' |
||||||
return arg if arg.respond_to? :to_f |
return arg if arg.respond_to? :to_f |
||||||
if arg.to_s == 'scale' |
if arg.to_s == 'scale' |
||||||
raise 'if height is \'scale\', width must be a number' unless width[i].respond_to? :to_f |
raise 'if height is \'scale\', width must be a number' unless width[i].respond_to? :to_f |
||||||
return arg |
return arg |
||||||
end |
|
||||||
raise 'height must be a number, :scale, :native, or :deck' |
|
||||||
end |
end |
||||||
|
raise 'height must be a number, :scale, :native, or :deck' |
||||||
end |
end |
||||||
|
|
||||||
end |
end |
||||||
|
|
||||||
end |
end |
||||||
|
|||||||
@ -1,37 +1,37 @@ |
|||||||
require_relative 'arg_loader' |
require_relative 'arg_loader' |
||||||
|
|
||||||
module Squib |
module Squib::Args |
||||||
# @api private |
module_function def extract_svg_special(opts, deck) |
||||||
module Args |
SvgSpecial.new.extract! opts, deck |
||||||
|
end |
||||||
class SvgSpecial |
|
||||||
include ArgLoader |
class SvgSpecial |
||||||
|
include ArgLoader |
||||||
def self.parameters |
|
||||||
{ data: nil, id: nil, force_id: false } |
|
||||||
end |
|
||||||
|
|
||||||
def self.expanding_parameters |
def self.parameters |
||||||
parameters.keys # all of them |
{ data: nil, id: nil, force_id: false } |
||||||
end |
end |
||||||
|
|
||||||
def self.params_with_units |
def self.expanding_parameters |
||||||
[] |
parameters.keys # all of them |
||||||
end |
end |
||||||
|
|
||||||
def validate_id(arg, _i) |
def self.params_with_units |
||||||
return nil if arg.to_s.empty? |
[] |
||||||
arg = '#' << arg unless arg.start_with? '#' |
end |
||||||
arg |
|
||||||
end |
|
||||||
|
|
||||||
# Only render if we have an ID specified, or we are forcing an ID |
def validate_id(arg, _i) |
||||||
def render?(i) |
return nil if arg.to_s.empty? |
||||||
return false if force_id[i] && id[i].to_s.empty? |
arg = '#' << arg unless arg.start_with? '#' |
||||||
return true |
arg |
||||||
end |
end |
||||||
|
|
||||||
|
# Only render if we have an ID specified, or we are forcing an ID |
||||||
|
def render?(i) |
||||||
|
return false if force_id[i] && id[i].to_s.empty? |
||||||
|
return true |
||||||
end |
end |
||||||
|
|
||||||
end |
end |
||||||
|
|
||||||
end |
end |
||||||
|
|||||||
@ -1,61 +1,55 @@ |
|||||||
require_relative 'arg_loader' |
require_relative 'arg_loader' |
||||||
|
|
||||||
module Squib |
module Squib::Args |
||||||
# @api private |
module_function def extract_transform(opts, deck) |
||||||
module Args |
Transform.new.extract!(opts, deck) |
||||||
|
end |
||||||
class Transform |
|
||||||
include ArgLoader |
class Transform |
||||||
|
include ArgLoader |
||||||
def initialize(deck = nil) |
|
||||||
@deck = deck |
def self.parameters |
||||||
end |
{ angle: 0, |
||||||
|
crop_x: 0, |
||||||
def self.parameters |
crop_y: 0, |
||||||
{ angle: 0, |
crop_width: :native, |
||||||
crop_x: 0, |
crop_height: :native, |
||||||
crop_y: 0, |
crop_corner_radius: nil, |
||||||
crop_width: :native, |
crop_corner_x_radius: 0, |
||||||
crop_height: :native, |
crop_corner_y_radius: 0, |
||||||
crop_corner_radius: nil, |
flip_vertical: false, |
||||||
crop_corner_x_radius: 0, |
flip_horizontal: false, |
||||||
crop_corner_y_radius: 0, |
} |
||||||
flip_vertical: false, |
end |
||||||
flip_horizontal: false, |
|
||||||
} |
def self.expanding_parameters |
||||||
end |
parameters.keys # all of them |
||||||
|
end |
||||||
def self.expanding_parameters |
|
||||||
parameters.keys # all of them |
def self.params_with_units |
||||||
end |
parameters.keys - [:flip_vertical, :flip_horizontal] |
||||||
|
end |
||||||
def self.params_with_units |
|
||||||
parameters.keys - [:flip_vertical, :flip_horizontal] |
def validate_crop_width(arg, _i) |
||||||
end |
return arg if @deck.nil? |
||||||
|
return @deck.width if arg == :deck |
||||||
def validate_crop_width(arg, _i) |
arg |
||||||
return arg if @deck.nil? |
end |
||||||
return @deck.width if arg == :deck |
|
||||||
arg |
|
||||||
end |
|
||||||
|
|
||||||
def validate_crop_height(arg, _i) |
|
||||||
return arg if @deck.nil? |
|
||||||
return @deck.height if arg == :deck |
|
||||||
arg |
|
||||||
end |
|
||||||
|
|
||||||
def validate_crop_corner_x_radius(arg, i) |
|
||||||
return crop_corner_radius[i] unless crop_corner_radius[i].nil? |
|
||||||
arg |
|
||||||
end |
|
||||||
|
|
||||||
def validate_crop_corner_y_radius(arg, i) |
|
||||||
return crop_corner_radius[i] unless crop_corner_radius[i].nil? |
|
||||||
arg |
|
||||||
end |
|
||||||
|
|
||||||
|
def validate_crop_height(arg, _i) |
||||||
|
return arg if @deck.nil? |
||||||
|
return @deck.height if arg == :deck |
||||||
|
arg |
||||||
end |
end |
||||||
|
|
||||||
|
def validate_crop_corner_x_radius(arg, i) |
||||||
|
return crop_corner_radius[i] unless crop_corner_radius[i].nil? |
||||||
|
arg |
||||||
|
end |
||||||
|
|
||||||
|
def validate_crop_corner_y_radius(arg, i) |
||||||
|
return crop_corner_radius[i] unless crop_corner_radius[i].nil? |
||||||
|
arg |
||||||
|
end |
||||||
end |
end |
||||||
end |
end |
||||||
|
|||||||
@ -0,0 +1,56 @@ |
|||||||
|
require_relative '../errors_warnings/warn_unexpected_params' |
||||||
|
require_relative '../args/card_range' |
||||||
|
require_relative '../args/paint' |
||||||
|
require_relative '../args/scale_box' |
||||||
|
require_relative '../args/transform' |
||||||
|
require_relative '../args/input_file' |
||||||
|
|
||||||
|
module Squib |
||||||
|
class Deck |
||||||
|
def png(opts = {}) |
||||||
|
DSL::PNG.new(self, __callee__).run(opts) |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
module DSL |
||||||
|
class PNG |
||||||
|
include WarnUnexpectedParams |
||||||
|
attr_reader :dsl_method, :deck |
||||||
|
|
||||||
|
def initialize(deck, dsl_method) |
||||||
|
@deck = deck |
||||||
|
@dsl_method = dsl_method |
||||||
|
end |
||||||
|
|
||||||
|
def self.accepted_params |
||||||
|
%i( |
||||||
|
file |
||||||
|
x y width height |
||||||
|
alpha blend mask angle |
||||||
|
crop_x crop_y crop_width crop_height |
||||||
|
crop_corner_radius crop_corner_x_radius crop_corner_y_radius |
||||||
|
flip_horizontal flip_vertical |
||||||
|
range layout |
||||||
|
) |
||||||
|
end |
||||||
|
|
||||||
|
def run(opts) |
||||||
|
warn_if_unexpected opts |
||||||
|
Dir.chdir(deck.img_dir) do |
||||||
|
range = Args.extract_range opts, deck |
||||||
|
paint = Args.extract_paint opts, deck |
||||||
|
box = Args.extract_scale_box opts, deck |
||||||
|
trans = Args.extract_transform opts, deck |
||||||
|
ifile = Args.extract_input_file opts, deck |
||||||
|
deck.progress_bar.start('Loading PNG(s)', range.size) do |bar| |
||||||
|
range.each do |i| |
||||||
|
deck.cards[i].png(ifile[i].file, box[i], paint[i], trans[i]) |
||||||
|
bar.increment |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
@ -0,0 +1,43 @@ |
|||||||
|
require_relative '../errors_warnings/warn_unexpected_params' |
||||||
|
require_relative '../args/card_range' |
||||||
|
require_relative '../args/showcase_special' |
||||||
|
require_relative '../args/sheet' |
||||||
|
|
||||||
|
module Squib |
||||||
|
class Deck |
||||||
|
def showcase(opts = {}) |
||||||
|
DSL::Showcase.new(self, __callee__).run(opts) |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
module DSL |
||||||
|
class Showcase |
||||||
|
include WarnUnexpectedParams |
||||||
|
attr_reader :dsl_method, :deck |
||||||
|
|
||||||
|
def initialize(deck, dsl_method) |
||||||
|
@deck = deck |
||||||
|
@dsl_method = dsl_method |
||||||
|
end |
||||||
|
|
||||||
|
def self.accepted_params |
||||||
|
%i( |
||||||
|
file dir |
||||||
|
trim trim_radius |
||||||
|
scale offset fill_color |
||||||
|
reflect_offset reflect_strength reflect_percent |
||||||
|
face margin |
||||||
|
range |
||||||
|
) |
||||||
|
end |
||||||
|
|
||||||
|
def run(opts) |
||||||
|
warn_if_unexpected opts |
||||||
|
range = Args.extract_range opts, deck |
||||||
|
showcase = Args.extract_showcase_special opts, deck |
||||||
|
sheet = Args.extract_sheet opts, deck, { file: 'showcase.png' } |
||||||
|
deck.render_showcase(range, sheet, showcase) |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
@ -0,0 +1,62 @@ |
|||||||
|
require_relative '../errors_warnings/warn_unexpected_params' |
||||||
|
require_relative '../args/card_range' |
||||||
|
require_relative '../args/paint' |
||||||
|
require_relative '../args/scale_box' |
||||||
|
require_relative '../args/transform' |
||||||
|
require_relative '../args/input_file' |
||||||
|
require_relative '../args/svg_special' |
||||||
|
|
||||||
|
module Squib |
||||||
|
class Deck |
||||||
|
def svg(opts = {}) |
||||||
|
DSL::SVG.new(self, __callee__).run(opts) |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
module DSL |
||||||
|
class SVG |
||||||
|
include WarnUnexpectedParams |
||||||
|
attr_reader :dsl_method, :deck |
||||||
|
|
||||||
|
def initialize(deck, dsl_method) |
||||||
|
@deck = deck |
||||||
|
@dsl_method = dsl_method |
||||||
|
end |
||||||
|
|
||||||
|
def self.accepted_params |
||||||
|
%i( |
||||||
|
file |
||||||
|
x y width height |
||||||
|
blend mask |
||||||
|
crop_x crop_y crop_width crop_height |
||||||
|
crop_corner_radius crop_corner_x_radius crop_corner_y_radius |
||||||
|
flip_horizontal flip_vertical angle |
||||||
|
id force_id data |
||||||
|
range layout |
||||||
|
) |
||||||
|
end |
||||||
|
|
||||||
|
def run(opts) |
||||||
|
warn_if_unexpected opts |
||||||
|
Dir.chdir(deck.img_dir) do |
||||||
|
range = Args.extract_range opts, deck |
||||||
|
paint = Args.extract_paint opts, deck |
||||||
|
box = Args.extract_scale_box opts, deck |
||||||
|
trans = Args.extract_transform opts, deck |
||||||
|
ifile = Args.extract_input_file opts, deck |
||||||
|
svg_args = Args.extract_svg_special opts, deck |
||||||
|
deck.progress_bar.start('Loading PNG(s)', range.size) do |bar| |
||||||
|
range.each do |i| |
||||||
|
if svg_args.render?(i) |
||||||
|
deck.cards[i].svg(ifile[i].file, svg_args[i], box[i], paint[i], |
||||||
|
trans[i]) |
||||||
|
end |
||||||
|
bar.increment |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
Loading…
Reference in new issue