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
@@ -10,42 +10,42 @@ describe HexaPDF::Parser do
10
10
  @document = HexaPDF::Document.new
11
11
  @document.add(@document.wrap(10, oid: 1, gen: 0))
12
12
 
13
- create_parser(<<EOF)
14
- %PDF-1.7
15
-
16
- 1 0 obj
17
- 10
18
- endobj
19
-
20
- 2 0 obj
21
- [ 5 6 <</Length 10 >> (name) <4E6F762073 686D6F7A20 6B612070
22
- 6F702E>]
23
- endobj
24
-
25
- 3 15 obj<< /Length 1 0 R/Hallo 6/Filter /Fl/DecodeParms<<>> >>stream
26
- Hallo PDF!endstream
27
- endobj
28
-
29
- 4 0 obj
30
- <</Type /XRef /Length 3 /W [1 1 1] /Index [1 1] /Size 2 >> stream
31
- \x01\x0A\x00
32
- endstream
33
- endobj
34
-
35
- xref
36
- 0 4
37
- 0000000000 65535 f
38
- 0000000010 00000 n
39
- 0000000029 00000 n
40
- 0000000000 65535 f
41
- 3 1
42
- 0000000556 00000 n
43
- trailer
44
- << /Test (now) >>
45
- startxref
46
- 308
47
- %%EOF
48
- EOF
13
+ create_parser(<<~EOF)
14
+ %PDF-1.7
15
+
16
+ 1 0 obj
17
+ 10
18
+ endobj
19
+
20
+ 2 0 obj
21
+ [ 5 6 <</Length 10 >> (name) <4E6F762073 686D6F7A20 6B612070
22
+ 6F702E>]
23
+ endobj
24
+
25
+ 3 15 obj<< /Length 1 0 R/Hallo 6/Filter /Fl/DecodeParms<<>> >>stream
26
+ Hallo PDF!endstream
27
+ endobj
28
+
29
+ 4 0 obj
30
+ <</Type /XRef /Length 3 /W [1 1 1] /Index [1 1] /Size 2 >> stream
31
+ \x01\x0A\x00
32
+ endstream
33
+ endobj
34
+
35
+ xref
36
+ 0 4
37
+ 0000000000 65535 f
38
+ 0000000010 00000 n
39
+ 0000000029 00000 n
40
+ 0000000000 65535 f
41
+ 3 1
42
+ 0000000556 00000 n
43
+ trailer
44
+ << /Test (now) >>
45
+ startxref
46
+ 308
47
+ %%EOF
48
+ EOF
49
49
  end
50
50
 
51
51
  def create_parser(str)
@@ -15,11 +15,13 @@ describe HexaPDF::Reference do
15
15
  assert_raises(ArgumentError) { HexaPDF::Reference.new(5, 'b') }
16
16
  end
17
17
 
18
- it "is sortable" do
19
- assert_equal([HexaPDF::Reference.new(1, 0), HexaPDF::Reference.new(1, 1),
20
- HexaPDF::Reference.new(5, 7)],
21
- [HexaPDF::Reference.new(5, 7), HexaPDF::Reference.new(1, 1),
22
- HexaPDF::Reference.new(1, 0)].sort)
18
+ it "is sortable w.r.t to other objects implementing #oid and #gen" do
19
+ obj = Object.new
20
+ obj.define_singleton_method(:oid) { 1 }
21
+ obj.define_singleton_method(:gen) { 0 }
22
+ assert_equal([obj, HexaPDF::Reference.new(1, 1), HexaPDF::Reference.new(5, 7)],
23
+ [HexaPDF::Reference.new(5, 7), HexaPDF::Reference.new(1, 1), obj].sort)
24
+ assert_nil(HexaPDF::Reference.new(1, 0) <=> 5)
23
25
  end
24
26
 
25
27
  it "is comparable to itself" do
@@ -82,7 +82,7 @@ describe HexaPDF::Revision do
82
82
  assert_equal(0, obj.gen)
83
83
  end
84
84
 
