prawn 2.0.1 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Rakefile +7 -5
- data/lib/prawn.rb +4 -4
- data/lib/prawn/document.rb +47 -46
- data/lib/prawn/document/bounding_box.rb +13 -19
- data/lib/prawn/document/column_box.rb +3 -5
- data/lib/prawn/document/internals.rb +0 -1
- data/lib/prawn/document/span.rb +12 -12
- data/lib/prawn/errors.rb +32 -33
- data/lib/prawn/font.rb +29 -36
- data/lib/prawn/font/afm.rb +20 -20
- data/lib/prawn/font/dfont.rb +0 -1
- data/lib/prawn/font/ttf.rb +30 -27
- data/lib/prawn/font_metric_cache.rb +4 -8
- data/lib/prawn/graphics.rb +37 -42
- data/lib/prawn/graphics/cap_style.rb +1 -1
- data/lib/prawn/graphics/color.rb +21 -23
- data/lib/prawn/graphics/dash.rb +5 -6
- data/lib/prawn/graphics/join_style.rb +1 -2
- data/lib/prawn/graphics/patterns.rb +25 -21
- data/lib/prawn/graphics/transformation.rb +4 -5
- data/lib/prawn/graphics/transparency.rb +6 -8
- data/lib/prawn/grid.rb +21 -14
- data/lib/prawn/image_handler.rb +2 -2
- data/lib/prawn/images.rb +29 -31
- data/lib/prawn/images/image.rb +1 -1
- data/lib/prawn/images/jpg.rb +10 -12
- data/lib/prawn/images/png.rb +13 -13
- data/lib/prawn/measurements.rb +7 -14
- data/lib/prawn/outline.rb +6 -6
- data/lib/prawn/repeater.rb +1 -5
- data/lib/prawn/security.rb +17 -25
- data/lib/prawn/security/arcfour.rb +1 -1
- data/lib/prawn/soft_mask.rb +11 -12
- data/lib/prawn/stamp.rb +16 -8
- data/lib/prawn/text.rb +23 -20
- data/lib/prawn/text/box.rb +3 -6
- data/lib/prawn/text/formatted/arranger.rb +9 -12
- data/lib/prawn/text/formatted/box.rb +23 -22
- data/lib/prawn/text/formatted/fragment.rb +0 -4
- data/lib/prawn/text/formatted/line_wrap.rb +13 -24
- data/lib/prawn/text/formatted/parser.rb +16 -20
- data/lib/prawn/text/formatted/wrap.rb +2 -7
- data/lib/prawn/utilities.rb +6 -3
- data/lib/prawn/version.rb +1 -1
- data/manual/basic_concepts/basic_concepts.rb +0 -2
- data/manual/basic_concepts/view.rb +1 -1
- data/manual/bounding_box/bounding_box.rb +0 -3
- data/manual/bounding_box/russian_boxes.rb +7 -8
- data/manual/bounding_box/stretchy.rb +0 -1
- data/manual/contents.rb +2 -2
- data/manual/cover.rb +11 -12
- data/manual/document_and_page_options/document_and_page_options.rb +2 -5
- data/manual/document_and_page_options/metadata.rb +10 -10
- data/manual/document_and_page_options/page_size.rb +0 -1
- data/manual/graphics/fill_rules.rb +5 -4
- data/manual/graphics/graphics.rb +0 -3
- data/manual/graphics/lines_and_curves.rb +1 -1
- data/manual/graphics/rotate.rb +0 -2
- data/manual/graphics/scale.rb +4 -2
- data/manual/graphics/soft_masks.rb +0 -1
- data/manual/graphics/stroke_cap.rb +1 -1
- data/manual/graphics/stroke_join.rb +1 -1
- data/manual/graphics/translate.rb +3 -3
- data/manual/graphics/transparency.rb +0 -1
- data/manual/how_to_read_this_manual.rb +0 -1
- data/manual/images/images.rb +0 -3
- data/manual/layout/boxes.rb +5 -5
- data/manual/layout/content.rb +2 -2
- data/manual/layout/layout.rb +0 -3
- data/manual/outline/outline.rb +0 -3
- data/manual/repeatable_content/page_numbering.rb +1 -1
- data/manual/repeatable_content/repeatable_content.rb +0 -3
- data/manual/repeatable_content/repeater.rb +6 -6
- data/manual/security/encryption.rb +0 -2
- data/manual/security/permissions.rb +0 -2
- data/manual/security/security.rb +0 -3
- data/manual/text/alignment.rb +3 -3
- data/manual/text/color.rb +0 -1
- data/manual/text/column_box.rb +0 -1
- data/manual/text/fallback_fonts.rb +2 -2
- data/manual/text/formatted_callbacks.rb +3 -2
- data/manual/text/paragraph_indentation.rb +2 -3
- data/manual/text/registering_families.rb +13 -9
- data/manual/text/rotation.rb +0 -1
- data/manual/text/text.rb +0 -3
- data/manual/text/text_box_overflow.rb +7 -5
- data/manual/text/utf8.rb +1 -1
- data/manual/text/win_ansi_charset.rb +2 -2
- data/prawn.gemspec +4 -4
- data/spec/acceptance/png.rb +6 -7
- data/spec/annotations_spec.rb +21 -28
- data/spec/bounding_box_spec.rb +100 -109
- data/spec/column_box_spec.rb +26 -32
- data/spec/destinations_spec.rb +2 -4
- data/spec/document_spec.rb +145 -151
- data/spec/extensions/mocha.rb +0 -1
- data/spec/font_metric_cache_spec.rb +7 -7
- data/spec/font_spec.rb +103 -102
- data/spec/formatted_text_arranger_spec.rb +76 -74
- data/spec/formatted_text_box_spec.rb +170 -159
- data/spec/formatted_text_fragment_spec.rb +57 -56
- data/spec/graphics_spec.rb +158 -175
- data/spec/grid_spec.rb +28 -29
- data/spec/image_handler_spec.rb +4 -5
- data/spec/images_spec.rb +50 -36
- data/spec/inline_formatted_text_parser_spec.rb +397 -393
- data/spec/jpg_spec.rb +4 -6
- data/spec/line_wrap_spec.rb +54 -55
- data/spec/measurement_units_spec.rb +12 -15
- data/spec/outline_spec.rb +77 -98
- data/spec/png_spec.rb +55 -65
- data/spec/reference_spec.rb +3 -3
- data/spec/repeater_spec.rb +20 -26
- data/spec/security_spec.rb +42 -49
- data/spec/soft_mask_spec.rb +4 -5
- data/spec/span_spec.rb +5 -6
- data/spec/spec_helper.rb +2 -4
- data/spec/stamp_spec.rb +41 -22
- data/spec/stroke_styles_spec.rb +36 -39
- data/spec/text_at_spec.rb +28 -29
- data/spec/text_box_spec.rb +160 -165
- data/spec/text_rendering_mode_spec.rb +9 -9
- data/spec/text_spacing_spec.rb +13 -13
- data/spec/text_spec.rb +116 -124
- data/spec/text_with_inline_formatting_spec.rb +5 -5
- data/spec/transparency_spec.rb +20 -20
- data/spec/view_spec.rb +0 -1
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b05cc94288d323f650bc4a44529992282d42b69f
|
4
|
+
data.tar.gz: 71cb2515eb6667207083899502a96487807f8667
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4081995850066454b2ec29d3532ea5470812d8af92606a7e2d65d9514105242d3e4061927559e8280c180732c8223d11f37debc7423382ffeada0820dbfc8c8c
|
7
|
+
data.tar.gz: f1ef9c7346cddd535db2acde3a3522bdc4a128dcd8da2eb45439278203ca982e22543de1667a0d7f6435824884f73eb8ed046f6dbf128fa9ad3d721792bc4add
|
data/Rakefile
CHANGED
@@ -17,8 +17,12 @@ end
|
|
17
17
|
desc "Show library's code statistics"
|
18
18
|
task :stats do
|
19
19
|
require 'code_statistics/code_statistics'
|
20
|
-
puts CodeStatistics::CodeStatistics.new(
|
21
|
-
|
20
|
+
puts CodeStatistics::CodeStatistics.new(
|
21
|
+
[
|
22
|
+
["Prawn", "lib"],
|
23
|
+
["Specs", "spec"]
|
24
|
+
]
|
25
|
+
).to_s
|
22
26
|
end
|
23
27
|
|
24
28
|
YARD::Rake::YardocTask.new do |t|
|
@@ -26,12 +30,10 @@ YARD::Rake::YardocTask.new do |t|
|
|
26
30
|
end
|
27
31
|
task :docs => :yard
|
28
32
|
|
29
|
-
|
30
33
|
desc "Generate the 'Prawn by Example' manual"
|
31
34
|
task :manual do
|
32
35
|
puts "Building manual..."
|
33
|
-
require File.expand_path(File.join(File.dirname(__FILE__),
|
34
|
-
%w[manual contents]))
|
36
|
+
require File.expand_path(File.join(File.dirname(__FILE__), %w[manual contents]))
|
35
37
|
puts "The Prawn manual is available at manual.pdf. Happy Prawning!"
|
36
38
|
end
|
37
39
|
|
data/lib/prawn.rb
CHANGED
@@ -36,10 +36,10 @@ module Prawn
|
|
36
36
|
|
37
37
|
def verify_options(accepted, actual) # @private
|
38
38
|
return unless debug || $DEBUG
|
39
|
-
unless (act=Set[*actual.keys]).subset?(acc=Set[*accepted])
|
40
|
-
|
41
|
-
|
42
|
-
|
39
|
+
unless (act = Set[*actual.keys]).subset?(acc = Set[*accepted])
|
40
|
+
fail Prawn::Errors::UnknownOption,
|
41
|
+
"\nDetected unknown option(s): #{(act - acc).to_a.inspect}\n" \
|
42
|
+
"Accepted options are: #{accepted.inspect}"
|
43
43
|
end
|
44
44
|
yield if block_given?
|
45
45
|
end
|
data/lib/prawn/document.rb
CHANGED
@@ -14,7 +14,6 @@ require_relative "document/internals"
|
|
14
14
|
require_relative "document/span"
|
15
15
|
|
16
16
|
module Prawn
|
17
|
-
|
18
17
|
# The Prawn::Document class is how you start creating a PDF document.
|
19
18
|
#
|
20
19
|
# There are three basic ways you can instantiate PDF Documents in Prawn, they
|
@@ -102,7 +101,7 @@ module Prawn
|
|
102
101
|
# @group Stable Attributes
|
103
102
|
|
104
103
|
attr_accessor :margin_box
|
105
|
-
attr_reader
|
104
|
+
attr_reader :margins, :y
|
106
105
|
attr_accessor :page_number
|
107
106
|
|
108
107
|
# @group Extension Attributes
|
@@ -138,8 +137,8 @@ module Prawn
|
|
138
137
|
# pdf.draw_text content, :at => [200,720], :size => 32
|
139
138
|
# end
|
140
139
|
#
|
141
|
-
def self.generate(filename,options={}
|
142
|
-
pdf = new(options
|
140
|
+
def self.generate(filename, options = {}, &block)
|
141
|
+
pdf = new(options, &block)
|
143
142
|
pdf.render_file(filename)
|
144
143
|
end
|
145
144
|
|
@@ -189,7 +188,7 @@ module Prawn
|
|
189
188
|
# # New document, with background
|
190
189
|
# pdf = Prawn::Document.new(:background => "#{Prawn::DATADIR}/images/pigs.jpg")
|
191
190
|
#
|
192
|
-
def initialize(options={}
|
191
|
+
def initialize(options = {}, &block)
|
193
192
|
options = options.dup
|
194
193
|
|
195
194
|
Prawn.verify_options VALID_OPTIONS, options
|
@@ -198,8 +197,8 @@ module Prawn
|
|
198
197
|
# raise NotImplementedError if options[:skip_page_creation]
|
199
198
|
|
200
199
|
self.class.extensions.reverse_each { |e| extend e }
|
201
|
-
|
202
|
-
|
200
|
+
self.state = PDF::Core::DocumentState.new(options)
|
201
|
+
self.state.populate_pages_from_store(self)
|
203
202
|
renderer.min_version(state.store.min_version) if state.store.min_version
|
204
203
|
|
205
204
|
renderer.min_version(1.6) if options[:print_scaling] == :none
|
@@ -246,13 +245,17 @@ module Prawn
|
|
246
245
|
last_page_margins = last_page.margins.dup
|
247
246
|
end
|
248
247
|
|
249
|
-
page_options = {
|
250
|
-
|
251
|
-
|
248
|
+
page_options = {
|
249
|
+
:size => options[:size] || last_page_size,
|
250
|
+
:layout => options[:layout] || last_page_layout,
|
251
|
+
:margins => last_page_margins
|
252
|
+
}
|
252
253
|
if last_page
|
253
254
|
new_graphic_state = last_page.graphic_state.dup if last_page.graphic_state
|
254
|
-
|
255
|
+
|
256
|
+
# erase the color space so that it gets reset on new page for fussy pdf-readers
|
255
257
|
new_graphic_state.color_space = {} if new_graphic_state
|
258
|
+
|
256
259
|
page_options.merge!(:graphic_state => new_graphic_state)
|
257
260
|
end
|
258
261
|
|
@@ -300,7 +303,7 @@ module Prawn
|
|
300
303
|
#
|
301
304
|
def go_to_page(k)
|
302
305
|
@page_number = k
|
303
|
-
state.page = state.pages[k-1]
|
306
|
+
state.page = state.pages[k - 1]
|
304
307
|
generate_margin_box
|
305
308
|
@y = @bounding_box.absolute_top
|
306
309
|
end
|
@@ -466,7 +469,6 @@ module Prawn
|
|
466
469
|
move_down(y)
|
467
470
|
end
|
468
471
|
|
469
|
-
|
470
472
|
# Indents the specified number of PDF points for the duration of the block
|
471
473
|
#
|
472
474
|
# pdf.text "some text"
|
@@ -518,18 +520,20 @@ module Prawn
|
|
518
520
|
# :size => 14}
|
519
521
|
# end
|
520
522
|
#
|
521
|
-
def number_pages(string, options={})
|
523
|
+
def number_pages(string, options = {})
|
522
524
|
opts = options.dup
|
523
525
|
start_count_at = opts.delete(:start_count_at).to_i
|
524
|
-
|
525
|
-
|
526
|
+
|
527
|
+
if opts.key?(:page_filter)
|
528
|
+
page_filter = opts.delete(:page_filter)
|
526
529
|
else
|
527
|
-
:all
|
530
|
+
page_filter = :all
|
528
531
|
end
|
532
|
+
|
529
533
|
total_pages = opts.delete(:total_pages)
|
530
534
|
txtcolor = opts.delete(:color)
|
531
535
|
# An explicit height so that we can draw page numbers in the margins
|
532
|
-
opts[:height] = 50 unless opts.
|
536
|
+
opts[:height] = 50 unless opts.key?(:height)
|
533
537
|
|
534
538
|
start_count = false
|
535
539
|
pseudopage = 0
|
@@ -547,7 +551,7 @@ module Prawn
|
|
547
551
|
# have to use fill_color here otherwise text reverts back to default fill color
|
548
552
|
fill_color txtcolor unless txtcolor.nil?
|
549
553
|
total_pages = total_pages.nil? ? page_count : total_pages
|
550
|
-
str = string.gsub("<page>","#{pseudopage}").gsub("<total>","#{total_pages}")
|
554
|
+
str = string.gsub("<page>", "#{pseudopage}").gsub("<total>", "#{total_pages}")
|
551
555
|
text_box str, opts
|
552
556
|
start_count = true # increment page count as soon as first match found
|
553
557
|
end
|
@@ -568,20 +572,20 @@ module Prawn
|
|
568
572
|
#
|
569
573
|
# @private
|
570
574
|
def group(*a, &b)
|
571
|
-
|
572
|
-
|
573
|
-
|
574
|
-
|
575
|
-
|
575
|
+
fail NotImplementedError,
|
576
|
+
"Document#group has been disabled because its implementation " \
|
577
|
+
"lead to corrupted documents whenever a page boundary was " \
|
578
|
+
"crossed. We will try to work on reimplementing it in a " \
|
579
|
+
"future release"
|
576
580
|
end
|
577
581
|
|
578
582
|
# @private
|
579
583
|
def transaction
|
580
|
-
|
581
|
-
|
582
|
-
|
583
|
-
|
584
|
-
|
584
|
+
fail NotImplementedError,
|
585
|
+
"Document#transaction has been disabled because its implementation " \
|
586
|
+
"lead to corrupted documents whenever a page boundary was " \
|
587
|
+
"crossed. We will try to work on reimplementing it in a " \
|
588
|
+
"future release"
|
585
589
|
end
|
586
590
|
|
587
591
|
# Provides a way to execute a block of code repeatedly based on a
|
@@ -599,9 +603,9 @@ module Prawn
|
|
599
603
|
when :all
|
600
604
|
true
|
601
605
|
when :odd
|
602
|
-
page_number
|
606
|
+
page_number.odd?
|
603
607
|
when :even
|
604
|
-
page_number
|
608
|
+
page_number.even?
|
605
609
|
when Range, Array
|
606
610
|
page_filter.include?(page_number)
|
607
611
|
when Proc
|
@@ -612,9 +616,9 @@ module Prawn
|
|
612
616
|
# @private
|
613
617
|
|
614
618
|
def mask(*fields)
|
615
|
-
|
616
|
-
|
617
|
-
|
619
|
+
# Stores the current state of the named attributes, executes the block, and
|
620
|
+
# then restores the original values after the block has executed.
|
621
|
+
# -- I will remove the nodoc if/when this feature is a little less hacky
|
618
622
|
stored = {}
|
619
623
|
fields.each { |f| stored[f] = send(f) }
|
620
624
|
yield
|
@@ -634,9 +638,7 @@ module Prawn
|
|
634
638
|
## Internals. Don't depend on them!
|
635
639
|
|
636
640
|
# @private
|
637
|
-
|
638
|
-
@internal_state
|
639
|
-
end
|
641
|
+
attr_accessor :state
|
640
642
|
|
641
643
|
# @private
|
642
644
|
def page
|
@@ -645,7 +647,6 @@ module Prawn
|
|
645
647
|
|
646
648
|
private
|
647
649
|
|
648
|
-
|
649
650
|
# setting override_settings to true ensures that a new graphic state does not end up using
|
650
651
|
# previous settings.
|
651
652
|
def use_graphic_settings(override_settings = false)
|
@@ -684,23 +685,23 @@ module Prawn
|
|
684
685
|
if options[:margin]
|
685
686
|
# Treat :margin as CSS shorthand with 1-4 values.
|
686
687
|
margin = Array(options[:margin])
|
687
|
-
positions = { 4 => [0,1,2,3], 3 => [0,1,2,1],
|
688
|
-
2 => [0,1,0,1], 1 => [0,0,0,0] }[margin.length]
|
688
|
+
positions = { 4 => [0, 1, 2, 3], 3 => [0, 1, 2, 1],
|
689
|
+
2 => [0, 1, 0, 1], 1 => [0, 0, 0, 0] }[margin.length]
|
689
690
|
|
690
|
-
[:top, :right, :bottom, :left].zip(positions).each do |p,i|
|
691
|
+
[:top, :right, :bottom, :left].zip(positions).each do |p, i|
|
691
692
|
options[:"#{p}_margin"] ||= margin[i]
|
692
693
|
end
|
693
694
|
end
|
694
695
|
|
695
|
-
[:left
|
696
|
-
|
697
|
-
|
698
|
-
|
696
|
+
[:left, :right, :top, :bottom].each do |side|
|
697
|
+
if margin = options[:"#{side}_margin"]
|
698
|
+
state.page.margins[side] = margin
|
699
|
+
end
|
699
700
|
end
|
700
701
|
end
|
701
702
|
|
702
703
|
def font_metric_cache #:nodoc:
|
703
|
-
@font_metric_cache ||= FontMetricCache.new(
|
704
|
+
@font_metric_cache ||= FontMetricCache.new(self)
|
704
705
|
end
|
705
706
|
end
|
706
707
|
end
|
@@ -172,7 +172,8 @@ module Prawn
|
|
172
172
|
def canvas(&block)
|
173
173
|
init_bounding_box(block, :hold_position => true) do |_|
|
174
174
|
# Canvas bbox acts like margin_box in that its parent bounds are unset.
|
175
|
-
@bounding_box = BoundingBox.new(
|
175
|
+
@bounding_box = BoundingBox.new(
|
176
|
+
self, nil, [0, page.dimensions[3]],
|
176
177
|
:width => page.dimensions[2],
|
177
178
|
:height => page.dimensions[3]
|
178
179
|
)
|
@@ -181,10 +182,10 @@ module Prawn
|
|
181
182
|
|
182
183
|
private
|
183
184
|
|
184
|
-
def init_bounding_box(user_block, options={}, &init_block)
|
185
|
+
def init_bounding_box(user_block, options = {}, &init_block)
|
185
186
|
unless user_block
|
186
|
-
|
187
|
-
|
187
|
+
fail ArgumentError,
|
188
|
+
"bounding boxes require a block to be drawn within the box"
|
188
189
|
end
|
189
190
|
|
190
191
|
parent_box = @bounding_box
|
@@ -219,10 +220,9 @@ module Prawn
|
|
219
220
|
# is used for.
|
220
221
|
#
|
221
222
|
class BoundingBox
|
222
|
-
|
223
|
-
def initialize(document, parent, point, options={}) # @private
|
223
|
+
def initialize(document, parent, point, options = {}) # @private
|
224
224
|
unless options[:width]
|
225
|
-
|
225
|
+
fail ArgumentError, "BoundingBox needs the :width option to be set"
|
226
226
|
end
|
227
227
|
|
228
228
|
@document = document
|
@@ -264,7 +264,6 @@ module Prawn
|
|
264
264
|
0
|
265
265
|
end
|
266
266
|
|
267
|
-
|
268
267
|
# Temporarily adjust the @x coordinate to allow for left_padding
|
269
268
|
#
|
270
269
|
# Example:
|
@@ -360,7 +359,7 @@ module Prawn
|
|
360
359
|
# end
|
361
360
|
#
|
362
361
|
def top_left
|
363
|
-
[left,top]
|
362
|
+
[left, top]
|
364
363
|
end
|
365
364
|
|
366
365
|
# Relative top-right point of the bounding box
|
@@ -373,7 +372,7 @@ module Prawn
|
|
373
372
|
# end
|
374
373
|
#
|
375
374
|
def top_right
|
376
|
-
[right,top]
|
375
|
+
[right, top]
|
377
376
|
end
|
378
377
|
|
379
378
|
# Relative bottom-right point of the bounding box
|
@@ -385,7 +384,7 @@ module Prawn
|
|
385
384
|
# end
|
386
385
|
#
|
387
386
|
def bottom_right
|
388
|
-
[right,bottom]
|
387
|
+
[right, bottom]
|
389
388
|
end
|
390
389
|
|
391
390
|
# Relative bottom-left point of the bounding box
|
@@ -397,7 +396,7 @@ module Prawn
|
|
397
396
|
# end
|
398
397
|
#
|
399
398
|
def bottom_left
|
400
|
-
[left,bottom]
|
399
|
+
[left, bottom]
|
401
400
|
end
|
402
401
|
|
403
402
|
# Absolute left x-coordinate of the bounding box
|
@@ -449,10 +448,7 @@ module Prawn
|
|
449
448
|
end
|
450
449
|
|
451
450
|
# Width of the bounding box
|
452
|
-
|
453
|
-
def width
|
454
|
-
@width
|
455
|
-
end
|
451
|
+
attr_reader :width
|
456
452
|
|
457
453
|
# Height of the bounding box. If the box is 'stretchy' (unspecified
|
458
454
|
# height attribute), height is calculated as the distance from the top of
|
@@ -500,7 +496,7 @@ module Prawn
|
|
500
496
|
#
|
501
497
|
def reference_bounds
|
502
498
|
if stretchy?
|
503
|
-
|
499
|
+
fail "Can't find reference bounds: my parent is unset" unless @parent
|
504
500
|
@parent.reference_bounds
|
505
501
|
else
|
506
502
|
self
|
@@ -532,8 +528,6 @@ module Prawn
|
|
532
528
|
bounds.instance_variable_set("@document", document)
|
533
529
|
bounds
|
534
530
|
end
|
535
|
-
|
536
531
|
end
|
537
|
-
|
538
532
|
end
|
539
533
|
end
|
@@ -10,7 +10,6 @@ require_relative "bounding_box"
|
|
10
10
|
|
11
11
|
module Prawn
|
12
12
|
class Document
|
13
|
-
|
14
13
|
# @group Experimental API
|
15
14
|
|
16
15
|
# A column box is a bounding box with the additional property that when
|
@@ -37,7 +36,7 @@ module Prawn
|
|
37
36
|
|
38
37
|
private
|
39
38
|
|
40
|
-
def init_column_box(user_block, options={}, &init_block)
|
39
|
+
def init_column_box(user_block, options = {}, &init_block)
|
41
40
|
parent_box = @bounding_box
|
42
41
|
|
43
42
|
init_block.call(parent_box)
|
@@ -53,11 +52,10 @@ module Prawn
|
|
53
52
|
# work.
|
54
53
|
#
|
55
54
|
class ColumnBox < BoundingBox
|
56
|
-
|
57
|
-
def initialize(document, parent, point, options={}) #:nodoc:
|
55
|
+
def initialize(document, parent, point, options = {}) #:nodoc:
|
58
56
|
super
|
59
57
|
@columns = options[:columns] || 3
|
60
|
-
@spacer = options[:spacer]
|
58
|
+
@spacer = options[:spacer] || @document.font_size
|
61
59
|
@current_column = 0
|
62
60
|
@reflow_margins = options[:reflow_margins]
|
63
61
|
end
|
@@ -10,7 +10,6 @@ require "forwardable"
|
|
10
10
|
|
11
11
|
module Prawn
|
12
12
|
class Document
|
13
|
-
|
14
13
|
# This module exposes a few low-level PDF features for those who want
|
15
14
|
# to extend Prawn's core functionality. If you are not comfortable with
|
16
15
|
# low level PDF functionality as defined by Adobe's specification, chances
|
data/lib/prawn/document/span.rb
CHANGED
@@ -26,23 +26,23 @@ module Prawn
|
|
26
26
|
# text "Here's some centered text in a 350 point column. " * 100
|
27
27
|
# end
|
28
28
|
#
|
29
|
-
def span(width, options={})
|
29
|
+
def span(width, options = {})
|
30
30
|
Prawn.verify_options [:position], options
|
31
31
|
original_position = self.y
|
32
32
|
|
33
33
|
# FIXME: Any way to move this upstream?
|
34
34
|
left_boundary = case(options[:position] || :left)
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
35
|
+
when :left
|
36
|
+
margin_box.absolute_left
|
37
|
+
when :center
|
38
|
+
margin_box.absolute_left + margin_box.width / 2.0 - width / 2.0
|
39
|
+
when :right
|
40
|
+
margin_box.absolute_right - width
|
41
|
+
when Numeric
|
42
|
+
margin_box.absolute_left + options[:position]
|
43
|
+
else
|
44
|
+
fail ArgumentError, "Invalid option for :position"
|
45
|
+
end
|
46
46
|
|
47
47
|
# we need to bust out of whatever nested bounding boxes we're in.
|
48
48
|
canvas do
|