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,5 +1,5 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # Rotating text is best avoided on free flowing text, so this example
4
4
  # will only use the <code>text_box</code> method as we can have much more
5
5
  # control over its output.
@@ -7,37 +7,46 @@
7
7
  # To rotate text all we need to do is use the <code>:rotate</code> option
8
8
  # passing an angle in degrees and an optional <code>:rotate_around</code> to
9
9
  # indicate the origin of the rotation (the default is <code>:upper_left</code>).
10
- #
11
- require File.expand_path(File.join(File.dirname(__FILE__),
12
- %w[.. example_helper]))
10
+
11
+ require_relative '../example_helper'
13
12
 
14
13
  filename = File.basename(__FILE__).gsub('.rb', '.pdf')
15
- Prawn::Example.generate(filename) do
16
- width = 100
14
+ Prawn::ManualBuilder::Example.generate(filename) do
15
+ width = 100
17
16
  height = 60
18
- angle = 30
19
- x = 200
20
- y = cursor - 30
17
+ angle = 30
18
+ x = 200
19
+ y = cursor - 30
21
20
 
22
21
  stroke_rectangle [0, y], width, height
23
- text_box("This text was not rotated",
24
- :at => [0, y], :width => width, :height => height)
25
-
22
+ text_box(
23
+ 'This text was not rotated',
24
+ at: [0, y],
25
+ width: width,
26
+ height: height
27
+ )
28
+
26
29
  stroke_rectangle [0, y - 100], width, height
27
- text_box("This text was rotated around the center",
28
- :at => [0, y - 100], :width => width, :height => height,
29
- :rotate => angle, :rotate_around => :center)
30
-
31
- [:lower_left, :upper_left,
32
- :lower_right, :upper_right].each_with_index do |corner, index|
33
-
34
- y = y - 100 if index == 2
30
+ text_box(
31
+ 'This text was rotated around the center',
32
+ at: [0, y - 100],
33
+ width: width,
34
+ height: height,
35
+ rotate: angle,
36
+ rotate_around: :center
37
+ )
38
+
39
+ %i[lower_left upper_left lower_right upper_right]
40
+ .each_with_index do |corner, index|
41
+ y -= 100 if index == 2
35
42
  stroke_rectangle [x + (index % 2) * 200, y], width, height
36
- text_box("This text was rotated around the #{corner} corner.",
37
- :at => [x + (index % 2) * 200, y],
38
- :width => width,
39
- :height => height,
40
- :rotate => angle,
41
- :rotate_around => corner)
43
+ text_box(
44
+ "This text was rotated around the #{corner} corner.",
45
+ at: [x + (index % 2) * 200, y],
46
+ width: width,
47
+ height: height,
48
+ rotate: angle,
49
+ rotate_around: corner
50
+ )
42
51
  end
43
52
  end
@@ -1,5 +1,5 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # The PDF format has some built-in font support. If you want to use other fonts
4
4
  # in Prawn you need to embed the font file.
5
5
  #
@@ -12,26 +12,25 @@
12
12
  # times, providing the path each time it is used becomes cumbersome. The example
13
13
  # on the next page shows a better way to deal with fonts which are used several
14
14
  # times in a document.
15
- #
16
- require File.expand_path(File.join(File.dirname(__FILE__),
17
- %w[.. example_helper]))
15
+
16
+ require_relative '../example_helper'
18
17
 
19
18
  filename = File.basename(__FILE__).gsub('.rb', '.pdf')
20
- Prawn::Example.generate(filename) do
19
+ Prawn::ManualBuilder::Example.generate(filename) do
21
20
  # Using a TTF font file
22
- font("#{Prawn::DATADIR}/fonts/Chalkboard.ttf") do
23
- text "Written with the Chalkboard TTF font."
21
+ font("#{Prawn::DATADIR}/fonts/DejaVuSans.ttf") do
22
+ text 'Written with the DejaVu Sans TTF font.'
24
23
  end
25
24
  move_down 20
26
-
27
- text "Written with the default font."
25
+
26
+ text 'Written with the default font.'
28
27
  move_down 20
29
-
28
+
30
29
  # Using an DFONT font file
31
- font("#{Prawn::DATADIR}/fonts/Action Man.dfont") do
32
- text "Written with the Action Man DFONT font"
30
+ font("#{Prawn::DATADIR}/fonts/Panic+Sans.dfont") do
31
+ text 'Written with the Panic Sans DFONT font'
33
32
  end