85
- it "loads an object that is defined in the cross-reference section by using only the object number" do
85
+ it "loads an object that is defined in the cross-reference section using the object number" do
86
86
  obj = @rev.object(2)
87
87
  refute_nil(obj)
88
88
  end
@@ -7,65 +7,65 @@ require 'stringio'
7
7
 
8
8
  describe HexaPDF::Revisions do
9
9
  before do
10
- @io = StringIO.new(<<EOF)
11
- %PDF-1.7
12
- 1 0 obj
13
- 10
14
- endobj
15
-
16
- 2 0 obj
17
- 20
18
- endobj
19
-
20
- xref
21
- 0 3
22
- 0000000000 65535 f
23
- 0000000009 00000 n
24
- 0000000028 00000 n
25
- trailer
26
- << /Size 3 >>
27
- startxref
28
- 47
29
- %%EOF
30
-
31
- 2 0 obj
32
- 300
33
- endobj
34
-
35
- 3 0 obj
36
- << /Type /XRef /Size 4 /Index [2 1] /W [1 1 1] /Filter /ASCIIHexDecode /Length 6
37
- >>stream
38
- 019E00
39
- endstream
40
- endobj
41
-
42
- 2 0 obj
43
- 200
44
- endobj
45
-
46
- xref
47
- 2 2
48
- 0000000301 00000 n
49
- 0000000178 00000 n
50
- trailer
51
- << /Size 4 /Prev 47 >>
52
- startxref
53
- 321
54
- %%EOF
55
-
56
- 2 0 obj
57
- 400
58
- endobj
59
-
60
- xref
61
- 2 1
62
- 0000000422 00000 n
63
- trailer
64
- << /Size 4 /Prev 321 /XRefStm 178 >>
65
- startxref
66
- 442
67
- %%EOF
68
- EOF
10
+ @io = StringIO.new(<<~EOF)
11
+ %PDF-1.7
12
+ 1 0 obj
13
+ 10
14
+ endobj
15
+
16
+ 2 0 obj
17
+ 20
18
+ endobj
19
+
20
+ xref
21
+ 0 3
22
+ 0000000000 65535 f
23
+ 0000000009 00000 n
24
+ 0000000028 00000 n
25
+ trailer
26
+ << /Size 3 >>
27
+ startxref
28
+ 47
29
+ %%EOF
30
+
31
+ 2 0 obj
32
+ 300
33
+ endobj
34
+
35
+ 3 0 obj
36
+ << /Type /XRef /Size 4 /Index [2 1] /W [1 1 1] /Filter /ASCIIHexDecode /Length 6
37
+ >>stream
38
+ 019E00
39
+ endstream
40
+ endobj
41
+
42
+ 2 0 obj
43
+ 200
44
+ endobj
45
+
46
+ xref
47
+ 2 2
48
+ 0000000301 00000 n
49
+ 0000000178 00000 n
50
+ trailer
51
+ << /Size 4 /Prev 47 >>
52
+ startxref
53
+ 321
54
+ %%EOF
55
+
56
+ 2 0 obj
57
+ 400
58
+ endobj
59
+
60
+ xref
61
+ 2 1
62
+ 0000000422 00000 n
63
+ trailer
64
+ << /Size 4 /Prev 321 /XRefStm 178 >>
65
+ startxref
66
+ 442
67
+ %%EOF
68
+ EOF
69
69
  @doc = HexaPDF::Document.new(io: @io)
70
70
  @revisions = @doc.revisions
71
71
  end
@@ -82,13 +82,13 @@ EOF
82
82
  it "allows deleting a revision by index" do
83
83
  rev = @revisions.revision(0)
84
84
  @revisions.delete(0)
85
- refute(@revisions.any? {|r| r == rev})
85
+ refute(@revisions.any? {|r| r == rev })
86
86
  end
87
87
 
88
88
  it "allows deleting a revision by specifying a revision" do
89
89
  rev = @revisions.revision(0)
90
90
  @revisions.delete(rev)
91
- refute(@revisions.any? {|r| r == rev})
91
+ refute(@revisions.any? {|r| r == rev })
92
92
  end
