hexapdf 0.6.0 → 0.7.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 (257) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +33 -0
  3. data/CONTRIBUTERS +1 -1
  4. data/LICENSE +1 -1
  5. data/Rakefile +1 -1
  6. data/VERSION +1 -1
  7. data/bin/hexapdf +1 -1
  8. data/examples/text_layouter_styling.rb +1 -2
  9. data/lib/hexapdf.rb +2 -2
  10. data/lib/hexapdf/cli.rb +3 -3
  11. data/lib/hexapdf/cli/batch.rb +5 -5
  12. data/lib/hexapdf/cli/command.rb +15 -17
  13. data/lib/hexapdf/cli/files.rb +3 -3
  14. data/lib/hexapdf/cli/images.rb +3 -4
  15. data/lib/hexapdf/cli/info.rb +5 -5
  16. data/lib/hexapdf/cli/inspect.rb +6 -6
  17. data/lib/hexapdf/cli/merge.rb +6 -6
  18. data/lib/hexapdf/cli/modify.rb +4 -4
  19. data/lib/hexapdf/cli/optimize.rb +3 -3
  20. data/lib/hexapdf/configuration.rb +4 -5
  21. data/lib/hexapdf/content.rb +2 -2
  22. data/lib/hexapdf/content/canvas.rb +35 -36
  23. data/lib/hexapdf/content/color_space.rb +9 -14
  24. data/lib/hexapdf/content/graphic_object.rb +2 -2
  25. data/lib/hexapdf/content/graphic_object/arc.rb +3 -3
  26. data/lib/hexapdf/content/graphic_object/endpoint_arc.rb +2 -2
  27. data/lib/hexapdf/content/graphic_object/solid_arc.rb +4 -8
  28. data/lib/hexapdf/content/graphics_state.rb +4 -13
  29. data/lib/hexapdf/content/operator.rb +33 -35
  30. data/lib/hexapdf/content/parser.rb +28 -18
  31. data/lib/hexapdf/content/processor.rb +4 -5
  32. data/lib/hexapdf/content/transformation_matrix.rb +2 -2
  33. data/lib/hexapdf/data_dir.rb +2 -2
  34. data/lib/hexapdf/dictionary.rb +8 -9
  35. data/lib/hexapdf/dictionary_fields.rb +7 -10
  36. data/lib/hexapdf/document.rb +18 -18
  37. data/lib/hexapdf/document/files.rb +12 -10
  38. data/lib/hexapdf/document/fonts.rb +2 -2
  39. data/lib/hexapdf/document/images.rb +3 -3
  40. data/lib/hexapdf/document/pages.rb +4 -4
  41. data/lib/hexapdf/encryption.rb +2 -2
  42. data/lib/hexapdf/encryption/aes.rb +2 -2
  43. data/lib/hexapdf/encryption/arc4.rb +4 -4
  44. data/lib/hexapdf/encryption/fast_aes.rb +2 -2
  45. data/lib/hexapdf/encryption/fast_arc4.rb +4 -4
  46. data/lib/hexapdf/encryption/identity.rb +5 -4
  47. data/lib/hexapdf/encryption/ruby_aes.rb +147 -139
  48. data/lib/hexapdf/encryption/ruby_arc4.rb +4 -4
  49. data/lib/hexapdf/encryption/security_handler.rb +11 -12
  50. data/lib/hexapdf/encryption/standard_security_handler.rb +6 -9
  51. data/lib/hexapdf/error.rb +7 -9
  52. data/lib/hexapdf/filter.rb +2 -3
  53. data/lib/hexapdf/filter/ascii85_decode.rb +3 -3
  54. data/lib/hexapdf/filter/ascii_hex_decode.rb +2 -2
  55. data/lib/hexapdf/filter/dct_decode.rb +2 -2
  56. data/lib/hexapdf/filter/encryption.rb +2 -2
  57. data/lib/hexapdf/filter/flate_decode.rb +16 -33
  58. data/lib/hexapdf/filter/jpx_decode.rb +2 -2
  59. data/lib/hexapdf/filter/lzw_decode.rb +4 -4
  60. data/lib/hexapdf/filter/predictor.rb +2 -6
  61. data/lib/hexapdf/filter/run_length_decode.rb +2 -2
  62. data/lib/hexapdf/font/cmap.rb +2 -3
  63. data/lib/hexapdf/font/cmap/parser.rb +11 -11
  64. data/lib/hexapdf/font/cmap/writer.rb +25 -25
  65. data/lib/hexapdf/font/encoding.rb +2 -2
  66. data/lib/hexapdf/font/encoding/base.rb +2 -2
  67. data/lib/hexapdf/font/encoding/difference_encoding.rb +2 -2
  68. data/lib/hexapdf/font/encoding/glyph_list.rb +6 -6
  69. data/lib/hexapdf/font/encoding/mac_expert_encoding.rb +2 -2
  70. data/lib/hexapdf/font/encoding/mac_roman_encoding.rb +2 -2
  71. data/lib/hexapdf/font/encoding/standard_encoding.rb +2 -2
  72. data/lib/hexapdf/font/encoding/symbol_encoding.rb +2 -2
  73. data/lib/hexapdf/font/encoding/win_ansi_encoding.rb +2 -2
  74. data/lib/hexapdf/font/encoding/zapf_dingbats_encoding.rb +2 -2
  75. data/lib/hexapdf/font/invalid_glyph.rb +7 -7
  76. data/lib/hexapdf/font/true_type.rb +2 -2
  77. data/lib/hexapdf/font/true_type/builder.rb +13 -7
  78. data/lib/hexapdf/font/true_type/font.rb +2 -3
  79. data/lib/hexapdf/font/true_type/optimizer.rb +2 -2
  80. data/lib/hexapdf/font/true_type/subsetter.rb +4 -4
  81. data/lib/hexapdf/font/true_type/table.rb +3 -5
  82. data/lib/hexapdf/font/true_type/table/cmap.rb +2 -2
  83. data/lib/hexapdf/font/true_type/table/cmap_subtable.rb +9 -16
  84. data/lib/hexapdf/font/true_type/table/directory.rb +4 -4
  85. data/lib/hexapdf/font/true_type/table/glyf.rb +2 -2
  86. data/lib/hexapdf/font/true_type/table/head.rb +3 -2
  87. data/lib/hexapdf/font/true_type/table/hhea.rb +2 -2
  88. data/lib/hexapdf/font/true_type/table/hmtx.rb +2 -2
  89. data/lib/hexapdf/font/true_type/table/kern.rb +3 -3
  90. data/lib/hexapdf/font/true_type/table/loca.rb +3 -3
  91. data/lib/hexapdf/font/true_type/table/maxp.rb +2 -2
  92. data/lib/hexapdf/font/true_type/table/name.rb +3 -5
  93. data/lib/hexapdf/font/true_type/table/os2.rb +4 -3
  94. data/lib/hexapdf/font/true_type/table/post.rb +3 -7
  95. data/lib/hexapdf/font/true_type_wrapper.rb +20 -22
  96. data/lib/hexapdf/font/type1.rb +2 -2
  97. data/lib/hexapdf/font/type1/afm_parser.rb +7 -7
  98. data/lib/hexapdf/font/type1/character_metrics.rb +2 -2
  99. data/lib/hexapdf/font/type1/font.rb +3 -3
  100. data/lib/hexapdf/font/type1/font_metrics.rb +2 -4
  101. data/lib/hexapdf/font/type1/pfb_parser.rb +2 -2
  102. data/lib/hexapdf/font/type1_wrapper.rb +8 -9
  103. data/lib/hexapdf/font_loader.rb +2 -2
  104. data/lib/hexapdf/font_loader/from_configuration.rb +2 -2
  105. data/lib/hexapdf/font_loader/from_file.rb +2 -2
  106. data/lib/hexapdf/font_loader/standard14.rb +2 -2
  107. data/lib/hexapdf/image_loader.rb +2 -2
  108. data/lib/hexapdf/image_loader/jpeg.rb +6 -4
  109. data/lib/hexapdf/image_loader/pdf.rb +2 -2
  110. data/lib/hexapdf/image_loader/png.rb +6 -6
  111. data/lib/hexapdf/importer.rb +6 -4
  112. data/lib/hexapdf/layout.rb +2 -2
  113. data/lib/hexapdf/layout/box.rb +4 -4
  114. data/lib/hexapdf/layout/inline_box.rb +2 -2
  115. data/lib/hexapdf/layout/line.rb +6 -6
  116. data/lib/hexapdf/layout/numeric_refinements.rb +2 -2
  117. data/lib/hexapdf/layout/style.rb +17 -8
  118. data/lib/hexapdf/layout/text_fragment.rb +86 -48
  119. data/lib/hexapdf/layout/text_layouter.rb +40 -21
  120. data/lib/hexapdf/layout/text_shaper.rb +2 -2
  121. data/lib/hexapdf/name_tree_node.rb +2 -2
  122. data/lib/hexapdf/number_tree_node.rb +2 -2
  123. data/lib/hexapdf/object.rb +6 -8
  124. data/lib/hexapdf/parser.rb +10 -10
  125. data/lib/hexapdf/rectangle.rb +4 -4
  126. data/lib/hexapdf/reference.rb +2 -2
  127. data/lib/hexapdf/revision.rb +4 -4
  128. data/lib/hexapdf/revisions.rb +5 -5
  129. data/lib/hexapdf/serializer.rb +27 -24
  130. data/lib/hexapdf/stream.rb +4 -4
  131. data/lib/hexapdf/task.rb +2 -2
  132. data/lib/hexapdf/task/dereference.rb +4 -4
  133. data/lib/hexapdf/task/optimize.rb +5 -4
  134. data/lib/hexapdf/tokenizer.rb +12 -14
  135. data/lib/hexapdf/type.rb +2 -2
  136. data/lib/hexapdf/type/action.rb +3 -3
  137. data/lib/hexapdf/type/actions.rb +2 -2
  138. data/lib/hexapdf/type/actions/go_to.rb +2 -2
  139. data/lib/hexapdf/type/actions/go_to_r.rb +2 -2
  140. data/lib/hexapdf/type/actions/launch.rb +2 -2
  141. data/lib/hexapdf/type/actions/uri.rb +3 -3
  142. data/lib/hexapdf/type/annotation.rb +3 -3
  143. data/lib/hexapdf/type/annotations.rb +2 -2
  144. data/lib/hexapdf/type/annotations/link.rb +2 -2
  145. data/lib/hexapdf/type/annotations/markup_annotation.rb +2 -2
  146. data/lib/hexapdf/type/annotations/text.rb +2 -2
  147. data/lib/hexapdf/type/catalog.rb +4 -4
  148. data/lib/hexapdf/type/cid_font.rb +4 -5
  149. data/lib/hexapdf/type/embedded_file.rb +3 -3
  150. data/lib/hexapdf/type/file_specification.rb +6 -7
  151. data/lib/hexapdf/type/font.rb +4 -4
  152. data/lib/hexapdf/type/font_descriptor.rb +3 -4
  153. data/lib/hexapdf/type/font_simple.rb +12 -16
  154. data/lib/hexapdf/type/font_true_type.rb +2 -2
  155. data/lib/hexapdf/type/font_type0.rb +5 -5
  156. data/lib/hexapdf/type/font_type1.rb +4 -4
  157. data/lib/hexapdf/type/form.rb +3 -3
  158. data/lib/hexapdf/type/graphics_state_parameter.rb +3 -3
  159. data/lib/hexapdf/type/image.rb +13 -14
  160. data/lib/hexapdf/type/info.rb +2 -2
  161. data/lib/hexapdf/type/names.rb +2 -2
  162. data/lib/hexapdf/type/object_stream.rb +5 -5
  163. data/lib/hexapdf/type/page.rb +9 -10
  164. data/lib/hexapdf/type/page_tree_node.rb +5 -6
  165. data/lib/hexapdf/type/resources.rb +11 -11
  166. data/lib/hexapdf/type/trailer.rb +3 -3
  167. data/lib/hexapdf/type/viewer_preferences.rb +2 -2
  168. data/lib/hexapdf/type/xref_stream.rb +8 -4
  169. data/lib/hexapdf/utils/bit_field.rb +4 -4
  170. data/lib/hexapdf/utils/bit_stream.rb +4 -4
  171. data/lib/hexapdf/utils/graphics_helpers.rb +2 -2
  172. data/lib/hexapdf/utils/lru_cache.rb +2 -2
  173. data/lib/hexapdf/utils/math_helpers.rb +2 -2
  174. data/lib/hexapdf/utils/object_hash.rb +3 -3
  175. data/lib/hexapdf/utils/pdf_doc_encoding.rb +3 -3
  176. data/lib/hexapdf/utils/sorted_tree_node.rb +12 -11
  177. data/lib/hexapdf/version.rb +3 -3
  178. data/lib/hexapdf/writer.rb +8 -8
  179. data/lib/hexapdf/xref_section.rb +3 -3
  180. data/test/hexapdf/common_tokenizer_tests.rb +6 -7
  181. data/test/hexapdf/content/graphic_object/test_endpoint_arc.rb +0 -1
  182. data/test/hexapdf/content/test_canvas.rb +28 -36
  183. data/test/hexapdf/content/test_color_space.rb +4 -0
  184. data/test/hexapdf/content/test_graphics_state.rb +2 -0
  185. data/test/hexapdf/content/test_operator.rb +6 -7
  186. data/test/hexapdf/content/test_parser.rb +2 -2
  187. data/test/hexapdf/content/test_processor.rb +1 -1
  188. data/test/hexapdf/document/test_files.rb +1 -0
  189. data/test/hexapdf/document/test_images.rb +1 -1
  190. data/test/hexapdf/encryption/common.rb +3 -3
  191. data/test/hexapdf/encryption/test_aes.rb +10 -4
  192. data/test/hexapdf/encryption/test_identity.rb +1 -1
  193. data/test/hexapdf/encryption/test_security_handler.rb +13 -17
  194. data/test/hexapdf/encryption/test_standard_security_handler.rb +12 -12
  195. data/test/hexapdf/filter/test_ascii85_decode.rb +2 -3
  196. data/test/hexapdf/filter/test_ascii_hex_decode.rb +6 -1
  197. data/test/hexapdf/filter/test_flate_decode.rb +2 -2
  198. data/test/hexapdf/filter/test_lzw_decode.rb +10 -10
  199. data/test/hexapdf/filter/test_predictor.rb +10 -2
  200. data/test/hexapdf/filter/test_run_length_decode.rb +1 -1
  201. data/test/hexapdf/font/cmap/test_parser.rb +40 -40
  202. data/test/hexapdf/font/cmap/test_writer.rb +29 -29
  203. data/test/hexapdf/font/test_true_type_wrapper.rb +3 -2
  204. data/test/hexapdf/font/true_type/common.rb +2 -0
  205. data/test/hexapdf/font/true_type/table/test_cmap.rb +1 -1
  206. data/test/hexapdf/font/true_type/table/test_cmap_subtable.rb +5 -4
  207. data/test/hexapdf/font/true_type/table/test_glyf.rb +2 -2
  208. data/test/hexapdf/font/true_type/table/test_head.rb +2 -2
  209. data/test/hexapdf/font/true_type/table/test_name.rb +9 -6
  210. data/test/hexapdf/font/true_type/test_builder.rb +8 -3
  211. data/test/hexapdf/font/true_type/test_optimizer.rb +1 -2
  212. data/test/hexapdf/font/type1/test_afm_parser.rb +2 -2
  213. data/test/hexapdf/image_loader/test_jpeg.rb +1 -1
  214. data/test/hexapdf/image_loader/test_pdf.rb +1 -1
  215. data/test/hexapdf/image_loader/test_png.rb +3 -3
  216. data/test/hexapdf/layout/test_inline_box.rb +10 -1
  217. data/test/hexapdf/layout/test_line.rb +4 -4
  218. data/test/hexapdf/layout/test_style.rb +19 -7
  219. data/test/hexapdf/layout/test_text_fragment.rb +73 -27
  220. data/test/hexapdf/layout/test_text_layouter.rb +84 -68
  221. data/test/hexapdf/layout/test_text_shaper.rb +4 -6
  222. data/test/hexapdf/task/test_dereference.rb +2 -2
  223. data/test/hexapdf/task/test_optimize.rb +16 -7
  224. data/test/hexapdf/test_configuration.rb +1 -1
  225. data/test/hexapdf/test_data_dir.rb +2 -2
  226. data/test/hexapdf/test_dictionary.rb +6 -3
  227. data/test/hexapdf/test_dictionary_fields.rb +15 -14
  228. data/test/hexapdf/test_document.rb +47 -48
  229. data/test/hexapdf/test_filter.rb +30 -26
  230. data/test/hexapdf/test_importer.rb +14 -0
  231. data/test/hexapdf/test_object.rb +16 -4
  232. data/test/hexapdf/test_parser.rb +36 -36
  233. data/test/hexapdf/test_reference.rb +7 -5
  234. data/test/hexapdf/test_revision.rb +1 -1
  235. data/test/hexapdf/test_revisions.rb +90 -90
  236. data/test/hexapdf/test_serializer.rb +3 -2
  237. data/test/hexapdf/test_stream.rb +2 -4
  238. data/test/hexapdf/test_tokenizer.rb +2 -2
  239. data/test/hexapdf/test_writer.rb +80 -80
  240. data/test/hexapdf/test_xref_section.rb +1 -1
  241. data/test/hexapdf/type/annotations/test_link.rb +1 -1
  242. data/test/hexapdf/type/annotations/test_text.rb +3 -3
  243. data/test/hexapdf/type/test_font_descriptor.rb +1 -1
  244. data/test/hexapdf/type/test_font_simple.rb +2 -2
  245. data/test/hexapdf/type/test_font_type0.rb +0 -1
  246. data/test/hexapdf/type/test_image.rb +0 -3
  247. data/test/hexapdf/type/test_object_stream.rb +2 -1
  248. data/test/hexapdf/type/test_page.rb +5 -1
  249. data/test/hexapdf/type/test_page_tree_node.rb +4 -4
  250. data/test/hexapdf/type/test_trailer.rb +1 -1
  251. data/test/hexapdf/type/test_xref_stream.rb +4 -0
  252. data/test/hexapdf/utils/test_bit_field.rb +2 -0
  253. data/test/hexapdf/utils/test_bit_stream.rb +1 -1
  254. data/test/hexapdf/utils/test_lru_cache.rb +1 -1
  255. data/test/hexapdf/utils/test_sorted_tree_node.rb +10 -4
  256. data/test/test_helper.rb +3 -6
  257. metadata +3 -3
