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