prawn 2.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 (280) hide show
  1. checksums.yaml +5 -5
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/GPLv2 +20 -21
  5. data/Gemfile +3 -9
  6. data/Rakefile +9 -41
  7. data/lib/prawn.rb +37 -49
  8. data/lib/prawn/document.rb +193 -141
  9. data/lib/prawn/document/bounding_box.rb +50 -30
  10. data/lib/prawn/document/column_box.rb +7 -7
  11. data/lib/prawn/document/internals.rb +8 -6
  12. data/lib/prawn/document/span.rb +22 -16
  13. data/lib/prawn/encoding.rb +69 -68
  14. data/lib/prawn/errors.rb +12 -7
  15. data/lib/prawn/font.rb +104 -69
  16. data/lib/prawn/font_metric_cache.rb +20 -13
  17. data/lib/prawn/{font → fonts}/afm.rb +108 -72
  18. data/lib/prawn/{font → fonts}/dfont.rb +5 -11
  19. data/lib/prawn/fonts/otf.rb +11 -0
  20. data/lib/prawn/fonts/ttc.rb +36 -0
  21. data/lib/prawn/{font → fonts}/ttf.rb +126 -81
  22. data/lib/prawn/graphics.rb +119 -81
  23. data/lib/prawn/graphics/blend_mode.rb +9 -8
  24. data/lib/prawn/graphics/cap_style.rb +3 -3
  25. data/lib/prawn/graphics/color.rb +43 -39
  26. data/lib/prawn/graphics/dash.rb +23 -11
  27. data/lib/prawn/graphics/join_style.rb +9 -3
  28. data/lib/prawn/graphics/patterns.rb +204 -102
  29. data/lib/prawn/graphics/transformation.rb +15 -9
  30. data/lib/prawn/graphics/transparency.rb +17 -13
  31. data/lib/prawn/grid.rb +84 -48
  32. data/lib/prawn/image_handler.rb +5 -5
  33. data/lib/prawn/images.rb +60 -49
  34. data/lib/prawn/images/image.rb +2 -1
  35. data/lib/prawn/images/jpg.rb +31 -22
  36. data/lib/prawn/images/png.rb +67 -63
  37. data/lib/prawn/measurement_extensions.rb +10 -9
  38. data/lib/prawn/measurements.rb +19 -15
  39. data/lib/prawn/outline.rb +98 -77
  40. data/lib/prawn/repeater.rb +15 -11
  41. data/lib/prawn/security.rb +93 -70
  42. data/lib/prawn/security/arcfour.rb +2 -2
  43. data/lib/prawn/soft_mask.rb +26 -26
  44. data/lib/prawn/stamp.rb +20 -13
  45. data/lib/prawn/text.rb +76 -60
  46. data/lib/prawn/text/box.rb +18 -14
  47. data/lib/prawn/text/formatted.rb +5 -5
  48. data/lib/prawn/text/formatted/arranger.rb +80 -40
  49. data/lib/prawn/text/formatted/box.rb +140 -101
  50. data/lib/prawn/text/formatted/fragment.rb +11 -14
  51. data/lib/prawn/text/formatted/line_wrap.rb +128 -67
  52. data/lib/prawn/text/formatted/parser.rb +147 -123
  53. data/lib/prawn/text/formatted/wrap.rb +48 -32
  54. data/lib/prawn/transformation_stack.rb +7 -5
  55. data/lib/prawn/utilities.rb +7 -22
  56. data/lib/prawn/version.rb +2 -2
  57. data/lib/prawn/view.rb +17 -7
  58. data/manual/basic_concepts/adding_pages.rb +6 -7
  59. data/manual/basic_concepts/basic_concepts.rb +31 -22
  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 +7 -8
  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 +22 -16
  66. data/manual/bounding_box/bounding_box.rb +29 -24
  67. data/manual/bounding_box/bounds.rb +11 -12
  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 +14 -13
  73. data/manual/bounding_box/stretchy.rb +12 -13
  74. data/manual/contents.rb +28 -22
  75. data/manual/cover.rb +33 -28
  76. data/manual/document_and_page_options/background.rb +15 -13
  77. data/manual/document_and_page_options/document_and_page_options.rb +25 -20
  78. data/manual/document_and_page_options/metadata.rb +18 -16
  79. data/manual/document_and_page_options/page_margins.rb +18 -20
  80. data/manual/document_and_page_options/page_size.rb +13 -12
  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 +12 -9
  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 +10 -10
  89. data/manual/graphics/gradients.rb +27 -21
  90. data/manual/graphics/graphics.rb +48 -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 +7 -8
  94. data/manual/graphics/polygon.rb +6 -8
  95. data/manual/graphics/rectangle.rb +4 -5
  96. data/manual/graphics/rotate.rb +6 -7
  97. data/manual/graphics/scale.rb +14 -15
  98. data/manual/graphics/soft_masks.rb +3 -4
  99. data/manual/graphics/stroke_cap.rb +6 -7
  100. data/manual/graphics/stroke_dash.rb +15 -16
  101. data/manual/graphics/stroke_join.rb +5 -6
  102. data/manual/graphics/translate.rb +10 -10
  103. data/manual/graphics/transparency.rb +7 -8
  104. data/manual/how_to_read_this_manual.rb +6 -6
  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 -24
  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 +5 -6
  114. data/manual/layout/content.rb +7 -8
  115. data/manual/layout/layout.rb +18 -16
  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 +21 -17
  120. data/manual/outline/sections_and_pages.rb +17 -18
  121. data/manual/repeatable_content/alternate_page_numbering.rb +21 -17
  122. data/manual/repeatable_content/page_numbering.rb +17 -16
  123. data/manual/repeatable_content/repeatable_content.rb +25 -19
  124. data/manual/repeatable_content/repeater.rb +14 -15
  125. data/manual/repeatable_content/stamp.rb +14 -15
  126. data/manual/security/encryption.rb +9 -10
  127. data/manual/security/permissions.rb +21 -14
  128. data/manual/security/security.rb +19 -16
  129. data/manual/table.rb +3 -3
  130. data/manual/text/alignment.rb +16 -17
  131. data/manual/text/color.rb +12 -11
  132. data/manual/text/column_box.rb +9 -10
  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 -24
  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 +12 -14
  145. data/manual/text/positioned_text.rb +15 -16
  146. data/manual/text/registering_families.rb +20 -21
  147. data/manual/text/rendering_and_color.rb +9 -10
  148. data/manual/text/right_to_left_text.rb +26 -19
  149. data/manual/text/rotation.rb +33 -23
  150. data/manual/text/single_usage.rb +8 -9
  151. data/manual/text/text.rb +57 -52
  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 +20 -19
  155. data/manual/text/utf8.rb +11 -12
  156. data/manual/text/win_ansi_charset.rb +27 -25
  157. data/prawn.gemspec +41 -34
  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/{image_handler_spec.rb → prawn/image_handler_spec.rb} +14 -14
  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/{transformation_stack_spec.rb → prawn/transformation_stack_spec.rb} +22 -19
  195. data/spec/prawn/view_spec.rb +63 -0
  196. data/spec/prawn_manual_spec.rb +35 -0
  197. data/spec/spec_helper.rb +18 -19
  198. metadata +102 -222
  199. metadata.gz.sig +0 -0
  200. data/data/images/16bit.alpha +0 -0
  201. data/data/images/16bit.color +0 -0
  202. data/data/images/16bit.png +0 -0
  203. data/data/images/arrow.png +0 -0
  204. data/data/images/arrow2.png +0 -0
  205. data/data/images/blend_modes_bottom_layer.jpg +0 -0
  206. data/data/images/blend_modes_top_layer.jpg +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/indexed_transparency.png +0 -0
  215. data/data/images/indexed_transparency_alpha.dat +0 -0
  216. data/data/images/indexed_transparency_color.dat +0 -0
  217. data/data/images/letterhead.jpg +0 -0
  218. data/data/images/license.md +0 -8
  219. data/data/images/page_white_text.alpha +0 -0
  220. data/data/images/page_white_text.color +0 -0
  221. data/data/images/page_white_text.png +0 -0
  222. data/data/images/pigs.jpg +0 -0
  223. data/data/images/prawn.png +0 -0
  224. data/data/images/ruport.png +0 -0
  225. data/data/images/ruport_data.dat +0 -0
  226. data/data/images/ruport_transparent.png +0 -0
  227. data/data/images/ruport_type0.png +0 -0
  228. data/data/images/stef.jpg +0 -0
  229. data/data/images/tru256.bmp +0 -0
  230. data/data/images/web-links.dat +0 -1
  231. data/data/images/web-links.png +0 -0
  232. data/data/pdfs/complex_template.pdf +0 -0
  233. data/data/pdfs/contains_ttf_font.pdf +0 -0
  234. data/data/pdfs/encrypted.pdf +0 -0
  235. data/data/pdfs/form.pdf +1 -819
  236. data/data/pdfs/hexagon.pdf +0 -61
  237. data/data/pdfs/indirect_reference.pdf +0 -86
  238. data/data/pdfs/multipage_template.pdf +0 -127
  239. data/data/pdfs/nested_pages.pdf +0 -118
  240. data/data/pdfs/page_without_mediabox.pdf +0 -193
  241. data/data/pdfs/resources_as_indirect_object.pdf +0 -83
  242. data/data/pdfs/two_hexagons.pdf +0 -90
  243. data/data/pdfs/version_1_6.pdf +0 -61
  244. data/data/shift_jis_text.txt +0 -1
  245. data/spec/acceptance/png_spec.rb +0 -35
  246. data/spec/annotations_spec.rb +0 -67
  247. data/spec/blend_mode_spec.rb +0 -71
  248. data/spec/bounding_box_spec.rb +0 -501
  249. data/spec/column_box_spec.rb +0 -59
  250. data/spec/destinations_spec.rb +0 -13
  251. data/spec/document_spec.rb +0 -738
  252. data/spec/font_metric_cache_spec.rb +0 -52
  253. data/spec/font_spec.rb +0 -475
  254. data/spec/formatted_text_arranger_spec.rb +0 -452
  255. data/spec/formatted_text_box_spec.rb +0 -716
  256. data/spec/formatted_text_fragment_spec.rb +0 -299
  257. data/spec/graphics_spec.rb +0 -705
  258. data/spec/grid_spec.rb +0 -95
  259. data/spec/images_spec.rb +0 -167
  260. data/spec/inline_formatted_text_parser_spec.rb +0 -568
  261. data/spec/jpg_spec.rb +0 -23
  262. data/spec/line_wrap_spec.rb +0 -366
  263. data/spec/measurement_units_spec.rb +0 -22
  264. data/spec/outline_spec.rb +0 -409
  265. data/spec/png_spec.rb +0 -257
  266. data/spec/reference_spec.rb +0 -25
  267. data/spec/repeater_spec.rb +0 -154
  268. data/spec/security_spec.rb +0 -151
  269. data/spec/soft_mask_spec.rb +0 -78
  270. data/spec/span_spec.rb +0 -43
  271. data/spec/stamp_spec.rb +0 -179
  272. data/spec/stroke_styles_spec.rb +0 -208
  273. data/spec/text_at_spec.rb +0 -142
  274. data/spec/text_box_spec.rb +0 -1042
  275. data/spec/text_rendering_mode_spec.rb +0 -45
  276. data/spec/text_spacing_spec.rb +0 -93
  277. data/spec/text_spec.rb +0 -543
  278. data/spec/text_with_inline_formatting_spec.rb +0 -35
  279. data/spec/transparency_spec.rb +0 -91
  280. data/spec/view_spec.rb +0 -42