@@ -1,10 +1,10 @@
1
- # -*- encoding: utf-8 -*-
1
+ # -*- encoding: utf-8; frozen_string_literal: true -*-
2
2
  #
3
3
  #--
4
4
  # This file is part of HexaPDF.
5
5
  #
6
6
  # HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
7
- # Copyright (C) 2014-2017 Thomas Leitner
7
+ # Copyright (C) 2014-2018 Thomas Leitner
8
8
  #
9
9
  # HexaPDF is free software: you can redistribute it and/or modify it
10
10
  # under the terms of the GNU Affero General Public License version 3 as
@@ -70,8 +70,8 @@ module HexaPDF
70
70
  end
71
71
  result
72
72
  end
73
- alias :decrypt :process
74
- alias :encrypt :process
73
+ alias decrypt process
74
+ alias encrypt process
75
75
 
76
76
  private
77
77
 
@@ -1,10 +1,10 @@
1
- # -*- encoding: utf-8 -*-
1
+ # -*- encoding: utf-8; frozen_string_literal: true -*-
2
2
  #
3
3
  #--
4
4
  # This file is part of HexaPDF.
5
5
  #
6
6
  # HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
7
- # Copyright (C) 2014-2017 Thomas Leitner
7
+ # Copyright (C) 2014-2018 Thomas Leitner
8
8
  #