34
33
  move_down 20
35
34
 
36
- text "Written with the default font once more."
35
+ text 'Written with the default font once more.'
37
36
  end
data/manual/text/text.rb CHANGED
@@ -1,75 +1,75 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # Examples for text rendering.
4
- #
5
- require File.expand_path(File.join(File.dirname(__FILE__),
6
- %w[.. example_helper]))
7
4
 
8
- Prawn::Example.generate("text.pdf", :page_size => "FOLIO") do
9
-
10
- package "text" do |p|
11
-
12
- p.section "Basics" do |s|
13
- s.example "free_flowing_text"
14
- s.example "positioned_text"
15
- s.example "text_box_overflow"
16
- s.example "text_box_excess"
17
- s.example "group"
18
- s.example "column_box"
5
+ require '../example_helper'
6
+
7
+ Prawn::ManualBuilder::Example.generate('text.pdf', page_size: 'FOLIO') do
8
+ package 'text' do |p|
9
+ p.section 'Basics' do |s|
10
+ s.example 'free_flowing_text'
11
+ s.example 'positioned_text'
12
+ s.example 'text_box_overflow'
13
+ s.example 'text_box_excess'
14
+ s.example 'column_box'
19
15
  end
20
-
21
- p.section "Styling" do |s|
22
- s.example "font"
23
- s.example "font_size"
24
- s.example "font_style"
25
- s.example "color"
26
- s.example "alignment"
27
- s.example "leading"
28
- s.example "kerning_and_character_spacing"
29
- s.example "paragraph_indentation"
30
- s.example "rotation"
16
+
17
+ p.section 'Styling' do |s|
18
+ s.example 'font'
19
+ s.example 'font_size'
20
+ s.example 'font_style'
21
+ s.example 'color'
22
+ s.example 'alignment'
23
+ s.example 'leading'
24
+ s.example 'kerning_and_character_spacing'
25
+ s.example 'paragraph_indentation'
26
+ s.example 'rotation'
31
27
  end
32
-
33
- p.section "Advanced Styling" do |s|
34
- s.example "inline"
35
- s.example "formatted_text"
36
- s.example "formatted_callbacks"
37
- s.example "rendering_and_color"
38
- s.example "text_box_extensions"
28
+
29
+ p.section 'Advanced Styling' do |s|
30
+ s.example 'inline'
31
+ s.example 'formatted_text'
32
+ s.example 'formatted_callbacks'
33
+ s.example 'rendering_and_color'
34
+ s.example 'text_box_extensions'
39
35
  end
40
-
41
- p.section "External Fonts" do |s|
42
- s.example "single_usage"
43
- s.example "registering_families"
36
+
37
+ p.section 'External Fonts' do |s|
38
+ s.example 'single_usage'
39
+ s.example 'registering_families'
44
40
  end
45
-
46
- p.section "M17n" do |s|
47
- s.example "utf8"
48
- s.example "line_wrapping"
49
- s.example "right_to_left_text"
50
- s.example "fallback_fonts"
51
- s.example "win_ansi_charset"
41
+
42
+ p.section 'Multilingualization' do |s|
43
+ s.example 'utf8'
44
+ s.example 'line_wrapping'
45
+ s.example 'right_to_left_text'
46
+ s.example 'fallback_fonts'
47
+ s.example 'win_ansi_charset'
52
48
  end
53
-
49
+
54
50
  p.intro do
