You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

115 lines
2.7 KiB

require 'squib/args/arg_loader'
module Squib
# @api private
module Args
class Paragraph
include ArgLoader
def self.parameters
{ align: :left,
str: 'Hello, World!',
font: :use_set,
font_size: nil,
markup: false,
justify: false,
wrap: true,
ellipsize: :end,
spacing: 0,
valign: :top,
hint: :off
}
end
def self.expanding_parameters
parameters.keys # all of them
end
def self.params_with_units
[] # none of them
end
def initialize(deck_font)
@deck_font = deck_font
end
def validate_str(arg, _i)
arg.to_s
end
def validate_font(arg, _i)
arg = @deck_font if arg == :use_set
arg = Squib::SYSTEM_DEFAULTS[:default_font] if arg == :default
arg
end
def validate_align(arg, _i)
case arg.to_s.downcase.strip
when 'left'
Pango::ALIGN_LEFT
when 'right'
Pango::ALIGN_RIGHT
when 'center'
Pango::ALIGN_CENTER
else
raise ArgumentError, 'align must be one of: center, left, right'
end
end
def validate_wrap(arg, _i)
case arg.to_s.downcase.strip
when 'word'
Pango::Layout::WRAP_WORD
when 'char', 'false'
Pango::Layout::WRAP_CHAR
when 'word_char', 'true'
Pango::Layout::WRAP_WORD_CHAR
else
raise ArgumentError, 'wrap must be one of: word, char, word_char, true, or false'
end
end
def validate_ellipsize(arg, _i)
case arg.to_s.downcase.strip
when 'none', 'false'
Pango::Layout::ELLIPSIZE_NONE
when 'start'
Pango::Layout::ELLIPSIZE_START
when 'middle'
Pango::Layout::ELLIPSIZE_MIDDLE
when 'end', 'true'
Pango::Layout::ELLIPSIZE_END
else
raise ArgumentError, 'ellipsize must be one of: none, start, middle, end, true, or false'
end
end
def validate_justify(arg, _i)
case arg
when nil, true, false
arg
else
raise ArgumentError, 'justify must be one of: nil, true, or false'
end
end
def validate_spacing(arg, _i)
return nil if arg.nil?
raise ArgumentError, 'spacing must be a number or nil' unless arg.respond_to? :to_f
Pango::SCALE * arg.to_f
end
def validate_valign(arg, _i)
if %w(top middle bottom).include? arg.to_s.downcase
arg.to_s.downcase
else
raise ArgumentError, 'valign must be one of: top, middle, bottom'
end
end
end
end
end