9
9
  # HexaPDF is free software: you can redistribute it and/or modify it
10
10
  # under the terms of the GNU Affero General Public License version 3 as
@@ -144,12 +144,12 @@ module HexaPDF
144
144
  # Creates a new encrypted stream data object by utilizing the given stream data object as
145
145
  # template. The arguments +key+ and +algorithm+ are used for decrypting purposes.
146
146
  def initialize(obj, key, algorithm)
147
- obj.instance_variables.each {|v| instance_variable_set(v, obj.instance_variable_get(v))}
147
+ obj.instance_variables.each {|v| instance_variable_set(v, obj.instance_variable_get(v)) }
148
148
  @key = key
149
149
  @algorithm = algorithm
150
150
  end
151
151
 
152
- alias :undecrypted_fiber :fiber
152
+ alias undecrypted_fiber fiber
153
153
 
154
154
  # Returns a fiber like HexaPDF::StreamData#fiber, but one wrapped in a decrypting fiber.
155
155
  def fiber(*args)
@@ -215,7 +215,6 @@ module HexaPDF
215
215
  handler.freeze
216
216
  end
217
217
 
218
-
219
218
  # A hash containing information about the used encryption. This information is only
220
219
  # available once the security handler has been set up for decryption or encryption.
221
220
  #
