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' |
||||
|
||||
module Squib |
||||
# @api private |
||||
module Args |
||||
|
||||
class InputFile |
||||
include ArgLoader |
||||
|
||||
def initialize(dsl_method_default = {}) |
||||
@dsl_method_default = dsl_method_default |
||||
end |
||||
module Squib::Args |
||||
module_function def extract_input_file(opts, deck, dsl_method_default = {}) |
||||
InputFile.new(dsl_method_default).extract!(opts, deck) |
||||
end |
||||
|
||||
def self.parameters |
||||
{ file: nil, |
||||
sheet: 0, |
||||
} |
||||
end |
||||
class InputFile |
||||
include ArgLoader |
||||
|
||||
def self.expanding_parameters |
||||
parameters.keys # all of them |
||||
end |
||||
def initialize(dsl_method_default = {}) |
||||
@dsl_method_default = dsl_method_default |
||||
end |
||||
|
||||
def self.params_with_units |
||||
[] # none of them |
||||
end |
||||
def self.parameters |
||||
{ file: nil, |
||||
sheet: 0, |
||||
} |
||||
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 |
||||
def self.expanding_parameters |
||||
parameters.keys # all of them |
||||
end |
||||
|
||||
def self.params_with_units |
||||
[] # none of them |
||||
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 |
||||
|
||||
@ -1,53 +1,50 @@
|
||||
require_relative 'arg_loader' |
||||
|
||||
module Squib |
||||
# @api private |
||||
module Args |
||||
|
||||
class ScaleBox |
||||
include ArgLoader |
||||
module Squib::Args |
||||
module_function def extract_scale_box(opts, deck) |
||||
ScaleBox.new.extract!(opts, deck) |
||||
end |
||||
|
||||
def initialize(deck) |
||||
@deck = deck |
||||
end |
||||
class ScaleBox |
||||
include ArgLoader |
||||
|
||||
def self.parameters |
||||
{ x: 0, y: 0, |
||||
width: :native, height: :native |
||||
} |
||||
end |
||||
def self.parameters |
||||
{ |
||||
x: 0, y: 0, |
||||
width: :native, height: :native |
||||
} |
||||
end |
||||
|
||||
def self.expanding_parameters |
||||
parameters.keys # all of them |
||||
end |
||||
def self.expanding_parameters |
||||
parameters.keys # all of them |
||||
end |
||||
|
||||
def self.params_with_units |
||||
parameters.keys # all of them |
||||
end |
||||
def self.params_with_units |
||||
parameters.keys # all of them |
||||
end |
||||
|
||||
def validate_width(arg, i) |
||||
return @deck.width if arg.to_s == 'deck' |
||||
return :native if arg.to_s == 'native' |
||||
return arg if arg.respond_to? :to_f |
||||
if arg.to_s == 'scale' |
||||
raise 'if width is :scale, height must be a number' unless height[i].respond_to? :to_f |
||||
return arg |
||||
end |
||||
raise 'width must be a number, :scale, :native, or :deck' |
||||
def validate_width(arg, i) |
||||
return @deck.width if arg.to_s == 'deck' |
||||
return :native if arg.to_s == 'native' |
||||
return arg if arg.respond_to? :to_f |
||||
if arg.to_s == 'scale' |
||||
raise 'if width is :scale, height must be a number' unless height[i].respond_to? :to_f |
||||
return arg |
||||
end |
||||
raise 'width must be a number, :scale, :native, or :deck' |
||||
end |
||||
|
||||
def validate_height(arg, i) |
||||
return @deck.height if arg.to_s == 'deck' |
||||
return :native if arg.to_s == 'native' |
||||
return arg if arg.respond_to? :to_f |
||||
if arg.to_s == 'scale' |
||||
raise 'if height is \'scale\', width must be a number' unless width[i].respond_to? :to_f |
||||
return arg |
||||
end |
||||
raise 'height must be a number, :scale, :native, or :deck' |
||||
def validate_height(arg, i) |
||||
return @deck.height if arg.to_s == 'deck' |
||||
return :native if arg.to_s == 'native' |
||||
return arg if arg.respond_to? :to_f |
||||
if arg.to_s == 'scale' |
||||
raise 'if height is \'scale\', width must be a number' unless width[i].respond_to? :to_f |
||||
return arg |
||||
end |
||||
|
||||
raise 'height must be a number, :scale, :native, or :deck' |
||||
end |
||||
|
||||
end |
||||
|
||||
end |
||||
|
||||
@ -1,37 +1,37 @@
|
||||
require_relative 'arg_loader' |
||||
|
||||
module Squib |
||||
# @api private |
||||
module Args |
||||
|
||||
class SvgSpecial |
||||
include ArgLoader |
||||
|
||||
def self.parameters |
||||
{ data: nil, id: nil, force_id: false } |
||||
end |
||||
module Squib::Args |
||||
module_function def extract_svg_special(opts, deck) |
||||
SvgSpecial.new.extract! opts, deck |
||||
end |
||||
|
||||
class SvgSpecial |
||||
include ArgLoader |
||||
|
||||
def self.expanding_parameters |
||||
parameters.keys # all of them |
||||
end |
||||
def self.parameters |
||||
{ data: nil, id: nil, force_id: false } |
||||
end |
||||
|
||||
def self.params_with_units |
||||
[] |
||||
end |
||||
def self.expanding_parameters |
||||
parameters.keys # all of them |
||||
end |
||||
|
||||
def validate_id(arg, _i) |
||||
return nil if arg.to_s.empty? |
||||
arg = '#' << arg unless arg.start_with? '#' |
||||
arg |
||||
end |
||||
def self.params_with_units |
||||
[] |
||||
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 |
||||
def validate_id(arg, _i) |
||||
return nil if arg.to_s.empty? |
||||
arg = '#' << arg unless arg.start_with? '#' |
||||
arg |
||||
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 |
||||
|
||||
@ -1,61 +1,55 @@
|
||||
require_relative 'arg_loader' |
||||
|
||||
module Squib |
||||
# @api private |
||||
module Args |
||||
|
||||
class Transform |
||||
include ArgLoader |
||||
|
||||
def initialize(deck = nil) |
||||
@deck = deck |
||||
end |
||||
|
||||
def self.parameters |
||||
{ angle: 0, |
||||
crop_x: 0, |
||||
crop_y: 0, |
||||
crop_width: :native, |
||||
crop_height: :native, |
||||
crop_corner_radius: nil, |
||||
crop_corner_x_radius: 0, |
||||
crop_corner_y_radius: 0, |
||||
flip_vertical: false, |
||||
flip_horizontal: false, |
||||
} |
||||
end |
||||
|
||||
def self.expanding_parameters |
||||
parameters.keys # all of them |
||||
end |
||||
|
||||
def self.params_with_units |
||||
parameters.keys - [:flip_vertical, :flip_horizontal] |
||||
end |
||||
|
||||
def validate_crop_width(arg, _i) |
||||
return arg if @deck.nil? |
||||
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 |
||||
module Squib::Args |
||||
module_function def extract_transform(opts, deck) |
||||
Transform.new.extract!(opts, deck) |
||||
end |
||||
|
||||
class Transform |
||||
include ArgLoader |
||||
|
||||
def self.parameters |
||||
{ angle: 0, |
||||
crop_x: 0, |
||||
crop_y: 0, |
||||
crop_width: :native, |
||||
crop_height: :native, |
||||
crop_corner_radius: nil, |
||||
crop_corner_x_radius: 0, |
||||
crop_corner_y_radius: 0, |
||||
flip_vertical: false, |
||||
flip_horizontal: false, |
||||
} |
||||
end |
||||
|
||||
def self.expanding_parameters |
||||
parameters.keys # all of them |
||||
end |
||||
|
||||
def self.params_with_units |
||||
parameters.keys - [:flip_vertical, :flip_horizontal] |
||||
end |
||||
|
||||
def validate_crop_width(arg, _i) |
||||
return arg if @deck.nil? |
||||
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 |
||||
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