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/lib/prawn/outline.rb CHANGED
@@ -1,26 +1,28 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Prawn
4
4
  class Document
5
5
  # @group Stable API
6
6
 
7
- # Lazily instantiates a Prawn::Outline object for document. This is used as point of entry
8
- # to methods to build the outline tree for a document's table of contents.
7
+ # Lazily instantiates a Prawn::Outline object for document. This is used as
8
+ # point of entry to methods to build the outline tree for a document's table
9
+ # of contents.
9
10
  def outline
10
11
  @outline ||= Outline.new(self)
11
12
  end
12
13
  end
13
14
 
14
15
  # The Outline class organizes the outline tree items for the document.
15
- # Note that the prev and parent instance variables are adjusted while navigating
16
- # through the nested blocks. These variables along with the presence or absense
17
- # of blocks are the primary means by which the relations for the various
18
- # OutlineItems and the OutlineRoot are set. Unfortunately, the best way to
19
- # understand how this works is to follow the method calls through a real example.
16
+ # Note that the prev and parent instance variables are adjusted while
17
+ # navigating through the nested blocks. These variables along with the
18
+ # presence or absense of blocks are the primary means by which the relations
19
+ # for the various OutlineItems and the OutlineRoot are set. Unfortunately, the
20
+ # best way to understand how this works is to follow the method calls through
21
+ # a real example.
20
22
  #
21
- # Some ideas for the organization of this class were gleaned from name_tree. In
22
- # particular the way in which the OutlineItems are finally rendered into document
23
- # objects in PdfObject through a hash.
23
+ # Some ideas for the organization of this class were gleaned from name_tree.
24
+ # In particular the way in which the OutlineItems are finally rendered into
25
+ # document objects in PdfObject through a hash.
24
26
  #
25
27
  class Outline
26
28
  # @private
@@ -42,10 +44,11 @@ module Prawn
42
44
 
43
45
  # Defines/Updates an outline for the document.
44
46
  # The outline is an optional nested index that appears on the side of a PDF
45
- # document usually with direct links to pages. The outline DSL is defined by nested
46
- # blocks involving two methods: section and page; see the documentation on those methods
47
- # for their arguments and options. Note that one can also use outline#update
48
- # to add more sections to the end of the outline tree using the same syntax and scope.
47
+ # document usually with direct links to pages. The outline DSL is defined by
48
+ # nested blocks involving two methods: section and page; see the
49
+ # documentation on those methods for their arguments and options. Note that
50
+ # one can also use outline#update to add more sections to the end of the
51
+ # outline tree using the same syntax and scope.
49
52
  #
50
53
  # The syntax is best illustrated with an example:
51
54
  #
@@ -69,28 +72,31 @@ module Prawn
69
72
  # end
70
73
  #
71
74
  def define(&block)
72
- instance_eval(&block) if block
75
+ instance_eval(&block) if block
73
76
  end
74
77
 
75
- alias :update :define
78
+ alias update define
76
79
 
77
80
  # Inserts an outline section to the outline tree (see outline#define).
78
81
  # Although you will probably choose to exclusively use outline#define so
79
- # that your outline tree is contained and easy to manage, this method
80
- # gives you the option to insert sections to the outline tree at any point
81
- # during document generation. This method allows you to add a child subsection
82
- # to any other item at any level in the outline tree.
83
- # Currently the only way to locate the place of entry is with the title for the
84
- # item. If your title names are not unique consider using define_outline.
82
+ # that your outline tree is contained and easy to manage, this method gives
83
+ # you the option to insert sections to the outline tree at any point during
84
+ # document generation. This method allows you to add a child subsection to
85
+ # any other item at any level in the outline tree. Currently the only way
86
+ # to locate the place of entry is with the title for the item. If your title
87
+ # names are not unique consider using define_outline.
85
88
  # The method takes the following arguments:
86
- # title: a string that must match an outline title to add the subsection to
87
- # position: either :first or :last(the default) where the subsection will be placed relative
88
- # to other child elements. If you need to position your subsection in between
89
- # other elements then consider using #insert_section_after
89
+ # title: a string that must match an outline title to add
90
+ # the subsection to
91
+ # position: either :first or :last (the default) where the subsection will
92
+ # be placed relative to other child elements. If you need to position
93
+ # your subsection in between other elements then consider using
94
+ # #insert_section_after
90
95
  # block: uses the same DSL syntax as outline#define, for example:
91
96
  #
92
- # Consider using this method inside of outline.update if you want to have the outline object
93
- # to be scoped as self (see #insert_section_after example).
97
+ # Consider using this method inside of outline.update if you want to have
98
+ # the outline object to be scoped as self (see #insert_section_after
99
+ # example).
94
100
  #
95
101
  # go_to_page 2
96
102
  # start_new_page
@@ -101,8 +107,10 @@ module Prawn
101
107
  #
102
108
  def add_subsection_to(title, position = :last, &block)
103
109
  @parent = items[title]
104
- raise Prawn::Errors::UnknownOutlineTitle,
105
- "\n No outline item with title: '#{title}' exists in the outline tree" unless @parent
110
+ unless @parent
111
+ raise Prawn::Errors::UnknownOutlineTitle,
112
+ "\n No outline item with title: '#{title}' exists in the outline tree"
113
+ end
106
114
  @prev = position == :first ? nil : @parent.data.last
107
115
  nxt = position == :first ? @parent.data.first : nil
108
116
  insert_section(nxt, &block)
@@ -110,12 +118,13 @@ module Prawn
110
118
 
111
119
  # Inserts an outline section to the outline tree (see outline#define).
112
120
  # Although you will probably choose to exclusively use outline#define so
113
- # that your outline tree is contained and easy to manage, this method
114
- # gives you the option to insert sections to the outline tree at any point
115
- # during document generation. Unlike outline.add_section, this method allows
116
- # you to enter a section after any other item at any level in the outline tree.
117
- # Currently the only way to locate the place of entry is with the title for the
118
- # item. If your title names are not unique consider using define_outline.
121
+ # that your outline tree is contained and easy to manage, this method gives
122
+ # you the option to insert sections to the outline tree at any point during
123
+ # document generation. Unlike outline.add_section, this method allows you to
124
+ # enter a section after any other item at any level in the outline tree.
125
+ # Currently the only way to locate the place of entry is with the title for
126
+ # the item. If your title names are not unique consider using
127
+ # define_outline.
119
128
  # The method takes the following arguments:
120
129
  # title: the title of other section or page to insert new section after
121
130
  # block: uses the same DSL syntax as outline#define, for example:
@@ -131,30 +140,36 @@ module Prawn
131
140
  #
132
141
  def insert_section_after(title, &block)
133
142
  @prev = items[title]
134
- raise Prawn::Errors::UnknownOutlineTitle,
135
- "\n No outline item with title: '#{title}' exists in the outline tree" unless @prev
143
+ unless @prev
144
+ raise Prawn::Errors::UnknownOutlineTitle,
145
+ "\n No outline item with title: '#{title}' exists in the outline tree"
146
+ end
136
147
  @parent = @prev.data.parent
137
148
  nxt = @prev.data.next
138
149
  insert_section(nxt, &block)
139
150
  end
140
151
 
141
- # See outline#define above for documentation on how this is used in that context
152
+ # See outline#define above for documentation on how this is used in that
153
+ # context
142
154
  #
143
155
  # Adds an outine section to the outline tree.
144
156
  # Although you will probably choose to exclusively use outline#define so
145
- # that your outline tree is contained and easy to manage, this method
146
- # gives you the option to add sections to the outline tree at any point
147
- # during document generation. When not being called from within another #section block
148
- # the section will be added at the top level after the other root elements of the outline.
149
- # For more flexible placement try using outline#insert_section_after and/or
150
- # outline#add_subsection_to
157
+ # that your outline tree is contained and easy to manage, this method gives
158
+ # you the option to add sections to the outline tree at any point during
159
+ # document generation. When not being called from within another #section
160
+ # block the section will be added at the top level after the other root
161
+ # elements of the outline. For more flexible placement try using
162
+ # outline#insert_section_after and/or outline#add_subsection_to
163
+ #
151
164
  # Takes the following arguments:
152
165
  # title: the outline text that appears for the section.