@@ -310,11 +309,11 @@ module HexaPDF
310
309
  # The encryption algorithm. Possible values are :arc4 for ARC4 encryption with key lengths
311
310
  # of 40 to 128 bit or :aes for AES encryption with key lengths of 128 or 256 bit.
312
311
  #
313
- # force_V4::
312
+ # force_v4::
314
313
  # Forces the use of protocol version 4 when key_length=128 and algorithm=:arc4.
315
314
  #
316
315
  # See: PDF1.7 s7.6.1, PDF2.0 s7.6.1
317
- def set_up_encryption(key_length: 128, algorithm: :aes, force_V4: false, **options)
316
+ def set_up_encryption(key_length: 128, algorithm: :aes, force_v4: false, **options)
318
317
  @dict = document.wrap({}, type: encryption_dictionary_class)
319
318
 
320
319
  dict[:V] =
@@ -324,7 +323,7 @@ module HexaPDF
324
323
  when 48, 56, 64, 72, 80, 88, 96, 104, 112, 120
325
324
  2
326
325
  when 128
327
- (algorithm == :aes || force_V4 ? 4 : 2)
326
+ (algorithm == :aes || force_v4 ? 4 : 2)
328
327
  when 256
329
328
  5
330
329
  else
@@ -473,8 +472,8 @@ module HexaPDF
473
472
  key = encryption_key
