pdfjs-dist 2.2.228 → 2.6.347
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/README.md +4 -0
- package/bower.json +1 -1
- package/build/pdf.js +8816 -19300
- 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 +27185 -35746
- package/build/pdf.worker.js.map +1 -1
- package/build/pdf.worker.min.js +22 -1
- package/es5/build/pdf.js +26665 -0
- package/es5/build/pdf.js.map +1 -0
- package/es5/build/pdf.min.js +22 -0
- package/{lib/shared/global_scope.js → es5/build/pdf.worker.entry.js} +5 -10
- package/es5/build/pdf.worker.js +61231 -0
- package/es5/build/pdf.worker.js.map +1 -0
- package/es5/build/pdf.worker.min.js +22 -0
- package/es5/image_decoders/pdf.image_decoders.js +12529 -0
- package/es5/image_decoders/pdf.image_decoders.js.map +1 -0
- package/es5/image_decoders/pdf.image_decoders.min.js +22 -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/pdf_viewer.css +406 -0
- package/es5/web/pdf_viewer.js +7886 -0
- package/es5/web/pdf_viewer.js.map +1 -0
- package/image_decoders/pdf.image_decoders.js +1498 -4832
- 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 +1144 -927
- 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 +747 -716
- package/lib/core/charsets.js +4 -4
- package/lib/core/chunked_stream.js +462 -553
- package/lib/core/cmap.js +231 -277
- package/lib/core/colorspace.js +715 -857
- package/lib/core/core_utils.js +57 -52
- package/lib/core/crypto.js +416 -437
- package/lib/core/document.js +629 -670
- package/lib/core/encodings.js +15 -15
- package/lib/core/evaluator.js +3229 -2800
- package/lib/core/font_renderer.js +135 -178
- package/lib/core/fonts.js +602 -534
- package/lib/core/function.js +355 -279
- package/lib/core/glyphlist.js +4527 -4526
- package/lib/core/image.js +442 -439
- package/lib/core/image_utils.js +221 -61
- 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 +289 -233
- package/lib/core/jpx.js +161 -143
- package/lib/core/jpx_stream.js +28 -28
- package/lib/core/metrics.js +2928 -2928
- package/lib/core/murmurhash3.js +87 -102
- package/lib/core/obj.js +1343 -1300
- package/lib/core/operator_list.js +90 -67
- package/lib/core/parser.js +990 -987
- package/lib/core/pattern.js +105 -77
- package/lib/core/pdf_manager.js +149 -316
- package/lib/core/primitives.js +156 -104
- 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 +89 -69
- package/lib/core/unicode.js +1654 -1654
- package/lib/core/worker.js +275 -290
- package/lib/core/worker_stream.js +101 -210
- package/lib/core/writer.js +242 -0
- package/lib/display/annotation_layer.js +772 -1041
- package/lib/display/annotation_storage.js +89 -0
- package/lib/display/api.js +1575 -1868
- package/lib/display/api_compatibility.js +12 -17
- package/lib/display/canvas.js +370 -222
- package/lib/display/content_disposition.js +40 -59
- package/lib/display/display_utils.js +341 -536
- package/lib/display/fetch_stream.js +188 -304
- package/lib/display/font_loader.js +282 -414
- package/lib/display/metadata.js +81 -99
- package/lib/display/network.js +362 -511
- package/lib/display/network_utils.js +25 -18
- package/lib/display/node_stream.js +283 -465
- package/lib/display/node_utils.js +87 -0
- package/lib/display/optional_content_config.js +184 -0
- package/lib/display/pattern_helper.js +93 -44
- package/lib/display/svg.js +1163 -1401
- package/lib/display/text_layer.js +154 -137
- package/lib/display/transport_stream.js +237 -375
- 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 +37 -37
- package/lib/pdf.js +220 -58
- 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 +271 -306
- package/lib/test/unit/annotation_spec.js +1902 -763
- package/lib/test/unit/annotation_storage_spec.js +83 -0
- package/lib/test/unit/api_spec.js +790 -592
- package/lib/test/unit/bidi_spec.js +7 -7
- package/lib/test/unit/cff_parser_spec.js +73 -72
- package/lib/test/unit/clitests_helper.js +7 -9
- package/lib/test/unit/cmap_spec.js +86 -88
- package/lib/test/unit/colorspace_spec.js +346 -154
- package/lib/test/unit/core_utils_spec.js +125 -105
- package/lib/test/unit/crypto_spec.js +232 -185
- package/lib/test/unit/custom_spec.js +150 -24
- package/lib/test/unit/display_svg_spec.js +34 -39
- package/lib/test/unit/display_utils_spec.js +139 -149
- package/lib/test/unit/document_spec.js +128 -17
- package/lib/test/unit/encodings_spec.js +12 -34
- package/lib/test/unit/evaluator_spec.js +112 -91
- package/lib/test/unit/fetch_stream_spec.js +31 -29
- package/lib/test/unit/function_spec.js +206 -204
- package/lib/test/unit/jasmine-boot.js +48 -32
- package/lib/test/unit/message_handler_spec.js +173 -159
- package/lib/test/unit/metadata_spec.js +71 -71
- package/lib/test/unit/murmurhash3_spec.js +12 -12
- package/lib/test/unit/network_spec.js +13 -11
- package/lib/test/unit/network_utils_spec.js +158 -144
- package/lib/test/unit/node_stream_spec.js +76 -90
- package/lib/test/unit/parser_spec.js +108 -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 +337 -156
- package/lib/test/unit/stream_spec.js +16 -14
- package/lib/test/unit/test_utils.js +91 -304
- package/lib/test/unit/testreporter.js +33 -22
- package/lib/test/unit/type1_parser_spec.js +42 -42
- package/lib/test/unit/ui_utils_spec.js +299 -461
- package/lib/test/unit/unicode_spec.js +42 -42
- package/lib/test/unit/util_spec.js +129 -149
- package/lib/test/unit/writer_spec.js +84 -0
- package/lib/web/annotation_layer_builder.js +78 -111
- package/lib/web/app.js +1542 -1267
- package/lib/web/app_options.js +76 -91
- package/lib/web/base_tree_viewer.js +100 -0
- package/lib/web/base_viewer.js +869 -834
- package/lib/web/chromecom.js +165 -252
- package/lib/web/debugger.js +149 -205
- package/lib/web/download_manager.js +34 -58
- package/lib/web/firefox_print_service.js +62 -34
- package/lib/web/firefoxcom.js +206 -374
- package/lib/web/genericcom.js +26 -108
- package/lib/web/genericl10n.js +24 -153
- package/lib/web/grab_to_pan.js +30 -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 +150 -126
- package/lib/web/pdf_cursor_tools.js +75 -102
- package/lib/web/pdf_document_properties.js +229 -383
- package/lib/web/pdf_find_bar.js +136 -170
- package/lib/web/pdf_find_controller.js +492 -548
- package/lib/web/pdf_find_utils.js +13 -13
- package/lib/web/pdf_history.js +397 -406
- package/lib/web/pdf_layer_viewer.js +208 -0
- package/lib/web/pdf_link_service.js +304 -348
- package/lib/web/pdf_outline_viewer.js +119 -212
- package/lib/web/pdf_page_view.js +474 -513
- package/lib/web/pdf_presentation_mode.js +308 -357
- package/lib/web/pdf_print_service.js +96 -110
- package/lib/web/pdf_rendering_queue.js +87 -108
- package/lib/web/pdf_sidebar.js +286 -302
- 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 +289 -297
- package/lib/web/pdf_thumbnail_viewer.js +202 -206
- package/lib/web/pdf_viewer.component.js +20 -21
- package/lib/web/pdf_viewer.js +55 -115
- package/lib/web/preferences.js +69 -273
- package/lib/web/secondary_toolbar.js +164 -196
- package/lib/web/text_layer_builder.js +284 -319
- package/lib/web/toolbar.js +217 -210
- package/lib/web/ui_utils.js +274 -421
- package/lib/web/view_history.js +52 -226
- package/lib/web/viewer_compatibility.js +21 -6
- package/package.json +4 -9
- package/types/display/annotation_layer.d.ts +61 -0
- package/types/display/annotation_storage.d.ts +36 -0
- package/types/display/api.d.ts +1107 -0
- package/types/display/api_compatibility.d.ts +1 -0
- package/types/display/canvas.d.ts +4 -0
- package/types/display/content_disposition.d.ts +7 -0
- package/types/display/display_utils.d.ts +243 -0
- package/types/display/fetch_stream.d.ts +67 -0
- package/types/display/font_loader.d.ts +19 -0
- package/types/display/metadata.d.ts +9 -0
- package/types/display/network.d.ts +80 -0
- package/types/display/network_utils.d.ts +14 -0
- package/types/display/node_stream.d.ts +72 -0
- package/types/display/node_utils.d.ts +6 -0
- package/types/display/optional_content_config.d.ts +12 -0
- package/types/display/pattern_helper.d.ts +5 -0
- package/types/display/svg.d.ts +2 -0
- package/types/display/text_layer.d.ts +83 -0
- package/types/display/transport_stream.d.ts +57 -0
- package/types/display/webgl.d.ts +20 -0
- package/types/display/worker_options.d.ts +27 -0
- package/types/display/xml_parser.d.ts +35 -0
- package/types/pdf.d.ts +33 -0
- package/types/shared/compatibility.d.ts +1 -0
- package/types/shared/is_node.d.ts +1 -0
- package/types/shared/message_handler.d.ts +62 -0
- package/types/shared/util.d.ts +421 -0
- package/web/images/shadow.png +0 -0
- package/web/pdf_viewer.css +29 -27
- package/web/pdf_viewer.js +3524 -4746
- package/web/pdf_viewer.js.map +1 -1
- package/webpack.js +6 -5
- package/external/streams/streams-lib.js +0 -3962
- package/external/url/url-lib.js +0 -627
- package/lib/shared/streams_polyfill.js +0 -43
- package/lib/shared/url_polyfill.js +0 -56
- package/web/images/texture.png +0 -0
@@ -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,33 +21,33 @@
|
|
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
|
-
describe(
|
35
|
-
it(
|
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
39
|
lexer: new _parser.Lexer(input),
|
40
40
|
xref: null,
|
41
41
|
allowStreams: true
|
42
42
|
});
|
43
43
|
parser.inlineStreamSkipEI(input);
|
44
|
-
expect(input.pos).toEqual(string.indexOf(
|
44
|
+
expect(input.pos).toEqual(string.indexOf("Q"));
|
45
45
|
expect(input.peekByte()).toEqual(0x51);
|
46
46
|
});
|
47
|
-
it(
|
48
|
-
|
49
|
-
|
50
|
-
|
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
51
|
lexer: new _parser.Lexer(input),
|
52
52
|
xref: null,
|
53
53
|
allowStreams: true
|
@@ -58,53 +58,52 @@ describe('parser', function () {
|
|
58
58
|
});
|
59
59
|
});
|
60
60
|
});
|
61
|
-
describe(
|
62
|
-
describe(
|
63
|
-
it(
|
64
|
-
|
65
|
-
|
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
66
|
expect(lexer.nextChar()).toEqual(-1);
|
67
67
|
expect(lexer.currentChar).toEqual(-1);
|
68
68
|
});
|
69
|
-
it(
|
70
|
-
|
71
|
-
|
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
72
|
expect(lexer.nextChar()).toEqual(0x32);
|
73
73
|
expect(lexer.currentChar).toEqual(0x32);
|
74
74
|
});
|
75
75
|
});
|
76
|
-
describe(
|
77
|
-
it(
|
78
|
-
|
79
|
-
|
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
80
|
expect(lexer.peekChar()).toEqual(-1);
|
81
81
|
expect(lexer.currentChar).toEqual(-1);
|
82
82
|
});
|
83
|
-
it(
|
84
|
-
|
85
|
-
|
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
86
|
expect(lexer.peekChar()).toEqual(0x32);
|
87
87
|
expect(lexer.currentChar).toEqual(0x31);
|
88
88
|
});
|
89
89
|
});
|
90
|
-
describe(
|
91
|
-
it(
|
92
|
-
|
93
|
-
|
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
94
|
expect(lexer.getNumber()).toEqual(11.234);
|
95
95
|
});
|
96
|
-
it(
|
97
|
-
|
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"];
|
98
98
|
|
99
|
-
for (
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
expected = parseFloat(number);
|
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);
|
105
104
|
|
106
105
|
if (result !== expected && Math.abs(result - expected) < 1e-15) {
|
107
|
-
console.error(
|
106
|
+
console.error(`Fuzzy matching "${result}" with "${expected}" to ` + "work-around rounding bugs in Chromium browsers.");
|
108
107
|
expect(true).toEqual(true);
|
109
108
|
continue;
|
110
109
|
}
|
@@ -112,98 +111,93 @@ describe('parser', function () {
|
|
112
111
|
expect(result).toEqual(expected);
|
113
112
|
}
|
114
113
|
});
|
115
|
-
it(
|
116
|
-
|
117
|
-
|
114
|
+
it("should ignore double negative before number", function () {
|
115
|
+
const input = new _stream.StringStream("--205.88");
|
116
|
+
const lexer = new _parser.Lexer(input);
|
118
117
|
expect(lexer.getNumber()).toEqual(-205.88);
|
119
118
|
});
|
120
|
-
it(
|
121
|
-
|
122
|
-
|
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);
|
123
122
|
expect(lexer.getNumber()).toEqual(205.88);
|
124
123
|
});
|
125
|
-
it(
|
126
|
-
|
127
|
-
|
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);
|
128
127
|
expect(minusLexer.getNumber()).toEqual(-205.88);
|
129
|
-
|
130
|
-
|
128
|
+
const plusInput = new _stream.StringStream("+\r\n205.88");
|
129
|
+
const plusLexer = new _parser.Lexer(plusInput);
|
131
130
|
expect(plusLexer.getNumber()).toEqual(205.88);
|
132
131
|
});
|
133
|
-
it(
|
134
|
-
|
135
|
-
|
132
|
+
it("should treat a single decimal point as zero", function () {
|
133
|
+
const input = new _stream.StringStream(".");
|
134
|
+
const lexer = new _parser.Lexer(input);
|
136
135
|
expect(lexer.getNumber()).toEqual(0);
|
137
|
-
|
136
|
+
const numbers = ["..", "-.", "+.", "-\r\n.", "+\r\n."];
|
138
137
|
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
var lexer = new _parser.Lexer(input);
|
138
|
+
for (const number of numbers) {
|
139
|
+
const invalidInput = new _stream.StringStream(number);
|
140
|
+
const invalidLexer = new _parser.Lexer(invalidInput);
|
143
141
|
expect(function () {
|
144
|
-
return
|
142
|
+
return invalidLexer.getNumber();
|
145
143
|
}).toThrowError(_util.FormatError, /^Invalid number:\s/);
|
146
|
-
};
|
147
|
-
|
148
|
-
for (var _i2 = 0, _numbers2 = numbers; _i2 < _numbers2.length; _i2++) {
|
149
|
-
_loop();
|
150
144
|
}
|
151
145
|
});
|
152
|
-
it(
|
153
|
-
|
154
|
-
|
146
|
+
it("should handle glued numbers and operators", function () {
|
147
|
+
const input = new _stream.StringStream("123ET");
|
148
|
+
const lexer = new _parser.Lexer(input);
|
155
149
|
expect(lexer.getNumber()).toEqual(123);
|
156
150
|
expect(lexer.currentChar).toEqual(0x45);
|
157
151
|
});
|
158
152
|
});
|
159
|
-
describe(
|
160
|
-
it(
|
161
|
-
|
153
|
+
describe("getString", function () {
|
154
|
+
it("should stop parsing strings at the end of stream", function () {
|
155
|
+
const input = new _stream.StringStream("(1$4)");
|
162
156
|
|
163
157
|
input.getByte = function (super_getByte) {
|
164
|
-
|
158
|
+
const ch = super_getByte.call(input);
|
165
159
|
return ch === 0x24 ? -1 : ch;
|
166
160
|
}.bind(input, input.getByte);
|
167
161
|
|
168
|
-
|
169
|
-
expect(lexer.getString()).toEqual(
|
162
|
+
const lexer = new _parser.Lexer(input);
|
163
|
+
expect(lexer.getString()).toEqual("1");
|
170
164
|
});
|
171
|
-
it(
|
172
|
-
|
173
|
-
|
174
|
-
expect(lexer.getString()).toEqual(
|
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");
|
175
169
|
});
|
176
170
|
});
|
177
|
-
describe(
|
178
|
-
it(
|
179
|
-
|
180
|
-
|
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);
|
181
175
|
expect(lexer.getHexString()).toEqual('p!U"$2');
|
182
176
|
});
|
183
177
|
});
|
184
|
-
describe(
|
185
|
-
it(
|
186
|
-
|
187
|
-
|
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"];
|
188
182
|
|
189
|
-
for (
|
190
|
-
|
191
|
-
|
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);
|
192
186
|
expect(lexer.getName()).toEqual(_primitives.Name.get(expectedNames[i]));
|
193
187
|
}
|
194
188
|
});
|
195
189
|
});
|
196
190
|
});
|
197
|
-
describe(
|
198
|
-
it(
|
199
|
-
|
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");
|
200
194
|
expect(_parser.Linearization.create(stream1)).toEqual(null);
|
201
|
-
|
195
|
+
const stream2 = new _stream.StringStream("1 0 obj\n" + "<<\n" + "/Linearized 0\n" + ">>\n" + "endobj");
|
202
196
|
expect(_parser.Linearization.create(stream2)).toEqual(null);
|
203
197
|
});
|
204
|
-
it(
|
205
|
-
|
206
|
-
|
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 = {
|
207
201
|
length: 90,
|
208
202
|
hints: [1388, 863],
|
209
203
|
objectNumberFirst: 133,
|
@@ -214,33 +208,33 @@ describe('parser', function () {
|
|
214
208
|
};
|
215
209
|
expect(_parser.Linearization.create(stream)).toEqual(expectedLinearizationDict);
|
216
210
|
});
|
217
|
-
it(
|
218
|
-
|
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");
|
219
213
|
expect(function () {
|
220
214
|
return _parser.Linearization.create(stream1);
|
221
|
-
}).toThrow(new Error('The "L" parameter in the linearization ' +
|
222
|
-
|
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");
|
223
217
|
expect(function () {
|
224
218
|
return _parser.Linearization.create(stream2);
|
225
|
-
}).toThrow(new Error('The "E" parameter in the linearization
|
226
|
-
|
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");
|
227
221
|
expect(function () {
|
228
222
|
return _parser.Linearization.create(stream3);
|
229
|
-
}).toThrow(new Error('The "O" parameter in the linearization
|
223
|
+
}).toThrow(new Error('The "O" parameter in the linearization dictionary is invalid.'));
|
230
224
|
});
|
231
|
-
it(
|
232
|
-
|
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");
|
233
227
|
expect(function () {
|
234
228
|
return _parser.Linearization.create(stream1);
|
235
|
-
}).toThrow(new Error(
|
236
|
-
|
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");
|
237
231
|
expect(function () {
|
238
232
|
return _parser.Linearization.create(stream2);
|
239
|
-
}).toThrow(new Error(
|
240
|
-
|
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");
|
241
235
|
expect(function () {
|
242
236
|
return _parser.Linearization.create(stream3);
|
243
|
-
}).toThrow(new Error(
|
237
|
+
}).toThrow(new Error("Hint (2) in the linearization dictionary is invalid."));
|
244
238
|
});
|
245
239
|
});
|
246
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,
|