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
@@ -25,7 +25,7 @@ describe HexaPDF::XRefSection do
25
25
 
26
26
  describe "each_subsection" do
27
27
  def assert_subsections(result)
28
- assert_equal(result, @xref_section.each_subsection.map {|s| s.map(&:oid)})
28
+ assert_equal(result, @xref_section.each_subsection.map {|s| s.map(&:oid) })
29
29
  end
30
30
 
31
31
  it "works for newly initialized objects" do
@@ -13,7 +13,7 @@ describe HexaPDF::Type::Annotations::Link do
13
13
  describe "validation" do
14
14
  it "checks for valid /H value" do
15
15
  @annot[:H] = :invalid
16
- refute(@annot.validate {|msg| assert_match(/contains invalid value/, msg)})
16
+ refute(@annot.validate {|msg| assert_match(/contains invalid value/, msg) })
17
17
  end
18
18
  end
19
19
  end
@@ -14,7 +14,7 @@ describe HexaPDF::Type::Annotations::Text do
14
14
  describe "validation" do
15
15
  it "checks for correct /StateModel values" do
16
16
  @annot[:StateModel] = 'Invalid'
17
- refute(@annot.validate {|msg| assert_match(/contains invalid value/, msg)})
17
+ refute(@annot.validate {|msg| assert_match(/contains invalid value/, msg) })
18
18
  end
19
19
 
20
20
  it "automatically sets /StateModel based on the /State entry if possible" do
@@ -24,7 +24,7 @@ describe HexaPDF::Type::Annotations::Text do
24
24
 
25
25
  @annot.delete(:StateModel)
26
26
  @annot[:State] = 'Unknown'
27
- refute(@annot.validate {|msg| assert_match(/StateModel required/, msg)})
27
+ refute(@annot.validate {|msg| assert_match(/StateModel required/, msg) })
28
28
  end
29
29
 
30
30
  it "checks whether /State and /StateModel match" do
@@ -32,7 +32,7 @@ describe HexaPDF::Type::Annotations::Text do
32
32
  @annot[:StateModel] = 'Marked'
33
33
  assert(@annot.validate)
34
34
  @annot[:StateModel] = 'Review'
