pdfjs-dist 2.1.266 → 2.5.207
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.
Potentially problematic release.
This version of pdfjs-dist might be problematic. Click here for more details.
- package/CODE_OF_CONDUCT.md +15 -0
- package/README.md +4 -0
- package/bower.json +1 -1
- package/build/pdf.js +8382 -18492
- package/build/pdf.js.map +1 -1
- package/build/pdf.min.js +22 -1
- package/build/pdf.worker.entry.js +5 -3
- package/build/pdf.worker.js +20417 -29816
- package/build/pdf.worker.js.map +1 -1
- package/build/pdf.worker.min.js +22 -1
- package/es5/build/pdf.js +25688 -0
- package/es5/build/pdf.js.map +1 -0
- package/{lib/shared/global_scope.js → es5/build/pdf.worker.entry.js} +5 -10
- package/es5/build/pdf.worker.js +58239 -0
- package/es5/build/pdf.worker.js.map +1 -0
- package/es5/web/images/annotation-check.svg +11 -0
- package/es5/web/images/annotation-comment.svg +16 -0
- package/es5/web/images/annotation-help.svg +26 -0
- package/es5/web/images/annotation-insert.svg +10 -0
- package/es5/web/images/annotation-key.svg +11 -0
- package/es5/web/images/annotation-newparagraph.svg +11 -0
- package/es5/web/images/annotation-noicon.svg +7 -0
- package/es5/web/images/annotation-note.svg +42 -0
- package/es5/web/images/annotation-paragraph.svg +16 -0
- package/es5/web/images/loading-icon.gif +0 -0
- package/es5/web/images/shadow.png +0 -0
- package/es5/web/images/texture.png +0 -0
- package/es5/web/pdf_viewer.css +403 -0
- package/es5/web/pdf_viewer.js +7742 -0
- package/es5/web/pdf_viewer.js.map +1 -0
- package/image_decoders/pdf.image_decoders.js +1475 -4897
- package/image_decoders/pdf.image_decoders.js.map +1 -1
- package/image_decoders/pdf.image_decoders.min.js +22 -1
- package/lib/README.md +7 -0
- package/lib/core/annotation.js +750 -899
- package/lib/core/arithmetic_decoder.js +81 -97
- package/lib/core/bidi.js +54 -46
- package/lib/core/ccitt.js +88 -81
- package/lib/core/ccitt_stream.js +15 -14
- package/lib/core/cff_parser.js +235 -183
- package/lib/core/charsets.js +4 -4
- package/lib/core/chunked_stream.js +447 -542
- package/lib/core/cmap.js +222 -264
- package/lib/core/colorspace.js +699 -863
- package/lib/core/core_utils.js +152 -0
- package/lib/core/crypto.js +379 -437
- package/lib/core/document.js +573 -660
- package/lib/core/encodings.js +15 -15
- package/lib/core/evaluator.js +1103 -868
- package/lib/core/font_renderer.js +135 -178
- package/lib/core/fonts.js +570 -491
- package/lib/core/function.js +291 -288
- package/lib/core/glyphlist.js +4527 -4526
- package/lib/core/image.js +145 -149
- package/lib/core/image_utils.js +170 -0
- package/lib/core/jbig2.js +325 -316
- package/lib/core/jbig2_stream.js +18 -17
- package/lib/core/jpeg_stream.js +21 -26
- package/lib/core/jpg.js +284 -232
- package/lib/core/jpx.js +161 -143
- package/lib/core/jpx_stream.js +28 -28
- package/lib/core/metrics.js +2929 -2929
- package/lib/core/murmurhash3.js +90 -101
- package/lib/core/obj.js +1183 -1157
- package/lib/core/operator_list.js +99 -67
- package/lib/core/parser.js +972 -911
- package/lib/core/pattern.js +87 -70
- package/lib/core/pdf_manager.js +150 -315
- package/lib/core/primitives.js +83 -56
- package/lib/core/ps_parser.js +175 -214
- package/lib/core/standard_fonts.js +237 -236
- package/lib/core/stream.js +94 -74
- package/lib/core/type1_parser.js +87 -69
- package/lib/core/unicode.js +1654 -1654
- package/lib/core/worker.js +193 -390
- package/lib/core/worker_stream.js +168 -0
- package/lib/display/annotation_layer.js +741 -972
- package/lib/display/api.js +1500 -1791
- package/lib/display/api_compatibility.js +12 -17
- package/lib/display/canvas.js +165 -165
- package/lib/display/content_disposition.js +40 -59
- package/lib/display/display_utils.js +515 -0
- package/lib/display/fetch_stream.js +183 -298
- package/lib/display/font_loader.js +273 -413
- package/lib/display/metadata.js +86 -98
- package/lib/display/network.js +266 -359
- package/lib/display/network_utils.js +25 -18
- package/lib/display/node_stream.js +285 -458
- package/lib/display/pattern_helper.js +113 -65
- package/lib/display/svg.js +1166 -901
- package/lib/display/text_layer.js +156 -132
- package/lib/display/transport_stream.js +262 -278
- package/lib/display/webgl.js +70 -83
- package/lib/display/worker_options.js +3 -3
- package/lib/display/xml_parser.js +303 -392
- package/lib/examples/node/domstubs.js +40 -37
- package/lib/pdf.js +226 -59
- package/lib/pdf.worker.js +14 -6
- package/lib/shared/compatibility.js +3 -246
- package/lib/shared/is_node.js +7 -6
- package/lib/shared/message_handler.js +327 -332
- package/lib/shared/util.js +266 -416
- package/lib/test/unit/annotation_spec.js +1555 -701
- package/lib/test/unit/api_spec.js +802 -604
- package/lib/test/unit/bidi_spec.js +7 -7
- package/lib/test/unit/cff_parser_spec.js +84 -69
- package/lib/test/unit/clitests_helper.js +7 -9
- package/lib/test/unit/cmap_spec.js +74 -76
- package/lib/test/unit/colorspace_spec.js +166 -161
- package/lib/test/unit/core_utils_spec.js +211 -0
- package/lib/test/unit/crypto_spec.js +181 -181
- package/lib/test/unit/custom_spec.js +20 -22
- package/lib/test/unit/display_svg_spec.js +34 -39
- package/lib/test/unit/display_utils_spec.js +263 -0
- package/lib/test/unit/document_spec.js +16 -21
- package/lib/test/unit/encodings_spec.js +12 -34
- package/lib/test/unit/evaluator_spec.js +83 -83
- package/lib/test/unit/fetch_stream_spec.js +111 -0
- package/lib/test/unit/function_spec.js +206 -204
- package/lib/test/unit/jasmine-boot.js +46 -30
- package/lib/test/unit/message_handler_spec.js +173 -159
- package/lib/test/unit/metadata_spec.js +69 -69
- package/lib/test/unit/murmurhash3_spec.js +12 -12
- package/lib/test/unit/network_spec.js +13 -61
- package/lib/test/unit/network_utils_spec.js +183 -119
- package/lib/test/unit/node_stream_spec.js +78 -92
- package/lib/test/unit/parser_spec.js +172 -114
- package/lib/test/unit/pdf_find_controller_spec.js +55 -86
- package/lib/test/unit/pdf_find_utils_spec.js +32 -32
- package/lib/test/unit/pdf_history_spec.js +32 -32
- package/lib/test/unit/primitives_spec.js +140 -125
- package/lib/test/unit/stream_spec.js +16 -14
- package/lib/test/unit/test_utils.js +131 -143
- package/lib/test/unit/testreporter.js +19 -19
- package/lib/test/unit/type1_parser_spec.js +42 -42
- package/lib/test/unit/ui_utils_spec.js +297 -459
- package/lib/test/unit/unicode_spec.js +38 -38
- package/lib/test/unit/util_spec.js +121 -305
- package/lib/web/annotation_layer_builder.js +66 -103
- package/lib/web/app.js +1328 -1214
- package/lib/web/app_options.js +105 -107
- package/lib/web/base_viewer.js +824 -838
- package/lib/web/chromecom.js +165 -252
- package/lib/web/debugger.js +149 -205
- package/lib/web/download_manager.js +39 -55
- package/lib/web/firefox_print_service.js +37 -27
- package/lib/web/firefoxcom.js +212 -363
- package/lib/web/genericcom.js +26 -108
- package/lib/web/genericl10n.js +24 -153
- package/lib/web/grab_to_pan.js +32 -30
- package/lib/web/interfaces.js +80 -254
- package/lib/web/overlay_manager.js +70 -246
- package/lib/web/password_prompt.js +38 -64
- package/lib/web/pdf_attachment_viewer.js +113 -131
- package/lib/web/pdf_cursor_tools.js +75 -102
- package/lib/web/pdf_document_properties.js +221 -306
- package/lib/web/pdf_find_bar.js +136 -170
- package/lib/web/pdf_find_controller.js +491 -548
- package/lib/web/pdf_find_utils.js +13 -13
- package/lib/web/pdf_history.js +397 -406
- package/lib/web/pdf_link_service.js +304 -348
- package/lib/web/pdf_outline_viewer.js +140 -175
- package/lib/web/pdf_page_view.js +452 -523
- package/lib/web/pdf_presentation_mode.js +308 -357
- package/lib/web/pdf_print_service.js +90 -104
- package/lib/web/pdf_rendering_queue.js +84 -108
- package/lib/web/pdf_sidebar.js +276 -306
- package/lib/web/pdf_sidebar_resizer.js +92 -119
- package/lib/web/pdf_single_page_viewer.js +77 -126
- package/lib/web/pdf_thumbnail_view.js +276 -297
- package/lib/web/pdf_thumbnail_viewer.js +186 -206
- package/lib/web/pdf_viewer.component.js +20 -21
- package/lib/web/pdf_viewer.js +55 -115
- package/lib/web/preferences.js +82 -286
- package/lib/web/secondary_toolbar.js +164 -196
- package/lib/web/text_layer_builder.js +282 -339
- package/lib/web/toolbar.js +217 -210
- package/lib/web/ui_utils.js +267 -420
- package/lib/web/view_history.js +52 -226
- package/lib/web/viewer_compatibility.js +21 -6
- package/package.json +2 -9
- package/web/pdf_viewer.css +35 -25
- package/web/pdf_viewer.js +3489 -4855
- package/web/pdf_viewer.js.map +1 -1
- package/webpack.js +14 -5
- package/external/streams/streams-lib.js +0 -3962
- package/external/url/url-lib.js +0 -627
- package/lib/display/dom_utils.js +0 -494
- package/lib/shared/streams_polyfill.js +0 -43
- package/lib/shared/url_polyfill.js +0 -56
- package/lib/test/unit/dom_utils_spec.js +0 -89
@@ -2,7 +2,7 @@
|
|
2
2
|
* @licstart The following is the entire license notice for the
|
3
3
|
* Javascript code in this page
|
4
4
|
*
|
5
|
-
* Copyright
|
5
|
+
* Copyright 2020 Mozilla Foundation
|
6
6
|
*
|
7
7
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
8
8
|
* you may not use this file except in compliance with the License.
|
@@ -21,125 +21,183 @@
|
|
21
21
|
*/
|
22
22
|
"use strict";
|
23
23
|
|
24
|
-
var _parser = require("../../core/parser");
|
24
|
+
var _parser = require("../../core/parser.js");
|
25
25
|
|
26
|
-
var _util = require("../../shared/util");
|
26
|
+
var _util = require("../../shared/util.js");
|
27
27
|
|
28
|
-
var _primitives = require("../../core/primitives");
|
28
|
+
var _primitives = require("../../core/primitives.js");
|
29
29
|
|
30
|
-
var _stream = require("../../core/stream");
|
30
|
+
var _stream = require("../../core/stream.js");
|
31
31
|
|
32
|
-
describe(
|
33
|
-
describe(
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
32
|
+
describe("parser", function () {
|
33
|
+
describe("Parser", function () {
|
34
|
+
describe("inlineStreamSkipEI", function () {
|
35
|
+
it("should skip over the EI marker if it is found", function () {
|
36
|
+
const string = "q 1 0 0 1 0 0 cm BI /W 10 /H 10 /BPC 1 " + "/F /A85 ID abc123~> EI Q";
|
37
|
+
const input = new _stream.StringStream(string);
|
38
|
+
const parser = new _parser.Parser({
|
39
|
+
lexer: new _parser.Lexer(input),
|
40
|
+
xref: null,
|
41
|
+
allowStreams: true
|
42
|
+
});
|
43
|
+
parser.inlineStreamSkipEI(input);
|
44
|
+
expect(input.pos).toEqual(string.indexOf("Q"));
|
45
|
+
expect(input.peekByte()).toEqual(0x51);
|
46
|
+
});
|
47
|
+
it("should skip to the end of stream if the EI marker is not found", function () {
|
48
|
+
const string = "q 1 0 0 1 0 0 cm BI /W 10 /H 10 /BPC 1 /F /A85 ID abc123~> Q";
|
49
|
+
const input = new _stream.StringStream(string);
|
50
|
+
const parser = new _parser.Parser({
|
51
|
+
lexer: new _parser.Lexer(input),
|
52
|
+
xref: null,
|
53
|
+
allowStreams: true
|
54
|
+
});
|
55
|
+
parser.inlineStreamSkipEI(input);
|
56
|
+
expect(input.pos).toEqual(string.length);
|
57
|
+
expect(input.peekByte()).toEqual(-1);
|
58
|
+
});
|
39
59
|
});
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
expect(result).toEqual(-205.88);
|
56
|
-
});
|
57
|
-
it('should ignore minus signs in the middle of number', function () {
|
58
|
-
var input = new _stream.StringStream('205--.88');
|
59
|
-
var lexer = new _parser.Lexer(input);
|
60
|
-
var result = lexer.getNumber();
|
61
|
-
expect(result).toEqual(205.88);
|
60
|
+
});
|
61
|
+
describe("Lexer", function () {
|
62
|
+
describe("nextChar", function () {
|
63
|
+
it("should return and set -1 when the end of the stream is reached", function () {
|
64
|
+
const input = new _stream.StringStream("");
|
65
|
+
const lexer = new _parser.Lexer(input);
|
66
|
+
expect(lexer.nextChar()).toEqual(-1);
|
67
|
+
expect(lexer.currentChar).toEqual(-1);
|
68
|
+
});
|
69
|
+
it("should return and set the character after the current position", function () {
|
70
|
+
const input = new _stream.StringStream("123");
|
71
|
+
const lexer = new _parser.Lexer(input);
|
72
|
+
expect(lexer.nextChar()).toEqual(0x32);
|
73
|
+
expect(lexer.currentChar).toEqual(0x32);
|
74
|
+
});
|
62
75
|
});
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
76
|
+
describe("peekChar", function () {
|
77
|
+
it("should only return -1 when the end of the stream is reached", function () {
|
78
|
+
const input = new _stream.StringStream("");
|
79
|
+
const lexer = new _parser.Lexer(input);
|
80
|
+
expect(lexer.peekChar()).toEqual(-1);
|
81
|
+
expect(lexer.currentChar).toEqual(-1);
|
82
|
+
});
|
83
|
+
it("should only return the character after the current position", function () {
|
84
|
+
const input = new _stream.StringStream("123");
|
85
|
+
const lexer = new _parser.Lexer(input);
|
86
|
+
expect(lexer.peekChar()).toEqual(0x32);
|
87
|
+
expect(lexer.currentChar).toEqual(0x31);
|
88
|
+
});
|
70
89
|
});
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
90
|
+
describe("getNumber", function () {
|
91
|
+
it("should stop parsing numbers at the end of stream", function () {
|
92
|
+
const input = new _stream.StringStream("11.234");
|
93
|
+
const lexer = new _parser.Lexer(input);
|
94
|
+
expect(lexer.getNumber()).toEqual(11.234);
|
95
|
+
});
|
96
|
+
it("should parse PostScript numbers", function () {
|
97
|
+
const numbers = ["-.002", "34.5", "-3.62", "123.6e10", "1E-5", "-1.", "0.0", "123", "-98", "43445", "0", "+17"];
|
76
98
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
return lexer.getNumber();
|
83
|
-
}).toThrowError(_util.FormatError, /^Invalid number:\s/);
|
84
|
-
};
|
99
|
+
for (const number of numbers) {
|
100
|
+
const input = new _stream.StringStream(number);
|
101
|
+
const lexer = new _parser.Lexer(input);
|
102
|
+
const result = lexer.getNumber(),
|
103
|
+
expected = parseFloat(number);
|
85
104
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
var input = new _stream.StringStream('123ET');
|
92
|
-
var lexer = new _parser.Lexer(input);
|
93
|
-
var value = lexer.getNumber();
|
94
|
-
expect(value).toEqual(123);
|
95
|
-
expect(lexer.currentChar).toEqual(0x45);
|
96
|
-
});
|
97
|
-
it('should stop parsing strings at the end of stream', function () {
|
98
|
-
var input = new _stream.StringStream('(1$4)');
|
105
|
+
if (result !== expected && Math.abs(result - expected) < 1e-15) {
|
106
|
+
console.error(`Fuzzy matching "${result}" with "${expected}" to ` + "work-around rounding bugs in Chromium browsers.");
|
107
|
+
expect(true).toEqual(true);
|
108
|
+
continue;
|
109
|
+
}
|
99
110
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
111
|
+
expect(result).toEqual(expected);
|
112
|
+
}
|
113
|
+
});
|
114
|
+
it("should ignore double negative before number", function () {
|
115
|
+
const input = new _stream.StringStream("--205.88");
|
116
|
+
const lexer = new _parser.Lexer(input);
|
117
|
+
expect(lexer.getNumber()).toEqual(-205.88);
|
118
|
+
});
|
119
|
+
it("should ignore minus signs in the middle of number", function () {
|
120
|
+
const input = new _stream.StringStream("205--.88");
|
121
|
+
const lexer = new _parser.Lexer(input);
|
122
|
+
expect(lexer.getNumber()).toEqual(205.88);
|
123
|
+
});
|
124
|
+
it("should ignore line-breaks between operator and digit in number", function () {
|
125
|
+
const minusInput = new _stream.StringStream("-\r\n205.88");
|
126
|
+
const minusLexer = new _parser.Lexer(minusInput);
|
127
|
+
expect(minusLexer.getNumber()).toEqual(-205.88);
|
128
|
+
const plusInput = new _stream.StringStream("+\r\n205.88");
|
129
|
+
const plusLexer = new _parser.Lexer(plusInput);
|
130
|
+
expect(plusLexer.getNumber()).toEqual(205.88);
|
131
|
+
});
|
132
|
+
it("should treat a single decimal point as zero", function () {
|
133
|
+
const input = new _stream.StringStream(".");
|
134
|
+
const lexer = new _parser.Lexer(input);
|
135
|
+
expect(lexer.getNumber()).toEqual(0);
|
136
|
+
const numbers = ["..", "-.", "+.", "-\r\n.", "+\r\n."];
|
104
137
|
|
105
|
-
|
106
|
-
|
107
|
-
|
138
|
+
for (const number of numbers) {
|
139
|
+
const invalidInput = new _stream.StringStream(number);
|
140
|
+
const invalidLexer = new _parser.Lexer(invalidInput);
|
141
|
+
expect(function () {
|
142
|
+
return invalidLexer.getNumber();
|
143
|
+
}).toThrowError(_util.FormatError, /^Invalid number:\s/);
|
144
|
+
}
|
145
|
+
});
|
146
|
+
it("should handle glued numbers and operators", function () {
|
147
|
+
const input = new _stream.StringStream("123ET");
|
148
|
+
const lexer = new _parser.Lexer(input);
|
149
|
+
expect(lexer.getNumber()).toEqual(123);
|
150
|
+
expect(lexer.currentChar).toEqual(0x45);
|
151
|
+
});
|
108
152
|
});
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
153
|
+
describe("getString", function () {
|
154
|
+
it("should stop parsing strings at the end of stream", function () {
|
155
|
+
const input = new _stream.StringStream("(1$4)");
|
156
|
+
|
157
|
+
input.getByte = function (super_getByte) {
|
158
|
+
const ch = super_getByte.call(input);
|
159
|
+
return ch === 0x24 ? -1 : ch;
|
160
|
+
}.bind(input, input.getByte);
|
161
|
+
|
162
|
+
const lexer = new _parser.Lexer(input);
|
163
|
+
expect(lexer.getString()).toEqual("1");
|
164
|
+
});
|
165
|
+
it("should ignore escaped CR and LF", function () {
|
166
|
+
const input = new _stream.StringStream("(\\101\\\r\n\\102\\\r\\103\\\n\\104)");
|
167
|
+
const lexer = new _parser.Lexer(input);
|
168
|
+
expect(lexer.getString()).toEqual("ABCD");
|
169
|
+
});
|
114
170
|
});
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
171
|
+
describe("getHexString", function () {
|
172
|
+
it("should not throw exception on bad input", function () {
|
173
|
+
const input = new _stream.StringStream("<7 0 2 15 5 2 2 2 4 3 2 4>");
|
174
|
+
const lexer = new _parser.Lexer(input);
|
175
|
+
expect(lexer.getHexString()).toEqual('p!U"$2');
|
176
|
+
});
|
120
177
|
});
|
121
|
-
|
122
|
-
|
123
|
-
|
178
|
+
describe("getName", function () {
|
179
|
+
it("should handle Names with invalid usage of NUMBER SIGN (#)", function () {
|
180
|
+
const inputNames = ["/# 680 0 R", "/#AQwerty", "/#A<</B"];
|
181
|
+
const expectedNames = ["#", "#AQwerty", "#A"];
|
124
182
|
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
}
|
183
|
+
for (let i = 0, ii = inputNames.length; i < ii; i++) {
|
184
|
+
const input = new _stream.StringStream(inputNames[i]);
|
185
|
+
const lexer = new _parser.Lexer(input);
|
186
|
+
expect(lexer.getName()).toEqual(_primitives.Name.get(expectedNames[i]));
|
187
|
+
}
|
188
|
+
});
|
131
189
|
});
|
132
190
|
});
|
133
|
-
describe(
|
134
|
-
it(
|
135
|
-
|
191
|
+
describe("Linearization", function () {
|
192
|
+
it("should not find a linearization dictionary", function () {
|
193
|
+
const stream1 = new _stream.StringStream("3 0 obj\n" + "<<\n" + "/Length 4622\n" + "/Filter /FlateDecode\n" + ">>\n" + "endobj");
|
136
194
|
expect(_parser.Linearization.create(stream1)).toEqual(null);
|
137
|
-
|
195
|
+
const stream2 = new _stream.StringStream("1 0 obj\n" + "<<\n" + "/Linearized 0\n" + ">>\n" + "endobj");
|
138
196
|
expect(_parser.Linearization.create(stream2)).toEqual(null);
|
139
197
|
});
|
140
|
-
it(
|
141
|
-
|
142
|
-
|
198
|
+
it("should accept a valid linearization dictionary", function () {
|
199
|
+
const stream = new _stream.StringStream("131 0 obj\n" + "<<\n" + "/Linearized 1\n" + "/O 133\n" + "/H [ 1388 863 ]\n" + "/L 90\n" + "/E 43573\n" + "/N 18\n" + "/T 193883\n" + ">>\n" + "endobj");
|
200
|
+
const expectedLinearizationDict = {
|
143
201
|
length: 90,
|
144
202
|
hints: [1388, 863],
|
145
203
|
objectNumberFirst: 133,
|
@@ -150,33 +208,33 @@ describe('parser', function () {
|
|
150
208
|
};
|
151
209
|
expect(_parser.Linearization.create(stream)).toEqual(expectedLinearizationDict);
|
152
210
|
});
|
153
|
-
it(
|
154
|
-
|
211
|
+
it("should reject a linearization dictionary with invalid " + "integer parameters", function () {
|
212
|
+
const stream1 = new _stream.StringStream("1 0 obj\n" + "<<\n" + "/Linearized 1\n" + "/O 133\n" + "/H [ 1388 863 ]\n" + "/L 196622\n" + "/E 43573\n" + "/N 18\n" + "/T 193883\n" + ">>\n" + "endobj");
|
155
213
|
expect(function () {
|
156
214
|
return _parser.Linearization.create(stream1);
|
157
|
-
}).toThrow(new Error('The "L" parameter in the linearization ' +
|
158
|
-
|
215
|
+
}).toThrow(new Error('The "L" parameter in the linearization ' + "dictionary does not equal the stream length."));
|
216
|
+
const stream2 = new _stream.StringStream("1 0 obj\n" + "<<\n" + "/Linearized 1\n" + "/O 133\n" + "/H [ 1388 863 ]\n" + "/L 84\n" + "/E 0\n" + "/N 18\n" + "/T 193883\n" + ">>\n" + "endobj");
|
159
217
|
expect(function () {
|
160
218
|
return _parser.Linearization.create(stream2);
|
161
|
-
}).toThrow(new Error('The "E" parameter in the linearization
|
162
|
-
|
219
|
+
}).toThrow(new Error('The "E" parameter in the linearization dictionary is invalid.'));
|
220
|
+
const stream3 = new _stream.StringStream("1 0 obj\n" + "<<\n" + "/Linearized 1\n" + "/O /abc\n" + "/H [ 1388 863 ]\n" + "/L 89\n" + "/E 43573\n" + "/N 18\n" + "/T 193883\n" + ">>\n" + "endobj");
|
163
221
|
expect(function () {
|
164
222
|
return _parser.Linearization.create(stream3);
|
165
|
-
}).toThrow(new Error('The "O" parameter in the linearization
|
223
|
+
}).toThrow(new Error('The "O" parameter in the linearization dictionary is invalid.'));
|
166
224
|
});
|
167
|
-
it(
|
168
|
-
|
225
|
+
it("should reject a linearization dictionary with invalid hint parameters", function () {
|
226
|
+
const stream1 = new _stream.StringStream("1 0 obj\n" + "<<\n" + "/Linearized 1\n" + "/O 133\n" + "/H 1388\n" + "/L 80\n" + "/E 43573\n" + "/N 18\n" + "/T 193883\n" + ">>\n" + "endobj");
|
169
227
|
expect(function () {
|
170
228
|
return _parser.Linearization.create(stream1);
|
171
|
-
}).toThrow(new Error(
|
172
|
-
|
229
|
+
}).toThrow(new Error("Hint array in the linearization dictionary is invalid."));
|
230
|
+
const stream2 = new _stream.StringStream("1 0 obj\n" + "<<\n" + "/Linearized 1\n" + "/O 133\n" + "/H [ 1388 ]\n" + "/L 84\n" + "/E 43573\n" + "/N 18\n" + "/T 193883\n" + ">>\n" + "endobj");
|
173
231
|
expect(function () {
|
174
232
|
return _parser.Linearization.create(stream2);
|
175
|
-
}).toThrow(new Error(
|
176
|
-
|
233
|
+
}).toThrow(new Error("Hint array in the linearization dictionary is invalid."));
|
234
|
+
const stream3 = new _stream.StringStream("1 0 obj\n" + "<<\n" + "/Linearized 1\n" + "/O 133\n" + "/H [ 1388 863 0 234]\n" + "/L 93\n" + "/E 43573\n" + "/N 18\n" + "/T 193883\n" + ">>\n" + "endobj");
|
177
235
|
expect(function () {
|
178
236
|
return _parser.Linearization.create(stream3);
|
179
|
-
}).toThrow(new Error(
|
237
|
+
}).toThrow(new Error("Hint (2) in the linearization dictionary is invalid."));
|
180
238
|
});
|
181
239
|
});
|
182
240
|
});
|
@@ -2,7 +2,7 @@
|
|
2
2
|
* @licstart The following is the entire license notice for the
|
3
3
|
* Javascript code in this page
|
4
4
|
*
|
5
|
-
* Copyright
|
5
|
+
* Copyright 2020 Mozilla Foundation
|
6
6
|
*
|
7
7
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
8
8
|
* you may not use this file except in compliance with the License.
|
@@ -21,85 +21,53 @@
|
|
21
21
|
*/
|
22
22
|
"use strict";
|
23
23
|
|
24
|
-
var _test_utils = require("./test_utils");
|
24
|
+
var _test_utils = require("./test_utils.js");
|
25
25
|
|
26
|
-
var _ui_utils = require("../../web/ui_utils");
|
26
|
+
var _ui_utils = require("../../web/ui_utils.js");
|
27
27
|
|
28
|
-
var _api = require("../../display/api");
|
28
|
+
var _api = require("../../display/api.js");
|
29
29
|
|
30
|
-
var _pdf_find_controller = require("../../web/pdf_find_controller");
|
30
|
+
var _pdf_find_controller = require("../../web/pdf_find_controller.js");
|
31
31
|
|
32
|
-
var _pdf_link_service = require("../../web/pdf_link_service");
|
32
|
+
var _pdf_link_service = require("../../web/pdf_link_service.js");
|
33
33
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
41
|
-
|
42
|
-
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
|
43
|
-
|
44
|
-
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
45
|
-
|
46
|
-
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
47
|
-
|
48
|
-
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
49
|
-
|
50
|
-
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
34
|
+
class MockLinkService extends _pdf_link_service.SimpleLinkService {
|
35
|
+
constructor() {
|
36
|
+
super();
|
37
|
+
this._page = 1;
|
38
|
+
this._pdfDocument = null;
|
39
|
+
}
|
51
40
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
_inherits(MockLinkService, _SimpleLinkService);
|
41
|
+
setDocument(pdfDocument) {
|
42
|
+
this._pdfDocument = pdfDocument;
|
43
|
+
}
|
56
44
|
|
57
|
-
|
58
|
-
|
45
|
+
get pagesCount() {
|
46
|
+
return this._pdfDocument.numPages;
|
47
|
+
}
|
59
48
|
|
60
|
-
|
49
|
+
get page() {
|
50
|
+
return this._page;
|
51
|
+
}
|
61
52
|
|
62
|
-
|
63
|
-
|
64
|
-
_this._pdfDocument = null;
|
65
|
-
return _this;
|
53
|
+
set page(value) {
|
54
|
+
this._page = value;
|
66
55
|
}
|
67
56
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
}, {
|
74
|
-
key: "pagesCount",
|
75
|
-
get: function get() {
|
76
|
-
return this._pdfDocument.numPages;
|
77
|
-
}
|
78
|
-
}, {
|
79
|
-
key: "page",
|
80
|
-
get: function get() {
|
81
|
-
return this._page;
|
82
|
-
},
|
83
|
-
set: function set(value) {
|
84
|
-
this._page = value;
|
85
|
-
}
|
86
|
-
}]);
|
87
|
-
|
88
|
-
return MockLinkService;
|
89
|
-
}(_pdf_link_service.SimpleLinkService);
|
90
|
-
|
91
|
-
describe('pdf_find_controller', function () {
|
92
|
-
var eventBus;
|
93
|
-
var pdfFindController;
|
57
|
+
}
|
58
|
+
|
59
|
+
describe("pdf_find_controller", function () {
|
60
|
+
let eventBus;
|
61
|
+
let pdfFindController;
|
94
62
|
beforeEach(function (done) {
|
95
|
-
|
63
|
+
const loadingTask = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)("tracemonkey.pdf"));
|
96
64
|
loadingTask.promise.then(function (pdfDocument) {
|
97
65
|
eventBus = new _ui_utils.EventBus();
|
98
|
-
|
66
|
+
const linkService = new MockLinkService();
|
99
67
|
linkService.setDocument(pdfDocument);
|
100
68
|
pdfFindController = new _pdf_find_controller.PDFFindController({
|
101
|
-
linkService
|
102
|
-
eventBus
|
69
|
+
linkService,
|
70
|
+
eventBus
|
103
71
|
});
|
104
72
|
pdfFindController.setDocument(pdfDocument);
|
105
73
|
done();
|
@@ -110,34 +78,35 @@ describe('pdf_find_controller', function () {
|
|
110
78
|
pdfFindController = null;
|
111
79
|
});
|
112
80
|
|
113
|
-
function testSearch(
|
114
|
-
|
115
|
-
|
116
|
-
|
81
|
+
function testSearch({
|
82
|
+
parameters,
|
83
|
+
matchesPerPage,
|
84
|
+
selectedMatch
|
85
|
+
}) {
|
117
86
|
return new Promise(function (resolve) {
|
118
|
-
pdfFindController.executeCommand(
|
119
|
-
|
87
|
+
pdfFindController.executeCommand("find", parameters);
|
88
|
+
let totalPages = matchesPerPage.length;
|
120
89
|
|
121
|
-
for (
|
90
|
+
for (let i = totalPages - 1; i >= 0; i--) {
|
122
91
|
if (matchesPerPage[i] > 0) {
|
123
92
|
totalPages = i + 1;
|
124
93
|
break;
|
125
94
|
}
|
126
95
|
}
|
127
96
|
|
128
|
-
|
97
|
+
const totalMatches = matchesPerPage.reduce((a, b) => {
|
129
98
|
return a + b;
|
130
99
|
});
|
131
|
-
eventBus.on(
|
100
|
+
eventBus.on("updatefindmatchescount", function onUpdateFindMatchesCount(evt) {
|
132
101
|
if (pdfFindController.pageMatches.length !== totalPages) {
|
133
102
|
return;
|
134
103
|
}
|
135
104
|
|
136
|
-
eventBus.off(
|
105
|
+
eventBus.off("updatefindmatchescount", onUpdateFindMatchesCount);
|
137
106
|
expect(evt.matchesCount.total).toBe(totalMatches);
|
138
107
|
|
139
|
-
for (
|
140
|
-
expect(pdfFindController.pageMatches[
|
108
|
+
for (let i = 0; i < totalPages; i++) {
|
109
|
+
expect(pdfFindController.pageMatches[i].length).toEqual(matchesPerPage[i]);
|
141
110
|
}
|
142
111
|
|
143
112
|
expect(pdfFindController.selected.pageIdx).toEqual(selectedMatch.pageIndex);
|
@@ -147,10 +116,10 @@ describe('pdf_find_controller', function () {
|
|
147
116
|
});
|
148
117
|
}
|
149
118
|
|
150
|
-
it(
|
119
|
+
it("performs a normal search", function (done) {
|
151
120
|
testSearch({
|
152
121
|
parameters: {
|
153
|
-
query:
|
122
|
+
query: "Dynamic",
|
154
123
|
caseSensitive: false,
|
155
124
|
entireWord: false,
|
156
125
|
phraseSearch: true,
|
@@ -163,10 +132,10 @@ describe('pdf_find_controller', function () {
|
|
163
132
|
}
|
164
133
|
}).then(done);
|
165
134
|
});
|
166
|
-
it(
|
135
|
+
it("performs a normal search and finds the previous result", function (done) {
|
167
136
|
testSearch({
|
168
137
|
parameters: {
|
169
|
-
query:
|
138
|
+
query: "conference",
|
170
139
|
caseSensitive: false,
|
171
140
|
entireWord: false,
|
172
141
|
phraseSearch: true,
|
@@ -179,10 +148,10 @@ describe('pdf_find_controller', function () {
|
|
179
148
|
}
|
180
149
|
}).then(done);
|
181
150
|
});
|
182
|
-
it(
|
151
|
+
it("performs a case sensitive search", function (done) {
|
183
152
|
testSearch({
|
184
153
|
parameters: {
|
185
|
-
query:
|
154
|
+
query: "Dynamic",
|
186
155
|
caseSensitive: true,
|
187
156
|
entireWord: false,
|
188
157
|
phraseSearch: true,
|
@@ -195,10 +164,10 @@ describe('pdf_find_controller', function () {
|
|
195
164
|
}
|
196
165
|
}).then(done);
|
197
166
|
});
|
198
|
-
it(
|
167
|
+
it("performs an entire word search", function (done) {
|
199
168
|
testSearch({
|
200
169
|
parameters: {
|
201
|
-
query:
|
170
|
+
query: "Government",
|
202
171
|
caseSensitive: false,
|
203
172
|
entireWord: true,
|
204
173
|
phraseSearch: true,
|
@@ -211,10 +180,10 @@ describe('pdf_find_controller', function () {
|
|
211
180
|
}
|
212
181
|
}).then(done);
|
213
182
|
});
|
214
|
-
it(
|
183
|
+
it("performs a multiple term (no phrase) search", function (done) {
|
215
184
|
testSearch({
|
216
185
|
parameters: {
|
217
|
-
query:
|
186
|
+
query: "alternate solution",
|
218
187
|
caseSensitive: false,
|
219
188
|
entireWord: false,
|
220
189
|
phraseSearch: false,
|