prawn 0.13.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -1,411 +1,8 @@
1
- # encoding: utf-8
2
- #
3
- # Helper for organizing examples
4
- #
1
+ # frozen_string_literal: true
5
2
 
6
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ $LOAD_PATH.unshift File.join(__dir__, '../lib')
7
4
  require 'prawn'
8
- require 'prawn/security'
9
- require 'prawn/layout'
5
+ require 'prawn/manual_builder'
10
6
 
11
- require 'enumerator'
12
-
13
- require File.expand_path(File.join(File.dirname(__FILE__), 'example_file'))
14
- require File.expand_path(File.join(File.dirname(__FILE__), 'example_section'))
15
- require File.expand_path(File.join(File.dirname(__FILE__), 'example_package'))
16
- require File.expand_path(File.join(File.dirname(__FILE__), 'syntax_highlight'))
17
-
18
- Prawn.debug = true
19
-
20
- module Prawn
21
-
22
- # The Prawn::Example class holds all the helper methods used to generate the
23
- # Prawn by example manual.
24
- #
25
- # The overall structure is to have single example files grouped by package
26
- # folders. Each package has a package builder file (with the same name as the
27
- # package folder) that defines the inner structure of subsections and
28
- # examples. The manual is then built by loading all the packages and some
29
- # standalone pages.
30
- #
31
- # To see one of the examples check manual/basic_concepts/cursor.rb
32
- #
33
- # To see one of the package builders check
34
- # manual/basic_concepts/basic_concepts.rb
35
- #
36
- # To see how the manual is built check manual/manual/manual.rb (Yes that's a
37
- # whole load of manuals)
38
- #
39
- class Example < Prawn::Document
40
-
41
- # Values used for the manual design:
42
-
43
- # This is the default value for the margin box
44
- #
45
- BOX_MARGIN = 36
46
-
47
- # Additional indentation to keep the line measure with a reasonable size
48
- #
49
- INNER_MARGIN = 30
50
-
51
- # Vertical Rhythm settings
52
- #
53
- RHYTHM = 10
54
- LEADING = 2
55
-
56
- # Colors
57
- #
58
- BLACK = "000000"
59
- LIGHT_GRAY = "F2F2F2"
60
- GRAY = "DDDDDD"
61
- DARK_GRAY = "333333"
62
- BROWN = "A4441C"
63
- ORANGE = "F28157"
64
- LIGHT_GOLD = "FBFBBE"
65
- DARK_GOLD = "EBE389"
66
- BLUE = "0000D0"
67
-
68
- # Used to generate the url for the example files
69
- #
70
- MANUAL_URL = "http://github.com/prawnpdf/prawn/tree/master/manual"
71
-
72
-
73
- # Loads a package. Used on the manual.
74
- #
75
- def load_package(package)
76
- load_file(package, package)
77
- end
78
-
79
- # Loads a page with outline support. Used on the manual.
80
- #
81
- def load_page(page)
82
- load_file("manual", page)
83
-
84
- outline.define do
85
- section(page.gsub("_", " ").capitalize, :destination => page_number)
86
- end
87
- end
88
-
89
- # Opens a file in a given package and evals the source
90
- #
91
- def load_file(package, file)
92
- start_new_page
93
- example = ExampleFile.new(package, "#{file}.rb")
94
- eval example.generate_block_source
95
- end
96
-
97
-
98
- # Creates a new ExamplePackage object and yields it to a block in order for
99
- # it to be populated with examples, sections and some introduction text.
100
- # Used on the package files.
101
- #
102
- def package(package, &block)
103
- ep = ExamplePackage.new(package)
104
- ep.instance_eval(&block)
105
- ep.render(self)
106
- end
107
-
108
- # Renders an ExamplePackage cover page.
109
- #
110
- # Starts a new page and renders the package introduction text.
111
- #
112
- def render_package_cover(package)
113
- header(package.name)
114
- instance_eval &(package.intro_block)
115
-
116
- outline.define do
117
- section(package.name, :destination => page_number, :closed => true)
118
- end
119
- end
120
-
121
- # Add the ExampleSection to the document outline within the appropriate
122
- # package.
123
- #
124
- def render_section(section)
125
- outline.add_subsection_to(section.package_name) do
126
- outline.section(section.name, :closed => true)
127
- end
128
- end
129
-
130
- # Renders an ExampleFile.
131
- #
132
- # Starts a new page and renders an introductory text, the example source and
133
- # evaluates the example source inline whenever that is appropriate according
134
- # to the ExampleFile directives.
135
- #
136
- def render_example(example)
137
- start_new_page
138
-
139
- outline.add_subsection_to(example.parent_name) do
140
- outline.page(:destination => page_number, :title => example.name)
141
- end
142
-
143
- example_header(example.parent_folder_name, example.filename)
144
-
145
- prose(example.introduction_text)
146
-
147
- code(example.source)
148
-
149
- if example.eval?
150
- eval_code(example.source)
151
- else
152
- source_link(example)
153
- end
154
-
155
- reset_settings
156
- end
157
-
158
- # Render the example header. Used on the example pages of the manual
159
- #
160
- def example_header(package, example)
161
- header_box do
162
- register_fonts
163
- font('DejaVu', :size => 18) do
164
- formatted_text([ { :text => package, :color => BROWN },
165
- { :text => "/", :color => BROWN },
166
- { :text => example, :color => ORANGE }
167
- ], :valign => :center)
168
- end
169
- end
170
- end
171
-
172
- # Register fonts used on the manual
173
- #
174
- def register_fonts
175
- kai_file = "#{Prawn::DATADIR}/fonts/gkai00mp.ttf"
176
- font_families["Kai"] = {
177
- :normal => { :file => kai_file, :font => "Kai" }
178
- }
179
-
180
- dejavu_file = "#{Prawn::DATADIR}/fonts/DejaVuSans.ttf"
181
- font_families["DejaVu"] = {
182
- :normal => { :file => dejavu_file, :font => "DejaVu" }
183
- }
184
- end
185
-
186
- # Render a block of text after processing code tags and URLs to be used with
187
- # the inline_format option.
188
- #
189
- # Used on the introducory text for example pages of the manual and on
190
- # package pages intro
191
- #
192
- def prose(str)
193
-
194
- # Process the <code> tags
195
- str.gsub!(/<code>([^<]+?)<\/code>/,
196
- "<font name='Courier'><b>\\1<\/b><\/font>")
197
-
198
- # Process the links
199
- str.gsub!(/(https?:\/\/\S+)/,
200
- "<color rgb='#{BLUE}'><link href=\"\\1\">\\1</link></color>")
201
-
202
- inner_box do
203
- font("Helvetica", :size => 11) do
204
- str.split(/\n\n+/).each do |paragraph|
205
-
206
- text(paragraph.gsub(/\s+/," "),
207
- :align => :justify,
208
- :inline_format => true,
209
- :leading => LEADING,
210
- :color => DARK_GRAY)
211
-
212
- move_down(RHYTHM)
213
- end
214
- end
215
- end
216
-
217
- move_down(RHYTHM)
218
- end
219
-
220
- # Render a code block. Used on the example pages of the manual
221
- #
222
- def code(str)
223
- pre_text = str.gsub(' ', Prawn::Text::NBSP)
224
- pre_text = ::CodeRay.scan(pre_text, :ruby).to_prawn
225
-
226
- font('Courier', :size => 9.5) do
227
- colored_box(pre_text, :fill_color => DARK_GRAY)
228
- end
229
- end
230
-
231
- # Renders a dashed line and evaluates the code inline
232
- #
233
- def eval_code(source)
234
- move_down(RHYTHM)
235
-
236
- dash(3)
237
- stroke_color(BROWN)
238
- stroke_horizontal_line(-BOX_MARGIN, bounds.width + BOX_MARGIN)
239
- stroke_color(BLACK)
240
- undash
241
-
242
- move_down(RHYTHM*3)
243
- begin
244
- eval(source)
245
- rescue => e
246
- puts "Error evaluating example: #{e.message}"
247
- puts
248
- puts "---- Source: ----"
249
- puts source
250
- end
251
- end
252
-
253
- # Renders a box with the link for the example file
254
- #
255
- def source_link(example)
256
- url = "#{MANUAL_URL}/#{example.parent_folder_name}/#{example.filename}"
257
-
258
- reason = [{ :text => "This code snippet was not evaluated inline. " +
259
- "You may see its output by running the " +
260
- "example file located here:\n",
261
- :color => DARK_GRAY },
262
-
263
- { :text => url,
264
- :color => BLUE,
265
- :link => url}
266
- ]
267
-
268
- font('Helvetica', :size => 9) do
269
- colored_box(reason,
270
- :fill_color => LIGHT_GOLD,
271
- :stroke_color => DARK_GOLD,
272
- :leading => LEADING*3)
273
- end
274
- end
275
-
276
- # Render a page header. Used on the manual lone pages and package
277
- # introductory pages
278
- #
279
- def header(str)
280
- header_box do
281
- register_fonts
282
- font('DejaVu', :size => 24) do
283
- text(str, :color => BROWN, :valign => :center)
284
- end
285
- end
286
- end
287
-
288
- # Render the arguments as a bulleted list. Used on the manual package
289
- # introductory pages
290
- #
291
- def list(*items)
292
- move_up(RHYTHM)
293
-
294
- inner_box do
295
- font("Helvetica", :size => 11) do
296
- items.each do |li|
297
- float { text("•", :color => DARK_GRAY) }
298
- indent(RHYTHM) do
299
- text(li.gsub(/\s+/," "),
300
- :inline_format => true,
301
- :color => DARK_GRAY,
302
- :leading => LEADING)
303
- end
304
-
305
- move_down(RHYTHM)
306
- end
307
- end
308
- end
309
- end
310
-
311
- # Renders the page-wide headers
312
- #
313
- def header_box(&block)
314
- bounding_box([-bounds.absolute_left, cursor + BOX_MARGIN],
315
- :width => bounds.absolute_left + bounds.absolute_right,
316
- :height => BOX_MARGIN*2 + RHYTHM*2) do
317
-
318
- fill_color LIGHT_GRAY
319
- fill_rectangle([bounds.left, bounds.top],
320
- bounds.right,
321
- bounds.top - bounds.bottom)
322
- fill_color BLACK
323
-
324
- indent(BOX_MARGIN + INNER_MARGIN, &block)
325
- end
326
-
327
- stroke_color GRAY
328
- stroke_horizontal_line(-BOX_MARGIN, bounds.width + BOX_MARGIN, :at => cursor)
329
- stroke_color BLACK
330
-
331
- move_down(RHYTHM*3)
332
- end
333
-
334
- # Renders a Bounding Box for the inner margin
335
- #
336
- def inner_box(&block)
337
- bounding_box([INNER_MARGIN, cursor],
338
- :width => bounds.width - INNER_MARGIN*2,
339
- &block)
340
- end
341
-
342
- # Renders a Bounding Box with some background color and the formatted text
343
- # inside it
344
- #
345
- def colored_box(box_text, options={})
346
- options = { :fill_color => DARK_GRAY,
347
- :stroke_color => nil,
348
- :text_color => LIGHT_GRAY,
349
- :leading => LEADING
350
- }.merge(options)
351
-
352
- register_fonts
353
- text_options = { :leading => options[:leading],
354
- :fallback_fonts => ["DejaVu", "Kai"]
355
- }
356
-
357
- box_height = height_of_formatted(box_text, text_options)
358
-
359
- bounding_box([INNER_MARGIN + RHYTHM, cursor],
360
- :width => bounds.width - (INNER_MARGIN+RHYTHM)*2) do
361
-
362
- fill_color options[:fill_color]
363
- stroke_color options[:stroke_color] || options[:fill_color]
364
- fill_and_stroke_rounded_rectangle(
365
- [bounds.left - RHYTHM, cursor],
366
- bounds.left + bounds.right + RHYTHM*2,
367
- box_height + RHYTHM*2,
368
- 5
369
- )
370
- fill_color BLACK
371
- stroke_color BLACK
372
-
373
- pad(RHYTHM) do
374
- formatted_text(box_text, text_options)
375
- end
376
- end
377
-
378
- move_down(RHYTHM*2)
379
- end
380
-
381
- # Draws X and Y axis rulers beginning at the margin box origin. Used on
382
- # examples.
383
- #
384
- def stroke_axis(options={})
385
- super({:height => (cursor - 20).to_i}.merge(options))
386
- end
387
-
388
- # Reset some of the Prawn settings including graphics and text to their
389
- # defaults.
390
- #
391
- # Used after rendering examples so that each new example starts with a clean
392
- # slate.
393
- #
394
- def reset_settings
395
-
396
- # Text settings
397
- font("Helvetica", :size => 12)
398
- default_leading 0
399
- self.text_direction = :ltr
400
-
401
- # Graphics settings
402
- self.line_width = 1
403
- self.cap_style = :butt
404
- self.join_style = :miter
405
- undash
406
- fill_color BLACK
407
- stroke_color BLACK
408
- end
409
-
410
- end
411
- end
7
+ Prawn::ManualBuilder.manual_dir = File.dirname(__FILE__)
8
+ Prawn::Fonts::AFM.hide_m17n_warning = true
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Blend modes can be used to change the way two layers (images, graphics,
4
+ # text, etc.) are blended together. The <code>blend_mode</code> method
5
+ # accepts a single blend mode or an array of blend modes. PDF viewers should
6
+ # blend the layers based on the first recognized blend mode.
7
+ #
8
+ # Valid blend modes in v1.4 of the PDF spec include :Normal, :Multiply, :Screen,
9
+ # :Overlay, :Darken, :Lighten, :ColorDodge, :ColorBurn, :HardLight, :SoftLight,
10
+ # :Difference, :Exclusion, :Hue, :Saturation, :Color, and :Luminosity.
11
+
12
+ require_relative '../example_helper'
13
+
14
+ filename = File.basename(__FILE__).gsub('.rb', '.pdf')
15
+ Prawn::ManualBuilder::Example.generate(filename) do
16
+ start_new_page
17
+
18
+ # https://commons.wikimedia.org/wiki/File:Blend_modes_2.-bottom-layer.jpg#/media/File:Blend_modes_2.-bottom-layer.jpg
19
+ bottom_layer = "#{Prawn::DATADIR}/images/blend_modes_bottom_layer.jpg"
20
+
21
+ # https://commons.wikimedia.org/wiki/File:Blend_modes_1.-top-layer.jpg#/media/File:Blend_modes_1.-top-layer.jpg
22
+ top_layer = "#{Prawn::DATADIR}/images/blend_modes_top_layer.jpg"
23
+
24
+ blend_modes = %i[
25
+ Normal Multiply Screen Overlay Darken Lighten ColorDodge
26
+ ColorBurn HardLight SoftLight Difference Exclusion Hue
27
+ Saturation Color Luminosity
28
+ ]
29
+ blend_modes.each_with_index do |blend_mode, index|
30
+ x = index % 4 * 135
31
+ y = cursor - (index / 4 * 200)
32
+
33
+ image bottom_layer, at: [x, y], fit: [125, 125]
34
+ blend_mode(blend_mode) do
35
+ image top_layer, at: [x, y], fit: [125, 125]
36
+ end
37
+
38
+ y -= 130
39
+
40
+ fill_color '009ddc'
41
+ fill_rectangle [x, y], 75, 25
42
+ blend_mode(blend_mode) do
43
+ fill_color 'fdb827'
44
+ fill_rectangle [x + 50, y], 75, 25
45
+ end
46
+
47
+ y -= 30
48
+
49
+ fill_color '000000'
50
+ text_box blend_mode.to_s, at: [x, y]
51
+ end
52
+ end
@@ -1,22 +1,21 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # To define a <code>circle</code> all you need is the center point and the
4
4
  # radius.
5
5
  #
6
6
  # To define an <code>ellipse</code> you provide the center point and two radii
7
7
  # (or axes) values. If the second radius value is ommitted, both radii will be
8
8
  # equal and you will end up drawing a circle.
9
- #
10
- require File.expand_path(File.join(File.dirname(__FILE__),
11
- %w[.. example_helper]))
9
+
10
+ require_relative '../example_helper'
12
11
 
13
12
  filename = File.basename(__FILE__).gsub('.rb', '.pdf')
14
- Prawn::Example.generate(filename) do
13
+ Prawn::ManualBuilder::Example.generate(filename) do
15
14
  stroke_axis
16
-
15
+
17
16
  stroke_circle [100, 300], 100
18
-
17
+
19
18
  fill_ellipse [200, 100], 100, 50
20
-
19
+
21
20
  fill_ellipse [400, 100], 50
22
21
  end
@@ -1,24 +1,22 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # We can change the stroke and fill colors providing an HTML rgb 6 digit color
4
4
  # code string ("AB1234") or 4 values for CMYK.
5
- #
6
- require File.expand_path(File.join(File.dirname(__FILE__),
7
- %w[.. example_helper]))
5
+
6
+ require_relative '../example_helper'
8
7
 
9
8
  filename = File.basename(__FILE__).gsub('.rb', '.pdf')
10
- Prawn::Example.generate(filename) do
9
+ Prawn::ManualBuilder::Example.generate(filename) do
11
10
  stroke_axis
12
-
13
- # Fill with Yellow using RGB
14
- fill_color "FFFFCC"
15
- fill_polygon [50, 150], [150, 200], [250, 150],
16
- [250, 50], [150, 0], [50, 50]
17
-
11
+
12
+ # Fill with Yellow using RGB (Unlike css, there is no leading #)
13
+ fill_color 'FFFFCC'
14
+ fill_polygon [50, 150], [150, 200], [250, 150], [250, 50], [150, 0], [50, 50]
15
+
18
16
  # Stroke with Purple using CMYK
19
17
  stroke_color 50, 100, 0, 0
20
18
  stroke_rectangle [300, 300], 200, 100
21
-
19
+
22
20
  # Both together
23
21
  fill_and_stroke_circle [400, 100], 50
24
22
  end
@@ -1,5 +1,5 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # Prawn provides helpers for drawing some commonly used lines:
4
4
  #
5
5
  # <code>vertical_line</code> and <code>horizontal_line</code> do just what their
@@ -8,21 +8,22 @@
8
8
  #
9
9
  # <code>horizontal_rule</code> draws a horizontal line on the current bounding
10
10
  # box from border to border, using the current y position.
11
- #
12
- require File.expand_path(File.join(File.dirname(__FILE__),
13
- %w[.. example_helper]))
11
+
12
+ require_relative '../example_helper'
14
13
 
15
14
  filename = File.basename(__FILE__).gsub('.rb', '.pdf')
16
- Prawn::Example.generate(filename) do
15
+ Prawn::ManualBuilder::Example.generate(filename) do
17
16
  stroke_axis
18
-
17
+
18
+ stroke_color 'ff0000'
19
+
19
20
  stroke do
20
21
  # just lower the current y position
21
- move_down 50
22
+ move_down 50
22
23
  horizontal_rule
23
-
24
- vertical_line 100, 300, :at => 50
25
-
26
- horizontal_line 200, 500, :at => 150
24
+
25
+ vertical_line 100, 300, at: 50
26
+
27
+ horizontal_line 200, 500, at: 150
27
28
  end
28
29
  end
@@ -1,5 +1,5 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # There are two drawing primitives in Prawn: <code>fill</code> and
4
4
  # <code>stroke</code>.
5
5
  #
@@ -17,25 +17,24 @@
17
17
  # Most of the methods which define drawing paths have methods of the same name
18
18
  # starting with stroke_ and fill_ which create the drawing path and then stroke
19
19
  # or fill it.
20
- #
21
- require File.expand_path(File.join(File.dirname(__FILE__),
22
- %w[.. example_helper]))
20
+
21
+ require_relative '../example_helper'
23
22
 
24
23
  filename = File.basename(__FILE__).gsub('.rb', '.pdf')
25
- Prawn::Example.generate(filename) do
24
+ Prawn::ManualBuilder::Example.generate(filename) do
26
25
  stroke_axis
27
-
26
+
28
27
  # No block
29
28
  line [0, 200], [100, 150]
30
29
  stroke
31
-
30
+
32
31
  rectangle [0, 100], 100, 100
33
32
  fill
34
-
33
+
35
34
  # With block
36
35
  stroke { line [200, 200], [300, 150] }
37
- fill { rectangle [200, 100], 100, 100 }
38
-
36
+ fill { rectangle [200, 100], 100, 100 }
37
+
39
38
  # Method hook
40
39
  stroke_line [400, 200], [500, 150]
41
40
  fill_rectangle [400, 100], 100, 100
@@ -1,5 +1,5 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # Prawn's fill operators (<code>fill</code> and <code>fill_and_stroke</code>
4
4
  # both accept a <code>:fill_rule</code> option. These rules determine which
5
5
  # parts of the page are counted as "inside" vs. "outside" the path. There are
@@ -15,23 +15,24 @@
15
15
  #
16
16
  # The differences between the fill rules only come into play with complex
17
17
  # paths; they are identical for simple shapes.
18
- #
19
- require File.expand_path(File.join(File.dirname(__FILE__),
20
- %w[.. example_helper]))
18
+
19
+ require_relative '../example_helper'
21
20
 
22
21
  filename = File.basename(__FILE__).gsub('.rb', '.pdf')
23
- Prawn::Example.generate(filename) do
22
+ Prawn::ManualBuilder::Example.generate(filename) do
24
23
  pentagram = [[181, 95], [0, 36], [111, 190], [111, 0], [0, 154]]
25
24
 
26
25
  stroke_color 'ff0000'
27
26
  line_width 2
28
27
 
29
- text_box "Nonzero Winding Number", :at => [50, 215], :width => 170,
30
- :align => :center
31
- polygon(*pentagram.map { |x, y| [x+50, y] })
28
+ text_box 'Nonzero Winding Number',
29
+ at: [50, 215],
30
+ width: 170,
31
+ align: :center
32
+ polygon(*pentagram.map { |x, y| [x + 50, y] })
32
33
  fill_and_stroke
33
34
 
34
- text_box "Even-Odd", :at => [330, 215], :width => 170, :align => :center
35
- polygon(*pentagram.map { |x, y| [x+330, y] })
36
- fill_and_stroke(:fill_rule => :even_odd)
35
+ text_box 'Even-Odd', at: [330, 215], width: 170, align: :center
36
+ polygon(*pentagram.map { |x, y| [x + 330, y] })
37
+ fill_and_stroke(fill_rule: :even_odd)
37
38
  end