35
- refute(@annot.validate {|msg| assert_match(/\/State and \/StateModel don't agree/, msg)})
35
+ refute(@annot.validate {|msg| assert_match(/\/State and \/StateModel don't agree/, msg) })
36
36
  end
37
37
  end
38
38
  end
@@ -38,7 +38,7 @@ describe HexaPDF::Type::FontDescriptor do
38
38
 
39
39
  describe "validation" do
40
40
  it "fails if more than one of /FontFile{,2,3} are set" do
41
- assert(@font_desc.validate {|*args| p args})
41
+ assert(@font_desc.validate {|*args| p args })
42
42
  @font_desc[:FontFile] = @font_desc[:FontFile2] = @doc.add({}, stream: 'test')
43
43
  refute(@font_desc.validate)
44
44
  end
@@ -18,8 +18,8 @@ describe HexaPDF::Type::FontSimple do
18
18
  Descent: -100, CapHeight: 800, StemV: 20)
19
19
  @font = @doc.add({Type: :Font, Encoding: :WinAnsiEncoding,
20
20
  BaseFont: :Embedded, FontDescriptor: font_descriptor, ToUnicode: cmap,
21
- FirstChar: 32, LastChar: 34, Widths: [600, 0, 700]
22
- }, type: HexaPDF::Type::FontSimple)
21
+ FirstChar: 32, LastChar: 34, Widths: [600, 0, 700]},
22
+ type: HexaPDF::Type::FontSimple)
23
23
  end
24
24
 
25
25
  describe "encoding" do
@@ -60,7 +60,6 @@ describe HexaPDF::Type::FontType0 do
60
60
  end
61
61
  end
62
62
 
63
-
64
63
  describe "handling of /Encoding value" do
65
64
  it "can use predefined CMaps" do
66
65
  assert_equal([0x2121], @font.decode("\x21\x21"))
@@ -82,7 +82,6 @@ describe HexaPDF::Type::Image do
82
82
  refute(info.indexed)
83
83
  assert(info.writable)
84
84
 
85
-
86
85
  @image[:ColorSpace] = :DeviceCMYK
87
86
  @image[:Filter] = :DCTDecode
88
87
  info = @image.info
@@ -99,7 +98,6 @@ describe HexaPDF::Type::Image do
99
98
  refute(info.indexed)
100
99
  refute(info.writable)
101
100
 
102
-
103
101
  @image[:ColorSpace] = [:Indexed, :DeviceRGB, 1, "\x80".b * 6]
104
102
  info = @image.info
105
103
  assert_equal(:rgb, info.color_space)
@@ -107,7 +105,6 @@ describe HexaPDF::Type::Image do
107
105
  assert(info.indexed)
108
106
  assert(info.writable)
109
107
 
110
-
111
108
  @image[:ColorSpace] = :ICCBased
112
109
  info = @image.info
113
110
  assert_equal(:other, info.color_space)
@@ -19,7 +19,6 @@ describe HexaPDF::Type::ObjectStream::Data do
19
19
  end
20
20
  end
21
21
 
22
-
23
22
  describe HexaPDF::Type::ObjectStream do
24
23
  before do
25
24
  @doc = Object.new
@@ -42,10 +41,12 @@ describe HexaPDF::Type::ObjectStream do
42
41
  @obj.add_object(5)
43
42
  @obj.add_object(7)
44
43
  @obj.add_object(9)
44
+ @obj.add_object(5)
45
45
  assert_equal(0, @obj.object_index(5))
46
46
  assert_equal(1, @obj.object_index(7))
47
47
  assert_equal(2, @obj.object_index(9))
48
48
 
49
+ @obj.delete_object(5)
49
50
  @obj.delete_object(5)
50
51
  assert_equal(0, @obj.object_index(9))
51
52
  assert_equal(1, @obj.object_index(7))
@@ -76,7 +76,7 @@ describe HexaPDF::Type::Page do
76
76
  root = @doc.add(Type: :Pages)
77
77
  page = @doc.add(Type: :Page, Parent: root)
78
78
  message = ''
79
- refute(page.validate {|m, _| message = m})
79
+ refute(page.validate {|m, _| message = m })
80
80
  assert_match(/inheritable.*MediaBox/i, message)
81
81
  end
82
82
  end
@@ -99,6 +99,10 @@ describe HexaPDF::Type::Page do
99
99
  end
100
100
 
101
101
  it "returns the correct bleed, trim and art boxes" do
102
+ @page[:MediaBox] = :media
103
+ assert_equal(:media, @page.box(:bleed))
104
+ assert_equal(:media, @page.box(:trim))
105
+ assert_equal(:media, @page.box(:art))
102
106
  @page[:CropBox] = :crop
103
107
  assert_equal(:crop, @page.box(:bleed))
104
108
  assert_equal(:crop, @page.box(:trim))
@@ -26,7 +26,7 @@ describe HexaPDF::Type::PageTreeNode do
26
26
  # @pages[6]
27
27
  # @pages[7]
28
28
  def define_multilevel_page_tree
29
- @pages = 8.times.map { @doc.add(Type: :Page) }
29
+ @pages = Array.new(8) { @doc.add(Type: :Page) }
30
30
  @kid1 = @doc.add(Type: :Pages, Parent: @root, Count: 5)
31
31
  @kid11 = @doc.add(Type: :Pages, Parent: @kid1)
32
32
  @kid11.add_page(@pages[0])
@@ -221,7 +221,7 @@ describe HexaPDF::Type::PageTreeNode do
221
221
  @kid12[:Count] = 100
222
222
 
223
223
  called_msg = ''
224
- refute(@root.validate(auto_correct: false) {|msg, _| called_msg = msg})
224
+ refute(@root.validate(auto_correct: false) {|msg, _| called_msg = msg })
225
225
  assert_match(/Count.*invalid/, called_msg)
226
226
 
227
227
  assert(@root.validate)
@@ -235,7 +235,7 @@ describe HexaPDF::Type::PageTreeNode do
235
235
  @kid2.delete(:Parent)
236
236
 
237
237
  called_msg = ''
238
- refute(@root.validate(auto_correct: false) {|msg, _| called_msg = msg})
238
+ refute(@root.validate(auto_correct: false) {|msg, _| called_msg = msg })
239
239
  assert_match(/Parent.*invalid/, called_msg)
240
240
 
241
241
  assert(@root.validate)
@@ -245,7 +245,7 @@ describe HexaPDF::Type::PageTreeNode do
245
245
 
246
246
  it "removes invalid objects from the page tree (like null objects)" do
247
247
  define_multilevel_page_tree
248
- assert(@root.validate(auto_correct: false) {|m, _| p m})
248
+ assert(@root.validate(auto_correct: false) {|m, _| p m })
249
249
 
250
250
  @doc.delete(@pages[3])
251
251
  refute(@root.validate(auto_correct: false)) do |msg, _|
@@ -85,7 +85,7 @@ describe HexaPDF::Type::Trailer do
85
85
  def (@doc).add(val) HexaPDF::Object.new(val, oid: 3) end
86
86
 
87
87
  message = ''
88
- refute(@obj.validate(auto_correct: false) {|m, _| message = m})
88
+ refute(@obj.validate(auto_correct: false) {|m, _| message = m })
89
89
  assert_match(/Catalog/, message)
90
90
  assert(@obj.validate)
91
91
  end
@@ -101,6 +101,10 @@ describe HexaPDF::Type::XRefStream do
101
101
  assert_equal(100, @obj.value[:Size])
102
102
  assert_equal([0, 3], @obj.value[:Index])
103
103
  assert_equal([1, 1, 2], @obj.value[:W])
104
+
105
+ @section.add_in_use_entry(1, 0, 256**2)
106
+ @obj.update_with_xref_section_and_trailer(@section, Size: 100)
107
+ assert_equal([1, 4, 2], @obj.value[:W])
104
108
  end
105
109
 
106
110
  it "updates the stream with the new information" do
@@ -4,9 +4,11 @@ require 'test_helper'
4
4
  require 'hexapdf/utils/bit_field'
5
5
 
6
6
  class TestBitField
7
+
7
8
  extend HexaPDF::Utils::BitField
8
9
  attr_accessor :data
9
10
  bit_field(:data, {bit0: 0, bit1: 1, bit5: 5}, lister: "list", getter: "get", setter: "set")
11
+
10
12
  end
11
13
 
12
14
  describe HexaPDF::Utils::BitField do
@@ -30,7 +30,7 @@ describe HexaPDF::Utils::BitStreamReader do
30
30
 
31
31
  describe "read" do
32
32
  it "allows reading any number of bits" do
33
- @reader << "\xaa" * 8 # 10101010 * 8
33
+ @reader << "\xaa" * 8 # 10101010 * 8
34
34
  assert_equal(1, @reader.read(1))
35
35
  assert_equal(0, @reader.read(1))
36
36
  assert_equal(2, @reader.read(2))
@@ -6,7 +6,7 @@ require 'hexapdf/utils/lru_cache'
6
6
  describe HexaPDF::Utils::LRUCache do
7
7
  before do
8
8
  @cache = HexaPDF::Utils::LRUCache.new(5)
9
- 5.times {|i| @cache[i] = i * 2}
9
+ 5.times {|i| @cache[i] = i * 2 }
10
10
  end
11
11
 
12
12
  it "removes the LRU item when the size is reached" do
@@ -88,16 +88,22 @@ describe HexaPDF::Utils::SortedTreeNode do
88
88
 
89
89
  it "splits nodes if needed" do
90
90
  @doc.config['sorted_tree.max_leaf_node_size'] = 4
91
- %w[a c e m k i g d b l j f h].each {|key| @root.add_entry(key, 1)}
91
+ %w[a c e m k i g d b l j f h].each {|key| @root.add_entry(key, 1) }
92
92
  refute(@root.value.key?(:Limits))
93
93
  refute(@root.value.key?(:Names))
94
94
  assert_equal(6, @root[:Kids].size)
95
95
  assert_equal(['a', 1, 'b', 1], @root[:Kids][0][:Names])
96
+ assert_equal(['a', 'b'], @root[:Kids][0][:Limits])
96
97
  assert_equal(['c', 1, 'd', 1], @root[:Kids][1][:Names])
98
+ assert_equal(['c', 'd'], @root[:Kids][1][:Limits])
97
99
  assert_equal(['e', 1, 'f', 1], @root[:Kids][2][:Names])
100
+ assert_equal(['e', 'f'], @root[:Kids][2][:Limits])
98
101
  assert_equal(['g', 1, 'h', 1, 'i', 1], @root[:Kids][3][:Names])
102
+ assert_equal(['g', 'i'], @root[:Kids][3][:Limits])
99
103
  assert_equal(['j', 1, 'k', 1], @root[:Kids][4][:Names])
104
+ assert_equal(['j', 'k'], @root[:Kids][4][:Limits])
100
105
  assert_equal(['l', 1, 'm', 1], @root[:Kids][5][:Names])
106
+ assert_equal(['l', 'm'], @root[:Kids][5][:Limits])
101
107
  end
102
108
 
103
109
  it "fails if not called on the root node" do
@@ -136,8 +142,8 @@ describe HexaPDF::Utils::SortedTreeNode do
136
142
 
137
143
  describe "delete" do
138
144
  it "works with only the root node" do
139
- %w[a b c d e f g].each {|name| @root.add_entry(name, 1)}
140
- %w[g b a unknown e d c].each {|name| @root.delete_entry(name)}
145
+ %w[a b c d e f g].each {|name| @root.add_entry(name, 1) }
146
+ %w[g b a unknown e d c].each {|name| @root.delete_entry(name) }
141
147
  refute(@root.value.key?(:Kids))
142
148
  refute(@root.value.key?(:Limits))
143
149
  assert_equal(['f', 1], @root[:Names])
@@ -146,7 +152,7 @@ describe HexaPDF::Utils::SortedTreeNode do
146
152
 
147
153
  it "works with multiple levels of intermediate nodes" do
148
154
  add_multilevel_entries
149
- %w[c f i m unknown o q s u].each {|name| @root.delete_entry(name)}
155
+ %w[c f i m unknown o q s u].each {|name| @root.delete_entry(name) }
150
156
  refute(@root.value.key?(:Names))
151
157
  refute(@root.value.key?(:Limits))
152
158
  assert(@root[:Kids].empty?)
data/test/test_helper.rb CHANGED
@@ -13,7 +13,6 @@ require 'minitest/autorun'
13
13
  require 'fiber'
14
14
  require 'zlib'
15
15
 
16
-
17
16
  TEST_DATA_DIR = File.join(__dir__, 'data')
18
17
  MINIMAL_PDF = File.read(File.join(TEST_DATA_DIR, 'minimal.pdf')).freeze
19
18
 
@@ -25,7 +24,7 @@ module TestHelper
25
24
  def assert_method_invoked(object, name, *expected_values, check_block: false)
26
25
  args = []
27
26
  block = []
28
- object.define_singleton_method(name) {|*la, &lb| args << la; block << lb}
27
+ object.define_singleton_method(name) {|*la, &lb| args << la; block << lb }
29
28
  yield
30
29
  assert_equal(expected_values, args, "Incorrect arguments for #{object.class}##{name}")
31
30
  block.each do |block_arg|
@@ -39,7 +38,7 @@ module TestHelper
39
38
 
40
39
  def feeder(string, len = string.length)
41
40
  Fiber.new do
42
- while string.length > 0
41
+ until string.empty?
43
42
  Fiber.yield string.slice!(0, len).force_encoding('BINARY')
44
43
  end
45
44
  end
@@ -54,6 +53,4 @@ module TestHelper
54
53
  end
55
54
  end
56
55
 
57
- class Minitest::Spec
58
- include TestHelper
59
- end
56
+ Minitest::Spec.send(:include, TestHelper)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hexapdf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Leitner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-27 00:00:00.000000000 Z
11
+ date: 2018-06-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cmdparse
@@ -567,7 +567,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
567
567
  version: '0'
568
568
  requirements: []
569
569
  rubyforge_project:
570
- rubygems_version: 2.6.14
570
+ rubygems_version: 2.7.3
571
571
  signing_key:
572
572
  specification_version: 4
573
573
  summary: HexaPDF - A Versatile PDF Creation and Manipulation Library For Ruby