prawn 1.1.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 (309) hide show
  1. checksums.yaml +5 -5
  2. checksums.yaml.gz.sig +0 -0
  3. data/.yardopts +1 -0
  4. data/GPLv2 +20 -21
  5. data/Gemfile +3 -9
  6. data/Rakefile +9 -40
  7. data/lib/prawn/document/bounding_box.rb +54 -40
  8. data/lib/prawn/document/column_box.rb +8 -10
  9. data/lib/prawn/document/internals.rb +39 -146
  10. data/lib/prawn/document/span.rb +23 -17
  11. data/lib/prawn/document.rb +217 -182
  12. data/lib/prawn/encoding.rb +69 -101
  13. data/lib/prawn/errors.rb +47 -43
  14. data/lib/prawn/font.rb +124 -104
  15. data/lib/prawn/font_metric_cache.rb +23 -21
  16. data/lib/prawn/fonts/afm.rb +292 -0
  17. data/lib/prawn/{font → fonts}/dfont.rb +5 -12
  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 +140 -88
  21. data/lib/prawn/graphics/blend_mode.rb +65 -0
  22. data/lib/prawn/graphics/cap_style.rb +5 -5
  23. data/lib/prawn/graphics/color.rb +46 -44
  24. data/lib/prawn/graphics/dash.rb +27 -11
  25. data/lib/prawn/graphics/join_style.rb +11 -6
  26. data/lib/prawn/graphics/patterns.rb +220 -78
  27. data/lib/prawn/graphics/transformation.rb +20 -12
  28. data/lib/prawn/graphics/transparency.rb +20 -18
  29. data/lib/prawn/graphics.rb +153 -115
  30. data/lib/prawn/grid.rb +93 -50
  31. data/lib/prawn/image_handler.rb +4 -4
  32. data/lib/prawn/images/image.rb +3 -2
  33. data/lib/prawn/images/jpg.rb +31 -24
  34. data/lib/prawn/images/png.rb +101 -68
  35. data/lib/prawn/images.rb +64 -56
  36. data/lib/prawn/measurement_extensions.rb +10 -9
  37. data/lib/prawn/measurements.rb +20 -23
  38. data/lib/prawn/outline.rb +96 -75
  39. data/lib/prawn/repeater.rb +16 -16
  40. data/lib/prawn/security/arcfour.rb +2 -2
  41. data/lib/prawn/security.rb +100 -85
  42. data/lib/prawn/soft_mask.rb +37 -38
  43. data/lib/prawn/stamp.rb +28 -13
  44. data/lib/prawn/text/box.rb +24 -29
  45. data/lib/prawn/text/formatted/arranger.rb +108 -63
  46. data/lib/prawn/text/formatted/box.rb +187 -124
  47. data/lib/prawn/text/formatted/fragment.rb +24 -20
  48. data/lib/prawn/text/formatted/line_wrap.rb +133 -73
  49. data/lib/prawn/text/formatted/parser.rb +147 -127
  50. data/lib/prawn/text/formatted/wrap.rb +48 -35
  51. data/lib/prawn/text/formatted.rb +5 -5
  52. data/lib/prawn/text.rb +103 -68
  53. data/lib/prawn/transformation_stack.rb +44 -0
  54. data/lib/prawn/utilities.rb +10 -22
  55. data/lib/prawn/version.rb +5 -0
  56. data/lib/prawn/view.rb +101 -0
  57. data/lib/prawn.rb +39 -54
  58. data/manual/basic_concepts/adding_pages.rb +6 -7
  59. data/manual/basic_concepts/basic_concepts.rb +34 -25
  60. data/manual/basic_concepts/creation.rb +10 -11
  61. data/manual/basic_concepts/cursor.rb +4 -5
  62. data/manual/basic_concepts/measurement.rb +8 -9
  63. data/manual/basic_concepts/origin.rb +5 -6
  64. data/manual/basic_concepts/other_cursor_helpers.rb +11 -12
  65. data/manual/basic_concepts/view.rb +48 -0
  66. data/manual/bounding_box/bounding_box.rb +30 -28
  67. data/manual/bounding_box/bounds.rb +12 -13
  68. data/manual/bounding_box/canvas.rb +7 -8
  69. data/manual/bounding_box/creation.rb +6 -7
  70. data/manual/bounding_box/indentation.rb +14 -15
  71. data/manual/bounding_box/nesting.rb +25 -18
  72. data/manual/bounding_box/russian_boxes.rb +18 -18
  73. data/manual/bounding_box/stretchy.rb +12 -14
  74. data/manual/contents.rb +28 -22
  75. data/manual/cover.rb +33 -32
  76. data/manual/document_and_page_options/background.rb +15 -13
  77. data/manual/document_and_page_options/document_and_page_options.rb +24 -22
  78. data/manual/document_and_page_options/metadata.rb +20 -18
  79. data/manual/document_and_page_options/page_margins.rb +18 -20
  80. data/manual/document_and_page_options/page_size.rb +13 -13
  81. data/manual/document_and_page_options/print_scaling.rb +18 -15
  82. data/manual/example_helper.rb +5 -4
  83. data/manual/graphics/blend_mode.rb +52 -0
  84. data/manual/graphics/circle_and_ellipse.rb +4 -5
  85. data/manual/graphics/color.rb +7 -9
  86. data/manual/graphics/common_lines.rb +7 -8
  87. data/manual/graphics/fill_and_stroke.rb +5 -6
  88. data/manual/graphics/fill_rules.rb +12 -11
  89. data/manual/graphics/gradients.rb +27 -21
  90. data/manual/graphics/graphics.rb +46 -40
  91. data/manual/graphics/helper.rb +19 -9
  92. data/manual/graphics/line_width.rb +8 -7
  93. data/manual/graphics/lines_and_curves.rb +8 -9
  94. data/manual/graphics/polygon.rb +6 -8
  95. data/manual/graphics/rectangle.rb +4 -5
  96. data/manual/graphics/rotate.rb +6 -9
  97. data/manual/graphics/scale.rb +14 -13
  98. data/manual/graphics/soft_masks.rb +4 -6
  99. data/manual/graphics/stroke_cap.rb +7 -8
  100. data/manual/graphics/stroke_dash.rb +15 -16
  101. data/manual/graphics/stroke_join.rb +6 -7
  102. data/manual/graphics/translate.rb +10 -10
  103. data/manual/graphics/transparency.rb +7 -9
  104. data/manual/how_to_read_this_manual.rb +8 -9
  105. data/manual/images/absolute_position.rb +6 -7
  106. data/manual/images/fit.rb +7 -8
  107. data/manual/images/horizontal.rb +10 -11
  108. data/manual/images/images.rb +28 -27
  109. data/manual/images/plain_image.rb +5 -6
  110. data/manual/images/scale.rb +9 -10
  111. data/manual/images/vertical.rb +16 -14
  112. data/manual/images/width_and_height.rb +10 -11
  113. data/manual/layout/boxes.rb +10 -11
  114. data/manual/layout/content.rb +9 -10
  115. data/manual/layout/layout.rb +17 -18
  116. data/manual/layout/simple_grid.rb +6 -7
  117. data/manual/outline/add_subsection_to.rb +20 -21
  118. data/manual/outline/insert_section_after.rb +15 -16
  119. data/manual/outline/outline.rb +22 -21
  120. data/manual/outline/sections_and_pages.rb +17 -18
  121. data/manual/repeatable_content/alternate_page_numbering.rb +36 -0
  122. data/manual/repeatable_content/page_numbering.rb +17 -16
  123. data/manual/repeatable_content/repeatable_content.rb +27 -23
  124. data/manual/repeatable_content/repeater.rb +15 -16
  125. data/manual/repeatable_content/stamp.rb +14 -15
  126. data/manual/security/encryption.rb +8 -11
  127. data/manual/security/permissions.rb +20 -15
  128. data/manual/security/security.rb +18 -18
  129. data/manual/table.rb +16 -0
  130. data/manual/text/alignment.rb +16 -17
  131. data/manual/text/color.rb +12 -12
  132. data/manual/text/column_box.rb +9 -11
  133. data/manual/text/fallback_fonts.rb +25 -21
  134. data/manual/text/font.rb +11 -12
  135. data/manual/text/font_size.rb +13 -14
  136. data/manual/text/font_style.rb +10 -8
  137. data/manual/text/formatted_callbacks.rb +33 -23
  138. data/manual/text/formatted_text.rb +36 -25
  139. data/manual/text/free_flowing_text.rb +22 -23
  140. data/manual/text/inline.rb +18 -19
  141. data/manual/text/kerning_and_character_spacing.rb +14 -15
  142. data/manual/text/leading.rb +7 -8
  143. data/manual/text/line_wrapping.rb +37 -18
  144. data/manual/text/paragraph_indentation.rb +15 -10
  145. data/manual/text/positioned_text.rb +16 -17
  146. data/manual/text/registering_families.rb +27 -24
  147. data/manual/text/rendering_and_color.rb +9 -10
  148. data/manual/text/right_to_left_text.rb +30 -19
  149. data/manual/text/rotation.rb +33 -24
  150. data/manual/text/single_usage.rb +8 -9
  151. data/manual/text/text.rb +56 -54
  152. data/manual/text/text_box_excess.rb +20 -17
  153. data/manual/text/text_box_extensions.rb +18 -15
  154. data/manual/text/text_box_overflow.rb +24 -17
  155. data/manual/text/utf8.rb +12 -13
  156. data/manual/text/win_ansi_charset.rb +28 -25
  157. data/prawn.gemspec +45 -50
  158. data/spec/extensions/encoding_helpers.rb +3 -3
  159. data/spec/prawn/document/bounding_box_spec.rb +550 -0
  160. data/spec/prawn/document/column_box_spec.rb +75 -0
  161. data/spec/prawn/document/security_spec.rb +176 -0
  162. data/spec/prawn/document_annotations_spec.rb +76 -0
  163. data/spec/prawn/document_destinations_spec.rb +15 -0
  164. data/spec/prawn/document_grid_spec.rb +99 -0
  165. data/spec/prawn/document_reference_spec.rb +27 -0
  166. data/spec/prawn/document_span_spec.rb +44 -0
  167. data/spec/prawn/document_spec.rb +805 -0
  168. data/spec/prawn/font_metric_cache_spec.rb +54 -0
  169. data/spec/prawn/font_spec.rb +544 -0
  170. data/spec/prawn/graphics/blend_mode_spec.rb +63 -0
  171. data/spec/prawn/graphics/transparency_spec.rb +81 -0
  172. data/spec/prawn/graphics_spec.rb +872 -0
  173. data/spec/prawn/graphics_stroke_styles_spec.rb +229 -0
  174. data/spec/prawn/image_handler_spec.rb +53 -0
  175. data/spec/prawn/images/jpg_spec.rb +20 -0
  176. data/spec/prawn/images/png_spec.rb +283 -0
  177. data/spec/prawn/images_spec.rb +229 -0
  178. data/spec/prawn/measurements_extensions_spec.rb +24 -0
  179. data/spec/prawn/outline_spec.rb +512 -0
  180. data/spec/prawn/repeater_spec.rb +166 -0
  181. data/spec/prawn/soft_mask_spec.rb +74 -0
  182. data/spec/prawn/stamp_spec.rb +173 -0
  183. data/spec/prawn/text/box_spec.rb +1110 -0
  184. data/spec/prawn/text/formatted/arranger_spec.rb +466 -0
  185. data/spec/prawn/text/formatted/box_spec.rb +849 -0
  186. data/spec/prawn/text/formatted/fragment_spec.rb +343 -0
  187. data/spec/prawn/text/formatted/line_wrap_spec.rb +495 -0
  188. data/spec/prawn/text/formatted/parser_spec.rb +697 -0
  189. data/spec/prawn/text_draw_text_spec.rb +150 -0
  190. data/spec/prawn/text_rendering_mode_spec.rb +48 -0
  191. data/spec/prawn/text_spacing_spec.rb +95 -0
  192. data/spec/prawn/text_spec.rb +603 -0
  193. data/spec/prawn/text_with_inline_formatting_spec.rb +35 -0
  194. data/spec/prawn/transformation_stack_spec.rb +66 -0
  195. data/spec/prawn/view_spec.rb +63 -0
  196. data/spec/prawn_manual_spec.rb +35 -0
  197. data/spec/spec_helper.rb +19 -25
  198. data.tar.gz.sig +0 -0
  199. metadata +113 -276
  200. metadata.gz.sig +0 -0
  201. data/data/encodings/win_ansi.txt +0 -29
  202. data/data/images/16bit.alpha +0 -0
  203. data/data/images/16bit.color +0 -0
  204. data/data/images/16bit.png +0 -0
  205. data/data/images/arrow.png +0 -0
  206. data/data/images/arrow2.png +0 -0
  207. data/data/images/dice.alpha +0 -0
  208. data/data/images/dice.color +0 -0
  209. data/data/images/dice.png +0 -0
  210. data/data/images/dice_interlaced.png +0 -0
  211. data/data/images/fractal.jpg +0 -0
  212. data/data/images/indexed_color.dat +0 -0
  213. data/data/images/indexed_color.png +0 -0
  214. data/data/images/letterhead.jpg +0 -0
  215. data/data/images/license.md +0 -8
  216. data/data/images/page_white_text.alpha +0 -0
  217. data/data/images/page_white_text.color +0 -0
  218. data/data/images/page_white_text.png +0 -0
  219. data/data/images/pigs.jpg +0 -0
  220. data/data/images/prawn.png +0 -0
  221. data/data/images/ruport.png +0 -0
  222. data/data/images/ruport_data.dat +0 -0
  223. data/data/images/ruport_transparent.png +0 -0
  224. data/data/images/ruport_type0.png +0 -0
  225. data/data/images/stef.jpg +0 -0
  226. data/data/images/tru256.bmp +0 -0
  227. data/data/images/web-links.dat +0 -1
  228. data/data/images/web-links.png +0 -0
  229. data/data/pdfs/complex_template.pdf +0 -0
  230. data/data/pdfs/contains_ttf_font.pdf +0 -0
  231. data/data/pdfs/encrypted.pdf +0 -0
  232. data/data/pdfs/form.pdf +1 -819
  233. data/data/pdfs/hexagon.pdf +0 -61
  234. data/data/pdfs/indirect_reference.pdf +0 -86
  235. data/data/pdfs/multipage_template.pdf +0 -127
  236. data/data/pdfs/nested_pages.pdf +0 -118
  237. data/data/pdfs/page_without_mediabox.pdf +0 -193
  238. data/data/pdfs/resources_as_indirect_object.pdf +0 -83
  239. data/data/pdfs/two_hexagons.pdf +0 -90
  240. data/data/pdfs/version_1_6.pdf +0 -61
  241. data/data/shift_jis_text.txt +0 -1
  242. data/lib/prawn/document/graphics_state.rb +0 -73
  243. data/lib/prawn/font/afm.rb +0 -247
  244. data/lib/prawn/table/cell/image.rb +0 -69
  245. data/lib/prawn/table/cell/in_table.rb +0 -33
  246. data/lib/prawn/table/cell/span_dummy.rb +0 -93
  247. data/lib/prawn/table/cell/subtable.rb +0 -66
  248. data/lib/prawn/table/cell/text.rb +0 -154
  249. data/lib/prawn/table/cell.rb +0 -772
  250. data/lib/prawn/table/cells.rb +0 -255
  251. data/lib/prawn/table/column_width_calculator.rb +0 -182
  252. data/lib/prawn/table.rb +0 -644
  253. data/manual/table/basic_block.rb +0 -53
  254. data/manual/table/before_rendering_page.rb +0 -26
  255. data/manual/table/cell_border_lines.rb +0 -24
  256. data/manual/table/cell_borders_and_bg.rb +0 -31
  257. data/manual/table/cell_dimensions.rb +0 -30
  258. data/manual/table/cell_text.rb +0 -38
  259. data/manual/table/column_widths.rb +0 -30
  260. data/manual/table/content_and_subtables.rb +0 -39
  261. data/manual/table/creation.rb +0 -27
  262. data/manual/table/filtering.rb +0 -36
  263. data/manual/table/flow_and_header.rb +0 -17
  264. data/manual/table/image_cells.rb +0 -33
  265. data/manual/table/position.rb +0 -29
  266. data/manual/table/row_colors.rb +0 -20
  267. data/manual/table/span.rb +0 -30
  268. data/manual/table/style.rb +0 -22
  269. data/manual/table/table.rb +0 -52
  270. data/manual/table/width.rb +0 -27
  271. data/spec/acceptance/png.rb +0 -25
  272. data/spec/annotations_spec.rb +0 -74
  273. data/spec/bounding_box_spec.rb +0 -510
  274. data/spec/cell_spec.rb +0 -629
  275. data/spec/column_box_spec.rb +0 -65
  276. data/spec/destinations_spec.rb +0 -15
  277. data/spec/document_spec.rb +0 -730
  278. data/spec/extensions/mocha.rb +0 -46
  279. data/spec/font_metric_cache_spec.rb +0 -52
  280. data/spec/font_spec.rb +0 -449
  281. data/spec/formatted_text_arranger_spec.rb +0 -421
  282. data/spec/formatted_text_box_spec.rb +0 -639
  283. data/spec/formatted_text_fragment_spec.rb +0 -298
  284. data/spec/graphics_spec.rb +0 -669
  285. data/spec/grid_spec.rb +0 -96
  286. data/spec/image_handler_spec.rb +0 -54
  287. data/spec/images_spec.rb +0 -153
  288. data/spec/inline_formatted_text_parser_spec.rb +0 -564
  289. data/spec/jpg_spec.rb +0 -25
  290. data/spec/line_wrap_spec.rb +0 -344
  291. data/spec/measurement_units_spec.rb +0 -25
  292. data/spec/outline_spec.rb +0 -430
  293. data/spec/png_spec.rb +0 -237
  294. data/spec/reference_spec.rb +0 -25
  295. data/spec/repeater_spec.rb +0 -160
  296. data/spec/security_spec.rb +0 -158
  297. data/spec/soft_mask_spec.rb +0 -79
  298. data/spec/span_spec.rb +0 -44
  299. data/spec/stamp_spec.rb +0 -160
  300. data/spec/stroke_styles_spec.rb +0 -211
  301. data/spec/table/span_dummy_spec.rb +0 -17
  302. data/spec/table_spec.rb +0 -1527
  303. data/spec/text_at_spec.rb +0 -115
  304. data/spec/text_box_spec.rb +0 -1034
  305. data/spec/text_rendering_mode_spec.rb +0 -45
  306. data/spec/text_spacing_spec.rb +0 -93
  307. data/spec/text_spec.rb +0 -437
  308. data/spec/text_with_inline_formatting_spec.rb +0 -35
  309. data/spec/transparency_spec.rb +0 -91
