11 changed files with 159 additions and 109 deletions
@ -1,25 +0,0 @@
|
||||
require_relative 'text_embed' |
||||
require_relative '../args/box' |
||||
require_relative '../args/card_range' |
||||
require_relative '../args/draw' |
||||
require_relative '../args/paragraph' |
||||
|
||||
module Squib |
||||
class Deck |
||||
|
||||
# DSL method. See http://squib.readthedocs.io |
||||
def text(opts = {}) |
||||
range = Args::CardRange.new(opts[:range], deck_size: size) |
||||
para = Args::Paragraph.new(font).load!(opts, expand_by: size, layout: layout) |
||||
box = Args::Box.new(self, { width: :auto, height: :auto }).load!(opts, expand_by: size, layout: layout, dpi: dpi) |
||||
trans = Args::Transform.new.load!(opts, expand_by: size, layout: layout, dpi: dpi) |
||||
draw = Args::Draw.new(custom_colors, { stroke_width: 0.0 }).load!(opts, expand_by: size, layout: layout, dpi: dpi) |
||||
embed = TextEmbed.new(size, custom_colors, layout, dpi, img_dir) |
||||
yield(embed) if block_given? # store the opts for later use |
||||
extents = Array.new(@cards.size) |
||||
range.each { |i| extents[i] = @cards[i].text(embed, para[i], box[i], trans[i], draw[i], dpi) } |
||||
return extents |
||||
end |
||||
|
||||
end |
||||
end |
||||
@ -1,75 +0,0 @@
|
||||
require_relative '../args/box' |
||||
require_relative '../args/card_range' |
||||
require_relative '../args/embed_adjust' |
||||
require_relative '../args/embed_key' |
||||
require_relative '../args/input_file' |
||||
require_relative '../args/paint' |
||||
require_relative '../args/transform' |
||||
|
||||
module Squib |
||||
class TextEmbed |
||||
# :nodoc: |
||||
# @api private |
||||
attr_reader :rules |
||||
|
||||
# :nodoc: |
||||
# @api private |
||||
def initialize(deck_size, custom_colors, layout, dpi, img_dir) |
||||
@deck_size = deck_size |
||||
@custom_colors = custom_colors |
||||
@layout = layout |
||||
@dpi = dpi |
||||
@img_dir = img_dir |
||||
@rules = {} # store an array of options for later usage |
||||
end |
||||
|
||||
# DSL method. See http://squib.readthedocs.io |
||||
def svg(opts = {}) |
||||
key = Args::EmbedKey.new.validate_key(opts[:key]) |
||||
range = Args::CardRange.new(opts[:range], deck_size: @deck_size) |
||||
paint = Args::Paint.new(@custom_colors).load!(opts, expand_by: @deck_size, layout: @layout) |
||||
box = Args::Box.new(self, { width: :native, height: :native }).load!(opts, expand_by: @deck_size, layout: @layout, dpi: @dpi) |
||||
adjust = Args::EmbedAdjust.new.load!(opts, expand_by: @deck_size, layout: @layout, dpi: @dpi) |
||||
trans = Args::Transform.new.load!(opts, expand_by: @deck_size, layout: @layout, dpi: @dpi) |
||||
ifile = Args::InputFile.new.load!(opts, expand_by: @deck_size, layout: @layout, dpi: @dpi) |
||||
svg_args = Args::SvgSpecial.new.load!(opts, expand_by: @deck_size, layout: @layout, dpi: @dpi) |
||||
rule = { type: :svg, file: ifile, box: box, paint: paint, trans: trans, |
||||
adjust: adjust, svg_args: svg_args } |
||||
rule[:draw] = Proc.new do |card, x, y, scale| |
||||
i = card.index |
||||
b = box[i] |
||||
b.x, b.y = x, y |
||||
b.width = b.width * scale if b.width.is_a? Numeric |
||||
b.height = b.height * scale if b.height.is_a? Numeric |
||||
Dir.chdir(@img_dir) do |
||||
card.svg(ifile[i].file, svg_args[i], b, paint[i], trans[i]) |
||||
end |
||||
end |
||||
@rules[key] = rule |
||||
end |
||||
|
||||
# DSL method. See http://squib.readthedocs.io |
||||
def png(opts = {}) |
||||
key = Args::EmbedKey.new.validate_key(opts[:key]) |
||||
range = Args::CardRange.new(opts[:range], deck_size: @deck_size) |
||||
paint = Args::Paint.new(@custom_colors).load!(opts, expand_by: @deck_size, layout: @layout) |
||||
box = Args::Box.new(self, { width: :native, height: :native }).load!(opts, expand_by: @deck_size, layout: @layout, dpi: @dpi) |
||||
adjust = Args::EmbedAdjust.new.load!(opts, expand_by: @deck_size, layout: @layout, dpi: @dpi) |
||||
trans = Args::Transform.new.load!(opts, expand_by: @deck_size, layout: @layout, dpi: @dpi) |
||||
ifile = Args::InputFile.new.load!(opts, expand_by: @deck_size, layout: @layout, dpi: @dpi) |
||||
rule = { type: :png, file: ifile, box: box, paint: paint, trans: trans, adjust: adjust } |
||||
rule[:draw] = Proc.new do |card, x, y, scale| |
||||
i = card.index |
||||
b = box[i] |
||||
b.x, b.y = x, y |
||||
b.width = b.width * scale if b.width.is_a? Numeric |
||||
b.height = b.height * scale if b.height.is_a? Numeric |
||||
Dir.chdir(@img_dir) do |
||||
card.png(ifile[i].file, b, paint[i], trans[i]) |
||||
end |
||||
end |
||||
@rules[key] = rule |
||||
end |
||||
|
||||
end |
||||
end |
||||
@ -0,0 +1,54 @@
|
||||
require_relative '../args/box' |
||||
require_relative '../args/card_range' |
||||
require_relative '../args/draw' |
||||
require_relative '../args/paragraph' |
||||
require_relative '../args/transform' |
||||
require_relative '../dsl/text_embed' |
||||
require_relative '../errors_warnings/warn_unexpected_params' |
||||
|
||||
module Squib |
||||
class Deck |
||||
def text(opts = {}) |
||||
embed = TextEmbed.new self, __callee__ |
||||
yield(embed) if block_given? # store the opts for later use |
||||
DSL::Text.new(self, __callee__, embed).run(opts) |
||||
end |
||||
end |
||||
|
||||
module DSL |
||||
class Text |
||||
include WarnUnexpectedParams |
||||
attr_reader :dsl_method, :deck, :embed |
||||
|
||||
def initialize(deck, dsl_method, embed) |
||||
@deck = deck |
||||
@dsl_method = dsl_method |
||||
@embed = embed |
||||
end |
||||
|
||||
def self.accepted_params |
||||
%i( |
||||
str font font_size x y markup width height |
||||
wrap spacing align justify valign ellipsize angle dash cap join |
||||
hint color fill_color |
||||
stroke_color stroke_width stroke_width stroke_color stroke_strategy |
||||
range layout |
||||
) |
||||
end |
||||
|
||||
def run(opts) |
||||
warn_if_unexpected opts |
||||
range = Args.extract_range opts, deck |
||||
para = Args.extract_para opts, deck |
||||
box = Args.extract_box opts, deck, { width: :auto, height: :auto } |
||||
trans = Args.extract_transform opts, deck |
||||
draw = Args.extract_draw opts, deck, { stroke_width: 0.0 } |
||||
extents = Array.new(deck.size) |
||||
range.each do |i| |
||||
extents[i] = deck.cards[i].text(embed, para[i], box[i], trans[i], draw[i], deck.dpi) |
||||
end |
||||
return extents |
||||
end |
||||
end |
||||
end |
||||
end |
||||
@ -0,0 +1,78 @@
|
||||
require_relative '../args/box' |
||||
require_relative '../args/card_range' |
||||
require_relative '../args/embed_adjust' |
||||
require_relative '../args/embed_key' |
||||
require_relative '../args/input_file' |
||||
require_relative '../args/paint' |
||||
require_relative '../args/transform' |
||||
require_relative '../errors_warnings/warn_unexpected_params' |
||||
|
||||
module Squib |
||||
class TextEmbed |
||||
include WarnUnexpectedParams |
||||
attr_reader :rules, :deck, :dsl_method |
||||
|
||||
def initialize(deck, dsl_method) |
||||
@deck = deck |
||||
@rules = {} # store an array of options for later usage |
||||
end |
||||
|
||||
def self.accepted_params |
||||
%i( |
||||
key file id force_id layout width height dx dy |
||||
id force_id data |
||||
flip_horizontal flip_vertical |
||||
alpha angle blend mask |
||||
) |
||||
end |
||||
|
||||
def svg(opts = {}) |
||||
warn_if_unexpected opts |
||||
key = Args::EmbedKey.new.validate_key(opts[:key]) |
||||
range = Args.extract_range opts, deck |
||||
paint = Args.extract_paint opts, deck |
||||
box = Args.extract_box opts, deck, { width: :native, height: :native } |
||||
adjust = Args::EmbedAdjust.new.load!(opts, expand_by: deck.size, layout: deck.layout, dpi: deck.dpi) |
||||
trans = Args.extract_transform opts, deck |
||||
ifile = Args.extract_input_file opts, deck |
||||
svg_args = Args.extract_svg_special opts, deck |
||||
rule = { type: :svg, file: ifile, box: box, paint: paint, trans: trans, |
||||
adjust: adjust, svg_args: svg_args } |
||||
rule[:draw] = Proc.new do |card, x, y, scale| |
||||
i = card.index |
||||
b = box[i] |
||||
b.x, b.y = x, y |
||||
b.width = b.width * scale if b.width.is_a? Numeric |
||||
b.height = b.height * scale if b.height.is_a? Numeric |
||||
Dir.chdir(deck.img_dir) do |
||||
card.svg(ifile[i].file, svg_args[i], b, paint[i], trans[i]) |
||||
end |
||||
end |
||||
@rules[key] = rule |
||||
end |
||||
|
||||
def png(opts = {}) |
||||
warn_if_unexpected opts |
||||
key = Args::EmbedKey.new.validate_key(opts[:key]) |
||||
range = Args.extract_range opts, deck |
||||
paint = Args.extract_paint opts, deck |
||||
box = Args.extract_box opts, deck, { width: :native, height: :native } |
||||
adjust = Args::EmbedAdjust.new.load!(opts, expand_by: deck.size, layout: deck.layout, dpi: deck.dpi) |
||||
trans = Args.extract_transform opts, deck |
||||
ifile = Args.extract_input_file opts, deck |
||||
rule = { type: :png, file: ifile, box: box, paint: paint, trans: trans, adjust: adjust } |
||||
rule[:draw] = Proc.new do |card, x, y, scale| |
||||
i = card.index |
||||
b = box[i] |
||||
b.x, b.y = x, y |
||||
b.width = b.width * scale if b.width.is_a? Numeric |
||||
b.height = b.height * scale if b.height.is_a? Numeric |
||||
Dir.chdir(deck.img_dir) do |
||||
card.png(ifile[i].file, b, paint[i], trans[i]) |
||||
end |
||||
end |
||||
@rules[key] = rule |
||||
end |
||||
|
||||
end |
||||
end |
||||
Loading…
Reference in new issue