UNPKG

613 kBJavaScriptView Raw
1/**
2 * @licstart The following is the entire license notice for the
3 * Javascript code in this page
4 *
5 * Copyright 2017 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
23(function webpackUniversalModuleDefinition(root, factory) {
24 if(typeof exports === 'object' && typeof module === 'object')
25 module.exports = factory();
26 else if(typeof define === 'function' && define.amd)
27 define("pdfjs-dist/build/pdf", [], factory);
28 else if(typeof exports === 'object')
29 exports["pdfjs-dist/build/pdf"] = factory();
30 else
31 root["pdfjs-dist/build/pdf"] = root.pdfjsLib = factory();
32})(typeof self !== 'undefined' ? self : this, function() {
33return /******/ (function(modules) { // webpackBootstrap
34/******/ // The module cache
35/******/ var installedModules = {};
36/******/
37/******/ // The require function
38/******/ function __w_pdfjs_require__(moduleId) {
39/******/
40/******/ // Check if module is in cache
41/******/ if(installedModules[moduleId]) {
42/******/ return installedModules[moduleId].exports;
43/******/ }
44/******/ // Create a new module (and put it into the cache)
45/******/ var module = installedModules[moduleId] = {
46/******/ i: moduleId,
47/******/ l: false,
48/******/ exports: {}
49/******/ };
50/******/
51/******/ // Execute the module function
52/******/ modules[moduleId].call(module.exports, module, module.exports, __w_pdfjs_require__);
53/******/
54/******/ // Flag the module as loaded
55/******/ module.l = true;
56/******/
57/******/ // Return the exports of the module
58/******/ return module.exports;
59/******/ }
60/******/
61/******/
62/******/ // expose the modules object (__webpack_modules__)
63/******/ __w_pdfjs_require__.m = modules;
64/******/
65/******/ // expose the module cache
66/******/ __w_pdfjs_require__.c = installedModules;
67/******/
68/******/ // define getter function for harmony exports
69/******/ __w_pdfjs_require__.d = function(exports, name, getter) {
70/******/ if(!__w_pdfjs_require__.o(exports, name)) {
71/******/ Object.defineProperty(exports, name, {
72/******/ configurable: false,
73/******/ enumerable: true,
74/******/ get: getter
75/******/ });
76/******/ }
77/******/ };
78/******/
79/******/ // getDefaultExport function for compatibility with non-harmony modules
80/******/ __w_pdfjs_require__.n = function(module) {
81/******/ var getter = module && module.__esModule ?
82/******/ function getDefault() { return module['default']; } :
83/******/ function getModuleExports() { return module; };
84/******/ __w_pdfjs_require__.d(getter, 'a', getter);
85/******/ return getter;
86/******/ };
87/******/
88/******/ // Object.prototype.hasOwnProperty.call
89/******/ __w_pdfjs_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
90/******/
91/******/ // __webpack_public_path__
92/******/ __w_pdfjs_require__.p = "";
93/******/
94/******/ // Load entry module and return exports
95/******/ return __w_pdfjs_require__(__w_pdfjs_require__.s = 60);
96/******/ })
97/************************************************************************/
98/******/ ([
99/* 0 */
100/***/ (function(module, exports, __w_pdfjs_require__) {
101
102"use strict";
103
104
105Object.defineProperty(exports, "__esModule", {
106 value: true
107});
108exports.unreachable = exports.warn = exports.utf8StringToString = exports.stringToUTF8String = exports.stringToPDFString = exports.stringToBytes = exports.string32 = exports.shadow = exports.setVerbosityLevel = exports.ReadableStream = exports.removeNullCharacters = exports.readUint32 = exports.readUint16 = exports.readInt8 = exports.log2 = exports.isEvalSupported = exports.isLittleEndian = exports.createValidAbsoluteUrl = exports.isSameOrigin = exports.isSpace = exports.isString = exports.isNum = exports.isEmptyObj = exports.isBool = exports.isArrayBuffer = exports.info = exports.getVerbosityLevel = exports.getLookupTableFactory = exports.getInheritableProperty = exports.deprecated = exports.createObjectURL = exports.createPromiseCapability = exports.createBlob = exports.bytesToString = exports.assert = exports.arraysToBytes = exports.arrayByteLength = exports.FormatError = exports.XRefParseException = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.StreamType = exports.PasswordResponses = exports.PasswordException = exports.PageViewport = exports.NotImplementedException = exports.NativeImageDecoding = exports.MissingPDFException = exports.MissingDataException = exports.MessageHandler = exports.InvalidPDFException = exports.AbortException = exports.CMapCompressionType = exports.ImageKind = exports.FontType = exports.AnnotationType = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.UNSUPPORTED_FEATURES = exports.VerbosityLevel = exports.OPS = exports.IDENTITY_MATRIX = exports.FONT_IDENTITY_MATRIX = undefined;
109
110var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
111
112__w_pdfjs_require__(61);
113
114var _streams_polyfill = __w_pdfjs_require__(115);
115
116var FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];
117var NativeImageDecoding = {
118 NONE: 'none',
119 DECODE: 'decode',
120 DISPLAY: 'display'
121};
122var TextRenderingMode = {
123 FILL: 0,
124 STROKE: 1,
125 FILL_STROKE: 2,
126 INVISIBLE: 3,
127 FILL_ADD_TO_PATH: 4,
128 STROKE_ADD_TO_PATH: 5,
129 FILL_STROKE_ADD_TO_PATH: 6,
130 ADD_TO_PATH: 7,
131 FILL_STROKE_MASK: 3,
132 ADD_TO_PATH_FLAG: 4
133};
134var ImageKind = {
135 GRAYSCALE_1BPP: 1,
136 RGB_24BPP: 2,
137 RGBA_32BPP: 3
138};
139var AnnotationType = {
140 TEXT: 1,
141 LINK: 2,
142 FREETEXT: 3,
143 LINE: 4,
144 SQUARE: 5,
145 CIRCLE: 6,
146 POLYGON: 7,
147 POLYLINE: 8,
148 HIGHLIGHT: 9,
149 UNDERLINE: 10,
150 SQUIGGLY: 11,
151 STRIKEOUT: 12,
152 STAMP: 13,
153 CARET: 14,
154 INK: 15,
155 POPUP: 16,
156 FILEATTACHMENT: 17,
157 SOUND: 18,
158 MOVIE: 19,
159 WIDGET: 20,
160 SCREEN: 21,
161 PRINTERMARK: 22,
162 TRAPNET: 23,
163 WATERMARK: 24,
164 THREED: 25,
165 REDACT: 26
166};
167var AnnotationFlag = {
168 INVISIBLE: 0x01,
169 HIDDEN: 0x02,
170 PRINT: 0x04,
171 NOZOOM: 0x08,
172 NOROTATE: 0x10,
173 NOVIEW: 0x20,
174 READONLY: 0x40,
175 LOCKED: 0x80,
176 TOGGLENOVIEW: 0x100,
177 LOCKEDCONTENTS: 0x200
178};
179var AnnotationFieldFlag = {
180 READONLY: 0x0000001,
181 REQUIRED: 0x0000002,
182 NOEXPORT: 0x0000004,
183 MULTILINE: 0x0001000,
184 PASSWORD: 0x0002000,
185 NOTOGGLETOOFF: 0x0004000,
186 RADIO: 0x0008000,
187 PUSHBUTTON: 0x0010000,
188 COMBO: 0x0020000,
189 EDIT: 0x0040000,
190 SORT: 0x0080000,
191 FILESELECT: 0x0100000,
192 MULTISELECT: 0x0200000,
193 DONOTSPELLCHECK: 0x0400000,
194 DONOTSCROLL: 0x0800000,
195 COMB: 0x1000000,
196 RICHTEXT: 0x2000000,
197 RADIOSINUNISON: 0x2000000,
198 COMMITONSELCHANGE: 0x4000000
199};
200var AnnotationBorderStyleType = {
201 SOLID: 1,
202 DASHED: 2,
203 BEVELED: 3,
204 INSET: 4,
205 UNDERLINE: 5
206};
207var StreamType = {
208 UNKNOWN: 0,
209 FLATE: 1,
210 LZW: 2,
211 DCT: 3,
212 JPX: 4,
213 JBIG: 5,
214 A85: 6,
215 AHX: 7,
216 CCF: 8,
217 RL: 9
218};
219var FontType = {
220 UNKNOWN: 0,
221 TYPE1: 1,
222 TYPE1C: 2,
223 CIDFONTTYPE0: 3,
224 CIDFONTTYPE0C: 4,
225 TRUETYPE: 5,
226 CIDFONTTYPE2: 6,
227 TYPE3: 7,
228 OPENTYPE: 8,
229 TYPE0: 9,
230 MMTYPE1: 10
231};
232var VerbosityLevel = {
233 ERRORS: 0,
234 WARNINGS: 1,
235 INFOS: 5
236};
237var CMapCompressionType = {
238 NONE: 0,
239 BINARY: 1,
240 STREAM: 2
241};
242var OPS = {
243 dependency: 1,
244 setLineWidth: 2,
245 setLineCap: 3,
246 setLineJoin: 4,
247 setMiterLimit: 5,
248 setDash: 6,
249 setRenderingIntent: 7,
250 setFlatness: 8,
251 setGState: 9,
252 save: 10,
253 restore: 11,
254 transform: 12,
255 moveTo: 13,
256 lineTo: 14,
257 curveTo: 15,
258 curveTo2: 16,
259 curveTo3: 17,
260 closePath: 18,
261 rectangle: 19,
262 stroke: 20,
263 closeStroke: 21,
264 fill: 22,
265 eoFill: 23,
266 fillStroke: 24,
267 eoFillStroke: 25,
268 closeFillStroke: 26,
269 closeEOFillStroke: 27,
270 endPath: 28,
271 clip: 29,
272 eoClip: 30,
273 beginText: 31,
274 endText: 32,
275 setCharSpacing: 33,
276 setWordSpacing: 34,
277 setHScale: 35,
278 setLeading: 36,
279 setFont: 37,
280 setTextRenderingMode: 38,
281 setTextRise: 39,
282 moveText: 40,
283 setLeadingMoveText: 41,
284 setTextMatrix: 42,
285 nextLine: 43,
286 showText: 44,
287 showSpacedText: 45,
288 nextLineShowText: 46,
289 nextLineSetSpacingShowText: 47,
290 setCharWidth: 48,
291 setCharWidthAndBounds: 49,
292 setStrokeColorSpace: 50,
293 setFillColorSpace: 51,
294 setStrokeColor: 52,
295 setStrokeColorN: 53,
296 setFillColor: 54,
297 setFillColorN: 55,
298 setStrokeGray: 56,
299 setFillGray: 57,
300 setStrokeRGBColor: 58,
301 setFillRGBColor: 59,
302 setStrokeCMYKColor: 60,
303 setFillCMYKColor: 61,
304 shadingFill: 62,
305 beginInlineImage: 63,
306 beginImageData: 64,
307 endInlineImage: 65,
308 paintXObject: 66,
309 markPoint: 67,
310 markPointProps: 68,
311 beginMarkedContent: 69,
312 beginMarkedContentProps: 70,
313 endMarkedContent: 71,
314 beginCompat: 72,
315 endCompat: 73,
316 paintFormXObjectBegin: 74,
317 paintFormXObjectEnd: 75,
318 beginGroup: 76,
319 endGroup: 77,
320 beginAnnotations: 78,
321 endAnnotations: 79,
322 beginAnnotation: 80,
323 endAnnotation: 81,
324 paintJpegXObject: 82,
325 paintImageMaskXObject: 83,
326 paintImageMaskXObjectGroup: 84,
327 paintImageXObject: 85,
328 paintInlineImageXObject: 86,
329 paintInlineImageXObjectGroup: 87,
330 paintImageXObjectRepeat: 88,
331 paintImageMaskXObjectRepeat: 89,
332 paintSolidColorImageMask: 90,
333 constructPath: 91
334};
335var verbosity = VerbosityLevel.WARNINGS;
336function setVerbosityLevel(level) {
337 if (Number.isInteger(level)) {
338 verbosity = level;
339 }
340}
341function getVerbosityLevel() {
342 return verbosity;
343}
344function info(msg) {
345 if (verbosity >= VerbosityLevel.INFOS) {
346 console.log('Info: ' + msg);
347 }
348}
349function warn(msg) {
350 if (verbosity >= VerbosityLevel.WARNINGS) {
351 console.log('Warning: ' + msg);
352 }
353}
354function deprecated(details) {
355 console.log('Deprecated API usage: ' + details);
356}
357function unreachable(msg) {
358 throw new Error(msg);
359}
360function assert(cond, msg) {
361 if (!cond) {
362 unreachable(msg);
363 }
364}
365var UNSUPPORTED_FEATURES = {
366 unknown: 'unknown',
367 forms: 'forms',
368 javaScript: 'javaScript',
369 smask: 'smask',
370 shadingPattern: 'shadingPattern',
371 font: 'font'
372};
373function isSameOrigin(baseUrl, otherUrl) {
374 try {
375 var base = new URL(baseUrl);
376 if (!base.origin || base.origin === 'null') {
377 return false;
378 }
379 } catch (e) {
380 return false;
381 }
382 var other = new URL(otherUrl, base);
383 return base.origin === other.origin;
384}
385function isValidProtocol(url) {
386 if (!url) {
387 return false;
388 }
389 switch (url.protocol) {
390 case 'http:':
391 case 'https:':
392 case 'ftp:':
393 case 'mailto:':
394 case 'tel:':
395 return true;
396 default:
397 return false;
398 }
399}
400function createValidAbsoluteUrl(url, baseUrl) {
401 if (!url) {
402 return null;
403 }
404 try {
405 var absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url);
406 if (isValidProtocol(absoluteUrl)) {
407 return absoluteUrl;
408 }
409 } catch (ex) {}
410 return null;
411}
412function shadow(obj, prop, value) {
413 Object.defineProperty(obj, prop, {
414 value: value,
415 enumerable: true,
416 configurable: true,
417 writable: false
418 });
419 return value;
420}
421function getLookupTableFactory(initializer) {
422 var lookup;
423 return function () {
424 if (initializer) {
425 lookup = Object.create(null);
426 initializer(lookup);
427 initializer = null;
428 }
429 return lookup;
430 };
431}
432var PasswordResponses = {
433 NEED_PASSWORD: 1,
434 INCORRECT_PASSWORD: 2
435};
436var PasswordException = function PasswordExceptionClosure() {
437 function PasswordException(msg, code) {
438 this.name = 'PasswordException';
439 this.message = msg;
440 this.code = code;
441 }
442 PasswordException.prototype = new Error();
443 PasswordException.constructor = PasswordException;
444 return PasswordException;
445}();
446var UnknownErrorException = function UnknownErrorExceptionClosure() {
447 function UnknownErrorException(msg, details) {
448 this.name = 'UnknownErrorException';
449 this.message = msg;
450 this.details = details;
451 }
452 UnknownErrorException.prototype = new Error();
453 UnknownErrorException.constructor = UnknownErrorException;
454 return UnknownErrorException;
455}();
456var InvalidPDFException = function InvalidPDFExceptionClosure() {
457 function InvalidPDFException(msg) {
458 this.name = 'InvalidPDFException';
459 this.message = msg;
460 }
461 InvalidPDFException.prototype = new Error();
462 InvalidPDFException.constructor = InvalidPDFException;
463 return InvalidPDFException;
464}();
465var MissingPDFException = function MissingPDFExceptionClosure() {
466 function MissingPDFException(msg) {
467 this.name = 'MissingPDFException';
468 this.message = msg;
469 }
470 MissingPDFException.prototype = new Error();
471 MissingPDFException.constructor = MissingPDFException;
472 return MissingPDFException;
473}();
474var UnexpectedResponseException = function UnexpectedResponseExceptionClosure() {
475 function UnexpectedResponseException(msg, status) {
476 this.name = 'UnexpectedResponseException';
477 this.message = msg;
478 this.status = status;
479 }
480 UnexpectedResponseException.prototype = new Error();
481 UnexpectedResponseException.constructor = UnexpectedResponseException;
482 return UnexpectedResponseException;
483}();
484var NotImplementedException = function NotImplementedExceptionClosure() {
485 function NotImplementedException(msg) {
486 this.message = msg;
487 }
488 NotImplementedException.prototype = new Error();
489 NotImplementedException.prototype.name = 'NotImplementedException';
490 NotImplementedException.constructor = NotImplementedException;
491 return NotImplementedException;
492}();
493var MissingDataException = function MissingDataExceptionClosure() {
494 function MissingDataException(begin, end) {
495 this.begin = begin;
496 this.end = end;
497 this.message = 'Missing data [' + begin + ', ' + end + ')';
498 }
499 MissingDataException.prototype = new Error();
500 MissingDataException.prototype.name = 'MissingDataException';
501 MissingDataException.constructor = MissingDataException;
502 return MissingDataException;
503}();
504var XRefParseException = function XRefParseExceptionClosure() {
505 function XRefParseException(msg) {
506 this.message = msg;
507 }
508 XRefParseException.prototype = new Error();
509 XRefParseException.prototype.name = 'XRefParseException';
510 XRefParseException.constructor = XRefParseException;
511 return XRefParseException;
512}();
513var FormatError = function FormatErrorClosure() {
514 function FormatError(msg) {
515 this.message = msg;
516 }
517 FormatError.prototype = new Error();
518 FormatError.prototype.name = 'FormatError';
519 FormatError.constructor = FormatError;
520 return FormatError;
521}();
522var AbortException = function AbortExceptionClosure() {
523 function AbortException(msg) {
524 this.name = 'AbortException';
525 this.message = msg;
526 }
527 AbortException.prototype = new Error();
528 AbortException.constructor = AbortException;
529 return AbortException;
530}();
531var NullCharactersRegExp = /\x00/g;
532function removeNullCharacters(str) {
533 if (typeof str !== 'string') {
534 warn('The argument for removeNullCharacters must be a string.');
535 return str;
536 }
537 return str.replace(NullCharactersRegExp, '');
538}
539function bytesToString(bytes) {
540 assert(bytes !== null && (typeof bytes === 'undefined' ? 'undefined' : _typeof(bytes)) === 'object' && bytes.length !== undefined, 'Invalid argument for bytesToString');
541 var length = bytes.length;
542 var MAX_ARGUMENT_COUNT = 8192;
543 if (length < MAX_ARGUMENT_COUNT) {
544 return String.fromCharCode.apply(null, bytes);
545 }
546 var strBuf = [];
547 for (var i = 0; i < length; i += MAX_ARGUMENT_COUNT) {
548 var chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length);
549 var chunk = bytes.subarray(i, chunkEnd);
550 strBuf.push(String.fromCharCode.apply(null, chunk));
551 }
552 return strBuf.join('');
553}
554function stringToBytes(str) {
555 assert(typeof str === 'string', 'Invalid argument for stringToBytes');
556 var length = str.length;
557 var bytes = new Uint8Array(length);
558 for (var i = 0; i < length; ++i) {
559 bytes[i] = str.charCodeAt(i) & 0xFF;
560 }
561 return bytes;
562}
563function arrayByteLength(arr) {
564 if (arr.length !== undefined) {
565 return arr.length;
566 }
567 assert(arr.byteLength !== undefined);
568 return arr.byteLength;
569}
570function arraysToBytes(arr) {
571 if (arr.length === 1 && arr[0] instanceof Uint8Array) {
572 return arr[0];
573 }
574 var resultLength = 0;
575 var i,
576 ii = arr.length;
577 var item, itemLength;
578 for (i = 0; i < ii; i++) {
579 item = arr[i];
580 itemLength = arrayByteLength(item);
581 resultLength += itemLength;
582 }
583 var pos = 0;
584 var data = new Uint8Array(resultLength);
585 for (i = 0; i < ii; i++) {
586 item = arr[i];
587 if (!(item instanceof Uint8Array)) {
588 if (typeof item === 'string') {
589 item = stringToBytes(item);
590 } else {
591 item = new Uint8Array(item);
592 }
593 }
594 itemLength = item.byteLength;
595 data.set(item, pos);
596 pos += itemLength;
597 }
598 return data;
599}
600function string32(value) {
601 return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff);
602}
603function log2(x) {
604 if (x <= 0) {
605 return 0;
606 }
607 return Math.ceil(Math.log2(x));
608}
609function readInt8(data, start) {
610 return data[start] << 24 >> 24;
611}
612function readUint16(data, offset) {
613 return data[offset] << 8 | data[offset + 1];
614}
615function readUint32(data, offset) {
616 return (data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]) >>> 0;
617}
618function isLittleEndian() {
619 var buffer8 = new Uint8Array(4);
620 buffer8[0] = 1;
621 var view32 = new Uint32Array(buffer8.buffer, 0, 1);
622 return view32[0] === 1;
623}
624function isEvalSupported() {
625 try {
626 new Function('');
627 return true;
628 } catch (e) {
629 return false;
630 }
631}
632function getInheritableProperty(_ref) {
633 var dict = _ref.dict,
634 key = _ref.key,
635 _ref$getArray = _ref.getArray,
636 getArray = _ref$getArray === undefined ? false : _ref$getArray,
637 _ref$stopWhenFound = _ref.stopWhenFound,
638 stopWhenFound = _ref$stopWhenFound === undefined ? true : _ref$stopWhenFound;
639
640 var LOOP_LIMIT = 100;
641 var loopCount = 0;
642 var values = void 0;
643 while (dict) {
644 var value = getArray ? dict.getArray(key) : dict.get(key);
645 if (value !== undefined) {
646 if (stopWhenFound) {
647 return value;
648 }
649 if (!values) {
650 values = [];
651 }
652 values.push(value);
653 }
654 if (++loopCount > LOOP_LIMIT) {
655 warn('getInheritableProperty: maximum loop count exceeded for "' + key + '"');
656 break;
657 }
658 dict = dict.get('Parent');
659 }
660 return values;
661}
662var IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];
663var Util = function UtilClosure() {
664 function Util() {}
665 var rgbBuf = ['rgb(', 0, ',', 0, ',', 0, ')'];
666 Util.makeCssRgb = function Util_makeCssRgb(r, g, b) {
667 rgbBuf[1] = r;
668 rgbBuf[3] = g;
669 rgbBuf[5] = b;
670 return rgbBuf.join('');
671 };
672 Util.transform = function Util_transform(m1, m2) {
673 return [m1[0] * m2[0] + m1[2] * m2[1], m1[1] * m2[0] + m1[3] * m2[1], m1[0] * m2[2] + m1[2] * m2[3], m1[1] * m2[2] + m1[3] * m2[3], m1[0] * m2[4] + m1[2] * m2[5] + m1[4], m1[1] * m2[4] + m1[3] * m2[5] + m1[5]];
674 };
675 Util.applyTransform = function Util_applyTransform(p, m) {
676 var xt = p[0] * m[0] + p[1] * m[2] + m[4];
677 var yt = p[0] * m[1] + p[1] * m[3] + m[5];
678 return [xt, yt];
679 };
680 Util.applyInverseTransform = function Util_applyInverseTransform(p, m) {
681 var d = m[0] * m[3] - m[1] * m[2];
682 var xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d;
683 var yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d;
684 return [xt, yt];
685 };
686 Util.getAxialAlignedBoundingBox = function Util_getAxialAlignedBoundingBox(r, m) {
687 var p1 = Util.applyTransform(r, m);
688 var p2 = Util.applyTransform(r.slice(2, 4), m);
689 var p3 = Util.applyTransform([r[0], r[3]], m);
690 var p4 = Util.applyTransform([r[2], r[1]], m);
691 return [Math.min(p1[0], p2[0], p3[0], p4[0]), Math.min(p1[1], p2[1], p3[1], p4[1]), Math.max(p1[0], p2[0], p3[0], p4[0]), Math.max(p1[1], p2[1], p3[1], p4[1])];
692 };
693 Util.inverseTransform = function Util_inverseTransform(m) {
694 var d = m[0] * m[3] - m[1] * m[2];
695 return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d];
696 };
697 Util.apply3dTransform = function Util_apply3dTransform(m, v) {
698 return [m[0] * v[0] + m[1] * v[1] + m[2] * v[2], m[3] * v[0] + m[4] * v[1] + m[5] * v[2], m[6] * v[0] + m[7] * v[1] + m[8] * v[2]];
699 };
700 Util.singularValueDecompose2dScale = function Util_singularValueDecompose2dScale(m) {
701 var transpose = [m[0], m[2], m[1], m[3]];
702 var a = m[0] * transpose[0] + m[1] * transpose[2];
703 var b = m[0] * transpose[1] + m[1] * transpose[3];
704 var c = m[2] * transpose[0] + m[3] * transpose[2];
705 var d = m[2] * transpose[1] + m[3] * transpose[3];
706 var first = (a + d) / 2;
707 var second = Math.sqrt((a + d) * (a + d) - 4 * (a * d - c * b)) / 2;
708 var sx = first + second || 1;
709 var sy = first - second || 1;
710 return [Math.sqrt(sx), Math.sqrt(sy)];
711 };
712 Util.normalizeRect = function Util_normalizeRect(rect) {
713 var r = rect.slice(0);
714 if (rect[0] > rect[2]) {
715 r[0] = rect[2];
716 r[2] = rect[0];
717 }
718 if (rect[1] > rect[3]) {
719 r[1] = rect[3];
720 r[3] = rect[1];
721 }
722 return r;
723 };
724 Util.intersect = function Util_intersect(rect1, rect2) {
725 function compare(a, b) {
726 return a - b;
727 }
728 var orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare),
729 orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare),
730 result = [];
731 rect1 = Util.normalizeRect(rect1);
732 rect2 = Util.normalizeRect(rect2);
733 if (orderedX[0] === rect1[0] && orderedX[1] === rect2[0] || orderedX[0] === rect2[0] && orderedX[1] === rect1[0]) {
734 result[0] = orderedX[1];
735 result[2] = orderedX[2];
736 } else {
737 return false;
738 }
739 if (orderedY[0] === rect1[1] && orderedY[1] === rect2[1] || orderedY[0] === rect2[1] && orderedY[1] === rect1[1]) {
740 result[1] = orderedY[1];
741 result[3] = orderedY[2];
742 } else {
743 return false;
744 }
745 return result;
746 };
747 var ROMAN_NUMBER_MAP = ['', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM', '', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC', '', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX'];
748 Util.toRoman = function Util_toRoman(number, lowerCase) {
749 assert(Number.isInteger(number) && number > 0, 'The number should be a positive integer.');
750 var pos,
751 romanBuf = [];
752 while (number >= 1000) {
753 number -= 1000;
754 romanBuf.push('M');
755 }
756 pos = number / 100 | 0;
757 number %= 100;
758 romanBuf.push(ROMAN_NUMBER_MAP[pos]);
759 pos = number / 10 | 0;
760 number %= 10;
761 romanBuf.push(ROMAN_NUMBER_MAP[10 + pos]);
762 romanBuf.push(ROMAN_NUMBER_MAP[20 + number]);
763 var romanStr = romanBuf.join('');
764 return lowerCase ? romanStr.toLowerCase() : romanStr;
765 };
766 Util.appendToArray = function Util_appendToArray(arr1, arr2) {
767 Array.prototype.push.apply(arr1, arr2);
768 };
769 Util.prependToArray = function Util_prependToArray(arr1, arr2) {
770 Array.prototype.unshift.apply(arr1, arr2);
771 };
772 Util.extendObj = function extendObj(obj1, obj2) {
773 for (var key in obj2) {
774 obj1[key] = obj2[key];
775 }
776 };
777 Util.inherit = function Util_inherit(sub, base, prototype) {
778 sub.prototype = Object.create(base.prototype);
779 sub.prototype.constructor = sub;
780 for (var prop in prototype) {
781 sub.prototype[prop] = prototype[prop];
782 }
783 };
784 Util.loadScript = function Util_loadScript(src, callback) {
785 var script = document.createElement('script');
786 var loaded = false;
787 script.setAttribute('src', src);
788 if (callback) {
789 script.onload = function () {
790 if (!loaded) {
791 callback();
792 }
793 loaded = true;
794 };
795 }
796 document.getElementsByTagName('head')[0].appendChild(script);
797 };
798 return Util;
799}();
800var PageViewport = function PageViewportClosure() {
801 function PageViewport(viewBox, scale, rotation, offsetX, offsetY, dontFlip) {
802 this.viewBox = viewBox;
803 this.scale = scale;
804 this.rotation = rotation;
805 this.offsetX = offsetX;
806 this.offsetY = offsetY;
807 var centerX = (viewBox[2] + viewBox[0]) / 2;
808 var centerY = (viewBox[3] + viewBox[1]) / 2;
809 var rotateA, rotateB, rotateC, rotateD;
810 rotation = rotation % 360;
811 rotation = rotation < 0 ? rotation + 360 : rotation;
812 switch (rotation) {
813 case 180:
814 rotateA = -1;
815 rotateB = 0;
816 rotateC = 0;
817 rotateD = 1;
818 break;
819 case 90:
820 rotateA = 0;
821 rotateB = 1;
822 rotateC = 1;
823 rotateD = 0;
824 break;
825 case 270:
826 rotateA = 0;
827 rotateB = -1;
828 rotateC = -1;
829 rotateD = 0;
830 break;
831 default:
832 rotateA = 1;
833 rotateB = 0;
834 rotateC = 0;
835 rotateD = -1;
836 break;
837 }
838 if (dontFlip) {
839 rotateC = -rotateC;
840 rotateD = -rotateD;
841 }
842 var offsetCanvasX, offsetCanvasY;
843 var width, height;
844 if (rotateA === 0) {
845 offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;
846 offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY;
847 width = Math.abs(viewBox[3] - viewBox[1]) * scale;
848 height = Math.abs(viewBox[2] - viewBox[0]) * scale;
849 } else {
850 offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;
851 offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;
852 width = Math.abs(viewBox[2] - viewBox[0]) * scale;
853 height = Math.abs(viewBox[3] - viewBox[1]) * scale;
854 }
855 this.transform = [rotateA * scale, rotateB * scale, rotateC * scale, rotateD * scale, offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY];
856 this.width = width;
857 this.height = height;
858 this.fontScale = scale;
859 }
860 PageViewport.prototype = {
861 clone: function PageViewPort_clone(args) {
862 args = args || {};
863 var scale = 'scale' in args ? args.scale : this.scale;
864 var rotation = 'rotation' in args ? args.rotation : this.rotation;
865 return new PageViewport(this.viewBox.slice(), scale, rotation, this.offsetX, this.offsetY, args.dontFlip);
866 },
867 convertToViewportPoint: function PageViewport_convertToViewportPoint(x, y) {
868 return Util.applyTransform([x, y], this.transform);
869 },
870 convertToViewportRectangle: function PageViewport_convertToViewportRectangle(rect) {
871 var tl = Util.applyTransform([rect[0], rect[1]], this.transform);
872 var br = Util.applyTransform([rect[2], rect[3]], this.transform);
873 return [tl[0], tl[1], br[0], br[1]];
874 },
875 convertToPdfPoint: function PageViewport_convertToPdfPoint(x, y) {
876 return Util.applyInverseTransform([x, y], this.transform);
877 }
878 };
879 return PageViewport;
880}();
881var PDFStringTranslateTable = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2D8, 0x2C7, 0x2C6, 0x2D9, 0x2DD, 0x2DB, 0x2DA, 0x2DC, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192, 0x2044, 0x2039, 0x203A, 0x2212, 0x2030, 0x201E, 0x201C, 0x201D, 0x2018, 0x2019, 0x201A, 0x2122, 0xFB01, 0xFB02, 0x141, 0x152, 0x160, 0x178, 0x17D, 0x131, 0x142, 0x153, 0x161, 0x17E, 0, 0x20AC];
882function stringToPDFString(str) {
883 var i,
884 n = str.length,
885 strBuf = [];
886 if (str[0] === '\xFE' && str[1] === '\xFF') {
887 for (i = 2; i < n; i += 2) {
888 strBuf.push(String.fromCharCode(str.charCodeAt(i) << 8 | str.charCodeAt(i + 1)));
889 }
890 } else {
891 for (i = 0; i < n; ++i) {
892 var code = PDFStringTranslateTable[str.charCodeAt(i)];
893 strBuf.push(code ? String.fromCharCode(code) : str.charAt(i));
894 }
895 }
896 return strBuf.join('');
897}
898function stringToUTF8String(str) {
899 return decodeURIComponent(escape(str));
900}
901function utf8StringToString(str) {
902 return unescape(encodeURIComponent(str));
903}
904function isEmptyObj(obj) {
905 for (var key in obj) {
906 return false;
907 }
908 return true;
909}
910function isBool(v) {
911 return typeof v === 'boolean';
912}
913function isNum(v) {
914 return typeof v === 'number';
915}
916function isString(v) {
917 return typeof v === 'string';
918}
919function isArrayBuffer(v) {
920 return (typeof v === 'undefined' ? 'undefined' : _typeof(v)) === 'object' && v !== null && v.byteLength !== undefined;
921}
922function isSpace(ch) {
923 return ch === 0x20 || ch === 0x09 || ch === 0x0D || ch === 0x0A;
924}
925function createPromiseCapability() {
926 var capability = {};
927 capability.promise = new Promise(function (resolve, reject) {
928 capability.resolve = resolve;
929 capability.reject = reject;
930 });
931 return capability;
932}
933var createBlob = function createBlob(data, contentType) {
934 if (typeof Blob !== 'undefined') {
935 return new Blob([data], { type: contentType });
936 }
937 throw new Error('The "Blob" constructor is not supported.');
938};
939var createObjectURL = function createObjectURLClosure() {
940 var digits = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
941 return function createObjectURL(data, contentType) {
942 var forceDataSchema = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
943
944 if (!forceDataSchema && URL.createObjectURL) {
945 var blob = createBlob(data, contentType);
946 return URL.createObjectURL(blob);
947 }
948 var buffer = 'data:' + contentType + ';base64,';
949 for (var i = 0, ii = data.length; i < ii; i += 3) {
950 var b1 = data[i] & 0xFF;
951 var b2 = data[i + 1] & 0xFF;
952 var b3 = data[i + 2] & 0xFF;
953 var d1 = b1 >> 2,
954 d2 = (b1 & 3) << 4 | b2 >> 4;
955 var d3 = i + 1 < ii ? (b2 & 0xF) << 2 | b3 >> 6 : 64;
956 var d4 = i + 2 < ii ? b3 & 0x3F : 64;
957 buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4];
958 }
959 return buffer;
960 };
961}();
962function resolveCall(fn, args) {
963 var thisArg = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
964
965 if (!fn) {
966 return Promise.resolve(undefined);
967 }
968 return new Promise(function (resolve, reject) {
969 resolve(fn.apply(thisArg, args));
970 });
971}
972function wrapReason(reason) {
973 if ((typeof reason === 'undefined' ? 'undefined' : _typeof(reason)) !== 'object') {
974 return reason;
975 }
976 switch (reason.name) {
977 case 'AbortException':
978 return new AbortException(reason.message);
979 case 'MissingPDFException':
980 return new MissingPDFException(reason.message);
981 case 'UnexpectedResponseException':
982 return new UnexpectedResponseException(reason.message, reason.status);
983 default:
984 return new UnknownErrorException(reason.message, reason.details);
985 }
986}
987function makeReasonSerializable(reason) {
988 if (!(reason instanceof Error) || reason instanceof AbortException || reason instanceof MissingPDFException || reason instanceof UnexpectedResponseException || reason instanceof UnknownErrorException) {
989 return reason;
990 }
991 return new UnknownErrorException(reason.message, reason.toString());
992}
993function resolveOrReject(capability, success, reason) {
994 if (success) {
995 capability.resolve();
996 } else {
997 capability.reject(reason);
998 }
999}
1000function finalize(promise) {
1001 return Promise.resolve(promise).catch(function () {});
1002}
1003function MessageHandler(sourceName, targetName, comObj) {
1004 var _this = this;
1005
1006 this.sourceName = sourceName;
1007 this.targetName = targetName;
1008 this.comObj = comObj;
1009 this.callbackId = 1;
1010 this.streamId = 1;
1011 this.postMessageTransfers = true;
1012 this.streamSinks = Object.create(null);
1013 this.streamControllers = Object.create(null);
1014 var callbacksCapabilities = this.callbacksCapabilities = Object.create(null);
1015 var ah = this.actionHandler = Object.create(null);
1016 this._onComObjOnMessage = function (event) {
1017 var data = event.data;
1018 if (data.targetName !== _this.sourceName) {
1019 return;
1020 }
1021 if (data.stream) {
1022 _this._processStreamMessage(data);
1023 } else if (data.isReply) {
1024 var callbackId = data.callbackId;
1025 if (data.callbackId in callbacksCapabilities) {
1026 var callback = callbacksCapabilities[callbackId];
1027 delete callbacksCapabilities[callbackId];
1028 if ('error' in data) {
1029 callback.reject(wrapReason(data.error));
1030 } else {
1031 callback.resolve(data.data);
1032 }
1033 } else {
1034 throw new Error('Cannot resolve callback ' + callbackId);
1035 }
1036 } else if (data.action in ah) {
1037 var action = ah[data.action];
1038 if (data.callbackId) {
1039 var _sourceName = _this.sourceName;
1040 var _targetName = data.sourceName;
1041 Promise.resolve().then(function () {
1042 return action[0].call(action[1], data.data);
1043 }).then(function (result) {
1044 comObj.postMessage({
1045 sourceName: _sourceName,
1046 targetName: _targetName,
1047 isReply: true,
1048 callbackId: data.callbackId,
1049 data: result
1050 });
1051 }, function (reason) {
1052 comObj.postMessage({
1053 sourceName: _sourceName,
1054 targetName: _targetName,
1055 isReply: true,
1056 callbackId: data.callbackId,
1057 error: makeReasonSerializable(reason)
1058 });
1059 });
1060 } else if (data.streamId) {
1061 _this._createStreamSink(data);
1062 } else {
1063 action[0].call(action[1], data.data);
1064 }
1065 } else {
1066 throw new Error('Unknown action from worker: ' + data.action);
1067 }
1068 };
1069 comObj.addEventListener('message', this._onComObjOnMessage);
1070}
1071MessageHandler.prototype = {
1072 on: function on(actionName, handler, scope) {
1073 var ah = this.actionHandler;
1074 if (ah[actionName]) {
1075 throw new Error('There is already an actionName called "' + actionName + '"');
1076 }
1077 ah[actionName] = [handler, scope];
1078 },
1079 send: function send(actionName, data, transfers) {
1080 var message = {
1081 sourceName: this.sourceName,
1082 targetName: this.targetName,
1083 action: actionName,
1084 data: data
1085 };
1086 this.postMessage(message, transfers);
1087 },
1088 sendWithPromise: function sendWithPromise(actionName, data, transfers) {
1089 var callbackId = this.callbackId++;
1090 var message = {
1091 sourceName: this.sourceName,
1092 targetName: this.targetName,
1093 action: actionName,
1094 data: data,
1095 callbackId: callbackId
1096 };
1097 var capability = createPromiseCapability();
1098 this.callbacksCapabilities[callbackId] = capability;
1099 try {
1100 this.postMessage(message, transfers);
1101 } catch (e) {
1102 capability.reject(e);
1103 }
1104 return capability.promise;
1105 },
1106 sendWithStream: function sendWithStream(actionName, data, queueingStrategy, transfers) {
1107 var _this2 = this;
1108
1109 var streamId = this.streamId++;
1110 var sourceName = this.sourceName;
1111 var targetName = this.targetName;
1112 return new _streams_polyfill.ReadableStream({
1113 start: function start(controller) {
1114 var startCapability = createPromiseCapability();
1115 _this2.streamControllers[streamId] = {
1116 controller: controller,
1117 startCall: startCapability,
1118 isClosed: false
1119 };
1120 _this2.postMessage({
1121 sourceName: sourceName,
1122 targetName: targetName,
1123 action: actionName,
1124 streamId: streamId,
1125 data: data,
1126 desiredSize: controller.desiredSize
1127 });
1128 return startCapability.promise;
1129 },
1130 pull: function pull(controller) {
1131 var pullCapability = createPromiseCapability();
1132 _this2.streamControllers[streamId].pullCall = pullCapability;
1133 _this2.postMessage({
1134 sourceName: sourceName,
1135 targetName: targetName,
1136 stream: 'pull',
1137 streamId: streamId,
1138 desiredSize: controller.desiredSize
1139 });
1140 return pullCapability.promise;
1141 },
1142 cancel: function cancel(reason) {
1143 var cancelCapability = createPromiseCapability();
1144 _this2.streamControllers[streamId].cancelCall = cancelCapability;
1145 _this2.streamControllers[streamId].isClosed = true;
1146 _this2.postMessage({
1147 sourceName: sourceName,
1148 targetName: targetName,
1149 stream: 'cancel',
1150 reason: reason,
1151 streamId: streamId
1152 });
1153 return cancelCapability.promise;
1154 }
1155 }, queueingStrategy);
1156 },
1157 _createStreamSink: function _createStreamSink(data) {
1158 var _this3 = this;
1159
1160 var self = this;
1161 var action = this.actionHandler[data.action];
1162 var streamId = data.streamId;
1163 var desiredSize = data.desiredSize;
1164 var sourceName = this.sourceName;
1165 var targetName = data.sourceName;
1166 var capability = createPromiseCapability();
1167 var sendStreamRequest = function sendStreamRequest(_ref2) {
1168 var stream = _ref2.stream,
1169 chunk = _ref2.chunk,
1170 transfers = _ref2.transfers,
1171 success = _ref2.success,
1172 reason = _ref2.reason;
1173
1174 _this3.postMessage({
1175 sourceName: sourceName,
1176 targetName: targetName,
1177 stream: stream,
1178 streamId: streamId,
1179 chunk: chunk,
1180 success: success,
1181 reason: reason
1182 }, transfers);
1183 };
1184 var streamSink = {
1185 enqueue: function enqueue(chunk) {
1186 var size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
1187 var transfers = arguments[2];
1188
1189 if (this.isCancelled) {
1190 return;
1191 }
1192 var lastDesiredSize = this.desiredSize;
1193 this.desiredSize -= size;
1194 if (lastDesiredSize > 0 && this.desiredSize <= 0) {
1195 this.sinkCapability = createPromiseCapability();
1196 this.ready = this.sinkCapability.promise;
1197 }
1198 sendStreamRequest({
1199 stream: 'enqueue',
1200 chunk: chunk,
1201 transfers: transfers
1202 });
1203 },
1204 close: function close() {
1205 if (this.isCancelled) {
1206 return;
1207 }
1208 this.isCancelled = true;
1209 sendStreamRequest({ stream: 'close' });
1210 delete self.streamSinks[streamId];
1211 },
1212 error: function error(reason) {
1213 if (this.isCancelled) {
1214 return;
1215 }
1216 this.isCancelled = true;
1217 sendStreamRequest({
1218 stream: 'error',
1219 reason: reason
1220 });
1221 },
1222
1223 sinkCapability: capability,
1224 onPull: null,
1225 onCancel: null,
1226 isCancelled: false,
1227 desiredSize: desiredSize,
1228 ready: null
1229 };
1230 streamSink.sinkCapability.resolve();
1231 streamSink.ready = streamSink.sinkCapability.promise;
1232 this.streamSinks[streamId] = streamSink;
1233 resolveCall(action[0], [data.data, streamSink], action[1]).then(function () {
1234 sendStreamRequest({
1235 stream: 'start_complete',
1236 success: true
1237 });
1238 }, function (reason) {
1239 sendStreamRequest({
1240 stream: 'start_complete',
1241 success: false,
1242 reason: reason
1243 });
1244 });
1245 },
1246 _processStreamMessage: function _processStreamMessage(data) {
1247 var _this4 = this;
1248
1249 var sourceName = this.sourceName;
1250 var targetName = data.sourceName;
1251 var streamId = data.streamId;
1252 var sendStreamResponse = function sendStreamResponse(_ref3) {
1253 var stream = _ref3.stream,
1254 success = _ref3.success,
1255 reason = _ref3.reason;
1256
1257 _this4.comObj.postMessage({
1258 sourceName: sourceName,
1259 targetName: targetName,
1260 stream: stream,
1261 success: success,
1262 streamId: streamId,
1263 reason: reason
1264 });
1265 };
1266 var deleteStreamController = function deleteStreamController() {
1267 Promise.all([_this4.streamControllers[data.streamId].startCall, _this4.streamControllers[data.streamId].pullCall, _this4.streamControllers[data.streamId].cancelCall].map(function (capability) {
1268 return capability && finalize(capability.promise);
1269 })).then(function () {
1270 delete _this4.streamControllers[data.streamId];
1271 });
1272 };
1273 switch (data.stream) {
1274 case 'start_complete':
1275 resolveOrReject(this.streamControllers[data.streamId].startCall, data.success, wrapReason(data.reason));
1276 break;
1277 case 'pull_complete':
1278 resolveOrReject(this.streamControllers[data.streamId].pullCall, data.success, wrapReason(data.reason));
1279 break;
1280 case 'pull':
1281 if (!this.streamSinks[data.streamId]) {
1282 sendStreamResponse({
1283 stream: 'pull_complete',
1284 success: true
1285 });
1286 break;
1287 }
1288 if (this.streamSinks[data.streamId].desiredSize <= 0 && data.desiredSize > 0) {
1289 this.streamSinks[data.streamId].sinkCapability.resolve();
1290 }
1291 this.streamSinks[data.streamId].desiredSize = data.desiredSize;
1292 resolveCall(this.streamSinks[data.streamId].onPull).then(function () {
1293 sendStreamResponse({
1294 stream: 'pull_complete',
1295 success: true
1296 });
1297 }, function (reason) {
1298 sendStreamResponse({
1299 stream: 'pull_complete',
1300 success: false,
1301 reason: reason
1302 });
1303 });
1304 break;
1305 case 'enqueue':
1306 assert(this.streamControllers[data.streamId], 'enqueue should have stream controller');
1307 if (!this.streamControllers[data.streamId].isClosed) {
1308 this.streamControllers[data.streamId].controller.enqueue(data.chunk);
1309 }
1310 break;
1311 case 'close':
1312 assert(this.streamControllers[data.streamId], 'close should have stream controller');
1313 if (this.streamControllers[data.streamId].isClosed) {
1314 break;
1315 }
1316 this.streamControllers[data.streamId].isClosed = true;
1317 this.streamControllers[data.streamId].controller.close();
1318 deleteStreamController();
1319 break;
1320 case 'error':
1321 assert(this.streamControllers[data.streamId], 'error should have stream controller');
1322 this.streamControllers[data.streamId].controller.error(wrapReason(data.reason));
1323 deleteStreamController();
1324 break;
1325 case 'cancel_complete':
1326 resolveOrReject(this.streamControllers[data.streamId].cancelCall, data.success, wrapReason(data.reason));
1327 deleteStreamController();
1328 break;
1329 case 'cancel':
1330 if (!this.streamSinks[data.streamId]) {
1331 break;
1332 }
1333 resolveCall(this.streamSinks[data.streamId].onCancel, [wrapReason(data.reason)]).then(function () {
1334 sendStreamResponse({
1335 stream: 'cancel_complete',
1336 success: true
1337 });
1338 }, function (reason) {
1339 sendStreamResponse({
1340 stream: 'cancel_complete',
1341 success: false,
1342 reason: reason
1343 });
1344 });
1345 this.streamSinks[data.streamId].sinkCapability.reject(wrapReason(data.reason));
1346 this.streamSinks[data.streamId].isCancelled = true;
1347 delete this.streamSinks[data.streamId];
1348 break;
1349 default:
1350 throw new Error('Unexpected stream case');
1351 }
1352 },
1353 postMessage: function postMessage(message, transfers) {
1354 if (transfers && this.postMessageTransfers) {
1355 this.comObj.postMessage(message, transfers);
1356 } else {
1357 this.comObj.postMessage(message);
1358 }
1359 },
1360 destroy: function destroy() {
1361 this.comObj.removeEventListener('message', this._onComObjOnMessage);
1362 }
1363};
1364exports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX;
1365exports.IDENTITY_MATRIX = IDENTITY_MATRIX;
1366exports.OPS = OPS;
1367exports.VerbosityLevel = VerbosityLevel;
1368exports.UNSUPPORTED_FEATURES = UNSUPPORTED_FEATURES;
1369exports.AnnotationBorderStyleType = AnnotationBorderStyleType;
1370exports.AnnotationFieldFlag = AnnotationFieldFlag;
1371exports.AnnotationFlag = AnnotationFlag;
1372exports.AnnotationType = AnnotationType;
1373exports.FontType = FontType;
1374exports.ImageKind = ImageKind;
1375exports.CMapCompressionType = CMapCompressionType;
1376exports.AbortException = AbortException;
1377exports.InvalidPDFException = InvalidPDFException;
1378exports.MessageHandler = MessageHandler;
1379exports.MissingDataException = MissingDataException;
1380exports.MissingPDFException = MissingPDFException;
1381exports.NativeImageDecoding = NativeImageDecoding;
1382exports.NotImplementedException = NotImplementedException;
1383exports.PageViewport = PageViewport;
1384exports.PasswordException = PasswordException;
1385exports.PasswordResponses = PasswordResponses;
1386exports.StreamType = StreamType;
1387exports.TextRenderingMode = TextRenderingMode;
1388exports.UnexpectedResponseException = UnexpectedResponseException;
1389exports.UnknownErrorException = UnknownErrorException;
1390exports.Util = Util;
1391exports.XRefParseException = XRefParseException;
1392exports.FormatError = FormatError;
1393exports.arrayByteLength = arrayByteLength;
1394exports.arraysToBytes = arraysToBytes;
1395exports.assert = assert;
1396exports.bytesToString = bytesToString;
1397exports.createBlob = createBlob;
1398exports.createPromiseCapability = createPromiseCapability;
1399exports.createObjectURL = createObjectURL;
1400exports.deprecated = deprecated;
1401exports.getInheritableProperty = getInheritableProperty;
1402exports.getLookupTableFactory = getLookupTableFactory;
1403exports.getVerbosityLevel = getVerbosityLevel;
1404exports.info = info;
1405exports.isArrayBuffer = isArrayBuffer;
1406exports.isBool = isBool;
1407exports.isEmptyObj = isEmptyObj;
1408exports.isNum = isNum;
1409exports.isString = isString;
1410exports.isSpace = isSpace;
1411exports.isSameOrigin = isSameOrigin;
1412exports.createValidAbsoluteUrl = createValidAbsoluteUrl;
1413exports.isLittleEndian = isLittleEndian;
1414exports.isEvalSupported = isEvalSupported;
1415exports.log2 = log2;
1416exports.readInt8 = readInt8;
1417exports.readUint16 = readUint16;
1418exports.readUint32 = readUint32;
1419exports.removeNullCharacters = removeNullCharacters;
1420exports.ReadableStream = _streams_polyfill.ReadableStream;
1421exports.setVerbosityLevel = setVerbosityLevel;
1422exports.shadow = shadow;
1423exports.string32 = string32;
1424exports.stringToBytes = stringToBytes;
1425exports.stringToPDFString = stringToPDFString;
1426exports.stringToUTF8String = stringToUTF8String;
1427exports.utf8StringToString = utf8StringToString;
1428exports.warn = warn;
1429exports.unreachable = unreachable;
1430
1431/***/ }),
1432/* 1 */
1433/***/ (function(module, exports, __w_pdfjs_require__) {
1434
1435"use strict";
1436
1437
1438var store = __w_pdfjs_require__(42)('wks');
1439var uid = __w_pdfjs_require__(19);
1440var _Symbol = __w_pdfjs_require__(4).Symbol;
1441var USE_SYMBOL = typeof _Symbol == 'function';
1442var $exports = module.exports = function (name) {
1443 return store[name] || (store[name] = USE_SYMBOL && _Symbol[name] || (USE_SYMBOL ? _Symbol : uid)('Symbol.' + name));
1444};
1445$exports.store = store;
1446
1447/***/ }),
1448/* 2 */
1449/***/ (function(module, exports, __w_pdfjs_require__) {
1450
1451"use strict";
1452
1453
1454var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
1455
1456module.exports = function (it) {
1457 return (typeof it === 'undefined' ? 'undefined' : _typeof(it)) === 'object' ? it !== null : typeof it === 'function';
1458};
1459
1460/***/ }),
1461/* 3 */
1462/***/ (function(module, exports, __w_pdfjs_require__) {
1463
1464"use strict";
1465
1466
1467var global = __w_pdfjs_require__(4);
1468var core = __w_pdfjs_require__(5);
1469var hide = __w_pdfjs_require__(10);
1470var redefine = __w_pdfjs_require__(7);
1471var ctx = __w_pdfjs_require__(9);
1472var PROTOTYPE = 'prototype';
1473var $export = function $export(type, name, source) {
1474 var IS_FORCED = type & $export.F;
1475 var IS_GLOBAL = type & $export.G;
1476 var IS_STATIC = type & $export.S;
1477 var IS_PROTO = type & $export.P;
1478 var IS_BIND = type & $export.B;
1479 var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];
1480 var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});
1481 var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});
1482 var key, own, out, exp;
1483 if (IS_GLOBAL) source = name;
1484 for (key in source) {
1485 own = !IS_FORCED && target && target[key] !== undefined;
1486 out = (own ? target : source)[key];
1487 exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
1488 if (target) redefine(target, key, out, type & $export.U);
1489 if (exports[key] != out) hide(exports, key, exp);
1490 if (IS_PROTO && expProto[key] != out) expProto[key] = out;
1491 }
1492};
1493global.core = core;
1494$export.F = 1;
1495$export.G = 2;
1496$export.S = 4;
1497$export.P = 8;
1498$export.B = 16;
1499$export.W = 32;
1500$export.U = 64;
1501$export.R = 128;
1502module.exports = $export;
1503
1504/***/ }),
1505/* 4 */
1506/***/ (function(module, exports, __w_pdfjs_require__) {
1507
1508"use strict";
1509
1510
1511var global = module.exports = typeof window != 'undefined' && window.Math == Math ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();
1512if (typeof __g == 'number') __g = global;
1513
1514/***/ }),
1515/* 5 */
1516/***/ (function(module, exports, __w_pdfjs_require__) {
1517
1518"use strict";
1519
1520
1521var core = module.exports = { version: '2.5.5' };
1522if (typeof __e == 'number') __e = core;
1523
1524/***/ }),
1525/* 6 */
1526/***/ (function(module, exports, __w_pdfjs_require__) {
1527
1528"use strict";
1529
1530
1531var isObject = __w_pdfjs_require__(2);
1532module.exports = function (it) {
1533 if (!isObject(it)) throw TypeError(it + ' is not an object!');
1534 return it;
1535};
1536
1537/***/ }),
1538/* 7 */
1539/***/ (function(module, exports, __w_pdfjs_require__) {
1540
1541"use strict";
1542
1543
1544var global = __w_pdfjs_require__(4);
1545var hide = __w_pdfjs_require__(10);
1546var has = __w_pdfjs_require__(8);
1547var SRC = __w_pdfjs_require__(19)('src');
1548var TO_STRING = 'toString';
1549var $toString = Function[TO_STRING];
1550var TPL = ('' + $toString).split(TO_STRING);
1551__w_pdfjs_require__(5).inspectSource = function (it) {
1552 return $toString.call(it);
1553};
1554(module.exports = function (O, key, val, safe) {
1555 var isFunction = typeof val == 'function';
1556 if (isFunction) has(val, 'name') || hide(val, 'name', key);
1557 if (O[key] === val) return;
1558 if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));
1559 if (O === global) {
1560 O[key] = val;
1561 } else if (!safe) {
1562 delete O[key];
1563 hide(O, key, val);
1564 } else if (O[key]) {
1565 O[key] = val;
1566 } else {
1567 hide(O, key, val);
1568 }
1569})(Function.prototype, TO_STRING, function toString() {
1570 return typeof this == 'function' && this[SRC] || $toString.call(this);
1571});
1572
1573/***/ }),
1574/* 8 */
1575/***/ (function(module, exports, __w_pdfjs_require__) {
1576
1577"use strict";
1578
1579
1580var hasOwnProperty = {}.hasOwnProperty;
1581module.exports = function (it, key) {
1582 return hasOwnProperty.call(it, key);
1583};
1584
1585/***/ }),
1586/* 9 */
1587/***/ (function(module, exports, __w_pdfjs_require__) {
1588
1589"use strict";
1590
1591
1592var aFunction = __w_pdfjs_require__(15);
1593module.exports = function (fn, that, length) {
1594 aFunction(fn);
1595 if (that === undefined) return fn;
1596 switch (length) {
1597 case 1:
1598 return function (a) {
1599 return fn.call(that, a);
1600 };
1601 case 2:
1602 return function (a, b) {
1603 return fn.call(that, a, b);
1604 };
1605 case 3:
1606 return function (a, b, c) {
1607 return fn.call(that, a, b, c);
1608 };
1609 }
1610 return function () {
1611 return fn.apply(that, arguments);
1612 };
1613};
1614
1615/***/ }),
1616/* 10 */
1617/***/ (function(module, exports, __w_pdfjs_require__) {
1618
1619"use strict";
1620
1621
1622var dP = __w_pdfjs_require__(14);
1623var createDesc = __w_pdfjs_require__(27);
1624module.exports = __w_pdfjs_require__(11) ? function (object, key, value) {
1625 return dP.f(object, key, createDesc(1, value));
1626} : function (object, key, value) {
1627 object[key] = value;
1628 return object;
1629};
1630
1631/***/ }),
1632/* 11 */
1633/***/ (function(module, exports, __w_pdfjs_require__) {
1634
1635"use strict";
1636
1637
1638module.exports = !__w_pdfjs_require__(12)(function () {
1639 return Object.defineProperty({}, 'a', {
1640 get: function get() {
1641 return 7;
1642 }
1643 }).a != 7;
1644});
1645
1646/***/ }),
1647/* 12 */
1648/***/ (function(module, exports, __w_pdfjs_require__) {
1649
1650"use strict";
1651
1652
1653module.exports = function (exec) {
1654 try {
1655 return !!exec();
1656 } catch (e) {
1657 return true;
1658 }
1659};
1660
1661/***/ }),
1662/* 13 */
1663/***/ (function(module, exports, __w_pdfjs_require__) {
1664
1665"use strict";
1666
1667
1668var toString = {}.toString;
1669module.exports = function (it) {
1670 return toString.call(it).slice(8, -1);
1671};
1672
1673/***/ }),
1674/* 14 */
1675/***/ (function(module, exports, __w_pdfjs_require__) {
1676
1677"use strict";
1678
1679
1680var anObject = __w_pdfjs_require__(6);
1681var IE8_DOM_DEFINE = __w_pdfjs_require__(40);
1682var toPrimitive = __w_pdfjs_require__(41);
1683var dP = Object.defineProperty;
1684exports.f = __w_pdfjs_require__(11) ? Object.defineProperty : function defineProperty(O, P, Attributes) {
1685 anObject(O);
1686 P = toPrimitive(P, true);
1687 anObject(Attributes);
1688 if (IE8_DOM_DEFINE) try {
1689 return dP(O, P, Attributes);
1690 } catch (e) {}
1691 if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');
1692 if ('value' in Attributes) O[P] = Attributes.value;
1693 return O;
1694};
1695
1696/***/ }),
1697/* 15 */
1698/***/ (function(module, exports, __w_pdfjs_require__) {
1699
1700"use strict";
1701
1702
1703module.exports = function (it) {
1704 if (typeof it != 'function') throw TypeError(it + ' is not a function!');
1705 return it;
1706};
1707
1708/***/ }),
1709/* 16 */
1710/***/ (function(module, exports, __w_pdfjs_require__) {
1711
1712"use strict";
1713
1714
1715var IObject = __w_pdfjs_require__(28);
1716var defined = __w_pdfjs_require__(20);
1717module.exports = function (it) {
1718 return IObject(defined(it));
1719};
1720
1721/***/ }),
1722/* 17 */
1723/***/ (function(module, exports, __w_pdfjs_require__) {
1724
1725"use strict";
1726
1727
1728module.exports = {};
1729
1730/***/ }),
1731/* 18 */
1732/***/ (function(module, exports, __w_pdfjs_require__) {
1733
1734"use strict";
1735
1736
1737module.exports = typeof window !== 'undefined' && window.Math === Math ? window : typeof global !== 'undefined' && global.Math === Math ? global : typeof self !== 'undefined' && self.Math === Math ? self : {};
1738
1739/***/ }),
1740/* 19 */
1741/***/ (function(module, exports, __w_pdfjs_require__) {
1742
1743"use strict";
1744
1745
1746var id = 0;
1747var px = Math.random();
1748module.exports = function (key) {
1749 return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
1750};
1751
1752/***/ }),
1753/* 20 */
1754/***/ (function(module, exports, __w_pdfjs_require__) {
1755
1756"use strict";
1757
1758
1759module.exports = function (it) {
1760 if (it == undefined) throw TypeError("Can't call method on " + it);
1761 return it;
1762};
1763
1764/***/ }),
1765/* 21 */
1766/***/ (function(module, exports, __w_pdfjs_require__) {
1767
1768"use strict";
1769
1770
1771var $keys = __w_pdfjs_require__(83);
1772var enumBugKeys = __w_pdfjs_require__(48);
1773module.exports = Object.keys || function keys(O) {
1774 return $keys(O, enumBugKeys);
1775};
1776
1777/***/ }),
1778/* 22 */
1779/***/ (function(module, exports, __w_pdfjs_require__) {
1780
1781"use strict";
1782
1783
1784var def = __w_pdfjs_require__(14).f;
1785var has = __w_pdfjs_require__(8);
1786var TAG = __w_pdfjs_require__(1)('toStringTag');
1787module.exports = function (it, tag, stat) {
1788 if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, {
1789 configurable: true,
1790 value: tag
1791 });
1792};
1793
1794/***/ }),
1795/* 23 */
1796/***/ (function(module, exports, __w_pdfjs_require__) {
1797
1798"use strict";
1799
1800
1801var ctx = __w_pdfjs_require__(9);
1802var call = __w_pdfjs_require__(88);
1803var isArrayIter = __w_pdfjs_require__(89);
1804var anObject = __w_pdfjs_require__(6);
1805var toLength = __w_pdfjs_require__(29);
1806var getIterFn = __w_pdfjs_require__(90);
1807var BREAK = {};
1808var RETURN = {};
1809var _exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {
1810 var iterFn = ITERATOR ? function () {
1811 return iterable;
1812 } : getIterFn(iterable);
1813 var f = ctx(fn, that, entries ? 2 : 1);
1814 var index = 0;
1815 var length, step, iterator, result;
1816 if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');
1817 if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {
1818 result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);
1819 if (result === BREAK || result === RETURN) return result;
1820 } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {
1821 result = call(iterator, f, step.value, entries);
1822 if (result === BREAK || result === RETURN) return result;
1823 }
1824};
1825_exports.BREAK = BREAK;
1826_exports.RETURN = RETURN;
1827
1828/***/ }),
1829/* 24 */
1830/***/ (function(module, exports, __w_pdfjs_require__) {
1831
1832"use strict";
1833
1834
1835Object.defineProperty(exports, "__esModule", {
1836 value: true
1837});
1838exports.DummyStatTimer = exports.StatTimer = exports.DOMSVGFactory = exports.DOMCMapReaderFactory = exports.DOMCanvasFactory = exports.DEFAULT_LINK_REL = exports.LinkTarget = exports.getFilenameFromUrl = exports.addLinkAttributes = exports.RenderingCancelledException = undefined;
1839
1840var _createClass = function () { 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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
1841
1842var _util = __w_pdfjs_require__(0);
1843
1844function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
1845
1846var DEFAULT_LINK_REL = 'noopener noreferrer nofollow';
1847var SVG_NS = 'http://www.w3.org/2000/svg';
1848
1849var DOMCanvasFactory = function () {
1850 function DOMCanvasFactory() {
1851 _classCallCheck(this, DOMCanvasFactory);
1852 }
1853
1854 _createClass(DOMCanvasFactory, [{
1855 key: 'create',
1856 value: function create(width, height) {
1857 if (width <= 0 || height <= 0) {
1858 throw new Error('invalid canvas size');
1859 }
1860 var canvas = document.createElement('canvas');
1861 var context = canvas.getContext('2d');
1862 canvas.width = width;
1863 canvas.height = height;
1864 return {
1865 canvas: canvas,
1866 context: context
1867 };
1868 }
1869 }, {
1870 key: 'reset',
1871 value: function reset(canvasAndContext, width, height) {
1872 if (!canvasAndContext.canvas) {
1873 throw new Error('canvas is not specified');
1874 }
1875 if (width <= 0 || height <= 0) {
1876 throw new Error('invalid canvas size');
1877 }
1878 canvasAndContext.canvas.width = width;
1879 canvasAndContext.canvas.height = height;
1880 }
1881 }, {
1882 key: 'destroy',
1883 value: function destroy(canvasAndContext) {
1884 if (!canvasAndContext.canvas) {
1885 throw new Error('canvas is not specified');
1886 }
1887 canvasAndContext.canvas.width = 0;
1888 canvasAndContext.canvas.height = 0;
1889 canvasAndContext.canvas = null;
1890 canvasAndContext.context = null;
1891 }
1892 }]);
1893
1894 return DOMCanvasFactory;
1895}();
1896
1897var DOMCMapReaderFactory = function () {
1898 function DOMCMapReaderFactory(_ref) {
1899 var _ref$baseUrl = _ref.baseUrl,
1900 baseUrl = _ref$baseUrl === undefined ? null : _ref$baseUrl,
1901 _ref$isCompressed = _ref.isCompressed,
1902 isCompressed = _ref$isCompressed === undefined ? false : _ref$isCompressed;
1903
1904 _classCallCheck(this, DOMCMapReaderFactory);
1905
1906 this.baseUrl = baseUrl;
1907 this.isCompressed = isCompressed;
1908 }
1909
1910 _createClass(DOMCMapReaderFactory, [{
1911 key: 'fetch',
1912 value: function fetch(_ref2) {
1913 var _this = this;
1914
1915 var name = _ref2.name;
1916
1917 if (!this.baseUrl) {
1918 return Promise.reject(new Error('The CMap "baseUrl" parameter must be specified, ensure that ' + 'the "cMapUrl" and "cMapPacked" API parameters are provided.'));
1919 }
1920 if (!name) {
1921 return Promise.reject(new Error('CMap name must be specified.'));
1922 }
1923 return new Promise(function (resolve, reject) {
1924 var url = _this.baseUrl + name + (_this.isCompressed ? '.bcmap' : '');
1925 var request = new XMLHttpRequest();
1926 request.open('GET', url, true);
1927 if (_this.isCompressed) {
1928 request.responseType = 'arraybuffer';
1929 }
1930 request.onreadystatechange = function () {
1931 if (request.readyState !== XMLHttpRequest.DONE) {
1932 return;
1933 }
1934 if (request.status === 200 || request.status === 0) {
1935 var data = void 0;
1936 if (_this.isCompressed && request.response) {
1937 data = new Uint8Array(request.response);
1938 } else if (!_this.isCompressed && request.responseText) {
1939 data = (0, _util.stringToBytes)(request.responseText);
1940 }
1941 if (data) {
1942 resolve({
1943 cMapData: data,
1944 compressionType: _this.isCompressed ? _util.CMapCompressionType.BINARY : _util.CMapCompressionType.NONE
1945 });
1946 return;
1947 }
1948 }
1949 reject(new Error('Unable to load ' + (_this.isCompressed ? 'binary ' : '') + 'CMap at: ' + url));
1950 };
1951 request.send(null);
1952 });
1953 }
1954 }]);
1955
1956 return DOMCMapReaderFactory;
1957}();
1958
1959var DOMSVGFactory = function () {
1960 function DOMSVGFactory() {
1961 _classCallCheck(this, DOMSVGFactory);
1962 }
1963
1964 _createClass(DOMSVGFactory, [{
1965 key: 'create',
1966 value: function create(width, height) {
1967 (0, _util.assert)(width > 0 && height > 0, 'Invalid SVG dimensions');
1968 var svg = document.createElementNS(SVG_NS, 'svg:svg');
1969 svg.setAttribute('version', '1.1');
1970 svg.setAttribute('width', width + 'px');
1971 svg.setAttribute('height', height + 'px');
1972 svg.setAttribute('preserveAspectRatio', 'none');
1973 svg.setAttribute('viewBox', '0 0 ' + width + ' ' + height);
1974 return svg;
1975 }
1976 }, {
1977 key: 'createElement',
1978 value: function createElement(type) {
1979 (0, _util.assert)(typeof type === 'string', 'Invalid SVG element type');
1980 return document.createElementNS(SVG_NS, type);
1981 }
1982 }]);
1983
1984 return DOMSVGFactory;
1985}();
1986
1987var RenderingCancelledException = function RenderingCancelledException() {
1988 function RenderingCancelledException(msg, type) {
1989 this.message = msg;
1990 this.type = type;
1991 }
1992 RenderingCancelledException.prototype = new Error();
1993 RenderingCancelledException.prototype.name = 'RenderingCancelledException';
1994 RenderingCancelledException.constructor = RenderingCancelledException;
1995 return RenderingCancelledException;
1996}();
1997var LinkTarget = {
1998 NONE: 0,
1999 SELF: 1,
2000 BLANK: 2,
2001 PARENT: 3,
2002 TOP: 4
2003};
2004var LinkTargetStringMap = ['', '_self', '_blank', '_parent', '_top'];
2005function addLinkAttributes(link) {
2006 var _ref3 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
2007 url = _ref3.url,
2008 target = _ref3.target,
2009 rel = _ref3.rel;
2010
2011 link.href = link.title = url ? (0, _util.removeNullCharacters)(url) : '';
2012 if (url) {
2013 var LinkTargetValues = Object.values(LinkTarget);
2014 var targetIndex = LinkTargetValues.includes(target) ? target : LinkTarget.NONE;
2015 link.target = LinkTargetStringMap[targetIndex];
2016 link.rel = typeof rel === 'string' ? rel : DEFAULT_LINK_REL;
2017 }
2018}
2019function getFilenameFromUrl(url) {
2020 var anchor = url.indexOf('#');
2021 var query = url.indexOf('?');
2022 var end = Math.min(anchor > 0 ? anchor : url.length, query > 0 ? query : url.length);
2023 return url.substring(url.lastIndexOf('/', end) + 1, end);
2024}
2025
2026var StatTimer = function () {
2027 function StatTimer() {
2028 var enable = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
2029
2030 _classCallCheck(this, StatTimer);
2031
2032 this.enabled = !!enable;
2033 this.started = Object.create(null);
2034 this.times = [];
2035 }
2036
2037 _createClass(StatTimer, [{
2038 key: 'time',
2039 value: function time(name) {
2040 if (!this.enabled) {
2041 return;
2042 }
2043 if (name in this.started) {
2044 (0, _util.warn)('Timer is already running for ' + name);
2045 }
2046 this.started[name] = Date.now();
2047 }
2048 }, {
2049 key: 'timeEnd',
2050 value: function timeEnd(name) {
2051 if (!this.enabled) {
2052 return;
2053 }
2054 if (!(name in this.started)) {
2055 (0, _util.warn)('Timer has not been started for ' + name);
2056 }
2057 this.times.push({
2058 'name': name,
2059 'start': this.started[name],
2060 'end': Date.now()
2061 });
2062 delete this.started[name];
2063 }
2064 }, {
2065 key: 'toString',
2066 value: function toString() {
2067 var times = this.times;
2068 var out = '',
2069 longest = 0;
2070 for (var i = 0, ii = times.length; i < ii; ++i) {
2071 var name = times[i]['name'];
2072 if (name.length > longest) {
2073 longest = name.length;
2074 }
2075 }
2076 for (var _i = 0, _ii = times.length; _i < _ii; ++_i) {
2077 var span = times[_i];
2078 var duration = span.end - span.start;
2079 out += span['name'].padEnd(longest) + ' ' + duration + 'ms\n';
2080 }
2081 return out;
2082 }
2083 }]);
2084
2085 return StatTimer;
2086}();
2087
2088var DummyStatTimer = function () {
2089 function DummyStatTimer() {
2090 _classCallCheck(this, DummyStatTimer);
2091
2092 (0, _util.unreachable)('Cannot initialize DummyStatTimer.');
2093 }
2094
2095 _createClass(DummyStatTimer, null, [{
2096 key: 'time',
2097 value: function time(name) {}
2098 }, {
2099 key: 'timeEnd',
2100 value: function timeEnd(name) {}
2101 }, {
2102 key: 'toString',
2103 value: function toString() {
2104 return '';
2105 }
2106 }]);
2107
2108 return DummyStatTimer;
2109}();
2110
2111exports.RenderingCancelledException = RenderingCancelledException;
2112exports.addLinkAttributes = addLinkAttributes;
2113exports.getFilenameFromUrl = getFilenameFromUrl;
2114exports.LinkTarget = LinkTarget;
2115exports.DEFAULT_LINK_REL = DEFAULT_LINK_REL;
2116exports.DOMCanvasFactory = DOMCanvasFactory;
2117exports.DOMCMapReaderFactory = DOMCMapReaderFactory;
2118exports.DOMSVGFactory = DOMSVGFactory;
2119exports.StatTimer = StatTimer;
2120exports.DummyStatTimer = DummyStatTimer;
2121
2122/***/ }),
2123/* 25 */
2124/***/ (function(module, exports, __w_pdfjs_require__) {
2125
2126"use strict";
2127
2128
2129var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
2130
2131module.exports = function isNodeJS() {
2132 return (typeof process === 'undefined' ? 'undefined' : _typeof(process)) === 'object' && process + '' === '[object process]';
2133};
2134
2135/***/ }),
2136/* 26 */
2137/***/ (function(module, exports, __w_pdfjs_require__) {
2138
2139"use strict";
2140
2141
2142var isObject = __w_pdfjs_require__(2);
2143var document = __w_pdfjs_require__(4).document;
2144var is = isObject(document) && isObject(document.createElement);
2145module.exports = function (it) {
2146 return is ? document.createElement(it) : {};
2147};
2148
2149/***/ }),
2150/* 27 */
2151/***/ (function(module, exports, __w_pdfjs_require__) {
2152
2153"use strict";
2154
2155
2156module.exports = function (bitmap, value) {
2157 return {
2158 enumerable: !(bitmap & 1),
2159 configurable: !(bitmap & 2),
2160 writable: !(bitmap & 4),
2161 value: value
2162 };
2163};
2164
2165/***/ }),
2166/* 28 */
2167/***/ (function(module, exports, __w_pdfjs_require__) {
2168
2169"use strict";
2170
2171
2172var cof = __w_pdfjs_require__(13);
2173module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {
2174 return cof(it) == 'String' ? it.split('') : Object(it);
2175};
2176
2177/***/ }),
2178/* 29 */
2179/***/ (function(module, exports, __w_pdfjs_require__) {
2180
2181"use strict";
2182
2183
2184var toInteger = __w_pdfjs_require__(30);
2185var min = Math.min;
2186module.exports = function (it) {
2187 return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0;
2188};
2189
2190/***/ }),
2191/* 30 */
2192/***/ (function(module, exports, __w_pdfjs_require__) {
2193
2194"use strict";
2195
2196
2197var ceil = Math.ceil;
2198var floor = Math.floor;
2199module.exports = function (it) {
2200 return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
2201};
2202
2203/***/ }),
2204/* 31 */
2205/***/ (function(module, exports, __w_pdfjs_require__) {
2206
2207"use strict";
2208
2209
2210var cof = __w_pdfjs_require__(13);
2211var TAG = __w_pdfjs_require__(1)('toStringTag');
2212var ARG = cof(function () {
2213 return arguments;
2214}()) == 'Arguments';
2215var tryGet = function tryGet(it, key) {
2216 try {
2217 return it[key];
2218 } catch (e) {}
2219};
2220module.exports = function (it) {
2221 var O, T, B;
2222 return it === undefined ? 'Undefined' : it === null ? 'Null' : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T : ARG ? cof(O) : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;
2223};
2224
2225/***/ }),
2226/* 32 */
2227/***/ (function(module, exports, __w_pdfjs_require__) {
2228
2229"use strict";
2230
2231
2232var shared = __w_pdfjs_require__(42)('keys');
2233var uid = __w_pdfjs_require__(19);
2234module.exports = function (key) {
2235 return shared[key] || (shared[key] = uid(key));
2236};
2237
2238/***/ }),
2239/* 33 */
2240/***/ (function(module, exports, __w_pdfjs_require__) {
2241
2242"use strict";
2243
2244
2245var defined = __w_pdfjs_require__(20);
2246module.exports = function (it) {
2247 return Object(defined(it));
2248};
2249
2250/***/ }),
2251/* 34 */
2252/***/ (function(module, exports, __w_pdfjs_require__) {
2253
2254"use strict";
2255
2256
2257module.exports = function (it, Constructor, name, forbiddenField) {
2258 if (!(it instanceof Constructor) || forbiddenField !== undefined && forbiddenField in it) {
2259 throw TypeError(name + ': incorrect invocation!');
2260 }
2261 return it;
2262};
2263
2264/***/ }),
2265/* 35 */
2266/***/ (function(module, exports, __w_pdfjs_require__) {
2267
2268"use strict";
2269
2270
2271var aFunction = __w_pdfjs_require__(15);
2272function PromiseCapability(C) {
2273 var resolve, reject;
2274 this.promise = new C(function ($$resolve, $$reject) {
2275 if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');
2276 resolve = $$resolve;
2277 reject = $$reject;
2278 });
2279 this.resolve = aFunction(resolve);
2280 this.reject = aFunction(reject);
2281}
2282module.exports.f = function (C) {
2283 return new PromiseCapability(C);
2284};
2285
2286/***/ }),
2287/* 36 */
2288/***/ (function(module, exports, __w_pdfjs_require__) {
2289
2290"use strict";
2291
2292
2293var redefine = __w_pdfjs_require__(7);
2294module.exports = function (target, src, safe) {
2295 for (var key in src) {
2296 redefine(target, key, src[key], safe);
2297 }return target;
2298};
2299
2300/***/ }),
2301/* 37 */
2302/***/ (function(module, exports, __w_pdfjs_require__) {
2303
2304"use strict";
2305
2306
2307var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
2308
2309var META = __w_pdfjs_require__(19)('meta');
2310var isObject = __w_pdfjs_require__(2);
2311var has = __w_pdfjs_require__(8);
2312var setDesc = __w_pdfjs_require__(14).f;
2313var id = 0;
2314var isExtensible = Object.isExtensible || function () {
2315 return true;
2316};
2317var FREEZE = !__w_pdfjs_require__(12)(function () {
2318 return isExtensible(Object.preventExtensions({}));
2319});
2320var setMeta = function setMeta(it) {
2321 setDesc(it, META, {
2322 value: {
2323 i: 'O' + ++id,
2324 w: {}
2325 }
2326 });
2327};
2328var fastKey = function fastKey(it, create) {
2329 if (!isObject(it)) return (typeof it === 'undefined' ? 'undefined' : _typeof(it)) == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
2330 if (!has(it, META)) {
2331 if (!isExtensible(it)) return 'F';
2332 if (!create) return 'E';
2333 setMeta(it);
2334 }
2335 return it[META].i;
2336};
2337var getWeak = function getWeak(it, create) {
2338 if (!has(it, META)) {
2339 if (!isExtensible(it)) return true;
2340 if (!create) return false;
2341 setMeta(it);
2342 }
2343 return it[META].w;
2344};
2345var onFreeze = function onFreeze(it) {
2346 if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);
2347 return it;
2348};
2349var meta = module.exports = {
2350 KEY: META,
2351 NEED: false,
2352 fastKey: fastKey,
2353 getWeak: getWeak,
2354 onFreeze: onFreeze
2355};
2356
2357/***/ }),
2358/* 38 */
2359/***/ (function(module, exports, __w_pdfjs_require__) {
2360
2361"use strict";
2362
2363
2364exports.f = {}.propertyIsEnumerable;
2365
2366/***/ }),
2367/* 39 */
2368/***/ (function(module, exports, __w_pdfjs_require__) {
2369
2370"use strict";
2371
2372
2373Object.defineProperty(exports, "__esModule", {
2374 value: true
2375});
2376exports.validateResponseStatus = exports.validateRangeRequestCapabilities = exports.extractFilenameFromHeader = exports.createResponseStatusError = undefined;
2377
2378var _util = __w_pdfjs_require__(0);
2379
2380var _content_disposition = __w_pdfjs_require__(129);
2381
2382function validateRangeRequestCapabilities(_ref) {
2383 var getResponseHeader = _ref.getResponseHeader,
2384 isHttp = _ref.isHttp,
2385 rangeChunkSize = _ref.rangeChunkSize,
2386 disableRange = _ref.disableRange;
2387
2388 (0, _util.assert)(rangeChunkSize > 0, 'Range chunk size must be larger than zero');
2389 var returnValues = {
2390 allowRangeRequests: false,
2391 suggestedLength: undefined
2392 };
2393 if (disableRange || !isHttp) {
2394 return returnValues;
2395 }
2396 if (getResponseHeader('Accept-Ranges') !== 'bytes') {
2397 return returnValues;
2398 }
2399 var contentEncoding = getResponseHeader('Content-Encoding') || 'identity';
2400 if (contentEncoding !== 'identity') {
2401 return returnValues;
2402 }
2403 var length = parseInt(getResponseHeader('Content-Length'), 10);
2404 if (!Number.isInteger(length)) {
2405 return returnValues;
2406 }
2407 returnValues.suggestedLength = length;
2408 if (length <= 2 * rangeChunkSize) {
2409 return returnValues;
2410 }
2411 returnValues.allowRangeRequests = true;
2412 return returnValues;
2413}
2414function extractFilenameFromHeader(getResponseHeader) {
2415 var contentDisposition = getResponseHeader('Content-Disposition');
2416 if (contentDisposition) {
2417 var filename = (0, _content_disposition.getFilenameFromContentDispositionHeader)(contentDisposition);
2418 if (/\.pdf$/i.test(filename)) {
2419 return filename;
2420 }
2421 }
2422 return null;
2423}
2424function createResponseStatusError(status, url) {
2425 if (status === 404 || status === 0 && /^file:/.test(url)) {
2426 return new _util.MissingPDFException('Missing PDF "' + url + '".');
2427 }
2428 return new _util.UnexpectedResponseException('Unexpected server response (' + status + ') while retrieving PDF "' + url + '".', status);
2429}
2430function validateResponseStatus(status) {
2431 return status === 200 || status === 206;
2432}
2433exports.createResponseStatusError = createResponseStatusError;
2434exports.extractFilenameFromHeader = extractFilenameFromHeader;
2435exports.validateRangeRequestCapabilities = validateRangeRequestCapabilities;
2436exports.validateResponseStatus = validateResponseStatus;
2437
2438/***/ }),
2439/* 40 */
2440/***/ (function(module, exports, __w_pdfjs_require__) {
2441
2442"use strict";
2443
2444
2445module.exports = !__w_pdfjs_require__(11) && !__w_pdfjs_require__(12)(function () {
2446 return Object.defineProperty(__w_pdfjs_require__(26)('div'), 'a', {
2447 get: function get() {
2448 return 7;
2449 }
2450 }).a != 7;
2451});
2452
2453/***/ }),
2454/* 41 */
2455/***/ (function(module, exports, __w_pdfjs_require__) {
2456
2457"use strict";
2458
2459
2460var isObject = __w_pdfjs_require__(2);
2461module.exports = function (it, S) {
2462 if (!isObject(it)) return it;
2463 var fn, val;
2464 if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
2465 if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;
2466 if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
2467 throw TypeError("Can't convert object to primitive value");
2468};
2469
2470/***/ }),
2471/* 42 */
2472/***/ (function(module, exports, __w_pdfjs_require__) {
2473
2474"use strict";
2475
2476
2477var global = __w_pdfjs_require__(4);
2478var SHARED = '__core-js_shared__';
2479var store = global[SHARED] || (global[SHARED] = {});
2480module.exports = function (key) {
2481 return store[key] || (store[key] = {});
2482};
2483
2484/***/ }),
2485/* 43 */
2486/***/ (function(module, exports, __w_pdfjs_require__) {
2487
2488"use strict";
2489
2490
2491var toIObject = __w_pdfjs_require__(16);
2492var toLength = __w_pdfjs_require__(29);
2493var toAbsoluteIndex = __w_pdfjs_require__(69);
2494module.exports = function (IS_INCLUDES) {
2495 return function ($this, el, fromIndex) {
2496 var O = toIObject($this);
2497 var length = toLength(O.length);
2498 var index = toAbsoluteIndex(fromIndex, length);
2499 var value;
2500 if (IS_INCLUDES && el != el) while (length > index) {
2501 value = O[index++];
2502 if (value != value) return true;
2503 } else for (; length > index; index++) {
2504 if (IS_INCLUDES || index in O) {
2505 if (O[index] === el) return IS_INCLUDES || index || 0;
2506 }
2507 }return !IS_INCLUDES && -1;
2508 };
2509};
2510
2511/***/ }),
2512/* 44 */
2513/***/ (function(module, exports, __w_pdfjs_require__) {
2514
2515"use strict";
2516
2517
2518var UNSCOPABLES = __w_pdfjs_require__(1)('unscopables');
2519var ArrayProto = Array.prototype;
2520if (ArrayProto[UNSCOPABLES] == undefined) __w_pdfjs_require__(10)(ArrayProto, UNSCOPABLES, {});
2521module.exports = function (key) {
2522 ArrayProto[UNSCOPABLES][key] = true;
2523};
2524
2525/***/ }),
2526/* 45 */
2527/***/ (function(module, exports, __w_pdfjs_require__) {
2528
2529"use strict";
2530
2531
2532var classof = __w_pdfjs_require__(31);
2533var test = {};
2534test[__w_pdfjs_require__(1)('toStringTag')] = 'z';
2535if (test + '' != '[object z]') {
2536 __w_pdfjs_require__(7)(Object.prototype, 'toString', function toString() {
2537 return '[object ' + classof(this) + ']';
2538 }, true);
2539}
2540
2541/***/ }),
2542/* 46 */
2543/***/ (function(module, exports, __w_pdfjs_require__) {
2544
2545"use strict";
2546
2547
2548var LIBRARY = __w_pdfjs_require__(47);
2549var $export = __w_pdfjs_require__(3);
2550var redefine = __w_pdfjs_require__(7);
2551var hide = __w_pdfjs_require__(10);
2552var Iterators = __w_pdfjs_require__(17);
2553var $iterCreate = __w_pdfjs_require__(80);
2554var setToStringTag = __w_pdfjs_require__(22);
2555var getPrototypeOf = __w_pdfjs_require__(84);
2556var ITERATOR = __w_pdfjs_require__(1)('iterator');
2557var BUGGY = !([].keys && 'next' in [].keys());
2558var FF_ITERATOR = '@@iterator';
2559var KEYS = 'keys';
2560var VALUES = 'values';
2561var returnThis = function returnThis() {
2562 return this;
2563};
2564module.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {
2565 $iterCreate(Constructor, NAME, next);
2566 var getMethod = function getMethod(kind) {
2567 if (!BUGGY && kind in proto) return proto[kind];
2568 switch (kind) {
2569 case KEYS:
2570 return function keys() {
2571 return new Constructor(this, kind);
2572 };
2573 case VALUES:
2574 return function values() {
2575 return new Constructor(this, kind);
2576 };
2577 }
2578 return function entries() {
2579 return new Constructor(this, kind);
2580 };
2581 };
2582 var TAG = NAME + ' Iterator';
2583 var DEF_VALUES = DEFAULT == VALUES;
2584 var VALUES_BUG = false;
2585 var proto = Base.prototype;
2586 var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];
2587 var $default = $native || getMethod(DEFAULT);
2588 var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;
2589 var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;
2590 var methods, key, IteratorPrototype;
2591 if ($anyNative) {
2592 IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));
2593 if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {
2594 setToStringTag(IteratorPrototype, TAG, true);
2595 if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);
2596 }
2597 }
2598 if (DEF_VALUES && $native && $native.name !== VALUES) {
2599 VALUES_BUG = true;
2600 $default = function values() {
2601 return $native.call(this);
2602 };
2603 }
2604 if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {
2605 hide(proto, ITERATOR, $default);
2606 }
2607 Iterators[NAME] = $default;
2608 Iterators[TAG] = returnThis;
2609 if (DEFAULT) {
2610 methods = {
2611 values: DEF_VALUES ? $default : getMethod(VALUES),
2612 keys: IS_SET ? $default : getMethod(KEYS),
2613 entries: $entries
2614 };
2615 if (FORCED) for (key in methods) {
2616 if (!(key in proto)) redefine(proto, key, methods[key]);
2617 } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);
2618 }
2619 return methods;
2620};
2621
2622/***/ }),
2623/* 47 */
2624/***/ (function(module, exports, __w_pdfjs_require__) {
2625
2626"use strict";
2627
2628
2629module.exports = false;
2630
2631/***/ }),
2632/* 48 */
2633/***/ (function(module, exports, __w_pdfjs_require__) {
2634
2635"use strict";
2636
2637
2638module.exports = 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'.split(',');
2639
2640/***/ }),
2641/* 49 */
2642/***/ (function(module, exports, __w_pdfjs_require__) {
2643
2644"use strict";
2645
2646
2647var document = __w_pdfjs_require__(4).document;
2648module.exports = document && document.documentElement;
2649
2650/***/ }),
2651/* 50 */
2652/***/ (function(module, exports, __w_pdfjs_require__) {
2653
2654"use strict";
2655
2656
2657var $iterators = __w_pdfjs_require__(85);
2658var getKeys = __w_pdfjs_require__(21);
2659var redefine = __w_pdfjs_require__(7);
2660var global = __w_pdfjs_require__(4);
2661var hide = __w_pdfjs_require__(10);
2662var Iterators = __w_pdfjs_require__(17);
2663var wks = __w_pdfjs_require__(1);
2664var ITERATOR = wks('iterator');
2665var TO_STRING_TAG = wks('toStringTag');
2666var ArrayValues = Iterators.Array;
2667var DOMIterables = {
2668 CSSRuleList: true,
2669 CSSStyleDeclaration: false,
2670 CSSValueList: false,
2671 ClientRectList: false,
2672 DOMRectList: false,
2673 DOMStringList: false,
2674 DOMTokenList: true,
2675 DataTransferItemList: false,
2676 FileList: false,
2677 HTMLAllCollection: false,
2678 HTMLCollection: false,
2679 HTMLFormElement: false,
2680 HTMLSelectElement: false,
2681 MediaList: true,
2682 MimeTypeArray: false,
2683 NamedNodeMap: false,
2684 NodeList: true,
2685 PaintRequestList: false,
2686 Plugin: false,
2687 PluginArray: false,
2688 SVGLengthList: false,
2689 SVGNumberList: false,
2690 SVGPathSegList: false,
2691 SVGPointList: false,
2692 SVGStringList: false,
2693 SVGTransformList: false,
2694 SourceBufferList: false,
2695 StyleSheetList: true,
2696 TextTrackCueList: false,
2697 TextTrackList: false,
2698 TouchList: false
2699};
2700for (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {
2701 var NAME = collections[i];
2702 var explicit = DOMIterables[NAME];
2703 var Collection = global[NAME];
2704 var proto = Collection && Collection.prototype;
2705 var key;
2706 if (proto) {
2707 if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);
2708 if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);
2709 Iterators[NAME] = ArrayValues;
2710 if (explicit) for (key in $iterators) {
2711 if (!proto[key]) redefine(proto, key, $iterators[key], true);
2712 }
2713 }
2714}
2715
2716/***/ }),
2717/* 51 */
2718/***/ (function(module, exports, __w_pdfjs_require__) {
2719
2720"use strict";
2721
2722
2723var anObject = __w_pdfjs_require__(6);
2724var aFunction = __w_pdfjs_require__(15);
2725var SPECIES = __w_pdfjs_require__(1)('species');
2726module.exports = function (O, D) {
2727 var C = anObject(O).constructor;
2728 var S;
2729 return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);
2730};
2731
2732/***/ }),
2733/* 52 */
2734/***/ (function(module, exports, __w_pdfjs_require__) {
2735
2736"use strict";
2737
2738
2739var ctx = __w_pdfjs_require__(9);
2740var invoke = __w_pdfjs_require__(91);
2741var html = __w_pdfjs_require__(49);
2742var cel = __w_pdfjs_require__(26);
2743var global = __w_pdfjs_require__(4);
2744var process = global.process;
2745var setTask = global.setImmediate;
2746var clearTask = global.clearImmediate;
2747var MessageChannel = global.MessageChannel;
2748var Dispatch = global.Dispatch;
2749var counter = 0;
2750var queue = {};
2751var ONREADYSTATECHANGE = 'onreadystatechange';
2752var defer, channel, port;
2753var run = function run() {
2754 var id = +this;
2755 if (queue.hasOwnProperty(id)) {
2756 var fn = queue[id];
2757 delete queue[id];
2758 fn();
2759 }
2760};
2761var listener = function listener(event) {
2762 run.call(event.data);
2763};
2764if (!setTask || !clearTask) {
2765 setTask = function setImmediate(fn) {
2766 var args = [];
2767 var i = 1;
2768 while (arguments.length > i) {
2769 args.push(arguments[i++]);
2770 }queue[++counter] = function () {
2771 invoke(typeof fn == 'function' ? fn : Function(fn), args);
2772 };
2773 defer(counter);
2774 return counter;
2775 };
2776 clearTask = function clearImmediate(id) {
2777 delete queue[id];
2778 };
2779 if (__w_pdfjs_require__(13)(process) == 'process') {
2780 defer = function defer(id) {
2781 process.nextTick(ctx(run, id, 1));
2782 };
2783 } else if (Dispatch && Dispatch.now) {
2784 defer = function defer(id) {
2785 Dispatch.now(ctx(run, id, 1));
2786 };
2787 } else if (MessageChannel) {
2788 channel = new MessageChannel();
2789 port = channel.port2;
2790 channel.port1.onmessage = listener;
2791 defer = ctx(port.postMessage, port, 1);
2792 } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {
2793 defer = function defer(id) {
2794 global.postMessage(id + '', '*');
2795 };
2796 global.addEventListener('message', listener, false);
2797 } else if (ONREADYSTATECHANGE in cel('script')) {
2798 defer = function defer(id) {
2799 html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {
2800 html.removeChild(this);
2801 run.call(id);
2802 };
2803 };
2804 } else {
2805 defer = function defer(id) {
2806 setTimeout(ctx(run, id, 1), 0);
2807 };
2808 }
2809}
2810module.exports = {
2811 set: setTask,
2812 clear: clearTask
2813};
2814
2815/***/ }),
2816/* 53 */
2817/***/ (function(module, exports, __w_pdfjs_require__) {
2818
2819"use strict";
2820
2821
2822module.exports = function (exec) {
2823 try {
2824 return {
2825 e: false,
2826 v: exec()
2827 };
2828 } catch (e) {
2829 return {
2830 e: true,
2831 v: e
2832 };
2833 }
2834};
2835
2836/***/ }),
2837/* 54 */
2838/***/ (function(module, exports, __w_pdfjs_require__) {
2839
2840"use strict";
2841
2842
2843var anObject = __w_pdfjs_require__(6);
2844var isObject = __w_pdfjs_require__(2);
2845var newPromiseCapability = __w_pdfjs_require__(35);
2846module.exports = function (C, x) {
2847 anObject(C);
2848 if (isObject(x) && x.constructor === C) return x;
2849 var promiseCapability = newPromiseCapability.f(C);
2850 var resolve = promiseCapability.resolve;
2851 resolve(x);
2852 return promiseCapability.promise;
2853};
2854
2855/***/ }),
2856/* 55 */
2857/***/ (function(module, exports, __w_pdfjs_require__) {
2858
2859"use strict";
2860
2861
2862var ITERATOR = __w_pdfjs_require__(1)('iterator');
2863var SAFE_CLOSING = false;
2864try {
2865 var riter = [7][ITERATOR]();
2866 riter['return'] = function () {
2867 SAFE_CLOSING = true;
2868 };
2869 Array.from(riter, function () {
2870 throw 2;
2871 });
2872} catch (e) {}
2873module.exports = function (exec, skipClosing) {
2874 if (!skipClosing && !SAFE_CLOSING) return false;
2875 var safe = false;
2876 try {
2877 var arr = [7];
2878 var iter = arr[ITERATOR]();
2879 iter.next = function () {
2880 return { done: safe = true };
2881 };
2882 arr[ITERATOR] = function () {
2883 return iter;
2884 };
2885 exec(arr);
2886 } catch (e) {}
2887 return safe;
2888};
2889
2890/***/ }),
2891/* 56 */
2892/***/ (function(module, exports, __w_pdfjs_require__) {
2893
2894"use strict";
2895
2896
2897var ctx = __w_pdfjs_require__(9);
2898var IObject = __w_pdfjs_require__(28);
2899var toObject = __w_pdfjs_require__(33);
2900var toLength = __w_pdfjs_require__(29);
2901var asc = __w_pdfjs_require__(98);
2902module.exports = function (TYPE, $create) {
2903 var IS_MAP = TYPE == 1;
2904 var IS_FILTER = TYPE == 2;
2905 var IS_SOME = TYPE == 3;
2906 var IS_EVERY = TYPE == 4;
2907 var IS_FIND_INDEX = TYPE == 6;
2908 var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;
2909 var create = $create || asc;
2910 return function ($this, callbackfn, that) {
2911 var O = toObject($this);
2912 var self = IObject(O);
2913 var f = ctx(callbackfn, that, 3);
2914 var length = toLength(self.length);
2915 var index = 0;
2916 var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;
2917 var val, res;
2918 for (; length > index; index++) {
2919 if (NO_HOLES || index in self) {
2920 val = self[index];
2921 res = f(val, index, O);
2922 if (TYPE) {
2923 if (IS_MAP) result[index] = res;else if (res) switch (TYPE) {
2924 case 3:
2925 return true;
2926 case 5:
2927 return val;
2928 case 6:
2929 return index;
2930 case 2:
2931 result.push(val);
2932 } else if (IS_EVERY) return false;
2933 }
2934 }
2935 }return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;
2936 };
2937};
2938
2939/***/ }),
2940/* 57 */
2941/***/ (function(module, exports, __w_pdfjs_require__) {
2942
2943"use strict";
2944
2945
2946var isObject = __w_pdfjs_require__(2);
2947module.exports = function (it, TYPE) {
2948 if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');
2949 return it;
2950};
2951
2952/***/ }),
2953/* 58 */
2954/***/ (function(module, exports, __w_pdfjs_require__) {
2955
2956"use strict";
2957
2958
2959Object.defineProperty(exports, "__esModule", {
2960 value: true
2961});
2962var compatibilityParams = Object.create(null);
2963{
2964 var userAgent = typeof navigator !== 'undefined' && navigator.userAgent || '';
2965 var isIE = /Trident/.test(userAgent);
2966 var isIOS = /\b(iPad|iPhone|iPod)(?=;)/.test(userAgent);
2967 var isIOSChrome = /CriOS/.test(userAgent);
2968 var isSafari = /Safari\//.test(userAgent) && !/(Chrome\/|Android\s)/.test(userAgent);
2969 (function checkOnBlobSupport() {
2970 if (isIE || isIOSChrome) {
2971 compatibilityParams.disableCreateObjectURL = true;
2972 }
2973 })();
2974 (function checkRangeRequests() {
2975 if (isSafari || isIOS) {
2976 compatibilityParams.disableRange = true;
2977 compatibilityParams.disableStream = true;
2978 }
2979 })();
2980}
2981var apiCompatibilityParams = Object.freeze(compatibilityParams);
2982exports.apiCompatibilityParams = apiCompatibilityParams;
2983
2984/***/ }),
2985/* 59 */
2986/***/ (function(module, exports, __w_pdfjs_require__) {
2987
2988"use strict";
2989
2990
2991Object.defineProperty(exports, "__esModule", {
2992 value: true
2993});
2994var GlobalWorkerOptions = Object.create(null);
2995GlobalWorkerOptions.workerPort = GlobalWorkerOptions.workerPort === undefined ? null : GlobalWorkerOptions.workerPort;
2996GlobalWorkerOptions.workerSrc = GlobalWorkerOptions.workerSrc === undefined ? '' : GlobalWorkerOptions.workerSrc;
2997exports.GlobalWorkerOptions = GlobalWorkerOptions;
2998
2999/***/ }),
3000/* 60 */
3001/***/ (function(module, exports, __w_pdfjs_require__) {
3002
3003"use strict";
3004
3005
3006var pdfjsVersion = '2.0.489';
3007var pdfjsBuild = '7d7bc80e';
3008var pdfjsSharedUtil = __w_pdfjs_require__(0);
3009var pdfjsDisplayAPI = __w_pdfjs_require__(117);
3010var pdfjsDisplayTextLayer = __w_pdfjs_require__(125);
3011var pdfjsDisplayAnnotationLayer = __w_pdfjs_require__(126);
3012var pdfjsDisplayDOMUtils = __w_pdfjs_require__(24);
3013var pdfjsDisplaySVG = __w_pdfjs_require__(127);
3014var pdfjsDisplayWorkerOptions = __w_pdfjs_require__(59);
3015var pdfjsDisplayAPICompatibility = __w_pdfjs_require__(58);
3016{
3017 var isNodeJS = __w_pdfjs_require__(25);
3018 if (isNodeJS()) {
3019 var PDFNodeStream = __w_pdfjs_require__(128).PDFNodeStream;
3020 pdfjsDisplayAPI.setPDFNetworkStreamFactory(function (params) {
3021 return new PDFNodeStream(params);
3022 });
3023 } else if (typeof Response !== 'undefined' && 'body' in Response.prototype && typeof ReadableStream !== 'undefined') {
3024 var PDFFetchStream = __w_pdfjs_require__(130).PDFFetchStream;
3025 pdfjsDisplayAPI.setPDFNetworkStreamFactory(function (params) {
3026 return new PDFFetchStream(params);
3027 });
3028 } else {
3029 var PDFNetworkStream = __w_pdfjs_require__(131).PDFNetworkStream;
3030 pdfjsDisplayAPI.setPDFNetworkStreamFactory(function (params) {
3031 return new PDFNetworkStream(params);
3032 });
3033 }
3034}
3035exports.build = pdfjsDisplayAPI.build;
3036exports.version = pdfjsDisplayAPI.version;
3037exports.getDocument = pdfjsDisplayAPI.getDocument;
3038exports.LoopbackPort = pdfjsDisplayAPI.LoopbackPort;
3039exports.PDFDataRangeTransport = pdfjsDisplayAPI.PDFDataRangeTransport;
3040exports.PDFWorker = pdfjsDisplayAPI.PDFWorker;
3041exports.renderTextLayer = pdfjsDisplayTextLayer.renderTextLayer;
3042exports.AnnotationLayer = pdfjsDisplayAnnotationLayer.AnnotationLayer;
3043exports.createPromiseCapability = pdfjsSharedUtil.createPromiseCapability;
3044exports.PasswordResponses = pdfjsSharedUtil.PasswordResponses;
3045exports.InvalidPDFException = pdfjsSharedUtil.InvalidPDFException;
3046exports.MissingPDFException = pdfjsSharedUtil.MissingPDFException;
3047exports.SVGGraphics = pdfjsDisplaySVG.SVGGraphics;
3048exports.NativeImageDecoding = pdfjsSharedUtil.NativeImageDecoding;
3049exports.UnexpectedResponseException = pdfjsSharedUtil.UnexpectedResponseException;
3050exports.OPS = pdfjsSharedUtil.OPS;
3051exports.VerbosityLevel = pdfjsSharedUtil.VerbosityLevel;
3052exports.UNSUPPORTED_FEATURES = pdfjsSharedUtil.UNSUPPORTED_FEATURES;
3053exports.createValidAbsoluteUrl = pdfjsSharedUtil.createValidAbsoluteUrl;
3054exports.createObjectURL = pdfjsSharedUtil.createObjectURL;
3055exports.removeNullCharacters = pdfjsSharedUtil.removeNullCharacters;
3056exports.shadow = pdfjsSharedUtil.shadow;
3057exports.createBlob = pdfjsSharedUtil.createBlob;
3058exports.Util = pdfjsSharedUtil.Util;
3059exports.RenderingCancelledException = pdfjsDisplayDOMUtils.RenderingCancelledException;
3060exports.getFilenameFromUrl = pdfjsDisplayDOMUtils.getFilenameFromUrl;
3061exports.LinkTarget = pdfjsDisplayDOMUtils.LinkTarget;
3062exports.addLinkAttributes = pdfjsDisplayDOMUtils.addLinkAttributes;
3063exports.GlobalWorkerOptions = pdfjsDisplayWorkerOptions.GlobalWorkerOptions;
3064exports.apiCompatibilityParams = pdfjsDisplayAPICompatibility.apiCompatibilityParams;
3065
3066/***/ }),
3067/* 61 */
3068/***/ (function(module, exports, __w_pdfjs_require__) {
3069
3070"use strict";
3071
3072
3073var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
3074
3075var globalScope = __w_pdfjs_require__(18);
3076if (!globalScope._pdfjsCompatibilityChecked) {
3077 globalScope._pdfjsCompatibilityChecked = true;
3078 var isNodeJS = __w_pdfjs_require__(25);
3079 var hasDOM = (typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && (typeof document === 'undefined' ? 'undefined' : _typeof(document)) === 'object';
3080 (function checkNodeBtoa() {
3081 if (globalScope.btoa || !isNodeJS()) {
3082 return;
3083 }
3084 globalScope.btoa = function (chars) {
3085 return Buffer.from(chars, 'binary').toString('base64');
3086 };
3087 })();
3088 (function checkNodeAtob() {
3089 if (globalScope.atob || !isNodeJS()) {
3090 return;
3091 }
3092 globalScope.atob = function (input) {
3093 return Buffer.from(input, 'base64').toString('binary');
3094 };
3095 })();
3096 (function checkCurrentScript() {
3097 if (!hasDOM) {
3098 return;
3099 }
3100 if ('currentScript' in document) {
3101 return;
3102 }
3103 Object.defineProperty(document, 'currentScript', {
3104 get: function get() {
3105 var scripts = document.getElementsByTagName('script');
3106 return scripts[scripts.length - 1];
3107 },
3108
3109 enumerable: true,
3110 configurable: true
3111 });
3112 })();
3113 (function checkChildNodeRemove() {
3114 if (!hasDOM) {
3115 return;
3116 }
3117 if (typeof Element.prototype.remove !== 'undefined') {
3118 return;
3119 }
3120 Element.prototype.remove = function () {
3121 if (this.parentNode) {
3122 this.parentNode.removeChild(this);
3123 }
3124 };
3125 })();
3126 (function checkStringIncludes() {
3127 if (String.prototype.includes) {
3128 return;
3129 }
3130 __w_pdfjs_require__(62);
3131 })();
3132 (function checkArrayIncludes() {
3133 if (Array.prototype.includes) {
3134 return;
3135 }
3136 __w_pdfjs_require__(67);
3137 })();
3138 (function checkMathLog2() {
3139 if (Math.log2) {
3140 return;
3141 }
3142 Math.log2 = __w_pdfjs_require__(70);
3143 })();
3144 (function checkNumberIsNaN() {
3145 if (Number.isNaN) {
3146 return;
3147 }
3148 Number.isNaN = __w_pdfjs_require__(72);
3149 })();
3150 (function checkNumberIsInteger() {
3151 if (Number.isInteger) {
3152 return;
3153 }
3154 Number.isInteger = __w_pdfjs_require__(74);
3155 })();
3156 (function checkPromise() {
3157 if (globalScope.Promise) {
3158 return;
3159 }
3160 globalScope.Promise = __w_pdfjs_require__(77);
3161 })();
3162 (function checkWeakMap() {
3163 if (globalScope.WeakMap) {
3164 return;
3165 }
3166 globalScope.WeakMap = __w_pdfjs_require__(96);
3167 })();
3168 (function checkURLConstructor() {
3169 var hasWorkingUrl = false;
3170 try {
3171 if (typeof URL === 'function' && _typeof(URL.prototype) === 'object' && 'origin' in URL.prototype) {
3172 var u = new URL('b', 'http://a');
3173 u.pathname = 'c%20d';
3174 hasWorkingUrl = u.href === 'http://a/c%20d';
3175 }
3176 } catch (e) {}
3177 if (hasWorkingUrl) {
3178 return;
3179 }
3180 var relative = Object.create(null);
3181 relative['ftp'] = 21;
3182 relative['file'] = 0;
3183 relative['gopher'] = 70;
3184 relative['http'] = 80;
3185 relative['https'] = 443;
3186 relative['ws'] = 80;
3187 relative['wss'] = 443;
3188 var relativePathDotMapping = Object.create(null);
3189 relativePathDotMapping['%2e'] = '.';
3190 relativePathDotMapping['.%2e'] = '..';
3191 relativePathDotMapping['%2e.'] = '..';
3192 relativePathDotMapping['%2e%2e'] = '..';
3193 function isRelativeScheme(scheme) {
3194 return relative[scheme] !== undefined;
3195 }
3196 function invalid() {
3197 clear.call(this);
3198 this._isInvalid = true;
3199 }
3200 function IDNAToASCII(h) {
3201 if (h === '') {
3202 invalid.call(this);
3203 }
3204 return h.toLowerCase();
3205 }
3206 function percentEscape(c) {
3207 var unicode = c.charCodeAt(0);
3208 if (unicode > 0x20 && unicode < 0x7F && [0x22, 0x23, 0x3C, 0x3E, 0x3F, 0x60].indexOf(unicode) === -1) {
3209 return c;
3210 }
3211 return encodeURIComponent(c);
3212 }
3213 function percentEscapeQuery(c) {
3214 var unicode = c.charCodeAt(0);
3215 if (unicode > 0x20 && unicode < 0x7F && [0x22, 0x23, 0x3C, 0x3E, 0x60].indexOf(unicode) === -1) {
3216 return c;
3217 }
3218 return encodeURIComponent(c);
3219 }
3220 var EOF,
3221 ALPHA = /[a-zA-Z]/,
3222 ALPHANUMERIC = /[a-zA-Z0-9\+\-\.]/;
3223 function parse(input, stateOverride, base) {
3224 function err(message) {
3225 errors.push(message);
3226 }
3227 var state = stateOverride || 'scheme start',
3228 cursor = 0,
3229 buffer = '',
3230 seenAt = false,
3231 seenBracket = false,
3232 errors = [];
3233 loop: while ((input[cursor - 1] !== EOF || cursor === 0) && !this._isInvalid) {
3234 var c = input[cursor];
3235 switch (state) {
3236 case 'scheme start':
3237 if (c && ALPHA.test(c)) {
3238 buffer += c.toLowerCase();
3239 state = 'scheme';
3240 } else if (!stateOverride) {
3241 buffer = '';
3242 state = 'no scheme';
3243 continue;
3244 } else {
3245 err('Invalid scheme.');
3246 break loop;
3247 }
3248 break;
3249 case 'scheme':
3250 if (c && ALPHANUMERIC.test(c)) {
3251 buffer += c.toLowerCase();
3252 } else if (c === ':') {
3253 this._scheme = buffer;
3254 buffer = '';
3255 if (stateOverride) {
3256 break loop;
3257 }
3258 if (isRelativeScheme(this._scheme)) {
3259 this._isRelative = true;
3260 }
3261 if (this._scheme === 'file') {
3262 state = 'relative';
3263 } else if (this._isRelative && base && base._scheme === this._scheme) {
3264 state = 'relative or authority';
3265 } else if (this._isRelative) {
3266 state = 'authority first slash';
3267 } else {
3268 state = 'scheme data';
3269 }
3270 } else if (!stateOverride) {
3271 buffer = '';
3272 cursor = 0;
3273 state = 'no scheme';
3274 continue;
3275 } else if (c === EOF) {
3276 break loop;
3277 } else {
3278 err('Code point not allowed in scheme: ' + c);
3279 break loop;
3280 }
3281 break;
3282 case 'scheme data':
3283 if (c === '?') {
3284 this._query = '?';
3285 state = 'query';
3286 } else if (c === '#') {
3287 this._fragment = '#';
3288 state = 'fragment';
3289 } else {
3290 if (c !== EOF && c !== '\t' && c !== '\n' && c !== '\r') {
3291 this._schemeData += percentEscape(c);
3292 }
3293 }
3294 break;
3295 case 'no scheme':
3296 if (!base || !isRelativeScheme(base._scheme)) {
3297 err('Missing scheme.');
3298 invalid.call(this);
3299 } else {
3300 state = 'relative';
3301 continue;
3302 }
3303 break;
3304 case 'relative or authority':
3305 if (c === '/' && input[cursor + 1] === '/') {
3306 state = 'authority ignore slashes';
3307 } else {
3308 err('Expected /, got: ' + c);
3309 state = 'relative';
3310 continue;
3311 }
3312 break;
3313 case 'relative':
3314 this._isRelative = true;
3315 if (this._scheme !== 'file') {
3316 this._scheme = base._scheme;
3317 }
3318 if (c === EOF) {
3319 this._host = base._host;
3320 this._port = base._port;
3321 this._path = base._path.slice();
3322 this._query = base._query;
3323 this._username = base._username;
3324 this._password = base._password;
3325 break loop;
3326 } else if (c === '/' || c === '\\') {
3327 if (c === '\\') {
3328 err('\\ is an invalid code point.');
3329 }
3330 state = 'relative slash';
3331 } else if (c === '?') {
3332 this._host = base._host;
3333 this._port = base._port;
3334 this._path = base._path.slice();
3335 this._query = '?';
3336 this._username = base._username;
3337 this._password = base._password;
3338 state = 'query';
3339 } else if (c === '#') {
3340 this._host = base._host;
3341 this._port = base._port;
3342 this._path = base._path.slice();
3343 this._query = base._query;
3344 this._fragment = '#';
3345 this._username = base._username;
3346 this._password = base._password;
3347 state = 'fragment';
3348 } else {
3349 var nextC = input[cursor + 1];
3350 var nextNextC = input[cursor + 2];
3351 if (this._scheme !== 'file' || !ALPHA.test(c) || nextC !== ':' && nextC !== '|' || nextNextC !== EOF && nextNextC !== '/' && nextNextC !== '\\' && nextNextC !== '?' && nextNextC !== '#') {
3352 this._host = base._host;
3353 this._port = base._port;
3354 this._username = base._username;
3355 this._password = base._password;
3356 this._path = base._path.slice();
3357 this._path.pop();
3358 }
3359 state = 'relative path';
3360 continue;
3361 }
3362 break;
3363 case 'relative slash':
3364 if (c === '/' || c === '\\') {
3365 if (c === '\\') {
3366 err('\\ is an invalid code point.');
3367 }
3368 if (this._scheme === 'file') {
3369 state = 'file host';
3370 } else {
3371 state = 'authority ignore slashes';
3372 }
3373 } else {
3374 if (this._scheme !== 'file') {
3375 this._host = base._host;
3376 this._port = base._port;
3377 this._username = base._username;
3378 this._password = base._password;
3379 }
3380 state = 'relative path';
3381 continue;
3382 }
3383 break;
3384 case 'authority first slash':
3385 if (c === '/') {
3386 state = 'authority second slash';
3387 } else {
3388 err('Expected \'/\', got: ' + c);
3389 state = 'authority ignore slashes';
3390 continue;
3391 }
3392 break;
3393 case 'authority second slash':
3394 state = 'authority ignore slashes';
3395 if (c !== '/') {
3396 err('Expected \'/\', got: ' + c);
3397 continue;
3398 }
3399 break;
3400 case 'authority ignore slashes':
3401 if (c !== '/' && c !== '\\') {
3402 state = 'authority';
3403 continue;
3404 } else {
3405 err('Expected authority, got: ' + c);
3406 }
3407 break;
3408 case 'authority':
3409 if (c === '@') {
3410 if (seenAt) {
3411 err('@ already seen.');
3412 buffer += '%40';
3413 }
3414 seenAt = true;
3415 for (var i = 0; i < buffer.length; i++) {
3416 var cp = buffer[i];
3417 if (cp === '\t' || cp === '\n' || cp === '\r') {
3418 err('Invalid whitespace in authority.');
3419 continue;
3420 }
3421 if (cp === ':' && this._password === null) {
3422 this._password = '';
3423 continue;
3424 }
3425 var tempC = percentEscape(cp);
3426 if (this._password !== null) {
3427 this._password += tempC;
3428 } else {
3429 this._username += tempC;
3430 }
3431 }
3432 buffer = '';
3433 } else if (c === EOF || c === '/' || c === '\\' || c === '?' || c === '#') {
3434 cursor -= buffer.length;
3435 buffer = '';
3436 state = 'host';
3437 continue;
3438 } else {
3439 buffer += c;
3440 }
3441 break;
3442 case 'file host':
3443 if (c === EOF || c === '/' || c === '\\' || c === '?' || c === '#') {
3444 if (buffer.length === 2 && ALPHA.test(buffer[0]) && (buffer[1] === ':' || buffer[1] === '|')) {
3445 state = 'relative path';
3446 } else if (buffer.length === 0) {
3447 state = 'relative path start';
3448 } else {
3449 this._host = IDNAToASCII.call(this, buffer);
3450 buffer = '';
3451 state = 'relative path start';
3452 }
3453 continue;
3454 } else if (c === '\t' || c === '\n' || c === '\r') {
3455 err('Invalid whitespace in file host.');
3456 } else {
3457 buffer += c;
3458 }
3459 break;
3460 case 'host':
3461 case 'hostname':
3462 if (c === ':' && !seenBracket) {
3463 this._host = IDNAToASCII.call(this, buffer);
3464 buffer = '';
3465 state = 'port';
3466 if (stateOverride === 'hostname') {
3467 break loop;
3468 }
3469 } else if (c === EOF || c === '/' || c === '\\' || c === '?' || c === '#') {
3470 this._host = IDNAToASCII.call(this, buffer);
3471 buffer = '';
3472 state = 'relative path start';
3473 if (stateOverride) {
3474 break loop;
3475 }
3476 continue;
3477 } else if (c !== '\t' && c !== '\n' && c !== '\r') {
3478 if (c === '[') {
3479 seenBracket = true;
3480 } else if (c === ']') {
3481 seenBracket = false;
3482 }
3483 buffer += c;
3484 } else {
3485 err('Invalid code point in host/hostname: ' + c);
3486 }
3487 break;
3488 case 'port':
3489 if (/[0-9]/.test(c)) {
3490 buffer += c;
3491 } else if (c === EOF || c === '/' || c === '\\' || c === '?' || c === '#' || stateOverride) {
3492 if (buffer !== '') {
3493 var temp = parseInt(buffer, 10);
3494 if (temp !== relative[this._scheme]) {
3495 this._port = temp + '';
3496 }
3497 buffer = '';
3498 }
3499 if (stateOverride) {
3500 break loop;
3501 }
3502 state = 'relative path start';
3503 continue;
3504 } else if (c === '\t' || c === '\n' || c === '\r') {
3505 err('Invalid code point in port: ' + c);
3506 } else {
3507 invalid.call(this);
3508 }
3509 break;
3510 case 'relative path start':
3511 if (c === '\\') {
3512 err('\'\\\' not allowed in path.');
3513 }
3514 state = 'relative path';
3515 if (c !== '/' && c !== '\\') {
3516 continue;
3517 }
3518 break;
3519 case 'relative path':
3520 if (c === EOF || c === '/' || c === '\\' || !stateOverride && (c === '?' || c === '#')) {
3521 if (c === '\\') {
3522 err('\\ not allowed in relative path.');
3523 }
3524 var tmp;
3525 if (tmp = relativePathDotMapping[buffer.toLowerCase()]) {
3526 buffer = tmp;
3527 }
3528 if (buffer === '..') {
3529 this._path.pop();
3530 if (c !== '/' && c !== '\\') {
3531 this._path.push('');
3532 }
3533 } else if (buffer === '.' && c !== '/' && c !== '\\') {
3534 this._path.push('');
3535 } else if (buffer !== '.') {
3536 if (this._scheme === 'file' && this._path.length === 0 && buffer.length === 2 && ALPHA.test(buffer[0]) && buffer[1] === '|') {
3537 buffer = buffer[0] + ':';
3538 }
3539 this._path.push(buffer);
3540 }
3541 buffer = '';
3542 if (c === '?') {
3543 this._query = '?';
3544 state = 'query';
3545 } else if (c === '#') {
3546 this._fragment = '#';
3547 state = 'fragment';
3548 }
3549 } else if (c !== '\t' && c !== '\n' && c !== '\r') {
3550 buffer += percentEscape(c);
3551 }
3552 break;
3553 case 'query':
3554 if (!stateOverride && c === '#') {
3555 this._fragment = '#';
3556 state = 'fragment';
3557 } else if (c !== EOF && c !== '\t' && c !== '\n' && c !== '\r') {
3558 this._query += percentEscapeQuery(c);
3559 }
3560 break;
3561 case 'fragment':
3562 if (c !== EOF && c !== '\t' && c !== '\n' && c !== '\r') {
3563 this._fragment += c;
3564 }
3565 break;
3566 }
3567 cursor++;
3568 }
3569 }
3570 function clear() {
3571 this._scheme = '';
3572 this._schemeData = '';
3573 this._username = '';
3574 this._password = null;
3575 this._host = '';
3576 this._port = '';
3577 this._path = [];
3578 this._query = '';
3579 this._fragment = '';
3580 this._isInvalid = false;
3581 this._isRelative = false;
3582 }
3583 function JURL(url, base) {
3584 if (base !== undefined && !(base instanceof JURL)) {
3585 base = new JURL(String(base));
3586 }
3587 this._url = url;
3588 clear.call(this);
3589 var input = url.replace(/^[ \t\r\n\f]+|[ \t\r\n\f]+$/g, '');
3590 parse.call(this, input, null, base);
3591 }
3592 JURL.prototype = {
3593 toString: function toString() {
3594 return this.href;
3595 },
3596
3597 get href() {
3598 if (this._isInvalid) {
3599 return this._url;
3600 }
3601 var authority = '';
3602 if (this._username !== '' || this._password !== null) {
3603 authority = this._username + (this._password !== null ? ':' + this._password : '') + '@';
3604 }
3605 return this.protocol + (this._isRelative ? '//' + authority + this.host : '') + this.pathname + this._query + this._fragment;
3606 },
3607 set href(value) {
3608 clear.call(this);
3609 parse.call(this, value);
3610 },
3611 get protocol() {
3612 return this._scheme + ':';
3613 },
3614 set protocol(value) {
3615 if (this._isInvalid) {
3616 return;
3617 }
3618 parse.call(this, value + ':', 'scheme start');
3619 },
3620 get host() {
3621 return this._isInvalid ? '' : this._port ? this._host + ':' + this._port : this._host;
3622 },
3623 set host(value) {
3624 if (this._isInvalid || !this._isRelative) {
3625 return;
3626 }
3627 parse.call(this, value, 'host');
3628 },
3629 get hostname() {
3630 return this._host;
3631 },
3632 set hostname(value) {
3633 if (this._isInvalid || !this._isRelative) {
3634 return;
3635 }
3636 parse.call(this, value, 'hostname');
3637 },
3638 get port() {
3639 return this._port;
3640 },
3641 set port(value) {
3642 if (this._isInvalid || !this._isRelative) {
3643 return;
3644 }
3645 parse.call(this, value, 'port');
3646 },
3647 get pathname() {
3648 return this._isInvalid ? '' : this._isRelative ? '/' + this._path.join('/') : this._schemeData;
3649 },
3650 set pathname(value) {
3651 if (this._isInvalid || !this._isRelative) {
3652 return;
3653 }
3654 this._path = [];
3655 parse.call(this, value, 'relative path start');
3656 },
3657 get search() {
3658 return this._isInvalid || !this._query || this._query === '?' ? '' : this._query;
3659 },
3660 set search(value) {
3661 if (this._isInvalid || !this._isRelative) {
3662 return;
3663 }
3664 this._query = '?';
3665 if (value[0] === '?') {
3666 value = value.slice(1);
3667 }
3668 parse.call(this, value, 'query');
3669 },
3670 get hash() {
3671 return this._isInvalid || !this._fragment || this._fragment === '#' ? '' : this._fragment;
3672 },
3673 set hash(value) {
3674 if (this._isInvalid) {
3675 return;
3676 }
3677 this._fragment = '#';
3678 if (value[0] === '#') {
3679 value = value.slice(1);
3680 }
3681 parse.call(this, value, 'fragment');
3682 },
3683 get origin() {
3684 var host;
3685 if (this._isInvalid || !this._scheme) {
3686 return '';
3687 }
3688 switch (this._scheme) {
3689 case 'data':
3690 case 'file':
3691 case 'javascript':
3692 case 'mailto':
3693 return 'null';
3694 case 'blob':
3695 try {
3696 return new JURL(this._schemeData).origin || 'null';
3697 } catch (_) {}
3698 return 'null';
3699 }
3700 host = this.host;
3701 if (!host) {
3702 return '';
3703 }
3704 return this._scheme + '://' + host;
3705 }
3706 };
3707 var OriginalURL = globalScope.URL;
3708 if (OriginalURL) {
3709 JURL.createObjectURL = function (blob) {
3710 return OriginalURL.createObjectURL.apply(OriginalURL, arguments);
3711 };
3712 JURL.revokeObjectURL = function (url) {
3713 OriginalURL.revokeObjectURL(url);
3714 };
3715 }
3716 globalScope.URL = JURL;
3717 })();
3718 (function checkObjectValues() {
3719 if (Object.values) {
3720 return;
3721 }
3722 Object.values = __w_pdfjs_require__(112);
3723 })();
3724}
3725
3726/***/ }),
3727/* 62 */
3728/***/ (function(module, exports, __w_pdfjs_require__) {
3729
3730"use strict";
3731
3732
3733__w_pdfjs_require__(63);
3734module.exports = __w_pdfjs_require__(5).String.includes;
3735
3736/***/ }),
3737/* 63 */
3738/***/ (function(module, exports, __w_pdfjs_require__) {
3739
3740"use strict";
3741
3742
3743var $export = __w_pdfjs_require__(3);
3744var context = __w_pdfjs_require__(64);
3745var INCLUDES = 'includes';
3746$export($export.P + $export.F * __w_pdfjs_require__(66)(INCLUDES), 'String', {
3747 includes: function includes(searchString) {
3748 return !!~context(this, searchString, INCLUDES).indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);
3749 }
3750});
3751
3752/***/ }),
3753/* 64 */
3754/***/ (function(module, exports, __w_pdfjs_require__) {
3755
3756"use strict";
3757
3758
3759var isRegExp = __w_pdfjs_require__(65);
3760var defined = __w_pdfjs_require__(20);
3761module.exports = function (that, searchString, NAME) {
3762 if (isRegExp(searchString)) throw TypeError('String#' + NAME + " doesn't accept regex!");
3763 return String(defined(that));
3764};
3765
3766/***/ }),
3767/* 65 */
3768/***/ (function(module, exports, __w_pdfjs_require__) {
3769
3770"use strict";
3771
3772
3773var isObject = __w_pdfjs_require__(2);
3774var cof = __w_pdfjs_require__(13);
3775var MATCH = __w_pdfjs_require__(1)('match');
3776module.exports = function (it) {
3777 var isRegExp;
3778 return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');
3779};
3780
3781/***/ }),
3782/* 66 */
3783/***/ (function(module, exports, __w_pdfjs_require__) {
3784
3785"use strict";
3786
3787
3788var MATCH = __w_pdfjs_require__(1)('match');
3789module.exports = function (KEY) {
3790 var re = /./;
3791 try {
3792 '/./'[KEY](re);
3793 } catch (e) {
3794 try {
3795 re[MATCH] = false;
3796 return !'/./'[KEY](re);
3797 } catch (f) {}
3798 }
3799 return true;
3800};
3801
3802/***/ }),
3803/* 67 */
3804/***/ (function(module, exports, __w_pdfjs_require__) {
3805
3806"use strict";
3807
3808
3809__w_pdfjs_require__(68);
3810module.exports = __w_pdfjs_require__(5).Array.includes;
3811
3812/***/ }),
3813/* 68 */
3814/***/ (function(module, exports, __w_pdfjs_require__) {
3815
3816"use strict";
3817
3818
3819var $export = __w_pdfjs_require__(3);
3820var $includes = __w_pdfjs_require__(43)(true);
3821$export($export.P, 'Array', {
3822 includes: function includes(el) {
3823 return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);
3824 }
3825});
3826__w_pdfjs_require__(44)('includes');
3827
3828/***/ }),
3829/* 69 */
3830/***/ (function(module, exports, __w_pdfjs_require__) {
3831
3832"use strict";
3833
3834
3835var toInteger = __w_pdfjs_require__(30);
3836var max = Math.max;
3837var min = Math.min;
3838module.exports = function (index, length) {
3839 index = toInteger(index);
3840 return index < 0 ? max(index + length, 0) : min(index, length);
3841};
3842
3843/***/ }),
3844/* 70 */
3845/***/ (function(module, exports, __w_pdfjs_require__) {
3846
3847"use strict";
3848
3849
3850__w_pdfjs_require__(71);
3851module.exports = __w_pdfjs_require__(5).Math.log2;
3852
3853/***/ }),
3854/* 71 */
3855/***/ (function(module, exports, __w_pdfjs_require__) {
3856
3857"use strict";
3858
3859
3860var $export = __w_pdfjs_require__(3);
3861$export($export.S, 'Math', {
3862 log2: function log2(x) {
3863 return Math.log(x) / Math.LN2;
3864 }
3865});
3866
3867/***/ }),
3868/* 72 */
3869/***/ (function(module, exports, __w_pdfjs_require__) {
3870
3871"use strict";
3872
3873
3874__w_pdfjs_require__(73);
3875module.exports = __w_pdfjs_require__(5).Number.isNaN;
3876
3877/***/ }),
3878/* 73 */
3879/***/ (function(module, exports, __w_pdfjs_require__) {
3880
3881"use strict";
3882
3883
3884var $export = __w_pdfjs_require__(3);
3885$export($export.S, 'Number', {
3886 isNaN: function isNaN(number) {
3887 return number != number;
3888 }
3889});
3890
3891/***/ }),
3892/* 74 */
3893/***/ (function(module, exports, __w_pdfjs_require__) {
3894
3895"use strict";
3896
3897
3898__w_pdfjs_require__(75);
3899module.exports = __w_pdfjs_require__(5).Number.isInteger;
3900
3901/***/ }),
3902/* 75 */
3903/***/ (function(module, exports, __w_pdfjs_require__) {
3904
3905"use strict";
3906
3907
3908var $export = __w_pdfjs_require__(3);
3909$export($export.S, 'Number', { isInteger: __w_pdfjs_require__(76) });
3910
3911/***/ }),
3912/* 76 */
3913/***/ (function(module, exports, __w_pdfjs_require__) {
3914
3915"use strict";
3916
3917
3918var isObject = __w_pdfjs_require__(2);
3919var floor = Math.floor;
3920module.exports = function isInteger(it) {
3921 return !isObject(it) && isFinite(it) && floor(it) === it;
3922};
3923
3924/***/ }),
3925/* 77 */
3926/***/ (function(module, exports, __w_pdfjs_require__) {
3927
3928"use strict";
3929
3930
3931__w_pdfjs_require__(45);
3932__w_pdfjs_require__(78);
3933__w_pdfjs_require__(50);
3934__w_pdfjs_require__(87);
3935__w_pdfjs_require__(94);
3936__w_pdfjs_require__(95);
3937module.exports = __w_pdfjs_require__(5).Promise;
3938
3939/***/ }),
3940/* 78 */
3941/***/ (function(module, exports, __w_pdfjs_require__) {
3942
3943"use strict";
3944
3945
3946var $at = __w_pdfjs_require__(79)(true);
3947__w_pdfjs_require__(46)(String, 'String', function (iterated) {
3948 this._t = String(iterated);
3949 this._i = 0;
3950}, function () {
3951 var O = this._t;
3952 var index = this._i;
3953 var point;
3954 if (index >= O.length) return {
3955 value: undefined,
3956 done: true
3957 };
3958 point = $at(O, index);
3959 this._i += point.length;
3960 return {
3961 value: point,
3962 done: false
3963 };
3964});
3965
3966/***/ }),
3967/* 79 */
3968/***/ (function(module, exports, __w_pdfjs_require__) {
3969
3970"use strict";
3971
3972
3973var toInteger = __w_pdfjs_require__(30);
3974var defined = __w_pdfjs_require__(20);
3975module.exports = function (TO_STRING) {
3976 return function (that, pos) {
3977 var s = String(defined(that));
3978 var i = toInteger(pos);
3979 var l = s.length;
3980 var a, b;
3981 if (i < 0 || i >= l) return TO_STRING ? '' : undefined;
3982 a = s.charCodeAt(i);
3983 return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff ? TO_STRING ? s.charAt(i) : a : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;
3984 };
3985};
3986
3987/***/ }),
3988/* 80 */
3989/***/ (function(module, exports, __w_pdfjs_require__) {
3990
3991"use strict";
3992
3993
3994var create = __w_pdfjs_require__(81);
3995var descriptor = __w_pdfjs_require__(27);
3996var setToStringTag = __w_pdfjs_require__(22);
3997var IteratorPrototype = {};
3998__w_pdfjs_require__(10)(IteratorPrototype, __w_pdfjs_require__(1)('iterator'), function () {
3999 return this;
4000});
4001module.exports = function (Constructor, NAME, next) {
4002 Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });
4003 setToStringTag(Constructor, NAME + ' Iterator');
4004};
4005
4006/***/ }),
4007/* 81 */
4008/***/ (function(module, exports, __w_pdfjs_require__) {
4009
4010"use strict";
4011
4012
4013var anObject = __w_pdfjs_require__(6);
4014var dPs = __w_pdfjs_require__(82);
4015var enumBugKeys = __w_pdfjs_require__(48);
4016var IE_PROTO = __w_pdfjs_require__(32)('IE_PROTO');
4017var Empty = function Empty() {};
4018var PROTOTYPE = 'prototype';
4019var _createDict = function createDict() {
4020 var iframe = __w_pdfjs_require__(26)('iframe');
4021 var i = enumBugKeys.length;
4022 var lt = '<';
4023 var gt = '>';
4024 var iframeDocument;
4025 iframe.style.display = 'none';
4026 __w_pdfjs_require__(49).appendChild(iframe);
4027 iframe.src = 'javascript:';
4028 iframeDocument = iframe.contentWindow.document;
4029 iframeDocument.open();
4030 iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);
4031 iframeDocument.close();
4032 _createDict = iframeDocument.F;
4033 while (i--) {
4034 delete _createDict[PROTOTYPE][enumBugKeys[i]];
4035 }return _createDict();
4036};
4037module.exports = Object.create || function create(O, Properties) {
4038 var result;
4039 if (O !== null) {
4040 Empty[PROTOTYPE] = anObject(O);
4041 result = new Empty();
4042 Empty[PROTOTYPE] = null;
4043 result[IE_PROTO] = O;
4044 } else result = _createDict();
4045 return Properties === undefined ? result : dPs(result, Properties);
4046};
4047
4048/***/ }),
4049/* 82 */
4050/***/ (function(module, exports, __w_pdfjs_require__) {
4051
4052"use strict";
4053
4054
4055var dP = __w_pdfjs_require__(14);
4056var anObject = __w_pdfjs_require__(6);
4057var getKeys = __w_pdfjs_require__(21);
4058module.exports = __w_pdfjs_require__(11) ? Object.defineProperties : function defineProperties(O, Properties) {
4059 anObject(O);
4060 var keys = getKeys(Properties);
4061 var length = keys.length;
4062 var i = 0;
4063 var P;
4064 while (length > i) {
4065 dP.f(O, P = keys[i++], Properties[P]);
4066 }return O;
4067};
4068
4069/***/ }),
4070/* 83 */
4071/***/ (function(module, exports, __w_pdfjs_require__) {
4072
4073"use strict";
4074
4075
4076var has = __w_pdfjs_require__(8);
4077var toIObject = __w_pdfjs_require__(16);
4078var arrayIndexOf = __w_pdfjs_require__(43)(false);
4079var IE_PROTO = __w_pdfjs_require__(32)('IE_PROTO');
4080module.exports = function (object, names) {
4081 var O = toIObject(object);
4082 var i = 0;
4083 var result = [];
4084 var key;
4085 for (key in O) {
4086 if (key != IE_PROTO) has(O, key) && result.push(key);
4087 }while (names.length > i) {
4088 if (has(O, key = names[i++])) {
4089 ~arrayIndexOf(result, key) || result.push(key);
4090 }
4091 }return result;
4092};
4093
4094/***/ }),
4095/* 84 */
4096/***/ (function(module, exports, __w_pdfjs_require__) {
4097
4098"use strict";
4099
4100
4101var has = __w_pdfjs_require__(8);
4102var toObject = __w_pdfjs_require__(33);
4103var IE_PROTO = __w_pdfjs_require__(32)('IE_PROTO');
4104var ObjectProto = Object.prototype;
4105module.exports = Object.getPrototypeOf || function (O) {
4106 O = toObject(O);
4107 if (has(O, IE_PROTO)) return O[IE_PROTO];
4108 if (typeof O.constructor == 'function' && O instanceof O.constructor) {
4109 return O.constructor.prototype;
4110 }
4111 return O instanceof Object ? ObjectProto : null;
4112};
4113
4114/***/ }),
4115/* 85 */
4116/***/ (function(module, exports, __w_pdfjs_require__) {
4117
4118"use strict";
4119
4120
4121var addToUnscopables = __w_pdfjs_require__(44);
4122var step = __w_pdfjs_require__(86);
4123var Iterators = __w_pdfjs_require__(17);
4124var toIObject = __w_pdfjs_require__(16);
4125module.exports = __w_pdfjs_require__(46)(Array, 'Array', function (iterated, kind) {
4126 this._t = toIObject(iterated);
4127 this._i = 0;
4128 this._k = kind;
4129}, function () {
4130 var O = this._t;
4131 var kind = this._k;
4132 var index = this._i++;
4133 if (!O || index >= O.length) {
4134 this._t = undefined;
4135 return step(1);
4136 }
4137 if (kind == 'keys') return step(0, index);
4138 if (kind == 'values') return step(0, O[index]);
4139 return step(0, [index, O[index]]);
4140}, 'values');
4141Iterators.Arguments = Iterators.Array;
4142addToUnscopables('keys');
4143addToUnscopables('values');
4144addToUnscopables('entries');
4145
4146/***/ }),
4147/* 86 */
4148/***/ (function(module, exports, __w_pdfjs_require__) {
4149
4150"use strict";
4151
4152
4153module.exports = function (done, value) {
4154 return {
4155 value: value,
4156 done: !!done
4157 };
4158};
4159
4160/***/ }),
4161/* 87 */
4162/***/ (function(module, exports, __w_pdfjs_require__) {
4163
4164"use strict";
4165
4166
4167var LIBRARY = __w_pdfjs_require__(47);
4168var global = __w_pdfjs_require__(4);
4169var ctx = __w_pdfjs_require__(9);
4170var classof = __w_pdfjs_require__(31);
4171var $export = __w_pdfjs_require__(3);
4172var isObject = __w_pdfjs_require__(2);
4173var aFunction = __w_pdfjs_require__(15);
4174var anInstance = __w_pdfjs_require__(34);
4175var forOf = __w_pdfjs_require__(23);
4176var speciesConstructor = __w_pdfjs_require__(51);
4177var task = __w_pdfjs_require__(52).set;
4178var microtask = __w_pdfjs_require__(92)();
4179var newPromiseCapabilityModule = __w_pdfjs_require__(35);
4180var perform = __w_pdfjs_require__(53);
4181var promiseResolve = __w_pdfjs_require__(54);
4182var PROMISE = 'Promise';
4183var TypeError = global.TypeError;
4184var process = global.process;
4185var $Promise = global[PROMISE];
4186var isNode = classof(process) == 'process';
4187var empty = function empty() {};
4188var Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;
4189var newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;
4190var USE_NATIVE = !!function () {
4191 try {
4192 var promise = $Promise.resolve(1);
4193 var FakePromise = (promise.constructor = {})[__w_pdfjs_require__(1)('species')] = function (exec) {
4194 exec(empty, empty);
4195 };
4196 return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;
4197 } catch (e) {}
4198}();
4199var isThenable = function isThenable(it) {
4200 var then;
4201 return isObject(it) && typeof (then = it.then) == 'function' ? then : false;
4202};
4203var notify = function notify(promise, isReject) {
4204 if (promise._n) return;
4205 promise._n = true;
4206 var chain = promise._c;
4207 microtask(function () {
4208 var value = promise._v;
4209 var ok = promise._s == 1;
4210 var i = 0;
4211 var run = function run(reaction) {
4212 var handler = ok ? reaction.ok : reaction.fail;
4213 var resolve = reaction.resolve;
4214 var reject = reaction.reject;
4215 var domain = reaction.domain;
4216 var result, then, exited;
4217 try {
4218 if (handler) {
4219 if (!ok) {
4220 if (promise._h == 2) onHandleUnhandled(promise);
4221 promise._h = 1;
4222 }
4223 if (handler === true) result = value;else {
4224 if (domain) domain.enter();
4225 result = handler(value);
4226 if (domain) {
4227 domain.exit();
4228 exited = true;
4229 }
4230 }
4231 if (result === reaction.promise) {
4232 reject(TypeError('Promise-chain cycle'));
4233 } else if (then = isThenable(result)) {
4234 then.call(result, resolve, reject);
4235 } else resolve(result);
4236 } else reject(value);
4237 } catch (e) {
4238 if (domain && !exited) domain.exit();
4239 reject(e);
4240 }
4241 };
4242 while (chain.length > i) {
4243 run(chain[i++]);
4244 }promise._c = [];
4245 promise._n = false;
4246 if (isReject && !promise._h) onUnhandled(promise);
4247 });
4248};
4249var onUnhandled = function onUnhandled(promise) {
4250 task.call(global, function () {
4251 var value = promise._v;
4252 var unhandled = isUnhandled(promise);
4253 var result, handler, console;
4254 if (unhandled) {
4255 result = perform(function () {
4256 if (isNode) {
4257 process.emit('unhandledRejection', value, promise);
4258 } else if (handler = global.onunhandledrejection) {
4259 handler({
4260 promise: promise,
4261 reason: value
4262 });
4263 } else if ((console = global.console) && console.error) {
4264 console.error('Unhandled promise rejection', value);
4265 }
4266 });
4267 promise._h = isNode || isUnhandled(promise) ? 2 : 1;
4268 }
4269 promise._a = undefined;
4270 if (unhandled && result.e) throw result.v;
4271 });
4272};
4273var isUnhandled = function isUnhandled(promise) {
4274 return promise._h !== 1 && (promise._a || promise._c).length === 0;
4275};
4276var onHandleUnhandled = function onHandleUnhandled(promise) {
4277 task.call(global, function () {
4278 var handler;
4279 if (isNode) {
4280 process.emit('rejectionHandled', promise);
4281 } else if (handler = global.onrejectionhandled) {
4282 handler({
4283 promise: promise,
4284 reason: promise._v
4285 });
4286 }
4287 });
4288};
4289var $reject = function $reject(value) {
4290 var promise = this;
4291 if (promise._d) return;
4292 promise._d = true;
4293 promise = promise._w || promise;
4294 promise._v = value;
4295 promise._s = 2;
4296 if (!promise._a) promise._a = promise._c.slice();
4297 notify(promise, true);
4298};
4299var $resolve = function $resolve(value) {
4300 var promise = this;
4301 var then;
4302 if (promise._d) return;
4303 promise._d = true;
4304 promise = promise._w || promise;
4305 try {
4306 if (promise === value) throw TypeError("Promise can't be resolved itself");
4307 if (then = isThenable(value)) {
4308 microtask(function () {
4309 var wrapper = {
4310 _w: promise,
4311 _d: false
4312 };
4313 try {
4314 then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));
4315 } catch (e) {
4316 $reject.call(wrapper, e);
4317 }
4318 });
4319 } else {
4320 promise._v = value;
4321 promise._s = 1;
4322 notify(promise, false);
4323 }
4324 } catch (e) {
4325 $reject.call({
4326 _w: promise,
4327 _d: false
4328 }, e);
4329 }
4330};
4331if (!USE_NATIVE) {
4332 $Promise = function Promise(executor) {
4333 anInstance(this, $Promise, PROMISE, '_h');
4334 aFunction(executor);
4335 Internal.call(this);
4336 try {
4337 executor(ctx($resolve, this, 1), ctx($reject, this, 1));
4338 } catch (err) {
4339 $reject.call(this, err);
4340 }
4341 };
4342 Internal = function Promise(executor) {
4343 this._c = [];
4344 this._a = undefined;
4345 this._s = 0;
4346 this._d = false;
4347 this._v = undefined;
4348 this._h = 0;
4349 this._n = false;
4350 };
4351 Internal.prototype = __w_pdfjs_require__(36)($Promise.prototype, {
4352 then: function then(onFulfilled, onRejected) {
4353 var reaction = newPromiseCapability(speciesConstructor(this, $Promise));
4354 reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;
4355 reaction.fail = typeof onRejected == 'function' && onRejected;
4356 reaction.domain = isNode ? process.domain : undefined;
4357 this._c.push(reaction);
4358 if (this._a) this._a.push(reaction);
4359 if (this._s) notify(this, false);
4360 return reaction.promise;
4361 },
4362 'catch': function _catch(onRejected) {
4363 return this.then(undefined, onRejected);
4364 }
4365 });
4366 OwnPromiseCapability = function OwnPromiseCapability() {
4367 var promise = new Internal();
4368 this.promise = promise;
4369 this.resolve = ctx($resolve, promise, 1);
4370 this.reject = ctx($reject, promise, 1);
4371 };
4372 newPromiseCapabilityModule.f = newPromiseCapability = function newPromiseCapability(C) {
4373 return C === $Promise || C === Wrapper ? new OwnPromiseCapability(C) : newGenericPromiseCapability(C);
4374 };
4375}
4376$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });
4377__w_pdfjs_require__(22)($Promise, PROMISE);
4378__w_pdfjs_require__(93)(PROMISE);
4379Wrapper = __w_pdfjs_require__(5)[PROMISE];
4380$export($export.S + $export.F * !USE_NATIVE, PROMISE, {
4381 reject: function reject(r) {
4382 var capability = newPromiseCapability(this);
4383 var $$reject = capability.reject;
4384 $$reject(r);
4385 return capability.promise;
4386 }
4387});
4388$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {
4389 resolve: function resolve(x) {
4390 return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);
4391 }
4392});
4393$export($export.S + $export.F * !(USE_NATIVE && __w_pdfjs_require__(55)(function (iter) {
4394 $Promise.all(iter)['catch'](empty);
4395})), PROMISE, {
4396 all: function all(iterable) {
4397 var C = this;
4398 var capability = newPromiseCapability(C);
4399 var resolve = capability.resolve;
4400 var reject = capability.reject;
4401 var result = perform(function () {
4402 var values = [];
4403 var index = 0;
4404 var remaining = 1;
4405 forOf(iterable, false, function (promise) {
4406 var $index = index++;
4407 var alreadyCalled = false;
4408 values.push(undefined);
4409 remaining++;
4410 C.resolve(promise).then(function (value) {
4411 if (alreadyCalled) return;
4412 alreadyCalled = true;
4413 values[$index] = value;
4414 --remaining || resolve(values);
4415 }, reject);
4416 });
4417 --remaining || resolve(values);
4418 });
4419 if (result.e) reject(result.v);
4420 return capability.promise;
4421 },
4422 race: function race(iterable) {
4423 var C = this;
4424 var capability = newPromiseCapability(C);
4425 var reject = capability.reject;
4426 var result = perform(function () {
4427 forOf(iterable, false, function (promise) {
4428 C.resolve(promise).then(capability.resolve, reject);
4429 });
4430 });
4431 if (result.e) reject(result.v);
4432 return capability.promise;
4433 }
4434});
4435
4436/***/ }),
4437/* 88 */
4438/***/ (function(module, exports, __w_pdfjs_require__) {
4439
4440"use strict";
4441
4442
4443var anObject = __w_pdfjs_require__(6);
4444module.exports = function (iterator, fn, value, entries) {
4445 try {
4446 return entries ? fn(anObject(value)[0], value[1]) : fn(value);
4447 } catch (e) {
4448 var ret = iterator['return'];
4449 if (ret !== undefined) anObject(ret.call(iterator));
4450 throw e;
4451 }
4452};
4453
4454/***/ }),
4455/* 89 */
4456/***/ (function(module, exports, __w_pdfjs_require__) {
4457
4458"use strict";
4459
4460
4461var Iterators = __w_pdfjs_require__(17);
4462var ITERATOR = __w_pdfjs_require__(1)('iterator');
4463var ArrayProto = Array.prototype;
4464module.exports = function (it) {
4465 return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);
4466};
4467
4468/***/ }),
4469/* 90 */
4470/***/ (function(module, exports, __w_pdfjs_require__) {
4471
4472"use strict";
4473
4474
4475var classof = __w_pdfjs_require__(31);
4476var ITERATOR = __w_pdfjs_require__(1)('iterator');
4477var Iterators = __w_pdfjs_require__(17);
4478module.exports = __w_pdfjs_require__(5).getIteratorMethod = function (it) {
4479 if (it != undefined) return it[ITERATOR] || it['@@iterator'] || Iterators[classof(it)];
4480};
4481
4482/***/ }),
4483/* 91 */
4484/***/ (function(module, exports, __w_pdfjs_require__) {
4485
4486"use strict";
4487
4488
4489module.exports = function (fn, args, that) {
4490 var un = that === undefined;
4491 switch (args.length) {
4492 case 0:
4493 return un ? fn() : fn.call(that);
4494 case 1:
4495 return un ? fn(args[0]) : fn.call(that, args[0]);
4496 case 2:
4497 return un ? fn(args[0], args[1]) : fn.call(that, args[0], args[1]);
4498 case 3:
4499 return un ? fn(args[0], args[1], args[2]) : fn.call(that, args[0], args[1], args[2]);
4500 case 4:
4501 return un ? fn(args[0], args[1], args[2], args[3]) : fn.call(that, args[0], args[1], args[2], args[3]);
4502 }
4503 return fn.apply(that, args);
4504};
4505
4506/***/ }),
4507/* 92 */
4508/***/ (function(module, exports, __w_pdfjs_require__) {
4509
4510"use strict";
4511
4512
4513var global = __w_pdfjs_require__(4);
4514var macrotask = __w_pdfjs_require__(52).set;
4515var Observer = global.MutationObserver || global.WebKitMutationObserver;
4516var process = global.process;
4517var Promise = global.Promise;
4518var isNode = __w_pdfjs_require__(13)(process) == 'process';
4519module.exports = function () {
4520 var head, last, notify;
4521 var flush = function flush() {
4522 var parent, fn;
4523 if (isNode && (parent = process.domain)) parent.exit();
4524 while (head) {
4525 fn = head.fn;
4526 head = head.next;
4527 try {
4528 fn();
4529 } catch (e) {
4530 if (head) notify();else last = undefined;
4531 throw e;
4532 }
4533 }
4534 last = undefined;
4535 if (parent) parent.enter();
4536 };
4537 if (isNode) {
4538 notify = function notify() {
4539 process.nextTick(flush);
4540 };
4541 } else if (Observer && !(global.navigator && global.navigator.standalone)) {
4542 var toggle = true;
4543 var node = document.createTextNode('');
4544 new Observer(flush).observe(node, { characterData: true });
4545 notify = function notify() {
4546 node.data = toggle = !toggle;
4547 };
4548 } else if (Promise && Promise.resolve) {
4549 var promise = Promise.resolve();
4550 notify = function notify() {
4551 promise.then(flush);
4552 };
4553 } else {
4554 notify = function notify() {
4555 macrotask.call(global, flush);
4556 };
4557 }
4558 return function (fn) {
4559 var task = {
4560 fn: fn,
4561 next: undefined
4562 };
4563 if (last) last.next = task;
4564 if (!head) {
4565 head = task;
4566 notify();
4567 }
4568 last = task;
4569 };
4570};
4571
4572/***/ }),
4573/* 93 */
4574/***/ (function(module, exports, __w_pdfjs_require__) {
4575
4576"use strict";
4577
4578
4579var global = __w_pdfjs_require__(4);
4580var dP = __w_pdfjs_require__(14);
4581var DESCRIPTORS = __w_pdfjs_require__(11);
4582var SPECIES = __w_pdfjs_require__(1)('species');
4583module.exports = function (KEY) {
4584 var C = global[KEY];
4585 if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {
4586 configurable: true,
4587 get: function get() {
4588 return this;
4589 }
4590 });
4591};
4592
4593/***/ }),
4594/* 94 */
4595/***/ (function(module, exports, __w_pdfjs_require__) {
4596
4597"use strict";
4598
4599
4600var $export = __w_pdfjs_require__(3);
4601var core = __w_pdfjs_require__(5);
4602var global = __w_pdfjs_require__(4);
4603var speciesConstructor = __w_pdfjs_require__(51);
4604var promiseResolve = __w_pdfjs_require__(54);
4605$export($export.P + $export.R, 'Promise', {
4606 'finally': function _finally(onFinally) {
4607 var C = speciesConstructor(this, core.Promise || global.Promise);
4608 var isFunction = typeof onFinally == 'function';
4609 return this.then(isFunction ? function (x) {
4610 return promiseResolve(C, onFinally()).then(function () {
4611 return x;
4612 });
4613 } : onFinally, isFunction ? function (e) {
4614 return promiseResolve(C, onFinally()).then(function () {
4615 throw e;
4616 });
4617 } : onFinally);
4618 }
4619});
4620
4621/***/ }),
4622/* 95 */
4623/***/ (function(module, exports, __w_pdfjs_require__) {
4624
4625"use strict";
4626
4627
4628var $export = __w_pdfjs_require__(3);
4629var newPromiseCapability = __w_pdfjs_require__(35);
4630var perform = __w_pdfjs_require__(53);
4631$export($export.S, 'Promise', {
4632 'try': function _try(callbackfn) {
4633 var promiseCapability = newPromiseCapability.f(this);
4634 var result = perform(callbackfn);
4635 (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);
4636 return promiseCapability.promise;
4637 }
4638});
4639
4640/***/ }),
4641/* 96 */
4642/***/ (function(module, exports, __w_pdfjs_require__) {
4643
4644"use strict";
4645
4646
4647__w_pdfjs_require__(45);
4648__w_pdfjs_require__(50);
4649__w_pdfjs_require__(97);
4650__w_pdfjs_require__(108);
4651__w_pdfjs_require__(110);
4652module.exports = __w_pdfjs_require__(5).WeakMap;
4653
4654/***/ }),
4655/* 97 */
4656/***/ (function(module, exports, __w_pdfjs_require__) {
4657
4658"use strict";
4659
4660
4661var each = __w_pdfjs_require__(56)(0);
4662var redefine = __w_pdfjs_require__(7);
4663var meta = __w_pdfjs_require__(37);
4664var assign = __w_pdfjs_require__(101);
4665var weak = __w_pdfjs_require__(103);
4666var isObject = __w_pdfjs_require__(2);
4667var fails = __w_pdfjs_require__(12);
4668var validate = __w_pdfjs_require__(57);
4669var WEAK_MAP = 'WeakMap';
4670var getWeak = meta.getWeak;
4671var isExtensible = Object.isExtensible;
4672var uncaughtFrozenStore = weak.ufstore;
4673var tmp = {};
4674var InternalMap;
4675var wrapper = function wrapper(get) {
4676 return function WeakMap() {
4677 return get(this, arguments.length > 0 ? arguments[0] : undefined);
4678 };
4679};
4680var methods = {
4681 get: function get(key) {
4682 if (isObject(key)) {
4683 var data = getWeak(key);
4684 if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);
4685 return data ? data[this._i] : undefined;
4686 }
4687 },
4688 set: function set(key, value) {
4689 return weak.def(validate(this, WEAK_MAP), key, value);
4690 }
4691};
4692var $WeakMap = module.exports = __w_pdfjs_require__(104)(WEAK_MAP, wrapper, methods, weak, true, true);
4693if (fails(function () {
4694 return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7;
4695})) {
4696 InternalMap = weak.getConstructor(wrapper, WEAK_MAP);
4697 assign(InternalMap.prototype, methods);
4698 meta.NEED = true;
4699 each(['delete', 'has', 'get', 'set'], function (key) {
4700 var proto = $WeakMap.prototype;
4701 var method = proto[key];
4702 redefine(proto, key, function (a, b) {
4703 if (isObject(a) && !isExtensible(a)) {
4704 if (!this._f) this._f = new InternalMap();
4705 var result = this._f[key](a, b);
4706 return key == 'set' ? this : result;
4707 }
4708 return method.call(this, a, b);
4709 });
4710 });
4711}
4712
4713/***/ }),
4714/* 98 */
4715/***/ (function(module, exports, __w_pdfjs_require__) {
4716
4717"use strict";
4718
4719
4720var speciesConstructor = __w_pdfjs_require__(99);
4721module.exports = function (original, length) {
4722 return new (speciesConstructor(original))(length);
4723};
4724
4725/***/ }),
4726/* 99 */
4727/***/ (function(module, exports, __w_pdfjs_require__) {
4728
4729"use strict";
4730
4731
4732var isObject = __w_pdfjs_require__(2);
4733var isArray = __w_pdfjs_require__(100);
4734var SPECIES = __w_pdfjs_require__(1)('species');
4735module.exports = function (original) {
4736 var C;
4737 if (isArray(original)) {
4738 C = original.constructor;
4739 if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;
4740 if (isObject(C)) {
4741 C = C[SPECIES];
4742 if (C === null) C = undefined;
4743 }
4744 }
4745 return C === undefined ? Array : C;
4746};
4747
4748/***/ }),
4749/* 100 */
4750/***/ (function(module, exports, __w_pdfjs_require__) {
4751
4752"use strict";
4753
4754
4755var cof = __w_pdfjs_require__(13);
4756module.exports = Array.isArray || function isArray(arg) {
4757 return cof(arg) == 'Array';
4758};
4759
4760/***/ }),
4761/* 101 */
4762/***/ (function(module, exports, __w_pdfjs_require__) {
4763
4764"use strict";
4765
4766
4767var getKeys = __w_pdfjs_require__(21);
4768var gOPS = __w_pdfjs_require__(102);
4769var pIE = __w_pdfjs_require__(38);
4770var toObject = __w_pdfjs_require__(33);
4771var IObject = __w_pdfjs_require__(28);
4772var $assign = Object.assign;
4773module.exports = !$assign || __w_pdfjs_require__(12)(function () {
4774 var A = {};
4775 var B = {};
4776 var S = Symbol();
4777 var K = 'abcdefghijklmnopqrst';
4778 A[S] = 7;
4779 K.split('').forEach(function (k) {
4780 B[k] = k;
4781 });
4782 return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;
4783}) ? function assign(target, source) {
4784 var T = toObject(target);
4785 var aLen = arguments.length;
4786 var index = 1;
4787 var getSymbols = gOPS.f;
4788 var isEnum = pIE.f;
4789 while (aLen > index) {
4790 var S = IObject(arguments[index++]);
4791 var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);
4792 var length = keys.length;
4793 var j = 0;
4794 var key;
4795 while (length > j) {
4796 if (isEnum.call(S, key = keys[j++])) T[key] = S[key];
4797 }
4798 }
4799 return T;
4800} : $assign;
4801
4802/***/ }),
4803/* 102 */
4804/***/ (function(module, exports, __w_pdfjs_require__) {
4805
4806"use strict";
4807
4808
4809exports.f = Object.getOwnPropertySymbols;
4810
4811/***/ }),
4812/* 103 */
4813/***/ (function(module, exports, __w_pdfjs_require__) {
4814
4815"use strict";
4816
4817
4818var redefineAll = __w_pdfjs_require__(36);
4819var getWeak = __w_pdfjs_require__(37).getWeak;
4820var anObject = __w_pdfjs_require__(6);
4821var isObject = __w_pdfjs_require__(2);
4822var anInstance = __w_pdfjs_require__(34);
4823var forOf = __w_pdfjs_require__(23);
4824var createArrayMethod = __w_pdfjs_require__(56);
4825var $has = __w_pdfjs_require__(8);
4826var validate = __w_pdfjs_require__(57);
4827var arrayFind = createArrayMethod(5);
4828var arrayFindIndex = createArrayMethod(6);
4829var id = 0;
4830var uncaughtFrozenStore = function uncaughtFrozenStore(that) {
4831 return that._l || (that._l = new UncaughtFrozenStore());
4832};
4833var UncaughtFrozenStore = function UncaughtFrozenStore() {
4834 this.a = [];
4835};
4836var findUncaughtFrozen = function findUncaughtFrozen(store, key) {
4837 return arrayFind(store.a, function (it) {
4838 return it[0] === key;
4839 });
4840};
4841UncaughtFrozenStore.prototype = {
4842 get: function get(key) {
4843 var entry = findUncaughtFrozen(this, key);
4844 if (entry) return entry[1];
4845 },
4846 has: function has(key) {
4847 return !!findUncaughtFrozen(this, key);
4848 },
4849 set: function set(key, value) {
4850 var entry = findUncaughtFrozen(this, key);
4851 if (entry) entry[1] = value;else this.a.push([key, value]);
4852 },
4853 'delete': function _delete(key) {
4854 var index = arrayFindIndex(this.a, function (it) {
4855 return it[0] === key;
4856 });
4857 if (~index) this.a.splice(index, 1);
4858 return !!~index;
4859 }
4860};
4861module.exports = {
4862 getConstructor: function getConstructor(wrapper, NAME, IS_MAP, ADDER) {
4863 var C = wrapper(function (that, iterable) {
4864 anInstance(that, C, NAME, '_i');
4865 that._t = NAME;
4866 that._i = id++;
4867 that._l = undefined;
4868 if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);
4869 });
4870 redefineAll(C.prototype, {
4871 'delete': function _delete(key) {
4872 if (!isObject(key)) return false;
4873 var data = getWeak(key);
4874 if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);
4875 return data && $has(data, this._i) && delete data[this._i];
4876 },
4877 has: function has(key) {
4878 if (!isObject(key)) return false;
4879 var data = getWeak(key);
4880 if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);
4881 return data && $has(data, this._i);
4882 }
4883 });
4884 return C;
4885 },
4886 def: function def(that, key, value) {
4887 var data = getWeak(anObject(key), true);
4888 if (data === true) uncaughtFrozenStore(that).set(key, value);else data[that._i] = value;
4889 return that;
4890 },
4891 ufstore: uncaughtFrozenStore
4892};
4893
4894/***/ }),
4895/* 104 */
4896/***/ (function(module, exports, __w_pdfjs_require__) {
4897
4898"use strict";
4899
4900
4901var global = __w_pdfjs_require__(4);
4902var $export = __w_pdfjs_require__(3);
4903var redefine = __w_pdfjs_require__(7);
4904var redefineAll = __w_pdfjs_require__(36);
4905var meta = __w_pdfjs_require__(37);
4906var forOf = __w_pdfjs_require__(23);
4907var anInstance = __w_pdfjs_require__(34);
4908var isObject = __w_pdfjs_require__(2);
4909var fails = __w_pdfjs_require__(12);
4910var $iterDetect = __w_pdfjs_require__(55);
4911var setToStringTag = __w_pdfjs_require__(22);
4912var inheritIfRequired = __w_pdfjs_require__(105);
4913module.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {
4914 var Base = global[NAME];
4915 var C = Base;
4916 var ADDER = IS_MAP ? 'set' : 'add';
4917 var proto = C && C.prototype;
4918 var O = {};
4919 var fixMethod = function fixMethod(KEY) {
4920 var fn = proto[KEY];
4921 redefine(proto, KEY, KEY == 'delete' ? function (a) {
4922 return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);
4923 } : KEY == 'has' ? function has(a) {
4924 return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);
4925 } : KEY == 'get' ? function get(a) {
4926 return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);
4927 } : KEY == 'add' ? function add(a) {
4928 fn.call(this, a === 0 ? 0 : a);
4929 return this;
4930 } : function set(a, b) {
4931 fn.call(this, a === 0 ? 0 : a, b);
4932 return this;
4933 });
4934 };
4935 if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {
4936 new C().entries().next();
4937 }))) {
4938 C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);
4939 redefineAll(C.prototype, methods);
4940 meta.NEED = true;
4941 } else {
4942 var instance = new C();
4943 var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;
4944 var THROWS_ON_PRIMITIVES = fails(function () {
4945 instance.has(1);
4946 });
4947 var ACCEPT_ITERABLES = $iterDetect(function (iter) {
4948 new C(iter);
4949 });
4950 var BUGGY_ZERO = !IS_WEAK && fails(function () {
4951 var $instance = new C();
4952 var index = 5;
4953 while (index--) {
4954 $instance[ADDER](index, index);
4955 }return !$instance.has(-0);
4956 });
4957 if (!ACCEPT_ITERABLES) {
4958 C = wrapper(function (target, iterable) {
4959 anInstance(target, C, NAME);
4960 var that = inheritIfRequired(new Base(), target, C);
4961 if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);
4962 return that;
4963 });
4964 C.prototype = proto;
4965 proto.constructor = C;
4966 }
4967 if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {
4968 fixMethod('delete');
4969 fixMethod('has');
4970 IS_MAP && fixMethod('get');
4971 }
4972 if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);
4973 if (IS_WEAK && proto.clear) delete proto.clear;
4974 }
4975 setToStringTag(C, NAME);
4976 O[NAME] = C;
4977 $export($export.G + $export.W + $export.F * (C != Base), O);
4978 if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);
4979 return C;
4980};
4981
4982/***/ }),
4983/* 105 */
4984/***/ (function(module, exports, __w_pdfjs_require__) {
4985
4986"use strict";
4987
4988
4989var isObject = __w_pdfjs_require__(2);
4990var setPrototypeOf = __w_pdfjs_require__(106).set;
4991module.exports = function (that, target, C) {
4992 var S = target.constructor;
4993 var P;
4994 if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {
4995 setPrototypeOf(that, P);
4996 }
4997 return that;
4998};
4999
5000/***/ }),
5001/* 106 */
5002/***/ (function(module, exports, __w_pdfjs_require__) {
5003
5004"use strict";
5005
5006
5007var isObject = __w_pdfjs_require__(2);
5008var anObject = __w_pdfjs_require__(6);
5009var check = function check(O, proto) {
5010 anObject(O);
5011 if (!isObject(proto) && proto !== null) throw TypeError(proto + ": can't set as prototype!");
5012};
5013module.exports = {
5014 set: Object.setPrototypeOf || ('__proto__' in {} ? function (test, buggy, set) {
5015 try {
5016 set = __w_pdfjs_require__(9)(Function.call, __w_pdfjs_require__(107).f(Object.prototype, '__proto__').set, 2);
5017 set(test, []);
5018 buggy = !(test instanceof Array);
5019 } catch (e) {
5020 buggy = true;
5021 }
5022 return function setPrototypeOf(O, proto) {
5023 check(O, proto);
5024 if (buggy) O.__proto__ = proto;else set(O, proto);
5025 return O;
5026 };
5027 }({}, false) : undefined),
5028 check: check
5029};
5030
5031/***/ }),
5032/* 107 */
5033/***/ (function(module, exports, __w_pdfjs_require__) {
5034
5035"use strict";
5036
5037
5038var pIE = __w_pdfjs_require__(38);
5039var createDesc = __w_pdfjs_require__(27);
5040var toIObject = __w_pdfjs_require__(16);
5041var toPrimitive = __w_pdfjs_require__(41);
5042var has = __w_pdfjs_require__(8);
5043var IE8_DOM_DEFINE = __w_pdfjs_require__(40);
5044var gOPD = Object.getOwnPropertyDescriptor;
5045exports.f = __w_pdfjs_require__(11) ? gOPD : function getOwnPropertyDescriptor(O, P) {
5046 O = toIObject(O);
5047 P = toPrimitive(P, true);
5048 if (IE8_DOM_DEFINE) try {
5049 return gOPD(O, P);
5050 } catch (e) {}
5051 if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);
5052};
5053
5054/***/ }),
5055/* 108 */
5056/***/ (function(module, exports, __w_pdfjs_require__) {
5057
5058"use strict";
5059
5060
5061__w_pdfjs_require__(109)('WeakMap');
5062
5063/***/ }),
5064/* 109 */
5065/***/ (function(module, exports, __w_pdfjs_require__) {
5066
5067"use strict";
5068
5069
5070var $export = __w_pdfjs_require__(3);
5071module.exports = function (COLLECTION) {
5072 $export($export.S, COLLECTION, {
5073 of: function of() {
5074 var length = arguments.length;
5075 var A = new Array(length);
5076 while (length--) {
5077 A[length] = arguments[length];
5078 }return new this(A);
5079 }
5080 });
5081};
5082
5083/***/ }),
5084/* 110 */
5085/***/ (function(module, exports, __w_pdfjs_require__) {
5086
5087"use strict";
5088
5089
5090__w_pdfjs_require__(111)('WeakMap');
5091
5092/***/ }),
5093/* 111 */
5094/***/ (function(module, exports, __w_pdfjs_require__) {
5095
5096"use strict";
5097
5098
5099var $export = __w_pdfjs_require__(3);
5100var aFunction = __w_pdfjs_require__(15);
5101var ctx = __w_pdfjs_require__(9);
5102var forOf = __w_pdfjs_require__(23);
5103module.exports = function (COLLECTION) {
5104 $export($export.S, COLLECTION, {
5105 from: function from(source) {
5106 var mapFn = arguments[1];
5107 var mapping, A, n, cb;
5108 aFunction(this);
5109 mapping = mapFn !== undefined;
5110 if (mapping) aFunction(mapFn);
5111 if (source == undefined) return new this();
5112 A = [];
5113 if (mapping) {
5114 n = 0;
5115 cb = ctx(mapFn, arguments[2], 2);
5116 forOf(source, false, function (nextItem) {
5117 A.push(cb(nextItem, n++));
5118 });
5119 } else {
5120 forOf(source, false, A.push, A);
5121 }
5122 return new this(A);
5123 }
5124 });
5125};
5126
5127/***/ }),
5128/* 112 */
5129/***/ (function(module, exports, __w_pdfjs_require__) {
5130
5131"use strict";
5132
5133
5134__w_pdfjs_require__(113);
5135module.exports = __w_pdfjs_require__(5).Object.values;
5136
5137/***/ }),
5138/* 113 */
5139/***/ (function(module, exports, __w_pdfjs_require__) {
5140
5141"use strict";
5142
5143
5144var $export = __w_pdfjs_require__(3);
5145var $values = __w_pdfjs_require__(114)(false);
5146$export($export.S, 'Object', {
5147 values: function values(it) {
5148 return $values(it);
5149 }
5150});
5151
5152/***/ }),
5153/* 114 */
5154/***/ (function(module, exports, __w_pdfjs_require__) {
5155
5156"use strict";
5157
5158
5159var getKeys = __w_pdfjs_require__(21);
5160var toIObject = __w_pdfjs_require__(16);
5161var isEnum = __w_pdfjs_require__(38).f;
5162module.exports = function (isEntries) {
5163 return function (it) {
5164 var O = toIObject(it);
5165 var keys = getKeys(O);
5166 var length = keys.length;
5167 var i = 0;
5168 var result = [];
5169 var key;
5170 while (length > i) {
5171 if (isEnum.call(O, key = keys[i++])) {
5172 result.push(isEntries ? [key, O[key]] : O[key]);
5173 }
5174 }return result;
5175 };
5176};
5177
5178/***/ }),
5179/* 115 */
5180/***/ (function(module, exports, __w_pdfjs_require__) {
5181
5182"use strict";
5183
5184
5185var isReadableStreamSupported = false;
5186if (typeof ReadableStream !== 'undefined') {
5187 try {
5188 new ReadableStream({
5189 start: function start(controller) {
5190 controller.close();
5191 }
5192 });
5193 isReadableStreamSupported = true;
5194 } catch (e) {}
5195}
5196if (isReadableStreamSupported) {
5197 exports.ReadableStream = ReadableStream;
5198} else {
5199 exports.ReadableStream = __w_pdfjs_require__(116).ReadableStream;
5200}
5201
5202/***/ }),
5203/* 116 */
5204/***/ (function(module, exports, __w_pdfjs_require__) {
5205
5206"use strict";
5207
5208
5209var _typeof2 = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
5210
5211(function (e, a) {
5212 for (var i in a) {
5213 e[i] = a[i];
5214 }
5215})(exports, function (modules) {
5216 var installedModules = {};
5217 function __w_pdfjs_require__(moduleId) {
5218 if (installedModules[moduleId]) return installedModules[moduleId].exports;
5219 var module = installedModules[moduleId] = {
5220 i: moduleId,
5221 l: false,
5222 exports: {}
5223 };
5224 modules[moduleId].call(module.exports, module, module.exports, __w_pdfjs_require__);
5225 module.l = true;
5226 return module.exports;
5227 }
5228 __w_pdfjs_require__.m = modules;
5229 __w_pdfjs_require__.c = installedModules;
5230 __w_pdfjs_require__.i = function (value) {
5231 return value;
5232 };
5233 __w_pdfjs_require__.d = function (exports, name, getter) {
5234 if (!__w_pdfjs_require__.o(exports, name)) {
5235 Object.defineProperty(exports, name, {
5236 configurable: false,
5237 enumerable: true,
5238 get: getter
5239 });
5240 }
5241 };
5242 __w_pdfjs_require__.n = function (module) {
5243 var getter = module && module.__esModule ? function getDefault() {
5244 return module['default'];
5245 } : function getModuleExports() {
5246 return module;
5247 };
5248 __w_pdfjs_require__.d(getter, 'a', getter);
5249 return getter;
5250 };
5251 __w_pdfjs_require__.o = function (object, property) {
5252 return Object.prototype.hasOwnProperty.call(object, property);
5253 };
5254 __w_pdfjs_require__.p = "";
5255 return __w_pdfjs_require__(__w_pdfjs_require__.s = 7);
5256}([function (module, exports, __w_pdfjs_require__) {
5257 "use strict";
5258
5259 var _typeof = typeof Symbol === "function" && _typeof2(Symbol.iterator) === "symbol" ? function (obj) {
5260 return typeof obj === 'undefined' ? 'undefined' : _typeof2(obj);
5261 } : function (obj) {
5262 return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj === 'undefined' ? 'undefined' : _typeof2(obj);
5263 };
5264 var _require = __w_pdfjs_require__(1),
5265 assert = _require.assert;
5266 function IsPropertyKey(argument) {
5267 return typeof argument === 'string' || (typeof argument === 'undefined' ? 'undefined' : _typeof(argument)) === 'symbol';
5268 }
5269 exports.typeIsObject = function (x) {
5270 return (typeof x === 'undefined' ? 'undefined' : _typeof(x)) === 'object' && x !== null || typeof x === 'function';
5271 };
5272 exports.createDataProperty = function (o, p, v) {
5273 assert(exports.typeIsObject(o));
5274 Object.defineProperty(o, p, {
5275 value: v,
5276 writable: true,
5277 enumerable: true,
5278 configurable: true
5279 });
5280 };
5281 exports.createArrayFromList = function (elements) {
5282 return elements.slice();
5283 };
5284 exports.ArrayBufferCopy = function (dest, destOffset, src, srcOffset, n) {
5285 new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset);
5286 };
5287 exports.CreateIterResultObject = function (value, done) {
5288 assert(typeof done === 'boolean');
5289 var obj = {};
5290 Object.defineProperty(obj, 'value', {
5291 value: value,
5292 enumerable: true,
5293 writable: true,
5294 configurable: true
5295 });
5296 Object.defineProperty(obj, 'done', {
5297 value: done,
5298 enumerable: true,
5299 writable: true,
5300 configurable: true
5301 });
5302 return obj;
5303 };
5304 exports.IsFiniteNonNegativeNumber = function (v) {
5305 if (Number.isNaN(v)) {
5306 return false;
5307 }
5308 if (v === Infinity) {
5309 return false;
5310 }
5311 if (v < 0) {
5312 return false;
5313 }
5314 return true;
5315 };
5316 function Call(F, V, args) {
5317 if (typeof F !== 'function') {
5318 throw new TypeError('Argument is not a function');
5319 }
5320 return Function.prototype.apply.call(F, V, args);
5321 }
5322 exports.InvokeOrNoop = function (O, P, args) {
5323 assert(O !== undefined);
5324 assert(IsPropertyKey(P));
5325 assert(Array.isArray(args));
5326 var method = O[P];
5327 if (method === undefined) {
5328 return undefined;
5329 }
5330 return Call(method, O, args);
5331 };
5332 exports.PromiseInvokeOrNoop = function (O, P, args) {
5333 assert(O !== undefined);
5334 assert(IsPropertyKey(P));
5335 assert(Array.isArray(args));
5336 try {
5337 return Promise.resolve(exports.InvokeOrNoop(O, P, args));
5338 } catch (returnValueE) {
5339 return Promise.reject(returnValueE);
5340 }
5341 };
5342 exports.PromiseInvokeOrPerformFallback = function (O, P, args, F, argsF) {
5343 assert(O !== undefined);
5344 assert(IsPropertyKey(P));
5345 assert(Array.isArray(args));
5346 assert(Array.isArray(argsF));
5347 var method = void 0;
5348 try {
5349 method = O[P];
5350 } catch (methodE) {
5351 return Promise.reject(methodE);
5352 }
5353 if (method === undefined) {
5354 return F.apply(null, argsF);
5355 }
5356 try {
5357 return Promise.resolve(Call(method, O, args));
5358 } catch (e) {
5359 return Promise.reject(e);
5360 }
5361 };
5362 exports.TransferArrayBuffer = function (O) {
5363 return O.slice();
5364 };
5365 exports.ValidateAndNormalizeHighWaterMark = function (highWaterMark) {
5366 highWaterMark = Number(highWaterMark);
5367 if (Number.isNaN(highWaterMark) || highWaterMark < 0) {
5368 throw new RangeError('highWaterMark property of a queuing strategy must be non-negative and non-NaN');
5369 }
5370 return highWaterMark;
5371 };
5372 exports.ValidateAndNormalizeQueuingStrategy = function (size, highWaterMark) {
5373 if (size !== undefined && typeof size !== 'function') {
5374 throw new TypeError('size property of a queuing strategy must be a function');
5375 }
5376 highWaterMark = exports.ValidateAndNormalizeHighWaterMark(highWaterMark);
5377 return {
5378 size: size,
5379 highWaterMark: highWaterMark
5380 };
5381 };
5382}, function (module, exports, __w_pdfjs_require__) {
5383 "use strict";
5384
5385 function rethrowAssertionErrorRejection(e) {
5386 if (e && e.constructor === AssertionError) {
5387 setTimeout(function () {
5388 throw e;
5389 }, 0);
5390 }
5391 }
5392 function AssertionError(message) {
5393 this.name = 'AssertionError';
5394 this.message = message || '';
5395 this.stack = new Error().stack;
5396 }
5397 AssertionError.prototype = Object.create(Error.prototype);
5398 AssertionError.prototype.constructor = AssertionError;
5399 function assert(value, message) {
5400 if (!value) {
5401 throw new AssertionError(message);
5402 }
5403 }
5404 module.exports = {
5405 rethrowAssertionErrorRejection: rethrowAssertionErrorRejection,
5406 AssertionError: AssertionError,
5407 assert: assert
5408 };
5409}, function (module, exports, __w_pdfjs_require__) {
5410 "use strict";
5411
5412 var _createClass = function () {
5413 function defineProperties(target, props) {
5414 for (var i = 0; i < props.length; i++) {
5415 var descriptor = props[i];
5416 descriptor.enumerable = descriptor.enumerable || false;
5417 descriptor.configurable = true;
5418 if ("value" in descriptor) descriptor.writable = true;
5419 Object.defineProperty(target, descriptor.key, descriptor);
5420 }
5421 }
5422 return function (Constructor, protoProps, staticProps) {
5423 if (protoProps) defineProperties(Constructor.prototype, protoProps);
5424 if (staticProps) defineProperties(Constructor, staticProps);
5425 return Constructor;
5426 };
5427 }();
5428 function _classCallCheck(instance, Constructor) {
5429 if (!(instance instanceof Constructor)) {
5430 throw new TypeError("Cannot call a class as a function");
5431 }
5432 }
5433 var _require = __w_pdfjs_require__(0),
5434 InvokeOrNoop = _require.InvokeOrNoop,
5435 PromiseInvokeOrNoop = _require.PromiseInvokeOrNoop,
5436 ValidateAndNormalizeQueuingStrategy = _require.ValidateAndNormalizeQueuingStrategy,
5437 typeIsObject = _require.typeIsObject;
5438 var _require2 = __w_pdfjs_require__(1),
5439 assert = _require2.assert,
5440 rethrowAssertionErrorRejection = _require2.rethrowAssertionErrorRejection;
5441 var _require3 = __w_pdfjs_require__(3),
5442 DequeueValue = _require3.DequeueValue,
5443 EnqueueValueWithSize = _require3.EnqueueValueWithSize,
5444 PeekQueueValue = _require3.PeekQueueValue,
5445 ResetQueue = _require3.ResetQueue;
5446 var WritableStream = function () {
5447 function WritableStream() {
5448 var underlyingSink = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
5449 var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
5450 size = _ref.size,
5451 _ref$highWaterMark = _ref.highWaterMark,
5452 highWaterMark = _ref$highWaterMark === undefined ? 1 : _ref$highWaterMark;
5453 _classCallCheck(this, WritableStream);
5454 this._state = 'writable';
5455 this._storedError = undefined;
5456 this._writer = undefined;
5457 this._writableStreamController = undefined;
5458 this._writeRequests = [];
5459 this._inFlightWriteRequest = undefined;
5460 this._closeRequest = undefined;
5461 this._inFlightCloseRequest = undefined;
5462 this._pendingAbortRequest = undefined;
5463 this._backpressure = false;
5464 var type = underlyingSink.type;
5465 if (type !== undefined) {
5466 throw new RangeError('Invalid type is specified');
5467 }
5468 this._writableStreamController = new WritableStreamDefaultController(this, underlyingSink, size, highWaterMark);
5469 this._writableStreamController.__startSteps();
5470 }
5471 _createClass(WritableStream, [{
5472 key: 'abort',
5473 value: function abort(reason) {
5474 if (IsWritableStream(this) === false) {
5475 return Promise.reject(streamBrandCheckException('abort'));
5476 }
5477 if (IsWritableStreamLocked(this) === true) {
5478 return Promise.reject(new TypeError('Cannot abort a stream that already has a writer'));
5479 }
5480 return WritableStreamAbort(this, reason);
5481 }
5482 }, {
5483 key: 'getWriter',
5484 value: function getWriter() {
5485 if (IsWritableStream(this) === false) {
5486 throw streamBrandCheckException('getWriter');
5487 }
5488 return AcquireWritableStreamDefaultWriter(this);
5489 }
5490 }, {
5491 key: 'locked',
5492 get: function get() {
5493 if (IsWritableStream(this) === false) {
5494 throw streamBrandCheckException('locked');
5495 }
5496 return IsWritableStreamLocked(this);
5497 }
5498 }]);
5499 return WritableStream;
5500 }();
5501 module.exports = {
5502 AcquireWritableStreamDefaultWriter: AcquireWritableStreamDefaultWriter,
5503 IsWritableStream: IsWritableStream,
5504 IsWritableStreamLocked: IsWritableStreamLocked,
5505 WritableStream: WritableStream,
5506 WritableStreamAbort: WritableStreamAbort,
5507 WritableStreamDefaultControllerError: WritableStreamDefaultControllerError,
5508 WritableStreamDefaultWriterCloseWithErrorPropagation: WritableStreamDefaultWriterCloseWithErrorPropagation,
5509 WritableStreamDefaultWriterRelease: WritableStreamDefaultWriterRelease,
5510 WritableStreamDefaultWriterWrite: WritableStreamDefaultWriterWrite,
5511 WritableStreamCloseQueuedOrInFlight: WritableStreamCloseQueuedOrInFlight
5512 };
5513 function AcquireWritableStreamDefaultWriter(stream) {
5514 return new WritableStreamDefaultWriter(stream);
5515 }
5516 function IsWritableStream(x) {
5517 if (!typeIsObject(x)) {
5518 return false;
5519 }
5520 if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) {
5521 return false;
5522 }
5523 return true;
5524 }
5525 function IsWritableStreamLocked(stream) {
5526 assert(IsWritableStream(stream) === true, 'IsWritableStreamLocked should only be used on known writable streams');
5527 if (stream._writer === undefined) {
5528 return false;
5529 }
5530 return true;
5531 }
5532 function WritableStreamAbort(stream, reason) {
5533 var state = stream._state;
5534 if (state === 'closed') {
5535 return Promise.resolve(undefined);
5536 }
5537 if (state === 'errored') {
5538 return Promise.reject(stream._storedError);
5539 }
5540 var error = new TypeError('Requested to abort');
5541 if (stream._pendingAbortRequest !== undefined) {
5542 return Promise.reject(error);
5543 }
5544 assert(state === 'writable' || state === 'erroring', 'state must be writable or erroring');
5545 var wasAlreadyErroring = false;
5546 if (state === 'erroring') {
5547 wasAlreadyErroring = true;
5548 reason = undefined;
5549 }
5550 var promise = new Promise(function (resolve, reject) {
5551 stream._pendingAbortRequest = {
5552 _resolve: resolve,
5553 _reject: reject,
5554 _reason: reason,
5555 _wasAlreadyErroring: wasAlreadyErroring
5556 };
5557 });
5558 if (wasAlreadyErroring === false) {
5559 WritableStreamStartErroring(stream, error);
5560 }
5561 return promise;
5562 }
5563 function WritableStreamAddWriteRequest(stream) {
5564 assert(IsWritableStreamLocked(stream) === true);
5565 assert(stream._state === 'writable');
5566 var promise = new Promise(function (resolve, reject) {
5567 var writeRequest = {
5568 _resolve: resolve,
5569 _reject: reject
5570 };
5571 stream._writeRequests.push(writeRequest);
5572 });
5573 return promise;
5574 }
5575 function WritableStreamDealWithRejection(stream, error) {
5576 var state = stream._state;
5577 if (state === 'writable') {
5578 WritableStreamStartErroring(stream, error);
5579 return;
5580 }
5581 assert(state === 'erroring');
5582 WritableStreamFinishErroring(stream);
5583 }
5584 function WritableStreamStartErroring(stream, reason) {
5585 assert(stream._storedError === undefined, 'stream._storedError === undefined');
5586 assert(stream._state === 'writable', 'state must be writable');
5587 var controller = stream._writableStreamController;
5588 assert(controller !== undefined, 'controller must not be undefined');
5589 stream._state = 'erroring';
5590 stream._storedError = reason;
5591 var writer = stream._writer;
5592 if (writer !== undefined) {
5593 WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason);
5594 }
5595 if (WritableStreamHasOperationMarkedInFlight(stream) === false && controller._started === true) {
5596 WritableStreamFinishErroring(stream);
5597 }
5598 }
5599 function WritableStreamFinishErroring(stream) {
5600 assert(stream._state === 'erroring', 'stream._state === erroring');
5601 assert(WritableStreamHasOperationMarkedInFlight(stream) === false, 'WritableStreamHasOperationMarkedInFlight(stream) === false');
5602 stream._state = 'errored';
5603 stream._writableStreamController.__errorSteps();
5604 var storedError = stream._storedError;
5605 for (var i = 0; i < stream._writeRequests.length; i++) {
5606 var writeRequest = stream._writeRequests[i];
5607 writeRequest._reject(storedError);
5608 }
5609 stream._writeRequests = [];
5610 if (stream._pendingAbortRequest === undefined) {
5611 WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);
5612 return;
5613 }
5614 var abortRequest = stream._pendingAbortRequest;
5615 stream._pendingAbortRequest = undefined;
5616 if (abortRequest._wasAlreadyErroring === true) {
5617 abortRequest._reject(storedError);
5618 WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);
5619 return;
5620 }
5621 var promise = stream._writableStreamController.__abortSteps(abortRequest._reason);
5622 promise.then(function () {
5623 abortRequest._resolve();
5624 WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);
5625 }, function (reason) {
5626 abortRequest._reject(reason);
5627 WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream);
5628 });
5629 }
5630 function WritableStreamFinishInFlightWrite(stream) {
5631 assert(stream._inFlightWriteRequest !== undefined);
5632 stream._inFlightWriteRequest._resolve(undefined);
5633 stream._inFlightWriteRequest = undefined;
5634 }
5635 function WritableStreamFinishInFlightWriteWithError(stream, error) {
5636 assert(stream._inFlightWriteRequest !== undefined);
5637 stream._inFlightWriteRequest._reject(error);
5638 stream._inFlightWriteRequest = undefined;
5639 assert(stream._state === 'writable' || stream._state === 'erroring');
5640 WritableStreamDealWithRejection(stream, error);
5641 }
5642 function WritableStreamFinishInFlightClose(stream) {
5643 assert(stream._inFlightCloseRequest !== undefined);
5644 stream._inFlightCloseRequest._resolve(undefined);
5645 stream._inFlightCloseRequest = undefined;
5646 var state = stream._state;
5647 assert(state === 'writable' || state === 'erroring');
5648 if (state === 'erroring') {
5649 stream._storedError = undefined;
5650 if (stream._pendingAbortRequest !== undefined) {
5651 stream._pendingAbortRequest._resolve();
5652 stream._pendingAbortRequest = undefined;
5653 }
5654 }
5655 stream._state = 'closed';
5656 var writer = stream._writer;
5657 if (writer !== undefined) {
5658 defaultWriterClosedPromiseResolve(writer);
5659 }
5660 assert(stream._pendingAbortRequest === undefined, 'stream._pendingAbortRequest === undefined');
5661 assert(stream._storedError === undefined, 'stream._storedError === undefined');
5662 }
5663 function WritableStreamFinishInFlightCloseWithError(stream, error) {
5664 assert(stream._inFlightCloseRequest !== undefined);
5665 stream._inFlightCloseRequest._reject(error);
5666 stream._inFlightCloseRequest = undefined;
5667 assert(stream._state === 'writable' || stream._state === 'erroring');
5668 if (stream._pendingAbortRequest !== undefined) {
5669 stream._pendingAbortRequest._reject(error);
5670 stream._pendingAbortRequest = undefined;
5671 }
5672 WritableStreamDealWithRejection(stream, error);
5673 }
5674 function WritableStreamCloseQueuedOrInFlight(stream) {
5675 if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) {
5676 return false;
5677 }
5678 return true;
5679 }
5680 function WritableStreamHasOperationMarkedInFlight(stream) {
5681 if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) {
5682 return false;
5683 }
5684 return true;
5685 }
5686 function WritableStreamMarkCloseRequestInFlight(stream) {
5687 assert(stream._inFlightCloseRequest === undefined);
5688 assert(stream._closeRequest !== undefined);
5689 stream._inFlightCloseRequest = stream._closeRequest;
5690 stream._closeRequest = undefined;
5691 }
5692 function WritableStreamMarkFirstWriteRequestInFlight(stream) {
5693 assert(stream._inFlightWriteRequest === undefined, 'there must be no pending write request');
5694 assert(stream._writeRequests.length !== 0, 'writeRequests must not be empty');
5695 stream._inFlightWriteRequest = stream._writeRequests.shift();
5696 }
5697 function WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream) {
5698 assert(stream._state === 'errored', '_stream_.[[state]] is `"errored"`');
5699 if (stream._closeRequest !== undefined) {
5700 assert(stream._inFlightCloseRequest === undefined);
5701 stream._closeRequest._reject(stream._storedError);
5702 stream._closeRequest = undefined;
5703 }
5704 var writer = stream._writer;
5705 if (writer !== undefined) {
5706 defaultWriterClosedPromiseReject(writer, stream._storedError);
5707 writer._closedPromise.catch(function () {});
5708 }
5709 }
5710 function WritableStreamUpdateBackpressure(stream, backpressure) {
5711 assert(stream._state === 'writable');
5712 assert(WritableStreamCloseQueuedOrInFlight(stream) === false);
5713 var writer = stream._writer;
5714 if (writer !== undefined && backpressure !== stream._backpressure) {
5715 if (backpressure === true) {
5716 defaultWriterReadyPromiseReset(writer);
5717 } else {
5718 assert(backpressure === false);
5719 defaultWriterReadyPromiseResolve(writer);
5720 }
5721 }
5722 stream._backpressure = backpressure;
5723 }
5724 var WritableStreamDefaultWriter = function () {
5725 function WritableStreamDefaultWriter(stream) {
5726 _classCallCheck(this, WritableStreamDefaultWriter);
5727 if (IsWritableStream(stream) === false) {
5728 throw new TypeError('WritableStreamDefaultWriter can only be constructed with a WritableStream instance');
5729 }
5730 if (IsWritableStreamLocked(stream) === true) {
5731 throw new TypeError('This stream has already been locked for exclusive writing by another writer');
5732 }
5733 this._ownerWritableStream = stream;
5734 stream._writer = this;
5735 var state = stream._state;
5736 if (state === 'writable') {
5737 if (WritableStreamCloseQueuedOrInFlight(stream) === false && stream._backpressure === true) {
5738 defaultWriterReadyPromiseInitialize(this);
5739 } else {
5740 defaultWriterReadyPromiseInitializeAsResolved(this);
5741 }
5742 defaultWriterClosedPromiseInitialize(this);
5743 } else if (state === 'erroring') {
5744 defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError);
5745 this._readyPromise.catch(function () {});
5746 defaultWriterClosedPromiseInitialize(this);
5747 } else if (state === 'closed') {
5748 defaultWriterReadyPromiseInitializeAsResolved(this);
5749 defaultWriterClosedPromiseInitializeAsResolved(this);
5750 } else {
5751 assert(state === 'errored', 'state must be errored');
5752 var storedError = stream._storedError;
5753 defaultWriterReadyPromiseInitializeAsRejected(this, storedError);
5754 this._readyPromise.catch(function () {});
5755 defaultWriterClosedPromiseInitializeAsRejected(this, storedError);
5756 this._closedPromise.catch(function () {});
5757 }
5758 }
5759 _createClass(WritableStreamDefaultWriter, [{
5760 key: 'abort',
5761 value: function abort(reason) {
5762 if (IsWritableStreamDefaultWriter(this) === false) {
5763 return Promise.reject(defaultWriterBrandCheckException('abort'));
5764 }
5765 if (this._ownerWritableStream === undefined) {
5766 return Promise.reject(defaultWriterLockException('abort'));
5767 }
5768 return WritableStreamDefaultWriterAbort(this, reason);
5769 }
5770 }, {
5771 key: 'close',
5772 value: function close() {
5773 if (IsWritableStreamDefaultWriter(this) === false) {
5774 return Promise.reject(defaultWriterBrandCheckException('close'));
5775 }
5776 var stream = this._ownerWritableStream;
5777 if (stream === undefined) {
5778 return Promise.reject(defaultWriterLockException('close'));
5779 }
5780 if (WritableStreamCloseQueuedOrInFlight(stream) === true) {
5781 return Promise.reject(new TypeError('cannot close an already-closing stream'));
5782 }
5783 return WritableStreamDefaultWriterClose(this);
5784 }
5785 }, {
5786 key: 'releaseLock',
5787 value: function releaseLock() {
5788 if (IsWritableStreamDefaultWriter(this) === false) {
5789 throw defaultWriterBrandCheckException('releaseLock');
5790 }
5791 var stream = this._ownerWritableStream;
5792 if (stream === undefined) {
5793 return;
5794 }
5795 assert(stream._writer !== undefined);
5796 WritableStreamDefaultWriterRelease(this);
5797 }
5798 }, {
5799 key: 'write',
5800 value: function write(chunk) {
5801 if (IsWritableStreamDefaultWriter(this) === false) {
5802 return Promise.reject(defaultWriterBrandCheckException('write'));
5803 }
5804 if (this._ownerWritableStream === undefined) {
5805 return Promise.reject(defaultWriterLockException('write to'));
5806 }
5807 return WritableStreamDefaultWriterWrite(this, chunk);
5808 }
5809 }, {
5810 key: 'closed',
5811 get: function get() {
5812 if (IsWritableStreamDefaultWriter(this) === false) {
5813 return Promise.reject(defaultWriterBrandCheckException('closed'));
5814 }
5815 return this._closedPromise;
5816 }
5817 }, {
5818 key: 'desiredSize',
5819 get: function get() {
5820 if (IsWritableStreamDefaultWriter(this) === false) {
5821 throw defaultWriterBrandCheckException('desiredSize');
5822 }
5823 if (this._ownerWritableStream === undefined) {
5824 throw defaultWriterLockException('desiredSize');
5825 }
5826 return WritableStreamDefaultWriterGetDesiredSize(this);
5827 }
5828 }, {
5829 key: 'ready',
5830 get: function get() {
5831 if (IsWritableStreamDefaultWriter(this) === false) {
5832 return Promise.reject(defaultWriterBrandCheckException('ready'));
5833 }
5834 return this._readyPromise;
5835 }
5836 }]);
5837 return WritableStreamDefaultWriter;
5838 }();
5839 function IsWritableStreamDefaultWriter(x) {
5840 if (!typeIsObject(x)) {
5841 return false;
5842 }
5843 if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) {
5844 return false;
5845 }
5846 return true;
5847 }
5848 function WritableStreamDefaultWriterAbort(writer, reason) {
5849 var stream = writer._ownerWritableStream;
5850 assert(stream !== undefined);
5851 return WritableStreamAbort(stream, reason);
5852 }
5853 function WritableStreamDefaultWriterClose(writer) {
5854 var stream = writer._ownerWritableStream;
5855 assert(stream !== undefined);
5856 var state = stream._state;
5857 if (state === 'closed' || state === 'errored') {
5858 return Promise.reject(new TypeError('The stream (in ' + state + ' state) is not in the writable state and cannot be closed'));
5859 }
5860 assert(state === 'writable' || state === 'erroring');
5861 assert(WritableStreamCloseQueuedOrInFlight(stream) === false);
5862 var promise = new Promise(function (resolve, reject) {
5863 var closeRequest = {
5864 _resolve: resolve,
5865 _reject: reject
5866 };
5867 stream._closeRequest = closeRequest;
5868 });
5869 if (stream._backpressure === true && state === 'writable') {
5870 defaultWriterReadyPromiseResolve(writer);
5871 }
5872 WritableStreamDefaultControllerClose(stream._writableStreamController);
5873 return promise;
5874 }
5875 function WritableStreamDefaultWriterCloseWithErrorPropagation(writer) {
5876 var stream = writer._ownerWritableStream;
5877 assert(stream !== undefined);
5878 var state = stream._state;
5879 if (WritableStreamCloseQueuedOrInFlight(stream) === true || state === 'closed') {
5880 return Promise.resolve();
5881 }
5882 if (state === 'errored') {
5883 return Promise.reject(stream._storedError);
5884 }
5885 assert(state === 'writable' || state === 'erroring');
5886 return WritableStreamDefaultWriterClose(writer);
5887 }
5888 function WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, error) {
5889 if (writer._closedPromiseState === 'pending') {
5890 defaultWriterClosedPromiseReject(writer, error);
5891 } else {
5892 defaultWriterClosedPromiseResetToRejected(writer, error);
5893 }
5894 writer._closedPromise.catch(function () {});
5895 }
5896 function WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, error) {
5897 if (writer._readyPromiseState === 'pending') {
5898 defaultWriterReadyPromiseReject(writer, error);
5899 } else {
5900 defaultWriterReadyPromiseResetToRejected(writer, error);
5901 }
5902 writer._readyPromise.catch(function () {});
5903 }
5904 function WritableStreamDefaultWriterGetDesiredSize(writer) {
5905 var stream = writer._ownerWritableStream;
5906 var state = stream._state;
5907 if (state === 'errored' || state === 'erroring') {
5908 return null;
5909 }
5910 if (state === 'closed') {
5911 return 0;
5912 }
5913 return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController);
5914 }
5915 function WritableStreamDefaultWriterRelease(writer) {
5916 var stream = writer._ownerWritableStream;
5917 assert(stream !== undefined);
5918 assert(stream._writer === writer);
5919 var releasedError = new TypeError('Writer was released and can no longer be used to monitor the stream\'s closedness');
5920 WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError);
5921 WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError);
5922 stream._writer = undefined;
5923 writer._ownerWritableStream = undefined;
5924 }
5925 function WritableStreamDefaultWriterWrite(writer, chunk) {
5926 var stream = writer._ownerWritableStream;
5927 assert(stream !== undefined);
5928 var controller = stream._writableStreamController;
5929 var chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk);
5930 if (stream !== writer._ownerWritableStream) {
5931 return Promise.reject(defaultWriterLockException('write to'));
5932 }
5933 var state = stream._state;
5934 if (state === 'errored') {
5935 return Promise.reject(stream._storedError);
5936 }
5937 if (WritableStreamCloseQueuedOrInFlight(stream) === true || state === 'closed') {
5938 return Promise.reject(new TypeError('The stream is closing or closed and cannot be written to'));
5939 }
5940 if (state === 'erroring') {
5941 return Promise.reject(stream._storedError);
5942 }
5943 assert(state === 'writable');
5944 var promise = WritableStreamAddWriteRequest(stream);
5945 WritableStreamDefaultControllerWrite(controller, chunk, chunkSize);
5946 return promise;
5947 }
5948 var WritableStreamDefaultController = function () {
5949 function WritableStreamDefaultController(stream, underlyingSink, size, highWaterMark) {
5950 _classCallCheck(this, WritableStreamDefaultController);
5951 if (IsWritableStream(stream) === false) {
5952 throw new TypeError('WritableStreamDefaultController can only be constructed with a WritableStream instance');
5953 }
5954 if (stream._writableStreamController !== undefined) {
5955 throw new TypeError('WritableStreamDefaultController instances can only be created by the WritableStream constructor');
5956 }
5957 this._controlledWritableStream = stream;
5958 this._underlyingSink = underlyingSink;
5959 this._queue = undefined;
5960 this._queueTotalSize = undefined;
5961 ResetQueue(this);
5962 this._started = false;
5963 var normalizedStrategy = ValidateAndNormalizeQueuingStrategy(size, highWaterMark);
5964 this._strategySize = normalizedStrategy.size;
5965 this._strategyHWM = normalizedStrategy.highWaterMark;
5966 var backpressure = WritableStreamDefaultControllerGetBackpressure(this);
5967 WritableStreamUpdateBackpressure(stream, backpressure);
5968 }
5969 _createClass(WritableStreamDefaultController, [{
5970 key: 'error',
5971 value: function error(e) {
5972 if (IsWritableStreamDefaultController(this) === false) {
5973 throw new TypeError('WritableStreamDefaultController.prototype.error can only be used on a WritableStreamDefaultController');
5974 }
5975 var state = this._controlledWritableStream._state;
5976 if (state !== 'writable') {
5977 return;
5978 }
5979 WritableStreamDefaultControllerError(this, e);
5980 }
5981 }, {
5982 key: '__abortSteps',
5983 value: function __abortSteps(reason) {
5984 return PromiseInvokeOrNoop(this._underlyingSink, 'abort', [reason]);
5985 }
5986 }, {
5987 key: '__errorSteps',
5988 value: function __errorSteps() {
5989 ResetQueue(this);
5990 }
5991 }, {
5992 key: '__startSteps',
5993 value: function __startSteps() {
5994 var _this = this;
5995 var startResult = InvokeOrNoop(this._underlyingSink, 'start', [this]);
5996 var stream = this._controlledWritableStream;
5997 Promise.resolve(startResult).then(function () {
5998 assert(stream._state === 'writable' || stream._state === 'erroring');
5999 _this._started = true;
6000 WritableStreamDefaultControllerAdvanceQueueIfNeeded(_this);
6001 }, function (r) {
6002 assert(stream._state === 'writable' || stream._state === 'erroring');
6003 _this._started = true;
6004 WritableStreamDealWithRejection(stream, r);
6005 }).catch(rethrowAssertionErrorRejection);
6006 }
6007 }]);
6008 return WritableStreamDefaultController;
6009 }();
6010 function WritableStreamDefaultControllerClose(controller) {
6011 EnqueueValueWithSize(controller, 'close', 0);
6012 WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);
6013 }
6014 function WritableStreamDefaultControllerGetChunkSize(controller, chunk) {
6015 var strategySize = controller._strategySize;
6016 if (strategySize === undefined) {
6017 return 1;
6018 }
6019 try {
6020 return strategySize(chunk);
6021 } catch (chunkSizeE) {
6022 WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);
6023 return 1;
6024 }
6025 }
6026 function WritableStreamDefaultControllerGetDesiredSize(controller) {
6027 return controller._strategyHWM - controller._queueTotalSize;
6028 }
6029 function WritableStreamDefaultControllerWrite(controller, chunk, chunkSize) {
6030 var writeRecord = { chunk: chunk };
6031 try {
6032 EnqueueValueWithSize(controller, writeRecord, chunkSize);
6033 } catch (enqueueE) {
6034 WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);
6035 return;
6036 }
6037 var stream = controller._controlledWritableStream;
6038 if (WritableStreamCloseQueuedOrInFlight(stream) === false && stream._state === 'writable') {
6039 var backpressure = WritableStreamDefaultControllerGetBackpressure(controller);
6040 WritableStreamUpdateBackpressure(stream, backpressure);
6041 }
6042 WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);
6043 }
6044 function IsWritableStreamDefaultController(x) {
6045 if (!typeIsObject(x)) {
6046 return false;
6047 }
6048 if (!Object.prototype.hasOwnProperty.call(x, '_underlyingSink')) {
6049 return false;
6050 }
6051 return true;
6052 }
6053 function WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller) {
6054 var stream = controller._controlledWritableStream;
6055 if (controller._started === false) {
6056 return;
6057 }
6058 if (stream._inFlightWriteRequest !== undefined) {
6059 return;
6060 }
6061 var state = stream._state;
6062 if (state === 'closed' || state === 'errored') {
6063 return;
6064 }
6065 if (state === 'erroring') {
6066 WritableStreamFinishErroring(stream);
6067 return;
6068 }
6069 if (controller._queue.length === 0) {
6070 return;
6071 }
6072 var writeRecord = PeekQueueValue(controller);
6073 if (writeRecord === 'close') {
6074 WritableStreamDefaultControllerProcessClose(controller);
6075 } else {
6076 WritableStreamDefaultControllerProcessWrite(controller, writeRecord.chunk);
6077 }
6078 }
6079 function WritableStreamDefaultControllerErrorIfNeeded(controller, error) {
6080 if (controller._controlledWritableStream._state === 'writable') {
6081 WritableStreamDefaultControllerError(controller, error);
6082 }
6083 }
6084 function WritableStreamDefaultControllerProcessClose(controller) {
6085 var stream = controller._controlledWritableStream;
6086 WritableStreamMarkCloseRequestInFlight(stream);
6087 DequeueValue(controller);
6088 assert(controller._queue.length === 0, 'queue must be empty once the final write record is dequeued');
6089 var sinkClosePromise = PromiseInvokeOrNoop(controller._underlyingSink, 'close', []);
6090 sinkClosePromise.then(function () {
6091 WritableStreamFinishInFlightClose(stream);
6092 }, function (reason) {
6093 WritableStreamFinishInFlightCloseWithError(stream, reason);
6094 }).catch(rethrowAssertionErrorRejection);
6095 }
6096 function WritableStreamDefaultControllerProcessWrite(controller, chunk) {
6097 var stream = controller._controlledWritableStream;
6098 WritableStreamMarkFirstWriteRequestInFlight(stream);
6099 var sinkWritePromise = PromiseInvokeOrNoop(controller._underlyingSink, 'write', [chunk, controller]);
6100 sinkWritePromise.then(function () {
6101 WritableStreamFinishInFlightWrite(stream);
6102 var state = stream._state;
6103 assert(state === 'writable' || state === 'erroring');
6104 DequeueValue(controller);
6105 if (WritableStreamCloseQueuedOrInFlight(stream) === false && state === 'writable') {
6106 var backpressure = WritableStreamDefaultControllerGetBackpressure(controller);
6107 WritableStreamUpdateBackpressure(stream, backpressure);
6108 }
6109 WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller);
6110 }, function (reason) {
6111 WritableStreamFinishInFlightWriteWithError(stream, reason);
6112 }).catch(rethrowAssertionErrorRejection);
6113 }
6114 function WritableStreamDefaultControllerGetBackpressure(controller) {
6115 var desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller);
6116 return desiredSize <= 0;
6117 }
6118 function WritableStreamDefaultControllerError(controller, error) {
6119 var stream = controller._controlledWritableStream;
6120 assert(stream._state === 'writable');
6121 WritableStreamStartErroring(stream, error);
6122 }
6123 function streamBrandCheckException(name) {
6124 return new TypeError('WritableStream.prototype.' + name + ' can only be used on a WritableStream');
6125 }
6126 function defaultWriterBrandCheckException(name) {
6127 return new TypeError('WritableStreamDefaultWriter.prototype.' + name + ' can only be used on a WritableStreamDefaultWriter');
6128 }
6129 function defaultWriterLockException(name) {
6130 return new TypeError('Cannot ' + name + ' a stream using a released writer');
6131 }
6132 function defaultWriterClosedPromiseInitialize(writer) {
6133 writer._closedPromise = new Promise(function (resolve, reject) {
6134 writer._closedPromise_resolve = resolve;
6135 writer._closedPromise_reject = reject;
6136 writer._closedPromiseState = 'pending';
6137 });
6138 }
6139 function defaultWriterClosedPromiseInitializeAsRejected(writer, reason) {
6140 writer._closedPromise = Promise.reject(reason);
6141 writer._closedPromise_resolve = undefined;
6142 writer._closedPromise_reject = undefined;
6143 writer._closedPromiseState = 'rejected';
6144 }
6145 function defaultWriterClosedPromiseInitializeAsResolved(writer) {
6146 writer._closedPromise = Promise.resolve(undefined);
6147 writer._closedPromise_resolve = undefined;
6148 writer._closedPromise_reject = undefined;
6149 writer._closedPromiseState = 'resolved';
6150 }
6151 function defaultWriterClosedPromiseReject(writer, reason) {
6152 assert(writer._closedPromise_resolve !== undefined, 'writer._closedPromise_resolve !== undefined');
6153 assert(writer._closedPromise_reject !== undefined, 'writer._closedPromise_reject !== undefined');
6154 assert(writer._closedPromiseState === 'pending', 'writer._closedPromiseState is pending');
6155 writer._closedPromise_reject(reason);
6156 writer._closedPromise_resolve = undefined;
6157 writer._closedPromise_reject = undefined;
6158 writer._closedPromiseState = 'rejected';
6159 }
6160 function defaultWriterClosedPromiseResetToRejected(writer, reason) {
6161 assert(writer._closedPromise_resolve === undefined, 'writer._closedPromise_resolve === undefined');
6162 assert(writer._closedPromise_reject === undefined, 'writer._closedPromise_reject === undefined');
6163 assert(writer._closedPromiseState !== 'pending', 'writer._closedPromiseState is not pending');
6164 writer._closedPromise = Promise.reject(reason);
6165 writer._closedPromiseState = 'rejected';
6166 }
6167 function defaultWriterClosedPromiseResolve(writer) {
6168 assert(writer._closedPromise_resolve !== undefined, 'writer._closedPromise_resolve !== undefined');
6169 assert(writer._closedPromise_reject !== undefined, 'writer._closedPromise_reject !== undefined');
6170 assert(writer._closedPromiseState === 'pending', 'writer._closedPromiseState is pending');
6171 writer._closedPromise_resolve(undefined);
6172 writer._closedPromise_resolve = undefined;
6173 writer._closedPromise_reject = undefined;
6174 writer._closedPromiseState = 'resolved';
6175 }
6176 function defaultWriterReadyPromiseInitialize(writer) {
6177 writer._readyPromise = new Promise(function (resolve, reject) {
6178 writer._readyPromise_resolve = resolve;
6179 writer._readyPromise_reject = reject;
6180 });
6181 writer._readyPromiseState = 'pending';
6182 }
6183 function defaultWriterReadyPromiseInitializeAsRejected(writer, reason) {
6184 writer._readyPromise = Promise.reject(reason);
6185 writer._readyPromise_resolve = undefined;
6186 writer._readyPromise_reject = undefined;
6187 writer._readyPromiseState = 'rejected';
6188 }
6189 function defaultWriterReadyPromiseInitializeAsResolved(writer) {
6190 writer._readyPromise = Promise.resolve(undefined);
6191 writer._readyPromise_resolve = undefined;
6192 writer._readyPromise_reject = undefined;
6193 writer._readyPromiseState = 'fulfilled';
6194 }
6195 function defaultWriterReadyPromiseReject(writer, reason) {
6196 assert(writer._readyPromise_resolve !== undefined, 'writer._readyPromise_resolve !== undefined');
6197 assert(writer._readyPromise_reject !== undefined, 'writer._readyPromise_reject !== undefined');
6198 writer._readyPromise_reject(reason);
6199 writer._readyPromise_resolve = undefined;
6200 writer._readyPromise_reject = undefined;
6201 writer._readyPromiseState = 'rejected';
6202 }
6203 function defaultWriterReadyPromiseReset(writer) {
6204 assert(writer._readyPromise_resolve === undefined, 'writer._readyPromise_resolve === undefined');
6205 assert(writer._readyPromise_reject === undefined, 'writer._readyPromise_reject === undefined');
6206 writer._readyPromise = new Promise(function (resolve, reject) {
6207 writer._readyPromise_resolve = resolve;
6208 writer._readyPromise_reject = reject;
6209 });
6210 writer._readyPromiseState = 'pending';
6211 }
6212 function defaultWriterReadyPromiseResetToRejected(writer, reason) {
6213 assert(writer._readyPromise_resolve === undefined, 'writer._readyPromise_resolve === undefined');
6214 assert(writer._readyPromise_reject === undefined, 'writer._readyPromise_reject === undefined');
6215 writer._readyPromise = Promise.reject(reason);
6216 writer._readyPromiseState = 'rejected';
6217 }
6218 function defaultWriterReadyPromiseResolve(writer) {
6219 assert(writer._readyPromise_resolve !== undefined, 'writer._readyPromise_resolve !== undefined');
6220 assert(writer._readyPromise_reject !== undefined, 'writer._readyPromise_reject !== undefined');
6221 writer._readyPromise_resolve(undefined);
6222 writer._readyPromise_resolve = undefined;
6223 writer._readyPromise_reject = undefined;
6224 writer._readyPromiseState = 'fulfilled';
6225 }
6226}, function (module, exports, __w_pdfjs_require__) {
6227 "use strict";
6228
6229 var _require = __w_pdfjs_require__(0),
6230 IsFiniteNonNegativeNumber = _require.IsFiniteNonNegativeNumber;
6231 var _require2 = __w_pdfjs_require__(1),
6232 assert = _require2.assert;
6233 exports.DequeueValue = function (container) {
6234 assert('_queue' in container && '_queueTotalSize' in container, 'Spec-level failure: DequeueValue should only be used on containers with [[queue]] and [[queueTotalSize]].');
6235 assert(container._queue.length > 0, 'Spec-level failure: should never dequeue from an empty queue.');
6236 var pair = container._queue.shift();
6237 container._queueTotalSize -= pair.size;
6238 if (container._queueTotalSize < 0) {
6239 container._queueTotalSize = 0;
6240 }
6241 return pair.value;
6242 };
6243 exports.EnqueueValueWithSize = function (container, value, size) {
6244 assert('_queue' in container && '_queueTotalSize' in container, 'Spec-level failure: EnqueueValueWithSize should only be used on containers with [[queue]] and ' + '[[queueTotalSize]].');
6245 size = Number(size);
6246 if (!IsFiniteNonNegativeNumber(size)) {
6247 throw new RangeError('Size must be a finite, non-NaN, non-negative number.');
6248 }
6249 container._queue.push({
6250 value: value,
6251 size: size
6252 });
6253 container._queueTotalSize += size;
6254 };
6255 exports.PeekQueueValue = function (container) {
6256 assert('_queue' in container && '_queueTotalSize' in container, 'Spec-level failure: PeekQueueValue should only be used on containers with [[queue]] and [[queueTotalSize]].');
6257 assert(container._queue.length > 0, 'Spec-level failure: should never peek at an empty queue.');
6258 var pair = container._queue[0];
6259 return pair.value;
6260 };
6261 exports.ResetQueue = function (container) {
6262 assert('_queue' in container && '_queueTotalSize' in container, 'Spec-level failure: ResetQueue should only be used on containers with [[queue]] and [[queueTotalSize]].');
6263 container._queue = [];
6264 container._queueTotalSize = 0;
6265 };
6266}, function (module, exports, __w_pdfjs_require__) {
6267 "use strict";
6268
6269 var _createClass = function () {
6270 function defineProperties(target, props) {
6271 for (var i = 0; i < props.length; i++) {
6272 var descriptor = props[i];
6273 descriptor.enumerable = descriptor.enumerable || false;
6274 descriptor.configurable = true;
6275 if ("value" in descriptor) descriptor.writable = true;
6276 Object.defineProperty(target, descriptor.key, descriptor);
6277 }
6278 }
6279 return function (Constructor, protoProps, staticProps) {
6280 if (protoProps) defineProperties(Constructor.prototype, protoProps);
6281 if (staticProps) defineProperties(Constructor, staticProps);
6282 return Constructor;
6283 };
6284 }();
6285 function _classCallCheck(instance, Constructor) {
6286 if (!(instance instanceof Constructor)) {
6287 throw new TypeError("Cannot call a class as a function");
6288 }
6289 }
6290 var _require = __w_pdfjs_require__(0),
6291 ArrayBufferCopy = _require.ArrayBufferCopy,
6292 CreateIterResultObject = _require.CreateIterResultObject,
6293 IsFiniteNonNegativeNumber = _require.IsFiniteNonNegativeNumber,
6294 InvokeOrNoop = _require.InvokeOrNoop,
6295 PromiseInvokeOrNoop = _require.PromiseInvokeOrNoop,
6296 TransferArrayBuffer = _require.TransferArrayBuffer,
6297 ValidateAndNormalizeQueuingStrategy = _require.ValidateAndNormalizeQueuingStrategy,
6298 ValidateAndNormalizeHighWaterMark = _require.ValidateAndNormalizeHighWaterMark;
6299 var _require2 = __w_pdfjs_require__(0),
6300 createArrayFromList = _require2.createArrayFromList,
6301 createDataProperty = _require2.createDataProperty,
6302 typeIsObject = _require2.typeIsObject;
6303 var _require3 = __w_pdfjs_require__(1),
6304 assert = _require3.assert,
6305 rethrowAssertionErrorRejection = _require3.rethrowAssertionErrorRejection;
6306 var _require4 = __w_pdfjs_require__(3),
6307 DequeueValue = _require4.DequeueValue,
6308 EnqueueValueWithSize = _require4.EnqueueValueWithSize,
6309 ResetQueue = _require4.ResetQueue;
6310 var _require5 = __w_pdfjs_require__(2),
6311 AcquireWritableStreamDefaultWriter = _require5.AcquireWritableStreamDefaultWriter,
6312 IsWritableStream = _require5.IsWritableStream,
6313 IsWritableStreamLocked = _require5.IsWritableStreamLocked,
6314 WritableStreamAbort = _require5.WritableStreamAbort,
6315 WritableStreamDefaultWriterCloseWithErrorPropagation = _require5.WritableStreamDefaultWriterCloseWithErrorPropagation,
6316 WritableStreamDefaultWriterRelease = _require5.WritableStreamDefaultWriterRelease,
6317 WritableStreamDefaultWriterWrite = _require5.WritableStreamDefaultWriterWrite,
6318 WritableStreamCloseQueuedOrInFlight = _require5.WritableStreamCloseQueuedOrInFlight;
6319 var ReadableStream = function () {
6320 function ReadableStream() {
6321 var underlyingSource = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
6322 var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
6323 size = _ref.size,
6324 highWaterMark = _ref.highWaterMark;
6325 _classCallCheck(this, ReadableStream);
6326 this._state = 'readable';
6327 this._reader = undefined;
6328 this._storedError = undefined;
6329 this._disturbed = false;
6330 this._readableStreamController = undefined;
6331 var type = underlyingSource.type;
6332 var typeString = String(type);
6333 if (typeString === 'bytes') {
6334 if (highWaterMark === undefined) {
6335 highWaterMark = 0;
6336 }
6337 this._readableStreamController = new ReadableByteStreamController(this, underlyingSource, highWaterMark);
6338 } else if (type === undefined) {
6339 if (highWaterMark === undefined) {
6340 highWaterMark = 1;
6341 }
6342 this._readableStreamController = new ReadableStreamDefaultController(this, underlyingSource, size, highWaterMark);
6343 } else {
6344 throw new RangeError('Invalid type is specified');
6345 }
6346 }
6347 _createClass(ReadableStream, [{
6348 key: 'cancel',
6349 value: function cancel(reason) {
6350 if (IsReadableStream(this) === false) {
6351 return Promise.reject(streamBrandCheckException('cancel'));
6352 }
6353 if (IsReadableStreamLocked(this) === true) {
6354 return Promise.reject(new TypeError('Cannot cancel a stream that already has a reader'));
6355 }
6356 return ReadableStreamCancel(this, reason);
6357 }
6358 }, {
6359 key: 'getReader',
6360 value: function getReader() {
6361 var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
6362 mode = _ref2.mode;
6363 if (IsReadableStream(this) === false) {
6364 throw streamBrandCheckException('getReader');
6365 }
6366 if (mode === undefined) {
6367 return AcquireReadableStreamDefaultReader(this);
6368 }
6369 mode = String(mode);
6370 if (mode === 'byob') {
6371 return AcquireReadableStreamBYOBReader(this);
6372 }
6373 throw new RangeError('Invalid mode is specified');
6374 }
6375 }, {
6376 key: 'pipeThrough',
6377 value: function pipeThrough(_ref3, options) {
6378 var writable = _ref3.writable,
6379 readable = _ref3.readable;
6380 var promise = this.pipeTo(writable, options);
6381 ifIsObjectAndHasAPromiseIsHandledInternalSlotSetPromiseIsHandledToTrue(promise);
6382 return readable;
6383 }
6384 }, {
6385 key: 'pipeTo',
6386 value: function pipeTo(dest) {
6387 var _this = this;
6388 var _ref4 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
6389 preventClose = _ref4.preventClose,
6390 preventAbort = _ref4.preventAbort,
6391 preventCancel = _ref4.preventCancel;
6392 if (IsReadableStream(this) === false) {
6393 return Promise.reject(streamBrandCheckException('pipeTo'));
6394 }
6395 if (IsWritableStream(dest) === false) {
6396 return Promise.reject(new TypeError('ReadableStream.prototype.pipeTo\'s first argument must be a WritableStream'));
6397 }
6398 preventClose = Boolean(preventClose);
6399 preventAbort = Boolean(preventAbort);
6400 preventCancel = Boolean(preventCancel);
6401 if (IsReadableStreamLocked(this) === true) {
6402 return Promise.reject(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream'));
6403 }
6404 if (IsWritableStreamLocked(dest) === true) {
6405 return Promise.reject(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream'));
6406 }
6407 var reader = AcquireReadableStreamDefaultReader(this);
6408 var writer = AcquireWritableStreamDefaultWriter(dest);
6409 var shuttingDown = false;
6410 var currentWrite = Promise.resolve();
6411 return new Promise(function (resolve, reject) {
6412 function pipeLoop() {
6413 currentWrite = Promise.resolve();
6414 if (shuttingDown === true) {
6415 return Promise.resolve();
6416 }
6417 return writer._readyPromise.then(function () {
6418 return ReadableStreamDefaultReaderRead(reader).then(function (_ref5) {
6419 var value = _ref5.value,
6420 done = _ref5.done;
6421 if (done === true) {
6422 return;
6423 }
6424 currentWrite = WritableStreamDefaultWriterWrite(writer, value).catch(function () {});
6425 });
6426 }).then(pipeLoop);
6427 }
6428 isOrBecomesErrored(_this, reader._closedPromise, function (storedError) {
6429 if (preventAbort === false) {
6430 shutdownWithAction(function () {
6431 return WritableStreamAbort(dest, storedError);
6432 }, true, storedError);
6433 } else {
6434 shutdown(true, storedError);
6435 }
6436 });
6437 isOrBecomesErrored(dest, writer._closedPromise, function (storedError) {
6438 if (preventCancel === false) {
6439 shutdownWithAction(function () {
6440 return ReadableStreamCancel(_this, storedError);
6441 }, true, storedError);
6442 } else {
6443 shutdown(true, storedError);
6444 }
6445 });
6446 isOrBecomesClosed(_this, reader._closedPromise, function () {
6447 if (preventClose === false) {
6448 shutdownWithAction(function () {
6449 return WritableStreamDefaultWriterCloseWithErrorPropagation(writer);
6450 });
6451 } else {
6452 shutdown();
6453 }
6454 });
6455 if (WritableStreamCloseQueuedOrInFlight(dest) === true || dest._state === 'closed') {
6456 var destClosed = new TypeError('the destination writable stream closed before all data could be piped to it');
6457 if (preventCancel === false) {
6458 shutdownWithAction(function () {
6459 return ReadableStreamCancel(_this, destClosed);
6460 }, true, destClosed);
6461 } else {
6462 shutdown(true, destClosed);
6463 }
6464 }
6465 pipeLoop().catch(function (err) {
6466 currentWrite = Promise.resolve();
6467 rethrowAssertionErrorRejection(err);
6468 });
6469 function waitForWritesToFinish() {
6470 var oldCurrentWrite = currentWrite;
6471 return currentWrite.then(function () {
6472 return oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined;
6473 });
6474 }
6475 function isOrBecomesErrored(stream, promise, action) {
6476 if (stream._state === 'errored') {
6477 action(stream._storedError);
6478 } else {
6479 promise.catch(action).catch(rethrowAssertionErrorRejection);
6480 }
6481 }
6482 function isOrBecomesClosed(stream, promise, action) {
6483 if (stream._state === 'closed') {
6484 action();
6485 } else {
6486 promise.then(action).catch(rethrowAssertionErrorRejection);
6487 }
6488 }
6489 function shutdownWithAction(action, originalIsError, originalError) {
6490 if (shuttingDown === true) {
6491 return;
6492 }
6493 shuttingDown = true;
6494 if (dest._state === 'writable' && WritableStreamCloseQueuedOrInFlight(dest) === false) {
6495 waitForWritesToFinish().then(doTheRest);
6496 } else {
6497 doTheRest();
6498 }
6499 function doTheRest() {
6500 action().then(function () {
6501 return finalize(originalIsError, originalError);
6502 }, function (newError) {
6503 return finalize(true, newError);
6504 }).catch(rethrowAssertionErrorRejection);
6505 }
6506 }
6507 function shutdown(isError, error) {
6508 if (shuttingDown === true) {
6509 return;
6510 }
6511 shuttingDown = true;
6512 if (dest._state === 'writable' && WritableStreamCloseQueuedOrInFlight(dest) === false) {
6513 waitForWritesToFinish().then(function () {
6514 return finalize(isError, error);
6515 }).catch(rethrowAssertionErrorRejection);
6516 } else {
6517 finalize(isError, error);
6518 }
6519 }
6520 function finalize(isError, error) {
6521 WritableStreamDefaultWriterRelease(writer);
6522 ReadableStreamReaderGenericRelease(reader);
6523 if (isError) {
6524 reject(error);
6525 } else {
6526 resolve(undefined);
6527 }
6528 }
6529 });
6530 }
6531 }, {
6532 key: 'tee',
6533 value: function tee() {
6534 if (IsReadableStream(this) === false) {
6535 throw streamBrandCheckException('tee');
6536 }
6537 var branches = ReadableStreamTee(this, false);
6538 return createArrayFromList(branches);
6539 }
6540 }, {
6541 key: 'locked',
6542 get: function get() {
6543 if (IsReadableStream(this) === false) {
6544 throw streamBrandCheckException('locked');
6545 }
6546 return IsReadableStreamLocked(this);
6547 }
6548 }]);
6549 return ReadableStream;
6550 }();
6551 module.exports = {
6552 ReadableStream: ReadableStream,
6553 IsReadableStreamDisturbed: IsReadableStreamDisturbed,
6554 ReadableStreamDefaultControllerClose: ReadableStreamDefaultControllerClose,
6555 ReadableStreamDefaultControllerEnqueue: ReadableStreamDefaultControllerEnqueue,
6556 ReadableStreamDefaultControllerError: ReadableStreamDefaultControllerError,
6557 ReadableStreamDefaultControllerGetDesiredSize: ReadableStreamDefaultControllerGetDesiredSize
6558 };
6559 function AcquireReadableStreamBYOBReader(stream) {
6560 return new ReadableStreamBYOBReader(stream);
6561 }
6562 function AcquireReadableStreamDefaultReader(stream) {
6563 return new ReadableStreamDefaultReader(stream);
6564 }
6565 function IsReadableStream(x) {
6566 if (!typeIsObject(x)) {
6567 return false;
6568 }
6569 if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) {
6570 return false;
6571 }
6572 return true;
6573 }
6574 function IsReadableStreamDisturbed(stream) {
6575 assert(IsReadableStream(stream) === true, 'IsReadableStreamDisturbed should only be used on known readable streams');
6576 return stream._disturbed;
6577 }
6578 function IsReadableStreamLocked(stream) {
6579 assert(IsReadableStream(stream) === true, 'IsReadableStreamLocked should only be used on known readable streams');
6580 if (stream._reader === undefined) {
6581 return false;
6582 }
6583 return true;
6584 }
6585 function ReadableStreamTee(stream, cloneForBranch2) {
6586 assert(IsReadableStream(stream) === true);
6587 assert(typeof cloneForBranch2 === 'boolean');
6588 var reader = AcquireReadableStreamDefaultReader(stream);
6589 var teeState = {
6590 closedOrErrored: false,
6591 canceled1: false,
6592 canceled2: false,
6593 reason1: undefined,
6594 reason2: undefined
6595 };
6596 teeState.promise = new Promise(function (resolve) {
6597 teeState._resolve = resolve;
6598 });
6599 var pull = create_ReadableStreamTeePullFunction();
6600 pull._reader = reader;
6601 pull._teeState = teeState;
6602 pull._cloneForBranch2 = cloneForBranch2;
6603 var cancel1 = create_ReadableStreamTeeBranch1CancelFunction();
6604 cancel1._stream = stream;
6605 cancel1._teeState = teeState;
6606 var cancel2 = create_ReadableStreamTeeBranch2CancelFunction();
6607 cancel2._stream = stream;
6608 cancel2._teeState = teeState;
6609 var underlyingSource1 = Object.create(Object.prototype);
6610 createDataProperty(underlyingSource1, 'pull', pull);
6611 createDataProperty(underlyingSource1, 'cancel', cancel1);
6612 var branch1Stream = new ReadableStream(underlyingSource1);
6613 var underlyingSource2 = Object.create(Object.prototype);
6614 createDataProperty(underlyingSource2, 'pull', pull);
6615 createDataProperty(underlyingSource2, 'cancel', cancel2);
6616 var branch2Stream = new ReadableStream(underlyingSource2);
6617 pull._branch1 = branch1Stream._readableStreamController;
6618 pull._branch2 = branch2Stream._readableStreamController;
6619 reader._closedPromise.catch(function (r) {
6620 if (teeState.closedOrErrored === true) {
6621 return;
6622 }
6623 ReadableStreamDefaultControllerError(pull._branch1, r);
6624 ReadableStreamDefaultControllerError(pull._branch2, r);
6625 teeState.closedOrErrored = true;
6626 });
6627 return [branch1Stream, branch2Stream];
6628 }
6629 function create_ReadableStreamTeePullFunction() {
6630 function f() {
6631 var reader = f._reader,
6632 branch1 = f._branch1,
6633 branch2 = f._branch2,
6634 teeState = f._teeState;
6635 return ReadableStreamDefaultReaderRead(reader).then(function (result) {
6636 assert(typeIsObject(result));
6637 var value = result.value;
6638 var done = result.done;
6639 assert(typeof done === 'boolean');
6640 if (done === true && teeState.closedOrErrored === false) {
6641 if (teeState.canceled1 === false) {
6642 ReadableStreamDefaultControllerClose(branch1);
6643 }
6644 if (teeState.canceled2 === false) {
6645 ReadableStreamDefaultControllerClose(branch2);
6646 }
6647 teeState.closedOrErrored = true;
6648 }
6649 if (teeState.closedOrErrored === true) {
6650 return;
6651 }
6652 var value1 = value;
6653 var value2 = value;
6654 if (teeState.canceled1 === false) {
6655 ReadableStreamDefaultControllerEnqueue(branch1, value1);
6656 }
6657 if (teeState.canceled2 === false) {
6658 ReadableStreamDefaultControllerEnqueue(branch2, value2);
6659 }
6660 });
6661 }
6662 return f;
6663 }
6664 function create_ReadableStreamTeeBranch1CancelFunction() {
6665 function f(reason) {
6666 var stream = f._stream,
6667 teeState = f._teeState;
6668 teeState.canceled1 = true;
6669 teeState.reason1 = reason;
6670 if (teeState.canceled2 === true) {
6671 var compositeReason = createArrayFromList([teeState.reason1, teeState.reason2]);
6672 var cancelResult = ReadableStreamCancel(stream, compositeReason);
6673 teeState._resolve(cancelResult);
6674 }
6675 return teeState.promise;
6676 }
6677 return f;
6678 }
6679 function create_ReadableStreamTeeBranch2CancelFunction() {
6680 function f(reason) {
6681 var stream = f._stream,
6682 teeState = f._teeState;
6683 teeState.canceled2 = true;
6684 teeState.reason2 = reason;
6685 if (teeState.canceled1 === true) {
6686 var compositeReason = createArrayFromList([teeState.reason1, teeState.reason2]);
6687 var cancelResult = ReadableStreamCancel(stream, compositeReason);
6688 teeState._resolve(cancelResult);
6689 }
6690 return teeState.promise;
6691 }
6692 return f;
6693 }
6694 function ReadableStreamAddReadIntoRequest(stream) {
6695 assert(IsReadableStreamBYOBReader(stream._reader) === true);
6696 assert(stream._state === 'readable' || stream._state === 'closed');
6697 var promise = new Promise(function (resolve, reject) {
6698 var readIntoRequest = {
6699 _resolve: resolve,
6700 _reject: reject
6701 };
6702 stream._reader._readIntoRequests.push(readIntoRequest);
6703 });
6704 return promise;
6705 }
6706 function ReadableStreamAddReadRequest(stream) {
6707 assert(IsReadableStreamDefaultReader(stream._reader) === true);
6708 assert(stream._state === 'readable');
6709 var promise = new Promise(function (resolve, reject) {
6710 var readRequest = {
6711 _resolve: resolve,
6712 _reject: reject
6713 };
6714 stream._reader._readRequests.push(readRequest);
6715 });
6716 return promise;
6717 }
6718 function ReadableStreamCancel(stream, reason) {
6719 stream._disturbed = true;
6720 if (stream._state === 'closed') {
6721 return Promise.resolve(undefined);
6722 }
6723 if (stream._state === 'errored') {
6724 return Promise.reject(stream._storedError);
6725 }
6726 ReadableStreamClose(stream);
6727 var sourceCancelPromise = stream._readableStreamController.__cancelSteps(reason);
6728 return sourceCancelPromise.then(function () {
6729 return undefined;
6730 });
6731 }
6732 function ReadableStreamClose(stream) {
6733 assert(stream._state === 'readable');
6734 stream._state = 'closed';
6735 var reader = stream._reader;
6736 if (reader === undefined) {
6737 return undefined;
6738 }
6739 if (IsReadableStreamDefaultReader(reader) === true) {
6740 for (var i = 0; i < reader._readRequests.length; i++) {
6741 var _resolve = reader._readRequests[i]._resolve;
6742 _resolve(CreateIterResultObject(undefined, true));
6743 }
6744 reader._readRequests = [];
6745 }
6746 defaultReaderClosedPromiseResolve(reader);
6747 return undefined;
6748 }
6749 function ReadableStreamError(stream, e) {
6750 assert(IsReadableStream(stream) === true, 'stream must be ReadableStream');
6751 assert(stream._state === 'readable', 'state must be readable');
6752 stream._state = 'errored';
6753 stream._storedError = e;
6754 var reader = stream._reader;
6755 if (reader === undefined) {
6756 return undefined;
6757 }
6758 if (IsReadableStreamDefaultReader(reader) === true) {
6759 for (var i = 0; i < reader._readRequests.length; i++) {
6760 var readRequest = reader._readRequests[i];
6761 readRequest._reject(e);
6762 }
6763 reader._readRequests = [];
6764 } else {
6765 assert(IsReadableStreamBYOBReader(reader), 'reader must be ReadableStreamBYOBReader');
6766 for (var _i = 0; _i < reader._readIntoRequests.length; _i++) {
6767 var readIntoRequest = reader._readIntoRequests[_i];
6768 readIntoRequest._reject(e);
6769 }
6770 reader._readIntoRequests = [];
6771 }
6772 defaultReaderClosedPromiseReject(reader, e);
6773 reader._closedPromise.catch(function () {});
6774 }
6775 function ReadableStreamFulfillReadIntoRequest(stream, chunk, done) {
6776 var reader = stream._reader;
6777 assert(reader._readIntoRequests.length > 0);
6778 var readIntoRequest = reader._readIntoRequests.shift();
6779 readIntoRequest._resolve(CreateIterResultObject(chunk, done));
6780 }
6781 function ReadableStreamFulfillReadRequest(stream, chunk, done) {
6782 var reader = stream._reader;
6783 assert(reader._readRequests.length > 0);
6784 var readRequest = reader._readRequests.shift();
6785 readRequest._resolve(CreateIterResultObject(chunk, done));
6786 }
6787 function ReadableStreamGetNumReadIntoRequests(stream) {
6788 return stream._reader._readIntoRequests.length;
6789 }
6790 function ReadableStreamGetNumReadRequests(stream) {
6791 return stream._reader._readRequests.length;
6792 }
6793 function ReadableStreamHasBYOBReader(stream) {
6794 var reader = stream._reader;
6795 if (reader === undefined) {
6796 return false;
6797 }
6798 if (IsReadableStreamBYOBReader(reader) === false) {
6799 return false;
6800 }
6801 return true;
6802 }
6803 function ReadableStreamHasDefaultReader(stream) {
6804 var reader = stream._reader;
6805 if (reader === undefined) {
6806 return false;
6807 }
6808 if (IsReadableStreamDefaultReader(reader) === false) {
6809 return false;
6810 }
6811 return true;
6812 }
6813 var ReadableStreamDefaultReader = function () {
6814 function ReadableStreamDefaultReader(stream) {
6815 _classCallCheck(this, ReadableStreamDefaultReader);
6816 if (IsReadableStream(stream) === false) {
6817 throw new TypeError('ReadableStreamDefaultReader can only be constructed with a ReadableStream instance');
6818 }
6819 if (IsReadableStreamLocked(stream) === true) {
6820 throw new TypeError('This stream has already been locked for exclusive reading by another reader');
6821 }
6822 ReadableStreamReaderGenericInitialize(this, stream);
6823 this._readRequests = [];
6824 }
6825 _createClass(ReadableStreamDefaultReader, [{
6826 key: 'cancel',
6827 value: function cancel(reason) {
6828 if (IsReadableStreamDefaultReader(this) === false) {
6829 return Promise.reject(defaultReaderBrandCheckException('cancel'));
6830 }
6831 if (this._ownerReadableStream === undefined) {
6832 return Promise.reject(readerLockException('cancel'));
6833 }
6834 return ReadableStreamReaderGenericCancel(this, reason);
6835 }
6836 }, {
6837 key: 'read',
6838 value: function read() {
6839 if (IsReadableStreamDefaultReader(this) === false) {
6840 return Promise.reject(defaultReaderBrandCheckException('read'));
6841 }
6842 if (this._ownerReadableStream === undefined) {
6843 return Promise.reject(readerLockException('read from'));
6844 }
6845 return ReadableStreamDefaultReaderRead(this);
6846 }
6847 }, {
6848 key: 'releaseLock',
6849 value: function releaseLock() {
6850 if (IsReadableStreamDefaultReader(this) === false) {
6851 throw defaultReaderBrandCheckException('releaseLock');
6852 }
6853 if (this._ownerReadableStream === undefined) {
6854 return;
6855 }
6856 if (this._readRequests.length > 0) {
6857 throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');
6858 }
6859 ReadableStreamReaderGenericRelease(this);
6860 }
6861 }, {
6862 key: 'closed',
6863 get: function get() {
6864 if (IsReadableStreamDefaultReader(this) === false) {
6865 return Promise.reject(defaultReaderBrandCheckException('closed'));
6866 }
6867 return this._closedPromise;
6868 }
6869 }]);
6870 return ReadableStreamDefaultReader;
6871 }();
6872 var ReadableStreamBYOBReader = function () {
6873 function ReadableStreamBYOBReader(stream) {
6874 _classCallCheck(this, ReadableStreamBYOBReader);
6875 if (!IsReadableStream(stream)) {
6876 throw new TypeError('ReadableStreamBYOBReader can only be constructed with a ReadableStream instance given a ' + 'byte source');
6877 }
6878 if (IsReadableByteStreamController(stream._readableStreamController) === false) {
6879 throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' + 'source');
6880 }
6881 if (IsReadableStreamLocked(stream)) {
6882 throw new TypeError('This stream has already been locked for exclusive reading by another reader');
6883 }
6884 ReadableStreamReaderGenericInitialize(this, stream);
6885 this._readIntoRequests = [];
6886 }
6887 _createClass(ReadableStreamBYOBReader, [{
6888 key: 'cancel',
6889 value: function cancel(reason) {
6890 if (!IsReadableStreamBYOBReader(this)) {
6891 return Promise.reject(byobReaderBrandCheckException('cancel'));
6892 }
6893 if (this._ownerReadableStream === undefined) {
6894 return Promise.reject(readerLockException('cancel'));
6895 }
6896 return ReadableStreamReaderGenericCancel(this, reason);
6897 }
6898 }, {
6899 key: 'read',
6900 value: function read(view) {
6901 if (!IsReadableStreamBYOBReader(this)) {
6902 return Promise.reject(byobReaderBrandCheckException('read'));
6903 }
6904 if (this._ownerReadableStream === undefined) {
6905 return Promise.reject(readerLockException('read from'));
6906 }
6907 if (!ArrayBuffer.isView(view)) {
6908 return Promise.reject(new TypeError('view must be an array buffer view'));
6909 }
6910 if (view.byteLength === 0) {
6911 return Promise.reject(new TypeError('view must have non-zero byteLength'));
6912 }
6913 return ReadableStreamBYOBReaderRead(this, view);
6914 }
6915 }, {
6916 key: 'releaseLock',
6917 value: function releaseLock() {
6918 if (!IsReadableStreamBYOBReader(this)) {
6919 throw byobReaderBrandCheckException('releaseLock');
6920 }
6921 if (this._ownerReadableStream === undefined) {
6922 return;
6923 }
6924 if (this._readIntoRequests.length > 0) {
6925 throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled');
6926 }
6927 ReadableStreamReaderGenericRelease(this);
6928 }
6929 }, {
6930 key: 'closed',
6931 get: function get() {
6932 if (!IsReadableStreamBYOBReader(this)) {
6933 return Promise.reject(byobReaderBrandCheckException('closed'));
6934 }
6935 return this._closedPromise;
6936 }
6937 }]);
6938 return ReadableStreamBYOBReader;
6939 }();
6940 function IsReadableStreamBYOBReader(x) {
6941 if (!typeIsObject(x)) {
6942 return false;
6943 }
6944 if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) {
6945 return false;
6946 }
6947 return true;
6948 }
6949 function IsReadableStreamDefaultReader(x) {
6950 if (!typeIsObject(x)) {
6951 return false;
6952 }
6953 if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) {
6954 return false;
6955 }
6956 return true;
6957 }
6958 function ReadableStreamReaderGenericInitialize(reader, stream) {
6959 reader._ownerReadableStream = stream;
6960 stream._reader = reader;
6961 if (stream._state === 'readable') {
6962 defaultReaderClosedPromiseInitialize(reader);
6963 } else if (stream._state === 'closed') {
6964 defaultReaderClosedPromiseInitializeAsResolved(reader);
6965 } else {
6966 assert(stream._state === 'errored', 'state must be errored');
6967 defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError);
6968 reader._closedPromise.catch(function () {});
6969 }
6970 }
6971 function ReadableStreamReaderGenericCancel(reader, reason) {
6972 var stream = reader._ownerReadableStream;
6973 assert(stream !== undefined);
6974 return ReadableStreamCancel(stream, reason);
6975 }
6976 function ReadableStreamReaderGenericRelease(reader) {
6977 assert(reader._ownerReadableStream !== undefined);
6978 assert(reader._ownerReadableStream._reader === reader);
6979 if (reader._ownerReadableStream._state === 'readable') {
6980 defaultReaderClosedPromiseReject(reader, new TypeError('Reader was released and can no longer be used to monitor the stream\'s closedness'));
6981 } else {
6982 defaultReaderClosedPromiseResetToRejected(reader, new TypeError('Reader was released and can no longer be used to monitor the stream\'s closedness'));
6983 }
6984 reader._closedPromise.catch(function () {});
6985 reader._ownerReadableStream._reader = undefined;
6986 reader._ownerReadableStream = undefined;
6987 }
6988 function ReadableStreamBYOBReaderRead(reader, view) {
6989 var stream = reader._ownerReadableStream;
6990 assert(stream !== undefined);
6991 stream._disturbed = true;
6992 if (stream._state === 'errored') {
6993 return Promise.reject(stream._storedError);
6994 }
6995 return ReadableByteStreamControllerPullInto(stream._readableStreamController, view);
6996 }
6997 function ReadableStreamDefaultReaderRead(reader) {
6998 var stream = reader._ownerReadableStream;
6999 assert(stream !== undefined);
7000 stream._disturbed = true;
7001 if (stream._state === 'closed') {
7002 return Promise.resolve(CreateIterResultObject(undefined, true));
7003 }
7004 if (stream._state === 'errored') {
7005 return Promise.reject(stream._storedError);
7006 }
7007 assert(stream._state === 'readable');
7008 return stream._readableStreamController.__pullSteps();
7009 }
7010 var ReadableStreamDefaultController = function () {
7011 function ReadableStreamDefaultController(stream, underlyingSource, size, highWaterMark) {
7012 _classCallCheck(this, ReadableStreamDefaultController);
7013 if (IsReadableStream(stream) === false) {
7014 throw new TypeError('ReadableStreamDefaultController can only be constructed with a ReadableStream instance');
7015 }
7016 if (stream._readableStreamController !== undefined) {
7017 throw new TypeError('ReadableStreamDefaultController instances can only be created by the ReadableStream constructor');
7018 }
7019 this._controlledReadableStream = stream;
7020 this._underlyingSource = underlyingSource;
7021 this._queue = undefined;
7022 this._queueTotalSize = undefined;
7023 ResetQueue(this);
7024 this._started = false;
7025 this._closeRequested = false;
7026 this._pullAgain = false;
7027 this._pulling = false;
7028 var normalizedStrategy = ValidateAndNormalizeQueuingStrategy(size, highWaterMark);
7029 this._strategySize = normalizedStrategy.size;
7030 this._strategyHWM = normalizedStrategy.highWaterMark;
7031 var controller = this;
7032 var startResult = InvokeOrNoop(underlyingSource, 'start', [this]);
7033 Promise.resolve(startResult).then(function () {
7034 controller._started = true;
7035 assert(controller._pulling === false);
7036 assert(controller._pullAgain === false);
7037 ReadableStreamDefaultControllerCallPullIfNeeded(controller);
7038 }, function (r) {
7039 ReadableStreamDefaultControllerErrorIfNeeded(controller, r);
7040 }).catch(rethrowAssertionErrorRejection);
7041 }
7042 _createClass(ReadableStreamDefaultController, [{
7043 key: 'close',
7044 value: function close() {
7045 if (IsReadableStreamDefaultController(this) === false) {
7046 throw defaultControllerBrandCheckException('close');
7047 }
7048 if (this._closeRequested === true) {
7049 throw new TypeError('The stream has already been closed; do not close it again!');
7050 }
7051 var state = this._controlledReadableStream._state;
7052 if (state !== 'readable') {
7053 throw new TypeError('The stream (in ' + state + ' state) is not in the readable state and cannot be closed');
7054 }
7055 ReadableStreamDefaultControllerClose(this);
7056 }
7057 }, {
7058 key: 'enqueue',
7059 value: function enqueue(chunk) {
7060 if (IsReadableStreamDefaultController(this) === false) {
7061 throw defaultControllerBrandCheckException('enqueue');
7062 }
7063 if (this._closeRequested === true) {
7064 throw new TypeError('stream is closed or draining');
7065 }
7066 var state = this._controlledReadableStream._state;
7067 if (state !== 'readable') {
7068 throw new TypeError('The stream (in ' + state + ' state) is not in the readable state and cannot be enqueued to');
7069 }
7070 return ReadableStreamDefaultControllerEnqueue(this, chunk);
7071 }
7072 }, {
7073 key: 'error',
7074 value: function error(e) {
7075 if (IsReadableStreamDefaultController(this) === false) {
7076 throw defaultControllerBrandCheckException('error');
7077 }
7078 var stream = this._controlledReadableStream;
7079 if (stream._state !== 'readable') {
7080 throw new TypeError('The stream is ' + stream._state + ' and so cannot be errored');
7081 }
7082 ReadableStreamDefaultControllerError(this, e);
7083 }
7084 }, {
7085 key: '__cancelSteps',
7086 value: function __cancelSteps(reason) {
7087 ResetQueue(this);
7088 return PromiseInvokeOrNoop(this._underlyingSource, 'cancel', [reason]);
7089 }
7090 }, {
7091 key: '__pullSteps',
7092 value: function __pullSteps() {
7093 var stream = this._controlledReadableStream;
7094 if (this._queue.length > 0) {
7095 var chunk = DequeueValue(this);
7096 if (this._closeRequested === true && this._queue.length === 0) {
7097 ReadableStreamClose(stream);
7098 } else {
7099 ReadableStreamDefaultControllerCallPullIfNeeded(this);
7100 }
7101 return Promise.resolve(CreateIterResultObject(chunk, false));
7102 }
7103 var pendingPromise = ReadableStreamAddReadRequest(stream);
7104 ReadableStreamDefaultControllerCallPullIfNeeded(this);
7105 return pendingPromise;
7106 }
7107 }, {
7108 key: 'desiredSize',
7109 get: function get() {
7110 if (IsReadableStreamDefaultController(this) === false) {
7111 throw defaultControllerBrandCheckException('desiredSize');
7112 }
7113 return ReadableStreamDefaultControllerGetDesiredSize(this);
7114 }
7115 }]);
7116 return ReadableStreamDefaultController;
7117 }();
7118 function IsReadableStreamDefaultController(x) {
7119 if (!typeIsObject(x)) {
7120 return false;
7121 }
7122 if (!Object.prototype.hasOwnProperty.call(x, '_underlyingSource')) {
7123 return false;
7124 }
7125 return true;
7126 }
7127 function ReadableStreamDefaultControllerCallPullIfNeeded(controller) {
7128 var shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller);
7129 if (shouldPull === false) {
7130 return undefined;
7131 }
7132 if (controller._pulling === true) {
7133 controller._pullAgain = true;
7134 return undefined;
7135 }
7136 assert(controller._pullAgain === false);
7137 controller._pulling = true;
7138 var pullPromise = PromiseInvokeOrNoop(controller._underlyingSource, 'pull', [controller]);
7139 pullPromise.then(function () {
7140 controller._pulling = false;
7141 if (controller._pullAgain === true) {
7142 controller._pullAgain = false;
7143 return ReadableStreamDefaultControllerCallPullIfNeeded(controller);
7144 }
7145 return undefined;
7146 }, function (e) {
7147 ReadableStreamDefaultControllerErrorIfNeeded(controller, e);
7148 }).catch(rethrowAssertionErrorRejection);
7149 return undefined;
7150 }
7151 function ReadableStreamDefaultControllerShouldCallPull(controller) {
7152 var stream = controller._controlledReadableStream;
7153 if (stream._state === 'closed' || stream._state === 'errored') {
7154 return false;
7155 }
7156 if (controller._closeRequested === true) {
7157 return false;
7158 }
7159 if (controller._started === false) {
7160 return false;
7161 }
7162 if (IsReadableStreamLocked(stream) === true && ReadableStreamGetNumReadRequests(stream) > 0) {
7163 return true;
7164 }
7165 var desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);
7166 if (desiredSize > 0) {
7167 return true;
7168 }
7169 return false;
7170 }
7171 function ReadableStreamDefaultControllerClose(controller) {
7172 var stream = controller._controlledReadableStream;
7173 assert(controller._closeRequested === false);
7174 assert(stream._state === 'readable');
7175 controller._closeRequested = true;
7176 if (controller._queue.length === 0) {
7177 ReadableStreamClose(stream);
7178 }
7179 }
7180 function ReadableStreamDefaultControllerEnqueue(controller, chunk) {
7181 var stream = controller._controlledReadableStream;
7182 assert(controller._closeRequested === false);
7183 assert(stream._state === 'readable');
7184 if (IsReadableStreamLocked(stream) === true && ReadableStreamGetNumReadRequests(stream) > 0) {
7185 ReadableStreamFulfillReadRequest(stream, chunk, false);
7186 } else {
7187 var chunkSize = 1;
7188 if (controller._strategySize !== undefined) {
7189 var strategySize = controller._strategySize;
7190 try {
7191 chunkSize = strategySize(chunk);
7192 } catch (chunkSizeE) {
7193 ReadableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE);
7194 throw chunkSizeE;
7195 }
7196 }
7197 try {
7198 EnqueueValueWithSize(controller, chunk, chunkSize);
7199 } catch (enqueueE) {
7200 ReadableStreamDefaultControllerErrorIfNeeded(controller, enqueueE);
7201 throw enqueueE;
7202 }
7203 }
7204 ReadableStreamDefaultControllerCallPullIfNeeded(controller);
7205 return undefined;
7206 }
7207 function ReadableStreamDefaultControllerError(controller, e) {
7208 var stream = controller._controlledReadableStream;
7209 assert(stream._state === 'readable');
7210 ResetQueue(controller);
7211 ReadableStreamError(stream, e);
7212 }
7213 function ReadableStreamDefaultControllerErrorIfNeeded(controller, e) {
7214 if (controller._controlledReadableStream._state === 'readable') {
7215 ReadableStreamDefaultControllerError(controller, e);
7216 }
7217 }
7218 function ReadableStreamDefaultControllerGetDesiredSize(controller) {
7219 var stream = controller._controlledReadableStream;
7220 var state = stream._state;
7221 if (state === 'errored') {
7222 return null;
7223 }
7224 if (state === 'closed') {
7225 return 0;
7226 }
7227 return controller._strategyHWM - controller._queueTotalSize;
7228 }
7229 var ReadableStreamBYOBRequest = function () {
7230 function ReadableStreamBYOBRequest(controller, view) {
7231 _classCallCheck(this, ReadableStreamBYOBRequest);
7232 this._associatedReadableByteStreamController = controller;
7233 this._view = view;
7234 }
7235 _createClass(ReadableStreamBYOBRequest, [{
7236 key: 'respond',
7237 value: function respond(bytesWritten) {
7238 if (IsReadableStreamBYOBRequest(this) === false) {
7239 throw byobRequestBrandCheckException('respond');
7240 }
7241 if (this._associatedReadableByteStreamController === undefined) {
7242 throw new TypeError('This BYOB request has been invalidated');
7243 }
7244 ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten);
7245 }
7246 }, {
7247 key: 'respondWithNewView',
7248 value: function respondWithNewView(view) {
7249 if (IsReadableStreamBYOBRequest(this) === false) {
7250 throw byobRequestBrandCheckException('respond');
7251 }
7252 if (this._associatedReadableByteStreamController === undefined) {
7253 throw new TypeError('This BYOB request has been invalidated');
7254 }
7255 if (!ArrayBuffer.isView(view)) {
7256 throw new TypeError('You can only respond with array buffer views');
7257 }
7258 ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view);
7259 }
7260 }, {
7261 key: 'view',
7262 get: function get() {
7263 return this._view;
7264 }
7265 }]);
7266 return ReadableStreamBYOBRequest;
7267 }();
7268 var ReadableByteStreamController = function () {
7269 function ReadableByteStreamController(stream, underlyingByteSource, highWaterMark) {
7270 _classCallCheck(this, ReadableByteStreamController);
7271 if (IsReadableStream(stream) === false) {
7272 throw new TypeError('ReadableByteStreamController can only be constructed with a ReadableStream instance given ' + 'a byte source');
7273 }
7274 if (stream._readableStreamController !== undefined) {
7275 throw new TypeError('ReadableByteStreamController instances can only be created by the ReadableStream constructor given a byte ' + 'source');
7276 }
7277 this._controlledReadableStream = stream;
7278 this._underlyingByteSource = underlyingByteSource;
7279 this._pullAgain = false;
7280 this._pulling = false;
7281 ReadableByteStreamControllerClearPendingPullIntos(this);
7282 this._queue = this._queueTotalSize = undefined;
7283 ResetQueue(this);
7284 this._closeRequested = false;
7285 this._started = false;
7286 this._strategyHWM = ValidateAndNormalizeHighWaterMark(highWaterMark);
7287 var autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize;
7288 if (autoAllocateChunkSize !== undefined) {
7289 if (Number.isInteger(autoAllocateChunkSize) === false || autoAllocateChunkSize <= 0) {
7290 throw new RangeError('autoAllocateChunkSize must be a positive integer');
7291 }
7292 }
7293 this._autoAllocateChunkSize = autoAllocateChunkSize;
7294 this._pendingPullIntos = [];
7295 var controller = this;
7296 var startResult = InvokeOrNoop(underlyingByteSource, 'start', [this]);
7297 Promise.resolve(startResult).then(function () {
7298 controller._started = true;
7299 assert(controller._pulling === false);
7300 assert(controller._pullAgain === false);
7301 ReadableByteStreamControllerCallPullIfNeeded(controller);
7302 }, function (r) {
7303 if (stream._state === 'readable') {
7304 ReadableByteStreamControllerError(controller, r);
7305 }
7306 }).catch(rethrowAssertionErrorRejection);
7307 }
7308 _createClass(ReadableByteStreamController, [{
7309 key: 'close',
7310 value: function close() {
7311 if (IsReadableByteStreamController(this) === false) {
7312 throw byteStreamControllerBrandCheckException('close');
7313 }
7314 if (this._closeRequested === true) {
7315 throw new TypeError('The stream has already been closed; do not close it again!');
7316 }
7317 var state = this._controlledReadableStream._state;
7318 if (state !== 'readable') {
7319 throw new TypeError('The stream (in ' + state + ' state) is not in the readable state and cannot be closed');
7320 }
7321 ReadableByteStreamControllerClose(this);
7322 }
7323 }, {
7324 key: 'enqueue',
7325 value: function enqueue(chunk) {
7326 if (IsReadableByteStreamController(this) === false) {
7327 throw byteStreamControllerBrandCheckException('enqueue');
7328 }
7329 if (this._closeRequested === true) {
7330 throw new TypeError('stream is closed or draining');
7331 }
7332 var state = this._controlledReadableStream._state;
7333 if (state !== 'readable') {
7334 throw new TypeError('The stream (in ' + state + ' state) is not in the readable state and cannot be enqueued to');
7335 }
7336 if (!ArrayBuffer.isView(chunk)) {
7337 throw new TypeError('You can only enqueue array buffer views when using a ReadableByteStreamController');
7338 }
7339 ReadableByteStreamControllerEnqueue(this, chunk);
7340 }
7341 }, {
7342 key: 'error',
7343 value: function error(e) {
7344 if (IsReadableByteStreamController(this) === false) {
7345 throw byteStreamControllerBrandCheckException('error');
7346 }
7347 var stream = this._controlledReadableStream;
7348 if (stream._state !== 'readable') {
7349 throw new TypeError('The stream is ' + stream._state + ' and so cannot be errored');
7350 }
7351 ReadableByteStreamControllerError(this, e);
7352 }
7353 }, {
7354 key: '__cancelSteps',
7355 value: function __cancelSteps(reason) {
7356 if (this._pendingPullIntos.length > 0) {
7357 var firstDescriptor = this._pendingPullIntos[0];
7358 firstDescriptor.bytesFilled = 0;
7359 }
7360 ResetQueue(this);
7361 return PromiseInvokeOrNoop(this._underlyingByteSource, 'cancel', [reason]);
7362 }
7363 }, {
7364 key: '__pullSteps',
7365 value: function __pullSteps() {
7366 var stream = this._controlledReadableStream;
7367 assert(ReadableStreamHasDefaultReader(stream) === true);
7368 if (this._queueTotalSize > 0) {
7369 assert(ReadableStreamGetNumReadRequests(stream) === 0);
7370 var entry = this._queue.shift();
7371 this._queueTotalSize -= entry.byteLength;
7372 ReadableByteStreamControllerHandleQueueDrain(this);
7373 var view = void 0;
7374 try {
7375 view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength);
7376 } catch (viewE) {
7377 return Promise.reject(viewE);
7378 }
7379 return Promise.resolve(CreateIterResultObject(view, false));
7380 }
7381 var autoAllocateChunkSize = this._autoAllocateChunkSize;
7382 if (autoAllocateChunkSize !== undefined) {
7383 var buffer = void 0;
7384 try {
7385 buffer = new ArrayBuffer(autoAllocateChunkSize);
7386 } catch (bufferE) {
7387 return Promise.reject(bufferE);
7388 }
7389 var pullIntoDescriptor = {
7390 buffer: buffer,
7391 byteOffset: 0,
7392 byteLength: autoAllocateChunkSize,
7393 bytesFilled: 0,
7394 elementSize: 1,
7395 ctor: Uint8Array,
7396 readerType: 'default'
7397 };
7398 this._pendingPullIntos.push(pullIntoDescriptor);
7399 }
7400 var promise = ReadableStreamAddReadRequest(stream);
7401 ReadableByteStreamControllerCallPullIfNeeded(this);
7402 return promise;
7403 }
7404 }, {
7405 key: 'byobRequest',
7406 get: function get() {
7407 if (IsReadableByteStreamController(this) === false) {
7408 throw byteStreamControllerBrandCheckException('byobRequest');
7409 }
7410 if (this._byobRequest === undefined && this._pendingPullIntos.length > 0) {
7411 var firstDescriptor = this._pendingPullIntos[0];
7412 var view = new Uint8Array(firstDescriptor.buffer, firstDescriptor.byteOffset + firstDescriptor.bytesFilled, firstDescriptor.byteLength - firstDescriptor.bytesFilled);
7413 this._byobRequest = new ReadableStreamBYOBRequest(this, view);
7414 }
7415 return this._byobRequest;
7416 }
7417 }, {
7418 key: 'desiredSize',
7419 get: function get() {
7420 if (IsReadableByteStreamController(this) === false) {
7421 throw byteStreamControllerBrandCheckException('desiredSize');
7422 }
7423 return ReadableByteStreamControllerGetDesiredSize(this);
7424 }
7425 }]);
7426 return ReadableByteStreamController;
7427 }();
7428 function IsReadableByteStreamController(x) {
7429 if (!typeIsObject(x)) {
7430 return false;
7431 }
7432 if (!Object.prototype.hasOwnProperty.call(x, '_underlyingByteSource')) {
7433 return false;
7434 }
7435 return true;
7436 }
7437 function IsReadableStreamBYOBRequest(x) {
7438 if (!typeIsObject(x)) {
7439 return false;
7440 }
7441 if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) {
7442 return false;
7443 }
7444 return true;
7445 }
7446 function ReadableByteStreamControllerCallPullIfNeeded(controller) {
7447 var shouldPull = ReadableByteStreamControllerShouldCallPull(controller);
7448 if (shouldPull === false) {
7449 return undefined;
7450 }
7451 if (controller._pulling === true) {
7452 controller._pullAgain = true;
7453 return undefined;
7454 }
7455 assert(controller._pullAgain === false);
7456 controller._pulling = true;
7457 var pullPromise = PromiseInvokeOrNoop(controller._underlyingByteSource, 'pull', [controller]);
7458 pullPromise.then(function () {
7459 controller._pulling = false;
7460 if (controller._pullAgain === true) {
7461 controller._pullAgain = false;
7462 ReadableByteStreamControllerCallPullIfNeeded(controller);
7463 }
7464 }, function (e) {
7465 if (controller._controlledReadableStream._state === 'readable') {
7466 ReadableByteStreamControllerError(controller, e);
7467 }
7468 }).catch(rethrowAssertionErrorRejection);
7469 return undefined;
7470 }
7471 function ReadableByteStreamControllerClearPendingPullIntos(controller) {
7472 ReadableByteStreamControllerInvalidateBYOBRequest(controller);
7473 controller._pendingPullIntos = [];
7474 }
7475 function ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor) {
7476 assert(stream._state !== 'errored', 'state must not be errored');
7477 var done = false;
7478 if (stream._state === 'closed') {
7479 assert(pullIntoDescriptor.bytesFilled === 0);
7480 done = true;
7481 }
7482 var filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);
7483 if (pullIntoDescriptor.readerType === 'default') {
7484 ReadableStreamFulfillReadRequest(stream, filledView, done);
7485 } else {
7486 assert(pullIntoDescriptor.readerType === 'byob');
7487 ReadableStreamFulfillReadIntoRequest(stream, filledView, done);
7488 }
7489 }
7490 function ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor) {
7491 var bytesFilled = pullIntoDescriptor.bytesFilled;
7492 var elementSize = pullIntoDescriptor.elementSize;
7493 assert(bytesFilled <= pullIntoDescriptor.byteLength);
7494 assert(bytesFilled % elementSize === 0);
7495 return new pullIntoDescriptor.ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize);
7496 }
7497 function ReadableByteStreamControllerEnqueueChunkToQueue(controller, buffer, byteOffset, byteLength) {
7498 controller._queue.push({
7499 buffer: buffer,
7500 byteOffset: byteOffset,
7501 byteLength: byteLength
7502 });
7503 controller._queueTotalSize += byteLength;
7504 }
7505 function ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) {
7506 var elementSize = pullIntoDescriptor.elementSize;
7507 var currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize;
7508 var maxBytesToCopy = Math.min(controller._queueTotalSize, pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled);
7509 var maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy;
7510 var maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize;
7511 var totalBytesToCopyRemaining = maxBytesToCopy;
7512 var ready = false;
7513 if (maxAlignedBytes > currentAlignedBytes) {
7514 totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled;
7515 ready = true;
7516 }
7517 var queue = controller._queue;
7518 while (totalBytesToCopyRemaining > 0) {
7519 var headOfQueue = queue[0];
7520 var bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength);
7521 var destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;
7522 ArrayBufferCopy(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy);
7523 if (headOfQueue.byteLength === bytesToCopy) {
7524 queue.shift();
7525 } else {
7526 headOfQueue.byteOffset += bytesToCopy;
7527 headOfQueue.byteLength -= bytesToCopy;
7528 }
7529 controller._queueTotalSize -= bytesToCopy;
7530 ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor);
7531 totalBytesToCopyRemaining -= bytesToCopy;
7532 }
7533 if (ready === false) {
7534 assert(controller._queueTotalSize === 0, 'queue must be empty');
7535 assert(pullIntoDescriptor.bytesFilled > 0);
7536 assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize);
7537 }
7538 return ready;
7539 }
7540 function ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, size, pullIntoDescriptor) {
7541 assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos[0] === pullIntoDescriptor);
7542 ReadableByteStreamControllerInvalidateBYOBRequest(controller);
7543 pullIntoDescriptor.bytesFilled += size;
7544 }
7545 function ReadableByteStreamControllerHandleQueueDrain(controller) {
7546 assert(controller._controlledReadableStream._state === 'readable');
7547 if (controller._queueTotalSize === 0 && controller._closeRequested === true) {
7548 ReadableStreamClose(controller._controlledReadableStream);
7549 } else {
7550 ReadableByteStreamControllerCallPullIfNeeded(controller);
7551 }
7552 }
7553 function ReadableByteStreamControllerInvalidateBYOBRequest(controller) {
7554 if (controller._byobRequest === undefined) {
7555 return;
7556 }
7557 controller._byobRequest._associatedReadableByteStreamController = undefined;
7558 controller._byobRequest._view = undefined;
7559 controller._byobRequest = undefined;
7560 }
7561 function ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller) {
7562 assert(controller._closeRequested === false);
7563 while (controller._pendingPullIntos.length > 0) {
7564 if (controller._queueTotalSize === 0) {
7565 return;
7566 }
7567 var pullIntoDescriptor = controller._pendingPullIntos[0];
7568 if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) === true) {
7569 ReadableByteStreamControllerShiftPendingPullInto(controller);
7570 ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableStream, pullIntoDescriptor);
7571 }
7572 }
7573 }
7574 function ReadableByteStreamControllerPullInto(controller, view) {
7575 var stream = controller._controlledReadableStream;
7576 var elementSize = 1;
7577 if (view.constructor !== DataView) {
7578 elementSize = view.constructor.BYTES_PER_ELEMENT;
7579 }
7580 var ctor = view.constructor;
7581 var pullIntoDescriptor = {
7582 buffer: view.buffer,
7583 byteOffset: view.byteOffset,
7584 byteLength: view.byteLength,
7585 bytesFilled: 0,
7586 elementSize: elementSize,
7587 ctor: ctor,
7588 readerType: 'byob'
7589 };
7590 if (controller._pendingPullIntos.length > 0) {
7591 pullIntoDescriptor.buffer = TransferArrayBuffer(pullIntoDescriptor.buffer);
7592 controller._pendingPullIntos.push(pullIntoDescriptor);
7593 return ReadableStreamAddReadIntoRequest(stream);
7594 }
7595 if (stream._state === 'closed') {
7596 var emptyView = new view.constructor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0);
7597 return Promise.resolve(CreateIterResultObject(emptyView, true));
7598 }
7599 if (controller._queueTotalSize > 0) {
7600 if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) === true) {
7601 var filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor);
7602 ReadableByteStreamControllerHandleQueueDrain(controller);
7603 return Promise.resolve(CreateIterResultObject(filledView, false));
7604 }
7605 if (controller._closeRequested === true) {
7606 var e = new TypeError('Insufficient bytes to fill elements in the given buffer');
7607 ReadableByteStreamControllerError(controller, e);
7608 return Promise.reject(e);
7609 }
7610 }
7611 pullIntoDescriptor.buffer = TransferArrayBuffer(pullIntoDescriptor.buffer);
7612 controller._pendingPullIntos.push(pullIntoDescriptor);
7613 var promise = ReadableStreamAddReadIntoRequest(stream);
7614 ReadableByteStreamControllerCallPullIfNeeded(controller);
7615 return promise;
7616 }
7617 function ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor) {
7618 firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer);
7619 assert(firstDescriptor.bytesFilled === 0, 'bytesFilled must be 0');
7620 var stream = controller._controlledReadableStream;
7621 if (ReadableStreamHasBYOBReader(stream) === true) {
7622 while (ReadableStreamGetNumReadIntoRequests(stream) > 0) {
7623 var pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller);
7624 ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor);
7625 }
7626 }
7627 }
7628 function ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, pullIntoDescriptor) {
7629 if (pullIntoDescriptor.bytesFilled + bytesWritten > pullIntoDescriptor.byteLength) {
7630 throw new RangeError('bytesWritten out of range');
7631 }
7632 ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor);
7633 if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) {
7634 return;
7635 }
7636 ReadableByteStreamControllerShiftPendingPullInto(controller);
7637 var remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize;
7638 if (remainderSize > 0) {
7639 var end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled;
7640 var remainder = pullIntoDescriptor.buffer.slice(end - remainderSize, end);
7641 ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength);
7642 }
7643 pullIntoDescriptor.buffer = TransferArrayBuffer(pullIntoDescriptor.buffer);
7644 pullIntoDescriptor.bytesFilled -= remainderSize;
7645 ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableStream, pullIntoDescriptor);
7646 ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);
7647 }
7648 function ReadableByteStreamControllerRespondInternal(controller, bytesWritten) {
7649 var firstDescriptor = controller._pendingPullIntos[0];
7650 var stream = controller._controlledReadableStream;
7651 if (stream._state === 'closed') {
7652 if (bytesWritten !== 0) {
7653 throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream');
7654 }
7655 ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor);
7656 } else {
7657 assert(stream._state === 'readable');
7658 ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor);
7659 }
7660 }
7661 function ReadableByteStreamControllerShiftPendingPullInto(controller) {
7662 var descriptor = controller._pendingPullIntos.shift();
7663 ReadableByteStreamControllerInvalidateBYOBRequest(controller);
7664 return descriptor;
7665 }
7666 function ReadableByteStreamControllerShouldCallPull(controller) {
7667 var stream = controller._controlledReadableStream;
7668 if (stream._state !== 'readable') {
7669 return false;
7670 }
7671 if (controller._closeRequested === true) {
7672 return false;
7673 }
7674 if (controller._started === false) {
7675 return false;
7676 }
7677 if (ReadableStreamHasDefaultReader(stream) === true && ReadableStreamGetNumReadRequests(stream) > 0) {
7678 return true;
7679 }
7680 if (ReadableStreamHasBYOBReader(stream) === true && ReadableStreamGetNumReadIntoRequests(stream) > 0) {
7681 return true;
7682 }
7683 if (ReadableByteStreamControllerGetDesiredSize(controller) > 0) {
7684 return true;
7685 }
7686 return false;
7687 }
7688 function ReadableByteStreamControllerClose(controller) {
7689 var stream = controller._controlledReadableStream;
7690 assert(controller._closeRequested === false);
7691 assert(stream._state === 'readable');
7692 if (controller._queueTotalSize > 0) {
7693 controller._closeRequested = true;
7694 return;
7695 }
7696 if (controller._pendingPullIntos.length > 0) {
7697 var firstPendingPullInto = controller._pendingPullIntos[0];
7698 if (firstPendingPullInto.bytesFilled > 0) {
7699 var e = new TypeError('Insufficient bytes to fill elements in the given buffer');
7700 ReadableByteStreamControllerError(controller, e);
7701 throw e;
7702 }
7703 }
7704 ReadableStreamClose(stream);
7705 }
7706 function ReadableByteStreamControllerEnqueue(controller, chunk) {
7707 var stream = controller._controlledReadableStream;
7708 assert(controller._closeRequested === false);
7709 assert(stream._state === 'readable');
7710 var buffer = chunk.buffer;
7711 var byteOffset = chunk.byteOffset;
7712 var byteLength = chunk.byteLength;
7713 var transferredBuffer = TransferArrayBuffer(buffer);
7714 if (ReadableStreamHasDefaultReader(stream) === true) {
7715 if (ReadableStreamGetNumReadRequests(stream) === 0) {
7716 ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);
7717 } else {
7718 assert(controller._queue.length === 0);
7719 var transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength);
7720 ReadableStreamFulfillReadRequest(stream, transferredView, false);
7721 }
7722 } else if (ReadableStreamHasBYOBReader(stream) === true) {
7723 ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);
7724 ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller);
7725 } else {
7726 assert(IsReadableStreamLocked(stream) === false, 'stream must not be locked');
7727 ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength);
7728 }
7729 }
7730 function ReadableByteStreamControllerError(controller, e) {
7731 var stream = controller._controlledReadableStream;
7732 assert(stream._state === 'readable');
7733 ReadableByteStreamControllerClearPendingPullIntos(controller);
7734 ResetQueue(controller);
7735 ReadableStreamError(stream, e);
7736 }
7737 function ReadableByteStreamControllerGetDesiredSize(controller) {
7738 var stream = controller._controlledReadableStream;
7739 var state = stream._state;
7740 if (state === 'errored') {
7741 return null;
7742 }
7743 if (state === 'closed') {
7744 return 0;
7745 }
7746 return controller._strategyHWM - controller._queueTotalSize;
7747 }
7748 function ReadableByteStreamControllerRespond(controller, bytesWritten) {
7749 bytesWritten = Number(bytesWritten);
7750 if (IsFiniteNonNegativeNumber(bytesWritten) === false) {
7751 throw new RangeError('bytesWritten must be a finite');
7752 }
7753 assert(controller._pendingPullIntos.length > 0);
7754 ReadableByteStreamControllerRespondInternal(controller, bytesWritten);
7755 }
7756 function ReadableByteStreamControllerRespondWithNewView(controller, view) {
7757 assert(controller._pendingPullIntos.length > 0);
7758 var firstDescriptor = controller._pendingPullIntos[0];
7759 if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) {
7760 throw new RangeError('The region specified by view does not match byobRequest');
7761 }
7762 if (firstDescriptor.byteLength !== view.byteLength) {
7763 throw new RangeError('The buffer of view has different capacity than byobRequest');
7764 }
7765 firstDescriptor.buffer = view.buffer;
7766 ReadableByteStreamControllerRespondInternal(controller, view.byteLength);
7767 }
7768 function streamBrandCheckException(name) {
7769 return new TypeError('ReadableStream.prototype.' + name + ' can only be used on a ReadableStream');
7770 }
7771 function readerLockException(name) {
7772 return new TypeError('Cannot ' + name + ' a stream using a released reader');
7773 }
7774 function defaultReaderBrandCheckException(name) {
7775 return new TypeError('ReadableStreamDefaultReader.prototype.' + name + ' can only be used on a ReadableStreamDefaultReader');
7776 }
7777 function defaultReaderClosedPromiseInitialize(reader) {
7778 reader._closedPromise = new Promise(function (resolve, reject) {
7779 reader._closedPromise_resolve = resolve;
7780 reader._closedPromise_reject = reject;
7781 });
7782 }
7783 function defaultReaderClosedPromiseInitializeAsRejected(reader, reason) {
7784 reader._closedPromise = Promise.reject(reason);
7785 reader._closedPromise_resolve = undefined;
7786 reader._closedPromise_reject = undefined;
7787 }
7788 function defaultReaderClosedPromiseInitializeAsResolved(reader) {
7789 reader._closedPromise = Promise.resolve(undefined);
7790 reader._closedPromise_resolve = undefined;
7791 reader._closedPromise_reject = undefined;
7792 }
7793 function defaultReaderClosedPromiseReject(reader, reason) {
7794 assert(reader._closedPromise_resolve !== undefined);
7795 assert(reader._closedPromise_reject !== undefined);
7796 reader._closedPromise_reject(reason);
7797 reader._closedPromise_resolve = undefined;
7798 reader._closedPromise_reject = undefined;
7799 }
7800 function defaultReaderClosedPromiseResetToRejected(reader, reason) {
7801 assert(reader._closedPromise_resolve === undefined);
7802 assert(reader._closedPromise_reject === undefined);
7803 reader._closedPromise = Promise.reject(reason);
7804 }
7805 function defaultReaderClosedPromiseResolve(reader) {
7806 assert(reader._closedPromise_resolve !== undefined);
7807 assert(reader._closedPromise_reject !== undefined);
7808 reader._closedPromise_resolve(undefined);
7809 reader._closedPromise_resolve = undefined;
7810 reader._closedPromise_reject = undefined;
7811 }
7812 function byobReaderBrandCheckException(name) {
7813 return new TypeError('ReadableStreamBYOBReader.prototype.' + name + ' can only be used on a ReadableStreamBYOBReader');
7814 }
7815 function defaultControllerBrandCheckException(name) {
7816 return new TypeError('ReadableStreamDefaultController.prototype.' + name + ' can only be used on a ReadableStreamDefaultController');
7817 }
7818 function byobRequestBrandCheckException(name) {
7819 return new TypeError('ReadableStreamBYOBRequest.prototype.' + name + ' can only be used on a ReadableStreamBYOBRequest');
7820 }
7821 function byteStreamControllerBrandCheckException(name) {
7822 return new TypeError('ReadableByteStreamController.prototype.' + name + ' can only be used on a ReadableByteStreamController');
7823 }
7824 function ifIsObjectAndHasAPromiseIsHandledInternalSlotSetPromiseIsHandledToTrue(promise) {
7825 try {
7826 Promise.prototype.then.call(promise, undefined, function () {});
7827 } catch (e) {}
7828 }
7829}, function (module, exports, __w_pdfjs_require__) {
7830 "use strict";
7831
7832 var transformStream = __w_pdfjs_require__(6);
7833 var readableStream = __w_pdfjs_require__(4);
7834 var writableStream = __w_pdfjs_require__(2);
7835 exports.TransformStream = transformStream.TransformStream;
7836 exports.ReadableStream = readableStream.ReadableStream;
7837 exports.IsReadableStreamDisturbed = readableStream.IsReadableStreamDisturbed;
7838 exports.ReadableStreamDefaultControllerClose = readableStream.ReadableStreamDefaultControllerClose;
7839 exports.ReadableStreamDefaultControllerEnqueue = readableStream.ReadableStreamDefaultControllerEnqueue;
7840 exports.ReadableStreamDefaultControllerError = readableStream.ReadableStreamDefaultControllerError;
7841 exports.ReadableStreamDefaultControllerGetDesiredSize = readableStream.ReadableStreamDefaultControllerGetDesiredSize;
7842 exports.AcquireWritableStreamDefaultWriter = writableStream.AcquireWritableStreamDefaultWriter;
7843 exports.IsWritableStream = writableStream.IsWritableStream;
7844 exports.IsWritableStreamLocked = writableStream.IsWritableStreamLocked;
7845 exports.WritableStream = writableStream.WritableStream;
7846 exports.WritableStreamAbort = writableStream.WritableStreamAbort;
7847 exports.WritableStreamDefaultControllerError = writableStream.WritableStreamDefaultControllerError;
7848 exports.WritableStreamDefaultWriterCloseWithErrorPropagation = writableStream.WritableStreamDefaultWriterCloseWithErrorPropagation;
7849 exports.WritableStreamDefaultWriterRelease = writableStream.WritableStreamDefaultWriterRelease;
7850 exports.WritableStreamDefaultWriterWrite = writableStream.WritableStreamDefaultWriterWrite;
7851}, function (module, exports, __w_pdfjs_require__) {
7852 "use strict";
7853
7854 var _createClass = function () {
7855 function defineProperties(target, props) {
7856 for (var i = 0; i < props.length; i++) {
7857 var descriptor = props[i];
7858 descriptor.enumerable = descriptor.enumerable || false;
7859 descriptor.configurable = true;
7860 if ("value" in descriptor) descriptor.writable = true;
7861 Object.defineProperty(target, descriptor.key, descriptor);
7862 }
7863 }
7864 return function (Constructor, protoProps, staticProps) {
7865 if (protoProps) defineProperties(Constructor.prototype, protoProps);
7866 if (staticProps) defineProperties(Constructor, staticProps);
7867 return Constructor;
7868 };
7869 }();
7870 function _classCallCheck(instance, Constructor) {
7871 if (!(instance instanceof Constructor)) {
7872 throw new TypeError("Cannot call a class as a function");
7873 }
7874 }
7875 var _require = __w_pdfjs_require__(1),
7876 assert = _require.assert;
7877 var _require2 = __w_pdfjs_require__(0),
7878 InvokeOrNoop = _require2.InvokeOrNoop,
7879 PromiseInvokeOrPerformFallback = _require2.PromiseInvokeOrPerformFallback,
7880 PromiseInvokeOrNoop = _require2.PromiseInvokeOrNoop,
7881 typeIsObject = _require2.typeIsObject;
7882 var _require3 = __w_pdfjs_require__(4),
7883 ReadableStream = _require3.ReadableStream,
7884 ReadableStreamDefaultControllerClose = _require3.ReadableStreamDefaultControllerClose,
7885 ReadableStreamDefaultControllerEnqueue = _require3.ReadableStreamDefaultControllerEnqueue,
7886 ReadableStreamDefaultControllerError = _require3.ReadableStreamDefaultControllerError,
7887 ReadableStreamDefaultControllerGetDesiredSize = _require3.ReadableStreamDefaultControllerGetDesiredSize;
7888 var _require4 = __w_pdfjs_require__(2),
7889 WritableStream = _require4.WritableStream,
7890 WritableStreamDefaultControllerError = _require4.WritableStreamDefaultControllerError;
7891 function TransformStreamCloseReadable(transformStream) {
7892 if (transformStream._errored === true) {
7893 throw new TypeError('TransformStream is already errored');
7894 }
7895 if (transformStream._readableClosed === true) {
7896 throw new TypeError('Readable side is already closed');
7897 }
7898 TransformStreamCloseReadableInternal(transformStream);
7899 }
7900 function TransformStreamEnqueueToReadable(transformStream, chunk) {
7901 if (transformStream._errored === true) {
7902 throw new TypeError('TransformStream is already errored');
7903 }
7904 if (transformStream._readableClosed === true) {
7905 throw new TypeError('Readable side is already closed');
7906 }
7907 var controller = transformStream._readableController;
7908 try {
7909 ReadableStreamDefaultControllerEnqueue(controller, chunk);
7910 } catch (e) {
7911 transformStream._readableClosed = true;
7912 TransformStreamErrorIfNeeded(transformStream, e);
7913 throw transformStream._storedError;
7914 }
7915 var desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller);
7916 var maybeBackpressure = desiredSize <= 0;
7917 if (maybeBackpressure === true && transformStream._backpressure === false) {
7918 TransformStreamSetBackpressure(transformStream, true);
7919 }
7920 }
7921 function TransformStreamError(transformStream, e) {
7922 if (transformStream._errored === true) {
7923 throw new TypeError('TransformStream is already errored');
7924 }
7925 TransformStreamErrorInternal(transformStream, e);
7926 }
7927 function TransformStreamCloseReadableInternal(transformStream) {
7928 assert(transformStream._errored === false);
7929 assert(transformStream._readableClosed === false);
7930 try {
7931 ReadableStreamDefaultControllerClose(transformStream._readableController);
7932 } catch (e) {
7933 assert(false);
7934 }
7935 transformStream._readableClosed = true;
7936 }
7937 function TransformStreamErrorIfNeeded(transformStream, e) {
7938 if (transformStream._errored === false) {
7939 TransformStreamErrorInternal(transformStream, e);
7940 }
7941 }
7942 function TransformStreamErrorInternal(transformStream, e) {
7943 assert(transformStream._errored === false);
7944 transformStream._errored = true;
7945 transformStream._storedError = e;
7946 if (transformStream._writableDone === false) {
7947 WritableStreamDefaultControllerError(transformStream._writableController, e);
7948 }
7949 if (transformStream._readableClosed === false) {
7950 ReadableStreamDefaultControllerError(transformStream._readableController, e);
7951 }
7952 }
7953 function TransformStreamReadableReadyPromise(transformStream) {
7954 assert(transformStream._backpressureChangePromise !== undefined, '_backpressureChangePromise should have been initialized');
7955 if (transformStream._backpressure === false) {
7956 return Promise.resolve();
7957 }
7958 assert(transformStream._backpressure === true, '_backpressure should have been initialized');
7959 return transformStream._backpressureChangePromise;
7960 }
7961 function TransformStreamSetBackpressure(transformStream, backpressure) {
7962 assert(transformStream._backpressure !== backpressure, 'TransformStreamSetBackpressure() should be called only when backpressure is changed');
7963 if (transformStream._backpressureChangePromise !== undefined) {
7964 transformStream._backpressureChangePromise_resolve(backpressure);
7965 }
7966 transformStream._backpressureChangePromise = new Promise(function (resolve) {
7967 transformStream._backpressureChangePromise_resolve = resolve;
7968 });
7969 transformStream._backpressureChangePromise.then(function (resolution) {
7970 assert(resolution !== backpressure, '_backpressureChangePromise should be fulfilled only when backpressure is changed');
7971 });
7972 transformStream._backpressure = backpressure;
7973 }
7974 function TransformStreamDefaultTransform(chunk, transformStreamController) {
7975 var transformStream = transformStreamController._controlledTransformStream;
7976 TransformStreamEnqueueToReadable(transformStream, chunk);
7977 return Promise.resolve();
7978 }
7979 function TransformStreamTransform(transformStream, chunk) {
7980 assert(transformStream._errored === false);
7981 assert(transformStream._transforming === false);
7982 assert(transformStream._backpressure === false);
7983 transformStream._transforming = true;
7984 var transformer = transformStream._transformer;
7985 var controller = transformStream._transformStreamController;
7986 var transformPromise = PromiseInvokeOrPerformFallback(transformer, 'transform', [chunk, controller], TransformStreamDefaultTransform, [chunk, controller]);
7987 return transformPromise.then(function () {
7988 transformStream._transforming = false;
7989 return TransformStreamReadableReadyPromise(transformStream);
7990 }, function (e) {
7991 TransformStreamErrorIfNeeded(transformStream, e);
7992 return Promise.reject(e);
7993 });
7994 }
7995 function IsTransformStreamDefaultController(x) {
7996 if (!typeIsObject(x)) {
7997 return false;
7998 }
7999 if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) {
8000 return false;
8001 }
8002 return true;
8003 }
8004 function IsTransformStream(x) {
8005 if (!typeIsObject(x)) {
8006 return false;
8007 }
8008 if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) {
8009 return false;
8010 }
8011 return true;
8012 }
8013 var TransformStreamSink = function () {
8014 function TransformStreamSink(transformStream, startPromise) {
8015 _classCallCheck(this, TransformStreamSink);
8016 this._transformStream = transformStream;
8017 this._startPromise = startPromise;
8018 }
8019 _createClass(TransformStreamSink, [{
8020 key: 'start',
8021 value: function start(c) {
8022 var transformStream = this._transformStream;
8023 transformStream._writableController = c;
8024 return this._startPromise.then(function () {
8025 return TransformStreamReadableReadyPromise(transformStream);
8026 });
8027 }
8028 }, {
8029 key: 'write',
8030 value: function write(chunk) {
8031 var transformStream = this._transformStream;
8032 return TransformStreamTransform(transformStream, chunk);
8033 }
8034 }, {
8035 key: 'abort',
8036 value: function abort() {
8037 var transformStream = this._transformStream;
8038 transformStream._writableDone = true;
8039 TransformStreamErrorInternal(transformStream, new TypeError('Writable side aborted'));
8040 }
8041 }, {
8042 key: 'close',
8043 value: function close() {
8044 var transformStream = this._transformStream;
8045 assert(transformStream._transforming === false);
8046 transformStream._writableDone = true;
8047 var flushPromise = PromiseInvokeOrNoop(transformStream._transformer, 'flush', [transformStream._transformStreamController]);
8048 return flushPromise.then(function () {
8049 if (transformStream._errored === true) {
8050 return Promise.reject(transformStream._storedError);
8051 }
8052 if (transformStream._readableClosed === false) {
8053 TransformStreamCloseReadableInternal(transformStream);
8054 }
8055 return Promise.resolve();
8056 }).catch(function (r) {
8057 TransformStreamErrorIfNeeded(transformStream, r);
8058 return Promise.reject(transformStream._storedError);
8059 });
8060 }
8061 }]);
8062 return TransformStreamSink;
8063 }();
8064 var TransformStreamSource = function () {
8065 function TransformStreamSource(transformStream, startPromise) {
8066 _classCallCheck(this, TransformStreamSource);
8067 this._transformStream = transformStream;
8068 this._startPromise = startPromise;
8069 }
8070 _createClass(TransformStreamSource, [{
8071 key: 'start',
8072 value: function start(c) {
8073 var transformStream = this._transformStream;
8074 transformStream._readableController = c;
8075 return this._startPromise.then(function () {
8076 assert(transformStream._backpressureChangePromise !== undefined, '_backpressureChangePromise should have been initialized');
8077 if (transformStream._backpressure === true) {
8078 return Promise.resolve();
8079 }
8080 assert(transformStream._backpressure === false, '_backpressure should have been initialized');
8081 return transformStream._backpressureChangePromise;
8082 });
8083 }
8084 }, {
8085 key: 'pull',
8086 value: function pull() {
8087 var transformStream = this._transformStream;
8088 assert(transformStream._backpressure === true, 'pull() should be never called while _backpressure is false');
8089 assert(transformStream._backpressureChangePromise !== undefined, '_backpressureChangePromise should have been initialized');
8090 TransformStreamSetBackpressure(transformStream, false);
8091 return transformStream._backpressureChangePromise;
8092 }
8093 }, {
8094 key: 'cancel',
8095 value: function cancel() {
8096 var transformStream = this._transformStream;
8097 transformStream._readableClosed = true;
8098 TransformStreamErrorInternal(transformStream, new TypeError('Readable side canceled'));
8099 }
8100 }]);
8101 return TransformStreamSource;
8102 }();
8103 var TransformStreamDefaultController = function () {
8104 function TransformStreamDefaultController(transformStream) {
8105 _classCallCheck(this, TransformStreamDefaultController);
8106 if (IsTransformStream(transformStream) === false) {
8107 throw new TypeError('TransformStreamDefaultController can only be ' + 'constructed with a TransformStream instance');
8108 }
8109 if (transformStream._transformStreamController !== undefined) {
8110 throw new TypeError('TransformStreamDefaultController instances can ' + 'only be created by the TransformStream constructor');
8111 }
8112 this._controlledTransformStream = transformStream;
8113 }
8114 _createClass(TransformStreamDefaultController, [{
8115 key: 'enqueue',
8116 value: function enqueue(chunk) {
8117 if (IsTransformStreamDefaultController(this) === false) {
8118 throw defaultControllerBrandCheckException('enqueue');
8119 }
8120 TransformStreamEnqueueToReadable(this._controlledTransformStream, chunk);
8121 }
8122 }, {
8123 key: 'close',
8124 value: function close() {
8125 if (IsTransformStreamDefaultController(this) === false) {
8126 throw defaultControllerBrandCheckException('close');
8127 }
8128 TransformStreamCloseReadable(this._controlledTransformStream);
8129 }
8130 }, {
8131 key: 'error',
8132 value: function error(reason) {
8133 if (IsTransformStreamDefaultController(this) === false) {
8134 throw defaultControllerBrandCheckException('error');
8135 }
8136 TransformStreamError(this._controlledTransformStream, reason);
8137 }
8138 }, {
8139 key: 'desiredSize',
8140 get: function get() {
8141 if (IsTransformStreamDefaultController(this) === false) {
8142 throw defaultControllerBrandCheckException('desiredSize');
8143 }
8144 var transformStream = this._controlledTransformStream;
8145 var readableController = transformStream._readableController;
8146 return ReadableStreamDefaultControllerGetDesiredSize(readableController);
8147 }
8148 }]);
8149 return TransformStreamDefaultController;
8150 }();
8151 var TransformStream = function () {
8152 function TransformStream() {
8153 var transformer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
8154 _classCallCheck(this, TransformStream);
8155 this._transformer = transformer;
8156 var readableStrategy = transformer.readableStrategy,
8157 writableStrategy = transformer.writableStrategy;
8158 this._transforming = false;
8159 this._errored = false;
8160 this._storedError = undefined;
8161 this._writableController = undefined;
8162 this._readableController = undefined;
8163 this._transformStreamController = undefined;
8164 this._writableDone = false;
8165 this._readableClosed = false;
8166 this._backpressure = undefined;
8167 this._backpressureChangePromise = undefined;
8168 this._backpressureChangePromise_resolve = undefined;
8169 this._transformStreamController = new TransformStreamDefaultController(this);
8170 var startPromise_resolve = void 0;
8171 var startPromise = new Promise(function (resolve) {
8172 startPromise_resolve = resolve;
8173 });
8174 var source = new TransformStreamSource(this, startPromise);
8175 this._readable = new ReadableStream(source, readableStrategy);
8176 var sink = new TransformStreamSink(this, startPromise);
8177 this._writable = new WritableStream(sink, writableStrategy);
8178 assert(this._writableController !== undefined);
8179 assert(this._readableController !== undefined);
8180 var desiredSize = ReadableStreamDefaultControllerGetDesiredSize(this._readableController);
8181 TransformStreamSetBackpressure(this, desiredSize <= 0);
8182 var transformStream = this;
8183 var startResult = InvokeOrNoop(transformer, 'start', [transformStream._transformStreamController]);
8184 startPromise_resolve(startResult);
8185 startPromise.catch(function (e) {
8186 if (transformStream._errored === false) {
8187 transformStream._errored = true;
8188 transformStream._storedError = e;
8189 }
8190 });
8191 }
8192 _createClass(TransformStream, [{
8193 key: 'readable',
8194 get: function get() {
8195 if (IsTransformStream(this) === false) {
8196 throw streamBrandCheckException('readable');
8197 }
8198 return this._readable;
8199 }
8200 }, {
8201 key: 'writable',
8202 get: function get() {
8203 if (IsTransformStream(this) === false) {
8204 throw streamBrandCheckException('writable');
8205 }
8206 return this._writable;
8207 }
8208 }]);
8209 return TransformStream;
8210 }();
8211 module.exports = { TransformStream: TransformStream };
8212 function defaultControllerBrandCheckException(name) {
8213 return new TypeError('TransformStreamDefaultController.prototype.' + name + ' can only be used on a TransformStreamDefaultController');
8214 }
8215 function streamBrandCheckException(name) {
8216 return new TypeError('TransformStream.prototype.' + name + ' can only be used on a TransformStream');
8217 }
8218}, function (module, exports, __w_pdfjs_require__) {
8219 module.exports = __w_pdfjs_require__(5);
8220}]));
8221
8222/***/ }),
8223/* 117 */
8224/***/ (function(module, exports, __w_pdfjs_require__) {
8225
8226"use strict";
8227
8228
8229Object.defineProperty(exports, "__esModule", {
8230 value: true
8231});
8232exports.build = exports.version = exports.setPDFNetworkStreamFactory = exports.PDFPageProxy = exports.PDFDocumentProxy = exports.PDFWorker = exports.PDFDataRangeTransport = exports.LoopbackPort = exports.getDocument = undefined;
8233
8234var _createClass = function () { 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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
8235
8236var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
8237
8238var _util = __w_pdfjs_require__(0);
8239
8240var _dom_utils = __w_pdfjs_require__(24);
8241
8242var _font_loader = __w_pdfjs_require__(118);
8243
8244var _api_compatibility = __w_pdfjs_require__(58);
8245
8246var _canvas = __w_pdfjs_require__(119);
8247
8248var _global_scope = __w_pdfjs_require__(18);
8249
8250var _global_scope2 = _interopRequireDefault(_global_scope);
8251
8252var _worker_options = __w_pdfjs_require__(59);
8253
8254var _metadata = __w_pdfjs_require__(121);
8255
8256var _transport_stream = __w_pdfjs_require__(123);
8257
8258var _webgl = __w_pdfjs_require__(124);
8259
8260function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
8261
8262function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
8263
8264var DEFAULT_RANGE_CHUNK_SIZE = 65536;
8265var isWorkerDisabled = false;
8266var workerSrc = void 0;
8267var pdfjsFilePath = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : null;
8268var fakeWorkerFilesLoader = null;
8269var useRequireEnsure = false;
8270{
8271 if (typeof window === 'undefined') {
8272 isWorkerDisabled = true;
8273 if (typeof require.ensure === 'undefined') {
8274 require.ensure = require('node-ensure');
8275 }
8276 useRequireEnsure = true;
8277 } else if (typeof require !== 'undefined' && typeof require.ensure === 'function') {
8278 useRequireEnsure = true;
8279 }
8280 if (typeof requirejs !== 'undefined' && requirejs.toUrl) {
8281 workerSrc = requirejs.toUrl('pdfjs-dist/build/pdf.worker.js');
8282 }
8283 var dynamicLoaderSupported = typeof requirejs !== 'undefined' && requirejs.load;
8284 fakeWorkerFilesLoader = useRequireEnsure ? function (callback) {
8285 require.ensure([], function () {
8286 var worker;
8287 worker = require('./pdf.worker.js');
8288 callback(worker.WorkerMessageHandler);
8289 });
8290 } : dynamicLoaderSupported ? function (callback) {
8291 requirejs(['pdfjs-dist/build/pdf.worker'], function (worker) {
8292 callback(worker.WorkerMessageHandler);
8293 });
8294 } : null;
8295}
8296var createPDFNetworkStream;
8297function setPDFNetworkStreamFactory(pdfNetworkStreamFactory) {
8298 createPDFNetworkStream = pdfNetworkStreamFactory;
8299}
8300function getDocument(src) {
8301 var task = new PDFDocumentLoadingTask();
8302 var source;
8303 if (typeof src === 'string') {
8304 source = { url: src };
8305 } else if ((0, _util.isArrayBuffer)(src)) {
8306 source = { data: src };
8307 } else if (src instanceof PDFDataRangeTransport) {
8308 source = { range: src };
8309 } else {
8310 if ((typeof src === 'undefined' ? 'undefined' : _typeof(src)) !== 'object') {
8311 throw new Error('Invalid parameter in getDocument, ' + 'need either Uint8Array, string or a parameter object');
8312 }
8313 if (!src.url && !src.data && !src.range) {
8314 throw new Error('Invalid parameter object: need either .data, .range or .url');
8315 }
8316 source = src;
8317 }
8318 var params = Object.create(null);
8319 var rangeTransport = null;
8320 var worker = null;
8321 var CMapReaderFactory = _dom_utils.DOMCMapReaderFactory;
8322 for (var key in source) {
8323 if (key === 'url' && typeof window !== 'undefined') {
8324 params[key] = new URL(source[key], window.location).href;
8325 continue;
8326 } else if (key === 'range') {
8327 rangeTransport = source[key];
8328 continue;
8329 } else if (key === 'worker') {
8330 worker = source[key];
8331 continue;
8332 } else if (key === 'data' && !(source[key] instanceof Uint8Array)) {
8333 var pdfBytes = source[key];
8334 if (typeof pdfBytes === 'string') {
8335 params[key] = (0, _util.stringToBytes)(pdfBytes);
8336 } else if ((typeof pdfBytes === 'undefined' ? 'undefined' : _typeof(pdfBytes)) === 'object' && pdfBytes !== null && !isNaN(pdfBytes.length)) {
8337 params[key] = new Uint8Array(pdfBytes);
8338 } else if ((0, _util.isArrayBuffer)(pdfBytes)) {
8339 params[key] = new Uint8Array(pdfBytes);
8340 } else {
8341 throw new Error('Invalid PDF binary data: either typed array, ' + 'string or array-like object is expected in the ' + 'data property.');
8342 }
8343 continue;
8344 } else if (key === 'CMapReaderFactory') {
8345 CMapReaderFactory = source[key];
8346 continue;
8347 }
8348 params[key] = source[key];
8349 }
8350 params.rangeChunkSize = params.rangeChunkSize || DEFAULT_RANGE_CHUNK_SIZE;
8351 params.ignoreErrors = params.stopAtErrors !== true;
8352 params.pdfBug = params.pdfBug === true;
8353 var NativeImageDecoderValues = Object.values(_util.NativeImageDecoding);
8354 if (params.nativeImageDecoderSupport === undefined || !NativeImageDecoderValues.includes(params.nativeImageDecoderSupport)) {
8355 params.nativeImageDecoderSupport = _util.NativeImageDecoding.DECODE;
8356 }
8357 if (!Number.isInteger(params.maxImageSize)) {
8358 params.maxImageSize = -1;
8359 }
8360 if (typeof params.isEvalSupported !== 'boolean') {
8361 params.isEvalSupported = true;
8362 }
8363 if (typeof params.disableFontFace !== 'boolean') {
8364 params.disableFontFace = false;
8365 }
8366 if (typeof params.disableRange !== 'boolean') {
8367 params.disableRange = _api_compatibility.apiCompatibilityParams.disableRange || false;
8368 }
8369 if (typeof params.disableStream !== 'boolean') {
8370 params.disableStream = _api_compatibility.apiCompatibilityParams.disableStream || false;
8371 }
8372 if (typeof params.disableAutoFetch !== 'boolean') {
8373 params.disableAutoFetch = false;
8374 }
8375 if (typeof params.disableCreateObjectURL !== 'boolean') {
8376 params.disableCreateObjectURL = _api_compatibility.apiCompatibilityParams.disableCreateObjectURL || false;
8377 }
8378 (0, _util.setVerbosityLevel)(params.verbosity);
8379 if (!worker) {
8380 var workerParams = {
8381 postMessageTransfers: params.postMessageTransfers,
8382 verbosity: params.verbosity
8383 };
8384 var workerPort = _worker_options.GlobalWorkerOptions.workerPort;
8385 if (workerPort) {
8386 workerParams.port = workerPort;
8387 worker = PDFWorker.fromPort(workerParams);
8388 } else {
8389 worker = new PDFWorker(workerParams);
8390 }
8391 task._worker = worker;
8392 }
8393 var docId = task.docId;
8394 worker.promise.then(function () {
8395 if (task.destroyed) {
8396 throw new Error('Loading aborted');
8397 }
8398 return _fetchDocument(worker, params, rangeTransport, docId).then(function (workerId) {
8399 if (task.destroyed) {
8400 throw new Error('Loading aborted');
8401 }
8402 var networkStream = void 0;
8403 if (rangeTransport) {
8404 networkStream = new _transport_stream.PDFDataTransportStream({
8405 length: params.length,
8406 initialData: params.initialData,
8407 disableRange: params.disableRange,
8408 disableStream: params.disableStream
8409 }, rangeTransport);
8410 } else if (!params.data) {
8411 networkStream = createPDFNetworkStream({
8412 url: params.url,
8413 length: params.length,
8414 httpHeaders: params.httpHeaders,
8415 withCredentials: params.withCredentials,
8416 rangeChunkSize: params.rangeChunkSize,
8417 disableRange: params.disableRange,
8418 disableStream: params.disableStream
8419 });
8420 }
8421 var messageHandler = new _util.MessageHandler(docId, workerId, worker.port);
8422 messageHandler.postMessageTransfers = worker.postMessageTransfers;
8423 var transport = new WorkerTransport(messageHandler, task, networkStream, params, CMapReaderFactory);
8424 task._transport = transport;
8425 messageHandler.send('Ready', null);
8426 });
8427 }).catch(task._capability.reject);
8428 return task;
8429}
8430function _fetchDocument(worker, source, pdfDataRangeTransport, docId) {
8431 if (worker.destroyed) {
8432 return Promise.reject(new Error('Worker was destroyed'));
8433 }
8434 if (pdfDataRangeTransport) {
8435 source.length = pdfDataRangeTransport.length;
8436 source.initialData = pdfDataRangeTransport.initialData;
8437 }
8438 return worker.messageHandler.sendWithPromise('GetDocRequest', {
8439 docId: docId,
8440 apiVersion: '2.0.489',
8441 source: {
8442 data: source.data,
8443 url: source.url,
8444 password: source.password,
8445 disableAutoFetch: source.disableAutoFetch,
8446 rangeChunkSize: source.rangeChunkSize,
8447 length: source.length
8448 },
8449 maxImageSize: source.maxImageSize,
8450 disableFontFace: source.disableFontFace,
8451 disableCreateObjectURL: source.disableCreateObjectURL,
8452 postMessageTransfers: worker.postMessageTransfers,
8453 docBaseUrl: source.docBaseUrl,
8454 nativeImageDecoderSupport: source.nativeImageDecoderSupport,
8455 ignoreErrors: source.ignoreErrors,
8456 isEvalSupported: source.isEvalSupported
8457 }).then(function (workerId) {
8458 if (worker.destroyed) {
8459 throw new Error('Worker was destroyed');
8460 }
8461 return workerId;
8462 });
8463}
8464var PDFDocumentLoadingTask = function PDFDocumentLoadingTaskClosure() {
8465 var nextDocumentId = 0;
8466 function PDFDocumentLoadingTask() {
8467 this._capability = (0, _util.createPromiseCapability)();
8468 this._transport = null;
8469 this._worker = null;
8470 this.docId = 'd' + nextDocumentId++;
8471 this.destroyed = false;
8472 this.onPassword = null;
8473 this.onProgress = null;
8474 this.onUnsupportedFeature = null;
8475 }
8476 PDFDocumentLoadingTask.prototype = {
8477 get promise() {
8478 return this._capability.promise;
8479 },
8480 destroy: function destroy() {
8481 var _this = this;
8482
8483 this.destroyed = true;
8484 var transportDestroyed = !this._transport ? Promise.resolve() : this._transport.destroy();
8485 return transportDestroyed.then(function () {
8486 _this._transport = null;
8487 if (_this._worker) {
8488 _this._worker.destroy();
8489 _this._worker = null;
8490 }
8491 });
8492 },
8493
8494 then: function PDFDocumentLoadingTask_then(onFulfilled, onRejected) {
8495 return this.promise.then.apply(this.promise, arguments);
8496 }
8497 };
8498 return PDFDocumentLoadingTask;
8499}();
8500var PDFDataRangeTransport = function pdfDataRangeTransportClosure() {
8501 function PDFDataRangeTransport(length, initialData) {
8502 this.length = length;
8503 this.initialData = initialData;
8504 this._rangeListeners = [];
8505 this._progressListeners = [];
8506 this._progressiveReadListeners = [];
8507 this._readyCapability = (0, _util.createPromiseCapability)();
8508 }
8509 PDFDataRangeTransport.prototype = {
8510 addRangeListener: function PDFDataRangeTransport_addRangeListener(listener) {
8511 this._rangeListeners.push(listener);
8512 },
8513 addProgressListener: function PDFDataRangeTransport_addProgressListener(listener) {
8514 this._progressListeners.push(listener);
8515 },
8516 addProgressiveReadListener: function PDFDataRangeTransport_addProgressiveReadListener(listener) {
8517 this._progressiveReadListeners.push(listener);
8518 },
8519 onDataRange: function PDFDataRangeTransport_onDataRange(begin, chunk) {
8520 var listeners = this._rangeListeners;
8521 for (var i = 0, n = listeners.length; i < n; ++i) {
8522 listeners[i](begin, chunk);
8523 }
8524 },
8525 onDataProgress: function PDFDataRangeTransport_onDataProgress(loaded) {
8526 var _this2 = this;
8527
8528 this._readyCapability.promise.then(function () {
8529 var listeners = _this2._progressListeners;
8530 for (var i = 0, n = listeners.length; i < n; ++i) {
8531 listeners[i](loaded);
8532 }
8533 });
8534 },
8535 onDataProgressiveRead: function PDFDataRangeTransport_onDataProgress(chunk) {
8536 var _this3 = this;
8537
8538 this._readyCapability.promise.then(function () {
8539 var listeners = _this3._progressiveReadListeners;
8540 for (var i = 0, n = listeners.length; i < n; ++i) {
8541 listeners[i](chunk);
8542 }
8543 });
8544 },
8545 transportReady: function PDFDataRangeTransport_transportReady() {
8546 this._readyCapability.resolve();
8547 },
8548 requestDataRange: function PDFDataRangeTransport_requestDataRange(begin, end) {
8549 (0, _util.unreachable)('Abstract method PDFDataRangeTransport.requestDataRange');
8550 },
8551 abort: function PDFDataRangeTransport_abort() {}
8552 };
8553 return PDFDataRangeTransport;
8554}();
8555var PDFDocumentProxy = function PDFDocumentProxyClosure() {
8556 function PDFDocumentProxy(pdfInfo, transport, loadingTask) {
8557 this.pdfInfo = pdfInfo;
8558 this.transport = transport;
8559 this.loadingTask = loadingTask;
8560 }
8561 PDFDocumentProxy.prototype = {
8562 get numPages() {
8563 return this.pdfInfo.numPages;
8564 },
8565 get fingerprint() {
8566 return this.pdfInfo.fingerprint;
8567 },
8568 getPage: function getPage(pageNumber) {
8569 return this.transport.getPage(pageNumber);
8570 },
8571
8572 getPageIndex: function PDFDocumentProxy_getPageIndex(ref) {
8573 return this.transport.getPageIndex(ref);
8574 },
8575 getDestinations: function PDFDocumentProxy_getDestinations() {
8576 return this.transport.getDestinations();
8577 },
8578 getDestination: function PDFDocumentProxy_getDestination(id) {
8579 return this.transport.getDestination(id);
8580 },
8581 getPageLabels: function PDFDocumentProxy_getPageLabels() {
8582 return this.transport.getPageLabels();
8583 },
8584 getPageMode: function getPageMode() {
8585 return this.transport.getPageMode();
8586 },
8587
8588 getAttachments: function PDFDocumentProxy_getAttachments() {
8589 return this.transport.getAttachments();
8590 },
8591 getJavaScript: function getJavaScript() {
8592 return this.transport.getJavaScript();
8593 },
8594
8595 getOutline: function PDFDocumentProxy_getOutline() {
8596 return this.transport.getOutline();
8597 },
8598 getMetadata: function PDFDocumentProxy_getMetadata() {
8599 return this.transport.getMetadata();
8600 },
8601 getData: function PDFDocumentProxy_getData() {
8602 return this.transport.getData();
8603 },
8604 getDownloadInfo: function PDFDocumentProxy_getDownloadInfo() {
8605 return this.transport.downloadInfoCapability.promise;
8606 },
8607 getStats: function PDFDocumentProxy_getStats() {
8608 return this.transport.getStats();
8609 },
8610 cleanup: function PDFDocumentProxy_cleanup() {
8611 this.transport.startCleanup();
8612 },
8613 destroy: function PDFDocumentProxy_destroy() {
8614 return this.loadingTask.destroy();
8615 },
8616 get loadingParams() {
8617 return this.transport.loadingParams;
8618 }
8619 };
8620 return PDFDocumentProxy;
8621}();
8622var PDFPageProxy = function PDFPageProxyClosure() {
8623 function PDFPageProxy(pageIndex, pageInfo, transport) {
8624 var pdfBug = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
8625
8626 this.pageIndex = pageIndex;
8627 this.pageInfo = pageInfo;
8628 this.transport = transport;
8629 this._stats = pdfBug ? new _dom_utils.StatTimer() : _dom_utils.DummyStatTimer;
8630 this._pdfBug = pdfBug;
8631 this.commonObjs = transport.commonObjs;
8632 this.objs = new PDFObjects();
8633 this.cleanupAfterRender = false;
8634 this.pendingCleanup = false;
8635 this.intentStates = Object.create(null);
8636 this.destroyed = false;
8637 }
8638 PDFPageProxy.prototype = {
8639 get pageNumber() {
8640 return this.pageIndex + 1;
8641 },
8642 get rotate() {
8643 return this.pageInfo.rotate;
8644 },
8645 get ref() {
8646 return this.pageInfo.ref;
8647 },
8648 get userUnit() {
8649 return this.pageInfo.userUnit;
8650 },
8651 get view() {
8652 return this.pageInfo.view;
8653 },
8654 getViewport: function getViewport(scale) {
8655 var rotate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.rotate;
8656 var dontFlip = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
8657
8658 return new _util.PageViewport(this.view, scale, rotate, 0, 0, dontFlip);
8659 },
8660
8661 getAnnotations: function PDFPageProxy_getAnnotations(params) {
8662 var intent = params && params.intent || null;
8663 if (!this.annotationsPromise || this.annotationsIntent !== intent) {
8664 this.annotationsPromise = this.transport.getAnnotations(this.pageIndex, intent);
8665 this.annotationsIntent = intent;
8666 }
8667 return this.annotationsPromise;
8668 },
8669 render: function PDFPageProxy_render(params) {
8670 var _this4 = this;
8671
8672 var stats = this._stats;
8673 stats.time('Overall');
8674 this.pendingCleanup = false;
8675 var renderingIntent = params.intent === 'print' ? 'print' : 'display';
8676 var canvasFactory = params.canvasFactory || new _dom_utils.DOMCanvasFactory();
8677 var webGLContext = new _webgl.WebGLContext({ enable: params.enableWebGL });
8678 if (!this.intentStates[renderingIntent]) {
8679 this.intentStates[renderingIntent] = Object.create(null);
8680 }
8681 var intentState = this.intentStates[renderingIntent];
8682 if (!intentState.displayReadyCapability) {
8683 intentState.receivingOperatorList = true;
8684 intentState.displayReadyCapability = (0, _util.createPromiseCapability)();
8685 intentState.operatorList = {
8686 fnArray: [],
8687 argsArray: [],
8688 lastChunk: false
8689 };
8690 stats.time('Page Request');
8691 this.transport.messageHandler.send('RenderPageRequest', {
8692 pageIndex: this.pageNumber - 1,
8693 intent: renderingIntent,
8694 renderInteractiveForms: params.renderInteractiveForms === true
8695 });
8696 }
8697 var complete = function complete(error) {
8698 var i = intentState.renderTasks.indexOf(internalRenderTask);
8699 if (i >= 0) {
8700 intentState.renderTasks.splice(i, 1);
8701 }
8702 if (_this4.cleanupAfterRender) {
8703 _this4.pendingCleanup = true;
8704 }
8705 _this4._tryCleanup();
8706 if (error) {
8707 internalRenderTask.capability.reject(error);
8708 } else {
8709 internalRenderTask.capability.resolve();
8710 }
8711 stats.timeEnd('Rendering');
8712 stats.timeEnd('Overall');
8713 };
8714 var internalRenderTask = new InternalRenderTask(complete, params, this.objs, this.commonObjs, intentState.operatorList, this.pageNumber, canvasFactory, webGLContext, this._pdfBug);
8715 internalRenderTask.useRequestAnimationFrame = renderingIntent !== 'print';
8716 if (!intentState.renderTasks) {
8717 intentState.renderTasks = [];
8718 }
8719 intentState.renderTasks.push(internalRenderTask);
8720 var renderTask = internalRenderTask.task;
8721 intentState.displayReadyCapability.promise.then(function (transparency) {
8722 if (_this4.pendingCleanup) {
8723 complete();
8724 return;
8725 }
8726 stats.time('Rendering');
8727 internalRenderTask.initializeGraphics(transparency);
8728 internalRenderTask.operatorListChanged();
8729 }).catch(complete);
8730 return renderTask;
8731 },
8732 getOperatorList: function PDFPageProxy_getOperatorList() {
8733 function operatorListChanged() {
8734 if (intentState.operatorList.lastChunk) {
8735 intentState.opListReadCapability.resolve(intentState.operatorList);
8736 var i = intentState.renderTasks.indexOf(opListTask);
8737 if (i >= 0) {
8738 intentState.renderTasks.splice(i, 1);
8739 }
8740 }
8741 }
8742 var renderingIntent = 'oplist';
8743 if (!this.intentStates[renderingIntent]) {
8744 this.intentStates[renderingIntent] = Object.create(null);
8745 }
8746 var intentState = this.intentStates[renderingIntent];
8747 var opListTask;
8748 if (!intentState.opListReadCapability) {
8749 opListTask = {};
8750 opListTask.operatorListChanged = operatorListChanged;
8751 intentState.receivingOperatorList = true;
8752 intentState.opListReadCapability = (0, _util.createPromiseCapability)();
8753 intentState.renderTasks = [];
8754 intentState.renderTasks.push(opListTask);
8755 intentState.operatorList = {
8756 fnArray: [],
8757 argsArray: [],
8758 lastChunk: false
8759 };
8760 this.transport.messageHandler.send('RenderPageRequest', {
8761 pageIndex: this.pageIndex,
8762 intent: renderingIntent
8763 });
8764 }
8765 return intentState.opListReadCapability.promise;
8766 },
8767 streamTextContent: function streamTextContent() {
8768 var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
8769
8770 var TEXT_CONTENT_CHUNK_SIZE = 100;
8771 return this.transport.messageHandler.sendWithStream('GetTextContent', {
8772 pageIndex: this.pageNumber - 1,
8773 normalizeWhitespace: params.normalizeWhitespace === true,
8774 combineTextItems: params.disableCombineTextItems !== true
8775 }, {
8776 highWaterMark: TEXT_CONTENT_CHUNK_SIZE,
8777 size: function size(textContent) {
8778 return textContent.items.length;
8779 }
8780 });
8781 },
8782
8783 getTextContent: function PDFPageProxy_getTextContent(params) {
8784 params = params || {};
8785 var readableStream = this.streamTextContent(params);
8786 return new Promise(function (resolve, reject) {
8787 function pump() {
8788 reader.read().then(function (_ref) {
8789 var value = _ref.value,
8790 done = _ref.done;
8791
8792 if (done) {
8793 resolve(textContent);
8794 return;
8795 }
8796 _util.Util.extendObj(textContent.styles, value.styles);
8797 _util.Util.appendToArray(textContent.items, value.items);
8798 pump();
8799 }, reject);
8800 }
8801 var reader = readableStream.getReader();
8802 var textContent = {
8803 items: [],
8804 styles: Object.create(null)
8805 };
8806 pump();
8807 });
8808 },
8809 _destroy: function PDFPageProxy_destroy() {
8810 this.destroyed = true;
8811 this.transport.pageCache[this.pageIndex] = null;
8812 var waitOn = [];
8813 Object.keys(this.intentStates).forEach(function (intent) {
8814 if (intent === 'oplist') {
8815 return;
8816 }
8817 var intentState = this.intentStates[intent];
8818 intentState.renderTasks.forEach(function (renderTask) {
8819 var renderCompleted = renderTask.capability.promise.catch(function () {});
8820 waitOn.push(renderCompleted);
8821 renderTask.cancel();
8822 });
8823 }, this);
8824 this.objs.clear();
8825 this.annotationsPromise = null;
8826 this.pendingCleanup = false;
8827 return Promise.all(waitOn);
8828 },
8829 cleanup: function cleanup() {
8830 var resetStats = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
8831
8832 this.pendingCleanup = true;
8833 this._tryCleanup(resetStats);
8834 },
8835 _tryCleanup: function _tryCleanup() {
8836 var resetStats = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
8837
8838 if (!this.pendingCleanup || Object.keys(this.intentStates).some(function (intent) {
8839 var intentState = this.intentStates[intent];
8840 return intentState.renderTasks.length !== 0 || intentState.receivingOperatorList;
8841 }, this)) {
8842 return;
8843 }
8844 Object.keys(this.intentStates).forEach(function (intent) {
8845 delete this.intentStates[intent];
8846 }, this);
8847 this.objs.clear();
8848 this.annotationsPromise = null;
8849 if (resetStats && this._stats instanceof _dom_utils.StatTimer) {
8850 this._stats = new _dom_utils.StatTimer();
8851 }
8852 this.pendingCleanup = false;
8853 },
8854
8855 _startRenderPage: function PDFPageProxy_startRenderPage(transparency, intent) {
8856 var intentState = this.intentStates[intent];
8857 if (intentState.displayReadyCapability) {
8858 intentState.displayReadyCapability.resolve(transparency);
8859 }
8860 },
8861 _renderPageChunk: function PDFPageProxy_renderPageChunk(operatorListChunk, intent) {
8862 var intentState = this.intentStates[intent];
8863 var i, ii;
8864 for (i = 0, ii = operatorListChunk.length; i < ii; i++) {
8865 intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]);
8866 intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]);
8867 }
8868 intentState.operatorList.lastChunk = operatorListChunk.lastChunk;
8869 for (i = 0; i < intentState.renderTasks.length; i++) {
8870 intentState.renderTasks[i].operatorListChanged();
8871 }
8872 if (operatorListChunk.lastChunk) {
8873 intentState.receivingOperatorList = false;
8874 this._tryCleanup();
8875 }
8876 },
8877 get stats() {
8878 return this._stats instanceof _dom_utils.StatTimer ? this._stats : null;
8879 }
8880 };
8881 return PDFPageProxy;
8882}();
8883
8884var LoopbackPort = function () {
8885 function LoopbackPort(defer) {
8886 _classCallCheck(this, LoopbackPort);
8887
8888 this._listeners = [];
8889 this._defer = defer;
8890 this._deferred = Promise.resolve(undefined);
8891 }
8892
8893 _createClass(LoopbackPort, [{
8894 key: 'postMessage',
8895 value: function postMessage(obj, transfers) {
8896 var _this5 = this;
8897
8898 function cloneValue(value) {
8899 if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) !== 'object' || value === null) {
8900 return value;
8901 }
8902 if (cloned.has(value)) {
8903 return cloned.get(value);
8904 }
8905 var result;
8906 var buffer;
8907 if ((buffer = value.buffer) && (0, _util.isArrayBuffer)(buffer)) {
8908 var transferable = transfers && transfers.includes(buffer);
8909 if (value === buffer) {
8910 result = value;
8911 } else if (transferable) {
8912 result = new value.constructor(buffer, value.byteOffset, value.byteLength);
8913 } else {
8914 result = new value.constructor(value);
8915 }
8916 cloned.set(value, result);
8917 return result;
8918 }
8919 result = Array.isArray(value) ? [] : {};
8920 cloned.set(value, result);
8921 for (var i in value) {
8922 var desc,
8923 p = value;
8924 while (!(desc = Object.getOwnPropertyDescriptor(p, i))) {
8925 p = Object.getPrototypeOf(p);
8926 }
8927 if (typeof desc.value === 'undefined' || typeof desc.value === 'function') {
8928 continue;
8929 }
8930 result[i] = cloneValue(desc.value);
8931 }
8932 return result;
8933 }
8934 if (!this._defer) {
8935 this._listeners.forEach(function (listener) {
8936 listener.call(this, { data: obj });
8937 }, this);
8938 return;
8939 }
8940 var cloned = new WeakMap();
8941 var e = { data: cloneValue(obj) };
8942 this._deferred.then(function () {
8943 _this5._listeners.forEach(function (listener) {
8944 listener.call(this, e);
8945 }, _this5);
8946 });
8947 }
8948 }, {
8949 key: 'addEventListener',
8950 value: function addEventListener(name, listener) {
8951 this._listeners.push(listener);
8952 }
8953 }, {
8954 key: 'removeEventListener',
8955 value: function removeEventListener(name, listener) {
8956 var i = this._listeners.indexOf(listener);
8957 this._listeners.splice(i, 1);
8958 }
8959 }, {
8960 key: 'terminate',
8961 value: function terminate() {
8962 this._listeners = [];
8963 }
8964 }]);
8965
8966 return LoopbackPort;
8967}();
8968
8969var PDFWorker = function PDFWorkerClosure() {
8970 var nextFakeWorkerId = 0;
8971 function getWorkerSrc() {
8972 if (_worker_options.GlobalWorkerOptions.workerSrc) {
8973 return _worker_options.GlobalWorkerOptions.workerSrc;
8974 }
8975 if (typeof workerSrc !== 'undefined') {
8976 return workerSrc;
8977 }
8978 if (pdfjsFilePath) {
8979 return pdfjsFilePath.replace(/(\.(?:min\.)?js)(\?.*)?$/i, '.worker$1$2');
8980 }
8981 throw new Error('No "GlobalWorkerOptions.workerSrc" specified.');
8982 }
8983 function getMainThreadWorkerMessageHandler() {
8984 if (typeof window === 'undefined') {
8985 return null;
8986 }
8987 return window.pdfjsWorker && window.pdfjsWorker.WorkerMessageHandler;
8988 }
8989 var fakeWorkerFilesLoadedCapability = void 0;
8990 function setupFakeWorkerGlobal() {
8991 if (fakeWorkerFilesLoadedCapability) {
8992 return fakeWorkerFilesLoadedCapability.promise;
8993 }
8994 fakeWorkerFilesLoadedCapability = (0, _util.createPromiseCapability)();
8995 var mainWorkerMessageHandler = getMainThreadWorkerMessageHandler();
8996 if (mainWorkerMessageHandler) {
8997 fakeWorkerFilesLoadedCapability.resolve(mainWorkerMessageHandler);
8998 return fakeWorkerFilesLoadedCapability.promise;
8999 }
9000 var loader = fakeWorkerFilesLoader || function (callback) {
9001 _util.Util.loadScript(getWorkerSrc(), function () {
9002 callback(window.pdfjsWorker.WorkerMessageHandler);
9003 });
9004 };
9005 loader(fakeWorkerFilesLoadedCapability.resolve);
9006 return fakeWorkerFilesLoadedCapability.promise;
9007 }
9008 function createCDNWrapper(url) {
9009 var wrapper = 'importScripts(\'' + url + '\');';
9010 return URL.createObjectURL(new Blob([wrapper]));
9011 }
9012 var pdfWorkerPorts = new WeakMap();
9013 function PDFWorker() {
9014 var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
9015 _ref2$name = _ref2.name,
9016 name = _ref2$name === undefined ? null : _ref2$name,
9017 _ref2$port = _ref2.port,
9018 port = _ref2$port === undefined ? null : _ref2$port,
9019 _ref2$postMessageTran = _ref2.postMessageTransfers,
9020 postMessageTransfers = _ref2$postMessageTran === undefined ? true : _ref2$postMessageTran,
9021 _ref2$verbosity = _ref2.verbosity,
9022 verbosity = _ref2$verbosity === undefined ? null : _ref2$verbosity;
9023
9024 if (port && pdfWorkerPorts.has(port)) {
9025 throw new Error('Cannot use more than one PDFWorker per port');
9026 }
9027 this.name = name;
9028 this.destroyed = false;
9029 this.postMessageTransfers = postMessageTransfers !== false;
9030 this.verbosity = (0, _util.isNum)(verbosity) ? verbosity : (0, _util.getVerbosityLevel)();
9031 this._readyCapability = (0, _util.createPromiseCapability)();
9032 this._port = null;
9033 this._webWorker = null;
9034 this._messageHandler = null;
9035 if (port) {
9036 pdfWorkerPorts.set(port, this);
9037 this._initializeFromPort(port);
9038 return;
9039 }
9040 this._initialize();
9041 }
9042 PDFWorker.prototype = {
9043 get promise() {
9044 return this._readyCapability.promise;
9045 },
9046 get port() {
9047 return this._port;
9048 },
9049 get messageHandler() {
9050 return this._messageHandler;
9051 },
9052 _initializeFromPort: function PDFWorker_initializeFromPort(port) {
9053 this._port = port;
9054 this._messageHandler = new _util.MessageHandler('main', 'worker', port);
9055 this._messageHandler.on('ready', function () {});
9056 this._readyCapability.resolve();
9057 },
9058 _initialize: function PDFWorker_initialize() {
9059 var _this6 = this;
9060
9061 if (typeof Worker !== 'undefined' && !isWorkerDisabled && !getMainThreadWorkerMessageHandler()) {
9062 var workerSrc = getWorkerSrc();
9063 try {
9064 if (!(0, _util.isSameOrigin)(window.location.href, workerSrc)) {
9065 workerSrc = createCDNWrapper(new URL(workerSrc, window.location).href);
9066 }
9067 var worker = new Worker(workerSrc);
9068 var messageHandler = new _util.MessageHandler('main', 'worker', worker);
9069 var terminateEarly = function terminateEarly() {
9070 worker.removeEventListener('error', onWorkerError);
9071 messageHandler.destroy();
9072 worker.terminate();
9073 if (_this6.destroyed) {
9074 _this6._readyCapability.reject(new Error('Worker was destroyed'));
9075 } else {
9076 _this6._setupFakeWorker();
9077 }
9078 };
9079 var onWorkerError = function onWorkerError() {
9080 if (!_this6._webWorker) {
9081 terminateEarly();
9082 }
9083 };
9084 worker.addEventListener('error', onWorkerError);
9085 messageHandler.on('test', function (data) {
9086 worker.removeEventListener('error', onWorkerError);
9087 if (_this6.destroyed) {
9088 terminateEarly();
9089 return;
9090 }
9091 var supportTypedArray = data && data.supportTypedArray;
9092 if (supportTypedArray) {
9093 _this6._messageHandler = messageHandler;
9094 _this6._port = worker;
9095 _this6._webWorker = worker;
9096 if (!data.supportTransfers) {
9097 _this6.postMessageTransfers = false;
9098 }
9099 _this6._readyCapability.resolve();
9100 messageHandler.send('configure', { verbosity: _this6.verbosity });
9101 } else {
9102 _this6._setupFakeWorker();
9103 messageHandler.destroy();
9104 worker.terminate();
9105 }
9106 });
9107 messageHandler.on('ready', function (data) {
9108 worker.removeEventListener('error', onWorkerError);
9109 if (_this6.destroyed) {
9110 terminateEarly();
9111 return;
9112 }
9113 try {
9114 sendTest();
9115 } catch (e) {
9116 _this6._setupFakeWorker();
9117 }
9118 });
9119 var sendTest = function sendTest() {
9120 var testObj = new Uint8Array([_this6.postMessageTransfers ? 255 : 0]);
9121 try {
9122 messageHandler.send('test', testObj, [testObj.buffer]);
9123 } catch (ex) {
9124 (0, _util.info)('Cannot use postMessage transfers');
9125 testObj[0] = 0;
9126 messageHandler.send('test', testObj);
9127 }
9128 };
9129 sendTest();
9130 return;
9131 } catch (e) {
9132 (0, _util.info)('The worker has been disabled.');
9133 }
9134 }
9135 this._setupFakeWorker();
9136 },
9137 _setupFakeWorker: function PDFWorker_setupFakeWorker() {
9138 var _this7 = this;
9139
9140 if (!isWorkerDisabled) {
9141 (0, _util.warn)('Setting up fake worker.');
9142 isWorkerDisabled = true;
9143 }
9144 setupFakeWorkerGlobal().then(function (WorkerMessageHandler) {
9145 if (_this7.destroyed) {
9146 _this7._readyCapability.reject(new Error('Worker was destroyed'));
9147 return;
9148 }
9149 var isTypedArraysPresent = Uint8Array !== Float32Array;
9150 var port = new LoopbackPort(isTypedArraysPresent);
9151 _this7._port = port;
9152 var id = 'fake' + nextFakeWorkerId++;
9153 var workerHandler = new _util.MessageHandler(id + '_worker', id, port);
9154 WorkerMessageHandler.setup(workerHandler, port);
9155 var messageHandler = new _util.MessageHandler(id, id + '_worker', port);
9156 _this7._messageHandler = messageHandler;
9157 _this7._readyCapability.resolve();
9158 });
9159 },
9160 destroy: function PDFWorker_destroy() {
9161 this.destroyed = true;
9162 if (this._webWorker) {
9163 this._webWorker.terminate();
9164 this._webWorker = null;
9165 }
9166 pdfWorkerPorts.delete(this._port);
9167 this._port = null;
9168 if (this._messageHandler) {
9169 this._messageHandler.destroy();
9170 this._messageHandler = null;
9171 }
9172 }
9173 };
9174 PDFWorker.fromPort = function (params) {
9175 if (pdfWorkerPorts.has(params.port)) {
9176 return pdfWorkerPorts.get(params.port);
9177 }
9178 return new PDFWorker(params);
9179 };
9180 PDFWorker.getWorkerSrc = function () {
9181 return getWorkerSrc();
9182 };
9183 return PDFWorker;
9184}();
9185var WorkerTransport = function WorkerTransportClosure() {
9186 function WorkerTransport(messageHandler, loadingTask, networkStream, params, CMapReaderFactory) {
9187 this.messageHandler = messageHandler;
9188 this.loadingTask = loadingTask;
9189 this.commonObjs = new PDFObjects();
9190 this.fontLoader = new _font_loader.FontLoader(loadingTask.docId);
9191 this._params = params;
9192 this.CMapReaderFactory = new CMapReaderFactory({
9193 baseUrl: params.cMapUrl,
9194 isCompressed: params.cMapPacked
9195 });
9196 this.destroyed = false;
9197 this.destroyCapability = null;
9198 this._passwordCapability = null;
9199 this._networkStream = networkStream;
9200 this._fullReader = null;
9201 this._lastProgress = null;
9202 this.pageCache = [];
9203 this.pagePromises = [];
9204 this.downloadInfoCapability = (0, _util.createPromiseCapability)();
9205 this.setupMessageHandler();
9206 }
9207 WorkerTransport.prototype = {
9208 destroy: function WorkerTransport_destroy() {
9209 var _this8 = this;
9210
9211 if (this.destroyCapability) {
9212 return this.destroyCapability.promise;
9213 }
9214 this.destroyed = true;
9215 this.destroyCapability = (0, _util.createPromiseCapability)();
9216 if (this._passwordCapability) {
9217 this._passwordCapability.reject(new Error('Worker was destroyed during onPassword callback'));
9218 }
9219 var waitOn = [];
9220 this.pageCache.forEach(function (page) {
9221 if (page) {
9222 waitOn.push(page._destroy());
9223 }
9224 });
9225 this.pageCache = [];
9226 this.pagePromises = [];
9227 var terminated = this.messageHandler.sendWithPromise('Terminate', null);
9228 waitOn.push(terminated);
9229 Promise.all(waitOn).then(function () {
9230 _this8.fontLoader.clear();
9231 if (_this8._networkStream) {
9232 _this8._networkStream.cancelAllRequests();
9233 }
9234 if (_this8.messageHandler) {
9235 _this8.messageHandler.destroy();
9236 _this8.messageHandler = null;
9237 }
9238 _this8.destroyCapability.resolve();
9239 }, this.destroyCapability.reject);
9240 return this.destroyCapability.promise;
9241 },
9242 setupMessageHandler: function WorkerTransport_setupMessageHandler() {
9243 var messageHandler = this.messageHandler;
9244 var loadingTask = this.loadingTask;
9245 messageHandler.on('GetReader', function (data, sink) {
9246 var _this9 = this;
9247
9248 (0, _util.assert)(this._networkStream);
9249 this._fullReader = this._networkStream.getFullReader();
9250 this._fullReader.onProgress = function (evt) {
9251 _this9._lastProgress = {
9252 loaded: evt.loaded,
9253 total: evt.total
9254 };
9255 };
9256 sink.onPull = function () {
9257 _this9._fullReader.read().then(function (_ref3) {
9258 var value = _ref3.value,
9259 done = _ref3.done;
9260
9261 if (done) {
9262 sink.close();
9263 return;
9264 }
9265 (0, _util.assert)((0, _util.isArrayBuffer)(value));
9266 sink.enqueue(new Uint8Array(value), 1, [value]);
9267 }).catch(function (reason) {
9268 sink.error(reason);
9269 });
9270 };
9271 sink.onCancel = function (reason) {
9272 _this9._fullReader.cancel(reason);
9273 };
9274 }, this);
9275 messageHandler.on('ReaderHeadersReady', function (data) {
9276 var _this10 = this;
9277
9278 var headersCapability = (0, _util.createPromiseCapability)();
9279 var fullReader = this._fullReader;
9280 fullReader.headersReady.then(function () {
9281 if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) {
9282 if (_this10._lastProgress) {
9283 var _loadingTask = _this10.loadingTask;
9284 if (_loadingTask.onProgress) {
9285 _loadingTask.onProgress(_this10._lastProgress);
9286 }
9287 }
9288 fullReader.onProgress = function (evt) {
9289 var loadingTask = _this10.loadingTask;
9290 if (loadingTask.onProgress) {
9291 loadingTask.onProgress({
9292 loaded: evt.loaded,
9293 total: evt.total
9294 });
9295 }
9296 };
9297 }
9298 headersCapability.resolve({
9299 isStreamingSupported: fullReader.isStreamingSupported,
9300 isRangeSupported: fullReader.isRangeSupported,
9301 contentLength: fullReader.contentLength
9302 });
9303 }, headersCapability.reject);
9304 return headersCapability.promise;
9305 }, this);
9306 messageHandler.on('GetRangeReader', function (data, sink) {
9307 (0, _util.assert)(this._networkStream);
9308 var _rangeReader = this._networkStream.getRangeReader(data.begin, data.end);
9309 sink.onPull = function () {
9310 _rangeReader.read().then(function (_ref4) {
9311 var value = _ref4.value,
9312 done = _ref4.done;
9313
9314 if (done) {
9315 sink.close();
9316 return;
9317 }
9318 (0, _util.assert)((0, _util.isArrayBuffer)(value));
9319 sink.enqueue(new Uint8Array(value), 1, [value]);
9320 }).catch(function (reason) {
9321 sink.error(reason);
9322 });
9323 };
9324 sink.onCancel = function (reason) {
9325 _rangeReader.cancel(reason);
9326 };
9327 }, this);
9328 messageHandler.on('GetDoc', function transportDoc(_ref5) {
9329 var pdfInfo = _ref5.pdfInfo;
9330
9331 this.numPages = pdfInfo.numPages;
9332 var loadingTask = this.loadingTask;
9333 var pdfDocument = new PDFDocumentProxy(pdfInfo, this, loadingTask);
9334 this.pdfDocument = pdfDocument;
9335 loadingTask._capability.resolve(pdfDocument);
9336 }, this);
9337 messageHandler.on('PasswordRequest', function transportPasswordRequest(exception) {
9338 var _this11 = this;
9339
9340 this._passwordCapability = (0, _util.createPromiseCapability)();
9341 if (loadingTask.onPassword) {
9342 var updatePassword = function updatePassword(password) {
9343 _this11._passwordCapability.resolve({ password: password });
9344 };
9345 loadingTask.onPassword(updatePassword, exception.code);
9346 } else {
9347 this._passwordCapability.reject(new _util.PasswordException(exception.message, exception.code));
9348 }
9349 return this._passwordCapability.promise;
9350 }, this);
9351 messageHandler.on('PasswordException', function transportPasswordException(exception) {
9352 loadingTask._capability.reject(new _util.PasswordException(exception.message, exception.code));
9353 }, this);
9354 messageHandler.on('InvalidPDF', function transportInvalidPDF(exception) {
9355 this.loadingTask._capability.reject(new _util.InvalidPDFException(exception.message));
9356 }, this);
9357 messageHandler.on('MissingPDF', function transportMissingPDF(exception) {
9358 this.loadingTask._capability.reject(new _util.MissingPDFException(exception.message));
9359 }, this);
9360 messageHandler.on('UnexpectedResponse', function transportUnexpectedResponse(exception) {
9361 this.loadingTask._capability.reject(new _util.UnexpectedResponseException(exception.message, exception.status));
9362 }, this);
9363 messageHandler.on('UnknownError', function transportUnknownError(exception) {
9364 this.loadingTask._capability.reject(new _util.UnknownErrorException(exception.message, exception.details));
9365 }, this);
9366 messageHandler.on('DataLoaded', function transportPage(data) {
9367 this.downloadInfoCapability.resolve(data);
9368 }, this);
9369 messageHandler.on('PDFManagerReady', function transportPage(data) {}, this);
9370 messageHandler.on('StartRenderPage', function transportRender(data) {
9371 if (this.destroyed) {
9372 return;
9373 }
9374 var page = this.pageCache[data.pageIndex];
9375 page._stats.timeEnd('Page Request');
9376 page._startRenderPage(data.transparency, data.intent);
9377 }, this);
9378 messageHandler.on('RenderPageChunk', function transportRender(data) {
9379 if (this.destroyed) {
9380 return;
9381 }
9382 var page = this.pageCache[data.pageIndex];
9383 page._renderPageChunk(data.operatorList, data.intent);
9384 }, this);
9385 messageHandler.on('commonobj', function transportObj(data) {
9386 var _this12 = this;
9387
9388 if (this.destroyed) {
9389 return;
9390 }
9391 var id = data[0];
9392 var type = data[1];
9393 if (this.commonObjs.hasData(id)) {
9394 return;
9395 }
9396 switch (type) {
9397 case 'Font':
9398 var exportedData = data[2];
9399 var params = this._params;
9400 if ('error' in exportedData) {
9401 var exportedError = exportedData.error;
9402 (0, _util.warn)('Error during font loading: ' + exportedError);
9403 this.commonObjs.resolve(id, exportedError);
9404 break;
9405 }
9406 var fontRegistry = null;
9407 if (params.pdfBug && _global_scope2.default.FontInspector && _global_scope2.default.FontInspector.enabled) {
9408 fontRegistry = {
9409 registerFont: function registerFont(font, url) {
9410 _global_scope2.default['FontInspector'].fontAdded(font, url);
9411 }
9412 };
9413 }
9414 var font = new _font_loader.FontFaceObject(exportedData, {
9415 isEvalSupported: params.isEvalSupported,
9416 disableFontFace: params.disableFontFace,
9417 fontRegistry: fontRegistry
9418 });
9419 var fontReady = function fontReady(fontObjs) {
9420 _this12.commonObjs.resolve(id, font);
9421 };
9422 this.fontLoader.bind([font], fontReady);
9423 break;
9424 case 'FontPath':
9425 this.commonObjs.resolve(id, data[2]);
9426 break;
9427 default:
9428 throw new Error('Got unknown common object type ' + type);
9429 }
9430 }, this);
9431 messageHandler.on('obj', function transportObj(data) {
9432 if (this.destroyed) {
9433 return;
9434 }
9435 var id = data[0];
9436 var pageIndex = data[1];
9437 var type = data[2];
9438 var pageProxy = this.pageCache[pageIndex];
9439 var imageData;
9440 if (pageProxy.objs.hasData(id)) {
9441 return;
9442 }
9443 switch (type) {
9444 case 'JpegStream':
9445 imageData = data[3];
9446 return new Promise(function (resolve, reject) {
9447 var img = new Image();
9448 img.onload = function () {
9449 resolve(img);
9450 };
9451 img.onerror = function () {
9452 reject(new Error('Error during JPEG image loading'));
9453 };
9454 img.src = imageData;
9455 }).then(function (img) {
9456 pageProxy.objs.resolve(id, img);
9457 });
9458 case 'Image':
9459 imageData = data[3];
9460 pageProxy.objs.resolve(id, imageData);
9461 var MAX_IMAGE_SIZE_TO_STORE = 8000000;
9462 if (imageData && 'data' in imageData && imageData.data.length > MAX_IMAGE_SIZE_TO_STORE) {
9463 pageProxy.cleanupAfterRender = true;
9464 }
9465 break;
9466 default:
9467 throw new Error('Got unknown object type ' + type);
9468 }
9469 }, this);
9470 messageHandler.on('DocProgress', function transportDocProgress(data) {
9471 if (this.destroyed) {
9472 return;
9473 }
9474 var loadingTask = this.loadingTask;
9475 if (loadingTask.onProgress) {
9476 loadingTask.onProgress({
9477 loaded: data.loaded,
9478 total: data.total
9479 });
9480 }
9481 }, this);
9482 messageHandler.on('PageError', function transportError(data) {
9483 if (this.destroyed) {
9484 return;
9485 }
9486 var page = this.pageCache[data.pageNum - 1];
9487 var intentState = page.intentStates[data.intent];
9488 if (intentState.displayReadyCapability) {
9489 intentState.displayReadyCapability.reject(data.error);
9490 } else {
9491 throw new Error(data.error);
9492 }
9493 if (intentState.operatorList) {
9494 intentState.operatorList.lastChunk = true;
9495 for (var i = 0; i < intentState.renderTasks.length; i++) {
9496 intentState.renderTasks[i].operatorListChanged();
9497 }
9498 }
9499 }, this);
9500 messageHandler.on('UnsupportedFeature', function (data) {
9501 if (this.destroyed) {
9502 return;
9503 }
9504 var loadingTask = this.loadingTask;
9505 if (loadingTask.onUnsupportedFeature) {
9506 loadingTask.onUnsupportedFeature(data.featureId);
9507 }
9508 }, this);
9509 messageHandler.on('JpegDecode', function (data) {
9510 if (this.destroyed) {
9511 return Promise.reject(new Error('Worker was destroyed'));
9512 }
9513 if (typeof document === 'undefined') {
9514 return Promise.reject(new Error('"document" is not defined.'));
9515 }
9516 var imageUrl = data[0];
9517 var components = data[1];
9518 if (components !== 3 && components !== 1) {
9519 return Promise.reject(new Error('Only 3 components or 1 component can be returned'));
9520 }
9521 return new Promise(function (resolve, reject) {
9522 var img = new Image();
9523 img.onload = function () {
9524 var width = img.width;
9525 var height = img.height;
9526 var size = width * height;
9527 var rgbaLength = size * 4;
9528 var buf = new Uint8Array(size * components);
9529 var tmpCanvas = document.createElement('canvas');
9530 tmpCanvas.width = width;
9531 tmpCanvas.height = height;
9532 var tmpCtx = tmpCanvas.getContext('2d');
9533 tmpCtx.drawImage(img, 0, 0);
9534 var data = tmpCtx.getImageData(0, 0, width, height).data;
9535 var i, j;
9536 if (components === 3) {
9537 for (i = 0, j = 0; i < rgbaLength; i += 4, j += 3) {
9538 buf[j] = data[i];
9539 buf[j + 1] = data[i + 1];
9540 buf[j + 2] = data[i + 2];
9541 }
9542 } else if (components === 1) {
9543 for (i = 0, j = 0; i < rgbaLength; i += 4, j++) {
9544 buf[j] = data[i];
9545 }
9546 }
9547 resolve({
9548 data: buf,
9549 width: width,
9550 height: height
9551 });
9552 };
9553 img.onerror = function () {
9554 reject(new Error('JpegDecode failed to load image'));
9555 };
9556 img.src = imageUrl;
9557 });
9558 }, this);
9559 messageHandler.on('FetchBuiltInCMap', function (data) {
9560 if (this.destroyed) {
9561 return Promise.reject(new Error('Worker was destroyed'));
9562 }
9563 return this.CMapReaderFactory.fetch({ name: data.name });
9564 }, this);
9565 },
9566 getData: function WorkerTransport_getData() {
9567 return this.messageHandler.sendWithPromise('GetData', null);
9568 },
9569 getPage: function getPage(pageNumber) {
9570 var _this13 = this;
9571
9572 if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this.numPages) {
9573 return Promise.reject(new Error('Invalid page request'));
9574 }
9575 var pageIndex = pageNumber - 1;
9576 if (pageIndex in this.pagePromises) {
9577 return this.pagePromises[pageIndex];
9578 }
9579 var promise = this.messageHandler.sendWithPromise('GetPage', { pageIndex: pageIndex }).then(function (pageInfo) {
9580 if (_this13.destroyed) {
9581 throw new Error('Transport destroyed');
9582 }
9583 var page = new PDFPageProxy(pageIndex, pageInfo, _this13, _this13._params.pdfBug);
9584 _this13.pageCache[pageIndex] = page;
9585 return page;
9586 });
9587 this.pagePromises[pageIndex] = promise;
9588 return promise;
9589 },
9590
9591 getPageIndex: function WorkerTransport_getPageIndexByRef(ref) {
9592 return this.messageHandler.sendWithPromise('GetPageIndex', { ref: ref }).catch(function (reason) {
9593 return Promise.reject(new Error(reason));
9594 });
9595 },
9596 getAnnotations: function WorkerTransport_getAnnotations(pageIndex, intent) {
9597 return this.messageHandler.sendWithPromise('GetAnnotations', {
9598 pageIndex: pageIndex,
9599 intent: intent
9600 });
9601 },
9602 getDestinations: function WorkerTransport_getDestinations() {
9603 return this.messageHandler.sendWithPromise('GetDestinations', null);
9604 },
9605 getDestination: function WorkerTransport_getDestination(id) {
9606 return this.messageHandler.sendWithPromise('GetDestination', { id: id });
9607 },
9608 getPageLabels: function WorkerTransport_getPageLabels() {
9609 return this.messageHandler.sendWithPromise('GetPageLabels', null);
9610 },
9611 getPageMode: function getPageMode() {
9612 return this.messageHandler.sendWithPromise('GetPageMode', null);
9613 },
9614
9615 getAttachments: function WorkerTransport_getAttachments() {
9616 return this.messageHandler.sendWithPromise('GetAttachments', null);
9617 },
9618 getJavaScript: function WorkerTransport_getJavaScript() {
9619 return this.messageHandler.sendWithPromise('GetJavaScript', null);
9620 },
9621 getOutline: function WorkerTransport_getOutline() {
9622 return this.messageHandler.sendWithPromise('GetOutline', null);
9623 },
9624 getMetadata: function WorkerTransport_getMetadata() {
9625 var _this14 = this;
9626
9627 return this.messageHandler.sendWithPromise('GetMetadata', null).then(function (results) {
9628 return {
9629 info: results[0],
9630 metadata: results[1] ? new _metadata.Metadata(results[1]) : null,
9631 contentDispositionFilename: _this14._fullReader ? _this14._fullReader.filename : null
9632 };
9633 });
9634 },
9635 getStats: function WorkerTransport_getStats() {
9636 return this.messageHandler.sendWithPromise('GetStats', null);
9637 },
9638 startCleanup: function WorkerTransport_startCleanup() {
9639 var _this15 = this;
9640
9641 this.messageHandler.sendWithPromise('Cleanup', null).then(function () {
9642 for (var i = 0, ii = _this15.pageCache.length; i < ii; i++) {
9643 var page = _this15.pageCache[i];
9644 if (page) {
9645 page.cleanup();
9646 }
9647 }
9648 _this15.commonObjs.clear();
9649 _this15.fontLoader.clear();
9650 });
9651 },
9652 get loadingParams() {
9653 var params = this._params;
9654 return (0, _util.shadow)(this, 'loadingParams', {
9655 disableRange: params.disableRange,
9656 disableStream: params.disableStream,
9657 disableAutoFetch: params.disableAutoFetch,
9658 disableCreateObjectURL: params.disableCreateObjectURL
9659 });
9660 }
9661 };
9662 return WorkerTransport;
9663}();
9664var PDFObjects = function PDFObjectsClosure() {
9665 function PDFObjects() {
9666 this.objs = Object.create(null);
9667 }
9668 PDFObjects.prototype = {
9669 ensureObj: function PDFObjects_ensureObj(objId) {
9670 if (this.objs[objId]) {
9671 return this.objs[objId];
9672 }
9673 var obj = {
9674 capability: (0, _util.createPromiseCapability)(),
9675 data: null,
9676 resolved: false
9677 };
9678 this.objs[objId] = obj;
9679 return obj;
9680 },
9681 get: function PDFObjects_get(objId, callback) {
9682 if (callback) {
9683 this.ensureObj(objId).capability.promise.then(callback);
9684 return null;
9685 }
9686 var obj = this.objs[objId];
9687 if (!obj || !obj.resolved) {
9688 throw new Error('Requesting object that isn\'t resolved yet ' + objId);
9689 }
9690 return obj.data;
9691 },
9692 resolve: function PDFObjects_resolve(objId, data) {
9693 var obj = this.ensureObj(objId);
9694 obj.resolved = true;
9695 obj.data = data;
9696 obj.capability.resolve(data);
9697 },
9698 isResolved: function PDFObjects_isResolved(objId) {
9699 var objs = this.objs;
9700 if (!objs[objId]) {
9701 return false;
9702 }
9703 return objs[objId].resolved;
9704 },
9705 hasData: function PDFObjects_hasData(objId) {
9706 return this.isResolved(objId);
9707 },
9708 getData: function PDFObjects_getData(objId) {
9709 var objs = this.objs;
9710 if (!objs[objId] || !objs[objId].resolved) {
9711 return null;
9712 }
9713 return objs[objId].data;
9714 },
9715 clear: function PDFObjects_clear() {
9716 this.objs = Object.create(null);
9717 }
9718 };
9719 return PDFObjects;
9720}();
9721var RenderTask = function RenderTaskClosure() {
9722 function RenderTask(internalRenderTask) {
9723 this._internalRenderTask = internalRenderTask;
9724 this.onContinue = null;
9725 }
9726 RenderTask.prototype = {
9727 get promise() {
9728 return this._internalRenderTask.capability.promise;
9729 },
9730 cancel: function RenderTask_cancel() {
9731 this._internalRenderTask.cancel();
9732 },
9733 then: function RenderTask_then(onFulfilled, onRejected) {
9734 return this.promise.then.apply(this.promise, arguments);
9735 }
9736 };
9737 return RenderTask;
9738}();
9739var InternalRenderTask = function InternalRenderTaskClosure() {
9740 var canvasInRendering = new WeakMap();
9741 function InternalRenderTask(callback, params, objs, commonObjs, operatorList, pageNumber, canvasFactory, webGLContext) {
9742 var pdfBug = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : false;
9743
9744 this.callback = callback;
9745 this.params = params;
9746 this.objs = objs;
9747 this.commonObjs = commonObjs;
9748 this.operatorListIdx = null;
9749 this.operatorList = operatorList;
9750 this.pageNumber = pageNumber;
9751 this.canvasFactory = canvasFactory;
9752 this.webGLContext = webGLContext;
9753 this._pdfBug = pdfBug;
9754 this.running = false;
9755 this.graphicsReadyCallback = null;
9756 this.graphicsReady = false;
9757 this.useRequestAnimationFrame = false;
9758 this.cancelled = false;
9759 this.capability = (0, _util.createPromiseCapability)();
9760 this.task = new RenderTask(this);
9761 this._continueBound = this._continue.bind(this);
9762 this._scheduleNextBound = this._scheduleNext.bind(this);
9763 this._nextBound = this._next.bind(this);
9764 this._canvas = params.canvasContext.canvas;
9765 }
9766 InternalRenderTask.prototype = {
9767 initializeGraphics: function InternalRenderTask_initializeGraphics(transparency) {
9768 if (this._canvas) {
9769 if (canvasInRendering.has(this._canvas)) {
9770 throw new Error('Cannot use the same canvas during multiple render() operations. ' + 'Use different canvas or ensure previous operations were ' + 'cancelled or completed.');
9771 }
9772 canvasInRendering.set(this._canvas, this);
9773 }
9774 if (this.cancelled) {
9775 return;
9776 }
9777 if (this._pdfBug && _global_scope2.default.StepperManager && _global_scope2.default.StepperManager.enabled) {
9778 this.stepper = _global_scope2.default.StepperManager.create(this.pageNumber - 1);
9779 this.stepper.init(this.operatorList);
9780 this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint();
9781 }
9782 var params = this.params;
9783 this.gfx = new _canvas.CanvasGraphics(params.canvasContext, this.commonObjs, this.objs, this.canvasFactory, this.webGLContext, params.imageLayer);
9784 this.gfx.beginDrawing({
9785 transform: params.transform,
9786 viewport: params.viewport,
9787 transparency: transparency,
9788 background: params.background
9789 });
9790 this.operatorListIdx = 0;
9791 this.graphicsReady = true;
9792 if (this.graphicsReadyCallback) {
9793 this.graphicsReadyCallback();
9794 }
9795 },
9796 cancel: function InternalRenderTask_cancel() {
9797 this.running = false;
9798 this.cancelled = true;
9799 if (this._canvas) {
9800 canvasInRendering.delete(this._canvas);
9801 }
9802 this.callback(new _dom_utils.RenderingCancelledException('Rendering cancelled, page ' + this.pageNumber, 'canvas'));
9803 },
9804 operatorListChanged: function InternalRenderTask_operatorListChanged() {
9805 if (!this.graphicsReady) {
9806 if (!this.graphicsReadyCallback) {
9807 this.graphicsReadyCallback = this._continueBound;
9808 }
9809 return;
9810 }
9811 if (this.stepper) {
9812 this.stepper.updateOperatorList(this.operatorList);
9813 }
9814 if (this.running) {
9815 return;
9816 }
9817 this._continue();
9818 },
9819 _continue: function InternalRenderTask__continue() {
9820 this.running = true;
9821 if (this.cancelled) {
9822 return;
9823 }
9824 if (this.task.onContinue) {
9825 this.task.onContinue(this._scheduleNextBound);
9826 } else {
9827 this._scheduleNext();
9828 }
9829 },
9830 _scheduleNext: function InternalRenderTask__scheduleNext() {
9831 if (this.useRequestAnimationFrame && typeof window !== 'undefined') {
9832 window.requestAnimationFrame(this._nextBound);
9833 } else {
9834 Promise.resolve(undefined).then(this._nextBound);
9835 }
9836 },
9837 _next: function InternalRenderTask__next() {
9838 if (this.cancelled) {
9839 return;
9840 }
9841 this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper);
9842 if (this.operatorListIdx === this.operatorList.argsArray.length) {
9843 this.running = false;
9844 if (this.operatorList.lastChunk) {
9845 this.gfx.endDrawing();
9846 if (this._canvas) {
9847 canvasInRendering.delete(this._canvas);
9848 }
9849 this.callback();
9850 }
9851 }
9852 }
9853 };
9854 return InternalRenderTask;
9855}();
9856var version, build;
9857{
9858 exports.version = version = '2.0.489';
9859 exports.build = build = '7d7bc80e';
9860}
9861exports.getDocument = getDocument;
9862exports.LoopbackPort = LoopbackPort;
9863exports.PDFDataRangeTransport = PDFDataRangeTransport;
9864exports.PDFWorker = PDFWorker;
9865exports.PDFDocumentProxy = PDFDocumentProxy;
9866exports.PDFPageProxy = PDFPageProxy;
9867exports.setPDFNetworkStreamFactory = setPDFNetworkStreamFactory;
9868exports.version = version;
9869exports.build = build;
9870
9871/***/ }),
9872/* 118 */
9873/***/ (function(module, exports, __w_pdfjs_require__) {
9874
9875"use strict";
9876
9877
9878Object.defineProperty(exports, "__esModule", {
9879 value: true
9880});
9881exports.FontLoader = exports.FontFaceObject = undefined;
9882
9883var _util = __w_pdfjs_require__(0);
9884
9885function FontLoader(docId) {
9886 this.docId = docId;
9887 this.styleElement = null;
9888 this.nativeFontFaces = [];
9889 this.loadTestFontId = 0;
9890 this.loadingContext = {
9891 requests: [],
9892 nextRequestId: 0
9893 };
9894}
9895FontLoader.prototype = {
9896 insertRule: function fontLoaderInsertRule(rule) {
9897 var styleElement = this.styleElement;
9898 if (!styleElement) {
9899 styleElement = this.styleElement = document.createElement('style');
9900 styleElement.id = 'PDFJS_FONT_STYLE_TAG_' + this.docId;
9901 document.documentElement.getElementsByTagName('head')[0].appendChild(styleElement);
9902 }
9903 var styleSheet = styleElement.sheet;
9904 styleSheet.insertRule(rule, styleSheet.cssRules.length);
9905 },
9906 clear: function fontLoaderClear() {
9907 if (this.styleElement) {
9908 this.styleElement.remove();
9909 this.styleElement = null;
9910 }
9911 this.nativeFontFaces.forEach(function (nativeFontFace) {
9912 document.fonts.delete(nativeFontFace);
9913 });
9914 this.nativeFontFaces.length = 0;
9915 }
9916};
9917{
9918 var getLoadTestFont = function getLoadTestFont() {
9919 return atob('T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQAFQ' + 'AABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAAALwA' + 'AAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgAAAAGbm' + 'FtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1AAsD6AAA' + 'AADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD6AAAAAAD6A' + 'ABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACMAooCvAAAAeAA' + 'MQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4DIP84AFoDIQAAAA' + 'AAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAAAAEAAQAAAAEAAAAA' + 'AAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUAAQAAAAEAAAAAAAYAAQ' + 'AAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgABAAMAAQQJAAMAAgABAAMA' + 'AQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABYAAAAAAAAAwAAAAMAAAAcAA' + 'EAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAAAC7////TAAEAAAAAAAABBgAA' + 'AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAA' + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' + 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAA' + 'AAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAAAAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgc' + 'A/gXBIwMAYuL+nz5tQXkD5j3CBLnEQACAQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWF' + 'hYWFhYWFhYAAABAQAADwACAQEEE/t3Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQA' + 'AAAAAAABAAAAAMmJbzEAAAAAzgTjFQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAg' + 'ABAAAAAAAAAAAD6AAAAAAAAA==');
9920 };
9921 Object.defineProperty(FontLoader.prototype, 'loadTestFont', {
9922 get: function get() {
9923 return (0, _util.shadow)(this, 'loadTestFont', getLoadTestFont());
9924 },
9925
9926 configurable: true
9927 });
9928 FontLoader.prototype.addNativeFontFace = function fontLoader_addNativeFontFace(nativeFontFace) {
9929 this.nativeFontFaces.push(nativeFontFace);
9930 document.fonts.add(nativeFontFace);
9931 };
9932 FontLoader.prototype.bind = function fontLoaderBind(fonts, callback) {
9933 var rules = [];
9934 var fontsToLoad = [];
9935 var fontLoadPromises = [];
9936 var getNativeFontPromise = function getNativeFontPromise(nativeFontFace) {
9937 return nativeFontFace.loaded.catch(function (e) {
9938 (0, _util.warn)('Failed to load font "' + nativeFontFace.family + '": ' + e);
9939 });
9940 };
9941 var isFontLoadingAPISupported = FontLoader.isFontLoadingAPISupported && !FontLoader.isSyncFontLoadingSupported;
9942 for (var i = 0, ii = fonts.length; i < ii; i++) {
9943 var font = fonts[i];
9944 if (font.attached || font.loading === false) {
9945 continue;
9946 }
9947 font.attached = true;
9948 if (isFontLoadingAPISupported) {
9949 var nativeFontFace = font.createNativeFontFace();
9950 if (nativeFontFace) {
9951 this.addNativeFontFace(nativeFontFace);
9952 fontLoadPromises.push(getNativeFontPromise(nativeFontFace));
9953 }
9954 } else {
9955 var rule = font.createFontFaceRule();
9956 if (rule) {
9957 this.insertRule(rule);
9958 rules.push(rule);
9959 fontsToLoad.push(font);
9960 }
9961 }
9962 }
9963 var request = this.queueLoadingCallback(callback);
9964 if (isFontLoadingAPISupported) {
9965 Promise.all(fontLoadPromises).then(function () {
9966 request.complete();
9967 });
9968 } else if (rules.length > 0 && !FontLoader.isSyncFontLoadingSupported) {
9969 this.prepareFontLoadEvent(rules, fontsToLoad, request);
9970 } else {
9971 request.complete();
9972 }
9973 };
9974 FontLoader.prototype.queueLoadingCallback = function FontLoader_queueLoadingCallback(callback) {
9975 function LoadLoader_completeRequest() {
9976 (0, _util.assert)(!request.end, 'completeRequest() cannot be called twice');
9977 request.end = Date.now();
9978 while (context.requests.length > 0 && context.requests[0].end) {
9979 var otherRequest = context.requests.shift();
9980 setTimeout(otherRequest.callback, 0);
9981 }
9982 }
9983 var context = this.loadingContext;
9984 var requestId = 'pdfjs-font-loading-' + context.nextRequestId++;
9985 var request = {
9986 id: requestId,
9987 complete: LoadLoader_completeRequest,
9988 callback: callback,
9989 started: Date.now()
9990 };
9991 context.requests.push(request);
9992 return request;
9993 };
9994 FontLoader.prototype.prepareFontLoadEvent = function fontLoaderPrepareFontLoadEvent(rules, fonts, request) {
9995 function int32(data, offset) {
9996 return data.charCodeAt(offset) << 24 | data.charCodeAt(offset + 1) << 16 | data.charCodeAt(offset + 2) << 8 | data.charCodeAt(offset + 3) & 0xff;
9997 }
9998 function spliceString(s, offset, remove, insert) {
9999 var chunk1 = s.substr(0, offset);
10000 var chunk2 = s.substr(offset + remove);
10001 return chunk1 + insert + chunk2;
10002 }
10003 var i, ii;
10004 var canvas = document.createElement('canvas');
10005 canvas.width = 1;
10006 canvas.height = 1;
10007 var ctx = canvas.getContext('2d');
10008 var called = 0;
10009 function isFontReady(name, callback) {
10010 called++;
10011 if (called > 30) {
10012 (0, _util.warn)('Load test font never loaded.');
10013 callback();
10014 return;
10015 }
10016 ctx.font = '30px ' + name;
10017 ctx.fillText('.', 0, 20);
10018 var imageData = ctx.getImageData(0, 0, 1, 1);
10019 if (imageData.data[3] > 0) {
10020 callback();
10021 return;
10022 }
10023 setTimeout(isFontReady.bind(null, name, callback));
10024 }
10025 var loadTestFontId = 'lt' + Date.now() + this.loadTestFontId++;
10026 var data = this.loadTestFont;
10027 var COMMENT_OFFSET = 976;
10028 data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length, loadTestFontId);
10029 var CFF_CHECKSUM_OFFSET = 16;
10030 var XXXX_VALUE = 0x58585858;
10031 var checksum = int32(data, CFF_CHECKSUM_OFFSET);
10032 for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) {
10033 checksum = checksum - XXXX_VALUE + int32(loadTestFontId, i) | 0;
10034 }
10035 if (i < loadTestFontId.length) {
10036 checksum = checksum - XXXX_VALUE + int32(loadTestFontId + 'XXX', i) | 0;
10037 }
10038 data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, (0, _util.string32)(checksum));
10039 var url = 'url(data:font/opentype;base64,' + btoa(data) + ');';
10040 var rule = '@font-face { font-family:"' + loadTestFontId + '";src:' + url + '}';
10041 this.insertRule(rule);
10042 var names = [];
10043 for (i = 0, ii = fonts.length; i < ii; i++) {
10044 names.push(fonts[i].loadedName);
10045 }
10046 names.push(loadTestFontId);
10047 var div = document.createElement('div');
10048 div.setAttribute('style', 'visibility: hidden;' + 'width: 10px; height: 10px;' + 'position: absolute; top: 0px; left: 0px;');
10049 for (i = 0, ii = names.length; i < ii; ++i) {
10050 var span = document.createElement('span');
10051 span.textContent = 'Hi';
10052 span.style.fontFamily = names[i];
10053 div.appendChild(span);
10054 }
10055 document.body.appendChild(div);
10056 isFontReady(loadTestFontId, function () {
10057 document.body.removeChild(div);
10058 request.complete();
10059 });
10060 };
10061}
10062{
10063 FontLoader.isFontLoadingAPISupported = typeof document !== 'undefined' && !!document.fonts;
10064}
10065{
10066 var isSyncFontLoadingSupported = function isSyncFontLoadingSupported() {
10067 if (typeof navigator === 'undefined') {
10068 return true;
10069 }
10070 var supported = false;
10071 var m = /Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(navigator.userAgent);
10072 if (m && m[1] >= 14) {
10073 supported = true;
10074 }
10075 return supported;
10076 };
10077 Object.defineProperty(FontLoader, 'isSyncFontLoadingSupported', {
10078 get: function get() {
10079 return (0, _util.shadow)(FontLoader, 'isSyncFontLoadingSupported', isSyncFontLoadingSupported());
10080 },
10081
10082 enumerable: true,
10083 configurable: true
10084 });
10085}
10086var IsEvalSupportedCached = {
10087 get value() {
10088 return (0, _util.shadow)(this, 'value', (0, _util.isEvalSupported)());
10089 }
10090};
10091var FontFaceObject = function FontFaceObjectClosure() {
10092 function FontFaceObject(translatedData, _ref) {
10093 var _ref$isEvalSupported = _ref.isEvalSupported,
10094 isEvalSupported = _ref$isEvalSupported === undefined ? true : _ref$isEvalSupported,
10095 _ref$disableFontFace = _ref.disableFontFace,
10096 disableFontFace = _ref$disableFontFace === undefined ? false : _ref$disableFontFace,
10097 _ref$fontRegistry = _ref.fontRegistry,
10098 fontRegistry = _ref$fontRegistry === undefined ? null : _ref$fontRegistry;
10099
10100 this.compiledGlyphs = Object.create(null);
10101 for (var i in translatedData) {
10102 this[i] = translatedData[i];
10103 }
10104 this.isEvalSupported = isEvalSupported !== false;
10105 this.disableFontFace = disableFontFace === true;
10106 this.fontRegistry = fontRegistry;
10107 }
10108 FontFaceObject.prototype = {
10109 createNativeFontFace: function FontFaceObject_createNativeFontFace() {
10110 if (!this.data || this.disableFontFace) {
10111 return null;
10112 }
10113 var nativeFontFace = new FontFace(this.loadedName, this.data, {});
10114 if (this.fontRegistry) {
10115 this.fontRegistry.registerFont(this);
10116 }
10117 return nativeFontFace;
10118 },
10119 createFontFaceRule: function FontFaceObject_createFontFaceRule() {
10120 if (!this.data || this.disableFontFace) {
10121 return null;
10122 }
10123 var data = (0, _util.bytesToString)(new Uint8Array(this.data));
10124 var fontName = this.loadedName;
10125 var url = 'url(data:' + this.mimetype + ';base64,' + btoa(data) + ');';
10126 var rule = '@font-face { font-family:"' + fontName + '";src:' + url + '}';
10127 if (this.fontRegistry) {
10128 this.fontRegistry.registerFont(this, url);
10129 }
10130 return rule;
10131 },
10132 getPathGenerator: function FontFaceObject_getPathGenerator(objs, character) {
10133 if (!(character in this.compiledGlyphs)) {
10134 var cmds = objs.get(this.loadedName + '_path_' + character);
10135 var current, i, len;
10136 if (this.isEvalSupported && IsEvalSupportedCached.value) {
10137 var args,
10138 js = '';
10139 for (i = 0, len = cmds.length; i < len; i++) {
10140 current = cmds[i];
10141 if (current.args !== undefined) {
10142 args = current.args.join(',');
10143 } else {
10144 args = '';
10145 }
10146 js += 'c.' + current.cmd + '(' + args + ');\n';
10147 }
10148 this.compiledGlyphs[character] = new Function('c', 'size', js);
10149 } else {
10150 this.compiledGlyphs[character] = function (c, size) {
10151 for (i = 0, len = cmds.length; i < len; i++) {
10152 current = cmds[i];
10153 if (current.cmd === 'scale') {
10154 current.args = [size, -size];
10155 }
10156 c[current.cmd].apply(c, current.args);
10157 }
10158 };
10159 }
10160 }
10161 return this.compiledGlyphs[character];
10162 }
10163 };
10164 return FontFaceObject;
10165}();
10166exports.FontFaceObject = FontFaceObject;
10167exports.FontLoader = FontLoader;
10168
10169/***/ }),
10170/* 119 */
10171/***/ (function(module, exports, __w_pdfjs_require__) {
10172
10173"use strict";
10174
10175
10176Object.defineProperty(exports, "__esModule", {
10177 value: true
10178});
10179exports.CanvasGraphics = undefined;
10180
10181var _util = __w_pdfjs_require__(0);
10182
10183var _pattern_helper = __w_pdfjs_require__(120);
10184
10185var MIN_FONT_SIZE = 16;
10186var MAX_FONT_SIZE = 100;
10187var MAX_GROUP_SIZE = 4096;
10188var MIN_WIDTH_FACTOR = 0.65;
10189var COMPILE_TYPE3_GLYPHS = true;
10190var MAX_SIZE_TO_COMPILE = 1000;
10191var FULL_CHUNK_HEIGHT = 16;
10192var IsLittleEndianCached = {
10193 get value() {
10194 return (0, _util.shadow)(IsLittleEndianCached, 'value', (0, _util.isLittleEndian)());
10195 }
10196};
10197function addContextCurrentTransform(ctx) {
10198 if (!ctx.mozCurrentTransform) {
10199 ctx._originalSave = ctx.save;
10200 ctx._originalRestore = ctx.restore;
10201 ctx._originalRotate = ctx.rotate;
10202 ctx._originalScale = ctx.scale;
10203 ctx._originalTranslate = ctx.translate;
10204 ctx._originalTransform = ctx.transform;
10205 ctx._originalSetTransform = ctx.setTransform;
10206 ctx._transformMatrix = ctx._transformMatrix || [1, 0, 0, 1, 0, 0];
10207 ctx._transformStack = [];
10208 Object.defineProperty(ctx, 'mozCurrentTransform', {
10209 get: function getCurrentTransform() {
10210 return this._transformMatrix;
10211 }
10212 });
10213 Object.defineProperty(ctx, 'mozCurrentTransformInverse', {
10214 get: function getCurrentTransformInverse() {
10215 var m = this._transformMatrix;
10216 var a = m[0],
10217 b = m[1],
10218 c = m[2],
10219 d = m[3],
10220 e = m[4],
10221 f = m[5];
10222 var ad_bc = a * d - b * c;
10223 var bc_ad = b * c - a * d;
10224 return [d / ad_bc, b / bc_ad, c / bc_ad, a / ad_bc, (d * e - c * f) / bc_ad, (b * e - a * f) / ad_bc];
10225 }
10226 });
10227 ctx.save = function ctxSave() {
10228 var old = this._transformMatrix;
10229 this._transformStack.push(old);
10230 this._transformMatrix = old.slice(0, 6);
10231 this._originalSave();
10232 };
10233 ctx.restore = function ctxRestore() {
10234 var prev = this._transformStack.pop();
10235 if (prev) {
10236 this._transformMatrix = prev;
10237 this._originalRestore();
10238 }
10239 };
10240 ctx.translate = function ctxTranslate(x, y) {
10241 var m = this._transformMatrix;
10242 m[4] = m[0] * x + m[2] * y + m[4];
10243 m[5] = m[1] * x + m[3] * y + m[5];
10244 this._originalTranslate(x, y);
10245 };
10246 ctx.scale = function ctxScale(x, y) {
10247 var m = this._transformMatrix;
10248 m[0] = m[0] * x;
10249 m[1] = m[1] * x;
10250 m[2] = m[2] * y;
10251 m[3] = m[3] * y;
10252 this._originalScale(x, y);
10253 };
10254 ctx.transform = function ctxTransform(a, b, c, d, e, f) {
10255 var m = this._transformMatrix;
10256 this._transformMatrix = [m[0] * a + m[2] * b, m[1] * a + m[3] * b, m[0] * c + m[2] * d, m[1] * c + m[3] * d, m[0] * e + m[2] * f + m[4], m[1] * e + m[3] * f + m[5]];
10257 ctx._originalTransform(a, b, c, d, e, f);
10258 };
10259 ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) {
10260 this._transformMatrix = [a, b, c, d, e, f];
10261 ctx._originalSetTransform(a, b, c, d, e, f);
10262 };
10263 ctx.rotate = function ctxRotate(angle) {
10264 var cosValue = Math.cos(angle);
10265 var sinValue = Math.sin(angle);
10266 var m = this._transformMatrix;
10267 this._transformMatrix = [m[0] * cosValue + m[2] * sinValue, m[1] * cosValue + m[3] * sinValue, m[0] * -sinValue + m[2] * cosValue, m[1] * -sinValue + m[3] * cosValue, m[4], m[5]];
10268 this._originalRotate(angle);
10269 };
10270 }
10271}
10272var CachedCanvases = function CachedCanvasesClosure() {
10273 function CachedCanvases(canvasFactory) {
10274 this.canvasFactory = canvasFactory;
10275 this.cache = Object.create(null);
10276 }
10277 CachedCanvases.prototype = {
10278 getCanvas: function CachedCanvases_getCanvas(id, width, height, trackTransform) {
10279 var canvasEntry;
10280 if (this.cache[id] !== undefined) {
10281 canvasEntry = this.cache[id];
10282 this.canvasFactory.reset(canvasEntry, width, height);
10283 canvasEntry.context.setTransform(1, 0, 0, 1, 0, 0);
10284 } else {
10285 canvasEntry = this.canvasFactory.create(width, height);
10286 this.cache[id] = canvasEntry;
10287 }
10288 if (trackTransform) {
10289 addContextCurrentTransform(canvasEntry.context);
10290 }
10291 return canvasEntry;
10292 },
10293 clear: function clear() {
10294 for (var id in this.cache) {
10295 var canvasEntry = this.cache[id];
10296 this.canvasFactory.destroy(canvasEntry);
10297 delete this.cache[id];
10298 }
10299 }
10300 };
10301 return CachedCanvases;
10302}();
10303function compileType3Glyph(imgData) {
10304 var POINT_TO_PROCESS_LIMIT = 1000;
10305 var width = imgData.width,
10306 height = imgData.height;
10307 var i,
10308 j,
10309 j0,
10310 width1 = width + 1;
10311 var points = new Uint8Array(width1 * (height + 1));
10312 var POINT_TYPES = new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]);
10313 var lineSize = width + 7 & ~7,
10314 data0 = imgData.data;
10315 var data = new Uint8Array(lineSize * height),
10316 pos = 0,
10317 ii;
10318 for (i = 0, ii = data0.length; i < ii; i++) {
10319 var mask = 128,
10320 elem = data0[i];
10321 while (mask > 0) {
10322 data[pos++] = elem & mask ? 0 : 255;
10323 mask >>= 1;
10324 }
10325 }
10326 var count = 0;
10327 pos = 0;
10328 if (data[pos] !== 0) {
10329 points[0] = 1;
10330 ++count;
10331 }
10332 for (j = 1; j < width; j++) {
10333 if (data[pos] !== data[pos + 1]) {
10334 points[j] = data[pos] ? 2 : 1;
10335 ++count;
10336 }
10337 pos++;
10338 }
10339 if (data[pos] !== 0) {
10340 points[j] = 2;
10341 ++count;
10342 }
10343 for (i = 1; i < height; i++) {
10344 pos = i * lineSize;
10345 j0 = i * width1;
10346 if (data[pos - lineSize] !== data[pos]) {
10347 points[j0] = data[pos] ? 1 : 8;
10348 ++count;
10349 }
10350 var sum = (data[pos] ? 4 : 0) + (data[pos - lineSize] ? 8 : 0);
10351 for (j = 1; j < width; j++) {
10352 sum = (sum >> 2) + (data[pos + 1] ? 4 : 0) + (data[pos - lineSize + 1] ? 8 : 0);
10353 if (POINT_TYPES[sum]) {
10354 points[j0 + j] = POINT_TYPES[sum];
10355 ++count;
10356 }
10357 pos++;
10358 }
10359 if (data[pos - lineSize] !== data[pos]) {
10360 points[j0 + j] = data[pos] ? 2 : 4;
10361 ++count;
10362 }
10363 if (count > POINT_TO_PROCESS_LIMIT) {
10364 return null;
10365 }
10366 }
10367 pos = lineSize * (height - 1);
10368 j0 = i * width1;
10369 if (data[pos] !== 0) {
10370 points[j0] = 8;
10371 ++count;
10372 }
10373 for (j = 1; j < width; j++) {
10374 if (data[pos] !== data[pos + 1]) {
10375 points[j0 + j] = data[pos] ? 4 : 8;
10376 ++count;
10377 }
10378 pos++;
10379 }
10380 if (data[pos] !== 0) {
10381 points[j0 + j] = 4;
10382 ++count;
10383 }
10384 if (count > POINT_TO_PROCESS_LIMIT) {
10385 return null;
10386 }
10387 var steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]);
10388 var outlines = [];
10389 for (i = 0; count && i <= height; i++) {
10390 var p = i * width1;
10391 var end = p + width;
10392 while (p < end && !points[p]) {
10393 p++;
10394 }
10395 if (p === end) {
10396 continue;
10397 }
10398 var coords = [p % width1, i];
10399 var type = points[p],
10400 p0 = p,
10401 pp;
10402 do {
10403 var step = steps[type];
10404 do {
10405 p += step;
10406 } while (!points[p]);
10407 pp = points[p];
10408 if (pp !== 5 && pp !== 10) {
10409 type = pp;
10410 points[p] = 0;
10411 } else {
10412 type = pp & 0x33 * type >> 4;
10413 points[p] &= type >> 2 | type << 2;
10414 }
10415 coords.push(p % width1);
10416 coords.push(p / width1 | 0);
10417 --count;
10418 } while (p0 !== p);
10419 outlines.push(coords);
10420 --i;
10421 }
10422 var drawOutline = function drawOutline(c) {
10423 c.save();
10424 c.scale(1 / width, -1 / height);
10425 c.translate(0, -height);
10426 c.beginPath();
10427 for (var i = 0, ii = outlines.length; i < ii; i++) {
10428 var o = outlines[i];
10429 c.moveTo(o[0], o[1]);
10430 for (var j = 2, jj = o.length; j < jj; j += 2) {
10431 c.lineTo(o[j], o[j + 1]);
10432 }
10433 }
10434 c.fill();
10435 c.beginPath();
10436 c.restore();
10437 };
10438 return drawOutline;
10439}
10440var CanvasExtraState = function CanvasExtraStateClosure() {
10441 function CanvasExtraState() {
10442 this.alphaIsShape = false;
10443 this.fontSize = 0;
10444 this.fontSizeScale = 1;
10445 this.textMatrix = _util.IDENTITY_MATRIX;
10446 this.textMatrixScale = 1;
10447 this.fontMatrix = _util.FONT_IDENTITY_MATRIX;
10448 this.leading = 0;
10449 this.x = 0;
10450 this.y = 0;
10451 this.lineX = 0;
10452 this.lineY = 0;
10453 this.charSpacing = 0;
10454 this.wordSpacing = 0;
10455 this.textHScale = 1;
10456 this.textRenderingMode = _util.TextRenderingMode.FILL;
10457 this.textRise = 0;
10458 this.fillColor = '#000000';
10459 this.strokeColor = '#000000';
10460 this.patternFill = false;
10461 this.fillAlpha = 1;
10462 this.strokeAlpha = 1;
10463 this.lineWidth = 1;
10464 this.activeSMask = null;
10465 this.resumeSMaskCtx = null;
10466 }
10467 CanvasExtraState.prototype = {
10468 clone: function CanvasExtraState_clone() {
10469 return Object.create(this);
10470 },
10471 setCurrentPoint: function CanvasExtraState_setCurrentPoint(x, y) {
10472 this.x = x;
10473 this.y = y;
10474 }
10475 };
10476 return CanvasExtraState;
10477}();
10478var CanvasGraphics = function CanvasGraphicsClosure() {
10479 var EXECUTION_TIME = 15;
10480 var EXECUTION_STEPS = 10;
10481 function CanvasGraphics(canvasCtx, commonObjs, objs, canvasFactory, webGLContext, imageLayer) {
10482 this.ctx = canvasCtx;
10483 this.current = new CanvasExtraState();
10484 this.stateStack = [];
10485 this.pendingClip = null;
10486 this.pendingEOFill = false;
10487 this.res = null;
10488 this.xobjs = null;
10489 this.commonObjs = commonObjs;
10490 this.objs = objs;
10491 this.canvasFactory = canvasFactory;
10492 this.webGLContext = webGLContext;
10493 this.imageLayer = imageLayer;
10494 this.groupStack = [];
10495 this.processingType3 = null;
10496 this.baseTransform = null;
10497 this.baseTransformStack = [];
10498 this.groupLevel = 0;
10499 this.smaskStack = [];
10500 this.smaskCounter = 0;
10501 this.tempSMask = null;
10502 this.cachedCanvases = new CachedCanvases(this.canvasFactory);
10503 if (canvasCtx) {
10504 addContextCurrentTransform(canvasCtx);
10505 }
10506 this.cachedGetSinglePixelWidth = null;
10507 }
10508 function putBinaryImageData(ctx, imgData) {
10509 if (typeof ImageData !== 'undefined' && imgData instanceof ImageData) {
10510 ctx.putImageData(imgData, 0, 0);
10511 return;
10512 }
10513 var height = imgData.height,
10514 width = imgData.width;
10515 var partialChunkHeight = height % FULL_CHUNK_HEIGHT;
10516 var fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;
10517 var totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;
10518 var chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);
10519 var srcPos = 0,
10520 destPos;
10521 var src = imgData.data;
10522 var dest = chunkImgData.data;
10523 var i, j, thisChunkHeight, elemsInThisChunk;
10524 if (imgData.kind === _util.ImageKind.GRAYSCALE_1BPP) {
10525 var srcLength = src.byteLength;
10526 var dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2);
10527 var dest32DataLength = dest32.length;
10528 var fullSrcDiff = width + 7 >> 3;
10529 var white = 0xFFFFFFFF;
10530 var black = IsLittleEndianCached.value ? 0xFF000000 : 0x000000FF;
10531 for (i = 0; i < totalChunks; i++) {
10532 thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;
10533 destPos = 0;
10534 for (j = 0; j < thisChunkHeight; j++) {
10535 var srcDiff = srcLength - srcPos;
10536 var k = 0;
10537 var kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7;
10538 var kEndUnrolled = kEnd & ~7;
10539 var mask = 0;
10540 var srcByte = 0;
10541 for (; k < kEndUnrolled; k += 8) {
10542 srcByte = src[srcPos++];
10543 dest32[destPos++] = srcByte & 128 ? white : black;
10544 dest32[destPos++] = srcByte & 64 ? white : black;
10545 dest32[destPos++] = srcByte & 32 ? white : black;
10546 dest32[destPos++] = srcByte & 16 ? white : black;
10547 dest32[destPos++] = srcByte & 8 ? white : black;
10548 dest32[destPos++] = srcByte & 4 ? white : black;
10549 dest32[destPos++] = srcByte & 2 ? white : black;
10550 dest32[destPos++] = srcByte & 1 ? white : black;
10551 }
10552 for (; k < kEnd; k++) {
10553 if (mask === 0) {
10554 srcByte = src[srcPos++];
10555 mask = 128;
10556 }
10557 dest32[destPos++] = srcByte & mask ? white : black;
10558 mask >>= 1;
10559 }
10560 }
10561 while (destPos < dest32DataLength) {
10562 dest32[destPos++] = 0;
10563 }
10564 ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);
10565 }
10566 } else if (imgData.kind === _util.ImageKind.RGBA_32BPP) {
10567 j = 0;
10568 elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4;
10569 for (i = 0; i < fullChunks; i++) {
10570 dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));
10571 srcPos += elemsInThisChunk;
10572 ctx.putImageData(chunkImgData, 0, j);
10573 j += FULL_CHUNK_HEIGHT;
10574 }
10575 if (i < totalChunks) {
10576 elemsInThisChunk = width * partialChunkHeight * 4;
10577 dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));
10578 ctx.putImageData(chunkImgData, 0, j);
10579 }
10580 } else if (imgData.kind === _util.ImageKind.RGB_24BPP) {
10581 thisChunkHeight = FULL_CHUNK_HEIGHT;
10582 elemsInThisChunk = width * thisChunkHeight;
10583 for (i = 0; i < totalChunks; i++) {
10584 if (i >= fullChunks) {
10585 thisChunkHeight = partialChunkHeight;
10586 elemsInThisChunk = width * thisChunkHeight;
10587 }
10588 destPos = 0;
10589 for (j = elemsInThisChunk; j--;) {
10590 dest[destPos++] = src[srcPos++];
10591 dest[destPos++] = src[srcPos++];
10592 dest[destPos++] = src[srcPos++];
10593 dest[destPos++] = 255;
10594 }
10595 ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);
10596 }
10597 } else {
10598 throw new Error('bad image kind: ' + imgData.kind);
10599 }
10600 }
10601 function putBinaryImageMask(ctx, imgData) {
10602 var height = imgData.height,
10603 width = imgData.width;
10604 var partialChunkHeight = height % FULL_CHUNK_HEIGHT;
10605 var fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;
10606 var totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;
10607 var chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);
10608 var srcPos = 0;
10609 var src = imgData.data;
10610 var dest = chunkImgData.data;
10611 for (var i = 0; i < totalChunks; i++) {
10612 var thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;
10613 var destPos = 3;
10614 for (var j = 0; j < thisChunkHeight; j++) {
10615 var mask = 0;
10616 for (var k = 0; k < width; k++) {
10617 if (!mask) {
10618 var elem = src[srcPos++];
10619 mask = 128;
10620 }
10621 dest[destPos] = elem & mask ? 0 : 255;
10622 destPos += 4;
10623 mask >>= 1;
10624 }
10625 }
10626 ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);
10627 }
10628 }
10629 function copyCtxState(sourceCtx, destCtx) {
10630 var properties = ['strokeStyle', 'fillStyle', 'fillRule', 'globalAlpha', 'lineWidth', 'lineCap', 'lineJoin', 'miterLimit', 'globalCompositeOperation', 'font'];
10631 for (var i = 0, ii = properties.length; i < ii; i++) {
10632 var property = properties[i];
10633 if (sourceCtx[property] !== undefined) {
10634 destCtx[property] = sourceCtx[property];
10635 }
10636 }
10637 if (sourceCtx.setLineDash !== undefined) {
10638 destCtx.setLineDash(sourceCtx.getLineDash());
10639 destCtx.lineDashOffset = sourceCtx.lineDashOffset;
10640 }
10641 }
10642 function resetCtxToDefault(ctx) {
10643 ctx.strokeStyle = '#000000';
10644 ctx.fillStyle = '#000000';
10645 ctx.fillRule = 'nonzero';
10646 ctx.globalAlpha = 1;
10647 ctx.lineWidth = 1;
10648 ctx.lineCap = 'butt';
10649 ctx.lineJoin = 'miter';
10650 ctx.miterLimit = 10;
10651 ctx.globalCompositeOperation = 'source-over';
10652 ctx.font = '10px sans-serif';
10653 if (ctx.setLineDash !== undefined) {
10654 ctx.setLineDash([]);
10655 ctx.lineDashOffset = 0;
10656 }
10657 }
10658 function composeSMaskBackdrop(bytes, r0, g0, b0) {
10659 var length = bytes.length;
10660 for (var i = 3; i < length; i += 4) {
10661 var alpha = bytes[i];
10662 if (alpha === 0) {
10663 bytes[i - 3] = r0;
10664 bytes[i - 2] = g0;
10665 bytes[i - 1] = b0;
10666 } else if (alpha < 255) {
10667 var alpha_ = 255 - alpha;
10668 bytes[i - 3] = bytes[i - 3] * alpha + r0 * alpha_ >> 8;
10669 bytes[i - 2] = bytes[i - 2] * alpha + g0 * alpha_ >> 8;
10670 bytes[i - 1] = bytes[i - 1] * alpha + b0 * alpha_ >> 8;
10671 }
10672 }
10673 }
10674 function composeSMaskAlpha(maskData, layerData, transferMap) {
10675 var length = maskData.length;
10676 var scale = 1 / 255;
10677 for (var i = 3; i < length; i += 4) {
10678 var alpha = transferMap ? transferMap[maskData[i]] : maskData[i];
10679 layerData[i] = layerData[i] * alpha * scale | 0;
10680 }
10681 }
10682 function composeSMaskLuminosity(maskData, layerData, transferMap) {
10683 var length = maskData.length;
10684 for (var i = 3; i < length; i += 4) {
10685 var y = maskData[i - 3] * 77 + maskData[i - 2] * 152 + maskData[i - 1] * 28;
10686 layerData[i] = transferMap ? layerData[i] * transferMap[y >> 8] >> 8 : layerData[i] * y >> 16;
10687 }
10688 }
10689 function genericComposeSMask(maskCtx, layerCtx, width, height, subtype, backdrop, transferMap) {
10690 var hasBackdrop = !!backdrop;
10691 var r0 = hasBackdrop ? backdrop[0] : 0;
10692 var g0 = hasBackdrop ? backdrop[1] : 0;
10693 var b0 = hasBackdrop ? backdrop[2] : 0;
10694 var composeFn;
10695 if (subtype === 'Luminosity') {
10696 composeFn = composeSMaskLuminosity;
10697 } else {
10698 composeFn = composeSMaskAlpha;
10699 }
10700 var PIXELS_TO_PROCESS = 1048576;
10701 var chunkSize = Math.min(height, Math.ceil(PIXELS_TO_PROCESS / width));
10702 for (var row = 0; row < height; row += chunkSize) {
10703 var chunkHeight = Math.min(chunkSize, height - row);
10704 var maskData = maskCtx.getImageData(0, row, width, chunkHeight);
10705 var layerData = layerCtx.getImageData(0, row, width, chunkHeight);
10706 if (hasBackdrop) {
10707 composeSMaskBackdrop(maskData.data, r0, g0, b0);
10708 }
10709 composeFn(maskData.data, layerData.data, transferMap);
10710 maskCtx.putImageData(layerData, 0, row);
10711 }
10712 }
10713 function composeSMask(ctx, smask, layerCtx, webGLContext) {
10714 var mask = smask.canvas;
10715 var maskCtx = smask.context;
10716 ctx.setTransform(smask.scaleX, 0, 0, smask.scaleY, smask.offsetX, smask.offsetY);
10717 var backdrop = smask.backdrop || null;
10718 if (!smask.transferMap && webGLContext.isEnabled) {
10719 var composed = webGLContext.composeSMask({
10720 layer: layerCtx.canvas,
10721 mask: mask,
10722 properties: {
10723 subtype: smask.subtype,
10724 backdrop: backdrop
10725 }
10726 });
10727 ctx.setTransform(1, 0, 0, 1, 0, 0);
10728 ctx.drawImage(composed, smask.offsetX, smask.offsetY);
10729 return;
10730 }
10731 genericComposeSMask(maskCtx, layerCtx, mask.width, mask.height, smask.subtype, backdrop, smask.transferMap);
10732 ctx.drawImage(mask, 0, 0);
10733 }
10734 var LINE_CAP_STYLES = ['butt', 'round', 'square'];
10735 var LINE_JOIN_STYLES = ['miter', 'round', 'bevel'];
10736 var NORMAL_CLIP = {};
10737 var EO_CLIP = {};
10738 CanvasGraphics.prototype = {
10739 beginDrawing: function beginDrawing(_ref) {
10740 var transform = _ref.transform,
10741 viewport = _ref.viewport,
10742 transparency = _ref.transparency,
10743 _ref$background = _ref.background,
10744 background = _ref$background === undefined ? null : _ref$background;
10745
10746 var width = this.ctx.canvas.width;
10747 var height = this.ctx.canvas.height;
10748 this.ctx.save();
10749 this.ctx.fillStyle = background || 'rgb(255, 255, 255)';
10750 this.ctx.fillRect(0, 0, width, height);
10751 this.ctx.restore();
10752 if (transparency) {
10753 var transparentCanvas = this.cachedCanvases.getCanvas('transparent', width, height, true);
10754 this.compositeCtx = this.ctx;
10755 this.transparentCanvas = transparentCanvas.canvas;
10756 this.ctx = transparentCanvas.context;
10757 this.ctx.save();
10758 this.ctx.transform.apply(this.ctx, this.compositeCtx.mozCurrentTransform);
10759 }
10760 this.ctx.save();
10761 resetCtxToDefault(this.ctx);
10762 if (transform) {
10763 this.ctx.transform.apply(this.ctx, transform);
10764 }
10765 this.ctx.transform.apply(this.ctx, viewport.transform);
10766 this.baseTransform = this.ctx.mozCurrentTransform.slice();
10767 if (this.imageLayer) {
10768 this.imageLayer.beginLayout();
10769 }
10770 },
10771
10772 executeOperatorList: function CanvasGraphics_executeOperatorList(operatorList, executionStartIdx, continueCallback, stepper) {
10773 var argsArray = operatorList.argsArray;
10774 var fnArray = operatorList.fnArray;
10775 var i = executionStartIdx || 0;
10776 var argsArrayLen = argsArray.length;
10777 if (argsArrayLen === i) {
10778 return i;
10779 }
10780 var chunkOperations = argsArrayLen - i > EXECUTION_STEPS && typeof continueCallback === 'function';
10781 var endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0;
10782 var steps = 0;
10783 var commonObjs = this.commonObjs;
10784 var objs = this.objs;
10785 var fnId;
10786 while (true) {
10787 if (stepper !== undefined && i === stepper.nextBreakPoint) {
10788 stepper.breakIt(i, continueCallback);
10789 return i;
10790 }
10791 fnId = fnArray[i];
10792 if (fnId !== _util.OPS.dependency) {
10793 this[fnId].apply(this, argsArray[i]);
10794 } else {
10795 var deps = argsArray[i];
10796 for (var n = 0, nn = deps.length; n < nn; n++) {
10797 var depObjId = deps[n];
10798 var common = depObjId[0] === 'g' && depObjId[1] === '_';
10799 var objsPool = common ? commonObjs : objs;
10800 if (!objsPool.isResolved(depObjId)) {
10801 objsPool.get(depObjId, continueCallback);
10802 return i;
10803 }
10804 }
10805 }
10806 i++;
10807 if (i === argsArrayLen) {
10808 return i;
10809 }
10810 if (chunkOperations && ++steps > EXECUTION_STEPS) {
10811 if (Date.now() > endTime) {
10812 continueCallback();
10813 return i;
10814 }
10815 steps = 0;
10816 }
10817 }
10818 },
10819 endDrawing: function CanvasGraphics_endDrawing() {
10820 if (this.current.activeSMask !== null) {
10821 this.endSMaskGroup();
10822 }
10823 this.ctx.restore();
10824 if (this.transparentCanvas) {
10825 this.ctx = this.compositeCtx;
10826 this.ctx.save();
10827 this.ctx.setTransform(1, 0, 0, 1, 0, 0);
10828 this.ctx.drawImage(this.transparentCanvas, 0, 0);
10829 this.ctx.restore();
10830 this.transparentCanvas = null;
10831 }
10832 this.cachedCanvases.clear();
10833 this.webGLContext.clear();
10834 if (this.imageLayer) {
10835 this.imageLayer.endLayout();
10836 }
10837 },
10838 setLineWidth: function CanvasGraphics_setLineWidth(width) {
10839 this.current.lineWidth = width;
10840 this.ctx.lineWidth = width;
10841 },
10842 setLineCap: function CanvasGraphics_setLineCap(style) {
10843 this.ctx.lineCap = LINE_CAP_STYLES[style];
10844 },
10845 setLineJoin: function CanvasGraphics_setLineJoin(style) {
10846 this.ctx.lineJoin = LINE_JOIN_STYLES[style];
10847 },
10848 setMiterLimit: function CanvasGraphics_setMiterLimit(limit) {
10849 this.ctx.miterLimit = limit;
10850 },
10851 setDash: function CanvasGraphics_setDash(dashArray, dashPhase) {
10852 var ctx = this.ctx;
10853 if (ctx.setLineDash !== undefined) {
10854 ctx.setLineDash(dashArray);
10855 ctx.lineDashOffset = dashPhase;
10856 }
10857 },
10858 setRenderingIntent: function CanvasGraphics_setRenderingIntent(intent) {},
10859 setFlatness: function CanvasGraphics_setFlatness(flatness) {},
10860 setGState: function CanvasGraphics_setGState(states) {
10861 for (var i = 0, ii = states.length; i < ii; i++) {
10862 var state = states[i];
10863 var key = state[0];
10864 var value = state[1];
10865 switch (key) {
10866 case 'LW':
10867 this.setLineWidth(value);
10868 break;
10869 case 'LC':
10870 this.setLineCap(value);
10871 break;
10872 case 'LJ':
10873 this.setLineJoin(value);
10874 break;
10875 case 'ML':
10876 this.setMiterLimit(value);
10877 break;
10878 case 'D':
10879 this.setDash(value[0], value[1]);
10880 break;
10881 case 'RI':
10882 this.setRenderingIntent(value);
10883 break;
10884 case 'FL':
10885 this.setFlatness(value);
10886 break;
10887 case 'Font':
10888 this.setFont(value[0], value[1]);
10889 break;
10890 case 'CA':
10891 this.current.strokeAlpha = state[1];
10892 break;
10893 case 'ca':
10894 this.current.fillAlpha = state[1];
10895 this.ctx.globalAlpha = state[1];
10896 break;
10897 case 'BM':
10898 this.ctx.globalCompositeOperation = value;
10899 break;
10900 case 'SMask':
10901 if (this.current.activeSMask) {
10902 if (this.stateStack.length > 0 && this.stateStack[this.stateStack.length - 1].activeSMask === this.current.activeSMask) {
10903 this.suspendSMaskGroup();
10904 } else {
10905 this.endSMaskGroup();
10906 }
10907 }
10908 this.current.activeSMask = value ? this.tempSMask : null;
10909 if (this.current.activeSMask) {
10910 this.beginSMaskGroup();
10911 }
10912 this.tempSMask = null;
10913 break;
10914 }
10915 }
10916 },
10917 beginSMaskGroup: function CanvasGraphics_beginSMaskGroup() {
10918 var activeSMask = this.current.activeSMask;
10919 var drawnWidth = activeSMask.canvas.width;
10920 var drawnHeight = activeSMask.canvas.height;
10921 var cacheId = 'smaskGroupAt' + this.groupLevel;
10922 var scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true);
10923 var currentCtx = this.ctx;
10924 var currentTransform = currentCtx.mozCurrentTransform;
10925 this.ctx.save();
10926 var groupCtx = scratchCanvas.context;
10927 groupCtx.scale(1 / activeSMask.scaleX, 1 / activeSMask.scaleY);
10928 groupCtx.translate(-activeSMask.offsetX, -activeSMask.offsetY);
10929 groupCtx.transform.apply(groupCtx, currentTransform);
10930 activeSMask.startTransformInverse = groupCtx.mozCurrentTransformInverse;
10931 copyCtxState(currentCtx, groupCtx);
10932 this.ctx = groupCtx;
10933 this.setGState([['BM', 'source-over'], ['ca', 1], ['CA', 1]]);
10934 this.groupStack.push(currentCtx);
10935 this.groupLevel++;
10936 },
10937 suspendSMaskGroup: function CanvasGraphics_endSMaskGroup() {
10938 var groupCtx = this.ctx;
10939 this.groupLevel--;
10940 this.ctx = this.groupStack.pop();
10941 composeSMask(this.ctx, this.current.activeSMask, groupCtx, this.webGLContext);
10942 this.ctx.restore();
10943 this.ctx.save();
10944 copyCtxState(groupCtx, this.ctx);
10945 this.current.resumeSMaskCtx = groupCtx;
10946 var deltaTransform = _util.Util.transform(this.current.activeSMask.startTransformInverse, groupCtx.mozCurrentTransform);
10947 this.ctx.transform.apply(this.ctx, deltaTransform);
10948 groupCtx.save();
10949 groupCtx.setTransform(1, 0, 0, 1, 0, 0);
10950 groupCtx.clearRect(0, 0, groupCtx.canvas.width, groupCtx.canvas.height);
10951 groupCtx.restore();
10952 },
10953 resumeSMaskGroup: function CanvasGraphics_endSMaskGroup() {
10954 var groupCtx = this.current.resumeSMaskCtx;
10955 var currentCtx = this.ctx;
10956 this.ctx = groupCtx;
10957 this.groupStack.push(currentCtx);
10958 this.groupLevel++;
10959 },
10960 endSMaskGroup: function CanvasGraphics_endSMaskGroup() {
10961 var groupCtx = this.ctx;
10962 this.groupLevel--;
10963 this.ctx = this.groupStack.pop();
10964 composeSMask(this.ctx, this.current.activeSMask, groupCtx, this.webGLContext);
10965 this.ctx.restore();
10966 copyCtxState(groupCtx, this.ctx);
10967 var deltaTransform = _util.Util.transform(this.current.activeSMask.startTransformInverse, groupCtx.mozCurrentTransform);
10968 this.ctx.transform.apply(this.ctx, deltaTransform);
10969 },
10970 save: function CanvasGraphics_save() {
10971 this.ctx.save();
10972 var old = this.current;
10973 this.stateStack.push(old);
10974 this.current = old.clone();
10975 this.current.resumeSMaskCtx = null;
10976 },
10977 restore: function CanvasGraphics_restore() {
10978 if (this.current.resumeSMaskCtx) {
10979 this.resumeSMaskGroup();
10980 }
10981 if (this.current.activeSMask !== null && (this.stateStack.length === 0 || this.stateStack[this.stateStack.length - 1].activeSMask !== this.current.activeSMask)) {
10982 this.endSMaskGroup();
10983 }
10984 if (this.stateStack.length !== 0) {
10985 this.current = this.stateStack.pop();
10986 this.ctx.restore();
10987 this.pendingClip = null;
10988 this.cachedGetSinglePixelWidth = null;
10989 }
10990 },
10991 transform: function CanvasGraphics_transform(a, b, c, d, e, f) {
10992 this.ctx.transform(a, b, c, d, e, f);
10993 this.cachedGetSinglePixelWidth = null;
10994 },
10995 constructPath: function CanvasGraphics_constructPath(ops, args) {
10996 var ctx = this.ctx;
10997 var current = this.current;
10998 var x = current.x,
10999 y = current.y;
11000 for (var i = 0, j = 0, ii = ops.length; i < ii; i++) {
11001 switch (ops[i] | 0) {
11002 case _util.OPS.rectangle:
11003 x = args[j++];
11004 y = args[j++];
11005 var width = args[j++];
11006 var height = args[j++];
11007 if (width === 0) {
11008 width = this.getSinglePixelWidth();
11009 }
11010 if (height === 0) {
11011 height = this.getSinglePixelWidth();
11012 }
11013 var xw = x + width;
11014 var yh = y + height;
11015 this.ctx.moveTo(x, y);
11016 this.ctx.lineTo(xw, y);
11017 this.ctx.lineTo(xw, yh);
11018 this.ctx.lineTo(x, yh);
11019 this.ctx.lineTo(x, y);
11020 this.ctx.closePath();
11021 break;
11022 case _util.OPS.moveTo:
11023 x = args[j++];
11024 y = args[j++];
11025 ctx.moveTo(x, y);
11026 break;
11027 case _util.OPS.lineTo:
11028 x = args[j++];
11029 y = args[j++];
11030 ctx.lineTo(x, y);
11031 break;
11032 case _util.OPS.curveTo:
11033 x = args[j + 4];
11034 y = args[j + 5];
11035 ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3], x, y);
11036 j += 6;
11037 break;
11038 case _util.OPS.curveTo2:
11039 ctx.bezierCurveTo(x, y, args[j], args[j + 1], args[j + 2], args[j + 3]);
11040 x = args[j + 2];
11041 y = args[j + 3];
11042 j += 4;
11043 break;
11044 case _util.OPS.curveTo3:
11045 x = args[j + 2];
11046 y = args[j + 3];
11047 ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y);
11048 j += 4;
11049 break;
11050 case _util.OPS.closePath:
11051 ctx.closePath();
11052 break;
11053 }
11054 }
11055 current.setCurrentPoint(x, y);
11056 },
11057 closePath: function CanvasGraphics_closePath() {
11058 this.ctx.closePath();
11059 },
11060 stroke: function CanvasGraphics_stroke(consumePath) {
11061 consumePath = typeof consumePath !== 'undefined' ? consumePath : true;
11062 var ctx = this.ctx;
11063 var strokeColor = this.current.strokeColor;
11064 ctx.lineWidth = Math.max(this.getSinglePixelWidth() * MIN_WIDTH_FACTOR, this.current.lineWidth);
11065 ctx.globalAlpha = this.current.strokeAlpha;
11066 if (strokeColor && strokeColor.hasOwnProperty('type') && strokeColor.type === 'Pattern') {
11067 ctx.save();
11068 ctx.strokeStyle = strokeColor.getPattern(ctx, this);
11069 ctx.stroke();
11070 ctx.restore();
11071 } else {
11072 ctx.stroke();
11073 }
11074 if (consumePath) {
11075 this.consumePath();
11076 }
11077 ctx.globalAlpha = this.current.fillAlpha;
11078 },
11079 closeStroke: function CanvasGraphics_closeStroke() {
11080 this.closePath();
11081 this.stroke();
11082 },
11083 fill: function CanvasGraphics_fill(consumePath) {
11084 consumePath = typeof consumePath !== 'undefined' ? consumePath : true;
11085 var ctx = this.ctx;
11086 var fillColor = this.current.fillColor;
11087 var isPatternFill = this.current.patternFill;
11088 var needRestore = false;
11089 if (isPatternFill) {
11090 ctx.save();
11091 if (this.baseTransform) {
11092 ctx.setTransform.apply(ctx, this.baseTransform);
11093 }
11094 ctx.fillStyle = fillColor.getPattern(ctx, this);
11095 needRestore = true;
11096 }
11097 if (this.pendingEOFill) {
11098 ctx.fill('evenodd');
11099 this.pendingEOFill = false;
11100 } else {
11101 ctx.fill();
11102 }
11103 if (needRestore) {
11104 ctx.restore();
11105 }
11106 if (consumePath) {
11107 this.consumePath();
11108 }
11109 },
11110 eoFill: function CanvasGraphics_eoFill() {
11111 this.pendingEOFill = true;
11112 this.fill();
11113 },
11114 fillStroke: function CanvasGraphics_fillStroke() {
11115 this.fill(false);
11116 this.stroke(false);
11117 this.consumePath();
11118 },
11119 eoFillStroke: function CanvasGraphics_eoFillStroke() {
11120 this.pendingEOFill = true;
11121 this.fillStroke();
11122 },
11123 closeFillStroke: function CanvasGraphics_closeFillStroke() {
11124 this.closePath();
11125 this.fillStroke();
11126 },
11127 closeEOFillStroke: function CanvasGraphics_closeEOFillStroke() {
11128 this.pendingEOFill = true;
11129 this.closePath();
11130 this.fillStroke();
11131 },
11132 endPath: function CanvasGraphics_endPath() {
11133 this.consumePath();
11134 },
11135 clip: function CanvasGraphics_clip() {
11136 this.pendingClip = NORMAL_CLIP;
11137 },
11138 eoClip: function CanvasGraphics_eoClip() {
11139 this.pendingClip = EO_CLIP;
11140 },
11141 beginText: function CanvasGraphics_beginText() {
11142 this.current.textMatrix = _util.IDENTITY_MATRIX;
11143 this.current.textMatrixScale = 1;
11144 this.current.x = this.current.lineX = 0;
11145 this.current.y = this.current.lineY = 0;
11146 },
11147 endText: function CanvasGraphics_endText() {
11148 var paths = this.pendingTextPaths;
11149 var ctx = this.ctx;
11150 if (paths === undefined) {
11151 ctx.beginPath();
11152 return;
11153 }
11154 ctx.save();
11155 ctx.beginPath();
11156 for (var i = 0; i < paths.length; i++) {
11157 var path = paths[i];
11158 ctx.setTransform.apply(ctx, path.transform);
11159 ctx.translate(path.x, path.y);
11160 path.addToPath(ctx, path.fontSize);
11161 }
11162 ctx.restore();
11163 ctx.clip();
11164 ctx.beginPath();
11165 delete this.pendingTextPaths;
11166 },
11167 setCharSpacing: function CanvasGraphics_setCharSpacing(spacing) {
11168 this.current.charSpacing = spacing;
11169 },
11170 setWordSpacing: function CanvasGraphics_setWordSpacing(spacing) {
11171 this.current.wordSpacing = spacing;
11172 },
11173 setHScale: function CanvasGraphics_setHScale(scale) {
11174 this.current.textHScale = scale / 100;
11175 },
11176 setLeading: function CanvasGraphics_setLeading(leading) {
11177 this.current.leading = -leading;
11178 },
11179 setFont: function CanvasGraphics_setFont(fontRefName, size) {
11180 var fontObj = this.commonObjs.get(fontRefName);
11181 var current = this.current;
11182 if (!fontObj) {
11183 throw new Error('Can\'t find font for ' + fontRefName);
11184 }
11185 current.fontMatrix = fontObj.fontMatrix ? fontObj.fontMatrix : _util.FONT_IDENTITY_MATRIX;
11186 if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) {
11187 (0, _util.warn)('Invalid font matrix for font ' + fontRefName);
11188 }
11189 if (size < 0) {
11190 size = -size;
11191 current.fontDirection = -1;
11192 } else {
11193 current.fontDirection = 1;
11194 }
11195 this.current.font = fontObj;
11196 this.current.fontSize = size;
11197 if (fontObj.isType3Font) {
11198 return;
11199 }
11200 var name = fontObj.loadedName || 'sans-serif';
11201 var bold = fontObj.black ? '900' : fontObj.bold ? 'bold' : 'normal';
11202 var italic = fontObj.italic ? 'italic' : 'normal';
11203 var typeface = '"' + name + '", ' + fontObj.fallbackName;
11204 var browserFontSize = size < MIN_FONT_SIZE ? MIN_FONT_SIZE : size > MAX_FONT_SIZE ? MAX_FONT_SIZE : size;
11205 this.current.fontSizeScale = size / browserFontSize;
11206 var rule = italic + ' ' + bold + ' ' + browserFontSize + 'px ' + typeface;
11207 this.ctx.font = rule;
11208 },
11209 setTextRenderingMode: function CanvasGraphics_setTextRenderingMode(mode) {
11210 this.current.textRenderingMode = mode;
11211 },
11212 setTextRise: function CanvasGraphics_setTextRise(rise) {
11213 this.current.textRise = rise;
11214 },
11215 moveText: function CanvasGraphics_moveText(x, y) {
11216 this.current.x = this.current.lineX += x;
11217 this.current.y = this.current.lineY += y;
11218 },
11219 setLeadingMoveText: function CanvasGraphics_setLeadingMoveText(x, y) {
11220 this.setLeading(-y);
11221 this.moveText(x, y);
11222 },
11223 setTextMatrix: function CanvasGraphics_setTextMatrix(a, b, c, d, e, f) {
11224 this.current.textMatrix = [a, b, c, d, e, f];
11225 this.current.textMatrixScale = Math.sqrt(a * a + b * b);
11226 this.current.x = this.current.lineX = 0;
11227 this.current.y = this.current.lineY = 0;
11228 },
11229 nextLine: function CanvasGraphics_nextLine() {
11230 this.moveText(0, this.current.leading);
11231 },
11232 paintChar: function paintChar(character, x, y, patternTransform) {
11233 var ctx = this.ctx;
11234 var current = this.current;
11235 var font = current.font;
11236 var textRenderingMode = current.textRenderingMode;
11237 var fontSize = current.fontSize / current.fontSizeScale;
11238 var fillStrokeMode = textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK;
11239 var isAddToPathSet = !!(textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG);
11240 var patternFill = current.patternFill && font.data;
11241 var addToPath;
11242 if (font.disableFontFace || isAddToPathSet || patternFill) {
11243 addToPath = font.getPathGenerator(this.commonObjs, character);
11244 }
11245 if (font.disableFontFace || patternFill) {
11246 ctx.save();
11247 ctx.translate(x, y);
11248 ctx.beginPath();
11249 addToPath(ctx, fontSize);
11250 if (patternTransform) {
11251 ctx.setTransform.apply(ctx, patternTransform);
11252 }
11253 if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
11254 ctx.fill();
11255 }
11256 if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
11257 ctx.stroke();
11258 }
11259 ctx.restore();
11260 } else {
11261 if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
11262 ctx.fillText(character, x, y);
11263 }
11264 if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
11265 ctx.strokeText(character, x, y);
11266 }
11267 }
11268 if (isAddToPathSet) {
11269 var paths = this.pendingTextPaths || (this.pendingTextPaths = []);
11270 paths.push({
11271 transform: ctx.mozCurrentTransform,
11272 x: x,
11273 y: y,
11274 fontSize: fontSize,
11275 addToPath: addToPath
11276 });
11277 }
11278 },
11279
11280 get isFontSubpixelAAEnabled() {
11281 var ctx = this.canvasFactory.create(10, 10).context;
11282 ctx.scale(1.5, 1);
11283 ctx.fillText('I', 0, 10);
11284 var data = ctx.getImageData(0, 0, 10, 10).data;
11285 var enabled = false;
11286 for (var i = 3; i < data.length; i += 4) {
11287 if (data[i] > 0 && data[i] < 255) {
11288 enabled = true;
11289 break;
11290 }
11291 }
11292 return (0, _util.shadow)(this, 'isFontSubpixelAAEnabled', enabled);
11293 },
11294 showText: function CanvasGraphics_showText(glyphs) {
11295 var current = this.current;
11296 var font = current.font;
11297 if (font.isType3Font) {
11298 return this.showType3Text(glyphs);
11299 }
11300 var fontSize = current.fontSize;
11301 if (fontSize === 0) {
11302 return;
11303 }
11304 var ctx = this.ctx;
11305 var fontSizeScale = current.fontSizeScale;
11306 var charSpacing = current.charSpacing;
11307 var wordSpacing = current.wordSpacing;
11308 var fontDirection = current.fontDirection;
11309 var textHScale = current.textHScale * fontDirection;
11310 var glyphsLength = glyphs.length;
11311 var vertical = font.vertical;
11312 var spacingDir = vertical ? 1 : -1;
11313 var defaultVMetrics = font.defaultVMetrics;
11314 var widthAdvanceScale = fontSize * current.fontMatrix[0];
11315 var simpleFillText = current.textRenderingMode === _util.TextRenderingMode.FILL && !font.disableFontFace && !current.patternFill;
11316 ctx.save();
11317 var patternTransform = void 0;
11318 if (current.patternFill) {
11319 ctx.save();
11320 var pattern = current.fillColor.getPattern(ctx, this);
11321 patternTransform = ctx.mozCurrentTransform;
11322 ctx.restore();
11323 ctx.fillStyle = pattern;
11324 }
11325 ctx.transform.apply(ctx, current.textMatrix);
11326 ctx.translate(current.x, current.y + current.textRise);
11327 if (fontDirection > 0) {
11328 ctx.scale(textHScale, -1);
11329 } else {
11330 ctx.scale(textHScale, 1);
11331 }
11332 var lineWidth = current.lineWidth;
11333 var scale = current.textMatrixScale;
11334 if (scale === 0 || lineWidth === 0) {
11335 var fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK;
11336 if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
11337 this.cachedGetSinglePixelWidth = null;
11338 lineWidth = this.getSinglePixelWidth() * MIN_WIDTH_FACTOR;
11339 }
11340 } else {
11341 lineWidth /= scale;
11342 }
11343 if (fontSizeScale !== 1.0) {
11344 ctx.scale(fontSizeScale, fontSizeScale);
11345 lineWidth /= fontSizeScale;
11346 }
11347 ctx.lineWidth = lineWidth;
11348 var x = 0,
11349 i;
11350 for (i = 0; i < glyphsLength; ++i) {
11351 var glyph = glyphs[i];
11352 if ((0, _util.isNum)(glyph)) {
11353 x += spacingDir * glyph * fontSize / 1000;
11354 continue;
11355 }
11356 var restoreNeeded = false;
11357 var spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;
11358 var character = glyph.fontChar;
11359 var accent = glyph.accent;
11360 var scaledX, scaledY, scaledAccentX, scaledAccentY;
11361 var width = glyph.width;
11362 if (vertical) {
11363 var vmetric, vx, vy;
11364 vmetric = glyph.vmetric || defaultVMetrics;
11365 vx = glyph.vmetric ? vmetric[1] : width * 0.5;
11366 vx = -vx * widthAdvanceScale;
11367 vy = vmetric[2] * widthAdvanceScale;
11368 width = vmetric ? -vmetric[0] : width;
11369 scaledX = vx / fontSizeScale;
11370 scaledY = (x + vy) / fontSizeScale;
11371 } else {
11372 scaledX = x / fontSizeScale;
11373 scaledY = 0;
11374 }
11375 if (font.remeasure && width > 0) {
11376 var measuredWidth = ctx.measureText(character).width * 1000 / fontSize * fontSizeScale;
11377 if (width < measuredWidth && this.isFontSubpixelAAEnabled) {
11378 var characterScaleX = width / measuredWidth;
11379 restoreNeeded = true;
11380 ctx.save();
11381 ctx.scale(characterScaleX, 1);
11382 scaledX /= characterScaleX;
11383 } else if (width !== measuredWidth) {
11384 scaledX += (width - measuredWidth) / 2000 * fontSize / fontSizeScale;
11385 }
11386 }
11387 if (glyph.isInFont || font.missingFile) {
11388 if (simpleFillText && !accent) {
11389 ctx.fillText(character, scaledX, scaledY);
11390 } else {
11391 this.paintChar(character, scaledX, scaledY, patternTransform);
11392 if (accent) {
11393 scaledAccentX = scaledX + accent.offset.x / fontSizeScale;
11394 scaledAccentY = scaledY - accent.offset.y / fontSizeScale;
11395 this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY, patternTransform);
11396 }
11397 }
11398 }
11399 var charWidth = width * widthAdvanceScale + spacing * fontDirection;
11400 x += charWidth;
11401 if (restoreNeeded) {
11402 ctx.restore();
11403 }
11404 }
11405 if (vertical) {
11406 current.y -= x * textHScale;
11407 } else {
11408 current.x += x * textHScale;
11409 }
11410 ctx.restore();
11411 },
11412 showType3Text: function CanvasGraphics_showType3Text(glyphs) {
11413 var ctx = this.ctx;
11414 var current = this.current;
11415 var font = current.font;
11416 var fontSize = current.fontSize;
11417 var fontDirection = current.fontDirection;
11418 var spacingDir = font.vertical ? 1 : -1;
11419 var charSpacing = current.charSpacing;
11420 var wordSpacing = current.wordSpacing;
11421 var textHScale = current.textHScale * fontDirection;
11422 var fontMatrix = current.fontMatrix || _util.FONT_IDENTITY_MATRIX;
11423 var glyphsLength = glyphs.length;
11424 var isTextInvisible = current.textRenderingMode === _util.TextRenderingMode.INVISIBLE;
11425 var i, glyph, width, spacingLength;
11426 if (isTextInvisible || fontSize === 0) {
11427 return;
11428 }
11429 this.cachedGetSinglePixelWidth = null;
11430 ctx.save();
11431 ctx.transform.apply(ctx, current.textMatrix);
11432 ctx.translate(current.x, current.y);
11433 ctx.scale(textHScale, fontDirection);
11434 for (i = 0; i < glyphsLength; ++i) {
11435 glyph = glyphs[i];
11436 if ((0, _util.isNum)(glyph)) {
11437 spacingLength = spacingDir * glyph * fontSize / 1000;
11438 this.ctx.translate(spacingLength, 0);
11439 current.x += spacingLength * textHScale;
11440 continue;
11441 }
11442 var spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;
11443 var operatorList = font.charProcOperatorList[glyph.operatorListId];
11444 if (!operatorList) {
11445 (0, _util.warn)('Type3 character "' + glyph.operatorListId + '" is not available.');
11446 continue;
11447 }
11448 this.processingType3 = glyph;
11449 this.save();
11450 ctx.scale(fontSize, fontSize);
11451 ctx.transform.apply(ctx, fontMatrix);
11452 this.executeOperatorList(operatorList);
11453 this.restore();
11454 var transformed = _util.Util.applyTransform([glyph.width, 0], fontMatrix);
11455 width = transformed[0] * fontSize + spacing;
11456 ctx.translate(width, 0);
11457 current.x += width * textHScale;
11458 }
11459 ctx.restore();
11460 this.processingType3 = null;
11461 },
11462 setCharWidth: function CanvasGraphics_setCharWidth(xWidth, yWidth) {},
11463 setCharWidthAndBounds: function CanvasGraphics_setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) {
11464 this.ctx.rect(llx, lly, urx - llx, ury - lly);
11465 this.clip();
11466 this.endPath();
11467 },
11468 getColorN_Pattern: function CanvasGraphics_getColorN_Pattern(IR) {
11469 var _this = this;
11470
11471 var pattern;
11472 if (IR[0] === 'TilingPattern') {
11473 var color = IR[1];
11474 var baseTransform = this.baseTransform || this.ctx.mozCurrentTransform.slice();
11475 var canvasGraphicsFactory = {
11476 createCanvasGraphics: function createCanvasGraphics(ctx) {
11477 return new CanvasGraphics(ctx, _this.commonObjs, _this.objs, _this.canvasFactory, _this.webGLContext);
11478 }
11479 };
11480 pattern = new _pattern_helper.TilingPattern(IR, color, this.ctx, canvasGraphicsFactory, baseTransform);
11481 } else {
11482 pattern = (0, _pattern_helper.getShadingPatternFromIR)(IR);
11483 }
11484 return pattern;
11485 },
11486 setStrokeColorN: function CanvasGraphics_setStrokeColorN() {
11487 this.current.strokeColor = this.getColorN_Pattern(arguments);
11488 },
11489 setFillColorN: function CanvasGraphics_setFillColorN() {
11490 this.current.fillColor = this.getColorN_Pattern(arguments);
11491 this.current.patternFill = true;
11492 },
11493 setStrokeRGBColor: function CanvasGraphics_setStrokeRGBColor(r, g, b) {
11494 var color = _util.Util.makeCssRgb(r, g, b);
11495 this.ctx.strokeStyle = color;
11496 this.current.strokeColor = color;
11497 },
11498 setFillRGBColor: function CanvasGraphics_setFillRGBColor(r, g, b) {
11499 var color = _util.Util.makeCssRgb(r, g, b);
11500 this.ctx.fillStyle = color;
11501 this.current.fillColor = color;
11502 this.current.patternFill = false;
11503 },
11504 shadingFill: function CanvasGraphics_shadingFill(patternIR) {
11505 var ctx = this.ctx;
11506 this.save();
11507 var pattern = (0, _pattern_helper.getShadingPatternFromIR)(patternIR);
11508 ctx.fillStyle = pattern.getPattern(ctx, this, true);
11509 var inv = ctx.mozCurrentTransformInverse;
11510 if (inv) {
11511 var canvas = ctx.canvas;
11512 var width = canvas.width;
11513 var height = canvas.height;
11514 var bl = _util.Util.applyTransform([0, 0], inv);
11515 var br = _util.Util.applyTransform([0, height], inv);
11516 var ul = _util.Util.applyTransform([width, 0], inv);
11517 var ur = _util.Util.applyTransform([width, height], inv);
11518 var x0 = Math.min(bl[0], br[0], ul[0], ur[0]);
11519 var y0 = Math.min(bl[1], br[1], ul[1], ur[1]);
11520 var x1 = Math.max(bl[0], br[0], ul[0], ur[0]);
11521 var y1 = Math.max(bl[1], br[1], ul[1], ur[1]);
11522 this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0);
11523 } else {
11524 this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10);
11525 }
11526 this.restore();
11527 },
11528 beginInlineImage: function CanvasGraphics_beginInlineImage() {
11529 (0, _util.unreachable)('Should not call beginInlineImage');
11530 },
11531 beginImageData: function CanvasGraphics_beginImageData() {
11532 (0, _util.unreachable)('Should not call beginImageData');
11533 },
11534 paintFormXObjectBegin: function CanvasGraphics_paintFormXObjectBegin(matrix, bbox) {
11535 this.save();
11536 this.baseTransformStack.push(this.baseTransform);
11537 if (Array.isArray(matrix) && matrix.length === 6) {
11538 this.transform.apply(this, matrix);
11539 }
11540 this.baseTransform = this.ctx.mozCurrentTransform;
11541 if (Array.isArray(bbox) && bbox.length === 4) {
11542 var width = bbox[2] - bbox[0];
11543 var height = bbox[3] - bbox[1];
11544 this.ctx.rect(bbox[0], bbox[1], width, height);
11545 this.clip();
11546 this.endPath();
11547 }
11548 },
11549 paintFormXObjectEnd: function CanvasGraphics_paintFormXObjectEnd() {
11550 this.restore();
11551 this.baseTransform = this.baseTransformStack.pop();
11552 },
11553 beginGroup: function CanvasGraphics_beginGroup(group) {
11554 this.save();
11555 var currentCtx = this.ctx;
11556 if (!group.isolated) {
11557 (0, _util.info)('TODO: Support non-isolated groups.');
11558 }
11559 if (group.knockout) {
11560 (0, _util.warn)('Knockout groups not supported.');
11561 }
11562 var currentTransform = currentCtx.mozCurrentTransform;
11563 if (group.matrix) {
11564 currentCtx.transform.apply(currentCtx, group.matrix);
11565 }
11566 if (!group.bbox) {
11567 throw new Error('Bounding box is required.');
11568 }
11569 var bounds = _util.Util.getAxialAlignedBoundingBox(group.bbox, currentCtx.mozCurrentTransform);
11570 var canvasBounds = [0, 0, currentCtx.canvas.width, currentCtx.canvas.height];
11571 bounds = _util.Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0];
11572 var offsetX = Math.floor(bounds[0]);
11573 var offsetY = Math.floor(bounds[1]);
11574 var drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1);
11575 var drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1);
11576 var scaleX = 1,
11577 scaleY = 1;
11578 if (drawnWidth > MAX_GROUP_SIZE) {
11579 scaleX = drawnWidth / MAX_GROUP_SIZE;
11580 drawnWidth = MAX_GROUP_SIZE;
11581 }
11582 if (drawnHeight > MAX_GROUP_SIZE) {
11583 scaleY = drawnHeight / MAX_GROUP_SIZE;
11584 drawnHeight = MAX_GROUP_SIZE;
11585 }
11586 var cacheId = 'groupAt' + this.groupLevel;
11587 if (group.smask) {
11588 cacheId += '_smask_' + this.smaskCounter++ % 2;
11589 }
11590 var scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true);
11591 var groupCtx = scratchCanvas.context;
11592 groupCtx.scale(1 / scaleX, 1 / scaleY);
11593 groupCtx.translate(-offsetX, -offsetY);
11594 groupCtx.transform.apply(groupCtx, currentTransform);
11595 if (group.smask) {
11596 this.smaskStack.push({
11597 canvas: scratchCanvas.canvas,
11598 context: groupCtx,
11599 offsetX: offsetX,
11600 offsetY: offsetY,
11601 scaleX: scaleX,
11602 scaleY: scaleY,
11603 subtype: group.smask.subtype,
11604 backdrop: group.smask.backdrop,
11605 transferMap: group.smask.transferMap || null,
11606 startTransformInverse: null
11607 });
11608 } else {
11609 currentCtx.setTransform(1, 0, 0, 1, 0, 0);
11610 currentCtx.translate(offsetX, offsetY);
11611 currentCtx.scale(scaleX, scaleY);
11612 }
11613 copyCtxState(currentCtx, groupCtx);
11614 this.ctx = groupCtx;
11615 this.setGState([['BM', 'source-over'], ['ca', 1], ['CA', 1]]);
11616 this.groupStack.push(currentCtx);
11617 this.groupLevel++;
11618 this.current.activeSMask = null;
11619 },
11620 endGroup: function CanvasGraphics_endGroup(group) {
11621 this.groupLevel--;
11622 var groupCtx = this.ctx;
11623 this.ctx = this.groupStack.pop();
11624 if (this.ctx.imageSmoothingEnabled !== undefined) {
11625 this.ctx.imageSmoothingEnabled = false;
11626 } else {
11627 this.ctx.mozImageSmoothingEnabled = false;
11628 }
11629 if (group.smask) {
11630 this.tempSMask = this.smaskStack.pop();
11631 } else {
11632 this.ctx.drawImage(groupCtx.canvas, 0, 0);
11633 }
11634 this.restore();
11635 },
11636 beginAnnotations: function CanvasGraphics_beginAnnotations() {
11637 this.save();
11638 if (this.baseTransform) {
11639 this.ctx.setTransform.apply(this.ctx, this.baseTransform);
11640 }
11641 },
11642 endAnnotations: function CanvasGraphics_endAnnotations() {
11643 this.restore();
11644 },
11645 beginAnnotation: function CanvasGraphics_beginAnnotation(rect, transform, matrix) {
11646 this.save();
11647 resetCtxToDefault(this.ctx);
11648 this.current = new CanvasExtraState();
11649 if (Array.isArray(rect) && rect.length === 4) {
11650 var width = rect[2] - rect[0];
11651 var height = rect[3] - rect[1];
11652 this.ctx.rect(rect[0], rect[1], width, height);
11653 this.clip();
11654 this.endPath();
11655 }
11656 this.transform.apply(this, transform);
11657 this.transform.apply(this, matrix);
11658 },
11659 endAnnotation: function CanvasGraphics_endAnnotation() {
11660 this.restore();
11661 },
11662 paintJpegXObject: function CanvasGraphics_paintJpegXObject(objId, w, h) {
11663 var domImage = this.objs.get(objId);
11664 if (!domImage) {
11665 (0, _util.warn)('Dependent image isn\'t ready yet');
11666 return;
11667 }
11668 this.save();
11669 var ctx = this.ctx;
11670 ctx.scale(1 / w, -1 / h);
11671 ctx.drawImage(domImage, 0, 0, domImage.width, domImage.height, 0, -h, w, h);
11672 if (this.imageLayer) {
11673 var currentTransform = ctx.mozCurrentTransformInverse;
11674 var position = this.getCanvasPosition(0, 0);
11675 this.imageLayer.appendImage({
11676 objId: objId,
11677 left: position[0],
11678 top: position[1],
11679 width: w / currentTransform[0],
11680 height: h / currentTransform[3]
11681 });
11682 }
11683 this.restore();
11684 },
11685 paintImageMaskXObject: function CanvasGraphics_paintImageMaskXObject(img) {
11686 var ctx = this.ctx;
11687 var width = img.width,
11688 height = img.height;
11689 var fillColor = this.current.fillColor;
11690 var isPatternFill = this.current.patternFill;
11691 var glyph = this.processingType3;
11692 if (COMPILE_TYPE3_GLYPHS && glyph && glyph.compiled === undefined) {
11693 if (width <= MAX_SIZE_TO_COMPILE && height <= MAX_SIZE_TO_COMPILE) {
11694 glyph.compiled = compileType3Glyph({
11695 data: img.data,
11696 width: width,
11697 height: height
11698 });
11699 } else {
11700 glyph.compiled = null;
11701 }
11702 }
11703 if (glyph && glyph.compiled) {
11704 glyph.compiled(ctx);
11705 return;
11706 }
11707 var maskCanvas = this.cachedCanvases.getCanvas('maskCanvas', width, height);
11708 var maskCtx = maskCanvas.context;
11709 maskCtx.save();
11710 putBinaryImageMask(maskCtx, img);
11711 maskCtx.globalCompositeOperation = 'source-in';
11712 maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this) : fillColor;
11713 maskCtx.fillRect(0, 0, width, height);
11714 maskCtx.restore();
11715 this.paintInlineImageXObject(maskCanvas.canvas);
11716 },
11717 paintImageMaskXObjectRepeat: function CanvasGraphics_paintImageMaskXObjectRepeat(imgData, scaleX, scaleY, positions) {
11718 var width = imgData.width;
11719 var height = imgData.height;
11720 var fillColor = this.current.fillColor;
11721 var isPatternFill = this.current.patternFill;
11722 var maskCanvas = this.cachedCanvases.getCanvas('maskCanvas', width, height);
11723 var maskCtx = maskCanvas.context;
11724 maskCtx.save();
11725 putBinaryImageMask(maskCtx, imgData);
11726 maskCtx.globalCompositeOperation = 'source-in';
11727 maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this) : fillColor;
11728 maskCtx.fillRect(0, 0, width, height);
11729 maskCtx.restore();
11730 var ctx = this.ctx;
11731 for (var i = 0, ii = positions.length; i < ii; i += 2) {
11732 ctx.save();
11733 ctx.transform(scaleX, 0, 0, scaleY, positions[i], positions[i + 1]);
11734 ctx.scale(1, -1);
11735 ctx.drawImage(maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1);
11736 ctx.restore();
11737 }
11738 },
11739 paintImageMaskXObjectGroup: function CanvasGraphics_paintImageMaskXObjectGroup(images) {
11740 var ctx = this.ctx;
11741 var fillColor = this.current.fillColor;
11742 var isPatternFill = this.current.patternFill;
11743 for (var i = 0, ii = images.length; i < ii; i++) {
11744 var image = images[i];
11745 var width = image.width,
11746 height = image.height;
11747 var maskCanvas = this.cachedCanvases.getCanvas('maskCanvas', width, height);
11748 var maskCtx = maskCanvas.context;
11749 maskCtx.save();
11750 putBinaryImageMask(maskCtx, image);
11751 maskCtx.globalCompositeOperation = 'source-in';
11752 maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this) : fillColor;
11753 maskCtx.fillRect(0, 0, width, height);
11754 maskCtx.restore();
11755 ctx.save();
11756 ctx.transform.apply(ctx, image.transform);
11757 ctx.scale(1, -1);
11758 ctx.drawImage(maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1);
11759 ctx.restore();
11760 }
11761 },
11762 paintImageXObject: function CanvasGraphics_paintImageXObject(objId) {
11763 var imgData = this.objs.get(objId);
11764 if (!imgData) {
11765 (0, _util.warn)('Dependent image isn\'t ready yet');
11766 return;
11767 }
11768 this.paintInlineImageXObject(imgData);
11769 },
11770 paintImageXObjectRepeat: function CanvasGraphics_paintImageXObjectRepeat(objId, scaleX, scaleY, positions) {
11771 var imgData = this.objs.get(objId);
11772 if (!imgData) {
11773 (0, _util.warn)('Dependent image isn\'t ready yet');
11774 return;
11775 }
11776 var width = imgData.width;
11777 var height = imgData.height;
11778 var map = [];
11779 for (var i = 0, ii = positions.length; i < ii; i += 2) {
11780 map.push({
11781 transform: [scaleX, 0, 0, scaleY, positions[i], positions[i + 1]],
11782 x: 0,
11783 y: 0,
11784 w: width,
11785 h: height
11786 });
11787 }
11788 this.paintInlineImageXObjectGroup(imgData, map);
11789 },
11790 paintInlineImageXObject: function CanvasGraphics_paintInlineImageXObject(imgData) {
11791 var width = imgData.width;
11792 var height = imgData.height;
11793 var ctx = this.ctx;
11794 this.save();
11795 ctx.scale(1 / width, -1 / height);
11796 var currentTransform = ctx.mozCurrentTransformInverse;
11797 var a = currentTransform[0],
11798 b = currentTransform[1];
11799 var widthScale = Math.max(Math.sqrt(a * a + b * b), 1);
11800 var c = currentTransform[2],
11801 d = currentTransform[3];
11802 var heightScale = Math.max(Math.sqrt(c * c + d * d), 1);
11803 var imgToPaint, tmpCanvas;
11804 if (typeof HTMLElement === 'function' && imgData instanceof HTMLElement || !imgData.data) {
11805 imgToPaint = imgData;
11806 } else {
11807 tmpCanvas = this.cachedCanvases.getCanvas('inlineImage', width, height);
11808 var tmpCtx = tmpCanvas.context;
11809 putBinaryImageData(tmpCtx, imgData);
11810 imgToPaint = tmpCanvas.canvas;
11811 }
11812 var paintWidth = width,
11813 paintHeight = height;
11814 var tmpCanvasId = 'prescale1';
11815 while (widthScale > 2 && paintWidth > 1 || heightScale > 2 && paintHeight > 1) {
11816 var newWidth = paintWidth,
11817 newHeight = paintHeight;
11818 if (widthScale > 2 && paintWidth > 1) {
11819 newWidth = Math.ceil(paintWidth / 2);
11820 widthScale /= paintWidth / newWidth;
11821 }
11822 if (heightScale > 2 && paintHeight > 1) {
11823 newHeight = Math.ceil(paintHeight / 2);
11824 heightScale /= paintHeight / newHeight;
11825 }
11826 tmpCanvas = this.cachedCanvases.getCanvas(tmpCanvasId, newWidth, newHeight);
11827 tmpCtx = tmpCanvas.context;
11828 tmpCtx.clearRect(0, 0, newWidth, newHeight);
11829 tmpCtx.drawImage(imgToPaint, 0, 0, paintWidth, paintHeight, 0, 0, newWidth, newHeight);
11830 imgToPaint = tmpCanvas.canvas;
11831 paintWidth = newWidth;
11832 paintHeight = newHeight;
11833 tmpCanvasId = tmpCanvasId === 'prescale1' ? 'prescale2' : 'prescale1';
11834 }
11835 ctx.drawImage(imgToPaint, 0, 0, paintWidth, paintHeight, 0, -height, width, height);
11836 if (this.imageLayer) {
11837 var position = this.getCanvasPosition(0, -height);
11838 this.imageLayer.appendImage({
11839 imgData: imgData,
11840 left: position[0],
11841 top: position[1],
11842 width: width / currentTransform[0],
11843 height: height / currentTransform[3]
11844 });
11845 }
11846 this.restore();
11847 },
11848 paintInlineImageXObjectGroup: function CanvasGraphics_paintInlineImageXObjectGroup(imgData, map) {
11849 var ctx = this.ctx;
11850 var w = imgData.width;
11851 var h = imgData.height;
11852 var tmpCanvas = this.cachedCanvases.getCanvas('inlineImage', w, h);
11853 var tmpCtx = tmpCanvas.context;
11854 putBinaryImageData(tmpCtx, imgData);
11855 for (var i = 0, ii = map.length; i < ii; i++) {
11856 var entry = map[i];
11857 ctx.save();
11858 ctx.transform.apply(ctx, entry.transform);
11859 ctx.scale(1, -1);
11860 ctx.drawImage(tmpCanvas.canvas, entry.x, entry.y, entry.w, entry.h, 0, -1, 1, 1);
11861 if (this.imageLayer) {
11862 var position = this.getCanvasPosition(entry.x, entry.y);
11863 this.imageLayer.appendImage({
11864 imgData: imgData,
11865 left: position[0],
11866 top: position[1],
11867 width: w,
11868 height: h
11869 });
11870 }
11871 ctx.restore();
11872 }
11873 },
11874 paintSolidColorImageMask: function CanvasGraphics_paintSolidColorImageMask() {
11875 this.ctx.fillRect(0, 0, 1, 1);
11876 },
11877 paintXObject: function CanvasGraphics_paintXObject() {
11878 (0, _util.warn)('Unsupported \'paintXObject\' command.');
11879 },
11880 markPoint: function CanvasGraphics_markPoint(tag) {},
11881 markPointProps: function CanvasGraphics_markPointProps(tag, properties) {},
11882 beginMarkedContent: function CanvasGraphics_beginMarkedContent(tag) {},
11883 beginMarkedContentProps: function CanvasGraphics_beginMarkedContentProps(tag, properties) {},
11884 endMarkedContent: function CanvasGraphics_endMarkedContent() {},
11885 beginCompat: function CanvasGraphics_beginCompat() {},
11886 endCompat: function CanvasGraphics_endCompat() {},
11887 consumePath: function CanvasGraphics_consumePath() {
11888 var ctx = this.ctx;
11889 if (this.pendingClip) {
11890 if (this.pendingClip === EO_CLIP) {
11891 ctx.clip('evenodd');
11892 } else {
11893 ctx.clip();
11894 }
11895 this.pendingClip = null;
11896 }
11897 ctx.beginPath();
11898 },
11899 getSinglePixelWidth: function CanvasGraphics_getSinglePixelWidth(scale) {
11900 if (this.cachedGetSinglePixelWidth === null) {
11901 this.ctx.save();
11902 var inverse = this.ctx.mozCurrentTransformInverse;
11903 this.ctx.restore();
11904 this.cachedGetSinglePixelWidth = Math.sqrt(Math.max(inverse[0] * inverse[0] + inverse[1] * inverse[1], inverse[2] * inverse[2] + inverse[3] * inverse[3]));
11905 }
11906 return this.cachedGetSinglePixelWidth;
11907 },
11908 getCanvasPosition: function CanvasGraphics_getCanvasPosition(x, y) {
11909 var transform = this.ctx.mozCurrentTransform;
11910 return [transform[0] * x + transform[2] * y + transform[4], transform[1] * x + transform[3] * y + transform[5]];
11911 }
11912 };
11913 for (var op in _util.OPS) {
11914 CanvasGraphics.prototype[_util.OPS[op]] = CanvasGraphics.prototype[op];
11915 }
11916 return CanvasGraphics;
11917}();
11918exports.CanvasGraphics = CanvasGraphics;
11919
11920/***/ }),
11921/* 120 */
11922/***/ (function(module, exports, __w_pdfjs_require__) {
11923
11924"use strict";
11925
11926
11927Object.defineProperty(exports, "__esModule", {
11928 value: true
11929});
11930exports.TilingPattern = exports.getShadingPatternFromIR = undefined;
11931
11932var _util = __w_pdfjs_require__(0);
11933
11934var ShadingIRs = {};
11935ShadingIRs.RadialAxial = {
11936 fromIR: function RadialAxial_fromIR(raw) {
11937 var type = raw[1];
11938 var colorStops = raw[2];
11939 var p0 = raw[3];
11940 var p1 = raw[4];
11941 var r0 = raw[5];
11942 var r1 = raw[6];
11943 return {
11944 type: 'Pattern',
11945 getPattern: function RadialAxial_getPattern(ctx) {
11946 var grad;
11947 if (type === 'axial') {
11948 grad = ctx.createLinearGradient(p0[0], p0[1], p1[0], p1[1]);
11949 } else if (type === 'radial') {
11950 grad = ctx.createRadialGradient(p0[0], p0[1], r0, p1[0], p1[1], r1);
11951 }
11952 for (var i = 0, ii = colorStops.length; i < ii; ++i) {
11953 var c = colorStops[i];
11954 grad.addColorStop(c[0], c[1]);
11955 }
11956 return grad;
11957 }
11958 };
11959 }
11960};
11961var createMeshCanvas = function createMeshCanvasClosure() {
11962 function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) {
11963 var coords = context.coords,
11964 colors = context.colors;
11965 var bytes = data.data,
11966 rowSize = data.width * 4;
11967 var tmp;
11968 if (coords[p1 + 1] > coords[p2 + 1]) {
11969 tmp = p1;
11970 p1 = p2;
11971 p2 = tmp;
11972 tmp = c1;
11973 c1 = c2;
11974 c2 = tmp;
11975 }
11976 if (coords[p2 + 1] > coords[p3 + 1]) {
11977 tmp = p2;
11978 p2 = p3;
11979 p3 = tmp;
11980 tmp = c2;
11981 c2 = c3;
11982 c3 = tmp;
11983 }
11984 if (coords[p1 + 1] > coords[p2 + 1]) {
11985 tmp = p1;
11986 p1 = p2;
11987 p2 = tmp;
11988 tmp = c1;
11989 c1 = c2;
11990 c2 = tmp;
11991 }
11992 var x1 = (coords[p1] + context.offsetX) * context.scaleX;
11993 var y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY;
11994 var x2 = (coords[p2] + context.offsetX) * context.scaleX;
11995 var y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY;
11996 var x3 = (coords[p3] + context.offsetX) * context.scaleX;
11997 var y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY;
11998 if (y1 >= y3) {
11999 return;
12000 }
12001 var c1r = colors[c1],
12002 c1g = colors[c1 + 1],
12003 c1b = colors[c1 + 2];
12004 var c2r = colors[c2],
12005 c2g = colors[c2 + 1],
12006 c2b = colors[c2 + 2];
12007 var c3r = colors[c3],
12008 c3g = colors[c3 + 1],
12009 c3b = colors[c3 + 2];
12010 var minY = Math.round(y1),
12011 maxY = Math.round(y3);
12012 var xa, car, cag, cab;
12013 var xb, cbr, cbg, cbb;
12014 var k;
12015 for (var y = minY; y <= maxY; y++) {
12016 if (y < y2) {
12017 k = y < y1 ? 0 : y1 === y2 ? 1 : (y1 - y) / (y1 - y2);
12018 xa = x1 - (x1 - x2) * k;
12019 car = c1r - (c1r - c2r) * k;
12020 cag = c1g - (c1g - c2g) * k;
12021 cab = c1b - (c1b - c2b) * k;
12022 } else {
12023 k = y > y3 ? 1 : y2 === y3 ? 0 : (y2 - y) / (y2 - y3);
12024 xa = x2 - (x2 - x3) * k;
12025 car = c2r - (c2r - c3r) * k;
12026 cag = c2g - (c2g - c3g) * k;
12027 cab = c2b - (c2b - c3b) * k;
12028 }
12029 k = y < y1 ? 0 : y > y3 ? 1 : (y1 - y) / (y1 - y3);
12030 xb = x1 - (x1 - x3) * k;
12031 cbr = c1r - (c1r - c3r) * k;
12032 cbg = c1g - (c1g - c3g) * k;
12033 cbb = c1b - (c1b - c3b) * k;
12034 var x1_ = Math.round(Math.min(xa, xb));
12035 var x2_ = Math.round(Math.max(xa, xb));
12036 var j = rowSize * y + x1_ * 4;
12037 for (var x = x1_; x <= x2_; x++) {
12038 k = (xa - x) / (xa - xb);
12039 k = k < 0 ? 0 : k > 1 ? 1 : k;
12040 bytes[j++] = car - (car - cbr) * k | 0;
12041 bytes[j++] = cag - (cag - cbg) * k | 0;
12042 bytes[j++] = cab - (cab - cbb) * k | 0;
12043 bytes[j++] = 255;
12044 }
12045 }
12046 }
12047 function drawFigure(data, figure, context) {
12048 var ps = figure.coords;
12049 var cs = figure.colors;
12050 var i, ii;
12051 switch (figure.type) {
12052 case 'lattice':
12053 var verticesPerRow = figure.verticesPerRow;
12054 var rows = Math.floor(ps.length / verticesPerRow) - 1;
12055 var cols = verticesPerRow - 1;
12056 for (i = 0; i < rows; i++) {
12057 var q = i * verticesPerRow;
12058 for (var j = 0; j < cols; j++, q++) {
12059 drawTriangle(data, context, ps[q], ps[q + 1], ps[q + verticesPerRow], cs[q], cs[q + 1], cs[q + verticesPerRow]);
12060 drawTriangle(data, context, ps[q + verticesPerRow + 1], ps[q + 1], ps[q + verticesPerRow], cs[q + verticesPerRow + 1], cs[q + 1], cs[q + verticesPerRow]);
12061 }
12062 }
12063 break;
12064 case 'triangles':
12065 for (i = 0, ii = ps.length; i < ii; i += 3) {
12066 drawTriangle(data, context, ps[i], ps[i + 1], ps[i + 2], cs[i], cs[i + 1], cs[i + 2]);
12067 }
12068 break;
12069 default:
12070 throw new Error('illegal figure');
12071 }
12072 }
12073 function createMeshCanvas(bounds, combinesScale, coords, colors, figures, backgroundColor, cachedCanvases, webGLContext) {
12074 var EXPECTED_SCALE = 1.1;
12075 var MAX_PATTERN_SIZE = 3000;
12076 var BORDER_SIZE = 2;
12077 var offsetX = Math.floor(bounds[0]);
12078 var offsetY = Math.floor(bounds[1]);
12079 var boundsWidth = Math.ceil(bounds[2]) - offsetX;
12080 var boundsHeight = Math.ceil(bounds[3]) - offsetY;
12081 var width = Math.min(Math.ceil(Math.abs(boundsWidth * combinesScale[0] * EXPECTED_SCALE)), MAX_PATTERN_SIZE);
12082 var height = Math.min(Math.ceil(Math.abs(boundsHeight * combinesScale[1] * EXPECTED_SCALE)), MAX_PATTERN_SIZE);
12083 var scaleX = boundsWidth / width;
12084 var scaleY = boundsHeight / height;
12085 var context = {
12086 coords: coords,
12087 colors: colors,
12088 offsetX: -offsetX,
12089 offsetY: -offsetY,
12090 scaleX: 1 / scaleX,
12091 scaleY: 1 / scaleY
12092 };
12093 var paddedWidth = width + BORDER_SIZE * 2;
12094 var paddedHeight = height + BORDER_SIZE * 2;
12095 var canvas, tmpCanvas, i, ii;
12096 if (webGLContext.isEnabled) {
12097 canvas = webGLContext.drawFigures({
12098 width: width,
12099 height: height,
12100 backgroundColor: backgroundColor,
12101 figures: figures,
12102 context: context
12103 });
12104 tmpCanvas = cachedCanvases.getCanvas('mesh', paddedWidth, paddedHeight, false);
12105 tmpCanvas.context.drawImage(canvas, BORDER_SIZE, BORDER_SIZE);
12106 canvas = tmpCanvas.canvas;
12107 } else {
12108 tmpCanvas = cachedCanvases.getCanvas('mesh', paddedWidth, paddedHeight, false);
12109 var tmpCtx = tmpCanvas.context;
12110 var data = tmpCtx.createImageData(width, height);
12111 if (backgroundColor) {
12112 var bytes = data.data;
12113 for (i = 0, ii = bytes.length; i < ii; i += 4) {
12114 bytes[i] = backgroundColor[0];
12115 bytes[i + 1] = backgroundColor[1];
12116 bytes[i + 2] = backgroundColor[2];
12117 bytes[i + 3] = 255;
12118 }
12119 }
12120 for (i = 0; i < figures.length; i++) {
12121 drawFigure(data, figures[i], context);
12122 }
12123 tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE);
12124 canvas = tmpCanvas.canvas;
12125 }
12126 return {
12127 canvas: canvas,
12128 offsetX: offsetX - BORDER_SIZE * scaleX,
12129 offsetY: offsetY - BORDER_SIZE * scaleY,
12130 scaleX: scaleX,
12131 scaleY: scaleY
12132 };
12133 }
12134 return createMeshCanvas;
12135}();
12136ShadingIRs.Mesh = {
12137 fromIR: function Mesh_fromIR(raw) {
12138 var coords = raw[2];
12139 var colors = raw[3];
12140 var figures = raw[4];
12141 var bounds = raw[5];
12142 var matrix = raw[6];
12143 var background = raw[8];
12144 return {
12145 type: 'Pattern',
12146 getPattern: function Mesh_getPattern(ctx, owner, shadingFill) {
12147 var scale;
12148 if (shadingFill) {
12149 scale = _util.Util.singularValueDecompose2dScale(ctx.mozCurrentTransform);
12150 } else {
12151 scale = _util.Util.singularValueDecompose2dScale(owner.baseTransform);
12152 if (matrix) {
12153 var matrixScale = _util.Util.singularValueDecompose2dScale(matrix);
12154 scale = [scale[0] * matrixScale[0], scale[1] * matrixScale[1]];
12155 }
12156 }
12157 var temporaryPatternCanvas = createMeshCanvas(bounds, scale, coords, colors, figures, shadingFill ? null : background, owner.cachedCanvases, owner.webGLContext);
12158 if (!shadingFill) {
12159 ctx.setTransform.apply(ctx, owner.baseTransform);
12160 if (matrix) {
12161 ctx.transform.apply(ctx, matrix);
12162 }
12163 }
12164 ctx.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY);
12165 ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY);
12166 return ctx.createPattern(temporaryPatternCanvas.canvas, 'no-repeat');
12167 }
12168 };
12169 }
12170};
12171ShadingIRs.Dummy = {
12172 fromIR: function Dummy_fromIR() {
12173 return {
12174 type: 'Pattern',
12175 getPattern: function Dummy_fromIR_getPattern() {
12176 return 'hotpink';
12177 }
12178 };
12179 }
12180};
12181function getShadingPatternFromIR(raw) {
12182 var shadingIR = ShadingIRs[raw[0]];
12183 if (!shadingIR) {
12184 throw new Error('Unknown IR type: ' + raw[0]);
12185 }
12186 return shadingIR.fromIR(raw);
12187}
12188var TilingPattern = function TilingPatternClosure() {
12189 var PaintType = {
12190 COLORED: 1,
12191 UNCOLORED: 2
12192 };
12193 var MAX_PATTERN_SIZE = 3000;
12194 function TilingPattern(IR, color, ctx, canvasGraphicsFactory, baseTransform) {
12195 this.operatorList = IR[2];
12196 this.matrix = IR[3] || [1, 0, 0, 1, 0, 0];
12197 this.bbox = IR[4];
12198 this.xstep = IR[5];
12199 this.ystep = IR[6];
12200 this.paintType = IR[7];
12201 this.tilingType = IR[8];
12202 this.color = color;
12203 this.canvasGraphicsFactory = canvasGraphicsFactory;
12204 this.baseTransform = baseTransform;
12205 this.type = 'Pattern';
12206 this.ctx = ctx;
12207 }
12208 TilingPattern.prototype = {
12209 createPatternCanvas: function TilinPattern_createPatternCanvas(owner) {
12210 var operatorList = this.operatorList;
12211 var bbox = this.bbox;
12212 var xstep = this.xstep;
12213 var ystep = this.ystep;
12214 var paintType = this.paintType;
12215 var tilingType = this.tilingType;
12216 var color = this.color;
12217 var canvasGraphicsFactory = this.canvasGraphicsFactory;
12218 (0, _util.info)('TilingType: ' + tilingType);
12219 var x0 = bbox[0],
12220 y0 = bbox[1],
12221 x1 = bbox[2],
12222 y1 = bbox[3];
12223 var topLeft = [x0, y0];
12224 var botRight = [x0 + xstep, y0 + ystep];
12225 var width = botRight[0] - topLeft[0];
12226 var height = botRight[1] - topLeft[1];
12227 var matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix);
12228 var curMatrixScale = _util.Util.singularValueDecompose2dScale(this.baseTransform);
12229 var combinedScale = [matrixScale[0] * curMatrixScale[0], matrixScale[1] * curMatrixScale[1]];
12230 width = Math.min(Math.ceil(Math.abs(width * combinedScale[0])), MAX_PATTERN_SIZE);
12231 height = Math.min(Math.ceil(Math.abs(height * combinedScale[1])), MAX_PATTERN_SIZE);
12232 var tmpCanvas = owner.cachedCanvases.getCanvas('pattern', width, height, true);
12233 var tmpCtx = tmpCanvas.context;
12234 var graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx);
12235 graphics.groupLevel = owner.groupLevel;
12236 this.setFillAndStrokeStyleToContext(graphics, paintType, color);
12237 this.setScale(width, height, xstep, ystep);
12238 this.transformToScale(graphics);
12239 var tmpTranslate = [1, 0, 0, 1, -topLeft[0], -topLeft[1]];
12240 graphics.transform.apply(graphics, tmpTranslate);
12241 this.clipBbox(graphics, bbox, x0, y0, x1, y1);
12242 graphics.executeOperatorList(operatorList);
12243 return tmpCanvas.canvas;
12244 },
12245 setScale: function TilingPattern_setScale(width, height, xstep, ystep) {
12246 this.scale = [width / xstep, height / ystep];
12247 },
12248 transformToScale: function TilingPattern_transformToScale(graphics) {
12249 var scale = this.scale;
12250 var tmpScale = [scale[0], 0, 0, scale[1], 0, 0];
12251 graphics.transform.apply(graphics, tmpScale);
12252 },
12253 scaleToContext: function TilingPattern_scaleToContext() {
12254 var scale = this.scale;
12255 this.ctx.scale(1 / scale[0], 1 / scale[1]);
12256 },
12257 clipBbox: function clipBbox(graphics, bbox, x0, y0, x1, y1) {
12258 if (Array.isArray(bbox) && bbox.length === 4) {
12259 var bboxWidth = x1 - x0;
12260 var bboxHeight = y1 - y0;
12261 graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight);
12262 graphics.clip();
12263 graphics.endPath();
12264 }
12265 },
12266 setFillAndStrokeStyleToContext: function setFillAndStrokeStyleToContext(graphics, paintType, color) {
12267 var context = graphics.ctx,
12268 current = graphics.current;
12269 switch (paintType) {
12270 case PaintType.COLORED:
12271 var ctx = this.ctx;
12272 context.fillStyle = ctx.fillStyle;
12273 context.strokeStyle = ctx.strokeStyle;
12274 current.fillColor = ctx.fillStyle;
12275 current.strokeColor = ctx.strokeStyle;
12276 break;
12277 case PaintType.UNCOLORED:
12278 var cssColor = _util.Util.makeCssRgb(color[0], color[1], color[2]);
12279 context.fillStyle = cssColor;
12280 context.strokeStyle = cssColor;
12281 current.fillColor = cssColor;
12282 current.strokeColor = cssColor;
12283 break;
12284 default:
12285 throw new _util.FormatError('Unsupported paint type: ' + paintType);
12286 }
12287 },
12288 getPattern: function TilingPattern_getPattern(ctx, owner) {
12289 var temporaryPatternCanvas = this.createPatternCanvas(owner);
12290 ctx = this.ctx;
12291 ctx.setTransform.apply(ctx, this.baseTransform);
12292 ctx.transform.apply(ctx, this.matrix);
12293 this.scaleToContext();
12294 return ctx.createPattern(temporaryPatternCanvas, 'repeat');
12295 }
12296 };
12297 return TilingPattern;
12298}();
12299exports.getShadingPatternFromIR = getShadingPatternFromIR;
12300exports.TilingPattern = TilingPattern;
12301
12302/***/ }),
12303/* 121 */
12304/***/ (function(module, exports, __w_pdfjs_require__) {
12305
12306"use strict";
12307
12308
12309Object.defineProperty(exports, "__esModule", {
12310 value: true
12311});
12312exports.Metadata = undefined;
12313
12314var _createClass = function () { 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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
12315
12316var _util = __w_pdfjs_require__(0);
12317
12318var _xml_parser = __w_pdfjs_require__(122);
12319
12320function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
12321
12322var Metadata = function () {
12323 function Metadata(data) {
12324 _classCallCheck(this, Metadata);
12325
12326 (0, _util.assert)(typeof data === 'string', 'Metadata: input is not a string');
12327 data = this._repair(data);
12328 var parser = new _xml_parser.SimpleXMLParser();
12329 var xmlDocument = parser.parseFromString(data);
12330 this._metadata = Object.create(null);
12331 if (xmlDocument) {
12332 this._parse(xmlDocument);
12333 }
12334 }
12335
12336 _createClass(Metadata, [{
12337 key: '_repair',
12338 value: function _repair(data) {
12339 return data.replace(/>\\376\\377([^<]+)/g, function (all, codes) {
12340 var bytes = codes.replace(/\\([0-3])([0-7])([0-7])/g, function (code, d1, d2, d3) {
12341 return String.fromCharCode(d1 * 64 + d2 * 8 + d3 * 1);
12342 }).replace(/&(amp|apos|gt|lt|quot);/g, function (str, name) {
12343 switch (name) {
12344 case 'amp':
12345 return '&';
12346 case 'apos':
12347 return '\'';
12348 case 'gt':
12349 return '>';
12350 case 'lt':
12351 return '<';
12352 case 'quot':
12353 return '\"';
12354 }
12355 throw new Error('_repair: ' + name + ' isn\'t defined.');
12356 });
12357 var chars = '';
12358 for (var i = 0, ii = bytes.length; i < ii; i += 2) {
12359 var code = bytes.charCodeAt(i) * 256 + bytes.charCodeAt(i + 1);
12360 if (code >= 32 && code < 127 && code !== 60 && code !== 62 && code !== 38) {
12361 chars += String.fromCharCode(code);
12362 } else {
12363 chars += '&#x' + (0x10000 + code).toString(16).substring(1) + ';';
12364 }
12365 }
12366 return '>' + chars;
12367 });
12368 }
12369 }, {
12370 key: '_parse',
12371 value: function _parse(xmlDocument) {
12372 var rdf = xmlDocument.documentElement;
12373 if (rdf.nodeName.toLowerCase() !== 'rdf:rdf') {
12374 rdf = rdf.firstChild;
12375 while (rdf && rdf.nodeName.toLowerCase() !== 'rdf:rdf') {
12376 rdf = rdf.nextSibling;
12377 }
12378 }
12379 var nodeName = rdf ? rdf.nodeName.toLowerCase() : null;
12380 if (!rdf || nodeName !== 'rdf:rdf' || !rdf.hasChildNodes()) {
12381 return;
12382 }
12383 var children = rdf.childNodes;
12384 for (var i = 0, ii = children.length; i < ii; i++) {
12385 var desc = children[i];
12386 if (desc.nodeName.toLowerCase() !== 'rdf:description') {
12387 continue;
12388 }
12389 for (var j = 0, jj = desc.childNodes.length; j < jj; j++) {
12390 if (desc.childNodes[j].nodeName.toLowerCase() !== '#text') {
12391 var entry = desc.childNodes[j];
12392 var name = entry.nodeName.toLowerCase();
12393 this._metadata[name] = entry.textContent.trim();
12394 }
12395 }
12396 }
12397 }
12398 }, {
12399 key: 'get',
12400 value: function get(name) {
12401 return this._metadata[name] || null;
12402 }
12403 }, {
12404 key: 'getAll',
12405 value: function getAll() {
12406 return this._metadata;
12407 }
12408 }, {
12409 key: 'has',
12410 value: function has(name) {
12411 return typeof this._metadata[name] !== 'undefined';
12412 }
12413 }]);
12414
12415 return Metadata;
12416}();
12417
12418exports.Metadata = Metadata;
12419
12420/***/ }),
12421/* 122 */
12422/***/ (function(module, exports, __w_pdfjs_require__) {
12423
12424"use strict";
12425
12426
12427Object.defineProperty(exports, "__esModule", {
12428 value: true
12429});
12430
12431var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
12432
12433var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
12434
12435var _createClass = function () { 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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
12436
12437function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
12438
12439function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
12440
12441function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
12442
12443var XMLParserErrorCode = {
12444 NoError: 0,
12445 EndOfDocument: -1,
12446 UnterminatedCdat: -2,
12447 UnterminatedXmlDeclaration: -3,
12448 UnterminatedDoctypeDeclaration: -4,
12449 UnterminatedComment: -5,
12450 MalformedElement: -6,
12451 OutOfMemory: -7,
12452 UnterminatedAttributeValue: -8,
12453 UnterminatedElement: -9,
12454 ElementNeverBegun: -10
12455};
12456function isWhitespace(s, index) {
12457 var ch = s[index];
12458 return ch === ' ' || ch === '\n' || ch === '\r' || ch === '\t';
12459}
12460function isWhitespaceString(s) {
12461 for (var i = 0, ii = s.length; i < ii; i++) {
12462 if (!isWhitespace(s, i)) {
12463 return false;
12464 }
12465 }
12466 return true;
12467}
12468
12469var XMLParserBase = function () {
12470 function XMLParserBase() {
12471 _classCallCheck(this, XMLParserBase);
12472 }
12473
12474 _createClass(XMLParserBase, [{
12475 key: '_resolveEntities',
12476 value: function _resolveEntities(s) {
12477 return s.replace(/&([^;]+);/g, function (all, entity) {
12478 if (entity.substring(0, 2) === '#x') {
12479 return String.fromCharCode(parseInt(entity.substring(2), 16));
12480 } else if (entity.substring(0, 1) === '#') {
12481 return String.fromCharCode(parseInt(entity.substring(1), 10));
12482 }
12483 switch (entity) {
12484 case 'lt':
12485 return '<';
12486 case 'gt':
12487 return '>';
12488 case 'amp':
12489 return '&';
12490 case 'quot':
12491 return '\"';
12492 }
12493 return this.onResolveEntity(entity);
12494 });
12495 }
12496 }, {
12497 key: '_parseContent',
12498 value: function _parseContent(s, start) {
12499 var pos = start,
12500 name = void 0,
12501 attributes = [];
12502 function skipWs() {
12503 while (pos < s.length && isWhitespace(s, pos)) {
12504 ++pos;
12505 }
12506 }
12507 while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== '>' && s[pos] !== '/') {
12508 ++pos;
12509 }
12510 name = s.substring(start, pos);
12511 skipWs();
12512 while (pos < s.length && s[pos] !== '>' && s[pos] !== '/' && s[pos] !== '?') {
12513 skipWs();
12514 var attrName = '',
12515 attrValue = '';
12516 while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== '=') {
12517 attrName += s[pos];
12518 ++pos;
12519 }
12520 skipWs();
12521 if (s[pos] !== '=') {
12522 return null;
12523 }
12524 ++pos;
12525 skipWs();
12526 var attrEndChar = s[pos];
12527 if (attrEndChar !== '\"' && attrEndChar !== '\'') {
12528 return null;
12529 }
12530 var attrEndIndex = s.indexOf(attrEndChar, ++pos);
12531 if (attrEndIndex < 0) {
12532 return null;
12533 }
12534 attrValue = s.substring(pos, attrEndIndex);
12535 attributes.push({
12536 name: attrName,
12537 value: this._resolveEntities(attrValue)
12538 });
12539 pos = attrEndIndex + 1;
12540 skipWs();
12541 }
12542 return {
12543 name: name,
12544 attributes: attributes,
12545 parsed: pos - start
12546 };
12547 }
12548 }, {
12549 key: '_parseProcessingInstruction',
12550 value: function _parseProcessingInstruction(s, start) {
12551 var pos = start,
12552 name = void 0,
12553 value = void 0;
12554 function skipWs() {
12555 while (pos < s.length && isWhitespace(s, pos)) {
12556 ++pos;
12557 }
12558 }
12559 while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== '>' && s[pos] !== '/') {
12560 ++pos;
12561 }
12562 name = s.substring(start, pos);
12563 skipWs();
12564 var attrStart = pos;
12565 while (pos < s.length && (s[pos] !== '?' || s[pos + 1] !== '>')) {
12566 ++pos;
12567 }
12568 value = s.substring(attrStart, pos);
12569 return {
12570 name: name,
12571 value: value,
12572 parsed: pos - start
12573 };
12574 }
12575 }, {
12576 key: 'parseXml',
12577 value: function parseXml(s) {
12578 var i = 0;
12579 while (i < s.length) {
12580 var ch = s[i];
12581 var j = i;
12582 if (ch === '<') {
12583 ++j;
12584 var ch2 = s[j];
12585 var q = void 0;
12586 switch (ch2) {
12587 case '/':
12588 ++j;
12589 q = s.indexOf('>', j);
12590 if (q < 0) {
12591 this.onError(XMLParserErrorCode.UnterminatedElement);
12592 return;
12593 }
12594 this.onEndElement(s.substring(j, q));
12595 j = q + 1;
12596 break;
12597 case '?':
12598 ++j;
12599 var pi = this._parseProcessingInstruction(s, j);
12600 if (s.substring(j + pi.parsed, j + pi.parsed + 2) !== '?>') {
12601 this.onError(XMLParserErrorCode.UnterminatedXmlDeclaration);
12602 return;
12603 }
12604 this.onPi(pi.name, pi.value);
12605 j += pi.parsed + 2;
12606 break;
12607 case '!':
12608 if (s.substring(j + 1, j + 3) === '--') {
12609 q = s.indexOf('-->', j + 3);
12610 if (q < 0) {
12611 this.onError(XMLParserErrorCode.UnterminatedComment);
12612 return;
12613 }
12614 this.onComment(s.substring(j + 3, q));
12615 j = q + 3;
12616 } else if (s.substring(j + 1, j + 8) === '[CDATA[') {
12617 q = s.indexOf(']]>', j + 8);
12618 if (q < 0) {
12619 this.onError(XMLParserErrorCode.UnterminatedCdat);
12620 return;
12621 }
12622 this.onCdata(s.substring(j + 8, q));
12623 j = q + 3;
12624 } else if (s.substring(j + 1, j + 8) === 'DOCTYPE') {
12625 var q2 = s.indexOf('[', j + 8);
12626 var complexDoctype = false;
12627 q = s.indexOf('>', j + 8);
12628 if (q < 0) {
12629 this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration);
12630 return;
12631 }
12632 if (q2 > 0 && q > q2) {
12633 q = s.indexOf(']>', j + 8);
12634 if (q < 0) {
12635 this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration);
12636 return;
12637 }
12638 complexDoctype = true;
12639 }
12640 var doctypeContent = s.substring(j + 8, q + (complexDoctype ? 1 : 0));
12641 this.onDoctype(doctypeContent);
12642 j = q + (complexDoctype ? 2 : 1);
12643 } else {
12644 this.onError(XMLParserErrorCode.MalformedElement);
12645 return;
12646 }
12647 break;
12648 default:
12649 var content = this._parseContent(s, j);
12650 if (content === null) {
12651 this.onError(XMLParserErrorCode.MalformedElement);
12652 return;
12653 }
12654 var isClosed = false;
12655 if (s.substring(j + content.parsed, j + content.parsed + 2) === '/>') {
12656 isClosed = true;
12657 } else if (s.substring(j + content.parsed, j + content.parsed + 1) !== '>') {
12658 this.onError(XMLParserErrorCode.UnterminatedElement);
12659 return;
12660 }
12661 this.onBeginElement(content.name, content.attributes, isClosed);
12662 j += content.parsed + (isClosed ? 2 : 1);
12663 break;
12664 }
12665 } else {
12666 while (j < s.length && s[j] !== '<') {
12667 j++;
12668 }
12669 var text = s.substring(i, j);
12670 this.onText(this._resolveEntities(text));
12671 }
12672 i = j;
12673 }
12674 }
12675 }, {
12676 key: 'onResolveEntity',
12677 value: function onResolveEntity(name) {
12678 return '&' + name + ';';
12679 }
12680 }, {
12681 key: 'onPi',
12682 value: function onPi(name, value) {}
12683 }, {
12684 key: 'onComment',
12685 value: function onComment(text) {}
12686 }, {
12687 key: 'onCdata',
12688 value: function onCdata(text) {}
12689 }, {
12690 key: 'onDoctype',
12691 value: function onDoctype(doctypeContent) {}
12692 }, {
12693 key: 'onText',
12694 value: function onText(text) {}
12695 }, {
12696 key: 'onBeginElement',
12697 value: function onBeginElement(name, attributes, isEmpty) {}
12698 }, {
12699 key: 'onEndElement',
12700 value: function onEndElement(name) {}
12701 }, {
12702 key: 'onError',
12703 value: function onError(code) {}
12704 }]);
12705
12706 return XMLParserBase;
12707}();
12708
12709var SimpleDOMNode = function () {
12710 function SimpleDOMNode(nodeName, nodeValue) {
12711 _classCallCheck(this, SimpleDOMNode);
12712
12713 this.nodeName = nodeName;
12714 this.nodeValue = nodeValue;
12715 Object.defineProperty(this, 'parentNode', {
12716 value: null,
12717 writable: true
12718 });
12719 }
12720
12721 _createClass(SimpleDOMNode, [{
12722 key: 'hasChildNodes',
12723 value: function hasChildNodes() {
12724 return this.childNodes && this.childNodes.length > 0;
12725 }
12726 }, {
12727 key: 'firstChild',
12728 get: function get() {
12729 return this.childNodes[0];
12730 }
12731 }, {
12732 key: 'nextSibling',
12733 get: function get() {
12734 var index = this.parentNode.childNodes.indexOf(this);
12735 return this.parentNode.childNodes[index + 1];
12736 }
12737 }, {
12738 key: 'textContent',
12739 get: function get() {
12740 if (!this.childNodes) {
12741 return this.nodeValue || '';
12742 }
12743 return this.childNodes.map(function (child) {
12744 return child.textContent;
12745 }).join('');
12746 }
12747 }]);
12748
12749 return SimpleDOMNode;
12750}();
12751
12752var SimpleXMLParser = function (_XMLParserBase) {
12753 _inherits(SimpleXMLParser, _XMLParserBase);
12754
12755 function SimpleXMLParser() {
12756 _classCallCheck(this, SimpleXMLParser);
12757
12758 var _this = _possibleConstructorReturn(this, (SimpleXMLParser.__proto__ || Object.getPrototypeOf(SimpleXMLParser)).call(this));
12759
12760 _this._currentFragment = null;
12761 _this._stack = null;
12762 _this._errorCode = XMLParserErrorCode.NoError;
12763 return _this;
12764 }
12765
12766 _createClass(SimpleXMLParser, [{
12767 key: 'parseFromString',
12768 value: function parseFromString(data) {
12769 this._currentFragment = [];
12770 this._stack = [];
12771 this._errorCode = XMLParserErrorCode.NoError;
12772 this.parseXml(data);
12773 if (this._errorCode !== XMLParserErrorCode.NoError) {
12774 return undefined;
12775 }
12776
12777 var _currentFragment = _slicedToArray(this._currentFragment, 1),
12778 documentElement = _currentFragment[0];
12779
12780 return { documentElement: documentElement };
12781 }
12782 }, {
12783 key: 'onResolveEntity',
12784 value: function onResolveEntity(name) {
12785 switch (name) {
12786 case 'apos':
12787 return '\'';
12788 }
12789 return _get(SimpleXMLParser.prototype.__proto__ || Object.getPrototypeOf(SimpleXMLParser.prototype), 'onResolveEntity', this).call(this, name);
12790 }
12791 }, {
12792 key: 'onText',
12793 value: function onText(text) {
12794 if (isWhitespaceString(text)) {
12795 return;
12796 }
12797 var node = new SimpleDOMNode('#text', text);
12798 this._currentFragment.push(node);
12799 }
12800 }, {
12801 key: 'onCdata',
12802 value: function onCdata(text) {
12803 var node = new SimpleDOMNode('#text', text);
12804 this._currentFragment.push(node);
12805 }
12806 }, {
12807 key: 'onBeginElement',
12808 value: function onBeginElement(name, attributes, isEmpty) {
12809 var node = new SimpleDOMNode(name);
12810 node.childNodes = [];
12811 this._currentFragment.push(node);
12812 if (isEmpty) {
12813 return;
12814 }
12815 this._stack.push(this._currentFragment);
12816 this._currentFragment = node.childNodes;
12817 }
12818 }, {
12819 key: 'onEndElement',
12820 value: function onEndElement(name) {
12821 this._currentFragment = this._stack.pop();
12822 var lastElement = this._currentFragment[this._currentFragment.length - 1];
12823 for (var i = 0, ii = lastElement.childNodes.length; i < ii; i++) {
12824 lastElement.childNodes[i].parentNode = lastElement;
12825 }
12826 }
12827 }, {
12828 key: 'onError',
12829 value: function onError(code) {
12830 this._errorCode = code;
12831 }
12832 }]);
12833
12834 return SimpleXMLParser;
12835}(XMLParserBase);
12836
12837exports.SimpleXMLParser = SimpleXMLParser;
12838
12839/***/ }),
12840/* 123 */
12841/***/ (function(module, exports, __w_pdfjs_require__) {
12842
12843"use strict";
12844
12845
12846Object.defineProperty(exports, "__esModule", {
12847 value: true
12848});
12849exports.PDFDataTransportStream = undefined;
12850
12851var _util = __w_pdfjs_require__(0);
12852
12853var PDFDataTransportStream = function PDFDataTransportStreamClosure() {
12854 function PDFDataTransportStream(params, pdfDataRangeTransport) {
12855 var _this = this;
12856
12857 (0, _util.assert)(pdfDataRangeTransport);
12858 this._queuedChunks = [];
12859 var initialData = params.initialData;
12860 if (initialData && initialData.length > 0) {
12861 var buffer = new Uint8Array(initialData).buffer;
12862 this._queuedChunks.push(buffer);
12863 }
12864 this._pdfDataRangeTransport = pdfDataRangeTransport;
12865 this._isStreamingSupported = !params.disableStream;
12866 this._isRangeSupported = !params.disableRange;
12867 this._contentLength = params.length;
12868 this._fullRequestReader = null;
12869 this._rangeReaders = [];
12870 this._pdfDataRangeTransport.addRangeListener(function (begin, chunk) {
12871 _this._onReceiveData({
12872 begin: begin,
12873 chunk: chunk
12874 });
12875 });
12876 this._pdfDataRangeTransport.addProgressListener(function (loaded) {
12877 _this._onProgress({ loaded: loaded });
12878 });
12879 this._pdfDataRangeTransport.addProgressiveReadListener(function (chunk) {
12880 _this._onReceiveData({ chunk: chunk });
12881 });
12882 this._pdfDataRangeTransport.transportReady();
12883 }
12884 PDFDataTransportStream.prototype = {
12885 _onReceiveData: function PDFDataTransportStream_onReceiveData(args) {
12886 var buffer = new Uint8Array(args.chunk).buffer;
12887 if (args.begin === undefined) {
12888 if (this._fullRequestReader) {
12889 this._fullRequestReader._enqueue(buffer);
12890 } else {
12891 this._queuedChunks.push(buffer);
12892 }
12893 } else {
12894 var found = this._rangeReaders.some(function (rangeReader) {
12895 if (rangeReader._begin !== args.begin) {
12896 return false;
12897 }
12898 rangeReader._enqueue(buffer);
12899 return true;
12900 });
12901 (0, _util.assert)(found);
12902 }
12903 },
12904 _onProgress: function PDFDataTransportStream_onDataProgress(evt) {
12905 if (this._rangeReaders.length > 0) {
12906 var firstReader = this._rangeReaders[0];
12907 if (firstReader.onProgress) {
12908 firstReader.onProgress({ loaded: evt.loaded });
12909 }
12910 }
12911 },
12912 _removeRangeReader: function PDFDataTransportStream_removeRangeReader(reader) {
12913 var i = this._rangeReaders.indexOf(reader);
12914 if (i >= 0) {
12915 this._rangeReaders.splice(i, 1);
12916 }
12917 },
12918 getFullReader: function PDFDataTransportStream_getFullReader() {
12919 (0, _util.assert)(!this._fullRequestReader);
12920 var queuedChunks = this._queuedChunks;
12921 this._queuedChunks = null;
12922 return new PDFDataTransportStreamReader(this, queuedChunks);
12923 },
12924 getRangeReader: function PDFDataTransportStream_getRangeReader(begin, end) {
12925 var reader = new PDFDataTransportStreamRangeReader(this, begin, end);
12926 this._pdfDataRangeTransport.requestDataRange(begin, end);
12927 this._rangeReaders.push(reader);
12928 return reader;
12929 },
12930 cancelAllRequests: function PDFDataTransportStream_cancelAllRequests(reason) {
12931 if (this._fullRequestReader) {
12932 this._fullRequestReader.cancel(reason);
12933 }
12934 var readers = this._rangeReaders.slice(0);
12935 readers.forEach(function (rangeReader) {
12936 rangeReader.cancel(reason);
12937 });
12938 this._pdfDataRangeTransport.abort();
12939 }
12940 };
12941 function PDFDataTransportStreamReader(stream, queuedChunks) {
12942 this._stream = stream;
12943 this._done = false;
12944 this._filename = null;
12945 this._queuedChunks = queuedChunks || [];
12946 this._requests = [];
12947 this._headersReady = Promise.resolve();
12948 stream._fullRequestReader = this;
12949 this.onProgress = null;
12950 }
12951 PDFDataTransportStreamReader.prototype = {
12952 _enqueue: function PDFDataTransportStreamReader_enqueue(chunk) {
12953 if (this._done) {
12954 return;
12955 }
12956 if (this._requests.length > 0) {
12957 var requestCapability = this._requests.shift();
12958 requestCapability.resolve({
12959 value: chunk,
12960 done: false
12961 });
12962 return;
12963 }
12964 this._queuedChunks.push(chunk);
12965 },
12966 get headersReady() {
12967 return this._headersReady;
12968 },
12969 get filename() {
12970 return this._filename;
12971 },
12972 get isRangeSupported() {
12973 return this._stream._isRangeSupported;
12974 },
12975 get isStreamingSupported() {
12976 return this._stream._isStreamingSupported;
12977 },
12978 get contentLength() {
12979 return this._stream._contentLength;
12980 },
12981 read: function PDFDataTransportStreamReader_read() {
12982 if (this._queuedChunks.length > 0) {
12983 var chunk = this._queuedChunks.shift();
12984 return Promise.resolve({
12985 value: chunk,
12986 done: false
12987 });
12988 }
12989 if (this._done) {
12990 return Promise.resolve({
12991 value: undefined,
12992 done: true
12993 });
12994 }
12995 var requestCapability = (0, _util.createPromiseCapability)();
12996 this._requests.push(requestCapability);
12997 return requestCapability.promise;
12998 },
12999 cancel: function PDFDataTransportStreamReader_cancel(reason) {
13000 this._done = true;
13001 this._requests.forEach(function (requestCapability) {
13002 requestCapability.resolve({
13003 value: undefined,
13004 done: true
13005 });
13006 });
13007 this._requests = [];
13008 }
13009 };
13010 function PDFDataTransportStreamRangeReader(stream, begin, end) {
13011 this._stream = stream;
13012 this._begin = begin;
13013 this._end = end;
13014 this._queuedChunk = null;
13015 this._requests = [];
13016 this._done = false;
13017 this.onProgress = null;
13018 }
13019 PDFDataTransportStreamRangeReader.prototype = {
13020 _enqueue: function PDFDataTransportStreamRangeReader_enqueue(chunk) {
13021 if (this._done) {
13022 return;
13023 }
13024 if (this._requests.length === 0) {
13025 this._queuedChunk = chunk;
13026 } else {
13027 var requestsCapability = this._requests.shift();
13028 requestsCapability.resolve({
13029 value: chunk,
13030 done: false
13031 });
13032 this._requests.forEach(function (requestCapability) {
13033 requestCapability.resolve({
13034 value: undefined,
13035 done: true
13036 });
13037 });
13038 this._requests = [];
13039 }
13040 this._done = true;
13041 this._stream._removeRangeReader(this);
13042 },
13043 get isStreamingSupported() {
13044 return false;
13045 },
13046 read: function PDFDataTransportStreamRangeReader_read() {
13047 if (this._queuedChunk) {
13048 var chunk = this._queuedChunk;
13049 this._queuedChunk = null;
13050 return Promise.resolve({
13051 value: chunk,
13052 done: false
13053 });
13054 }
13055 if (this._done) {
13056 return Promise.resolve({
13057 value: undefined,
13058 done: true
13059 });
13060 }
13061 var requestCapability = (0, _util.createPromiseCapability)();
13062 this._requests.push(requestCapability);
13063 return requestCapability.promise;
13064 },
13065 cancel: function PDFDataTransportStreamRangeReader_cancel(reason) {
13066 this._done = true;
13067 this._requests.forEach(function (requestCapability) {
13068 requestCapability.resolve({
13069 value: undefined,
13070 done: true
13071 });
13072 });
13073 this._requests = [];
13074 this._stream._removeRangeReader(this);
13075 }
13076 };
13077 return PDFDataTransportStream;
13078}();
13079exports.PDFDataTransportStream = PDFDataTransportStream;
13080
13081/***/ }),
13082/* 124 */
13083/***/ (function(module, exports, __w_pdfjs_require__) {
13084
13085"use strict";
13086
13087
13088Object.defineProperty(exports, "__esModule", {
13089 value: true
13090});
13091exports.WebGLContext = undefined;
13092
13093var _createClass = function () { 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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
13094
13095var _util = __w_pdfjs_require__(0);
13096
13097function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
13098
13099var WebGLContext = function () {
13100 function WebGLContext(_ref) {
13101 var _ref$enable = _ref.enable,
13102 enable = _ref$enable === undefined ? false : _ref$enable;
13103
13104 _classCallCheck(this, WebGLContext);
13105
13106 this._enabled = enable === true;
13107 }
13108
13109 _createClass(WebGLContext, [{
13110 key: 'composeSMask',
13111 value: function composeSMask(_ref2) {
13112 var layer = _ref2.layer,
13113 mask = _ref2.mask,
13114 properties = _ref2.properties;
13115
13116 return WebGLUtils.composeSMask(layer, mask, properties);
13117 }
13118 }, {
13119 key: 'drawFigures',
13120 value: function drawFigures(_ref3) {
13121 var width = _ref3.width,
13122 height = _ref3.height,
13123 backgroundColor = _ref3.backgroundColor,
13124 figures = _ref3.figures,
13125 context = _ref3.context;
13126
13127 return WebGLUtils.drawFigures(width, height, backgroundColor, figures, context);
13128 }
13129 }, {
13130 key: 'clear',
13131 value: function clear() {
13132 WebGLUtils.cleanup();
13133 }
13134 }, {
13135 key: 'isEnabled',
13136 get: function get() {
13137 var enabled = this._enabled;
13138 if (enabled) {
13139 enabled = WebGLUtils.tryInitGL();
13140 }
13141 return (0, _util.shadow)(this, 'isEnabled', enabled);
13142 }
13143 }]);
13144
13145 return WebGLContext;
13146}();
13147
13148var WebGLUtils = function WebGLUtilsClosure() {
13149 function loadShader(gl, code, shaderType) {
13150 var shader = gl.createShader(shaderType);
13151 gl.shaderSource(shader, code);
13152 gl.compileShader(shader);
13153 var compiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS);
13154 if (!compiled) {
13155 var errorMsg = gl.getShaderInfoLog(shader);
13156 throw new Error('Error during shader compilation: ' + errorMsg);
13157 }
13158 return shader;
13159 }
13160 function createVertexShader(gl, code) {
13161 return loadShader(gl, code, gl.VERTEX_SHADER);
13162 }
13163 function createFragmentShader(gl, code) {
13164 return loadShader(gl, code, gl.FRAGMENT_SHADER);
13165 }
13166 function createProgram(gl, shaders) {
13167 var program = gl.createProgram();
13168 for (var i = 0, ii = shaders.length; i < ii; ++i) {
13169 gl.attachShader(program, shaders[i]);
13170 }
13171 gl.linkProgram(program);
13172 var linked = gl.getProgramParameter(program, gl.LINK_STATUS);
13173 if (!linked) {
13174 var errorMsg = gl.getProgramInfoLog(program);
13175 throw new Error('Error during program linking: ' + errorMsg);
13176 }
13177 return program;
13178 }
13179 function createTexture(gl, image, textureId) {
13180 gl.activeTexture(textureId);
13181 var texture = gl.createTexture();
13182 gl.bindTexture(gl.TEXTURE_2D, texture);
13183 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
13184 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
13185 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
13186 gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
13187 gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
13188 return texture;
13189 }
13190 var currentGL, currentCanvas;
13191 function generateGL() {
13192 if (currentGL) {
13193 return;
13194 }
13195 currentCanvas = document.createElement('canvas');
13196 currentGL = currentCanvas.getContext('webgl', { premultipliedalpha: false });
13197 }
13198 var smaskVertexShaderCode = '\
13199 attribute vec2 a_position; \
13200 attribute vec2 a_texCoord; \
13201 \
13202 uniform vec2 u_resolution; \
13203 \
13204 varying vec2 v_texCoord; \
13205 \
13206 void main() { \
13207 vec2 clipSpace = (a_position / u_resolution) * 2.0 - 1.0; \
13208 gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1); \
13209 \
13210 v_texCoord = a_texCoord; \
13211 } ';
13212 var smaskFragmentShaderCode = '\
13213 precision mediump float; \
13214 \
13215 uniform vec4 u_backdrop; \
13216 uniform int u_subtype; \
13217 uniform sampler2D u_image; \
13218 uniform sampler2D u_mask; \
13219 \
13220 varying vec2 v_texCoord; \
13221 \
13222 void main() { \
13223 vec4 imageColor = texture2D(u_image, v_texCoord); \
13224 vec4 maskColor = texture2D(u_mask, v_texCoord); \
13225 if (u_backdrop.a > 0.0) { \
13226 maskColor.rgb = maskColor.rgb * maskColor.a + \
13227 u_backdrop.rgb * (1.0 - maskColor.a); \
13228 } \
13229 float lum; \
13230 if (u_subtype == 0) { \
13231 lum = maskColor.a; \
13232 } else { \
13233 lum = maskColor.r * 0.3 + maskColor.g * 0.59 + \
13234 maskColor.b * 0.11; \
13235 } \
13236 imageColor.a *= lum; \
13237 imageColor.rgb *= imageColor.a; \
13238 gl_FragColor = imageColor; \
13239 } ';
13240 var smaskCache = null;
13241 function initSmaskGL() {
13242 var canvas, gl;
13243 generateGL();
13244 canvas = currentCanvas;
13245 currentCanvas = null;
13246 gl = currentGL;
13247 currentGL = null;
13248 var vertexShader = createVertexShader(gl, smaskVertexShaderCode);
13249 var fragmentShader = createFragmentShader(gl, smaskFragmentShaderCode);
13250 var program = createProgram(gl, [vertexShader, fragmentShader]);
13251 gl.useProgram(program);
13252 var cache = {};
13253 cache.gl = gl;
13254 cache.canvas = canvas;
13255 cache.resolutionLocation = gl.getUniformLocation(program, 'u_resolution');
13256 cache.positionLocation = gl.getAttribLocation(program, 'a_position');
13257 cache.backdropLocation = gl.getUniformLocation(program, 'u_backdrop');
13258 cache.subtypeLocation = gl.getUniformLocation(program, 'u_subtype');
13259 var texCoordLocation = gl.getAttribLocation(program, 'a_texCoord');
13260 var texLayerLocation = gl.getUniformLocation(program, 'u_image');
13261 var texMaskLocation = gl.getUniformLocation(program, 'u_mask');
13262 var texCoordBuffer = gl.createBuffer();
13263 gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer);
13264 gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0]), gl.STATIC_DRAW);
13265 gl.enableVertexAttribArray(texCoordLocation);
13266 gl.vertexAttribPointer(texCoordLocation, 2, gl.FLOAT, false, 0, 0);
13267 gl.uniform1i(texLayerLocation, 0);
13268 gl.uniform1i(texMaskLocation, 1);
13269 smaskCache = cache;
13270 }
13271 function composeSMask(layer, mask, properties) {
13272 var width = layer.width,
13273 height = layer.height;
13274 if (!smaskCache) {
13275 initSmaskGL();
13276 }
13277 var cache = smaskCache,
13278 canvas = cache.canvas,
13279 gl = cache.gl;
13280 canvas.width = width;
13281 canvas.height = height;
13282 gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);
13283 gl.uniform2f(cache.resolutionLocation, width, height);
13284 if (properties.backdrop) {
13285 gl.uniform4f(cache.resolutionLocation, properties.backdrop[0], properties.backdrop[1], properties.backdrop[2], 1);
13286 } else {
13287 gl.uniform4f(cache.resolutionLocation, 0, 0, 0, 0);
13288 }
13289 gl.uniform1i(cache.subtypeLocation, properties.subtype === 'Luminosity' ? 1 : 0);
13290 var texture = createTexture(gl, layer, gl.TEXTURE0);
13291 var maskTexture = createTexture(gl, mask, gl.TEXTURE1);
13292 var buffer = gl.createBuffer();
13293 gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
13294 gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([0, 0, width, 0, 0, height, 0, height, width, 0, width, height]), gl.STATIC_DRAW);
13295 gl.enableVertexAttribArray(cache.positionLocation);
13296 gl.vertexAttribPointer(cache.positionLocation, 2, gl.FLOAT, false, 0, 0);
13297 gl.clearColor(0, 0, 0, 0);
13298 gl.enable(gl.BLEND);
13299 gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
13300 gl.clear(gl.COLOR_BUFFER_BIT);
13301 gl.drawArrays(gl.TRIANGLES, 0, 6);
13302 gl.flush();
13303 gl.deleteTexture(texture);
13304 gl.deleteTexture(maskTexture);
13305 gl.deleteBuffer(buffer);
13306 return canvas;
13307 }
13308 var figuresVertexShaderCode = '\
13309 attribute vec2 a_position; \
13310 attribute vec3 a_color; \
13311 \
13312 uniform vec2 u_resolution; \
13313 uniform vec2 u_scale; \
13314 uniform vec2 u_offset; \
13315 \
13316 varying vec4 v_color; \
13317 \
13318 void main() { \
13319 vec2 position = (a_position + u_offset) * u_scale; \
13320 vec2 clipSpace = (position / u_resolution) * 2.0 - 1.0; \
13321 gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1); \
13322 \
13323 v_color = vec4(a_color / 255.0, 1.0); \
13324 } ';
13325 var figuresFragmentShaderCode = '\
13326 precision mediump float; \
13327 \
13328 varying vec4 v_color; \
13329 \
13330 void main() { \
13331 gl_FragColor = v_color; \
13332 } ';
13333 var figuresCache = null;
13334 function initFiguresGL() {
13335 var canvas, gl;
13336 generateGL();
13337 canvas = currentCanvas;
13338 currentCanvas = null;
13339 gl = currentGL;
13340 currentGL = null;
13341 var vertexShader = createVertexShader(gl, figuresVertexShaderCode);
13342 var fragmentShader = createFragmentShader(gl, figuresFragmentShaderCode);
13343 var program = createProgram(gl, [vertexShader, fragmentShader]);
13344 gl.useProgram(program);
13345 var cache = {};
13346 cache.gl = gl;
13347 cache.canvas = canvas;
13348 cache.resolutionLocation = gl.getUniformLocation(program, 'u_resolution');
13349 cache.scaleLocation = gl.getUniformLocation(program, 'u_scale');
13350 cache.offsetLocation = gl.getUniformLocation(program, 'u_offset');
13351 cache.positionLocation = gl.getAttribLocation(program, 'a_position');
13352 cache.colorLocation = gl.getAttribLocation(program, 'a_color');
13353 figuresCache = cache;
13354 }
13355 function drawFigures(width, height, backgroundColor, figures, context) {
13356 if (!figuresCache) {
13357 initFiguresGL();
13358 }
13359 var cache = figuresCache,
13360 canvas = cache.canvas,
13361 gl = cache.gl;
13362 canvas.width = width;
13363 canvas.height = height;
13364 gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight);
13365 gl.uniform2f(cache.resolutionLocation, width, height);
13366 var count = 0;
13367 var i, ii, rows;
13368 for (i = 0, ii = figures.length; i < ii; i++) {
13369 switch (figures[i].type) {
13370 case 'lattice':
13371 rows = figures[i].coords.length / figures[i].verticesPerRow | 0;
13372 count += (rows - 1) * (figures[i].verticesPerRow - 1) * 6;
13373 break;
13374 case 'triangles':
13375 count += figures[i].coords.length;
13376 break;
13377 }
13378 }
13379 var coords = new Float32Array(count * 2);
13380 var colors = new Uint8Array(count * 3);
13381 var coordsMap = context.coords,
13382 colorsMap = context.colors;
13383 var pIndex = 0,
13384 cIndex = 0;
13385 for (i = 0, ii = figures.length; i < ii; i++) {
13386 var figure = figures[i],
13387 ps = figure.coords,
13388 cs = figure.colors;
13389 switch (figure.type) {
13390 case 'lattice':
13391 var cols = figure.verticesPerRow;
13392 rows = ps.length / cols | 0;
13393 for (var row = 1; row < rows; row++) {
13394 var offset = row * cols + 1;
13395 for (var col = 1; col < cols; col++, offset++) {
13396 coords[pIndex] = coordsMap[ps[offset - cols - 1]];
13397 coords[pIndex + 1] = coordsMap[ps[offset - cols - 1] + 1];
13398 coords[pIndex + 2] = coordsMap[ps[offset - cols]];
13399 coords[pIndex + 3] = coordsMap[ps[offset - cols] + 1];
13400 coords[pIndex + 4] = coordsMap[ps[offset - 1]];
13401 coords[pIndex + 5] = coordsMap[ps[offset - 1] + 1];
13402 colors[cIndex] = colorsMap[cs[offset - cols - 1]];
13403 colors[cIndex + 1] = colorsMap[cs[offset - cols - 1] + 1];
13404 colors[cIndex + 2] = colorsMap[cs[offset - cols - 1] + 2];
13405 colors[cIndex + 3] = colorsMap[cs[offset - cols]];
13406 colors[cIndex + 4] = colorsMap[cs[offset - cols] + 1];
13407 colors[cIndex + 5] = colorsMap[cs[offset - cols] + 2];
13408 colors[cIndex + 6] = colorsMap[cs[offset - 1]];
13409 colors[cIndex + 7] = colorsMap[cs[offset - 1] + 1];
13410 colors[cIndex + 8] = colorsMap[cs[offset - 1] + 2];
13411 coords[pIndex + 6] = coords[pIndex + 2];
13412 coords[pIndex + 7] = coords[pIndex + 3];
13413 coords[pIndex + 8] = coords[pIndex + 4];
13414 coords[pIndex + 9] = coords[pIndex + 5];
13415 coords[pIndex + 10] = coordsMap[ps[offset]];
13416 coords[pIndex + 11] = coordsMap[ps[offset] + 1];
13417 colors[cIndex + 9] = colors[cIndex + 3];
13418 colors[cIndex + 10] = colors[cIndex + 4];
13419 colors[cIndex + 11] = colors[cIndex + 5];
13420 colors[cIndex + 12] = colors[cIndex + 6];
13421 colors[cIndex + 13] = colors[cIndex + 7];
13422 colors[cIndex + 14] = colors[cIndex + 8];
13423 colors[cIndex + 15] = colorsMap[cs[offset]];
13424 colors[cIndex + 16] = colorsMap[cs[offset] + 1];
13425 colors[cIndex + 17] = colorsMap[cs[offset] + 2];
13426 pIndex += 12;
13427 cIndex += 18;
13428 }
13429 }
13430 break;
13431 case 'triangles':
13432 for (var j = 0, jj = ps.length; j < jj; j++) {
13433 coords[pIndex] = coordsMap[ps[j]];
13434 coords[pIndex + 1] = coordsMap[ps[j] + 1];
13435 colors[cIndex] = colorsMap[cs[j]];
13436 colors[cIndex + 1] = colorsMap[cs[j] + 1];
13437 colors[cIndex + 2] = colorsMap[cs[j] + 2];
13438 pIndex += 2;
13439 cIndex += 3;
13440 }
13441 break;
13442 }
13443 }
13444 if (backgroundColor) {
13445 gl.clearColor(backgroundColor[0] / 255, backgroundColor[1] / 255, backgroundColor[2] / 255, 1.0);
13446 } else {
13447 gl.clearColor(0, 0, 0, 0);
13448 }
13449 gl.clear(gl.COLOR_BUFFER_BIT);
13450 var coordsBuffer = gl.createBuffer();
13451 gl.bindBuffer(gl.ARRAY_BUFFER, coordsBuffer);
13452 gl.bufferData(gl.ARRAY_BUFFER, coords, gl.STATIC_DRAW);
13453 gl.enableVertexAttribArray(cache.positionLocation);
13454 gl.vertexAttribPointer(cache.positionLocation, 2, gl.FLOAT, false, 0, 0);
13455 var colorsBuffer = gl.createBuffer();
13456 gl.bindBuffer(gl.ARRAY_BUFFER, colorsBuffer);
13457 gl.bufferData(gl.ARRAY_BUFFER, colors, gl.STATIC_DRAW);
13458 gl.enableVertexAttribArray(cache.colorLocation);
13459 gl.vertexAttribPointer(cache.colorLocation, 3, gl.UNSIGNED_BYTE, false, 0, 0);
13460 gl.uniform2f(cache.scaleLocation, context.scaleX, context.scaleY);
13461 gl.uniform2f(cache.offsetLocation, context.offsetX, context.offsetY);
13462 gl.drawArrays(gl.TRIANGLES, 0, count);
13463 gl.flush();
13464 gl.deleteBuffer(coordsBuffer);
13465 gl.deleteBuffer(colorsBuffer);
13466 return canvas;
13467 }
13468 return {
13469 tryInitGL: function tryInitGL() {
13470 try {
13471 generateGL();
13472 return !!currentGL;
13473 } catch (ex) {}
13474 return false;
13475 },
13476
13477 composeSMask: composeSMask,
13478 drawFigures: drawFigures,
13479 cleanup: function cleanup() {
13480 if (smaskCache && smaskCache.canvas) {
13481 smaskCache.canvas.width = 0;
13482 smaskCache.canvas.height = 0;
13483 }
13484 if (figuresCache && figuresCache.canvas) {
13485 figuresCache.canvas.width = 0;
13486 figuresCache.canvas.height = 0;
13487 }
13488 smaskCache = null;
13489 figuresCache = null;
13490 }
13491 };
13492}();
13493exports.WebGLContext = WebGLContext;
13494
13495/***/ }),
13496/* 125 */
13497/***/ (function(module, exports, __w_pdfjs_require__) {
13498
13499"use strict";
13500
13501
13502Object.defineProperty(exports, "__esModule", {
13503 value: true
13504});
13505exports.renderTextLayer = undefined;
13506
13507var _util = __w_pdfjs_require__(0);
13508
13509var _global_scope = __w_pdfjs_require__(18);
13510
13511var _global_scope2 = _interopRequireDefault(_global_scope);
13512
13513function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13514
13515var renderTextLayer = function renderTextLayerClosure() {
13516 var MAX_TEXT_DIVS_TO_RENDER = 100000;
13517 var NonWhitespaceRegexp = /\S/;
13518 function isAllWhitespace(str) {
13519 return !NonWhitespaceRegexp.test(str);
13520 }
13521 var styleBuf = ['left: ', 0, 'px; top: ', 0, 'px; font-size: ', 0, 'px; font-family: ', '', ';'];
13522 function appendText(task, geom, styles) {
13523 var textDiv = document.createElement('div');
13524 var textDivProperties = {
13525 style: null,
13526 angle: 0,
13527 canvasWidth: 0,
13528 isWhitespace: false,
13529 originalTransform: null,
13530 paddingBottom: 0,
13531 paddingLeft: 0,
13532 paddingRight: 0,
13533 paddingTop: 0,
13534 scale: 1
13535 };
13536 task._textDivs.push(textDiv);
13537 if (isAllWhitespace(geom.str)) {
13538 textDivProperties.isWhitespace = true;
13539 task._textDivProperties.set(textDiv, textDivProperties);
13540 return;
13541 }
13542 var tx = _util.Util.transform(task._viewport.transform, geom.transform);
13543 var angle = Math.atan2(tx[1], tx[0]);
13544 var style = styles[geom.fontName];
13545 if (style.vertical) {
13546 angle += Math.PI / 2;
13547 }
13548 var fontHeight = Math.sqrt(tx[2] * tx[2] + tx[3] * tx[3]);
13549 var fontAscent = fontHeight;
13550 if (style.ascent) {
13551 fontAscent = style.ascent * fontAscent;
13552 } else if (style.descent) {
13553 fontAscent = (1 + style.descent) * fontAscent;
13554 }
13555 var left;
13556 var top;
13557 if (angle === 0) {
13558 left = tx[4];
13559 top = tx[5] - fontAscent;
13560 } else {
13561 left = tx[4] + fontAscent * Math.sin(angle);
13562 top = tx[5] - fontAscent * Math.cos(angle);
13563 }
13564 styleBuf[1] = left;
13565 styleBuf[3] = top;
13566 styleBuf[5] = fontHeight;
13567 styleBuf[7] = style.fontFamily;
13568 textDivProperties.style = styleBuf.join('');
13569 textDiv.setAttribute('style', textDivProperties.style);
13570 textDiv.textContent = geom.str;
13571 if (task._fontInspectorEnabled) {
13572 textDiv.dataset.fontName = geom.fontName;
13573 }
13574 if (angle !== 0) {
13575 textDivProperties.angle = angle * (180 / Math.PI);
13576 }
13577 if (geom.str.length > 1) {
13578 if (style.vertical) {
13579 textDivProperties.canvasWidth = geom.height * task._viewport.scale;
13580 } else {
13581 textDivProperties.canvasWidth = geom.width * task._viewport.scale;
13582 }
13583 }
13584 task._textDivProperties.set(textDiv, textDivProperties);
13585 if (task._textContentStream) {
13586 task._layoutText(textDiv);
13587 }
13588 if (task._enhanceTextSelection) {
13589 var angleCos = 1,
13590 angleSin = 0;
13591 if (angle !== 0) {
13592 angleCos = Math.cos(angle);
13593 angleSin = Math.sin(angle);
13594 }
13595 var divWidth = (style.vertical ? geom.height : geom.width) * task._viewport.scale;
13596 var divHeight = fontHeight;
13597 var m, b;
13598 if (angle !== 0) {
13599 m = [angleCos, angleSin, -angleSin, angleCos, left, top];
13600 b = _util.Util.getAxialAlignedBoundingBox([0, 0, divWidth, divHeight], m);
13601 } else {
13602 b = [left, top, left + divWidth, top + divHeight];
13603 }
13604 task._bounds.push({
13605 left: b[0],
13606 top: b[1],
13607 right: b[2],
13608 bottom: b[3],
13609 div: textDiv,
13610 size: [divWidth, divHeight],
13611 m: m
13612 });
13613 }
13614 }
13615 function render(task) {
13616 if (task._canceled) {
13617 return;
13618 }
13619 var textDivs = task._textDivs;
13620 var capability = task._capability;
13621 var textDivsLength = textDivs.length;
13622 if (textDivsLength > MAX_TEXT_DIVS_TO_RENDER) {
13623 task._renderingDone = true;
13624 capability.resolve();
13625 return;
13626 }
13627 if (!task._textContentStream) {
13628 for (var i = 0; i < textDivsLength; i++) {
13629 task._layoutText(textDivs[i]);
13630 }
13631 }
13632 task._renderingDone = true;
13633 capability.resolve();
13634 }
13635 function expand(task) {
13636 var bounds = task._bounds;
13637 var viewport = task._viewport;
13638 var expanded = expandBounds(viewport.width, viewport.height, bounds);
13639 for (var i = 0; i < expanded.length; i++) {
13640 var div = bounds[i].div;
13641 var divProperties = task._textDivProperties.get(div);
13642 if (divProperties.angle === 0) {
13643 divProperties.paddingLeft = bounds[i].left - expanded[i].left;
13644 divProperties.paddingTop = bounds[i].top - expanded[i].top;
13645 divProperties.paddingRight = expanded[i].right - bounds[i].right;
13646 divProperties.paddingBottom = expanded[i].bottom - bounds[i].bottom;
13647 task._textDivProperties.set(div, divProperties);
13648 continue;
13649 }
13650 var e = expanded[i],
13651 b = bounds[i];
13652 var m = b.m,
13653 c = m[0],
13654 s = m[1];
13655 var points = [[0, 0], [0, b.size[1]], [b.size[0], 0], b.size];
13656 var ts = new Float64Array(64);
13657 points.forEach(function (p, i) {
13658 var t = _util.Util.applyTransform(p, m);
13659 ts[i + 0] = c && (e.left - t[0]) / c;
13660 ts[i + 4] = s && (e.top - t[1]) / s;
13661 ts[i + 8] = c && (e.right - t[0]) / c;
13662 ts[i + 12] = s && (e.bottom - t[1]) / s;
13663 ts[i + 16] = s && (e.left - t[0]) / -s;
13664 ts[i + 20] = c && (e.top - t[1]) / c;
13665 ts[i + 24] = s && (e.right - t[0]) / -s;
13666 ts[i + 28] = c && (e.bottom - t[1]) / c;
13667 ts[i + 32] = c && (e.left - t[0]) / -c;
13668 ts[i + 36] = s && (e.top - t[1]) / -s;
13669 ts[i + 40] = c && (e.right - t[0]) / -c;
13670 ts[i + 44] = s && (e.bottom - t[1]) / -s;
13671 ts[i + 48] = s && (e.left - t[0]) / s;
13672 ts[i + 52] = c && (e.top - t[1]) / -c;
13673 ts[i + 56] = s && (e.right - t[0]) / s;
13674 ts[i + 60] = c && (e.bottom - t[1]) / -c;
13675 });
13676 var findPositiveMin = function findPositiveMin(ts, offset, count) {
13677 var result = 0;
13678 for (var i = 0; i < count; i++) {
13679 var t = ts[offset++];
13680 if (t > 0) {
13681 result = result ? Math.min(t, result) : t;
13682 }
13683 }
13684 return result;
13685 };
13686 var boxScale = 1 + Math.min(Math.abs(c), Math.abs(s));
13687 divProperties.paddingLeft = findPositiveMin(ts, 32, 16) / boxScale;
13688 divProperties.paddingTop = findPositiveMin(ts, 48, 16) / boxScale;
13689 divProperties.paddingRight = findPositiveMin(ts, 0, 16) / boxScale;
13690 divProperties.paddingBottom = findPositiveMin(ts, 16, 16) / boxScale;
13691 task._textDivProperties.set(div, divProperties);
13692 }
13693 }
13694 function expandBounds(width, height, boxes) {
13695 var bounds = boxes.map(function (box, i) {
13696 return {
13697 x1: box.left,
13698 y1: box.top,
13699 x2: box.right,
13700 y2: box.bottom,
13701 index: i,
13702 x1New: undefined,
13703 x2New: undefined
13704 };
13705 });
13706 expandBoundsLTR(width, bounds);
13707 var expanded = new Array(boxes.length);
13708 bounds.forEach(function (b) {
13709 var i = b.index;
13710 expanded[i] = {
13711 left: b.x1New,
13712 top: 0,
13713 right: b.x2New,
13714 bottom: 0
13715 };
13716 });
13717 boxes.map(function (box, i) {
13718 var e = expanded[i],
13719 b = bounds[i];
13720 b.x1 = box.top;
13721 b.y1 = width - e.right;
13722 b.x2 = box.bottom;
13723 b.y2 = width - e.left;
13724 b.index = i;
13725 b.x1New = undefined;
13726 b.x2New = undefined;
13727 });
13728 expandBoundsLTR(height, bounds);
13729 bounds.forEach(function (b) {
13730 var i = b.index;
13731 expanded[i].top = b.x1New;
13732 expanded[i].bottom = b.x2New;
13733 });
13734 return expanded;
13735 }
13736 function expandBoundsLTR(width, bounds) {
13737 bounds.sort(function (a, b) {
13738 return a.x1 - b.x1 || a.index - b.index;
13739 });
13740 var fakeBoundary = {
13741 x1: -Infinity,
13742 y1: -Infinity,
13743 x2: 0,
13744 y2: Infinity,
13745 index: -1,
13746 x1New: 0,
13747 x2New: 0
13748 };
13749 var horizon = [{
13750 start: -Infinity,
13751 end: Infinity,
13752 boundary: fakeBoundary
13753 }];
13754 bounds.forEach(function (boundary) {
13755 var i = 0;
13756 while (i < horizon.length && horizon[i].end <= boundary.y1) {
13757 i++;
13758 }
13759 var j = horizon.length - 1;
13760 while (j >= 0 && horizon[j].start >= boundary.y2) {
13761 j--;
13762 }
13763 var horizonPart, affectedBoundary;
13764 var q,
13765 k,
13766 maxXNew = -Infinity;
13767 for (q = i; q <= j; q++) {
13768 horizonPart = horizon[q];
13769 affectedBoundary = horizonPart.boundary;
13770 var xNew;
13771 if (affectedBoundary.x2 > boundary.x1) {
13772 xNew = affectedBoundary.index > boundary.index ? affectedBoundary.x1New : boundary.x1;
13773 } else if (affectedBoundary.x2New === undefined) {
13774 xNew = (affectedBoundary.x2 + boundary.x1) / 2;
13775 } else {
13776 xNew = affectedBoundary.x2New;
13777 }
13778 if (xNew > maxXNew) {
13779 maxXNew = xNew;
13780 }
13781 }
13782 boundary.x1New = maxXNew;
13783 for (q = i; q <= j; q++) {
13784 horizonPart = horizon[q];
13785 affectedBoundary = horizonPart.boundary;
13786 if (affectedBoundary.x2New === undefined) {
13787 if (affectedBoundary.x2 > boundary.x1) {
13788 if (affectedBoundary.index > boundary.index) {
13789 affectedBoundary.x2New = affectedBoundary.x2;
13790 }
13791 } else {
13792 affectedBoundary.x2New = maxXNew;
13793 }
13794 } else if (affectedBoundary.x2New > maxXNew) {
13795 affectedBoundary.x2New = Math.max(maxXNew, affectedBoundary.x2);
13796 }
13797 }
13798 var changedHorizon = [],
13799 lastBoundary = null;
13800 for (q = i; q <= j; q++) {
13801 horizonPart = horizon[q];
13802 affectedBoundary = horizonPart.boundary;
13803 var useBoundary = affectedBoundary.x2 > boundary.x2 ? affectedBoundary : boundary;
13804 if (lastBoundary === useBoundary) {
13805 changedHorizon[changedHorizon.length - 1].end = horizonPart.end;
13806 } else {
13807 changedHorizon.push({
13808 start: horizonPart.start,
13809 end: horizonPart.end,
13810 boundary: useBoundary
13811 });
13812 lastBoundary = useBoundary;
13813 }
13814 }
13815 if (horizon[i].start < boundary.y1) {
13816 changedHorizon[0].start = boundary.y1;
13817 changedHorizon.unshift({
13818 start: horizon[i].start,
13819 end: boundary.y1,
13820 boundary: horizon[i].boundary
13821 });
13822 }
13823 if (boundary.y2 < horizon[j].end) {
13824 changedHorizon[changedHorizon.length - 1].end = boundary.y2;
13825 changedHorizon.push({
13826 start: boundary.y2,
13827 end: horizon[j].end,
13828 boundary: horizon[j].boundary
13829 });
13830 }
13831 for (q = i; q <= j; q++) {
13832 horizonPart = horizon[q];
13833 affectedBoundary = horizonPart.boundary;
13834 if (affectedBoundary.x2New !== undefined) {
13835 continue;
13836 }
13837 var used = false;
13838 for (k = i - 1; !used && k >= 0 && horizon[k].start >= affectedBoundary.y1; k--) {
13839 used = horizon[k].boundary === affectedBoundary;
13840 }
13841 for (k = j + 1; !used && k < horizon.length && horizon[k].end <= affectedBoundary.y2; k++) {
13842 used = horizon[k].boundary === affectedBoundary;
13843 }
13844 for (k = 0; !used && k < changedHorizon.length; k++) {
13845 used = changedHorizon[k].boundary === affectedBoundary;
13846 }
13847 if (!used) {
13848 affectedBoundary.x2New = maxXNew;
13849 }
13850 }
13851 Array.prototype.splice.apply(horizon, [i, j - i + 1].concat(changedHorizon));
13852 });
13853 horizon.forEach(function (horizonPart) {
13854 var affectedBoundary = horizonPart.boundary;
13855 if (affectedBoundary.x2New === undefined) {
13856 affectedBoundary.x2New = Math.max(width, affectedBoundary.x2);
13857 }
13858 });
13859 }
13860 function TextLayerRenderTask(_ref) {
13861 var textContent = _ref.textContent,
13862 textContentStream = _ref.textContentStream,
13863 container = _ref.container,
13864 viewport = _ref.viewport,
13865 textDivs = _ref.textDivs,
13866 textContentItemsStr = _ref.textContentItemsStr,
13867 enhanceTextSelection = _ref.enhanceTextSelection;
13868
13869 this._textContent = textContent;
13870 this._textContentStream = textContentStream;
13871 this._container = container;
13872 this._viewport = viewport;
13873 this._textDivs = textDivs || [];
13874 this._textContentItemsStr = textContentItemsStr || [];
13875 this._enhanceTextSelection = !!enhanceTextSelection;
13876 this._fontInspectorEnabled = !!(_global_scope2.default.FontInspector && _global_scope2.default.FontInspector.enabled);
13877 this._reader = null;
13878 this._layoutTextLastFontSize = null;
13879 this._layoutTextLastFontFamily = null;
13880 this._layoutTextCtx = null;
13881 this._textDivProperties = new WeakMap();
13882 this._renderingDone = false;
13883 this._canceled = false;
13884 this._capability = (0, _util.createPromiseCapability)();
13885 this._renderTimer = null;
13886 this._bounds = [];
13887 }
13888 TextLayerRenderTask.prototype = {
13889 get promise() {
13890 return this._capability.promise;
13891 },
13892 cancel: function TextLayer_cancel() {
13893 if (this._reader) {
13894 this._reader.cancel(new _util.AbortException('text layer task cancelled'));
13895 this._reader = null;
13896 }
13897 this._canceled = true;
13898 if (this._renderTimer !== null) {
13899 clearTimeout(this._renderTimer);
13900 this._renderTimer = null;
13901 }
13902 this._capability.reject('canceled');
13903 },
13904 _processItems: function _processItems(items, styleCache) {
13905 for (var i = 0, len = items.length; i < len; i++) {
13906 this._textContentItemsStr.push(items[i].str);
13907 appendText(this, items[i], styleCache);
13908 }
13909 },
13910 _layoutText: function _layoutText(textDiv) {
13911 var textLayerFrag = this._container;
13912 var textDivProperties = this._textDivProperties.get(textDiv);
13913 if (textDivProperties.isWhitespace) {
13914 return;
13915 }
13916 var fontSize = textDiv.style.fontSize;
13917 var fontFamily = textDiv.style.fontFamily;
13918 if (fontSize !== this._layoutTextLastFontSize || fontFamily !== this._layoutTextLastFontFamily) {
13919 this._layoutTextCtx.font = fontSize + ' ' + fontFamily;
13920 this._lastFontSize = fontSize;
13921 this._lastFontFamily = fontFamily;
13922 }
13923 var width = this._layoutTextCtx.measureText(textDiv.textContent).width;
13924 var transform = '';
13925 if (textDivProperties.canvasWidth !== 0 && width > 0) {
13926 textDivProperties.scale = textDivProperties.canvasWidth / width;
13927 transform = 'scaleX(' + textDivProperties.scale + ')';
13928 }
13929 if (textDivProperties.angle !== 0) {
13930 transform = 'rotate(' + textDivProperties.angle + 'deg) ' + transform;
13931 }
13932 if (transform !== '') {
13933 textDivProperties.originalTransform = transform;
13934 textDiv.style.transform = transform;
13935 }
13936 this._textDivProperties.set(textDiv, textDivProperties);
13937 textLayerFrag.appendChild(textDiv);
13938 },
13939
13940 _render: function TextLayer_render(timeout) {
13941 var _this = this;
13942
13943 var capability = (0, _util.createPromiseCapability)();
13944 var styleCache = Object.create(null);
13945 var canvas = document.createElement('canvas');
13946 canvas.mozOpaque = true;
13947 this._layoutTextCtx = canvas.getContext('2d', { alpha: false });
13948 if (this._textContent) {
13949 var textItems = this._textContent.items;
13950 var textStyles = this._textContent.styles;
13951 this._processItems(textItems, textStyles);
13952 capability.resolve();
13953 } else if (this._textContentStream) {
13954 var pump = function pump() {
13955 _this._reader.read().then(function (_ref2) {
13956 var value = _ref2.value,
13957 done = _ref2.done;
13958
13959 if (done) {
13960 capability.resolve();
13961 return;
13962 }
13963 _util.Util.extendObj(styleCache, value.styles);
13964 _this._processItems(value.items, styleCache);
13965 pump();
13966 }, capability.reject);
13967 };
13968 this._reader = this._textContentStream.getReader();
13969 pump();
13970 } else {
13971 throw new Error('Neither "textContent" nor "textContentStream"' + ' parameters specified.');
13972 }
13973 capability.promise.then(function () {
13974 styleCache = null;
13975 if (!timeout) {
13976 render(_this);
13977 } else {
13978 _this._renderTimer = setTimeout(function () {
13979 render(_this);
13980 _this._renderTimer = null;
13981 }, timeout);
13982 }
13983 }, this._capability.reject);
13984 },
13985 expandTextDivs: function TextLayer_expandTextDivs(expandDivs) {
13986 if (!this._enhanceTextSelection || !this._renderingDone) {
13987 return;
13988 }
13989 if (this._bounds !== null) {
13990 expand(this);
13991 this._bounds = null;
13992 }
13993 for (var i = 0, ii = this._textDivs.length; i < ii; i++) {
13994 var div = this._textDivs[i];
13995 var divProperties = this._textDivProperties.get(div);
13996 if (divProperties.isWhitespace) {
13997 continue;
13998 }
13999 if (expandDivs) {
14000 var transform = '',
14001 padding = '';
14002 if (divProperties.scale !== 1) {
14003 transform = 'scaleX(' + divProperties.scale + ')';
14004 }
14005 if (divProperties.angle !== 0) {
14006 transform = 'rotate(' + divProperties.angle + 'deg) ' + transform;
14007 }
14008 if (divProperties.paddingLeft !== 0) {
14009 padding += ' padding-left: ' + divProperties.paddingLeft / divProperties.scale + 'px;';
14010 transform += ' translateX(' + -divProperties.paddingLeft / divProperties.scale + 'px)';
14011 }
14012 if (divProperties.paddingTop !== 0) {
14013 padding += ' padding-top: ' + divProperties.paddingTop + 'px;';
14014 transform += ' translateY(' + -divProperties.paddingTop + 'px)';
14015 }
14016 if (divProperties.paddingRight !== 0) {
14017 padding += ' padding-right: ' + divProperties.paddingRight / divProperties.scale + 'px;';
14018 }
14019 if (divProperties.paddingBottom !== 0) {
14020 padding += ' padding-bottom: ' + divProperties.paddingBottom + 'px;';
14021 }
14022 if (padding !== '') {
14023 div.setAttribute('style', divProperties.style + padding);
14024 }
14025 if (transform !== '') {
14026 div.style.transform = transform;
14027 }
14028 } else {
14029 div.style.padding = 0;
14030 div.style.transform = divProperties.originalTransform || '';
14031 }
14032 }
14033 }
14034 };
14035 function renderTextLayer(renderParameters) {
14036 var task = new TextLayerRenderTask({
14037 textContent: renderParameters.textContent,
14038 textContentStream: renderParameters.textContentStream,
14039 container: renderParameters.container,
14040 viewport: renderParameters.viewport,
14041 textDivs: renderParameters.textDivs,
14042 textContentItemsStr: renderParameters.textContentItemsStr,
14043 enhanceTextSelection: renderParameters.enhanceTextSelection
14044 });
14045 task._render(renderParameters.timeout);
14046 return task;
14047 }
14048 return renderTextLayer;
14049}();
14050exports.renderTextLayer = renderTextLayer;
14051
14052/***/ }),
14053/* 126 */
14054/***/ (function(module, exports, __w_pdfjs_require__) {
14055
14056"use strict";
14057
14058
14059Object.defineProperty(exports, "__esModule", {
14060 value: true
14061});
14062exports.AnnotationLayer = undefined;
14063
14064var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };
14065
14066var _createClass = function () { 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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
14067
14068var _dom_utils = __w_pdfjs_require__(24);
14069
14070var _util = __w_pdfjs_require__(0);
14071
14072function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
14073
14074function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
14075
14076function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
14077
14078var AnnotationElementFactory = function () {
14079 function AnnotationElementFactory() {
14080 _classCallCheck(this, AnnotationElementFactory);
14081 }
14082
14083 _createClass(AnnotationElementFactory, null, [{
14084 key: 'create',
14085 value: function create(parameters) {
14086 var subtype = parameters.data.annotationType;
14087 switch (subtype) {
14088 case _util.AnnotationType.LINK:
14089 return new LinkAnnotationElement(parameters);
14090 case _util.AnnotationType.TEXT:
14091 return new TextAnnotationElement(parameters);
14092 case _util.AnnotationType.WIDGET:
14093 var fieldType = parameters.data.fieldType;
14094 switch (fieldType) {
14095 case 'Tx':
14096 return new TextWidgetAnnotationElement(parameters);
14097 case 'Btn':
14098 if (parameters.data.radioButton) {
14099 return new RadioButtonWidgetAnnotationElement(parameters);
14100 } else if (parameters.data.checkBox) {
14101 return new CheckboxWidgetAnnotationElement(parameters);
14102 }
14103 return new PushButtonWidgetAnnotationElement(parameters);
14104 case 'Ch':
14105 return new ChoiceWidgetAnnotationElement(parameters);
14106 }
14107 return new WidgetAnnotationElement(parameters);
14108 case _util.AnnotationType.POPUP:
14109 return new PopupAnnotationElement(parameters);
14110 case _util.AnnotationType.LINE:
14111 return new LineAnnotationElement(parameters);
14112 case _util.AnnotationType.SQUARE:
14113 return new SquareAnnotationElement(parameters);
14114 case _util.AnnotationType.CIRCLE:
14115 return new CircleAnnotationElement(parameters);
14116 case _util.AnnotationType.POLYLINE:
14117 return new PolylineAnnotationElement(parameters);
14118 case _util.AnnotationType.POLYGON:
14119 return new PolygonAnnotationElement(parameters);
14120 case _util.AnnotationType.HIGHLIGHT:
14121 return new HighlightAnnotationElement(parameters);
14122 case _util.AnnotationType.UNDERLINE:
14123 return new UnderlineAnnotationElement(parameters);
14124 case _util.AnnotationType.SQUIGGLY:
14125 return new SquigglyAnnotationElement(parameters);
14126 case _util.AnnotationType.STRIKEOUT:
14127 return new StrikeOutAnnotationElement(parameters);
14128 case _util.AnnotationType.STAMP:
14129 return new StampAnnotationElement(parameters);
14130 case _util.AnnotationType.FILEATTACHMENT:
14131 return new FileAttachmentAnnotationElement(parameters);
14132 default:
14133 return new AnnotationElement(parameters);
14134 }
14135 }
14136 }]);
14137
14138 return AnnotationElementFactory;
14139}();
14140
14141var AnnotationElement = function () {
14142 function AnnotationElement(parameters) {
14143 var isRenderable = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
14144 var ignoreBorder = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
14145
14146 _classCallCheck(this, AnnotationElement);
14147
14148 this.isRenderable = isRenderable;
14149 this.data = parameters.data;
14150 this.layer = parameters.layer;
14151 this.page = parameters.page;
14152 this.viewport = parameters.viewport;
14153 this.linkService = parameters.linkService;
14154 this.downloadManager = parameters.downloadManager;
14155 this.imageResourcesPath = parameters.imageResourcesPath;
14156 this.renderInteractiveForms = parameters.renderInteractiveForms;
14157 this.svgFactory = parameters.svgFactory;
14158 if (isRenderable) {
14159 this.container = this._createContainer(ignoreBorder);
14160 }
14161 }
14162
14163 _createClass(AnnotationElement, [{
14164 key: '_createContainer',
14165 value: function _createContainer() {
14166 var ignoreBorder = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
14167
14168 var data = this.data,
14169 page = this.page,
14170 viewport = this.viewport;
14171 var container = document.createElement('section');
14172 var width = data.rect[2] - data.rect[0];
14173 var height = data.rect[3] - data.rect[1];
14174 container.setAttribute('data-annotation-id', data.id);
14175 var rect = _util.Util.normalizeRect([data.rect[0], page.view[3] - data.rect[1] + page.view[1], data.rect[2], page.view[3] - data.rect[3] + page.view[1]]);
14176 container.style.transform = 'matrix(' + viewport.transform.join(',') + ')';
14177 container.style.transformOrigin = -rect[0] + 'px ' + -rect[1] + 'px';
14178 if (!ignoreBorder && data.borderStyle.width > 0) {
14179 container.style.borderWidth = data.borderStyle.width + 'px';
14180 if (data.borderStyle.style !== _util.AnnotationBorderStyleType.UNDERLINE) {
14181 width = width - 2 * data.borderStyle.width;
14182 height = height - 2 * data.borderStyle.width;
14183 }
14184 var horizontalRadius = data.borderStyle.horizontalCornerRadius;
14185 var verticalRadius = data.borderStyle.verticalCornerRadius;
14186 if (horizontalRadius > 0 || verticalRadius > 0) {
14187 var radius = horizontalRadius + 'px / ' + verticalRadius + 'px';
14188 container.style.borderRadius = radius;
14189 }
14190 switch (data.borderStyle.style) {
14191 case _util.AnnotationBorderStyleType.SOLID:
14192 container.style.borderStyle = 'solid';
14193 break;
14194 case _util.AnnotationBorderStyleType.DASHED:
14195 container.style.borderStyle = 'dashed';
14196 break;
14197 case _util.AnnotationBorderStyleType.BEVELED:
14198 (0, _util.warn)('Unimplemented border style: beveled');
14199 break;
14200 case _util.AnnotationBorderStyleType.INSET:
14201 (0, _util.warn)('Unimplemented border style: inset');
14202 break;
14203 case _util.AnnotationBorderStyleType.UNDERLINE:
14204 container.style.borderBottomStyle = 'solid';
14205 break;
14206 default:
14207 break;
14208 }
14209 if (data.color) {
14210 container.style.borderColor = _util.Util.makeCssRgb(data.color[0] | 0, data.color[1] | 0, data.color[2] | 0);
14211 } else {
14212 container.style.borderWidth = 0;
14213 }
14214 }
14215 container.style.left = rect[0] + 'px';
14216 container.style.top = rect[1] + 'px';
14217 container.style.width = width + 'px';
14218 container.style.height = height + 'px';
14219 return container;
14220 }
14221 }, {
14222 key: '_createPopup',
14223 value: function _createPopup(container, trigger, data) {
14224 if (!trigger) {
14225 trigger = document.createElement('div');
14226 trigger.style.height = container.style.height;
14227 trigger.style.width = container.style.width;
14228 container.appendChild(trigger);
14229 }
14230 var popupElement = new PopupElement({
14231 container: container,
14232 trigger: trigger,
14233 color: data.color,
14234 title: data.title,
14235 contents: data.contents,
14236 hideWrapper: true
14237 });
14238 var popup = popupElement.render();
14239 popup.style.left = container.style.width;
14240 container.appendChild(popup);
14241 }
14242 }, {
14243 key: 'render',
14244 value: function render() {
14245 (0, _util.unreachable)('Abstract method `AnnotationElement.render` called');
14246 }
14247 }]);
14248
14249 return AnnotationElement;
14250}();
14251
14252var LinkAnnotationElement = function (_AnnotationElement) {
14253 _inherits(LinkAnnotationElement, _AnnotationElement);
14254
14255 function LinkAnnotationElement(parameters) {
14256 _classCallCheck(this, LinkAnnotationElement);
14257
14258 var isRenderable = !!(parameters.data.url || parameters.data.dest || parameters.data.action);
14259 return _possibleConstructorReturn(this, (LinkAnnotationElement.__proto__ || Object.getPrototypeOf(LinkAnnotationElement)).call(this, parameters, isRenderable));
14260 }
14261
14262 _createClass(LinkAnnotationElement, [{
14263 key: 'render',
14264 value: function render() {
14265 this.container.className = 'linkAnnotation';
14266 var data = this.data,
14267 linkService = this.linkService;
14268
14269 var link = document.createElement('a');
14270 (0, _dom_utils.addLinkAttributes)(link, {
14271 url: data.url,
14272 target: data.newWindow ? _dom_utils.LinkTarget.BLANK : linkService.externalLinkTarget,
14273 rel: linkService.externalLinkRel
14274 });
14275 if (!data.url) {
14276 if (data.action) {
14277 this._bindNamedAction(link, data.action);
14278 } else {
14279 this._bindLink(link, data.dest);
14280 }
14281 }
14282 this.container.appendChild(link);
14283 return this.container;
14284 }
14285 }, {
14286 key: '_bindLink',
14287 value: function _bindLink(link, destination) {
14288 var _this2 = this;
14289
14290 link.href = this.linkService.getDestinationHash(destination);
14291 link.onclick = function () {
14292 if (destination) {
14293 _this2.linkService.navigateTo(destination);
14294 }
14295 return false;
14296 };
14297 if (destination) {
14298 link.className = 'internalLink';
14299 }
14300 }
14301 }, {
14302 key: '_bindNamedAction',
14303 value: function _bindNamedAction(link, action) {
14304 var _this3 = this;
14305
14306 link.href = this.linkService.getAnchorUrl('');
14307 link.onclick = function () {
14308 _this3.linkService.executeNamedAction(action);
14309 return false;
14310 };
14311 link.className = 'internalLink';
14312 }
14313 }]);
14314
14315 return LinkAnnotationElement;
14316}(AnnotationElement);
14317
14318var TextAnnotationElement = function (_AnnotationElement2) {
14319 _inherits(TextAnnotationElement, _AnnotationElement2);
14320
14321 function TextAnnotationElement(parameters) {
14322 _classCallCheck(this, TextAnnotationElement);
14323
14324 var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
14325 return _possibleConstructorReturn(this, (TextAnnotationElement.__proto__ || Object.getPrototypeOf(TextAnnotationElement)).call(this, parameters, isRenderable));
14326 }
14327
14328 _createClass(TextAnnotationElement, [{
14329 key: 'render',
14330 value: function render() {
14331 this.container.className = 'textAnnotation';
14332 var image = document.createElement('img');
14333 image.style.height = this.container.style.height;
14334 image.style.width = this.container.style.width;
14335 image.src = this.imageResourcesPath + 'annotation-' + this.data.name.toLowerCase() + '.svg';
14336 image.alt = '[{{type}} Annotation]';
14337 image.dataset.l10nId = 'text_annotation_type';
14338 image.dataset.l10nArgs = JSON.stringify({ type: this.data.name });
14339 if (!this.data.hasPopup) {
14340 this._createPopup(this.container, image, this.data);
14341 }
14342 this.container.appendChild(image);
14343 return this.container;
14344 }
14345 }]);
14346
14347 return TextAnnotationElement;
14348}(AnnotationElement);
14349
14350var WidgetAnnotationElement = function (_AnnotationElement3) {
14351 _inherits(WidgetAnnotationElement, _AnnotationElement3);
14352
14353 function WidgetAnnotationElement() {
14354 _classCallCheck(this, WidgetAnnotationElement);
14355
14356 return _possibleConstructorReturn(this, (WidgetAnnotationElement.__proto__ || Object.getPrototypeOf(WidgetAnnotationElement)).apply(this, arguments));
14357 }
14358
14359 _createClass(WidgetAnnotationElement, [{
14360 key: 'render',
14361 value: function render() {
14362 return this.container;
14363 }
14364 }]);
14365
14366 return WidgetAnnotationElement;
14367}(AnnotationElement);
14368
14369var TextWidgetAnnotationElement = function (_WidgetAnnotationElem) {
14370 _inherits(TextWidgetAnnotationElement, _WidgetAnnotationElem);
14371
14372 function TextWidgetAnnotationElement(parameters) {
14373 _classCallCheck(this, TextWidgetAnnotationElement);
14374
14375 var isRenderable = parameters.renderInteractiveForms || !parameters.data.hasAppearance && !!parameters.data.fieldValue;
14376 return _possibleConstructorReturn(this, (TextWidgetAnnotationElement.__proto__ || Object.getPrototypeOf(TextWidgetAnnotationElement)).call(this, parameters, isRenderable));
14377 }
14378
14379 _createClass(TextWidgetAnnotationElement, [{
14380 key: 'render',
14381 value: function render() {
14382 var TEXT_ALIGNMENT = ['left', 'center', 'right'];
14383 this.container.className = 'textWidgetAnnotation';
14384 var element = null;
14385 if (this.renderInteractiveForms) {
14386 if (this.data.multiLine) {
14387 element = document.createElement('textarea');
14388 element.textContent = this.data.fieldValue;
14389 } else {
14390 element = document.createElement('input');
14391 element.type = 'text';
14392 element.setAttribute('value', this.data.fieldValue);
14393 }
14394 element.disabled = this.data.readOnly;
14395 if (this.data.maxLen !== null) {
14396 element.maxLength = this.data.maxLen;
14397 }
14398 if (this.data.comb) {
14399 var fieldWidth = this.data.rect[2] - this.data.rect[0];
14400 var combWidth = fieldWidth / this.data.maxLen;
14401 element.classList.add('comb');
14402 element.style.letterSpacing = 'calc(' + combWidth + 'px - 1ch)';
14403 }
14404 } else {
14405 element = document.createElement('div');
14406 element.textContent = this.data.fieldValue;
14407 element.style.verticalAlign = 'middle';
14408 element.style.display = 'table-cell';
14409 var font = null;
14410 if (this.data.fontRefName) {
14411 font = this.page.commonObjs.getData(this.data.fontRefName);
14412 }
14413 this._setTextStyle(element, font);
14414 }
14415 if (this.data.textAlignment !== null) {
14416 element.style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment];
14417 }
14418 this.container.appendChild(element);
14419 return this.container;
14420 }
14421 }, {
14422 key: '_setTextStyle',
14423 value: function _setTextStyle(element, font) {
14424 var style = element.style;
14425 style.fontSize = this.data.fontSize + 'px';
14426 style.direction = this.data.fontDirection < 0 ? 'rtl' : 'ltr';
14427 if (!font) {
14428 return;
14429 }
14430 style.fontWeight = font.black ? font.bold ? '900' : 'bold' : font.bold ? 'bold' : 'normal';
14431 style.fontStyle = font.italic ? 'italic' : 'normal';
14432 var fontFamily = font.loadedName ? '"' + font.loadedName + '", ' : '';
14433 var fallbackName = font.fallbackName || 'Helvetica, sans-serif';
14434 style.fontFamily = fontFamily + fallbackName;
14435 }
14436 }]);
14437
14438 return TextWidgetAnnotationElement;
14439}(WidgetAnnotationElement);
14440
14441var CheckboxWidgetAnnotationElement = function (_WidgetAnnotationElem2) {
14442 _inherits(CheckboxWidgetAnnotationElement, _WidgetAnnotationElem2);
14443
14444 function CheckboxWidgetAnnotationElement(parameters) {
14445 _classCallCheck(this, CheckboxWidgetAnnotationElement);
14446
14447 return _possibleConstructorReturn(this, (CheckboxWidgetAnnotationElement.__proto__ || Object.getPrototypeOf(CheckboxWidgetAnnotationElement)).call(this, parameters, parameters.renderInteractiveForms));
14448 }
14449
14450 _createClass(CheckboxWidgetAnnotationElement, [{
14451 key: 'render',
14452 value: function render() {
14453 this.container.className = 'buttonWidgetAnnotation checkBox';
14454 var element = document.createElement('input');
14455 element.disabled = this.data.readOnly;
14456 element.type = 'checkbox';
14457 if (this.data.fieldValue && this.data.fieldValue !== 'Off') {
14458 element.setAttribute('checked', true);
14459 }
14460 this.container.appendChild(element);
14461 return this.container;
14462 }
14463 }]);
14464
14465 return CheckboxWidgetAnnotationElement;
14466}(WidgetAnnotationElement);
14467
14468var RadioButtonWidgetAnnotationElement = function (_WidgetAnnotationElem3) {
14469 _inherits(RadioButtonWidgetAnnotationElement, _WidgetAnnotationElem3);
14470
14471 function RadioButtonWidgetAnnotationElement(parameters) {
14472 _classCallCheck(this, RadioButtonWidgetAnnotationElement);
14473
14474 return _possibleConstructorReturn(this, (RadioButtonWidgetAnnotationElement.__proto__ || Object.getPrototypeOf(RadioButtonWidgetAnnotationElement)).call(this, parameters, parameters.renderInteractiveForms));
14475 }
14476
14477 _createClass(RadioButtonWidgetAnnotationElement, [{
14478 key: 'render',
14479 value: function render() {
14480 this.container.className = 'buttonWidgetAnnotation radioButton';
14481 var element = document.createElement('input');
14482 element.disabled = this.data.readOnly;
14483 element.type = 'radio';
14484 element.name = this.data.fieldName;
14485 if (this.data.fieldValue === this.data.buttonValue) {
14486 element.setAttribute('checked', true);
14487 }
14488 this.container.appendChild(element);
14489 return this.container;
14490 }
14491 }]);
14492
14493 return RadioButtonWidgetAnnotationElement;
14494}(WidgetAnnotationElement);
14495
14496var PushButtonWidgetAnnotationElement = function (_LinkAnnotationElemen) {
14497 _inherits(PushButtonWidgetAnnotationElement, _LinkAnnotationElemen);
14498
14499 function PushButtonWidgetAnnotationElement() {
14500 _classCallCheck(this, PushButtonWidgetAnnotationElement);
14501
14502 return _possibleConstructorReturn(this, (PushButtonWidgetAnnotationElement.__proto__ || Object.getPrototypeOf(PushButtonWidgetAnnotationElement)).apply(this, arguments));
14503 }
14504
14505 _createClass(PushButtonWidgetAnnotationElement, [{
14506 key: 'render',
14507 value: function render() {
14508 var container = _get(PushButtonWidgetAnnotationElement.prototype.__proto__ || Object.getPrototypeOf(PushButtonWidgetAnnotationElement.prototype), 'render', this).call(this);
14509 container.className = 'buttonWidgetAnnotation pushButton';
14510 return container;
14511 }
14512 }]);
14513
14514 return PushButtonWidgetAnnotationElement;
14515}(LinkAnnotationElement);
14516
14517var ChoiceWidgetAnnotationElement = function (_WidgetAnnotationElem4) {
14518 _inherits(ChoiceWidgetAnnotationElement, _WidgetAnnotationElem4);
14519
14520 function ChoiceWidgetAnnotationElement(parameters) {
14521 _classCallCheck(this, ChoiceWidgetAnnotationElement);
14522
14523 return _possibleConstructorReturn(this, (ChoiceWidgetAnnotationElement.__proto__ || Object.getPrototypeOf(ChoiceWidgetAnnotationElement)).call(this, parameters, parameters.renderInteractiveForms));
14524 }
14525
14526 _createClass(ChoiceWidgetAnnotationElement, [{
14527 key: 'render',
14528 value: function render() {
14529 this.container.className = 'choiceWidgetAnnotation';
14530 var selectElement = document.createElement('select');
14531 selectElement.disabled = this.data.readOnly;
14532 if (!this.data.combo) {
14533 selectElement.size = this.data.options.length;
14534 if (this.data.multiSelect) {
14535 selectElement.multiple = true;
14536 }
14537 }
14538 for (var i = 0, ii = this.data.options.length; i < ii; i++) {
14539 var option = this.data.options[i];
14540 var optionElement = document.createElement('option');
14541 optionElement.textContent = option.displayValue;
14542 optionElement.value = option.exportValue;
14543 if (this.data.fieldValue.includes(option.displayValue)) {
14544 optionElement.setAttribute('selected', true);
14545 }
14546 selectElement.appendChild(optionElement);
14547 }
14548 this.container.appendChild(selectElement);
14549 return this.container;
14550 }
14551 }]);
14552
14553 return ChoiceWidgetAnnotationElement;
14554}(WidgetAnnotationElement);
14555
14556var PopupAnnotationElement = function (_AnnotationElement4) {
14557 _inherits(PopupAnnotationElement, _AnnotationElement4);
14558
14559 function PopupAnnotationElement(parameters) {
14560 _classCallCheck(this, PopupAnnotationElement);
14561
14562 var isRenderable = !!(parameters.data.title || parameters.data.contents);
14563 return _possibleConstructorReturn(this, (PopupAnnotationElement.__proto__ || Object.getPrototypeOf(PopupAnnotationElement)).call(this, parameters, isRenderable));
14564 }
14565
14566 _createClass(PopupAnnotationElement, [{
14567 key: 'render',
14568 value: function render() {
14569 var IGNORE_TYPES = ['Line', 'Square', 'Circle', 'PolyLine', 'Polygon'];
14570 this.container.className = 'popupAnnotation';
14571 if (IGNORE_TYPES.includes(this.data.parentType)) {
14572 return this.container;
14573 }
14574 var selector = '[data-annotation-id="' + this.data.parentId + '"]';
14575 var parentElement = this.layer.querySelector(selector);
14576 if (!parentElement) {
14577 return this.container;
14578 }
14579 var popup = new PopupElement({
14580 container: this.container,
14581 trigger: parentElement,
14582 color: this.data.color,
14583 title: this.data.title,
14584 contents: this.data.contents
14585 });
14586 var parentLeft = parseFloat(parentElement.style.left);
14587 var parentWidth = parseFloat(parentElement.style.width);
14588 this.container.style.transformOrigin = -(parentLeft + parentWidth) + 'px -' + parentElement.style.top;
14589 this.container.style.left = parentLeft + parentWidth + 'px';
14590 this.container.appendChild(popup.render());
14591 return this.container;
14592 }
14593 }]);
14594
14595 return PopupAnnotationElement;
14596}(AnnotationElement);
14597
14598var PopupElement = function () {
14599 function PopupElement(parameters) {
14600 _classCallCheck(this, PopupElement);
14601
14602 this.container = parameters.container;
14603 this.trigger = parameters.trigger;
14604 this.color = parameters.color;
14605 this.title = parameters.title;
14606 this.contents = parameters.contents;
14607 this.hideWrapper = parameters.hideWrapper || false;
14608 this.pinned = false;
14609 }
14610
14611 _createClass(PopupElement, [{
14612 key: 'render',
14613 value: function render() {
14614 var BACKGROUND_ENLIGHT = 0.7;
14615 var wrapper = document.createElement('div');
14616 wrapper.className = 'popupWrapper';
14617 this.hideElement = this.hideWrapper ? wrapper : this.container;
14618 this.hideElement.setAttribute('hidden', true);
14619 var popup = document.createElement('div');
14620 popup.className = 'popup';
14621 var color = this.color;
14622 if (color) {
14623 var r = BACKGROUND_ENLIGHT * (255 - color[0]) + color[0];
14624 var g = BACKGROUND_ENLIGHT * (255 - color[1]) + color[1];
14625 var b = BACKGROUND_ENLIGHT * (255 - color[2]) + color[2];
14626 popup.style.backgroundColor = _util.Util.makeCssRgb(r | 0, g | 0, b | 0);
14627 }
14628 var contents = this._formatContents(this.contents);
14629 var title = document.createElement('h1');
14630 title.textContent = this.title;
14631 this.trigger.addEventListener('click', this._toggle.bind(this));
14632 this.trigger.addEventListener('mouseover', this._show.bind(this, false));
14633 this.trigger.addEventListener('mouseout', this._hide.bind(this, false));
14634 popup.addEventListener('click', this._hide.bind(this, true));
14635 popup.appendChild(title);
14636 popup.appendChild(contents);
14637 wrapper.appendChild(popup);
14638 return wrapper;
14639 }
14640 }, {
14641 key: '_formatContents',
14642 value: function _formatContents(contents) {
14643 var p = document.createElement('p');
14644 var lines = contents.split(/(?:\r\n?|\n)/);
14645 for (var i = 0, ii = lines.length; i < ii; ++i) {
14646 var line = lines[i];
14647 p.appendChild(document.createTextNode(line));
14648 if (i < ii - 1) {
14649 p.appendChild(document.createElement('br'));
14650 }
14651 }
14652 return p;
14653 }
14654 }, {
14655 key: '_toggle',
14656 value: function _toggle() {
14657 if (this.pinned) {
14658 this._hide(true);
14659 } else {
14660 this._show(true);
14661 }
14662 }
14663 }, {
14664 key: '_show',
14665 value: function _show() {
14666 var pin = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
14667
14668 if (pin) {
14669 this.pinned = true;
14670 }
14671 if (this.hideElement.hasAttribute('hidden')) {
14672 this.hideElement.removeAttribute('hidden');
14673 this.container.style.zIndex += 1;
14674 }
14675 }
14676 }, {
14677 key: '_hide',
14678 value: function _hide() {
14679 var unpin = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
14680
14681 if (unpin) {
14682 this.pinned = false;
14683 }
14684 if (!this.hideElement.hasAttribute('hidden') && !this.pinned) {
14685 this.hideElement.setAttribute('hidden', true);
14686 this.container.style.zIndex -= 1;
14687 }
14688 }
14689 }]);
14690
14691 return PopupElement;
14692}();
14693
14694var LineAnnotationElement = function (_AnnotationElement5) {
14695 _inherits(LineAnnotationElement, _AnnotationElement5);
14696
14697 function LineAnnotationElement(parameters) {
14698 _classCallCheck(this, LineAnnotationElement);
14699
14700 var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
14701 return _possibleConstructorReturn(this, (LineAnnotationElement.__proto__ || Object.getPrototypeOf(LineAnnotationElement)).call(this, parameters, isRenderable, true));
14702 }
14703
14704 _createClass(LineAnnotationElement, [{
14705 key: 'render',
14706 value: function render() {
14707 this.container.className = 'lineAnnotation';
14708 var data = this.data;
14709 var width = data.rect[2] - data.rect[0];
14710 var height = data.rect[3] - data.rect[1];
14711 var svg = this.svgFactory.create(width, height);
14712 var line = this.svgFactory.createElement('svg:line');
14713 line.setAttribute('x1', data.rect[2] - data.lineCoordinates[0]);
14714 line.setAttribute('y1', data.rect[3] - data.lineCoordinates[1]);
14715 line.setAttribute('x2', data.rect[2] - data.lineCoordinates[2]);
14716 line.setAttribute('y2', data.rect[3] - data.lineCoordinates[3]);
14717 line.setAttribute('stroke-width', data.borderStyle.width);
14718 line.setAttribute('stroke', 'transparent');
14719 svg.appendChild(line);
14720 this.container.append(svg);
14721 this._createPopup(this.container, line, data);
14722 return this.container;
14723 }
14724 }]);
14725
14726 return LineAnnotationElement;
14727}(AnnotationElement);
14728
14729var SquareAnnotationElement = function (_AnnotationElement6) {
14730 _inherits(SquareAnnotationElement, _AnnotationElement6);
14731
14732 function SquareAnnotationElement(parameters) {
14733 _classCallCheck(this, SquareAnnotationElement);
14734
14735 var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
14736 return _possibleConstructorReturn(this, (SquareAnnotationElement.__proto__ || Object.getPrototypeOf(SquareAnnotationElement)).call(this, parameters, isRenderable, true));
14737 }
14738
14739 _createClass(SquareAnnotationElement, [{
14740 key: 'render',
14741 value: function render() {
14742 this.container.className = 'squareAnnotation';
14743 var data = this.data;
14744 var width = data.rect[2] - data.rect[0];
14745 var height = data.rect[3] - data.rect[1];
14746 var svg = this.svgFactory.create(width, height);
14747 var borderWidth = data.borderStyle.width;
14748 var square = this.svgFactory.createElement('svg:rect');
14749 square.setAttribute('x', borderWidth / 2);
14750 square.setAttribute('y', borderWidth / 2);
14751 square.setAttribute('width', width - borderWidth);
14752 square.setAttribute('height', height - borderWidth);
14753 square.setAttribute('stroke-width', borderWidth);
14754 square.setAttribute('stroke', 'transparent');
14755 square.setAttribute('fill', 'none');
14756 svg.appendChild(square);
14757 this.container.append(svg);
14758 this._createPopup(this.container, square, data);
14759 return this.container;
14760 }
14761 }]);
14762
14763 return SquareAnnotationElement;
14764}(AnnotationElement);
14765
14766var CircleAnnotationElement = function (_AnnotationElement7) {
14767 _inherits(CircleAnnotationElement, _AnnotationElement7);
14768
14769 function CircleAnnotationElement(parameters) {
14770 _classCallCheck(this, CircleAnnotationElement);
14771
14772 var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
14773 return _possibleConstructorReturn(this, (CircleAnnotationElement.__proto__ || Object.getPrototypeOf(CircleAnnotationElement)).call(this, parameters, isRenderable, true));
14774 }
14775
14776 _createClass(CircleAnnotationElement, [{
14777 key: 'render',
14778 value: function render() {
14779 this.container.className = 'circleAnnotation';
14780 var data = this.data;
14781 var width = data.rect[2] - data.rect[0];
14782 var height = data.rect[3] - data.rect[1];
14783 var svg = this.svgFactory.create(width, height);
14784 var borderWidth = data.borderStyle.width;
14785 var circle = this.svgFactory.createElement('svg:ellipse');
14786 circle.setAttribute('cx', width / 2);
14787 circle.setAttribute('cy', height / 2);
14788 circle.setAttribute('rx', width / 2 - borderWidth / 2);
14789 circle.setAttribute('ry', height / 2 - borderWidth / 2);
14790 circle.setAttribute('stroke-width', borderWidth);
14791 circle.setAttribute('stroke', 'transparent');
14792 circle.setAttribute('fill', 'none');
14793 svg.appendChild(circle);
14794 this.container.append(svg);
14795 this._createPopup(this.container, circle, data);
14796 return this.container;
14797 }
14798 }]);
14799
14800 return CircleAnnotationElement;
14801}(AnnotationElement);
14802
14803var PolylineAnnotationElement = function (_AnnotationElement8) {
14804 _inherits(PolylineAnnotationElement, _AnnotationElement8);
14805
14806 function PolylineAnnotationElement(parameters) {
14807 _classCallCheck(this, PolylineAnnotationElement);
14808
14809 var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
14810
14811 var _this15 = _possibleConstructorReturn(this, (PolylineAnnotationElement.__proto__ || Object.getPrototypeOf(PolylineAnnotationElement)).call(this, parameters, isRenderable, true));
14812
14813 _this15.containerClassName = 'polylineAnnotation';
14814 _this15.svgElementName = 'svg:polyline';
14815 return _this15;
14816 }
14817
14818 _createClass(PolylineAnnotationElement, [{
14819 key: 'render',
14820 value: function render() {
14821 this.container.className = this.containerClassName;
14822 var data = this.data;
14823 var width = data.rect[2] - data.rect[0];
14824 var height = data.rect[3] - data.rect[1];
14825 var svg = this.svgFactory.create(width, height);
14826 var vertices = data.vertices;
14827 var points = [];
14828 for (var i = 0, ii = vertices.length; i < ii; i++) {
14829 var x = vertices[i].x - data.rect[0];
14830 var y = data.rect[3] - vertices[i].y;
14831 points.push(x + ',' + y);
14832 }
14833 points = points.join(' ');
14834 var borderWidth = data.borderStyle.width;
14835 var polyline = this.svgFactory.createElement(this.svgElementName);
14836 polyline.setAttribute('points', points);
14837 polyline.setAttribute('stroke-width', borderWidth);
14838 polyline.setAttribute('stroke', 'transparent');
14839 polyline.setAttribute('fill', 'none');
14840 svg.appendChild(polyline);
14841 this.container.append(svg);
14842 this._createPopup(this.container, polyline, data);
14843 return this.container;
14844 }
14845 }]);
14846
14847 return PolylineAnnotationElement;
14848}(AnnotationElement);
14849
14850var PolygonAnnotationElement = function (_PolylineAnnotationEl) {
14851 _inherits(PolygonAnnotationElement, _PolylineAnnotationEl);
14852
14853 function PolygonAnnotationElement(parameters) {
14854 _classCallCheck(this, PolygonAnnotationElement);
14855
14856 var _this16 = _possibleConstructorReturn(this, (PolygonAnnotationElement.__proto__ || Object.getPrototypeOf(PolygonAnnotationElement)).call(this, parameters));
14857
14858 _this16.containerClassName = 'polygonAnnotation';
14859 _this16.svgElementName = 'svg:polygon';
14860 return _this16;
14861 }
14862
14863 return PolygonAnnotationElement;
14864}(PolylineAnnotationElement);
14865
14866var HighlightAnnotationElement = function (_AnnotationElement9) {
14867 _inherits(HighlightAnnotationElement, _AnnotationElement9);
14868
14869 function HighlightAnnotationElement(parameters) {
14870 _classCallCheck(this, HighlightAnnotationElement);
14871
14872 var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
14873 return _possibleConstructorReturn(this, (HighlightAnnotationElement.__proto__ || Object.getPrototypeOf(HighlightAnnotationElement)).call(this, parameters, isRenderable, true));
14874 }
14875
14876 _createClass(HighlightAnnotationElement, [{
14877 key: 'render',
14878 value: function render() {
14879 this.container.className = 'highlightAnnotation';
14880 if (!this.data.hasPopup) {
14881 this._createPopup(this.container, null, this.data);
14882 }
14883 return this.container;
14884 }
14885 }]);
14886
14887 return HighlightAnnotationElement;
14888}(AnnotationElement);
14889
14890var UnderlineAnnotationElement = function (_AnnotationElement10) {
14891 _inherits(UnderlineAnnotationElement, _AnnotationElement10);
14892
14893 function UnderlineAnnotationElement(parameters) {
14894 _classCallCheck(this, UnderlineAnnotationElement);
14895
14896 var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
14897 return _possibleConstructorReturn(this, (UnderlineAnnotationElement.__proto__ || Object.getPrototypeOf(UnderlineAnnotationElement)).call(this, parameters, isRenderable, true));
14898 }
14899
14900 _createClass(UnderlineAnnotationElement, [{
14901 key: 'render',
14902 value: function render() {
14903 this.container.className = 'underlineAnnotation';
14904 if (!this.data.hasPopup) {
14905 this._createPopup(this.container, null, this.data);
14906 }
14907 return this.container;
14908 }
14909 }]);
14910
14911 return UnderlineAnnotationElement;
14912}(AnnotationElement);
14913
14914var SquigglyAnnotationElement = function (_AnnotationElement11) {
14915 _inherits(SquigglyAnnotationElement, _AnnotationElement11);
14916
14917 function SquigglyAnnotationElement(parameters) {
14918 _classCallCheck(this, SquigglyAnnotationElement);
14919
14920 var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
14921 return _possibleConstructorReturn(this, (SquigglyAnnotationElement.__proto__ || Object.getPrototypeOf(SquigglyAnnotationElement)).call(this, parameters, isRenderable, true));
14922 }
14923
14924 _createClass(SquigglyAnnotationElement, [{
14925 key: 'render',
14926 value: function render() {
14927 this.container.className = 'squigglyAnnotation';
14928 if (!this.data.hasPopup) {
14929 this._createPopup(this.container, null, this.data);
14930 }
14931 return this.container;
14932 }
14933 }]);
14934
14935 return SquigglyAnnotationElement;
14936}(AnnotationElement);
14937
14938var StrikeOutAnnotationElement = function (_AnnotationElement12) {
14939 _inherits(StrikeOutAnnotationElement, _AnnotationElement12);
14940
14941 function StrikeOutAnnotationElement(parameters) {
14942 _classCallCheck(this, StrikeOutAnnotationElement);
14943
14944 var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
14945 return _possibleConstructorReturn(this, (StrikeOutAnnotationElement.__proto__ || Object.getPrototypeOf(StrikeOutAnnotationElement)).call(this, parameters, isRenderable, true));
14946 }
14947
14948 _createClass(StrikeOutAnnotationElement, [{
14949 key: 'render',
14950 value: function render() {
14951 this.container.className = 'strikeoutAnnotation';
14952 if (!this.data.hasPopup) {
14953 this._createPopup(this.container, null, this.data);
14954 }
14955 return this.container;
14956 }
14957 }]);
14958
14959 return StrikeOutAnnotationElement;
14960}(AnnotationElement);
14961
14962var StampAnnotationElement = function (_AnnotationElement13) {
14963 _inherits(StampAnnotationElement, _AnnotationElement13);
14964
14965 function StampAnnotationElement(parameters) {
14966 _classCallCheck(this, StampAnnotationElement);
14967
14968 var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents);
14969 return _possibleConstructorReturn(this, (StampAnnotationElement.__proto__ || Object.getPrototypeOf(StampAnnotationElement)).call(this, parameters, isRenderable, true));
14970 }
14971
14972 _createClass(StampAnnotationElement, [{
14973 key: 'render',
14974 value: function render() {
14975 this.container.className = 'stampAnnotation';
14976 if (!this.data.hasPopup) {
14977 this._createPopup(this.container, null, this.data);
14978 }
14979 return this.container;
14980 }
14981 }]);
14982
14983 return StampAnnotationElement;
14984}(AnnotationElement);
14985
14986var FileAttachmentAnnotationElement = function (_AnnotationElement14) {
14987 _inherits(FileAttachmentAnnotationElement, _AnnotationElement14);
14988
14989 function FileAttachmentAnnotationElement(parameters) {
14990 _classCallCheck(this, FileAttachmentAnnotationElement);
14991
14992 var _this22 = _possibleConstructorReturn(this, (FileAttachmentAnnotationElement.__proto__ || Object.getPrototypeOf(FileAttachmentAnnotationElement)).call(this, parameters, true));
14993
14994 var file = _this22.data.file;
14995 _this22.filename = (0, _dom_utils.getFilenameFromUrl)(file.filename);
14996 _this22.content = file.content;
14997 _this22.linkService.onFileAttachmentAnnotation({
14998 id: (0, _util.stringToPDFString)(file.filename),
14999 filename: file.filename,
15000 content: file.content
15001 });
15002 return _this22;
15003 }
15004
15005 _createClass(FileAttachmentAnnotationElement, [{
15006 key: 'render',
15007 value: function render() {
15008 this.container.className = 'fileAttachmentAnnotation';
15009 var trigger = document.createElement('div');
15010 trigger.style.height = this.container.style.height;
15011 trigger.style.width = this.container.style.width;
15012 trigger.addEventListener('dblclick', this._download.bind(this));
15013 if (!this.data.hasPopup && (this.data.title || this.data.contents)) {
15014 this._createPopup(this.container, trigger, this.data);
15015 }
15016 this.container.appendChild(trigger);
15017 return this.container;
15018 }
15019 }, {
15020 key: '_download',
15021 value: function _download() {
15022 if (!this.downloadManager) {
15023 (0, _util.warn)('Download cannot be started due to unavailable download manager');
15024 return;
15025 }
15026 this.downloadManager.downloadData(this.content, this.filename, '');
15027 }
15028 }]);
15029
15030 return FileAttachmentAnnotationElement;
15031}(AnnotationElement);
15032
15033var AnnotationLayer = function () {
15034 function AnnotationLayer() {
15035 _classCallCheck(this, AnnotationLayer);
15036 }
15037
15038 _createClass(AnnotationLayer, null, [{
15039 key: 'render',
15040 value: function render(parameters) {
15041 for (var i = 0, ii = parameters.annotations.length; i < ii; i++) {
15042 var data = parameters.annotations[i];
15043 if (!data) {
15044 continue;
15045 }
15046 var element = AnnotationElementFactory.create({
15047 data: data,
15048 layer: parameters.div,
15049 page: parameters.page,
15050 viewport: parameters.viewport,
15051 linkService: parameters.linkService,
15052 downloadManager: parameters.downloadManager,
15053 imageResourcesPath: parameters.imageResourcesPath || '',
15054 renderInteractiveForms: parameters.renderInteractiveForms || false,
15055 svgFactory: new _dom_utils.DOMSVGFactory()
15056 });
15057 if (element.isRenderable) {
15058 parameters.div.appendChild(element.render());
15059 }
15060 }
15061 }
15062 }, {
15063 key: 'update',
15064 value: function update(parameters) {
15065 for (var i = 0, ii = parameters.annotations.length; i < ii; i++) {
15066 var data = parameters.annotations[i];
15067 var element = parameters.div.querySelector('[data-annotation-id="' + data.id + '"]');
15068 if (element) {
15069 element.style.transform = 'matrix(' + parameters.viewport.transform.join(',') + ')';
15070 }
15071 }
15072 parameters.div.removeAttribute('hidden');
15073 }
15074 }]);
15075
15076 return AnnotationLayer;
15077}();
15078
15079exports.AnnotationLayer = AnnotationLayer;
15080
15081/***/ }),
15082/* 127 */
15083/***/ (function(module, exports, __w_pdfjs_require__) {
15084
15085"use strict";
15086
15087
15088Object.defineProperty(exports, "__esModule", {
15089 value: true
15090});
15091exports.SVGGraphics = undefined;
15092
15093var _util = __w_pdfjs_require__(0);
15094
15095var _dom_utils = __w_pdfjs_require__(24);
15096
15097var _is_node = __w_pdfjs_require__(25);
15098
15099var _is_node2 = _interopRequireDefault(_is_node);
15100
15101function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15102
15103var SVGGraphics = function SVGGraphics() {
15104 throw new Error('Not implemented: SVGGraphics');
15105};
15106{
15107 var SVG_DEFAULTS = {
15108 fontStyle: 'normal',
15109 fontWeight: 'normal',
15110 fillColor: '#000000'
15111 };
15112 var convertImgDataToPng = function convertImgDataToPngClosure() {
15113 var PNG_HEADER = new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]);
15114 var CHUNK_WRAPPER_SIZE = 12;
15115 var crcTable = new Int32Array(256);
15116 for (var i = 0; i < 256; i++) {
15117 var c = i;
15118 for (var h = 0; h < 8; h++) {
15119 if (c & 1) {
15120 c = 0xedB88320 ^ c >> 1 & 0x7fffffff;
15121 } else {
15122 c = c >> 1 & 0x7fffffff;
15123 }
15124 }
15125 crcTable[i] = c;
15126 }
15127 function crc32(data, start, end) {
15128 var crc = -1;
15129 for (var i = start; i < end; i++) {
15130 var a = (crc ^ data[i]) & 0xff;
15131 var b = crcTable[a];
15132 crc = crc >>> 8 ^ b;
15133 }
15134 return crc ^ -1;
15135 }
15136 function writePngChunk(type, body, data, offset) {
15137 var p = offset;
15138 var len = body.length;
15139 data[p] = len >> 24 & 0xff;
15140 data[p + 1] = len >> 16 & 0xff;
15141 data[p + 2] = len >> 8 & 0xff;
15142 data[p + 3] = len & 0xff;
15143 p += 4;
15144 data[p] = type.charCodeAt(0) & 0xff;
15145 data[p + 1] = type.charCodeAt(1) & 0xff;
15146 data[p + 2] = type.charCodeAt(2) & 0xff;
15147 data[p + 3] = type.charCodeAt(3) & 0xff;
15148 p += 4;
15149 data.set(body, p);
15150 p += body.length;
15151 var crc = crc32(data, offset + 4, p);
15152 data[p] = crc >> 24 & 0xff;
15153 data[p + 1] = crc >> 16 & 0xff;
15154 data[p + 2] = crc >> 8 & 0xff;
15155 data[p + 3] = crc & 0xff;
15156 }
15157 function adler32(data, start, end) {
15158 var a = 1;
15159 var b = 0;
15160 for (var i = start; i < end; ++i) {
15161 a = (a + (data[i] & 0xff)) % 65521;
15162 b = (b + a) % 65521;
15163 }
15164 return b << 16 | a;
15165 }
15166 function deflateSync(literals) {
15167 if (!(0, _is_node2.default)()) {
15168 return deflateSyncUncompressed(literals);
15169 }
15170 try {
15171 var input;
15172 if (parseInt(process.versions.node) >= 8) {
15173 input = literals;
15174 } else {
15175 input = new Buffer(literals);
15176 }
15177 var output = require('zlib').deflateSync(input, { level: 9 });
15178 return output instanceof Uint8Array ? output : new Uint8Array(output);
15179 } catch (e) {
15180 (0, _util.warn)('Not compressing PNG because zlib.deflateSync is unavailable: ' + e);
15181 }
15182 return deflateSyncUncompressed(literals);
15183 }
15184 function deflateSyncUncompressed(literals) {
15185 var len = literals.length;
15186 var maxBlockLength = 0xFFFF;
15187 var deflateBlocks = Math.ceil(len / maxBlockLength);
15188 var idat = new Uint8Array(2 + len + deflateBlocks * 5 + 4);
15189 var pi = 0;
15190 idat[pi++] = 0x78;
15191 idat[pi++] = 0x9c;
15192 var pos = 0;
15193 while (len > maxBlockLength) {
15194 idat[pi++] = 0x00;
15195 idat[pi++] = 0xff;
15196 idat[pi++] = 0xff;
15197 idat[pi++] = 0x00;
15198 idat[pi++] = 0x00;
15199 idat.set(literals.subarray(pos, pos + maxBlockLength), pi);
15200 pi += maxBlockLength;
15201 pos += maxBlockLength;
15202 len -= maxBlockLength;
15203 }
15204 idat[pi++] = 0x01;
15205 idat[pi++] = len & 0xff;
15206 idat[pi++] = len >> 8 & 0xff;
15207 idat[pi++] = ~len & 0xffff & 0xff;
15208 idat[pi++] = (~len & 0xffff) >> 8 & 0xff;
15209 idat.set(literals.subarray(pos), pi);
15210 pi += literals.length - pos;
15211 var adler = adler32(literals, 0, literals.length);
15212 idat[pi++] = adler >> 24 & 0xff;
15213 idat[pi++] = adler >> 16 & 0xff;
15214 idat[pi++] = adler >> 8 & 0xff;
15215 idat[pi++] = adler & 0xff;
15216 return idat;
15217 }
15218 function encode(imgData, kind, forceDataSchema, isMask) {
15219 var width = imgData.width;
15220 var height = imgData.height;
15221 var bitDepth, colorType, lineSize;
15222 var bytes = imgData.data;
15223 switch (kind) {
15224 case _util.ImageKind.GRAYSCALE_1BPP:
15225 colorType = 0;
15226 bitDepth = 1;
15227 lineSize = width + 7 >> 3;
15228 break;
15229 case _util.ImageKind.RGB_24BPP:
15230 colorType = 2;
15231 bitDepth = 8;
15232 lineSize = width * 3;
15233 break;
15234 case _util.ImageKind.RGBA_32BPP:
15235 colorType = 6;
15236 bitDepth = 8;
15237 lineSize = width * 4;
15238 break;
15239 default:
15240 throw new Error('invalid format');
15241 }
15242 var literals = new Uint8Array((1 + lineSize) * height);
15243 var offsetLiterals = 0,
15244 offsetBytes = 0;
15245 var y, i;
15246 for (y = 0; y < height; ++y) {
15247 literals[offsetLiterals++] = 0;
15248 literals.set(bytes.subarray(offsetBytes, offsetBytes + lineSize), offsetLiterals);
15249 offsetBytes += lineSize;
15250 offsetLiterals += lineSize;
15251 }
15252 if (kind === _util.ImageKind.GRAYSCALE_1BPP && isMask) {
15253 offsetLiterals = 0;
15254 for (y = 0; y < height; y++) {
15255 offsetLiterals++;
15256 for (i = 0; i < lineSize; i++) {
15257 literals[offsetLiterals++] ^= 0xFF;
15258 }
15259 }
15260 }
15261 var ihdr = new Uint8Array([width >> 24 & 0xff, width >> 16 & 0xff, width >> 8 & 0xff, width & 0xff, height >> 24 & 0xff, height >> 16 & 0xff, height >> 8 & 0xff, height & 0xff, bitDepth, colorType, 0x00, 0x00, 0x00]);
15262 var idat = deflateSync(literals);
15263 var pngLength = PNG_HEADER.length + CHUNK_WRAPPER_SIZE * 3 + ihdr.length + idat.length;
15264 var data = new Uint8Array(pngLength);
15265 var offset = 0;
15266 data.set(PNG_HEADER, offset);
15267 offset += PNG_HEADER.length;
15268 writePngChunk('IHDR', ihdr, data, offset);
15269 offset += CHUNK_WRAPPER_SIZE + ihdr.length;
15270 writePngChunk('IDATA', idat, data, offset);
15271 offset += CHUNK_WRAPPER_SIZE + idat.length;
15272 writePngChunk('IEND', new Uint8Array(0), data, offset);
15273 return (0, _util.createObjectURL)(data, 'image/png', forceDataSchema);
15274 }
15275 return function convertImgDataToPng(imgData, forceDataSchema, isMask) {
15276 var kind = imgData.kind === undefined ? _util.ImageKind.GRAYSCALE_1BPP : imgData.kind;
15277 return encode(imgData, kind, forceDataSchema, isMask);
15278 };
15279 }();
15280 var SVGExtraState = function SVGExtraStateClosure() {
15281 function SVGExtraState() {
15282 this.fontSizeScale = 1;
15283 this.fontWeight = SVG_DEFAULTS.fontWeight;
15284 this.fontSize = 0;
15285 this.textMatrix = _util.IDENTITY_MATRIX;
15286 this.fontMatrix = _util.FONT_IDENTITY_MATRIX;
15287 this.leading = 0;
15288 this.x = 0;
15289 this.y = 0;
15290 this.lineX = 0;
15291 this.lineY = 0;
15292 this.charSpacing = 0;
15293 this.wordSpacing = 0;
15294 this.textHScale = 1;
15295 this.textRise = 0;
15296 this.fillColor = SVG_DEFAULTS.fillColor;
15297 this.strokeColor = '#000000';
15298 this.fillAlpha = 1;
15299 this.strokeAlpha = 1;
15300 this.lineWidth = 1;
15301 this.lineJoin = '';
15302 this.lineCap = '';
15303 this.miterLimit = 0;
15304 this.dashArray = [];
15305 this.dashPhase = 0;
15306 this.dependencies = [];
15307 this.activeClipUrl = null;
15308 this.clipGroup = null;
15309 this.maskId = '';
15310 }
15311 SVGExtraState.prototype = {
15312 clone: function SVGExtraState_clone() {
15313 return Object.create(this);
15314 },
15315 setCurrentPoint: function SVGExtraState_setCurrentPoint(x, y) {
15316 this.x = x;
15317 this.y = y;
15318 }
15319 };
15320 return SVGExtraState;
15321 }();
15322 exports.SVGGraphics = SVGGraphics = function SVGGraphicsClosure() {
15323 function opListToTree(opList) {
15324 var opTree = [];
15325 var tmp = [];
15326 var opListLen = opList.length;
15327 for (var x = 0; x < opListLen; x++) {
15328 if (opList[x].fn === 'save') {
15329 opTree.push({
15330 'fnId': 92,
15331 'fn': 'group',
15332 'items': []
15333 });
15334 tmp.push(opTree);
15335 opTree = opTree[opTree.length - 1].items;
15336 continue;
15337 }
15338 if (opList[x].fn === 'restore') {
15339 opTree = tmp.pop();
15340 } else {
15341 opTree.push(opList[x]);
15342 }
15343 }
15344 return opTree;
15345 }
15346 function pf(value) {
15347 if (Number.isInteger(value)) {
15348 return value.toString();
15349 }
15350 var s = value.toFixed(10);
15351 var i = s.length - 1;
15352 if (s[i] !== '0') {
15353 return s;
15354 }
15355 do {
15356 i--;
15357 } while (s[i] === '0');
15358 return s.substr(0, s[i] === '.' ? i : i + 1);
15359 }
15360 function pm(m) {
15361 if (m[4] === 0 && m[5] === 0) {
15362 if (m[1] === 0 && m[2] === 0) {
15363 if (m[0] === 1 && m[3] === 1) {
15364 return '';
15365 }
15366 return 'scale(' + pf(m[0]) + ' ' + pf(m[3]) + ')';
15367 }
15368 if (m[0] === m[3] && m[1] === -m[2]) {
15369 var a = Math.acos(m[0]) * 180 / Math.PI;
15370 return 'rotate(' + pf(a) + ')';
15371 }
15372 } else {
15373 if (m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1) {
15374 return 'translate(' + pf(m[4]) + ' ' + pf(m[5]) + ')';
15375 }
15376 }
15377 return 'matrix(' + pf(m[0]) + ' ' + pf(m[1]) + ' ' + pf(m[2]) + ' ' + pf(m[3]) + ' ' + pf(m[4]) + ' ' + pf(m[5]) + ')';
15378 }
15379 function SVGGraphics(commonObjs, objs, forceDataSchema) {
15380 this.svgFactory = new _dom_utils.DOMSVGFactory();
15381 this.current = new SVGExtraState();
15382 this.transformMatrix = _util.IDENTITY_MATRIX;
15383 this.transformStack = [];
15384 this.extraStack = [];
15385 this.commonObjs = commonObjs;
15386 this.objs = objs;
15387 this.pendingClip = null;
15388 this.pendingEOFill = false;
15389 this.embedFonts = false;
15390 this.embeddedFonts = Object.create(null);
15391 this.cssStyle = null;
15392 this.forceDataSchema = !!forceDataSchema;
15393 }
15394 var XML_NS = 'http://www.w3.org/XML/1998/namespace';
15395 var XLINK_NS = 'http://www.w3.org/1999/xlink';
15396 var LINE_CAP_STYLES = ['butt', 'round', 'square'];
15397 var LINE_JOIN_STYLES = ['miter', 'round', 'bevel'];
15398 var clipCount = 0;
15399 var maskCount = 0;
15400 SVGGraphics.prototype = {
15401 save: function SVGGraphics_save() {
15402 this.transformStack.push(this.transformMatrix);
15403 var old = this.current;
15404 this.extraStack.push(old);
15405 this.current = old.clone();
15406 },
15407 restore: function SVGGraphics_restore() {
15408 this.transformMatrix = this.transformStack.pop();
15409 this.current = this.extraStack.pop();
15410 this.pendingClip = null;
15411 this.tgrp = null;
15412 },
15413 group: function SVGGraphics_group(items) {
15414 this.save();
15415 this.executeOpTree(items);
15416 this.restore();
15417 },
15418 loadDependencies: function SVGGraphics_loadDependencies(operatorList) {
15419 var _this = this;
15420
15421 var fnArray = operatorList.fnArray;
15422 var fnArrayLen = fnArray.length;
15423 var argsArray = operatorList.argsArray;
15424 for (var i = 0; i < fnArrayLen; i++) {
15425 if (_util.OPS.dependency === fnArray[i]) {
15426 var deps = argsArray[i];
15427 for (var n = 0, nn = deps.length; n < nn; n++) {
15428 var obj = deps[n];
15429 var common = obj.substring(0, 2) === 'g_';
15430 var promise;
15431 if (common) {
15432 promise = new Promise(function (resolve) {
15433 _this.commonObjs.get(obj, resolve);
15434 });
15435 } else {
15436 promise = new Promise(function (resolve) {
15437 _this.objs.get(obj, resolve);
15438 });
15439 }
15440 this.current.dependencies.push(promise);
15441 }
15442 }
15443 }
15444 return Promise.all(this.current.dependencies);
15445 },
15446 transform: function SVGGraphics_transform(a, b, c, d, e, f) {
15447 var transformMatrix = [a, b, c, d, e, f];
15448 this.transformMatrix = _util.Util.transform(this.transformMatrix, transformMatrix);
15449 this.tgrp = null;
15450 },
15451 getSVG: function SVGGraphics_getSVG(operatorList, viewport) {
15452 var _this2 = this;
15453
15454 this.viewport = viewport;
15455 var svgElement = this._initialize(viewport);
15456 return this.loadDependencies(operatorList).then(function () {
15457 _this2.transformMatrix = _util.IDENTITY_MATRIX;
15458 var opTree = _this2.convertOpList(operatorList);
15459 _this2.executeOpTree(opTree);
15460 return svgElement;
15461 });
15462 },
15463 convertOpList: function SVGGraphics_convertOpList(operatorList) {
15464 var argsArray = operatorList.argsArray;
15465 var fnArray = operatorList.fnArray;
15466 var fnArrayLen = fnArray.length;
15467 var REVOPS = [];
15468 var opList = [];
15469 for (var op in _util.OPS) {
15470 REVOPS[_util.OPS[op]] = op;
15471 }
15472 for (var x = 0; x < fnArrayLen; x++) {
15473 var fnId = fnArray[x];
15474 opList.push({
15475 'fnId': fnId,
15476 'fn': REVOPS[fnId],
15477 'args': argsArray[x]
15478 });
15479 }
15480 return opListToTree(opList);
15481 },
15482 executeOpTree: function SVGGraphics_executeOpTree(opTree) {
15483 var opTreeLen = opTree.length;
15484 for (var x = 0; x < opTreeLen; x++) {
15485 var fn = opTree[x].fn;
15486 var fnId = opTree[x].fnId;
15487 var args = opTree[x].args;
15488 switch (fnId | 0) {
15489 case _util.OPS.beginText:
15490 this.beginText();
15491 break;
15492 case _util.OPS.dependency:
15493 break;
15494 case _util.OPS.setLeading:
15495 this.setLeading(args);
15496 break;
15497 case _util.OPS.setLeadingMoveText:
15498 this.setLeadingMoveText(args[0], args[1]);
15499 break;
15500 case _util.OPS.setFont:
15501 this.setFont(args);
15502 break;
15503 case _util.OPS.showText:
15504 this.showText(args[0]);
15505 break;
15506 case _util.OPS.showSpacedText:
15507 this.showText(args[0]);
15508 break;
15509 case _util.OPS.endText:
15510 this.endText();
15511 break;
15512 case _util.OPS.moveText:
15513 this.moveText(args[0], args[1]);
15514 break;
15515 case _util.OPS.setCharSpacing:
15516 this.setCharSpacing(args[0]);
15517 break;
15518 case _util.OPS.setWordSpacing:
15519 this.setWordSpacing(args[0]);
15520 break;
15521 case _util.OPS.setHScale:
15522 this.setHScale(args[0]);
15523 break;
15524 case _util.OPS.setTextMatrix:
15525 this.setTextMatrix(args[0], args[1], args[2], args[3], args[4], args[5]);
15526 break;
15527 case _util.OPS.setTextRise:
15528 this.setTextRise(args[0]);
15529 break;
15530 case _util.OPS.setLineWidth:
15531 this.setLineWidth(args[0]);
15532 break;
15533 case _util.OPS.setLineJoin:
15534 this.setLineJoin(args[0]);
15535 break;
15536 case _util.OPS.setLineCap:
15537 this.setLineCap(args[0]);
15538 break;
15539 case _util.OPS.setMiterLimit:
15540 this.setMiterLimit(args[0]);
15541 break;
15542 case _util.OPS.setFillRGBColor:
15543 this.setFillRGBColor(args[0], args[1], args[2]);
15544 break;
15545 case _util.OPS.setStrokeRGBColor:
15546 this.setStrokeRGBColor(args[0], args[1], args[2]);
15547 break;
15548 case _util.OPS.setDash:
15549 this.setDash(args[0], args[1]);
15550 break;
15551 case _util.OPS.setGState:
15552 this.setGState(args[0]);
15553 break;
15554 case _util.OPS.fill:
15555 this.fill();
15556 break;
15557 case _util.OPS.eoFill:
15558 this.eoFill();
15559 break;
15560 case _util.OPS.stroke:
15561 this.stroke();
15562 break;
15563 case _util.OPS.fillStroke:
15564 this.fillStroke();
15565 break;
15566 case _util.OPS.eoFillStroke:
15567 this.eoFillStroke();
15568 break;
15569 case _util.OPS.clip:
15570 this.clip('nonzero');
15571 break;
15572 case _util.OPS.eoClip:
15573 this.clip('evenodd');
15574 break;
15575 case _util.OPS.paintSolidColorImageMask:
15576 this.paintSolidColorImageMask();
15577 break;
15578 case _util.OPS.paintJpegXObject:
15579 this.paintJpegXObject(args[0], args[1], args[2]);
15580 break;
15581 case _util.OPS.paintImageXObject:
15582 this.paintImageXObject(args[0]);
15583 break;
15584 case _util.OPS.paintInlineImageXObject:
15585 this.paintInlineImageXObject(args[0]);
15586 break;
15587 case _util.OPS.paintImageMaskXObject:
15588 this.paintImageMaskXObject(args[0]);
15589 break;
15590 case _util.OPS.paintFormXObjectBegin:
15591 this.paintFormXObjectBegin(args[0], args[1]);
15592 break;
15593 case _util.OPS.paintFormXObjectEnd:
15594 this.paintFormXObjectEnd();
15595 break;
15596 case _util.OPS.closePath:
15597 this.closePath();
15598 break;
15599 case _util.OPS.closeStroke:
15600 this.closeStroke();
15601 break;
15602 case _util.OPS.closeFillStroke:
15603 this.closeFillStroke();
15604 break;
15605 case _util.OPS.closeEOFillStroke:
15606 this.closeEOFillStroke();
15607 break;
15608 case _util.OPS.nextLine:
15609 this.nextLine();
15610 break;
15611 case _util.OPS.transform:
15612 this.transform(args[0], args[1], args[2], args[3], args[4], args[5]);
15613 break;
15614 case _util.OPS.constructPath:
15615 this.constructPath(args[0], args[1]);
15616 break;
15617 case _util.OPS.endPath:
15618 this.endPath();
15619 break;
15620 case 92:
15621 this.group(opTree[x].items);
15622 break;
15623 default:
15624 (0, _util.warn)('Unimplemented operator ' + fn);
15625 break;
15626 }
15627 }
15628 },
15629 setWordSpacing: function SVGGraphics_setWordSpacing(wordSpacing) {
15630 this.current.wordSpacing = wordSpacing;
15631 },
15632 setCharSpacing: function SVGGraphics_setCharSpacing(charSpacing) {
15633 this.current.charSpacing = charSpacing;
15634 },
15635 nextLine: function SVGGraphics_nextLine() {
15636 this.moveText(0, this.current.leading);
15637 },
15638 setTextMatrix: function SVGGraphics_setTextMatrix(a, b, c, d, e, f) {
15639 var current = this.current;
15640 this.current.textMatrix = this.current.lineMatrix = [a, b, c, d, e, f];
15641 this.current.x = this.current.lineX = 0;
15642 this.current.y = this.current.lineY = 0;
15643 current.xcoords = [];
15644 current.tspan = this.svgFactory.createElement('svg:tspan');
15645 current.tspan.setAttributeNS(null, 'font-family', current.fontFamily);
15646 current.tspan.setAttributeNS(null, 'font-size', pf(current.fontSize) + 'px');
15647 current.tspan.setAttributeNS(null, 'y', pf(-current.y));
15648 current.txtElement = this.svgFactory.createElement('svg:text');
15649 current.txtElement.appendChild(current.tspan);
15650 },
15651 beginText: function SVGGraphics_beginText() {
15652 this.current.x = this.current.lineX = 0;
15653 this.current.y = this.current.lineY = 0;
15654 this.current.textMatrix = _util.IDENTITY_MATRIX;
15655 this.current.lineMatrix = _util.IDENTITY_MATRIX;
15656 this.current.tspan = this.svgFactory.createElement('svg:tspan');
15657 this.current.txtElement = this.svgFactory.createElement('svg:text');
15658 this.current.txtgrp = this.svgFactory.createElement('svg:g');
15659 this.current.xcoords = [];
15660 },
15661 moveText: function SVGGraphics_moveText(x, y) {
15662 var current = this.current;
15663 this.current.x = this.current.lineX += x;
15664 this.current.y = this.current.lineY += y;
15665 current.xcoords = [];
15666 current.tspan = this.svgFactory.createElement('svg:tspan');
15667 current.tspan.setAttributeNS(null, 'font-family', current.fontFamily);
15668 current.tspan.setAttributeNS(null, 'font-size', pf(current.fontSize) + 'px');
15669 current.tspan.setAttributeNS(null, 'y', pf(-current.y));
15670 },
15671 showText: function SVGGraphics_showText(glyphs) {
15672 var current = this.current;
15673 var font = current.font;
15674 var fontSize = current.fontSize;
15675 if (fontSize === 0) {
15676 return;
15677 }
15678 var charSpacing = current.charSpacing;
15679 var wordSpacing = current.wordSpacing;
15680 var fontDirection = current.fontDirection;
15681 var textHScale = current.textHScale * fontDirection;
15682 var glyphsLength = glyphs.length;
15683 var vertical = font.vertical;
15684 var widthAdvanceScale = fontSize * current.fontMatrix[0];
15685 var x = 0,
15686 i;
15687 for (i = 0; i < glyphsLength; ++i) {
15688 var glyph = glyphs[i];
15689 if (glyph === null) {
15690 x += fontDirection * wordSpacing;
15691 continue;
15692 } else if ((0, _util.isNum)(glyph)) {
15693 x += -glyph * fontSize * 0.001;
15694 continue;
15695 }
15696 var width = glyph.width;
15697 var character = glyph.fontChar;
15698 var spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;
15699 var charWidth = width * widthAdvanceScale + spacing * fontDirection;
15700 if (!glyph.isInFont && !font.missingFile) {
15701 x += charWidth;
15702 continue;
15703 }
15704 current.xcoords.push(current.x + x * textHScale);
15705 current.tspan.textContent += character;
15706 x += charWidth;
15707 }
15708 if (vertical) {
15709 current.y -= x * textHScale;
15710 } else {
15711 current.x += x * textHScale;
15712 }
15713 current.tspan.setAttributeNS(null, 'x', current.xcoords.map(pf).join(' '));
15714 current.tspan.setAttributeNS(null, 'y', pf(-current.y));
15715 current.tspan.setAttributeNS(null, 'font-family', current.fontFamily);
15716 current.tspan.setAttributeNS(null, 'font-size', pf(current.fontSize) + 'px');
15717 if (current.fontStyle !== SVG_DEFAULTS.fontStyle) {
15718 current.tspan.setAttributeNS(null, 'font-style', current.fontStyle);
15719 }
15720 if (current.fontWeight !== SVG_DEFAULTS.fontWeight) {
15721 current.tspan.setAttributeNS(null, 'font-weight', current.fontWeight);
15722 }
15723 if (current.fillColor !== SVG_DEFAULTS.fillColor) {
15724 current.tspan.setAttributeNS(null, 'fill', current.fillColor);
15725 }
15726 var textMatrix = current.textMatrix;
15727 if (current.textRise !== 0) {
15728 textMatrix = textMatrix.slice();
15729 textMatrix[5] += current.textRise;
15730 }
15731 current.txtElement.setAttributeNS(null, 'transform', pm(textMatrix) + ' scale(1, -1)');
15732 current.txtElement.setAttributeNS(XML_NS, 'xml:space', 'preserve');
15733 current.txtElement.appendChild(current.tspan);
15734 current.txtgrp.appendChild(current.txtElement);
15735 this._ensureTransformGroup().appendChild(current.txtElement);
15736 },
15737 setLeadingMoveText: function SVGGraphics_setLeadingMoveText(x, y) {
15738 this.setLeading(-y);
15739 this.moveText(x, y);
15740 },
15741 addFontStyle: function SVGGraphics_addFontStyle(fontObj) {
15742 if (!this.cssStyle) {
15743 this.cssStyle = this.svgFactory.createElement('svg:style');
15744 this.cssStyle.setAttributeNS(null, 'type', 'text/css');
15745 this.defs.appendChild(this.cssStyle);
15746 }
15747 var url = (0, _util.createObjectURL)(fontObj.data, fontObj.mimetype, this.forceDataSchema);
15748 this.cssStyle.textContent += '@font-face { font-family: "' + fontObj.loadedName + '";' + ' src: url(' + url + '); }\n';
15749 },
15750 setFont: function SVGGraphics_setFont(details) {
15751 var current = this.current;
15752 var fontObj = this.commonObjs.get(details[0]);
15753 var size = details[1];
15754 this.current.font = fontObj;
15755 if (this.embedFonts && fontObj.data && !this.embeddedFonts[fontObj.loadedName]) {
15756 this.addFontStyle(fontObj);
15757 this.embeddedFonts[fontObj.loadedName] = fontObj;
15758 }
15759 current.fontMatrix = fontObj.fontMatrix ? fontObj.fontMatrix : _util.FONT_IDENTITY_MATRIX;
15760 var bold = fontObj.black ? fontObj.bold ? 'bolder' : 'bold' : fontObj.bold ? 'bold' : 'normal';
15761 var italic = fontObj.italic ? 'italic' : 'normal';
15762 if (size < 0) {
15763 size = -size;
15764 current.fontDirection = -1;
15765 } else {
15766 current.fontDirection = 1;
15767 }
15768 current.fontSize = size;
15769 current.fontFamily = fontObj.loadedName;
15770 current.fontWeight = bold;
15771 current.fontStyle = italic;
15772 current.tspan = this.svgFactory.createElement('svg:tspan');
15773 current.tspan.setAttributeNS(null, 'y', pf(-current.y));
15774 current.xcoords = [];
15775 },
15776 endText: function SVGGraphics_endText() {},
15777 setLineWidth: function SVGGraphics_setLineWidth(width) {
15778 this.current.lineWidth = width;
15779 },
15780 setLineCap: function SVGGraphics_setLineCap(style) {
15781 this.current.lineCap = LINE_CAP_STYLES[style];
15782 },
15783 setLineJoin: function SVGGraphics_setLineJoin(style) {
15784 this.current.lineJoin = LINE_JOIN_STYLES[style];
15785 },
15786 setMiterLimit: function SVGGraphics_setMiterLimit(limit) {
15787 this.current.miterLimit = limit;
15788 },
15789 setStrokeAlpha: function SVGGraphics_setStrokeAlpha(strokeAlpha) {
15790 this.current.strokeAlpha = strokeAlpha;
15791 },
15792 setStrokeRGBColor: function SVGGraphics_setStrokeRGBColor(r, g, b) {
15793 var color = _util.Util.makeCssRgb(r, g, b);
15794 this.current.strokeColor = color;
15795 },
15796 setFillAlpha: function SVGGraphics_setFillAlpha(fillAlpha) {
15797 this.current.fillAlpha = fillAlpha;
15798 },
15799 setFillRGBColor: function SVGGraphics_setFillRGBColor(r, g, b) {
15800 var color = _util.Util.makeCssRgb(r, g, b);
15801 this.current.fillColor = color;
15802 this.current.tspan = this.svgFactory.createElement('svg:tspan');
15803 this.current.xcoords = [];
15804 },
15805 setDash: function SVGGraphics_setDash(dashArray, dashPhase) {
15806 this.current.dashArray = dashArray;
15807 this.current.dashPhase = dashPhase;
15808 },
15809 constructPath: function SVGGraphics_constructPath(ops, args) {
15810 var current = this.current;
15811 var x = current.x,
15812 y = current.y;
15813 current.path = this.svgFactory.createElement('svg:path');
15814 var d = [];
15815 var opLength = ops.length;
15816 for (var i = 0, j = 0; i < opLength; i++) {
15817 switch (ops[i] | 0) {
15818 case _util.OPS.rectangle:
15819 x = args[j++];
15820 y = args[j++];
15821 var width = args[j++];
15822 var height = args[j++];
15823 var xw = x + width;
15824 var yh = y + height;
15825 d.push('M', pf(x), pf(y), 'L', pf(xw), pf(y), 'L', pf(xw), pf(yh), 'L', pf(x), pf(yh), 'Z');
15826 break;
15827 case _util.OPS.moveTo:
15828 x = args[j++];
15829 y = args[j++];
15830 d.push('M', pf(x), pf(y));
15831 break;
15832 case _util.OPS.lineTo:
15833 x = args[j++];
15834 y = args[j++];
15835 d.push('L', pf(x), pf(y));
15836 break;
15837 case _util.OPS.curveTo:
15838 x = args[j + 4];
15839 y = args[j + 5];
15840 d.push('C', pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3]), pf(x), pf(y));
15841 j += 6;
15842 break;
15843 case _util.OPS.curveTo2:
15844 x = args[j + 2];
15845 y = args[j + 3];
15846 d.push('C', pf(x), pf(y), pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3]));
15847 j += 4;
15848 break;
15849 case _util.OPS.curveTo3:
15850 x = args[j + 2];
15851 y = args[j + 3];
15852 d.push('C', pf(args[j]), pf(args[j + 1]), pf(x), pf(y), pf(x), pf(y));
15853 j += 4;
15854 break;
15855 case _util.OPS.closePath:
15856 d.push('Z');
15857 break;
15858 }
15859 }
15860 current.path.setAttributeNS(null, 'd', d.join(' '));
15861 current.path.setAttributeNS(null, 'fill', 'none');
15862 this._ensureTransformGroup().appendChild(current.path);
15863 current.element = current.path;
15864 current.setCurrentPoint(x, y);
15865 },
15866 endPath: function SVGGraphics_endPath() {
15867 if (!this.pendingClip) {
15868 return;
15869 }
15870 var current = this.current;
15871 var clipId = 'clippath' + clipCount;
15872 clipCount++;
15873 var clipPath = this.svgFactory.createElement('svg:clipPath');
15874 clipPath.setAttributeNS(null, 'id', clipId);
15875 clipPath.setAttributeNS(null, 'transform', pm(this.transformMatrix));
15876 var clipElement = current.element.cloneNode();
15877 if (this.pendingClip === 'evenodd') {
15878 clipElement.setAttributeNS(null, 'clip-rule', 'evenodd');
15879 } else {
15880 clipElement.setAttributeNS(null, 'clip-rule', 'nonzero');
15881 }
15882 this.pendingClip = null;
15883 clipPath.appendChild(clipElement);
15884 this.defs.appendChild(clipPath);
15885 if (current.activeClipUrl) {
15886 current.clipGroup = null;
15887 this.extraStack.forEach(function (prev) {
15888 prev.clipGroup = null;
15889 });
15890 }
15891 current.activeClipUrl = 'url(#' + clipId + ')';
15892 this.tgrp = null;
15893 },
15894 clip: function SVGGraphics_clip(type) {
15895 this.pendingClip = type;
15896 },
15897 closePath: function SVGGraphics_closePath() {
15898 var current = this.current;
15899 if (current.path) {
15900 var d = current.path.getAttributeNS(null, 'd');
15901 d += 'Z';
15902 current.path.setAttributeNS(null, 'd', d);
15903 }
15904 },
15905 setLeading: function SVGGraphics_setLeading(leading) {
15906 this.current.leading = -leading;
15907 },
15908 setTextRise: function SVGGraphics_setTextRise(textRise) {
15909 this.current.textRise = textRise;
15910 },
15911 setHScale: function SVGGraphics_setHScale(scale) {
15912 this.current.textHScale = scale / 100;
15913 },
15914 setGState: function SVGGraphics_setGState(states) {
15915 for (var i = 0, ii = states.length; i < ii; i++) {
15916 var state = states[i];
15917 var key = state[0];
15918 var value = state[1];
15919 switch (key) {
15920 case 'LW':
15921 this.setLineWidth(value);
15922 break;
15923 case 'LC':
15924 this.setLineCap(value);
15925 break;
15926 case 'LJ':
15927 this.setLineJoin(value);
15928 break;
15929 case 'ML':
15930 this.setMiterLimit(value);
15931 break;
15932 case 'D':
15933 this.setDash(value[0], value[1]);
15934 break;
15935 case 'Font':
15936 this.setFont(value);
15937 break;
15938 case 'CA':
15939 this.setStrokeAlpha(value);
15940 break;
15941 case 'ca':
15942 this.setFillAlpha(value);
15943 break;
15944 default:
15945 (0, _util.warn)('Unimplemented graphic state ' + key);
15946 break;
15947 }
15948 }
15949 },
15950 fill: function SVGGraphics_fill() {
15951 var current = this.current;
15952 if (current.element) {
15953 current.element.setAttributeNS(null, 'fill', current.fillColor);
15954 current.element.setAttributeNS(null, 'fill-opacity', current.fillAlpha);
15955 }
15956 },
15957 stroke: function SVGGraphics_stroke() {
15958 var current = this.current;
15959 if (current.element) {
15960 current.element.setAttributeNS(null, 'stroke', current.strokeColor);
15961 current.element.setAttributeNS(null, 'stroke-opacity', current.strokeAlpha);
15962 current.element.setAttributeNS(null, 'stroke-miterlimit', pf(current.miterLimit));
15963 current.element.setAttributeNS(null, 'stroke-linecap', current.lineCap);
15964 current.element.setAttributeNS(null, 'stroke-linejoin', current.lineJoin);
15965 current.element.setAttributeNS(null, 'stroke-width', pf(current.lineWidth) + 'px');
15966 current.element.setAttributeNS(null, 'stroke-dasharray', current.dashArray.map(pf).join(' '));
15967 current.element.setAttributeNS(null, 'stroke-dashoffset', pf(current.dashPhase) + 'px');
15968 current.element.setAttributeNS(null, 'fill', 'none');
15969 }
15970 },
15971 eoFill: function SVGGraphics_eoFill() {
15972 if (this.current.element) {
15973 this.current.element.setAttributeNS(null, 'fill-rule', 'evenodd');
15974 }
15975 this.fill();
15976 },
15977 fillStroke: function SVGGraphics_fillStroke() {
15978 this.stroke();
15979 this.fill();
15980 },
15981 eoFillStroke: function SVGGraphics_eoFillStroke() {
15982 if (this.current.element) {
15983 this.current.element.setAttributeNS(null, 'fill-rule', 'evenodd');
15984 }
15985 this.fillStroke();
15986 },
15987 closeStroke: function SVGGraphics_closeStroke() {
15988 this.closePath();
15989 this.stroke();
15990 },
15991 closeFillStroke: function SVGGraphics_closeFillStroke() {
15992 this.closePath();
15993 this.fillStroke();
15994 },
15995 closeEOFillStroke: function closeEOFillStroke() {
15996 this.closePath();
15997 this.eoFillStroke();
15998 },
15999
16000 paintSolidColorImageMask: function SVGGraphics_paintSolidColorImageMask() {
16001 var current = this.current;
16002 var rect = this.svgFactory.createElement('svg:rect');
16003 rect.setAttributeNS(null, 'x', '0');
16004 rect.setAttributeNS(null, 'y', '0');
16005 rect.setAttributeNS(null, 'width', '1px');
16006 rect.setAttributeNS(null, 'height', '1px');
16007 rect.setAttributeNS(null, 'fill', current.fillColor);
16008 this._ensureTransformGroup().appendChild(rect);
16009 },
16010 paintJpegXObject: function SVGGraphics_paintJpegXObject(objId, w, h) {
16011 var imgObj = this.objs.get(objId);
16012 var imgEl = this.svgFactory.createElement('svg:image');
16013 imgEl.setAttributeNS(XLINK_NS, 'xlink:href', imgObj.src);
16014 imgEl.setAttributeNS(null, 'width', pf(w));
16015 imgEl.setAttributeNS(null, 'height', pf(h));
16016 imgEl.setAttributeNS(null, 'x', '0');
16017 imgEl.setAttributeNS(null, 'y', pf(-h));
16018 imgEl.setAttributeNS(null, 'transform', 'scale(' + pf(1 / w) + ' ' + pf(-1 / h) + ')');
16019 this._ensureTransformGroup().appendChild(imgEl);
16020 },
16021 paintImageXObject: function SVGGraphics_paintImageXObject(objId) {
16022 var imgData = this.objs.get(objId);
16023 if (!imgData) {
16024 (0, _util.warn)('Dependent image isn\'t ready yet');
16025 return;
16026 }
16027 this.paintInlineImageXObject(imgData);
16028 },
16029 paintInlineImageXObject: function SVGGraphics_paintInlineImageXObject(imgData, mask) {
16030 var width = imgData.width;
16031 var height = imgData.height;
16032 var imgSrc = convertImgDataToPng(imgData, this.forceDataSchema, !!mask);
16033 var cliprect = this.svgFactory.createElement('svg:rect');
16034 cliprect.setAttributeNS(null, 'x', '0');
16035 cliprect.setAttributeNS(null, 'y', '0');
16036 cliprect.setAttributeNS(null, 'width', pf(width));
16037 cliprect.setAttributeNS(null, 'height', pf(height));
16038 this.current.element = cliprect;
16039 this.clip('nonzero');
16040 var imgEl = this.svgFactory.createElement('svg:image');
16041 imgEl.setAttributeNS(XLINK_NS, 'xlink:href', imgSrc);
16042 imgEl.setAttributeNS(null, 'x', '0');
16043 imgEl.setAttributeNS(null, 'y', pf(-height));
16044 imgEl.setAttributeNS(null, 'width', pf(width) + 'px');
16045 imgEl.setAttributeNS(null, 'height', pf(height) + 'px');
16046 imgEl.setAttributeNS(null, 'transform', 'scale(' + pf(1 / width) + ' ' + pf(-1 / height) + ')');
16047 if (mask) {
16048 mask.appendChild(imgEl);
16049 } else {
16050 this._ensureTransformGroup().appendChild(imgEl);
16051 }
16052 },
16053 paintImageMaskXObject: function SVGGraphics_paintImageMaskXObject(imgData) {
16054 var current = this.current;
16055 var width = imgData.width;
16056 var height = imgData.height;
16057 var fillColor = current.fillColor;
16058 current.maskId = 'mask' + maskCount++;
16059 var mask = this.svgFactory.createElement('svg:mask');
16060 mask.setAttributeNS(null, 'id', current.maskId);
16061 var rect = this.svgFactory.createElement('svg:rect');
16062 rect.setAttributeNS(null, 'x', '0');
16063 rect.setAttributeNS(null, 'y', '0');
16064 rect.setAttributeNS(null, 'width', pf(width));
16065 rect.setAttributeNS(null, 'height', pf(height));
16066 rect.setAttributeNS(null, 'fill', fillColor);
16067 rect.setAttributeNS(null, 'mask', 'url(#' + current.maskId + ')');
16068 this.defs.appendChild(mask);
16069 this._ensureTransformGroup().appendChild(rect);
16070 this.paintInlineImageXObject(imgData, mask);
16071 },
16072 paintFormXObjectBegin: function SVGGraphics_paintFormXObjectBegin(matrix, bbox) {
16073 if (Array.isArray(matrix) && matrix.length === 6) {
16074 this.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);
16075 }
16076 if (Array.isArray(bbox) && bbox.length === 4) {
16077 var width = bbox[2] - bbox[0];
16078 var height = bbox[3] - bbox[1];
16079 var cliprect = this.svgFactory.createElement('svg:rect');
16080 cliprect.setAttributeNS(null, 'x', bbox[0]);
16081 cliprect.setAttributeNS(null, 'y', bbox[1]);
16082 cliprect.setAttributeNS(null, 'width', pf(width));
16083 cliprect.setAttributeNS(null, 'height', pf(height));
16084 this.current.element = cliprect;
16085 this.clip('nonzero');
16086 this.endPath();
16087 }
16088 },
16089 paintFormXObjectEnd: function SVGGraphics_paintFormXObjectEnd() {},
16090 _initialize: function _initialize(viewport) {
16091 var svg = this.svgFactory.create(viewport.width, viewport.height);
16092 var definitions = this.svgFactory.createElement('svg:defs');
16093 svg.appendChild(definitions);
16094 this.defs = definitions;
16095 var rootGroup = this.svgFactory.createElement('svg:g');
16096 rootGroup.setAttributeNS(null, 'transform', pm(viewport.transform));
16097 svg.appendChild(rootGroup);
16098 this.svg = rootGroup;
16099 return svg;
16100 },
16101
16102 _ensureClipGroup: function SVGGraphics_ensureClipGroup() {
16103 if (!this.current.clipGroup) {
16104 var clipGroup = this.svgFactory.createElement('svg:g');
16105 clipGroup.setAttributeNS(null, 'clip-path', this.current.activeClipUrl);
16106 this.svg.appendChild(clipGroup);
16107 this.current.clipGroup = clipGroup;
16108 }
16109 return this.current.clipGroup;
16110 },
16111 _ensureTransformGroup: function SVGGraphics_ensureTransformGroup() {
16112 if (!this.tgrp) {
16113 this.tgrp = this.svgFactory.createElement('svg:g');
16114 this.tgrp.setAttributeNS(null, 'transform', pm(this.transformMatrix));
16115 if (this.current.activeClipUrl) {
16116 this._ensureClipGroup().appendChild(this.tgrp);
16117 } else {
16118 this.svg.appendChild(this.tgrp);
16119 }
16120 }
16121 return this.tgrp;
16122 }
16123 };
16124 return SVGGraphics;
16125 }();
16126}
16127exports.SVGGraphics = SVGGraphics;
16128
16129/***/ }),
16130/* 128 */
16131/***/ (function(module, exports, __w_pdfjs_require__) {
16132
16133"use strict";
16134
16135
16136Object.defineProperty(exports, "__esModule", {
16137 value: true
16138});
16139exports.PDFNodeStream = undefined;
16140
16141var _createClass = function () { 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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
16142
16143var _util = __w_pdfjs_require__(0);
16144
16145var _network_utils = __w_pdfjs_require__(39);
16146
16147function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
16148
16149function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
16150
16151function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
16152
16153var fs = require('fs');
16154var http = require('http');
16155var https = require('https');
16156var url = require('url');
16157
16158var fileUriRegex = /^file:\/\/\/[a-zA-Z]:\//;
16159function parseUrl(sourceUrl) {
16160 var parsedUrl = url.parse(sourceUrl);
16161 if (parsedUrl.protocol === 'file:' || parsedUrl.host) {
16162 return parsedUrl;
16163 }
16164 if (/^[a-z]:[/\\]/i.test(sourceUrl)) {
16165 return url.parse('file:///' + sourceUrl);
16166 }
16167 if (!parsedUrl.host) {
16168 parsedUrl.protocol = 'file:';
16169 }
16170 return parsedUrl;
16171}
16172
16173var PDFNodeStream = function () {
16174 function PDFNodeStream(source) {
16175 _classCallCheck(this, PDFNodeStream);
16176
16177 this.source = source;
16178 this.url = parseUrl(source.url);
16179 this.isHttp = this.url.protocol === 'http:' || this.url.protocol === 'https:';
16180 this.isFsUrl = this.url.protocol === 'file:';
16181 this.httpHeaders = this.isHttp && source.httpHeaders || {};
16182 this._fullRequest = null;
16183 this._rangeRequestReaders = [];
16184 }
16185
16186 _createClass(PDFNodeStream, [{
16187 key: 'getFullReader',
16188 value: function getFullReader() {
16189 (0, _util.assert)(!this._fullRequest);
16190 this._fullRequest = this.isFsUrl ? new PDFNodeStreamFsFullReader(this) : new PDFNodeStreamFullReader(this);
16191 return this._fullRequest;
16192 }
16193 }, {
16194 key: 'getRangeReader',
16195 value: function getRangeReader(start, end) {
16196 var rangeReader = this.isFsUrl ? new PDFNodeStreamFsRangeReader(this, start, end) : new PDFNodeStreamRangeReader(this, start, end);
16197 this._rangeRequestReaders.push(rangeReader);
16198 return rangeReader;
16199 }
16200 }, {
16201 key: 'cancelAllRequests',
16202 value: function cancelAllRequests(reason) {
16203 if (this._fullRequest) {
16204 this._fullRequest.cancel(reason);
16205 }
16206 var readers = this._rangeRequestReaders.slice(0);
16207 readers.forEach(function (reader) {
16208 reader.cancel(reason);
16209 });
16210 }
16211 }]);
16212
16213 return PDFNodeStream;
16214}();
16215
16216var BaseFullReader = function () {
16217 function BaseFullReader(stream) {
16218 _classCallCheck(this, BaseFullReader);
16219
16220 this._url = stream.url;
16221 this._done = false;
16222 this._errored = false;
16223 this._reason = null;
16224 this.onProgress = null;
16225 var source = stream.source;
16226 this._contentLength = source.length;
16227 this._loaded = 0;
16228 this._filename = null;
16229 this._disableRange = source.disableRange || false;
16230 this._rangeChunkSize = source.rangeChunkSize;
16231 if (!this._rangeChunkSize && !this._disableRange) {
16232 this._disableRange = true;
16233 }
16234 this._isStreamingSupported = !source.disableStream;
16235 this._isRangeSupported = !source.disableRange;
16236 this._readableStream = null;
16237 this._readCapability = (0, _util.createPromiseCapability)();
16238 this._headersCapability = (0, _util.createPromiseCapability)();
16239 }
16240
16241 _createClass(BaseFullReader, [{
16242 key: 'read',
16243 value: function read() {
16244 var _this = this;
16245
16246 return this._readCapability.promise.then(function () {
16247 if (_this._done) {
16248 return Promise.resolve({
16249 value: undefined,
16250 done: true
16251 });
16252 }
16253 if (_this._errored) {
16254 return Promise.reject(_this._reason);
16255 }
16256 var chunk = _this._readableStream.read();
16257 if (chunk === null) {
16258 _this._readCapability = (0, _util.createPromiseCapability)();
16259 return _this.read();
16260 }
16261 _this._loaded += chunk.length;
16262 if (_this.onProgress) {
16263 _this.onProgress({
16264 loaded: _this._loaded,
16265 total: _this._contentLength
16266 });
16267 }
16268 var buffer = new Uint8Array(chunk).buffer;
16269 return Promise.resolve({
16270 value: buffer,
16271 done: false
16272 });
16273 });
16274 }
16275 }, {
16276 key: 'cancel',
16277 value: function cancel(reason) {
16278 if (!this._readableStream) {
16279 this._error(reason);
16280 return;
16281 }
16282 this._readableStream.destroy(reason);
16283 }
16284 }, {
16285 key: '_error',
16286 value: function _error(reason) {
16287 this._errored = true;
16288 this._reason = reason;
16289 this._readCapability.resolve();
16290 }
16291 }, {
16292 key: '_setReadableStream',
16293 value: function _setReadableStream(readableStream) {
16294 var _this2 = this;
16295
16296 this._readableStream = readableStream;
16297 readableStream.on('readable', function () {
16298 _this2._readCapability.resolve();
16299 });
16300 readableStream.on('end', function () {
16301 readableStream.destroy();
16302 _this2._done = true;
16303 _this2._readCapability.resolve();
16304 });
16305 readableStream.on('error', function (reason) {
16306 _this2._error(reason);
16307 });
16308 if (!this._isStreamingSupported && this._isRangeSupported) {
16309 this._error(new _util.AbortException('streaming is disabled'));
16310 }
16311 if (this._errored) {
16312 this._readableStream.destroy(this._reason);
16313 }
16314 }
16315 }, {
16316 key: 'headersReady',
16317 get: function get() {
16318 return this._headersCapability.promise;
16319 }
16320 }, {
16321 key: 'filename',
16322 get: function get() {
16323 return this._filename;
16324 }
16325 }, {
16326 key: 'contentLength',
16327 get: function get() {
16328 return this._contentLength;
16329 }
16330 }, {
16331 key: 'isRangeSupported',
16332 get: function get() {
16333 return this._isRangeSupported;
16334 }
16335 }, {
16336 key: 'isStreamingSupported',
16337 get: function get() {
16338 return this._isStreamingSupported;
16339 }
16340 }]);
16341
16342 return BaseFullReader;
16343}();
16344
16345var BaseRangeReader = function () {
16346 function BaseRangeReader(stream) {
16347 _classCallCheck(this, BaseRangeReader);
16348
16349 this._url = stream.url;
16350 this._done = false;
16351 this._errored = false;
16352 this._reason = null;
16353 this.onProgress = null;
16354 this._loaded = 0;
16355 this._readableStream = null;
16356 this._readCapability = (0, _util.createPromiseCapability)();
16357 var source = stream.source;
16358 this._isStreamingSupported = !source.disableStream;
16359 }
16360
16361 _createClass(BaseRangeReader, [{
16362 key: 'read',
16363 value: function read() {
16364 var _this3 = this;
16365
16366 return this._readCapability.promise.then(function () {
16367 if (_this3._done) {
16368 return Promise.resolve({
16369 value: undefined,
16370 done: true
16371 });
16372 }
16373 if (_this3._errored) {
16374 return Promise.reject(_this3._reason);
16375 }
16376 var chunk = _this3._readableStream.read();
16377 if (chunk === null) {
16378 _this3._readCapability = (0, _util.createPromiseCapability)();
16379 return _this3.read();
16380 }
16381 _this3._loaded += chunk.length;
16382 if (_this3.onProgress) {
16383 _this3.onProgress({ loaded: _this3._loaded });
16384 }
16385 var buffer = new Uint8Array(chunk).buffer;
16386 return Promise.resolve({
16387 value: buffer,
16388 done: false
16389 });
16390 });
16391 }
16392 }, {
16393 key: 'cancel',
16394 value: function cancel(reason) {
16395 if (!this._readableStream) {
16396 this._error(reason);
16397 return;
16398 }
16399 this._readableStream.destroy(reason);
16400 }
16401 }, {
16402 key: '_error',
16403 value: function _error(reason) {
16404 this._errored = true;
16405 this._reason = reason;
16406 this._readCapability.resolve();
16407 }
16408 }, {
16409 key: '_setReadableStream',
16410 value: function _setReadableStream(readableStream) {
16411 var _this4 = this;
16412
16413 this._readableStream = readableStream;
16414 readableStream.on('readable', function () {
16415 _this4._readCapability.resolve();
16416 });
16417 readableStream.on('end', function () {
16418 readableStream.destroy();
16419 _this4._done = true;
16420 _this4._readCapability.resolve();
16421 });
16422 readableStream.on('error', function (reason) {
16423 _this4._error(reason);
16424 });
16425 if (this._errored) {
16426 this._readableStream.destroy(this._reason);
16427 }
16428 }
16429 }, {
16430 key: 'isStreamingSupported',
16431 get: function get() {
16432 return this._isStreamingSupported;
16433 }
16434 }]);
16435
16436 return BaseRangeReader;
16437}();
16438
16439function createRequestOptions(url, headers) {
16440 return {
16441 protocol: url.protocol,
16442 auth: url.auth,
16443 host: url.hostname,
16444 port: url.port,
16445 path: url.path,
16446 method: 'GET',
16447 headers: headers
16448 };
16449}
16450
16451var PDFNodeStreamFullReader = function (_BaseFullReader) {
16452 _inherits(PDFNodeStreamFullReader, _BaseFullReader);
16453
16454 function PDFNodeStreamFullReader(stream) {
16455 _classCallCheck(this, PDFNodeStreamFullReader);
16456
16457 var _this5 = _possibleConstructorReturn(this, (PDFNodeStreamFullReader.__proto__ || Object.getPrototypeOf(PDFNodeStreamFullReader)).call(this, stream));
16458
16459 var handleResponse = function handleResponse(response) {
16460 _this5._headersCapability.resolve();
16461 _this5._setReadableStream(response);
16462 var getResponseHeader = function getResponseHeader(name) {
16463 return _this5._readableStream.headers[name.toLowerCase()];
16464 };
16465
16466 var _validateRangeRequest = (0, _network_utils.validateRangeRequestCapabilities)({
16467 getResponseHeader: getResponseHeader,
16468 isHttp: stream.isHttp,
16469 rangeChunkSize: _this5._rangeChunkSize,
16470 disableRange: _this5._disableRange
16471 }),
16472 allowRangeRequests = _validateRangeRequest.allowRangeRequests,
16473 suggestedLength = _validateRangeRequest.suggestedLength;
16474
16475 _this5._isRangeSupported = allowRangeRequests;
16476 _this5._contentLength = suggestedLength || _this5._contentLength;
16477 _this5._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader);
16478 };
16479 _this5._request = null;
16480 if (_this5._url.protocol === 'http:') {
16481 _this5._request = http.request(createRequestOptions(_this5._url, stream.httpHeaders), handleResponse);
16482 } else {
16483 _this5._request = https.request(createRequestOptions(_this5._url, stream.httpHeaders), handleResponse);
16484 }
16485 _this5._request.on('error', function (reason) {
16486 _this5._errored = true;
16487 _this5._reason = reason;
16488 _this5._headersCapability.reject(reason);
16489 });
16490 _this5._request.end();
16491 return _this5;
16492 }
16493
16494 return PDFNodeStreamFullReader;
16495}(BaseFullReader);
16496
16497var PDFNodeStreamRangeReader = function (_BaseRangeReader) {
16498 _inherits(PDFNodeStreamRangeReader, _BaseRangeReader);
16499
16500 function PDFNodeStreamRangeReader(stream, start, end) {
16501 _classCallCheck(this, PDFNodeStreamRangeReader);
16502
16503 var _this6 = _possibleConstructorReturn(this, (PDFNodeStreamRangeReader.__proto__ || Object.getPrototypeOf(PDFNodeStreamRangeReader)).call(this, stream));
16504
16505 _this6._httpHeaders = {};
16506 for (var property in stream.httpHeaders) {
16507 var value = stream.httpHeaders[property];
16508 if (typeof value === 'undefined') {
16509 continue;
16510 }
16511 _this6._httpHeaders[property] = value;
16512 }
16513 _this6._httpHeaders['Range'] = 'bytes=' + start + '-' + (end - 1);
16514 _this6._request = null;
16515 if (_this6._url.protocol === 'http:') {
16516 _this6._request = http.request(createRequestOptions(_this6._url, _this6._httpHeaders), function (response) {
16517 _this6._setReadableStream(response);
16518 });
16519 } else {
16520 _this6._request = https.request(createRequestOptions(_this6._url, _this6._httpHeaders), function (response) {
16521 _this6._setReadableStream(response);
16522 });
16523 }
16524 _this6._request.on('error', function (reason) {
16525 _this6._errored = true;
16526 _this6._reason = reason;
16527 });
16528 _this6._request.end();
16529 return _this6;
16530 }
16531
16532 return PDFNodeStreamRangeReader;
16533}(BaseRangeReader);
16534
16535var PDFNodeStreamFsFullReader = function (_BaseFullReader2) {
16536 _inherits(PDFNodeStreamFsFullReader, _BaseFullReader2);
16537
16538 function PDFNodeStreamFsFullReader(stream) {
16539 _classCallCheck(this, PDFNodeStreamFsFullReader);
16540
16541 var _this7 = _possibleConstructorReturn(this, (PDFNodeStreamFsFullReader.__proto__ || Object.getPrototypeOf(PDFNodeStreamFsFullReader)).call(this, stream));
16542
16543 var path = decodeURIComponent(_this7._url.path);
16544 if (fileUriRegex.test(_this7._url.href)) {
16545 path = path.replace(/^\//, '');
16546 }
16547 fs.lstat(path, function (error, stat) {
16548 if (error) {
16549 _this7._errored = true;
16550 _this7._reason = error;
16551 _this7._headersCapability.reject(error);
16552 return;
16553 }
16554 _this7._contentLength = stat.size;
16555 _this7._setReadableStream(fs.createReadStream(path));
16556 _this7._headersCapability.resolve();
16557 });
16558 return _this7;
16559 }
16560
16561 return PDFNodeStreamFsFullReader;
16562}(BaseFullReader);
16563
16564var PDFNodeStreamFsRangeReader = function (_BaseRangeReader2) {
16565 _inherits(PDFNodeStreamFsRangeReader, _BaseRangeReader2);
16566
16567 function PDFNodeStreamFsRangeReader(stream, start, end) {
16568 _classCallCheck(this, PDFNodeStreamFsRangeReader);
16569
16570 var _this8 = _possibleConstructorReturn(this, (PDFNodeStreamFsRangeReader.__proto__ || Object.getPrototypeOf(PDFNodeStreamFsRangeReader)).call(this, stream));
16571
16572 var path = decodeURIComponent(_this8._url.path);
16573 if (fileUriRegex.test(_this8._url.href)) {
16574 path = path.replace(/^\//, '');
16575 }
16576 _this8._setReadableStream(fs.createReadStream(path, {
16577 start: start,
16578 end: end - 1
16579 }));
16580 return _this8;
16581 }
16582
16583 return PDFNodeStreamFsRangeReader;
16584}(BaseRangeReader);
16585
16586exports.PDFNodeStream = PDFNodeStream;
16587
16588/***/ }),
16589/* 129 */
16590/***/ (function(module, exports, __w_pdfjs_require__) {
16591
16592"use strict";
16593
16594
16595Object.defineProperty(exports, "__esModule", {
16596 value: true
16597});
16598
16599var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
16600
16601function getFilenameFromContentDispositionHeader(contentDisposition) {
16602 var needsEncodingFixup = true;
16603 var tmp = toParamRegExp('filename\\*', 'i').exec(contentDisposition);
16604 if (tmp) {
16605 tmp = tmp[1];
16606 var filename = rfc2616unquote(tmp);
16607 filename = unescape(filename);
16608 filename = rfc5987decode(filename);
16609 filename = rfc2047decode(filename);
16610 return fixupEncoding(filename);
16611 }
16612 tmp = rfc2231getparam(contentDisposition);
16613 if (tmp) {
16614 var _filename = rfc2047decode(tmp);
16615 return fixupEncoding(_filename);
16616 }
16617 tmp = toParamRegExp('filename', 'i').exec(contentDisposition);
16618 if (tmp) {
16619 tmp = tmp[1];
16620 var _filename2 = rfc2616unquote(tmp);
16621 _filename2 = rfc2047decode(_filename2);
16622 return fixupEncoding(_filename2);
16623 }
16624 function toParamRegExp(attributePattern, flags) {
16625 return new RegExp('(?:^|;)\\s*' + attributePattern + '\\s*=\\s*' + '(' + '[^";\\s][^;\\s]*' + '|' + '"(?:[^"\\\\]|\\\\"?)+"?' + ')', flags);
16626 }
16627 function textdecode(encoding, value) {
16628 if (encoding) {
16629 if (!/^[^\x00-\xFF]+$/.test(value)) {
16630 return value;
16631 }
16632 try {
16633 var decoder = new TextDecoder(encoding, { fatal: true });
16634 var bytes = new Array(value.length);
16635 for (var i = 0; i < value.length; ++i) {
16636 bytes[i] = value.charCodeAt(0);
16637 }
16638 value = decoder.decode(new Uint8Array(bytes));
16639 needsEncodingFixup = false;
16640 } catch (e) {
16641 if (/^utf-?8$/i.test(encoding)) {
16642 value = decodeURIComponent(escape(value));
16643 needsEncodingFixup = false;
16644 }
16645 }
16646 }
16647 return value;
16648 }
16649 function fixupEncoding(value) {
16650 if (needsEncodingFixup && /[\x80-\xff]/.test(value)) {
16651 return textdecode('utf-8', value);
16652 }
16653 return value;
16654 }
16655 function rfc2231getparam(contentDisposition) {
16656 var matches = [],
16657 match = void 0;
16658 var iter = toParamRegExp('filename\\*((?!0\\d)\\d+)(\\*?)', 'ig');
16659 while ((match = iter.exec(contentDisposition)) !== null) {
16660 var _match = match,
16661 _match2 = _slicedToArray(_match, 4),
16662 n = _match2[1],
16663 quot = _match2[2],
16664 part = _match2[3];
16665
16666 n = parseInt(n, 10);
16667 if (n in matches) {
16668 if (n === 0) {
16669 break;
16670 }
16671 continue;
16672 }
16673 matches[n] = [quot, part];
16674 }
16675 var parts = [];
16676 for (var _n = 0; _n < matches.length; ++_n) {
16677 if (!(_n in matches)) {
16678 break;
16679 }
16680
16681 var _matches$_n = _slicedToArray(matches[_n], 2),
16682 _quot = _matches$_n[0],
16683 _part = _matches$_n[1];
16684
16685 _part = rfc2616unquote(_part);
16686 if (_quot) {
16687 _part = unescape(_part);
16688 if (_n === 0) {
16689 _part = rfc5987decode(_part);
16690 }
16691 }
16692 parts.push(_part);
16693 }
16694 return parts.join('');
16695 }
16696 function rfc2616unquote(value) {
16697 if (value.charAt(0) === '"') {
16698 var parts = value.slice(1).split('\\"');
16699 for (var i = 0; i < parts.length; ++i) {
16700 var quotindex = parts[i].indexOf('"');
16701 if (quotindex !== -1) {
16702 parts[i] = parts[i].slice(0, quotindex);
16703 parts.length = i + 1;
16704 }
16705 parts[i] = parts[i].replace(/\\(.)/g, '$1');
16706 }
16707 value = parts.join('"');
16708 }
16709 return value;
16710 }
16711 function rfc5987decode(extvalue) {
16712 var encodingend = extvalue.indexOf('\'');
16713 if (encodingend === -1) {
16714 return extvalue;
16715 }
16716 var encoding = extvalue.slice(0, encodingend);
16717 var langvalue = extvalue.slice(encodingend + 1);
16718 var value = langvalue.replace(/^[^']*'/, '');
16719 return textdecode(encoding, value);
16720 }
16721 function rfc2047decode(value) {
16722 if (value.slice(0, 2) !== '=?' || /[\x00-\x19\x80-\xff]/.test(value)) {
16723 return value;
16724 }
16725 return value.replace(/=\?([\w-]*)\?([QqBb])\?((?:[^?]|\?(?!=))*)\?=/g, function (_, charset, encoding, text) {
16726 if (encoding === 'q' || encoding === 'Q') {
16727 text = text.replace(/_/g, ' ');
16728 text = text.replace(/=([0-9a-fA-F]{2})/g, function (_, hex) {
16729 return String.fromCharCode(parseInt(hex, 16));
16730 });
16731 return textdecode(charset, text);
16732 }
16733 try {
16734 return atob(text);
16735 } catch (e) {
16736 return text;
16737 }
16738 });
16739 }
16740 return '';
16741}
16742exports.getFilenameFromContentDispositionHeader = getFilenameFromContentDispositionHeader;
16743
16744/***/ }),
16745/* 130 */
16746/***/ (function(module, exports, __w_pdfjs_require__) {
16747
16748"use strict";
16749
16750
16751Object.defineProperty(exports, "__esModule", {
16752 value: true
16753});
16754exports.PDFFetchStream = undefined;
16755
16756var _createClass = function () { 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); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
16757
16758var _util = __w_pdfjs_require__(0);
16759
16760var _network_utils = __w_pdfjs_require__(39);
16761
16762function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
16763
16764function createFetchOptions(headers, withCredentials) {
16765 return {
16766 method: 'GET',
16767 headers: headers,
16768 mode: 'cors',
16769 credentials: withCredentials ? 'include' : 'same-origin',
16770 redirect: 'follow'
16771 };
16772}
16773
16774var PDFFetchStream = function () {
16775 function PDFFetchStream(source) {
16776 _classCallCheck(this, PDFFetchStream);
16777
16778 this.source = source;
16779 this.isHttp = /^https?:/i.test(source.url);
16780 this.httpHeaders = this.isHttp && source.httpHeaders || {};
16781 this._fullRequestReader = null;
16782 this._rangeRequestReaders = [];
16783 }
16784
16785 _createClass(PDFFetchStream, [{
16786 key: 'getFullReader',
16787 value: function getFullReader() {
16788 (0, _util.assert)(!this._fullRequestReader);
16789 this._fullRequestReader = new PDFFetchStreamReader(this);
16790 return this._fullRequestReader;
16791 }
16792 }, {
16793 key: 'getRangeReader',
16794 value: function getRangeReader(begin, end) {
16795 var reader = new PDFFetchStreamRangeReader(this, begin, end);
16796 this._rangeRequestReaders.push(reader);
16797 return reader;
16798 }
16799 }, {
16800 key: 'cancelAllRequests',
16801 value: function cancelAllRequests(reason) {
16802 if (this._fullRequestReader) {
16803 this._fullRequestReader.cancel(reason);
16804 }
16805 var readers = this._rangeRequestReaders.slice(0);
16806 readers.forEach(function (reader) {
16807 reader.cancel(reason);
16808 });
16809 }
16810 }]);
16811
16812 return PDFFetchStream;
16813}();
16814
16815var PDFFetchStreamReader = function () {
16816 function PDFFetchStreamReader(stream) {
16817 var _this = this;
16818
16819 _classCallCheck(this, PDFFetchStreamReader);
16820
16821 this._stream = stream;
16822 this._reader = null;
16823 this._loaded = 0;
16824 this._filename = null;
16825 var source = stream.source;
16826 this._withCredentials = source.withCredentials;
16827 this._contentLength = source.length;
16828 this._headersCapability = (0, _util.createPromiseCapability)();
16829 this._disableRange = source.disableRange || false;
16830 this._rangeChunkSize = source.rangeChunkSize;
16831 if (!this._rangeChunkSize && !this._disableRange) {
16832 this._disableRange = true;
16833 }
16834 this._isStreamingSupported = !source.disableStream;
16835 this._isRangeSupported = !source.disableRange;
16836 this._headers = new Headers();
16837 for (var property in this._stream.httpHeaders) {
16838 var value = this._stream.httpHeaders[property];
16839 if (typeof value === 'undefined') {
16840 continue;
16841 }
16842 this._headers.append(property, value);
16843 }
16844 var url = source.url;
16845 fetch(url, createFetchOptions(this._headers, this._withCredentials)).then(function (response) {
16846 if (!(0, _network_utils.validateResponseStatus)(response.status)) {
16847 throw (0, _network_utils.createResponseStatusError)(response.status, url);
16848 }
16849 _this._reader = response.body.getReader();
16850 _this._headersCapability.resolve();
16851 var getResponseHeader = function getResponseHeader(name) {
16852 return response.headers.get(name);
16853 };
16854
16855 var _validateRangeRequest = (0, _network_utils.validateRangeRequestCapabilities)({
16856 getResponseHeader: getResponseHeader,
16857 isHttp: _this._stream.isHttp,
16858 rangeChunkSize: _this._rangeChunkSize,
16859 disableRange: _this._disableRange
16860 }),
16861 allowRangeRequests = _validateRangeRequest.allowRangeRequests,
16862 suggestedLength = _validateRangeRequest.suggestedLength;
16863
16864 _this._isRangeSupported = allowRangeRequests;
16865 _this._contentLength = suggestedLength || _this._contentLength;
16866 _this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader);
16867 if (!_this._isStreamingSupported && _this._isRangeSupported) {
16868 _this.cancel(new _util.AbortException('streaming is disabled'));
16869 }
16870 }).catch(this._headersCapability.reject);
16871 this.onProgress = null;
16872 }
16873
16874 _createClass(PDFFetchStreamReader, [{
16875 key: 'read',
16876 value: function read() {
16877 var _this2 = this;
16878
16879 return this._headersCapability.promise.then(function () {
16880 return _this2._reader.read().then(function (_ref) {
16881 var value = _ref.value,
16882 done = _ref.done;
16883
16884 if (done) {
16885 return Promise.resolve({
16886 value: value,
16887 done: done
16888 });
16889 }
16890 _this2._loaded += value.byteLength;
16891 if (_this2.onProgress) {
16892 _this2.onProgress({
16893 loaded: _this2._loaded,
16894 total: _this2._contentLength
16895 });
16896 }
16897 var buffer = new Uint8Array(value).buffer;
16898 return Promise.resolve({
16899 value: buffer,
16900 done: false
16901 });
16902 });
16903 });
16904 }
16905 }, {
16906 key: 'cancel',
16907 value: function cancel(reason) {
16908 if (this._reader) {
16909 this._reader.cancel(reason);
16910 }
16911 }
16912 }, {
16913 key: 'headersReady',
16914 get: function get() {
16915 return this._headersCapability.promise;
16916 }
16917 }, {
16918 key: 'filename',
16919 get: function get() {
16920 return this._filename;
16921 }
16922 }, {
16923 key: 'contentLength',
16924 get: function get() {
16925 return this._contentLength;
16926 }
16927 }, {
16928 key: 'isRangeSupported',
16929 get: function get() {
16930 return this._isRangeSupported;
16931 }
16932 }, {
16933 key: 'isStreamingSupported',
16934 get: function get() {
16935 return this._isStreamingSupported;
16936 }
16937 }]);
16938
16939 return PDFFetchStreamReader;
16940}();
16941
16942var PDFFetchStreamRangeReader = function () {
16943 function PDFFetchStreamRangeReader(stream, begin, end) {
16944 var _this3 = this;
16945
16946 _classCallCheck(this, PDFFetchStreamRangeReader);
16947
16948 this._stream = stream;
16949 this._reader = null;
16950 this._loaded = 0;
16951 var source = stream.source;
16952 this._withCredentials = source.withCredentials;
16953 this._readCapability = (0, _util.createPromiseCapability)();
16954 this._isStreamingSupported = !source.disableStream;
16955 this._headers = new Headers();
16956 for (var property in this._stream.httpHeaders) {
16957 var value = this._stream.httpHeaders[property];
16958 if (typeof value === 'undefined') {
16959 continue;
16960 }
16961 this._headers.append(property, value);
16962 }
16963 var rangeStr = begin + '-' + (end - 1);
16964 this._headers.append('Range', 'bytes=' + rangeStr);
16965 var url = source.url;
16966 fetch(url, createFetchOptions(this._headers, this._withCredentials)).then(function (response) {
16967 if (!(0, _network_utils.validateResponseStatus)(response.status)) {
16968 throw (0, _network_utils.createResponseStatusError)(response.status, url);
16969 }
16970 _this3._readCapability.resolve();
16971 _this3._reader = response.body.getReader();
16972 });
16973 this.onProgress = null;
16974 }
16975
16976 _createClass(PDFFetchStreamRangeReader, [{
16977 key: 'read',
16978 value: function read() {
16979 var _this4 = this;
16980
16981 return this._readCapability.promise.then(function () {
16982 return _this4._reader.read().then(function (_ref2) {
16983 var value = _ref2.value,
16984 done = _ref2.done;
16985
16986 if (done) {
16987 return Promise.resolve({
16988 value: value,
16989 done: done
16990 });
16991 }
16992 _this4._loaded += value.byteLength;
16993 if (_this4.onProgress) {
16994 _this4.onProgress({ loaded: _this4._loaded });
16995 }
16996 var buffer = new Uint8Array(value).buffer;
16997 return Promise.resolve({
16998 value: buffer,
16999 done: false
17000 });
17001 });
17002 });
17003 }
17004 }, {
17005 key: 'cancel',
17006 value: function cancel(reason) {
17007 if (this._reader) {
17008 this._reader.cancel(reason);
17009 }
17010 }
17011 }, {
17012 key: 'isStreamingSupported',
17013 get: function get() {
17014 return this._isStreamingSupported;
17015 }
17016 }]);
17017
17018 return PDFFetchStreamRangeReader;
17019}();
17020
17021exports.PDFFetchStream = PDFFetchStream;
17022
17023/***/ }),
17024/* 131 */
17025/***/ (function(module, exports, __w_pdfjs_require__) {
17026
17027"use strict";
17028
17029
17030Object.defineProperty(exports, "__esModule", {
17031 value: true
17032});
17033exports.NetworkManager = exports.PDFNetworkStream = undefined;
17034
17035var _util = __w_pdfjs_require__(0);
17036
17037var _network_utils = __w_pdfjs_require__(39);
17038
17039var _global_scope = __w_pdfjs_require__(18);
17040
17041var _global_scope2 = _interopRequireDefault(_global_scope);
17042
17043function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17044
17045;
17046var OK_RESPONSE = 200;
17047var PARTIAL_CONTENT_RESPONSE = 206;
17048function NetworkManager(url, args) {
17049 this.url = url;
17050 args = args || {};
17051 this.isHttp = /^https?:/i.test(url);
17052 this.httpHeaders = this.isHttp && args.httpHeaders || {};
17053 this.withCredentials = args.withCredentials || false;
17054 this.getXhr = args.getXhr || function NetworkManager_getXhr() {
17055 return new XMLHttpRequest();
17056 };
17057 this.currXhrId = 0;
17058 this.pendingRequests = Object.create(null);
17059 this.loadedRequests = Object.create(null);
17060}
17061function getArrayBuffer(xhr) {
17062 var data = xhr.response;
17063 if (typeof data !== 'string') {
17064 return data;
17065 }
17066 var array = (0, _util.stringToBytes)(data);
17067 return array.buffer;
17068}
17069var supportsMozChunked = function supportsMozChunkedClosure() {
17070 try {
17071 var x = new XMLHttpRequest();
17072 x.open('GET', _global_scope2.default.location.href);
17073 x.responseType = 'moz-chunked-arraybuffer';
17074 return x.responseType === 'moz-chunked-arraybuffer';
17075 } catch (e) {
17076 return false;
17077 }
17078}();
17079NetworkManager.prototype = {
17080 requestRange: function NetworkManager_requestRange(begin, end, listeners) {
17081 var args = {
17082 begin: begin,
17083 end: end
17084 };
17085 for (var prop in listeners) {
17086 args[prop] = listeners[prop];
17087 }
17088 return this.request(args);
17089 },
17090 requestFull: function NetworkManager_requestFull(listeners) {
17091 return this.request(listeners);
17092 },
17093 request: function NetworkManager_request(args) {
17094 var xhr = this.getXhr();
17095 var xhrId = this.currXhrId++;
17096 var pendingRequest = this.pendingRequests[xhrId] = { xhr: xhr };
17097 xhr.open('GET', this.url);
17098 xhr.withCredentials = this.withCredentials;
17099 for (var property in this.httpHeaders) {
17100 var value = this.httpHeaders[property];
17101 if (typeof value === 'undefined') {
17102 continue;
17103 }
17104 xhr.setRequestHeader(property, value);
17105 }
17106 if (this.isHttp && 'begin' in args && 'end' in args) {
17107 var rangeStr = args.begin + '-' + (args.end - 1);
17108 xhr.setRequestHeader('Range', 'bytes=' + rangeStr);
17109 pendingRequest.expectedStatus = 206;
17110 } else {
17111 pendingRequest.expectedStatus = 200;
17112 }
17113 var useMozChunkedLoading = supportsMozChunked && !!args.onProgressiveData;
17114 if (useMozChunkedLoading) {
17115 xhr.responseType = 'moz-chunked-arraybuffer';
17116 pendingRequest.onProgressiveData = args.onProgressiveData;
17117 pendingRequest.mozChunked = true;
17118 } else {
17119 xhr.responseType = 'arraybuffer';
17120 }
17121 if (args.onError) {
17122 xhr.onerror = function (evt) {
17123 args.onError(xhr.status);
17124 };
17125 }
17126 xhr.onreadystatechange = this.onStateChange.bind(this, xhrId);
17127 xhr.onprogress = this.onProgress.bind(this, xhrId);
17128 pendingRequest.onHeadersReceived = args.onHeadersReceived;
17129 pendingRequest.onDone = args.onDone;
17130 pendingRequest.onError = args.onError;
17131 pendingRequest.onProgress = args.onProgress;
17132 xhr.send(null);
17133 return xhrId;
17134 },
17135 onProgress: function NetworkManager_onProgress(xhrId, evt) {
17136 var pendingRequest = this.pendingRequests[xhrId];
17137 if (!pendingRequest) {
17138 return;
17139 }
17140 if (pendingRequest.mozChunked) {
17141 var chunk = getArrayBuffer(pendingRequest.xhr);
17142 pendingRequest.onProgressiveData(chunk);
17143 }
17144 var onProgress = pendingRequest.onProgress;
17145 if (onProgress) {
17146 onProgress(evt);
17147 }
17148 },
17149 onStateChange: function NetworkManager_onStateChange(xhrId, evt) {
17150 var pendingRequest = this.pendingRequests[xhrId];
17151 if (!pendingRequest) {
17152 return;
17153 }
17154 var xhr = pendingRequest.xhr;
17155 if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) {
17156 pendingRequest.onHeadersReceived();
17157 delete pendingRequest.onHeadersReceived;
17158 }
17159 if (xhr.readyState !== 4) {
17160 return;
17161 }
17162 if (!(xhrId in this.pendingRequests)) {
17163 return;
17164 }
17165 delete this.pendingRequests[xhrId];
17166 if (xhr.status === 0 && this.isHttp) {
17167 if (pendingRequest.onError) {
17168 pendingRequest.onError(xhr.status);
17169 }
17170 return;
17171 }
17172 var xhrStatus = xhr.status || OK_RESPONSE;
17173 var ok_response_on_range_request = xhrStatus === OK_RESPONSE && pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE;
17174 if (!ok_response_on_range_request && xhrStatus !== pendingRequest.expectedStatus) {
17175 if (pendingRequest.onError) {
17176 pendingRequest.onError(xhr.status);
17177 }
17178 return;
17179 }
17180 this.loadedRequests[xhrId] = true;
17181 var chunk = getArrayBuffer(xhr);
17182 if (xhrStatus === PARTIAL_CONTENT_RESPONSE) {
17183 var rangeHeader = xhr.getResponseHeader('Content-Range');
17184 var matches = /bytes (\d+)-(\d+)\/(\d+)/.exec(rangeHeader);
17185 var begin = parseInt(matches[1], 10);
17186 pendingRequest.onDone({
17187 begin: begin,
17188 chunk: chunk
17189 });
17190 } else if (pendingRequest.onProgressiveData) {
17191 pendingRequest.onDone(null);
17192 } else if (chunk) {
17193 pendingRequest.onDone({
17194 begin: 0,
17195 chunk: chunk
17196 });
17197 } else if (pendingRequest.onError) {
17198 pendingRequest.onError(xhr.status);
17199 }
17200 },
17201 hasPendingRequests: function NetworkManager_hasPendingRequests() {
17202 for (var xhrId in this.pendingRequests) {
17203 return true;
17204 }
17205 return false;
17206 },
17207 getRequestXhr: function NetworkManager_getXhr(xhrId) {
17208 return this.pendingRequests[xhrId].xhr;
17209 },
17210 isStreamingRequest: function NetworkManager_isStreamingRequest(xhrId) {
17211 return !!this.pendingRequests[xhrId].onProgressiveData;
17212 },
17213 isPendingRequest: function NetworkManager_isPendingRequest(xhrId) {
17214 return xhrId in this.pendingRequests;
17215 },
17216 isLoadedRequest: function NetworkManager_isLoadedRequest(xhrId) {
17217 return xhrId in this.loadedRequests;
17218 },
17219 abortAllRequests: function NetworkManager_abortAllRequests() {
17220 for (var xhrId in this.pendingRequests) {
17221 this.abortRequest(xhrId | 0);
17222 }
17223 },
17224 abortRequest: function NetworkManager_abortRequest(xhrId) {
17225 var xhr = this.pendingRequests[xhrId].xhr;
17226 delete this.pendingRequests[xhrId];
17227 xhr.abort();
17228 }
17229};
17230function PDFNetworkStream(source) {
17231 this._source = source;
17232 this._manager = new NetworkManager(source.url, {
17233 httpHeaders: source.httpHeaders,
17234 withCredentials: source.withCredentials
17235 });
17236 this._rangeChunkSize = source.rangeChunkSize;
17237 this._fullRequestReader = null;
17238 this._rangeRequestReaders = [];
17239}
17240PDFNetworkStream.prototype = {
17241 _onRangeRequestReaderClosed: function PDFNetworkStream_onRangeRequestReaderClosed(reader) {
17242 var i = this._rangeRequestReaders.indexOf(reader);
17243 if (i >= 0) {
17244 this._rangeRequestReaders.splice(i, 1);
17245 }
17246 },
17247 getFullReader: function PDFNetworkStream_getFullReader() {
17248 (0, _util.assert)(!this._fullRequestReader);
17249 this._fullRequestReader = new PDFNetworkStreamFullRequestReader(this._manager, this._source);
17250 return this._fullRequestReader;
17251 },
17252 getRangeReader: function PDFNetworkStream_getRangeReader(begin, end) {
17253 var reader = new PDFNetworkStreamRangeRequestReader(this._manager, begin, end);
17254 reader.onClosed = this._onRangeRequestReaderClosed.bind(this);
17255 this._rangeRequestReaders.push(reader);
17256 return reader;
17257 },
17258 cancelAllRequests: function PDFNetworkStream_cancelAllRequests(reason) {
17259 if (this._fullRequestReader) {
17260 this._fullRequestReader.cancel(reason);
17261 }
17262 var readers = this._rangeRequestReaders.slice(0);
17263 readers.forEach(function (reader) {
17264 reader.cancel(reason);
17265 });
17266 }
17267};
17268function PDFNetworkStreamFullRequestReader(manager, source) {
17269 this._manager = manager;
17270 var args = {
17271 onHeadersReceived: this._onHeadersReceived.bind(this),
17272 onProgressiveData: source.disableStream ? null : this._onProgressiveData.bind(this),
17273 onDone: this._onDone.bind(this),
17274 onError: this._onError.bind(this),
17275 onProgress: this._onProgress.bind(this)
17276 };
17277 this._url = source.url;
17278 this._fullRequestId = manager.requestFull(args);
17279 this._headersReceivedCapability = (0, _util.createPromiseCapability)();
17280 this._disableRange = source.disableRange || false;
17281 this._contentLength = source.length;
17282 this._rangeChunkSize = source.rangeChunkSize;
17283 if (!this._rangeChunkSize && !this._disableRange) {
17284 this._disableRange = true;
17285 }
17286 this._isStreamingSupported = false;
17287 this._isRangeSupported = false;
17288 this._cachedChunks = [];
17289 this._requests = [];
17290 this._done = false;
17291 this._storedError = undefined;
17292 this._filename = null;
17293 this.onProgress = null;
17294}
17295PDFNetworkStreamFullRequestReader.prototype = {
17296 _onHeadersReceived: function PDFNetworkStreamFullRequestReader_onHeadersReceived() {
17297 var fullRequestXhrId = this._fullRequestId;
17298 var fullRequestXhr = this._manager.getRequestXhr(fullRequestXhrId);
17299 var getResponseHeader = function getResponseHeader(name) {
17300 return fullRequestXhr.getResponseHeader(name);
17301 };
17302
17303 var _validateRangeRequest = (0, _network_utils.validateRangeRequestCapabilities)({
17304 getResponseHeader: getResponseHeader,
17305 isHttp: this._manager.isHttp,
17306 rangeChunkSize: this._rangeChunkSize,
17307 disableRange: this._disableRange
17308 }),
17309 allowRangeRequests = _validateRangeRequest.allowRangeRequests,
17310 suggestedLength = _validateRangeRequest.suggestedLength;
17311
17312 if (allowRangeRequests) {
17313 this._isRangeSupported = true;
17314 }
17315 this._contentLength = suggestedLength || this._contentLength;
17316 this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader);
17317 var networkManager = this._manager;
17318 if (networkManager.isStreamingRequest(fullRequestXhrId)) {
17319 this._isStreamingSupported = true;
17320 } else if (this._isRangeSupported) {
17321 networkManager.abortRequest(fullRequestXhrId);
17322 }
17323 this._headersReceivedCapability.resolve();
17324 },
17325 _onProgressiveData: function PDFNetworkStreamFullRequestReader_onProgressiveData(chunk) {
17326 if (this._requests.length > 0) {
17327 var requestCapability = this._requests.shift();
17328 requestCapability.resolve({
17329 value: chunk,
17330 done: false
17331 });
17332 } else {
17333 this._cachedChunks.push(chunk);
17334 }
17335 },
17336 _onDone: function PDFNetworkStreamFullRequestReader_onDone(args) {
17337 if (args) {
17338 this._onProgressiveData(args.chunk);
17339 }
17340 this._done = true;
17341 if (this._cachedChunks.length > 0) {
17342 return;
17343 }
17344 this._requests.forEach(function (requestCapability) {
17345 requestCapability.resolve({
17346 value: undefined,
17347 done: true
17348 });
17349 });
17350 this._requests = [];
17351 },
17352 _onError: function PDFNetworkStreamFullRequestReader_onError(status) {
17353 var url = this._url;
17354 var exception = (0, _network_utils.createResponseStatusError)(status, url);
17355 this._storedError = exception;
17356 this._headersReceivedCapability.reject(exception);
17357 this._requests.forEach(function (requestCapability) {
17358 requestCapability.reject(exception);
17359 });
17360 this._requests = [];
17361 this._cachedChunks = [];
17362 },
17363 _onProgress: function PDFNetworkStreamFullRequestReader_onProgress(data) {
17364 if (this.onProgress) {
17365 this.onProgress({
17366 loaded: data.loaded,
17367 total: data.lengthComputable ? data.total : this._contentLength
17368 });
17369 }
17370 },
17371 get filename() {
17372 return this._filename;
17373 },
17374 get isRangeSupported() {
17375 return this._isRangeSupported;
17376 },
17377 get isStreamingSupported() {
17378 return this._isStreamingSupported;
17379 },
17380 get contentLength() {
17381 return this._contentLength;
17382 },
17383 get headersReady() {
17384 return this._headersReceivedCapability.promise;
17385 },
17386 read: function PDFNetworkStreamFullRequestReader_read() {
17387 if (this._storedError) {
17388 return Promise.reject(this._storedError);
17389 }
17390 if (this._cachedChunks.length > 0) {
17391 var chunk = this._cachedChunks.shift();
17392 return Promise.resolve({
17393 value: chunk,
17394 done: false
17395 });
17396 }
17397 if (this._done) {
17398 return Promise.resolve({
17399 value: undefined,
17400 done: true
17401 });
17402 }
17403 var requestCapability = (0, _util.createPromiseCapability)();
17404 this._requests.push(requestCapability);
17405 return requestCapability.promise;
17406 },
17407 cancel: function PDFNetworkStreamFullRequestReader_cancel(reason) {
17408 this._done = true;
17409 this._headersReceivedCapability.reject(reason);
17410 this._requests.forEach(function (requestCapability) {
17411 requestCapability.resolve({
17412 value: undefined,
17413 done: true
17414 });
17415 });
17416 this._requests = [];
17417 if (this._manager.isPendingRequest(this._fullRequestId)) {
17418 this._manager.abortRequest(this._fullRequestId);
17419 }
17420 this._fullRequestReader = null;
17421 }
17422};
17423function PDFNetworkStreamRangeRequestReader(manager, begin, end) {
17424 this._manager = manager;
17425 var args = {
17426 onDone: this._onDone.bind(this),
17427 onProgress: this._onProgress.bind(this)
17428 };
17429 this._requestId = manager.requestRange(begin, end, args);
17430 this._requests = [];
17431 this._queuedChunk = null;
17432 this._done = false;
17433 this.onProgress = null;
17434 this.onClosed = null;
17435}
17436PDFNetworkStreamRangeRequestReader.prototype = {
17437 _close: function PDFNetworkStreamRangeRequestReader_close() {
17438 if (this.onClosed) {
17439 this.onClosed(this);
17440 }
17441 },
17442 _onDone: function PDFNetworkStreamRangeRequestReader_onDone(data) {
17443 var chunk = data.chunk;
17444 if (this._requests.length > 0) {
17445 var requestCapability = this._requests.shift();
17446 requestCapability.resolve({
17447 value: chunk,
17448 done: false
17449 });
17450 } else {
17451 this._queuedChunk = chunk;
17452 }
17453 this._done = true;
17454 this._requests.forEach(function (requestCapability) {
17455 requestCapability.resolve({
17456 value: undefined,
17457 done: true
17458 });
17459 });
17460 this._requests = [];
17461 this._close();
17462 },
17463 _onProgress: function PDFNetworkStreamRangeRequestReader_onProgress(evt) {
17464 if (!this.isStreamingSupported && this.onProgress) {
17465 this.onProgress({ loaded: evt.loaded });
17466 }
17467 },
17468 get isStreamingSupported() {
17469 return false;
17470 },
17471 read: function PDFNetworkStreamRangeRequestReader_read() {
17472 if (this._queuedChunk !== null) {
17473 var chunk = this._queuedChunk;
17474 this._queuedChunk = null;
17475 return Promise.resolve({
17476 value: chunk,
17477 done: false
17478 });
17479 }
17480 if (this._done) {
17481 return Promise.resolve({
17482 value: undefined,
17483 done: true
17484 });
17485 }
17486 var requestCapability = (0, _util.createPromiseCapability)();
17487 this._requests.push(requestCapability);
17488 return requestCapability.promise;
17489 },
17490 cancel: function PDFNetworkStreamRangeRequestReader_cancel(reason) {
17491 this._done = true;
17492 this._requests.forEach(function (requestCapability) {
17493 requestCapability.resolve({
17494 value: undefined,
17495 done: true
17496 });
17497 });
17498 this._requests = [];
17499 if (this._manager.isPendingRequest(this._requestId)) {
17500 this._manager.abortRequest(this._requestId);
17501 }
17502 this._close();
17503 }
17504};
17505exports.PDFNetworkStream = PDFNetworkStream;
17506exports.NetworkManager = NetworkManager;
17507
17508/***/ })
17509/******/ ]);
17510});
17511//# sourceMappingURL=pdf.js.map
\No newline at end of file