prawn-graph 0.0.1
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.
- data/README.markdown +3 -0
- data/Rakefile +34 -0
- data/examples/example_helper.rb +10 -0
- data/examples/graph/advanced_bar_chart.rb +22 -0
- data/examples/graph/bar_chart.rb +18 -0
- data/examples/graph/line_chart.rb +18 -0
- data/lib/prawn/graph.rb +94 -0
- data/lib/prawn/graph/bar.rb +172 -0
- data/lib/prawn/graph/chart.rb +4 -0
- data/lib/prawn/graph/errors.rb +6 -0
- data/lib/prawn/graph/grid.rb +43 -0
- data/lib/prawn/graph/line.rb +43 -0
- data/vendor/prawn-core/COPYING +340 -0
- data/vendor/prawn-core/HACKING +46 -0
- data/vendor/prawn-core/LICENSE +56 -0
- data/vendor/prawn-core/README +138 -0
- data/vendor/prawn-core/Rakefile +75 -0
- data/vendor/prawn-core/bench/afm_text_bench.rb +18 -0
- data/vendor/prawn-core/bench/png_type_6.rb +15 -0
- data/vendor/prawn-core/bench/ttf_text_bench.rb +19 -0
- data/vendor/prawn-core/bugs/indentation_across_pagebreaks.rb +15 -0
- data/vendor/prawn-core/bugs/resolved/canvas_sets_y_to_0.rb +15 -0
- data/vendor/prawn-core/bugs/resolved/png_barcode_issue.rb +11 -0
- data/vendor/prawn-core/bugs/resolved/transaction_page_number_issue_79.rb +21 -0
- data/vendor/prawn-core/bugs/resolved/ttf_fails_in_transactions.rb +24 -0
- data/vendor/prawn-core/data/encodings/win_ansi.txt +29 -0
- data/vendor/prawn-core/data/fonts/Action Man.dfont +0 -0
- data/vendor/prawn-core/data/fonts/Activa.ttf +0 -0
- data/vendor/prawn-core/data/fonts/Chalkboard.ttf +0 -0
- data/vendor/prawn-core/data/fonts/Courier-Bold.afm +342 -0
- data/vendor/prawn-core/data/fonts/Courier-BoldOblique.afm +342 -0
- data/vendor/prawn-core/data/fonts/Courier-Oblique.afm +342 -0
- data/vendor/prawn-core/data/fonts/Courier.afm +342 -0
- data/vendor/prawn-core/data/fonts/DejaVuSans.ttf +0 -0
- data/vendor/prawn-core/data/fonts/Dustismo_Roman.ttf +0 -0
- data/vendor/prawn-core/data/fonts/Helvetica-Bold.afm +2827 -0
- data/vendor/prawn-core/data/fonts/Helvetica-BoldOblique.afm +2827 -0
- data/vendor/prawn-core/data/fonts/Helvetica-Oblique.afm +3051 -0
- data/vendor/prawn-core/data/fonts/Helvetica.afm +3051 -0
- data/vendor/prawn-core/data/fonts/MustRead.html +19 -0
- data/vendor/prawn-core/data/fonts/Symbol.afm +213 -0
- data/vendor/prawn-core/data/fonts/Times-Bold.afm +2588 -0
- data/vendor/prawn-core/data/fonts/Times-BoldItalic.afm +2384 -0
- data/vendor/prawn-core/data/fonts/Times-Italic.afm +2667 -0
- data/vendor/prawn-core/data/fonts/Times-Roman.afm +2419 -0
- data/vendor/prawn-core/data/fonts/ZapfDingbats.afm +225 -0
- data/vendor/prawn-core/data/fonts/comicsans.ttf +0 -0
- data/vendor/prawn-core/data/fonts/gkai00mp.ttf +0 -0
- data/vendor/prawn-core/data/images/16bit.alpha +0 -0
- data/vendor/prawn-core/data/images/16bit.dat +0 -0
- data/vendor/prawn-core/data/images/16bit.png +0 -0
- data/vendor/prawn-core/data/images/arrow.png +0 -0
- data/vendor/prawn-core/data/images/arrow2.png +0 -0
- data/vendor/prawn-core/data/images/barcode_issue.png +0 -0
- data/vendor/prawn-core/data/images/dice.alpha +0 -0
- data/vendor/prawn-core/data/images/dice.dat +0 -0
- data/vendor/prawn-core/data/images/dice.png +0 -0
- data/vendor/prawn-core/data/images/dice_interlaced.png +0 -0
- data/vendor/prawn-core/data/images/fractal.jpg +0 -0
- data/vendor/prawn-core/data/images/letterhead.jpg +0 -0
- data/vendor/prawn-core/data/images/page_white_text.alpha +0 -0
- data/vendor/prawn-core/data/images/page_white_text.dat +0 -0
- data/vendor/prawn-core/data/images/page_white_text.png +0 -0
- data/vendor/prawn-core/data/images/pigs.jpg +0 -0
- data/vendor/prawn-core/data/images/rails.dat +0 -0
- data/vendor/prawn-core/data/images/rails.png +0 -0
- data/vendor/prawn-core/data/images/ruport.png +0 -0
- data/vendor/prawn-core/data/images/ruport_data.dat +0 -0
- data/vendor/prawn-core/data/images/ruport_transparent.png +0 -0
- data/vendor/prawn-core/data/images/ruport_type0.png +0 -0
- data/vendor/prawn-core/data/images/stef.jpg +0 -0
- data/vendor/prawn-core/data/images/tru256.bmp +0 -0
- data/vendor/prawn-core/data/images/web-links.dat +1 -0
- data/vendor/prawn-core/data/images/web-links.png +0 -0
- data/vendor/prawn-core/data/shift_jis_text.txt +1 -0
- data/vendor/prawn-core/examples/bounding_box/bounding_boxes.rb +43 -0
- data/vendor/prawn-core/examples/bounding_box/indentation.rb +34 -0
- data/vendor/prawn-core/examples/bounding_box/russian_boxes.rb +36 -0
- data/vendor/prawn-core/examples/bounding_box/stretched_nesting.rb +67 -0
- data/vendor/prawn-core/examples/column_box/column_box_example.rb +43 -0
- data/vendor/prawn-core/examples/example_helper.rb +3 -0
- data/vendor/prawn-core/examples/general/background.rb +23 -0
- data/vendor/prawn-core/examples/general/canvas.rb +15 -0
- data/vendor/prawn-core/examples/general/context_sensitive_headers.rb +37 -0
- data/vendor/prawn-core/examples/general/float.rb +11 -0
- data/vendor/prawn-core/examples/general/margin.rb +36 -0
- data/vendor/prawn-core/examples/general/measurement_units.rb +51 -0
- data/vendor/prawn-core/examples/general/metadata-info.rb +16 -0
- data/vendor/prawn-core/examples/general/multi_page_layout.rb +18 -0
- data/vendor/prawn-core/examples/general/outlines.rb +50 -0
- data/vendor/prawn-core/examples/general/page_geometry.rb +31 -0
- data/vendor/prawn-core/examples/general/page_numbering.rb +15 -0
- data/vendor/prawn-core/examples/general/repeaters.rb +47 -0
- data/vendor/prawn-core/examples/general/stamp.rb +41 -0
- data/vendor/prawn-core/examples/graphics/basic_images.rb +23 -0
- data/vendor/prawn-core/examples/graphics/cmyk.rb +12 -0
- data/vendor/prawn-core/examples/graphics/curves.rb +11 -0
- data/vendor/prawn-core/examples/graphics/hexagon.rb +13 -0
- data/vendor/prawn-core/examples/graphics/image_fit.rb +15 -0
- data/vendor/prawn-core/examples/graphics/image_flow.rb +37 -0
- data/vendor/prawn-core/examples/graphics/image_position.rb +17 -0
- data/vendor/prawn-core/examples/graphics/line.rb +32 -0
- data/vendor/prawn-core/examples/graphics/png_types.rb +22 -0
- data/vendor/prawn-core/examples/graphics/polygons.rb +16 -0
- data/vendor/prawn-core/examples/graphics/remote_images.rb +12 -0
- data/vendor/prawn-core/examples/graphics/rounded_polygons.rb +19 -0
- data/vendor/prawn-core/examples/graphics/rounded_rectangle.rb +20 -0
- data/vendor/prawn-core/examples/graphics/ruport_style_helpers.rb +19 -0
- data/vendor/prawn-core/examples/graphics/stroke_bounds.rb +20 -0
- data/vendor/prawn-core/examples/graphics/stroke_cap_and_join.rb +45 -0
- data/vendor/prawn-core/examples/graphics/stroke_dash.rb +42 -0
- data/vendor/prawn-core/examples/graphics/transformations.rb +52 -0
- data/vendor/prawn-core/examples/graphics/transparency.rb +26 -0
- data/vendor/prawn-core/examples/m17n/chinese_text_wrapping.rb +17 -0
- data/vendor/prawn-core/examples/m17n/euro.rb +15 -0
- data/vendor/prawn-core/examples/m17n/sjis.rb +28 -0
- data/vendor/prawn-core/examples/m17n/utf8.rb +13 -0
- data/vendor/prawn-core/examples/m17n/win_ansi_charset.rb +54 -0
- data/vendor/prawn-core/examples/text/alignment.rb +18 -0
- data/vendor/prawn-core/examples/text/dfont.rb +48 -0
- data/vendor/prawn-core/examples/text/family_based_styling.rb +24 -0
- data/vendor/prawn-core/examples/text/font_calculations.rb +91 -0
- data/vendor/prawn-core/examples/text/font_size.rb +33 -0
- data/vendor/prawn-core/examples/text/indent_paragraphs.rb +18 -0
- data/vendor/prawn-core/examples/text/kerning.rb +30 -0
- data/vendor/prawn-core/examples/text/rotated.rb +98 -0
- data/vendor/prawn-core/examples/text/simple_text.rb +17 -0
- data/vendor/prawn-core/examples/text/simple_text_ttf.rb +17 -0
- data/vendor/prawn-core/examples/text/span.rb +29 -0
- data/vendor/prawn-core/examples/text/text_box.rb +88 -0
- data/vendor/prawn-core/examples/text/text_box_returning_excess.rb +51 -0
- data/vendor/prawn-core/examples/text/text_flow.rb +67 -0
- data/vendor/prawn-core/lib/prawn/byte_string.rb +7 -0
- data/vendor/prawn-core/lib/prawn/compatibility.rb +51 -0
- data/vendor/prawn-core/lib/prawn/core.rb +87 -0
- data/vendor/prawn-core/lib/prawn/core/page.rb +88 -0
- data/vendor/prawn-core/lib/prawn/core/text.rb +65 -0
- data/vendor/prawn-core/lib/prawn/document.rb +596 -0
- data/vendor/prawn-core/lib/prawn/document/annotations.rb +65 -0
- data/vendor/prawn-core/lib/prawn/document/bounding_box.rb +402 -0
- data/vendor/prawn-core/lib/prawn/document/column_box.rb +113 -0
- data/vendor/prawn-core/lib/prawn/document/destinations.rb +92 -0
- data/vendor/prawn-core/lib/prawn/document/graphics_state.rb +49 -0
- data/vendor/prawn-core/lib/prawn/document/internals.rb +153 -0
- data/vendor/prawn-core/lib/prawn/document/page_geometry.rb +136 -0
- data/vendor/prawn-core/lib/prawn/document/snapshot.rb +80 -0
- data/vendor/prawn-core/lib/prawn/document/span.rb +55 -0
- data/vendor/prawn-core/lib/prawn/encoding.rb +121 -0
- data/vendor/prawn-core/lib/prawn/errors.rb +83 -0
- data/vendor/prawn-core/lib/prawn/font.rb +329 -0
- data/vendor/prawn-core/lib/prawn/font/afm.rb +217 -0
- data/vendor/prawn-core/lib/prawn/font/dfont.rb +34 -0
- data/vendor/prawn-core/lib/prawn/font/ttf.rb +341 -0
- data/vendor/prawn-core/lib/prawn/graphics.rb +321 -0
- data/vendor/prawn-core/lib/prawn/graphics/cap_style.rb +38 -0
- data/vendor/prawn-core/lib/prawn/graphics/color.rb +205 -0
- data/vendor/prawn-core/lib/prawn/graphics/dash.rb +71 -0
- data/vendor/prawn-core/lib/prawn/graphics/join_style.rb +38 -0
- data/vendor/prawn-core/lib/prawn/graphics/transformation.rb +157 -0
- data/vendor/prawn-core/lib/prawn/graphics/transparency.rb +99 -0
- data/vendor/prawn-core/lib/prawn/images.rb +337 -0
- data/vendor/prawn-core/lib/prawn/images/jpg.rb +46 -0
- data/vendor/prawn-core/lib/prawn/images/png.rb +219 -0
- data/vendor/prawn-core/lib/prawn/literal_string.rb +14 -0
- data/vendor/prawn-core/lib/prawn/measurement_extensions.rb +46 -0
- data/vendor/prawn-core/lib/prawn/measurements.rb +71 -0
- data/vendor/prawn-core/lib/prawn/name_tree.rb +166 -0
- data/vendor/prawn-core/lib/prawn/object_store.rb +93 -0
- data/vendor/prawn-core/lib/prawn/outline.rb +278 -0
- data/vendor/prawn-core/lib/prawn/pdf_object.rb +83 -0
- data/vendor/prawn-core/lib/prawn/reference.rb +92 -0
- data/vendor/prawn-core/lib/prawn/repeater.rb +129 -0
- data/vendor/prawn-core/lib/prawn/stamp.rb +128 -0
- data/vendor/prawn-core/lib/prawn/text.rb +271 -0
- data/vendor/prawn-core/lib/prawn/text/box.rb +414 -0
- data/vendor/prawn-core/meta/Rakefile +36 -0
- data/vendor/prawn-core/meta/lib/prawn.rb +2 -0
- data/vendor/prawn-core/reference_pdfs/alignment.pdf +229 -0
- data/vendor/prawn-core/reference_pdfs/background.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/basic_images.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/bounding_boxes.pdf +128 -0
- data/vendor/prawn-core/reference_pdfs/canvas.pdf +78 -0
- data/vendor/prawn-core/reference_pdfs/chinese_flow.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/cmyk.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/column_box.pdf +3671 -0
- data/vendor/prawn-core/reference_pdfs/context_sensitive_headers.pdf +2331 -0
- data/vendor/prawn-core/reference_pdfs/curves.pdf +62 -0
- data/vendor/prawn-core/reference_pdfs/dfont.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/euro.pdf +75 -0
- data/vendor/prawn-core/reference_pdfs/family_style.pdf +286 -0
- data/vendor/prawn-core/reference_pdfs/flow.pdf +964 -0
- data/vendor/prawn-core/reference_pdfs/font_calculations.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/font_size.pdf +142 -0
- data/vendor/prawn-core/reference_pdfs/hexagon.pdf +61 -0
- data/vendor/prawn-core/reference_pdfs/image-flow.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/image_fit.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/image_position.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/indentation.pdf +124 -0
- data/vendor/prawn-core/reference_pdfs/kerning.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/landscape_a4.pdf +52 -0
- data/vendor/prawn-core/reference_pdfs/landscape_legal.pdf +52 -0
- data/vendor/prawn-core/reference_pdfs/landscape_letter.pdf +52 -0
- data/vendor/prawn-core/reference_pdfs/lines.pdf +116 -0
- data/vendor/prawn-core/reference_pdfs/margin.pdf +3850 -0
- data/vendor/prawn-core/reference_pdfs/measurement_units.pdf +4667 -0
- data/vendor/prawn-core/reference_pdfs/metadata-info.pdf +88 -0
- data/vendor/prawn-core/reference_pdfs/multi-layout.pdf +209 -0
- data/vendor/prawn-core/reference_pdfs/page_with_numbering.pdf +156 -0
- data/vendor/prawn-core/reference_pdfs/png_types.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/portrait_a4.pdf +52 -0
- data/vendor/prawn-core/reference_pdfs/portrait_legal.pdf +52 -0
- data/vendor/prawn-core/reference_pdfs/portrait_letter.pdf +52 -0
- data/vendor/prawn-core/reference_pdfs/pretty_polygons.pdf +122 -0
- data/vendor/prawn-core/reference_pdfs/remote_images.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/ruport.pdf +101 -0
- data/vendor/prawn-core/reference_pdfs/russian_boxes.pdf +2780 -0
- data/vendor/prawn-core/reference_pdfs/simple_text.pdf +136 -0
- data/vendor/prawn-core/reference_pdfs/simple_text_ttf.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/sjis.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/span.pdf +1975 -0
- data/vendor/prawn-core/reference_pdfs/stamp.pdf +649 -0
- data/vendor/prawn-core/reference_pdfs/stretched_nesting.pdf +200 -0
- data/vendor/prawn-core/reference_pdfs/stroke_bounds.pdf +135 -0
- data/vendor/prawn-core/reference_pdfs/stroke_cap_and_join.pdf +80 -0
- data/vendor/prawn-core/reference_pdfs/stroke_dash.pdf +457 -0
- data/vendor/prawn-core/reference_pdfs/text_box.pdf +962 -0
- data/vendor/prawn-core/reference_pdfs/text_box_returning_excess.pdf +271 -0
- data/vendor/prawn-core/reference_pdfs/transparency.pdf +347 -0
- data/vendor/prawn-core/reference_pdfs/utf8.pdf +0 -0
- data/vendor/prawn-core/reference_pdfs/win-ansi.pdf +6172 -0
- data/vendor/prawn-core/spec/annotations_spec.rb +90 -0
- data/vendor/prawn-core/spec/bounding_box_spec.rb +185 -0
- data/vendor/prawn-core/spec/destinations_spec.rb +15 -0
- data/vendor/prawn-core/spec/document_spec.rb +408 -0
- data/vendor/prawn-core/spec/font_spec.rb +314 -0
- data/vendor/prawn-core/spec/graphics_spec.rb +438 -0
- data/vendor/prawn-core/spec/images_spec.rb +79 -0
- data/vendor/prawn-core/spec/jpg_spec.rb +25 -0
- data/vendor/prawn-core/spec/measurement_units_spec.rb +23 -0
- data/vendor/prawn-core/spec/name_tree_spec.rb +112 -0
- data/vendor/prawn-core/spec/object_store_spec.rb +75 -0
- data/vendor/prawn-core/spec/outline_spec.rb +229 -0
- data/vendor/prawn-core/spec/pdf_object_spec.rb +122 -0
- data/vendor/prawn-core/spec/png_spec.rb +236 -0
- data/vendor/prawn-core/spec/reference_spec.rb +82 -0
- data/vendor/prawn-core/spec/repeater_spec.rb +96 -0
- data/vendor/prawn-core/spec/snapshot_spec.rb +138 -0
- data/vendor/prawn-core/spec/span_spec.rb +49 -0
- data/vendor/prawn-core/spec/spec_helper.rb +24 -0
- data/vendor/prawn-core/spec/stamp_spec.rb +108 -0
- data/vendor/prawn-core/spec/stroke_styles_spec.rb +152 -0
- data/vendor/prawn-core/spec/text_at_spec.rb +119 -0
- data/vendor/prawn-core/spec/text_box_spec.rb +603 -0
- data/vendor/prawn-core/spec/text_spec.rb +308 -0
- data/vendor/prawn-core/spec/transparency_spec.rb +75 -0
- data/vendor/prawn-core/vendor/pdf-inspector/README +18 -0
- data/vendor/prawn-core/vendor/pdf-inspector/lib/pdf/inspector.rb +26 -0
- data/vendor/prawn-core/vendor/pdf-inspector/lib/pdf/inspector/extgstate.rb +18 -0
- data/vendor/prawn-core/vendor/pdf-inspector/lib/pdf/inspector/graphics.rb +131 -0
- data/vendor/prawn-core/vendor/pdf-inspector/lib/pdf/inspector/page.rb +25 -0
- data/vendor/prawn-core/vendor/pdf-inspector/lib/pdf/inspector/text.rb +31 -0
- data/vendor/prawn-core/vendor/pdf-inspector/lib/pdf/inspector/xobject.rb +19 -0
- data/vendor/prawn-core/vendor/ttfunk/data/fonts/DejaVuSans.ttf +0 -0
- data/vendor/prawn-core/vendor/ttfunk/data/fonts/comicsans.ttf +0 -0
- data/vendor/prawn-core/vendor/ttfunk/example.rb +45 -0
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk.rb +102 -0
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/directory.rb +17 -0
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/encoding/mac_roman.rb +88 -0
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/encoding/windows_1252.rb +69 -0
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/reader.rb +44 -0
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/resource_file.rb +78 -0
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/subset.rb +18 -0
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/subset/base.rb +141 -0
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/subset/mac_roman.rb +46 -0
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/subset/unicode.rb +48 -0
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/subset/unicode_8bit.rb +63 -0
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/subset/windows_1252.rb +51 -0
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/subset_collection.rb +72 -0
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table.rb +46 -0
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/cmap.rb +34 -0
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/cmap/format00.rb +54 -0
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/cmap/format04.rb +126 -0
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/cmap/subtable.rb +79 -0
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/glyf.rb +64 -0
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/glyf/compound.rb +81 -0
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/glyf/simple.rb +37 -0
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/head.rb +44 -0
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/hhea.rb +41 -0
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/hmtx.rb +47 -0
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/kern.rb +79 -0
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/kern/format0.rb +62 -0
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/loca.rb +43 -0
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/maxp.rb +40 -0
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/name.rb +119 -0
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/os2.rb +78 -0
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/post.rb +91 -0
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/post/format10.rb +43 -0
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/post/format20.rb +35 -0
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/post/format25.rb +23 -0
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/post/format30.rb +17 -0
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/post/format40.rb +17 -0
- data/vendor/prawn-core/vendor/ttfunk/lib/ttfunk/table/simple.rb +14 -0
- data/vendor/prawn-core/www/index.html +196 -0
- data/vendor/prawn-core/www/media/bounding_boxes.pdf +146 -0
- data/vendor/prawn-core/www/media/bounding_boxes.png +0 -0
- data/vendor/prawn-core/www/media/bounding_boxes_out.png +0 -0
- data/vendor/prawn-core/www/media/fancy_table.pdf +350 -0
- data/vendor/prawn-core/www/media/image.pdf +0 -0
- data/vendor/prawn-core/www/media/images.png +0 -0
- data/vendor/prawn-core/www/media/prawn_logo.png +0 -0
- data/vendor/prawn-core/www/media/tables.png +0 -0
- data/vendor/prawn-core/www/media/utf8.pdf +0 -0
- data/vendor/prawn-core/www/media/utf8.png +0 -0
- data/vendor/prawn-core/www/prawn-Chinese.html +113 -0
- data/vendor/prawn-core/www/prawn.css +86 -0
- data/vendor/prawn-core/www/twilight.css +266 -0
- metadata +374 -0
@@ -0,0 +1,79 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
|
4
|
+
|
5
|
+
describe "the image() function" do
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
@filename = "#{Prawn::BASEDIR}/data/images/pigs.jpg"
|
9
|
+
create_pdf
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should only embed an image once, even if it's added multiple times" do
|
13
|
+
@pdf.image @filename, :at => [100,100]
|
14
|
+
@pdf.image @filename, :at => [300,300]
|
15
|
+
|
16
|
+
output = @pdf.render
|
17
|
+
images = PDF::Inspector::XObject.analyze(output)
|
18
|
+
# there should be 2 images in the page resources
|
19
|
+
images.page_xobjects.first.size.should == 2
|
20
|
+
# but only 1 image xobject
|
21
|
+
output.scan(/\/Type \/XObject/).size.should == 1
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should return the image info object" do
|
25
|
+
info = @pdf.image(@filename)
|
26
|
+
|
27
|
+
info.should.be.kind_of(Prawn::Images::JPG)
|
28
|
+
|
29
|
+
info.height.should == 453
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should accept IO objects" do
|
33
|
+
file = File.open(@filename, "rb")
|
34
|
+
info = @pdf.image(file)
|
35
|
+
|
36
|
+
info.height.should == 453
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should raise an UnsupportedImageType if passed a BMP" do
|
40
|
+
filename = "#{Prawn::BASEDIR}/data/images/tru256.bmp"
|
41
|
+
lambda { @pdf.image filename, :at => [100,100] }.should.raise(Prawn::Errors::UnsupportedImageType)
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should raise an UnsupportedImageType if passed an interlaced PNG" do
|
45
|
+
filename = "#{Prawn::BASEDIR}/data/images/dice_interlaced.png"
|
46
|
+
lambda { @pdf.image filename, :at => [100,100] }.should.raise(Prawn::Errors::UnsupportedImageType)
|
47
|
+
end
|
48
|
+
|
49
|
+
describe ":fit option" do
|
50
|
+
it "should fit inside the defined constraints" do
|
51
|
+
info = @pdf.image @filename, :fit => [100,400]
|
52
|
+
info.scaled_width.should <= 100
|
53
|
+
info.scaled_height.should <= 400
|
54
|
+
|
55
|
+
info = @pdf.image @filename, :fit => [400,100]
|
56
|
+
info.scaled_width.should <= 400
|
57
|
+
info.scaled_height.should <= 100
|
58
|
+
|
59
|
+
info = @pdf.image @filename, :fit => [604,453]
|
60
|
+
info.scaled_width.should == 604
|
61
|
+
info.scaled_height.should == 453
|
62
|
+
end
|
63
|
+
it "should move text position" do
|
64
|
+
@y = @pdf.y
|
65
|
+
info = @pdf.image @filename, :fit => [100,400]
|
66
|
+
@pdf.y.should < @y
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
describe ":at option" do
|
71
|
+
it "should not move text position" do
|
72
|
+
@y = @pdf.y
|
73
|
+
info = @pdf.image @filename, :at => [100,400]
|
74
|
+
@pdf.y.should == @y
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
# Spec'ing the PNG class. Not complete yet - still needs to check the
|
4
|
+
# contents of palette and transparency to ensure they're correct.
|
5
|
+
# Need to find files that have these sections first.
|
6
|
+
|
7
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
|
8
|
+
|
9
|
+
describe "When reading a JPEG file" do
|
10
|
+
|
11
|
+
before(:each) do
|
12
|
+
@filename = "#{Prawn::BASEDIR}/data/images/pigs.jpg"
|
13
|
+
@img_data = File.open(@filename, "rb") { |f| f.read }
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should read the basic attributes correctly" do
|
17
|
+
jpg = Prawn::Images::JPG.new(@img_data)
|
18
|
+
|
19
|
+
jpg.width.should == 604
|
20
|
+
jpg.height.should == 453
|
21
|
+
jpg.bits.should == 8
|
22
|
+
jpg.channels.should == 3
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
|
2
|
+
require "prawn/measurement_extensions"
|
3
|
+
|
4
|
+
describe "Measurement units" do
|
5
|
+
|
6
|
+
it "should convert units to PostScriptPoints" do
|
7
|
+
1.mm.should.be.close(2.834645669, 0.000000001)
|
8
|
+
1.mm.should == (72 / 25.4)
|
9
|
+
2.mm.should == (2 * 72 / 25.4)
|
10
|
+
3.mm.should == 3 * 72 / 25.4
|
11
|
+
-3.mm.should == -3 * 72/25.4
|
12
|
+
1.cm.should == 10 * 72 / 25.4
|
13
|
+
1.dm.should == 100 * 72 / 25.4
|
14
|
+
1.m.should == 1000 * 72 / 25.4
|
15
|
+
|
16
|
+
1.in.should == 72
|
17
|
+
1.ft.should == 72 * 12
|
18
|
+
1.yd.should == 72 * 12 * 3
|
19
|
+
1.pt.should == 1
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
|
@@ -0,0 +1,112 @@
|
|
1
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
|
2
|
+
|
3
|
+
def tree_dump(tree)
|
4
|
+
if tree.is_a?(Prawn::NameTree::Node)
|
5
|
+
"[" + tree.children.map { |child| tree_dump(child) }.join(",") + "]"
|
6
|
+
else
|
7
|
+
"#{tree.name}=#{tree.value}"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def tree_add(tree, *args)
|
12
|
+
args.each do |(name, value)|
|
13
|
+
tree.add(name, value)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def tree_value(name, value)
|
18
|
+
Prawn::NameTree::Value.new(name, value)
|
19
|
+
end
|
20
|
+
|
21
|
+
class RefExposingDocument < Prawn::Document
|
22
|
+
def object_store
|
23
|
+
@store
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "Name Tree" do
|
28
|
+
before(:each) { create_pdf(RefExposingDocument) }
|
29
|
+
|
30
|
+
it "should have no children when first initialized" do
|
31
|
+
node = Prawn::NameTree::Node.new(@pdf, 3)
|
32
|
+
node.children.length.should == 0
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should have no subtrees while child limit is not reached" do
|
36
|
+
node = Prawn::NameTree::Node.new(@pdf, 3)
|
37
|
+
tree_add(node, ["one", 1], ["two", 2], ["three", 3])
|
38
|
+
tree_dump(node).should == "[one=1,three=3,two=2]"
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should split into subtrees when limit is exceeded" do
|
42
|
+
node = Prawn::NameTree::Node.new(@pdf, 3)
|
43
|
+
tree_add(node, ["one", 1], ["two", 2], ["three", 3], ["four", 4])
|
44
|
+
tree_dump(node).should == "[[four=4,one=1],[three=3,two=2]]"
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should create a two new references when root is split" do
|
48
|
+
ref_count = @pdf.object_store.length
|
49
|
+
node = Prawn::NameTree::Node.new(@pdf, 3)
|
50
|
+
tree_add(node, ["one", 1], ["two", 2], ["three", 3], ["four", 4])
|
51
|
+
@pdf.object_store.length.should.equal ref_count+2
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should create a one new reference when subtree is split" do
|
55
|
+
node = Prawn::NameTree::Node.new(@pdf, 3)
|
56
|
+
tree_add(node, ["one", 1], ["two", 2], ["three", 3], ["four", 4])
|
57
|
+
|
58
|
+
ref_count = @pdf.object_store.length # save when root is split
|
59
|
+
tree_add(node, ["five", 5], ["six", 6], ["seven", 7])
|
60
|
+
tree_dump(node).should == "[[five=5,four=4,one=1],[seven=7,six=6],[three=3,two=2]]"
|
61
|
+
@pdf.object_store.length.should.equal ref_count+1
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should keep tree balanced when subtree split cascades to root" do
|
65
|
+
node = Prawn::NameTree::Node.new(@pdf, 3)
|
66
|
+
tree_add(node, ["one", 1], ["two", 2], ["three", 3], ["four", 4])
|
67
|
+
tree_add(node, ["five", 5], ["six", 6], ["seven", 7], ["eight", 8])
|
68
|
+
tree_dump(node).should == "[[[eight=8,five=5],[four=4,one=1]],[[seven=7,six=6],[three=3,two=2]]]"
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should maintain order of already properly ordered nodes" do
|
72
|
+
node = Prawn::NameTree::Node.new(@pdf, 3)
|
73
|
+
tree_add(node, ["eight", 8], ["five", 5], ["four", 4], ["one", 1])
|
74
|
+
tree_add(node, ['seven', 7], ['six', 6], ['three', 3], ['two', 2])
|
75
|
+
tree_dump(node).should == "[[[eight=8,five=5],[four=4,one=1]],[[seven=7,six=6],[three=3,two=2]]]"
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should emit only :Names key with to_hash if root is only node" do
|
79
|
+
node = Prawn::NameTree::Node.new(@pdf, 3)
|
80
|
+
tree_add(node, ["one", 1], ["two", 2], ["three", 3])
|
81
|
+
node.to_hash.should.equal(
|
82
|
+
{ :Names => [tree_value("one", 1), tree_value("three", 3), tree_value("two", 2)] }
|
83
|
+
)
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should emit only :Kids key with to_hash if root has children" do
|
87
|
+
node = Prawn::NameTree::Node.new(@pdf, 3)
|
88
|
+
tree_add(node, ["one", 1], ["two", 2], ["three", 3], ["four", 4])
|
89
|
+
node.to_hash.should.equal({ :Kids => node.children.map { |child| child.ref } })
|
90
|
+
end
|
91
|
+
|
92
|
+
it "should emit :Limits and :Names keys with to_hash for leaf node" do
|
93
|
+
node = Prawn::NameTree::Node.new(@pdf, 3)
|
94
|
+
tree_add(node, ["one", 1], ["two", 2], ["three", 3], ["four", 4])
|
95
|
+
node.children.first.to_hash.should.equal(
|
96
|
+
{ :Limits => %w(four one),
|
97
|
+
:Names => [tree_value("four", 4), tree_value("one", 1)] }
|
98
|
+
)
|
99
|
+
end
|
100
|
+
|
101
|
+
it "should emit :Limits and :Kids keys with to_hash for inner node" do
|
102
|
+
node = Prawn::NameTree::Node.new(@pdf, 3)
|
103
|
+
tree_add(node, ["one", 1], ["two", 2], ["three", 3], ["four", 4])
|
104
|
+
tree_add(node, ["five", 5], ["six", 6], ["seven", 7], ["eight", 8])
|
105
|
+
tree_add(node, ["nine", 9], ["ten", 10], ["eleven", 11], ["twelve", 12])
|
106
|
+
tree_add(node, ["thirteen", 13], ["fourteen", 14], ["fifteen", 15], ["sixteen", 16])
|
107
|
+
node.children.first.to_hash.should.equal(
|
108
|
+
{ :Limits => %w(eight one),
|
109
|
+
:Kids => node.children.first.children.map { |child| child.ref } }
|
110
|
+
)
|
111
|
+
end
|
112
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
|
4
|
+
|
5
|
+
describe "Prawn::ObjectStore" do
|
6
|
+
before(:each) do
|
7
|
+
@store = Prawn::ObjectStore.new
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should create required roots by default, including info passed to new" do
|
11
|
+
store = Prawn::ObjectStore.new(:Test => 3)
|
12
|
+
store.size.should == 3 # 3 default roots
|
13
|
+
store.info.data[:Test].should == 3
|
14
|
+
store.pages.data[:Count].should == 0
|
15
|
+
store.root.data[:Pages].should == store.pages
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should add to its objects when ref() is called" do
|
19
|
+
count = @store.size
|
20
|
+
@store.ref("blah")
|
21
|
+
@store.size.should == count + 1
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should accept push with a Prawn::Reference" do
|
25
|
+
r = Prawn::Reference(123, "blah")
|
26
|
+
@store.push(r)
|
27
|
+
@store[r.identifier].should == r
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should accept arbitrary data and use it to create a Prawn::Reference" do
|
31
|
+
@store.push(123, "blahblah")
|
32
|
+
@store[123].data.should == "blahblah"
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should be Enumerable, yielding in order of submission" do
|
36
|
+
# higher IDs to bypass the default roots
|
37
|
+
[10, 11, 12].each do |id|
|
38
|
+
@store.push(id, "some data #{id}")
|
39
|
+
end
|
40
|
+
@store.map{|ref| ref.identifier}[-3..-1].should == [10, 11, 12]
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe "Prawn::ObjectStore#compact" do
|
45
|
+
it "should do nothing to an ObjectStore with all live refs" do
|
46
|
+
store = Prawn::ObjectStore.new
|
47
|
+
store.info.data[:Blah] = store.ref(:some => "structure")
|
48
|
+
old_size = store.size
|
49
|
+
store.compact
|
50
|
+
|
51
|
+
store.size.should == old_size
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should remove dead objects, renumbering live objects from 1" do
|
55
|
+
store = Prawn::ObjectStore.new
|
56
|
+
store.ref(:some => "structure")
|
57
|
+
old_size = store.size
|
58
|
+
store.compact
|
59
|
+
|
60
|
+
store.size.should.be < old_size
|
61
|
+
store.map{ |o| o.identifier }.should == (1..store.size).to_a
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should detect and remove dead objects that were once live" do
|
65
|
+
store = Prawn::ObjectStore.new
|
66
|
+
store.info.data[:Blah] = store.ref(:some => "structure")
|
67
|
+
store.info.data[:Blah] = :overwritten
|
68
|
+
old_size = store.size
|
69
|
+
store.compact
|
70
|
+
|
71
|
+
store.size.should.be < old_size
|
72
|
+
store.map{ |o| o.identifier }.should == (1..store.size).to_a
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
@@ -0,0 +1,229 @@
|
|
1
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), "spec_helper")
|
2
|
+
|
3
|
+
describe "Outline" do
|
4
|
+
before(:each) do
|
5
|
+
@pdf = Prawn::Document.new() do
|
6
|
+
text "Page 1. This is the first Chapter. "
|
7
|
+
start_new_page
|
8
|
+
text "Page 2. More in the first Chapter. "
|
9
|
+
start_new_page
|
10
|
+
define_outline do
|
11
|
+
section 'Chapter 1', :page => 1, :closed => true do
|
12
|
+
page 1, :title => 'Page 1'
|
13
|
+
page 2, :title => 'Page 2'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
describe "#generate_outline" do
|
19
|
+
before(:each) do
|
20
|
+
render_and_find_objects
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should create a root outline dictionary item" do
|
24
|
+
assert_not_nil @outline_root
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should set the first and last top items of the root outline dictionary item" do
|
28
|
+
referenced_object(@outline_root[:First]).should == @section_1
|
29
|
+
referenced_object(@outline_root[:Last]).should == @section_1
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "#create_outline_item" do
|
33
|
+
it "should create outline items for each section and page" do
|
34
|
+
[@section_1, @page_1, @page_2].each {|item| assert_not_nil item}
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "#set_relations, #set_variables_for_block, and #reset_parent" do
|
39
|
+
it "should link sibling items" do
|
40
|
+
referenced_object(@page_1[:Next]).should == @page_2
|
41
|
+
referenced_object(@page_2[:Prev]).should == @page_1
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should link child items to parent item" do
|
45
|
+
[@page_1, @page_2].each {|page| referenced_object(page[:Parent]).should == @section_1 }
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should set the first and last child items for parent item" do
|
49
|
+
referenced_object(@section_1[:First]).should == @page_1
|
50
|
+
referenced_object(@section_1[:Last]).should == @page_2
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe "#increase_count" do
|
55
|
+
|
56
|
+
it "should add the count of all descendant items" do
|
57
|
+
@outline_root[:Count].should == 3
|
58
|
+
@section_1[:Count].should.abs == 2
|
59
|
+
@page_1[:Count].should == 0
|
60
|
+
@page_2[:Count].should == 0
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
describe "closed option" do
|
66
|
+
|
67
|
+
it "should set the item's integer count to negative" do
|
68
|
+
@section_1[:Count].should == -2
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
describe "#outline.add_section" do
|
76
|
+
before(:each) do
|
77
|
+
@pdf.start_new_page
|
78
|
+
@pdf.text "Page 3. An added section "
|
79
|
+
@pdf.outline.add_section do
|
80
|
+
section 'Added Section', :page => 3 do
|
81
|
+
page 3, :title => 'Page 3'
|
82
|
+
end
|
83
|
+
end
|
84
|
+
render_and_find_objects
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should add new outline items to document" do
|
88
|
+
[@section_2, @page_3].each { |item| assert_not_nil item}
|
89
|
+
end
|
90
|
+
|
91
|
+
it "should reset the last items for root outline dictionary" do
|
92
|
+
referenced_object(@outline_root[:First]).should == @section_1
|
93
|
+
referenced_object(@outline_root[:Last]).should == @section_2
|
94
|
+
end
|
95
|
+
|
96
|
+
it "should reset the next relation for the previous last top level item" do
|
97
|
+
referenced_object(@section_1[:Next]).should == @section_2
|
98
|
+
end
|
99
|
+
|
100
|
+
it "should set the previous relation of the addded to section" do
|
101
|
+
referenced_object(@section_2[:Prev]).should == @section_1
|
102
|
+
end
|
103
|
+
|
104
|
+
it "should increase the count of root outline dictionary" do
|
105
|
+
@outline_root[:Count].should == 5
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
109
|
+
|
110
|
+
describe "#outline.insert_section_after" do
|
111
|
+
describe "inserting in the middle of another section" do
|
112
|
+
before(:each) do
|
113
|
+
@pdf.go_to_page 1
|
114
|
+
@pdf.start_new_page
|
115
|
+
@pdf.text "Inserted Page"
|
116
|
+
@pdf.outline.insert_section_after 'Page 1' do
|
117
|
+
page page_number, :title => "Inserted Page"
|
118
|
+
end
|
119
|
+
render_and_find_objects
|
120
|
+
end
|
121
|
+
|
122
|
+
it "should insert new outline items to document" do
|
123
|
+
assert_not_nil @inserted_page
|
124
|
+
end
|
125
|
+
|
126
|
+
it "should adjust the count of all ancestors" do
|
127
|
+
@outline_root[:Count].should == 4
|
128
|
+
@section_1[:Count].should.abs == 3
|
129
|
+
end
|
130
|
+
|
131
|
+
describe "#adjust_relations" do
|
132
|
+
|
133
|
+
it "should reset the sibling relations of adjoining items to inserted item" do
|
134
|
+
referenced_object(@page_1[:Next]).should == @inserted_page
|
135
|
+
referenced_object(@page_2[:Prev]).should == @inserted_page
|
136
|
+
end
|
137
|
+
|
138
|
+
it "should set the sibling relation of added item to adjoining items" do
|
139
|
+
referenced_object(@inserted_page[:Next]).should == @page_2
|
140
|
+
referenced_object(@inserted_page[:Prev]).should == @page_1
|
141
|
+
end
|
142
|
+
|
143
|
+
it "should not affect the first and last relations of parent item" do
|
144
|
+
referenced_object(@section_1[:First]).should == @page_1
|
145
|
+
referenced_object(@section_1[:Last]).should == @page_2
|
146
|
+
end
|
147
|
+
|
148
|
+
end
|
149
|
+
|
150
|
+
end
|
151
|
+
|
152
|
+
describe "inserting at the end of another section" do
|
153
|
+
before(:each) do
|
154
|
+
@pdf.go_to_page 2
|
155
|
+
@pdf.start_new_page
|
156
|
+
@pdf.text "Inserted Page"
|
157
|
+
@pdf.outline.insert_section_after 'Page 2' do
|
158
|
+
page page_number, :title => "Inserted Page"
|
159
|
+
end
|
160
|
+
render_and_find_objects
|
161
|
+
end
|
162
|
+
|
163
|
+
describe "#adjust_relations" do
|
164
|
+
|
165
|
+
it "should reset the sibling relations of adjoining item to inserted item" do
|
166
|
+
referenced_object(@page_2[:Next]).should == @inserted_page
|
167
|
+
end
|
168
|
+
|
169
|
+
it "should set the sibling relation of added item to adjoining items" do
|
170
|
+
assert_nil referenced_object(@inserted_page[:Next])
|
171
|
+
referenced_object(@inserted_page[:Prev]).should == @page_2
|
172
|
+
end
|
173
|
+
|
174
|
+
it "should adjust the last relation of parent item" do
|
175
|
+
referenced_object(@section_1[:Last]).should == @inserted_page
|
176
|
+
end
|
177
|
+
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
it "should require an existing title" do
|
182
|
+
assert_raise Prawn::Errors::UnknownOutlineTitle do
|
183
|
+
@pdf.go_to_page 1
|
184
|
+
@pdf.start_new_page
|
185
|
+
@pdf.text "Inserted Page"
|
186
|
+
@pdf.outline.insert_section_after 'Wrong page' do
|
187
|
+
page page_number, :title => "Inserted Page"
|
188
|
+
end
|
189
|
+
render_and_find_objects
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
end
|
194
|
+
|
195
|
+
describe "#page" do
|
196
|
+
it "should require a title option to be set" do
|
197
|
+
assert_raise Prawn::Errors::RequiredOption do
|
198
|
+
@pdf = Prawn::Document.new() do
|
199
|
+
text "Page 1. This is the first Chapter. "
|
200
|
+
define_outline do
|
201
|
+
page 1, :title => nil
|
202
|
+
end
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
def render_and_find_objects
|
210
|
+
output = StringIO.new(@pdf.render, 'r+')
|
211
|
+
@hash = PDF::Hash.new(output)
|
212
|
+
@outline_root = @hash.values.find {|obj| obj.is_a?(Hash) && obj[:Type] == :Outlines}
|
213
|
+
@pages = @hash.values.find {|obj| obj.is_a?(Hash) && obj[:Type] == :Pages}[:Kids]
|
214
|
+
@section_1 = find_by_title('Chapter 1')
|
215
|
+
@page_1 = find_by_title('Page 1')
|
216
|
+
@page_2 = find_by_title('Page 2')
|
217
|
+
@section_2 = find_by_title('Added Section')
|
218
|
+
@page_3 = find_by_title('Page 3')
|
219
|
+
@inserted_page = find_by_title('Inserted Page')
|
220
|
+
end
|
221
|
+
|
222
|
+
def find_by_title(title)
|
223
|
+
@hash.values.find {|obj| obj.is_a?(Hash) && obj[:Title] == title}
|
224
|
+
end
|
225
|
+
|
226
|
+
def referenced_object(reference)
|
227
|
+
@hash[reference]
|
228
|
+
end
|
229
|
+
|