prawn 0.13.0 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (348) hide show
  1. checksums.yaml +5 -5
  2. checksums.yaml.gz.sig +0 -0
  3. data/.yardopts +10 -0
  4. data/GPLv2 +20 -21
  5. data/Gemfile +3 -16
  6. data/Rakefile +17 -39
  7. data/lib/prawn/document/bounding_box.rb +85 -42
  8. data/lib/prawn/document/column_box.rb +21 -11
  9. data/lib/prawn/document/internals.rb +40 -147
  10. data/lib/prawn/document/span.rb +25 -17
  11. data/lib/prawn/document.rb +286 -245
  12. data/lib/prawn/encoding.rb +68 -101
  13. data/lib/prawn/errors.rb +47 -43
  14. data/lib/prawn/font.rb +204 -155
  15. data/lib/prawn/font_metric_cache.rb +25 -21
  16. data/lib/prawn/fonts/afm.rb +292 -0
  17. data/lib/prawn/{font → fonts}/dfont.rb +7 -13
  18. data/lib/prawn/fonts/otf.rb +11 -0
  19. data/lib/prawn/fonts/ttc.rb +36 -0
  20. data/lib/prawn/{font → fonts}/ttf.rb +142 -80
  21. data/lib/prawn/graphics/blend_mode.rb +65 -0
  22. data/lib/prawn/graphics/cap_style.rb +6 -5
  23. data/lib/prawn/graphics/color.rb +47 -44
  24. data/lib/prawn/graphics/dash.rb +30 -13
  25. data/lib/prawn/graphics/join_style.rb +13 -6
  26. data/lib/prawn/graphics/patterns.rb +221 -90
  27. data/lib/prawn/graphics/transformation.rb +21 -12
  28. data/lib/prawn/graphics/transparency.rb +21 -17
  29. data/lib/prawn/graphics.rb +155 -128
  30. data/lib/prawn/{layout/grid.rb → grid.rb} +110 -47
  31. data/lib/prawn/image_handler.rb +16 -2
  32. data/lib/prawn/images/image.rb +4 -2
  33. data/lib/prawn/images/jpg.rb +39 -30
  34. data/lib/prawn/images/png.rb +132 -169
  35. data/lib/prawn/images.rb +70 -62
  36. data/lib/prawn/measurement_extensions.rb +15 -10
  37. data/lib/prawn/measurements.rb +22 -23
  38. data/lib/prawn/outline.rb +301 -13
  39. data/lib/prawn/repeater.rb +19 -17
  40. data/lib/prawn/security/arcfour.rb +54 -0
  41. data/lib/prawn/security.rb +108 -86
  42. data/lib/prawn/soft_mask.rb +40 -41
  43. data/lib/prawn/stamp.rb +29 -12
  44. data/lib/prawn/text/box.rb +27 -29
  45. data/lib/prawn/text/formatted/arranger.rb +110 -67
  46. data/lib/prawn/text/formatted/box.rb +233 -165
  47. data/lib/prawn/text/formatted/fragment.rb +27 -27
  48. data/lib/prawn/text/formatted/line_wrap.rb +137 -97
  49. data/lib/prawn/text/formatted/parser.rb +149 -127
  50. data/lib/prawn/text/formatted/wrap.rb +57 -37
  51. data/lib/prawn/text/formatted.rb +6 -4
  52. data/lib/prawn/text.rb +105 -73
  53. data/lib/prawn/transformation_stack.rb +44 -0
  54. data/lib/prawn/utilities.rb +11 -21
  55. data/lib/prawn/version.rb +5 -0
  56. data/lib/prawn/view.rb +101 -0
  57. data/lib/prawn.rb +42 -68
  58. data/{data/images/fractal.jpg → manual/absolute_position.pdf} +0 -0
  59. data/manual/basic_concepts/adding_pages.rb +9 -10
  60. data/manual/basic_concepts/basic_concepts.rb +33 -24
  61. data/manual/basic_concepts/creation.rb +10 -11
  62. data/manual/basic_concepts/cursor.rb +9 -10
  63. data/manual/basic_concepts/measurement.rb +10 -11
  64. data/manual/basic_concepts/origin.rb +8 -9
  65. data/manual/basic_concepts/other_cursor_helpers.rb +17 -18
  66. data/manual/basic_concepts/view.rb +48 -0
  67. data/manual/bounding_box/bounding_box.rb +31 -29
  68. data/manual/bounding_box/bounds.rb +17 -18
  69. data/manual/bounding_box/canvas.rb +8 -9
  70. data/manual/bounding_box/creation.rb +8 -9
  71. data/manual/bounding_box/indentation.rb +22 -23
  72. data/manual/bounding_box/nesting.rb +32 -25
  73. data/manual/bounding_box/russian_boxes.rb +19 -19
  74. data/manual/bounding_box/stretchy.rb +18 -20
  75. data/manual/contents.rb +35 -0
  76. data/manual/cover.rb +43 -0
  77. data/manual/document_and_page_options/background.rb +16 -14
  78. data/manual/document_and_page_options/document_and_page_options.rb +26 -23
  79. data/manual/document_and_page_options/metadata.rb +21 -19
  80. data/manual/document_and_page_options/page_margins.rb +20 -22
  81. data/manual/document_and_page_options/page_size.rb +15 -15
  82. data/manual/document_and_page_options/print_scaling.rb +23 -0
  83. data/manual/example_helper.rb +5 -408
  84. data/manual/graphics/blend_mode.rb +52 -0
  85. data/manual/graphics/circle_and_ellipse.rb +8 -9
  86. data/manual/graphics/color.rb +11 -13
  87. data/manual/graphics/common_lines.rb +13 -12
  88. data/manual/graphics/fill_and_stroke.rb +10 -11
  89. data/manual/graphics/fill_rules.rb +13 -12
  90. data/manual/graphics/gradients.rb +28 -22
  91. data/manual/graphics/graphics.rb +52 -46
  92. data/manual/graphics/helper.rb +20 -10
  93. data/manual/graphics/line_width.rb +13 -12
  94. data/manual/graphics/lines_and_curves.rb +13 -14
  95. data/manual/graphics/polygon.rb +10 -12
  96. data/manual/graphics/rectangle.rb +7 -8
  97. data/manual/graphics/rotate.rb +9 -12
  98. data/manual/graphics/scale.rb +19 -18
  99. data/manual/graphics/soft_masks.rb +5 -7
  100. data/manual/graphics/stroke_cap.rb +10 -11
  101. data/manual/graphics/stroke_dash.rb +16 -17
  102. data/manual/graphics/stroke_join.rb +10 -11
  103. data/manual/graphics/translate.rb +13 -13
  104. data/manual/graphics/transparency.rb +11 -13
  105. data/manual/{manual/how_to_read_this_manual.rb → how_to_read_this_manual.rb} +23 -25
  106. data/manual/images/absolute_position.rb +9 -10
  107. data/manual/images/fit.rb +9 -10
  108. data/manual/images/horizontal.rb +13 -14
  109. data/manual/images/images.rb +31 -30
  110. data/manual/images/plain_image.rb +6 -7
  111. data/manual/images/scale.rb +12 -13
  112. data/manual/images/vertical.rb +19 -17
  113. data/manual/images/width_and_height.rb +13 -14
  114. data/manual/layout/boxes.rb +14 -15
  115. data/manual/layout/content.rb +12 -13
  116. data/manual/layout/layout.rb +19 -20
  117. data/manual/layout/simple_grid.rb +8 -9
  118. data/manual/outline/add_subsection_to.rb +26 -27
  119. data/manual/outline/insert_section_after.rb +19 -20
  120. data/manual/outline/outline.rb +23 -22
  121. data/manual/outline/sections_and_pages.rb +24 -25
  122. data/manual/repeatable_content/alternate_page_numbering.rb +36 -0
  123. data/manual/repeatable_content/page_numbering.rb +20 -19
  124. data/manual/repeatable_content/repeatable_content.rb +26 -22
  125. data/manual/repeatable_content/repeater.rb +18 -19
  126. data/manual/repeatable_content/stamp.rb +18 -19
  127. data/manual/security/encryption.rb +8 -11
  128. data/manual/security/permissions.rb +20 -15
  129. data/manual/security/security.rb +20 -20
  130. data/manual/table.rb +16 -0
  131. data/manual/text/alignment.rb +17 -18
  132. data/manual/text/color.rb +13 -13
  133. data/manual/text/column_box.rb +10 -12
  134. data/manual/text/fallback_fonts.rb +29 -25
  135. data/manual/text/font.rb +17 -18
  136. data/manual/text/font_size.rb +21 -22
  137. data/manual/text/font_style.rb +12 -10
  138. data/manual/text/formatted_callbacks.rb +36 -26
  139. data/manual/text/formatted_text.rb +41 -34
  140. data/manual/text/free_flowing_text.rb +28 -29
  141. data/manual/text/inline.rb +23 -26
  142. data/manual/text/kerning_and_character_spacing.rb +20 -21
  143. data/manual/text/leading.rb +10 -11
  144. data/manual/text/line_wrapping.rb +40 -21
  145. data/manual/text/paragraph_indentation.rb +17 -12
  146. data/manual/text/positioned_text.rb +19 -20
  147. data/manual/text/registering_families.rb +33 -30
  148. data/manual/text/rendering_and_color.rb +11 -12
  149. data/manual/text/right_to_left_text.rb +31 -20
  150. data/manual/text/rotation.rb +36 -27
  151. data/manual/text/single_usage.rb +13 -14
  152. data/manual/text/text.rb +62 -62
  153. data/manual/text/text_box_excess.rb +22 -19
  154. data/manual/text/text_box_extensions.rb +21 -18
  155. data/manual/text/text_box_overflow.rb +28 -21
  156. data/manual/text/utf8.rb +16 -17
  157. data/manual/text/win_ansi_charset.rb +29 -26
  158. data/prawn.gemspec +45 -43
  159. data/spec/extensions/encoding_helpers.rb +4 -3
  160. data/spec/prawn/document/bounding_box_spec.rb +550 -0
  161. data/spec/prawn/document/column_box_spec.rb +75 -0
  162. data/spec/prawn/document/security_spec.rb +176 -0
  163. data/spec/prawn/document_annotations_spec.rb +76 -0
  164. data/spec/prawn/document_destinations_spec.rb +15 -0
  165. data/spec/prawn/document_grid_spec.rb +99 -0
  166. data/spec/prawn/document_reference_spec.rb +27 -0
  167. data/spec/prawn/document_span_spec.rb +44 -0
  168. data/spec/prawn/document_spec.rb +805 -0
  169. data/spec/prawn/font_metric_cache_spec.rb +54 -0
  170. data/spec/prawn/font_spec.rb +544 -0
  171. data/spec/prawn/graphics/blend_mode_spec.rb +63 -0
  172. data/spec/prawn/graphics/transparency_spec.rb +81 -0
  173. data/spec/prawn/graphics_spec.rb +872 -0
  174. data/spec/prawn/graphics_stroke_styles_spec.rb +229 -0
  175. data/spec/prawn/image_handler_spec.rb +53 -0
  176. data/spec/prawn/images/jpg_spec.rb +20 -0
  177. data/spec/prawn/images/png_spec.rb +283 -0
  178. data/spec/prawn/images_spec.rb +229 -0
  179. data/spec/prawn/measurements_extensions_spec.rb +24 -0
  180. data/spec/prawn/outline_spec.rb +512 -0
  181. data/spec/prawn/repeater_spec.rb +166 -0
  182. data/spec/prawn/soft_mask_spec.rb +74 -0
  183. data/spec/prawn/stamp_spec.rb +173 -0
  184. data/spec/prawn/text/box_spec.rb +1110 -0
  185. data/spec/prawn/text/formatted/arranger_spec.rb +466 -0
  186. data/spec/prawn/text/formatted/box_spec.rb +849 -0
  187. data/spec/prawn/text/formatted/fragment_spec.rb +343 -0
  188. data/spec/prawn/text/formatted/line_wrap_spec.rb +495 -0
  189. data/spec/prawn/text/formatted/parser_spec.rb +697 -0
  190. data/spec/prawn/text_draw_text_spec.rb +150 -0
  191. data/spec/prawn/text_rendering_mode_spec.rb +48 -0
  192. data/spec/prawn/text_spacing_spec.rb +95 -0
  193. data/spec/prawn/text_spec.rb +603 -0
  194. data/spec/prawn/text_with_inline_formatting_spec.rb +35 -0
  195. data/spec/prawn/transformation_stack_spec.rb +66 -0
  196. data/spec/prawn/view_spec.rb +63 -0
  197. data/spec/prawn_manual_spec.rb +35 -0
  198. data/spec/spec_helper.rb +22 -21
  199. data.tar.gz.sig +0 -0
  200. metadata +168 -307
  201. metadata.gz.sig +0 -0
  202. data/README.md +0 -109
  203. data/data/encodings/win_ansi.txt +0 -29
  204. data/data/images/16bit.alpha +0 -0
  205. data/data/images/16bit.dat +0 -0
  206. data/data/images/16bit.png +0 -0
  207. data/data/images/arrow.png +0 -0
  208. data/data/images/arrow2.png +0 -0
  209. data/data/images/barcode_issue.png +0 -0
  210. data/data/images/dice.alpha +0 -0
  211. data/data/images/dice.dat +0 -0
  212. data/data/images/dice.png +0 -0
  213. data/data/images/dice_interlaced.png +0 -0
  214. data/data/images/indexed_color.dat +0 -0
  215. data/data/images/indexed_color.png +0 -0
  216. data/data/images/letterhead.jpg +0 -0
  217. data/data/images/page_white_text.alpha +0 -0
  218. data/data/images/page_white_text.dat +0 -0
  219. data/data/images/page_white_text.png +0 -0
  220. data/data/images/pigs.jpg +0 -0
  221. data/data/images/prawn.png +0 -0
  222. data/data/images/ruport.png +0 -0
  223. data/data/images/ruport_data.dat +0 -0
  224. data/data/images/ruport_transparent.png +0 -0
  225. data/data/images/ruport_type0.png +0 -0
  226. data/data/images/stef.jpg +0 -0
  227. data/data/images/tru256.bmp +0 -0
  228. data/data/images/web-links.dat +0 -1
  229. data/data/images/web-links.png +0 -0
  230. data/data/pdfs/complex_template.pdf +0 -0
  231. data/data/pdfs/contains_ttf_font.pdf +0 -0
  232. data/data/pdfs/encrypted.pdf +0 -0
  233. data/data/pdfs/form.pdf +1 -819
  234. data/data/pdfs/hexagon.pdf +0 -61
  235. data/data/pdfs/indirect_reference.pdf +0 -86
  236. data/data/pdfs/multipage_template.pdf +0 -127
  237. data/data/pdfs/nested_pages.pdf +0 -118
  238. data/data/pdfs/page_without_mediabox.pdf +0 -193
  239. data/data/pdfs/resources_as_indirect_object.pdf +0 -83
  240. data/data/pdfs/two_hexagons.pdf +0 -90
  241. data/data/pdfs/version_1_6.pdf +0 -61
  242. data/data/shift_jis_text.txt +0 -1
  243. data/lib/pdf/core/annotations.rb +0 -60
  244. data/lib/pdf/core/byte_string.rb +0 -9
  245. data/lib/pdf/core/destinations.rb +0 -90
  246. data/lib/pdf/core/document_state.rb +0 -78
  247. data/lib/pdf/core/filter_list.rb +0 -51
  248. data/lib/pdf/core/filters.rb +0 -36
  249. data/lib/pdf/core/graphics_state.rb +0 -68
  250. data/lib/pdf/core/literal_string.rb +0 -16
  251. data/lib/pdf/core/name_tree.rb +0 -177
  252. data/lib/pdf/core/object_store.rb +0 -320
  253. data/lib/pdf/core/outline.rb +0 -315
  254. data/lib/pdf/core/page.rb +0 -212
  255. data/lib/pdf/core/page_geometry.rb +0 -126
  256. data/lib/pdf/core/pdf_object.rb +0 -124
  257. data/lib/pdf/core/reference.rb +0 -103
  258. data/lib/pdf/core/stream.rb +0 -98
  259. data/lib/pdf/core/text.rb +0 -275
  260. data/lib/pdf/core.rb +0 -35
  261. data/lib/prawn/compatibility.rb +0 -91
  262. data/lib/prawn/document/graphics_state.rb +0 -73
  263. data/lib/prawn/document/snapshot.rb +0 -89
  264. data/lib/prawn/font/afm.rb +0 -203
  265. data/lib/prawn/layout.rb +0 -20
  266. data/lib/prawn/table/cell/image.rb +0 -70
  267. data/lib/prawn/table/cell/in_table.rb +0 -27
  268. data/lib/prawn/table/cell/span_dummy.rb +0 -92
  269. data/lib/prawn/table/cell/subtable.rb +0 -65
  270. data/lib/prawn/table/cell/text.rb +0 -153
  271. data/lib/prawn/table/cell.rb +0 -770
  272. data/lib/prawn/table/cells.rb +0 -295
  273. data/lib/prawn/table.rb +0 -643
  274. data/manual/example_file.rb +0 -116
  275. data/manual/example_package.rb +0 -53
  276. data/manual/example_section.rb +0 -46
  277. data/manual/manual/cover.rb +0 -35
  278. data/manual/manual/foreword.rb +0 -85
  279. data/manual/manual/manual.rb +0 -35
  280. data/manual/syntax_highlight.rb +0 -52
  281. data/manual/table/basic_block.rb +0 -53
  282. data/manual/table/before_rendering_page.rb +0 -26
  283. data/manual/table/cell_border_lines.rb +0 -24
  284. data/manual/table/cell_borders_and_bg.rb +0 -31
  285. data/manual/table/cell_dimensions.rb +0 -30
  286. data/manual/table/cell_text.rb +0 -38
  287. data/manual/table/column_widths.rb +0 -30
  288. data/manual/table/content_and_subtables.rb +0 -39
  289. data/manual/table/creation.rb +0 -27
  290. data/manual/table/filtering.rb +0 -36
  291. data/manual/table/flow_and_header.rb +0 -17
  292. data/manual/table/image_cells.rb +0 -33
  293. data/manual/table/position.rb +0 -29
  294. data/manual/table/row_colors.rb +0 -20
  295. data/manual/table/span.rb +0 -30
  296. data/manual/table/style.rb +0 -22
  297. data/manual/table/table.rb +0 -52
  298. data/manual/table/width.rb +0 -27
  299. data/manual/templates/full_template.rb +0 -25
  300. data/manual/templates/page_template.rb +0 -48
  301. data/manual/templates/templates.rb +0 -27
  302. data/manual/text/group.rb +0 -29
  303. data/spec/acceptance/png.rb +0 -23
  304. data/spec/annotations_spec.rb +0 -74
  305. data/spec/bounding_box_spec.rb +0 -493
  306. data/spec/cell_spec.rb +0 -628
  307. data/spec/column_box_spec.rb +0 -33
  308. data/spec/destinations_spec.rb +0 -15
  309. data/spec/document_spec.rb +0 -761
  310. data/spec/extensions/mocha.rb +0 -44
  311. data/spec/filters_spec.rb +0 -34
  312. data/spec/font_metric_cache_spec.rb +0 -52
  313. data/spec/font_spec.rb +0 -464
  314. data/spec/formatted_text_arranger_spec.rb +0 -421
  315. data/spec/formatted_text_box_spec.rb +0 -650
  316. data/spec/formatted_text_fragment_spec.rb +0 -298
  317. data/spec/graphics_spec.rb +0 -651
  318. data/spec/grid_spec.rb +0 -85
  319. data/spec/image_handler_spec.rb +0 -42
  320. data/spec/images_spec.rb +0 -157
  321. data/spec/inline_formatted_text_parser_spec.rb +0 -564
  322. data/spec/jpg_spec.rb +0 -25
  323. data/spec/line_wrap_spec.rb +0 -333
  324. data/spec/measurement_units_spec.rb +0 -23
  325. data/spec/name_tree_spec.rb +0 -112
  326. data/spec/object_store_spec.rb +0 -170
  327. data/spec/outline_spec.rb +0 -448
  328. data/spec/pdf_object_spec.rb +0 -172
  329. data/spec/png_spec.rb +0 -240
  330. data/spec/reference_spec.rb +0 -82
  331. data/spec/repeater_spec.rb +0 -158
  332. data/spec/security_spec.rb +0 -158
  333. data/spec/snapshot_spec.rb +0 -186
  334. data/spec/soft_mask_spec.rb +0 -117
  335. data/spec/span_spec.rb +0 -44
  336. data/spec/stamp_spec.rb +0 -158
  337. data/spec/stream_spec.rb +0 -58
  338. data/spec/stroke_styles_spec.rb +0 -211
  339. data/spec/table/span_dummy_spec.rb +0 -17
  340. data/spec/table_spec.rb +0 -1355
  341. data/spec/template_spec.rb +0 -351
  342. data/spec/text_at_spec.rb +0 -130
  343. data/spec/text_box_spec.rb +0 -1030
  344. data/spec/text_rendering_mode_spec.rb +0 -45
  345. data/spec/text_spacing_spec.rb +0 -93
  346. data/spec/text_spec.rb +0 -425
  347. data/spec/text_with_inline_formatting_spec.rb +0 -35
  348. data/spec/transparency_spec.rb +0 -89
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: ad2fdbe5f0c7d9075d0a6467217a996304aa4983
4
- data.tar.gz: 6db5219bdb341f2c8d36c3cc0aca48720adbdccc
2
+ SHA256:
3
+ metadata.gz: d64c2da1e4be48e40f4fa6fa4de35e04c75debf0119e8c59b3fba9d944c112db
4
+ data.tar.gz: 393bbdd1a5df657d5c6190d4bd10ecd7353522e714b2f60c8d9c5f70e5bc1ce9
5
5
  SHA512:
6
- metadata.gz: c2795eaa023f044fdf99b91f79a4e56f181c8dcb13fd73112dcf181156234230117e17221521634c728e60c92a7f05a607f16cec47cd72eff9a77995e91f750f
7
- data.tar.gz: cdf2c886e7bea9946289a11fa1f33c4574884ca65d2eebbaec6967016bc31aee008a9048fccecb73756a4950a6b4e686c838ddbf5e3c3c258bd1dd2ed6fea379
6
+ metadata.gz: c4980639ca24796d577be790ed0f6fa85c985f1a6eb147e4c5db1df261c5d50afe8a466f06b65588b71a897e22e8d2b7b01daceed1714f6164124057154d2d28
7
+ data.tar.gz: e0fd560d4a80f2827736d599266bcb2e2fe19abedcde639520fba8bd19a2f12fe2cf0e8a60a91b87dbac4336d25c680f94b2341e5f9ce3d6d24f2e65f24e24a3
checksums.yaml.gz.sig ADDED
Binary file
data/.yardopts ADDED
@@ -0,0 +1,10 @@
1
+ --charset UTF-8
2
+ --main README.md
3
+ --title 'Prawn Documentation'
4
+ --no-private
5
+ -
6
+ CONTRIBUTING.md
7
+ COPYING
8
+ LICENSE
9
+ README.md
10
+ CHANGELOG.md
data/GPLv2 CHANGED
@@ -1,12 +1,12 @@
1
- GNU GENERAL PUBLIC LICENSE
2
- Version 2, June 1991
1
+ GNU GENERAL PUBLIC LICENSE
2
+ Version 2, June 1991
3
3
 
