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/grid.rb CHANGED
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  # grid.rb: Provides a basic grid layout system for Prawn
4
4
  #
@@ -28,38 +28,43 @@ module Prawn
28
28
  # or work with the grid system directly.
29
29
  #
30
30
  # @pdf.grid # Get the Grid directly
31
- # @pdf.grid([0,1]) # Get the box at [0,1]
31
+ # @pdf.grid([0,1]) # Get the GridBox at [0,1]
32
32
  # @pdf.grid([0,1], [1,2]) # Get a multi-box spanning from [0,1] to [1,2]
33
33
  #
34
34
  def grid(*args)
35
35
  @boxes ||= {}
36
- @boxes[args] ||= if args.empty?
37
- @grid
38
- else
39
- g1, g2 = args
40
- if(g1.class == Array && g2.class == Array &&
41
- g1.length == 2 && g2.length == 2)
42
- multi_box(single_box(*g1), single_box(*g2))
43
- else
44
- single_box(g1, g2)
36
+ @boxes[args] ||=
37
+ begin
38
+ if args.empty?
39
+ @grid
40
+ else
41
+ g1, g2 = args
42
+
43
+ if g1.is_a?(Array) && g2.is_a?(Array) &&
44
+ g1.length == 2 && g2.length == 2
45
+ multi_box(single_box(*g1), single_box(*g2))
46
+ else
47
+ single_box(g1, g2)
48
+ end
49
+ end
45
50
  end
46
- end
47
51
  end
48
52
 
49
53
  # A Grid represents the entire grid system of a Page and calculates
50
54
  # the column width and row height of the base box.
51
55
  #
52
- # @private
56
+ # @group Experimental API
53
57
  class Grid
54
58
  attr_reader :pdf, :columns, :rows, :gutter, :row_gutter, :column_gutter
59
+
55
60
  def initialize(pdf, options = {}) # :nodoc:
56
- valid_options = [:columns, :rows, :gutter, :row_gutter, :column_gutter]
61
+ valid_options = %i[columns rows gutter row_gutter column_gutter]
57
62
  Prawn.verify_options valid_options, options
58
63
 
59
64
  @pdf = pdf
60
65
  @columns = options[:columns]
61
66
  @rows = options[:rows]
62
- set_gutter(options)
67
+ apply_gutter(options)
63
68
  end
64
69
 
65
70
  # Calculates the base width of boxes.
@@ -69,14 +74,14 @@ module Prawn
69
74
 
70
75
  # Calculates the base height of boxes.
71
76
  def row_height
72
- @row_height ||= subdivide(pdf.bounds.height, rows, row_gutter)
77
+ @row_height ||= subdivide(pdf.bounds.height, rows, row_gutter)
73
78
  end
74
79
 
75
80
  # Diagnostic tool to show all of the grids. Defaults to gray.
76
- def show_all(color = "CCCCCC")
77
- self.rows.times do |i|
78
- self.columns.times do |j|
79
- pdf.grid(i,j).show(color)
81
+ def show_all(color = 'CCCCCC')
82
+ rows.times do |row|
83
+ columns.times do |column|
84
+ pdf.grid(row, column).show(color)
80
85
  end
81
86
  end
82
87
  end
@@ -87,12 +92,13 @@ module Prawn
87
92
  (total.to_f - (gutter * (num - 1).to_f)) / num.to_f
88
93
  end
89
94
 
90
- def set_gutter(options)
91
- if options.has_key?(:gutter)
95
+ def apply_gutter(options)
96
+ if options.key?(:gutter)
92
97
  @gutter = options[:gutter].to_f
93
- @row_gutter, @column_gutter = @gutter, @gutter
98
+ @row_gutter = @gutter
99
+ @column_gutter = @gutter
94
100
  else
95
- @row_gutter = options[:row_gutter].to_f
101
+ @row_gutter = options[:row_gutter].to_f
96
102
  @column_gutter = options[:column_gutter].to_f
97
103
  @gutter = 0