153
- # options: destination - optional integer defining the page number for a destination link
154
- # to the top of the page (using a :FIT destination).
155
- # - or an array with a custom destination (see the #dest_* methods of the
156
- # PDF::Destination module)
157
- # closed - whether the section should show its nested outline elements.
166
+ # options: destination - optional integer defining the page number for
167
+ # a destination link to the top of the page (using a :FIT
168
+ # destination).
169
+ # - or an array with a custom destination (see the #dest_*
170
+ # methods of the PDF::Destination module)
171
+ # closed - whether the section should show its nested outline
172
+ # elements.
158
173
  # - defaults to false.
159
174
  # block: more nested subsections and/or page blocks
160
175
  #
@@ -167,30 +182,34 @@ module Prawn
167
182
  add_outline_item(title, options, &block)
168
183
  end
169
184
 
170
- # See Outline#define above for more documentation on how it is used in that context
185
+ # See Outline#define above for more documentation on how it is used in that
186
+ # context
171
187
  #
172
188
  # Adds a page to the outline.
173
189
  # Although you will probably choose to exclusively use outline#define so
174
190
  # that your outline tree is contained and easy to manage, this method also
175
191
  # gives you the option to add pages to the root of outline tree at any point
176
- # during document generation. Note that the page will be added at the
177
- # top level after the other root outline elements. For more flexible placement try
178
- # using outline#insert_section_after and/or outline#add_subsection_to.
192
+ # during document generation. Note that the page will be added at the top
193
+ # level after the other root outline elements. For more flexible placement
194
+ # try using outline#insert_section_after and/or outline#add_subsection_to.
179
195
  #
180
196
  # Takes the following arguments:
181
- # options:
182
- # title - REQUIRED. The outline text that appears for the page.
183
- # destination - optional integer defining the page number for a destination link
184
- # to the top of the page (using a :FIT destination).
185
- # - or an array with a custom destination (see the #dest_* methods of the
186
- # PDF::Destination module)
187
- # closed - whether the section should show its nested outline elements.
188
- # - defaults to false.
197
+ # options:
198
+ # title - REQUIRED. The outline text that appears for the page.
199
+ # destination - optional integer defining the page number for
200
+ # a destination link to the top of the page (using a :FIT
201
+ # destination).
202
+ # or an array with a custom destination (see the dest_* methods
203
+ # of the PDF::Destination module)
204
+ # closed - whether the section should show its nested outline elements.
205
+ # - defaults to false.
189
206
  # example usage:
190
207
  #
191
208
  # outline.page :title => "Very Last Page"
192
- # Note: this method is almost identical to section except that it does not accept a block
193
- # thereby defining the outline item as a leaf on the outline tree structure.
209
+ #
210
+ # Note: this method is almost identical to section except that it does not
211
+ # accept a block thereby defining the outline item as a leaf on the outline
212
+ # tree structure.
194
213
  def page(options = {})
195
214
  if options[:title]
196
215
  title = options[:title]
@@ -207,15 +226,16 @@ module Prawn
207
226
  # lazily initialized, so that documents that do not have an outline
208
227
  # do not incur the additional overhead.
209
228
  def root
210
- document.state.store.root.data[:Outlines] ||= document.ref!(PDF::Core::OutlineRoot.new)
229
+ document.state.store.root.data[:Outlines] ||=
230
+ document.ref!(PDF::Core::OutlineRoot.new)
211
231
  end
212
232
 
213
233
  def add_outline_item(title, options, &block)
214
234
  outline_item = create_outline_item(title, options)
215
- set_relations(outline_item)
235
+ establish_relations(outline_item)
216
236
  increase_count
217
237
  set_variables_for_block(outline_item, block)
218
- block.call if block
238
+ yield if block
219
239
  reset_parent(outline_item)
220
240
  end
221
241
 
@@ -234,7 +254,7 @@ module Prawn
234
254
  items[title] = document.ref!(outline_item)
235
255
  end
236
256
 
237
- def set_relations(outline_item)
257
+ def establish_relations(outline_item)
238
258
  prev.data.next = outline_item if prev
239
259
  parent.data.first = outline_item unless prev
240
260
  parent.data.last = outline_item
@@ -244,11 +264,12 @@ module Prawn
244
264
  counting_parent = parent
245
265
  while counting_parent
246
266
  counting_parent.data.count += 1
247
- if counting_parent == root
248
- counting_parent = nil
249
- else
250
- counting_parent = counting_parent.data.parent
251
- end
267
+ counting_parent =
268
+ if counting_parent == root
269
+ nil
270
+ else
271
+ counting_parent.data.parent
272
+ end
252
273
  end
