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
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 401d9b20b7b9305c334bad4951cb403ea6f4c919
4
- data.tar.gz: 40cd8335bd517c1f772c3a26ebf8bb0c7a257492
2
+ SHA256:
3
+ metadata.gz: ffd1dd41128f1ef75e1caf26f415e908509f881bfdf1595da9b45c633c26bb59
4
+ data.tar.gz: ef1ae7147fa94bcf361beae3a340acdd1f6f2a72cc3fdbad0d5e46766957c9b7
5
5
  SHA512:
6
- metadata.gz: 1697291f44f1b7882d0b489af252b8b9cdcaae9416c770f88f325833e75f18ac6d1ef0f8fd03a47af76f1b1451475a97993f97381117e3d3c4df6a592b1e4d4d
7
- data.tar.gz: a52680e4ad7f3a7568115e8d4657a1c934f9273e0ef513b023d48570d887ba4b748be4ac91ed2162a0d88f07ca08e63ae7dba7b1fa8c33692e7d6e8bc63dd09d
6
+ metadata.gz: dc5242710665cf697db8085fcaf0e5096fce0179308a427e4dccbba3a9067db7713a22f1e83a6732ba943b4aa120eb1df69472b32fdcbae7f430c2cfc7364250
7
+ data.tar.gz: b700fb5ce735aa6ff38cb33b88f37cb4a7eece29979f0be5abaab884f8aef2f1fcf23336b47e9218ea237d04d27012a46df3fd5154f92b33b6a635d31139a180
data/CHANGELOG.md CHANGED
@@ -1,3 +1,36 @@
1
+ ## 0.7.0 - 2018-06-19
2
+
3
+ ### Changed
4
+
5
+ * All Ruby source files use frozen string literal pragma
6
+ * [HexaPDF::MalformedPDFError::new] method signature
7
+ * [HexaPDF::Layout::TextFragment::new] and
8
+ [HexaPDF::Layout::TextFragment::create] method signatures
9
+ * [HexaPDF::Encryption::SecurityHandler#set_up_encryption] argument `force_V4`
10
+ to `force_v4`
11
+ * [HexaPDF::Layout::TextLayouter#draw] to return result of #fit if possible
12
+
13
+ ### Removed
14
+
15
+ * Optional `leading` argument to HexaPDF::Content::Canvas#font_size method
16
+
17
+ ### Fixed
18
+
19
+ * Misspelt variable name in [HexaPDF::Layout::TextLayouter::SimpleLineWrapping]
20
+ * [HexaPDF::Layout::TextLayouter::SimpleTextSegmentation] to work if the last
21
+ character in a text fragment is \r
22
+ * [HexaPDF::Layout::TextLayouter] to work if an optional break point (think
23
+ soft-hyphen) is followed by whitespace
24
+ * [HexaPDF::Font::TrueType::Builder] to correctly order the entries in the
25
+ table directory
26
+ * [HexaPDF::Font::TrueType::Builder] to pad the table data to achieve the
27
+ correct alignment
28
+ * [HexaPDF::Filter::FlateDecode] by removing the Zlib pools since ther were
29
+ not thread safe
30
+ * All color space classes to accept the color space definition as argument to
31
+ `::new`
32
+
33
+
1
34
  ## 0.6.0 - 2017-10-27
2
35
 
3
36
  ### Added
data/CONTRIBUTERS CHANGED
@@ -1,3 +1,3 @@
1
1
  Count Name
2
2
  ======= ====
3
- 882 Thomas Leitner <t_leitner@gmx.at>
3
+ 928 Thomas Leitner <t_leitner@gmx.at>
data/LICENSE CHANGED
@@ -1,5 +1,5 @@
1
1
  HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby
2
- Copyright (C) 2014-2017 Thomas Leitner
2
+ Copyright (C) 2014-2018 Thomas Leitner
3
3
 
4
4
  HexaPDF is free software: you can redistribute it and/or modify it
5
5
  under the terms of the GNU Affero General Public License version 3 as
data/Rakefile CHANGED
@@ -94,7 +94,7 @@ namespace :dev do
94
94
  File.open("hexapdf.gemspec", 'w+') {|f| f.puts(contents)}
95
95
  end
96
96
 
97
- CODING_LINE = "# -*- encoding: utf-8 -*-\n"
97
+ CODING_LINE = "# -*- encoding: utf-8; frozen_string_literal: true -*-\n"
98
98
 
99
99
  desc "Insert/Update copyright notice"
100
100
  task :update_copyright do
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.0
1
+ 0.7.0
data/bin/hexapdf CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'hexapdf/cli'
4
5
 
5
6
  HexaPDF::CLI.run
6
-
@@ -25,8 +25,7 @@ in voluptate velit esse cillum dolore eu fugiat nulla pariatur.".tr("\n", ' ')
25
25
 
26
26
  # Wraps the text in a TextFragment using the given style.
27
27
  def fragment(text, style)
28
- style = Style.new(style)
29
- TextFragment.new(items: style.font.decode_utf8(text), style: style)
28
+ TextFragment.create(text, style)
30
29
  end
31
30
 
32
31
  # Draws the text at the given [x, y] position onto the canvas and returns the
data/lib/hexapdf.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
data/lib/hexapdf/cli.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
@@ -52,7 +52,7 @@ module HexaPDF
52
52
  # Runs the CLI application.
53
53
  def self.run(args = ARGV)
54
54
  Application.new.parse(args)
55
- rescue => e
55
+ rescue StandardError => e
56
56
  $stderr.puts "Problem encountered: #{e.message}"
57
57
  exit(1)
58
58
  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
@@ -43,7 +43,7 @@ module HexaPDF
43
43
  def initialize #:nodoc:
44
44
  super('batch', takes_commands: false)
45
45
  short_desc("Execute a single command on multiple files")
46
- long_desc(<<-EOF.gsub!(/^ */, ''))
46
+ long_desc(<<~EOF)
47
47
  This command allows executing a single command for multiple input files, thereby reducing
48
48
  the overall execution time.
49
49
 
@@ -57,8 +57,8 @@ module HexaPDF
57
57
  args = Shellwords.split(command)
58
58
  files.each do |file|
59
59
  begin
60
- HexaPDF::CLI::Application.new.parse(args.map {|a| a.gsub(/{}/, file)})
61
- rescue
60
+ HexaPDF::CLI::Application.new.parse(args.map {|a| a.gsub(/{}/, file) })
61
+ rescue StandardError
62
62
  if command_parser.verbosity_warning?
63
63
  $stderr.puts "Error processing '#{file}': #{$!.message}"
64
64
  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
@@ -47,8 +47,8 @@ module HexaPDF
47
47
  module Extensions #:nodoc:
48
48
  def help_banner #:nodoc:
49
49
  "hexapdf #{HexaPDF::VERSION} - Versatile PDF Manipulation Tool\n" \
50
- "Copyright (c) 2014-2017 Thomas Leitner; licensed under the AGPLv3\n\n" <<
51
- format(usage, indent: 7) << "\n\n"
50
+ "Copyright (c) 2014-2017 Thomas Leitner; licensed under the AGPLv3\n\n" \
51
+ "#{format(usage, indent: 7)}\n\n"
52
52
  end
53
53
  end
54
54
 
@@ -243,7 +243,7 @@ module HexaPDF
243
243
  # Applies the chosen stream mode to the given object.
244
244
  def optimize_stream(obj)
245
245
  return if @out_options.streams == :preserve || !obj.respond_to?(:set_filter) ||
246
- Array(obj[:Filter]).any? {|f| IGNORED_FILTERS[f]}
246
+ Array(obj[:Filter]).any? {|f| IGNORED_FILTERS[f] }
247
247
 
248
248
  obj.set_filter(@out_options.streams == :compress ? :FlateDecode : nil)
249
249
  end
@@ -251,9 +251,9 @@ module HexaPDF
251
251
  # Optimize the object if it is a font object.
252
252
  def optimize_font(obj)
253
253
  return unless @out_options.optimize_fonts && obj.kind_of?(HexaPDF::Type::Font) &&
254
- (obj[:Subtype] == :TrueType ||
255
- (obj[:Subtype] == :Type0 && obj.descendant_font[:Subtype] == :CIDFontType2)) &&
256
- obj.embedded?
254
+ (obj[:Subtype] == :TrueType ||
255
+ (obj[:Subtype] == :Type0 && obj.descendant_font[:Subtype] == :CIDFontType2)) &&
256
+ obj.embedded?
257
257
 
258
258
  font = HexaPDF::Font::TrueType::Font.new(StringIO.new(obj.font_file.stream))
259
259
  data = HexaPDF::Font::TrueType::Optimizer.build_for_pdf(font)
@@ -268,7 +268,7 @@ module HexaPDF
268
268
  if @out_options.encryption == :add
269
269
  doc.encrypt(algorithm: @out_options.enc_algorithm,
270
270
  key_length: @out_options.enc_key_length,
271
- force_V4: @out_options.enc_force_v4,
271
+ force_v4: @out_options.enc_force_v4,
272
272
  permissions: @out_options.enc_permissions,
273
273
  owner_password: @out_options.enc_owner_pwd,
274
274
  user_password: @out_options.enc_user_pwd)
@@ -277,7 +277,7 @@ module HexaPDF
277
277
  end
278
278
  end
279
279
 
280
- PAGE_NUMBER_SPEC = "([1-9]\\d*|e)".freeze #:nodoc:
280
+ PAGE_NUMBER_SPEC = "([1-9]\\d*|e)" #:nodoc:
281
281
  ROTATE_MAP = {'l' => -90, 'r' => 90, 'd' => 180, 'n' => :none}.freeze #:nodoc:
282
282
 
283
283
  # Parses the pages specification string and returns an array of tuples containing a page
@@ -295,12 +295,12 @@ module HexaPDF
295
295
  page_num = ($1 == 'e' ? count : str.to_i)
296
296
  next if page_num > count
297
297
  arr << [page_num - 1, ROTATE_MAP[$2]]
298
- when /\A#{PAGE_NUMBER_SPEC}-#{PAGE_NUMBER_SPEC}(?:\/([1-9]\d*))?(l|r|d|n)?\z/
298
+ when /\A#{PAGE_NUMBER_SPEC}-#{PAGE_NUMBER_SPEC}(?:\/([1-9]\d*))?(l|r|d|n)?\z/o
299
299
  start_nr = ($1 == 'e' ? count : [$1.to_i, count].min) - 1
300
300
  end_nr = ($2 == 'e' ? count : [$2.to_i, count].min) - 1
301
301
  step = ($3 ? $3.to_i : 1) * (start_nr > end_nr ? -1 : 1)
302
302
  rotation = ROTATE_MAP[$4]
303
- start_nr.step(to: end_nr, by: step) {|n| arr << [n, rotation]}
303
+ start_nr.step(to: end_nr, by: step) {|n| arr << [n, rotation] }
304
304
  else
305
305
  raise OptionParser::InvalidArgument, "invalid page range format: #{str}"
306
306
  end
@@ -315,15 +315,13 @@ module HexaPDF
315
315
  if $stdin.tty?
316
316
  read_from_console(prompt)
317
317
  else
318
- pwd = $stdin.gets
319
- pwd = read_from_console(prompt) unless pwd
320
- pwd.chomp
318
+ ($stdin.gets || read_from_console(prompt)).chomp
321
319
  end
322
320
  end
323
321
 
324
322
  # Removes unused pages and page tree nodes from the document.
325
323
  def remove_unused_pages(doc)
326
- retained = doc.pages.each_with_object({}) {|page, h| h[page.data] = true}
324
+ retained = doc.pages.each_with_object({}) {|page, h| h[page.data] = true }
327
325
  retained[doc.pages.root.data] = true
328
326
  doc.each(current: false) do |obj|
329
327
  next unless obj.kind_of?(HexaPDF::Dictionary)
@@ -338,7 +336,7 @@ module HexaPDF
338
336
  # Displays the given prompt, reads from the console without echo and returns the read string.
339
337
  def read_from_console(prompt)
340
338
  IO.console.write("#{prompt}: ")
341
- str = IO.console.noecho {|io| io.gets.chomp}
339
+ str = IO.console.noecho {|io| io.gets.chomp }
342
340
  puts
343
341
  str
344
342
  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
@@ -44,7 +44,7 @@ module HexaPDF
44
44
  def initialize #:nodoc:
45
45
  super('files', takes_commands: false)
46
46
  short_desc("List or extract embedded files from a PDF file")
47
- long_desc(<<-EOF.gsub!(/^ */, ''))
47
+ long_desc(<<~EOF)
48
48
  If the option --extract is not given, the available files are listed with their names and
49
49
  indices. The --extract option can then be used to extract one or more files.
50
50
  EOF
@@ -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,7 +45,7 @@ module HexaPDF
45
45
  def initialize #:nodoc:
46
46
  super('images', takes_commands: false)
47
47
  short_desc("List or extract images from a PDF file")
48
- long_desc(<<-EOF.gsub!(/^ */, ''))
48
+ long_desc(<<~EOF)
49
49
  If the option --extract is not given, the available images are listed with their index and
50
50
  additional information, sorted by page number. The --extract option can then be used to
51
51
  extract one or more images, saving them to files called `prefix-n.ext` where the prefix
@@ -104,7 +104,6 @@ module HexaPDF
104
104
  end
105
105
  end
106
106
 
107
-
108
107
  # Extracts the images with the given indices.
109
108
  def extract_images(doc)
110
109
  done = Set.new
@@ -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
@@ -49,7 +49,7 @@ module HexaPDF
49
49
  def initialize #:nodoc:
50
50
  super('info', takes_commands: false)
51
51
  short_desc("Show document information")
52
- long_desc(<<-EOF.gsub!(/^ */, ''))
52
+ long_desc(<<~EOF)
53
53
  This command extracts information from the Info dictionary of a PDF file as well
54
54
  as some other useful information like the used PDF version and encryption information.
55
55
  EOF
@@ -78,10 +78,10 @@ module HexaPDF
78
78
  HexaPDF::Document.open(file, options) do |doc|
79
79
  output_line("File name", file)
80
80
  output_line("File size", File.stat(file).size.to_s + " bytes")
81
- INFO_KEYS.each do |name|
81
+ @auto_decrypt && INFO_KEYS.each do |name|
82
82
  next unless doc.trailer.info.key?(name)
83
83
  output_line(name.to_s, doc.trailer.info[name].to_s)
84
- end if @auto_decrypt
84
+ end
85
85
 
86
86
  if doc.encrypted? && @auto_decrypt
87
87
  details = doc.security_handler.encryption_details
@@ -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,7 +42,7 @@ module HexaPDF
42
42
  def initialize #:nodoc:
43
43
  super('inspect', takes_commands: false)
44
44
  short_desc("Dig into the internal structure of a PDF file")
45
- long_desc(<<-EOF.gsub!(/^ */, ''))
45
+ long_desc(<<~EOF)
46
46
  Inspects a PDF file for debugging or testing purposes. This command is useful when one
47
47
  needs to inspect the internal object structure or a stream of a PDF file. A PDF object is
48
48
  always shown in the PDF syntax.
@@ -94,7 +94,7 @@ module HexaPDF
94
94
  end
95
95
 
96
96
  def execute(file) #:nodoc:
97
- with_document(file, password: @password) {|doc| send("do_#{@exec}", doc)}
97
+ with_document(file, password: @password) {|doc| send("do_#{@exec}", doc) }
98
98
  end
99
99
 
100
100
  private
@@ -116,8 +116,8 @@ module HexaPDF
116
116
  page_list = doc.pages.to_a
117
117
  pages.each do |index, _|
118
118
  page = page_list[index]
119
- str = "page #{index + 1} (#{page.oid},#{page.gen}): "
120
- str << Array(page[:Contents]).map {|c| "#{c.oid},#{c.gen}"}.join(" ")
119
+ str = +"page #{index + 1} (#{page.oid},#{page.gen}): "
120
+ str << Array(page[:Contents]).map {|c| "#{c.oid},#{c.gen}" }.join(" ")
121
121
  puts str
122
122
  end
123
123
  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
@@ -44,7 +44,7 @@ module HexaPDF
44
44
  def initialize #:nodoc:
45
45
  super('merge', takes_commands: false)
46
46
  short_desc("Merge multiple PDF files")
47
- long_desc(<<-EOF.gsub!(/^ */, ''))
47
+ long_desc(<<~EOF)
48
48
  This command merges pages from multiple PDFs into one output file which can optionally be
49
49
  encrypted/decrypted and optimized in various ways.
50
50
 
@@ -144,14 +144,14 @@ module HexaPDF
144
144
  @files.each do |s|
145
145
  page_list = s.file.pages.to_a
146
146
  s.pages = parse_pages_specification(s.pages, s.file.pages.count)
147
- s.pages.each {|arr| arr[0] = page_list[arr[0]]}
147
+ s.pages.each {|arr| arr[0] = page_list[arr[0]] }
148
148
  end
149
149
 
150
150
  if @interleave
151
151
  max_pages_per_file = 0
152
152
  all = @files.each_with_index.map do |spec, findex|
153
153
  list = []
154
- spec.pages.each {|index, rotation| list << [spec.file, findex, index, rotation]}
154
+ spec.pages.each {|index, rotation| list << [spec.file, findex, index, rotation] }
155
155
  max_pages_per_file = list.size if list.size > max_pages_per_file
156
156
  list
157
157
  end
@@ -165,7 +165,7 @@ module HexaPDF
165
165
  end
166
166
  else
167
167
  @files.each_with_index do |s, findex|
168
- s.pages.each {|page, rotation| import_page(page_tree, findex, page, rotation)}
168
+ s.pages.each {|page, rotation| import_page(page_tree, findex, page, rotation) }
169
169
  end
170
170
  end
171
171
  end