4
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
5
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
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
- Preamble
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 Library General Public License instead.) You can apply it to
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
- GNU GENERAL PUBLIC LICENSE
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
- NO WARRANTY
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
- END OF TERMS AND CONDITIONS
281
-
282
- How to Apply These Terms to Your New Programs
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
- along with this program; if not, write to the Free Software
308
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
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 name of author
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 Library General
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
- source "https://rubygems.org"
1
+ # frozen_string_literal: true
2
2
 
3
- gem "ttfunk", "~>1.0.3"
4
- gem "pdf-reader", "~> 1.2"
5
- gem "ruby-rc4"
6
- gem "afm"
3
+ source 'https://rubygems.org'
7
4
 
8
- group :development do
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
- require "bundler"
2
- Bundler.setup
1
+ # frozen_string_literal: true
3
2
 
4
- require 'rake'
5
- require 'rspec/core/rake_task'
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 :default => [:spec]
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 "Building manual..."
38
- require File.expand_path(File.join(File.dirname(__FILE__),
39
- %w[manual manual manual]))
40
- puts "The Prawn manual is available at manual.pdf. Happy Prawning!"
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
- spec = Gem::Specification.load "prawn.gemspec"
44
- Gem::PackageTask.new(spec) do |pkg|
45
- pkg.need_zip = true
46
- pkg.need_tar = true
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
- # encoding: utf-8
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(pt, *args, &block)
158
+ def bounding_box(point, *args, &block)
158
159
  init_bounding_box(block) do |parent_box|