93
93
 
94
94
  it "fails when trying to delete the only existing revision" do
@@ -125,35 +125,35 @@ EOF
125
125
  end
126
126
 
127
127
  it "handles invalid PDFs that have a loop via the xref /Prev or /XRefStm entries" do
128
- io = StringIO.new(<<EOF)
129
- %PDF-1.7
130
- 1 0 obj
131
- 10
132
- endobj
133
-
134
- xref
135
- 0 2
136
- 0000000000 65535 f
137
- 0000000009 00000 n
138
- trailer
139
- << /Size 2 /Prev 148>>
140
- startxref
141
- 28
142
- %%EOF
143
-
144
- 2 0 obj
145
- 300
146
- endobj
147
-
148
- xref
149
- 2 1
150
- 0000000301 00000 n
151
- trailer
152
- << /Size 3 /Prev 28 /XRefStm 148>>
153
- startxref
154
- 148
155
- %%EOF
156
- EOF
128
+ io = StringIO.new(<<~EOF)
129
+ %PDF-1.7
130
+ 1 0 obj
131
+ 10
132
+ endobj
133
+
134
+ xref
135
+ 0 2
136
+ 0000000000 65535 f
137
+ 0000000009 00000 n
138
+ trailer
139
+ << /Size 2 /Prev 148>>
140
+ startxref
141
+ 28
142
+ %%EOF
143
+
144
+ 2 0 obj
145
+ 300
146
+ endobj
147
+
148
+ xref
149
+ 2 1
150
+ 0000000301 00000 n
151
+ trailer
152
+ << /Size 3 /Prev 28 /XRefStm 148>>
153
+ startxref
154
+ 148
155
+ %%EOF
156
+ EOF
157
157
  doc = HexaPDF::Document.new(io: io)
158
158
  assert_equal(2, doc.revisions.count)
159
159
  end
@@ -47,7 +47,7 @@ describe HexaPDF::Serializer do
47
47
  assert_serialized("100", 100)
48
48
  assert_serialized("-100", -100)
49
49
  assert_serialized("0", 0)
50
- assert_serialized("1208925819614629174706176", 1208925819614629174706176)
50
+ assert_serialized("1208925819614629174706176", 1_208_925_819_614_629_174_706_176)
51
51
  end
52
52
 
53
53
  it "serializes floats with a precision of 4" do
@@ -105,7 +105,8 @@ describe HexaPDF::Serializer do
105
105
  assert_serialized("(D:20150416094100+01'00')", Time.new(2015, 04, 16, 9, 41, 0, 3600))
106
106
  assert_serialized("(D:20150416094100-01'20')", Time.new(2015, 04, 16, 9, 41, 0, -4800))
107
107
  assert_serialized("(D:20150416000000+02'00')", Date.parse("2015-04-16 9:41:00 +02:00"))
108
- assert_serialized("(D:20150416094100+02'00')", DateTime.parse("2015-04-16 9:41:00 +02:00"))
108
+ assert_serialized("(D:20150416094100+02'00')",
109
+ Time.parse("2015-04-16 9:41:00 +02:00").to_datetime)
109
110
  ensure
110
111
  ENV['TZ'] = tz
111
112
  end
@@ -7,7 +7,6 @@ require 'tempfile'
7
7
  require 'hexapdf/configuration'
8
8
  require 'hexapdf/stream'
9
9
 
10
-
11
10
  describe HexaPDF::StreamData do
12
11
  it "fails if no valid source is specified on creation" do
13
12
  assert_raises(ArgumentError) { HexaPDF::StreamData.new }
@@ -61,7 +60,6 @@ describe HexaPDF::StreamData do
61
60
  end
62
61
  end
63
62
 
64
-
65
63
  describe HexaPDF::Stream do
66
64
  include TestHelper
67
65
 
@@ -134,7 +132,7 @@ describe HexaPDF::Stream do
134
132
  def encoded_data(str, encoders = [])
135
133
  map = @document.config['filter.map']
136
134
  tmp = feeder(str)