@@ -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.
@@ -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.
@@ -14,15 +16,20 @@ module Prawn
14
16
  # of a JPG image that we need to embed them in a PDF
15
17
  #
16
18
  class JPG < Image
19
+ class FormatError < StandardError; end
20
+
17
21
  # @group Extension API
18
22
 
19
23
  attr_reader :width, :height, :bits, :channels
20
24
  attr_accessor :scaled_width, :scaled_height
21
25
 
22
- 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
23
30
 
24
31
  def self.can_render?(image_blob)
25
- image_blob[0, 3].unpack("C*") == [255, 216, 255]
32
+ image_blob[0, 3].unpack('C*') == [255, 216, 255]
26
33
  end
27
34
 
28
35
  # Process a new JPG image
@@ -30,18 +37,19 @@ module Prawn
30
37
  # <tt>:data</tt>:: A binary string of JPEG data
31
38
  #
32
39
  def initialize(data)
40
+ super()
33
41
  @data = data
34
42
  d = StringIO.new(@data)
35
43
  d.binmode
36
44
 
37
45
  c_marker = 0xff # Section marker.
38
- d.seek(2) # Skip the first two bytes of JPEG identifier.
46
+ d.seek(2) # Skip the first two bytes of JPEG identifier.
39
47
  loop do