159
- pt = map_to_absolute(pt)
160
- @bounding_box = BoundingBox.new(self, parent_box, pt, *args)
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, :hold_position => true) do |_|
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(self, nil, [0,page.dimensions[3]],
175
- :width => page.dimensions[2],
176
- :height => page.dimensions[3]
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={}, &init_block)
187
+ def init_bounding_box(user_block, options = {})
184
188
  unless user_block
185
189
  raise ArgumentError,
186
- "bounding boxes require a block to be drawn within the box"
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
- init_block.call(parent_box)
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, @bounding_box = @bounding_box, parent_box
214
+ created_box = @bounding_box
215
+ @bounding_box = parent_box
200
216
 
201
- return created_box
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
- def initialize(document, parent, point, options={}) #:nodoc:
232
+ # @private
233
+ def initialize(document, parent, point, options = {})
212
234
  unless options[:width]
213
- raise ArgumentError, "BoundingBox needs the :width option to be set"
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, @height = options[:width], options[:height]
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
- def indent(left_padding, right_padding = 0, &block)
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 width)
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
- @stretched_height = [(absolute_top - @document.y),
440
- @stretched_height.to_f].max
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
- alias_method :update_height, :height
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 "Can't find reference bounds: my parent is unset" unless @parent
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("@parent", if BoundingBox === @parent
492
- @parent.deep_copy
493
- end)
494
- copy.instance_variable_set("@document", nil)
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("@document", document)
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
- # encoding: utf-8
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 and :spacer = font_size
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={}, &init_block)
39
+ def init_column_box(user_block, options = {})
33
40
  parent_box = @bounding_box
34
41
 
35
- init_block.call(parent_box)
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 = options[:spacer] || @document.font_size
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 0 == @current_column
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