98
104
  end
@@ -103,21 +109,21 @@ module Prawn
103
109
  # A Grid object has methods that allow easy access to the coordinates of
104
110
  # its corners, which can be plugged into most existing prawnmethods.
105
111
  #
106
- # @private
112
+ # @group Experimental API
107
113
  class GridBox
108
114
  attr_reader :pdf
109
115
 
110
- def initialize(pdf, i, j)
116
+ def initialize(pdf, rows, columns)
111
117
  @pdf = pdf
112
- @i = i
113
- @j = j
118
+ @rows = rows
119
+ @columns = columns
114
120
  end
115
121
 
116
122
  # Mostly diagnostic method that outputs the name of a box as
117
123
  # col_num, row_num
118
124
  #
119
125
  def name
120
- "#{@i.to_s},#{@j.to_s}"
126
+ "#{@rows},#{@columns}"
121
127
  end
122
128
 
123
129
  # :nodoc
@@ -142,7 +148,7 @@ module Prawn
142
148
 
143
149
  # x-coordinate of left side
144
150
  def left
145
- @left ||= (width + grid.column_gutter) * @j.to_f
151
+ @left ||= (width + grid.column_gutter) * @columns.to_f
146
152
  end
147
153
 
148
154
  # x-coordinate of right side
@@ -152,7 +158,7 @@ module Prawn
152
158
 
153
159
  # y-coordinate of the top
154
160
  def top
155
- @top ||= total_height - ((height + grid.row_gutter) * @i.to_f)
161
+ @top ||= total_height - ((height + grid.row_gutter) * @rows.to_f)
156
162
  end
157
163
 
158
164
  # y-coordinate of the bottom
@@ -182,16 +188,16 @@ module Prawn
182
188
 
183
189
  # Creates a standard bounding box based on the grid box.
184
190
  def bounding_box(&blk)
185
- pdf.bounding_box(top_left, :width => width, :height => height, &blk)
191
+ pdf.bounding_box(top_left, width: width, height: height, &blk)
186
192
  end
187
193
 
188
194
  # Diagnostic method
189
- def show(grid_color = "CCCCCC")
190
- self.bounding_box do
195
+ def show(grid_color = 'CCCCCC')
196
+ bounding_box do
191
197
  original_stroke_color = pdf.stroke_color
192
198
 
193
199
  pdf.stroke_color = grid_color
194
- pdf.text self.name
200
+ pdf.text name
195
201
  pdf.stroke_bounds
196
202
 
197
203
  pdf.stroke_color = original_stroke_color
@@ -199,6 +205,7 @@ module Prawn
199
205
  end
200
206
 
201
207
  private
208
+
202
209
  def grid
203
210
  pdf.grid
204
211
  end
@@ -206,19 +213,21 @@ module Prawn
206
213
 
207
214
  # A MultiBox is specified by 2 Boxes and spans the areas between.
208
215
  #
209
- # @private
210
- class MultiBox < GridBox #:nodoc:
211
- def initialize(pdf, b1, b2)
216
+ # @group Experimental API
217
+ class MultiBox
218
+ def initialize(pdf, box1, box2)
212
219
  @pdf = pdf
213
- @bs = [b1, b2]
220
+ @boxes = [box1, box2]
214
221
  end
215
222
 
223
+ attr_reader :pdf
224
+
216
225
  def name
217
- @bs.map {|b| b.name}.join(":")
226
+ @boxes.map(&:name).join(':')
218
227
  end
219
228
 
220
229
  def total_height
221
- @bs[0].total_height
230
+ @boxes[0].total_height
222
231
  end
223
232
 
224
233
  def width
@@ -230,7 +239,7 @@ module Prawn
230
239
  end
231
240
 
232
241
  def gutter
233
- @bs[0].gutter
242
+ @boxes[0].gutter
234
243
  end
235
244
 
236
245
  def left
@@ -249,31 +258,65 @@ module Prawn
249
258
  bottom_box.bottom
250
259
  end
