pdfjs-dist 2.0.487 → 2.1.266
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/bower.json +1 -1
- package/build/pdf.js +15564 -9476
- package/build/pdf.js.map +1 -1
- package/build/pdf.min.js +1 -1
- package/build/pdf.worker.js +46644 -36309
- 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 +11430 -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 +406 -131
- 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 +376 -53
- package/lib/core/charsets.js +5 -4
- package/lib/core/chunked_stream.js +387 -149
- package/lib/core/cmap.js +310 -75
- package/lib/core/colorspace.js +874 -594
- package/lib/core/crypto.js +290 -45
- package/lib/core/document.js +545 -260
- package/lib/core/encodings.js +19 -10
- package/lib/core/evaluator.js +725 -147
- package/lib/core/font_renderer.js +360 -91
- package/lib/core/fonts.js +791 -186
- package/lib/core/function.js +284 -71
- package/lib/core/glyphlist.js +3 -2
- package/lib/core/image.js +168 -61
- 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 +252 -29
- package/lib/core/jpx.js +396 -6
- package/lib/core/jpx_stream.js +18 -6
- package/lib/core/metrics.js +4 -4
- package/lib/core/murmurhash3.js +24 -6
- package/lib/core/obj.js +1137 -475
- package/lib/core/operator_list.js +108 -6
- package/lib/core/parser.js +321 -68
- package/lib/core/pattern.js +145 -13
- package/lib/core/pdf_manager.js +321 -133
- package/lib/core/primitives.js +75 -22
- package/lib/core/ps_parser.js +134 -45
- package/lib/core/standard_fonts.js +10 -10
- package/lib/core/stream.js +313 -34
- package/lib/core/type1_parser.js +143 -13
- package/lib/core/unicode.js +31 -4
- package/lib/core/worker.js +210 -66
- package/lib/display/annotation_layer.js +361 -123
- package/lib/display/api.js +1454 -729
- package/lib/display/api_compatibility.js +11 -13
- package/lib/display/canvas.js +324 -29
- package/lib/display/content_disposition.js +83 -32
- package/lib/display/dom_utils.js +226 -41
- package/lib/display/fetch_stream.js +208 -84
- package/lib/display/font_loader.js +465 -236
- package/lib/display/metadata.js +38 -16
- package/lib/display/network.js +216 -51
- package/lib/display/network_utils.js +32 -19
- package/lib/display/node_stream.js +352 -169
- package/lib/display/pattern_helper.js +58 -7
- package/lib/display/svg.js +242 -29
- package/lib/display/text_layer.js +132 -18
- package/lib/display/transport_stream.js +171 -42
- 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 +57 -4
- package/lib/pdf.js +21 -4
- 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 +295 -650
- package/lib/test/unit/annotation_spec.js +629 -345
- package/lib/test/unit/api_spec.js +555 -253
- package/lib/test/unit/bidi_spec.js +7 -7
- package/lib/test/unit/cff_parser_spec.js +40 -11
- package/lib/test/unit/clitests_helper.js +9 -7
- package/lib/test/unit/cmap_spec.js +80 -26
- package/lib/test/unit/colorspace_spec.js +99 -52
- package/lib/test/unit/crypto_spec.js +17 -5
- package/lib/test/unit/custom_spec.js +41 -53
- package/lib/test/unit/display_svg_spec.js +33 -17
- package/lib/test/unit/document_spec.js +3 -3
- package/lib/test/unit/dom_utils_spec.js +9 -9
- package/lib/test/unit/encodings_spec.js +25 -45
- package/lib/test/unit/evaluator_spec.js +34 -9
- package/lib/test/unit/function_spec.js +17 -5
- package/lib/test/unit/jasmine-boot.js +31 -18
- 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 +20 -5
- package/lib/test/unit/network_utils_spec.js +41 -14
- package/lib/test/unit/node_stream_spec.js +51 -27
- package/lib/test/unit/parser_spec.js +35 -8
- 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 +24 -4
- package/lib/test/unit/stream_spec.js +12 -4
- package/lib/test/unit/test_utils.js +90 -27
- 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 +452 -14
- package/lib/test/unit/unicode_spec.js +14 -11
- package/lib/test/unit/util_spec.js +131 -9
- package/lib/web/annotation_layer_builder.js +39 -22
- package/lib/web/app.js +1240 -582
- package/lib/web/app_options.js +71 -41
- package/lib/web/base_viewer.js +508 -179
- package/lib/web/chromecom.js +261 -117
- package/lib/web/debugger.js +166 -22
- package/lib/web/download_manager.js +31 -13
- package/lib/web/firefox_print_service.js +17 -9
- package/lib/web/firefoxcom.js +283 -79
- package/lib/web/genericcom.js +89 -30
- package/lib/web/genericl10n.js +142 -30
- package/lib/web/grab_to_pan.js +26 -4
- package/lib/web/interfaces.js +170 -47
- package/lib/web/overlay_manager.js +235 -85
- package/lib/web/password_prompt.js +21 -13
- 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 +80 -30
- 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 +137 -76
- package/lib/web/pdf_outline_viewer.js +73 -22
- package/lib/web/pdf_page_view.js +196 -63
- package/lib/web/pdf_presentation_mode.js +99 -34
- package/lib/web/pdf_print_service.js +57 -11
- package/lib/web/pdf_rendering_queue.js +27 -5
- package/lib/web/pdf_sidebar.js +120 -67
- 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 +103 -32
- package/lib/web/pdf_thumbnail_viewer.js +64 -24
- package/lib/web/pdf_viewer.component.js +112 -32
- package/lib/web/pdf_viewer.js +91 -52
- package/lib/web/preferences.js +275 -80
- package/lib/web/secondary_toolbar.js +165 -40
- package/lib/web/text_layer_builder.js +162 -65
- 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 +58 -1
- package/web/pdf_viewer.js +6346 -3919
- package/web/pdf_viewer.js.map +1 -1
- 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 2018 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,295 +19,524 @@
|
|
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
24
|
Object.defineProperty(exports, "__esModule", {
|
25
25
|
value: true
|
26
26
|
});
|
27
|
-
exports.FontLoader = exports.FontFaceObject =
|
28
|
-
|
29
|
-
var
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
27
|
+
exports.FontLoader = exports.FontFaceObject = void 0;
|
28
|
+
|
29
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
30
|
+
|
31
|
+
var _util = require("../shared/util");
|
32
|
+
|
33
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
34
|
+
|
35
|
+
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); }
|
36
|
+
|
37
|
+
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
|
38
|
+
|
39
|
+
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
40
|
+
|
41
|
+
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
42
|
+
|
43
|
+
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); }
|
44
|
+
|
45
|
+
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
46
|
+
|
47
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
48
|
+
|
49
|
+
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
50
|
+
|
51
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
52
|
+
|
53
|
+
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); } }
|
54
|
+
|
55
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
56
|
+
|
57
|
+
var BaseFontLoader =
|
58
|
+
/*#__PURE__*/
|
59
|
+
function () {
|
60
|
+
function BaseFontLoader(_ref) {
|
61
|
+
var docId = _ref.docId,
|
62
|
+
onUnsupportedFeature = _ref.onUnsupportedFeature;
|
63
|
+
|
64
|
+
_classCallCheck(this, BaseFontLoader);
|
65
|
+
|
66
|
+
if (this.constructor === BaseFontLoader) {
|
67
|
+
(0, _util.unreachable)('Cannot initialize BaseFontLoader.');
|
56
68
|
}
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
this.nativeFontFaces
|
69
|
+
|
70
|
+
this.docId = docId;
|
71
|
+
this._onUnsupportedFeature = onUnsupportedFeature;
|
72
|
+
this.nativeFontFaces = [];
|
73
|
+
this.styleElement = null;
|
61
74
|
}
|
62
|
-
|
63
|
-
{
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
FontLoader.prototype.bind = function fontLoaderBind(fonts, callback) {
|
79
|
-
var rules = [];
|
80
|
-
var fontsToLoad = [];
|
81
|
-
var fontLoadPromises = [];
|
82
|
-
var getNativeFontPromise = function getNativeFontPromise(nativeFontFace) {
|
83
|
-
return nativeFontFace.loaded.catch(function (e) {
|
84
|
-
(0, _util.warn)('Failed to load font "' + nativeFontFace.family + '": ' + e);
|
85
|
-
});
|
86
|
-
};
|
87
|
-
var isFontLoadingAPISupported = FontLoader.isFontLoadingAPISupported && !FontLoader.isSyncFontLoadingSupported;
|
88
|
-
for (var i = 0, ii = fonts.length; i < ii; i++) {
|
89
|
-
var font = fonts[i];
|
90
|
-
if (font.attached || font.loading === false) {
|
91
|
-
continue;
|
92
|
-
}
|
93
|
-
font.attached = true;
|
94
|
-
if (isFontLoadingAPISupported) {
|
95
|
-
var nativeFontFace = font.createNativeFontFace();
|
96
|
-
if (nativeFontFace) {
|
97
|
-
this.addNativeFontFace(nativeFontFace);
|
98
|
-
fontLoadPromises.push(getNativeFontPromise(nativeFontFace));
|
99
|
-
}
|
100
|
-
} else {
|
101
|
-
var rule = font.createFontFaceRule();
|
102
|
-
if (rule) {
|
103
|
-
this.insertRule(rule);
|
104
|
-
rules.push(rule);
|
105
|
-
fontsToLoad.push(font);
|
106
|
-
}
|
75
|
+
|
76
|
+
_createClass(BaseFontLoader, [{
|
77
|
+
key: "addNativeFontFace",
|
78
|
+
value: function addNativeFontFace(nativeFontFace) {
|
79
|
+
this.nativeFontFaces.push(nativeFontFace);
|
80
|
+
document.fonts.add(nativeFontFace);
|
81
|
+
}
|
82
|
+
}, {
|
83
|
+
key: "insertRule",
|
84
|
+
value: function insertRule(rule) {
|
85
|
+
var styleElement = this.styleElement;
|
86
|
+
|
87
|
+
if (!styleElement) {
|
88
|
+
styleElement = this.styleElement = document.createElement('style');
|
89
|
+
styleElement.id = "PDFJS_FONT_STYLE_TAG_".concat(this.docId);
|
90
|
+
document.documentElement.getElementsByTagName('head')[0].appendChild(styleElement);
|
107
91
|
}
|
92
|
+
|
93
|
+
var styleSheet = styleElement.sheet;
|
94
|
+
styleSheet.insertRule(rule, styleSheet.cssRules.length);
|
108
95
|
}
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
96
|
+
}, {
|
97
|
+
key: "clear",
|
98
|
+
value: function clear() {
|
99
|
+
this.nativeFontFaces.forEach(function (nativeFontFace) {
|
100
|
+
document.fonts.delete(nativeFontFace);
|
113
101
|
});
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
};
|
120
|
-
FontLoader.prototype.queueLoadingCallback = function FontLoader_queueLoadingCallback(callback) {
|
121
|
-
function LoadLoader_completeRequest() {
|
122
|
-
(0, _util.assert)(!request.end, 'completeRequest() cannot be called twice');
|
123
|
-
request.end = Date.now();
|
124
|
-
while (context.requests.length > 0 && context.requests[0].end) {
|
125
|
-
var otherRequest = context.requests.shift();
|
126
|
-
setTimeout(otherRequest.callback, 0);
|
102
|
+
this.nativeFontFaces.length = 0;
|
103
|
+
|
104
|
+
if (this.styleElement) {
|
105
|
+
this.styleElement.remove();
|
106
|
+
this.styleElement = null;
|
127
107
|
}
|
128
108
|
}
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
109
|
+
}, {
|
110
|
+
key: "bind",
|
111
|
+
value: function () {
|
112
|
+
var _bind = _asyncToGenerator(
|
113
|
+
/*#__PURE__*/
|
114
|
+
_regenerator.default.mark(function _callee(font) {
|
115
|
+
var _this = this;
|
116
|
+
|
117
|
+
var nativeFontFace, rule;
|
118
|
+
return _regenerator.default.wrap(function _callee$(_context) {
|
119
|
+
while (1) {
|
120
|
+
switch (_context.prev = _context.next) {
|
121
|
+
case 0:
|
122
|
+
if (!(font.attached || font.missingFile)) {
|
123
|
+
_context.next = 2;
|
124
|
+
break;
|
125
|
+
}
|
126
|
+
|
127
|
+
return _context.abrupt("return");
|
128
|
+
|
129
|
+
case 2:
|
130
|
+
font.attached = true;
|
131
|
+
|
132
|
+
if (!this.isFontLoadingAPISupported) {
|
133
|
+
_context.next = 19;
|
134
|
+
break;
|
135
|
+
}
|
136
|
+
|
137
|
+
nativeFontFace = font.createNativeFontFace();
|
138
|
+
|
139
|
+
if (!nativeFontFace) {
|
140
|
+
_context.next = 18;
|
141
|
+
break;
|
142
|
+
}
|
143
|
+
|
144
|
+
this.addNativeFontFace(nativeFontFace);
|
145
|
+
_context.prev = 7;
|
146
|
+
_context.next = 10;
|
147
|
+
return nativeFontFace.loaded;
|
148
|
+
|
149
|
+
case 10:
|
150
|
+
_context.next = 18;
|
151
|
+
break;
|
152
|
+
|
153
|
+
case 12:
|
154
|
+
_context.prev = 12;
|
155
|
+
_context.t0 = _context["catch"](7);
|
156
|
+
|
157
|
+
this._onUnsupportedFeature({
|
158
|
+
featureId: _util.UNSUPPORTED_FEATURES.font
|
159
|
+
});
|
160
|
+
|
161
|
+
(0, _util.warn)("Failed to load font '".concat(nativeFontFace.family, "': '").concat(_context.t0, "'."));
|
162
|
+
font.disableFontFace = true;
|
163
|
+
throw _context.t0;
|
164
|
+
|
165
|
+
case 18:
|
166
|
+
return _context.abrupt("return");
|
167
|
+
|
168
|
+
case 19:
|
169
|
+
rule = font.createFontFaceRule();
|
170
|
+
|
171
|
+
if (!rule) {
|
172
|
+
_context.next = 25;
|
173
|
+
break;
|
174
|
+
}
|
175
|
+
|
176
|
+
this.insertRule(rule);
|
177
|
+
|
178
|
+
if (!this.isSyncFontLoadingSupported) {
|
179
|
+
_context.next = 24;
|
180
|
+
break;
|
181
|
+
}
|
182
|
+
|
183
|
+
return _context.abrupt("return");
|
184
|
+
|
185
|
+
case 24:
|
186
|
+
return _context.abrupt("return", new Promise(function (resolve) {
|
187
|
+
var request = _this._queueLoadingCallback(resolve);
|
188
|
+
|
189
|
+
_this._prepareFontLoadEvent([rule], [font], request);
|
190
|
+
}));
|
191
|
+
|
192
|
+
case 25:
|
193
|
+
case "end":
|
194
|
+
return _context.stop();
|
195
|
+
}
|
196
|
+
}
|
197
|
+
}, _callee, this, [[7, 12]]);
|
198
|
+
}));
|
199
|
+
|
200
|
+
function bind(_x) {
|
201
|
+
return _bind.apply(this, arguments);
|
168
202
|
}
|
169
|
-
|
203
|
+
|
204
|
+
return bind;
|
205
|
+
}()
|
206
|
+
}, {
|
207
|
+
key: "_queueLoadingCallback",
|
208
|
+
value: function _queueLoadingCallback(callback) {
|
209
|
+
(0, _util.unreachable)('Abstract method `_queueLoadingCallback`.');
|
170
210
|
}
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
var CFF_CHECKSUM_OFFSET = 16;
|
176
|
-
var XXXX_VALUE = 0x58585858;
|
177
|
-
var checksum = int32(data, CFF_CHECKSUM_OFFSET);
|
178
|
-
for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) {
|
179
|
-
checksum = checksum - XXXX_VALUE + int32(loadTestFontId, i) | 0;
|
211
|
+
}, {
|
212
|
+
key: "_prepareFontLoadEvent",
|
213
|
+
value: function _prepareFontLoadEvent(rules, fontsToLoad, request) {
|
214
|
+
(0, _util.unreachable)('Abstract method `_prepareFontLoadEvent`.');
|
180
215
|
}
|
181
|
-
|
182
|
-
|
216
|
+
}, {
|
217
|
+
key: "isFontLoadingAPISupported",
|
218
|
+
get: function get() {
|
219
|
+
(0, _util.unreachable)('Abstract method `isFontLoadingAPISupported`.');
|
183
220
|
}
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
var names = [];
|
189
|
-
for (i = 0, ii = fonts.length; i < ii; i++) {
|
190
|
-
names.push(fonts[i].loadedName);
|
221
|
+
}, {
|
222
|
+
key: "isSyncFontLoadingSupported",
|
223
|
+
get: function get() {
|
224
|
+
(0, _util.unreachable)('Abstract method `isSyncFontLoadingSupported`.');
|
191
225
|
}
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
var span = document.createElement('span');
|
197
|
-
span.textContent = 'Hi';
|
198
|
-
span.style.fontFamily = names[i];
|
199
|
-
div.appendChild(span);
|
226
|
+
}, {
|
227
|
+
key: "_loadTestFont",
|
228
|
+
get: function get() {
|
229
|
+
(0, _util.unreachable)('Abstract method `_loadTestFont`.');
|
200
230
|
}
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
{
|
209
|
-
FontLoader.isFontLoadingAPISupported = typeof document !== 'undefined' && !!document.fonts;
|
210
|
-
}
|
231
|
+
}]);
|
232
|
+
|
233
|
+
return BaseFontLoader;
|
234
|
+
}();
|
235
|
+
|
236
|
+
var FontLoader;
|
237
|
+
exports.FontLoader = FontLoader;
|
211
238
|
{
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
239
|
+
exports.FontLoader = FontLoader =
|
240
|
+
/*#__PURE__*/
|
241
|
+
function (_BaseFontLoader) {
|
242
|
+
_inherits(GenericFontLoader, _BaseFontLoader);
|
243
|
+
|
244
|
+
function GenericFontLoader(docId) {
|
245
|
+
var _this2;
|
246
|
+
|
247
|
+
_classCallCheck(this, GenericFontLoader);
|
248
|
+
|
249
|
+
_this2 = _possibleConstructorReturn(this, _getPrototypeOf(GenericFontLoader).call(this, docId));
|
250
|
+
_this2.loadingContext = {
|
251
|
+
requests: [],
|
252
|
+
nextRequestId: 0
|
253
|
+
};
|
254
|
+
_this2.loadTestFontId = 0;
|
255
|
+
return _this2;
|
220
256
|
}
|
221
|
-
return supported;
|
222
|
-
};
|
223
|
-
Object.defineProperty(FontLoader, 'isSyncFontLoadingSupported', {
|
224
|
-
get: function get() {
|
225
|
-
return (0, _util.shadow)(FontLoader, 'isSyncFontLoadingSupported', isSyncFontLoadingSupported());
|
226
|
-
},
|
227
257
|
|
228
|
-
|
229
|
-
|
230
|
-
|
258
|
+
_createClass(GenericFontLoader, [{
|
259
|
+
key: "_queueLoadingCallback",
|
260
|
+
value: function _queueLoadingCallback(callback) {
|
261
|
+
function completeRequest() {
|
262
|
+
(0, _util.assert)(!request.done, 'completeRequest() cannot be called twice.');
|
263
|
+
request.done = true;
|
264
|
+
|
265
|
+
while (context.requests.length > 0 && context.requests[0].done) {
|
266
|
+
var otherRequest = context.requests.shift();
|
267
|
+
setTimeout(otherRequest.callback, 0);
|
268
|
+
}
|
269
|
+
}
|
270
|
+
|
271
|
+
var context = this.loadingContext;
|
272
|
+
var request = {
|
273
|
+
id: "pdfjs-font-loading-".concat(context.nextRequestId++),
|
274
|
+
done: false,
|
275
|
+
complete: completeRequest,
|
276
|
+
callback: callback
|
277
|
+
};
|
278
|
+
context.requests.push(request);
|
279
|
+
return request;
|
280
|
+
}
|
281
|
+
}, {
|
282
|
+
key: "_prepareFontLoadEvent",
|
283
|
+
value: function _prepareFontLoadEvent(rules, fonts, request) {
|
284
|
+
function int32(data, offset) {
|
285
|
+
return data.charCodeAt(offset) << 24 | data.charCodeAt(offset + 1) << 16 | data.charCodeAt(offset + 2) << 8 | data.charCodeAt(offset + 3) & 0xff;
|
286
|
+
}
|
287
|
+
|
288
|
+
function spliceString(s, offset, remove, insert) {
|
289
|
+
var chunk1 = s.substring(0, offset);
|
290
|
+
var chunk2 = s.substring(offset + remove);
|
291
|
+
return chunk1 + insert + chunk2;
|
292
|
+
}
|
293
|
+
|
294
|
+
var i, ii;
|
295
|
+
var canvas = document.createElement('canvas');
|
296
|
+
canvas.width = 1;
|
297
|
+
canvas.height = 1;
|
298
|
+
var ctx = canvas.getContext('2d');
|
299
|
+
var called = 0;
|
300
|
+
|
301
|
+
function isFontReady(name, callback) {
|
302
|
+
called++;
|
303
|
+
|
304
|
+
if (called > 30) {
|
305
|
+
(0, _util.warn)('Load test font never loaded.');
|
306
|
+
callback();
|
307
|
+
return;
|
308
|
+
}
|
309
|
+
|
310
|
+
ctx.font = '30px ' + name;
|
311
|
+
ctx.fillText('.', 0, 20);
|
312
|
+
var imageData = ctx.getImageData(0, 0, 1, 1);
|
313
|
+
|
314
|
+
if (imageData.data[3] > 0) {
|
315
|
+
callback();
|
316
|
+
return;
|
317
|
+
}
|
318
|
+
|
319
|
+
setTimeout(isFontReady.bind(null, name, callback));
|
320
|
+
}
|
321
|
+
|
322
|
+
var loadTestFontId = "lt".concat(Date.now()).concat(this.loadTestFontId++);
|
323
|
+
var data = this._loadTestFont;
|
324
|
+
var COMMENT_OFFSET = 976;
|
325
|
+
data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length, loadTestFontId);
|
326
|
+
var CFF_CHECKSUM_OFFSET = 16;
|
327
|
+
var XXXX_VALUE = 0x58585858;
|
328
|
+
var checksum = int32(data, CFF_CHECKSUM_OFFSET);
|
329
|
+
|
330
|
+
for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) {
|
331
|
+
checksum = checksum - XXXX_VALUE + int32(loadTestFontId, i) | 0;
|
332
|
+
}
|
333
|
+
|
334
|
+
if (i < loadTestFontId.length) {
|
335
|
+
checksum = checksum - XXXX_VALUE + int32(loadTestFontId + 'XXX', i) | 0;
|
336
|
+
}
|
337
|
+
|
338
|
+
data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, (0, _util.string32)(checksum));
|
339
|
+
var url = "url(data:font/opentype;base64,".concat(btoa(data), ");");
|
340
|
+
var rule = "@font-face {font-family:\"".concat(loadTestFontId, "\";src:").concat(url, "}");
|
341
|
+
this.insertRule(rule);
|
342
|
+
var names = [];
|
343
|
+
|
344
|
+
for (i = 0, ii = fonts.length; i < ii; i++) {
|
345
|
+
names.push(fonts[i].loadedName);
|
346
|
+
}
|
347
|
+
|
348
|
+
names.push(loadTestFontId);
|
349
|
+
var div = document.createElement('div');
|
350
|
+
div.setAttribute('style', 'visibility: hidden;' + 'width: 10px; height: 10px;' + 'position: absolute; top: 0px; left: 0px;');
|
351
|
+
|
352
|
+
for (i = 0, ii = names.length; i < ii; ++i) {
|
353
|
+
var span = document.createElement('span');
|
354
|
+
span.textContent = 'Hi';
|
355
|
+
span.style.fontFamily = names[i];
|
356
|
+
div.appendChild(span);
|
357
|
+
}
|
358
|
+
|
359
|
+
document.body.appendChild(div);
|
360
|
+
isFontReady(loadTestFontId, function () {
|
361
|
+
document.body.removeChild(div);
|
362
|
+
request.complete();
|
363
|
+
});
|
364
|
+
}
|
365
|
+
}, {
|
366
|
+
key: "isFontLoadingAPISupported",
|
367
|
+
get: function get() {
|
368
|
+
var supported = typeof document !== 'undefined' && !!document.fonts;
|
369
|
+
|
370
|
+
if (supported && typeof navigator !== 'undefined') {
|
371
|
+
var m = /Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(navigator.userAgent);
|
372
|
+
|
373
|
+
if (m && m[1] < 63) {
|
374
|
+
supported = false;
|
375
|
+
}
|
376
|
+
}
|
377
|
+
|
378
|
+
return (0, _util.shadow)(this, 'isFontLoadingAPISupported', supported);
|
379
|
+
}
|
380
|
+
}, {
|
381
|
+
key: "isSyncFontLoadingSupported",
|
382
|
+
get: function get() {
|
383
|
+
var supported = false;
|
384
|
+
|
385
|
+
if (typeof navigator === 'undefined') {
|
386
|
+
supported = true;
|
387
|
+
} else {
|
388
|
+
var m = /Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(navigator.userAgent);
|
389
|
+
|
390
|
+
if (m && m[1] >= 14) {
|
391
|
+
supported = true;
|
392
|
+
}
|
393
|
+
}
|
394
|
+
|
395
|
+
return (0, _util.shadow)(this, 'isSyncFontLoadingSupported', supported);
|
396
|
+
}
|
397
|
+
}, {
|
398
|
+
key: "_loadTestFont",
|
399
|
+
get: function get() {
|
400
|
+
var getLoadTestFont = function getLoadTestFont() {
|
401
|
+
return atob('T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQA' + 'FQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAA' + 'ALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgA' + 'AAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1' + 'AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD' + '6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACM' + 'AooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4D' + 'IP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAA' + 'AAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUA' + 'AQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgAB' + 'AAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABY' + 'AAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAA' + 'AC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' + 'AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAA' + 'AAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQAC' + 'AQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3' + 'Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTj' + 'FQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA==');
|
402
|
+
};
|
403
|
+
|
404
|
+
return (0, _util.shadow)(this, '_loadTestFont', getLoadTestFont());
|
405
|
+
}
|
406
|
+
}]);
|
407
|
+
|
408
|
+
return GenericFontLoader;
|
409
|
+
}(BaseFontLoader);
|
231
410
|
}
|
232
411
|
var IsEvalSupportedCached = {
|
233
412
|
get value() {
|
234
413
|
return (0, _util.shadow)(this, 'value', (0, _util.isEvalSupported)());
|
235
414
|
}
|
415
|
+
|
236
416
|
};
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
417
|
+
|
418
|
+
var FontFaceObject =
|
419
|
+
/*#__PURE__*/
|
420
|
+
function () {
|
421
|
+
function FontFaceObject(translatedData, _ref2) {
|
422
|
+
var _ref2$isEvalSupported = _ref2.isEvalSupported,
|
423
|
+
isEvalSupported = _ref2$isEvalSupported === void 0 ? true : _ref2$isEvalSupported,
|
424
|
+
_ref2$disableFontFace = _ref2.disableFontFace,
|
425
|
+
disableFontFace = _ref2$disableFontFace === void 0 ? false : _ref2$disableFontFace,
|
426
|
+
_ref2$ignoreErrors = _ref2.ignoreErrors,
|
427
|
+
ignoreErrors = _ref2$ignoreErrors === void 0 ? false : _ref2$ignoreErrors,
|
428
|
+
_ref2$onUnsupportedFe = _ref2.onUnsupportedFeature,
|
429
|
+
onUnsupportedFeature = _ref2$onUnsupportedFe === void 0 ? null : _ref2$onUnsupportedFe,
|
430
|
+
_ref2$fontRegistry = _ref2.fontRegistry,
|
431
|
+
fontRegistry = _ref2$fontRegistry === void 0 ? null : _ref2$fontRegistry;
|
432
|
+
|
433
|
+
_classCallCheck(this, FontFaceObject);
|
245
434
|
|
246
435
|
this.compiledGlyphs = Object.create(null);
|
436
|
+
|
247
437
|
for (var i in translatedData) {
|
248
438
|
this[i] = translatedData[i];
|
249
439
|
}
|
440
|
+
|
250
441
|
this.isEvalSupported = isEvalSupported !== false;
|
251
442
|
this.disableFontFace = disableFontFace === true;
|
443
|
+
this.ignoreErrors = ignoreErrors === true;
|
444
|
+
this._onUnsupportedFeature = onUnsupportedFeature;
|
252
445
|
this.fontRegistry = fontRegistry;
|
253
446
|
}
|
254
|
-
|
255
|
-
|
447
|
+
|
448
|
+
_createClass(FontFaceObject, [{
|
449
|
+
key: "createNativeFontFace",
|
450
|
+
value: function createNativeFontFace() {
|
256
451
|
if (!this.data || this.disableFontFace) {
|
257
452
|
return null;
|
258
453
|
}
|
454
|
+
|
259
455
|
var nativeFontFace = new FontFace(this.loadedName, this.data, {});
|
456
|
+
|
260
457
|
if (this.fontRegistry) {
|
261
458
|
this.fontRegistry.registerFont(this);
|
262
459
|
}
|
460
|
+
|
263
461
|
return nativeFontFace;
|
264
|
-
}
|
265
|
-
|
462
|
+
}
|
463
|
+
}, {
|
464
|
+
key: "createFontFaceRule",
|
465
|
+
value: function createFontFaceRule() {
|
266
466
|
if (!this.data || this.disableFontFace) {
|
267
467
|
return null;
|
268
468
|
}
|
469
|
+
|
269
470
|
var data = (0, _util.bytesToString)(new Uint8Array(this.data));
|
270
|
-
var
|
271
|
-
var
|
272
|
-
|
471
|
+
var url = "url(data:".concat(this.mimetype, ";base64,").concat(btoa(data), ");");
|
472
|
+
var rule = "@font-face {font-family:\"".concat(this.loadedName, "\";src:").concat(url, "}");
|
473
|
+
|
273
474
|
if (this.fontRegistry) {
|
274
475
|
this.fontRegistry.registerFont(this, url);
|
275
476
|
}
|
477
|
+
|
276
478
|
return rule;
|
277
|
-
}
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
479
|
+
}
|
480
|
+
}, {
|
481
|
+
key: "getPathGenerator",
|
482
|
+
value: function getPathGenerator(objs, character) {
|
483
|
+
if (this.compiledGlyphs[character] !== undefined) {
|
484
|
+
return this.compiledGlyphs[character];
|
485
|
+
}
|
486
|
+
|
487
|
+
var cmds, current;
|
488
|
+
|
489
|
+
try {
|
490
|
+
cmds = objs.get(this.loadedName + '_path_' + character);
|
491
|
+
} catch (ex) {
|
492
|
+
if (!this.ignoreErrors) {
|
493
|
+
throw ex;
|
494
|
+
}
|
495
|
+
|
496
|
+
if (this._onUnsupportedFeature) {
|
497
|
+
this._onUnsupportedFeature({
|
498
|
+
featureId: _util.UNSUPPORTED_FEATURES.font
|
499
|
+
});
|
500
|
+
}
|
501
|
+
|
502
|
+
(0, _util.warn)("getPathGenerator - ignoring character: \"".concat(ex, "\"."));
|
503
|
+
return this.compiledGlyphs[character] = function (c, size) {};
|
504
|
+
}
|
505
|
+
|
506
|
+
if (this.isEvalSupported && IsEvalSupportedCached.value) {
|
507
|
+
var args,
|
508
|
+
js = '';
|
509
|
+
|
510
|
+
for (var i = 0, ii = cmds.length; i < ii; i++) {
|
511
|
+
current = cmds[i];
|
512
|
+
|
513
|
+
if (current.args !== undefined) {
|
514
|
+
args = current.args.join(',');
|
515
|
+
} else {
|
516
|
+
args = '';
|
293
517
|
}
|
294
|
-
|
295
|
-
|
296
|
-
this.compiledGlyphs[character] = function (c, size) {
|
297
|
-
for (i = 0, len = cmds.length; i < len; i++) {
|
298
|
-
current = cmds[i];
|
299
|
-
if (current.cmd === 'scale') {
|
300
|
-
current.args = [size, -size];
|
301
|
-
}
|
302
|
-
c[current.cmd].apply(c, current.args);
|
303
|
-
}
|
304
|
-
};
|
518
|
+
|
519
|
+
js += 'c.' + current.cmd + '(' + args + ');\n';
|
305
520
|
}
|
521
|
+
|
522
|
+
return this.compiledGlyphs[character] = new Function('c', 'size', js);
|
306
523
|
}
|
307
|
-
|
524
|
+
|
525
|
+
return this.compiledGlyphs[character] = function (c, size) {
|
526
|
+
for (var _i = 0, _ii = cmds.length; _i < _ii; _i++) {
|
527
|
+
current = cmds[_i];
|
528
|
+
|
529
|
+
if (current.cmd === 'scale') {
|
530
|
+
current.args = [size, -size];
|
531
|
+
}
|
532
|
+
|
533
|
+
c[current.cmd].apply(c, current.args);
|
534
|
+
}
|
535
|
+
};
|
308
536
|
}
|
309
|
-
};
|
537
|
+
}]);
|
538
|
+
|
310
539
|
return FontFaceObject;
|
311
540
|
}();
|
312
|
-
|
313
|
-
exports.
|
541
|
+
|
542
|
+
exports.FontFaceObject = FontFaceObject;
|