class Prawn::Text::Formatted::Fragment
Prawn::Text::Formatted::Fragment is a state store for a formatted text fragment. It does not render anything.
@private
Attributes
ascender[RW]
baseline[RW]
descender[RW]
format_state[R]
left[RW]
line_height[RW]
text[R]
width[W]
word_spacing[RW]
Public Class Methods
new(text, format_state, document)
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 21 def initialize(text, format_state, document) @format_state = format_state @document = document @word_spacing = 0 # keep the original value of "text", so we can reinitialize @text if formatting parameters # like text direction are changed @original_text = text @text = process_text(@original_text) end
Public Instance Methods
absolute_bottom()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 184 def absolute_bottom absolute_bounding_box[1] end
absolute_bottom_left()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 196 def absolute_bottom_left [absolute_left, absolute_bottom] end
absolute_bottom_right()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 200 def absolute_bottom_right [absolute_right, absolute_bottom] end
absolute_bounding_box()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 61 def absolute_bounding_box box = bounding_box box[0] += @document.bounds.absolute_left box[2] += @document.bounds.absolute_left box[1] += @document.bounds.absolute_bottom box[3] += @document.bounds.absolute_bottom box end
absolute_left()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 172 def absolute_left absolute_bounding_box[0] end
absolute_right()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 176 def absolute_right absolute_bounding_box[2] end
absolute_top()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 180 def absolute_top absolute_bounding_box[3] end
absolute_top_left()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 188 def absolute_top_left [absolute_left, absolute_top] end
absolute_top_right()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 192 def absolute_top_right [absolute_right, absolute_top] end
anchor()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 88 def anchor @format_state[:anchor] end
bottom()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 152 def bottom baseline - descender end
bottom_left()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 168 def bottom_left [left, bottom] end
bottom_right()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 164 def bottom_right [right, bottom] end
bounding_box()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 57 def bounding_box [left, bottom, right, top] end
callback_objects()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 133 def callback_objects callback = @format_state[:callback] if callback.nil? [] elsif callback.is_a?(Array) callback else [callback] end end
character_spacing()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 108 def character_spacing @format_state[:character_spacing] || @document.character_spacing end
color()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 96 def color @format_state[:color] end
default_direction=(direction)
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 117 def default_direction=(direction) unless @format_state[:direction] @format_state[:direction] = direction @text = process_text(@original_text) end end
direction()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 113 def direction @format_state[:direction] end
font()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 100 def font @format_state[:font] end
height()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 38 def height top - bottom end
include_trailing_white_space!()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 124 def include_trailing_white_space! @format_state.delete(:exclude_trailing_white_space) @text = process_text(@original_text) end
link()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 84 def link @format_state[:link] end
local()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 92 def local @format_state[:local] end
right()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 144 def right left + width end
size()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 104 def size @format_state[:size] end
space_count()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 129 def space_count @text.count(" ") end
strikethrough_points()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 75 def strikethrough_points y = baseline + ascender * 0.3 [[left, y], [right, y]] end
styles()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 80 def styles @format_state[:styles] || [] end
subscript?()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 42 def subscript? styles.include?(:subscript) end
superscript?()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 46 def superscript? styles.include?(:superscript) end
top()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 148 def top baseline + ascender end
top_left()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 156 def top_left [left, top] end
top_right()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 160 def top_right [right, top] end
underline_points()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 70 def underline_points y = baseline - 1.25 [[left, y], [right, y]] end
width()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 32 def width if @word_spacing == 0 then @width else @width + @word_spacing * space_count end end
y_offset()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 50 def y_offset if subscript? then -descender elsif superscript? then 0.85 * ascender else 0 end end
Private Instance Methods
exclude_trailing_white_space?()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 229 def exclude_trailing_white_space? @format_state[:exclude_trailing_white_space] end
normalized_soft_hyphen()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 237 def normalized_soft_hyphen @format_state[:normalized_soft_hyphen] end
process_soft_hyphens(string)
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 241 def process_soft_hyphens(string) if string.encoding != normalized_soft_hyphen.encoding string.force_encoding(normalized_soft_hyphen.encoding) end string.gsub(normalized_soft_hyphen, "") end
process_text(text)
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 206 def process_text(text) string = strip_zero_width_spaces(text) if exclude_trailing_white_space? string = string.rstrip if soft_hyphens_need_processing?(string) string = process_soft_hyphens(string[0..-2]) + string[-1..-1] end else if soft_hyphens_need_processing?(string) string = process_soft_hyphens(string) end end case direction when :rtl string.reverse else string end end
soft_hyphens_need_processing?(string)
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 233 def soft_hyphens_need_processing?(string) string.length > 0 && normalized_soft_hyphen end
strip_zero_width_spaces(string)
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 249 def strip_zero_width_spaces(string) if string.encoding == ::Encoding::UTF_8 string.gsub(Prawn::Text::ZWSP, "") else string end end