hexapdf 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
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)