137
- encoders.each {|e| tmp = ::Object.const_get(map[e]).encoder(tmp)}
135
+ encoders.each {|e| tmp = ::Object.const_get(map[e]).encoder(tmp) }
138
136
  collector(tmp)
139
137
  end
140
138
 
@@ -153,7 +151,7 @@ describe HexaPDF::Stream do
153
151
  end
154
152
 
155
153
  it "works with a Proc object inside StreamData" do
156
- @stm.stream = HexaPDF::StreamData.new(proc {'testing'})
154
+ @stm.stream = HexaPDF::StreamData.new(proc { 'testing' })
157
155
  assert_equal('testing', collector(@stm.stream_decoder))
158
156
  end
159
157
 
@@ -21,10 +21,10 @@ describe HexaPDF::Tokenizer do
21
21
  assert_equal(HexaPDF::Reference.new(2, 15), @tokenizer.next_object)
22
22
  end
23
23
 
24
- it "next_token: should not fail when resetting the position (due to the use of the internal StringScanner buffer)" do
24
+ it "next_token: should not fail when resetting the position (due to use of an internal buffer)" do
25
25
  create_tokenizer("0 1 2 3 4 " * 4000)
26
26
  4000.times do
27
- 5.times {|i| assert_equal(i, @tokenizer.next_token)}
27
+ 5.times {|i| assert_equal(i, @tokenizer.next_token) }
28
28
  end
29
29
  end
30
30
  end
@@ -7,87 +7,87 @@ require 'stringio'
7
7
 
8
8
  describe HexaPDF::Writer do
9
9
  before do
10
- @std_input_io = StringIO.new(<<EOF.force_encoding(Encoding::BINARY))
11
- %PDF-1.7
12
- %\xCF\xEC\xFF\xE8\xD7\xCB\xCD
13
- 1 0 obj
14
- 10
15
- endobj
16
- 2 0 obj
17
- 20
18
- endobj
19
- xref
20
- 0 3
21
- 0000000000 65535 f
22
- 0000000018 00000 n
23
- 0000000036 00000 n
24
- trailer
25
- <</Size 3>>
26
- startxref
27
- 54
28
- %%EOF
29
- 2 0 obj
30
- <</Length 10>>stream
31
- Some data!
32
- endstream
33
- endobj
34
- xref
35
- 2 1
36
- 0000000162 00000 n
37
- trailer
38
- <</Size 3/Prev 54>>
39
- startxref
40
- 219
41
- %%EOF
42
- 3 0 obj
43
- <</Producer(HexaPDF version 0.6.0)>>
44
- endobj
45
- xref
46
- 3 1
47
- 0000000296 00000 n
48
- trailer
49
- <</Prev 219/Size 4/Root<</Type/Catalog>>/Info 3 0 R>>
50
- startxref
51
- 348
52
- %%EOF
53
- EOF
10
+ @std_input_io = StringIO.new(<<~EOF.force_encoding(Encoding::BINARY))
11
+ %PDF-1.7
12
+ %\xCF\xEC\xFF\xE8\xD7\xCB\xCD
13
+ 1 0 obj
14
+ 10
15
+ endobj
16
+ 2 0 obj
17
+ 20
18
+ endobj
19
+ xref
20
+ 0 3
21
+ 0000000000 65535 f
22
+ 0000000018 00000 n
23
+ 0000000036 00000 n
24
+ trailer
25
+ <</Size 3>>
26
+ startxref
27
+ 54
28
+ %%EOF
29
+ 2 0 obj
30
+ <</Length 10>>stream
31
+ Some data!
32
+ endstream
33
+ endobj
34
+ xref
35
+ 2 1
36
+ 0000000162 00000 n
37
+ trailer
38
+ <</Size 3/Prev 54>>
39
+ startxref
40
+ 219
41
+ %%EOF
42
+ 3 0 obj
43
+ <</Producer(HexaPDF version 0.7.0)>>
44
+ endobj
45
+ xref
46
+ 3 1
47
+ 0000000296 00000 n
48
+ trailer
49
+ <</Prev 219/Size 4/Root<</Type/Catalog>>/Info 3 0 R>>
50
+ startxref
51
+ 348
52
+ %%EOF
53
+ EOF
54
54
 