474
473
  return key if dict[:V] == 5
475
474
 
476
- key += [oid, gen].pack('VXv'.freeze)
477
- key << "sAlT".freeze if algorithm.ancestors.include?(AES)
475
+ key += [oid, gen].pack('VXv')
476
+ key << "sAlT" if algorithm.ancestors.include?(AES)
478
477
  n_plus_5 = key_length + 5
479
478
  Digest::MD5.digest(key)[0, (n_plus_5 > 16 ? 16 : n_plus_5)]
480
479
  end
@@ -508,9 +507,9 @@ module HexaPDF
508
507
  def each_string_in_object(obj, &block) # :yields: str
509
508
  case obj
510
509
  when Hash
511
- obj.each_value {|val| each_string_in_object(val, &block)}
510
+ obj.each_value {|val| each_string_in_object(val, &block) }
512
511
  when Array
513
- obj.each {|inner_o| each_string_in_object(inner_o, &block)}
512
+ obj.each {|inner_o| each_string_in_object(inner_o, &block) }
514
513
  when String
515
514
  yield(obj)
516
515
  end
@@ -1,10 +1,10 @@
1
- # -*- encoding: utf-8 -*-
1
+ # -*- encoding: utf-8; frozen_string_literal: true -*-
2
2
  #
3
3
  #--
4
4
  # This file is part of HexaPDF.
5
5
  #
6
6
  # HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
7
- # Copyright (C) 2014-2017 Thomas Leitner
7
+ # Copyright (C) 2014-2018 Thomas Leitner
8
8
  #
9
9
  # HexaPDF is free software: you can redistribute it and/or modify it
10
10
  # under the terms of the GNU Affero General Public License version 3 as
@@ -78,7 +78,6 @@ module HexaPDF
78
78
 
79
79
  end
80
80
 
81
-
82
81
  # The password-based standard security handler of the PDF specification, identified by a
83
82
  # /Filter value of /Standard.
84
83
  #
@@ -99,7 +98,6 @@ module HexaPDF
99
98
  # See: PDF1.7 s7.6.3, PDF2.0 s7.6.3
100
99
  class StandardSecurityHandler < SecurityHandler
101
100
 
102
-
103
101
  # Defines all available permissions.
104
102
  #
105
103
  # It is possible to use an array of permission symbols instead of an integer to describe the