data/manual/text/text.rb CHANGED
@@ -1,73 +1,75 @@
1
- # encoding: utf-8
2
- #
3
- # Examples for text rendering.
4
- #
5
- require File.expand_path(File.join(File.dirname(__FILE__),
6
- %w[.. example_helper]))
1
+ # frozen_string_literal: true
7
2
 
8
- Prawn::ManualBuilder::Example.generate("text.pdf", :page_size => "FOLIO") do
3
+ # Examples for text rendering.
9
4
 
10
- package "text" do |p|
5
+ require '../example_helper'
11
6
 
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 "column_box"
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'
18
15
  end
19
16
 
20
- p.section "Styling" do |s|
21
- s.example "font"
22
- s.example "font_size"
23
- s.example "font_style"
24
- s.example "color"
25
- s.example "alignment"
26
- s.example "leading"
27
- s.example "kerning_and_character_spacing"
28
- s.example "paragraph_indentation"
29
- s.example "rotation"
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'
30
27
  end
31
28
 
32
- p.section "Advanced Styling" do |s|
33
- s.example "inline"
34
- s.example "formatted_text"
35
- s.example "formatted_callbacks"
36
- s.example "rendering_and_color"
37
- s.example "text_box_extensions"
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'
38
35
  end
39
36
 
40
- p.section "External Fonts" do |s|
41
- s.example "single_usage"
42
- s.example "registering_families"
37
+ p.section 'External Fonts' do |s|
38
+ s.example 'single_usage'
39
+ s.example 'registering_families'
43
40
  end