55
- @compressed_input_io = StringIO.new(<<EOF.force_encoding(Encoding::BINARY))
56
- %PDF-1.7
57
- %\xCF\xEC\xFF\xE8\xD7\xCB\xCD
58
- 5 0 obj
59
- <</Type/ObjStm/N 1/First 4/Filter/FlateDecode/Length 15>>stream
60
- x\xDA3T0P04P\x00\x00\x04\xA1\x01#
61
- endstream
62
- endobj
63
- 2 0 obj
64
- 20
65
- endobj
66
- 3 0 obj
67
- <</Size 6/Type/XRef/W[1 1 2]/Index[0 4 5 1]/Filter/FlateDecode/DecodeParms<</Columns 4/Predictor 12>>/Length 31>>stream
68
- x\xDAcb`\xF8\xFF\x9F\x89\x89\x95\x91\x91\xE9\x7F\x19\x03\x03\x13\x83\x10\x88he`\x00\x00B4\x04\x1E
69
- endstream
70
- endobj
71
- startxref
72
- 141
73
- %%EOF
74
- 6 0 obj
75
- <</Producer(HexaPDF version 0.6.0)>>
76
- endobj
77
- 2 0 obj
78
- <</Length 10>>stream
79
- Some data!
80
- endstream
81
- endobj
82
- 4 0 obj
83
- <</Size 7/Prev 141/Root<</Type/Catalog>>/Info 6 0 R/Type/XRef/W[1 2 2]/Index[2 1 4 1 6 1]/Filter/FlateDecode/DecodeParms<</Columns 5/Predictor 12>>/Length 22>>stream
84
- x\xDAcbdlc``b`\xB0\x04\x93\x93\x19\x18\x00\f\x0F\x01[
85
- endstream
86
- endobj
87
- startxref
88
- 447
89
- %%EOF
90
- EOF
55
+ @compressed_input_io = StringIO.new(<<~EOF.force_encoding(Encoding::BINARY))
56
+ %PDF-1.7
57
+ %\xCF\xEC\xFF\xE8\xD7\xCB\xCD
58
+ 5 0 obj
59
+ <</Type/ObjStm/N 1/First 4/Filter/FlateDecode/Length 15>>stream
60
+ x\xDA3T0P04P\x00\x00\x04\xA1\x01#
61
+ endstream
62
+ endobj
63
+ 2 0 obj
64
+ 20
65
+ endobj
66
+ 3 0 obj
67
+ <</Size 6/Type/XRef/W[1 1 2]/Index[0 4 5 1]/Filter/FlateDecode/DecodeParms<</Columns 4/Predictor 12>>/Length 31>>stream
68
+ x\xDAcb`\xF8\xFF\x9F\x89\x89\x95\x91\x91\xE9\x7F\x19\x03\x03\x13\x83\x10\x88he`\x00\x00B4\x04\x1E
69
+ endstream
70
+ endobj
71
+ startxref
72
+ 141
73
+ %%EOF
74
+ 6 0 obj
75
+ <</Producer(HexaPDF version 0.7.0)>>
76
+ endobj
77
+ 2 0 obj
78
+ <</Length 10>>stream
79
+ Some data!
80
+ endstream
81
+ endobj
82
+ 4 0 obj
83
+ <</Size 7/Prev 141/Root<</Type/Catalog>>/Info 6 0 R/Type/XRef/W[1 2 2]/Index[2 1 4 1 6 1]/Filter/FlateDecode/DecodeParms<</Columns 5/Predictor 12>>/Length 22>>stream
84
+ x\xDAcbdlc``b`\xB0\x04\x93\x93\x19\x18\x00\f\x0F\x01[
85
+ endstream
86
+ endobj
87
+ startxref
88
+ 447
89
+ %%EOF
90
+ EOF
91
91
  end
92
92
 
93
93
  def assert_document_conversion(input_io)