251
260
 
261
+ def top_left
262
+ [left, top]
263
+ end
264
+
265
+ def top_right
266
+ [right, top]
267
+ end
268
+
269
+ def bottom_left
270
+ [left, bottom]
271
+ end
272
+
273
+ def bottom_right
274
+ [right, bottom]
275
+ end
276
+
277
+ def bounding_box(&blk)
278
+ pdf.bounding_box(top_left, width: width, height: height, &blk)
279
+ end
280
+
281
+ def show(grid_color = 'CCCCCC')
282
+ bounding_box do
283
+ original_stroke_color = pdf.stroke_color
284
+
285
+ pdf.stroke_color = grid_color
286
+ pdf.text name
287
+ pdf.stroke_bounds
288
+
289
+ pdf.stroke_color = original_stroke_color
290
+ end
291
+ end
292
+
252
293
  private
294
+
253
295
  def left_box
254
- @left_box ||= @bs.min {|a,b| a.left <=> b.left}
296
+ @left_box ||= @boxes.min_by(&:left)
255
297
  end
256
298
 
257
299
  def right_box
258
- @right_box ||= @bs.max {|a,b| a.right <=> b.right}
300
+ @right_box ||= @boxes.max_by(&:right)
259
301
  end
260
302
 
261
303
  def top_box
262
- @top_box ||= @bs.max {|a,b| a.top <=> b.top}
304
+ @top_box ||= @boxes.max_by(&:top)
263
305
  end
264
306
 
265
307
  def bottom_box
266
- @bottom_box ||= @bs.min {|a,b| a.bottom <=> b.bottom}
308
+ @bottom_box ||= @boxes.min_by(&:bottom)
267
309
  end
268
310
  end
269
311
 
270
312
  private
271
- def single_box(i, j)
272
- GridBox.new(self, i, j)
313
+
314
+ def single_box(rows, columns)
315
+ GridBox.new(self, rows, columns)
273
316
  end
274
317
 
275
- def multi_box(b1, b2)
276
- MultiBox.new(self, b1, b2)
318
+ def multi_box(box1, box2)
319
+ MultiBox.new(self, box1, box2)
277
320
  end
278
321
  end
279
322
  end
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  # ImageHandler provides a way to register image processors with Prawn
4
4
  #
@@ -29,16 +29,16 @@ module Prawn
29
29
  end
30
30
 
31
31
  def unregister(handler)
32
- @handlers.reject!{ |h| h == handler }
32
+ @handlers.reject! { |h| h == handler }
33
33
  end
34
34
 
35
35
  def find(image_blob)
36
- handler = @handlers.find{ |h| h.can_render? image_blob }
36
+ handler = @handlers.find { |h| h.can_render? image_blob }
37
37
 
38
38
  return handler if handler
39
39
 
40
40
  raise Prawn::Errors::UnsupportedImageType,
41
- "image file is an unrecognised format"
41
+ 'image file is an unrecognised format'
42
42
  end
43
43
  end
44
44
  end
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  # image.rb : Base class for image info objects
3
4
  #
4
5
  # Copyright September 2011, Brad Ediger. All rights reserved.
@@ -42,7 +43,7 @@ module Prawn
42
43
  self.scaled_width = w
43
44
  self.scaled_height = h
44
45
 
45
- [w,h]
46
+ [w, h]
46
47
  end
47
48
  end
48
49
  end
@@ -1,5 +1,7 @@
1
1
  # encoding: ASCII-8BIT
2
2
 
3
+ # frozen_string_literal: true
4
+
3
5
  # jpg.rb : Extracts the data from a JPG that is needed for embedding
4
6
  #
5
7
  # Copyright April 2008, James Healy. All Rights Reserved.
@@ -10,20 +12,24 @@ require 'stringio'
10
12
 
11
13
  module Prawn
12
14
  module Images
13
-
14
15
  # A convenience class that wraps the logic for extracting the parts
15
16
  # of a JPG image that we need to embed them in a PDF
