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.
- checksums.yaml +5 -5
- data/CHANGELOG.md +33 -0
- data/CONTRIBUTERS +1 -1
- data/LICENSE +1 -1
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/bin/hexapdf +1 -1
- data/examples/text_layouter_styling.rb +1 -2
- data/lib/hexapdf.rb +2 -2
- data/lib/hexapdf/cli.rb +3 -3
- data/lib/hexapdf/cli/batch.rb +5 -5
- data/lib/hexapdf/cli/command.rb +15 -17
- data/lib/hexapdf/cli/files.rb +3 -3
- data/lib/hexapdf/cli/images.rb +3 -4
- data/lib/hexapdf/cli/info.rb +5 -5
- data/lib/hexapdf/cli/inspect.rb +6 -6
- data/lib/hexapdf/cli/merge.rb +6 -6
- data/lib/hexapdf/cli/modify.rb +4 -4
- data/lib/hexapdf/cli/optimize.rb +3 -3
- data/lib/hexapdf/configuration.rb +4 -5
- data/lib/hexapdf/content.rb +2 -2
- data/lib/hexapdf/content/canvas.rb +35 -36
- data/lib/hexapdf/content/color_space.rb +9 -14
- data/lib/hexapdf/content/graphic_object.rb +2 -2
- data/lib/hexapdf/content/graphic_object/arc.rb +3 -3
- data/lib/hexapdf/content/graphic_object/endpoint_arc.rb +2 -2
- data/lib/hexapdf/content/graphic_object/solid_arc.rb +4 -8
- data/lib/hexapdf/content/graphics_state.rb +4 -13
- data/lib/hexapdf/content/operator.rb +33 -35
- data/lib/hexapdf/content/parser.rb +28 -18
- data/lib/hexapdf/content/processor.rb +4 -5
- data/lib/hexapdf/content/transformation_matrix.rb +2 -2
- data/lib/hexapdf/data_dir.rb +2 -2
- data/lib/hexapdf/dictionary.rb +8 -9
- data/lib/hexapdf/dictionary_fields.rb +7 -10
- data/lib/hexapdf/document.rb +18 -18
- data/lib/hexapdf/document/files.rb +12 -10
- data/lib/hexapdf/document/fonts.rb +2 -2
- data/lib/hexapdf/document/images.rb +3 -3
- data/lib/hexapdf/document/pages.rb +4 -4
- data/lib/hexapdf/encryption.rb +2 -2
- data/lib/hexapdf/encryption/aes.rb +2 -2
- data/lib/hexapdf/encryption/arc4.rb +4 -4
- data/lib/hexapdf/encryption/fast_aes.rb +2 -2
- data/lib/hexapdf/encryption/fast_arc4.rb +4 -4
- data/lib/hexapdf/encryption/identity.rb +5 -4
- data/lib/hexapdf/encryption/ruby_aes.rb +147 -139
- data/lib/hexapdf/encryption/ruby_arc4.rb +4 -4
- data/lib/hexapdf/encryption/security_handler.rb +11 -12
- data/lib/hexapdf/encryption/standard_security_handler.rb +6 -9
- data/lib/hexapdf/error.rb +7 -9
- data/lib/hexapdf/filter.rb +2 -3
- data/lib/hexapdf/filter/ascii85_decode.rb +3 -3
- data/lib/hexapdf/filter/ascii_hex_decode.rb +2 -2
- data/lib/hexapdf/filter/dct_decode.rb +2 -2
- data/lib/hexapdf/filter/encryption.rb +2 -2
- data/lib/hexapdf/filter/flate_decode.rb +16 -33
- data/lib/hexapdf/filter/jpx_decode.rb +2 -2
- data/lib/hexapdf/filter/lzw_decode.rb +4 -4
- data/lib/hexapdf/filter/predictor.rb +2 -6
- data/lib/hexapdf/filter/run_length_decode.rb +2 -2
- data/lib/hexapdf/font/cmap.rb +2 -3
- data/lib/hexapdf/font/cmap/parser.rb +11 -11
- data/lib/hexapdf/font/cmap/writer.rb +25 -25
- data/lib/hexapdf/font/encoding.rb +2 -2
- data/lib/hexapdf/font/encoding/base.rb +2 -2
- data/lib/hexapdf/font/encoding/difference_encoding.rb +2 -2
- data/lib/hexapdf/font/encoding/glyph_list.rb +6 -6
- data/lib/hexapdf/font/encoding/mac_expert_encoding.rb +2 -2
- data/lib/hexapdf/font/encoding/mac_roman_encoding.rb +2 -2
- data/lib/hexapdf/font/encoding/standard_encoding.rb +2 -2
- data/lib/hexapdf/font/encoding/symbol_encoding.rb +2 -2
- data/lib/hexapdf/font/encoding/win_ansi_encoding.rb +2 -2
- data/lib/hexapdf/font/encoding/zapf_dingbats_encoding.rb +2 -2
- data/lib/hexapdf/font/invalid_glyph.rb +7 -7
- data/lib/hexapdf/font/true_type.rb +2 -2
- data/lib/hexapdf/font/true_type/builder.rb +13 -7
- data/lib/hexapdf/font/true_type/font.rb +2 -3
- data/lib/hexapdf/font/true_type/optimizer.rb +2 -2
- data/lib/hexapdf/font/true_type/subsetter.rb +4 -4
- data/lib/hexapdf/font/true_type/table.rb +3 -5
- data/lib/hexapdf/font/true_type/table/cmap.rb +2 -2
- data/lib/hexapdf/font/true_type/table/cmap_subtable.rb +9 -16
- data/lib/hexapdf/font/true_type/table/directory.rb +4 -4
- data/lib/hexapdf/font/true_type/table/glyf.rb +2 -2
- data/lib/hexapdf/font/true_type/table/head.rb +3 -2
- data/lib/hexapdf/font/true_type/table/hhea.rb +2 -2
- data/lib/hexapdf/font/true_type/table/hmtx.rb +2 -2
- data/lib/hexapdf/font/true_type/table/kern.rb +3 -3
- data/lib/hexapdf/font/true_type/table/loca.rb +3 -3
- data/lib/hexapdf/font/true_type/table/maxp.rb +2 -2
- data/lib/hexapdf/font/true_type/table/name.rb +3 -5
- data/lib/hexapdf/font/true_type/table/os2.rb +4 -3
- data/lib/hexapdf/font/true_type/table/post.rb +3 -7
- data/lib/hexapdf/font/true_type_wrapper.rb +20 -22
- data/lib/hexapdf/font/type1.rb +2 -2
- data/lib/hexapdf/font/type1/afm_parser.rb +7 -7
- data/lib/hexapdf/font/type1/character_metrics.rb +2 -2
- data/lib/hexapdf/font/type1/font.rb +3 -3
- data/lib/hexapdf/font/type1/font_metrics.rb +2 -4
- data/lib/hexapdf/font/type1/pfb_parser.rb +2 -2
- data/lib/hexapdf/font/type1_wrapper.rb +8 -9
- data/lib/hexapdf/font_loader.rb +2 -2
- data/lib/hexapdf/font_loader/from_configuration.rb +2 -2
- data/lib/hexapdf/font_loader/from_file.rb +2 -2
- data/lib/hexapdf/font_loader/standard14.rb +2 -2
- data/lib/hexapdf/image_loader.rb +2 -2
- data/lib/hexapdf/image_loader/jpeg.rb +6 -4
- data/lib/hexapdf/image_loader/pdf.rb +2 -2
- data/lib/hexapdf/image_loader/png.rb +6 -6
- data/lib/hexapdf/importer.rb +6 -4
- data/lib/hexapdf/layout.rb +2 -2
- data/lib/hexapdf/layout/box.rb +4 -4
- data/lib/hexapdf/layout/inline_box.rb +2 -2
- data/lib/hexapdf/layout/line.rb +6 -6
- data/lib/hexapdf/layout/numeric_refinements.rb +2 -2
- data/lib/hexapdf/layout/style.rb +17 -8
- data/lib/hexapdf/layout/text_fragment.rb +86 -48
- data/lib/hexapdf/layout/text_layouter.rb +40 -21
- data/lib/hexapdf/layout/text_shaper.rb +2 -2
- data/lib/hexapdf/name_tree_node.rb +2 -2
- data/lib/hexapdf/number_tree_node.rb +2 -2
- data/lib/hexapdf/object.rb +6 -8
- data/lib/hexapdf/parser.rb +10 -10
- data/lib/hexapdf/rectangle.rb +4 -4
- data/lib/hexapdf/reference.rb +2 -2
- data/lib/hexapdf/revision.rb +4 -4
- data/lib/hexapdf/revisions.rb +5 -5
- data/lib/hexapdf/serializer.rb +27 -24
- data/lib/hexapdf/stream.rb +4 -4
- data/lib/hexapdf/task.rb +2 -2
- data/lib/hexapdf/task/dereference.rb +4 -4
- data/lib/hexapdf/task/optimize.rb +5 -4
- data/lib/hexapdf/tokenizer.rb +12 -14
- data/lib/hexapdf/type.rb +2 -2
- data/lib/hexapdf/type/action.rb +3 -3
- data/lib/hexapdf/type/actions.rb +2 -2
- data/lib/hexapdf/type/actions/go_to.rb +2 -2
- data/lib/hexapdf/type/actions/go_to_r.rb +2 -2
- data/lib/hexapdf/type/actions/launch.rb +2 -2
- data/lib/hexapdf/type/actions/uri.rb +3 -3
- data/lib/hexapdf/type/annotation.rb +3 -3
- data/lib/hexapdf/type/annotations.rb +2 -2
- data/lib/hexapdf/type/annotations/link.rb +2 -2
- data/lib/hexapdf/type/annotations/markup_annotation.rb +2 -2
- data/lib/hexapdf/type/annotations/text.rb +2 -2
- data/lib/hexapdf/type/catalog.rb +4 -4
- data/lib/hexapdf/type/cid_font.rb +4 -5
- data/lib/hexapdf/type/embedded_file.rb +3 -3
- data/lib/hexapdf/type/file_specification.rb +6 -7
- data/lib/hexapdf/type/font.rb +4 -4
- data/lib/hexapdf/type/font_descriptor.rb +3 -4
- data/lib/hexapdf/type/font_simple.rb +12 -16
- data/lib/hexapdf/type/font_true_type.rb +2 -2
- data/lib/hexapdf/type/font_type0.rb +5 -5
- data/lib/hexapdf/type/font_type1.rb +4 -4
- data/lib/hexapdf/type/form.rb +3 -3
- data/lib/hexapdf/type/graphics_state_parameter.rb +3 -3
- data/lib/hexapdf/type/image.rb +13 -14
- data/lib/hexapdf/type/info.rb +2 -2
- data/lib/hexapdf/type/names.rb +2 -2
- data/lib/hexapdf/type/object_stream.rb +5 -5
- data/lib/hexapdf/type/page.rb +9 -10
- data/lib/hexapdf/type/page_tree_node.rb +5 -6
- data/lib/hexapdf/type/resources.rb +11 -11
- data/lib/hexapdf/type/trailer.rb +3 -3
- data/lib/hexapdf/type/viewer_preferences.rb +2 -2
- data/lib/hexapdf/type/xref_stream.rb +8 -4
- data/lib/hexapdf/utils/bit_field.rb +4 -4
- data/lib/hexapdf/utils/bit_stream.rb +4 -4
- data/lib/hexapdf/utils/graphics_helpers.rb +2 -2
- data/lib/hexapdf/utils/lru_cache.rb +2 -2
- data/lib/hexapdf/utils/math_helpers.rb +2 -2
- data/lib/hexapdf/utils/object_hash.rb +3 -3
- data/lib/hexapdf/utils/pdf_doc_encoding.rb +3 -3
- data/lib/hexapdf/utils/sorted_tree_node.rb +12 -11
- data/lib/hexapdf/version.rb +3 -3
- data/lib/hexapdf/writer.rb +8 -8
- data/lib/hexapdf/xref_section.rb +3 -3
- data/test/hexapdf/common_tokenizer_tests.rb +6 -7
- data/test/hexapdf/content/graphic_object/test_endpoint_arc.rb +0 -1
- data/test/hexapdf/content/test_canvas.rb +28 -36
- data/test/hexapdf/content/test_color_space.rb +4 -0
- data/test/hexapdf/content/test_graphics_state.rb +2 -0
- data/test/hexapdf/content/test_operator.rb +6 -7
- data/test/hexapdf/content/test_parser.rb +2 -2
- data/test/hexapdf/content/test_processor.rb +1 -1
- data/test/hexapdf/document/test_files.rb +1 -0
- data/test/hexapdf/document/test_images.rb +1 -1
- data/test/hexapdf/encryption/common.rb +3 -3
- data/test/hexapdf/encryption/test_aes.rb +10 -4
- data/test/hexapdf/encryption/test_identity.rb +1 -1
- data/test/hexapdf/encryption/test_security_handler.rb +13 -17
- data/test/hexapdf/encryption/test_standard_security_handler.rb +12 -12
- data/test/hexapdf/filter/test_ascii85_decode.rb +2 -3
- data/test/hexapdf/filter/test_ascii_hex_decode.rb +6 -1
- data/test/hexapdf/filter/test_flate_decode.rb +2 -2
- data/test/hexapdf/filter/test_lzw_decode.rb +10 -10
- data/test/hexapdf/filter/test_predictor.rb +10 -2
- data/test/hexapdf/filter/test_run_length_decode.rb +1 -1
- data/test/hexapdf/font/cmap/test_parser.rb +40 -40
- data/test/hexapdf/font/cmap/test_writer.rb +29 -29
- data/test/hexapdf/font/test_true_type_wrapper.rb +3 -2
- data/test/hexapdf/font/true_type/common.rb +2 -0
- data/test/hexapdf/font/true_type/table/test_cmap.rb +1 -1
- data/test/hexapdf/font/true_type/table/test_cmap_subtable.rb +5 -4
- data/test/hexapdf/font/true_type/table/test_glyf.rb +2 -2
- data/test/hexapdf/font/true_type/table/test_head.rb +2 -2
- data/test/hexapdf/font/true_type/table/test_name.rb +9 -6
- data/test/hexapdf/font/true_type/test_builder.rb +8 -3
- data/test/hexapdf/font/true_type/test_optimizer.rb +1 -2
- data/test/hexapdf/font/type1/test_afm_parser.rb +2 -2
- data/test/hexapdf/image_loader/test_jpeg.rb +1 -1
- data/test/hexapdf/image_loader/test_pdf.rb +1 -1
- data/test/hexapdf/image_loader/test_png.rb +3 -3
- data/test/hexapdf/layout/test_inline_box.rb +10 -1
- data/test/hexapdf/layout/test_line.rb +4 -4
- data/test/hexapdf/layout/test_style.rb +19 -7
- data/test/hexapdf/layout/test_text_fragment.rb +73 -27
- data/test/hexapdf/layout/test_text_layouter.rb +84 -68
- data/test/hexapdf/layout/test_text_shaper.rb +4 -6
- data/test/hexapdf/task/test_dereference.rb +2 -2
- data/test/hexapdf/task/test_optimize.rb +16 -7
- data/test/hexapdf/test_configuration.rb +1 -1
- data/test/hexapdf/test_data_dir.rb +2 -2
- data/test/hexapdf/test_dictionary.rb +6 -3
- data/test/hexapdf/test_dictionary_fields.rb +15 -14
- data/test/hexapdf/test_document.rb +47 -48
- data/test/hexapdf/test_filter.rb +30 -26
- data/test/hexapdf/test_importer.rb +14 -0
- data/test/hexapdf/test_object.rb +16 -4
- data/test/hexapdf/test_parser.rb +36 -36
- data/test/hexapdf/test_reference.rb +7 -5
- data/test/hexapdf/test_revision.rb +1 -1
- data/test/hexapdf/test_revisions.rb +90 -90
- data/test/hexapdf/test_serializer.rb +3 -2
- data/test/hexapdf/test_stream.rb +2 -4
- data/test/hexapdf/test_tokenizer.rb +2 -2
- data/test/hexapdf/test_writer.rb +80 -80
- data/test/hexapdf/test_xref_section.rb +1 -1
- data/test/hexapdf/type/annotations/test_link.rb +1 -1
- data/test/hexapdf/type/annotations/test_text.rb +3 -3
- data/test/hexapdf/type/test_font_descriptor.rb +1 -1
- data/test/hexapdf/type/test_font_simple.rb +2 -2
- data/test/hexapdf/type/test_font_type0.rb +0 -1
- data/test/hexapdf/type/test_image.rb +0 -3
- data/test/hexapdf/type/test_object_stream.rb +2 -1
- data/test/hexapdf/type/test_page.rb +5 -1
- data/test/hexapdf/type/test_page_tree_node.rb +4 -4
- data/test/hexapdf/type/test_trailer.rb +1 -1
- data/test/hexapdf/type/test_xref_stream.rb +4 -0
- data/test/hexapdf/utils/test_bit_field.rb +2 -0
- data/test/hexapdf/utils/test_bit_stream.rb +1 -1
- data/test/hexapdf/utils/test_lru_cache.rb +1 -1
- data/test/hexapdf/utils/test_sorted_tree_node.rb +10 -4
- data/test/test_helper.rb +3 -6
- 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
|
-
|
|
21
|
+
FirstChar: 32, LastChar: 34, Widths: [600, 0, 700]},
|
|
22
|
+
type: HexaPDF::Type::FontSimple)
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
describe "encoding" do
|
|
@@ -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
|
|
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
|
|
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))
|
|
@@ -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
|
-
|
|
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
|
-
|
|
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.
|
|
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:
|
|
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.
|
|
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
|