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 22 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 185 def absolute_bottom absolute_bounding_box[1] end
absolute_bottom_left()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 197 def absolute_bottom_left [absolute_left, absolute_bottom] end
absolute_bottom_right()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 201 def absolute_bottom_right [absolute_right, absolute_bottom] end
absolute_bounding_box()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 62 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 173 def absolute_left absolute_bounding_box[0] end
absolute_right()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 177 def absolute_right absolute_bounding_box[2] end
absolute_top()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 181 def absolute_top absolute_bounding_box[3] end
absolute_top_left()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 189 def absolute_top_left [absolute_left, absolute_top] end
absolute_top_right()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 193 def absolute_top_right [absolute_right, absolute_top] end
anchor()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 89 def anchor @format_state[:anchor] end
bottom()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 153 def bottom baseline - descender end
bottom_left()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 169 def bottom_left [left, bottom] end
bottom_right()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 165 def bottom_right [right, bottom] end
bounding_box()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 58 def bounding_box [left, bottom, right, top] end
callback_objects()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 134 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 109 def character_spacing @format_state[:character_spacing] || @document.character_spacing end
color()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 97 def color @format_state[:color] end
default_direction=(direction)
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 118 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 114 def direction @format_state[:direction] end
font()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 101 def font @format_state[:font] end
height()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 39 def height top - bottom end
include_trailing_white_space!()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 125 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 85 def link @format_state[:link] end
local()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 93 def local @format_state[:local] end
right()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 145 def right left + width end
size()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 105 def size @format_state[:size] end
space_count()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 130 def space_count @text.count(' ') end
strikethrough_points()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 76 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 81 def styles @format_state[:styles] || [] end
subscript?()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 43 def subscript? styles.include?(:subscript) end
superscript?()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 47 def superscript? styles.include?(:superscript) end
top()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 149 def top baseline + ascender end
top_left()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 157 def top_left [left, top] end
top_right()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 161 def top_right [right, top] end
underline_points()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 71 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 33 def width if @word_spacing.zero? then @width else @width + @word_spacing * space_count end end
y_offset()
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 51 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 227 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 235 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 239 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 207 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 elsif soft_hyphens_need_processing?(string) string = process_soft_hyphens(string) end if direction == :rtl string.reverse else string end end
soft_hyphens_need_processing?(string)
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 231 def soft_hyphens_need_processing?(string) !string.empty? && normalized_soft_hyphen end
strip_zero_width_spaces(string)
click to toggle source
# File lib/prawn/text/formatted/fragment.rb, line 247 def strip_zero_width_spaces(string) if string.encoding == ::Encoding::UTF_8 string.gsub(Prawn::Text::ZWSP, '') else string end end