pdfjs-dist 2.0.489 → 2.2.228
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/bower.json +1 -1
- package/build/pdf.js +18515 -11402
- package/build/pdf.js.map +1 -1
- package/build/pdf.min.js +1 -1
- package/build/pdf.worker.js +48266 -37137
- package/build/pdf.worker.js.map +1 -1
- package/build/pdf.worker.min.js +1 -1
- package/external/url/url-lib.js +627 -0
- package/image_decoders/pdf.image_decoders.js +11350 -0
- package/image_decoders/pdf.image_decoders.js.map +1 -0
- package/image_decoders/pdf.image_decoders.min.js +1 -0
- package/lib/core/annotation.js +587 -242
- package/lib/core/arithmetic_decoder.js +275 -245
- package/lib/core/bidi.js +65 -6
- package/lib/core/ccitt.js +173 -18
- package/lib/core/ccitt_stream.js +15 -6
- package/lib/core/cff_parser.js +433 -61
- package/lib/core/charsets.js +5 -4
- package/lib/core/chunked_stream.js +400 -152
- package/lib/core/cmap.js +326 -87
- package/lib/core/colorspace.js +874 -594
- package/lib/core/core_utils.js +147 -0
- package/lib/core/crypto.js +290 -45
- package/lib/core/document.js +560 -268
- package/lib/core/encodings.js +19 -10
- package/lib/core/evaluator.js +1005 -360
- package/lib/core/font_renderer.js +331 -97
- package/lib/core/fonts.js +812 -195
- package/lib/core/function.js +284 -71
- package/lib/core/glyphlist.js +4 -3
- package/lib/core/image.js +169 -62
- package/lib/core/image_utils.js +111 -0
- package/lib/core/jbig2.js +479 -66
- package/lib/core/jbig2_stream.js +19 -8
- package/lib/core/jpeg_stream.js +38 -13
- package/lib/core/jpg.js +253 -29
- package/lib/core/jpx.js +396 -6
- package/lib/core/jpx_stream.js +18 -6
- package/lib/core/metrics.js +15 -15
- package/lib/core/murmurhash3.js +56 -34
- package/lib/core/obj.js +1354 -488
- package/lib/core/operator_list.js +144 -31
- package/lib/core/parser.js +539 -191
- package/lib/core/pattern.js +148 -14
- package/lib/core/pdf_manager.js +323 -133
- package/lib/core/primitives.js +111 -24
- package/lib/core/ps_parser.js +134 -45
- package/lib/core/standard_fonts.js +17 -17
- package/lib/core/stream.js +313 -34
- package/lib/core/type1_parser.js +143 -13
- package/lib/core/unicode.js +32 -5
- package/lib/core/worker.js +217 -190
- package/lib/core/worker_stream.js +277 -0
- package/lib/display/annotation_layer.js +450 -133
- package/lib/display/api.js +1597 -784
- package/lib/display/api_compatibility.js +11 -13
- package/lib/display/canvas.js +360 -44
- package/lib/display/content_disposition.js +83 -32
- package/lib/display/display_utils.js +747 -0
- package/lib/display/fetch_stream.js +221 -90
- package/lib/display/font_loader.js +468 -236
- package/lib/display/metadata.js +38 -16
- package/lib/display/network.js +635 -428
- package/lib/display/network_utils.js +32 -19
- package/lib/display/node_stream.js +367 -175
- package/lib/display/pattern_helper.js +81 -31
- package/lib/display/svg.js +1235 -519
- package/lib/display/text_layer.js +153 -29
- package/lib/display/transport_stream.js +345 -94
- package/lib/display/webgl.js +64 -18
- package/lib/display/worker_options.js +5 -4
- package/lib/display/xml_parser.js +166 -53
- package/lib/examples/node/domstubs.js +60 -4
- package/lib/pdf.js +36 -14
- package/lib/pdf.worker.js +5 -3
- package/lib/shared/compatibility.js +158 -564
- package/lib/shared/global_scope.js +2 -2
- package/lib/shared/is_node.js +4 -4
- package/lib/shared/message_handler.js +521 -0
- package/lib/shared/streams_polyfill.js +21 -17
- package/lib/shared/url_polyfill.js +56 -0
- package/lib/shared/util.js +243 -710
- package/lib/test/unit/annotation_spec.js +870 -401
- package/lib/test/unit/api_spec.js +657 -345
- package/lib/test/unit/bidi_spec.js +7 -7
- package/lib/test/unit/cff_parser_spec.js +54 -11
- package/lib/test/unit/clitests_helper.js +10 -8
- package/lib/test/unit/cmap_spec.js +95 -41
- package/lib/test/unit/colorspace_spec.js +115 -63
- package/lib/test/unit/core_utils_spec.js +191 -0
- package/lib/test/unit/crypto_spec.js +17 -5
- package/lib/test/unit/custom_spec.js +43 -55
- package/lib/test/unit/display_svg_spec.js +34 -18
- package/lib/test/unit/display_utils_spec.js +273 -0
- package/lib/test/unit/document_spec.js +8 -13
- package/lib/test/unit/encodings_spec.js +25 -45
- package/lib/test/unit/evaluator_spec.js +38 -15
- package/lib/test/unit/fetch_stream_spec.js +109 -0
- package/lib/test/unit/function_spec.js +17 -5
- package/lib/test/unit/jasmine-boot.js +33 -20
- package/lib/test/unit/{util_stream_spec.js → message_handler_spec.js} +41 -69
- package/lib/test/unit/metadata_spec.js +71 -11
- package/lib/test/unit/murmurhash3_spec.js +3 -3
- package/lib/test/unit/network_spec.js +19 -54
- package/lib/test/unit/network_utils_spec.js +91 -14
- package/lib/test/unit/node_stream_spec.js +56 -32
- package/lib/test/unit/parser_spec.js +162 -71
- package/lib/test/unit/pdf_find_controller_spec.js +230 -0
- package/lib/test/unit/pdf_find_utils_spec.js +63 -0
- package/lib/test/unit/pdf_history_spec.js +21 -9
- package/lib/test/unit/primitives_spec.js +53 -20
- package/lib/test/unit/stream_spec.js +12 -4
- package/lib/test/unit/test_utils.js +273 -56
- package/lib/test/unit/testreporter.js +21 -3
- package/lib/test/unit/type1_parser_spec.js +8 -6
- package/lib/test/unit/ui_utils_spec.js +454 -16
- package/lib/test/unit/unicode_spec.js +18 -15
- package/lib/test/unit/util_spec.js +87 -128
- package/lib/web/annotation_layer_builder.js +39 -22
- package/lib/web/app.js +1290 -588
- package/lib/web/app_options.js +100 -62
- package/lib/web/base_viewer.js +511 -182
- package/lib/web/chromecom.js +261 -117
- package/lib/web/debugger.js +166 -22
- package/lib/web/download_manager.js +32 -13
- package/lib/web/firefox_print_service.js +20 -10
- package/lib/web/firefoxcom.js +315 -80
- package/lib/web/genericcom.js +89 -30
- package/lib/web/genericl10n.js +142 -30
- package/lib/web/grab_to_pan.js +28 -4
- package/lib/web/interfaces.js +170 -47
- package/lib/web/overlay_manager.js +235 -85
- package/lib/web/password_prompt.js +22 -14
- package/lib/web/pdf_attachment_viewer.js +38 -18
- package/lib/web/pdf_cursor_tools.js +39 -16
- package/lib/web/pdf_document_properties.js +255 -136
- package/lib/web/pdf_find_bar.js +84 -40
- package/lib/web/pdf_find_controller.js +495 -184
- package/lib/web/pdf_find_utils.js +111 -0
- package/lib/web/pdf_history.js +190 -53
- package/lib/web/pdf_link_service.js +138 -77
- package/lib/web/pdf_outline_viewer.js +122 -46
- package/lib/web/pdf_page_view.js +191 -67
- package/lib/web/pdf_presentation_mode.js +99 -34
- package/lib/web/pdf_print_service.js +61 -13
- package/lib/web/pdf_rendering_queue.js +28 -9
- package/lib/web/pdf_sidebar.js +141 -81
- package/lib/web/pdf_sidebar_resizer.js +42 -16
- package/lib/web/pdf_single_page_viewer.js +74 -66
- package/lib/web/pdf_thumbnail_view.js +104 -33
- package/lib/web/pdf_thumbnail_viewer.js +66 -26
- package/lib/web/pdf_viewer.component.js +112 -32
- package/lib/web/pdf_viewer.js +91 -52
- package/lib/web/preferences.js +284 -89
- package/lib/web/secondary_toolbar.js +165 -40
- package/lib/web/text_layer_builder.js +134 -59
- package/lib/web/toolbar.js +78 -43
- package/lib/web/ui_utils.js +462 -136
- package/lib/web/view_history.js +215 -67
- package/lib/web/viewer_compatibility.js +4 -13
- package/package.json +5 -4
- package/web/pdf_viewer.css +79 -11
- package/web/pdf_viewer.js +6107 -3748
- package/web/pdf_viewer.js.map +1 -1
- package/lib/display/dom_utils.js +0 -309
- package/lib/test/unit/dom_utils_spec.js +0 -89
- package/lib/test/unit/fonts_spec.js +0 -81
- package/lib/web/dom_events.js +0 -137
@@ -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 2019 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.
|
@@ -19,88 +19,179 @@
|
|
19
19
|
* @licend The above is the entire license notice for the
|
20
20
|
* Javascript code in this page
|
21
21
|
*/
|
22
|
-
|
22
|
+
"use strict";
|
23
23
|
|
24
|
-
var _parser = require(
|
24
|
+
var _parser = require("../../core/parser");
|
25
25
|
|
26
|
-
var
|
26
|
+
var _util = require("../../shared/util");
|
27
27
|
|
28
|
-
var
|
28
|
+
var _primitives = require("../../core/primitives");
|
29
|
+
|
30
|
+
var _stream = require("../../core/stream");
|
29
31
|
|
30
32
|
describe('parser', function () {
|
31
|
-
describe('
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
33
|
+
describe('Parser', function () {
|
34
|
+
describe('inlineStreamSkipEI', function () {
|
35
|
+
it('should skip over the EI marker if it is found', function () {
|
36
|
+
var string = 'q 1 0 0 1 0 0 cm BI /W 10 /H 10 /BPC 1 ' + '/F /A85 ID abc123~> EI Q';
|
37
|
+
var input = new _stream.StringStream(string);
|
38
|
+
var 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
|
+
var string = 'q 1 0 0 1 0 0 cm BI /W 10 /H 10 /BPC 1 ' + '/F /A85 ID abc123~> Q';
|
49
|
+
var input = new _stream.StringStream(string);
|
50
|
+
var 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
|
+
});
|
37
59
|
});
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
var input = new _stream.StringStream(
|
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
|
+
var input = new _stream.StringStream('');
|
43
65
|
var lexer = new _parser.Lexer(input);
|
44
|
-
|
45
|
-
expect(
|
46
|
-
}
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
});
|
54
|
-
it('should ignore minus signs in the middle of number', function () {
|
55
|
-
var input = new _stream.StringStream('205--.88');
|
56
|
-
var lexer = new _parser.Lexer(input);
|
57
|
-
var result = lexer.getNumber();
|
58
|
-
expect(result).toEqual(205.88);
|
59
|
-
});
|
60
|
-
it('should ignore line-breaks between operator and digit in number', function () {
|
61
|
-
var input = new _stream.StringStream('-\r\n205.88');
|
62
|
-
var lexer = new _parser.Lexer(input);
|
63
|
-
var result = lexer.getNumber();
|
64
|
-
expect(result).toEqual(-205.88);
|
65
|
-
});
|
66
|
-
it('should handle glued numbers and operators', function () {
|
67
|
-
var input = new _stream.StringStream('123ET');
|
68
|
-
var lexer = new _parser.Lexer(input);
|
69
|
-
var value = lexer.getNumber();
|
70
|
-
expect(value).toEqual(123);
|
71
|
-
expect(lexer.currentChar).toEqual(0x45);
|
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
|
+
var input = new _stream.StringStream('123');
|
71
|
+
var lexer = new _parser.Lexer(input);
|
72
|
+
expect(lexer.nextChar()).toEqual(0x32);
|
73
|
+
expect(lexer.currentChar).toEqual(0x32);
|
74
|
+
});
|
72
75
|
});
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
var
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
76
|
+
describe('peekChar', function () {
|
77
|
+
it('should only return -1 when the end of the stream is reached', function () {
|
78
|
+
var input = new _stream.StringStream('');
|
79
|
+
var 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
|
+
var input = new _stream.StringStream('123');
|
85
|
+
var lexer = new _parser.Lexer(input);
|
86
|
+
expect(lexer.peekChar()).toEqual(0x32);
|
87
|
+
expect(lexer.currentChar).toEqual(0x31);
|
88
|
+
});
|
82
89
|
});
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
90
|
+
describe('getNumber', function () {
|
91
|
+
it('should stop parsing numbers at the end of stream', function () {
|
92
|
+
var input = new _stream.StringStream('11.234');
|
93
|
+
var lexer = new _parser.Lexer(input);
|
94
|
+
expect(lexer.getNumber()).toEqual(11.234);
|
95
|
+
});
|
96
|
+
it('should parse PostScript numbers', function () {
|
97
|
+
var numbers = ['-.002', '34.5', '-3.62', '123.6e10', '1E-5', '-1.', '0.0', '123', '-98', '43445', '0', '+17'];
|
98
|
+
|
99
|
+
for (var _i = 0, _numbers = numbers; _i < _numbers.length; _i++) {
|
100
|
+
var number = _numbers[_i];
|
101
|
+
var input = new _stream.StringStream(number);
|
102
|
+
var lexer = new _parser.Lexer(input);
|
103
|
+
var result = lexer.getNumber(),
|
104
|
+
expected = parseFloat(number);
|
105
|
+
|
106
|
+
if (result !== expected && Math.abs(result - expected) < 1e-15) {
|
107
|
+
console.error("Fuzzy matching \"".concat(result, "\" with \"").concat(expected, "\" to ") + 'work-around rounding bugs in Chromium browsers.');
|
108
|
+
expect(true).toEqual(true);
|
109
|
+
continue;
|
110
|
+
}
|
111
|
+
|
112
|
+
expect(result).toEqual(expected);
|
113
|
+
}
|
114
|
+
});
|
115
|
+
it('should ignore double negative before number', function () {
|
116
|
+
var input = new _stream.StringStream('--205.88');
|
117
|
+
var lexer = new _parser.Lexer(input);
|
118
|
+
expect(lexer.getNumber()).toEqual(-205.88);
|
119
|
+
});
|
120
|
+
it('should ignore minus signs in the middle of number', function () {
|
121
|
+
var input = new _stream.StringStream('205--.88');
|
122
|
+
var lexer = new _parser.Lexer(input);
|
123
|
+
expect(lexer.getNumber()).toEqual(205.88);
|
124
|
+
});
|
125
|
+
it('should ignore line-breaks between operator and digit in number', function () {
|
126
|
+
var minusInput = new _stream.StringStream('-\r\n205.88');
|
127
|
+
var minusLexer = new _parser.Lexer(minusInput);
|
128
|
+
expect(minusLexer.getNumber()).toEqual(-205.88);
|
129
|
+
var plusInput = new _stream.StringStream('+\r\n205.88');
|
130
|
+
var plusLexer = new _parser.Lexer(plusInput);
|
131
|
+
expect(plusLexer.getNumber()).toEqual(205.88);
|
132
|
+
});
|
133
|
+
it('should treat a single decimal point as zero', function () {
|
134
|
+
var input = new _stream.StringStream('.');
|
135
|
+
var lexer = new _parser.Lexer(input);
|
136
|
+
expect(lexer.getNumber()).toEqual(0);
|
137
|
+
var numbers = ['..', '-.', '+.', '-\r\n.', '+\r\n.'];
|
138
|
+
|
139
|
+
var _loop = function _loop() {
|
140
|
+
var number = _numbers2[_i2];
|
141
|
+
var input = new _stream.StringStream(number);
|
142
|
+
var lexer = new _parser.Lexer(input);
|
143
|
+
expect(function () {
|
144
|
+
return lexer.getNumber();
|
145
|
+
}).toThrowError(_util.FormatError, /^Invalid number:\s/);
|
146
|
+
};
|
147
|
+
|
148
|
+
for (var _i2 = 0, _numbers2 = numbers; _i2 < _numbers2.length; _i2++) {
|
149
|
+
_loop();
|
150
|
+
}
|
151
|
+
});
|
152
|
+
it('should handle glued numbers and operators', function () {
|
153
|
+
var input = new _stream.StringStream('123ET');
|
154
|
+
var lexer = new _parser.Lexer(input);
|
155
|
+
expect(lexer.getNumber()).toEqual(123);
|
156
|
+
expect(lexer.currentChar).toEqual(0x45);
|
157
|
+
});
|
88
158
|
});
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
159
|
+
describe('getString', function () {
|
160
|
+
it('should stop parsing strings at the end of stream', function () {
|
161
|
+
var input = new _stream.StringStream('(1$4)');
|
162
|
+
|
163
|
+
input.getByte = function (super_getByte) {
|
164
|
+
var ch = super_getByte.call(input);
|
165
|
+
return ch === 0x24 ? -1 : ch;
|
166
|
+
}.bind(input, input.getByte);
|
167
|
+
|
168
|
+
var lexer = new _parser.Lexer(input);
|
169
|
+
expect(lexer.getString()).toEqual('1');
|
170
|
+
});
|
171
|
+
it('should ignore escaped CR and LF', function () {
|
172
|
+
var input = new _stream.StringStream('(\\101\\\r\n\\102\\\r\\103\\\n\\104)');
|
173
|
+
var lexer = new _parser.Lexer(input);
|
174
|
+
expect(lexer.getString()).toEqual('ABCD');
|
175
|
+
});
|
94
176
|
});
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
for (var i = 0, ii = inputNames.length; i < ii; i++) {
|
99
|
-
var input = new _stream.StringStream(inputNames[i]);
|
177
|
+
describe('getHexString', function () {
|
178
|
+
it('should not throw exception on bad input', function () {
|
179
|
+
var input = new _stream.StringStream('<7 0 2 15 5 2 2 2 4 3 2 4>');
|
100
180
|
var lexer = new _parser.Lexer(input);
|
101
|
-
|
102
|
-
|
103
|
-
|
181
|
+
expect(lexer.getHexString()).toEqual('p!U"$2');
|
182
|
+
});
|
183
|
+
});
|
184
|
+
describe('getName', function () {
|
185
|
+
it('should handle Names with invalid usage of NUMBER SIGN (#)', function () {
|
186
|
+
var inputNames = ['/# 680 0 R', '/#AQwerty', '/#A<</B'];
|
187
|
+
var expectedNames = ['#', '#AQwerty', '#A'];
|
188
|
+
|
189
|
+
for (var i = 0, ii = inputNames.length; i < ii; i++) {
|
190
|
+
var input = new _stream.StringStream(inputNames[i]);
|
191
|
+
var lexer = new _parser.Lexer(input);
|
192
|
+
expect(lexer.getName()).toEqual(_primitives.Name.get(expectedNames[i]));
|
193
|
+
}
|
194
|
+
});
|
104
195
|
});
|
105
196
|
});
|
106
197
|
describe('Linearization', function () {
|
@@ -0,0 +1,230 @@
|
|
1
|
+
/**
|
2
|
+
* @licstart The following is the entire license notice for the
|
3
|
+
* Javascript code in this page
|
4
|
+
*
|
5
|
+
* Copyright 2019 Mozilla Foundation
|
6
|
+
*
|
7
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
* you may not use this file except in compliance with the License.
|
9
|
+
* You may obtain a copy of the License at
|
10
|
+
*
|
11
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
*
|
13
|
+
* Unless required by applicable law or agreed to in writing, software
|
14
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
+
* See the License for the specific language governing permissions and
|
17
|
+
* limitations under the License.
|
18
|
+
*
|
19
|
+
* @licend The above is the entire license notice for the
|
20
|
+
* Javascript code in this page
|
21
|
+
*/
|
22
|
+
"use strict";
|
23
|
+
|
24
|
+
var _test_utils = require("./test_utils");
|
25
|
+
|
26
|
+
var _ui_utils = require("../../web/ui_utils");
|
27
|
+
|
28
|
+
var _api = require("../../display/api");
|
29
|
+
|
30
|
+
var _pdf_find_controller = require("../../web/pdf_find_controller");
|
31
|
+
|
32
|
+
var _pdf_link_service = require("../../web/pdf_link_service");
|
33
|
+
|
34
|
+
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
35
|
+
|
36
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
37
|
+
|
38
|
+
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
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); }
|
51
|
+
|
52
|
+
var MockLinkService =
|
53
|
+
/*#__PURE__*/
|
54
|
+
function (_SimpleLinkService) {
|
55
|
+
_inherits(MockLinkService, _SimpleLinkService);
|
56
|
+
|
57
|
+
function MockLinkService() {
|
58
|
+
var _this;
|
59
|
+
|
60
|
+
_classCallCheck(this, MockLinkService);
|
61
|
+
|
62
|
+
_this = _possibleConstructorReturn(this, _getPrototypeOf(MockLinkService).call(this));
|
63
|
+
_this._page = 1;
|
64
|
+
_this._pdfDocument = null;
|
65
|
+
return _this;
|
66
|
+
}
|
67
|
+
|
68
|
+
_createClass(MockLinkService, [{
|
69
|
+
key: "setDocument",
|
70
|
+
value: function setDocument(pdfDocument) {
|
71
|
+
this._pdfDocument = pdfDocument;
|
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;
|
94
|
+
beforeEach(function (done) {
|
95
|
+
var loadingTask = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)('tracemonkey.pdf'));
|
96
|
+
loadingTask.promise.then(function (pdfDocument) {
|
97
|
+
eventBus = new _ui_utils.EventBus();
|
98
|
+
var linkService = new MockLinkService();
|
99
|
+
linkService.setDocument(pdfDocument);
|
100
|
+
pdfFindController = new _pdf_find_controller.PDFFindController({
|
101
|
+
linkService: linkService,
|
102
|
+
eventBus: eventBus
|
103
|
+
});
|
104
|
+
pdfFindController.setDocument(pdfDocument);
|
105
|
+
done();
|
106
|
+
});
|
107
|
+
});
|
108
|
+
afterEach(function () {
|
109
|
+
eventBus = null;
|
110
|
+
pdfFindController = null;
|
111
|
+
});
|
112
|
+
|
113
|
+
function testSearch(_ref) {
|
114
|
+
var parameters = _ref.parameters,
|
115
|
+
matchesPerPage = _ref.matchesPerPage,
|
116
|
+
selectedMatch = _ref.selectedMatch;
|
117
|
+
return new Promise(function (resolve) {
|
118
|
+
pdfFindController.executeCommand('find', parameters);
|
119
|
+
var totalPages = matchesPerPage.length;
|
120
|
+
|
121
|
+
for (var i = totalPages - 1; i >= 0; i--) {
|
122
|
+
if (matchesPerPage[i] > 0) {
|
123
|
+
totalPages = i + 1;
|
124
|
+
break;
|
125
|
+
}
|
126
|
+
}
|
127
|
+
|
128
|
+
var totalMatches = matchesPerPage.reduce(function (a, b) {
|
129
|
+
return a + b;
|
130
|
+
});
|
131
|
+
eventBus.on('updatefindmatchescount', function onUpdateFindMatchesCount(evt) {
|
132
|
+
if (pdfFindController.pageMatches.length !== totalPages) {
|
133
|
+
return;
|
134
|
+
}
|
135
|
+
|
136
|
+
eventBus.off('updatefindmatchescount', onUpdateFindMatchesCount);
|
137
|
+
expect(evt.matchesCount.total).toBe(totalMatches);
|
138
|
+
|
139
|
+
for (var _i = 0; _i < totalPages; _i++) {
|
140
|
+
expect(pdfFindController.pageMatches[_i].length).toEqual(matchesPerPage[_i]);
|
141
|
+
}
|
142
|
+
|
143
|
+
expect(pdfFindController.selected.pageIdx).toEqual(selectedMatch.pageIndex);
|
144
|
+
expect(pdfFindController.selected.matchIdx).toEqual(selectedMatch.matchIndex);
|
145
|
+
resolve();
|
146
|
+
});
|
147
|
+
});
|
148
|
+
}
|
149
|
+
|
150
|
+
it('performs a normal search', function (done) {
|
151
|
+
testSearch({
|
152
|
+
parameters: {
|
153
|
+
query: 'Dynamic',
|
154
|
+
caseSensitive: false,
|
155
|
+
entireWord: false,
|
156
|
+
phraseSearch: true,
|
157
|
+
findPrevious: false
|
158
|
+
},
|
159
|
+
matchesPerPage: [11, 5, 0, 3, 0, 0, 0, 1, 1, 1, 0, 3, 4, 4],
|
160
|
+
selectedMatch: {
|
161
|
+
pageIndex: 0,
|
162
|
+
matchIndex: 0
|
163
|
+
}
|
164
|
+
}).then(done);
|
165
|
+
});
|
166
|
+
it('performs a normal search and finds the previous result', function (done) {
|
167
|
+
testSearch({
|
168
|
+
parameters: {
|
169
|
+
query: 'conference',
|
170
|
+
caseSensitive: false,
|
171
|
+
entireWord: false,
|
172
|
+
phraseSearch: true,
|
173
|
+
findPrevious: true
|
174
|
+
},
|
175
|
+
matchesPerPage: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5],
|
176
|
+
selectedMatch: {
|
177
|
+
pageIndex: 13,
|
178
|
+
matchIndex: 4
|
179
|
+
}
|
180
|
+
}).then(done);
|
181
|
+
});
|
182
|
+
it('performs a case sensitive search', function (done) {
|
183
|
+
testSearch({
|
184
|
+
parameters: {
|
185
|
+
query: 'Dynamic',
|
186
|
+
caseSensitive: true,
|
187
|
+
entireWord: false,
|
188
|
+
phraseSearch: true,
|
189
|
+
findPrevious: false
|
190
|
+
},
|
191
|
+
matchesPerPage: [3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3],
|
192
|
+
selectedMatch: {
|
193
|
+
pageIndex: 0,
|
194
|
+
matchIndex: 0
|
195
|
+
}
|
196
|
+
}).then(done);
|
197
|
+
});
|
198
|
+
it('performs an entire word search', function (done) {
|
199
|
+
testSearch({
|
200
|
+
parameters: {
|
201
|
+
query: 'Government',
|
202
|
+
caseSensitive: false,
|
203
|
+
entireWord: true,
|
204
|
+
phraseSearch: true,
|
205
|
+
findPrevious: false
|
206
|
+
},
|
207
|
+
matchesPerPage: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0],
|
208
|
+
selectedMatch: {
|
209
|
+
pageIndex: 12,
|
210
|
+
matchIndex: 0
|
211
|
+
}
|
212
|
+
}).then(done);
|
213
|
+
});
|
214
|
+
it('performs a multiple term (no phrase) search', function (done) {
|
215
|
+
testSearch({
|
216
|
+
parameters: {
|
217
|
+
query: 'alternate solution',
|
218
|
+
caseSensitive: false,
|
219
|
+
entireWord: false,
|
220
|
+
phraseSearch: false,
|
221
|
+
findPrevious: false
|
222
|
+
},
|
223
|
+
matchesPerPage: [0, 0, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0],
|
224
|
+
selectedMatch: {
|
225
|
+
pageIndex: 5,
|
226
|
+
matchIndex: 0
|
227
|
+
}
|
228
|
+
}).then(done);
|
229
|
+
});
|
230
|
+
});
|
@@ -0,0 +1,63 @@
|
|
1
|
+
/**
|
2
|
+
* @licstart The following is the entire license notice for the
|
3
|
+
* Javascript code in this page
|
4
|
+
*
|
5
|
+
* Copyright 2019 Mozilla Foundation
|
6
|
+
*
|
7
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
* you may not use this file except in compliance with the License.
|
9
|
+
* You may obtain a copy of the License at
|
10
|
+
*
|
11
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
*
|
13
|
+
* Unless required by applicable law or agreed to in writing, software
|
14
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
+
* See the License for the specific language governing permissions and
|
17
|
+
* limitations under the License.
|
18
|
+
*
|
19
|
+
* @licend The above is the entire license notice for the
|
20
|
+
* Javascript code in this page
|
21
|
+
*/
|
22
|
+
"use strict";
|
23
|
+
|
24
|
+
var _pdf_find_utils = require("../../web/pdf_find_utils");
|
25
|
+
|
26
|
+
describe('pdf_find_utils', function () {
|
27
|
+
describe('getCharacterType', function () {
|
28
|
+
it('gets expected character types', function () {
|
29
|
+
var characters = {
|
30
|
+
'A': _pdf_find_utils.CharacterType.ALPHA_LETTER,
|
31
|
+
'a': _pdf_find_utils.CharacterType.ALPHA_LETTER,
|
32
|
+
'0': _pdf_find_utils.CharacterType.ALPHA_LETTER,
|
33
|
+
'5': _pdf_find_utils.CharacterType.ALPHA_LETTER,
|
34
|
+
'\xC4': _pdf_find_utils.CharacterType.ALPHA_LETTER,
|
35
|
+
'\xE4': _pdf_find_utils.CharacterType.ALPHA_LETTER,
|
36
|
+
'_': _pdf_find_utils.CharacterType.ALPHA_LETTER,
|
37
|
+
' ': _pdf_find_utils.CharacterType.SPACE,
|
38
|
+
'\t': _pdf_find_utils.CharacterType.SPACE,
|
39
|
+
'\r': _pdf_find_utils.CharacterType.SPACE,
|
40
|
+
'\n': _pdf_find_utils.CharacterType.SPACE,
|
41
|
+
'\xA0': _pdf_find_utils.CharacterType.SPACE,
|
42
|
+
'-': _pdf_find_utils.CharacterType.PUNCT,
|
43
|
+
',': _pdf_find_utils.CharacterType.PUNCT,
|
44
|
+
'.': _pdf_find_utils.CharacterType.PUNCT,
|
45
|
+
';': _pdf_find_utils.CharacterType.PUNCT,
|
46
|
+
':': _pdf_find_utils.CharacterType.PUNCT,
|
47
|
+
"\u2122": _pdf_find_utils.CharacterType.ALPHA_LETTER,
|
48
|
+
"\u0E25": _pdf_find_utils.CharacterType.THAI_LETTER,
|
49
|
+
"\u4000": _pdf_find_utils.CharacterType.HAN_LETTER,
|
50
|
+
"\uF950": _pdf_find_utils.CharacterType.HAN_LETTER,
|
51
|
+
"\u30C0": _pdf_find_utils.CharacterType.KATAKANA_LETTER,
|
52
|
+
"\u3050": _pdf_find_utils.CharacterType.HIRAGANA_LETTER,
|
53
|
+
"\uFF80": _pdf_find_utils.CharacterType.HALFWIDTH_KATAKANA_LETTER
|
54
|
+
};
|
55
|
+
|
56
|
+
for (var character in characters) {
|
57
|
+
var charCode = character.charCodeAt(0);
|
58
|
+
var type = characters[character];
|
59
|
+
expect((0, _pdf_find_utils.getCharacterType)(charCode)).toEqual(type);
|
60
|
+
}
|
61
|
+
});
|
62
|
+
});
|
63
|
+
});
|
@@ -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 2019 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.
|
@@ -19,9 +19,9 @@
|
|
19
19
|
* @licend The above is the entire license notice for the
|
20
20
|
* Javascript code in this page
|
21
21
|
*/
|
22
|
-
|
22
|
+
"use strict";
|
23
23
|
|
24
|
-
var _pdf_history = require(
|
24
|
+
var _pdf_history = require("../../web/pdf_history");
|
25
25
|
|
26
26
|
describe('pdf_history', function () {
|
27
27
|
describe('isDestHashesEqual', function () {
|
@@ -34,7 +34,9 @@ describe('pdf_history', function () {
|
|
34
34
|
var destArrayString = JSON.stringify([{
|
35
35
|
num: 3757,
|
36
36
|
gen: 0
|
37
|
-
}, {
|
37
|
+
}, {
|
38
|
+
name: 'XYZ'
|
39
|
+
}, 92.918, 748.972, null]);
|
38
40
|
expect((0, _pdf_history.isDestHashesEqual)(destArrayString, 'page.157')).toEqual(false);
|
39
41
|
expect((0, _pdf_history.isDestHashesEqual)('page.157', destArrayString)).toEqual(false);
|
40
42
|
});
|
@@ -48,23 +50,33 @@ describe('pdf_history', function () {
|
|
48
50
|
var firstDest = [{
|
49
51
|
num: 1,
|
50
52
|
gen: 0
|
51
|
-
}, {
|
53
|
+
}, {
|
54
|
+
name: 'XYZ'
|
55
|
+
}, 0, 375, null];
|
52
56
|
var secondDest = [{
|
53
57
|
num: 5,
|
54
58
|
gen: 0
|
55
|
-
}, {
|
59
|
+
}, {
|
60
|
+
name: 'XYZ'
|
61
|
+
}, 0, 375, null];
|
56
62
|
var thirdDest = [{
|
57
63
|
num: 1,
|
58
64
|
gen: 0
|
59
|
-
}, {
|
65
|
+
}, {
|
66
|
+
name: 'XYZ'
|
67
|
+
}, 750, 0, null];
|
60
68
|
var fourthDest = [{
|
61
69
|
num: 1,
|
62
70
|
gen: 0
|
63
|
-
}, {
|
71
|
+
}, {
|
72
|
+
name: 'XYZ'
|
73
|
+
}, 0, 375, 1.0];
|
64
74
|
var fifthDest = [{
|
65
75
|
gen: 0,
|
66
76
|
num: 1
|
67
|
-
}, {
|
77
|
+
}, {
|
78
|
+
name: 'XYZ'
|
79
|
+
}, 0, 375, null];
|
68
80
|
it('should reject non-equal destination arrays', function () {
|
69
81
|
expect((0, _pdf_history.isDestArraysEqual)(firstDest, undefined)).toEqual(false);
|
70
82
|
expect((0, _pdf_history.isDestArraysEqual)(firstDest, [1, 2, 3, 4, 5])).toEqual(false);
|