44
41
 
45
- p.section "M17n" do |s|
46
- s.example "utf8"
47
- s.example "line_wrapping"
48
- s.example "right_to_left_text"
49
- s.example "fallback_fonts"
50
- s.example "win_ansi_charset"
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'
51
48
  end
52
49
 
53
50
  p.intro do
54
- 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.
55
56
 
56
- The examples show:")
57
+ The examples show:
58
+ TEXT
57
59
 
58
- list( "Text that flows from page to page automatically starting new pages when necessary",
59
- "How to use text boxes and place them on specific positions",
60
- "What to do when a text box is too small to fit its content",
61
- "Flowing text in columns",
62
- "How to change the text style configuring font, size, alignment and many other settings",
63
- "How to style specific portions of a text with inline styling and formatted text",
64
- "How to define formatted callbacks to reuse common styling definitions",
65
- "How to use the different rendering modes available for the text methods",
66
- "How to create your custom text box extensions",
67
- "How to use external fonts on your pdfs",
68
- "What happens when rendering text in different languages"
69
- )
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
+ )
70
73
  end
71
-
72
74
  end
73
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
15
  Prawn::ManualBuilder::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
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
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
+ )
28
29
 
29
- text_box excess_text,
30
- :width => 300,
31
- :at => [100, y_position - 100]
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,9 +9,8 @@
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
16
  Prawn::ManualBuilder::Example.generate(filename) do