253
274
  end
254
275
 
@@ -267,7 +288,7 @@ module Prawn
267
288
  def insert_section(nxt, &block)
268
289
  last = @parent.data.last
269
290
  if block
270
- block.call
291
+ yield
271
292
  end
272
293
  adjust_relations(nxt, last)
273
294
  reset_root_positioning
@@ -1,5 +1,5 @@
1
- # encoding: utf-8
2
- #
1
+ # frozen_string_literal: true
2
+
3
3
  # repeater.rb : Implements repeated page elements.
4
4
  # Heavy inspired by repeating_element() in PDF::Wrapper
5
5
  # http://pdf-wrapper.rubyforge.org/
@@ -9,7 +9,6 @@
9
9
  # This is free software. Please see the LICENSE and COPYING files for details.
10
10
 
11
11
  module Prawn
12
-
13
12
  class Document
14
13
  # A list of all repeaters in the document.
15
14
  # See Document#repeat for details
@@ -21,9 +20,9 @@ module Prawn
21
20
 
22
21
  # @group Experimental API
23
22
 
24
- # Provides a way to execute a block of code repeatedly based on a
25
- # page_filter. Since Stamp is used under the hood, this method is very space
26
- # efficient.
23
+ # Provides a way to execute a block of code repeatedly based on
24
+ # a page_filter. Since Stamp is used under the hood, this method is very
25
+ # space efficient.
27
26
  #
28
27
  # Available page filters are:
29
28
  # :all -- repeats on every page
@@ -33,8 +32,9 @@ module Prawn
33
32
  # some_range -- repeats on every page included in the range
34
33
  # some_lambda -- yields page number and repeats for true return values
35
34
  #
36
- # Also accepts an optional second argument for dynamic content which executes the code
37
- # in the context of the filtered pages without using a Stamp.
35
+ # Also accepts an optional second argument for dynamic content which
36
+ # executes the code in the context of the filtered pages without using
37
+ # a Stamp.
38
38
  #
39
39
  # Example:
40
40
  #
@@ -75,8 +75,11 @@ module Prawn
75
75
  #
76
76
  # end
77
77
  #
78
- def repeat(page_filter, options={}, &block)
79
- repeaters << Prawn::Repeater.new(self, page_filter, !!options[:dynamic], &block)
78
+ def repeat(page_filter, options = {}, &block)
79
+ dynamic = options.fetch(:dynamic, false)
80
+ repeaters << Prawn::Repeater.new(
81
+ self, page_filter, dynamic, &block
82
+ )
80
83
  end
81
84
  end
82
85
 
@@ -92,10 +95,10 @@ module Prawn
92
95
  attr_reader :name
93
96
 
94
97
  def initialize(document, page_filter, dynamic = false, &block)
95
- @document = document
98
+ @document = document
96
99
  @page_filter = page_filter
97
100
  @dynamic = dynamic
98
- @stamp_name = "prawn_repeater(#{Repeater.count})"
101
+ @stamp_name = "prawn_repeater(#{Repeater.count})"
99
102
  @document.create_stamp(@stamp_name, &block) unless dynamic
100
103
  @block = block if dynamic
101
104
  @graphic_state = document.state.page.graphic_state.dup
@@ -112,13 +115,10 @@ module Prawn
112
115
  @document.stamp(@stamp_name) if match?(page_number)
113
116
  elsif @block && match?(page_number)
114
117
  @document.save_graphics_state(@graphic_state) do
115
- @document.send(:freeze_stamp_graphics)
118
+ @document.__send__(:freeze_stamp_graphics)
116
119
  @block.call
117
120
  end
118
121
  end
119
122
  end
120
-
121
123
  end
122
124
  end
123
-
124
-
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  # Implementation of the "ARCFOUR" algorithm ("alleged RC4 (tm)"). Implemented
4
4
  # as described at:
@@ -39,7 +39,7 @@ class Arcfour
39
39
  end
40
40
 
41
41
  def encrypt(string)
42
- string.unpack('c*').map{|byte| byte ^ key_byte}.pack('c*')
42
+ string.unpack('c*').map { |byte| byte ^ key_byte }.pack('c*')
43
43
  end
44
44
 
45
45
  private