@@ -168,7 +166,6 @@ module HexaPDF
168
166
 
169
167
  end
170
168
 
171
-
172
169
  # Defines all possible options that can be passed to a StandardSecurityHandler when setting
173
170
  # up encryption.
174
171
  class EncryptionOptions
@@ -202,7 +199,7 @@ module HexaPDF
202
199
  @permissions = process_permissions(data.delete(:permissions) { Permissions::ALL })
203
200
  @algorithm = data.delete(:algorithm) { :arc4 }
204
201
  @encrypt_metadata = data.delete(:encrypt_metadata) { true }
205
- if data.size > 0
202
+ unless data.empty?
206
203
  raise ArgumentError, "Invalid encryption options: #{data.keys.join(', ')}"
207
204
  end
208
205
  end
@@ -420,7 +417,7 @@ module HexaPDF
420
417
 
421
418
  data = arc4_algorithm.encrypt(key, user_password)
422
419
  if dict[:R] >= 3
423
- 19.times {|i| data = arc4_algorithm.encrypt(xor_key(key, i + 1), data)}
420
+ 19.times {|i| data = arc4_algorithm.encrypt(xor_key(key, i + 1), data) }
424
421
  end
425
422
 
426
423
  data
@@ -459,7 +456,7 @@ module HexaPDF
459
456
  key = compute_user_encryption_key(password)
460
457
  data = Digest::MD5.digest(PASSWORD_PADDING + document.trailer[:ID][0])
461
458
  data = arc4_algorithm.encrypt(key, data)
462
- 19.times {|i| data = arc4_algorithm.encrypt(xor_key(key, i + 1), data)}
459
+ 19.times {|i| data = arc4_algorithm.encrypt(xor_key(key, i + 1), data) }
463
460
  data << "hexapdfhexapdfhe"
464
461
  elsif dict[:R] == 6
465
462
  validation_salt = random_bytes(8)
@@ -548,7 +545,7 @@ module HexaPDF
548
545
  userpwd = arc4_algorithm.decrypt(key, dict[:O])
549
546
  else
550
547
  userpwd = dict[:O]
551
- 20.times {|i| userpwd = arc4_algorithm.decrypt(xor_key(key, 19 - i), userpwd)}
548
+ 20.times {|i| userpwd = arc4_algorithm.decrypt(xor_key(key, 19 - i), userpwd) }
552
549
  end
553
550
 
554
551
  userpwd
data/lib/hexapdf/error.rb CHANGED
@@ -1,10 +1,10 @@
1
- # -*- encoding: utf-8 -*-
1
+ # -*- encoding: utf-8; frozen_string_literal: true -*-
2
2
  #
3
3
  #--
4
4
  # This file is part of HexaPDF.
5
5
  #
6
6
  # HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
7
- # Copyright (C) 2014-2017 Thomas Leitner
7
+ # Copyright (C) 2014-2018 Thomas Leitner
8
8
  #
9
9
  # HexaPDF is free software: you can redistribute it and/or modify it
10
10
  # under the terms of the GNU Affero General Public License version 3 as
@@ -42,18 +42,16 @@ module HexaPDF
42
42
  # The byte position in the PDF file where the error occured.
43
43
  attr_reader :pos
44
44
 
45
- # Creates a new malformed PDF error object for the given exception or exception message.
45
+ # Creates a new malformed PDF error object for the given exception message.
46
46
  #
47
- # The byte position where the error occured can be given via the optional +pos+ argument.
48
- def initialize(msg_or_error, pos: nil)
49
- super(msg_or_error)
50
- set_backtrace(msg_or_error.backtrace) if msg_or_error.kind_of?(Exception)
47
+ # The byte position where the error occured has to be given via the +pos+ argument.
48
+ def initialize(message, pos:)
49
+ super(message)
51
50
  @pos = pos
52
51
  end
53
52
 
54
53
  def message # :nodoc:
55
- pos_msg = @pos.nil? ? '' : " around position #{pos}"
56
- "PDF malformed#{pos_msg}: #{super}"
54
+ "PDF malformed around position #{pos}: #{super}"
57
55
  end
58
56
 
59
57
  end
@@ -1,10 +1,10 @@
1
- # -*- encoding: utf-8 -*-
1
+ # -*- encoding: utf-8; frozen_string_literal: true -*-
2
2
  #
3
3
  #--
4
4
  # This file is part of HexaPDF.
5
5
  #
6
6
  # HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
7
- # Copyright (C) 2014-2017 Thomas Leitner
7
+ # Copyright (C) 2014-2018 Thomas Leitner
8
8
  #
9
9
  # HexaPDF is free software: you can redistribute it and/or modify it
10
10
  # under the terms of the GNU Affero General Public License version 3 as
@@ -52,7 +52,6 @@ module HexaPDF
52
52
 
53
53
  end
54
54
 
55
-
56
55
  # == Overview
57
56
  #
58
57
  # A stream filter is used to compress a stream or to encode it in an ASCII compatible way; or
@@ -1,10 +1,10 @@
1
- # -*- encoding: utf-8 -*-
1
+ # -*- encoding: utf-8; frozen_string_literal: true -*-
2
2
  #