@@ -22,22 +21,26 @@ Prawn::ManualBuilder::Example.generate(filename) do
22
21
  end
23
22
 
24
23
  y_position = cursor - 10
25
- width = 100
26
- height = 100
24
+ width = 100
25
+ height = 100
27
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)
29
+ text_box(
30
+ 'A' * 100,
31
+ at: [0, y_position],
32
+ width: width,
33
+ height: height
34
+ )
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
22
  Prawn::ManualBuilder::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."
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
36
 
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."
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.'
34
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
10
  Prawn::ManualBuilder::Example.generate(filename) do
12
- text "Take this example, a simple Euro sign:"
13
- text "", :size => 32
11
+ text 'Take this example, a simple Euro sign:'
12
+ text '', size: 32
14
13
  move_down 20
15
14
 
16
- text "Seems ok. Now let's try something more complex:"
17
- text "ὕαλον ϕαγεῖν δύναμαι· τοῦτο οὔ με βλάπτει."
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
19
 
20
- text "Looks like the current font (#{font.inspect}) doesn't support those."
21
- text "Let's try them with another font."
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
10
  Prawn::ManualBuilder::Example.generate(filename) do
12
- FONT_SIZE = 9.5
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
data/prawn.gemspec CHANGED
@@ -1,56 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ basedir = __dir__
4
+
5
+ require "#{basedir}/lib/prawn/version"
6
+
1
7
  Gem::Specification.new do |spec|