40
48
  marker, code, length = d.read(4).unpack('CCn')
41
- fail "JPEG marker not found!" if marker != c_marker
49
+ raise FormatError, 'JPEG marker not found!' if marker != c_marker
42
50
 
43
51
  if JPEG_SOF_BLOCKS.include?(code)
44
- @bits, @height, @width, @channels = d.read(6).unpack("CnnC")
52
+ @bits, @height, @width, @channels = d.read(6).unpack('CnnC')
45
53
  break
46
54
  end
47
55
 
@@ -53,31 +61,32 @@ module Prawn
53
61
  # a Reference to it.
54
62
  #
55
63
  def build_pdf_object(document)
56
- color_space = case channels
57
- when 1
58
- :DeviceGray
59
- when 3
60
- :DeviceRGB
61
- when 4
62
- :DeviceCMYK
63
- else
64
- fail ArgumentError, 'JPG uses an unsupported number of channels'
65
- 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
66
75
 
67
76
  obj = document.ref!(
68
- :Type => :XObject,
69
- :Subtype => :Image,
70
- :ColorSpace => color_space,
71
- :BitsPerComponent => bits,
72
- :Width => width,
73
- :Height => height
77
+ Type: :XObject,
78
+ Subtype: :Image,
79
+ ColorSpace: color_space,
80
+ BitsPerComponent: bits,
81
+ Width: width,
82
+ Height: height
74
83
  )
