lib/prawn/table/cell/text.rb in prawn-1.0.0.rc2 vs lib/prawn/table/cell/text.rb in prawn-1.0.0
- old
+ new
@@ -1,6 +1,6 @@
-# encoding: utf-8
+# encoding: utf-8
# text.rb: Text table cells.
#
# Copyright December 2009, Gregory Brown and Brad Ediger. All Rights Reserved.
#
@@ -10,10 +10,11 @@
class Cell
# A Cell that contains text. Has some limited options to set font family,
# size, and style.
#
+ # @private
class Text < Cell
TextOptions = [:inline_format, :kerning, :size, :align, :valign,
:rotate, :rotate_around, :leading, :single_line, :skip_encoding,
:overflow, :min_font_size]
@@ -62,11 +63,11 @@
end
# Draws the text content into its bounding box.
#
def draw_content
- with_font do
+ with_font do
@pdf.move_down((@pdf.font.line_gap + @pdf.font.descender)/2)
with_text_color do
text_box(:width => spanned_content_width + FPTolerance,
:height => spanned_content_height + FPTolerance,
:at => [0, @pdf.cursor]).render
@@ -76,11 +77,11 @@
def set_width_constraints
# Sets a reasonable minimum width. If the cell has any content, make
# sure we have enough width to be at least one character wide. This is
# a bit of a hack, but it should work well enough.
- unless @min_width
+ unless defined?(@min_width) && @min_width
min_content_width = [natural_content_width, styled_width_of_single_character].min
@min_width = padding_left + padding_right + min_content_width
super
end
end
@@ -89,19 +90,20 @@
def with_font
@pdf.save_font do
options = {}
options[:style] = @text_options[:style] if @text_options[:style]
+ options[:style] ||= @pdf.font.options[:style] if @pdf.font.options[:style]
- @pdf.font(@font || @pdf.font.name, options)
+ @pdf.font(defined?(@font) && @font || @pdf.font.family, options)
yield
end
end
def with_text_color
- if @text_color
+ if defined?(@text_color) && @text_color
begin
old_color = @pdf.fill_color || '000000'
@pdf.fill_color(@text_color)
yield
ensure
@@ -109,20 +111,22 @@
end
else
yield
end
end
-
+
def text_box(extra_options={})
- if @text_options[:inline_format]
+ if p = @text_options[:inline_format]
+ p = [] unless p.is_a?(Array)
options = @text_options.dup
options.delete(:inline_format)
options.merge!(extra_options)
options[:document] = @pdf
- array = ::Prawn::Text::Formatted::Parser.to_array(@content)
- ::Prawn::Text::Formatted::Box.new(array, options)
+ array = @pdf.text_formatter.format(@content, *p)
+ ::Prawn::Text::Formatted::Box.new(array,
+ options.merge(extra_options).merge(:document => @pdf))
else
::Prawn::Text::Box.new(@content, @text_options.merge(extra_options).
merge(:document => @pdf))
end
end
@@ -140,12 +144,10 @@
# (We use this to determine the minimum width of a table cell)
# (Although we currently determine this by measuring "M", it should really
# use whichever character is widest under the current font)
#
def styled_width_of_single_character
- key = (@text_options[:style] == :bold) ? :bold_char_width : :plain_char_width
- cache = Thread.current[key] ||= {}
- cache[@pdf.font] ||= styled_width_of("M")
+ styled_width_of("M")
end
end
end
end
end