55
- prose("This is probably the feature people will use the most. There is no shortage of options when it comes to text. You'll be hard pressed to find a use case that is not covered by one of the text methods and configurable options.
51
+ prose <<-TEXT
52
+ This is probably the feature people will use the most. There is no
53
+ shortage of options when it comes to text. You'll be hard pressed to
54
+ find a use case that is not covered by one of the text methods and
55
+ configurable options.
56
56
 
57
- The examples show:")
57
+ The examples show:
58
+ TEXT
58
59
 
59
- list( "Text that flows from page to page automatically starting new pages when necessary",
60
- "How to use text boxes and place them on specific positions",
61
- "What to do when a text box is too small to fit its content",
62
- "How to proceed when you want to prevent paragraphs from splitting between pages",
63
- "Flowing text in columns",
64
- "How to change the text style configuring font, size, alignment and many other settings",
65
- "How to style specific portions of a text with inline styling and formatted text",
66
- "How to define formatted callbacks to reuse common styling definitions",
67
- "How to use the different rendering modes available for the text methods",
68
- "How to create your custom text box extensions",
69
- "How to use external fonts on your pdfs",
70
- "What happens when rendering text in different languages"
71
- )
60
+ list(
61
+ 'Text that flows from page to page automatically starting new pages when necessary',
62
+ 'How to use text boxes and place them on specific positions',
63
+ 'What to do when a text box is too small to fit its content',
64
+ 'Flowing text in columns',
65
+ 'How to change the text style configuring font, size, alignment and many other settings',
66
+ 'How to style specific portions of a text with inline styling and formatted text',
67
+ 'How to define formatted callbacks to reuse common styling definitions',
68
+ 'How to use the different rendering modes available for the text methods',
69
+ 'How to create your custom text box extensions',
70
+ 'How to use external fonts on your pdfs',
71
+ 'What happens when rendering text in different languages'
72
+ )
72
73
  end
73
-
74
74
  end
75
75
  end
@@ -1,5 +1,5 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # Whenever the <code>text_box</code> method truncates text, this truncated bit
4
4
  # is not lost, it is the method return value and we can take advantage of that.
5
5
  #
@@ -8,25 +8,28 @@
8
8
  # This example renders as much of the text as will fit in a larger font inside
9
9
  # one text_box and then proceeds to render the remaining text in the default
10
10
  # size in a second text_box.
11
- #
12
- require File.expand_path(File.join(File.dirname(__FILE__),
13
- %w[.. example_helper]))
11
+
12
+ require '../example_helper'
14
13
 
15
14
  filename = File.basename(__FILE__).gsub('.rb', '.pdf')
16
- Prawn::Example.generate(filename) do
17
- string = "This is the beginning of the text. It will be cut somewhere and " +
18
- "the rest of the text will procede to be rendered this time by " +
19
- "calling another method." + " . " * 50
15
+ Prawn::ManualBuilder::Example.generate(filename) do
16
+ string = 'This is the beginning of the text. It will be cut somewhere and ' \
17
+ 'the rest of the text will procede to be rendered this time by ' \
18
+ 'calling another method.' + ' . ' * 50
20
19
 
21
20
  y_position = cursor - 20
22
- excess_text = text_box string,
23
- :width => 300,
24
- :height => 50,
25
- :overflow => :truncate,
26
- :at => [100, y_position],
27
- :size => 18
28
-
29
- text_box excess_text,
30
- :width => 300,
31
- :at => [100, y_position - 100]
21
+ excess_text = text_box(
22
+ string,
23
+ width: 300,
24
+ height: 50,
25
+ overflow: :truncate,
26
+ at: [100, y_position],
27
+ size: 18
28
+ )
29
+
30
+ text_box(
31
+ excess_text,
32
+ width: 300,
33
+ at: [100, y_position - 100]
34
+ )
32
35
  end
@@ -1,5 +1,5 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # We've already seen one way of using text boxes with the <code>text_box</code>
4
4
  # method. Turns out this method is just a convenience for using the
5
5
  # <code>Prawn::Text::Box</code> class as it creates a new object and call
@@ -9,12 +9,11 @@
9
9
  # effect when we use the <code>text_box</code> method. To add an extension all
10
10
  # we need to do is append the <code>Prawn::Text::Box.extensions</code> array
11
11
  # with a module.
12
- #
13
- require File.expand_path(File.join(File.dirname(__FILE__),
14
- %w[.. example_helper]))
12
+
13
+ require '../example_helper'
15
14
 
16
15
  filename = File.basename(__FILE__).gsub('.rb', '.pdf')
17
- Prawn::Example.generate(filename) do
16
+ Prawn::ManualBuilder::Example.generate(filename) do
18
17
  module TriangleBox
19
18
  def available_width
20
19
  height + 25
@@ -22,22 +21,26 @@ Prawn::Example.generate(filename) do
22
21
  end
23
22
 
24
23
  y_position = cursor - 10
25
- width = 100
26
- height = 100
27
-
24
+ width = 100
25
+ height = 100
26
+
28
27
  Prawn::Text::Box.extensions << TriangleBox
29
28
  stroke_rectangle([0, y_position], width, height)
30
- text_box("A" * 100,
31
- :at => [0, y_position],
32
- :width => width,
33
- :height => height)
34
-
29
+ text_box(
30
+ 'A' * 100,
31
+ at: [0, y_position],
32
+ width: width,
33
+ height: height
34
+ )
35
+
35
36
  Prawn::Text::Formatted::Box.extensions << TriangleBox
36
37
  stroke_rectangle([200, y_position], width, height)
37
- formatted_text_box([:text => "A" * 100, :color => "009900"],
38
- :at => [200, y_position],
39
- :width => width,
40
- :height => height)
38
+ formatted_text_box(
39
+ [{ text: 'A' * 100, color: '009900' }],
40
+ at: [200, y_position],
41
+ width: width,
42
+ height: height
43
+ )
41
44
 
42
45
  # Here we clear the extensions array
43
46
  Prawn::Text::Box.extensions.clear
@@ -1,5 +1,5 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # The <code>text_box</code> method accepts both <code>:width</code> and
4
4
  # <code>:height</code> options. So what happens if the text doesn't fit the box?
5
5
  #
@@ -9,36 +9,43 @@
9
9
  # (the text font size will be shrunk to fit).
10
10
  #
11
11
  # If <code>:shrink_to_fit</code> mode is used with the
12
- # <code>:min_font_size</code> option set. The font size will not be reduced to
12
+ # <code>:min_font_size</code> option set, the font size will not be reduced to
13
13
  # less than the value provided even if it means truncating some text.
14
14
  #
15
- require File.expand_path(File.join(File.dirname(__FILE__),
16
- %w[.. example_helper]))
15
+ # If the <code>:disable_wrap_by_char</code> is set to <code>true</code>
16
+ # then any text wrapping done while using the <code>:shrink_to_fit</code>
17
+ # mode will not break up the middle of words.
18
+
19
+ require_relative '../example_helper'
17
20
 
18
21
  filename = File.basename(__FILE__).gsub('.rb', '.pdf')
19
- Prawn::Example.generate(filename) do
20
- string = "This is the sample text used for the text boxes. See how it " +
21
- "behave with the various overflow options used."
22
+ Prawn::ManualBuilder::Example.generate(filename) do
23
+ string = 'This is the sample text used for the text boxes. See how it ' \
24
+ 'behave with the various overflow options used.'
22
25
 
23
26
  text string
24
-
27
+
25
28
  y_position = cursor - 20
26
- [:truncate, :expand, :shrink_to_fit].each_with_index do |mode, i|
27
- text_box string, :at => [i * 150, y_position],
28
- :width => 100, :height => 50,
29
- :overflow => mode
29
+ %i[truncate expand shrink_to_fit].each_with_index do |mode, i|
30
+ text_box string,
31
+ at: [i * 150, y_position],
32
+ width: 100,
33
+ height: 50,
34
+ overflow: mode
30
35
  end
31
-
32
- string = "If the box is too small for the text, :shrink_to_fit " +
33
- "can render the text in a really small font size."
34
-
36
+
37
+ string = 'If the box is too small for the text, :shrink_to_fit ' \
38
+ 'can render the text in a really small font size.'
39
+
35
40
  move_down 120
36
41
  text string
37
42
  y_position = cursor - 20
38
43
  [nil, 8, 10, 12].each_with_index do |value, index|
39
- text_box string, :at => [index * 150, y_position],
40
- :width => 50, :height => 50,
41
- :overflow => :shrink_to_fit,
42
- :min_font_size => value
44
+ text_box string,
45
+ at: [index * 150, y_position],
46
+ width: 50,
47
+ height: 50,
48
+ overflow: :shrink_to_fit,
49
+ min_font_size: value
43
50
  end
44
51
  end
data/manual/text/utf8.rb CHANGED
@@ -1,28 +1,27 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # Multilingualization isn't much of a problem on Prawn as its default encoding
4
4
  # is UTF-8. The only thing you need to worry about is if the font support the
5
5
  # glyphs of your language.
6
- #
7
- require File.expand_path(File.join(File.dirname(__FILE__),
8
- %w[.. example_helper]))
6
+
7
+ require_relative '../example_helper'
9
8
 
10
9
  filename = File.basename(__FILE__).gsub('.rb', '.pdf')
11
- Prawn::Example.generate(filename) do
12
- text "Take this example, a simple Euro sign:"
13
- text "", :size => 32
10
+ Prawn::ManualBuilder::Example.generate(filename) do
11
+ text 'Take this example, a simple Euro sign:'
12
+ text '', size: 32
14
13
  move_down 20
15
-
16
- text "Seems ok. Now let's try something more complex:"
17
- text "ὕαλον ϕαγεῖν δύναμαι· τοῦτο οὔ με βλάπτει."
14
+
15
+ text 'This works, because € is one of the few ' \
16
+ 'non-ASCII glyphs supported in PDF built-in fonts.'
17
+
18
18
  move_down 20
19
-
20
- text "Looks like the current font (#{font.inspect}) doesn't support those."
21
- text "Let's try them with another font."
19
+
20
+ text 'For full internationalized text support, we need to use external fonts:'
22
21
  move_down 20
23
-
22
+
24
23
  font("#{Prawn::DATADIR}/fonts/DejaVuSans.ttf") do
25
- text "ὕαλον ϕαγεῖν δύναμαι· τοῦτο οὔ με βλάπτει."
26
- text "There you go."
24
+ text 'ὕαλον ϕαγεῖν δύναμαι· τοῦτο οὔ με βλάπτει.'
25
+ text 'There you go.'
27
26
  end
28
27
  end
@@ -1,56 +1,59 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # Prints a list of all of the glyphs that can be rendered by Adobe's built
4
4
  # in fonts, along with their character widths and WinAnsi codes. Be sure
5
5
  # to pass these glyphs as UTF-8, and Prawn will transcode them for you.
6
- #
7
- require File.expand_path(File.join(File.dirname(__FILE__),
8
- %w[.. example_helper]))
6
+
7
+ require_relative '../example_helper'
9
8
 
10
9
  filename = File.basename(__FILE__).gsub('.rb', '.pdf')
11
- Prawn::Example.generate(filename) do
12
- FONT_SIZE = 9.5
10
+ Prawn::ManualBuilder::Example.generate(filename) do
11
+ font_size = 9.5
13
12
 
14
13
  x = 0
15
14
  y = bounds.top
16
15
 
17
- fields = [[20, :right], [8, :left], [12, :center], [30, :right], [8, :left],
18
- [0, :left]]
16
+ fields = [
17
+ [20, :right], [8, :left], [12, :center], [30, :right], [8, :left],
18
+ [0, :left]
19
+ ]
19
20
 
20
- font "Helvetica", :size => FONT_SIZE
21
+ font 'Helvetica', size: font_size
21
22
 
22
- move_down 30
23
- text "(See next page for WinAnsi table)", :align => :center
24
23
  start_new_page
25
24
 
26
25
  Prawn::Encoding::WinAnsi::CHARACTERS.each_with_index do |name, index|
27
- next if name == ".notdef"
28
- y -= FONT_SIZE
26
+ next if name == '.notdef'
27
+
28
+ y -= font_size
29
29
 
30
- if y < FONT_SIZE
31
- y = bounds.top - FONT_SIZE
30
+ if y < font_size
31
+ y = bounds.top - font_size
32
32
  x += 170
33
33
  end
34
34
 
35
- code = "%d." % index
36
- char = index.chr
35
+ code = format('%<index>d.', index: index)
36
+ char = index.chr.force_encoding(::Encoding::Windows_1252)
37
37
 
38
- width = 1000 * width_of(char, :size => FONT_SIZE) / FONT_SIZE
39
- size = "%d" % width
38
+ width = 1000 * width_of(char, size: font_size) / font_size
39
+ size = format('%<width>d', width: width)
40
40
 
41
41
  data = [code, nil, char, size, nil, name]
42
- dx = x
42
+ dx = x
43
43
  fields.zip(data).each do |(total_width, align), field|
44
44
  if field
45
- width = width_of(field, :size => FONT_SIZE)
45
+ width = width_of(field, size: font_size)
46
46
 
47
47
  case align
48
- when :left then offset = 0
49
- when :right then offset = total_width - width
50
- when :center then offset = (total_width - width)/2
48
+ when :left then offset = 0
49
+ when :right then offset = total_width - width
50
+ when :center then offset = (total_width - width) / 2
51
51
  end
52
52
 
53
- text_box(field, :at => [dx + offset, y], :skip_encoding => true)
53
+ text_box(
54
+ field.dup.force_encoding('windows-1252').encode('UTF-8'),
55
+ at: [dx + offset, y]
56
+ )
54
57
  end
55
58
 
56
59
  dx += total_width