3
3
  #--
4
4
  # This file is part of HexaPDF.
5
5
  #
6
6
  # HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
7
- # Copyright (C) 2014-2017 Thomas Leitner
7
+ # Copyright (C) 2014-2018 Thomas Leitner
8
8
  #
9
9
  # HexaPDF is free software: you can redistribute it and/or modify it
10
10
  # under the terms of the GNU Affero General Public License version 3 as
@@ -149,7 +149,7 @@ module HexaPDF
149
149
  VALUE_TO_CHAR[num / POW85_2 % 85] << VALUE_TO_CHAR[num / POW85_1 % 85] <<
150
150
  VALUE_TO_CHAR[num % 85])[0, rlen + 1] << "~>").force_encoding(Encoding::BINARY)
151
151
  else
152
- "~>".force_encoding(Encoding::BINARY)
152
+ "~>".b
153
153
  end
154
154
  end
155
155
  end
@@ -1,10 +1,10 @@
1
- # -*- encoding: utf-8 -*-
1
+ # -*- encoding: utf-8; frozen_string_literal: true -*-
2
2
  #
3
3
  #--
4
4
  # This file is part of HexaPDF.
5
5
  #
6
6
  # HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
7
- # Copyright (C) 2014-2017 Thomas Leitner
7
+ # Copyright (C) 2014-2018 Thomas Leitner
8
8
  #
9
9
  # HexaPDF is free software: you can redistribute it and/or modify it
10
10
  # under the terms of the GNU Affero General Public License version 3 as
@@ -1,10 +1,10 @@
1
- # -*- encoding: utf-8 -*-
1
+ # -*- encoding: utf-8; frozen_string_literal: true -*-
2
2
  #
3
3
  #--
4
4
  # This file is part of HexaPDF.
5
5
  #
6
6
  # HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
7
- # Copyright (C) 2014-2017 Thomas Leitner
7
+ # Copyright (C) 2014-2018 Thomas Leitner
8
8
  #
9
9
  # HexaPDF is free software: you can redistribute it and/or modify it
10
10
  # under the terms of the GNU Affero General Public License version 3 as
@@ -1,10 +1,10 @@
1
- # -*- encoding: utf-8 -*-
1
+ # -*- encoding: utf-8; frozen_string_literal: true -*-
2
2
  #
3
3
  #--
4
4
  # This file is part of HexaPDF.
5
5
  #
6
6
  # HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
7
- # Copyright (C) 2014-2017 Thomas Leitner
7
+ # Copyright (C) 2014-2018 Thomas Leitner
8
8
  #
9
9
  # HexaPDF is free software: you can redistribute it and/or modify it
10
10
  # under the terms of the GNU Affero General Public License version 3 as
@@ -1,10 +1,10 @@
1
- # -*- encoding: utf-8 -*-
1
+ # -*- encoding: utf-8; frozen_string_literal: true -*-
2
2
  #
3
3
  #--
4
4
  # This file is part of HexaPDF.
5
5
  #
6
6
  # HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
7
- # Copyright (C) 2014-2017 Thomas Leitner
7
+ # Copyright (C) 2014-2018 Thomas Leitner
8
8
  #
9
9
  # HexaPDF is free software: you can redistribute it and/or modify it
10
10
  # under the terms of the GNU Affero General Public License version 3 as
@@ -45,45 +45,24 @@ module HexaPDF
45
45
  # See: HexaPDF::Filter, PDF1.7 s7.4.4
46
46
  module FlateDecode
47
47
 
48
- class Pool #:nodoc:
49
-
50
- # Creates a new Zlib::Stream pool. A block must be given that returns a new Zlib::Stream
51
- # instance.
52
- def initialize(&block)
53
- @creator = block
54
- @pool = []
55
- end
56
-
57
- # Returns the next available stream of the pool, already reset to its initial state.
58
- def next_available
59
- @pool.find(-> { e = @creator.call; @pool << e; e }, &:finished?).tap(&:reset)
60
- end
61
-
62
- end
63
-
64
- @inflate_pool = Pool.new { Zlib::Inflate.new }
65
- @deflate_pool = Pool.new do
66
- Zlib::Deflate.new(HexaPDF::GlobalConfiguration['filter.flate_compression'],
67
- Zlib::MAX_WBITS,
68
- HexaPDF::GlobalConfiguration['filter.flate_memory'])
69
- end
70
-
71
48
  # See HexaPDF::Filter
72
49
  def self.decoder(source, options = nil)
73
50
  fib = Fiber.new do
74
- inflater = @inflate_pool.next_available
51
+ inflater = Zlib::Inflate.new
75
52
  while source.alive? && (data = source.resume)
76
53
  begin
77
54
  data = inflater.inflate(data)
78
- rescue
79
- raise FilterError, "Problem while decoding Flate encoded stream: #{$!}"
55
+ rescue StandardError => e
56
+ raise FilterError, "Problem while decoding Flate encoded stream: #{e}"
80
57
  end
81
58
  Fiber.yield(data)
82
59
  end
