text method migrated!

This commit is contained in:
Andy Meneely
2020-05-16 20:00:45 -04:00
parent 3590280c98
commit 272892d358
11 changed files with 159 additions and 109 deletions
-25
View File
@@ -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
-75
View File
@@ -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
+4
View File
@@ -3,6 +3,10 @@ require_relative 'arg_loader'
module Squib::Args
module_function def extract_para(opts, deck, dsl_method_defaults = {})
Paragraph.new(deck.font).extract!(opts, deck)
end
class Paragraph
include ArgLoader
+3 -4
View File
@@ -103,10 +103,7 @@ module Squib
### PUBLIC API ###
##################
require_relative 'api/data'
require_relative 'api/groups'
require_relative 'api/settings'
require_relative 'api/text'
require_relative 'api/units'
###################
### DSL METHODS ###
@@ -117,6 +114,7 @@ module Squib
require_relative 'dsl/cut_zone'
require_relative 'dsl/ellipse'
require_relative 'dsl/grid'
require_relative 'dsl/groups'
require_relative 'dsl/hand'
require_relative 'dsl/line'
require_relative 'dsl/png'
@@ -130,7 +128,8 @@ module Squib
require_relative 'dsl/showcase'
require_relative 'dsl/star'
require_relative 'dsl/svg'
require_relative 'dsl/text'
require_relative 'dsl/triangle'
require_relative 'dsl/units'
end
end
+54
View File
@@ -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
+78
View File
@@ -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