16
17
  #
17
18
  class JPG < Image
19
+ class FormatError < StandardError; end
20
+
18
21
  # @group Extension API
19
22
 
20
23
  attr_reader :width, :height, :bits, :channels
21
24
  attr_accessor :scaled_width, :scaled_height
22
25
 
23
- JPEG_SOF_BLOCKS = [0xC0, 0xC1, 0xC2, 0xC3, 0xC5, 0xC6, 0xC7, 0xC9, 0xCA, 0xCB, 0xCD, 0xCE, 0xCF]
26
+ JPEG_SOF_BLOCKS = [
27
+ 0xC0, 0xC1, 0xC2, 0xC3, 0xC5, 0xC6, 0xC7, 0xC9, 0xCA, 0xCB, 0xCD, 0xCE,
28
+ 0xCF
29
+ ].freeze
24
30
 
25
31
  def self.can_render?(image_blob)
26
- image_blob[0, 3].unpack("C*") == [255, 216, 255]
32
+ image_blob[0, 3].unpack('C*') == [255, 216, 255]
27
33
  end
28
34
 
29
35
  # Process a new JPG image
@@ -31,18 +37,19 @@ module Prawn
31
37
  # <tt>:data</tt>:: A binary string of JPEG data
32
38
  #
33
39
  def initialize(data)
40
+ super()
34
41
  @data = data
35
42
  d = StringIO.new(@data)
36
43
  d.binmode
37
44
 
38
45
  c_marker = 0xff # Section marker.
39
- d.seek(2) # Skip the first two bytes of JPEG identifier.
46
+ d.seek(2) # Skip the first two bytes of JPEG identifier.
40
47
  loop do
41
48
  marker, code, length = d.read(4).unpack('CCn')
42
- raise "JPEG marker not found!" if marker != c_marker
49
+ raise FormatError, 'JPEG marker not found!' if marker != c_marker
43
50
 
44
51
  if JPEG_SOF_BLOCKS.include?(code)
45
- @bits, @height, @width, @channels = d.read(6).unpack("CnnC")
52
+ @bits, @height, @width, @channels = d.read(6).unpack('CnnC')
46
53
  break
47
54
  end
48
55
 
@@ -54,38 +61,38 @@ module Prawn
54
61
  # a Reference to it.
55
62
  #
56
63
  def build_pdf_object(document)
57
- color_space = case channels
58
- when 1
59
- :DeviceGray
60
- when 3
61
- :DeviceRGB
62
- when 4
63
- :DeviceCMYK
64
- else
65
- raise ArgumentError, 'JPG uses an unsupported number of channels'
66
- end
64
+ color_space =
65
+ case channels
66
+ when 1
67
+ :DeviceGray
68
+ when 3
69
+ :DeviceRGB
70
+ when 4
71
+ :DeviceCMYK
72
+ else
73
+ raise ArgumentError, 'JPG uses an unsupported number of channels'
74
+ end
67
75
 
68
76
  obj = document.ref!(
69
- :Type => :XObject,
70
- :Subtype => :Image,
71
- :ColorSpace => color_space,
72
- :BitsPerComponent => bits,
73
- :Width => width,
74
- :Height => height
77
+ Type: :XObject,
78
+ Subtype: :Image,
79
+ ColorSpace: color_space,
80
+ BitsPerComponent: bits,
81
+ Width: width,
82
+ Height: height
75
83
  )
76
84
 
77
85
  # add extra decode params for CMYK images. By swapping the
78
86
  # min and max values from the default, we invert the colours. See
79
87
  # section 4.8.4 of the spec.
80
88
  if color_space == :DeviceCMYK
81
- obj.data[:Decode] = [ 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0 ]
89
+ obj.data[:Decode] = [1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0]
82
90
  end
83
91
 
84
92
  obj.stream << @data
85
93
  obj.stream.filters << :DCTDecode
86
94
  obj
87
95
  end
88
-
89
96
  end
90
97
  end
91
98
  end