2
- spec.name = "prawn"
3
- spec.version = File.read(File.expand_path('VERSION', File.dirname(__FILE__))).strip
8
+ spec.name = 'prawn'
9
+ spec.version = Prawn::VERSION
4
10
  spec.platform = Gem::Platform::RUBY
5
- spec.summary = "A fast and nimble PDF generator for Ruby"
6
- spec.files = Dir.glob("{examples,lib,spec,manual}/**/**/*") +
7
- Dir.glob("data/{encodings,images,pdfs}/*") +
8
- Dir.glob("data/fonts/{MustRead.html,*.afm}") +
9
- ["data/shift_jis_text.txt"] +
10
- ["Rakefile", "prawn.gemspec", "Gemfile",
11
- "COPYING", "LICENSE", "GPLv2", "GPLv3",
12
- ".yardopts"]
13
- spec.require_path = "lib"
14
- spec.required_ruby_version = '>= 1.9.3'
15
- spec.required_rubygems_version = ">= 1.3.6"
16
-
17
- spec.test_files = Dir[ "spec/*_spec.rb" ]
18
- spec.authors = ["Gregory Brown","Brad Ediger","Daniel Nelson","Jonathan Greenberg","James Healy"]
19
- spec.email = ["gregory.t.brown@gmail.com","brad@bradediger.com","dnelson@bluejade.com","greenberg@entryway.net","jimmy@deefa.com"]
20
- spec.rubyforge_project = "prawn"
21
- spec.licenses = ['RUBY', 'GPL-2', 'GPL-3']
22
-
23
- spec.add_dependency('ttfunk', '~> 1.2.0')
24
- spec.add_dependency('pdf-core', "~> 0.2.5")
25
-
26
- spec.add_development_dependency('pdf-inspector', '~> 1.1.0')
27
- spec.add_development_dependency('coderay', '~> 1.0.7')
28
- spec.add_development_dependency('yard')
29
- spec.add_development_dependency('rspec', '2.14.1')
30
- spec.add_development_dependency('mocha')
31
- spec.add_development_dependency('rake')
32
- spec.add_development_dependency('simplecov')
33
- spec.add_development_dependency('prawn-manual_builder', ">= 0.1.1")
34
- spec.add_development_dependency('pdf-reader', '~>1.2')
35
- spec.add_development_dependency('rubocop', '0.20.1')
36
-
37
- spec.homepage = "http://prawn.majesticseacreature.com"
11
+ spec.summary = 'A fast and nimble PDF generator for Ruby'
12
+
13
+ spec.cert_chain = ['certs/pointlessone.pem']
14
+ if $PROGRAM_NAME.end_with? 'gem'
15
+ spec.signing_key = File.expand_path('~/.gem/gem-private_key.pem')
16
+ end
17
+
18
+ spec.files = Dir.glob('{examples,lib,spec,manual}/**/**/*') +
19
+ Dir.glob('data/fonts/{MustRead.html,*.afm}') +
20
+ [
21
+ 'Rakefile', 'prawn.gemspec', 'Gemfile',
22
+ 'COPYING', 'LICENSE', 'GPLv2', 'GPLv3',
23
+ '.yardopts'
24
+ ]
25
+ spec.require_path = 'lib'
26
+ spec.required_ruby_version = '>= 2.5'
27
+ spec.required_rubygems_version = '>= 1.3.6'
28
+
29
+ spec.authors = [
30
+ 'Gregory Brown', 'Brad Ediger', 'Daniel Nelson', 'Jonathan Greenberg',
31
+ 'James Healy'
32
+ ]
33
+ spec.email = [
34
+ 'gregory.t.brown@gmail.com', 'brad@bradediger.com', 'dnelson@bluejade.com',
35
+ 'greenberg@entryway.net', 'jimmy@deefa.com'
36
+ ]
37
+ spec.licenses = %w[PRAWN GPL-2.0 GPL-3.0]
38
+
39
+ spec.add_dependency('pdf-core', '~> 0.9.0')
40
+ spec.add_dependency('ttfunk', '~> 1.7')
41
+
42
+ spec.add_development_dependency('pdf-inspector', '>= 1.2.1', '< 2.0.a')
43
+ spec.add_development_dependency('pdf-reader', ['~> 1.4', '>= 1.4.1'])
44
+ spec.add_development_dependency('prawn-dev', '~> 0.1.0')
45
+ spec.add_development_dependency('prawn-manual_builder', '>= 0.3.0')
46
+
47
+ spec.homepage = 'http://prawnpdf.org'
38
48
  spec.description = <<END_DESC
39
49
  Prawn is a fast, tiny, and nimble PDF generator for Ruby
40
- END_DESC
41
- spec.post_install_message = <<END_DESC
42
-
43
- ********************************************
44
-
45
-
46
- A lot has changed recently in Prawn.
47
-
48
- Please read the changelog for details:
49
-
50
- https://github.com/prawnpdf/prawn/wiki/CHANGELOG
51
-
52
-
53
- ********************************************
54
-
55
50
  END_DESC
56
51
  end
@@ -1,11 +1,11 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module EncodingHelpers
4
4
  def win1252_string(str)
5
- str.force_encoding(Encoding::Windows_1252)
5
+ str.dup.force_encoding(Encoding::Windows_1252)
6
6
  end
7
7
 
8
8
  def bin_string(str)
9
- str.force_encoding(Encoding::ASCII_8BIT)
9
+ str.dup.force_encoding(Encoding::ASCII_8BIT)
10
10
  end
11
11
  end