prawn 0.13.0 → 2.4.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: d64c2da1e4be48e40f4fa6fa4de35e04c75debf0119e8c59b3fba9d944c112db
|
4
|
+
data.tar.gz: 393bbdd1a5df657d5c6190d4bd10ecd7353522e714b2f60c8d9c5f70e5bc1ce9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c4980639ca24796d577be790ed0f6fa85c985f1a6eb147e4c5db1df261c5d50afe8a466f06b65588b71a897e22e8d2b7b01daceed1714f6164124057154d2d28
|
7
|
+
data.tar.gz: e0fd560d4a80f2827736d599266bcb2e2fe19abedcde639520fba8bd19a2f12fe2cf0e8a60a91b87dbac4336d25c680f94b2341e5f9ce3d6d24f2e65f24e24a3
|
checksums.yaml.gz.sig
ADDED
Binary file
|
data/.yardopts
ADDED
data/GPLv2
CHANGED
@@ -1,12 +1,12 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
GNU GENERAL PUBLIC LICENSE
|
2
|
+
Version 2, June 1991
|
3
3
|
|
4
|
-
Copyright (C) 1989, 1991 Free Software Foundation, Inc
|
5
|
-
|
4
|
+
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
5
|
+
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
6
6
|
Everyone is permitted to copy and distribute verbatim copies
|
7
7
|
of this license document, but changing it is not allowed.
|
8
8
|
|
9
|
-
|
9
|
+
Preamble
|
10
10
|
|
11
11
|
The licenses for most software are designed to take away your
|
12
12
|
freedom to share and change it. By contrast, the GNU General Public
|
@@ -15,7 +15,7 @@ software--to make sure the software is free for all its users. This
|
|
15
15
|
General Public License applies to most of the Free Software
|
16
16
|
Foundation's software and to any other program whose authors commit to
|
17
17
|
using it. (Some other Free Software Foundation software is covered by
|
18
|
-
the GNU
|
18
|
+
the GNU Lesser General Public License instead.) You can apply it to
|
19
19
|
your programs, too.
|
20
20
|
|
21
21
|
When we speak of free software, we are referring to freedom, not
|
@@ -55,8 +55,8 @@ patent must be licensed for everyone's free use or not licensed at all.
|
|
55
55
|
|
56
56
|
The precise terms and conditions for copying, distribution and
|
57
57
|
modification follow.
|
58
|
-
|
59
|
-
|
58
|
+
|
59
|
+
GNU GENERAL PUBLIC LICENSE
|
60
60
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
61
61
|
|
62
62
|
0. This License applies to any program or other work which contains
|
@@ -110,7 +110,7 @@ above, provided that you also meet all of these conditions:
|
|
110
110
|
License. (Exception: if the Program itself is interactive but
|
111
111
|
does not normally print such an announcement, your work based on
|
112
112
|
the Program is not required to print an announcement.)
|
113
|
-
|
113
|
+
|
114
114
|
These requirements apply to the modified work as a whole. If
|
115
115
|
identifiable sections of that work are not derived from the Program,
|
116
116
|
and can be reasonably considered independent and separate works in
|
@@ -168,7 +168,7 @@ access to copy from a designated place, then offering equivalent
|
|
168
168
|
access to copy the source code from the same place counts as
|
169
169
|
distribution of the source code, even though third parties are not
|
170
170
|
compelled to copy the source along with the object code.
|
171
|
-
|
171
|
+
|
172
172
|
4. You may not copy, modify, sublicense, or distribute the Program
|
173
173
|
except as expressly provided under this License. Any attempt
|
174
174
|
otherwise to copy, modify, sublicense or distribute the Program is
|
@@ -225,7 +225,7 @@ impose that choice.
|
|
225
225
|
|
226
226
|
This section is intended to make thoroughly clear what is believed to
|
227
227
|
be a consequence of the rest of this License.
|
228
|
-
|
228
|
+
|
229
229
|
8. If the distribution and/or use of the Program is restricted in
|
230
230
|
certain countries either by patents or by copyrighted interfaces, the
|
231
231
|
original copyright holder who places the Program under this License
|
@@ -255,7 +255,7 @@ make exceptions for this. Our decision will be guided by the two goals
|
|
255
255
|
of preserving the free status of all derivatives of our free software and
|
256
256
|
of promoting the sharing and reuse of software generally.
|
257
257
|
|
258
|
-
|
258
|
+
NO WARRANTY
|
259
259
|
|
260
260
|
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
261
261
|
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
@@ -277,9 +277,9 @@ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
|
277
277
|
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
278
278
|
POSSIBILITY OF SUCH DAMAGES.
|
279
279
|
|
280
|
-
|
281
|
-
|
282
|
-
|
280
|
+
END OF TERMS AND CONDITIONS
|
281
|
+
|
282
|
+
How to Apply These Terms to Your New Programs
|
283
283
|
|
284
284
|
If you develop a new program, and you want it to be of the greatest
|
285
285
|
possible use to the public, the best way to achieve this is to make it
|
@@ -303,17 +303,16 @@ the "copyright" line and a pointer to where the full notice is found.
|
|
303
303
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
304
304
|
GNU General Public License for more details.
|
305
305
|
|
306
|
-
You should have received a copy of the GNU General Public License
|
307
|
-
|
308
|
-
|
309
|
-
|
306
|
+
You should have received a copy of the GNU General Public License along
|
307
|
+
with this program; if not, write to the Free Software Foundation, Inc.,
|
308
|
+
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
310
309
|
|
311
310
|
Also add information on how to contact you by electronic and paper mail.
|
312
311
|
|
313
312
|
If the program is interactive, make it output a short notice like this
|
314
313
|
when it starts in an interactive mode:
|
315
314
|
|
316
|
-
Gnomovision version 69, Copyright (C) year
|
315
|
+
Gnomovision version 69, Copyright (C) year name of author
|
317
316
|
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
318
317
|
This is free software, and you are welcome to redistribute it
|
319
318
|
under certain conditions; type `show c' for details.
|
@@ -336,5 +335,5 @@ necessary. Here is a sample; alter the names:
|
|
336
335
|
This General Public License does not permit incorporating your program into
|
337
336
|
proprietary programs. If your program is a subroutine library, you may
|
338
337
|
consider it more useful to permit linking proprietary applications with the
|
339
|
-
library. If this is what you want to do, use the GNU
|
338
|
+
library. If this is what you want to do, use the GNU Lesser General
|
340
339
|
Public License instead of this License.
|
data/Gemfile
CHANGED
@@ -1,18 +1,5 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
gem "pdf-reader", "~> 1.2"
|
5
|
-
gem "ruby-rc4"
|
6
|
-
gem "afm"
|
3
|
+
source 'https://rubygems.org'
|
7
4
|
|
8
|
-
|
9
|
-
gem "coderay", "~> 1.0.7"
|
10
|
-
gem "rdoc"
|
11
|
-
end
|
12
|
-
|
13
|
-
group :test do
|
14
|
-
gem "pdf-inspector", "~> 1.1.0", :require => "pdf/inspector"
|
15
|
-
gem "rspec"
|
16
|
-
gem "mocha", :require => false
|
17
|
-
gem "rake"
|
18
|
-
end
|
5
|
+
gemspec
|
data/Rakefile
CHANGED
@@ -1,47 +1,25 @@
|
|
1
|
-
|
2
|
-
Bundler.setup
|
1
|
+
# frozen_string_literal: true
|
3
2
|
|
4
|
-
|
5
|
-
require '
|
6
|
-
require 'rdoc/task'
|
7
|
-
require 'rubygems/package_task'
|
3
|
+
GEMSPEC = File.expand_path('prawn.gemspec', __dir__)
|
4
|
+
require 'prawn/dev/tasks'
|
8
5
|
|
9
|
-
task :
|
10
|
-
|
11
|
-
desc "Run all rspec files"
|
12
|
-
RSpec::Core::RakeTask.new("spec") do |c|
|
13
|
-
c.rspec_opts = "-t ~unresolved"
|
14
|
-
end
|
15
|
-
|
16
|
-
desc "Show library's code statistics"
|
17
|
-
task :stats do
|
18
|
-
require 'code_statistics'
|
19
|
-
CodeStatistics::TEST_TYPES << "Specs"
|
20
|
-
CodeStatistics.new( ["Prawn", "lib"],
|
21
|
-
["Specs", "spec"] ).to_s
|
22
|
-
end
|
23
|
-
|
24
|
-
desc "genrates documentation"
|
25
|
-
RDoc::Task.new do |rdoc|
|
26
|
-
rdoc.rdoc_files.include( "README.md",
|
27
|
-
"COPYING",
|
28
|
-
"LICENSE",
|
29
|
-
"lib/" )
|
30
|
-
rdoc.main = "README.md"
|
31
|
-
rdoc.rdoc_dir = "doc/html"
|
32
|
-
rdoc.title = "Prawn Documentation"
|
33
|
-
end
|
6
|
+
task default: %i[spec rubocop]
|
34
7
|
|
35
8
|
desc "Generate the 'Prawn by Example' manual"
|
36
9
|
task :manual do
|
37
|
-
puts
|
38
|
-
require File.expand_path(File.join(
|
39
|
-
|
40
|
-
puts
|
10
|
+
puts 'Building manual...'
|
11
|
+
require File.expand_path(File.join(__dir__, %w[manual contents]))
|
12
|
+
prawn_manual_document.render_file('manual.pdf')
|
13
|
+
puts 'The Prawn manual is available at manual.pdf. Happy Prawning!'
|
41
14
|
end
|
42
15
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
16
|
+
desc 'Run a console with Prawn loaded'
|
17
|
+
task :console do
|
18
|
+
require 'irb'
|
19
|
+
require 'irb/completion'
|
20
|
+
require_relative 'lib/prawn'
|
21
|
+
Prawn.debug = true
|
22
|
+
|
23
|
+
ARGV.clear
|
24
|
+
IRB.start
|
47
25
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
3
|
# bounding_box.rb : Implements a mechanism for shifting the coordinate space
|
4
4
|
#
|
@@ -8,6 +8,7 @@
|
|
8
8
|
|
9
9
|
module Prawn
|
10
10
|
class Document
|
11
|
+
# @group Stable API
|
11
12
|
|
12
13
|
# :call-seq:
|
13
14
|
# bounding_box(point, options={}, &block)
|
@@ -154,10 +155,10 @@ module Prawn
|
|
154
155
|
# Of course, if you use canvas, you will be responsible for ensuring that
|
155
156
|
# you remain within the printable area of your document.
|
156
157
|
#
|
157
|
-
def bounding_box(
|
158
|
+
def bounding_box(point, *args, &block)
|
158
159
|
init_bounding_box(block) do |parent_box|
|
159
|
-
|
160
|
-
@bounding_box = BoundingBox.new(self, parent_box,
|
160
|
+
point = map_to_absolute(point)
|
161
|
+
@bounding_box = BoundingBox.new(self, parent_box, point, *args)
|
161
162
|
end
|
162
163
|
end
|
163
164
|
|
@@ -169,36 +170,51 @@ module Prawn
|
|
169
170
|
# end
|
170
171
|
#
|
171
172
|
def canvas(&block)
|
172
|
-
init_bounding_box(block, :
|
173
|
+
init_bounding_box(block, hold_position: true) do |_|
|
173
174
|
# Canvas bbox acts like margin_box in that its parent bounds are unset.
|
174
|
-
@bounding_box = BoundingBox.new(
|
175
|
-
|
176
|
-
|
175
|
+
@bounding_box = BoundingBox.new(
|
176
|
+
self,
|
177
|
+
nil,
|
178
|
+
[0, page.dimensions[3]],
|
179
|
+
width: page.dimensions[2],
|
180
|
+
height: page.dimensions[3]
|
177
181
|
)
|
178
182
|
end
|
179
183
|
end
|
180
184
|
|
181
185
|
private
|
182
186
|
|
183
|
-
def init_bounding_box(user_block, options={}
|
187
|
+
def init_bounding_box(user_block, options = {})
|
184
188
|
unless user_block
|
185
189
|
raise ArgumentError,
|
186
|
-
|
190
|
+
'bounding boxes require a block to be drawn within the box'
|
187
191
|
end
|
188
192
|
|
189
193
|
parent_box = @bounding_box
|
190
194
|
|
191
|
-
|
195
|
+
original_ypos = y
|
196
|
+
|
197
|
+
yield(parent_box)
|
192
198
|
|
193
199
|
self.y = @bounding_box.absolute_top
|
194
200
|
user_block.call
|
201
|
+
|
202
|
+
# If the user actions did not modify the y position
|
203
|
+
# restore the original y position before the bounding
|
204
|
+
# box was created.
|
205
|
+
|
206
|
+
if y == @bounding_box.absolute_top
|
207
|
+
self.y = original_ypos
|
208
|
+
end
|
209
|
+
|
195
210
|
unless options[:hold_position] || @bounding_box.stretchy?
|
196
211
|
self.y = @bounding_box.absolute_bottom
|
197
212
|
end
|
198
213
|
|
199
|
-
created_box
|
214
|
+
created_box = @bounding_box
|
215
|
+
@bounding_box = parent_box
|
200
216
|
|
201
|
-
|
217
|
+
created_box
|
202
218
|
end
|
203
219
|
|
204
220
|
# Low level layout helper that simplifies coordinate math.
|
@@ -207,30 +223,44 @@ module Prawn
|
|
207
223
|
# is used for.
|
208
224
|
#
|
209
225
|
class BoundingBox
|
226
|
+
class NoReferenceBounds < StandardError
|
227
|
+
def initialize(message = "Can't find reference bounds: my parent is unset")
|
228
|
+
super
|
229
|
+
end
|
230
|
+
end
|
210
231
|
|
211
|
-
|
232
|
+
# @private
|
233
|
+
def initialize(document, parent, point, options = {})
|
212
234
|
unless options[:width]
|
213
|
-
raise ArgumentError,
|
235
|
+
raise ArgumentError, 'BoundingBox needs the :width option to be set'
|
214
236
|
end
|
215
237
|
|
216
238
|
@document = document
|
217
239
|
@parent = parent
|
218
240
|
@x, @y = point
|
219
|
-
@width
|
241
|
+
@width = options[:width]
|
242
|
+
@height = options[:height]
|
220
243
|
@total_left_padding = 0
|
221
244
|
@total_right_padding = 0
|
222
245
|
@stretched_height = nil
|
223
246
|
end
|
224
247
|
|
248
|
+
# @private
|
249
|
+
|
225
250
|
attr_reader :document, :parent
|
251
|
+
|
252
|
+
# @private
|
226
253
|
# The current indentation of the left side of the bounding box.
|
227
254
|
attr_reader :total_left_padding
|
255
|
+
|
256
|
+
# @private
|
228
257
|
# The current indentation of the right side of the bounding box.
|
229
258
|
attr_reader :total_right_padding
|
230
259
|
|
231
260
|
# The translated origin (x,y-height) which describes the location
|
232
261
|
# of the bottom left corner of the bounding box
|
233
262
|
#
|
263
|
+
# @private
|
234
264
|
def anchor
|
235
265
|
[@x, @y - height]
|
236
266
|
end
|
@@ -245,7 +275,6 @@ module Prawn
|
|
245
275
|
0
|
246
276
|
end
|
247
277
|
|
248
|
-
|
249
278
|
# Temporarily adjust the @x coordinate to allow for left_padding
|
250
279
|
#
|
251
280
|
# Example:
|
@@ -261,7 +290,8 @@ module Prawn
|
|
261
290
|
# text "indented on both sides"
|
262
291
|
# end
|
263
292
|
#
|
264
|
-
|
293
|
+
# @private
|
294
|
+
def indent(left_padding, right_padding = 0)
|
265
295
|
add_left_padding(left_padding)
|
266
296
|
add_right_padding(right_padding)
|
267
297
|
yield
|
@@ -271,6 +301,7 @@ module Prawn
|
|
271
301
|
end
|
272
302
|
|
273
303
|
# Increase the left padding of the bounding box.
|
304
|
+
# @private
|
274
305
|
def add_left_padding(left_padding)
|
275
306
|
@total_left_padding += left_padding
|
276
307
|
@x += left_padding
|
@@ -278,6 +309,7 @@ module Prawn
|
|
278
309
|
end
|
279
310
|
|
280
311
|
# Decrease the left padding of the bounding box.
|
312
|
+
# @private
|
281
313
|
def subtract_left_padding(left_padding)
|
282
314
|
@total_left_padding -= left_padding
|
283
315
|
@x -= left_padding
|
@@ -285,18 +317,21 @@ module Prawn
|
|
285
317
|
end
|
286
318
|
|
287
319
|
# Increase the right padding of the bounding box.
|
320
|
+
# @private
|
288
321
|
def add_right_padding(right_padding)
|
289
322
|
@total_right_padding += right_padding
|
290
323
|
@width -= right_padding
|
291
324
|
end
|
292
325
|
|
293
326
|
# Decrease the right padding of the bounding box.
|
327
|
+
# @private
|
294
328
|
def subtract_right_padding(right_padding)
|
295
329
|
@total_right_padding -= right_padding
|
296
330
|
@width += right_padding
|
297
331
|
end
|
298
332
|
|
299
|
-
# Relative right x-coordinate of the bounding box. (Equal to the box
|
333
|
+
# Relative right x-coordinate of the bounding box. (Equal to the box
|
334
|
+
# width)
|
300
335
|
#
|
301
336
|
# Example, position some text 3 pts from the right of the containing box:
|
302
337
|
#
|
@@ -336,7 +371,7 @@ module Prawn
|
|
336
371
|
# end
|
337
372
|
#
|
338
373
|
def top_left
|
339
|
-
[left,top]
|
374
|
+
[left, top]
|
340
375
|
end
|
341
376
|
|
342
377
|
# Relative top-right point of the bounding box
|
@@ -349,7 +384,7 @@ module Prawn
|
|
349
384
|
# end
|
350
385
|
#
|
351
386
|
def top_right
|
352
|
-
[right,top]
|
387
|
+
[right, top]
|
353
388
|
end
|
354
389
|
|
355
390
|
# Relative bottom-right point of the bounding box
|
@@ -361,7 +396,7 @@ module Prawn
|
|
361
396
|
# end
|
362
397
|
#
|
363
398
|
def bottom_right
|
364
|
-
[right,bottom]
|
399
|
+
[right, bottom]
|
365
400
|
end
|
366
401
|
|
367
402
|
# Relative bottom-left point of the bounding box
|
@@ -373,7 +408,7 @@ module Prawn
|
|
373
408
|
# end
|
374
409
|
#
|
375
410
|
def bottom_left
|
376
|
-
[left,bottom]
|
411
|
+
[left, bottom]
|
377
412
|
end
|
378
413
|
|
379
414
|
# Absolute left x-coordinate of the bounding box
|
@@ -425,10 +460,7 @@ module Prawn
|
|
425
460
|
end
|
426
461
|
|
427
462
|
# Width of the bounding box
|
428
|
-
|
429
|
-
def width
|
430
|
-
@width
|
431
|
-
end
|
463
|
+
attr_reader :width
|
432
464
|
|
433
465
|
# Height of the bounding box. If the box is 'stretchy' (unspecified
|
434
466
|
# height attribute), height is calculated as the distance from the top of
|
@@ -436,20 +468,27 @@ module Prawn
|
|
436
468
|
#
|
437
469
|
def height
|
438
470
|
return @height if @height
|
439
|
-
|
440
|
-
|
471
|
+
|
472
|
+
@stretched_height = [
|
473
|
+
(absolute_top - @document.y),
|
474
|
+
@stretched_height.to_f
|
475
|
+
].max
|
441
476
|
end
|
442
477
|
|
443
478
|
# an alias for absolute_left
|
479
|
+
# @private
|
444
480
|
def left_side
|
445
481
|
absolute_left
|
446
482
|
end
|
447
483
|
|
448
484
|
# an alias for absolute_right
|
485
|
+
# @private
|
449
486
|
def right_side
|
450
487
|
absolute_right
|
451
488
|
end
|
452
489
|
|
490
|
+
# @group Extension API
|
491
|
+
|
453
492
|
# Moves to the top of the next page of the document, starting a new page
|
454
493
|
# if necessary.
|
455
494
|
#
|
@@ -461,11 +500,9 @@ module Prawn
|
|
461
500
|
end
|
462
501
|
end
|
463
502
|
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
# Returns +false+ when the box has a defined height, +true+ when the height
|
468
|
-
# is being calculated on the fly based on the current vertical position.
|
503
|
+
# Returns +false+ when the box has a defined height, +true+ when the
|
504
|
+
# height is being calculated on the fly based on the current vertical
|
505
|
+
# position.
|
469
506
|
#
|
470
507
|
def stretchy?
|
471
508
|
!@height
|
@@ -475,23 +512,30 @@ module Prawn
|
|
475
512
|
#
|
476
513
|
def reference_bounds
|
477
514
|
if stretchy?
|
478
|
-
raise
|
515
|
+
raise NoReferenceBounds unless @parent
|
516
|
+
|
479
517
|
@parent.reference_bounds
|
480
518
|
else
|
481
519
|
self
|
482
520
|
end
|
483
521
|
end
|
484
522
|
|
523
|
+
alias update_height height
|
524
|
+
|
485
525
|
# Returns a deep copy of these bounds (including all parent bounds but
|
486
526
|
# not copying the reference to the Document).
|
487
527
|
#
|
528
|
+
# @private
|
488
529
|
def deep_copy
|
489
530
|
copy = dup
|
490
531
|
# Deep-copy the parent bounds
|
491
|
-
copy.instance_variable_set(
|
492
|
-
|
493
|
-
|
494
|
-
|
532
|
+
copy.instance_variable_set(
|
533
|
+
'@parent',
|
534
|
+
if @parent.is_a?(BoundingBox)
|
535
|
+
@parent.deep_copy
|
536
|
+
end
|
537
|
+
)
|
538
|
+
copy.instance_variable_set('@document', nil)
|
495
539
|
copy
|
496
540
|
end
|
497
541
|
|
@@ -499,12 +543,11 @@ module Prawn
|
|
499
543
|
# context of the given +document+. Does *not* set the bounds of the
|
500
544
|
# document to the resulting BoundingBox, only returns it.
|
501
545
|
#
|
546
|
+
# @private
|
502
547
|
def self.restore_deep_copy(bounds, document)
|
503
|
-
bounds.instance_variable_set(
|
548
|
+
bounds.instance_variable_set('@document', document)
|
504
549
|
bounds
|
505
550
|
end
|
506
|
-
|
507
551
|
end
|
508
|
-
|
509
552
|
end
|
510
553
|
end
|
@@ -1,12 +1,16 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
3
|
# column_box.rb: Extends BoundingBox to allow for columns of text
|
4
4
|
#
|
5
5
|
# Author Paul Ostazeski.
|
6
|
+
#
|
7
|
+
# This is free software. Please see the LICENSE and COPYING files for details.
|
8
|
+
|
9
|
+
require_relative 'bounding_box'
|
6
10
|
|
7
|
-
require "prawn/document/bounding_box"
|
8
11
|
module Prawn
|
9
12
|
class Document
|
13
|
+
# @group Experimental API
|
10
14
|
|
11
15
|
# A column box is a bounding box with the additional property that when
|
12
16
|
# text flows past the bottom, it will wrap first to another column on the
|
@@ -14,9 +18,12 @@ module Prawn
|
|
14
18
|
# filled.
|
15
19
|
#
|
16
20
|
# column_box accepts the same parameters as bounding_box, as well as the
|
17
|
-
# number of :columns and a :spacer (in points) between columns.
|
21
|
+
# number of :columns and a :spacer (in points) between columns. If resetting
|
22
|
+
# the top margin is desired on a new page (e.g. to allow for initial page
|
23
|
+
# wide column titles) the option :reflow_margins => true can be set.
|
18
24
|
#
|
19
|
-
# Defaults are :columns = 3
|
25
|
+
# Defaults are :columns = 3, :spacer = font_size, and
|
26
|
+
# :reflow_margins => false
|
20
27
|
#
|
21
28
|
# Under PDF::Writer, "spacer" was known as "gutter"
|
22
29
|
#
|
@@ -29,10 +36,10 @@ module Prawn
|
|
29
36
|
|
30
37
|
private
|
31
38
|
|
32
|
-
def init_column_box(user_block, options={}
|
39
|
+
def init_column_box(user_block, options = {})
|
33
40
|
parent_box = @bounding_box
|
34
41
|
|
35
|
-
|
42
|
+
yield(parent_box)
|
36
43
|
|
37
44
|
self.y = @bounding_box.absolute_top
|
38
45
|
user_block.call
|
@@ -45,12 +52,12 @@ module Prawn
|
|
45
52
|
# work.
|
46
53
|
#
|
47
54
|
class ColumnBox < BoundingBox
|
48
|
-
|
49
|
-
def initialize(document, parent, point, options={}) #:nodoc:
|
55
|
+
def initialize(document, parent, point, options = {}) #:nodoc:
|
50
56
|
super
|
51
57
|
@columns = options[:columns] || 3
|
52
|
-
@spacer
|
58
|
+
@spacer = options[:spacer] || @document.font_size
|
53
59
|
@current_column = 0
|
60
|
+
@reflow_margins = options[:reflow_margins]
|
54
61
|
end
|
55
62
|
|
56
63
|
# The column width, not the width of the whole box,
|
@@ -102,7 +109,10 @@ module Prawn
|
|
102
109
|
def move_past_bottom
|
103
110
|
@current_column = (@current_column + 1) % @columns
|
104
111
|
@document.y = @y
|
105
|
-
if
|
112
|
+
if @current_column.zero?
|
113
|
+
if @reflow_margins
|
114
|
+
@y = @parent.absolute_top
|
115
|
+
end
|
106
116
|
@document.start_new_page
|
107
117
|
end
|
108
118
|
end
|