prawn 0.13.0 → 2.4.0
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 +5 -5
- checksums.yaml.gz.sig +0 -0
- data/.yardopts +10 -0
- data/GPLv2 +20 -21
- data/Gemfile +3 -16
- data/Rakefile +17 -39
- data/lib/prawn/document/bounding_box.rb +85 -42
- data/lib/prawn/document/column_box.rb +21 -11
- data/lib/prawn/document/internals.rb +40 -147
- data/lib/prawn/document/span.rb +25 -17
- data/lib/prawn/document.rb +286 -245
- data/lib/prawn/encoding.rb +68 -101
- data/lib/prawn/errors.rb +47 -43
- data/lib/prawn/font.rb +204 -155
- data/lib/prawn/font_metric_cache.rb +25 -21
- data/lib/prawn/fonts/afm.rb +292 -0
- data/lib/prawn/{font → fonts}/dfont.rb +7 -13
- data/lib/prawn/fonts/otf.rb +11 -0
- data/lib/prawn/fonts/ttc.rb +36 -0
- data/lib/prawn/{font → fonts}/ttf.rb +142 -80
- data/lib/prawn/graphics/blend_mode.rb +65 -0
- data/lib/prawn/graphics/cap_style.rb +6 -5
- data/lib/prawn/graphics/color.rb +47 -44
- data/lib/prawn/graphics/dash.rb +30 -13
- data/lib/prawn/graphics/join_style.rb +13 -6
- data/lib/prawn/graphics/patterns.rb +221 -90
- data/lib/prawn/graphics/transformation.rb +21 -12
- data/lib/prawn/graphics/transparency.rb +21 -17
- data/lib/prawn/graphics.rb +155 -128
- data/lib/prawn/{layout/grid.rb → grid.rb} +110 -47
- data/lib/prawn/image_handler.rb +16 -2
- data/lib/prawn/images/image.rb +4 -2
- data/lib/prawn/images/jpg.rb +39 -30
- data/lib/prawn/images/png.rb +132 -169
- data/lib/prawn/images.rb +70 -62
- data/lib/prawn/measurement_extensions.rb +15 -10
- data/lib/prawn/measurements.rb +22 -23
- data/lib/prawn/outline.rb +301 -13
- data/lib/prawn/repeater.rb +19 -17
- data/lib/prawn/security/arcfour.rb +54 -0
- data/lib/prawn/security.rb +108 -86
- data/lib/prawn/soft_mask.rb +40 -41
- data/lib/prawn/stamp.rb +29 -12
- data/lib/prawn/text/box.rb +27 -29
- data/lib/prawn/text/formatted/arranger.rb +110 -67
- data/lib/prawn/text/formatted/box.rb +233 -165
- data/lib/prawn/text/formatted/fragment.rb +27 -27
- data/lib/prawn/text/formatted/line_wrap.rb +137 -97
- data/lib/prawn/text/formatted/parser.rb +149 -127
- data/lib/prawn/text/formatted/wrap.rb +57 -37
- data/lib/prawn/text/formatted.rb +6 -4
- data/lib/prawn/text.rb +105 -73
- data/lib/prawn/transformation_stack.rb +44 -0
- data/lib/prawn/utilities.rb +11 -21
- data/lib/prawn/version.rb +5 -0
- data/lib/prawn/view.rb +101 -0
- data/lib/prawn.rb +42 -68
- data/{data/images/fractal.jpg → manual/absolute_position.pdf} +0 -0
- data/manual/basic_concepts/adding_pages.rb +9 -10
- data/manual/basic_concepts/basic_concepts.rb +33 -24
- data/manual/basic_concepts/creation.rb +10 -11
- data/manual/basic_concepts/cursor.rb +9 -10
- data/manual/basic_concepts/measurement.rb +10 -11
- data/manual/basic_concepts/origin.rb +8 -9
- data/manual/basic_concepts/other_cursor_helpers.rb +17 -18
- data/manual/basic_concepts/view.rb +48 -0
- data/manual/bounding_box/bounding_box.rb +31 -29
- data/manual/bounding_box/bounds.rb +17 -18
- data/manual/bounding_box/canvas.rb +8 -9
- data/manual/bounding_box/creation.rb +8 -9
- data/manual/bounding_box/indentation.rb +22 -23
- data/manual/bounding_box/nesting.rb +32 -25
- data/manual/bounding_box/russian_boxes.rb +19 -19
- data/manual/bounding_box/stretchy.rb +18 -20
- data/manual/contents.rb +35 -0
- data/manual/cover.rb +43 -0
- data/manual/document_and_page_options/background.rb +16 -14
- data/manual/document_and_page_options/document_and_page_options.rb +26 -23
- data/manual/document_and_page_options/metadata.rb +21 -19
- data/manual/document_and_page_options/page_margins.rb +20 -22
- data/manual/document_and_page_options/page_size.rb +15 -15
- data/manual/document_and_page_options/print_scaling.rb +23 -0
- data/manual/example_helper.rb +5 -408
- data/manual/graphics/blend_mode.rb +52 -0
- data/manual/graphics/circle_and_ellipse.rb +8 -9
- data/manual/graphics/color.rb +11 -13
- data/manual/graphics/common_lines.rb +13 -12
- data/manual/graphics/fill_and_stroke.rb +10 -11
- data/manual/graphics/fill_rules.rb +13 -12
- data/manual/graphics/gradients.rb +28 -22
- data/manual/graphics/graphics.rb +52 -46
- data/manual/graphics/helper.rb +20 -10
- data/manual/graphics/line_width.rb +13 -12
- data/manual/graphics/lines_and_curves.rb +13 -14
- data/manual/graphics/polygon.rb +10 -12
- data/manual/graphics/rectangle.rb +7 -8
- data/manual/graphics/rotate.rb +9 -12
- data/manual/graphics/scale.rb +19 -18
- data/manual/graphics/soft_masks.rb +5 -7
- data/manual/graphics/stroke_cap.rb +10 -11
- data/manual/graphics/stroke_dash.rb +16 -17
- data/manual/graphics/stroke_join.rb +10 -11
- data/manual/graphics/translate.rb +13 -13
- data/manual/graphics/transparency.rb +11 -13
- data/manual/{manual/how_to_read_this_manual.rb → how_to_read_this_manual.rb} +23 -25
- data/manual/images/absolute_position.rb +9 -10
- data/manual/images/fit.rb +9 -10
- data/manual/images/horizontal.rb +13 -14
- data/manual/images/images.rb +31 -30
- data/manual/images/plain_image.rb +6 -7
- data/manual/images/scale.rb +12 -13
- data/manual/images/vertical.rb +19 -17
- data/manual/images/width_and_height.rb +13 -14
- data/manual/layout/boxes.rb +14 -15
- data/manual/layout/content.rb +12 -13
- data/manual/layout/layout.rb +19 -20
- data/manual/layout/simple_grid.rb +8 -9
- data/manual/outline/add_subsection_to.rb +26 -27
- data/manual/outline/insert_section_after.rb +19 -20
- data/manual/outline/outline.rb +23 -22
- data/manual/outline/sections_and_pages.rb +24 -25
- data/manual/repeatable_content/alternate_page_numbering.rb +36 -0
- data/manual/repeatable_content/page_numbering.rb +20 -19
- data/manual/repeatable_content/repeatable_content.rb +26 -22
- data/manual/repeatable_content/repeater.rb +18 -19
- data/manual/repeatable_content/stamp.rb +18 -19
- data/manual/security/encryption.rb +8 -11
- data/manual/security/permissions.rb +20 -15
- data/manual/security/security.rb +20 -20
- data/manual/table.rb +16 -0
- data/manual/text/alignment.rb +17 -18
- data/manual/text/color.rb +13 -13
- data/manual/text/column_box.rb +10 -12
- data/manual/text/fallback_fonts.rb +29 -25
- data/manual/text/font.rb +17 -18
- data/manual/text/font_size.rb +21 -22
- data/manual/text/font_style.rb +12 -10
- data/manual/text/formatted_callbacks.rb +36 -26
- data/manual/text/formatted_text.rb +41 -34
- data/manual/text/free_flowing_text.rb +28 -29
- data/manual/text/inline.rb +23 -26
- data/manual/text/kerning_and_character_spacing.rb +20 -21
- data/manual/text/leading.rb +10 -11
- data/manual/text/line_wrapping.rb +40 -21
- data/manual/text/paragraph_indentation.rb +17 -12
- data/manual/text/positioned_text.rb +19 -20
- data/manual/text/registering_families.rb +33 -30
- data/manual/text/rendering_and_color.rb +11 -12
- data/manual/text/right_to_left_text.rb +31 -20
- data/manual/text/rotation.rb +36 -27
- data/manual/text/single_usage.rb +13 -14
- data/manual/text/text.rb +62 -62
- data/manual/text/text_box_excess.rb +22 -19
- data/manual/text/text_box_extensions.rb +21 -18
- data/manual/text/text_box_overflow.rb +28 -21
- data/manual/text/utf8.rb +16 -17
- data/manual/text/win_ansi_charset.rb +29 -26
- data/prawn.gemspec +45 -43
- data/spec/extensions/encoding_helpers.rb +4 -3
- data/spec/prawn/document/bounding_box_spec.rb +550 -0
- data/spec/prawn/document/column_box_spec.rb +75 -0
- data/spec/prawn/document/security_spec.rb +176 -0
- data/spec/prawn/document_annotations_spec.rb +76 -0
- data/spec/prawn/document_destinations_spec.rb +15 -0
- data/spec/prawn/document_grid_spec.rb +99 -0
- data/spec/prawn/document_reference_spec.rb +27 -0
- data/spec/prawn/document_span_spec.rb +44 -0
- data/spec/prawn/document_spec.rb +805 -0
- data/spec/prawn/font_metric_cache_spec.rb +54 -0
- data/spec/prawn/font_spec.rb +544 -0
- data/spec/prawn/graphics/blend_mode_spec.rb +63 -0
- data/spec/prawn/graphics/transparency_spec.rb +81 -0
- data/spec/prawn/graphics_spec.rb +872 -0
- data/spec/prawn/graphics_stroke_styles_spec.rb +229 -0
- data/spec/prawn/image_handler_spec.rb +53 -0
- data/spec/prawn/images/jpg_spec.rb +20 -0
- data/spec/prawn/images/png_spec.rb +283 -0
- data/spec/prawn/images_spec.rb +229 -0
- data/spec/prawn/measurements_extensions_spec.rb +24 -0
- data/spec/prawn/outline_spec.rb +512 -0
- data/spec/prawn/repeater_spec.rb +166 -0
- data/spec/prawn/soft_mask_spec.rb +74 -0
- data/spec/prawn/stamp_spec.rb +173 -0
- data/spec/prawn/text/box_spec.rb +1110 -0
- data/spec/prawn/text/formatted/arranger_spec.rb +466 -0
- data/spec/prawn/text/formatted/box_spec.rb +849 -0
- data/spec/prawn/text/formatted/fragment_spec.rb +343 -0
- data/spec/prawn/text/formatted/line_wrap_spec.rb +495 -0
- data/spec/prawn/text/formatted/parser_spec.rb +697 -0
- data/spec/prawn/text_draw_text_spec.rb +150 -0
- data/spec/prawn/text_rendering_mode_spec.rb +48 -0
- data/spec/prawn/text_spacing_spec.rb +95 -0
- data/spec/prawn/text_spec.rb +603 -0
- data/spec/prawn/text_with_inline_formatting_spec.rb +35 -0
- data/spec/prawn/transformation_stack_spec.rb +66 -0
- data/spec/prawn/view_spec.rb +63 -0
- data/spec/prawn_manual_spec.rb +35 -0
- data/spec/spec_helper.rb +22 -21
- data.tar.gz.sig +0 -0
- metadata +168 -307
- metadata.gz.sig +0 -0
- data/README.md +0 -109
- data/data/encodings/win_ansi.txt +0 -29
- data/data/images/16bit.alpha +0 -0
- data/data/images/16bit.dat +0 -0
- data/data/images/16bit.png +0 -0
- data/data/images/arrow.png +0 -0
- data/data/images/arrow2.png +0 -0
- data/data/images/barcode_issue.png +0 -0
- data/data/images/dice.alpha +0 -0
- data/data/images/dice.dat +0 -0
- data/data/images/dice.png +0 -0
- data/data/images/dice_interlaced.png +0 -0
- data/data/images/indexed_color.dat +0 -0
- data/data/images/indexed_color.png +0 -0
- data/data/images/letterhead.jpg +0 -0
- data/data/images/page_white_text.alpha +0 -0
- data/data/images/page_white_text.dat +0 -0
- data/data/images/page_white_text.png +0 -0
- data/data/images/pigs.jpg +0 -0
- data/data/images/prawn.png +0 -0
- data/data/images/ruport.png +0 -0
- data/data/images/ruport_data.dat +0 -0
- data/data/images/ruport_transparent.png +0 -0
- data/data/images/ruport_type0.png +0 -0
- data/data/images/stef.jpg +0 -0
- data/data/images/tru256.bmp +0 -0
- data/data/images/web-links.dat +0 -1
- data/data/images/web-links.png +0 -0
- data/data/pdfs/complex_template.pdf +0 -0
- data/data/pdfs/contains_ttf_font.pdf +0 -0
- data/data/pdfs/encrypted.pdf +0 -0
- data/data/pdfs/form.pdf +1 -819
- data/data/pdfs/hexagon.pdf +0 -61
- data/data/pdfs/indirect_reference.pdf +0 -86
- data/data/pdfs/multipage_template.pdf +0 -127
- data/data/pdfs/nested_pages.pdf +0 -118
- data/data/pdfs/page_without_mediabox.pdf +0 -193
- data/data/pdfs/resources_as_indirect_object.pdf +0 -83
- data/data/pdfs/two_hexagons.pdf +0 -90
- data/data/pdfs/version_1_6.pdf +0 -61
- data/data/shift_jis_text.txt +0 -1
- data/lib/pdf/core/annotations.rb +0 -60
- data/lib/pdf/core/byte_string.rb +0 -9
- data/lib/pdf/core/destinations.rb +0 -90
- data/lib/pdf/core/document_state.rb +0 -78
- data/lib/pdf/core/filter_list.rb +0 -51
- data/lib/pdf/core/filters.rb +0 -36
- data/lib/pdf/core/graphics_state.rb +0 -68
- data/lib/pdf/core/literal_string.rb +0 -16
- data/lib/pdf/core/name_tree.rb +0 -177
- data/lib/pdf/core/object_store.rb +0 -320
- data/lib/pdf/core/outline.rb +0 -315
- data/lib/pdf/core/page.rb +0 -212
- data/lib/pdf/core/page_geometry.rb +0 -126
- data/lib/pdf/core/pdf_object.rb +0 -124
- data/lib/pdf/core/reference.rb +0 -103
- data/lib/pdf/core/stream.rb +0 -98
- data/lib/pdf/core/text.rb +0 -275
- data/lib/pdf/core.rb +0 -35
- data/lib/prawn/compatibility.rb +0 -91
- data/lib/prawn/document/graphics_state.rb +0 -73
- data/lib/prawn/document/snapshot.rb +0 -89
- data/lib/prawn/font/afm.rb +0 -203
- data/lib/prawn/layout.rb +0 -20
- data/lib/prawn/table/cell/image.rb +0 -70
- data/lib/prawn/table/cell/in_table.rb +0 -27
- data/lib/prawn/table/cell/span_dummy.rb +0 -92
- data/lib/prawn/table/cell/subtable.rb +0 -65
- data/lib/prawn/table/cell/text.rb +0 -153
- data/lib/prawn/table/cell.rb +0 -770
- data/lib/prawn/table/cells.rb +0 -295
- data/lib/prawn/table.rb +0 -643
- data/manual/example_file.rb +0 -116
- data/manual/example_package.rb +0 -53
- data/manual/example_section.rb +0 -46
- data/manual/manual/cover.rb +0 -35
- data/manual/manual/foreword.rb +0 -85
- data/manual/manual/manual.rb +0 -35
- data/manual/syntax_highlight.rb +0 -52
- data/manual/table/basic_block.rb +0 -53
- data/manual/table/before_rendering_page.rb +0 -26
- data/manual/table/cell_border_lines.rb +0 -24
- data/manual/table/cell_borders_and_bg.rb +0 -31
- data/manual/table/cell_dimensions.rb +0 -30
- data/manual/table/cell_text.rb +0 -38
- data/manual/table/column_widths.rb +0 -30
- data/manual/table/content_and_subtables.rb +0 -39
- data/manual/table/creation.rb +0 -27
- data/manual/table/filtering.rb +0 -36
- data/manual/table/flow_and_header.rb +0 -17
- data/manual/table/image_cells.rb +0 -33
- data/manual/table/position.rb +0 -29
- data/manual/table/row_colors.rb +0 -20
- data/manual/table/span.rb +0 -30
- data/manual/table/style.rb +0 -22
- data/manual/table/table.rb +0 -52
- data/manual/table/width.rb +0 -27
- data/manual/templates/full_template.rb +0 -25
- data/manual/templates/page_template.rb +0 -48
- data/manual/templates/templates.rb +0 -27
- data/manual/text/group.rb +0 -29
- data/spec/acceptance/png.rb +0 -23
- data/spec/annotations_spec.rb +0 -74
- data/spec/bounding_box_spec.rb +0 -493
- data/spec/cell_spec.rb +0 -628
- data/spec/column_box_spec.rb +0 -33
- data/spec/destinations_spec.rb +0 -15
- data/spec/document_spec.rb +0 -761
- data/spec/extensions/mocha.rb +0 -44
- data/spec/filters_spec.rb +0 -34
- data/spec/font_metric_cache_spec.rb +0 -52
- data/spec/font_spec.rb +0 -464
- data/spec/formatted_text_arranger_spec.rb +0 -421
- data/spec/formatted_text_box_spec.rb +0 -650
- data/spec/formatted_text_fragment_spec.rb +0 -298
- data/spec/graphics_spec.rb +0 -651
- data/spec/grid_spec.rb +0 -85
- data/spec/image_handler_spec.rb +0 -42
- data/spec/images_spec.rb +0 -157
- data/spec/inline_formatted_text_parser_spec.rb +0 -564
- data/spec/jpg_spec.rb +0 -25
- data/spec/line_wrap_spec.rb +0 -333
- data/spec/measurement_units_spec.rb +0 -23
- data/spec/name_tree_spec.rb +0 -112
- data/spec/object_store_spec.rb +0 -170
- data/spec/outline_spec.rb +0 -448
- data/spec/pdf_object_spec.rb +0 -172
- data/spec/png_spec.rb +0 -240
- data/spec/reference_spec.rb +0 -82
- data/spec/repeater_spec.rb +0 -158
- data/spec/security_spec.rb +0 -158
- data/spec/snapshot_spec.rb +0 -186
- data/spec/soft_mask_spec.rb +0 -117
- data/spec/span_spec.rb +0 -44
- data/spec/stamp_spec.rb +0 -158
- data/spec/stream_spec.rb +0 -58
- data/spec/stroke_styles_spec.rb +0 -211
- data/spec/table/span_dummy_spec.rb +0 -17
- data/spec/table_spec.rb +0 -1355
- data/spec/template_spec.rb +0 -351
- data/spec/text_at_spec.rb +0 -130
- data/spec/text_box_spec.rb +0 -1030
- data/spec/text_rendering_mode_spec.rb +0 -45
- data/spec/text_spacing_spec.rb +0 -93
- data/spec/text_spec.rb +0 -425
- data/spec/text_with_inline_formatting_spec.rb +0 -35
- data/spec/transparency_spec.rb +0 -89
data/spec/bounding_box_spec.rb
DELETED
@@ -1,493 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
|
4
|
-
|
5
|
-
describe "A bounding box" do
|
6
|
-
|
7
|
-
before(:each) do
|
8
|
-
@x = 100
|
9
|
-
@y = 125
|
10
|
-
@width = 50
|
11
|
-
@height = 75
|
12
|
-
@box = Prawn::Document::BoundingBox.new(nil, nil, [@x,@y],
|
13
|
-
:width => @width, :height => @height )
|
14
|
-
end
|
15
|
-
|
16
|
-
it "should have an anchor at (x, y - height)" do
|
17
|
-
@box.anchor.should == [@x,@y-@height]
|
18
|
-
end
|
19
|
-
|
20
|
-
it "should have a left boundary of 0" do
|
21
|
-
@box.left.should == 0
|
22
|
-
end
|
23
|
-
|
24
|
-
it "should have a right boundary equal to the width" do
|
25
|
-
@box.right.should == @width
|
26
|
-
end
|
27
|
-
|
28
|
-
it "should have a top boundary of height" do
|
29
|
-
@box.top.should == @height
|
30
|
-
end
|
31
|
-
|
32
|
-
it "should have a bottom boundary of 0" do
|
33
|
-
@box.bottom.should == 0
|
34
|
-
end
|
35
|
-
|
36
|
-
it "should have a top-left of [0,height]" do
|
37
|
-
@box.top_left.should == [0,@height]
|
38
|
-
end
|
39
|
-
|
40
|
-
it "should have a top-right of [width,height]" do
|
41
|
-
@box.top_right.should == [@width,@height]
|
42
|
-
end
|
43
|
-
|
44
|
-
it "should have a bottom-left of [0,0]" do
|
45
|
-
@box.bottom_left.should == [0,0]
|
46
|
-
end
|
47
|
-
|
48
|
-
it "should have a bottom-right of [width,0]" do
|
49
|
-
@box.bottom_right.should == [@width,0]
|
50
|
-
end
|
51
|
-
|
52
|
-
it "should have an absolute left boundary of x" do
|
53
|
-
@box.absolute_left.should == @x
|
54
|
-
end
|
55
|
-
|
56
|
-
it "should have an absolute right boundary of x + width" do
|
57
|
-
@box.absolute_right.should == @x + @width
|
58
|
-
end
|
59
|
-
|
60
|
-
it "should have an absolute top boundary of y" do
|
61
|
-
@box.absolute_top.should == @y
|
62
|
-
end
|
63
|
-
|
64
|
-
it "should have an absolute bottom boundary of y - height" do
|
65
|
-
@box.absolute_bottom.should == @y - @height
|
66
|
-
end
|
67
|
-
|
68
|
-
it "should have an absolute bottom-left of [x,y-height]" do
|
69
|
-
@box.absolute_bottom_left.should == [@x, @y - @height]
|
70
|
-
end
|
71
|
-
|
72
|
-
it "should have an absolute bottom-right of [x+width,y-height]" do
|
73
|
-
@box.absolute_bottom_right.should == [@x + @width , @y - @height]
|
74
|
-
end
|
75
|
-
|
76
|
-
it "should have an absolute top-left of [x,y]" do
|
77
|
-
@box.absolute_top_left.should == [@x, @y]
|
78
|
-
end
|
79
|
-
|
80
|
-
it "should have an absolute top-right of [x+width,y]" do
|
81
|
-
@box.absolute_top_right.should == [@x + @width, @y]
|
82
|
-
end
|
83
|
-
|
84
|
-
it "should require width to be set" do
|
85
|
-
lambda do
|
86
|
-
Prawn::Document::BoundingBox.new(nil, nil, [100,100])
|
87
|
-
end.should raise_error(ArgumentError)
|
88
|
-
end
|
89
|
-
|
90
|
-
it "should raise_error an ArgumentError if a block is not passed" do
|
91
|
-
pdf = Prawn::Document.new
|
92
|
-
lambda do
|
93
|
-
pdf.bounding_box([0, 0], :width => 200)
|
94
|
-
end.should raise_error(ArgumentError)
|
95
|
-
end
|
96
|
-
|
97
|
-
end
|
98
|
-
|
99
|
-
describe "drawing bounding boxes" do
|
100
|
-
|
101
|
-
before(:each) { create_pdf }
|
102
|
-
|
103
|
-
it "should not stomp on the arguments to bounding_box" do
|
104
|
-
pdf = Prawn::Document.new
|
105
|
-
x = [100, 500]
|
106
|
-
pdf.bounding_box x, :width => 100 do
|
107
|
-
pdf.text "bork-bork-bork"
|
108
|
-
end
|
109
|
-
x.should == [100, 500]
|
110
|
-
end
|
111
|
-
|
112
|
-
it "should restore the margin box when bounding box exits" do
|
113
|
-
margin_box = @pdf.bounds
|
114
|
-
|
115
|
-
@pdf.bounding_box [100,500], :width => 100 do
|
116
|
-
#nothing
|
117
|
-
end
|
118
|
-
|
119
|
-
@pdf.bounds.should == margin_box
|
120
|
-
|
121
|
-
end
|
122
|
-
|
123
|
-
it "should restore the parent bounding box when calls are nested" do
|
124
|
-
@pdf.bounding_box [100,500], :width => 300, :height => 300 do
|
125
|
-
|
126
|
-
@pdf.bounds.absolute_top.should == 500 + @pdf.margin_box.absolute_bottom
|
127
|
-
@pdf.bounds.absolute_left.should == 100 + @pdf.margin_box.absolute_left
|
128
|
-
|
129
|
-
parent_box = @pdf.bounds
|
130
|
-
|
131
|
-
@pdf.bounding_box [50,200], :width => 100, :height => 100 do
|
132
|
-
@pdf.bounds.absolute_top.should == 200 + parent_box.absolute_bottom
|
133
|
-
@pdf.bounds.absolute_left.should == 50 + parent_box.absolute_left
|
134
|
-
end
|
135
|
-
|
136
|
-
@pdf.bounds.absolute_top.should == 500 + @pdf.margin_box.absolute_bottom
|
137
|
-
@pdf.bounds.absolute_left.should == 100 + @pdf.margin_box.absolute_left
|
138
|
-
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
it "should calculate a height if none is specified" do
|
143
|
-
@pdf.bounding_box([100, 500], :width => 100) do
|
144
|
-
@pdf.text "The rain in Spain falls mainly on the plains."
|
145
|
-
end
|
146
|
-
|
147
|
-
@pdf.y.should be_within(0.001).of(458.384)
|
148
|
-
end
|
149
|
-
|
150
|
-
it "should keep track of the max height the box was stretched to" do
|
151
|
-
box = @pdf.bounding_box(@pdf.bounds.top_left, :width => 100) do
|
152
|
-
@pdf.move_down 100
|
153
|
-
@pdf.move_up 15
|
154
|
-
end
|
155
|
-
|
156
|
-
box.height.should == 100
|
157
|
-
end
|
158
|
-
|
159
|
-
it "should advance the y-position by bbox.height by default" do
|
160
|
-
orig_y = @pdf.y
|
161
|
-
@pdf.bounding_box [0, @pdf.cursor], :width => @pdf.bounds.width,
|
162
|
-
:height => 30 do
|
163
|
-
@pdf.text "hello"
|
164
|
-
end
|
165
|
-
@pdf.y.should be_within(0.001).of(orig_y - 30)
|
166
|
-
end
|
167
|
-
|
168
|
-
it "should not advance y-position if passed :hold_position => true" do
|
169
|
-
orig_y = @pdf.y
|
170
|
-
@pdf.bounding_box [0, @pdf.cursor], :width => @pdf.bounds.width,
|
171
|
-
:hold_position => true do
|
172
|
-
@pdf.text "hello"
|
173
|
-
end
|
174
|
-
# y only advances by height of one line ("hello")
|
175
|
-
@pdf.y.should be_within(0.001).of(orig_y - @pdf.height_of("hello"))
|
176
|
-
end
|
177
|
-
|
178
|
-
it "should not advance y-position of a stretchy bbox if it would stretch " +
|
179
|
-
"the bbox further" do
|
180
|
-
bottom = @pdf.y = @pdf.margin_box.absolute_bottom
|
181
|
-
@pdf.bounding_box [0, @pdf.margin_box.top], :width => @pdf.bounds.width do
|
182
|
-
@pdf.y = bottom
|
183
|
-
@pdf.text "hello" # starts a new page
|
184
|
-
end
|
185
|
-
@pdf.page_count.should == 2
|
186
|
-
|
187
|
-
# Restoring the position (to the absolute bottom) would stretch the bbox to
|
188
|
-
# the bottom of the page, which we don't want. This should be equivalent to
|
189
|
-
# a bbox with :hold_position => true, where we only advance by the amount
|
190
|
-
# that was actually drawn.
|
191
|
-
@pdf.y.should be_within(0.001).of(
|
192
|
-
@pdf.margin_box.absolute_top - @pdf.height_of("hello")
|
193
|
-
)
|
194
|
-
end
|
195
|
-
|
196
|
-
end
|
197
|
-
|
198
|
-
describe "Indentation" do
|
199
|
-
before(:each) { create_pdf }
|
200
|
-
|
201
|
-
it "should temporarily shift the x coordinate and width" do
|
202
|
-
@pdf.bounding_box([100,100], :width => 200) do
|
203
|
-
@pdf.indent(20) do
|
204
|
-
@pdf.bounds.absolute_left.should == 120
|
205
|
-
@pdf.bounds.width.should == 180
|
206
|
-
end
|
207
|
-
end
|
208
|
-
end
|
209
|
-
|
210
|
-
it "should restore the x coordinate and width after block exits" do
|
211
|
-
@pdf.bounding_box([100,100], :width => 200) do
|
212
|
-
@pdf.indent(20) do
|
213
|
-
# no-op
|
214
|
-
end
|
215
|
-
@pdf.bounds.absolute_left.should == 100
|
216
|
-
@pdf.bounds.width.should == 200
|
217
|
-
end
|
218
|
-
end
|
219
|
-
|
220
|
-
it "should restore the x coordinate and width on error" do
|
221
|
-
@pdf.bounding_box([100,100], :width => 200) do
|
222
|
-
begin
|
223
|
-
@pdf.indent(20) { raise }
|
224
|
-
rescue
|
225
|
-
@pdf.bounds.absolute_left.should == 100
|
226
|
-
@pdf.bounds.width.should == 200
|
227
|
-
end
|
228
|
-
end
|
229
|
-
end
|
230
|
-
|
231
|
-
it "should maintain left indentation across a page break" do
|
232
|
-
original_left = @pdf.bounds.absolute_left
|
233
|
-
|
234
|
-
@pdf.indent(20) do
|
235
|
-
@pdf.bounds.absolute_left.should == original_left + 20
|
236
|
-
@pdf.start_new_page
|
237
|
-
@pdf.bounds.absolute_left.should == original_left + 20
|
238
|
-
end
|
239
|
-
|
240
|
-
@pdf.bounds.absolute_left.should == original_left
|
241
|
-
end
|
242
|
-
|
243
|
-
it "should maintain right indentation across a page break" do
|
244
|
-
original_width = @pdf.bounds.width
|
245
|
-
|
246
|
-
@pdf.indent(0, 20) do
|
247
|
-
@pdf.bounds.width.should == original_width - 20
|
248
|
-
@pdf.start_new_page
|
249
|
-
@pdf.bounds.width.should == original_width - 20
|
250
|
-
end
|
251
|
-
|
252
|
-
@pdf.bounds.width.should == original_width
|
253
|
-
end
|
254
|
-
|
255
|
-
it "optionally allows adjustment of the right bound as well" do
|
256
|
-
@pdf.bounding_box([100,100], :width => 200) do
|
257
|
-
@pdf.indent(20, 30) do
|
258
|
-
@pdf.bounds.absolute_left.should == 120
|
259
|
-
@pdf.bounds.width.should == 150
|
260
|
-
end
|
261
|
-
@pdf.bounds.absolute_left.should == 100
|
262
|
-
@pdf.bounds.width.should == 200
|
263
|
-
end
|
264
|
-
end
|
265
|
-
|
266
|
-
describe "in a ColumnBox" do
|
267
|
-
it "should subtract the given indentation from the available width" do
|
268
|
-
@pdf.column_box([0, @pdf.cursor], :width => @pdf.bounds.width,
|
269
|
-
:height => 200, :columns => 2, :spacer => 20) do
|
270
|
-
width = @pdf.bounds.width
|
271
|
-
@pdf.indent(20) do
|
272
|
-
@pdf.bounds.width.should be_within(0.01).of(width - 20)
|
273
|
-
end
|
274
|
-
end
|
275
|
-
end
|
276
|
-
|
277
|
-
it "should subtract right padding from the available width" do
|
278
|
-
@pdf.column_box([0, @pdf.cursor], :width => @pdf.bounds.width,
|
279
|
-
:height => 200, :columns => 2, :spacer => 20) do
|
280
|
-
width = @pdf.bounds.width
|
281
|
-
@pdf.indent(20, 30) do
|
282
|
-
@pdf.bounds.width.should be_within(0.01).of(width - 50)
|
283
|
-
end
|
284
|
-
end
|
285
|
-
end
|
286
|
-
|
287
|
-
it "should maintain the same left indentation across column breaks" do
|
288
|
-
@pdf.column_box([0, @pdf.cursor], :width => @pdf.bounds.width, :columns => 3, :spacer => 15) do
|
289
|
-
3.times do |column|
|
290
|
-
x = @pdf.bounds.left_side
|
291
|
-
@pdf.indent(20) do
|
292
|
-
@pdf.bounds.left_side.should == x+20
|
293
|
-
end
|
294
|
-
@pdf.bounds.move_past_bottom
|
295
|
-
end
|
296
|
-
end
|
297
|
-
end
|
298
|
-
|
299
|
-
it "should not change the right margin if only left indentation is requested" do
|
300
|
-
@pdf.column_box([0, @pdf.cursor], :width => @pdf.bounds.width, :columns => 3, :spacer => 15) do
|
301
|
-
3.times do |column|
|
302
|
-
x = @pdf.bounds.right_side
|
303
|
-
@pdf.indent(20) do
|
304
|
-
@pdf.bounds.right_side.should == x
|
305
|
-
end
|
306
|
-
@pdf.bounds.move_past_bottom
|
307
|
-
end
|
308
|
-
end
|
309
|
-
end
|
310
|
-
|
311
|
-
it "should maintain the same right indentation across columns" do
|
312
|
-
@pdf.column_box([0, @pdf.cursor], :width => @pdf.bounds.width, :columns => 3, :spacer => 15) do
|
313
|
-
3.times do |column|
|
314
|
-
x = @pdf.bounds.right_side
|
315
|
-
@pdf.indent(20, 10) do
|
316
|
-
@pdf.bounds.right_side.should == x-10
|
317
|
-
end
|
318
|
-
@pdf.bounds.move_past_bottom
|
319
|
-
end
|
320
|
-
end
|
321
|
-
end
|
322
|
-
|
323
|
-
it "should keep the right indentation after nesting indents" do
|
324
|
-
@pdf.column_box([0, @pdf.cursor], :width => @pdf.bounds.width, :columns => 3, :spacer => 15) do
|
325
|
-
3.times do |column|
|
326
|
-
# I am giving a right indent of 10...
|
327
|
-
@pdf.indent(20, 10) do
|
328
|
-
x = @pdf.bounds.right_side
|
329
|
-
# ...and no right indent here...
|
330
|
-
@pdf.indent(20) do
|
331
|
-
# right indent is inherited from the parent!
|
332
|
-
@pdf.bounds.right_side.should == x
|
333
|
-
end
|
334
|
-
end
|
335
|
-
@pdf.bounds.move_past_bottom
|
336
|
-
end
|
337
|
-
end
|
338
|
-
end
|
339
|
-
|
340
|
-
it "should revert the right indentation if negative indent is given in nested indent" do
|
341
|
-
@pdf.column_box([0, @pdf.cursor], :width => @pdf.bounds.width, :columns => 3, :spacer => 15) do
|
342
|
-
3.times do |column|
|
343
|
-
x = @pdf.bounds.right_side
|
344
|
-
@pdf.indent(20, 10) do
|
345
|
-
# requesting a negative right-indent of equivalent size...
|
346
|
-
@pdf.indent(20, -10) do
|
347
|
-
# ...resets the right margin to that of the column!
|
348
|
-
@pdf.bounds.right_side.should == x
|
349
|
-
end
|
350
|
-
end
|
351
|
-
@pdf.bounds.move_past_bottom
|
352
|
-
end
|
353
|
-
end
|
354
|
-
end
|
355
|
-
|
356
|
-
it "should reduce the available column width by the sum of all nested indents" do
|
357
|
-
@pdf.column_box([0, @pdf.cursor], :width => @pdf.bounds.width, :columns => 3, :spacer => 15) do
|
358
|
-
3.times do |column|
|
359
|
-
w = @pdf.bounds.width
|
360
|
-
@pdf.indent(20, 10) do
|
361
|
-
@pdf.indent(20, 10) do
|
362
|
-
@pdf.bounds.width.should == w - 60
|
363
|
-
end
|
364
|
-
end
|
365
|
-
@pdf.bounds.move_past_bottom
|
366
|
-
end
|
367
|
-
end
|
368
|
-
end
|
369
|
-
end
|
370
|
-
end
|
371
|
-
|
372
|
-
describe "A canvas" do
|
373
|
-
before(:each) { create_pdf }
|
374
|
-
|
375
|
-
it "should use whatever the last set y position is" do
|
376
|
-
@pdf.canvas do
|
377
|
-
@pdf.bounding_box([100,500],:width => 200) { @pdf.move_down 50 }
|
378
|
-
end
|
379
|
-
@pdf.y.should == 450
|
380
|
-
end
|
381
|
-
end
|
382
|
-
|
383
|
-
describe "Deep-copying" do
|
384
|
-
it "should create a new object that does not copy @document" do
|
385
|
-
Prawn::Document.new do |pdf|
|
386
|
-
orig = pdf.bounds
|
387
|
-
copy = orig.deep_copy
|
388
|
-
|
389
|
-
copy.should_not == pdf.bounds
|
390
|
-
copy.document.should be_nil
|
391
|
-
end
|
392
|
-
end
|
393
|
-
|
394
|
-
it "should deep-copy parent bounds" do
|
395
|
-
Prawn::Document.new do |pdf|
|
396
|
-
outside = pdf.bounds
|
397
|
-
pdf.bounding_box [100, 100], :width => 100 do
|
398
|
-
copy = pdf.bounds.deep_copy
|
399
|
-
|
400
|
-
# the parent bounds should have the same parameters
|
401
|
-
copy.parent.width.should == outside.width
|
402
|
-
copy.parent.height.should == outside.height
|
403
|
-
|
404
|
-
# but should not be the same object
|
405
|
-
copy.parent.should_not == outside
|
406
|
-
end
|
407
|
-
end
|
408
|
-
end
|
409
|
-
end
|
410
|
-
|
411
|
-
describe "Prawn::Document#reference_bounds" do
|
412
|
-
before(:each) { create_pdf }
|
413
|
-
|
414
|
-
it "should return self for non-stretchy bounds" do
|
415
|
-
@pdf.bounding_box([0, @pdf.cursor], :width => 100, :height => 100) do
|
416
|
-
@pdf.reference_bounds.should == @pdf.bounds
|
417
|
-
end
|
418
|
-
end
|
419
|
-
|
420
|
-
it "should return the parent bounds if in a stretchy box" do
|
421
|
-
@pdf.bounding_box([0, @pdf.cursor], :width => 100, :height => 100) do
|
422
|
-
correct_bounds = @pdf.bounds
|
423
|
-
@pdf.bounding_box([0, @pdf.cursor], :width => 100) do
|
424
|
-
@pdf.reference_bounds.should == correct_bounds
|
425
|
-
end
|
426
|
-
end
|
427
|
-
end
|
428
|
-
|
429
|
-
it "should find the non-stretchy box through 2 levels" do
|
430
|
-
@pdf.bounding_box([0, @pdf.cursor], :width => 100, :height => 100) do
|
431
|
-
correct_bounds = @pdf.bounds
|
432
|
-
@pdf.bounding_box([0, @pdf.cursor], :width => 100) do
|
433
|
-
@pdf.bounding_box([0, @pdf.cursor], :width => 100) do
|
434
|
-
@pdf.reference_bounds.should == correct_bounds
|
435
|
-
end
|
436
|
-
end
|
437
|
-
end
|
438
|
-
end
|
439
|
-
|
440
|
-
it "should return the margin box if there's no explicit bbox" do
|
441
|
-
@pdf.reference_bounds.should == @pdf.margin_box
|
442
|
-
|
443
|
-
@pdf.bounding_box([0, @pdf.cursor], :width => 100) do
|
444
|
-
@pdf.reference_bounds.should == @pdf.margin_box
|
445
|
-
end
|
446
|
-
end
|
447
|
-
|
448
|
-
it "should return the canvas box if we're in a canvas" do
|
449
|
-
@pdf.canvas do
|
450
|
-
canvas_box = @pdf.bounds
|
451
|
-
|
452
|
-
@pdf.reference_bounds.should == canvas_box
|
453
|
-
|
454
|
-
@pdf.bounding_box([0, @pdf.cursor], :width => 100) do
|
455
|
-
@pdf.reference_bounds.should == canvas_box
|
456
|
-
end
|
457
|
-
end
|
458
|
-
end
|
459
|
-
|
460
|
-
end
|
461
|
-
|
462
|
-
describe "BoundingBox#move_past_bottom" do
|
463
|
-
before(:each) { create_pdf }
|
464
|
-
|
465
|
-
it "should ordinarily start a new page" do
|
466
|
-
@pdf.bounds.move_past_bottom
|
467
|
-
@pdf.text "Foo"
|
468
|
-
|
469
|
-
pages = PDF::Inspector::Page.analyze(@pdf.render).pages
|
470
|
-
pages.size.should == 2
|
471
|
-
pages[0][:strings].should == []
|
472
|
-
pages[1][:strings].should == ["Foo"]
|
473
|
-
end
|
474
|
-
|
475
|
-
it "should move to the top of the next page if it exists already" do
|
476
|
-
# save away the y-position at the top of a page
|
477
|
-
top_y = @pdf.y
|
478
|
-
|
479
|
-
# create a blank page but go to the page before it
|
480
|
-
@pdf.start_new_page
|
481
|
-
@pdf.go_to_page 1
|
482
|
-
@pdf.text "Foo"
|
483
|
-
|
484
|
-
@pdf.bounds.move_past_bottom
|
485
|
-
@pdf.y.should be_within(0.001).of(top_y)
|
486
|
-
@pdf.text "Bar"
|
487
|
-
|
488
|
-
pages = PDF::Inspector::Page.analyze(@pdf.render).pages
|
489
|
-
pages.size.should == 2
|
490
|
-
pages[0][:strings].should == ["Foo"]
|
491
|
-
pages[1][:strings].should == ["Bar"]
|
492
|
-
end
|
493
|
-
end
|