83
60
  begin
84
- (data = inflater.finish).empty? ? nil : data
85
- rescue
86
- raise FilterError, "Problem while decoding Flate encoded stream: #{$!}"
61
+ data = (data = inflater.finish).empty? ? nil : data
62
+ inflater.close
63
+ data
64
+ rescue StandardError => e
65
+ raise FilterError, "Problem while decoding Flate encoded stream: #{e}"
87
66
  end
88
67
  end
89
68
 
@@ -101,12 +80,16 @@ module HexaPDF
101
80
  end
102
81
 
103
82
  Fiber.new do
104
- deflater = @deflate_pool.next_available
83
+ deflater = Zlib::Deflate.new(HexaPDF::GlobalConfiguration['filter.flate_compression'],
84
+ Zlib::MAX_WBITS,
85
+ HexaPDF::GlobalConfiguration['filter.flate_memory'])
105
86
  while source.alive? && (data = source.resume)
106
87
  data = deflater.deflate(data)
107
88
  Fiber.yield(data)
108
89
  end
109
- deflater.finish
90
+ data = deflater.finish
91
+ deflater.close
92
+ data
110
93
  end
111
94
  end
112
95
 
@@ -1,10 +1,10 @@
1
- # -*- encoding: utf-8 -*-
1
+ # -*- encoding: utf-8; frozen_string_literal: true -*-
2
2
  #
3
3
  #--
4
4
  # This file is part of HexaPDF.
5
5
  #
6
6
  # HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
7
- # Copyright (C) 2014-2017 Thomas Leitner
7
+ # Copyright (C) 2014-2018 Thomas Leitner
8
8
  #
9
9
  # HexaPDF is free software: you can redistribute it and/or modify it
10
10
  # under the terms of the GNU Affero General Public License version 3 as
@@ -1,10 +1,10 @@
1
- # -*- encoding: utf-8 -*-
1
+ # -*- encoding: utf-8; frozen_string_literal: true -*-
2
2
  #
3
3
  #--
4
4
  # This file is part of HexaPDF.
5
5
  #
6
6
  # HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
7
- # Copyright (C) 2014-2017 Thomas Leitner
7
+ # Copyright (C) 2014-2018 Thomas Leitner
8
8
  #
9
9
  # HexaPDF is free software: you can redistribute it and/or modify it
10
10
  # under the terms of the GNU Affero General Public License version 3 as
@@ -52,12 +52,12 @@ module HexaPDF
52
52
  EOD = 257 # :nodoc:
53
53
 
54
54
  INITIAL_ENCODER_TABLE = {} #:nodoc:
55
- 0.upto(255) {|i| INITIAL_ENCODER_TABLE[i.chr.freeze] = i}
55
+ 0.upto(255) {|i| INITIAL_ENCODER_TABLE[i.chr.freeze] = i }
56
56
  INITIAL_ENCODER_TABLE[CLEAR_TABLE] = CLEAR_TABLE
57
57
  INITIAL_ENCODER_TABLE[EOD] = EOD
58
58
 
59
59
  INITIAL_DECODER_TABLE = {} #:nodoc:
60
- 0.upto(255) {|i| INITIAL_DECODER_TABLE[i] = i.chr}
60
+ 0.upto(255) {|i| INITIAL_DECODER_TABLE[i] = i.chr }
61
61
  INITIAL_DECODER_TABLE[CLEAR_TABLE] = CLEAR_TABLE
62
62
  INITIAL_DECODER_TABLE[EOD] = EOD
63
63
 
@@ -1,10 +1,10 @@
1
- # -*- encoding: utf-8 -*-
1
+ # -*- encoding: utf-8; frozen_string_literal: true -*-
2
2
  #
3
3
  #--
4
4
  # This file is part of HexaPDF.
5
5
  #
6
6
  # HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
7
- # Copyright (C) 2014-2017 Thomas Leitner
7
+ # Copyright (C) 2014-2018 Thomas Leitner
8
8
  #
9
9
  # HexaPDF is free software: you can redistribute it and/or modify it
10
10
  # under the terms of the GNU Affero General Public License version 3 as
@@ -161,8 +161,6 @@ module HexaPDF
161
161
  line = data[pos + 1, bytes_per_row - 1]
162
162
 
163
163
  case data.getbyte(pos)
164
- when PREDICTOR_PNG_NONE
165
- # nothing to do
166
164
  when PREDICTOR_PNG_SUB
167
165
  bytes_per_pixel.upto(bytes_per_row - 2) do |i|
168
166
  line.setbyte(i, line.getbyte(i) + line.getbyte(i - bytes_per_pixel))
@@ -202,8 +200,6 @@ module HexaPDF
202
200
  next_last_line = line.dup
203
201
 
204
202
  case predictor
205
- when PREDICTOR_PNG_NONE
206
- # nothing to do
207
203
  when PREDICTOR_PNG_SUB
208
204
  bytes_per_row.downto(bytes_per_pixel + 1) do |i|
209
205
  line.setbyte(i, line.getbyte(i) - line.getbyte(i - bytes_per_pixel))