75
84
 
76
85
  # add extra decode params for CMYK images. By swapping the
77
86
  # min and max values from the default, we invert the colours. See
78
87
  # section 4.8.4 of the spec.
79
88
  if color_space == :DeviceCMYK
80
- 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]
81
90
  end
82
91
 
83
92
  obj.stream << @data
@@ -1,5 +1,7 @@
1
1
  # encoding: ASCII-8BIT
2
2
 
3
+ # frozen_string_literal: true
4
+
3
5
  # png.rb : Extracts the data from a PNG that is needed for embedding
4
6
  #
5
7
  # Based on some similar code in PDF::Writer by Austin Ziegler
@@ -9,8 +11,6 @@
9
11
  # This is free software. Please see the LICENSE and COPYING files for details.
10
12
 
11
13
  require 'stringio'
12
- require 'enumerator'
13
-
14
14
  module Prawn
15
15
  module Images
16
16
  # A convenience class that wraps the logic for extracting the parts
@@ -26,7 +26,7 @@ module Prawn
26
26
  attr_accessor :scaled_width, :scaled_height
27
27
 
28
28
  def self.can_render?(image_blob)
29
- image_blob[0, 8].unpack("C*") == [137, 80, 78, 71, 13, 10, 26, 10]
29
+ image_blob[0, 8].unpack('C*') == [137, 80, 78, 71, 13, 10, 26, 10]
30
30
  end
31
31
 
32
32
  # Process a new PNG image
@@ -34,30 +34,31 @@ module Prawn
34
34
  # <tt>data</tt>:: A binary string of PNG data
35
35
  #
36
36
  def initialize(data)
37
+ super()
37
38
  data = StringIO.new(data.dup)
38
39
 
39
- data.read(8) # Skip the default header
40
+ data.read(8) # Skip the default header
40
41
 
41
- @palette = ""
42
- @img_data = ""
42
+ @palette = +''
43
+ @img_data = +''
43
44
  @transparency = {}
44
45
 
45
46
  loop do
46
- chunk_size = data.read(4).unpack("N")[0]
47
- section = data.read(4)
47
+ chunk_size = data.read(4).unpack1('N')
48
+ section = data.read(4)
48
49
  case section
