| VERSION | = | "0.2.0.1" |
| DEFAULT_TAGS | = | { :a => { :meta => { :name => :anchor, :href => :target }, :color => "0000ff", :text_decoration => :underline }, :b => { :font_weight => :bold }, :br => { :display => :break }, :code => { :font_family => "Courier", :font_size => "90%" }, :em => { :font_style => :italic }, :font => { :meta => { :face => :font_family, :color => :color, :size => :font_size } }, :i => { :font_style => :italic }, :pre => { :white_space => :pre, :font_family => "Courier", :font_size => "90%" }, :span => {}, :strong => { :font_weight => :bold }, :sub => { :vertical_align => :sub, :font_size => "70%" }, :sup => { :vertical_align => :super, :font_size => "70%" }, :tt => { :font_family => "Courier" }, :u => { :text_decoration => :underline }, }.freeze |
| VERSION | = | "0.2.0.1" |
| DEFAULT_TAGS | = | { :a => { :meta => { :name => :anchor, :href => :target }, :color => "0000ff", :text_decoration => :underline }, :b => { :font_weight => :bold }, :br => { :display => :break }, :code => { :font_family => "Courier", :font_size => "90%" }, :em => { :font_style => :italic }, :font => { :meta => { :face => :font_family, :color => :color, :size => :font_size } }, :i => { :font_style => :italic }, :pre => { :white_space => :pre, :font_family => "Courier", :font_size => "90%" }, :span => {}, :strong => { :font_weight => :bold }, :sub => { :vertical_align => :sub, :font_size => "70%" }, :sup => { :vertical_align => :super, :font_size => "70%" }, :tt => { :font_family => "Courier" }, :u => { :text_decoration => :underline }, }.freeze |
# File lib/prawn/format.rb, line 8
8: def self.included(mod)
9: mod.send :alias_method, :text_without_formatting, :text
10: mod.send :alias_method, :text, :text_with_formatting
11:
12: mod.send :alias_method, :width_of_without_formatting, :width_of
13: mod.send :alias_method, :width_of, :width_of_with_formatting
14:
15: mod.send :alias_method, :height_of_without_formatting, :height_of
16: mod.send :alias_method, :height_of, :height_of_with_formatting
17: end
# File lib/prawn/format.rb, line 8
8: def self.included(mod)
9: mod.send :alias_method, :text_without_formatting, :text
10: mod.send :alias_method, :text, :text_with_formatting
11:
12: mod.send :alias_method, :width_of_without_formatting, :width_of
13: mod.send :alias_method, :width_of, :width_of_with_formatting
14:
15: mod.send :alias_method, :height_of_without_formatting, :height_of
16: mod.send :alias_method, :height_of, :height_of_with_formatting
17: end
# File lib/prawn/format.rb, line 76
76: def default_style
77: { :font_family => font.family || font.name,
78: :font_size => font_size,
79: :color => fill_color }
80: end
# File lib/prawn/format.rb, line 76
76: def default_style
77: { :font_family => font.family || font.name,
78: :font_size => font_size,
79: :color => fill_color }
80: end
# File lib/prawn/format.rb, line 116
116: def draw_lines(x, y, width, lines, options={})
117: real_x, real_y = translate(x, y)
118:
119: state = options[:state] || {}
120: options[:align] ||= :left
121:
122: state = state.merge(:width => width,
123: :x => x, :y => y,
124: :real_x => real_x, :real_y => real_y,
125: :dx => 0, :dy => 0)
126:
127: state[:cookies] ||= {}
128: state[:pending_effects] ||= []
129:
130: return state if lines.empty?
131:
132: text_object do |text|
133: text.rotate(real_x, real_y, options[:rotate] || 0)
134: state[:text] = text
135: lines.each { |line| line.draw_on(self, state, options) }
136: end
137:
138: state.delete(:text)
139:
140: #rectangle [x, y+state[:dy]], width, state[:dy]
141: #stroke
142:
143: return state
144: end
# File lib/prawn/format.rb, line 116
116: def draw_lines(x, y, width, lines, options={})
117: real_x, real_y = translate(x, y)
118:
119: state = options[:state] || {}
120: options[:align] ||= :left
121:
122: state = state.merge(:width => width,
123: :x => x, :y => y,
124: :real_x => real_x, :real_y => real_y,
125: :dx => 0, :dy => 0)
126:
127: state[:cookies] ||= {}
128: state[:pending_effects] ||= []
129:
130: return state if lines.empty?
131:
132: text_object do |text|
133: text.rotate(real_x, real_y, options[:rotate] || 0)
134: state[:text] = text
135: lines.each { |line| line.draw_on(self, state, options) }
136: end
137:
138: state.delete(:text)
139:
140: #rectangle [x, y+state[:dy]], width, state[:dy]
141: #stroke
142:
143: return state
144: end
# File lib/prawn/format.rb, line 82
82: def evaluate_measure(measure, options={})
83: case measure
84: when nil then nil
85: when Numeric then return measure
86: when Symbol then
87: mappings = options[:mappings] || {}
88: raise ArgumentError, "unrecognized value #{measure.inspect}" unless mappings.key?(measure)
89: return evaluate_measure(mappings[measure], options)
90: when String then
91: operator, value, unit = measure.match(/^([-+]?)(\d+(?:\.\d+)?)(.*)$/)[1,3]
92:
93: value = case unit
94: when "%" then
95: relative = options[:relative] || 0
96: relative * value.to_f / 100
97: when "em" then
98: # not a true em, but good enough for approximating. patches welcome.
99: value.to_f * (options[:em] || font_size)
100: when "", "pt" then return value.to_f
101: when "pc" then return value.to_f * 12
102: when "in" then return value.to_f * 72
103: else raise ArgumentError, "unsupport units in style value: #{measure.inspect}"
104: end
105:
106: current = options[:current] || 0
107: case operator
108: when "+" then return current + value
109: when "-" then return current - value
110: else return value
111: end
112: else return measure.to_f
113: end
114: end
# File lib/prawn/format.rb, line 82
82: def evaluate_measure(measure, options={})
83: case measure
84: when nil then nil
85: when Numeric then return measure
86: when Symbol then
87: mappings = options[:mappings] || {}
88: raise ArgumentError, "unrecognized value #{measure.inspect}" unless mappings.key?(measure)
89: return evaluate_measure(mappings[measure], options)
90: when String then
91: operator, value, unit = measure.match(/^([-+]?)(\d+(?:\.\d+)?)(.*)$/)[1,3]
92:
93: value = case unit
94: when "%" then
95: relative = options[:relative] || 0
96: relative * value.to_f / 100
97: when "em" then
98: # not a true em, but good enough for approximating. patches welcome.
99: value.to_f * (options[:em] || font_size)
100: when "", "pt" then return value.to_f
101: when "pc" then return value.to_f * 12
102: when "in" then return value.to_f * 72
103: else raise ArgumentError, "unsupport units in style value: #{measure.inspect}"
104: end
105:
106: current = options[:current] || 0
107: case operator
108: when "+" then return current + value
109: when "-" then return current - value
110: else return value
111: end
112: else return measure.to_f
113: end
114: end
# File lib/prawn/format.rb, line 152
152: def format(text, options={})
153: if options[:at]
154: x, y = options[:at]
155: format_positioned_text(text, x, y, options)
156: else
157: format_wrapped_text(text, options)
158: end
159: end
# File lib/prawn/format.rb, line 152
152: def format(text, options={})
153: if options[:at]
154: x, y = options[:at]
155: format_positioned_text(text, x, y, options)
156: else
157: format_wrapped_text(text, options)
158: end
159: end
# File lib/prawn/format.rb, line 146
146: def layout(text, options={})
147: helper = Format::LayoutBuilder.new(self, text, options)
148: yield helper if block_given?
149: return helper
150: end
# File lib/prawn/format.rb, line 146
146: def layout(text, options={})
147: helper = Format::LayoutBuilder.new(self, text, options)
148: yield helper if block_given?
149: return helper
150: end
# File lib/prawn/format.rb, line 71
71: def styles(update={})
72: @styles ||= {}
73: @styles.update(update)
74: end
# File lib/prawn/format.rb, line 71
71: def styles(update={})
72: @styles ||= {}
73: @styles.update(update)
74: end
# File lib/prawn/format.rb, line 66
66: def tags(update={})
67: @tags ||= DEFAULT_TAGS.dup
68: @tags.update(update)
69: end
# File lib/prawn/format.rb, line 66
66: def tags(update={})
67: @tags ||= DEFAULT_TAGS.dup
68: @tags.update(update)
69: end
# File lib/prawn/format.rb, line 161
161: def text_object
162: object = TextObject.new
163:
164: if block_given?
165: yield object.open
166: add_content(object.close)
167: end
168:
169: return object
170: end