49
50
  when 'IHDR'
50
51
  # we can grab other interesting values from here (like width,
51
52
  # height, etc)
52
- values = data.read(chunk_size).unpack("NNCCCCC")
53
+ values = data.read(chunk_size).unpack('NNCCCCC')
53
54
 
54
- @width = values[0]
55
- @height = values[1]
56
- @bits = values[2]
57
- @color_type = values[3]
55
+ @width = values[0]
56
+ @height = values[1]
57
+ @bits = values[2]
58
+ @color_type = values[3]
58
59
  @compression_method = values[4]
59
- @filter_method = values[5]
60
- @interlace_method = values[6]
60
+ @filter_method = values[5]
61
+ @interlace_method = values[6]
61
62
  when 'PLTE'
62
63
  @palette << data.read(chunk_size)
63
64
  when 'IDAT'
@@ -72,11 +73,11 @@ module Prawn
72
73
  when 0
73
74
  # Greyscale. Corresponding to entries in the PLTE chunk.
74
75
  # Grey is two bytes, range 0 .. (2 ^ bit-depth) - 1
75
- grayval = data.read(chunk_size).unpack("n").first
76
+ grayval = data.read(chunk_size).unpack1('n')
76
77
  @transparency[:grayscale] = grayval
77
78
  when 2
78
79
  # True colour with proper alpha channel.
79
- @transparency[:rgb] = data.read(chunk_size).unpack("nnn")
80
+ @transparency[:rgb] = data.read(chunk_size).unpack('nnn')
80
81
  end
81
82
  when 'IEND'
82
83
  # we've got everything we need, exit the loop
@@ -86,7 +87,7 @@ module Prawn
86
87
  data.seek(data.pos + chunk_size)
87
88
  end
88
89
 
89
- data.read(4) # Skip the CRC
90
+ data.read(4) # Skip the CRC
90
91
  end
91
92
 
92
93
  @img_data = Zlib::Inflate.inflate(@img_data)
@@ -95,11 +96,11 @@ module Prawn
95
96
  # number of color components to each pixel
96
97
  #
97
98
  def colors
98
- case self.color_type
99
+ case color_type
99
100
  when 0, 3, 4
100
- return 1
101
+ 1
101
102
  when 2, 6
102
- return 3
103
+ 3
103
104
  end
104
105
  end
105
106
 
@@ -128,18 +129,18 @@ module Prawn
128
129
  #
129
130
  def build_pdf_object(document)
130
131
  if compression_method != 0
131
- fail Errors::UnsupportedImageType,
132
- 'PNG uses an unsupported compression method'
132
+ raise Errors::UnsupportedImageType,
133
+ 'PNG uses an unsupported compression method'
133
134
  end
134
135
 
135
136
  if filter_method != 0
136
- fail Errors::UnsupportedImageType,
137
- 'PNG uses an unsupported filter method'
137
+ raise Errors::UnsupportedImageType,
138
+ 'PNG uses an unsupported filter method'
138
139
  end
139
140
 
140
141
  if interlace_method != 0
141
- fail Errors::UnsupportedImageType,
142
- 'PNG uses unsupported interlace method'
142
+ raise Errors::UnsupportedImageType,
143
+ 'PNG uses unsupported interlace method'
143
144
  end
144
145
 
145
146
  # some PNG types store the colour and alpha channel data together,
@@ -152,28 +153,28 @@ module Prawn
152
153
  when 3
153
154
  color = :DeviceRGB
154
155
  else
155
- fail Errors::UnsupportedImageType,
156
- "PNG uses an unsupported number of colors (#{png.colors})"
156
+ raise Errors::UnsupportedImageType,
157
+ "PNG uses an unsupported number of colors (#{png.colors})"
157
158
  end
158
159
 
159
160
  # build the image dict
160
161
  obj = document.ref!(
161
- :Type => :XObject,
162
- :Subtype => :Image,
163
- :Height => height,
164
- :Width => width,
165
- :BitsPerComponent => bits
162
+ Type: :XObject,
163
+ Subtype: :Image,
164
+ Height: height,
165
+ Width: width,
166
+ BitsPerComponent: bits
166
167
  )
167
168
 
168
169
  # append the actual image data to the object as a stream
169
170
  obj << img_data
170
171
 
171
172
  obj.stream.filters << {
172
- :FlateDecode => {
173
- :Predictor => 15,
174
- :Colors => colors,
175
- :BitsPerComponent => bits,
176
- :Columns => width
173
+ FlateDecode: {
174
+ Predictor: 15,
175
+ Colors: colors,
176
+ BitsPerComponent: bits,
177
+ Columns: width
177
178
  }
178
179
  }
179
180
 
@@ -186,10 +187,12 @@ module Prawn
186
187
  palette_obj << palette
187
188
 
188
189
  # build the color space array for the image
189
- obj.data[:ColorSpace] = [:Indexed,
190
- :DeviceRGB,
191
- (palette.size / 3) - 1,
192
- palette_obj]
190
+ obj.data[:ColorSpace] = [
191
+ :Indexed,
192
+ :DeviceRGB,
193
+ (palette.size / 3) - 1,
194
+ palette_obj
195
+ ]
193
196
  end
194
197
 
195
198
  # *************************************
@@ -210,30 +213,31 @@ module Prawn
210
213
  # - An array with N elements, where N is two times the number of color
211
214
  # components.
212
215
  rgb = transparency[:rgb]
213
- obj.data[:Mask] = rgb.collect { |x| [x, x] }.flatten
216
+ obj.data[:Mask] = rgb.map { |x| [x, x] }.flatten
214
217
  end
215
218
 
216
- # For PNG color types 4 and 6, the transparency data is stored as a alpha
217
- # channel mixed in with the main image data. The PNG class seperates
218
- # it out for us and makes it available via the alpha_channel attribute
219
+ # For PNG color types 4 and 6, the transparency data is stored as
220
+ # a alpha channel mixed in with the main image data. The PNG class
221
+ # seperates it out for us and makes it available via the alpha_channel
222
+ # attribute
219
223
  if alpha_channel?
220
224
  smask_obj = document.ref!(
221
- :Type => :XObject,
222
- :Subtype => :Image,
223
- :Height => height,
224
- :Width => width,
225
- :BitsPerComponent => bits,
226
- :ColorSpace => :DeviceGray,
227
- :Decode => [0, 1]
225
+ Type: :XObject,
226
+ Subtype: :Image,
227
+ Height: height,
228
+ Width: width,
229
+ BitsPerComponent: bits,
230
+ ColorSpace: :DeviceGray,
231
+ Decode: [0, 1]
228
232
  )
229
233
  smask_obj.stream << alpha_channel
230
234
 
231
235
  smask_obj.stream.filters << {
232
- :FlateDecode => {
233
- :Predictor => 15,
234
- :Colors => 1,
235
- :BitsPerComponent => bits,
236
- :Columns => width
236
+ FlateDecode: {
237
+ Predictor: 15,
238
+ Colors: 1,
239
+ BitsPerComponent: bits,
240
+ Columns: width
237
241
  }
238
242
  }
239
243
  obj.data[:SMask] = smask_obj
@@ -261,9 +265,9 @@ module Prawn
261
265
  alpha_bytes = bits / 8
262
266
  color_bytes = colors * bits / 8
263
267
 
264
- scanline_length = (color_bytes + alpha_bytes) * self.width + 1
268
+ scanline_length = (color_bytes + alpha_bytes) * width + 1
265
269
  scanlines = @img_data.bytesize / scanline_length
266
- pixels = self.width * self.height
270
+ pixels = width * height
267
271
 
268
272
  data = StringIO.new(@img_data)
269
273
  data.binmode
@@ -284,7 +288,7 @@ module Prawn
284
288
  color.putc filter
285
289
  alpha.putc filter
286
290
 
287
- self.width.times do
291
+ width.times do
288
292
  color.write data.read(color_bytes)
289
293
  alpha.write data.read(alpha_bytes)
290
294
  end
@@ -318,7 +322,7 @@ module Prawn
318
322
  alpha.putc filter
319
323
 
320
324
  width.times do
321
- color = data.read(1).unpack('C').first
325
+ color = data.read(1).unpack1('C')
322
326
  alpha.putc alpha_palette[color]
323
327
  end
324
328
  end
@@ -1,4 +1,5 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  # measurement_extensions.rb: Core extensions for Prawn::Measurements
3
4
  #
4
5
  # Copyright December 2008, Florian Witteler. All Rights Reserved.
@@ -17,34 +18,34 @@ class Numeric
17
18
  # @group Experimental API
18
19
 
19
20
  def mm
20
- return mm2pt(self)
21
+ mm2pt(self)
21
22
  end
22
23
 
23
24
  def cm
24
- return cm2pt(self)
25
+ cm2pt(self)
25
26
  end
26
27
 
27
28
  def dm
28
- return dm2pt(self)
29
+ dm2pt(self)
29
30
  end
30
31
 
31
32
  def m
32
- return m2pt(self)
33
+ m2pt(self)
33
34
  end
34
35
 
35
36
  def in
36
- return in2pt(self)
37
+ in2pt(self)
37
38
  end
38
39
 
39
40
  def yd
40
- return yd2pt(self)
41
+ yd2pt(self)
41
42
  end
42
43
 
43
44
  def ft
44
- return ft2pt(self)
45
+ ft2pt(self)
45
46
  end
46
47
 
47
48
  def pt
48
- return pt2pt(self)
49
+ pt2pt(self)
49
50
  end
50
51
  end
@@ -1,70 +1,74 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
+
2
3
  # measurements.rb: Conversions from other measurements to PDF points
3
4
  #
4
5
  # Copyright December 2008, Florian Witteler. All Rights Reserved.
5
6
  #
7
+
8
+ # rubocop: disable Naming/MethodParameterName
6
9
  module Prawn
7
10
  # @group Stable API
8
11
 
9
12
  module Measurements
10
13
  # metric conversions
11
14
  def cm2mm(cm)
12
- return cm * 10
15
+ cm * 10
13
16
  end
14
17
 
15
18
  def dm2mm(dm)
16
- return dm * 100
19
+ dm * 100
17
20
  end
18
21
 
19
22
  def m2mm(m)
20
- return m * 1000
23
+ m * 1000
21
24
  end
22
25
 
23
26
  # imperial conversions
24
27
  # from http://en.wikipedia.org/wiki/Imperial_units
25
28
  def ft2in(ft)
26
- return ft * 12
29
+ ft * 12
27
30
  end
28
31
 
29
32
  def yd2in(yd)
30
- return yd * 36
33
+ yd * 36
31
34
  end
32
35
 
33
36
  # PostscriptPoint-converisons
34
37
  def pt2pt(pt)
35
- return pt
38
+ pt
36
39
  end
37
40
 
38
41
  def in2pt(inch)
39
- return inch * 72
42
+ inch * 72
40
43
  end
41
44
 
42
45
  def ft2pt(ft)
43
- return in2pt(ft2in(ft))
46
+ in2pt(ft2in(ft))
44
47
  end
45
48
 
46
49
  def yd2pt(yd)
47
- return in2pt(yd2in(yd))
50
+ in2pt(yd2in(yd))
48
51
  end
49
52
 
50
53
  def mm2pt(mm)
51
- return mm * (72 / 25.4)
54
+ mm * (72 / 25.4)
52
55
  end
53
56
 
54
57
  def cm2pt(cm)
55
- return mm2pt(cm2mm(cm))
58
+ mm2pt(cm2mm(cm))
56
59
  end
57
60
 
58
61
  def dm2pt(dm)
59
- return mm2pt(dm2mm(dm))
62
+ mm2pt(dm2mm(dm))
60
63
  end
61
64
 
62
65
  def m2pt(m)
63
- return mm2pt(m2mm(m))
66
+ mm2pt(m2mm(m))
64
67
  end
65
68
 
66
69
  def pt2mm(pt)
67
- return pt * 1 / mm2pt(1) # (25.4 / 72)
70
+ pt * 1 / mm2pt(1) # (25.4 / 72)
68
71
  end
69
72
  end
70
73
  end
74
+ # rubocop: enable Naming/MethodParameterName