summaryrefslogtreecommitdiff
path: root/third-party/pdfjs/build/pdf.worker.js
diff options
context:
space:
mode:
Diffstat (limited to 'third-party/pdfjs/build/pdf.worker.js')
-rw-r--r--third-party/pdfjs/build/pdf.worker.js81199
1 files changed, 52730 insertions, 28469 deletions
diff --git a/third-party/pdfjs/build/pdf.worker.js b/third-party/pdfjs/build/pdf.worker.js
index 58bdf7c19..f8e32abd7 100644
--- a/third-party/pdfjs/build/pdf.worker.js
+++ b/third-party/pdfjs/build/pdf.worker.js
@@ -2,7 +2,7 @@
* @licstart The following is the entire license notice for the
* Javascript code in this page
*
- * Copyright 2020 Mozilla Foundation
+ * Copyright 2021 Mozilla Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -30,141 +30,35 @@
else
root["pdfjs-dist/build/pdf.worker"] = root.pdfjsWorker = factory();
})(this, function() {
-return /******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __w_pdfjs_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __w_pdfjs_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __w_pdfjs_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __w_pdfjs_require__.c = installedModules;
-/******/
-/******/ // define getter function for harmony exports
-/******/ __w_pdfjs_require__.d = function(exports, name, getter) {
-/******/ if(!__w_pdfjs_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
-/******/ }
-/******/ };
-/******/
-/******/ // define __esModule on exports
-/******/ __w_pdfjs_require__.r = function(exports) {
-/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
-/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
-/******/ }
-/******/ Object.defineProperty(exports, '__esModule', { value: true });
-/******/ };
-/******/
-/******/ // create a fake namespace object
-/******/ // mode & 1: value is a module id, require it
-/******/ // mode & 2: merge all properties of value into the ns
-/******/ // mode & 4: return value when already ns object
-/******/ // mode & 8|1: behave like require
-/******/ __w_pdfjs_require__.t = function(value, mode) {
-/******/ if(mode & 1) value = __w_pdfjs_require__(value);
-/******/ if(mode & 8) return value;
-/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
-/******/ var ns = Object.create(null);
-/******/ __w_pdfjs_require__.r(ns);
-/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
-/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __w_pdfjs_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
-/******/ return ns;
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __w_pdfjs_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __w_pdfjs_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __w_pdfjs_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __w_pdfjs_require__.p = "";
-/******/
-/******/
-/******/ // Load entry module and return exports
-/******/ return __w_pdfjs_require__(__w_pdfjs_require__.s = 0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-Object.defineProperty(exports, "WorkerMessageHandler", {
- enumerable: true,
- get: function () {
- return _worker.WorkerMessageHandler;
- }
-});
-
-var _worker = __w_pdfjs_require__(1);
-
-const pdfjsVersion = '2.6.347';
-const pdfjsBuild = '3be9c65f';
-
-/***/ }),
+return /******/ (() => { // webpackBootstrap
+/******/ "use strict";
+/******/ var __webpack_modules__ = ([
+/* 0 */,
/* 1 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
-"use strict";
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
value: true
-});
-exports.WorkerMessageHandler = exports.WorkerTask = void 0;
+}));
+exports.WorkerTask = exports.WorkerMessageHandler = void 0;
var _util = __w_pdfjs_require__(2);
var _primitives = __w_pdfjs_require__(5);
-var _pdf_manager = __w_pdfjs_require__(6);
+var _pdf_manager = __w_pdfjs_require__(7);
-var _writer = __w_pdfjs_require__(27);
+var _writer = __w_pdfjs_require__(71);
var _is_node = __w_pdfjs_require__(4);
-var _message_handler = __w_pdfjs_require__(46);
+var _message_handler = __w_pdfjs_require__(99);
-var _worker_stream = __w_pdfjs_require__(47);
+var _worker_stream = __w_pdfjs_require__(100);
-var _core_utils = __w_pdfjs_require__(8);
+var _core_utils = __w_pdfjs_require__(9);
class WorkerTask {
constructor(name) {
@@ -197,7 +91,7 @@ exports.WorkerTask = WorkerTask;
class WorkerMessageHandler {
static setup(handler, port) {
- var testMessageProcessed = false;
+ let testMessageProcessed = false;
handler.on("test", function wphSetupTest(data) {
if (testMessageProcessed) {
return;
@@ -225,13 +119,13 @@ class WorkerMessageHandler {
}
static createDocumentHandler(docParams, port) {
- var pdfManager;
- var terminated = false;
- var cancelXHRs = null;
- var WorkerTasks = [];
+ let pdfManager;
+ let terminated = false;
+ let cancelXHRs = null;
+ const WorkerTasks = [];
const verbosity = (0, _util.getVerbosityLevel)();
const apiVersion = docParams.apiVersion;
- const workerVersion = '2.6.347';
+ const workerVersion = '2.10.377';
if (apiVersion !== workerVersion) {
throw new Error(`The API version "${apiVersion}" does not match ` + `the Worker version "${workerVersion}".`);
@@ -247,14 +141,14 @@ class WorkerMessageHandler {
throw new Error("The `Array.prototype` contains unexpected enumerable properties: " + enumerableProperties.join(", ") + "; thus breaking e.g. `for...in` iteration of `Array`s.");
}
- if (typeof ReadableStream === "undefined" || typeof Promise.allSettled === "undefined") {
- throw new Error("The browser/environment lacks native support for critical " + "functionality used by the PDF.js library (e.g. " + "`ReadableStream` and/or `Promise.allSettled`); " + "please use an ES5-compatible build instead.");
+ if (typeof ReadableStream === "undefined") {
+ throw new Error("The browser/environment lacks native support for critical " + "functionality used by the PDF.js library (e.g. `ReadableStream`); " + "please use a `legacy`-build instead.");
}
- var docId = docParams.docId;
- var docBaseUrl = docParams.docBaseUrl;
- var workerHandlerName = docParams.docId + "_worker";
- var handler = new _message_handler.MessageHandler(workerHandlerName, docId, port);
+ const docId = docParams.docId;
+ const docBaseUrl = docParams.docBaseUrl;
+ const workerHandlerName = docParams.docId + "_worker";
+ let handler = new _message_handler.MessageHandler(workerHandlerName, docId, port);
handler.postMessageTransfers = docParams.postMessageTransfers;
function ensureNotTerminated() {
@@ -269,7 +163,7 @@ class WorkerMessageHandler {
function finishWorkerTask(task) {
task.finish();
- var i = WorkerTasks.indexOf(task);
+ const i = WorkerTasks.indexOf(task);
WorkerTasks.splice(i, 1);
}
@@ -282,21 +176,31 @@ class WorkerMessageHandler {
await pdfManager.ensureDoc("checkFirstPage");
}
- const [numPages, fingerprint] = await Promise.all([pdfManager.ensureDoc("numPages"), pdfManager.ensureDoc("fingerprint")]);
+ const isPureXfa = await pdfManager.ensureDoc("isPureXfa");
+
+ if (isPureXfa) {
+ const task = new WorkerTask("loadXfaFonts");
+ startWorkerTask(task);
+ await Promise.all([pdfManager.loadXfaFonts(handler, task).catch(reason => {}).then(() => finishWorkerTask(task)), pdfManager.loadXfaImages()]);
+ }
+
+ const [numPages, fingerprints] = await Promise.all([pdfManager.ensureDoc("numPages"), pdfManager.ensureDoc("fingerprints")]);
+ const htmlForXfa = isPureXfa ? await pdfManager.ensureDoc("htmlForXfa") : null;
return {
numPages,
- fingerprint
+ fingerprints,
+ htmlForXfa
};
}
- function getPdfManager(data, evaluatorOptions) {
- var pdfManagerCapability = (0, _util.createPromiseCapability)();
+ function getPdfManager(data, evaluatorOptions, enableXfa) {
+ const pdfManagerCapability = (0, _util.createPromiseCapability)();
let newPdfManager;
- var source = data.source;
+ const source = data.source;
if (source.data) {
try {
- newPdfManager = new _pdf_manager.LocalPdfManager(docId, source.data, source.password, evaluatorOptions, docBaseUrl);
+ newPdfManager = new _pdf_manager.LocalPdfManager(docId, source.data, source.password, evaluatorOptions, enableXfa, docBaseUrl);
pdfManagerCapability.resolve(newPdfManager);
} catch (ex) {
pdfManagerCapability.reject(ex);
@@ -305,7 +209,7 @@ class WorkerMessageHandler {
return pdfManagerCapability.promise;
}
- var pdfStream,
+ let pdfStream,
cachedChunks = [];
try {
@@ -315,20 +219,20 @@ class WorkerMessageHandler {
return pdfManagerCapability.promise;
}
- var fullRequest = pdfStream.getFullReader();
+ const fullRequest = pdfStream.getFullReader();
fullRequest.headersReady.then(function () {
if (!fullRequest.isRangeSupported) {
return;
}
- var disableAutoFetch = source.disableAutoFetch || fullRequest.isStreamingSupported;
+ const disableAutoFetch = source.disableAutoFetch || fullRequest.isStreamingSupported;
newPdfManager = new _pdf_manager.NetworkPdfManager(docId, pdfStream, {
msgHandler: handler,
password: source.password,
length: fullRequest.contentLength,
disableAutoFetch,
rangeChunkSize: source.rangeChunkSize
- }, evaluatorOptions, docBaseUrl);
+ }, evaluatorOptions, enableXfa, docBaseUrl);
for (let i = 0; i < cachedChunks.length; i++) {
newPdfManager.sendProgressiveData(cachedChunks[i]);
@@ -341,17 +245,17 @@ class WorkerMessageHandler {
pdfManagerCapability.reject(reason);
cancelXHRs = null;
});
- var loaded = 0;
+ let loaded = 0;
- var flushChunks = function () {
- var pdfFile = (0, _util.arraysToBytes)(cachedChunks);
+ const flushChunks = function () {
+ const pdfFile = (0, _util.arraysToBytes)(cachedChunks);
if (source.length && pdfFile.length !== source.length) {
(0, _util.warn)("reported HTTP length is different from actual");
}
try {
- newPdfManager = new _pdf_manager.LocalPdfManager(docId, pdfFile, source.password, evaluatorOptions, docBaseUrl);
+ newPdfManager = new _pdf_manager.LocalPdfManager(docId, pdfFile, source.password, evaluatorOptions, enableXfa, docBaseUrl);
pdfManagerCapability.resolve(newPdfManager);
} catch (ex) {
pdfManagerCapability.reject(ex);
@@ -360,8 +264,8 @@ class WorkerMessageHandler {
cachedChunks = [];
};
- var readPromise = new Promise(function (resolve, reject) {
- var readChunk = function ({
+ const readPromise = new Promise(function (resolve, reject) {
+ const readChunk = function ({
value,
done
}) {
@@ -424,7 +328,7 @@ class WorkerMessageHandler {
ensureNotTerminated();
if (ex instanceof _util.PasswordException) {
- var task = new WorkerTask(`PasswordException: response ${ex.code}`);
+ const task = new WorkerTask(`PasswordException: response ${ex.code}`);
startWorkerTask(task);
handler.sendWithPromise("PasswordRequest", ex).then(function ({
password
@@ -462,14 +366,17 @@ class WorkerMessageHandler {
}
ensureNotTerminated();
- var evaluatorOptions = {
+ const evaluatorOptions = {
maxImageSize: data.maxImageSize,
disableFontFace: data.disableFontFace,
ignoreErrors: data.ignoreErrors,
isEvalSupported: data.isEvalSupported,
- fontExtraProperties: data.fontExtraProperties
+ fontExtraProperties: data.fontExtraProperties,
+ useSystemFonts: data.useSystemFonts,
+ cMapUrl: data.cMapUrl,
+ standardFontDataUrl: data.standardFontDataUrl
};
- getPdfManager(data, evaluatorOptions).then(function (newPdfManager) {
+ getPdfManager(data, evaluatorOptions, data.enableXfa).then(function (newPdfManager) {
if (terminated) {
newPdfManager.terminate(new _util.AbortException("Worker was terminated."));
throw new Error("Worker was terminated");
@@ -530,6 +437,16 @@ class WorkerMessageHandler {
handler.on("GetJavaScript", function wphSetupGetJavaScript(data) {
return pdfManager.ensureCatalog("javaScript");
});
+ handler.on("GetDocJSActions", function wphSetupGetDocJSActions(data) {
+ return pdfManager.ensureCatalog("jsActions");
+ });
+ handler.on("GetPageJSActions", function ({
+ pageIndex
+ }) {
+ return pdfManager.getPage(pageIndex).then(function (page) {
+ return pdfManager.ensure(page, "jsActions");
+ });
+ });
handler.on("GetOutline", function wphSetupGetOutline(data) {
return pdfManager.ensureCatalog("documentOutline");
});
@@ -542,6 +459,9 @@ class WorkerMessageHandler {
handler.on("GetMetadata", function wphSetupGetMetadata(data) {
return Promise.all([pdfManager.ensureDoc("documentInfo"), pdfManager.ensureCatalog("metadata")]);
});
+ handler.on("GetMarkInfo", function wphSetupGetMarkInfo(data) {
+ return pdfManager.ensureCatalog("markInfo");
+ });
handler.on("GetData", function wphSetupGetData(data) {
pdfManager.requestLoadedStream();
return pdfManager.onLoadedStream().then(function (stream) {
@@ -559,69 +479,111 @@ class WorkerMessageHandler {
return page.getAnnotationsData(intent);
});
});
+ handler.on("GetFieldObjects", function (data) {
+ return pdfManager.ensureDoc("fieldObjects");
+ });
+ handler.on("HasJSActions", function (data) {
+ return pdfManager.ensureDoc("hasJSActions");
+ });
+ handler.on("GetCalculationOrderIds", function (data) {
+ return pdfManager.ensureDoc("calculationOrderIds");
+ });
handler.on("SaveDocument", function ({
+ isPureXfa,
numPages,
annotationStorage,
filename
}) {
pdfManager.requestLoadedStream();
- const promises = [pdfManager.onLoadedStream()];
- const document = pdfManager.pdfDocument;
+ const promises = [pdfManager.onLoadedStream(), pdfManager.ensureCatalog("acroForm"), pdfManager.ensureDoc("xref"), pdfManager.ensureDoc("startXRef")];
- for (let pageIndex = 0; pageIndex < numPages; pageIndex++) {
- promises.push(pdfManager.getPage(pageIndex).then(function (page) {
- const task = new WorkerTask(`Save: page ${pageIndex}`);
- return page.save(handler, task, annotationStorage);
- }));
+ if (isPureXfa) {
+ promises.push(pdfManager.serializeXfaData(annotationStorage));
+ } else {
+ for (let pageIndex = 0; pageIndex < numPages; pageIndex++) {
+ promises.push(pdfManager.getPage(pageIndex).then(function (page) {
+ const task = new WorkerTask(`Save: page ${pageIndex}`);
+ return page.save(handler, task, annotationStorage).finally(function () {
+ finishWorkerTask(task);
+ });
+ }));
+ }
}
- return Promise.all(promises).then(([stream, ...refs]) => {
+ return Promise.all(promises).then(function ([stream, acroForm, xref, startXRef, ...refs]) {
let newRefs = [];
+ let xfaData = null;
+
+ if (isPureXfa) {
+ xfaData = refs[0];
+
+ if (!xfaData) {
+ return stream.bytes;
+ }
+ } else {
+ for (const ref of refs) {
+ newRefs = ref.filter(x => x !== null).reduce((a, b) => a.concat(b), newRefs);
+ }
- for (const ref of refs) {
- newRefs = ref.filter(x => x !== null).reduce((a, b) => a.concat(b), newRefs);
+ if (newRefs.length === 0) {
+ return stream.bytes;
+ }
}
- if (newRefs.length === 0) {
- return stream.bytes;
+ const xfa = acroForm instanceof _primitives.Dict && acroForm.get("XFA") || [];
+ let xfaDatasets = null;
+
+ if (Array.isArray(xfa)) {
+ for (let i = 0, ii = xfa.length; i < ii; i += 2) {
+ if (xfa[i] === "datasets") {
+ xfaDatasets = xfa[i + 1];
+ }
+ }
+ } else {
+ (0, _util.warn)("Unsupported XFA type.");
}
- const xref = document.xref;
let newXrefInfo = Object.create(null);
if (xref.trailer) {
- const _info = Object.create(null);
-
+ const infoObj = Object.create(null);
const xrefInfo = xref.trailer.get("Info") || null;
- if (xrefInfo) {
+ if (xrefInfo instanceof _primitives.Dict) {
xrefInfo.forEach((key, value) => {
if ((0, _util.isString)(key) && (0, _util.isString)(value)) {
- _info[key] = (0, _util.stringToPDFString)(value);
+ infoObj[key] = (0, _util.stringToPDFString)(value);
}
});
}
newXrefInfo = {
rootRef: xref.trailer.getRaw("Root") || null,
- encrypt: xref.trailer.getRaw("Encrypt") || null,
+ encryptRef: xref.trailer.getRaw("Encrypt") || null,
newRef: xref.getNewRef(),
infoRef: xref.trailer.getRaw("Info") || null,
- info: _info,
- fileIds: xref.trailer.getRaw("ID") || null,
- startXRef: document.startXRef,
+ info: infoObj,
+ fileIds: xref.trailer.get("ID") || null,
+ startXRef,
filename
};
}
xref.resetNewRef();
- return (0, _writer.incrementalUpdate)(stream.bytes, newXrefInfo, newRefs);
+ return (0, _writer.incrementalUpdate)({
+ originalData: stream.bytes,
+ xrefInfo: newXrefInfo,
+ newRefs,
+ xref,
+ datasetsRef: xfaDatasets,
+ xfaData
+ });
});
});
handler.on("GetOperatorList", function wphSetupRenderPage(data, sink) {
- var pageIndex = data.pageIndex;
+ const pageIndex = data.pageIndex;
pdfManager.getPage(pageIndex).then(function (page) {
- var task = new WorkerTask(`GetOperatorList: page ${pageIndex}`);
+ const task = new WorkerTask(`GetOperatorList: page ${pageIndex}`);
startWorkerTask(task);
const start = verbosity >= _util.VerbosityLevel.INFOS ? Date.now() : 0;
page.getOperatorList({
@@ -652,16 +614,16 @@ class WorkerMessageHandler {
sink.error(reason);
});
});
- }, this);
+ });
handler.on("GetTextContent", function wphExtractText(data, sink) {
- var pageIndex = data.pageIndex;
+ const pageIndex = data.pageIndex;
sink.onPull = function (desiredSize) {};
sink.onCancel = function (reason) {};
pdfManager.getPage(pageIndex).then(function (page) {
- var task = new WorkerTask("GetTextContent: page " + pageIndex);
+ const task = new WorkerTask("GetTextContent: page " + pageIndex);
startWorkerTask(task);
const start = verbosity >= _util.VerbosityLevel.INFOS ? Date.now() : 0;
page.extractTextContent({
@@ -669,6 +631,7 @@ class WorkerMessageHandler {
task,
sink,
normalizeWhitespace: data.normalizeWhitespace,
+ includeMarkedContent: data.includeMarkedContent,
combineTextItems: data.combineTextItems
}).then(function () {
finishWorkerTask(task);
@@ -689,6 +652,11 @@ class WorkerMessageHandler {
});
});
});
+ handler.on("GetStructTree", function wphGetStructTree(data) {
+ return pdfManager.getPage(data.pageIndex).then(function (page) {
+ return pdfManager.ensure(page, "getStructTree");
+ });
+ });
handler.on("FontFallback", function (data) {
return pdfManager.fontFallback(data.id, handler);
});
@@ -712,10 +680,11 @@ class WorkerMessageHandler {
cancelXHRs(new _util.AbortException("Worker was terminated."));
}
- WorkerTasks.forEach(function (task) {
+ for (const task of WorkerTasks) {
waitOn.push(task.finished);
task.terminate();
- });
+ }
+
return Promise.all(waitOn).then(function () {
handler.destroy();
handler = null;
@@ -729,7 +698,7 @@ class WorkerMessageHandler {
}
static initializeFromPort(port) {
- var handler = new _message_handler.MessageHandler("worker", "main", port);
+ const handler = new _message_handler.MessageHandler("worker", "main", port);
WorkerMessageHandler.setup(handler, port);
handler.send("ready", null);
}
@@ -748,41 +717,45 @@ if (typeof window === "undefined" && !_is_node.isNodeJS && typeof self !== "unde
/***/ }),
/* 2 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
-"use strict";
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
value: true
-});
+}));
exports.arrayByteLength = arrayByteLength;
exports.arraysToBytes = arraysToBytes;
exports.assert = assert;
exports.bytesToString = bytesToString;
+exports.createObjectURL = createObjectURL;
exports.createPromiseCapability = createPromiseCapability;
+exports.createValidAbsoluteUrl = createValidAbsoluteUrl;
exports.escapeString = escapeString;
exports.getModificationDate = getModificationDate;
exports.getVerbosityLevel = getVerbosityLevel;
exports.info = info;
exports.isArrayBuffer = isArrayBuffer;
exports.isArrayEqual = isArrayEqual;
+exports.isAscii = isAscii;
exports.isBool = isBool;
exports.isNum = isNum;
-exports.isString = isString;
exports.isSameOrigin = isSameOrigin;
-exports.createValidAbsoluteUrl = createValidAbsoluteUrl;
+exports.isString = isString;
+exports.objectFromMap = objectFromMap;
+exports.objectSize = objectSize;
exports.removeNullCharacters = removeNullCharacters;
exports.setVerbosityLevel = setVerbosityLevel;
exports.shadow = shadow;
exports.string32 = string32;
exports.stringToBytes = stringToBytes;
exports.stringToPDFString = stringToPDFString;
+exports.stringToUTF16BEString = stringToUTF16BEString;
exports.stringToUTF8String = stringToUTF8String;
+exports.unreachable = unreachable;
exports.utf8StringToString = utf8StringToString;
exports.warn = warn;
-exports.unreachable = unreachable;
-exports.IsEvalSupportedCached = exports.IsLittleEndianCached = exports.createObjectURL = exports.FormatError = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.StreamType = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.MissingPDFException = exports.InvalidPDFException = exports.AbortException = exports.CMapCompressionType = exports.ImageKind = exports.FontType = exports.AnnotationType = exports.AnnotationStateModelType = exports.AnnotationReviewState = exports.AnnotationReplyType = exports.AnnotationMarkedState = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.UNSUPPORTED_FEATURES = exports.VerbosityLevel = exports.OPS = exports.IDENTITY_MATRIX = exports.FONT_IDENTITY_MATRIX = exports.BaseException = void 0;
+exports.VerbosityLevel = exports.Util = exports.UNSUPPORTED_FEATURES = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.StreamType = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.PageActionEventType = exports.OPS = exports.MissingPDFException = exports.IsLittleEndianCached = exports.IsEvalSupportedCached = exports.InvalidPDFException = exports.ImageKind = exports.IDENTITY_MATRIX = exports.FormatError = exports.FontType = exports.FONT_IDENTITY_MATRIX = exports.DocumentActionEventType = exports.CMapCompressionType = exports.BaseException = exports.AnnotationType = exports.AnnotationStateModelType = exports.AnnotationReviewState = exports.AnnotationReplyType = exports.AnnotationMarkedState = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.AnnotationActionEventType = exports.AbortException = void 0;
__w_pdfjs_require__(3);
@@ -915,6 +888,36 @@ const AnnotationBorderStyleType = {
UNDERLINE: 5
};
exports.AnnotationBorderStyleType = AnnotationBorderStyleType;
+const AnnotationActionEventType = {
+ E: "Mouse Enter",
+ X: "Mouse Exit",
+ D: "Mouse Down",
+ U: "Mouse Up",
+ Fo: "Focus",
+ Bl: "Blur",
+ PO: "PageOpen",
+ PC: "PageClose",
+ PV: "PageVisible",
+ PI: "PageInvisible",
+ K: "Keystroke",
+ F: "Format",
+ V: "Validate",
+ C: "Calculate"
+};
+exports.AnnotationActionEventType = AnnotationActionEventType;
+const DocumentActionEventType = {
+ WC: "WillClose",
+ WS: "WillSave",
+ DS: "DidSave",
+ WP: "WillPrint",
+ DP: "DidPrint"
+};
+exports.DocumentActionEventType = DocumentActionEventType;
+const PageActionEventType = {
+ O: "PageOpen",
+ C: "PageClose"
+};
+exports.PageActionEventType = PageActionEventType;
const StreamType = {
UNKNOWN: "UNKNOWN",
FLATE: "FLATE",
@@ -931,6 +934,7 @@ exports.StreamType = StreamType;
const FontType = {
UNKNOWN: "UNKNOWN",
TYPE1: "TYPE1",
+ TYPE1STANDARD: "TYPE1STANDARD",
TYPE1C: "TYPE1C",
CIDFONTTYPE0: "CIDFONTTYPE0",
CIDFONTTYPE0C: "CIDFONTTYPE0C",
@@ -1052,6 +1056,7 @@ const UNSUPPORTED_FEATURES = {
unknown: "unknown",
forms: "forms",
javaScript: "javaScript",
+ signatures: "signatures",
smask: "smask",
shadingPattern: "shadingPattern",
font: "font",
@@ -1066,6 +1071,7 @@ const UNSUPPORTED_FEATURES = {
errorOperatorList: "errorOperatorList",
errorFontToUnicode: "errorFontToUnicode",
errorFontLoadNative: "errorFontLoadNative",
+ errorFontBuildPath: "errorFontBuildPath",
errorFontGetPath: "errorFontGetPath",
errorMarkedContent: "errorMarkedContent"
};
@@ -1323,6 +1329,20 @@ function string32(value) {
return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff);
}
+function objectSize(obj) {
+ return Object.keys(obj).length;
+}
+
+function objectFromMap(map) {
+ const obj = Object.create(null);
+
+ for (const [key, value] of map) {
+ obj[key] = value;
+ }
+
+ return obj;
+}
+
function isLittleEndian() {
const buffer8 = new Uint8Array(4);
buffer8[0] = 1;
@@ -1354,14 +1374,11 @@ const IsEvalSupportedCached = {
};
exports.IsEvalSupportedCached = IsEvalSupportedCached;
-const rgbBuf = ["rgb(", 0, ",", 0, ",", 0, ")"];
+const hexNumbers = [...Array(256).keys()].map(n => n.toString(16).padStart(2, "0"));
class Util {
- static makeCssRgb(r, g, b) {
- rgbBuf[1] = r;
- rgbBuf[3] = g;
- rgbBuf[5] = b;
- return rgbBuf.join("");
+ static makeHexColor(r, g, b) {
+ return `#${hexNumbers[r]}${hexNumbers[g]}${hexNumbers[b]}`;
}
static transform(m1, m2) {
@@ -1405,7 +1422,7 @@ class Util {
const c = m[2] * transpose[0] + m[3] * transpose[2];
const d = m[2] * transpose[1] + m[3] * transpose[3];
const first = (a + d) / 2;
- const second = Math.sqrt((a + d) * (a + d) - 4 * (a * d - c * b)) / 2;
+ const second = Math.sqrt((a + d) ** 2 - 4 * (a * d - c * b)) / 2;
const sx = first + second || 1;
const sy = first - second || 1;
return [Math.sqrt(sx), Math.sqrt(sy)];
@@ -1458,7 +1475,7 @@ class Util {
}
exports.Util = Util;
-const 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];
+const 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];
function stringToPDFString(str) {
const length = str.length,
@@ -1483,7 +1500,30 @@ function stringToPDFString(str) {
}
function escapeString(str) {
- return str.replace(/([\(\)\\])/g, "\\$1");
+ return str.replace(/([()\\\n\r])/g, match => {
+ if (match === "\n") {
+ return "\\n";
+ } else if (match === "\r") {
+ return "\\r";
+ }
+
+ return `\\${match}`;
+ });
+}
+
+function isAscii(str) {
+ return /^[\x00-\x7F]*$/.test(str);
+}
+
+function stringToUTF16BEString(str) {
+ const buf = ["\xFE\xFF"];
+
+ for (let i = 0, ii = str.length; i < ii; i++) {
+ const char = str.charCodeAt(i);
+ buf.push(String.fromCharCode(char >> 8 & 0xff), String.fromCharCode(char & 0xff));
+ }
+
+ return buf.join("");
}
function stringToUTF8String(str) {
@@ -1515,13 +1555,17 @@ function isArrayEqual(arr1, arr2) {
return false;
}
- return arr1.every(function (element, index) {
- return element === arr2[index];
- });
+ for (let i = 0, ii = arr1.length; i < ii; i++) {
+ if (arr1[i] !== arr2[i]) {
+ return false;
+ }
+ }
+
+ return true;
}
-function getModificationDate(date = new Date(Date.now())) {
- const buffer = [date.getUTCFullYear().toString(), (date.getUTCMonth() + 1).toString().padStart(2, "0"), (date.getUTCDate() + 1).toString().padStart(2, "0"), date.getUTCHours().toString().padStart(2, "0"), date.getUTCMinutes().toString().padStart(2, "0"), date.getUTCSeconds().toString().padStart(2, "0")];
+function getModificationDate(date = new Date()) {
+ const buffer = [date.getUTCFullYear().toString(), (date.getUTCMonth() + 1).toString().padStart(2, "0"), date.getUTCDate().toString().padStart(2, "0"), date.getUTCHours().toString().padStart(2, "0"), date.getUTCMinutes().toString().padStart(2, "0"), date.getUTCSeconds().toString().padStart(2, "0")];
return buffer.join("");
}
@@ -1548,40 +1592,34 @@ function createPromiseCapability() {
return capability;
}
-const createObjectURL = function createObjectURLClosure() {
- const digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
- return function createObjectURL(data, contentType, forceDataSchema = false) {
- if (!forceDataSchema && URL.createObjectURL) {
- const blob = new Blob([data], {
- type: contentType
- });
- return URL.createObjectURL(blob);
- }
-
- let buffer = `data:${contentType};base64,`;
+function createObjectURL(data, contentType = "", forceDataSchema = false) {
+ if (URL.createObjectURL && !forceDataSchema) {
+ return URL.createObjectURL(new Blob([data], {
+ type: contentType
+ }));
+ }
- for (let i = 0, ii = data.length; i < ii; i += 3) {
- const b1 = data[i] & 0xff;
- const b2 = data[i + 1] & 0xff;
- const b3 = data[i + 2] & 0xff;
- const d1 = b1 >> 2,
- d2 = (b1 & 3) << 4 | b2 >> 4;
- const d3 = i + 1 < ii ? (b2 & 0xf) << 2 | b3 >> 6 : 64;
- const d4 = i + 2 < ii ? b3 & 0x3f : 64;
- buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4];
- }
+ const digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
+ let buffer = `data:${contentType};base64,`;
- return buffer;
- };
-}();
+ for (let i = 0, ii = data.length; i < ii; i += 3) {
+ const b1 = data[i] & 0xff;
+ const b2 = data[i + 1] & 0xff;
+ const b3 = data[i + 2] & 0xff;
+ const d1 = b1 >> 2,
+ d2 = (b1 & 3) << 4 | b2 >> 4;
+ const d3 = i + 1 < ii ? (b2 & 0xf) << 2 | b3 >> 6 : 64;
+ const d4 = i + 2 < ii ? b3 & 0x3f : 64;
+ buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4];
+ }
-exports.createObjectURL = createObjectURL;
+ return buffer;
+}
/***/ }),
/* 3 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
-"use strict";
var _is_node = __w_pdfjs_require__(4);
@@ -1590,95 +1628,97 @@ var _is_node = __w_pdfjs_require__(4);
/***/ }),
/* 4 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports) => {
-"use strict";
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
value: true
-});
+}));
exports.isNodeJS = void 0;
const isNodeJS = typeof process === "object" && process + "" === "[object process]" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== "browser");
exports.isNodeJS = isNodeJS;
/***/ }),
/* 5 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
-"use strict";
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
value: true
-});
+}));
exports.clearPrimitiveCaches = clearPrimitiveCaches;
-exports.isEOF = isEOF;
exports.isCmd = isCmd;
exports.isDict = isDict;
+exports.isEOF = isEOF;
exports.isName = isName;
exports.isRef = isRef;
exports.isRefsEqual = isRefsEqual;
exports.isStream = isStream;
-exports.RefSetCache = exports.RefSet = exports.Ref = exports.Name = exports.Dict = exports.Cmd = exports.EOF = void 0;
+exports.RefSetCache = exports.RefSet = exports.Ref = exports.Name = exports.EOF = exports.Dict = exports.Cmd = void 0;
var _util = __w_pdfjs_require__(2);
-var EOF = {};
+var _base_stream = __w_pdfjs_require__(6);
+
+const EOF = {};
exports.EOF = EOF;
-var Name = function NameClosure() {
+const Name = function NameClosure() {
let nameCache = Object.create(null);
- function Name(name) {
- this.name = name;
- }
+ class Name {
+ constructor(name) {
+ this.name = name;
+ }
- Name.prototype = {};
+ static get(name) {
+ const nameValue = nameCache[name];
+ return nameValue ? nameValue : nameCache[name] = new Name(name);
+ }
- Name.get = function Name_get(name) {
- var nameValue = nameCache[name];
- return nameValue ? nameValue : nameCache[name] = new Name(name);
- };
+ static _clearCache() {
+ nameCache = Object.create(null);
+ }
- Name._clearCache = function () {
- nameCache = Object.create(null);
- };
+ }
return Name;
}();
exports.Name = Name;
-var Cmd = function CmdClosure() {
+const Cmd = function CmdClosure() {
let cmdCache = Object.create(null);
- function Cmd(cmd) {
- this.cmd = cmd;
- }
+ class Cmd {
+ constructor(cmd) {
+ this.cmd = cmd;
+ }
- Cmd.prototype = {};
+ static get(cmd) {
+ const cmdValue = cmdCache[cmd];
+ return cmdValue ? cmdValue : cmdCache[cmd] = new Cmd(cmd);
+ }
- Cmd.get = function Cmd_get(cmd) {
- var cmdValue = cmdCache[cmd];
- return cmdValue ? cmdValue : cmdCache[cmd] = new Cmd(cmd);
- };
+ static _clearCache() {
+ cmdCache = Object.create(null);
+ }
- Cmd._clearCache = function () {
- cmdCache = Object.create(null);
- };
+ }
return Cmd;
}();
exports.Cmd = Cmd;
-var Dict = function DictClosure() {
- var nonSerializable = function nonSerializableClosure() {
- return nonSerializable;
- };
+const nonSerializable = function nonSerializableClosure() {
+ return nonSerializable;
+};
- function Dict(xref) {
+class Dict {
+ constructor(xref = null) {
this._map = Object.create(null);
this.xref = xref;
this.objId = null;
@@ -1686,118 +1726,121 @@ var Dict = function DictClosure() {
this.__nonSerializable__ = nonSerializable;
}
- Dict.prototype = {
- assignXref: function Dict_assignXref(newXref) {
- this.xref = newXref;
- },
+ assignXref(newXref) {
+ this.xref = newXref;
+ }
- get size() {
- return Object.keys(this._map).length;
- },
+ get size() {
+ return Object.keys(this._map).length;
+ }
- get(key1, key2, key3) {
- let value = this._map[key1];
+ get(key1, key2, key3) {
+ let value = this._map[key1];
- if (value === undefined && key2 !== undefined) {
- value = this._map[key2];
+ if (value === undefined && key2 !== undefined) {
+ value = this._map[key2];
- if (value === undefined && key3 !== undefined) {
- value = this._map[key3];
- }
+ if (value === undefined && key3 !== undefined) {
+ value = this._map[key3];
}
+ }
- if (value instanceof Ref && this.xref) {
- return this.xref.fetch(value, this.suppressEncryption);
- }
+ if (value instanceof Ref && this.xref) {
+ return this.xref.fetch(value, this.suppressEncryption);
+ }
- return value;
- },
+ return value;
+ }
- async getAsync(key1, key2, key3) {
- let value = this._map[key1];
+ async getAsync(key1, key2, key3) {
+ let value = this._map[key1];
- if (value === undefined && key2 !== undefined) {
- value = this._map[key2];
+ if (value === undefined && key2 !== undefined) {
+ value = this._map[key2];
- if (value === undefined && key3 !== undefined) {
- value = this._map[key3];
- }
+ if (value === undefined && key3 !== undefined) {
+ value = this._map[key3];
}
+ }
- if (value instanceof Ref && this.xref) {
- return this.xref.fetchAsync(value, this.suppressEncryption);
- }
+ if (value instanceof Ref && this.xref) {
+ return this.xref.fetchAsync(value, this.suppressEncryption);
+ }
- return value;
- },
+ return value;
+ }
- getArray(key1, key2, key3) {
- let value = this.get(key1, key2, key3);
+ getArray(key1, key2, key3) {
+ let value = this._map[key1];
- if (!Array.isArray(value) || !this.xref) {
- return value;
+ if (value === undefined && key2 !== undefined) {
+ value = this._map[key2];
+
+ if (value === undefined && key3 !== undefined) {
+ value = this._map[key3];
}
+ }
+
+ if (value instanceof Ref && this.xref) {
+ value = this.xref.fetch(value, this.suppressEncryption);
+ }
+ if (Array.isArray(value)) {
value = value.slice();
for (let i = 0, ii = value.length; i < ii; i++) {
- if (!(value[i] instanceof Ref)) {
- continue;
+ if (value[i] instanceof Ref && this.xref) {
+ value[i] = this.xref.fetch(value[i], this.suppressEncryption);
}
-
- value[i] = this.xref.fetch(value[i], this.suppressEncryption);
}
+ }
- return value;
- },
+ return value;
+ }
- getRaw: function Dict_getRaw(key) {
- return this._map[key];
- },
- getKeys: function Dict_getKeys() {
- return Object.keys(this._map);
- },
- getRawValues: function Dict_getRawValues() {
- return Object.values(this._map);
- },
- set: function Dict_set(key, value) {
- this._map[key] = value;
- },
- has: function Dict_has(key) {
- return this._map[key] !== undefined;
- },
- forEach: function Dict_forEach(callback) {
- for (var key in this._map) {
- callback(key, this.get(key));
- }
- }
- };
- Dict.empty = new Dict(null);
+ getRaw(key) {
+ return this._map[key];
+ }
- Dict.merge = function ({
- xref,
- dictArray,
- mergeSubDicts = false
- }) {
- const mergedDict = new Dict(xref);
+ getKeys() {
+ return Object.keys(this._map);
+ }
- if (!mergeSubDicts) {
- for (const dict of dictArray) {
- if (!(dict instanceof Dict)) {
- continue;
- }
+ getRawValues() {
+ return Object.values(this._map);
+ }
- for (const [key, value] of Object.entries(dict._map)) {
- if (mergedDict._map[key] === undefined) {
- mergedDict._map[key] = value;
- }
- }
- }
+ set(key, value) {
+ this._map[key] = value;
+ }
+
+ has(key) {
+ return this._map[key] !== undefined;
+ }
- return mergedDict.size > 0 ? mergedDict : Dict.empty;
+ forEach(callback) {
+ for (const key in this._map) {
+ callback(key, this.get(key));
}
+ }
+
+ static get empty() {
+ const emptyDict = new Dict(null);
+
+ emptyDict.set = (key, value) => {
+ (0, _util.unreachable)("Should not call `set` on the empty dictionary.");
+ };
+
+ return (0, _util.shadow)(this, "empty", emptyDict);
+ }
- const properties = new Map();
+ static merge({
+ xref,
+ dictArray,
+ mergeSubDicts = false
+ }) {
+ const mergedDict = new Dict(xref),
+ properties = new Map();
for (const dict of dictArray) {
if (!(dict instanceof Dict)) {
@@ -1810,6 +1853,8 @@ var Dict = function DictClosure() {
if (property === undefined) {
property = [];
properties.set(key, property);
+ } else if (!mergeSubDicts) {
+ continue;
}
property.push(value);
@@ -1843,40 +1888,40 @@ var Dict = function DictClosure() {
properties.clear();
return mergedDict.size > 0 ? mergedDict : Dict.empty;
- };
+ }
- return Dict;
-}();
+}
exports.Dict = Dict;
-var Ref = function RefClosure() {
+const Ref = function RefClosure() {
let refCache = Object.create(null);
- function Ref(num, gen) {
- this.num = num;
- this.gen = gen;
- }
+ class Ref {
+ constructor(num, gen) {
+ this.num = num;
+ this.gen = gen;
+ }
- Ref.prototype = {
- toString: function Ref_toString() {
+ toString() {
if (this.gen === 0) {
return `${this.num}R`;
}
return `${this.num}R${this.gen}`;
}
- };
- Ref.get = function (num, gen) {
- const key = gen === 0 ? `${num}R` : `${num}R${gen}`;
- const refValue = refCache[key];
- return refValue ? refValue : refCache[key] = new Ref(num, gen);
- };
+ static get(num, gen) {
+ const key = gen === 0 ? `${num}R` : `${num}R${gen}`;
+ const refValue = refCache[key];
+ return refValue ? refValue : refCache[key] = new Ref(num, gen);
+ }
- Ref._clearCache = function () {
- refCache = Object.create(null);
- };
+ static _clearCache() {
+ refCache = Object.create(null);
+ }
+
+ }
return Ref;
}();
@@ -1884,8 +1929,8 @@ var Ref = function RefClosure() {
exports.Ref = Ref;
class RefSet {
- constructor() {
- this._set = new Set();
+ constructor(parent = null) {
+ this._set = new Set(parent && parent._set);
}
has(ref) {
@@ -1900,6 +1945,16 @@ class RefSet {
this._set.delete(ref.toString());
}
+ forEach(callback) {
+ for (const ref of this._set.values()) {
+ callback(ref);
+ }
+ }
+
+ clear() {
+ this._set.clear();
+ }
+
}
exports.RefSet = RefSet;
@@ -1968,7 +2023,7 @@ function isRefsEqual(v1, v2) {
}
function isStream(v) {
- return typeof v === "object" && v !== null && v.getBytes !== undefined;
+ return v instanceof _base_stream.BaseStream;
}
function clearPrimitiveCaches() {
@@ -1981,25 +2036,145 @@ function clearPrimitiveCaches() {
/***/ }),
/* 6 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
-"use strict";
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
value: true
-});
+}));
+exports.BaseStream = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+class BaseStream {
+ constructor() {
+ if (this.constructor === BaseStream) {
+ (0, _util.unreachable)("Cannot initialize BaseStream.");
+ }
+ }
+
+ get length() {
+ (0, _util.unreachable)("Abstract getter `length` accessed");
+ }
+
+ get isEmpty() {
+ (0, _util.unreachable)("Abstract getter `isEmpty` accessed");
+ }
+
+ get isDataLoaded() {
+ return (0, _util.shadow)(this, "isDataLoaded", true);
+ }
+
+ getByte() {
+ (0, _util.unreachable)("Abstract method `getByte` called");
+ }
+
+ getBytes(length, forceClamped = false) {
+ (0, _util.unreachable)("Abstract method `getBytes` called");
+ }
+
+ peekByte() {
+ const peekedByte = this.getByte();
+
+ if (peekedByte !== -1) {
+ this.pos--;
+ }
+
+ return peekedByte;
+ }
+
+ peekBytes(length, forceClamped = false) {
+ const bytes = this.getBytes(length, forceClamped);
+ this.pos -= bytes.length;
+ return bytes;
+ }
+
+ getUint16() {
+ const b0 = this.getByte();
+ const b1 = this.getByte();
+
+ if (b0 === -1 || b1 === -1) {
+ return -1;
+ }
+
+ return (b0 << 8) + b1;
+ }
+
+ getInt32() {
+ const b0 = this.getByte();
+ const b1 = this.getByte();
+ const b2 = this.getByte();
+ const b3 = this.getByte();
+ return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;
+ }
+
+ getByteRange(begin, end) {
+ (0, _util.unreachable)("Abstract method `getByteRange` called");
+ }
+
+ getString(length) {
+ return (0, _util.bytesToString)(this.getBytes(length, false));
+ }
+
+ skip(n) {
+ this.pos += n || 1;
+ }
+
+ reset() {
+ (0, _util.unreachable)("Abstract method `reset` called");
+ }
+
+ moveStart() {
+ (0, _util.unreachable)("Abstract method `moveStart` called");
+ }
+
+ makeSubStream(start, length, dict = null) {
+ (0, _util.unreachable)("Abstract method `makeSubStream` called");
+ }
+
+ getBaseStreams() {
+ return null;
+ }
+
+}
+
+exports.BaseStream = BaseStream;
+
+/***/ }),
+/* 7 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
exports.NetworkPdfManager = exports.LocalPdfManager = void 0;
var _util = __w_pdfjs_require__(2);
-var _chunked_stream = __w_pdfjs_require__(7);
+var _chunked_stream = __w_pdfjs_require__(8);
+
+var _core_utils = __w_pdfjs_require__(9);
-var _core_utils = __w_pdfjs_require__(8);
+var _document = __w_pdfjs_require__(11);
-var _document = __w_pdfjs_require__(9);
+var _stream = __w_pdfjs_require__(10);
-var _stream = __w_pdfjs_require__(12);
+function parseDocBaseUrl(url) {
+ if (url) {
+ const absoluteUrl = (0, _util.createValidAbsoluteUrl)(url);
+
+ if (absoluteUrl) {
+ return absoluteUrl.href;
+ }
+
+ (0, _util.warn)(`Invalid absolute docBaseUrl: "${url}".`);
+ }
+
+ return null;
+}
class BasePdfManager {
constructor() {
@@ -2017,19 +2192,7 @@ class BasePdfManager {
}
get docBaseUrl() {
- let docBaseUrl = null;
-
- if (this._docBaseUrl) {
- const absoluteUrl = (0, _util.createValidAbsoluteUrl)(this._docBaseUrl);
-
- if (absoluteUrl) {
- docBaseUrl = absoluteUrl.href;
- } else {
- (0, _util.warn)(`Invalid absolute docBaseUrl: "${this._docBaseUrl}".`);
- }
- }
-
- return (0, _util.shadow)(this, "docBaseUrl", docBaseUrl);
+ return this._docBaseUrl;
}
onLoadedStream() {
@@ -2056,6 +2219,18 @@ class BasePdfManager {
return this.pdfDocument.fontFallback(id, handler);
}
+ loadXfaFonts(handler, task) {
+ return this.pdfDocument.loadXfaFonts(handler, task);
+ }
+
+ loadXfaImages() {
+ return this.pdfDocument.loadXfaImages();
+ }
+
+ serializeXfaData(annotationStorage) {
+ return this.pdfDocument.serializeXfaData(annotationStorage);
+ }
+
cleanup(manuallyTriggered = false) {
return this.pdfDocument.cleanup(manuallyTriggered);
}
@@ -2087,12 +2262,13 @@ class BasePdfManager {
}
class LocalPdfManager extends BasePdfManager {
- constructor(docId, data, password, evaluatorOptions, docBaseUrl) {
+ constructor(docId, data, password, evaluatorOptions, enableXfa, docBaseUrl) {
super();
this._docId = docId;
this._password = password;
- this._docBaseUrl = docBaseUrl;
+ this._docBaseUrl = parseDocBaseUrl(docBaseUrl);
this.evaluatorOptions = evaluatorOptions;
+ this.enableXfa = enableXfa;
const stream = new _stream.Stream(data);
this.pdfDocument = new _document.PDFDocument(this, stream);
this._loadedStreamPromise = Promise.resolve(stream);
@@ -2125,13 +2301,14 @@ class LocalPdfManager extends BasePdfManager {
exports.LocalPdfManager = LocalPdfManager;
class NetworkPdfManager extends BasePdfManager {
- constructor(docId, pdfNetworkStream, args, evaluatorOptions, docBaseUrl) {
+ constructor(docId, pdfNetworkStream, args, evaluatorOptions, enableXfa, docBaseUrl) {
super();
this._docId = docId;
this._password = args.password;
- this._docBaseUrl = docBaseUrl;
+ this._docBaseUrl = parseDocBaseUrl(docBaseUrl);
this.msgHandler = args.msgHandler;
this.evaluatorOptions = evaluatorOptions;
+ this.enableXfa = enableXfa;
this.streamManager = new _chunked_stream.ChunkedStreamManager(pdfNetworkStream, {
msgHandler: args.msgHandler,
length: args.length,
@@ -2187,27 +2364,25 @@ class NetworkPdfManager extends BasePdfManager {
exports.NetworkPdfManager = NetworkPdfManager;
/***/ }),
-/* 7 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 8 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
-"use strict";
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
value: true
-});
+}));
exports.ChunkedStreamManager = exports.ChunkedStream = void 0;
var _util = __w_pdfjs_require__(2);
-var _core_utils = __w_pdfjs_require__(8);
+var _core_utils = __w_pdfjs_require__(9);
+
+var _stream = __w_pdfjs_require__(10);
-class ChunkedStream {
+class ChunkedStream extends _stream.Stream {
constructor(length, chunkSize, manager) {
- this.bytes = new Uint8Array(length);
- this.start = 0;
- this.pos = 0;
- this.end = length;
+ super(new Uint8Array(length), 0, length, null);
this.chunkSize = chunkSize;
this._loadedChunks = new Set();
this.numChunks = Math.ceil(length / chunkSize);
@@ -2228,15 +2403,11 @@ class ChunkedStream {
return chunks;
}
- getBaseStreams() {
- return [this];
- }
-
get numChunksLoaded() {
return this._loadedChunks.size;
}
- allChunksLoaded() {
+ get isDataLoaded() {
return this.numChunksLoaded === this.numChunks;
}
@@ -2331,14 +2502,6 @@ class ChunkedStream {
return this._loadedChunks.has(chunk);
}
- get length() {
- return this.end - this.start;
- }
-
- get isEmpty() {
- return this.length === 0;
- }
-
getByte() {
const pos = this.pos;
@@ -2353,25 +2516,6 @@ class ChunkedStream {
return this.bytes[this.pos++];
}
- getUint16() {
- const b0 = this.getByte();
- const b1 = this.getByte();
-
- if (b0 === -1 || b1 === -1) {
- return -1;
- }
-
- return (b0 << 8) + b1;
- }
-
- getInt32() {
- const b0 = this.getByte();
- const b1 = this.getByte();
- const b2 = this.getByte();
- const b3 = this.getByte();
- return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;
- }
-
getBytes(length, forceClamped = false) {
const bytes = this.bytes;
const pos = this.pos;
@@ -2401,22 +2545,6 @@ class ChunkedStream {
return forceClamped ? new Uint8ClampedArray(subarray) : subarray;
}
- peekByte() {
- const peekedByte = this.getByte();
-
- if (peekedByte !== -1) {
- this.pos--;
- }
-
- return peekedByte;
- }
-
- peekBytes(length, forceClamped = false) {
- const bytes = this.getBytes(length, forceClamped);
- this.pos -= bytes.length;
- return bytes;
- }
-
getByteRange(begin, end) {
if (begin < 0) {
begin = 0;
@@ -2433,23 +2561,7 @@ class ChunkedStream {
return this.bytes.subarray(begin, end);
}
- skip(n) {
- if (!n) {
- n = 1;
- }
-
- this.pos += n;
- }
-
- reset() {
- this.pos = this.start;
- }
-
- moveStart() {
- this.start = this.pos;
- }
-
- makeSubStream(start, length, dict) {
+ makeSubStream(start, length, dict = null) {
if (length) {
if (start + length > this.progressiveDataLength) {
this.ensureRange(start, start + length);
@@ -2479,14 +2591,17 @@ class ChunkedStream {
return missingChunks;
};
- ChunkedStreamSubstream.prototype.allChunksLoaded = function () {
- if (this.numChunksLoaded === this.numChunks) {
- return true;
- }
+ Object.defineProperty(ChunkedStreamSubstream.prototype, "isDataLoaded", {
+ get() {
+ if (this.numChunksLoaded === this.numChunks) {
+ return true;
+ }
- return this.getMissingChunks().length === 0;
- };
+ return this.getMissingChunks().length === 0;
+ },
+ configurable: true
+ });
const subStream = new ChunkedStreamSubstream();
subStream.pos = subStream.start = start;
subStream.end = start + length || this.end;
@@ -2494,6 +2609,10 @@ class ChunkedStream {
return subStream;
}
+ getBaseStreams() {
+ return [this];
+ }
+
}
exports.ChunkedStream = ChunkedStream;
@@ -2723,7 +2842,7 @@ class ChunkedStreamManager {
this.stream.onReceiveData(begin, chunk);
}
- if (this.stream.allChunksLoaded()) {
+ if (this.stream.isDataLoaded) {
this._loadedStreamCapability.resolve(this.stream);
}
@@ -2814,27 +2933,34 @@ class ChunkedStreamManager {
exports.ChunkedStreamManager = ChunkedStreamManager;
/***/ }),
-/* 8 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 9 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
-"use strict";
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
value: true
-});
-exports.getLookupTableFactory = getLookupTableFactory;
+}));
+exports.collectActions = collectActions;
+exports.encodeToXmlString = encodeToXmlString;
+exports.escapePDFName = escapePDFName;
+exports.getArrayLookupTableFactory = getArrayLookupTableFactory;
exports.getInheritableProperty = getInheritableProperty;
-exports.toRomanNumerals = toRomanNumerals;
+exports.getLookupTableFactory = getLookupTableFactory;
+exports.isWhiteSpace = isWhiteSpace;
exports.log2 = log2;
+exports.parseXFAPath = parseXFAPath;
exports.readInt8 = readInt8;
exports.readUint16 = readUint16;
exports.readUint32 = readUint32;
-exports.isWhiteSpace = isWhiteSpace;
-exports.XRefParseException = exports.XRefEntryException = exports.MissingDataException = void 0;
+exports.toRomanNumerals = toRomanNumerals;
+exports.validateCSSFont = validateCSSFont;
+exports.XRefParseException = exports.XRefEntryException = exports.ParserEOFException = exports.MissingDataException = void 0;
var _util = __w_pdfjs_require__(2);
+var _primitives = __w_pdfjs_require__(5);
+
function getLookupTableFactory(initializer) {
let lookup;
return function () {
@@ -2848,6 +2974,25 @@ function getLookupTableFactory(initializer) {
};
}
+function getArrayLookupTableFactory(initializer) {
+ let lookup;
+ return function () {
+ if (initializer) {
+ let arr = initializer();
+ initializer = null;
+ lookup = Object.create(null);
+
+ for (let i = 0, ii = arr.length; i < ii; i += 2) {
+ lookup[arr[i]] = arr[i + 1];
+ }
+
+ arr = null;
+ }
+
+ return lookup;
+ };
+}
+
class MissingDataException extends _util.BaseException {
constructor(begin, end) {
super(`Missing data [${begin}, ${end})`);
@@ -2859,6 +3004,10 @@ class MissingDataException extends _util.BaseException {
exports.MissingDataException = MissingDataException;
+class ParserEOFException extends _util.BaseException {}
+
+exports.ParserEOFException = ParserEOFException;
+
class XRefEntryException extends _util.BaseException {}
exports.XRefEntryException = XRefEntryException;
@@ -2873,11 +3022,14 @@ function getInheritableProperty({
getArray = false,
stopWhenFound = true
}) {
- const LOOP_LIMIT = 100;
- let loopCount = 0;
let values;
+ const visited = new _primitives.RefSet();
+
+ while (dict instanceof _primitives.Dict && !(dict.objId && visited.has(dict.objId))) {
+ if (dict.objId) {
+ visited.put(dict.objId);
+ }
- while (dict) {
const value = getArray ? dict.getArray(key) : dict.get(key);
if (value !== undefined) {
@@ -2892,11 +3044,6 @@ function getInheritableProperty({
values.push(value);
}
- if (++loopCount > LOOP_LIMIT) {
- (0, _util.warn)(`getInheritableProperty: maximum loop count exceeded for "${key}"`);
- break;
- }
-
dict = dict.get("Parent");
}
@@ -2950,45 +3097,395 @@ function isWhiteSpace(ch) {
return ch === 0x20 || ch === 0x09 || ch === 0x0d || ch === 0x0a;
}
+function parseXFAPath(path) {
+ const positionPattern = /(.+)\[([0-9]+)\]$/;
+ return path.split(".").map(component => {
+ const m = component.match(positionPattern);
+
+ if (m) {
+ return {
+ name: m[1],
+ pos: parseInt(m[2], 10)
+ };
+ }
+
+ return {
+ name: component,
+ pos: 0
+ };
+ });
+}
+
+function escapePDFName(str) {
+ const buffer = [];
+ let start = 0;
+
+ for (let i = 0, ii = str.length; i < ii; i++) {
+ const char = str.charCodeAt(i);
+
+ if (char < 0x21 || char > 0x7e || char === 0x23 || char === 0x28 || char === 0x29 || char === 0x3c || char === 0x3e || char === 0x5b || char === 0x5d || char === 0x7b || char === 0x7d || char === 0x2f || char === 0x25) {
+ if (start < i) {
+ buffer.push(str.substring(start, i));
+ }
+
+ buffer.push(`#${char.toString(16)}`);
+ start = i + 1;
+ }
+ }
+
+ if (buffer.length === 0) {
+ return str;
+ }
+
+ if (start < str.length) {
+ buffer.push(str.substring(start, str.length));
+ }
+
+ return buffer.join("");
+}
+
+function _collectJS(entry, xref, list, parents) {
+ if (!entry) {
+ return;
+ }
+
+ let parent = null;
+
+ if ((0, _primitives.isRef)(entry)) {
+ if (parents.has(entry)) {
+ return;
+ }
+
+ parent = entry;
+ parents.put(parent);
+ entry = xref.fetch(entry);
+ }
+
+ if (Array.isArray(entry)) {
+ for (const element of entry) {
+ _collectJS(element, xref, list, parents);
+ }
+ } else if (entry instanceof _primitives.Dict) {
+ if ((0, _primitives.isName)(entry.get("S"), "JavaScript") && entry.has("JS")) {
+ const js = entry.get("JS");
+ let code;
+
+ if ((0, _primitives.isStream)(js)) {
+ code = js.getString();
+ } else {
+ code = js;
+ }
+
+ code = (0, _util.stringToPDFString)(code);
+
+ if (code) {
+ list.push(code);
+ }
+ }
+
+ _collectJS(entry.getRaw("Next"), xref, list, parents);
+ }
+
+ if (parent) {
+ parents.remove(parent);
+ }
+}
+
+function collectActions(xref, dict, eventType) {
+ const actions = Object.create(null);
+ const additionalActionsDicts = getInheritableProperty({
+ dict,
+ key: "AA",
+ stopWhenFound: false
+ });
+
+ if (additionalActionsDicts) {
+ for (let i = additionalActionsDicts.length - 1; i >= 0; i--) {
+ const additionalActions = additionalActionsDicts[i];
+
+ if (!(additionalActions instanceof _primitives.Dict)) {
+ continue;
+ }
+
+ for (const key of additionalActions.getKeys()) {
+ const action = eventType[key];
+
+ if (!action) {
+ continue;
+ }
+
+ const actionDict = additionalActions.getRaw(key);
+ const parents = new _primitives.RefSet();
+ const list = [];
+
+ _collectJS(actionDict, xref, list, parents);
+
+ if (list.length > 0) {
+ actions[action] = list;
+ }
+ }
+ }
+ }
+
+ if (dict.has("A")) {
+ const actionDict = dict.get("A");
+ const parents = new _primitives.RefSet();
+ const list = [];
+
+ _collectJS(actionDict, xref, list, parents);
+
+ if (list.length > 0) {
+ actions.Action = list;
+ }
+ }
+
+ return (0, _util.objectSize)(actions) > 0 ? actions : null;
+}
+
+const XMLEntities = {
+ 0x3c: "&lt;",
+ 0x3e: "&gt;",
+ 0x26: "&amp;",
+ 0x22: "&quot;",
+ 0x27: "&apos;"
+};
+
+function encodeToXmlString(str) {
+ const buffer = [];
+ let start = 0;
+
+ for (let i = 0, ii = str.length; i < ii; i++) {
+ const char = str.codePointAt(i);
+
+ if (0x20 <= char && char <= 0x7e) {
+ const entity = XMLEntities[char];
+
+ if (entity) {
+ if (start < i) {
+ buffer.push(str.substring(start, i));
+ }
+
+ buffer.push(entity);
+ start = i + 1;
+ }
+ } else {
+ if (start < i) {
+ buffer.push(str.substring(start, i));
+ }
+
+ buffer.push(`&#x${char.toString(16).toUpperCase()};`);
+
+ if (char > 0xd7ff && (char < 0xe000 || char > 0xfffd)) {
+ i++;
+ }
+
+ start = i + 1;
+ }
+ }
+
+ if (buffer.length === 0) {
+ return str;
+ }
+
+ if (start < str.length) {
+ buffer.push(str.substring(start, str.length));
+ }
+
+ return buffer.join("");
+}
+
+function validateCSSFont(cssFontInfo) {
+ const DEFAULT_CSS_FONT_OBLIQUE = "14";
+ const DEFAULT_CSS_FONT_WEIGHT = "400";
+ const CSS_FONT_WEIGHT_VALUES = new Set(["100", "200", "300", "400", "500", "600", "700", "800", "900", "1000", "normal", "bold", "bolder", "lighter"]);
+ const {
+ fontFamily,
+ fontWeight,
+ italicAngle
+ } = cssFontInfo;
+
+ if (/^".*"$/.test(fontFamily)) {
+ if (/[^\\]"/.test(fontFamily.slice(1, fontFamily.length - 1))) {
+ (0, _util.warn)(`XFA - FontFamily contains some unescaped ": ${fontFamily}.`);
+ return false;
+ }
+ } else if (/^'.*'$/.test(fontFamily)) {
+ if (/[^\\]'/.test(fontFamily.slice(1, fontFamily.length - 1))) {
+ (0, _util.warn)(`XFA - FontFamily contains some unescaped ': ${fontFamily}.`);
+ return false;
+ }
+ } else {
+ for (const ident of fontFamily.split(/[ \t]+/)) {
+ if (/^([0-9]|(-([0-9]|-)))/.test(ident) || !/^[a-zA-Z0-9\-_\\]+$/.test(ident)) {
+ (0, _util.warn)(`XFA - FontFamily contains some invalid <custom-ident>: ${fontFamily}.`);
+ return false;
+ }
+ }
+ }
+
+ const weight = fontWeight ? fontWeight.toString() : "";
+ cssFontInfo.fontWeight = CSS_FONT_WEIGHT_VALUES.has(weight) ? weight : DEFAULT_CSS_FONT_WEIGHT;
+ const angle = parseFloat(italicAngle);
+ cssFontInfo.italicAngle = isNaN(angle) || angle < -90 || angle > 90 ? DEFAULT_CSS_FONT_OBLIQUE : italicAngle.toString();
+ return true;
+}
+
/***/ }),
-/* 9 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 10 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
-"use strict";
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
value: true
-});
-exports.PDFDocument = exports.Page = void 0;
+}));
+exports.StringStream = exports.Stream = exports.NullStream = void 0;
+
+var _base_stream = __w_pdfjs_require__(6);
var _util = __w_pdfjs_require__(2);
-var _obj = __w_pdfjs_require__(10);
+class Stream extends _base_stream.BaseStream {
+ constructor(arrayBuffer, start, length, dict) {
+ super();
+ this.bytes = arrayBuffer instanceof Uint8Array ? arrayBuffer : new Uint8Array(arrayBuffer);
+ this.start = start || 0;
+ this.pos = this.start;
+ this.end = start + length || this.bytes.length;
+ this.dict = dict;
+ }
+
+ get length() {
+ return this.end - this.start;
+ }
+
+ get isEmpty() {
+ return this.length === 0;
+ }
+
+ getByte() {
+ if (this.pos >= this.end) {
+ return -1;
+ }
+
+ return this.bytes[this.pos++];
+ }
+
+ getBytes(length, forceClamped = false) {
+ const bytes = this.bytes;
+ const pos = this.pos;
+ const strEnd = this.end;
+
+ if (!length) {
+ const subarray = bytes.subarray(pos, strEnd);
+ return forceClamped ? new Uint8ClampedArray(subarray) : subarray;
+ }
+
+ let end = pos + length;
+
+ if (end > strEnd) {
+ end = strEnd;
+ }
+
+ this.pos = end;
+ const subarray = bytes.subarray(pos, end);
+ return forceClamped ? new Uint8ClampedArray(subarray) : subarray;
+ }
+
+ getByteRange(begin, end) {
+ if (begin < 0) {
+ begin = 0;
+ }
+
+ if (end > this.end) {
+ end = this.end;
+ }
+
+ return this.bytes.subarray(begin, end);
+ }
+
+ reset() {
+ this.pos = this.start;
+ }
+
+ moveStart() {
+ this.start = this.pos;
+ }
+
+ makeSubStream(start, length, dict = null) {
+ return new Stream(this.bytes.buffer, start, length, dict);
+ }
+
+}
+
+exports.Stream = Stream;
+
+class StringStream extends Stream {
+ constructor(str) {
+ super((0, _util.stringToBytes)(str));
+ }
+
+}
+
+exports.StringStream = StringStream;
+
+class NullStream extends Stream {
+ constructor() {
+ super(new Uint8Array(0));
+ }
+
+}
+
+exports.NullStream = NullStream;
+
+/***/ }),
+/* 11 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.PDFDocument = exports.Page = void 0;
+
+var _util = __w_pdfjs_require__(2);
var _primitives = __w_pdfjs_require__(5);
-var _core_utils = __w_pdfjs_require__(8);
+var _core_utils = __w_pdfjs_require__(9);
+
+var _stream = __w_pdfjs_require__(10);
+
+var _annotation = __w_pdfjs_require__(12);
+
+var _base_stream = __w_pdfjs_require__(6);
+
+var _crypto = __w_pdfjs_require__(72);
-var _stream = __w_pdfjs_require__(12);
+var _catalog = __w_pdfjs_require__(64);
-var _annotation = __w_pdfjs_require__(25);
+var _xfa_fonts = __w_pdfjs_require__(55);
-var _crypto = __w_pdfjs_require__(22);
+var _parser = __w_pdfjs_require__(17);
-var _parser = __w_pdfjs_require__(11);
+var _object_loader = __w_pdfjs_require__(70);
-var _operator_list = __w_pdfjs_require__(26);
+var _operator_list = __w_pdfjs_require__(62);
-var _evaluator = __w_pdfjs_require__(28);
+var _evaluator = __w_pdfjs_require__(15);
+
+var _decode_stream = __w_pdfjs_require__(19);
+
+var _struct_tree = __w_pdfjs_require__(69);
+
+var _factory = __w_pdfjs_require__(74);
+
+var _xref = __w_pdfjs_require__(98);
const DEFAULT_USER_UNIT = 1.0;
const LETTER_SIZE_MEDIABOX = [0, 0, 612, 792];
-function isAnnotationRenderable(annotation, intent) {
- return intent === "display" && annotation.viewable || intent === "print" && annotation.printable;
-}
-
class Page {
constructor({
pdfManager,
@@ -2999,7 +3496,10 @@ class Page {
globalIdFactory,
fontCache,
builtInCMapCache,
- globalImageCache
+ standardFontDataCache,
+ globalImageCache,
+ nonBlendModesSet,
+ xfaFactory
}) {
this.pdfManager = pdfManager;
this.pageIndex = pageIndex;
@@ -3008,9 +3508,12 @@ class Page {
this.ref = ref;
this.fontCache = fontCache;
this.builtInCMapCache = builtInCMapCache;
+ this.standardFontDataCache = standardFontDataCache;
this.globalImageCache = globalImageCache;
+ this.nonBlendModesSet = nonBlendModesSet;
this.evaluatorOptions = pdfManager.evaluatorOptions;
this.resourcesPromise = null;
+ this.xfaFactory = xfaFactory;
const idCounters = {
obj: 0
};
@@ -3019,6 +3522,10 @@ class Page {
return `p${pageIndex}_${++idCounters.obj}`;
}
+ static getPageObjId() {
+ return `page${ref.toString()}`;
+ }
+
};
}
@@ -3045,7 +3552,7 @@ class Page {
}
get content() {
- return this.pageDict.get("Contents");
+ return this.pageDict.getArray("Contents");
}
get resources() {
@@ -3053,6 +3560,10 @@ class Page {
}
_getBoundingBox(name) {
+ if (this.xfaData) {
+ return this.xfaData.bbox;
+ }
+
const box = this._getInheritableProperty(name, true);
if (Array.isArray(box) && box.length === 4) {
@@ -3112,7 +3623,7 @@ class Page {
if (rotate % 90 !== 0) {
rotate = 0;
} else if (rotate >= 360) {
- rotate = rotate % 360;
+ rotate %= 360;
} else if (rotate < 0) {
rotate = (rotate % 360 + 360) % 360;
}
@@ -3121,25 +3632,27 @@ class Page {
}
getContentStream() {
- const content = this.content;
- let stream;
-
- if (Array.isArray(content)) {
- const xref = this.xref;
- const streams = [];
+ return this.pdfManager.ensure(this, "content").then(content => {
+ if (content instanceof _base_stream.BaseStream) {
+ return content;
+ }
- for (const subStream of content) {
- streams.push(xref.fetchIfRef(subStream));
+ if (Array.isArray(content)) {
+ return new _decode_stream.StreamsSequenceStream(content);
}
- stream = new _stream.StreamsSequenceStream(streams);
- } else if ((0, _primitives.isStream)(content)) {
- stream = content;
- } else {
- stream = new _stream.NullStream();
+ return new _stream.NullStream();
+ });
+ }
+
+ get xfaData() {
+ if (this.xfaFactory) {
+ return (0, _util.shadow)(this, "xfaData", {
+ bbox: this.xfaFactory.getBoundingBox(this.pageIndex)
+ });
}
- return stream;
+ return (0, _util.shadow)(this, "xfaData", null);
}
save(handler, task, annotationStorage) {
@@ -3150,6 +3663,7 @@ class Page {
idFactory: this._localIdFactory,
fontCache: this.fontCache,
builtInCMapCache: this.builtInCMapCache,
+ standardFontDataCache: this.standardFontDataCache,
globalImageCache: this.globalImageCache,
options: this.evaluatorOptions
});
@@ -3157,7 +3671,7 @@ class Page {
const newRefsPromises = [];
for (const annotation of annotations) {
- if (!isAnnotationRenderable(annotation, "print")) {
+ if (!annotation.mustBePrinted(annotationStorage)) {
continue;
}
@@ -3177,7 +3691,7 @@ class Page {
}
return this.resourcesPromise.then(() => {
- const objectLoader = new _obj.ObjectLoader(this.resources, keys, this.xref);
+ const objectLoader = new _object_loader.ObjectLoader(this.resources, keys, this.xref);
return objectLoader.load();
});
}
@@ -3190,8 +3704,8 @@ class Page {
renderInteractiveForms,
annotationStorage
}) {
- const contentStreamPromise = this.pdfManager.ensure(this, "getContentStream");
- const resourcesPromise = this.loadResources(["ExtGState", "ColorSpace", "Pattern", "Shading", "XObject", "Font"]);
+ const contentStreamPromise = this.getContentStream();
+ const resourcesPromise = this.loadResources(["ColorSpace", "ExtGState", "Font", "Pattern", "Properties", "Shading", "XObject"]);
const partialEvaluator = new _evaluator.PartialEvaluator({
xref: this.xref,
handler,
@@ -3199,6 +3713,7 @@ class Page {
idFactory: this._localIdFactory,
fontCache: this.fontCache,
builtInCMapCache: this.builtInCMapCache,
+ standardFontDataCache: this.standardFontDataCache,
globalImageCache: this.globalImageCache,
options: this.evaluatorOptions
});
@@ -3206,7 +3721,7 @@ class Page {
const pageListPromise = dataPromises.then(([contentStream]) => {
const opList = new _operator_list.OperatorList(intent, sink);
handler.send("StartRenderPage", {
- transparency: partialEvaluator.hasBlendModes(this.resources),
+ transparency: partialEvaluator.hasBlendModes(this.resources, this.nonBlendModesSet),
pageIndex: this.pageIndex,
intent
});
@@ -3227,10 +3742,11 @@ class Page {
};
}
+ const annotationIntent = intent.startsWith("oplist-") ? intent.split("-")[1] : intent;
const opListPromises = [];
for (const annotation of annotations) {
- if (isAnnotationRenderable(annotation, intent)) {
+ if (annotationIntent === "display" && annotation.mustBeViewed(annotationStorage) || annotationIntent === "print" && annotation.mustBePrinted(annotationStorage)) {
opListPromises.push(annotation.getOperatorList(partialEvaluator, task, renderInteractiveForms, annotationStorage).catch(function (reason) {
(0, _util.warn)("getOperatorList - ignoring annotation data during " + `"${task.name}" task: "${reason}".`);
return null;
@@ -3258,11 +3774,12 @@ class Page {
handler,
task,
normalizeWhitespace,
+ includeMarkedContent,
sink,
combineTextItems
}) {
- const contentStreamPromise = this.pdfManager.ensure(this, "getContentStream");
- const resourcesPromise = this.loadResources(["ExtGState", "XObject", "Font"]);
+ const contentStreamPromise = this.getContentStream();
+ const resourcesPromise = this.loadResources(["ExtGState", "Font", "Properties", "XObject"]);
const dataPromises = Promise.all([contentStreamPromise, resourcesPromise]);
return dataPromises.then(([contentStream]) => {
const partialEvaluator = new _evaluator.PartialEvaluator({
@@ -3272,6 +3789,7 @@ class Page {
idFactory: this._localIdFactory,
fontCache: this.fontCache,
builtInCMapCache: this.builtInCMapCache,
+ standardFontDataCache: this.standardFontDataCache,
globalImageCache: this.globalImageCache,
options: this.evaluatorOptions
});
@@ -3280,18 +3798,36 @@ class Page {
task,
resources: this.resources,
normalizeWhitespace,
+ includeMarkedContent,
combineTextItems,
sink
});
});
}
+ async getStructTree() {
+ const structTreeRoot = await this.pdfManager.ensureCatalog("structTreeRoot");
+
+ if (!structTreeRoot) {
+ return null;
+ }
+
+ const structTree = await this.pdfManager.ensure(this, "_parseStructTree", [structTreeRoot]);
+ return structTree.serializable;
+ }
+
+ _parseStructTree(structTreeRoot) {
+ const tree = new _struct_tree.StructTreePage(structTreeRoot, this.pageDict);
+ tree.parse();
+ return tree;
+ }
+
getAnnotationsData(intent) {
return this._parsedAnnotations.then(function (annotations) {
const annotationsData = [];
for (let i = 0, ii = annotations.length; i < ii; i++) {
- if (!intent || isAnnotationRenderable(annotations[i], intent)) {
+ if (!intent || intent === "display" && annotations[i].viewable || intent === "print" && annotations[i].printable) {
annotationsData.push(annotations[i].data);
}
}
@@ -3301,7 +3837,9 @@ class Page {
}
get annotations() {
- return (0, _util.shadow)(this, "annotations", this._getInheritableProperty("Annots") || []);
+ const annots = this._getInheritableProperty("Annots");
+
+ return (0, _util.shadow)(this, "annotations", Array.isArray(annots) ? annots : []);
}
get _parsedAnnotations() {
@@ -3309,7 +3847,7 @@ class Page {
const annotationPromises = [];
for (const annotationRef of this.annotations) {
- annotationPromises.push(_annotation.AnnotationFactory.create(this.xref, annotationRef, this.pdfManager, this._localIdFactory).catch(function (reason) {
+ annotationPromises.push(_annotation.AnnotationFactory.create(this.xref, annotationRef, this.pdfManager, this._localIdFactory, false).catch(function (reason) {
(0, _util.warn)(`_parsedAnnotations: "${reason}".`);
return null;
}));
@@ -3322,6 +3860,11 @@ class Page {
return (0, _util.shadow)(this, "_parsedAnnotations", parsedAnnotations);
}
+ get jsActions() {
+ const actions = (0, _core_utils.collectActions)(this.xref, this.pageDict, _util.PageActionEventType);
+ return (0, _util.shadow)(this, "jsActions", actions);
+ }
+
}
exports.Page = Page;
@@ -3399,7 +3942,7 @@ class PDFDocument {
this.pdfManager = pdfManager;
this.stream = stream;
- this.xref = new _obj.XRef(stream, pdfManager);
+ this.xref = new _xref.XRef(stream, pdfManager);
this._pagePromises = [];
this._version = null;
const idCounters = {
@@ -3418,12 +3961,16 @@ class PDFDocument {
(0, _util.unreachable)("Abstract method `createObjId` called.");
}
+ static getPageObjId() {
+ (0, _util.unreachable)("Abstract method `getPageObjId` called.");
+ }
+
};
}
parse(recoveryMode) {
this.xref.parse(recoveryMode);
- this.catalog = new _obj.Catalog(this.pdfManager, this.xref);
+ this.catalog = new _catalog.Catalog(this.pdfManager, this.xref);
if (this.catalog.version) {
this._version = this.catalog.version;
@@ -3530,6 +4077,10 @@ class PDFDocument {
}
get numPages() {
+ if (this.xfaFactory) {
+ return (0, _util.shadow)(this, "numPages", this.xfaFactory.numberPages);
+ }
+
const linearization = this.linearization;
const num = linearization ? linearization.numPages : this.catalog.numPages;
return (0, _util.shadow)(this, "numPages", num);
@@ -3537,9 +4088,18 @@ class PDFDocument {
_hasOnlyDocumentSignatures(fields, recursionDepth = 0) {
const RECURSION_LIMIT = 10;
+
+ if (!Array.isArray(fields)) {
+ return false;
+ }
+
return fields.every(field => {
field = this.xref.fetchIfRef(field);
+ if (!(field instanceof _primitives.Dict)) {
+ return false;
+ }
+
if (field.has("Kids")) {
if (++recursionDepth > RECURSION_LIMIT) {
(0, _util.warn)("_hasOnlyDocumentSignatures: maximum recursion depth reached");
@@ -3556,10 +4116,282 @@ class PDFDocument {
});
}
+ get xfaData() {
+ const acroForm = this.catalog.acroForm;
+
+ if (!acroForm) {
+ return null;
+ }
+
+ const xfa = acroForm.get("XFA");
+ const entries = {
+ "xdp:xdp": "",
+ template: "",
+ datasets: "",
+ config: "",
+ connectionSet: "",
+ localeSet: "",
+ stylesheet: "",
+ "/xdp:xdp": ""
+ };
+
+ if ((0, _primitives.isStream)(xfa) && !xfa.isEmpty) {
+ try {
+ entries["xdp:xdp"] = (0, _util.stringToUTF8String)(xfa.getString());
+ return entries;
+ } catch (_) {
+ (0, _util.warn)("XFA - Invalid utf-8 string.");
+ return null;
+ }
+ }
+
+ if (!Array.isArray(xfa) || xfa.length === 0) {
+ return null;
+ }
+
+ for (let i = 0, ii = xfa.length; i < ii; i += 2) {
+ let name;
+
+ if (i === 0) {
+ name = "xdp:xdp";
+ } else if (i === ii - 2) {
+ name = "/xdp:xdp";
+ } else {
+ name = xfa[i];
+ }
+
+ if (!entries.hasOwnProperty(name)) {
+ continue;
+ }
+
+ const data = this.xref.fetchIfRef(xfa[i + 1]);
+
+ if (!(0, _primitives.isStream)(data) || data.isEmpty) {
+ continue;
+ }
+
+ try {
+ entries[name] = (0, _util.stringToUTF8String)(data.getString());
+ } catch (_) {
+ (0, _util.warn)("XFA - Invalid utf-8 string.");
+ return null;
+ }
+ }
+
+ return entries;
+ }
+
+ get xfaFactory() {
+ if (this.pdfManager.enableXfa && this.formInfo.hasXfa && !this.formInfo.hasAcroForm) {
+ const data = this.xfaData;
+ return (0, _util.shadow)(this, "xfaFactory", data ? new _factory.XFAFactory(data) : null);
+ }
+
+ return (0, _util.shadow)(this, "xfaFaxtory", null);
+ }
+
+ get isPureXfa() {
+ return this.xfaFactory && this.xfaFactory.isValid();
+ }
+
+ get htmlForXfa() {
+ if (this.xfaFactory) {
+ return this.xfaFactory.getPages();
+ }
+
+ return null;
+ }
+
+ async loadXfaImages() {
+ const xfaImagesDict = await this.pdfManager.ensureCatalog("xfaImages");
+
+ if (!xfaImagesDict) {
+ return;
+ }
+
+ const keys = xfaImagesDict.getKeys();
+ const objectLoader = new _object_loader.ObjectLoader(xfaImagesDict, keys, this.xref);
+ await objectLoader.load();
+ const xfaImages = new Map();
+
+ for (const key of keys) {
+ const stream = xfaImagesDict.get(key);
+
+ if (!(0, _primitives.isStream)(stream)) {
+ continue;
+ }
+
+ xfaImages.set(key, stream.getBytes());
+ }
+
+ this.xfaFactory.setImages(xfaImages);
+ }
+
+ async loadXfaFonts(handler, task) {
+ const acroForm = await this.pdfManager.ensureCatalog("acroForm");
+
+ if (!acroForm) {
+ return;
+ }
+
+ const resources = await acroForm.getAsync("DR");
+
+ if (!(resources instanceof _primitives.Dict)) {
+ return;
+ }
+
+ const objectLoader = new _object_loader.ObjectLoader(resources, ["Font"], this.xref);
+ await objectLoader.load();
+ const fontRes = resources.get("Font");
+
+ if (!(fontRes instanceof _primitives.Dict)) {
+ return;
+ }
+
+ const options = Object.assign(Object.create(null), this.pdfManager.evaluatorOptions);
+ options.useSystemFonts = false;
+ const partialEvaluator = new _evaluator.PartialEvaluator({
+ xref: this.xref,
+ handler,
+ pageIndex: -1,
+ idFactory: this._globalIdFactory,
+ fontCache: this.catalog.fontCache,
+ builtInCMapCache: this.catalog.builtInCMapCache,
+ standardFontDataCache: this.catalog.standardFontDataCache,
+ options
+ });
+ const operatorList = new _operator_list.OperatorList();
+ const pdfFonts = [];
+ const initialState = {
+ get font() {
+ return pdfFonts[pdfFonts.length - 1];
+ },
+
+ set font(font) {
+ pdfFonts.push(font);
+ },
+
+ clone() {
+ return this;
+ }
+
+ };
+ const fonts = new Map();
+ fontRes.forEach((fontName, font) => {
+ fonts.set(fontName, font);
+ });
+ const promises = [];
+
+ for (const [fontName, font] of fonts) {
+ const descriptor = font.get("FontDescriptor");
+
+ if (!(descriptor instanceof _primitives.Dict)) {
+ continue;
+ }
+
+ let fontFamily = descriptor.get("FontFamily");
+ fontFamily = fontFamily.replace(/[ ]+([0-9])/g, "$1");
+ const fontWeight = descriptor.get("FontWeight");
+ const italicAngle = -descriptor.get("ItalicAngle");
+ const cssFontInfo = {
+ fontFamily,
+ fontWeight,
+ italicAngle
+ };
+
+ if (!(0, _core_utils.validateCSSFont)(cssFontInfo)) {
+ continue;
+ }
+
+ promises.push(partialEvaluator.handleSetFont(resources, [_primitives.Name.get(fontName), 1], null, operatorList, task, initialState, null, cssFontInfo).catch(function (reason) {
+ (0, _util.warn)(`loadXfaFonts: "${reason}".`);
+ return null;
+ }));
+ }
+
+ await Promise.all(promises);
+ const missingFonts = this.xfaFactory.setFonts(pdfFonts);
+
+ if (!missingFonts) {
+ return;
+ }
+
+ options.ignoreErrors = true;
+ promises.length = 0;
+ pdfFonts.length = 0;
+ const reallyMissingFonts = new Set();
+
+ for (const missing of missingFonts) {
+ if (!(0, _xfa_fonts.getXfaFontWidths)(`${missing}-Regular`)) {
+ reallyMissingFonts.add(missing);
+ }
+ }
+
+ if (reallyMissingFonts.size) {
+ missingFonts.push("PdfJS-Fallback");
+ }
+
+ for (const missing of missingFonts) {
+ if (reallyMissingFonts.has(missing)) {
+ continue;
+ }
+
+ for (const fontInfo of [{
+ name: "Regular",
+ fontWeight: 400,
+ italicAngle: 0
+ }, {
+ name: "Bold",
+ fontWeight: 700,
+ italicAngle: 0
+ }, {
+ name: "Italic",
+ fontWeight: 400,
+ italicAngle: 12
+ }, {
+ name: "BoldItalic",
+ fontWeight: 700,
+ italicAngle: 12
+ }]) {
+ const name = `${missing}-${fontInfo.name}`;
+ const widths = (0, _xfa_fonts.getXfaFontWidths)(name);
+ const dict = new _primitives.Dict(null);
+ dict.set("BaseFont", _primitives.Name.get(name));
+ dict.set("Type", _primitives.Name.get("Font"));
+ dict.set("Subtype", _primitives.Name.get("TrueType"));
+ dict.set("Encoding", _primitives.Name.get("WinAnsiEncoding"));
+ const descriptor = new _primitives.Dict(null);
+ descriptor.set("Widths", widths);
+ dict.set("FontDescriptor", descriptor);
+ promises.push(partialEvaluator.handleSetFont(resources, [_primitives.Name.get(name), 1], null, operatorList, task, initialState, dict, {
+ fontFamily: missing,
+ fontWeight: fontInfo.fontWeight,
+ italicAngle: fontInfo.italicAngle
+ }).catch(function (reason) {
+ (0, _util.warn)(`loadXfaFonts: "${reason}".`);
+ return null;
+ }));
+ }
+ }
+
+ await Promise.all(promises);
+ this.xfaFactory.appendFonts(pdfFonts, reallyMissingFonts);
+ }
+
+ async serializeXfaData(annotationStorage) {
+ if (this.xfaFactory) {
+ return this.xfaFactory.serializeData(annotationStorage);
+ }
+
+ return null;
+ }
+
get formInfo() {
const formInfo = {
+ hasFields: false,
hasAcroForm: false,
- hasXfa: false
+ hasXfa: false,
+ hasSignatures: false
};
const acroForm = this.catalog.acroForm;
@@ -3568,22 +4400,24 @@ class PDFDocument {
}
try {
- const xfa = acroForm.get("XFA");
- const hasXfa = Array.isArray(xfa) && xfa.length > 0 || (0, _primitives.isStream)(xfa) && !xfa.isEmpty;
- formInfo.hasXfa = hasXfa;
const fields = acroForm.get("Fields");
const hasFields = Array.isArray(fields) && fields.length > 0;
+ formInfo.hasFields = hasFields;
+ const xfa = acroForm.get("XFA");
+ formInfo.hasXfa = Array.isArray(xfa) && xfa.length > 0 || (0, _primitives.isStream)(xfa) && !xfa.isEmpty;
const sigFlags = acroForm.get("SigFlags");
+ const hasSignatures = !!(sigFlags & 0x1);
- const hasOnlyDocumentSignatures = !!(sigFlags & 0x1) && this._hasOnlyDocumentSignatures(fields);
+ const hasOnlyDocumentSignatures = hasSignatures && this._hasOnlyDocumentSignatures(fields);
formInfo.hasAcroForm = hasFields && !hasOnlyDocumentSignatures;
+ formInfo.hasSignatures = hasSignatures;
} catch (ex) {
if (ex instanceof _core_utils.MissingDataException) {
throw ex;
}
- (0, _util.info)("Cannot fetch form information.");
+ (0, _util.warn)(`Cannot fetch form information: "${ex}".`);
}
return (0, _util.shadow)(this, "formInfo", formInfo);
@@ -3613,7 +4447,8 @@ class PDFDocument {
IsLinearized: !!this.linearization,
IsAcroFormPresent: this.formInfo.hasAcroForm,
IsXFAPresent: this.formInfo.hasXfa,
- IsCollectionPresent: !!this.catalog.collection
+ IsCollectionPresent: !!this.catalog.collection,
+ IsSignaturesPresent: this.formInfo.hasSignatures
};
let infoDict;
@@ -3661,24 +4496,36 @@ class PDFDocument {
return (0, _util.shadow)(this, "documentInfo", docInfo);
}
- get fingerprint() {
- let hash;
- const idArray = this.xref.trailer.get("ID");
+ get fingerprints() {
+ function validate(data) {
+ return typeof data === "string" && data.length > 0 && data !== EMPTY_FINGERPRINT;
+ }
- if (Array.isArray(idArray) && idArray[0] && (0, _util.isString)(idArray[0]) && idArray[0] !== EMPTY_FINGERPRINT) {
- hash = (0, _util.stringToBytes)(idArray[0]);
- } else {
- hash = (0, _crypto.calculateMD5)(this.stream.getByteRange(0, FINGERPRINT_FIRST_BYTES), 0, FINGERPRINT_FIRST_BYTES);
+ function hexString(hash) {
+ const buf = [];
+
+ for (let i = 0, ii = hash.length; i < ii; i++) {
+ const hex = hash[i].toString(16);
+ buf.push(hex.padStart(2, "0"));
+ }
+
+ return buf.join("");
}
- const fingerprintBuf = [];
+ const idArray = this.xref.trailer.get("ID");
+ let hashOriginal, hashModified;
+
+ if (Array.isArray(idArray) && validate(idArray[0])) {
+ hashOriginal = (0, _util.stringToBytes)(idArray[0]);
- for (let i = 0, ii = hash.length; i < ii; i++) {
- const hex = hash[i].toString(16);
- fingerprintBuf.push(hex.padStart(2, "0"));
+ if (idArray[1] !== idArray[0] && validate(idArray[1])) {
+ hashModified = (0, _util.stringToBytes)(idArray[1]);
+ }
+ } else {
+ hashOriginal = (0, _crypto.calculateMD5)(this.stream.getByteRange(0, FINGERPRINT_FIRST_BYTES), 0, FINGERPRINT_FIRST_BYTES);
}
- return (0, _util.shadow)(this, "fingerprint", fingerprintBuf.join(""));
+ return (0, _util.shadow)(this, "fingerprints", [hexString(hashOriginal), hashModified ? hexString(hashModified) : null]);
}
_getLinearizationPage(pageIndex) {
@@ -3714,6 +4561,24 @@ class PDFDocument {
catalog,
linearization
} = this;
+
+ if (this.xfaFactory) {
+ return Promise.resolve(new Page({
+ pdfManager: this.pdfManager,
+ xref: this.xref,
+ pageIndex,
+ pageDict: _primitives.Dict.empty,
+ ref: null,
+ globalIdFactory: this._globalIdFactory,
+ fontCache: catalog.fontCache,
+ builtInCMapCache: catalog.builtInCMapCache,
+ standardFontDataCache: catalog.standardFontDataCache,
+ globalImageCache: catalog.globalImageCache,
+ nonBlendModesSet: catalog.nonBlendModesSet,
+ xfaFactory: this.xfaFactory
+ }));
+ }
+
const promise = linearization && linearization.pageFirst === pageIndex ? this._getLinearizationPage(pageIndex) : catalog.getPageDict(pageIndex);
return this._pagePromises[pageIndex] = promise.then(([pageDict, ref]) => {
return new Page({
@@ -3725,7 +4590,10 @@ class PDFDocument {
globalIdFactory: this._globalIdFactory,
fontCache: catalog.fontCache,
builtInCMapCache: catalog.builtInCMapCache,
- globalImageCache: catalog.globalImageCache
+ standardFontDataCache: catalog.standardFontDataCache,
+ globalImageCache: catalog.globalImageCache,
+ nonBlendModesSet: catalog.nonBlendModesSet,
+ xfaFactory: null
});
});
}
@@ -3748,13973 +4616,2553 @@ class PDFDocument {
return this.catalog ? this.catalog.cleanup(manuallyTriggered) : (0, _primitives.clearPrimitiveCaches)();
}
-}
-
-exports.PDFDocument = PDFDocument;
-
-/***/ }),
-/* 10 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.FileSpec = exports.XRef = exports.ObjectLoader = exports.Catalog = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var _primitives = __w_pdfjs_require__(5);
-
-var _parser = __w_pdfjs_require__(11);
-
-var _core_utils = __w_pdfjs_require__(8);
-
-var _crypto = __w_pdfjs_require__(22);
-
-var _colorspace = __w_pdfjs_require__(23);
-
-var _image_utils = __w_pdfjs_require__(24);
-
-function fetchDestination(dest) {
- return (0, _primitives.isDict)(dest) ? dest.get("D") : dest;
-}
-
-class Catalog {
- constructor(pdfManager, xref) {
- this.pdfManager = pdfManager;
- this.xref = xref;
- this._catDict = xref.getCatalogObj();
-
- if (!(0, _primitives.isDict)(this._catDict)) {
- throw new _util.FormatError("Catalog object is not a dictionary.");
- }
-
- this.fontCache = new _primitives.RefSetCache();
- this.builtInCMapCache = new Map();
- this.globalImageCache = new _image_utils.GlobalImageCache();
- this.pageKidsCountCache = new _primitives.RefSetCache();
- }
-
- get version() {
- const version = this._catDict.get("Version");
-
- if (!(0, _primitives.isName)(version)) {
- return (0, _util.shadow)(this, "version", null);
- }
-
- return (0, _util.shadow)(this, "version", version.name);
- }
-
- get collection() {
- let collection = null;
-
- try {
- const obj = this._catDict.get("Collection");
-
- if ((0, _primitives.isDict)(obj) && obj.size > 0) {
- collection = obj;
- }
- } catch (ex) {
- if (ex instanceof _core_utils.MissingDataException) {
- throw ex;
- }
-
- (0, _util.info)("Cannot fetch Collection entry; assuming no collection is present.");
- }
-
- return (0, _util.shadow)(this, "collection", collection);
- }
-
- get acroForm() {
- let acroForm = null;
-
- try {
- const obj = this._catDict.get("AcroForm");
-
- if ((0, _primitives.isDict)(obj) && obj.size > 0) {
- acroForm = obj;
- }
- } catch (ex) {
- if (ex instanceof _core_utils.MissingDataException) {
- throw ex;
- }
-
- (0, _util.info)("Cannot fetch AcroForm entry; assuming no forms are present.");
- }
-
- return (0, _util.shadow)(this, "acroForm", acroForm);
- }
-
- get metadata() {
- const streamRef = this._catDict.getRaw("Metadata");
-
- if (!(0, _primitives.isRef)(streamRef)) {
- return (0, _util.shadow)(this, "metadata", null);
- }
+ _collectFieldObjects(name, fieldRef, promises) {
+ const field = this.xref.fetchIfRef(fieldRef);
- const suppressEncryption = !(this.xref.encrypt && this.xref.encrypt.encryptMetadata);
- const stream = this.xref.fetch(streamRef, suppressEncryption);
- let metadata;
+ if (field.has("T")) {
+ const partName = (0, _util.stringToPDFString)(field.get("T"));
- if (stream && (0, _primitives.isDict)(stream.dict)) {
- const type = stream.dict.get("Type");
- const subtype = stream.dict.get("Subtype");
-
- if ((0, _primitives.isName)(type, "Metadata") && (0, _primitives.isName)(subtype, "XML")) {
- try {
- metadata = (0, _util.stringToUTF8String)((0, _util.bytesToString)(stream.getBytes()));
- } catch (e) {
- if (e instanceof _core_utils.MissingDataException) {
- throw e;
- }
-
- (0, _util.info)("Skipping invalid metadata.");
- }
- }
- }
-
- return (0, _util.shadow)(this, "metadata", metadata);
- }
-
- get toplevelPagesDict() {
- const pagesObj = this._catDict.get("Pages");
-
- if (!(0, _primitives.isDict)(pagesObj)) {
- throw new _util.FormatError("Invalid top-level pages dictionary.");
- }
-
- return (0, _util.shadow)(this, "toplevelPagesDict", pagesObj);
- }
-
- get documentOutline() {
- let obj = null;
-
- try {
- obj = this._readDocumentOutline();
- } catch (ex) {
- if (ex instanceof _core_utils.MissingDataException) {
- throw ex;
+ if (name === "") {
+ name = partName;
+ } else {
+ name = `${name}.${partName}`;
}
-
- (0, _util.warn)("Unable to read document outline.");
}
- return (0, _util.shadow)(this, "documentOutline", obj);
- }
-
- _readDocumentOutline() {
- let obj = this._catDict.get("Outlines");
-
- if (!(0, _primitives.isDict)(obj)) {
- return null;
+ if (!promises.has(name)) {
+ promises.set(name, []);
}
- obj = obj.getRaw("First");
-
- if (!(0, _primitives.isRef)(obj)) {
+ promises.get(name).push(_annotation.AnnotationFactory.create(this.xref, fieldRef, this.pdfManager, this._localIdFactory, true).then(annotation => annotation && annotation.getFieldObject()).catch(function (reason) {
+ (0, _util.warn)(`_collectFieldObjects: "${reason}".`);
return null;
- }
-
- const root = {
- items: []
- };
- const queue = [{
- obj,
- parent: root
- }];
- const processed = new _primitives.RefSet();
- processed.put(obj);
- const xref = this.xref,
- blackColor = new Uint8ClampedArray(3);
-
- while (queue.length > 0) {
- const i = queue.shift();
- const outlineDict = xref.fetchIfRef(i.obj);
-
- if (outlineDict === null) {
- continue;
- }
-
- if (!outlineDict.has("Title")) {
- throw new _util.FormatError("Invalid outline item encountered.");
- }
-
- const data = {
- url: null,
- dest: null
- };
- Catalog.parseDestDictionary({
- destDict: outlineDict,
- resultObj: data,
- docBaseUrl: this.pdfManager.docBaseUrl
- });
- const title = outlineDict.get("Title");
- const flags = outlineDict.get("F") || 0;
- const color = outlineDict.getArray("C");
- const count = outlineDict.get("Count");
- let rgbColor = blackColor;
-
- if (Array.isArray(color) && color.length === 3 && (color[0] !== 0 || color[1] !== 0 || color[2] !== 0)) {
- rgbColor = _colorspace.ColorSpace.singletons.rgb.getRgb(color, 0);
- }
-
- const outlineItem = {
- dest: data.dest,
- url: data.url,
- unsafeUrl: data.unsafeUrl,
- newWindow: data.newWindow,
- title: (0, _util.stringToPDFString)(title),
- color: rgbColor,
- count: Number.isInteger(count) ? count : undefined,
- bold: !!(flags & 2),
- italic: !!(flags & 1),
- items: []
- };
- i.parent.items.push(outlineItem);
- obj = outlineDict.getRaw("First");
-
- if ((0, _primitives.isRef)(obj) && !processed.has(obj)) {
- queue.push({
- obj,
- parent: outlineItem
- });
- processed.put(obj);
- }
-
- obj = outlineDict.getRaw("Next");
-
- if ((0, _primitives.isRef)(obj) && !processed.has(obj)) {
- queue.push({
- obj,
- parent: i.parent
- });
- processed.put(obj);
- }
- }
-
- return root.items.length > 0 ? root.items : null;
- }
+ }));
- get permissions() {
- let permissions = null;
+ if (field.has("Kids")) {
+ const kids = field.get("Kids");
- try {
- permissions = this._readPermissions();
- } catch (ex) {
- if (ex instanceof _core_utils.MissingDataException) {
- throw ex;
+ for (const kid of kids) {
+ this._collectFieldObjects(name, kid, promises);
}
-
- (0, _util.warn)("Unable to read permissions.");
}
-
- return (0, _util.shadow)(this, "permissions", permissions);
}
- _readPermissions() {
- const encrypt = this.xref.trailer.get("Encrypt");
-
- if (!(0, _primitives.isDict)(encrypt)) {
- return null;
+ get fieldObjects() {
+ if (!this.formInfo.hasFields) {
+ return (0, _util.shadow)(this, "fieldObjects", Promise.resolve(null));
}
- let flags = encrypt.get("P");
+ const allFields = Object.create(null);
+ const fieldPromises = new Map();
- if (!(0, _util.isNum)(flags)) {
- return null;
+ for (const fieldRef of this.catalog.acroForm.get("Fields")) {
+ this._collectFieldObjects("", fieldRef, fieldPromises);
}
- flags += 2 ** 32;
- const permissions = [];
+ const allPromises = [];
- for (const key in _util.PermissionFlag) {
- const value = _util.PermissionFlag[key];
+ for (const [name, promises] of fieldPromises) {
+ allPromises.push(Promise.all(promises).then(fields => {
+ fields = fields.filter(field => !!field);
- if (flags & value) {
- permissions.push(value);
- }
- }
-
- return permissions;
- }
-
- get optionalContentConfig() {
- let config = null;
-
- try {
- const properties = this._catDict.get("OCProperties");
-
- if (!properties) {
- return (0, _util.shadow)(this, "optionalContentConfig", null);
- }
-
- const defaultConfig = properties.get("D");
-
- if (!defaultConfig) {
- return (0, _util.shadow)(this, "optionalContentConfig", null);
- }
-
- const groupsData = properties.get("OCGs");
-
- if (!Array.isArray(groupsData)) {
- return (0, _util.shadow)(this, "optionalContentConfig", null);
- }
-
- const groups = [];
- const groupRefs = [];
-
- for (const groupRef of groupsData) {
- if (!(0, _primitives.isRef)(groupRef)) {
- continue;
+ if (fields.length > 0) {
+ allFields[name] = fields;
}
-
- groupRefs.push(groupRef);
- const group = this.xref.fetchIfRef(groupRef);
- groups.push({
- id: groupRef.toString(),
- name: (0, _util.isString)(group.get("Name")) ? (0, _util.stringToPDFString)(group.get("Name")) : null,
- intent: (0, _util.isString)(group.get("Intent")) ? (0, _util.stringToPDFString)(group.get("Intent")) : null
- });
- }
-
- config = this._readOptionalContentConfig(defaultConfig, groupRefs);
- config.groups = groups;
- } catch (ex) {
- if (ex instanceof _core_utils.MissingDataException) {
- throw ex;
- }
-
- (0, _util.warn)(`Unable to read optional content config: ${ex}`);
+ }));
}
- return (0, _util.shadow)(this, "optionalContentConfig", config);
+ return (0, _util.shadow)(this, "fieldObjects", Promise.all(allPromises).then(() => allFields));
}
- _readOptionalContentConfig(config, contentGroupRefs) {
- function parseOnOff(refs) {
- const onParsed = [];
-
- if (Array.isArray(refs)) {
- for (const value of refs) {
- if (!(0, _primitives.isRef)(value)) {
- continue;
- }
-
- if (contentGroupRefs.includes(value)) {
- onParsed.push(value.toString());
- }
- }
- }
-
- return onParsed;
- }
-
- function parseOrder(refs, nestedLevels = 0) {
- if (!Array.isArray(refs)) {
- return null;
- }
-
- const order = [];
-
- for (const value of refs) {
- if ((0, _primitives.isRef)(value) && contentGroupRefs.includes(value)) {
- parsedOrderRefs.put(value);
- order.push(value.toString());
- continue;
- }
-
- const nestedOrder = parseNestedOrder(value, nestedLevels);
-
- if (nestedOrder) {
- order.push(nestedOrder);
- }
- }
-
- if (nestedLevels > 0) {
- return order;
- }
-
- const hiddenGroups = [];
-
- for (const groupRef of contentGroupRefs) {
- if (parsedOrderRefs.has(groupRef)) {
- continue;
- }
-
- hiddenGroups.push(groupRef.toString());
- }
-
- if (hiddenGroups.length) {
- order.push({
- name: null,
- order: hiddenGroups
- });
- }
-
- return order;
- }
-
- function parseNestedOrder(ref, nestedLevels) {
- if (++nestedLevels > MAX_NESTED_LEVELS) {
- (0, _util.warn)("parseNestedOrder - reached MAX_NESTED_LEVELS.");
- return null;
- }
-
- const value = xref.fetchIfRef(ref);
-
- if (!Array.isArray(value)) {
- return null;
- }
-
- const nestedName = xref.fetchIfRef(value[0]);
-
- if (typeof nestedName !== "string") {
- return null;
- }
-
- const nestedOrder = parseOrder(value.slice(1), nestedLevels);
-
- if (!nestedOrder || !nestedOrder.length) {
- return null;
- }
-
- return {
- name: (0, _util.stringToPDFString)(nestedName),
- order: nestedOrder
- };
- }
-
- const xref = this.xref,
- parsedOrderRefs = new _primitives.RefSet(),
- MAX_NESTED_LEVELS = 10;
- return {
- name: (0, _util.isString)(config.get("Name")) ? (0, _util.stringToPDFString)(config.get("Name")) : null,
- creator: (0, _util.isString)(config.get("Creator")) ? (0, _util.stringToPDFString)(config.get("Creator")) : null,
- baseState: (0, _primitives.isName)(config.get("BaseState")) ? config.get("BaseState").name : null,
- on: parseOnOff(config.get("ON")),
- off: parseOnOff(config.get("OFF")),
- order: parseOrder(config.get("Order")),
- groups: null
- };
+ get hasJSActions() {
+ const promise = this.pdfManager.ensureDoc("_parseHasJSActions");
+ return (0, _util.shadow)(this, "hasJSActions", promise);
}
- get numPages() {
- const obj = this.toplevelPagesDict.get("Count");
+ async _parseHasJSActions() {
+ const [catalogJsActions, fieldObjects] = await Promise.all([this.pdfManager.ensureCatalog("jsActions"), this.pdfManager.ensureDoc("fieldObjects")]);
- if (!Number.isInteger(obj)) {
- throw new _util.FormatError("Page count in top-level pages dictionary is not an integer.");
+ if (catalogJsActions) {
+ return true;
}
- return (0, _util.shadow)(this, "numPages", obj);
- }
-
- get destinations() {
- const obj = this._readDests(),
- dests = Object.create(null);
-
- if (obj instanceof NameTree) {
- const names = obj.getAll();
-
- for (const name in names) {
- dests[name] = fetchDestination(names[name]);
- }
- } else if (obj instanceof _primitives.Dict) {
- obj.forEach(function (key, value) {
- if (value) {
- dests[key] = fetchDestination(value);
- }
- });
+ if (fieldObjects) {
+ return Object.values(fieldObjects).some(fieldObject => fieldObject.some(object => object.actions !== null));
}
- return (0, _util.shadow)(this, "destinations", dests);
+ return false;
}
- getDestination(destinationId) {
- const obj = this._readDests();
+ get calculationOrderIds() {
+ const acroForm = this.catalog.acroForm;
- if (obj instanceof NameTree || obj instanceof _primitives.Dict) {
- return fetchDestination(obj.get(destinationId) || null);
+ if (!acroForm || !acroForm.has("CO")) {
+ return (0, _util.shadow)(this, "calculationOrderIds", null);
}
- return null;
- }
-
- _readDests() {
- const obj = this._catDict.get("Names");
+ const calculationOrder = acroForm.get("CO");
- if (obj && obj.has("Dests")) {
- return new NameTree(obj.getRaw("Dests"), this.xref);
- } else if (this._catDict.has("Dests")) {
- return this._catDict.get("Dests");
+ if (!Array.isArray(calculationOrder) || calculationOrder.length === 0) {
+ return (0, _util.shadow)(this, "calculationOrderIds", null);
}
- return undefined;
- }
-
- get pageLabels() {
- let obj = null;
-
- try {
- obj = this._readPageLabels();
- } catch (ex) {
- if (ex instanceof _core_utils.MissingDataException) {
- throw ex;
- }
+ const ids = calculationOrder.filter(_primitives.isRef).map(ref => ref.toString());
- (0, _util.warn)("Unable to read page labels.");
+ if (ids.length === 0) {
+ return (0, _util.shadow)(this, "calculationOrderIds", null);
}
- return (0, _util.shadow)(this, "pageLabels", obj);
+ return (0, _util.shadow)(this, "calculationOrderIds", ids);
}
- _readPageLabels() {
- const obj = this._catDict.getRaw("PageLabels");
-
- if (!obj) {
- return null;
- }
-
- const pageLabels = new Array(this.numPages);
- let style = null,
- prefix = "";
- const numberTree = new NumberTree(obj, this.xref);
- const nums = numberTree.getAll();
- let currentLabel = "",
- currentIndex = 1;
-
- for (let i = 0, ii = this.numPages; i < ii; i++) {
- if (i in nums) {
- const labelDict = nums[i];
-
- if (!(0, _primitives.isDict)(labelDict)) {
- throw new _util.FormatError("PageLabel is not a dictionary.");
- }
-
- if (labelDict.has("Type") && !(0, _primitives.isName)(labelDict.get("Type"), "PageLabel")) {
- throw new _util.FormatError("Invalid type in PageLabel dictionary.");
- }
-
- if (labelDict.has("S")) {
- const s = labelDict.get("S");
-
- if (!(0, _primitives.isName)(s)) {
- throw new _util.FormatError("Invalid style in PageLabel dictionary.");
- }
-
- style = s.name;
- } else {
- style = null;
- }
-
- if (labelDict.has("P")) {
- const p = labelDict.get("P");
-
- if (!(0, _util.isString)(p)) {
- throw new _util.FormatError("Invalid prefix in PageLabel dictionary.");
- }
+}
- prefix = (0, _util.stringToPDFString)(p);
- } else {
- prefix = "";
- }
+exports.PDFDocument = PDFDocument;
- if (labelDict.has("St")) {
- const st = labelDict.get("St");
+/***/ }),
+/* 12 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
- if (!(Number.isInteger(st) && st >= 1)) {
- throw new _util.FormatError("Invalid start in PageLabel dictionary.");
- }
- currentIndex = st;
- } else {
- currentIndex = 1;
- }
- }
- switch (style) {
- case "D":
- currentLabel = currentIndex;
- break;
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.getQuadPoints = getQuadPoints;
+exports.MarkupAnnotation = exports.AnnotationFactory = exports.AnnotationBorderStyle = exports.Annotation = void 0;
- case "R":
- case "r":
- currentLabel = (0, _core_utils.toRomanNumerals)(currentIndex, style === "r");
- break;
+var _util = __w_pdfjs_require__(2);
- case "A":
- case "a":
- const LIMIT = 26;
- const A_UPPER_CASE = 0x41,
- A_LOWER_CASE = 0x61;
- const baseCharCode = style === "a" ? A_LOWER_CASE : A_UPPER_CASE;
- const letterIndex = currentIndex - 1;
- const character = String.fromCharCode(baseCharCode + letterIndex % LIMIT);
- const charBuf = [];
+var _core_utils = __w_pdfjs_require__(9);
- for (let j = 0, jj = letterIndex / LIMIT | 0; j <= jj; j++) {
- charBuf.push(character);
- }
+var _default_appearance = __w_pdfjs_require__(13);
- currentLabel = charBuf.join("");
- break;
+var _primitives = __w_pdfjs_require__(5);
- default:
- if (style) {
- throw new _util.FormatError(`Invalid style "${style}" in PageLabel dictionary.`);
- }
+var _catalog = __w_pdfjs_require__(64);
- currentLabel = "";
- }
+var _colorspace = __w_pdfjs_require__(14);
- pageLabels[i] = prefix + currentLabel;
- currentIndex++;
- }
+var _file_spec = __w_pdfjs_require__(66);
- return pageLabels;
- }
+var _object_loader = __w_pdfjs_require__(70);
- get pageLayout() {
- const obj = this._catDict.get("PageLayout");
+var _operator_list = __w_pdfjs_require__(62);
- let pageLayout = "";
+var _stream = __w_pdfjs_require__(10);
- if ((0, _primitives.isName)(obj)) {
- switch (obj.name) {
- case "SinglePage":
- case "OneColumn":
- case "TwoColumnLeft":
- case "TwoColumnRight":
- case "TwoPageLeft":
- case "TwoPageRight":
- pageLayout = obj.name;
- }
- }
+var _writer = __w_pdfjs_require__(71);
- return (0, _util.shadow)(this, "pageLayout", pageLayout);
+class AnnotationFactory {
+ static create(xref, ref, pdfManager, idFactory, collectFields) {
+ return Promise.all([pdfManager.ensureCatalog("acroForm"), collectFields ? this._getPageIndex(xref, ref, pdfManager) : -1]).then(([acroForm, pageIndex]) => pdfManager.ensure(this, "_create", [xref, ref, pdfManager, idFactory, acroForm, collectFields, pageIndex]));
}
- get pageMode() {
- const obj = this._catDict.get("PageMode");
-
- let pageMode = "UseNone";
+ static _create(xref, ref, pdfManager, idFactory, acroForm, collectFields, pageIndex = -1) {
+ const dict = xref.fetchIfRef(ref);
- if ((0, _primitives.isName)(obj)) {
- switch (obj.name) {
- case "UseNone":
- case "UseOutlines":
- case "UseThumbs":
- case "FullScreen":
- case "UseOC":
- case "UseAttachments":
- pageMode = obj.name;
- }
+ if (!(0, _primitives.isDict)(dict)) {
+ return undefined;
}
- return (0, _util.shadow)(this, "pageMode", pageMode);
- }
-
- get viewerPreferences() {
- const ViewerPreferencesValidators = {
- HideToolbar: _util.isBool,
- HideMenubar: _util.isBool,
- HideWindowUI: _util.isBool,
- FitWindow: _util.isBool,
- CenterWindow: _util.isBool,
- DisplayDocTitle: _util.isBool,
- NonFullScreenPageMode: _primitives.isName,
- Direction: _primitives.isName,
- ViewArea: _primitives.isName,
- ViewClip: _primitives.isName,
- PrintArea: _primitives.isName,
- PrintClip: _primitives.isName,
- PrintScaling: _primitives.isName,
- Duplex: _primitives.isName,
- PickTrayByPDFSize: _util.isBool,
- PrintPageRange: Array.isArray,
- NumCopies: Number.isInteger
+ const id = (0, _primitives.isRef)(ref) ? ref.toString() : `annot_${idFactory.createObjId()}`;
+ let subtype = dict.get("Subtype");
+ subtype = (0, _primitives.isName)(subtype) ? subtype.name : null;
+ const parameters = {
+ xref,
+ ref,
+ dict,
+ subtype,
+ id,
+ pdfManager,
+ acroForm: acroForm instanceof _primitives.Dict ? acroForm : _primitives.Dict.empty,
+ collectFields,
+ pageIndex
};
- const obj = this._catDict.get("ViewerPreferences");
-
- let prefs = null;
-
- if ((0, _primitives.isDict)(obj)) {
- for (const key in ViewerPreferencesValidators) {
- if (!obj.has(key)) {
- continue;
- }
-
- const value = obj.get(key);
-
- if (!ViewerPreferencesValidators[key](value)) {
- (0, _util.info)(`Bad value in ViewerPreferences for "${key}".`);
- continue;
- }
-
- let prefValue;
-
- switch (key) {
- case "NonFullScreenPageMode":
- switch (value.name) {
- case "UseNone":
- case "UseOutlines":
- case "UseThumbs":
- case "UseOC":
- prefValue = value.name;
- break;
-
- default:
- prefValue = "UseNone";
- }
-
- break;
-
- case "Direction":
- switch (value.name) {
- case "L2R":
- case "R2L":
- prefValue = value.name;
- break;
-
- default:
- prefValue = "L2R";
- }
-
- break;
-
- case "ViewArea":
- case "ViewClip":
- case "PrintArea":
- case "PrintClip":
- switch (value.name) {
- case "MediaBox":
- case "CropBox":
- case "BleedBox":
- case "TrimBox":
- case "ArtBox":
- prefValue = value.name;
- break;
-
- default:
- prefValue = "CropBox";
- }
-
- break;
-
- case "PrintScaling":
- switch (value.name) {
- case "None":
- case "AppDefault":
- prefValue = value.name;
- break;
-
- default:
- prefValue = "AppDefault";
- }
-
- break;
-
- case "Duplex":
- switch (value.name) {
- case "Simplex":
- case "DuplexFlipShortEdge":
- case "DuplexFlipLongEdge":
- prefValue = value.name;
- break;
-
- default:
- prefValue = "None";
- }
-
- break;
-
- case "PrintPageRange":
- const length = value.length;
-
- if (length % 2 !== 0) {
- break;
- }
-
- const isValid = value.every((page, i, arr) => {
- return Number.isInteger(page) && page > 0 && (i === 0 || page >= arr[i - 1]) && page <= this.numPages;
- });
-
- if (isValid) {
- prefValue = value;
- }
-
- break;
-
- case "NumCopies":
- if (value > 0) {
- prefValue = value;
- }
-
- break;
-
- default:
- if (typeof value !== "boolean") {
- throw new _util.FormatError(`viewerPreferences - expected a boolean value for: ${key}`);
- }
-
- prefValue = value;
- }
-
- if (prefValue !== undefined) {
- if (!prefs) {
- prefs = Object.create(null);
- }
-
- prefs[key] = prefValue;
- } else {
- (0, _util.info)(`Bad value in ViewerPreferences for "${key}".`);
- }
- }
- }
-
- return (0, _util.shadow)(this, "viewerPreferences", prefs);
- }
-
- get openAction() {
- const obj = this._catDict.get("OpenAction");
-
- let openAction = null;
-
- if ((0, _primitives.isDict)(obj)) {
- const destDict = new _primitives.Dict(this.xref);
- destDict.set("A", obj);
- const resultObj = {
- url: null,
- dest: null,
- action: null
- };
- Catalog.parseDestDictionary({
- destDict,
- resultObj
- });
-
- if (Array.isArray(resultObj.dest)) {
- if (!openAction) {
- openAction = Object.create(null);
- }
-
- openAction.dest = resultObj.dest;
- } else if (resultObj.action) {
- if (!openAction) {
- openAction = Object.create(null);
- }
-
- openAction.action = resultObj.action;
- }
- } else if (Array.isArray(obj)) {
- if (!openAction) {
- openAction = Object.create(null);
- }
-
- openAction.dest = obj;
- }
-
- return (0, _util.shadow)(this, "openAction", openAction);
- }
-
- get attachments() {
- const obj = this._catDict.get("Names");
-
- let attachments = null;
-
- if (obj && obj.has("EmbeddedFiles")) {
- const nameTree = new NameTree(obj.getRaw("EmbeddedFiles"), this.xref);
- const names = nameTree.getAll();
-
- for (const name in names) {
- const fs = new FileSpec(names[name], this.xref);
-
- if (!attachments) {
- attachments = Object.create(null);
- }
-
- attachments[(0, _util.stringToPDFString)(name)] = fs.serializable;
- }
- }
-
- return (0, _util.shadow)(this, "attachments", attachments);
- }
-
- get javaScript() {
- const obj = this._catDict.get("Names");
-
- let javaScript = null;
-
- function appendIfJavaScriptDict(jsDict) {
- const type = jsDict.get("S");
-
- if (!(0, _primitives.isName)(type, "JavaScript")) {
- return;
- }
-
- let js = jsDict.get("JS");
-
- if ((0, _primitives.isStream)(js)) {
- js = (0, _util.bytesToString)(js.getBytes());
- } else if (!(0, _util.isString)(js)) {
- return;
- }
-
- if (!javaScript) {
- javaScript = [];
- }
-
- javaScript.push((0, _util.stringToPDFString)(js));
- }
-
- if (obj && obj.has("JavaScript")) {
- const nameTree = new NameTree(obj.getRaw("JavaScript"), this.xref);
- const names = nameTree.getAll();
-
- for (const name in names) {
- const jsDict = names[name];
-
- if ((0, _primitives.isDict)(jsDict)) {
- appendIfJavaScriptDict(jsDict);
- }
- }
- }
-
- const openAction = this._catDict.get("OpenAction");
-
- if ((0, _primitives.isDict)(openAction) && (0, _primitives.isName)(openAction.get("S"), "JavaScript")) {
- appendIfJavaScriptDict(openAction);
- }
-
- return (0, _util.shadow)(this, "javaScript", javaScript);
- }
-
- fontFallback(id, handler) {
- const promises = [];
- this.fontCache.forEach(function (promise) {
- promises.push(promise);
- });
- return Promise.all(promises).then(translatedFonts => {
- for (const translatedFont of translatedFonts) {
- if (translatedFont.loadedName === id) {
- translatedFont.fallback(handler);
- return;
- }
- }
- });
- }
-
- cleanup(manuallyTriggered = false) {
- (0, _primitives.clearPrimitiveCaches)();
- this.globalImageCache.clear(manuallyTriggered);
- this.pageKidsCountCache.clear();
- const promises = [];
- this.fontCache.forEach(function (promise) {
- promises.push(promise);
- });
- return Promise.all(promises).then(translatedFonts => {
- for (const {
- dict
- } of translatedFonts) {
- delete dict.translated;
- }
-
- this.fontCache.clear();
- this.builtInCMapCache.clear();
- });
- }
-
- getPageDict(pageIndex) {
- const capability = (0, _util.createPromiseCapability)();
- const nodesToVisit = [this._catDict.getRaw("Pages")];
- const visitedNodes = new _primitives.RefSet();
- const xref = this.xref,
- pageKidsCountCache = this.pageKidsCountCache;
- let count,
- currentPageIndex = 0;
-
- function next() {
- while (nodesToVisit.length) {
- const currentNode = nodesToVisit.pop();
-
- if ((0, _primitives.isRef)(currentNode)) {
- count = pageKidsCountCache.get(currentNode);
-
- if (count > 0 && currentPageIndex + count < pageIndex) {
- currentPageIndex += count;
- continue;
- }
-
- if (visitedNodes.has(currentNode)) {
- capability.reject(new _util.FormatError("Pages tree contains circular reference."));
- return;
- }
-
- visitedNodes.put(currentNode);
- xref.fetchAsync(currentNode).then(function (obj) {
- if ((0, _primitives.isDict)(obj, "Page") || (0, _primitives.isDict)(obj) && !obj.has("Kids")) {
- if (pageIndex === currentPageIndex) {
- if (currentNode && !pageKidsCountCache.has(currentNode)) {
- pageKidsCountCache.put(currentNode, 1);
- }
-
- capability.resolve([obj, currentNode]);
- } else {
- currentPageIndex++;
- next();
- }
-
- return;
- }
+ switch (subtype) {
+ case "Link":
+ return new LinkAnnotation(parameters);
- nodesToVisit.push(obj);
- next();
- }, capability.reject);
- return;
- }
+ case "Text":
+ return new TextAnnotation(parameters);
- if (!(0, _primitives.isDict)(currentNode)) {
- capability.reject(new _util.FormatError("Page dictionary kid reference points to wrong type of object."));
- return;
- }
+ case "Widget":
+ let fieldType = (0, _core_utils.getInheritableProperty)({
+ dict,
+ key: "FT"
+ });
+ fieldType = (0, _primitives.isName)(fieldType) ? fieldType.name : null;
- count = currentNode.get("Count");
+ switch (fieldType) {
+ case "Tx":
+ return new TextWidgetAnnotation(parameters);
- if (Number.isInteger(count) && count >= 0) {
- const objId = currentNode.objId;
+ case "Btn":
+ return new ButtonWidgetAnnotation(parameters);
- if (objId && !pageKidsCountCache.has(objId)) {
- pageKidsCountCache.put(objId, count);
- }
+ case "Ch":
+ return new ChoiceWidgetAnnotation(parameters);
- if (currentPageIndex + count <= pageIndex) {
- currentPageIndex += count;
- continue;
- }
+ case "Sig":
+ return new SignatureWidgetAnnotation(parameters);
}
- const kids = currentNode.get("Kids");
-
- if (!Array.isArray(kids)) {
- if ((0, _primitives.isName)(currentNode.get("Type"), "Page") || !currentNode.has("Type") && currentNode.has("Contents")) {
- if (currentPageIndex === pageIndex) {
- capability.resolve([currentNode, null]);
- return;
- }
+ (0, _util.warn)(`Unimplemented widget field type "${fieldType}", ` + "falling back to base field type.");
+ return new WidgetAnnotation(parameters);
- currentPageIndex++;
- continue;
- }
+ case "Popup":
+ return new PopupAnnotation(parameters);
- capability.reject(new _util.FormatError("Page dictionary kids object is not an array."));
- return;
- }
+ case "FreeText":
+ return new FreeTextAnnotation(parameters);
- for (let last = kids.length - 1; last >= 0; last--) {
- nodesToVisit.push(kids[last]);
- }
- }
+ case "Line":
+ return new LineAnnotation(parameters);
- capability.reject(new Error(`Page index ${pageIndex} not found.`));
- }
+ case "Square":
+ return new SquareAnnotation(parameters);
- next();
- return capability.promise;
- }
+ case "Circle":
+ return new CircleAnnotation(parameters);
- getPageIndex(pageRef) {
- const xref = this.xref;
+ case "PolyLine":
+ return new PolylineAnnotation(parameters);
- function pagesBeforeRef(kidRef) {
- let total = 0,
- parentRef;
- return xref.fetchAsync(kidRef).then(function (node) {
- if ((0, _primitives.isRefsEqual)(kidRef, pageRef) && !(0, _primitives.isDict)(node, "Page") && !((0, _primitives.isDict)(node) && !node.has("Type") && node.has("Contents"))) {
- throw new _util.FormatError("The reference does not point to a /Page dictionary.");
- }
+ case "Polygon":
+ return new PolygonAnnotation(parameters);
- if (!node) {
- return null;
- }
+ case "Caret":
+ return new CaretAnnotation(parameters);
- if (!(0, _primitives.isDict)(node)) {
- throw new _util.FormatError("Node must be a dictionary.");
- }
+ case "Ink":
+ return new InkAnnotation(parameters);
- parentRef = node.getRaw("Parent");
- return node.getAsync("Parent");
- }).then(function (parent) {
- if (!parent) {
- return null;
- }
+ case "Highlight":
+ return new HighlightAnnotation(parameters);
- if (!(0, _primitives.isDict)(parent)) {
- throw new _util.FormatError("Parent must be a dictionary.");
- }
+ case "Underline":
+ return new UnderlineAnnotation(parameters);
- return parent.getAsync("Kids");
- }).then(function (kids) {
- if (!kids) {
- return null;
- }
+ case "Squiggly":
+ return new SquigglyAnnotation(parameters);
- const kidPromises = [];
- let found = false;
+ case "StrikeOut":
+ return new StrikeOutAnnotation(parameters);
- for (let i = 0, ii = kids.length; i < ii; i++) {
- const kid = kids[i];
+ case "Stamp":
+ return new StampAnnotation(parameters);
- if (!(0, _primitives.isRef)(kid)) {
- throw new _util.FormatError("Kid must be a reference.");
- }
+ case "FileAttachment":
+ return new FileAttachmentAnnotation(parameters);
- if ((0, _primitives.isRefsEqual)(kid, kidRef)) {
- found = true;
- break;
+ default:
+ if (!collectFields) {
+ if (!subtype) {
+ (0, _util.warn)("Annotation is missing the required /Subtype.");
+ } else {
+ (0, _util.warn)(`Unimplemented annotation type "${subtype}", ` + "falling back to base annotation.");
}
-
- kidPromises.push(xref.fetchAsync(kid).then(function (obj) {
- if (!(0, _primitives.isDict)(obj)) {
- throw new _util.FormatError("Kid node must be a dictionary.");
- }
-
- if (obj.has("Count")) {
- total += obj.get("Count");
- } else {
- total++;
- }
- }));
}
- if (!found) {
- throw new _util.FormatError("Kid reference not found in parent's kids.");
- }
-
- return Promise.all(kidPromises).then(function () {
- return [total, parentRef];
- });
- });
- }
-
- let total = 0;
-
- function next(ref) {
- return pagesBeforeRef(ref).then(function (args) {
- if (!args) {
- return total;
- }
-
- const [count, parentRef] = args;
- total += count;
- return next(parentRef);
- });
+ return new Annotation(parameters);
}
-
- return next(pageRef);
}
- static parseDestDictionary(params) {
- function addDefaultProtocolToUrl(url) {
- return url.startsWith("www.") ? `http://${url}` : url;
- }
-
- function tryConvertUrlEncoding(url) {
- try {
- return (0, _util.stringToUTF8String)(url);
- } catch (e) {
- return url;
- }
- }
-
- const destDict = params.destDict;
-
- if (!(0, _primitives.isDict)(destDict)) {
- (0, _util.warn)("parseDestDictionary: `destDict` must be a dictionary.");
- return;
- }
-
- const resultObj = params.resultObj;
-
- if (typeof resultObj !== "object") {
- (0, _util.warn)("parseDestDictionary: `resultObj` must be an object.");
- return;
- }
-
- const docBaseUrl = params.docBaseUrl || null;
- let action = destDict.get("A"),
- url,
- dest;
-
- if (!(0, _primitives.isDict)(action) && destDict.has("Dest")) {
- action = destDict.get("Dest");
- }
-
- if ((0, _primitives.isDict)(action)) {
- const actionType = action.get("S");
-
- if (!(0, _primitives.isName)(actionType)) {
- (0, _util.warn)("parseDestDictionary: Invalid type in Action dictionary.");
- return;
- }
-
- const actionName = actionType.name;
-
- switch (actionName) {
- case "URI":
- url = action.get("URI");
-
- if ((0, _primitives.isName)(url)) {
- url = "/" + url.name;
- } else if ((0, _util.isString)(url)) {
- url = addDefaultProtocolToUrl(url);
- }
-
- break;
-
- case "GoTo":
- dest = action.get("D");
- break;
-
- case "Launch":
- case "GoToR":
- const urlDict = action.get("F");
-
- if ((0, _primitives.isDict)(urlDict)) {
- url = urlDict.get("F") || null;
- } else if ((0, _util.isString)(urlDict)) {
- url = urlDict;
- }
-
- let remoteDest = action.get("D");
-
- if (remoteDest) {
- if ((0, _primitives.isName)(remoteDest)) {
- remoteDest = remoteDest.name;
- }
-
- if ((0, _util.isString)(url)) {
- const baseUrl = url.split("#")[0];
-
- if ((0, _util.isString)(remoteDest)) {
- url = baseUrl + "#" + remoteDest;
- } else if (Array.isArray(remoteDest)) {
- url = baseUrl + "#" + JSON.stringify(remoteDest);
- }
- }
- }
-
- const newWindow = action.get("NewWindow");
-
- if ((0, _util.isBool)(newWindow)) {
- resultObj.newWindow = newWindow;
- }
-
- break;
-
- case "Named":
- const namedAction = action.get("N");
-
- if ((0, _primitives.isName)(namedAction)) {
- resultObj.action = namedAction.name;
- }
-
- break;
-
- case "JavaScript":
- const jsAction = action.get("JS");
- let js;
-
- if ((0, _primitives.isStream)(jsAction)) {
- js = (0, _util.bytesToString)(jsAction.getBytes());
- } else if ((0, _util.isString)(jsAction)) {
- js = jsAction;
- }
-
- if (js) {
- const URL_OPEN_METHODS = ["app.launchURL", "window.open"];
- const regex = new RegExp("^\\s*(" + URL_OPEN_METHODS.join("|").split(".").join("\\.") + ")\\((?:'|\")([^'\"]*)(?:'|\")(?:,\\s*(\\w+)\\)|\\))", "i");
- const jsUrl = regex.exec((0, _util.stringToPDFString)(js));
-
- if (jsUrl && jsUrl[2]) {
- url = jsUrl[2];
-
- if (jsUrl[3] === "true" && jsUrl[1] === "app.launchURL") {
- resultObj.newWindow = true;
- }
-
- break;
- }
- }
-
- default:
- (0, _util.warn)(`parseDestDictionary: unsupported action type "${actionName}".`);
- break;
- }
- } else if (destDict.has("Dest")) {
- dest = destDict.get("Dest");
- }
-
- if ((0, _util.isString)(url)) {
- url = tryConvertUrlEncoding(url);
- const absoluteUrl = (0, _util.createValidAbsoluteUrl)(url, docBaseUrl);
+ static async _getPageIndex(xref, ref, pdfManager) {
+ try {
+ const annotDict = await xref.fetchIfRefAsync(ref);
- if (absoluteUrl) {
- resultObj.url = absoluteUrl.href;
+ if (!(0, _primitives.isDict)(annotDict)) {
+ return -1;
}
- resultObj.unsafeUrl = url;
- }
+ const pageRef = annotDict.getRaw("P");
- if (dest) {
- if ((0, _primitives.isName)(dest)) {
- dest = dest.name;
+ if (!(0, _primitives.isRef)(pageRef)) {
+ return -1;
}
- if ((0, _util.isString)(dest) || Array.isArray(dest)) {
- resultObj.dest = dest;
- }
+ const pageIndex = await pdfManager.ensureCatalog("getPageIndex", [pageRef]);
+ return pageIndex;
+ } catch (ex) {
+ (0, _util.warn)(`_getPageIndex: "${ex}".`);
+ return -1;
}
}
}
-exports.Catalog = Catalog;
-
-var XRef = function XRefClosure() {
- function XRef(stream, pdfManager) {
- this.stream = stream;
- this.pdfManager = pdfManager;
- this.entries = [];
- this.xrefstms = Object.create(null);
- this._cacheMap = new Map();
- this.stats = {
- streamTypes: Object.create(null),
- fontTypes: Object.create(null)
- };
- this._newRefNum = null;
- }
-
- XRef.prototype = {
- getNewRef: function XRef_getNewRef() {
- if (this._newRefNum === null) {
- this._newRefNum = this.entries.length;
- }
-
- return _primitives.Ref.get(this._newRefNum++, 0);
- },
- resetNewRef: function XRef_resetNewRef() {
- this._newRefNum = null;
- },
- setStartXRef: function XRef_setStartXRef(startXRef) {
- this.startXRefQueue = [startXRef];
- },
- parse: function XRef_parse(recoveryMode) {
- var trailerDict;
-
- if (!recoveryMode) {
- trailerDict = this.readXRef();
- } else {
- (0, _util.warn)("Indexing all PDF objects");
- trailerDict = this.indexObjects();
- }
-
- trailerDict.assignXref(this);
- this.trailer = trailerDict;
- let encrypt;
-
- try {
- encrypt = trailerDict.get("Encrypt");
- } catch (ex) {
- if (ex instanceof _core_utils.MissingDataException) {
- throw ex;
- }
-
- (0, _util.warn)(`XRef.parse - Invalid "Encrypt" reference: "${ex}".`);
- }
-
- if ((0, _primitives.isDict)(encrypt)) {
- var ids = trailerDict.get("ID");
- var fileId = ids && ids.length ? ids[0] : "";
- encrypt.suppressEncryption = true;
- this.encrypt = new _crypto.CipherTransformFactory(encrypt, fileId, this.pdfManager.password);
- }
-
- let root;
-
- try {
- root = trailerDict.get("Root");
- } catch (ex) {
- if (ex instanceof _core_utils.MissingDataException) {
- throw ex;
- }
-
- (0, _util.warn)(`XRef.parse - Invalid "Root" reference: "${ex}".`);
- }
-
- if ((0, _primitives.isDict)(root) && root.has("Pages")) {
- this.root = root;
- } else {
- if (!recoveryMode) {
- throw new _core_utils.XRefParseException();
- }
-
- throw new _util.FormatError("Invalid root reference");
- }
- },
- processXRefTable: function XRef_processXRefTable(parser) {
- if (!("tableState" in this)) {
- this.tableState = {
- entryNum: 0,
- streamPos: parser.lexer.stream.pos,
- parserBuf1: parser.buf1,
- parserBuf2: parser.buf2
- };
- }
-
- var obj = this.readXRefTable(parser);
-
- if (!(0, _primitives.isCmd)(obj, "trailer")) {
- throw new _util.FormatError("Invalid XRef table: could not find trailer dictionary");
- }
-
- var dict = parser.getObj();
-
- if (!(0, _primitives.isDict)(dict) && dict.dict) {
- dict = dict.dict;
- }
-
- if (!(0, _primitives.isDict)(dict)) {
- throw new _util.FormatError("Invalid XRef table: could not parse trailer dictionary");
- }
-
- delete this.tableState;
- return dict;
- },
- readXRefTable: function XRef_readXRefTable(parser) {
- var stream = parser.lexer.stream;
- var tableState = this.tableState;
- stream.pos = tableState.streamPos;
- parser.buf1 = tableState.parserBuf1;
- parser.buf2 = tableState.parserBuf2;
- var obj;
-
- while (true) {
- if (!("firstEntryNum" in tableState) || !("entryCount" in tableState)) {
- if ((0, _primitives.isCmd)(obj = parser.getObj(), "trailer")) {
- break;
- }
-
- tableState.firstEntryNum = obj;
- tableState.entryCount = parser.getObj();
- }
-
- var first = tableState.firstEntryNum;
- var count = tableState.entryCount;
-
- if (!Number.isInteger(first) || !Number.isInteger(count)) {
- throw new _util.FormatError("Invalid XRef table: wrong types in subsection header");
- }
-
- for (var i = tableState.entryNum; i < count; i++) {
- tableState.streamPos = stream.pos;
- tableState.entryNum = i;
- tableState.parserBuf1 = parser.buf1;
- tableState.parserBuf2 = parser.buf2;
- var entry = {};
- entry.offset = parser.getObj();
- entry.gen = parser.getObj();
- var type = parser.getObj();
-
- if (type instanceof _primitives.Cmd) {
- switch (type.cmd) {
- case "f":
- entry.free = true;
- break;
-
- case "n":
- entry.uncompressed = true;
- break;
- }
- }
-
- if (!Number.isInteger(entry.offset) || !Number.isInteger(entry.gen) || !(entry.free || entry.uncompressed)) {
- throw new _util.FormatError(`Invalid entry in XRef subsection: ${first}, ${count}`);
- }
-
- if (i === 0 && entry.free && first === 1) {
- first = 0;
- }
-
- if (!this.entries[i + first]) {
- this.entries[i + first] = entry;
- }
- }
-
- tableState.entryNum = 0;
- tableState.streamPos = stream.pos;
- tableState.parserBuf1 = parser.buf1;
- tableState.parserBuf2 = parser.buf2;
- delete tableState.firstEntryNum;
- delete tableState.entryCount;
- }
-
- if (this.entries[0] && !this.entries[0].free) {
- throw new _util.FormatError("Invalid XRef table: unexpected first object");
- }
-
- return obj;
- },
- processXRefStream: function XRef_processXRefStream(stream) {
- if (!("streamState" in this)) {
- var streamParameters = stream.dict;
- var byteWidths = streamParameters.get("W");
- var range = streamParameters.get("Index");
-
- if (!range) {
- range = [0, streamParameters.get("Size")];
- }
-
- this.streamState = {
- entryRanges: range,
- byteWidths,
- entryNum: 0,
- streamPos: stream.pos
- };
- }
-
- this.readXRefStream(stream);
- delete this.streamState;
- return stream.dict;
- },
- readXRefStream: function XRef_readXRefStream(stream) {
- var i, j;
- var streamState = this.streamState;
- stream.pos = streamState.streamPos;
- var byteWidths = streamState.byteWidths;
- var typeFieldWidth = byteWidths[0];
- var offsetFieldWidth = byteWidths[1];
- var generationFieldWidth = byteWidths[2];
- var entryRanges = streamState.entryRanges;
-
- while (entryRanges.length > 0) {
- var first = entryRanges[0];
- var n = entryRanges[1];
-
- if (!Number.isInteger(first) || !Number.isInteger(n)) {
- throw new _util.FormatError(`Invalid XRef range fields: ${first}, ${n}`);
- }
-
- if (!Number.isInteger(typeFieldWidth) || !Number.isInteger(offsetFieldWidth) || !Number.isInteger(generationFieldWidth)) {
- throw new _util.FormatError(`Invalid XRef entry fields length: ${first}, ${n}`);
- }
-
- for (i = streamState.entryNum; i < n; ++i) {
- streamState.entryNum = i;
- streamState.streamPos = stream.pos;
- var type = 0,
- offset = 0,
- generation = 0;
-
- for (j = 0; j < typeFieldWidth; ++j) {
- type = type << 8 | stream.getByte();
- }
-
- if (typeFieldWidth === 0) {
- type = 1;
- }
-
- for (j = 0; j < offsetFieldWidth; ++j) {
- offset = offset << 8 | stream.getByte();
- }
-
- for (j = 0; j < generationFieldWidth; ++j) {
- generation = generation << 8 | stream.getByte();
- }
-
- var entry = {};
- entry.offset = offset;
- entry.gen = generation;
-
- switch (type) {
- case 0:
- entry.free = true;
- break;
-
- case 1:
- entry.uncompressed = true;
- break;
-
- case 2:
- break;
-
- default:
- throw new _util.FormatError(`Invalid XRef entry type: ${type}`);
- }
-
- if (!this.entries[first + i]) {
- this.entries[first + i] = entry;
- }
- }
-
- streamState.entryNum = 0;
- streamState.streamPos = stream.pos;
- entryRanges.splice(0, 2);
- }
- },
- indexObjects: function XRef_indexObjects() {
- var TAB = 0x9,
- LF = 0xa,
- CR = 0xd,
- SPACE = 0x20;
- var PERCENT = 0x25,
- LT = 0x3c;
-
- function readToken(data, offset) {
- var token = "",
- ch = data[offset];
-
- while (ch !== LF && ch !== CR && ch !== LT) {
- if (++offset >= data.length) {
- break;
- }
-
- token += String.fromCharCode(ch);
- ch = data[offset];
- }
-
- return token;
- }
-
- function skipUntil(data, offset, what) {
- var length = what.length,
- dataLength = data.length;
- var skipped = 0;
-
- while (offset < dataLength) {
- var i = 0;
-
- while (i < length && data[offset + i] === what[i]) {
- ++i;
- }
-
- if (i >= length) {
- break;
- }
-
- offset++;
- skipped++;
- }
-
- return skipped;
- }
-
- var objRegExp = /^(\d+)\s+(\d+)\s+obj\b/;
- const endobjRegExp = /\bendobj[\b\s]$/;
- const nestedObjRegExp = /\s+(\d+\s+\d+\s+obj[\b\s<])$/;
- const CHECK_CONTENT_LENGTH = 25;
- var trailerBytes = new Uint8Array([116, 114, 97, 105, 108, 101, 114]);
- var startxrefBytes = new Uint8Array([115, 116, 97, 114, 116, 120, 114, 101, 102]);
- const objBytes = new Uint8Array([111, 98, 106]);
- var xrefBytes = new Uint8Array([47, 88, 82, 101, 102]);
- this.entries.length = 0;
- var stream = this.stream;
- stream.pos = 0;
- var buffer = stream.getBytes();
- var position = stream.start,
- length = buffer.length;
- var trailers = [],
- xrefStms = [];
-
- while (position < length) {
- var ch = buffer[position];
-
- if (ch === TAB || ch === LF || ch === CR || ch === SPACE) {
- ++position;
- continue;
- }
-
- if (ch === PERCENT) {
- do {
- ++position;
-
- if (position >= length) {
- break;
- }
-
- ch = buffer[position];
- } while (ch !== LF && ch !== CR);
-
- continue;
- }
-
- var token = readToken(buffer, position);
- var m;
-
- if (token.startsWith("xref") && (token.length === 4 || /\s/.test(token[4]))) {
- position += skipUntil(buffer, position, trailerBytes);
- trailers.push(position);
- position += skipUntil(buffer, position, startxrefBytes);
- } else if (m = objRegExp.exec(token)) {
- const num = m[1] | 0,
- gen = m[2] | 0;
-
- if (!this.entries[num] || this.entries[num].gen === gen) {
- this.entries[num] = {
- offset: position - stream.start,
- gen,
- uncompressed: true
- };
- }
-
- let contentLength,
- startPos = position + token.length;
-
- while (startPos < buffer.length) {
- const endPos = startPos + skipUntil(buffer, startPos, objBytes) + 4;
- contentLength = endPos - position;
- const checkPos = Math.max(endPos - CHECK_CONTENT_LENGTH, startPos);
- const tokenStr = (0, _util.bytesToString)(buffer.subarray(checkPos, endPos));
-
- if (endobjRegExp.test(tokenStr)) {
- break;
- } else {
- const objToken = nestedObjRegExp.exec(tokenStr);
-
- if (objToken && objToken[1]) {
- (0, _util.warn)('indexObjects: Found new "obj" inside of another "obj", ' + 'caused by missing "endobj" -- trying to recover.');
- contentLength -= objToken[1].length;
- break;
- }
- }
-
- startPos = endPos;
- }
-
- const content = buffer.subarray(position, position + contentLength);
- var xrefTagOffset = skipUntil(content, 0, xrefBytes);
-
- if (xrefTagOffset < contentLength && content[xrefTagOffset + 5] < 64) {
- xrefStms.push(position - stream.start);
- this.xrefstms[position - stream.start] = 1;
- }
-
- position += contentLength;
- } else if (token.startsWith("trailer") && (token.length === 7 || /\s/.test(token[7]))) {
- trailers.push(position);
- position += skipUntil(buffer, position, startxrefBytes);
- } else {
- position += token.length + 1;
- }
- }
-
- var i, ii;
-
- for (i = 0, ii = xrefStms.length; i < ii; ++i) {
- this.startXRefQueue.push(xrefStms[i]);
- this.readXRef(true);
- }
-
- let trailerDict;
-
- for (i = 0, ii = trailers.length; i < ii; ++i) {
- stream.pos = trailers[i];
- const parser = new _parser.Parser({
- lexer: new _parser.Lexer(stream),
- xref: this,
- allowStreams: true,
- recoveryMode: true
- });
- var obj = parser.getObj();
-
- if (!(0, _primitives.isCmd)(obj, "trailer")) {
- continue;
- }
-
- const dict = parser.getObj();
-
- if (!(0, _primitives.isDict)(dict)) {
- continue;
- }
-
- let rootDict;
-
- try {
- rootDict = dict.get("Root");
- } catch (ex) {
- if (ex instanceof _core_utils.MissingDataException) {
- throw ex;
- }
-
- continue;
- }
-
- if (!(0, _primitives.isDict)(rootDict) || !rootDict.has("Pages")) {
- continue;
- }
-
- if (dict.has("ID")) {
- return dict;
- }
-
- trailerDict = dict;
- }
-
- if (trailerDict) {
- return trailerDict;
- }
-
- throw new _util.InvalidPDFException("Invalid PDF structure.");
- },
- readXRef: function XRef_readXRef(recoveryMode) {
- var stream = this.stream;
- const startXRefParsedCache = Object.create(null);
-
- try {
- while (this.startXRefQueue.length) {
- var startXRef = this.startXRefQueue[0];
-
- if (startXRefParsedCache[startXRef]) {
- (0, _util.warn)("readXRef - skipping XRef table since it was already parsed.");
- this.startXRefQueue.shift();
- continue;
- }
-
- startXRefParsedCache[startXRef] = true;
- stream.pos = startXRef + stream.start;
- const parser = new _parser.Parser({
- lexer: new _parser.Lexer(stream),
- xref: this,
- allowStreams: true
- });
- var obj = parser.getObj();
- var dict;
-
- if ((0, _primitives.isCmd)(obj, "xref")) {
- dict = this.processXRefTable(parser);
-
- if (!this.topDict) {
- this.topDict = dict;
- }
-
- obj = dict.get("XRefStm");
-
- if (Number.isInteger(obj)) {
- var pos = obj;
-
- if (!(pos in this.xrefstms)) {
- this.xrefstms[pos] = 1;
- this.startXRefQueue.push(pos);
- }
- }
- } else if (Number.isInteger(obj)) {
- if (!Number.isInteger(parser.getObj()) || !(0, _primitives.isCmd)(parser.getObj(), "obj") || !(0, _primitives.isStream)(obj = parser.getObj())) {
- throw new _util.FormatError("Invalid XRef stream");
- }
-
- dict = this.processXRefStream(obj);
-
- if (!this.topDict) {
- this.topDict = dict;
- }
-
- if (!dict) {
- throw new _util.FormatError("Failed to read XRef stream");
- }
- } else {
- throw new _util.FormatError("Invalid XRef stream header");
- }
-
- obj = dict.get("Prev");
-
- if (Number.isInteger(obj)) {
- this.startXRefQueue.push(obj);
- } else if ((0, _primitives.isRef)(obj)) {
- this.startXRefQueue.push(obj.num);
- }
-
- this.startXRefQueue.shift();
- }
-
- return this.topDict;
- } catch (e) {
- if (e instanceof _core_utils.MissingDataException) {
- throw e;
- }
-
- (0, _util.info)("(while reading XRef): " + e);
- }
-
- if (recoveryMode) {
- return undefined;
- }
-
- throw new _core_utils.XRefParseException();
- },
- getEntry: function XRef_getEntry(i) {
- var xrefEntry = this.entries[i];
-
- if (xrefEntry && !xrefEntry.free && xrefEntry.offset) {
- return xrefEntry;
- }
-
- return null;
- },
- fetchIfRef: function XRef_fetchIfRef(obj, suppressEncryption) {
- if (obj instanceof _primitives.Ref) {
- return this.fetch(obj, suppressEncryption);
- }
-
- return obj;
- },
- fetch: function XRef_fetch(ref, suppressEncryption) {
- if (!(ref instanceof _primitives.Ref)) {
- throw new Error("ref object is not a reference");
- }
-
- const num = ref.num;
-
- const cacheEntry = this._cacheMap.get(num);
-
- if (cacheEntry !== undefined) {
- if (cacheEntry instanceof _primitives.Dict && !cacheEntry.objId) {
- cacheEntry.objId = ref.toString();
- }
-
- return cacheEntry;
- }
-
- let xrefEntry = this.getEntry(num);
-
- if (xrefEntry === null) {
- this._cacheMap.set(num, xrefEntry);
-
- return xrefEntry;
- }
-
- if (xrefEntry.uncompressed) {
- xrefEntry = this.fetchUncompressed(ref, xrefEntry, suppressEncryption);
- } else {
- xrefEntry = this.fetchCompressed(ref, xrefEntry, suppressEncryption);
- }
-
- if ((0, _primitives.isDict)(xrefEntry)) {
- xrefEntry.objId = ref.toString();
- } else if ((0, _primitives.isStream)(xrefEntry)) {
- xrefEntry.dict.objId = ref.toString();
- }
-
- return xrefEntry;
- },
-
- fetchUncompressed(ref, xrefEntry, suppressEncryption = false) {
- var gen = ref.gen;
- var num = ref.num;
-
- if (xrefEntry.gen !== gen) {
- throw new _core_utils.XRefEntryException(`Inconsistent generation in XRef: ${ref}`);
- }
-
- var stream = this.stream.makeSubStream(xrefEntry.offset + this.stream.start);
- const parser = new _parser.Parser({
- lexer: new _parser.Lexer(stream),
- xref: this,
- allowStreams: true
- });
- var obj1 = parser.getObj();
- var obj2 = parser.getObj();
- var obj3 = parser.getObj();
-
- if (obj1 !== num || obj2 !== gen || !(obj3 instanceof _primitives.Cmd)) {
- throw new _core_utils.XRefEntryException(`Bad (uncompressed) XRef entry: ${ref}`);
- }
-
- if (obj3.cmd !== "obj") {
- if (obj3.cmd.startsWith("obj")) {
- num = parseInt(obj3.cmd.substring(3), 10);
-
- if (!Number.isNaN(num)) {
- return num;
- }
- }
-
- throw new _core_utils.XRefEntryException(`Bad (uncompressed) XRef entry: ${ref}`);
- }
-
- if (this.encrypt && !suppressEncryption) {
- xrefEntry = parser.getObj(this.encrypt.createCipherTransform(num, gen));
- } else {
- xrefEntry = parser.getObj();
- }
-
- if (!(0, _primitives.isStream)(xrefEntry)) {
- this._cacheMap.set(num, xrefEntry);
- }
-
- return xrefEntry;
- },
-
- fetchCompressed(ref, xrefEntry, suppressEncryption = false) {
- const tableOffset = xrefEntry.offset;
- const stream = this.fetch(_primitives.Ref.get(tableOffset, 0));
-
- if (!(0, _primitives.isStream)(stream)) {
- throw new _util.FormatError("bad ObjStm stream");
- }
-
- const first = stream.dict.get("First");
- const n = stream.dict.get("N");
-
- if (!Number.isInteger(first) || !Number.isInteger(n)) {
- throw new _util.FormatError("invalid first and n parameters for ObjStm stream");
- }
-
- const parser = new _parser.Parser({
- lexer: new _parser.Lexer(stream),
- xref: this,
- allowStreams: true
- });
- const nums = new Array(n);
-
- for (let i = 0; i < n; ++i) {
- const num = parser.getObj();
-
- if (!Number.isInteger(num)) {
- throw new _util.FormatError(`invalid object number in the ObjStm stream: ${num}`);
- }
-
- const offset = parser.getObj();
-
- if (!Number.isInteger(offset)) {
- throw new _util.FormatError(`invalid object offset in the ObjStm stream: ${offset}`);
- }
-
- nums[i] = num;
- }
-
- const entries = new Array(n);
-
- for (let i = 0; i < n; ++i) {
- const obj = parser.getObj();
- entries[i] = obj;
-
- if (parser.buf1 instanceof _primitives.Cmd && parser.buf1.cmd === "endobj") {
- parser.shift();
- }
-
- if ((0, _primitives.isStream)(obj)) {
- continue;
- }
-
- const num = nums[i],
- entry = this.entries[num];
-
- if (entry && entry.offset === tableOffset && entry.gen === i) {
- this._cacheMap.set(num, obj);
- }
- }
-
- xrefEntry = entries[xrefEntry.gen];
-
- if (xrefEntry === undefined) {
- throw new _core_utils.XRefEntryException(`Bad (compressed) XRef entry: ${ref}`);
- }
-
- return xrefEntry;
- },
-
- async fetchIfRefAsync(obj, suppressEncryption) {
- if (obj instanceof _primitives.Ref) {
- return this.fetchAsync(obj, suppressEncryption);
- }
-
- return obj;
- },
-
- async fetchAsync(ref, suppressEncryption) {
- try {
- return this.fetch(ref, suppressEncryption);
- } catch (ex) {
- if (!(ex instanceof _core_utils.MissingDataException)) {
- throw ex;
- }
-
- await this.pdfManager.requestRange(ex.begin, ex.end);
- return this.fetchAsync(ref, suppressEncryption);
- }
- },
-
- getCatalogObj: function XRef_getCatalogObj() {
- return this.root;
- }
- };
- return XRef;
-}();
-
-exports.XRef = XRef;
-
-class NameOrNumberTree {
- constructor(root, xref, type) {
- if (this.constructor === NameOrNumberTree) {
- (0, _util.unreachable)("Cannot initialize NameOrNumberTree.");
- }
-
- this.root = root;
- this.xref = xref;
- this._type = type;
- }
-
- getAll() {
- const dict = Object.create(null);
-
- if (!this.root) {
- return dict;
- }
-
- const xref = this.xref;
- const processed = new _primitives.RefSet();
- processed.put(this.root);
- const queue = [this.root];
-
- while (queue.length > 0) {
- const obj = xref.fetchIfRef(queue.shift());
-
- if (!(0, _primitives.isDict)(obj)) {
- continue;
- }
-
- if (obj.has("Kids")) {
- const kids = obj.get("Kids");
-
- for (let i = 0, ii = kids.length; i < ii; i++) {
- const kid = kids[i];
-
- if (processed.has(kid)) {
- throw new _util.FormatError(`Duplicate entry in "${this._type}" tree.`);
- }
-
- queue.push(kid);
- processed.put(kid);
- }
-
- continue;
- }
-
- const entries = obj.get(this._type);
+exports.AnnotationFactory = AnnotationFactory;
- if (Array.isArray(entries)) {
- for (let i = 0, ii = entries.length; i < ii; i += 2) {
- dict[xref.fetchIfRef(entries[i])] = xref.fetchIfRef(entries[i + 1]);
- }
- }
- }
+function getRgbColor(color) {
+ const rgbColor = new Uint8ClampedArray(3);
- return dict;
+ if (!Array.isArray(color)) {
+ return rgbColor;
}
- get(key) {
- if (!this.root) {
+ switch (color.length) {
+ case 0:
return null;
- }
- const xref = this.xref;
- let kidsOrEntries = xref.fetchIfRef(this.root);
- let loopCount = 0;
- const MAX_LEVELS = 10;
-
- while (kidsOrEntries.has("Kids")) {
- if (++loopCount > MAX_LEVELS) {
- (0, _util.warn)(`Search depth limit reached for "${this._type}" tree.`);
- return null;
- }
-
- const kids = kidsOrEntries.get("Kids");
-
- if (!Array.isArray(kids)) {
- return null;
- }
-
- let l = 0,
- r = kids.length - 1;
-
- while (l <= r) {
- const m = l + r >> 1;
- const kid = xref.fetchIfRef(kids[m]);
- const limits = kid.get("Limits");
-
- if (key < xref.fetchIfRef(limits[0])) {
- r = m - 1;
- } else if (key > xref.fetchIfRef(limits[1])) {
- l = m + 1;
- } else {
- kidsOrEntries = xref.fetchIfRef(kids[m]);
- break;
- }
- }
-
- if (l > r) {
- return null;
- }
- }
-
- const entries = kidsOrEntries.get(this._type);
-
- if (Array.isArray(entries)) {
- let l = 0,
- r = entries.length - 2;
-
- while (l <= r) {
- const tmp = l + r >> 1,
- m = tmp + (tmp & 1);
- const currentKey = xref.fetchIfRef(entries[m]);
-
- if (key < currentKey) {
- r = m - 2;
- } else if (key > currentKey) {
- l = m + 2;
- } else {
- return xref.fetchIfRef(entries[m + 1]);
- }
- }
+ case 1:
+ _colorspace.ColorSpace.singletons.gray.getRgbItem(color, 0, rgbColor, 0);
- (0, _util.info)(`Falling back to an exhaustive search, for key "${key}", ` + `in "${this._type}" tree.`);
+ return rgbColor;
- for (let m = 0, mm = entries.length; m < mm; m += 2) {
- const currentKey = xref.fetchIfRef(entries[m]);
+ case 3:
+ _colorspace.ColorSpace.singletons.rgb.getRgbItem(color, 0, rgbColor, 0);
- if (currentKey === key) {
- (0, _util.warn)(`The "${key}" key was found at an incorrect, ` + `i.e. out-of-order, position in "${this._type}" tree.`);
- return xref.fetchIfRef(entries[m + 1]);
- }
- }
- }
+ return rgbColor;
- return null;
- }
+ case 4:
+ _colorspace.ColorSpace.singletons.cmyk.getRgbItem(color, 0, rgbColor, 0);
-}
+ return rgbColor;
-class NameTree extends NameOrNumberTree {
- constructor(root, xref) {
- super(root, xref, "Names");
- }
-
-}
-
-class NumberTree extends NameOrNumberTree {
- constructor(root, xref) {
- super(root, xref, "Nums");
+ default:
+ return rgbColor;
}
-
}
-var FileSpec = function FileSpecClosure() {
- function FileSpec(root, xref) {
- if (!root || !(0, _primitives.isDict)(root)) {
- return;
- }
-
- this.xref = xref;
- this.root = root;
-
- if (root.has("FS")) {
- this.fs = root.get("FS");
- }
-
- this.description = root.has("Desc") ? (0, _util.stringToPDFString)(root.get("Desc")) : "";
-
- if (root.has("RF")) {
- (0, _util.warn)("Related file specifications are not supported");
- }
-
- this.contentAvailable = true;
-
- if (!root.has("EF")) {
- this.contentAvailable = false;
- (0, _util.warn)("Non-embedded file specifications are not supported");
- }
+function getQuadPoints(dict, rect) {
+ if (!dict.has("QuadPoints")) {
+ return null;
}
- function pickPlatformItem(dict) {
- if (dict.has("UF")) {
- return dict.get("UF");
- } else if (dict.has("F")) {
- return dict.get("F");
- } else if (dict.has("Unix")) {
- return dict.get("Unix");
- } else if (dict.has("Mac")) {
- return dict.get("Mac");
- } else if (dict.has("DOS")) {
- return dict.get("DOS");
- }
+ const quadPoints = dict.getArray("QuadPoints");
+ if (!Array.isArray(quadPoints) || quadPoints.length === 0 || quadPoints.length % 8 > 0) {
return null;
}
- FileSpec.prototype = {
- get filename() {
- if (!this._filename && this.root) {
- var filename = pickPlatformItem(this.root) || "unnamed";
- this._filename = (0, _util.stringToPDFString)(filename).replace(/\\\\/g, "\\").replace(/\\\//g, "/").replace(/\\/g, "/");
- }
-
- return this._filename;
- },
-
- get content() {
- if (!this.contentAvailable) {
- return null;
- }
-
- if (!this.contentRef && this.root) {
- this.contentRef = pickPlatformItem(this.root.get("EF"));
- }
+ const quadPointsLists = [];
- var content = null;
+ for (let i = 0, ii = quadPoints.length / 8; i < ii; i++) {
+ quadPointsLists.push([]);
- if (this.contentRef) {
- var xref = this.xref;
- var fileObj = xref.fetchIfRef(this.contentRef);
+ for (let j = i * 8, jj = i * 8 + 8; j < jj; j += 2) {
+ const x = quadPoints[j];
+ const y = quadPoints[j + 1];
- if (fileObj && (0, _primitives.isStream)(fileObj)) {
- content = fileObj.getBytes();
- } else {
- (0, _util.warn)("Embedded file specification points to non-existing/invalid " + "content");
- }
- } else {
- (0, _util.warn)("Embedded file specification does not have a content");
+ if (rect !== null && (x < rect[0] || x > rect[2] || y < rect[1] || y > rect[3])) {
+ return null;
}
- return content;
- },
-
- get serializable() {
- return {
- filename: this.filename,
- content: this.content
- };
+ quadPointsLists[i].push({
+ x,
+ y
+ });
}
-
- };
- return FileSpec;
-}();
-
-exports.FileSpec = FileSpec;
-
-const ObjectLoader = function () {
- function mayHaveChildren(value) {
- return value instanceof _primitives.Ref || value instanceof _primitives.Dict || Array.isArray(value) || (0, _primitives.isStream)(value);
}
- function addChildren(node, nodesToVisit) {
- if (node instanceof _primitives.Dict) {
- node = node.getRawValues();
- } else if ((0, _primitives.isStream)(node)) {
- node = node.dict.getRawValues();
- } else if (!Array.isArray(node)) {
- return;
- }
+ return quadPointsLists.map(quadPointsList => {
+ const [minX, maxX, minY, maxY] = quadPointsList.reduce(([mX, MX, mY, MY], quadPoint) => [Math.min(mX, quadPoint.x), Math.max(MX, quadPoint.x), Math.min(mY, quadPoint.y), Math.max(MY, quadPoint.y)], [Number.MAX_VALUE, Number.MIN_VALUE, Number.MAX_VALUE, Number.MIN_VALUE]);
+ return [{
+ x: minX,
+ y: maxY
+ }, {
+ x: maxX,
+ y: maxY
+ }, {
+ x: minX,
+ y: minY
+ }, {
+ x: maxX,
+ y: minY
+ }];
+ });
+}
- for (const rawValue of node) {
- if (mayHaveChildren(rawValue)) {
- nodesToVisit.push(rawValue);
- }
- }
- }
+function getTransformMatrix(rect, bbox, matrix) {
+ const [minX, minY, maxX, maxY] = _util.Util.getAxialAlignedBoundingBox(bbox, matrix);
- function ObjectLoader(dict, keys, xref) {
- this.dict = dict;
- this.keys = keys;
- this.xref = xref;
- this.refSet = null;
+ if (minX === maxX || minY === maxY) {
+ return [1, 0, 0, 1, rect[0], rect[1]];
}
- ObjectLoader.prototype = {
- async load() {
- if (!this.xref.stream.allChunksLoaded || this.xref.stream.allChunksLoaded()) {
- return undefined;
- }
-
- const {
- keys,
- dict
- } = this;
- this.refSet = new _primitives.RefSet();
- const nodesToVisit = [];
-
- for (let i = 0, ii = keys.length; i < ii; i++) {
- const rawValue = dict.getRaw(keys[i]);
-
- if (rawValue !== undefined) {
- nodesToVisit.push(rawValue);
- }
- }
-
- return this._walk(nodesToVisit);
- },
-
- async _walk(nodesToVisit) {
- const nodesToRevisit = [];
- const pendingRequests = [];
-
- while (nodesToVisit.length) {
- let currentNode = nodesToVisit.pop();
-
- if (currentNode instanceof _primitives.Ref) {
- if (this.refSet.has(currentNode)) {
- continue;
- }
+ const xRatio = (rect[2] - rect[0]) / (maxX - minX);
+ const yRatio = (rect[3] - rect[1]) / (maxY - minY);
+ return [xRatio, 0, 0, yRatio, rect[0] - minX * xRatio, rect[1] - minY * yRatio];
+}
- try {
- this.refSet.put(currentNode);
- currentNode = this.xref.fetch(currentNode);
- } catch (ex) {
- if (!(ex instanceof _core_utils.MissingDataException)) {
- throw ex;
- }
+class Annotation {
+ constructor(params) {
+ const dict = params.dict;
+ this.setContents(dict.get("Contents"));
+ this.setModificationDate(dict.get("M"));
+ this.setFlags(dict.get("F"));
+ this.setRectangle(dict.getArray("Rect"));
+ this.setColor(dict.getArray("C"));
+ this.setBorderStyle(dict);
+ this.setAppearance(dict);
+ this._streams = [];
- nodesToRevisit.push(currentNode);
- pendingRequests.push({
- begin: ex.begin,
- end: ex.end
- });
- }
- }
+ if (this.appearance) {
+ this._streams.push(this.appearance);
+ }
- if (currentNode && currentNode.getBaseStreams) {
- const baseStreams = currentNode.getBaseStreams();
- let foundMissingData = false;
+ this.data = {
+ annotationFlags: this.flags,
+ borderStyle: this.borderStyle,
+ color: this.color,
+ contents: this.contents,
+ hasAppearance: !!this.appearance,
+ id: params.id,
+ modificationDate: this.modificationDate,
+ rect: this.rectangle,
+ subtype: params.subtype
+ };
- for (let i = 0, ii = baseStreams.length; i < ii; i++) {
- const stream = baseStreams[i];
+ if (params.collectFields) {
+ const kids = dict.get("Kids");
- if (stream.allChunksLoaded && !stream.allChunksLoaded()) {
- foundMissingData = true;
- pendingRequests.push({
- begin: stream.start,
- end: stream.end
- });
- }
- }
+ if (Array.isArray(kids)) {
+ const kidIds = [];
- if (foundMissingData) {
- nodesToRevisit.push(currentNode);
+ for (const kid of kids) {
+ if ((0, _primitives.isRef)(kid)) {
+ kidIds.push(kid.toString());
}
}
- addChildren(currentNode, nodesToVisit);
- }
-
- if (pendingRequests.length) {
- await this.xref.stream.manager.requestRanges(pendingRequests);
-
- for (let i = 0, ii = nodesToRevisit.length; i < ii; i++) {
- const node = nodesToRevisit[i];
-
- if (node instanceof _primitives.Ref) {
- this.refSet.remove(node);
- }
+ if (kidIds.length !== 0) {
+ this.data.kidIds = kidIds;
}
-
- return this._walk(nodesToRevisit);
}
- this.refSet = null;
- return undefined;
+ this.data.actions = (0, _core_utils.collectActions)(params.xref, dict, _util.AnnotationActionEventType);
+ this.data.fieldName = this._constructFieldName(dict);
+ this.data.pageIndex = params.pageIndex;
}
- };
- return ObjectLoader;
-}();
-
-exports.ObjectLoader = ObjectLoader;
-
-/***/ }),
-/* 11 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.Parser = exports.Linearization = exports.Lexer = void 0;
-
-var _stream = __w_pdfjs_require__(12);
-
-var _util = __w_pdfjs_require__(2);
-
-var _primitives = __w_pdfjs_require__(5);
-
-var _core_utils = __w_pdfjs_require__(8);
-
-var _ccitt_stream = __w_pdfjs_require__(13);
-
-var _jbig2_stream = __w_pdfjs_require__(15);
-
-var _jpeg_stream = __w_pdfjs_require__(18);
-
-var _jpx_stream = __w_pdfjs_require__(20);
-
-const MAX_LENGTH_TO_CACHE = 1000;
-const MAX_ADLER32_LENGTH = 5552;
-
-function computeAdler32(bytes) {
- const bytesLength = bytes.length;
- let a = 1,
- b = 0;
-
- for (let i = 0; i < bytesLength; ++i) {
- a += bytes[i] & 0xff;
- b += a;
- }
-
- return b % 65521 << 16 | a % 65521;
-}
-
-class Parser {
- constructor({
- lexer,
- xref,
- allowStreams = false,
- recoveryMode = false
- }) {
- this.lexer = lexer;
- this.xref = xref;
- this.allowStreams = allowStreams;
- this.recoveryMode = recoveryMode;
- this.imageCache = Object.create(null);
- this.refill();
+ this._fallbackFontDict = null;
}
- refill() {
- this.buf1 = this.lexer.getObj();
- this.buf2 = this.lexer.getObj();
+ _hasFlag(flags, flag) {
+ return !!(flags & flag);
}
- shift() {
- if (this.buf2 instanceof _primitives.Cmd && this.buf2.cmd === "ID") {
- this.buf1 = this.buf2;
- this.buf2 = null;
- } else {
- this.buf1 = this.buf2;
- this.buf2 = this.lexer.getObj();
- }
+ _isViewable(flags) {
+ return !this._hasFlag(flags, _util.AnnotationFlag.INVISIBLE) && !this._hasFlag(flags, _util.AnnotationFlag.NOVIEW);
}
- tryShift() {
- try {
- this.shift();
- return true;
- } catch (e) {
- if (e instanceof _core_utils.MissingDataException) {
- throw e;
- }
-
- return false;
- }
+ _isPrintable(flags) {
+ return this._hasFlag(flags, _util.AnnotationFlag.PRINT) && !this._hasFlag(flags, _util.AnnotationFlag.INVISIBLE);
}
- getObj(cipherTransform = null) {
- const buf1 = this.buf1;
- this.shift();
-
- if (buf1 instanceof _primitives.Cmd) {
- switch (buf1.cmd) {
- case "BI":
- return this.makeInlineImage(cipherTransform);
-
- case "[":
- const array = [];
-
- while (!(0, _primitives.isCmd)(this.buf1, "]") && !(0, _primitives.isEOF)(this.buf1)) {
- array.push(this.getObj(cipherTransform));
- }
-
- if ((0, _primitives.isEOF)(this.buf1)) {
- if (!this.recoveryMode) {
- throw new _util.FormatError("End of file inside array");
- }
+ mustBeViewed(annotationStorage) {
+ const storageEntry = annotationStorage && annotationStorage.get(this.data.id);
- return array;
- }
-
- this.shift();
- return array;
-
- case "<<":
- const dict = new _primitives.Dict(this.xref);
-
- while (!(0, _primitives.isCmd)(this.buf1, ">>") && !(0, _primitives.isEOF)(this.buf1)) {
- if (!(0, _primitives.isName)(this.buf1)) {
- (0, _util.info)("Malformed dictionary: key must be a name object");
- this.shift();
- continue;
- }
-
- const key = this.buf1.name;
- this.shift();
-
- if ((0, _primitives.isEOF)(this.buf1)) {
- break;
- }
-
- dict.set(key, this.getObj(cipherTransform));
- }
-
- if ((0, _primitives.isEOF)(this.buf1)) {
- if (!this.recoveryMode) {
- throw new _util.FormatError("End of file inside dictionary");
- }
-
- return dict;
- }
-
- if ((0, _primitives.isCmd)(this.buf2, "stream")) {
- return this.allowStreams ? this.makeStream(dict, cipherTransform) : dict;
- }
-
- this.shift();
- return dict;
-
- default:
- return buf1;
- }
+ if (storageEntry && storageEntry.hidden !== undefined) {
+ return !storageEntry.hidden;
}
- if (Number.isInteger(buf1)) {
- if (Number.isInteger(this.buf1) && (0, _primitives.isCmd)(this.buf2, "R")) {
- const ref = _primitives.Ref.get(buf1, this.buf1);
-
- this.shift();
- this.shift();
- return ref;
- }
-
- return buf1;
- }
-
- if (typeof buf1 === "string") {
- if (cipherTransform) {
- return cipherTransform.decryptString(buf1);
- }
-
- return buf1;
- }
-
- return buf1;
+ return this.viewable && !this._hasFlag(this.flags, _util.AnnotationFlag.HIDDEN);
}
- findDefaultInlineStreamEnd(stream) {
- const E = 0x45,
- I = 0x49,
- SPACE = 0x20,
- LF = 0xa,
- CR = 0xd,
- NUL = 0x0;
- const lexer = this.lexer,
- startPos = stream.pos,
- n = 10;
- let state = 0,
- ch,
- maybeEIPos;
-
- while ((ch = stream.getByte()) !== -1) {
- if (state === 0) {
- state = ch === E ? 1 : 0;
- } else if (state === 1) {
- state = ch === I ? 2 : 0;
- } else {
- (0, _util.assert)(state === 2, "findDefaultInlineStreamEnd - invalid state.");
-
- if (ch === SPACE || ch === LF || ch === CR) {
- maybeEIPos = stream.pos;
- const followingBytes = stream.peekBytes(n);
-
- for (let i = 0, ii = followingBytes.length; i < ii; i++) {
- ch = followingBytes[i];
-
- if (ch === NUL && followingBytes[i + 1] !== NUL) {
- continue;
- }
-
- if (ch !== LF && ch !== CR && (ch < SPACE || ch > 0x7f)) {
- state = 0;
- break;
- }
- }
-
- if (state !== 2) {
- continue;
- }
-
- if (lexer.knownCommands) {
- const nextObj = lexer.peekObj();
-
- if (nextObj instanceof _primitives.Cmd && !lexer.knownCommands[nextObj.cmd]) {
- state = 0;
- }
- } else {
- (0, _util.warn)("findDefaultInlineStreamEnd - `lexer.knownCommands` is undefined.");
- }
+ mustBePrinted(annotationStorage) {
+ const storageEntry = annotationStorage && annotationStorage.get(this.data.id);
- if (state === 2) {
- break;
- }
- } else {
- state = 0;
- }
- }
+ if (storageEntry && storageEntry.print !== undefined) {
+ return storageEntry.print;
}
- if (ch === -1) {
- (0, _util.warn)("findDefaultInlineStreamEnd: " + "Reached the end of the stream without finding a valid EI marker");
-
- if (maybeEIPos) {
- (0, _util.warn)('... trying to recover by using the last "EI" occurrence.');
- stream.skip(-(stream.pos - maybeEIPos));
- }
- }
-
- let endOffset = 4;
- stream.skip(-endOffset);
- ch = stream.peekByte();
- stream.skip(endOffset);
-
- if (!(0, _core_utils.isWhiteSpace)(ch)) {
- endOffset--;
- }
-
- return stream.pos - endOffset - startPos;
+ return this.printable;
}
- findDCTDecodeInlineStreamEnd(stream) {
- const startPos = stream.pos;
- let foundEOI = false,
- b,
- markerLength;
-
- while ((b = stream.getByte()) !== -1) {
- if (b !== 0xff) {
- continue;
- }
-
- switch (stream.getByte()) {
- case 0x00:
- break;
-
- case 0xff:
- stream.skip(-1);
- break;
-
- case 0xd9:
- foundEOI = true;
- break;
-
- case 0xc0:
- case 0xc1:
- case 0xc2:
- case 0xc3:
- case 0xc5:
- case 0xc6:
- case 0xc7:
- case 0xc9:
- case 0xca:
- case 0xcb:
- case 0xcd:
- case 0xce:
- case 0xcf:
- case 0xc4:
- case 0xcc:
- case 0xda:
- case 0xdb:
- case 0xdc:
- case 0xdd:
- case 0xde:
- case 0xdf:
- case 0xe0:
- case 0xe1:
- case 0xe2:
- case 0xe3:
- case 0xe4:
- case 0xe5:
- case 0xe6:
- case 0xe7:
- case 0xe8:
- case 0xe9:
- case 0xea:
- case 0xeb:
- case 0xec:
- case 0xed:
- case 0xee:
- case 0xef:
- case 0xfe:
- markerLength = stream.getUint16();
-
- if (markerLength > 2) {
- stream.skip(markerLength - 2);
- } else {
- stream.skip(-2);
- }
-
- break;
- }
-
- if (foundEOI) {
- break;
- }
+ get viewable() {
+ if (this.data.quadPoints === null) {
+ return false;
}
- const length = stream.pos - startPos;
-
- if (b === -1) {
- (0, _util.warn)("Inline DCTDecode image stream: " + "EOI marker not found, searching for /EI/ instead.");
- stream.skip(-length);
- return this.findDefaultInlineStreamEnd(stream);
+ if (this.flags === 0) {
+ return true;
}
- this.inlineStreamSkipEI(stream);
- return length;
+ return this._isViewable(this.flags);
}
- findASCII85DecodeInlineStreamEnd(stream) {
- const TILDE = 0x7e,
- GT = 0x3e;
- const startPos = stream.pos;
- let ch;
-
- while ((ch = stream.getByte()) !== -1) {
- if (ch === TILDE) {
- const tildePos = stream.pos;
- ch = stream.peekByte();
-
- while ((0, _core_utils.isWhiteSpace)(ch)) {
- stream.skip();
- ch = stream.peekByte();
- }
-
- if (ch === GT) {
- stream.skip();
- break;
- }
-
- if (stream.pos > tildePos) {
- const maybeEI = stream.peekBytes(2);
-
- if (maybeEI[0] === 0x45 && maybeEI[1] === 0x49) {
- break;
- }
- }
- }
+ get printable() {
+ if (this.data.quadPoints === null) {
+ return false;
}
- const length = stream.pos - startPos;
-
- if (ch === -1) {
- (0, _util.warn)("Inline ASCII85Decode image stream: " + "EOD marker not found, searching for /EI/ instead.");
- stream.skip(-length);
- return this.findDefaultInlineStreamEnd(stream);
+ if (this.flags === 0) {
+ return false;
}
- this.inlineStreamSkipEI(stream);
- return length;
+ return this._isPrintable(this.flags);
}
- findASCIIHexDecodeInlineStreamEnd(stream) {
- const GT = 0x3e;
- const startPos = stream.pos;
- let ch;
-
- while ((ch = stream.getByte()) !== -1) {
- if (ch === GT) {
- break;
- }
- }
-
- const length = stream.pos - startPos;
-
- if (ch === -1) {
- (0, _util.warn)("Inline ASCIIHexDecode image stream: " + "EOD marker not found, searching for /EI/ instead.");
- stream.skip(-length);
- return this.findDefaultInlineStreamEnd(stream);
- }
-
- this.inlineStreamSkipEI(stream);
- return length;
+ setContents(contents) {
+ this.contents = (0, _util.stringToPDFString)(contents || "");
}
- inlineStreamSkipEI(stream) {
- const E = 0x45,
- I = 0x49;
- let state = 0,
- ch;
-
- while ((ch = stream.getByte()) !== -1) {
- if (state === 0) {
- state = ch === E ? 1 : 0;
- } else if (state === 1) {
- state = ch === I ? 2 : 0;
- } else if (state === 2) {
- break;
- }
- }
+ setModificationDate(modificationDate) {
+ this.modificationDate = (0, _util.isString)(modificationDate) ? modificationDate : null;
}
- makeInlineImage(cipherTransform) {
- const lexer = this.lexer;
- const stream = lexer.stream;
- const dict = new _primitives.Dict(this.xref);
- let dictLength;
-
- while (!(0, _primitives.isCmd)(this.buf1, "ID") && !(0, _primitives.isEOF)(this.buf1)) {
- if (!(0, _primitives.isName)(this.buf1)) {
- throw new _util.FormatError("Dictionary key must be a name object");
- }
-
- const key = this.buf1.name;
- this.shift();
-
- if ((0, _primitives.isEOF)(this.buf1)) {
- break;
- }
-
- dict.set(key, this.getObj(cipherTransform));
- }
-
- if (lexer.beginInlineImagePos !== -1) {
- dictLength = stream.pos - lexer.beginInlineImagePos;
- }
-
- const filter = dict.get("Filter", "F");
- let filterName;
-
- if ((0, _primitives.isName)(filter)) {
- filterName = filter.name;
- } else if (Array.isArray(filter)) {
- const filterZero = this.xref.fetchIfRef(filter[0]);
-
- if ((0, _primitives.isName)(filterZero)) {
- filterName = filterZero.name;
- }
- }
-
- const startPos = stream.pos;
- let length;
-
- if (filterName === "DCTDecode" || filterName === "DCT") {
- length = this.findDCTDecodeInlineStreamEnd(stream);
- } else if (filterName === "ASCII85Decode" || filterName === "A85") {
- length = this.findASCII85DecodeInlineStreamEnd(stream);
- } else if (filterName === "ASCIIHexDecode" || filterName === "AHx") {
- length = this.findASCIIHexDecodeInlineStreamEnd(stream);
- } else {
- length = this.findDefaultInlineStreamEnd(stream);
- }
-
- let imageStream = stream.makeSubStream(startPos, length, dict);
- let cacheKey;
-
- if (length < MAX_LENGTH_TO_CACHE && dictLength < MAX_ADLER32_LENGTH) {
- const imageBytes = imageStream.getBytes();
- imageStream.reset();
- const initialStreamPos = stream.pos;
- stream.pos = lexer.beginInlineImagePos;
- const dictBytes = stream.getBytes(dictLength);
- stream.pos = initialStreamPos;
- cacheKey = computeAdler32(imageBytes) + "_" + computeAdler32(dictBytes);
- const cacheEntry = this.imageCache[cacheKey];
-
- if (cacheEntry !== undefined) {
- this.buf2 = _primitives.Cmd.get("EI");
- this.shift();
- cacheEntry.reset();
- return cacheEntry;
- }
- }
-
- if (cipherTransform) {
- imageStream = cipherTransform.createStream(imageStream, length);
- }
-
- imageStream = this.filter(imageStream, dict, length);
- imageStream.dict = dict;
-
- if (cacheKey !== undefined) {
- imageStream.cacheKey = `inline_${length}_${cacheKey}`;
- this.imageCache[cacheKey] = imageStream;
- }
-
- this.buf2 = _primitives.Cmd.get("EI");
- this.shift();
- return imageStream;
+ setFlags(flags) {
+ this.flags = Number.isInteger(flags) && flags > 0 ? flags : 0;
}
- _findStreamLength(startPos, signature) {
- const {
- stream
- } = this.lexer;
- stream.pos = startPos;
- const SCAN_BLOCK_LENGTH = 2048;
- const signatureLength = signature.length;
-
- while (stream.pos < stream.end) {
- const scanBytes = stream.peekBytes(SCAN_BLOCK_LENGTH);
- const scanLength = scanBytes.length - signatureLength;
-
- if (scanLength <= 0) {
- break;
- }
-
- let pos = 0;
-
- while (pos < scanLength) {
- let j = 0;
-
- while (j < signatureLength && scanBytes[pos + j] === signature[j]) {
- j++;
- }
-
- if (j >= signatureLength) {
- stream.pos += pos;
- return stream.pos - startPos;
- }
-
- pos++;
- }
-
- stream.pos += scanLength;
- }
-
- return -1;
+ hasFlag(flag) {
+ return this._hasFlag(this.flags, flag);
}
- makeStream(dict, cipherTransform) {
- const lexer = this.lexer;
- let stream = lexer.stream;
- lexer.skipToNextLine();
- const startPos = stream.pos - 1;
- let length = dict.get("Length");
-
- if (!Number.isInteger(length)) {
- (0, _util.info)(`Bad length "${length}" in stream`);
- length = 0;
- }
-
- stream.pos = startPos + length;
- lexer.nextChar();
-
- if (this.tryShift() && (0, _primitives.isCmd)(this.buf2, "endstream")) {
- this.shift();
+ setRectangle(rectangle) {
+ if (Array.isArray(rectangle) && rectangle.length === 4) {
+ this.rectangle = _util.Util.normalizeRect(rectangle);
} else {
- const ENDSTREAM_SIGNATURE = new Uint8Array([0x65, 0x6E, 0x64, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6D]);
-
- let actualLength = this._findStreamLength(startPos, ENDSTREAM_SIGNATURE);
-
- if (actualLength < 0) {
- const MAX_TRUNCATION = 1;
-
- for (let i = 1; i <= MAX_TRUNCATION; i++) {
- const end = ENDSTREAM_SIGNATURE.length - i;
- const TRUNCATED_SIGNATURE = ENDSTREAM_SIGNATURE.slice(0, end);
-
- const maybeLength = this._findStreamLength(startPos, TRUNCATED_SIGNATURE);
-
- if (maybeLength >= 0) {
- const lastByte = stream.peekBytes(end + 1)[end];
-
- if (!(0, _core_utils.isWhiteSpace)(lastByte)) {
- break;
- }
-
- (0, _util.info)(`Found "${(0, _util.bytesToString)(TRUNCATED_SIGNATURE)}" when ` + "searching for endstream command.");
- actualLength = maybeLength;
- break;
- }
- }
-
- if (actualLength < 0) {
- throw new _util.FormatError("Missing endstream command.");
- }
- }
-
- length = actualLength;
- lexer.nextChar();
- this.shift();
- this.shift();
- }
-
- this.shift();
- stream = stream.makeSubStream(startPos, length, dict);
-
- if (cipherTransform) {
- stream = cipherTransform.createStream(stream, length);
- }
-
- stream = this.filter(stream, dict, length);
- stream.dict = dict;
- return stream;
- }
-
- filter(stream, dict, length) {
- let filter = dict.get("Filter", "F");
- let params = dict.get("DecodeParms", "DP");
-
- if ((0, _primitives.isName)(filter)) {
- if (Array.isArray(params)) {
- (0, _util.warn)("/DecodeParms should not contain an Array, " + "when /Filter contains a Name.");
- }
-
- return this.makeFilter(stream, filter.name, length, params);
- }
-
- let maybeLength = length;
-
- if (Array.isArray(filter)) {
- const filterArray = filter;
- const paramsArray = params;
-
- for (let i = 0, ii = filterArray.length; i < ii; ++i) {
- filter = this.xref.fetchIfRef(filterArray[i]);
-
- if (!(0, _primitives.isName)(filter)) {
- throw new _util.FormatError(`Bad filter name "${filter}"`);
- }
-
- params = null;
-
- if (Array.isArray(paramsArray) && i in paramsArray) {
- params = this.xref.fetchIfRef(paramsArray[i]);
- }
-
- stream = this.makeFilter(stream, filter.name, maybeLength, params);
- maybeLength = null;
- }
- }
-
- return stream;
- }
-
- makeFilter(stream, name, maybeLength, params) {
- if (maybeLength === 0) {
- (0, _util.warn)(`Empty "${name}" stream.`);
- return new _stream.NullStream();
- }
-
- try {
- const xrefStreamStats = this.xref.stats.streamTypes;
-
- if (name === "FlateDecode" || name === "Fl") {
- xrefStreamStats[_util.StreamType.FLATE] = true;
-
- if (params) {
- return new _stream.PredictorStream(new _stream.FlateStream(stream, maybeLength), maybeLength, params);
- }
-
- return new _stream.FlateStream(stream, maybeLength);
- }
-
- if (name === "LZWDecode" || name === "LZW") {
- xrefStreamStats[_util.StreamType.LZW] = true;
- let earlyChange = 1;
-
- if (params) {
- if (params.has("EarlyChange")) {
- earlyChange = params.get("EarlyChange");
- }
-
- return new _stream.PredictorStream(new _stream.LZWStream(stream, maybeLength, earlyChange), maybeLength, params);
- }
-
- return new _stream.LZWStream(stream, maybeLength, earlyChange);
- }
-
- if (name === "DCTDecode" || name === "DCT") {
- xrefStreamStats[_util.StreamType.DCT] = true;
- return new _jpeg_stream.JpegStream(stream, maybeLength, stream.dict, params);
- }
-
- if (name === "JPXDecode" || name === "JPX") {
- xrefStreamStats[_util.StreamType.JPX] = true;
- return new _jpx_stream.JpxStream(stream, maybeLength, stream.dict, params);
- }
-
- if (name === "ASCII85Decode" || name === "A85") {
- xrefStreamStats[_util.StreamType.A85] = true;
- return new _stream.Ascii85Stream(stream, maybeLength);
- }
-
- if (name === "ASCIIHexDecode" || name === "AHx") {
- xrefStreamStats[_util.StreamType.AHX] = true;
- return new _stream.AsciiHexStream(stream, maybeLength);
- }
-
- if (name === "CCITTFaxDecode" || name === "CCF") {
- xrefStreamStats[_util.StreamType.CCF] = true;
- return new _ccitt_stream.CCITTFaxStream(stream, maybeLength, params);
- }
-
- if (name === "RunLengthDecode" || name === "RL") {
- xrefStreamStats[_util.StreamType.RLX] = true;
- return new _stream.RunLengthStream(stream, maybeLength);
- }
-
- if (name === "JBIG2Decode") {
- xrefStreamStats[_util.StreamType.JBIG] = true;
- return new _jbig2_stream.Jbig2Stream(stream, maybeLength, stream.dict, params);
- }
-
- (0, _util.warn)(`Filter "${name}" is not supported.`);
- return stream;
- } catch (ex) {
- if (ex instanceof _core_utils.MissingDataException) {
- throw ex;
- }
-
- (0, _util.warn)(`Invalid stream: "${ex}"`);
- return new _stream.NullStream();
+ this.rectangle = [0, 0, 0, 0];
}
}
-}
-
-exports.Parser = Parser;
-const specialChars = [1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 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, 2, 0, 2, 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, 2, 0, 2, 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, 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];
-
-function toHexDigit(ch) {
- if (ch >= 0x30 && ch <= 0x39) {
- return ch & 0x0f;
- }
-
- if (ch >= 0x41 && ch <= 0x46 || ch >= 0x61 && ch <= 0x66) {
- return (ch & 0x0f) + 9;
- }
-
- return -1;
-}
-
-class Lexer {
- constructor(stream, knownCommands = null) {
- this.stream = stream;
- this.nextChar();
- this.strBuf = [];
- this.knownCommands = knownCommands;
- this._hexStringNumWarn = 0;
- this.beginInlineImagePos = -1;
- }
-
- nextChar() {
- return this.currentChar = this.stream.getByte();
- }
-
- peekChar() {
- return this.stream.peekByte();
+ setColor(color) {
+ this.color = getRgbColor(color);
}
- getNumber() {
- let ch = this.currentChar;
- let eNotation = false;
- let divideBy = 0;
- let sign = 0;
-
- if (ch === 0x2d) {
- sign = -1;
- ch = this.nextChar();
-
- if (ch === 0x2d) {
- ch = this.nextChar();
- }
- } else if (ch === 0x2b) {
- sign = 1;
- ch = this.nextChar();
- }
+ setBorderStyle(borderStyle) {
+ this.borderStyle = new AnnotationBorderStyle();
- if (ch === 0x0a || ch === 0x0d) {
- do {
- ch = this.nextChar();
- } while (ch === 0x0a || ch === 0x0d);
+ if (!(0, _primitives.isDict)(borderStyle)) {
+ return;
}
- if (ch === 0x2e) {
- divideBy = 10;
- ch = this.nextChar();
- }
+ if (borderStyle.has("BS")) {
+ const dict = borderStyle.get("BS");
+ const dictType = dict.get("Type");
- if (ch < 0x30 || ch > 0x39) {
- if (divideBy === 10 && sign === 0 && ((0, _core_utils.isWhiteSpace)(ch) || ch === -1)) {
- (0, _util.warn)("Lexer.getNumber - treating a single decimal point as zero.");
- return 0;
+ if (!dictType || (0, _primitives.isName)(dictType, "Border")) {
+ this.borderStyle.setWidth(dict.get("W"), this.rectangle);
+ this.borderStyle.setStyle(dict.get("S"));
+ this.borderStyle.setDashArray(dict.getArray("D"));
}
+ } else if (borderStyle.has("Border")) {
+ const array = borderStyle.getArray("Border");
- throw new _util.FormatError(`Invalid number: ${String.fromCharCode(ch)} (charCode ${ch})`);
- }
-
- sign = sign || 1;
- let baseValue = ch - 0x30;
- let powerValue = 0;
- let powerValueSign = 1;
-
- while ((ch = this.nextChar()) >= 0) {
- if (ch >= 0x30 && ch <= 0x39) {
- const currentDigit = ch - 0x30;
-
- if (eNotation) {
- powerValue = powerValue * 10 + currentDigit;
- } else {
- if (divideBy !== 0) {
- divideBy *= 10;
- }
-
- baseValue = baseValue * 10 + currentDigit;
- }
- } else if (ch === 0x2e) {
- if (divideBy === 0) {
- divideBy = 1;
- } else {
- break;
- }
- } else if (ch === 0x2d) {
- (0, _util.warn)("Badly formatted number: minus sign in the middle");
- } else if (ch === 0x45 || ch === 0x65) {
- ch = this.peekChar();
+ if (Array.isArray(array) && array.length >= 3) {
+ this.borderStyle.setHorizontalCornerRadius(array[0]);
+ this.borderStyle.setVerticalCornerRadius(array[1]);
+ this.borderStyle.setWidth(array[2], this.rectangle);
- if (ch === 0x2b || ch === 0x2d) {
- powerValueSign = ch === 0x2d ? -1 : 1;
- this.nextChar();
- } else if (ch < 0x30 || ch > 0x39) {
- break;
+ if (array.length === 4) {
+ this.borderStyle.setDashArray(array[3]);
}
-
- eNotation = true;
- } else {
- break;
- }
- }
-
- if (divideBy !== 0) {
- baseValue /= divideBy;
- }
-
- if (eNotation) {
- baseValue *= 10 ** (powerValueSign * powerValue);
- }
-
- return sign * baseValue;
- }
-
- getString() {
- let numParen = 1;
- let done = false;
- const strBuf = this.strBuf;
- strBuf.length = 0;
- let ch = this.nextChar();
-
- while (true) {
- let charBuffered = false;
-
- switch (ch | 0) {
- case -1:
- (0, _util.warn)("Unterminated string");
- done = true;
- break;
-
- case 0x28:
- ++numParen;
- strBuf.push("(");
- break;
-
- case 0x29:
- if (--numParen === 0) {
- this.nextChar();
- done = true;
- } else {
- strBuf.push(")");
- }
-
- break;
-
- case 0x5c:
- ch = this.nextChar();
-
- switch (ch) {
- case -1:
- (0, _util.warn)("Unterminated string");
- done = true;
- break;
-
- case 0x6e:
- strBuf.push("\n");
- break;
-
- case 0x72:
- strBuf.push("\r");
- break;
-
- case 0x74:
- strBuf.push("\t");
- break;
-
- case 0x62:
- strBuf.push("\b");
- break;
-
- case 0x66:
- strBuf.push("\f");
- break;
-
- case 0x5c:
- case 0x28:
- case 0x29:
- strBuf.push(String.fromCharCode(ch));
- break;
-
- case 0x30:
- case 0x31:
- case 0x32:
- case 0x33:
- case 0x34:
- case 0x35:
- case 0x36:
- case 0x37:
- let x = ch & 0x0f;
- ch = this.nextChar();
- charBuffered = true;
-
- if (ch >= 0x30 && ch <= 0x37) {
- x = (x << 3) + (ch & 0x0f);
- ch = this.nextChar();
-
- if (ch >= 0x30 && ch <= 0x37) {
- charBuffered = false;
- x = (x << 3) + (ch & 0x0f);
- }
- }
-
- strBuf.push(String.fromCharCode(x));
- break;
-
- case 0x0d:
- if (this.peekChar() === 0x0a) {
- this.nextChar();
- }
-
- break;
-
- case 0x0a:
- break;
-
- default:
- strBuf.push(String.fromCharCode(ch));
- break;
- }
-
- break;
-
- default:
- strBuf.push(String.fromCharCode(ch));
- break;
- }
-
- if (done) {
- break;
- }
-
- if (!charBuffered) {
- ch = this.nextChar();
}
+ } else {
+ this.borderStyle.setWidth(0);
}
-
- return strBuf.join("");
}
- getName() {
- let ch, previousCh;
- const strBuf = this.strBuf;
- strBuf.length = 0;
-
- while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) {
- if (ch === 0x23) {
- ch = this.nextChar();
-
- if (specialChars[ch]) {
- (0, _util.warn)("Lexer_getName: " + "NUMBER SIGN (#) should be followed by a hexadecimal number.");
- strBuf.push("#");
- break;
- }
-
- const x = toHexDigit(ch);
-
- if (x !== -1) {
- previousCh = ch;
- ch = this.nextChar();
- const x2 = toHexDigit(ch);
-
- if (x2 === -1) {
- (0, _util.warn)(`Lexer_getName: Illegal digit (${String.fromCharCode(ch)}) ` + "in hexadecimal number.");
- strBuf.push("#", String.fromCharCode(previousCh));
-
- if (specialChars[ch]) {
- break;
- }
-
- strBuf.push(String.fromCharCode(ch));
- continue;
- }
-
- strBuf.push(String.fromCharCode(x << 4 | x2));
- } else {
- strBuf.push("#", String.fromCharCode(ch));
- }
- } else {
- strBuf.push(String.fromCharCode(ch));
- }
- }
+ setAppearance(dict) {
+ this.appearance = null;
+ const appearanceStates = dict.get("AP");
- if (strBuf.length > 127) {
- (0, _util.warn)(`Name token is longer than allowed by the spec: ${strBuf.length}`);
+ if (!(0, _primitives.isDict)(appearanceStates)) {
+ return;
}
- return _primitives.Name.get(strBuf.join(""));
- }
-
- _hexStringWarn(ch) {
- const MAX_HEX_STRING_NUM_WARN = 5;
+ const normalAppearanceState = appearanceStates.get("N");
- if (this._hexStringNumWarn++ === MAX_HEX_STRING_NUM_WARN) {
- (0, _util.warn)("getHexString - ignoring additional invalid characters.");
+ if ((0, _primitives.isStream)(normalAppearanceState)) {
+ this.appearance = normalAppearanceState;
return;
}
- if (this._hexStringNumWarn > MAX_HEX_STRING_NUM_WARN) {
+ if (!(0, _primitives.isDict)(normalAppearanceState)) {
return;
}
- (0, _util.warn)(`getHexString - ignoring invalid character: ${ch}`);
- }
-
- getHexString() {
- const strBuf = this.strBuf;
- strBuf.length = 0;
- let ch = this.currentChar;
- let isFirstHex = true;
- let firstDigit, secondDigit;
- this._hexStringNumWarn = 0;
-
- while (true) {
- if (ch < 0) {
- (0, _util.warn)("Unterminated hex string");
- break;
- } else if (ch === 0x3e) {
- this.nextChar();
- break;
- } else if (specialChars[ch] === 1) {
- ch = this.nextChar();
- continue;
- } else {
- if (isFirstHex) {
- firstDigit = toHexDigit(ch);
-
- if (firstDigit === -1) {
- this._hexStringWarn(ch);
-
- ch = this.nextChar();
- continue;
- }
- } else {
- secondDigit = toHexDigit(ch);
-
- if (secondDigit === -1) {
- this._hexStringWarn(ch);
-
- ch = this.nextChar();
- continue;
- }
-
- strBuf.push(String.fromCharCode(firstDigit << 4 | secondDigit));
- }
-
- isFirstHex = !isFirstHex;
- ch = this.nextChar();
- }
- }
-
- return strBuf.join("");
- }
-
- getObj() {
- let comment = false;
- let ch = this.currentChar;
-
- while (true) {
- if (ch < 0) {
- return _primitives.EOF;
- }
-
- if (comment) {
- if (ch === 0x0a || ch === 0x0d) {
- comment = false;
- }
- } else if (ch === 0x25) {
- comment = true;
- } else if (specialChars[ch] !== 1) {
- break;
- }
-
- ch = this.nextChar();
- }
-
- switch (ch | 0) {
- case 0x30:
- case 0x31:
- case 0x32:
- case 0x33:
- case 0x34:
- case 0x35:
- case 0x36:
- case 0x37:
- case 0x38:
- case 0x39:
- case 0x2b:
- case 0x2d:
- case 0x2e:
- return this.getNumber();
-
- case 0x28:
- return this.getString();
-
- case 0x2f:
- return this.getName();
-
- case 0x5b:
- this.nextChar();
- return _primitives.Cmd.get("[");
-
- case 0x5d:
- this.nextChar();
- return _primitives.Cmd.get("]");
-
- case 0x3c:
- ch = this.nextChar();
-
- if (ch === 0x3c) {
- this.nextChar();
- return _primitives.Cmd.get("<<");
- }
-
- return this.getHexString();
-
- case 0x3e:
- ch = this.nextChar();
-
- if (ch === 0x3e) {
- this.nextChar();
- return _primitives.Cmd.get(">>");
- }
-
- return _primitives.Cmd.get(">");
-
- case 0x7b:
- this.nextChar();
- return _primitives.Cmd.get("{");
-
- case 0x7d:
- this.nextChar();
- return _primitives.Cmd.get("}");
-
- case 0x29:
- this.nextChar();
- throw new _util.FormatError(`Illegal character: ${ch}`);
- }
-
- let str = String.fromCharCode(ch);
- const knownCommands = this.knownCommands;
- let knownCommandFound = knownCommands && knownCommands[str] !== undefined;
-
- while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) {
- const possibleCommand = str + String.fromCharCode(ch);
-
- if (knownCommandFound && knownCommands[possibleCommand] === undefined) {
- break;
- }
-
- if (str.length === 128) {
- throw new _util.FormatError(`Command token too long: ${str.length}`);
- }
-
- str = possibleCommand;
- knownCommandFound = knownCommands && knownCommands[str] !== undefined;
- }
-
- if (str === "true") {
- return true;
- }
-
- if (str === "false") {
- return false;
- }
-
- if (str === "null") {
- return null;
- }
-
- if (str === "BI") {
- this.beginInlineImagePos = this.stream.pos;
- }
-
- return _primitives.Cmd.get(str);
- }
-
- peekObj() {
- const streamPos = this.stream.pos,
- currentChar = this.currentChar,
- beginInlineImagePos = this.beginInlineImagePos;
- let nextObj;
-
- try {
- nextObj = this.getObj();
- } catch (ex) {
- if (ex instanceof _core_utils.MissingDataException) {
- throw ex;
- }
+ const as = dict.get("AS");
- (0, _util.warn)(`peekObj: ${ex}`);
+ if (!(0, _primitives.isName)(as) || !normalAppearanceState.has(as.name)) {
+ return;
}
- this.stream.pos = streamPos;
- this.currentChar = currentChar;
- this.beginInlineImagePos = beginInlineImagePos;
- return nextObj;
+ this.appearance = normalAppearanceState.get(as.name);
}
- skipToNextLine() {
- let ch = this.currentChar;
-
- while (ch >= 0) {
- if (ch === 0x0d) {
- ch = this.nextChar();
-
- if (ch === 0x0a) {
- this.nextChar();
- }
-
- break;
- } else if (ch === 0x0a) {
- this.nextChar();
- break;
+ loadResources(keys) {
+ return this.appearance.dict.getAsync("Resources").then(resources => {
+ if (!resources) {
+ return undefined;
}
- ch = this.nextChar();
- }
+ const objectLoader = new _object_loader.ObjectLoader(resources, keys, resources.xref);
+ return objectLoader.load().then(function () {
+ return resources;
+ });
+ });
}
-}
-
-exports.Lexer = Lexer;
-
-class Linearization {
- static create(stream) {
- function getInt(linDict, name, allowZeroValue = false) {
- const obj = linDict.get(name);
-
- if (Number.isInteger(obj) && (allowZeroValue ? obj >= 0 : obj > 0)) {
- return obj;
- }
-
- throw new Error(`The "${name}" parameter in the linearization ` + "dictionary is invalid.");
- }
-
- function getHints(linDict) {
- const hints = linDict.get("H");
- let hintsLength;
-
- if (Array.isArray(hints) && ((hintsLength = hints.length) === 2 || hintsLength === 4)) {
- for (let index = 0; index < hintsLength; index++) {
- const hint = hints[index];
-
- if (!(Number.isInteger(hint) && hint > 0)) {
- throw new Error(`Hint (${index}) in the linearization dictionary is invalid.`);
- }
- }
-
- return hints;
- }
-
- throw new Error("Hint array in the linearization dictionary is invalid.");
+ getOperatorList(evaluator, task, renderForms, annotationStorage) {
+ if (!this.appearance) {
+ return Promise.resolve(new _operator_list.OperatorList());
}
- const parser = new Parser({
- lexer: new Lexer(stream),
- xref: null
+ const appearance = this.appearance;
+ const data = this.data;
+ const appearanceDict = appearance.dict;
+ const resourcesPromise = this.loadResources(["ExtGState", "ColorSpace", "Pattern", "Shading", "XObject", "Font"]);
+ const bbox = appearanceDict.getArray("BBox") || [0, 0, 1, 1];
+ const matrix = appearanceDict.getArray("Matrix") || [1, 0, 0, 1, 0, 0];
+ const transform = getTransformMatrix(data.rect, bbox, matrix);
+ return resourcesPromise.then(resources => {
+ const opList = new _operator_list.OperatorList();
+ opList.addOp(_util.OPS.beginAnnotation, [data.id, data.rect, transform, matrix]);
+ return evaluator.getOperatorList({
+ stream: appearance,
+ task,
+ resources,
+ operatorList: opList,
+ fallbackFontDict: this._fallbackFontDict
+ }).then(() => {
+ opList.addOp(_util.OPS.endAnnotation, []);
+ this.reset();
+ return opList;
+ });
});
- const obj1 = parser.getObj();
- const obj2 = parser.getObj();
- const obj3 = parser.getObj();
- const linDict = parser.getObj();
- let obj, length;
-
- if (!(Number.isInteger(obj1) && Number.isInteger(obj2) && (0, _primitives.isCmd)(obj3, "obj") && (0, _primitives.isDict)(linDict) && (0, _util.isNum)(obj = linDict.get("Linearized")) && obj > 0)) {
- return null;
- } else if ((length = getInt(linDict, "L")) !== stream.length) {
- throw new Error('The "L" parameter in the linearization dictionary ' + "does not equal the stream length.");
- }
-
- return {
- length,
- hints: getHints(linDict),
- objectNumberFirst: getInt(linDict, "O"),
- endFirst: getInt(linDict, "E"),
- numPages: getInt(linDict, "N"),
- mainXRefEntriesOffset: getInt(linDict, "T"),
- pageFirst: linDict.has("P") ? getInt(linDict, "P", true) : 0
- };
}
-}
-
-exports.Linearization = Linearization;
-
-/***/ }),
-/* 12 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.LZWStream = exports.StringStream = exports.StreamsSequenceStream = exports.Stream = exports.RunLengthStream = exports.PredictorStream = exports.NullStream = exports.FlateStream = exports.DecodeStream = exports.DecryptStream = exports.AsciiHexStream = exports.Ascii85Stream = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var _primitives = __w_pdfjs_require__(5);
-
-var _core_utils = __w_pdfjs_require__(8);
-
-var Stream = function StreamClosure() {
- function Stream(arrayBuffer, start, length, dict) {
- this.bytes = arrayBuffer instanceof Uint8Array ? arrayBuffer : new Uint8Array(arrayBuffer);
- this.start = start || 0;
- this.pos = this.start;
- this.end = start + length || this.bytes.length;
- this.dict = dict;
+ async save(evaluator, task, annotationStorage) {
+ return null;
}
- Stream.prototype = {
- get length() {
- return this.end - this.start;
- },
-
- get isEmpty() {
- return this.length === 0;
- },
-
- getByte: function Stream_getByte() {
- if (this.pos >= this.end) {
- return -1;
- }
-
- return this.bytes[this.pos++];
- },
- getUint16: function Stream_getUint16() {
- var b0 = this.getByte();
- var b1 = this.getByte();
-
- if (b0 === -1 || b1 === -1) {
- return -1;
- }
-
- return (b0 << 8) + b1;
- },
- getInt32: function Stream_getInt32() {
- var b0 = this.getByte();
- var b1 = this.getByte();
- var b2 = this.getByte();
- var b3 = this.getByte();
- return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;
- },
-
- getBytes(length, forceClamped = false) {
- var bytes = this.bytes;
- var pos = this.pos;
- var strEnd = this.end;
-
- if (!length) {
- const subarray = bytes.subarray(pos, strEnd);
- return forceClamped ? new Uint8ClampedArray(subarray) : subarray;
- }
-
- var end = pos + length;
-
- if (end > strEnd) {
- end = strEnd;
- }
-
- this.pos = end;
- const subarray = bytes.subarray(pos, end);
- return forceClamped ? new Uint8ClampedArray(subarray) : subarray;
- },
-
- peekByte: function Stream_peekByte() {
- var peekedByte = this.getByte();
-
- if (peekedByte !== -1) {
- this.pos--;
- }
-
- return peekedByte;
- },
-
- peekBytes(length, forceClamped = false) {
- var bytes = this.getBytes(length, forceClamped);
- this.pos -= bytes.length;
- return bytes;
- },
-
- getByteRange(begin, end) {
- if (begin < 0) {
- begin = 0;
- }
-
- if (end > this.end) {
- end = this.end;
- }
-
- return this.bytes.subarray(begin, end);
- },
-
- skip: function Stream_skip(n) {
- if (!n) {
- n = 1;
- }
-
- this.pos += n;
- },
- reset: function Stream_reset() {
- this.pos = this.start;
- },
- moveStart: function Stream_moveStart() {
- this.start = this.pos;
- },
- makeSubStream: function Stream_makeSubStream(start, length, dict) {
- return new Stream(this.bytes.buffer, start, length, dict);
+ getFieldObject() {
+ if (this.data.kidIds) {
+ return {
+ id: this.data.id,
+ actions: this.data.actions,
+ name: this.data.fieldName,
+ type: "",
+ kidIds: this.data.kidIds,
+ page: this.data.pageIndex
+ };
}
- };
- return Stream;
-}();
-exports.Stream = Stream;
-
-var StringStream = function StringStreamClosure() {
- function StringStream(str) {
- const bytes = (0, _util.stringToBytes)(str);
- Stream.call(this, bytes);
- }
-
- StringStream.prototype = Stream.prototype;
- return StringStream;
-}();
-
-exports.StringStream = StringStream;
-
-var DecodeStream = function DecodeStreamClosure() {
- var emptyBuffer = new Uint8Array(0);
-
- function DecodeStream(maybeMinBufferLength) {
- this._rawMinBufferLength = maybeMinBufferLength || 0;
- this.pos = 0;
- this.bufferLength = 0;
- this.eof = false;
- this.buffer = emptyBuffer;
- this.minBufferLength = 512;
-
- if (maybeMinBufferLength) {
- while (this.minBufferLength < maybeMinBufferLength) {
- this.minBufferLength *= 2;
- }
- }
+ return null;
}
- DecodeStream.prototype = {
- get isEmpty() {
- while (!this.eof && this.bufferLength === 0) {
- this.readBlock();
- }
-
- return this.bufferLength === 0;
- },
-
- ensureBuffer: function DecodeStream_ensureBuffer(requested) {
- var buffer = this.buffer;
-
- if (requested <= buffer.byteLength) {
- return buffer;
- }
-
- var size = this.minBufferLength;
-
- while (size < requested) {
- size *= 2;
- }
-
- var buffer2 = new Uint8Array(size);
- buffer2.set(buffer);
- return this.buffer = buffer2;
- },
- getByte: function DecodeStream_getByte() {
- var pos = this.pos;
-
- while (this.bufferLength <= pos) {
- if (this.eof) {
- return -1;
- }
-
- this.readBlock();
- }
-
- return this.buffer[this.pos++];
- },
- getUint16: function DecodeStream_getUint16() {
- var b0 = this.getByte();
- var b1 = this.getByte();
-
- if (b0 === -1 || b1 === -1) {
- return -1;
- }
-
- return (b0 << 8) + b1;
- },
- getInt32: function DecodeStream_getInt32() {
- var b0 = this.getByte();
- var b1 = this.getByte();
- var b2 = this.getByte();
- var b3 = this.getByte();
- return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;
- },
-
- getBytes(length, forceClamped = false) {
- var end,
- pos = this.pos;
-
- if (length) {
- this.ensureBuffer(pos + length);
- end = pos + length;
-
- while (!this.eof && this.bufferLength < end) {
- this.readBlock();
- }
-
- var bufEnd = this.bufferLength;
-
- if (end > bufEnd) {
- end = bufEnd;
- }
- } else {
- while (!this.eof) {
- this.readBlock();
- }
-
- end = this.bufferLength;
- }
-
- this.pos = end;
- const subarray = this.buffer.subarray(pos, end);
- return forceClamped && !(subarray instanceof Uint8ClampedArray) ? new Uint8ClampedArray(subarray) : subarray;
- },
-
- peekByte: function DecodeStream_peekByte() {
- var peekedByte = this.getByte();
-
- if (peekedByte !== -1) {
- this.pos--;
- }
-
- return peekedByte;
- },
-
- peekBytes(length, forceClamped = false) {
- var bytes = this.getBytes(length, forceClamped);
- this.pos -= bytes.length;
- return bytes;
- },
-
- makeSubStream: function DecodeStream_makeSubStream(start, length, dict) {
- var end = start + length;
-
- while (this.bufferLength <= end && !this.eof) {
- this.readBlock();
- }
-
- return new Stream(this.buffer, start, length, dict);
- },
-
- getByteRange(begin, end) {
- (0, _util.unreachable)("Should not call DecodeStream.getByteRange");
- },
-
- skip: function DecodeStream_skip(n) {
- if (!n) {
- n = 1;
- }
-
- this.pos += n;
- },
- reset: function DecodeStream_reset() {
- this.pos = 0;
- },
- getBaseStreams: function DecodeStream_getBaseStreams() {
- if (this.str && this.str.getBaseStreams) {
- return this.str.getBaseStreams();
- }
-
- return [];
- }
- };
- return DecodeStream;
-}();
-
-exports.DecodeStream = DecodeStream;
-
-var StreamsSequenceStream = function StreamsSequenceStreamClosure() {
- function StreamsSequenceStream(streams) {
- this.streams = streams;
- let maybeLength = 0;
-
- for (let i = 0, ii = streams.length; i < ii; i++) {
- const stream = streams[i];
-
- if (stream instanceof DecodeStream) {
- maybeLength += stream._rawMinBufferLength;
- } else {
- maybeLength += stream.length;
- }
+ reset() {
+ for (const stream of this._streams) {
+ stream.reset();
}
-
- DecodeStream.call(this, maybeLength);
}
- StreamsSequenceStream.prototype = Object.create(DecodeStream.prototype);
-
- StreamsSequenceStream.prototype.readBlock = function streamSequenceStreamReadBlock() {
- var streams = this.streams;
-
- if (streams.length === 0) {
- this.eof = true;
- return;
- }
-
- var stream = streams.shift();
- var chunk = stream.getBytes();
- var bufferLength = this.bufferLength;
- var newLength = bufferLength + chunk.length;
- var buffer = this.ensureBuffer(newLength);
- buffer.set(chunk, bufferLength);
- this.bufferLength = newLength;
- };
-
- StreamsSequenceStream.prototype.getBaseStreams = function StreamsSequenceStream_getBaseStreams() {
- var baseStreams = [];
-
- for (var i = 0, ii = this.streams.length; i < ii; i++) {
- var stream = this.streams[i];
-
- if (stream.getBaseStreams) {
- baseStreams.push(...stream.getBaseStreams());
- }
- }
-
- return baseStreams;
- };
-
- return StreamsSequenceStream;
-}();
-
-exports.StreamsSequenceStream = StreamsSequenceStream;
-
-var FlateStream = function FlateStreamClosure() {
- var codeLenCodeMap = new Int32Array([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);
- var lengthDecode = new Int32Array([0x00003, 0x00004, 0x00005, 0x00006, 0x00007, 0x00008, 0x00009, 0x0000a, 0x1000b, 0x1000d, 0x1000f, 0x10011, 0x20013, 0x20017, 0x2001b, 0x2001f, 0x30023, 0x3002b, 0x30033, 0x3003b, 0x40043, 0x40053, 0x40063, 0x40073, 0x50083, 0x500a3, 0x500c3, 0x500e3, 0x00102, 0x00102, 0x00102]);
- var distDecode = new Int32Array([0x00001, 0x00002, 0x00003, 0x00004, 0x10005, 0x10007, 0x20009, 0x2000d, 0x30011, 0x30019, 0x40021, 0x40031, 0x50041, 0x50061, 0x60081, 0x600c1, 0x70101, 0x70181, 0x80201, 0x80301, 0x90401, 0x90601, 0xa0801, 0xa0c01, 0xb1001, 0xb1801, 0xc2001, 0xc3001, 0xd4001, 0xd6001]);
- var fixedLitCodeTab = [new Int32Array([0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c0, 0x70108, 0x80060, 0x80020, 0x900a0, 0x80000, 0x80080, 0x80040, 0x900e0, 0x70104, 0x80058, 0x80018, 0x90090, 0x70114, 0x80078, 0x80038, 0x900d0, 0x7010c, 0x80068, 0x80028, 0x900b0, 0x80008, 0x80088, 0x80048, 0x900f0, 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c8, 0x7010a, 0x80064, 0x80024, 0x900a8, 0x80004, 0x80084, 0x80044, 0x900e8, 0x70106, 0x8005c, 0x8001c, 0x90098, 0x70116, 0x8007c, 0x8003c, 0x900d8, 0x7010e, 0x8006c, 0x8002c, 0x900b8, 0x8000c, 0x8008c, 0x8004c, 0x900f8, 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c4, 0x70109, 0x80062, 0x80022, 0x900a4, 0x80002, 0x80082, 0x80042, 0x900e4, 0x70105, 0x8005a, 0x8001a, 0x90094, 0x70115, 0x8007a, 0x8003a, 0x900d4, 0x7010d, 0x8006a, 0x8002a, 0x900b4, 0x8000a, 0x8008a, 0x8004a, 0x900f4, 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cc, 0x7010b, 0x80066, 0x80026, 0x900ac, 0x80006, 0x80086, 0x80046, 0x900ec, 0x70107, 0x8005e, 0x8001e, 0x9009c, 0x70117, 0x8007e, 0x8003e, 0x900dc, 0x7010f, 0x8006e, 0x8002e, 0x900bc, 0x8000e, 0x8008e, 0x8004e, 0x900fc, 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c2, 0x70108, 0x80061, 0x80021, 0x900a2, 0x80001, 0x80081, 0x80041, 0x900e2, 0x70104, 0x80059, 0x80019, 0x90092, 0x70114, 0x80079, 0x80039, 0x900d2, 0x7010c, 0x80069, 0x80029, 0x900b2, 0x80009, 0x80089, 0x80049, 0x900f2, 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900ca, 0x7010a, 0x80065, 0x80025, 0x900aa, 0x80005, 0x80085, 0x80045, 0x900ea, 0x70106, 0x8005d, 0x8001d, 0x9009a, 0x70116, 0x8007d, 0x8003d, 0x900da, 0x7010e, 0x8006d, 0x8002d, 0x900ba, 0x8000d, 0x8008d, 0x8004d, 0x900fa, 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c6, 0x70109, 0x80063, 0x80023, 0x900a6, 0x80003, 0x80083, 0x80043, 0x900e6, 0x70105, 0x8005b, 0x8001b, 0x90096, 0x70115, 0x8007b, 0x8003b, 0x900d6, 0x7010d, 0x8006b, 0x8002b, 0x900b6, 0x8000b, 0x8008b, 0x8004b, 0x900f6, 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900ce, 0x7010b, 0x80067, 0x80027, 0x900ae, 0x80007, 0x80087, 0x80047, 0x900ee, 0x70107, 0x8005f, 0x8001f, 0x9009e, 0x70117, 0x8007f, 0x8003f, 0x900de, 0x7010f, 0x8006f, 0x8002f, 0x900be, 0x8000f, 0x8008f, 0x8004f, 0x900fe, 0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c1, 0x70108, 0x80060, 0x80020, 0x900a1, 0x80000, 0x80080, 0x80040, 0x900e1, 0x70104, 0x80058, 0x80018, 0x90091, 0x70114, 0x80078, 0x80038, 0x900d1, 0x7010c, 0x80068, 0x80028, 0x900b1, 0x80008, 0x80088, 0x80048, 0x900f1, 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c9, 0x7010a, 0x80064, 0x80024, 0x900a9, 0x80004, 0x80084, 0x80044, 0x900e9, 0x70106, 0x8005c, 0x8001c, 0x90099, 0x70116, 0x8007c, 0x8003c, 0x900d9, 0x7010e, 0x8006c, 0x8002c, 0x900b9, 0x8000c, 0x8008c, 0x8004c, 0x900f9, 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c5, 0x70109, 0x80062, 0x80022, 0x900a5, 0x80002, 0x80082, 0x80042, 0x900e5, 0x70105, 0x8005a, 0x8001a, 0x90095, 0x70115, 0x8007a, 0x8003a, 0x900d5, 0x7010d, 0x8006a, 0x8002a, 0x900b5, 0x8000a, 0x8008a, 0x8004a, 0x900f5, 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cd, 0x7010b, 0x80066, 0x80026, 0x900ad, 0x80006, 0x80086, 0x80046, 0x900ed, 0x70107, 0x8005e, 0x8001e, 0x9009d, 0x70117, 0x8007e, 0x8003e, 0x900dd, 0x7010f, 0x8006e, 0x8002e, 0x900bd, 0x8000e, 0x8008e, 0x8004e, 0x900fd, 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c3, 0x70108, 0x80061, 0x80021, 0x900a3, 0x80001, 0x80081, 0x80041, 0x900e3, 0x70104, 0x80059, 0x80019, 0x90093, 0x70114, 0x80079, 0x80039, 0x900d3, 0x7010c, 0x80069, 0x80029, 0x900b3, 0x80009, 0x80089, 0x80049, 0x900f3, 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900cb, 0x7010a, 0x80065, 0x80025, 0x900ab, 0x80005, 0x80085, 0x80045, 0x900eb, 0x70106, 0x8005d, 0x8001d, 0x9009b, 0x70116, 0x8007d, 0x8003d, 0x900db, 0x7010e, 0x8006d, 0x8002d, 0x900bb, 0x8000d, 0x8008d, 0x8004d, 0x900fb, 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c7, 0x70109, 0x80063, 0x80023, 0x900a7, 0x80003, 0x80083, 0x80043, 0x900e7, 0x70105, 0x8005b, 0x8001b, 0x90097, 0x70115, 0x8007b, 0x8003b, 0x900d7, 0x7010d, 0x8006b, 0x8002b, 0x900b7, 0x8000b, 0x8008b, 0x8004b, 0x900f7, 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900cf, 0x7010b, 0x80067, 0x80027, 0x900af, 0x80007, 0x80087, 0x80047, 0x900ef, 0x70107, 0x8005f, 0x8001f, 0x9009f, 0x70117, 0x8007f, 0x8003f, 0x900df, 0x7010f, 0x8006f, 0x8002f, 0x900bf, 0x8000f, 0x8008f, 0x8004f, 0x900ff]), 9];
- var fixedDistCodeTab = [new Int32Array([0x50000, 0x50010, 0x50008, 0x50018, 0x50004, 0x50014, 0x5000c, 0x5001c, 0x50002, 0x50012, 0x5000a, 0x5001a, 0x50006, 0x50016, 0x5000e, 0x00000, 0x50001, 0x50011, 0x50009, 0x50019, 0x50005, 0x50015, 0x5000d, 0x5001d, 0x50003, 0x50013, 0x5000b, 0x5001b, 0x50007, 0x50017, 0x5000f, 0x00000]), 5];
-
- function FlateStream(str, maybeLength) {
- this.str = str;
- this.dict = str.dict;
- var cmf = str.getByte();
- var flg = str.getByte();
-
- if (cmf === -1 || flg === -1) {
- throw new _util.FormatError(`Invalid header in flate stream: ${cmf}, ${flg}`);
+ _constructFieldName(dict) {
+ if (!dict.has("T") && !dict.has("Parent")) {
+ (0, _util.warn)("Unknown field name, falling back to empty field name.");
+ return "";
}
- if ((cmf & 0x0f) !== 0x08) {
- throw new _util.FormatError(`Unknown compression method in flate stream: ${cmf}, ${flg}`);
+ if (!dict.has("Parent")) {
+ return (0, _util.stringToPDFString)(dict.get("T"));
}
- if (((cmf << 8) + flg) % 31 !== 0) {
- throw new _util.FormatError(`Bad FCHECK in flate stream: ${cmf}, ${flg}`);
- }
+ const fieldName = [];
- if (flg & 0x20) {
- throw new _util.FormatError(`FDICT bit set in flate stream: ${cmf}, ${flg}`);
+ if (dict.has("T")) {
+ fieldName.unshift((0, _util.stringToPDFString)(dict.get("T")));
}
- this.codeSize = 0;
- this.codeBuf = 0;
- DecodeStream.call(this, maybeLength);
- }
-
- FlateStream.prototype = Object.create(DecodeStream.prototype);
-
- FlateStream.prototype.getBits = function FlateStream_getBits(bits) {
- var str = this.str;
- var codeSize = this.codeSize;
- var codeBuf = this.codeBuf;
- var b;
-
- while (codeSize < bits) {
- if ((b = str.getByte()) === -1) {
- throw new _util.FormatError("Bad encoding in flate stream");
- }
+ let loopDict = dict;
+ const visited = new _primitives.RefSet();
- codeBuf |= b << codeSize;
- codeSize += 8;
+ if (dict.objId) {
+ visited.put(dict.objId);
}
- b = codeBuf & (1 << bits) - 1;
- this.codeBuf = codeBuf >> bits;
- this.codeSize = codeSize -= bits;
- return b;
- };
-
- FlateStream.prototype.getCode = function FlateStream_getCode(table) {
- var str = this.str;
- var codes = table[0];
- var maxLen = table[1];
- var codeSize = this.codeSize;
- var codeBuf = this.codeBuf;
- var b;
+ while (loopDict.has("Parent")) {
+ loopDict = loopDict.get("Parent");
- while (codeSize < maxLen) {
- if ((b = str.getByte()) === -1) {
+ if (!(loopDict instanceof _primitives.Dict) || loopDict.objId && visited.has(loopDict.objId)) {
break;
}
- codeBuf |= b << codeSize;
- codeSize += 8;
- }
-
- var code = codes[codeBuf & (1 << maxLen) - 1];
- var codeLen = code >> 16;
- var codeVal = code & 0xffff;
-
- if (codeLen < 1 || codeSize < codeLen) {
- throw new _util.FormatError("Bad encoding in flate stream");
- }
-
- this.codeBuf = codeBuf >> codeLen;
- this.codeSize = codeSize - codeLen;
- return codeVal;
- };
-
- FlateStream.prototype.generateHuffmanTable = function flateStreamGenerateHuffmanTable(lengths) {
- var n = lengths.length;
- var maxLen = 0;
- var i;
-
- for (i = 0; i < n; ++i) {
- if (lengths[i] > maxLen) {
- maxLen = lengths[i];
- }
- }
-
- var size = 1 << maxLen;
- var codes = new Int32Array(size);
-
- for (var len = 1, code = 0, skip = 2; len <= maxLen; ++len, code <<= 1, skip <<= 1) {
- for (var val = 0; val < n; ++val) {
- if (lengths[val] === len) {
- var code2 = 0;
- var t = code;
-
- for (i = 0; i < len; ++i) {
- code2 = code2 << 1 | t & 1;
- t >>= 1;
- }
-
- for (i = code2; i < size; i += skip) {
- codes[i] = len << 16 | val;
- }
-
- ++code;
- }
- }
- }
-
- return [codes, maxLen];
- };
-
- FlateStream.prototype.readBlock = function FlateStream_readBlock() {
- var buffer, len;
- var str = this.str;
- var hdr = this.getBits(3);
-
- if (hdr & 1) {
- this.eof = true;
- }
-
- hdr >>= 1;
-
- if (hdr === 0) {
- var b;
-
- if ((b = str.getByte()) === -1) {
- throw new _util.FormatError("Bad block header in flate stream");
- }
-
- var blockLen = b;
-
- if ((b = str.getByte()) === -1) {
- throw new _util.FormatError("Bad block header in flate stream");
- }
-
- blockLen |= b << 8;
-
- if ((b = str.getByte()) === -1) {
- throw new _util.FormatError("Bad block header in flate stream");
- }
-
- var check = b;
-
- if ((b = str.getByte()) === -1) {
- throw new _util.FormatError("Bad block header in flate stream");
- }
-
- check |= b << 8;
-
- if (check !== (~blockLen & 0xffff) && (blockLen !== 0 || check !== 0)) {
- throw new _util.FormatError("Bad uncompressed block length in flate stream");
- }
-
- this.codeBuf = 0;
- this.codeSize = 0;
- const bufferLength = this.bufferLength,
- end = bufferLength + blockLen;
- buffer = this.ensureBuffer(end);
- this.bufferLength = end;
-
- if (blockLen === 0) {
- if (str.peekByte() === -1) {
- this.eof = true;
- }
- } else {
- const block = str.getBytes(blockLen);
- buffer.set(block, bufferLength);
-
- if (block.length < blockLen) {
- this.eof = true;
- }
- }
-
- return;
- }
-
- var litCodeTable;
- var distCodeTable;
-
- if (hdr === 1) {
- litCodeTable = fixedLitCodeTab;
- distCodeTable = fixedDistCodeTab;
- } else if (hdr === 2) {
- var numLitCodes = this.getBits(5) + 257;
- var numDistCodes = this.getBits(5) + 1;
- var numCodeLenCodes = this.getBits(4) + 4;
- var codeLenCodeLengths = new Uint8Array(codeLenCodeMap.length);
- var i;
-
- for (i = 0; i < numCodeLenCodes; ++i) {
- codeLenCodeLengths[codeLenCodeMap[i]] = this.getBits(3);
- }
-
- var codeLenCodeTab = this.generateHuffmanTable(codeLenCodeLengths);
- len = 0;
- i = 0;
- var codes = numLitCodes + numDistCodes;
- var codeLengths = new Uint8Array(codes);
- var bitsLength, bitsOffset, what;
-
- while (i < codes) {
- var code = this.getCode(codeLenCodeTab);
-
- if (code === 16) {
- bitsLength = 2;
- bitsOffset = 3;
- what = len;
- } else if (code === 17) {
- bitsLength = 3;
- bitsOffset = 3;
- what = len = 0;
- } else if (code === 18) {
- bitsLength = 7;
- bitsOffset = 11;
- what = len = 0;
- } else {
- codeLengths[i++] = len = code;
- continue;
- }
-
- var repeatLength = this.getBits(bitsLength) + bitsOffset;
-
- while (repeatLength-- > 0) {
- codeLengths[i++] = what;
- }
- }
-
- litCodeTable = this.generateHuffmanTable(codeLengths.subarray(0, numLitCodes));
- distCodeTable = this.generateHuffmanTable(codeLengths.subarray(numLitCodes, codes));
- } else {
- throw new _util.FormatError("Unknown block type in flate stream");
- }
-
- buffer = this.buffer;
- var limit = buffer ? buffer.length : 0;
- var pos = this.bufferLength;
-
- while (true) {
- var code1 = this.getCode(litCodeTable);
-
- if (code1 < 256) {
- if (pos + 1 >= limit) {
- buffer = this.ensureBuffer(pos + 1);
- limit = buffer.length;
- }
-
- buffer[pos++] = code1;
- continue;
- }
-
- if (code1 === 256) {
- this.bufferLength = pos;
- return;
- }
-
- code1 -= 257;
- code1 = lengthDecode[code1];
- var code2 = code1 >> 16;
-
- if (code2 > 0) {
- code2 = this.getBits(code2);
- }
-
- len = (code1 & 0xffff) + code2;
- code1 = this.getCode(distCodeTable);
- code1 = distDecode[code1];
- code2 = code1 >> 16;
-
- if (code2 > 0) {
- code2 = this.getBits(code2);
- }
-
- var dist = (code1 & 0xffff) + code2;
-
- if (pos + len >= limit) {
- buffer = this.ensureBuffer(pos + len);
- limit = buffer.length;
+ if (loopDict.objId) {
+ visited.put(loopDict.objId);
}
- for (var k = 0; k < len; ++k, ++pos) {
- buffer[pos] = buffer[pos - dist];
+ if (loopDict.has("T")) {
+ fieldName.unshift((0, _util.stringToPDFString)(loopDict.get("T")));
}
}
- };
-
- return FlateStream;
-}();
-
-exports.FlateStream = FlateStream;
-
-var PredictorStream = function PredictorStreamClosure() {
- function PredictorStream(str, maybeLength, params) {
- if (!(0, _primitives.isDict)(params)) {
- return str;
- }
-
- var predictor = this.predictor = params.get("Predictor") || 1;
- if (predictor <= 1) {
- return str;
- }
+ return fieldName.join(".");
+ }
- if (predictor !== 2 && (predictor < 10 || predictor > 15)) {
- throw new _util.FormatError(`Unsupported predictor: ${predictor}`);
- }
+}
- if (predictor === 2) {
- this.readBlock = this.readBlockTiff;
- } else {
- this.readBlock = this.readBlockPng;
- }
+exports.Annotation = Annotation;
- this.str = str;
- this.dict = str.dict;
- var colors = this.colors = params.get("Colors") || 1;
- var bits = this.bits = params.get("BitsPerComponent") || 8;
- var columns = this.columns = params.get("Columns") || 1;
- this.pixBytes = colors * bits + 7 >> 3;
- this.rowBytes = columns * colors * bits + 7 >> 3;
- DecodeStream.call(this, maybeLength);
- return this;
+class AnnotationBorderStyle {
+ constructor() {
+ this.width = 1;
+ this.style = _util.AnnotationBorderStyleType.SOLID;
+ this.dashArray = [3];
+ this.horizontalCornerRadius = 0;
+ this.verticalCornerRadius = 0;
}
- PredictorStream.prototype = Object.create(DecodeStream.prototype);
-
- PredictorStream.prototype.readBlockTiff = function predictorStreamReadBlockTiff() {
- var rowBytes = this.rowBytes;
- var bufferLength = this.bufferLength;
- var buffer = this.ensureBuffer(bufferLength + rowBytes);
- var bits = this.bits;
- var colors = this.colors;
- var rawBytes = this.str.getBytes(rowBytes);
- this.eof = !rawBytes.length;
-
- if (this.eof) {
+ setWidth(width, rect = [0, 0, 0, 0]) {
+ if ((0, _primitives.isName)(width)) {
+ this.width = 0;
return;
}
- var inbuf = 0,
- outbuf = 0;
- var inbits = 0,
- outbits = 0;
- var pos = bufferLength;
- var i;
-
- if (bits === 1 && colors === 1) {
- for (i = 0; i < rowBytes; ++i) {
- var c = rawBytes[i] ^ inbuf;
- c ^= c >> 1;
- c ^= c >> 2;
- c ^= c >> 4;
- inbuf = (c & 1) << 7;
- buffer[pos++] = c;
- }
- } else if (bits === 8) {
- for (i = 0; i < colors; ++i) {
- buffer[pos++] = rawBytes[i];
- }
-
- for (; i < rowBytes; ++i) {
- buffer[pos] = buffer[pos - colors] + rawBytes[i];
- pos++;
- }
- } else if (bits === 16) {
- var bytesPerPixel = colors * 2;
-
- for (i = 0; i < bytesPerPixel; ++i) {
- buffer[pos++] = rawBytes[i];
- }
-
- for (; i < rowBytes; i += 2) {
- var sum = ((rawBytes[i] & 0xff) << 8) + (rawBytes[i + 1] & 0xff) + ((buffer[pos - bytesPerPixel] & 0xff) << 8) + (buffer[pos - bytesPerPixel + 1] & 0xff);
- buffer[pos++] = sum >> 8 & 0xff;
- buffer[pos++] = sum & 0xff;
- }
- } else {
- var compArray = new Uint8Array(colors + 1);
- var bitMask = (1 << bits) - 1;
- var j = 0,
- k = bufferLength;
- var columns = this.columns;
-
- for (i = 0; i < columns; ++i) {
- for (var kk = 0; kk < colors; ++kk) {
- if (inbits < bits) {
- inbuf = inbuf << 8 | rawBytes[j++] & 0xff;
- inbits += 8;
- }
-
- compArray[kk] = compArray[kk] + (inbuf >> inbits - bits) & bitMask;
- inbits -= bits;
- outbuf = outbuf << bits | compArray[kk];
- outbits += bits;
+ if (Number.isInteger(width)) {
+ if (width > 0) {
+ const maxWidth = (rect[2] - rect[0]) / 2;
+ const maxHeight = (rect[3] - rect[1]) / 2;
- if (outbits >= 8) {
- buffer[k++] = outbuf >> outbits - 8 & 0xff;
- outbits -= 8;
- }
+ if (maxWidth > 0 && maxHeight > 0 && (width > maxWidth || width > maxHeight)) {
+ (0, _util.warn)(`AnnotationBorderStyle.setWidth - ignoring width: ${width}`);
+ width = 1;
}
}
- if (outbits > 0) {
- buffer[k++] = (outbuf << 8 - outbits) + (inbuf & (1 << 8 - outbits) - 1);
- }
+ this.width = width;
}
+ }
- this.bufferLength += rowBytes;
- };
-
- PredictorStream.prototype.readBlockPng = function predictorStreamReadBlockPng() {
- var rowBytes = this.rowBytes;
- var pixBytes = this.pixBytes;
- var predictor = this.str.getByte();
- var rawBytes = this.str.getBytes(rowBytes);
- this.eof = !rawBytes.length;
-
- if (this.eof) {
+ setStyle(style) {
+ if (!(0, _primitives.isName)(style)) {
return;
}
- var bufferLength = this.bufferLength;
- var buffer = this.ensureBuffer(bufferLength + rowBytes);
- var prevRow = buffer.subarray(bufferLength - rowBytes, bufferLength);
-
- if (prevRow.length === 0) {
- prevRow = new Uint8Array(rowBytes);
- }
-
- var i,
- j = bufferLength,
- up,
- c;
-
- switch (predictor) {
- case 0:
- for (i = 0; i < rowBytes; ++i) {
- buffer[j++] = rawBytes[i];
- }
-
+ switch (style.name) {
+ case "S":
+ this.style = _util.AnnotationBorderStyleType.SOLID;
break;
- case 1:
- for (i = 0; i < pixBytes; ++i) {
- buffer[j++] = rawBytes[i];
- }
-
- for (; i < rowBytes; ++i) {
- buffer[j] = buffer[j - pixBytes] + rawBytes[i] & 0xff;
- j++;
- }
-
+ case "D":
+ this.style = _util.AnnotationBorderStyleType.DASHED;
break;
- case 2:
- for (i = 0; i < rowBytes; ++i) {
- buffer[j++] = prevRow[i] + rawBytes[i] & 0xff;
- }
-
+ case "B":
+ this.style = _util.AnnotationBorderStyleType.BEVELED;
break;
- case 3:
- for (i = 0; i < pixBytes; ++i) {
- buffer[j++] = (prevRow[i] >> 1) + rawBytes[i];
- }
-
- for (; i < rowBytes; ++i) {
- buffer[j] = (prevRow[i] + buffer[j - pixBytes] >> 1) + rawBytes[i] & 0xff;
- j++;
- }
-
+ case "I":
+ this.style = _util.AnnotationBorderStyleType.INSET;
break;
- case 4:
- for (i = 0; i < pixBytes; ++i) {
- up = prevRow[i];
- c = rawBytes[i];
- buffer[j++] = up + c;
- }
-
- for (; i < rowBytes; ++i) {
- up = prevRow[i];
- var upLeft = prevRow[i - pixBytes];
- var left = buffer[j - pixBytes];
- var p = left + up - upLeft;
- var pa = p - left;
-
- if (pa < 0) {
- pa = -pa;
- }
-
- var pb = p - up;
-
- if (pb < 0) {
- pb = -pb;
- }
-
- var pc = p - upLeft;
-
- if (pc < 0) {
- pc = -pc;
- }
-
- c = rawBytes[i];
-
- if (pa <= pb && pa <= pc) {
- buffer[j++] = left + c;
- } else if (pb <= pc) {
- buffer[j++] = up + c;
- } else {
- buffer[j++] = upLeft + c;
- }
- }
-
+ case "U":
+ this.style = _util.AnnotationBorderStyleType.UNDERLINE;
break;
default:
- throw new _util.FormatError(`Unsupported predictor: ${predictor}`);
- }
-
- this.bufferLength += rowBytes;
- };
-
- return PredictorStream;
-}();
-
-exports.PredictorStream = PredictorStream;
-
-var DecryptStream = function DecryptStreamClosure() {
- function DecryptStream(str, maybeLength, decrypt) {
- this.str = str;
- this.dict = str.dict;
- this.decrypt = decrypt;
- this.nextChunk = null;
- this.initialized = false;
- DecodeStream.call(this, maybeLength);
- }
-
- var chunkSize = 512;
- DecryptStream.prototype = Object.create(DecodeStream.prototype);
-
- DecryptStream.prototype.readBlock = function DecryptStream_readBlock() {
- var chunk;
-
- if (this.initialized) {
- chunk = this.nextChunk;
- } else {
- chunk = this.str.getBytes(chunkSize);
- this.initialized = true;
- }
-
- if (!chunk || chunk.length === 0) {
- this.eof = true;
- return;
- }
-
- this.nextChunk = this.str.getBytes(chunkSize);
- var hasMoreData = this.nextChunk && this.nextChunk.length > 0;
- var decrypt = this.decrypt;
- chunk = decrypt(chunk, !hasMoreData);
- var bufferLength = this.bufferLength;
- var i,
- n = chunk.length;
- var buffer = this.ensureBuffer(bufferLength + n);
-
- for (i = 0; i < n; i++) {
- buffer[bufferLength++] = chunk[i];
- }
-
- this.bufferLength = bufferLength;
- };
-
- return DecryptStream;
-}();
-
-exports.DecryptStream = DecryptStream;
-
-var Ascii85Stream = function Ascii85StreamClosure() {
- function Ascii85Stream(str, maybeLength) {
- this.str = str;
- this.dict = str.dict;
- this.input = new Uint8Array(5);
-
- if (maybeLength) {
- maybeLength = 0.8 * maybeLength;
+ break;
}
-
- DecodeStream.call(this, maybeLength);
}
- Ascii85Stream.prototype = Object.create(DecodeStream.prototype);
-
- Ascii85Stream.prototype.readBlock = function Ascii85Stream_readBlock() {
- var TILDA_CHAR = 0x7e;
- var Z_LOWER_CHAR = 0x7a;
- var EOF = -1;
- var str = this.str;
- var c = str.getByte();
-
- while ((0, _core_utils.isWhiteSpace)(c)) {
- c = str.getByte();
- }
-
- if (c === EOF || c === TILDA_CHAR) {
- this.eof = true;
- return;
- }
-
- var bufferLength = this.bufferLength,
- buffer;
- var i;
-
- if (c === Z_LOWER_CHAR) {
- buffer = this.ensureBuffer(bufferLength + 4);
-
- for (i = 0; i < 4; ++i) {
- buffer[bufferLength + i] = 0;
- }
-
- this.bufferLength += 4;
- } else {
- var input = this.input;
- input[0] = c;
-
- for (i = 1; i < 5; ++i) {
- c = str.getByte();
-
- while ((0, _core_utils.isWhiteSpace)(c)) {
- c = str.getByte();
- }
+ setDashArray(dashArray) {
+ if (Array.isArray(dashArray) && dashArray.length > 0) {
+ let isValid = true;
+ let allZeros = true;
- input[i] = c;
+ for (const element of dashArray) {
+ const validNumber = +element >= 0;
- if (c === EOF || c === TILDA_CHAR) {
+ if (!validNumber) {
+ isValid = false;
break;
+ } else if (element > 0) {
+ allZeros = false;
}
}
- buffer = this.ensureBuffer(bufferLength + i - 1);
- this.bufferLength += i - 1;
-
- if (i < 5) {
- for (; i < 5; ++i) {
- input[i] = 0x21 + 84;
- }
-
- this.eof = true;
- }
-
- var t = 0;
-
- for (i = 0; i < 5; ++i) {
- t = t * 85 + (input[i] - 0x21);
- }
-
- for (i = 3; i >= 0; --i) {
- buffer[bufferLength + i] = t & 0xff;
- t >>= 8;
- }
- }
- };
-
- return Ascii85Stream;
-}();
-
-exports.Ascii85Stream = Ascii85Stream;
-
-var AsciiHexStream = function AsciiHexStreamClosure() {
- function AsciiHexStream(str, maybeLength) {
- this.str = str;
- this.dict = str.dict;
- this.firstDigit = -1;
-
- if (maybeLength) {
- maybeLength = 0.5 * maybeLength;
- }
-
- DecodeStream.call(this, maybeLength);
- }
-
- AsciiHexStream.prototype = Object.create(DecodeStream.prototype);
-
- AsciiHexStream.prototype.readBlock = function AsciiHexStream_readBlock() {
- var UPSTREAM_BLOCK_SIZE = 8000;
- var bytes = this.str.getBytes(UPSTREAM_BLOCK_SIZE);
-
- if (!bytes.length) {
- this.eof = true;
- return;
- }
-
- var maxDecodeLength = bytes.length + 1 >> 1;
- var buffer = this.ensureBuffer(this.bufferLength + maxDecodeLength);
- var bufferLength = this.bufferLength;
- var firstDigit = this.firstDigit;
-
- for (var i = 0, ii = bytes.length; i < ii; i++) {
- var ch = bytes[i],
- digit;
-
- if (ch >= 0x30 && ch <= 0x39) {
- digit = ch & 0x0f;
- } else if (ch >= 0x41 && ch <= 0x46 || ch >= 0x61 && ch <= 0x66) {
- digit = (ch & 0x0f) + 9;
- } else if (ch === 0x3e) {
- this.eof = true;
- break;
- } else {
- continue;
- }
-
- if (firstDigit < 0) {
- firstDigit = digit;
+ if (isValid && !allZeros) {
+ this.dashArray = dashArray;
} else {
- buffer[bufferLength++] = firstDigit << 4 | digit;
- firstDigit = -1;
- }
- }
-
- if (firstDigit >= 0 && this.eof) {
- buffer[bufferLength++] = firstDigit << 4;
- firstDigit = -1;
- }
-
- this.firstDigit = firstDigit;
- this.bufferLength = bufferLength;
- };
-
- return AsciiHexStream;
-}();
-
-exports.AsciiHexStream = AsciiHexStream;
-
-var RunLengthStream = function RunLengthStreamClosure() {
- function RunLengthStream(str, maybeLength) {
- this.str = str;
- this.dict = str.dict;
- DecodeStream.call(this, maybeLength);
- }
-
- RunLengthStream.prototype = Object.create(DecodeStream.prototype);
-
- RunLengthStream.prototype.readBlock = function RunLengthStream_readBlock() {
- var repeatHeader = this.str.getBytes(2);
-
- if (!repeatHeader || repeatHeader.length < 2 || repeatHeader[0] === 128) {
- this.eof = true;
- return;
- }
-
- var buffer;
- var bufferLength = this.bufferLength;
- var n = repeatHeader[0];
-
- if (n < 128) {
- buffer = this.ensureBuffer(bufferLength + n + 1);
- buffer[bufferLength++] = repeatHeader[1];
-
- if (n > 0) {
- var source = this.str.getBytes(n);
- buffer.set(source, bufferLength);
- bufferLength += n;
- }
- } else {
- n = 257 - n;
- var b = repeatHeader[1];
- buffer = this.ensureBuffer(bufferLength + n + 1);
-
- for (var i = 0; i < n; i++) {
- buffer[bufferLength++] = b;
+ this.width = 0;
}
+ } else if (dashArray) {
+ this.width = 0;
}
-
- this.bufferLength = bufferLength;
- };
-
- return RunLengthStream;
-}();
-
-exports.RunLengthStream = RunLengthStream;
-
-var LZWStream = function LZWStreamClosure() {
- function LZWStream(str, maybeLength, earlyChange) {
- this.str = str;
- this.dict = str.dict;
- this.cachedData = 0;
- this.bitsCached = 0;
- var maxLzwDictionarySize = 4096;
- var lzwState = {
- earlyChange,
- codeLength: 9,
- nextCode: 258,
- dictionaryValues: new Uint8Array(maxLzwDictionarySize),
- dictionaryLengths: new Uint16Array(maxLzwDictionarySize),
- dictionaryPrevCodes: new Uint16Array(maxLzwDictionarySize),
- currentSequence: new Uint8Array(maxLzwDictionarySize),
- currentSequenceLength: 0
- };
-
- for (var i = 0; i < 256; ++i) {
- lzwState.dictionaryValues[i] = i;
- lzwState.dictionaryLengths[i] = 1;
- }
-
- this.lzwState = lzwState;
- DecodeStream.call(this, maybeLength);
}
- LZWStream.prototype = Object.create(DecodeStream.prototype);
-
- LZWStream.prototype.readBits = function LZWStream_readBits(n) {
- var bitsCached = this.bitsCached;
- var cachedData = this.cachedData;
-
- while (bitsCached < n) {
- var c = this.str.getByte();
-
- if (c === -1) {
- this.eof = true;
- return null;
- }
-
- cachedData = cachedData << 8 | c;
- bitsCached += 8;
- }
-
- this.bitsCached = bitsCached -= n;
- this.cachedData = cachedData;
- this.lastCode = null;
- return cachedData >>> bitsCached & (1 << n) - 1;
- };
-
- LZWStream.prototype.readBlock = function LZWStream_readBlock() {
- var blockSize = 512;
- var estimatedDecodedSize = blockSize * 2,
- decodedSizeDelta = blockSize;
- var i, j, q;
- var lzwState = this.lzwState;
-
- if (!lzwState) {
- return;
- }
-
- var earlyChange = lzwState.earlyChange;
- var nextCode = lzwState.nextCode;
- var dictionaryValues = lzwState.dictionaryValues;
- var dictionaryLengths = lzwState.dictionaryLengths;
- var dictionaryPrevCodes = lzwState.dictionaryPrevCodes;
- var codeLength = lzwState.codeLength;
- var prevCode = lzwState.prevCode;
- var currentSequence = lzwState.currentSequence;
- var currentSequenceLength = lzwState.currentSequenceLength;
- var decodedLength = 0;
- var currentBufferLength = this.bufferLength;
- var buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize);
-
- for (i = 0; i < blockSize; i++) {
- var code = this.readBits(codeLength);
- var hasPrev = currentSequenceLength > 0;
-
- if (code < 256) {
- currentSequence[0] = code;
- currentSequenceLength = 1;
- } else if (code >= 258) {
- if (code < nextCode) {
- currentSequenceLength = dictionaryLengths[code];
-
- for (j = currentSequenceLength - 1, q = code; j >= 0; j--) {
- currentSequence[j] = dictionaryValues[q];
- q = dictionaryPrevCodes[q];
- }
- } else {
- currentSequence[currentSequenceLength++] = currentSequence[0];
- }
- } else if (code === 256) {
- codeLength = 9;
- nextCode = 258;
- currentSequenceLength = 0;
- continue;
- } else {
- this.eof = true;
- delete this.lzwState;
- break;
- }
-
- if (hasPrev) {
- dictionaryPrevCodes[nextCode] = prevCode;
- dictionaryLengths[nextCode] = dictionaryLengths[prevCode] + 1;
- dictionaryValues[nextCode] = currentSequence[0];
- nextCode++;
- codeLength = nextCode + earlyChange & nextCode + earlyChange - 1 ? codeLength : Math.min(Math.log(nextCode + earlyChange) / 0.6931471805599453 + 1, 12) | 0;
- }
-
- prevCode = code;
- decodedLength += currentSequenceLength;
-
- if (estimatedDecodedSize < decodedLength) {
- do {
- estimatedDecodedSize += decodedSizeDelta;
- } while (estimatedDecodedSize < decodedLength);
-
- buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize);
- }
-
- for (j = 0; j < currentSequenceLength; j++) {
- buffer[currentBufferLength++] = currentSequence[j];
- }
+ setHorizontalCornerRadius(radius) {
+ if (Number.isInteger(radius)) {
+ this.horizontalCornerRadius = radius;
}
-
- lzwState.nextCode = nextCode;
- lzwState.codeLength = codeLength;
- lzwState.prevCode = prevCode;
- lzwState.currentSequenceLength = currentSequenceLength;
- this.bufferLength = currentBufferLength;
- };
-
- return LZWStream;
-}();
-
-exports.LZWStream = LZWStream;
-
-var NullStream = function NullStreamClosure() {
- function NullStream() {
- Stream.call(this, new Uint8Array(0));
}
- NullStream.prototype = Stream.prototype;
- return NullStream;
-}();
-
-exports.NullStream = NullStream;
-
-/***/ }),
-/* 13 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.CCITTFaxStream = void 0;
-
-var _primitives = __w_pdfjs_require__(5);
-
-var _ccitt = __w_pdfjs_require__(14);
-
-var _stream = __w_pdfjs_require__(12);
-
-var CCITTFaxStream = function CCITTFaxStreamClosure() {
- function CCITTFaxStream(str, maybeLength, params) {
- this.str = str;
- this.dict = str.dict;
-
- if (!(0, _primitives.isDict)(params)) {
- params = _primitives.Dict.empty;
+ setVerticalCornerRadius(radius) {
+ if (Number.isInteger(radius)) {
+ this.verticalCornerRadius = radius;
}
-
- const source = {
- next() {
- return str.getByte();
- }
-
- };
- this.ccittFaxDecoder = new _ccitt.CCITTFaxDecoder(source, {
- K: params.get("K"),
- EndOfLine: params.get("EndOfLine"),
- EncodedByteAlign: params.get("EncodedByteAlign"),
- Columns: params.get("Columns"),
- Rows: params.get("Rows"),
- EndOfBlock: params.get("EndOfBlock"),
- BlackIs1: params.get("BlackIs1")
- });
-
- _stream.DecodeStream.call(this, maybeLength);
}
- CCITTFaxStream.prototype = Object.create(_stream.DecodeStream.prototype);
-
- CCITTFaxStream.prototype.readBlock = function () {
- while (!this.eof) {
- const c = this.ccittFaxDecoder.readNextChar();
-
- if (c === -1) {
- this.eof = true;
- return;
- }
-
- this.ensureBuffer(this.bufferLength + 1);
- this.buffer[this.bufferLength++] = c;
- }
- };
-
- return CCITTFaxStream;
-}();
-
-exports.CCITTFaxStream = CCITTFaxStream;
-
-/***/ }),
-/* 14 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.CCITTFaxDecoder = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-const CCITTFaxDecoder = function CCITTFaxDecoder() {
- const ccittEOL = -2;
- const ccittEOF = -1;
- const twoDimPass = 0;
- const twoDimHoriz = 1;
- const twoDimVert0 = 2;
- const twoDimVertR1 = 3;
- const twoDimVertL1 = 4;
- const twoDimVertR2 = 5;
- const twoDimVertL2 = 6;
- const twoDimVertR3 = 7;
- const twoDimVertL3 = 8;
- const twoDimTable = [[-1, -1], [-1, -1], [7, twoDimVertL3], [7, twoDimVertR3], [6, twoDimVertL2], [6, twoDimVertL2], [6, twoDimVertR2], [6, twoDimVertR2], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0]];
- const whiteTable1 = [[-1, -1], [12, ccittEOL], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [11, 1792], [11, 1792], [12, 1984], [12, 2048], [12, 2112], [12, 2176], [12, 2240], [12, 2304], [11, 1856], [11, 1856], [11, 1920], [11, 1920], [12, 2368], [12, 2432], [12, 2496], [12, 2560]];
- const whiteTable2 = [[-1, -1], [-1, -1], [-1, -1], [-1, -1], [8, 29], [8, 29], [8, 30], [8, 30], [8, 45], [8, 45], [8, 46], [8, 46], [7, 22], [7, 22], [7, 22], [7, 22], [7, 23], [7, 23], [7, 23], [7, 23], [8, 47], [8, 47], [8, 48], [8, 48], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [7, 20], [7, 20], [7, 20], [7, 20], [8, 33], [8, 33], [8, 34], [8, 34], [8, 35], [8, 35], [8, 36], [8, 36], [8, 37], [8, 37], [8, 38], [8, 38], [7, 19], [7, 19], [7, 19], [7, 19], [8, 31], [8, 31], [8, 32], [8, 32], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [8, 53], [8, 53], [8, 54], [8, 54], [7, 26], [7, 26], [7, 26], [7, 26], [8, 39], [8, 39], [8, 40], [8, 40], [8, 41], [8, 41], [8, 42], [8, 42], [8, 43], [8, 43], [8, 44], [8, 44], [7, 21], [7, 21], [7, 21], [7, 21], [7, 28], [7, 28], [7, 28], [7, 28], [8, 61], [8, 61], [8, 62], [8, 62], [8, 63], [8, 63], [8, 0], [8, 0], [8, 320], [8, 320], [8, 384], [8, 384], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [7, 27], [7, 27], [7, 27], [7, 27], [8, 59], [8, 59], [8, 60], [8, 60], [9, 1472], [9, 1536], [9, 1600], [9, 1728], [7, 18], [7, 18], [7, 18], [7, 18], [7, 24], [7, 24], [7, 24], [7, 24], [8, 49], [8, 49], [8, 50], [8, 50], [8, 51], [8, 51], [8, 52], [8, 52], [7, 25], [7, 25], [7, 25], [7, 25], [8, 55], [8, 55], [8, 56], [8, 56], [8, 57], [8, 57], [8, 58], [8, 58], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [8, 448], [8, 448], [8, 512], [8, 512], [9, 704], [9, 768], [8, 640], [8, 640], [8, 576], [8, 576], [9, 832], [9, 896], [9, 960], [9, 1024], [9, 1088], [9, 1152], [9, 1216], [9, 1280], [9, 1344], [9, 1408], [7, 256], [7, 256], [7, 256], [7, 256], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7]];
- const blackTable1 = [[-1, -1], [-1, -1], [12, ccittEOL], [12, ccittEOL], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [11, 1792], [11, 1792], [11, 1792], [11, 1792], [12, 1984], [12, 1984], [12, 2048], [12, 2048], [12, 2112], [12, 2112], [12, 2176], [12, 2176], [12, 2240], [12, 2240], [12, 2304], [12, 2304], [11, 1856], [11, 1856], [11, 1856], [11, 1856], [11, 1920], [11, 1920], [11, 1920], [11, 1920], [12, 2368], [12, 2368], [12, 2432], [12, 2432], [12, 2496], [12, 2496], [12, 2560], [12, 2560], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [12, 52], [12, 52], [13, 640], [13, 704], [13, 768], [13, 832], [12, 55], [12, 55], [12, 56], [12, 56], [13, 1280], [13, 1344], [13, 1408], [13, 1472], [12, 59], [12, 59], [12, 60], [12, 60], [13, 1536], [13, 1600], [11, 24], [11, 24], [11, 24], [11, 24], [11, 25], [11, 25], [11, 25], [11, 25], [13, 1664], [13, 1728], [12, 320], [12, 320], [12, 384], [12, 384], [12, 448], [12, 448], [13, 512], [13, 576], [12, 53], [12, 53], [12, 54], [12, 54], [13, 896], [13, 960], [13, 1024], [13, 1088], [13, 1152], [13, 1216], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64]];
- const blackTable2 = [[8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [11, 23], [11, 23], [12, 50], [12, 51], [12, 44], [12, 45], [12, 46], [12, 47], [12, 57], [12, 58], [12, 61], [12, 256], [10, 16], [10, 16], [10, 16], [10, 16], [10, 17], [10, 17], [10, 17], [10, 17], [12, 48], [12, 49], [12, 62], [12, 63], [12, 30], [12, 31], [12, 32], [12, 33], [12, 40], [12, 41], [11, 22], [11, 22], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [12, 128], [12, 192], [12, 26], [12, 27], [12, 28], [12, 29], [11, 19], [11, 19], [11, 20], [11, 20], [12, 34], [12, 35], [12, 36], [12, 37], [12, 38], [12, 39], [11, 21], [11, 21], [12, 42], [12, 43], [10, 0], [10, 0], [10, 0], [10, 0], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12]];
- const blackTable3 = [[-1, -1], [-1, -1], [-1, -1], [-1, -1], [6, 9], [6, 8], [5, 7], [5, 7], [4, 6], [4, 6], [4, 6], [4, 6], [4, 5], [4, 5], [4, 5], [4, 5], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2]];
-
- function CCITTFaxDecoder(source, options = {}) {
- if (!source || typeof source.next !== "function") {
- throw new Error('CCITTFaxDecoder - invalid "source" parameter.');
- }
-
- this.source = source;
- this.eof = false;
- this.encoding = options.K || 0;
- this.eoline = options.EndOfLine || false;
- this.byteAlign = options.EncodedByteAlign || false;
- this.columns = options.Columns || 1728;
- this.rows = options.Rows || 0;
- let eoblock = options.EndOfBlock;
-
- if (eoblock === null || eoblock === undefined) {
- eoblock = true;
- }
-
- this.eoblock = eoblock;
- this.black = options.BlackIs1 || false;
- this.codingLine = new Uint32Array(this.columns + 1);
- this.refLine = new Uint32Array(this.columns + 2);
- this.codingLine[0] = this.columns;
- this.codingPos = 0;
- this.row = 0;
- this.nextLine2D = this.encoding < 0;
- this.inputBits = 0;
- this.inputBuf = 0;
- this.outputBits = 0;
- this.rowsDone = false;
- let code1;
-
- while ((code1 = this._lookBits(12)) === 0) {
- this._eatBits(1);
- }
+}
- if (code1 === 1) {
- this._eatBits(12);
- }
+exports.AnnotationBorderStyle = AnnotationBorderStyle;
- if (this.encoding > 0) {
- this.nextLine2D = !this._lookBits(1);
+class MarkupAnnotation extends Annotation {
+ constructor(parameters) {
+ super(parameters);
+ const dict = parameters.dict;
- this._eatBits(1);
+ if (dict.has("IRT")) {
+ const rawIRT = dict.getRaw("IRT");
+ this.data.inReplyTo = (0, _primitives.isRef)(rawIRT) ? rawIRT.toString() : null;
+ const rt = dict.get("RT");
+ this.data.replyType = (0, _primitives.isName)(rt) ? rt.name : _util.AnnotationReplyType.REPLY;
}
- }
-
- CCITTFaxDecoder.prototype = {
- readNextChar() {
- if (this.eof) {
- return -1;
- }
-
- const refLine = this.refLine;
- const codingLine = this.codingLine;
- const columns = this.columns;
- let refPos, blackPixels, bits, i;
-
- if (this.outputBits === 0) {
- if (this.rowsDone) {
- this.eof = true;
- }
-
- if (this.eof) {
- return -1;
- }
-
- this.err = false;
- let code1, code2, code3;
-
- if (this.nextLine2D) {
- for (i = 0; codingLine[i] < columns; ++i) {
- refLine[i] = codingLine[i];
- }
-
- refLine[i++] = columns;
- refLine[i] = columns;
- codingLine[0] = 0;
- this.codingPos = 0;
- refPos = 0;
- blackPixels = 0;
-
- while (codingLine[this.codingPos] < columns) {
- code1 = this._getTwoDimCode();
-
- switch (code1) {
- case twoDimPass:
- this._addPixels(refLine[refPos + 1], blackPixels);
-
- if (refLine[refPos + 1] < columns) {
- refPos += 2;
- }
-
- break;
-
- case twoDimHoriz:
- code1 = code2 = 0;
-
- if (blackPixels) {
- do {
- code1 += code3 = this._getBlackCode();
- } while (code3 >= 64);
-
- do {
- code2 += code3 = this._getWhiteCode();
- } while (code3 >= 64);
- } else {
- do {
- code1 += code3 = this._getWhiteCode();
- } while (code3 >= 64);
-
- do {
- code2 += code3 = this._getBlackCode();
- } while (code3 >= 64);
- }
-
- this._addPixels(codingLine[this.codingPos] + code1, blackPixels);
-
- if (codingLine[this.codingPos] < columns) {
- this._addPixels(codingLine[this.codingPos] + code2, blackPixels ^ 1);
- }
-
- while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
- refPos += 2;
- }
-
- break;
-
- case twoDimVertR3:
- this._addPixels(refLine[refPos] + 3, blackPixels);
-
- blackPixels ^= 1;
-
- if (codingLine[this.codingPos] < columns) {
- ++refPos;
-
- while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
- refPos += 2;
- }
- }
-
- break;
-
- case twoDimVertR2:
- this._addPixels(refLine[refPos] + 2, blackPixels);
-
- blackPixels ^= 1;
-
- if (codingLine[this.codingPos] < columns) {
- ++refPos;
-
- while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
- refPos += 2;
- }
- }
-
- break;
-
- case twoDimVertR1:
- this._addPixels(refLine[refPos] + 1, blackPixels);
-
- blackPixels ^= 1;
-
- if (codingLine[this.codingPos] < columns) {
- ++refPos;
-
- while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
- refPos += 2;
- }
- }
-
- break;
-
- case twoDimVert0:
- this._addPixels(refLine[refPos], blackPixels);
-
- blackPixels ^= 1;
-
- if (codingLine[this.codingPos] < columns) {
- ++refPos;
-
- while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
- refPos += 2;
- }
- }
-
- break;
-
- case twoDimVertL3:
- this._addPixelsNeg(refLine[refPos] - 3, blackPixels);
-
- blackPixels ^= 1;
-
- if (codingLine[this.codingPos] < columns) {
- if (refPos > 0) {
- --refPos;
- } else {
- ++refPos;
- }
-
- while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
- refPos += 2;
- }
- }
-
- break;
-
- case twoDimVertL2:
- this._addPixelsNeg(refLine[refPos] - 2, blackPixels);
-
- blackPixels ^= 1;
-
- if (codingLine[this.codingPos] < columns) {
- if (refPos > 0) {
- --refPos;
- } else {
- ++refPos;
- }
-
- while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
- refPos += 2;
- }
- }
-
- break;
-
- case twoDimVertL1:
- this._addPixelsNeg(refLine[refPos] - 1, blackPixels);
-
- blackPixels ^= 1;
-
- if (codingLine[this.codingPos] < columns) {
- if (refPos > 0) {
- --refPos;
- } else {
- ++refPos;
- }
-
- while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
- refPos += 2;
- }
- }
-
- break;
-
- case ccittEOF:
- this._addPixels(columns, 0);
-
- this.eof = true;
- break;
-
- default:
- (0, _util.info)("bad 2d code");
-
- this._addPixels(columns, 0);
-
- this.err = true;
- }
- }
- } else {
- codingLine[0] = 0;
- this.codingPos = 0;
- blackPixels = 0;
-
- while (codingLine[this.codingPos] < columns) {
- code1 = 0;
-
- if (blackPixels) {
- do {
- code1 += code3 = this._getBlackCode();
- } while (code3 >= 64);
- } else {
- do {
- code1 += code3 = this._getWhiteCode();
- } while (code3 >= 64);
- }
-
- this._addPixels(codingLine[this.codingPos] + code1, blackPixels);
-
- blackPixels ^= 1;
- }
- }
-
- let gotEOL = false;
-
- if (this.byteAlign) {
- this.inputBits &= ~7;
- }
-
- if (!this.eoblock && this.row === this.rows - 1) {
- this.rowsDone = true;
- } else {
- code1 = this._lookBits(12);
-
- if (this.eoline) {
- while (code1 !== ccittEOF && code1 !== 1) {
- this._eatBits(1);
-
- code1 = this._lookBits(12);
- }
- } else {
- while (code1 === 0) {
- this._eatBits(1);
-
- code1 = this._lookBits(12);
- }
- }
-
- if (code1 === 1) {
- this._eatBits(12);
-
- gotEOL = true;
- } else if (code1 === ccittEOF) {
- this.eof = true;
- }
- }
-
- if (!this.eof && this.encoding > 0 && !this.rowsDone) {
- this.nextLine2D = !this._lookBits(1);
-
- this._eatBits(1);
- }
-
- if (this.eoblock && gotEOL && this.byteAlign) {
- code1 = this._lookBits(12);
-
- if (code1 === 1) {
- this._eatBits(12);
-
- if (this.encoding > 0) {
- this._lookBits(1);
-
- this._eatBits(1);
- }
-
- if (this.encoding >= 0) {
- for (i = 0; i < 4; ++i) {
- code1 = this._lookBits(12);
-
- if (code1 !== 1) {
- (0, _util.info)("bad rtc code: " + code1);
- }
-
- this._eatBits(12);
-
- if (this.encoding > 0) {
- this._lookBits(1);
-
- this._eatBits(1);
- }
- }
- }
-
- this.eof = true;
- }
- } else if (this.err && this.eoline) {
- while (true) {
- code1 = this._lookBits(13);
-
- if (code1 === ccittEOF) {
- this.eof = true;
- return -1;
- }
-
- if (code1 >> 1 === 1) {
- break;
- }
-
- this._eatBits(1);
- }
-
- this._eatBits(12);
-
- if (this.encoding > 0) {
- this._eatBits(1);
-
- this.nextLine2D = !(code1 & 1);
- }
- }
-
- if (codingLine[0] > 0) {
- this.outputBits = codingLine[this.codingPos = 0];
- } else {
- this.outputBits = codingLine[this.codingPos = 1];
- }
-
- this.row++;
- }
-
- let c;
-
- if (this.outputBits >= 8) {
- c = this.codingPos & 1 ? 0 : 0xff;
- this.outputBits -= 8;
-
- if (this.outputBits === 0 && codingLine[this.codingPos] < columns) {
- this.codingPos++;
- this.outputBits = codingLine[this.codingPos] - codingLine[this.codingPos - 1];
- }
- } else {
- bits = 8;
- c = 0;
-
- do {
- if (this.outputBits > bits) {
- c <<= bits;
-
- if (!(this.codingPos & 1)) {
- c |= 0xff >> 8 - bits;
- }
-
- this.outputBits -= bits;
- bits = 0;
- } else {
- c <<= this.outputBits;
-
- if (!(this.codingPos & 1)) {
- c |= 0xff >> 8 - this.outputBits;
- }
-
- bits -= this.outputBits;
- this.outputBits = 0;
-
- if (codingLine[this.codingPos] < columns) {
- this.codingPos++;
- this.outputBits = codingLine[this.codingPos] - codingLine[this.codingPos - 1];
- } else if (bits > 0) {
- c <<= bits;
- bits = 0;
- }
- }
- } while (bits);
- }
-
- if (this.black) {
- c ^= 0xff;
- }
-
- return c;
- },
-
- _addPixels(a1, blackPixels) {
- const codingLine = this.codingLine;
- let codingPos = this.codingPos;
-
- if (a1 > codingLine[codingPos]) {
- if (a1 > this.columns) {
- (0, _util.info)("row is wrong length");
- this.err = true;
- a1 = this.columns;
- }
-
- if (codingPos & 1 ^ blackPixels) {
- ++codingPos;
- }
-
- codingLine[codingPos] = a1;
- }
-
- this.codingPos = codingPos;
- },
-
- _addPixelsNeg(a1, blackPixels) {
- const codingLine = this.codingLine;
- let codingPos = this.codingPos;
-
- if (a1 > codingLine[codingPos]) {
- if (a1 > this.columns) {
- (0, _util.info)("row is wrong length");
- this.err = true;
- a1 = this.columns;
- }
-
- if (codingPos & 1 ^ blackPixels) {
- ++codingPos;
- }
- codingLine[codingPos] = a1;
- } else if (a1 < codingLine[codingPos]) {
- if (a1 < 0) {
- (0, _util.info)("invalid code");
- this.err = true;
- a1 = 0;
- }
-
- while (codingPos > 0 && a1 < codingLine[codingPos - 1]) {
- --codingPos;
- }
-
- codingLine[codingPos] = a1;
- }
-
- this.codingPos = codingPos;
- },
-
- _findTableCode(start, end, table, limit) {
- const limitValue = limit || 0;
-
- for (let i = start; i <= end; ++i) {
- let code = this._lookBits(i);
-
- if (code === ccittEOF) {
- return [true, 1, false];
- }
-
- if (i < end) {
- code <<= end - i;
- }
-
- if (!limitValue || code >= limitValue) {
- const p = table[code - limitValue];
-
- if (p[0] === i) {
- this._eatBits(i);
-
- return [true, p[1], true];
- }
- }
- }
-
- return [false, 0, false];
- },
-
- _getTwoDimCode() {
- let code = 0;
- let p;
-
- if (this.eoblock) {
- code = this._lookBits(7);
- p = twoDimTable[code];
-
- if (p && p[0] > 0) {
- this._eatBits(p[0]);
+ if (this.data.replyType === _util.AnnotationReplyType.GROUP) {
+ const parent = dict.get("IRT");
+ this.data.title = (0, _util.stringToPDFString)(parent.get("T") || "");
+ this.setContents(parent.get("Contents"));
+ this.data.contents = this.contents;
- return p[1];
- }
+ if (!parent.has("CreationDate")) {
+ this.data.creationDate = null;
} else {
- const result = this._findTableCode(1, 7, twoDimTable);
-
- if (result[0] && result[2]) {
- return result[1];
- }
+ this.setCreationDate(parent.get("CreationDate"));
+ this.data.creationDate = this.creationDate;
}
- (0, _util.info)("Bad two dim code");
- return ccittEOF;
- },
-
- _getWhiteCode() {
- let code = 0;
- let p;
-
- if (this.eoblock) {
- code = this._lookBits(12);
-
- if (code === ccittEOF) {
- return 1;
- }
-
- if (code >> 5 === 0) {
- p = whiteTable1[code];
- } else {
- p = whiteTable2[code >> 3];
- }
-
- if (p[0] > 0) {
- this._eatBits(p[0]);
-
- return p[1];
- }
+ if (!parent.has("M")) {
+ this.data.modificationDate = null;
} else {
- let result = this._findTableCode(1, 9, whiteTable2);
-
- if (result[0]) {
- return result[1];
- }
-
- result = this._findTableCode(11, 12, whiteTable1);
-
- if (result[0]) {
- return result[1];
- }
+ this.setModificationDate(parent.get("M"));
+ this.data.modificationDate = this.modificationDate;
}
- (0, _util.info)("bad white code");
-
- this._eatBits(1);
-
- return 1;
- },
-
- _getBlackCode() {
- let code, p;
-
- if (this.eoblock) {
- code = this._lookBits(13);
-
- if (code === ccittEOF) {
- return 1;
- }
-
- if (code >> 7 === 0) {
- p = blackTable1[code];
- } else if (code >> 9 === 0 && code >> 7 !== 0) {
- p = blackTable2[(code >> 1) - 64];
- } else {
- p = blackTable3[code >> 7];
- }
-
- if (p[0] > 0) {
- this._eatBits(p[0]);
+ this.data.hasPopup = parent.has("Popup");
- return p[1];
- }
+ if (!parent.has("C")) {
+ this.data.color = null;
} else {
- let result = this._findTableCode(2, 6, blackTable3);
-
- if (result[0]) {
- return result[1];
- }
-
- result = this._findTableCode(7, 12, blackTable2, 64);
-
- if (result[0]) {
- return result[1];
- }
-
- result = this._findTableCode(10, 13, blackTable1);
-
- if (result[0]) {
- return result[1];
- }
- }
-
- (0, _util.info)("bad black code");
-
- this._eatBits(1);
-
- return 1;
- },
-
- _lookBits(n) {
- let c;
-
- while (this.inputBits < n) {
- if ((c = this.source.next()) === -1) {
- if (this.inputBits === 0) {
- return ccittEOF;
- }
-
- return this.inputBuf << n - this.inputBits & 0xffff >> 16 - n;
- }
-
- this.inputBuf = this.inputBuf << 8 | c;
- this.inputBits += 8;
+ this.setColor(parent.getArray("C"));
+ this.data.color = this.color;
}
+ } else {
+ this.data.title = (0, _util.stringToPDFString)(dict.get("T") || "");
+ this.setCreationDate(dict.get("CreationDate"));
+ this.data.creationDate = this.creationDate;
+ this.data.hasPopup = dict.has("Popup");
- return this.inputBuf >> this.inputBits - n & 0xffff >> 16 - n;
- },
-
- _eatBits(n) {
- if ((this.inputBits -= n) < 0) {
- this.inputBits = 0;
+ if (!dict.has("C")) {
+ this.data.color = null;
}
}
-
- };
- return CCITTFaxDecoder;
-}();
-
-exports.CCITTFaxDecoder = CCITTFaxDecoder;
-
-/***/ }),
-/* 15 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.Jbig2Stream = void 0;
-
-var _primitives = __w_pdfjs_require__(5);
-
-var _stream = __w_pdfjs_require__(12);
-
-var _jbig = __w_pdfjs_require__(16);
-
-var _util = __w_pdfjs_require__(2);
-
-const Jbig2Stream = function Jbig2StreamClosure() {
- function Jbig2Stream(stream, maybeLength, dict, params) {
- this.stream = stream;
- this.maybeLength = maybeLength;
- this.dict = dict;
- this.params = params;
-
- _stream.DecodeStream.call(this, maybeLength);
}
- Jbig2Stream.prototype = Object.create(_stream.DecodeStream.prototype);
- Object.defineProperty(Jbig2Stream.prototype, "bytes", {
- get() {
- return (0, _util.shadow)(this, "bytes", this.stream.getBytes(this.maybeLength));
- },
-
- configurable: true
- });
+ setCreationDate(creationDate) {
+ this.creationDate = (0, _util.isString)(creationDate) ? creationDate : null;
+ }
- Jbig2Stream.prototype.ensureBuffer = function (requested) {};
+ _setDefaultAppearance({
+ xref,
+ extra,
+ strokeColor,
+ fillColor,
+ blendMode,
+ strokeAlpha,
+ fillAlpha,
+ pointsCallback
+ }) {
+ let minX = Number.MAX_VALUE;
+ let minY = Number.MAX_VALUE;
+ let maxX = Number.MIN_VALUE;
+ let maxY = Number.MIN_VALUE;
+ const buffer = ["q"];
- Jbig2Stream.prototype.readBlock = function () {
- if (this.eof) {
- return;
+ if (extra) {
+ buffer.push(extra);
}
- const jbig2Image = new _jbig.Jbig2Image();
- const chunks = [];
-
- if ((0, _primitives.isDict)(this.params)) {
- const globalsStream = this.params.get("JBIG2Globals");
-
- if ((0, _primitives.isStream)(globalsStream)) {
- const globals = globalsStream.getBytes();
- chunks.push({
- data: globals,
- start: 0,
- end: globals.length
- });
- }
+ if (strokeColor) {
+ buffer.push(`${strokeColor[0]} ${strokeColor[1]} ${strokeColor[2]} RG`);
}
- chunks.push({
- data: this.bytes,
- start: 0,
- end: this.bytes.length
- });
- const data = jbig2Image.parseChunks(chunks);
- const dataLength = data.length;
-
- for (let i = 0; i < dataLength; i++) {
- data[i] ^= 0xff;
+ if (fillColor) {
+ buffer.push(`${fillColor[0]} ${fillColor[1]} ${fillColor[2]} rg`);
}
- this.buffer = data;
- this.bufferLength = dataLength;
- this.eof = true;
- };
-
- return Jbig2Stream;
-}();
-
-exports.Jbig2Stream = Jbig2Stream;
-
-/***/ }),
-/* 16 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.Jbig2Image = void 0;
+ let pointsArray = this.data.quadPoints;
-var _util = __w_pdfjs_require__(2);
-
-var _core_utils = __w_pdfjs_require__(8);
-
-var _arithmetic_decoder = __w_pdfjs_require__(17);
-
-var _ccitt = __w_pdfjs_require__(14);
-
-class Jbig2Error extends _util.BaseException {
- constructor(msg) {
- super(`JBIG2 error: ${msg}`);
- }
-
-}
-
-var Jbig2Image = function Jbig2ImageClosure() {
- function ContextCache() {}
-
- ContextCache.prototype = {
- getContexts(id) {
- if (id in this) {
- return this[id];
- }
-
- return this[id] = new Int8Array(1 << 16);
+ if (!pointsArray) {
+ pointsArray = [[{
+ x: this.rectangle[0],
+ y: this.rectangle[3]
+ }, {
+ x: this.rectangle[2],
+ y: this.rectangle[3]
+ }, {
+ x: this.rectangle[0],
+ y: this.rectangle[1]
+ }, {
+ x: this.rectangle[2],
+ y: this.rectangle[1]
+ }]];
}
- };
-
- function DecodingContext(data, start, end) {
- this.data = data;
- this.start = start;
- this.end = end;
- }
-
- DecodingContext.prototype = {
- get decoder() {
- var decoder = new _arithmetic_decoder.ArithmeticDecoder(this.data, this.start, this.end);
- return (0, _util.shadow)(this, "decoder", decoder);
- },
-
- get contextCache() {
- var cache = new ContextCache();
- return (0, _util.shadow)(this, "contextCache", cache);
+ for (const points of pointsArray) {
+ const [mX, MX, mY, MY] = pointsCallback(buffer, points);
+ minX = Math.min(minX, mX);
+ maxX = Math.max(maxX, MX);
+ minY = Math.min(minY, mY);
+ maxY = Math.max(maxY, MY);
}
- };
-
- function decodeInteger(contextCache, procedure, decoder) {
- var contexts = contextCache.getContexts(procedure);
- var prev = 1;
-
- function readBits(length) {
- var v = 0;
-
- for (var i = 0; i < length; i++) {
- var bit = decoder.readBit(contexts, prev);
- prev = prev < 256 ? prev << 1 | bit : (prev << 1 | bit) & 511 | 256;
- v = v << 1 | bit;
- }
+ buffer.push("Q");
+ const formDict = new _primitives.Dict(xref);
+ const appearanceStreamDict = new _primitives.Dict(xref);
+ appearanceStreamDict.set("Subtype", _primitives.Name.get("Form"));
+ const appearanceStream = new _stream.StringStream(buffer.join(" "));
+ appearanceStream.dict = appearanceStreamDict;
+ formDict.set("Fm0", appearanceStream);
+ const gsDict = new _primitives.Dict(xref);
- return v >>> 0;
+ if (blendMode) {
+ gsDict.set("BM", _primitives.Name.get(blendMode));
}
- var sign = readBits(1);
- var value = readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(32) + 4436 : readBits(12) + 340 : readBits(8) + 84 : readBits(6) + 20 : readBits(4) + 4 : readBits(2);
-
- if (sign === 0) {
- return value;
- } else if (value > 0) {
- return -value;
+ if (typeof strokeAlpha === "number") {
+ gsDict.set("CA", strokeAlpha);
}
- return null;
- }
-
- function decodeIAID(contextCache, decoder, codeLength) {
- var contexts = contextCache.getContexts("IAID");
- var prev = 1;
-
- for (var i = 0; i < codeLength; i++) {
- var bit = decoder.readBit(contexts, prev);
- prev = prev << 1 | bit;
+ if (typeof fillAlpha === "number") {
+ gsDict.set("ca", fillAlpha);
}
- if (codeLength < 31) {
- return prev & (1 << codeLength) - 1;
- }
+ const stateDict = new _primitives.Dict(xref);
+ stateDict.set("GS0", gsDict);
+ const resources = new _primitives.Dict(xref);
+ resources.set("ExtGState", stateDict);
+ resources.set("XObject", formDict);
+ const appearanceDict = new _primitives.Dict(xref);
+ appearanceDict.set("Resources", resources);
+ const bbox = this.data.rect = [minX, minY, maxX, maxY];
+ appearanceDict.set("BBox", bbox);
+ this.appearance = new _stream.StringStream("/GS0 gs /Fm0 Do");
+ this.appearance.dict = appearanceDict;
- return prev & 0x7fffffff;
+ this._streams.push(this.appearance, appearanceStream);
}
- var SegmentTypes = ["SymbolDictionary", null, null, null, "IntermediateTextRegion", null, "ImmediateTextRegion", "ImmediateLosslessTextRegion", null, null, null, null, null, null, null, null, "PatternDictionary", null, null, null, "IntermediateHalftoneRegion", null, "ImmediateHalftoneRegion", "ImmediateLosslessHalftoneRegion", null, null, null, null, null, null, null, null, null, null, null, null, "IntermediateGenericRegion", null, "ImmediateGenericRegion", "ImmediateLosslessGenericRegion", "IntermediateGenericRefinementRegion", null, "ImmediateGenericRefinementRegion", "ImmediateLosslessGenericRefinementRegion", null, null, null, null, "PageInformation", "EndOfPage", "EndOfStripe", "EndOfFile", "Profiles", "Tables", null, null, null, null, null, null, null, null, "Extension"];
- var CodingTemplates = [[{
- x: -1,
- y: -2
- }, {
- x: 0,
- y: -2
- }, {
- x: 1,
- y: -2
- }, {
- x: -2,
- y: -1
- }, {
- x: -1,
- y: -1
- }, {
- x: 0,
- y: -1
- }, {
- x: 1,
- y: -1
- }, {
- x: 2,
- y: -1
- }, {
- x: -4,
- y: 0
- }, {
- x: -3,
- y: 0
- }, {
- x: -2,
- y: 0
- }, {
- x: -1,
- y: 0
- }], [{
- x: -1,
- y: -2
- }, {
- x: 0,
- y: -2
- }, {
- x: 1,
- y: -2
- }, {
- x: 2,
- y: -2
- }, {
- x: -2,
- y: -1
- }, {
- x: -1,
- y: -1
- }, {
- x: 0,
- y: -1
- }, {
- x: 1,
- y: -1
- }, {
- x: 2,
- y: -1
- }, {
- x: -3,
- y: 0
- }, {
- x: -2,
- y: 0
- }, {
- x: -1,
- y: 0
- }], [{
- x: -1,
- y: -2
- }, {
- x: 0,
- y: -2
- }, {
- x: 1,
- y: -2
- }, {
- x: -2,
- y: -1
- }, {
- x: -1,
- y: -1
- }, {
- x: 0,
- y: -1
- }, {
- x: 1,
- y: -1
- }, {
- x: -2,
- y: 0
- }, {
- x: -1,
- y: 0
- }], [{
- x: -3,
- y: -1
- }, {
- x: -2,
- y: -1
- }, {
- x: -1,
- y: -1
- }, {
- x: 0,
- y: -1
- }, {
- x: 1,
- y: -1
- }, {
- x: -4,
- y: 0
- }, {
- x: -3,
- y: 0
- }, {
- x: -2,
- y: 0
- }, {
- x: -1,
- y: 0
- }]];
- var RefinementTemplates = [{
- coding: [{
- x: 0,
- y: -1
- }, {
- x: 1,
- y: -1
- }, {
- x: -1,
- y: 0
- }],
- reference: [{
- x: 0,
- y: -1
- }, {
- x: 1,
- y: -1
- }, {
- x: -1,
- y: 0
- }, {
- x: 0,
- y: 0
- }, {
- x: 1,
- y: 0
- }, {
- x: -1,
- y: 1
- }, {
- x: 0,
- y: 1
- }, {
- x: 1,
- y: 1
- }]
- }, {
- coding: [{
- x: -1,
- y: -1
- }, {
- x: 0,
- y: -1
- }, {
- x: 1,
- y: -1
- }, {
- x: -1,
- y: 0
- }],
- reference: [{
- x: 0,
- y: -1
- }, {
- x: -1,
- y: 0
- }, {
- x: 0,
- y: 0
- }, {
- x: 1,
- y: 0
- }, {
- x: 0,
- y: 1
- }, {
- x: 1,
- y: 1
- }]
- }];
- var ReusedContexts = [0x9b25, 0x0795, 0x00e5, 0x0195];
- var RefinementReusedContexts = [0x0020, 0x0008];
-
- function decodeBitmapTemplate0(width, height, decodingContext) {
- var decoder = decodingContext.decoder;
- var contexts = decodingContext.contextCache.getContexts("GB");
- var contextLabel,
- i,
- j,
- pixel,
- row,
- row1,
- row2,
- bitmap = [];
- var OLD_PIXEL_MASK = 0x7bf7;
-
- for (i = 0; i < height; i++) {
- row = bitmap[i] = new Uint8Array(width);
- row1 = i < 1 ? row : bitmap[i - 1];
- row2 = i < 2 ? row : bitmap[i - 2];
- contextLabel = row2[0] << 13 | row2[1] << 12 | row2[2] << 11 | row1[0] << 7 | row1[1] << 6 | row1[2] << 5 | row1[3] << 4;
+}
- for (j = 0; j < width; j++) {
- row[j] = pixel = decoder.readBit(contexts, contextLabel);
- contextLabel = (contextLabel & OLD_PIXEL_MASK) << 1 | (j + 3 < width ? row2[j + 3] << 11 : 0) | (j + 4 < width ? row1[j + 4] << 4 : 0) | pixel;
- }
- }
+exports.MarkupAnnotation = MarkupAnnotation;
- return bitmap;
- }
+class WidgetAnnotation extends Annotation {
+ constructor(params) {
+ super(params);
+ const dict = params.dict;
+ const data = this.data;
+ this.ref = params.ref;
+ data.annotationType = _util.AnnotationType.WIDGET;
- function decodeBitmap(mmr, width, height, templateIndex, prediction, skip, at, decodingContext) {
- if (mmr) {
- const input = new Reader(decodingContext.data, decodingContext.start, decodingContext.end);
- return decodeMMRBitmap(input, width, height, false);
+ if (data.fieldName === undefined) {
+ data.fieldName = this._constructFieldName(dict);
}
- if (templateIndex === 0 && !skip && !prediction && at.length === 4 && at[0].x === 3 && at[0].y === -1 && at[1].x === -3 && at[1].y === -1 && at[2].x === 2 && at[2].y === -2 && at[3].x === -2 && at[3].y === -2) {
- return decodeBitmapTemplate0(width, height, decodingContext);
+ if (data.actions === undefined) {
+ data.actions = (0, _core_utils.collectActions)(params.xref, dict, _util.AnnotationActionEventType);
}
- var useskip = !!skip;
- var template = CodingTemplates[templateIndex].concat(at);
- template.sort(function (a, b) {
- return a.y - b.y || a.x - b.x;
+ const fieldValue = (0, _core_utils.getInheritableProperty)({
+ dict,
+ key: "V",
+ getArray: true
+ });
+ data.fieldValue = this._decodeFormValue(fieldValue);
+ const defaultFieldValue = (0, _core_utils.getInheritableProperty)({
+ dict,
+ key: "DV",
+ getArray: true
+ });
+ data.defaultFieldValue = this._decodeFormValue(defaultFieldValue);
+ data.alternativeText = (0, _util.stringToPDFString)(dict.get("TU") || "");
+ const defaultAppearance = (0, _core_utils.getInheritableProperty)({
+ dict,
+ key: "DA"
+ }) || params.acroForm.get("DA");
+ this._defaultAppearance = (0, _util.isString)(defaultAppearance) ? defaultAppearance : "";
+ data.defaultAppearanceData = (0, _default_appearance.parseDefaultAppearance)(this._defaultAppearance);
+ const fieldType = (0, _core_utils.getInheritableProperty)({
+ dict,
+ key: "FT"
+ });
+ data.fieldType = (0, _primitives.isName)(fieldType) ? fieldType.name : null;
+ const localResources = (0, _core_utils.getInheritableProperty)({
+ dict,
+ key: "DR"
+ });
+ const acroFormResources = params.acroForm.get("DR");
+ const appearanceResources = this.appearance && this.appearance.dict.get("Resources");
+ this._fieldResources = {
+ localResources,
+ acroFormResources,
+ appearanceResources,
+ mergedResources: _primitives.Dict.merge({
+ xref: params.xref,
+ dictArray: [localResources, appearanceResources, acroFormResources],
+ mergeSubDicts: true
+ })
+ };
+ data.fieldFlags = (0, _core_utils.getInheritableProperty)({
+ dict,
+ key: "Ff"
});
- var templateLength = template.length;
- var templateX = new Int8Array(templateLength);
- var templateY = new Int8Array(templateLength);
- var changingTemplateEntries = [];
- var reuseMask = 0,
- minX = 0,
- maxX = 0,
- minY = 0;
- var c, k;
-
- for (k = 0; k < templateLength; k++) {
- templateX[k] = template[k].x;
- templateY[k] = template[k].y;
- minX = Math.min(minX, template[k].x);
- maxX = Math.max(maxX, template[k].x);
- minY = Math.min(minY, template[k].y);
-
- if (k < templateLength - 1 && template[k].y === template[k + 1].y && template[k].x === template[k + 1].x - 1) {
- reuseMask |= 1 << templateLength - 1 - k;
- } else {
- changingTemplateEntries.push(k);
- }
- }
-
- var changingEntriesLength = changingTemplateEntries.length;
- var changingTemplateX = new Int8Array(changingEntriesLength);
- var changingTemplateY = new Int8Array(changingEntriesLength);
- var changingTemplateBit = new Uint16Array(changingEntriesLength);
-
- for (c = 0; c < changingEntriesLength; c++) {
- k = changingTemplateEntries[c];
- changingTemplateX[c] = template[k].x;
- changingTemplateY[c] = template[k].y;
- changingTemplateBit[c] = 1 << templateLength - 1 - k;
- }
-
- var sbb_left = -minX;
- var sbb_top = -minY;
- var sbb_right = width - maxX;
- var pseudoPixelContext = ReusedContexts[templateIndex];
- var row = new Uint8Array(width);
- var bitmap = [];
- var decoder = decodingContext.decoder;
- var contexts = decodingContext.contextCache.getContexts("GB");
- var ltp = 0,
- j,
- i0,
- j0,
- contextLabel = 0,
- bit,
- shift;
-
- for (var i = 0; i < height; i++) {
- if (prediction) {
- var sltp = decoder.readBit(contexts, pseudoPixelContext);
- ltp ^= sltp;
-
- if (ltp) {
- bitmap.push(row);
- continue;
- }
- }
-
- row = new Uint8Array(row);
- bitmap.push(row);
-
- for (j = 0; j < width; j++) {
- if (useskip && skip[i][j]) {
- row[j] = 0;
- continue;
- }
-
- if (j >= sbb_left && j < sbb_right && i >= sbb_top) {
- contextLabel = contextLabel << 1 & reuseMask;
-
- for (k = 0; k < changingEntriesLength; k++) {
- i0 = i + changingTemplateY[k];
- j0 = j + changingTemplateX[k];
- bit = bitmap[i0][j0];
-
- if (bit) {
- bit = changingTemplateBit[k];
- contextLabel |= bit;
- }
- }
- } else {
- contextLabel = 0;
- shift = templateLength - 1;
-
- for (k = 0; k < templateLength; k++, shift--) {
- j0 = j + templateX[k];
-
- if (j0 >= 0 && j0 < width) {
- i0 = i + templateY[k];
-
- if (i0 >= 0) {
- bit = bitmap[i0][j0];
-
- if (bit) {
- contextLabel |= bit << shift;
- }
- }
- }
- }
- }
- var pixel = decoder.readBit(contexts, contextLabel);
- row[j] = pixel;
- }
+ if (!Number.isInteger(data.fieldFlags) || data.fieldFlags < 0) {
+ data.fieldFlags = 0;
}
- return bitmap;
+ data.readOnly = this.hasFieldFlag(_util.AnnotationFieldFlag.READONLY);
+ data.hidden = this._hasFlag(data.annotationFlags, _util.AnnotationFlag.HIDDEN);
}
- function decodeRefinement(width, height, templateIndex, referenceBitmap, offsetX, offsetY, prediction, at, decodingContext) {
- var codingTemplate = RefinementTemplates[templateIndex].coding;
-
- if (templateIndex === 0) {
- codingTemplate = codingTemplate.concat([at[0]]);
- }
-
- var codingTemplateLength = codingTemplate.length;
- var codingTemplateX = new Int32Array(codingTemplateLength);
- var codingTemplateY = new Int32Array(codingTemplateLength);
- var k;
-
- for (k = 0; k < codingTemplateLength; k++) {
- codingTemplateX[k] = codingTemplate[k].x;
- codingTemplateY[k] = codingTemplate[k].y;
- }
-
- var referenceTemplate = RefinementTemplates[templateIndex].reference;
-
- if (templateIndex === 0) {
- referenceTemplate = referenceTemplate.concat([at[1]]);
- }
-
- var referenceTemplateLength = referenceTemplate.length;
- var referenceTemplateX = new Int32Array(referenceTemplateLength);
- var referenceTemplateY = new Int32Array(referenceTemplateLength);
-
- for (k = 0; k < referenceTemplateLength; k++) {
- referenceTemplateX[k] = referenceTemplate[k].x;
- referenceTemplateY[k] = referenceTemplate[k].y;
- }
-
- var referenceWidth = referenceBitmap[0].length;
- var referenceHeight = referenceBitmap.length;
- var pseudoPixelContext = RefinementReusedContexts[templateIndex];
- var bitmap = [];
- var decoder = decodingContext.decoder;
- var contexts = decodingContext.contextCache.getContexts("GR");
- var ltp = 0;
-
- for (var i = 0; i < height; i++) {
- if (prediction) {
- var sltp = decoder.readBit(contexts, pseudoPixelContext);
- ltp ^= sltp;
-
- if (ltp) {
- throw new Jbig2Error("prediction is not supported");
- }
- }
-
- var row = new Uint8Array(width);
- bitmap.push(row);
-
- for (var j = 0; j < width; j++) {
- var i0, j0;
- var contextLabel = 0;
-
- for (k = 0; k < codingTemplateLength; k++) {
- i0 = i + codingTemplateY[k];
- j0 = j + codingTemplateX[k];
-
- if (i0 < 0 || j0 < 0 || j0 >= width) {
- contextLabel <<= 1;
- } else {
- contextLabel = contextLabel << 1 | bitmap[i0][j0];
- }
- }
-
- for (k = 0; k < referenceTemplateLength; k++) {
- i0 = i + referenceTemplateY[k] - offsetY;
- j0 = j + referenceTemplateX[k] - offsetX;
-
- if (i0 < 0 || i0 >= referenceHeight || j0 < 0 || j0 >= referenceWidth) {
- contextLabel <<= 1;
- } else {
- contextLabel = contextLabel << 1 | referenceBitmap[i0][j0];
- }
- }
-
- var pixel = decoder.readBit(contexts, contextLabel);
- row[j] = pixel;
- }
+ _decodeFormValue(formValue) {
+ if (Array.isArray(formValue)) {
+ return formValue.filter(item => (0, _util.isString)(item)).map(item => (0, _util.stringToPDFString)(item));
+ } else if ((0, _primitives.isName)(formValue)) {
+ return (0, _util.stringToPDFString)(formValue.name);
+ } else if ((0, _util.isString)(formValue)) {
+ return (0, _util.stringToPDFString)(formValue);
}
- return bitmap;
+ return null;
}
- function decodeSymbolDictionary(huffman, refinement, symbols, numberOfNewSymbols, numberOfExportedSymbols, huffmanTables, templateIndex, at, refinementTemplateIndex, refinementAt, decodingContext, huffmanInput) {
- if (huffman && refinement) {
- throw new Jbig2Error("symbol refinement with Huffman is not supported");
- }
-
- var newSymbols = [];
- var currentHeight = 0;
- var symbolCodeLength = (0, _core_utils.log2)(symbols.length + numberOfNewSymbols);
- var decoder = decodingContext.decoder;
- var contextCache = decodingContext.contextCache;
- let tableB1, symbolWidths;
+ hasFieldFlag(flag) {
+ return !!(this.data.fieldFlags & flag);
+ }
- if (huffman) {
- tableB1 = getStandardTable(1);
- symbolWidths = [];
- symbolCodeLength = Math.max(symbolCodeLength, 1);
+ getOperatorList(evaluator, task, renderForms, annotationStorage) {
+ if (renderForms && !(this instanceof SignatureWidgetAnnotation)) {
+ return Promise.resolve(new _operator_list.OperatorList());
}
- while (newSymbols.length < numberOfNewSymbols) {
- var deltaHeight = huffman ? huffmanTables.tableDeltaHeight.decode(huffmanInput) : decodeInteger(contextCache, "IADH", decoder);
- currentHeight += deltaHeight;
- let currentWidth = 0,
- totalWidth = 0;
- const firstSymbol = huffman ? symbolWidths.length : 0;
-
- while (true) {
- var deltaWidth = huffman ? huffmanTables.tableDeltaWidth.decode(huffmanInput) : decodeInteger(contextCache, "IADW", decoder);
-
- if (deltaWidth === null) {
- break;
- }
-
- currentWidth += deltaWidth;
- totalWidth += currentWidth;
- var bitmap;
-
- if (refinement) {
- var numberOfInstances = decodeInteger(contextCache, "IAAI", decoder);
-
- if (numberOfInstances > 1) {
- bitmap = decodeTextRegion(huffman, refinement, currentWidth, currentHeight, 0, numberOfInstances, 1, symbols.concat(newSymbols), symbolCodeLength, 0, 0, 1, 0, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext, 0, huffmanInput);
- } else {
- var symbolId = decodeIAID(contextCache, decoder, symbolCodeLength);
- var rdx = decodeInteger(contextCache, "IARDX", decoder);
- var rdy = decodeInteger(contextCache, "IARDY", decoder);
- var symbol = symbolId < symbols.length ? symbols[symbolId] : newSymbols[symbolId - symbols.length];
- bitmap = decodeRefinement(currentWidth, currentHeight, refinementTemplateIndex, symbol, rdx, rdy, false, refinementAt, decodingContext);
- }
-
- newSymbols.push(bitmap);
- } else if (huffman) {
- symbolWidths.push(currentWidth);
- } else {
- bitmap = decodeBitmap(false, currentWidth, currentHeight, templateIndex, false, null, at, decodingContext);
- newSymbols.push(bitmap);
- }
- }
-
- if (huffman && !refinement) {
- const bitmapSize = huffmanTables.tableBitmapSize.decode(huffmanInput);
- huffmanInput.byteAlign();
- let collectiveBitmap;
-
- if (bitmapSize === 0) {
- collectiveBitmap = readUncompressedBitmap(huffmanInput, totalWidth, currentHeight);
- } else {
- const originalEnd = huffmanInput.end;
- const bitmapEnd = huffmanInput.position + bitmapSize;
- huffmanInput.end = bitmapEnd;
- collectiveBitmap = decodeMMRBitmap(huffmanInput, totalWidth, currentHeight, false);
- huffmanInput.end = originalEnd;
- huffmanInput.position = bitmapEnd;
- }
-
- const numberOfSymbolsDecoded = symbolWidths.length;
-
- if (firstSymbol === numberOfSymbolsDecoded - 1) {
- newSymbols.push(collectiveBitmap);
- } else {
- let i,
- y,
- xMin = 0,
- xMax,
- bitmapWidth,
- symbolBitmap;
-
- for (i = firstSymbol; i < numberOfSymbolsDecoded; i++) {
- bitmapWidth = symbolWidths[i];
- xMax = xMin + bitmapWidth;
- symbolBitmap = [];
-
- for (y = 0; y < currentHeight; y++) {
- symbolBitmap.push(collectiveBitmap[y].subarray(xMin, xMax));
- }
-
- newSymbols.push(symbolBitmap);
- xMin = xMax;
- }
- }
- }
+ if (!this._hasText) {
+ return super.getOperatorList(evaluator, task, renderForms, annotationStorage);
}
- var exportedSymbols = [];
- var flags = [],
- currentFlag = false;
- var totalSymbolsLength = symbols.length + numberOfNewSymbols;
-
- while (flags.length < totalSymbolsLength) {
- var runLength = huffman ? tableB1.decode(huffmanInput) : decodeInteger(contextCache, "IAEX", decoder);
-
- while (runLength--) {
- flags.push(currentFlag);
+ return this._getAppearance(evaluator, task, annotationStorage).then(content => {
+ if (this.appearance && content === null) {
+ return super.getOperatorList(evaluator, task, renderForms, annotationStorage);
}
- currentFlag = !currentFlag;
- }
-
- for (var i = 0, ii = symbols.length; i < ii; i++) {
- if (flags[i]) {
- exportedSymbols.push(symbols[i]);
- }
- }
+ const operatorList = new _operator_list.OperatorList();
- for (var j = 0; j < numberOfNewSymbols; i++, j++) {
- if (flags[i]) {
- exportedSymbols.push(newSymbols[j]);
+ if (!this._defaultAppearance || content === null) {
+ return operatorList;
}
- }
- return exportedSymbols;
+ const matrix = [1, 0, 0, 1, 0, 0];
+ const bbox = [0, 0, this.data.rect[2] - this.data.rect[0], this.data.rect[3] - this.data.rect[1]];
+ const transform = getTransformMatrix(this.data.rect, bbox, matrix);
+ operatorList.addOp(_util.OPS.beginAnnotation, [this.data.id, this.data.rect, transform, matrix]);
+ const stream = new _stream.StringStream(content);
+ return evaluator.getOperatorList({
+ stream,
+ task,
+ resources: this._fieldResources.mergedResources,
+ operatorList
+ }).then(function () {
+ operatorList.addOp(_util.OPS.endAnnotation, []);
+ return operatorList;
+ });
+ });
}
- function decodeTextRegion(huffman, refinement, width, height, defaultPixelValue, numberOfSymbolInstances, stripSize, inputSymbols, symbolCodeLength, transposed, dsOffset, referenceCorner, combinationOperator, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext, logStripSize, huffmanInput) {
- if (huffman && refinement) {
- throw new Jbig2Error("refinement with Huffman is not supported");
+ async save(evaluator, task, annotationStorage) {
+ if (!annotationStorage) {
+ return null;
}
- var bitmap = [];
- var i, row;
-
- for (i = 0; i < height; i++) {
- row = new Uint8Array(width);
+ const storageEntry = annotationStorage.get(this.data.id);
+ const value = storageEntry && storageEntry.value;
- if (defaultPixelValue) {
- for (var j = 0; j < width; j++) {
- row[j] = defaultPixelValue;
- }
- }
-
- bitmap.push(row);
+ if (value === this.data.fieldValue || value === undefined) {
+ return null;
}
- var decoder = decodingContext.decoder;
- var contextCache = decodingContext.contextCache;
- var stripT = huffman ? -huffmanTables.tableDeltaT.decode(huffmanInput) : -decodeInteger(contextCache, "IADT", decoder);
- var firstS = 0;
- i = 0;
-
- while (i < numberOfSymbolInstances) {
- var deltaT = huffman ? huffmanTables.tableDeltaT.decode(huffmanInput) : decodeInteger(contextCache, "IADT", decoder);
- stripT += deltaT;
- var deltaFirstS = huffman ? huffmanTables.tableFirstS.decode(huffmanInput) : decodeInteger(contextCache, "IAFS", decoder);
- firstS += deltaFirstS;
- var currentS = firstS;
-
- do {
- let currentT = 0;
-
- if (stripSize > 1) {
- currentT = huffman ? huffmanInput.readBits(logStripSize) : decodeInteger(contextCache, "IAIT", decoder);
- }
-
- var t = stripSize * stripT + currentT;
- var symbolId = huffman ? huffmanTables.symbolIDTable.decode(huffmanInput) : decodeIAID(contextCache, decoder, symbolCodeLength);
- var applyRefinement = refinement && (huffman ? huffmanInput.readBit() : decodeInteger(contextCache, "IARI", decoder));
- var symbolBitmap = inputSymbols[symbolId];
- var symbolWidth = symbolBitmap[0].length;
- var symbolHeight = symbolBitmap.length;
-
- if (applyRefinement) {
- var rdw = decodeInteger(contextCache, "IARDW", decoder);
- var rdh = decodeInteger(contextCache, "IARDH", decoder);
- var rdx = decodeInteger(contextCache, "IARDX", decoder);
- var rdy = decodeInteger(contextCache, "IARDY", decoder);
- symbolWidth += rdw;
- symbolHeight += rdh;
- symbolBitmap = decodeRefinement(symbolWidth, symbolHeight, refinementTemplateIndex, symbolBitmap, (rdw >> 1) + rdx, (rdh >> 1) + rdy, false, refinementAt, decodingContext);
- }
-
- var offsetT = t - (referenceCorner & 1 ? 0 : symbolHeight - 1);
- var offsetS = currentS - (referenceCorner & 2 ? symbolWidth - 1 : 0);
- var s2, t2, symbolRow;
-
- if (transposed) {
- for (s2 = 0; s2 < symbolHeight; s2++) {
- row = bitmap[offsetS + s2];
-
- if (!row) {
- continue;
- }
-
- symbolRow = symbolBitmap[s2];
- var maxWidth = Math.min(width - offsetT, symbolWidth);
-
- switch (combinationOperator) {
- case 0:
- for (t2 = 0; t2 < maxWidth; t2++) {
- row[offsetT + t2] |= symbolRow[t2];
- }
-
- break;
-
- case 2:
- for (t2 = 0; t2 < maxWidth; t2++) {
- row[offsetT + t2] ^= symbolRow[t2];
- }
-
- break;
-
- default:
- throw new Jbig2Error(`operator ${combinationOperator} is not supported`);
- }
- }
-
- currentS += symbolHeight - 1;
- } else {
- for (t2 = 0; t2 < symbolHeight; t2++) {
- row = bitmap[offsetT + t2];
-
- if (!row) {
- continue;
- }
-
- symbolRow = symbolBitmap[t2];
-
- switch (combinationOperator) {
- case 0:
- for (s2 = 0; s2 < symbolWidth; s2++) {
- row[offsetS + s2] |= symbolRow[s2];
- }
-
- break;
-
- case 2:
- for (s2 = 0; s2 < symbolWidth; s2++) {
- row[offsetS + s2] ^= symbolRow[s2];
- }
-
- break;
-
- default:
- throw new Jbig2Error(`operator ${combinationOperator} is not supported`);
- }
- }
-
- currentS += symbolWidth - 1;
- }
-
- i++;
- var deltaS = huffman ? huffmanTables.tableDeltaS.decode(huffmanInput) : decodeInteger(contextCache, "IADS", decoder);
-
- if (deltaS === null) {
- break;
- }
+ let appearance = await this._getAppearance(evaluator, task, annotationStorage);
- currentS += deltaS + dsOffset;
- } while (true);
+ if (appearance === null) {
+ return null;
}
- return bitmap;
- }
-
- function decodePatternDictionary(mmr, patternWidth, patternHeight, maxPatternIndex, template, decodingContext) {
- const at = [];
-
- if (!mmr) {
- at.push({
- x: -patternWidth,
- y: 0
- });
+ const {
+ xref
+ } = evaluator;
+ const dict = xref.fetchIfRef(this.ref);
- if (template === 0) {
- at.push({
- x: -3,
- y: -1
- });
- at.push({
- x: 2,
- y: -2
- });
- at.push({
- x: -2,
- y: -2
- });
- }
+ if (!(0, _primitives.isDict)(dict)) {
+ return null;
}
- const collectiveWidth = (maxPatternIndex + 1) * patternWidth;
- const collectiveBitmap = decodeBitmap(mmr, collectiveWidth, patternHeight, template, false, null, at, decodingContext);
- const patterns = [];
-
- for (let i = 0; i <= maxPatternIndex; i++) {
- const patternBitmap = [];
- const xMin = patternWidth * i;
- const xMax = xMin + patternWidth;
-
- for (let y = 0; y < patternHeight; y++) {
- patternBitmap.push(collectiveBitmap[y].subarray(xMin, xMax));
- }
+ const bbox = [0, 0, this.data.rect[2] - this.data.rect[0], this.data.rect[3] - this.data.rect[1]];
+ const xfa = {
+ path: (0, _util.stringToPDFString)(dict.get("T") || ""),
+ value
+ };
+ const newRef = xref.getNewRef();
+ const AP = new _primitives.Dict(xref);
+ AP.set("N", newRef);
+ const encrypt = xref.encrypt;
+ let originalTransform = null;
+ let newTransform = null;
- patterns.push(patternBitmap);
+ if (encrypt) {
+ originalTransform = encrypt.createCipherTransform(this.ref.num, this.ref.gen);
+ newTransform = encrypt.createCipherTransform(newRef.num, newRef.gen);
+ appearance = newTransform.encryptString(appearance);
}
- return patterns;
+ dict.set("V", (0, _util.isAscii)(value) ? value : (0, _util.stringToUTF16BEString)(value));
+ dict.set("AP", AP);
+ dict.set("M", `D:${(0, _util.getModificationDate)()}`);
+ const appearanceDict = new _primitives.Dict(xref);
+ appearanceDict.set("Length", appearance.length);
+ appearanceDict.set("Subtype", _primitives.Name.get("Form"));
+ appearanceDict.set("Resources", this._getSaveFieldResources(xref));
+ appearanceDict.set("BBox", bbox);
+ const bufferOriginal = [`${this.ref.num} ${this.ref.gen} obj\n`];
+ (0, _writer.writeDict)(dict, bufferOriginal, originalTransform);
+ bufferOriginal.push("\nendobj\n");
+ const bufferNew = [`${newRef.num} ${newRef.gen} obj\n`];
+ (0, _writer.writeDict)(appearanceDict, bufferNew, newTransform);
+ bufferNew.push(" stream\n", appearance, "\nendstream\nendobj\n");
+ return [{
+ ref: this.ref,
+ data: bufferOriginal.join(""),
+ xfa
+ }, {
+ ref: newRef,
+ data: bufferNew.join(""),
+ xfa: null
+ }];
}
- function decodeHalftoneRegion(mmr, patterns, template, regionWidth, regionHeight, defaultPixelValue, enableSkip, combinationOperator, gridWidth, gridHeight, gridOffsetX, gridOffsetY, gridVectorX, gridVectorY, decodingContext) {
- const skip = null;
-
- if (enableSkip) {
- throw new Jbig2Error("skip is not supported");
- }
-
- if (combinationOperator !== 0) {
- throw new Jbig2Error("operator " + combinationOperator + " is not supported in halftone region");
- }
-
- const regionBitmap = [];
- let i, j, row;
-
- for (i = 0; i < regionHeight; i++) {
- row = new Uint8Array(regionWidth);
-
- if (defaultPixelValue) {
- for (j = 0; j < regionWidth; j++) {
- row[j] = defaultPixelValue;
- }
- }
-
- regionBitmap.push(row);
- }
-
- const numberOfPatterns = patterns.length;
- const pattern0 = patterns[0];
- const patternWidth = pattern0[0].length,
- patternHeight = pattern0.length;
- const bitsPerValue = (0, _core_utils.log2)(numberOfPatterns);
- const at = [];
-
- if (!mmr) {
- at.push({
- x: template <= 1 ? 3 : 2,
- y: -1
- });
+ async _getAppearance(evaluator, task, annotationStorage) {
+ const isPassword = this.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD);
- if (template === 0) {
- at.push({
- x: -3,
- y: -1
- });
- at.push({
- x: 2,
- y: -2
- });
- at.push({
- x: -2,
- y: -2
- });
- }
+ if (!annotationStorage || isPassword) {
+ return null;
}
- const grayScaleBitPlanes = [];
- let mmrInput, bitmap;
+ const storageEntry = annotationStorage.get(this.data.id);
+ let value = storageEntry && storageEntry.value;
- if (mmr) {
- mmrInput = new Reader(decodingContext.data, decodingContext.start, decodingContext.end);
+ if (value === undefined) {
+ return null;
}
- for (i = bitsPerValue - 1; i >= 0; i--) {
- if (mmr) {
- bitmap = decodeMMRBitmap(mmrInput, gridWidth, gridHeight, true);
- } else {
- bitmap = decodeBitmap(false, gridWidth, gridHeight, template, false, skip, at, decodingContext);
- }
+ value = value.trim();
- grayScaleBitPlanes[i] = bitmap;
+ if (value === "") {
+ return "";
}
- let mg, ng, bit, patternIndex, patternBitmap, x, y, patternRow, regionRow;
-
- for (mg = 0; mg < gridHeight; mg++) {
- for (ng = 0; ng < gridWidth; ng++) {
- bit = 0;
- patternIndex = 0;
-
- for (j = bitsPerValue - 1; j >= 0; j--) {
- bit = grayScaleBitPlanes[j][mg][ng] ^ bit;
- patternIndex |= bit << j;
- }
-
- patternBitmap = patterns[patternIndex];
- x = gridOffsetX + mg * gridVectorY + ng * gridVectorX >> 8;
- y = gridOffsetY + mg * gridVectorX - ng * gridVectorY >> 8;
-
- if (x >= 0 && x + patternWidth <= regionWidth && y >= 0 && y + patternHeight <= regionHeight) {
- for (i = 0; i < patternHeight; i++) {
- regionRow = regionBitmap[y + i];
- patternRow = patternBitmap[i];
+ let lineCount = -1;
- for (j = 0; j < patternWidth; j++) {
- regionRow[x + j] |= patternRow[j];
- }
- }
- } else {
- let regionX, regionY;
-
- for (i = 0; i < patternHeight; i++) {
- regionY = y + i;
-
- if (regionY < 0 || regionY >= regionHeight) {
- continue;
- }
-
- regionRow = regionBitmap[regionY];
- patternRow = patternBitmap[i];
-
- for (j = 0; j < patternWidth; j++) {
- regionX = x + j;
-
- if (regionX >= 0 && regionX < regionWidth) {
- regionRow[regionX] |= patternRow[j];
- }
- }
- }
- }
- }
+ if (this.data.multiLine) {
+ lineCount = value.split(/\r\n|\r|\n/).length;
}
- return regionBitmap;
- }
-
- function readSegmentHeader(data, start) {
- var segmentHeader = {};
- segmentHeader.number = (0, _core_utils.readUint32)(data, start);
- var flags = data[start + 4];
- var segmentType = flags & 0x3f;
+ const defaultPadding = 2;
+ const hPadding = defaultPadding;
+ const totalHeight = this.data.rect[3] - this.data.rect[1];
+ const totalWidth = this.data.rect[2] - this.data.rect[0];
- if (!SegmentTypes[segmentType]) {
- throw new Jbig2Error("invalid segment type: " + segmentType);
+ if (!this._defaultAppearance) {
+ this.data.defaultAppearanceData = (0, _default_appearance.parseDefaultAppearance)(this._defaultAppearance = "/Helvetica 0 Tf 0 g");
}
- segmentHeader.type = segmentType;
- segmentHeader.typeName = SegmentTypes[segmentType];
- segmentHeader.deferredNonRetain = !!(flags & 0x80);
- var pageAssociationFieldSize = !!(flags & 0x40);
- var referredFlags = data[start + 5];
- var referredToCount = referredFlags >> 5 & 7;
- var retainBits = [referredFlags & 31];
- var position = start + 6;
+ const [defaultAppearance, fontSize] = this._computeFontSize(totalHeight, lineCount);
- if (referredFlags === 7) {
- referredToCount = (0, _core_utils.readUint32)(data, position - 1) & 0x1fffffff;
- position += 3;
- var bytes = referredToCount + 7 >> 3;
- retainBits[0] = data[position++];
+ const font = await this._getFontData(evaluator, task);
+ let descent = font.descent;
- while (--bytes > 0) {
- retainBits.push(data[position++]);
- }
- } else if (referredFlags === 5 || referredFlags === 6) {
- throw new Jbig2Error("invalid referred-to flags");
+ if (isNaN(descent)) {
+ descent = 0;
}
- segmentHeader.retainBits = retainBits;
- let referredToSegmentNumberSize = 4;
+ const vPadding = defaultPadding + Math.abs(descent) * fontSize;
+ const alignment = this.data.textAlignment;
- if (segmentHeader.number <= 256) {
- referredToSegmentNumberSize = 1;
- } else if (segmentHeader.number <= 65536) {
- referredToSegmentNumberSize = 2;
+ if (this.data.multiLine) {
+ return this._getMultilineAppearance(defaultAppearance, value, font, fontSize, totalWidth, totalHeight, alignment, hPadding, vPadding);
}
- var referredTo = [];
- var i, ii;
-
- for (i = 0; i < referredToCount; i++) {
- let number;
-
- if (referredToSegmentNumberSize === 1) {
- number = data[position];
- } else if (referredToSegmentNumberSize === 2) {
- number = (0, _core_utils.readUint16)(data, position);
- } else {
- number = (0, _core_utils.readUint32)(data, position);
- }
+ const encodedString = font.encodeString(value).join("");
- referredTo.push(number);
- position += referredToSegmentNumberSize;
+ if (this.data.comb) {
+ return this._getCombAppearance(defaultAppearance, font, encodedString, totalWidth, hPadding, vPadding);
}
- segmentHeader.referredTo = referredTo;
-
- if (!pageAssociationFieldSize) {
- segmentHeader.pageAssociation = data[position++];
- } else {
- segmentHeader.pageAssociation = (0, _core_utils.readUint32)(data, position);
- position += 4;
+ if (alignment === 0 || alignment > 2) {
+ return "/Tx BMC q BT " + defaultAppearance + ` 1 0 0 1 ${hPadding} ${vPadding} Tm (${(0, _util.escapeString)(encodedString)}) Tj` + " ET Q EMC";
}
- segmentHeader.length = (0, _core_utils.readUint32)(data, position);
- position += 4;
-
- if (segmentHeader.length === 0xffffffff) {
- if (segmentType === 38) {
- var genericRegionInfo = readRegionSegmentInformation(data, position);
- var genericRegionSegmentFlags = data[position + RegionSegmentInformationFieldLength];
- var genericRegionMmr = !!(genericRegionSegmentFlags & 1);
- var searchPatternLength = 6;
- var searchPattern = new Uint8Array(searchPatternLength);
-
- if (!genericRegionMmr) {
- searchPattern[0] = 0xff;
- searchPattern[1] = 0xac;
- }
-
- searchPattern[2] = genericRegionInfo.height >>> 24 & 0xff;
- searchPattern[3] = genericRegionInfo.height >> 16 & 0xff;
- searchPattern[4] = genericRegionInfo.height >> 8 & 0xff;
- searchPattern[5] = genericRegionInfo.height & 0xff;
-
- for (i = position, ii = data.length; i < ii; i++) {
- var j = 0;
-
- while (j < searchPatternLength && searchPattern[j] === data[i + j]) {
- j++;
- }
+ const renderedText = this._renderText(encodedString, font, fontSize, totalWidth, alignment, hPadding, vPadding);
- if (j === searchPatternLength) {
- segmentHeader.length = i + searchPatternLength;
- break;
- }
- }
-
- if (segmentHeader.length === 0xffffffff) {
- throw new Jbig2Error("segment end was not found");
- }
- } else {
- throw new Jbig2Error("invalid unknown segment length");
- }
- }
-
- segmentHeader.headerEnd = position;
- return segmentHeader;
+ return "/Tx BMC q BT " + defaultAppearance + ` 1 0 0 1 0 0 Tm ${renderedText}` + " ET Q EMC";
}
- function readSegments(header, data, start, end) {
- var segments = [];
- var position = start;
-
- while (position < end) {
- var segmentHeader = readSegmentHeader(data, position);
- position = segmentHeader.headerEnd;
- var segment = {
- header: segmentHeader,
- data
- };
-
- if (!header.randomAccess) {
- segment.start = position;
- position += segmentHeader.length;
- segment.end = position;
- }
-
- segments.push(segment);
-
- if (segmentHeader.type === 51) {
- break;
- }
- }
+ async _getFontData(evaluator, task) {
+ const operatorList = new _operator_list.OperatorList();
+ const initialState = {
+ font: null,
- if (header.randomAccess) {
- for (var i = 0, ii = segments.length; i < ii; i++) {
- segments[i].start = position;
- position += segments[i].header.length;
- segments[i].end = position;
+ clone() {
+ return this;
}
- }
-
- return segments;
- }
- function readRegionSegmentInformation(data, start) {
- return {
- width: (0, _core_utils.readUint32)(data, start),
- height: (0, _core_utils.readUint32)(data, start + 4),
- x: (0, _core_utils.readUint32)(data, start + 8),
- y: (0, _core_utils.readUint32)(data, start + 12),
- combinationOperator: data[start + 16] & 7
};
+ const {
+ fontName,
+ fontSize
+ } = this.data.defaultAppearanceData;
+ await evaluator.handleSetFont(this._fieldResources.mergedResources, [fontName && _primitives.Name.get(fontName), fontSize], null, operatorList, task, initialState, null);
+ return initialState.font;
}
- var RegionSegmentInformationFieldLength = 17;
-
- function processSegment(segment, visitor) {
- var header = segment.header;
- var data = segment.data,
- position = segment.start,
- end = segment.end;
- var args, at, i, atLength;
-
- switch (header.type) {
- case 0:
- var dictionary = {};
- var dictionaryFlags = (0, _core_utils.readUint16)(data, position);
- dictionary.huffman = !!(dictionaryFlags & 1);
- dictionary.refinement = !!(dictionaryFlags & 2);
- dictionary.huffmanDHSelector = dictionaryFlags >> 2 & 3;
- dictionary.huffmanDWSelector = dictionaryFlags >> 4 & 3;
- dictionary.bitmapSizeSelector = dictionaryFlags >> 6 & 1;
- dictionary.aggregationInstancesSelector = dictionaryFlags >> 7 & 1;
- dictionary.bitmapCodingContextUsed = !!(dictionaryFlags & 256);
- dictionary.bitmapCodingContextRetained = !!(dictionaryFlags & 512);
- dictionary.template = dictionaryFlags >> 10 & 3;
- dictionary.refinementTemplate = dictionaryFlags >> 12 & 1;
- position += 2;
-
- if (!dictionary.huffman) {
- atLength = dictionary.template === 0 ? 4 : 1;
- at = [];
-
- for (i = 0; i < atLength; i++) {
- at.push({
- x: (0, _core_utils.readInt8)(data, position),
- y: (0, _core_utils.readInt8)(data, position + 1)
- });
- position += 2;
- }
-
- dictionary.at = at;
- }
-
- if (dictionary.refinement && !dictionary.refinementTemplate) {
- at = [];
-
- for (i = 0; i < 2; i++) {
- at.push({
- x: (0, _core_utils.readInt8)(data, position),
- y: (0, _core_utils.readInt8)(data, position + 1)
- });
- position += 2;
- }
-
- dictionary.refinementAt = at;
- }
-
- dictionary.numberOfExportedSymbols = (0, _core_utils.readUint32)(data, position);
- position += 4;
- dictionary.numberOfNewSymbols = (0, _core_utils.readUint32)(data, position);
- position += 4;
- args = [dictionary, header.number, header.referredTo, data, position, end];
- break;
-
- case 6:
- case 7:
- var textRegion = {};
- textRegion.info = readRegionSegmentInformation(data, position);
- position += RegionSegmentInformationFieldLength;
- var textRegionSegmentFlags = (0, _core_utils.readUint16)(data, position);
- position += 2;
- textRegion.huffman = !!(textRegionSegmentFlags & 1);
- textRegion.refinement = !!(textRegionSegmentFlags & 2);
- textRegion.logStripSize = textRegionSegmentFlags >> 2 & 3;
- textRegion.stripSize = 1 << textRegion.logStripSize;
- textRegion.referenceCorner = textRegionSegmentFlags >> 4 & 3;
- textRegion.transposed = !!(textRegionSegmentFlags & 64);
- textRegion.combinationOperator = textRegionSegmentFlags >> 7 & 3;
- textRegion.defaultPixelValue = textRegionSegmentFlags >> 9 & 1;
- textRegion.dsOffset = textRegionSegmentFlags << 17 >> 27;
- textRegion.refinementTemplate = textRegionSegmentFlags >> 15 & 1;
-
- if (textRegion.huffman) {
- var textRegionHuffmanFlags = (0, _core_utils.readUint16)(data, position);
- position += 2;
- textRegion.huffmanFS = textRegionHuffmanFlags & 3;
- textRegion.huffmanDS = textRegionHuffmanFlags >> 2 & 3;
- textRegion.huffmanDT = textRegionHuffmanFlags >> 4 & 3;
- textRegion.huffmanRefinementDW = textRegionHuffmanFlags >> 6 & 3;
- textRegion.huffmanRefinementDH = textRegionHuffmanFlags >> 8 & 3;
- textRegion.huffmanRefinementDX = textRegionHuffmanFlags >> 10 & 3;
- textRegion.huffmanRefinementDY = textRegionHuffmanFlags >> 12 & 3;
- textRegion.huffmanRefinementSizeSelector = !!(textRegionHuffmanFlags & 0x4000);
- }
-
- if (textRegion.refinement && !textRegion.refinementTemplate) {
- at = [];
-
- for (i = 0; i < 2; i++) {
- at.push({
- x: (0, _core_utils.readInt8)(data, position),
- y: (0, _core_utils.readInt8)(data, position + 1)
- });
- position += 2;
- }
-
- textRegion.refinementAt = at;
- }
-
- textRegion.numberOfSymbolInstances = (0, _core_utils.readUint32)(data, position);
- position += 4;
- args = [textRegion, header.referredTo, data, position, end];
- break;
-
- case 16:
- const patternDictionary = {};
- const patternDictionaryFlags = data[position++];
- patternDictionary.mmr = !!(patternDictionaryFlags & 1);
- patternDictionary.template = patternDictionaryFlags >> 1 & 3;
- patternDictionary.patternWidth = data[position++];
- patternDictionary.patternHeight = data[position++];
- patternDictionary.maxPatternIndex = (0, _core_utils.readUint32)(data, position);
- position += 4;
- args = [patternDictionary, header.number, data, position, end];
- break;
-
- case 22:
- case 23:
- const halftoneRegion = {};
- halftoneRegion.info = readRegionSegmentInformation(data, position);
- position += RegionSegmentInformationFieldLength;
- const halftoneRegionFlags = data[position++];
- halftoneRegion.mmr = !!(halftoneRegionFlags & 1);
- halftoneRegion.template = halftoneRegionFlags >> 1 & 3;
- halftoneRegion.enableSkip = !!(halftoneRegionFlags & 8);
- halftoneRegion.combinationOperator = halftoneRegionFlags >> 4 & 7;
- halftoneRegion.defaultPixelValue = halftoneRegionFlags >> 7 & 1;
- halftoneRegion.gridWidth = (0, _core_utils.readUint32)(data, position);
- position += 4;
- halftoneRegion.gridHeight = (0, _core_utils.readUint32)(data, position);
- position += 4;
- halftoneRegion.gridOffsetX = (0, _core_utils.readUint32)(data, position) & 0xffffffff;
- position += 4;
- halftoneRegion.gridOffsetY = (0, _core_utils.readUint32)(data, position) & 0xffffffff;
- position += 4;
- halftoneRegion.gridVectorX = (0, _core_utils.readUint16)(data, position);
- position += 2;
- halftoneRegion.gridVectorY = (0, _core_utils.readUint16)(data, position);
- position += 2;
- args = [halftoneRegion, header.referredTo, data, position, end];
- break;
-
- case 38:
- case 39:
- var genericRegion = {};
- genericRegion.info = readRegionSegmentInformation(data, position);
- position += RegionSegmentInformationFieldLength;
- var genericRegionSegmentFlags = data[position++];
- genericRegion.mmr = !!(genericRegionSegmentFlags & 1);
- genericRegion.template = genericRegionSegmentFlags >> 1 & 3;
- genericRegion.prediction = !!(genericRegionSegmentFlags & 8);
-
- if (!genericRegion.mmr) {
- atLength = genericRegion.template === 0 ? 4 : 1;
- at = [];
-
- for (i = 0; i < atLength; i++) {
- at.push({
- x: (0, _core_utils.readInt8)(data, position),
- y: (0, _core_utils.readInt8)(data, position + 1)
- });
- position += 2;
- }
-
- genericRegion.at = at;
- }
-
- args = [genericRegion, data, position, end];
- break;
-
- case 48:
- var pageInfo = {
- width: (0, _core_utils.readUint32)(data, position),
- height: (0, _core_utils.readUint32)(data, position + 4),
- resolutionX: (0, _core_utils.readUint32)(data, position + 8),
- resolutionY: (0, _core_utils.readUint32)(data, position + 12)
- };
-
- if (pageInfo.height === 0xffffffff) {
- delete pageInfo.height;
- }
-
- var pageSegmentFlags = data[position + 16];
- (0, _core_utils.readUint16)(data, position + 17);
- pageInfo.lossless = !!(pageSegmentFlags & 1);
- pageInfo.refinement = !!(pageSegmentFlags & 2);
- pageInfo.defaultPixelValue = pageSegmentFlags >> 2 & 1;
- pageInfo.combinationOperator = pageSegmentFlags >> 3 & 3;
- pageInfo.requiresBuffer = !!(pageSegmentFlags & 32);
- pageInfo.combinationOperatorOverride = !!(pageSegmentFlags & 64);
- args = [pageInfo];
- break;
-
- case 49:
- break;
-
- case 50:
- break;
-
- case 51:
- break;
-
- case 53:
- args = [header.number, data, position, end];
- break;
+ _computeFontSize(height, lineCount) {
+ let {
+ fontSize
+ } = this.data.defaultAppearanceData;
- case 62:
- break;
+ if (!fontSize) {
+ const roundWithOneDigit = x => Math.round(x * 10) / 10;
- default:
- throw new Jbig2Error(`segment type ${header.typeName}(${header.type})` + " is not implemented");
- }
+ const FONT_FACTOR = 0.8;
- var callbackName = "on" + header.typeName;
+ if (lineCount === -1) {
+ fontSize = roundWithOneDigit(FONT_FACTOR * height);
+ } else {
+ fontSize = 10;
+ let lineHeight = fontSize / FONT_FACTOR;
+ let numberOfLines = Math.round(height / lineHeight);
+ numberOfLines = Math.max(numberOfLines, lineCount);
+ lineHeight = height / numberOfLines;
+ fontSize = roundWithOneDigit(FONT_FACTOR * lineHeight);
+ }
- if (callbackName in visitor) {
- visitor[callbackName].apply(visitor, args);
+ const {
+ fontName,
+ fontColor
+ } = this.data.defaultAppearanceData;
+ this._defaultAppearance = (0, _default_appearance.createDefaultAppearance)({
+ fontSize,
+ fontName,
+ fontColor
+ });
}
- }
- function processSegments(segments, visitor) {
- for (var i = 0, ii = segments.length; i < ii; i++) {
- processSegment(segments[i], visitor);
- }
+ return [this._defaultAppearance, fontSize];
}
- function parseJbig2Chunks(chunks) {
- var visitor = new SimpleSegmentVisitor();
+ _renderText(text, font, fontSize, totalWidth, alignment, hPadding, vPadding) {
+ const glyphs = font.charsToGlyphs(text);
+ const scale = fontSize / 1000;
+ let width = 0;
- for (var i = 0, ii = chunks.length; i < ii; i++) {
- var chunk = chunks[i];
- var segments = readSegments({}, chunk.data, chunk.start, chunk.end);
- processSegments(segments, visitor);
+ for (const glyph of glyphs) {
+ width += glyph.width * scale;
}
- return visitor.buffer;
- }
-
- function parseJbig2(data) {
- const end = data.length;
- let position = 0;
+ let shift;
- if (data[position] !== 0x97 || data[position + 1] !== 0x4a || data[position + 2] !== 0x42 || data[position + 3] !== 0x32 || data[position + 4] !== 0x0d || data[position + 5] !== 0x0a || data[position + 6] !== 0x1a || data[position + 7] !== 0x0a) {
- throw new Jbig2Error("parseJbig2 - invalid header.");
+ if (alignment === 1) {
+ shift = (totalWidth - width) / 2;
+ } else if (alignment === 2) {
+ shift = totalWidth - width - hPadding;
+ } else {
+ shift = hPadding;
}
- const header = Object.create(null);
- position += 8;
- const flags = data[position++];
- header.randomAccess = !(flags & 1);
-
- if (!(flags & 2)) {
- header.numberOfPages = (0, _core_utils.readUint32)(data, position);
- position += 4;
- }
+ shift = shift.toFixed(2);
+ vPadding = vPadding.toFixed(2);
+ return `${shift} ${vPadding} Td (${(0, _util.escapeString)(text)}) Tj`;
+ }
- const segments = readSegments(header, data, position, end);
- const visitor = new SimpleSegmentVisitor();
- processSegments(segments, visitor);
+ _getSaveFieldResources(xref) {
const {
- width,
- height
- } = visitor.currentPageInfo;
- const bitPacked = visitor.buffer;
- const imgData = new Uint8ClampedArray(width * height);
- let q = 0,
- k = 0;
+ localResources,
+ appearanceResources,
+ acroFormResources
+ } = this._fieldResources;
+ const fontName = this.data.defaultAppearanceData && this.data.defaultAppearanceData.fontName;
- for (let i = 0; i < height; i++) {
- let mask = 0,
- buffer;
-
- for (let j = 0; j < width; j++) {
- if (!mask) {
- mask = 128;
- buffer = bitPacked[k++];
- }
-
- imgData[q++] = buffer & mask ? 0 : 255;
- mask >>= 1;
- }
+ if (!fontName) {
+ return localResources || _primitives.Dict.empty;
}
- return {
- imgData,
- width,
- height
- };
- }
-
- function SimpleSegmentVisitor() {}
-
- SimpleSegmentVisitor.prototype = {
- onPageInformation: function SimpleSegmentVisitor_onPageInformation(info) {
- this.currentPageInfo = info;
- var rowSize = info.width + 7 >> 3;
- var buffer = new Uint8ClampedArray(rowSize * info.height);
+ for (const resources of [localResources, appearanceResources]) {
+ if (resources instanceof _primitives.Dict) {
+ const localFont = resources.get("Font");
- if (info.defaultPixelValue) {
- for (var i = 0, ii = buffer.length; i < ii; i++) {
- buffer[i] = 0xff;
+ if (localFont instanceof _primitives.Dict && localFont.has(fontName)) {
+ return resources;
}
}
+ }
- this.buffer = buffer;
- },
- drawBitmap: function SimpleSegmentVisitor_drawBitmap(regionInfo, bitmap) {
- var pageInfo = this.currentPageInfo;
- var width = regionInfo.width,
- height = regionInfo.height;
- var rowSize = pageInfo.width + 7 >> 3;
- var combinationOperator = pageInfo.combinationOperatorOverride ? regionInfo.combinationOperator : pageInfo.combinationOperator;
- var buffer = this.buffer;
- var mask0 = 128 >> (regionInfo.x & 7);
- var offset0 = regionInfo.y * rowSize + (regionInfo.x >> 3);
- var i, j, mask, offset;
-
- switch (combinationOperator) {
- case 0:
- for (i = 0; i < height; i++) {
- mask = mask0;
- offset = offset0;
-
- for (j = 0; j < width; j++) {
- if (bitmap[i][j]) {
- buffer[offset] |= mask;
- }
-
- mask >>= 1;
-
- if (!mask) {
- mask = 128;
- offset++;
- }
- }
-
- offset0 += rowSize;
- }
-
- break;
-
- case 2:
- for (i = 0; i < height; i++) {
- mask = mask0;
- offset = offset0;
-
- for (j = 0; j < width; j++) {
- if (bitmap[i][j]) {
- buffer[offset] ^= mask;
- }
-
- mask >>= 1;
-
- if (!mask) {
- mask = 128;
- offset++;
- }
- }
-
- offset0 += rowSize;
- }
-
- break;
-
- default:
- throw new Jbig2Error(`operator ${combinationOperator} is not supported`);
- }
- },
- onImmediateGenericRegion: function SimpleSegmentVisitor_onImmediateGenericRegion(region, data, start, end) {
- var regionInfo = region.info;
- var decodingContext = new DecodingContext(data, start, end);
- var bitmap = decodeBitmap(region.mmr, regionInfo.width, regionInfo.height, region.template, region.prediction, null, region.at, decodingContext);
- this.drawBitmap(regionInfo, bitmap);
- },
- onImmediateLosslessGenericRegion: function SimpleSegmentVisitor_onImmediateLosslessGenericRegion() {
- this.onImmediateGenericRegion.apply(this, arguments);
- },
- onSymbolDictionary: function SimpleSegmentVisitor_onSymbolDictionary(dictionary, currentSegment, referredSegments, data, start, end) {
- let huffmanTables, huffmanInput;
-
- if (dictionary.huffman) {
- huffmanTables = getSymbolDictionaryHuffmanTables(dictionary, referredSegments, this.customTables);
- huffmanInput = new Reader(data, start, end);
- }
-
- var symbols = this.symbols;
-
- if (!symbols) {
- this.symbols = symbols = {};
- }
-
- var inputSymbols = [];
-
- for (var i = 0, ii = referredSegments.length; i < ii; i++) {
- const referredSymbols = symbols[referredSegments[i]];
-
- if (referredSymbols) {
- inputSymbols = inputSymbols.concat(referredSymbols);
- }
- }
-
- var decodingContext = new DecodingContext(data, start, end);
- symbols[currentSegment] = decodeSymbolDictionary(dictionary.huffman, dictionary.refinement, inputSymbols, dictionary.numberOfNewSymbols, dictionary.numberOfExportedSymbols, huffmanTables, dictionary.template, dictionary.at, dictionary.refinementTemplate, dictionary.refinementAt, decodingContext, huffmanInput);
- },
- onImmediateTextRegion: function SimpleSegmentVisitor_onImmediateTextRegion(region, referredSegments, data, start, end) {
- var regionInfo = region.info;
- let huffmanTables, huffmanInput;
- var symbols = this.symbols;
- var inputSymbols = [];
-
- for (var i = 0, ii = referredSegments.length; i < ii; i++) {
- const referredSymbols = symbols[referredSegments[i]];
-
- if (referredSymbols) {
- inputSymbols = inputSymbols.concat(referredSymbols);
- }
- }
-
- var symbolCodeLength = (0, _core_utils.log2)(inputSymbols.length);
-
- if (region.huffman) {
- huffmanInput = new Reader(data, start, end);
- huffmanTables = getTextRegionHuffmanTables(region, referredSegments, this.customTables, inputSymbols.length, huffmanInput);
- }
-
- var decodingContext = new DecodingContext(data, start, end);
- var bitmap = decodeTextRegion(region.huffman, region.refinement, regionInfo.width, regionInfo.height, region.defaultPixelValue, region.numberOfSymbolInstances, region.stripSize, inputSymbols, symbolCodeLength, region.transposed, region.dsOffset, region.referenceCorner, region.combinationOperator, huffmanTables, region.refinementTemplate, region.refinementAt, decodingContext, region.logStripSize, huffmanInput);
- this.drawBitmap(regionInfo, bitmap);
- },
- onImmediateLosslessTextRegion: function SimpleSegmentVisitor_onImmediateLosslessTextRegion() {
- this.onImmediateTextRegion.apply(this, arguments);
- },
-
- onPatternDictionary(dictionary, currentSegment, data, start, end) {
- let patterns = this.patterns;
-
- if (!patterns) {
- this.patterns = patterns = {};
- }
-
- const decodingContext = new DecodingContext(data, start, end);
- patterns[currentSegment] = decodePatternDictionary(dictionary.mmr, dictionary.patternWidth, dictionary.patternHeight, dictionary.maxPatternIndex, dictionary.template, decodingContext);
- },
-
- onImmediateHalftoneRegion(region, referredSegments, data, start, end) {
- const patterns = this.patterns[referredSegments[0]];
- const regionInfo = region.info;
- const decodingContext = new DecodingContext(data, start, end);
- const bitmap = decodeHalftoneRegion(region.mmr, patterns, region.template, regionInfo.width, regionInfo.height, region.defaultPixelValue, region.enableSkip, region.combinationOperator, region.gridWidth, region.gridHeight, region.gridOffsetX, region.gridOffsetY, region.gridVectorX, region.gridVectorY, decodingContext);
- this.drawBitmap(regionInfo, bitmap);
- },
-
- onImmediateLosslessHalftoneRegion() {
- this.onImmediateHalftoneRegion.apply(this, arguments);
- },
-
- onTables(currentSegment, data, start, end) {
- let customTables = this.customTables;
+ if (acroFormResources instanceof _primitives.Dict) {
+ const acroFormFont = acroFormResources.get("Font");
- if (!customTables) {
- this.customTables = customTables = {};
+ if (acroFormFont instanceof _primitives.Dict && acroFormFont.has(fontName)) {
+ const subFontDict = new _primitives.Dict(xref);
+ subFontDict.set(fontName, acroFormFont.getRaw(fontName));
+ const subResourcesDict = new _primitives.Dict(xref);
+ subResourcesDict.set("Font", subFontDict);
+ return _primitives.Dict.merge({
+ xref,
+ dictArray: [subResourcesDict, localResources],
+ mergeSubDicts: true
+ });
}
-
- customTables[currentSegment] = decodeTablesSegment(data, start, end);
}
- };
-
- function HuffmanLine(lineData) {
- if (lineData.length === 2) {
- this.isOOB = true;
- this.rangeLow = 0;
- this.prefixLength = lineData[0];
- this.rangeLength = 0;
- this.prefixCode = lineData[1];
- this.isLowerRange = false;
- } else {
- this.isOOB = false;
- this.rangeLow = lineData[0];
- this.prefixLength = lineData[1];
- this.rangeLength = lineData[2];
- this.prefixCode = lineData[3];
- this.isLowerRange = lineData[4] === "lower";
- }
+ return localResources || _primitives.Dict.empty;
}
- function HuffmanTreeNode(line) {
- this.children = [];
-
- if (line) {
- this.isLeaf = true;
- this.rangeLength = line.rangeLength;
- this.rangeLow = line.rangeLow;
- this.isLowerRange = line.isLowerRange;
- this.isOOB = line.isOOB;
- } else {
- this.isLeaf = false;
- }
+ getFieldObject() {
+ return null;
}
- HuffmanTreeNode.prototype = {
- buildTree(line, shift) {
- const bit = line.prefixCode >> shift & 1;
-
- if (shift <= 0) {
- this.children[bit] = new HuffmanTreeNode(line);
- } else {
- let node = this.children[bit];
-
- if (!node) {
- this.children[bit] = node = new HuffmanTreeNode(null);
- }
-
- node.buildTree(line, shift - 1);
- }
- },
-
- decodeNode(reader) {
- if (this.isLeaf) {
- if (this.isOOB) {
- return null;
- }
-
- const htOffset = reader.readBits(this.rangeLength);
- return this.rangeLow + (this.isLowerRange ? -htOffset : htOffset);
- }
-
- const node = this.children[reader.readBit()];
-
- if (!node) {
- throw new Jbig2Error("invalid Huffman data");
- }
-
- return node.decodeNode(reader);
- }
-
- };
-
- function HuffmanTable(lines, prefixCodesDone) {
- if (!prefixCodesDone) {
- this.assignPrefixCodes(lines);
- }
-
- this.rootNode = new HuffmanTreeNode(null);
+}
- for (let i = 0, ii = lines.length; i < ii; i++) {
- const line = lines[i];
+class TextWidgetAnnotation extends WidgetAnnotation {
+ constructor(params) {
+ super(params);
+ this._hasText = true;
+ const dict = params.dict;
- if (line.prefixLength > 0) {
- this.rootNode.buildTree(line, line.prefixLength - 1);
- }
+ if (!(0, _util.isString)(this.data.fieldValue)) {
+ this.data.fieldValue = "";
}
- }
- HuffmanTable.prototype = {
- decode(reader) {
- return this.rootNode.decodeNode(reader);
- },
-
- assignPrefixCodes(lines) {
- const linesLength = lines.length;
- let prefixLengthMax = 0;
-
- for (let i = 0; i < linesLength; i++) {
- prefixLengthMax = Math.max(prefixLengthMax, lines[i].prefixLength);
- }
-
- const histogram = new Uint32Array(prefixLengthMax + 1);
-
- for (let i = 0; i < linesLength; i++) {
- histogram[lines[i].prefixLength]++;
- }
-
- let currentLength = 1,
- firstCode = 0,
- currentCode,
- currentTemp,
- line;
- histogram[0] = 0;
-
- while (currentLength <= prefixLengthMax) {
- firstCode = firstCode + histogram[currentLength - 1] << 1;
- currentCode = firstCode;
- currentTemp = 0;
-
- while (currentTemp < linesLength) {
- line = lines[currentTemp];
-
- if (line.prefixLength === currentLength) {
- line.prefixCode = currentCode;
- currentCode++;
- }
-
- currentTemp++;
- }
+ let alignment = (0, _core_utils.getInheritableProperty)({
+ dict,
+ key: "Q"
+ });
- currentLength++;
- }
+ if (!Number.isInteger(alignment) || alignment < 0 || alignment > 2) {
+ alignment = null;
}
- };
-
- function decodeTablesSegment(data, start, end) {
- const flags = data[start];
- const lowestValue = (0, _core_utils.readUint32)(data, start + 1) & 0xffffffff;
- const highestValue = (0, _core_utils.readUint32)(data, start + 5) & 0xffffffff;
- const reader = new Reader(data, start + 9, end);
- const prefixSizeBits = (flags >> 1 & 7) + 1;
- const rangeSizeBits = (flags >> 4 & 7) + 1;
- const lines = [];
- let prefixLength,
- rangeLength,
- currentRangeLow = lowestValue;
-
- do {
- prefixLength = reader.readBits(prefixSizeBits);
- rangeLength = reader.readBits(rangeSizeBits);
- lines.push(new HuffmanLine([currentRangeLow, prefixLength, rangeLength, 0]));
- currentRangeLow += 1 << rangeLength;
- } while (currentRangeLow < highestValue);
-
- prefixLength = reader.readBits(prefixSizeBits);
- lines.push(new HuffmanLine([lowestValue - 1, prefixLength, 32, 0, "lower"]));
- prefixLength = reader.readBits(prefixSizeBits);
- lines.push(new HuffmanLine([highestValue, prefixLength, 32, 0]));
+ this.data.textAlignment = alignment;
+ let maximumLength = (0, _core_utils.getInheritableProperty)({
+ dict,
+ key: "MaxLen"
+ });
- if (flags & 1) {
- prefixLength = reader.readBits(prefixSizeBits);
- lines.push(new HuffmanLine([prefixLength, 0]));
+ if (!Number.isInteger(maximumLength) || maximumLength < 0) {
+ maximumLength = null;
}
- return new HuffmanTable(lines, false);
+ this.data.maxLen = maximumLength;
+ this.data.multiLine = this.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE);
+ this.data.comb = this.hasFieldFlag(_util.AnnotationFieldFlag.COMB) && !this.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE) && !this.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD) && !this.hasFieldFlag(_util.AnnotationFieldFlag.FILESELECT) && this.data.maxLen !== null;
}
- const standardTablesCache = {};
-
- function getStandardTable(number) {
- let table = standardTablesCache[number];
-
- if (table) {
- return table;
- }
-
- let lines;
-
- switch (number) {
- case 1:
- lines = [[0, 1, 4, 0x0], [16, 2, 8, 0x2], [272, 3, 16, 0x6], [65808, 3, 32, 0x7]];
- break;
-
- case 2:
- lines = [[0, 1, 0, 0x0], [1, 2, 0, 0x2], [2, 3, 0, 0x6], [3, 4, 3, 0xe], [11, 5, 6, 0x1e], [75, 6, 32, 0x3e], [6, 0x3f]];
- break;
-
- case 3:
- lines = [[-256, 8, 8, 0xfe], [0, 1, 0, 0x0], [1, 2, 0, 0x2], [2, 3, 0, 0x6], [3, 4, 3, 0xe], [11, 5, 6, 0x1e], [-257, 8, 32, 0xff, "lower"], [75, 7, 32, 0x7e], [6, 0x3e]];
- break;
-
- case 4:
- lines = [[1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 0, 0x6], [4, 4, 3, 0xe], [12, 5, 6, 0x1e], [76, 5, 32, 0x1f]];
- break;
-
- case 5:
- lines = [[-255, 7, 8, 0x7e], [1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 0, 0x6], [4, 4, 3, 0xe], [12, 5, 6, 0x1e], [-256, 7, 32, 0x7f, "lower"], [76, 6, 32, 0x3e]];
- break;
-
- case 6:
- lines = [[-2048, 5, 10, 0x1c], [-1024, 4, 9, 0x8], [-512, 4, 8, 0x9], [-256, 4, 7, 0xa], [-128, 5, 6, 0x1d], [-64, 5, 5, 0x1e], [-32, 4, 5, 0xb], [0, 2, 7, 0x0], [128, 3, 7, 0x2], [256, 3, 8, 0x3], [512, 4, 9, 0xc], [1024, 4, 10, 0xd], [-2049, 6, 32, 0x3e, "lower"], [2048, 6, 32, 0x3f]];
- break;
-
- case 7:
- lines = [[-1024, 4, 9, 0x8], [-512, 3, 8, 0x0], [-256, 4, 7, 0x9], [-128, 5, 6, 0x1a], [-64, 5, 5, 0x1b], [-32, 4, 5, 0xa], [0, 4, 5, 0xb], [32, 5, 5, 0x1c], [64, 5, 6, 0x1d], [128, 4, 7, 0xc], [256, 3, 8, 0x1], [512, 3, 9, 0x2], [1024, 3, 10, 0x3], [-1025, 5, 32, 0x1e, "lower"], [2048, 5, 32, 0x1f]];
- break;
-
- case 8:
- lines = [[-15, 8, 3, 0xfc], [-7, 9, 1, 0x1fc], [-5, 8, 1, 0xfd], [-3, 9, 0, 0x1fd], [-2, 7, 0, 0x7c], [-1, 4, 0, 0xa], [0, 2, 1, 0x0], [2, 5, 0, 0x1a], [3, 6, 0, 0x3a], [4, 3, 4, 0x4], [20, 6, 1, 0x3b], [22, 4, 4, 0xb], [38, 4, 5, 0xc], [70, 5, 6, 0x1b], [134, 5, 7, 0x1c], [262, 6, 7, 0x3c], [390, 7, 8, 0x7d], [646, 6, 10, 0x3d], [-16, 9, 32, 0x1fe, "lower"], [1670, 9, 32, 0x1ff], [2, 0x1]];
- break;
-
- case 9:
- lines = [[-31, 8, 4, 0xfc], [-15, 9, 2, 0x1fc], [-11, 8, 2, 0xfd], [-7, 9, 1, 0x1fd], [-5, 7, 1, 0x7c], [-3, 4, 1, 0xa], [-1, 3, 1, 0x2], [1, 3, 1, 0x3], [3, 5, 1, 0x1a], [5, 6, 1, 0x3a], [7, 3, 5, 0x4], [39, 6, 2, 0x3b], [43, 4, 5, 0xb], [75, 4, 6, 0xc], [139, 5, 7, 0x1b], [267, 5, 8, 0x1c], [523, 6, 8, 0x3c], [779, 7, 9, 0x7d], [1291, 6, 11, 0x3d], [-32, 9, 32, 0x1fe, "lower"], [3339, 9, 32, 0x1ff], [2, 0x0]];
- break;
-
- case 10:
- lines = [[-21, 7, 4, 0x7a], [-5, 8, 0, 0xfc], [-4, 7, 0, 0x7b], [-3, 5, 0, 0x18], [-2, 2, 2, 0x0], [2, 5, 0, 0x19], [3, 6, 0, 0x36], [4, 7, 0, 0x7c], [5, 8, 0, 0xfd], [6, 2, 6, 0x1], [70, 5, 5, 0x1a], [102, 6, 5, 0x37], [134, 6, 6, 0x38], [198, 6, 7, 0x39], [326, 6, 8, 0x3a], [582, 6, 9, 0x3b], [1094, 6, 10, 0x3c], [2118, 7, 11, 0x7d], [-22, 8, 32, 0xfe, "lower"], [4166, 8, 32, 0xff], [2, 0x2]];
- break;
-
- case 11:
- lines = [[1, 1, 0, 0x0], [2, 2, 1, 0x2], [4, 4, 0, 0xc], [5, 4, 1, 0xd], [7, 5, 1, 0x1c], [9, 5, 2, 0x1d], [13, 6, 2, 0x3c], [17, 7, 2, 0x7a], [21, 7, 3, 0x7b], [29, 7, 4, 0x7c], [45, 7, 5, 0x7d], [77, 7, 6, 0x7e], [141, 7, 32, 0x7f]];
- break;
-
- case 12:
- lines = [[1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 1, 0x6], [5, 5, 0, 0x1c], [6, 5, 1, 0x1d], [8, 6, 1, 0x3c], [10, 7, 0, 0x7a], [11, 7, 1, 0x7b], [13, 7, 2, 0x7c], [17, 7, 3, 0x7d], [25, 7, 4, 0x7e], [41, 8, 5, 0xfe], [73, 8, 32, 0xff]];
- break;
-
- case 13:
- lines = [[1, 1, 0, 0x0], [2, 3, 0, 0x4], [3, 4, 0, 0xc], [4, 5, 0, 0x1c], [5, 4, 1, 0xd], [7, 3, 3, 0x5], [15, 6, 1, 0x3a], [17, 6, 2, 0x3b], [21, 6, 3, 0x3c], [29, 6, 4, 0x3d], [45, 6, 5, 0x3e], [77, 7, 6, 0x7e], [141, 7, 32, 0x7f]];
- break;
-
- case 14:
- lines = [[-2, 3, 0, 0x4], [-1, 3, 0, 0x5], [0, 1, 0, 0x0], [1, 3, 0, 0x6], [2, 3, 0, 0x7]];
- break;
-
- case 15:
- lines = [[-24, 7, 4, 0x7c], [-8, 6, 2, 0x3c], [-4, 5, 1, 0x1c], [-2, 4, 0, 0xc], [-1, 3, 0, 0x4], [0, 1, 0, 0x0], [1, 3, 0, 0x5], [2, 4, 0, 0xd], [3, 5, 1, 0x1d], [5, 6, 2, 0x3d], [9, 7, 4, 0x7d], [-25, 7, 32, 0x7e, "lower"], [25, 7, 32, 0x7f]];
- break;
-
- default:
- throw new Jbig2Error(`standard table B.${number} does not exist`);
- }
+ _getCombAppearance(defaultAppearance, font, text, width, hPadding, vPadding) {
+ const combWidth = (width / this.data.maxLen).toFixed(2);
+ const buf = [];
+ const positions = font.getCharPositions(text);
- for (let i = 0, ii = lines.length; i < ii; i++) {
- lines[i] = new HuffmanLine(lines[i]);
+ for (const [start, end] of positions) {
+ buf.push(`(${(0, _util.escapeString)(text.substring(start, end))}) Tj`);
}
- table = new HuffmanTable(lines, true);
- standardTablesCache[number] = table;
- return table;
- }
-
- function Reader(data, start, end) {
- this.data = data;
- this.start = start;
- this.end = end;
- this.position = start;
- this.shift = -1;
- this.currentByte = 0;
+ const renderedComb = buf.join(` ${combWidth} 0 Td `);
+ return "/Tx BMC q BT " + defaultAppearance + ` 1 0 0 1 ${hPadding} ${vPadding} Tm ${renderedComb}` + " ET Q EMC";
}
- Reader.prototype = {
- readBit() {
- if (this.shift < 0) {
- if (this.position >= this.end) {
- throw new Jbig2Error("end of data while reading bit");
- }
-
- this.currentByte = this.data[this.position++];
- this.shift = 7;
- }
-
- const bit = this.currentByte >> this.shift & 1;
- this.shift--;
- return bit;
- },
-
- readBits(numBits) {
- let result = 0,
- i;
-
- for (i = numBits - 1; i >= 0; i--) {
- result |= this.readBit() << i;
- }
-
- return result;
- },
-
- byteAlign() {
- this.shift = -1;
- },
-
- next() {
- if (this.position >= this.end) {
- return -1;
- }
-
- return this.data[this.position++];
- }
-
- };
-
- function getCustomHuffmanTable(index, referredTo, customTables) {
- let currentIndex = 0;
-
- for (let i = 0, ii = referredTo.length; i < ii; i++) {
- const table = customTables[referredTo[i]];
+ _getMultilineAppearance(defaultAppearance, text, font, fontSize, width, height, alignment, hPadding, vPadding) {
+ const lines = text.split(/\r\n|\r|\n/);
+ const buf = [];
+ const totalWidth = width - 2 * hPadding;
- if (table) {
- if (index === currentIndex) {
- return table;
- }
+ for (const line of lines) {
+ const chunks = this._splitLine(line, font, fontSize, totalWidth);
- currentIndex++;
+ for (const chunk of chunks) {
+ const padding = buf.length === 0 ? hPadding : 0;
+ buf.push(this._renderText(chunk, font, fontSize, width, alignment, padding, -fontSize));
}
}
- throw new Jbig2Error("can't find custom Huffman table");
+ const renderedText = buf.join("\n");
+ return "/Tx BMC q BT " + defaultAppearance + ` 1 0 0 1 0 ${height} Tm ${renderedText}` + " ET Q EMC";
}
- function getTextRegionHuffmanTables(textRegion, referredTo, customTables, numberOfSymbols, reader) {
- const codes = [];
+ _splitLine(line, font, fontSize, width) {
+ line = font.encodeString(line).join("");
+ const glyphs = font.charsToGlyphs(line);
- for (let i = 0; i <= 34; i++) {
- const codeLength = reader.readBits(4);
- codes.push(new HuffmanLine([i, codeLength, 0, 0]));
+ if (glyphs.length <= 1) {
+ return [line];
}
- const runCodesTable = new HuffmanTable(codes, false);
- codes.length = 0;
-
- for (let i = 0; i < numberOfSymbols;) {
- const codeLength = runCodesTable.decode(reader);
-
- if (codeLength >= 32) {
- let repeatedLength, numberOfRepeats, j;
-
- switch (codeLength) {
- case 32:
- if (i === 0) {
- throw new Jbig2Error("no previous value in symbol ID table");
- }
-
- numberOfRepeats = reader.readBits(2) + 3;
- repeatedLength = codes[i - 1].prefixLength;
- break;
-
- case 33:
- numberOfRepeats = reader.readBits(3) + 3;
- repeatedLength = 0;
- break;
-
- case 34:
- numberOfRepeats = reader.readBits(7) + 11;
- repeatedLength = 0;
- break;
-
- default:
- throw new Jbig2Error("invalid code length in symbol ID table");
- }
+ const positions = font.getCharPositions(line);
+ const scale = fontSize / 1000;
+ const chunks = [];
+ let lastSpacePosInStringStart = -1,
+ lastSpacePosInStringEnd = -1,
+ lastSpacePos = -1,
+ startChunk = 0,
+ currentWidth = 0;
- for (j = 0; j < numberOfRepeats; j++) {
- codes.push(new HuffmanLine([i, repeatedLength, 0, 0]));
- i++;
+ for (let i = 0, ii = glyphs.length; i < ii; i++) {
+ const [start, end] = positions[i];
+ const glyph = glyphs[i];
+ const glyphWidth = glyph.width * scale;
+
+ if (glyph.unicode === " ") {
+ if (currentWidth + glyphWidth > width) {
+ chunks.push(line.substring(startChunk, start));
+ startChunk = start;
+ currentWidth = glyphWidth;
+ lastSpacePosInStringStart = -1;
+ lastSpacePos = -1;
+ } else {
+ currentWidth += glyphWidth;
+ lastSpacePosInStringStart = start;
+ lastSpacePosInStringEnd = end;
+ lastSpacePos = i;
}
} else {
- codes.push(new HuffmanLine([i, codeLength, 0, 0]));
- i++;
+ if (currentWidth + glyphWidth > width) {
+ if (lastSpacePosInStringStart !== -1) {
+ chunks.push(line.substring(startChunk, lastSpacePosInStringEnd));
+ startChunk = lastSpacePosInStringEnd;
+ i = lastSpacePos + 1;
+ lastSpacePosInStringStart = -1;
+ currentWidth = 0;
+ } else {
+ chunks.push(line.substring(startChunk, start));
+ startChunk = start;
+ currentWidth = glyphWidth;
+ }
+ } else {
+ currentWidth += glyphWidth;
+ }
}
}
- reader.byteAlign();
- const symbolIDTable = new HuffmanTable(codes, false);
- let customIndex = 0,
- tableFirstS,
- tableDeltaS,
- tableDeltaT;
-
- switch (textRegion.huffmanFS) {
- case 0:
- case 1:
- tableFirstS = getStandardTable(textRegion.huffmanFS + 6);
- break;
-
- case 3:
- tableFirstS = getCustomHuffmanTable(customIndex, referredTo, customTables);
- customIndex++;
- break;
-
- default:
- throw new Jbig2Error("invalid Huffman FS selector");
- }
-
- switch (textRegion.huffmanDS) {
- case 0:
- case 1:
- case 2:
- tableDeltaS = getStandardTable(textRegion.huffmanDS + 8);
- break;
-
- case 3:
- tableDeltaS = getCustomHuffmanTable(customIndex, referredTo, customTables);
- customIndex++;
- break;
-
- default:
- throw new Jbig2Error("invalid Huffman DS selector");
- }
-
- switch (textRegion.huffmanDT) {
- case 0:
- case 1:
- case 2:
- tableDeltaT = getStandardTable(textRegion.huffmanDT + 11);
- break;
-
- case 3:
- tableDeltaT = getCustomHuffmanTable(customIndex, referredTo, customTables);
- customIndex++;
- break;
-
- default:
- throw new Jbig2Error("invalid Huffman DT selector");
- }
-
- if (textRegion.refinement) {
- throw new Jbig2Error("refinement with Huffman is not supported");
+ if (startChunk < line.length) {
+ chunks.push(line.substring(startChunk, line.length));
}
- return {
- symbolIDTable,
- tableFirstS,
- tableDeltaS,
- tableDeltaT
- };
+ return chunks;
}
- function getSymbolDictionaryHuffmanTables(dictionary, referredTo, customTables) {
- let customIndex = 0,
- tableDeltaHeight,
- tableDeltaWidth;
-
- switch (dictionary.huffmanDHSelector) {
- case 0:
- case 1:
- tableDeltaHeight = getStandardTable(dictionary.huffmanDHSelector + 4);
- break;
-
- case 3:
- tableDeltaHeight = getCustomHuffmanTable(customIndex, referredTo, customTables);
- customIndex++;
- break;
-
- default:
- throw new Jbig2Error("invalid Huffman DH selector");
- }
-
- switch (dictionary.huffmanDWSelector) {
- case 0:
- case 1:
- tableDeltaWidth = getStandardTable(dictionary.huffmanDWSelector + 2);
- break;
-
- case 3:
- tableDeltaWidth = getCustomHuffmanTable(customIndex, referredTo, customTables);
- customIndex++;
- break;
-
- default:
- throw new Jbig2Error("invalid Huffman DW selector");
- }
-
- let tableBitmapSize, tableAggregateInstances;
-
- if (dictionary.bitmapSizeSelector) {
- tableBitmapSize = getCustomHuffmanTable(customIndex, referredTo, customTables);
- customIndex++;
- } else {
- tableBitmapSize = getStandardTable(1);
- }
-
- if (dictionary.aggregationInstancesSelector) {
- tableAggregateInstances = getCustomHuffmanTable(customIndex, referredTo, customTables);
- } else {
- tableAggregateInstances = getStandardTable(1);
- }
-
+ getFieldObject() {
return {
- tableDeltaHeight,
- tableDeltaWidth,
- tableBitmapSize,
- tableAggregateInstances
+ id: this.data.id,
+ value: this.data.fieldValue,
+ defaultValue: this.data.defaultFieldValue,
+ multiline: this.data.multiLine,
+ password: this.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD),
+ charLimit: this.data.maxLen,
+ comb: this.data.comb,
+ editable: !this.data.readOnly,
+ hidden: this.data.hidden,
+ name: this.data.fieldName,
+ rect: this.data.rect,
+ actions: this.data.actions,
+ page: this.data.pageIndex,
+ type: "text"
};
}
- function readUncompressedBitmap(reader, width, height) {
- const bitmap = [];
-
- for (let y = 0; y < height; y++) {
- const row = new Uint8Array(width);
- bitmap.push(row);
-
- for (let x = 0; x < width; x++) {
- row[x] = reader.readBit();
- }
-
- reader.byteAlign();
- }
-
- return bitmap;
- }
-
- function decodeMMRBitmap(input, width, height, endOfBlock) {
- const params = {
- K: -1,
- Columns: width,
- Rows: height,
- BlackIs1: true,
- EndOfBlock: endOfBlock
- };
- const decoder = new _ccitt.CCITTFaxDecoder(input, params);
- const bitmap = [];
- let currentByte,
- eof = false;
-
- for (let y = 0; y < height; y++) {
- const row = new Uint8Array(width);
- bitmap.push(row);
- let shift = -1;
-
- for (let x = 0; x < width; x++) {
- if (shift < 0) {
- currentByte = decoder.readNextChar();
-
- if (currentByte === -1) {
- currentByte = 0;
- eof = true;
- }
-
- shift = 7;
- }
-
- row[x] = currentByte >> shift & 1;
- shift--;
- }
- }
+}
- if (endOfBlock && !eof) {
- const lookForEOFLimit = 5;
+class ButtonWidgetAnnotation extends WidgetAnnotation {
+ constructor(params) {
+ super(params);
+ this.checkedAppearance = null;
+ this.uncheckedAppearance = null;
+ this.data.checkBox = !this.hasFieldFlag(_util.AnnotationFieldFlag.RADIO) && !this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON);
+ this.data.radioButton = this.hasFieldFlag(_util.AnnotationFieldFlag.RADIO) && !this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON);
+ this.data.pushButton = this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON);
+ this.data.isTooltipOnly = false;
- for (let i = 0; i < lookForEOFLimit; i++) {
- if (decoder.readNextChar() === -1) {
- break;
- }
- }
+ if (this.data.checkBox) {
+ this._processCheckBox(params);
+ } else if (this.data.radioButton) {
+ this._processRadioButton(params);
+ } else if (this.data.pushButton) {
+ this._processPushButton(params);
+ } else {
+ (0, _util.warn)("Invalid field flags for button widget annotation");
}
-
- return bitmap;
}
- function Jbig2Image() {}
-
- Jbig2Image.prototype = {
- parseChunks(chunks) {
- return parseJbig2Chunks(chunks);
- },
-
- parse(data) {
- const {
- imgData,
- width,
- height
- } = parseJbig2(data);
- this.width = width;
- this.height = height;
- return imgData;
+ getOperatorList(evaluator, task, renderForms, annotationStorage) {
+ if (this.data.pushButton) {
+ return super.getOperatorList(evaluator, task, false, annotationStorage);
}
- };
- return Jbig2Image;
-}();
-
-exports.Jbig2Image = Jbig2Image;
-
-/***/ }),
-/* 17 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.ArithmeticDecoder = void 0;
-const QeTable = [{
- qe: 0x5601,
- nmps: 1,
- nlps: 1,
- switchFlag: 1
-}, {
- qe: 0x3401,
- nmps: 2,
- nlps: 6,
- switchFlag: 0
-}, {
- qe: 0x1801,
- nmps: 3,
- nlps: 9,
- switchFlag: 0
-}, {
- qe: 0x0ac1,
- nmps: 4,
- nlps: 12,
- switchFlag: 0
-}, {
- qe: 0x0521,
- nmps: 5,
- nlps: 29,
- switchFlag: 0
-}, {
- qe: 0x0221,
- nmps: 38,
- nlps: 33,
- switchFlag: 0
-}, {
- qe: 0x5601,
- nmps: 7,
- nlps: 6,
- switchFlag: 1
-}, {
- qe: 0x5401,
- nmps: 8,
- nlps: 14,
- switchFlag: 0
-}, {
- qe: 0x4801,
- nmps: 9,
- nlps: 14,
- switchFlag: 0
-}, {
- qe: 0x3801,
- nmps: 10,
- nlps: 14,
- switchFlag: 0
-}, {
- qe: 0x3001,
- nmps: 11,
- nlps: 17,
- switchFlag: 0
-}, {
- qe: 0x2401,
- nmps: 12,
- nlps: 18,
- switchFlag: 0
-}, {
- qe: 0x1c01,
- nmps: 13,
- nlps: 20,
- switchFlag: 0
-}, {
- qe: 0x1601,
- nmps: 29,
- nlps: 21,
- switchFlag: 0
-}, {
- qe: 0x5601,
- nmps: 15,
- nlps: 14,
- switchFlag: 1
-}, {
- qe: 0x5401,
- nmps: 16,
- nlps: 14,
- switchFlag: 0
-}, {
- qe: 0x5101,
- nmps: 17,
- nlps: 15,
- switchFlag: 0
-}, {
- qe: 0x4801,
- nmps: 18,
- nlps: 16,
- switchFlag: 0
-}, {
- qe: 0x3801,
- nmps: 19,
- nlps: 17,
- switchFlag: 0
-}, {
- qe: 0x3401,
- nmps: 20,
- nlps: 18,
- switchFlag: 0
-}, {
- qe: 0x3001,
- nmps: 21,
- nlps: 19,
- switchFlag: 0
-}, {
- qe: 0x2801,
- nmps: 22,
- nlps: 19,
- switchFlag: 0
-}, {
- qe: 0x2401,
- nmps: 23,
- nlps: 20,
- switchFlag: 0
-}, {
- qe: 0x2201,
- nmps: 24,
- nlps: 21,
- switchFlag: 0
-}, {
- qe: 0x1c01,
- nmps: 25,
- nlps: 22,
- switchFlag: 0
-}, {
- qe: 0x1801,
- nmps: 26,
- nlps: 23,
- switchFlag: 0
-}, {
- qe: 0x1601,
- nmps: 27,
- nlps: 24,
- switchFlag: 0
-}, {
- qe: 0x1401,
- nmps: 28,
- nlps: 25,
- switchFlag: 0
-}, {
- qe: 0x1201,
- nmps: 29,
- nlps: 26,
- switchFlag: 0
-}, {
- qe: 0x1101,
- nmps: 30,
- nlps: 27,
- switchFlag: 0
-}, {
- qe: 0x0ac1,
- nmps: 31,
- nlps: 28,
- switchFlag: 0
-}, {
- qe: 0x09c1,
- nmps: 32,
- nlps: 29,
- switchFlag: 0
-}, {
- qe: 0x08a1,
- nmps: 33,
- nlps: 30,
- switchFlag: 0
-}, {
- qe: 0x0521,
- nmps: 34,
- nlps: 31,
- switchFlag: 0
-}, {
- qe: 0x0441,
- nmps: 35,
- nlps: 32,
- switchFlag: 0
-}, {
- qe: 0x02a1,
- nmps: 36,
- nlps: 33,
- switchFlag: 0
-}, {
- qe: 0x0221,
- nmps: 37,
- nlps: 34,
- switchFlag: 0
-}, {
- qe: 0x0141,
- nmps: 38,
- nlps: 35,
- switchFlag: 0
-}, {
- qe: 0x0111,
- nmps: 39,
- nlps: 36,
- switchFlag: 0
-}, {
- qe: 0x0085,
- nmps: 40,
- nlps: 37,
- switchFlag: 0
-}, {
- qe: 0x0049,
- nmps: 41,
- nlps: 38,
- switchFlag: 0
-}, {
- qe: 0x0025,
- nmps: 42,
- nlps: 39,
- switchFlag: 0
-}, {
- qe: 0x0015,
- nmps: 43,
- nlps: 40,
- switchFlag: 0
-}, {
- qe: 0x0009,
- nmps: 44,
- nlps: 41,
- switchFlag: 0
-}, {
- qe: 0x0005,
- nmps: 45,
- nlps: 42,
- switchFlag: 0
-}, {
- qe: 0x0001,
- nmps: 45,
- nlps: 43,
- switchFlag: 0
-}, {
- qe: 0x5601,
- nmps: 46,
- nlps: 46,
- switchFlag: 0
-}];
-
-class ArithmeticDecoder {
- constructor(data, start, end) {
- this.data = data;
- this.bp = start;
- this.dataEnd = end;
- this.chigh = data[start];
- this.clow = 0;
- this.byteIn();
- this.chigh = this.chigh << 7 & 0xffff | this.clow >> 9 & 0x7f;
- this.clow = this.clow << 7 & 0xffff;
- this.ct -= 7;
- this.a = 0x8000;
- }
-
- byteIn() {
- const data = this.data;
- let bp = this.bp;
+ if (annotationStorage) {
+ const storageEntry = annotationStorage.get(this.data.id);
+ const value = storageEntry && storageEntry.value;
- if (data[bp] === 0xff) {
- if (data[bp + 1] > 0x8f) {
- this.clow += 0xff00;
- this.ct = 8;
- } else {
- bp++;
- this.clow += data[bp] << 9;
- this.ct = 7;
- this.bp = bp;
+ if (value === undefined) {
+ return super.getOperatorList(evaluator, task, renderForms, annotationStorage);
}
- } else {
- bp++;
- this.clow += bp < this.dataEnd ? data[bp] << 8 : 0xff00;
- this.ct = 8;
- this.bp = bp;
- }
- if (this.clow > 0xffff) {
- this.chigh += this.clow >> 16;
- this.clow &= 0xffff;
- }
- }
-
- readBit(contexts, pos) {
- let cx_index = contexts[pos] >> 1,
- cx_mps = contexts[pos] & 1;
- const qeTableIcx = QeTable[cx_index];
- const qeIcx = qeTableIcx.qe;
- let d;
- let a = this.a - qeIcx;
+ let appearance;
- if (this.chigh < qeIcx) {
- if (a < qeIcx) {
- a = qeIcx;
- d = cx_mps;
- cx_index = qeTableIcx.nmps;
+ if (value) {
+ appearance = this.checkedAppearance;
} else {
- a = qeIcx;
- d = 1 ^ cx_mps;
-
- if (qeTableIcx.switchFlag === 1) {
- cx_mps = d;
- }
-
- cx_index = qeTableIcx.nlps;
+ appearance = this.uncheckedAppearance;
}
- } else {
- this.chigh -= qeIcx;
- if ((a & 0x8000) !== 0) {
- this.a = a;
- return cx_mps;
+ if (appearance) {
+ const savedAppearance = this.appearance;
+ this.appearance = appearance;
+ const operatorList = super.getOperatorList(evaluator, task, renderForms, annotationStorage);
+ this.appearance = savedAppearance;
+ return operatorList;
}
- if (a < qeIcx) {
- d = 1 ^ cx_mps;
-
- if (qeTableIcx.switchFlag === 1) {
- cx_mps = d;
- }
-
- cx_index = qeTableIcx.nlps;
- } else {
- d = cx_mps;
- cx_index = qeTableIcx.nmps;
- }
+ return Promise.resolve(new _operator_list.OperatorList());
}
- do {
- if (this.ct === 0) {
- this.byteIn();
- }
-
- a <<= 1;
- this.chigh = this.chigh << 1 & 0xffff | this.clow >> 15 & 1;
- this.clow = this.clow << 1 & 0xffff;
- this.ct--;
- } while ((a & 0x8000) === 0);
-
- this.a = a;
- contexts[pos] = cx_index << 1 | cx_mps;
- return d;
+ return super.getOperatorList(evaluator, task, renderForms, annotationStorage);
}
-}
-
-exports.ArithmeticDecoder = ArithmeticDecoder;
-
-/***/ }),
-/* 18 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.JpegStream = void 0;
-
-var _stream = __w_pdfjs_require__(12);
-
-var _primitives = __w_pdfjs_require__(5);
-
-var _jpg = __w_pdfjs_require__(19);
-
-var _util = __w_pdfjs_require__(2);
-
-const JpegStream = function JpegStreamClosure() {
- function JpegStream(stream, maybeLength, dict, params) {
- let ch;
-
- while ((ch = stream.getByte()) !== -1) {
- if (ch === 0xff) {
- stream.skip(-1);
- break;
- }
+ async save(evaluator, task, annotationStorage) {
+ if (this.data.checkBox) {
+ return this._saveCheckbox(evaluator, task, annotationStorage);
}
- this.stream = stream;
- this.maybeLength = maybeLength;
- this.dict = dict;
- this.params = params;
+ if (this.data.radioButton) {
+ return this._saveRadioButton(evaluator, task, annotationStorage);
+ }
- _stream.DecodeStream.call(this, maybeLength);
+ return null;
}
- JpegStream.prototype = Object.create(_stream.DecodeStream.prototype);
- Object.defineProperty(JpegStream.prototype, "bytes", {
- get: function JpegStream_bytes() {
- return (0, _util.shadow)(this, "bytes", this.stream.getBytes(this.maybeLength));
- },
- configurable: true
- });
-
- JpegStream.prototype.ensureBuffer = function (requested) {};
-
- JpegStream.prototype.readBlock = function () {
- if (this.eof) {
- return;
+ async _saveCheckbox(evaluator, task, annotationStorage) {
+ if (!annotationStorage) {
+ return null;
}
- const jpegOptions = {
- decodeTransform: undefined,
- colorTransform: undefined
- };
- const decodeArr = this.dict.getArray("Decode", "D");
-
- if (this.forceRGB && Array.isArray(decodeArr)) {
- const bitsPerComponent = this.dict.get("BitsPerComponent") || 8;
- const decodeArrLength = decodeArr.length;
- const transform = new Int32Array(decodeArrLength);
- let transformNeeded = false;
- const maxValue = (1 << bitsPerComponent) - 1;
-
- for (let i = 0; i < decodeArrLength; i += 2) {
- transform[i] = (decodeArr[i + 1] - decodeArr[i]) * 256 | 0;
- transform[i + 1] = decodeArr[i] * maxValue | 0;
-
- if (transform[i] !== 256 || transform[i + 1] !== 0) {
- transformNeeded = true;
- }
- }
+ const storageEntry = annotationStorage.get(this.data.id);
+ const value = storageEntry && storageEntry.value;
- if (transformNeeded) {
- jpegOptions.decodeTransform = transform;
- }
+ if (value === undefined) {
+ return null;
}
- if ((0, _primitives.isDict)(this.params)) {
- const colorTransform = this.params.get("ColorTransform");
+ const defaultValue = this.data.fieldValue && this.data.fieldValue !== "Off";
- if (Number.isInteger(colorTransform)) {
- jpegOptions.colorTransform = colorTransform;
- }
+ if (defaultValue === value) {
+ return null;
}
- const jpegImage = new _jpg.JpegImage(jpegOptions);
- jpegImage.parse(this.bytes);
- const data = jpegImage.getData({
- width: this.drawWidth,
- height: this.drawHeight,
- forceRGB: this.forceRGB,
- isSourcePDF: true
- });
- this.buffer = data;
- this.bufferLength = data.length;
- this.eof = true;
- };
-
- return JpegStream;
-}();
-
-exports.JpegStream = JpegStream;
-
-/***/ }),
-/* 19 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.JpegImage = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var _core_utils = __w_pdfjs_require__(8);
-
-class JpegError extends _util.BaseException {
- constructor(msg) {
- super(`JPEG error: ${msg}`);
- }
-
-}
-
-class DNLMarkerError extends _util.BaseException {
- constructor(message, scanLines) {
- super(message);
- this.scanLines = scanLines;
- }
-
-}
-
-class EOIMarkerError extends _util.BaseException {}
-
-var JpegImage = function JpegImageClosure() {
- var dctZigZag = new Uint8Array([0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63]);
- var dctCos1 = 4017;
- var dctSin1 = 799;
- var dctCos3 = 3406;
- var dctSin3 = 2276;
- var dctCos6 = 1567;
- var dctSin6 = 3784;
- var dctSqrt2 = 5793;
- var dctSqrt1d2 = 2896;
-
- function JpegImage({
- decodeTransform = null,
- colorTransform = -1
- } = {}) {
- this._decodeTransform = decodeTransform;
- this._colorTransform = colorTransform;
- }
-
- function buildHuffmanTable(codeLengths, values) {
- var k = 0,
- code = [],
- i,
- j,
- length = 16;
+ const dict = evaluator.xref.fetchIfRef(this.ref);
- while (length > 0 && !codeLengths[length - 1]) {
- length--;
+ if (!(0, _primitives.isDict)(dict)) {
+ return null;
}
- code.push({
- children: [],
- index: 0
- });
- var p = code[0],
- q;
-
- for (i = 0; i < length; i++) {
- for (j = 0; j < codeLengths[i]; j++) {
- p = code.pop();
- p.children[p.index] = values[k];
-
- while (p.index > 0) {
- p = code.pop();
- }
-
- p.index++;
- code.push(p);
+ const xfa = {
+ path: (0, _util.stringToPDFString)(dict.get("T") || ""),
+ value: value ? this.data.exportValue : ""
+ };
- while (code.length <= i) {
- code.push(q = {
- children: [],
- index: 0
- });
- p.children[p.index] = q.children;
- p = q;
- }
+ const name = _primitives.Name.get(value ? this.data.exportValue : "Off");
- k++;
- }
+ dict.set("V", name);
+ dict.set("AS", name);
+ dict.set("M", `D:${(0, _util.getModificationDate)()}`);
+ const encrypt = evaluator.xref.encrypt;
+ let originalTransform = null;
- if (i + 1 < length) {
- code.push(q = {
- children: [],
- index: 0
- });
- p.children[p.index] = q.children;
- p = q;
- }
+ if (encrypt) {
+ originalTransform = encrypt.createCipherTransform(this.ref.num, this.ref.gen);
}
- return code[0].children;
- }
-
- function getBlockBufferOffset(component, row, col) {
- return 64 * ((component.blocksPerLine + 1) * row + col);
+ const buffer = [`${this.ref.num} ${this.ref.gen} obj\n`];
+ (0, _writer.writeDict)(dict, buffer, originalTransform);
+ buffer.push("\nendobj\n");
+ return [{
+ ref: this.ref,
+ data: buffer.join(""),
+ xfa
+ }];
}
- function decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successivePrev, successive, parseDNLMarker = false) {
- var mcusPerLine = frame.mcusPerLine;
- var progressive = frame.progressive;
- const startOffset = offset;
- let bitsData = 0,
- bitsCount = 0;
-
- function readBit() {
- if (bitsCount > 0) {
- bitsCount--;
- return bitsData >> bitsCount & 1;
- }
-
- bitsData = data[offset++];
-
- if (bitsData === 0xff) {
- var nextByte = data[offset++];
-
- if (nextByte) {
- if (nextByte === 0xdc && parseDNLMarker) {
- offset += 2;
- const scanLines = (0, _core_utils.readUint16)(data, offset);
- offset += 2;
-
- if (scanLines > 0 && scanLines !== frame.scanLines) {
- throw new DNLMarkerError("Found DNL marker (0xFFDC) while parsing scan data", scanLines);
- }
- } else if (nextByte === 0xd9) {
- if (parseDNLMarker) {
- const maybeScanLines = blockRow * (frame.precision === 8 ? 8 : 0);
-
- if (maybeScanLines > 0 && Math.round(frame.scanLines / maybeScanLines) >= 10) {
- throw new DNLMarkerError("Found EOI marker (0xFFD9) while parsing scan data, " + "possibly caused by incorrect `scanLines` parameter", maybeScanLines);
- }
- }
-
- throw new EOIMarkerError("Found EOI marker (0xFFD9) while parsing scan data");
- }
-
- throw new JpegError(`unexpected marker ${(bitsData << 8 | nextByte).toString(16)}`);
- }
- }
-
- bitsCount = 7;
- return bitsData >>> 7;
- }
-
- function decodeHuffman(tree) {
- var node = tree;
-
- while (true) {
- node = node[readBit()];
-
- switch (typeof node) {
- case "number":
- return node;
-
- case "object":
- continue;
- }
-
- throw new JpegError("invalid huffman sequence");
- }
- }
-
- function receive(length) {
- var n = 0;
-
- while (length > 0) {
- n = n << 1 | readBit();
- length--;
- }
-
- return n;
- }
-
- function receiveAndExtend(length) {
- if (length === 1) {
- return readBit() === 1 ? 1 : -1;
- }
-
- var n = receive(length);
-
- if (n >= 1 << length - 1) {
- return n;
- }
-
- return n + (-1 << length) + 1;
+ async _saveRadioButton(evaluator, task, annotationStorage) {
+ if (!annotationStorage) {
+ return null;
}
- function decodeBaseline(component, blockOffset) {
- var t = decodeHuffman(component.huffmanTableDC);
- var diff = t === 0 ? 0 : receiveAndExtend(t);
- component.blockData[blockOffset] = component.pred += diff;
- var k = 1;
-
- while (k < 64) {
- var rs = decodeHuffman(component.huffmanTableAC);
- var s = rs & 15,
- r = rs >> 4;
-
- if (s === 0) {
- if (r < 15) {
- break;
- }
-
- k += 16;
- continue;
- }
+ const storageEntry = annotationStorage.get(this.data.id);
+ const value = storageEntry && storageEntry.value;
- k += r;
- var z = dctZigZag[k];
- component.blockData[blockOffset + z] = receiveAndExtend(s);
- k++;
- }
+ if (value === undefined) {
+ return null;
}
- function decodeDCFirst(component, blockOffset) {
- var t = decodeHuffman(component.huffmanTableDC);
- var diff = t === 0 ? 0 : receiveAndExtend(t) << successive;
- component.blockData[blockOffset] = component.pred += diff;
- }
+ const defaultValue = this.data.fieldValue === this.data.buttonValue;
- function decodeDCSuccessive(component, blockOffset) {
- component.blockData[blockOffset] |= readBit() << successive;
+ if (defaultValue === value) {
+ return null;
}
- var eobrun = 0;
-
- function decodeACFirst(component, blockOffset) {
- if (eobrun > 0) {
- eobrun--;
- return;
- }
-
- var k = spectralStart,
- e = spectralEnd;
-
- while (k <= e) {
- var rs = decodeHuffman(component.huffmanTableAC);
- var s = rs & 15,
- r = rs >> 4;
-
- if (s === 0) {
- if (r < 15) {
- eobrun = receive(r) + (1 << r) - 1;
- break;
- }
-
- k += 16;
- continue;
- }
+ const dict = evaluator.xref.fetchIfRef(this.ref);
- k += r;
- var z = dctZigZag[k];
- component.blockData[blockOffset + z] = receiveAndExtend(s) * (1 << successive);
- k++;
- }
+ if (!(0, _primitives.isDict)(dict)) {
+ return null;
}
- var successiveACState = 0,
- successiveACNextValue;
-
- function decodeACSuccessive(component, blockOffset) {
- var k = spectralStart;
- var e = spectralEnd;
- var r = 0;
- var s;
- var rs;
-
- while (k <= e) {
- const offsetZ = blockOffset + dctZigZag[k];
- const sign = component.blockData[offsetZ] < 0 ? -1 : 1;
-
- switch (successiveACState) {
- case 0:
- rs = decodeHuffman(component.huffmanTableAC);
- s = rs & 15;
- r = rs >> 4;
-
- if (s === 0) {
- if (r < 15) {
- eobrun = receive(r) + (1 << r);
- successiveACState = 4;
- } else {
- r = 16;
- successiveACState = 1;
- }
- } else {
- if (s !== 1) {
- throw new JpegError("invalid ACn encoding");
- }
-
- successiveACNextValue = receiveAndExtend(s);
- successiveACState = r ? 2 : 3;
- }
-
- continue;
-
- case 1:
- case 2:
- if (component.blockData[offsetZ]) {
- component.blockData[offsetZ] += sign * (readBit() << successive);
- } else {
- r--;
-
- if (r === 0) {
- successiveACState = successiveACState === 2 ? 3 : 0;
- }
- }
-
- break;
-
- case 3:
- if (component.blockData[offsetZ]) {
- component.blockData[offsetZ] += sign * (readBit() << successive);
- } else {
- component.blockData[offsetZ] = successiveACNextValue << successive;
- successiveACState = 0;
- }
-
- break;
-
- case 4:
- if (component.blockData[offsetZ]) {
- component.blockData[offsetZ] += sign * (readBit() << successive);
- }
+ const xfa = {
+ path: (0, _util.stringToPDFString)(dict.get("T") || ""),
+ value: value ? this.data.buttonValue : ""
+ };
- break;
- }
+ const name = _primitives.Name.get(value ? this.data.buttonValue : "Off");
- k++;
- }
+ let parentBuffer = null;
+ const encrypt = evaluator.xref.encrypt;
- if (successiveACState === 4) {
- eobrun--;
+ if (value) {
+ if ((0, _primitives.isRef)(this.parent)) {
+ const parent = evaluator.xref.fetch(this.parent);
+ let parentTransform = null;
- if (eobrun === 0) {
- successiveACState = 0;
+ if (encrypt) {
+ parentTransform = encrypt.createCipherTransform(this.parent.num, this.parent.gen);
}
- }
- }
-
- let blockRow = 0;
-
- function decodeMcu(component, decode, mcu, row, col) {
- var mcuRow = mcu / mcusPerLine | 0;
- var mcuCol = mcu % mcusPerLine;
- blockRow = mcuRow * component.v + row;
- var blockCol = mcuCol * component.h + col;
- const blockOffset = getBlockBufferOffset(component, blockRow, blockCol);
- decode(component, blockOffset);
- }
-
- function decodeBlock(component, decode, mcu) {
- blockRow = mcu / component.blocksPerLine | 0;
- var blockCol = mcu % component.blocksPerLine;
- const blockOffset = getBlockBufferOffset(component, blockRow, blockCol);
- decode(component, blockOffset);
- }
-
- var componentsLength = components.length;
- var component, i, j, k, n;
- var decodeFn;
- if (progressive) {
- if (spectralStart === 0) {
- decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive;
- } else {
- decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive;
+ parent.set("V", name);
+ parentBuffer = [`${this.parent.num} ${this.parent.gen} obj\n`];
+ (0, _writer.writeDict)(parent, parentBuffer, parentTransform);
+ parentBuffer.push("\nendobj\n");
+ } else if ((0, _primitives.isDict)(this.parent)) {
+ this.parent.set("V", name);
}
- } else {
- decodeFn = decodeBaseline;
}
- var mcu = 0,
- fileMarker;
- var mcuExpected;
+ dict.set("AS", name);
+ dict.set("M", `D:${(0, _util.getModificationDate)()}`);
+ let originalTransform = null;
- if (componentsLength === 1) {
- mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn;
- } else {
- mcuExpected = mcusPerLine * frame.mcusPerColumn;
+ if (encrypt) {
+ originalTransform = encrypt.createCipherTransform(this.ref.num, this.ref.gen);
}
- var h, v;
-
- while (mcu <= mcuExpected) {
- var mcuToRead = resetInterval ? Math.min(mcuExpected - mcu, resetInterval) : mcuExpected;
-
- if (mcuToRead > 0) {
- for (i = 0; i < componentsLength; i++) {
- components[i].pred = 0;
- }
-
- eobrun = 0;
-
- if (componentsLength === 1) {
- component = components[0];
-
- for (n = 0; n < mcuToRead; n++) {
- decodeBlock(component, decodeFn, mcu);
- mcu++;
- }
- } else {
- for (n = 0; n < mcuToRead; n++) {
- for (i = 0; i < componentsLength; i++) {
- component = components[i];
- h = component.h;
- v = component.v;
-
- for (j = 0; j < v; j++) {
- for (k = 0; k < h; k++) {
- decodeMcu(component, decodeFn, mcu, j, k);
- }
- }
- }
-
- mcu++;
- }
- }
- }
-
- bitsCount = 0;
- fileMarker = findNextFileMarker(data, offset);
-
- if (!fileMarker) {
- break;
- }
-
- if (fileMarker.invalid) {
- const partialMsg = mcuToRead > 0 ? "unexpected" : "excessive";
- (0, _util.warn)(`decodeScan - ${partialMsg} MCU data, current marker is: ${fileMarker.invalid}`);
- offset = fileMarker.offset;
- }
+ const buffer = [`${this.ref.num} ${this.ref.gen} obj\n`];
+ (0, _writer.writeDict)(dict, buffer, originalTransform);
+ buffer.push("\nendobj\n");
+ const newRefs = [{
+ ref: this.ref,
+ data: buffer.join(""),
+ xfa
+ }];
- if (fileMarker.marker >= 0xffd0 && fileMarker.marker <= 0xffd7) {
- offset += 2;
- } else {
- break;
- }
+ if (parentBuffer !== null) {
+ newRefs.push({
+ ref: this.parent,
+ data: parentBuffer.join(""),
+ xfa: null
+ });
}
- return offset - startOffset;
+ return newRefs;
}
- function quantizeAndInverse(component, blockBufferOffset, p) {
- var qt = component.quantizationTable,
- blockData = component.blockData;
- var v0, v1, v2, v3, v4, v5, v6, v7;
- var p0, p1, p2, p3, p4, p5, p6, p7;
- var t;
-
- if (!qt) {
- throw new JpegError("missing required Quantization Table.");
- }
-
- for (var row = 0; row < 64; row += 8) {
- p0 = blockData[blockBufferOffset + row];
- p1 = blockData[blockBufferOffset + row + 1];
- p2 = blockData[blockBufferOffset + row + 2];
- p3 = blockData[blockBufferOffset + row + 3];
- p4 = blockData[blockBufferOffset + row + 4];
- p5 = blockData[blockBufferOffset + row + 5];
- p6 = blockData[blockBufferOffset + row + 6];
- p7 = blockData[blockBufferOffset + row + 7];
- p0 *= qt[row];
-
- if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) {
- t = dctSqrt2 * p0 + 512 >> 10;
- p[row] = t;
- p[row + 1] = t;
- p[row + 2] = t;
- p[row + 3] = t;
- p[row + 4] = t;
- p[row + 5] = t;
- p[row + 6] = t;
- p[row + 7] = t;
- continue;
- }
-
- p1 *= qt[row + 1];
- p2 *= qt[row + 2];
- p3 *= qt[row + 3];
- p4 *= qt[row + 4];
- p5 *= qt[row + 5];
- p6 *= qt[row + 6];
- p7 *= qt[row + 7];
- v0 = dctSqrt2 * p0 + 128 >> 8;
- v1 = dctSqrt2 * p4 + 128 >> 8;
- v2 = p2;
- v3 = p6;
- v4 = dctSqrt1d2 * (p1 - p7) + 128 >> 8;
- v7 = dctSqrt1d2 * (p1 + p7) + 128 >> 8;
- v5 = p3 << 4;
- v6 = p5 << 4;
- v0 = v0 + v1 + 1 >> 1;
- v1 = v0 - v1;
- t = v2 * dctSin6 + v3 * dctCos6 + 128 >> 8;
- v2 = v2 * dctCos6 - v3 * dctSin6 + 128 >> 8;
- v3 = t;
- v4 = v4 + v6 + 1 >> 1;
- v6 = v4 - v6;
- v7 = v7 + v5 + 1 >> 1;
- v5 = v7 - v5;
- v0 = v0 + v3 + 1 >> 1;
- v3 = v0 - v3;
- v1 = v1 + v2 + 1 >> 1;
- v2 = v1 - v2;
- t = v4 * dctSin3 + v7 * dctCos3 + 2048 >> 12;
- v4 = v4 * dctCos3 - v7 * dctSin3 + 2048 >> 12;
- v7 = t;
- t = v5 * dctSin1 + v6 * dctCos1 + 2048 >> 12;
- v5 = v5 * dctCos1 - v6 * dctSin1 + 2048 >> 12;
- v6 = t;
- p[row] = v0 + v7;
- p[row + 7] = v0 - v7;
- p[row + 1] = v1 + v6;
- p[row + 6] = v1 - v6;
- p[row + 2] = v2 + v5;
- p[row + 5] = v2 - v5;
- p[row + 3] = v3 + v4;
- p[row + 4] = v3 - v4;
- }
-
- for (var col = 0; col < 8; ++col) {
- p0 = p[col];
- p1 = p[col + 8];
- p2 = p[col + 16];
- p3 = p[col + 24];
- p4 = p[col + 32];
- p5 = p[col + 40];
- p6 = p[col + 48];
- p7 = p[col + 56];
-
- if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) {
- t = dctSqrt2 * p0 + 8192 >> 14;
-
- if (t < -2040) {
- t = 0;
- } else if (t >= 2024) {
- t = 255;
- } else {
- t = t + 2056 >> 4;
- }
-
- blockData[blockBufferOffset + col] = t;
- blockData[blockBufferOffset + col + 8] = t;
- blockData[blockBufferOffset + col + 16] = t;
- blockData[blockBufferOffset + col + 24] = t;
- blockData[blockBufferOffset + col + 32] = t;
- blockData[blockBufferOffset + col + 40] = t;
- blockData[blockBufferOffset + col + 48] = t;
- blockData[blockBufferOffset + col + 56] = t;
- continue;
- }
-
- v0 = dctSqrt2 * p0 + 2048 >> 12;
- v1 = dctSqrt2 * p4 + 2048 >> 12;
- v2 = p2;
- v3 = p6;
- v4 = dctSqrt1d2 * (p1 - p7) + 2048 >> 12;
- v7 = dctSqrt1d2 * (p1 + p7) + 2048 >> 12;
- v5 = p3;
- v6 = p5;
- v0 = (v0 + v1 + 1 >> 1) + 4112;
- v1 = v0 - v1;
- t = v2 * dctSin6 + v3 * dctCos6 + 2048 >> 12;
- v2 = v2 * dctCos6 - v3 * dctSin6 + 2048 >> 12;
- v3 = t;
- v4 = v4 + v6 + 1 >> 1;
- v6 = v4 - v6;
- v7 = v7 + v5 + 1 >> 1;
- v5 = v7 - v5;
- v0 = v0 + v3 + 1 >> 1;
- v3 = v0 - v3;
- v1 = v1 + v2 + 1 >> 1;
- v2 = v1 - v2;
- t = v4 * dctSin3 + v7 * dctCos3 + 2048 >> 12;
- v4 = v4 * dctCos3 - v7 * dctSin3 + 2048 >> 12;
- v7 = t;
- t = v5 * dctSin1 + v6 * dctCos1 + 2048 >> 12;
- v5 = v5 * dctCos1 - v6 * dctSin1 + 2048 >> 12;
- v6 = t;
- p0 = v0 + v7;
- p7 = v0 - v7;
- p1 = v1 + v6;
- p6 = v1 - v6;
- p2 = v2 + v5;
- p5 = v2 - v5;
- p3 = v3 + v4;
- p4 = v3 - v4;
-
- if (p0 < 16) {
- p0 = 0;
- } else if (p0 >= 4080) {
- p0 = 255;
- } else {
- p0 >>= 4;
- }
-
- if (p1 < 16) {
- p1 = 0;
- } else if (p1 >= 4080) {
- p1 = 255;
- } else {
- p1 >>= 4;
- }
-
- if (p2 < 16) {
- p2 = 0;
- } else if (p2 >= 4080) {
- p2 = 255;
- } else {
- p2 >>= 4;
- }
-
- if (p3 < 16) {
- p3 = 0;
- } else if (p3 >= 4080) {
- p3 = 255;
- } else {
- p3 >>= 4;
- }
-
- if (p4 < 16) {
- p4 = 0;
- } else if (p4 >= 4080) {
- p4 = 255;
- } else {
- p4 >>= 4;
- }
-
- if (p5 < 16) {
- p5 = 0;
- } else if (p5 >= 4080) {
- p5 = 255;
- } else {
- p5 >>= 4;
- }
-
- if (p6 < 16) {
- p6 = 0;
- } else if (p6 >= 4080) {
- p6 = 255;
- } else {
- p6 >>= 4;
- }
-
- if (p7 < 16) {
- p7 = 0;
- } else if (p7 >= 4080) {
- p7 = 255;
- } else {
- p7 >>= 4;
- }
+ _processCheckBox(params) {
+ const customAppearance = params.dict.get("AP");
- blockData[blockBufferOffset + col] = p0;
- blockData[blockBufferOffset + col + 8] = p1;
- blockData[blockBufferOffset + col + 16] = p2;
- blockData[blockBufferOffset + col + 24] = p3;
- blockData[blockBufferOffset + col + 32] = p4;
- blockData[blockBufferOffset + col + 40] = p5;
- blockData[blockBufferOffset + col + 48] = p6;
- blockData[blockBufferOffset + col + 56] = p7;
+ if (!(0, _primitives.isDict)(customAppearance)) {
+ return;
}
- }
- function buildComponentData(frame, component) {
- var blocksPerLine = component.blocksPerLine;
- var blocksPerColumn = component.blocksPerColumn;
- var computationBuffer = new Int16Array(64);
+ const normalAppearance = customAppearance.get("N");
- for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) {
- for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) {
- var offset = getBlockBufferOffset(component, blockRow, blockCol);
- quantizeAndInverse(component, offset, computationBuffer);
- }
+ if (!(0, _primitives.isDict)(normalAppearance)) {
+ return;
}
- return component.blockData;
- }
-
- function findNextFileMarker(data, currentPos, startPos = currentPos) {
- const maxPos = data.length - 1;
- var newPos = startPos < currentPos ? startPos : currentPos;
+ const exportValues = normalAppearance.getKeys();
- if (currentPos >= maxPos) {
- return null;
+ if (!exportValues.includes("Off")) {
+ exportValues.push("Off");
}
- var currentMarker = (0, _core_utils.readUint16)(data, currentPos);
+ if (!exportValues.includes(this.data.fieldValue)) {
+ this.data.fieldValue = null;
+ }
- if (currentMarker >= 0xffc0 && currentMarker <= 0xfffe) {
- return {
- invalid: null,
- marker: currentMarker,
- offset: currentPos
- };
+ if (exportValues.length !== 2) {
+ return;
}
- var newMarker = (0, _core_utils.readUint16)(data, newPos);
+ this.data.exportValue = exportValues[0] === "Off" ? exportValues[1] : exportValues[0];
+ this.checkedAppearance = normalAppearance.get(this.data.exportValue);
+ this.uncheckedAppearance = normalAppearance.get("Off") || null;
- while (!(newMarker >= 0xffc0 && newMarker <= 0xfffe)) {
- if (++newPos >= maxPos) {
- return null;
- }
+ this._streams.push(this.checkedAppearance);
- newMarker = (0, _core_utils.readUint16)(data, newPos);
+ if (this.uncheckedAppearance) {
+ this._streams.push(this.uncheckedAppearance);
}
- return {
- invalid: currentMarker.toString(16),
- marker: newMarker,
- offset: newPos
- };
+ this._fallbackFontDict = this.fallbackFontDict;
}
- JpegImage.prototype = {
- parse(data, {
- dnlScanLines = null
- } = {}) {
- function readDataBlock() {
- const length = (0, _core_utils.readUint16)(data, offset);
- offset += 2;
- let endOffset = offset + length - 2;
- var fileMarker = findNextFileMarker(data, endOffset, offset);
-
- if (fileMarker && fileMarker.invalid) {
- (0, _util.warn)("readDataBlock - incorrect length, current marker is: " + fileMarker.invalid);
- endOffset = fileMarker.offset;
- }
-
- var array = data.subarray(offset, endOffset);
- offset += array.length;
- return array;
- }
-
- function prepareComponents(frame) {
- var mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / frame.maxH);
- var mcusPerColumn = Math.ceil(frame.scanLines / 8 / frame.maxV);
-
- for (var i = 0; i < frame.components.length; i++) {
- component = frame.components[i];
- var blocksPerLine = Math.ceil(Math.ceil(frame.samplesPerLine / 8) * component.h / frame.maxH);
- var blocksPerColumn = Math.ceil(Math.ceil(frame.scanLines / 8) * component.v / frame.maxV);
- var blocksPerLineForMcu = mcusPerLine * component.h;
- var blocksPerColumnForMcu = mcusPerColumn * component.v;
- var blocksBufferSize = 64 * blocksPerColumnForMcu * (blocksPerLineForMcu + 1);
- component.blockData = new Int16Array(blocksBufferSize);
- component.blocksPerLine = blocksPerLine;
- component.blocksPerColumn = blocksPerColumn;
- }
-
- frame.mcusPerLine = mcusPerLine;
- frame.mcusPerColumn = mcusPerColumn;
- }
-
- var offset = 0;
- var jfif = null;
- var adobe = null;
- var frame, resetInterval;
- let numSOSMarkers = 0;
- var quantizationTables = [];
- var huffmanTablesAC = [],
- huffmanTablesDC = [];
- let fileMarker = (0, _core_utils.readUint16)(data, offset);
- offset += 2;
-
- if (fileMarker !== 0xffd8) {
- throw new JpegError("SOI not found");
- }
-
- fileMarker = (0, _core_utils.readUint16)(data, offset);
- offset += 2;
-
- markerLoop: while (fileMarker !== 0xffd9) {
- var i, j, l;
-
- switch (fileMarker) {
- case 0xffe0:
- case 0xffe1:
- case 0xffe2:
- case 0xffe3:
- case 0xffe4:
- case 0xffe5:
- case 0xffe6:
- case 0xffe7:
- case 0xffe8:
- case 0xffe9:
- case 0xffea:
- case 0xffeb:
- case 0xffec:
- case 0xffed:
- case 0xffee:
- case 0xffef:
- case 0xfffe:
- var appData = readDataBlock();
-
- if (fileMarker === 0xffe0) {
- if (appData[0] === 0x4a && appData[1] === 0x46 && appData[2] === 0x49 && appData[3] === 0x46 && appData[4] === 0) {
- jfif = {
- version: {
- major: appData[5],
- minor: appData[6]
- },
- densityUnits: appData[7],
- xDensity: appData[8] << 8 | appData[9],
- yDensity: appData[10] << 8 | appData[11],
- thumbWidth: appData[12],
- thumbHeight: appData[13],
- thumbData: appData.subarray(14, 14 + 3 * appData[12] * appData[13])
- };
- }
- }
-
- if (fileMarker === 0xffee) {
- if (appData[0] === 0x41 && appData[1] === 0x64 && appData[2] === 0x6f && appData[3] === 0x62 && appData[4] === 0x65) {
- adobe = {
- version: appData[5] << 8 | appData[6],
- flags0: appData[7] << 8 | appData[8],
- flags1: appData[9] << 8 | appData[10],
- transformCode: appData[11]
- };
- }
- }
-
- break;
-
- case 0xffdb:
- const quantizationTablesLength = (0, _core_utils.readUint16)(data, offset);
- offset += 2;
- var quantizationTablesEnd = quantizationTablesLength + offset - 2;
- var z;
-
- while (offset < quantizationTablesEnd) {
- var quantizationTableSpec = data[offset++];
- var tableData = new Uint16Array(64);
-
- if (quantizationTableSpec >> 4 === 0) {
- for (j = 0; j < 64; j++) {
- z = dctZigZag[j];
- tableData[z] = data[offset++];
- }
- } else if (quantizationTableSpec >> 4 === 1) {
- for (j = 0; j < 64; j++) {
- z = dctZigZag[j];
- tableData[z] = (0, _core_utils.readUint16)(data, offset);
- offset += 2;
- }
- } else {
- throw new JpegError("DQT - invalid table spec");
- }
-
- quantizationTables[quantizationTableSpec & 15] = tableData;
- }
-
- break;
-
- case 0xffc0:
- case 0xffc1:
- case 0xffc2:
- if (frame) {
- throw new JpegError("Only single frame JPEGs supported");
- }
-
- offset += 2;
- frame = {};
- frame.extended = fileMarker === 0xffc1;
- frame.progressive = fileMarker === 0xffc2;
- frame.precision = data[offset++];
- const sofScanLines = (0, _core_utils.readUint16)(data, offset);
- offset += 2;
- frame.scanLines = dnlScanLines || sofScanLines;
- frame.samplesPerLine = (0, _core_utils.readUint16)(data, offset);
- offset += 2;
- frame.components = [];
- frame.componentIds = {};
- var componentsCount = data[offset++],
- componentId;
- var maxH = 0,
- maxV = 0;
-
- for (i = 0; i < componentsCount; i++) {
- componentId = data[offset];
- var h = data[offset + 1] >> 4;
- var v = data[offset + 1] & 15;
-
- if (maxH < h) {
- maxH = h;
- }
-
- if (maxV < v) {
- maxV = v;
- }
-
- var qId = data[offset + 2];
- l = frame.components.push({
- h,
- v,
- quantizationId: qId,
- quantizationTable: null
- });
- frame.componentIds[componentId] = l - 1;
- offset += 3;
- }
-
- frame.maxH = maxH;
- frame.maxV = maxV;
- prepareComponents(frame);
- break;
-
- case 0xffc4:
- const huffmanLength = (0, _core_utils.readUint16)(data, offset);
- offset += 2;
-
- for (i = 2; i < huffmanLength;) {
- var huffmanTableSpec = data[offset++];
- var codeLengths = new Uint8Array(16);
- var codeLengthSum = 0;
-
- for (j = 0; j < 16; j++, offset++) {
- codeLengthSum += codeLengths[j] = data[offset];
- }
-
- var huffmanValues = new Uint8Array(codeLengthSum);
-
- for (j = 0; j < codeLengthSum; j++, offset++) {
- huffmanValues[j] = data[offset];
- }
-
- i += 17 + codeLengthSum;
- (huffmanTableSpec >> 4 === 0 ? huffmanTablesDC : huffmanTablesAC)[huffmanTableSpec & 15] = buildHuffmanTable(codeLengths, huffmanValues);
- }
-
- break;
-
- case 0xffdd:
- offset += 2;
- resetInterval = (0, _core_utils.readUint16)(data, offset);
- offset += 2;
- break;
-
- case 0xffda:
- const parseDNLMarker = ++numSOSMarkers === 1 && !dnlScanLines;
- offset += 2;
- var selectorsCount = data[offset++];
- var components = [],
- component;
-
- for (i = 0; i < selectorsCount; i++) {
- const index = data[offset++];
- var componentIndex = frame.componentIds[index];
- component = frame.components[componentIndex];
- component.index = index;
- var tableSpec = data[offset++];
- component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4];
- component.huffmanTableAC = huffmanTablesAC[tableSpec & 15];
- components.push(component);
- }
-
- var spectralStart = data[offset++];
- var spectralEnd = data[offset++];
- var successiveApproximation = data[offset++];
-
- try {
- var processed = decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successiveApproximation >> 4, successiveApproximation & 15, parseDNLMarker);
- offset += processed;
- } catch (ex) {
- if (ex instanceof DNLMarkerError) {
- (0, _util.warn)(`${ex.message} -- attempting to re-parse the JPEG image.`);
- return this.parse(data, {
- dnlScanLines: ex.scanLines
- });
- } else if (ex instanceof EOIMarkerError) {
- (0, _util.warn)(`${ex.message} -- ignoring the rest of the image data.`);
- break markerLoop;
- }
-
- throw ex;
- }
-
- break;
-
- case 0xffdc:
- offset += 4;
- break;
-
- case 0xffff:
- if (data[offset] !== 0xff) {
- offset--;
- }
-
- break;
-
- default:
- const nextFileMarker = findNextFileMarker(data, offset - 2, offset - 3);
-
- if (nextFileMarker && nextFileMarker.invalid) {
- (0, _util.warn)("JpegImage.parse - unexpected data, current marker is: " + nextFileMarker.invalid);
- offset = nextFileMarker.offset;
- break;
- }
-
- if (offset >= data.length - 1) {
- (0, _util.warn)("JpegImage.parse - reached the end of the image data " + "without finding an EOI marker (0xFFD9).");
- break markerLoop;
- }
-
- throw new JpegError("JpegImage.parse - unknown marker: " + fileMarker.toString(16));
- }
-
- fileMarker = (0, _core_utils.readUint16)(data, offset);
- offset += 2;
- }
-
- this.width = frame.samplesPerLine;
- this.height = frame.scanLines;
- this.jfif = jfif;
- this.adobe = adobe;
- this.components = [];
-
- for (i = 0; i < frame.components.length; i++) {
- component = frame.components[i];
- var quantizationTable = quantizationTables[component.quantizationId];
-
- if (quantizationTable) {
- component.quantizationTable = quantizationTable;
- }
-
- this.components.push({
- index: component.index,
- output: buildComponentData(frame, component),
- scaleX: component.h / frame.maxH,
- scaleY: component.v / frame.maxV,
- blocksPerLine: component.blocksPerLine,
- blocksPerColumn: component.blocksPerColumn
- });
- }
-
- this.numComponents = this.components.length;
- return undefined;
- },
-
- _getLinearizedBlockData(width, height, isSourcePDF = false) {
- var scaleX = this.width / width,
- scaleY = this.height / height;
- var component, componentScaleX, componentScaleY, blocksPerScanline;
- var x, y, i, j, k;
- var index;
- var offset = 0;
- var output;
- var numComponents = this.components.length;
- var dataLength = width * height * numComponents;
- var data = new Uint8ClampedArray(dataLength);
- var xScaleBlockOffset = new Uint32Array(width);
- var mask3LSB = 0xfffffff8;
- let lastComponentScaleX;
-
- for (i = 0; i < numComponents; i++) {
- component = this.components[i];
- componentScaleX = component.scaleX * scaleX;
- componentScaleY = component.scaleY * scaleY;
- offset = i;
- output = component.output;
- blocksPerScanline = component.blocksPerLine + 1 << 3;
-
- if (componentScaleX !== lastComponentScaleX) {
- for (x = 0; x < width; x++) {
- j = 0 | x * componentScaleX;
- xScaleBlockOffset[x] = (j & mask3LSB) << 3 | j & 7;
- }
-
- lastComponentScaleX = componentScaleX;
- }
-
- for (y = 0; y < height; y++) {
- j = 0 | y * componentScaleY;
- index = blocksPerScanline * (j & mask3LSB) | (j & 7) << 3;
-
- for (x = 0; x < width; x++) {
- data[offset] = output[index + xScaleBlockOffset[x]];
- offset += numComponents;
- }
- }
- }
-
- let transform = this._decodeTransform;
-
- if (!isSourcePDF && numComponents === 4 && !transform) {
- transform = new Int32Array([-256, 255, -256, 255, -256, 255, -256, 255]);
- }
-
- if (transform) {
- for (i = 0; i < dataLength;) {
- for (j = 0, k = 0; j < numComponents; j++, i++, k += 2) {
- data[i] = (data[i] * transform[k] >> 8) + transform[k + 1];
- }
- }
- }
-
- return data;
- },
-
- get _isColorConversionNeeded() {
- if (this.adobe) {
- return !!this.adobe.transformCode;
- }
-
- if (this.numComponents === 3) {
- if (this._colorTransform === 0) {
- return false;
- } else if (this.components[0].index === 0x52 && this.components[1].index === 0x47 && this.components[2].index === 0x42) {
- return false;
- }
-
- return true;
- }
-
- if (this._colorTransform === 1) {
- return true;
- }
-
- return false;
- },
-
- _convertYccToRgb: function convertYccToRgb(data) {
- var Y, Cb, Cr;
-
- for (var i = 0, length = data.length; i < length; i += 3) {
- Y = data[i];
- Cb = data[i + 1];
- Cr = data[i + 2];
- data[i] = Y - 179.456 + 1.402 * Cr;
- data[i + 1] = Y + 135.459 - 0.344 * Cb - 0.714 * Cr;
- data[i + 2] = Y - 226.816 + 1.772 * Cb;
- }
-
- return data;
- },
- _convertYcckToRgb: function convertYcckToRgb(data) {
- var Y, Cb, Cr, k;
- var offset = 0;
-
- for (var i = 0, length = data.length; i < length; i += 4) {
- Y = data[i];
- Cb = data[i + 1];
- Cr = data[i + 2];
- k = data[i + 3];
- data[offset++] = -122.67195406894 + Cb * (-6.60635669420364e-5 * Cb + 0.000437130475926232 * Cr - 5.4080610064599e-5 * Y + 0.00048449797120281 * k - 0.154362151871126) + Cr * (-0.000957964378445773 * Cr + 0.000817076911346625 * Y - 0.00477271405408747 * k + 1.53380253221734) + Y * (0.000961250184130688 * Y - 0.00266257332283933 * k + 0.48357088451265) + k * (-0.000336197177618394 * k + 0.484791561490776);
- data[offset++] = 107.268039397724 + Cb * (2.19927104525741e-5 * Cb - 0.000640992018297945 * Cr + 0.000659397001245577 * Y + 0.000426105652938837 * k - 0.176491792462875) + Cr * (-0.000778269941513683 * Cr + 0.00130872261408275 * Y + 0.000770482631801132 * k - 0.151051492775562) + Y * (0.00126935368114843 * Y - 0.00265090189010898 * k + 0.25802910206845) + k * (-0.000318913117588328 * k - 0.213742400323665);
- data[offset++] = -20.810012546947 + Cb * (-0.000570115196973677 * Cb - 2.63409051004589e-5 * Cr + 0.0020741088115012 * Y - 0.00288260236853442 * k + 0.814272968359295) + Cr * (-1.53496057440975e-5 * Cr - 0.000132689043961446 * Y + 0.000560833691242812 * k - 0.195152027534049) + Y * (0.00174418132927582 * Y - 0.00255243321439347 * k + 0.116935020465145) + k * (-0.000343531996510555 * k + 0.24165260232407);
- }
-
- return data.subarray(0, offset);
- },
- _convertYcckToCmyk: function convertYcckToCmyk(data) {
- var Y, Cb, Cr;
-
- for (var i = 0, length = data.length; i < length; i += 4) {
- Y = data[i];
- Cb = data[i + 1];
- Cr = data[i + 2];
- data[i] = 434.456 - Y - 1.402 * Cr;
- data[i + 1] = 119.541 - Y + 0.344 * Cb + 0.714 * Cr;
- data[i + 2] = 481.816 - Y - 1.772 * Cb;
- }
-
- return data;
- },
- _convertCmykToRgb: function convertCmykToRgb(data) {
- var c, m, y, k;
- var offset = 0;
-
- for (var i = 0, length = data.length; i < length; i += 4) {
- c = data[i];
- m = data[i + 1];
- y = data[i + 2];
- k = data[i + 3];
- data[offset++] = 255 + c * (-0.00006747147073602441 * c + 0.0008379262121013727 * m + 0.0002894718188643294 * y + 0.003264231057537806 * k - 1.1185611867203937) + m * (0.000026374107616089405 * m - 0.00008626949158638572 * y - 0.0002748769067499491 * k - 0.02155688794978967) + y * (-0.00003878099212869363 * y - 0.0003267808279485286 * k + 0.0686742238595345) - k * (0.0003361971776183937 * k + 0.7430659151342254);
- data[offset++] = 255 + c * (0.00013596372813588848 * c + 0.000924537132573585 * m + 0.00010567359618683593 * y + 0.0004791864687436512 * k - 0.3109689587515875) + m * (-0.00023545346108370344 * m + 0.0002702845253534714 * y + 0.0020200308977307156 * k - 0.7488052167015494) + y * (0.00006834815998235662 * y + 0.00015168452363460973 * k - 0.09751927774728933) - k * (0.00031891311758832814 * k + 0.7364883807733168);
- data[offset++] = 255 + c * (0.000013598650411385307 * c + 0.00012423956175490851 * m + 0.0004751985097583589 * y - 0.0000036729317476630422 * k - 0.05562186980264034) + m * (0.00016141380598724676 * m + 0.0009692239130725186 * y + 0.0007782692450036253 * k - 0.44015232367526463) + y * (5.068882914068769e-7 * y + 0.0017778369011375071 * k - 0.7591454649749609) - k * (0.0003435319965105553 * k + 0.7063770186160144);
- }
-
- return data.subarray(0, offset);
- },
-
- getData({
- width,
- height,
- forceRGB = false,
- isSourcePDF = false
- }) {
- if (this.numComponents > 4) {
- throw new JpegError("Unsupported color mode");
- }
-
- var data = this._getLinearizedBlockData(width, height, isSourcePDF);
-
- if (this.numComponents === 1 && forceRGB) {
- var dataLength = data.length;
- var rgbData = new Uint8ClampedArray(dataLength * 3);
- var offset = 0;
-
- for (var i = 0; i < dataLength; i++) {
- var grayColor = data[i];
- rgbData[offset++] = grayColor;
- rgbData[offset++] = grayColor;
- rgbData[offset++] = grayColor;
- }
+ _processRadioButton(params) {
+ this.data.fieldValue = this.data.buttonValue = null;
+ const fieldParent = params.dict.get("Parent");
- return rgbData;
- } else if (this.numComponents === 3 && this._isColorConversionNeeded) {
- return this._convertYccToRgb(data);
- } else if (this.numComponents === 4) {
- if (this._isColorConversionNeeded) {
- if (forceRGB) {
- return this._convertYcckToRgb(data);
- }
+ if ((0, _primitives.isDict)(fieldParent)) {
+ this.parent = params.dict.getRaw("Parent");
+ const fieldParentValue = fieldParent.get("V");
- return this._convertYcckToCmyk(data);
- } else if (forceRGB) {
- return this._convertCmykToRgb(data);
- }
+ if ((0, _primitives.isName)(fieldParentValue)) {
+ this.data.fieldValue = this._decodeFormValue(fieldParentValue);
}
-
- return data;
}
- };
- return JpegImage;
-}();
-
-exports.JpegImage = JpegImage;
-
-/***/ }),
-/* 20 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.JpxStream = void 0;
-
-var _stream = __w_pdfjs_require__(12);
-
-var _jpx = __w_pdfjs_require__(21);
-
-var _util = __w_pdfjs_require__(2);
-
-const JpxStream = function JpxStreamClosure() {
- function JpxStream(stream, maybeLength, dict, params) {
- this.stream = stream;
- this.maybeLength = maybeLength;
- this.dict = dict;
- this.params = params;
-
- _stream.DecodeStream.call(this, maybeLength);
- }
-
- JpxStream.prototype = Object.create(_stream.DecodeStream.prototype);
- Object.defineProperty(JpxStream.prototype, "bytes", {
- get: function JpxStream_bytes() {
- return (0, _util.shadow)(this, "bytes", this.stream.getBytes(this.maybeLength));
- },
- configurable: true
- });
-
- JpxStream.prototype.ensureBuffer = function (requested) {};
+ const appearanceStates = params.dict.get("AP");
- JpxStream.prototype.readBlock = function () {
- if (this.eof) {
+ if (!(0, _primitives.isDict)(appearanceStates)) {
return;
}
- const jpxImage = new _jpx.JpxImage();
- jpxImage.parse(this.bytes);
- const width = jpxImage.width;
- const height = jpxImage.height;
- const componentsCount = jpxImage.componentsCount;
- const tileCount = jpxImage.tiles.length;
-
- if (tileCount === 1) {
- this.buffer = jpxImage.tiles[0].items;
- } else {
- const data = new Uint8ClampedArray(width * height * componentsCount);
-
- for (let k = 0; k < tileCount; k++) {
- const tileComponents = jpxImage.tiles[k];
- const tileWidth = tileComponents.width;
- const tileHeight = tileComponents.height;
- const tileLeft = tileComponents.left;
- const tileTop = tileComponents.top;
- const src = tileComponents.items;
- let srcPosition = 0;
- let dataPosition = (width * tileTop + tileLeft) * componentsCount;
- const imgRowSize = width * componentsCount;
- const tileRowSize = tileWidth * componentsCount;
-
- for (let j = 0; j < tileHeight; j++) {
- const rowBytes = src.subarray(srcPosition, srcPosition + tileRowSize);
- data.set(rowBytes, dataPosition);
- srcPosition += tileRowSize;
- dataPosition += imgRowSize;
- }
- }
+ const normalAppearance = appearanceStates.get("N");
- this.buffer = data;
+ if (!(0, _primitives.isDict)(normalAppearance)) {
+ return;
}
- this.bufferLength = this.buffer.length;
- this.eof = true;
- };
-
- return JpxStream;
-}();
-
-exports.JpxStream = JpxStream;
-
-/***/ }),
-/* 21 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.JpxImage = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var _core_utils = __w_pdfjs_require__(8);
-
-var _arithmetic_decoder = __w_pdfjs_require__(17);
-
-class JpxError extends _util.BaseException {
- constructor(msg) {
- super(`JPX error: ${msg}`);
- }
-
-}
-
-var JpxImage = function JpxImageClosure() {
- var SubbandsGainLog2 = {
- LL: 0,
- LH: 1,
- HL: 1,
- HH: 2
- };
-
- function JpxImage() {
- this.failOnCorruptedImage = false;
- }
-
- JpxImage.prototype = {
- parse: function JpxImage_parse(data) {
- var head = (0, _core_utils.readUint16)(data, 0);
-
- if (head === 0xff4f) {
- this.parseCodestream(data, 0, data.length);
- return;
- }
-
- var position = 0,
- length = data.length;
-
- while (position < length) {
- var headerSize = 8;
- var lbox = (0, _core_utils.readUint32)(data, position);
- var tbox = (0, _core_utils.readUint32)(data, position + 4);
- position += headerSize;
-
- if (lbox === 1) {
- lbox = (0, _core_utils.readUint32)(data, position) * 4294967296 + (0, _core_utils.readUint32)(data, position + 4);
- position += 8;
- headerSize += 8;
- }
-
- if (lbox === 0) {
- lbox = length - position + headerSize;
- }
-
- if (lbox < headerSize) {
- throw new JpxError("Invalid box field size");
- }
-
- var dataLength = lbox - headerSize;
- var jumpDataLength = true;
-
- switch (tbox) {
- case 0x6a703268:
- jumpDataLength = false;
- break;
-
- case 0x636f6c72:
- var method = data[position];
-
- if (method === 1) {
- var colorspace = (0, _core_utils.readUint32)(data, position + 3);
-
- switch (colorspace) {
- case 16:
- case 17:
- case 18:
- break;
-
- default:
- (0, _util.warn)("Unknown colorspace " + colorspace);
- break;
- }
- } else if (method === 2) {
- (0, _util.info)("ICC profile not supported");
- }
-
- break;
-
- case 0x6a703263:
- this.parseCodestream(data, position, position + dataLength);
- break;
-
- case 0x6a502020:
- if ((0, _core_utils.readUint32)(data, position) !== 0x0d0a870a) {
- (0, _util.warn)("Invalid JP2 signature");
- }
-
- break;
-
- case 0x6a501a1a:
- case 0x66747970:
- case 0x72726571:
- case 0x72657320:
- case 0x69686472:
- break;
-
- default:
- var headerType = String.fromCharCode(tbox >> 24 & 0xff, tbox >> 16 & 0xff, tbox >> 8 & 0xff, tbox & 0xff);
- (0, _util.warn)("Unsupported header type " + tbox + " (" + headerType + ")");
- break;
- }
-
- if (jumpDataLength) {
- position += dataLength;
- }
- }
- },
- parseImageProperties: function JpxImage_parseImageProperties(stream) {
- var newByte = stream.getByte();
-
- while (newByte >= 0) {
- var oldByte = newByte;
- newByte = stream.getByte();
- var code = oldByte << 8 | newByte;
-
- if (code === 0xff51) {
- stream.skip(4);
- var Xsiz = stream.getInt32() >>> 0;
- var Ysiz = stream.getInt32() >>> 0;
- var XOsiz = stream.getInt32() >>> 0;
- var YOsiz = stream.getInt32() >>> 0;
- stream.skip(16);
- var Csiz = stream.getUint16();
- this.width = Xsiz - XOsiz;
- this.height = Ysiz - YOsiz;
- this.componentsCount = Csiz;
- this.bitsPerComponent = 8;
- return;
- }
- }
-
- throw new JpxError("No size marker found in JPX stream");
- },
- parseCodestream: function JpxImage_parseCodestream(data, start, end) {
- var context = {};
- var doNotRecover = false;
-
- try {
- var position = start;
-
- while (position + 1 < end) {
- var code = (0, _core_utils.readUint16)(data, position);
- position += 2;
- var length = 0,
- j,
- sqcd,
- spqcds,
- spqcdSize,
- scalarExpounded,
- tile;
-
- switch (code) {
- case 0xff4f:
- context.mainHeader = true;
- break;
-
- case 0xffd9:
- break;
-
- case 0xff51:
- length = (0, _core_utils.readUint16)(data, position);
- var siz = {};
- siz.Xsiz = (0, _core_utils.readUint32)(data, position + 4);
- siz.Ysiz = (0, _core_utils.readUint32)(data, position + 8);
- siz.XOsiz = (0, _core_utils.readUint32)(data, position + 12);
- siz.YOsiz = (0, _core_utils.readUint32)(data, position + 16);
- siz.XTsiz = (0, _core_utils.readUint32)(data, position + 20);
- siz.YTsiz = (0, _core_utils.readUint32)(data, position + 24);
- siz.XTOsiz = (0, _core_utils.readUint32)(data, position + 28);
- siz.YTOsiz = (0, _core_utils.readUint32)(data, position + 32);
- var componentsCount = (0, _core_utils.readUint16)(data, position + 36);
- siz.Csiz = componentsCount;
- var components = [];
- j = position + 38;
-
- for (var i = 0; i < componentsCount; i++) {
- var component = {
- precision: (data[j] & 0x7f) + 1,
- isSigned: !!(data[j] & 0x80),
- XRsiz: data[j + 1],
- YRsiz: data[j + 2]
- };
- j += 3;
- calculateComponentDimensions(component, siz);
- components.push(component);
- }
-
- context.SIZ = siz;
- context.components = components;
- calculateTileGrids(context, components);
- context.QCC = [];
- context.COC = [];
- break;
-
- case 0xff5c:
- length = (0, _core_utils.readUint16)(data, position);
- var qcd = {};
- j = position + 2;
- sqcd = data[j++];
-
- switch (sqcd & 0x1f) {
- case 0:
- spqcdSize = 8;
- scalarExpounded = true;
- break;
-
- case 1:
- spqcdSize = 16;
- scalarExpounded = false;
- break;
-
- case 2:
- spqcdSize = 16;
- scalarExpounded = true;
- break;
-
- default:
- throw new Error("Invalid SQcd value " + sqcd);
- }
-
- qcd.noQuantization = spqcdSize === 8;
- qcd.scalarExpounded = scalarExpounded;
- qcd.guardBits = sqcd >> 5;
- spqcds = [];
-
- while (j < length + position) {
- var spqcd = {};
-
- if (spqcdSize === 8) {
- spqcd.epsilon = data[j++] >> 3;
- spqcd.mu = 0;
- } else {
- spqcd.epsilon = data[j] >> 3;
- spqcd.mu = (data[j] & 0x7) << 8 | data[j + 1];
- j += 2;
- }
-
- spqcds.push(spqcd);
- }
-
- qcd.SPqcds = spqcds;
-
- if (context.mainHeader) {
- context.QCD = qcd;
- } else {
- context.currentTile.QCD = qcd;
- context.currentTile.QCC = [];
- }
-
- break;
-
- case 0xff5d:
- length = (0, _core_utils.readUint16)(data, position);
- var qcc = {};
- j = position + 2;
- var cqcc;
-
- if (context.SIZ.Csiz < 257) {
- cqcc = data[j++];
- } else {
- cqcc = (0, _core_utils.readUint16)(data, j);
- j += 2;
- }
-
- sqcd = data[j++];
-
- switch (sqcd & 0x1f) {
- case 0:
- spqcdSize = 8;
- scalarExpounded = true;
- break;
-
- case 1:
- spqcdSize = 16;
- scalarExpounded = false;
- break;
-
- case 2:
- spqcdSize = 16;
- scalarExpounded = true;
- break;
-
- default:
- throw new Error("Invalid SQcd value " + sqcd);
- }
-
- qcc.noQuantization = spqcdSize === 8;
- qcc.scalarExpounded = scalarExpounded;
- qcc.guardBits = sqcd >> 5;
- spqcds = [];
-
- while (j < length + position) {
- spqcd = {};
-
- if (spqcdSize === 8) {
- spqcd.epsilon = data[j++] >> 3;
- spqcd.mu = 0;
- } else {
- spqcd.epsilon = data[j] >> 3;
- spqcd.mu = (data[j] & 0x7) << 8 | data[j + 1];
- j += 2;
- }
-
- spqcds.push(spqcd);
- }
-
- qcc.SPqcds = spqcds;
-
- if (context.mainHeader) {
- context.QCC[cqcc] = qcc;
- } else {
- context.currentTile.QCC[cqcc] = qcc;
- }
-
- break;
-
- case 0xff52:
- length = (0, _core_utils.readUint16)(data, position);
- var cod = {};
- j = position + 2;
- var scod = data[j++];
- cod.entropyCoderWithCustomPrecincts = !!(scod & 1);
- cod.sopMarkerUsed = !!(scod & 2);
- cod.ephMarkerUsed = !!(scod & 4);
- cod.progressionOrder = data[j++];
- cod.layersCount = (0, _core_utils.readUint16)(data, j);
- j += 2;
- cod.multipleComponentTransform = data[j++];
- cod.decompositionLevelsCount = data[j++];
- cod.xcb = (data[j++] & 0xf) + 2;
- cod.ycb = (data[j++] & 0xf) + 2;
- var blockStyle = data[j++];
- cod.selectiveArithmeticCodingBypass = !!(blockStyle & 1);
- cod.resetContextProbabilities = !!(blockStyle & 2);
- cod.terminationOnEachCodingPass = !!(blockStyle & 4);
- cod.verticallyStripe = !!(blockStyle & 8);
- cod.predictableTermination = !!(blockStyle & 16);
- cod.segmentationSymbolUsed = !!(blockStyle & 32);
- cod.reversibleTransformation = data[j++];
-
- if (cod.entropyCoderWithCustomPrecincts) {
- var precinctsSizes = [];
-
- while (j < length + position) {
- var precinctsSize = data[j++];
- precinctsSizes.push({
- PPx: precinctsSize & 0xf,
- PPy: precinctsSize >> 4
- });
- }
-
- cod.precinctsSizes = precinctsSizes;
- }
-
- var unsupported = [];
-
- if (cod.selectiveArithmeticCodingBypass) {
- unsupported.push("selectiveArithmeticCodingBypass");
- }
-
- if (cod.resetContextProbabilities) {
- unsupported.push("resetContextProbabilities");
- }
-
- if (cod.terminationOnEachCodingPass) {
- unsupported.push("terminationOnEachCodingPass");
- }
-
- if (cod.verticallyStripe) {
- unsupported.push("verticallyStripe");
- }
-
- if (cod.predictableTermination) {
- unsupported.push("predictableTermination");
- }
-
- if (unsupported.length > 0) {
- doNotRecover = true;
- throw new Error("Unsupported COD options (" + unsupported.join(", ") + ")");
- }
-
- if (context.mainHeader) {
- context.COD = cod;
- } else {
- context.currentTile.COD = cod;
- context.currentTile.COC = [];
- }
-
- break;
-
- case 0xff90:
- length = (0, _core_utils.readUint16)(data, position);
- tile = {};
- tile.index = (0, _core_utils.readUint16)(data, position + 2);
- tile.length = (0, _core_utils.readUint32)(data, position + 4);
- tile.dataEnd = tile.length + position - 2;
- tile.partIndex = data[position + 8];
- tile.partsCount = data[position + 9];
- context.mainHeader = false;
-
- if (tile.partIndex === 0) {
- tile.COD = context.COD;
- tile.COC = context.COC.slice(0);
- tile.QCD = context.QCD;
- tile.QCC = context.QCC.slice(0);
- }
-
- context.currentTile = tile;
- break;
-
- case 0xff93:
- tile = context.currentTile;
-
- if (tile.partIndex === 0) {
- initializeTile(context, tile.index);
- buildPackets(context);
- }
-
- length = tile.dataEnd - position;
- parseTilePackets(context, data, position, length);
- break;
-
- case 0xff55:
- case 0xff57:
- case 0xff58:
- case 0xff64:
- length = (0, _core_utils.readUint16)(data, position);
- break;
-
- case 0xff53:
- throw new Error("Codestream code 0xFF53 (COC) is not implemented");
-
- default:
- throw new Error("Unknown codestream code: " + code.toString(16));
- }
-
- position += length;
- }
- } catch (e) {
- if (doNotRecover || this.failOnCorruptedImage) {
- throw new JpxError(e.message);
- } else {
- (0, _util.warn)("JPX: Trying to recover from: " + e.message);
- }
+ for (const key of normalAppearance.getKeys()) {
+ if (key !== "Off") {
+ this.data.buttonValue = this._decodeFormValue(key);
+ break;
}
-
- this.tiles = transformComponents(context);
- this.width = context.SIZ.Xsiz - context.SIZ.XOsiz;
- this.height = context.SIZ.Ysiz - context.SIZ.YOsiz;
- this.componentsCount = context.SIZ.Csiz;
}
- };
- function calculateComponentDimensions(component, siz) {
- component.x0 = Math.ceil(siz.XOsiz / component.XRsiz);
- component.x1 = Math.ceil(siz.Xsiz / component.XRsiz);
- component.y0 = Math.ceil(siz.YOsiz / component.YRsiz);
- component.y1 = Math.ceil(siz.Ysiz / component.YRsiz);
- component.width = component.x1 - component.x0;
- component.height = component.y1 - component.y0;
- }
+ this.checkedAppearance = normalAppearance.get(this.data.buttonValue);
+ this.uncheckedAppearance = normalAppearance.get("Off") || null;
- function calculateTileGrids(context, components) {
- var siz = context.SIZ;
- var tile,
- tiles = [];
- var numXtiles = Math.ceil((siz.Xsiz - siz.XTOsiz) / siz.XTsiz);
- var numYtiles = Math.ceil((siz.Ysiz - siz.YTOsiz) / siz.YTsiz);
+ this._streams.push(this.checkedAppearance);
- for (var q = 0; q < numYtiles; q++) {
- for (var p = 0; p < numXtiles; p++) {
- tile = {};
- tile.tx0 = Math.max(siz.XTOsiz + p * siz.XTsiz, siz.XOsiz);
- tile.ty0 = Math.max(siz.YTOsiz + q * siz.YTsiz, siz.YOsiz);
- tile.tx1 = Math.min(siz.XTOsiz + (p + 1) * siz.XTsiz, siz.Xsiz);
- tile.ty1 = Math.min(siz.YTOsiz + (q + 1) * siz.YTsiz, siz.Ysiz);
- tile.width = tile.tx1 - tile.tx0;
- tile.height = tile.ty1 - tile.ty0;
- tile.components = [];
- tiles.push(tile);
- }
+ if (this.uncheckedAppearance) {
+ this._streams.push(this.uncheckedAppearance);
}
- context.tiles = tiles;
- var componentsCount = siz.Csiz;
-
- for (var i = 0, ii = componentsCount; i < ii; i++) {
- var component = components[i];
-
- for (var j = 0, jj = tiles.length; j < jj; j++) {
- var tileComponent = {};
- tile = tiles[j];
- tileComponent.tcx0 = Math.ceil(tile.tx0 / component.XRsiz);
- tileComponent.tcy0 = Math.ceil(tile.ty0 / component.YRsiz);
- tileComponent.tcx1 = Math.ceil(tile.tx1 / component.XRsiz);
- tileComponent.tcy1 = Math.ceil(tile.ty1 / component.YRsiz);
- tileComponent.width = tileComponent.tcx1 - tileComponent.tcx0;
- tileComponent.height = tileComponent.tcy1 - tileComponent.tcy0;
- tile.components[i] = tileComponent;
- }
- }
+ this._fallbackFontDict = this.fallbackFontDict;
}
- function getBlocksDimensions(context, component, r) {
- var codOrCoc = component.codingStyleParameters;
- var result = {};
-
- if (!codOrCoc.entropyCoderWithCustomPrecincts) {
- result.PPx = 15;
- result.PPy = 15;
- } else {
- result.PPx = codOrCoc.precinctsSizes[r].PPx;
- result.PPy = codOrCoc.precinctsSizes[r].PPy;
+ _processPushButton(params) {
+ if (!params.dict.has("A") && !params.dict.has("AA") && !this.data.alternativeText) {
+ (0, _util.warn)("Push buttons without action dictionaries are not supported");
+ return;
}
- result.xcb_ = r > 0 ? Math.min(codOrCoc.xcb, result.PPx - 1) : Math.min(codOrCoc.xcb, result.PPx);
- result.ycb_ = r > 0 ? Math.min(codOrCoc.ycb, result.PPy - 1) : Math.min(codOrCoc.ycb, result.PPy);
- return result;
- }
-
- function buildPrecincts(context, resolution, dimensions) {
- var precinctWidth = 1 << dimensions.PPx;
- var precinctHeight = 1 << dimensions.PPy;
- var isZeroRes = resolution.resLevel === 0;
- var precinctWidthInSubband = 1 << dimensions.PPx + (isZeroRes ? 0 : -1);
- var precinctHeightInSubband = 1 << dimensions.PPy + (isZeroRes ? 0 : -1);
- var numprecinctswide = resolution.trx1 > resolution.trx0 ? Math.ceil(resolution.trx1 / precinctWidth) - Math.floor(resolution.trx0 / precinctWidth) : 0;
- var numprecinctshigh = resolution.try1 > resolution.try0 ? Math.ceil(resolution.try1 / precinctHeight) - Math.floor(resolution.try0 / precinctHeight) : 0;
- var numprecincts = numprecinctswide * numprecinctshigh;
- resolution.precinctParameters = {
- precinctWidth,
- precinctHeight,
- numprecinctswide,
- numprecinctshigh,
- numprecincts,
- precinctWidthInSubband,
- precinctHeightInSubband
- };
- }
-
- function buildCodeblocks(context, subband, dimensions) {
- var xcb_ = dimensions.xcb_;
- var ycb_ = dimensions.ycb_;
- var codeblockWidth = 1 << xcb_;
- var codeblockHeight = 1 << ycb_;
- var cbx0 = subband.tbx0 >> xcb_;
- var cby0 = subband.tby0 >> ycb_;
- var cbx1 = subband.tbx1 + codeblockWidth - 1 >> xcb_;
- var cby1 = subband.tby1 + codeblockHeight - 1 >> ycb_;
- var precinctParameters = subband.resolution.precinctParameters;
- var codeblocks = [];
- var precincts = [];
- var i, j, codeblock, precinctNumber;
-
- for (j = cby0; j < cby1; j++) {
- for (i = cbx0; i < cbx1; i++) {
- codeblock = {
- cbx: i,
- cby: j,
- tbx0: codeblockWidth * i,
- tby0: codeblockHeight * j,
- tbx1: codeblockWidth * (i + 1),
- tby1: codeblockHeight * (j + 1)
- };
- codeblock.tbx0_ = Math.max(subband.tbx0, codeblock.tbx0);
- codeblock.tby0_ = Math.max(subband.tby0, codeblock.tby0);
- codeblock.tbx1_ = Math.min(subband.tbx1, codeblock.tbx1);
- codeblock.tby1_ = Math.min(subband.tby1, codeblock.tby1);
- var pi = Math.floor((codeblock.tbx0_ - subband.tbx0) / precinctParameters.precinctWidthInSubband);
- var pj = Math.floor((codeblock.tby0_ - subband.tby0) / precinctParameters.precinctHeightInSubband);
- precinctNumber = pi + pj * precinctParameters.numprecinctswide;
- codeblock.precinctNumber = precinctNumber;
- codeblock.subbandType = subband.type;
- codeblock.Lblock = 3;
-
- if (codeblock.tbx1_ <= codeblock.tbx0_ || codeblock.tby1_ <= codeblock.tby0_) {
- continue;
- }
+ this.data.isTooltipOnly = !params.dict.has("A") && !params.dict.has("AA");
- codeblocks.push(codeblock);
- var precinct = precincts[precinctNumber];
-
- if (precinct !== undefined) {
- if (i < precinct.cbxMin) {
- precinct.cbxMin = i;
- } else if (i > precinct.cbxMax) {
- precinct.cbxMax = i;
- }
-
- if (j < precinct.cbyMin) {
- precinct.cbxMin = j;
- } else if (j > precinct.cbyMax) {
- precinct.cbyMax = j;
- }
- } else {
- precincts[precinctNumber] = precinct = {
- cbxMin: i,
- cbyMin: j,
- cbxMax: i,
- cbyMax: j
- };
- }
-
- codeblock.precinct = precinct;
- }
- }
-
- subband.codeblockParameters = {
- codeblockWidth: xcb_,
- codeblockHeight: ycb_,
- numcodeblockwide: cbx1 - cbx0 + 1,
- numcodeblockhigh: cby1 - cby0 + 1
- };
- subband.codeblocks = codeblocks;
- subband.precincts = precincts;
+ _catalog.Catalog.parseDestDictionary({
+ destDict: params.dict,
+ resultObj: this.data,
+ docBaseUrl: params.pdfManager.docBaseUrl
+ });
}
- function createPacket(resolution, precinctNumber, layerNumber) {
- var precinctCodeblocks = [];
- var subbands = resolution.subbands;
-
- for (var i = 0, ii = subbands.length; i < ii; i++) {
- var subband = subbands[i];
- var codeblocks = subband.codeblocks;
-
- for (var j = 0, jj = codeblocks.length; j < jj; j++) {
- var codeblock = codeblocks[j];
+ getFieldObject() {
+ let type = "button";
+ let exportValues;
- if (codeblock.precinctNumber !== precinctNumber) {
- continue;
- }
-
- precinctCodeblocks.push(codeblock);
- }
+ if (this.data.checkBox) {
+ type = "checkbox";
+ exportValues = this.data.exportValue;
+ } else if (this.data.radioButton) {
+ type = "radiobutton";
+ exportValues = this.data.buttonValue;
}
return {
- layerNumber,
- codeblocks: precinctCodeblocks
+ id: this.data.id,
+ value: this.data.fieldValue || "Off",
+ defaultValue: this.data.defaultFieldValue,
+ exportValues,
+ editable: !this.data.readOnly,
+ name: this.data.fieldName,
+ rect: this.data.rect,
+ hidden: this.data.hidden,
+ actions: this.data.actions,
+ page: this.data.pageIndex,
+ type
};
}
- function LayerResolutionComponentPositionIterator(context) {
- var siz = context.SIZ;
- var tileIndex = context.currentTile.index;
- var tile = context.tiles[tileIndex];
- var layersCount = tile.codingStyleDefaultParameters.layersCount;
- var componentsCount = siz.Csiz;
- var maxDecompositionLevelsCount = 0;
-
- for (var q = 0; q < componentsCount; q++) {
- maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, tile.components[q].codingStyleParameters.decompositionLevelsCount);
- }
-
- var l = 0,
- r = 0,
- i = 0,
- k = 0;
-
- this.nextPacket = function JpxImage_nextPacket() {
- for (; l < layersCount; l++) {
- for (; r <= maxDecompositionLevelsCount; r++) {
- for (; i < componentsCount; i++) {
- var component = tile.components[i];
-
- if (r > component.codingStyleParameters.decompositionLevelsCount) {
- continue;
- }
-
- var resolution = component.resolutions[r];
- var numprecincts = resolution.precinctParameters.numprecincts;
-
- for (; k < numprecincts;) {
- var packet = createPacket(resolution, k, l);
- k++;
- return packet;
- }
-
- k = 0;
- }
-
- i = 0;
- }
-
- r = 0;
- }
-
- throw new JpxError("Out of packets");
- };
+ get fallbackFontDict() {
+ const dict = new _primitives.Dict();
+ dict.set("BaseFont", _primitives.Name.get("ZapfDingbats"));
+ dict.set("Type", _primitives.Name.get("FallbackType"));
+ dict.set("Subtype", _primitives.Name.get("FallbackType"));
+ dict.set("Encoding", _primitives.Name.get("ZapfDingbatsEncoding"));
+ return (0, _util.shadow)(this, "fallbackFontDict", dict);
}
- function ResolutionLayerComponentPositionIterator(context) {
- var siz = context.SIZ;
- var tileIndex = context.currentTile.index;
- var tile = context.tiles[tileIndex];
- var layersCount = tile.codingStyleDefaultParameters.layersCount;
- var componentsCount = siz.Csiz;
- var maxDecompositionLevelsCount = 0;
-
- for (var q = 0; q < componentsCount; q++) {
- maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, tile.components[q].codingStyleParameters.decompositionLevelsCount);
- }
-
- var r = 0,
- l = 0,
- i = 0,
- k = 0;
-
- this.nextPacket = function JpxImage_nextPacket() {
- for (; r <= maxDecompositionLevelsCount; r++) {
- for (; l < layersCount; l++) {
- for (; i < componentsCount; i++) {
- var component = tile.components[i];
-
- if (r > component.codingStyleParameters.decompositionLevelsCount) {
- continue;
- }
-
- var resolution = component.resolutions[r];
- var numprecincts = resolution.precinctParameters.numprecincts;
-
- for (; k < numprecincts;) {
- var packet = createPacket(resolution, k, l);
- k++;
- return packet;
- }
+}
- k = 0;
- }
+class ChoiceWidgetAnnotation extends WidgetAnnotation {
+ constructor(params) {
+ super(params);
+ this.data.options = [];
+ const options = (0, _core_utils.getInheritableProperty)({
+ dict: params.dict,
+ key: "Opt"
+ });
- i = 0;
- }
+ if (Array.isArray(options)) {
+ const xref = params.xref;
- l = 0;
+ for (let i = 0, ii = options.length; i < ii; i++) {
+ const option = xref.fetchIfRef(options[i]);
+ const isOptionArray = Array.isArray(option);
+ this.data.options[i] = {
+ exportValue: this._decodeFormValue(isOptionArray ? xref.fetchIfRef(option[0]) : option),
+ displayValue: this._decodeFormValue(isOptionArray ? xref.fetchIfRef(option[1]) : option)
+ };
}
-
- throw new JpxError("Out of packets");
- };
- }
-
- function ResolutionPositionComponentLayerIterator(context) {
- var siz = context.SIZ;
- var tileIndex = context.currentTile.index;
- var tile = context.tiles[tileIndex];
- var layersCount = tile.codingStyleDefaultParameters.layersCount;
- var componentsCount = siz.Csiz;
- var l, r, c, p;
- var maxDecompositionLevelsCount = 0;
-
- for (c = 0; c < componentsCount; c++) {
- const component = tile.components[c];
- maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, component.codingStyleParameters.decompositionLevelsCount);
}
- var maxNumPrecinctsInLevel = new Int32Array(maxDecompositionLevelsCount + 1);
-
- for (r = 0; r <= maxDecompositionLevelsCount; ++r) {
- var maxNumPrecincts = 0;
-
- for (c = 0; c < componentsCount; ++c) {
- var resolutions = tile.components[c].resolutions;
-
- if (r < resolutions.length) {
- maxNumPrecincts = Math.max(maxNumPrecincts, resolutions[r].precinctParameters.numprecincts);
- }
- }
-
- maxNumPrecinctsInLevel[r] = maxNumPrecincts;
+ if ((0, _util.isString)(this.data.fieldValue)) {
+ this.data.fieldValue = [this.data.fieldValue];
+ } else if (!this.data.fieldValue) {
+ this.data.fieldValue = [];
}
- l = 0;
- r = 0;
- c = 0;
- p = 0;
-
- this.nextPacket = function JpxImage_nextPacket() {
- for (; r <= maxDecompositionLevelsCount; r++) {
- for (; p < maxNumPrecinctsInLevel[r]; p++) {
- for (; c < componentsCount; c++) {
- const component = tile.components[c];
-
- if (r > component.codingStyleParameters.decompositionLevelsCount) {
- continue;
- }
-
- var resolution = component.resolutions[r];
- var numprecincts = resolution.precinctParameters.numprecincts;
-
- if (p >= numprecincts) {
- continue;
- }
-
- for (; l < layersCount;) {
- var packet = createPacket(resolution, p, l);
- l++;
- return packet;
- }
-
- l = 0;
- }
-
- c = 0;
- }
-
- p = 0;
- }
-
- throw new JpxError("Out of packets");
- };
+ this.data.combo = this.hasFieldFlag(_util.AnnotationFieldFlag.COMBO);
+ this.data.multiSelect = this.hasFieldFlag(_util.AnnotationFieldFlag.MULTISELECT);
+ this._hasText = true;
}
- function PositionComponentResolutionLayerIterator(context) {
- var siz = context.SIZ;
- var tileIndex = context.currentTile.index;
- var tile = context.tiles[tileIndex];
- var layersCount = tile.codingStyleDefaultParameters.layersCount;
- var componentsCount = siz.Csiz;
- var precinctsSizes = getPrecinctSizesInImageScale(tile);
- var precinctsIterationSizes = precinctsSizes;
- var l = 0,
- r = 0,
- c = 0,
- px = 0,
- py = 0;
-
- this.nextPacket = function JpxImage_nextPacket() {
- for (; py < precinctsIterationSizes.maxNumHigh; py++) {
- for (; px < precinctsIterationSizes.maxNumWide; px++) {
- for (; c < componentsCount; c++) {
- var component = tile.components[c];
- var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount;
-
- for (; r <= decompositionLevelsCount; r++) {
- var resolution = component.resolutions[r];
- var sizeInImageScale = precinctsSizes.components[c].resolutions[r];
- var k = getPrecinctIndexIfExist(px, py, sizeInImageScale, precinctsIterationSizes, resolution);
-
- if (k === null) {
- continue;
- }
-
- for (; l < layersCount;) {
- var packet = createPacket(resolution, k, l);
- l++;
- return packet;
- }
-
- l = 0;
- }
-
- r = 0;
- }
-
- c = 0;
- }
-
- px = 0;
- }
-
- throw new JpxError("Out of packets");
+ getFieldObject() {
+ const type = this.data.combo ? "combobox" : "listbox";
+ const value = this.data.fieldValue.length > 0 ? this.data.fieldValue[0] : null;
+ return {
+ id: this.data.id,
+ value,
+ defaultValue: this.data.defaultFieldValue,
+ editable: !this.data.readOnly,
+ name: this.data.fieldName,
+ rect: this.data.rect,
+ numItems: this.data.fieldValue.length,
+ multipleSelection: this.data.multiSelect,
+ hidden: this.data.hidden,
+ actions: this.data.actions,
+ items: this.data.options,
+ page: this.data.pageIndex,
+ type
};
}
- function ComponentPositionResolutionLayerIterator(context) {
- var siz = context.SIZ;
- var tileIndex = context.currentTile.index;
- var tile = context.tiles[tileIndex];
- var layersCount = tile.codingStyleDefaultParameters.layersCount;
- var componentsCount = siz.Csiz;
- var precinctsSizes = getPrecinctSizesInImageScale(tile);
- var l = 0,
- r = 0,
- c = 0,
- px = 0,
- py = 0;
-
- this.nextPacket = function JpxImage_nextPacket() {
- for (; c < componentsCount; ++c) {
- var component = tile.components[c];
- var precinctsIterationSizes = precinctsSizes.components[c];
- var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount;
-
- for (; py < precinctsIterationSizes.maxNumHigh; py++) {
- for (; px < precinctsIterationSizes.maxNumWide; px++) {
- for (; r <= decompositionLevelsCount; r++) {
- var resolution = component.resolutions[r];
- var sizeInImageScale = precinctsIterationSizes.resolutions[r];
- var k = getPrecinctIndexIfExist(px, py, sizeInImageScale, precinctsIterationSizes, resolution);
-
- if (k === null) {
- continue;
- }
-
- for (; l < layersCount;) {
- var packet = createPacket(resolution, k, l);
- l++;
- return packet;
- }
-
- l = 0;
- }
-
- r = 0;
- }
-
- px = 0;
- }
-
- py = 0;
- }
+}
- throw new JpxError("Out of packets");
- };
+class SignatureWidgetAnnotation extends WidgetAnnotation {
+ constructor(params) {
+ super(params);
+ this.data.fieldValue = null;
}
- function getPrecinctIndexIfExist(pxIndex, pyIndex, sizeInImageScale, precinctIterationSizes, resolution) {
- var posX = pxIndex * precinctIterationSizes.minWidth;
- var posY = pyIndex * precinctIterationSizes.minHeight;
-
- if (posX % sizeInImageScale.width !== 0 || posY % sizeInImageScale.height !== 0) {
- return null;
- }
-
- var startPrecinctRowIndex = posY / sizeInImageScale.width * resolution.precinctParameters.numprecinctswide;
- return posX / sizeInImageScale.height + startPrecinctRowIndex;
- }
-
- function getPrecinctSizesInImageScale(tile) {
- var componentsCount = tile.components.length;
- var minWidth = Number.MAX_VALUE;
- var minHeight = Number.MAX_VALUE;
- var maxNumWide = 0;
- var maxNumHigh = 0;
- var sizePerComponent = new Array(componentsCount);
-
- for (var c = 0; c < componentsCount; c++) {
- var component = tile.components[c];
- var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount;
- var sizePerResolution = new Array(decompositionLevelsCount + 1);
- var minWidthCurrentComponent = Number.MAX_VALUE;
- var minHeightCurrentComponent = Number.MAX_VALUE;
- var maxNumWideCurrentComponent = 0;
- var maxNumHighCurrentComponent = 0;
- var scale = 1;
-
- for (var r = decompositionLevelsCount; r >= 0; --r) {
- var resolution = component.resolutions[r];
- var widthCurrentResolution = scale * resolution.precinctParameters.precinctWidth;
- var heightCurrentResolution = scale * resolution.precinctParameters.precinctHeight;
- minWidthCurrentComponent = Math.min(minWidthCurrentComponent, widthCurrentResolution);
- minHeightCurrentComponent = Math.min(minHeightCurrentComponent, heightCurrentResolution);
- maxNumWideCurrentComponent = Math.max(maxNumWideCurrentComponent, resolution.precinctParameters.numprecinctswide);
- maxNumHighCurrentComponent = Math.max(maxNumHighCurrentComponent, resolution.precinctParameters.numprecinctshigh);
- sizePerResolution[r] = {
- width: widthCurrentResolution,
- height: heightCurrentResolution
- };
- scale <<= 1;
- }
-
- minWidth = Math.min(minWidth, minWidthCurrentComponent);
- minHeight = Math.min(minHeight, minHeightCurrentComponent);
- maxNumWide = Math.max(maxNumWide, maxNumWideCurrentComponent);
- maxNumHigh = Math.max(maxNumHigh, maxNumHighCurrentComponent);
- sizePerComponent[c] = {
- resolutions: sizePerResolution,
- minWidth: minWidthCurrentComponent,
- minHeight: minHeightCurrentComponent,
- maxNumWide: maxNumWideCurrentComponent,
- maxNumHigh: maxNumHighCurrentComponent
- };
- }
-
+ getFieldObject() {
return {
- components: sizePerComponent,
- minWidth,
- minHeight,
- maxNumWide,
- maxNumHigh
+ id: this.data.id,
+ value: null,
+ page: this.data.pageIndex,
+ type: "signature"
};
}
- function buildPackets(context) {
- var siz = context.SIZ;
- var tileIndex = context.currentTile.index;
- var tile = context.tiles[tileIndex];
- var componentsCount = siz.Csiz;
-
- for (var c = 0; c < componentsCount; c++) {
- var component = tile.components[c];
- var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount;
- var resolutions = [];
- var subbands = [];
-
- for (var r = 0; r <= decompositionLevelsCount; r++) {
- var blocksDimensions = getBlocksDimensions(context, component, r);
- var resolution = {};
- var scale = 1 << decompositionLevelsCount - r;
- resolution.trx0 = Math.ceil(component.tcx0 / scale);
- resolution.try0 = Math.ceil(component.tcy0 / scale);
- resolution.trx1 = Math.ceil(component.tcx1 / scale);
- resolution.try1 = Math.ceil(component.tcy1 / scale);
- resolution.resLevel = r;
- buildPrecincts(context, resolution, blocksDimensions);
- resolutions.push(resolution);
- var subband;
-
- if (r === 0) {
- subband = {};
- subband.type = "LL";
- subband.tbx0 = Math.ceil(component.tcx0 / scale);
- subband.tby0 = Math.ceil(component.tcy0 / scale);
- subband.tbx1 = Math.ceil(component.tcx1 / scale);
- subband.tby1 = Math.ceil(component.tcy1 / scale);
- subband.resolution = resolution;
- buildCodeblocks(context, subband, blocksDimensions);
- subbands.push(subband);
- resolution.subbands = [subband];
- } else {
- var bscale = 1 << decompositionLevelsCount - r + 1;
- var resolutionSubbands = [];
- subband = {};
- subband.type = "HL";
- subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5);
- subband.tby0 = Math.ceil(component.tcy0 / bscale);
- subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5);
- subband.tby1 = Math.ceil(component.tcy1 / bscale);
- subband.resolution = resolution;
- buildCodeblocks(context, subband, blocksDimensions);
- subbands.push(subband);
- resolutionSubbands.push(subband);
- subband = {};
- subband.type = "LH";
- subband.tbx0 = Math.ceil(component.tcx0 / bscale);
- subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5);
- subband.tbx1 = Math.ceil(component.tcx1 / bscale);
- subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5);
- subband.resolution = resolution;
- buildCodeblocks(context, subband, blocksDimensions);
- subbands.push(subband);
- resolutionSubbands.push(subband);
- subband = {};
- subband.type = "HH";
- subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5);
- subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5);
- subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5);
- subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5);
- subband.resolution = resolution;
- buildCodeblocks(context, subband, blocksDimensions);
- subbands.push(subband);
- resolutionSubbands.push(subband);
- resolution.subbands = resolutionSubbands;
- }
- }
-
- component.resolutions = resolutions;
- component.subbands = subbands;
- }
-
- var progressionOrder = tile.codingStyleDefaultParameters.progressionOrder;
-
- switch (progressionOrder) {
- case 0:
- tile.packetsIterator = new LayerResolutionComponentPositionIterator(context);
- break;
-
- case 1:
- tile.packetsIterator = new ResolutionLayerComponentPositionIterator(context);
- break;
-
- case 2:
- tile.packetsIterator = new ResolutionPositionComponentLayerIterator(context);
- break;
+}
- case 3:
- tile.packetsIterator = new PositionComponentResolutionLayerIterator(context);
- break;
+class TextAnnotation extends MarkupAnnotation {
+ constructor(parameters) {
+ const DEFAULT_ICON_SIZE = 22;
+ super(parameters);
+ const dict = parameters.dict;
+ this.data.annotationType = _util.AnnotationType.TEXT;
- case 4:
- tile.packetsIterator = new ComponentPositionResolutionLayerIterator(context);
- break;
+ if (this.data.hasAppearance) {
+ this.data.name = "NoIcon";
+ } else {
+ this.data.rect[1] = this.data.rect[3] - DEFAULT_ICON_SIZE;
+ this.data.rect[2] = this.data.rect[0] + DEFAULT_ICON_SIZE;
+ this.data.name = dict.has("Name") ? dict.get("Name").name : "Note";
+ }
- default:
- throw new JpxError(`Unsupported progression order ${progressionOrder}`);
+ if (dict.has("State")) {
+ this.data.state = dict.get("State") || null;
+ this.data.stateModel = dict.get("StateModel") || null;
+ } else {
+ this.data.state = null;
+ this.data.stateModel = null;
}
}
- function parseTilePackets(context, data, offset, dataLength) {
- var position = 0;
- var buffer,
- bufferSize = 0,
- skipNextBit = false;
-
- function readBits(count) {
- while (bufferSize < count) {
- var b = data[offset + position];
- position++;
-
- if (skipNextBit) {
- buffer = buffer << 7 | b;
- bufferSize += 7;
- skipNextBit = false;
- } else {
- buffer = buffer << 8 | b;
- bufferSize += 8;
- }
+}
- if (b === 0xff) {
- skipNextBit = true;
- }
- }
+class LinkAnnotation extends Annotation {
+ constructor(params) {
+ super(params);
+ this.data.annotationType = _util.AnnotationType.LINK;
+ const quadPoints = getQuadPoints(params.dict, this.rectangle);
- bufferSize -= count;
- return buffer >>> bufferSize & (1 << count) - 1;
+ if (quadPoints) {
+ this.data.quadPoints = quadPoints;
}
- function skipMarkerIfEqual(value) {
- if (data[offset + position - 1] === 0xff && data[offset + position] === value) {
- skipBytes(1);
- return true;
- } else if (data[offset + position] === 0xff && data[offset + position + 1] === value) {
- skipBytes(2);
- return true;
- }
-
- return false;
- }
+ _catalog.Catalog.parseDestDictionary({
+ destDict: params.dict,
+ resultObj: this.data,
+ docBaseUrl: params.pdfManager.docBaseUrl
+ });
+ }
- function skipBytes(count) {
- position += count;
- }
+}
- function alignToByte() {
- bufferSize = 0;
+class PopupAnnotation extends Annotation {
+ constructor(parameters) {
+ super(parameters);
+ this.data.annotationType = _util.AnnotationType.POPUP;
+ let parentItem = parameters.dict.get("Parent");
- if (skipNextBit) {
- position++;
- skipNextBit = false;
- }
+ if (!parentItem) {
+ (0, _util.warn)("Popup annotation has a missing or invalid parent annotation.");
+ return;
}
- function readCodingpasses() {
- if (readBits(1) === 0) {
- return 1;
- }
-
- if (readBits(1) === 0) {
- return 2;
- }
-
- var value = readBits(2);
-
- if (value < 3) {
- return value + 3;
- }
-
- value = readBits(5);
-
- if (value < 31) {
- return value + 6;
- }
+ const parentSubtype = parentItem.get("Subtype");
+ this.data.parentType = (0, _primitives.isName)(parentSubtype) ? parentSubtype.name : null;
+ const rawParent = parameters.dict.getRaw("Parent");
+ this.data.parentId = (0, _primitives.isRef)(rawParent) ? rawParent.toString() : null;
+ const parentRect = parentItem.getArray("Rect");
- value = readBits(7);
- return value + 37;
+ if (Array.isArray(parentRect) && parentRect.length === 4) {
+ this.data.parentRect = _util.Util.normalizeRect(parentRect);
+ } else {
+ this.data.parentRect = [0, 0, 0, 0];
}
- var tileIndex = context.currentTile.index;
- var tile = context.tiles[tileIndex];
- var sopMarkerUsed = context.COD.sopMarkerUsed;
- var ephMarkerUsed = context.COD.ephMarkerUsed;
- var packetsIterator = tile.packetsIterator;
-
- while (position < dataLength) {
- alignToByte();
-
- if (sopMarkerUsed && skipMarkerIfEqual(0x91)) {
- skipBytes(4);
- }
-
- var packet = packetsIterator.nextPacket();
-
- if (!readBits(1)) {
- continue;
- }
-
- var layerNumber = packet.layerNumber;
- var queue = [],
- codeblock;
-
- for (var i = 0, ii = packet.codeblocks.length; i < ii; i++) {
- codeblock = packet.codeblocks[i];
- var precinct = codeblock.precinct;
- var codeblockColumn = codeblock.cbx - precinct.cbxMin;
- var codeblockRow = codeblock.cby - precinct.cbyMin;
- var codeblockIncluded = false;
- var firstTimeInclusion = false;
- var valueReady;
-
- if (codeblock.included !== undefined) {
- codeblockIncluded = !!readBits(1);
- } else {
- precinct = codeblock.precinct;
- var inclusionTree, zeroBitPlanesTree;
-
- if (precinct.inclusionTree !== undefined) {
- inclusionTree = precinct.inclusionTree;
- } else {
- var width = precinct.cbxMax - precinct.cbxMin + 1;
- var height = precinct.cbyMax - precinct.cbyMin + 1;
- inclusionTree = new InclusionTree(width, height, layerNumber);
- zeroBitPlanesTree = new TagTree(width, height);
- precinct.inclusionTree = inclusionTree;
- precinct.zeroBitPlanesTree = zeroBitPlanesTree;
- }
-
- if (inclusionTree.reset(codeblockColumn, codeblockRow, layerNumber)) {
- while (true) {
- if (readBits(1)) {
- valueReady = !inclusionTree.nextLevel();
-
- if (valueReady) {
- codeblock.included = true;
- codeblockIncluded = firstTimeInclusion = true;
- break;
- }
- } else {
- inclusionTree.incrementValue(layerNumber);
- break;
- }
- }
- }
- }
-
- if (!codeblockIncluded) {
- continue;
- }
-
- if (firstTimeInclusion) {
- zeroBitPlanesTree = precinct.zeroBitPlanesTree;
- zeroBitPlanesTree.reset(codeblockColumn, codeblockRow);
-
- while (true) {
- if (readBits(1)) {
- valueReady = !zeroBitPlanesTree.nextLevel();
-
- if (valueReady) {
- break;
- }
- } else {
- zeroBitPlanesTree.incrementValue();
- }
- }
-
- codeblock.zeroBitPlanes = zeroBitPlanesTree.value;
- }
-
- var codingpasses = readCodingpasses();
-
- while (readBits(1)) {
- codeblock.Lblock++;
- }
-
- var codingpassesLog2 = (0, _core_utils.log2)(codingpasses);
- var bits = (codingpasses < 1 << codingpassesLog2 ? codingpassesLog2 - 1 : codingpassesLog2) + codeblock.Lblock;
- var codedDataLength = readBits(bits);
- queue.push({
- codeblock,
- codingpasses,
- dataLength: codedDataLength
- });
- }
-
- alignToByte();
-
- if (ephMarkerUsed) {
- skipMarkerIfEqual(0x92);
- }
-
- while (queue.length > 0) {
- var packetItem = queue.shift();
- codeblock = packetItem.codeblock;
-
- if (codeblock.data === undefined) {
- codeblock.data = [];
- }
+ const rt = parentItem.get("RT");
- codeblock.data.push({
- data,
- start: offset + position,
- end: offset + position + packetItem.dataLength,
- codingpasses: packetItem.codingpasses
- });
- position += packetItem.dataLength;
- }
+ if ((0, _primitives.isName)(rt, _util.AnnotationReplyType.GROUP)) {
+ parentItem = parentItem.get("IRT");
}
- return position;
- }
-
- function copyCoefficients(coefficients, levelWidth, levelHeight, subband, delta, mb, reversible, segmentationSymbolUsed) {
- var x0 = subband.tbx0;
- var y0 = subband.tby0;
- var width = subband.tbx1 - subband.tbx0;
- var codeblocks = subband.codeblocks;
- var right = subband.type.charAt(0) === "H" ? 1 : 0;
- var bottom = subband.type.charAt(1) === "H" ? levelWidth : 0;
-
- for (var i = 0, ii = codeblocks.length; i < ii; ++i) {
- var codeblock = codeblocks[i];
- var blockWidth = codeblock.tbx1_ - codeblock.tbx0_;
- var blockHeight = codeblock.tby1_ - codeblock.tby0_;
-
- if (blockWidth === 0 || blockHeight === 0) {
- continue;
- }
-
- if (codeblock.data === undefined) {
- continue;
- }
-
- var bitModel, currentCodingpassType;
- bitModel = new BitModel(blockWidth, blockHeight, codeblock.subbandType, codeblock.zeroBitPlanes, mb);
- currentCodingpassType = 2;
- var data = codeblock.data,
- totalLength = 0,
- codingpasses = 0;
- var j, jj, dataItem;
-
- for (j = 0, jj = data.length; j < jj; j++) {
- dataItem = data[j];
- totalLength += dataItem.end - dataItem.start;
- codingpasses += dataItem.codingpasses;
- }
-
- var encodedData = new Uint8Array(totalLength);
- var position = 0;
-
- for (j = 0, jj = data.length; j < jj; j++) {
- dataItem = data[j];
- var chunk = dataItem.data.subarray(dataItem.start, dataItem.end);
- encodedData.set(chunk, position);
- position += chunk.length;
- }
-
- var decoder = new _arithmetic_decoder.ArithmeticDecoder(encodedData, 0, totalLength);
- bitModel.setDecoder(decoder);
-
- for (j = 0; j < codingpasses; j++) {
- switch (currentCodingpassType) {
- case 0:
- bitModel.runSignificancePropagationPass();
- break;
-
- case 1:
- bitModel.runMagnitudeRefinementPass();
- break;
-
- case 2:
- bitModel.runCleanupPass();
-
- if (segmentationSymbolUsed) {
- bitModel.checkSegmentationSymbol();
- }
-
- break;
- }
-
- currentCodingpassType = (currentCodingpassType + 1) % 3;
- }
-
- var offset = codeblock.tbx0_ - x0 + (codeblock.tby0_ - y0) * width;
- var sign = bitModel.coefficentsSign;
- var magnitude = bitModel.coefficentsMagnitude;
- var bitsDecoded = bitModel.bitsDecoded;
- var magnitudeCorrection = reversible ? 0 : 0.5;
- var k, n, nb;
- position = 0;
- var interleave = subband.type !== "LL";
-
- for (j = 0; j < blockHeight; j++) {
- var row = offset / width | 0;
- var levelOffset = 2 * row * (levelWidth - width) + right + bottom;
-
- for (k = 0; k < blockWidth; k++) {
- n = magnitude[position];
-
- if (n !== 0) {
- n = (n + magnitudeCorrection) * delta;
-
- if (sign[position] !== 0) {
- n = -n;
- }
-
- nb = bitsDecoded[position];
- var pos = interleave ? levelOffset + (offset << 1) : offset;
-
- if (reversible && nb >= mb) {
- coefficients[pos] = n;
- } else {
- coefficients[pos] = n * (1 << mb - nb);
- }
- }
-
- offset++;
- position++;
- }
-
- offset += width - blockWidth;
- }
+ if (!parentItem.has("M")) {
+ this.data.modificationDate = null;
+ } else {
+ this.setModificationDate(parentItem.get("M"));
+ this.data.modificationDate = this.modificationDate;
}
- }
-
- function transformTile(context, tile, c) {
- var component = tile.components[c];
- var codingStyleParameters = component.codingStyleParameters;
- var quantizationParameters = component.quantizationParameters;
- var decompositionLevelsCount = codingStyleParameters.decompositionLevelsCount;
- var spqcds = quantizationParameters.SPqcds;
- var scalarExpounded = quantizationParameters.scalarExpounded;
- var guardBits = quantizationParameters.guardBits;
- var segmentationSymbolUsed = codingStyleParameters.segmentationSymbolUsed;
- var precision = context.components[c].precision;
- var reversible = codingStyleParameters.reversibleTransformation;
- var transform = reversible ? new ReversibleTransform() : new IrreversibleTransform();
- var subbandCoefficients = [];
- var b = 0;
-
- for (var i = 0; i <= decompositionLevelsCount; i++) {
- var resolution = component.resolutions[i];
- var width = resolution.trx1 - resolution.trx0;
- var height = resolution.try1 - resolution.try0;
- var coefficients = new Float32Array(width * height);
-
- for (var j = 0, jj = resolution.subbands.length; j < jj; j++) {
- var mu, epsilon;
-
- if (!scalarExpounded) {
- mu = spqcds[0].mu;
- epsilon = spqcds[0].epsilon + (i > 0 ? 1 - i : 0);
- } else {
- mu = spqcds[b].mu;
- epsilon = spqcds[b].epsilon;
- b++;
- }
-
- var subband = resolution.subbands[j];
- var gainLog2 = SubbandsGainLog2[subband.type];
- var delta = reversible ? 1 : 2 ** (precision + gainLog2 - epsilon) * (1 + mu / 2048);
- var mb = guardBits + epsilon - 1;
- copyCoefficients(coefficients, width, height, subband, delta, mb, reversible, segmentationSymbolUsed);
- }
- subbandCoefficients.push({
- width,
- height,
- items: coefficients
- });
+ if (!parentItem.has("C")) {
+ this.data.color = null;
+ } else {
+ this.setColor(parentItem.getArray("C"));
+ this.data.color = this.color;
}
- var result = transform.calculate(subbandCoefficients, component.tcx0, component.tcy0);
- return {
- left: component.tcx0,
- top: component.tcy0,
- width: result.width,
- height: result.height,
- items: result.items
- };
- }
-
- function transformComponents(context) {
- var siz = context.SIZ;
- var components = context.components;
- var componentsCount = siz.Csiz;
- var resultImages = [];
-
- for (var i = 0, ii = context.tiles.length; i < ii; i++) {
- var tile = context.tiles[i];
- var transformedTiles = [];
- var c;
-
- for (c = 0; c < componentsCount; c++) {
- transformedTiles[c] = transformTile(context, tile, c);
- }
-
- var tile0 = transformedTiles[0];
- var out = new Uint8ClampedArray(tile0.items.length * componentsCount);
- var result = {
- left: tile0.left,
- top: tile0.top,
- width: tile0.width,
- height: tile0.height,
- items: out
- };
- var shift, offset;
- var pos = 0,
- j,
- jj,
- y0,
- y1,
- y2;
-
- if (tile.codingStyleDefaultParameters.multipleComponentTransform) {
- var fourComponents = componentsCount === 4;
- var y0items = transformedTiles[0].items;
- var y1items = transformedTiles[1].items;
- var y2items = transformedTiles[2].items;
- var y3items = fourComponents ? transformedTiles[3].items : null;
- shift = components[0].precision - 8;
- offset = (128 << shift) + 0.5;
- var component0 = tile.components[0];
- var alpha01 = componentsCount - 3;
- jj = y0items.length;
-
- if (!component0.codingStyleParameters.reversibleTransformation) {
- for (j = 0; j < jj; j++, pos += alpha01) {
- y0 = y0items[j] + offset;
- y1 = y1items[j];
- y2 = y2items[j];
- out[pos++] = y0 + 1.402 * y2 >> shift;
- out[pos++] = y0 - 0.34413 * y1 - 0.71414 * y2 >> shift;
- out[pos++] = y0 + 1.772 * y1 >> shift;
- }
- } else {
- for (j = 0; j < jj; j++, pos += alpha01) {
- y0 = y0items[j] + offset;
- y1 = y1items[j];
- y2 = y2items[j];
- const g = y0 - (y2 + y1 >> 2);
- out[pos++] = g + y2 >> shift;
- out[pos++] = g >> shift;
- out[pos++] = g + y1 >> shift;
- }
- }
-
- if (fourComponents) {
- for (j = 0, pos = 3; j < jj; j++, pos += 4) {
- out[pos] = y3items[j] + offset >> shift;
- }
- }
- } else {
- for (c = 0; c < componentsCount; c++) {
- var items = transformedTiles[c].items;
- shift = components[c].precision - 8;
- offset = (128 << shift) + 0.5;
+ if (!this.viewable) {
+ const parentFlags = parentItem.get("F");
- for (pos = c, j = 0, jj = items.length; j < jj; j++) {
- out[pos] = items[j] + offset >> shift;
- pos += componentsCount;
- }
- }
+ if (this._isViewable(parentFlags)) {
+ this.setFlags(parentFlags);
}
-
- resultImages.push(result);
}
- return resultImages;
+ this.data.title = (0, _util.stringToPDFString)(parentItem.get("T") || "");
+ this.data.contents = (0, _util.stringToPDFString)(parentItem.get("Contents") || "");
}
- function initializeTile(context, tileIndex) {
- var siz = context.SIZ;
- var componentsCount = siz.Csiz;
- var tile = context.tiles[tileIndex];
-
- for (var c = 0; c < componentsCount; c++) {
- var component = tile.components[c];
- var qcdOrQcc = context.currentTile.QCC[c] !== undefined ? context.currentTile.QCC[c] : context.currentTile.QCD;
- component.quantizationParameters = qcdOrQcc;
- var codOrCoc = context.currentTile.COC[c] !== undefined ? context.currentTile.COC[c] : context.currentTile.COD;
- component.codingStyleParameters = codOrCoc;
- }
+}
- tile.codingStyleDefaultParameters = context.currentTile.COD;
+class FreeTextAnnotation extends MarkupAnnotation {
+ constructor(parameters) {
+ super(parameters);
+ this.data.annotationType = _util.AnnotationType.FREETEXT;
}
- var TagTree = function TagTreeClosure() {
- function TagTree(width, height) {
- var levelsLength = (0, _core_utils.log2)(Math.max(width, height)) + 1;
- this.levels = [];
-
- for (var i = 0; i < levelsLength; i++) {
- var level = {
- width,
- height,
- items: []
- };
- this.levels.push(level);
- width = Math.ceil(width / 2);
- height = Math.ceil(height / 2);
- }
- }
-
- TagTree.prototype = {
- reset: function TagTree_reset(i, j) {
- var currentLevel = 0,
- value = 0,
- level;
-
- while (currentLevel < this.levels.length) {
- level = this.levels[currentLevel];
- var index = i + j * level.width;
-
- if (level.items[index] !== undefined) {
- value = level.items[index];
- break;
- }
-
- level.index = index;
- i >>= 1;
- j >>= 1;
- currentLevel++;
- }
-
- currentLevel--;
- level = this.levels[currentLevel];
- level.items[level.index] = value;
- this.currentLevel = currentLevel;
- delete this.value;
- },
- incrementValue: function TagTree_incrementValue() {
- var level = this.levels[this.currentLevel];
- level.items[level.index]++;
- },
- nextLevel: function TagTree_nextLevel() {
- var currentLevel = this.currentLevel;
- var level = this.levels[currentLevel];
- var value = level.items[level.index];
- currentLevel--;
-
- if (currentLevel < 0) {
- this.value = value;
- return false;
- }
-
- this.currentLevel = currentLevel;
- level = this.levels[currentLevel];
- level.items[level.index] = value;
- return true;
- }
- };
- return TagTree;
- }();
-
- var InclusionTree = function InclusionTreeClosure() {
- function InclusionTree(width, height, defaultValue) {
- var levelsLength = (0, _core_utils.log2)(Math.max(width, height)) + 1;
- this.levels = [];
-
- for (var i = 0; i < levelsLength; i++) {
- var items = new Uint8Array(width * height);
-
- for (var j = 0, jj = items.length; j < jj; j++) {
- items[j] = defaultValue;
- }
-
- var level = {
- width,
- height,
- items
- };
- this.levels.push(level);
- width = Math.ceil(width / 2);
- height = Math.ceil(height / 2);
- }
- }
-
- InclusionTree.prototype = {
- reset: function InclusionTree_reset(i, j, stopValue) {
- var currentLevel = 0;
-
- while (currentLevel < this.levels.length) {
- var level = this.levels[currentLevel];
- var index = i + j * level.width;
- level.index = index;
- var value = level.items[index];
-
- if (value === 0xff) {
- break;
- }
-
- if (value > stopValue) {
- this.currentLevel = currentLevel;
- this.propagateValues();
- return false;
- }
-
- i >>= 1;
- j >>= 1;
- currentLevel++;
- }
-
- this.currentLevel = currentLevel - 1;
- return true;
- },
- incrementValue: function InclusionTree_incrementValue(stopValue) {
- var level = this.levels[this.currentLevel];
- level.items[level.index] = stopValue + 1;
- this.propagateValues();
- },
- propagateValues: function InclusionTree_propagateValues() {
- var levelIndex = this.currentLevel;
- var level = this.levels[levelIndex];
- var currentValue = level.items[level.index];
-
- while (--levelIndex >= 0) {
- level = this.levels[levelIndex];
- level.items[level.index] = currentValue;
- }
- },
- nextLevel: function InclusionTree_nextLevel() {
- var currentLevel = this.currentLevel;
- var level = this.levels[currentLevel];
- var value = level.items[level.index];
- level.items[level.index] = 0xff;
- currentLevel--;
-
- if (currentLevel < 0) {
- return false;
- }
-
- this.currentLevel = currentLevel;
- level = this.levels[currentLevel];
- level.items[level.index] = value;
- return true;
- }
- };
- return InclusionTree;
- }();
+}
- var BitModel = function BitModelClosure() {
- var UNIFORM_CONTEXT = 17;
- var RUNLENGTH_CONTEXT = 18;
- var LLAndLHContextsLabel = new Uint8Array([0, 5, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 1, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8]);
- var HLContextLabel = new Uint8Array([0, 3, 4, 0, 5, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 1, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8]);
- var HHContextLabel = new Uint8Array([0, 1, 2, 0, 1, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 3, 4, 5, 0, 4, 5, 5, 0, 5, 5, 5, 0, 0, 0, 0, 0, 6, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8]);
+class LineAnnotation extends MarkupAnnotation {
+ constructor(parameters) {
+ super(parameters);
+ this.data.annotationType = _util.AnnotationType.LINE;
+ const lineCoordinates = parameters.dict.getArray("L");
+ this.data.lineCoordinates = _util.Util.normalizeRect(lineCoordinates);
- function BitModel(width, height, subband, zeroBitPlanes, mb) {
- this.width = width;
- this.height = height;
- let contextLabelTable;
+ if (!this.appearance) {
+ const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0];
+ const strokeAlpha = parameters.dict.get("CA");
+ let fillColor = null,
+ interiorColor = parameters.dict.getArray("IC");
- if (subband === "HH") {
- contextLabelTable = HHContextLabel;
- } else if (subband === "HL") {
- contextLabelTable = HLContextLabel;
- } else {
- contextLabelTable = LLAndLHContextsLabel;
+ if (interiorColor) {
+ interiorColor = getRgbColor(interiorColor);
+ fillColor = interiorColor ? Array.from(interiorColor).map(c => c / 255) : null;
}
- this.contextLabelTable = contextLabelTable;
- var coefficientCount = width * height;
- this.neighborsSignificance = new Uint8Array(coefficientCount);
- this.coefficentsSign = new Uint8Array(coefficientCount);
- let coefficentsMagnitude;
+ const fillAlpha = fillColor ? strokeAlpha : null;
+ const borderWidth = this.borderStyle.width || 1,
+ borderAdjust = 2 * borderWidth;
+ const bbox = [this.data.lineCoordinates[0] - borderAdjust, this.data.lineCoordinates[1] - borderAdjust, this.data.lineCoordinates[2] + borderAdjust, this.data.lineCoordinates[3] + borderAdjust];
- if (mb > 14) {
- coefficentsMagnitude = new Uint32Array(coefficientCount);
- } else if (mb > 6) {
- coefficentsMagnitude = new Uint16Array(coefficientCount);
- } else {
- coefficentsMagnitude = new Uint8Array(coefficientCount);
+ if (!_util.Util.intersect(this.rectangle, bbox)) {
+ this.rectangle = bbox;
}
- this.coefficentsMagnitude = coefficentsMagnitude;
- this.processingFlags = new Uint8Array(coefficientCount);
- var bitsDecoded = new Uint8Array(coefficientCount);
-
- if (zeroBitPlanes !== 0) {
- for (var i = 0; i < coefficientCount; i++) {
- bitsDecoded[i] = zeroBitPlanes;
+ this._setDefaultAppearance({
+ xref: parameters.xref,
+ extra: `${borderWidth} w`,
+ strokeColor,
+ fillColor,
+ strokeAlpha,
+ fillAlpha,
+ pointsCallback: (buffer, points) => {
+ buffer.push(`${lineCoordinates[0]} ${lineCoordinates[1]} m`, `${lineCoordinates[2]} ${lineCoordinates[3]} l`, "S");
+ return [points[0].x - borderWidth, points[1].x + borderWidth, points[3].y - borderWidth, points[1].y + borderWidth];
}
- }
-
- this.bitsDecoded = bitsDecoded;
- this.reset();
+ });
}
+ }
- BitModel.prototype = {
- setDecoder: function BitModel_setDecoder(decoder) {
- this.decoder = decoder;
- },
- reset: function BitModel_reset() {
- this.contexts = new Int8Array(19);
- this.contexts[0] = 4 << 1 | 0;
- this.contexts[UNIFORM_CONTEXT] = 46 << 1 | 0;
- this.contexts[RUNLENGTH_CONTEXT] = 3 << 1 | 0;
- },
- setNeighborsSignificance: function BitModel_setNeighborsSignificance(row, column, index) {
- var neighborsSignificance = this.neighborsSignificance;
- var width = this.width,
- height = this.height;
- var left = column > 0;
- var right = column + 1 < width;
- var i;
-
- if (row > 0) {
- i = index - width;
-
- if (left) {
- neighborsSignificance[i - 1] += 0x10;
- }
-
- if (right) {
- neighborsSignificance[i + 1] += 0x10;
- }
-
- neighborsSignificance[i] += 0x04;
- }
-
- if (row + 1 < height) {
- i = index + width;
-
- if (left) {
- neighborsSignificance[i - 1] += 0x10;
- }
-
- if (right) {
- neighborsSignificance[i + 1] += 0x10;
- }
-
- neighborsSignificance[i] += 0x04;
- }
-
- if (left) {
- neighborsSignificance[index - 1] += 0x01;
- }
-
- if (right) {
- neighborsSignificance[index + 1] += 0x01;
- }
-
- neighborsSignificance[index] |= 0x80;
- },
- runSignificancePropagationPass: function BitModel_runSignificancePropagationPass() {
- var decoder = this.decoder;
- var width = this.width,
- height = this.height;
- var coefficentsMagnitude = this.coefficentsMagnitude;
- var coefficentsSign = this.coefficentsSign;
- var neighborsSignificance = this.neighborsSignificance;
- var processingFlags = this.processingFlags;
- var contexts = this.contexts;
- var labels = this.contextLabelTable;
- var bitsDecoded = this.bitsDecoded;
- var processedInverseMask = ~1;
- var processedMask = 1;
- var firstMagnitudeBitMask = 2;
-
- for (var i0 = 0; i0 < height; i0 += 4) {
- for (var j = 0; j < width; j++) {
- var index = i0 * width + j;
-
- for (var i1 = 0; i1 < 4; i1++, index += width) {
- var i = i0 + i1;
-
- if (i >= height) {
- break;
- }
-
- processingFlags[index] &= processedInverseMask;
-
- if (coefficentsMagnitude[index] || !neighborsSignificance[index]) {
- continue;
- }
-
- var contextLabel = labels[neighborsSignificance[index]];
- var decision = decoder.readBit(contexts, contextLabel);
-
- if (decision) {
- var sign = this.decodeSignBit(i, j, index);
- coefficentsSign[index] = sign;
- coefficentsMagnitude[index] = 1;
- this.setNeighborsSignificance(i, j, index);
- processingFlags[index] |= firstMagnitudeBitMask;
- }
-
- bitsDecoded[index]++;
- processingFlags[index] |= processedMask;
- }
- }
- }
- },
- decodeSignBit: function BitModel_decodeSignBit(row, column, index) {
- var width = this.width,
- height = this.height;
- var coefficentsMagnitude = this.coefficentsMagnitude;
- var coefficentsSign = this.coefficentsSign;
- var contribution, sign0, sign1, significance1;
- var contextLabel, decoded;
- significance1 = column > 0 && coefficentsMagnitude[index - 1] !== 0;
-
- if (column + 1 < width && coefficentsMagnitude[index + 1] !== 0) {
- sign1 = coefficentsSign[index + 1];
-
- if (significance1) {
- sign0 = coefficentsSign[index - 1];
- contribution = 1 - sign1 - sign0;
- } else {
- contribution = 1 - sign1 - sign1;
- }
- } else if (significance1) {
- sign0 = coefficentsSign[index - 1];
- contribution = 1 - sign0 - sign0;
- } else {
- contribution = 0;
- }
-
- var horizontalContribution = 3 * contribution;
- significance1 = row > 0 && coefficentsMagnitude[index - width] !== 0;
+}
- if (row + 1 < height && coefficentsMagnitude[index + width] !== 0) {
- sign1 = coefficentsSign[index + width];
+class SquareAnnotation extends MarkupAnnotation {
+ constructor(parameters) {
+ super(parameters);
+ this.data.annotationType = _util.AnnotationType.SQUARE;
- if (significance1) {
- sign0 = coefficentsSign[index - width];
- contribution = 1 - sign1 - sign0 + horizontalContribution;
+ if (!this.appearance) {
+ const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0];
+ const strokeAlpha = parameters.dict.get("CA");
+ let fillColor = null,
+ interiorColor = parameters.dict.getArray("IC");
+
+ if (interiorColor) {
+ interiorColor = getRgbColor(interiorColor);
+ fillColor = interiorColor ? Array.from(interiorColor).map(c => c / 255) : null;
+ }
+
+ const fillAlpha = fillColor ? strokeAlpha : null;
+
+ this._setDefaultAppearance({
+ xref: parameters.xref,
+ extra: `${this.borderStyle.width} w`,
+ strokeColor,
+ fillColor,
+ strokeAlpha,
+ fillAlpha,
+ pointsCallback: (buffer, points) => {
+ const x = points[2].x + this.borderStyle.width / 2;
+ const y = points[2].y + this.borderStyle.width / 2;
+ const width = points[3].x - points[2].x - this.borderStyle.width;
+ const height = points[1].y - points[3].y - this.borderStyle.width;
+ buffer.push(`${x} ${y} ${width} ${height} re`);
+
+ if (fillColor) {
+ buffer.push("B");
} else {
- contribution = 1 - sign1 - sign1 + horizontalContribution;
+ buffer.push("S");
}
- } else if (significance1) {
- sign0 = coefficentsSign[index - width];
- contribution = 1 - sign0 - sign0 + horizontalContribution;
- } else {
- contribution = horizontalContribution;
- }
-
- if (contribution >= 0) {
- contextLabel = 9 + contribution;
- decoded = this.decoder.readBit(this.contexts, contextLabel);
- } else {
- contextLabel = 9 - contribution;
- decoded = this.decoder.readBit(this.contexts, contextLabel) ^ 1;
- }
- return decoded;
- },
- runMagnitudeRefinementPass: function BitModel_runMagnitudeRefinementPass() {
- var decoder = this.decoder;
- var width = this.width,
- height = this.height;
- var coefficentsMagnitude = this.coefficentsMagnitude;
- var neighborsSignificance = this.neighborsSignificance;
- var contexts = this.contexts;
- var bitsDecoded = this.bitsDecoded;
- var processingFlags = this.processingFlags;
- var processedMask = 1;
- var firstMagnitudeBitMask = 2;
- var length = width * height;
- var width4 = width * 4;
-
- for (var index0 = 0, indexNext; index0 < length; index0 = indexNext) {
- indexNext = Math.min(length, index0 + width4);
-
- for (var j = 0; j < width; j++) {
- for (var index = index0 + j; index < indexNext; index += width) {
- if (!coefficentsMagnitude[index] || (processingFlags[index] & processedMask) !== 0) {
- continue;
- }
-
- var contextLabel = 16;
-
- if ((processingFlags[index] & firstMagnitudeBitMask) !== 0) {
- processingFlags[index] ^= firstMagnitudeBitMask;
- var significance = neighborsSignificance[index] & 127;
- contextLabel = significance === 0 ? 15 : 14;
- }
-
- var bit = decoder.readBit(contexts, contextLabel);
- coefficentsMagnitude[index] = coefficentsMagnitude[index] << 1 | bit;
- bitsDecoded[index]++;
- processingFlags[index] |= processedMask;
- }
- }
+ return [points[0].x, points[1].x, points[3].y, points[1].y];
}
- },
- runCleanupPass: function BitModel_runCleanupPass() {
- var decoder = this.decoder;
- var width = this.width,
- height = this.height;
- var neighborsSignificance = this.neighborsSignificance;
- var coefficentsMagnitude = this.coefficentsMagnitude;
- var coefficentsSign = this.coefficentsSign;
- var contexts = this.contexts;
- var labels = this.contextLabelTable;
- var bitsDecoded = this.bitsDecoded;
- var processingFlags = this.processingFlags;
- var processedMask = 1;
- var firstMagnitudeBitMask = 2;
- var oneRowDown = width;
- var twoRowsDown = width * 2;
- var threeRowsDown = width * 3;
- var iNext;
-
- for (var i0 = 0; i0 < height; i0 = iNext) {
- iNext = Math.min(i0 + 4, height);
- var indexBase = i0 * width;
- var checkAllEmpty = i0 + 3 < height;
-
- for (var j = 0; j < width; j++) {
- var index0 = indexBase + j;
- var allEmpty = checkAllEmpty && processingFlags[index0] === 0 && processingFlags[index0 + oneRowDown] === 0 && processingFlags[index0 + twoRowsDown] === 0 && processingFlags[index0 + threeRowsDown] === 0 && neighborsSignificance[index0] === 0 && neighborsSignificance[index0 + oneRowDown] === 0 && neighborsSignificance[index0 + twoRowsDown] === 0 && neighborsSignificance[index0 + threeRowsDown] === 0;
- var i1 = 0,
- index = index0;
- var i = i0,
- sign;
-
- if (allEmpty) {
- var hasSignificantCoefficent = decoder.readBit(contexts, RUNLENGTH_CONTEXT);
-
- if (!hasSignificantCoefficent) {
- bitsDecoded[index0]++;
- bitsDecoded[index0 + oneRowDown]++;
- bitsDecoded[index0 + twoRowsDown]++;
- bitsDecoded[index0 + threeRowsDown]++;
- continue;
- }
-
- i1 = decoder.readBit(contexts, UNIFORM_CONTEXT) << 1 | decoder.readBit(contexts, UNIFORM_CONTEXT);
-
- if (i1 !== 0) {
- i = i0 + i1;
- index += i1 * width;
- }
-
- sign = this.decodeSignBit(i, j, index);
- coefficentsSign[index] = sign;
- coefficentsMagnitude[index] = 1;
- this.setNeighborsSignificance(i, j, index);
- processingFlags[index] |= firstMagnitudeBitMask;
- index = index0;
-
- for (var i2 = i0; i2 <= i; i2++, index += width) {
- bitsDecoded[index]++;
- }
-
- i1++;
- }
-
- for (i = i0 + i1; i < iNext; i++, index += width) {
- if (coefficentsMagnitude[index] || (processingFlags[index] & processedMask) !== 0) {
- continue;
- }
-
- var contextLabel = labels[neighborsSignificance[index]];
- var decision = decoder.readBit(contexts, contextLabel);
-
- if (decision === 1) {
- sign = this.decodeSignBit(i, j, index);
- coefficentsSign[index] = sign;
- coefficentsMagnitude[index] = 1;
- this.setNeighborsSignificance(i, j, index);
- processingFlags[index] |= firstMagnitudeBitMask;
- }
-
- bitsDecoded[index]++;
- }
- }
- }
- },
- checkSegmentationSymbol: function BitModel_checkSegmentationSymbol() {
- var decoder = this.decoder;
- var contexts = this.contexts;
- var symbol = decoder.readBit(contexts, UNIFORM_CONTEXT) << 3 | decoder.readBit(contexts, UNIFORM_CONTEXT) << 2 | decoder.readBit(contexts, UNIFORM_CONTEXT) << 1 | decoder.readBit(contexts, UNIFORM_CONTEXT);
-
- if (symbol !== 0xa) {
- throw new JpxError("Invalid segmentation symbol");
- }
- }
- };
- return BitModel;
- }();
-
- var Transform = function TransformClosure() {
- function Transform() {}
-
- Transform.prototype.calculate = function transformCalculate(subbands, u0, v0) {
- var ll = subbands[0];
-
- for (var i = 1, ii = subbands.length; i < ii; i++) {
- ll = this.iterate(ll, subbands[i], u0, v0);
- }
-
- return ll;
- };
-
- Transform.prototype.extend = function extend(buffer, offset, size) {
- var i1 = offset - 1,
- j1 = offset + 1;
- var i2 = offset + size - 2,
- j2 = offset + size;
- buffer[i1--] = buffer[j1++];
- buffer[j2++] = buffer[i2--];
- buffer[i1--] = buffer[j1++];
- buffer[j2++] = buffer[i2--];
- buffer[i1--] = buffer[j1++];
- buffer[j2++] = buffer[i2--];
- buffer[i1] = buffer[j1];
- buffer[j2] = buffer[i2];
- };
-
- Transform.prototype.iterate = function Transform_iterate(ll, hl_lh_hh, u0, v0) {
- var llWidth = ll.width,
- llHeight = ll.height,
- llItems = ll.items;
- var width = hl_lh_hh.width;
- var height = hl_lh_hh.height;
- var items = hl_lh_hh.items;
- var i, j, k, l, u, v;
-
- for (k = 0, i = 0; i < llHeight; i++) {
- l = i * 2 * width;
-
- for (j = 0; j < llWidth; j++, k++, l += 2) {
- items[l] = llItems[k];
- }
- }
-
- llItems = ll.items = null;
- var bufferPadding = 4;
- var rowBuffer = new Float32Array(width + 2 * bufferPadding);
-
- if (width === 1) {
- if ((u0 & 1) !== 0) {
- for (v = 0, k = 0; v < height; v++, k += width) {
- items[k] *= 0.5;
- }
- }
- } else {
- for (v = 0, k = 0; v < height; v++, k += width) {
- rowBuffer.set(items.subarray(k, k + width), bufferPadding);
- this.extend(rowBuffer, bufferPadding, width);
- this.filter(rowBuffer, bufferPadding, width);
- items.set(rowBuffer.subarray(bufferPadding, bufferPadding + width), k);
- }
- }
-
- var numBuffers = 16;
- var colBuffers = [];
-
- for (i = 0; i < numBuffers; i++) {
- colBuffers.push(new Float32Array(height + 2 * bufferPadding));
- }
-
- var b,
- currentBuffer = 0;
- ll = bufferPadding + height;
-
- if (height === 1) {
- if ((v0 & 1) !== 0) {
- for (u = 0; u < width; u++) {
- items[u] *= 0.5;
- }
- }
- } else {
- for (u = 0; u < width; u++) {
- if (currentBuffer === 0) {
- numBuffers = Math.min(width - u, numBuffers);
-
- for (k = u, l = bufferPadding; l < ll; k += width, l++) {
- for (b = 0; b < numBuffers; b++) {
- colBuffers[b][l] = items[k + b];
- }
- }
-
- currentBuffer = numBuffers;
- }
-
- currentBuffer--;
- var buffer = colBuffers[currentBuffer];
- this.extend(buffer, bufferPadding, height);
- this.filter(buffer, bufferPadding, height);
-
- if (currentBuffer === 0) {
- k = u - numBuffers + 1;
-
- for (l = bufferPadding; l < ll; k += width, l++) {
- for (b = 0; b < numBuffers; b++) {
- items[k + b] = colBuffers[b][l];
- }
- }
- }
- }
- }
-
- return {
- width,
- height,
- items
- };
- };
-
- return Transform;
- }();
-
- var IrreversibleTransform = function IrreversibleTransformClosure() {
- function IrreversibleTransform() {
- Transform.call(this);
+ });
}
+ }
- IrreversibleTransform.prototype = Object.create(Transform.prototype);
-
- IrreversibleTransform.prototype.filter = function irreversibleTransformFilter(x, offset, length) {
- var len = length >> 1;
- offset = offset | 0;
- var j, n, current, next;
- var alpha = -1.586134342059924;
- var beta = -0.052980118572961;
- var gamma = 0.882911075530934;
- var delta = 0.443506852043971;
- var K = 1.230174104914001;
- var K_ = 1 / K;
- j = offset - 3;
-
- for (n = len + 4; n--; j += 2) {
- x[j] *= K_;
- }
-
- j = offset - 2;
- current = delta * x[j - 1];
-
- for (n = len + 3; n--; j += 2) {
- next = delta * x[j + 1];
- x[j] = K * x[j] - current - next;
-
- if (n--) {
- j += 2;
- current = delta * x[j + 1];
- x[j] = K * x[j] - current - next;
- } else {
- break;
- }
- }
-
- j = offset - 1;
- current = gamma * x[j - 1];
-
- for (n = len + 2; n--; j += 2) {
- next = gamma * x[j + 1];
- x[j] -= current + next;
-
- if (n--) {
- j += 2;
- current = gamma * x[j + 1];
- x[j] -= current + next;
- } else {
- break;
- }
- }
-
- j = offset;
- current = beta * x[j - 1];
-
- for (n = len + 1; n--; j += 2) {
- next = beta * x[j + 1];
- x[j] -= current + next;
-
- if (n--) {
- j += 2;
- current = beta * x[j + 1];
- x[j] -= current + next;
- } else {
- break;
- }
- }
-
- if (len !== 0) {
- j = offset + 1;
- current = alpha * x[j - 1];
+}
- for (n = len; n--; j += 2) {
- next = alpha * x[j + 1];
- x[j] -= current + next;
+class CircleAnnotation extends MarkupAnnotation {
+ constructor(parameters) {
+ super(parameters);
+ this.data.annotationType = _util.AnnotationType.CIRCLE;
- if (n--) {
- j += 2;
- current = alpha * x[j + 1];
- x[j] -= current + next;
+ if (!this.appearance) {
+ const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0];
+ const strokeAlpha = parameters.dict.get("CA");
+ let fillColor = null;
+ let interiorColor = parameters.dict.getArray("IC");
+
+ if (interiorColor) {
+ interiorColor = getRgbColor(interiorColor);
+ fillColor = interiorColor ? Array.from(interiorColor).map(c => c / 255) : null;
+ }
+
+ const fillAlpha = fillColor ? strokeAlpha : null;
+ const controlPointsDistance = 4 / 3 * Math.tan(Math.PI / (2 * 4));
+
+ this._setDefaultAppearance({
+ xref: parameters.xref,
+ extra: `${this.borderStyle.width} w`,
+ strokeColor,
+ fillColor,
+ strokeAlpha,
+ fillAlpha,
+ pointsCallback: (buffer, points) => {
+ const x0 = points[0].x + this.borderStyle.width / 2;
+ const y0 = points[0].y - this.borderStyle.width / 2;
+ const x1 = points[3].x - this.borderStyle.width / 2;
+ const y1 = points[3].y + this.borderStyle.width / 2;
+ const xMid = x0 + (x1 - x0) / 2;
+ const yMid = y0 + (y1 - y0) / 2;
+ const xOffset = (x1 - x0) / 2 * controlPointsDistance;
+ const yOffset = (y1 - y0) / 2 * controlPointsDistance;
+ buffer.push(`${xMid} ${y1} m`, `${xMid + xOffset} ${y1} ${x1} ${yMid + yOffset} ${x1} ${yMid} c`, `${x1} ${yMid - yOffset} ${xMid + xOffset} ${y0} ${xMid} ${y0} c`, `${xMid - xOffset} ${y0} ${x0} ${yMid - yOffset} ${x0} ${yMid} c`, `${x0} ${yMid + yOffset} ${xMid - xOffset} ${y1} ${xMid} ${y1} c`, "h");
+
+ if (fillColor) {
+ buffer.push("B");
} else {
- break;
+ buffer.push("S");
}
- }
- }
- };
-
- return IrreversibleTransform;
- }();
-
- var ReversibleTransform = function ReversibleTransformClosure() {
- function ReversibleTransform() {
- Transform.call(this);
- }
-
- ReversibleTransform.prototype = Object.create(Transform.prototype);
- ReversibleTransform.prototype.filter = function reversibleTransformFilter(x, offset, length) {
- var len = length >> 1;
- offset = offset | 0;
- var j, n;
-
- for (j = offset, n = len + 1; n--; j += 2) {
- x[j] -= x[j - 1] + x[j + 1] + 2 >> 2;
- }
-
- for (j = offset + 1, n = len; n--; j += 2) {
- x[j] += x[j - 1] + x[j + 1] >> 1;
- }
- };
-
- return ReversibleTransform;
- }();
-
- return JpxImage;
-}();
-
-exports.JpxImage = JpxImage;
-
-/***/ }),
-/* 22 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.calculateSHA512 = exports.calculateSHA384 = exports.calculateSHA256 = exports.calculateMD5 = exports.PDF20 = exports.PDF17 = exports.CipherTransformFactory = exports.ARCFourCipher = exports.AES256Cipher = exports.AES128Cipher = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var _primitives = __w_pdfjs_require__(5);
-
-var _stream = __w_pdfjs_require__(12);
-
-var ARCFourCipher = function ARCFourCipherClosure() {
- function ARCFourCipher(key) {
- this.a = 0;
- this.b = 0;
- var s = new Uint8Array(256);
- var i,
- j = 0,
- tmp,
- keyLength = key.length;
-
- for (i = 0; i < 256; ++i) {
- s[i] = i;
- }
-
- for (i = 0; i < 256; ++i) {
- tmp = s[i];
- j = j + tmp + key[i % keyLength] & 0xff;
- s[i] = s[j];
- s[j] = tmp;
- }
-
- this.s = s;
- }
-
- ARCFourCipher.prototype = {
- encryptBlock: function ARCFourCipher_encryptBlock(data) {
- var i,
- n = data.length,
- tmp,
- tmp2;
- var a = this.a,
- b = this.b,
- s = this.s;
- var output = new Uint8Array(n);
-
- for (i = 0; i < n; ++i) {
- a = a + 1 & 0xff;
- tmp = s[a];
- b = b + tmp & 0xff;
- tmp2 = s[b];
- s[a] = tmp2;
- s[b] = tmp;
- output[i] = data[i] ^ s[tmp + tmp2 & 0xff];
- }
-
- this.a = a;
- this.b = b;
- return output;
- }
- };
- ARCFourCipher.prototype.decryptBlock = ARCFourCipher.prototype.encryptBlock;
- ARCFourCipher.prototype.encrypt = ARCFourCipher.prototype.encryptBlock;
- return ARCFourCipher;
-}();
-
-exports.ARCFourCipher = ARCFourCipher;
-
-var calculateMD5 = function calculateMD5Closure() {
- var r = new Uint8Array([7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21]);
- var k = new Int32Array([-680876936, -389564586, 606105819, -1044525330, -176418897, 1200080426, -1473231341, -45705983, 1770035416, -1958414417, -42063, -1990404162, 1804603682, -40341101, -1502002290, 1236535329, -165796510, -1069501632, 643717713, -373897302, -701558691, 38016083, -660478335, -405537848, 568446438, -1019803690, -187363961, 1163531501, -1444681467, -51403784, 1735328473, -1926607734, -378558, -2022574463, 1839030562, -35309556, -1530992060, 1272893353, -155497632, -1094730640, 681279174, -358537222, -722521979, 76029189, -640364487, -421815835, 530742520, -995338651, -198630844, 1126891415, -1416354905, -57434055, 1700485571, -1894986606, -1051523, -2054922799, 1873313359, -30611744, -1560198380, 1309151649, -145523070, -1120210379, 718787259, -343485551]);
-
- function hash(data, offset, length) {
- var h0 = 1732584193,
- h1 = -271733879,
- h2 = -1732584194,
- h3 = 271733878;
- var paddedLength = length + 72 & ~63;
- var padded = new Uint8Array(paddedLength);
- var i, j, n;
-
- for (i = 0; i < length; ++i) {
- padded[i] = data[offset++];
- }
-
- padded[i++] = 0x80;
- n = paddedLength - 8;
-
- while (i < n) {
- padded[i++] = 0;
- }
-
- padded[i++] = length << 3 & 0xff;
- padded[i++] = length >> 5 & 0xff;
- padded[i++] = length >> 13 & 0xff;
- padded[i++] = length >> 21 & 0xff;
- padded[i++] = length >>> 29 & 0xff;
- padded[i++] = 0;
- padded[i++] = 0;
- padded[i++] = 0;
- var w = new Int32Array(16);
-
- for (i = 0; i < paddedLength;) {
- for (j = 0; j < 16; ++j, i += 4) {
- w[j] = padded[i] | padded[i + 1] << 8 | padded[i + 2] << 16 | padded[i + 3] << 24;
- }
-
- var a = h0,
- b = h1,
- c = h2,
- d = h3,
- f,
- g;
-
- for (j = 0; j < 64; ++j) {
- if (j < 16) {
- f = b & c | ~b & d;
- g = j;
- } else if (j < 32) {
- f = d & b | ~d & c;
- g = 5 * j + 1 & 15;
- } else if (j < 48) {
- f = b ^ c ^ d;
- g = 3 * j + 5 & 15;
- } else {
- f = c ^ (b | ~d);
- g = 7 * j & 15;
+ return [points[0].x, points[1].x, points[3].y, points[1].y];
}
-
- var tmp = d,
- rotateArg = a + f + k[j] + w[g] | 0,
- rotate = r[j];
- d = c;
- c = b;
- b = b + (rotateArg << rotate | rotateArg >>> 32 - rotate) | 0;
- a = tmp;
- }
-
- h0 = h0 + a | 0;
- h1 = h1 + b | 0;
- h2 = h2 + c | 0;
- h3 = h3 + d | 0;
- }
-
- return new Uint8Array([h0 & 0xFF, h0 >> 8 & 0xFF, h0 >> 16 & 0xFF, h0 >>> 24 & 0xFF, h1 & 0xFF, h1 >> 8 & 0xFF, h1 >> 16 & 0xFF, h1 >>> 24 & 0xFF, h2 & 0xFF, h2 >> 8 & 0xFF, h2 >> 16 & 0xFF, h2 >>> 24 & 0xFF, h3 & 0xFF, h3 >> 8 & 0xFF, h3 >> 16 & 0xFF, h3 >>> 24 & 0xFF]);
- }
-
- return hash;
-}();
-
-exports.calculateMD5 = calculateMD5;
-
-var Word64 = function Word64Closure() {
- function Word64(highInteger, lowInteger) {
- this.high = highInteger | 0;
- this.low = lowInteger | 0;
- }
-
- Word64.prototype = {
- and: function Word64_and(word) {
- this.high &= word.high;
- this.low &= word.low;
- },
- xor: function Word64_xor(word) {
- this.high ^= word.high;
- this.low ^= word.low;
- },
- or: function Word64_or(word) {
- this.high |= word.high;
- this.low |= word.low;
- },
- shiftRight: function Word64_shiftRight(places) {
- if (places >= 32) {
- this.low = this.high >>> places - 32 | 0;
- this.high = 0;
- } else {
- this.low = this.low >>> places | this.high << 32 - places;
- this.high = this.high >>> places | 0;
- }
- },
- shiftLeft: function Word64_shiftLeft(places) {
- if (places >= 32) {
- this.high = this.low << places - 32;
- this.low = 0;
- } else {
- this.high = this.high << places | this.low >>> 32 - places;
- this.low = this.low << places;
- }
- },
- rotateRight: function Word64_rotateRight(places) {
- var low, high;
-
- if (places & 32) {
- high = this.low;
- low = this.high;
- } else {
- low = this.low;
- high = this.high;
- }
-
- places &= 31;
- this.low = low >>> places | high << 32 - places;
- this.high = high >>> places | low << 32 - places;
- },
- not: function Word64_not() {
- this.high = ~this.high;
- this.low = ~this.low;
- },
- add: function Word64_add(word) {
- var lowAdd = (this.low >>> 0) + (word.low >>> 0);
- var highAdd = (this.high >>> 0) + (word.high >>> 0);
-
- if (lowAdd > 0xffffffff) {
- highAdd += 1;
- }
-
- this.low = lowAdd | 0;
- this.high = highAdd | 0;
- },
- copyTo: function Word64_copyTo(bytes, offset) {
- bytes[offset] = this.high >>> 24 & 0xff;
- bytes[offset + 1] = this.high >> 16 & 0xff;
- bytes[offset + 2] = this.high >> 8 & 0xff;
- bytes[offset + 3] = this.high & 0xff;
- bytes[offset + 4] = this.low >>> 24 & 0xff;
- bytes[offset + 5] = this.low >> 16 & 0xff;
- bytes[offset + 6] = this.low >> 8 & 0xff;
- bytes[offset + 7] = this.low & 0xff;
- },
- assign: function Word64_assign(word) {
- this.high = word.high;
- this.low = word.low;
- }
- };
- return Word64;
-}();
-
-var calculateSHA256 = function calculateSHA256Closure() {
- function rotr(x, n) {
- return x >>> n | x << 32 - n;
- }
-
- function ch(x, y, z) {
- return x & y ^ ~x & z;
- }
-
- function maj(x, y, z) {
- return x & y ^ x & z ^ y & z;
- }
-
- function sigma(x) {
- return rotr(x, 2) ^ rotr(x, 13) ^ rotr(x, 22);
- }
-
- function sigmaPrime(x) {
- return rotr(x, 6) ^ rotr(x, 11) ^ rotr(x, 25);
- }
-
- function littleSigma(x) {
- return rotr(x, 7) ^ rotr(x, 18) ^ x >>> 3;
- }
-
- function littleSigmaPrime(x) {
- return rotr(x, 17) ^ rotr(x, 19) ^ x >>> 10;
- }
-
- var k = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2];
-
- function hash(data, offset, length) {
- var h0 = 0x6a09e667,
- h1 = 0xbb67ae85,
- h2 = 0x3c6ef372,
- h3 = 0xa54ff53a,
- h4 = 0x510e527f,
- h5 = 0x9b05688c,
- h6 = 0x1f83d9ab,
- h7 = 0x5be0cd19;
- var paddedLength = Math.ceil((length + 9) / 64) * 64;
- var padded = new Uint8Array(paddedLength);
- var i, j, n;
-
- for (i = 0; i < length; ++i) {
- padded[i] = data[offset++];
- }
-
- padded[i++] = 0x80;
- n = paddedLength - 8;
-
- while (i < n) {
- padded[i++] = 0;
- }
-
- padded[i++] = 0;
- padded[i++] = 0;
- padded[i++] = 0;
- padded[i++] = length >>> 29 & 0xff;
- padded[i++] = length >> 21 & 0xff;
- padded[i++] = length >> 13 & 0xff;
- padded[i++] = length >> 5 & 0xff;
- padded[i++] = length << 3 & 0xff;
- var w = new Uint32Array(64);
-
- for (i = 0; i < paddedLength;) {
- for (j = 0; j < 16; ++j) {
- w[j] = padded[i] << 24 | padded[i + 1] << 16 | padded[i + 2] << 8 | padded[i + 3];
- i += 4;
- }
-
- for (j = 16; j < 64; ++j) {
- w[j] = littleSigmaPrime(w[j - 2]) + w[j - 7] + littleSigma(w[j - 15]) + w[j - 16] | 0;
- }
-
- var a = h0,
- b = h1,
- c = h2,
- d = h3,
- e = h4,
- f = h5,
- g = h6,
- h = h7,
- t1,
- t2;
-
- for (j = 0; j < 64; ++j) {
- t1 = h + sigmaPrime(e) + ch(e, f, g) + k[j] + w[j];
- t2 = sigma(a) + maj(a, b, c);
- h = g;
- g = f;
- f = e;
- e = d + t1 | 0;
- d = c;
- c = b;
- b = a;
- a = t1 + t2 | 0;
- }
-
- h0 = h0 + a | 0;
- h1 = h1 + b | 0;
- h2 = h2 + c | 0;
- h3 = h3 + d | 0;
- h4 = h4 + e | 0;
- h5 = h5 + f | 0;
- h6 = h6 + g | 0;
- h7 = h7 + h | 0;
+ });
}
-
- return new Uint8Array([h0 >> 24 & 0xFF, h0 >> 16 & 0xFF, h0 >> 8 & 0xFF, h0 & 0xFF, h1 >> 24 & 0xFF, h1 >> 16 & 0xFF, h1 >> 8 & 0xFF, h1 & 0xFF, h2 >> 24 & 0xFF, h2 >> 16 & 0xFF, h2 >> 8 & 0xFF, h2 & 0xFF, h3 >> 24 & 0xFF, h3 >> 16 & 0xFF, h3 >> 8 & 0xFF, h3 & 0xFF, h4 >> 24 & 0xFF, h4 >> 16 & 0xFF, h4 >> 8 & 0xFF, h4 & 0xFF, h5 >> 24 & 0xFF, h5 >> 16 & 0xFF, h5 >> 8 & 0xFF, h5 & 0xFF, h6 >> 24 & 0xFF, h6 >> 16 & 0xFF, h6 >> 8 & 0xFF, h6 & 0xFF, h7 >> 24 & 0xFF, h7 >> 16 & 0xFF, h7 >> 8 & 0xFF, h7 & 0xFF]);
}
- return hash;
-}();
-
-exports.calculateSHA256 = calculateSHA256;
-
-var calculateSHA512 = function calculateSHA512Closure() {
- function ch(result, x, y, z, tmp) {
- result.assign(x);
- result.and(y);
- tmp.assign(x);
- tmp.not();
- tmp.and(z);
- result.xor(tmp);
- }
-
- function maj(result, x, y, z, tmp) {
- result.assign(x);
- result.and(y);
- tmp.assign(x);
- tmp.and(z);
- result.xor(tmp);
- tmp.assign(y);
- tmp.and(z);
- result.xor(tmp);
- }
-
- function sigma(result, x, tmp) {
- result.assign(x);
- result.rotateRight(28);
- tmp.assign(x);
- tmp.rotateRight(34);
- result.xor(tmp);
- tmp.assign(x);
- tmp.rotateRight(39);
- result.xor(tmp);
- }
-
- function sigmaPrime(result, x, tmp) {
- result.assign(x);
- result.rotateRight(14);
- tmp.assign(x);
- tmp.rotateRight(18);
- result.xor(tmp);
- tmp.assign(x);
- tmp.rotateRight(41);
- result.xor(tmp);
- }
-
- function littleSigma(result, x, tmp) {
- result.assign(x);
- result.rotateRight(1);
- tmp.assign(x);
- tmp.rotateRight(8);
- result.xor(tmp);
- tmp.assign(x);
- tmp.shiftRight(7);
- result.xor(tmp);
- }
-
- function littleSigmaPrime(result, x, tmp) {
- result.assign(x);
- result.rotateRight(19);
- tmp.assign(x);
- tmp.rotateRight(61);
- result.xor(tmp);
- tmp.assign(x);
- tmp.shiftRight(6);
- result.xor(tmp);
- }
-
- var k = [new Word64(0x428a2f98, 0xd728ae22), new Word64(0x71374491, 0x23ef65cd), new Word64(0xb5c0fbcf, 0xec4d3b2f), new Word64(0xe9b5dba5, 0x8189dbbc), new Word64(0x3956c25b, 0xf348b538), new Word64(0x59f111f1, 0xb605d019), new Word64(0x923f82a4, 0xaf194f9b), new Word64(0xab1c5ed5, 0xda6d8118), new Word64(0xd807aa98, 0xa3030242), new Word64(0x12835b01, 0x45706fbe), new Word64(0x243185be, 0x4ee4b28c), new Word64(0x550c7dc3, 0xd5ffb4e2), new Word64(0x72be5d74, 0xf27b896f), new Word64(0x80deb1fe, 0x3b1696b1), new Word64(0x9bdc06a7, 0x25c71235), new Word64(0xc19bf174, 0xcf692694), new Word64(0xe49b69c1, 0x9ef14ad2), new Word64(0xefbe4786, 0x384f25e3), new Word64(0x0fc19dc6, 0x8b8cd5b5), new Word64(0x240ca1cc, 0x77ac9c65), new Word64(0x2de92c6f, 0x592b0275), new Word64(0x4a7484aa, 0x6ea6e483), new Word64(0x5cb0a9dc, 0xbd41fbd4), new Word64(0x76f988da, 0x831153b5), new Word64(0x983e5152, 0xee66dfab), new Word64(0xa831c66d, 0x2db43210), new Word64(0xb00327c8, 0x98fb213f), new Word64(0xbf597fc7, 0xbeef0ee4), new Word64(0xc6e00bf3, 0x3da88fc2), new Word64(0xd5a79147, 0x930aa725), new Word64(0x06ca6351, 0xe003826f), new Word64(0x14292967, 0x0a0e6e70), new Word64(0x27b70a85, 0x46d22ffc), new Word64(0x2e1b2138, 0x5c26c926), new Word64(0x4d2c6dfc, 0x5ac42aed), new Word64(0x53380d13, 0x9d95b3df), new Word64(0x650a7354, 0x8baf63de), new Word64(0x766a0abb, 0x3c77b2a8), new Word64(0x81c2c92e, 0x47edaee6), new Word64(0x92722c85, 0x1482353b), new Word64(0xa2bfe8a1, 0x4cf10364), new Word64(0xa81a664b, 0xbc423001), new Word64(0xc24b8b70, 0xd0f89791), new Word64(0xc76c51a3, 0x0654be30), new Word64(0xd192e819, 0xd6ef5218), new Word64(0xd6990624, 0x5565a910), new Word64(0xf40e3585, 0x5771202a), new Word64(0x106aa070, 0x32bbd1b8), new Word64(0x19a4c116, 0xb8d2d0c8), new Word64(0x1e376c08, 0x5141ab53), new Word64(0x2748774c, 0xdf8eeb99), new Word64(0x34b0bcb5, 0xe19b48a8), new Word64(0x391c0cb3, 0xc5c95a63), new Word64(0x4ed8aa4a, 0xe3418acb), new Word64(0x5b9cca4f, 0x7763e373), new Word64(0x682e6ff3, 0xd6b2b8a3), new Word64(0x748f82ee, 0x5defb2fc), new Word64(0x78a5636f, 0x43172f60), new Word64(0x84c87814, 0xa1f0ab72), new Word64(0x8cc70208, 0x1a6439ec), new Word64(0x90befffa, 0x23631e28), new Word64(0xa4506ceb, 0xde82bde9), new Word64(0xbef9a3f7, 0xb2c67915), new Word64(0xc67178f2, 0xe372532b), new Word64(0xca273ece, 0xea26619c), new Word64(0xd186b8c7, 0x21c0c207), new Word64(0xeada7dd6, 0xcde0eb1e), new Word64(0xf57d4f7f, 0xee6ed178), new Word64(0x06f067aa, 0x72176fba), new Word64(0x0a637dc5, 0xa2c898a6), new Word64(0x113f9804, 0xbef90dae), new Word64(0x1b710b35, 0x131c471b), new Word64(0x28db77f5, 0x23047d84), new Word64(0x32caab7b, 0x40c72493), new Word64(0x3c9ebe0a, 0x15c9bebc), new Word64(0x431d67c4, 0x9c100d4c), new Word64(0x4cc5d4be, 0xcb3e42b6), new Word64(0x597f299c, 0xfc657e2a), new Word64(0x5fcb6fab, 0x3ad6faec), new Word64(0x6c44198c, 0x4a475817)];
-
- function hash(data, offset, length, mode384) {
- mode384 = !!mode384;
- var h0, h1, h2, h3, h4, h5, h6, h7;
-
- if (!mode384) {
- h0 = new Word64(0x6a09e667, 0xf3bcc908);
- h1 = new Word64(0xbb67ae85, 0x84caa73b);
- h2 = new Word64(0x3c6ef372, 0xfe94f82b);
- h3 = new Word64(0xa54ff53a, 0x5f1d36f1);
- h4 = new Word64(0x510e527f, 0xade682d1);
- h5 = new Word64(0x9b05688c, 0x2b3e6c1f);
- h6 = new Word64(0x1f83d9ab, 0xfb41bd6b);
- h7 = new Word64(0x5be0cd19, 0x137e2179);
- } else {
- h0 = new Word64(0xcbbb9d5d, 0xc1059ed8);
- h1 = new Word64(0x629a292a, 0x367cd507);
- h2 = new Word64(0x9159015a, 0x3070dd17);
- h3 = new Word64(0x152fecd8, 0xf70e5939);
- h4 = new Word64(0x67332667, 0xffc00b31);
- h5 = new Word64(0x8eb44a87, 0x68581511);
- h6 = new Word64(0xdb0c2e0d, 0x64f98fa7);
- h7 = new Word64(0x47b5481d, 0xbefa4fa4);
- }
-
- var paddedLength = Math.ceil((length + 17) / 128) * 128;
- var padded = new Uint8Array(paddedLength);
- var i, j, n;
-
- for (i = 0; i < length; ++i) {
- padded[i] = data[offset++];
- }
+}
- padded[i++] = 0x80;
- n = paddedLength - 16;
+class PolylineAnnotation extends MarkupAnnotation {
+ constructor(parameters) {
+ super(parameters);
+ this.data.annotationType = _util.AnnotationType.POLYLINE;
+ this.data.vertices = [];
+ const rawVertices = parameters.dict.getArray("Vertices");
- while (i < n) {
- padded[i++] = 0;
+ if (!Array.isArray(rawVertices)) {
+ return;
}
- padded[i++] = 0;
- padded[i++] = 0;
- padded[i++] = 0;
- padded[i++] = 0;
- padded[i++] = 0;
- padded[i++] = 0;
- padded[i++] = 0;
- padded[i++] = 0;
- padded[i++] = 0;
- padded[i++] = 0;
- padded[i++] = 0;
- padded[i++] = length >>> 29 & 0xff;
- padded[i++] = length >> 21 & 0xff;
- padded[i++] = length >> 13 & 0xff;
- padded[i++] = length >> 5 & 0xff;
- padded[i++] = length << 3 & 0xff;
- var w = new Array(80);
-
- for (i = 0; i < 80; i++) {
- w[i] = new Word64(0, 0);
+ for (let i = 0, ii = rawVertices.length; i < ii; i += 2) {
+ this.data.vertices.push({
+ x: rawVertices[i],
+ y: rawVertices[i + 1]
+ });
}
- var a = new Word64(0, 0),
- b = new Word64(0, 0),
- c = new Word64(0, 0);
- var d = new Word64(0, 0),
- e = new Word64(0, 0),
- f = new Word64(0, 0);
- var g = new Word64(0, 0),
- h = new Word64(0, 0);
- var t1 = new Word64(0, 0),
- t2 = new Word64(0, 0);
- var tmp1 = new Word64(0, 0),
- tmp2 = new Word64(0, 0),
- tmp3;
+ if (!this.appearance) {
+ const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0];
+ const strokeAlpha = parameters.dict.get("CA");
+ const borderWidth = this.borderStyle.width || 1,
+ borderAdjust = 2 * borderWidth;
+ const bbox = [Infinity, Infinity, -Infinity, -Infinity];
- for (i = 0; i < paddedLength;) {
- for (j = 0; j < 16; ++j) {
- w[j].high = padded[i] << 24 | padded[i + 1] << 16 | padded[i + 2] << 8 | padded[i + 3];
- w[j].low = padded[i + 4] << 24 | padded[i + 5] << 16 | padded[i + 6] << 8 | padded[i + 7];
- i += 8;
+ for (const vertex of this.data.vertices) {
+ bbox[0] = Math.min(bbox[0], vertex.x - borderAdjust);
+ bbox[1] = Math.min(bbox[1], vertex.y - borderAdjust);
+ bbox[2] = Math.max(bbox[2], vertex.x + borderAdjust);
+ bbox[3] = Math.max(bbox[3], vertex.y + borderAdjust);
}
- for (j = 16; j < 80; ++j) {
- tmp3 = w[j];
- littleSigmaPrime(tmp3, w[j - 2], tmp2);
- tmp3.add(w[j - 7]);
- littleSigma(tmp1, w[j - 15], tmp2);
- tmp3.add(tmp1);
- tmp3.add(w[j - 16]);
+ if (!_util.Util.intersect(this.rectangle, bbox)) {
+ this.rectangle = bbox;
}
- a.assign(h0);
- b.assign(h1);
- c.assign(h2);
- d.assign(h3);
- e.assign(h4);
- f.assign(h5);
- g.assign(h6);
- h.assign(h7);
+ this._setDefaultAppearance({
+ xref: parameters.xref,
+ extra: `${borderWidth} w`,
+ strokeColor,
+ strokeAlpha,
+ pointsCallback: (buffer, points) => {
+ const vertices = this.data.vertices;
- for (j = 0; j < 80; ++j) {
- t1.assign(h);
- sigmaPrime(tmp1, e, tmp2);
- t1.add(tmp1);
- ch(tmp1, e, f, g, tmp2);
- t1.add(tmp1);
- t1.add(k[j]);
- t1.add(w[j]);
- sigma(t2, a, tmp2);
- maj(tmp1, a, b, c, tmp2);
- t2.add(tmp1);
- tmp3 = h;
- h = g;
- g = f;
- f = e;
- d.add(t1);
- e = d;
- d = c;
- c = b;
- b = a;
- tmp3.assign(t1);
- tmp3.add(t2);
- a = tmp3;
- }
-
- h0.add(a);
- h1.add(b);
- h2.add(c);
- h3.add(d);
- h4.add(e);
- h5.add(f);
- h6.add(g);
- h7.add(h);
- }
-
- var result;
+ for (let i = 0, ii = vertices.length; i < ii; i++) {
+ buffer.push(`${vertices[i].x} ${vertices[i].y} ${i === 0 ? "m" : "l"}`);
+ }
- if (!mode384) {
- result = new Uint8Array(64);
- h0.copyTo(result, 0);
- h1.copyTo(result, 8);
- h2.copyTo(result, 16);
- h3.copyTo(result, 24);
- h4.copyTo(result, 32);
- h5.copyTo(result, 40);
- h6.copyTo(result, 48);
- h7.copyTo(result, 56);
- } else {
- result = new Uint8Array(48);
- h0.copyTo(result, 0);
- h1.copyTo(result, 8);
- h2.copyTo(result, 16);
- h3.copyTo(result, 24);
- h4.copyTo(result, 32);
- h5.copyTo(result, 40);
+ buffer.push("S");
+ return [points[0].x, points[1].x, points[3].y, points[1].y];
+ }
+ });
}
-
- return result;
}
- return hash;
-}();
-
-exports.calculateSHA512 = calculateSHA512;
+}
-var calculateSHA384 = function calculateSHA384Closure() {
- function hash(data, offset, length) {
- return calculateSHA512(data, offset, length, true);
+class PolygonAnnotation extends PolylineAnnotation {
+ constructor(parameters) {
+ super(parameters);
+ this.data.annotationType = _util.AnnotationType.POLYGON;
}
- return hash;
-}();
-
-exports.calculateSHA384 = calculateSHA384;
-
-var NullCipher = function NullCipherClosure() {
- function NullCipher() {}
-
- NullCipher.prototype = {
- decryptBlock: function NullCipher_decryptBlock(data) {
- return data;
- },
- encrypt: function NullCipher_encrypt(data) {
- return data;
- }
- };
- return NullCipher;
-}();
-
-class AESBaseCipher {
- constructor() {
- if (this.constructor === AESBaseCipher) {
- (0, _util.unreachable)("Cannot initialize AESBaseCipher.");
- }
-
- this._s = new Uint8Array([0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16]);
- this._inv_s = new Uint8Array([0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d]);
- this._mix = new Uint32Array([0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3]);
- this._mixCol = new Uint8Array(256);
-
- for (let i = 0; i < 256; i++) {
- if (i < 128) {
- this._mixCol[i] = i << 1;
- } else {
- this._mixCol[i] = i << 1 ^ 0x1b;
- }
- }
-
- this.buffer = new Uint8Array(16);
- this.bufferPosition = 0;
- }
+}
- _expandKey(cipherKey) {
- (0, _util.unreachable)("Cannot call `_expandKey` on the base class");
+class CaretAnnotation extends MarkupAnnotation {
+ constructor(parameters) {
+ super(parameters);
+ this.data.annotationType = _util.AnnotationType.CARET;
}
- _decrypt(input, key) {
- let t, u, v;
- const state = new Uint8Array(16);
- state.set(input);
-
- for (let j = 0, k = this._keySize; j < 16; ++j, ++k) {
- state[j] ^= key[k];
- }
-
- for (let i = this._cyclesOfRepetition - 1; i >= 1; --i) {
- t = state[13];
- state[13] = state[9];
- state[9] = state[5];
- state[5] = state[1];
- state[1] = t;
- t = state[14];
- u = state[10];
- state[14] = state[6];
- state[10] = state[2];
- state[6] = t;
- state[2] = u;
- t = state[15];
- u = state[11];
- v = state[7];
- state[15] = state[3];
- state[11] = t;
- state[7] = u;
- state[3] = v;
-
- for (let j = 0; j < 16; ++j) {
- state[j] = this._inv_s[state[j]];
- }
-
- for (let j = 0, k = i * 16; j < 16; ++j, ++k) {
- state[j] ^= key[k];
- }
-
- for (let j = 0; j < 16; j += 4) {
- const s0 = this._mix[state[j]];
- const s1 = this._mix[state[j + 1]];
- const s2 = this._mix[state[j + 2]];
- const s3 = this._mix[state[j + 3]];
- t = s0 ^ s1 >>> 8 ^ s1 << 24 ^ s2 >>> 16 ^ s2 << 16 ^ s3 >>> 24 ^ s3 << 8;
- state[j] = t >>> 24 & 0xff;
- state[j + 1] = t >> 16 & 0xff;
- state[j + 2] = t >> 8 & 0xff;
- state[j + 3] = t & 0xff;
- }
- }
-
- t = state[13];
- state[13] = state[9];
- state[9] = state[5];
- state[5] = state[1];
- state[1] = t;
- t = state[14];
- u = state[10];
- state[14] = state[6];
- state[10] = state[2];
- state[6] = t;
- state[2] = u;
- t = state[15];
- u = state[11];
- v = state[7];
- state[15] = state[3];
- state[11] = t;
- state[7] = u;
- state[3] = v;
-
- for (let j = 0; j < 16; ++j) {
- state[j] = this._inv_s[state[j]];
- state[j] ^= key[j];
- }
-
- return state;
- }
+}
- _encrypt(input, key) {
- const s = this._s;
- let t, u, v;
- const state = new Uint8Array(16);
- state.set(input);
+class InkAnnotation extends MarkupAnnotation {
+ constructor(parameters) {
+ super(parameters);
+ this.data.annotationType = _util.AnnotationType.INK;
+ this.data.inkLists = [];
+ const rawInkLists = parameters.dict.getArray("InkList");
- for (let j = 0; j < 16; ++j) {
- state[j] ^= key[j];
+ if (!Array.isArray(rawInkLists)) {
+ return;
}
- for (let i = 1; i < this._cyclesOfRepetition; i++) {
- for (let j = 0; j < 16; ++j) {
- state[j] = s[state[j]];
- }
-
- v = state[1];
- state[1] = state[5];
- state[5] = state[9];
- state[9] = state[13];
- state[13] = v;
- v = state[2];
- u = state[6];
- state[2] = state[10];
- state[6] = state[14];
- state[10] = v;
- state[14] = u;
- v = state[3];
- u = state[7];
- t = state[11];
- state[3] = state[15];
- state[7] = v;
- state[11] = u;
- state[15] = t;
+ const xref = parameters.xref;
- for (let j = 0; j < 16; j += 4) {
- const s0 = state[j + 0];
- const s1 = state[j + 1];
- const s2 = state[j + 2];
- const s3 = state[j + 3];
- t = s0 ^ s1 ^ s2 ^ s3;
- state[j + 0] ^= t ^ this._mixCol[s0 ^ s1];
- state[j + 1] ^= t ^ this._mixCol[s1 ^ s2];
- state[j + 2] ^= t ^ this._mixCol[s2 ^ s3];
- state[j + 3] ^= t ^ this._mixCol[s3 ^ s0];
- }
+ for (let i = 0, ii = rawInkLists.length; i < ii; ++i) {
+ this.data.inkLists.push([]);
- for (let j = 0, k = i * 16; j < 16; ++j, ++k) {
- state[j] ^= key[k];
+ for (let j = 0, jj = rawInkLists[i].length; j < jj; j += 2) {
+ this.data.inkLists[i].push({
+ x: xref.fetchIfRef(rawInkLists[i][j]),
+ y: xref.fetchIfRef(rawInkLists[i][j + 1])
+ });
}
}
- for (let j = 0; j < 16; ++j) {
- state[j] = s[state[j]];
- }
+ if (!this.appearance) {
+ const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0];
+ const strokeAlpha = parameters.dict.get("CA");
+ const borderWidth = this.borderStyle.width || 1,
+ borderAdjust = 2 * borderWidth;
+ const bbox = [Infinity, Infinity, -Infinity, -Infinity];
+
+ for (const inkLists of this.data.inkLists) {
+ for (const vertex of inkLists) {
+ bbox[0] = Math.min(bbox[0], vertex.x - borderAdjust);
+ bbox[1] = Math.min(bbox[1], vertex.y - borderAdjust);
+ bbox[2] = Math.max(bbox[2], vertex.x + borderAdjust);
+ bbox[3] = Math.max(bbox[3], vertex.y + borderAdjust);
+ }
+ }
+
+ if (!_util.Util.intersect(this.rectangle, bbox)) {
+ this.rectangle = bbox;
+ }
+
+ this._setDefaultAppearance({
+ xref: parameters.xref,
+ extra: `${borderWidth} w`,
+ strokeColor,
+ strokeAlpha,
+ pointsCallback: (buffer, points) => {
+ for (const inkList of this.data.inkLists) {
+ for (let i = 0, ii = inkList.length; i < ii; i++) {
+ buffer.push(`${inkList[i].x} ${inkList[i].y} ${i === 0 ? "m" : "l"}`);
+ }
- v = state[1];
- state[1] = state[5];
- state[5] = state[9];
- state[9] = state[13];
- state[13] = v;
- v = state[2];
- u = state[6];
- state[2] = state[10];
- state[6] = state[14];
- state[10] = v;
- state[14] = u;
- v = state[3];
- u = state[7];
- t = state[11];
- state[3] = state[15];
- state[7] = v;
- state[11] = u;
- state[15] = t;
+ buffer.push("S");
+ }
- for (let j = 0, k = this._keySize; j < 16; ++j, ++k) {
- state[j] ^= key[k];
+ return [points[0].x, points[1].x, points[3].y, points[1].y];
+ }
+ });
}
-
- return state;
}
- _decryptBlock2(data, finalize) {
- const sourceLength = data.length;
- let buffer = this.buffer,
- bufferLength = this.bufferPosition;
- const result = [];
- let iv = this.iv;
-
- for (let i = 0; i < sourceLength; ++i) {
- buffer[bufferLength] = data[i];
- ++bufferLength;
-
- if (bufferLength < 16) {
- continue;
- }
-
- const plain = this._decrypt(buffer, this._key);
-
- for (let j = 0; j < 16; ++j) {
- plain[j] ^= iv[j];
- }
-
- iv = buffer;
- result.push(plain);
- buffer = new Uint8Array(16);
- bufferLength = 0;
- }
+}
- this.buffer = buffer;
- this.bufferLength = bufferLength;
- this.iv = iv;
+class HighlightAnnotation extends MarkupAnnotation {
+ constructor(parameters) {
+ super(parameters);
+ this.data.annotationType = _util.AnnotationType.HIGHLIGHT;
+ const quadPoints = this.data.quadPoints = getQuadPoints(parameters.dict, null);
- if (result.length === 0) {
- return new Uint8Array(0);
- }
+ if (quadPoints) {
+ const resources = this.appearance && this.appearance.dict.get("Resources");
- let outputLength = 16 * result.length;
+ if (!this.appearance || !(resources && resources.has("ExtGState"))) {
+ if (this.appearance) {
+ (0, _util.warn)("HighlightAnnotation - ignoring built-in appearance stream.");
+ }
- if (finalize) {
- const lastBlock = result[result.length - 1];
- let psLen = lastBlock[15];
+ const fillColor = this.color ? Array.from(this.color).map(c => c / 255) : [1, 1, 0];
+ const fillAlpha = parameters.dict.get("CA");
- if (psLen <= 16) {
- for (let i = 15, ii = 16 - psLen; i >= ii; --i) {
- if (lastBlock[i] !== psLen) {
- psLen = 0;
- break;
+ this._setDefaultAppearance({
+ xref: parameters.xref,
+ fillColor,
+ blendMode: "Multiply",
+ fillAlpha,
+ pointsCallback: (buffer, points) => {
+ buffer.push(`${points[0].x} ${points[0].y} m`, `${points[1].x} ${points[1].y} l`, `${points[3].x} ${points[3].y} l`, `${points[2].x} ${points[2].y} l`, "f");
+ return [points[0].x, points[1].x, points[3].y, points[1].y];
}
- }
-
- outputLength -= psLen;
- result[result.length - 1] = lastBlock.subarray(0, 16 - psLen);
+ });
}
- }
-
- const output = new Uint8Array(outputLength);
-
- for (let i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) {
- output.set(result[i], j);
- }
-
- return output;
- }
-
- decryptBlock(data, finalize, iv = null) {
- const sourceLength = data.length;
- const buffer = this.buffer;
- let bufferLength = this.bufferPosition;
-
- if (iv) {
- this.iv = iv;
} else {
- for (let i = 0; bufferLength < 16 && i < sourceLength; ++i, ++bufferLength) {
- buffer[bufferLength] = data[i];
- }
-
- if (bufferLength < 16) {
- this.bufferLength = bufferLength;
- return new Uint8Array(0);
- }
-
- this.iv = buffer;
- data = data.subarray(16);
+ this.data.hasPopup = false;
}
-
- this.buffer = new Uint8Array(16);
- this.bufferLength = 0;
- this.decryptBlock = this._decryptBlock2;
- return this.decryptBlock(data, finalize);
- }
-
- encrypt(data, iv) {
- const sourceLength = data.length;
- let buffer = this.buffer,
- bufferLength = this.bufferPosition;
- const result = [];
-
- if (!iv) {
- iv = new Uint8Array(16);
- }
-
- for (let i = 0; i < sourceLength; ++i) {
- buffer[bufferLength] = data[i];
- ++bufferLength;
-
- if (bufferLength < 16) {
- continue;
- }
-
- for (let j = 0; j < 16; ++j) {
- buffer[j] ^= iv[j];
- }
-
- const cipher = this._encrypt(buffer, this._key);
-
- iv = cipher;
- result.push(cipher);
- buffer = new Uint8Array(16);
- bufferLength = 0;
- }
-
- this.buffer = buffer;
- this.bufferLength = bufferLength;
- this.iv = iv;
-
- if (result.length === 0) {
- return new Uint8Array(0);
- }
-
- const outputLength = 16 * result.length;
- const output = new Uint8Array(outputLength);
-
- for (let i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) {
- output.set(result[i], j);
- }
-
- return output;
}
}
-class AES128Cipher extends AESBaseCipher {
- constructor(key) {
- super();
- this._cyclesOfRepetition = 10;
- this._keySize = 160;
- this._rcon = new Uint8Array([0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d]);
- this._key = this._expandKey(key);
- }
-
- _expandKey(cipherKey) {
- const b = 176;
- const s = this._s;
- const rcon = this._rcon;
- const result = new Uint8Array(b);
- result.set(cipherKey);
-
- for (let j = 16, i = 1; j < b; ++i) {
- let t1 = result[j - 3];
- let t2 = result[j - 2];
- let t3 = result[j - 1];
- let t4 = result[j - 4];
- t1 = s[t1];
- t2 = s[t2];
- t3 = s[t3];
- t4 = s[t4];
- t1 = t1 ^ rcon[i];
+class UnderlineAnnotation extends MarkupAnnotation {
+ constructor(parameters) {
+ super(parameters);
+ this.data.annotationType = _util.AnnotationType.UNDERLINE;
+ const quadPoints = this.data.quadPoints = getQuadPoints(parameters.dict, null);
- for (let n = 0; n < 4; ++n) {
- result[j] = t1 ^= result[j - 16];
- j++;
- result[j] = t2 ^= result[j - 16];
- j++;
- result[j] = t3 ^= result[j - 16];
- j++;
- result[j] = t4 ^= result[j - 16];
- j++;
+ if (quadPoints) {
+ if (!this.appearance) {
+ const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0];
+ const strokeAlpha = parameters.dict.get("CA");
+
+ this._setDefaultAppearance({
+ xref: parameters.xref,
+ extra: "[] 0 d 1 w",
+ strokeColor,
+ strokeAlpha,
+ pointsCallback: (buffer, points) => {
+ buffer.push(`${points[2].x} ${points[2].y} m`, `${points[3].x} ${points[3].y} l`, "S");
+ return [points[0].x, points[1].x, points[3].y, points[1].y];
+ }
+ });
}
+ } else {
+ this.data.hasPopup = false;
}
-
- return result;
}
}
-exports.AES128Cipher = AES128Cipher;
-
-class AES256Cipher extends AESBaseCipher {
- constructor(key) {
- super();
- this._cyclesOfRepetition = 14;
- this._keySize = 224;
- this._key = this._expandKey(key);
- }
-
- _expandKey(cipherKey) {
- const b = 240;
- const s = this._s;
- const result = new Uint8Array(b);
- result.set(cipherKey);
- let r = 1;
- let t1, t2, t3, t4;
-
- for (let j = 32, i = 1; j < b; ++i) {
- if (j % 32 === 16) {
- t1 = s[t1];
- t2 = s[t2];
- t3 = s[t3];
- t4 = s[t4];
- } else if (j % 32 === 0) {
- t1 = result[j - 3];
- t2 = result[j - 2];
- t3 = result[j - 1];
- t4 = result[j - 4];
- t1 = s[t1];
- t2 = s[t2];
- t3 = s[t3];
- t4 = s[t4];
- t1 = t1 ^ r;
-
- if ((r <<= 1) >= 256) {
- r = (r ^ 0x1b) & 0xff;
- }
- }
+class SquigglyAnnotation extends MarkupAnnotation {
+ constructor(parameters) {
+ super(parameters);
+ this.data.annotationType = _util.AnnotationType.SQUIGGLY;
+ const quadPoints = this.data.quadPoints = getQuadPoints(parameters.dict, null);
- for (let n = 0; n < 4; ++n) {
- result[j] = t1 ^= result[j - 32];
- j++;
- result[j] = t2 ^= result[j - 32];
- j++;
- result[j] = t3 ^= result[j - 32];
- j++;
- result[j] = t4 ^= result[j - 32];
- j++;
+ if (quadPoints) {
+ if (!this.appearance) {
+ const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0];
+ const strokeAlpha = parameters.dict.get("CA");
+
+ this._setDefaultAppearance({
+ xref: parameters.xref,
+ extra: "[] 0 d 1 w",
+ strokeColor,
+ strokeAlpha,
+ pointsCallback: (buffer, points) => {
+ const dy = (points[0].y - points[2].y) / 6;
+ let shift = dy;
+ let x = points[2].x;
+ const y = points[2].y;
+ const xEnd = points[3].x;
+ buffer.push(`${x} ${y + shift} m`);
+
+ do {
+ x += 2;
+ shift = shift === 0 ? dy : 0;
+ buffer.push(`${x} ${y + shift} l`);
+ } while (x < xEnd);
+
+ buffer.push("S");
+ return [points[2].x, xEnd, y - 2 * dy, y + 2 * dy];
+ }
+ });
}
+ } else {
+ this.data.hasPopup = false;
}
-
- return result;
}
}
-exports.AES256Cipher = AES256Cipher;
-
-var PDF17 = function PDF17Closure() {
- function compareByteArrays(array1, array2) {
- if (array1.length !== array2.length) {
- return false;
- }
-
- for (var i = 0; i < array1.length; i++) {
- if (array1[i] !== array2[i]) {
- return false;
- }
- }
-
- return true;
- }
-
- function PDF17() {}
-
- PDF17.prototype = {
- checkOwnerPassword: function PDF17_checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) {
- var hashData = new Uint8Array(password.length + 56);
- hashData.set(password, 0);
- hashData.set(ownerValidationSalt, password.length);
- hashData.set(userBytes, password.length + ownerValidationSalt.length);
- var result = calculateSHA256(hashData, 0, hashData.length);
- return compareByteArrays(result, ownerPassword);
- },
- checkUserPassword: function PDF17_checkUserPassword(password, userValidationSalt, userPassword) {
- var hashData = new Uint8Array(password.length + 8);
- hashData.set(password, 0);
- hashData.set(userValidationSalt, password.length);
- var result = calculateSHA256(hashData, 0, hashData.length);
- return compareByteArrays(result, userPassword);
- },
- getOwnerKey: function PDF17_getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) {
- var hashData = new Uint8Array(password.length + 56);
- hashData.set(password, 0);
- hashData.set(ownerKeySalt, password.length);
- hashData.set(userBytes, password.length + ownerKeySalt.length);
- var key = calculateSHA256(hashData, 0, hashData.length);
- var cipher = new AES256Cipher(key);
- return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16));
- },
- getUserKey: function PDF17_getUserKey(password, userKeySalt, userEncryption) {
- var hashData = new Uint8Array(password.length + 8);
- hashData.set(password, 0);
- hashData.set(userKeySalt, password.length);
- var key = calculateSHA256(hashData, 0, hashData.length);
- var cipher = new AES256Cipher(key);
- return cipher.decryptBlock(userEncryption, false, new Uint8Array(16));
- }
- };
- return PDF17;
-}();
-
-exports.PDF17 = PDF17;
-
-var PDF20 = function PDF20Closure() {
- function concatArrays(array1, array2) {
- var t = new Uint8Array(array1.length + array2.length);
- t.set(array1, 0);
- t.set(array2, array1.length);
- return t;
- }
-
- function calculatePDF20Hash(password, input, userBytes) {
- var k = calculateSHA256(input, 0, input.length).subarray(0, 32);
- var e = [0];
- var i = 0;
-
- while (i < 64 || e[e.length - 1] > i - 32) {
- var arrayLength = password.length + k.length + userBytes.length;
- var k1 = new Uint8Array(arrayLength * 64);
- var array = concatArrays(password, k);
- array = concatArrays(array, userBytes);
-
- for (var j = 0, pos = 0; j < 64; j++, pos += arrayLength) {
- k1.set(array, pos);
- }
-
- var cipher = new AES128Cipher(k.subarray(0, 16));
- e = cipher.encrypt(k1, k.subarray(16, 32));
- var remainder = 0;
-
- for (var z = 0; z < 16; z++) {
- remainder *= 256 % 3;
- remainder %= 3;
- remainder += (e[z] >>> 0) % 3;
- remainder %= 3;
- }
+class StrikeOutAnnotation extends MarkupAnnotation {
+ constructor(parameters) {
+ super(parameters);
+ this.data.annotationType = _util.AnnotationType.STRIKEOUT;
+ const quadPoints = this.data.quadPoints = getQuadPoints(parameters.dict, null);
- if (remainder === 0) {
- k = calculateSHA256(e, 0, e.length);
- } else if (remainder === 1) {
- k = calculateSHA384(e, 0, e.length);
- } else if (remainder === 2) {
- k = calculateSHA512(e, 0, e.length);
+ if (quadPoints) {
+ if (!this.appearance) {
+ const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0];
+ const strokeAlpha = parameters.dict.get("CA");
+
+ this._setDefaultAppearance({
+ xref: parameters.xref,
+ extra: "[] 0 d 1 w",
+ strokeColor,
+ strokeAlpha,
+ pointsCallback: (buffer, points) => {
+ buffer.push(`${(points[0].x + points[2].x) / 2} ` + `${(points[0].y + points[2].y) / 2} m`, `${(points[1].x + points[3].x) / 2} ` + `${(points[1].y + points[3].y) / 2} l`, "S");
+ return [points[0].x, points[1].x, points[3].y, points[1].y];
+ }
+ });
}
-
- i++;
+ } else {
+ this.data.hasPopup = false;
}
-
- return k.subarray(0, 32);
}
- function PDF20() {}
-
- function compareByteArrays(array1, array2) {
- if (array1.length !== array2.length) {
- return false;
- }
-
- for (var i = 0; i < array1.length; i++) {
- if (array1[i] !== array2[i]) {
- return false;
- }
- }
+}
- return true;
+class StampAnnotation extends MarkupAnnotation {
+ constructor(parameters) {
+ super(parameters);
+ this.data.annotationType = _util.AnnotationType.STAMP;
}
- PDF20.prototype = {
- hash: function PDF20_hash(password, concatBytes, userBytes) {
- return calculatePDF20Hash(password, concatBytes, userBytes);
- },
- checkOwnerPassword: function PDF20_checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) {
- var hashData = new Uint8Array(password.length + 56);
- hashData.set(password, 0);
- hashData.set(ownerValidationSalt, password.length);
- hashData.set(userBytes, password.length + ownerValidationSalt.length);
- var result = calculatePDF20Hash(password, hashData, userBytes);
- return compareByteArrays(result, ownerPassword);
- },
- checkUserPassword: function PDF20_checkUserPassword(password, userValidationSalt, userPassword) {
- var hashData = new Uint8Array(password.length + 8);
- hashData.set(password, 0);
- hashData.set(userValidationSalt, password.length);
- var result = calculatePDF20Hash(password, hashData, []);
- return compareByteArrays(result, userPassword);
- },
- getOwnerKey: function PDF20_getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) {
- var hashData = new Uint8Array(password.length + 56);
- hashData.set(password, 0);
- hashData.set(ownerKeySalt, password.length);
- hashData.set(userBytes, password.length + ownerKeySalt.length);
- var key = calculatePDF20Hash(password, hashData, userBytes);
- var cipher = new AES256Cipher(key);
- return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16));
- },
- getUserKey: function PDF20_getUserKey(password, userKeySalt, userEncryption) {
- var hashData = new Uint8Array(password.length + 8);
- hashData.set(password, 0);
- hashData.set(userKeySalt, password.length);
- var key = calculatePDF20Hash(password, hashData, []);
- var cipher = new AES256Cipher(key);
- return cipher.decryptBlock(userEncryption, false, new Uint8Array(16));
- }
- };
- return PDF20;
-}();
-
-exports.PDF20 = PDF20;
+}
-var CipherTransform = function CipherTransformClosure() {
- function CipherTransform(stringCipherConstructor, streamCipherConstructor) {
- this.StringCipherConstructor = stringCipherConstructor;
- this.StreamCipherConstructor = streamCipherConstructor;
+class FileAttachmentAnnotation extends MarkupAnnotation {
+ constructor(parameters) {
+ super(parameters);
+ const file = new _file_spec.FileSpec(parameters.dict.get("FS"), parameters.xref);
+ this.data.annotationType = _util.AnnotationType.FILEATTACHMENT;
+ this.data.file = file.serializable;
}
- CipherTransform.prototype = {
- createStream: function CipherTransform_createStream(stream, length) {
- var cipher = new this.StreamCipherConstructor();
- return new _stream.DecryptStream(stream, length, function cipherTransformDecryptStream(data, finalize) {
- return cipher.decryptBlock(data, finalize);
- });
- },
- decryptString: function CipherTransform_decryptString(s) {
- var cipher = new this.StringCipherConstructor();
- var data = (0, _util.stringToBytes)(s);
- data = cipher.decryptBlock(data, true);
- return (0, _util.bytesToString)(data);
- },
- encryptString: function CipherTransform_encryptString(s) {
- const cipher = new this.StringCipherConstructor();
-
- if (cipher instanceof AESBaseCipher) {
- const strLen = s.length;
- const pad = 16 - strLen % 16;
+}
- if (pad !== 16) {
- s = s.padEnd(16 * Math.ceil(strLen / 16), String.fromCharCode(pad));
- }
+/***/ }),
+/* 13 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
- const iv = new Uint8Array(16);
- if (typeof crypto !== "undefined") {
- crypto.getRandomValues(iv);
- } else {
- for (let i = 0; i < 16; i++) {
- iv[i] = Math.floor(256 * Math.random());
- }
- }
- let data = (0, _util.stringToBytes)(s);
- data = cipher.encrypt(data, iv);
- const buf = new Uint8Array(16 + data.length);
- buf.set(iv);
- buf.set(data, 16);
- return (0, _util.bytesToString)(buf);
- }
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.createDefaultAppearance = createDefaultAppearance;
+exports.parseDefaultAppearance = parseDefaultAppearance;
- let data = (0, _util.stringToBytes)(s);
- data = cipher.encrypt(data);
- return (0, _util.bytesToString)(data);
- }
- };
- return CipherTransform;
-}();
+var _util = __w_pdfjs_require__(2);
-var CipherTransformFactory = function CipherTransformFactoryClosure() {
- var defaultPasswordBytes = new Uint8Array([0x28, 0xBF, 0x4E, 0x5E, 0x4E, 0x75, 0x8A, 0x41, 0x64, 0x00, 0x4E, 0x56, 0xFF, 0xFA, 0x01, 0x08, 0x2E, 0x2E, 0x00, 0xB6, 0xD0, 0x68, 0x3E, 0x80, 0x2F, 0x0C, 0xA9, 0xFE, 0x64, 0x53, 0x69, 0x7A]);
+var _colorspace = __w_pdfjs_require__(14);
- function createEncryptionKey20(revision, password, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption, perms) {
- if (password) {
- var passwordLength = Math.min(127, password.length);
- password = password.subarray(0, passwordLength);
- } else {
- password = [];
- }
+var _core_utils = __w_pdfjs_require__(9);
- var pdfAlgorithm;
+var _evaluator = __w_pdfjs_require__(15);
- if (revision === 6) {
- pdfAlgorithm = new PDF20();
- } else {
- pdfAlgorithm = new PDF17();
- }
+var _primitives = __w_pdfjs_require__(5);
- if (pdfAlgorithm.checkUserPassword(password, userValidationSalt, userPassword)) {
- return pdfAlgorithm.getUserKey(password, userKeySalt, userEncryption);
- } else if (password.length && pdfAlgorithm.checkOwnerPassword(password, ownerValidationSalt, uBytes, ownerPassword)) {
- return pdfAlgorithm.getOwnerKey(password, ownerKeySalt, uBytes, ownerEncryption);
- }
+var _stream = __w_pdfjs_require__(10);
- return null;
+class DefaultAppearanceEvaluator extends _evaluator.EvaluatorPreprocessor {
+ constructor(str) {
+ super(new _stream.StringStream(str));
}
- function prepareKeyData(fileId, password, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata) {
- var hashDataSize = 40 + ownerPassword.length + fileId.length;
- var hashData = new Uint8Array(hashDataSize),
- i = 0,
- j,
- n;
-
- if (password) {
- n = Math.min(32, password.length);
-
- for (; i < n; ++i) {
- hashData[i] = password[i];
- }
- }
-
- j = 0;
-
- while (i < 32) {
- hashData[i++] = defaultPasswordBytes[j++];
- }
-
- for (j = 0, n = ownerPassword.length; j < n; ++j) {
- hashData[i++] = ownerPassword[j];
- }
-
- hashData[i++] = flags & 0xff;
- hashData[i++] = flags >> 8 & 0xff;
- hashData[i++] = flags >> 16 & 0xff;
- hashData[i++] = flags >>> 24 & 0xff;
-
- for (j = 0, n = fileId.length; j < n; ++j) {
- hashData[i++] = fileId[j];
- }
-
- if (revision >= 4 && !encryptMetadata) {
- hashData[i++] = 0xff;
- hashData[i++] = 0xff;
- hashData[i++] = 0xff;
- hashData[i++] = 0xff;
- }
-
- var hash = calculateMD5(hashData, 0, i);
- var keyLengthInBytes = keyLength >> 3;
-
- if (revision >= 3) {
- for (j = 0; j < 50; ++j) {
- hash = calculateMD5(hash, 0, keyLengthInBytes);
- }
- }
-
- var encryptionKey = hash.subarray(0, keyLengthInBytes);
- var cipher, checkData;
-
- if (revision >= 3) {
- for (i = 0; i < 32; ++i) {
- hashData[i] = defaultPasswordBytes[i];
- }
-
- for (j = 0, n = fileId.length; j < n; ++j) {
- hashData[i++] = fileId[j];
- }
-
- cipher = new ARCFourCipher(encryptionKey);
- checkData = cipher.encryptBlock(calculateMD5(hashData, 0, i));
- n = encryptionKey.length;
- var derivedKey = new Uint8Array(n),
- k;
-
- for (j = 1; j <= 19; ++j) {
- for (k = 0; k < n; ++k) {
- derivedKey[k] = encryptionKey[k] ^ j;
- }
-
- cipher = new ARCFourCipher(derivedKey);
- checkData = cipher.encryptBlock(checkData);
- }
+ parse() {
+ const operation = {
+ fn: 0,
+ args: []
+ };
+ const result = {
+ fontSize: 0,
+ fontName: "",
+ fontColor: new Uint8ClampedArray(3)
+ };
- for (j = 0, n = checkData.length; j < n; ++j) {
- if (userPassword[j] !== checkData[j]) {
- return null;
- }
- }
- } else {
- cipher = new ARCFourCipher(encryptionKey);
- checkData = cipher.encryptBlock(defaultPasswordBytes);
+ try {
+ while (true) {
+ operation.args.length = 0;
- for (j = 0, n = checkData.length; j < n; ++j) {
- if (userPassword[j] !== checkData[j]) {
- return null;
+ if (!this.read(operation)) {
+ break;
}
- }
- }
-
- return encryptionKey;
- }
-
- function decodeUserPassword(password, ownerPassword, revision, keyLength) {
- var hashData = new Uint8Array(32),
- i = 0,
- j,
- n;
- n = Math.min(32, password.length);
-
- for (; i < n; ++i) {
- hashData[i] = password[i];
- }
- j = 0;
-
- while (i < 32) {
- hashData[i++] = defaultPasswordBytes[j++];
- }
-
- var hash = calculateMD5(hashData, 0, i);
- var keyLengthInBytes = keyLength >> 3;
-
- if (revision >= 3) {
- for (j = 0; j < 50; ++j) {
- hash = calculateMD5(hash, 0, hash.length);
- }
- }
-
- var cipher, userPassword;
-
- if (revision >= 3) {
- userPassword = ownerPassword;
- var derivedKey = new Uint8Array(keyLengthInBytes),
- k;
-
- for (j = 19; j >= 0; j--) {
- for (k = 0; k < keyLengthInBytes; ++k) {
- derivedKey[k] = hash[k] ^ j;
+ if (this.savedStatesDepth !== 0) {
+ continue;
}
- cipher = new ARCFourCipher(derivedKey);
- userPassword = cipher.encryptBlock(userPassword);
- }
- } else {
- cipher = new ARCFourCipher(hash.subarray(0, keyLengthInBytes));
- userPassword = cipher.encryptBlock(ownerPassword);
- }
-
- return userPassword;
- }
-
- var identityName = _primitives.Name.get("Identity");
-
- function CipherTransformFactory(dict, fileId, password) {
- var filter = dict.get("Filter");
+ const {
+ fn,
+ args
+ } = operation;
- if (!(0, _primitives.isName)(filter, "Standard")) {
- throw new _util.FormatError("unknown encryption method");
- }
+ switch (fn | 0) {
+ case _util.OPS.setFont:
+ const [fontName, fontSize] = args;
- this.dict = dict;
- var algorithm = dict.get("V");
+ if (fontName instanceof _primitives.Name) {
+ result.fontName = fontName.name;
+ }
- if (!Number.isInteger(algorithm) || algorithm !== 1 && algorithm !== 2 && algorithm !== 4 && algorithm !== 5) {
- throw new _util.FormatError("unsupported encryption algorithm");
- }
+ if (typeof fontSize === "number" && fontSize > 0) {
+ result.fontSize = fontSize;
+ }
- this.algorithm = algorithm;
- var keyLength = dict.get("Length");
+ break;
- if (!keyLength) {
- if (algorithm <= 3) {
- keyLength = 40;
- } else {
- var cfDict = dict.get("CF");
- var streamCryptoName = dict.get("StmF");
+ case _util.OPS.setFillRGBColor:
+ _colorspace.ColorSpace.singletons.rgb.getRgbItem(args, 0, result.fontColor, 0);
- if ((0, _primitives.isDict)(cfDict) && (0, _primitives.isName)(streamCryptoName)) {
- cfDict.suppressEncryption = true;
- var handlerDict = cfDict.get(streamCryptoName.name);
- keyLength = handlerDict && handlerDict.get("Length") || 128;
+ break;
- if (keyLength < 40) {
- keyLength <<= 3;
- }
- }
- }
- }
+ case _util.OPS.setFillGray:
+ _colorspace.ColorSpace.singletons.gray.getRgbItem(args, 0, result.fontColor, 0);
- if (!Number.isInteger(keyLength) || keyLength < 40 || keyLength % 8 !== 0) {
- throw new _util.FormatError("invalid key length");
- }
+ break;
- var ownerPassword = (0, _util.stringToBytes)(dict.get("O")).subarray(0, 32);
- var userPassword = (0, _util.stringToBytes)(dict.get("U")).subarray(0, 32);
- var flags = dict.get("P");
- var revision = dict.get("R");
- var encryptMetadata = (algorithm === 4 || algorithm === 5) && dict.get("EncryptMetadata") !== false;
- this.encryptMetadata = encryptMetadata;
- var fileIdBytes = (0, _util.stringToBytes)(fileId);
- var passwordBytes;
+ case _util.OPS.setFillColorSpace:
+ _colorspace.ColorSpace.singletons.cmyk.getRgbItem(args, 0, result.fontColor, 0);
- if (password) {
- if (revision === 6) {
- try {
- password = (0, _util.utf8StringToString)(password);
- } catch (ex) {
- (0, _util.warn)("CipherTransformFactory: " + "Unable to convert UTF8 encoded password.");
+ break;
}
}
-
- passwordBytes = (0, _util.stringToBytes)(password);
- }
-
- var encryptionKey;
-
- if (algorithm !== 5) {
- encryptionKey = prepareKeyData(fileIdBytes, passwordBytes, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata);
- } else {
- var ownerValidationSalt = (0, _util.stringToBytes)(dict.get("O")).subarray(32, 40);
- var ownerKeySalt = (0, _util.stringToBytes)(dict.get("O")).subarray(40, 48);
- var uBytes = (0, _util.stringToBytes)(dict.get("U")).subarray(0, 48);
- var userValidationSalt = (0, _util.stringToBytes)(dict.get("U")).subarray(32, 40);
- var userKeySalt = (0, _util.stringToBytes)(dict.get("U")).subarray(40, 48);
- var ownerEncryption = (0, _util.stringToBytes)(dict.get("OE"));
- var userEncryption = (0, _util.stringToBytes)(dict.get("UE"));
- var perms = (0, _util.stringToBytes)(dict.get("Perms"));
- encryptionKey = createEncryptionKey20(revision, passwordBytes, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption, perms);
- }
-
- if (!encryptionKey && !password) {
- throw new _util.PasswordException("No password given", _util.PasswordResponses.NEED_PASSWORD);
- } else if (!encryptionKey && password) {
- var decodedPassword = decodeUserPassword(passwordBytes, ownerPassword, revision, keyLength);
- encryptionKey = prepareKeyData(fileIdBytes, decodedPassword, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata);
- }
-
- if (!encryptionKey) {
- throw new _util.PasswordException("Incorrect Password", _util.PasswordResponses.INCORRECT_PASSWORD);
- }
-
- this.encryptionKey = encryptionKey;
-
- if (algorithm >= 4) {
- var cf = dict.get("CF");
-
- if ((0, _primitives.isDict)(cf)) {
- cf.suppressEncryption = true;
- }
-
- this.cf = cf;
- this.stmf = dict.get("StmF") || identityName;
- this.strf = dict.get("StrF") || identityName;
- this.eff = dict.get("EFF") || this.stmf;
- }
- }
-
- function buildObjectKey(num, gen, encryptionKey, isAes) {
- var key = new Uint8Array(encryptionKey.length + 9),
- i,
- n;
-
- for (i = 0, n = encryptionKey.length; i < n; ++i) {
- key[i] = encryptionKey[i];
- }
-
- key[i++] = num & 0xff;
- key[i++] = num >> 8 & 0xff;
- key[i++] = num >> 16 & 0xff;
- key[i++] = gen & 0xff;
- key[i++] = gen >> 8 & 0xff;
-
- if (isAes) {
- key[i++] = 0x73;
- key[i++] = 0x41;
- key[i++] = 0x6c;
- key[i++] = 0x54;
+ } catch (reason) {
+ (0, _util.warn)(`parseDefaultAppearance - ignoring errors: "${reason}".`);
}
- var hash = calculateMD5(key, 0, i);
- return hash.subarray(0, Math.min(encryptionKey.length + 5, 16));
+ return result;
}
- function buildCipherConstructor(cf, name, num, gen, key) {
- if (!(0, _primitives.isName)(name)) {
- throw new _util.FormatError("Invalid crypt filter name.");
- }
-
- var cryptFilter = cf.get(name.name);
- var cfm;
-
- if (cryptFilter !== null && cryptFilter !== undefined) {
- cfm = cryptFilter.get("CFM");
- }
-
- if (!cfm || cfm.name === "None") {
- return function cipherTransformFactoryBuildCipherConstructorNone() {
- return new NullCipher();
- };
- }
-
- if (cfm.name === "V2") {
- return function cipherTransformFactoryBuildCipherConstructorV2() {
- return new ARCFourCipher(buildObjectKey(num, gen, key, false));
- };
- }
+}
- if (cfm.name === "AESV2") {
- return function cipherTransformFactoryBuildCipherConstructorAESV2() {
- return new AES128Cipher(buildObjectKey(num, gen, key, true));
- };
- }
+function parseDefaultAppearance(str) {
+ return new DefaultAppearanceEvaluator(str).parse();
+}
- if (cfm.name === "AESV3") {
- return function cipherTransformFactoryBuildCipherConstructorAESV3() {
- return new AES256Cipher(key);
- };
- }
+function createDefaultAppearance({
+ fontSize,
+ fontName,
+ fontColor
+}) {
+ let colorCmd;
- throw new _util.FormatError("Unknown crypto method");
+ if (fontColor.every(c => c === 0)) {
+ colorCmd = "0 g";
+ } else {
+ colorCmd = Array.from(fontColor).map(c => (c / 255).toFixed(2)).join(" ") + " rg";
}
- CipherTransformFactory.prototype = {
- createCipherTransform: function CipherTransformFactory_createCipherTransform(num, gen) {
- if (this.algorithm === 4 || this.algorithm === 5) {
- return new CipherTransform(buildCipherConstructor(this.cf, this.stmf, num, gen, this.encryptionKey), buildCipherConstructor(this.cf, this.strf, num, gen, this.encryptionKey));
- }
-
- var key = buildObjectKey(num, gen, this.encryptionKey, false);
-
- var cipherConstructor = function buildCipherCipherConstructor() {
- return new ARCFourCipher(key);
- };
-
- return new CipherTransform(cipherConstructor, cipherConstructor);
- }
- };
- return CipherTransformFactory;
-}();
-
-exports.CipherTransformFactory = CipherTransformFactory;
+ return `/${(0, _core_utils.escapePDFName)(fontName)} ${fontSize} Tf ${colorCmd}`;
+}
/***/ }),
-/* 23 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 14 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
-"use strict";
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
value: true
-});
+}));
exports.ColorSpace = void 0;
var _util = __w_pdfjs_require__(2);
var _primitives = __w_pdfjs_require__(5);
-var _core_utils = __w_pdfjs_require__(8);
+var _core_utils = __w_pdfjs_require__(9);
function resizeRgbImage(src, dest, w1, h1, w2, h2, alpha01) {
const COMPONENTS = 3;
@@ -18638,7 +8086,7 @@ const LabCS = function LabCSClosure() {
let result;
if (x >= 6 / 29) {
- result = x * x * x;
+ result = x ** 3;
} else {
result = 108 / 841 * (x - 4 / 29);
}
@@ -18767,2729 +8215,73 @@ const LabCS = function LabCSClosure() {
}();
/***/ }),
-/* 24 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.GlobalImageCache = exports.LocalGStateCache = exports.LocalFunctionCache = exports.LocalColorSpaceCache = exports.LocalImageCache = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var _primitives = __w_pdfjs_require__(5);
-
-class BaseLocalCache {
- constructor(options) {
- if (this.constructor === BaseLocalCache) {
- (0, _util.unreachable)("Cannot initialize BaseLocalCache.");
- }
-
- if (!options || !options.onlyRefs) {
- this._nameRefMap = new Map();
- this._imageMap = new Map();
- }
-
- this._imageCache = new _primitives.RefSetCache();
- }
-
- getByName(name) {
- const ref = this._nameRefMap.get(name);
-
- if (ref) {
- return this.getByRef(ref);
- }
-
- return this._imageMap.get(name) || null;
- }
-
- getByRef(ref) {
- return this._imageCache.get(ref) || null;
- }
-
- set(name, ref, data) {
- (0, _util.unreachable)("Abstract method `set` called.");
- }
-
-}
-
-class LocalImageCache extends BaseLocalCache {
- set(name, ref = null, data) {
- if (!name) {
- throw new Error('LocalImageCache.set - expected "name" argument.');
- }
-
- if (ref) {
- if (this._imageCache.has(ref)) {
- return;
- }
-
- this._nameRefMap.set(name, ref);
-
- this._imageCache.put(ref, data);
-
- return;
- }
-
- if (this._imageMap.has(name)) {
- return;
- }
-
- this._imageMap.set(name, data);
- }
-
-}
-
-exports.LocalImageCache = LocalImageCache;
-
-class LocalColorSpaceCache extends BaseLocalCache {
- set(name = null, ref = null, data) {
- if (!name && !ref) {
- throw new Error('LocalColorSpaceCache.set - expected "name" and/or "ref" argument.');
- }
-
- if (ref) {
- if (this._imageCache.has(ref)) {
- return;
- }
-
- if (name) {
- this._nameRefMap.set(name, ref);
- }
-
- this._imageCache.put(ref, data);
-
- return;
- }
-
- if (this._imageMap.has(name)) {
- return;
- }
-
- this._imageMap.set(name, data);
- }
-
-}
-
-exports.LocalColorSpaceCache = LocalColorSpaceCache;
-
-class LocalFunctionCache extends BaseLocalCache {
- constructor(options) {
- super({
- onlyRefs: true
- });
- }
-
- getByName(name) {
- (0, _util.unreachable)("Should not call `getByName` method.");
- }
-
- set(name = null, ref, data) {
- if (!ref) {
- throw new Error('LocalFunctionCache.set - expected "ref" argument.');
- }
-
- if (this._imageCache.has(ref)) {
- return;
- }
-
- this._imageCache.put(ref, data);
- }
-
-}
-
-exports.LocalFunctionCache = LocalFunctionCache;
-
-class LocalGStateCache extends BaseLocalCache {
- set(name, ref = null, data) {
- if (!name) {
- throw new Error('LocalGStateCache.set - expected "name" argument.');
- }
-
- if (ref) {
- if (this._imageCache.has(ref)) {
- return;
- }
-
- this._nameRefMap.set(name, ref);
-
- this._imageCache.put(ref, data);
-
- return;
- }
-
- if (this._imageMap.has(name)) {
- return;
- }
-
- this._imageMap.set(name, data);
- }
-
-}
-
-exports.LocalGStateCache = LocalGStateCache;
-
-class GlobalImageCache {
- static get NUM_PAGES_THRESHOLD() {
- return (0, _util.shadow)(this, "NUM_PAGES_THRESHOLD", 2);
- }
-
- static get MAX_IMAGES_TO_CACHE() {
- return (0, _util.shadow)(this, "MAX_IMAGES_TO_CACHE", 10);
- }
-
- constructor() {
- this._refCache = new _primitives.RefSetCache();
- this._imageCache = new _primitives.RefSetCache();
- }
-
- shouldCache(ref, pageIndex) {
- const pageIndexSet = this._refCache.get(ref);
-
- const numPages = pageIndexSet ? pageIndexSet.size + (pageIndexSet.has(pageIndex) ? 0 : 1) : 1;
-
- if (numPages < GlobalImageCache.NUM_PAGES_THRESHOLD) {
- return false;
- }
-
- if (!this._imageCache.has(ref) && this._imageCache.size >= GlobalImageCache.MAX_IMAGES_TO_CACHE) {
- return false;
- }
-
- return true;
- }
-
- addPageIndex(ref, pageIndex) {
- let pageIndexSet = this._refCache.get(ref);
-
- if (!pageIndexSet) {
- pageIndexSet = new Set();
-
- this._refCache.put(ref, pageIndexSet);
- }
-
- pageIndexSet.add(pageIndex);
- }
-
- getData(ref, pageIndex) {
- const pageIndexSet = this._refCache.get(ref);
-
- if (!pageIndexSet) {
- return null;
- }
-
- if (pageIndexSet.size < GlobalImageCache.NUM_PAGES_THRESHOLD) {
- return null;
- }
-
- if (!this._imageCache.has(ref)) {
- return null;
- }
-
- pageIndexSet.add(pageIndex);
- return this._imageCache.get(ref);
- }
-
- setData(ref, data) {
- if (!this._refCache.has(ref)) {
- throw new Error('GlobalImageCache.setData - expected "addPageIndex" to have been called.');
- }
-
- if (this._imageCache.has(ref)) {
- return;
- }
-
- if (this._imageCache.size >= GlobalImageCache.MAX_IMAGES_TO_CACHE) {
- (0, _util.info)("GlobalImageCache.setData - ignoring image above MAX_IMAGES_TO_CACHE.");
- return;
- }
-
- this._imageCache.put(ref, data);
- }
-
- clear(onlyData = false) {
- if (!onlyData) {
- this._refCache.clear();
- }
-
- this._imageCache.clear();
- }
-
-}
-
-exports.GlobalImageCache = GlobalImageCache;
-
-/***/ }),
-/* 25 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.getQuadPoints = getQuadPoints;
-exports.MarkupAnnotation = exports.AnnotationFactory = exports.AnnotationBorderStyle = exports.Annotation = void 0;
-
-var _util = __w_pdfjs_require__(2);
-
-var _obj = __w_pdfjs_require__(10);
-
-var _primitives = __w_pdfjs_require__(5);
-
-var _colorspace = __w_pdfjs_require__(23);
-
-var _core_utils = __w_pdfjs_require__(8);
-
-var _operator_list = __w_pdfjs_require__(26);
-
-var _stream = __w_pdfjs_require__(12);
-
-var _writer = __w_pdfjs_require__(27);
-
-class AnnotationFactory {
- static create(xref, ref, pdfManager, idFactory) {
- return pdfManager.ensureCatalog("acroForm").then(acroForm => {
- return pdfManager.ensure(this, "_create", [xref, ref, pdfManager, idFactory, acroForm]);
- });
- }
-
- static _create(xref, ref, pdfManager, idFactory, acroForm) {
- const dict = xref.fetchIfRef(ref);
-
- if (!(0, _primitives.isDict)(dict)) {
- return undefined;
- }
-
- const id = (0, _primitives.isRef)(ref) ? ref.toString() : `annot_${idFactory.createObjId()}`;
- let subtype = dict.get("Subtype");
- subtype = (0, _primitives.isName)(subtype) ? subtype.name : null;
- const parameters = {
- xref,
- ref,
- dict,
- subtype,
- id,
- pdfManager,
- acroForm: acroForm instanceof _primitives.Dict ? acroForm : _primitives.Dict.empty
- };
-
- switch (subtype) {
- case "Link":
- return new LinkAnnotation(parameters);
-
- case "Text":
- return new TextAnnotation(parameters);
-
- case "Widget":
- let fieldType = (0, _core_utils.getInheritableProperty)({
- dict,
- key: "FT"
- });
- fieldType = (0, _primitives.isName)(fieldType) ? fieldType.name : null;
-
- switch (fieldType) {
- case "Tx":
- return new TextWidgetAnnotation(parameters);
-
- case "Btn":
- return new ButtonWidgetAnnotation(parameters);
-
- case "Ch":
- return new ChoiceWidgetAnnotation(parameters);
- }
-
- (0, _util.warn)('Unimplemented widget field type "' + fieldType + '", ' + "falling back to base field type.");
- return new WidgetAnnotation(parameters);
-
- case "Popup":
- return new PopupAnnotation(parameters);
-
- case "FreeText":
- return new FreeTextAnnotation(parameters);
-
- case "Line":
- return new LineAnnotation(parameters);
-
- case "Square":
- return new SquareAnnotation(parameters);
-
- case "Circle":
- return new CircleAnnotation(parameters);
-
- case "PolyLine":
- return new PolylineAnnotation(parameters);
-
- case "Polygon":
- return new PolygonAnnotation(parameters);
-
- case "Caret":
- return new CaretAnnotation(parameters);
-
- case "Ink":
- return new InkAnnotation(parameters);
-
- case "Highlight":
- return new HighlightAnnotation(parameters);
-
- case "Underline":
- return new UnderlineAnnotation(parameters);
-
- case "Squiggly":
- return new SquigglyAnnotation(parameters);
-
- case "StrikeOut":
- return new StrikeOutAnnotation(parameters);
-
- case "Stamp":
- return new StampAnnotation(parameters);
-
- case "FileAttachment":
- return new FileAttachmentAnnotation(parameters);
-
- default:
- if (!subtype) {
- (0, _util.warn)("Annotation is missing the required /Subtype.");
- } else {
- (0, _util.warn)('Unimplemented annotation type "' + subtype + '", ' + "falling back to base annotation.");
- }
-
- return new Annotation(parameters);
- }
- }
-
-}
-
-exports.AnnotationFactory = AnnotationFactory;
-
-function getQuadPoints(dict, rect) {
- if (!dict.has("QuadPoints")) {
- return null;
- }
-
- const quadPoints = dict.getArray("QuadPoints");
-
- if (!Array.isArray(quadPoints) || quadPoints.length % 8 > 0) {
- return null;
- }
-
- const quadPointsLists = [];
-
- for (let i = 0, ii = quadPoints.length / 8; i < ii; i++) {
- quadPointsLists.push([]);
-
- for (let j = i * 8, jj = i * 8 + 8; j < jj; j += 2) {
- const x = quadPoints[j];
- const y = quadPoints[j + 1];
-
- if (x < rect[0] || x > rect[2] || y < rect[1] || y > rect[3]) {
- return null;
- }
-
- quadPointsLists[i].push({
- x,
- y
- });
- }
- }
-
- return quadPointsLists;
-}
-
-function getTransformMatrix(rect, bbox, matrix) {
- const [minX, minY, maxX, maxY] = _util.Util.getAxialAlignedBoundingBox(bbox, matrix);
-
- if (minX === maxX || minY === maxY) {
- return [1, 0, 0, 1, rect[0], rect[1]];
- }
-
- const xRatio = (rect[2] - rect[0]) / (maxX - minX);
- const yRatio = (rect[3] - rect[1]) / (maxY - minY);
- return [xRatio, 0, 0, yRatio, rect[0] - minX * xRatio, rect[1] - minY * yRatio];
-}
-
-class Annotation {
- constructor(params) {
- const dict = params.dict;
- this.setContents(dict.get("Contents"));
- this.setModificationDate(dict.get("M"));
- this.setFlags(dict.get("F"));
- this.setRectangle(dict.getArray("Rect"));
- this.setColor(dict.getArray("C"));
- this.setBorderStyle(dict);
- this.setAppearance(dict);
- this.data = {
- annotationFlags: this.flags,
- borderStyle: this.borderStyle,
- color: this.color,
- contents: this.contents,
- hasAppearance: !!this.appearance,
- id: params.id,
- modificationDate: this.modificationDate,
- rect: this.rectangle,
- subtype: params.subtype
- };
- }
-
- _hasFlag(flags, flag) {
- return !!(flags & flag);
- }
-
- _isViewable(flags) {
- return !this._hasFlag(flags, _util.AnnotationFlag.INVISIBLE) && !this._hasFlag(flags, _util.AnnotationFlag.HIDDEN) && !this._hasFlag(flags, _util.AnnotationFlag.NOVIEW);
- }
-
- _isPrintable(flags) {
- return this._hasFlag(flags, _util.AnnotationFlag.PRINT) && !this._hasFlag(flags, _util.AnnotationFlag.INVISIBLE) && !this._hasFlag(flags, _util.AnnotationFlag.HIDDEN);
- }
-
- get viewable() {
- if (this.flags === 0) {
- return true;
- }
-
- return this._isViewable(this.flags);
- }
-
- get printable() {
- if (this.flags === 0) {
- return false;
- }
-
- return this._isPrintable(this.flags);
- }
-
- setContents(contents) {
- this.contents = (0, _util.stringToPDFString)(contents || "");
- }
-
- setModificationDate(modificationDate) {
- this.modificationDate = (0, _util.isString)(modificationDate) ? modificationDate : null;
- }
-
- setFlags(flags) {
- this.flags = Number.isInteger(flags) && flags > 0 ? flags : 0;
- }
-
- hasFlag(flag) {
- return this._hasFlag(this.flags, flag);
- }
-
- setRectangle(rectangle) {
- if (Array.isArray(rectangle) && rectangle.length === 4) {
- this.rectangle = _util.Util.normalizeRect(rectangle);
- } else {
- this.rectangle = [0, 0, 0, 0];
- }
- }
-
- setColor(color) {
- const rgbColor = new Uint8ClampedArray(3);
-
- if (!Array.isArray(color)) {
- this.color = rgbColor;
- return;
- }
-
- switch (color.length) {
- case 0:
- this.color = null;
- break;
-
- case 1:
- _colorspace.ColorSpace.singletons.gray.getRgbItem(color, 0, rgbColor, 0);
-
- this.color = rgbColor;
- break;
-
- case 3:
- _colorspace.ColorSpace.singletons.rgb.getRgbItem(color, 0, rgbColor, 0);
-
- this.color = rgbColor;
- break;
-
- case 4:
- _colorspace.ColorSpace.singletons.cmyk.getRgbItem(color, 0, rgbColor, 0);
-
- this.color = rgbColor;
- break;
-
- default:
- this.color = rgbColor;
- break;
- }
- }
-
- setBorderStyle(borderStyle) {
- this.borderStyle = new AnnotationBorderStyle();
-
- if (!(0, _primitives.isDict)(borderStyle)) {
- return;
- }
-
- if (borderStyle.has("BS")) {
- const dict = borderStyle.get("BS");
- const dictType = dict.get("Type");
-
- if (!dictType || (0, _primitives.isName)(dictType, "Border")) {
- this.borderStyle.setWidth(dict.get("W"), this.rectangle);
- this.borderStyle.setStyle(dict.get("S"));
- this.borderStyle.setDashArray(dict.getArray("D"));
- }
- } else if (borderStyle.has("Border")) {
- const array = borderStyle.getArray("Border");
-
- if (Array.isArray(array) && array.length >= 3) {
- this.borderStyle.setHorizontalCornerRadius(array[0]);
- this.borderStyle.setVerticalCornerRadius(array[1]);
- this.borderStyle.setWidth(array[2], this.rectangle);
-
- if (array.length === 4) {
- this.borderStyle.setDashArray(array[3]);
- }
- }
- } else {
- this.borderStyle.setWidth(0);
- }
- }
-
- setAppearance(dict) {
- this.appearance = null;
- const appearanceStates = dict.get("AP");
-
- if (!(0, _primitives.isDict)(appearanceStates)) {
- return;
- }
-
- const normalAppearanceState = appearanceStates.get("N");
-
- if ((0, _primitives.isStream)(normalAppearanceState)) {
- this.appearance = normalAppearanceState;
- return;
- }
-
- if (!(0, _primitives.isDict)(normalAppearanceState)) {
- return;
- }
-
- const as = dict.get("AS");
-
- if (!(0, _primitives.isName)(as) || !normalAppearanceState.has(as.name)) {
- return;
- }
-
- this.appearance = normalAppearanceState.get(as.name);
- }
-
- loadResources(keys) {
- return this.appearance.dict.getAsync("Resources").then(resources => {
- if (!resources) {
- return undefined;
- }
-
- const objectLoader = new _obj.ObjectLoader(resources, keys, resources.xref);
- return objectLoader.load().then(function () {
- return resources;
- });
- });
- }
-
- getOperatorList(evaluator, task, renderForms, annotationStorage) {
- if (!this.appearance) {
- return Promise.resolve(new _operator_list.OperatorList());
- }
-
- const appearance = this.appearance;
- const data = this.data;
- const appearanceDict = appearance.dict;
- const resourcesPromise = this.loadResources(["ExtGState", "ColorSpace", "Pattern", "Shading", "XObject", "Font"]);
- const bbox = appearanceDict.getArray("BBox") || [0, 0, 1, 1];
- const matrix = appearanceDict.getArray("Matrix") || [1, 0, 0, 1, 0, 0];
- const transform = getTransformMatrix(data.rect, bbox, matrix);
- return resourcesPromise.then(resources => {
- const opList = new _operator_list.OperatorList();
- opList.addOp(_util.OPS.beginAnnotation, [data.rect, transform, matrix]);
- return evaluator.getOperatorList({
- stream: appearance,
- task,
- resources,
- operatorList: opList
- }).then(() => {
- opList.addOp(_util.OPS.endAnnotation, []);
- appearance.reset();
- return opList;
- });
- });
- }
-
- async save(evaluator, task, annotationStorage) {
- return null;
- }
-
-}
-
-exports.Annotation = Annotation;
-
-class AnnotationBorderStyle {
- constructor() {
- this.width = 1;
- this.style = _util.AnnotationBorderStyleType.SOLID;
- this.dashArray = [3];
- this.horizontalCornerRadius = 0;
- this.verticalCornerRadius = 0;
- }
-
- setWidth(width, rect = [0, 0, 0, 0]) {
- if ((0, _primitives.isName)(width)) {
- this.width = 0;
- return;
- }
-
- if (Number.isInteger(width)) {
- if (width > 0) {
- const maxWidth = (rect[2] - rect[0]) / 2;
- const maxHeight = (rect[3] - rect[1]) / 2;
-
- if (maxWidth > 0 && maxHeight > 0 && (width > maxWidth || width > maxHeight)) {
- (0, _util.warn)(`AnnotationBorderStyle.setWidth - ignoring width: ${width}`);
- width = 1;
- }
- }
-
- this.width = width;
- }
- }
-
- setStyle(style) {
- if (!(0, _primitives.isName)(style)) {
- return;
- }
-
- switch (style.name) {
- case "S":
- this.style = _util.AnnotationBorderStyleType.SOLID;
- break;
-
- case "D":
- this.style = _util.AnnotationBorderStyleType.DASHED;
- break;
-
- case "B":
- this.style = _util.AnnotationBorderStyleType.BEVELED;
- break;
-
- case "I":
- this.style = _util.AnnotationBorderStyleType.INSET;
- break;
-
- case "U":
- this.style = _util.AnnotationBorderStyleType.UNDERLINE;
- break;
-
- default:
- break;
- }
- }
-
- setDashArray(dashArray) {
- if (Array.isArray(dashArray) && dashArray.length > 0) {
- let isValid = true;
- let allZeros = true;
-
- for (const element of dashArray) {
- const validNumber = +element >= 0;
-
- if (!validNumber) {
- isValid = false;
- break;
- } else if (element > 0) {
- allZeros = false;
- }
- }
-
- if (isValid && !allZeros) {
- this.dashArray = dashArray;
- } else {
- this.width = 0;
- }
- } else if (dashArray) {
- this.width = 0;
- }
- }
-
- setHorizontalCornerRadius(radius) {
- if (Number.isInteger(radius)) {
- this.horizontalCornerRadius = radius;
- }
- }
-
- setVerticalCornerRadius(radius) {
- if (Number.isInteger(radius)) {
- this.verticalCornerRadius = radius;
- }
- }
-
-}
-
-exports.AnnotationBorderStyle = AnnotationBorderStyle;
-
-class MarkupAnnotation extends Annotation {
- constructor(parameters) {
- super(parameters);
- const dict = parameters.dict;
-
- if (dict.has("IRT")) {
- const rawIRT = dict.getRaw("IRT");
- this.data.inReplyTo = (0, _primitives.isRef)(rawIRT) ? rawIRT.toString() : null;
- const rt = dict.get("RT");
- this.data.replyType = (0, _primitives.isName)(rt) ? rt.name : _util.AnnotationReplyType.REPLY;
- }
-
- if (this.data.replyType === _util.AnnotationReplyType.GROUP) {
- const parent = dict.get("IRT");
- this.data.title = (0, _util.stringToPDFString)(parent.get("T") || "");
- this.setContents(parent.get("Contents"));
- this.data.contents = this.contents;
-
- if (!parent.has("CreationDate")) {
- this.data.creationDate = null;
- } else {
- this.setCreationDate(parent.get("CreationDate"));
- this.data.creationDate = this.creationDate;
- }
-
- if (!parent.has("M")) {
- this.data.modificationDate = null;
- } else {
- this.setModificationDate(parent.get("M"));
- this.data.modificationDate = this.modificationDate;
- }
-
- this.data.hasPopup = parent.has("Popup");
-
- if (!parent.has("C")) {
- this.data.color = null;
- } else {
- this.setColor(parent.getArray("C"));
- this.data.color = this.color;
- }
- } else {
- this.data.title = (0, _util.stringToPDFString)(dict.get("T") || "");
- this.setCreationDate(dict.get("CreationDate"));
- this.data.creationDate = this.creationDate;
- this.data.hasPopup = dict.has("Popup");
-
- if (!dict.has("C")) {
- this.data.color = null;
- }
- }
- }
-
- setCreationDate(creationDate) {
- this.creationDate = (0, _util.isString)(creationDate) ? creationDate : null;
- }
-
-}
-
-exports.MarkupAnnotation = MarkupAnnotation;
-
-class WidgetAnnotation extends Annotation {
- constructor(params) {
- super(params);
- const dict = params.dict;
- const data = this.data;
- this.ref = params.ref;
- data.annotationType = _util.AnnotationType.WIDGET;
- data.fieldName = this._constructFieldName(dict);
- const fieldValue = (0, _core_utils.getInheritableProperty)({
- dict,
- key: "V",
- getArray: true
- });
- data.fieldValue = this._decodeFormValue(fieldValue);
- data.alternativeText = (0, _util.stringToPDFString)(dict.get("TU") || "");
- data.defaultAppearance = (0, _core_utils.getInheritableProperty)({
- dict,
- key: "DA"
- }) || params.acroForm.get("DA") || "";
- const fieldType = (0, _core_utils.getInheritableProperty)({
- dict,
- key: "FT"
- });
- data.fieldType = (0, _primitives.isName)(fieldType) ? fieldType.name : null;
- this.fieldResources = (0, _core_utils.getInheritableProperty)({
- dict,
- key: "DR"
- }) || params.acroForm.get("DR") || _primitives.Dict.empty;
- data.fieldFlags = (0, _core_utils.getInheritableProperty)({
- dict,
- key: "Ff"
- });
-
- if (!Number.isInteger(data.fieldFlags) || data.fieldFlags < 0) {
- data.fieldFlags = 0;
- }
-
- data.readOnly = this.hasFieldFlag(_util.AnnotationFieldFlag.READONLY);
-
- if (data.fieldType === "Sig") {
- data.fieldValue = null;
- this.setFlags(_util.AnnotationFlag.HIDDEN);
- }
- }
-
- _constructFieldName(dict) {
- if (!dict.has("T") && !dict.has("Parent")) {
- (0, _util.warn)("Unknown field name, falling back to empty field name.");
- return "";
- }
-
- if (!dict.has("Parent")) {
- return (0, _util.stringToPDFString)(dict.get("T"));
- }
-
- const fieldName = [];
-
- if (dict.has("T")) {
- fieldName.unshift((0, _util.stringToPDFString)(dict.get("T")));
- }
-
- let loopDict = dict;
-
- while (loopDict.has("Parent")) {
- loopDict = loopDict.get("Parent");
-
- if (!(0, _primitives.isDict)(loopDict)) {
- break;
- }
-
- if (loopDict.has("T")) {
- fieldName.unshift((0, _util.stringToPDFString)(loopDict.get("T")));
- }
- }
-
- return fieldName.join(".");
- }
-
- _decodeFormValue(formValue) {
- if (Array.isArray(formValue)) {
- return formValue.filter(item => (0, _util.isString)(item)).map(item => (0, _util.stringToPDFString)(item));
- } else if ((0, _primitives.isName)(formValue)) {
- return (0, _util.stringToPDFString)(formValue.name);
- } else if ((0, _util.isString)(formValue)) {
- return (0, _util.stringToPDFString)(formValue);
- }
-
- return null;
- }
-
- hasFieldFlag(flag) {
- return !!(this.data.fieldFlags & flag);
- }
-
- getOperatorList(evaluator, task, renderForms, annotationStorage) {
- if (renderForms) {
- return Promise.resolve(new _operator_list.OperatorList());
- }
-
- if (!this._hasText) {
- return super.getOperatorList(evaluator, task, renderForms, annotationStorage);
- }
-
- return this._getAppearance(evaluator, task, annotationStorage).then(content => {
- if (this.appearance && content === null) {
- return super.getOperatorList(evaluator, task, renderForms, annotationStorage);
- }
-
- const operatorList = new _operator_list.OperatorList();
-
- if (!this.data.defaultAppearance || content === null) {
- return operatorList;
- }
-
- const matrix = [1, 0, 0, 1, 0, 0];
- const bbox = [0, 0, this.data.rect[2] - this.data.rect[0], this.data.rect[3] - this.data.rect[1]];
- const transform = getTransformMatrix(this.data.rect, bbox, matrix);
- operatorList.addOp(_util.OPS.beginAnnotation, [this.data.rect, transform, matrix]);
- const stream = new _stream.StringStream(content);
- return evaluator.getOperatorList({
- stream,
- task,
- resources: this.fieldResources,
- operatorList
- }).then(function () {
- operatorList.addOp(_util.OPS.endAnnotation, []);
- return operatorList;
- });
- });
- }
-
- async save(evaluator, task, annotationStorage) {
- if (this.data.fieldValue === annotationStorage[this.data.id]) {
- return null;
- }
-
- let appearance = await this._getAppearance(evaluator, task, annotationStorage);
-
- if (appearance === null) {
- return null;
- }
-
- const dict = evaluator.xref.fetchIfRef(this.ref);
-
- if (!(0, _primitives.isDict)(dict)) {
- return null;
- }
-
- const bbox = [0, 0, this.data.rect[2] - this.data.rect[0], this.data.rect[3] - this.data.rect[1]];
- const newRef = evaluator.xref.getNewRef();
- const AP = new _primitives.Dict(evaluator.xref);
- AP.set("N", newRef);
- const value = annotationStorage[this.data.id];
- const encrypt = evaluator.xref.encrypt;
- let originalTransform = null;
- let newTransform = null;
-
- if (encrypt) {
- originalTransform = encrypt.createCipherTransform(this.ref.num, this.ref.gen);
- newTransform = encrypt.createCipherTransform(newRef.num, newRef.gen);
- appearance = newTransform.encryptString(appearance);
- }
-
- dict.set("V", value);
- dict.set("AP", AP);
- dict.set("M", `D:${(0, _util.getModificationDate)()}`);
- const appearanceDict = new _primitives.Dict(evaluator.xref);
- appearanceDict.set("Length", appearance.length);
- appearanceDict.set("Subtype", _primitives.Name.get("Form"));
- appearanceDict.set("Resources", this.fieldResources);
- appearanceDict.set("BBox", bbox);
- const bufferOriginal = [`${this.ref.num} ${this.ref.gen} obj\n`];
- (0, _writer.writeDict)(dict, bufferOriginal, originalTransform);
- bufferOriginal.push("\nendobj\n");
- const bufferNew = [`${newRef.num} ${newRef.gen} obj\n`];
- (0, _writer.writeDict)(appearanceDict, bufferNew, newTransform);
- bufferNew.push(" stream\n");
- bufferNew.push(appearance);
- bufferNew.push("\nendstream\nendobj\n");
- return [{
- ref: this.ref,
- data: bufferOriginal.join("")
- }, {
- ref: newRef,
- data: bufferNew.join("")
- }];
- }
-
- async _getAppearance(evaluator, task, annotationStorage) {
- const isPassword = this.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD);
-
- if (!annotationStorage || isPassword) {
- return null;
- }
-
- const value = annotationStorage[this.data.id];
-
- if (value === "") {
- return "";
- }
-
- const defaultPadding = 2;
- const hPadding = defaultPadding;
- const totalHeight = this.data.rect[3] - this.data.rect[1];
- const totalWidth = this.data.rect[2] - this.data.rect[0];
- const fontInfo = await this._getFontData(evaluator, task);
- const [font, fontName] = fontInfo;
- let fontSize = fontInfo[2];
- fontSize = this._computeFontSize(font, fontName, fontSize, totalHeight);
- let descent = font.descent;
-
- if (isNaN(descent)) {
- descent = 0;
- }
-
- const vPadding = defaultPadding + Math.abs(descent) * fontSize;
- const defaultAppearance = this.data.defaultAppearance;
- const alignment = this.data.textAlignment;
-
- if (this.data.comb) {
- return this._getCombAppearance(defaultAppearance, value, totalWidth, hPadding, vPadding);
- }
-
- if (this.data.multiLine) {
- return this._getMultilineAppearance(defaultAppearance, value, font, fontSize, totalWidth, totalHeight, alignment, hPadding, vPadding);
- }
-
- if (alignment === 0 || alignment > 2) {
- return "/Tx BMC q BT " + defaultAppearance + ` 1 0 0 1 ${hPadding} ${vPadding} Tm (${(0, _util.escapeString)(value)}) Tj` + " ET Q EMC";
- }
-
- const renderedText = this._renderText(value, font, fontSize, totalWidth, alignment, hPadding, vPadding);
-
- return "/Tx BMC q BT " + defaultAppearance + ` 1 0 0 1 0 0 Tm ${renderedText}` + " ET Q EMC";
- }
-
- async _getFontData(evaluator, task) {
- const operatorList = new _operator_list.OperatorList();
- const initialState = {
- fontSize: 0,
- font: null,
- fontName: null,
-
- clone() {
- return this;
- }
-
- };
- await evaluator.getOperatorList({
- stream: new _stream.StringStream(this.data.defaultAppearance),
- task,
- resources: this.fieldResources,
- operatorList,
- initialState
- });
- return [initialState.font, initialState.fontName, initialState.fontSize];
- }
-
- _computeFontSize(font, fontName, fontSize, height) {
- if (fontSize === null || fontSize === 0) {
- const em = font.charsToGlyphs("M", true)[0].width / 1000;
- const capHeight = 0.7 * em;
- fontSize = Math.max(1, Math.floor(height / (1.5 * capHeight)));
- let fontRegex = new RegExp(`/${fontName}\\s+[0-9\.]+\\s+Tf`);
-
- if (this.data.defaultAppearance.search(fontRegex) === -1) {
- fontRegex = new RegExp(`/${fontName}\\s+Tf`);
- }
-
- this.data.defaultAppearance = this.data.defaultAppearance.replace(fontRegex, `/${fontName} ${fontSize} Tf`);
- }
-
- return fontSize;
- }
-
- _renderText(text, font, fontSize, totalWidth, alignment, hPadding, vPadding) {
- const glyphs = font.charsToGlyphs(text);
- const scale = fontSize / 1000;
- let width = 0;
-
- for (const glyph of glyphs) {
- width += glyph.width * scale;
- }
-
- let shift;
-
- if (alignment === 1) {
- shift = (totalWidth - width) / 2;
- } else if (alignment === 2) {
- shift = totalWidth - width - hPadding;
- } else {
- shift = hPadding;
- }
-
- shift = shift.toFixed(2);
- vPadding = vPadding.toFixed(2);
- return `${shift} ${vPadding} Td (${(0, _util.escapeString)(text)}) Tj`;
- }
-
-}
-
-class TextWidgetAnnotation extends WidgetAnnotation {
- constructor(params) {
- super(params);
- this._hasText = true;
- const dict = params.dict;
-
- if (!(0, _util.isString)(this.data.fieldValue)) {
- this.data.fieldValue = "";
- }
-
- let alignment = (0, _core_utils.getInheritableProperty)({
- dict,
- key: "Q"
- });
-
- if (!Number.isInteger(alignment) || alignment < 0 || alignment > 2) {
- alignment = null;
- }
-
- this.data.textAlignment = alignment;
- let maximumLength = (0, _core_utils.getInheritableProperty)({
- dict,
- key: "MaxLen"
- });
-
- if (!Number.isInteger(maximumLength) || maximumLength < 0) {
- maximumLength = null;
- }
-
- this.data.maxLen = maximumLength;
- this.data.multiLine = this.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE);
- this.data.comb = this.hasFieldFlag(_util.AnnotationFieldFlag.COMB) && !this.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE) && !this.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD) && !this.hasFieldFlag(_util.AnnotationFieldFlag.FILESELECT) && this.data.maxLen !== null;
- }
-
- _getCombAppearance(defaultAppearance, text, width, hPadding, vPadding) {
- const combWidth = (width / this.data.maxLen).toFixed(2);
- const buf = [];
-
- for (const character of text) {
- buf.push(`(${(0, _util.escapeString)(character)}) Tj`);
- }
-
- const renderedComb = buf.join(` ${combWidth} 0 Td `);
- return "/Tx BMC q BT " + defaultAppearance + ` 1 0 0 1 ${hPadding} ${vPadding} Tm ${renderedComb}` + " ET Q EMC";
- }
-
- _getMultilineAppearance(defaultAppearance, text, font, fontSize, width, height, alignment, hPadding, vPadding) {
- const lines = text.split(/\r\n|\r|\n/);
- const buf = [];
- const totalWidth = width - 2 * hPadding;
-
- for (const line of lines) {
- const chunks = this._splitLine(line, font, fontSize, totalWidth);
-
- for (const chunk of chunks) {
- const padding = buf.length === 0 ? hPadding : 0;
- buf.push(this._renderText(chunk, font, fontSize, width, alignment, padding, -fontSize));
- }
- }
-
- const renderedText = buf.join("\n");
- return "/Tx BMC q BT " + defaultAppearance + ` 1 0 0 1 0 ${height} Tm ${renderedText}` + " ET Q EMC";
- }
-
- _splitLine(line, font, fontSize, width) {
- if (line.length <= 1) {
- return [line];
- }
-
- const scale = fontSize / 1000;
- const whitespace = font.charsToGlyphs(" ", true)[0].width * scale;
- const chunks = [];
- let lastSpacePos = -1,
- startChunk = 0,
- currentWidth = 0;
-
- for (let i = 0, ii = line.length; i < ii; i++) {
- const character = line.charAt(i);
-
- if (character === " ") {
- if (currentWidth + whitespace > width) {
- chunks.push(line.substring(startChunk, i));
- startChunk = i;
- currentWidth = whitespace;
- lastSpacePos = -1;
- } else {
- currentWidth += whitespace;
- lastSpacePos = i;
- }
- } else {
- const charWidth = font.charsToGlyphs(character, false)[0].width * scale;
-
- if (currentWidth + charWidth > width) {
- if (lastSpacePos !== -1) {
- chunks.push(line.substring(startChunk, lastSpacePos + 1));
- startChunk = i = lastSpacePos + 1;
- lastSpacePos = -1;
- currentWidth = 0;
- } else {
- chunks.push(line.substring(startChunk, i));
- startChunk = i;
- currentWidth = charWidth;
- }
- } else {
- currentWidth += charWidth;
- }
- }
- }
-
- if (startChunk < line.length) {
- chunks.push(line.substring(startChunk, line.length));
- }
-
- return chunks;
- }
-
-}
-
-class ButtonWidgetAnnotation extends WidgetAnnotation {
- constructor(params) {
- super(params);
- this.checkedAppearance = null;
- this.uncheckedAppearance = null;
- this.data.checkBox = !this.hasFieldFlag(_util.AnnotationFieldFlag.RADIO) && !this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON);
- this.data.radioButton = this.hasFieldFlag(_util.AnnotationFieldFlag.RADIO) && !this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON);
- this.data.pushButton = this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON);
-
- if (this.data.checkBox) {
- this._processCheckBox(params);
- } else if (this.data.radioButton) {
- this._processRadioButton(params);
- } else if (this.data.pushButton) {
- this._processPushButton(params);
- } else {
- (0, _util.warn)("Invalid field flags for button widget annotation");
- }
- }
-
- getOperatorList(evaluator, task, renderForms, annotationStorage) {
- if (this.data.pushButton) {
- return super.getOperatorList(evaluator, task, false, annotationStorage);
- }
-
- if (annotationStorage) {
- const value = annotationStorage[this.data.id] || false;
- let appearance;
-
- if (value) {
- appearance = this.checkedAppearance;
- } else {
- appearance = this.uncheckedAppearance;
- }
-
- if (appearance) {
- const savedAppearance = this.appearance;
- this.appearance = appearance;
- const operatorList = super.getOperatorList(evaluator, task, renderForms, annotationStorage);
- this.appearance = savedAppearance;
- return operatorList;
- }
-
- return Promise.resolve(new _operator_list.OperatorList());
- }
-
- return super.getOperatorList(evaluator, task, renderForms, annotationStorage);
- }
-
- async save(evaluator, task, annotationStorage) {
- if (this.data.checkBox) {
- return this._saveCheckbox(evaluator, task, annotationStorage);
- }
-
- if (this.data.radioButton) {
- return this._saveRadioButton(evaluator, task, annotationStorage);
- }
-
- return super.save(evaluator, task, annotationStorage);
- }
-
- async _saveCheckbox(evaluator, task, annotationStorage) {
- const defaultValue = this.data.fieldValue && this.data.fieldValue !== "Off";
- const value = annotationStorage[this.data.id];
-
- if (defaultValue === value) {
- return null;
- }
-
- const dict = evaluator.xref.fetchIfRef(this.ref);
-
- if (!(0, _primitives.isDict)(dict)) {
- return null;
- }
-
- const name = _primitives.Name.get(value ? this.data.exportValue : "Off");
-
- dict.set("V", name);
- dict.set("AS", name);
- dict.set("M", `D:${(0, _util.getModificationDate)()}`);
- const encrypt = evaluator.xref.encrypt;
- let originalTransform = null;
-
- if (encrypt) {
- originalTransform = encrypt.createCipherTransform(this.ref.num, this.ref.gen);
- }
-
- const buffer = [`${this.ref.num} ${this.ref.gen} obj\n`];
- (0, _writer.writeDict)(dict, buffer, originalTransform);
- buffer.push("\nendobj\n");
- return [{
- ref: this.ref,
- data: buffer.join("")
- }];
- }
-
- async _saveRadioButton(evaluator, task, annotationStorage) {
- const defaultValue = this.data.fieldValue === this.data.buttonValue;
- const value = annotationStorage[this.data.id];
-
- if (defaultValue === value) {
- return null;
- }
-
- const dict = evaluator.xref.fetchIfRef(this.ref);
-
- if (!(0, _primitives.isDict)(dict)) {
- return null;
- }
-
- const name = _primitives.Name.get(value ? this.data.buttonValue : "Off");
-
- let parentBuffer = null;
- const encrypt = evaluator.xref.encrypt;
-
- if (value) {
- if ((0, _primitives.isRef)(this.parent)) {
- const parent = evaluator.xref.fetch(this.parent);
- let parentTransform = null;
-
- if (encrypt) {
- parentTransform = encrypt.createCipherTransform(this.parent.num, this.parent.gen);
- }
-
- parent.set("V", name);
- parentBuffer = [`${this.parent.num} ${this.parent.gen} obj\n`];
- (0, _writer.writeDict)(parent, parentBuffer, parentTransform);
- parentBuffer.push("\nendobj\n");
- } else if ((0, _primitives.isDict)(this.parent)) {
- this.parent.set("V", name);
- }
- }
-
- dict.set("AS", name);
- dict.set("M", `D:${(0, _util.getModificationDate)()}`);
- let originalTransform = null;
-
- if (encrypt) {
- originalTransform = encrypt.createCipherTransform(this.ref.num, this.ref.gen);
- }
-
- const buffer = [`${this.ref.num} ${this.ref.gen} obj\n`];
- (0, _writer.writeDict)(dict, buffer, originalTransform);
- buffer.push("\nendobj\n");
- const newRefs = [{
- ref: this.ref,
- data: buffer.join("")
- }];
-
- if (parentBuffer !== null) {
- newRefs.push({
- ref: this.parent,
- data: parentBuffer.join("")
- });
- }
-
- return newRefs;
- }
-
- _processCheckBox(params) {
- const customAppearance = params.dict.get("AP");
-
- if (!(0, _primitives.isDict)(customAppearance)) {
- return;
- }
-
- const normalAppearance = customAppearance.get("N");
-
- if (!(0, _primitives.isDict)(normalAppearance)) {
- return;
- }
-
- const exportValues = normalAppearance.getKeys();
-
- if (!exportValues.includes("Off")) {
- exportValues.push("Off");
- }
-
- if (exportValues.length !== 2) {
- return;
- }
-
- this.data.exportValue = exportValues[0] === "Off" ? exportValues[1] : exportValues[0];
- this.checkedAppearance = normalAppearance.get(this.data.exportValue);
- this.uncheckedAppearance = normalAppearance.get("Off") || null;
- }
-
- _processRadioButton(params) {
- this.data.fieldValue = this.data.buttonValue = null;
- const fieldParent = params.dict.get("Parent");
-
- if ((0, _primitives.isDict)(fieldParent) && fieldParent.has("V")) {
- const fieldParentValue = fieldParent.get("V");
-
- if ((0, _primitives.isName)(fieldParentValue)) {
- this.parent = params.dict.getRaw("Parent");
- this.data.fieldValue = this._decodeFormValue(fieldParentValue);
- }
- }
-
- const appearanceStates = params.dict.get("AP");
-
- if (!(0, _primitives.isDict)(appearanceStates)) {
- return;
- }
-
- const normalAppearance = appearanceStates.get("N");
-
- if (!(0, _primitives.isDict)(normalAppearance)) {
- return;
- }
-
- for (const key of normalAppearance.getKeys()) {
- if (key !== "Off") {
- this.data.buttonValue = key;
- break;
- }
- }
-
- this.checkedAppearance = normalAppearance.get(this.data.buttonValue);
- this.uncheckedAppearance = normalAppearance.get("Off") || null;
- }
-
- _processPushButton(params) {
- if (!params.dict.has("A")) {
- (0, _util.warn)("Push buttons without action dictionaries are not supported");
- return;
- }
-
- _obj.Catalog.parseDestDictionary({
- destDict: params.dict,
- resultObj: this.data,
- docBaseUrl: params.pdfManager.docBaseUrl
- });
- }
-
-}
-
-class ChoiceWidgetAnnotation extends WidgetAnnotation {
- constructor(params) {
- super(params);
- this.data.options = [];
- const options = (0, _core_utils.getInheritableProperty)({
- dict: params.dict,
- key: "Opt"
- });
-
- if (Array.isArray(options)) {
- const xref = params.xref;
-
- for (let i = 0, ii = options.length; i < ii; i++) {
- const option = xref.fetchIfRef(options[i]);
- const isOptionArray = Array.isArray(option);
- this.data.options[i] = {
- exportValue: this._decodeFormValue(isOptionArray ? xref.fetchIfRef(option[0]) : option),
- displayValue: this._decodeFormValue(isOptionArray ? xref.fetchIfRef(option[1]) : option)
- };
- }
- }
-
- if ((0, _util.isString)(this.data.fieldValue)) {
- this.data.fieldValue = [this.data.fieldValue];
- } else if (!this.data.fieldValue) {
- this.data.fieldValue = [];
- }
-
- this.data.combo = this.hasFieldFlag(_util.AnnotationFieldFlag.COMBO);
- this.data.multiSelect = this.hasFieldFlag(_util.AnnotationFieldFlag.MULTISELECT);
- this._hasText = true;
- }
-
-}
-
-class TextAnnotation extends MarkupAnnotation {
- constructor(parameters) {
- const DEFAULT_ICON_SIZE = 22;
- super(parameters);
- const dict = parameters.dict;
- this.data.annotationType = _util.AnnotationType.TEXT;
-
- if (this.data.hasAppearance) {
- this.data.name = "NoIcon";
- } else {
- this.data.rect[1] = this.data.rect[3] - DEFAULT_ICON_SIZE;
- this.data.rect[2] = this.data.rect[0] + DEFAULT_ICON_SIZE;
- this.data.name = dict.has("Name") ? dict.get("Name").name : "Note";
- }
-
- if (dict.has("State")) {
- this.data.state = dict.get("State") || null;
- this.data.stateModel = dict.get("StateModel") || null;
- } else {
- this.data.state = null;
- this.data.stateModel = null;
- }
- }
-
-}
-
-class LinkAnnotation extends Annotation {
- constructor(params) {
- super(params);
- this.data.annotationType = _util.AnnotationType.LINK;
- const quadPoints = getQuadPoints(params.dict, this.rectangle);
-
- if (quadPoints) {
- this.data.quadPoints = quadPoints;
- }
-
- _obj.Catalog.parseDestDictionary({
- destDict: params.dict,
- resultObj: this.data,
- docBaseUrl: params.pdfManager.docBaseUrl
- });
- }
-
-}
-
-class PopupAnnotation extends Annotation {
- constructor(parameters) {
- super(parameters);
- this.data.annotationType = _util.AnnotationType.POPUP;
- let parentItem = parameters.dict.get("Parent");
-
- if (!parentItem) {
- (0, _util.warn)("Popup annotation has a missing or invalid parent annotation.");
- return;
- }
-
- const parentSubtype = parentItem.get("Subtype");
- this.data.parentType = (0, _primitives.isName)(parentSubtype) ? parentSubtype.name : null;
- const rawParent = parameters.dict.getRaw("Parent");
- this.data.parentId = (0, _primitives.isRef)(rawParent) ? rawParent.toString() : null;
- const rt = parentItem.get("RT");
-
- if ((0, _primitives.isName)(rt, _util.AnnotationReplyType.GROUP)) {
- parentItem = parentItem.get("IRT");
- }
-
- if (!parentItem.has("M")) {
- this.data.modificationDate = null;
- } else {
- this.setModificationDate(parentItem.get("M"));
- this.data.modificationDate = this.modificationDate;
- }
-
- if (!parentItem.has("C")) {
- this.data.color = null;
- } else {
- this.setColor(parentItem.getArray("C"));
- this.data.color = this.color;
- }
-
- if (!this.viewable) {
- const parentFlags = parentItem.get("F");
-
- if (this._isViewable(parentFlags)) {
- this.setFlags(parentFlags);
- }
- }
-
- this.data.title = (0, _util.stringToPDFString)(parentItem.get("T") || "");
- this.data.contents = (0, _util.stringToPDFString)(parentItem.get("Contents") || "");
- }
-
-}
-
-class FreeTextAnnotation extends MarkupAnnotation {
- constructor(parameters) {
- super(parameters);
- this.data.annotationType = _util.AnnotationType.FREETEXT;
- }
-
-}
-
-class LineAnnotation extends MarkupAnnotation {
- constructor(parameters) {
- super(parameters);
- this.data.annotationType = _util.AnnotationType.LINE;
- this.data.lineCoordinates = _util.Util.normalizeRect(parameters.dict.getArray("L"));
- }
-
-}
-
-class SquareAnnotation extends MarkupAnnotation {
- constructor(parameters) {
- super(parameters);
- this.data.annotationType = _util.AnnotationType.SQUARE;
- }
-
-}
-
-class CircleAnnotation extends MarkupAnnotation {
- constructor(parameters) {
- super(parameters);
- this.data.annotationType = _util.AnnotationType.CIRCLE;
- }
-
-}
-
-class PolylineAnnotation extends MarkupAnnotation {
- constructor(parameters) {
- super(parameters);
- this.data.annotationType = _util.AnnotationType.POLYLINE;
- const rawVertices = parameters.dict.getArray("Vertices");
- this.data.vertices = [];
-
- for (let i = 0, ii = rawVertices.length; i < ii; i += 2) {
- this.data.vertices.push({
- x: rawVertices[i],
- y: rawVertices[i + 1]
- });
- }
- }
-
-}
-
-class PolygonAnnotation extends PolylineAnnotation {
- constructor(parameters) {
- super(parameters);
- this.data.annotationType = _util.AnnotationType.POLYGON;
- }
-
-}
-
-class CaretAnnotation extends MarkupAnnotation {
- constructor(parameters) {
- super(parameters);
- this.data.annotationType = _util.AnnotationType.CARET;
- }
-
-}
-
-class InkAnnotation extends MarkupAnnotation {
- constructor(parameters) {
- super(parameters);
- this.data.annotationType = _util.AnnotationType.INK;
- const xref = parameters.xref;
- const originalInkLists = parameters.dict.getArray("InkList");
- this.data.inkLists = [];
-
- for (let i = 0, ii = originalInkLists.length; i < ii; ++i) {
- this.data.inkLists.push([]);
-
- for (let j = 0, jj = originalInkLists[i].length; j < jj; j += 2) {
- this.data.inkLists[i].push({
- x: xref.fetchIfRef(originalInkLists[i][j]),
- y: xref.fetchIfRef(originalInkLists[i][j + 1])
- });
- }
- }
- }
-
-}
-
-class HighlightAnnotation extends MarkupAnnotation {
- constructor(parameters) {
- super(parameters);
- this.data.annotationType = _util.AnnotationType.HIGHLIGHT;
- const quadPoints = getQuadPoints(parameters.dict, this.rectangle);
-
- if (quadPoints) {
- this.data.quadPoints = quadPoints;
- }
- }
-
-}
-
-class UnderlineAnnotation extends MarkupAnnotation {
- constructor(parameters) {
- super(parameters);
- this.data.annotationType = _util.AnnotationType.UNDERLINE;
- const quadPoints = getQuadPoints(parameters.dict, this.rectangle);
-
- if (quadPoints) {
- this.data.quadPoints = quadPoints;
- }
- }
-
-}
-
-class SquigglyAnnotation extends MarkupAnnotation {
- constructor(parameters) {
- super(parameters);
- this.data.annotationType = _util.AnnotationType.SQUIGGLY;
- const quadPoints = getQuadPoints(parameters.dict, this.rectangle);
-
- if (quadPoints) {
- this.data.quadPoints = quadPoints;
- }
- }
-
-}
-
-class StrikeOutAnnotation extends MarkupAnnotation {
- constructor(parameters) {
- super(parameters);
- this.data.annotationType = _util.AnnotationType.STRIKEOUT;
- const quadPoints = getQuadPoints(parameters.dict, this.rectangle);
-
- if (quadPoints) {
- this.data.quadPoints = quadPoints;
- }
- }
-
-}
-
-class StampAnnotation extends MarkupAnnotation {
- constructor(parameters) {
- super(parameters);
- this.data.annotationType = _util.AnnotationType.STAMP;
- }
-
-}
-
-class FileAttachmentAnnotation extends MarkupAnnotation {
- constructor(parameters) {
- super(parameters);
- const file = new _obj.FileSpec(parameters.dict.get("FS"), parameters.xref);
- this.data.annotationType = _util.AnnotationType.FILEATTACHMENT;
- this.data.file = file.serializable;
- }
-
-}
-
-/***/ }),
-/* 26 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 15 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
-"use strict";
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
value: true
-});
-exports.OperatorList = void 0;
+}));
+exports.PartialEvaluator = exports.EvaluatorPreprocessor = void 0;
var _util = __w_pdfjs_require__(2);
-var QueueOptimizer = function QueueOptimizerClosure() {
- function addState(parentState, pattern, checkFn, iterateFn, processFn) {
- var state = parentState;
-
- for (var i = 0, ii = pattern.length - 1; i < ii; i++) {
- var item = pattern[i];
- state = state[item] || (state[item] = []);
- }
-
- state[pattern[pattern.length - 1]] = {
- checkFn,
- iterateFn,
- processFn
- };
- }
-
- function handlePaintSolidColorImageMask(iFirstSave, count, fnArray, argsArray) {
- var iFirstPIMXO = iFirstSave + 2;
-
- for (var i = 0; i < count; i++) {
- var arg = argsArray[iFirstPIMXO + 4 * i];
- var imageMask = arg.length === 1 && arg[0];
-
- if (imageMask && imageMask.width === 1 && imageMask.height === 1 && (!imageMask.data.length || imageMask.data.length === 1 && imageMask.data[0] === 0)) {
- fnArray[iFirstPIMXO + 4 * i] = _util.OPS.paintSolidColorImageMask;
- continue;
- }
-
- break;
- }
-
- return count - i;
- }
-
- var InitialState = [];
- addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintInlineImageXObject, _util.OPS.restore], null, function iterateInlineImageGroup(context, i) {
- var fnArray = context.fnArray;
- var iFirstSave = context.iCurr - 3;
- var pos = (i - iFirstSave) % 4;
-
- switch (pos) {
- case 0:
- return fnArray[i] === _util.OPS.save;
-
- case 1:
- return fnArray[i] === _util.OPS.transform;
-
- case 2:
- return fnArray[i] === _util.OPS.paintInlineImageXObject;
-
- case 3:
- return fnArray[i] === _util.OPS.restore;
- }
-
- throw new Error(`iterateInlineImageGroup - invalid pos: ${pos}`);
- }, function foundInlineImageGroup(context, i) {
- var MIN_IMAGES_IN_INLINE_IMAGES_BLOCK = 10;
- var MAX_IMAGES_IN_INLINE_IMAGES_BLOCK = 200;
- var MAX_WIDTH = 1000;
- var IMAGE_PADDING = 1;
- var fnArray = context.fnArray,
- argsArray = context.argsArray;
- var curr = context.iCurr;
- var iFirstSave = curr - 3;
- var iFirstTransform = curr - 2;
- var iFirstPIIXO = curr - 1;
- var count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_INLINE_IMAGES_BLOCK);
-
- if (count < MIN_IMAGES_IN_INLINE_IMAGES_BLOCK) {
- return i - (i - iFirstSave) % 4;
- }
-
- var maxX = 0;
- var map = [],
- maxLineHeight = 0;
- var currentX = IMAGE_PADDING,
- currentY = IMAGE_PADDING;
- var q;
-
- for (q = 0; q < count; q++) {
- var transform = argsArray[iFirstTransform + (q << 2)];
- var img = argsArray[iFirstPIIXO + (q << 2)][0];
-
- if (currentX + img.width > MAX_WIDTH) {
- maxX = Math.max(maxX, currentX);
- currentY += maxLineHeight + 2 * IMAGE_PADDING;
- currentX = 0;
- maxLineHeight = 0;
- }
-
- map.push({
- transform,
- x: currentX,
- y: currentY,
- w: img.width,
- h: img.height
- });
- currentX += img.width + 2 * IMAGE_PADDING;
- maxLineHeight = Math.max(maxLineHeight, img.height);
- }
-
- var imgWidth = Math.max(maxX, currentX) + IMAGE_PADDING;
- var imgHeight = currentY + maxLineHeight + IMAGE_PADDING;
- var imgData = new Uint8ClampedArray(imgWidth * imgHeight * 4);
- var imgRowSize = imgWidth << 2;
-
- for (q = 0; q < count; q++) {
- var data = argsArray[iFirstPIIXO + (q << 2)][0].data;
- var rowSize = map[q].w << 2;
- var dataOffset = 0;
- var offset = map[q].x + map[q].y * imgWidth << 2;
- imgData.set(data.subarray(0, rowSize), offset - imgRowSize);
-
- for (var k = 0, kk = map[q].h; k < kk; k++) {
- imgData.set(data.subarray(dataOffset, dataOffset + rowSize), offset);
- dataOffset += rowSize;
- offset += imgRowSize;
- }
-
- imgData.set(data.subarray(dataOffset - rowSize, dataOffset), offset);
-
- while (offset >= 0) {
- data[offset - 4] = data[offset];
- data[offset - 3] = data[offset + 1];
- data[offset - 2] = data[offset + 2];
- data[offset - 1] = data[offset + 3];
- data[offset + rowSize] = data[offset + rowSize - 4];
- data[offset + rowSize + 1] = data[offset + rowSize - 3];
- data[offset + rowSize + 2] = data[offset + rowSize - 2];
- data[offset + rowSize + 3] = data[offset + rowSize - 1];
- offset -= imgRowSize;
- }
- }
-
- fnArray.splice(iFirstSave, count * 4, _util.OPS.paintInlineImageXObjectGroup);
- argsArray.splice(iFirstSave, count * 4, [{
- width: imgWidth,
- height: imgHeight,
- kind: _util.ImageKind.RGBA_32BPP,
- data: imgData
- }, map]);
- return iFirstSave + 1;
- });
- addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintImageMaskXObject, _util.OPS.restore], null, function iterateImageMaskGroup(context, i) {
- var fnArray = context.fnArray;
- var iFirstSave = context.iCurr - 3;
- var pos = (i - iFirstSave) % 4;
-
- switch (pos) {
- case 0:
- return fnArray[i] === _util.OPS.save;
-
- case 1:
- return fnArray[i] === _util.OPS.transform;
-
- case 2:
- return fnArray[i] === _util.OPS.paintImageMaskXObject;
-
- case 3:
- return fnArray[i] === _util.OPS.restore;
- }
-
- throw new Error(`iterateImageMaskGroup - invalid pos: ${pos}`);
- }, function foundImageMaskGroup(context, i) {
- var MIN_IMAGES_IN_MASKS_BLOCK = 10;
- var MAX_IMAGES_IN_MASKS_BLOCK = 100;
- var MAX_SAME_IMAGES_IN_MASKS_BLOCK = 1000;
- var fnArray = context.fnArray,
- argsArray = context.argsArray;
- var curr = context.iCurr;
- var iFirstSave = curr - 3;
- var iFirstTransform = curr - 2;
- var iFirstPIMXO = curr - 1;
- var count = Math.floor((i - iFirstSave) / 4);
- count = handlePaintSolidColorImageMask(iFirstSave, count, fnArray, argsArray);
-
- if (count < MIN_IMAGES_IN_MASKS_BLOCK) {
- return i - (i - iFirstSave) % 4;
- }
-
- var q;
- var isSameImage = false;
- var iTransform, transformArgs;
- var firstPIMXOArg0 = argsArray[iFirstPIMXO][0];
- const firstTransformArg0 = argsArray[iFirstTransform][0],
- firstTransformArg1 = argsArray[iFirstTransform][1],
- firstTransformArg2 = argsArray[iFirstTransform][2],
- firstTransformArg3 = argsArray[iFirstTransform][3];
-
- if (firstTransformArg1 === firstTransformArg2) {
- isSameImage = true;
- iTransform = iFirstTransform + 4;
- var iPIMXO = iFirstPIMXO + 4;
-
- for (q = 1; q < count; q++, iTransform += 4, iPIMXO += 4) {
- transformArgs = argsArray[iTransform];
-
- if (argsArray[iPIMXO][0] !== firstPIMXOArg0 || transformArgs[0] !== firstTransformArg0 || transformArgs[1] !== firstTransformArg1 || transformArgs[2] !== firstTransformArg2 || transformArgs[3] !== firstTransformArg3) {
- if (q < MIN_IMAGES_IN_MASKS_BLOCK) {
- isSameImage = false;
- } else {
- count = q;
- }
-
- break;
- }
- }
- }
-
- if (isSameImage) {
- count = Math.min(count, MAX_SAME_IMAGES_IN_MASKS_BLOCK);
- var positions = new Float32Array(count * 2);
- iTransform = iFirstTransform;
-
- for (q = 0; q < count; q++, iTransform += 4) {
- transformArgs = argsArray[iTransform];
- positions[q << 1] = transformArgs[4];
- positions[(q << 1) + 1] = transformArgs[5];
- }
-
- fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectRepeat);
- argsArray.splice(iFirstSave, count * 4, [firstPIMXOArg0, firstTransformArg0, firstTransformArg1, firstTransformArg2, firstTransformArg3, positions]);
- } else {
- count = Math.min(count, MAX_IMAGES_IN_MASKS_BLOCK);
- var images = [];
-
- for (q = 0; q < count; q++) {
- transformArgs = argsArray[iFirstTransform + (q << 2)];
- var maskParams = argsArray[iFirstPIMXO + (q << 2)][0];
- images.push({
- data: maskParams.data,
- width: maskParams.width,
- height: maskParams.height,
- transform: transformArgs
- });
- }
-
- fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectGroup);
- argsArray.splice(iFirstSave, count * 4, [images]);
- }
-
- return iFirstSave + 1;
- });
- addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintImageXObject, _util.OPS.restore], function (context) {
- var argsArray = context.argsArray;
- var iFirstTransform = context.iCurr - 2;
- return argsArray[iFirstTransform][1] === 0 && argsArray[iFirstTransform][2] === 0;
- }, function iterateImageGroup(context, i) {
- var fnArray = context.fnArray,
- argsArray = context.argsArray;
- var iFirstSave = context.iCurr - 3;
- var pos = (i - iFirstSave) % 4;
-
- switch (pos) {
- case 0:
- return fnArray[i] === _util.OPS.save;
-
- case 1:
- if (fnArray[i] !== _util.OPS.transform) {
- return false;
- }
-
- var iFirstTransform = context.iCurr - 2;
- var firstTransformArg0 = argsArray[iFirstTransform][0];
- var firstTransformArg3 = argsArray[iFirstTransform][3];
-
- if (argsArray[i][0] !== firstTransformArg0 || argsArray[i][1] !== 0 || argsArray[i][2] !== 0 || argsArray[i][3] !== firstTransformArg3) {
- return false;
- }
-
- return true;
-
- case 2:
- if (fnArray[i] !== _util.OPS.paintImageXObject) {
- return false;
- }
-
- var iFirstPIXO = context.iCurr - 1;
- var firstPIXOArg0 = argsArray[iFirstPIXO][0];
-
- if (argsArray[i][0] !== firstPIXOArg0) {
- return false;
- }
-
- return true;
-
- case 3:
- return fnArray[i] === _util.OPS.restore;
- }
-
- throw new Error(`iterateImageGroup - invalid pos: ${pos}`);
- }, function (context, i) {
- var MIN_IMAGES_IN_BLOCK = 3;
- var MAX_IMAGES_IN_BLOCK = 1000;
- var fnArray = context.fnArray,
- argsArray = context.argsArray;
- var curr = context.iCurr;
- var iFirstSave = curr - 3;
- var iFirstTransform = curr - 2;
- var iFirstPIXO = curr - 1;
- var firstPIXOArg0 = argsArray[iFirstPIXO][0];
- var firstTransformArg0 = argsArray[iFirstTransform][0];
- var firstTransformArg3 = argsArray[iFirstTransform][3];
- var count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_BLOCK);
-
- if (count < MIN_IMAGES_IN_BLOCK) {
- return i - (i - iFirstSave) % 4;
- }
-
- var positions = new Float32Array(count * 2);
- var iTransform = iFirstTransform;
-
- for (var q = 0; q < count; q++, iTransform += 4) {
- var transformArgs = argsArray[iTransform];
- positions[q << 1] = transformArgs[4];
- positions[(q << 1) + 1] = transformArgs[5];
- }
-
- var args = [firstPIXOArg0, firstTransformArg0, firstTransformArg3, positions];
- fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageXObjectRepeat);
- argsArray.splice(iFirstSave, count * 4, args);
- return iFirstSave + 1;
- });
- addState(InitialState, [_util.OPS.beginText, _util.OPS.setFont, _util.OPS.setTextMatrix, _util.OPS.showText, _util.OPS.endText], null, function iterateShowTextGroup(context, i) {
- var fnArray = context.fnArray,
- argsArray = context.argsArray;
- var iFirstSave = context.iCurr - 4;
- var pos = (i - iFirstSave) % 5;
-
- switch (pos) {
- case 0:
- return fnArray[i] === _util.OPS.beginText;
-
- case 1:
- return fnArray[i] === _util.OPS.setFont;
-
- case 2:
- return fnArray[i] === _util.OPS.setTextMatrix;
-
- case 3:
- if (fnArray[i] !== _util.OPS.showText) {
- return false;
- }
-
- var iFirstSetFont = context.iCurr - 3;
- var firstSetFontArg0 = argsArray[iFirstSetFont][0];
- var firstSetFontArg1 = argsArray[iFirstSetFont][1];
-
- if (argsArray[i][0] !== firstSetFontArg0 || argsArray[i][1] !== firstSetFontArg1) {
- return false;
- }
-
- return true;
-
- case 4:
- return fnArray[i] === _util.OPS.endText;
- }
-
- throw new Error(`iterateShowTextGroup - invalid pos: ${pos}`);
- }, function (context, i) {
- var MIN_CHARS_IN_BLOCK = 3;
- var MAX_CHARS_IN_BLOCK = 1000;
- var fnArray = context.fnArray,
- argsArray = context.argsArray;
- var curr = context.iCurr;
- var iFirstBeginText = curr - 4;
- var iFirstSetFont = curr - 3;
- var iFirstSetTextMatrix = curr - 2;
- var iFirstShowText = curr - 1;
- var iFirstEndText = curr;
- var firstSetFontArg0 = argsArray[iFirstSetFont][0];
- var firstSetFontArg1 = argsArray[iFirstSetFont][1];
- var count = Math.min(Math.floor((i - iFirstBeginText) / 5), MAX_CHARS_IN_BLOCK);
-
- if (count < MIN_CHARS_IN_BLOCK) {
- return i - (i - iFirstBeginText) % 5;
- }
-
- var iFirst = iFirstBeginText;
-
- if (iFirstBeginText >= 4 && fnArray[iFirstBeginText - 4] === fnArray[iFirstSetFont] && fnArray[iFirstBeginText - 3] === fnArray[iFirstSetTextMatrix] && fnArray[iFirstBeginText - 2] === fnArray[iFirstShowText] && fnArray[iFirstBeginText - 1] === fnArray[iFirstEndText] && argsArray[iFirstBeginText - 4][0] === firstSetFontArg0 && argsArray[iFirstBeginText - 4][1] === firstSetFontArg1) {
- count++;
- iFirst -= 5;
- }
-
- var iEndText = iFirst + 4;
-
- for (var q = 1; q < count; q++) {
- fnArray.splice(iEndText, 3);
- argsArray.splice(iEndText, 3);
- iEndText += 2;
- }
-
- return iEndText + 1;
- });
-
- function QueueOptimizer(queue) {
- this.queue = queue;
- this.state = null;
- this.context = {
- iCurr: 0,
- fnArray: queue.fnArray,
- argsArray: queue.argsArray
- };
- this.match = null;
- this.lastProcessed = 0;
- }
-
- QueueOptimizer.prototype = {
- _optimize() {
- const fnArray = this.queue.fnArray;
- let i = this.lastProcessed,
- ii = fnArray.length;
- let state = this.state;
- let match = this.match;
-
- if (!state && !match && i + 1 === ii && !InitialState[fnArray[i]]) {
- this.lastProcessed = ii;
- return;
- }
-
- const context = this.context;
-
- while (i < ii) {
- if (match) {
- const iterate = (0, match.iterateFn)(context, i);
-
- if (iterate) {
- i++;
- continue;
- }
-
- i = (0, match.processFn)(context, i + 1);
- ii = fnArray.length;
- match = null;
- state = null;
-
- if (i >= ii) {
- break;
- }
- }
-
- state = (state || InitialState)[fnArray[i]];
-
- if (!state || Array.isArray(state)) {
- i++;
- continue;
- }
-
- context.iCurr = i;
- i++;
-
- if (state.checkFn && !(0, state.checkFn)(context)) {
- state = null;
- continue;
- }
-
- match = state;
- state = null;
- }
-
- this.state = state;
- this.match = match;
- this.lastProcessed = i;
- },
-
- push(fn, args) {
- this.queue.fnArray.push(fn);
- this.queue.argsArray.push(args);
-
- this._optimize();
- },
-
- flush() {
- while (this.match) {
- const length = this.queue.fnArray.length;
- this.lastProcessed = (0, this.match.processFn)(this.context, length);
- this.match = null;
- this.state = null;
-
- this._optimize();
- }
- },
-
- reset() {
- this.state = null;
- this.match = null;
- this.lastProcessed = 0;
- }
-
- };
- return QueueOptimizer;
-}();
-
-var NullOptimizer = function NullOptimizerClosure() {
- function NullOptimizer(queue) {
- this.queue = queue;
- }
-
- NullOptimizer.prototype = {
- push(fn, args) {
- this.queue.fnArray.push(fn);
- this.queue.argsArray.push(args);
- },
-
- flush() {},
-
- reset() {}
-
- };
- return NullOptimizer;
-}();
-
-var OperatorList = function OperatorListClosure() {
- var CHUNK_SIZE = 1000;
- var CHUNK_SIZE_ABOUT = CHUNK_SIZE - 5;
-
- function OperatorList(intent, streamSink) {
- this._streamSink = streamSink;
- this.fnArray = [];
- this.argsArray = [];
-
- if (streamSink && intent !== "oplist") {
- this.optimizer = new QueueOptimizer(this);
- } else {
- this.optimizer = new NullOptimizer(this);
- }
-
- this.dependencies = new Set();
- this._totalLength = 0;
- this.weight = 0;
- this._resolved = streamSink ? null : Promise.resolve();
- }
-
- OperatorList.prototype = {
- get length() {
- return this.argsArray.length;
- },
-
- get ready() {
- return this._resolved || this._streamSink.ready;
- },
-
- get totalLength() {
- return this._totalLength + this.length;
- },
-
- addOp(fn, args) {
- this.optimizer.push(fn, args);
- this.weight++;
-
- if (this._streamSink) {
- if (this.weight >= CHUNK_SIZE) {
- this.flush();
- } else if (this.weight >= CHUNK_SIZE_ABOUT && (fn === _util.OPS.restore || fn === _util.OPS.endText)) {
- this.flush();
- }
- }
- },
-
- addDependency(dependency) {
- if (this.dependencies.has(dependency)) {
- return;
- }
-
- this.dependencies.add(dependency);
- this.addOp(_util.OPS.dependency, [dependency]);
- },
-
- addDependencies(dependencies) {
- for (const dependency of dependencies) {
- this.addDependency(dependency);
- }
- },
-
- addOpList(opList) {
- if (!(opList instanceof OperatorList)) {
- (0, _util.warn)('addOpList - ignoring invalid "opList" parameter.');
- return;
- }
-
- for (const dependency of opList.dependencies) {
- this.dependencies.add(dependency);
- }
-
- for (var i = 0, ii = opList.length; i < ii; i++) {
- this.addOp(opList.fnArray[i], opList.argsArray[i]);
- }
- },
-
- getIR() {
- return {
- fnArray: this.fnArray,
- argsArray: this.argsArray,
- length: this.length
- };
- },
-
- get _transfers() {
- const transfers = [];
- const {
- fnArray,
- argsArray,
- length
- } = this;
-
- for (let i = 0; i < length; i++) {
- switch (fnArray[i]) {
- case _util.OPS.paintInlineImageXObject:
- case _util.OPS.paintInlineImageXObjectGroup:
- case _util.OPS.paintImageMaskXObject:
- const arg = argsArray[i][0];
- ;
-
- if (!arg.cached) {
- transfers.push(arg.data.buffer);
- }
-
- break;
- }
- }
-
- return transfers;
- },
-
- flush(lastChunk = false) {
- this.optimizer.flush();
- const length = this.length;
- this._totalLength += length;
-
- this._streamSink.enqueue({
- fnArray: this.fnArray,
- argsArray: this.argsArray,
- lastChunk,
- length
- }, 1, this._transfers);
-
- this.dependencies.clear();
- this.fnArray.length = 0;
- this.argsArray.length = 0;
- this.weight = 0;
- this.optimizer.reset();
- }
-
- };
- return OperatorList;
-}();
-
-exports.OperatorList = OperatorList;
-
-/***/ }),
-/* 27 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.writeDict = writeDict;
-exports.incrementalUpdate = incrementalUpdate;
-
-var _util = __w_pdfjs_require__(2);
+var _cmap = __w_pdfjs_require__(16);
var _primitives = __w_pdfjs_require__(5);
-var _crypto = __w_pdfjs_require__(22);
-
-function writeDict(dict, buffer, transform) {
- buffer.push("<<");
-
- for (const key of dict.getKeys()) {
- buffer.push(` /${key} `);
- writeValue(dict.getRaw(key), buffer, transform);
- }
-
- buffer.push(">>");
-}
-
-function writeStream(stream, buffer, transform) {
- writeDict(stream.dict, buffer, transform);
- buffer.push(" stream\n");
- let string = (0, _util.bytesToString)(stream.getBytes());
-
- if (transform !== null) {
- string = transform.encryptString(string);
- }
-
- buffer.push(string);
- buffer.push("\nendstream\n");
-}
-
-function writeArray(array, buffer, transform) {
- buffer.push("[");
- let first = true;
-
- for (const val of array) {
- if (!first) {
- buffer.push(" ");
- } else {
- first = false;
- }
-
- writeValue(val, buffer, transform);
- }
-
- buffer.push("]");
-}
-
-function numberToString(value) {
- if (Number.isInteger(value)) {
- return value.toString();
- }
-
- const roundedValue = Math.round(value * 100);
-
- if (roundedValue % 100 === 0) {
- return (roundedValue / 100).toString();
- }
-
- if (roundedValue % 10 === 0) {
- return value.toFixed(1);
- }
-
- return value.toFixed(2);
-}
-
-function writeValue(value, buffer, transform) {
- if ((0, _primitives.isName)(value)) {
- buffer.push(`/${value.name}`);
- } else if ((0, _primitives.isRef)(value)) {
- buffer.push(`${value.num} ${value.gen} R`);
- } else if (Array.isArray(value)) {
- writeArray(value, buffer, transform);
- } else if (typeof value === "string") {
- if (transform !== null) {
- value = transform.encryptString(value);
- }
-
- buffer.push(`(${(0, _util.escapeString)(value)})`);
- } else if (typeof value === "number") {
- buffer.push(numberToString(value));
- } else if ((0, _primitives.isDict)(value)) {
- writeDict(value, buffer, transform);
- } else if ((0, _primitives.isStream)(value)) {
- writeStream(value, buffer, transform);
- }
-}
-
-function writeInt(number, size, offset, buffer) {
- for (let i = size + offset - 1; i > offset - 1; i--) {
- buffer[i] = number & 0xff;
- number >>= 8;
- }
-
- return offset + size;
-}
-
-function writeString(string, offset, buffer) {
- for (let i = 0, len = string.length; i < len; i++) {
- buffer[offset + i] = string.charCodeAt(i) & 0xff;
- }
-}
-
-function computeMD5(filesize, xrefInfo) {
- const time = Math.floor(Date.now() / 1000);
- const filename = xrefInfo.filename || "";
- const md5Buffer = [time.toString(), filename, filesize.toString()];
- let md5BufferLen = md5Buffer.reduce((a, str) => a + str.length, 0);
-
- for (const value of Object.values(xrefInfo.info)) {
- md5Buffer.push(value);
- md5BufferLen += value.length;
- }
-
- const array = new Uint8Array(md5BufferLen);
- let offset = 0;
-
- for (const str of md5Buffer) {
- writeString(str, offset, array);
- offset += str.length;
- }
-
- return (0, _util.bytesToString)((0, _crypto.calculateMD5)(array));
-}
-
-function incrementalUpdate(originalData, xrefInfo, newRefs) {
- const newXref = new _primitives.Dict(null);
- const refForXrefTable = xrefInfo.newRef;
- let buffer, baseOffset;
- const lastByte = originalData[originalData.length - 1];
-
- if (lastByte === 0x0a || lastByte === 0x0d) {
- buffer = [];
- baseOffset = originalData.length;
- } else {
- buffer = ["\n"];
- baseOffset = originalData.length + 1;
- }
-
- newXref.set("Size", refForXrefTable.num + 1);
- newXref.set("Prev", xrefInfo.startXRef);
- newXref.set("Type", _primitives.Name.get("XRef"));
-
- if (xrefInfo.rootRef !== null) {
- newXref.set("Root", xrefInfo.rootRef);
- }
-
- if (xrefInfo.infoRef !== null) {
- newXref.set("Info", xrefInfo.infoRef);
- }
-
- if (xrefInfo.encrypt !== null) {
- newXref.set("Encrypt", xrefInfo.encrypt);
- }
-
- newRefs.push({
- ref: refForXrefTable,
- data: ""
- });
- newRefs = newRefs.sort((a, b) => {
- return a.ref.num - b.ref.num;
- });
- const xrefTableData = [[0, 1, 0xffff]];
- const indexes = [0, 1];
- let maxOffset = 0;
-
- for (const {
- ref,
- data
- } of newRefs) {
- maxOffset = Math.max(maxOffset, baseOffset);
- xrefTableData.push([1, baseOffset, Math.min(ref.gen, 0xffff)]);
- baseOffset += data.length;
- indexes.push(ref.num);
- indexes.push(1);
- buffer.push(data);
- }
-
- newXref.set("Index", indexes);
-
- if (xrefInfo.fileIds.length !== 0) {
- const md5 = computeMD5(baseOffset, xrefInfo);
- newXref.set("ID", [xrefInfo.fileIds[0], md5]);
- }
-
- const offsetSize = Math.ceil(Math.log2(maxOffset) / 8);
- const sizes = [1, offsetSize, 2];
- const structSize = sizes[0] + sizes[1] + sizes[2];
- const tableLength = structSize * xrefTableData.length;
- newXref.set("W", sizes);
- newXref.set("Length", tableLength);
- buffer.push(`${refForXrefTable.num} ${refForXrefTable.gen} obj\n`);
- writeDict(newXref, buffer, null);
- buffer.push(" stream\n");
- const bufferLen = buffer.reduce((a, str) => a + str.length, 0);
- const footer = `\nendstream\nendobj\nstartxref\n${baseOffset}\n%%EOF\n`;
- const array = new Uint8Array(originalData.length + bufferLen + tableLength + footer.length);
- array.set(originalData);
- let offset = originalData.length;
-
- for (const str of buffer) {
- writeString(str, offset, array);
- offset += str.length;
- }
-
- for (const [type, objOffset, gen] of xrefTableData) {
- offset = writeInt(type, sizes[0], offset, array);
- offset = writeInt(objOffset, sizes[1], offset, array);
- offset = writeInt(gen, sizes[2], offset, array);
- }
-
- writeString(footer, offset, array);
- return array;
-}
-
-/***/ }),
-/* 28 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+var _fonts = __w_pdfjs_require__(34);
-"use strict";
+var _fonts_utils = __w_pdfjs_require__(38);
+var _encodings = __w_pdfjs_require__(37);
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.PartialEvaluator = void 0;
-
-var _util = __w_pdfjs_require__(2);
+var _standard_fonts = __w_pdfjs_require__(41);
-var _cmap = __w_pdfjs_require__(29);
+var _unicode = __w_pdfjs_require__(40);
-var _primitives = __w_pdfjs_require__(5);
-
-var _fonts = __w_pdfjs_require__(30);
+var _pattern = __w_pdfjs_require__(49);
-var _encodings = __w_pdfjs_require__(33);
+var _to_unicode_map = __w_pdfjs_require__(42);
-var _core_utils = __w_pdfjs_require__(8);
+var _function = __w_pdfjs_require__(50);
-var _unicode = __w_pdfjs_require__(36);
+var _parser = __w_pdfjs_require__(17);
-var _standard_fonts = __w_pdfjs_require__(35);
+var _image_utils = __w_pdfjs_require__(52);
-var _pattern = __w_pdfjs_require__(39);
+var _stream = __w_pdfjs_require__(10);
-var _function = __w_pdfjs_require__(40);
+var _bidi = __w_pdfjs_require__(53);
-var _parser = __w_pdfjs_require__(11);
+var _colorspace = __w_pdfjs_require__(14);
-var _image_utils = __w_pdfjs_require__(24);
+var _decode_stream = __w_pdfjs_require__(19);
-var _bidi = __w_pdfjs_require__(42);
+var _glyphlist = __w_pdfjs_require__(39);
-var _colorspace = __w_pdfjs_require__(23);
+var _core_utils = __w_pdfjs_require__(9);
-var _stream = __w_pdfjs_require__(12);
+var _metrics = __w_pdfjs_require__(54);
-var _glyphlist = __w_pdfjs_require__(34);
+var _xfa_fonts = __w_pdfjs_require__(55);
-var _metrics = __w_pdfjs_require__(43);
+var _murmurhash = __w_pdfjs_require__(61);
-var _murmurhash = __w_pdfjs_require__(44);
+var _operator_list = __w_pdfjs_require__(62);
-var _operator_list = __w_pdfjs_require__(26);
-
-var _image = __w_pdfjs_require__(45);
+var _image = __w_pdfjs_require__(63);
const DefaultPartialEvaluatorOptions = Object.freeze({
maxImageSize: -1,
disableFontFace: false,
ignoreErrors: false,
isEvalSupported: true,
- fontExtraProperties: false
+ fontExtraProperties: false,
+ useSystemFonts: true,
+ cMapUrl: null,
+ standardFontDataUrl: null
});
const PatternType = {
TILING: 1,
@@ -21615,6 +8407,7 @@ class PartialEvaluator {
idFactory,
fontCache,
builtInCMapCache,
+ standardFontDataCache,
globalImageCache,
options = null
}) {
@@ -21624,6 +8417,7 @@ class PartialEvaluator {
this.idFactory = idFactory;
this.fontCache = fontCache;
this.builtInCMapCache = builtInCMapCache;
+ this.standardFontDataCache = standardFontDataCache;
this.globalImageCache = globalImageCache;
this.options = options || DefaultPartialEvaluatorOptions;
this.parsingType3Font = false;
@@ -21638,29 +8432,33 @@ class PartialEvaluator {
return (0, _util.shadow)(this, "_pdfFunctionFactory", pdfFunctionFactory);
}
- clone(newOptions = DefaultPartialEvaluatorOptions) {
- var newEvaluator = Object.create(this);
- newEvaluator.options = newOptions;
+ clone(newOptions = null) {
+ const newEvaluator = Object.create(this);
+ newEvaluator.options = Object.assign(Object.create(null), this.options, newOptions);
return newEvaluator;
}
- hasBlendModes(resources) {
+ hasBlendModes(resources, nonBlendModesSet) {
if (!(resources instanceof _primitives.Dict)) {
return false;
}
- const processed = new _primitives.RefSet();
+ if (resources.objId && nonBlendModesSet.has(resources.objId)) {
+ return false;
+ }
+
+ const processed = new _primitives.RefSet(nonBlendModesSet);
if (resources.objId) {
processed.put(resources.objId);
}
- var nodes = [resources],
- xref = this.xref;
+ const nodes = [resources],
+ xref = this.xref;
while (nodes.length) {
- var node = nodes.shift();
- var graphicStates = node.get("ExtGState");
+ const node = nodes.shift();
+ const graphicStates = node.get("ExtGState");
if (graphicStates instanceof _primitives.Dict) {
for (let graphicState of graphicStates.getRawValues()) {
@@ -21672,10 +8470,6 @@ class PartialEvaluator {
try {
graphicState = xref.fetch(graphicState);
} catch (ex) {
- if (ex instanceof _core_utils.MissingDataException) {
- throw ex;
- }
-
processed.put(graphicState);
(0, _util.info)(`hasBlendModes - ignoring ExtGState: "${ex}".`);
continue;
@@ -21710,7 +8504,7 @@ class PartialEvaluator {
}
}
- var xObjects = node.get("XObject");
+ const xObjects = node.get("XObject");
if (!(xObjects instanceof _primitives.Dict)) {
continue;
@@ -21725,10 +8519,6 @@ class PartialEvaluator {
try {
xObject = xref.fetch(xObject);
} catch (ex) {
- if (ex instanceof _core_utils.MissingDataException) {
- throw ex;
- }
-
processed.put(xObject);
(0, _util.info)(`hasBlendModes - ignoring XObject: "${ex}".`);
continue;
@@ -21743,7 +8533,7 @@ class PartialEvaluator {
processed.put(xObject.dict.objId);
}
- var xResources = xObject.dict.get("Resources");
+ const xResources = xObject.dict.get("Resources");
if (!(xResources instanceof _primitives.Dict)) {
continue;
@@ -21761,6 +8551,9 @@ class PartialEvaluator {
}
}
+ processed.forEach(ref => {
+ nonBlendModesSet.put(ref);
+ });
return false;
}
@@ -21771,27 +8564,25 @@ class PartialEvaluator {
return cachedData;
}
- const readableStream = this.handler.sendWithStream("FetchBuiltInCMap", {
- name
- });
- const reader = readableStream.getReader();
- const data = await new Promise(function (resolve, reject) {
- function pump() {
- reader.read().then(function ({
- value,
- done
- }) {
- if (done) {
- return;
- }
+ let data;
- resolve(value);
- pump();
- }, reject);
+ if (this.options.cMapUrl !== null) {
+ const url = `${this.options.cMapUrl}${name}.bcmap`;
+ const response = await fetch(url);
+
+ if (!response.ok) {
+ throw new Error(`fetchBuiltInCMap: failed to fetch file "${url}" with "${response.statusText}".`);
}
- pump();
- });
+ data = {
+ cMapData: new Uint8Array(await response.arrayBuffer()),
+ compressionType: _util.CMapCompressionType.BINARY
+ };
+ } else {
+ data = await this.handler.sendWithPromise("FetchBuiltInCMap", {
+ name
+ });
+ }
if (data.compressionType !== _util.CMapCompressionType.NONE) {
this.builtInCMapCache.set(name, data);
@@ -21800,10 +8591,52 @@ class PartialEvaluator {
return data;
}
+ async fetchStandardFontData(name) {
+ const cachedData = this.standardFontDataCache.get(name);
+
+ if (cachedData) {
+ return new _stream.Stream(cachedData);
+ }
+
+ if (this.options.useSystemFonts && name !== "Symbol" && name !== "ZapfDingbats") {
+ return null;
+ }
+
+ const standardFontNameToFileName = (0, _standard_fonts.getFontNameToFileMap)(),
+ filename = standardFontNameToFileName[name];
+ let data;
+
+ if (this.options.standardFontDataUrl !== null) {
+ const url = `${this.options.standardFontDataUrl}${filename}`;
+ const response = await fetch(url);
+
+ if (!response.ok) {
+ (0, _util.warn)(`fetchStandardFontData: failed to fetch file "${url}" with "${response.statusText}".`);
+ } else {
+ data = await response.arrayBuffer();
+ }
+ } else {
+ try {
+ data = await this.handler.sendWithPromise("FetchStandardFontData", {
+ filename
+ });
+ } catch (e) {
+ (0, _util.warn)(`fetchStandardFontData: failed to fetch file "${filename}" with "${e}".`);
+ }
+ }
+
+ if (!data) {
+ return null;
+ }
+
+ this.standardFontDataCache.set(name, data);
+ return new _stream.Stream(data);
+ }
+
async buildFormXObject(resources, xobj, smask, operatorList, task, initialState, localColorSpaceCache) {
- var dict = xobj.dict;
- var matrix = dict.getArray("Matrix");
- var bbox = dict.getArray("BBox");
+ const dict = xobj.dict;
+ const matrix = dict.getArray("Matrix");
+ let bbox = dict.getArray("BBox");
if (Array.isArray(bbox) && bbox.length === 4) {
bbox = _util.Util.normalizeRect(bbox);
@@ -21811,25 +8644,26 @@ class PartialEvaluator {
bbox = null;
}
- let optionalContent = null;
+ let optionalContent = null,
+ groupOptions;
if (dict.has("OC")) {
optionalContent = await this.parseMarkedContentProps(dict.get("OC"), resources);
operatorList.addOp(_util.OPS.beginMarkedContentProps, ["OC", optionalContent]);
}
- var group = dict.get("Group");
+ const group = dict.get("Group");
if (group) {
- var groupOptions = {
+ groupOptions = {
matrix,
bbox,
smask,
isolated: false,
knockout: false
};
- var groupSubtype = group.get("S");
- var colorSpace = null;
+ const groupSubtype = group.get("S");
+ let colorSpace = null;
if ((0, _primitives.isName)(groupSubtype, "Transparency")) {
groupOptions.isolated = group.get("I") || false;
@@ -21899,37 +8733,37 @@ class PartialEvaluator {
localImageCache,
localColorSpaceCache
}) {
- var dict = image.dict;
+ const dict = image.dict;
const imageRef = dict.objId;
- var w = dict.get("Width", "W");
- var h = dict.get("Height", "H");
+ const w = dict.get("Width", "W");
+ const h = dict.get("Height", "H");
if (!(w && (0, _util.isNum)(w)) || !(h && (0, _util.isNum)(h))) {
(0, _util.warn)("Image dimensions are missing, or not numbers.");
return undefined;
}
- var maxImageSize = this.options.maxImageSize;
+ const maxImageSize = this.options.maxImageSize;
if (maxImageSize !== -1 && w * h > maxImageSize) {
(0, _util.warn)("Image exceeded maximum allowed size and was removed.");
return undefined;
}
- var imageMask = dict.get("ImageMask", "IM") || false;
- var imgData, args;
+ const imageMask = dict.get("ImageMask", "IM") || false;
+ let imgData, args;
if (imageMask) {
- var width = dict.get("Width", "W");
- var height = dict.get("Height", "H");
- var bitStrideLength = width + 7 >> 3;
- var imgArray = image.getBytes(bitStrideLength * height, true);
- var decode = dict.getArray("Decode", "D");
+ const width = dict.get("Width", "W");
+ const height = dict.get("Height", "H");
+ const bitStrideLength = width + 7 >> 3;
+ const imgArray = image.getBytes(bitStrideLength * height, true);
+ const decode = dict.getArray("Decode", "D");
imgData = _image.PDFImage.createMask({
imgArray,
width,
height,
- imageIsFromDecodeStream: image instanceof _stream.DecodeStream,
+ imageIsFromDecodeStream: image instanceof _decode_stream.DecodeStream,
inverseDecode: !!decode && decode[0] > 0
});
imgData.cached = !!cacheKey;
@@ -21946,9 +8780,9 @@ class PartialEvaluator {
return undefined;
}
- var softMask = dict.get("SMask", "SM") || false;
- var mask = dict.get("Mask") || false;
- var SMALL_IMAGE_DIMENSIONS = 200;
+ const softMask = dict.get("SMask", "SM") || false;
+ const mask = dict.get("Mask") || false;
+ const SMALL_IMAGE_DIMENSIONS = 200;
if (isInline && !softMask && !mask && w + h < SMALL_IMAGE_DIMENSIONS) {
const imageObj = new _image.PDFImage({
@@ -21989,6 +8823,11 @@ class PartialEvaluator {
localColorSpaceCache
}).then(imageObj => {
imgData = imageObj.createImageData(false);
+
+ if (cacheKey && imageRef && cacheGlobally) {
+ this.globalImageCache.addByteSize(imageRef, imgData.data.length);
+ }
+
return this._sendImgData(objId, imgData, cacheGlobally);
}).catch(reason => {
(0, _util.warn)(`Unable to decode image "${objId}": "${reason}".`);
@@ -22011,7 +8850,8 @@ class PartialEvaluator {
this.globalImageCache.setData(imageRef, {
objId,
fn: _util.OPS.paintImageXObject,
- args
+ args,
+ byteSize: 0
});
}
}
@@ -22021,20 +8861,20 @@ class PartialEvaluator {
}
handleSMask(smask, resources, operatorList, task, stateManager, localColorSpaceCache) {
- var smaskContent = smask.get("G");
- var smaskOptions = {
+ const smaskContent = smask.get("G");
+ const smaskOptions = {
subtype: smask.get("S").name,
backdrop: smask.get("BC")
};
- var transferObj = smask.get("TR");
+ const transferObj = smask.get("TR");
if ((0, _function.isPDFFunction)(transferObj)) {
const transferFn = this._pdfFunctionFactory.create(transferObj);
- var transferMap = new Uint8Array(256);
- var tmp = new Float32Array(1);
+ const transferMap = new Uint8Array(256);
+ const tmp = new Float32Array(1);
- for (var i = 0; i < 256; i++) {
+ for (let i = 0; i < 256; i++) {
tmp[0] = i / 255;
transferFn(tmp, 0, tmp, 0);
transferMap[i] = tmp[0] * 255 | 0;
@@ -22098,7 +8938,7 @@ class PartialEvaluator {
return transferMaps;
}
- handleTilingType(fn, args, resources, pattern, patternDict, operatorList, task) {
+ handleTilingType(fn, color, resources, pattern, patternDict, operatorList, task, cacheKey, localTilingPatternCache) {
const tilingOpList = new _operator_list.OperatorList();
const patternResources = _primitives.Dict.merge({
@@ -22112,14 +8952,18 @@ class PartialEvaluator {
resources: patternResources,
operatorList: tilingOpList
}).then(function () {
- return (0, _pattern.getTilingPatternIR)({
- fnArray: tilingOpList.fnArray,
- argsArray: tilingOpList.argsArray
- }, patternDict, args);
- }).then(function (tilingPatternIR) {
+ const operatorListIR = tilingOpList.getIR();
+ const tilingPatternIR = (0, _pattern.getTilingPatternIR)(operatorListIR, patternDict, color);
operatorList.addDependencies(tilingOpList.dependencies);
operatorList.addOp(fn, tilingPatternIR);
- }, reason => {
+
+ if (cacheKey) {
+ localTilingPatternCache.set(cacheKey, patternDict.objId, {
+ operatorListIR,
+ dict: patternDict
+ });
+ }
+ }).catch(reason => {
if (reason instanceof _util.AbortException) {
return;
}
@@ -22136,17 +8980,9 @@ class PartialEvaluator {
});
}
- handleSetFont(resources, fontArgs, fontRef, operatorList, task, state) {
- var fontName,
- fontSize = 0;
-
- if (fontArgs) {
- fontArgs = fontArgs.slice();
- fontName = fontArgs[0].name;
- fontSize = fontArgs[1];
- }
-
- return this.loadFont(fontName, fontRef, resources).then(translated => {
+ handleSetFont(resources, fontArgs, fontRef, operatorList, task, state, fallbackFontDict = null, cssFontInfo = null) {
+ const fontName = fontArgs && fontArgs[0] instanceof _primitives.Name ? fontArgs[0].name : null;
+ return this.loadFont(fontName, fontRef, resources, fallbackFontDict, cssFontInfo).then(translated => {
if (!translated.font.isType3Font) {
return translated;
}
@@ -22162,13 +8998,11 @@ class PartialEvaluator {
loadedName: "g_font_error",
font: new _fonts.ErrorFont(`Type3 font load error: ${reason}`),
dict: translated.font,
- extraProperties: this.options.fontExtraProperties
+ evaluatorOptions: this.options
});
});
}).then(translated => {
state.font = translated.font;
- state.fontSize = fontSize;
- state.fontName = fontName;
translated.send(this.handler);
return translated.loadedName;
});
@@ -22182,7 +9016,7 @@ class PartialEvaluator {
const isAddToPathSet = !!(state.textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG);
if (isAddToPathSet || state.fillColorSpace.name === "Pattern" || font.disableFontFace || this.options.disableFontFace) {
- PartialEvaluator.buildFontPaths(font, glyphs, this.handler);
+ PartialEvaluator.buildFontPaths(font, glyphs, this.handler, this.options);
}
}
@@ -22219,11 +9053,11 @@ class PartialEvaluator {
}) {
const gStateRef = gState.objId;
let isSimpleGState = true;
- var gStateObj = [];
- var gStateKeys = gState.getKeys();
- var promise = Promise.resolve();
+ const gStateObj = [];
+ const gStateKeys = gState.getKeys();
+ let promise = Promise.resolve();
- for (var i = 0, ii = gStateKeys.length; i < ii; i++) {
+ for (let i = 0, ii = gStateKeys.length; i < ii; i++) {
const key = gStateKeys[i];
const value = gState.get(key);
@@ -22313,18 +9147,18 @@ class PartialEvaluator {
});
}
- loadFont(fontName, font, resources) {
- const errorFont = () => {
- return Promise.resolve(new TranslatedFont({
+ loadFont(fontName, font, resources, fallbackFontDict = null, cssFontInfo = null) {
+ const errorFont = async () => {
+ return new TranslatedFont({
loadedName: "g_font_error",
font: new _fonts.ErrorFont(`Font "${fontName}" is not available.`),
dict: font,
- extraProperties: this.options.fontExtraProperties
- }));
+ evaluatorOptions: this.options
+ });
};
- var fontRef,
- xref = this.xref;
+ const xref = this.xref;
+ let fontRef;
if (font) {
if (!(0, _primitives.isRef)(font)) {
@@ -22333,7 +9167,7 @@ class PartialEvaluator {
fontRef = font;
} else {
- var fontRes = resources.get("Font");
+ const fontRes = resources.get("Font");
if (fontRes) {
fontRef = fontRes.getRaw(fontName);
@@ -22352,7 +9186,12 @@ class PartialEvaluator {
featureId: _util.UNSUPPORTED_FEATURES.errorFontMissing
});
(0, _util.warn)(`${partialMsg} -- attempting to fallback to a default font.`);
- fontRef = PartialEvaluator.fallbackFontDict;
+
+ if (fallbackFontDict) {
+ fontRef = fallbackFontDict;
+ } else {
+ fontRef = PartialEvaluator.fallbackFontDict;
+ }
}
if (this.fontCache.has(fontRef)) {
@@ -22365,18 +9204,27 @@ class PartialEvaluator {
return errorFont();
}
- if (font.translated) {
- return font.translated;
+ if (font.cacheKey && this.fontCache.has(font.cacheKey)) {
+ return this.fontCache.get(font.cacheKey);
+ }
+
+ const fontCapability = (0, _util.createPromiseCapability)();
+ let preEvaluatedFont;
+
+ try {
+ preEvaluatedFont = this.preEvaluateFont(font);
+ preEvaluatedFont.cssFontInfo = cssFontInfo;
+ } catch (reason) {
+ (0, _util.warn)(`loadFont - preEvaluateFont failed: "${reason}".`);
+ return errorFont();
}
- var fontCapability = (0, _util.createPromiseCapability)();
- var preEvaluatedFont = this.preEvaluateFont(font);
const {
descriptor,
hash
} = preEvaluatedFont;
- var fontRefIsRef = (0, _primitives.isRef)(fontRef),
- fontID;
+ const fontRefIsRef = (0, _primitives.isRef)(fontRef);
+ let fontID;
if (fontRefIsRef) {
fontID = `f${fontRef.toString()}`;
@@ -22387,10 +9235,10 @@ class PartialEvaluator {
descriptor.fontAliases = Object.create(null);
}
- var fontAliases = descriptor.fontAliases;
+ const fontAliases = descriptor.fontAliases;
if (fontAliases[hash]) {
- var aliasFontRef = fontAliases[hash].aliasRef;
+ const aliasFontRef = fontAliases[hash].aliasRef;
if (fontRefIsRef && aliasFontRef && this.fontCache.has(aliasFontRef)) {
this.fontCache.putAlias(fontRef, aliasFontRef);
@@ -22416,23 +9264,15 @@ class PartialEvaluator {
fontID = this.idFactory.createFontId();
}
- this.fontCache.put(`id_${fontID}`, fontCapability.promise);
+ font.cacheKey = `cacheKey_${fontID}`;
+ this.fontCache.put(font.cacheKey, fontCapability.promise);
}
(0, _util.assert)(fontID && fontID.startsWith("f"), 'The "fontID" must be (correctly) defined.');
font.loadedName = `${this.idFactory.getDocId()}_${fontID}`;
- font.translated = fontCapability.promise;
- var translatedPromise;
-
- try {
- translatedPromise = this.translateFont(preEvaluatedFont);
- } catch (e) {
- translatedPromise = Promise.reject(e);
- }
-
- translatedPromise.then(translatedFont => {
+ this.translateFont(preEvaluatedFont).then(translatedFont => {
if (translatedFont.fontType !== undefined) {
- var xrefFontStats = xref.stats.fontTypes;
+ const xrefFontStats = xref.stats.fontTypes;
xrefFontStats[translatedFont.fontType] = true;
}
@@ -22440,18 +9280,19 @@ class PartialEvaluator {
loadedName: font.loadedName,
font: translatedFont,
dict: font,
- extraProperties: this.options.fontExtraProperties
+ evaluatorOptions: this.options
}));
}).catch(reason => {
this.handler.send("UnsupportedFeature", {
featureId: _util.UNSUPPORTED_FEATURES.errorFontTranslate
});
+ (0, _util.warn)(`loadFont - translateFont failed: "${reason}".`);
try {
- var fontFile3 = descriptor && descriptor.get("FontFile3");
- var subtype = fontFile3 && fontFile3.get("Subtype");
- var fontType = (0, _fonts.getFontType)(preEvaluatedFont.type, subtype && subtype.name);
- var xrefFontStats = xref.stats.fontTypes;
+ const fontFile3 = descriptor && descriptor.get("FontFile3");
+ const subtype = fontFile3 && fontFile3.get("Subtype");
+ const fontType = (0, _fonts_utils.getFontType)(preEvaluatedFont.type, subtype && subtype.name);
+ const xrefFontStats = xref.stats.fontTypes;
xrefFontStats[fontType] = true;
} catch (ex) {}
@@ -22459,14 +9300,14 @@ class PartialEvaluator {
loadedName: font.loadedName,
font: new _fonts.ErrorFont(reason instanceof Error ? reason.message : reason),
dict: font,
- extraProperties: this.options.fontExtraProperties
+ evaluatorOptions: this.options
}));
});
return fontCapability.promise;
}
buildPath(operatorList, fn, args, parsingText = false) {
- var lastIndex = operatorList.length - 1;
+ const lastIndex = operatorList.length - 1;
if (!args) {
args = [];
@@ -22484,7 +9325,7 @@ class PartialEvaluator {
operatorList.addOp(_util.OPS.restore, null);
}
} else {
- var opArgs = operatorList.argsArray[lastIndex];
+ const opArgs = operatorList.argsArray[lastIndex];
opArgs[0].push(fn);
Array.prototype.push.apply(opArgs[1], args);
}
@@ -22518,31 +9359,118 @@ class PartialEvaluator {
});
}
- async handleColorN(operatorList, fn, args, cs, patterns, resources, task, localColorSpaceCache) {
- var patternName = args[args.length - 1];
- var pattern;
+ parseShading({
+ keyObj,
+ shading,
+ resources,
+ localColorSpaceCache,
+ localShadingPatternCache,
+ matrix = null
+ }) {
+ let id = localShadingPatternCache.get(keyObj);
- if ((0, _primitives.isName)(patternName) && (pattern = patterns.get(patternName.name))) {
- var dict = (0, _primitives.isStream)(pattern) ? pattern.dict : pattern;
- var typeNum = dict.get("PatternType");
+ if (!id) {
+ var shadingFill = _pattern.Pattern.parseShading(shading, matrix, this.xref, resources, this.handler, this._pdfFunctionFactory, localColorSpaceCache);
- if (typeNum === PatternType.TILING) {
- var color = cs.base ? cs.base.getRgb(args, 0) : null;
- return this.handleTilingType(fn, color, resources, pattern, dict, operatorList, task);
- } else if (typeNum === PatternType.SHADING) {
- var shading = dict.get("Shading");
- var matrix = dict.getArray("Matrix");
- pattern = _pattern.Pattern.parseShading(shading, matrix, this.xref, resources, this.handler, this._pdfFunctionFactory, localColorSpaceCache);
- operatorList.addOp(fn, pattern.getIR());
- return undefined;
- }
+ const patternIR = shadingFill.getIR();
+ id = `pattern_${this.idFactory.createObjId()}`;
+ localShadingPatternCache.set(keyObj, id);
+ this.handler.send("obj", [id, this.pageIndex, "Pattern", patternIR]);
+ }
+
+ return id;
+ }
+
+ handleColorN(operatorList, fn, args, cs, patterns, resources, task, localColorSpaceCache, localTilingPatternCache, localShadingPatternCache) {
+ const patternName = args.pop();
+
+ if (patternName instanceof _primitives.Name) {
+ const name = patternName.name;
+ const localTilingPattern = localTilingPatternCache.getByName(name);
- throw new _util.FormatError(`Unknown PatternType: ${typeNum}`);
+ if (localTilingPattern) {
+ try {
+ const color = cs.base ? cs.base.getRgb(args, 0) : null;
+ const tilingPatternIR = (0, _pattern.getTilingPatternIR)(localTilingPattern.operatorListIR, localTilingPattern.dict, color);
+ operatorList.addOp(fn, tilingPatternIR);
+ return undefined;
+ } catch (ex) {}
+ }
+
+ const pattern = patterns.get(name);
+
+ if (pattern) {
+ const dict = (0, _primitives.isStream)(pattern) ? pattern.dict : pattern;
+ const typeNum = dict.get("PatternType");
+
+ if (typeNum === PatternType.TILING) {
+ const color = cs.base ? cs.base.getRgb(args, 0) : null;
+ return this.handleTilingType(fn, color, resources, pattern, dict, operatorList, task, name, localTilingPatternCache);
+ } else if (typeNum === PatternType.SHADING) {
+ const shading = dict.get("Shading");
+ const matrix = dict.getArray("Matrix");
+ const objId = this.parseShading({
+ keyObj: pattern,
+ shading,
+ matrix,
+ resources,
+ localColorSpaceCache,
+ localShadingPatternCache
+ });
+ operatorList.addOp(fn, ["Shading", objId]);
+ return undefined;
+ }
+
+ throw new _util.FormatError(`Unknown PatternType: ${typeNum}`);
+ }
}
throw new _util.FormatError(`Unknown PatternName: ${patternName}`);
}
+ _parseVisibilityExpression(array, nestingCounter, currentResult) {
+ const MAX_NESTING = 10;
+
+ if (++nestingCounter > MAX_NESTING) {
+ (0, _util.warn)("Visibility expression is too deeply nested");
+ return;
+ }
+
+ const length = array.length;
+ const operator = this.xref.fetchIfRef(array[0]);
+
+ if (length < 2 || !(0, _primitives.isName)(operator)) {
+ (0, _util.warn)("Invalid visibility expression");
+ return;
+ }
+
+ switch (operator.name) {
+ case "And":
+ case "Or":
+ case "Not":
+ currentResult.push(operator.name);
+ break;
+
+ default:
+ (0, _util.warn)(`Invalid operator ${operator.name} in visibility expression`);
+ return;
+ }
+
+ for (let i = 1; i < length; i++) {
+ const raw = array[i];
+ const object = this.xref.fetchIfRef(raw);
+
+ if (Array.isArray(object)) {
+ const nestedResult = [];
+ currentResult.push(nestedResult);
+
+ this._parseVisibilityExpression(object, nestingCounter, nestedResult);
+ } else if ((0, _primitives.isRef)(raw)) {
+ currentResult.push(raw.toString());
+ }
+ }
+ }
+
async parseMarkedContentProps(contentProperties, resources) {
let optionalContent;
@@ -22563,30 +9491,39 @@ class PartialEvaluator {
id: optionalContent.objId
};
} else if (optionalContentType === "OCMD") {
+ const expression = optionalContent.get("VE");
+
+ if (Array.isArray(expression)) {
+ const result = [];
+
+ this._parseVisibilityExpression(expression, 0, result);
+
+ if (result.length > 0) {
+ return {
+ type: "OCMD",
+ expression: result
+ };
+ }
+ }
+
const optionalContentGroups = optionalContent.get("OCGs");
if (Array.isArray(optionalContentGroups) || (0, _primitives.isDict)(optionalContentGroups)) {
const groupIds = [];
if (Array.isArray(optionalContentGroups)) {
- optionalContent.get("OCGs").forEach(ocg => {
+ for (const ocg of optionalContentGroups) {
groupIds.push(ocg.toString());
- });
+ }
} else {
groupIds.push(optionalContentGroups.objId);
}
- let expression = null;
-
- if (optionalContent.get("VE")) {
- expression = true;
- }
-
return {
type: optionalContentType,
ids: groupIds,
policy: (0, _primitives.isName)(optionalContent.get("P")) ? optionalContent.get("P").name : null,
- expression
+ expression: null
};
} else if ((0, _primitives.isRef)(optionalContentGroups)) {
return {
@@ -22604,7 +9541,8 @@ class PartialEvaluator {
task,
resources,
operatorList,
- initialState = null
+ initialState = null,
+ fallbackFontDict = null
}) {
resources = resources || _primitives.Dict.empty;
initialState = initialState || new EvalState();
@@ -22613,23 +9551,25 @@ class PartialEvaluator {
throw new Error('getOperatorList: missing "operatorList" parameter');
}
- var self = this;
- var xref = this.xref;
+ const self = this;
+ const xref = this.xref;
let parsingText = false;
const localImageCache = new _image_utils.LocalImageCache();
const localColorSpaceCache = new _image_utils.LocalColorSpaceCache();
const localGStateCache = new _image_utils.LocalGStateCache();
+ const localTilingPatternCache = new _image_utils.LocalTilingPatternCache();
+ const localShadingPatternCache = new Map();
- var xobjs = resources.get("XObject") || _primitives.Dict.empty;
+ const xobjs = resources.get("XObject") || _primitives.Dict.empty;
- var patterns = resources.get("Pattern") || _primitives.Dict.empty;
+ const patterns = resources.get("Pattern") || _primitives.Dict.empty;
- var stateManager = new StateManager(initialState);
- var preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager);
- var timeSlotManager = new TimeSlotManager();
+ const stateManager = new StateManager(initialState);
+ const preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager);
+ const timeSlotManager = new TimeSlotManager();
function closePendingRestoreOPS(argument) {
- for (var i = 0, ii = preprocessor.savedStatesDepth; i < ii; i++) {
+ for (let i = 0, ii = preprocessor.savedStatesDepth; i < ii; i++) {
operatorList.addOp(_util.OPS.restore, []);
}
}
@@ -22647,12 +9587,8 @@ class PartialEvaluator {
task.ensureNotTerminated();
timeSlotManager.reset();
- var stop,
- operation = {},
- i,
- ii,
- cs,
- name;
+ const operation = {};
+ let stop, i, ii, cs, name, isValidName;
while (!(stop = timeSlotManager.check())) {
operation.args = null;
@@ -22661,14 +9597,15 @@ class PartialEvaluator {
break;
}
- var args = operation.args;
- var fn = operation.fn;
+ let args = operation.args;
+ let fn = operation.fn;
switch (fn | 0) {
case _util.OPS.paintXObject:
+ isValidName = args[0] instanceof _primitives.Name;
name = args[0].name;
- if (name) {
+ if (isValidName) {
const localImage = localImageCache.getByName(name);
if (localImage) {
@@ -22679,7 +9616,7 @@ class PartialEvaluator {
}
next(new Promise(function (resolveXObject, rejectXObject) {
- if (!name) {
+ if (!isValidName) {
throw new _util.FormatError("XObject must be referred to by name.");
}
@@ -22759,7 +9696,7 @@ class PartialEvaluator {
case _util.OPS.setFont:
var fontSize = args[1];
- next(self.handleSetFont(resources, args, null, operatorList, task, stateManager.state).then(function (loadedName) {
+ next(self.handleSetFont(resources, args, null, operatorList, task, stateManager.state, fallbackFontDict).then(function (loadedName) {
operatorList.addDependency(loadedName);
operatorList.addOp(_util.OPS.setFont, [loadedName, fontSize]);
}));
@@ -22818,7 +9755,7 @@ class PartialEvaluator {
var state = stateManager.state;
for (i = 0; i < arrLength; ++i) {
- var arrItem = arr[i];
+ const arrItem = arr[i];
if ((0, _util.isString)(arrItem)) {
Array.prototype.push.apply(combinedGlyphs, self.handleText(arrItem, state));
@@ -22951,7 +9888,7 @@ class PartialEvaluator {
cs = stateManager.state.fillColorSpace;
if (cs.name === "Pattern") {
- next(self.handleColorN(operatorList, _util.OPS.setFillColorN, args, cs, patterns, resources, task, localColorSpaceCache));
+ next(self.handleColorN(operatorList, _util.OPS.setFillColorN, args, cs, patterns, resources, task, localColorSpaceCache, localTilingPatternCache, localShadingPatternCache));
return;
}
@@ -22963,7 +9900,7 @@ class PartialEvaluator {
cs = stateManager.state.strokeColorSpace;
if (cs.name === "Pattern") {
- next(self.handleColorN(operatorList, _util.OPS.setStrokeColorN, args, cs, patterns, resources, task, localColorSpaceCache));
+ next(self.handleColorN(operatorList, _util.OPS.setStrokeColorN, args, cs, patterns, resources, task, localColorSpaceCache, localTilingPatternCache, localShadingPatternCache));
return;
}
@@ -22984,17 +9921,22 @@ class PartialEvaluator {
throw new _util.FormatError("No shading object found");
}
- var shadingFill = _pattern.Pattern.parseShading(shading, null, xref, resources, self.handler, self._pdfFunctionFactory, localColorSpaceCache);
-
- var patternIR = shadingFill.getIR();
- args = [patternIR];
+ const patternId = self.parseShading({
+ keyObj: shading,
+ shading,
+ resources,
+ localColorSpaceCache,
+ localShadingPatternCache
+ });
+ args = [patternId];
fn = _util.OPS.shadingFill;
break;
case _util.OPS.setGState:
+ isValidName = args[0] instanceof _primitives.Name;
name = args[0].name;
- if (name) {
+ if (isValidName) {
const localGStateObj = localGStateCache.getByName(name);
if (localGStateObj) {
@@ -23008,7 +9950,7 @@ class PartialEvaluator {
}
next(new Promise(function (resolveGState, rejectGState) {
- if (!name) {
+ if (!isValidName) {
throw new _util.FormatError("GState must be referred to by name.");
}
@@ -23094,7 +10036,7 @@ class PartialEvaluator {
return;
}
- args = [args[0].name];
+ args = [args[0].name, args[1] instanceof _primitives.Dict ? args[1].get("MCID") : null];
break;
case _util.OPS.beginMarkedContent:
@@ -23150,54 +10092,75 @@ class PartialEvaluator {
stateManager = null,
normalizeWhitespace = false,
combineTextItems = false,
+ includeMarkedContent = false,
sink,
- seenStyles = Object.create(null)
+ seenStyles = new Set()
}) {
resources = resources || _primitives.Dict.empty;
stateManager = stateManager || new StateManager(new TextState());
- var WhitespaceRegexp = /\s/g;
- var textContent = {
+ const WhitespaceRegexp = /\s/g;
+ const textContent = {
items: [],
styles: Object.create(null)
};
- var textContentItem = {
+ const textContentItem = {
initialized: false,
str: [],
+ totalWidth: 0,
+ totalHeight: 0,
width: 0,
height: 0,
vertical: false,
- lastAdvanceWidth: 0,
- lastAdvanceHeight: 0,
+ lastCharSize: 0,
+ prevTransform: null,
textAdvanceScale: 0,
spaceWidth: 0,
- fakeSpaceMin: Infinity,
- fakeMultiSpaceMin: Infinity,
- fakeMultiSpaceMax: -0,
- textRunBreakAllowed: false,
+ spaceInFlowMin: 0,
+ spaceInFlowMax: 0,
+ trackingSpaceMin: Infinity,
transform: null,
- fontName: null
+ fontName: null,
+ hasEOL: false,
+ isLastCharWhiteSpace: false
};
- var SPACE_FACTOR = 0.3;
- var MULTI_SPACE_FACTOR = 1.5;
- var MULTI_SPACE_FACTOR_MAX = 4;
- var self = this;
- var xref = this.xref;
- var xobjs = null;
+ const TRACKING_SPACE_FACTOR = 0.3;
+ const SPACE_IN_FLOW_MIN_FACTOR = 0.3;
+ const SPACE_IN_FLOW_MAX_FACTOR = 1.3;
+ const self = this;
+ const xref = this.xref;
+ const showSpacedTextBuffer = [];
+ let xobjs = null;
const emptyXObjectCache = new _image_utils.LocalImageCache();
const emptyGStateCache = new _image_utils.LocalGStateCache();
- var preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager);
- var textState;
+ const preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager);
+ let textState;
+
+ function getCurrentTextTransform() {
+ const font = textState.font;
+ const tsm = [textState.fontSize * textState.textHScale, 0, 0, textState.fontSize, 0, textState.textRise];
+
+ if (font.isType3Font && (textState.fontSize <= 1 || font.isCharBBox) && !(0, _util.isArrayEqual)(textState.fontMatrix, _util.FONT_IDENTITY_MATRIX)) {
+ const glyphHeight = font.bbox[3] - font.bbox[1];
+
+ if (glyphHeight > 0) {
+ tsm[3] *= glyphHeight * textState.fontMatrix[3];
+ }
+ }
+
+ return _util.Util.transform(textState.ctm, _util.Util.transform(textState.textMatrix, tsm));
+ }
function ensureTextContentItem() {
if (textContentItem.initialized) {
return textContentItem;
}
- var font = textState.font;
+ const font = textState.font,
+ loadedName = font.loadedName;
- if (!(font.loadedName in seenStyles)) {
- seenStyles[font.loadedName] = true;
- textContent.styles[font.loadedName] = {
+ if (!seenStyles.has(loadedName)) {
+ seenStyles.add(loadedName);
+ textContent.styles[loadedName] = {
fontFamily: font.fallbackName,
ascent: font.ascent,
descent: font.descent,
@@ -23205,63 +10168,67 @@ class PartialEvaluator {
};
}
- textContentItem.fontName = font.loadedName;
- var tsm = [textState.fontSize * textState.textHScale, 0, 0, textState.fontSize, 0, textState.textRise];
-
- if (font.isType3Font && textState.fontSize <= 1 && !(0, _util.isArrayEqual)(textState.fontMatrix, _util.FONT_IDENTITY_MATRIX)) {
- const glyphHeight = font.bbox[3] - font.bbox[1];
-
- if (glyphHeight > 0) {
- tsm[3] *= glyphHeight * textState.fontMatrix[3];
- }
- }
-
- var trm = _util.Util.transform(textState.ctm, _util.Util.transform(textState.textMatrix, tsm));
-
- textContentItem.transform = trm;
+ textContentItem.fontName = loadedName;
+ const trm = textContentItem.transform = getCurrentTextTransform();
if (!font.vertical) {
- textContentItem.width = 0;
- textContentItem.height = Math.sqrt(trm[2] * trm[2] + trm[3] * trm[3]);
+ textContentItem.width = textContentItem.totalWidth = 0;
+ textContentItem.height = textContentItem.totalHeight = Math.hypot(trm[2], trm[3]);
textContentItem.vertical = false;
} else {
- textContentItem.width = Math.sqrt(trm[0] * trm[0] + trm[1] * trm[1]);
- textContentItem.height = 0;
+ textContentItem.width = textContentItem.totalWidth = Math.hypot(trm[0], trm[1]);
+ textContentItem.height = textContentItem.totalHeight = 0;
textContentItem.vertical = true;
}
- var a = textState.textLineMatrix[0];
- var b = textState.textLineMatrix[1];
- var scaleLineX = Math.sqrt(a * a + b * b);
- a = textState.ctm[0];
- b = textState.ctm[1];
- var scaleCtmX = Math.sqrt(a * a + b * b);
+ const scaleLineX = Math.hypot(textState.textLineMatrix[0], textState.textLineMatrix[1]);
+ const scaleCtmX = Math.hypot(textState.ctm[0], textState.ctm[1]);
textContentItem.textAdvanceScale = scaleCtmX * scaleLineX;
- textContentItem.lastAdvanceWidth = 0;
- textContentItem.lastAdvanceHeight = 0;
- var spaceWidth = font.spaceWidth / 1000 * textState.fontSize;
+ textContentItem.lastCharSize = textContentItem.lastCharSize || 0;
+ const spaceWidth = font.spaceWidth / 1000 * textState.fontSize;
if (spaceWidth) {
textContentItem.spaceWidth = spaceWidth;
- textContentItem.fakeSpaceMin = spaceWidth * SPACE_FACTOR;
- textContentItem.fakeMultiSpaceMin = spaceWidth * MULTI_SPACE_FACTOR;
- textContentItem.fakeMultiSpaceMax = spaceWidth * MULTI_SPACE_FACTOR_MAX;
- textContentItem.textRunBreakAllowed = !font.isMonospace;
+ textContentItem.trackingSpaceMin = spaceWidth * TRACKING_SPACE_FACTOR;
+ textContentItem.spaceInFlowMin = spaceWidth * SPACE_IN_FLOW_MIN_FACTOR;
+ textContentItem.spaceInFlowMax = spaceWidth * SPACE_IN_FLOW_MAX_FACTOR;
} else {
textContentItem.spaceWidth = 0;
- textContentItem.fakeSpaceMin = Infinity;
- textContentItem.fakeMultiSpaceMin = Infinity;
- textContentItem.fakeMultiSpaceMax = 0;
- textContentItem.textRunBreakAllowed = false;
+ textContentItem.trackingSpaceMin = Infinity;
}
+ textContentItem.hasEOL = false;
textContentItem.initialized = true;
return textContentItem;
}
+ function updateAdvanceScale() {
+ if (!textContentItem.initialized) {
+ return;
+ }
+
+ const scaleLineX = Math.hypot(textState.textLineMatrix[0], textState.textLineMatrix[1]);
+ const scaleCtmX = Math.hypot(textState.ctm[0], textState.ctm[1]);
+ const scaleFactor = scaleCtmX * scaleLineX;
+
+ if (scaleFactor === textContentItem.textAdvanceScale) {
+ return;
+ }
+
+ if (!textContentItem.vertical) {
+ textContentItem.totalWidth += textContentItem.width * textContentItem.textAdvanceScale;
+ textContentItem.width = 0;
+ } else {
+ textContentItem.totalHeight += textContentItem.height * textContentItem.textAdvanceScale;
+ textContentItem.height = 0;
+ }
+
+ textContentItem.textAdvanceScale = scaleFactor;
+ }
+
function replaceWhitespace(str) {
- var i = 0,
- ii = str.length,
+ const ii = str.length;
+ let i = 0,
code;
while (i < ii && (code = str.charCodeAt(i)) >= 0x20 && code <= 0x7f) {
@@ -23272,115 +10239,284 @@ class PartialEvaluator {
}
function runBidiTransform(textChunk) {
- var str = textChunk.str.join("");
- var bidiResult = (0, _bidi.bidi)(str, -1, textChunk.vertical);
+ const text = textChunk.str.join("");
+ const bidiResult = (0, _bidi.bidi)(text, -1, textChunk.vertical);
+ const str = normalizeWhitespace ? replaceWhitespace(bidiResult.str) : bidiResult.str;
return {
- str: normalizeWhitespace ? replaceWhitespace(bidiResult.str) : bidiResult.str,
+ str,
dir: bidiResult.dir,
- width: textChunk.width,
- height: textChunk.height,
+ width: textChunk.totalWidth,
+ height: textChunk.totalHeight,
transform: textChunk.transform,
- fontName: textChunk.fontName
+ fontName: textChunk.fontName,
+ hasEOL: textChunk.hasEOL
};
}
function handleSetFont(fontName, fontRef) {
return self.loadFont(fontName, fontRef, resources).then(function (translated) {
+ if (!translated.font.isType3Font) {
+ return translated;
+ }
+
+ return translated.loadType3Data(self, resources, task).catch(function () {}).then(function () {
+ return translated;
+ });
+ }).then(function (translated) {
textState.font = translated.font;
textState.fontMatrix = translated.font.fontMatrix || _util.FONT_IDENTITY_MATRIX;
});
}
- function buildTextContentItem(chars) {
- var font = textState.font;
- var textChunk = ensureTextContentItem();
- var width = 0;
- var height = 0;
- var glyphs = font.charsToGlyphs(chars);
+ function compareWithLastPosition(fontSize) {
+ if (!combineTextItems || !textState.font || !textContentItem.prevTransform) {
+ return;
+ }
+
+ const currentTransform = getCurrentTextTransform();
+ const posX = currentTransform[4];
+ const posY = currentTransform[5];
+ const lastPosX = textContentItem.prevTransform[4];
+ const lastPosY = textContentItem.prevTransform[5];
+
+ if (lastPosX === posX && lastPosY === posY) {
+ return;
+ }
- for (var i = 0; i < glyphs.length; i++) {
- var glyph = glyphs[i];
- var glyphWidth = null;
+ const advanceX = (posX - lastPosX) / textContentItem.textAdvanceScale;
+ const advanceY = (posY - lastPosY) / textContentItem.textAdvanceScale;
+ const HALF_LAST_CHAR = -0.5 * textContentItem.lastCharSize;
- if (font.vertical && glyph.vmetric) {
- glyphWidth = glyph.vmetric[0];
- } else {
- glyphWidth = glyph.width;
+ if (textState.font.vertical) {
+ if (Math.abs(advanceX) > textContentItem.width / textContentItem.textAdvanceScale) {
+ appendEOL();
+ return;
}
- var glyphUnicode = glyph.unicode;
- var NormalizedUnicodes = (0, _unicode.getNormalizedUnicodes)();
+ if (HALF_LAST_CHAR > advanceY) {
+ return;
+ }
- if (NormalizedUnicodes[glyphUnicode] !== undefined) {
- glyphUnicode = NormalizedUnicodes[glyphUnicode];
+ if (advanceY > textContentItem.trackingSpaceMin) {
+ textContentItem.height += advanceY;
+ } else if (!addFakeSpaces(advanceY, 0, textContentItem.prevTransform)) {
+ if (textContentItem.str.length === 0) {
+ textContent.items.push({
+ str: " ",
+ dir: "ltr",
+ width: 0,
+ height: advanceY,
+ transform: textContentItem.prevTransform,
+ fontName: textContentItem.fontName,
+ hasEOL: false
+ });
+ textContentItem.isLastCharWhiteSpace = true;
+ } else {
+ textContentItem.height += advanceY;
+ }
}
- glyphUnicode = (0, _unicode.reverseIfRtl)(glyphUnicode);
- var charSpacing = textState.charSpacing;
+ return;
+ }
- if (glyph.isSpace) {
- var wordSpacing = textState.wordSpacing;
- charSpacing += wordSpacing;
+ if (Math.abs(advanceY) > textContentItem.height / textContentItem.textAdvanceScale) {
+ appendEOL();
+ return;
+ }
+
+ if (HALF_LAST_CHAR > advanceX) {
+ return;
+ }
+
+ if (advanceX <= textContentItem.trackingSpaceMin) {
+ textContentItem.width += advanceX;
+ } else if (!addFakeSpaces(advanceX, 0, textContentItem.prevTransform)) {
+ if (textContentItem.str.length === 0) {
+ textContent.items.push({
+ str: " ",
+ dir: "ltr",
+ width: advanceX,
+ height: 0,
+ transform: textContentItem.prevTransform,
+ fontName: textContentItem.fontName,
+ hasEOL: false
+ });
+ textContentItem.isLastCharWhiteSpace = true;
+ } else {
+ textContentItem.width += advanceX;
+ }
+ }
+ }
+
+ function buildTextContentItem({
+ chars,
+ extraSpacing,
+ isFirstChunk
+ }) {
+ const font = textState.font;
- if (wordSpacing > 0) {
- addFakeSpaces(wordSpacing, textChunk.str);
+ if (!chars) {
+ const charSpacing = textState.charSpacing + extraSpacing;
+
+ if (charSpacing) {
+ if (!font.vertical) {
+ textState.translateTextMatrix(charSpacing * textState.textHScale, 0);
+ } else {
+ textState.translateTextMatrix(0, charSpacing);
}
}
- var tx = 0;
- var ty = 0;
+ return;
+ }
- if (!font.vertical) {
- var w0 = glyphWidth * textState.fontMatrix[0];
- tx = (w0 * textState.fontSize + charSpacing) * textState.textHScale;
- width += tx;
+ const NormalizedUnicodes = (0, _unicode.getNormalizedUnicodes)();
+ const glyphs = font.charsToGlyphs(chars);
+ const scale = textState.fontMatrix[0] * textState.fontSize;
+
+ if (isFirstChunk) {
+ compareWithLastPosition(scale);
+ }
+
+ let textChunk = ensureTextContentItem();
+ let size = 0;
+ let lastCharSize = 0;
+
+ for (let i = 0, ii = glyphs.length; i < ii; i++) {
+ const glyph = glyphs[i];
+ let charSpacing = textState.charSpacing + (i === ii - 1 ? extraSpacing : 0);
+ let glyphUnicode = glyph.unicode;
+
+ if (glyph.isSpace) {
+ charSpacing += textState.wordSpacing;
+ textChunk.isLastCharWhiteSpace = true;
} else {
- var w1 = glyphWidth * textState.fontMatrix[0];
- ty = w1 * textState.fontSize + charSpacing;
- height += ty;
+ glyphUnicode = NormalizedUnicodes[glyphUnicode] || glyphUnicode;
+ glyphUnicode = (0, _unicode.reverseIfRtl)(glyphUnicode);
+ textChunk.isLastCharWhiteSpace = false;
}
- textState.translateTextMatrix(tx, ty);
textChunk.str.push(glyphUnicode);
+ const glyphWidth = font.vertical && glyph.vmetric ? glyph.vmetric[0] : glyph.width;
+ let scaledDim = glyphWidth * scale;
+
+ if (!font.vertical) {
+ scaledDim *= textState.textHScale;
+ textState.translateTextMatrix(scaledDim, 0);
+ } else {
+ textState.translateTextMatrix(0, scaledDim);
+ scaledDim = Math.abs(scaledDim);
+ }
+
+ size += scaledDim;
+
+ if (charSpacing) {
+ if (!font.vertical) {
+ charSpacing *= textState.textHScale;
+ }
+
+ scaledDim += charSpacing;
+ const wasSplit = charSpacing > textContentItem.trackingSpaceMin && addFakeSpaces(charSpacing, size);
+
+ if (!font.vertical) {
+ textState.translateTextMatrix(charSpacing, 0);
+ } else {
+ textState.translateTextMatrix(0, charSpacing);
+ }
+
+ if (wasSplit) {
+ textChunk = ensureTextContentItem();
+ size = 0;
+ } else {
+ size += charSpacing;
+ }
+ }
+
+ lastCharSize = scaledDim;
}
+ textChunk.lastCharSize = lastCharSize;
+
if (!font.vertical) {
- textChunk.lastAdvanceWidth = width;
- textChunk.width += width;
+ textChunk.width += size;
} else {
- textChunk.lastAdvanceHeight = height;
- textChunk.height += Math.abs(height);
+ textChunk.height += size;
}
- return textChunk;
+ textChunk.prevTransform = getCurrentTextTransform();
}
- function addFakeSpaces(width, strBuf) {
- if (width < textContentItem.fakeSpaceMin) {
- return;
+ function appendEOL() {
+ if (textContentItem.initialized) {
+ textContentItem.hasEOL = true;
+ flushTextContentItem();
+ } else if (textContent.items.length > 0) {
+ textContent.items[textContent.items.length - 1].hasEOL = true;
+ } else {
+ textContent.items.push({
+ str: "",
+ dir: "ltr",
+ width: 0,
+ height: 0,
+ transform: getCurrentTextTransform(),
+ fontName: textState.font.loadedName,
+ hasEOL: true
+ });
}
- if (width < textContentItem.fakeMultiSpaceMin) {
- strBuf.push(" ");
- return;
+ textContentItem.isLastCharWhiteSpace = false;
+ textContentItem.lastCharSize = 0;
+ }
+
+ function addFakeSpaces(width, size, transf = null) {
+ if (textContentItem.spaceInFlowMin <= width && width <= textContentItem.spaceInFlowMax) {
+ if (textContentItem.initialized) {
+ textContentItem.str.push(" ");
+ textContentItem.isLastCharWhiteSpace = true;
+ }
+
+ return false;
+ }
+
+ const fontName = textContentItem.fontName;
+ let height = 0;
+ width *= textContentItem.textAdvanceScale;
+
+ if (!textContentItem.vertical) {
+ textContentItem.width += size;
+ } else {
+ textContentItem.height += size;
+ height = width;
+ width = 0;
}
- var fakeSpaces = Math.round(width / textContentItem.spaceWidth);
+ flushTextContentItem();
- while (fakeSpaces-- > 0) {
- strBuf.push(" ");
+ if (textContentItem.isLastCharWhiteSpace) {
+ return true;
}
+
+ textContentItem.isLastCharWhiteSpace = true;
+ textContent.items.push({
+ str: " ",
+ dir: "ltr",
+ width,
+ height,
+ transform: transf ? transf : getCurrentTextTransform(),
+ fontName,
+ hasEOL: false
+ });
+ return true;
}
function flushTextContentItem() {
- if (!textContentItem.initialized) {
+ if (!textContentItem.initialized || !textContentItem.str) {
return;
}
if (!textContentItem.vertical) {
- textContentItem.width *= textContentItem.textAdvanceScale;
+ textContentItem.totalWidth += textContentItem.width * textContentItem.textAdvanceScale;
} else {
- textContentItem.height *= textContentItem.textAdvanceScale;
+ textContentItem.totalHeight += textContentItem.height * textContentItem.textAdvanceScale;
}
textContent.items.push(runBidiTransform(textContentItem));
@@ -23398,7 +10534,7 @@ class PartialEvaluator {
}
}
- var timeSlotManager = new TimeSlotManager();
+ const timeSlotManager = new TimeSlotManager();
return new Promise(function promiseBody(resolve, reject) {
const next = function (promise) {
enqueueChunk();
@@ -23413,8 +10549,8 @@ class PartialEvaluator {
task.ensureNotTerminated();
timeSlotManager.reset();
- var stop,
- operation = {},
+ const operation = {};
+ let stop,
args = [];
while (!(stop = timeSlotManager.check())) {
@@ -23426,9 +10562,8 @@ class PartialEvaluator {
}
textState = stateManager.state;
- var fn = operation.fn;
+ const fn = operation.fn;
args = operation.args;
- var advance, diff;
switch (fn | 0) {
case _util.OPS.setFont:
@@ -23461,19 +10596,6 @@ class PartialEvaluator {
break;
case _util.OPS.moveText:
- var isSameTextLine = !textState.font ? false : (textState.font.vertical ? args[0] : args[1]) === 0;
- advance = args[0] - args[1];
-
- if (combineTextItems && isSameTextLine && textContentItem.initialized && advance > 0 && advance <= textContentItem.fakeMultiSpaceMax) {
- textState.translateTextLineMatrix(args[0], args[1]);
- textContentItem.width += args[0] - textContentItem.lastAdvanceWidth;
- textContentItem.height += args[1] - textContentItem.lastAdvanceHeight;
- diff = args[0] - textContentItem.lastAdvanceWidth - (args[1] - textContentItem.lastAdvanceHeight);
- addFakeSpaces(diff, textContentItem.str);
- break;
- }
-
- flushTextContentItem();
textState.translateTextLineMatrix(args[0], args[1]);
textState.textMatrix = textState.textLineMatrix.slice();
break;
@@ -23486,25 +10608,14 @@ class PartialEvaluator {
break;
case _util.OPS.nextLine:
- flushTextContentItem();
+ appendEOL();
textState.carriageReturn();
break;
case _util.OPS.setTextMatrix:
- advance = textState.calcTextLineMatrixAdvance(args[0], args[1], args[2], args[3], args[4], args[5]);
-
- if (combineTextItems && advance !== null && textContentItem.initialized && advance.value > 0 && advance.value <= textContentItem.fakeMultiSpaceMax) {
- textState.translateTextLineMatrix(advance.width, advance.height);
- textContentItem.width += advance.width - textContentItem.lastAdvanceWidth;
- textContentItem.height += advance.height - textContentItem.lastAdvanceHeight;
- diff = advance.width - textContentItem.lastAdvanceWidth - (advance.height - textContentItem.lastAdvanceHeight);
- addFakeSpaces(diff, textContentItem.str);
- break;
- }
-
- flushTextContentItem();
textState.setTextMatrix(args[0], args[1], args[2], args[3], args[4], args[5]);
textState.setTextLineMatrix(args[0], args[1], args[2], args[3], args[4], args[5]);
+ updateAdvanceScale();
break;
case _util.OPS.setCharSpacing:
@@ -23527,42 +10638,44 @@ class PartialEvaluator {
continue;
}
- var items = args[0];
- var offset;
-
- for (var j = 0, jj = items.length; j < jj; j++) {
- if (typeof items[j] === "string") {
- buildTextContentItem(items[j]);
- } else if ((0, _util.isNum)(items[j])) {
- ensureTextContentItem();
- advance = items[j] * textState.fontSize / 1000;
- var breakTextRun = false;
+ const spaceFactor = (textState.font.vertical ? 1 : -1) * textState.fontSize / 1000;
+ const elements = args[0];
+ let isFirstChunk = true;
+
+ for (let i = 0, ii = elements.length; i < ii - 1; i++) {
+ const item = elements[i];
+
+ if (typeof item === "string") {
+ showSpacedTextBuffer.push(item);
+ } else if (typeof item === "number" && item !== 0) {
+ const str = showSpacedTextBuffer.join("");
+ showSpacedTextBuffer.length = 0;
+ buildTextContentItem({
+ chars: str,
+ extraSpacing: item * spaceFactor,
+ isFirstChunk
+ });
- if (textState.font.vertical) {
- offset = advance;
- textState.translateTextMatrix(0, offset);
- breakTextRun = textContentItem.textRunBreakAllowed && advance > textContentItem.fakeMultiSpaceMax;
+ if (str && isFirstChunk) {
+ isFirstChunk = false;
+ }
+ }
+ }
- if (!breakTextRun) {
- textContentItem.height += offset;
- }
- } else {
- advance = -advance;
- offset = advance * textState.textHScale;
- textState.translateTextMatrix(offset, 0);
- breakTextRun = textContentItem.textRunBreakAllowed && advance > textContentItem.fakeMultiSpaceMax;
+ const item = elements[elements.length - 1];
- if (!breakTextRun) {
- textContentItem.width += offset;
- }
- }
+ if (typeof item === "string") {
+ showSpacedTextBuffer.push(item);
+ }
- if (breakTextRun) {
- flushTextContentItem();
- } else if (advance > 0) {
- addFakeSpaces(advance, textContentItem.str);
- }
- }
+ if (showSpacedTextBuffer.length > 0) {
+ const str = showSpacedTextBuffer.join("");
+ showSpacedTextBuffer.length = 0;
+ buildTextContentItem({
+ chars: str,
+ extraSpacing: 0,
+ isFirstChunk
+ });
}
break;
@@ -23573,7 +10686,11 @@ class PartialEvaluator {
continue;
}
- buildTextContentItem(args[0]);
+ buildTextContentItem({
+ chars: args[0],
+ extraSpacing: 0,
+ isFirstChunk: true
+ });
break;
case _util.OPS.nextLineShowText:
@@ -23582,9 +10699,14 @@ class PartialEvaluator {
continue;
}
+ textContentItem.hasEOL = true;
flushTextContentItem();
textState.carriageReturn();
- buildTextContentItem(args[0]);
+ buildTextContentItem({
+ chars: args[0],
+ extraSpacing: 0,
+ isFirstChunk: true
+ });
break;
case _util.OPS.nextLineSetSpacingShowText:
@@ -23593,11 +10715,16 @@ class PartialEvaluator {
continue;
}
+ textContentItem.hasEOL = true;
flushTextContentItem();
textState.wordSpacing = args[0];
textState.charSpacing = args[1];
textState.carriageReturn();
- buildTextContentItem(args[2]);
+ buildTextContentItem({
+ chars: args[2],
+ extraSpacing: 0,
+ isFirstChunk: true
+ });
break;
case _util.OPS.paintXObject:
@@ -23607,14 +10734,15 @@ class PartialEvaluator {
xobjs = resources.get("XObject") || _primitives.Dict.empty;
}
+ var isValidName = args[0] instanceof _primitives.Name;
var name = args[0].name;
- if (name && emptyXObjectCache.getByName(name)) {
+ if (isValidName && emptyXObjectCache.getByName(name)) {
break;
}
next(new Promise(function (resolveXObject, rejectXObject) {
- if (!name) {
+ if (!isValidName) {
throw new _util.FormatError("XObject must be referred to by name.");
}
@@ -23626,6 +10754,13 @@ class PartialEvaluator {
return;
}
+ const globalImage = self.globalImageCache.getData(xobj, self.pageIndex);
+
+ if (globalImage) {
+ resolveXObject();
+ return;
+ }
+
xobj = xref.fetch(xobj);
}
@@ -23678,6 +10813,7 @@ class PartialEvaluator {
stateManager: xObjStateManager,
normalizeWhitespace,
combineTextItems,
+ includeMarkedContent,
sink: sinkWrapper,
seenStyles
}).then(function () {
@@ -23702,14 +10838,15 @@ class PartialEvaluator {
return;
case _util.OPS.setGState:
+ isValidName = args[0] instanceof _primitives.Name;
name = args[0].name;
- if (name && emptyGStateCache.getByName(name)) {
+ if (isValidName && emptyGStateCache.getByName(name)) {
break;
}
next(new Promise(function (resolveGState, rejectGState) {
- if (!name) {
+ if (!isValidName) {
throw new _util.FormatError("GState must be referred to by name.");
}
@@ -23750,6 +10887,44 @@ class PartialEvaluator {
throw reason;
}));
return;
+
+ case _util.OPS.beginMarkedContent:
+ if (includeMarkedContent) {
+ textContent.items.push({
+ type: "beginMarkedContent",
+ tag: (0, _primitives.isName)(args[0]) ? args[0].name : null
+ });
+ }
+
+ break;
+
+ case _util.OPS.beginMarkedContentProps:
+ if (includeMarkedContent) {
+ flushTextContentItem();
+ let mcid = null;
+
+ if ((0, _primitives.isDict)(args[1])) {
+ mcid = args[1].get("MCID");
+ }
+
+ textContent.items.push({
+ type: "beginMarkedContentProps",
+ id: Number.isInteger(mcid) ? `${self.idFactory.getPageObjId()}_mcid${mcid}` : null,
+ tag: (0, _primitives.isName)(args[0]) ? args[0].name : null
+ });
+ }
+
+ break;
+
+ case _util.OPS.endMarkedContent:
+ if (includeMarkedContent) {
+ flushTextContentItem();
+ textContent.items.push({
+ type: "endMarkedContent"
+ });
+ }
+
+ break;
}
if (textContent.items.length >= sink.desiredSize) {
@@ -23785,11 +10960,10 @@ class PartialEvaluator {
extractDataStructures(dict, baseDict, properties) {
const xref = this.xref;
let cidToGidBytes;
- var toUnicode = dict.get("ToUnicode") || baseDict.get("ToUnicode");
- var toUnicodePromise = toUnicode ? this.readToUnicode(toUnicode) : Promise.resolve(undefined);
+ const toUnicodePromise = this.readToUnicode(properties.toUnicode || dict.get("ToUnicode") || baseDict.get("ToUnicode"));
if (properties.composite) {
- var cidSystemInfo = dict.get("CIDSystemInfo");
+ const cidSystemInfo = dict.get("CIDSystemInfo");
if ((0, _primitives.isDict)(cidSystemInfo)) {
properties.cidSystemInfo = {
@@ -23799,16 +10973,16 @@ class PartialEvaluator {
};
}
- var cidToGidMap = dict.get("CIDToGIDMap");
+ const cidToGidMap = dict.get("CIDToGIDMap");
if ((0, _primitives.isStream)(cidToGidMap)) {
cidToGidBytes = cidToGidMap.getBytes();
}
}
- var differences = [];
- var baseEncodingName = null;
- var encoding;
+ const differences = [];
+ let baseEncodingName = null;
+ let encoding;
if (dict.has("Encoding")) {
encoding = dict.get("Encoding");
@@ -23818,11 +10992,11 @@ class PartialEvaluator {
baseEncodingName = (0, _primitives.isName)(baseEncodingName) ? baseEncodingName.name : null;
if (encoding.has("Differences")) {
- var diffEncoding = encoding.get("Differences");
- var index = 0;
+ const diffEncoding = encoding.get("Differences");
+ let index = 0;
- for (var j = 0, jj = diffEncoding.length; j < jj; j++) {
- var data = xref.fetchIfRef(diffEncoding[j]);
+ for (let j = 0, jj = diffEncoding.length; j < jj; j++) {
+ const data = xref.fetchIfRef(diffEncoding[j]);
if ((0, _util.isNum)(data)) {
index = data;
@@ -23845,10 +11019,10 @@ class PartialEvaluator {
}
if (baseEncodingName) {
- properties.defaultEncoding = (0, _encodings.getEncoding)(baseEncodingName).slice();
+ properties.defaultEncoding = (0, _encodings.getEncoding)(baseEncodingName);
} else {
- var isSymbolicFont = !!(properties.flags & _fonts.FontFlags.Symbolic);
- var isNonsymbolicFont = !!(properties.flags & _fonts.FontFlags.Nonsymbolic);
+ const isSymbolicFont = !!(properties.flags & _fonts_utils.FontFlags.Symbolic);
+ const isNonsymbolicFont = !!(properties.flags & _fonts_utils.FontFlags.Nonsymbolic);
encoding = _encodings.StandardEncoding;
if (properties.type === "TrueType" && !isNonsymbolicFont) {
@@ -23858,7 +11032,7 @@ class PartialEvaluator {
if (isSymbolicFont) {
encoding = _encodings.MacRomanEncoding;
- if (!properties.file) {
+ if (!properties.file || properties.isInternalFont) {
if (/Symbol/i.test(properties.name)) {
encoding = _encodings.SymbolSetEncoding;
} else if (/Dingbats|Wingdings/i.test(properties.name)) {
@@ -23888,7 +11062,7 @@ class PartialEvaluator {
});
}
- _buildSimpleFontToUnicode(properties, forceGlyphs = false) {
+ _simpleFontToUnicode(properties, forceGlyphs = false) {
(0, _util.assert)(!properties.composite, "Must be a simple font.");
const toUnicode = [];
const encoding = properties.defaultEncoding.slice();
@@ -23943,7 +11117,7 @@ class PartialEvaluator {
code = +codeStr;
if (Number.isNaN(code) && Number.isInteger(parseInt(codeStr, 16))) {
- return this._buildSimpleFontToUnicode(properties, true);
+ return this._simpleFontToUnicode(properties, true);
}
}
@@ -23977,57 +11151,59 @@ class PartialEvaluator {
toUnicode[charcode] = String.fromCharCode(glyphsUnicodeMap[glyphName]);
}
- return new _fonts.ToUnicodeMap(toUnicode);
+ return toUnicode;
}
- buildToUnicode(properties) {
+ async buildToUnicode(properties) {
properties.hasIncludedToUnicodeMap = !!properties.toUnicode && properties.toUnicode.length > 0;
if (properties.hasIncludedToUnicodeMap) {
if (!properties.composite && properties.hasEncoding) {
- properties.fallbackToUnicode = this._buildSimpleFontToUnicode(properties);
+ properties.fallbackToUnicode = this._simpleFontToUnicode(properties);
}
- return Promise.resolve(properties.toUnicode);
+ return properties.toUnicode;
}
if (!properties.composite) {
- return Promise.resolve(this._buildSimpleFontToUnicode(properties));
+ return new _to_unicode_map.ToUnicodeMap(this._simpleFontToUnicode(properties));
}
if (properties.composite && (properties.cMap.builtInCMap && !(properties.cMap instanceof _cmap.IdentityCMap) || properties.cidSystemInfo.registry === "Adobe" && (properties.cidSystemInfo.ordering === "GB1" || properties.cidSystemInfo.ordering === "CNS1" || properties.cidSystemInfo.ordering === "Japan1" || properties.cidSystemInfo.ordering === "Korea1"))) {
- const registry = properties.cidSystemInfo.registry;
- const ordering = properties.cidSystemInfo.ordering;
+ const {
+ registry,
+ ordering
+ } = properties.cidSystemInfo;
- const ucs2CMapName = _primitives.Name.get(registry + "-" + ordering + "-UCS2");
+ const ucs2CMapName = _primitives.Name.get(`${registry}-${ordering}-UCS2`);
- return _cmap.CMapFactory.create({
+ const ucs2CMap = await _cmap.CMapFactory.create({
encoding: ucs2CMapName,
fetchBuiltInCMap: this._fetchBuiltInCMapBound,
useCMap: null
- }).then(function (ucs2CMap) {
- const cMap = properties.cMap;
- const toUnicode = [];
- cMap.forEach(function (charcode, cid) {
- if (cid > 0xffff) {
- throw new _util.FormatError("Max size of CID is 65,535");
- }
+ });
+ const toUnicode = [];
+ properties.cMap.forEach(function (charcode, cid) {
+ if (cid > 0xffff) {
+ throw new _util.FormatError("Max size of CID is 65,535");
+ }
- const ucs2 = ucs2CMap.lookup(cid);
+ const ucs2 = ucs2CMap.lookup(cid);
- if (ucs2) {
- toUnicode[charcode] = String.fromCharCode((ucs2.charCodeAt(0) << 8) + ucs2.charCodeAt(1));
- }
- });
- return new _fonts.ToUnicodeMap(toUnicode);
+ if (ucs2) {
+ toUnicode[charcode] = String.fromCharCode((ucs2.charCodeAt(0) << 8) + ucs2.charCodeAt(1));
+ }
});
+ return new _to_unicode_map.ToUnicodeMap(toUnicode);
}
- return Promise.resolve(new _fonts.IdentityToUnicodeMap(properties.firstChar, properties.lastChar));
+ return new _to_unicode_map.IdentityToUnicodeMap(properties.firstChar, properties.lastChar);
}
- readToUnicode(toUnicode) {
- var cmapObj = toUnicode;
+ readToUnicode(cmapObj) {
+ if (!cmapObj) {
+ return Promise.resolve(null);
+ }
if ((0, _primitives.isName)(cmapObj)) {
return _cmap.CMapFactory.create({
@@ -24036,10 +11212,10 @@ class PartialEvaluator {
useCMap: null
}).then(function (cmap) {
if (cmap instanceof _cmap.IdentityCMap) {
- return new _fonts.IdentityToUnicodeMap(0, 0xffff);
+ return new _to_unicode_map.IdentityToUnicodeMap(0, 0xffff);
}
- return new _fonts.ToUnicodeMap(cmap.getMap());
+ return new _to_unicode_map.ToUnicodeMap(cmap.getMap());
});
} else if ((0, _primitives.isStream)(cmapObj)) {
return _cmap.CMapFactory.create({
@@ -24048,15 +11224,15 @@ class PartialEvaluator {
useCMap: null
}).then(function (cmap) {
if (cmap instanceof _cmap.IdentityCMap) {
- return new _fonts.IdentityToUnicodeMap(0, 0xffff);
+ return new _to_unicode_map.IdentityToUnicodeMap(0, 0xffff);
}
- var map = new Array(cmap.length);
+ const map = new Array(cmap.length);
cmap.forEach(function (charCode, token) {
- var str = [];
+ const str = [];
- for (var k = 0; k < token.length; k += 2) {
- var w1 = token.charCodeAt(k) << 8 | token.charCodeAt(k + 1);
+ for (let k = 0; k < token.length; k += 2) {
+ const w1 = token.charCodeAt(k) << 8 | token.charCodeAt(k + 1);
if ((w1 & 0xf800) !== 0xd800) {
str.push(w1);
@@ -24064,13 +11240,13 @@ class PartialEvaluator {
}
k += 2;
- var w2 = token.charCodeAt(k) << 8 | token.charCodeAt(k + 1);
+ const w2 = token.charCodeAt(k) << 8 | token.charCodeAt(k + 1);
str.push(((w1 & 0x3ff) << 10) + (w2 & 0x3ff) + 0x10000);
}
map[charCode] = String.fromCodePoint.apply(String, str);
});
- return new _fonts.ToUnicodeMap(map);
+ return new _to_unicode_map.ToUnicodeMap(map);
}, reason => {
if (reason instanceof _util.AbortException) {
return null;
@@ -24092,10 +11268,10 @@ class PartialEvaluator {
}
readCidToGidMap(glyphsData, toUnicode) {
- var result = [];
+ const result = [];
- for (var j = 0, jj = glyphsData.length; j < jj; j++) {
- var glyphID = glyphsData[j++] << 8 | glyphsData[j];
+ for (let j = 0, jj = glyphsData.length; j < jj; j++) {
+ const glyphID = glyphsData[j++] << 8 | glyphsData[j];
const code = j >> 1;
if (glyphID === 0 && !toUnicode.has(code)) {
@@ -24109,12 +11285,12 @@ class PartialEvaluator {
}
extractWidths(dict, descriptor, properties) {
- var xref = this.xref;
- var glyphsWidths = [];
- var defaultWidth = 0;
- var glyphsVMetrics = [];
- var defaultVMetrics;
- var i, ii, j, jj, start, code, widths;
+ const xref = this.xref;
+ let glyphsWidths = [];
+ let defaultWidth = 0;
+ const glyphsVMetrics = [];
+ let defaultVMetrics;
+ let i, ii, j, jj, start, code, widths;
if (properties.composite) {
defaultWidth = dict.has("DW") ? dict.get("DW") : 1000;
@@ -24130,7 +11306,7 @@ class PartialEvaluator {
glyphsWidths[start++] = xref.fetchIfRef(code[j]);
}
} else {
- var width = xref.fetchIfRef(widths[++i]);
+ const width = xref.fetchIfRef(widths[++i]);
for (j = start; j <= code; j++) {
glyphsWidths[j] = width;
@@ -24140,7 +11316,7 @@ class PartialEvaluator {
}
if (properties.vertical) {
- var vmetrics = dict.getArray("DW2") || [880, -1000];
+ let vmetrics = dict.getArray("DW2") || [880, -1000];
defaultVMetrics = [vmetrics[1], defaultWidth * 0.5, vmetrics[0]];
vmetrics = dict.get("W2");
@@ -24154,7 +11330,7 @@ class PartialEvaluator {
glyphsVMetrics[start++] = [xref.fetchIfRef(code[j++]), xref.fetchIfRef(code[j++]), xref.fetchIfRef(code[j])];
}
} else {
- var vmetric = [xref.fetchIfRef(vmetrics[++i]), xref.fetchIfRef(vmetrics[++i]), xref.fetchIfRef(vmetrics[++i])];
+ const vmetric = [xref.fetchIfRef(vmetrics[++i]), xref.fetchIfRef(vmetrics[++i]), xref.fetchIfRef(vmetrics[++i])];
for (j = start; j <= code; j++) {
glyphsVMetrics[j] = vmetric;
@@ -24164,7 +11340,7 @@ class PartialEvaluator {
}
}
} else {
- var firstChar = properties.firstChar;
+ const firstChar = properties.firstChar;
widths = dict.get("Widths");
if (widths) {
@@ -24176,21 +11352,21 @@ class PartialEvaluator {
defaultWidth = parseFloat(descriptor.get("MissingWidth")) || 0;
} else {
- var baseFontName = dict.get("BaseFont");
+ const baseFontName = dict.get("BaseFont");
if ((0, _primitives.isName)(baseFontName)) {
- var metrics = this.getBaseFontMetrics(baseFontName.name);
+ const metrics = this.getBaseFontMetrics(baseFontName.name);
glyphsWidths = this.buildCharCodeToWidth(metrics.widths, properties);
defaultWidth = metrics.defaultWidth;
}
}
}
- var isMonospace = true;
- var firstWidth = defaultWidth;
+ let isMonospace = true;
+ let firstWidth = defaultWidth;
- for (var glyph in glyphsWidths) {
- var glyphWidth = glyphsWidths[glyph];
+ for (const glyph in glyphsWidths) {
+ const glyphWidth = glyphsWidths[glyph];
if (!glyphWidth) {
continue;
@@ -24208,7 +11384,7 @@ class PartialEvaluator {
}
if (isMonospace) {
- properties.flags |= _fonts.FontFlags.FixedPitch;
+ properties.flags |= _fonts_utils.FontFlags.FixedPitch;
}
properties.defaultWidth = defaultWidth;
@@ -24218,17 +11394,17 @@ class PartialEvaluator {
}
isSerifFont(baseFontName) {
- var fontNameWoStyle = baseFontName.split("-")[0];
+ const fontNameWoStyle = baseFontName.split("-")[0];
return fontNameWoStyle in (0, _standard_fonts.getSerifFonts)() || fontNameWoStyle.search(/serif/gi) !== -1;
}
getBaseFontMetrics(name) {
- var defaultWidth = 0;
- var widths = [];
- var monospace = false;
- var stdFontMap = (0, _standard_fonts.getStdFontMap)();
- var lookupName = stdFontMap[name] || name;
- var Metrics = (0, _metrics.getMetrics)();
+ let defaultWidth = 0;
+ let widths = Object.create(null);
+ let monospace = false;
+ const stdFontMap = (0, _standard_fonts.getStdFontMap)();
+ let lookupName = stdFontMap[name] || name;
+ const Metrics = (0, _metrics.getMetrics)();
if (!(lookupName in Metrics)) {
if (this.isSerifFont(name)) {
@@ -24238,7 +11414,7 @@ class PartialEvaluator {
}
}
- var glyphWidths = Metrics[lookupName];
+ const glyphWidths = Metrics[lookupName];
if ((0, _util.isNum)(glyphWidths)) {
defaultWidth = glyphWidths;
@@ -24255,11 +11431,11 @@ class PartialEvaluator {
}
buildCharCodeToWidth(widthsByGlyphName, properties) {
- var widths = Object.create(null);
- var differences = properties.differences;
- var encoding = properties.defaultEncoding;
+ const widths = Object.create(null);
+ const differences = properties.differences;
+ const encoding = properties.defaultEncoding;
- for (var charCode = 0; charCode < 256; charCode++) {
+ for (let charCode = 0; charCode < 256; charCode++) {
if (charCode in differences && widthsByGlyphName[differences[charCode]]) {
widths[charCode] = widthsByGlyphName[differences[charCode]];
continue;
@@ -24275,24 +11451,29 @@ class PartialEvaluator {
}
preEvaluateFont(dict) {
- var baseDict = dict;
- var type = dict.get("Subtype");
+ const baseDict = dict;
+ let type = dict.get("Subtype");
if (!(0, _primitives.isName)(type)) {
throw new _util.FormatError("invalid font Subtype");
}
- var composite = false;
- var uint8array;
+ let composite = false;
+ let hash, toUnicode;
if (type.name === "Type0") {
- var df = dict.get("DescendantFonts");
+ const df = dict.get("DescendantFonts");
if (!df) {
throw new _util.FormatError("Descendant fonts are not specified");
}
dict = Array.isArray(df) ? this.xref.fetchIfRef(df[0]) : df;
+
+ if (!(dict instanceof _primitives.Dict)) {
+ throw new _util.FormatError("Descendant font is not a dictionary.");
+ }
+
type = dict.get("Subtype");
if (!(0, _primitives.isName)(type)) {
@@ -24302,11 +11483,13 @@ class PartialEvaluator {
composite = true;
}
- var descriptor = dict.get("FontDescriptor");
+ const firstChar = dict.get("FirstChar") || 0,
+ lastChar = dict.get("LastChar") || (composite ? 0xffff : 0xff);
+ const descriptor = dict.get("FontDescriptor");
if (descriptor) {
- var hash = new _murmurhash.MurmurHash3_64();
- var encoding = baseDict.getRaw("Encoding");
+ hash = new _murmurhash.MurmurHash3_64();
+ const encoding = baseDict.getRaw("Encoding");
if ((0, _primitives.isName)(encoding)) {
hash.update(encoding.name);
@@ -24319,11 +11502,11 @@ class PartialEvaluator {
} else if ((0, _primitives.isRef)(entry)) {
hash.update(entry.toString());
} else if (Array.isArray(entry)) {
- var diffLength = entry.length,
- diffBuf = new Array(diffLength);
+ const diffLength = entry.length,
+ diffBuf = new Array(diffLength);
- for (var j = 0; j < diffLength; j++) {
- var diffEntry = entry[j];
+ for (let j = 0; j < diffLength; j++) {
+ const diffEntry = entry[j];
if ((0, _primitives.isName)(diffEntry)) {
diffBuf[j] = diffEntry.name;
@@ -24337,24 +11520,56 @@ class PartialEvaluator {
}
}
- const firstChar = dict.get("FirstChar") || 0;
- const lastChar = dict.get("LastChar") || (composite ? 0xffff : 0xff);
hash.update(`${firstChar}-${lastChar}`);
- var toUnicode = dict.get("ToUnicode") || baseDict.get("ToUnicode");
+ toUnicode = dict.get("ToUnicode") || baseDict.get("ToUnicode");
if ((0, _primitives.isStream)(toUnicode)) {
- var stream = toUnicode.str || toUnicode;
- uint8array = stream.buffer ? new Uint8Array(stream.buffer.buffer, 0, stream.bufferLength) : new Uint8Array(stream.bytes.buffer, stream.start, stream.end - stream.start);
+ const stream = toUnicode.str || toUnicode;
+ const uint8array = stream.buffer ? new Uint8Array(stream.buffer.buffer, 0, stream.bufferLength) : new Uint8Array(stream.bytes.buffer, stream.start, stream.end - stream.start);
hash.update(uint8array);
} else if ((0, _primitives.isName)(toUnicode)) {
hash.update(toUnicode.name);
}
- var widths = dict.get("Widths") || baseDict.get("Widths");
+ const widths = dict.get("Widths") || baseDict.get("Widths");
- if (widths) {
- uint8array = new Uint8Array(new Uint32Array(widths).buffer);
- hash.update(uint8array);
+ if (Array.isArray(widths)) {
+ const widthsBuf = [];
+
+ for (const entry of widths) {
+ if ((0, _util.isNum)(entry) || (0, _primitives.isRef)(entry)) {
+ widthsBuf.push(entry.toString());
+ }
+ }
+
+ hash.update(widthsBuf.join());
+ }
+
+ if (composite) {
+ hash.update("compositeFont");
+ const compositeWidths = dict.get("W") || baseDict.get("W");
+
+ if (Array.isArray(compositeWidths)) {
+ const widthsBuf = [];
+
+ for (const entry of compositeWidths) {
+ if ((0, _util.isNum)(entry) || (0, _primitives.isRef)(entry)) {
+ widthsBuf.push(entry.toString());
+ } else if (Array.isArray(entry)) {
+ const subWidthsBuf = [];
+
+ for (const element of entry) {
+ if ((0, _util.isNum)(element) || (0, _primitives.isRef)(element)) {
+ subWidthsBuf.push(element.toString());
+ }
+ }
+
+ widthsBuf.push(`[${subWidthsBuf.join()}]`);
+ }
+ }
+
+ hash.update(widthsBuf.join());
+ }
}
}
@@ -24364,47 +11579,68 @@ class PartialEvaluator {
baseDict,
composite,
type: type.name,
+ firstChar,
+ lastChar,
+ toUnicode,
hash: hash ? hash.hexdigest() : ""
};
}
- translateFont(preEvaluatedFont) {
- var baseDict = preEvaluatedFont.baseDict;
- var dict = preEvaluatedFont.dict;
- var composite = preEvaluatedFont.composite;
- var descriptor = preEvaluatedFont.descriptor;
- var type = preEvaluatedFont.type;
- var maxCharIndex = composite ? 0xffff : 0xff;
- var properties;
- const firstChar = dict.get("FirstChar") || 0;
- const lastChar = dict.get("LastChar") || maxCharIndex;
+ async translateFont({
+ descriptor,
+ dict,
+ baseDict,
+ composite,
+ type,
+ firstChar,
+ lastChar,
+ toUnicode,
+ cssFontInfo
+ }) {
+ const isType3Font = type === "Type3";
+ let properties;
if (!descriptor) {
- if (type === "Type3") {
+ if (isType3Font) {
descriptor = new _primitives.Dict(null);
descriptor.set("FontName", _primitives.Name.get(type));
descriptor.set("FontBBox", dict.getArray("FontBBox") || [0, 0, 0, 0]);
} else {
- var baseFontName = dict.get("BaseFont");
+ let baseFontName = dict.get("BaseFont");
if (!(0, _primitives.isName)(baseFontName)) {
throw new _util.FormatError("Base font is not specified");
}
baseFontName = baseFontName.name.replace(/[,_]/g, "-");
- var metrics = this.getBaseFontMetrics(baseFontName);
- var fontNameWoStyle = baseFontName.split("-")[0];
- var flags = (this.isSerifFont(fontNameWoStyle) ? _fonts.FontFlags.Serif : 0) | (metrics.monospace ? _fonts.FontFlags.FixedPitch : 0) | ((0, _standard_fonts.getSymbolsFonts)()[fontNameWoStyle] ? _fonts.FontFlags.Symbolic : _fonts.FontFlags.Nonsymbolic);
+ const metrics = this.getBaseFontMetrics(baseFontName);
+ const fontNameWoStyle = baseFontName.split("-")[0];
+ const flags = (this.isSerifFont(fontNameWoStyle) ? _fonts_utils.FontFlags.Serif : 0) | (metrics.monospace ? _fonts_utils.FontFlags.FixedPitch : 0) | ((0, _standard_fonts.getSymbolsFonts)()[fontNameWoStyle] ? _fonts_utils.FontFlags.Symbolic : _fonts_utils.FontFlags.Nonsymbolic);
properties = {
type,
name: baseFontName,
+ loadedName: baseDict.loadedName,
widths: metrics.widths,
defaultWidth: metrics.defaultWidth,
flags,
firstChar,
- lastChar
+ lastChar,
+ toUnicode,
+ xHeight: 0,
+ capHeight: 0,
+ italicAngle: 0,
+ isType3Font
};
const widths = dict.get("Widths");
+ const standardFontName = (0, _standard_fonts.getStandardFontName)(baseFontName);
+ let file = null;
+
+ if (standardFontName) {
+ properties.isStandardFont = true;
+ file = await this.fetchStandardFontData(standardFontName);
+ properties.isInternalFont = !!file;
+ }
+
return this.extractDataStructures(dict, dict, properties).then(newProperties => {
if (widths) {
const glyphWidths = [];
@@ -24419,13 +11655,13 @@ class PartialEvaluator {
newProperties.widths = this.buildCharCodeToWidth(metrics.widths, newProperties);
}
- return new _fonts.Font(baseFontName, null, newProperties);
+ return new _fonts.Font(baseFontName, file, newProperties);
});
}
}
- var fontName = descriptor.get("FontName");
- var baseFont = dict.get("BaseFont");
+ let fontName = descriptor.get("FontName");
+ let baseFont = dict.get("BaseFont");
if ((0, _util.isString)(fontName)) {
fontName = _primitives.Name.get(fontName);
@@ -24435,12 +11671,12 @@ class PartialEvaluator {
baseFont = _primitives.Name.get(baseFont);
}
- if (type !== "Type3") {
- var fontNameStr = fontName && fontName.name;
- var baseFontStr = baseFont && baseFont.name;
+ if (!isType3Font) {
+ const fontNameStr = fontName && fontName.name;
+ const baseFontStr = baseFont && baseFont.name;
if (fontNameStr !== baseFontStr) {
- (0, _util.info)(`The FontDescriptor\'s FontName is "${fontNameStr}" but ` + `should be the same as the Font\'s BaseFont "${baseFontStr}".`);
+ (0, _util.info)(`The FontDescriptor's FontName is "${fontNameStr}" but ` + `should be the same as the Font's BaseFont "${baseFontStr}".`);
if (fontNameStr && baseFontStr && baseFontStr.startsWith(fontNameStr)) {
fontName = baseFont;
@@ -24454,19 +11690,53 @@ class PartialEvaluator {
throw new _util.FormatError("invalid font name");
}
- var fontFile = descriptor.get("FontFile", "FontFile2", "FontFile3");
+ let fontFile, subtype, length1, length2, length3;
+
+ try {
+ fontFile = descriptor.get("FontFile", "FontFile2", "FontFile3");
+ } catch (ex) {
+ if (!this.options.ignoreErrors) {
+ throw ex;
+ }
+
+ (0, _util.warn)(`translateFont - fetching "${fontName.name}" font file: "${ex}".`);
+ fontFile = new _stream.NullStream();
+ }
+
+ let isStandardFont = false;
+ let isInternalFont = false;
+ let glyphScaleFactors = null;
if (fontFile) {
if (fontFile.dict) {
- var subtype = fontFile.dict.get("Subtype");
+ const subtypeEntry = fontFile.dict.get("Subtype");
- if (subtype) {
- subtype = subtype.name;
+ if (subtypeEntry instanceof _primitives.Name) {
+ subtype = subtypeEntry.name;
}
- var length1 = fontFile.dict.get("Length1");
- var length2 = fontFile.dict.get("Length2");
- var length3 = fontFile.dict.get("Length3");
+ length1 = fontFile.dict.get("Length1");
+ length2 = fontFile.dict.get("Length2");
+ length3 = fontFile.dict.get("Length3");
+ }
+ } else if (cssFontInfo) {
+ const standardFontName = (0, _xfa_fonts.getXfaFontName)(fontName.name);
+
+ if (standardFontName) {
+ cssFontInfo.fontFamily = `${cssFontInfo.fontFamily}-PdfJS-XFA`;
+ cssFontInfo.lineHeight = standardFontName.lineHeight || null;
+ glyphScaleFactors = standardFontName.factors || null;
+ fontFile = await this.fetchStandardFontData(standardFontName.name);
+ isInternalFont = !!fontFile;
+ type = "TrueType";
+ }
+ } else if (!isType3Font) {
+ const standardFontName = (0, _standard_fonts.getStandardFontName)(fontName.name);
+
+ if (standardFontName) {
+ isStandardFont = true;
+ fontFile = await this.fetchStandardFontData(standardFontName);
+ isInternalFont = !!fontFile;
}
}
@@ -24478,62 +11748,70 @@ class PartialEvaluator {
length1,
length2,
length3,
+ isStandardFont,
+ isInternalFont,
loadedName: baseDict.loadedName,
composite,
fixedPitch: false,
fontMatrix: dict.getArray("FontMatrix") || _util.FONT_IDENTITY_MATRIX,
- firstChar: firstChar || 0,
- lastChar: lastChar || maxCharIndex,
- bbox: descriptor.getArray("FontBBox"),
+ firstChar,
+ lastChar,
+ toUnicode,
+ bbox: descriptor.getArray("FontBBox") || dict.getArray("FontBBox"),
ascent: descriptor.get("Ascent"),
descent: descriptor.get("Descent"),
- xHeight: descriptor.get("XHeight"),
- capHeight: descriptor.get("CapHeight"),
+ xHeight: descriptor.get("XHeight") || 0,
+ capHeight: descriptor.get("CapHeight") || 0,
flags: descriptor.get("Flags"),
- italicAngle: descriptor.get("ItalicAngle"),
- isType3Font: false
+ italicAngle: descriptor.get("ItalicAngle") || 0,
+ isType3Font,
+ cssFontInfo,
+ scaleFactors: glyphScaleFactors
};
- var cMapPromise;
if (composite) {
- var cidEncoding = baseDict.get("Encoding");
+ const cidEncoding = baseDict.get("Encoding");
if ((0, _primitives.isName)(cidEncoding)) {
properties.cidEncoding = cidEncoding.name;
}
- cMapPromise = _cmap.CMapFactory.create({
+ const cMap = await _cmap.CMapFactory.create({
encoding: cidEncoding,
fetchBuiltInCMap: this._fetchBuiltInCMapBound,
useCMap: null
- }).then(function (cMap) {
- properties.cMap = cMap;
- properties.vertical = properties.cMap.vertical;
});
- } else {
- cMapPromise = Promise.resolve(undefined);
+ properties.cMap = cMap;
+ properties.vertical = properties.cMap.vertical;
}
- return cMapPromise.then(() => {
- return this.extractDataStructures(dict, baseDict, properties);
- }).then(newProperties => {
+ return this.extractDataStructures(dict, baseDict, properties).then(newProperties => {
this.extractWidths(dict, descriptor, newProperties);
-
- if (type === "Type3") {
- newProperties.isType3Font = true;
- }
-
return new _fonts.Font(fontName.name, fontFile, newProperties);
});
}
- static buildFontPaths(font, glyphs, handler) {
+ static buildFontPaths(font, glyphs, handler, evaluatorOptions) {
function buildPath(fontChar) {
- if (font.renderer.hasBuiltPath(fontChar)) {
- return;
- }
+ const glyphName = `${font.loadedName}_path_${fontChar}`;
+
+ try {
+ if (font.renderer.hasBuiltPath(fontChar)) {
+ return;
+ }
+
+ handler.send("commonobj", [glyphName, "FontPath", font.renderer.getPathJs(fontChar)]);
+ } catch (reason) {
+ if (evaluatorOptions.ignoreErrors) {
+ handler.send("UnsupportedFeature", {
+ featureId: _util.UNSUPPORTED_FEATURES.errorFontBuildPath
+ });
+ (0, _util.warn)(`buildFontPaths - ignoring ${glyphName} glyph: "${reason}".`);
+ return;
+ }
- handler.send("commonobj", [`${font.loadedName}_path_${fontChar}`, "FontPath", font.renderer.getPathJs(fontChar)]);
+ throw reason;
+ }
}
for (const glyph of glyphs) {
@@ -24564,12 +11842,12 @@ class TranslatedFont {
loadedName,
font,
dict,
- extraProperties = false
+ evaluatorOptions
}) {
this.loadedName = loadedName;
this.font = font;
this.dict = dict;
- this._extraProperties = extraProperties;
+ this._evaluatorOptions = evaluatorOptions || DefaultPartialEvaluatorOptions;
this.type3Loaded = null;
this.type3Dependencies = font.isType3Font ? new Set() : null;
this.sent = false;
@@ -24581,7 +11859,7 @@ class TranslatedFont {
}
this.sent = true;
- handler.send("commonobj", [this.loadedName, "Font", this.font.exportData(this._extraProperties)]);
+ handler.send("commonobj", [this.loadedName, "Font", this.font.exportData(this._evaluatorOptions.fontExtraProperties)]);
}
fallback(handler) {
@@ -24590,8 +11868,7 @@ class TranslatedFont {
}
this.font.disableFontFace = true;
- const glyphs = this.font.glyphCacheValues;
- PartialEvaluator.buildFontPaths(this.font, glyphs, handler);
+ PartialEvaluator.buildFontPaths(this.font, this.font.glyphCacheValues, handler, this._evaluatorOptions);
}
loadType3Data(evaluator, resources, task) {
@@ -24603,27 +11880,32 @@ class TranslatedFont {
throw new Error("Must be a Type3 font.");
}
- var type3Options = Object.create(evaluator.options);
- type3Options.ignoreErrors = false;
- var type3Evaluator = evaluator.clone(type3Options);
+ const type3Evaluator = evaluator.clone({
+ ignoreErrors: false
+ });
type3Evaluator.parsingType3Font = true;
const translatedFont = this.font,
type3Dependencies = this.type3Dependencies;
- var loadCharProcsPromise = Promise.resolve();
- var charProcs = this.dict.get("CharProcs");
- var fontResources = this.dict.get("Resources") || resources;
- var charProcOperatorList = Object.create(null);
+ let loadCharProcsPromise = Promise.resolve();
+ const charProcs = this.dict.get("CharProcs");
+ const fontResources = this.dict.get("Resources") || resources;
+ const charProcOperatorList = Object.create(null);
+ const isEmptyBBox = !translatedFont.bbox || (0, _util.isArrayEqual)(translatedFont.bbox, [0, 0, 0, 0]);
for (const key of charProcs.getKeys()) {
- loadCharProcsPromise = loadCharProcsPromise.then(function () {
- var glyphStream = charProcs.get(key);
- var operatorList = new _operator_list.OperatorList();
+ loadCharProcsPromise = loadCharProcsPromise.then(() => {
+ const glyphStream = charProcs.get(key);
+ const operatorList = new _operator_list.OperatorList();
return type3Evaluator.getOperatorList({
stream: glyphStream,
task,
resources: fontResources,
operatorList
- }).then(function () {
+ }).then(() => {
+ if (operatorList.fnArray[0] === _util.OPS.setCharWidthAndBounds) {
+ this._removeType3ColorOperators(operatorList, isEmptyBBox);
+ }
+
charProcOperatorList[key] = operatorList.getIR();
for (const dependency of operatorList.dependencies) {
@@ -24637,28 +11919,102 @@ class TranslatedFont {
});
}
- this.type3Loaded = loadCharProcsPromise.then(function () {
+ this.type3Loaded = loadCharProcsPromise.then(() => {
translatedFont.charProcOperatorList = charProcOperatorList;
+
+ if (this._bbox) {
+ translatedFont.isCharBBox = true;
+ translatedFont.bbox = this._bbox;
+ }
});
return this.type3Loaded;
}
+ _removeType3ColorOperators(operatorList, isEmptyBBox = false) {
+ if (isEmptyBBox) {
+ if (!this._bbox) {
+ this._bbox = [Infinity, Infinity, -Infinity, -Infinity];
+ }
+
+ const charBBox = _util.Util.normalizeRect(operatorList.argsArray[0].slice(2));
+
+ this._bbox[0] = Math.min(this._bbox[0], charBBox[0]);
+ this._bbox[1] = Math.min(this._bbox[1], charBBox[1]);
+ this._bbox[2] = Math.max(this._bbox[2], charBBox[2]);
+ this._bbox[3] = Math.max(this._bbox[3], charBBox[3]);
+ }
+
+ let i = 1,
+ ii = operatorList.length;
+
+ while (i < ii) {
+ switch (operatorList.fnArray[i]) {
+ case _util.OPS.setStrokeColorSpace:
+ case _util.OPS.setFillColorSpace:
+ case _util.OPS.setStrokeColor:
+ case _util.OPS.setStrokeColorN:
+ case _util.OPS.setFillColor:
+ case _util.OPS.setFillColorN:
+ case _util.OPS.setStrokeGray:
+ case _util.OPS.setFillGray:
+ case _util.OPS.setStrokeRGBColor:
+ case _util.OPS.setFillRGBColor:
+ case _util.OPS.setStrokeCMYKColor:
+ case _util.OPS.setFillCMYKColor:
+ case _util.OPS.shadingFill:
+ case _util.OPS.setRenderingIntent:
+ operatorList.fnArray.splice(i, 1);
+ operatorList.argsArray.splice(i, 1);
+ ii--;
+ continue;
+
+ case _util.OPS.setGState:
+ const [gStateObj] = operatorList.argsArray[i];
+ let j = 0,
+ jj = gStateObj.length;
+
+ while (j < jj) {
+ const [gStateKey] = gStateObj[j];
+
+ switch (gStateKey) {
+ case "TR":
+ case "TR2":
+ case "HT":
+ case "BG":
+ case "BG2":
+ case "UCR":
+ case "UCR2":
+ gStateObj.splice(j, 1);
+ jj--;
+ continue;
+ }
+
+ j++;
+ }
+
+ break;
+ }
+
+ i++;
+ }
+ }
+
}
class StateManager {
- constructor(initialState) {
+ constructor(initialState = new EvalState()) {
this.state = initialState;
this.stateStack = [];
}
save() {
- var old = this.state;
+ const old = this.state;
this.stateStack.push(this.state);
this.state = old.clone();
}
restore() {
- var prev = this.stateStack.pop();
+ const prev = this.stateStack.pop();
if (prev) {
this.state = prev;
@@ -24688,7 +12044,7 @@ class TextState {
}
setTextMatrix(a, b, c, d, e, f) {
- var m = this.textMatrix;
+ const m = this.textMatrix;
m[0] = a;
m[1] = b;
m[2] = c;
@@ -24698,7 +12054,7 @@ class TextState {
}
setTextLineMatrix(a, b, c, d, e, f) {
- var m = this.textLineMatrix;
+ const m = this.textLineMatrix;
m[0] = a;
m[1] = b;
m[2] = c;
@@ -24708,68 +12064,24 @@ class TextState {
}
translateTextMatrix(x, y) {
- var m = this.textMatrix;
+ const m = this.textMatrix;
m[4] = m[0] * x + m[2] * y + m[4];
m[5] = m[1] * x + m[3] * y + m[5];
}
translateTextLineMatrix(x, y) {
- var m = this.textLineMatrix;
+ const m = this.textLineMatrix;
m[4] = m[0] * x + m[2] * y + m[4];
m[5] = m[1] * x + m[3] * y + m[5];
}
- calcTextLineMatrixAdvance(a, b, c, d, e, f) {
- var font = this.font;
-
- if (!font) {
- return null;
- }
-
- var m = this.textLineMatrix;
-
- if (!(a === m[0] && b === m[1] && c === m[2] && d === m[3])) {
- return null;
- }
-
- var txDiff = e - m[4],
- tyDiff = f - m[5];
-
- if (font.vertical && txDiff !== 0 || !font.vertical && tyDiff !== 0) {
- return null;
- }
-
- var tx,
- ty,
- denominator = a * d - b * c;
-
- if (font.vertical) {
- tx = -tyDiff * c / denominator;
- ty = tyDiff * a / denominator;
- } else {
- tx = txDiff * d / denominator;
- ty = -txDiff * b / denominator;
- }
-
- return {
- width: tx,
- height: ty,
- value: font.vertical ? ty : tx
- };
- }
-
- calcRenderMatrix(ctm) {
- var tsm = [this.fontSize * this.textHScale, 0, 0, this.fontSize, 0, this.textRise];
- return _util.Util.transform(ctm, _util.Util.transform(this.textMatrix, tsm));
- }
-
carriageReturn() {
this.translateTextLineMatrix(0, -this.leading);
this.textMatrix = this.textLineMatrix.slice();
}
clone() {
- var clone = Object.create(this);
+ const clone = Object.create(this);
clone.textMatrix = this.textMatrix.slice();
clone.textLineMatrix = this.textLineMatrix.slice();
clone.fontMatrix = this.fontMatrix.slice();
@@ -25179,7 +12491,7 @@ class EvaluatorPreprocessor {
return (0, _util.shadow)(this, "MAX_INVALID_PATH_OPS", 20);
}
- constructor(stream, xref, stateManager) {
+ constructor(stream, xref, stateManager = new StateManager()) {
this.parser = new _parser.Parser({
lexer: new _parser.Lexer(stream, EvaluatorPreprocessor.opMap),
xref
@@ -25194,27 +12506,27 @@ class EvaluatorPreprocessor {
}
read(operation) {
- var args = operation.args;
+ let args = operation.args;
while (true) {
- var obj = this.parser.getObj();
+ const obj = this.parser.getObj();
if (obj instanceof _primitives.Cmd) {
- var cmd = obj.cmd;
- var opSpec = EvaluatorPreprocessor.opMap[cmd];
+ const cmd = obj.cmd;
+ const opSpec = EvaluatorPreprocessor.opMap[cmd];
if (!opSpec) {
(0, _util.warn)(`Unknown command "${cmd}".`);
continue;
}
- var fn = opSpec.id;
- var numArgs = opSpec.numArgs;
- var argsLength = args !== null ? args.length : 0;
+ const fn = opSpec.id;
+ const numArgs = opSpec.numArgs;
+ let argsLength = args !== null ? args.length : 0;
if (!opSpec.variableArgs) {
if (argsLength !== numArgs) {
- var nonProcessedArgs = this.nonProcessedArgs;
+ const nonProcessedArgs = this.nonProcessedArgs;
while (argsLength > numArgs) {
nonProcessedArgs.push(args.shift());
@@ -25292,29 +12604,30 @@ class EvaluatorPreprocessor {
}
+exports.EvaluatorPreprocessor = EvaluatorPreprocessor;
+
/***/ }),
-/* 29 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 16 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
-"use strict";
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
value: true
-});
-exports.CMapFactory = exports.IdentityCMap = exports.CMap = void 0;
+}));
+exports.IdentityCMap = exports.CMapFactory = exports.CMap = void 0;
var _util = __w_pdfjs_require__(2);
var _primitives = __w_pdfjs_require__(5);
-var _parser = __w_pdfjs_require__(11);
+var _parser = __w_pdfjs_require__(17);
-var _core_utils = __w_pdfjs_require__(8);
+var _core_utils = __w_pdfjs_require__(9);
-var _stream = __w_pdfjs_require__(12);
+var _stream = __w_pdfjs_require__(10);
-var BUILT_IN_CMAPS = ["Adobe-GB1-UCS2", "Adobe-CNS1-UCS2", "Adobe-Japan1-UCS2", "Adobe-Korea1-UCS2", "78-EUC-H", "78-EUC-V", "78-H", "78-RKSJ-H", "78-RKSJ-V", "78-V", "78ms-RKSJ-H", "78ms-RKSJ-V", "83pv-RKSJ-H", "90ms-RKSJ-H", "90ms-RKSJ-V", "90msp-RKSJ-H", "90msp-RKSJ-V", "90pv-RKSJ-H", "90pv-RKSJ-V", "Add-H", "Add-RKSJ-H", "Add-RKSJ-V", "Add-V", "Adobe-CNS1-0", "Adobe-CNS1-1", "Adobe-CNS1-2", "Adobe-CNS1-3", "Adobe-CNS1-4", "Adobe-CNS1-5", "Adobe-CNS1-6", "Adobe-GB1-0", "Adobe-GB1-1", "Adobe-GB1-2", "Adobe-GB1-3", "Adobe-GB1-4", "Adobe-GB1-5", "Adobe-Japan1-0", "Adobe-Japan1-1", "Adobe-Japan1-2", "Adobe-Japan1-3", "Adobe-Japan1-4", "Adobe-Japan1-5", "Adobe-Japan1-6", "Adobe-Korea1-0", "Adobe-Korea1-1", "Adobe-Korea1-2", "B5-H", "B5-V", "B5pc-H", "B5pc-V", "CNS-EUC-H", "CNS-EUC-V", "CNS1-H", "CNS1-V", "CNS2-H", "CNS2-V", "ETHK-B5-H", "ETHK-B5-V", "ETen-B5-H", "ETen-B5-V", "ETenms-B5-H", "ETenms-B5-V", "EUC-H", "EUC-V", "Ext-H", "Ext-RKSJ-H", "Ext-RKSJ-V", "Ext-V", "GB-EUC-H", "GB-EUC-V", "GB-H", "GB-V", "GBK-EUC-H", "GBK-EUC-V", "GBK2K-H", "GBK2K-V", "GBKp-EUC-H", "GBKp-EUC-V", "GBT-EUC-H", "GBT-EUC-V", "GBT-H", "GBT-V", "GBTpc-EUC-H", "GBTpc-EUC-V", "GBpc-EUC-H", "GBpc-EUC-V", "H", "HKdla-B5-H", "HKdla-B5-V", "HKdlb-B5-H", "HKdlb-B5-V", "HKgccs-B5-H", "HKgccs-B5-V", "HKm314-B5-H", "HKm314-B5-V", "HKm471-B5-H", "HKm471-B5-V", "HKscs-B5-H", "HKscs-B5-V", "Hankaku", "Hiragana", "KSC-EUC-H", "KSC-EUC-V", "KSC-H", "KSC-Johab-H", "KSC-Johab-V", "KSC-V", "KSCms-UHC-H", "KSCms-UHC-HW-H", "KSCms-UHC-HW-V", "KSCms-UHC-V", "KSCpc-EUC-H", "KSCpc-EUC-V", "Katakana", "NWP-H", "NWP-V", "RKSJ-H", "RKSJ-V", "Roman", "UniCNS-UCS2-H", "UniCNS-UCS2-V", "UniCNS-UTF16-H", "UniCNS-UTF16-V", "UniCNS-UTF32-H", "UniCNS-UTF32-V", "UniCNS-UTF8-H", "UniCNS-UTF8-V", "UniGB-UCS2-H", "UniGB-UCS2-V", "UniGB-UTF16-H", "UniGB-UTF16-V", "UniGB-UTF32-H", "UniGB-UTF32-V", "UniGB-UTF8-H", "UniGB-UTF8-V", "UniJIS-UCS2-H", "UniJIS-UCS2-HW-H", "UniJIS-UCS2-HW-V", "UniJIS-UCS2-V", "UniJIS-UTF16-H", "UniJIS-UTF16-V", "UniJIS-UTF32-H", "UniJIS-UTF32-V", "UniJIS-UTF8-H", "UniJIS-UTF8-V", "UniJIS2004-UTF16-H", "UniJIS2004-UTF16-V", "UniJIS2004-UTF32-H", "UniJIS2004-UTF32-V", "UniJIS2004-UTF8-H", "UniJIS2004-UTF8-V", "UniJISPro-UCS2-HW-V", "UniJISPro-UCS2-V", "UniJISPro-UTF8-V", "UniJISX0213-UTF32-H", "UniJISX0213-UTF32-V", "UniJISX02132004-UTF32-H", "UniJISX02132004-UTF32-V", "UniKS-UCS2-H", "UniKS-UCS2-V", "UniKS-UTF16-H", "UniKS-UTF16-V", "UniKS-UTF32-H", "UniKS-UTF32-V", "UniKS-UTF8-H", "UniKS-UTF8-V", "V", "WP-Symbol"];
+const BUILT_IN_CMAPS = ["Adobe-GB1-UCS2", "Adobe-CNS1-UCS2", "Adobe-Japan1-UCS2", "Adobe-Korea1-UCS2", "78-EUC-H", "78-EUC-V", "78-H", "78-RKSJ-H", "78-RKSJ-V", "78-V", "78ms-RKSJ-H", "78ms-RKSJ-V", "83pv-RKSJ-H", "90ms-RKSJ-H", "90ms-RKSJ-V", "90msp-RKSJ-H", "90msp-RKSJ-V", "90pv-RKSJ-H", "90pv-RKSJ-V", "Add-H", "Add-RKSJ-H", "Add-RKSJ-V", "Add-V", "Adobe-CNS1-0", "Adobe-CNS1-1", "Adobe-CNS1-2", "Adobe-CNS1-3", "Adobe-CNS1-4", "Adobe-CNS1-5", "Adobe-CNS1-6", "Adobe-GB1-0", "Adobe-GB1-1", "Adobe-GB1-2", "Adobe-GB1-3", "Adobe-GB1-4", "Adobe-GB1-5", "Adobe-Japan1-0", "Adobe-Japan1-1", "Adobe-Japan1-2", "Adobe-Japan1-3", "Adobe-Japan1-4", "Adobe-Japan1-5", "Adobe-Japan1-6", "Adobe-Korea1-0", "Adobe-Korea1-1", "Adobe-Korea1-2", "B5-H", "B5-V", "B5pc-H", "B5pc-V", "CNS-EUC-H", "CNS-EUC-V", "CNS1-H", "CNS1-V", "CNS2-H", "CNS2-V", "ETHK-B5-H", "ETHK-B5-V", "ETen-B5-H", "ETen-B5-V", "ETenms-B5-H", "ETenms-B5-V", "EUC-H", "EUC-V", "Ext-H", "Ext-RKSJ-H", "Ext-RKSJ-V", "Ext-V", "GB-EUC-H", "GB-EUC-V", "GB-H", "GB-V", "GBK-EUC-H", "GBK-EUC-V", "GBK2K-H", "GBK2K-V", "GBKp-EUC-H", "GBKp-EUC-V", "GBT-EUC-H", "GBT-EUC-V", "GBT-H", "GBT-V", "GBTpc-EUC-H", "GBTpc-EUC-V", "GBpc-EUC-H", "GBpc-EUC-V", "H", "HKdla-B5-H", "HKdla-B5-V", "HKdlb-B5-H", "HKdlb-B5-V", "HKgccs-B5-H", "HKgccs-B5-V", "HKm314-B5-H", "HKm314-B5-V", "HKm471-B5-H", "HKm471-B5-V", "HKscs-B5-H", "HKscs-B5-V", "Hankaku", "Hiragana", "KSC-EUC-H", "KSC-EUC-V", "KSC-H", "KSC-Johab-H", "KSC-Johab-V", "KSC-V", "KSCms-UHC-H", "KSCms-UHC-HW-H", "KSCms-UHC-HW-V", "KSCms-UHC-V", "KSCpc-EUC-H", "KSCpc-EUC-V", "Katakana", "NWP-H", "NWP-V", "RKSJ-H", "RKSJ-V", "Roman", "UniCNS-UCS2-H", "UniCNS-UCS2-V", "UniCNS-UTF16-H", "UniCNS-UTF16-V", "UniCNS-UTF32-H", "UniCNS-UTF32-V", "UniCNS-UTF8-H", "UniCNS-UTF8-V", "UniGB-UCS2-H", "UniGB-UCS2-V", "UniGB-UTF16-H", "UniGB-UTF16-V", "UniGB-UTF32-H", "UniGB-UTF32-V", "UniGB-UTF8-H", "UniGB-UTF8-V", "UniJIS-UCS2-H", "UniJIS-UCS2-HW-H", "UniJIS-UCS2-HW-V", "UniJIS-UCS2-V", "UniJIS-UTF16-H", "UniJIS-UTF16-V", "UniJIS-UTF32-H", "UniJIS-UTF32-V", "UniJIS-UTF8-H", "UniJIS-UTF8-V", "UniJIS2004-UTF16-H", "UniJIS2004-UTF16-V", "UniJIS2004-UTF32-H", "UniJIS2004-UTF32-V", "UniJIS2004-UTF8-H", "UniJIS2004-UTF8-V", "UniJISPro-UCS2-HW-V", "UniJISPro-UCS2-V", "UniJISPro-UTF8-V", "UniJISX0213-UTF32-H", "UniJISX0213-UTF32-V", "UniJISX02132004-UTF32-H", "UniJISX02132004-UTF32-V", "UniKS-UCS2-H", "UniKS-UCS2-V", "UniKS-UTF16-H", "UniKS-UTF16-V", "UniKS-UTF32-H", "UniKS-UTF32-V", "UniKS-UTF8-H", "UniKS-UTF8-V", "V", "WP-Symbol"];
const MAX_MAP_RANGE = 2 ** 24 - 1;
class CMap {
@@ -25348,7 +12661,7 @@ class CMap {
throw new Error("mapBfRange - ignoring data above MAX_MAP_RANGE.");
}
- var lastByte = dstLow.length - 1;
+ const lastByte = dstLow.length - 1;
while (low <= high) {
this._map[low++] = dstLow;
@@ -25443,6 +12756,25 @@ class CMap {
out.length = 1;
}
+ getCharCodeLength(charCode) {
+ const codespaceRanges = this.codespaceRanges;
+
+ for (let n = 0, nn = codespaceRanges.length; n < nn; n++) {
+ const codespaceRange = codespaceRanges[n];
+
+ for (let k = 0, kk = codespaceRange.length; k < kk;) {
+ const low = codespaceRange[k++];
+ const high = codespaceRange[k++];
+
+ if (charCode >= low && charCode <= high) {
+ return n + 1;
+ }
+ }
+ }
+
+ return 1;
+ }
+
get length() {
return this._map.length;
}
@@ -25532,11 +12864,11 @@ class IdentityCMap extends CMap {
exports.IdentityCMap = IdentityCMap;
-var BinaryCMapReader = function BinaryCMapReaderClosure() {
+const BinaryCMapReader = function BinaryCMapReaderClosure() {
function hexToInt(a, size) {
- var n = 0;
+ let n = 0;
- for (var i = 0; i <= size; i++) {
+ for (let i = 0; i <= size; i++) {
n = n << 8 | a[i];
}
@@ -25556,9 +12888,9 @@ var BinaryCMapReader = function BinaryCMapReaderClosure() {
}
function addHex(a, b, size) {
- var c = 0;
+ let c = 0;
- for (var i = size; i >= 0; i--) {
+ for (let i = size; i >= 0; i--) {
c += a[i] + b[i];
a[i] = c & 255;
c >>= 8;
@@ -25566,40 +12898,40 @@ var BinaryCMapReader = function BinaryCMapReaderClosure() {
}
function incHex(a, size) {
- var c = 1;
+ let c = 1;
- for (var i = size; i >= 0 && c > 0; i--) {
+ for (let i = size; i >= 0 && c > 0; i--) {
c += a[i];
a[i] = c & 255;
c >>= 8;
}
}
- var MAX_NUM_SIZE = 16;
- var MAX_ENCODED_NUM_SIZE = 19;
+ const MAX_NUM_SIZE = 16;
+ const MAX_ENCODED_NUM_SIZE = 19;
- function BinaryCMapStream(data) {
- this.buffer = data;
- this.pos = 0;
- this.end = data.length;
- this.tmpBuf = new Uint8Array(MAX_ENCODED_NUM_SIZE);
- }
+ class BinaryCMapStream {
+ constructor(data) {
+ this.buffer = data;
+ this.pos = 0;
+ this.end = data.length;
+ this.tmpBuf = new Uint8Array(MAX_ENCODED_NUM_SIZE);
+ }
- BinaryCMapStream.prototype = {
readByte() {
if (this.pos >= this.end) {
return -1;
}
return this.buffer[this.pos++];
- },
+ }
readNumber() {
- var n = 0;
- var last;
+ let n = 0;
+ let last;
do {
- var b = this.readByte();
+ const b = this.readByte();
if (b < 0) {
throw new _util.FormatError("unexpected EOF in bcmap");
@@ -25610,25 +12942,25 @@ var BinaryCMapReader = function BinaryCMapReaderClosure() {
} while (!last);
return n;
- },
+ }
readSigned() {
- var n = this.readNumber();
+ const n = this.readNumber();
return n & 1 ? ~(n >>> 1) : n >>> 1;
- },
+ }
readHex(num, size) {
num.set(this.buffer.subarray(this.pos, this.pos + size + 1));
this.pos += size + 1;
- },
+ }
readHexNumber(num, size) {
- var last;
- var stack = this.tmpBuf,
- sp = 0;
+ let last;
+ const stack = this.tmpBuf;
+ let sp = 0;
do {
- var b = this.readByte();
+ const b = this.readByte();
if (b < 0) {
throw new _util.FormatError("unexpected EOF in bcmap");
@@ -25638,13 +12970,13 @@ var BinaryCMapReader = function BinaryCMapReaderClosure() {
stack[sp++] = b & 0x7f;
} while (!last);
- var i = size,
+ let i = size,
buffer = 0,
bufferSize = 0;
while (i >= 0) {
while (bufferSize < 8 && stack.length > 0) {
- buffer = stack[--sp] << bufferSize | buffer;
+ buffer |= stack[--sp] << bufferSize;
bufferSize += 7;
}
@@ -25653,48 +12985,48 @@ var BinaryCMapReader = function BinaryCMapReaderClosure() {
buffer >>= 8;
bufferSize -= 8;
}
- },
+ }
readHexSigned(num, size) {
this.readHexNumber(num, size);
- var sign = num[size] & 1 ? 255 : 0;
- var c = 0;
+ const sign = num[size] & 1 ? 255 : 0;
+ let c = 0;
- for (var i = 0; i <= size; i++) {
+ for (let i = 0; i <= size; i++) {
c = (c & 1) << 8 | num[i];
num[i] = c >> 1 ^ sign;
}
- },
+ }
readString() {
- var len = this.readNumber();
- var s = "";
+ const len = this.readNumber();
+ let s = "";
- for (var i = 0; i < len; i++) {
+ for (let i = 0; i < len; i++) {
s += String.fromCharCode(this.readNumber());
}
return s;
}
- };
+ }
- function processBinaryCMap(data, cMap, extend) {
- return new Promise(function (resolve, reject) {
- var stream = new BinaryCMapStream(data);
- var header = stream.readByte();
+ class BinaryCMapReader {
+ async process(data, cMap, extend) {
+ const stream = new BinaryCMapStream(data);
+ const header = stream.readByte();
cMap.vertical = !!(header & 1);
- var useCMap = null;
- var start = new Uint8Array(MAX_NUM_SIZE);
- var end = new Uint8Array(MAX_NUM_SIZE);
- var char = new Uint8Array(MAX_NUM_SIZE);
- var charCode = new Uint8Array(MAX_NUM_SIZE);
- var tmp = new Uint8Array(MAX_NUM_SIZE);
- var code;
- var b;
+ let useCMap = null;
+ const start = new Uint8Array(MAX_NUM_SIZE);
+ const end = new Uint8Array(MAX_NUM_SIZE);
+ const char = new Uint8Array(MAX_NUM_SIZE);
+ const charCode = new Uint8Array(MAX_NUM_SIZE);
+ const tmp = new Uint8Array(MAX_NUM_SIZE);
+ let code;
+ let b;
while ((b = stream.readByte()) >= 0) {
- var type = b >> 5;
+ const type = b >> 5;
if (type === 7) {
switch (b & 0x1f) {
@@ -25710,16 +13042,15 @@ var BinaryCMapReader = function BinaryCMapReaderClosure() {
continue;
}
- var sequence = !!(b & 0x10);
- var dataSize = b & 15;
+ const sequence = !!(b & 0x10);
+ const dataSize = b & 15;
if (dataSize + 1 > MAX_NUM_SIZE) {
- throw new Error("processBinaryCMap: Invalid dataSize.");
+ throw new Error("BinaryCMapReader.process: Invalid dataSize.");
}
- var ucs2DataSize = 1;
- var subitemsCount = stream.readNumber();
- var i;
+ const ucs2DataSize = 1;
+ const subitemsCount = stream.readNumber();
switch (type) {
case 0:
@@ -25728,7 +13059,7 @@ var BinaryCMapReader = function BinaryCMapReaderClosure() {
addHex(end, start, dataSize);
cMap.addCodespaceRange(dataSize + 1, hexToInt(start, dataSize), hexToInt(end, dataSize));
- for (i = 1; i < subitemsCount; i++) {
+ for (let i = 1; i < subitemsCount; i++) {
incHex(end, dataSize);
stream.readHexNumber(start, dataSize);
addHex(start, end, dataSize);
@@ -25745,7 +13076,7 @@ var BinaryCMapReader = function BinaryCMapReaderClosure() {
addHex(end, start, dataSize);
stream.readNumber();
- for (i = 1; i < subitemsCount; i++) {
+ for (let i = 1; i < subitemsCount; i++) {
incHex(end, dataSize);
stream.readHexNumber(start, dataSize);
addHex(start, end, dataSize);
@@ -25761,7 +13092,7 @@ var BinaryCMapReader = function BinaryCMapReaderClosure() {
code = stream.readNumber();
cMap.mapOne(hexToInt(char, dataSize), code);
- for (i = 1; i < subitemsCount; i++) {
+ for (let i = 1; i < subitemsCount; i++) {
incHex(char, dataSize);
if (!sequence) {
@@ -25782,7 +13113,7 @@ var BinaryCMapReader = function BinaryCMapReaderClosure() {
code = stream.readNumber();
cMap.mapCidRange(hexToInt(start, dataSize), hexToInt(end, dataSize), code);
- for (i = 1; i < subitemsCount; i++) {
+ for (let i = 1; i < subitemsCount; i++) {
incHex(end, dataSize);
if (!sequence) {
@@ -25805,7 +13136,7 @@ var BinaryCMapReader = function BinaryCMapReaderClosure() {
stream.readHex(charCode, dataSize);
cMap.mapOne(hexToInt(char, ucs2DataSize), hexToStr(charCode, dataSize));
- for (i = 1; i < subitemsCount; i++) {
+ for (let i = 1; i < subitemsCount; i++) {
incHex(char, ucs2DataSize);
if (!sequence) {
@@ -25828,7 +13159,7 @@ var BinaryCMapReader = function BinaryCMapReaderClosure() {
stream.readHex(charCode, dataSize);
cMap.mapBfRange(hexToInt(start, ucs2DataSize), hexToInt(end, ucs2DataSize), hexToStr(charCode, dataSize));
- for (i = 1; i < subitemsCount; i++) {
+ for (let i = 1; i < subitemsCount; i++) {
incHex(end, ucs2DataSize);
if (!sequence) {
@@ -25847,33 +13178,27 @@ var BinaryCMapReader = function BinaryCMapReaderClosure() {
break;
default:
- reject(new Error("processBinaryCMap: Unknown type: " + type));
- return;
+ throw new Error(`BinaryCMapReader.process - unknown type: ${type}`);
}
}
if (useCMap) {
- resolve(extend(useCMap));
- return;
+ return extend(useCMap);
}
- resolve(cMap);
- });
- }
+ return cMap;
+ }
- function BinaryCMapReader() {}
+ }
- BinaryCMapReader.prototype = {
- process: processBinaryCMap
- };
return BinaryCMapReader;
}();
-var CMapFactory = function CMapFactoryClosure() {
+const CMapFactory = function CMapFactoryClosure() {
function strToInt(str) {
- var a = 0;
+ let a = 0;
- for (var i = 0; i < str.length; i++) {
+ for (let i = 0; i < str.length; i++) {
a = a << 8 | str.charCodeAt(i);
}
@@ -25894,7 +13219,7 @@ var CMapFactory = function CMapFactoryClosure() {
function parseBfChar(cMap, lexer) {
while (true) {
- var obj = lexer.getObj();
+ let obj = lexer.getObj();
if ((0, _primitives.isEOF)(obj)) {
break;
@@ -25905,17 +13230,17 @@ var CMapFactory = function CMapFactoryClosure() {
}
expectString(obj);
- var src = strToInt(obj);
+ const src = strToInt(obj);
obj = lexer.getObj();
expectString(obj);
- var dst = obj;
+ const dst = obj;
cMap.mapOne(src, dst);
}
}
function parseBfRange(cMap, lexer) {
while (true) {
- var obj = lexer.getObj();
+ let obj = lexer.getObj();
if ((0, _primitives.isEOF)(obj)) {
break;
@@ -25926,18 +13251,18 @@ var CMapFactory = function CMapFactoryClosure() {
}
expectString(obj);
- var low = strToInt(obj);
+ const low = strToInt(obj);
obj = lexer.getObj();
expectString(obj);
- var high = strToInt(obj);
+ const high = strToInt(obj);
obj = lexer.getObj();
if (Number.isInteger(obj) || (0, _util.isString)(obj)) {
- var dstLow = Number.isInteger(obj) ? String.fromCharCode(obj) : obj;
+ const dstLow = Number.isInteger(obj) ? String.fromCharCode(obj) : obj;
cMap.mapBfRange(low, high, dstLow);
} else if ((0, _primitives.isCmd)(obj, "[")) {
obj = lexer.getObj();
- var array = [];
+ const array = [];
while (!(0, _primitives.isCmd)(obj, "]") && !(0, _primitives.isEOF)(obj)) {
array.push(obj);
@@ -25955,7 +13280,7 @@ var CMapFactory = function CMapFactoryClosure() {
function parseCidChar(cMap, lexer) {
while (true) {
- var obj = lexer.getObj();
+ let obj = lexer.getObj();
if ((0, _primitives.isEOF)(obj)) {
break;
@@ -25966,17 +13291,17 @@ var CMapFactory = function CMapFactoryClosure() {
}
expectString(obj);
- var src = strToInt(obj);
+ const src = strToInt(obj);
obj = lexer.getObj();
expectInt(obj);
- var dst = obj;
+ const dst = obj;
cMap.mapOne(src, dst);
}
}
function parseCidRange(cMap, lexer) {
while (true) {
- var obj = lexer.getObj();
+ let obj = lexer.getObj();
if ((0, _primitives.isEOF)(obj)) {
break;
@@ -25987,20 +13312,20 @@ var CMapFactory = function CMapFactoryClosure() {
}
expectString(obj);
- var low = strToInt(obj);
+ const low = strToInt(obj);
obj = lexer.getObj();
expectString(obj);
- var high = strToInt(obj);
+ const high = strToInt(obj);
obj = lexer.getObj();
expectInt(obj);
- var dstLow = obj;
+ const dstLow = obj;
cMap.mapCidRange(low, high, dstLow);
}
}
function parseCodespaceRange(cMap, lexer) {
while (true) {
- var obj = lexer.getObj();
+ let obj = lexer.getObj();
if ((0, _primitives.isEOF)(obj)) {
break;
@@ -26014,14 +13339,14 @@ var CMapFactory = function CMapFactoryClosure() {
break;
}
- var low = strToInt(obj);
+ const low = strToInt(obj);
obj = lexer.getObj();
if (!(0, _util.isString)(obj)) {
break;
}
- var high = strToInt(obj);
+ const high = strToInt(obj);
cMap.addCodespaceRange(obj.length, low, high);
}
@@ -26029,7 +13354,7 @@ var CMapFactory = function CMapFactoryClosure() {
}
function parseWMode(cMap, lexer) {
- var obj = lexer.getObj();
+ const obj = lexer.getObj();
if (Number.isInteger(obj)) {
cMap.vertical = !!obj;
@@ -26037,20 +13362,19 @@ var CMapFactory = function CMapFactoryClosure() {
}
function parseCMapName(cMap, lexer) {
- var obj = lexer.getObj();
+ const obj = lexer.getObj();
if ((0, _primitives.isName)(obj) && (0, _util.isString)(obj.name)) {
cMap.name = obj.name;
}
}
- function parseCMap(cMap, lexer, fetchBuiltInCMap, useCMap) {
- var previous;
- var embeddedUseCMap;
+ async function parseCMap(cMap, lexer, fetchBuiltInCMap, useCMap) {
+ let previous, embeddedUseCMap;
objLoop: while (true) {
try {
- var obj = lexer.getObj();
+ const obj = lexer.getObj();
if ((0, _primitives.isEOF)(obj)) {
break;
@@ -26113,85 +13437,81 @@ var CMapFactory = function CMapFactoryClosure() {
return extendCMap(cMap, fetchBuiltInCMap, useCMap);
}
- return Promise.resolve(cMap);
+ return cMap;
}
- function extendCMap(cMap, fetchBuiltInCMap, useCMap) {
- return createBuiltInCMap(useCMap, fetchBuiltInCMap).then(function (newCMap) {
- cMap.useCMap = newCMap;
-
- if (cMap.numCodespaceRanges === 0) {
- var useCodespaceRanges = cMap.useCMap.codespaceRanges;
+ async function extendCMap(cMap, fetchBuiltInCMap, useCMap) {
+ cMap.useCMap = await createBuiltInCMap(useCMap, fetchBuiltInCMap);
- for (var i = 0; i < useCodespaceRanges.length; i++) {
- cMap.codespaceRanges[i] = useCodespaceRanges[i].slice();
- }
+ if (cMap.numCodespaceRanges === 0) {
+ const useCodespaceRanges = cMap.useCMap.codespaceRanges;
- cMap.numCodespaceRanges = cMap.useCMap.numCodespaceRanges;
+ for (let i = 0; i < useCodespaceRanges.length; i++) {
+ cMap.codespaceRanges[i] = useCodespaceRanges[i].slice();
}
- cMap.useCMap.forEach(function (key, value) {
- if (!cMap.contains(key)) {
- cMap.mapOne(key, cMap.useCMap.lookup(key));
- }
- });
- return cMap;
+ cMap.numCodespaceRanges = cMap.useCMap.numCodespaceRanges;
+ }
+
+ cMap.useCMap.forEach(function (key, value) {
+ if (!cMap.contains(key)) {
+ cMap.mapOne(key, cMap.useCMap.lookup(key));
+ }
});
+ return cMap;
}
- function createBuiltInCMap(name, fetchBuiltInCMap) {
+ async function createBuiltInCMap(name, fetchBuiltInCMap) {
if (name === "Identity-H") {
- return Promise.resolve(new IdentityCMap(false, 2));
+ return new IdentityCMap(false, 2);
} else if (name === "Identity-V") {
- return Promise.resolve(new IdentityCMap(true, 2));
+ return new IdentityCMap(true, 2);
}
if (!BUILT_IN_CMAPS.includes(name)) {
- return Promise.reject(new Error("Unknown CMap name: " + name));
+ throw new Error("Unknown CMap name: " + name);
}
if (!fetchBuiltInCMap) {
- return Promise.reject(new Error("Built-in CMap parameters are not provided."));
+ throw new Error("Built-in CMap parameters are not provided.");
}
- return fetchBuiltInCMap(name).then(function (data) {
- var cMapData = data.cMapData,
- compressionType = data.compressionType;
- var cMap = new CMap(true);
-
- if (compressionType === _util.CMapCompressionType.BINARY) {
- return new BinaryCMapReader().process(cMapData, cMap, function (useCMap) {
- return extendCMap(cMap, fetchBuiltInCMap, useCMap);
- });
- }
+ const {
+ cMapData,
+ compressionType
+ } = await fetchBuiltInCMap(name);
+ const cMap = new CMap(true);
+
+ if (compressionType === _util.CMapCompressionType.BINARY) {
+ return new BinaryCMapReader().process(cMapData, cMap, useCMap => {
+ return extendCMap(cMap, fetchBuiltInCMap, useCMap);
+ });
+ }
- if (compressionType === _util.CMapCompressionType.NONE) {
- var lexer = new _parser.Lexer(new _stream.Stream(cMapData));
- return parseCMap(cMap, lexer, fetchBuiltInCMap, null);
- }
+ if (compressionType === _util.CMapCompressionType.NONE) {
+ const lexer = new _parser.Lexer(new _stream.Stream(cMapData));
+ return parseCMap(cMap, lexer, fetchBuiltInCMap, null);
+ }
- return Promise.reject(new Error("TODO: Only BINARY/NONE CMap compression is currently supported."));
- });
+ throw new Error("TODO: Only BINARY/NONE CMap compression is currently supported.");
}
return {
async create(params) {
- var encoding = params.encoding;
- var fetchBuiltInCMap = params.fetchBuiltInCMap;
- var useCMap = params.useCMap;
+ const encoding = params.encoding;
+ const fetchBuiltInCMap = params.fetchBuiltInCMap;
+ const useCMap = params.useCMap;
if ((0, _primitives.isName)(encoding)) {
return createBuiltInCMap(encoding.name, fetchBuiltInCMap);
} else if ((0, _primitives.isStream)(encoding)) {
- var cMap = new CMap();
- var lexer = new _parser.Lexer(encoding);
- return parseCMap(cMap, lexer, fetchBuiltInCMap, useCMap).then(function (parsedCMap) {
- if (parsedCMap.isIdentityCMap) {
- return createBuiltInCMap(parsedCMap.name, fetchBuiltInCMap);
- }
+ const parsedCMap = await parseCMap(new CMap(), new _parser.Lexer(encoding), fetchBuiltInCMap, useCMap);
- return parsedCMap;
- });
+ if (parsedCMap.isIdentityCMap) {
+ return createBuiltInCMap(parsedCMap.name, fetchBuiltInCMap);
+ }
+
+ return parsedCMap;
}
throw new Error("Encoding required.");
@@ -26203,3271 +13523,12388 @@ var CMapFactory = function CMapFactoryClosure() {
exports.CMapFactory = CMapFactory;
/***/ }),
-/* 30 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 17 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
-"use strict";
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
value: true
-});
-exports.getFontType = getFontType;
-exports.IdentityToUnicodeMap = exports.ToUnicodeMap = exports.FontFlags = exports.Font = exports.ErrorFont = exports.SEAC_ANALYSIS_ENABLED = void 0;
+}));
+exports.Parser = exports.Linearization = exports.Lexer = void 0;
var _util = __w_pdfjs_require__(2);
-var _cff_parser = __w_pdfjs_require__(31);
+var _primitives = __w_pdfjs_require__(5);
-var _glyphlist = __w_pdfjs_require__(34);
+var _core_utils = __w_pdfjs_require__(9);
-var _encodings = __w_pdfjs_require__(33);
+var _ascii_85_stream = __w_pdfjs_require__(18);
-var _standard_fonts = __w_pdfjs_require__(35);
+var _ascii_hex_stream = __w_pdfjs_require__(20);
-var _unicode = __w_pdfjs_require__(36);
+var _ccitt_stream = __w_pdfjs_require__(21);
-var _core_utils = __w_pdfjs_require__(8);
+var _flate_stream = __w_pdfjs_require__(23);
-var _font_renderer = __w_pdfjs_require__(37);
+var _jbig2_stream = __w_pdfjs_require__(24);
-var _cmap = __w_pdfjs_require__(29);
+var _jpeg_stream = __w_pdfjs_require__(27);
-var _stream = __w_pdfjs_require__(12);
+var _jpx_stream = __w_pdfjs_require__(29);
-var _type1_parser = __w_pdfjs_require__(38);
+var _lzw_stream = __w_pdfjs_require__(31);
-const PRIVATE_USE_AREAS = [[0xe000, 0xf8ff], [0x100000, 0x10fffd]];
-var PDF_GLYPH_SPACE_UNITS = 1000;
-var SEAC_ANALYSIS_ENABLED = true;
-exports.SEAC_ANALYSIS_ENABLED = SEAC_ANALYSIS_ENABLED;
-const EXPORT_DATA_PROPERTIES = ["ascent", "bbox", "black", "bold", "charProcOperatorList", "composite", "data", "defaultVMetrics", "defaultWidth", "descent", "fallbackName", "fontMatrix", "fontType", "isMonospace", "isSerifFont", "isType3Font", "italic", "loadedName", "mimetype", "missingFile", "name", "remeasure", "subtype", "type", "vertical"];
-const EXPORT_DATA_EXTRA_PROPERTIES = ["cMap", "defaultEncoding", "differences", "isSymbolicFont", "seacMap", "toFontChar", "toUnicode", "vmetrics", "widths"];
-var FontFlags = {
- FixedPitch: 1,
- Serif: 2,
- Symbolic: 4,
- Script: 8,
- Nonsymbolic: 32,
- Italic: 64,
- AllCap: 65536,
- SmallCap: 131072,
- ForceBold: 262144
-};
-exports.FontFlags = FontFlags;
-var MacStandardGlyphOrdering = [".notdef", ".null", "nonmarkingreturn", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quotesingle", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "grave", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "Adieresis", "Aring", "Ccedilla", "Eacute", "Ntilde", "Odieresis", "Udieresis", "aacute", "agrave", "acircumflex", "adieresis", "atilde", "aring", "ccedilla", "eacute", "egrave", "ecircumflex", "edieresis", "iacute", "igrave", "icircumflex", "idieresis", "ntilde", "oacute", "ograve", "ocircumflex", "odieresis", "otilde", "uacute", "ugrave", "ucircumflex", "udieresis", "dagger", "degree", "cent", "sterling", "section", "bullet", "paragraph", "germandbls", "registered", "copyright", "trademark", "acute", "dieresis", "notequal", "AE", "Oslash", "infinity", "plusminus", "lessequal", "greaterequal", "yen", "mu", "partialdiff", "summation", "product", "pi", "integral", "ordfeminine", "ordmasculine", "Omega", "ae", "oslash", "questiondown", "exclamdown", "logicalnot", "radical", "florin", "approxequal", "Delta", "guillemotleft", "guillemotright", "ellipsis", "nonbreakingspace", "Agrave", "Atilde", "Otilde", "OE", "oe", "endash", "emdash", "quotedblleft", "quotedblright", "quoteleft", "quoteright", "divide", "lozenge", "ydieresis", "Ydieresis", "fraction", "currency", "guilsinglleft", "guilsinglright", "fi", "fl", "daggerdbl", "periodcentered", "quotesinglbase", "quotedblbase", "perthousand", "Acircumflex", "Ecircumflex", "Aacute", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Oacute", "Ocircumflex", "apple", "Ograve", "Uacute", "Ucircumflex", "Ugrave", "dotlessi", "circumflex", "tilde", "macron", "breve", "dotaccent", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "Lslash", "lslash", "Scaron", "scaron", "Zcaron", "zcaron", "brokenbar", "Eth", "eth", "Yacute", "yacute", "Thorn", "thorn", "minus", "multiply", "onesuperior", "twosuperior", "threesuperior", "onehalf", "onequarter", "threequarters", "franc", "Gbreve", "gbreve", "Idotaccent", "Scedilla", "scedilla", "Cacute", "cacute", "Ccaron", "ccaron", "dcroat"];
+var _stream = __w_pdfjs_require__(10);
-function adjustWidths(properties) {
- if (!properties.fontMatrix) {
- return;
- }
+var _predictor_stream = __w_pdfjs_require__(32);
- if (properties.fontMatrix[0] === _util.FONT_IDENTITY_MATRIX[0]) {
- return;
- }
+var _run_length_stream = __w_pdfjs_require__(33);
- var scale = 0.001 / properties.fontMatrix[0];
- var glyphsWidths = properties.widths;
+const MAX_LENGTH_TO_CACHE = 1000;
+const MAX_ADLER32_LENGTH = 5552;
- for (var glyph in glyphsWidths) {
- glyphsWidths[glyph] *= scale;
+function computeAdler32(bytes) {
+ const bytesLength = bytes.length;
+ let a = 1,
+ b = 0;
+
+ for (let i = 0; i < bytesLength; ++i) {
+ a += bytes[i] & 0xff;
+ b += a;
}
- properties.defaultWidth *= scale;
+ return b % 65521 << 16 | a % 65521;
}
-function adjustToUnicode(properties, builtInEncoding) {
- if (properties.hasIncludedToUnicodeMap) {
- return;
+class Parser {
+ constructor({
+ lexer,
+ xref,
+ allowStreams = false,
+ recoveryMode = false
+ }) {
+ this.lexer = lexer;
+ this.xref = xref;
+ this.allowStreams = allowStreams;
+ this.recoveryMode = recoveryMode;
+ this.imageCache = Object.create(null);
+ this.refill();
}
- if (properties.hasEncoding) {
- return;
+ refill() {
+ this.buf1 = this.lexer.getObj();
+ this.buf2 = this.lexer.getObj();
}
- if (builtInEncoding === properties.defaultEncoding) {
- return;
+ shift() {
+ if (this.buf2 instanceof _primitives.Cmd && this.buf2.cmd === "ID") {
+ this.buf1 = this.buf2;
+ this.buf2 = null;
+ } else {
+ this.buf1 = this.buf2;
+ this.buf2 = this.lexer.getObj();
+ }
}
- if (properties.toUnicode instanceof IdentityToUnicodeMap) {
- return;
+ tryShift() {
+ try {
+ this.shift();
+ return true;
+ } catch (e) {
+ if (e instanceof _core_utils.MissingDataException) {
+ throw e;
+ }
+
+ return false;
+ }
}
- var toUnicode = [],
- glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();
+ getObj(cipherTransform = null) {
+ const buf1 = this.buf1;
+ this.shift();
- for (var charCode in builtInEncoding) {
- var glyphName = builtInEncoding[charCode];
- var unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap);
+ if (buf1 instanceof _primitives.Cmd) {
+ switch (buf1.cmd) {
+ case "BI":
+ return this.makeInlineImage(cipherTransform);
- if (unicode !== -1) {
- toUnicode[charCode] = String.fromCharCode(unicode);
+ case "[":
+ const array = [];
+
+ while (!(0, _primitives.isCmd)(this.buf1, "]") && !(0, _primitives.isEOF)(this.buf1)) {
+ array.push(this.getObj(cipherTransform));
+ }
+
+ if ((0, _primitives.isEOF)(this.buf1)) {
+ if (this.recoveryMode) {
+ return array;
+ }
+
+ throw new _core_utils.ParserEOFException("End of file inside array.");
+ }
+
+ this.shift();
+ return array;
+
+ case "<<":
+ const dict = new _primitives.Dict(this.xref);
+
+ while (!(0, _primitives.isCmd)(this.buf1, ">>") && !(0, _primitives.isEOF)(this.buf1)) {
+ if (!(0, _primitives.isName)(this.buf1)) {
+ (0, _util.info)("Malformed dictionary: key must be a name object");
+ this.shift();
+ continue;
+ }
+
+ const key = this.buf1.name;
+ this.shift();
+
+ if ((0, _primitives.isEOF)(this.buf1)) {
+ break;
+ }
+
+ dict.set(key, this.getObj(cipherTransform));
+ }
+
+ if ((0, _primitives.isEOF)(this.buf1)) {
+ if (this.recoveryMode) {
+ return dict;
+ }
+
+ throw new _core_utils.ParserEOFException("End of file inside dictionary.");
+ }
+
+ if ((0, _primitives.isCmd)(this.buf2, "stream")) {
+ return this.allowStreams ? this.makeStream(dict, cipherTransform) : dict;
+ }
+
+ this.shift();
+ return dict;
+
+ default:
+ return buf1;
+ }
+ }
+
+ if (Number.isInteger(buf1)) {
+ if (Number.isInteger(this.buf1) && (0, _primitives.isCmd)(this.buf2, "R")) {
+ const ref = _primitives.Ref.get(buf1, this.buf1);
+
+ this.shift();
+ this.shift();
+ return ref;
+ }
+
+ return buf1;
+ }
+
+ if (typeof buf1 === "string") {
+ if (cipherTransform) {
+ return cipherTransform.decryptString(buf1);
+ }
+
+ return buf1;
}
+
+ return buf1;
}
- properties.toUnicode.amend(toUnicode);
-}
+ findDefaultInlineStreamEnd(stream) {
+ const E = 0x45,
+ I = 0x49,
+ SPACE = 0x20,
+ LF = 0xa,
+ CR = 0xd,
+ NUL = 0x0;
+ const lexer = this.lexer,
+ startPos = stream.pos,
+ n = 10;
+ let state = 0,
+ ch,
+ maybeEIPos;
-function getFontType(type, subtype) {
- switch (type) {
- case "Type1":
- return subtype === "Type1C" ? _util.FontType.TYPE1C : _util.FontType.TYPE1;
+ while ((ch = stream.getByte()) !== -1) {
+ if (state === 0) {
+ state = ch === E ? 1 : 0;
+ } else if (state === 1) {
+ state = ch === I ? 2 : 0;
+ } else {
+ (0, _util.assert)(state === 2, "findDefaultInlineStreamEnd - invalid state.");
- case "CIDFontType0":
- return subtype === "CIDFontType0C" ? _util.FontType.CIDFONTTYPE0C : _util.FontType.CIDFONTTYPE0;
+ if (ch === SPACE || ch === LF || ch === CR) {
+ maybeEIPos = stream.pos;
+ const followingBytes = stream.peekBytes(n);
- case "OpenType":
- return _util.FontType.OPENTYPE;
+ for (let i = 0, ii = followingBytes.length; i < ii; i++) {
+ ch = followingBytes[i];
- case "TrueType":
- return _util.FontType.TRUETYPE;
+ if (ch === NUL && followingBytes[i + 1] !== NUL) {
+ continue;
+ }
- case "CIDFontType2":
- return _util.FontType.CIDFONTTYPE2;
+ if (ch !== LF && ch !== CR && (ch < SPACE || ch > 0x7f)) {
+ state = 0;
+ break;
+ }
+ }
- case "MMType1":
- return _util.FontType.MMTYPE1;
+ if (state !== 2) {
+ continue;
+ }
- case "Type0":
- return _util.FontType.TYPE0;
+ if (lexer.knownCommands) {
+ const nextObj = lexer.peekObj();
- default:
- return _util.FontType.UNKNOWN;
+ if (nextObj instanceof _primitives.Cmd && !lexer.knownCommands[nextObj.cmd]) {
+ state = 0;
+ }
+ } else {
+ (0, _util.warn)("findDefaultInlineStreamEnd - `lexer.knownCommands` is undefined.");
+ }
+
+ if (state === 2) {
+ break;
+ }
+ } else {
+ state = 0;
+ }
+ }
+ }
+
+ if (ch === -1) {
+ (0, _util.warn)("findDefaultInlineStreamEnd: " + "Reached the end of the stream without finding a valid EI marker");
+
+ if (maybeEIPos) {
+ (0, _util.warn)('... trying to recover by using the last "EI" occurrence.');
+ stream.skip(-(stream.pos - maybeEIPos));
+ }
+ }
+
+ let endOffset = 4;
+ stream.skip(-endOffset);
+ ch = stream.peekByte();
+ stream.skip(endOffset);
+
+ if (!(0, _core_utils.isWhiteSpace)(ch)) {
+ endOffset--;
+ }
+
+ return stream.pos - endOffset - startPos;
}
-}
-function recoverGlyphName(name, glyphsUnicodeMap) {
- if (glyphsUnicodeMap[name] !== undefined) {
- return name;
+ findDCTDecodeInlineStreamEnd(stream) {
+ const startPos = stream.pos;
+ let foundEOI = false,
+ b,
+ markerLength;
+
+ while ((b = stream.getByte()) !== -1) {
+ if (b !== 0xff) {
+ continue;
+ }
+
+ switch (stream.getByte()) {
+ case 0x00:
+ break;
+
+ case 0xff:
+ stream.skip(-1);
+ break;
+
+ case 0xd9:
+ foundEOI = true;
+ break;
+
+ case 0xc0:
+ case 0xc1:
+ case 0xc2:
+ case 0xc3:
+ case 0xc5:
+ case 0xc6:
+ case 0xc7:
+ case 0xc9:
+ case 0xca:
+ case 0xcb:
+ case 0xcd:
+ case 0xce:
+ case 0xcf:
+ case 0xc4:
+ case 0xcc:
+ case 0xda:
+ case 0xdb:
+ case 0xdc:
+ case 0xdd:
+ case 0xde:
+ case 0xdf:
+ case 0xe0:
+ case 0xe1:
+ case 0xe2:
+ case 0xe3:
+ case 0xe4:
+ case 0xe5:
+ case 0xe6:
+ case 0xe7:
+ case 0xe8:
+ case 0xe9:
+ case 0xea:
+ case 0xeb:
+ case 0xec:
+ case 0xed:
+ case 0xee:
+ case 0xef:
+ case 0xfe:
+ markerLength = stream.getUint16();
+
+ if (markerLength > 2) {
+ stream.skip(markerLength - 2);
+ } else {
+ stream.skip(-2);
+ }
+
+ break;
+ }
+
+ if (foundEOI) {
+ break;
+ }
+ }
+
+ const length = stream.pos - startPos;
+
+ if (b === -1) {
+ (0, _util.warn)("Inline DCTDecode image stream: " + "EOI marker not found, searching for /EI/ instead.");
+ stream.skip(-length);
+ return this.findDefaultInlineStreamEnd(stream);
+ }
+
+ this.inlineStreamSkipEI(stream);
+ return length;
}
- var unicode = (0, _unicode.getUnicodeForGlyph)(name, glyphsUnicodeMap);
+ findASCII85DecodeInlineStreamEnd(stream) {
+ const TILDE = 0x7e,
+ GT = 0x3e;
+ const startPos = stream.pos;
+ let ch;
- if (unicode !== -1) {
- for (var key in glyphsUnicodeMap) {
- if (glyphsUnicodeMap[key] === unicode) {
- return key;
+ while ((ch = stream.getByte()) !== -1) {
+ if (ch === TILDE) {
+ const tildePos = stream.pos;
+ ch = stream.peekByte();
+
+ while ((0, _core_utils.isWhiteSpace)(ch)) {
+ stream.skip();
+ ch = stream.peekByte();
+ }
+
+ if (ch === GT) {
+ stream.skip();
+ break;
+ }
+
+ if (stream.pos > tildePos) {
+ const maybeEI = stream.peekBytes(2);
+
+ if (maybeEI[0] === 0x45 && maybeEI[1] === 0x49) {
+ break;
+ }
+ }
}
}
+
+ const length = stream.pos - startPos;
+
+ if (ch === -1) {
+ (0, _util.warn)("Inline ASCII85Decode image stream: " + "EOD marker not found, searching for /EI/ instead.");
+ stream.skip(-length);
+ return this.findDefaultInlineStreamEnd(stream);
+ }
+
+ this.inlineStreamSkipEI(stream);
+ return length;
}
- (0, _util.info)("Unable to recover a standard glyph name for: " + name);
- return name;
-}
+ findASCIIHexDecodeInlineStreamEnd(stream) {
+ const GT = 0x3e;
+ const startPos = stream.pos;
+ let ch;
-var Glyph = function GlyphClosure() {
- function Glyph(fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont) {
- this.fontChar = fontChar;
- this.unicode = unicode;
- this.accent = accent;
- this.width = width;
- this.vmetric = vmetric;
- this.operatorListId = operatorListId;
- this.isSpace = isSpace;
- this.isInFont = isInFont;
+ while ((ch = stream.getByte()) !== -1) {
+ if (ch === GT) {
+ break;
+ }
+ }
+
+ const length = stream.pos - startPos;
+
+ if (ch === -1) {
+ (0, _util.warn)("Inline ASCIIHexDecode image stream: " + "EOD marker not found, searching for /EI/ instead.");
+ stream.skip(-length);
+ return this.findDefaultInlineStreamEnd(stream);
+ }
+
+ this.inlineStreamSkipEI(stream);
+ return length;
}
- Glyph.prototype.matchesForCache = function (fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont) {
- return this.fontChar === fontChar && this.unicode === unicode && this.accent === accent && this.width === width && this.vmetric === vmetric && this.operatorListId === operatorListId && this.isSpace === isSpace && this.isInFont === isInFont;
- };
+ inlineStreamSkipEI(stream) {
+ const E = 0x45,
+ I = 0x49;
+ let state = 0,
+ ch;
- return Glyph;
-}();
+ while ((ch = stream.getByte()) !== -1) {
+ if (state === 0) {
+ state = ch === E ? 1 : 0;
+ } else if (state === 1) {
+ state = ch === I ? 2 : 0;
+ } else if (state === 2) {
+ break;
+ }
+ }
+ }
-var ToUnicodeMap = function ToUnicodeMapClosure() {
- function ToUnicodeMap(cmap = []) {
- this._map = cmap;
+ makeInlineImage(cipherTransform) {
+ const lexer = this.lexer;
+ const stream = lexer.stream;
+ const dict = new _primitives.Dict(this.xref);
+ let dictLength;
+
+ while (!(0, _primitives.isCmd)(this.buf1, "ID") && !(0, _primitives.isEOF)(this.buf1)) {
+ if (!(0, _primitives.isName)(this.buf1)) {
+ throw new _util.FormatError("Dictionary key must be a name object");
+ }
+
+ const key = this.buf1.name;
+ this.shift();
+
+ if ((0, _primitives.isEOF)(this.buf1)) {
+ break;
+ }
+
+ dict.set(key, this.getObj(cipherTransform));
+ }
+
+ if (lexer.beginInlineImagePos !== -1) {
+ dictLength = stream.pos - lexer.beginInlineImagePos;
+ }
+
+ const filter = dict.get("Filter", "F");
+ let filterName;
+
+ if ((0, _primitives.isName)(filter)) {
+ filterName = filter.name;
+ } else if (Array.isArray(filter)) {
+ const filterZero = this.xref.fetchIfRef(filter[0]);
+
+ if ((0, _primitives.isName)(filterZero)) {
+ filterName = filterZero.name;
+ }
+ }
+
+ const startPos = stream.pos;
+ let length;
+
+ if (filterName === "DCTDecode" || filterName === "DCT") {
+ length = this.findDCTDecodeInlineStreamEnd(stream);
+ } else if (filterName === "ASCII85Decode" || filterName === "A85") {
+ length = this.findASCII85DecodeInlineStreamEnd(stream);
+ } else if (filterName === "ASCIIHexDecode" || filterName === "AHx") {
+ length = this.findASCIIHexDecodeInlineStreamEnd(stream);
+ } else {
+ length = this.findDefaultInlineStreamEnd(stream);
+ }
+
+ let imageStream = stream.makeSubStream(startPos, length, dict);
+ let cacheKey;
+
+ if (length < MAX_LENGTH_TO_CACHE && dictLength < MAX_ADLER32_LENGTH) {
+ const imageBytes = imageStream.getBytes();
+ imageStream.reset();
+ const initialStreamPos = stream.pos;
+ stream.pos = lexer.beginInlineImagePos;
+ const dictBytes = stream.getBytes(dictLength);
+ stream.pos = initialStreamPos;
+ cacheKey = computeAdler32(imageBytes) + "_" + computeAdler32(dictBytes);
+ const cacheEntry = this.imageCache[cacheKey];
+
+ if (cacheEntry !== undefined) {
+ this.buf2 = _primitives.Cmd.get("EI");
+ this.shift();
+ cacheEntry.reset();
+ return cacheEntry;
+ }
+ }
+
+ if (cipherTransform) {
+ imageStream = cipherTransform.createStream(imageStream, length);
+ }
+
+ imageStream = this.filter(imageStream, dict, length);
+ imageStream.dict = dict;
+
+ if (cacheKey !== undefined) {
+ imageStream.cacheKey = `inline_${length}_${cacheKey}`;
+ this.imageCache[cacheKey] = imageStream;
+ }
+
+ this.buf2 = _primitives.Cmd.get("EI");
+ this.shift();
+ return imageStream;
}
- ToUnicodeMap.prototype = {
- get length() {
- return this._map.length;
- },
+ _findStreamLength(startPos, signature) {
+ const {
+ stream
+ } = this.lexer;
+ stream.pos = startPos;
+ const SCAN_BLOCK_LENGTH = 2048;
+ const signatureLength = signature.length;
+
+ while (stream.pos < stream.end) {
+ const scanBytes = stream.peekBytes(SCAN_BLOCK_LENGTH);
+ const scanLength = scanBytes.length - signatureLength;
- forEach(callback) {
- for (var charCode in this._map) {
- callback(charCode, this._map[charCode].charCodeAt(0));
+ if (scanLength <= 0) {
+ break;
}
- },
- has(i) {
- return this._map[i] !== undefined;
- },
+ let pos = 0;
- get(i) {
- return this._map[i];
- },
+ while (pos < scanLength) {
+ let j = 0;
- charCodeOf(value) {
- const map = this._map;
+ while (j < signatureLength && scanBytes[pos + j] === signature[j]) {
+ j++;
+ }
+
+ if (j >= signatureLength) {
+ stream.pos += pos;
+ return stream.pos - startPos;
+ }
- if (map.length <= 0x10000) {
- return map.indexOf(value);
+ pos++;
}
- for (const charCode in map) {
- if (map[charCode] === value) {
- return charCode | 0;
+ stream.pos += scanLength;
+ }
+
+ return -1;
+ }
+
+ makeStream(dict, cipherTransform) {
+ const lexer = this.lexer;
+ let stream = lexer.stream;
+ lexer.skipToNextLine();
+ const startPos = stream.pos - 1;
+ let length = dict.get("Length");
+
+ if (!Number.isInteger(length)) {
+ (0, _util.info)(`Bad length "${length}" in stream`);
+ length = 0;
+ }
+
+ stream.pos = startPos + length;
+ lexer.nextChar();
+
+ if (this.tryShift() && (0, _primitives.isCmd)(this.buf2, "endstream")) {
+ this.shift();
+ } else {
+ const ENDSTREAM_SIGNATURE = new Uint8Array([0x65, 0x6e, 0x64, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d]);
+
+ let actualLength = this._findStreamLength(startPos, ENDSTREAM_SIGNATURE);
+
+ if (actualLength < 0) {
+ const MAX_TRUNCATION = 1;
+
+ for (let i = 1; i <= MAX_TRUNCATION; i++) {
+ const end = ENDSTREAM_SIGNATURE.length - i;
+ const TRUNCATED_SIGNATURE = ENDSTREAM_SIGNATURE.slice(0, end);
+
+ const maybeLength = this._findStreamLength(startPos, TRUNCATED_SIGNATURE);
+
+ if (maybeLength >= 0) {
+ const lastByte = stream.peekBytes(end + 1)[end];
+
+ if (!(0, _core_utils.isWhiteSpace)(lastByte)) {
+ break;
+ }
+
+ (0, _util.info)(`Found "${(0, _util.bytesToString)(TRUNCATED_SIGNATURE)}" when ` + "searching for endstream command.");
+ actualLength = maybeLength;
+ break;
+ }
+ }
+
+ if (actualLength < 0) {
+ throw new _util.FormatError("Missing endstream command.");
}
}
- return -1;
- },
+ length = actualLength;
+ lexer.nextChar();
+ this.shift();
+ this.shift();
+ }
+
+ this.shift();
+ stream = stream.makeSubStream(startPos, length, dict);
+
+ if (cipherTransform) {
+ stream = cipherTransform.createStream(stream, length);
+ }
+
+ stream = this.filter(stream, dict, length);
+ stream.dict = dict;
+ return stream;
+ }
+
+ filter(stream, dict, length) {
+ let filter = dict.get("Filter", "F");
+ let params = dict.get("DecodeParms", "DP");
- amend(map) {
- for (var charCode in map) {
- this._map[charCode] = map[charCode];
+ if ((0, _primitives.isName)(filter)) {
+ if (Array.isArray(params)) {
+ (0, _util.warn)("/DecodeParms should not contain an Array, " + "when /Filter contains a Name.");
}
+
+ return this.makeFilter(stream, filter.name, length, params);
}
- };
- return ToUnicodeMap;
-}();
+ let maybeLength = length;
-exports.ToUnicodeMap = ToUnicodeMap;
+ if (Array.isArray(filter)) {
+ const filterArray = filter;
+ const paramsArray = params;
-var IdentityToUnicodeMap = function IdentityToUnicodeMapClosure() {
- function IdentityToUnicodeMap(firstChar, lastChar) {
- this.firstChar = firstChar;
- this.lastChar = lastChar;
+ for (let i = 0, ii = filterArray.length; i < ii; ++i) {
+ filter = this.xref.fetchIfRef(filterArray[i]);
+
+ if (!(0, _primitives.isName)(filter)) {
+ throw new _util.FormatError(`Bad filter name "${filter}"`);
+ }
+
+ params = null;
+
+ if (Array.isArray(paramsArray) && i in paramsArray) {
+ params = this.xref.fetchIfRef(paramsArray[i]);
+ }
+
+ stream = this.makeFilter(stream, filter.name, maybeLength, params);
+ maybeLength = null;
+ }
+ }
+
+ return stream;
}
- IdentityToUnicodeMap.prototype = {
- get length() {
- return this.lastChar + 1 - this.firstChar;
- },
+ makeFilter(stream, name, maybeLength, params) {
+ if (maybeLength === 0) {
+ (0, _util.warn)(`Empty "${name}" stream.`);
+ return new _stream.NullStream();
+ }
+
+ try {
+ const xrefStreamStats = this.xref.stats.streamTypes;
+
+ if (name === "FlateDecode" || name === "Fl") {
+ xrefStreamStats[_util.StreamType.FLATE] = true;
+
+ if (params) {
+ return new _predictor_stream.PredictorStream(new _flate_stream.FlateStream(stream, maybeLength), maybeLength, params);
+ }
- forEach(callback) {
- for (var i = this.firstChar, ii = this.lastChar; i <= ii; i++) {
- callback(i, i);
+ return new _flate_stream.FlateStream(stream, maybeLength);
}
- },
- has(i) {
- return this.firstChar <= i && i <= this.lastChar;
- },
+ if (name === "LZWDecode" || name === "LZW") {
+ xrefStreamStats[_util.StreamType.LZW] = true;
+ let earlyChange = 1;
+
+ if (params) {
+ if (params.has("EarlyChange")) {
+ earlyChange = params.get("EarlyChange");
+ }
- get(i) {
- if (this.firstChar <= i && i <= this.lastChar) {
- return String.fromCharCode(i);
+ return new _predictor_stream.PredictorStream(new _lzw_stream.LZWStream(stream, maybeLength, earlyChange), maybeLength, params);
+ }
+
+ return new _lzw_stream.LZWStream(stream, maybeLength, earlyChange);
}
- return undefined;
- },
+ if (name === "DCTDecode" || name === "DCT") {
+ xrefStreamStats[_util.StreamType.DCT] = true;
+ return new _jpeg_stream.JpegStream(stream, maybeLength, params);
+ }
- charCodeOf(v) {
- return Number.isInteger(v) && v >= this.firstChar && v <= this.lastChar ? v : -1;
- },
+ if (name === "JPXDecode" || name === "JPX") {
+ xrefStreamStats[_util.StreamType.JPX] = true;
+ return new _jpx_stream.JpxStream(stream, maybeLength, params);
+ }
+
+ if (name === "ASCII85Decode" || name === "A85") {
+ xrefStreamStats[_util.StreamType.A85] = true;
+ return new _ascii_85_stream.Ascii85Stream(stream, maybeLength);
+ }
+
+ if (name === "ASCIIHexDecode" || name === "AHx") {
+ xrefStreamStats[_util.StreamType.AHX] = true;
+ return new _ascii_hex_stream.AsciiHexStream(stream, maybeLength);
+ }
+
+ if (name === "CCITTFaxDecode" || name === "CCF") {
+ xrefStreamStats[_util.StreamType.CCF] = true;
+ return new _ccitt_stream.CCITTFaxStream(stream, maybeLength, params);
+ }
+
+ if (name === "RunLengthDecode" || name === "RL") {
+ xrefStreamStats[_util.StreamType.RLX] = true;
+ return new _run_length_stream.RunLengthStream(stream, maybeLength);
+ }
+
+ if (name === "JBIG2Decode") {
+ xrefStreamStats[_util.StreamType.JBIG] = true;
+ return new _jbig2_stream.Jbig2Stream(stream, maybeLength, params);
+ }
- amend(map) {
- (0, _util.unreachable)("Should not call amend()");
+ (0, _util.warn)(`Filter "${name}" is not supported.`);
+ return stream;
+ } catch (ex) {
+ if (ex instanceof _core_utils.MissingDataException) {
+ throw ex;
+ }
+
+ (0, _util.warn)(`Invalid stream: "${ex}"`);
+ return new _stream.NullStream();
}
+ }
- };
- return IdentityToUnicodeMap;
-}();
+}
-exports.IdentityToUnicodeMap = IdentityToUnicodeMap;
+exports.Parser = Parser;
+const specialChars = [1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 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, 2, 0, 2, 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, 2, 0, 2, 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, 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];
-var OpenTypeFileBuilder = function OpenTypeFileBuilderClosure() {
- function writeInt16(dest, offset, num) {
- dest[offset] = num >> 8 & 0xff;
- dest[offset + 1] = num & 0xff;
+function toHexDigit(ch) {
+ if (ch >= 0x30 && ch <= 0x39) {
+ return ch & 0x0f;
}
- function writeInt32(dest, offset, num) {
- dest[offset] = num >> 24 & 0xff;
- dest[offset + 1] = num >> 16 & 0xff;
- dest[offset + 2] = num >> 8 & 0xff;
- dest[offset + 3] = num & 0xff;
+ if (ch >= 0x41 && ch <= 0x46 || ch >= 0x61 && ch <= 0x66) {
+ return (ch & 0x0f) + 9;
}
- function writeData(dest, offset, data) {
- var i, ii;
+ return -1;
+}
- if (data instanceof Uint8Array) {
- dest.set(data, offset);
- } else if (typeof data === "string") {
- for (i = 0, ii = data.length; i < ii; i++) {
- dest[offset++] = data.charCodeAt(i) & 0xff;
+class Lexer {
+ constructor(stream, knownCommands = null) {
+ this.stream = stream;
+ this.nextChar();
+ this.strBuf = [];
+ this.knownCommands = knownCommands;
+ this._hexStringNumWarn = 0;
+ this.beginInlineImagePos = -1;
+ }
+
+ nextChar() {
+ return this.currentChar = this.stream.getByte();
+ }
+
+ peekChar() {
+ return this.stream.peekByte();
+ }
+
+ getNumber() {
+ let ch = this.currentChar;
+ let eNotation = false;
+ let divideBy = 0;
+ let sign = 0;
+
+ if (ch === 0x2d) {
+ sign = -1;
+ ch = this.nextChar();
+
+ if (ch === 0x2d) {
+ ch = this.nextChar();
}
- } else {
- for (i = 0, ii = data.length; i < ii; i++) {
- dest[offset++] = data[i] & 0xff;
+ } else if (ch === 0x2b) {
+ sign = 1;
+ ch = this.nextChar();
+ }
+
+ if (ch === 0x0a || ch === 0x0d) {
+ do {
+ ch = this.nextChar();
+ } while (ch === 0x0a || ch === 0x0d);
+ }
+
+ if (ch === 0x2e) {
+ divideBy = 10;
+ ch = this.nextChar();
+ }
+
+ if (ch < 0x30 || ch > 0x39) {
+ if (divideBy === 10 && sign === 0 && ((0, _core_utils.isWhiteSpace)(ch) || ch === -1)) {
+ (0, _util.warn)("Lexer.getNumber - treating a single decimal point as zero.");
+ return 0;
}
+
+ throw new _util.FormatError(`Invalid number: ${String.fromCharCode(ch)} (charCode ${ch})`);
}
+
+ sign = sign || 1;
+ let baseValue = ch - 0x30;
+ let powerValue = 0;
+ let powerValueSign = 1;
+
+ while ((ch = this.nextChar()) >= 0) {
+ if (ch >= 0x30 && ch <= 0x39) {
+ const currentDigit = ch - 0x30;
+
+ if (eNotation) {
+ powerValue = powerValue * 10 + currentDigit;
+ } else {
+ if (divideBy !== 0) {
+ divideBy *= 10;
+ }
+
+ baseValue = baseValue * 10 + currentDigit;
+ }
+ } else if (ch === 0x2e) {
+ if (divideBy === 0) {
+ divideBy = 1;
+ } else {
+ break;
+ }
+ } else if (ch === 0x2d) {
+ (0, _util.warn)("Badly formatted number: minus sign in the middle");
+ } else if (ch === 0x45 || ch === 0x65) {
+ ch = this.peekChar();
+
+ if (ch === 0x2b || ch === 0x2d) {
+ powerValueSign = ch === 0x2d ? -1 : 1;
+ this.nextChar();
+ } else if (ch < 0x30 || ch > 0x39) {
+ break;
+ }
+
+ eNotation = true;
+ } else {
+ break;
+ }
+ }
+
+ if (divideBy !== 0) {
+ baseValue /= divideBy;
+ }
+
+ if (eNotation) {
+ baseValue *= 10 ** (powerValueSign * powerValue);
+ }
+
+ return sign * baseValue;
}
- function OpenTypeFileBuilder(sfnt) {
- this.sfnt = sfnt;
- this.tables = Object.create(null);
+ getString() {
+ let numParen = 1;
+ let done = false;
+ const strBuf = this.strBuf;
+ strBuf.length = 0;
+ let ch = this.nextChar();
+
+ while (true) {
+ let charBuffered = false;
+
+ switch (ch | 0) {
+ case -1:
+ (0, _util.warn)("Unterminated string");
+ done = true;
+ break;
+
+ case 0x28:
+ ++numParen;
+ strBuf.push("(");
+ break;
+
+ case 0x29:
+ if (--numParen === 0) {
+ this.nextChar();
+ done = true;
+ } else {
+ strBuf.push(")");
+ }
+
+ break;
+
+ case 0x5c:
+ ch = this.nextChar();
+
+ switch (ch) {
+ case -1:
+ (0, _util.warn)("Unterminated string");
+ done = true;
+ break;
+
+ case 0x6e:
+ strBuf.push("\n");
+ break;
+
+ case 0x72:
+ strBuf.push("\r");
+ break;
+
+ case 0x74:
+ strBuf.push("\t");
+ break;
+
+ case 0x62:
+ strBuf.push("\b");
+ break;
+
+ case 0x66:
+ strBuf.push("\f");
+ break;
+
+ case 0x5c:
+ case 0x28:
+ case 0x29:
+ strBuf.push(String.fromCharCode(ch));
+ break;
+
+ case 0x30:
+ case 0x31:
+ case 0x32:
+ case 0x33:
+ case 0x34:
+ case 0x35:
+ case 0x36:
+ case 0x37:
+ let x = ch & 0x0f;
+ ch = this.nextChar();
+ charBuffered = true;
+
+ if (ch >= 0x30 && ch <= 0x37) {
+ x = (x << 3) + (ch & 0x0f);
+ ch = this.nextChar();
+
+ if (ch >= 0x30 && ch <= 0x37) {
+ charBuffered = false;
+ x = (x << 3) + (ch & 0x0f);
+ }
+ }
+
+ strBuf.push(String.fromCharCode(x));
+ break;
+
+ case 0x0d:
+ if (this.peekChar() === 0x0a) {
+ this.nextChar();
+ }
+
+ break;
+
+ case 0x0a:
+ break;
+
+ default:
+ strBuf.push(String.fromCharCode(ch));
+ break;
+ }
+
+ break;
+
+ default:
+ strBuf.push(String.fromCharCode(ch));
+ break;
+ }
+
+ if (done) {
+ break;
+ }
+
+ if (!charBuffered) {
+ ch = this.nextChar();
+ }
+ }
+
+ return strBuf.join("");
}
- OpenTypeFileBuilder.getSearchParams = function OpenTypeFileBuilder_getSearchParams(entriesCount, entrySize) {
- var maxPower2 = 1,
- log2 = 0;
+ getName() {
+ let ch, previousCh;
+ const strBuf = this.strBuf;
+ strBuf.length = 0;
- while ((maxPower2 ^ entriesCount) > maxPower2) {
- maxPower2 <<= 1;
- log2++;
+ while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) {
+ if (ch === 0x23) {
+ ch = this.nextChar();
+
+ if (specialChars[ch]) {
+ (0, _util.warn)("Lexer_getName: " + "NUMBER SIGN (#) should be followed by a hexadecimal number.");
+ strBuf.push("#");
+ break;
+ }
+
+ const x = toHexDigit(ch);
+
+ if (x !== -1) {
+ previousCh = ch;
+ ch = this.nextChar();
+ const x2 = toHexDigit(ch);
+
+ if (x2 === -1) {
+ (0, _util.warn)(`Lexer_getName: Illegal digit (${String.fromCharCode(ch)}) ` + "in hexadecimal number.");
+ strBuf.push("#", String.fromCharCode(previousCh));
+
+ if (specialChars[ch]) {
+ break;
+ }
+
+ strBuf.push(String.fromCharCode(ch));
+ continue;
+ }
+
+ strBuf.push(String.fromCharCode(x << 4 | x2));
+ } else {
+ strBuf.push("#", String.fromCharCode(ch));
+ }
+ } else {
+ strBuf.push(String.fromCharCode(ch));
+ }
}
- var searchRange = maxPower2 * entrySize;
- return {
- range: searchRange,
- entry: log2,
- rangeShift: entrySize * entriesCount - searchRange
- };
- };
+ if (strBuf.length > 127) {
+ (0, _util.warn)(`Name token is longer than allowed by the spec: ${strBuf.length}`);
+ } else if (strBuf.length === 0) {
+ (0, _util.warn)("Name token is empty.");
+ }
+
+ return _primitives.Name.get(strBuf.join(""));
+ }
+
+ _hexStringWarn(ch) {
+ const MAX_HEX_STRING_NUM_WARN = 5;
+
+ if (this._hexStringNumWarn++ === MAX_HEX_STRING_NUM_WARN) {
+ (0, _util.warn)("getHexString - ignoring additional invalid characters.");
+ return;
+ }
+
+ if (this._hexStringNumWarn > MAX_HEX_STRING_NUM_WARN) {
+ return;
+ }
+
+ (0, _util.warn)(`getHexString - ignoring invalid character: ${ch}`);
+ }
+
+ getHexString() {
+ const strBuf = this.strBuf;
+ strBuf.length = 0;
+ let ch = this.currentChar;
+ let isFirstHex = true;
+ let firstDigit, secondDigit;
+ this._hexStringNumWarn = 0;
+
+ while (true) {
+ if (ch < 0) {
+ (0, _util.warn)("Unterminated hex string");
+ break;
+ } else if (ch === 0x3e) {
+ this.nextChar();
+ break;
+ } else if (specialChars[ch] === 1) {
+ ch = this.nextChar();
+ continue;
+ } else {
+ if (isFirstHex) {
+ firstDigit = toHexDigit(ch);
- var OTF_HEADER_SIZE = 12;
- var OTF_TABLE_ENTRY_SIZE = 16;
- OpenTypeFileBuilder.prototype = {
- toArray: function OpenTypeFileBuilder_toArray() {
- var sfnt = this.sfnt;
- var tables = this.tables;
- var tablesNames = Object.keys(tables);
- tablesNames.sort();
- var numTables = tablesNames.length;
- var i, j, jj, table, tableName;
- var offset = OTF_HEADER_SIZE + numTables * OTF_TABLE_ENTRY_SIZE;
- var tableOffsets = [offset];
+ if (firstDigit === -1) {
+ this._hexStringWarn(ch);
- for (i = 0; i < numTables; i++) {
- table = tables[tablesNames[i]];
- var paddedLength = (table.length + 3 & ~3) >>> 0;
- offset += paddedLength;
- tableOffsets.push(offset);
+ ch = this.nextChar();
+ continue;
+ }
+ } else {
+ secondDigit = toHexDigit(ch);
+
+ if (secondDigit === -1) {
+ this._hexStringWarn(ch);
+
+ ch = this.nextChar();
+ continue;
+ }
+
+ strBuf.push(String.fromCharCode(firstDigit << 4 | secondDigit));
+ }
+
+ isFirstHex = !isFirstHex;
+ ch = this.nextChar();
}
+ }
+
+ return strBuf.join("");
+ }
- var file = new Uint8Array(offset);
+ getObj() {
+ let comment = false;
+ let ch = this.currentChar;
- for (i = 0; i < numTables; i++) {
- table = tables[tablesNames[i]];
- writeData(file, tableOffsets[i], table);
+ while (true) {
+ if (ch < 0) {
+ return _primitives.EOF;
}
- if (sfnt === "true") {
- sfnt = (0, _util.string32)(0x00010000);
+ if (comment) {
+ if (ch === 0x0a || ch === 0x0d) {
+ comment = false;
+ }
+ } else if (ch === 0x25) {
+ comment = true;
+ } else if (specialChars[ch] !== 1) {
+ break;
}
- file[0] = sfnt.charCodeAt(0) & 0xff;
- file[1] = sfnt.charCodeAt(1) & 0xff;
- file[2] = sfnt.charCodeAt(2) & 0xff;
- file[3] = sfnt.charCodeAt(3) & 0xff;
- writeInt16(file, 4, numTables);
- var searchParams = OpenTypeFileBuilder.getSearchParams(numTables, 16);
- writeInt16(file, 6, searchParams.range);
- writeInt16(file, 8, searchParams.entry);
- writeInt16(file, 10, searchParams.rangeShift);
- offset = OTF_HEADER_SIZE;
+ ch = this.nextChar();
+ }
+
+ switch (ch | 0) {
+ case 0x30:
+ case 0x31:
+ case 0x32:
+ case 0x33:
+ case 0x34:
+ case 0x35:
+ case 0x36:
+ case 0x37:
+ case 0x38:
+ case 0x39:
+ case 0x2b:
+ case 0x2d:
+ case 0x2e:
+ return this.getNumber();
+
+ case 0x28:
+ return this.getString();
+
+ case 0x2f:
+ return this.getName();
+
+ case 0x5b:
+ this.nextChar();
+ return _primitives.Cmd.get("[");
+
+ case 0x5d:
+ this.nextChar();
+ return _primitives.Cmd.get("]");
+
+ case 0x3c:
+ ch = this.nextChar();
+
+ if (ch === 0x3c) {
+ this.nextChar();
+ return _primitives.Cmd.get("<<");
+ }
+
+ return this.getHexString();
- for (i = 0; i < numTables; i++) {
- tableName = tablesNames[i];
- file[offset] = tableName.charCodeAt(0) & 0xff;
- file[offset + 1] = tableName.charCodeAt(1) & 0xff;
- file[offset + 2] = tableName.charCodeAt(2) & 0xff;
- file[offset + 3] = tableName.charCodeAt(3) & 0xff;
- var checksum = 0;
+ case 0x3e:
+ ch = this.nextChar();
- for (j = tableOffsets[i], jj = tableOffsets[i + 1]; j < jj; j += 4) {
- var quad = (0, _core_utils.readUint32)(file, j);
- checksum = checksum + quad >>> 0;
+ if (ch === 0x3e) {
+ this.nextChar();
+ return _primitives.Cmd.get(">>");
}
- writeInt32(file, offset + 4, checksum);
- writeInt32(file, offset + 8, tableOffsets[i]);
- writeInt32(file, offset + 12, tables[tableName].length);
- offset += OTF_TABLE_ENTRY_SIZE;
+ return _primitives.Cmd.get(">");
+
+ case 0x7b:
+ this.nextChar();
+ return _primitives.Cmd.get("{");
+
+ case 0x7d:
+ this.nextChar();
+ return _primitives.Cmd.get("}");
+
+ case 0x29:
+ this.nextChar();
+ throw new _util.FormatError(`Illegal character: ${ch}`);
+ }
+
+ let str = String.fromCharCode(ch);
+ const knownCommands = this.knownCommands;
+ let knownCommandFound = knownCommands && knownCommands[str] !== undefined;
+
+ while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) {
+ const possibleCommand = str + String.fromCharCode(ch);
+
+ if (knownCommandFound && knownCommands[possibleCommand] === undefined) {
+ break;
}
- return file;
- },
- addTable: function OpenTypeFileBuilder_addTable(tag, data) {
- if (tag in this.tables) {
- throw new Error("Table " + tag + " already exists");
+ if (str.length === 128) {
+ throw new _util.FormatError(`Command token too long: ${str.length}`);
}
- this.tables[tag] = data;
+ str = possibleCommand;
+ knownCommandFound = knownCommands && knownCommands[str] !== undefined;
}
- };
- return OpenTypeFileBuilder;
-}();
-var Font = function FontClosure() {
- function Font(name, file, properties) {
- var charCode;
- this.name = name;
- this.loadedName = properties.loadedName;
- this.isType3Font = properties.isType3Font;
- this.missingFile = false;
- this.glyphCache = Object.create(null);
- this.isSerifFont = !!(properties.flags & FontFlags.Serif);
- this.isSymbolicFont = !!(properties.flags & FontFlags.Symbolic);
- this.isMonospace = !!(properties.flags & FontFlags.FixedPitch);
- var type = properties.type;
- var subtype = properties.subtype;
- this.type = type;
- this.subtype = subtype;
- let fallbackName = "sans-serif";
+ if (str === "true") {
+ return true;
+ }
- if (this.isMonospace) {
- fallbackName = "monospace";
- } else if (this.isSerifFont) {
- fallbackName = "serif";
+ if (str === "false") {
+ return false;
}
- this.fallbackName = fallbackName;
- this.differences = properties.differences;
- this.widths = properties.widths;
- this.defaultWidth = properties.defaultWidth;
- this.composite = properties.composite;
- this.cMap = properties.cMap;
- this.ascent = properties.ascent / PDF_GLYPH_SPACE_UNITS;
- this.descent = properties.descent / PDF_GLYPH_SPACE_UNITS;
- this.fontMatrix = properties.fontMatrix;
- this.bbox = properties.bbox;
- this.defaultEncoding = properties.defaultEncoding;
- this.toUnicode = properties.toUnicode;
- this.fallbackToUnicode = properties.fallbackToUnicode || new ToUnicodeMap();
- this.toFontChar = [];
+ if (str === "null") {
+ return null;
+ }
- if (properties.type === "Type3") {
- for (charCode = 0; charCode < 256; charCode++) {
- this.toFontChar[charCode] = this.differences[charCode] || properties.defaultEncoding[charCode];
+ if (str === "BI") {
+ this.beginInlineImagePos = this.stream.pos;
+ }
+
+ return _primitives.Cmd.get(str);
+ }
+
+ peekObj() {
+ const streamPos = this.stream.pos,
+ currentChar = this.currentChar,
+ beginInlineImagePos = this.beginInlineImagePos;
+ let nextObj;
+
+ try {
+ nextObj = this.getObj();
+ } catch (ex) {
+ if (ex instanceof _core_utils.MissingDataException) {
+ throw ex;
}
- this.fontType = _util.FontType.TYPE3;
- return;
+ (0, _util.warn)(`peekObj: ${ex}`);
}
- this.cidEncoding = properties.cidEncoding;
- this.vertical = !!properties.vertical;
+ this.stream.pos = streamPos;
+ this.currentChar = currentChar;
+ this.beginInlineImagePos = beginInlineImagePos;
+ return nextObj;
+ }
- if (this.vertical) {
- this.vmetrics = properties.vmetrics;
- this.defaultVMetrics = properties.defaultVMetrics;
+ skipToNextLine() {
+ let ch = this.currentChar;
+
+ while (ch >= 0) {
+ if (ch === 0x0d) {
+ ch = this.nextChar();
+
+ if (ch === 0x0a) {
+ this.nextChar();
+ }
+
+ break;
+ } else if (ch === 0x0a) {
+ this.nextChar();
+ break;
+ }
+
+ ch = this.nextChar();
}
+ }
- if (!file || file.isEmpty) {
- if (file) {
- (0, _util.warn)('Font file is empty in "' + name + '" (' + this.loadedName + ")");
+}
+
+exports.Lexer = Lexer;
+
+class Linearization {
+ static create(stream) {
+ function getInt(linDict, name, allowZeroValue = false) {
+ const obj = linDict.get(name);
+
+ if (Number.isInteger(obj) && (allowZeroValue ? obj >= 0 : obj > 0)) {
+ return obj;
}
- this.fallbackToSystemFont();
- return;
+ throw new Error(`The "${name}" parameter in the linearization ` + "dictionary is invalid.");
}
- [type, subtype] = getFontFileType(file, properties);
+ function getHints(linDict) {
+ const hints = linDict.get("H");
+ let hintsLength;
- if (type !== this.type || subtype !== this.subtype) {
- (0, _util.info)("Inconsistent font file Type/SubType, expected: " + `${this.type}/${this.subtype} but found: ${type}/${subtype}.`);
+ if (Array.isArray(hints) && ((hintsLength = hints.length) === 2 || hintsLength === 4)) {
+ for (let index = 0; index < hintsLength; index++) {
+ const hint = hints[index];
+
+ if (!(Number.isInteger(hint) && hint > 0)) {
+ throw new Error(`Hint (${index}) in the linearization dictionary is invalid.`);
+ }
+ }
+
+ return hints;
+ }
+
+ throw new Error("Hint array in the linearization dictionary is invalid.");
}
- try {
- var data;
+ const parser = new Parser({
+ lexer: new Lexer(stream),
+ xref: null
+ });
+ const obj1 = parser.getObj();
+ const obj2 = parser.getObj();
+ const obj3 = parser.getObj();
+ const linDict = parser.getObj();
+ let obj, length;
- switch (type) {
- case "MMType1":
- (0, _util.info)("MMType1 font (" + name + "), falling back to Type1.");
+ if (!(Number.isInteger(obj1) && Number.isInteger(obj2) && (0, _primitives.isCmd)(obj3, "obj") && (0, _primitives.isDict)(linDict) && (0, _util.isNum)(obj = linDict.get("Linearized")) && obj > 0)) {
+ return null;
+ } else if ((length = getInt(linDict, "L")) !== stream.length) {
+ throw new Error('The "L" parameter in the linearization dictionary ' + "does not equal the stream length.");
+ }
- case "Type1":
- case "CIDFontType0":
- this.mimetype = "font/opentype";
- var cff = subtype === "Type1C" || subtype === "CIDFontType0C" ? new CFFFont(file, properties) : new Type1Font(name, file, properties);
- adjustWidths(properties);
- data = this.convert(name, cff, properties);
- break;
+ return {
+ length,
+ hints: getHints(linDict),
+ objectNumberFirst: getInt(linDict, "O"),
+ endFirst: getInt(linDict, "E"),
+ numPages: getInt(linDict, "N"),
+ mainXRefEntriesOffset: getInt(linDict, "T"),
+ pageFirst: linDict.has("P") ? getInt(linDict, "P", true) : 0
+ };
+ }
- case "OpenType":
- case "TrueType":
- case "CIDFontType2":
- this.mimetype = "font/opentype";
- data = this.checkAndRepair(name, file, properties);
+}
- if (this.isOpenType) {
- adjustWidths(properties);
- type = "OpenType";
- }
+exports.Linearization = Linearization;
+
+/***/ }),
+/* 18 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.Ascii85Stream = void 0;
+
+var _decode_stream = __w_pdfjs_require__(19);
+
+var _core_utils = __w_pdfjs_require__(9);
+
+class Ascii85Stream extends _decode_stream.DecodeStream {
+ constructor(str, maybeLength) {
+ if (maybeLength) {
+ maybeLength *= 0.8;
+ }
+
+ super(maybeLength);
+ this.str = str;
+ this.dict = str.dict;
+ this.input = new Uint8Array(5);
+ }
+
+ readBlock() {
+ const TILDA_CHAR = 0x7e;
+ const Z_LOWER_CHAR = 0x7a;
+ const EOF = -1;
+ const str = this.str;
+ let c = str.getByte();
+
+ while ((0, _core_utils.isWhiteSpace)(c)) {
+ c = str.getByte();
+ }
+
+ if (c === EOF || c === TILDA_CHAR) {
+ this.eof = true;
+ return;
+ }
+
+ const bufferLength = this.bufferLength;
+ let buffer, i;
+
+ if (c === Z_LOWER_CHAR) {
+ buffer = this.ensureBuffer(bufferLength + 4);
+
+ for (i = 0; i < 4; ++i) {
+ buffer[bufferLength + i] = 0;
+ }
+
+ this.bufferLength += 4;
+ } else {
+ const input = this.input;
+ input[0] = c;
+
+ for (i = 1; i < 5; ++i) {
+ c = str.getByte();
+
+ while ((0, _core_utils.isWhiteSpace)(c)) {
+ c = str.getByte();
+ }
+
+ input[i] = c;
+ if (c === EOF || c === TILDA_CHAR) {
break;
+ }
+ }
- default:
- throw new _util.FormatError(`Font ${type} is not supported`);
+ buffer = this.ensureBuffer(bufferLength + i - 1);
+ this.bufferLength += i - 1;
+
+ if (i < 5) {
+ for (; i < 5; ++i) {
+ input[i] = 0x21 + 84;
+ }
+
+ this.eof = true;
+ }
+
+ let t = 0;
+
+ for (i = 0; i < 5; ++i) {
+ t = t * 85 + (input[i] - 0x21);
+ }
+
+ for (i = 3; i >= 0; --i) {
+ buffer[bufferLength + i] = t & 0xff;
+ t >>= 8;
}
- } catch (e) {
- (0, _util.warn)(e);
- this.fallbackToSystemFont();
- return;
}
+ }
- this.data = data;
- this.fontType = getFontType(type, subtype);
- this.fontMatrix = properties.fontMatrix;
- this.widths = properties.widths;
- this.defaultWidth = properties.defaultWidth;
- this.toUnicode = properties.toUnicode;
- this.seacMap = properties.seacMap;
+}
+
+exports.Ascii85Stream = Ascii85Stream;
+
+/***/ }),
+/* 19 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.StreamsSequenceStream = exports.DecodeStream = void 0;
+
+var _base_stream = __w_pdfjs_require__(6);
+
+var _stream = __w_pdfjs_require__(10);
+
+const emptyBuffer = new Uint8Array(0);
+
+class DecodeStream extends _base_stream.BaseStream {
+ constructor(maybeMinBufferLength) {
+ super();
+ this._rawMinBufferLength = maybeMinBufferLength || 0;
+ this.pos = 0;
+ this.bufferLength = 0;
+ this.eof = false;
+ this.buffer = emptyBuffer;
+ this.minBufferLength = 512;
+
+ if (maybeMinBufferLength) {
+ while (this.minBufferLength < maybeMinBufferLength) {
+ this.minBufferLength *= 2;
+ }
+ }
}
- function int16(b0, b1) {
- return (b0 << 8) + b1;
+ get isEmpty() {
+ while (!this.eof && this.bufferLength === 0) {
+ this.readBlock();
+ }
+
+ return this.bufferLength === 0;
}
- function writeSignedInt16(bytes, index, value) {
- bytes[index + 1] = value;
- bytes[index] = value >>> 8;
+ ensureBuffer(requested) {
+ const buffer = this.buffer;
+
+ if (requested <= buffer.byteLength) {
+ return buffer;
+ }
+
+ let size = this.minBufferLength;
+
+ while (size < requested) {
+ size *= 2;
+ }
+
+ const buffer2 = new Uint8Array(size);
+ buffer2.set(buffer);
+ return this.buffer = buffer2;
}
- function signedInt16(b0, b1) {
- var value = (b0 << 8) + b1;
- return value & 1 << 15 ? value - 0x10000 : value;
+ getByte() {
+ const pos = this.pos;
+
+ while (this.bufferLength <= pos) {
+ if (this.eof) {
+ return -1;
+ }
+
+ this.readBlock();
+ }
+
+ return this.buffer[this.pos++];
}
- function int32(b0, b1, b2, b3) {
- return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;
+ getBytes(length, forceClamped = false) {
+ const pos = this.pos;
+ let end;
+
+ if (length) {
+ this.ensureBuffer(pos + length);
+ end = pos + length;
+
+ while (!this.eof && this.bufferLength < end) {
+ this.readBlock();
+ }
+
+ const bufEnd = this.bufferLength;
+
+ if (end > bufEnd) {
+ end = bufEnd;
+ }
+ } else {
+ while (!this.eof) {
+ this.readBlock();
+ }
+
+ end = this.bufferLength;
+ }
+
+ this.pos = end;
+ const subarray = this.buffer.subarray(pos, end);
+ return forceClamped && !(subarray instanceof Uint8ClampedArray) ? new Uint8ClampedArray(subarray) : subarray;
}
- function string16(value) {
- return String.fromCharCode(value >> 8 & 0xff, value & 0xff);
+ reset() {
+ this.pos = 0;
}
- function safeString16(value) {
- if (value > 0x7fff) {
- value = 0x7fff;
- } else if (value < -0x8000) {
- value = -0x8000;
+ makeSubStream(start, length, dict = null) {
+ if (length === undefined) {
+ while (!this.eof) {
+ this.readBlock();
+ }
+ } else {
+ const end = start + length;
+
+ while (this.bufferLength <= end && !this.eof) {
+ this.readBlock();
+ }
}
- return String.fromCharCode(value >> 8 & 0xff, value & 0xff);
+ return new _stream.Stream(this.buffer, start, length, dict);
}
- function isTrueTypeFile(file) {
- var header = file.peekBytes(4);
- return (0, _core_utils.readUint32)(header, 0) === 0x00010000 || (0, _util.bytesToString)(header) === "true";
+ getBaseStreams() {
+ return this.str ? this.str.getBaseStreams() : null;
}
- function isTrueTypeCollectionFile(file) {
- const header = file.peekBytes(4);
- return (0, _util.bytesToString)(header) === "ttcf";
- }
+}
- function isOpenTypeFile(file) {
- var header = file.peekBytes(4);
- return (0, _util.bytesToString)(header) === "OTTO";
+exports.DecodeStream = DecodeStream;
+
+class StreamsSequenceStream extends DecodeStream {
+ constructor(streams) {
+ let maybeLength = 0;
+
+ for (const stream of streams) {
+ maybeLength += stream instanceof DecodeStream ? stream._rawMinBufferLength : stream.length;
+ }
+
+ super(maybeLength);
+ this.streams = streams;
}
- function isType1File(file) {
- var header = file.peekBytes(2);
+ readBlock() {
+ const streams = this.streams;
- if (header[0] === 0x25 && header[1] === 0x21) {
- return true;
+ if (streams.length === 0) {
+ this.eof = true;
+ return;
}
- if (header[0] === 0x80 && header[1] === 0x01) {
- return true;
+ const stream = streams.shift();
+ const chunk = stream.getBytes();
+ const bufferLength = this.bufferLength;
+ const newLength = bufferLength + chunk.length;
+ const buffer = this.ensureBuffer(newLength);
+ buffer.set(chunk, bufferLength);
+ this.bufferLength = newLength;
+ }
+
+ getBaseStreams() {
+ const baseStreamsBuf = [];
+
+ for (const stream of this.streams) {
+ const baseStreams = stream.getBaseStreams();
+
+ if (baseStreams) {
+ baseStreamsBuf.push(...baseStreams);
+ }
}
- return false;
+ return baseStreamsBuf.length > 0 ? baseStreamsBuf : null;
}
- function isCFFFile(file) {
- const header = file.peekBytes(4);
+}
- if (header[0] >= 1 && header[3] >= 1 && header[3] <= 4) {
- return true;
+exports.StreamsSequenceStream = StreamsSequenceStream;
+
+/***/ }),
+/* 20 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.AsciiHexStream = void 0;
+
+var _decode_stream = __w_pdfjs_require__(19);
+
+class AsciiHexStream extends _decode_stream.DecodeStream {
+ constructor(str, maybeLength) {
+ if (maybeLength) {
+ maybeLength *= 0.5;
}
- return false;
+ super(maybeLength);
+ this.str = str;
+ this.dict = str.dict;
+ this.firstDigit = -1;
}
- function getFontFileType(file, {
- type,
- subtype,
- composite
- }) {
- let fileType, fileSubtype;
+ readBlock() {
+ const UPSTREAM_BLOCK_SIZE = 8000;
+ const bytes = this.str.getBytes(UPSTREAM_BLOCK_SIZE);
- if (isTrueTypeFile(file) || isTrueTypeCollectionFile(file)) {
- if (composite) {
- fileType = "CIDFontType2";
+ if (!bytes.length) {
+ this.eof = true;
+ return;
+ }
+
+ const maxDecodeLength = bytes.length + 1 >> 1;
+ const buffer = this.ensureBuffer(this.bufferLength + maxDecodeLength);
+ let bufferLength = this.bufferLength;
+ let firstDigit = this.firstDigit;
+
+ for (const ch of bytes) {
+ let digit;
+
+ if (ch >= 0x30 && ch <= 0x39) {
+ digit = ch & 0x0f;
+ } else if (ch >= 0x41 && ch <= 0x46 || ch >= 0x61 && ch <= 0x66) {
+ digit = (ch & 0x0f) + 9;
+ } else if (ch === 0x3e) {
+ this.eof = true;
+ break;
} else {
- fileType = "TrueType";
+ continue;
}
- } else if (isOpenTypeFile(file)) {
- if (composite) {
- fileType = "CIDFontType2";
+
+ if (firstDigit < 0) {
+ firstDigit = digit;
} else {
- fileType = "OpenType";
+ buffer[bufferLength++] = firstDigit << 4 | digit;
+ firstDigit = -1;
}
- } else if (isType1File(file)) {
- if (composite) {
- fileType = "CIDFontType0";
+ }
+
+ if (firstDigit >= 0 && this.eof) {
+ buffer[bufferLength++] = firstDigit << 4;
+ firstDigit = -1;
+ }
+
+ this.firstDigit = firstDigit;
+ this.bufferLength = bufferLength;
+ }
+
+}
+
+exports.AsciiHexStream = AsciiHexStream;
+
+/***/ }),
+/* 21 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.CCITTFaxStream = void 0;
+
+var _primitives = __w_pdfjs_require__(5);
+
+var _ccitt = __w_pdfjs_require__(22);
+
+var _decode_stream = __w_pdfjs_require__(19);
+
+class CCITTFaxStream extends _decode_stream.DecodeStream {
+ constructor(str, maybeLength, params) {
+ super(maybeLength);
+ this.str = str;
+ this.dict = str.dict;
+
+ if (!(0, _primitives.isDict)(params)) {
+ params = _primitives.Dict.empty;
+ }
+
+ const source = {
+ next() {
+ return str.getByte();
+ }
+
+ };
+ this.ccittFaxDecoder = new _ccitt.CCITTFaxDecoder(source, {
+ K: params.get("K"),
+ EndOfLine: params.get("EndOfLine"),
+ EncodedByteAlign: params.get("EncodedByteAlign"),
+ Columns: params.get("Columns"),
+ Rows: params.get("Rows"),
+ EndOfBlock: params.get("EndOfBlock"),
+ BlackIs1: params.get("BlackIs1")
+ });
+ }
+
+ readBlock() {
+ while (!this.eof) {
+ const c = this.ccittFaxDecoder.readNextChar();
+
+ if (c === -1) {
+ this.eof = true;
+ return;
+ }
+
+ this.ensureBuffer(this.bufferLength + 1);
+ this.buffer[this.bufferLength++] = c;
+ }
+ }
+
+}
+
+exports.CCITTFaxStream = CCITTFaxStream;
+
+/***/ }),
+/* 22 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.CCITTFaxDecoder = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+const ccittEOL = -2;
+const ccittEOF = -1;
+const twoDimPass = 0;
+const twoDimHoriz = 1;
+const twoDimVert0 = 2;
+const twoDimVertR1 = 3;
+const twoDimVertL1 = 4;
+const twoDimVertR2 = 5;
+const twoDimVertL2 = 6;
+const twoDimVertR3 = 7;
+const twoDimVertL3 = 8;
+const twoDimTable = [[-1, -1], [-1, -1], [7, twoDimVertL3], [7, twoDimVertR3], [6, twoDimVertL2], [6, twoDimVertL2], [6, twoDimVertR2], [6, twoDimVertR2], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0]];
+const whiteTable1 = [[-1, -1], [12, ccittEOL], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [11, 1792], [11, 1792], [12, 1984], [12, 2048], [12, 2112], [12, 2176], [12, 2240], [12, 2304], [11, 1856], [11, 1856], [11, 1920], [11, 1920], [12, 2368], [12, 2432], [12, 2496], [12, 2560]];
+const whiteTable2 = [[-1, -1], [-1, -1], [-1, -1], [-1, -1], [8, 29], [8, 29], [8, 30], [8, 30], [8, 45], [8, 45], [8, 46], [8, 46], [7, 22], [7, 22], [7, 22], [7, 22], [7, 23], [7, 23], [7, 23], [7, 23], [8, 47], [8, 47], [8, 48], [8, 48], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [7, 20], [7, 20], [7, 20], [7, 20], [8, 33], [8, 33], [8, 34], [8, 34], [8, 35], [8, 35], [8, 36], [8, 36], [8, 37], [8, 37], [8, 38], [8, 38], [7, 19], [7, 19], [7, 19], [7, 19], [8, 31], [8, 31], [8, 32], [8, 32], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [8, 53], [8, 53], [8, 54], [8, 54], [7, 26], [7, 26], [7, 26], [7, 26], [8, 39], [8, 39], [8, 40], [8, 40], [8, 41], [8, 41], [8, 42], [8, 42], [8, 43], [8, 43], [8, 44], [8, 44], [7, 21], [7, 21], [7, 21], [7, 21], [7, 28], [7, 28], [7, 28], [7, 28], [8, 61], [8, 61], [8, 62], [8, 62], [8, 63], [8, 63], [8, 0], [8, 0], [8, 320], [8, 320], [8, 384], [8, 384], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [7, 27], [7, 27], [7, 27], [7, 27], [8, 59], [8, 59], [8, 60], [8, 60], [9, 1472], [9, 1536], [9, 1600], [9, 1728], [7, 18], [7, 18], [7, 18], [7, 18], [7, 24], [7, 24], [7, 24], [7, 24], [8, 49], [8, 49], [8, 50], [8, 50], [8, 51], [8, 51], [8, 52], [8, 52], [7, 25], [7, 25], [7, 25], [7, 25], [8, 55], [8, 55], [8, 56], [8, 56], [8, 57], [8, 57], [8, 58], [8, 58], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [8, 448], [8, 448], [8, 512], [8, 512], [9, 704], [9, 768], [8, 640], [8, 640], [8, 576], [8, 576], [9, 832], [9, 896], [9, 960], [9, 1024], [9, 1088], [9, 1152], [9, 1216], [9, 1280], [9, 1344], [9, 1408], [7, 256], [7, 256], [7, 256], [7, 256], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7]];
+const blackTable1 = [[-1, -1], [-1, -1], [12, ccittEOL], [12, ccittEOL], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [11, 1792], [11, 1792], [11, 1792], [11, 1792], [12, 1984], [12, 1984], [12, 2048], [12, 2048], [12, 2112], [12, 2112], [12, 2176], [12, 2176], [12, 2240], [12, 2240], [12, 2304], [12, 2304], [11, 1856], [11, 1856], [11, 1856], [11, 1856], [11, 1920], [11, 1920], [11, 1920], [11, 1920], [12, 2368], [12, 2368], [12, 2432], [12, 2432], [12, 2496], [12, 2496], [12, 2560], [12, 2560], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [12, 52], [12, 52], [13, 640], [13, 704], [13, 768], [13, 832], [12, 55], [12, 55], [12, 56], [12, 56], [13, 1280], [13, 1344], [13, 1408], [13, 1472], [12, 59], [12, 59], [12, 60], [12, 60], [13, 1536], [13, 1600], [11, 24], [11, 24], [11, 24], [11, 24], [11, 25], [11, 25], [11, 25], [11, 25], [13, 1664], [13, 1728], [12, 320], [12, 320], [12, 384], [12, 384], [12, 448], [12, 448], [13, 512], [13, 576], [12, 53], [12, 53], [12, 54], [12, 54], [13, 896], [13, 960], [13, 1024], [13, 1088], [13, 1152], [13, 1216], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64]];
+const blackTable2 = [[8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [11, 23], [11, 23], [12, 50], [12, 51], [12, 44], [12, 45], [12, 46], [12, 47], [12, 57], [12, 58], [12, 61], [12, 256], [10, 16], [10, 16], [10, 16], [10, 16], [10, 17], [10, 17], [10, 17], [10, 17], [12, 48], [12, 49], [12, 62], [12, 63], [12, 30], [12, 31], [12, 32], [12, 33], [12, 40], [12, 41], [11, 22], [11, 22], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [12, 128], [12, 192], [12, 26], [12, 27], [12, 28], [12, 29], [11, 19], [11, 19], [11, 20], [11, 20], [12, 34], [12, 35], [12, 36], [12, 37], [12, 38], [12, 39], [11, 21], [11, 21], [12, 42], [12, 43], [10, 0], [10, 0], [10, 0], [10, 0], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12]];
+const blackTable3 = [[-1, -1], [-1, -1], [-1, -1], [-1, -1], [6, 9], [6, 8], [5, 7], [5, 7], [4, 6], [4, 6], [4, 6], [4, 6], [4, 5], [4, 5], [4, 5], [4, 5], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2]];
+
+class CCITTFaxDecoder {
+ constructor(source, options = {}) {
+ if (!source || typeof source.next !== "function") {
+ throw new Error('CCITTFaxDecoder - invalid "source" parameter.');
+ }
+
+ this.source = source;
+ this.eof = false;
+ this.encoding = options.K || 0;
+ this.eoline = options.EndOfLine || false;
+ this.byteAlign = options.EncodedByteAlign || false;
+ this.columns = options.Columns || 1728;
+ this.rows = options.Rows || 0;
+ let eoblock = options.EndOfBlock;
+
+ if (eoblock === null || eoblock === undefined) {
+ eoblock = true;
+ }
+
+ this.eoblock = eoblock;
+ this.black = options.BlackIs1 || false;
+ this.codingLine = new Uint32Array(this.columns + 1);
+ this.refLine = new Uint32Array(this.columns + 2);
+ this.codingLine[0] = this.columns;
+ this.codingPos = 0;
+ this.row = 0;
+ this.nextLine2D = this.encoding < 0;
+ this.inputBits = 0;
+ this.inputBuf = 0;
+ this.outputBits = 0;
+ this.rowsDone = false;
+ let code1;
+
+ while ((code1 = this._lookBits(12)) === 0) {
+ this._eatBits(1);
+ }
+
+ if (code1 === 1) {
+ this._eatBits(12);
+ }
+
+ if (this.encoding > 0) {
+ this.nextLine2D = !this._lookBits(1);
+
+ this._eatBits(1);
+ }
+ }
+
+ readNextChar() {
+ if (this.eof) {
+ return -1;
+ }
+
+ const refLine = this.refLine;
+ const codingLine = this.codingLine;
+ const columns = this.columns;
+ let refPos, blackPixels, bits, i;
+
+ if (this.outputBits === 0) {
+ if (this.rowsDone) {
+ this.eof = true;
+ }
+
+ if (this.eof) {
+ return -1;
+ }
+
+ this.err = false;
+ let code1, code2, code3;
+
+ if (this.nextLine2D) {
+ for (i = 0; codingLine[i] < columns; ++i) {
+ refLine[i] = codingLine[i];
+ }
+
+ refLine[i++] = columns;
+ refLine[i] = columns;
+ codingLine[0] = 0;
+ this.codingPos = 0;
+ refPos = 0;
+ blackPixels = 0;
+
+ while (codingLine[this.codingPos] < columns) {
+ code1 = this._getTwoDimCode();
+
+ switch (code1) {
+ case twoDimPass:
+ this._addPixels(refLine[refPos + 1], blackPixels);
+
+ if (refLine[refPos + 1] < columns) {
+ refPos += 2;
+ }
+
+ break;
+
+ case twoDimHoriz:
+ code1 = code2 = 0;
+
+ if (blackPixels) {
+ do {
+ code1 += code3 = this._getBlackCode();
+ } while (code3 >= 64);
+
+ do {
+ code2 += code3 = this._getWhiteCode();
+ } while (code3 >= 64);
+ } else {
+ do {
+ code1 += code3 = this._getWhiteCode();
+ } while (code3 >= 64);
+
+ do {
+ code2 += code3 = this._getBlackCode();
+ } while (code3 >= 64);
+ }
+
+ this._addPixels(codingLine[this.codingPos] + code1, blackPixels);
+
+ if (codingLine[this.codingPos] < columns) {
+ this._addPixels(codingLine[this.codingPos] + code2, blackPixels ^ 1);
+ }
+
+ while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
+ refPos += 2;
+ }
+
+ break;
+
+ case twoDimVertR3:
+ this._addPixels(refLine[refPos] + 3, blackPixels);
+
+ blackPixels ^= 1;
+
+ if (codingLine[this.codingPos] < columns) {
+ ++refPos;
+
+ while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
+ refPos += 2;
+ }
+ }
+
+ break;
+
+ case twoDimVertR2:
+ this._addPixels(refLine[refPos] + 2, blackPixels);
+
+ blackPixels ^= 1;
+
+ if (codingLine[this.codingPos] < columns) {
+ ++refPos;
+
+ while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
+ refPos += 2;
+ }
+ }
+
+ break;
+
+ case twoDimVertR1:
+ this._addPixels(refLine[refPos] + 1, blackPixels);
+
+ blackPixels ^= 1;
+
+ if (codingLine[this.codingPos] < columns) {
+ ++refPos;
+
+ while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
+ refPos += 2;
+ }
+ }
+
+ break;
+
+ case twoDimVert0:
+ this._addPixels(refLine[refPos], blackPixels);
+
+ blackPixels ^= 1;
+
+ if (codingLine[this.codingPos] < columns) {
+ ++refPos;
+
+ while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
+ refPos += 2;
+ }
+ }
+
+ break;
+
+ case twoDimVertL3:
+ this._addPixelsNeg(refLine[refPos] - 3, blackPixels);
+
+ blackPixels ^= 1;
+
+ if (codingLine[this.codingPos] < columns) {
+ if (refPos > 0) {
+ --refPos;
+ } else {
+ ++refPos;
+ }
+
+ while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
+ refPos += 2;
+ }
+ }
+
+ break;
+
+ case twoDimVertL2:
+ this._addPixelsNeg(refLine[refPos] - 2, blackPixels);
+
+ blackPixels ^= 1;
+
+ if (codingLine[this.codingPos] < columns) {
+ if (refPos > 0) {
+ --refPos;
+ } else {
+ ++refPos;
+ }
+
+ while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
+ refPos += 2;
+ }
+ }
+
+ break;
+
+ case twoDimVertL1:
+ this._addPixelsNeg(refLine[refPos] - 1, blackPixels);
+
+ blackPixels ^= 1;
+
+ if (codingLine[this.codingPos] < columns) {
+ if (refPos > 0) {
+ --refPos;
+ } else {
+ ++refPos;
+ }
+
+ while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) {
+ refPos += 2;
+ }
+ }
+
+ break;
+
+ case ccittEOF:
+ this._addPixels(columns, 0);
+
+ this.eof = true;
+ break;
+
+ default:
+ (0, _util.info)("bad 2d code");
+
+ this._addPixels(columns, 0);
+
+ this.err = true;
+ }
+ }
} else {
- fileType = type === "MMType1" ? "MMType1" : "Type1";
+ codingLine[0] = 0;
+ this.codingPos = 0;
+ blackPixels = 0;
+
+ while (codingLine[this.codingPos] < columns) {
+ code1 = 0;
+
+ if (blackPixels) {
+ do {
+ code1 += code3 = this._getBlackCode();
+ } while (code3 >= 64);
+ } else {
+ do {
+ code1 += code3 = this._getWhiteCode();
+ } while (code3 >= 64);
+ }
+
+ this._addPixels(codingLine[this.codingPos] + code1, blackPixels);
+
+ blackPixels ^= 1;
+ }
}
- } else if (isCFFFile(file)) {
- if (composite) {
- fileType = "CIDFontType0";
- fileSubtype = "CIDFontType0C";
+
+ let gotEOL = false;
+
+ if (this.byteAlign) {
+ this.inputBits &= ~7;
+ }
+
+ if (!this.eoblock && this.row === this.rows - 1) {
+ this.rowsDone = true;
} else {
- fileType = type === "MMType1" ? "MMType1" : "Type1";
- fileSubtype = "Type1C";
+ code1 = this._lookBits(12);
+
+ if (this.eoline) {
+ while (code1 !== ccittEOF && code1 !== 1) {
+ this._eatBits(1);
+
+ code1 = this._lookBits(12);
+ }
+ } else {
+ while (code1 === 0) {
+ this._eatBits(1);
+
+ code1 = this._lookBits(12);
+ }
+ }
+
+ if (code1 === 1) {
+ this._eatBits(12);
+
+ gotEOL = true;
+ } else if (code1 === ccittEOF) {
+ this.eof = true;
+ }
+ }
+
+ if (!this.eof && this.encoding > 0 && !this.rowsDone) {
+ this.nextLine2D = !this._lookBits(1);
+
+ this._eatBits(1);
+ }
+
+ if (this.eoblock && gotEOL && this.byteAlign) {
+ code1 = this._lookBits(12);
+
+ if (code1 === 1) {
+ this._eatBits(12);
+
+ if (this.encoding > 0) {
+ this._lookBits(1);
+
+ this._eatBits(1);
+ }
+
+ if (this.encoding >= 0) {
+ for (i = 0; i < 4; ++i) {
+ code1 = this._lookBits(12);
+
+ if (code1 !== 1) {
+ (0, _util.info)("bad rtc code: " + code1);
+ }
+
+ this._eatBits(12);
+
+ if (this.encoding > 0) {
+ this._lookBits(1);
+
+ this._eatBits(1);
+ }
+ }
+ }
+
+ this.eof = true;
+ }
+ } else if (this.err && this.eoline) {
+ while (true) {
+ code1 = this._lookBits(13);
+
+ if (code1 === ccittEOF) {
+ this.eof = true;
+ return -1;
+ }
+
+ if (code1 >> 1 === 1) {
+ break;
+ }
+
+ this._eatBits(1);
+ }
+
+ this._eatBits(12);
+
+ if (this.encoding > 0) {
+ this._eatBits(1);
+
+ this.nextLine2D = !(code1 & 1);
+ }
+ }
+
+ if (codingLine[0] > 0) {
+ this.outputBits = codingLine[this.codingPos = 0];
+ } else {
+ this.outputBits = codingLine[this.codingPos = 1];
+ }
+
+ this.row++;
+ }
+
+ let c;
+
+ if (this.outputBits >= 8) {
+ c = this.codingPos & 1 ? 0 : 0xff;
+ this.outputBits -= 8;
+
+ if (this.outputBits === 0 && codingLine[this.codingPos] < columns) {
+ this.codingPos++;
+ this.outputBits = codingLine[this.codingPos] - codingLine[this.codingPos - 1];
}
} else {
- (0, _util.warn)("getFontFileType: Unable to detect correct font file Type/Subtype.");
- fileType = type;
- fileSubtype = subtype;
+ bits = 8;
+ c = 0;
+
+ do {
+ if (this.outputBits > bits) {
+ c <<= bits;
+
+ if (!(this.codingPos & 1)) {
+ c |= 0xff >> 8 - bits;
+ }
+
+ this.outputBits -= bits;
+ bits = 0;
+ } else {
+ c <<= this.outputBits;
+
+ if (!(this.codingPos & 1)) {
+ c |= 0xff >> 8 - this.outputBits;
+ }
+
+ bits -= this.outputBits;
+ this.outputBits = 0;
+
+ if (codingLine[this.codingPos] < columns) {
+ this.codingPos++;
+ this.outputBits = codingLine[this.codingPos] - codingLine[this.codingPos - 1];
+ } else if (bits > 0) {
+ c <<= bits;
+ bits = 0;
+ }
+ }
+ } while (bits);
+ }
+
+ if (this.black) {
+ c ^= 0xff;
}
- return [fileType, fileSubtype];
+ return c;
}
- function buildToFontChar(encoding, glyphsUnicodeMap, differences) {
- var toFontChar = [],
- unicode;
+ _addPixels(a1, blackPixels) {
+ const codingLine = this.codingLine;
+ let codingPos = this.codingPos;
- for (var i = 0, ii = encoding.length; i < ii; i++) {
- unicode = (0, _unicode.getUnicodeForGlyph)(encoding[i], glyphsUnicodeMap);
+ if (a1 > codingLine[codingPos]) {
+ if (a1 > this.columns) {
+ (0, _util.info)("row is wrong length");
+ this.err = true;
+ a1 = this.columns;
+ }
- if (unicode !== -1) {
- toFontChar[i] = unicode;
+ if (codingPos & 1 ^ blackPixels) {
+ ++codingPos;
}
+
+ codingLine[codingPos] = a1;
}
- for (var charCode in differences) {
- unicode = (0, _unicode.getUnicodeForGlyph)(differences[charCode], glyphsUnicodeMap);
+ this.codingPos = codingPos;
+ }
+
+ _addPixelsNeg(a1, blackPixels) {
+ const codingLine = this.codingLine;
+ let codingPos = this.codingPos;
- if (unicode !== -1) {
- toFontChar[+charCode] = unicode;
+ if (a1 > codingLine[codingPos]) {
+ if (a1 > this.columns) {
+ (0, _util.info)("row is wrong length");
+ this.err = true;
+ a1 = this.columns;
}
+
+ if (codingPos & 1 ^ blackPixels) {
+ ++codingPos;
+ }
+
+ codingLine[codingPos] = a1;
+ } else if (a1 < codingLine[codingPos]) {
+ if (a1 < 0) {
+ (0, _util.info)("invalid code");
+ this.err = true;
+ a1 = 0;
+ }
+
+ while (codingPos > 0 && a1 < codingLine[codingPos - 1]) {
+ --codingPos;
+ }
+
+ codingLine[codingPos] = a1;
}
- return toFontChar;
+ this.codingPos = codingPos;
}
- function adjustMapping(charCodeToGlyphId, hasGlyph, newGlyphZeroId) {
- var newMap = Object.create(null);
- var toFontChar = [];
- var privateUseAreaIndex = 0;
- var nextAvailableFontCharCode = PRIVATE_USE_AREAS[privateUseAreaIndex][0];
- var privateUseOffetEnd = PRIVATE_USE_AREAS[privateUseAreaIndex][1];
+ _findTableCode(start, end, table, limit) {
+ const limitValue = limit || 0;
- for (var originalCharCode in charCodeToGlyphId) {
- originalCharCode |= 0;
- var glyphId = charCodeToGlyphId[originalCharCode];
+ for (let i = start; i <= end; ++i) {
+ let code = this._lookBits(i);
- if (!hasGlyph(glyphId)) {
- continue;
+ if (code === ccittEOF) {
+ return [true, 1, false];
}
- if (nextAvailableFontCharCode > privateUseOffetEnd) {
- privateUseAreaIndex++;
+ if (i < end) {
+ code <<= end - i;
+ }
- if (privateUseAreaIndex >= PRIVATE_USE_AREAS.length) {
- (0, _util.warn)("Ran out of space in font private use area.");
- break;
- }
+ if (!limitValue || code >= limitValue) {
+ const p = table[code - limitValue];
+
+ if (p[0] === i) {
+ this._eatBits(i);
- nextAvailableFontCharCode = PRIVATE_USE_AREAS[privateUseAreaIndex][0];
- privateUseOffetEnd = PRIVATE_USE_AREAS[privateUseAreaIndex][1];
+ return [true, p[1], true];
+ }
}
+ }
+
+ return [false, 0, false];
+ }
- var fontCharCode = nextAvailableFontCharCode++;
+ _getTwoDimCode() {
+ let code = 0;
+ let p;
- if (glyphId === 0) {
- glyphId = newGlyphZeroId;
+ if (this.eoblock) {
+ code = this._lookBits(7);
+ p = twoDimTable[code];
+
+ if (p && p[0] > 0) {
+ this._eatBits(p[0]);
+
+ return p[1];
}
+ } else {
+ const result = this._findTableCode(1, 7, twoDimTable);
- newMap[fontCharCode] = glyphId;
- toFontChar[originalCharCode] = fontCharCode;
+ if (result[0] && result[2]) {
+ return result[1];
+ }
}
- return {
- toFontChar,
- charCodeToGlyphId: newMap,
- nextAvailableFontCharCode
- };
+ (0, _util.info)("Bad two dim code");
+ return ccittEOF;
}
- function getRanges(glyphs, numGlyphs) {
- var codes = [];
+ _getWhiteCode() {
+ let code = 0;
+ let p;
- for (var charCode in glyphs) {
- if (glyphs[charCode] >= numGlyphs) {
- continue;
+ if (this.eoblock) {
+ code = this._lookBits(12);
+
+ if (code === ccittEOF) {
+ return 1;
}
- codes.push({
- fontCharCode: charCode | 0,
- glyphId: glyphs[charCode]
- });
+ if (code >> 5 === 0) {
+ p = whiteTable1[code];
+ } else {
+ p = whiteTable2[code >> 3];
+ }
+
+ if (p[0] > 0) {
+ this._eatBits(p[0]);
+
+ return p[1];
+ }
+ } else {
+ let result = this._findTableCode(1, 9, whiteTable2);
+
+ if (result[0]) {
+ return result[1];
+ }
+
+ result = this._findTableCode(11, 12, whiteTable1);
+
+ if (result[0]) {
+ return result[1];
+ }
}
- if (codes.length === 0) {
- codes.push({
- fontCharCode: 0,
- glyphId: 0
- });
+ (0, _util.info)("bad white code");
+
+ this._eatBits(1);
+
+ return 1;
+ }
+
+ _getBlackCode() {
+ let code, p;
+
+ if (this.eoblock) {
+ code = this._lookBits(13);
+
+ if (code === ccittEOF) {
+ return 1;
+ }
+
+ if (code >> 7 === 0) {
+ p = blackTable1[code];
+ } else if (code >> 9 === 0 && code >> 7 !== 0) {
+ p = blackTable2[(code >> 1) - 64];
+ } else {
+ p = blackTable3[code >> 7];
+ }
+
+ if (p[0] > 0) {
+ this._eatBits(p[0]);
+
+ return p[1];
+ }
+ } else {
+ let result = this._findTableCode(2, 6, blackTable3);
+
+ if (result[0]) {
+ return result[1];
+ }
+
+ result = this._findTableCode(7, 12, blackTable2, 64);
+
+ if (result[0]) {
+ return result[1];
+ }
+
+ result = this._findTableCode(10, 13, blackTable1);
+
+ if (result[0]) {
+ return result[1];
+ }
}
- codes.sort(function fontGetRangesSort(a, b) {
- return a.fontCharCode - b.fontCharCode;
- });
- var ranges = [];
- var length = codes.length;
+ (0, _util.info)("bad black code");
- for (var n = 0; n < length;) {
- var start = codes[n].fontCharCode;
- var codeIndices = [codes[n].glyphId];
- ++n;
- var end = start;
+ this._eatBits(1);
+
+ return 1;
+ }
- while (n < length && end + 1 === codes[n].fontCharCode) {
- codeIndices.push(codes[n].glyphId);
- ++end;
- ++n;
+ _lookBits(n) {
+ let c;
- if (end === 0xffff) {
- break;
+ while (this.inputBits < n) {
+ if ((c = this.source.next()) === -1) {
+ if (this.inputBits === 0) {
+ return ccittEOF;
}
+
+ return this.inputBuf << n - this.inputBits & 0xffff >> 16 - n;
}
- ranges.push([start, end, codeIndices]);
+ this.inputBuf = this.inputBuf << 8 | c;
+ this.inputBits += 8;
}
- return ranges;
+ return this.inputBuf >> this.inputBits - n & 0xffff >> 16 - n;
+ }
+
+ _eatBits(n) {
+ if ((this.inputBits -= n) < 0) {
+ this.inputBits = 0;
+ }
+ }
+
+}
+
+exports.CCITTFaxDecoder = CCITTFaxDecoder;
+
+/***/ }),
+/* 23 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.FlateStream = void 0;
+
+var _decode_stream = __w_pdfjs_require__(19);
+
+var _util = __w_pdfjs_require__(2);
+
+const codeLenCodeMap = new Int32Array([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);
+const lengthDecode = new Int32Array([0x00003, 0x00004, 0x00005, 0x00006, 0x00007, 0x00008, 0x00009, 0x0000a, 0x1000b, 0x1000d, 0x1000f, 0x10011, 0x20013, 0x20017, 0x2001b, 0x2001f, 0x30023, 0x3002b, 0x30033, 0x3003b, 0x40043, 0x40053, 0x40063, 0x40073, 0x50083, 0x500a3, 0x500c3, 0x500e3, 0x00102, 0x00102, 0x00102]);
+const distDecode = new Int32Array([0x00001, 0x00002, 0x00003, 0x00004, 0x10005, 0x10007, 0x20009, 0x2000d, 0x30011, 0x30019, 0x40021, 0x40031, 0x50041, 0x50061, 0x60081, 0x600c1, 0x70101, 0x70181, 0x80201, 0x80301, 0x90401, 0x90601, 0xa0801, 0xa0c01, 0xb1001, 0xb1801, 0xc2001, 0xc3001, 0xd4001, 0xd6001]);
+const fixedLitCodeTab = [new Int32Array([0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c0, 0x70108, 0x80060, 0x80020, 0x900a0, 0x80000, 0x80080, 0x80040, 0x900e0, 0x70104, 0x80058, 0x80018, 0x90090, 0x70114, 0x80078, 0x80038, 0x900d0, 0x7010c, 0x80068, 0x80028, 0x900b0, 0x80008, 0x80088, 0x80048, 0x900f0, 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c8, 0x7010a, 0x80064, 0x80024, 0x900a8, 0x80004, 0x80084, 0x80044, 0x900e8, 0x70106, 0x8005c, 0x8001c, 0x90098, 0x70116, 0x8007c, 0x8003c, 0x900d8, 0x7010e, 0x8006c, 0x8002c, 0x900b8, 0x8000c, 0x8008c, 0x8004c, 0x900f8, 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c4, 0x70109, 0x80062, 0x80022, 0x900a4, 0x80002, 0x80082, 0x80042, 0x900e4, 0x70105, 0x8005a, 0x8001a, 0x90094, 0x70115, 0x8007a, 0x8003a, 0x900d4, 0x7010d, 0x8006a, 0x8002a, 0x900b4, 0x8000a, 0x8008a, 0x8004a, 0x900f4, 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cc, 0x7010b, 0x80066, 0x80026, 0x900ac, 0x80006, 0x80086, 0x80046, 0x900ec, 0x70107, 0x8005e, 0x8001e, 0x9009c, 0x70117, 0x8007e, 0x8003e, 0x900dc, 0x7010f, 0x8006e, 0x8002e, 0x900bc, 0x8000e, 0x8008e, 0x8004e, 0x900fc, 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c2, 0x70108, 0x80061, 0x80021, 0x900a2, 0x80001, 0x80081, 0x80041, 0x900e2, 0x70104, 0x80059, 0x80019, 0x90092, 0x70114, 0x80079, 0x80039, 0x900d2, 0x7010c, 0x80069, 0x80029, 0x900b2, 0x80009, 0x80089, 0x80049, 0x900f2, 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900ca, 0x7010a, 0x80065, 0x80025, 0x900aa, 0x80005, 0x80085, 0x80045, 0x900ea, 0x70106, 0x8005d, 0x8001d, 0x9009a, 0x70116, 0x8007d, 0x8003d, 0x900da, 0x7010e, 0x8006d, 0x8002d, 0x900ba, 0x8000d, 0x8008d, 0x8004d, 0x900fa, 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c6, 0x70109, 0x80063, 0x80023, 0x900a6, 0x80003, 0x80083, 0x80043, 0x900e6, 0x70105, 0x8005b, 0x8001b, 0x90096, 0x70115, 0x8007b, 0x8003b, 0x900d6, 0x7010d, 0x8006b, 0x8002b, 0x900b6, 0x8000b, 0x8008b, 0x8004b, 0x900f6, 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900ce, 0x7010b, 0x80067, 0x80027, 0x900ae, 0x80007, 0x80087, 0x80047, 0x900ee, 0x70107, 0x8005f, 0x8001f, 0x9009e, 0x70117, 0x8007f, 0x8003f, 0x900de, 0x7010f, 0x8006f, 0x8002f, 0x900be, 0x8000f, 0x8008f, 0x8004f, 0x900fe, 0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c1, 0x70108, 0x80060, 0x80020, 0x900a1, 0x80000, 0x80080, 0x80040, 0x900e1, 0x70104, 0x80058, 0x80018, 0x90091, 0x70114, 0x80078, 0x80038, 0x900d1, 0x7010c, 0x80068, 0x80028, 0x900b1, 0x80008, 0x80088, 0x80048, 0x900f1, 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c9, 0x7010a, 0x80064, 0x80024, 0x900a9, 0x80004, 0x80084, 0x80044, 0x900e9, 0x70106, 0x8005c, 0x8001c, 0x90099, 0x70116, 0x8007c, 0x8003c, 0x900d9, 0x7010e, 0x8006c, 0x8002c, 0x900b9, 0x8000c, 0x8008c, 0x8004c, 0x900f9, 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c5, 0x70109, 0x80062, 0x80022, 0x900a5, 0x80002, 0x80082, 0x80042, 0x900e5, 0x70105, 0x8005a, 0x8001a, 0x90095, 0x70115, 0x8007a, 0x8003a, 0x900d5, 0x7010d, 0x8006a, 0x8002a, 0x900b5, 0x8000a, 0x8008a, 0x8004a, 0x900f5, 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cd, 0x7010b, 0x80066, 0x80026, 0x900ad, 0x80006, 0x80086, 0x80046, 0x900ed, 0x70107, 0x8005e, 0x8001e, 0x9009d, 0x70117, 0x8007e, 0x8003e, 0x900dd, 0x7010f, 0x8006e, 0x8002e, 0x900bd, 0x8000e, 0x8008e, 0x8004e, 0x900fd, 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c3, 0x70108, 0x80061, 0x80021, 0x900a3, 0x80001, 0x80081, 0x80041, 0x900e3, 0x70104, 0x80059, 0x80019, 0x90093, 0x70114, 0x80079, 0x80039, 0x900d3, 0x7010c, 0x80069, 0x80029, 0x900b3, 0x80009, 0x80089, 0x80049, 0x900f3, 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900cb, 0x7010a, 0x80065, 0x80025, 0x900ab, 0x80005, 0x80085, 0x80045, 0x900eb, 0x70106, 0x8005d, 0x8001d, 0x9009b, 0x70116, 0x8007d, 0x8003d, 0x900db, 0x7010e, 0x8006d, 0x8002d, 0x900bb, 0x8000d, 0x8008d, 0x8004d, 0x900fb, 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c7, 0x70109, 0x80063, 0x80023, 0x900a7, 0x80003, 0x80083, 0x80043, 0x900e7, 0x70105, 0x8005b, 0x8001b, 0x90097, 0x70115, 0x8007b, 0x8003b, 0x900d7, 0x7010d, 0x8006b, 0x8002b, 0x900b7, 0x8000b, 0x8008b, 0x8004b, 0x900f7, 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900cf, 0x7010b, 0x80067, 0x80027, 0x900af, 0x80007, 0x80087, 0x80047, 0x900ef, 0x70107, 0x8005f, 0x8001f, 0x9009f, 0x70117, 0x8007f, 0x8003f, 0x900df, 0x7010f, 0x8006f, 0x8002f, 0x900bf, 0x8000f, 0x8008f, 0x8004f, 0x900ff]), 9];
+const fixedDistCodeTab = [new Int32Array([0x50000, 0x50010, 0x50008, 0x50018, 0x50004, 0x50014, 0x5000c, 0x5001c, 0x50002, 0x50012, 0x5000a, 0x5001a, 0x50006, 0x50016, 0x5000e, 0x00000, 0x50001, 0x50011, 0x50009, 0x50019, 0x50005, 0x50015, 0x5000d, 0x5001d, 0x50003, 0x50013, 0x5000b, 0x5001b, 0x50007, 0x50017, 0x5000f, 0x00000]), 5];
+
+class FlateStream extends _decode_stream.DecodeStream {
+ constructor(str, maybeLength) {
+ super(maybeLength);
+ this.str = str;
+ this.dict = str.dict;
+ const cmf = str.getByte();
+ const flg = str.getByte();
+
+ if (cmf === -1 || flg === -1) {
+ throw new _util.FormatError(`Invalid header in flate stream: ${cmf}, ${flg}`);
+ }
+
+ if ((cmf & 0x0f) !== 0x08) {
+ throw new _util.FormatError(`Unknown compression method in flate stream: ${cmf}, ${flg}`);
+ }
+
+ if (((cmf << 8) + flg) % 31 !== 0) {
+ throw new _util.FormatError(`Bad FCHECK in flate stream: ${cmf}, ${flg}`);
+ }
+
+ if (flg & 0x20) {
+ throw new _util.FormatError(`FDICT bit set in flate stream: ${cmf}, ${flg}`);
+ }
+
+ this.codeSize = 0;
+ this.codeBuf = 0;
+ }
+
+ getBits(bits) {
+ const str = this.str;
+ let codeSize = this.codeSize;
+ let codeBuf = this.codeBuf;
+ let b;
+
+ while (codeSize < bits) {
+ if ((b = str.getByte()) === -1) {
+ throw new _util.FormatError("Bad encoding in flate stream");
+ }
+
+ codeBuf |= b << codeSize;
+ codeSize += 8;
+ }
+
+ b = codeBuf & (1 << bits) - 1;
+ this.codeBuf = codeBuf >> bits;
+ this.codeSize = codeSize -= bits;
+ return b;
}
- function createCmapTable(glyphs, numGlyphs) {
- var ranges = getRanges(glyphs, numGlyphs);
- var numTables = ranges[ranges.length - 1][1] > 0xffff ? 2 : 1;
- var cmap = "\x00\x00" + string16(numTables) + "\x00\x03" + "\x00\x01" + (0, _util.string32)(4 + numTables * 8);
- var i, ii, j, jj;
+ getCode(table) {
+ const str = this.str;
+ const codes = table[0];
+ const maxLen = table[1];
+ let codeSize = this.codeSize;
+ let codeBuf = this.codeBuf;
+ let b;
- for (i = ranges.length - 1; i >= 0; --i) {
- if (ranges[i][0] <= 0xffff) {
+ while (codeSize < maxLen) {
+ if ((b = str.getByte()) === -1) {
break;
}
+
+ codeBuf |= b << codeSize;
+ codeSize += 8;
}
- var bmpLength = i + 1;
+ const code = codes[codeBuf & (1 << maxLen) - 1];
+ const codeLen = code >> 16;
+ const codeVal = code & 0xffff;
- if (ranges[i][0] < 0xffff && ranges[i][1] === 0xffff) {
- ranges[i][1] = 0xfffe;
+ if (codeLen < 1 || codeSize < codeLen) {
+ throw new _util.FormatError("Bad encoding in flate stream");
}
- var trailingRangesCount = ranges[i][1] < 0xffff ? 1 : 0;
- var segCount = bmpLength + trailingRangesCount;
- var searchParams = OpenTypeFileBuilder.getSearchParams(segCount, 2);
- var startCount = "";
- var endCount = "";
- var idDeltas = "";
- var idRangeOffsets = "";
- var glyphsIds = "";
- var bias = 0;
- var range, start, end, codes;
+ this.codeBuf = codeBuf >> codeLen;
+ this.codeSize = codeSize - codeLen;
+ return codeVal;
+ }
- for (i = 0, ii = bmpLength; i < ii; i++) {
- range = ranges[i];
- start = range[0];
- end = range[1];
- startCount += string16(start);
- endCount += string16(end);
- codes = range[2];
- var contiguous = true;
+ generateHuffmanTable(lengths) {
+ const n = lengths.length;
+ let maxLen = 0;
+ let i;
- for (j = 1, jj = codes.length; j < jj; ++j) {
- if (codes[j] !== codes[j - 1] + 1) {
- contiguous = false;
- break;
+ for (i = 0; i < n; ++i) {
+ if (lengths[i] > maxLen) {
+ maxLen = lengths[i];
+ }
+ }
+
+ const size = 1 << maxLen;
+ const codes = new Int32Array(size);
+
+ for (let len = 1, code = 0, skip = 2; len <= maxLen; ++len, code <<= 1, skip <<= 1) {
+ for (let val = 0; val < n; ++val) {
+ if (lengths[val] === len) {
+ let code2 = 0;
+ let t = code;
+
+ for (i = 0; i < len; ++i) {
+ code2 = code2 << 1 | t & 1;
+ t >>= 1;
+ }
+
+ for (i = code2; i < size; i += skip) {
+ codes[i] = len << 16 | val;
+ }
+
+ ++code;
}
}
+ }
+
+ return [codes, maxLen];
+ }
+
+ readBlock() {
+ let buffer, len;
+ const str = this.str;
+ let hdr = this.getBits(3);
+
+ if (hdr & 1) {
+ this.eof = true;
+ }
+
+ hdr >>= 1;
- if (!contiguous) {
- var offset = (segCount - i) * 2 + bias * 2;
- bias += end - start + 1;
- idDeltas += string16(0);
- idRangeOffsets += string16(offset);
+ if (hdr === 0) {
+ let b;
- for (j = 0, jj = codes.length; j < jj; ++j) {
- glyphsIds += string16(codes[j]);
+ if ((b = str.getByte()) === -1) {
+ throw new _util.FormatError("Bad block header in flate stream");
+ }
+
+ let blockLen = b;
+
+ if ((b = str.getByte()) === -1) {
+ throw new _util.FormatError("Bad block header in flate stream");
+ }
+
+ blockLen |= b << 8;
+
+ if ((b = str.getByte()) === -1) {
+ throw new _util.FormatError("Bad block header in flate stream");
+ }
+
+ let check = b;
+
+ if ((b = str.getByte()) === -1) {
+ throw new _util.FormatError("Bad block header in flate stream");
+ }
+
+ check |= b << 8;
+
+ if (check !== (~blockLen & 0xffff) && (blockLen !== 0 || check !== 0)) {
+ throw new _util.FormatError("Bad uncompressed block length in flate stream");
+ }
+
+ this.codeBuf = 0;
+ this.codeSize = 0;
+ const bufferLength = this.bufferLength,
+ end = bufferLength + blockLen;
+ buffer = this.ensureBuffer(end);
+ this.bufferLength = end;
+
+ if (blockLen === 0) {
+ if (str.peekByte() === -1) {
+ this.eof = true;
}
} else {
- var startCode = codes[0];
- idDeltas += string16(startCode - start & 0xffff);
- idRangeOffsets += string16(0);
+ const block = str.getBytes(blockLen);
+ buffer.set(block, bufferLength);
+
+ if (block.length < blockLen) {
+ this.eof = true;
+ }
}
- }
- if (trailingRangesCount > 0) {
- endCount += "\xFF\xFF";
- startCount += "\xFF\xFF";
- idDeltas += "\x00\x01";
- idRangeOffsets += "\x00\x00";
+ return;
}
- var format314 = "\x00\x00" + string16(2 * segCount) + string16(searchParams.range) + string16(searchParams.entry) + string16(searchParams.rangeShift) + endCount + "\x00\x00" + startCount + idDeltas + idRangeOffsets + glyphsIds;
- var format31012 = "";
- var header31012 = "";
+ let litCodeTable;
+ let distCodeTable;
- if (numTables > 1) {
- cmap += "\x00\x03" + "\x00\x0A" + (0, _util.string32)(4 + numTables * 8 + 4 + format314.length);
- format31012 = "";
+ if (hdr === 1) {
+ litCodeTable = fixedLitCodeTab;
+ distCodeTable = fixedDistCodeTab;
+ } else if (hdr === 2) {
+ const numLitCodes = this.getBits(5) + 257;
+ const numDistCodes = this.getBits(5) + 1;
+ const numCodeLenCodes = this.getBits(4) + 4;
+ const codeLenCodeLengths = new Uint8Array(codeLenCodeMap.length);
+ let i;
- for (i = 0, ii = ranges.length; i < ii; i++) {
- range = ranges[i];
- start = range[0];
- codes = range[2];
- var code = codes[0];
+ for (i = 0; i < numCodeLenCodes; ++i) {
+ codeLenCodeLengths[codeLenCodeMap[i]] = this.getBits(3);
+ }
- for (j = 1, jj = codes.length; j < jj; ++j) {
- if (codes[j] !== codes[j - 1] + 1) {
- end = range[0] + j - 1;
- format31012 += (0, _util.string32)(start) + (0, _util.string32)(end) + (0, _util.string32)(code);
- start = end + 1;
- code = codes[j];
- }
+ const codeLenCodeTab = this.generateHuffmanTable(codeLenCodeLengths);
+ len = 0;
+ i = 0;
+ const codes = numLitCodes + numDistCodes;
+ const codeLengths = new Uint8Array(codes);
+ let bitsLength, bitsOffset, what;
+
+ while (i < codes) {
+ const code = this.getCode(codeLenCodeTab);
+
+ if (code === 16) {
+ bitsLength = 2;
+ bitsOffset = 3;
+ what = len;
+ } else if (code === 17) {
+ bitsLength = 3;
+ bitsOffset = 3;
+ what = len = 0;
+ } else if (code === 18) {
+ bitsLength = 7;
+ bitsOffset = 11;
+ what = len = 0;
+ } else {
+ codeLengths[i++] = len = code;
+ continue;
}
- format31012 += (0, _util.string32)(start) + (0, _util.string32)(range[1]) + (0, _util.string32)(code);
+ let repeatLength = this.getBits(bitsLength) + bitsOffset;
+
+ while (repeatLength-- > 0) {
+ codeLengths[i++] = what;
+ }
}
- header31012 = "\x00\x0C" + "\x00\x00" + (0, _util.string32)(format31012.length + 16) + "\x00\x00\x00\x00" + (0, _util.string32)(format31012.length / 12);
+ litCodeTable = this.generateHuffmanTable(codeLengths.subarray(0, numLitCodes));
+ distCodeTable = this.generateHuffmanTable(codeLengths.subarray(numLitCodes, codes));
+ } else {
+ throw new _util.FormatError("Unknown block type in flate stream");
}
- return cmap + "\x00\x04" + string16(format314.length + 4) + format314 + header31012 + format31012;
+ buffer = this.buffer;
+ let limit = buffer ? buffer.length : 0;
+ let pos = this.bufferLength;
+
+ while (true) {
+ let code1 = this.getCode(litCodeTable);
+
+ if (code1 < 256) {
+ if (pos + 1 >= limit) {
+ buffer = this.ensureBuffer(pos + 1);
+ limit = buffer.length;
+ }
+
+ buffer[pos++] = code1;
+ continue;
+ }
+
+ if (code1 === 256) {
+ this.bufferLength = pos;
+ return;
+ }
+
+ code1 -= 257;
+ code1 = lengthDecode[code1];
+ let code2 = code1 >> 16;
+
+ if (code2 > 0) {
+ code2 = this.getBits(code2);
+ }
+
+ len = (code1 & 0xffff) + code2;
+ code1 = this.getCode(distCodeTable);
+ code1 = distDecode[code1];
+ code2 = code1 >> 16;
+
+ if (code2 > 0) {
+ code2 = this.getBits(code2);
+ }
+
+ const dist = (code1 & 0xffff) + code2;
+
+ if (pos + len >= limit) {
+ buffer = this.ensureBuffer(pos + len);
+ limit = buffer.length;
+ }
+
+ for (let k = 0; k < len; ++k, ++pos) {
+ buffer[pos] = buffer[pos - dist];
+ }
+ }
}
- function validateOS2Table(os2, file) {
- file.pos = (file.start || 0) + os2.offset;
- var version = file.getUint16();
- file.skip(60);
- var selection = file.getUint16();
+}
+
+exports.FlateStream = FlateStream;
- if (version < 4 && selection & 0x0300) {
- return false;
+/***/ }),
+/* 24 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.Jbig2Stream = void 0;
+
+var _primitives = __w_pdfjs_require__(5);
+
+var _decode_stream = __w_pdfjs_require__(19);
+
+var _jbig = __w_pdfjs_require__(25);
+
+var _util = __w_pdfjs_require__(2);
+
+class Jbig2Stream extends _decode_stream.DecodeStream {
+ constructor(stream, maybeLength, params) {
+ super(maybeLength);
+ this.stream = stream;
+ this.dict = stream.dict;
+ this.maybeLength = maybeLength;
+ this.params = params;
+ }
+
+ get bytes() {
+ return (0, _util.shadow)(this, "bytes", this.stream.getBytes(this.maybeLength));
+ }
+
+ ensureBuffer(requested) {}
+
+ readBlock() {
+ if (this.eof) {
+ return;
}
- var firstChar = file.getUint16();
- var lastChar = file.getUint16();
+ const jbig2Image = new _jbig.Jbig2Image();
+ const chunks = [];
+
+ if ((0, _primitives.isDict)(this.params)) {
+ const globalsStream = this.params.get("JBIG2Globals");
- if (firstChar > lastChar) {
- return false;
+ if ((0, _primitives.isStream)(globalsStream)) {
+ const globals = globalsStream.getBytes();
+ chunks.push({
+ data: globals,
+ start: 0,
+ end: globals.length
+ });
+ }
}
- file.skip(6);
- var usWinAscent = file.getUint16();
+ chunks.push({
+ data: this.bytes,
+ start: 0,
+ end: this.bytes.length
+ });
+ const data = jbig2Image.parseChunks(chunks);
+ const dataLength = data.length;
- if (usWinAscent === 0) {
- return false;
+ for (let i = 0; i < dataLength; i++) {
+ data[i] ^= 0xff;
}
- os2.data[8] = os2.data[9] = 0;
- return true;
+ this.buffer = data;
+ this.bufferLength = dataLength;
+ this.eof = true;
}
- function createOS2Table(properties, charstrings, override) {
- override = override || {
- unitsPerEm: 0,
- yMax: 0,
- yMin: 0,
- ascent: 0,
- descent: 0
- };
- var ulUnicodeRange1 = 0;
- var ulUnicodeRange2 = 0;
- var ulUnicodeRange3 = 0;
- var ulUnicodeRange4 = 0;
- var firstCharIndex = null;
- var lastCharIndex = 0;
+}
- if (charstrings) {
- for (var code in charstrings) {
- code |= 0;
+exports.Jbig2Stream = Jbig2Stream;
- if (firstCharIndex > code || !firstCharIndex) {
- firstCharIndex = code;
- }
+/***/ }),
+/* 25 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.Jbig2Image = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _core_utils = __w_pdfjs_require__(9);
+
+var _arithmetic_decoder = __w_pdfjs_require__(26);
+
+var _ccitt = __w_pdfjs_require__(22);
+
+class Jbig2Error extends _util.BaseException {
+ constructor(msg) {
+ super(`JBIG2 error: ${msg}`);
+ }
+
+}
+
+class ContextCache {
+ getContexts(id) {
+ if (id in this) {
+ return this[id];
+ }
+
+ return this[id] = new Int8Array(1 << 16);
+ }
+
+}
+
+class DecodingContext {
+ constructor(data, start, end) {
+ this.data = data;
+ this.start = start;
+ this.end = end;
+ }
+
+ get decoder() {
+ const decoder = new _arithmetic_decoder.ArithmeticDecoder(this.data, this.start, this.end);
+ return (0, _util.shadow)(this, "decoder", decoder);
+ }
+
+ get contextCache() {
+ const cache = new ContextCache();
+ return (0, _util.shadow)(this, "contextCache", cache);
+ }
+
+}
+
+function decodeInteger(contextCache, procedure, decoder) {
+ const contexts = contextCache.getContexts(procedure);
+ let prev = 1;
+
+ function readBits(length) {
+ let v = 0;
+
+ for (let i = 0; i < length; i++) {
+ const bit = decoder.readBit(contexts, prev);
+ prev = prev < 256 ? prev << 1 | bit : (prev << 1 | bit) & 511 | 256;
+ v = v << 1 | bit;
+ }
+
+ return v >>> 0;
+ }
+
+ const sign = readBits(1);
+ const value = readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(32) + 4436 : readBits(12) + 340 : readBits(8) + 84 : readBits(6) + 20 : readBits(4) + 4 : readBits(2);
+
+ if (sign === 0) {
+ return value;
+ } else if (value > 0) {
+ return -value;
+ }
+
+ return null;
+}
+
+function decodeIAID(contextCache, decoder, codeLength) {
+ const contexts = contextCache.getContexts("IAID");
+ let prev = 1;
+
+ for (let i = 0; i < codeLength; i++) {
+ const bit = decoder.readBit(contexts, prev);
+ prev = prev << 1 | bit;
+ }
+
+ if (codeLength < 31) {
+ return prev & (1 << codeLength) - 1;
+ }
+
+ return prev & 0x7fffffff;
+}
+
+const SegmentTypes = ["SymbolDictionary", null, null, null, "IntermediateTextRegion", null, "ImmediateTextRegion", "ImmediateLosslessTextRegion", null, null, null, null, null, null, null, null, "PatternDictionary", null, null, null, "IntermediateHalftoneRegion", null, "ImmediateHalftoneRegion", "ImmediateLosslessHalftoneRegion", null, null, null, null, null, null, null, null, null, null, null, null, "IntermediateGenericRegion", null, "ImmediateGenericRegion", "ImmediateLosslessGenericRegion", "IntermediateGenericRefinementRegion", null, "ImmediateGenericRefinementRegion", "ImmediateLosslessGenericRefinementRegion", null, null, null, null, "PageInformation", "EndOfPage", "EndOfStripe", "EndOfFile", "Profiles", "Tables", null, null, null, null, null, null, null, null, "Extension"];
+const CodingTemplates = [[{
+ x: -1,
+ y: -2
+}, {
+ x: 0,
+ y: -2
+}, {
+ x: 1,
+ y: -2
+}, {
+ x: -2,
+ y: -1
+}, {
+ x: -1,
+ y: -1
+}, {
+ x: 0,
+ y: -1
+}, {
+ x: 1,
+ y: -1
+}, {
+ x: 2,
+ y: -1
+}, {
+ x: -4,
+ y: 0
+}, {
+ x: -3,
+ y: 0
+}, {
+ x: -2,
+ y: 0
+}, {
+ x: -1,
+ y: 0
+}], [{
+ x: -1,
+ y: -2
+}, {
+ x: 0,
+ y: -2
+}, {
+ x: 1,
+ y: -2
+}, {
+ x: 2,
+ y: -2
+}, {
+ x: -2,
+ y: -1
+}, {
+ x: -1,
+ y: -1
+}, {
+ x: 0,
+ y: -1
+}, {
+ x: 1,
+ y: -1
+}, {
+ x: 2,
+ y: -1
+}, {
+ x: -3,
+ y: 0
+}, {
+ x: -2,
+ y: 0
+}, {
+ x: -1,
+ y: 0
+}], [{
+ x: -1,
+ y: -2
+}, {
+ x: 0,
+ y: -2
+}, {
+ x: 1,
+ y: -2
+}, {
+ x: -2,
+ y: -1
+}, {
+ x: -1,
+ y: -1
+}, {
+ x: 0,
+ y: -1
+}, {
+ x: 1,
+ y: -1
+}, {
+ x: -2,
+ y: 0
+}, {
+ x: -1,
+ y: 0
+}], [{
+ x: -3,
+ y: -1
+}, {
+ x: -2,
+ y: -1
+}, {
+ x: -1,
+ y: -1
+}, {
+ x: 0,
+ y: -1
+}, {
+ x: 1,
+ y: -1
+}, {
+ x: -4,
+ y: 0
+}, {
+ x: -3,
+ y: 0
+}, {
+ x: -2,
+ y: 0
+}, {
+ x: -1,
+ y: 0
+}]];
+const RefinementTemplates = [{
+ coding: [{
+ x: 0,
+ y: -1
+ }, {
+ x: 1,
+ y: -1
+ }, {
+ x: -1,
+ y: 0
+ }],
+ reference: [{
+ x: 0,
+ y: -1
+ }, {
+ x: 1,
+ y: -1
+ }, {
+ x: -1,
+ y: 0
+ }, {
+ x: 0,
+ y: 0
+ }, {
+ x: 1,
+ y: 0
+ }, {
+ x: -1,
+ y: 1
+ }, {
+ x: 0,
+ y: 1
+ }, {
+ x: 1,
+ y: 1
+ }]
+}, {
+ coding: [{
+ x: -1,
+ y: -1
+ }, {
+ x: 0,
+ y: -1
+ }, {
+ x: 1,
+ y: -1
+ }, {
+ x: -1,
+ y: 0
+ }],
+ reference: [{
+ x: 0,
+ y: -1
+ }, {
+ x: -1,
+ y: 0
+ }, {
+ x: 0,
+ y: 0
+ }, {
+ x: 1,
+ y: 0
+ }, {
+ x: 0,
+ y: 1
+ }, {
+ x: 1,
+ y: 1
+ }]
+}];
+const ReusedContexts = [0x9b25, 0x0795, 0x00e5, 0x0195];
+const RefinementReusedContexts = [0x0020, 0x0008];
+
+function decodeBitmapTemplate0(width, height, decodingContext) {
+ const decoder = decodingContext.decoder;
+ const contexts = decodingContext.contextCache.getContexts("GB");
+ const bitmap = [];
+ let contextLabel, i, j, pixel, row, row1, row2;
+ const OLD_PIXEL_MASK = 0x7bf7;
+
+ for (i = 0; i < height; i++) {
+ row = bitmap[i] = new Uint8Array(width);
+ row1 = i < 1 ? row : bitmap[i - 1];
+ row2 = i < 2 ? row : bitmap[i - 2];
+ contextLabel = row2[0] << 13 | row2[1] << 12 | row2[2] << 11 | row1[0] << 7 | row1[1] << 6 | row1[2] << 5 | row1[3] << 4;
+
+ for (j = 0; j < width; j++) {
+ row[j] = pixel = decoder.readBit(contexts, contextLabel);
+ contextLabel = (contextLabel & OLD_PIXEL_MASK) << 1 | (j + 3 < width ? row2[j + 3] << 11 : 0) | (j + 4 < width ? row1[j + 4] << 4 : 0) | pixel;
+ }
+ }
+
+ return bitmap;
+}
+
+function decodeBitmap(mmr, width, height, templateIndex, prediction, skip, at, decodingContext) {
+ if (mmr) {
+ const input = new Reader(decodingContext.data, decodingContext.start, decodingContext.end);
+ return decodeMMRBitmap(input, width, height, false);
+ }
+
+ if (templateIndex === 0 && !skip && !prediction && at.length === 4 && at[0].x === 3 && at[0].y === -1 && at[1].x === -3 && at[1].y === -1 && at[2].x === 2 && at[2].y === -2 && at[3].x === -2 && at[3].y === -2) {
+ return decodeBitmapTemplate0(width, height, decodingContext);
+ }
+
+ const useskip = !!skip;
+ const template = CodingTemplates[templateIndex].concat(at);
+ template.sort(function (a, b) {
+ return a.y - b.y || a.x - b.x;
+ });
+ const templateLength = template.length;
+ const templateX = new Int8Array(templateLength);
+ const templateY = new Int8Array(templateLength);
+ const changingTemplateEntries = [];
+ let reuseMask = 0,
+ minX = 0,
+ maxX = 0,
+ minY = 0;
+ let c, k;
+
+ for (k = 0; k < templateLength; k++) {
+ templateX[k] = template[k].x;
+ templateY[k] = template[k].y;
+ minX = Math.min(minX, template[k].x);
+ maxX = Math.max(maxX, template[k].x);
+ minY = Math.min(minY, template[k].y);
+
+ if (k < templateLength - 1 && template[k].y === template[k + 1].y && template[k].x === template[k + 1].x - 1) {
+ reuseMask |= 1 << templateLength - 1 - k;
+ } else {
+ changingTemplateEntries.push(k);
+ }
+ }
+
+ const changingEntriesLength = changingTemplateEntries.length;
+ const changingTemplateX = new Int8Array(changingEntriesLength);
+ const changingTemplateY = new Int8Array(changingEntriesLength);
+ const changingTemplateBit = new Uint16Array(changingEntriesLength);
+
+ for (c = 0; c < changingEntriesLength; c++) {
+ k = changingTemplateEntries[c];
+ changingTemplateX[c] = template[k].x;
+ changingTemplateY[c] = template[k].y;
+ changingTemplateBit[c] = 1 << templateLength - 1 - k;
+ }
+
+ const sbb_left = -minX;
+ const sbb_top = -minY;
+ const sbb_right = width - maxX;
+ const pseudoPixelContext = ReusedContexts[templateIndex];
+ let row = new Uint8Array(width);
+ const bitmap = [];
+ const decoder = decodingContext.decoder;
+ const contexts = decodingContext.contextCache.getContexts("GB");
+ let ltp = 0,
+ j,
+ i0,
+ j0,
+ contextLabel = 0,
+ bit,
+ shift;
+
+ for (let i = 0; i < height; i++) {
+ if (prediction) {
+ const sltp = decoder.readBit(contexts, pseudoPixelContext);
+ ltp ^= sltp;
+
+ if (ltp) {
+ bitmap.push(row);
+ continue;
+ }
+ }
+
+ row = new Uint8Array(row);
+ bitmap.push(row);
+
+ for (j = 0; j < width; j++) {
+ if (useskip && skip[i][j]) {
+ row[j] = 0;
+ continue;
+ }
+
+ if (j >= sbb_left && j < sbb_right && i >= sbb_top) {
+ contextLabel = contextLabel << 1 & reuseMask;
- if (lastCharIndex < code) {
- lastCharIndex = code;
+ for (k = 0; k < changingEntriesLength; k++) {
+ i0 = i + changingTemplateY[k];
+ j0 = j + changingTemplateX[k];
+ bit = bitmap[i0][j0];
+
+ if (bit) {
+ bit = changingTemplateBit[k];
+ contextLabel |= bit;
+ }
}
+ } else {
+ contextLabel = 0;
+ shift = templateLength - 1;
- var position = (0, _unicode.getUnicodeRangeFor)(code);
+ for (k = 0; k < templateLength; k++, shift--) {
+ j0 = j + templateX[k];
- if (position < 32) {
- ulUnicodeRange1 |= 1 << position;
- } else if (position < 64) {
- ulUnicodeRange2 |= 1 << position - 32;
- } else if (position < 96) {
- ulUnicodeRange3 |= 1 << position - 64;
- } else if (position < 123) {
- ulUnicodeRange4 |= 1 << position - 96;
- } else {
- throw new _util.FormatError("Unicode ranges Bits > 123 are reserved for internal usage");
+ if (j0 >= 0 && j0 < width) {
+ i0 = i + templateY[k];
+
+ if (i0 >= 0) {
+ bit = bitmap[i0][j0];
+
+ if (bit) {
+ contextLabel |= bit << shift;
+ }
+ }
+ }
}
}
- if (lastCharIndex > 0xffff) {
- lastCharIndex = 0xffff;
+ const pixel = decoder.readBit(contexts, contextLabel);
+ row[j] = pixel;
+ }
+ }
+
+ return bitmap;
+}
+
+function decodeRefinement(width, height, templateIndex, referenceBitmap, offsetX, offsetY, prediction, at, decodingContext) {
+ let codingTemplate = RefinementTemplates[templateIndex].coding;
+
+ if (templateIndex === 0) {
+ codingTemplate = codingTemplate.concat([at[0]]);
+ }
+
+ const codingTemplateLength = codingTemplate.length;
+ const codingTemplateX = new Int32Array(codingTemplateLength);
+ const codingTemplateY = new Int32Array(codingTemplateLength);
+ let k;
+
+ for (k = 0; k < codingTemplateLength; k++) {
+ codingTemplateX[k] = codingTemplate[k].x;
+ codingTemplateY[k] = codingTemplate[k].y;
+ }
+
+ let referenceTemplate = RefinementTemplates[templateIndex].reference;
+
+ if (templateIndex === 0) {
+ referenceTemplate = referenceTemplate.concat([at[1]]);
+ }
+
+ const referenceTemplateLength = referenceTemplate.length;
+ const referenceTemplateX = new Int32Array(referenceTemplateLength);
+ const referenceTemplateY = new Int32Array(referenceTemplateLength);
+
+ for (k = 0; k < referenceTemplateLength; k++) {
+ referenceTemplateX[k] = referenceTemplate[k].x;
+ referenceTemplateY[k] = referenceTemplate[k].y;
+ }
+
+ const referenceWidth = referenceBitmap[0].length;
+ const referenceHeight = referenceBitmap.length;
+ const pseudoPixelContext = RefinementReusedContexts[templateIndex];
+ const bitmap = [];
+ const decoder = decodingContext.decoder;
+ const contexts = decodingContext.contextCache.getContexts("GR");
+ let ltp = 0;
+
+ for (let i = 0; i < height; i++) {
+ if (prediction) {
+ const sltp = decoder.readBit(contexts, pseudoPixelContext);
+ ltp ^= sltp;
+
+ if (ltp) {
+ throw new Jbig2Error("prediction is not supported");
}
- } else {
- firstCharIndex = 0;
- lastCharIndex = 255;
}
- var bbox = properties.bbox || [0, 0, 0, 0];
- var unitsPerEm = override.unitsPerEm || 1 / (properties.fontMatrix || _util.FONT_IDENTITY_MATRIX)[0];
- var scale = properties.ascentScaled ? 1.0 : unitsPerEm / PDF_GLYPH_SPACE_UNITS;
- var typoAscent = override.ascent || Math.round(scale * (properties.ascent || bbox[3]));
- var typoDescent = override.descent || Math.round(scale * (properties.descent || bbox[1]));
+ const row = new Uint8Array(width);
+ bitmap.push(row);
+
+ for (let j = 0; j < width; j++) {
+ let i0, j0;
+ let contextLabel = 0;
+
+ for (k = 0; k < codingTemplateLength; k++) {
+ i0 = i + codingTemplateY[k];
+ j0 = j + codingTemplateX[k];
+
+ if (i0 < 0 || j0 < 0 || j0 >= width) {
+ contextLabel <<= 1;
+ } else {
+ contextLabel = contextLabel << 1 | bitmap[i0][j0];
+ }
+ }
+
+ for (k = 0; k < referenceTemplateLength; k++) {
+ i0 = i + referenceTemplateY[k] - offsetY;
+ j0 = j + referenceTemplateX[k] - offsetX;
+
+ if (i0 < 0 || i0 >= referenceHeight || j0 < 0 || j0 >= referenceWidth) {
+ contextLabel <<= 1;
+ } else {
+ contextLabel = contextLabel << 1 | referenceBitmap[i0][j0];
+ }
+ }
- if (typoDescent > 0 && properties.descent > 0 && bbox[1] < 0) {
- typoDescent = -typoDescent;
+ const pixel = decoder.readBit(contexts, contextLabel);
+ row[j] = pixel;
}
+ }
+
+ return bitmap;
+}
- var winAscent = override.yMax || typoAscent;
- var winDescent = -override.yMin || -typoDescent;
- return "\x00\x03" + "\x02\x24" + "\x01\xF4" + "\x00\x05" + "\x00\x00" + "\x02\x8A" + "\x02\xBB" + "\x00\x00" + "\x00\x8C" + "\x02\x8A" + "\x02\xBB" + "\x00\x00" + "\x01\xDF" + "\x00\x31" + "\x01\x02" + "\x00\x00" + "\x00\x00\x06" + String.fromCharCode(properties.fixedPitch ? 0x09 : 0x00) + "\x00\x00\x00\x00\x00\x00" + (0, _util.string32)(ulUnicodeRange1) + (0, _util.string32)(ulUnicodeRange2) + (0, _util.string32)(ulUnicodeRange3) + (0, _util.string32)(ulUnicodeRange4) + "\x2A\x32\x31\x2A" + string16(properties.italicAngle ? 1 : 0) + string16(firstCharIndex || properties.firstChar) + string16(lastCharIndex || properties.lastChar) + string16(typoAscent) + string16(typoDescent) + "\x00\x64" + string16(winAscent) + string16(winDescent) + "\x00\x00\x00\x00" + "\x00\x00\x00\x00" + string16(properties.xHeight) + string16(properties.capHeight) + string16(0) + string16(firstCharIndex || properties.firstChar) + "\x00\x03";
+function decodeSymbolDictionary(huffman, refinement, symbols, numberOfNewSymbols, numberOfExportedSymbols, huffmanTables, templateIndex, at, refinementTemplateIndex, refinementAt, decodingContext, huffmanInput) {
+ if (huffman && refinement) {
+ throw new Jbig2Error("symbol refinement with Huffman is not supported");
}
- function createPostTable(properties) {
- var angle = Math.floor(properties.italicAngle * 2 ** 16);
- return "\x00\x03\x00\x00" + (0, _util.string32)(angle) + "\x00\x00" + "\x00\x00" + (0, _util.string32)(properties.fixedPitch) + "\x00\x00\x00\x00" + "\x00\x00\x00\x00" + "\x00\x00\x00\x00" + "\x00\x00\x00\x00";
+ const newSymbols = [];
+ let currentHeight = 0;
+ let symbolCodeLength = (0, _core_utils.log2)(symbols.length + numberOfNewSymbols);
+ const decoder = decodingContext.decoder;
+ const contextCache = decodingContext.contextCache;
+ let tableB1, symbolWidths;
+
+ if (huffman) {
+ tableB1 = getStandardTable(1);
+ symbolWidths = [];
+ symbolCodeLength = Math.max(symbolCodeLength, 1);
}
- function createNameTable(name, proto) {
- if (!proto) {
- proto = [[], []];
+ while (newSymbols.length < numberOfNewSymbols) {
+ const deltaHeight = huffman ? huffmanTables.tableDeltaHeight.decode(huffmanInput) : decodeInteger(contextCache, "IADH", decoder);
+ currentHeight += deltaHeight;
+ let currentWidth = 0,
+ totalWidth = 0;
+ const firstSymbol = huffman ? symbolWidths.length : 0;
+
+ while (true) {
+ const deltaWidth = huffman ? huffmanTables.tableDeltaWidth.decode(huffmanInput) : decodeInteger(contextCache, "IADW", decoder);
+
+ if (deltaWidth === null) {
+ break;
+ }
+
+ currentWidth += deltaWidth;
+ totalWidth += currentWidth;
+ let bitmap;
+
+ if (refinement) {
+ const numberOfInstances = decodeInteger(contextCache, "IAAI", decoder);
+
+ if (numberOfInstances > 1) {
+ bitmap = decodeTextRegion(huffman, refinement, currentWidth, currentHeight, 0, numberOfInstances, 1, symbols.concat(newSymbols), symbolCodeLength, 0, 0, 1, 0, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext, 0, huffmanInput);
+ } else {
+ const symbolId = decodeIAID(contextCache, decoder, symbolCodeLength);
+ const rdx = decodeInteger(contextCache, "IARDX", decoder);
+ const rdy = decodeInteger(contextCache, "IARDY", decoder);
+ const symbol = symbolId < symbols.length ? symbols[symbolId] : newSymbols[symbolId - symbols.length];
+ bitmap = decodeRefinement(currentWidth, currentHeight, refinementTemplateIndex, symbol, rdx, rdy, false, refinementAt, decodingContext);
+ }
+
+ newSymbols.push(bitmap);
+ } else if (huffman) {
+ symbolWidths.push(currentWidth);
+ } else {
+ bitmap = decodeBitmap(false, currentWidth, currentHeight, templateIndex, false, null, at, decodingContext);
+ newSymbols.push(bitmap);
+ }
}
- var strings = [proto[0][0] || "Original licence", proto[0][1] || name, proto[0][2] || "Unknown", proto[0][3] || "uniqueID", proto[0][4] || name, proto[0][5] || "Version 0.11", proto[0][6] || "", proto[0][7] || "Unknown", proto[0][8] || "Unknown", proto[0][9] || "Unknown"];
- var stringsUnicode = [];
- var i, ii, j, jj, str;
+ if (huffman && !refinement) {
+ const bitmapSize = huffmanTables.tableBitmapSize.decode(huffmanInput);
+ huffmanInput.byteAlign();
+ let collectiveBitmap;
- for (i = 0, ii = strings.length; i < ii; i++) {
- str = proto[1][i] || strings[i];
- var strBufUnicode = [];
+ if (bitmapSize === 0) {
+ collectiveBitmap = readUncompressedBitmap(huffmanInput, totalWidth, currentHeight);
+ } else {
+ const originalEnd = huffmanInput.end;
+ const bitmapEnd = huffmanInput.position + bitmapSize;
+ huffmanInput.end = bitmapEnd;
+ collectiveBitmap = decodeMMRBitmap(huffmanInput, totalWidth, currentHeight, false);
+ huffmanInput.end = originalEnd;
+ huffmanInput.position = bitmapEnd;
+ }
+
+ const numberOfSymbolsDecoded = symbolWidths.length;
+
+ if (firstSymbol === numberOfSymbolsDecoded - 1) {
+ newSymbols.push(collectiveBitmap);
+ } else {
+ let i,
+ y,
+ xMin = 0,
+ xMax,
+ bitmapWidth,
+ symbolBitmap;
+
+ for (i = firstSymbol; i < numberOfSymbolsDecoded; i++) {
+ bitmapWidth = symbolWidths[i];
+ xMax = xMin + bitmapWidth;
+ symbolBitmap = [];
+
+ for (y = 0; y < currentHeight; y++) {
+ symbolBitmap.push(collectiveBitmap[y].subarray(xMin, xMax));
+ }
- for (j = 0, jj = str.length; j < jj; j++) {
- strBufUnicode.push(string16(str.charCodeAt(j)));
+ newSymbols.push(symbolBitmap);
+ xMin = xMax;
+ }
}
+ }
+ }
+
+ const exportedSymbols = [],
+ flags = [];
+ let currentFlag = false,
+ i,
+ ii;
+ const totalSymbolsLength = symbols.length + numberOfNewSymbols;
+
+ while (flags.length < totalSymbolsLength) {
+ let runLength = huffman ? tableB1.decode(huffmanInput) : decodeInteger(contextCache, "IAEX", decoder);
+
+ while (runLength--) {
+ flags.push(currentFlag);
+ }
+
+ currentFlag = !currentFlag;
+ }
- stringsUnicode.push(strBufUnicode.join(""));
+ for (i = 0, ii = symbols.length; i < ii; i++) {
+ if (flags[i]) {
+ exportedSymbols.push(symbols[i]);
}
+ }
+
+ for (let j = 0; j < numberOfNewSymbols; i++, j++) {
+ if (flags[i]) {
+ exportedSymbols.push(newSymbols[j]);
+ }
+ }
+
+ return exportedSymbols;
+}
+
+function decodeTextRegion(huffman, refinement, width, height, defaultPixelValue, numberOfSymbolInstances, stripSize, inputSymbols, symbolCodeLength, transposed, dsOffset, referenceCorner, combinationOperator, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext, logStripSize, huffmanInput) {
+ if (huffman && refinement) {
+ throw new Jbig2Error("refinement with Huffman is not supported");
+ }
- var names = [strings, stringsUnicode];
- var platforms = ["\x00\x01", "\x00\x03"];
- var encodings = ["\x00\x00", "\x00\x01"];
- var languages = ["\x00\x00", "\x04\x09"];
- var namesRecordCount = strings.length * platforms.length;
- var nameTable = "\x00\x00" + string16(namesRecordCount) + string16(namesRecordCount * 12 + 6);
- var strOffset = 0;
+ const bitmap = [];
+ let i, row;
- for (i = 0, ii = platforms.length; i < ii; i++) {
- var strs = names[i];
+ for (i = 0; i < height; i++) {
+ row = new Uint8Array(width);
- for (j = 0, jj = strs.length; j < jj; j++) {
- str = strs[j];
- var nameRecord = platforms[i] + encodings[i] + languages[i] + string16(j) + string16(str.length) + string16(strOffset);
- nameTable += nameRecord;
- strOffset += str.length;
+ if (defaultPixelValue) {
+ for (let j = 0; j < width; j++) {
+ row[j] = defaultPixelValue;
}
}
- nameTable += strings.join("") + stringsUnicode.join("");
- return nameTable;
+ bitmap.push(row);
}
- Font.prototype = {
- name: null,
- font: null,
- mimetype: null,
- disableFontFace: false,
+ const decoder = decodingContext.decoder;
+ const contextCache = decodingContext.contextCache;
+ let stripT = huffman ? -huffmanTables.tableDeltaT.decode(huffmanInput) : -decodeInteger(contextCache, "IADT", decoder);
+ let firstS = 0;
+ i = 0;
- get renderer() {
- var renderer = _font_renderer.FontRendererFactory.create(this, SEAC_ANALYSIS_ENABLED);
+ while (i < numberOfSymbolInstances) {
+ const deltaT = huffman ? huffmanTables.tableDeltaT.decode(huffmanInput) : decodeInteger(contextCache, "IADT", decoder);
+ stripT += deltaT;
+ const deltaFirstS = huffman ? huffmanTables.tableFirstS.decode(huffmanInput) : decodeInteger(contextCache, "IAFS", decoder);
+ firstS += deltaFirstS;
+ let currentS = firstS;
- return (0, _util.shadow)(this, "renderer", renderer);
- },
+ do {
+ let currentT = 0;
+
+ if (stripSize > 1) {
+ currentT = huffman ? huffmanInput.readBits(logStripSize) : decodeInteger(contextCache, "IAIT", decoder);
+ }
+
+ const t = stripSize * stripT + currentT;
+ const symbolId = huffman ? huffmanTables.symbolIDTable.decode(huffmanInput) : decodeIAID(contextCache, decoder, symbolCodeLength);
+ const applyRefinement = refinement && (huffman ? huffmanInput.readBit() : decodeInteger(contextCache, "IARI", decoder));
+ let symbolBitmap = inputSymbols[symbolId];
+ let symbolWidth = symbolBitmap[0].length;
+ let symbolHeight = symbolBitmap.length;
+
+ if (applyRefinement) {
+ const rdw = decodeInteger(contextCache, "IARDW", decoder);
+ const rdh = decodeInteger(contextCache, "IARDH", decoder);
+ const rdx = decodeInteger(contextCache, "IARDX", decoder);
+ const rdy = decodeInteger(contextCache, "IARDY", decoder);
+ symbolWidth += rdw;
+ symbolHeight += rdh;
+ symbolBitmap = decodeRefinement(symbolWidth, symbolHeight, refinementTemplateIndex, symbolBitmap, (rdw >> 1) + rdx, (rdh >> 1) + rdy, false, refinementAt, decodingContext);
+ }
+
+ const offsetT = t - (referenceCorner & 1 ? 0 : symbolHeight - 1);
+ const offsetS = currentS - (referenceCorner & 2 ? symbolWidth - 1 : 0);
+ let s2, t2, symbolRow;
+
+ if (transposed) {
+ for (s2 = 0; s2 < symbolHeight; s2++) {
+ row = bitmap[offsetS + s2];
+
+ if (!row) {
+ continue;
+ }
+
+ symbolRow = symbolBitmap[s2];
+ const maxWidth = Math.min(width - offsetT, symbolWidth);
+
+ switch (combinationOperator) {
+ case 0:
+ for (t2 = 0; t2 < maxWidth; t2++) {
+ row[offsetT + t2] |= symbolRow[t2];
+ }
+
+ break;
+
+ case 2:
+ for (t2 = 0; t2 < maxWidth; t2++) {
+ row[offsetT + t2] ^= symbolRow[t2];
+ }
+
+ break;
+
+ default:
+ throw new Jbig2Error(`operator ${combinationOperator} is not supported`);
+ }
+ }
+
+ currentS += symbolHeight - 1;
+ } else {
+ for (t2 = 0; t2 < symbolHeight; t2++) {
+ row = bitmap[offsetT + t2];
+
+ if (!row) {
+ continue;
+ }
+
+ symbolRow = symbolBitmap[t2];
+
+ switch (combinationOperator) {
+ case 0:
+ for (s2 = 0; s2 < symbolWidth; s2++) {
+ row[offsetS + s2] |= symbolRow[s2];
+ }
+
+ break;
- exportData(extraProperties = false) {
- const exportDataProperties = extraProperties ? [...EXPORT_DATA_PROPERTIES, ...EXPORT_DATA_EXTRA_PROPERTIES] : EXPORT_DATA_PROPERTIES;
- const data = Object.create(null);
- let property, value;
+ case 2:
+ for (s2 = 0; s2 < symbolWidth; s2++) {
+ row[offsetS + s2] ^= symbolRow[s2];
+ }
- for (property of exportDataProperties) {
- value = this[property];
+ break;
- if (value !== undefined) {
- data[property] = value;
+ default:
+ throw new Jbig2Error(`operator ${combinationOperator} is not supported`);
+ }
}
+
+ currentS += symbolWidth - 1;
}
- return data;
- },
+ i++;
+ const deltaS = huffman ? huffmanTables.tableDeltaS.decode(huffmanInput) : decodeInteger(contextCache, "IADS", decoder);
- fallbackToSystemFont: function Font_fallbackToSystemFont() {
- this.missingFile = true;
- var name = this.name;
- var type = this.type;
- var subtype = this.subtype;
- let fontName = name.replace(/[,_]/g, "-").replace(/\s/g, "");
- var stdFontMap = (0, _standard_fonts.getStdFontMap)(),
- nonStdFontMap = (0, _standard_fonts.getNonStdFontMap)();
- var isStandardFont = !!stdFontMap[fontName] || !!(nonStdFontMap[fontName] && stdFontMap[nonStdFontMap[fontName]]);
- fontName = stdFontMap[fontName] || nonStdFontMap[fontName] || fontName;
- this.bold = fontName.search(/bold/gi) !== -1;
- this.italic = fontName.search(/oblique/gi) !== -1 || fontName.search(/italic/gi) !== -1;
- this.black = name.search(/Black/g) !== -1;
- this.remeasure = Object.keys(this.widths).length > 0;
+ if (deltaS === null) {
+ break;
+ }
+
+ currentS += deltaS + dsOffset;
+ } while (true);
+ }
+
+ return bitmap;
+}
+
+function decodePatternDictionary(mmr, patternWidth, patternHeight, maxPatternIndex, template, decodingContext) {
+ const at = [];
+
+ if (!mmr) {
+ at.push({
+ x: -patternWidth,
+ y: 0
+ });
+
+ if (template === 0) {
+ at.push({
+ x: -3,
+ y: -1
+ }, {
+ x: 2,
+ y: -2
+ }, {
+ x: -2,
+ y: -2
+ });
+ }
+ }
- if (isStandardFont && type === "CIDFontType2" && this.cidEncoding.startsWith("Identity-")) {
- const GlyphMapForStandardFonts = (0, _standard_fonts.getGlyphMapForStandardFonts)();
- const map = [];
+ const collectiveWidth = (maxPatternIndex + 1) * patternWidth;
+ const collectiveBitmap = decodeBitmap(mmr, collectiveWidth, patternHeight, template, false, null, at, decodingContext);
+ const patterns = [];
- for (const charCode in GlyphMapForStandardFonts) {
- map[+charCode] = GlyphMapForStandardFonts[charCode];
+ for (let i = 0; i <= maxPatternIndex; i++) {
+ const patternBitmap = [];
+ const xMin = patternWidth * i;
+ const xMax = xMin + patternWidth;
+
+ for (let y = 0; y < patternHeight; y++) {
+ patternBitmap.push(collectiveBitmap[y].subarray(xMin, xMax));
+ }
+
+ patterns.push(patternBitmap);
+ }
+
+ return patterns;
+}
+
+function decodeHalftoneRegion(mmr, patterns, template, regionWidth, regionHeight, defaultPixelValue, enableSkip, combinationOperator, gridWidth, gridHeight, gridOffsetX, gridOffsetY, gridVectorX, gridVectorY, decodingContext) {
+ const skip = null;
+
+ if (enableSkip) {
+ throw new Jbig2Error("skip is not supported");
+ }
+
+ if (combinationOperator !== 0) {
+ throw new Jbig2Error(`operator "${combinationOperator}" is not supported in halftone region`);
+ }
+
+ const regionBitmap = [];
+ let i, j, row;
+
+ for (i = 0; i < regionHeight; i++) {
+ row = new Uint8Array(regionWidth);
+
+ if (defaultPixelValue) {
+ for (j = 0; j < regionWidth; j++) {
+ row[j] = defaultPixelValue;
+ }
+ }
+
+ regionBitmap.push(row);
+ }
+
+ const numberOfPatterns = patterns.length;
+ const pattern0 = patterns[0];
+ const patternWidth = pattern0[0].length,
+ patternHeight = pattern0.length;
+ const bitsPerValue = (0, _core_utils.log2)(numberOfPatterns);
+ const at = [];
+
+ if (!mmr) {
+ at.push({
+ x: template <= 1 ? 3 : 2,
+ y: -1
+ });
+
+ if (template === 0) {
+ at.push({
+ x: -3,
+ y: -1
+ }, {
+ x: 2,
+ y: -2
+ }, {
+ x: -2,
+ y: -2
+ });
+ }
+ }
+
+ const grayScaleBitPlanes = [];
+ let mmrInput, bitmap;
+
+ if (mmr) {
+ mmrInput = new Reader(decodingContext.data, decodingContext.start, decodingContext.end);
+ }
+
+ for (i = bitsPerValue - 1; i >= 0; i--) {
+ if (mmr) {
+ bitmap = decodeMMRBitmap(mmrInput, gridWidth, gridHeight, true);
+ } else {
+ bitmap = decodeBitmap(false, gridWidth, gridHeight, template, false, skip, at, decodingContext);
+ }
+
+ grayScaleBitPlanes[i] = bitmap;
+ }
+
+ let mg, ng, bit, patternIndex, patternBitmap, x, y, patternRow, regionRow;
+
+ for (mg = 0; mg < gridHeight; mg++) {
+ for (ng = 0; ng < gridWidth; ng++) {
+ bit = 0;
+ patternIndex = 0;
+
+ for (j = bitsPerValue - 1; j >= 0; j--) {
+ bit ^= grayScaleBitPlanes[j][mg][ng];
+ patternIndex |= bit << j;
+ }
+
+ patternBitmap = patterns[patternIndex];
+ x = gridOffsetX + mg * gridVectorY + ng * gridVectorX >> 8;
+ y = gridOffsetY + mg * gridVectorX - ng * gridVectorY >> 8;
+
+ if (x >= 0 && x + patternWidth <= regionWidth && y >= 0 && y + patternHeight <= regionHeight) {
+ for (i = 0; i < patternHeight; i++) {
+ regionRow = regionBitmap[y + i];
+ patternRow = patternBitmap[i];
+
+ for (j = 0; j < patternWidth; j++) {
+ regionRow[x + j] |= patternRow[j];
+ }
}
+ } else {
+ let regionX, regionY;
- if (/Arial-?Black/i.test(name)) {
- var SupplementalGlyphMapForArialBlack = (0, _standard_fonts.getSupplementalGlyphMapForArialBlack)();
+ for (i = 0; i < patternHeight; i++) {
+ regionY = y + i;
- for (const charCode in SupplementalGlyphMapForArialBlack) {
- map[+charCode] = SupplementalGlyphMapForArialBlack[charCode];
+ if (regionY < 0 || regionY >= regionHeight) {
+ continue;
}
- } else if (/Calibri/i.test(name)) {
- const SupplementalGlyphMapForCalibri = (0, _standard_fonts.getSupplementalGlyphMapForCalibri)();
- for (const charCode in SupplementalGlyphMapForCalibri) {
- map[+charCode] = SupplementalGlyphMapForCalibri[charCode];
+ regionRow = regionBitmap[regionY];
+ patternRow = patternBitmap[i];
+
+ for (j = 0; j < patternWidth; j++) {
+ regionX = x + j;
+
+ if (regionX >= 0 && regionX < regionWidth) {
+ regionRow[regionX] |= patternRow[j];
+ }
}
}
+ }
+ }
+ }
+
+ return regionBitmap;
+}
+
+function readSegmentHeader(data, start) {
+ const segmentHeader = {};
+ segmentHeader.number = (0, _core_utils.readUint32)(data, start);
+ const flags = data[start + 4];
+ const segmentType = flags & 0x3f;
+
+ if (!SegmentTypes[segmentType]) {
+ throw new Jbig2Error("invalid segment type: " + segmentType);
+ }
+
+ segmentHeader.type = segmentType;
+ segmentHeader.typeName = SegmentTypes[segmentType];
+ segmentHeader.deferredNonRetain = !!(flags & 0x80);
+ const pageAssociationFieldSize = !!(flags & 0x40);
+ const referredFlags = data[start + 5];
+ let referredToCount = referredFlags >> 5 & 7;
+ const retainBits = [referredFlags & 31];
+ let position = start + 6;
+
+ if (referredFlags === 7) {
+ referredToCount = (0, _core_utils.readUint32)(data, position - 1) & 0x1fffffff;
+ position += 3;
+ let bytes = referredToCount + 7 >> 3;
+ retainBits[0] = data[position++];
+
+ while (--bytes > 0) {
+ retainBits.push(data[position++]);
+ }
+ } else if (referredFlags === 5 || referredFlags === 6) {
+ throw new Jbig2Error("invalid referred-to flags");
+ }
+
+ segmentHeader.retainBits = retainBits;
+ let referredToSegmentNumberSize = 4;
+
+ if (segmentHeader.number <= 256) {
+ referredToSegmentNumberSize = 1;
+ } else if (segmentHeader.number <= 65536) {
+ referredToSegmentNumberSize = 2;
+ }
+
+ const referredTo = [];
+ let i, ii;
+
+ for (i = 0; i < referredToCount; i++) {
+ let number;
+
+ if (referredToSegmentNumberSize === 1) {
+ number = data[position];
+ } else if (referredToSegmentNumberSize === 2) {
+ number = (0, _core_utils.readUint16)(data, position);
+ } else {
+ number = (0, _core_utils.readUint32)(data, position);
+ }
+
+ referredTo.push(number);
+ position += referredToSegmentNumberSize;
+ }
+
+ segmentHeader.referredTo = referredTo;
+
+ if (!pageAssociationFieldSize) {
+ segmentHeader.pageAssociation = data[position++];
+ } else {
+ segmentHeader.pageAssociation = (0, _core_utils.readUint32)(data, position);
+ position += 4;
+ }
+
+ segmentHeader.length = (0, _core_utils.readUint32)(data, position);
+ position += 4;
+
+ if (segmentHeader.length === 0xffffffff) {
+ if (segmentType === 38) {
+ const genericRegionInfo = readRegionSegmentInformation(data, position);
+ const genericRegionSegmentFlags = data[position + RegionSegmentInformationFieldLength];
+ const genericRegionMmr = !!(genericRegionSegmentFlags & 1);
+ const searchPatternLength = 6;
+ const searchPattern = new Uint8Array(searchPatternLength);
+
+ if (!genericRegionMmr) {
+ searchPattern[0] = 0xff;
+ searchPattern[1] = 0xac;
+ }
+
+ searchPattern[2] = genericRegionInfo.height >>> 24 & 0xff;
+ searchPattern[3] = genericRegionInfo.height >> 16 & 0xff;
+ searchPattern[4] = genericRegionInfo.height >> 8 & 0xff;
+ searchPattern[5] = genericRegionInfo.height & 0xff;
+
+ for (i = position, ii = data.length; i < ii; i++) {
+ let j = 0;
+
+ while (j < searchPatternLength && searchPattern[j] === data[i + j]) {
+ j++;
+ }
+
+ if (j === searchPatternLength) {
+ segmentHeader.length = i + searchPatternLength;
+ break;
+ }
+ }
+
+ if (segmentHeader.length === 0xffffffff) {
+ throw new Jbig2Error("segment end was not found");
+ }
+ } else {
+ throw new Jbig2Error("invalid unknown segment length");
+ }
+ }
+
+ segmentHeader.headerEnd = position;
+ return segmentHeader;
+}
+
+function readSegments(header, data, start, end) {
+ const segments = [];
+ let position = start;
+
+ while (position < end) {
+ const segmentHeader = readSegmentHeader(data, position);
+ position = segmentHeader.headerEnd;
+ const segment = {
+ header: segmentHeader,
+ data
+ };
+
+ if (!header.randomAccess) {
+ segment.start = position;
+ position += segmentHeader.length;
+ segment.end = position;
+ }
+
+ segments.push(segment);
+
+ if (segmentHeader.type === 51) {
+ break;
+ }
+ }
+
+ if (header.randomAccess) {
+ for (let i = 0, ii = segments.length; i < ii; i++) {
+ segments[i].start = position;
+ position += segments[i].header.length;
+ segments[i].end = position;
+ }
+ }
+
+ return segments;
+}
+
+function readRegionSegmentInformation(data, start) {
+ return {
+ width: (0, _core_utils.readUint32)(data, start),
+ height: (0, _core_utils.readUint32)(data, start + 4),
+ x: (0, _core_utils.readUint32)(data, start + 8),
+ y: (0, _core_utils.readUint32)(data, start + 12),
+ combinationOperator: data[start + 16] & 7
+ };
+}
- var isIdentityUnicode = this.toUnicode instanceof IdentityToUnicodeMap;
+const RegionSegmentInformationFieldLength = 17;
- if (!isIdentityUnicode) {
- this.toUnicode.forEach(function (charCode, unicodeCharCode) {
- map[+charCode] = unicodeCharCode;
+function processSegment(segment, visitor) {
+ const header = segment.header;
+ const data = segment.data,
+ end = segment.end;
+ let position = segment.start;
+ let args, at, i, atLength;
+
+ switch (header.type) {
+ case 0:
+ const dictionary = {};
+ const dictionaryFlags = (0, _core_utils.readUint16)(data, position);
+ dictionary.huffman = !!(dictionaryFlags & 1);
+ dictionary.refinement = !!(dictionaryFlags & 2);
+ dictionary.huffmanDHSelector = dictionaryFlags >> 2 & 3;
+ dictionary.huffmanDWSelector = dictionaryFlags >> 4 & 3;
+ dictionary.bitmapSizeSelector = dictionaryFlags >> 6 & 1;
+ dictionary.aggregationInstancesSelector = dictionaryFlags >> 7 & 1;
+ dictionary.bitmapCodingContextUsed = !!(dictionaryFlags & 256);
+ dictionary.bitmapCodingContextRetained = !!(dictionaryFlags & 512);
+ dictionary.template = dictionaryFlags >> 10 & 3;
+ dictionary.refinementTemplate = dictionaryFlags >> 12 & 1;
+ position += 2;
+
+ if (!dictionary.huffman) {
+ atLength = dictionary.template === 0 ? 4 : 1;
+ at = [];
+
+ for (i = 0; i < atLength; i++) {
+ at.push({
+ x: (0, _core_utils.readInt8)(data, position),
+ y: (0, _core_utils.readInt8)(data, position + 1)
});
+ position += 2;
}
- this.toFontChar = map;
- this.toUnicode = new ToUnicodeMap(map);
- } else if (/Symbol/i.test(fontName)) {
- this.toFontChar = buildToFontChar(_encodings.SymbolSetEncoding, (0, _glyphlist.getGlyphsUnicode)(), this.differences);
- } else if (/Dingbats/i.test(fontName)) {
- if (/Wingdings/i.test(name)) {
- (0, _util.warn)("Non-embedded Wingdings font, falling back to ZapfDingbats.");
+ dictionary.at = at;
+ }
+
+ if (dictionary.refinement && !dictionary.refinementTemplate) {
+ at = [];
+
+ for (i = 0; i < 2; i++) {
+ at.push({
+ x: (0, _core_utils.readInt8)(data, position),
+ y: (0, _core_utils.readInt8)(data, position + 1)
+ });
+ position += 2;
}
- this.toFontChar = buildToFontChar(_encodings.ZapfDingbatsEncoding, (0, _glyphlist.getDingbatsGlyphsUnicode)(), this.differences);
- } else if (isStandardFont) {
- this.toFontChar = buildToFontChar(this.defaultEncoding, (0, _glyphlist.getGlyphsUnicode)(), this.differences);
- } else {
- const glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();
- const map = [];
- this.toUnicode.forEach((charCode, unicodeCharCode) => {
- if (!this.composite) {
- var glyphName = this.differences[charCode] || this.defaultEncoding[charCode];
- const unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap);
+ dictionary.refinementAt = at;
+ }
- if (unicode !== -1) {
- unicodeCharCode = unicode;
+ dictionary.numberOfExportedSymbols = (0, _core_utils.readUint32)(data, position);
+ position += 4;
+ dictionary.numberOfNewSymbols = (0, _core_utils.readUint32)(data, position);
+ position += 4;
+ args = [dictionary, header.number, header.referredTo, data, position, end];
+ break;
+
+ case 6:
+ case 7:
+ const textRegion = {};
+ textRegion.info = readRegionSegmentInformation(data, position);
+ position += RegionSegmentInformationFieldLength;
+ const textRegionSegmentFlags = (0, _core_utils.readUint16)(data, position);
+ position += 2;
+ textRegion.huffman = !!(textRegionSegmentFlags & 1);
+ textRegion.refinement = !!(textRegionSegmentFlags & 2);
+ textRegion.logStripSize = textRegionSegmentFlags >> 2 & 3;
+ textRegion.stripSize = 1 << textRegion.logStripSize;
+ textRegion.referenceCorner = textRegionSegmentFlags >> 4 & 3;
+ textRegion.transposed = !!(textRegionSegmentFlags & 64);
+ textRegion.combinationOperator = textRegionSegmentFlags >> 7 & 3;
+ textRegion.defaultPixelValue = textRegionSegmentFlags >> 9 & 1;
+ textRegion.dsOffset = textRegionSegmentFlags << 17 >> 27;
+ textRegion.refinementTemplate = textRegionSegmentFlags >> 15 & 1;
+
+ if (textRegion.huffman) {
+ const textRegionHuffmanFlags = (0, _core_utils.readUint16)(data, position);
+ position += 2;
+ textRegion.huffmanFS = textRegionHuffmanFlags & 3;
+ textRegion.huffmanDS = textRegionHuffmanFlags >> 2 & 3;
+ textRegion.huffmanDT = textRegionHuffmanFlags >> 4 & 3;
+ textRegion.huffmanRefinementDW = textRegionHuffmanFlags >> 6 & 3;
+ textRegion.huffmanRefinementDH = textRegionHuffmanFlags >> 8 & 3;
+ textRegion.huffmanRefinementDX = textRegionHuffmanFlags >> 10 & 3;
+ textRegion.huffmanRefinementDY = textRegionHuffmanFlags >> 12 & 3;
+ textRegion.huffmanRefinementSizeSelector = !!(textRegionHuffmanFlags & 0x4000);
+ }
+
+ if (textRegion.refinement && !textRegion.refinementTemplate) {
+ at = [];
+
+ for (i = 0; i < 2; i++) {
+ at.push({
+ x: (0, _core_utils.readInt8)(data, position),
+ y: (0, _core_utils.readInt8)(data, position + 1)
+ });
+ position += 2;
+ }
+
+ textRegion.refinementAt = at;
+ }
+
+ textRegion.numberOfSymbolInstances = (0, _core_utils.readUint32)(data, position);
+ position += 4;
+ args = [textRegion, header.referredTo, data, position, end];
+ break;
+
+ case 16:
+ const patternDictionary = {};
+ const patternDictionaryFlags = data[position++];
+ patternDictionary.mmr = !!(patternDictionaryFlags & 1);
+ patternDictionary.template = patternDictionaryFlags >> 1 & 3;
+ patternDictionary.patternWidth = data[position++];
+ patternDictionary.patternHeight = data[position++];
+ patternDictionary.maxPatternIndex = (0, _core_utils.readUint32)(data, position);
+ position += 4;
+ args = [patternDictionary, header.number, data, position, end];
+ break;
+
+ case 22:
+ case 23:
+ const halftoneRegion = {};
+ halftoneRegion.info = readRegionSegmentInformation(data, position);
+ position += RegionSegmentInformationFieldLength;
+ const halftoneRegionFlags = data[position++];
+ halftoneRegion.mmr = !!(halftoneRegionFlags & 1);
+ halftoneRegion.template = halftoneRegionFlags >> 1 & 3;
+ halftoneRegion.enableSkip = !!(halftoneRegionFlags & 8);
+ halftoneRegion.combinationOperator = halftoneRegionFlags >> 4 & 7;
+ halftoneRegion.defaultPixelValue = halftoneRegionFlags >> 7 & 1;
+ halftoneRegion.gridWidth = (0, _core_utils.readUint32)(data, position);
+ position += 4;
+ halftoneRegion.gridHeight = (0, _core_utils.readUint32)(data, position);
+ position += 4;
+ halftoneRegion.gridOffsetX = (0, _core_utils.readUint32)(data, position) & 0xffffffff;
+ position += 4;
+ halftoneRegion.gridOffsetY = (0, _core_utils.readUint32)(data, position) & 0xffffffff;
+ position += 4;
+ halftoneRegion.gridVectorX = (0, _core_utils.readUint16)(data, position);
+ position += 2;
+ halftoneRegion.gridVectorY = (0, _core_utils.readUint16)(data, position);
+ position += 2;
+ args = [halftoneRegion, header.referredTo, data, position, end];
+ break;
+
+ case 38:
+ case 39:
+ const genericRegion = {};
+ genericRegion.info = readRegionSegmentInformation(data, position);
+ position += RegionSegmentInformationFieldLength;
+ const genericRegionSegmentFlags = data[position++];
+ genericRegion.mmr = !!(genericRegionSegmentFlags & 1);
+ genericRegion.template = genericRegionSegmentFlags >> 1 & 3;
+ genericRegion.prediction = !!(genericRegionSegmentFlags & 8);
+
+ if (!genericRegion.mmr) {
+ atLength = genericRegion.template === 0 ? 4 : 1;
+ at = [];
+
+ for (i = 0; i < atLength; i++) {
+ at.push({
+ x: (0, _core_utils.readInt8)(data, position),
+ y: (0, _core_utils.readInt8)(data, position + 1)
+ });
+ position += 2;
+ }
+
+ genericRegion.at = at;
+ }
+
+ args = [genericRegion, data, position, end];
+ break;
+
+ case 48:
+ const pageInfo = {
+ width: (0, _core_utils.readUint32)(data, position),
+ height: (0, _core_utils.readUint32)(data, position + 4),
+ resolutionX: (0, _core_utils.readUint32)(data, position + 8),
+ resolutionY: (0, _core_utils.readUint32)(data, position + 12)
+ };
+
+ if (pageInfo.height === 0xffffffff) {
+ delete pageInfo.height;
+ }
+
+ const pageSegmentFlags = data[position + 16];
+ (0, _core_utils.readUint16)(data, position + 17);
+ pageInfo.lossless = !!(pageSegmentFlags & 1);
+ pageInfo.refinement = !!(pageSegmentFlags & 2);
+ pageInfo.defaultPixelValue = pageSegmentFlags >> 2 & 1;
+ pageInfo.combinationOperator = pageSegmentFlags >> 3 & 3;
+ pageInfo.requiresBuffer = !!(pageSegmentFlags & 32);
+ pageInfo.combinationOperatorOverride = !!(pageSegmentFlags & 64);
+ args = [pageInfo];
+ break;
+
+ case 49:
+ break;
+
+ case 50:
+ break;
+
+ case 51:
+ break;
+
+ case 53:
+ args = [header.number, data, position, end];
+ break;
+
+ case 62:
+ break;
+
+ default:
+ throw new Jbig2Error(`segment type ${header.typeName}(${header.type})` + " is not implemented");
+ }
+
+ const callbackName = "on" + header.typeName;
+
+ if (callbackName in visitor) {
+ visitor[callbackName].apply(visitor, args);
+ }
+}
+
+function processSegments(segments, visitor) {
+ for (let i = 0, ii = segments.length; i < ii; i++) {
+ processSegment(segments[i], visitor);
+ }
+}
+
+function parseJbig2Chunks(chunks) {
+ const visitor = new SimpleSegmentVisitor();
+
+ for (let i = 0, ii = chunks.length; i < ii; i++) {
+ const chunk = chunks[i];
+ const segments = readSegments({}, chunk.data, chunk.start, chunk.end);
+ processSegments(segments, visitor);
+ }
+
+ return visitor.buffer;
+}
+
+function parseJbig2(data) {
+ const end = data.length;
+ let position = 0;
+
+ if (data[position] !== 0x97 || data[position + 1] !== 0x4a || data[position + 2] !== 0x42 || data[position + 3] !== 0x32 || data[position + 4] !== 0x0d || data[position + 5] !== 0x0a || data[position + 6] !== 0x1a || data[position + 7] !== 0x0a) {
+ throw new Jbig2Error("parseJbig2 - invalid header.");
+ }
+
+ const header = Object.create(null);
+ position += 8;
+ const flags = data[position++];
+ header.randomAccess = !(flags & 1);
+
+ if (!(flags & 2)) {
+ header.numberOfPages = (0, _core_utils.readUint32)(data, position);
+ position += 4;
+ }
+
+ const segments = readSegments(header, data, position, end);
+ const visitor = new SimpleSegmentVisitor();
+ processSegments(segments, visitor);
+ const {
+ width,
+ height
+ } = visitor.currentPageInfo;
+ const bitPacked = visitor.buffer;
+ const imgData = new Uint8ClampedArray(width * height);
+ let q = 0,
+ k = 0;
+
+ for (let i = 0; i < height; i++) {
+ let mask = 0,
+ buffer;
+
+ for (let j = 0; j < width; j++) {
+ if (!mask) {
+ mask = 128;
+ buffer = bitPacked[k++];
+ }
+
+ imgData[q++] = buffer & mask ? 0 : 255;
+ mask >>= 1;
+ }
+ }
+
+ return {
+ imgData,
+ width,
+ height
+ };
+}
+
+class SimpleSegmentVisitor {
+ onPageInformation(info) {
+ this.currentPageInfo = info;
+ const rowSize = info.width + 7 >> 3;
+ const buffer = new Uint8ClampedArray(rowSize * info.height);
+
+ if (info.defaultPixelValue) {
+ for (let i = 0, ii = buffer.length; i < ii; i++) {
+ buffer[i] = 0xff;
+ }
+ }
+
+ this.buffer = buffer;
+ }
+
+ drawBitmap(regionInfo, bitmap) {
+ const pageInfo = this.currentPageInfo;
+ const width = regionInfo.width,
+ height = regionInfo.height;
+ const rowSize = pageInfo.width + 7 >> 3;
+ const combinationOperator = pageInfo.combinationOperatorOverride ? regionInfo.combinationOperator : pageInfo.combinationOperator;
+ const buffer = this.buffer;
+ const mask0 = 128 >> (regionInfo.x & 7);
+ let offset0 = regionInfo.y * rowSize + (regionInfo.x >> 3);
+ let i, j, mask, offset;
+
+ switch (combinationOperator) {
+ case 0:
+ for (i = 0; i < height; i++) {
+ mask = mask0;
+ offset = offset0;
+
+ for (j = 0; j < width; j++) {
+ if (bitmap[i][j]) {
+ buffer[offset] |= mask;
+ }
+
+ mask >>= 1;
+
+ if (!mask) {
+ mask = 128;
+ offset++;
}
}
- map[+charCode] = unicodeCharCode;
- });
+ offset0 += rowSize;
+ }
+
+ break;
+
+ case 2:
+ for (i = 0; i < height; i++) {
+ mask = mask0;
+ offset = offset0;
+
+ for (j = 0; j < width; j++) {
+ if (bitmap[i][j]) {
+ buffer[offset] ^= mask;
+ }
- if (this.composite && this.toUnicode instanceof IdentityToUnicodeMap) {
- if (/Verdana/i.test(name)) {
- const GlyphMapForStandardFonts = (0, _standard_fonts.getGlyphMapForStandardFonts)();
+ mask >>= 1;
- for (const charCode in GlyphMapForStandardFonts) {
- map[+charCode] = GlyphMapForStandardFonts[charCode];
+ if (!mask) {
+ mask = 128;
+ offset++;
}
}
+
+ offset0 += rowSize;
}
- this.toFontChar = map;
+ break;
+
+ default:
+ throw new Jbig2Error(`operator ${combinationOperator} is not supported`);
+ }
+ }
+
+ onImmediateGenericRegion(region, data, start, end) {
+ const regionInfo = region.info;
+ const decodingContext = new DecodingContext(data, start, end);
+ const bitmap = decodeBitmap(region.mmr, regionInfo.width, regionInfo.height, region.template, region.prediction, null, region.at, decodingContext);
+ this.drawBitmap(regionInfo, bitmap);
+ }
+
+ onImmediateLosslessGenericRegion() {
+ this.onImmediateGenericRegion.apply(this, arguments);
+ }
+
+ onSymbolDictionary(dictionary, currentSegment, referredSegments, data, start, end) {
+ let huffmanTables, huffmanInput;
+
+ if (dictionary.huffman) {
+ huffmanTables = getSymbolDictionaryHuffmanTables(dictionary, referredSegments, this.customTables);
+ huffmanInput = new Reader(data, start, end);
+ }
+
+ let symbols = this.symbols;
+
+ if (!symbols) {
+ this.symbols = symbols = {};
+ }
+
+ let inputSymbols = [];
+
+ for (let i = 0, ii = referredSegments.length; i < ii; i++) {
+ const referredSymbols = symbols[referredSegments[i]];
+
+ if (referredSymbols) {
+ inputSymbols = inputSymbols.concat(referredSymbols);
}
+ }
- this.loadedName = fontName.split("-")[0];
- this.fontType = getFontType(type, subtype);
- },
- checkAndRepair: function Font_checkAndRepair(name, font, properties) {
- const VALID_TABLES = ["OS/2", "cmap", "head", "hhea", "hmtx", "maxp", "name", "post", "loca", "glyf", "fpgm", "prep", "cvt ", "CFF "];
-
- function readTables(file, numTables) {
- const tables = Object.create(null);
- tables["OS/2"] = null;
- tables.cmap = null;
- tables.head = null;
- tables.hhea = null;
- tables.hmtx = null;
- tables.maxp = null;
- tables.name = null;
- tables.post = null;
-
- for (let i = 0; i < numTables; i++) {
- const table = readTableEntry(file);
-
- if (!VALID_TABLES.includes(table.tag)) {
- continue;
- }
+ const decodingContext = new DecodingContext(data, start, end);
+ symbols[currentSegment] = decodeSymbolDictionary(dictionary.huffman, dictionary.refinement, inputSymbols, dictionary.numberOfNewSymbols, dictionary.numberOfExportedSymbols, huffmanTables, dictionary.template, dictionary.at, dictionary.refinementTemplate, dictionary.refinementAt, decodingContext, huffmanInput);
+ }
- if (table.length === 0) {
- continue;
+ onImmediateTextRegion(region, referredSegments, data, start, end) {
+ const regionInfo = region.info;
+ let huffmanTables, huffmanInput;
+ const symbols = this.symbols;
+ let inputSymbols = [];
+
+ for (let i = 0, ii = referredSegments.length; i < ii; i++) {
+ const referredSymbols = symbols[referredSegments[i]];
+
+ if (referredSymbols) {
+ inputSymbols = inputSymbols.concat(referredSymbols);
+ }
+ }
+
+ const symbolCodeLength = (0, _core_utils.log2)(inputSymbols.length);
+
+ if (region.huffman) {
+ huffmanInput = new Reader(data, start, end);
+ huffmanTables = getTextRegionHuffmanTables(region, referredSegments, this.customTables, inputSymbols.length, huffmanInput);
+ }
+
+ const decodingContext = new DecodingContext(data, start, end);
+ const bitmap = decodeTextRegion(region.huffman, region.refinement, regionInfo.width, regionInfo.height, region.defaultPixelValue, region.numberOfSymbolInstances, region.stripSize, inputSymbols, symbolCodeLength, region.transposed, region.dsOffset, region.referenceCorner, region.combinationOperator, huffmanTables, region.refinementTemplate, region.refinementAt, decodingContext, region.logStripSize, huffmanInput);
+ this.drawBitmap(regionInfo, bitmap);
+ }
+
+ onImmediateLosslessTextRegion() {
+ this.onImmediateTextRegion.apply(this, arguments);
+ }
+
+ onPatternDictionary(dictionary, currentSegment, data, start, end) {
+ let patterns = this.patterns;
+
+ if (!patterns) {
+ this.patterns = patterns = {};
+ }
+
+ const decodingContext = new DecodingContext(data, start, end);
+ patterns[currentSegment] = decodePatternDictionary(dictionary.mmr, dictionary.patternWidth, dictionary.patternHeight, dictionary.maxPatternIndex, dictionary.template, decodingContext);
+ }
+
+ onImmediateHalftoneRegion(region, referredSegments, data, start, end) {
+ const patterns = this.patterns[referredSegments[0]];
+ const regionInfo = region.info;
+ const decodingContext = new DecodingContext(data, start, end);
+ const bitmap = decodeHalftoneRegion(region.mmr, patterns, region.template, regionInfo.width, regionInfo.height, region.defaultPixelValue, region.enableSkip, region.combinationOperator, region.gridWidth, region.gridHeight, region.gridOffsetX, region.gridOffsetY, region.gridVectorX, region.gridVectorY, decodingContext);
+ this.drawBitmap(regionInfo, bitmap);
+ }
+
+ onImmediateLosslessHalftoneRegion() {
+ this.onImmediateHalftoneRegion.apply(this, arguments);
+ }
+
+ onTables(currentSegment, data, start, end) {
+ let customTables = this.customTables;
+
+ if (!customTables) {
+ this.customTables = customTables = {};
+ }
+
+ customTables[currentSegment] = decodeTablesSegment(data, start, end);
+ }
+
+}
+
+class HuffmanLine {
+ constructor(lineData) {
+ if (lineData.length === 2) {
+ this.isOOB = true;
+ this.rangeLow = 0;
+ this.prefixLength = lineData[0];
+ this.rangeLength = 0;
+ this.prefixCode = lineData[1];
+ this.isLowerRange = false;
+ } else {
+ this.isOOB = false;
+ this.rangeLow = lineData[0];
+ this.prefixLength = lineData[1];
+ this.rangeLength = lineData[2];
+ this.prefixCode = lineData[3];
+ this.isLowerRange = lineData[4] === "lower";
+ }
+ }
+
+}
+
+class HuffmanTreeNode {
+ constructor(line) {
+ this.children = [];
+
+ if (line) {
+ this.isLeaf = true;
+ this.rangeLength = line.rangeLength;
+ this.rangeLow = line.rangeLow;
+ this.isLowerRange = line.isLowerRange;
+ this.isOOB = line.isOOB;
+ } else {
+ this.isLeaf = false;
+ }
+ }
+
+ buildTree(line, shift) {
+ const bit = line.prefixCode >> shift & 1;
+
+ if (shift <= 0) {
+ this.children[bit] = new HuffmanTreeNode(line);
+ } else {
+ let node = this.children[bit];
+
+ if (!node) {
+ this.children[bit] = node = new HuffmanTreeNode(null);
+ }
+
+ node.buildTree(line, shift - 1);
+ }
+ }
+
+ decodeNode(reader) {
+ if (this.isLeaf) {
+ if (this.isOOB) {
+ return null;
+ }
+
+ const htOffset = reader.readBits(this.rangeLength);
+ return this.rangeLow + (this.isLowerRange ? -htOffset : htOffset);
+ }
+
+ const node = this.children[reader.readBit()];
+
+ if (!node) {
+ throw new Jbig2Error("invalid Huffman data");
+ }
+
+ return node.decodeNode(reader);
+ }
+
+}
+
+class HuffmanTable {
+ constructor(lines, prefixCodesDone) {
+ if (!prefixCodesDone) {
+ this.assignPrefixCodes(lines);
+ }
+
+ this.rootNode = new HuffmanTreeNode(null);
+
+ for (let i = 0, ii = lines.length; i < ii; i++) {
+ const line = lines[i];
+
+ if (line.prefixLength > 0) {
+ this.rootNode.buildTree(line, line.prefixLength - 1);
+ }
+ }
+ }
+
+ decode(reader) {
+ return this.rootNode.decodeNode(reader);
+ }
+
+ assignPrefixCodes(lines) {
+ const linesLength = lines.length;
+ let prefixLengthMax = 0;
+
+ for (let i = 0; i < linesLength; i++) {
+ prefixLengthMax = Math.max(prefixLengthMax, lines[i].prefixLength);
+ }
+
+ const histogram = new Uint32Array(prefixLengthMax + 1);
+
+ for (let i = 0; i < linesLength; i++) {
+ histogram[lines[i].prefixLength]++;
+ }
+
+ let currentLength = 1,
+ firstCode = 0,
+ currentCode,
+ currentTemp,
+ line;
+ histogram[0] = 0;
+
+ while (currentLength <= prefixLengthMax) {
+ firstCode = firstCode + histogram[currentLength - 1] << 1;
+ currentCode = firstCode;
+ currentTemp = 0;
+
+ while (currentTemp < linesLength) {
+ line = lines[currentTemp];
+
+ if (line.prefixLength === currentLength) {
+ line.prefixCode = currentCode;
+ currentCode++;
+ }
+
+ currentTemp++;
+ }
+
+ currentLength++;
+ }
+ }
+
+}
+
+function decodeTablesSegment(data, start, end) {
+ const flags = data[start];
+ const lowestValue = (0, _core_utils.readUint32)(data, start + 1) & 0xffffffff;
+ const highestValue = (0, _core_utils.readUint32)(data, start + 5) & 0xffffffff;
+ const reader = new Reader(data, start + 9, end);
+ const prefixSizeBits = (flags >> 1 & 7) + 1;
+ const rangeSizeBits = (flags >> 4 & 7) + 1;
+ const lines = [];
+ let prefixLength,
+ rangeLength,
+ currentRangeLow = lowestValue;
+
+ do {
+ prefixLength = reader.readBits(prefixSizeBits);
+ rangeLength = reader.readBits(rangeSizeBits);
+ lines.push(new HuffmanLine([currentRangeLow, prefixLength, rangeLength, 0]));
+ currentRangeLow += 1 << rangeLength;
+ } while (currentRangeLow < highestValue);
+
+ prefixLength = reader.readBits(prefixSizeBits);
+ lines.push(new HuffmanLine([lowestValue - 1, prefixLength, 32, 0, "lower"]));
+ prefixLength = reader.readBits(prefixSizeBits);
+ lines.push(new HuffmanLine([highestValue, prefixLength, 32, 0]));
+
+ if (flags & 1) {
+ prefixLength = reader.readBits(prefixSizeBits);
+ lines.push(new HuffmanLine([prefixLength, 0]));
+ }
+
+ return new HuffmanTable(lines, false);
+}
+
+const standardTablesCache = {};
+
+function getStandardTable(number) {
+ let table = standardTablesCache[number];
+
+ if (table) {
+ return table;
+ }
+
+ let lines;
+
+ switch (number) {
+ case 1:
+ lines = [[0, 1, 4, 0x0], [16, 2, 8, 0x2], [272, 3, 16, 0x6], [65808, 3, 32, 0x7]];
+ break;
+
+ case 2:
+ lines = [[0, 1, 0, 0x0], [1, 2, 0, 0x2], [2, 3, 0, 0x6], [3, 4, 3, 0xe], [11, 5, 6, 0x1e], [75, 6, 32, 0x3e], [6, 0x3f]];
+ break;
+
+ case 3:
+ lines = [[-256, 8, 8, 0xfe], [0, 1, 0, 0x0], [1, 2, 0, 0x2], [2, 3, 0, 0x6], [3, 4, 3, 0xe], [11, 5, 6, 0x1e], [-257, 8, 32, 0xff, "lower"], [75, 7, 32, 0x7e], [6, 0x3e]];
+ break;
+
+ case 4:
+ lines = [[1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 0, 0x6], [4, 4, 3, 0xe], [12, 5, 6, 0x1e], [76, 5, 32, 0x1f]];
+ break;
+
+ case 5:
+ lines = [[-255, 7, 8, 0x7e], [1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 0, 0x6], [4, 4, 3, 0xe], [12, 5, 6, 0x1e], [-256, 7, 32, 0x7f, "lower"], [76, 6, 32, 0x3e]];
+ break;
+
+ case 6:
+ lines = [[-2048, 5, 10, 0x1c], [-1024, 4, 9, 0x8], [-512, 4, 8, 0x9], [-256, 4, 7, 0xa], [-128, 5, 6, 0x1d], [-64, 5, 5, 0x1e], [-32, 4, 5, 0xb], [0, 2, 7, 0x0], [128, 3, 7, 0x2], [256, 3, 8, 0x3], [512, 4, 9, 0xc], [1024, 4, 10, 0xd], [-2049, 6, 32, 0x3e, "lower"], [2048, 6, 32, 0x3f]];
+ break;
+
+ case 7:
+ lines = [[-1024, 4, 9, 0x8], [-512, 3, 8, 0x0], [-256, 4, 7, 0x9], [-128, 5, 6, 0x1a], [-64, 5, 5, 0x1b], [-32, 4, 5, 0xa], [0, 4, 5, 0xb], [32, 5, 5, 0x1c], [64, 5, 6, 0x1d], [128, 4, 7, 0xc], [256, 3, 8, 0x1], [512, 3, 9, 0x2], [1024, 3, 10, 0x3], [-1025, 5, 32, 0x1e, "lower"], [2048, 5, 32, 0x1f]];
+ break;
+
+ case 8:
+ lines = [[-15, 8, 3, 0xfc], [-7, 9, 1, 0x1fc], [-5, 8, 1, 0xfd], [-3, 9, 0, 0x1fd], [-2, 7, 0, 0x7c], [-1, 4, 0, 0xa], [0, 2, 1, 0x0], [2, 5, 0, 0x1a], [3, 6, 0, 0x3a], [4, 3, 4, 0x4], [20, 6, 1, 0x3b], [22, 4, 4, 0xb], [38, 4, 5, 0xc], [70, 5, 6, 0x1b], [134, 5, 7, 0x1c], [262, 6, 7, 0x3c], [390, 7, 8, 0x7d], [646, 6, 10, 0x3d], [-16, 9, 32, 0x1fe, "lower"], [1670, 9, 32, 0x1ff], [2, 0x1]];
+ break;
+
+ case 9:
+ lines = [[-31, 8, 4, 0xfc], [-15, 9, 2, 0x1fc], [-11, 8, 2, 0xfd], [-7, 9, 1, 0x1fd], [-5, 7, 1, 0x7c], [-3, 4, 1, 0xa], [-1, 3, 1, 0x2], [1, 3, 1, 0x3], [3, 5, 1, 0x1a], [5, 6, 1, 0x3a], [7, 3, 5, 0x4], [39, 6, 2, 0x3b], [43, 4, 5, 0xb], [75, 4, 6, 0xc], [139, 5, 7, 0x1b], [267, 5, 8, 0x1c], [523, 6, 8, 0x3c], [779, 7, 9, 0x7d], [1291, 6, 11, 0x3d], [-32, 9, 32, 0x1fe, "lower"], [3339, 9, 32, 0x1ff], [2, 0x0]];
+ break;
+
+ case 10:
+ lines = [[-21, 7, 4, 0x7a], [-5, 8, 0, 0xfc], [-4, 7, 0, 0x7b], [-3, 5, 0, 0x18], [-2, 2, 2, 0x0], [2, 5, 0, 0x19], [3, 6, 0, 0x36], [4, 7, 0, 0x7c], [5, 8, 0, 0xfd], [6, 2, 6, 0x1], [70, 5, 5, 0x1a], [102, 6, 5, 0x37], [134, 6, 6, 0x38], [198, 6, 7, 0x39], [326, 6, 8, 0x3a], [582, 6, 9, 0x3b], [1094, 6, 10, 0x3c], [2118, 7, 11, 0x7d], [-22, 8, 32, 0xfe, "lower"], [4166, 8, 32, 0xff], [2, 0x2]];
+ break;
+
+ case 11:
+ lines = [[1, 1, 0, 0x0], [2, 2, 1, 0x2], [4, 4, 0, 0xc], [5, 4, 1, 0xd], [7, 5, 1, 0x1c], [9, 5, 2, 0x1d], [13, 6, 2, 0x3c], [17, 7, 2, 0x7a], [21, 7, 3, 0x7b], [29, 7, 4, 0x7c], [45, 7, 5, 0x7d], [77, 7, 6, 0x7e], [141, 7, 32, 0x7f]];
+ break;
+
+ case 12:
+ lines = [[1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 1, 0x6], [5, 5, 0, 0x1c], [6, 5, 1, 0x1d], [8, 6, 1, 0x3c], [10, 7, 0, 0x7a], [11, 7, 1, 0x7b], [13, 7, 2, 0x7c], [17, 7, 3, 0x7d], [25, 7, 4, 0x7e], [41, 8, 5, 0xfe], [73, 8, 32, 0xff]];
+ break;
+
+ case 13:
+ lines = [[1, 1, 0, 0x0], [2, 3, 0, 0x4], [3, 4, 0, 0xc], [4, 5, 0, 0x1c], [5, 4, 1, 0xd], [7, 3, 3, 0x5], [15, 6, 1, 0x3a], [17, 6, 2, 0x3b], [21, 6, 3, 0x3c], [29, 6, 4, 0x3d], [45, 6, 5, 0x3e], [77, 7, 6, 0x7e], [141, 7, 32, 0x7f]];
+ break;
+
+ case 14:
+ lines = [[-2, 3, 0, 0x4], [-1, 3, 0, 0x5], [0, 1, 0, 0x0], [1, 3, 0, 0x6], [2, 3, 0, 0x7]];
+ break;
+
+ case 15:
+ lines = [[-24, 7, 4, 0x7c], [-8, 6, 2, 0x3c], [-4, 5, 1, 0x1c], [-2, 4, 0, 0xc], [-1, 3, 0, 0x4], [0, 1, 0, 0x0], [1, 3, 0, 0x5], [2, 4, 0, 0xd], [3, 5, 1, 0x1d], [5, 6, 2, 0x3d], [9, 7, 4, 0x7d], [-25, 7, 32, 0x7e, "lower"], [25, 7, 32, 0x7f]];
+ break;
+
+ default:
+ throw new Jbig2Error(`standard table B.${number} does not exist`);
+ }
+
+ for (let i = 0, ii = lines.length; i < ii; i++) {
+ lines[i] = new HuffmanLine(lines[i]);
+ }
+
+ table = new HuffmanTable(lines, true);
+ standardTablesCache[number] = table;
+ return table;
+}
+
+class Reader {
+ constructor(data, start, end) {
+ this.data = data;
+ this.start = start;
+ this.end = end;
+ this.position = start;
+ this.shift = -1;
+ this.currentByte = 0;
+ }
+
+ readBit() {
+ if (this.shift < 0) {
+ if (this.position >= this.end) {
+ throw new Jbig2Error("end of data while reading bit");
+ }
+
+ this.currentByte = this.data[this.position++];
+ this.shift = 7;
+ }
+
+ const bit = this.currentByte >> this.shift & 1;
+ this.shift--;
+ return bit;
+ }
+
+ readBits(numBits) {
+ let result = 0,
+ i;
+
+ for (i = numBits - 1; i >= 0; i--) {
+ result |= this.readBit() << i;
+ }
+
+ return result;
+ }
+
+ byteAlign() {
+ this.shift = -1;
+ }
+
+ next() {
+ if (this.position >= this.end) {
+ return -1;
+ }
+
+ return this.data[this.position++];
+ }
+
+}
+
+function getCustomHuffmanTable(index, referredTo, customTables) {
+ let currentIndex = 0;
+
+ for (let i = 0, ii = referredTo.length; i < ii; i++) {
+ const table = customTables[referredTo[i]];
+
+ if (table) {
+ if (index === currentIndex) {
+ return table;
+ }
+
+ currentIndex++;
+ }
+ }
+
+ throw new Jbig2Error("can't find custom Huffman table");
+}
+
+function getTextRegionHuffmanTables(textRegion, referredTo, customTables, numberOfSymbols, reader) {
+ const codes = [];
+
+ for (let i = 0; i <= 34; i++) {
+ const codeLength = reader.readBits(4);
+ codes.push(new HuffmanLine([i, codeLength, 0, 0]));
+ }
+
+ const runCodesTable = new HuffmanTable(codes, false);
+ codes.length = 0;
+
+ for (let i = 0; i < numberOfSymbols;) {
+ const codeLength = runCodesTable.decode(reader);
+
+ if (codeLength >= 32) {
+ let repeatedLength, numberOfRepeats, j;
+
+ switch (codeLength) {
+ case 32:
+ if (i === 0) {
+ throw new Jbig2Error("no previous value in symbol ID table");
}
- tables[table.tag] = table;
+ numberOfRepeats = reader.readBits(2) + 3;
+ repeatedLength = codes[i - 1].prefixLength;
+ break;
+
+ case 33:
+ numberOfRepeats = reader.readBits(3) + 3;
+ repeatedLength = 0;
+ break;
+
+ case 34:
+ numberOfRepeats = reader.readBits(7) + 11;
+ repeatedLength = 0;
+ break;
+
+ default:
+ throw new Jbig2Error("invalid code length in symbol ID table");
+ }
+
+ for (j = 0; j < numberOfRepeats; j++) {
+ codes.push(new HuffmanLine([i, repeatedLength, 0, 0]));
+ i++;
+ }
+ } else {
+ codes.push(new HuffmanLine([i, codeLength, 0, 0]));
+ i++;
+ }
+ }
+
+ reader.byteAlign();
+ const symbolIDTable = new HuffmanTable(codes, false);
+ let customIndex = 0,
+ tableFirstS,
+ tableDeltaS,
+ tableDeltaT;
+
+ switch (textRegion.huffmanFS) {
+ case 0:
+ case 1:
+ tableFirstS = getStandardTable(textRegion.huffmanFS + 6);
+ break;
+
+ case 3:
+ tableFirstS = getCustomHuffmanTable(customIndex, referredTo, customTables);
+ customIndex++;
+ break;
+
+ default:
+ throw new Jbig2Error("invalid Huffman FS selector");
+ }
+
+ switch (textRegion.huffmanDS) {
+ case 0:
+ case 1:
+ case 2:
+ tableDeltaS = getStandardTable(textRegion.huffmanDS + 8);
+ break;
+
+ case 3:
+ tableDeltaS = getCustomHuffmanTable(customIndex, referredTo, customTables);
+ customIndex++;
+ break;
+
+ default:
+ throw new Jbig2Error("invalid Huffman DS selector");
+ }
+
+ switch (textRegion.huffmanDT) {
+ case 0:
+ case 1:
+ case 2:
+ tableDeltaT = getStandardTable(textRegion.huffmanDT + 11);
+ break;
+
+ case 3:
+ tableDeltaT = getCustomHuffmanTable(customIndex, referredTo, customTables);
+ customIndex++;
+ break;
+
+ default:
+ throw new Jbig2Error("invalid Huffman DT selector");
+ }
+
+ if (textRegion.refinement) {
+ throw new Jbig2Error("refinement with Huffman is not supported");
+ }
+
+ return {
+ symbolIDTable,
+ tableFirstS,
+ tableDeltaS,
+ tableDeltaT
+ };
+}
+
+function getSymbolDictionaryHuffmanTables(dictionary, referredTo, customTables) {
+ let customIndex = 0,
+ tableDeltaHeight,
+ tableDeltaWidth;
+
+ switch (dictionary.huffmanDHSelector) {
+ case 0:
+ case 1:
+ tableDeltaHeight = getStandardTable(dictionary.huffmanDHSelector + 4);
+ break;
+
+ case 3:
+ tableDeltaHeight = getCustomHuffmanTable(customIndex, referredTo, customTables);
+ customIndex++;
+ break;
+
+ default:
+ throw new Jbig2Error("invalid Huffman DH selector");
+ }
+
+ switch (dictionary.huffmanDWSelector) {
+ case 0:
+ case 1:
+ tableDeltaWidth = getStandardTable(dictionary.huffmanDWSelector + 2);
+ break;
+
+ case 3:
+ tableDeltaWidth = getCustomHuffmanTable(customIndex, referredTo, customTables);
+ customIndex++;
+ break;
+
+ default:
+ throw new Jbig2Error("invalid Huffman DW selector");
+ }
+
+ let tableBitmapSize, tableAggregateInstances;
+
+ if (dictionary.bitmapSizeSelector) {
+ tableBitmapSize = getCustomHuffmanTable(customIndex, referredTo, customTables);
+ customIndex++;
+ } else {
+ tableBitmapSize = getStandardTable(1);
+ }
+
+ if (dictionary.aggregationInstancesSelector) {
+ tableAggregateInstances = getCustomHuffmanTable(customIndex, referredTo, customTables);
+ } else {
+ tableAggregateInstances = getStandardTable(1);
+ }
+
+ return {
+ tableDeltaHeight,
+ tableDeltaWidth,
+ tableBitmapSize,
+ tableAggregateInstances
+ };
+}
+
+function readUncompressedBitmap(reader, width, height) {
+ const bitmap = [];
+
+ for (let y = 0; y < height; y++) {
+ const row = new Uint8Array(width);
+ bitmap.push(row);
+
+ for (let x = 0; x < width; x++) {
+ row[x] = reader.readBit();
+ }
+
+ reader.byteAlign();
+ }
+
+ return bitmap;
+}
+
+function decodeMMRBitmap(input, width, height, endOfBlock) {
+ const params = {
+ K: -1,
+ Columns: width,
+ Rows: height,
+ BlackIs1: true,
+ EndOfBlock: endOfBlock
+ };
+ const decoder = new _ccitt.CCITTFaxDecoder(input, params);
+ const bitmap = [];
+ let currentByte,
+ eof = false;
+
+ for (let y = 0; y < height; y++) {
+ const row = new Uint8Array(width);
+ bitmap.push(row);
+ let shift = -1;
+
+ for (let x = 0; x < width; x++) {
+ if (shift < 0) {
+ currentByte = decoder.readNextChar();
+
+ if (currentByte === -1) {
+ currentByte = 0;
+ eof = true;
}
- return tables;
+ shift = 7;
+ }
+
+ row[x] = currentByte >> shift & 1;
+ shift--;
+ }
+ }
+
+ if (endOfBlock && !eof) {
+ const lookForEOFLimit = 5;
+
+ for (let i = 0; i < lookForEOFLimit; i++) {
+ if (decoder.readNextChar() === -1) {
+ break;
+ }
+ }
+ }
+
+ return bitmap;
+}
+
+class Jbig2Image {
+ parseChunks(chunks) {
+ return parseJbig2Chunks(chunks);
+ }
+
+ parse(data) {
+ const {
+ imgData,
+ width,
+ height
+ } = parseJbig2(data);
+ this.width = width;
+ this.height = height;
+ return imgData;
+ }
+
+}
+
+exports.Jbig2Image = Jbig2Image;
+
+/***/ }),
+/* 26 */
+/***/ ((__unused_webpack_module, exports) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.ArithmeticDecoder = void 0;
+const QeTable = [{
+ qe: 0x5601,
+ nmps: 1,
+ nlps: 1,
+ switchFlag: 1
+}, {
+ qe: 0x3401,
+ nmps: 2,
+ nlps: 6,
+ switchFlag: 0
+}, {
+ qe: 0x1801,
+ nmps: 3,
+ nlps: 9,
+ switchFlag: 0
+}, {
+ qe: 0x0ac1,
+ nmps: 4,
+ nlps: 12,
+ switchFlag: 0
+}, {
+ qe: 0x0521,
+ nmps: 5,
+ nlps: 29,
+ switchFlag: 0
+}, {
+ qe: 0x0221,
+ nmps: 38,
+ nlps: 33,
+ switchFlag: 0
+}, {
+ qe: 0x5601,
+ nmps: 7,
+ nlps: 6,
+ switchFlag: 1
+}, {
+ qe: 0x5401,
+ nmps: 8,
+ nlps: 14,
+ switchFlag: 0
+}, {
+ qe: 0x4801,
+ nmps: 9,
+ nlps: 14,
+ switchFlag: 0
+}, {
+ qe: 0x3801,
+ nmps: 10,
+ nlps: 14,
+ switchFlag: 0
+}, {
+ qe: 0x3001,
+ nmps: 11,
+ nlps: 17,
+ switchFlag: 0
+}, {
+ qe: 0x2401,
+ nmps: 12,
+ nlps: 18,
+ switchFlag: 0
+}, {
+ qe: 0x1c01,
+ nmps: 13,
+ nlps: 20,
+ switchFlag: 0
+}, {
+ qe: 0x1601,
+ nmps: 29,
+ nlps: 21,
+ switchFlag: 0
+}, {
+ qe: 0x5601,
+ nmps: 15,
+ nlps: 14,
+ switchFlag: 1
+}, {
+ qe: 0x5401,
+ nmps: 16,
+ nlps: 14,
+ switchFlag: 0
+}, {
+ qe: 0x5101,
+ nmps: 17,
+ nlps: 15,
+ switchFlag: 0
+}, {
+ qe: 0x4801,
+ nmps: 18,
+ nlps: 16,
+ switchFlag: 0
+}, {
+ qe: 0x3801,
+ nmps: 19,
+ nlps: 17,
+ switchFlag: 0
+}, {
+ qe: 0x3401,
+ nmps: 20,
+ nlps: 18,
+ switchFlag: 0
+}, {
+ qe: 0x3001,
+ nmps: 21,
+ nlps: 19,
+ switchFlag: 0
+}, {
+ qe: 0x2801,
+ nmps: 22,
+ nlps: 19,
+ switchFlag: 0
+}, {
+ qe: 0x2401,
+ nmps: 23,
+ nlps: 20,
+ switchFlag: 0
+}, {
+ qe: 0x2201,
+ nmps: 24,
+ nlps: 21,
+ switchFlag: 0
+}, {
+ qe: 0x1c01,
+ nmps: 25,
+ nlps: 22,
+ switchFlag: 0
+}, {
+ qe: 0x1801,
+ nmps: 26,
+ nlps: 23,
+ switchFlag: 0
+}, {
+ qe: 0x1601,
+ nmps: 27,
+ nlps: 24,
+ switchFlag: 0
+}, {
+ qe: 0x1401,
+ nmps: 28,
+ nlps: 25,
+ switchFlag: 0
+}, {
+ qe: 0x1201,
+ nmps: 29,
+ nlps: 26,
+ switchFlag: 0
+}, {
+ qe: 0x1101,
+ nmps: 30,
+ nlps: 27,
+ switchFlag: 0
+}, {
+ qe: 0x0ac1,
+ nmps: 31,
+ nlps: 28,
+ switchFlag: 0
+}, {
+ qe: 0x09c1,
+ nmps: 32,
+ nlps: 29,
+ switchFlag: 0
+}, {
+ qe: 0x08a1,
+ nmps: 33,
+ nlps: 30,
+ switchFlag: 0
+}, {
+ qe: 0x0521,
+ nmps: 34,
+ nlps: 31,
+ switchFlag: 0
+}, {
+ qe: 0x0441,
+ nmps: 35,
+ nlps: 32,
+ switchFlag: 0
+}, {
+ qe: 0x02a1,
+ nmps: 36,
+ nlps: 33,
+ switchFlag: 0
+}, {
+ qe: 0x0221,
+ nmps: 37,
+ nlps: 34,
+ switchFlag: 0
+}, {
+ qe: 0x0141,
+ nmps: 38,
+ nlps: 35,
+ switchFlag: 0
+}, {
+ qe: 0x0111,
+ nmps: 39,
+ nlps: 36,
+ switchFlag: 0
+}, {
+ qe: 0x0085,
+ nmps: 40,
+ nlps: 37,
+ switchFlag: 0
+}, {
+ qe: 0x0049,
+ nmps: 41,
+ nlps: 38,
+ switchFlag: 0
+}, {
+ qe: 0x0025,
+ nmps: 42,
+ nlps: 39,
+ switchFlag: 0
+}, {
+ qe: 0x0015,
+ nmps: 43,
+ nlps: 40,
+ switchFlag: 0
+}, {
+ qe: 0x0009,
+ nmps: 44,
+ nlps: 41,
+ switchFlag: 0
+}, {
+ qe: 0x0005,
+ nmps: 45,
+ nlps: 42,
+ switchFlag: 0
+}, {
+ qe: 0x0001,
+ nmps: 45,
+ nlps: 43,
+ switchFlag: 0
+}, {
+ qe: 0x5601,
+ nmps: 46,
+ nlps: 46,
+ switchFlag: 0
+}];
+
+class ArithmeticDecoder {
+ constructor(data, start, end) {
+ this.data = data;
+ this.bp = start;
+ this.dataEnd = end;
+ this.chigh = data[start];
+ this.clow = 0;
+ this.byteIn();
+ this.chigh = this.chigh << 7 & 0xffff | this.clow >> 9 & 0x7f;
+ this.clow = this.clow << 7 & 0xffff;
+ this.ct -= 7;
+ this.a = 0x8000;
+ }
+
+ byteIn() {
+ const data = this.data;
+ let bp = this.bp;
+
+ if (data[bp] === 0xff) {
+ if (data[bp + 1] > 0x8f) {
+ this.clow += 0xff00;
+ this.ct = 8;
+ } else {
+ bp++;
+ this.clow += data[bp] << 9;
+ this.ct = 7;
+ this.bp = bp;
}
+ } else {
+ bp++;
+ this.clow += bp < this.dataEnd ? data[bp] << 8 : 0xff00;
+ this.ct = 8;
+ this.bp = bp;
+ }
- function readTableEntry(file) {
- var tag = (0, _util.bytesToString)(file.getBytes(4));
- var checksum = file.getInt32() >>> 0;
- var offset = file.getInt32() >>> 0;
- var length = file.getInt32() >>> 0;
- var previousPosition = file.pos;
- file.pos = file.start ? file.start : 0;
- file.skip(offset);
- var data = file.getBytes(length);
- file.pos = previousPosition;
+ if (this.clow > 0xffff) {
+ this.chigh += this.clow >> 16;
+ this.clow &= 0xffff;
+ }
+ }
- if (tag === "head") {
- data[8] = data[9] = data[10] = data[11] = 0;
- data[17] |= 0x20;
+ readBit(contexts, pos) {
+ let cx_index = contexts[pos] >> 1,
+ cx_mps = contexts[pos] & 1;
+ const qeTableIcx = QeTable[cx_index];
+ const qeIcx = qeTableIcx.qe;
+ let d;
+ let a = this.a - qeIcx;
+
+ if (this.chigh < qeIcx) {
+ if (a < qeIcx) {
+ a = qeIcx;
+ d = cx_mps;
+ cx_index = qeTableIcx.nmps;
+ } else {
+ a = qeIcx;
+ d = 1 ^ cx_mps;
+
+ if (qeTableIcx.switchFlag === 1) {
+ cx_mps = d;
}
- return {
- tag,
- checksum,
- length,
- offset,
- data
- };
+ cx_index = qeTableIcx.nlps;
}
+ } else {
+ this.chigh -= qeIcx;
- function readOpenTypeHeader(ttf) {
- return {
- version: (0, _util.bytesToString)(ttf.getBytes(4)),
- numTables: ttf.getUint16(),
- searchRange: ttf.getUint16(),
- entrySelector: ttf.getUint16(),
- rangeShift: ttf.getUint16()
- };
+ if ((a & 0x8000) !== 0) {
+ this.a = a;
+ return cx_mps;
}
- function readTrueTypeCollectionHeader(ttc) {
- const ttcTag = (0, _util.bytesToString)(ttc.getBytes(4));
- (0, _util.assert)(ttcTag === "ttcf", "Must be a TrueType Collection font.");
- const majorVersion = ttc.getUint16();
- const minorVersion = ttc.getUint16();
- const numFonts = ttc.getInt32() >>> 0;
- const offsetTable = [];
+ if (a < qeIcx) {
+ d = 1 ^ cx_mps;
- for (let i = 0; i < numFonts; i++) {
- offsetTable.push(ttc.getInt32() >>> 0);
+ if (qeTableIcx.switchFlag === 1) {
+ cx_mps = d;
}
- const header = {
- ttcTag,
- majorVersion,
- minorVersion,
- numFonts,
- offsetTable
- };
+ cx_index = qeTableIcx.nlps;
+ } else {
+ d = cx_mps;
+ cx_index = qeTableIcx.nmps;
+ }
+ }
- switch (majorVersion) {
- case 1:
- return header;
+ do {
+ if (this.ct === 0) {
+ this.byteIn();
+ }
- case 2:
- header.dsigTag = ttc.getInt32() >>> 0;
- header.dsigLength = ttc.getInt32() >>> 0;
- header.dsigOffset = ttc.getInt32() >>> 0;
- return header;
+ a <<= 1;
+ this.chigh = this.chigh << 1 & 0xffff | this.clow >> 15 & 1;
+ this.clow = this.clow << 1 & 0xffff;
+ this.ct--;
+ } while ((a & 0x8000) === 0);
+
+ this.a = a;
+ contexts[pos] = cx_index << 1 | cx_mps;
+ return d;
+ }
+
+}
+
+exports.ArithmeticDecoder = ArithmeticDecoder;
+
+/***/ }),
+/* 27 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.JpegStream = void 0;
+
+var _decode_stream = __w_pdfjs_require__(19);
+
+var _primitives = __w_pdfjs_require__(5);
+
+var _jpg = __w_pdfjs_require__(28);
+
+var _util = __w_pdfjs_require__(2);
+
+class JpegStream extends _decode_stream.DecodeStream {
+ constructor(stream, maybeLength, params) {
+ let ch;
+
+ while ((ch = stream.getByte()) !== -1) {
+ if (ch === 0xff) {
+ stream.skip(-1);
+ break;
+ }
+ }
+
+ super(maybeLength);
+ this.stream = stream;
+ this.dict = stream.dict;
+ this.maybeLength = maybeLength;
+ this.params = params;
+ }
+
+ get bytes() {
+ return (0, _util.shadow)(this, "bytes", this.stream.getBytes(this.maybeLength));
+ }
+
+ ensureBuffer(requested) {}
+
+ readBlock() {
+ if (this.eof) {
+ return;
+ }
+
+ const jpegOptions = {
+ decodeTransform: undefined,
+ colorTransform: undefined
+ };
+ const decodeArr = this.dict.getArray("Decode", "D");
+
+ if (this.forceRGB && Array.isArray(decodeArr)) {
+ const bitsPerComponent = this.dict.get("BitsPerComponent") || 8;
+ const decodeArrLength = decodeArr.length;
+ const transform = new Int32Array(decodeArrLength);
+ let transformNeeded = false;
+ const maxValue = (1 << bitsPerComponent) - 1;
+
+ for (let i = 0; i < decodeArrLength; i += 2) {
+ transform[i] = (decodeArr[i + 1] - decodeArr[i]) * 256 | 0;
+ transform[i + 1] = decodeArr[i] * maxValue | 0;
+
+ if (transform[i] !== 256 || transform[i + 1] !== 0) {
+ transformNeeded = true;
}
+ }
- throw new _util.FormatError(`Invalid TrueType Collection majorVersion: ${majorVersion}.`);
+ if (transformNeeded) {
+ jpegOptions.decodeTransform = transform;
}
+ }
- function readTrueTypeCollectionData(ttc, fontName) {
- const {
- numFonts,
- offsetTable
- } = readTrueTypeCollectionHeader(ttc);
+ if ((0, _primitives.isDict)(this.params)) {
+ const colorTransform = this.params.get("ColorTransform");
- for (let i = 0; i < numFonts; i++) {
- ttc.pos = (ttc.start || 0) + offsetTable[i];
- const potentialHeader = readOpenTypeHeader(ttc);
- const potentialTables = readTables(ttc, potentialHeader.numTables);
+ if (Number.isInteger(colorTransform)) {
+ jpegOptions.colorTransform = colorTransform;
+ }
+ }
- if (!potentialTables.name) {
- throw new _util.FormatError('TrueType Collection font must contain a "name" table.');
- }
+ const jpegImage = new _jpg.JpegImage(jpegOptions);
+ jpegImage.parse(this.bytes);
+ const data = jpegImage.getData({
+ width: this.drawWidth,
+ height: this.drawHeight,
+ forceRGB: this.forceRGB,
+ isSourcePDF: true
+ });
+ this.buffer = data;
+ this.bufferLength = data.length;
+ this.eof = true;
+ }
- const nameTable = readNameTable(potentialTables.name);
+}
- for (let j = 0, jj = nameTable.length; j < jj; j++) {
- for (let k = 0, kk = nameTable[j].length; k < kk; k++) {
- const nameEntry = nameTable[j][k];
+exports.JpegStream = JpegStream;
- if (nameEntry && nameEntry.replace(/\s/g, "") === fontName) {
- return {
- header: potentialHeader,
- tables: potentialTables
- };
- }
+/***/ }),
+/* 28 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.JpegImage = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _core_utils = __w_pdfjs_require__(9);
+
+class JpegError extends _util.BaseException {
+ constructor(msg) {
+ super(`JPEG error: ${msg}`);
+ }
+
+}
+
+class DNLMarkerError extends _util.BaseException {
+ constructor(message, scanLines) {
+ super(message);
+ this.scanLines = scanLines;
+ }
+
+}
+
+class EOIMarkerError extends _util.BaseException {}
+
+const dctZigZag = new Uint8Array([0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63]);
+const dctCos1 = 4017;
+const dctSin1 = 799;
+const dctCos3 = 3406;
+const dctSin3 = 2276;
+const dctCos6 = 1567;
+const dctSin6 = 3784;
+const dctSqrt2 = 5793;
+const dctSqrt1d2 = 2896;
+
+function buildHuffmanTable(codeLengths, values) {
+ let k = 0,
+ i,
+ j,
+ length = 16;
+
+ while (length > 0 && !codeLengths[length - 1]) {
+ length--;
+ }
+
+ const code = [{
+ children: [],
+ index: 0
+ }];
+ let p = code[0],
+ q;
+
+ for (i = 0; i < length; i++) {
+ for (j = 0; j < codeLengths[i]; j++) {
+ p = code.pop();
+ p.children[p.index] = values[k];
+
+ while (p.index > 0) {
+ p = code.pop();
+ }
+
+ p.index++;
+ code.push(p);
+
+ while (code.length <= i) {
+ code.push(q = {
+ children: [],
+ index: 0
+ });
+ p.children[p.index] = q.children;
+ p = q;
+ }
+
+ k++;
+ }
+
+ if (i + 1 < length) {
+ code.push(q = {
+ children: [],
+ index: 0
+ });
+ p.children[p.index] = q.children;
+ p = q;
+ }
+ }
+
+ return code[0].children;
+}
+
+function getBlockBufferOffset(component, row, col) {
+ return 64 * ((component.blocksPerLine + 1) * row + col);
+}
+
+function decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successivePrev, successive, parseDNLMarker = false) {
+ const mcusPerLine = frame.mcusPerLine;
+ const progressive = frame.progressive;
+ const startOffset = offset;
+ let bitsData = 0,
+ bitsCount = 0;
+
+ function readBit() {
+ if (bitsCount > 0) {
+ bitsCount--;
+ return bitsData >> bitsCount & 1;
+ }
+
+ bitsData = data[offset++];
+
+ if (bitsData === 0xff) {
+ const nextByte = data[offset++];
+
+ if (nextByte) {
+ if (nextByte === 0xdc && parseDNLMarker) {
+ offset += 2;
+ const scanLines = (0, _core_utils.readUint16)(data, offset);
+ offset += 2;
+
+ if (scanLines > 0 && scanLines !== frame.scanLines) {
+ throw new DNLMarkerError("Found DNL marker (0xFFDC) while parsing scan data", scanLines);
+ }
+ } else if (nextByte === 0xd9) {
+ if (parseDNLMarker) {
+ const maybeScanLines = blockRow * (frame.precision === 8 ? 8 : 0);
+
+ if (maybeScanLines > 0 && Math.round(frame.scanLines / maybeScanLines) >= 10) {
+ throw new DNLMarkerError("Found EOI marker (0xFFD9) while parsing scan data, " + "possibly caused by incorrect `scanLines` parameter", maybeScanLines);
}
}
+
+ throw new EOIMarkerError("Found EOI marker (0xFFD9) while parsing scan data");
}
- throw new _util.FormatError(`TrueType Collection does not contain "${fontName}" font.`);
+ throw new JpegError(`unexpected marker ${(bitsData << 8 | nextByte).toString(16)}`);
}
+ }
- function readCmapTable(cmap, file, isSymbolicFont, hasEncoding) {
- if (!cmap) {
- (0, _util.warn)("No cmap table available.");
- return {
- platformId: -1,
- encodingId: -1,
- mappings: [],
- hasShortCmap: false
- };
+ bitsCount = 7;
+ return bitsData >>> 7;
+ }
+
+ function decodeHuffman(tree) {
+ let node = tree;
+
+ while (true) {
+ node = node[readBit()];
+
+ switch (typeof node) {
+ case "number":
+ return node;
+
+ case "object":
+ continue;
+ }
+
+ throw new JpegError("invalid huffman sequence");
+ }
+ }
+
+ function receive(length) {
+ let n = 0;
+
+ while (length > 0) {
+ n = n << 1 | readBit();
+ length--;
+ }
+
+ return n;
+ }
+
+ function receiveAndExtend(length) {
+ if (length === 1) {
+ return readBit() === 1 ? 1 : -1;
+ }
+
+ const n = receive(length);
+
+ if (n >= 1 << length - 1) {
+ return n;
+ }
+
+ return n + (-1 << length) + 1;
+ }
+
+ function decodeBaseline(component, blockOffset) {
+ const t = decodeHuffman(component.huffmanTableDC);
+ const diff = t === 0 ? 0 : receiveAndExtend(t);
+ component.blockData[blockOffset] = component.pred += diff;
+ let k = 1;
+
+ while (k < 64) {
+ const rs = decodeHuffman(component.huffmanTableAC);
+ const s = rs & 15,
+ r = rs >> 4;
+
+ if (s === 0) {
+ if (r < 15) {
+ break;
}
- var segment;
- var start = (file.start ? file.start : 0) + cmap.offset;
- file.pos = start;
- file.skip(2);
- var numTables = file.getUint16();
- var potentialTable;
- var canBreak = false;
+ k += 16;
+ continue;
+ }
+
+ k += r;
+ const z = dctZigZag[k];
+ component.blockData[blockOffset + z] = receiveAndExtend(s);
+ k++;
+ }
+ }
- for (var i = 0; i < numTables; i++) {
- var platformId = file.getUint16();
- var encodingId = file.getUint16();
- var offset = file.getInt32() >>> 0;
- var useTable = false;
+ function decodeDCFirst(component, blockOffset) {
+ const t = decodeHuffman(component.huffmanTableDC);
+ const diff = t === 0 ? 0 : receiveAndExtend(t) << successive;
+ component.blockData[blockOffset] = component.pred += diff;
+ }
- if (potentialTable && potentialTable.platformId === platformId && potentialTable.encodingId === encodingId) {
- continue;
+ function decodeDCSuccessive(component, blockOffset) {
+ component.blockData[blockOffset] |= readBit() << successive;
+ }
+
+ let eobrun = 0;
+
+ function decodeACFirst(component, blockOffset) {
+ if (eobrun > 0) {
+ eobrun--;
+ return;
+ }
+
+ let k = spectralStart;
+ const e = spectralEnd;
+
+ while (k <= e) {
+ const rs = decodeHuffman(component.huffmanTableAC);
+ const s = rs & 15,
+ r = rs >> 4;
+
+ if (s === 0) {
+ if (r < 15) {
+ eobrun = receive(r) + (1 << r) - 1;
+ break;
+ }
+
+ k += 16;
+ continue;
+ }
+
+ k += r;
+ const z = dctZigZag[k];
+ component.blockData[blockOffset + z] = receiveAndExtend(s) * (1 << successive);
+ k++;
+ }
+ }
+
+ let successiveACState = 0,
+ successiveACNextValue;
+
+ function decodeACSuccessive(component, blockOffset) {
+ let k = spectralStart;
+ const e = spectralEnd;
+ let r = 0;
+ let s;
+ let rs;
+
+ while (k <= e) {
+ const offsetZ = blockOffset + dctZigZag[k];
+ const sign = component.blockData[offsetZ] < 0 ? -1 : 1;
+
+ switch (successiveACState) {
+ case 0:
+ rs = decodeHuffman(component.huffmanTableAC);
+ s = rs & 15;
+ r = rs >> 4;
+
+ if (s === 0) {
+ if (r < 15) {
+ eobrun = receive(r) + (1 << r);
+ successiveACState = 4;
+ } else {
+ r = 16;
+ successiveACState = 1;
+ }
+ } else {
+ if (s !== 1) {
+ throw new JpegError("invalid ACn encoding");
+ }
+
+ successiveACNextValue = receiveAndExtend(s);
+ successiveACState = r ? 2 : 3;
}
- if (platformId === 0 && (encodingId === 0 || encodingId === 1 || encodingId === 3)) {
- useTable = true;
- } else if (platformId === 1 && encodingId === 0) {
- useTable = true;
- } else if (platformId === 3 && encodingId === 1 && (hasEncoding || !potentialTable)) {
- useTable = true;
+ continue;
+
+ case 1:
+ case 2:
+ if (component.blockData[offsetZ]) {
+ component.blockData[offsetZ] += sign * (readBit() << successive);
+ } else {
+ r--;
- if (!isSymbolicFont) {
- canBreak = true;
+ if (r === 0) {
+ successiveACState = successiveACState === 2 ? 3 : 0;
}
- } else if (isSymbolicFont && platformId === 3 && encodingId === 0) {
- useTable = true;
- canBreak = true;
}
- if (useTable) {
- potentialTable = {
- platformId,
- encodingId,
- offset
- };
+ break;
+
+ case 3:
+ if (component.blockData[offsetZ]) {
+ component.blockData[offsetZ] += sign * (readBit() << successive);
+ } else {
+ component.blockData[offsetZ] = successiveACNextValue << successive;
+ successiveACState = 0;
}
- if (canBreak) {
- break;
+ break;
+
+ case 4:
+ if (component.blockData[offsetZ]) {
+ component.blockData[offsetZ] += sign * (readBit() << successive);
}
- }
- if (potentialTable) {
- file.pos = start + potentialTable.offset;
+ break;
+ }
+
+ k++;
+ }
+
+ if (successiveACState === 4) {
+ eobrun--;
+
+ if (eobrun === 0) {
+ successiveACState = 0;
+ }
+ }
+ }
+
+ let blockRow = 0;
+
+ function decodeMcu(component, decode, mcu, row, col) {
+ const mcuRow = mcu / mcusPerLine | 0;
+ const mcuCol = mcu % mcusPerLine;
+ blockRow = mcuRow * component.v + row;
+ const blockCol = mcuCol * component.h + col;
+ const blockOffset = getBlockBufferOffset(component, blockRow, blockCol);
+ decode(component, blockOffset);
+ }
+
+ function decodeBlock(component, decode, mcu) {
+ blockRow = mcu / component.blocksPerLine | 0;
+ const blockCol = mcu % component.blocksPerLine;
+ const blockOffset = getBlockBufferOffset(component, blockRow, blockCol);
+ decode(component, blockOffset);
+ }
+
+ const componentsLength = components.length;
+ let component, i, j, k, n;
+ let decodeFn;
+
+ if (progressive) {
+ if (spectralStart === 0) {
+ decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive;
+ } else {
+ decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive;
+ }
+ } else {
+ decodeFn = decodeBaseline;
+ }
+
+ let mcu = 0,
+ fileMarker;
+ let mcuExpected;
+
+ if (componentsLength === 1) {
+ mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn;
+ } else {
+ mcuExpected = mcusPerLine * frame.mcusPerColumn;
+ }
+
+ let h, v;
+
+ while (mcu <= mcuExpected) {
+ const mcuToRead = resetInterval ? Math.min(mcuExpected - mcu, resetInterval) : mcuExpected;
+
+ if (mcuToRead > 0) {
+ for (i = 0; i < componentsLength; i++) {
+ components[i].pred = 0;
+ }
+
+ eobrun = 0;
+
+ if (componentsLength === 1) {
+ component = components[0];
+
+ for (n = 0; n < mcuToRead; n++) {
+ decodeBlock(component, decodeFn, mcu);
+ mcu++;
}
+ } else {
+ for (n = 0; n < mcuToRead; n++) {
+ for (i = 0; i < componentsLength; i++) {
+ component = components[i];
+ h = component.h;
+ v = component.v;
+
+ for (j = 0; j < v; j++) {
+ for (k = 0; k < h; k++) {
+ decodeMcu(component, decodeFn, mcu, j, k);
+ }
+ }
+ }
- if (!potentialTable || file.peekByte() === -1) {
- (0, _util.warn)("Could not find a preferred cmap table.");
- return {
- platformId: -1,
- encodingId: -1,
- mappings: [],
- hasShortCmap: false
- };
+ mcu++;
}
+ }
+ }
- var format = file.getUint16();
- file.skip(2 + 2);
- var hasShortCmap = false;
- var mappings = [];
- var j, glyphId;
+ bitsCount = 0;
+ fileMarker = findNextFileMarker(data, offset);
- if (format === 0) {
- for (j = 0; j < 256; j++) {
- var index = file.getByte();
+ if (!fileMarker) {
+ break;
+ }
- if (!index) {
- continue;
+ if (fileMarker.invalid) {
+ const partialMsg = mcuToRead > 0 ? "unexpected" : "excessive";
+ (0, _util.warn)(`decodeScan - ${partialMsg} MCU data, current marker is: ${fileMarker.invalid}`);
+ offset = fileMarker.offset;
+ }
+
+ if (fileMarker.marker >= 0xffd0 && fileMarker.marker <= 0xffd7) {
+ offset += 2;
+ } else {
+ break;
+ }
+ }
+
+ return offset - startOffset;
+}
+
+function quantizeAndInverse(component, blockBufferOffset, p) {
+ const qt = component.quantizationTable,
+ blockData = component.blockData;
+ let v0, v1, v2, v3, v4, v5, v6, v7;
+ let p0, p1, p2, p3, p4, p5, p6, p7;
+ let t;
+
+ if (!qt) {
+ throw new JpegError("missing required Quantization Table.");
+ }
+
+ for (let row = 0; row < 64; row += 8) {
+ p0 = blockData[blockBufferOffset + row];
+ p1 = blockData[blockBufferOffset + row + 1];
+ p2 = blockData[blockBufferOffset + row + 2];
+ p3 = blockData[blockBufferOffset + row + 3];
+ p4 = blockData[blockBufferOffset + row + 4];
+ p5 = blockData[blockBufferOffset + row + 5];
+ p6 = blockData[blockBufferOffset + row + 6];
+ p7 = blockData[blockBufferOffset + row + 7];
+ p0 *= qt[row];
+
+ if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) {
+ t = dctSqrt2 * p0 + 512 >> 10;
+ p[row] = t;
+ p[row + 1] = t;
+ p[row + 2] = t;
+ p[row + 3] = t;
+ p[row + 4] = t;
+ p[row + 5] = t;
+ p[row + 6] = t;
+ p[row + 7] = t;
+ continue;
+ }
+
+ p1 *= qt[row + 1];
+ p2 *= qt[row + 2];
+ p3 *= qt[row + 3];
+ p4 *= qt[row + 4];
+ p5 *= qt[row + 5];
+ p6 *= qt[row + 6];
+ p7 *= qt[row + 7];
+ v0 = dctSqrt2 * p0 + 128 >> 8;
+ v1 = dctSqrt2 * p4 + 128 >> 8;
+ v2 = p2;
+ v3 = p6;
+ v4 = dctSqrt1d2 * (p1 - p7) + 128 >> 8;
+ v7 = dctSqrt1d2 * (p1 + p7) + 128 >> 8;
+ v5 = p3 << 4;
+ v6 = p5 << 4;
+ v0 = v0 + v1 + 1 >> 1;
+ v1 = v0 - v1;
+ t = v2 * dctSin6 + v3 * dctCos6 + 128 >> 8;
+ v2 = v2 * dctCos6 - v3 * dctSin6 + 128 >> 8;
+ v3 = t;
+ v4 = v4 + v6 + 1 >> 1;
+ v6 = v4 - v6;
+ v7 = v7 + v5 + 1 >> 1;
+ v5 = v7 - v5;
+ v0 = v0 + v3 + 1 >> 1;
+ v3 = v0 - v3;
+ v1 = v1 + v2 + 1 >> 1;
+ v2 = v1 - v2;
+ t = v4 * dctSin3 + v7 * dctCos3 + 2048 >> 12;
+ v4 = v4 * dctCos3 - v7 * dctSin3 + 2048 >> 12;
+ v7 = t;
+ t = v5 * dctSin1 + v6 * dctCos1 + 2048 >> 12;
+ v5 = v5 * dctCos1 - v6 * dctSin1 + 2048 >> 12;
+ v6 = t;
+ p[row] = v0 + v7;
+ p[row + 7] = v0 - v7;
+ p[row + 1] = v1 + v6;
+ p[row + 6] = v1 - v6;
+ p[row + 2] = v2 + v5;
+ p[row + 5] = v2 - v5;
+ p[row + 3] = v3 + v4;
+ p[row + 4] = v3 - v4;
+ }
+
+ for (let col = 0; col < 8; ++col) {
+ p0 = p[col];
+ p1 = p[col + 8];
+ p2 = p[col + 16];
+ p3 = p[col + 24];
+ p4 = p[col + 32];
+ p5 = p[col + 40];
+ p6 = p[col + 48];
+ p7 = p[col + 56];
+
+ if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) {
+ t = dctSqrt2 * p0 + 8192 >> 14;
+
+ if (t < -2040) {
+ t = 0;
+ } else if (t >= 2024) {
+ t = 255;
+ } else {
+ t = t + 2056 >> 4;
+ }
+
+ blockData[blockBufferOffset + col] = t;
+ blockData[blockBufferOffset + col + 8] = t;
+ blockData[blockBufferOffset + col + 16] = t;
+ blockData[blockBufferOffset + col + 24] = t;
+ blockData[blockBufferOffset + col + 32] = t;
+ blockData[blockBufferOffset + col + 40] = t;
+ blockData[blockBufferOffset + col + 48] = t;
+ blockData[blockBufferOffset + col + 56] = t;
+ continue;
+ }
+
+ v0 = dctSqrt2 * p0 + 2048 >> 12;
+ v1 = dctSqrt2 * p4 + 2048 >> 12;
+ v2 = p2;
+ v3 = p6;
+ v4 = dctSqrt1d2 * (p1 - p7) + 2048 >> 12;
+ v7 = dctSqrt1d2 * (p1 + p7) + 2048 >> 12;
+ v5 = p3;
+ v6 = p5;
+ v0 = (v0 + v1 + 1 >> 1) + 4112;
+ v1 = v0 - v1;
+ t = v2 * dctSin6 + v3 * dctCos6 + 2048 >> 12;
+ v2 = v2 * dctCos6 - v3 * dctSin6 + 2048 >> 12;
+ v3 = t;
+ v4 = v4 + v6 + 1 >> 1;
+ v6 = v4 - v6;
+ v7 = v7 + v5 + 1 >> 1;
+ v5 = v7 - v5;
+ v0 = v0 + v3 + 1 >> 1;
+ v3 = v0 - v3;
+ v1 = v1 + v2 + 1 >> 1;
+ v2 = v1 - v2;
+ t = v4 * dctSin3 + v7 * dctCos3 + 2048 >> 12;
+ v4 = v4 * dctCos3 - v7 * dctSin3 + 2048 >> 12;
+ v7 = t;
+ t = v5 * dctSin1 + v6 * dctCos1 + 2048 >> 12;
+ v5 = v5 * dctCos1 - v6 * dctSin1 + 2048 >> 12;
+ v6 = t;
+ p0 = v0 + v7;
+ p7 = v0 - v7;
+ p1 = v1 + v6;
+ p6 = v1 - v6;
+ p2 = v2 + v5;
+ p5 = v2 - v5;
+ p3 = v3 + v4;
+ p4 = v3 - v4;
+
+ if (p0 < 16) {
+ p0 = 0;
+ } else if (p0 >= 4080) {
+ p0 = 255;
+ } else {
+ p0 >>= 4;
+ }
+
+ if (p1 < 16) {
+ p1 = 0;
+ } else if (p1 >= 4080) {
+ p1 = 255;
+ } else {
+ p1 >>= 4;
+ }
+
+ if (p2 < 16) {
+ p2 = 0;
+ } else if (p2 >= 4080) {
+ p2 = 255;
+ } else {
+ p2 >>= 4;
+ }
+
+ if (p3 < 16) {
+ p3 = 0;
+ } else if (p3 >= 4080) {
+ p3 = 255;
+ } else {
+ p3 >>= 4;
+ }
+
+ if (p4 < 16) {
+ p4 = 0;
+ } else if (p4 >= 4080) {
+ p4 = 255;
+ } else {
+ p4 >>= 4;
+ }
+
+ if (p5 < 16) {
+ p5 = 0;
+ } else if (p5 >= 4080) {
+ p5 = 255;
+ } else {
+ p5 >>= 4;
+ }
+
+ if (p6 < 16) {
+ p6 = 0;
+ } else if (p6 >= 4080) {
+ p6 = 255;
+ } else {
+ p6 >>= 4;
+ }
+
+ if (p7 < 16) {
+ p7 = 0;
+ } else if (p7 >= 4080) {
+ p7 = 255;
+ } else {
+ p7 >>= 4;
+ }
+
+ blockData[blockBufferOffset + col] = p0;
+ blockData[blockBufferOffset + col + 8] = p1;
+ blockData[blockBufferOffset + col + 16] = p2;
+ blockData[blockBufferOffset + col + 24] = p3;
+ blockData[blockBufferOffset + col + 32] = p4;
+ blockData[blockBufferOffset + col + 40] = p5;
+ blockData[blockBufferOffset + col + 48] = p6;
+ blockData[blockBufferOffset + col + 56] = p7;
+ }
+}
+
+function buildComponentData(frame, component) {
+ const blocksPerLine = component.blocksPerLine;
+ const blocksPerColumn = component.blocksPerColumn;
+ const computationBuffer = new Int16Array(64);
+
+ for (let blockRow = 0; blockRow < blocksPerColumn; blockRow++) {
+ for (let blockCol = 0; blockCol < blocksPerLine; blockCol++) {
+ const offset = getBlockBufferOffset(component, blockRow, blockCol);
+ quantizeAndInverse(component, offset, computationBuffer);
+ }
+ }
+
+ return component.blockData;
+}
+
+function findNextFileMarker(data, currentPos, startPos = currentPos) {
+ const maxPos = data.length - 1;
+ let newPos = startPos < currentPos ? startPos : currentPos;
+
+ if (currentPos >= maxPos) {
+ return null;
+ }
+
+ const currentMarker = (0, _core_utils.readUint16)(data, currentPos);
+
+ if (currentMarker >= 0xffc0 && currentMarker <= 0xfffe) {
+ return {
+ invalid: null,
+ marker: currentMarker,
+ offset: currentPos
+ };
+ }
+
+ let newMarker = (0, _core_utils.readUint16)(data, newPos);
+
+ while (!(newMarker >= 0xffc0 && newMarker <= 0xfffe)) {
+ if (++newPos >= maxPos) {
+ return null;
+ }
+
+ newMarker = (0, _core_utils.readUint16)(data, newPos);
+ }
+
+ return {
+ invalid: currentMarker.toString(16),
+ marker: newMarker,
+ offset: newPos
+ };
+}
+
+class JpegImage {
+ constructor({
+ decodeTransform = null,
+ colorTransform = -1
+ } = {}) {
+ this._decodeTransform = decodeTransform;
+ this._colorTransform = colorTransform;
+ }
+
+ parse(data, {
+ dnlScanLines = null
+ } = {}) {
+ function readDataBlock() {
+ const length = (0, _core_utils.readUint16)(data, offset);
+ offset += 2;
+ let endOffset = offset + length - 2;
+ const fileMarker = findNextFileMarker(data, endOffset, offset);
+
+ if (fileMarker && fileMarker.invalid) {
+ (0, _util.warn)("readDataBlock - incorrect length, current marker is: " + fileMarker.invalid);
+ endOffset = fileMarker.offset;
+ }
+
+ const array = data.subarray(offset, endOffset);
+ offset += array.length;
+ return array;
+ }
+
+ function prepareComponents(frame) {
+ const mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / frame.maxH);
+ const mcusPerColumn = Math.ceil(frame.scanLines / 8 / frame.maxV);
+
+ for (let i = 0, ii = frame.components.length; i < ii; i++) {
+ const component = frame.components[i];
+ const blocksPerLine = Math.ceil(Math.ceil(frame.samplesPerLine / 8) * component.h / frame.maxH);
+ const blocksPerColumn = Math.ceil(Math.ceil(frame.scanLines / 8) * component.v / frame.maxV);
+ const blocksPerLineForMcu = mcusPerLine * component.h;
+ const blocksPerColumnForMcu = mcusPerColumn * component.v;
+ const blocksBufferSize = 64 * blocksPerColumnForMcu * (blocksPerLineForMcu + 1);
+ component.blockData = new Int16Array(blocksBufferSize);
+ component.blocksPerLine = blocksPerLine;
+ component.blocksPerColumn = blocksPerColumn;
+ }
+
+ frame.mcusPerLine = mcusPerLine;
+ frame.mcusPerColumn = mcusPerColumn;
+ }
+
+ let offset = 0;
+ let jfif = null;
+ let adobe = null;
+ let frame, resetInterval;
+ let numSOSMarkers = 0;
+ const quantizationTables = [];
+ const huffmanTablesAC = [],
+ huffmanTablesDC = [];
+ let fileMarker = (0, _core_utils.readUint16)(data, offset);
+ offset += 2;
+
+ if (fileMarker !== 0xffd8) {
+ throw new JpegError("SOI not found");
+ }
+
+ fileMarker = (0, _core_utils.readUint16)(data, offset);
+ offset += 2;
+
+ markerLoop: while (fileMarker !== 0xffd9) {
+ let i, j, l;
+
+ switch (fileMarker) {
+ case 0xffe0:
+ case 0xffe1:
+ case 0xffe2:
+ case 0xffe3:
+ case 0xffe4:
+ case 0xffe5:
+ case 0xffe6:
+ case 0xffe7:
+ case 0xffe8:
+ case 0xffe9:
+ case 0xffea:
+ case 0xffeb:
+ case 0xffec:
+ case 0xffed:
+ case 0xffee:
+ case 0xffef:
+ case 0xfffe:
+ const appData = readDataBlock();
+
+ if (fileMarker === 0xffe0) {
+ if (appData[0] === 0x4a && appData[1] === 0x46 && appData[2] === 0x49 && appData[3] === 0x46 && appData[4] === 0) {
+ jfif = {
+ version: {
+ major: appData[5],
+ minor: appData[6]
+ },
+ densityUnits: appData[7],
+ xDensity: appData[8] << 8 | appData[9],
+ yDensity: appData[10] << 8 | appData[11],
+ thumbWidth: appData[12],
+ thumbHeight: appData[13],
+ thumbData: appData.subarray(14, 14 + 3 * appData[12] * appData[13])
+ };
}
+ }
- mappings.push({
- charCode: j,
- glyphId: index
- });
+ if (fileMarker === 0xffee) {
+ if (appData[0] === 0x41 && appData[1] === 0x64 && appData[2] === 0x6f && appData[3] === 0x62 && appData[4] === 0x65) {
+ adobe = {
+ version: appData[5] << 8 | appData[6],
+ flags0: appData[7] << 8 | appData[8],
+ flags1: appData[9] << 8 | appData[10],
+ transformCode: appData[11]
+ };
+ }
}
- hasShortCmap = true;
- } else if (format === 4) {
- var segCount = file.getUint16() >> 1;
- file.skip(6);
- var segIndex,
- segments = [];
+ break;
+
+ case 0xffdb:
+ const quantizationTablesLength = (0, _core_utils.readUint16)(data, offset);
+ offset += 2;
+ const quantizationTablesEnd = quantizationTablesLength + offset - 2;
+ let z;
- for (segIndex = 0; segIndex < segCount; segIndex++) {
- segments.push({
- end: file.getUint16()
- });
+ while (offset < quantizationTablesEnd) {
+ const quantizationTableSpec = data[offset++];
+ const tableData = new Uint16Array(64);
+
+ if (quantizationTableSpec >> 4 === 0) {
+ for (j = 0; j < 64; j++) {
+ z = dctZigZag[j];
+ tableData[z] = data[offset++];
+ }
+ } else if (quantizationTableSpec >> 4 === 1) {
+ for (j = 0; j < 64; j++) {
+ z = dctZigZag[j];
+ tableData[z] = (0, _core_utils.readUint16)(data, offset);
+ offset += 2;
+ }
+ } else {
+ throw new JpegError("DQT - invalid table spec");
+ }
+
+ quantizationTables[quantizationTableSpec & 15] = tableData;
}
- file.skip(2);
+ break;
- for (segIndex = 0; segIndex < segCount; segIndex++) {
- segments[segIndex].start = file.getUint16();
+ case 0xffc0:
+ case 0xffc1:
+ case 0xffc2:
+ if (frame) {
+ throw new JpegError("Only single frame JPEGs supported");
}
- for (segIndex = 0; segIndex < segCount; segIndex++) {
- segments[segIndex].delta = file.getUint16();
+ offset += 2;
+ frame = {};
+ frame.extended = fileMarker === 0xffc1;
+ frame.progressive = fileMarker === 0xffc2;
+ frame.precision = data[offset++];
+ const sofScanLines = (0, _core_utils.readUint16)(data, offset);
+ offset += 2;
+ frame.scanLines = dnlScanLines || sofScanLines;
+ frame.samplesPerLine = (0, _core_utils.readUint16)(data, offset);
+ offset += 2;
+ frame.components = [];
+ frame.componentIds = {};
+ const componentsCount = data[offset++];
+ let maxH = 0,
+ maxV = 0;
+
+ for (i = 0; i < componentsCount; i++) {
+ const componentId = data[offset];
+ const h = data[offset + 1] >> 4;
+ const v = data[offset + 1] & 15;
+
+ if (maxH < h) {
+ maxH = h;
+ }
+
+ if (maxV < v) {
+ maxV = v;
+ }
+
+ const qId = data[offset + 2];
+ l = frame.components.push({
+ h,
+ v,
+ quantizationId: qId,
+ quantizationTable: null
+ });
+ frame.componentIds[componentId] = l - 1;
+ offset += 3;
}
- var offsetsCount = 0;
+ frame.maxH = maxH;
+ frame.maxV = maxV;
+ prepareComponents(frame);
+ break;
- for (segIndex = 0; segIndex < segCount; segIndex++) {
- segment = segments[segIndex];
- var rangeOffset = file.getUint16();
+ case 0xffc4:
+ const huffmanLength = (0, _core_utils.readUint16)(data, offset);
+ offset += 2;
- if (!rangeOffset) {
- segment.offsetIndex = -1;
- continue;
+ for (i = 2; i < huffmanLength;) {
+ const huffmanTableSpec = data[offset++];
+ const codeLengths = new Uint8Array(16);
+ let codeLengthSum = 0;
+
+ for (j = 0; j < 16; j++, offset++) {
+ codeLengthSum += codeLengths[j] = data[offset];
}
- var offsetIndex = (rangeOffset >> 1) - (segCount - segIndex);
- segment.offsetIndex = offsetIndex;
- offsetsCount = Math.max(offsetsCount, offsetIndex + segment.end - segment.start + 1);
- }
+ const huffmanValues = new Uint8Array(codeLengthSum);
- var offsets = [];
+ for (j = 0; j < codeLengthSum; j++, offset++) {
+ huffmanValues[j] = data[offset];
+ }
- for (j = 0; j < offsetsCount; j++) {
- offsets.push(file.getUint16());
+ i += 17 + codeLengthSum;
+ (huffmanTableSpec >> 4 === 0 ? huffmanTablesDC : huffmanTablesAC)[huffmanTableSpec & 15] = buildHuffmanTable(codeLengths, huffmanValues);
}
- for (segIndex = 0; segIndex < segCount; segIndex++) {
- segment = segments[segIndex];
- start = segment.start;
- var end = segment.end;
- var delta = segment.delta;
- offsetIndex = segment.offsetIndex;
+ break;
- for (j = start; j <= end; j++) {
- if (j === 0xffff) {
- continue;
- }
+ case 0xffdd:
+ offset += 2;
+ resetInterval = (0, _core_utils.readUint16)(data, offset);
+ offset += 2;
+ break;
+
+ case 0xffda:
+ const parseDNLMarker = ++numSOSMarkers === 1 && !dnlScanLines;
+ offset += 2;
+ const selectorsCount = data[offset++],
+ components = [];
+
+ for (i = 0; i < selectorsCount; i++) {
+ const index = data[offset++];
+ const componentIndex = frame.componentIds[index];
+ const component = frame.components[componentIndex];
+ component.index = index;
+ const tableSpec = data[offset++];
+ component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4];
+ component.huffmanTableAC = huffmanTablesAC[tableSpec & 15];
+ components.push(component);
+ }
+
+ const spectralStart = data[offset++],
+ spectralEnd = data[offset++],
+ successiveApproximation = data[offset++];
- glyphId = offsetIndex < 0 ? j : offsets[offsetIndex + j - start];
- glyphId = glyphId + delta & 0xffff;
- mappings.push({
- charCode: j,
- glyphId
+ try {
+ const processed = decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successiveApproximation >> 4, successiveApproximation & 15, parseDNLMarker);
+ offset += processed;
+ } catch (ex) {
+ if (ex instanceof DNLMarkerError) {
+ (0, _util.warn)(`${ex.message} -- attempting to re-parse the JPEG image.`);
+ return this.parse(data, {
+ dnlScanLines: ex.scanLines
});
+ } else if (ex instanceof EOIMarkerError) {
+ (0, _util.warn)(`${ex.message} -- ignoring the rest of the image data.`);
+ break markerLoop;
}
+
+ throw ex;
}
- } else if (format === 6) {
- var firstCode = file.getUint16();
- var entryCount = file.getUint16();
- for (j = 0; j < entryCount; j++) {
- glyphId = file.getUint16();
- var charCode = firstCode + j;
- mappings.push({
- charCode,
- glyphId
- });
+ break;
+
+ case 0xffdc:
+ offset += 4;
+ break;
+
+ case 0xffff:
+ if (data[offset] !== 0xff) {
+ offset--;
}
- } else {
- (0, _util.warn)("cmap table has unsupported format: " + format);
- return {
- platformId: -1,
- encodingId: -1,
- mappings: [],
- hasShortCmap: false
- };
- }
- mappings.sort(function (a, b) {
- return a.charCode - b.charCode;
- });
+ break;
+
+ default:
+ const nextFileMarker = findNextFileMarker(data, offset - 2, offset - 3);
- for (i = 1; i < mappings.length; i++) {
- if (mappings[i - 1].charCode === mappings[i].charCode) {
- mappings.splice(i, 1);
- i--;
+ if (nextFileMarker && nextFileMarker.invalid) {
+ (0, _util.warn)("JpegImage.parse - unexpected data, current marker is: " + nextFileMarker.invalid);
+ offset = nextFileMarker.offset;
+ break;
}
- }
- return {
- platformId: potentialTable.platformId,
- encodingId: potentialTable.encodingId,
- mappings,
- hasShortCmap
- };
+ if (!nextFileMarker || offset >= data.length - 1) {
+ (0, _util.warn)("JpegImage.parse - reached the end of the image data " + "without finding an EOI marker (0xFFD9).");
+ break markerLoop;
+ }
+
+ throw new JpegError("JpegImage.parse - unknown marker: " + fileMarker.toString(16));
}
- function sanitizeMetrics(file, header, metrics, numGlyphs, dupFirstEntry) {
- if (!header) {
- if (metrics) {
- metrics.data = null;
- }
+ fileMarker = (0, _core_utils.readUint16)(data, offset);
+ offset += 2;
+ }
- return;
- }
+ this.width = frame.samplesPerLine;
+ this.height = frame.scanLines;
+ this.jfif = jfif;
+ this.adobe = adobe;
+ this.components = [];
- file.pos = (file.start ? file.start : 0) + header.offset;
- file.pos += 4;
- file.pos += 2;
- file.pos += 2;
- file.pos += 2;
- file.pos += 2;
- file.pos += 2;
- file.pos += 2;
- file.pos += 2;
- file.pos += 2;
- file.pos += 2;
- file.pos += 2;
- file.pos += 8;
- file.pos += 2;
- var numOfMetrics = file.getUint16();
+ for (let i = 0, ii = frame.components.length; i < ii; i++) {
+ const component = frame.components[i];
+ const quantizationTable = quantizationTables[component.quantizationId];
- if (numOfMetrics > numGlyphs) {
- (0, _util.info)("The numOfMetrics (" + numOfMetrics + ") should not be " + "greater than the numGlyphs (" + numGlyphs + ")");
- numOfMetrics = numGlyphs;
- header.data[34] = (numOfMetrics & 0xff00) >> 8;
- header.data[35] = numOfMetrics & 0x00ff;
- }
+ if (quantizationTable) {
+ component.quantizationTable = quantizationTable;
+ }
- var numOfSidebearings = numGlyphs - numOfMetrics;
- var numMissing = numOfSidebearings - (metrics.length - numOfMetrics * 4 >> 1);
+ this.components.push({
+ index: component.index,
+ output: buildComponentData(frame, component),
+ scaleX: component.h / frame.maxH,
+ scaleY: component.v / frame.maxV,
+ blocksPerLine: component.blocksPerLine,
+ blocksPerColumn: component.blocksPerColumn
+ });
+ }
- if (numMissing > 0) {
- var entries = new Uint8Array(metrics.length + numMissing * 2);
- entries.set(metrics.data);
+ this.numComponents = this.components.length;
+ return undefined;
+ }
- if (dupFirstEntry) {
- entries[metrics.length] = metrics.data[2];
- entries[metrics.length + 1] = metrics.data[3];
- }
+ _getLinearizedBlockData(width, height, isSourcePDF = false) {
+ const scaleX = this.width / width,
+ scaleY = this.height / height;
+ let component, componentScaleX, componentScaleY, blocksPerScanline;
+ let x, y, i, j, k;
+ let index;
+ let offset = 0;
+ let output;
+ const numComponents = this.components.length;
+ const dataLength = width * height * numComponents;
+ const data = new Uint8ClampedArray(dataLength);
+ const xScaleBlockOffset = new Uint32Array(width);
+ const mask3LSB = 0xfffffff8;
+ let lastComponentScaleX;
+
+ for (i = 0; i < numComponents; i++) {
+ component = this.components[i];
+ componentScaleX = component.scaleX * scaleX;
+ componentScaleY = component.scaleY * scaleY;
+ offset = i;
+ output = component.output;
+ blocksPerScanline = component.blocksPerLine + 1 << 3;
- metrics.data = entries;
+ if (componentScaleX !== lastComponentScaleX) {
+ for (x = 0; x < width; x++) {
+ j = 0 | x * componentScaleX;
+ xScaleBlockOffset[x] = (j & mask3LSB) << 3 | j & 7;
}
+
+ lastComponentScaleX = componentScaleX;
}
- function sanitizeGlyph(source, sourceStart, sourceEnd, dest, destStart, hintsValid) {
- var glyphProfile = {
- length: 0,
- sizeOfInstructions: 0
- };
+ for (y = 0; y < height; y++) {
+ j = 0 | y * componentScaleY;
+ index = blocksPerScanline * (j & mask3LSB) | (j & 7) << 3;
- if (sourceEnd - sourceStart <= 12) {
- return glyphProfile;
+ for (x = 0; x < width; x++) {
+ data[offset] = output[index + xScaleBlockOffset[x]];
+ offset += numComponents;
}
+ }
+ }
- var glyf = source.subarray(sourceStart, sourceEnd);
- var contoursCount = signedInt16(glyf[0], glyf[1]);
+ let transform = this._decodeTransform;
+
+ if (!isSourcePDF && numComponents === 4 && !transform) {
+ transform = new Int32Array([-256, 255, -256, 255, -256, 255, -256, 255]);
+ }
- if (contoursCount < 0) {
- contoursCount = -1;
- writeSignedInt16(glyf, 0, contoursCount);
- dest.set(glyf, destStart);
- glyphProfile.length = glyf.length;
- return glyphProfile;
+ if (transform) {
+ for (i = 0; i < dataLength;) {
+ for (j = 0, k = 0; j < numComponents; j++, i++, k += 2) {
+ data[i] = (data[i] * transform[k] >> 8) + transform[k + 1];
}
+ }
+ }
- var i,
- j = 10,
- flagsCount = 0;
+ return data;
+ }
- for (i = 0; i < contoursCount; i++) {
- var endPoint = glyf[j] << 8 | glyf[j + 1];
- flagsCount = endPoint + 1;
- j += 2;
- }
+ get _isColorConversionNeeded() {
+ if (this.adobe) {
+ return !!this.adobe.transformCode;
+ }
- var instructionsStart = j;
- var instructionsLength = glyf[j] << 8 | glyf[j + 1];
- glyphProfile.sizeOfInstructions = instructionsLength;
- j += 2 + instructionsLength;
- var instructionsEnd = j;
- var coordinatesLength = 0;
+ if (this.numComponents === 3) {
+ if (this._colorTransform === 0) {
+ return false;
+ } else if (this.components[0].index === 0x52 && this.components[1].index === 0x47 && this.components[2].index === 0x42) {
+ return false;
+ }
- for (i = 0; i < flagsCount; i++) {
- var flag = glyf[j++];
+ return true;
+ }
- if (flag & 0xc0) {
- glyf[j - 1] = flag & 0x3f;
- }
+ if (this._colorTransform === 1) {
+ return true;
+ }
- let xLength = 2;
+ return false;
+ }
- if (flag & 2) {
- xLength = 1;
- } else if (flag & 16) {
- xLength = 0;
- }
+ _convertYccToRgb(data) {
+ let Y, Cb, Cr;
- let yLength = 2;
+ for (let i = 0, length = data.length; i < length; i += 3) {
+ Y = data[i];
+ Cb = data[i + 1];
+ Cr = data[i + 2];
+ data[i] = Y - 179.456 + 1.402 * Cr;
+ data[i + 1] = Y + 135.459 - 0.344 * Cb - 0.714 * Cr;
+ data[i + 2] = Y - 226.816 + 1.772 * Cb;
+ }
- if (flag & 4) {
- yLength = 1;
- } else if (flag & 32) {
- yLength = 0;
- }
+ return data;
+ }
- const xyLength = xLength + yLength;
- coordinatesLength += xyLength;
+ _convertYcckToRgb(data) {
+ let Y, Cb, Cr, k;
+ let offset = 0;
- if (flag & 8) {
- var repeat = glyf[j++];
- i += repeat;
- coordinatesLength += repeat * xyLength;
- }
- }
+ for (let i = 0, length = data.length; i < length; i += 4) {
+ Y = data[i];
+ Cb = data[i + 1];
+ Cr = data[i + 2];
+ k = data[i + 3];
+ data[offset++] = -122.67195406894 + Cb * (-6.60635669420364e-5 * Cb + 0.000437130475926232 * Cr - 5.4080610064599e-5 * Y + 0.00048449797120281 * k - 0.154362151871126) + Cr * (-0.000957964378445773 * Cr + 0.000817076911346625 * Y - 0.00477271405408747 * k + 1.53380253221734) + Y * (0.000961250184130688 * Y - 0.00266257332283933 * k + 0.48357088451265) + k * (-0.000336197177618394 * k + 0.484791561490776);
+ data[offset++] = 107.268039397724 + Cb * (2.19927104525741e-5 * Cb - 0.000640992018297945 * Cr + 0.000659397001245577 * Y + 0.000426105652938837 * k - 0.176491792462875) + Cr * (-0.000778269941513683 * Cr + 0.00130872261408275 * Y + 0.000770482631801132 * k - 0.151051492775562) + Y * (0.00126935368114843 * Y - 0.00265090189010898 * k + 0.25802910206845) + k * (-0.000318913117588328 * k - 0.213742400323665);
+ data[offset++] = -20.810012546947 + Cb * (-0.000570115196973677 * Cb - 2.63409051004589e-5 * Cr + 0.0020741088115012 * Y - 0.00288260236853442 * k + 0.814272968359295) + Cr * (-1.53496057440975e-5 * Cr - 0.000132689043961446 * Y + 0.000560833691242812 * k - 0.195152027534049) + Y * (0.00174418132927582 * Y - 0.00255243321439347 * k + 0.116935020465145) + k * (-0.000343531996510555 * k + 0.24165260232407);
+ }
- if (coordinatesLength === 0) {
- return glyphProfile;
- }
+ return data.subarray(0, offset);
+ }
- var glyphDataLength = j + coordinatesLength;
+ _convertYcckToCmyk(data) {
+ let Y, Cb, Cr;
- if (glyphDataLength > glyf.length) {
- return glyphProfile;
- }
+ for (let i = 0, length = data.length; i < length; i += 4) {
+ Y = data[i];
+ Cb = data[i + 1];
+ Cr = data[i + 2];
+ data[i] = 434.456 - Y - 1.402 * Cr;
+ data[i + 1] = 119.541 - Y + 0.344 * Cb + 0.714 * Cr;
+ data[i + 2] = 481.816 - Y - 1.772 * Cb;
+ }
- if (!hintsValid && instructionsLength > 0) {
- dest.set(glyf.subarray(0, instructionsStart), destStart);
- dest.set([0, 0], destStart + instructionsStart);
- dest.set(glyf.subarray(instructionsEnd, glyphDataLength), destStart + instructionsStart + 2);
- glyphDataLength -= instructionsLength;
+ return data;
+ }
- if (glyf.length - glyphDataLength > 3) {
- glyphDataLength = glyphDataLength + 3 & ~3;
- }
+ _convertCmykToRgb(data) {
+ let c, m, y, k;
+ let offset = 0;
- glyphProfile.length = glyphDataLength;
- return glyphProfile;
- }
+ for (let i = 0, length = data.length; i < length; i += 4) {
+ c = data[i];
+ m = data[i + 1];
+ y = data[i + 2];
+ k = data[i + 3];
+ data[offset++] = 255 + c * (-0.00006747147073602441 * c + 0.0008379262121013727 * m + 0.0002894718188643294 * y + 0.003264231057537806 * k - 1.1185611867203937) + m * (0.000026374107616089405 * m - 0.00008626949158638572 * y - 0.0002748769067499491 * k - 0.02155688794978967) + y * (-0.00003878099212869363 * y - 0.0003267808279485286 * k + 0.0686742238595345) - k * (0.0003361971776183937 * k + 0.7430659151342254);
+ data[offset++] = 255 + c * (0.00013596372813588848 * c + 0.000924537132573585 * m + 0.00010567359618683593 * y + 0.0004791864687436512 * k - 0.3109689587515875) + m * (-0.00023545346108370344 * m + 0.0002702845253534714 * y + 0.0020200308977307156 * k - 0.7488052167015494) + y * (0.00006834815998235662 * y + 0.00015168452363460973 * k - 0.09751927774728933) - k * (0.00031891311758832814 * k + 0.7364883807733168);
+ data[offset++] = 255 + c * (0.000013598650411385307 * c + 0.00012423956175490851 * m + 0.0004751985097583589 * y - 0.0000036729317476630422 * k - 0.05562186980264034) + m * (0.00016141380598724676 * m + 0.0009692239130725186 * y + 0.0007782692450036253 * k - 0.44015232367526463) + y * (5.068882914068769e-7 * y + 0.0017778369011375071 * k - 0.7591454649749609) - k * (0.0003435319965105553 * k + 0.7063770186160144);
+ }
- if (glyf.length - glyphDataLength > 3) {
- glyphDataLength = glyphDataLength + 3 & ~3;
- dest.set(glyf.subarray(0, glyphDataLength), destStart);
- glyphProfile.length = glyphDataLength;
- return glyphProfile;
+ return data.subarray(0, offset);
+ }
+
+ getData({
+ width,
+ height,
+ forceRGB = false,
+ isSourcePDF = false
+ }) {
+ if (this.numComponents > 4) {
+ throw new JpegError("Unsupported color mode");
+ }
+
+ const data = this._getLinearizedBlockData(width, height, isSourcePDF);
+
+ if (this.numComponents === 1 && forceRGB) {
+ const dataLength = data.length;
+ const rgbData = new Uint8ClampedArray(dataLength * 3);
+ let offset = 0;
+
+ for (let i = 0; i < dataLength; i++) {
+ const grayColor = data[i];
+ rgbData[offset++] = grayColor;
+ rgbData[offset++] = grayColor;
+ rgbData[offset++] = grayColor;
+ }
+
+ return rgbData;
+ } else if (this.numComponents === 3 && this._isColorConversionNeeded) {
+ return this._convertYccToRgb(data);
+ } else if (this.numComponents === 4) {
+ if (this._isColorConversionNeeded) {
+ if (forceRGB) {
+ return this._convertYcckToRgb(data);
}
- dest.set(glyf, destStart);
- glyphProfile.length = glyf.length;
- return glyphProfile;
+ return this._convertYcckToCmyk(data);
+ } else if (forceRGB) {
+ return this._convertCmykToRgb(data);
}
+ }
- function sanitizeHead(head, numGlyphs, locaLength) {
- var data = head.data;
- var version = int32(data[0], data[1], data[2], data[3]);
+ return data;
+ }
- if (version >> 16 !== 1) {
- (0, _util.info)("Attempting to fix invalid version in head table: " + version);
- data[0] = 0;
- data[1] = 1;
- data[2] = 0;
- data[3] = 0;
- }
+}
- var indexToLocFormat = int16(data[50], data[51]);
+exports.JpegImage = JpegImage;
- if (indexToLocFormat < 0 || indexToLocFormat > 1) {
- (0, _util.info)("Attempting to fix invalid indexToLocFormat in head table: " + indexToLocFormat);
- var numGlyphsPlusOne = numGlyphs + 1;
+/***/ }),
+/* 29 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
- if (locaLength === numGlyphsPlusOne << 1) {
- data[50] = 0;
- data[51] = 0;
- } else if (locaLength === numGlyphsPlusOne << 2) {
- data[50] = 0;
- data[51] = 1;
- } else {
- throw new _util.FormatError("Could not fix indexToLocFormat: " + indexToLocFormat);
- }
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.JpxStream = void 0;
+
+var _decode_stream = __w_pdfjs_require__(19);
+
+var _jpx = __w_pdfjs_require__(30);
+
+var _util = __w_pdfjs_require__(2);
+
+class JpxStream extends _decode_stream.DecodeStream {
+ constructor(stream, maybeLength, params) {
+ super(maybeLength);
+ this.stream = stream;
+ this.dict = stream.dict;
+ this.maybeLength = maybeLength;
+ this.params = params;
+ }
+
+ get bytes() {
+ return (0, _util.shadow)(this, "bytes", this.stream.getBytes(this.maybeLength));
+ }
+
+ ensureBuffer(requested) {}
+
+ readBlock() {
+ if (this.eof) {
+ return;
+ }
+
+ const jpxImage = new _jpx.JpxImage();
+ jpxImage.parse(this.bytes);
+ const width = jpxImage.width;
+ const height = jpxImage.height;
+ const componentsCount = jpxImage.componentsCount;
+ const tileCount = jpxImage.tiles.length;
+
+ if (tileCount === 1) {
+ this.buffer = jpxImage.tiles[0].items;
+ } else {
+ const data = new Uint8ClampedArray(width * height * componentsCount);
+
+ for (let k = 0; k < tileCount; k++) {
+ const tileComponents = jpxImage.tiles[k];
+ const tileWidth = tileComponents.width;
+ const tileHeight = tileComponents.height;
+ const tileLeft = tileComponents.left;
+ const tileTop = tileComponents.top;
+ const src = tileComponents.items;
+ let srcPosition = 0;
+ let dataPosition = (width * tileTop + tileLeft) * componentsCount;
+ const imgRowSize = width * componentsCount;
+ const tileRowSize = tileWidth * componentsCount;
+
+ for (let j = 0; j < tileHeight; j++) {
+ const rowBytes = src.subarray(srcPosition, srcPosition + tileRowSize);
+ data.set(rowBytes, dataPosition);
+ srcPosition += tileRowSize;
+ dataPosition += imgRowSize;
}
}
- function sanitizeGlyphLocations(loca, glyf, numGlyphs, isGlyphLocationsLong, hintsValid, dupFirstEntry, maxSizeOfInstructions) {
- var itemSize, itemDecode, itemEncode;
+ this.buffer = data;
+ }
- if (isGlyphLocationsLong) {
- itemSize = 4;
+ this.bufferLength = this.buffer.length;
+ this.eof = true;
+ }
- itemDecode = function fontItemDecodeLong(data, offset) {
- return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3];
- };
+}
- itemEncode = function fontItemEncodeLong(data, offset, value) {
- data[offset] = value >>> 24 & 0xff;
- data[offset + 1] = value >> 16 & 0xff;
- data[offset + 2] = value >> 8 & 0xff;
- data[offset + 3] = value & 0xff;
- };
- } else {
- itemSize = 2;
+exports.JpxStream = JpxStream;
- itemDecode = function fontItemDecode(data, offset) {
- return data[offset] << 9 | data[offset + 1] << 1;
- };
+/***/ }),
+/* 30 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
- itemEncode = function fontItemEncode(data, offset, value) {
- data[offset] = value >> 9 & 0xff;
- data[offset + 1] = value >> 1 & 0xff;
- };
- }
- var numGlyphsOut = dupFirstEntry ? numGlyphs + 1 : numGlyphs;
- var locaDataSize = itemSize * (1 + numGlyphsOut);
- var locaData = new Uint8Array(locaDataSize);
- locaData.set(loca.data.subarray(0, locaDataSize));
- loca.data = locaData;
- var oldGlyfData = glyf.data;
- var oldGlyfDataLength = oldGlyfData.length;
- var newGlyfData = new Uint8Array(oldGlyfDataLength);
- var i, j;
- const locaEntries = [];
- for (i = 0, j = 0; i < numGlyphs + 1; i++, j += itemSize) {
- let offset = itemDecode(locaData, j);
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.JpxImage = void 0;
- if (offset > oldGlyfDataLength) {
- offset = oldGlyfDataLength;
- }
+var _util = __w_pdfjs_require__(2);
- locaEntries.push({
- index: i,
- offset,
- endOffset: 0
- });
- }
+var _core_utils = __w_pdfjs_require__(9);
- locaEntries.sort((a, b) => {
- return a.offset - b.offset;
- });
+var _arithmetic_decoder = __w_pdfjs_require__(26);
- for (i = 0; i < numGlyphs; i++) {
- locaEntries[i].endOffset = locaEntries[i + 1].offset;
- }
+class JpxError extends _util.BaseException {
+ constructor(msg) {
+ super(`JPX error: ${msg}`);
+ }
- locaEntries.sort((a, b) => {
- return a.index - b.index;
- });
- var missingGlyphs = Object.create(null);
- var writeOffset = 0;
- itemEncode(locaData, 0, writeOffset);
+}
- for (i = 0, j = itemSize; i < numGlyphs; i++, j += itemSize) {
- var glyphProfile = sanitizeGlyph(oldGlyfData, locaEntries[i].offset, locaEntries[i].endOffset, newGlyfData, writeOffset, hintsValid);
- var newLength = glyphProfile.length;
+const SubbandsGainLog2 = {
+ LL: 0,
+ LH: 1,
+ HL: 1,
+ HH: 2
+};
- if (newLength === 0) {
- missingGlyphs[i] = true;
- }
+class JpxImage {
+ constructor() {
+ this.failOnCorruptedImage = false;
+ }
- if (glyphProfile.sizeOfInstructions > maxSizeOfInstructions) {
- maxSizeOfInstructions = glyphProfile.sizeOfInstructions;
- }
+ parse(data) {
+ const head = (0, _core_utils.readUint16)(data, 0);
- writeOffset += newLength;
- itemEncode(locaData, j, writeOffset);
- }
+ if (head === 0xff4f) {
+ this.parseCodestream(data, 0, data.length);
+ return;
+ }
+
+ const length = data.length;
+ let position = 0;
+
+ while (position < length) {
+ let headerSize = 8;
+ let lbox = (0, _core_utils.readUint32)(data, position);
+ const tbox = (0, _core_utils.readUint32)(data, position + 4);
+ position += headerSize;
- if (writeOffset === 0) {
- var simpleGlyph = new Uint8Array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0]);
+ if (lbox === 1) {
+ lbox = (0, _core_utils.readUint32)(data, position) * 4294967296 + (0, _core_utils.readUint32)(data, position + 4);
+ position += 8;
+ headerSize += 8;
+ }
+
+ if (lbox === 0) {
+ lbox = length - position + headerSize;
+ }
+
+ if (lbox < headerSize) {
+ throw new JpxError("Invalid box field size");
+ }
+
+ const dataLength = lbox - headerSize;
+ let jumpDataLength = true;
+
+ switch (tbox) {
+ case 0x6a703268:
+ jumpDataLength = false;
+ break;
- for (i = 0, j = itemSize; i < numGlyphsOut; i++, j += itemSize) {
- itemEncode(locaData, j, simpleGlyph.length);
+ case 0x636f6c72:
+ const method = data[position];
+
+ if (method === 1) {
+ const colorspace = (0, _core_utils.readUint32)(data, position + 3);
+
+ switch (colorspace) {
+ case 16:
+ case 17:
+ case 18:
+ break;
+
+ default:
+ (0, _util.warn)("Unknown colorspace " + colorspace);
+ break;
+ }
+ } else if (method === 2) {
+ (0, _util.info)("ICC profile not supported");
}
- glyf.data = simpleGlyph;
- } else if (dupFirstEntry) {
- var firstEntryLength = itemDecode(locaData, itemSize);
+ break;
- if (newGlyfData.length > firstEntryLength + writeOffset) {
- glyf.data = newGlyfData.subarray(0, firstEntryLength + writeOffset);
- } else {
- glyf.data = new Uint8Array(firstEntryLength + writeOffset);
- glyf.data.set(newGlyfData.subarray(0, writeOffset));
+ case 0x6a703263:
+ this.parseCodestream(data, position, position + dataLength);
+ break;
+
+ case 0x6a502020:
+ if ((0, _core_utils.readUint32)(data, position) !== 0x0d0a870a) {
+ (0, _util.warn)("Invalid JP2 signature");
}
- glyf.data.set(newGlyfData.subarray(0, firstEntryLength), writeOffset);
- itemEncode(loca.data, locaData.length - itemSize, writeOffset + firstEntryLength);
- } else {
- glyf.data = newGlyfData.subarray(0, writeOffset);
- }
+ break;
- return {
- missingGlyphs,
- maxSizeOfInstructions
- };
+ case 0x6a501a1a:
+ case 0x66747970:
+ case 0x72726571:
+ case 0x72657320:
+ case 0x69686472:
+ break;
+
+ default:
+ const headerType = String.fromCharCode(tbox >> 24 & 0xff, tbox >> 16 & 0xff, tbox >> 8 & 0xff, tbox & 0xff);
+ (0, _util.warn)(`Unsupported header type ${tbox} (${headerType}).`);
+ break;
}
- function readPostScriptTable(post, propertiesObj, maxpNumGlyphs) {
- var start = (font.start ? font.start : 0) + post.offset;
- font.pos = start;
- var length = post.length,
- end = start + length;
- var version = font.getInt32();
- font.skip(28);
- var glyphNames;
- var valid = true;
- var i;
-
- switch (version) {
- case 0x00010000:
- glyphNames = MacStandardGlyphOrdering;
+ if (jumpDataLength) {
+ position += dataLength;
+ }
+ }
+ }
+
+ parseImageProperties(stream) {
+ let newByte = stream.getByte();
+
+ while (newByte >= 0) {
+ const oldByte = newByte;
+ newByte = stream.getByte();
+ const code = oldByte << 8 | newByte;
+
+ if (code === 0xff51) {
+ stream.skip(4);
+ const Xsiz = stream.getInt32() >>> 0;
+ const Ysiz = stream.getInt32() >>> 0;
+ const XOsiz = stream.getInt32() >>> 0;
+ const YOsiz = stream.getInt32() >>> 0;
+ stream.skip(16);
+ const Csiz = stream.getUint16();
+ this.width = Xsiz - XOsiz;
+ this.height = Ysiz - YOsiz;
+ this.componentsCount = Csiz;
+ this.bitsPerComponent = 8;
+ return;
+ }
+ }
+
+ throw new JpxError("No size marker found in JPX stream");
+ }
+
+ parseCodestream(data, start, end) {
+ const context = {};
+ let doNotRecover = false;
+
+ try {
+ let position = start;
+
+ while (position + 1 < end) {
+ const code = (0, _core_utils.readUint16)(data, position);
+ position += 2;
+ let length = 0,
+ j,
+ sqcd,
+ spqcds,
+ spqcdSize,
+ scalarExpounded,
+ tile;
+
+ switch (code) {
+ case 0xff4f:
+ context.mainHeader = true;
break;
- case 0x00020000:
- var numGlyphs = font.getUint16();
+ case 0xffd9:
+ break;
- if (numGlyphs !== maxpNumGlyphs) {
- valid = false;
- break;
+ case 0xff51:
+ length = (0, _core_utils.readUint16)(data, position);
+ const siz = {};
+ siz.Xsiz = (0, _core_utils.readUint32)(data, position + 4);
+ siz.Ysiz = (0, _core_utils.readUint32)(data, position + 8);
+ siz.XOsiz = (0, _core_utils.readUint32)(data, position + 12);
+ siz.YOsiz = (0, _core_utils.readUint32)(data, position + 16);
+ siz.XTsiz = (0, _core_utils.readUint32)(data, position + 20);
+ siz.YTsiz = (0, _core_utils.readUint32)(data, position + 24);
+ siz.XTOsiz = (0, _core_utils.readUint32)(data, position + 28);
+ siz.YTOsiz = (0, _core_utils.readUint32)(data, position + 32);
+ const componentsCount = (0, _core_utils.readUint16)(data, position + 36);
+ siz.Csiz = componentsCount;
+ const components = [];
+ j = position + 38;
+
+ for (let i = 0; i < componentsCount; i++) {
+ const component = {
+ precision: (data[j] & 0x7f) + 1,
+ isSigned: !!(data[j] & 0x80),
+ XRsiz: data[j + 1],
+ YRsiz: data[j + 2]
+ };
+ j += 3;
+ calculateComponentDimensions(component, siz);
+ components.push(component);
}
- var glyphNameIndexes = [];
+ context.SIZ = siz;
+ context.components = components;
+ calculateTileGrids(context, components);
+ context.QCC = [];
+ context.COC = [];
+ break;
+
+ case 0xff5c:
+ length = (0, _core_utils.readUint16)(data, position);
+ const qcd = {};
+ j = position + 2;
+ sqcd = data[j++];
+
+ switch (sqcd & 0x1f) {
+ case 0:
+ spqcdSize = 8;
+ scalarExpounded = true;
+ break;
- for (i = 0; i < numGlyphs; ++i) {
- var index = font.getUint16();
+ case 1:
+ spqcdSize = 16;
+ scalarExpounded = false;
+ break;
- if (index >= 32768) {
- valid = false;
+ case 2:
+ spqcdSize = 16;
+ scalarExpounded = true;
break;
+
+ default:
+ throw new Error("Invalid SQcd value " + sqcd);
+ }
+
+ qcd.noQuantization = spqcdSize === 8;
+ qcd.scalarExpounded = scalarExpounded;
+ qcd.guardBits = sqcd >> 5;
+ spqcds = [];
+
+ while (j < length + position) {
+ const spqcd = {};
+
+ if (spqcdSize === 8) {
+ spqcd.epsilon = data[j++] >> 3;
+ spqcd.mu = 0;
+ } else {
+ spqcd.epsilon = data[j] >> 3;
+ spqcd.mu = (data[j] & 0x7) << 8 | data[j + 1];
+ j += 2;
}
- glyphNameIndexes.push(index);
+ spqcds.push(spqcd);
}
- if (!valid) {
- break;
+ qcd.SPqcds = spqcds;
+
+ if (context.mainHeader) {
+ context.QCD = qcd;
+ } else {
+ context.currentTile.QCD = qcd;
+ context.currentTile.QCC = [];
+ }
+
+ break;
+
+ case 0xff5d:
+ length = (0, _core_utils.readUint16)(data, position);
+ const qcc = {};
+ j = position + 2;
+ let cqcc;
+
+ if (context.SIZ.Csiz < 257) {
+ cqcc = data[j++];
+ } else {
+ cqcc = (0, _core_utils.readUint16)(data, j);
+ j += 2;
+ }
+
+ sqcd = data[j++];
+
+ switch (sqcd & 0x1f) {
+ case 0:
+ spqcdSize = 8;
+ scalarExpounded = true;
+ break;
+
+ case 1:
+ spqcdSize = 16;
+ scalarExpounded = false;
+ break;
+
+ case 2:
+ spqcdSize = 16;
+ scalarExpounded = true;
+ break;
+
+ default:
+ throw new Error("Invalid SQcd value " + sqcd);
}
- var customNames = [];
- var strBuf = [];
+ qcc.noQuantization = spqcdSize === 8;
+ qcc.scalarExpounded = scalarExpounded;
+ qcc.guardBits = sqcd >> 5;
+ spqcds = [];
- while (font.pos < end) {
- var stringLength = font.getByte();
- strBuf.length = stringLength;
+ while (j < length + position) {
+ const spqcd = {};
- for (i = 0; i < stringLength; ++i) {
- strBuf[i] = String.fromCharCode(font.getByte());
+ if (spqcdSize === 8) {
+ spqcd.epsilon = data[j++] >> 3;
+ spqcd.mu = 0;
+ } else {
+ spqcd.epsilon = data[j] >> 3;
+ spqcd.mu = (data[j] & 0x7) << 8 | data[j + 1];
+ j += 2;
}
- customNames.push(strBuf.join(""));
+ spqcds.push(spqcd);
}
- glyphNames = [];
+ qcc.SPqcds = spqcds;
+
+ if (context.mainHeader) {
+ context.QCC[cqcc] = qcc;
+ } else {
+ context.currentTile.QCC[cqcc] = qcc;
+ }
- for (i = 0; i < numGlyphs; ++i) {
- var j = glyphNameIndexes[i];
+ break;
- if (j < 258) {
- glyphNames.push(MacStandardGlyphOrdering[j]);
- continue;
+ case 0xff52:
+ length = (0, _core_utils.readUint16)(data, position);
+ const cod = {};
+ j = position + 2;
+ const scod = data[j++];
+ cod.entropyCoderWithCustomPrecincts = !!(scod & 1);
+ cod.sopMarkerUsed = !!(scod & 2);
+ cod.ephMarkerUsed = !!(scod & 4);
+ cod.progressionOrder = data[j++];
+ cod.layersCount = (0, _core_utils.readUint16)(data, j);
+ j += 2;
+ cod.multipleComponentTransform = data[j++];
+ cod.decompositionLevelsCount = data[j++];
+ cod.xcb = (data[j++] & 0xf) + 2;
+ cod.ycb = (data[j++] & 0xf) + 2;
+ const blockStyle = data[j++];
+ cod.selectiveArithmeticCodingBypass = !!(blockStyle & 1);
+ cod.resetContextProbabilities = !!(blockStyle & 2);
+ cod.terminationOnEachCodingPass = !!(blockStyle & 4);
+ cod.verticallyStripe = !!(blockStyle & 8);
+ cod.predictableTermination = !!(blockStyle & 16);
+ cod.segmentationSymbolUsed = !!(blockStyle & 32);
+ cod.reversibleTransformation = data[j++];
+
+ if (cod.entropyCoderWithCustomPrecincts) {
+ const precinctsSizes = [];
+
+ while (j < length + position) {
+ const precinctsSize = data[j++];
+ precinctsSizes.push({
+ PPx: precinctsSize & 0xf,
+ PPy: precinctsSize >> 4
+ });
}
- glyphNames.push(customNames[j - 258]);
+ cod.precinctsSizes = precinctsSizes;
+ }
+
+ const unsupported = [];
+
+ if (cod.selectiveArithmeticCodingBypass) {
+ unsupported.push("selectiveArithmeticCodingBypass");
+ }
+
+ if (cod.resetContextProbabilities) {
+ unsupported.push("resetContextProbabilities");
+ }
+
+ if (cod.terminationOnEachCodingPass) {
+ unsupported.push("terminationOnEachCodingPass");
+ }
+
+ if (cod.verticallyStripe) {
+ unsupported.push("verticallyStripe");
+ }
+
+ if (cod.predictableTermination) {
+ unsupported.push("predictableTermination");
+ }
+
+ if (unsupported.length > 0) {
+ doNotRecover = true;
+ (0, _util.warn)(`JPX: Unsupported COD options (${unsupported.join(", ")}).`);
+ }
+
+ if (context.mainHeader) {
+ context.COD = cod;
+ } else {
+ context.currentTile.COD = cod;
+ context.currentTile.COC = [];
}
break;
- case 0x00030000:
+ case 0xff90:
+ length = (0, _core_utils.readUint16)(data, position);
+ tile = {};
+ tile.index = (0, _core_utils.readUint16)(data, position + 2);
+ tile.length = (0, _core_utils.readUint32)(data, position + 4);
+ tile.dataEnd = tile.length + position - 2;
+ tile.partIndex = data[position + 8];
+ tile.partsCount = data[position + 9];
+ context.mainHeader = false;
+
+ if (tile.partIndex === 0) {
+ tile.COD = context.COD;
+ tile.COC = context.COC.slice(0);
+ tile.QCD = context.QCD;
+ tile.QCC = context.QCC.slice(0);
+ }
+
+ context.currentTile = tile;
break;
- default:
- (0, _util.warn)("Unknown/unsupported post table version " + version);
- valid = false;
+ case 0xff93:
+ tile = context.currentTile;
- if (propertiesObj.defaultEncoding) {
- glyphNames = propertiesObj.defaultEncoding;
+ if (tile.partIndex === 0) {
+ initializeTile(context, tile.index);
+ buildPackets(context);
}
+ length = tile.dataEnd - position;
+ parseTilePackets(context, data, position, length);
break;
+
+ case 0xff53:
+ (0, _util.warn)("JPX: Codestream code 0xFF53 (COC) is not implemented.");
+
+ case 0xff55:
+ case 0xff57:
+ case 0xff58:
+ case 0xff64:
+ length = (0, _core_utils.readUint16)(data, position);
+ break;
+
+ default:
+ throw new Error("Unknown codestream code: " + code.toString(16));
}
- propertiesObj.glyphNames = glyphNames;
- return valid;
+ position += length;
+ }
+ } catch (e) {
+ if (doNotRecover || this.failOnCorruptedImage) {
+ throw new JpxError(e.message);
+ } else {
+ (0, _util.warn)(`JPX: Trying to recover from: "${e.message}".`);
}
+ }
- function readNameTable(nameTable) {
- var start = (font.start ? font.start : 0) + nameTable.offset;
- font.pos = start;
- var names = [[], []];
- var length = nameTable.length,
- end = start + length;
- var format = font.getUint16();
- var FORMAT_0_HEADER_LENGTH = 6;
-
- if (format !== 0 || length < FORMAT_0_HEADER_LENGTH) {
- return names;
- }
-
- var numRecords = font.getUint16();
- var stringsStart = font.getUint16();
- var records = [];
- var NAME_RECORD_LENGTH = 12;
- var i, ii;
-
- for (i = 0; i < numRecords && font.pos + NAME_RECORD_LENGTH <= end; i++) {
- var r = {
- platform: font.getUint16(),
- encoding: font.getUint16(),
- language: font.getUint16(),
- name: font.getUint16(),
- length: font.getUint16(),
- offset: font.getUint16()
- };
+ this.tiles = transformComponents(context);
+ this.width = context.SIZ.Xsiz - context.SIZ.XOsiz;
+ this.height = context.SIZ.Ysiz - context.SIZ.YOsiz;
+ this.componentsCount = context.SIZ.Csiz;
+ }
+
+}
+
+exports.JpxImage = JpxImage;
+
+function calculateComponentDimensions(component, siz) {
+ component.x0 = Math.ceil(siz.XOsiz / component.XRsiz);
+ component.x1 = Math.ceil(siz.Xsiz / component.XRsiz);
+ component.y0 = Math.ceil(siz.YOsiz / component.YRsiz);
+ component.y1 = Math.ceil(siz.Ysiz / component.YRsiz);
+ component.width = component.x1 - component.x0;
+ component.height = component.y1 - component.y0;
+}
+
+function calculateTileGrids(context, components) {
+ const siz = context.SIZ;
+ const tiles = [];
+ let tile;
+ const numXtiles = Math.ceil((siz.Xsiz - siz.XTOsiz) / siz.XTsiz);
+ const numYtiles = Math.ceil((siz.Ysiz - siz.YTOsiz) / siz.YTsiz);
+
+ for (let q = 0; q < numYtiles; q++) {
+ for (let p = 0; p < numXtiles; p++) {
+ tile = {};
+ tile.tx0 = Math.max(siz.XTOsiz + p * siz.XTsiz, siz.XOsiz);
+ tile.ty0 = Math.max(siz.YTOsiz + q * siz.YTsiz, siz.YOsiz);
+ tile.tx1 = Math.min(siz.XTOsiz + (p + 1) * siz.XTsiz, siz.Xsiz);
+ tile.ty1 = Math.min(siz.YTOsiz + (q + 1) * siz.YTsiz, siz.Ysiz);
+ tile.width = tile.tx1 - tile.tx0;
+ tile.height = tile.ty1 - tile.ty0;
+ tile.components = [];
+ tiles.push(tile);
+ }
+ }
+
+ context.tiles = tiles;
+ const componentsCount = siz.Csiz;
+
+ for (let i = 0, ii = componentsCount; i < ii; i++) {
+ const component = components[i];
+
+ for (let j = 0, jj = tiles.length; j < jj; j++) {
+ const tileComponent = {};
+ tile = tiles[j];
+ tileComponent.tcx0 = Math.ceil(tile.tx0 / component.XRsiz);
+ tileComponent.tcy0 = Math.ceil(tile.ty0 / component.YRsiz);
+ tileComponent.tcx1 = Math.ceil(tile.tx1 / component.XRsiz);
+ tileComponent.tcy1 = Math.ceil(tile.ty1 / component.YRsiz);
+ tileComponent.width = tileComponent.tcx1 - tileComponent.tcx0;
+ tileComponent.height = tileComponent.tcy1 - tileComponent.tcy0;
+ tile.components[i] = tileComponent;
+ }
+ }
+}
+
+function getBlocksDimensions(context, component, r) {
+ const codOrCoc = component.codingStyleParameters;
+ const result = {};
+
+ if (!codOrCoc.entropyCoderWithCustomPrecincts) {
+ result.PPx = 15;
+ result.PPy = 15;
+ } else {
+ result.PPx = codOrCoc.precinctsSizes[r].PPx;
+ result.PPy = codOrCoc.precinctsSizes[r].PPy;
+ }
+
+ result.xcb_ = r > 0 ? Math.min(codOrCoc.xcb, result.PPx - 1) : Math.min(codOrCoc.xcb, result.PPx);
+ result.ycb_ = r > 0 ? Math.min(codOrCoc.ycb, result.PPy - 1) : Math.min(codOrCoc.ycb, result.PPy);
+ return result;
+}
+
+function buildPrecincts(context, resolution, dimensions) {
+ const precinctWidth = 1 << dimensions.PPx;
+ const precinctHeight = 1 << dimensions.PPy;
+ const isZeroRes = resolution.resLevel === 0;
+ const precinctWidthInSubband = 1 << dimensions.PPx + (isZeroRes ? 0 : -1);
+ const precinctHeightInSubband = 1 << dimensions.PPy + (isZeroRes ? 0 : -1);
+ const numprecinctswide = resolution.trx1 > resolution.trx0 ? Math.ceil(resolution.trx1 / precinctWidth) - Math.floor(resolution.trx0 / precinctWidth) : 0;
+ const numprecinctshigh = resolution.try1 > resolution.try0 ? Math.ceil(resolution.try1 / precinctHeight) - Math.floor(resolution.try0 / precinctHeight) : 0;
+ const numprecincts = numprecinctswide * numprecinctshigh;
+ resolution.precinctParameters = {
+ precinctWidth,
+ precinctHeight,
+ numprecinctswide,
+ numprecinctshigh,
+ numprecincts,
+ precinctWidthInSubband,
+ precinctHeightInSubband
+ };
+}
+
+function buildCodeblocks(context, subband, dimensions) {
+ const xcb_ = dimensions.xcb_;
+ const ycb_ = dimensions.ycb_;
+ const codeblockWidth = 1 << xcb_;
+ const codeblockHeight = 1 << ycb_;
+ const cbx0 = subband.tbx0 >> xcb_;
+ const cby0 = subband.tby0 >> ycb_;
+ const cbx1 = subband.tbx1 + codeblockWidth - 1 >> xcb_;
+ const cby1 = subband.tby1 + codeblockHeight - 1 >> ycb_;
+ const precinctParameters = subband.resolution.precinctParameters;
+ const codeblocks = [];
+ const precincts = [];
+ let i, j, codeblock, precinctNumber;
+
+ for (j = cby0; j < cby1; j++) {
+ for (i = cbx0; i < cbx1; i++) {
+ codeblock = {
+ cbx: i,
+ cby: j,
+ tbx0: codeblockWidth * i,
+ tby0: codeblockHeight * j,
+ tbx1: codeblockWidth * (i + 1),
+ tby1: codeblockHeight * (j + 1)
+ };
+ codeblock.tbx0_ = Math.max(subband.tbx0, codeblock.tbx0);
+ codeblock.tby0_ = Math.max(subband.tby0, codeblock.tby0);
+ codeblock.tbx1_ = Math.min(subband.tbx1, codeblock.tbx1);
+ codeblock.tby1_ = Math.min(subband.tby1, codeblock.tby1);
+ const pi = Math.floor((codeblock.tbx0_ - subband.tbx0) / precinctParameters.precinctWidthInSubband);
+ const pj = Math.floor((codeblock.tby0_ - subband.tby0) / precinctParameters.precinctHeightInSubband);
+ precinctNumber = pi + pj * precinctParameters.numprecinctswide;
+ codeblock.precinctNumber = precinctNumber;
+ codeblock.subbandType = subband.type;
+ codeblock.Lblock = 3;
+
+ if (codeblock.tbx1_ <= codeblock.tbx0_ || codeblock.tby1_ <= codeblock.tby0_) {
+ continue;
+ }
+
+ codeblocks.push(codeblock);
+ let precinct = precincts[precinctNumber];
+
+ if (precinct !== undefined) {
+ if (i < precinct.cbxMin) {
+ precinct.cbxMin = i;
+ } else if (i > precinct.cbxMax) {
+ precinct.cbxMax = i;
+ }
+
+ if (j < precinct.cbyMin) {
+ precinct.cbxMin = j;
+ } else if (j > precinct.cbyMax) {
+ precinct.cbyMax = j;
+ }
+ } else {
+ precincts[precinctNumber] = precinct = {
+ cbxMin: i,
+ cbyMin: j,
+ cbxMax: i,
+ cbyMax: j
+ };
+ }
+
+ codeblock.precinct = precinct;
+ }
+ }
+
+ subband.codeblockParameters = {
+ codeblockWidth: xcb_,
+ codeblockHeight: ycb_,
+ numcodeblockwide: cbx1 - cbx0 + 1,
+ numcodeblockhigh: cby1 - cby0 + 1
+ };
+ subband.codeblocks = codeblocks;
+ subband.precincts = precincts;
+}
+
+function createPacket(resolution, precinctNumber, layerNumber) {
+ const precinctCodeblocks = [];
+ const subbands = resolution.subbands;
+
+ for (let i = 0, ii = subbands.length; i < ii; i++) {
+ const subband = subbands[i];
+ const codeblocks = subband.codeblocks;
+
+ for (let j = 0, jj = codeblocks.length; j < jj; j++) {
+ const codeblock = codeblocks[j];
+
+ if (codeblock.precinctNumber !== precinctNumber) {
+ continue;
+ }
- if (r.platform === 1 && r.encoding === 0 && r.language === 0 || r.platform === 3 && r.encoding === 1 && r.language === 0x409) {
- records.push(r);
+ precinctCodeblocks.push(codeblock);
+ }
+ }
+
+ return {
+ layerNumber,
+ codeblocks: precinctCodeblocks
+ };
+}
+
+function LayerResolutionComponentPositionIterator(context) {
+ const siz = context.SIZ;
+ const tileIndex = context.currentTile.index;
+ const tile = context.tiles[tileIndex];
+ const layersCount = tile.codingStyleDefaultParameters.layersCount;
+ const componentsCount = siz.Csiz;
+ let maxDecompositionLevelsCount = 0;
+
+ for (let q = 0; q < componentsCount; q++) {
+ maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, tile.components[q].codingStyleParameters.decompositionLevelsCount);
+ }
+
+ let l = 0,
+ r = 0,
+ i = 0,
+ k = 0;
+
+ this.nextPacket = function JpxImage_nextPacket() {
+ for (; l < layersCount; l++) {
+ for (; r <= maxDecompositionLevelsCount; r++) {
+ for (; i < componentsCount; i++) {
+ const component = tile.components[i];
+
+ if (r > component.codingStyleParameters.decompositionLevelsCount) {
+ continue;
+ }
+
+ const resolution = component.resolutions[r];
+ const numprecincts = resolution.precinctParameters.numprecincts;
+
+ for (; k < numprecincts;) {
+ const packet = createPacket(resolution, k, l);
+ k++;
+ return packet;
+ }
+
+ k = 0;
+ }
+
+ i = 0;
+ }
+
+ r = 0;
+ }
+
+ throw new JpxError("Out of packets");
+ };
+}
+
+function ResolutionLayerComponentPositionIterator(context) {
+ const siz = context.SIZ;
+ const tileIndex = context.currentTile.index;
+ const tile = context.tiles[tileIndex];
+ const layersCount = tile.codingStyleDefaultParameters.layersCount;
+ const componentsCount = siz.Csiz;
+ let maxDecompositionLevelsCount = 0;
+
+ for (let q = 0; q < componentsCount; q++) {
+ maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, tile.components[q].codingStyleParameters.decompositionLevelsCount);
+ }
+
+ let r = 0,
+ l = 0,
+ i = 0,
+ k = 0;
+
+ this.nextPacket = function JpxImage_nextPacket() {
+ for (; r <= maxDecompositionLevelsCount; r++) {
+ for (; l < layersCount; l++) {
+ for (; i < componentsCount; i++) {
+ const component = tile.components[i];
+
+ if (r > component.codingStyleParameters.decompositionLevelsCount) {
+ continue;
+ }
+
+ const resolution = component.resolutions[r];
+ const numprecincts = resolution.precinctParameters.numprecincts;
+
+ for (; k < numprecincts;) {
+ const packet = createPacket(resolution, k, l);
+ k++;
+ return packet;
}
+
+ k = 0;
}
- for (i = 0, ii = records.length; i < ii; i++) {
- var record = records[i];
+ i = 0;
+ }
+
+ l = 0;
+ }
+
+ throw new JpxError("Out of packets");
+ };
+}
+
+function ResolutionPositionComponentLayerIterator(context) {
+ const siz = context.SIZ;
+ const tileIndex = context.currentTile.index;
+ const tile = context.tiles[tileIndex];
+ const layersCount = tile.codingStyleDefaultParameters.layersCount;
+ const componentsCount = siz.Csiz;
+ let l, r, c, p;
+ let maxDecompositionLevelsCount = 0;
+
+ for (c = 0; c < componentsCount; c++) {
+ const component = tile.components[c];
+ maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, component.codingStyleParameters.decompositionLevelsCount);
+ }
+
+ const maxNumPrecinctsInLevel = new Int32Array(maxDecompositionLevelsCount + 1);
+
+ for (r = 0; r <= maxDecompositionLevelsCount; ++r) {
+ let maxNumPrecincts = 0;
+
+ for (c = 0; c < componentsCount; ++c) {
+ const resolutions = tile.components[c].resolutions;
+
+ if (r < resolutions.length) {
+ maxNumPrecincts = Math.max(maxNumPrecincts, resolutions[r].precinctParameters.numprecincts);
+ }
+ }
+
+ maxNumPrecinctsInLevel[r] = maxNumPrecincts;
+ }
+
+ l = 0;
+ r = 0;
+ c = 0;
+ p = 0;
+
+ this.nextPacket = function JpxImage_nextPacket() {
+ for (; r <= maxDecompositionLevelsCount; r++) {
+ for (; p < maxNumPrecinctsInLevel[r]; p++) {
+ for (; c < componentsCount; c++) {
+ const component = tile.components[c];
- if (record.length <= 0) {
+ if (r > component.codingStyleParameters.decompositionLevelsCount) {
continue;
}
- var pos = start + stringsStart + record.offset;
+ const resolution = component.resolutions[r];
+ const numprecincts = resolution.precinctParameters.numprecincts;
- if (pos + record.length > end) {
+ if (p >= numprecincts) {
continue;
}
- font.pos = pos;
- var nameIndex = record.name;
+ for (; l < layersCount;) {
+ const packet = createPacket(resolution, p, l);
+ l++;
+ return packet;
+ }
+
+ l = 0;
+ }
- if (record.encoding) {
- var str = "";
+ c = 0;
+ }
- for (var j = 0, jj = record.length; j < jj; j += 2) {
- str += String.fromCharCode(font.getUint16());
+ p = 0;
+ }
+
+ throw new JpxError("Out of packets");
+ };
+}
+
+function PositionComponentResolutionLayerIterator(context) {
+ const siz = context.SIZ;
+ const tileIndex = context.currentTile.index;
+ const tile = context.tiles[tileIndex];
+ const layersCount = tile.codingStyleDefaultParameters.layersCount;
+ const componentsCount = siz.Csiz;
+ const precinctsSizes = getPrecinctSizesInImageScale(tile);
+ const precinctsIterationSizes = precinctsSizes;
+ let l = 0,
+ r = 0,
+ c = 0,
+ px = 0,
+ py = 0;
+
+ this.nextPacket = function JpxImage_nextPacket() {
+ for (; py < precinctsIterationSizes.maxNumHigh; py++) {
+ for (; px < precinctsIterationSizes.maxNumWide; px++) {
+ for (; c < componentsCount; c++) {
+ const component = tile.components[c];
+ const decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount;
+
+ for (; r <= decompositionLevelsCount; r++) {
+ const resolution = component.resolutions[r];
+ const sizeInImageScale = precinctsSizes.components[c].resolutions[r];
+ const k = getPrecinctIndexIfExist(px, py, sizeInImageScale, precinctsIterationSizes, resolution);
+
+ if (k === null) {
+ continue;
}
- names[1][nameIndex] = str;
- } else {
- names[0][nameIndex] = (0, _util.bytesToString)(font.getBytes(record.length));
+ for (; l < layersCount;) {
+ const packet = createPacket(resolution, k, l);
+ l++;
+ return packet;
+ }
+
+ l = 0;
}
+
+ r = 0;
}
- return names;
+ c = 0;
}
- var TTOpsStackDeltas = [0, 0, 0, 0, 0, 0, 0, 0, -2, -2, -2, -2, 0, 0, -2, -5, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, -1, -1, 1, -1, -999, 0, 1, 0, -1, -2, 0, -1, -2, -1, -1, 0, -1, -1, 0, 0, -999, -999, -1, -1, -1, -1, -2, -999, -2, -2, -999, 0, -2, -2, 0, 0, -2, 0, -2, 0, 0, 0, -2, -1, -1, 1, 1, 0, 0, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, 0, -999, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, -999, -999, -999, -999, -999, -1, -1, -2, -2, 0, 0, 0, 0, -1, -1, -999, -2, -2, 0, 0, -1, -2, -2, 0, 0, 0, -1, -1, -1, -2];
+ px = 0;
+ }
- function sanitizeTTProgram(table, ttContext) {
- var data = table.data;
- var i = 0,
- j,
- n,
- b,
- funcId,
- pc,
- lastEndf = 0,
- lastDeff = 0;
- var stack = [];
- var callstack = [];
- var functionsCalled = [];
- var tooComplexToFollowFunctions = ttContext.tooComplexToFollowFunctions;
- var inFDEF = false,
- ifLevel = 0,
- inELSE = 0;
+ throw new JpxError("Out of packets");
+ };
+}
- for (var ii = data.length; i < ii;) {
- var op = data[i++];
+function ComponentPositionResolutionLayerIterator(context) {
+ const siz = context.SIZ;
+ const tileIndex = context.currentTile.index;
+ const tile = context.tiles[tileIndex];
+ const layersCount = tile.codingStyleDefaultParameters.layersCount;
+ const componentsCount = siz.Csiz;
+ const precinctsSizes = getPrecinctSizesInImageScale(tile);
+ let l = 0,
+ r = 0,
+ c = 0,
+ px = 0,
+ py = 0;
+
+ this.nextPacket = function JpxImage_nextPacket() {
+ for (; c < componentsCount; ++c) {
+ const component = tile.components[c];
+ const precinctsIterationSizes = precinctsSizes.components[c];
+ const decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount;
- if (op === 0x40) {
- n = data[i++];
+ for (; py < precinctsIterationSizes.maxNumHigh; py++) {
+ for (; px < precinctsIterationSizes.maxNumWide; px++) {
+ for (; r <= decompositionLevelsCount; r++) {
+ const resolution = component.resolutions[r];
+ const sizeInImageScale = precinctsIterationSizes.resolutions[r];
+ const k = getPrecinctIndexIfExist(px, py, sizeInImageScale, precinctsIterationSizes, resolution);
- if (inFDEF || inELSE) {
- i += n;
- } else {
- for (j = 0; j < n; j++) {
- stack.push(data[i++]);
- }
+ if (k === null) {
+ continue;
}
- } else if (op === 0x41) {
- n = data[i++];
- if (inFDEF || inELSE) {
- i += n * 2;
- } else {
- for (j = 0; j < n; j++) {
- b = data[i++];
- stack.push(b << 8 | data[i++]);
- }
+ for (; l < layersCount;) {
+ const packet = createPacket(resolution, k, l);
+ l++;
+ return packet;
}
- } else if ((op & 0xf8) === 0xb0) {
- n = op - 0xb0 + 1;
- if (inFDEF || inELSE) {
- i += n;
- } else {
- for (j = 0; j < n; j++) {
- stack.push(data[i++]);
- }
- }
- } else if ((op & 0xf8) === 0xb8) {
- n = op - 0xb8 + 1;
+ l = 0;
+ }
- if (inFDEF || inELSE) {
- i += n * 2;
- } else {
- for (j = 0; j < n; j++) {
- b = data[i++];
- stack.push(b << 8 | data[i++]);
- }
- }
- } else if (op === 0x2b && !tooComplexToFollowFunctions) {
- if (!inFDEF && !inELSE) {
- funcId = stack[stack.length - 1];
+ r = 0;
+ }
- if (isNaN(funcId)) {
- (0, _util.info)("TT: CALL empty stack (or invalid entry).");
- } else {
- ttContext.functionsUsed[funcId] = true;
+ px = 0;
+ }
- if (funcId in ttContext.functionsStackDeltas) {
- const newStackLength = stack.length + ttContext.functionsStackDeltas[funcId];
+ py = 0;
+ }
- if (newStackLength < 0) {
- (0, _util.warn)("TT: CALL invalid functions stack delta.");
- ttContext.hintsValid = false;
- return;
- }
+ throw new JpxError("Out of packets");
+ };
+}
- stack.length = newStackLength;
- } else if (funcId in ttContext.functionsDefined && !functionsCalled.includes(funcId)) {
- callstack.push({
- data,
- i,
- stackTop: stack.length - 1
- });
- functionsCalled.push(funcId);
- pc = ttContext.functionsDefined[funcId];
+function getPrecinctIndexIfExist(pxIndex, pyIndex, sizeInImageScale, precinctIterationSizes, resolution) {
+ const posX = pxIndex * precinctIterationSizes.minWidth;
+ const posY = pyIndex * precinctIterationSizes.minHeight;
- if (!pc) {
- (0, _util.warn)("TT: CALL non-existent function");
- ttContext.hintsValid = false;
- return;
- }
+ if (posX % sizeInImageScale.width !== 0 || posY % sizeInImageScale.height !== 0) {
+ return null;
+ }
- data = pc.data;
- i = pc.i;
- }
+ const startPrecinctRowIndex = posY / sizeInImageScale.width * resolution.precinctParameters.numprecinctswide;
+ return posX / sizeInImageScale.height + startPrecinctRowIndex;
+}
+
+function getPrecinctSizesInImageScale(tile) {
+ const componentsCount = tile.components.length;
+ let minWidth = Number.MAX_VALUE;
+ let minHeight = Number.MAX_VALUE;
+ let maxNumWide = 0;
+ let maxNumHigh = 0;
+ const sizePerComponent = new Array(componentsCount);
+
+ for (let c = 0; c < componentsCount; c++) {
+ const component = tile.components[c];
+ const decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount;
+ const sizePerResolution = new Array(decompositionLevelsCount + 1);
+ let minWidthCurrentComponent = Number.MAX_VALUE;
+ let minHeightCurrentComponent = Number.MAX_VALUE;
+ let maxNumWideCurrentComponent = 0;
+ let maxNumHighCurrentComponent = 0;
+ let scale = 1;
+
+ for (let r = decompositionLevelsCount; r >= 0; --r) {
+ const resolution = component.resolutions[r];
+ const widthCurrentResolution = scale * resolution.precinctParameters.precinctWidth;
+ const heightCurrentResolution = scale * resolution.precinctParameters.precinctHeight;
+ minWidthCurrentComponent = Math.min(minWidthCurrentComponent, widthCurrentResolution);
+ minHeightCurrentComponent = Math.min(minHeightCurrentComponent, heightCurrentResolution);
+ maxNumWideCurrentComponent = Math.max(maxNumWideCurrentComponent, resolution.precinctParameters.numprecinctswide);
+ maxNumHighCurrentComponent = Math.max(maxNumHighCurrentComponent, resolution.precinctParameters.numprecinctshigh);
+ sizePerResolution[r] = {
+ width: widthCurrentResolution,
+ height: heightCurrentResolution
+ };
+ scale <<= 1;
+ }
+
+ minWidth = Math.min(minWidth, minWidthCurrentComponent);
+ minHeight = Math.min(minHeight, minHeightCurrentComponent);
+ maxNumWide = Math.max(maxNumWide, maxNumWideCurrentComponent);
+ maxNumHigh = Math.max(maxNumHigh, maxNumHighCurrentComponent);
+ sizePerComponent[c] = {
+ resolutions: sizePerResolution,
+ minWidth: minWidthCurrentComponent,
+ minHeight: minHeightCurrentComponent,
+ maxNumWide: maxNumWideCurrentComponent,
+ maxNumHigh: maxNumHighCurrentComponent
+ };
+ }
+
+ return {
+ components: sizePerComponent,
+ minWidth,
+ minHeight,
+ maxNumWide,
+ maxNumHigh
+ };
+}
+
+function buildPackets(context) {
+ const siz = context.SIZ;
+ const tileIndex = context.currentTile.index;
+ const tile = context.tiles[tileIndex];
+ const componentsCount = siz.Csiz;
+
+ for (let c = 0; c < componentsCount; c++) {
+ const component = tile.components[c];
+ const decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount;
+ const resolutions = [];
+ const subbands = [];
+
+ for (let r = 0; r <= decompositionLevelsCount; r++) {
+ const blocksDimensions = getBlocksDimensions(context, component, r);
+ const resolution = {};
+ const scale = 1 << decompositionLevelsCount - r;
+ resolution.trx0 = Math.ceil(component.tcx0 / scale);
+ resolution.try0 = Math.ceil(component.tcy0 / scale);
+ resolution.trx1 = Math.ceil(component.tcx1 / scale);
+ resolution.try1 = Math.ceil(component.tcy1 / scale);
+ resolution.resLevel = r;
+ buildPrecincts(context, resolution, blocksDimensions);
+ resolutions.push(resolution);
+ let subband;
+
+ if (r === 0) {
+ subband = {};
+ subband.type = "LL";
+ subband.tbx0 = Math.ceil(component.tcx0 / scale);
+ subband.tby0 = Math.ceil(component.tcy0 / scale);
+ subband.tbx1 = Math.ceil(component.tcx1 / scale);
+ subband.tby1 = Math.ceil(component.tcy1 / scale);
+ subband.resolution = resolution;
+ buildCodeblocks(context, subband, blocksDimensions);
+ subbands.push(subband);
+ resolution.subbands = [subband];
+ } else {
+ const bscale = 1 << decompositionLevelsCount - r + 1;
+ const resolutionSubbands = [];
+ subband = {};
+ subband.type = "HL";
+ subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5);
+ subband.tby0 = Math.ceil(component.tcy0 / bscale);
+ subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5);
+ subband.tby1 = Math.ceil(component.tcy1 / bscale);
+ subband.resolution = resolution;
+ buildCodeblocks(context, subband, blocksDimensions);
+ subbands.push(subband);
+ resolutionSubbands.push(subband);
+ subband = {};
+ subband.type = "LH";
+ subband.tbx0 = Math.ceil(component.tcx0 / bscale);
+ subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5);
+ subband.tbx1 = Math.ceil(component.tcx1 / bscale);
+ subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5);
+ subband.resolution = resolution;
+ buildCodeblocks(context, subband, blocksDimensions);
+ subbands.push(subband);
+ resolutionSubbands.push(subband);
+ subband = {};
+ subband.type = "HH";
+ subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5);
+ subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5);
+ subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5);
+ subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5);
+ subband.resolution = resolution;
+ buildCodeblocks(context, subband, blocksDimensions);
+ subbands.push(subband);
+ resolutionSubbands.push(subband);
+ resolution.subbands = resolutionSubbands;
+ }
+ }
+
+ component.resolutions = resolutions;
+ component.subbands = subbands;
+ }
+
+ const progressionOrder = tile.codingStyleDefaultParameters.progressionOrder;
+
+ switch (progressionOrder) {
+ case 0:
+ tile.packetsIterator = new LayerResolutionComponentPositionIterator(context);
+ break;
+
+ case 1:
+ tile.packetsIterator = new ResolutionLayerComponentPositionIterator(context);
+ break;
+
+ case 2:
+ tile.packetsIterator = new ResolutionPositionComponentLayerIterator(context);
+ break;
+
+ case 3:
+ tile.packetsIterator = new PositionComponentResolutionLayerIterator(context);
+ break;
+
+ case 4:
+ tile.packetsIterator = new ComponentPositionResolutionLayerIterator(context);
+ break;
+
+ default:
+ throw new JpxError(`Unsupported progression order ${progressionOrder}`);
+ }
+}
+
+function parseTilePackets(context, data, offset, dataLength) {
+ let position = 0;
+ let buffer,
+ bufferSize = 0,
+ skipNextBit = false;
+
+ function readBits(count) {
+ while (bufferSize < count) {
+ const b = data[offset + position];
+ position++;
+
+ if (skipNextBit) {
+ buffer = buffer << 7 | b;
+ bufferSize += 7;
+ skipNextBit = false;
+ } else {
+ buffer = buffer << 8 | b;
+ bufferSize += 8;
+ }
+
+ if (b === 0xff) {
+ skipNextBit = true;
+ }
+ }
+
+ bufferSize -= count;
+ return buffer >>> bufferSize & (1 << count) - 1;
+ }
+
+ function skipMarkerIfEqual(value) {
+ if (data[offset + position - 1] === 0xff && data[offset + position] === value) {
+ skipBytes(1);
+ return true;
+ } else if (data[offset + position] === 0xff && data[offset + position + 1] === value) {
+ skipBytes(2);
+ return true;
+ }
+
+ return false;
+ }
+
+ function skipBytes(count) {
+ position += count;
+ }
+
+ function alignToByte() {
+ bufferSize = 0;
+
+ if (skipNextBit) {
+ position++;
+ skipNextBit = false;
+ }
+ }
+
+ function readCodingpasses() {
+ if (readBits(1) === 0) {
+ return 1;
+ }
+
+ if (readBits(1) === 0) {
+ return 2;
+ }
+
+ let value = readBits(2);
+
+ if (value < 3) {
+ return value + 3;
+ }
+
+ value = readBits(5);
+
+ if (value < 31) {
+ return value + 6;
+ }
+
+ value = readBits(7);
+ return value + 37;
+ }
+
+ const tileIndex = context.currentTile.index;
+ const tile = context.tiles[tileIndex];
+ const sopMarkerUsed = context.COD.sopMarkerUsed;
+ const ephMarkerUsed = context.COD.ephMarkerUsed;
+ const packetsIterator = tile.packetsIterator;
+
+ while (position < dataLength) {
+ alignToByte();
+
+ if (sopMarkerUsed && skipMarkerIfEqual(0x91)) {
+ skipBytes(4);
+ }
+
+ const packet = packetsIterator.nextPacket();
+
+ if (!readBits(1)) {
+ continue;
+ }
+
+ const layerNumber = packet.layerNumber,
+ queue = [];
+ let codeblock;
+
+ for (let i = 0, ii = packet.codeblocks.length; i < ii; i++) {
+ codeblock = packet.codeblocks[i];
+ let precinct = codeblock.precinct;
+ const codeblockColumn = codeblock.cbx - precinct.cbxMin;
+ const codeblockRow = codeblock.cby - precinct.cbyMin;
+ let codeblockIncluded = false;
+ let firstTimeInclusion = false;
+ let valueReady, zeroBitPlanesTree;
+
+ if (codeblock.included !== undefined) {
+ codeblockIncluded = !!readBits(1);
+ } else {
+ precinct = codeblock.precinct;
+ let inclusionTree;
+
+ if (precinct.inclusionTree !== undefined) {
+ inclusionTree = precinct.inclusionTree;
+ } else {
+ const width = precinct.cbxMax - precinct.cbxMin + 1;
+ const height = precinct.cbyMax - precinct.cbyMin + 1;
+ inclusionTree = new InclusionTree(width, height, layerNumber);
+ zeroBitPlanesTree = new TagTree(width, height);
+ precinct.inclusionTree = inclusionTree;
+ precinct.zeroBitPlanesTree = zeroBitPlanesTree;
+ }
+
+ if (inclusionTree.reset(codeblockColumn, codeblockRow, layerNumber)) {
+ while (true) {
+ if (readBits(1)) {
+ valueReady = !inclusionTree.nextLevel();
+
+ if (valueReady) {
+ codeblock.included = true;
+ codeblockIncluded = firstTimeInclusion = true;
+ break;
}
+ } else {
+ inclusionTree.incrementValue(layerNumber);
+ break;
}
- } else if (op === 0x2c && !tooComplexToFollowFunctions) {
- if (inFDEF || inELSE) {
- (0, _util.warn)("TT: nested FDEFs not allowed");
- tooComplexToFollowFunctions = true;
+ }
+ }
+ }
+
+ if (!codeblockIncluded) {
+ continue;
+ }
+
+ if (firstTimeInclusion) {
+ zeroBitPlanesTree = precinct.zeroBitPlanesTree;
+ zeroBitPlanesTree.reset(codeblockColumn, codeblockRow);
+
+ while (true) {
+ if (readBits(1)) {
+ valueReady = !zeroBitPlanesTree.nextLevel();
+
+ if (valueReady) {
+ break;
}
+ } else {
+ zeroBitPlanesTree.incrementValue();
+ }
+ }
- inFDEF = true;
- lastDeff = i;
- funcId = stack.pop();
- ttContext.functionsDefined[funcId] = {
- data,
- i
- };
- } else if (op === 0x2d) {
- if (inFDEF) {
- inFDEF = false;
- lastEndf = i;
- } else {
- pc = callstack.pop();
+ codeblock.zeroBitPlanes = zeroBitPlanesTree.value;
+ }
- if (!pc) {
- (0, _util.warn)("TT: ENDF bad stack");
- ttContext.hintsValid = false;
- return;
- }
+ const codingpasses = readCodingpasses();
+
+ while (readBits(1)) {
+ codeblock.Lblock++;
+ }
+
+ const codingpassesLog2 = (0, _core_utils.log2)(codingpasses);
+ const bits = (codingpasses < 1 << codingpassesLog2 ? codingpassesLog2 - 1 : codingpassesLog2) + codeblock.Lblock;
+ const codedDataLength = readBits(bits);
+ queue.push({
+ codeblock,
+ codingpasses,
+ dataLength: codedDataLength
+ });
+ }
+
+ alignToByte();
+
+ if (ephMarkerUsed) {
+ skipMarkerIfEqual(0x92);
+ }
+
+ while (queue.length > 0) {
+ const packetItem = queue.shift();
+ codeblock = packetItem.codeblock;
+
+ if (codeblock.data === undefined) {
+ codeblock.data = [];
+ }
+
+ codeblock.data.push({
+ data,
+ start: offset + position,
+ end: offset + position + packetItem.dataLength,
+ codingpasses: packetItem.codingpasses
+ });
+ position += packetItem.dataLength;
+ }
+ }
+
+ return position;
+}
+
+function copyCoefficients(coefficients, levelWidth, levelHeight, subband, delta, mb, reversible, segmentationSymbolUsed) {
+ const x0 = subband.tbx0;
+ const y0 = subband.tby0;
+ const width = subband.tbx1 - subband.tbx0;
+ const codeblocks = subband.codeblocks;
+ const right = subband.type.charAt(0) === "H" ? 1 : 0;
+ const bottom = subband.type.charAt(1) === "H" ? levelWidth : 0;
+
+ for (let i = 0, ii = codeblocks.length; i < ii; ++i) {
+ const codeblock = codeblocks[i];
+ const blockWidth = codeblock.tbx1_ - codeblock.tbx0_;
+ const blockHeight = codeblock.tby1_ - codeblock.tby0_;
+
+ if (blockWidth === 0 || blockHeight === 0) {
+ continue;
+ }
+
+ if (codeblock.data === undefined) {
+ continue;
+ }
+
+ const bitModel = new BitModel(blockWidth, blockHeight, codeblock.subbandType, codeblock.zeroBitPlanes, mb);
+ let currentCodingpassType = 2;
+ const data = codeblock.data;
+ let totalLength = 0,
+ codingpasses = 0;
+ let j, jj, dataItem;
+
+ for (j = 0, jj = data.length; j < jj; j++) {
+ dataItem = data[j];
+ totalLength += dataItem.end - dataItem.start;
+ codingpasses += dataItem.codingpasses;
+ }
+
+ const encodedData = new Uint8Array(totalLength);
+ let position = 0;
+
+ for (j = 0, jj = data.length; j < jj; j++) {
+ dataItem = data[j];
+ const chunk = dataItem.data.subarray(dataItem.start, dataItem.end);
+ encodedData.set(chunk, position);
+ position += chunk.length;
+ }
+
+ const decoder = new _arithmetic_decoder.ArithmeticDecoder(encodedData, 0, totalLength);
+ bitModel.setDecoder(decoder);
+
+ for (j = 0; j < codingpasses; j++) {
+ switch (currentCodingpassType) {
+ case 0:
+ bitModel.runSignificancePropagationPass();
+ break;
+
+ case 1:
+ bitModel.runMagnitudeRefinementPass();
+ break;
+
+ case 2:
+ bitModel.runCleanupPass();
+
+ if (segmentationSymbolUsed) {
+ bitModel.checkSegmentationSymbol();
+ }
+
+ break;
+ }
+
+ currentCodingpassType = (currentCodingpassType + 1) % 3;
+ }
+
+ let offset = codeblock.tbx0_ - x0 + (codeblock.tby0_ - y0) * width;
+ const sign = bitModel.coefficentsSign;
+ const magnitude = bitModel.coefficentsMagnitude;
+ const bitsDecoded = bitModel.bitsDecoded;
+ const magnitudeCorrection = reversible ? 0 : 0.5;
+ let k, n, nb;
+ position = 0;
+ const interleave = subband.type !== "LL";
+
+ for (j = 0; j < blockHeight; j++) {
+ const row = offset / width | 0;
+ const levelOffset = 2 * row * (levelWidth - width) + right + bottom;
+
+ for (k = 0; k < blockWidth; k++) {
+ n = magnitude[position];
+
+ if (n !== 0) {
+ n = (n + magnitudeCorrection) * delta;
+
+ if (sign[position] !== 0) {
+ n = -n;
+ }
+
+ nb = bitsDecoded[position];
+ const pos = interleave ? levelOffset + (offset << 1) : offset;
+
+ if (reversible && nb >= mb) {
+ coefficients[pos] = n;
+ } else {
+ coefficients[pos] = n * (1 << mb - nb);
+ }
+ }
+
+ offset++;
+ position++;
+ }
+
+ offset += width - blockWidth;
+ }
+ }
+}
+
+function transformTile(context, tile, c) {
+ const component = tile.components[c];
+ const codingStyleParameters = component.codingStyleParameters;
+ const quantizationParameters = component.quantizationParameters;
+ const decompositionLevelsCount = codingStyleParameters.decompositionLevelsCount;
+ const spqcds = quantizationParameters.SPqcds;
+ const scalarExpounded = quantizationParameters.scalarExpounded;
+ const guardBits = quantizationParameters.guardBits;
+ const segmentationSymbolUsed = codingStyleParameters.segmentationSymbolUsed;
+ const precision = context.components[c].precision;
+ const reversible = codingStyleParameters.reversibleTransformation;
+ const transform = reversible ? new ReversibleTransform() : new IrreversibleTransform();
+ const subbandCoefficients = [];
+ let b = 0;
+
+ for (let i = 0; i <= decompositionLevelsCount; i++) {
+ const resolution = component.resolutions[i];
+ const width = resolution.trx1 - resolution.trx0;
+ const height = resolution.try1 - resolution.try0;
+ const coefficients = new Float32Array(width * height);
+
+ for (let j = 0, jj = resolution.subbands.length; j < jj; j++) {
+ let mu, epsilon;
+
+ if (!scalarExpounded) {
+ mu = spqcds[0].mu;
+ epsilon = spqcds[0].epsilon + (i > 0 ? 1 - i : 0);
+ } else {
+ mu = spqcds[b].mu;
+ epsilon = spqcds[b].epsilon;
+ b++;
+ }
+
+ const subband = resolution.subbands[j];
+ const gainLog2 = SubbandsGainLog2[subband.type];
+ const delta = reversible ? 1 : 2 ** (precision + gainLog2 - epsilon) * (1 + mu / 2048);
+ const mb = guardBits + epsilon - 1;
+ copyCoefficients(coefficients, width, height, subband, delta, mb, reversible, segmentationSymbolUsed);
+ }
+
+ subbandCoefficients.push({
+ width,
+ height,
+ items: coefficients
+ });
+ }
+
+ const result = transform.calculate(subbandCoefficients, component.tcx0, component.tcy0);
+ return {
+ left: component.tcx0,
+ top: component.tcy0,
+ width: result.width,
+ height: result.height,
+ items: result.items
+ };
+}
+
+function transformComponents(context) {
+ const siz = context.SIZ;
+ const components = context.components;
+ const componentsCount = siz.Csiz;
+ const resultImages = [];
+
+ for (let i = 0, ii = context.tiles.length; i < ii; i++) {
+ const tile = context.tiles[i];
+ const transformedTiles = [];
+
+ for (let c = 0; c < componentsCount; c++) {
+ transformedTiles[c] = transformTile(context, tile, c);
+ }
+
+ const tile0 = transformedTiles[0];
+ const out = new Uint8ClampedArray(tile0.items.length * componentsCount);
+ const result = {
+ left: tile0.left,
+ top: tile0.top,
+ width: tile0.width,
+ height: tile0.height,
+ items: out
+ };
+ let shift, offset;
+ let pos = 0,
+ j,
+ jj,
+ y0,
+ y1,
+ y2;
+
+ if (tile.codingStyleDefaultParameters.multipleComponentTransform) {
+ const fourComponents = componentsCount === 4;
+ const y0items = transformedTiles[0].items;
+ const y1items = transformedTiles[1].items;
+ const y2items = transformedTiles[2].items;
+ const y3items = fourComponents ? transformedTiles[3].items : null;
+ shift = components[0].precision - 8;
+ offset = (128 << shift) + 0.5;
+ const component0 = tile.components[0];
+ const alpha01 = componentsCount - 3;
+ jj = y0items.length;
+
+ if (!component0.codingStyleParameters.reversibleTransformation) {
+ for (j = 0; j < jj; j++, pos += alpha01) {
+ y0 = y0items[j] + offset;
+ y1 = y1items[j];
+ y2 = y2items[j];
+ out[pos++] = y0 + 1.402 * y2 >> shift;
+ out[pos++] = y0 - 0.34413 * y1 - 0.71414 * y2 >> shift;
+ out[pos++] = y0 + 1.772 * y1 >> shift;
+ }
+ } else {
+ for (j = 0; j < jj; j++, pos += alpha01) {
+ y0 = y0items[j] + offset;
+ y1 = y1items[j];
+ y2 = y2items[j];
+ const g = y0 - (y2 + y1 >> 2);
+ out[pos++] = g + y2 >> shift;
+ out[pos++] = g >> shift;
+ out[pos++] = g + y1 >> shift;
+ }
+ }
+
+ if (fourComponents) {
+ for (j = 0, pos = 3; j < jj; j++, pos += 4) {
+ out[pos] = y3items[j] + offset >> shift;
+ }
+ }
+ } else {
+ for (let c = 0; c < componentsCount; c++) {
+ const items = transformedTiles[c].items;
+ shift = components[c].precision - 8;
+ offset = (128 << shift) + 0.5;
+
+ for (pos = c, j = 0, jj = items.length; j < jj; j++) {
+ out[pos] = items[j] + offset >> shift;
+ pos += componentsCount;
+ }
+ }
+ }
+
+ resultImages.push(result);
+ }
+
+ return resultImages;
+}
+
+function initializeTile(context, tileIndex) {
+ const siz = context.SIZ;
+ const componentsCount = siz.Csiz;
+ const tile = context.tiles[tileIndex];
+
+ for (let c = 0; c < componentsCount; c++) {
+ const component = tile.components[c];
+ const qcdOrQcc = context.currentTile.QCC[c] !== undefined ? context.currentTile.QCC[c] : context.currentTile.QCD;
+ component.quantizationParameters = qcdOrQcc;
+ const codOrCoc = context.currentTile.COC[c] !== undefined ? context.currentTile.COC[c] : context.currentTile.COD;
+ component.codingStyleParameters = codOrCoc;
+ }
+
+ tile.codingStyleDefaultParameters = context.currentTile.COD;
+}
+
+class TagTree {
+ constructor(width, height) {
+ const levelsLength = (0, _core_utils.log2)(Math.max(width, height)) + 1;
+ this.levels = [];
+
+ for (let i = 0; i < levelsLength; i++) {
+ const level = {
+ width,
+ height,
+ items: []
+ };
+ this.levels.push(level);
+ width = Math.ceil(width / 2);
+ height = Math.ceil(height / 2);
+ }
+ }
+
+ reset(i, j) {
+ let currentLevel = 0,
+ value = 0,
+ level;
+
+ while (currentLevel < this.levels.length) {
+ level = this.levels[currentLevel];
+ const index = i + j * level.width;
+
+ if (level.items[index] !== undefined) {
+ value = level.items[index];
+ break;
+ }
+
+ level.index = index;
+ i >>= 1;
+ j >>= 1;
+ currentLevel++;
+ }
+
+ currentLevel--;
+ level = this.levels[currentLevel];
+ level.items[level.index] = value;
+ this.currentLevel = currentLevel;
+ delete this.value;
+ }
+
+ incrementValue() {
+ const level = this.levels[this.currentLevel];
+ level.items[level.index]++;
+ }
+
+ nextLevel() {
+ let currentLevel = this.currentLevel;
+ let level = this.levels[currentLevel];
+ const value = level.items[level.index];
+ currentLevel--;
+
+ if (currentLevel < 0) {
+ this.value = value;
+ return false;
+ }
+
+ this.currentLevel = currentLevel;
+ level = this.levels[currentLevel];
+ level.items[level.index] = value;
+ return true;
+ }
+
+}
+
+class InclusionTree {
+ constructor(width, height, defaultValue) {
+ const levelsLength = (0, _core_utils.log2)(Math.max(width, height)) + 1;
+ this.levels = [];
+
+ for (let i = 0; i < levelsLength; i++) {
+ const items = new Uint8Array(width * height);
+
+ for (let j = 0, jj = items.length; j < jj; j++) {
+ items[j] = defaultValue;
+ }
+
+ const level = {
+ width,
+ height,
+ items
+ };
+ this.levels.push(level);
+ width = Math.ceil(width / 2);
+ height = Math.ceil(height / 2);
+ }
+ }
+
+ reset(i, j, stopValue) {
+ let currentLevel = 0;
+
+ while (currentLevel < this.levels.length) {
+ const level = this.levels[currentLevel];
+ const index = i + j * level.width;
+ level.index = index;
+ const value = level.items[index];
+
+ if (value === 0xff) {
+ break;
+ }
+
+ if (value > stopValue) {
+ this.currentLevel = currentLevel;
+ this.propagateValues();
+ return false;
+ }
+
+ i >>= 1;
+ j >>= 1;
+ currentLevel++;
+ }
+
+ this.currentLevel = currentLevel - 1;
+ return true;
+ }
+
+ incrementValue(stopValue) {
+ const level = this.levels[this.currentLevel];
+ level.items[level.index] = stopValue + 1;
+ this.propagateValues();
+ }
+
+ propagateValues() {
+ let levelIndex = this.currentLevel;
+ let level = this.levels[levelIndex];
+ const currentValue = level.items[level.index];
+
+ while (--levelIndex >= 0) {
+ level = this.levels[levelIndex];
+ level.items[level.index] = currentValue;
+ }
+ }
+
+ nextLevel() {
+ let currentLevel = this.currentLevel;
+ let level = this.levels[currentLevel];
+ const value = level.items[level.index];
+ level.items[level.index] = 0xff;
+ currentLevel--;
+
+ if (currentLevel < 0) {
+ return false;
+ }
+
+ this.currentLevel = currentLevel;
+ level = this.levels[currentLevel];
+ level.items[level.index] = value;
+ return true;
+ }
+
+}
+
+const BitModel = function BitModelClosure() {
+ const UNIFORM_CONTEXT = 17;
+ const RUNLENGTH_CONTEXT = 18;
+ const LLAndLHContextsLabel = new Uint8Array([0, 5, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 1, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8]);
+ const HLContextLabel = new Uint8Array([0, 3, 4, 0, 5, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 1, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8]);
+ const HHContextLabel = new Uint8Array([0, 1, 2, 0, 1, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 3, 4, 5, 0, 4, 5, 5, 0, 5, 5, 5, 0, 0, 0, 0, 0, 6, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8]);
+
+ class BitModel {
+ constructor(width, height, subband, zeroBitPlanes, mb) {
+ this.width = width;
+ this.height = height;
+ let contextLabelTable;
+
+ if (subband === "HH") {
+ contextLabelTable = HHContextLabel;
+ } else if (subband === "HL") {
+ contextLabelTable = HLContextLabel;
+ } else {
+ contextLabelTable = LLAndLHContextsLabel;
+ }
+
+ this.contextLabelTable = contextLabelTable;
+ const coefficientCount = width * height;
+ this.neighborsSignificance = new Uint8Array(coefficientCount);
+ this.coefficentsSign = new Uint8Array(coefficientCount);
+ let coefficentsMagnitude;
+
+ if (mb > 14) {
+ coefficentsMagnitude = new Uint32Array(coefficientCount);
+ } else if (mb > 6) {
+ coefficentsMagnitude = new Uint16Array(coefficientCount);
+ } else {
+ coefficentsMagnitude = new Uint8Array(coefficientCount);
+ }
+
+ this.coefficentsMagnitude = coefficentsMagnitude;
+ this.processingFlags = new Uint8Array(coefficientCount);
+ const bitsDecoded = new Uint8Array(coefficientCount);
+
+ if (zeroBitPlanes !== 0) {
+ for (let i = 0; i < coefficientCount; i++) {
+ bitsDecoded[i] = zeroBitPlanes;
+ }
+ }
+
+ this.bitsDecoded = bitsDecoded;
+ this.reset();
+ }
+
+ setDecoder(decoder) {
+ this.decoder = decoder;
+ }
+
+ reset() {
+ this.contexts = new Int8Array(19);
+ this.contexts[0] = 4 << 1 | 0;
+ this.contexts[UNIFORM_CONTEXT] = 46 << 1 | 0;
+ this.contexts[RUNLENGTH_CONTEXT] = 3 << 1 | 0;
+ }
- funcId = functionsCalled.pop();
- data = pc.data;
- i = pc.i;
- ttContext.functionsStackDeltas[funcId] = stack.length - pc.stackTop;
+ setNeighborsSignificance(row, column, index) {
+ const neighborsSignificance = this.neighborsSignificance;
+ const width = this.width,
+ height = this.height;
+ const left = column > 0;
+ const right = column + 1 < width;
+ let i;
+
+ if (row > 0) {
+ i = index - width;
+
+ if (left) {
+ neighborsSignificance[i - 1] += 0x10;
+ }
+
+ if (right) {
+ neighborsSignificance[i + 1] += 0x10;
+ }
+
+ neighborsSignificance[i] += 0x04;
+ }
+
+ if (row + 1 < height) {
+ i = index + width;
+
+ if (left) {
+ neighborsSignificance[i - 1] += 0x10;
+ }
+
+ if (right) {
+ neighborsSignificance[i + 1] += 0x10;
+ }
+
+ neighborsSignificance[i] += 0x04;
+ }
+
+ if (left) {
+ neighborsSignificance[index - 1] += 0x01;
+ }
+
+ if (right) {
+ neighborsSignificance[index + 1] += 0x01;
+ }
+
+ neighborsSignificance[index] |= 0x80;
+ }
+
+ runSignificancePropagationPass() {
+ const decoder = this.decoder;
+ const width = this.width,
+ height = this.height;
+ const coefficentsMagnitude = this.coefficentsMagnitude;
+ const coefficentsSign = this.coefficentsSign;
+ const neighborsSignificance = this.neighborsSignificance;
+ const processingFlags = this.processingFlags;
+ const contexts = this.contexts;
+ const labels = this.contextLabelTable;
+ const bitsDecoded = this.bitsDecoded;
+ const processedInverseMask = ~1;
+ const processedMask = 1;
+ const firstMagnitudeBitMask = 2;
+
+ for (let i0 = 0; i0 < height; i0 += 4) {
+ for (let j = 0; j < width; j++) {
+ let index = i0 * width + j;
+
+ for (let i1 = 0; i1 < 4; i1++, index += width) {
+ const i = i0 + i1;
+
+ if (i >= height) {
+ break;
}
- } else if (op === 0x89) {
- if (inFDEF || inELSE) {
- (0, _util.warn)("TT: nested IDEFs not allowed");
- tooComplexToFollowFunctions = true;
+
+ processingFlags[index] &= processedInverseMask;
+
+ if (coefficentsMagnitude[index] || !neighborsSignificance[index]) {
+ continue;
}
- inFDEF = true;
- lastDeff = i;
- } else if (op === 0x58) {
- ++ifLevel;
- } else if (op === 0x1b) {
- inELSE = ifLevel;
- } else if (op === 0x59) {
- if (inELSE === ifLevel) {
- inELSE = 0;
+ const contextLabel = labels[neighborsSignificance[index]];
+ const decision = decoder.readBit(contexts, contextLabel);
+
+ if (decision) {
+ const sign = this.decodeSignBit(i, j, index);
+ coefficentsSign[index] = sign;
+ coefficentsMagnitude[index] = 1;
+ this.setNeighborsSignificance(i, j, index);
+ processingFlags[index] |= firstMagnitudeBitMask;
}
- --ifLevel;
- } else if (op === 0x1c) {
- if (!inFDEF && !inELSE) {
- var offset = stack[stack.length - 1];
+ bitsDecoded[index]++;
+ processingFlags[index] |= processedMask;
+ }
+ }
+ }
+ }
- if (offset > 0) {
- i += offset - 1;
- }
+ decodeSignBit(row, column, index) {
+ const width = this.width,
+ height = this.height;
+ const coefficentsMagnitude = this.coefficentsMagnitude;
+ const coefficentsSign = this.coefficentsSign;
+ let contribution, sign0, sign1, significance1;
+ let contextLabel, decoded;
+ significance1 = column > 0 && coefficentsMagnitude[index - 1] !== 0;
+
+ if (column + 1 < width && coefficentsMagnitude[index + 1] !== 0) {
+ sign1 = coefficentsSign[index + 1];
+
+ if (significance1) {
+ sign0 = coefficentsSign[index - 1];
+ contribution = 1 - sign1 - sign0;
+ } else {
+ contribution = 1 - sign1 - sign1;
+ }
+ } else if (significance1) {
+ sign0 = coefficentsSign[index - 1];
+ contribution = 1 - sign0 - sign0;
+ } else {
+ contribution = 0;
+ }
+
+ const horizontalContribution = 3 * contribution;
+ significance1 = row > 0 && coefficentsMagnitude[index - width] !== 0;
+
+ if (row + 1 < height && coefficentsMagnitude[index + width] !== 0) {
+ sign1 = coefficentsSign[index + width];
+
+ if (significance1) {
+ sign0 = coefficentsSign[index - width];
+ contribution = 1 - sign1 - sign0 + horizontalContribution;
+ } else {
+ contribution = 1 - sign1 - sign1 + horizontalContribution;
+ }
+ } else if (significance1) {
+ sign0 = coefficentsSign[index - width];
+ contribution = 1 - sign0 - sign0 + horizontalContribution;
+ } else {
+ contribution = horizontalContribution;
+ }
+
+ if (contribution >= 0) {
+ contextLabel = 9 + contribution;
+ decoded = this.decoder.readBit(this.contexts, contextLabel);
+ } else {
+ contextLabel = 9 - contribution;
+ decoded = this.decoder.readBit(this.contexts, contextLabel) ^ 1;
+ }
+
+ return decoded;
+ }
+
+ runMagnitudeRefinementPass() {
+ const decoder = this.decoder;
+ const width = this.width,
+ height = this.height;
+ const coefficentsMagnitude = this.coefficentsMagnitude;
+ const neighborsSignificance = this.neighborsSignificance;
+ const contexts = this.contexts;
+ const bitsDecoded = this.bitsDecoded;
+ const processingFlags = this.processingFlags;
+ const processedMask = 1;
+ const firstMagnitudeBitMask = 2;
+ const length = width * height;
+ const width4 = width * 4;
+
+ for (let index0 = 0, indexNext; index0 < length; index0 = indexNext) {
+ indexNext = Math.min(length, index0 + width4);
+
+ for (let j = 0; j < width; j++) {
+ for (let index = index0 + j; index < indexNext; index += width) {
+ if (!coefficentsMagnitude[index] || (processingFlags[index] & processedMask) !== 0) {
+ continue;
}
+
+ let contextLabel = 16;
+
+ if ((processingFlags[index] & firstMagnitudeBitMask) !== 0) {
+ processingFlags[index] ^= firstMagnitudeBitMask;
+ const significance = neighborsSignificance[index] & 127;
+ contextLabel = significance === 0 ? 15 : 14;
+ }
+
+ const bit = decoder.readBit(contexts, contextLabel);
+ coefficentsMagnitude[index] = coefficentsMagnitude[index] << 1 | bit;
+ bitsDecoded[index]++;
+ processingFlags[index] |= processedMask;
}
+ }
+ }
+ }
- if (!inFDEF && !inELSE) {
- let stackDelta = 0;
-
- if (op <= 0x8e) {
- stackDelta = TTOpsStackDeltas[op];
- } else if (op >= 0xc0 && op <= 0xdf) {
- stackDelta = -1;
- } else if (op >= 0xe0) {
- stackDelta = -2;
+ runCleanupPass() {
+ const decoder = this.decoder;
+ const width = this.width,
+ height = this.height;
+ const neighborsSignificance = this.neighborsSignificance;
+ const coefficentsMagnitude = this.coefficentsMagnitude;
+ const coefficentsSign = this.coefficentsSign;
+ const contexts = this.contexts;
+ const labels = this.contextLabelTable;
+ const bitsDecoded = this.bitsDecoded;
+ const processingFlags = this.processingFlags;
+ const processedMask = 1;
+ const firstMagnitudeBitMask = 2;
+ const oneRowDown = width;
+ const twoRowsDown = width * 2;
+ const threeRowsDown = width * 3;
+ let iNext;
+
+ for (let i0 = 0; i0 < height; i0 = iNext) {
+ iNext = Math.min(i0 + 4, height);
+ const indexBase = i0 * width;
+ const checkAllEmpty = i0 + 3 < height;
+
+ for (let j = 0; j < width; j++) {
+ const index0 = indexBase + j;
+ const allEmpty = checkAllEmpty && processingFlags[index0] === 0 && processingFlags[index0 + oneRowDown] === 0 && processingFlags[index0 + twoRowsDown] === 0 && processingFlags[index0 + threeRowsDown] === 0 && neighborsSignificance[index0] === 0 && neighborsSignificance[index0 + oneRowDown] === 0 && neighborsSignificance[index0 + twoRowsDown] === 0 && neighborsSignificance[index0 + threeRowsDown] === 0;
+ let i1 = 0,
+ index = index0;
+ let i = i0,
+ sign;
+
+ if (allEmpty) {
+ const hasSignificantCoefficent = decoder.readBit(contexts, RUNLENGTH_CONTEXT);
+
+ if (!hasSignificantCoefficent) {
+ bitsDecoded[index0]++;
+ bitsDecoded[index0 + oneRowDown]++;
+ bitsDecoded[index0 + twoRowsDown]++;
+ bitsDecoded[index0 + threeRowsDown]++;
+ continue;
}
- if (op >= 0x71 && op <= 0x75) {
- n = stack.pop();
+ i1 = decoder.readBit(contexts, UNIFORM_CONTEXT) << 1 | decoder.readBit(contexts, UNIFORM_CONTEXT);
- if (!isNaN(n)) {
- stackDelta = -n * 2;
- }
+ if (i1 !== 0) {
+ i = i0 + i1;
+ index += i1 * width;
}
- while (stackDelta < 0 && stack.length > 0) {
- stack.pop();
- stackDelta++;
+ sign = this.decodeSignBit(i, j, index);
+ coefficentsSign[index] = sign;
+ coefficentsMagnitude[index] = 1;
+ this.setNeighborsSignificance(i, j, index);
+ processingFlags[index] |= firstMagnitudeBitMask;
+ index = index0;
+
+ for (let i2 = i0; i2 <= i; i2++, index += width) {
+ bitsDecoded[index]++;
+ }
+
+ i1++;
+ }
+
+ for (i = i0 + i1; i < iNext; i++, index += width) {
+ if (coefficentsMagnitude[index] || (processingFlags[index] & processedMask) !== 0) {
+ continue;
}
- while (stackDelta > 0) {
- stack.push(NaN);
- stackDelta--;
+ const contextLabel = labels[neighborsSignificance[index]];
+ const decision = decoder.readBit(contexts, contextLabel);
+
+ if (decision === 1) {
+ sign = this.decodeSignBit(i, j, index);
+ coefficentsSign[index] = sign;
+ coefficentsMagnitude[index] = 1;
+ this.setNeighborsSignificance(i, j, index);
+ processingFlags[index] |= firstMagnitudeBitMask;
}
+
+ bitsDecoded[index]++;
}
}
+ }
+ }
- ttContext.tooComplexToFollowFunctions = tooComplexToFollowFunctions;
- var content = [data];
+ checkSegmentationSymbol() {
+ const decoder = this.decoder;
+ const contexts = this.contexts;
+ const symbol = decoder.readBit(contexts, UNIFORM_CONTEXT) << 3 | decoder.readBit(contexts, UNIFORM_CONTEXT) << 2 | decoder.readBit(contexts, UNIFORM_CONTEXT) << 1 | decoder.readBit(contexts, UNIFORM_CONTEXT);
- if (i > data.length) {
- content.push(new Uint8Array(i - data.length));
- }
+ if (symbol !== 0xa) {
+ throw new JpxError("Invalid segmentation symbol");
+ }
+ }
- if (lastDeff > lastEndf) {
- (0, _util.warn)("TT: complementing a missing function tail");
- content.push(new Uint8Array([0x22, 0x2d]));
- }
+ }
+
+ return BitModel;
+}();
+
+class Transform {
+ constructor() {
+ if (this.constructor === Transform) {
+ (0, _util.unreachable)("Cannot initialize Transform.");
+ }
+ }
+
+ calculate(subbands, u0, v0) {
+ let ll = subbands[0];
+
+ for (let i = 1, ii = subbands.length; i < ii; i++) {
+ ll = this.iterate(ll, subbands[i], u0, v0);
+ }
+
+ return ll;
+ }
+
+ extend(buffer, offset, size) {
+ let i1 = offset - 1,
+ j1 = offset + 1;
+ let i2 = offset + size - 2,
+ j2 = offset + size;
+ buffer[i1--] = buffer[j1++];
+ buffer[j2++] = buffer[i2--];
+ buffer[i1--] = buffer[j1++];
+ buffer[j2++] = buffer[i2--];
+ buffer[i1--] = buffer[j1++];
+ buffer[j2++] = buffer[i2--];
+ buffer[i1] = buffer[j1];
+ buffer[j2] = buffer[i2];
+ }
+
+ filter(x, offset, length) {
+ (0, _util.unreachable)("Abstract method `filter` called");
+ }
+
+ iterate(ll, hl_lh_hh, u0, v0) {
+ const llWidth = ll.width,
+ llHeight = ll.height;
+ let llItems = ll.items;
+ const width = hl_lh_hh.width;
+ const height = hl_lh_hh.height;
+ const items = hl_lh_hh.items;
+ let i, j, k, l, u, v;
- foldTTTable(table, content);
+ for (k = 0, i = 0; i < llHeight; i++) {
+ l = i * 2 * width;
+
+ for (j = 0; j < llWidth; j++, k++, l += 2) {
+ items[l] = llItems[k];
}
+ }
- function checkInvalidFunctions(ttContext, maxFunctionDefs) {
- if (ttContext.tooComplexToFollowFunctions) {
- return;
+ llItems = ll.items = null;
+ const bufferPadding = 4;
+ const rowBuffer = new Float32Array(width + 2 * bufferPadding);
+
+ if (width === 1) {
+ if ((u0 & 1) !== 0) {
+ for (v = 0, k = 0; v < height; v++, k += width) {
+ items[k] *= 0.5;
}
+ }
+ } else {
+ for (v = 0, k = 0; v < height; v++, k += width) {
+ rowBuffer.set(items.subarray(k, k + width), bufferPadding);
+ this.extend(rowBuffer, bufferPadding, width);
+ this.filter(rowBuffer, bufferPadding, width);
+ items.set(rowBuffer.subarray(bufferPadding, bufferPadding + width), k);
+ }
+ }
- if (ttContext.functionsDefined.length > maxFunctionDefs) {
- (0, _util.warn)("TT: more functions defined than expected");
- ttContext.hintsValid = false;
- return;
+ let numBuffers = 16;
+ const colBuffers = [];
+
+ for (i = 0; i < numBuffers; i++) {
+ colBuffers.push(new Float32Array(height + 2 * bufferPadding));
+ }
+
+ let b,
+ currentBuffer = 0;
+ ll = bufferPadding + height;
+
+ if (height === 1) {
+ if ((v0 & 1) !== 0) {
+ for (u = 0; u < width; u++) {
+ items[u] *= 0.5;
}
+ }
+ } else {
+ for (u = 0; u < width; u++) {
+ if (currentBuffer === 0) {
+ numBuffers = Math.min(width - u, numBuffers);
- for (var j = 0, jj = ttContext.functionsUsed.length; j < jj; j++) {
- if (j > maxFunctionDefs) {
- (0, _util.warn)("TT: invalid function id: " + j);
- ttContext.hintsValid = false;
- return;
+ for (k = u, l = bufferPadding; l < ll; k += width, l++) {
+ for (b = 0; b < numBuffers; b++) {
+ colBuffers[b][l] = items[k + b];
+ }
}
- if (ttContext.functionsUsed[j] && !ttContext.functionsDefined[j]) {
- (0, _util.warn)("TT: undefined function: " + j);
- ttContext.hintsValid = false;
- return;
+ currentBuffer = numBuffers;
+ }
+
+ currentBuffer--;
+ const buffer = colBuffers[currentBuffer];
+ this.extend(buffer, bufferPadding, height);
+ this.filter(buffer, bufferPadding, height);
+
+ if (currentBuffer === 0) {
+ k = u - numBuffers + 1;
+
+ for (l = bufferPadding; l < ll; k += width, l++) {
+ for (b = 0; b < numBuffers; b++) {
+ items[k + b] = colBuffers[b][l];
+ }
}
}
}
+ }
+
+ return {
+ width,
+ height,
+ items
+ };
+ }
- function foldTTTable(table, content) {
- if (content.length > 1) {
- var newLength = 0;
- var j, jj;
+}
- for (j = 0, jj = content.length; j < jj; j++) {
- newLength += content[j].length;
- }
+class IrreversibleTransform extends Transform {
+ filter(x, offset, length) {
+ const len = length >> 1;
+ offset |= 0;
+ let j, n, current, next;
+ const alpha = -1.586134342059924;
+ const beta = -0.052980118572961;
+ const gamma = 0.882911075530934;
+ const delta = 0.443506852043971;
+ const K = 1.230174104914001;
+ const K_ = 1 / K;
+ j = offset - 3;
+
+ for (n = len + 4; n--; j += 2) {
+ x[j] *= K_;
+ }
+
+ j = offset - 2;
+ current = delta * x[j - 1];
+
+ for (n = len + 3; n--; j += 2) {
+ next = delta * x[j + 1];
+ x[j] = K * x[j] - current - next;
+
+ if (n--) {
+ j += 2;
+ current = delta * x[j + 1];
+ x[j] = K * x[j] - current - next;
+ } else {
+ break;
+ }
+ }
- newLength = newLength + 3 & ~3;
- var result = new Uint8Array(newLength);
- var pos = 0;
+ j = offset - 1;
+ current = gamma * x[j - 1];
- for (j = 0, jj = content.length; j < jj; j++) {
- result.set(content[j], pos);
- pos += content[j].length;
- }
+ for (n = len + 2; n--; j += 2) {
+ next = gamma * x[j + 1];
+ x[j] -= current + next;
- table.data = result;
- table.length = newLength;
+ if (n--) {
+ j += 2;
+ current = gamma * x[j + 1];
+ x[j] -= current + next;
+ } else {
+ break;
+ }
+ }
+
+ j = offset;
+ current = beta * x[j - 1];
+
+ for (n = len + 1; n--; j += 2) {
+ next = beta * x[j + 1];
+ x[j] -= current + next;
+
+ if (n--) {
+ j += 2;
+ current = beta * x[j + 1];
+ x[j] -= current + next;
+ } else {
+ break;
+ }
+ }
+
+ if (len !== 0) {
+ j = offset + 1;
+ current = alpha * x[j - 1];
+
+ for (n = len; n--; j += 2) {
+ next = alpha * x[j + 1];
+ x[j] -= current + next;
+
+ if (n--) {
+ j += 2;
+ current = alpha * x[j + 1];
+ x[j] -= current + next;
+ } else {
+ break;
}
}
+ }
+ }
- function sanitizeTTPrograms(fpgm, prep, cvt, maxFunctionDefs) {
- var ttContext = {
- functionsDefined: [],
- functionsUsed: [],
- functionsStackDeltas: [],
- tooComplexToFollowFunctions: false,
- hintsValid: true
- };
+}
+
+class ReversibleTransform extends Transform {
+ filter(x, offset, length) {
+ const len = length >> 1;
+ offset |= 0;
+ let j, n;
+
+ for (j = offset, n = len + 1; n--; j += 2) {
+ x[j] -= x[j - 1] + x[j + 1] + 2 >> 2;
+ }
+
+ for (j = offset + 1, n = len; n--; j += 2) {
+ x[j] += x[j - 1] + x[j + 1] >> 1;
+ }
+ }
+
+}
+
+/***/ }),
+/* 31 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.LZWStream = void 0;
+
+var _decode_stream = __w_pdfjs_require__(19);
+
+class LZWStream extends _decode_stream.DecodeStream {
+ constructor(str, maybeLength, earlyChange) {
+ super(maybeLength);
+ this.str = str;
+ this.dict = str.dict;
+ this.cachedData = 0;
+ this.bitsCached = 0;
+ const maxLzwDictionarySize = 4096;
+ const lzwState = {
+ earlyChange,
+ codeLength: 9,
+ nextCode: 258,
+ dictionaryValues: new Uint8Array(maxLzwDictionarySize),
+ dictionaryLengths: new Uint16Array(maxLzwDictionarySize),
+ dictionaryPrevCodes: new Uint16Array(maxLzwDictionarySize),
+ currentSequence: new Uint8Array(maxLzwDictionarySize),
+ currentSequenceLength: 0
+ };
+
+ for (let i = 0; i < 256; ++i) {
+ lzwState.dictionaryValues[i] = i;
+ lzwState.dictionaryLengths[i] = 1;
+ }
+
+ this.lzwState = lzwState;
+ }
+
+ readBits(n) {
+ let bitsCached = this.bitsCached;
+ let cachedData = this.cachedData;
+
+ while (bitsCached < n) {
+ const c = this.str.getByte();
+
+ if (c === -1) {
+ this.eof = true;
+ return null;
+ }
+
+ cachedData = cachedData << 8 | c;
+ bitsCached += 8;
+ }
+
+ this.bitsCached = bitsCached -= n;
+ this.cachedData = cachedData;
+ this.lastCode = null;
+ return cachedData >>> bitsCached & (1 << n) - 1;
+ }
+
+ readBlock() {
+ const blockSize = 512,
+ decodedSizeDelta = blockSize;
+ let estimatedDecodedSize = blockSize * 2;
+ let i, j, q;
+ const lzwState = this.lzwState;
+
+ if (!lzwState) {
+ return;
+ }
+
+ const earlyChange = lzwState.earlyChange;
+ let nextCode = lzwState.nextCode;
+ const dictionaryValues = lzwState.dictionaryValues;
+ const dictionaryLengths = lzwState.dictionaryLengths;
+ const dictionaryPrevCodes = lzwState.dictionaryPrevCodes;
+ let codeLength = lzwState.codeLength;
+ let prevCode = lzwState.prevCode;
+ const currentSequence = lzwState.currentSequence;
+ let currentSequenceLength = lzwState.currentSequenceLength;
+ let decodedLength = 0;
+ let currentBufferLength = this.bufferLength;
+ let buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize);
+
+ for (i = 0; i < blockSize; i++) {
+ const code = this.readBits(codeLength);
+ const hasPrev = currentSequenceLength > 0;
+
+ if (code < 256) {
+ currentSequence[0] = code;
+ currentSequenceLength = 1;
+ } else if (code >= 258) {
+ if (code < nextCode) {
+ currentSequenceLength = dictionaryLengths[code];
- if (fpgm) {
- sanitizeTTProgram(fpgm, ttContext);
+ for (j = currentSequenceLength - 1, q = code; j >= 0; j--) {
+ currentSequence[j] = dictionaryValues[q];
+ q = dictionaryPrevCodes[q];
+ }
+ } else {
+ currentSequence[currentSequenceLength++] = currentSequence[0];
}
+ } else if (code === 256) {
+ codeLength = 9;
+ nextCode = 258;
+ currentSequenceLength = 0;
+ continue;
+ } else {
+ this.eof = true;
+ delete this.lzwState;
+ break;
+ }
+
+ if (hasPrev) {
+ dictionaryPrevCodes[nextCode] = prevCode;
+ dictionaryLengths[nextCode] = dictionaryLengths[prevCode] + 1;
+ dictionaryValues[nextCode] = currentSequence[0];
+ nextCode++;
+ codeLength = nextCode + earlyChange & nextCode + earlyChange - 1 ? codeLength : Math.min(Math.log(nextCode + earlyChange) / 0.6931471805599453 + 1, 12) | 0;
+ }
+
+ prevCode = code;
+ decodedLength += currentSequenceLength;
+
+ if (estimatedDecodedSize < decodedLength) {
+ do {
+ estimatedDecodedSize += decodedSizeDelta;
+ } while (estimatedDecodedSize < decodedLength);
+
+ buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize);
+ }
+
+ for (j = 0; j < currentSequenceLength; j++) {
+ buffer[currentBufferLength++] = currentSequence[j];
+ }
+ }
+
+ lzwState.nextCode = nextCode;
+ lzwState.codeLength = codeLength;
+ lzwState.prevCode = prevCode;
+ lzwState.currentSequenceLength = currentSequenceLength;
+ this.bufferLength = currentBufferLength;
+ }
+
+}
+
+exports.LZWStream = LZWStream;
+
+/***/ }),
+/* 32 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.PredictorStream = void 0;
+
+var _decode_stream = __w_pdfjs_require__(19);
+
+var _util = __w_pdfjs_require__(2);
+
+var _primitives = __w_pdfjs_require__(5);
+
+class PredictorStream extends _decode_stream.DecodeStream {
+ constructor(str, maybeLength, params) {
+ super(maybeLength);
+
+ if (!(0, _primitives.isDict)(params)) {
+ return str;
+ }
+
+ const predictor = this.predictor = params.get("Predictor") || 1;
+
+ if (predictor <= 1) {
+ return str;
+ }
+
+ if (predictor !== 2 && (predictor < 10 || predictor > 15)) {
+ throw new _util.FormatError(`Unsupported predictor: ${predictor}`);
+ }
+
+ if (predictor === 2) {
+ this.readBlock = this.readBlockTiff;
+ } else {
+ this.readBlock = this.readBlockPng;
+ }
+
+ this.str = str;
+ this.dict = str.dict;
+ const colors = this.colors = params.get("Colors") || 1;
+ const bits = this.bits = params.get("BitsPerComponent") || 8;
+ const columns = this.columns = params.get("Columns") || 1;
+ this.pixBytes = colors * bits + 7 >> 3;
+ this.rowBytes = columns * colors * bits + 7 >> 3;
+ return this;
+ }
+
+ readBlockTiff() {
+ const rowBytes = this.rowBytes;
+ const bufferLength = this.bufferLength;
+ const buffer = this.ensureBuffer(bufferLength + rowBytes);
+ const bits = this.bits;
+ const colors = this.colors;
+ const rawBytes = this.str.getBytes(rowBytes);
+ this.eof = !rawBytes.length;
+
+ if (this.eof) {
+ return;
+ }
+
+ let inbuf = 0,
+ outbuf = 0;
+ let inbits = 0,
+ outbits = 0;
+ let pos = bufferLength;
+ let i;
- if (prep) {
- sanitizeTTProgram(prep, ttContext);
+ if (bits === 1 && colors === 1) {
+ for (i = 0; i < rowBytes; ++i) {
+ let c = rawBytes[i] ^ inbuf;
+ c ^= c >> 1;
+ c ^= c >> 2;
+ c ^= c >> 4;
+ inbuf = (c & 1) << 7;
+ buffer[pos++] = c;
+ }
+ } else if (bits === 8) {
+ for (i = 0; i < colors; ++i) {
+ buffer[pos++] = rawBytes[i];
+ }
+
+ for (; i < rowBytes; ++i) {
+ buffer[pos] = buffer[pos - colors] + rawBytes[i];
+ pos++;
+ }
+ } else if (bits === 16) {
+ const bytesPerPixel = colors * 2;
+
+ for (i = 0; i < bytesPerPixel; ++i) {
+ buffer[pos++] = rawBytes[i];
+ }
+
+ for (; i < rowBytes; i += 2) {
+ const sum = ((rawBytes[i] & 0xff) << 8) + (rawBytes[i + 1] & 0xff) + ((buffer[pos - bytesPerPixel] & 0xff) << 8) + (buffer[pos - bytesPerPixel + 1] & 0xff);
+ buffer[pos++] = sum >> 8 & 0xff;
+ buffer[pos++] = sum & 0xff;
+ }
+ } else {
+ const compArray = new Uint8Array(colors + 1);
+ const bitMask = (1 << bits) - 1;
+ let j = 0,
+ k = bufferLength;
+ const columns = this.columns;
+
+ for (i = 0; i < columns; ++i) {
+ for (let kk = 0; kk < colors; ++kk) {
+ if (inbits < bits) {
+ inbuf = inbuf << 8 | rawBytes[j++] & 0xff;
+ inbits += 8;
+ }
+
+ compArray[kk] = compArray[kk] + (inbuf >> inbits - bits) & bitMask;
+ inbits -= bits;
+ outbuf = outbuf << bits | compArray[kk];
+ outbits += bits;
+
+ if (outbits >= 8) {
+ buffer[k++] = outbuf >> outbits - 8 & 0xff;
+ outbits -= 8;
+ }
}
+ }
+
+ if (outbits > 0) {
+ buffer[k++] = (outbuf << 8 - outbits) + (inbuf & (1 << 8 - outbits) - 1);
+ }
+ }
+
+ this.bufferLength += rowBytes;
+ }
+
+ readBlockPng() {
+ const rowBytes = this.rowBytes;
+ const pixBytes = this.pixBytes;
+ const predictor = this.str.getByte();
+ const rawBytes = this.str.getBytes(rowBytes);
+ this.eof = !rawBytes.length;
+
+ if (this.eof) {
+ return;
+ }
+
+ const bufferLength = this.bufferLength;
+ const buffer = this.ensureBuffer(bufferLength + rowBytes);
+ let prevRow = buffer.subarray(bufferLength - rowBytes, bufferLength);
- if (fpgm) {
- checkInvalidFunctions(ttContext, maxFunctionDefs);
+ if (prevRow.length === 0) {
+ prevRow = new Uint8Array(rowBytes);
+ }
+
+ let i,
+ j = bufferLength,
+ up,
+ c;
+
+ switch (predictor) {
+ case 0:
+ for (i = 0; i < rowBytes; ++i) {
+ buffer[j++] = rawBytes[i];
}
- if (cvt && cvt.length & 1) {
- var cvtData = new Uint8Array(cvt.length + 1);
- cvtData.set(cvt.data);
- cvt.data = cvtData;
+ break;
+
+ case 1:
+ for (i = 0; i < pixBytes; ++i) {
+ buffer[j++] = rawBytes[i];
}
- return ttContext.hintsValid;
- }
+ for (; i < rowBytes; ++i) {
+ buffer[j] = buffer[j - pixBytes] + rawBytes[i] & 0xff;
+ j++;
+ }
- font = new _stream.Stream(new Uint8Array(font.getBytes()));
- let header, tables;
+ break;
- if (isTrueTypeCollectionFile(font)) {
- const ttcData = readTrueTypeCollectionData(font, this.name);
- header = ttcData.header;
- tables = ttcData.tables;
- } else {
- header = readOpenTypeHeader(font);
- tables = readTables(font, header.numTables);
- }
+ case 2:
+ for (i = 0; i < rowBytes; ++i) {
+ buffer[j++] = prevRow[i] + rawBytes[i] & 0xff;
+ }
- let cff, cffFile;
- var isTrueType = !tables["CFF "];
+ break;
- if (!isTrueType) {
- const isComposite = properties.composite && ((properties.cidToGidMap || []).length > 0 || !(properties.cMap instanceof _cmap.IdentityCMap));
+ case 3:
+ for (i = 0; i < pixBytes; ++i) {
+ buffer[j++] = (prevRow[i] >> 1) + rawBytes[i];
+ }
- if (header.version === "OTTO" && !isComposite || !tables.head || !tables.hhea || !tables.maxp || !tables.post) {
- cffFile = new _stream.Stream(tables["CFF "].data);
- cff = new CFFFont(cffFile, properties);
- adjustWidths(properties);
- return this.convert(name, cff, properties);
+ for (; i < rowBytes; ++i) {
+ buffer[j] = (prevRow[i] + buffer[j - pixBytes] >> 1) + rawBytes[i] & 0xff;
+ j++;
}
- delete tables.glyf;
- delete tables.loca;
- delete tables.fpgm;
- delete tables.prep;
- delete tables["cvt "];
- this.isOpenType = true;
- } else {
- if (!tables.loca) {
- throw new _util.FormatError('Required "loca" table is not found');
+ break;
+
+ case 4:
+ for (i = 0; i < pixBytes; ++i) {
+ up = prevRow[i];
+ c = rawBytes[i];
+ buffer[j++] = up + c;
}
- if (!tables.glyf) {
- (0, _util.warn)('Required "glyf" table is not found -- trying to recover.');
- tables.glyf = {
- tag: "glyf",
- data: new Uint8Array(0)
- };
+ for (; i < rowBytes; ++i) {
+ up = prevRow[i];
+ const upLeft = prevRow[i - pixBytes];
+ const left = buffer[j - pixBytes];
+ const p = left + up - upLeft;
+ let pa = p - left;
+
+ if (pa < 0) {
+ pa = -pa;
+ }
+
+ let pb = p - up;
+
+ if (pb < 0) {
+ pb = -pb;
+ }
+
+ let pc = p - upLeft;
+
+ if (pc < 0) {
+ pc = -pc;
+ }
+
+ c = rawBytes[i];
+
+ if (pa <= pb && pa <= pc) {
+ buffer[j++] = left + c;
+ } else if (pb <= pc) {
+ buffer[j++] = up + c;
+ } else {
+ buffer[j++] = upLeft + c;
+ }
}
- this.isOpenType = false;
+ break;
+
+ default:
+ throw new _util.FormatError(`Unsupported predictor: ${predictor}`);
+ }
+
+ this.bufferLength += rowBytes;
+ }
+
+}
+
+exports.PredictorStream = PredictorStream;
+
+/***/ }),
+/* 33 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.RunLengthStream = void 0;
+
+var _decode_stream = __w_pdfjs_require__(19);
+
+class RunLengthStream extends _decode_stream.DecodeStream {
+ constructor(str, maybeLength) {
+ super(maybeLength);
+ this.str = str;
+ this.dict = str.dict;
+ }
+
+ readBlock() {
+ const repeatHeader = this.str.getBytes(2);
+
+ if (!repeatHeader || repeatHeader.length < 2 || repeatHeader[0] === 128) {
+ this.eof = true;
+ return;
+ }
+
+ let buffer;
+ let bufferLength = this.bufferLength;
+ let n = repeatHeader[0];
+
+ if (n < 128) {
+ buffer = this.ensureBuffer(bufferLength + n + 1);
+ buffer[bufferLength++] = repeatHeader[1];
+
+ if (n > 0) {
+ const source = this.str.getBytes(n);
+ buffer.set(source, bufferLength);
+ bufferLength += n;
+ }
+ } else {
+ n = 257 - n;
+ const b = repeatHeader[1];
+ buffer = this.ensureBuffer(bufferLength + n + 1);
+
+ for (let i = 0; i < n; i++) {
+ buffer[bufferLength++] = b;
}
+ }
+
+ this.bufferLength = bufferLength;
+ }
+
+}
+
+exports.RunLengthStream = RunLengthStream;
+
+/***/ }),
+/* 34 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.Font = exports.ErrorFont = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _cff_parser = __w_pdfjs_require__(35);
+
+var _fonts_utils = __w_pdfjs_require__(38);
+
+var _glyphlist = __w_pdfjs_require__(39);
+
+var _encodings = __w_pdfjs_require__(37);
+
+var _standard_fonts = __w_pdfjs_require__(41);
+
+var _unicode = __w_pdfjs_require__(40);
+
+var _to_unicode_map = __w_pdfjs_require__(42);
+
+var _cff_font = __w_pdfjs_require__(43);
+
+var _font_renderer = __w_pdfjs_require__(44);
+
+var _glyf = __w_pdfjs_require__(45);
+
+var _cmap = __w_pdfjs_require__(16);
+
+var _opentype_file_builder = __w_pdfjs_require__(46);
+
+var _core_utils = __w_pdfjs_require__(9);
+
+var _stream = __w_pdfjs_require__(10);
+
+var _type1_font = __w_pdfjs_require__(47);
+
+const PRIVATE_USE_AREAS = [[0xe000, 0xf8ff], [0x100000, 0x10fffd]];
+const PDF_GLYPH_SPACE_UNITS = 1000;
+const EXPORT_DATA_PROPERTIES = ["ascent", "bbox", "black", "bold", "charProcOperatorList", "composite", "cssFontInfo", "data", "defaultVMetrics", "defaultWidth", "descent", "fallbackName", "fontMatrix", "fontType", "isMonospace", "isSerifFont", "isType3Font", "italic", "loadedName", "mimetype", "missingFile", "name", "remeasure", "subtype", "type", "vertical"];
+const EXPORT_DATA_EXTRA_PROPERTIES = ["cMap", "defaultEncoding", "differences", "isSymbolicFont", "seacMap", "toFontChar", "toUnicode", "vmetrics", "widths"];
+
+function adjustWidths(properties) {
+ if (!properties.fontMatrix) {
+ return;
+ }
+
+ if (properties.fontMatrix[0] === _util.FONT_IDENTITY_MATRIX[0]) {
+ return;
+ }
+
+ const scale = 0.001 / properties.fontMatrix[0];
+ const glyphsWidths = properties.widths;
+
+ for (const glyph in glyphsWidths) {
+ glyphsWidths[glyph] *= scale;
+ }
+
+ properties.defaultWidth *= scale;
+}
+
+function adjustToUnicode(properties, builtInEncoding) {
+ if (properties.isInternalFont) {
+ return;
+ }
+
+ if (builtInEncoding === properties.defaultEncoding) {
+ return;
+ }
+
+ if (properties.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap) {
+ return;
+ }
- if (!tables.maxp) {
- throw new _util.FormatError('Required "maxp" table is not found');
+ const toUnicode = [],
+ glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();
+
+ for (const charCode in builtInEncoding) {
+ if (properties.hasIncludedToUnicodeMap) {
+ if (properties.toUnicode.has(charCode)) {
+ continue;
+ }
+ } else {
+ if (properties.hasEncoding && properties.differences[charCode] !== undefined) {
+ continue;
}
+ }
+
+ const glyphName = builtInEncoding[charCode];
+ const unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap);
+
+ if (unicode !== -1) {
+ toUnicode[charCode] = String.fromCharCode(unicode);
+ }
+ }
+
+ if (toUnicode.length > 0) {
+ properties.toUnicode.amend(toUnicode);
+ }
+}
+
+function amendFallbackToUnicode(properties) {
+ if (!properties.fallbackToUnicode) {
+ return;
+ }
+
+ if (properties.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap) {
+ return;
+ }
+
+ const toUnicode = [];
+
+ for (const charCode in properties.fallbackToUnicode) {
+ if (properties.toUnicode.has(charCode)) {
+ continue;
+ }
+
+ toUnicode[charCode] = properties.fallbackToUnicode[charCode];
+ }
+
+ if (toUnicode.length > 0) {
+ properties.toUnicode.amend(toUnicode);
+ }
+}
+
+class Glyph {
+ constructor(originalCharCode, fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont) {
+ this.originalCharCode = originalCharCode;
+ this.fontChar = fontChar;
+ this.unicode = unicode;
+ this.accent = accent;
+ this.width = width;
+ this.vmetric = vmetric;
+ this.operatorListId = operatorListId;
+ this.isSpace = isSpace;
+ this.isInFont = isInFont;
+ }
+
+ matchesForCache(originalCharCode, fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont) {
+ return this.originalCharCode === originalCharCode && this.fontChar === fontChar && this.unicode === unicode && this.accent === accent && this.width === width && this.vmetric === vmetric && this.operatorListId === operatorListId && this.isSpace === isSpace && this.isInFont === isInFont;
+ }
+
+}
+
+function int16(b0, b1) {
+ return (b0 << 8) + b1;
+}
+
+function writeSignedInt16(bytes, index, value) {
+ bytes[index + 1] = value;
+ bytes[index] = value >>> 8;
+}
+
+function signedInt16(b0, b1) {
+ const value = (b0 << 8) + b1;
+ return value & 1 << 15 ? value - 0x10000 : value;
+}
+
+function int32(b0, b1, b2, b3) {
+ return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3;
+}
+
+function string16(value) {
+ return String.fromCharCode(value >> 8 & 0xff, value & 0xff);
+}
+
+function safeString16(value) {
+ if (value > 0x7fff) {
+ value = 0x7fff;
+ } else if (value < -0x8000) {
+ value = -0x8000;
+ }
+
+ return String.fromCharCode(value >> 8 & 0xff, value & 0xff);
+}
+
+function isTrueTypeFile(file) {
+ const header = file.peekBytes(4);
+ return (0, _core_utils.readUint32)(header, 0) === 0x00010000 || (0, _util.bytesToString)(header) === "true";
+}
+
+function isTrueTypeCollectionFile(file) {
+ const header = file.peekBytes(4);
+ return (0, _util.bytesToString)(header) === "ttcf";
+}
+
+function isOpenTypeFile(file) {
+ const header = file.peekBytes(4);
+ return (0, _util.bytesToString)(header) === "OTTO";
+}
+
+function isType1File(file) {
+ const header = file.peekBytes(2);
+
+ if (header[0] === 0x25 && header[1] === 0x21) {
+ return true;
+ }
+
+ if (header[0] === 0x80 && header[1] === 0x01) {
+ return true;
+ }
+
+ return false;
+}
+
+function isCFFFile(file) {
+ const header = file.peekBytes(4);
+
+ if (header[0] >= 1 && header[3] >= 1 && header[3] <= 4) {
+ return true;
+ }
+
+ return false;
+}
+
+function getFontFileType(file, {
+ type,
+ subtype,
+ composite
+}) {
+ let fileType, fileSubtype;
+
+ if (isTrueTypeFile(file) || isTrueTypeCollectionFile(file)) {
+ if (composite) {
+ fileType = "CIDFontType2";
+ } else {
+ fileType = "TrueType";
+ }
+ } else if (isOpenTypeFile(file)) {
+ if (composite) {
+ fileType = "CIDFontType2";
+ } else {
+ fileType = "OpenType";
+ }
+ } else if (isType1File(file)) {
+ if (composite) {
+ fileType = "CIDFontType0";
+ } else {
+ fileType = type === "MMType1" ? "MMType1" : "Type1";
+ }
+ } else if (isCFFFile(file)) {
+ if (composite) {
+ fileType = "CIDFontType0";
+ fileSubtype = "CIDFontType0C";
+ } else {
+ fileType = type === "MMType1" ? "MMType1" : "Type1";
+ fileSubtype = "Type1C";
+ }
+ } else {
+ (0, _util.warn)("getFontFileType: Unable to detect correct font file Type/Subtype.");
+ fileType = type;
+ fileSubtype = subtype;
+ }
+
+ return [fileType, fileSubtype];
+}
+
+function buildToFontChar(encoding, glyphsUnicodeMap, differences) {
+ const toFontChar = [];
+ let unicode;
+
+ for (let i = 0, ii = encoding.length; i < ii; i++) {
+ unicode = (0, _unicode.getUnicodeForGlyph)(encoding[i], glyphsUnicodeMap);
+
+ if (unicode !== -1) {
+ toFontChar[i] = unicode;
+ }
+ }
+
+ for (const charCode in differences) {
+ unicode = (0, _unicode.getUnicodeForGlyph)(differences[charCode], glyphsUnicodeMap);
- font.pos = (font.start || 0) + tables.maxp.offset;
- var version = font.getInt32();
- const numGlyphs = font.getUint16();
- let numGlyphsOut = numGlyphs + 1;
- let dupFirstEntry = true;
+ if (unicode !== -1) {
+ toFontChar[+charCode] = unicode;
+ }
+ }
+
+ return toFontChar;
+}
+
+function adjustMapping(charCodeToGlyphId, hasGlyph, newGlyphZeroId) {
+ const newMap = Object.create(null);
+ const toFontChar = [];
+ let privateUseAreaIndex = 0;
+ let nextAvailableFontCharCode = PRIVATE_USE_AREAS[privateUseAreaIndex][0];
+ let privateUseOffetEnd = PRIVATE_USE_AREAS[privateUseAreaIndex][1];
+
+ for (let originalCharCode in charCodeToGlyphId) {
+ originalCharCode |= 0;
+ let glyphId = charCodeToGlyphId[originalCharCode];
+
+ if (!hasGlyph(glyphId)) {
+ continue;
+ }
+
+ if (nextAvailableFontCharCode > privateUseOffetEnd) {
+ privateUseAreaIndex++;
- if (numGlyphsOut > 0xffff) {
- dupFirstEntry = false;
- numGlyphsOut = numGlyphs;
- (0, _util.warn)("Not enough space in glyfs to duplicate first glyph.");
+ if (privateUseAreaIndex >= PRIVATE_USE_AREAS.length) {
+ (0, _util.warn)("Ran out of space in font private use area.");
+ break;
}
- var maxFunctionDefs = 0;
- var maxSizeOfInstructions = 0;
+ nextAvailableFontCharCode = PRIVATE_USE_AREAS[privateUseAreaIndex][0];
+ privateUseOffetEnd = PRIVATE_USE_AREAS[privateUseAreaIndex][1];
+ }
+
+ const fontCharCode = nextAvailableFontCharCode++;
- if (version >= 0x00010000 && tables.maxp.length >= 22) {
- font.pos += 8;
- var maxZones = font.getUint16();
+ if (glyphId === 0) {
+ glyphId = newGlyphZeroId;
+ }
- if (maxZones > 2) {
- tables.maxp.data[14] = 0;
- tables.maxp.data[15] = 2;
- }
+ newMap[fontCharCode] = glyphId;
+ toFontChar[originalCharCode] = fontCharCode;
+ }
+
+ return {
+ toFontChar,
+ charCodeToGlyphId: newMap,
+ nextAvailableFontCharCode
+ };
+}
+
+function getRanges(glyphs, numGlyphs) {
+ const codes = [];
+
+ for (const charCode in glyphs) {
+ if (glyphs[charCode] >= numGlyphs) {
+ continue;
+ }
+
+ codes.push({
+ fontCharCode: charCode | 0,
+ glyphId: glyphs[charCode]
+ });
+ }
+
+ if (codes.length === 0) {
+ codes.push({
+ fontCharCode: 0,
+ glyphId: 0
+ });
+ }
+
+ codes.sort(function fontGetRangesSort(a, b) {
+ return a.fontCharCode - b.fontCharCode;
+ });
+ const ranges = [];
+ const length = codes.length;
+
+ for (let n = 0; n < length;) {
+ const start = codes[n].fontCharCode;
+ const codeIndices = [codes[n].glyphId];
+ ++n;
+ let end = start;
+
+ while (n < length && end + 1 === codes[n].fontCharCode) {
+ codeIndices.push(codes[n].glyphId);
+ ++end;
+ ++n;
- font.pos += 4;
- maxFunctionDefs = font.getUint16();
- font.pos += 4;
- maxSizeOfInstructions = font.getUint16();
+ if (end === 0xffff) {
+ break;
}
+ }
+
+ ranges.push([start, end, codeIndices]);
+ }
+
+ return ranges;
+}
+
+function createCmapTable(glyphs, numGlyphs) {
+ const ranges = getRanges(glyphs, numGlyphs);
+ const numTables = ranges[ranges.length - 1][1] > 0xffff ? 2 : 1;
+ let cmap = "\x00\x00" + string16(numTables) + "\x00\x03" + "\x00\x01" + (0, _util.string32)(4 + numTables * 8);
+ let i, ii, j, jj;
+
+ for (i = ranges.length - 1; i >= 0; --i) {
+ if (ranges[i][0] <= 0xffff) {
+ break;
+ }
+ }
+
+ const bmpLength = i + 1;
+
+ if (ranges[i][0] < 0xffff && ranges[i][1] === 0xffff) {
+ ranges[i][1] = 0xfffe;
+ }
+
+ const trailingRangesCount = ranges[i][1] < 0xffff ? 1 : 0;
+ const segCount = bmpLength + trailingRangesCount;
- tables.maxp.data[4] = numGlyphsOut >> 8;
- tables.maxp.data[5] = numGlyphsOut & 255;
- var hintsValid = sanitizeTTPrograms(tables.fpgm, tables.prep, tables["cvt "], maxFunctionDefs);
+ const searchParams = _opentype_file_builder.OpenTypeFileBuilder.getSearchParams(segCount, 2);
- if (!hintsValid) {
- delete tables.fpgm;
- delete tables.prep;
- delete tables["cvt "];
+ let startCount = "";
+ let endCount = "";
+ let idDeltas = "";
+ let idRangeOffsets = "";
+ let glyphsIds = "";
+ let bias = 0;
+ let range, start, end, codes;
+
+ for (i = 0, ii = bmpLength; i < ii; i++) {
+ range = ranges[i];
+ start = range[0];
+ end = range[1];
+ startCount += string16(start);
+ endCount += string16(end);
+ codes = range[2];
+ let contiguous = true;
+
+ for (j = 1, jj = codes.length; j < jj; ++j) {
+ if (codes[j] !== codes[j - 1] + 1) {
+ contiguous = false;
+ break;
}
+ }
- sanitizeMetrics(font, tables.hhea, tables.hmtx, numGlyphsOut, dupFirstEntry);
+ if (!contiguous) {
+ const offset = (segCount - i) * 2 + bias * 2;
+ bias += end - start + 1;
+ idDeltas += string16(0);
+ idRangeOffsets += string16(offset);
- if (!tables.head) {
- throw new _util.FormatError('Required "head" table is not found');
+ for (j = 0, jj = codes.length; j < jj; ++j) {
+ glyphsIds += string16(codes[j]);
}
+ } else {
+ const startCode = codes[0];
+ idDeltas += string16(startCode - start & 0xffff);
+ idRangeOffsets += string16(0);
+ }
+ }
+
+ if (trailingRangesCount > 0) {
+ endCount += "\xFF\xFF";
+ startCount += "\xFF\xFF";
+ idDeltas += "\x00\x01";
+ idRangeOffsets += "\x00\x00";
+ }
+
+ const format314 = "\x00\x00" + string16(2 * segCount) + string16(searchParams.range) + string16(searchParams.entry) + string16(searchParams.rangeShift) + endCount + "\x00\x00" + startCount + idDeltas + idRangeOffsets + glyphsIds;
+ let format31012 = "";
+ let header31012 = "";
- sanitizeHead(tables.head, numGlyphs, isTrueType ? tables.loca.length : 0);
- var missingGlyphs = Object.create(null);
+ if (numTables > 1) {
+ cmap += "\x00\x03" + "\x00\x0A" + (0, _util.string32)(4 + numTables * 8 + 4 + format314.length);
+ format31012 = "";
- if (isTrueType) {
- var isGlyphLocationsLong = int16(tables.head.data[50], tables.head.data[51]);
- var glyphsInfo = sanitizeGlyphLocations(tables.loca, tables.glyf, numGlyphs, isGlyphLocationsLong, hintsValid, dupFirstEntry, maxSizeOfInstructions);
- missingGlyphs = glyphsInfo.missingGlyphs;
+ for (i = 0, ii = ranges.length; i < ii; i++) {
+ range = ranges[i];
+ start = range[0];
+ codes = range[2];
+ let code = codes[0];
- if (version >= 0x00010000 && tables.maxp.length >= 22) {
- tables.maxp.data[26] = glyphsInfo.maxSizeOfInstructions >> 8;
- tables.maxp.data[27] = glyphsInfo.maxSizeOfInstructions & 255;
+ for (j = 1, jj = codes.length; j < jj; ++j) {
+ if (codes[j] !== codes[j - 1] + 1) {
+ end = range[0] + j - 1;
+ format31012 += (0, _util.string32)(start) + (0, _util.string32)(end) + (0, _util.string32)(code);
+ start = end + 1;
+ code = codes[j];
}
}
- if (!tables.hhea) {
- throw new _util.FormatError('Required "hhea" table is not found');
+ format31012 += (0, _util.string32)(start) + (0, _util.string32)(range[1]) + (0, _util.string32)(code);
+ }
+
+ header31012 = "\x00\x0C" + "\x00\x00" + (0, _util.string32)(format31012.length + 16) + "\x00\x00\x00\x00" + (0, _util.string32)(format31012.length / 12);
+ }
+
+ return cmap + "\x00\x04" + string16(format314.length + 4) + format314 + header31012 + format31012;
+}
+
+function validateOS2Table(os2, file) {
+ file.pos = (file.start || 0) + os2.offset;
+ const version = file.getUint16();
+ file.skip(60);
+ const selection = file.getUint16();
+
+ if (version < 4 && selection & 0x0300) {
+ return false;
+ }
+
+ const firstChar = file.getUint16();
+ const lastChar = file.getUint16();
+
+ if (firstChar > lastChar) {
+ return false;
+ }
+
+ file.skip(6);
+ const usWinAscent = file.getUint16();
+
+ if (usWinAscent === 0) {
+ return false;
+ }
+
+ os2.data[8] = os2.data[9] = 0;
+ return true;
+}
+
+function createOS2Table(properties, charstrings, override) {
+ override = override || {
+ unitsPerEm: 0,
+ yMax: 0,
+ yMin: 0,
+ ascent: 0,
+ descent: 0
+ };
+ let ulUnicodeRange1 = 0;
+ let ulUnicodeRange2 = 0;
+ let ulUnicodeRange3 = 0;
+ let ulUnicodeRange4 = 0;
+ let firstCharIndex = null;
+ let lastCharIndex = 0;
+
+ if (charstrings) {
+ for (let code in charstrings) {
+ code |= 0;
+
+ if (firstCharIndex > code || !firstCharIndex) {
+ firstCharIndex = code;
}
- if (tables.hhea.data[10] === 0 && tables.hhea.data[11] === 0) {
- tables.hhea.data[10] = 0xff;
- tables.hhea.data[11] = 0xff;
+ if (lastCharIndex < code) {
+ lastCharIndex = code;
}
- var metricsOverride = {
- unitsPerEm: int16(tables.head.data[18], tables.head.data[19]),
- yMax: int16(tables.head.data[42], tables.head.data[43]),
- yMin: signedInt16(tables.head.data[38], tables.head.data[39]),
- ascent: int16(tables.hhea.data[4], tables.hhea.data[5]),
- descent: signedInt16(tables.hhea.data[6], tables.hhea.data[7])
- };
- this.ascent = metricsOverride.ascent / metricsOverride.unitsPerEm;
- this.descent = metricsOverride.descent / metricsOverride.unitsPerEm;
+ const position = (0, _unicode.getUnicodeRangeFor)(code);
- if (tables.post) {
- readPostScriptTable(tables.post, properties, numGlyphs);
+ if (position < 32) {
+ ulUnicodeRange1 |= 1 << position;
+ } else if (position < 64) {
+ ulUnicodeRange2 |= 1 << position - 32;
+ } else if (position < 96) {
+ ulUnicodeRange3 |= 1 << position - 64;
+ } else if (position < 123) {
+ ulUnicodeRange4 |= 1 << position - 96;
+ } else {
+ throw new _util.FormatError("Unicode ranges Bits > 123 are reserved for internal usage");
}
+ }
- tables.post = {
- tag: "post",
- data: createPostTable(properties)
- };
- const charCodeToGlyphId = [];
+ if (lastCharIndex > 0xffff) {
+ lastCharIndex = 0xffff;
+ }
+ } else {
+ firstCharIndex = 0;
+ lastCharIndex = 255;
+ }
+
+ const bbox = properties.bbox || [0, 0, 0, 0];
+ const unitsPerEm = override.unitsPerEm || 1 / (properties.fontMatrix || _util.FONT_IDENTITY_MATRIX)[0];
+ const scale = properties.ascentScaled ? 1.0 : unitsPerEm / PDF_GLYPH_SPACE_UNITS;
+ const typoAscent = override.ascent || Math.round(scale * (properties.ascent || bbox[3]));
+ let typoDescent = override.descent || Math.round(scale * (properties.descent || bbox[1]));
+
+ if (typoDescent > 0 && properties.descent > 0 && bbox[1] < 0) {
+ typoDescent = -typoDescent;
+ }
+
+ const winAscent = override.yMax || typoAscent;
+ const winDescent = -override.yMin || -typoDescent;
+ return "\x00\x03" + "\x02\x24" + "\x01\xF4" + "\x00\x05" + "\x00\x00" + "\x02\x8A" + "\x02\xBB" + "\x00\x00" + "\x00\x8C" + "\x02\x8A" + "\x02\xBB" + "\x00\x00" + "\x01\xDF" + "\x00\x31" + "\x01\x02" + "\x00\x00" + "\x00\x00\x06" + String.fromCharCode(properties.fixedPitch ? 0x09 : 0x00) + "\x00\x00\x00\x00\x00\x00" + (0, _util.string32)(ulUnicodeRange1) + (0, _util.string32)(ulUnicodeRange2) + (0, _util.string32)(ulUnicodeRange3) + (0, _util.string32)(ulUnicodeRange4) + "\x2A\x32\x31\x2A" + string16(properties.italicAngle ? 1 : 0) + string16(firstCharIndex || properties.firstChar) + string16(lastCharIndex || properties.lastChar) + string16(typoAscent) + string16(typoDescent) + "\x00\x64" + string16(winAscent) + string16(winDescent) + "\x00\x00\x00\x00" + "\x00\x00\x00\x00" + string16(properties.xHeight) + string16(properties.capHeight) + string16(0) + string16(firstCharIndex || properties.firstChar) + "\x00\x03";
+}
+
+function createPostTable(properties) {
+ const angle = Math.floor(properties.italicAngle * 2 ** 16);
+ return "\x00\x03\x00\x00" + (0, _util.string32)(angle) + "\x00\x00" + "\x00\x00" + (0, _util.string32)(properties.fixedPitch ? 1 : 0) + "\x00\x00\x00\x00" + "\x00\x00\x00\x00" + "\x00\x00\x00\x00" + "\x00\x00\x00\x00";
+}
+
+function createPostscriptName(name) {
+ return name.replace(/[^\x21-\x7E]|[[\](){}<>/%]/g, "").slice(0, 63);
+}
+
+function createNameTable(name, proto) {
+ if (!proto) {
+ proto = [[], []];
+ }
+
+ const strings = [proto[0][0] || "Original licence", proto[0][1] || name, proto[0][2] || "Unknown", proto[0][3] || "uniqueID", proto[0][4] || name, proto[0][5] || "Version 0.11", proto[0][6] || createPostscriptName(name), proto[0][7] || "Unknown", proto[0][8] || "Unknown", proto[0][9] || "Unknown"];
+ const stringsUnicode = [];
+ let i, ii, j, jj, str;
+
+ for (i = 0, ii = strings.length; i < ii; i++) {
+ str = proto[1][i] || strings[i];
+ const strBufUnicode = [];
+
+ for (j = 0, jj = str.length; j < jj; j++) {
+ strBufUnicode.push(string16(str.charCodeAt(j)));
+ }
+
+ stringsUnicode.push(strBufUnicode.join(""));
+ }
+
+ const names = [strings, stringsUnicode];
+ const platforms = ["\x00\x01", "\x00\x03"];
+ const encodings = ["\x00\x00", "\x00\x01"];
+ const languages = ["\x00\x00", "\x04\x09"];
+ const namesRecordCount = strings.length * platforms.length;
+ let nameTable = "\x00\x00" + string16(namesRecordCount) + string16(namesRecordCount * 12 + 6);
+ let strOffset = 0;
+
+ for (i = 0, ii = platforms.length; i < ii; i++) {
+ const strs = names[i];
+
+ for (j = 0, jj = strs.length; j < jj; j++) {
+ str = strs[j];
+ const nameRecord = platforms[i] + encodings[i] + languages[i] + string16(j) + string16(str.length) + string16(strOffset);
+ nameTable += nameRecord;
+ strOffset += str.length;
+ }
+ }
+
+ nameTable += strings.join("") + stringsUnicode.join("");
+ return nameTable;
+}
+
+class Font {
+ constructor(name, file, properties) {
+ this.name = name;
+ this.psName = null;
+ this.mimetype = null;
+ this.disableFontFace = false;
+ this.loadedName = properties.loadedName;
+ this.isType3Font = properties.isType3Font;
+ this.missingFile = false;
+ this.cssFontInfo = properties.cssFontInfo;
+ this._charsCache = Object.create(null);
+ this._glyphCache = Object.create(null);
+ this.isSerifFont = !!(properties.flags & _fonts_utils.FontFlags.Serif);
+ this.isSymbolicFont = !!(properties.flags & _fonts_utils.FontFlags.Symbolic);
+ this.isMonospace = !!(properties.flags & _fonts_utils.FontFlags.FixedPitch);
+ let type = properties.type;
+ let subtype = properties.subtype;
+ this.type = type;
+ this.subtype = subtype;
+ let fallbackName = "sans-serif";
+
+ if (this.isMonospace) {
+ fallbackName = "monospace";
+ } else if (this.isSerifFont) {
+ fallbackName = "serif";
+ }
+
+ this.fallbackName = fallbackName;
+ this.differences = properties.differences;
+ this.widths = properties.widths;
+ this.defaultWidth = properties.defaultWidth;
+ this.composite = properties.composite;
+ this.cMap = properties.cMap;
+ this.capHeight = properties.capHeight / PDF_GLYPH_SPACE_UNITS;
+ this.ascent = properties.ascent / PDF_GLYPH_SPACE_UNITS;
+ this.descent = properties.descent / PDF_GLYPH_SPACE_UNITS;
+ this.lineHeight = this.ascent - this.descent;
+ this.fontMatrix = properties.fontMatrix;
+ this.bbox = properties.bbox;
+ this.defaultEncoding = properties.defaultEncoding;
+ this.toUnicode = properties.toUnicode;
+ this.toFontChar = [];
- function hasGlyph(glyphId) {
- return !missingGlyphs[glyphId];
+ if (properties.type === "Type3") {
+ for (let charCode = 0; charCode < 256; charCode++) {
+ this.toFontChar[charCode] = this.differences[charCode] || properties.defaultEncoding[charCode];
}
- if (properties.composite) {
- var cidToGidMap = properties.cidToGidMap || [];
- var isCidToGidMapEmpty = cidToGidMap.length === 0;
- properties.cMap.forEach(function (charCode, cid) {
- if (cid > 0xffff) {
- throw new _util.FormatError("Max size of CID is 65,535");
- }
+ this.fontType = _util.FontType.TYPE3;
+ return;
+ }
- var glyphId = -1;
+ this.cidEncoding = properties.cidEncoding;
+ this.vertical = !!properties.vertical;
- if (isCidToGidMapEmpty) {
- glyphId = cid;
- } else if (cidToGidMap[cid] !== undefined) {
- glyphId = cidToGidMap[cid];
- }
+ if (this.vertical) {
+ this.vmetrics = properties.vmetrics;
+ this.defaultVMetrics = properties.defaultVMetrics;
+ }
- if (glyphId >= 0 && glyphId < numGlyphs && hasGlyph(glyphId)) {
- charCodeToGlyphId[charCode] = glyphId;
+ if (!file || file.isEmpty) {
+ if (file) {
+ (0, _util.warn)('Font file is empty in "' + name + '" (' + this.loadedName + ")");
+ }
+
+ this.fallbackToSystemFont(properties);
+ return;
+ }
+
+ [type, subtype] = getFontFileType(file, properties);
+
+ if (type !== this.type || subtype !== this.subtype) {
+ (0, _util.info)("Inconsistent font file Type/SubType, expected: " + `${this.type}/${this.subtype} but found: ${type}/${subtype}.`);
+ }
+
+ let data;
+
+ try {
+ switch (type) {
+ case "MMType1":
+ (0, _util.info)("MMType1 font (" + name + "), falling back to Type1.");
+
+ case "Type1":
+ case "CIDFontType0":
+ this.mimetype = "font/opentype";
+ const cff = subtype === "Type1C" || subtype === "CIDFontType0C" ? new _cff_font.CFFFont(file, properties) : new _type1_font.Type1Font(name, file, properties);
+ adjustWidths(properties);
+ data = this.convert(name, cff, properties);
+ break;
+
+ case "OpenType":
+ case "TrueType":
+ case "CIDFontType2":
+ this.mimetype = "font/opentype";
+ data = this.checkAndRepair(name, file, properties);
+
+ if (this.isOpenType) {
+ adjustWidths(properties);
+ type = "OpenType";
}
- });
- } else {
- var cmapTable = readCmapTable(tables.cmap, font, this.isSymbolicFont, properties.hasEncoding);
- var cmapPlatformId = cmapTable.platformId;
- var cmapEncodingId = cmapTable.encodingId;
- var cmapMappings = cmapTable.mappings;
- var cmapMappingsLength = cmapMappings.length;
- let baseEncoding = [];
- if (properties.hasEncoding && (properties.baseEncodingName === "MacRomanEncoding" || properties.baseEncodingName === "WinAnsiEncoding")) {
- baseEncoding = (0, _encodings.getEncoding)(properties.baseEncodingName);
- }
+ break;
- if (properties.hasEncoding && !this.isSymbolicFont && (cmapPlatformId === 3 && cmapEncodingId === 1 || cmapPlatformId === 1 && cmapEncodingId === 0)) {
- var glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();
+ default:
+ throw new _util.FormatError(`Font ${type} is not supported`);
+ }
+ } catch (e) {
+ (0, _util.warn)(e);
+ this.fallbackToSystemFont(properties);
+ return;
+ }
- for (let charCode = 0; charCode < 256; charCode++) {
- var glyphName, standardGlyphName;
+ amendFallbackToUnicode(properties);
+ this.data = data;
+ this.fontType = (0, _fonts_utils.getFontType)(type, subtype, properties.isStandardFont);
+ this.fontMatrix = properties.fontMatrix;
+ this.widths = properties.widths;
+ this.defaultWidth = properties.defaultWidth;
+ this.toUnicode = properties.toUnicode;
+ this.seacMap = properties.seacMap;
+ }
- if (this.differences && charCode in this.differences) {
- glyphName = this.differences[charCode];
- } else if (charCode in baseEncoding && baseEncoding[charCode] !== "") {
- glyphName = baseEncoding[charCode];
- } else {
- glyphName = _encodings.StandardEncoding[charCode];
- }
+ get renderer() {
+ const renderer = _font_renderer.FontRendererFactory.create(this, _fonts_utils.SEAC_ANALYSIS_ENABLED);
- if (!glyphName) {
- continue;
- }
+ return (0, _util.shadow)(this, "renderer", renderer);
+ }
- standardGlyphName = recoverGlyphName(glyphName, glyphsUnicodeMap);
- var unicodeOrCharCode;
+ exportData(extraProperties = false) {
+ const exportDataProperties = extraProperties ? [...EXPORT_DATA_PROPERTIES, ...EXPORT_DATA_EXTRA_PROPERTIES] : EXPORT_DATA_PROPERTIES;
+ const data = Object.create(null);
+ let property, value;
- if (cmapPlatformId === 3 && cmapEncodingId === 1) {
- unicodeOrCharCode = glyphsUnicodeMap[standardGlyphName];
- } else if (cmapPlatformId === 1 && cmapEncodingId === 0) {
- unicodeOrCharCode = _encodings.MacRomanEncoding.indexOf(standardGlyphName);
- }
+ for (property of exportDataProperties) {
+ value = this[property];
- for (let i = 0; i < cmapMappingsLength; ++i) {
- if (cmapMappings[i].charCode !== unicodeOrCharCode) {
- continue;
- }
+ if (value !== undefined) {
+ data[property] = value;
+ }
+ }
- charCodeToGlyphId[charCode] = cmapMappings[i].glyphId;
- break;
- }
- }
- } else if (cmapPlatformId === 0) {
- for (let i = 0; i < cmapMappingsLength; ++i) {
- charCodeToGlyphId[cmapMappings[i].charCode] = cmapMappings[i].glyphId;
+ return data;
+ }
+
+ fallbackToSystemFont(properties) {
+ this.missingFile = true;
+ const name = this.name;
+ const type = this.type;
+ const subtype = this.subtype;
+ let fontName = (0, _fonts_utils.normalizeFontName)(name);
+ const stdFontMap = (0, _standard_fonts.getStdFontMap)(),
+ nonStdFontMap = (0, _standard_fonts.getNonStdFontMap)();
+ const isStandardFont = !!stdFontMap[fontName];
+ const isMappedToStandardFont = !!(nonStdFontMap[fontName] && stdFontMap[nonStdFontMap[fontName]]);
+ fontName = stdFontMap[fontName] || nonStdFontMap[fontName] || fontName;
+ this.bold = fontName.search(/bold/gi) !== -1;
+ this.italic = fontName.search(/oblique/gi) !== -1 || fontName.search(/italic/gi) !== -1;
+ this.black = name.search(/Black/g) !== -1;
+ const isNarrow = name.search(/Narrow/g) !== -1;
+ this.remeasure = (!isStandardFont || isNarrow) && Object.keys(this.widths).length > 0;
+
+ if ((isStandardFont || isMappedToStandardFont) && type === "CIDFontType2" && this.cidEncoding.startsWith("Identity-")) {
+ const GlyphMapForStandardFonts = (0, _standard_fonts.getGlyphMapForStandardFonts)(),
+ cidToGidMap = properties.cidToGidMap;
+ const map = [];
+
+ for (const charCode in GlyphMapForStandardFonts) {
+ map[+charCode] = GlyphMapForStandardFonts[charCode];
+ }
+
+ if (/Arial-?Black/i.test(name)) {
+ const SupplementalGlyphMapForArialBlack = (0, _standard_fonts.getSupplementalGlyphMapForArialBlack)();
+
+ for (const charCode in SupplementalGlyphMapForArialBlack) {
+ map[+charCode] = SupplementalGlyphMapForArialBlack[charCode];
+ }
+ } else if (/Calibri/i.test(name)) {
+ const SupplementalGlyphMapForCalibri = (0, _standard_fonts.getSupplementalGlyphMapForCalibri)();
+
+ for (const charCode in SupplementalGlyphMapForCalibri) {
+ map[+charCode] = SupplementalGlyphMapForCalibri[charCode];
+ }
+ }
+
+ if (cidToGidMap) {
+ for (const charCode in map) {
+ const cid = map[charCode];
+
+ if (cidToGidMap[cid] !== undefined) {
+ map[+charCode] = cidToGidMap[cid];
}
- } else {
- for (let i = 0; i < cmapMappingsLength; ++i) {
- let charCode = cmapMappings[i].charCode;
+ }
+ }
- if (cmapPlatformId === 3 && charCode >= 0xf000 && charCode <= 0xf0ff) {
- charCode &= 0xff;
- }
+ const isIdentityUnicode = this.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap;
- charCodeToGlyphId[charCode] = cmapMappings[i].glyphId;
+ if (!isIdentityUnicode) {
+ this.toUnicode.forEach(function (charCode, unicodeCharCode) {
+ map[+charCode] = unicodeCharCode;
+ });
+ }
+
+ this.toFontChar = map;
+ this.toUnicode = new _to_unicode_map.ToUnicodeMap(map);
+ } else if (/Symbol/i.test(fontName)) {
+ this.toFontChar = buildToFontChar(_encodings.SymbolSetEncoding, (0, _glyphlist.getGlyphsUnicode)(), this.differences);
+ } else if (/Dingbats/i.test(fontName)) {
+ if (/Wingdings/i.test(name)) {
+ (0, _util.warn)("Non-embedded Wingdings font, falling back to ZapfDingbats.");
+ }
+
+ this.toFontChar = buildToFontChar(_encodings.ZapfDingbatsEncoding, (0, _glyphlist.getDingbatsGlyphsUnicode)(), this.differences);
+ } else if (isStandardFont) {
+ this.toFontChar = buildToFontChar(this.defaultEncoding, (0, _glyphlist.getGlyphsUnicode)(), this.differences);
+ } else {
+ const glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();
+ const map = [];
+ this.toUnicode.forEach((charCode, unicodeCharCode) => {
+ if (!this.composite) {
+ const glyphName = this.differences[charCode] || this.defaultEncoding[charCode];
+ const unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap);
+
+ if (unicode !== -1) {
+ unicodeCharCode = unicode;
}
}
- if (properties.glyphNames && baseEncoding.length) {
- for (let i = 0; i < 256; ++i) {
- if (charCodeToGlyphId[i] === undefined && baseEncoding[i]) {
- glyphName = baseEncoding[i];
- const glyphId = properties.glyphNames.indexOf(glyphName);
+ map[+charCode] = unicodeCharCode;
+ });
- if (glyphId > 0 && hasGlyph(glyphId)) {
- charCodeToGlyphId[i] = glyphId;
- }
- }
+ if (this.composite && this.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap) {
+ if (/Verdana/i.test(name)) {
+ const GlyphMapForStandardFonts = (0, _standard_fonts.getGlyphMapForStandardFonts)();
+
+ for (const charCode in GlyphMapForStandardFonts) {
+ map[+charCode] = GlyphMapForStandardFonts[charCode];
}
}
}
- if (charCodeToGlyphId.length === 0) {
- charCodeToGlyphId[0] = 0;
+ this.toFontChar = map;
+ }
+
+ amendFallbackToUnicode(properties);
+ this.loadedName = fontName.split("-")[0];
+ this.fontType = (0, _fonts_utils.getFontType)(type, subtype, properties.isStandardFont);
+ }
+
+ checkAndRepair(name, font, properties) {
+ const VALID_TABLES = ["OS/2", "cmap", "head", "hhea", "hmtx", "maxp", "name", "post", "loca", "glyf", "fpgm", "prep", "cvt ", "CFF "];
+
+ function readTables(file, numTables) {
+ const tables = Object.create(null);
+ tables["OS/2"] = null;
+ tables.cmap = null;
+ tables.head = null;
+ tables.hhea = null;
+ tables.hmtx = null;
+ tables.maxp = null;
+ tables.name = null;
+ tables.post = null;
+
+ for (let i = 0; i < numTables; i++) {
+ const table = readTableEntry(file);
+
+ if (!VALID_TABLES.includes(table.tag)) {
+ continue;
+ }
+
+ if (table.length === 0) {
+ continue;
+ }
+
+ tables[table.tag] = table;
}
- let glyphZeroId = numGlyphsOut - 1;
+ return tables;
+ }
+
+ function readTableEntry(file) {
+ const tag = file.getString(4);
+ const checksum = file.getInt32() >>> 0;
+ const offset = file.getInt32() >>> 0;
+ const length = file.getInt32() >>> 0;
+ const previousPosition = file.pos;
+ file.pos = file.start ? file.start : 0;
+ file.skip(offset);
+ const data = file.getBytes(length);
+ file.pos = previousPosition;
- if (!dupFirstEntry) {
- glyphZeroId = 0;
+ if (tag === "head") {
+ data[8] = data[9] = data[10] = data[11] = 0;
+ data[17] |= 0x20;
}
- var newMapping = adjustMapping(charCodeToGlyphId, hasGlyph, glyphZeroId);
- this.toFontChar = newMapping.toFontChar;
- tables.cmap = {
- tag: "cmap",
- data: createCmapTable(newMapping.charCodeToGlyphId, numGlyphsOut)
+ return {
+ tag,
+ checksum,
+ length,
+ offset,
+ data
};
+ }
- if (!tables["OS/2"] || !validateOS2Table(tables["OS/2"], font)) {
- tables["OS/2"] = {
- tag: "OS/2",
- data: createOS2Table(properties, newMapping.charCodeToGlyphId, metricsOverride)
- };
+ function readOpenTypeHeader(ttf) {
+ return {
+ version: ttf.getString(4),
+ numTables: ttf.getUint16(),
+ searchRange: ttf.getUint16(),
+ entrySelector: ttf.getUint16(),
+ rangeShift: ttf.getUint16()
+ };
+ }
+
+ function readTrueTypeCollectionHeader(ttc) {
+ const ttcTag = ttc.getString(4);
+ (0, _util.assert)(ttcTag === "ttcf", "Must be a TrueType Collection font.");
+ const majorVersion = ttc.getUint16();
+ const minorVersion = ttc.getUint16();
+ const numFonts = ttc.getInt32() >>> 0;
+ const offsetTable = [];
+
+ for (let i = 0; i < numFonts; i++) {
+ offsetTable.push(ttc.getInt32() >>> 0);
}
- if (!isTrueType) {
- try {
- cffFile = new _stream.Stream(tables["CFF "].data);
- var parser = new _cff_parser.CFFParser(cffFile, properties, SEAC_ANALYSIS_ENABLED);
- cff = parser.parse();
- cff.duplicateFirstGlyph();
- var compiler = new _cff_parser.CFFCompiler(cff);
- tables["CFF "].data = compiler.compile();
- } catch (e) {
- (0, _util.warn)("Failed to compile font " + properties.loadedName);
+ const header = {
+ ttcTag,
+ majorVersion,
+ minorVersion,
+ numFonts,
+ offsetTable
+ };
+
+ switch (majorVersion) {
+ case 1:
+ return header;
+
+ case 2:
+ header.dsigTag = ttc.getInt32() >>> 0;
+ header.dsigLength = ttc.getInt32() >>> 0;
+ header.dsigOffset = ttc.getInt32() >>> 0;
+ return header;
+ }
+
+ throw new _util.FormatError(`Invalid TrueType Collection majorVersion: ${majorVersion}.`);
+ }
+
+ function readTrueTypeCollectionData(ttc, fontName) {
+ const {
+ numFonts,
+ offsetTable
+ } = readTrueTypeCollectionHeader(ttc);
+ const fontNameParts = fontName.split("+");
+ let fallbackData;
+
+ for (let i = 0; i < numFonts; i++) {
+ ttc.pos = (ttc.start || 0) + offsetTable[i];
+ const potentialHeader = readOpenTypeHeader(ttc);
+ const potentialTables = readTables(ttc, potentialHeader.numTables);
+
+ if (!potentialTables.name) {
+ throw new _util.FormatError('TrueType Collection font must contain a "name" table.');
+ }
+
+ const nameTable = readNameTable(potentialTables.name);
+
+ for (let j = 0, jj = nameTable.length; j < jj; j++) {
+ for (let k = 0, kk = nameTable[j].length; k < kk; k++) {
+ const nameEntry = nameTable[j][k] && nameTable[j][k].replace(/\s/g, "");
+
+ if (!nameEntry) {
+ continue;
+ }
+
+ if (nameEntry === fontName) {
+ return {
+ header: potentialHeader,
+ tables: potentialTables
+ };
+ }
+
+ if (fontNameParts.length < 2) {
+ continue;
+ }
+
+ for (const part of fontNameParts) {
+ if (nameEntry === part) {
+ fallbackData = {
+ name: part,
+ header: potentialHeader,
+ tables: potentialTables
+ };
+ }
+ }
+ }
}
}
- if (!tables.name) {
- tables.name = {
- tag: "name",
- data: createNameTable(this.name)
+ if (fallbackData) {
+ (0, _util.warn)(`TrueType Collection does not contain "${fontName}" font, ` + `falling back to "${fallbackData.name}" font instead.`);
+ return {
+ header: fallbackData.header,
+ tables: fallbackData.tables
};
- } else {
- var namePrototype = readNameTable(tables.name);
- tables.name.data = createNameTable(name, namePrototype);
}
- var builder = new OpenTypeFileBuilder(header.version);
+ throw new _util.FormatError(`TrueType Collection does not contain "${fontName}" font.`);
+ }
- for (var tableTag in tables) {
- builder.addTable(tableTag, tables[tableTag].data);
+ function readCmapTable(cmap, file, isSymbolicFont, hasEncoding) {
+ if (!cmap) {
+ (0, _util.warn)("No cmap table available.");
+ return {
+ platformId: -1,
+ encodingId: -1,
+ mappings: [],
+ hasShortCmap: false
+ };
}
- return builder.toArray();
- },
- convert: function Font_convert(fontName, font, properties) {
- properties.fixedPitch = false;
+ let segment;
+ let start = (file.start ? file.start : 0) + cmap.offset;
+ file.pos = start;
+ file.skip(2);
+ const numTables = file.getUint16();
+ let potentialTable;
+ let canBreak = false;
- if (properties.builtInEncoding) {
- adjustToUnicode(properties, properties.builtInEncoding);
- }
+ for (let i = 0; i < numTables; i++) {
+ const platformId = file.getUint16();
+ const encodingId = file.getUint16();
+ const offset = file.getInt32() >>> 0;
+ let useTable = false;
- let glyphZeroId = 1;
+ if (potentialTable && potentialTable.platformId === platformId && potentialTable.encodingId === encodingId) {
+ continue;
+ }
- if (font instanceof CFFFont) {
- glyphZeroId = font.numGlyphs - 1;
- }
+ if (platformId === 0 && (encodingId === 0 || encodingId === 1 || encodingId === 3)) {
+ useTable = true;
+ } else if (platformId === 1 && encodingId === 0) {
+ useTable = true;
+ } else if (platformId === 3 && encodingId === 1 && (hasEncoding || !potentialTable)) {
+ useTable = true;
- var mapping = font.getGlyphMapping(properties);
- var newMapping = adjustMapping(mapping, font.hasGlyphId.bind(font), glyphZeroId);
- this.toFontChar = newMapping.toFontChar;
- var numGlyphs = font.numGlyphs;
+ if (!isSymbolicFont) {
+ canBreak = true;
+ }
+ } else if (isSymbolicFont && platformId === 3 && encodingId === 0) {
+ useTable = true;
+ let correctlySorted = true;
- function getCharCodes(charCodeToGlyphId, glyphId) {
- var charCodes = null;
+ if (i < numTables - 1) {
+ const nextBytes = file.peekBytes(2),
+ nextPlatformId = int16(nextBytes[0], nextBytes[1]);
- for (var charCode in charCodeToGlyphId) {
- if (glyphId === charCodeToGlyphId[charCode]) {
- if (!charCodes) {
- charCodes = [];
+ if (nextPlatformId < platformId) {
+ correctlySorted = false;
}
+ }
- charCodes.push(charCode | 0);
+ if (correctlySorted) {
+ canBreak = true;
}
}
- return charCodes;
- }
+ if (useTable) {
+ potentialTable = {
+ platformId,
+ encodingId,
+ offset
+ };
+ }
- function createCharCode(charCodeToGlyphId, glyphId) {
- for (var charCode in charCodeToGlyphId) {
- if (glyphId === charCodeToGlyphId[charCode]) {
- return charCode | 0;
- }
+ if (canBreak) {
+ break;
}
+ }
- newMapping.charCodeToGlyphId[newMapping.nextAvailableFontCharCode] = glyphId;
- return newMapping.nextAvailableFontCharCode++;
+ if (potentialTable) {
+ file.pos = start + potentialTable.offset;
}
- var seacs = font.seacs;
+ if (!potentialTable || file.peekByte() === -1) {
+ (0, _util.warn)("Could not find a preferred cmap table.");
+ return {
+ platformId: -1,
+ encodingId: -1,
+ mappings: [],
+ hasShortCmap: false
+ };
+ }
- if (SEAC_ANALYSIS_ENABLED && seacs && seacs.length) {
- var matrix = properties.fontMatrix || _util.FONT_IDENTITY_MATRIX;
- var charset = font.getCharset();
- var seacMap = Object.create(null);
+ const format = file.getUint16();
+ file.skip(2 + 2);
+ let hasShortCmap = false;
+ const mappings = [];
+ let j, glyphId;
- for (var glyphId in seacs) {
- glyphId |= 0;
- var seac = seacs[glyphId];
- var baseGlyphName = _encodings.StandardEncoding[seac[2]];
- var accentGlyphName = _encodings.StandardEncoding[seac[3]];
- var baseGlyphId = charset.indexOf(baseGlyphName);
- var accentGlyphId = charset.indexOf(accentGlyphName);
+ if (format === 0) {
+ for (j = 0; j < 256; j++) {
+ const index = file.getByte();
- if (baseGlyphId < 0 || accentGlyphId < 0) {
+ if (!index) {
continue;
}
- var accentOffset = {
- x: seac[0] * matrix[0] + seac[1] * matrix[2] + matrix[4],
- y: seac[0] * matrix[1] + seac[1] * matrix[3] + matrix[5]
- };
- var charCodes = getCharCodes(mapping, glyphId);
+ mappings.push({
+ charCode: j,
+ glyphId: index
+ });
+ }
- if (!charCodes) {
+ hasShortCmap = true;
+ } else if (format === 4) {
+ const segCount = file.getUint16() >> 1;
+ file.skip(6);
+ const segments = [];
+ let segIndex;
+
+ for (segIndex = 0; segIndex < segCount; segIndex++) {
+ segments.push({
+ end: file.getUint16()
+ });
+ }
+
+ file.skip(2);
+
+ for (segIndex = 0; segIndex < segCount; segIndex++) {
+ segments[segIndex].start = file.getUint16();
+ }
+
+ for (segIndex = 0; segIndex < segCount; segIndex++) {
+ segments[segIndex].delta = file.getUint16();
+ }
+
+ let offsetsCount = 0,
+ offsetIndex;
+
+ for (segIndex = 0; segIndex < segCount; segIndex++) {
+ segment = segments[segIndex];
+ const rangeOffset = file.getUint16();
+
+ if (!rangeOffset) {
+ segment.offsetIndex = -1;
continue;
}
- for (let i = 0, ii = charCodes.length; i < ii; i++) {
- var charCode = charCodes[i];
- var charCodeToGlyphId = newMapping.charCodeToGlyphId;
- var baseFontCharCode = createCharCode(charCodeToGlyphId, baseGlyphId);
- var accentFontCharCode = createCharCode(charCodeToGlyphId, accentGlyphId);
- seacMap[charCode] = {
- baseFontCharCode,
- accentFontCharCode,
- accentOffset
- };
+ offsetIndex = (rangeOffset >> 1) - (segCount - segIndex);
+ segment.offsetIndex = offsetIndex;
+ offsetsCount = Math.max(offsetsCount, offsetIndex + segment.end - segment.start + 1);
+ }
+
+ const offsets = [];
+
+ for (j = 0; j < offsetsCount; j++) {
+ offsets.push(file.getUint16());
+ }
+
+ for (segIndex = 0; segIndex < segCount; segIndex++) {
+ segment = segments[segIndex];
+ start = segment.start;
+ const end = segment.end;
+ const delta = segment.delta;
+ offsetIndex = segment.offsetIndex;
+
+ for (j = start; j <= end; j++) {
+ if (j === 0xffff) {
+ continue;
+ }
+
+ glyphId = offsetIndex < 0 ? j : offsets[offsetIndex + j - start];
+ glyphId = glyphId + delta & 0xffff;
+ mappings.push({
+ charCode: j,
+ glyphId
+ });
}
}
+ } else if (format === 6) {
+ const firstCode = file.getUint16();
+ const entryCount = file.getUint16();
- properties.seacMap = seacMap;
+ for (j = 0; j < entryCount; j++) {
+ glyphId = file.getUint16();
+ const charCode = firstCode + j;
+ mappings.push({
+ charCode,
+ glyphId
+ });
+ }
+ } else {
+ (0, _util.warn)("cmap table has unsupported format: " + format);
+ return {
+ platformId: -1,
+ encodingId: -1,
+ mappings: [],
+ hasShortCmap: false
+ };
}
- var unitsPerEm = 1 / (properties.fontMatrix || _util.FONT_IDENTITY_MATRIX)[0];
- var builder = new OpenTypeFileBuilder("\x4F\x54\x54\x4F");
- builder.addTable("CFF ", font.data);
- builder.addTable("OS/2", createOS2Table(properties, newMapping.charCodeToGlyphId));
- builder.addTable("cmap", createCmapTable(newMapping.charCodeToGlyphId, numGlyphs));
- builder.addTable("head", "\x00\x01\x00\x00" + "\x00\x00\x10\x00" + "\x00\x00\x00\x00" + "\x5F\x0F\x3C\xF5" + "\x00\x00" + safeString16(unitsPerEm) + "\x00\x00\x00\x00\x9e\x0b\x7e\x27" + "\x00\x00\x00\x00\x9e\x0b\x7e\x27" + "\x00\x00" + safeString16(properties.descent) + "\x0F\xFF" + safeString16(properties.ascent) + string16(properties.italicAngle ? 2 : 0) + "\x00\x11" + "\x00\x00" + "\x00\x00" + "\x00\x00");
- builder.addTable("hhea", "\x00\x01\x00\x00" + safeString16(properties.ascent) + safeString16(properties.descent) + "\x00\x00" + "\xFF\xFF" + "\x00\x00" + "\x00\x00" + "\x00\x00" + safeString16(properties.capHeight) + safeString16(Math.tan(properties.italicAngle) * properties.xHeight) + "\x00\x00" + "\x00\x00" + "\x00\x00" + "\x00\x00" + "\x00\x00" + "\x00\x00" + string16(numGlyphs));
- builder.addTable("hmtx", function fontFieldsHmtx() {
- var charstrings = font.charstrings;
- var cffWidths = font.cff ? font.cff.widths : null;
- var hmtx = "\x00\x00\x00\x00";
+ mappings.sort(function (a, b) {
+ return a.charCode - b.charCode;
+ });
- for (let i = 1, ii = numGlyphs; i < ii; i++) {
- var width = 0;
+ for (let i = 1; i < mappings.length; i++) {
+ if (mappings[i - 1].charCode === mappings[i].charCode) {
+ mappings.splice(i, 1);
+ i--;
+ }
+ }
- if (charstrings) {
- var charstring = charstrings[i - 1];
- width = "width" in charstring ? charstring.width : 0;
- } else if (cffWidths) {
- width = Math.ceil(cffWidths[i] || 0);
- }
+ return {
+ platformId: potentialTable.platformId,
+ encodingId: potentialTable.encodingId,
+ mappings,
+ hasShortCmap
+ };
+ }
- hmtx += string16(width) + string16(0);
+ function sanitizeMetrics(file, header, metrics, headTable, numGlyphs, dupFirstEntry) {
+ if (!header) {
+ if (metrics) {
+ metrics.data = null;
}
- return hmtx;
- }());
- builder.addTable("maxp", "\x00\x00\x50\x00" + string16(numGlyphs));
- builder.addTable("name", createNameTable(fontName));
- builder.addTable("post", createPostTable(properties));
- return builder.toArray();
- },
+ return;
+ }
- get spaceWidth() {
- var possibleSpaceReplacements = ["space", "minus", "one", "i", "I"];
- var width;
+ file.pos = (file.start ? file.start : 0) + header.offset;
+ file.pos += 4;
+ file.pos += 2;
+ file.pos += 2;
+ file.pos += 2;
+ file.pos += 2;
+ file.pos += 2;
+ file.pos += 2;
+ file.pos += 2;
+ file.pos += 2;
+ file.pos += 2;
+ const caretOffset = file.getUint16();
+ file.pos += 8;
+ file.pos += 2;
+ let numOfMetrics = file.getUint16();
- for (var i = 0, ii = possibleSpaceReplacements.length; i < ii; i++) {
- var glyphName = possibleSpaceReplacements[i];
+ if (caretOffset !== 0) {
+ const macStyle = int16(headTable.data[44], headTable.data[45]);
- if (glyphName in this.widths) {
- width = this.widths[glyphName];
- break;
+ if (!(macStyle & 2)) {
+ header.data[22] = 0;
+ header.data[23] = 0;
}
+ }
+
+ if (numOfMetrics > numGlyphs) {
+ (0, _util.info)(`The numOfMetrics (${numOfMetrics}) should not be ` + `greater than the numGlyphs (${numGlyphs}).`);
+ numOfMetrics = numGlyphs;
+ header.data[34] = (numOfMetrics & 0xff00) >> 8;
+ header.data[35] = numOfMetrics & 0x00ff;
+ }
- var glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();
- var glyphUnicode = glyphsUnicodeMap[glyphName];
- var charcode = 0;
+ const numOfSidebearings = numGlyphs - numOfMetrics;
+ const numMissing = numOfSidebearings - (metrics.length - numOfMetrics * 4 >> 1);
- if (this.composite && this.cMap.contains(glyphUnicode)) {
- charcode = this.cMap.lookup(glyphUnicode);
+ if (numMissing > 0) {
+ const entries = new Uint8Array(metrics.length + numMissing * 2);
+ entries.set(metrics.data);
+
+ if (dupFirstEntry) {
+ entries[metrics.length] = metrics.data[2];
+ entries[metrics.length + 1] = metrics.data[3];
}
- if (!charcode && this.toUnicode) {
- charcode = this.toUnicode.charCodeOf(glyphUnicode);
+ metrics.data = entries;
+ }
+ }
+
+ function sanitizeGlyph(source, sourceStart, sourceEnd, dest, destStart, hintsValid) {
+ const glyphProfile = {
+ length: 0,
+ sizeOfInstructions: 0
+ };
+
+ if (sourceEnd - sourceStart <= 12) {
+ return glyphProfile;
+ }
+
+ const glyf = source.subarray(sourceStart, sourceEnd);
+ let contoursCount = signedInt16(glyf[0], glyf[1]);
+
+ if (contoursCount < 0) {
+ contoursCount = -1;
+ writeSignedInt16(glyf, 0, contoursCount);
+ dest.set(glyf, destStart);
+ glyphProfile.length = glyf.length;
+ return glyphProfile;
+ }
+
+ let i,
+ j = 10,
+ flagsCount = 0;
+
+ for (i = 0; i < contoursCount; i++) {
+ const endPoint = glyf[j] << 8 | glyf[j + 1];
+ flagsCount = endPoint + 1;
+ j += 2;
+ }
+
+ const instructionsStart = j;
+ const instructionsLength = glyf[j] << 8 | glyf[j + 1];
+ glyphProfile.sizeOfInstructions = instructionsLength;
+ j += 2 + instructionsLength;
+ const instructionsEnd = j;
+ let coordinatesLength = 0;
+
+ for (i = 0; i < flagsCount; i++) {
+ const flag = glyf[j++];
+
+ if (flag & 0xc0) {
+ glyf[j - 1] = flag & 0x3f;
}
- if (charcode <= 0) {
- charcode = glyphUnicode;
+ let xLength = 2;
+
+ if (flag & 2) {
+ xLength = 1;
+ } else if (flag & 16) {
+ xLength = 0;
}
- width = this.widths[charcode];
+ let yLength = 2;
- if (width) {
- break;
+ if (flag & 4) {
+ yLength = 1;
+ } else if (flag & 32) {
+ yLength = 0;
}
- }
- width = width || this.defaultWidth;
- return (0, _util.shadow)(this, "spaceWidth", width);
- },
+ const xyLength = xLength + yLength;
+ coordinatesLength += xyLength;
- charToGlyph: function Font_charToGlyph(charcode, isSpace) {
- var fontCharCode, width, operatorListId;
- var widthCode = charcode;
+ if (flag & 8) {
+ const repeat = glyf[j++];
+ i += repeat;
+ coordinatesLength += repeat * xyLength;
+ }
+ }
- if (this.cMap && this.cMap.contains(charcode)) {
- widthCode = this.cMap.lookup(charcode);
+ if (coordinatesLength === 0) {
+ return glyphProfile;
}
- width = this.widths[widthCode];
- width = (0, _util.isNum)(width) ? width : this.defaultWidth;
- var vmetric = this.vmetrics && this.vmetrics[widthCode];
- let unicode = this.toUnicode.get(charcode) || this.fallbackToUnicode.get(charcode) || charcode;
+ let glyphDataLength = j + coordinatesLength;
- if (typeof unicode === "number") {
- unicode = String.fromCharCode(unicode);
+ if (glyphDataLength > glyf.length) {
+ return glyphProfile;
}
- var isInFont = (charcode in this.toFontChar);
- fontCharCode = this.toFontChar[charcode] || charcode;
+ if (!hintsValid && instructionsLength > 0) {
+ dest.set(glyf.subarray(0, instructionsStart), destStart);
+ dest.set([0, 0], destStart + instructionsStart);
+ dest.set(glyf.subarray(instructionsEnd, glyphDataLength), destStart + instructionsStart + 2);
+ glyphDataLength -= instructionsLength;
- if (this.missingFile) {
- const glyphName = this.differences[charcode] || this.defaultEncoding[charcode];
-
- if ((glyphName === ".notdef" || glyphName === "") && this.type === "Type1") {
- fontCharCode = 0x20;
+ if (glyf.length - glyphDataLength > 3) {
+ glyphDataLength = glyphDataLength + 3 & ~3;
}
- fontCharCode = (0, _unicode.mapSpecialUnicodeValues)(fontCharCode);
+ glyphProfile.length = glyphDataLength;
+ return glyphProfile;
}
- if (this.isType3Font) {
- operatorListId = fontCharCode;
+ if (glyf.length - glyphDataLength > 3) {
+ glyphDataLength = glyphDataLength + 3 & ~3;
+ dest.set(glyf.subarray(0, glyphDataLength), destStart);
+ glyphProfile.length = glyphDataLength;
+ return glyphProfile;
}
- var accent = null;
+ dest.set(glyf, destStart);
+ glyphProfile.length = glyf.length;
+ return glyphProfile;
+ }
+
+ function sanitizeHead(head, numGlyphs, locaLength) {
+ const data = head.data;
+ const version = int32(data[0], data[1], data[2], data[3]);
- if (this.seacMap && this.seacMap[charcode]) {
- isInFont = true;
- var seac = this.seacMap[charcode];
- fontCharCode = seac.baseFontCharCode;
- accent = {
- fontChar: String.fromCodePoint(seac.accentFontCharCode),
- offset: seac.accentOffset
- };
+ if (version >> 16 !== 1) {
+ (0, _util.info)("Attempting to fix invalid version in head table: " + version);
+ data[0] = 0;
+ data[1] = 1;
+ data[2] = 0;
+ data[3] = 0;
}
- let fontChar = "";
+ const indexToLocFormat = int16(data[50], data[51]);
- if (typeof fontCharCode === "number") {
- if (fontCharCode <= 0x10ffff) {
- fontChar = String.fromCodePoint(fontCharCode);
+ if (indexToLocFormat < 0 || indexToLocFormat > 1) {
+ (0, _util.info)("Attempting to fix invalid indexToLocFormat in head table: " + indexToLocFormat);
+ const numGlyphsPlusOne = numGlyphs + 1;
+
+ if (locaLength === numGlyphsPlusOne << 1) {
+ data[50] = 0;
+ data[51] = 0;
+ } else if (locaLength === numGlyphsPlusOne << 2) {
+ data[50] = 0;
+ data[51] = 1;
} else {
- (0, _util.warn)(`charToGlyph - invalid fontCharCode: ${fontCharCode}`);
+ throw new _util.FormatError("Could not fix indexToLocFormat: " + indexToLocFormat);
}
}
+ }
+
+ function sanitizeGlyphLocations(loca, glyf, numGlyphs, isGlyphLocationsLong, hintsValid, dupFirstEntry, maxSizeOfInstructions) {
+ let itemSize, itemDecode, itemEncode;
+
+ if (isGlyphLocationsLong) {
+ itemSize = 4;
- var glyph = this.glyphCache[charcode];
+ itemDecode = function fontItemDecodeLong(data, offset) {
+ return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3];
+ };
+
+ itemEncode = function fontItemEncodeLong(data, offset, value) {
+ data[offset] = value >>> 24 & 0xff;
+ data[offset + 1] = value >> 16 & 0xff;
+ data[offset + 2] = value >> 8 & 0xff;
+ data[offset + 3] = value & 0xff;
+ };
+ } else {
+ itemSize = 2;
- if (!glyph || !glyph.matchesForCache(fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont)) {
- glyph = new Glyph(fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont);
- this.glyphCache[charcode] = glyph;
+ itemDecode = function fontItemDecode(data, offset) {
+ return data[offset] << 9 | data[offset + 1] << 1;
+ };
+
+ itemEncode = function fontItemEncode(data, offset, value) {
+ data[offset] = value >> 9 & 0xff;
+ data[offset + 1] = value >> 1 & 0xff;
+ };
}
- return glyph;
- },
- charsToGlyphs: function Font_charsToGlyphs(chars) {
- var charsCache = this.charsCache;
- var glyphs, glyph, charcode;
+ const numGlyphsOut = dupFirstEntry ? numGlyphs + 1 : numGlyphs;
+ const locaDataSize = itemSize * (1 + numGlyphsOut);
+ const locaData = new Uint8Array(locaDataSize);
+ locaData.set(loca.data.subarray(0, locaDataSize));
+ loca.data = locaData;
+ const oldGlyfData = glyf.data;
+ const oldGlyfDataLength = oldGlyfData.length;
+ const newGlyfData = new Uint8Array(oldGlyfDataLength);
+ let i, j;
+ const locaEntries = [];
- if (charsCache) {
- glyphs = charsCache[chars];
+ for (i = 0, j = 0; i < numGlyphs + 1; i++, j += itemSize) {
+ let offset = itemDecode(locaData, j);
- if (glyphs) {
- return glyphs;
+ if (offset > oldGlyfDataLength) {
+ offset = oldGlyfDataLength;
}
+
+ locaEntries.push({
+ index: i,
+ offset,
+ endOffset: 0
+ });
}
- if (!charsCache) {
- charsCache = this.charsCache = Object.create(null);
+ locaEntries.sort((a, b) => {
+ return a.offset - b.offset;
+ });
+
+ for (i = 0; i < numGlyphs; i++) {
+ locaEntries[i].endOffset = locaEntries[i + 1].offset;
}
- glyphs = [];
- var charsCacheKey = chars;
- var i = 0,
- ii;
+ locaEntries.sort((a, b) => {
+ return a.index - b.index;
+ });
+ const missingGlyphs = Object.create(null);
+ let writeOffset = 0;
+ itemEncode(locaData, 0, writeOffset);
- if (this.cMap) {
- var c = Object.create(null);
+ for (i = 0, j = itemSize; i < numGlyphs; i++, j += itemSize) {
+ const glyphProfile = sanitizeGlyph(oldGlyfData, locaEntries[i].offset, locaEntries[i].endOffset, newGlyfData, writeOffset, hintsValid);
+ const newLength = glyphProfile.length;
- while (i < chars.length) {
- this.cMap.readCharCode(chars, i, c);
- charcode = c.charcode;
- var length = c.length;
- i += length;
- var isSpace = length === 1 && chars.charCodeAt(i - 1) === 0x20;
- glyph = this.charToGlyph(charcode, isSpace);
- glyphs.push(glyph);
+ if (newLength === 0) {
+ missingGlyphs[i] = true;
}
- } else {
- for (i = 0, ii = chars.length; i < ii; ++i) {
- charcode = chars.charCodeAt(i);
- glyph = this.charToGlyph(charcode, charcode === 0x20);
- glyphs.push(glyph);
+
+ if (glyphProfile.sizeOfInstructions > maxSizeOfInstructions) {
+ maxSizeOfInstructions = glyphProfile.sizeOfInstructions;
}
- }
- return charsCache[charsCacheKey] = glyphs;
- },
+ writeOffset += newLength;
+ itemEncode(locaData, j, writeOffset);
+ }
- get glyphCacheValues() {
- return Object.values(this.glyphCache);
- }
+ if (writeOffset === 0) {
+ const simpleGlyph = new Uint8Array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0]);
- };
- return Font;
-}();
+ for (i = 0, j = itemSize; i < numGlyphsOut; i++, j += itemSize) {
+ itemEncode(locaData, j, simpleGlyph.length);
+ }
-exports.Font = Font;
+ glyf.data = simpleGlyph;
+ } else if (dupFirstEntry) {
+ const firstEntryLength = itemDecode(locaData, itemSize);
-var ErrorFont = function ErrorFontClosure() {
- function ErrorFont(error) {
- this.error = error;
- this.loadedName = "g_font_error";
- this.missingFile = true;
- }
+ if (newGlyfData.length > firstEntryLength + writeOffset) {
+ glyf.data = newGlyfData.subarray(0, firstEntryLength + writeOffset);
+ } else {
+ glyf.data = new Uint8Array(firstEntryLength + writeOffset);
+ glyf.data.set(newGlyfData.subarray(0, writeOffset));
+ }
- ErrorFont.prototype = {
- charsToGlyphs: function ErrorFont_charsToGlyphs() {
- return [];
- },
+ glyf.data.set(newGlyfData.subarray(0, firstEntryLength), writeOffset);
+ itemEncode(loca.data, locaData.length - itemSize, writeOffset + firstEntryLength);
+ } else {
+ glyf.data = newGlyfData.subarray(0, writeOffset);
+ }
- exportData(extraProperties = false) {
return {
- error: this.error
+ missingGlyphs,
+ maxSizeOfInstructions
};
}
- };
- return ErrorFont;
-}();
+ function readPostScriptTable(post, propertiesObj, maxpNumGlyphs) {
+ const start = (font.start ? font.start : 0) + post.offset;
+ font.pos = start;
+ const length = post.length,
+ end = start + length;
+ const version = font.getInt32();
+ font.skip(28);
+ let glyphNames;
+ let valid = true;
+ let i;
+
+ switch (version) {
+ case 0x00010000:
+ glyphNames = _fonts_utils.MacStandardGlyphOrdering;
+ break;
-exports.ErrorFont = ErrorFont;
+ case 0x00020000:
+ const numGlyphs = font.getUint16();
-function type1FontGlyphMapping(properties, builtInEncoding, glyphNames) {
- var charCodeToGlyphId = Object.create(null);
- var glyphId, charCode, baseEncoding;
- var isSymbolicFont = !!(properties.flags & FontFlags.Symbolic);
+ if (numGlyphs !== maxpNumGlyphs) {
+ valid = false;
+ break;
+ }
- if (properties.baseEncodingName) {
- baseEncoding = (0, _encodings.getEncoding)(properties.baseEncodingName);
+ const glyphNameIndexes = [];
- for (charCode = 0; charCode < baseEncoding.length; charCode++) {
- glyphId = glyphNames.indexOf(baseEncoding[charCode]);
+ for (i = 0; i < numGlyphs; ++i) {
+ const index = font.getUint16();
- if (glyphId >= 0) {
- charCodeToGlyphId[charCode] = glyphId;
- } else {
- charCodeToGlyphId[charCode] = 0;
+ if (index >= 32768) {
+ valid = false;
+ break;
+ }
+
+ glyphNameIndexes.push(index);
+ }
+
+ if (!valid) {
+ break;
+ }
+
+ const customNames = [],
+ strBuf = [];
+
+ while (font.pos < end) {
+ const stringLength = font.getByte();
+ strBuf.length = stringLength;
+
+ for (i = 0; i < stringLength; ++i) {
+ strBuf[i] = String.fromCharCode(font.getByte());
+ }
+
+ customNames.push(strBuf.join(""));
+ }
+
+ glyphNames = [];
+
+ for (i = 0; i < numGlyphs; ++i) {
+ const j = glyphNameIndexes[i];
+
+ if (j < 258) {
+ glyphNames.push(_fonts_utils.MacStandardGlyphOrdering[j]);
+ continue;
+ }
+
+ glyphNames.push(customNames[j - 258]);
+ }
+
+ break;
+
+ case 0x00030000:
+ break;
+
+ default:
+ (0, _util.warn)("Unknown/unsupported post table version " + version);
+ valid = false;
+
+ if (propertiesObj.defaultEncoding) {
+ glyphNames = propertiesObj.defaultEncoding;
+ }
+
+ break;
}
+
+ propertiesObj.glyphNames = glyphNames;
+ return valid;
}
- } else if (isSymbolicFont) {
- for (charCode in builtInEncoding) {
- charCodeToGlyphId[charCode] = builtInEncoding[charCode];
- }
- } else {
- baseEncoding = _encodings.StandardEncoding;
- for (charCode = 0; charCode < baseEncoding.length; charCode++) {
- glyphId = glyphNames.indexOf(baseEncoding[charCode]);
+ function readNameTable(nameTable) {
+ const start = (font.start ? font.start : 0) + nameTable.offset;
+ font.pos = start;
+ const names = [[], []];
+ const length = nameTable.length,
+ end = start + length;
+ const format = font.getUint16();
+ const FORMAT_0_HEADER_LENGTH = 6;
- if (glyphId >= 0) {
- charCodeToGlyphId[charCode] = glyphId;
- } else {
- charCodeToGlyphId[charCode] = 0;
+ if (format !== 0 || length < FORMAT_0_HEADER_LENGTH) {
+ return names;
+ }
+
+ const numRecords = font.getUint16();
+ const stringsStart = font.getUint16();
+ const records = [];
+ const NAME_RECORD_LENGTH = 12;
+ let i, ii;
+
+ for (i = 0; i < numRecords && font.pos + NAME_RECORD_LENGTH <= end; i++) {
+ const r = {
+ platform: font.getUint16(),
+ encoding: font.getUint16(),
+ language: font.getUint16(),
+ name: font.getUint16(),
+ length: font.getUint16(),
+ offset: font.getUint16()
+ };
+
+ if (r.platform === 1 && r.encoding === 0 && r.language === 0 || r.platform === 3 && r.encoding === 1 && r.language === 0x409) {
+ records.push(r);
+ }
+ }
+
+ for (i = 0, ii = records.length; i < ii; i++) {
+ const record = records[i];
+
+ if (record.length <= 0) {
+ continue;
+ }
+
+ const pos = start + stringsStart + record.offset;
+
+ if (pos + record.length > end) {
+ continue;
+ }
+
+ font.pos = pos;
+ const nameIndex = record.name;
+
+ if (record.encoding) {
+ let str = "";
+
+ for (let j = 0, jj = record.length; j < jj; j += 2) {
+ str += String.fromCharCode(font.getUint16());
+ }
+
+ names[1][nameIndex] = str;
+ } else {
+ names[0][nameIndex] = font.getString(record.length);
+ }
}
+
+ return names;
}
- }
- var differences = properties.differences,
- glyphsUnicodeMap;
+ const TTOpsStackDeltas = [0, 0, 0, 0, 0, 0, 0, 0, -2, -2, -2, -2, 0, 0, -2, -5, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, -1, -1, 1, -1, -999, 0, 1, 0, -1, -2, 0, -1, -2, -1, -1, 0, -1, -1, 0, 0, -999, -999, -1, -1, -1, -1, -2, -999, -2, -2, -999, 0, -2, -2, 0, 0, -2, 0, -2, 0, 0, 0, -2, -1, -1, 1, 1, 0, 0, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, 0, -999, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, -999, -999, -999, -999, -999, -1, -1, -2, -2, 0, 0, 0, 0, -1, -1, -999, -2, -2, 0, 0, -1, -2, -2, 0, 0, 0, -1, -1, -1, -2];
- if (differences) {
- for (charCode in differences) {
- var glyphName = differences[charCode];
- glyphId = glyphNames.indexOf(glyphName);
+ function sanitizeTTProgram(table, ttContext) {
+ let data = table.data;
+ let i = 0,
+ j,
+ n,
+ b,
+ funcId,
+ pc,
+ lastEndf = 0,
+ lastDeff = 0;
+ const stack = [];
+ const callstack = [];
+ const functionsCalled = [];
+ let tooComplexToFollowFunctions = ttContext.tooComplexToFollowFunctions;
+ let inFDEF = false,
+ ifLevel = 0,
+ inELSE = 0;
+
+ for (let ii = data.length; i < ii;) {
+ const op = data[i++];
+
+ if (op === 0x40) {
+ n = data[i++];
+
+ if (inFDEF || inELSE) {
+ i += n;
+ } else {
+ for (j = 0; j < n; j++) {
+ stack.push(data[i++]);
+ }
+ }
+ } else if (op === 0x41) {
+ n = data[i++];
- if (glyphId === -1) {
- if (!glyphsUnicodeMap) {
- glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();
+ if (inFDEF || inELSE) {
+ i += n * 2;
+ } else {
+ for (j = 0; j < n; j++) {
+ b = data[i++];
+ stack.push(b << 8 | data[i++]);
+ }
+ }
+ } else if ((op & 0xf8) === 0xb0) {
+ n = op - 0xb0 + 1;
+
+ if (inFDEF || inELSE) {
+ i += n;
+ } else {
+ for (j = 0; j < n; j++) {
+ stack.push(data[i++]);
+ }
+ }
+ } else if ((op & 0xf8) === 0xb8) {
+ n = op - 0xb8 + 1;
+
+ if (inFDEF || inELSE) {
+ i += n * 2;
+ } else {
+ for (j = 0; j < n; j++) {
+ b = data[i++];
+ stack.push(b << 8 | data[i++]);
+ }
+ }
+ } else if (op === 0x2b && !tooComplexToFollowFunctions) {
+ if (!inFDEF && !inELSE) {
+ funcId = stack[stack.length - 1];
+
+ if (isNaN(funcId)) {
+ (0, _util.info)("TT: CALL empty stack (or invalid entry).");
+ } else {
+ ttContext.functionsUsed[funcId] = true;
+
+ if (funcId in ttContext.functionsStackDeltas) {
+ const newStackLength = stack.length + ttContext.functionsStackDeltas[funcId];
+
+ if (newStackLength < 0) {
+ (0, _util.warn)("TT: CALL invalid functions stack delta.");
+ ttContext.hintsValid = false;
+ return;
+ }
+
+ stack.length = newStackLength;
+ } else if (funcId in ttContext.functionsDefined && !functionsCalled.includes(funcId)) {
+ callstack.push({
+ data,
+ i,
+ stackTop: stack.length - 1
+ });
+ functionsCalled.push(funcId);
+ pc = ttContext.functionsDefined[funcId];
+
+ if (!pc) {
+ (0, _util.warn)("TT: CALL non-existent function");
+ ttContext.hintsValid = false;
+ return;
+ }
+
+ data = pc.data;
+ i = pc.i;
+ }
+ }
+ }
+ } else if (op === 0x2c && !tooComplexToFollowFunctions) {
+ if (inFDEF || inELSE) {
+ (0, _util.warn)("TT: nested FDEFs not allowed");
+ tooComplexToFollowFunctions = true;
+ }
+
+ inFDEF = true;
+ lastDeff = i;
+ funcId = stack.pop();
+ ttContext.functionsDefined[funcId] = {
+ data,
+ i
+ };
+ } else if (op === 0x2d) {
+ if (inFDEF) {
+ inFDEF = false;
+ lastEndf = i;
+ } else {
+ pc = callstack.pop();
+
+ if (!pc) {
+ (0, _util.warn)("TT: ENDF bad stack");
+ ttContext.hintsValid = false;
+ return;
+ }
+
+ funcId = functionsCalled.pop();
+ data = pc.data;
+ i = pc.i;
+ ttContext.functionsStackDeltas[funcId] = stack.length - pc.stackTop;
+ }
+ } else if (op === 0x89) {
+ if (inFDEF || inELSE) {
+ (0, _util.warn)("TT: nested IDEFs not allowed");
+ tooComplexToFollowFunctions = true;
+ }
+
+ inFDEF = true;
+ lastDeff = i;
+ } else if (op === 0x58) {
+ ++ifLevel;
+ } else if (op === 0x1b) {
+ inELSE = ifLevel;
+ } else if (op === 0x59) {
+ if (inELSE === ifLevel) {
+ inELSE = 0;
+ }
+
+ --ifLevel;
+ } else if (op === 0x1c) {
+ if (!inFDEF && !inELSE) {
+ const offset = stack[stack.length - 1];
+
+ if (offset > 0) {
+ i += offset - 1;
+ }
+ }
}
- var standardGlyphName = recoverGlyphName(glyphName, glyphsUnicodeMap);
+ if (!inFDEF && !inELSE) {
+ let stackDelta = 0;
- if (standardGlyphName !== glyphName) {
- glyphId = glyphNames.indexOf(standardGlyphName);
+ if (op <= 0x8e) {
+ stackDelta = TTOpsStackDeltas[op];
+ } else if (op >= 0xc0 && op <= 0xdf) {
+ stackDelta = -1;
+ } else if (op >= 0xe0) {
+ stackDelta = -2;
+ }
+
+ if (op >= 0x71 && op <= 0x75) {
+ n = stack.pop();
+
+ if (!isNaN(n)) {
+ stackDelta = -n * 2;
+ }
+ }
+
+ while (stackDelta < 0 && stack.length > 0) {
+ stack.pop();
+ stackDelta++;
+ }
+
+ while (stackDelta > 0) {
+ stack.push(NaN);
+ stackDelta--;
+ }
}
}
- if (glyphId >= 0) {
- charCodeToGlyphId[charCode] = glyphId;
- } else {
- charCodeToGlyphId[charCode] = 0;
+ ttContext.tooComplexToFollowFunctions = tooComplexToFollowFunctions;
+ const content = [data];
+
+ if (i > data.length) {
+ content.push(new Uint8Array(i - data.length));
+ }
+
+ if (lastDeff > lastEndf) {
+ (0, _util.warn)("TT: complementing a missing function tail");
+ content.push(new Uint8Array([0x22, 0x2d]));
}
+
+ foldTTTable(table, content);
}
- }
- return charCodeToGlyphId;
-}
+ function checkInvalidFunctions(ttContext, maxFunctionDefs) {
+ if (ttContext.tooComplexToFollowFunctions) {
+ return;
+ }
-var Type1Font = function Type1FontClosure() {
- function findBlock(streamBytes, signature, startIndex) {
- var streamBytesLength = streamBytes.length;
- var signatureLength = signature.length;
- var scanLength = streamBytesLength - signatureLength;
- var i = startIndex,
- j,
- found = false;
+ if (ttContext.functionsDefined.length > maxFunctionDefs) {
+ (0, _util.warn)("TT: more functions defined than expected");
+ ttContext.hintsValid = false;
+ return;
+ }
- while (i < scanLength) {
- j = 0;
+ for (let j = 0, jj = ttContext.functionsUsed.length; j < jj; j++) {
+ if (j > maxFunctionDefs) {
+ (0, _util.warn)("TT: invalid function id: " + j);
+ ttContext.hintsValid = false;
+ return;
+ }
- while (j < signatureLength && streamBytes[i + j] === signature[j]) {
- j++;
+ if (ttContext.functionsUsed[j] && !ttContext.functionsDefined[j]) {
+ (0, _util.warn)("TT: undefined function: " + j);
+ ttContext.hintsValid = false;
+ return;
+ }
}
+ }
- if (j >= signatureLength) {
- i += j;
+ function foldTTTable(table, content) {
+ if (content.length > 1) {
+ let newLength = 0;
+ let j, jj;
- while (i < streamBytesLength && (0, _core_utils.isWhiteSpace)(streamBytes[i])) {
- i++;
+ for (j = 0, jj = content.length; j < jj; j++) {
+ newLength += content[j].length;
}
- found = true;
- break;
- }
+ newLength = newLength + 3 & ~3;
+ const result = new Uint8Array(newLength);
+ let pos = 0;
- i++;
+ for (j = 0, jj = content.length; j < jj; j++) {
+ result.set(content[j], pos);
+ pos += content[j].length;
+ }
+
+ table.data = result;
+ table.length = newLength;
+ }
}
- return {
- found,
- length: i
- };
- }
+ function sanitizeTTPrograms(fpgm, prep, cvt, maxFunctionDefs) {
+ const ttContext = {
+ functionsDefined: [],
+ functionsUsed: [],
+ functionsStackDeltas: [],
+ tooComplexToFollowFunctions: false,
+ hintsValid: true
+ };
- function getHeaderBlock(stream, suggestedLength) {
- var EEXEC_SIGNATURE = [0x65, 0x65, 0x78, 0x65, 0x63];
- var streamStartPos = stream.pos;
- var headerBytes, headerBytesLength, block;
+ if (fpgm) {
+ sanitizeTTProgram(fpgm, ttContext);
+ }
- try {
- headerBytes = stream.getBytes(suggestedLength);
- headerBytesLength = headerBytes.length;
- } catch (ex) {
- if (ex instanceof _core_utils.MissingDataException) {
- throw ex;
+ if (prep) {
+ sanitizeTTProgram(prep, ttContext);
+ }
+
+ if (fpgm) {
+ checkInvalidFunctions(ttContext, maxFunctionDefs);
}
+
+ if (cvt && cvt.length & 1) {
+ const cvtData = new Uint8Array(cvt.length + 1);
+ cvtData.set(cvt.data);
+ cvt.data = cvtData;
+ }
+
+ return ttContext.hintsValid;
}
- if (headerBytesLength === suggestedLength) {
- block = findBlock(headerBytes, EEXEC_SIGNATURE, suggestedLength - 2 * EEXEC_SIGNATURE.length);
+ font = new _stream.Stream(new Uint8Array(font.getBytes()));
+ let header, tables;
- if (block.found && block.length === suggestedLength) {
- return {
- stream: new _stream.Stream(headerBytes),
- length: suggestedLength
+ if (isTrueTypeCollectionFile(font)) {
+ const ttcData = readTrueTypeCollectionData(font, this.name);
+ header = ttcData.header;
+ tables = ttcData.tables;
+ } else {
+ header = readOpenTypeHeader(font);
+ tables = readTables(font, header.numTables);
+ }
+
+ let cff, cffFile;
+ const isTrueType = !tables["CFF "];
+
+ if (!isTrueType) {
+ const isComposite = properties.composite && ((properties.cidToGidMap || []).length > 0 || !(properties.cMap instanceof _cmap.IdentityCMap));
+
+ if (header.version === "OTTO" && !isComposite || !tables.head || !tables.hhea || !tables.maxp || !tables.post) {
+ cffFile = new _stream.Stream(tables["CFF "].data);
+ cff = new _cff_font.CFFFont(cffFile, properties);
+ adjustWidths(properties);
+ return this.convert(name, cff, properties);
+ }
+
+ delete tables.glyf;
+ delete tables.loca;
+ delete tables.fpgm;
+ delete tables.prep;
+ delete tables["cvt "];
+ this.isOpenType = true;
+ } else {
+ if (!tables.loca) {
+ throw new _util.FormatError('Required "loca" table is not found');
+ }
+
+ if (!tables.glyf) {
+ (0, _util.warn)('Required "glyf" table is not found -- trying to recover.');
+ tables.glyf = {
+ tag: "glyf",
+ data: new Uint8Array(0)
};
}
+
+ this.isOpenType = false;
+ }
+
+ if (!tables.maxp) {
+ throw new _util.FormatError('Required "maxp" table is not found');
}
- (0, _util.warn)('Invalid "Length1" property in Type1 font -- trying to recover.');
- stream.pos = streamStartPos;
- var SCAN_BLOCK_LENGTH = 2048;
- var actualLength;
+ font.pos = (font.start || 0) + tables.maxp.offset;
+ const version = font.getInt32();
+ const numGlyphs = font.getUint16();
- while (true) {
- var scanBytes = stream.peekBytes(SCAN_BLOCK_LENGTH);
- block = findBlock(scanBytes, EEXEC_SIGNATURE, 0);
+ if (properties.scaleFactors && properties.scaleFactors.length === numGlyphs && isTrueType) {
+ const {
+ scaleFactors
+ } = properties;
+ const isGlyphLocationsLong = int16(tables.head.data[50], tables.head.data[51]);
+ const glyphs = new _glyf.GlyfTable({
+ glyfTable: tables.glyf.data,
+ isGlyphLocationsLong,
+ locaTable: tables.loca.data,
+ numGlyphs
+ });
+ glyphs.scale(scaleFactors);
+ const {
+ glyf,
+ loca,
+ isLocationLong
+ } = glyphs.write();
+ tables.glyf.data = glyf;
+ tables.loca.data = loca;
- if (block.length === 0) {
- break;
+ if (isLocationLong !== !!isGlyphLocationsLong) {
+ tables.head.data[50] = 0;
+ tables.head.data[51] = isLocationLong ? 1 : 0;
}
- stream.pos += block.length;
+ const metrics = tables.hmtx.data;
- if (block.found) {
- actualLength = stream.pos - streamStartPos;
- break;
+ for (let i = 0; i < numGlyphs; i++) {
+ const j = 4 * i;
+ const advanceWidth = Math.round(scaleFactors[i] * int16(metrics[j], metrics[j + 1]));
+ metrics[j] = advanceWidth >> 8 & 0xff;
+ metrics[j + 1] = advanceWidth & 0xff;
+ const lsb = Math.round(scaleFactors[i] * signedInt16(metrics[j + 2], metrics[j + 3]));
+ writeSignedInt16(metrics, j + 2, lsb);
}
}
- stream.pos = streamStartPos;
+ let numGlyphsOut = numGlyphs + 1;
+ let dupFirstEntry = true;
- if (actualLength) {
- return {
- stream: new _stream.Stream(stream.getBytes(actualLength)),
- length: actualLength
- };
+ if (numGlyphsOut > 0xffff) {
+ dupFirstEntry = false;
+ numGlyphsOut = numGlyphs;
+ (0, _util.warn)("Not enough space in glyfs to duplicate first glyph.");
}
- (0, _util.warn)('Unable to recover "Length1" property in Type1 font -- using as is.');
- return {
- stream: new _stream.Stream(stream.getBytes(suggestedLength)),
- length: suggestedLength
- };
- }
+ let maxFunctionDefs = 0;
+ let maxSizeOfInstructions = 0;
- function getEexecBlock(stream, suggestedLength) {
- var eexecBytes = stream.getBytes();
- return {
- stream: new _stream.Stream(eexecBytes),
- length: eexecBytes.length
- };
- }
+ if (version >= 0x00010000 && tables.maxp.length >= 22) {
+ font.pos += 8;
+ const maxZones = font.getUint16();
- function Type1Font(name, file, properties) {
- var PFB_HEADER_SIZE = 6;
- var headerBlockLength = properties.length1;
- var eexecBlockLength = properties.length2;
- var pfbHeader = file.peekBytes(PFB_HEADER_SIZE);
- var pfbHeaderPresent = pfbHeader[0] === 0x80 && pfbHeader[1] === 0x01;
+ if (maxZones > 2) {
+ tables.maxp.data[14] = 0;
+ tables.maxp.data[15] = 2;
+ }
- if (pfbHeaderPresent) {
- file.skip(PFB_HEADER_SIZE);
- headerBlockLength = pfbHeader[5] << 24 | pfbHeader[4] << 16 | pfbHeader[3] << 8 | pfbHeader[2];
+ font.pos += 4;
+ maxFunctionDefs = font.getUint16();
+ font.pos += 4;
+ maxSizeOfInstructions = font.getUint16();
}
- var headerBlock = getHeaderBlock(file, headerBlockLength);
- var headerBlockParser = new _type1_parser.Type1Parser(headerBlock.stream, false, SEAC_ANALYSIS_ENABLED);
- headerBlockParser.extractFontHeader(properties);
+ tables.maxp.data[4] = numGlyphsOut >> 8;
+ tables.maxp.data[5] = numGlyphsOut & 255;
+ const hintsValid = sanitizeTTPrograms(tables.fpgm, tables.prep, tables["cvt "], maxFunctionDefs);
- if (pfbHeaderPresent) {
- pfbHeader = file.getBytes(PFB_HEADER_SIZE);
- eexecBlockLength = pfbHeader[5] << 24 | pfbHeader[4] << 16 | pfbHeader[3] << 8 | pfbHeader[2];
+ if (!hintsValid) {
+ delete tables.fpgm;
+ delete tables.prep;
+ delete tables["cvt "];
}
- var eexecBlock = getEexecBlock(file, eexecBlockLength);
- var eexecBlockParser = new _type1_parser.Type1Parser(eexecBlock.stream, true, SEAC_ANALYSIS_ENABLED);
- var data = eexecBlockParser.extractFontProgram(properties);
+ sanitizeMetrics(font, tables.hhea, tables.hmtx, tables.head, numGlyphsOut, dupFirstEntry);
- for (const key in data.properties) {
- properties[key] = data.properties[key];
+ if (!tables.head) {
+ throw new _util.FormatError('Required "head" table is not found');
}
- var charstrings = data.charstrings;
- var type2Charstrings = this.getType2Charstrings(charstrings);
- var subrs = this.getType2Subrs(data.subrs);
- this.charstrings = charstrings;
- this.data = this.wrap(name, type2Charstrings, this.charstrings, subrs, properties);
- this.seacs = this.getSeacs(data.charstrings);
- }
-
- Type1Font.prototype = {
- get numGlyphs() {
- return this.charstrings.length + 1;
- },
+ sanitizeHead(tables.head, numGlyphs, isTrueType ? tables.loca.length : 0);
+ let missingGlyphs = Object.create(null);
- getCharset: function Type1Font_getCharset() {
- var charset = [".notdef"];
- var charstrings = this.charstrings;
+ if (isTrueType) {
+ const isGlyphLocationsLong = int16(tables.head.data[50], tables.head.data[51]);
+ const glyphsInfo = sanitizeGlyphLocations(tables.loca, tables.glyf, numGlyphs, isGlyphLocationsLong, hintsValid, dupFirstEntry, maxSizeOfInstructions);
+ missingGlyphs = glyphsInfo.missingGlyphs;
- for (var glyphId = 0; glyphId < charstrings.length; glyphId++) {
- charset.push(charstrings[glyphId].glyphName);
+ if (version >= 0x00010000 && tables.maxp.length >= 22) {
+ tables.maxp.data[26] = glyphsInfo.maxSizeOfInstructions >> 8;
+ tables.maxp.data[27] = glyphsInfo.maxSizeOfInstructions & 255;
}
+ }
- return charset;
- },
- getGlyphMapping: function Type1Font_getGlyphMapping(properties) {
- var charstrings = this.charstrings;
+ if (!tables.hhea) {
+ throw new _util.FormatError('Required "hhea" table is not found');
+ }
+
+ if (tables.hhea.data[10] === 0 && tables.hhea.data[11] === 0) {
+ tables.hhea.data[10] = 0xff;
+ tables.hhea.data[11] = 0xff;
+ }
+
+ const metricsOverride = {
+ unitsPerEm: int16(tables.head.data[18], tables.head.data[19]),
+ yMax: int16(tables.head.data[42], tables.head.data[43]),
+ yMin: signedInt16(tables.head.data[38], tables.head.data[39]),
+ ascent: signedInt16(tables.hhea.data[4], tables.hhea.data[5]),
+ descent: signedInt16(tables.hhea.data[6], tables.hhea.data[7]),
+ lineGap: signedInt16(tables.hhea.data[8], tables.hhea.data[9])
+ };
+ this.ascent = metricsOverride.ascent / metricsOverride.unitsPerEm;
+ this.descent = metricsOverride.descent / metricsOverride.unitsPerEm;
+ this.lineGap = metricsOverride.lineGap / metricsOverride.unitsPerEm;
+
+ if (this.cssFontInfo && this.cssFontInfo.lineHeight) {
+ this.lineHeight = this.cssFontInfo.lineHeight;
+ } else {
+ this.lineHeight = this.ascent - this.descent + this.lineGap;
+ }
+
+ if (tables.post) {
+ readPostScriptTable(tables.post, properties, numGlyphs);
+ }
- if (properties.composite) {
- const charCodeToGlyphId = Object.create(null);
+ tables.post = {
+ tag: "post",
+ data: createPostTable(properties)
+ };
+ const charCodeToGlyphId = [];
+
+ function hasGlyph(glyphId) {
+ return !missingGlyphs[glyphId];
+ }
- for (let glyphId = 0, charstringsLen = charstrings.length; glyphId < charstringsLen; glyphId++) {
- const charCode = properties.cMap.charCodeOf(glyphId);
- charCodeToGlyphId[charCode] = glyphId + 1;
+ if (properties.composite) {
+ const cidToGidMap = properties.cidToGidMap || [];
+ const isCidToGidMapEmpty = cidToGidMap.length === 0;
+ properties.cMap.forEach(function (charCode, cid) {
+ if (cid > 0xffff) {
+ throw new _util.FormatError("Max size of CID is 65,535");
}
- return charCodeToGlyphId;
+ let glyphId = -1;
+
+ if (isCidToGidMapEmpty) {
+ glyphId = cid;
+ } else if (cidToGidMap[cid] !== undefined) {
+ glyphId = cidToGidMap[cid];
+ }
+
+ if (glyphId >= 0 && glyphId < numGlyphs && hasGlyph(glyphId)) {
+ charCodeToGlyphId[charCode] = glyphId;
+ }
+ });
+ } else {
+ const cmapTable = readCmapTable(tables.cmap, font, this.isSymbolicFont, properties.hasEncoding);
+ const cmapPlatformId = cmapTable.platformId;
+ const cmapEncodingId = cmapTable.encodingId;
+ const cmapMappings = cmapTable.mappings;
+ const cmapMappingsLength = cmapMappings.length;
+ let baseEncoding = [];
+
+ if (properties.hasEncoding && (properties.baseEncodingName === "MacRomanEncoding" || properties.baseEncodingName === "WinAnsiEncoding")) {
+ baseEncoding = (0, _encodings.getEncoding)(properties.baseEncodingName);
}
- var glyphNames = [".notdef"],
- glyphId;
+ if (properties.hasEncoding && !this.isSymbolicFont && (cmapPlatformId === 3 && cmapEncodingId === 1 || cmapPlatformId === 1 && cmapEncodingId === 0)) {
+ const glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();
+
+ for (let charCode = 0; charCode < 256; charCode++) {
+ let glyphName;
+
+ if (this.differences[charCode] !== undefined) {
+ glyphName = this.differences[charCode];
+ } else if (baseEncoding[charCode] !== "") {
+ glyphName = baseEncoding[charCode];
+ } else {
+ glyphName = _encodings.StandardEncoding[charCode];
+ }
+
+ if (!glyphName) {
+ continue;
+ }
+
+ const standardGlyphName = (0, _fonts_utils.recoverGlyphName)(glyphName, glyphsUnicodeMap);
+ let unicodeOrCharCode;
+
+ if (cmapPlatformId === 3 && cmapEncodingId === 1) {
+ unicodeOrCharCode = glyphsUnicodeMap[standardGlyphName];
+ } else if (cmapPlatformId === 1 && cmapEncodingId === 0) {
+ unicodeOrCharCode = _encodings.MacRomanEncoding.indexOf(standardGlyphName);
+ }
+
+ for (let i = 0; i < cmapMappingsLength; ++i) {
+ if (cmapMappings[i].charCode !== unicodeOrCharCode) {
+ continue;
+ }
+
+ charCodeToGlyphId[charCode] = cmapMappings[i].glyphId;
+ break;
+ }
+ }
+ } else if (cmapPlatformId === 0) {
+ for (let i = 0; i < cmapMappingsLength; ++i) {
+ charCodeToGlyphId[cmapMappings[i].charCode] = cmapMappings[i].glyphId;
+ }
+ } else {
+ for (let i = 0; i < cmapMappingsLength; ++i) {
+ let charCode = cmapMappings[i].charCode;
+
+ if (cmapPlatformId === 3 && charCode >= 0xf000 && charCode <= 0xf0ff) {
+ charCode &= 0xff;
+ }
- for (glyphId = 0; glyphId < charstrings.length; glyphId++) {
- glyphNames.push(charstrings[glyphId].glyphName);
+ charCodeToGlyphId[charCode] = cmapMappings[i].glyphId;
+ }
}
- var encoding = properties.builtInEncoding;
+ if (properties.glyphNames && (baseEncoding.length || this.differences.length)) {
+ for (let i = 0; i < 256; ++i) {
+ if (charCodeToGlyphId[i] !== undefined) {
+ continue;
+ }
+
+ const glyphName = this.differences[i] || baseEncoding[i];
- if (encoding) {
- var builtInEncoding = Object.create(null);
+ if (!glyphName) {
+ continue;
+ }
- for (var charCode in encoding) {
- glyphId = glyphNames.indexOf(encoding[charCode]);
+ const glyphId = properties.glyphNames.indexOf(glyphName);
- if (glyphId >= 0) {
- builtInEncoding[charCode] = glyphId;
+ if (glyphId > 0 && hasGlyph(glyphId)) {
+ charCodeToGlyphId[i] = glyphId;
}
}
}
+ }
- return type1FontGlyphMapping(properties, builtInEncoding, glyphNames);
- },
- hasGlyphId: function Type1Font_hasGlyphID(id) {
- if (id < 0 || id >= this.numGlyphs) {
- return false;
+ if (charCodeToGlyphId.length === 0) {
+ charCodeToGlyphId[0] = 0;
+ }
+
+ let glyphZeroId = numGlyphsOut - 1;
+
+ if (!dupFirstEntry) {
+ glyphZeroId = 0;
+ }
+
+ if (!properties.cssFontInfo) {
+ const newMapping = adjustMapping(charCodeToGlyphId, hasGlyph, glyphZeroId);
+ this.toFontChar = newMapping.toFontChar;
+ tables.cmap = {
+ tag: "cmap",
+ data: createCmapTable(newMapping.charCodeToGlyphId, numGlyphsOut)
+ };
+
+ if (!tables["OS/2"] || !validateOS2Table(tables["OS/2"], font)) {
+ tables["OS/2"] = {
+ tag: "OS/2",
+ data: createOS2Table(properties, newMapping.charCodeToGlyphId, metricsOverride)
+ };
}
+ }
- if (id === 0) {
- return true;
+ if (!isTrueType) {
+ try {
+ cffFile = new _stream.Stream(tables["CFF "].data);
+ const parser = new _cff_parser.CFFParser(cffFile, properties, _fonts_utils.SEAC_ANALYSIS_ENABLED);
+ cff = parser.parse();
+ cff.duplicateFirstGlyph();
+ const compiler = new _cff_parser.CFFCompiler(cff);
+ tables["CFF "].data = compiler.compile();
+ } catch (e) {
+ (0, _util.warn)("Failed to compile font " + properties.loadedName);
}
+ }
- var glyph = this.charstrings[id - 1];
- return glyph.charstring.length > 0;
- },
- getSeacs: function Type1Font_getSeacs(charstrings) {
- var i, ii;
- var seacMap = [];
+ if (!tables.name) {
+ tables.name = {
+ tag: "name",
+ data: createNameTable(this.name)
+ };
+ } else {
+ const namePrototype = readNameTable(tables.name);
+ tables.name.data = createNameTable(name, namePrototype);
+ this.psName = namePrototype[0][6] || null;
+ }
+
+ const builder = new _opentype_file_builder.OpenTypeFileBuilder(header.version);
+
+ for (const tableTag in tables) {
+ builder.addTable(tableTag, tables[tableTag].data);
+ }
+
+ return builder.toArray();
+ }
+
+ convert(fontName, font, properties) {
+ properties.fixedPitch = false;
+
+ if (properties.builtInEncoding) {
+ adjustToUnicode(properties, properties.builtInEncoding);
+ }
+
+ let glyphZeroId = 1;
+
+ if (font instanceof _cff_font.CFFFont) {
+ glyphZeroId = font.numGlyphs - 1;
+ }
+
+ const mapping = font.getGlyphMapping(properties);
+ let newMapping = null;
+ let newCharCodeToGlyphId = mapping;
+
+ if (!properties.cssFontInfo) {
+ newMapping = adjustMapping(mapping, font.hasGlyphId.bind(font), glyphZeroId);
+ this.toFontChar = newMapping.toFontChar;
+ newCharCodeToGlyphId = newMapping.charCodeToGlyphId;
+ }
+
+ const numGlyphs = font.numGlyphs;
- for (i = 0, ii = charstrings.length; i < ii; i++) {
- var charstring = charstrings[i];
+ function getCharCodes(charCodeToGlyphId, glyphId) {
+ let charCodes = null;
+
+ for (const charCode in charCodeToGlyphId) {
+ if (glyphId === charCodeToGlyphId[charCode]) {
+ if (!charCodes) {
+ charCodes = [];
+ }
- if (charstring.seac) {
- seacMap[i + 1] = charstring.seac;
+ charCodes.push(charCode | 0);
}
}
- return seacMap;
- },
- getType2Charstrings: function Type1Font_getType2Charstrings(type1Charstrings) {
- var type2Charstrings = [];
+ return charCodes;
+ }
- for (var i = 0, ii = type1Charstrings.length; i < ii; i++) {
- type2Charstrings.push(type1Charstrings[i].charstring);
+ function createCharCode(charCodeToGlyphId, glyphId) {
+ for (const charCode in charCodeToGlyphId) {
+ if (glyphId === charCodeToGlyphId[charCode]) {
+ return charCode | 0;
+ }
}
- return type2Charstrings;
- },
- getType2Subrs: function Type1Font_getType2Subrs(type1Subrs) {
- var bias = 0;
- var count = type1Subrs.length;
-
- if (count < 1133) {
- bias = 107;
- } else if (count < 33769) {
- bias = 1131;
- } else {
- bias = 32768;
+ newMapping.charCodeToGlyphId[newMapping.nextAvailableFontCharCode] = glyphId;
+ return newMapping.nextAvailableFontCharCode++;
+ }
+
+ const seacs = font.seacs;
+
+ if (newMapping && _fonts_utils.SEAC_ANALYSIS_ENABLED && seacs && seacs.length) {
+ const matrix = properties.fontMatrix || _util.FONT_IDENTITY_MATRIX;
+ const charset = font.getCharset();
+ const seacMap = Object.create(null);
+
+ for (let glyphId in seacs) {
+ glyphId |= 0;
+ const seac = seacs[glyphId];
+ const baseGlyphName = _encodings.StandardEncoding[seac[2]];
+ const accentGlyphName = _encodings.StandardEncoding[seac[3]];
+ const baseGlyphId = charset.indexOf(baseGlyphName);
+ const accentGlyphId = charset.indexOf(accentGlyphName);
+
+ if (baseGlyphId < 0 || accentGlyphId < 0) {
+ continue;
+ }
+
+ const accentOffset = {
+ x: seac[0] * matrix[0] + seac[1] * matrix[2] + matrix[4],
+ y: seac[0] * matrix[1] + seac[1] * matrix[3] + matrix[5]
+ };
+ const charCodes = getCharCodes(mapping, glyphId);
+
+ if (!charCodes) {
+ continue;
+ }
+
+ for (let i = 0, ii = charCodes.length; i < ii; i++) {
+ const charCode = charCodes[i];
+ const charCodeToGlyphId = newMapping.charCodeToGlyphId;
+ const baseFontCharCode = createCharCode(charCodeToGlyphId, baseGlyphId);
+ const accentFontCharCode = createCharCode(charCodeToGlyphId, accentGlyphId);
+ seacMap[charCode] = {
+ baseFontCharCode,
+ accentFontCharCode,
+ accentOffset
+ };
+ }
}
- var type2Subrs = [];
- var i;
+ properties.seacMap = seacMap;
+ }
+
+ const unitsPerEm = 1 / (properties.fontMatrix || _util.FONT_IDENTITY_MATRIX)[0];
+ const builder = new _opentype_file_builder.OpenTypeFileBuilder("\x4F\x54\x54\x4F");
+ builder.addTable("CFF ", font.data);
+ builder.addTable("OS/2", createOS2Table(properties, newCharCodeToGlyphId));
+ builder.addTable("cmap", createCmapTable(newCharCodeToGlyphId, numGlyphs));
+ builder.addTable("head", "\x00\x01\x00\x00" + "\x00\x00\x10\x00" + "\x00\x00\x00\x00" + "\x5F\x0F\x3C\xF5" + "\x00\x00" + safeString16(unitsPerEm) + "\x00\x00\x00\x00\x9e\x0b\x7e\x27" + "\x00\x00\x00\x00\x9e\x0b\x7e\x27" + "\x00\x00" + safeString16(properties.descent) + "\x0F\xFF" + safeString16(properties.ascent) + string16(properties.italicAngle ? 2 : 0) + "\x00\x11" + "\x00\x00" + "\x00\x00" + "\x00\x00");
+ builder.addTable("hhea", "\x00\x01\x00\x00" + safeString16(properties.ascent) + safeString16(properties.descent) + "\x00\x00" + "\xFF\xFF" + "\x00\x00" + "\x00\x00" + "\x00\x00" + safeString16(properties.capHeight) + safeString16(Math.tan(properties.italicAngle) * properties.xHeight) + "\x00\x00" + "\x00\x00" + "\x00\x00" + "\x00\x00" + "\x00\x00" + "\x00\x00" + string16(numGlyphs));
+ builder.addTable("hmtx", function fontFieldsHmtx() {
+ const charstrings = font.charstrings;
+ const cffWidths = font.cff ? font.cff.widths : null;
+ let hmtx = "\x00\x00\x00\x00";
- for (i = 0; i < bias; i++) {
- type2Subrs.push([0x0b]);
+ for (let i = 1, ii = numGlyphs; i < ii; i++) {
+ let width = 0;
+
+ if (charstrings) {
+ const charstring = charstrings[i - 1];
+ width = "width" in charstring ? charstring.width : 0;
+ } else if (cffWidths) {
+ width = Math.ceil(cffWidths[i] || 0);
+ }
+
+ hmtx += string16(width) + string16(0);
}
- for (i = 0; i < count; i++) {
- type2Subrs.push(type1Subrs[i]);
+ return hmtx;
+ }());
+ builder.addTable("maxp", "\x00\x00\x50\x00" + string16(numGlyphs));
+ builder.addTable("name", createNameTable(fontName));
+ builder.addTable("post", createPostTable(properties));
+ return builder.toArray();
+ }
+
+ get spaceWidth() {
+ const possibleSpaceReplacements = ["space", "minus", "one", "i", "I"];
+ let width;
+
+ for (let i = 0, ii = possibleSpaceReplacements.length; i < ii; i++) {
+ const glyphName = possibleSpaceReplacements[i];
+
+ if (glyphName in this.widths) {
+ width = this.widths[glyphName];
+ break;
}
- return type2Subrs;
- },
- wrap: function Type1Font_wrap(name, glyphs, charstrings, subrs, properties) {
- var cff = new _cff_parser.CFF();
- cff.header = new _cff_parser.CFFHeader(1, 0, 4, 4);
- cff.names = [name];
- var topDict = new _cff_parser.CFFTopDict();
- topDict.setByName("version", 391);
- topDict.setByName("Notice", 392);
- topDict.setByName("FullName", 393);
- topDict.setByName("FamilyName", 394);
- topDict.setByName("Weight", 395);
- topDict.setByName("Encoding", null);
- topDict.setByName("FontMatrix", properties.fontMatrix);
- topDict.setByName("FontBBox", properties.bbox);
- topDict.setByName("charset", null);
- topDict.setByName("CharStrings", null);
- topDict.setByName("Private", null);
- cff.topDict = topDict;
- var strings = new _cff_parser.CFFStrings();
- strings.add("Version 0.11");
- strings.add("See original notice");
- strings.add(name);
- strings.add(name);
- strings.add("Medium");
- cff.strings = strings;
- cff.globalSubrIndex = new _cff_parser.CFFIndex();
- var count = glyphs.length;
- var charsetArray = [".notdef"];
- var i, ii;
+ const glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();
+ const glyphUnicode = glyphsUnicodeMap[glyphName];
+ let charcode = 0;
+
+ if (this.composite && this.cMap.contains(glyphUnicode)) {
+ charcode = this.cMap.lookup(glyphUnicode);
+ }
- for (i = 0; i < count; i++) {
- const glyphName = charstrings[i].glyphName;
+ if (!charcode && this.toUnicode) {
+ charcode = this.toUnicode.charCodeOf(glyphUnicode);
+ }
- const index = _cff_parser.CFFStandardStrings.indexOf(glyphName);
+ if (charcode <= 0) {
+ charcode = glyphUnicode;
+ }
- if (index === -1) {
- strings.add(glyphName);
- }
+ width = this.widths[charcode];
- charsetArray.push(glyphName);
+ if (width) {
+ break;
}
+ }
+
+ width = width || this.defaultWidth;
+ return (0, _util.shadow)(this, "spaceWidth", width);
+ }
- cff.charset = new _cff_parser.CFFCharset(false, 0, charsetArray);
- var charStringsIndex = new _cff_parser.CFFIndex();
- charStringsIndex.add([0x8b, 0x0e]);
+ _charToGlyph(charcode, isSpace = false) {
+ let fontCharCode, width, operatorListId;
+ let widthCode = charcode;
- for (i = 0; i < count; i++) {
- charStringsIndex.add(glyphs[i]);
+ if (this.cMap && this.cMap.contains(charcode)) {
+ widthCode = this.cMap.lookup(charcode);
+ }
+
+ width = this.widths[widthCode];
+ width = (0, _util.isNum)(width) ? width : this.defaultWidth;
+ const vmetric = this.vmetrics && this.vmetrics[widthCode];
+ let unicode = this.toUnicode.get(charcode) || charcode;
+
+ if (typeof unicode === "number") {
+ unicode = String.fromCharCode(unicode);
+ }
+
+ let isInFont = this.toFontChar[charcode] !== undefined;
+ fontCharCode = this.toFontChar[charcode] || charcode;
+
+ if (this.missingFile) {
+ const glyphName = this.differences[charcode] || this.defaultEncoding[charcode];
+
+ if ((glyphName === ".notdef" || glyphName === "") && this.type === "Type1") {
+ fontCharCode = 0x20;
}
- cff.charStrings = charStringsIndex;
- var privateDict = new _cff_parser.CFFPrivateDict();
- privateDict.setByName("Subrs", null);
- var fields = ["BlueValues", "OtherBlues", "FamilyBlues", "FamilyOtherBlues", "StemSnapH", "StemSnapV", "BlueShift", "BlueFuzz", "BlueScale", "LanguageGroup", "ExpansionFactor", "ForceBold", "StdHW", "StdVW"];
+ fontCharCode = (0, _unicode.mapSpecialUnicodeValues)(fontCharCode);
+ }
- for (i = 0, ii = fields.length; i < ii; i++) {
- var field = fields[i];
+ if (this.isType3Font) {
+ operatorListId = fontCharCode;
+ }
- if (!(field in properties.privateData)) {
- continue;
- }
+ let accent = null;
- var value = properties.privateData[field];
+ if (this.seacMap && this.seacMap[charcode]) {
+ isInFont = true;
+ const seac = this.seacMap[charcode];
+ fontCharCode = seac.baseFontCharCode;
+ accent = {
+ fontChar: String.fromCodePoint(seac.accentFontCharCode),
+ offset: seac.accentOffset
+ };
+ }
- if (Array.isArray(value)) {
- for (var j = value.length - 1; j > 0; j--) {
- value[j] -= value[j - 1];
- }
- }
+ let fontChar = "";
- privateDict.setByName(field, value);
+ if (typeof fontCharCode === "number") {
+ if (fontCharCode <= 0x10ffff) {
+ fontChar = String.fromCodePoint(fontCharCode);
+ } else {
+ (0, _util.warn)(`charToGlyph - invalid fontCharCode: ${fontCharCode}`);
}
+ }
- cff.topDict.privateDict = privateDict;
- var subrIndex = new _cff_parser.CFFIndex();
+ let glyph = this._glyphCache[charcode];
- for (i = 0, ii = subrs.length; i < ii; i++) {
- subrIndex.add(subrs[i]);
+ if (!glyph || !glyph.matchesForCache(charcode, fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont)) {
+ glyph = new Glyph(charcode, fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont);
+ this._glyphCache[charcode] = glyph;
+ }
+
+ return glyph;
+ }
+
+ charsToGlyphs(chars) {
+ let glyphs = this._charsCache[chars];
+
+ if (glyphs) {
+ return glyphs;
+ }
+
+ glyphs = [];
+
+ if (this.cMap) {
+ const c = Object.create(null),
+ ii = chars.length;
+ let i = 0;
+
+ while (i < ii) {
+ this.cMap.readCharCode(chars, i, c);
+ const {
+ charcode,
+ length
+ } = c;
+ i += length;
+
+ const glyph = this._charToGlyph(charcode, length === 1 && chars.charCodeAt(i - 1) === 0x20);
+
+ glyphs.push(glyph);
}
+ } else {
+ for (let i = 0, ii = chars.length; i < ii; ++i) {
+ const charcode = chars.charCodeAt(i);
+
+ const glyph = this._charToGlyph(charcode, charcode === 0x20);
- privateDict.subrsIndex = subrIndex;
- var compiler = new _cff_parser.CFFCompiler(cff);
- return compiler.compile();
+ glyphs.push(glyph);
+ }
}
- };
- return Type1Font;
-}();
-var CFFFont = function CFFFontClosure() {
- function CFFFont(file, properties) {
- this.properties = properties;
- var parser = new _cff_parser.CFFParser(file, properties, SEAC_ANALYSIS_ENABLED);
- this.cff = parser.parse();
- this.cff.duplicateFirstGlyph();
- var compiler = new _cff_parser.CFFCompiler(this.cff);
- this.seacs = this.cff.seacs;
+ return this._charsCache[chars] = glyphs;
+ }
- try {
- this.data = compiler.compile();
- } catch (e) {
- (0, _util.warn)("Failed to compile font " + properties.loadedName);
- this.data = file;
+ getCharPositions(chars) {
+ const positions = [];
+
+ if (this.cMap) {
+ const c = Object.create(null);
+ let i = 0;
+
+ while (i < chars.length) {
+ this.cMap.readCharCode(chars, i, c);
+ const length = c.length;
+ positions.push([i, i + length]);
+ i += length;
+ }
+ } else {
+ for (let i = 0, ii = chars.length; i < ii; ++i) {
+ positions.push([i, i + 1]);
+ }
}
+
+ return positions;
}
- CFFFont.prototype = {
- get numGlyphs() {
- return this.cff.charStrings.count;
- },
+ get glyphCacheValues() {
+ return Object.values(this._glyphCache);
+ }
- getCharset: function CFFFont_getCharset() {
- return this.cff.charset.charset;
- },
- getGlyphMapping: function CFFFont_getGlyphMapping() {
- var cff = this.cff;
- var properties = this.properties;
- var charsets = cff.charset.charset;
- var charCodeToGlyphId;
- var glyphId;
-
- if (properties.composite) {
- charCodeToGlyphId = Object.create(null);
- let charCode;
-
- if (cff.isCIDFont) {
- for (glyphId = 0; glyphId < charsets.length; glyphId++) {
- var cid = charsets[glyphId];
- charCode = properties.cMap.charCodeOf(cid);
- charCodeToGlyphId[charCode] = glyphId;
+ encodeString(str) {
+ const buffers = [];
+ const currentBuf = [];
+
+ const hasCurrentBufErrors = () => buffers.length % 2 === 1;
+
+ for (let i = 0, ii = str.length; i < ii; i++) {
+ const unicode = str.codePointAt(i);
+
+ if (unicode > 0xd7ff && (unicode < 0xe000 || unicode > 0xfffd)) {
+ i++;
+ }
+
+ if (this.toUnicode) {
+ const char = String.fromCodePoint(unicode);
+ const charCode = this.toUnicode.charCodeOf(char);
+
+ if (charCode !== -1) {
+ if (hasCurrentBufErrors()) {
+ buffers.push(currentBuf.join(""));
+ currentBuf.length = 0;
}
- } else {
- for (glyphId = 0; glyphId < cff.charStrings.count; glyphId++) {
- charCode = properties.cMap.charCodeOf(glyphId);
- charCodeToGlyphId[charCode] = glyphId;
+
+ const charCodeLength = this.cMap ? this.cMap.getCharCodeLength(charCode) : 1;
+
+ for (let j = charCodeLength - 1; j >= 0; j--) {
+ currentBuf.push(String.fromCharCode(charCode >> 8 * j & 0xff));
}
+
+ continue;
}
+ }
- return charCodeToGlyphId;
+ if (!hasCurrentBufErrors()) {
+ buffers.push(currentBuf.join(""));
+ currentBuf.length = 0;
}
- var encoding = cff.encoding ? cff.encoding.encoding : null;
- charCodeToGlyphId = type1FontGlyphMapping(properties, encoding, charsets);
- return charCodeToGlyphId;
- },
- hasGlyphId: function CFFFont_hasGlyphID(id) {
- return this.cff.hasGlyphId(id);
+ currentBuf.push(String.fromCodePoint(unicode));
}
- };
- return CFFFont;
-}();
+
+ buffers.push(currentBuf.join(""));
+ return buffers;
+ }
+
+}
+
+exports.Font = Font;
+
+class ErrorFont {
+ constructor(error) {
+ this.error = error;
+ this.loadedName = "g_font_error";
+ this.missingFile = true;
+ }
+
+ charsToGlyphs() {
+ return [];
+ }
+
+ encodeString(chars) {
+ return [chars];
+ }
+
+ exportData(extraProperties = false) {
+ return {
+ error: this.error
+ };
+ }
+
+}
+
+exports.ErrorFont = ErrorFont;
/***/ }),
-/* 31 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 35 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
-"use strict";
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
value: true
-});
-exports.CFFFDSelect = exports.CFFCompiler = exports.CFFPrivateDict = exports.CFFTopDict = exports.CFFCharset = exports.CFFIndex = exports.CFFStrings = exports.CFFHeader = exports.CFF = exports.CFFParser = exports.CFFStandardStrings = void 0;
+}));
+exports.CFFTopDict = exports.CFFStrings = exports.CFFStandardStrings = exports.CFFPrivateDict = exports.CFFParser = exports.CFFIndex = exports.CFFHeader = exports.CFFFDSelect = exports.CFFCompiler = exports.CFFCharset = exports.CFF = void 0;
var _util = __w_pdfjs_require__(2);
-var _charsets = __w_pdfjs_require__(32);
+var _charsets = __w_pdfjs_require__(36);
-var _encodings = __w_pdfjs_require__(33);
+var _encodings = __w_pdfjs_require__(37);
-var MAX_SUBR_NESTING = 10;
-var CFFStandardStrings = [".notdef", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quoteright", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "exclamdown", "cent", "sterling", "fraction", "yen", "florin", "section", "currency", "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "endash", "dagger", "daggerdbl", "periodcentered", "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", "perthousand", "questiondown", "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent", "dieresis", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "emdash", "AE", "ordfeminine", "Lslash", "Oslash", "OE", "ordmasculine", "ae", "dotlessi", "lslash", "oslash", "oe", "germandbls", "onesuperior", "logicalnot", "mu", "trademark", "Eth", "onehalf", "plusminus", "Thorn", "onequarter", "divide", "brokenbar", "degree", "thorn", "threequarters", "twosuperior", "registered", "minus", "eth", "multiply", "threesuperior", "copyright", "Aacute", "Acircumflex", "Adieresis", "Agrave", "Aring", "Atilde", "Ccedilla", "Eacute", "Ecircumflex", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Ntilde", "Oacute", "Ocircumflex", "Odieresis", "Ograve", "Otilde", "Scaron", "Uacute", "Ucircumflex", "Udieresis", "Ugrave", "Yacute", "Ydieresis", "Zcaron", "aacute", "acircumflex", "adieresis", "agrave", "aring", "atilde", "ccedilla", "eacute", "ecircumflex", "edieresis", "egrave", "iacute", "icircumflex", "idieresis", "igrave", "ntilde", "oacute", "ocircumflex", "odieresis", "ograve", "otilde", "scaron", "uacute", "ucircumflex", "udieresis", "ugrave", "yacute", "ydieresis", "zcaron", "exclamsmall", "Hungarumlautsmall", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", "tsuperior", "ff", "ffi", "ffl", "parenleftinferior", "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "exclamdownsmall", "centoldstyle", "Lslashsmall", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", "Dotaccentsmall", "Macronsmall", "figuredash", "hypheninferior", "Ogoneksmall", "Ringsmall", "Cedillasmall", "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "zerosuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall", "001.000", "001.001", "001.002", "001.003", "Black", "Bold", "Book", "Light", "Medium", "Regular", "Roman", "Semibold"];
+const MAX_SUBR_NESTING = 10;
+const CFFStandardStrings = [".notdef", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quoteright", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "exclamdown", "cent", "sterling", "fraction", "yen", "florin", "section", "currency", "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "endash", "dagger", "daggerdbl", "periodcentered", "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", "perthousand", "questiondown", "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent", "dieresis", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "emdash", "AE", "ordfeminine", "Lslash", "Oslash", "OE", "ordmasculine", "ae", "dotlessi", "lslash", "oslash", "oe", "germandbls", "onesuperior", "logicalnot", "mu", "trademark", "Eth", "onehalf", "plusminus", "Thorn", "onequarter", "divide", "brokenbar", "degree", "thorn", "threequarters", "twosuperior", "registered", "minus", "eth", "multiply", "threesuperior", "copyright", "Aacute", "Acircumflex", "Adieresis", "Agrave", "Aring", "Atilde", "Ccedilla", "Eacute", "Ecircumflex", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Ntilde", "Oacute", "Ocircumflex", "Odieresis", "Ograve", "Otilde", "Scaron", "Uacute", "Ucircumflex", "Udieresis", "Ugrave", "Yacute", "Ydieresis", "Zcaron", "aacute", "acircumflex", "adieresis", "agrave", "aring", "atilde", "ccedilla", "eacute", "ecircumflex", "edieresis", "egrave", "iacute", "icircumflex", "idieresis", "igrave", "ntilde", "oacute", "ocircumflex", "odieresis", "ograve", "otilde", "scaron", "uacute", "ucircumflex", "udieresis", "ugrave", "yacute", "ydieresis", "zcaron", "exclamsmall", "Hungarumlautsmall", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", "tsuperior", "ff", "ffi", "ffl", "parenleftinferior", "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "exclamdownsmall", "centoldstyle", "Lslashsmall", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", "Dotaccentsmall", "Macronsmall", "figuredash", "hypheninferior", "Ogoneksmall", "Ringsmall", "Cedillasmall", "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "zerosuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall", "001.000", "001.001", "001.002", "001.003", "Black", "Bold", "Book", "Light", "Medium", "Regular", "Roman", "Semibold"];
exports.CFFStandardStrings = CFFStandardStrings;
const NUM_STANDARD_CFF_STRINGS = 391;
-var CFFParser = function CFFParserClosure() {
- var CharstringValidationData = [null, {
+const CFFParser = function CFFParserClosure() {
+ const CharstringValidationData = [null, {
id: "hstem",
min: 2,
stackClearing: true,
@@ -29564,7 +26001,7 @@ var CFFParser = function CFFParserClosure() {
min: 4,
resetStack: true
}];
- var CharstringValidationData12 = [null, null, null, {
+ const CharstringValidationData12 = [null, null, null, {
id: "and",
min: 2,
stackDelta: -1
@@ -29685,16 +26122,16 @@ var CFFParser = function CFFParserClosure() {
}
parse() {
- var properties = this.properties;
- var cff = new CFF();
+ const properties = this.properties;
+ const cff = new CFF();
this.cff = cff;
- var header = this.parseHeader();
- var nameIndex = this.parseIndex(header.endPos);
- var topDictIndex = this.parseIndex(nameIndex.endPos);
- var stringIndex = this.parseIndex(topDictIndex.endPos);
- var globalSubrIndex = this.parseIndex(stringIndex.endPos);
- var topDictParsed = this.parseDict(topDictIndex.obj.get(0));
- var topDict = this.createDict(CFFTopDict, topDictParsed, cff.strings);
+ const header = this.parseHeader();
+ const nameIndex = this.parseIndex(header.endPos);
+ const topDictIndex = this.parseIndex(nameIndex.endPos);
+ const stringIndex = this.parseIndex(topDictIndex.endPos);
+ const globalSubrIndex = this.parseIndex(stringIndex.endPos);
+ const topDictParsed = this.parseDict(topDictIndex.obj.get(0));
+ const topDict = this.createDict(CFFTopDict, topDictParsed, cff.strings);
cff.header = header.obj;
cff.names = this.parseNameIndex(nameIndex.obj);
cff.strings = this.parseStringIndex(stringIndex.obj);
@@ -29702,15 +26139,15 @@ var CFFParser = function CFFParserClosure() {
cff.globalSubrIndex = globalSubrIndex.obj;
this.parsePrivateDict(cff.topDict);
cff.isCIDFont = topDict.hasName("ROS");
- var charStringOffset = topDict.getByName("CharStrings");
- var charStringIndex = this.parseIndex(charStringOffset).obj;
- var fontMatrix = topDict.getByName("FontMatrix");
+ const charStringOffset = topDict.getByName("CharStrings");
+ const charStringIndex = this.parseIndex(charStringOffset).obj;
+ const fontMatrix = topDict.getByName("FontMatrix");
if (fontMatrix) {
properties.fontMatrix = fontMatrix;
}
- var fontBBox = topDict.getByName("FontBBox");
+ const fontBBox = topDict.getByName("FontBBox");
if (fontBBox) {
properties.ascent = Math.max(fontBBox[3], fontBBox[1]);
@@ -29718,14 +26155,14 @@ var CFFParser = function CFFParserClosure() {
properties.ascentScaled = true;
}
- var charset, encoding;
+ let charset, encoding;
if (cff.isCIDFont) {
- var fdArrayIndex = this.parseIndex(topDict.getByName("FDArray")).obj;
+ const fdArrayIndex = this.parseIndex(topDict.getByName("FDArray")).obj;
- for (var i = 0, ii = fdArrayIndex.count; i < ii; ++i) {
- var dictRaw = fdArrayIndex.get(i);
- var fontDict = this.createDict(CFFTopDict, this.parseDict(dictRaw), cff.strings);
+ for (let i = 0, ii = fdArrayIndex.count; i < ii; ++i) {
+ const dictRaw = fdArrayIndex.get(i);
+ const fontDict = this.createDict(CFFTopDict, this.parseDict(dictRaw), cff.strings);
this.parsePrivateDict(fontDict);
cff.fdArray.push(fontDict);
}
@@ -29740,7 +26177,7 @@ var CFFParser = function CFFParserClosure() {
cff.charset = charset;
cff.encoding = encoding;
- var charStringsAndSeacs = this.parseCharStrings({
+ const charStringsAndSeacs = this.parseCharStrings({
charStrings: charStringIndex,
localSubrIndex: topDict.privateDict.subrsIndex,
globalSubrIndex: globalSubrIndex.obj,
@@ -29755,9 +26192,9 @@ var CFFParser = function CFFParserClosure() {
}
parseHeader() {
- var bytes = this.bytes;
- var bytesLength = bytes.length;
- var offset = 0;
+ let bytes = this.bytes;
+ const bytesLength = bytes.length;
+ let offset = 0;
while (offset < bytesLength && bytes[offset] !== 1) {
++offset;
@@ -29773,11 +26210,11 @@ var CFFParser = function CFFParserClosure() {
this.bytes = bytes;
}
- var major = bytes[0];
- var minor = bytes[1];
- var hdrSize = bytes[2];
- var offSize = bytes[3];
- var header = new CFFHeader(major, minor, hdrSize, offSize);
+ const major = bytes[0];
+ const minor = bytes[1];
+ const hdrSize = bytes[2];
+ const offSize = bytes[3];
+ const header = new CFFHeader(major, minor, hdrSize, offSize);
return {
obj: header,
endPos: hdrSize
@@ -29785,10 +26222,10 @@ var CFFParser = function CFFParserClosure() {
}
parseDict(dict) {
- var pos = 0;
+ let pos = 0;
function parseOperand() {
- var value = dict[pos++];
+ let value = dict[pos++];
if (value === 30) {
return parseFloatOperand();
@@ -29815,15 +26252,15 @@ var CFFParser = function CFFParserClosure() {
}
function parseFloatOperand() {
- var str = "";
- var eof = 15;
+ let str = "";
+ const eof = 15;
const lookup = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ".", "E", "E-", null, "-"];
- var length = dict.length;
+ const length = dict.length;
while (pos < length) {
- var b = dict[pos++];
- var b1 = b >> 4;
- var b2 = b & 15;
+ const b = dict[pos++];
+ const b1 = b >> 4;
+ const b2 = b & 15;
if (b1 === eof) {
break;
@@ -29841,13 +26278,13 @@ var CFFParser = function CFFParserClosure() {
return parseFloat(str);
}
- var operands = [];
- var entries = [];
+ let operands = [];
+ const entries = [];
pos = 0;
- var end = dict.length;
+ const end = dict.length;
while (pos < end) {
- var b = dict[pos];
+ let b = dict[pos];
if (b <= 21) {
if (b === 12) {
@@ -29866,21 +26303,21 @@ var CFFParser = function CFFParserClosure() {
}
parseIndex(pos) {
- var cffIndex = new CFFIndex();
- var bytes = this.bytes;
- var count = bytes[pos++] << 8 | bytes[pos++];
- var offsets = [];
- var end = pos;
- var i, ii;
+ const cffIndex = new CFFIndex();
+ const bytes = this.bytes;
+ const count = bytes[pos++] << 8 | bytes[pos++];
+ const offsets = [];
+ let end = pos;
+ let i, ii;
if (count !== 0) {
- var offsetSize = bytes[pos++];
- var startPos = pos + (count + 1) * offsetSize - 1;
+ const offsetSize = bytes[pos++];
+ const startPos = pos + (count + 1) * offsetSize - 1;
for (i = 0, ii = count + 1; i < ii; ++i) {
- var offset = 0;
+ let offset = 0;
- for (var j = 0; j < offsetSize; ++j) {
+ for (let j = 0; j < offsetSize; ++j) {
offset <<= 8;
offset += bytes[pos++];
}
@@ -29892,8 +26329,8 @@ var CFFParser = function CFFParserClosure() {
}
for (i = 0, ii = offsets.length - 1; i < ii; ++i) {
- var offsetStart = offsets[i];
- var offsetEnd = offsets[i + 1];
+ const offsetStart = offsets[i];
+ const offsetEnd = offsets[i + 1];
cffIndex.add(bytes.subarray(offsetStart, offsetEnd));
}
@@ -29904,10 +26341,10 @@ var CFFParser = function CFFParserClosure() {
}
parseNameIndex(index) {
- var names = [];
+ const names = [];
- for (var i = 0, ii = index.count; i < ii; ++i) {
- var name = index.get(i);
+ for (let i = 0, ii = index.count; i < ii; ++i) {
+ const name = index.get(i);
names.push((0, _util.bytesToString)(name));
}
@@ -29915,10 +26352,10 @@ var CFFParser = function CFFParserClosure() {
}
parseStringIndex(index) {
- var strings = new CFFStrings();
+ const strings = new CFFStrings();
- for (var i = 0, ii = index.count; i < ii; ++i) {
- var data = index.get(i);
+ for (let i = 0, ii = index.count; i < ii; ++i) {
+ const data = index.get(i);
strings.add((0, _util.bytesToString)(data));
}
@@ -29926,12 +26363,12 @@ var CFFParser = function CFFParserClosure() {
}
createDict(Type, dict, strings) {
- var cffDict = new Type(strings);
+ const cffDict = new Type(strings);
- for (var i = 0, ii = dict.length; i < ii; ++i) {
- var pair = dict[i];
- var key = pair[0];
- var value = pair[1];
+ for (let i = 0, ii = dict.length; i < ii; ++i) {
+ const pair = dict[i];
+ const key = pair[0];
+ const value = pair[1];
cffDict.setByKey(key, value);
}
@@ -29943,16 +26380,16 @@ var CFFParser = function CFFParserClosure() {
return false;
}
- var stackSize = state.stackSize;
- var stack = state.stack;
- var length = data.length;
+ let stackSize = state.stackSize;
+ const stack = state.stack;
+ const length = data.length;
- for (var j = 0; j < length;) {
- var value = data[j++];
- var validationCommand = null;
+ for (let j = 0; j < length;) {
+ const value = data[j++];
+ let validationCommand = null;
if (value === 12) {
- var q = data[j++];
+ const q = data[j++];
if (q === 0) {
data[j - 2] = 139;
@@ -29993,7 +26430,7 @@ var CFFParser = function CFFParserClosure() {
stackSize %= 2;
validationCommand = CharstringValidationData[value];
} else if (value === 10 || value === 29) {
- var subrsIndex;
+ let subrsIndex;
if (value === 10) {
subrsIndex = localSubrIndex;
@@ -30007,7 +26444,7 @@ var CFFParser = function CFFParserClosure() {
return false;
}
- var bias = 32768;
+ let bias = 32768;
if (subrsIndex.count < 1240) {
bias = 107;
@@ -30015,7 +26452,7 @@ var CFFParser = function CFFParserClosure() {
bias = 1131;
}
- var subrNumber = stack[--stackSize] + bias;
+ const subrNumber = stack[--stackSize] + bias;
if (subrNumber < 0 || subrNumber >= subrsIndex.count || isNaN(subrNumber)) {
validationCommand = CharstringValidationData[value];
@@ -30025,7 +26462,7 @@ var CFFParser = function CFFParserClosure() {
state.stackSize = stackSize;
state.callDepth++;
- var valid = this.parseCharString(state, subrsIndex.get(subrNumber), localSubrIndex, globalSubrIndex);
+ const valid = this.parseCharString(state, subrsIndex.get(subrNumber), localSubrIndex, globalSubrIndex);
if (!valid) {
return false;
@@ -30037,6 +26474,9 @@ var CFFParser = function CFFParserClosure() {
} else if (value === 11) {
state.stackSize = stackSize;
return true;
+ } else if (value === 0 && j === data.length) {
+ data[j - 1] = 14;
+ validationCommand = CharstringValidationData[14];
} else {
validationCommand = CharstringValidationData[value];
}
@@ -30056,6 +26496,12 @@ var CFFParser = function CFFParserClosure() {
if ("min" in validationCommand) {
if (!state.undefStack && stackSize < validationCommand.min) {
(0, _util.warn)("Not enough parameters for " + validationCommand.id + "; actual: " + stackSize + ", expected: " + validationCommand.min);
+
+ if (stackSize === 0) {
+ data[j - 1] = 14;
+ return true;
+ }
+
return false;
}
}
@@ -30070,7 +26516,7 @@ var CFFParser = function CFFParserClosure() {
(0, _util.warn)("Found too many parameters for stack-clearing command");
}
- if (stackSize > 0 && stack[stackSize - 1] >= 0) {
+ if (stackSize > 0) {
state.width = stack[stackSize - 1];
}
}
@@ -30106,13 +26552,13 @@ var CFFParser = function CFFParserClosure() {
fdArray,
privateDict
}) {
- var seacs = [];
- var widths = [];
- var count = charStrings.count;
+ const seacs = [];
+ const widths = [];
+ const count = charStrings.count;
- for (var i = 0; i < count; i++) {
- var charstring = charStrings.get(i);
- var state = {
+ for (let i = 0; i < count; i++) {
+ const charstring = charStrings.get(i);
+ const state = {
callDepth: 0,
stackSize: 0,
stack: [],
@@ -30123,12 +26569,12 @@ var CFFParser = function CFFParserClosure() {
width: null,
hasVStems: false
};
- var valid = true;
- var localSubrToUse = null;
- var privateDictToUse = privateDict;
+ let valid = true;
+ let localSubrToUse = null;
+ let privateDictToUse = privateDict;
if (fdSelect && fdArray.length) {
- var fdIndex = fdSelect.getFDIndex(i);
+ const fdIndex = fdSelect.getFDIndex(i);
if (fdIndex === -1) {
(0, _util.warn)("Glyph index is not in fd select.");
@@ -30177,7 +26623,7 @@ var CFFParser = function CFFParserClosure() {
}
emptyPrivateDictionary(parentDict) {
- var privateDict = this.createDict(CFFPrivateDict, [], parentDict.strings);
+ const privateDict = this.createDict(CFFPrivateDict, [], parentDict.strings);
parentDict.setByKey(18, [0, 0]);
parentDict.privateDict = privateDict;
}
@@ -30188,40 +26634,40 @@ var CFFParser = function CFFParserClosure() {
return;
}
- var privateOffset = parentDict.getByName("Private");
+ const privateOffset = parentDict.getByName("Private");
if (!Array.isArray(privateOffset) || privateOffset.length !== 2) {
parentDict.removeByName("Private");
return;
}
- var size = privateOffset[0];
- var offset = privateOffset[1];
+ const size = privateOffset[0];
+ const offset = privateOffset[1];
if (size === 0 || offset >= this.bytes.length) {
this.emptyPrivateDictionary(parentDict);
return;
}
- var privateDictEnd = offset + size;
- var dictData = this.bytes.subarray(offset, privateDictEnd);
- var dict = this.parseDict(dictData);
- var privateDict = this.createDict(CFFPrivateDict, dict, parentDict.strings);
+ const privateDictEnd = offset + size;
+ const dictData = this.bytes.subarray(offset, privateDictEnd);
+ const dict = this.parseDict(dictData);
+ const privateDict = this.createDict(CFFPrivateDict, dict, parentDict.strings);
parentDict.privateDict = privateDict;
if (!privateDict.getByName("Subrs")) {
return;
}
- var subrsOffset = privateDict.getByName("Subrs");
- var relativeOffset = offset + subrsOffset;
+ const subrsOffset = privateDict.getByName("Subrs");
+ const relativeOffset = offset + subrsOffset;
if (subrsOffset === 0 || relativeOffset >= this.bytes.length) {
this.emptyPrivateDictionary(parentDict);
return;
}
- var subrsIndex = this.parseIndex(relativeOffset);
+ const subrsIndex = this.parseIndex(relativeOffset);
privateDict.subrsIndex = subrsIndex.obj;
}
@@ -30234,11 +26680,11 @@ var CFFParser = function CFFParserClosure() {
return new CFFCharset(true, CFFCharsetPredefinedTypes.EXPERT_SUBSET, _charsets.ExpertSubsetCharset);
}
- var bytes = this.bytes;
- var start = pos;
- var format = bytes[pos++];
+ const bytes = this.bytes;
+ const start = pos;
+ const format = bytes[pos++];
const charset = [cid ? 0 : ".notdef"];
- var id, count, i;
+ let id, count, i;
length -= 1;
switch (format) {
@@ -30278,24 +26724,24 @@ var CFFParser = function CFFParserClosure() {
throw new _util.FormatError("Unknown charset format");
}
- var end = pos;
- var raw = bytes.subarray(start, end);
+ const end = pos;
+ const raw = bytes.subarray(start, end);
return new CFFCharset(false, format, charset, raw);
}
parseEncoding(pos, properties, strings, charset) {
- var encoding = Object.create(null);
- var bytes = this.bytes;
- var predefined = false;
- var format, i, ii;
- var raw = null;
+ const encoding = Object.create(null);
+ const bytes = this.bytes;
+ let predefined = false;
+ let format, i, ii;
+ let raw = null;
function readSupplement() {
- var supplementsCount = bytes[pos++];
+ const supplementsCount = bytes[pos++];
for (i = 0; i < supplementsCount; i++) {
- var code = bytes[pos++];
- var sid = (bytes[pos++] << 8) + (bytes[pos++] & 0xff);
+ const code = bytes[pos++];
+ const sid = (bytes[pos++] << 8) + (bytes[pos++] & 0xff);
encoding[code] = charset.indexOf(strings.get(sid));
}
}
@@ -30303,22 +26749,22 @@ var CFFParser = function CFFParserClosure() {
if (pos === 0 || pos === 1) {
predefined = true;
format = pos;
- var baseEncoding = pos ? _encodings.ExpertEncoding : _encodings.StandardEncoding;
+ const baseEncoding = pos ? _encodings.ExpertEncoding : _encodings.StandardEncoding;
for (i = 0, ii = charset.length; i < ii; i++) {
- var index = baseEncoding.indexOf(charset[i]);
+ const index = baseEncoding.indexOf(charset[i]);
if (index !== -1) {
encoding[index] = i;
}
}
} else {
- var dataStart = pos;
+ const dataStart = pos;
format = bytes[pos++];
switch (format & 0x7f) {
case 0:
- var glyphsCount = bytes[pos++];
+ const glyphsCount = bytes[pos++];
for (i = 1; i <= glyphsCount; i++) {
encoding[bytes[pos++]] = i;
@@ -30327,14 +26773,14 @@ var CFFParser = function CFFParserClosure() {
break;
case 1:
- var rangesCount = bytes[pos++];
- var gid = 1;
+ const rangesCount = bytes[pos++];
+ let gid = 1;
for (i = 0; i < rangesCount; i++) {
- var start = bytes[pos++];
- var left = bytes[pos++];
+ const start = bytes[pos++];
+ const left = bytes[pos++];
- for (var j = start; j <= start + left; j++) {
+ for (let j = start; j <= start + left; j++) {
encoding[j] = gid++;
}
}
@@ -30345,7 +26791,7 @@ var CFFParser = function CFFParserClosure() {
throw new _util.FormatError(`Unknown encoding format: ${format} in CFF`);
}
- var dataEnd = pos;
+ const dataEnd = pos;
if (format & 0x80) {
bytes[dataStart] &= 0x7f;
@@ -30355,40 +26801,40 @@ var CFFParser = function CFFParserClosure() {
raw = bytes.subarray(dataStart, dataEnd);
}
- format = format & 0x7f;
+ format &= 0x7f;
return new CFFEncoding(predefined, format, encoding, raw);
}
parseFDSelect(pos, length) {
- var bytes = this.bytes;
- var format = bytes[pos++];
- var fdSelect = [];
- var i;
+ const bytes = this.bytes;
+ const format = bytes[pos++];
+ const fdSelect = [];
+ let i;
switch (format) {
case 0:
for (i = 0; i < length; ++i) {
- var id = bytes[pos++];
+ const id = bytes[pos++];
fdSelect.push(id);
}
break;
case 3:
- var rangesCount = bytes[pos++] << 8 | bytes[pos++];
+ const rangesCount = bytes[pos++] << 8 | bytes[pos++];
for (i = 0; i < rangesCount; ++i) {
- var first = bytes[pos++] << 8 | bytes[pos++];
+ let first = bytes[pos++] << 8 | bytes[pos++];
if (i === 0 && first !== 0) {
(0, _util.warn)("parseFDSelect: The first range must have a first GID of 0" + " -- trying to recover.");
first = 0;
}
- var fdIndex = bytes[pos++];
- var next = bytes[pos] << 8 | bytes[pos + 1];
+ const fdIndex = bytes[pos++];
+ const next = bytes[pos] << 8 | bytes[pos + 1];
- for (var j = first; j < next; ++j) {
+ for (let j = first; j < next; ++j) {
fdSelect.push(fdIndex);
}
}
@@ -30435,7 +26881,7 @@ class CFF {
return;
}
- var glyphZero = this.charStrings.get(0);
+ const glyphZero = this.charStrings.get(0);
this.charStrings.add(glyphZero);
if (this.isCIDFont) {
@@ -30448,7 +26894,7 @@ class CFF {
return false;
}
- var glyph = this.charStrings.get(id);
+ const glyph = this.charStrings.get(id);
return glyph.length > 0;
}
@@ -30558,20 +27004,20 @@ class CFFDict {
return false;
}
- var valueLength = value.length;
+ const valueLength = value.length;
if (valueLength === 0) {
return true;
}
- for (var i = 0; i < valueLength; i++) {
+ for (let i = 0; i < valueLength; i++) {
if (isNaN(value[i])) {
(0, _util.warn)('Invalid CFFDict value: "' + value + '" for key "' + key + '".');
return true;
}
}
- var type = this.types[key];
+ const type = this.types[key];
if (type === "num" || type === "sid" || type === "offset") {
value = value[0];
@@ -30598,7 +27044,7 @@ class CFFDict {
throw new _util.FormatError(`Invalid dictionary name ${name}"`);
}
- var key = this.nameToKeyMap[name];
+ const key = this.nameToKeyMap[name];
if (!(key in this.values)) {
return this.defaults[key];
@@ -30612,7 +27058,7 @@ class CFFDict {
}
static createTables(layout) {
- var tables = {
+ const tables = {
keyToNameMap: {},
nameToKeyMap: {},
defaults: {},
@@ -30621,9 +27067,9 @@ class CFFDict {
order: []
};
- for (var i = 0, ii = layout.length; i < ii; ++i) {
- var entry = layout[i];
- var key = Array.isArray(entry[0]) ? (entry[0][0] << 8) + entry[0][1] : entry[0];
+ for (let i = 0, ii = layout.length; i < ii; ++i) {
+ const entry = layout[i];
+ const key = Array.isArray(entry[0]) ? (entry[0][0] << 8) + entry[0][1] : entry[0];
tables.keyToNameMap[key] = entry[1];
tables.nameToKeyMap[entry[1]] = key;
tables.types[key] = entry[2];
@@ -30637,9 +27083,9 @@ class CFFDict {
}
-var CFFTopDict = function CFFTopDictClosure() {
- var layout = [[[12, 30], "ROS", ["sid", "sid", "num"], null], [[12, 20], "SyntheticBase", "num", null], [0, "version", "sid", null], [1, "Notice", "sid", null], [[12, 0], "Copyright", "sid", null], [2, "FullName", "sid", null], [3, "FamilyName", "sid", null], [4, "Weight", "sid", null], [[12, 1], "isFixedPitch", "num", 0], [[12, 2], "ItalicAngle", "num", 0], [[12, 3], "UnderlinePosition", "num", -100], [[12, 4], "UnderlineThickness", "num", 50], [[12, 5], "PaintType", "num", 0], [[12, 6], "CharstringType", "num", 2], [[12, 7], "FontMatrix", ["num", "num", "num", "num", "num", "num"], [0.001, 0, 0, 0.001, 0, 0]], [13, "UniqueID", "num", null], [5, "FontBBox", ["num", "num", "num", "num"], [0, 0, 0, 0]], [[12, 8], "StrokeWidth", "num", 0], [14, "XUID", "array", null], [15, "charset", "offset", 0], [16, "Encoding", "offset", 0], [17, "CharStrings", "offset", 0], [18, "Private", ["offset", "offset"], null], [[12, 21], "PostScript", "sid", null], [[12, 22], "BaseFontName", "sid", null], [[12, 23], "BaseFontBlend", "delta", null], [[12, 31], "CIDFontVersion", "num", 0], [[12, 32], "CIDFontRevision", "num", 0], [[12, 33], "CIDFontType", "num", 0], [[12, 34], "CIDCount", "num", 8720], [[12, 35], "UIDBase", "num", null], [[12, 37], "FDSelect", "offset", null], [[12, 36], "FDArray", "offset", null], [[12, 38], "FontName", "sid", null]];
- var tables = null;
+const CFFTopDict = function CFFTopDictClosure() {
+ const layout = [[[12, 30], "ROS", ["sid", "sid", "num"], null], [[12, 20], "SyntheticBase", "num", null], [0, "version", "sid", null], [1, "Notice", "sid", null], [[12, 0], "Copyright", "sid", null], [2, "FullName", "sid", null], [3, "FamilyName", "sid", null], [4, "Weight", "sid", null], [[12, 1], "isFixedPitch", "num", 0], [[12, 2], "ItalicAngle", "num", 0], [[12, 3], "UnderlinePosition", "num", -100], [[12, 4], "UnderlineThickness", "num", 50], [[12, 5], "PaintType", "num", 0], [[12, 6], "CharstringType", "num", 2], [[12, 7], "FontMatrix", ["num", "num", "num", "num", "num", "num"], [0.001, 0, 0, 0.001, 0, 0]], [13, "UniqueID", "num", null], [5, "FontBBox", ["num", "num", "num", "num"], [0, 0, 0, 0]], [[12, 8], "StrokeWidth", "num", 0], [14, "XUID", "array", null], [15, "charset", "offset", 0], [16, "Encoding", "offset", 0], [17, "CharStrings", "offset", 0], [18, "Private", ["offset", "offset"], null], [[12, 21], "PostScript", "sid", null], [[12, 22], "BaseFontName", "sid", null], [[12, 23], "BaseFontBlend", "delta", null], [[12, 31], "CIDFontVersion", "num", 0], [[12, 32], "CIDFontRevision", "num", 0], [[12, 33], "CIDFontType", "num", 0], [[12, 34], "CIDCount", "num", 8720], [[12, 35], "UIDBase", "num", null], [[12, 37], "FDSelect", "offset", null], [[12, 36], "FDArray", "offset", null], [[12, 38], "FontName", "sid", null]];
+ let tables = null;
class CFFTopDict extends CFFDict {
constructor(strings) {
@@ -30658,9 +27104,9 @@ var CFFTopDict = function CFFTopDictClosure() {
exports.CFFTopDict = CFFTopDict;
-var CFFPrivateDict = function CFFPrivateDictClosure() {
- var layout = [[6, "BlueValues", "delta", null], [7, "OtherBlues", "delta", null], [8, "FamilyBlues", "delta", null], [9, "FamilyOtherBlues", "delta", null], [[12, 9], "BlueScale", "num", 0.039625], [[12, 10], "BlueShift", "num", 7], [[12, 11], "BlueFuzz", "num", 1], [10, "StdHW", "num", null], [11, "StdVW", "num", null], [[12, 12], "StemSnapH", "delta", null], [[12, 13], "StemSnapV", "delta", null], [[12, 14], "ForceBold", "num", 0], [[12, 17], "LanguageGroup", "num", 0], [[12, 18], "ExpansionFactor", "num", 0.06], [[12, 19], "initialRandomSeed", "num", 0], [20, "defaultWidthX", "num", 0], [21, "nominalWidthX", "num", 0], [19, "Subrs", "offset", null]];
- var tables = null;
+const CFFPrivateDict = function CFFPrivateDictClosure() {
+ const layout = [[6, "BlueValues", "delta", null], [7, "OtherBlues", "delta", null], [8, "FamilyBlues", "delta", null], [9, "FamilyOtherBlues", "delta", null], [[12, 9], "BlueScale", "num", 0.039625], [[12, 10], "BlueShift", "num", 7], [[12, 11], "BlueFuzz", "num", 1], [10, "StdHW", "num", null], [11, "StdVW", "num", null], [[12, 12], "StemSnapH", "delta", null], [[12, 13], "StemSnapV", "delta", null], [[12, 14], "ForceBold", "num", 0], [[12, 17], "LanguageGroup", "num", 0], [[12, 18], "ExpansionFactor", "num", 0.06], [[12, 19], "initialRandomSeed", "num", 0], [20, "defaultWidthX", "num", 0], [21, "nominalWidthX", "num", 0], [19, "Subrs", "offset", null]];
+ let tables = null;
class CFFPrivateDict extends CFFDict {
constructor(strings) {
@@ -30678,7 +27124,7 @@ var CFFPrivateDict = function CFFPrivateDictClosure() {
}();
exports.CFFPrivateDict = CFFPrivateDict;
-var CFFCharsetPredefinedTypes = {
+const CFFCharsetPredefinedTypes = {
ISO_ADOBE: 0,
EXPERT: 1,
EXPERT_SUBSET: 2
@@ -30742,7 +27188,7 @@ class CFFOffsetTracker {
}
offset(value) {
- for (var key in this.offsets) {
+ for (const key in this.offsets) {
this.offsets[key] += value;
}
}
@@ -30752,22 +27198,22 @@ class CFFOffsetTracker {
throw new _util.FormatError(`Not tracking location of ${key}`);
}
- var data = output.data;
- var dataOffset = this.offsets[key];
- var size = 5;
+ const data = output.data;
+ const dataOffset = this.offsets[key];
+ const size = 5;
- for (var i = 0, ii = values.length; i < ii; ++i) {
- var offset0 = i * size + dataOffset;
- var offset1 = offset0 + 1;
- var offset2 = offset0 + 2;
- var offset3 = offset0 + 3;
- var offset4 = offset0 + 4;
+ for (let i = 0, ii = values.length; i < ii; ++i) {
+ const offset0 = i * size + dataOffset;
+ const offset1 = offset0 + 1;
+ const offset2 = offset0 + 2;
+ const offset3 = offset0 + 3;
+ const offset4 = offset0 + 4;
if (data[offset0] !== 0x1d || data[offset1] !== 0 || data[offset2] !== 0 || data[offset3] !== 0 || data[offset4] !== 0) {
throw new _util.FormatError("writing to an offset that is not empty");
}
- var value = values[i];
+ const value = values[i];
data[offset0] = 0x1d;
data[offset1] = value >> 24 & 0xff;
data[offset2] = value >> 16 & 0xff;
@@ -30784,8 +27230,8 @@ class CFFCompiler {
}
compile() {
- var cff = this.cff;
- var output = {
+ const cff = this.cff;
+ const output = {
data: [],
length: 0,
add: function CFFCompiler_add(data) {
@@ -30793,19 +27239,19 @@ class CFFCompiler {
this.length = this.data.length;
}
};
- var header = this.compileHeader(cff.header);
+ const header = this.compileHeader(cff.header);
output.add(header);
- var nameIndex = this.compileNameIndex(cff.names);
+ const nameIndex = this.compileNameIndex(cff.names);
output.add(nameIndex);
if (cff.isCIDFont) {
if (cff.topDict.hasName("FontMatrix")) {
- var base = cff.topDict.getByName("FontMatrix");
+ const base = cff.topDict.getByName("FontMatrix");
cff.topDict.removeByName("FontMatrix");
- for (var i = 0, ii = cff.fdArray.length; i < ii; i++) {
- var subDict = cff.fdArray[i];
- var matrix = base.slice(0);
+ for (let i = 0, ii = cff.fdArray.length; i < ii; i++) {
+ const subDict = cff.fdArray[i];
+ let matrix = base.slice(0);
if (subDict.hasName("FontMatrix")) {
matrix = _util.Util.transform(matrix, subDict.getByName("FontMatrix"));
@@ -30816,40 +27262,46 @@ class CFFCompiler {
}
}
+ const xuid = cff.topDict.getByName("XUID");
+
+ if (xuid && xuid.length > 16) {
+ cff.topDict.removeByName("XUID");
+ }
+
cff.topDict.setByName("charset", 0);
- var compiled = this.compileTopDicts([cff.topDict], output.length, cff.isCIDFont);
+ let compiled = this.compileTopDicts([cff.topDict], output.length, cff.isCIDFont);
output.add(compiled.output);
- var topDictTracker = compiled.trackers[0];
- var stringIndex = this.compileStringIndex(cff.strings.strings);
+ const topDictTracker = compiled.trackers[0];
+ const stringIndex = this.compileStringIndex(cff.strings.strings);
output.add(stringIndex);
- var globalSubrIndex = this.compileIndex(cff.globalSubrIndex);
+ const globalSubrIndex = this.compileIndex(cff.globalSubrIndex);
output.add(globalSubrIndex);
if (cff.encoding && cff.topDict.hasName("Encoding")) {
if (cff.encoding.predefined) {
topDictTracker.setEntryLocation("Encoding", [cff.encoding.format], output);
} else {
- var encoding = this.compileEncoding(cff.encoding);
+ const encoding = this.compileEncoding(cff.encoding);
topDictTracker.setEntryLocation("Encoding", [output.length], output);
output.add(encoding);
}
}
- var charset = this.compileCharset(cff.charset, cff.charStrings.count, cff.strings, cff.isCIDFont);
+ const charset = this.compileCharset(cff.charset, cff.charStrings.count, cff.strings, cff.isCIDFont);
topDictTracker.setEntryLocation("charset", [output.length], output);
output.add(charset);
- var charStrings = this.compileCharStrings(cff.charStrings);
+ const charStrings = this.compileCharStrings(cff.charStrings);
topDictTracker.setEntryLocation("CharStrings", [output.length], output);
output.add(charStrings);
if (cff.isCIDFont) {
topDictTracker.setEntryLocation("FDSelect", [output.length], output);
- var fdSelect = this.compileFDSelect(cff.fdSelect);
+ const fdSelect = this.compileFDSelect(cff.fdSelect);
output.add(fdSelect);
compiled = this.compileTopDicts(cff.fdArray, output.length, true);
topDictTracker.setEntryLocation("FDArray", [output.length], output);
output.add(compiled.output);
- var fontDictTrackers = compiled.trackers;
+ const fontDictTrackers = compiled.trackers;
this.compilePrivateDicts(cff.fdArray, fontDictTrackers, output);
}
@@ -30871,19 +27323,19 @@ class CFFCompiler {
}
encodeFloat(num) {
- var value = num.toString();
- var m = CFFCompiler.EncodeFloatRegExp.exec(value);
+ let value = num.toString();
+ const m = CFFCompiler.EncodeFloatRegExp.exec(value);
if (m) {
- var epsilon = parseFloat("1e" + ((m[2] ? +m[2] : 0) + m[1].length));
+ const epsilon = parseFloat("1e" + ((m[2] ? +m[2] : 0) + m[1].length));
value = (Math.round(num * epsilon) / epsilon).toString();
}
- var nibbles = "";
- var i, ii;
+ let nibbles = "";
+ let i, ii;
for (i = 0, ii = value.length; i < ii; ++i) {
- var a = value[i];
+ const a = value[i];
if (a === "e") {
nibbles += value[++i] === "-" ? "c" : "b";
@@ -30897,7 +27349,7 @@ class CFFCompiler {
}
nibbles += nibbles.length & 1 ? "f" : "ff";
- var out = [30];
+ const out = [30];
for (i = 0, ii = nibbles.length; i < ii; i += 2) {
out.push(parseInt(nibbles.substring(i, i + 2), 16));
@@ -30907,12 +27359,12 @@ class CFFCompiler {
}
encodeInteger(value) {
- var code;
+ let code;
if (value >= -107 && value <= 107) {
code = [value + 139];
} else if (value >= 108 && value <= 1131) {
- value = value - 108;
+ value -= 108;
code = [(value >> 8) + 247, value & 0xff];
} else if (value >= -1131 && value <= -108) {
value = -value - 108;
@@ -30927,19 +27379,19 @@ class CFFCompiler {
}
compileHeader(header) {
- return [header.major, header.minor, header.hdrSize, header.offSize];
+ return [header.major, header.minor, 4, header.offSize];
}
compileNameIndex(names) {
- var nameIndex = new CFFIndex();
+ const nameIndex = new CFFIndex();
- for (var i = 0, ii = names.length; i < ii; ++i) {
- var name = names[i];
- var length = Math.min(name.length, 127);
- var sanitizedName = new Array(length);
+ for (let i = 0, ii = names.length; i < ii; ++i) {
+ const name = names[i];
+ const length = Math.min(name.length, 127);
+ let sanitizedName = new Array(length);
- for (var j = 0; j < length; j++) {
- var char = name[j];
+ for (let j = 0; j < length; j++) {
+ let char = name[j];
if (char < "!" || char > "~" || char === "[" || char === "]" || char === "(" || char === ")" || char === "{" || char === "}" || char === "<" || char === ">" || char === "/" || char === "%") {
char = "_";
@@ -30961,11 +27413,11 @@ class CFFCompiler {
}
compileTopDicts(dicts, length, removeCidKeys) {
- var fontDictTrackers = [];
- var fdArrayIndex = new CFFIndex();
+ const fontDictTrackers = [];
+ let fdArrayIndex = new CFFIndex();
- for (var i = 0, ii = dicts.length; i < ii; ++i) {
- var fontDict = dicts[i];
+ for (let i = 0, ii = dicts.length; i < ii; ++i) {
+ const fontDict = dicts[i];
if (removeCidKeys) {
fontDict.removeByName("CIDFontVersion");
@@ -30975,8 +27427,8 @@ class CFFCompiler {
fontDict.removeByName("UIDBase");
}
- var fontDictTracker = new CFFOffsetTracker();
- var fontDictData = this.compileDict(fontDict, fontDictTracker);
+ const fontDictTracker = new CFFOffsetTracker();
+ const fontDictData = this.compileDict(fontDict, fontDictTracker);
fontDictTrackers.push(fontDictTracker);
fdArrayIndex.add(fontDictData);
fontDictTracker.offset(length);
@@ -30990,17 +27442,17 @@ class CFFCompiler {
}
compilePrivateDicts(dicts, trackers, output) {
- for (var i = 0, ii = dicts.length; i < ii; ++i) {
- var fontDict = dicts[i];
- var privateDict = fontDict.privateDict;
+ for (let i = 0, ii = dicts.length; i < ii; ++i) {
+ const fontDict = dicts[i];
+ const privateDict = fontDict.privateDict;
if (!privateDict || !fontDict.hasName("Private")) {
throw new _util.FormatError("There must be a private dictionary.");
}
- var privateDictTracker = new CFFOffsetTracker();
- var privateDictData = this.compileDict(privateDict, privateDictTracker);
- var outputLength = output.length;
+ const privateDictTracker = new CFFOffsetTracker();
+ const privateDictData = this.compileDict(privateDict, privateDictTracker);
+ let outputLength = output.length;
privateDictTracker.offset(outputLength);
if (!privateDictData.length) {
@@ -31011,7 +27463,7 @@ class CFFCompiler {
output.add(privateDictData);
if (privateDict.subrsIndex && privateDict.hasName("Subrs")) {
- var subrs = this.compileIndex(privateDict.subrsIndex);
+ const subrs = this.compileIndex(privateDict.subrsIndex);
privateDictTracker.setEntryLocation("Subrs", [privateDictData.length], output);
output.add(subrs);
}
@@ -31019,18 +27471,18 @@ class CFFCompiler {
}
compileDict(dict, offsetTracker) {
- var out = [];
- var order = dict.order;
+ let out = [];
+ const order = dict.order;
- for (var i = 0; i < order.length; ++i) {
- var key = order[i];
+ for (let i = 0; i < order.length; ++i) {
+ const key = order[i];
if (!(key in dict.values)) {
continue;
}
- var values = dict.values[key];
- var types = dict.types[key];
+ let values = dict.values[key];
+ let types = dict.types[key];
if (!Array.isArray(types)) {
types = [types];
@@ -31044,9 +27496,9 @@ class CFFCompiler {
continue;
}
- for (var j = 0, jj = types.length; j < jj; ++j) {
- var type = types[j];
- var value = values[j];
+ for (let j = 0, jj = types.length; j < jj; ++j) {
+ const type = types[j];
+ const value = values[j];
switch (type) {
case "num":
@@ -31055,7 +27507,7 @@ class CFFCompiler {
break;
case "offset":
- var name = dict.keyToNameMap[key];
+ const name = dict.keyToNameMap[key];
if (!offsetTracker.isTracking(name)) {
offsetTracker.track(name, out.length);
@@ -31068,7 +27520,7 @@ class CFFCompiler {
case "delta":
out = out.concat(this.encodeNumber(value));
- for (var k = 1, kk = values.length; k < kk; ++k) {
+ for (let k = 1, kk = values.length; k < kk; ++k) {
out = out.concat(this.encodeNumber(values[k]));
}
@@ -31086,9 +27538,9 @@ class CFFCompiler {
}
compileStringIndex(strings) {
- var stringIndex = new CFFIndex();
+ const stringIndex = new CFFIndex();
- for (var i = 0, ii = strings.length; i < ii; ++i) {
+ for (let i = 0, ii = strings.length; i < ii; ++i) {
stringIndex.add((0, _util.stringToBytes)(strings[i]));
}
@@ -31096,15 +27548,15 @@ class CFFCompiler {
}
compileGlobalSubrIndex() {
- var globalSubrIndex = this.cff.globalSubrIndex;
+ const globalSubrIndex = this.cff.globalSubrIndex;
this.out.writeByteArray(this.compileIndex(globalSubrIndex));
}
compileCharStrings(charStrings) {
- var charStringsIndex = new CFFIndex();
+ const charStringsIndex = new CFFIndex();
- for (var i = 0; i < charStrings.count; i++) {
- var glyph = charStrings.get(i);
+ for (let i = 0; i < charStrings.count; i++) {
+ const glyph = charStrings.get(i);
if (glyph.length === 0) {
charStringsIndex.add(new Uint8Array([0x8b, 0x0e]));
@@ -31201,9 +27653,9 @@ class CFFCompiler {
}
compileTypedArray(data) {
- var out = [];
+ const out = [];
- for (var i = 0, ii = data.length; i < ii; ++i) {
+ for (let i = 0, ii = data.length; i < ii; ++i) {
out[i] = data[i];
}
@@ -31211,22 +27663,22 @@ class CFFCompiler {
}
compileIndex(index, trackers = []) {
- var objects = index.objects;
- var count = objects.length;
+ const objects = index.objects;
+ const count = objects.length;
if (count === 0) {
return [0, 0, 0];
}
- var data = [count >> 8 & 0xff, count & 0xff];
- var lastOffset = 1,
+ const data = [count >> 8 & 0xff, count & 0xff];
+ let lastOffset = 1,
i;
for (i = 0; i < count; ++i) {
lastOffset += objects[i].length;
}
- var offsetSize;
+ let offsetSize;
if (lastOffset < 0x100) {
offsetSize = 1;
@@ -31239,7 +27691,7 @@ class CFFCompiler {
}
data.push(offsetSize);
- var relativeOffset = 1;
+ let relativeOffset = 1;
for (i = 0; i < count + 1; i++) {
if (offsetSize === 1) {
@@ -31262,7 +27714,7 @@ class CFFCompiler {
trackers[i].offset(data.length);
}
- for (var j = 0, jj = objects[i].length; j < jj; j++) {
+ for (let j = 0, jj = objects[i].length; j < jj; j++) {
data.push(objects[i][j]);
}
}
@@ -31275,16 +27727,15 @@ class CFFCompiler {
exports.CFFCompiler = CFFCompiler;
/***/ }),
-/* 32 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 36 */
+/***/ ((__unused_webpack_module, exports) => {
-"use strict";
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
value: true
-});
-exports.ExpertSubsetCharset = exports.ExpertCharset = exports.ISOAdobeCharset = void 0;
+}));
+exports.ISOAdobeCharset = exports.ExpertSubsetCharset = exports.ExpertCharset = void 0;
const ISOAdobeCharset = [".notdef", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quoteright", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "exclamdown", "cent", "sterling", "fraction", "yen", "florin", "section", "currency", "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "endash", "dagger", "daggerdbl", "periodcentered", "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", "perthousand", "questiondown", "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent", "dieresis", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "emdash", "AE", "ordfeminine", "Lslash", "Oslash", "OE", "ordmasculine", "ae", "dotlessi", "lslash", "oslash", "oe", "germandbls", "onesuperior", "logicalnot", "mu", "trademark", "Eth", "onehalf", "plusminus", "Thorn", "onequarter", "divide", "brokenbar", "degree", "thorn", "threequarters", "twosuperior", "registered", "minus", "eth", "multiply", "threesuperior", "copyright", "Aacute", "Acircumflex", "Adieresis", "Agrave", "Aring", "Atilde", "Ccedilla", "Eacute", "Ecircumflex", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Ntilde", "Oacute", "Ocircumflex", "Odieresis", "Ograve", "Otilde", "Scaron", "Uacute", "Ucircumflex", "Udieresis", "Ugrave", "Yacute", "Ydieresis", "Zcaron", "aacute", "acircumflex", "adieresis", "agrave", "aring", "atilde", "ccedilla", "eacute", "ecircumflex", "edieresis", "egrave", "iacute", "icircumflex", "idieresis", "igrave", "ntilde", "oacute", "ocircumflex", "odieresis", "ograve", "otilde", "scaron", "uacute", "ucircumflex", "udieresis", "ugrave", "yacute", "ydieresis", "zcaron"];
exports.ISOAdobeCharset = ISOAdobeCharset;
const ExpertCharset = [".notdef", "space", "exclamsmall", "Hungarumlautsmall", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", "tsuperior", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "exclamdownsmall", "centoldstyle", "Lslashsmall", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", "Dotaccentsmall", "Macronsmall", "figuredash", "hypheninferior", "Ogoneksmall", "Ringsmall", "Cedillasmall", "onequarter", "onehalf", "threequarters", "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "zerosuperior", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall"];
@@ -31293,17 +27744,16 @@ const ExpertSubsetCharset = [".notdef", "space", "dollaroldstyle", "dollarsuperi
exports.ExpertSubsetCharset = ExpertSubsetCharset;
/***/ }),
-/* 33 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 37 */
+/***/ ((__unused_webpack_module, exports) => {
-"use strict";
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
value: true
-});
+}));
exports.getEncoding = getEncoding;
-exports.ExpertEncoding = exports.ZapfDingbatsEncoding = exports.SymbolSetEncoding = exports.MacRomanEncoding = exports.StandardEncoding = exports.WinAnsiEncoding = void 0;
+exports.ZapfDingbatsEncoding = exports.WinAnsiEncoding = exports.SymbolSetEncoding = exports.StandardEncoding = exports.MacRomanEncoding = exports.ExpertEncoding = void 0;
const ExpertEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclamsmall", "Hungarumlautsmall", "", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", "", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "", "", "", "isuperior", "", "", "lsuperior", "msuperior", "nsuperior", "osuperior", "", "", "rsuperior", "ssuperior", "tsuperior", "", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "", "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "exclamdownsmall", "centoldstyle", "Lslashsmall", "", "", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", "", "Dotaccentsmall", "", "", "Macronsmall", "", "", "figuredash", "hypheninferior", "", "", "Ogoneksmall", "Ringsmall", "Cedillasmall", "", "", "", "onequarter", "onehalf", "threequarters", "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "", "", "zerosuperior", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall"];
exports.ExpertEncoding = ExpertEncoding;
const MacExpertEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclamsmall", "Hungarumlautsmall", "centoldstyle", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "", "threequartersemdash", "", "questionsmall", "", "", "", "", "Ethsmall", "", "", "onequarter", "onehalf", "threequarters", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "", "", "", "", "", "", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "", "parenrightinferior", "Circumflexsmall", "hypheninferior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "", "", "asuperior", "centsuperior", "", "", "", "", "Aacutesmall", "Agravesmall", "Acircumflexsmall", "Adieresissmall", "Atildesmall", "Aringsmall", "Ccedillasmall", "Eacutesmall", "Egravesmall", "Ecircumflexsmall", "Edieresissmall", "Iacutesmall", "Igravesmall", "Icircumflexsmall", "Idieresissmall", "Ntildesmall", "Oacutesmall", "Ogravesmall", "Ocircumflexsmall", "Odieresissmall", "Otildesmall", "Uacutesmall", "Ugravesmall", "Ucircumflexsmall", "Udieresissmall", "", "eightsuperior", "fourinferior", "threeinferior", "sixinferior", "eightinferior", "seveninferior", "Scaronsmall", "", "centinferior", "twoinferior", "", "Dieresissmall", "", "Caronsmall", "osuperior", "fiveinferior", "", "commainferior", "periodinferior", "Yacutesmall", "", "dollarinferior", "", "", "Thornsmall", "", "nineinferior", "zeroinferior", "Zcaronsmall", "AEsmall", "Oslashsmall", "questiondownsmall", "oneinferior", "Lslashsmall", "", "", "", "", "", "", "Cedillasmall", "", "", "", "", "", "OEsmall", "figuredash", "hyphensuperior", "", "", "", "", "exclamdownsmall", "", "Ydieresissmall", "", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "ninesuperior", "zerosuperior", "", "esuperior", "rsuperior", "tsuperior", "", "", "isuperior", "ssuperior", "dsuperior", "", "", "", "", "", "lsuperior", "Ogoneksmall", "Brevesmall", "Macronsmall", "bsuperior", "nsuperior", "msuperior", "commasuperior", "periodsuperior", "Dotaccentsmall", "Ringsmall", "", "", "", ""];
@@ -31347,4557 +27797,12642 @@ function getEncoding(encodingName) {
}
/***/ }),
-/* 34 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-var getLookupTableFactory = __w_pdfjs_require__(8).getLookupTableFactory;
-var getGlyphsUnicode = getLookupTableFactory(function (t) {
- t.A = 0x0041;
- t.AE = 0x00c6;
- t.AEacute = 0x01fc;
- t.AEmacron = 0x01e2;
- t.AEsmall = 0xf7e6;
- t.Aacute = 0x00c1;
- t.Aacutesmall = 0xf7e1;
- t.Abreve = 0x0102;
- t.Abreveacute = 0x1eae;
- t.Abrevecyrillic = 0x04d0;
- t.Abrevedotbelow = 0x1eb6;
- t.Abrevegrave = 0x1eb0;
- t.Abrevehookabove = 0x1eb2;
- t.Abrevetilde = 0x1eb4;
- t.Acaron = 0x01cd;
- t.Acircle = 0x24b6;
- t.Acircumflex = 0x00c2;
- t.Acircumflexacute = 0x1ea4;
- t.Acircumflexdotbelow = 0x1eac;
- t.Acircumflexgrave = 0x1ea6;
- t.Acircumflexhookabove = 0x1ea8;
- t.Acircumflexsmall = 0xf7e2;
- t.Acircumflextilde = 0x1eaa;
- t.Acute = 0xf6c9;
- t.Acutesmall = 0xf7b4;
- t.Acyrillic = 0x0410;
- t.Adblgrave = 0x0200;
- t.Adieresis = 0x00c4;
- t.Adieresiscyrillic = 0x04d2;
- t.Adieresismacron = 0x01de;
- t.Adieresissmall = 0xf7e4;
- t.Adotbelow = 0x1ea0;
- t.Adotmacron = 0x01e0;
- t.Agrave = 0x00c0;
- t.Agravesmall = 0xf7e0;
- t.Ahookabove = 0x1ea2;
- t.Aiecyrillic = 0x04d4;
- t.Ainvertedbreve = 0x0202;
- t.Alpha = 0x0391;
- t.Alphatonos = 0x0386;
- t.Amacron = 0x0100;
- t.Amonospace = 0xff21;
- t.Aogonek = 0x0104;
- t.Aring = 0x00c5;
- t.Aringacute = 0x01fa;
- t.Aringbelow = 0x1e00;
- t.Aringsmall = 0xf7e5;
- t.Asmall = 0xf761;
- t.Atilde = 0x00c3;
- t.Atildesmall = 0xf7e3;
- t.Aybarmenian = 0x0531;
- t.B = 0x0042;
- t.Bcircle = 0x24b7;
- t.Bdotaccent = 0x1e02;
- t.Bdotbelow = 0x1e04;
- t.Becyrillic = 0x0411;
- t.Benarmenian = 0x0532;
- t.Beta = 0x0392;
- t.Bhook = 0x0181;
- t.Blinebelow = 0x1e06;
- t.Bmonospace = 0xff22;
- t.Brevesmall = 0xf6f4;
- t.Bsmall = 0xf762;
- t.Btopbar = 0x0182;
- t.C = 0x0043;
- t.Caarmenian = 0x053e;
- t.Cacute = 0x0106;
- t.Caron = 0xf6ca;
- t.Caronsmall = 0xf6f5;
- t.Ccaron = 0x010c;
- t.Ccedilla = 0x00c7;
- t.Ccedillaacute = 0x1e08;
- t.Ccedillasmall = 0xf7e7;
- t.Ccircle = 0x24b8;
- t.Ccircumflex = 0x0108;
- t.Cdot = 0x010a;
- t.Cdotaccent = 0x010a;
- t.Cedillasmall = 0xf7b8;
- t.Chaarmenian = 0x0549;
- t.Cheabkhasiancyrillic = 0x04bc;
- t.Checyrillic = 0x0427;
- t.Chedescenderabkhasiancyrillic = 0x04be;
- t.Chedescendercyrillic = 0x04b6;
- t.Chedieresiscyrillic = 0x04f4;
- t.Cheharmenian = 0x0543;
- t.Chekhakassiancyrillic = 0x04cb;
- t.Cheverticalstrokecyrillic = 0x04b8;
- t.Chi = 0x03a7;
- t.Chook = 0x0187;
- t.Circumflexsmall = 0xf6f6;
- t.Cmonospace = 0xff23;
- t.Coarmenian = 0x0551;
- t.Csmall = 0xf763;
- t.D = 0x0044;
- t.DZ = 0x01f1;
- t.DZcaron = 0x01c4;
- t.Daarmenian = 0x0534;
- t.Dafrican = 0x0189;
- t.Dcaron = 0x010e;
- t.Dcedilla = 0x1e10;
- t.Dcircle = 0x24b9;
- t.Dcircumflexbelow = 0x1e12;
- t.Dcroat = 0x0110;
- t.Ddotaccent = 0x1e0a;
- t.Ddotbelow = 0x1e0c;
- t.Decyrillic = 0x0414;
- t.Deicoptic = 0x03ee;
- t.Delta = 0x2206;
- t.Deltagreek = 0x0394;
- t.Dhook = 0x018a;
- t.Dieresis = 0xf6cb;
- t.DieresisAcute = 0xf6cc;
- t.DieresisGrave = 0xf6cd;
- t.Dieresissmall = 0xf7a8;
- t.Digammagreek = 0x03dc;
- t.Djecyrillic = 0x0402;
- t.Dlinebelow = 0x1e0e;
- t.Dmonospace = 0xff24;
- t.Dotaccentsmall = 0xf6f7;
- t.Dslash = 0x0110;
- t.Dsmall = 0xf764;
- t.Dtopbar = 0x018b;
- t.Dz = 0x01f2;
- t.Dzcaron = 0x01c5;
- t.Dzeabkhasiancyrillic = 0x04e0;
- t.Dzecyrillic = 0x0405;
- t.Dzhecyrillic = 0x040f;
- t.E = 0x0045;
- t.Eacute = 0x00c9;
- t.Eacutesmall = 0xf7e9;
- t.Ebreve = 0x0114;
- t.Ecaron = 0x011a;
- t.Ecedillabreve = 0x1e1c;
- t.Echarmenian = 0x0535;
- t.Ecircle = 0x24ba;
- t.Ecircumflex = 0x00ca;
- t.Ecircumflexacute = 0x1ebe;
- t.Ecircumflexbelow = 0x1e18;
- t.Ecircumflexdotbelow = 0x1ec6;
- t.Ecircumflexgrave = 0x1ec0;
- t.Ecircumflexhookabove = 0x1ec2;
- t.Ecircumflexsmall = 0xf7ea;
- t.Ecircumflextilde = 0x1ec4;
- t.Ecyrillic = 0x0404;
- t.Edblgrave = 0x0204;
- t.Edieresis = 0x00cb;
- t.Edieresissmall = 0xf7eb;
- t.Edot = 0x0116;
- t.Edotaccent = 0x0116;
- t.Edotbelow = 0x1eb8;
- t.Efcyrillic = 0x0424;
- t.Egrave = 0x00c8;
- t.Egravesmall = 0xf7e8;
- t.Eharmenian = 0x0537;
- t.Ehookabove = 0x1eba;
- t.Eightroman = 0x2167;
- t.Einvertedbreve = 0x0206;
- t.Eiotifiedcyrillic = 0x0464;
- t.Elcyrillic = 0x041b;
- t.Elevenroman = 0x216a;
- t.Emacron = 0x0112;
- t.Emacronacute = 0x1e16;
- t.Emacrongrave = 0x1e14;
- t.Emcyrillic = 0x041c;
- t.Emonospace = 0xff25;
- t.Encyrillic = 0x041d;
- t.Endescendercyrillic = 0x04a2;
- t.Eng = 0x014a;
- t.Enghecyrillic = 0x04a4;
- t.Enhookcyrillic = 0x04c7;
- t.Eogonek = 0x0118;
- t.Eopen = 0x0190;
- t.Epsilon = 0x0395;
- t.Epsilontonos = 0x0388;
- t.Ercyrillic = 0x0420;
- t.Ereversed = 0x018e;
- t.Ereversedcyrillic = 0x042d;
- t.Escyrillic = 0x0421;
- t.Esdescendercyrillic = 0x04aa;
- t.Esh = 0x01a9;
- t.Esmall = 0xf765;
- t.Eta = 0x0397;
- t.Etarmenian = 0x0538;
- t.Etatonos = 0x0389;
- t.Eth = 0x00d0;
- t.Ethsmall = 0xf7f0;
- t.Etilde = 0x1ebc;
- t.Etildebelow = 0x1e1a;
- t.Euro = 0x20ac;
- t.Ezh = 0x01b7;
- t.Ezhcaron = 0x01ee;
- t.Ezhreversed = 0x01b8;
- t.F = 0x0046;
- t.Fcircle = 0x24bb;
- t.Fdotaccent = 0x1e1e;
- t.Feharmenian = 0x0556;
- t.Feicoptic = 0x03e4;
- t.Fhook = 0x0191;
- t.Fitacyrillic = 0x0472;
- t.Fiveroman = 0x2164;
- t.Fmonospace = 0xff26;
- t.Fourroman = 0x2163;
- t.Fsmall = 0xf766;
- t.G = 0x0047;
- t.GBsquare = 0x3387;
- t.Gacute = 0x01f4;
- t.Gamma = 0x0393;
- t.Gammaafrican = 0x0194;
- t.Gangiacoptic = 0x03ea;
- t.Gbreve = 0x011e;
- t.Gcaron = 0x01e6;
- t.Gcedilla = 0x0122;
- t.Gcircle = 0x24bc;
- t.Gcircumflex = 0x011c;
- t.Gcommaaccent = 0x0122;
- t.Gdot = 0x0120;
- t.Gdotaccent = 0x0120;
- t.Gecyrillic = 0x0413;
- t.Ghadarmenian = 0x0542;
- t.Ghemiddlehookcyrillic = 0x0494;
- t.Ghestrokecyrillic = 0x0492;
- t.Gheupturncyrillic = 0x0490;
- t.Ghook = 0x0193;
- t.Gimarmenian = 0x0533;
- t.Gjecyrillic = 0x0403;
- t.Gmacron = 0x1e20;
- t.Gmonospace = 0xff27;
- t.Grave = 0xf6ce;
- t.Gravesmall = 0xf760;
- t.Gsmall = 0xf767;
- t.Gsmallhook = 0x029b;
- t.Gstroke = 0x01e4;
- t.H = 0x0048;
- t.H18533 = 0x25cf;
- t.H18543 = 0x25aa;
- t.H18551 = 0x25ab;
- t.H22073 = 0x25a1;
- t.HPsquare = 0x33cb;
- t.Haabkhasiancyrillic = 0x04a8;
- t.Hadescendercyrillic = 0x04b2;
- t.Hardsigncyrillic = 0x042a;
- t.Hbar = 0x0126;
- t.Hbrevebelow = 0x1e2a;
- t.Hcedilla = 0x1e28;
- t.Hcircle = 0x24bd;
- t.Hcircumflex = 0x0124;
- t.Hdieresis = 0x1e26;
- t.Hdotaccent = 0x1e22;
- t.Hdotbelow = 0x1e24;
- t.Hmonospace = 0xff28;
- t.Hoarmenian = 0x0540;
- t.Horicoptic = 0x03e8;
- t.Hsmall = 0xf768;
- t.Hungarumlaut = 0xf6cf;
- t.Hungarumlautsmall = 0xf6f8;
- t.Hzsquare = 0x3390;
- t.I = 0x0049;
- t.IAcyrillic = 0x042f;
- t.IJ = 0x0132;
- t.IUcyrillic = 0x042e;
- t.Iacute = 0x00cd;
- t.Iacutesmall = 0xf7ed;
- t.Ibreve = 0x012c;
- t.Icaron = 0x01cf;
- t.Icircle = 0x24be;
- t.Icircumflex = 0x00ce;
- t.Icircumflexsmall = 0xf7ee;
- t.Icyrillic = 0x0406;
- t.Idblgrave = 0x0208;
- t.Idieresis = 0x00cf;
- t.Idieresisacute = 0x1e2e;
- t.Idieresiscyrillic = 0x04e4;
- t.Idieresissmall = 0xf7ef;
- t.Idot = 0x0130;
- t.Idotaccent = 0x0130;
- t.Idotbelow = 0x1eca;
- t.Iebrevecyrillic = 0x04d6;
- t.Iecyrillic = 0x0415;
- t.Ifraktur = 0x2111;
- t.Igrave = 0x00cc;
- t.Igravesmall = 0xf7ec;
- t.Ihookabove = 0x1ec8;
- t.Iicyrillic = 0x0418;
- t.Iinvertedbreve = 0x020a;
- t.Iishortcyrillic = 0x0419;
- t.Imacron = 0x012a;
- t.Imacroncyrillic = 0x04e2;
- t.Imonospace = 0xff29;
- t.Iniarmenian = 0x053b;
- t.Iocyrillic = 0x0401;
- t.Iogonek = 0x012e;
- t.Iota = 0x0399;
- t.Iotaafrican = 0x0196;
- t.Iotadieresis = 0x03aa;
- t.Iotatonos = 0x038a;
- t.Ismall = 0xf769;
- t.Istroke = 0x0197;
- t.Itilde = 0x0128;
- t.Itildebelow = 0x1e2c;
- t.Izhitsacyrillic = 0x0474;
- t.Izhitsadblgravecyrillic = 0x0476;
- t.J = 0x004a;
- t.Jaarmenian = 0x0541;
- t.Jcircle = 0x24bf;
- t.Jcircumflex = 0x0134;
- t.Jecyrillic = 0x0408;
- t.Jheharmenian = 0x054b;
- t.Jmonospace = 0xff2a;
- t.Jsmall = 0xf76a;
- t.K = 0x004b;
- t.KBsquare = 0x3385;
- t.KKsquare = 0x33cd;
- t.Kabashkircyrillic = 0x04a0;
- t.Kacute = 0x1e30;
- t.Kacyrillic = 0x041a;
- t.Kadescendercyrillic = 0x049a;
- t.Kahookcyrillic = 0x04c3;
- t.Kappa = 0x039a;
- t.Kastrokecyrillic = 0x049e;
- t.Kaverticalstrokecyrillic = 0x049c;
- t.Kcaron = 0x01e8;
- t.Kcedilla = 0x0136;
- t.Kcircle = 0x24c0;
- t.Kcommaaccent = 0x0136;
- t.Kdotbelow = 0x1e32;
- t.Keharmenian = 0x0554;
- t.Kenarmenian = 0x053f;
- t.Khacyrillic = 0x0425;
- t.Kheicoptic = 0x03e6;
- t.Khook = 0x0198;
- t.Kjecyrillic = 0x040c;
- t.Klinebelow = 0x1e34;
- t.Kmonospace = 0xff2b;
- t.Koppacyrillic = 0x0480;
- t.Koppagreek = 0x03de;
- t.Ksicyrillic = 0x046e;
- t.Ksmall = 0xf76b;
- t.L = 0x004c;
- t.LJ = 0x01c7;
- t.LL = 0xf6bf;
- t.Lacute = 0x0139;
- t.Lambda = 0x039b;
- t.Lcaron = 0x013d;
- t.Lcedilla = 0x013b;
- t.Lcircle = 0x24c1;
- t.Lcircumflexbelow = 0x1e3c;
- t.Lcommaaccent = 0x013b;
- t.Ldot = 0x013f;
- t.Ldotaccent = 0x013f;
- t.Ldotbelow = 0x1e36;
- t.Ldotbelowmacron = 0x1e38;
- t.Liwnarmenian = 0x053c;
- t.Lj = 0x01c8;
- t.Ljecyrillic = 0x0409;
- t.Llinebelow = 0x1e3a;
- t.Lmonospace = 0xff2c;
- t.Lslash = 0x0141;
- t.Lslashsmall = 0xf6f9;
- t.Lsmall = 0xf76c;
- t.M = 0x004d;
- t.MBsquare = 0x3386;
- t.Macron = 0xf6d0;
- t.Macronsmall = 0xf7af;
- t.Macute = 0x1e3e;
- t.Mcircle = 0x24c2;
- t.Mdotaccent = 0x1e40;
- t.Mdotbelow = 0x1e42;
- t.Menarmenian = 0x0544;
- t.Mmonospace = 0xff2d;
- t.Msmall = 0xf76d;
- t.Mturned = 0x019c;
- t.Mu = 0x039c;
- t.N = 0x004e;
- t.NJ = 0x01ca;
- t.Nacute = 0x0143;
- t.Ncaron = 0x0147;
- t.Ncedilla = 0x0145;
- t.Ncircle = 0x24c3;
- t.Ncircumflexbelow = 0x1e4a;
- t.Ncommaaccent = 0x0145;
- t.Ndotaccent = 0x1e44;
- t.Ndotbelow = 0x1e46;
- t.Nhookleft = 0x019d;
- t.Nineroman = 0x2168;
- t.Nj = 0x01cb;
- t.Njecyrillic = 0x040a;
- t.Nlinebelow = 0x1e48;
- t.Nmonospace = 0xff2e;
- t.Nowarmenian = 0x0546;
- t.Nsmall = 0xf76e;
- t.Ntilde = 0x00d1;
- t.Ntildesmall = 0xf7f1;
- t.Nu = 0x039d;
- t.O = 0x004f;
- t.OE = 0x0152;
- t.OEsmall = 0xf6fa;
- t.Oacute = 0x00d3;
- t.Oacutesmall = 0xf7f3;
- t.Obarredcyrillic = 0x04e8;
- t.Obarreddieresiscyrillic = 0x04ea;
- t.Obreve = 0x014e;
- t.Ocaron = 0x01d1;
- t.Ocenteredtilde = 0x019f;
- t.Ocircle = 0x24c4;
- t.Ocircumflex = 0x00d4;
- t.Ocircumflexacute = 0x1ed0;
- t.Ocircumflexdotbelow = 0x1ed8;
- t.Ocircumflexgrave = 0x1ed2;
- t.Ocircumflexhookabove = 0x1ed4;
- t.Ocircumflexsmall = 0xf7f4;
- t.Ocircumflextilde = 0x1ed6;
- t.Ocyrillic = 0x041e;
- t.Odblacute = 0x0150;
- t.Odblgrave = 0x020c;
- t.Odieresis = 0x00d6;
- t.Odieresiscyrillic = 0x04e6;
- t.Odieresissmall = 0xf7f6;
- t.Odotbelow = 0x1ecc;
- t.Ogoneksmall = 0xf6fb;
- t.Ograve = 0x00d2;
- t.Ogravesmall = 0xf7f2;
- t.Oharmenian = 0x0555;
- t.Ohm = 0x2126;
- t.Ohookabove = 0x1ece;
- t.Ohorn = 0x01a0;
- t.Ohornacute = 0x1eda;
- t.Ohorndotbelow = 0x1ee2;
- t.Ohorngrave = 0x1edc;
- t.Ohornhookabove = 0x1ede;
- t.Ohorntilde = 0x1ee0;
- t.Ohungarumlaut = 0x0150;
- t.Oi = 0x01a2;
- t.Oinvertedbreve = 0x020e;
- t.Omacron = 0x014c;
- t.Omacronacute = 0x1e52;
- t.Omacrongrave = 0x1e50;
- t.Omega = 0x2126;
- t.Omegacyrillic = 0x0460;
- t.Omegagreek = 0x03a9;
- t.Omegaroundcyrillic = 0x047a;
- t.Omegatitlocyrillic = 0x047c;
- t.Omegatonos = 0x038f;
- t.Omicron = 0x039f;
- t.Omicrontonos = 0x038c;
- t.Omonospace = 0xff2f;
- t.Oneroman = 0x2160;
- t.Oogonek = 0x01ea;
- t.Oogonekmacron = 0x01ec;
- t.Oopen = 0x0186;
- t.Oslash = 0x00d8;
- t.Oslashacute = 0x01fe;
- t.Oslashsmall = 0xf7f8;
- t.Osmall = 0xf76f;
- t.Ostrokeacute = 0x01fe;
- t.Otcyrillic = 0x047e;
- t.Otilde = 0x00d5;
- t.Otildeacute = 0x1e4c;
- t.Otildedieresis = 0x1e4e;
- t.Otildesmall = 0xf7f5;
- t.P = 0x0050;
- t.Pacute = 0x1e54;
- t.Pcircle = 0x24c5;
- t.Pdotaccent = 0x1e56;
- t.Pecyrillic = 0x041f;
- t.Peharmenian = 0x054a;
- t.Pemiddlehookcyrillic = 0x04a6;
- t.Phi = 0x03a6;
- t.Phook = 0x01a4;
- t.Pi = 0x03a0;
- t.Piwrarmenian = 0x0553;
- t.Pmonospace = 0xff30;
- t.Psi = 0x03a8;
- t.Psicyrillic = 0x0470;
- t.Psmall = 0xf770;
- t.Q = 0x0051;
- t.Qcircle = 0x24c6;
- t.Qmonospace = 0xff31;
- t.Qsmall = 0xf771;
- t.R = 0x0052;
- t.Raarmenian = 0x054c;
- t.Racute = 0x0154;
- t.Rcaron = 0x0158;
- t.Rcedilla = 0x0156;
- t.Rcircle = 0x24c7;
- t.Rcommaaccent = 0x0156;
- t.Rdblgrave = 0x0210;
- t.Rdotaccent = 0x1e58;
- t.Rdotbelow = 0x1e5a;
- t.Rdotbelowmacron = 0x1e5c;
- t.Reharmenian = 0x0550;
- t.Rfraktur = 0x211c;
- t.Rho = 0x03a1;
- t.Ringsmall = 0xf6fc;
- t.Rinvertedbreve = 0x0212;
- t.Rlinebelow = 0x1e5e;
- t.Rmonospace = 0xff32;
- t.Rsmall = 0xf772;
- t.Rsmallinverted = 0x0281;
- t.Rsmallinvertedsuperior = 0x02b6;
- t.S = 0x0053;
- t.SF010000 = 0x250c;
- t.SF020000 = 0x2514;
- t.SF030000 = 0x2510;
- t.SF040000 = 0x2518;
- t.SF050000 = 0x253c;
- t.SF060000 = 0x252c;
- t.SF070000 = 0x2534;
- t.SF080000 = 0x251c;
- t.SF090000 = 0x2524;
- t.SF100000 = 0x2500;
- t.SF110000 = 0x2502;
- t.SF190000 = 0x2561;
- t.SF200000 = 0x2562;
- t.SF210000 = 0x2556;
- t.SF220000 = 0x2555;
- t.SF230000 = 0x2563;
- t.SF240000 = 0x2551;
- t.SF250000 = 0x2557;
- t.SF260000 = 0x255d;
- t.SF270000 = 0x255c;
- t.SF280000 = 0x255b;
- t.SF360000 = 0x255e;
- t.SF370000 = 0x255f;
- t.SF380000 = 0x255a;
- t.SF390000 = 0x2554;
- t.SF400000 = 0x2569;
- t.SF410000 = 0x2566;
- t.SF420000 = 0x2560;
- t.SF430000 = 0x2550;
- t.SF440000 = 0x256c;
- t.SF450000 = 0x2567;
- t.SF460000 = 0x2568;
- t.SF470000 = 0x2564;
- t.SF480000 = 0x2565;
- t.SF490000 = 0x2559;
- t.SF500000 = 0x2558;
- t.SF510000 = 0x2552;
- t.SF520000 = 0x2553;
- t.SF530000 = 0x256b;
- t.SF540000 = 0x256a;
- t.Sacute = 0x015a;
- t.Sacutedotaccent = 0x1e64;
- t.Sampigreek = 0x03e0;
- t.Scaron = 0x0160;
- t.Scarondotaccent = 0x1e66;
- t.Scaronsmall = 0xf6fd;
- t.Scedilla = 0x015e;
- t.Schwa = 0x018f;
- t.Schwacyrillic = 0x04d8;
- t.Schwadieresiscyrillic = 0x04da;
- t.Scircle = 0x24c8;
- t.Scircumflex = 0x015c;
- t.Scommaaccent = 0x0218;
- t.Sdotaccent = 0x1e60;
- t.Sdotbelow = 0x1e62;
- t.Sdotbelowdotaccent = 0x1e68;
- t.Seharmenian = 0x054d;
- t.Sevenroman = 0x2166;
- t.Shaarmenian = 0x0547;
- t.Shacyrillic = 0x0428;
- t.Shchacyrillic = 0x0429;
- t.Sheicoptic = 0x03e2;
- t.Shhacyrillic = 0x04ba;
- t.Shimacoptic = 0x03ec;
- t.Sigma = 0x03a3;
- t.Sixroman = 0x2165;
- t.Smonospace = 0xff33;
- t.Softsigncyrillic = 0x042c;
- t.Ssmall = 0xf773;
- t.Stigmagreek = 0x03da;
- t.T = 0x0054;
- t.Tau = 0x03a4;
- t.Tbar = 0x0166;
- t.Tcaron = 0x0164;
- t.Tcedilla = 0x0162;
- t.Tcircle = 0x24c9;
- t.Tcircumflexbelow = 0x1e70;
- t.Tcommaaccent = 0x0162;
- t.Tdotaccent = 0x1e6a;
- t.Tdotbelow = 0x1e6c;
- t.Tecyrillic = 0x0422;
- t.Tedescendercyrillic = 0x04ac;
- t.Tenroman = 0x2169;
- t.Tetsecyrillic = 0x04b4;
- t.Theta = 0x0398;
- t.Thook = 0x01ac;
- t.Thorn = 0x00de;
- t.Thornsmall = 0xf7fe;
- t.Threeroman = 0x2162;
- t.Tildesmall = 0xf6fe;
- t.Tiwnarmenian = 0x054f;
- t.Tlinebelow = 0x1e6e;
- t.Tmonospace = 0xff34;
- t.Toarmenian = 0x0539;
- t.Tonefive = 0x01bc;
- t.Tonesix = 0x0184;
- t.Tonetwo = 0x01a7;
- t.Tretroflexhook = 0x01ae;
- t.Tsecyrillic = 0x0426;
- t.Tshecyrillic = 0x040b;
- t.Tsmall = 0xf774;
- t.Twelveroman = 0x216b;
- t.Tworoman = 0x2161;
- t.U = 0x0055;
- t.Uacute = 0x00da;
- t.Uacutesmall = 0xf7fa;
- t.Ubreve = 0x016c;
- t.Ucaron = 0x01d3;
- t.Ucircle = 0x24ca;
- t.Ucircumflex = 0x00db;
- t.Ucircumflexbelow = 0x1e76;
- t.Ucircumflexsmall = 0xf7fb;
- t.Ucyrillic = 0x0423;
- t.Udblacute = 0x0170;
- t.Udblgrave = 0x0214;
- t.Udieresis = 0x00dc;
- t.Udieresisacute = 0x01d7;
- t.Udieresisbelow = 0x1e72;
- t.Udieresiscaron = 0x01d9;
- t.Udieresiscyrillic = 0x04f0;
- t.Udieresisgrave = 0x01db;
- t.Udieresismacron = 0x01d5;
- t.Udieresissmall = 0xf7fc;
- t.Udotbelow = 0x1ee4;
- t.Ugrave = 0x00d9;
- t.Ugravesmall = 0xf7f9;
- t.Uhookabove = 0x1ee6;
- t.Uhorn = 0x01af;
- t.Uhornacute = 0x1ee8;
- t.Uhorndotbelow = 0x1ef0;
- t.Uhorngrave = 0x1eea;
- t.Uhornhookabove = 0x1eec;
- t.Uhorntilde = 0x1eee;
- t.Uhungarumlaut = 0x0170;
- t.Uhungarumlautcyrillic = 0x04f2;
- t.Uinvertedbreve = 0x0216;
- t.Ukcyrillic = 0x0478;
- t.Umacron = 0x016a;
- t.Umacroncyrillic = 0x04ee;
- t.Umacrondieresis = 0x1e7a;
- t.Umonospace = 0xff35;
- t.Uogonek = 0x0172;
- t.Upsilon = 0x03a5;
- t.Upsilon1 = 0x03d2;
- t.Upsilonacutehooksymbolgreek = 0x03d3;
- t.Upsilonafrican = 0x01b1;
- t.Upsilondieresis = 0x03ab;
- t.Upsilondieresishooksymbolgreek = 0x03d4;
- t.Upsilonhooksymbol = 0x03d2;
- t.Upsilontonos = 0x038e;
- t.Uring = 0x016e;
- t.Ushortcyrillic = 0x040e;
- t.Usmall = 0xf775;
- t.Ustraightcyrillic = 0x04ae;
- t.Ustraightstrokecyrillic = 0x04b0;
- t.Utilde = 0x0168;
- t.Utildeacute = 0x1e78;
- t.Utildebelow = 0x1e74;
- t.V = 0x0056;
- t.Vcircle = 0x24cb;
- t.Vdotbelow = 0x1e7e;
- t.Vecyrillic = 0x0412;
- t.Vewarmenian = 0x054e;
- t.Vhook = 0x01b2;
- t.Vmonospace = 0xff36;
- t.Voarmenian = 0x0548;
- t.Vsmall = 0xf776;
- t.Vtilde = 0x1e7c;
- t.W = 0x0057;
- t.Wacute = 0x1e82;
- t.Wcircle = 0x24cc;
- t.Wcircumflex = 0x0174;
- t.Wdieresis = 0x1e84;
- t.Wdotaccent = 0x1e86;
- t.Wdotbelow = 0x1e88;
- t.Wgrave = 0x1e80;
- t.Wmonospace = 0xff37;
- t.Wsmall = 0xf777;
- t.X = 0x0058;
- t.Xcircle = 0x24cd;
- t.Xdieresis = 0x1e8c;
- t.Xdotaccent = 0x1e8a;
- t.Xeharmenian = 0x053d;
- t.Xi = 0x039e;
- t.Xmonospace = 0xff38;
- t.Xsmall = 0xf778;
- t.Y = 0x0059;
- t.Yacute = 0x00dd;
- t.Yacutesmall = 0xf7fd;
- t.Yatcyrillic = 0x0462;
- t.Ycircle = 0x24ce;
- t.Ycircumflex = 0x0176;
- t.Ydieresis = 0x0178;
- t.Ydieresissmall = 0xf7ff;
- t.Ydotaccent = 0x1e8e;
- t.Ydotbelow = 0x1ef4;
- t.Yericyrillic = 0x042b;
- t.Yerudieresiscyrillic = 0x04f8;
- t.Ygrave = 0x1ef2;
- t.Yhook = 0x01b3;
- t.Yhookabove = 0x1ef6;
- t.Yiarmenian = 0x0545;
- t.Yicyrillic = 0x0407;
- t.Yiwnarmenian = 0x0552;
- t.Ymonospace = 0xff39;
- t.Ysmall = 0xf779;
- t.Ytilde = 0x1ef8;
- t.Yusbigcyrillic = 0x046a;
- t.Yusbigiotifiedcyrillic = 0x046c;
- t.Yuslittlecyrillic = 0x0466;
- t.Yuslittleiotifiedcyrillic = 0x0468;
- t.Z = 0x005a;
- t.Zaarmenian = 0x0536;
- t.Zacute = 0x0179;
- t.Zcaron = 0x017d;
- t.Zcaronsmall = 0xf6ff;
- t.Zcircle = 0x24cf;
- t.Zcircumflex = 0x1e90;
- t.Zdot = 0x017b;
- t.Zdotaccent = 0x017b;
- t.Zdotbelow = 0x1e92;
- t.Zecyrillic = 0x0417;
- t.Zedescendercyrillic = 0x0498;
- t.Zedieresiscyrillic = 0x04de;
- t.Zeta = 0x0396;
- t.Zhearmenian = 0x053a;
- t.Zhebrevecyrillic = 0x04c1;
- t.Zhecyrillic = 0x0416;
- t.Zhedescendercyrillic = 0x0496;
- t.Zhedieresiscyrillic = 0x04dc;
- t.Zlinebelow = 0x1e94;
- t.Zmonospace = 0xff3a;
- t.Zsmall = 0xf77a;
- t.Zstroke = 0x01b5;
- t.a = 0x0061;
- t.aabengali = 0x0986;
- t.aacute = 0x00e1;
- t.aadeva = 0x0906;
- t.aagujarati = 0x0a86;
- t.aagurmukhi = 0x0a06;
- t.aamatragurmukhi = 0x0a3e;
- t.aarusquare = 0x3303;
- t.aavowelsignbengali = 0x09be;
- t.aavowelsigndeva = 0x093e;
- t.aavowelsigngujarati = 0x0abe;
- t.abbreviationmarkarmenian = 0x055f;
- t.abbreviationsigndeva = 0x0970;
- t.abengali = 0x0985;
- t.abopomofo = 0x311a;
- t.abreve = 0x0103;
- t.abreveacute = 0x1eaf;
- t.abrevecyrillic = 0x04d1;
- t.abrevedotbelow = 0x1eb7;
- t.abrevegrave = 0x1eb1;
- t.abrevehookabove = 0x1eb3;
- t.abrevetilde = 0x1eb5;
- t.acaron = 0x01ce;
- t.acircle = 0x24d0;
- t.acircumflex = 0x00e2;
- t.acircumflexacute = 0x1ea5;
- t.acircumflexdotbelow = 0x1ead;
- t.acircumflexgrave = 0x1ea7;
- t.acircumflexhookabove = 0x1ea9;
- t.acircumflextilde = 0x1eab;
- t.acute = 0x00b4;
- t.acutebelowcmb = 0x0317;
- t.acutecmb = 0x0301;
- t.acutecomb = 0x0301;
- t.acutedeva = 0x0954;
- t.acutelowmod = 0x02cf;
- t.acutetonecmb = 0x0341;
- t.acyrillic = 0x0430;
- t.adblgrave = 0x0201;
- t.addakgurmukhi = 0x0a71;
- t.adeva = 0x0905;
- t.adieresis = 0x00e4;
- t.adieresiscyrillic = 0x04d3;
- t.adieresismacron = 0x01df;
- t.adotbelow = 0x1ea1;
- t.adotmacron = 0x01e1;
- t.ae = 0x00e6;
- t.aeacute = 0x01fd;
- t.aekorean = 0x3150;
- t.aemacron = 0x01e3;
- t.afii00208 = 0x2015;
- t.afii08941 = 0x20a4;
- t.afii10017 = 0x0410;
- t.afii10018 = 0x0411;
- t.afii10019 = 0x0412;
- t.afii10020 = 0x0413;
- t.afii10021 = 0x0414;
- t.afii10022 = 0x0415;
- t.afii10023 = 0x0401;
- t.afii10024 = 0x0416;
- t.afii10025 = 0x0417;
- t.afii10026 = 0x0418;
- t.afii10027 = 0x0419;
- t.afii10028 = 0x041a;
- t.afii10029 = 0x041b;
- t.afii10030 = 0x041c;
- t.afii10031 = 0x041d;
- t.afii10032 = 0x041e;
- t.afii10033 = 0x041f;
- t.afii10034 = 0x0420;
- t.afii10035 = 0x0421;
- t.afii10036 = 0x0422;
- t.afii10037 = 0x0423;
- t.afii10038 = 0x0424;
- t.afii10039 = 0x0425;
- t.afii10040 = 0x0426;
- t.afii10041 = 0x0427;
- t.afii10042 = 0x0428;
- t.afii10043 = 0x0429;
- t.afii10044 = 0x042a;
- t.afii10045 = 0x042b;
- t.afii10046 = 0x042c;
- t.afii10047 = 0x042d;
- t.afii10048 = 0x042e;
- t.afii10049 = 0x042f;
- t.afii10050 = 0x0490;
- t.afii10051 = 0x0402;
- t.afii10052 = 0x0403;
- t.afii10053 = 0x0404;
- t.afii10054 = 0x0405;
- t.afii10055 = 0x0406;
- t.afii10056 = 0x0407;
- t.afii10057 = 0x0408;
- t.afii10058 = 0x0409;
- t.afii10059 = 0x040a;
- t.afii10060 = 0x040b;
- t.afii10061 = 0x040c;
- t.afii10062 = 0x040e;
- t.afii10063 = 0xf6c4;
- t.afii10064 = 0xf6c5;
- t.afii10065 = 0x0430;
- t.afii10066 = 0x0431;
- t.afii10067 = 0x0432;
- t.afii10068 = 0x0433;
- t.afii10069 = 0x0434;
- t.afii10070 = 0x0435;
- t.afii10071 = 0x0451;
- t.afii10072 = 0x0436;
- t.afii10073 = 0x0437;
- t.afii10074 = 0x0438;
- t.afii10075 = 0x0439;
- t.afii10076 = 0x043a;
- t.afii10077 = 0x043b;
- t.afii10078 = 0x043c;
- t.afii10079 = 0x043d;
- t.afii10080 = 0x043e;
- t.afii10081 = 0x043f;
- t.afii10082 = 0x0440;
- t.afii10083 = 0x0441;
- t.afii10084 = 0x0442;
- t.afii10085 = 0x0443;
- t.afii10086 = 0x0444;
- t.afii10087 = 0x0445;
- t.afii10088 = 0x0446;
- t.afii10089 = 0x0447;
- t.afii10090 = 0x0448;
- t.afii10091 = 0x0449;
- t.afii10092 = 0x044a;
- t.afii10093 = 0x044b;
- t.afii10094 = 0x044c;
- t.afii10095 = 0x044d;
- t.afii10096 = 0x044e;
- t.afii10097 = 0x044f;
- t.afii10098 = 0x0491;
- t.afii10099 = 0x0452;
- t.afii10100 = 0x0453;
- t.afii10101 = 0x0454;
- t.afii10102 = 0x0455;
- t.afii10103 = 0x0456;
- t.afii10104 = 0x0457;
- t.afii10105 = 0x0458;
- t.afii10106 = 0x0459;
- t.afii10107 = 0x045a;
- t.afii10108 = 0x045b;
- t.afii10109 = 0x045c;
- t.afii10110 = 0x045e;
- t.afii10145 = 0x040f;
- t.afii10146 = 0x0462;
- t.afii10147 = 0x0472;
- t.afii10148 = 0x0474;
- t.afii10192 = 0xf6c6;
- t.afii10193 = 0x045f;
- t.afii10194 = 0x0463;
- t.afii10195 = 0x0473;
- t.afii10196 = 0x0475;
- t.afii10831 = 0xf6c7;
- t.afii10832 = 0xf6c8;
- t.afii10846 = 0x04d9;
- t.afii299 = 0x200e;
- t.afii300 = 0x200f;
- t.afii301 = 0x200d;
- t.afii57381 = 0x066a;
- t.afii57388 = 0x060c;
- t.afii57392 = 0x0660;
- t.afii57393 = 0x0661;
- t.afii57394 = 0x0662;
- t.afii57395 = 0x0663;
- t.afii57396 = 0x0664;
- t.afii57397 = 0x0665;
- t.afii57398 = 0x0666;
- t.afii57399 = 0x0667;
- t.afii57400 = 0x0668;
- t.afii57401 = 0x0669;
- t.afii57403 = 0x061b;
- t.afii57407 = 0x061f;
- t.afii57409 = 0x0621;
- t.afii57410 = 0x0622;
- t.afii57411 = 0x0623;
- t.afii57412 = 0x0624;
- t.afii57413 = 0x0625;
- t.afii57414 = 0x0626;
- t.afii57415 = 0x0627;
- t.afii57416 = 0x0628;
- t.afii57417 = 0x0629;
- t.afii57418 = 0x062a;
- t.afii57419 = 0x062b;
- t.afii57420 = 0x062c;
- t.afii57421 = 0x062d;
- t.afii57422 = 0x062e;
- t.afii57423 = 0x062f;
- t.afii57424 = 0x0630;
- t.afii57425 = 0x0631;
- t.afii57426 = 0x0632;
- t.afii57427 = 0x0633;
- t.afii57428 = 0x0634;
- t.afii57429 = 0x0635;
- t.afii57430 = 0x0636;
- t.afii57431 = 0x0637;
- t.afii57432 = 0x0638;
- t.afii57433 = 0x0639;
- t.afii57434 = 0x063a;
- t.afii57440 = 0x0640;
- t.afii57441 = 0x0641;
- t.afii57442 = 0x0642;
- t.afii57443 = 0x0643;
- t.afii57444 = 0x0644;
- t.afii57445 = 0x0645;
- t.afii57446 = 0x0646;
- t.afii57448 = 0x0648;
- t.afii57449 = 0x0649;
- t.afii57450 = 0x064a;
- t.afii57451 = 0x064b;
- t.afii57452 = 0x064c;
- t.afii57453 = 0x064d;
- t.afii57454 = 0x064e;
- t.afii57455 = 0x064f;
- t.afii57456 = 0x0650;
- t.afii57457 = 0x0651;
- t.afii57458 = 0x0652;
- t.afii57470 = 0x0647;
- t.afii57505 = 0x06a4;
- t.afii57506 = 0x067e;
- t.afii57507 = 0x0686;
- t.afii57508 = 0x0698;
- t.afii57509 = 0x06af;
- t.afii57511 = 0x0679;
- t.afii57512 = 0x0688;
- t.afii57513 = 0x0691;
- t.afii57514 = 0x06ba;
- t.afii57519 = 0x06d2;
- t.afii57534 = 0x06d5;
- t.afii57636 = 0x20aa;
- t.afii57645 = 0x05be;
- t.afii57658 = 0x05c3;
- t.afii57664 = 0x05d0;
- t.afii57665 = 0x05d1;
- t.afii57666 = 0x05d2;
- t.afii57667 = 0x05d3;
- t.afii57668 = 0x05d4;
- t.afii57669 = 0x05d5;
- t.afii57670 = 0x05d6;
- t.afii57671 = 0x05d7;
- t.afii57672 = 0x05d8;
- t.afii57673 = 0x05d9;
- t.afii57674 = 0x05da;
- t.afii57675 = 0x05db;
- t.afii57676 = 0x05dc;
- t.afii57677 = 0x05dd;
- t.afii57678 = 0x05de;
- t.afii57679 = 0x05df;
- t.afii57680 = 0x05e0;
- t.afii57681 = 0x05e1;
- t.afii57682 = 0x05e2;
- t.afii57683 = 0x05e3;
- t.afii57684 = 0x05e4;
- t.afii57685 = 0x05e5;
- t.afii57686 = 0x05e6;
- t.afii57687 = 0x05e7;
- t.afii57688 = 0x05e8;
- t.afii57689 = 0x05e9;
- t.afii57690 = 0x05ea;
- t.afii57694 = 0xfb2a;
- t.afii57695 = 0xfb2b;
- t.afii57700 = 0xfb4b;
- t.afii57705 = 0xfb1f;
- t.afii57716 = 0x05f0;
- t.afii57717 = 0x05f1;
- t.afii57718 = 0x05f2;
- t.afii57723 = 0xfb35;
- t.afii57793 = 0x05b4;
- t.afii57794 = 0x05b5;
- t.afii57795 = 0x05b6;
- t.afii57796 = 0x05bb;
- t.afii57797 = 0x05b8;
- t.afii57798 = 0x05b7;
- t.afii57799 = 0x05b0;
- t.afii57800 = 0x05b2;
- t.afii57801 = 0x05b1;
- t.afii57802 = 0x05b3;
- t.afii57803 = 0x05c2;
- t.afii57804 = 0x05c1;
- t.afii57806 = 0x05b9;
- t.afii57807 = 0x05bc;
- t.afii57839 = 0x05bd;
- t.afii57841 = 0x05bf;
- t.afii57842 = 0x05c0;
- t.afii57929 = 0x02bc;
- t.afii61248 = 0x2105;
- t.afii61289 = 0x2113;
- t.afii61352 = 0x2116;
- t.afii61573 = 0x202c;
- t.afii61574 = 0x202d;
- t.afii61575 = 0x202e;
- t.afii61664 = 0x200c;
- t.afii63167 = 0x066d;
- t.afii64937 = 0x02bd;
- t.agrave = 0x00e0;
- t.agujarati = 0x0a85;
- t.agurmukhi = 0x0a05;
- t.ahiragana = 0x3042;
- t.ahookabove = 0x1ea3;
- t.aibengali = 0x0990;
- t.aibopomofo = 0x311e;
- t.aideva = 0x0910;
- t.aiecyrillic = 0x04d5;
- t.aigujarati = 0x0a90;
- t.aigurmukhi = 0x0a10;
- t.aimatragurmukhi = 0x0a48;
- t.ainarabic = 0x0639;
- t.ainfinalarabic = 0xfeca;
- t.aininitialarabic = 0xfecb;
- t.ainmedialarabic = 0xfecc;
- t.ainvertedbreve = 0x0203;
- t.aivowelsignbengali = 0x09c8;
- t.aivowelsigndeva = 0x0948;
- t.aivowelsigngujarati = 0x0ac8;
- t.akatakana = 0x30a2;
- t.akatakanahalfwidth = 0xff71;
- t.akorean = 0x314f;
- t.alef = 0x05d0;
- t.alefarabic = 0x0627;
- t.alefdageshhebrew = 0xfb30;
- t.aleffinalarabic = 0xfe8e;
- t.alefhamzaabovearabic = 0x0623;
- t.alefhamzaabovefinalarabic = 0xfe84;
- t.alefhamzabelowarabic = 0x0625;
- t.alefhamzabelowfinalarabic = 0xfe88;
- t.alefhebrew = 0x05d0;
- t.aleflamedhebrew = 0xfb4f;
- t.alefmaddaabovearabic = 0x0622;
- t.alefmaddaabovefinalarabic = 0xfe82;
- t.alefmaksuraarabic = 0x0649;
- t.alefmaksurafinalarabic = 0xfef0;
- t.alefmaksurainitialarabic = 0xfef3;
- t.alefmaksuramedialarabic = 0xfef4;
- t.alefpatahhebrew = 0xfb2e;
- t.alefqamatshebrew = 0xfb2f;
- t.aleph = 0x2135;
- t.allequal = 0x224c;
- t.alpha = 0x03b1;
- t.alphatonos = 0x03ac;
- t.amacron = 0x0101;
- t.amonospace = 0xff41;
- t.ampersand = 0x0026;
- t.ampersandmonospace = 0xff06;
- t.ampersandsmall = 0xf726;
- t.amsquare = 0x33c2;
- t.anbopomofo = 0x3122;
- t.angbopomofo = 0x3124;
- t.angbracketleft = 0x3008;
- t.angbracketright = 0x3009;
- t.angkhankhuthai = 0x0e5a;
- t.angle = 0x2220;
- t.anglebracketleft = 0x3008;
- t.anglebracketleftvertical = 0xfe3f;
- t.anglebracketright = 0x3009;
- t.anglebracketrightvertical = 0xfe40;
- t.angleleft = 0x2329;
- t.angleright = 0x232a;
- t.angstrom = 0x212b;
- t.anoteleia = 0x0387;
- t.anudattadeva = 0x0952;
- t.anusvarabengali = 0x0982;
- t.anusvaradeva = 0x0902;
- t.anusvaragujarati = 0x0a82;
- t.aogonek = 0x0105;
- t.apaatosquare = 0x3300;
- t.aparen = 0x249c;
- t.apostrophearmenian = 0x055a;
- t.apostrophemod = 0x02bc;
- t.apple = 0xf8ff;
- t.approaches = 0x2250;
- t.approxequal = 0x2248;
- t.approxequalorimage = 0x2252;
- t.approximatelyequal = 0x2245;
- t.araeaekorean = 0x318e;
- t.araeakorean = 0x318d;
- t.arc = 0x2312;
- t.arighthalfring = 0x1e9a;
- t.aring = 0x00e5;
- t.aringacute = 0x01fb;
- t.aringbelow = 0x1e01;
- t.arrowboth = 0x2194;
- t.arrowdashdown = 0x21e3;
- t.arrowdashleft = 0x21e0;
- t.arrowdashright = 0x21e2;
- t.arrowdashup = 0x21e1;
- t.arrowdblboth = 0x21d4;
- t.arrowdbldown = 0x21d3;
- t.arrowdblleft = 0x21d0;
- t.arrowdblright = 0x21d2;
- t.arrowdblup = 0x21d1;
- t.arrowdown = 0x2193;
- t.arrowdownleft = 0x2199;
- t.arrowdownright = 0x2198;
- t.arrowdownwhite = 0x21e9;
- t.arrowheaddownmod = 0x02c5;
- t.arrowheadleftmod = 0x02c2;
- t.arrowheadrightmod = 0x02c3;
- t.arrowheadupmod = 0x02c4;
- t.arrowhorizex = 0xf8e7;
- t.arrowleft = 0x2190;
- t.arrowleftdbl = 0x21d0;
- t.arrowleftdblstroke = 0x21cd;
- t.arrowleftoverright = 0x21c6;
- t.arrowleftwhite = 0x21e6;
- t.arrowright = 0x2192;
- t.arrowrightdblstroke = 0x21cf;
- t.arrowrightheavy = 0x279e;
- t.arrowrightoverleft = 0x21c4;
- t.arrowrightwhite = 0x21e8;
- t.arrowtableft = 0x21e4;
- t.arrowtabright = 0x21e5;
- t.arrowup = 0x2191;
- t.arrowupdn = 0x2195;
- t.arrowupdnbse = 0x21a8;
- t.arrowupdownbase = 0x21a8;
- t.arrowupleft = 0x2196;
- t.arrowupleftofdown = 0x21c5;
- t.arrowupright = 0x2197;
- t.arrowupwhite = 0x21e7;
- t.arrowvertex = 0xf8e6;
- t.asciicircum = 0x005e;
- t.asciicircummonospace = 0xff3e;
- t.asciitilde = 0x007e;
- t.asciitildemonospace = 0xff5e;
- t.ascript = 0x0251;
- t.ascriptturned = 0x0252;
- t.asmallhiragana = 0x3041;
- t.asmallkatakana = 0x30a1;
- t.asmallkatakanahalfwidth = 0xff67;
- t.asterisk = 0x002a;
- t.asteriskaltonearabic = 0x066d;
- t.asteriskarabic = 0x066d;
- t.asteriskmath = 0x2217;
- t.asteriskmonospace = 0xff0a;
- t.asterisksmall = 0xfe61;
- t.asterism = 0x2042;
- t.asuperior = 0xf6e9;
- t.asymptoticallyequal = 0x2243;
- t.at = 0x0040;
- t.atilde = 0x00e3;
- t.atmonospace = 0xff20;
- t.atsmall = 0xfe6b;
- t.aturned = 0x0250;
- t.aubengali = 0x0994;
- t.aubopomofo = 0x3120;
- t.audeva = 0x0914;
- t.augujarati = 0x0a94;
- t.augurmukhi = 0x0a14;
- t.aulengthmarkbengali = 0x09d7;
- t.aumatragurmukhi = 0x0a4c;
- t.auvowelsignbengali = 0x09cc;
- t.auvowelsigndeva = 0x094c;
- t.auvowelsigngujarati = 0x0acc;
- t.avagrahadeva = 0x093d;
- t.aybarmenian = 0x0561;
- t.ayin = 0x05e2;
- t.ayinaltonehebrew = 0xfb20;
- t.ayinhebrew = 0x05e2;
- t.b = 0x0062;
- t.babengali = 0x09ac;
- t.backslash = 0x005c;
- t.backslashmonospace = 0xff3c;
- t.badeva = 0x092c;
- t.bagujarati = 0x0aac;
- t.bagurmukhi = 0x0a2c;
- t.bahiragana = 0x3070;
- t.bahtthai = 0x0e3f;
- t.bakatakana = 0x30d0;
- t.bar = 0x007c;
- t.barmonospace = 0xff5c;
- t.bbopomofo = 0x3105;
- t.bcircle = 0x24d1;
- t.bdotaccent = 0x1e03;
- t.bdotbelow = 0x1e05;
- t.beamedsixteenthnotes = 0x266c;
- t.because = 0x2235;
- t.becyrillic = 0x0431;
- t.beharabic = 0x0628;
- t.behfinalarabic = 0xfe90;
- t.behinitialarabic = 0xfe91;
- t.behiragana = 0x3079;
- t.behmedialarabic = 0xfe92;
- t.behmeeminitialarabic = 0xfc9f;
- t.behmeemisolatedarabic = 0xfc08;
- t.behnoonfinalarabic = 0xfc6d;
- t.bekatakana = 0x30d9;
- t.benarmenian = 0x0562;
- t.bet = 0x05d1;
- t.beta = 0x03b2;
- t.betasymbolgreek = 0x03d0;
- t.betdagesh = 0xfb31;
- t.betdageshhebrew = 0xfb31;
- t.bethebrew = 0x05d1;
- t.betrafehebrew = 0xfb4c;
- t.bhabengali = 0x09ad;
- t.bhadeva = 0x092d;
- t.bhagujarati = 0x0aad;
- t.bhagurmukhi = 0x0a2d;
- t.bhook = 0x0253;
- t.bihiragana = 0x3073;
- t.bikatakana = 0x30d3;
- t.bilabialclick = 0x0298;
- t.bindigurmukhi = 0x0a02;
- t.birusquare = 0x3331;
- t.blackcircle = 0x25cf;
- t.blackdiamond = 0x25c6;
- t.blackdownpointingtriangle = 0x25bc;
- t.blackleftpointingpointer = 0x25c4;
- t.blackleftpointingtriangle = 0x25c0;
- t.blacklenticularbracketleft = 0x3010;
- t.blacklenticularbracketleftvertical = 0xfe3b;
- t.blacklenticularbracketright = 0x3011;
- t.blacklenticularbracketrightvertical = 0xfe3c;
- t.blacklowerlefttriangle = 0x25e3;
- t.blacklowerrighttriangle = 0x25e2;
- t.blackrectangle = 0x25ac;
- t.blackrightpointingpointer = 0x25ba;
- t.blackrightpointingtriangle = 0x25b6;
- t.blacksmallsquare = 0x25aa;
- t.blacksmilingface = 0x263b;
- t.blacksquare = 0x25a0;
- t.blackstar = 0x2605;
- t.blackupperlefttriangle = 0x25e4;
- t.blackupperrighttriangle = 0x25e5;
- t.blackuppointingsmalltriangle = 0x25b4;
- t.blackuppointingtriangle = 0x25b2;
- t.blank = 0x2423;
- t.blinebelow = 0x1e07;
- t.block = 0x2588;
- t.bmonospace = 0xff42;
- t.bobaimaithai = 0x0e1a;
- t.bohiragana = 0x307c;
- t.bokatakana = 0x30dc;
- t.bparen = 0x249d;
- t.bqsquare = 0x33c3;
- t.braceex = 0xf8f4;
- t.braceleft = 0x007b;
- t.braceleftbt = 0xf8f3;
- t.braceleftmid = 0xf8f2;
- t.braceleftmonospace = 0xff5b;
- t.braceleftsmall = 0xfe5b;
- t.bracelefttp = 0xf8f1;
- t.braceleftvertical = 0xfe37;
- t.braceright = 0x007d;
- t.bracerightbt = 0xf8fe;
- t.bracerightmid = 0xf8fd;
- t.bracerightmonospace = 0xff5d;
- t.bracerightsmall = 0xfe5c;
- t.bracerighttp = 0xf8fc;
- t.bracerightvertical = 0xfe38;
- t.bracketleft = 0x005b;
- t.bracketleftbt = 0xf8f0;
- t.bracketleftex = 0xf8ef;
- t.bracketleftmonospace = 0xff3b;
- t.bracketlefttp = 0xf8ee;
- t.bracketright = 0x005d;
- t.bracketrightbt = 0xf8fb;
- t.bracketrightex = 0xf8fa;
- t.bracketrightmonospace = 0xff3d;
- t.bracketrighttp = 0xf8f9;
- t.breve = 0x02d8;
- t.brevebelowcmb = 0x032e;
- t.brevecmb = 0x0306;
- t.breveinvertedbelowcmb = 0x032f;
- t.breveinvertedcmb = 0x0311;
- t.breveinverteddoublecmb = 0x0361;
- t.bridgebelowcmb = 0x032a;
- t.bridgeinvertedbelowcmb = 0x033a;
- t.brokenbar = 0x00a6;
- t.bstroke = 0x0180;
- t.bsuperior = 0xf6ea;
- t.btopbar = 0x0183;
- t.buhiragana = 0x3076;
- t.bukatakana = 0x30d6;
- t.bullet = 0x2022;
- t.bulletinverse = 0x25d8;
- t.bulletoperator = 0x2219;
- t.bullseye = 0x25ce;
- t.c = 0x0063;
- t.caarmenian = 0x056e;
- t.cabengali = 0x099a;
- t.cacute = 0x0107;
- t.cadeva = 0x091a;
- t.cagujarati = 0x0a9a;
- t.cagurmukhi = 0x0a1a;
- t.calsquare = 0x3388;
- t.candrabindubengali = 0x0981;
- t.candrabinducmb = 0x0310;
- t.candrabindudeva = 0x0901;
- t.candrabindugujarati = 0x0a81;
- t.capslock = 0x21ea;
- t.careof = 0x2105;
- t.caron = 0x02c7;
- t.caronbelowcmb = 0x032c;
- t.caroncmb = 0x030c;
- t.carriagereturn = 0x21b5;
- t.cbopomofo = 0x3118;
- t.ccaron = 0x010d;
- t.ccedilla = 0x00e7;
- t.ccedillaacute = 0x1e09;
- t.ccircle = 0x24d2;
- t.ccircumflex = 0x0109;
- t.ccurl = 0x0255;
- t.cdot = 0x010b;
- t.cdotaccent = 0x010b;
- t.cdsquare = 0x33c5;
- t.cedilla = 0x00b8;
- t.cedillacmb = 0x0327;
- t.cent = 0x00a2;
- t.centigrade = 0x2103;
- t.centinferior = 0xf6df;
- t.centmonospace = 0xffe0;
- t.centoldstyle = 0xf7a2;
- t.centsuperior = 0xf6e0;
- t.chaarmenian = 0x0579;
- t.chabengali = 0x099b;
- t.chadeva = 0x091b;
- t.chagujarati = 0x0a9b;
- t.chagurmukhi = 0x0a1b;
- t.chbopomofo = 0x3114;
- t.cheabkhasiancyrillic = 0x04bd;
- t.checkmark = 0x2713;
- t.checyrillic = 0x0447;
- t.chedescenderabkhasiancyrillic = 0x04bf;
- t.chedescendercyrillic = 0x04b7;
- t.chedieresiscyrillic = 0x04f5;
- t.cheharmenian = 0x0573;
- t.chekhakassiancyrillic = 0x04cc;
- t.cheverticalstrokecyrillic = 0x04b9;
- t.chi = 0x03c7;
- t.chieuchacirclekorean = 0x3277;
- t.chieuchaparenkorean = 0x3217;
- t.chieuchcirclekorean = 0x3269;
- t.chieuchkorean = 0x314a;
- t.chieuchparenkorean = 0x3209;
- t.chochangthai = 0x0e0a;
- t.chochanthai = 0x0e08;
- t.chochingthai = 0x0e09;
- t.chochoethai = 0x0e0c;
- t.chook = 0x0188;
- t.cieucacirclekorean = 0x3276;
- t.cieucaparenkorean = 0x3216;
- t.cieuccirclekorean = 0x3268;
- t.cieuckorean = 0x3148;
- t.cieucparenkorean = 0x3208;
- t.cieucuparenkorean = 0x321c;
- t.circle = 0x25cb;
- t.circlecopyrt = 0x00a9;
- t.circlemultiply = 0x2297;
- t.circleot = 0x2299;
- t.circleplus = 0x2295;
- t.circlepostalmark = 0x3036;
- t.circlewithlefthalfblack = 0x25d0;
- t.circlewithrighthalfblack = 0x25d1;
- t.circumflex = 0x02c6;
- t.circumflexbelowcmb = 0x032d;
- t.circumflexcmb = 0x0302;
- t.clear = 0x2327;
- t.clickalveolar = 0x01c2;
- t.clickdental = 0x01c0;
- t.clicklateral = 0x01c1;
- t.clickretroflex = 0x01c3;
- t.club = 0x2663;
- t.clubsuitblack = 0x2663;
- t.clubsuitwhite = 0x2667;
- t.cmcubedsquare = 0x33a4;
- t.cmonospace = 0xff43;
- t.cmsquaredsquare = 0x33a0;
- t.coarmenian = 0x0581;
- t.colon = 0x003a;
- t.colonmonetary = 0x20a1;
- t.colonmonospace = 0xff1a;
- t.colonsign = 0x20a1;
- t.colonsmall = 0xfe55;
- t.colontriangularhalfmod = 0x02d1;
- t.colontriangularmod = 0x02d0;
- t.comma = 0x002c;
- t.commaabovecmb = 0x0313;
- t.commaaboverightcmb = 0x0315;
- t.commaaccent = 0xf6c3;
- t.commaarabic = 0x060c;
- t.commaarmenian = 0x055d;
- t.commainferior = 0xf6e1;
- t.commamonospace = 0xff0c;
- t.commareversedabovecmb = 0x0314;
- t.commareversedmod = 0x02bd;
- t.commasmall = 0xfe50;
- t.commasuperior = 0xf6e2;
- t.commaturnedabovecmb = 0x0312;
- t.commaturnedmod = 0x02bb;
- t.compass = 0x263c;
- t.congruent = 0x2245;
- t.contourintegral = 0x222e;
- t.control = 0x2303;
- t.controlACK = 0x0006;
- t.controlBEL = 0x0007;
- t.controlBS = 0x0008;
- t.controlCAN = 0x0018;
- t.controlCR = 0x000d;
- t.controlDC1 = 0x0011;
- t.controlDC2 = 0x0012;
- t.controlDC3 = 0x0013;
- t.controlDC4 = 0x0014;
- t.controlDEL = 0x007f;
- t.controlDLE = 0x0010;
- t.controlEM = 0x0019;
- t.controlENQ = 0x0005;
- t.controlEOT = 0x0004;
- t.controlESC = 0x001b;
- t.controlETB = 0x0017;
- t.controlETX = 0x0003;
- t.controlFF = 0x000c;
- t.controlFS = 0x001c;
- t.controlGS = 0x001d;
- t.controlHT = 0x0009;
- t.controlLF = 0x000a;
- t.controlNAK = 0x0015;
- t.controlNULL = 0x0000;
- t.controlRS = 0x001e;
- t.controlSI = 0x000f;
- t.controlSO = 0x000e;
- t.controlSOT = 0x0002;
- t.controlSTX = 0x0001;
- t.controlSUB = 0x001a;
- t.controlSYN = 0x0016;
- t.controlUS = 0x001f;
- t.controlVT = 0x000b;
- t.copyright = 0x00a9;
- t.copyrightsans = 0xf8e9;
- t.copyrightserif = 0xf6d9;
- t.cornerbracketleft = 0x300c;
- t.cornerbracketlefthalfwidth = 0xff62;
- t.cornerbracketleftvertical = 0xfe41;
- t.cornerbracketright = 0x300d;
- t.cornerbracketrighthalfwidth = 0xff63;
- t.cornerbracketrightvertical = 0xfe42;
- t.corporationsquare = 0x337f;
- t.cosquare = 0x33c7;
- t.coverkgsquare = 0x33c6;
- t.cparen = 0x249e;
- t.cruzeiro = 0x20a2;
- t.cstretched = 0x0297;
- t.curlyand = 0x22cf;
- t.curlyor = 0x22ce;
- t.currency = 0x00a4;
- t.cyrBreve = 0xf6d1;
- t.cyrFlex = 0xf6d2;
- t.cyrbreve = 0xf6d4;
- t.cyrflex = 0xf6d5;
- t.d = 0x0064;
- t.daarmenian = 0x0564;
- t.dabengali = 0x09a6;
- t.dadarabic = 0x0636;
- t.dadeva = 0x0926;
- t.dadfinalarabic = 0xfebe;
- t.dadinitialarabic = 0xfebf;
- t.dadmedialarabic = 0xfec0;
- t.dagesh = 0x05bc;
- t.dageshhebrew = 0x05bc;
- t.dagger = 0x2020;
- t.daggerdbl = 0x2021;
- t.dagujarati = 0x0aa6;
- t.dagurmukhi = 0x0a26;
- t.dahiragana = 0x3060;
- t.dakatakana = 0x30c0;
- t.dalarabic = 0x062f;
- t.dalet = 0x05d3;
- t.daletdagesh = 0xfb33;
- t.daletdageshhebrew = 0xfb33;
- t.dalethebrew = 0x05d3;
- t.dalfinalarabic = 0xfeaa;
- t.dammaarabic = 0x064f;
- t.dammalowarabic = 0x064f;
- t.dammatanaltonearabic = 0x064c;
- t.dammatanarabic = 0x064c;
- t.danda = 0x0964;
- t.dargahebrew = 0x05a7;
- t.dargalefthebrew = 0x05a7;
- t.dasiapneumatacyrilliccmb = 0x0485;
- t.dblGrave = 0xf6d3;
- t.dblanglebracketleft = 0x300a;
- t.dblanglebracketleftvertical = 0xfe3d;
- t.dblanglebracketright = 0x300b;
- t.dblanglebracketrightvertical = 0xfe3e;
- t.dblarchinvertedbelowcmb = 0x032b;
- t.dblarrowleft = 0x21d4;
- t.dblarrowright = 0x21d2;
- t.dbldanda = 0x0965;
- t.dblgrave = 0xf6d6;
- t.dblgravecmb = 0x030f;
- t.dblintegral = 0x222c;
- t.dbllowline = 0x2017;
- t.dbllowlinecmb = 0x0333;
- t.dbloverlinecmb = 0x033f;
- t.dblprimemod = 0x02ba;
- t.dblverticalbar = 0x2016;
- t.dblverticallineabovecmb = 0x030e;
- t.dbopomofo = 0x3109;
- t.dbsquare = 0x33c8;
- t.dcaron = 0x010f;
- t.dcedilla = 0x1e11;
- t.dcircle = 0x24d3;
- t.dcircumflexbelow = 0x1e13;
- t.dcroat = 0x0111;
- t.ddabengali = 0x09a1;
- t.ddadeva = 0x0921;
- t.ddagujarati = 0x0aa1;
- t.ddagurmukhi = 0x0a21;
- t.ddalarabic = 0x0688;
- t.ddalfinalarabic = 0xfb89;
- t.dddhadeva = 0x095c;
- t.ddhabengali = 0x09a2;
- t.ddhadeva = 0x0922;
- t.ddhagujarati = 0x0aa2;
- t.ddhagurmukhi = 0x0a22;
- t.ddotaccent = 0x1e0b;
- t.ddotbelow = 0x1e0d;
- t.decimalseparatorarabic = 0x066b;
- t.decimalseparatorpersian = 0x066b;
- t.decyrillic = 0x0434;
- t.degree = 0x00b0;
- t.dehihebrew = 0x05ad;
- t.dehiragana = 0x3067;
- t.deicoptic = 0x03ef;
- t.dekatakana = 0x30c7;
- t.deleteleft = 0x232b;
- t.deleteright = 0x2326;
- t.delta = 0x03b4;
- t.deltaturned = 0x018d;
- t.denominatorminusonenumeratorbengali = 0x09f8;
- t.dezh = 0x02a4;
- t.dhabengali = 0x09a7;
- t.dhadeva = 0x0927;
- t.dhagujarati = 0x0aa7;
- t.dhagurmukhi = 0x0a27;
- t.dhook = 0x0257;
- t.dialytikatonos = 0x0385;
- t.dialytikatonoscmb = 0x0344;
- t.diamond = 0x2666;
- t.diamondsuitwhite = 0x2662;
- t.dieresis = 0x00a8;
- t.dieresisacute = 0xf6d7;
- t.dieresisbelowcmb = 0x0324;
- t.dieresiscmb = 0x0308;
- t.dieresisgrave = 0xf6d8;
- t.dieresistonos = 0x0385;
- t.dihiragana = 0x3062;
- t.dikatakana = 0x30c2;
- t.dittomark = 0x3003;
- t.divide = 0x00f7;
- t.divides = 0x2223;
- t.divisionslash = 0x2215;
- t.djecyrillic = 0x0452;
- t.dkshade = 0x2593;
- t.dlinebelow = 0x1e0f;
- t.dlsquare = 0x3397;
- t.dmacron = 0x0111;
- t.dmonospace = 0xff44;
- t.dnblock = 0x2584;
- t.dochadathai = 0x0e0e;
- t.dodekthai = 0x0e14;
- t.dohiragana = 0x3069;
- t.dokatakana = 0x30c9;
- t.dollar = 0x0024;
- t.dollarinferior = 0xf6e3;
- t.dollarmonospace = 0xff04;
- t.dollaroldstyle = 0xf724;
- t.dollarsmall = 0xfe69;
- t.dollarsuperior = 0xf6e4;
- t.dong = 0x20ab;
- t.dorusquare = 0x3326;
- t.dotaccent = 0x02d9;
- t.dotaccentcmb = 0x0307;
- t.dotbelowcmb = 0x0323;
- t.dotbelowcomb = 0x0323;
- t.dotkatakana = 0x30fb;
- t.dotlessi = 0x0131;
- t.dotlessj = 0xf6be;
- t.dotlessjstrokehook = 0x0284;
- t.dotmath = 0x22c5;
- t.dottedcircle = 0x25cc;
- t.doubleyodpatah = 0xfb1f;
- t.doubleyodpatahhebrew = 0xfb1f;
- t.downtackbelowcmb = 0x031e;
- t.downtackmod = 0x02d5;
- t.dparen = 0x249f;
- t.dsuperior = 0xf6eb;
- t.dtail = 0x0256;
- t.dtopbar = 0x018c;
- t.duhiragana = 0x3065;
- t.dukatakana = 0x30c5;
- t.dz = 0x01f3;
- t.dzaltone = 0x02a3;
- t.dzcaron = 0x01c6;
- t.dzcurl = 0x02a5;
- t.dzeabkhasiancyrillic = 0x04e1;
- t.dzecyrillic = 0x0455;
- t.dzhecyrillic = 0x045f;
- t.e = 0x0065;
- t.eacute = 0x00e9;
- t.earth = 0x2641;
- t.ebengali = 0x098f;
- t.ebopomofo = 0x311c;
- t.ebreve = 0x0115;
- t.ecandradeva = 0x090d;
- t.ecandragujarati = 0x0a8d;
- t.ecandravowelsigndeva = 0x0945;
- t.ecandravowelsigngujarati = 0x0ac5;
- t.ecaron = 0x011b;
- t.ecedillabreve = 0x1e1d;
- t.echarmenian = 0x0565;
- t.echyiwnarmenian = 0x0587;
- t.ecircle = 0x24d4;
- t.ecircumflex = 0x00ea;
- t.ecircumflexacute = 0x1ebf;
- t.ecircumflexbelow = 0x1e19;
- t.ecircumflexdotbelow = 0x1ec7;
- t.ecircumflexgrave = 0x1ec1;
- t.ecircumflexhookabove = 0x1ec3;
- t.ecircumflextilde = 0x1ec5;
- t.ecyrillic = 0x0454;
- t.edblgrave = 0x0205;
- t.edeva = 0x090f;
- t.edieresis = 0x00eb;
- t.edot = 0x0117;
- t.edotaccent = 0x0117;
- t.edotbelow = 0x1eb9;
- t.eegurmukhi = 0x0a0f;
- t.eematragurmukhi = 0x0a47;
- t.efcyrillic = 0x0444;
- t.egrave = 0x00e8;
- t.egujarati = 0x0a8f;
- t.eharmenian = 0x0567;
- t.ehbopomofo = 0x311d;
- t.ehiragana = 0x3048;
- t.ehookabove = 0x1ebb;
- t.eibopomofo = 0x311f;
- t.eight = 0x0038;
- t.eightarabic = 0x0668;
- t.eightbengali = 0x09ee;
- t.eightcircle = 0x2467;
- t.eightcircleinversesansserif = 0x2791;
- t.eightdeva = 0x096e;
- t.eighteencircle = 0x2471;
- t.eighteenparen = 0x2485;
- t.eighteenperiod = 0x2499;
- t.eightgujarati = 0x0aee;
- t.eightgurmukhi = 0x0a6e;
- t.eighthackarabic = 0x0668;
- t.eighthangzhou = 0x3028;
- t.eighthnotebeamed = 0x266b;
- t.eightideographicparen = 0x3227;
- t.eightinferior = 0x2088;
- t.eightmonospace = 0xff18;
- t.eightoldstyle = 0xf738;
- t.eightparen = 0x247b;
- t.eightperiod = 0x248f;
- t.eightpersian = 0x06f8;
- t.eightroman = 0x2177;
- t.eightsuperior = 0x2078;
- t.eightthai = 0x0e58;
- t.einvertedbreve = 0x0207;
- t.eiotifiedcyrillic = 0x0465;
- t.ekatakana = 0x30a8;
- t.ekatakanahalfwidth = 0xff74;
- t.ekonkargurmukhi = 0x0a74;
- t.ekorean = 0x3154;
- t.elcyrillic = 0x043b;
- t.element = 0x2208;
- t.elevencircle = 0x246a;
- t.elevenparen = 0x247e;
- t.elevenperiod = 0x2492;
- t.elevenroman = 0x217a;
- t.ellipsis = 0x2026;
- t.ellipsisvertical = 0x22ee;
- t.emacron = 0x0113;
- t.emacronacute = 0x1e17;
- t.emacrongrave = 0x1e15;
- t.emcyrillic = 0x043c;
- t.emdash = 0x2014;
- t.emdashvertical = 0xfe31;
- t.emonospace = 0xff45;
- t.emphasismarkarmenian = 0x055b;
- t.emptyset = 0x2205;
- t.enbopomofo = 0x3123;
- t.encyrillic = 0x043d;
- t.endash = 0x2013;
- t.endashvertical = 0xfe32;
- t.endescendercyrillic = 0x04a3;
- t.eng = 0x014b;
- t.engbopomofo = 0x3125;
- t.enghecyrillic = 0x04a5;
- t.enhookcyrillic = 0x04c8;
- t.enspace = 0x2002;
- t.eogonek = 0x0119;
- t.eokorean = 0x3153;
- t.eopen = 0x025b;
- t.eopenclosed = 0x029a;
- t.eopenreversed = 0x025c;
- t.eopenreversedclosed = 0x025e;
- t.eopenreversedhook = 0x025d;
- t.eparen = 0x24a0;
- t.epsilon = 0x03b5;
- t.epsilontonos = 0x03ad;
- t.equal = 0x003d;
- t.equalmonospace = 0xff1d;
- t.equalsmall = 0xfe66;
- t.equalsuperior = 0x207c;
- t.equivalence = 0x2261;
- t.erbopomofo = 0x3126;
- t.ercyrillic = 0x0440;
- t.ereversed = 0x0258;
- t.ereversedcyrillic = 0x044d;
- t.escyrillic = 0x0441;
- t.esdescendercyrillic = 0x04ab;
- t.esh = 0x0283;
- t.eshcurl = 0x0286;
- t.eshortdeva = 0x090e;
- t.eshortvowelsigndeva = 0x0946;
- t.eshreversedloop = 0x01aa;
- t.eshsquatreversed = 0x0285;
- t.esmallhiragana = 0x3047;
- t.esmallkatakana = 0x30a7;
- t.esmallkatakanahalfwidth = 0xff6a;
- t.estimated = 0x212e;
- t.esuperior = 0xf6ec;
- t.eta = 0x03b7;
- t.etarmenian = 0x0568;
- t.etatonos = 0x03ae;
- t.eth = 0x00f0;
- t.etilde = 0x1ebd;
- t.etildebelow = 0x1e1b;
- t.etnahtafoukhhebrew = 0x0591;
- t.etnahtafoukhlefthebrew = 0x0591;
- t.etnahtahebrew = 0x0591;
- t.etnahtalefthebrew = 0x0591;
- t.eturned = 0x01dd;
- t.eukorean = 0x3161;
- t.euro = 0x20ac;
- t.evowelsignbengali = 0x09c7;
- t.evowelsigndeva = 0x0947;
- t.evowelsigngujarati = 0x0ac7;
- t.exclam = 0x0021;
- t.exclamarmenian = 0x055c;
- t.exclamdbl = 0x203c;
- t.exclamdown = 0x00a1;
- t.exclamdownsmall = 0xf7a1;
- t.exclammonospace = 0xff01;
- t.exclamsmall = 0xf721;
- t.existential = 0x2203;
- t.ezh = 0x0292;
- t.ezhcaron = 0x01ef;
- t.ezhcurl = 0x0293;
- t.ezhreversed = 0x01b9;
- t.ezhtail = 0x01ba;
- t.f = 0x0066;
- t.fadeva = 0x095e;
- t.fagurmukhi = 0x0a5e;
- t.fahrenheit = 0x2109;
- t.fathaarabic = 0x064e;
- t.fathalowarabic = 0x064e;
- t.fathatanarabic = 0x064b;
- t.fbopomofo = 0x3108;
- t.fcircle = 0x24d5;
- t.fdotaccent = 0x1e1f;
- t.feharabic = 0x0641;
- t.feharmenian = 0x0586;
- t.fehfinalarabic = 0xfed2;
- t.fehinitialarabic = 0xfed3;
- t.fehmedialarabic = 0xfed4;
- t.feicoptic = 0x03e5;
- t.female = 0x2640;
- t.ff = 0xfb00;
- t.f_f = 0xfb00;
- t.ffi = 0xfb03;
- t.ffl = 0xfb04;
- t.fi = 0xfb01;
- t.fifteencircle = 0x246e;
- t.fifteenparen = 0x2482;
- t.fifteenperiod = 0x2496;
- t.figuredash = 0x2012;
- t.filledbox = 0x25a0;
- t.filledrect = 0x25ac;
- t.finalkaf = 0x05da;
- t.finalkafdagesh = 0xfb3a;
- t.finalkafdageshhebrew = 0xfb3a;
- t.finalkafhebrew = 0x05da;
- t.finalmem = 0x05dd;
- t.finalmemhebrew = 0x05dd;
- t.finalnun = 0x05df;
- t.finalnunhebrew = 0x05df;
- t.finalpe = 0x05e3;
- t.finalpehebrew = 0x05e3;
- t.finaltsadi = 0x05e5;
- t.finaltsadihebrew = 0x05e5;
- t.firsttonechinese = 0x02c9;
- t.fisheye = 0x25c9;
- t.fitacyrillic = 0x0473;
- t.five = 0x0035;
- t.fivearabic = 0x0665;
- t.fivebengali = 0x09eb;
- t.fivecircle = 0x2464;
- t.fivecircleinversesansserif = 0x278e;
- t.fivedeva = 0x096b;
- t.fiveeighths = 0x215d;
- t.fivegujarati = 0x0aeb;
- t.fivegurmukhi = 0x0a6b;
- t.fivehackarabic = 0x0665;
- t.fivehangzhou = 0x3025;
- t.fiveideographicparen = 0x3224;
- t.fiveinferior = 0x2085;
- t.fivemonospace = 0xff15;
- t.fiveoldstyle = 0xf735;
- t.fiveparen = 0x2478;
- t.fiveperiod = 0x248c;
- t.fivepersian = 0x06f5;
- t.fiveroman = 0x2174;
- t.fivesuperior = 0x2075;
- t.fivethai = 0x0e55;
- t.fl = 0xfb02;
- t.florin = 0x0192;
- t.fmonospace = 0xff46;
- t.fmsquare = 0x3399;
- t.fofanthai = 0x0e1f;
- t.fofathai = 0x0e1d;
- t.fongmanthai = 0x0e4f;
- t.forall = 0x2200;
- t.four = 0x0034;
- t.fourarabic = 0x0664;
- t.fourbengali = 0x09ea;
- t.fourcircle = 0x2463;
- t.fourcircleinversesansserif = 0x278d;
- t.fourdeva = 0x096a;
- t.fourgujarati = 0x0aea;
- t.fourgurmukhi = 0x0a6a;
- t.fourhackarabic = 0x0664;
- t.fourhangzhou = 0x3024;
- t.fourideographicparen = 0x3223;
- t.fourinferior = 0x2084;
- t.fourmonospace = 0xff14;
- t.fournumeratorbengali = 0x09f7;
- t.fouroldstyle = 0xf734;
- t.fourparen = 0x2477;
- t.fourperiod = 0x248b;
- t.fourpersian = 0x06f4;
- t.fourroman = 0x2173;
- t.foursuperior = 0x2074;
- t.fourteencircle = 0x246d;
- t.fourteenparen = 0x2481;
- t.fourteenperiod = 0x2495;
- t.fourthai = 0x0e54;
- t.fourthtonechinese = 0x02cb;
- t.fparen = 0x24a1;
- t.fraction = 0x2044;
- t.franc = 0x20a3;
- t.g = 0x0067;
- t.gabengali = 0x0997;
- t.gacute = 0x01f5;
- t.gadeva = 0x0917;
- t.gafarabic = 0x06af;
- t.gaffinalarabic = 0xfb93;
- t.gafinitialarabic = 0xfb94;
- t.gafmedialarabic = 0xfb95;
- t.gagujarati = 0x0a97;
- t.gagurmukhi = 0x0a17;
- t.gahiragana = 0x304c;
- t.gakatakana = 0x30ac;
- t.gamma = 0x03b3;
- t.gammalatinsmall = 0x0263;
- t.gammasuperior = 0x02e0;
- t.gangiacoptic = 0x03eb;
- t.gbopomofo = 0x310d;
- t.gbreve = 0x011f;
- t.gcaron = 0x01e7;
- t.gcedilla = 0x0123;
- t.gcircle = 0x24d6;
- t.gcircumflex = 0x011d;
- t.gcommaaccent = 0x0123;
- t.gdot = 0x0121;
- t.gdotaccent = 0x0121;
- t.gecyrillic = 0x0433;
- t.gehiragana = 0x3052;
- t.gekatakana = 0x30b2;
- t.geometricallyequal = 0x2251;
- t.gereshaccenthebrew = 0x059c;
- t.gereshhebrew = 0x05f3;
- t.gereshmuqdamhebrew = 0x059d;
- t.germandbls = 0x00df;
- t.gershayimaccenthebrew = 0x059e;
- t.gershayimhebrew = 0x05f4;
- t.getamark = 0x3013;
- t.ghabengali = 0x0998;
- t.ghadarmenian = 0x0572;
- t.ghadeva = 0x0918;
- t.ghagujarati = 0x0a98;
- t.ghagurmukhi = 0x0a18;
- t.ghainarabic = 0x063a;
- t.ghainfinalarabic = 0xfece;
- t.ghaininitialarabic = 0xfecf;
- t.ghainmedialarabic = 0xfed0;
- t.ghemiddlehookcyrillic = 0x0495;
- t.ghestrokecyrillic = 0x0493;
- t.gheupturncyrillic = 0x0491;
- t.ghhadeva = 0x095a;
- t.ghhagurmukhi = 0x0a5a;
- t.ghook = 0x0260;
- t.ghzsquare = 0x3393;
- t.gihiragana = 0x304e;
- t.gikatakana = 0x30ae;
- t.gimarmenian = 0x0563;
- t.gimel = 0x05d2;
- t.gimeldagesh = 0xfb32;
- t.gimeldageshhebrew = 0xfb32;
- t.gimelhebrew = 0x05d2;
- t.gjecyrillic = 0x0453;
- t.glottalinvertedstroke = 0x01be;
- t.glottalstop = 0x0294;
- t.glottalstopinverted = 0x0296;
- t.glottalstopmod = 0x02c0;
- t.glottalstopreversed = 0x0295;
- t.glottalstopreversedmod = 0x02c1;
- t.glottalstopreversedsuperior = 0x02e4;
- t.glottalstopstroke = 0x02a1;
- t.glottalstopstrokereversed = 0x02a2;
- t.gmacron = 0x1e21;
- t.gmonospace = 0xff47;
- t.gohiragana = 0x3054;
- t.gokatakana = 0x30b4;
- t.gparen = 0x24a2;
- t.gpasquare = 0x33ac;
- t.gradient = 0x2207;
- t.grave = 0x0060;
- t.gravebelowcmb = 0x0316;
- t.gravecmb = 0x0300;
- t.gravecomb = 0x0300;
- t.gravedeva = 0x0953;
- t.gravelowmod = 0x02ce;
- t.gravemonospace = 0xff40;
- t.gravetonecmb = 0x0340;
- t.greater = 0x003e;
- t.greaterequal = 0x2265;
- t.greaterequalorless = 0x22db;
- t.greatermonospace = 0xff1e;
- t.greaterorequivalent = 0x2273;
- t.greaterorless = 0x2277;
- t.greateroverequal = 0x2267;
- t.greatersmall = 0xfe65;
- t.gscript = 0x0261;
- t.gstroke = 0x01e5;
- t.guhiragana = 0x3050;
- t.guillemotleft = 0x00ab;
- t.guillemotright = 0x00bb;
- t.guilsinglleft = 0x2039;
- t.guilsinglright = 0x203a;
- t.gukatakana = 0x30b0;
- t.guramusquare = 0x3318;
- t.gysquare = 0x33c9;
- t.h = 0x0068;
- t.haabkhasiancyrillic = 0x04a9;
- t.haaltonearabic = 0x06c1;
- t.habengali = 0x09b9;
- t.hadescendercyrillic = 0x04b3;
- t.hadeva = 0x0939;
- t.hagujarati = 0x0ab9;
- t.hagurmukhi = 0x0a39;
- t.haharabic = 0x062d;
- t.hahfinalarabic = 0xfea2;
- t.hahinitialarabic = 0xfea3;
- t.hahiragana = 0x306f;
- t.hahmedialarabic = 0xfea4;
- t.haitusquare = 0x332a;
- t.hakatakana = 0x30cf;
- t.hakatakanahalfwidth = 0xff8a;
- t.halantgurmukhi = 0x0a4d;
- t.hamzaarabic = 0x0621;
- t.hamzalowarabic = 0x0621;
- t.hangulfiller = 0x3164;
- t.hardsigncyrillic = 0x044a;
- t.harpoonleftbarbup = 0x21bc;
- t.harpoonrightbarbup = 0x21c0;
- t.hasquare = 0x33ca;
- t.hatafpatah = 0x05b2;
- t.hatafpatah16 = 0x05b2;
- t.hatafpatah23 = 0x05b2;
- t.hatafpatah2f = 0x05b2;
- t.hatafpatahhebrew = 0x05b2;
- t.hatafpatahnarrowhebrew = 0x05b2;
- t.hatafpatahquarterhebrew = 0x05b2;
- t.hatafpatahwidehebrew = 0x05b2;
- t.hatafqamats = 0x05b3;
- t.hatafqamats1b = 0x05b3;
- t.hatafqamats28 = 0x05b3;
- t.hatafqamats34 = 0x05b3;
- t.hatafqamatshebrew = 0x05b3;
- t.hatafqamatsnarrowhebrew = 0x05b3;
- t.hatafqamatsquarterhebrew = 0x05b3;
- t.hatafqamatswidehebrew = 0x05b3;
- t.hatafsegol = 0x05b1;
- t.hatafsegol17 = 0x05b1;
- t.hatafsegol24 = 0x05b1;
- t.hatafsegol30 = 0x05b1;
- t.hatafsegolhebrew = 0x05b1;
- t.hatafsegolnarrowhebrew = 0x05b1;
- t.hatafsegolquarterhebrew = 0x05b1;
- t.hatafsegolwidehebrew = 0x05b1;
- t.hbar = 0x0127;
- t.hbopomofo = 0x310f;
- t.hbrevebelow = 0x1e2b;
- t.hcedilla = 0x1e29;
- t.hcircle = 0x24d7;
- t.hcircumflex = 0x0125;
- t.hdieresis = 0x1e27;
- t.hdotaccent = 0x1e23;
- t.hdotbelow = 0x1e25;
- t.he = 0x05d4;
- t.heart = 0x2665;
- t.heartsuitblack = 0x2665;
- t.heartsuitwhite = 0x2661;
- t.hedagesh = 0xfb34;
- t.hedageshhebrew = 0xfb34;
- t.hehaltonearabic = 0x06c1;
- t.heharabic = 0x0647;
- t.hehebrew = 0x05d4;
- t.hehfinalaltonearabic = 0xfba7;
- t.hehfinalalttwoarabic = 0xfeea;
- t.hehfinalarabic = 0xfeea;
- t.hehhamzaabovefinalarabic = 0xfba5;
- t.hehhamzaaboveisolatedarabic = 0xfba4;
- t.hehinitialaltonearabic = 0xfba8;
- t.hehinitialarabic = 0xfeeb;
- t.hehiragana = 0x3078;
- t.hehmedialaltonearabic = 0xfba9;
- t.hehmedialarabic = 0xfeec;
- t.heiseierasquare = 0x337b;
- t.hekatakana = 0x30d8;
- t.hekatakanahalfwidth = 0xff8d;
- t.hekutaarusquare = 0x3336;
- t.henghook = 0x0267;
- t.herutusquare = 0x3339;
- t.het = 0x05d7;
- t.hethebrew = 0x05d7;
- t.hhook = 0x0266;
- t.hhooksuperior = 0x02b1;
- t.hieuhacirclekorean = 0x327b;
- t.hieuhaparenkorean = 0x321b;
- t.hieuhcirclekorean = 0x326d;
- t.hieuhkorean = 0x314e;
- t.hieuhparenkorean = 0x320d;
- t.hihiragana = 0x3072;
- t.hikatakana = 0x30d2;
- t.hikatakanahalfwidth = 0xff8b;
- t.hiriq = 0x05b4;
- t.hiriq14 = 0x05b4;
- t.hiriq21 = 0x05b4;
- t.hiriq2d = 0x05b4;
- t.hiriqhebrew = 0x05b4;
- t.hiriqnarrowhebrew = 0x05b4;
- t.hiriqquarterhebrew = 0x05b4;
- t.hiriqwidehebrew = 0x05b4;
- t.hlinebelow = 0x1e96;
- t.hmonospace = 0xff48;
- t.hoarmenian = 0x0570;
- t.hohipthai = 0x0e2b;
- t.hohiragana = 0x307b;
- t.hokatakana = 0x30db;
- t.hokatakanahalfwidth = 0xff8e;
- t.holam = 0x05b9;
- t.holam19 = 0x05b9;
- t.holam26 = 0x05b9;
- t.holam32 = 0x05b9;
- t.holamhebrew = 0x05b9;
- t.holamnarrowhebrew = 0x05b9;
- t.holamquarterhebrew = 0x05b9;
- t.holamwidehebrew = 0x05b9;
- t.honokhukthai = 0x0e2e;
- t.hookabovecomb = 0x0309;
- t.hookcmb = 0x0309;
- t.hookpalatalizedbelowcmb = 0x0321;
- t.hookretroflexbelowcmb = 0x0322;
- t.hoonsquare = 0x3342;
- t.horicoptic = 0x03e9;
- t.horizontalbar = 0x2015;
- t.horncmb = 0x031b;
- t.hotsprings = 0x2668;
- t.house = 0x2302;
- t.hparen = 0x24a3;
- t.hsuperior = 0x02b0;
- t.hturned = 0x0265;
- t.huhiragana = 0x3075;
- t.huiitosquare = 0x3333;
- t.hukatakana = 0x30d5;
- t.hukatakanahalfwidth = 0xff8c;
- t.hungarumlaut = 0x02dd;
- t.hungarumlautcmb = 0x030b;
- t.hv = 0x0195;
- t.hyphen = 0x002d;
- t.hypheninferior = 0xf6e5;
- t.hyphenmonospace = 0xff0d;
- t.hyphensmall = 0xfe63;
- t.hyphensuperior = 0xf6e6;
- t.hyphentwo = 0x2010;
- t.i = 0x0069;
- t.iacute = 0x00ed;
- t.iacyrillic = 0x044f;
- t.ibengali = 0x0987;
- t.ibopomofo = 0x3127;
- t.ibreve = 0x012d;
- t.icaron = 0x01d0;
- t.icircle = 0x24d8;
- t.icircumflex = 0x00ee;
- t.icyrillic = 0x0456;
- t.idblgrave = 0x0209;
- t.ideographearthcircle = 0x328f;
- t.ideographfirecircle = 0x328b;
- t.ideographicallianceparen = 0x323f;
- t.ideographiccallparen = 0x323a;
- t.ideographiccentrecircle = 0x32a5;
- t.ideographicclose = 0x3006;
- t.ideographiccomma = 0x3001;
- t.ideographiccommaleft = 0xff64;
- t.ideographiccongratulationparen = 0x3237;
- t.ideographiccorrectcircle = 0x32a3;
- t.ideographicearthparen = 0x322f;
- t.ideographicenterpriseparen = 0x323d;
- t.ideographicexcellentcircle = 0x329d;
- t.ideographicfestivalparen = 0x3240;
- t.ideographicfinancialcircle = 0x3296;
- t.ideographicfinancialparen = 0x3236;
- t.ideographicfireparen = 0x322b;
- t.ideographichaveparen = 0x3232;
- t.ideographichighcircle = 0x32a4;
- t.ideographiciterationmark = 0x3005;
- t.ideographiclaborcircle = 0x3298;
- t.ideographiclaborparen = 0x3238;
- t.ideographicleftcircle = 0x32a7;
- t.ideographiclowcircle = 0x32a6;
- t.ideographicmedicinecircle = 0x32a9;
- t.ideographicmetalparen = 0x322e;
- t.ideographicmoonparen = 0x322a;
- t.ideographicnameparen = 0x3234;
- t.ideographicperiod = 0x3002;
- t.ideographicprintcircle = 0x329e;
- t.ideographicreachparen = 0x3243;
- t.ideographicrepresentparen = 0x3239;
- t.ideographicresourceparen = 0x323e;
- t.ideographicrightcircle = 0x32a8;
- t.ideographicsecretcircle = 0x3299;
- t.ideographicselfparen = 0x3242;
- t.ideographicsocietyparen = 0x3233;
- t.ideographicspace = 0x3000;
- t.ideographicspecialparen = 0x3235;
- t.ideographicstockparen = 0x3231;
- t.ideographicstudyparen = 0x323b;
- t.ideographicsunparen = 0x3230;
- t.ideographicsuperviseparen = 0x323c;
- t.ideographicwaterparen = 0x322c;
- t.ideographicwoodparen = 0x322d;
- t.ideographiczero = 0x3007;
- t.ideographmetalcircle = 0x328e;
- t.ideographmooncircle = 0x328a;
- t.ideographnamecircle = 0x3294;
- t.ideographsuncircle = 0x3290;
- t.ideographwatercircle = 0x328c;
- t.ideographwoodcircle = 0x328d;
- t.ideva = 0x0907;
- t.idieresis = 0x00ef;
- t.idieresisacute = 0x1e2f;
- t.idieresiscyrillic = 0x04e5;
- t.idotbelow = 0x1ecb;
- t.iebrevecyrillic = 0x04d7;
- t.iecyrillic = 0x0435;
- t.ieungacirclekorean = 0x3275;
- t.ieungaparenkorean = 0x3215;
- t.ieungcirclekorean = 0x3267;
- t.ieungkorean = 0x3147;
- t.ieungparenkorean = 0x3207;
- t.igrave = 0x00ec;
- t.igujarati = 0x0a87;
- t.igurmukhi = 0x0a07;
- t.ihiragana = 0x3044;
- t.ihookabove = 0x1ec9;
- t.iibengali = 0x0988;
- t.iicyrillic = 0x0438;
- t.iideva = 0x0908;
- t.iigujarati = 0x0a88;
- t.iigurmukhi = 0x0a08;
- t.iimatragurmukhi = 0x0a40;
- t.iinvertedbreve = 0x020b;
- t.iishortcyrillic = 0x0439;
- t.iivowelsignbengali = 0x09c0;
- t.iivowelsigndeva = 0x0940;
- t.iivowelsigngujarati = 0x0ac0;
- t.ij = 0x0133;
- t.ikatakana = 0x30a4;
- t.ikatakanahalfwidth = 0xff72;
- t.ikorean = 0x3163;
- t.ilde = 0x02dc;
- t.iluyhebrew = 0x05ac;
- t.imacron = 0x012b;
- t.imacroncyrillic = 0x04e3;
- t.imageorapproximatelyequal = 0x2253;
- t.imatragurmukhi = 0x0a3f;
- t.imonospace = 0xff49;
- t.increment = 0x2206;
- t.infinity = 0x221e;
- t.iniarmenian = 0x056b;
- t.integral = 0x222b;
- t.integralbottom = 0x2321;
- t.integralbt = 0x2321;
- t.integralex = 0xf8f5;
- t.integraltop = 0x2320;
- t.integraltp = 0x2320;
- t.intersection = 0x2229;
- t.intisquare = 0x3305;
- t.invbullet = 0x25d8;
- t.invcircle = 0x25d9;
- t.invsmileface = 0x263b;
- t.iocyrillic = 0x0451;
- t.iogonek = 0x012f;
- t.iota = 0x03b9;
- t.iotadieresis = 0x03ca;
- t.iotadieresistonos = 0x0390;
- t.iotalatin = 0x0269;
- t.iotatonos = 0x03af;
- t.iparen = 0x24a4;
- t.irigurmukhi = 0x0a72;
- t.ismallhiragana = 0x3043;
- t.ismallkatakana = 0x30a3;
- t.ismallkatakanahalfwidth = 0xff68;
- t.issharbengali = 0x09fa;
- t.istroke = 0x0268;
- t.isuperior = 0xf6ed;
- t.iterationhiragana = 0x309d;
- t.iterationkatakana = 0x30fd;
- t.itilde = 0x0129;
- t.itildebelow = 0x1e2d;
- t.iubopomofo = 0x3129;
- t.iucyrillic = 0x044e;
- t.ivowelsignbengali = 0x09bf;
- t.ivowelsigndeva = 0x093f;
- t.ivowelsigngujarati = 0x0abf;
- t.izhitsacyrillic = 0x0475;
- t.izhitsadblgravecyrillic = 0x0477;
- t.j = 0x006a;
- t.jaarmenian = 0x0571;
- t.jabengali = 0x099c;
- t.jadeva = 0x091c;
- t.jagujarati = 0x0a9c;
- t.jagurmukhi = 0x0a1c;
- t.jbopomofo = 0x3110;
- t.jcaron = 0x01f0;
- t.jcircle = 0x24d9;
- t.jcircumflex = 0x0135;
- t.jcrossedtail = 0x029d;
- t.jdotlessstroke = 0x025f;
- t.jecyrillic = 0x0458;
- t.jeemarabic = 0x062c;
- t.jeemfinalarabic = 0xfe9e;
- t.jeeminitialarabic = 0xfe9f;
- t.jeemmedialarabic = 0xfea0;
- t.jeharabic = 0x0698;
- t.jehfinalarabic = 0xfb8b;
- t.jhabengali = 0x099d;
- t.jhadeva = 0x091d;
- t.jhagujarati = 0x0a9d;
- t.jhagurmukhi = 0x0a1d;
- t.jheharmenian = 0x057b;
- t.jis = 0x3004;
- t.jmonospace = 0xff4a;
- t.jparen = 0x24a5;
- t.jsuperior = 0x02b2;
- t.k = 0x006b;
- t.kabashkircyrillic = 0x04a1;
- t.kabengali = 0x0995;
- t.kacute = 0x1e31;
- t.kacyrillic = 0x043a;
- t.kadescendercyrillic = 0x049b;
- t.kadeva = 0x0915;
- t.kaf = 0x05db;
- t.kafarabic = 0x0643;
- t.kafdagesh = 0xfb3b;
- t.kafdageshhebrew = 0xfb3b;
- t.kaffinalarabic = 0xfeda;
- t.kafhebrew = 0x05db;
- t.kafinitialarabic = 0xfedb;
- t.kafmedialarabic = 0xfedc;
- t.kafrafehebrew = 0xfb4d;
- t.kagujarati = 0x0a95;
- t.kagurmukhi = 0x0a15;
- t.kahiragana = 0x304b;
- t.kahookcyrillic = 0x04c4;
- t.kakatakana = 0x30ab;
- t.kakatakanahalfwidth = 0xff76;
- t.kappa = 0x03ba;
- t.kappasymbolgreek = 0x03f0;
- t.kapyeounmieumkorean = 0x3171;
- t.kapyeounphieuphkorean = 0x3184;
- t.kapyeounpieupkorean = 0x3178;
- t.kapyeounssangpieupkorean = 0x3179;
- t.karoriisquare = 0x330d;
- t.kashidaautoarabic = 0x0640;
- t.kashidaautonosidebearingarabic = 0x0640;
- t.kasmallkatakana = 0x30f5;
- t.kasquare = 0x3384;
- t.kasraarabic = 0x0650;
- t.kasratanarabic = 0x064d;
- t.kastrokecyrillic = 0x049f;
- t.katahiraprolongmarkhalfwidth = 0xff70;
- t.kaverticalstrokecyrillic = 0x049d;
- t.kbopomofo = 0x310e;
- t.kcalsquare = 0x3389;
- t.kcaron = 0x01e9;
- t.kcedilla = 0x0137;
- t.kcircle = 0x24da;
- t.kcommaaccent = 0x0137;
- t.kdotbelow = 0x1e33;
- t.keharmenian = 0x0584;
- t.kehiragana = 0x3051;
- t.kekatakana = 0x30b1;
- t.kekatakanahalfwidth = 0xff79;
- t.kenarmenian = 0x056f;
- t.kesmallkatakana = 0x30f6;
- t.kgreenlandic = 0x0138;
- t.khabengali = 0x0996;
- t.khacyrillic = 0x0445;
- t.khadeva = 0x0916;
- t.khagujarati = 0x0a96;
- t.khagurmukhi = 0x0a16;
- t.khaharabic = 0x062e;
- t.khahfinalarabic = 0xfea6;
- t.khahinitialarabic = 0xfea7;
- t.khahmedialarabic = 0xfea8;
- t.kheicoptic = 0x03e7;
- t.khhadeva = 0x0959;
- t.khhagurmukhi = 0x0a59;
- t.khieukhacirclekorean = 0x3278;
- t.khieukhaparenkorean = 0x3218;
- t.khieukhcirclekorean = 0x326a;
- t.khieukhkorean = 0x314b;
- t.khieukhparenkorean = 0x320a;
- t.khokhaithai = 0x0e02;
- t.khokhonthai = 0x0e05;
- t.khokhuatthai = 0x0e03;
- t.khokhwaithai = 0x0e04;
- t.khomutthai = 0x0e5b;
- t.khook = 0x0199;
- t.khorakhangthai = 0x0e06;
- t.khzsquare = 0x3391;
- t.kihiragana = 0x304d;
- t.kikatakana = 0x30ad;
- t.kikatakanahalfwidth = 0xff77;
- t.kiroguramusquare = 0x3315;
- t.kiromeetorusquare = 0x3316;
- t.kirosquare = 0x3314;
- t.kiyeokacirclekorean = 0x326e;
- t.kiyeokaparenkorean = 0x320e;
- t.kiyeokcirclekorean = 0x3260;
- t.kiyeokkorean = 0x3131;
- t.kiyeokparenkorean = 0x3200;
- t.kiyeoksioskorean = 0x3133;
- t.kjecyrillic = 0x045c;
- t.klinebelow = 0x1e35;
- t.klsquare = 0x3398;
- t.kmcubedsquare = 0x33a6;
- t.kmonospace = 0xff4b;
- t.kmsquaredsquare = 0x33a2;
- t.kohiragana = 0x3053;
- t.kohmsquare = 0x33c0;
- t.kokaithai = 0x0e01;
- t.kokatakana = 0x30b3;
- t.kokatakanahalfwidth = 0xff7a;
- t.kooposquare = 0x331e;
- t.koppacyrillic = 0x0481;
- t.koreanstandardsymbol = 0x327f;
- t.koroniscmb = 0x0343;
- t.kparen = 0x24a6;
- t.kpasquare = 0x33aa;
- t.ksicyrillic = 0x046f;
- t.ktsquare = 0x33cf;
- t.kturned = 0x029e;
- t.kuhiragana = 0x304f;
- t.kukatakana = 0x30af;
- t.kukatakanahalfwidth = 0xff78;
- t.kvsquare = 0x33b8;
- t.kwsquare = 0x33be;
- t.l = 0x006c;
- t.labengali = 0x09b2;
- t.lacute = 0x013a;
- t.ladeva = 0x0932;
- t.lagujarati = 0x0ab2;
- t.lagurmukhi = 0x0a32;
- t.lakkhangyaothai = 0x0e45;
- t.lamaleffinalarabic = 0xfefc;
- t.lamalefhamzaabovefinalarabic = 0xfef8;
- t.lamalefhamzaaboveisolatedarabic = 0xfef7;
- t.lamalefhamzabelowfinalarabic = 0xfefa;
- t.lamalefhamzabelowisolatedarabic = 0xfef9;
- t.lamalefisolatedarabic = 0xfefb;
- t.lamalefmaddaabovefinalarabic = 0xfef6;
- t.lamalefmaddaaboveisolatedarabic = 0xfef5;
- t.lamarabic = 0x0644;
- t.lambda = 0x03bb;
- t.lambdastroke = 0x019b;
- t.lamed = 0x05dc;
- t.lameddagesh = 0xfb3c;
- t.lameddageshhebrew = 0xfb3c;
- t.lamedhebrew = 0x05dc;
- t.lamfinalarabic = 0xfede;
- t.lamhahinitialarabic = 0xfcca;
- t.laminitialarabic = 0xfedf;
- t.lamjeeminitialarabic = 0xfcc9;
- t.lamkhahinitialarabic = 0xfccb;
- t.lamlamhehisolatedarabic = 0xfdf2;
- t.lammedialarabic = 0xfee0;
- t.lammeemhahinitialarabic = 0xfd88;
- t.lammeeminitialarabic = 0xfccc;
- t.largecircle = 0x25ef;
- t.lbar = 0x019a;
- t.lbelt = 0x026c;
- t.lbopomofo = 0x310c;
- t.lcaron = 0x013e;
- t.lcedilla = 0x013c;
- t.lcircle = 0x24db;
- t.lcircumflexbelow = 0x1e3d;
- t.lcommaaccent = 0x013c;
- t.ldot = 0x0140;
- t.ldotaccent = 0x0140;
- t.ldotbelow = 0x1e37;
- t.ldotbelowmacron = 0x1e39;
- t.leftangleabovecmb = 0x031a;
- t.lefttackbelowcmb = 0x0318;
- t.less = 0x003c;
- t.lessequal = 0x2264;
- t.lessequalorgreater = 0x22da;
- t.lessmonospace = 0xff1c;
- t.lessorequivalent = 0x2272;
- t.lessorgreater = 0x2276;
- t.lessoverequal = 0x2266;
- t.lesssmall = 0xfe64;
- t.lezh = 0x026e;
- t.lfblock = 0x258c;
- t.lhookretroflex = 0x026d;
- t.lira = 0x20a4;
- t.liwnarmenian = 0x056c;
- t.lj = 0x01c9;
- t.ljecyrillic = 0x0459;
- t.ll = 0xf6c0;
- t.lladeva = 0x0933;
- t.llagujarati = 0x0ab3;
- t.llinebelow = 0x1e3b;
- t.llladeva = 0x0934;
- t.llvocalicbengali = 0x09e1;
- t.llvocalicdeva = 0x0961;
- t.llvocalicvowelsignbengali = 0x09e3;
- t.llvocalicvowelsigndeva = 0x0963;
- t.lmiddletilde = 0x026b;
- t.lmonospace = 0xff4c;
- t.lmsquare = 0x33d0;
- t.lochulathai = 0x0e2c;
- t.logicaland = 0x2227;
- t.logicalnot = 0x00ac;
- t.logicalnotreversed = 0x2310;
- t.logicalor = 0x2228;
- t.lolingthai = 0x0e25;
- t.longs = 0x017f;
- t.lowlinecenterline = 0xfe4e;
- t.lowlinecmb = 0x0332;
- t.lowlinedashed = 0xfe4d;
- t.lozenge = 0x25ca;
- t.lparen = 0x24a7;
- t.lslash = 0x0142;
- t.lsquare = 0x2113;
- t.lsuperior = 0xf6ee;
- t.ltshade = 0x2591;
- t.luthai = 0x0e26;
- t.lvocalicbengali = 0x098c;
- t.lvocalicdeva = 0x090c;
- t.lvocalicvowelsignbengali = 0x09e2;
- t.lvocalicvowelsigndeva = 0x0962;
- t.lxsquare = 0x33d3;
- t.m = 0x006d;
- t.mabengali = 0x09ae;
- t.macron = 0x00af;
- t.macronbelowcmb = 0x0331;
- t.macroncmb = 0x0304;
- t.macronlowmod = 0x02cd;
- t.macronmonospace = 0xffe3;
- t.macute = 0x1e3f;
- t.madeva = 0x092e;
- t.magujarati = 0x0aae;
- t.magurmukhi = 0x0a2e;
- t.mahapakhhebrew = 0x05a4;
- t.mahapakhlefthebrew = 0x05a4;
- t.mahiragana = 0x307e;
- t.maichattawalowleftthai = 0xf895;
- t.maichattawalowrightthai = 0xf894;
- t.maichattawathai = 0x0e4b;
- t.maichattawaupperleftthai = 0xf893;
- t.maieklowleftthai = 0xf88c;
- t.maieklowrightthai = 0xf88b;
- t.maiekthai = 0x0e48;
- t.maiekupperleftthai = 0xf88a;
- t.maihanakatleftthai = 0xf884;
- t.maihanakatthai = 0x0e31;
- t.maitaikhuleftthai = 0xf889;
- t.maitaikhuthai = 0x0e47;
- t.maitholowleftthai = 0xf88f;
- t.maitholowrightthai = 0xf88e;
- t.maithothai = 0x0e49;
- t.maithoupperleftthai = 0xf88d;
- t.maitrilowleftthai = 0xf892;
- t.maitrilowrightthai = 0xf891;
- t.maitrithai = 0x0e4a;
- t.maitriupperleftthai = 0xf890;
- t.maiyamokthai = 0x0e46;
- t.makatakana = 0x30de;
- t.makatakanahalfwidth = 0xff8f;
- t.male = 0x2642;
- t.mansyonsquare = 0x3347;
- t.maqafhebrew = 0x05be;
- t.mars = 0x2642;
- t.masoracirclehebrew = 0x05af;
- t.masquare = 0x3383;
- t.mbopomofo = 0x3107;
- t.mbsquare = 0x33d4;
- t.mcircle = 0x24dc;
- t.mcubedsquare = 0x33a5;
- t.mdotaccent = 0x1e41;
- t.mdotbelow = 0x1e43;
- t.meemarabic = 0x0645;
- t.meemfinalarabic = 0xfee2;
- t.meeminitialarabic = 0xfee3;
- t.meemmedialarabic = 0xfee4;
- t.meemmeeminitialarabic = 0xfcd1;
- t.meemmeemisolatedarabic = 0xfc48;
- t.meetorusquare = 0x334d;
- t.mehiragana = 0x3081;
- t.meizierasquare = 0x337e;
- t.mekatakana = 0x30e1;
- t.mekatakanahalfwidth = 0xff92;
- t.mem = 0x05de;
- t.memdagesh = 0xfb3e;
- t.memdageshhebrew = 0xfb3e;
- t.memhebrew = 0x05de;
- t.menarmenian = 0x0574;
- t.merkhahebrew = 0x05a5;
- t.merkhakefulahebrew = 0x05a6;
- t.merkhakefulalefthebrew = 0x05a6;
- t.merkhalefthebrew = 0x05a5;
- t.mhook = 0x0271;
- t.mhzsquare = 0x3392;
- t.middledotkatakanahalfwidth = 0xff65;
- t.middot = 0x00b7;
- t.mieumacirclekorean = 0x3272;
- t.mieumaparenkorean = 0x3212;
- t.mieumcirclekorean = 0x3264;
- t.mieumkorean = 0x3141;
- t.mieumpansioskorean = 0x3170;
- t.mieumparenkorean = 0x3204;
- t.mieumpieupkorean = 0x316e;
- t.mieumsioskorean = 0x316f;
- t.mihiragana = 0x307f;
- t.mikatakana = 0x30df;
- t.mikatakanahalfwidth = 0xff90;
- t.minus = 0x2212;
- t.minusbelowcmb = 0x0320;
- t.minuscircle = 0x2296;
- t.minusmod = 0x02d7;
- t.minusplus = 0x2213;
- t.minute = 0x2032;
- t.miribaarusquare = 0x334a;
- t.mirisquare = 0x3349;
- t.mlonglegturned = 0x0270;
- t.mlsquare = 0x3396;
- t.mmcubedsquare = 0x33a3;
- t.mmonospace = 0xff4d;
- t.mmsquaredsquare = 0x339f;
- t.mohiragana = 0x3082;
- t.mohmsquare = 0x33c1;
- t.mokatakana = 0x30e2;
- t.mokatakanahalfwidth = 0xff93;
- t.molsquare = 0x33d6;
- t.momathai = 0x0e21;
- t.moverssquare = 0x33a7;
- t.moverssquaredsquare = 0x33a8;
- t.mparen = 0x24a8;
- t.mpasquare = 0x33ab;
- t.mssquare = 0x33b3;
- t.msuperior = 0xf6ef;
- t.mturned = 0x026f;
- t.mu = 0x00b5;
- t.mu1 = 0x00b5;
- t.muasquare = 0x3382;
- t.muchgreater = 0x226b;
- t.muchless = 0x226a;
- t.mufsquare = 0x338c;
- t.mugreek = 0x03bc;
- t.mugsquare = 0x338d;
- t.muhiragana = 0x3080;
- t.mukatakana = 0x30e0;
- t.mukatakanahalfwidth = 0xff91;
- t.mulsquare = 0x3395;
- t.multiply = 0x00d7;
- t.mumsquare = 0x339b;
- t.munahhebrew = 0x05a3;
- t.munahlefthebrew = 0x05a3;
- t.musicalnote = 0x266a;
- t.musicalnotedbl = 0x266b;
- t.musicflatsign = 0x266d;
- t.musicsharpsign = 0x266f;
- t.mussquare = 0x33b2;
- t.muvsquare = 0x33b6;
- t.muwsquare = 0x33bc;
- t.mvmegasquare = 0x33b9;
- t.mvsquare = 0x33b7;
- t.mwmegasquare = 0x33bf;
- t.mwsquare = 0x33bd;
- t.n = 0x006e;
- t.nabengali = 0x09a8;
- t.nabla = 0x2207;
- t.nacute = 0x0144;
- t.nadeva = 0x0928;
- t.nagujarati = 0x0aa8;
- t.nagurmukhi = 0x0a28;
- t.nahiragana = 0x306a;
- t.nakatakana = 0x30ca;
- t.nakatakanahalfwidth = 0xff85;
- t.napostrophe = 0x0149;
- t.nasquare = 0x3381;
- t.nbopomofo = 0x310b;
- t.nbspace = 0x00a0;
- t.ncaron = 0x0148;
- t.ncedilla = 0x0146;
- t.ncircle = 0x24dd;
- t.ncircumflexbelow = 0x1e4b;
- t.ncommaaccent = 0x0146;
- t.ndotaccent = 0x1e45;
- t.ndotbelow = 0x1e47;
- t.nehiragana = 0x306d;
- t.nekatakana = 0x30cd;
- t.nekatakanahalfwidth = 0xff88;
- t.newsheqelsign = 0x20aa;
- t.nfsquare = 0x338b;
- t.ngabengali = 0x0999;
- t.ngadeva = 0x0919;
- t.ngagujarati = 0x0a99;
- t.ngagurmukhi = 0x0a19;
- t.ngonguthai = 0x0e07;
- t.nhiragana = 0x3093;
- t.nhookleft = 0x0272;
- t.nhookretroflex = 0x0273;
- t.nieunacirclekorean = 0x326f;
- t.nieunaparenkorean = 0x320f;
- t.nieuncieuckorean = 0x3135;
- t.nieuncirclekorean = 0x3261;
- t.nieunhieuhkorean = 0x3136;
- t.nieunkorean = 0x3134;
- t.nieunpansioskorean = 0x3168;
- t.nieunparenkorean = 0x3201;
- t.nieunsioskorean = 0x3167;
- t.nieuntikeutkorean = 0x3166;
- t.nihiragana = 0x306b;
- t.nikatakana = 0x30cb;
- t.nikatakanahalfwidth = 0xff86;
- t.nikhahitleftthai = 0xf899;
- t.nikhahitthai = 0x0e4d;
- t.nine = 0x0039;
- t.ninearabic = 0x0669;
- t.ninebengali = 0x09ef;
- t.ninecircle = 0x2468;
- t.ninecircleinversesansserif = 0x2792;
- t.ninedeva = 0x096f;
- t.ninegujarati = 0x0aef;
- t.ninegurmukhi = 0x0a6f;
- t.ninehackarabic = 0x0669;
- t.ninehangzhou = 0x3029;
- t.nineideographicparen = 0x3228;
- t.nineinferior = 0x2089;
- t.ninemonospace = 0xff19;
- t.nineoldstyle = 0xf739;
- t.nineparen = 0x247c;
- t.nineperiod = 0x2490;
- t.ninepersian = 0x06f9;
- t.nineroman = 0x2178;
- t.ninesuperior = 0x2079;
- t.nineteencircle = 0x2472;
- t.nineteenparen = 0x2486;
- t.nineteenperiod = 0x249a;
- t.ninethai = 0x0e59;
- t.nj = 0x01cc;
- t.njecyrillic = 0x045a;
- t.nkatakana = 0x30f3;
- t.nkatakanahalfwidth = 0xff9d;
- t.nlegrightlong = 0x019e;
- t.nlinebelow = 0x1e49;
- t.nmonospace = 0xff4e;
- t.nmsquare = 0x339a;
- t.nnabengali = 0x09a3;
- t.nnadeva = 0x0923;
- t.nnagujarati = 0x0aa3;
- t.nnagurmukhi = 0x0a23;
- t.nnnadeva = 0x0929;
- t.nohiragana = 0x306e;
- t.nokatakana = 0x30ce;
- t.nokatakanahalfwidth = 0xff89;
- t.nonbreakingspace = 0x00a0;
- t.nonenthai = 0x0e13;
- t.nonuthai = 0x0e19;
- t.noonarabic = 0x0646;
- t.noonfinalarabic = 0xfee6;
- t.noonghunnaarabic = 0x06ba;
- t.noonghunnafinalarabic = 0xfb9f;
- t.nooninitialarabic = 0xfee7;
- t.noonjeeminitialarabic = 0xfcd2;
- t.noonjeemisolatedarabic = 0xfc4b;
- t.noonmedialarabic = 0xfee8;
- t.noonmeeminitialarabic = 0xfcd5;
- t.noonmeemisolatedarabic = 0xfc4e;
- t.noonnoonfinalarabic = 0xfc8d;
- t.notcontains = 0x220c;
- t.notelement = 0x2209;
- t.notelementof = 0x2209;
- t.notequal = 0x2260;
- t.notgreater = 0x226f;
- t.notgreaternorequal = 0x2271;
- t.notgreaternorless = 0x2279;
- t.notidentical = 0x2262;
- t.notless = 0x226e;
- t.notlessnorequal = 0x2270;
- t.notparallel = 0x2226;
- t.notprecedes = 0x2280;
- t.notsubset = 0x2284;
- t.notsucceeds = 0x2281;
- t.notsuperset = 0x2285;
- t.nowarmenian = 0x0576;
- t.nparen = 0x24a9;
- t.nssquare = 0x33b1;
- t.nsuperior = 0x207f;
- t.ntilde = 0x00f1;
- t.nu = 0x03bd;
- t.nuhiragana = 0x306c;
- t.nukatakana = 0x30cc;
- t.nukatakanahalfwidth = 0xff87;
- t.nuktabengali = 0x09bc;
- t.nuktadeva = 0x093c;
- t.nuktagujarati = 0x0abc;
- t.nuktagurmukhi = 0x0a3c;
- t.numbersign = 0x0023;
- t.numbersignmonospace = 0xff03;
- t.numbersignsmall = 0xfe5f;
- t.numeralsigngreek = 0x0374;
- t.numeralsignlowergreek = 0x0375;
- t.numero = 0x2116;
- t.nun = 0x05e0;
- t.nundagesh = 0xfb40;
- t.nundageshhebrew = 0xfb40;
- t.nunhebrew = 0x05e0;
- t.nvsquare = 0x33b5;
- t.nwsquare = 0x33bb;
- t.nyabengali = 0x099e;
- t.nyadeva = 0x091e;
- t.nyagujarati = 0x0a9e;
- t.nyagurmukhi = 0x0a1e;
- t.o = 0x006f;
- t.oacute = 0x00f3;
- t.oangthai = 0x0e2d;
- t.obarred = 0x0275;
- t.obarredcyrillic = 0x04e9;
- t.obarreddieresiscyrillic = 0x04eb;
- t.obengali = 0x0993;
- t.obopomofo = 0x311b;
- t.obreve = 0x014f;
- t.ocandradeva = 0x0911;
- t.ocandragujarati = 0x0a91;
- t.ocandravowelsigndeva = 0x0949;
- t.ocandravowelsigngujarati = 0x0ac9;
- t.ocaron = 0x01d2;
- t.ocircle = 0x24de;
- t.ocircumflex = 0x00f4;
- t.ocircumflexacute = 0x1ed1;
- t.ocircumflexdotbelow = 0x1ed9;
- t.ocircumflexgrave = 0x1ed3;
- t.ocircumflexhookabove = 0x1ed5;
- t.ocircumflextilde = 0x1ed7;
- t.ocyrillic = 0x043e;
- t.odblacute = 0x0151;
- t.odblgrave = 0x020d;
- t.odeva = 0x0913;
- t.odieresis = 0x00f6;
- t.odieresiscyrillic = 0x04e7;
- t.odotbelow = 0x1ecd;
- t.oe = 0x0153;
- t.oekorean = 0x315a;
- t.ogonek = 0x02db;
- t.ogonekcmb = 0x0328;
- t.ograve = 0x00f2;
- t.ogujarati = 0x0a93;
- t.oharmenian = 0x0585;
- t.ohiragana = 0x304a;
- t.ohookabove = 0x1ecf;
- t.ohorn = 0x01a1;
- t.ohornacute = 0x1edb;
- t.ohorndotbelow = 0x1ee3;
- t.ohorngrave = 0x1edd;
- t.ohornhookabove = 0x1edf;
- t.ohorntilde = 0x1ee1;
- t.ohungarumlaut = 0x0151;
- t.oi = 0x01a3;
- t.oinvertedbreve = 0x020f;
- t.okatakana = 0x30aa;
- t.okatakanahalfwidth = 0xff75;
- t.okorean = 0x3157;
- t.olehebrew = 0x05ab;
- t.omacron = 0x014d;
- t.omacronacute = 0x1e53;
- t.omacrongrave = 0x1e51;
- t.omdeva = 0x0950;
- t.omega = 0x03c9;
- t.omega1 = 0x03d6;
- t.omegacyrillic = 0x0461;
- t.omegalatinclosed = 0x0277;
- t.omegaroundcyrillic = 0x047b;
- t.omegatitlocyrillic = 0x047d;
- t.omegatonos = 0x03ce;
- t.omgujarati = 0x0ad0;
- t.omicron = 0x03bf;
- t.omicrontonos = 0x03cc;
- t.omonospace = 0xff4f;
- t.one = 0x0031;
- t.onearabic = 0x0661;
- t.onebengali = 0x09e7;
- t.onecircle = 0x2460;
- t.onecircleinversesansserif = 0x278a;
- t.onedeva = 0x0967;
- t.onedotenleader = 0x2024;
- t.oneeighth = 0x215b;
- t.onefitted = 0xf6dc;
- t.onegujarati = 0x0ae7;
- t.onegurmukhi = 0x0a67;
- t.onehackarabic = 0x0661;
- t.onehalf = 0x00bd;
- t.onehangzhou = 0x3021;
- t.oneideographicparen = 0x3220;
- t.oneinferior = 0x2081;
- t.onemonospace = 0xff11;
- t.onenumeratorbengali = 0x09f4;
- t.oneoldstyle = 0xf731;
- t.oneparen = 0x2474;
- t.oneperiod = 0x2488;
- t.onepersian = 0x06f1;
- t.onequarter = 0x00bc;
- t.oneroman = 0x2170;
- t.onesuperior = 0x00b9;
- t.onethai = 0x0e51;
- t.onethird = 0x2153;
- t.oogonek = 0x01eb;
- t.oogonekmacron = 0x01ed;
- t.oogurmukhi = 0x0a13;
- t.oomatragurmukhi = 0x0a4b;
- t.oopen = 0x0254;
- t.oparen = 0x24aa;
- t.openbullet = 0x25e6;
- t.option = 0x2325;
- t.ordfeminine = 0x00aa;
- t.ordmasculine = 0x00ba;
- t.orthogonal = 0x221f;
- t.oshortdeva = 0x0912;
- t.oshortvowelsigndeva = 0x094a;
- t.oslash = 0x00f8;
- t.oslashacute = 0x01ff;
- t.osmallhiragana = 0x3049;
- t.osmallkatakana = 0x30a9;
- t.osmallkatakanahalfwidth = 0xff6b;
- t.ostrokeacute = 0x01ff;
- t.osuperior = 0xf6f0;
- t.otcyrillic = 0x047f;
- t.otilde = 0x00f5;
- t.otildeacute = 0x1e4d;
- t.otildedieresis = 0x1e4f;
- t.oubopomofo = 0x3121;
- t.overline = 0x203e;
- t.overlinecenterline = 0xfe4a;
- t.overlinecmb = 0x0305;
- t.overlinedashed = 0xfe49;
- t.overlinedblwavy = 0xfe4c;
- t.overlinewavy = 0xfe4b;
- t.overscore = 0x00af;
- t.ovowelsignbengali = 0x09cb;
- t.ovowelsigndeva = 0x094b;
- t.ovowelsigngujarati = 0x0acb;
- t.p = 0x0070;
- t.paampssquare = 0x3380;
- t.paasentosquare = 0x332b;
- t.pabengali = 0x09aa;
- t.pacute = 0x1e55;
- t.padeva = 0x092a;
- t.pagedown = 0x21df;
- t.pageup = 0x21de;
- t.pagujarati = 0x0aaa;
- t.pagurmukhi = 0x0a2a;
- t.pahiragana = 0x3071;
- t.paiyannoithai = 0x0e2f;
- t.pakatakana = 0x30d1;
- t.palatalizationcyrilliccmb = 0x0484;
- t.palochkacyrillic = 0x04c0;
- t.pansioskorean = 0x317f;
- t.paragraph = 0x00b6;
- t.parallel = 0x2225;
- t.parenleft = 0x0028;
- t.parenleftaltonearabic = 0xfd3e;
- t.parenleftbt = 0xf8ed;
- t.parenleftex = 0xf8ec;
- t.parenleftinferior = 0x208d;
- t.parenleftmonospace = 0xff08;
- t.parenleftsmall = 0xfe59;
- t.parenleftsuperior = 0x207d;
- t.parenlefttp = 0xf8eb;
- t.parenleftvertical = 0xfe35;
- t.parenright = 0x0029;
- t.parenrightaltonearabic = 0xfd3f;
- t.parenrightbt = 0xf8f8;
- t.parenrightex = 0xf8f7;
- t.parenrightinferior = 0x208e;
- t.parenrightmonospace = 0xff09;
- t.parenrightsmall = 0xfe5a;
- t.parenrightsuperior = 0x207e;
- t.parenrighttp = 0xf8f6;
- t.parenrightvertical = 0xfe36;
- t.partialdiff = 0x2202;
- t.paseqhebrew = 0x05c0;
- t.pashtahebrew = 0x0599;
- t.pasquare = 0x33a9;
- t.patah = 0x05b7;
- t.patah11 = 0x05b7;
- t.patah1d = 0x05b7;
- t.patah2a = 0x05b7;
- t.patahhebrew = 0x05b7;
- t.patahnarrowhebrew = 0x05b7;
- t.patahquarterhebrew = 0x05b7;
- t.patahwidehebrew = 0x05b7;
- t.pazerhebrew = 0x05a1;
- t.pbopomofo = 0x3106;
- t.pcircle = 0x24df;
- t.pdotaccent = 0x1e57;
- t.pe = 0x05e4;
- t.pecyrillic = 0x043f;
- t.pedagesh = 0xfb44;
- t.pedageshhebrew = 0xfb44;
- t.peezisquare = 0x333b;
- t.pefinaldageshhebrew = 0xfb43;
- t.peharabic = 0x067e;
- t.peharmenian = 0x057a;
- t.pehebrew = 0x05e4;
- t.pehfinalarabic = 0xfb57;
- t.pehinitialarabic = 0xfb58;
- t.pehiragana = 0x307a;
- t.pehmedialarabic = 0xfb59;
- t.pekatakana = 0x30da;
- t.pemiddlehookcyrillic = 0x04a7;
- t.perafehebrew = 0xfb4e;
- t.percent = 0x0025;
- t.percentarabic = 0x066a;
- t.percentmonospace = 0xff05;
- t.percentsmall = 0xfe6a;
- t.period = 0x002e;
- t.periodarmenian = 0x0589;
- t.periodcentered = 0x00b7;
- t.periodhalfwidth = 0xff61;
- t.periodinferior = 0xf6e7;
- t.periodmonospace = 0xff0e;
- t.periodsmall = 0xfe52;
- t.periodsuperior = 0xf6e8;
- t.perispomenigreekcmb = 0x0342;
- t.perpendicular = 0x22a5;
- t.perthousand = 0x2030;
- t.peseta = 0x20a7;
- t.pfsquare = 0x338a;
- t.phabengali = 0x09ab;
- t.phadeva = 0x092b;
- t.phagujarati = 0x0aab;
- t.phagurmukhi = 0x0a2b;
- t.phi = 0x03c6;
- t.phi1 = 0x03d5;
- t.phieuphacirclekorean = 0x327a;
- t.phieuphaparenkorean = 0x321a;
- t.phieuphcirclekorean = 0x326c;
- t.phieuphkorean = 0x314d;
- t.phieuphparenkorean = 0x320c;
- t.philatin = 0x0278;
- t.phinthuthai = 0x0e3a;
- t.phisymbolgreek = 0x03d5;
- t.phook = 0x01a5;
- t.phophanthai = 0x0e1e;
- t.phophungthai = 0x0e1c;
- t.phosamphaothai = 0x0e20;
- t.pi = 0x03c0;
- t.pieupacirclekorean = 0x3273;
- t.pieupaparenkorean = 0x3213;
- t.pieupcieuckorean = 0x3176;
- t.pieupcirclekorean = 0x3265;
- t.pieupkiyeokkorean = 0x3172;
- t.pieupkorean = 0x3142;
- t.pieupparenkorean = 0x3205;
- t.pieupsioskiyeokkorean = 0x3174;
- t.pieupsioskorean = 0x3144;
- t.pieupsiostikeutkorean = 0x3175;
- t.pieupthieuthkorean = 0x3177;
- t.pieuptikeutkorean = 0x3173;
- t.pihiragana = 0x3074;
- t.pikatakana = 0x30d4;
- t.pisymbolgreek = 0x03d6;
- t.piwrarmenian = 0x0583;
- t.plus = 0x002b;
- t.plusbelowcmb = 0x031f;
- t.pluscircle = 0x2295;
- t.plusminus = 0x00b1;
- t.plusmod = 0x02d6;
- t.plusmonospace = 0xff0b;
- t.plussmall = 0xfe62;
- t.plussuperior = 0x207a;
- t.pmonospace = 0xff50;
- t.pmsquare = 0x33d8;
- t.pohiragana = 0x307d;
- t.pointingindexdownwhite = 0x261f;
- t.pointingindexleftwhite = 0x261c;
- t.pointingindexrightwhite = 0x261e;
- t.pointingindexupwhite = 0x261d;
- t.pokatakana = 0x30dd;
- t.poplathai = 0x0e1b;
- t.postalmark = 0x3012;
- t.postalmarkface = 0x3020;
- t.pparen = 0x24ab;
- t.precedes = 0x227a;
- t.prescription = 0x211e;
- t.primemod = 0x02b9;
- t.primereversed = 0x2035;
- t.product = 0x220f;
- t.projective = 0x2305;
- t.prolongedkana = 0x30fc;
- t.propellor = 0x2318;
- t.propersubset = 0x2282;
- t.propersuperset = 0x2283;
- t.proportion = 0x2237;
- t.proportional = 0x221d;
- t.psi = 0x03c8;
- t.psicyrillic = 0x0471;
- t.psilipneumatacyrilliccmb = 0x0486;
- t.pssquare = 0x33b0;
- t.puhiragana = 0x3077;
- t.pukatakana = 0x30d7;
- t.pvsquare = 0x33b4;
- t.pwsquare = 0x33ba;
- t.q = 0x0071;
- t.qadeva = 0x0958;
- t.qadmahebrew = 0x05a8;
- t.qafarabic = 0x0642;
- t.qaffinalarabic = 0xfed6;
- t.qafinitialarabic = 0xfed7;
- t.qafmedialarabic = 0xfed8;
- t.qamats = 0x05b8;
- t.qamats10 = 0x05b8;
- t.qamats1a = 0x05b8;
- t.qamats1c = 0x05b8;
- t.qamats27 = 0x05b8;
- t.qamats29 = 0x05b8;
- t.qamats33 = 0x05b8;
- t.qamatsde = 0x05b8;
- t.qamatshebrew = 0x05b8;
- t.qamatsnarrowhebrew = 0x05b8;
- t.qamatsqatanhebrew = 0x05b8;
- t.qamatsqatannarrowhebrew = 0x05b8;
- t.qamatsqatanquarterhebrew = 0x05b8;
- t.qamatsqatanwidehebrew = 0x05b8;
- t.qamatsquarterhebrew = 0x05b8;
- t.qamatswidehebrew = 0x05b8;
- t.qarneyparahebrew = 0x059f;
- t.qbopomofo = 0x3111;
- t.qcircle = 0x24e0;
- t.qhook = 0x02a0;
- t.qmonospace = 0xff51;
- t.qof = 0x05e7;
- t.qofdagesh = 0xfb47;
- t.qofdageshhebrew = 0xfb47;
- t.qofhebrew = 0x05e7;
- t.qparen = 0x24ac;
- t.quarternote = 0x2669;
- t.qubuts = 0x05bb;
- t.qubuts18 = 0x05bb;
- t.qubuts25 = 0x05bb;
- t.qubuts31 = 0x05bb;
- t.qubutshebrew = 0x05bb;
- t.qubutsnarrowhebrew = 0x05bb;
- t.qubutsquarterhebrew = 0x05bb;
- t.qubutswidehebrew = 0x05bb;
- t.question = 0x003f;
- t.questionarabic = 0x061f;
- t.questionarmenian = 0x055e;
- t.questiondown = 0x00bf;
- t.questiondownsmall = 0xf7bf;
- t.questiongreek = 0x037e;
- t.questionmonospace = 0xff1f;
- t.questionsmall = 0xf73f;
- t.quotedbl = 0x0022;
- t.quotedblbase = 0x201e;
- t.quotedblleft = 0x201c;
- t.quotedblmonospace = 0xff02;
- t.quotedblprime = 0x301e;
- t.quotedblprimereversed = 0x301d;
- t.quotedblright = 0x201d;
- t.quoteleft = 0x2018;
- t.quoteleftreversed = 0x201b;
- t.quotereversed = 0x201b;
- t.quoteright = 0x2019;
- t.quoterightn = 0x0149;
- t.quotesinglbase = 0x201a;
- t.quotesingle = 0x0027;
- t.quotesinglemonospace = 0xff07;
- t.r = 0x0072;
- t.raarmenian = 0x057c;
- t.rabengali = 0x09b0;
- t.racute = 0x0155;
- t.radeva = 0x0930;
- t.radical = 0x221a;
- t.radicalex = 0xf8e5;
- t.radoverssquare = 0x33ae;
- t.radoverssquaredsquare = 0x33af;
- t.radsquare = 0x33ad;
- t.rafe = 0x05bf;
- t.rafehebrew = 0x05bf;
- t.ragujarati = 0x0ab0;
- t.ragurmukhi = 0x0a30;
- t.rahiragana = 0x3089;
- t.rakatakana = 0x30e9;
- t.rakatakanahalfwidth = 0xff97;
- t.ralowerdiagonalbengali = 0x09f1;
- t.ramiddlediagonalbengali = 0x09f0;
- t.ramshorn = 0x0264;
- t.ratio = 0x2236;
- t.rbopomofo = 0x3116;
- t.rcaron = 0x0159;
- t.rcedilla = 0x0157;
- t.rcircle = 0x24e1;
- t.rcommaaccent = 0x0157;
- t.rdblgrave = 0x0211;
- t.rdotaccent = 0x1e59;
- t.rdotbelow = 0x1e5b;
- t.rdotbelowmacron = 0x1e5d;
- t.referencemark = 0x203b;
- t.reflexsubset = 0x2286;
- t.reflexsuperset = 0x2287;
- t.registered = 0x00ae;
- t.registersans = 0xf8e8;
- t.registerserif = 0xf6da;
- t.reharabic = 0x0631;
- t.reharmenian = 0x0580;
- t.rehfinalarabic = 0xfeae;
- t.rehiragana = 0x308c;
- t.rekatakana = 0x30ec;
- t.rekatakanahalfwidth = 0xff9a;
- t.resh = 0x05e8;
- t.reshdageshhebrew = 0xfb48;
- t.reshhebrew = 0x05e8;
- t.reversedtilde = 0x223d;
- t.reviahebrew = 0x0597;
- t.reviamugrashhebrew = 0x0597;
- t.revlogicalnot = 0x2310;
- t.rfishhook = 0x027e;
- t.rfishhookreversed = 0x027f;
- t.rhabengali = 0x09dd;
- t.rhadeva = 0x095d;
- t.rho = 0x03c1;
- t.rhook = 0x027d;
- t.rhookturned = 0x027b;
- t.rhookturnedsuperior = 0x02b5;
- t.rhosymbolgreek = 0x03f1;
- t.rhotichookmod = 0x02de;
- t.rieulacirclekorean = 0x3271;
- t.rieulaparenkorean = 0x3211;
- t.rieulcirclekorean = 0x3263;
- t.rieulhieuhkorean = 0x3140;
- t.rieulkiyeokkorean = 0x313a;
- t.rieulkiyeoksioskorean = 0x3169;
- t.rieulkorean = 0x3139;
- t.rieulmieumkorean = 0x313b;
- t.rieulpansioskorean = 0x316c;
- t.rieulparenkorean = 0x3203;
- t.rieulphieuphkorean = 0x313f;
- t.rieulpieupkorean = 0x313c;
- t.rieulpieupsioskorean = 0x316b;
- t.rieulsioskorean = 0x313d;
- t.rieulthieuthkorean = 0x313e;
- t.rieultikeutkorean = 0x316a;
- t.rieulyeorinhieuhkorean = 0x316d;
- t.rightangle = 0x221f;
- t.righttackbelowcmb = 0x0319;
- t.righttriangle = 0x22bf;
- t.rihiragana = 0x308a;
- t.rikatakana = 0x30ea;
- t.rikatakanahalfwidth = 0xff98;
- t.ring = 0x02da;
- t.ringbelowcmb = 0x0325;
- t.ringcmb = 0x030a;
- t.ringhalfleft = 0x02bf;
- t.ringhalfleftarmenian = 0x0559;
- t.ringhalfleftbelowcmb = 0x031c;
- t.ringhalfleftcentered = 0x02d3;
- t.ringhalfright = 0x02be;
- t.ringhalfrightbelowcmb = 0x0339;
- t.ringhalfrightcentered = 0x02d2;
- t.rinvertedbreve = 0x0213;
- t.rittorusquare = 0x3351;
- t.rlinebelow = 0x1e5f;
- t.rlongleg = 0x027c;
- t.rlonglegturned = 0x027a;
- t.rmonospace = 0xff52;
- t.rohiragana = 0x308d;
- t.rokatakana = 0x30ed;
- t.rokatakanahalfwidth = 0xff9b;
- t.roruathai = 0x0e23;
- t.rparen = 0x24ad;
- t.rrabengali = 0x09dc;
- t.rradeva = 0x0931;
- t.rragurmukhi = 0x0a5c;
- t.rreharabic = 0x0691;
- t.rrehfinalarabic = 0xfb8d;
- t.rrvocalicbengali = 0x09e0;
- t.rrvocalicdeva = 0x0960;
- t.rrvocalicgujarati = 0x0ae0;
- t.rrvocalicvowelsignbengali = 0x09c4;
- t.rrvocalicvowelsigndeva = 0x0944;
- t.rrvocalicvowelsigngujarati = 0x0ac4;
- t.rsuperior = 0xf6f1;
- t.rtblock = 0x2590;
- t.rturned = 0x0279;
- t.rturnedsuperior = 0x02b4;
- t.ruhiragana = 0x308b;
- t.rukatakana = 0x30eb;
- t.rukatakanahalfwidth = 0xff99;
- t.rupeemarkbengali = 0x09f2;
- t.rupeesignbengali = 0x09f3;
- t.rupiah = 0xf6dd;
- t.ruthai = 0x0e24;
- t.rvocalicbengali = 0x098b;
- t.rvocalicdeva = 0x090b;
- t.rvocalicgujarati = 0x0a8b;
- t.rvocalicvowelsignbengali = 0x09c3;
- t.rvocalicvowelsigndeva = 0x0943;
- t.rvocalicvowelsigngujarati = 0x0ac3;
- t.s = 0x0073;
- t.sabengali = 0x09b8;
- t.sacute = 0x015b;
- t.sacutedotaccent = 0x1e65;
- t.sadarabic = 0x0635;
- t.sadeva = 0x0938;
- t.sadfinalarabic = 0xfeba;
- t.sadinitialarabic = 0xfebb;
- t.sadmedialarabic = 0xfebc;
- t.sagujarati = 0x0ab8;
- t.sagurmukhi = 0x0a38;
- t.sahiragana = 0x3055;
- t.sakatakana = 0x30b5;
- t.sakatakanahalfwidth = 0xff7b;
- t.sallallahoualayhewasallamarabic = 0xfdfa;
- t.samekh = 0x05e1;
- t.samekhdagesh = 0xfb41;
- t.samekhdageshhebrew = 0xfb41;
- t.samekhhebrew = 0x05e1;
- t.saraaathai = 0x0e32;
- t.saraaethai = 0x0e41;
- t.saraaimaimalaithai = 0x0e44;
- t.saraaimaimuanthai = 0x0e43;
- t.saraamthai = 0x0e33;
- t.saraathai = 0x0e30;
- t.saraethai = 0x0e40;
- t.saraiileftthai = 0xf886;
- t.saraiithai = 0x0e35;
- t.saraileftthai = 0xf885;
- t.saraithai = 0x0e34;
- t.saraothai = 0x0e42;
- t.saraueeleftthai = 0xf888;
- t.saraueethai = 0x0e37;
- t.saraueleftthai = 0xf887;
- t.sarauethai = 0x0e36;
- t.sarauthai = 0x0e38;
- t.sarauuthai = 0x0e39;
- t.sbopomofo = 0x3119;
- t.scaron = 0x0161;
- t.scarondotaccent = 0x1e67;
- t.scedilla = 0x015f;
- t.schwa = 0x0259;
- t.schwacyrillic = 0x04d9;
- t.schwadieresiscyrillic = 0x04db;
- t.schwahook = 0x025a;
- t.scircle = 0x24e2;
- t.scircumflex = 0x015d;
- t.scommaaccent = 0x0219;
- t.sdotaccent = 0x1e61;
- t.sdotbelow = 0x1e63;
- t.sdotbelowdotaccent = 0x1e69;
- t.seagullbelowcmb = 0x033c;
- t.second = 0x2033;
- t.secondtonechinese = 0x02ca;
- t.section = 0x00a7;
- t.seenarabic = 0x0633;
- t.seenfinalarabic = 0xfeb2;
- t.seeninitialarabic = 0xfeb3;
- t.seenmedialarabic = 0xfeb4;
- t.segol = 0x05b6;
- t.segol13 = 0x05b6;
- t.segol1f = 0x05b6;
- t.segol2c = 0x05b6;
- t.segolhebrew = 0x05b6;
- t.segolnarrowhebrew = 0x05b6;
- t.segolquarterhebrew = 0x05b6;
- t.segoltahebrew = 0x0592;
- t.segolwidehebrew = 0x05b6;
- t.seharmenian = 0x057d;
- t.sehiragana = 0x305b;
- t.sekatakana = 0x30bb;
- t.sekatakanahalfwidth = 0xff7e;
- t.semicolon = 0x003b;
- t.semicolonarabic = 0x061b;
- t.semicolonmonospace = 0xff1b;
- t.semicolonsmall = 0xfe54;
- t.semivoicedmarkkana = 0x309c;
- t.semivoicedmarkkanahalfwidth = 0xff9f;
- t.sentisquare = 0x3322;
- t.sentosquare = 0x3323;
- t.seven = 0x0037;
- t.sevenarabic = 0x0667;
- t.sevenbengali = 0x09ed;
- t.sevencircle = 0x2466;
- t.sevencircleinversesansserif = 0x2790;
- t.sevendeva = 0x096d;
- t.seveneighths = 0x215e;
- t.sevengujarati = 0x0aed;
- t.sevengurmukhi = 0x0a6d;
- t.sevenhackarabic = 0x0667;
- t.sevenhangzhou = 0x3027;
- t.sevenideographicparen = 0x3226;
- t.seveninferior = 0x2087;
- t.sevenmonospace = 0xff17;
- t.sevenoldstyle = 0xf737;
- t.sevenparen = 0x247a;
- t.sevenperiod = 0x248e;
- t.sevenpersian = 0x06f7;
- t.sevenroman = 0x2176;
- t.sevensuperior = 0x2077;
- t.seventeencircle = 0x2470;
- t.seventeenparen = 0x2484;
- t.seventeenperiod = 0x2498;
- t.seventhai = 0x0e57;
- t.sfthyphen = 0x00ad;
- t.shaarmenian = 0x0577;
- t.shabengali = 0x09b6;
- t.shacyrillic = 0x0448;
- t.shaddaarabic = 0x0651;
- t.shaddadammaarabic = 0xfc61;
- t.shaddadammatanarabic = 0xfc5e;
- t.shaddafathaarabic = 0xfc60;
- t.shaddakasraarabic = 0xfc62;
- t.shaddakasratanarabic = 0xfc5f;
- t.shade = 0x2592;
- t.shadedark = 0x2593;
- t.shadelight = 0x2591;
- t.shademedium = 0x2592;
- t.shadeva = 0x0936;
- t.shagujarati = 0x0ab6;
- t.shagurmukhi = 0x0a36;
- t.shalshelethebrew = 0x0593;
- t.shbopomofo = 0x3115;
- t.shchacyrillic = 0x0449;
- t.sheenarabic = 0x0634;
- t.sheenfinalarabic = 0xfeb6;
- t.sheeninitialarabic = 0xfeb7;
- t.sheenmedialarabic = 0xfeb8;
- t.sheicoptic = 0x03e3;
- t.sheqel = 0x20aa;
- t.sheqelhebrew = 0x20aa;
- t.sheva = 0x05b0;
- t.sheva115 = 0x05b0;
- t.sheva15 = 0x05b0;
- t.sheva22 = 0x05b0;
- t.sheva2e = 0x05b0;
- t.shevahebrew = 0x05b0;
- t.shevanarrowhebrew = 0x05b0;
- t.shevaquarterhebrew = 0x05b0;
- t.shevawidehebrew = 0x05b0;
- t.shhacyrillic = 0x04bb;
- t.shimacoptic = 0x03ed;
- t.shin = 0x05e9;
- t.shindagesh = 0xfb49;
- t.shindageshhebrew = 0xfb49;
- t.shindageshshindot = 0xfb2c;
- t.shindageshshindothebrew = 0xfb2c;
- t.shindageshsindot = 0xfb2d;
- t.shindageshsindothebrew = 0xfb2d;
- t.shindothebrew = 0x05c1;
- t.shinhebrew = 0x05e9;
- t.shinshindot = 0xfb2a;
- t.shinshindothebrew = 0xfb2a;
- t.shinsindot = 0xfb2b;
- t.shinsindothebrew = 0xfb2b;
- t.shook = 0x0282;
- t.sigma = 0x03c3;
- t.sigma1 = 0x03c2;
- t.sigmafinal = 0x03c2;
- t.sigmalunatesymbolgreek = 0x03f2;
- t.sihiragana = 0x3057;
- t.sikatakana = 0x30b7;
- t.sikatakanahalfwidth = 0xff7c;
- t.siluqhebrew = 0x05bd;
- t.siluqlefthebrew = 0x05bd;
- t.similar = 0x223c;
- t.sindothebrew = 0x05c2;
- t.siosacirclekorean = 0x3274;
- t.siosaparenkorean = 0x3214;
- t.sioscieuckorean = 0x317e;
- t.sioscirclekorean = 0x3266;
- t.sioskiyeokkorean = 0x317a;
- t.sioskorean = 0x3145;
- t.siosnieunkorean = 0x317b;
- t.siosparenkorean = 0x3206;
- t.siospieupkorean = 0x317d;
- t.siostikeutkorean = 0x317c;
- t.six = 0x0036;
- t.sixarabic = 0x0666;
- t.sixbengali = 0x09ec;
- t.sixcircle = 0x2465;
- t.sixcircleinversesansserif = 0x278f;
- t.sixdeva = 0x096c;
- t.sixgujarati = 0x0aec;
- t.sixgurmukhi = 0x0a6c;
- t.sixhackarabic = 0x0666;
- t.sixhangzhou = 0x3026;
- t.sixideographicparen = 0x3225;
- t.sixinferior = 0x2086;
- t.sixmonospace = 0xff16;
- t.sixoldstyle = 0xf736;
- t.sixparen = 0x2479;
- t.sixperiod = 0x248d;
- t.sixpersian = 0x06f6;
- t.sixroman = 0x2175;
- t.sixsuperior = 0x2076;
- t.sixteencircle = 0x246f;
- t.sixteencurrencydenominatorbengali = 0x09f9;
- t.sixteenparen = 0x2483;
- t.sixteenperiod = 0x2497;
- t.sixthai = 0x0e56;
- t.slash = 0x002f;
- t.slashmonospace = 0xff0f;
- t.slong = 0x017f;
- t.slongdotaccent = 0x1e9b;
- t.smileface = 0x263a;
- t.smonospace = 0xff53;
- t.sofpasuqhebrew = 0x05c3;
- t.softhyphen = 0x00ad;
- t.softsigncyrillic = 0x044c;
- t.sohiragana = 0x305d;
- t.sokatakana = 0x30bd;
- t.sokatakanahalfwidth = 0xff7f;
- t.soliduslongoverlaycmb = 0x0338;
- t.solidusshortoverlaycmb = 0x0337;
- t.sorusithai = 0x0e29;
- t.sosalathai = 0x0e28;
- t.sosothai = 0x0e0b;
- t.sosuathai = 0x0e2a;
- t.space = 0x0020;
- t.spacehackarabic = 0x0020;
- t.spade = 0x2660;
- t.spadesuitblack = 0x2660;
- t.spadesuitwhite = 0x2664;
- t.sparen = 0x24ae;
- t.squarebelowcmb = 0x033b;
- t.squarecc = 0x33c4;
- t.squarecm = 0x339d;
- t.squarediagonalcrosshatchfill = 0x25a9;
- t.squarehorizontalfill = 0x25a4;
- t.squarekg = 0x338f;
- t.squarekm = 0x339e;
- t.squarekmcapital = 0x33ce;
- t.squareln = 0x33d1;
- t.squarelog = 0x33d2;
- t.squaremg = 0x338e;
- t.squaremil = 0x33d5;
- t.squaremm = 0x339c;
- t.squaremsquared = 0x33a1;
- t.squareorthogonalcrosshatchfill = 0x25a6;
- t.squareupperlefttolowerrightfill = 0x25a7;
- t.squareupperrighttolowerleftfill = 0x25a8;
- t.squareverticalfill = 0x25a5;
- t.squarewhitewithsmallblack = 0x25a3;
- t.srsquare = 0x33db;
- t.ssabengali = 0x09b7;
- t.ssadeva = 0x0937;
- t.ssagujarati = 0x0ab7;
- t.ssangcieuckorean = 0x3149;
- t.ssanghieuhkorean = 0x3185;
- t.ssangieungkorean = 0x3180;
- t.ssangkiyeokkorean = 0x3132;
- t.ssangnieunkorean = 0x3165;
- t.ssangpieupkorean = 0x3143;
- t.ssangsioskorean = 0x3146;
- t.ssangtikeutkorean = 0x3138;
- t.ssuperior = 0xf6f2;
- t.sterling = 0x00a3;
- t.sterlingmonospace = 0xffe1;
- t.strokelongoverlaycmb = 0x0336;
- t.strokeshortoverlaycmb = 0x0335;
- t.subset = 0x2282;
- t.subsetnotequal = 0x228a;
- t.subsetorequal = 0x2286;
- t.succeeds = 0x227b;
- t.suchthat = 0x220b;
- t.suhiragana = 0x3059;
- t.sukatakana = 0x30b9;
- t.sukatakanahalfwidth = 0xff7d;
- t.sukunarabic = 0x0652;
- t.summation = 0x2211;
- t.sun = 0x263c;
- t.superset = 0x2283;
- t.supersetnotequal = 0x228b;
- t.supersetorequal = 0x2287;
- t.svsquare = 0x33dc;
- t.syouwaerasquare = 0x337c;
- t.t = 0x0074;
- t.tabengali = 0x09a4;
- t.tackdown = 0x22a4;
- t.tackleft = 0x22a3;
- t.tadeva = 0x0924;
- t.tagujarati = 0x0aa4;
- t.tagurmukhi = 0x0a24;
- t.taharabic = 0x0637;
- t.tahfinalarabic = 0xfec2;
- t.tahinitialarabic = 0xfec3;
- t.tahiragana = 0x305f;
- t.tahmedialarabic = 0xfec4;
- t.taisyouerasquare = 0x337d;
- t.takatakana = 0x30bf;
- t.takatakanahalfwidth = 0xff80;
- t.tatweelarabic = 0x0640;
- t.tau = 0x03c4;
- t.tav = 0x05ea;
- t.tavdages = 0xfb4a;
- t.tavdagesh = 0xfb4a;
- t.tavdageshhebrew = 0xfb4a;
- t.tavhebrew = 0x05ea;
- t.tbar = 0x0167;
- t.tbopomofo = 0x310a;
- t.tcaron = 0x0165;
- t.tccurl = 0x02a8;
- t.tcedilla = 0x0163;
- t.tcheharabic = 0x0686;
- t.tchehfinalarabic = 0xfb7b;
- t.tchehinitialarabic = 0xfb7c;
- t.tchehmedialarabic = 0xfb7d;
- t.tcircle = 0x24e3;
- t.tcircumflexbelow = 0x1e71;
- t.tcommaaccent = 0x0163;
- t.tdieresis = 0x1e97;
- t.tdotaccent = 0x1e6b;
- t.tdotbelow = 0x1e6d;
- t.tecyrillic = 0x0442;
- t.tedescendercyrillic = 0x04ad;
- t.teharabic = 0x062a;
- t.tehfinalarabic = 0xfe96;
- t.tehhahinitialarabic = 0xfca2;
- t.tehhahisolatedarabic = 0xfc0c;
- t.tehinitialarabic = 0xfe97;
- t.tehiragana = 0x3066;
- t.tehjeeminitialarabic = 0xfca1;
- t.tehjeemisolatedarabic = 0xfc0b;
- t.tehmarbutaarabic = 0x0629;
- t.tehmarbutafinalarabic = 0xfe94;
- t.tehmedialarabic = 0xfe98;
- t.tehmeeminitialarabic = 0xfca4;
- t.tehmeemisolatedarabic = 0xfc0e;
- t.tehnoonfinalarabic = 0xfc73;
- t.tekatakana = 0x30c6;
- t.tekatakanahalfwidth = 0xff83;
- t.telephone = 0x2121;
- t.telephoneblack = 0x260e;
- t.telishagedolahebrew = 0x05a0;
- t.telishaqetanahebrew = 0x05a9;
- t.tencircle = 0x2469;
- t.tenideographicparen = 0x3229;
- t.tenparen = 0x247d;
- t.tenperiod = 0x2491;
- t.tenroman = 0x2179;
- t.tesh = 0x02a7;
- t.tet = 0x05d8;
- t.tetdagesh = 0xfb38;
- t.tetdageshhebrew = 0xfb38;
- t.tethebrew = 0x05d8;
- t.tetsecyrillic = 0x04b5;
- t.tevirhebrew = 0x059b;
- t.tevirlefthebrew = 0x059b;
- t.thabengali = 0x09a5;
- t.thadeva = 0x0925;
- t.thagujarati = 0x0aa5;
- t.thagurmukhi = 0x0a25;
- t.thalarabic = 0x0630;
- t.thalfinalarabic = 0xfeac;
- t.thanthakhatlowleftthai = 0xf898;
- t.thanthakhatlowrightthai = 0xf897;
- t.thanthakhatthai = 0x0e4c;
- t.thanthakhatupperleftthai = 0xf896;
- t.theharabic = 0x062b;
- t.thehfinalarabic = 0xfe9a;
- t.thehinitialarabic = 0xfe9b;
- t.thehmedialarabic = 0xfe9c;
- t.thereexists = 0x2203;
- t.therefore = 0x2234;
- t.theta = 0x03b8;
- t.theta1 = 0x03d1;
- t.thetasymbolgreek = 0x03d1;
- t.thieuthacirclekorean = 0x3279;
- t.thieuthaparenkorean = 0x3219;
- t.thieuthcirclekorean = 0x326b;
- t.thieuthkorean = 0x314c;
- t.thieuthparenkorean = 0x320b;
- t.thirteencircle = 0x246c;
- t.thirteenparen = 0x2480;
- t.thirteenperiod = 0x2494;
- t.thonangmonthothai = 0x0e11;
- t.thook = 0x01ad;
- t.thophuthaothai = 0x0e12;
- t.thorn = 0x00fe;
- t.thothahanthai = 0x0e17;
- t.thothanthai = 0x0e10;
- t.thothongthai = 0x0e18;
- t.thothungthai = 0x0e16;
- t.thousandcyrillic = 0x0482;
- t.thousandsseparatorarabic = 0x066c;
- t.thousandsseparatorpersian = 0x066c;
- t.three = 0x0033;
- t.threearabic = 0x0663;
- t.threebengali = 0x09e9;
- t.threecircle = 0x2462;
- t.threecircleinversesansserif = 0x278c;
- t.threedeva = 0x0969;
- t.threeeighths = 0x215c;
- t.threegujarati = 0x0ae9;
- t.threegurmukhi = 0x0a69;
- t.threehackarabic = 0x0663;
- t.threehangzhou = 0x3023;
- t.threeideographicparen = 0x3222;
- t.threeinferior = 0x2083;
- t.threemonospace = 0xff13;
- t.threenumeratorbengali = 0x09f6;
- t.threeoldstyle = 0xf733;
- t.threeparen = 0x2476;
- t.threeperiod = 0x248a;
- t.threepersian = 0x06f3;
- t.threequarters = 0x00be;
- t.threequartersemdash = 0xf6de;
- t.threeroman = 0x2172;
- t.threesuperior = 0x00b3;
- t.threethai = 0x0e53;
- t.thzsquare = 0x3394;
- t.tihiragana = 0x3061;
- t.tikatakana = 0x30c1;
- t.tikatakanahalfwidth = 0xff81;
- t.tikeutacirclekorean = 0x3270;
- t.tikeutaparenkorean = 0x3210;
- t.tikeutcirclekorean = 0x3262;
- t.tikeutkorean = 0x3137;
- t.tikeutparenkorean = 0x3202;
- t.tilde = 0x02dc;
- t.tildebelowcmb = 0x0330;
- t.tildecmb = 0x0303;
- t.tildecomb = 0x0303;
- t.tildedoublecmb = 0x0360;
- t.tildeoperator = 0x223c;
- t.tildeoverlaycmb = 0x0334;
- t.tildeverticalcmb = 0x033e;
- t.timescircle = 0x2297;
- t.tipehahebrew = 0x0596;
- t.tipehalefthebrew = 0x0596;
- t.tippigurmukhi = 0x0a70;
- t.titlocyrilliccmb = 0x0483;
- t.tiwnarmenian = 0x057f;
- t.tlinebelow = 0x1e6f;
- t.tmonospace = 0xff54;
- t.toarmenian = 0x0569;
- t.tohiragana = 0x3068;
- t.tokatakana = 0x30c8;
- t.tokatakanahalfwidth = 0xff84;
- t.tonebarextrahighmod = 0x02e5;
- t.tonebarextralowmod = 0x02e9;
- t.tonebarhighmod = 0x02e6;
- t.tonebarlowmod = 0x02e8;
- t.tonebarmidmod = 0x02e7;
- t.tonefive = 0x01bd;
- t.tonesix = 0x0185;
- t.tonetwo = 0x01a8;
- t.tonos = 0x0384;
- t.tonsquare = 0x3327;
- t.topatakthai = 0x0e0f;
- t.tortoiseshellbracketleft = 0x3014;
- t.tortoiseshellbracketleftsmall = 0xfe5d;
- t.tortoiseshellbracketleftvertical = 0xfe39;
- t.tortoiseshellbracketright = 0x3015;
- t.tortoiseshellbracketrightsmall = 0xfe5e;
- t.tortoiseshellbracketrightvertical = 0xfe3a;
- t.totaothai = 0x0e15;
- t.tpalatalhook = 0x01ab;
- t.tparen = 0x24af;
- t.trademark = 0x2122;
- t.trademarksans = 0xf8ea;
- t.trademarkserif = 0xf6db;
- t.tretroflexhook = 0x0288;
- t.triagdn = 0x25bc;
- t.triaglf = 0x25c4;
- t.triagrt = 0x25ba;
- t.triagup = 0x25b2;
- t.ts = 0x02a6;
- t.tsadi = 0x05e6;
- t.tsadidagesh = 0xfb46;
- t.tsadidageshhebrew = 0xfb46;
- t.tsadihebrew = 0x05e6;
- t.tsecyrillic = 0x0446;
- t.tsere = 0x05b5;
- t.tsere12 = 0x05b5;
- t.tsere1e = 0x05b5;
- t.tsere2b = 0x05b5;
- t.tserehebrew = 0x05b5;
- t.tserenarrowhebrew = 0x05b5;
- t.tserequarterhebrew = 0x05b5;
- t.tserewidehebrew = 0x05b5;
- t.tshecyrillic = 0x045b;
- t.tsuperior = 0xf6f3;
- t.ttabengali = 0x099f;
- t.ttadeva = 0x091f;
- t.ttagujarati = 0x0a9f;
- t.ttagurmukhi = 0x0a1f;
- t.tteharabic = 0x0679;
- t.ttehfinalarabic = 0xfb67;
- t.ttehinitialarabic = 0xfb68;
- t.ttehmedialarabic = 0xfb69;
- t.tthabengali = 0x09a0;
- t.tthadeva = 0x0920;
- t.tthagujarati = 0x0aa0;
- t.tthagurmukhi = 0x0a20;
- t.tturned = 0x0287;
- t.tuhiragana = 0x3064;
- t.tukatakana = 0x30c4;
- t.tukatakanahalfwidth = 0xff82;
- t.tusmallhiragana = 0x3063;
- t.tusmallkatakana = 0x30c3;
- t.tusmallkatakanahalfwidth = 0xff6f;
- t.twelvecircle = 0x246b;
- t.twelveparen = 0x247f;
- t.twelveperiod = 0x2493;
- t.twelveroman = 0x217b;
- t.twentycircle = 0x2473;
- t.twentyhangzhou = 0x5344;
- t.twentyparen = 0x2487;
- t.twentyperiod = 0x249b;
- t.two = 0x0032;
- t.twoarabic = 0x0662;
- t.twobengali = 0x09e8;
- t.twocircle = 0x2461;
- t.twocircleinversesansserif = 0x278b;
- t.twodeva = 0x0968;
- t.twodotenleader = 0x2025;
- t.twodotleader = 0x2025;
- t.twodotleadervertical = 0xfe30;
- t.twogujarati = 0x0ae8;
- t.twogurmukhi = 0x0a68;
- t.twohackarabic = 0x0662;
- t.twohangzhou = 0x3022;
- t.twoideographicparen = 0x3221;
- t.twoinferior = 0x2082;
- t.twomonospace = 0xff12;
- t.twonumeratorbengali = 0x09f5;
- t.twooldstyle = 0xf732;
- t.twoparen = 0x2475;
- t.twoperiod = 0x2489;
- t.twopersian = 0x06f2;
- t.tworoman = 0x2171;
- t.twostroke = 0x01bb;
- t.twosuperior = 0x00b2;
- t.twothai = 0x0e52;
- t.twothirds = 0x2154;
- t.u = 0x0075;
- t.uacute = 0x00fa;
- t.ubar = 0x0289;
- t.ubengali = 0x0989;
- t.ubopomofo = 0x3128;
- t.ubreve = 0x016d;
- t.ucaron = 0x01d4;
- t.ucircle = 0x24e4;
- t.ucircumflex = 0x00fb;
- t.ucircumflexbelow = 0x1e77;
- t.ucyrillic = 0x0443;
- t.udattadeva = 0x0951;
- t.udblacute = 0x0171;
- t.udblgrave = 0x0215;
- t.udeva = 0x0909;
- t.udieresis = 0x00fc;
- t.udieresisacute = 0x01d8;
- t.udieresisbelow = 0x1e73;
- t.udieresiscaron = 0x01da;
- t.udieresiscyrillic = 0x04f1;
- t.udieresisgrave = 0x01dc;
- t.udieresismacron = 0x01d6;
- t.udotbelow = 0x1ee5;
- t.ugrave = 0x00f9;
- t.ugujarati = 0x0a89;
- t.ugurmukhi = 0x0a09;
- t.uhiragana = 0x3046;
- t.uhookabove = 0x1ee7;
- t.uhorn = 0x01b0;
- t.uhornacute = 0x1ee9;
- t.uhorndotbelow = 0x1ef1;
- t.uhorngrave = 0x1eeb;
- t.uhornhookabove = 0x1eed;
- t.uhorntilde = 0x1eef;
- t.uhungarumlaut = 0x0171;
- t.uhungarumlautcyrillic = 0x04f3;
- t.uinvertedbreve = 0x0217;
- t.ukatakana = 0x30a6;
- t.ukatakanahalfwidth = 0xff73;
- t.ukcyrillic = 0x0479;
- t.ukorean = 0x315c;
- t.umacron = 0x016b;
- t.umacroncyrillic = 0x04ef;
- t.umacrondieresis = 0x1e7b;
- t.umatragurmukhi = 0x0a41;
- t.umonospace = 0xff55;
- t.underscore = 0x005f;
- t.underscoredbl = 0x2017;
- t.underscoremonospace = 0xff3f;
- t.underscorevertical = 0xfe33;
- t.underscorewavy = 0xfe4f;
- t.union = 0x222a;
- t.universal = 0x2200;
- t.uogonek = 0x0173;
- t.uparen = 0x24b0;
- t.upblock = 0x2580;
- t.upperdothebrew = 0x05c4;
- t.upsilon = 0x03c5;
- t.upsilondieresis = 0x03cb;
- t.upsilondieresistonos = 0x03b0;
- t.upsilonlatin = 0x028a;
- t.upsilontonos = 0x03cd;
- t.uptackbelowcmb = 0x031d;
- t.uptackmod = 0x02d4;
- t.uragurmukhi = 0x0a73;
- t.uring = 0x016f;
- t.ushortcyrillic = 0x045e;
- t.usmallhiragana = 0x3045;
- t.usmallkatakana = 0x30a5;
- t.usmallkatakanahalfwidth = 0xff69;
- t.ustraightcyrillic = 0x04af;
- t.ustraightstrokecyrillic = 0x04b1;
- t.utilde = 0x0169;
- t.utildeacute = 0x1e79;
- t.utildebelow = 0x1e75;
- t.uubengali = 0x098a;
- t.uudeva = 0x090a;
- t.uugujarati = 0x0a8a;
- t.uugurmukhi = 0x0a0a;
- t.uumatragurmukhi = 0x0a42;
- t.uuvowelsignbengali = 0x09c2;
- t.uuvowelsigndeva = 0x0942;
- t.uuvowelsigngujarati = 0x0ac2;
- t.uvowelsignbengali = 0x09c1;
- t.uvowelsigndeva = 0x0941;
- t.uvowelsigngujarati = 0x0ac1;
- t.v = 0x0076;
- t.vadeva = 0x0935;
- t.vagujarati = 0x0ab5;
- t.vagurmukhi = 0x0a35;
- t.vakatakana = 0x30f7;
- t.vav = 0x05d5;
- t.vavdagesh = 0xfb35;
- t.vavdagesh65 = 0xfb35;
- t.vavdageshhebrew = 0xfb35;
- t.vavhebrew = 0x05d5;
- t.vavholam = 0xfb4b;
- t.vavholamhebrew = 0xfb4b;
- t.vavvavhebrew = 0x05f0;
- t.vavyodhebrew = 0x05f1;
- t.vcircle = 0x24e5;
- t.vdotbelow = 0x1e7f;
- t.vecyrillic = 0x0432;
- t.veharabic = 0x06a4;
- t.vehfinalarabic = 0xfb6b;
- t.vehinitialarabic = 0xfb6c;
- t.vehmedialarabic = 0xfb6d;
- t.vekatakana = 0x30f9;
- t.venus = 0x2640;
- t.verticalbar = 0x007c;
- t.verticallineabovecmb = 0x030d;
- t.verticallinebelowcmb = 0x0329;
- t.verticallinelowmod = 0x02cc;
- t.verticallinemod = 0x02c8;
- t.vewarmenian = 0x057e;
- t.vhook = 0x028b;
- t.vikatakana = 0x30f8;
- t.viramabengali = 0x09cd;
- t.viramadeva = 0x094d;
- t.viramagujarati = 0x0acd;
- t.visargabengali = 0x0983;
- t.visargadeva = 0x0903;
- t.visargagujarati = 0x0a83;
- t.vmonospace = 0xff56;
- t.voarmenian = 0x0578;
- t.voicediterationhiragana = 0x309e;
- t.voicediterationkatakana = 0x30fe;
- t.voicedmarkkana = 0x309b;
- t.voicedmarkkanahalfwidth = 0xff9e;
- t.vokatakana = 0x30fa;
- t.vparen = 0x24b1;
- t.vtilde = 0x1e7d;
- t.vturned = 0x028c;
- t.vuhiragana = 0x3094;
- t.vukatakana = 0x30f4;
- t.w = 0x0077;
- t.wacute = 0x1e83;
- t.waekorean = 0x3159;
- t.wahiragana = 0x308f;
- t.wakatakana = 0x30ef;
- t.wakatakanahalfwidth = 0xff9c;
- t.wakorean = 0x3158;
- t.wasmallhiragana = 0x308e;
- t.wasmallkatakana = 0x30ee;
- t.wattosquare = 0x3357;
- t.wavedash = 0x301c;
- t.wavyunderscorevertical = 0xfe34;
- t.wawarabic = 0x0648;
- t.wawfinalarabic = 0xfeee;
- t.wawhamzaabovearabic = 0x0624;
- t.wawhamzaabovefinalarabic = 0xfe86;
- t.wbsquare = 0x33dd;
- t.wcircle = 0x24e6;
- t.wcircumflex = 0x0175;
- t.wdieresis = 0x1e85;
- t.wdotaccent = 0x1e87;
- t.wdotbelow = 0x1e89;
- t.wehiragana = 0x3091;
- t.weierstrass = 0x2118;
- t.wekatakana = 0x30f1;
- t.wekorean = 0x315e;
- t.weokorean = 0x315d;
- t.wgrave = 0x1e81;
- t.whitebullet = 0x25e6;
- t.whitecircle = 0x25cb;
- t.whitecircleinverse = 0x25d9;
- t.whitecornerbracketleft = 0x300e;
- t.whitecornerbracketleftvertical = 0xfe43;
- t.whitecornerbracketright = 0x300f;
- t.whitecornerbracketrightvertical = 0xfe44;
- t.whitediamond = 0x25c7;
- t.whitediamondcontainingblacksmalldiamond = 0x25c8;
- t.whitedownpointingsmalltriangle = 0x25bf;
- t.whitedownpointingtriangle = 0x25bd;
- t.whiteleftpointingsmalltriangle = 0x25c3;
- t.whiteleftpointingtriangle = 0x25c1;
- t.whitelenticularbracketleft = 0x3016;
- t.whitelenticularbracketright = 0x3017;
- t.whiterightpointingsmalltriangle = 0x25b9;
- t.whiterightpointingtriangle = 0x25b7;
- t.whitesmallsquare = 0x25ab;
- t.whitesmilingface = 0x263a;
- t.whitesquare = 0x25a1;
- t.whitestar = 0x2606;
- t.whitetelephone = 0x260f;
- t.whitetortoiseshellbracketleft = 0x3018;
- t.whitetortoiseshellbracketright = 0x3019;
- t.whiteuppointingsmalltriangle = 0x25b5;
- t.whiteuppointingtriangle = 0x25b3;
- t.wihiragana = 0x3090;
- t.wikatakana = 0x30f0;
- t.wikorean = 0x315f;
- t.wmonospace = 0xff57;
- t.wohiragana = 0x3092;
- t.wokatakana = 0x30f2;
- t.wokatakanahalfwidth = 0xff66;
- t.won = 0x20a9;
- t.wonmonospace = 0xffe6;
- t.wowaenthai = 0x0e27;
- t.wparen = 0x24b2;
- t.wring = 0x1e98;
- t.wsuperior = 0x02b7;
- t.wturned = 0x028d;
- t.wynn = 0x01bf;
- t.x = 0x0078;
- t.xabovecmb = 0x033d;
- t.xbopomofo = 0x3112;
- t.xcircle = 0x24e7;
- t.xdieresis = 0x1e8d;
- t.xdotaccent = 0x1e8b;
- t.xeharmenian = 0x056d;
- t.xi = 0x03be;
- t.xmonospace = 0xff58;
- t.xparen = 0x24b3;
- t.xsuperior = 0x02e3;
- t.y = 0x0079;
- t.yaadosquare = 0x334e;
- t.yabengali = 0x09af;
- t.yacute = 0x00fd;
- t.yadeva = 0x092f;
- t.yaekorean = 0x3152;
- t.yagujarati = 0x0aaf;
- t.yagurmukhi = 0x0a2f;
- t.yahiragana = 0x3084;
- t.yakatakana = 0x30e4;
- t.yakatakanahalfwidth = 0xff94;
- t.yakorean = 0x3151;
- t.yamakkanthai = 0x0e4e;
- t.yasmallhiragana = 0x3083;
- t.yasmallkatakana = 0x30e3;
- t.yasmallkatakanahalfwidth = 0xff6c;
- t.yatcyrillic = 0x0463;
- t.ycircle = 0x24e8;
- t.ycircumflex = 0x0177;
- t.ydieresis = 0x00ff;
- t.ydotaccent = 0x1e8f;
- t.ydotbelow = 0x1ef5;
- t.yeharabic = 0x064a;
- t.yehbarreearabic = 0x06d2;
- t.yehbarreefinalarabic = 0xfbaf;
- t.yehfinalarabic = 0xfef2;
- t.yehhamzaabovearabic = 0x0626;
- t.yehhamzaabovefinalarabic = 0xfe8a;
- t.yehhamzaaboveinitialarabic = 0xfe8b;
- t.yehhamzaabovemedialarabic = 0xfe8c;
- t.yehinitialarabic = 0xfef3;
- t.yehmedialarabic = 0xfef4;
- t.yehmeeminitialarabic = 0xfcdd;
- t.yehmeemisolatedarabic = 0xfc58;
- t.yehnoonfinalarabic = 0xfc94;
- t.yehthreedotsbelowarabic = 0x06d1;
- t.yekorean = 0x3156;
- t.yen = 0x00a5;
- t.yenmonospace = 0xffe5;
- t.yeokorean = 0x3155;
- t.yeorinhieuhkorean = 0x3186;
- t.yerahbenyomohebrew = 0x05aa;
- t.yerahbenyomolefthebrew = 0x05aa;
- t.yericyrillic = 0x044b;
- t.yerudieresiscyrillic = 0x04f9;
- t.yesieungkorean = 0x3181;
- t.yesieungpansioskorean = 0x3183;
- t.yesieungsioskorean = 0x3182;
- t.yetivhebrew = 0x059a;
- t.ygrave = 0x1ef3;
- t.yhook = 0x01b4;
- t.yhookabove = 0x1ef7;
- t.yiarmenian = 0x0575;
- t.yicyrillic = 0x0457;
- t.yikorean = 0x3162;
- t.yinyang = 0x262f;
- t.yiwnarmenian = 0x0582;
- t.ymonospace = 0xff59;
- t.yod = 0x05d9;
- t.yoddagesh = 0xfb39;
- t.yoddageshhebrew = 0xfb39;
- t.yodhebrew = 0x05d9;
- t.yodyodhebrew = 0x05f2;
- t.yodyodpatahhebrew = 0xfb1f;
- t.yohiragana = 0x3088;
- t.yoikorean = 0x3189;
- t.yokatakana = 0x30e8;
- t.yokatakanahalfwidth = 0xff96;
- t.yokorean = 0x315b;
- t.yosmallhiragana = 0x3087;
- t.yosmallkatakana = 0x30e7;
- t.yosmallkatakanahalfwidth = 0xff6e;
- t.yotgreek = 0x03f3;
- t.yoyaekorean = 0x3188;
- t.yoyakorean = 0x3187;
- t.yoyakthai = 0x0e22;
- t.yoyingthai = 0x0e0d;
- t.yparen = 0x24b4;
- t.ypogegrammeni = 0x037a;
- t.ypogegrammenigreekcmb = 0x0345;
- t.yr = 0x01a6;
- t.yring = 0x1e99;
- t.ysuperior = 0x02b8;
- t.ytilde = 0x1ef9;
- t.yturned = 0x028e;
- t.yuhiragana = 0x3086;
- t.yuikorean = 0x318c;
- t.yukatakana = 0x30e6;
- t.yukatakanahalfwidth = 0xff95;
- t.yukorean = 0x3160;
- t.yusbigcyrillic = 0x046b;
- t.yusbigiotifiedcyrillic = 0x046d;
- t.yuslittlecyrillic = 0x0467;
- t.yuslittleiotifiedcyrillic = 0x0469;
- t.yusmallhiragana = 0x3085;
- t.yusmallkatakana = 0x30e5;
- t.yusmallkatakanahalfwidth = 0xff6d;
- t.yuyekorean = 0x318b;
- t.yuyeokorean = 0x318a;
- t.yyabengali = 0x09df;
- t.yyadeva = 0x095f;
- t.z = 0x007a;
- t.zaarmenian = 0x0566;
- t.zacute = 0x017a;
- t.zadeva = 0x095b;
- t.zagurmukhi = 0x0a5b;
- t.zaharabic = 0x0638;
- t.zahfinalarabic = 0xfec6;
- t.zahinitialarabic = 0xfec7;
- t.zahiragana = 0x3056;
- t.zahmedialarabic = 0xfec8;
- t.zainarabic = 0x0632;
- t.zainfinalarabic = 0xfeb0;
- t.zakatakana = 0x30b6;
- t.zaqefgadolhebrew = 0x0595;
- t.zaqefqatanhebrew = 0x0594;
- t.zarqahebrew = 0x0598;
- t.zayin = 0x05d6;
- t.zayindagesh = 0xfb36;
- t.zayindageshhebrew = 0xfb36;
- t.zayinhebrew = 0x05d6;
- t.zbopomofo = 0x3117;
- t.zcaron = 0x017e;
- t.zcircle = 0x24e9;
- t.zcircumflex = 0x1e91;
- t.zcurl = 0x0291;
- t.zdot = 0x017c;
- t.zdotaccent = 0x017c;
- t.zdotbelow = 0x1e93;
- t.zecyrillic = 0x0437;
- t.zedescendercyrillic = 0x0499;
- t.zedieresiscyrillic = 0x04df;
- t.zehiragana = 0x305c;
- t.zekatakana = 0x30bc;
- t.zero = 0x0030;
- t.zeroarabic = 0x0660;
- t.zerobengali = 0x09e6;
- t.zerodeva = 0x0966;
- t.zerogujarati = 0x0ae6;
- t.zerogurmukhi = 0x0a66;
- t.zerohackarabic = 0x0660;
- t.zeroinferior = 0x2080;
- t.zeromonospace = 0xff10;
- t.zerooldstyle = 0xf730;
- t.zeropersian = 0x06f0;
- t.zerosuperior = 0x2070;
- t.zerothai = 0x0e50;
- t.zerowidthjoiner = 0xfeff;
- t.zerowidthnonjoiner = 0x200c;
- t.zerowidthspace = 0x200b;
- t.zeta = 0x03b6;
- t.zhbopomofo = 0x3113;
- t.zhearmenian = 0x056a;
- t.zhebrevecyrillic = 0x04c2;
- t.zhecyrillic = 0x0436;
- t.zhedescendercyrillic = 0x0497;
- t.zhedieresiscyrillic = 0x04dd;
- t.zihiragana = 0x3058;
- t.zikatakana = 0x30b8;
- t.zinorhebrew = 0x05ae;
- t.zlinebelow = 0x1e95;
- t.zmonospace = 0xff5a;
- t.zohiragana = 0x305e;
- t.zokatakana = 0x30be;
- t.zparen = 0x24b5;
- t.zretroflexhook = 0x0290;
- t.zstroke = 0x01b6;
- t.zuhiragana = 0x305a;
- t.zukatakana = 0x30ba;
- t[".notdef"] = 0x0000;
- t.angbracketleftbig = 0x2329;
- t.angbracketleftBig = 0x2329;
- t.angbracketleftbigg = 0x2329;
- t.angbracketleftBigg = 0x2329;
- t.angbracketrightBig = 0x232a;
- t.angbracketrightbig = 0x232a;
- t.angbracketrightBigg = 0x232a;
- t.angbracketrightbigg = 0x232a;
- t.arrowhookleft = 0x21aa;
- t.arrowhookright = 0x21a9;
- t.arrowlefttophalf = 0x21bc;
- t.arrowleftbothalf = 0x21bd;
- t.arrownortheast = 0x2197;
- t.arrownorthwest = 0x2196;
- t.arrowrighttophalf = 0x21c0;
- t.arrowrightbothalf = 0x21c1;
- t.arrowsoutheast = 0x2198;
- t.arrowsouthwest = 0x2199;
- t.backslashbig = 0x2216;
- t.backslashBig = 0x2216;
- t.backslashBigg = 0x2216;
- t.backslashbigg = 0x2216;
- t.bardbl = 0x2016;
- t.bracehtipdownleft = 0xfe37;
- t.bracehtipdownright = 0xfe37;
- t.bracehtipupleft = 0xfe38;
- t.bracehtipupright = 0xfe38;
- t.braceleftBig = 0x007b;
- t.braceleftbig = 0x007b;
- t.braceleftbigg = 0x007b;
- t.braceleftBigg = 0x007b;
- t.bracerightBig = 0x007d;
- t.bracerightbig = 0x007d;
- t.bracerightbigg = 0x007d;
- t.bracerightBigg = 0x007d;
- t.bracketleftbig = 0x005b;
- t.bracketleftBig = 0x005b;
- t.bracketleftbigg = 0x005b;
- t.bracketleftBigg = 0x005b;
- t.bracketrightBig = 0x005d;
- t.bracketrightbig = 0x005d;
- t.bracketrightbigg = 0x005d;
- t.bracketrightBigg = 0x005d;
- t.ceilingleftbig = 0x2308;
- t.ceilingleftBig = 0x2308;
- t.ceilingleftBigg = 0x2308;
- t.ceilingleftbigg = 0x2308;
- t.ceilingrightbig = 0x2309;
- t.ceilingrightBig = 0x2309;
- t.ceilingrightbigg = 0x2309;
- t.ceilingrightBigg = 0x2309;
- t.circledotdisplay = 0x2299;
- t.circledottext = 0x2299;
- t.circlemultiplydisplay = 0x2297;
- t.circlemultiplytext = 0x2297;
- t.circleplusdisplay = 0x2295;
- t.circleplustext = 0x2295;
- t.contintegraldisplay = 0x222e;
- t.contintegraltext = 0x222e;
- t.coproductdisplay = 0x2210;
- t.coproducttext = 0x2210;
- t.floorleftBig = 0x230a;
- t.floorleftbig = 0x230a;
- t.floorleftbigg = 0x230a;
- t.floorleftBigg = 0x230a;
- t.floorrightbig = 0x230b;
- t.floorrightBig = 0x230b;
- t.floorrightBigg = 0x230b;
- t.floorrightbigg = 0x230b;
- t.hatwide = 0x0302;
- t.hatwider = 0x0302;
- t.hatwidest = 0x0302;
- t.intercal = 0x1d40;
- t.integraldisplay = 0x222b;
- t.integraltext = 0x222b;
- t.intersectiondisplay = 0x22c2;
- t.intersectiontext = 0x22c2;
- t.logicalanddisplay = 0x2227;
- t.logicalandtext = 0x2227;
- t.logicalordisplay = 0x2228;
- t.logicalortext = 0x2228;
- t.parenleftBig = 0x0028;
- t.parenleftbig = 0x0028;
- t.parenleftBigg = 0x0028;
- t.parenleftbigg = 0x0028;
- t.parenrightBig = 0x0029;
- t.parenrightbig = 0x0029;
- t.parenrightBigg = 0x0029;
- t.parenrightbigg = 0x0029;
- t.prime = 0x2032;
- t.productdisplay = 0x220f;
- t.producttext = 0x220f;
- t.radicalbig = 0x221a;
- t.radicalBig = 0x221a;
- t.radicalBigg = 0x221a;
- t.radicalbigg = 0x221a;
- t.radicalbt = 0x221a;
- t.radicaltp = 0x221a;
- t.radicalvertex = 0x221a;
- t.slashbig = 0x002f;
- t.slashBig = 0x002f;
- t.slashBigg = 0x002f;
- t.slashbigg = 0x002f;
- t.summationdisplay = 0x2211;
- t.summationtext = 0x2211;
- t.tildewide = 0x02dc;
- t.tildewider = 0x02dc;
- t.tildewidest = 0x02dc;
- t.uniondisplay = 0x22c3;
- t.unionmultidisplay = 0x228e;
- t.unionmultitext = 0x228e;
- t.unionsqdisplay = 0x2294;
- t.unionsqtext = 0x2294;
- t.uniontext = 0x22c3;
- t.vextenddouble = 0x2225;
- t.vextendsingle = 0x2223;
+/* 38 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.getFontType = getFontType;
+exports.normalizeFontName = normalizeFontName;
+exports.recoverGlyphName = recoverGlyphName;
+exports.type1FontGlyphMapping = type1FontGlyphMapping;
+exports.SEAC_ANALYSIS_ENABLED = exports.MacStandardGlyphOrdering = exports.FontFlags = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _encodings = __w_pdfjs_require__(37);
+
+var _glyphlist = __w_pdfjs_require__(39);
+
+var _unicode = __w_pdfjs_require__(40);
+
+const SEAC_ANALYSIS_ENABLED = true;
+exports.SEAC_ANALYSIS_ENABLED = SEAC_ANALYSIS_ENABLED;
+const FontFlags = {
+ FixedPitch: 1,
+ Serif: 2,
+ Symbolic: 4,
+ Script: 8,
+ Nonsymbolic: 32,
+ Italic: 64,
+ AllCap: 65536,
+ SmallCap: 131072,
+ ForceBold: 262144
+};
+exports.FontFlags = FontFlags;
+const MacStandardGlyphOrdering = [".notdef", ".null", "nonmarkingreturn", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quotesingle", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "grave", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "Adieresis", "Aring", "Ccedilla", "Eacute", "Ntilde", "Odieresis", "Udieresis", "aacute", "agrave", "acircumflex", "adieresis", "atilde", "aring", "ccedilla", "eacute", "egrave", "ecircumflex", "edieresis", "iacute", "igrave", "icircumflex", "idieresis", "ntilde", "oacute", "ograve", "ocircumflex", "odieresis", "otilde", "uacute", "ugrave", "ucircumflex", "udieresis", "dagger", "degree", "cent", "sterling", "section", "bullet", "paragraph", "germandbls", "registered", "copyright", "trademark", "acute", "dieresis", "notequal", "AE", "Oslash", "infinity", "plusminus", "lessequal", "greaterequal", "yen", "mu", "partialdiff", "summation", "product", "pi", "integral", "ordfeminine", "ordmasculine", "Omega", "ae", "oslash", "questiondown", "exclamdown", "logicalnot", "radical", "florin", "approxequal", "Delta", "guillemotleft", "guillemotright", "ellipsis", "nonbreakingspace", "Agrave", "Atilde", "Otilde", "OE", "oe", "endash", "emdash", "quotedblleft", "quotedblright", "quoteleft", "quoteright", "divide", "lozenge", "ydieresis", "Ydieresis", "fraction", "currency", "guilsinglleft", "guilsinglright", "fi", "fl", "daggerdbl", "periodcentered", "quotesinglbase", "quotedblbase", "perthousand", "Acircumflex", "Ecircumflex", "Aacute", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Oacute", "Ocircumflex", "apple", "Ograve", "Uacute", "Ucircumflex", "Ugrave", "dotlessi", "circumflex", "tilde", "macron", "breve", "dotaccent", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "Lslash", "lslash", "Scaron", "scaron", "Zcaron", "zcaron", "brokenbar", "Eth", "eth", "Yacute", "yacute", "Thorn", "thorn", "minus", "multiply", "onesuperior", "twosuperior", "threesuperior", "onehalf", "onequarter", "threequarters", "franc", "Gbreve", "gbreve", "Idotaccent", "Scedilla", "scedilla", "Cacute", "cacute", "Ccaron", "ccaron", "dcroat"];
+exports.MacStandardGlyphOrdering = MacStandardGlyphOrdering;
+
+function getFontType(type, subtype, isStandardFont = false) {
+ switch (type) {
+ case "Type1":
+ if (isStandardFont) {
+ return _util.FontType.TYPE1STANDARD;
+ }
+
+ return subtype === "Type1C" ? _util.FontType.TYPE1C : _util.FontType.TYPE1;
+
+ case "CIDFontType0":
+ return subtype === "CIDFontType0C" ? _util.FontType.CIDFONTTYPE0C : _util.FontType.CIDFONTTYPE0;
+
+ case "OpenType":
+ return _util.FontType.OPENTYPE;
+
+ case "TrueType":
+ return _util.FontType.TRUETYPE;
+
+ case "CIDFontType2":
+ return _util.FontType.CIDFONTTYPE2;
+
+ case "MMType1":
+ return _util.FontType.MMTYPE1;
+
+ case "Type0":
+ return _util.FontType.TYPE0;
+
+ default:
+ return _util.FontType.UNKNOWN;
+ }
+}
+
+function recoverGlyphName(name, glyphsUnicodeMap) {
+ if (glyphsUnicodeMap[name] !== undefined) {
+ return name;
+ }
+
+ const unicode = (0, _unicode.getUnicodeForGlyph)(name, glyphsUnicodeMap);
+
+ if (unicode !== -1) {
+ for (const key in glyphsUnicodeMap) {
+ if (glyphsUnicodeMap[key] === unicode) {
+ return key;
+ }
+ }
+ }
+
+ (0, _util.info)("Unable to recover a standard glyph name for: " + name);
+ return name;
+}
+
+function type1FontGlyphMapping(properties, builtInEncoding, glyphNames) {
+ const charCodeToGlyphId = Object.create(null);
+ let glyphId, charCode, baseEncoding;
+ const isSymbolicFont = !!(properties.flags & FontFlags.Symbolic);
+
+ if (properties.isInternalFont) {
+ baseEncoding = builtInEncoding;
+
+ for (charCode = 0; charCode < baseEncoding.length; charCode++) {
+ glyphId = glyphNames.indexOf(baseEncoding[charCode]);
+
+ if (glyphId >= 0) {
+ charCodeToGlyphId[charCode] = glyphId;
+ } else {
+ charCodeToGlyphId[charCode] = 0;
+ }
+ }
+ } else if (properties.baseEncodingName) {
+ baseEncoding = (0, _encodings.getEncoding)(properties.baseEncodingName);
+
+ for (charCode = 0; charCode < baseEncoding.length; charCode++) {
+ glyphId = glyphNames.indexOf(baseEncoding[charCode]);
+
+ if (glyphId >= 0) {
+ charCodeToGlyphId[charCode] = glyphId;
+ } else {
+ charCodeToGlyphId[charCode] = 0;
+ }
+ }
+ } else if (isSymbolicFont) {
+ for (charCode in builtInEncoding) {
+ charCodeToGlyphId[charCode] = builtInEncoding[charCode];
+ }
+ } else {
+ baseEncoding = _encodings.StandardEncoding;
+
+ for (charCode = 0; charCode < baseEncoding.length; charCode++) {
+ glyphId = glyphNames.indexOf(baseEncoding[charCode]);
+
+ if (glyphId >= 0) {
+ charCodeToGlyphId[charCode] = glyphId;
+ } else {
+ charCodeToGlyphId[charCode] = 0;
+ }
+ }
+ }
+
+ const differences = properties.differences;
+ let glyphsUnicodeMap;
+
+ if (differences) {
+ for (charCode in differences) {
+ const glyphName = differences[charCode];
+ glyphId = glyphNames.indexOf(glyphName);
+
+ if (glyphId === -1) {
+ if (!glyphsUnicodeMap) {
+ glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)();
+ }
+
+ const standardGlyphName = recoverGlyphName(glyphName, glyphsUnicodeMap);
+
+ if (standardGlyphName !== glyphName) {
+ glyphId = glyphNames.indexOf(standardGlyphName);
+ }
+ }
+
+ if (glyphId >= 0) {
+ charCodeToGlyphId[charCode] = glyphId;
+ } else {
+ charCodeToGlyphId[charCode] = 0;
+ }
+ }
+ }
+
+ return charCodeToGlyphId;
+}
+
+function normalizeFontName(name) {
+ return name.replace(/[,_]/g, "-").replace(/\s/g, "");
+}
+
+/***/ }),
+/* 39 */
+/***/ ((__unused_webpack_module, __webpack_exports__, __w_pdfjs_require__) => {
+
+__w_pdfjs_require__.r(__webpack_exports__);
+/* harmony export */ __w_pdfjs_require__.d(__webpack_exports__, {
+/* harmony export */ "getDingbatsGlyphsUnicode": () => (/* binding */ getDingbatsGlyphsUnicode),
+/* harmony export */ "getGlyphsUnicode": () => (/* binding */ getGlyphsUnicode)
+/* harmony export */ });
+/* harmony import */ var _core_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __w_pdfjs_require__(9);
+
+const getGlyphsUnicode = (0,_core_utils_js__WEBPACK_IMPORTED_MODULE_0__.getArrayLookupTableFactory)(function () {
+ return [
+ "A",
+ 0x0041,
+ "AE",
+ 0x00c6,
+ "AEacute",
+ 0x01fc,
+ "AEmacron",
+ 0x01e2,
+ "AEsmall",
+ 0xf7e6,
+ "Aacute",
+ 0x00c1,
+ "Aacutesmall",
+ 0xf7e1,
+ "Abreve",
+ 0x0102,
+ "Abreveacute",
+ 0x1eae,
+ "Abrevecyrillic",
+ 0x04d0,
+ "Abrevedotbelow",
+ 0x1eb6,
+ "Abrevegrave",
+ 0x1eb0,
+ "Abrevehookabove",
+ 0x1eb2,
+ "Abrevetilde",
+ 0x1eb4,
+ "Acaron",
+ 0x01cd,
+ "Acircle",
+ 0x24b6,
+ "Acircumflex",
+ 0x00c2,
+ "Acircumflexacute",
+ 0x1ea4,
+ "Acircumflexdotbelow",
+ 0x1eac,
+ "Acircumflexgrave",
+ 0x1ea6,
+ "Acircumflexhookabove",
+ 0x1ea8,
+ "Acircumflexsmall",
+ 0xf7e2,
+ "Acircumflextilde",
+ 0x1eaa,
+ "Acute",
+ 0xf6c9,
+ "Acutesmall",
+ 0xf7b4,
+ "Acyrillic",
+ 0x0410,
+ "Adblgrave",
+ 0x0200,
+ "Adieresis",
+ 0x00c4,
+ "Adieresiscyrillic",
+ 0x04d2,
+ "Adieresismacron",
+ 0x01de,
+ "Adieresissmall",
+ 0xf7e4,
+ "Adotbelow",
+ 0x1ea0,
+ "Adotmacron",
+ 0x01e0,
+ "Agrave",
+ 0x00c0,
+ "Agravesmall",
+ 0xf7e0,
+ "Ahookabove",
+ 0x1ea2,
+ "Aiecyrillic",
+ 0x04d4,
+ "Ainvertedbreve",
+ 0x0202,
+ "Alpha",
+ 0x0391,
+ "Alphatonos",
+ 0x0386,
+ "Amacron",
+ 0x0100,
+ "Amonospace",
+ 0xff21,
+ "Aogonek",
+ 0x0104,
+ "Aring",
+ 0x00c5,
+ "Aringacute",
+ 0x01fa,
+ "Aringbelow",
+ 0x1e00,
+ "Aringsmall",
+ 0xf7e5,
+ "Asmall",
+ 0xf761,
+ "Atilde",
+ 0x00c3,
+ "Atildesmall",
+ 0xf7e3,
+ "Aybarmenian",
+ 0x0531,
+ "B",
+ 0x0042,
+ "Bcircle",
+ 0x24b7,
+ "Bdotaccent",
+ 0x1e02,
+ "Bdotbelow",
+ 0x1e04,
+ "Becyrillic",
+ 0x0411,
+ "Benarmenian",
+ 0x0532,
+ "Beta",
+ 0x0392,
+ "Bhook",
+ 0x0181,
+ "Blinebelow",
+ 0x1e06,
+ "Bmonospace",
+ 0xff22,
+ "Brevesmall",
+ 0xf6f4,
+ "Bsmall",
+ 0xf762,
+ "Btopbar",
+ 0x0182,
+ "C",
+ 0x0043,
+ "Caarmenian",
+ 0x053e,
+ "Cacute",
+ 0x0106,
+ "Caron",
+ 0xf6ca,
+ "Caronsmall",
+ 0xf6f5,
+ "Ccaron",
+ 0x010c,
+ "Ccedilla",
+ 0x00c7,
+ "Ccedillaacute",
+ 0x1e08,
+ "Ccedillasmall",
+ 0xf7e7,
+ "Ccircle",
+ 0x24b8,
+ "Ccircumflex",
+ 0x0108,
+ "Cdot",
+ 0x010a,
+ "Cdotaccent",
+ 0x010a,
+ "Cedillasmall",
+ 0xf7b8,
+ "Chaarmenian",
+ 0x0549,
+ "Cheabkhasiancyrillic",
+ 0x04bc,
+ "Checyrillic",
+ 0x0427,
+ "Chedescenderabkhasiancyrillic",
+ 0x04be,
+ "Chedescendercyrillic",
+ 0x04b6,
+ "Chedieresiscyrillic",
+ 0x04f4,
+ "Cheharmenian",
+ 0x0543,
+ "Chekhakassiancyrillic",
+ 0x04cb,
+ "Cheverticalstrokecyrillic",
+ 0x04b8,
+ "Chi",
+ 0x03a7,
+ "Chook",
+ 0x0187,
+ "Circumflexsmall",
+ 0xf6f6,
+ "Cmonospace",
+ 0xff23,
+ "Coarmenian",
+ 0x0551,
+ "Csmall",
+ 0xf763,
+ "D",
+ 0x0044,
+ "DZ",
+ 0x01f1,
+ "DZcaron",
+ 0x01c4,
+ "Daarmenian",
+ 0x0534,
+ "Dafrican",
+ 0x0189,
+ "Dcaron",
+ 0x010e,
+ "Dcedilla",
+ 0x1e10,
+ "Dcircle",
+ 0x24b9,
+ "Dcircumflexbelow",
+ 0x1e12,
+ "Dcroat",
+ 0x0110,
+ "Ddotaccent",
+ 0x1e0a,
+ "Ddotbelow",
+ 0x1e0c,
+ "Decyrillic",
+ 0x0414,
+ "Deicoptic",
+ 0x03ee,
+ "Delta",
+ 0x2206,
+ "Deltagreek",
+ 0x0394,
+ "Dhook",
+ 0x018a,
+ "Dieresis",
+ 0xf6cb,
+ "DieresisAcute",
+ 0xf6cc,
+ "DieresisGrave",
+ 0xf6cd,
+ "Dieresissmall",
+ 0xf7a8,
+ "Digammagreek",
+ 0x03dc,
+ "Djecyrillic",
+ 0x0402,
+ "Dlinebelow",
+ 0x1e0e,
+ "Dmonospace",
+ 0xff24,
+ "Dotaccentsmall",
+ 0xf6f7,
+ "Dslash",
+ 0x0110,
+ "Dsmall",
+ 0xf764,
+ "Dtopbar",
+ 0x018b,
+ "Dz",
+ 0x01f2,
+ "Dzcaron",
+ 0x01c5,
+ "Dzeabkhasiancyrillic",
+ 0x04e0,
+ "Dzecyrillic",
+ 0x0405,
+ "Dzhecyrillic",
+ 0x040f,
+ "E",
+ 0x0045,
+ "Eacute",
+ 0x00c9,
+ "Eacutesmall",
+ 0xf7e9,
+ "Ebreve",
+ 0x0114,
+ "Ecaron",
+ 0x011a,
+ "Ecedillabreve",
+ 0x1e1c,
+ "Echarmenian",
+ 0x0535,
+ "Ecircle",
+ 0x24ba,
+ "Ecircumflex",
+ 0x00ca,
+ "Ecircumflexacute",
+ 0x1ebe,
+ "Ecircumflexbelow",
+ 0x1e18,
+ "Ecircumflexdotbelow",
+ 0x1ec6,
+ "Ecircumflexgrave",
+ 0x1ec0,
+ "Ecircumflexhookabove",
+ 0x1ec2,
+ "Ecircumflexsmall",
+ 0xf7ea,
+ "Ecircumflextilde",
+ 0x1ec4,
+ "Ecyrillic",
+ 0x0404,
+ "Edblgrave",
+ 0x0204,
+ "Edieresis",
+ 0x00cb,
+ "Edieresissmall",
+ 0xf7eb,
+ "Edot",
+ 0x0116,
+ "Edotaccent",
+ 0x0116,
+ "Edotbelow",
+ 0x1eb8,
+ "Efcyrillic",
+ 0x0424,
+ "Egrave",
+ 0x00c8,
+ "Egravesmall",
+ 0xf7e8,
+ "Eharmenian",
+ 0x0537,
+ "Ehookabove",
+ 0x1eba,
+ "Eightroman",
+ 0x2167,
+ "Einvertedbreve",
+ 0x0206,
+ "Eiotifiedcyrillic",
+ 0x0464,
+ "Elcyrillic",
+ 0x041b,
+ "Elevenroman",
+ 0x216a,
+ "Emacron",
+ 0x0112,
+ "Emacronacute",
+ 0x1e16,
+ "Emacrongrave",
+ 0x1e14,
+ "Emcyrillic",
+ 0x041c,
+ "Emonospace",
+ 0xff25,
+ "Encyrillic",
+ 0x041d,
+ "Endescendercyrillic",
+ 0x04a2,
+ "Eng",
+ 0x014a,
+ "Enghecyrillic",
+ 0x04a4,
+ "Enhookcyrillic",
+ 0x04c7,
+ "Eogonek",
+ 0x0118,
+ "Eopen",
+ 0x0190,
+ "Epsilon",
+ 0x0395,
+ "Epsilontonos",
+ 0x0388,
+ "Ercyrillic",
+ 0x0420,
+ "Ereversed",
+ 0x018e,
+ "Ereversedcyrillic",
+ 0x042d,
+ "Escyrillic",
+ 0x0421,
+ "Esdescendercyrillic",
+ 0x04aa,
+ "Esh",
+ 0x01a9,
+ "Esmall",
+ 0xf765,
+ "Eta",
+ 0x0397,
+ "Etarmenian",
+ 0x0538,
+ "Etatonos",
+ 0x0389,
+ "Eth",
+ 0x00d0,
+ "Ethsmall",
+ 0xf7f0,
+ "Etilde",
+ 0x1ebc,
+ "Etildebelow",
+ 0x1e1a,
+ "Euro",
+ 0x20ac,
+ "Ezh",
+ 0x01b7,
+ "Ezhcaron",
+ 0x01ee,
+ "Ezhreversed",
+ 0x01b8,
+ "F",
+ 0x0046,
+ "Fcircle",
+ 0x24bb,
+ "Fdotaccent",
+ 0x1e1e,
+ "Feharmenian",
+ 0x0556,
+ "Feicoptic",
+ 0x03e4,
+ "Fhook",
+ 0x0191,
+ "Fitacyrillic",
+ 0x0472,
+ "Fiveroman",
+ 0x2164,
+ "Fmonospace",
+ 0xff26,
+ "Fourroman",
+ 0x2163,
+ "Fsmall",
+ 0xf766,
+ "G",
+ 0x0047,
+ "GBsquare",
+ 0x3387,
+ "Gacute",
+ 0x01f4,
+ "Gamma",
+ 0x0393,
+ "Gammaafrican",
+ 0x0194,
+ "Gangiacoptic",
+ 0x03ea,
+ "Gbreve",
+ 0x011e,
+ "Gcaron",
+ 0x01e6,
+ "Gcedilla",
+ 0x0122,
+ "Gcircle",
+ 0x24bc,
+ "Gcircumflex",
+ 0x011c,
+ "Gcommaaccent",
+ 0x0122,
+ "Gdot",
+ 0x0120,
+ "Gdotaccent",
+ 0x0120,
+ "Gecyrillic",
+ 0x0413,
+ "Ghadarmenian",
+ 0x0542,
+ "Ghemiddlehookcyrillic",
+ 0x0494,
+ "Ghestrokecyrillic",
+ 0x0492,
+ "Gheupturncyrillic",
+ 0x0490,
+ "Ghook",
+ 0x0193,
+ "Gimarmenian",
+ 0x0533,
+ "Gjecyrillic",
+ 0x0403,
+ "Gmacron",
+ 0x1e20,
+ "Gmonospace",
+ 0xff27,
+ "Grave",
+ 0xf6ce,
+ "Gravesmall",
+ 0xf760,
+ "Gsmall",
+ 0xf767,
+ "Gsmallhook",
+ 0x029b,
+ "Gstroke",
+ 0x01e4,
+ "H",
+ 0x0048,
+ "H18533",
+ 0x25cf,
+ "H18543",
+ 0x25aa,
+ "H18551",
+ 0x25ab,
+ "H22073",
+ 0x25a1,
+ "HPsquare",
+ 0x33cb,
+ "Haabkhasiancyrillic",
+ 0x04a8,
+ "Hadescendercyrillic",
+ 0x04b2,
+ "Hardsigncyrillic",
+ 0x042a,
+ "Hbar",
+ 0x0126,
+ "Hbrevebelow",
+ 0x1e2a,
+ "Hcedilla",
+ 0x1e28,
+ "Hcircle",
+ 0x24bd,
+ "Hcircumflex",
+ 0x0124,
+ "Hdieresis",
+ 0x1e26,
+ "Hdotaccent",
+ 0x1e22,
+ "Hdotbelow",
+ 0x1e24,
+ "Hmonospace",
+ 0xff28,
+ "Hoarmenian",
+ 0x0540,
+ "Horicoptic",
+ 0x03e8,
+ "Hsmall",
+ 0xf768,
+ "Hungarumlaut",
+ 0xf6cf,
+ "Hungarumlautsmall",
+ 0xf6f8,
+ "Hzsquare",
+ 0x3390,
+ "I",
+ 0x0049,
+ "IAcyrillic",
+ 0x042f,
+ "IJ",
+ 0x0132,
+ "IUcyrillic",
+ 0x042e,
+ "Iacute",
+ 0x00cd,
+ "Iacutesmall",
+ 0xf7ed,
+ "Ibreve",
+ 0x012c,
+ "Icaron",
+ 0x01cf,
+ "Icircle",
+ 0x24be,
+ "Icircumflex",
+ 0x00ce,
+ "Icircumflexsmall",
+ 0xf7ee,
+ "Icyrillic",
+ 0x0406,
+ "Idblgrave",
+ 0x0208,
+ "Idieresis",
+ 0x00cf,
+ "Idieresisacute",
+ 0x1e2e,
+ "Idieresiscyrillic",
+ 0x04e4,
+ "Idieresissmall",
+ 0xf7ef,
+ "Idot",
+ 0x0130,
+ "Idotaccent",
+ 0x0130,
+ "Idotbelow",
+ 0x1eca,
+ "Iebrevecyrillic",
+ 0x04d6,
+ "Iecyrillic",
+ 0x0415,
+ "Ifraktur",
+ 0x2111,
+ "Igrave",
+ 0x00cc,
+ "Igravesmall",
+ 0xf7ec,
+ "Ihookabove",
+ 0x1ec8,
+ "Iicyrillic",
+ 0x0418,
+ "Iinvertedbreve",
+ 0x020a,
+ "Iishortcyrillic",
+ 0x0419,
+ "Imacron",
+ 0x012a,
+ "Imacroncyrillic",
+ 0x04e2,
+ "Imonospace",
+ 0xff29,
+ "Iniarmenian",
+ 0x053b,
+ "Iocyrillic",
+ 0x0401,
+ "Iogonek",
+ 0x012e,
+ "Iota",
+ 0x0399,
+ "Iotaafrican",
+ 0x0196,
+ "Iotadieresis",
+ 0x03aa,
+ "Iotatonos",
+ 0x038a,
+ "Ismall",
+ 0xf769,
+ "Istroke",
+ 0x0197,
+ "Itilde",
+ 0x0128,
+ "Itildebelow",
+ 0x1e2c,
+ "Izhitsacyrillic",
+ 0x0474,
+ "Izhitsadblgravecyrillic",
+ 0x0476,
+ "J",
+ 0x004a,
+ "Jaarmenian",
+ 0x0541,
+ "Jcircle",
+ 0x24bf,
+ "Jcircumflex",
+ 0x0134,
+ "Jecyrillic",
+ 0x0408,
+ "Jheharmenian",
+ 0x054b,
+ "Jmonospace",
+ 0xff2a,
+ "Jsmall",
+ 0xf76a,
+ "K",
+ 0x004b,
+ "KBsquare",
+ 0x3385,
+ "KKsquare",
+ 0x33cd,
+ "Kabashkircyrillic",
+ 0x04a0,
+ "Kacute",
+ 0x1e30,
+ "Kacyrillic",
+ 0x041a,
+ "Kadescendercyrillic",
+ 0x049a,
+ "Kahookcyrillic",
+ 0x04c3,
+ "Kappa",
+ 0x039a,
+ "Kastrokecyrillic",
+ 0x049e,
+ "Kaverticalstrokecyrillic",
+ 0x049c,
+ "Kcaron",
+ 0x01e8,
+ "Kcedilla",
+ 0x0136,
+ "Kcircle",
+ 0x24c0,
+ "Kcommaaccent",
+ 0x0136,
+ "Kdotbelow",
+ 0x1e32,
+ "Keharmenian",
+ 0x0554,
+ "Kenarmenian",
+ 0x053f,
+ "Khacyrillic",
+ 0x0425,
+ "Kheicoptic",
+ 0x03e6,
+ "Khook",
+ 0x0198,
+ "Kjecyrillic",
+ 0x040c,
+ "Klinebelow",
+ 0x1e34,
+ "Kmonospace",
+ 0xff2b,
+ "Koppacyrillic",
+ 0x0480,
+ "Koppagreek",
+ 0x03de,
+ "Ksicyrillic",
+ 0x046e,
+ "Ksmall",
+ 0xf76b,
+ "L",
+ 0x004c,
+ "LJ",
+ 0x01c7,
+ "LL",
+ 0xf6bf,
+ "Lacute",
+ 0x0139,
+ "Lambda",
+ 0x039b,
+ "Lcaron",
+ 0x013d,
+ "Lcedilla",
+ 0x013b,
+ "Lcircle",
+ 0x24c1,
+ "Lcircumflexbelow",
+ 0x1e3c,
+ "Lcommaaccent",
+ 0x013b,
+ "Ldot",
+ 0x013f,
+ "Ldotaccent",
+ 0x013f,
+ "Ldotbelow",
+ 0x1e36,
+ "Ldotbelowmacron",
+ 0x1e38,
+ "Liwnarmenian",
+ 0x053c,
+ "Lj",
+ 0x01c8,
+ "Ljecyrillic",
+ 0x0409,
+ "Llinebelow",
+ 0x1e3a,
+ "Lmonospace",
+ 0xff2c,
+ "Lslash",
+ 0x0141,
+ "Lslashsmall",
+ 0xf6f9,
+ "Lsmall",
+ 0xf76c,
+ "M",
+ 0x004d,
+ "MBsquare",
+ 0x3386,
+ "Macron",
+ 0xf6d0,
+ "Macronsmall",
+ 0xf7af,
+ "Macute",
+ 0x1e3e,
+ "Mcircle",
+ 0x24c2,
+ "Mdotaccent",
+ 0x1e40,
+ "Mdotbelow",
+ 0x1e42,
+ "Menarmenian",
+ 0x0544,
+ "Mmonospace",
+ 0xff2d,
+ "Msmall",
+ 0xf76d,
+ "Mturned",
+ 0x019c,
+ "Mu",
+ 0x039c,
+ "N",
+ 0x004e,
+ "NJ",
+ 0x01ca,
+ "Nacute",
+ 0x0143,
+ "Ncaron",
+ 0x0147,
+ "Ncedilla",
+ 0x0145,
+ "Ncircle",
+ 0x24c3,
+ "Ncircumflexbelow",
+ 0x1e4a,
+ "Ncommaaccent",
+ 0x0145,
+ "Ndotaccent",
+ 0x1e44,
+ "Ndotbelow",
+ 0x1e46,
+ "Nhookleft",
+ 0x019d,
+ "Nineroman",
+ 0x2168,
+ "Nj",
+ 0x01cb,
+ "Njecyrillic",
+ 0x040a,
+ "Nlinebelow",
+ 0x1e48,
+ "Nmonospace",
+ 0xff2e,
+ "Nowarmenian",
+ 0x0546,
+ "Nsmall",
+ 0xf76e,
+ "Ntilde",
+ 0x00d1,
+ "Ntildesmall",
+ 0xf7f1,
+ "Nu",
+ 0x039d,
+ "O",
+ 0x004f,
+ "OE",
+ 0x0152,
+ "OEsmall",
+ 0xf6fa,
+ "Oacute",
+ 0x00d3,
+ "Oacutesmall",
+ 0xf7f3,
+ "Obarredcyrillic",
+ 0x04e8,
+ "Obarreddieresiscyrillic",
+ 0x04ea,
+ "Obreve",
+ 0x014e,
+ "Ocaron",
+ 0x01d1,
+ "Ocenteredtilde",
+ 0x019f,
+ "Ocircle",
+ 0x24c4,
+ "Ocircumflex",
+ 0x00d4,
+ "Ocircumflexacute",
+ 0x1ed0,
+ "Ocircumflexdotbelow",
+ 0x1ed8,
+ "Ocircumflexgrave",
+ 0x1ed2,
+ "Ocircumflexhookabove",
+ 0x1ed4,
+ "Ocircumflexsmall",
+ 0xf7f4,
+ "Ocircumflextilde",
+ 0x1ed6,
+ "Ocyrillic",
+ 0x041e,
+ "Odblacute",
+ 0x0150,
+ "Odblgrave",
+ 0x020c,
+ "Odieresis",
+ 0x00d6,
+ "Odieresiscyrillic",
+ 0x04e6,
+ "Odieresissmall",
+ 0xf7f6,
+ "Odotbelow",
+ 0x1ecc,
+ "Ogoneksmall",
+ 0xf6fb,
+ "Ograve",
+ 0x00d2,
+ "Ogravesmall",
+ 0xf7f2,
+ "Oharmenian",
+ 0x0555,
+ "Ohm",
+ 0x2126,
+ "Ohookabove",
+ 0x1ece,
+ "Ohorn",
+ 0x01a0,
+ "Ohornacute",
+ 0x1eda,
+ "Ohorndotbelow",
+ 0x1ee2,
+ "Ohorngrave",
+ 0x1edc,
+ "Ohornhookabove",
+ 0x1ede,
+ "Ohorntilde",
+ 0x1ee0,
+ "Ohungarumlaut",
+ 0x0150,
+ "Oi",
+ 0x01a2,
+ "Oinvertedbreve",
+ 0x020e,
+ "Omacron",
+ 0x014c,
+ "Omacronacute",
+ 0x1e52,
+ "Omacrongrave",
+ 0x1e50,
+ "Omega",
+ 0x2126,
+ "Omegacyrillic",
+ 0x0460,
+ "Omegagreek",
+ 0x03a9,
+ "Omegaroundcyrillic",
+ 0x047a,
+ "Omegatitlocyrillic",
+ 0x047c,
+ "Omegatonos",
+ 0x038f,
+ "Omicron",
+ 0x039f,
+ "Omicrontonos",
+ 0x038c,
+ "Omonospace",
+ 0xff2f,
+ "Oneroman",
+ 0x2160,
+ "Oogonek",
+ 0x01ea,
+ "Oogonekmacron",
+ 0x01ec,
+ "Oopen",
+ 0x0186,
+ "Oslash",
+ 0x00d8,
+ "Oslashacute",
+ 0x01fe,
+ "Oslashsmall",
+ 0xf7f8,
+ "Osmall",
+ 0xf76f,
+ "Ostrokeacute",
+ 0x01fe,
+ "Otcyrillic",
+ 0x047e,
+ "Otilde",
+ 0x00d5,
+ "Otildeacute",
+ 0x1e4c,
+ "Otildedieresis",
+ 0x1e4e,
+ "Otildesmall",
+ 0xf7f5,
+ "P",
+ 0x0050,
+ "Pacute",
+ 0x1e54,
+ "Pcircle",
+ 0x24c5,
+ "Pdotaccent",
+ 0x1e56,
+ "Pecyrillic",
+ 0x041f,
+ "Peharmenian",
+ 0x054a,
+ "Pemiddlehookcyrillic",
+ 0x04a6,
+ "Phi",
+ 0x03a6,
+ "Phook",
+ 0x01a4,
+ "Pi",
+ 0x03a0,
+ "Piwrarmenian",
+ 0x0553,
+ "Pmonospace",
+ 0xff30,
+ "Psi",
+ 0x03a8,
+ "Psicyrillic",
+ 0x0470,
+ "Psmall",
+ 0xf770,
+ "Q",
+ 0x0051,
+ "Qcircle",
+ 0x24c6,
+ "Qmonospace",
+ 0xff31,
+ "Qsmall",
+ 0xf771,
+ "R",
+ 0x0052,
+ "Raarmenian",
+ 0x054c,
+ "Racute",
+ 0x0154,
+ "Rcaron",
+ 0x0158,
+ "Rcedilla",
+ 0x0156,
+ "Rcircle",
+ 0x24c7,
+ "Rcommaaccent",
+ 0x0156,
+ "Rdblgrave",
+ 0x0210,
+ "Rdotaccent",
+ 0x1e58,
+ "Rdotbelow",
+ 0x1e5a,
+ "Rdotbelowmacron",
+ 0x1e5c,
+ "Reharmenian",
+ 0x0550,
+ "Rfraktur",
+ 0x211c,
+ "Rho",
+ 0x03a1,
+ "Ringsmall",
+ 0xf6fc,
+ "Rinvertedbreve",
+ 0x0212,
+ "Rlinebelow",
+ 0x1e5e,
+ "Rmonospace",
+ 0xff32,
+ "Rsmall",
+ 0xf772,
+ "Rsmallinverted",
+ 0x0281,
+ "Rsmallinvertedsuperior",
+ 0x02b6,
+ "S",
+ 0x0053,
+ "SF010000",
+ 0x250c,
+ "SF020000",
+ 0x2514,
+ "SF030000",
+ 0x2510,
+ "SF040000",
+ 0x2518,
+ "SF050000",
+ 0x253c,
+ "SF060000",
+ 0x252c,
+ "SF070000",
+ 0x2534,
+ "SF080000",
+ 0x251c,
+ "SF090000",
+ 0x2524,
+ "SF100000",
+ 0x2500,
+ "SF110000",
+ 0x2502,
+ "SF190000",
+ 0x2561,
+ "SF200000",
+ 0x2562,
+ "SF210000",
+ 0x2556,
+ "SF220000",
+ 0x2555,
+ "SF230000",
+ 0x2563,
+ "SF240000",
+ 0x2551,
+ "SF250000",
+ 0x2557,
+ "SF260000",
+ 0x255d,
+ "SF270000",
+ 0x255c,
+ "SF280000",
+ 0x255b,
+ "SF360000",
+ 0x255e,
+ "SF370000",
+ 0x255f,
+ "SF380000",
+ 0x255a,
+ "SF390000",
+ 0x2554,
+ "SF400000",
+ 0x2569,
+ "SF410000",
+ 0x2566,
+ "SF420000",
+ 0x2560,
+ "SF430000",
+ 0x2550,
+ "SF440000",
+ 0x256c,
+ "SF450000",
+ 0x2567,
+ "SF460000",
+ 0x2568,
+ "SF470000",
+ 0x2564,
+ "SF480000",
+ 0x2565,
+ "SF490000",
+ 0x2559,
+ "SF500000",
+ 0x2558,
+ "SF510000",
+ 0x2552,
+ "SF520000",
+ 0x2553,
+ "SF530000",
+ 0x256b,
+ "SF540000",
+ 0x256a,
+ "Sacute",
+ 0x015a,
+ "Sacutedotaccent",
+ 0x1e64,
+ "Sampigreek",
+ 0x03e0,
+ "Scaron",
+ 0x0160,
+ "Scarondotaccent",
+ 0x1e66,
+ "Scaronsmall",
+ 0xf6fd,
+ "Scedilla",
+ 0x015e,
+ "Schwa",
+ 0x018f,
+ "Schwacyrillic",
+ 0x04d8,
+ "Schwadieresiscyrillic",
+ 0x04da,
+ "Scircle",
+ 0x24c8,
+ "Scircumflex",
+ 0x015c,
+ "Scommaaccent",
+ 0x0218,
+ "Sdotaccent",
+ 0x1e60,
+ "Sdotbelow",
+ 0x1e62,
+ "Sdotbelowdotaccent",
+ 0x1e68,
+ "Seharmenian",
+ 0x054d,
+ "Sevenroman",
+ 0x2166,
+ "Shaarmenian",
+ 0x0547,
+ "Shacyrillic",
+ 0x0428,
+ "Shchacyrillic",
+ 0x0429,
+ "Sheicoptic",
+ 0x03e2,
+ "Shhacyrillic",
+ 0x04ba,
+ "Shimacoptic",
+ 0x03ec,
+ "Sigma",
+ 0x03a3,
+ "Sixroman",
+ 0x2165,
+ "Smonospace",
+ 0xff33,
+ "Softsigncyrillic",
+ 0x042c,
+ "Ssmall",
+ 0xf773,
+ "Stigmagreek",
+ 0x03da,
+ "T",
+ 0x0054,
+ "Tau",
+ 0x03a4,
+ "Tbar",
+ 0x0166,
+ "Tcaron",
+ 0x0164,
+ "Tcedilla",
+ 0x0162,
+ "Tcircle",
+ 0x24c9,
+ "Tcircumflexbelow",
+ 0x1e70,
+ "Tcommaaccent",
+ 0x0162,
+ "Tdotaccent",
+ 0x1e6a,
+ "Tdotbelow",
+ 0x1e6c,
+ "Tecyrillic",
+ 0x0422,
+ "Tedescendercyrillic",
+ 0x04ac,
+ "Tenroman",
+ 0x2169,
+ "Tetsecyrillic",
+ 0x04b4,
+ "Theta",
+ 0x0398,
+ "Thook",
+ 0x01ac,
+ "Thorn",
+ 0x00de,
+ "Thornsmall",
+ 0xf7fe,
+ "Threeroman",
+ 0x2162,
+ "Tildesmall",
+ 0xf6fe,
+ "Tiwnarmenian",
+ 0x054f,
+ "Tlinebelow",
+ 0x1e6e,
+ "Tmonospace",
+ 0xff34,
+ "Toarmenian",
+ 0x0539,
+ "Tonefive",
+ 0x01bc,
+ "Tonesix",
+ 0x0184,
+ "Tonetwo",
+ 0x01a7,
+ "Tretroflexhook",
+ 0x01ae,
+ "Tsecyrillic",
+ 0x0426,
+ "Tshecyrillic",
+ 0x040b,
+ "Tsmall",
+ 0xf774,
+ "Twelveroman",
+ 0x216b,
+ "Tworoman",
+ 0x2161,
+ "U",
+ 0x0055,
+ "Uacute",
+ 0x00da,
+ "Uacutesmall",
+ 0xf7fa,
+ "Ubreve",
+ 0x016c,
+ "Ucaron",
+ 0x01d3,
+ "Ucircle",
+ 0x24ca,
+ "Ucircumflex",
+ 0x00db,
+ "Ucircumflexbelow",
+ 0x1e76,
+ "Ucircumflexsmall",
+ 0xf7fb,
+ "Ucyrillic",
+ 0x0423,
+ "Udblacute",
+ 0x0170,
+ "Udblgrave",
+ 0x0214,
+ "Udieresis",
+ 0x00dc,
+ "Udieresisacute",
+ 0x01d7,
+ "Udieresisbelow",
+ 0x1e72,
+ "Udieresiscaron",
+ 0x01d9,
+ "Udieresiscyrillic",
+ 0x04f0,
+ "Udieresisgrave",
+ 0x01db,
+ "Udieresismacron",
+ 0x01d5,
+ "Udieresissmall",
+ 0xf7fc,
+ "Udotbelow",
+ 0x1ee4,
+ "Ugrave",
+ 0x00d9,
+ "Ugravesmall",
+ 0xf7f9,
+ "Uhookabove",
+ 0x1ee6,
+ "Uhorn",
+ 0x01af,
+ "Uhornacute",
+ 0x1ee8,
+ "Uhorndotbelow",
+ 0x1ef0,
+ "Uhorngrave",
+ 0x1eea,
+ "Uhornhookabove",
+ 0x1eec,
+ "Uhorntilde",
+ 0x1eee,
+ "Uhungarumlaut",
+ 0x0170,
+ "Uhungarumlautcyrillic",
+ 0x04f2,
+ "Uinvertedbreve",
+ 0x0216,
+ "Ukcyrillic",
+ 0x0478,
+ "Umacron",
+ 0x016a,
+ "Umacroncyrillic",
+ 0x04ee,
+ "Umacrondieresis",
+ 0x1e7a,
+ "Umonospace",
+ 0xff35,
+ "Uogonek",
+ 0x0172,
+ "Upsilon",
+ 0x03a5,
+ "Upsilon1",
+ 0x03d2,
+ "Upsilonacutehooksymbolgreek",
+ 0x03d3,
+ "Upsilonafrican",
+ 0x01b1,
+ "Upsilondieresis",
+ 0x03ab,
+ "Upsilondieresishooksymbolgreek",
+ 0x03d4,
+ "Upsilonhooksymbol",
+ 0x03d2,
+ "Upsilontonos",
+ 0x038e,
+ "Uring",
+ 0x016e,
+ "Ushortcyrillic",
+ 0x040e,
+ "Usmall",
+ 0xf775,
+ "Ustraightcyrillic",
+ 0x04ae,
+ "Ustraightstrokecyrillic",
+ 0x04b0,
+ "Utilde",
+ 0x0168,
+ "Utildeacute",
+ 0x1e78,
+ "Utildebelow",
+ 0x1e74,
+ "V",
+ 0x0056,
+ "Vcircle",
+ 0x24cb,
+ "Vdotbelow",
+ 0x1e7e,
+ "Vecyrillic",
+ 0x0412,
+ "Vewarmenian",
+ 0x054e,
+ "Vhook",
+ 0x01b2,
+ "Vmonospace",
+ 0xff36,
+ "Voarmenian",
+ 0x0548,
+ "Vsmall",
+ 0xf776,
+ "Vtilde",
+ 0x1e7c,
+ "W",
+ 0x0057,
+ "Wacute",
+ 0x1e82,
+ "Wcircle",
+ 0x24cc,
+ "Wcircumflex",
+ 0x0174,
+ "Wdieresis",
+ 0x1e84,
+ "Wdotaccent",
+ 0x1e86,
+ "Wdotbelow",
+ 0x1e88,
+ "Wgrave",
+ 0x1e80,
+ "Wmonospace",
+ 0xff37,
+ "Wsmall",
+ 0xf777,
+ "X",
+ 0x0058,
+ "Xcircle",
+ 0x24cd,
+ "Xdieresis",
+ 0x1e8c,
+ "Xdotaccent",
+ 0x1e8a,
+ "Xeharmenian",
+ 0x053d,
+ "Xi",
+ 0x039e,
+ "Xmonospace",
+ 0xff38,
+ "Xsmall",
+ 0xf778,
+ "Y",
+ 0x0059,
+ "Yacute",
+ 0x00dd,
+ "Yacutesmall",
+ 0xf7fd,
+ "Yatcyrillic",
+ 0x0462,
+ "Ycircle",
+ 0x24ce,
+ "Ycircumflex",
+ 0x0176,
+ "Ydieresis",
+ 0x0178,
+ "Ydieresissmall",
+ 0xf7ff,
+ "Ydotaccent",
+ 0x1e8e,
+ "Ydotbelow",
+ 0x1ef4,
+ "Yericyrillic",
+ 0x042b,
+ "Yerudieresiscyrillic",
+ 0x04f8,
+ "Ygrave",
+ 0x1ef2,
+ "Yhook",
+ 0x01b3,
+ "Yhookabove",
+ 0x1ef6,
+ "Yiarmenian",
+ 0x0545,
+ "Yicyrillic",
+ 0x0407,
+ "Yiwnarmenian",
+ 0x0552,
+ "Ymonospace",
+ 0xff39,
+ "Ysmall",
+ 0xf779,
+ "Ytilde",
+ 0x1ef8,
+ "Yusbigcyrillic",
+ 0x046a,
+ "Yusbigiotifiedcyrillic",
+ 0x046c,
+ "Yuslittlecyrillic",
+ 0x0466,
+ "Yuslittleiotifiedcyrillic",
+ 0x0468,
+ "Z",
+ 0x005a,
+ "Zaarmenian",
+ 0x0536,
+ "Zacute",
+ 0x0179,
+ "Zcaron",
+ 0x017d,
+ "Zcaronsmall",
+ 0xf6ff,
+ "Zcircle",
+ 0x24cf,
+ "Zcircumflex",
+ 0x1e90,
+ "Zdot",
+ 0x017b,
+ "Zdotaccent",
+ 0x017b,
+ "Zdotbelow",
+ 0x1e92,
+ "Zecyrillic",
+ 0x0417,
+ "Zedescendercyrillic",
+ 0x0498,
+ "Zedieresiscyrillic",
+ 0x04de,
+ "Zeta",
+ 0x0396,
+ "Zhearmenian",
+ 0x053a,
+ "Zhebrevecyrillic",
+ 0x04c1,
+ "Zhecyrillic",
+ 0x0416,
+ "Zhedescendercyrillic",
+ 0x0496,
+ "Zhedieresiscyrillic",
+ 0x04dc,
+ "Zlinebelow",
+ 0x1e94,
+ "Zmonospace",
+ 0xff3a,
+ "Zsmall",
+ 0xf77a,
+ "Zstroke",
+ 0x01b5,
+ "a",
+ 0x0061,
+ "aabengali",
+ 0x0986,
+ "aacute",
+ 0x00e1,
+ "aadeva",
+ 0x0906,
+ "aagujarati",
+ 0x0a86,
+ "aagurmukhi",
+ 0x0a06,
+ "aamatragurmukhi",
+ 0x0a3e,
+ "aarusquare",
+ 0x3303,
+ "aavowelsignbengali",
+ 0x09be,
+ "aavowelsigndeva",
+ 0x093e,
+ "aavowelsigngujarati",
+ 0x0abe,
+ "abbreviationmarkarmenian",
+ 0x055f,
+ "abbreviationsigndeva",
+ 0x0970,
+ "abengali",
+ 0x0985,
+ "abopomofo",
+ 0x311a,
+ "abreve",
+ 0x0103,
+ "abreveacute",
+ 0x1eaf,
+ "abrevecyrillic",
+ 0x04d1,
+ "abrevedotbelow",
+ 0x1eb7,
+ "abrevegrave",
+ 0x1eb1,
+ "abrevehookabove",
+ 0x1eb3,
+ "abrevetilde",
+ 0x1eb5,
+ "acaron",
+ 0x01ce,
+ "acircle",
+ 0x24d0,
+ "acircumflex",
+ 0x00e2,
+ "acircumflexacute",
+ 0x1ea5,
+ "acircumflexdotbelow",
+ 0x1ead,
+ "acircumflexgrave",
+ 0x1ea7,
+ "acircumflexhookabove",
+ 0x1ea9,
+ "acircumflextilde",
+ 0x1eab,
+ "acute",
+ 0x00b4,
+ "acutebelowcmb",
+ 0x0317,
+ "acutecmb",
+ 0x0301,
+ "acutecomb",
+ 0x0301,
+ "acutedeva",
+ 0x0954,
+ "acutelowmod",
+ 0x02cf,
+ "acutetonecmb",
+ 0x0341,
+ "acyrillic",
+ 0x0430,
+ "adblgrave",
+ 0x0201,
+ "addakgurmukhi",
+ 0x0a71,
+ "adeva",
+ 0x0905,
+ "adieresis",
+ 0x00e4,
+ "adieresiscyrillic",
+ 0x04d3,
+ "adieresismacron",
+ 0x01df,
+ "adotbelow",
+ 0x1ea1,
+ "adotmacron",
+ 0x01e1,
+ "ae",
+ 0x00e6,
+ "aeacute",
+ 0x01fd,
+ "aekorean",
+ 0x3150,
+ "aemacron",
+ 0x01e3,
+ "afii00208",
+ 0x2015,
+ "afii08941",
+ 0x20a4,
+ "afii10017",
+ 0x0410,
+ "afii10018",
+ 0x0411,
+ "afii10019",
+ 0x0412,
+ "afii10020",
+ 0x0413,
+ "afii10021",
+ 0x0414,
+ "afii10022",
+ 0x0415,
+ "afii10023",
+ 0x0401,
+ "afii10024",
+ 0x0416,
+ "afii10025",
+ 0x0417,
+ "afii10026",
+ 0x0418,
+ "afii10027",
+ 0x0419,
+ "afii10028",
+ 0x041a,
+ "afii10029",
+ 0x041b,
+ "afii10030",
+ 0x041c,
+ "afii10031",
+ 0x041d,
+ "afii10032",
+ 0x041e,
+ "afii10033",
+ 0x041f,
+ "afii10034",
+ 0x0420,
+ "afii10035",
+ 0x0421,
+ "afii10036",
+ 0x0422,
+ "afii10037",
+ 0x0423,
+ "afii10038",
+ 0x0424,
+ "afii10039",
+ 0x0425,
+ "afii10040",
+ 0x0426,
+ "afii10041",
+ 0x0427,
+ "afii10042",
+ 0x0428,
+ "afii10043",
+ 0x0429,
+ "afii10044",
+ 0x042a,
+ "afii10045",
+ 0x042b,
+ "afii10046",
+ 0x042c,
+ "afii10047",
+ 0x042d,
+ "afii10048",
+ 0x042e,
+ "afii10049",
+ 0x042f,
+ "afii10050",
+ 0x0490,
+ "afii10051",
+ 0x0402,
+ "afii10052",
+ 0x0403,
+ "afii10053",
+ 0x0404,
+ "afii10054",
+ 0x0405,
+ "afii10055",
+ 0x0406,
+ "afii10056",
+ 0x0407,
+ "afii10057",
+ 0x0408,
+ "afii10058",
+ 0x0409,
+ "afii10059",
+ 0x040a,
+ "afii10060",
+ 0x040b,
+ "afii10061",
+ 0x040c,
+ "afii10062",
+ 0x040e,
+ "afii10063",
+ 0xf6c4,
+ "afii10064",
+ 0xf6c5,
+ "afii10065",
+ 0x0430,
+ "afii10066",
+ 0x0431,
+ "afii10067",
+ 0x0432,
+ "afii10068",
+ 0x0433,
+ "afii10069",
+ 0x0434,
+ "afii10070",
+ 0x0435,
+ "afii10071",
+ 0x0451,
+ "afii10072",
+ 0x0436,
+ "afii10073",
+ 0x0437,
+ "afii10074",
+ 0x0438,
+ "afii10075",
+ 0x0439,
+ "afii10076",
+ 0x043a,
+ "afii10077",
+ 0x043b,
+ "afii10078",
+ 0x043c,
+ "afii10079",
+ 0x043d,
+ "afii10080",
+ 0x043e,
+ "afii10081",
+ 0x043f,
+ "afii10082",
+ 0x0440,
+ "afii10083",
+ 0x0441,
+ "afii10084",
+ 0x0442,
+ "afii10085",
+ 0x0443,
+ "afii10086",
+ 0x0444,
+ "afii10087",
+ 0x0445,
+ "afii10088",
+ 0x0446,
+ "afii10089",
+ 0x0447,
+ "afii10090",
+ 0x0448,
+ "afii10091",
+ 0x0449,
+ "afii10092",
+ 0x044a,
+ "afii10093",
+ 0x044b,
+ "afii10094",
+ 0x044c,
+ "afii10095",
+ 0x044d,
+ "afii10096",
+ 0x044e,
+ "afii10097",
+ 0x044f,
+ "afii10098",
+ 0x0491,
+ "afii10099",
+ 0x0452,
+ "afii10100",
+ 0x0453,
+ "afii10101",
+ 0x0454,
+ "afii10102",
+ 0x0455,
+ "afii10103",
+ 0x0456,
+ "afii10104",
+ 0x0457,
+ "afii10105",
+ 0x0458,
+ "afii10106",
+ 0x0459,
+ "afii10107",
+ 0x045a,
+ "afii10108",
+ 0x045b,
+ "afii10109",
+ 0x045c,
+ "afii10110",
+ 0x045e,
+ "afii10145",
+ 0x040f,
+ "afii10146",
+ 0x0462,
+ "afii10147",
+ 0x0472,
+ "afii10148",
+ 0x0474,
+ "afii10192",
+ 0xf6c6,
+ "afii10193",
+ 0x045f,
+ "afii10194",
+ 0x0463,
+ "afii10195",
+ 0x0473,
+ "afii10196",
+ 0x0475,
+ "afii10831",
+ 0xf6c7,
+ "afii10832",
+ 0xf6c8,
+ "afii10846",
+ 0x04d9,
+ "afii299",
+ 0x200e,
+ "afii300",
+ 0x200f,
+ "afii301",
+ 0x200d,
+ "afii57381",
+ 0x066a,
+ "afii57388",
+ 0x060c,
+ "afii57392",
+ 0x0660,
+ "afii57393",
+ 0x0661,
+ "afii57394",
+ 0x0662,
+ "afii57395",
+ 0x0663,
+ "afii57396",
+ 0x0664,
+ "afii57397",
+ 0x0665,
+ "afii57398",
+ 0x0666,
+ "afii57399",
+ 0x0667,
+ "afii57400",
+ 0x0668,
+ "afii57401",
+ 0x0669,
+ "afii57403",
+ 0x061b,
+ "afii57407",
+ 0x061f,
+ "afii57409",
+ 0x0621,
+ "afii57410",
+ 0x0622,
+ "afii57411",
+ 0x0623,
+ "afii57412",
+ 0x0624,
+ "afii57413",
+ 0x0625,
+ "afii57414",
+ 0x0626,
+ "afii57415",
+ 0x0627,
+ "afii57416",
+ 0x0628,
+ "afii57417",
+ 0x0629,
+ "afii57418",
+ 0x062a,
+ "afii57419",
+ 0x062b,
+ "afii57420",
+ 0x062c,
+ "afii57421",
+ 0x062d,
+ "afii57422",
+ 0x062e,
+ "afii57423",
+ 0x062f,
+ "afii57424",
+ 0x0630,
+ "afii57425",
+ 0x0631,
+ "afii57426",
+ 0x0632,
+ "afii57427",
+ 0x0633,
+ "afii57428",
+ 0x0634,
+ "afii57429",
+ 0x0635,
+ "afii57430",
+ 0x0636,
+ "afii57431",
+ 0x0637,
+ "afii57432",
+ 0x0638,
+ "afii57433",
+ 0x0639,
+ "afii57434",
+ 0x063a,
+ "afii57440",
+ 0x0640,
+ "afii57441",
+ 0x0641,
+ "afii57442",
+ 0x0642,
+ "afii57443",
+ 0x0643,
+ "afii57444",
+ 0x0644,
+ "afii57445",
+ 0x0645,
+ "afii57446",
+ 0x0646,
+ "afii57448",
+ 0x0648,
+ "afii57449",
+ 0x0649,
+ "afii57450",
+ 0x064a,
+ "afii57451",
+ 0x064b,
+ "afii57452",
+ 0x064c,
+ "afii57453",
+ 0x064d,
+ "afii57454",
+ 0x064e,
+ "afii57455",
+ 0x064f,
+ "afii57456",
+ 0x0650,
+ "afii57457",
+ 0x0651,
+ "afii57458",
+ 0x0652,
+ "afii57470",
+ 0x0647,
+ "afii57505",
+ 0x06a4,
+ "afii57506",
+ 0x067e,
+ "afii57507",
+ 0x0686,
+ "afii57508",
+ 0x0698,
+ "afii57509",
+ 0x06af,
+ "afii57511",
+ 0x0679,
+ "afii57512",
+ 0x0688,
+ "afii57513",
+ 0x0691,
+ "afii57514",
+ 0x06ba,
+ "afii57519",
+ 0x06d2,
+ "afii57534",
+ 0x06d5,
+ "afii57636",
+ 0x20aa,
+ "afii57645",
+ 0x05be,
+ "afii57658",
+ 0x05c3,
+ "afii57664",
+ 0x05d0,
+ "afii57665",
+ 0x05d1,
+ "afii57666",
+ 0x05d2,
+ "afii57667",
+ 0x05d3,
+ "afii57668",
+ 0x05d4,
+ "afii57669",
+ 0x05d5,
+ "afii57670",
+ 0x05d6,
+ "afii57671",
+ 0x05d7,
+ "afii57672",
+ 0x05d8,
+ "afii57673",
+ 0x05d9,
+ "afii57674",
+ 0x05da,
+ "afii57675",
+ 0x05db,
+ "afii57676",
+ 0x05dc,
+ "afii57677",
+ 0x05dd,
+ "afii57678",
+ 0x05de,
+ "afii57679",
+ 0x05df,
+ "afii57680",
+ 0x05e0,
+ "afii57681",
+ 0x05e1,
+ "afii57682",
+ 0x05e2,
+ "afii57683",
+ 0x05e3,
+ "afii57684",
+ 0x05e4,
+ "afii57685",
+ 0x05e5,
+ "afii57686",
+ 0x05e6,
+ "afii57687",
+ 0x05e7,
+ "afii57688",
+ 0x05e8,
+ "afii57689",
+ 0x05e9,
+ "afii57690",
+ 0x05ea,
+ "afii57694",
+ 0xfb2a,
+ "afii57695",
+ 0xfb2b,
+ "afii57700",
+ 0xfb4b,
+ "afii57705",
+ 0xfb1f,
+ "afii57716",
+ 0x05f0,
+ "afii57717",
+ 0x05f1,
+ "afii57718",
+ 0x05f2,
+ "afii57723",
+ 0xfb35,
+ "afii57793",
+ 0x05b4,
+ "afii57794",
+ 0x05b5,
+ "afii57795",
+ 0x05b6,
+ "afii57796",
+ 0x05bb,
+ "afii57797",
+ 0x05b8,
+ "afii57798",
+ 0x05b7,
+ "afii57799",
+ 0x05b0,
+ "afii57800",
+ 0x05b2,
+ "afii57801",
+ 0x05b1,
+ "afii57802",
+ 0x05b3,
+ "afii57803",
+ 0x05c2,
+ "afii57804",
+ 0x05c1,
+ "afii57806",
+ 0x05b9,
+ "afii57807",
+ 0x05bc,
+ "afii57839",
+ 0x05bd,
+ "afii57841",
+ 0x05bf,
+ "afii57842",
+ 0x05c0,
+ "afii57929",
+ 0x02bc,
+ "afii61248",
+ 0x2105,
+ "afii61289",
+ 0x2113,
+ "afii61352",
+ 0x2116,
+ "afii61573",
+ 0x202c,
+ "afii61574",
+ 0x202d,
+ "afii61575",
+ 0x202e,
+ "afii61664",
+ 0x200c,
+ "afii63167",
+ 0x066d,
+ "afii64937",
+ 0x02bd,
+ "agrave",
+ 0x00e0,
+ "agujarati",
+ 0x0a85,
+ "agurmukhi",
+ 0x0a05,
+ "ahiragana",
+ 0x3042,
+ "ahookabove",
+ 0x1ea3,
+ "aibengali",
+ 0x0990,
+ "aibopomofo",
+ 0x311e,
+ "aideva",
+ 0x0910,
+ "aiecyrillic",
+ 0x04d5,
+ "aigujarati",
+ 0x0a90,
+ "aigurmukhi",
+ 0x0a10,
+ "aimatragurmukhi",
+ 0x0a48,
+ "ainarabic",
+ 0x0639,
+ "ainfinalarabic",
+ 0xfeca,
+ "aininitialarabic",
+ 0xfecb,
+ "ainmedialarabic",
+ 0xfecc,
+ "ainvertedbreve",
+ 0x0203,
+ "aivowelsignbengali",
+ 0x09c8,
+ "aivowelsigndeva",
+ 0x0948,
+ "aivowelsigngujarati",
+ 0x0ac8,
+ "akatakana",
+ 0x30a2,
+ "akatakanahalfwidth",
+ 0xff71,
+ "akorean",
+ 0x314f,
+ "alef",
+ 0x05d0,
+ "alefarabic",
+ 0x0627,
+ "alefdageshhebrew",
+ 0xfb30,
+ "aleffinalarabic",
+ 0xfe8e,
+ "alefhamzaabovearabic",
+ 0x0623,
+ "alefhamzaabovefinalarabic",
+ 0xfe84,
+ "alefhamzabelowarabic",
+ 0x0625,
+ "alefhamzabelowfinalarabic",
+ 0xfe88,
+ "alefhebrew",
+ 0x05d0,
+ "aleflamedhebrew",
+ 0xfb4f,
+ "alefmaddaabovearabic",
+ 0x0622,
+ "alefmaddaabovefinalarabic",
+ 0xfe82,
+ "alefmaksuraarabic",
+ 0x0649,
+ "alefmaksurafinalarabic",
+ 0xfef0,
+ "alefmaksurainitialarabic",
+ 0xfef3,
+ "alefmaksuramedialarabic",
+ 0xfef4,
+ "alefpatahhebrew",
+ 0xfb2e,
+ "alefqamatshebrew",
+ 0xfb2f,
+ "aleph",
+ 0x2135,
+ "allequal",
+ 0x224c,
+ "alpha",
+ 0x03b1,
+ "alphatonos",
+ 0x03ac,
+ "amacron",
+ 0x0101,
+ "amonospace",
+ 0xff41,
+ "ampersand",
+ 0x0026,
+ "ampersandmonospace",
+ 0xff06,
+ "ampersandsmall",
+ 0xf726,
+ "amsquare",
+ 0x33c2,
+ "anbopomofo",
+ 0x3122,
+ "angbopomofo",
+ 0x3124,
+ "angbracketleft",
+ 0x3008,
+ "angbracketright",
+ 0x3009,
+ "angkhankhuthai",
+ 0x0e5a,
+ "angle",
+ 0x2220,
+ "anglebracketleft",
+ 0x3008,
+ "anglebracketleftvertical",
+ 0xfe3f,
+ "anglebracketright",
+ 0x3009,
+ "anglebracketrightvertical",
+ 0xfe40,
+ "angleleft",
+ 0x2329,
+ "angleright",
+ 0x232a,
+ "angstrom",
+ 0x212b,
+ "anoteleia",
+ 0x0387,
+ "anudattadeva",
+ 0x0952,
+ "anusvarabengali",
+ 0x0982,
+ "anusvaradeva",
+ 0x0902,
+ "anusvaragujarati",
+ 0x0a82,
+ "aogonek",
+ 0x0105,
+ "apaatosquare",
+ 0x3300,
+ "aparen",
+ 0x249c,
+ "apostrophearmenian",
+ 0x055a,
+ "apostrophemod",
+ 0x02bc,
+ "apple",
+ 0xf8ff,
+ "approaches",
+ 0x2250,
+ "approxequal",
+ 0x2248,
+ "approxequalorimage",
+ 0x2252,
+ "approximatelyequal",
+ 0x2245,
+ "araeaekorean",
+ 0x318e,
+ "araeakorean",
+ 0x318d,
+ "arc",
+ 0x2312,
+ "arighthalfring",
+ 0x1e9a,
+ "aring",
+ 0x00e5,
+ "aringacute",
+ 0x01fb,
+ "aringbelow",
+ 0x1e01,
+ "arrowboth",
+ 0x2194,
+ "arrowdashdown",
+ 0x21e3,
+ "arrowdashleft",
+ 0x21e0,
+ "arrowdashright",
+ 0x21e2,
+ "arrowdashup",
+ 0x21e1,
+ "arrowdblboth",
+ 0x21d4,
+ "arrowdbldown",
+ 0x21d3,
+ "arrowdblleft",
+ 0x21d0,
+ "arrowdblright",
+ 0x21d2,
+ "arrowdblup",
+ 0x21d1,
+ "arrowdown",
+ 0x2193,
+ "arrowdownleft",
+ 0x2199,
+ "arrowdownright",
+ 0x2198,
+ "arrowdownwhite",
+ 0x21e9,
+ "arrowheaddownmod",
+ 0x02c5,
+ "arrowheadleftmod",
+ 0x02c2,
+ "arrowheadrightmod",
+ 0x02c3,
+ "arrowheadupmod",
+ 0x02c4,
+ "arrowhorizex",
+ 0xf8e7,
+ "arrowleft",
+ 0x2190,
+ "arrowleftdbl",
+ 0x21d0,
+ "arrowleftdblstroke",
+ 0x21cd,
+ "arrowleftoverright",
+ 0x21c6,
+ "arrowleftwhite",
+ 0x21e6,
+ "arrowright",
+ 0x2192,
+ "arrowrightdblstroke",
+ 0x21cf,
+ "arrowrightheavy",
+ 0x279e,
+ "arrowrightoverleft",
+ 0x21c4,
+ "arrowrightwhite",
+ 0x21e8,
+ "arrowtableft",
+ 0x21e4,
+ "arrowtabright",
+ 0x21e5,
+ "arrowup",
+ 0x2191,
+ "arrowupdn",
+ 0x2195,
+ "arrowupdnbse",
+ 0x21a8,
+ "arrowupdownbase",
+ 0x21a8,
+ "arrowupleft",
+ 0x2196,
+ "arrowupleftofdown",
+ 0x21c5,
+ "arrowupright",
+ 0x2197,
+ "arrowupwhite",
+ 0x21e7,
+ "arrowvertex",
+ 0xf8e6,
+ "asciicircum",
+ 0x005e,
+ "asciicircummonospace",
+ 0xff3e,
+ "asciitilde",
+ 0x007e,
+ "asciitildemonospace",
+ 0xff5e,
+ "ascript",
+ 0x0251,
+ "ascriptturned",
+ 0x0252,
+ "asmallhiragana",
+ 0x3041,
+ "asmallkatakana",
+ 0x30a1,
+ "asmallkatakanahalfwidth",
+ 0xff67,
+ "asterisk",
+ 0x002a,
+ "asteriskaltonearabic",
+ 0x066d,
+ "asteriskarabic",
+ 0x066d,
+ "asteriskmath",
+ 0x2217,
+ "asteriskmonospace",
+ 0xff0a,
+ "asterisksmall",
+ 0xfe61,
+ "asterism",
+ 0x2042,
+ "asuperior",
+ 0xf6e9,
+ "asymptoticallyequal",
+ 0x2243,
+ "at",
+ 0x0040,
+ "atilde",
+ 0x00e3,
+ "atmonospace",
+ 0xff20,
+ "atsmall",
+ 0xfe6b,
+ "aturned",
+ 0x0250,
+ "aubengali",
+ 0x0994,
+ "aubopomofo",
+ 0x3120,
+ "audeva",
+ 0x0914,
+ "augujarati",
+ 0x0a94,
+ "augurmukhi",
+ 0x0a14,
+ "aulengthmarkbengali",
+ 0x09d7,
+ "aumatragurmukhi",
+ 0x0a4c,
+ "auvowelsignbengali",
+ 0x09cc,
+ "auvowelsigndeva",
+ 0x094c,
+ "auvowelsigngujarati",
+ 0x0acc,
+ "avagrahadeva",
+ 0x093d,
+ "aybarmenian",
+ 0x0561,
+ "ayin",
+ 0x05e2,
+ "ayinaltonehebrew",
+ 0xfb20,
+ "ayinhebrew",
+ 0x05e2,
+ "b",
+ 0x0062,
+ "babengali",
+ 0x09ac,
+ "backslash",
+ 0x005c,
+ "backslashmonospace",
+ 0xff3c,
+ "badeva",
+ 0x092c,
+ "bagujarati",
+ 0x0aac,
+ "bagurmukhi",
+ 0x0a2c,
+ "bahiragana",
+ 0x3070,
+ "bahtthai",
+ 0x0e3f,
+ "bakatakana",
+ 0x30d0,
+ "bar",
+ 0x007c,
+ "barmonospace",
+ 0xff5c,
+ "bbopomofo",
+ 0x3105,
+ "bcircle",
+ 0x24d1,
+ "bdotaccent",
+ 0x1e03,
+ "bdotbelow",
+ 0x1e05,
+ "beamedsixteenthnotes",
+ 0x266c,
+ "because",
+ 0x2235,
+ "becyrillic",
+ 0x0431,
+ "beharabic",
+ 0x0628,
+ "behfinalarabic",
+ 0xfe90,
+ "behinitialarabic",
+ 0xfe91,
+ "behiragana",
+ 0x3079,
+ "behmedialarabic",
+ 0xfe92,
+ "behmeeminitialarabic",
+ 0xfc9f,
+ "behmeemisolatedarabic",
+ 0xfc08,
+ "behnoonfinalarabic",
+ 0xfc6d,
+ "bekatakana",
+ 0x30d9,
+ "benarmenian",
+ 0x0562,
+ "bet",
+ 0x05d1,
+ "beta",
+ 0x03b2,
+ "betasymbolgreek",
+ 0x03d0,
+ "betdagesh",
+ 0xfb31,
+ "betdageshhebrew",
+ 0xfb31,
+ "bethebrew",
+ 0x05d1,
+ "betrafehebrew",
+ 0xfb4c,
+ "bhabengali",
+ 0x09ad,
+ "bhadeva",
+ 0x092d,
+ "bhagujarati",
+ 0x0aad,
+ "bhagurmukhi",
+ 0x0a2d,
+ "bhook",
+ 0x0253,
+ "bihiragana",
+ 0x3073,
+ "bikatakana",
+ 0x30d3,
+ "bilabialclick",
+ 0x0298,
+ "bindigurmukhi",
+ 0x0a02,
+ "birusquare",
+ 0x3331,
+ "blackcircle",
+ 0x25cf,
+ "blackdiamond",
+ 0x25c6,
+ "blackdownpointingtriangle",
+ 0x25bc,
+ "blackleftpointingpointer",
+ 0x25c4,
+ "blackleftpointingtriangle",
+ 0x25c0,
+ "blacklenticularbracketleft",
+ 0x3010,
+ "blacklenticularbracketleftvertical",
+ 0xfe3b,
+ "blacklenticularbracketright",
+ 0x3011,
+ "blacklenticularbracketrightvertical",
+ 0xfe3c,
+ "blacklowerlefttriangle",
+ 0x25e3,
+ "blacklowerrighttriangle",
+ 0x25e2,
+ "blackrectangle",
+ 0x25ac,
+ "blackrightpointingpointer",
+ 0x25ba,
+ "blackrightpointingtriangle",
+ 0x25b6,
+ "blacksmallsquare",
+ 0x25aa,
+ "blacksmilingface",
+ 0x263b,
+ "blacksquare",
+ 0x25a0,
+ "blackstar",
+ 0x2605,
+ "blackupperlefttriangle",
+ 0x25e4,
+ "blackupperrighttriangle",
+ 0x25e5,
+ "blackuppointingsmalltriangle",
+ 0x25b4,
+ "blackuppointingtriangle",
+ 0x25b2,
+ "blank",
+ 0x2423,
+ "blinebelow",
+ 0x1e07,
+ "block",
+ 0x2588,
+ "bmonospace",
+ 0xff42,
+ "bobaimaithai",
+ 0x0e1a,
+ "bohiragana",
+ 0x307c,
+ "bokatakana",
+ 0x30dc,
+ "bparen",
+ 0x249d,
+ "bqsquare",
+ 0x33c3,
+ "braceex",
+ 0xf8f4,
+ "braceleft",
+ 0x007b,
+ "braceleftbt",
+ 0xf8f3,
+ "braceleftmid",
+ 0xf8f2,
+ "braceleftmonospace",
+ 0xff5b,
+ "braceleftsmall",
+ 0xfe5b,
+ "bracelefttp",
+ 0xf8f1,
+ "braceleftvertical",
+ 0xfe37,
+ "braceright",
+ 0x007d,
+ "bracerightbt",
+ 0xf8fe,
+ "bracerightmid",
+ 0xf8fd,
+ "bracerightmonospace",
+ 0xff5d,
+ "bracerightsmall",
+ 0xfe5c,
+ "bracerighttp",
+ 0xf8fc,
+ "bracerightvertical",
+ 0xfe38,
+ "bracketleft",
+ 0x005b,
+ "bracketleftbt",
+ 0xf8f0,
+ "bracketleftex",
+ 0xf8ef,
+ "bracketleftmonospace",
+ 0xff3b,
+ "bracketlefttp",
+ 0xf8ee,
+ "bracketright",
+ 0x005d,
+ "bracketrightbt",
+ 0xf8fb,
+ "bracketrightex",
+ 0xf8fa,
+ "bracketrightmonospace",
+ 0xff3d,
+ "bracketrighttp",
+ 0xf8f9,
+ "breve",
+ 0x02d8,
+ "brevebelowcmb",
+ 0x032e,
+ "brevecmb",
+ 0x0306,
+ "breveinvertedbelowcmb",
+ 0x032f,
+ "breveinvertedcmb",
+ 0x0311,
+ "breveinverteddoublecmb",
+ 0x0361,
+ "bridgebelowcmb",
+ 0x032a,
+ "bridgeinvertedbelowcmb",
+ 0x033a,
+ "brokenbar",
+ 0x00a6,
+ "bstroke",
+ 0x0180,
+ "bsuperior",
+ 0xf6ea,
+ "btopbar",
+ 0x0183,
+ "buhiragana",
+ 0x3076,
+ "bukatakana",
+ 0x30d6,
+ "bullet",
+ 0x2022,
+ "bulletinverse",
+ 0x25d8,
+ "bulletoperator",
+ 0x2219,
+ "bullseye",
+ 0x25ce,
+ "c",
+ 0x0063,
+ "caarmenian",
+ 0x056e,
+ "cabengali",
+ 0x099a,
+ "cacute",
+ 0x0107,
+ "cadeva",
+ 0x091a,
+ "cagujarati",
+ 0x0a9a,
+ "cagurmukhi",
+ 0x0a1a,
+ "calsquare",
+ 0x3388,
+ "candrabindubengali",
+ 0x0981,
+ "candrabinducmb",
+ 0x0310,
+ "candrabindudeva",
+ 0x0901,
+ "candrabindugujarati",
+ 0x0a81,
+ "capslock",
+ 0x21ea,
+ "careof",
+ 0x2105,
+ "caron",
+ 0x02c7,
+ "caronbelowcmb",
+ 0x032c,
+ "caroncmb",
+ 0x030c,
+ "carriagereturn",
+ 0x21b5,
+ "cbopomofo",
+ 0x3118,
+ "ccaron",
+ 0x010d,
+ "ccedilla",
+ 0x00e7,
+ "ccedillaacute",
+ 0x1e09,
+ "ccircle",
+ 0x24d2,
+ "ccircumflex",
+ 0x0109,
+ "ccurl",
+ 0x0255,
+ "cdot",
+ 0x010b,
+ "cdotaccent",
+ 0x010b,
+ "cdsquare",
+ 0x33c5,
+ "cedilla",
+ 0x00b8,
+ "cedillacmb",
+ 0x0327,
+ "cent",
+ 0x00a2,
+ "centigrade",
+ 0x2103,
+ "centinferior",
+ 0xf6df,
+ "centmonospace",
+ 0xffe0,
+ "centoldstyle",
+ 0xf7a2,
+ "centsuperior",
+ 0xf6e0,
+ "chaarmenian",
+ 0x0579,
+ "chabengali",
+ 0x099b,
+ "chadeva",
+ 0x091b,
+ "chagujarati",
+ 0x0a9b,
+ "chagurmukhi",
+ 0x0a1b,
+ "chbopomofo",
+ 0x3114,
+ "cheabkhasiancyrillic",
+ 0x04bd,
+ "checkmark",
+ 0x2713,
+ "checyrillic",
+ 0x0447,
+ "chedescenderabkhasiancyrillic",
+ 0x04bf,
+ "chedescendercyrillic",
+ 0x04b7,
+ "chedieresiscyrillic",
+ 0x04f5,
+ "cheharmenian",
+ 0x0573,
+ "chekhakassiancyrillic",
+ 0x04cc,
+ "cheverticalstrokecyrillic",
+ 0x04b9,
+ "chi",
+ 0x03c7,
+ "chieuchacirclekorean",
+ 0x3277,
+ "chieuchaparenkorean",
+ 0x3217,
+ "chieuchcirclekorean",
+ 0x3269,
+ "chieuchkorean",
+ 0x314a,
+ "chieuchparenkorean",
+ 0x3209,
+ "chochangthai",
+ 0x0e0a,
+ "chochanthai",
+ 0x0e08,
+ "chochingthai",
+ 0x0e09,
+ "chochoethai",
+ 0x0e0c,
+ "chook",
+ 0x0188,
+ "cieucacirclekorean",
+ 0x3276,
+ "cieucaparenkorean",
+ 0x3216,
+ "cieuccirclekorean",
+ 0x3268,
+ "cieuckorean",
+ 0x3148,
+ "cieucparenkorean",
+ 0x3208,
+ "cieucuparenkorean",
+ 0x321c,
+ "circle",
+ 0x25cb,
+ "circlecopyrt",
+ 0x00a9,
+ "circlemultiply",
+ 0x2297,
+ "circleot",
+ 0x2299,
+ "circleplus",
+ 0x2295,
+ "circlepostalmark",
+ 0x3036,
+ "circlewithlefthalfblack",
+ 0x25d0,
+ "circlewithrighthalfblack",
+ 0x25d1,
+ "circumflex",
+ 0x02c6,
+ "circumflexbelowcmb",
+ 0x032d,
+ "circumflexcmb",
+ 0x0302,
+ "clear",
+ 0x2327,
+ "clickalveolar",
+ 0x01c2,
+ "clickdental",
+ 0x01c0,
+ "clicklateral",
+ 0x01c1,
+ "clickretroflex",
+ 0x01c3,
+ "club",
+ 0x2663,
+ "clubsuitblack",
+ 0x2663,
+ "clubsuitwhite",
+ 0x2667,
+ "cmcubedsquare",
+ 0x33a4,
+ "cmonospace",
+ 0xff43,
+ "cmsquaredsquare",
+ 0x33a0,
+ "coarmenian",
+ 0x0581,
+ "colon",
+ 0x003a,
+ "colonmonetary",
+ 0x20a1,
+ "colonmonospace",
+ 0xff1a,
+ "colonsign",
+ 0x20a1,
+ "colonsmall",
+ 0xfe55,
+ "colontriangularhalfmod",
+ 0x02d1,
+ "colontriangularmod",
+ 0x02d0,
+ "comma",
+ 0x002c,
+ "commaabovecmb",
+ 0x0313,
+ "commaaboverightcmb",
+ 0x0315,
+ "commaaccent",
+ 0xf6c3,
+ "commaarabic",
+ 0x060c,
+ "commaarmenian",
+ 0x055d,
+ "commainferior",
+ 0xf6e1,
+ "commamonospace",
+ 0xff0c,
+ "commareversedabovecmb",
+ 0x0314,
+ "commareversedmod",
+ 0x02bd,
+ "commasmall",
+ 0xfe50,
+ "commasuperior",
+ 0xf6e2,
+ "commaturnedabovecmb",
+ 0x0312,
+ "commaturnedmod",
+ 0x02bb,
+ "compass",
+ 0x263c,
+ "congruent",
+ 0x2245,
+ "contourintegral",
+ 0x222e,
+ "control",
+ 0x2303,
+ "controlACK",
+ 0x0006,
+ "controlBEL",
+ 0x0007,
+ "controlBS",
+ 0x0008,
+ "controlCAN",
+ 0x0018,
+ "controlCR",
+ 0x000d,
+ "controlDC1",
+ 0x0011,
+ "controlDC2",
+ 0x0012,
+ "controlDC3",
+ 0x0013,
+ "controlDC4",
+ 0x0014,
+ "controlDEL",
+ 0x007f,
+ "controlDLE",
+ 0x0010,
+ "controlEM",
+ 0x0019,
+ "controlENQ",
+ 0x0005,
+ "controlEOT",
+ 0x0004,
+ "controlESC",
+ 0x001b,
+ "controlETB",
+ 0x0017,
+ "controlETX",
+ 0x0003,
+ "controlFF",
+ 0x000c,
+ "controlFS",
+ 0x001c,
+ "controlGS",
+ 0x001d,
+ "controlHT",
+ 0x0009,
+ "controlLF",
+ 0x000a,
+ "controlNAK",
+ 0x0015,
+ "controlNULL",
+ 0x0000,
+ "controlRS",
+ 0x001e,
+ "controlSI",
+ 0x000f,
+ "controlSO",
+ 0x000e,
+ "controlSOT",
+ 0x0002,
+ "controlSTX",
+ 0x0001,
+ "controlSUB",
+ 0x001a,
+ "controlSYN",
+ 0x0016,
+ "controlUS",
+ 0x001f,
+ "controlVT",
+ 0x000b,
+ "copyright",
+ 0x00a9,
+ "copyrightsans",
+ 0xf8e9,
+ "copyrightserif",
+ 0xf6d9,
+ "cornerbracketleft",
+ 0x300c,
+ "cornerbracketlefthalfwidth",
+ 0xff62,
+ "cornerbracketleftvertical",
+ 0xfe41,
+ "cornerbracketright",
+ 0x300d,
+ "cornerbracketrighthalfwidth",
+ 0xff63,
+ "cornerbracketrightvertical",
+ 0xfe42,
+ "corporationsquare",
+ 0x337f,
+ "cosquare",
+ 0x33c7,
+ "coverkgsquare",
+ 0x33c6,
+ "cparen",
+ 0x249e,
+ "cruzeiro",
+ 0x20a2,
+ "cstretched",
+ 0x0297,
+ "curlyand",
+ 0x22cf,
+ "curlyor",
+ 0x22ce,
+ "currency",
+ 0x00a4,
+ "cyrBreve",
+ 0xf6d1,
+ "cyrFlex",
+ 0xf6d2,
+ "cyrbreve",
+ 0xf6d4,
+ "cyrflex",
+ 0xf6d5,
+ "d",
+ 0x0064,
+ "daarmenian",
+ 0x0564,
+ "dabengali",
+ 0x09a6,
+ "dadarabic",
+ 0x0636,
+ "dadeva",
+ 0x0926,
+ "dadfinalarabic",
+ 0xfebe,
+ "dadinitialarabic",
+ 0xfebf,
+ "dadmedialarabic",
+ 0xfec0,
+ "dagesh",
+ 0x05bc,
+ "dageshhebrew",
+ 0x05bc,
+ "dagger",
+ 0x2020,
+ "daggerdbl",
+ 0x2021,
+ "dagujarati",
+ 0x0aa6,
+ "dagurmukhi",
+ 0x0a26,
+ "dahiragana",
+ 0x3060,
+ "dakatakana",
+ 0x30c0,
+ "dalarabic",
+ 0x062f,
+ "dalet",
+ 0x05d3,
+ "daletdagesh",
+ 0xfb33,
+ "daletdageshhebrew",
+ 0xfb33,
+ "dalethebrew",
+ 0x05d3,
+ "dalfinalarabic",
+ 0xfeaa,
+ "dammaarabic",
+ 0x064f,
+ "dammalowarabic",
+ 0x064f,
+ "dammatanaltonearabic",
+ 0x064c,
+ "dammatanarabic",
+ 0x064c,
+ "danda",
+ 0x0964,
+ "dargahebrew",
+ 0x05a7,
+ "dargalefthebrew",
+ 0x05a7,
+ "dasiapneumatacyrilliccmb",
+ 0x0485,
+ "dblGrave",
+ 0xf6d3,
+ "dblanglebracketleft",
+ 0x300a,
+ "dblanglebracketleftvertical",
+ 0xfe3d,
+ "dblanglebracketright",
+ 0x300b,
+ "dblanglebracketrightvertical",
+ 0xfe3e,
+ "dblarchinvertedbelowcmb",
+ 0x032b,
+ "dblarrowleft",
+ 0x21d4,
+ "dblarrowright",
+ 0x21d2,
+ "dbldanda",
+ 0x0965,
+ "dblgrave",
+ 0xf6d6,
+ "dblgravecmb",
+ 0x030f,
+ "dblintegral",
+ 0x222c,
+ "dbllowline",
+ 0x2017,
+ "dbllowlinecmb",
+ 0x0333,
+ "dbloverlinecmb",
+ 0x033f,
+ "dblprimemod",
+ 0x02ba,
+ "dblverticalbar",
+ 0x2016,
+ "dblverticallineabovecmb",
+ 0x030e,
+ "dbopomofo",
+ 0x3109,
+ "dbsquare",
+ 0x33c8,
+ "dcaron",
+ 0x010f,
+ "dcedilla",
+ 0x1e11,
+ "dcircle",
+ 0x24d3,
+ "dcircumflexbelow",
+ 0x1e13,
+ "dcroat",
+ 0x0111,
+ "ddabengali",
+ 0x09a1,
+ "ddadeva",
+ 0x0921,
+ "ddagujarati",
+ 0x0aa1,
+ "ddagurmukhi",
+ 0x0a21,
+ "ddalarabic",
+ 0x0688,
+ "ddalfinalarabic",
+ 0xfb89,
+ "dddhadeva",
+ 0x095c,
+ "ddhabengali",
+ 0x09a2,
+ "ddhadeva",
+ 0x0922,
+ "ddhagujarati",
+ 0x0aa2,
+ "ddhagurmukhi",
+ 0x0a22,
+ "ddotaccent",
+ 0x1e0b,
+ "ddotbelow",
+ 0x1e0d,
+ "decimalseparatorarabic",
+ 0x066b,
+ "decimalseparatorpersian",
+ 0x066b,
+ "decyrillic",
+ 0x0434,
+ "degree",
+ 0x00b0,
+ "dehihebrew",
+ 0x05ad,
+ "dehiragana",
+ 0x3067,
+ "deicoptic",
+ 0x03ef,
+ "dekatakana",
+ 0x30c7,
+ "deleteleft",
+ 0x232b,
+ "deleteright",
+ 0x2326,
+ "delta",
+ 0x03b4,
+ "deltaturned",
+ 0x018d,
+ "denominatorminusonenumeratorbengali",
+ 0x09f8,
+ "dezh",
+ 0x02a4,
+ "dhabengali",
+ 0x09a7,
+ "dhadeva",
+ 0x0927,
+ "dhagujarati",
+ 0x0aa7,
+ "dhagurmukhi",
+ 0x0a27,
+ "dhook",
+ 0x0257,
+ "dialytikatonos",
+ 0x0385,
+ "dialytikatonoscmb",
+ 0x0344,
+ "diamond",
+ 0x2666,
+ "diamondsuitwhite",
+ 0x2662,
+ "dieresis",
+ 0x00a8,
+ "dieresisacute",
+ 0xf6d7,
+ "dieresisbelowcmb",
+ 0x0324,
+ "dieresiscmb",
+ 0x0308,
+ "dieresisgrave",
+ 0xf6d8,
+ "dieresistonos",
+ 0x0385,
+ "dihiragana",
+ 0x3062,
+ "dikatakana",
+ 0x30c2,
+ "dittomark",
+ 0x3003,
+ "divide",
+ 0x00f7,
+ "divides",
+ 0x2223,
+ "divisionslash",
+ 0x2215,
+ "djecyrillic",
+ 0x0452,
+ "dkshade",
+ 0x2593,
+ "dlinebelow",
+ 0x1e0f,
+ "dlsquare",
+ 0x3397,
+ "dmacron",
+ 0x0111,
+ "dmonospace",
+ 0xff44,
+ "dnblock",
+ 0x2584,
+ "dochadathai",
+ 0x0e0e,
+ "dodekthai",
+ 0x0e14,
+ "dohiragana",
+ 0x3069,
+ "dokatakana",
+ 0x30c9,
+ "dollar",
+ 0x0024,
+ "dollarinferior",
+ 0xf6e3,
+ "dollarmonospace",
+ 0xff04,
+ "dollaroldstyle",
+ 0xf724,
+ "dollarsmall",
+ 0xfe69,
+ "dollarsuperior",
+ 0xf6e4,
+ "dong",
+ 0x20ab,
+ "dorusquare",
+ 0x3326,
+ "dotaccent",
+ 0x02d9,
+ "dotaccentcmb",
+ 0x0307,
+ "dotbelowcmb",
+ 0x0323,
+ "dotbelowcomb",
+ 0x0323,
+ "dotkatakana",
+ 0x30fb,
+ "dotlessi",
+ 0x0131,
+ "dotlessj",
+ 0xf6be,
+ "dotlessjstrokehook",
+ 0x0284,
+ "dotmath",
+ 0x22c5,
+ "dottedcircle",
+ 0x25cc,
+ "doubleyodpatah",
+ 0xfb1f,
+ "doubleyodpatahhebrew",
+ 0xfb1f,
+ "downtackbelowcmb",
+ 0x031e,
+ "downtackmod",
+ 0x02d5,
+ "dparen",
+ 0x249f,
+ "dsuperior",
+ 0xf6eb,
+ "dtail",
+ 0x0256,
+ "dtopbar",
+ 0x018c,
+ "duhiragana",
+ 0x3065,
+ "dukatakana",
+ 0x30c5,
+ "dz",
+ 0x01f3,
+ "dzaltone",
+ 0x02a3,
+ "dzcaron",
+ 0x01c6,
+ "dzcurl",
+ 0x02a5,
+ "dzeabkhasiancyrillic",
+ 0x04e1,
+ "dzecyrillic",
+ 0x0455,
+ "dzhecyrillic",
+ 0x045f,
+ "e",
+ 0x0065,
+ "eacute",
+ 0x00e9,
+ "earth",
+ 0x2641,
+ "ebengali",
+ 0x098f,
+ "ebopomofo",
+ 0x311c,
+ "ebreve",
+ 0x0115,
+ "ecandradeva",
+ 0x090d,
+ "ecandragujarati",
+ 0x0a8d,
+ "ecandravowelsigndeva",
+ 0x0945,
+ "ecandravowelsigngujarati",
+ 0x0ac5,
+ "ecaron",
+ 0x011b,
+ "ecedillabreve",
+ 0x1e1d,
+ "echarmenian",
+ 0x0565,
+ "echyiwnarmenian",
+ 0x0587,
+ "ecircle",
+ 0x24d4,
+ "ecircumflex",
+ 0x00ea,
+ "ecircumflexacute",
+ 0x1ebf,
+ "ecircumflexbelow",
+ 0x1e19,
+ "ecircumflexdotbelow",
+ 0x1ec7,
+ "ecircumflexgrave",
+ 0x1ec1,
+ "ecircumflexhookabove",
+ 0x1ec3,
+ "ecircumflextilde",
+ 0x1ec5,
+ "ecyrillic",
+ 0x0454,
+ "edblgrave",
+ 0x0205,
+ "edeva",
+ 0x090f,
+ "edieresis",
+ 0x00eb,
+ "edot",
+ 0x0117,
+ "edotaccent",
+ 0x0117,
+ "edotbelow",
+ 0x1eb9,
+ "eegurmukhi",
+ 0x0a0f,
+ "eematragurmukhi",
+ 0x0a47,
+ "efcyrillic",
+ 0x0444,
+ "egrave",
+ 0x00e8,
+ "egujarati",
+ 0x0a8f,
+ "eharmenian",
+ 0x0567,
+ "ehbopomofo",
+ 0x311d,
+ "ehiragana",
+ 0x3048,
+ "ehookabove",
+ 0x1ebb,
+ "eibopomofo",
+ 0x311f,
+ "eight",
+ 0x0038,
+ "eightarabic",
+ 0x0668,
+ "eightbengali",
+ 0x09ee,
+ "eightcircle",
+ 0x2467,
+ "eightcircleinversesansserif",
+ 0x2791,
+ "eightdeva",
+ 0x096e,
+ "eighteencircle",
+ 0x2471,
+ "eighteenparen",
+ 0x2485,
+ "eighteenperiod",
+ 0x2499,
+ "eightgujarati",
+ 0x0aee,
+ "eightgurmukhi",
+ 0x0a6e,
+ "eighthackarabic",
+ 0x0668,
+ "eighthangzhou",
+ 0x3028,
+ "eighthnotebeamed",
+ 0x266b,
+ "eightideographicparen",
+ 0x3227,
+ "eightinferior",
+ 0x2088,
+ "eightmonospace",
+ 0xff18,
+ "eightoldstyle",
+ 0xf738,
+ "eightparen",
+ 0x247b,
+ "eightperiod",
+ 0x248f,
+ "eightpersian",
+ 0x06f8,
+ "eightroman",
+ 0x2177,
+ "eightsuperior",
+ 0x2078,
+ "eightthai",
+ 0x0e58,
+ "einvertedbreve",
+ 0x0207,
+ "eiotifiedcyrillic",
+ 0x0465,
+ "ekatakana",
+ 0x30a8,
+ "ekatakanahalfwidth",
+ 0xff74,
+ "ekonkargurmukhi",
+ 0x0a74,
+ "ekorean",
+ 0x3154,
+ "elcyrillic",
+ 0x043b,
+ "element",
+ 0x2208,
+ "elevencircle",
+ 0x246a,
+ "elevenparen",
+ 0x247e,
+ "elevenperiod",
+ 0x2492,
+ "elevenroman",
+ 0x217a,
+ "ellipsis",
+ 0x2026,
+ "ellipsisvertical",
+ 0x22ee,
+ "emacron",
+ 0x0113,
+ "emacronacute",
+ 0x1e17,
+ "emacrongrave",
+ 0x1e15,
+ "emcyrillic",
+ 0x043c,
+ "emdash",
+ 0x2014,
+ "emdashvertical",
+ 0xfe31,
+ "emonospace",
+ 0xff45,
+ "emphasismarkarmenian",
+ 0x055b,
+ "emptyset",
+ 0x2205,
+ "enbopomofo",
+ 0x3123,
+ "encyrillic",
+ 0x043d,
+ "endash",
+ 0x2013,
+ "endashvertical",
+ 0xfe32,
+ "endescendercyrillic",
+ 0x04a3,
+ "eng",
+ 0x014b,
+ "engbopomofo",
+ 0x3125,
+ "enghecyrillic",
+ 0x04a5,
+ "enhookcyrillic",
+ 0x04c8,
+ "enspace",
+ 0x2002,
+ "eogonek",
+ 0x0119,
+ "eokorean",
+ 0x3153,
+ "eopen",
+ 0x025b,
+ "eopenclosed",
+ 0x029a,
+ "eopenreversed",
+ 0x025c,
+ "eopenreversedclosed",
+ 0x025e,
+ "eopenreversedhook",
+ 0x025d,
+ "eparen",
+ 0x24a0,
+ "epsilon",
+ 0x03b5,
+ "epsilontonos",
+ 0x03ad,
+ "equal",
+ 0x003d,
+ "equalmonospace",
+ 0xff1d,
+ "equalsmall",
+ 0xfe66,
+ "equalsuperior",
+ 0x207c,
+ "equivalence",
+ 0x2261,
+ "erbopomofo",
+ 0x3126,
+ "ercyrillic",
+ 0x0440,
+ "ereversed",
+ 0x0258,
+ "ereversedcyrillic",
+ 0x044d,
+ "escyrillic",
+ 0x0441,
+ "esdescendercyrillic",
+ 0x04ab,
+ "esh",
+ 0x0283,
+ "eshcurl",
+ 0x0286,
+ "eshortdeva",
+ 0x090e,
+ "eshortvowelsigndeva",
+ 0x0946,
+ "eshreversedloop",
+ 0x01aa,
+ "eshsquatreversed",
+ 0x0285,
+ "esmallhiragana",
+ 0x3047,
+ "esmallkatakana",
+ 0x30a7,
+ "esmallkatakanahalfwidth",
+ 0xff6a,
+ "estimated",
+ 0x212e,
+ "esuperior",
+ 0xf6ec,
+ "eta",
+ 0x03b7,
+ "etarmenian",
+ 0x0568,
+ "etatonos",
+ 0x03ae,
+ "eth",
+ 0x00f0,
+ "etilde",
+ 0x1ebd,
+ "etildebelow",
+ 0x1e1b,
+ "etnahtafoukhhebrew",
+ 0x0591,
+ "etnahtafoukhlefthebrew",
+ 0x0591,
+ "etnahtahebrew",
+ 0x0591,
+ "etnahtalefthebrew",
+ 0x0591,
+ "eturned",
+ 0x01dd,
+ "eukorean",
+ 0x3161,
+ "euro",
+ 0x20ac,
+ "evowelsignbengali",
+ 0x09c7,
+ "evowelsigndeva",
+ 0x0947,
+ "evowelsigngujarati",
+ 0x0ac7,
+ "exclam",
+ 0x0021,
+ "exclamarmenian",
+ 0x055c,
+ "exclamdbl",
+ 0x203c,
+ "exclamdown",
+ 0x00a1,
+ "exclamdownsmall",
+ 0xf7a1,
+ "exclammonospace",
+ 0xff01,
+ "exclamsmall",
+ 0xf721,
+ "existential",
+ 0x2203,
+ "ezh",
+ 0x0292,
+ "ezhcaron",
+ 0x01ef,
+ "ezhcurl",
+ 0x0293,
+ "ezhreversed",
+ 0x01b9,
+ "ezhtail",
+ 0x01ba,
+ "f",
+ 0x0066,
+ "fadeva",
+ 0x095e,
+ "fagurmukhi",
+ 0x0a5e,
+ "fahrenheit",
+ 0x2109,
+ "fathaarabic",
+ 0x064e,
+ "fathalowarabic",
+ 0x064e,
+ "fathatanarabic",
+ 0x064b,
+ "fbopomofo",
+ 0x3108,
+ "fcircle",
+ 0x24d5,
+ "fdotaccent",
+ 0x1e1f,
+ "feharabic",
+ 0x0641,
+ "feharmenian",
+ 0x0586,
+ "fehfinalarabic",
+ 0xfed2,
+ "fehinitialarabic",
+ 0xfed3,
+ "fehmedialarabic",
+ 0xfed4,
+ "feicoptic",
+ 0x03e5,
+ "female",
+ 0x2640,
+ "ff",
+ 0xfb00,
+ "f_f",
+ 0xfb00,
+ "ffi",
+ 0xfb03,
+ "ffl",
+ 0xfb04,
+ "fi",
+ 0xfb01,
+ "fifteencircle",
+ 0x246e,
+ "fifteenparen",
+ 0x2482,
+ "fifteenperiod",
+ 0x2496,
+ "figuredash",
+ 0x2012,
+ "filledbox",
+ 0x25a0,
+ "filledrect",
+ 0x25ac,
+ "finalkaf",
+ 0x05da,
+ "finalkafdagesh",
+ 0xfb3a,
+ "finalkafdageshhebrew",
+ 0xfb3a,
+ "finalkafhebrew",
+ 0x05da,
+ "finalmem",
+ 0x05dd,
+ "finalmemhebrew",
+ 0x05dd,
+ "finalnun",
+ 0x05df,
+ "finalnunhebrew",
+ 0x05df,
+ "finalpe",
+ 0x05e3,
+ "finalpehebrew",
+ 0x05e3,
+ "finaltsadi",
+ 0x05e5,
+ "finaltsadihebrew",
+ 0x05e5,
+ "firsttonechinese",
+ 0x02c9,
+ "fisheye",
+ 0x25c9,
+ "fitacyrillic",
+ 0x0473,
+ "five",
+ 0x0035,
+ "fivearabic",
+ 0x0665,
+ "fivebengali",
+ 0x09eb,
+ "fivecircle",
+ 0x2464,
+ "fivecircleinversesansserif",
+ 0x278e,
+ "fivedeva",
+ 0x096b,
+ "fiveeighths",
+ 0x215d,
+ "fivegujarati",
+ 0x0aeb,
+ "fivegurmukhi",
+ 0x0a6b,
+ "fivehackarabic",
+ 0x0665,
+ "fivehangzhou",
+ 0x3025,
+ "fiveideographicparen",
+ 0x3224,
+ "fiveinferior",
+ 0x2085,
+ "fivemonospace",
+ 0xff15,
+ "fiveoldstyle",
+ 0xf735,
+ "fiveparen",
+ 0x2478,
+ "fiveperiod",
+ 0x248c,
+ "fivepersian",
+ 0x06f5,
+ "fiveroman",
+ 0x2174,
+ "fivesuperior",
+ 0x2075,
+ "fivethai",
+ 0x0e55,
+ "fl",
+ 0xfb02,
+ "florin",
+ 0x0192,
+ "fmonospace",
+ 0xff46,
+ "fmsquare",
+ 0x3399,
+ "fofanthai",
+ 0x0e1f,
+ "fofathai",
+ 0x0e1d,
+ "fongmanthai",
+ 0x0e4f,
+ "forall",
+ 0x2200,
+ "four",
+ 0x0034,
+ "fourarabic",
+ 0x0664,
+ "fourbengali",
+ 0x09ea,
+ "fourcircle",
+ 0x2463,
+ "fourcircleinversesansserif",
+ 0x278d,
+ "fourdeva",
+ 0x096a,
+ "fourgujarati",
+ 0x0aea,
+ "fourgurmukhi",
+ 0x0a6a,
+ "fourhackarabic",
+ 0x0664,
+ "fourhangzhou",
+ 0x3024,
+ "fourideographicparen",
+ 0x3223,
+ "fourinferior",
+ 0x2084,
+ "fourmonospace",
+ 0xff14,
+ "fournumeratorbengali",
+ 0x09f7,
+ "fouroldstyle",
+ 0xf734,
+ "fourparen",
+ 0x2477,
+ "fourperiod",
+ 0x248b,
+ "fourpersian",
+ 0x06f4,
+ "fourroman",
+ 0x2173,
+ "foursuperior",
+ 0x2074,
+ "fourteencircle",
+ 0x246d,
+ "fourteenparen",
+ 0x2481,
+ "fourteenperiod",
+ 0x2495,
+ "fourthai",
+ 0x0e54,
+ "fourthtonechinese",
+ 0x02cb,
+ "fparen",
+ 0x24a1,
+ "fraction",
+ 0x2044,
+ "franc",
+ 0x20a3,
+ "g",
+ 0x0067,
+ "gabengali",
+ 0x0997,
+ "gacute",
+ 0x01f5,
+ "gadeva",
+ 0x0917,
+ "gafarabic",
+ 0x06af,
+ "gaffinalarabic",
+ 0xfb93,
+ "gafinitialarabic",
+ 0xfb94,
+ "gafmedialarabic",
+ 0xfb95,
+ "gagujarati",
+ 0x0a97,
+ "gagurmukhi",
+ 0x0a17,
+ "gahiragana",
+ 0x304c,
+ "gakatakana",
+ 0x30ac,
+ "gamma",
+ 0x03b3,
+ "gammalatinsmall",
+ 0x0263,
+ "gammasuperior",
+ 0x02e0,
+ "gangiacoptic",
+ 0x03eb,
+ "gbopomofo",
+ 0x310d,
+ "gbreve",
+ 0x011f,
+ "gcaron",
+ 0x01e7,
+ "gcedilla",
+ 0x0123,
+ "gcircle",
+ 0x24d6,
+ "gcircumflex",
+ 0x011d,
+ "gcommaaccent",
+ 0x0123,
+ "gdot",
+ 0x0121,
+ "gdotaccent",
+ 0x0121,
+ "gecyrillic",
+ 0x0433,
+ "gehiragana",
+ 0x3052,
+ "gekatakana",
+ 0x30b2,
+ "geometricallyequal",
+ 0x2251,
+ "gereshaccenthebrew",
+ 0x059c,
+ "gereshhebrew",
+ 0x05f3,
+ "gereshmuqdamhebrew",
+ 0x059d,
+ "germandbls",
+ 0x00df,
+ "gershayimaccenthebrew",
+ 0x059e,
+ "gershayimhebrew",
+ 0x05f4,
+ "getamark",
+ 0x3013,
+ "ghabengali",
+ 0x0998,
+ "ghadarmenian",
+ 0x0572,
+ "ghadeva",
+ 0x0918,
+ "ghagujarati",
+ 0x0a98,
+ "ghagurmukhi",
+ 0x0a18,
+ "ghainarabic",
+ 0x063a,
+ "ghainfinalarabic",
+ 0xfece,
+ "ghaininitialarabic",
+ 0xfecf,
+ "ghainmedialarabic",
+ 0xfed0,
+ "ghemiddlehookcyrillic",
+ 0x0495,
+ "ghestrokecyrillic",
+ 0x0493,
+ "gheupturncyrillic",
+ 0x0491,
+ "ghhadeva",
+ 0x095a,
+ "ghhagurmukhi",
+ 0x0a5a,
+ "ghook",
+ 0x0260,
+ "ghzsquare",
+ 0x3393,
+ "gihiragana",
+ 0x304e,
+ "gikatakana",
+ 0x30ae,
+ "gimarmenian",
+ 0x0563,
+ "gimel",
+ 0x05d2,
+ "gimeldagesh",
+ 0xfb32,
+ "gimeldageshhebrew",
+ 0xfb32,
+ "gimelhebrew",
+ 0x05d2,
+ "gjecyrillic",
+ 0x0453,
+ "glottalinvertedstroke",
+ 0x01be,
+ "glottalstop",
+ 0x0294,
+ "glottalstopinverted",
+ 0x0296,
+ "glottalstopmod",
+ 0x02c0,
+ "glottalstopreversed",
+ 0x0295,
+ "glottalstopreversedmod",
+ 0x02c1,
+ "glottalstopreversedsuperior",
+ 0x02e4,
+ "glottalstopstroke",
+ 0x02a1,
+ "glottalstopstrokereversed",
+ 0x02a2,
+ "gmacron",
+ 0x1e21,
+ "gmonospace",
+ 0xff47,
+ "gohiragana",
+ 0x3054,
+ "gokatakana",
+ 0x30b4,
+ "gparen",
+ 0x24a2,
+ "gpasquare",
+ 0x33ac,
+ "gradient",
+ 0x2207,
+ "grave",
+ 0x0060,
+ "gravebelowcmb",
+ 0x0316,
+ "gravecmb",
+ 0x0300,
+ "gravecomb",
+ 0x0300,
+ "gravedeva",
+ 0x0953,
+ "gravelowmod",
+ 0x02ce,
+ "gravemonospace",
+ 0xff40,
+ "gravetonecmb",
+ 0x0340,
+ "greater",
+ 0x003e,
+ "greaterequal",
+ 0x2265,
+ "greaterequalorless",
+ 0x22db,
+ "greatermonospace",
+ 0xff1e,
+ "greaterorequivalent",
+ 0x2273,
+ "greaterorless",
+ 0x2277,
+ "greateroverequal",
+ 0x2267,
+ "greatersmall",
+ 0xfe65,
+ "gscript",
+ 0x0261,
+ "gstroke",
+ 0x01e5,
+ "guhiragana",
+ 0x3050,
+ "guillemotleft",
+ 0x00ab,
+ "guillemotright",
+ 0x00bb,
+ "guilsinglleft",
+ 0x2039,
+ "guilsinglright",
+ 0x203a,
+ "gukatakana",
+ 0x30b0,
+ "guramusquare",
+ 0x3318,
+ "gysquare",
+ 0x33c9,
+ "h",
+ 0x0068,
+ "haabkhasiancyrillic",
+ 0x04a9,
+ "haaltonearabic",
+ 0x06c1,
+ "habengali",
+ 0x09b9,
+ "hadescendercyrillic",
+ 0x04b3,
+ "hadeva",
+ 0x0939,
+ "hagujarati",
+ 0x0ab9,
+ "hagurmukhi",
+ 0x0a39,
+ "haharabic",
+ 0x062d,
+ "hahfinalarabic",
+ 0xfea2,
+ "hahinitialarabic",
+ 0xfea3,
+ "hahiragana",
+ 0x306f,
+ "hahmedialarabic",
+ 0xfea4,
+ "haitusquare",
+ 0x332a,
+ "hakatakana",
+ 0x30cf,
+ "hakatakanahalfwidth",
+ 0xff8a,
+ "halantgurmukhi",
+ 0x0a4d,
+ "hamzaarabic",
+ 0x0621,
+ "hamzalowarabic",
+ 0x0621,
+ "hangulfiller",
+ 0x3164,
+ "hardsigncyrillic",
+ 0x044a,
+ "harpoonleftbarbup",
+ 0x21bc,
+ "harpoonrightbarbup",
+ 0x21c0,
+ "hasquare",
+ 0x33ca,
+ "hatafpatah",
+ 0x05b2,
+ "hatafpatah16",
+ 0x05b2,
+ "hatafpatah23",
+ 0x05b2,
+ "hatafpatah2f",
+ 0x05b2,
+ "hatafpatahhebrew",
+ 0x05b2,
+ "hatafpatahnarrowhebrew",
+ 0x05b2,
+ "hatafpatahquarterhebrew",
+ 0x05b2,
+ "hatafpatahwidehebrew",
+ 0x05b2,
+ "hatafqamats",
+ 0x05b3,
+ "hatafqamats1b",
+ 0x05b3,
+ "hatafqamats28",
+ 0x05b3,
+ "hatafqamats34",
+ 0x05b3,
+ "hatafqamatshebrew",
+ 0x05b3,
+ "hatafqamatsnarrowhebrew",
+ 0x05b3,
+ "hatafqamatsquarterhebrew",
+ 0x05b3,
+ "hatafqamatswidehebrew",
+ 0x05b3,
+ "hatafsegol",
+ 0x05b1,
+ "hatafsegol17",
+ 0x05b1,
+ "hatafsegol24",
+ 0x05b1,
+ "hatafsegol30",
+ 0x05b1,
+ "hatafsegolhebrew",
+ 0x05b1,
+ "hatafsegolnarrowhebrew",
+ 0x05b1,
+ "hatafsegolquarterhebrew",
+ 0x05b1,
+ "hatafsegolwidehebrew",
+ 0x05b1,
+ "hbar",
+ 0x0127,
+ "hbopomofo",
+ 0x310f,
+ "hbrevebelow",
+ 0x1e2b,
+ "hcedilla",
+ 0x1e29,
+ "hcircle",
+ 0x24d7,
+ "hcircumflex",
+ 0x0125,
+ "hdieresis",
+ 0x1e27,
+ "hdotaccent",
+ 0x1e23,
+ "hdotbelow",
+ 0x1e25,
+ "he",
+ 0x05d4,
+ "heart",
+ 0x2665,
+ "heartsuitblack",
+ 0x2665,
+ "heartsuitwhite",
+ 0x2661,
+ "hedagesh",
+ 0xfb34,
+ "hedageshhebrew",
+ 0xfb34,
+ "hehaltonearabic",
+ 0x06c1,
+ "heharabic",
+ 0x0647,
+ "hehebrew",
+ 0x05d4,
+ "hehfinalaltonearabic",
+ 0xfba7,
+ "hehfinalalttwoarabic",
+ 0xfeea,
+ "hehfinalarabic",
+ 0xfeea,
+ "hehhamzaabovefinalarabic",
+ 0xfba5,
+ "hehhamzaaboveisolatedarabic",
+ 0xfba4,
+ "hehinitialaltonearabic",
+ 0xfba8,
+ "hehinitialarabic",
+ 0xfeeb,
+ "hehiragana",
+ 0x3078,
+ "hehmedialaltonearabic",
+ 0xfba9,
+ "hehmedialarabic",
+ 0xfeec,
+ "heiseierasquare",
+ 0x337b,
+ "hekatakana",
+ 0x30d8,
+ "hekatakanahalfwidth",
+ 0xff8d,
+ "hekutaarusquare",
+ 0x3336,
+ "henghook",
+ 0x0267,
+ "herutusquare",
+ 0x3339,
+ "het",
+ 0x05d7,
+ "hethebrew",
+ 0x05d7,
+ "hhook",
+ 0x0266,
+ "hhooksuperior",
+ 0x02b1,
+ "hieuhacirclekorean",
+ 0x327b,
+ "hieuhaparenkorean",
+ 0x321b,
+ "hieuhcirclekorean",
+ 0x326d,
+ "hieuhkorean",
+ 0x314e,
+ "hieuhparenkorean",
+ 0x320d,
+ "hihiragana",
+ 0x3072,
+ "hikatakana",
+ 0x30d2,
+ "hikatakanahalfwidth",
+ 0xff8b,
+ "hiriq",
+ 0x05b4,
+ "hiriq14",
+ 0x05b4,
+ "hiriq21",
+ 0x05b4,
+ "hiriq2d",
+ 0x05b4,
+ "hiriqhebrew",
+ 0x05b4,
+ "hiriqnarrowhebrew",
+ 0x05b4,
+ "hiriqquarterhebrew",
+ 0x05b4,
+ "hiriqwidehebrew",
+ 0x05b4,
+ "hlinebelow",
+ 0x1e96,
+ "hmonospace",
+ 0xff48,
+ "hoarmenian",
+ 0x0570,
+ "hohipthai",
+ 0x0e2b,
+ "hohiragana",
+ 0x307b,
+ "hokatakana",
+ 0x30db,
+ "hokatakanahalfwidth",
+ 0xff8e,
+ "holam",
+ 0x05b9,
+ "holam19",
+ 0x05b9,
+ "holam26",
+ 0x05b9,
+ "holam32",
+ 0x05b9,
+ "holamhebrew",
+ 0x05b9,
+ "holamnarrowhebrew",
+ 0x05b9,
+ "holamquarterhebrew",
+ 0x05b9,
+ "holamwidehebrew",
+ 0x05b9,
+ "honokhukthai",
+ 0x0e2e,
+ "hookabovecomb",
+ 0x0309,
+ "hookcmb",
+ 0x0309,
+ "hookpalatalizedbelowcmb",
+ 0x0321,
+ "hookretroflexbelowcmb",
+ 0x0322,
+ "hoonsquare",
+ 0x3342,
+ "horicoptic",
+ 0x03e9,
+ "horizontalbar",
+ 0x2015,
+ "horncmb",
+ 0x031b,
+ "hotsprings",
+ 0x2668,
+ "house",
+ 0x2302,
+ "hparen",
+ 0x24a3,
+ "hsuperior",
+ 0x02b0,
+ "hturned",
+ 0x0265,
+ "huhiragana",
+ 0x3075,
+ "huiitosquare",
+ 0x3333,
+ "hukatakana",
+ 0x30d5,
+ "hukatakanahalfwidth",
+ 0xff8c,
+ "hungarumlaut",
+ 0x02dd,
+ "hungarumlautcmb",
+ 0x030b,
+ "hv",
+ 0x0195,
+ "hyphen",
+ 0x002d,
+ "hypheninferior",
+ 0xf6e5,
+ "hyphenmonospace",
+ 0xff0d,
+ "hyphensmall",
+ 0xfe63,
+ "hyphensuperior",
+ 0xf6e6,
+ "hyphentwo",
+ 0x2010,
+ "i",
+ 0x0069,
+ "iacute",
+ 0x00ed,
+ "iacyrillic",
+ 0x044f,
+ "ibengali",
+ 0x0987,
+ "ibopomofo",
+ 0x3127,
+ "ibreve",
+ 0x012d,
+ "icaron",
+ 0x01d0,
+ "icircle",
+ 0x24d8,
+ "icircumflex",
+ 0x00ee,
+ "icyrillic",
+ 0x0456,
+ "idblgrave",
+ 0x0209,
+ "ideographearthcircle",
+ 0x328f,
+ "ideographfirecircle",
+ 0x328b,
+ "ideographicallianceparen",
+ 0x323f,
+ "ideographiccallparen",
+ 0x323a,
+ "ideographiccentrecircle",
+ 0x32a5,
+ "ideographicclose",
+ 0x3006,
+ "ideographiccomma",
+ 0x3001,
+ "ideographiccommaleft",
+ 0xff64,
+ "ideographiccongratulationparen",
+ 0x3237,
+ "ideographiccorrectcircle",
+ 0x32a3,
+ "ideographicearthparen",
+ 0x322f,
+ "ideographicenterpriseparen",
+ 0x323d,
+ "ideographicexcellentcircle",
+ 0x329d,
+ "ideographicfestivalparen",
+ 0x3240,
+ "ideographicfinancialcircle",
+ 0x3296,
+ "ideographicfinancialparen",
+ 0x3236,
+ "ideographicfireparen",
+ 0x322b,
+ "ideographichaveparen",
+ 0x3232,
+ "ideographichighcircle",
+ 0x32a4,
+ "ideographiciterationmark",
+ 0x3005,
+ "ideographiclaborcircle",
+ 0x3298,
+ "ideographiclaborparen",
+ 0x3238,
+ "ideographicleftcircle",
+ 0x32a7,
+ "ideographiclowcircle",
+ 0x32a6,
+ "ideographicmedicinecircle",
+ 0x32a9,
+ "ideographicmetalparen",
+ 0x322e,
+ "ideographicmoonparen",
+ 0x322a,
+ "ideographicnameparen",
+ 0x3234,
+ "ideographicperiod",
+ 0x3002,
+ "ideographicprintcircle",
+ 0x329e,
+ "ideographicreachparen",
+ 0x3243,
+ "ideographicrepresentparen",
+ 0x3239,
+ "ideographicresourceparen",
+ 0x323e,
+ "ideographicrightcircle",
+ 0x32a8,
+ "ideographicsecretcircle",
+ 0x3299,
+ "ideographicselfparen",
+ 0x3242,
+ "ideographicsocietyparen",
+ 0x3233,
+ "ideographicspace",
+ 0x3000,
+ "ideographicspecialparen",
+ 0x3235,
+ "ideographicstockparen",
+ 0x3231,
+ "ideographicstudyparen",
+ 0x323b,
+ "ideographicsunparen",
+ 0x3230,
+ "ideographicsuperviseparen",
+ 0x323c,
+ "ideographicwaterparen",
+ 0x322c,
+ "ideographicwoodparen",
+ 0x322d,
+ "ideographiczero",
+ 0x3007,
+ "ideographmetalcircle",
+ 0x328e,
+ "ideographmooncircle",
+ 0x328a,
+ "ideographnamecircle",
+ 0x3294,
+ "ideographsuncircle",
+ 0x3290,
+ "ideographwatercircle",
+ 0x328c,
+ "ideographwoodcircle",
+ 0x328d,
+ "ideva",
+ 0x0907,
+ "idieresis",
+ 0x00ef,
+ "idieresisacute",
+ 0x1e2f,
+ "idieresiscyrillic",
+ 0x04e5,
+ "idotbelow",
+ 0x1ecb,
+ "iebrevecyrillic",
+ 0x04d7,
+ "iecyrillic",
+ 0x0435,
+ "ieungacirclekorean",
+ 0x3275,
+ "ieungaparenkorean",
+ 0x3215,
+ "ieungcirclekorean",
+ 0x3267,
+ "ieungkorean",
+ 0x3147,
+ "ieungparenkorean",
+ 0x3207,
+ "igrave",
+ 0x00ec,
+ "igujarati",
+ 0x0a87,
+ "igurmukhi",
+ 0x0a07,
+ "ihiragana",
+ 0x3044,
+ "ihookabove",
+ 0x1ec9,
+ "iibengali",
+ 0x0988,
+ "iicyrillic",
+ 0x0438,
+ "iideva",
+ 0x0908,
+ "iigujarati",
+ 0x0a88,
+ "iigurmukhi",
+ 0x0a08,
+ "iimatragurmukhi",
+ 0x0a40,
+ "iinvertedbreve",
+ 0x020b,
+ "iishortcyrillic",
+ 0x0439,
+ "iivowelsignbengali",
+ 0x09c0,
+ "iivowelsigndeva",
+ 0x0940,
+ "iivowelsigngujarati",
+ 0x0ac0,
+ "ij",
+ 0x0133,
+ "ikatakana",
+ 0x30a4,
+ "ikatakanahalfwidth",
+ 0xff72,
+ "ikorean",
+ 0x3163,
+ "ilde",
+ 0x02dc,
+ "iluyhebrew",
+ 0x05ac,
+ "imacron",
+ 0x012b,
+ "imacroncyrillic",
+ 0x04e3,
+ "imageorapproximatelyequal",
+ 0x2253,
+ "imatragurmukhi",
+ 0x0a3f,
+ "imonospace",
+ 0xff49,
+ "increment",
+ 0x2206,
+ "infinity",
+ 0x221e,
+ "iniarmenian",
+ 0x056b,
+ "integral",
+ 0x222b,
+ "integralbottom",
+ 0x2321,
+ "integralbt",
+ 0x2321,
+ "integralex",
+ 0xf8f5,
+ "integraltop",
+ 0x2320,
+ "integraltp",
+ 0x2320,
+ "intersection",
+ 0x2229,
+ "intisquare",
+ 0x3305,
+ "invbullet",
+ 0x25d8,
+ "invcircle",
+ 0x25d9,
+ "invsmileface",
+ 0x263b,
+ "iocyrillic",
+ 0x0451,
+ "iogonek",
+ 0x012f,
+ "iota",
+ 0x03b9,
+ "iotadieresis",
+ 0x03ca,
+ "iotadieresistonos",
+ 0x0390,
+ "iotalatin",
+ 0x0269,
+ "iotatonos",
+ 0x03af,
+ "iparen",
+ 0x24a4,
+ "irigurmukhi",
+ 0x0a72,
+ "ismallhiragana",
+ 0x3043,
+ "ismallkatakana",
+ 0x30a3,
+ "ismallkatakanahalfwidth",
+ 0xff68,
+ "issharbengali",
+ 0x09fa,
+ "istroke",
+ 0x0268,
+ "isuperior",
+ 0xf6ed,
+ "iterationhiragana",
+ 0x309d,
+ "iterationkatakana",
+ 0x30fd,
+ "itilde",
+ 0x0129,
+ "itildebelow",
+ 0x1e2d,
+ "iubopomofo",
+ 0x3129,
+ "iucyrillic",
+ 0x044e,
+ "ivowelsignbengali",
+ 0x09bf,
+ "ivowelsigndeva",
+ 0x093f,
+ "ivowelsigngujarati",
+ 0x0abf,
+ "izhitsacyrillic",
+ 0x0475,
+ "izhitsadblgravecyrillic",
+ 0x0477,
+ "j",
+ 0x006a,
+ "jaarmenian",
+ 0x0571,
+ "jabengali",
+ 0x099c,
+ "jadeva",
+ 0x091c,
+ "jagujarati",
+ 0x0a9c,
+ "jagurmukhi",
+ 0x0a1c,
+ "jbopomofo",
+ 0x3110,
+ "jcaron",
+ 0x01f0,
+ "jcircle",
+ 0x24d9,
+ "jcircumflex",
+ 0x0135,
+ "jcrossedtail",
+ 0x029d,
+ "jdotlessstroke",
+ 0x025f,
+ "jecyrillic",
+ 0x0458,
+ "jeemarabic",
+ 0x062c,
+ "jeemfinalarabic",
+ 0xfe9e,
+ "jeeminitialarabic",
+ 0xfe9f,
+ "jeemmedialarabic",
+ 0xfea0,
+ "jeharabic",
+ 0x0698,
+ "jehfinalarabic",
+ 0xfb8b,
+ "jhabengali",
+ 0x099d,
+ "jhadeva",
+ 0x091d,
+ "jhagujarati",
+ 0x0a9d,
+ "jhagurmukhi",
+ 0x0a1d,
+ "jheharmenian",
+ 0x057b,
+ "jis",
+ 0x3004,
+ "jmonospace",
+ 0xff4a,
+ "jparen",
+ 0x24a5,
+ "jsuperior",
+ 0x02b2,
+ "k",
+ 0x006b,
+ "kabashkircyrillic",
+ 0x04a1,
+ "kabengali",
+ 0x0995,
+ "kacute",
+ 0x1e31,
+ "kacyrillic",
+ 0x043a,
+ "kadescendercyrillic",
+ 0x049b,
+ "kadeva",
+ 0x0915,
+ "kaf",
+ 0x05db,
+ "kafarabic",
+ 0x0643,
+ "kafdagesh",
+ 0xfb3b,
+ "kafdageshhebrew",
+ 0xfb3b,
+ "kaffinalarabic",
+ 0xfeda,
+ "kafhebrew",
+ 0x05db,
+ "kafinitialarabic",
+ 0xfedb,
+ "kafmedialarabic",
+ 0xfedc,
+ "kafrafehebrew",
+ 0xfb4d,
+ "kagujarati",
+ 0x0a95,
+ "kagurmukhi",
+ 0x0a15,
+ "kahiragana",
+ 0x304b,
+ "kahookcyrillic",
+ 0x04c4,
+ "kakatakana",
+ 0x30ab,
+ "kakatakanahalfwidth",
+ 0xff76,
+ "kappa",
+ 0x03ba,
+ "kappasymbolgreek",
+ 0x03f0,
+ "kapyeounmieumkorean",
+ 0x3171,
+ "kapyeounphieuphkorean",
+ 0x3184,
+ "kapyeounpieupkorean",
+ 0x3178,
+ "kapyeounssangpieupkorean",
+ 0x3179,
+ "karoriisquare",
+ 0x330d,
+ "kashidaautoarabic",
+ 0x0640,
+ "kashidaautonosidebearingarabic",
+ 0x0640,
+ "kasmallkatakana",
+ 0x30f5,
+ "kasquare",
+ 0x3384,
+ "kasraarabic",
+ 0x0650,
+ "kasratanarabic",
+ 0x064d,
+ "kastrokecyrillic",
+ 0x049f,
+ "katahiraprolongmarkhalfwidth",
+ 0xff70,
+ "kaverticalstrokecyrillic",
+ 0x049d,
+ "kbopomofo",
+ 0x310e,
+ "kcalsquare",
+ 0x3389,
+ "kcaron",
+ 0x01e9,
+ "kcedilla",
+ 0x0137,
+ "kcircle",
+ 0x24da,
+ "kcommaaccent",
+ 0x0137,
+ "kdotbelow",
+ 0x1e33,
+ "keharmenian",
+ 0x0584,
+ "kehiragana",
+ 0x3051,
+ "kekatakana",
+ 0x30b1,
+ "kekatakanahalfwidth",
+ 0xff79,
+ "kenarmenian",
+ 0x056f,
+ "kesmallkatakana",
+ 0x30f6,
+ "kgreenlandic",
+ 0x0138,
+ "khabengali",
+ 0x0996,
+ "khacyrillic",
+ 0x0445,
+ "khadeva",
+ 0x0916,
+ "khagujarati",
+ 0x0a96,
+ "khagurmukhi",
+ 0x0a16,
+ "khaharabic",
+ 0x062e,
+ "khahfinalarabic",
+ 0xfea6,
+ "khahinitialarabic",
+ 0xfea7,
+ "khahmedialarabic",
+ 0xfea8,
+ "kheicoptic",
+ 0x03e7,
+ "khhadeva",
+ 0x0959,
+ "khhagurmukhi",
+ 0x0a59,
+ "khieukhacirclekorean",
+ 0x3278,
+ "khieukhaparenkorean",
+ 0x3218,
+ "khieukhcirclekorean",
+ 0x326a,
+ "khieukhkorean",
+ 0x314b,
+ "khieukhparenkorean",
+ 0x320a,
+ "khokhaithai",
+ 0x0e02,
+ "khokhonthai",
+ 0x0e05,
+ "khokhuatthai",
+ 0x0e03,
+ "khokhwaithai",
+ 0x0e04,
+ "khomutthai",
+ 0x0e5b,
+ "khook",
+ 0x0199,
+ "khorakhangthai",
+ 0x0e06,
+ "khzsquare",
+ 0x3391,
+ "kihiragana",
+ 0x304d,
+ "kikatakana",
+ 0x30ad,
+ "kikatakanahalfwidth",
+ 0xff77,
+ "kiroguramusquare",
+ 0x3315,
+ "kiromeetorusquare",
+ 0x3316,
+ "kirosquare",
+ 0x3314,
+ "kiyeokacirclekorean",
+ 0x326e,
+ "kiyeokaparenkorean",
+ 0x320e,
+ "kiyeokcirclekorean",
+ 0x3260,
+ "kiyeokkorean",
+ 0x3131,
+ "kiyeokparenkorean",
+ 0x3200,
+ "kiyeoksioskorean",
+ 0x3133,
+ "kjecyrillic",
+ 0x045c,
+ "klinebelow",
+ 0x1e35,
+ "klsquare",
+ 0x3398,
+ "kmcubedsquare",
+ 0x33a6,
+ "kmonospace",
+ 0xff4b,
+ "kmsquaredsquare",
+ 0x33a2,
+ "kohiragana",
+ 0x3053,
+ "kohmsquare",
+ 0x33c0,
+ "kokaithai",
+ 0x0e01,
+ "kokatakana",
+ 0x30b3,
+ "kokatakanahalfwidth",
+ 0xff7a,
+ "kooposquare",
+ 0x331e,
+ "koppacyrillic",
+ 0x0481,
+ "koreanstandardsymbol",
+ 0x327f,
+ "koroniscmb",
+ 0x0343,
+ "kparen",
+ 0x24a6,
+ "kpasquare",
+ 0x33aa,
+ "ksicyrillic",
+ 0x046f,
+ "ktsquare",
+ 0x33cf,
+ "kturned",
+ 0x029e,
+ "kuhiragana",
+ 0x304f,
+ "kukatakana",
+ 0x30af,
+ "kukatakanahalfwidth",
+ 0xff78,
+ "kvsquare",
+ 0x33b8,
+ "kwsquare",
+ 0x33be,
+ "l",
+ 0x006c,
+ "labengali",
+ 0x09b2,
+ "lacute",
+ 0x013a,
+ "ladeva",
+ 0x0932,
+ "lagujarati",
+ 0x0ab2,
+ "lagurmukhi",
+ 0x0a32,
+ "lakkhangyaothai",
+ 0x0e45,
+ "lamaleffinalarabic",
+ 0xfefc,
+ "lamalefhamzaabovefinalarabic",
+ 0xfef8,
+ "lamalefhamzaaboveisolatedarabic",
+ 0xfef7,
+ "lamalefhamzabelowfinalarabic",
+ 0xfefa,
+ "lamalefhamzabelowisolatedarabic",
+ 0xfef9,
+ "lamalefisolatedarabic",
+ 0xfefb,
+ "lamalefmaddaabovefinalarabic",
+ 0xfef6,
+ "lamalefmaddaaboveisolatedarabic",
+ 0xfef5,
+ "lamarabic",
+ 0x0644,
+ "lambda",
+ 0x03bb,
+ "lambdastroke",
+ 0x019b,
+ "lamed",
+ 0x05dc,
+ "lameddagesh",
+ 0xfb3c,
+ "lameddageshhebrew",
+ 0xfb3c,
+ "lamedhebrew",
+ 0x05dc,
+ "lamfinalarabic",
+ 0xfede,
+ "lamhahinitialarabic",
+ 0xfcca,
+ "laminitialarabic",
+ 0xfedf,
+ "lamjeeminitialarabic",
+ 0xfcc9,
+ "lamkhahinitialarabic",
+ 0xfccb,
+ "lamlamhehisolatedarabic",
+ 0xfdf2,
+ "lammedialarabic",
+ 0xfee0,
+ "lammeemhahinitialarabic",
+ 0xfd88,
+ "lammeeminitialarabic",
+ 0xfccc,
+ "largecircle",
+ 0x25ef,
+ "lbar",
+ 0x019a,
+ "lbelt",
+ 0x026c,
+ "lbopomofo",
+ 0x310c,
+ "lcaron",
+ 0x013e,
+ "lcedilla",
+ 0x013c,
+ "lcircle",
+ 0x24db,
+ "lcircumflexbelow",
+ 0x1e3d,
+ "lcommaaccent",
+ 0x013c,
+ "ldot",
+ 0x0140,
+ "ldotaccent",
+ 0x0140,
+ "ldotbelow",
+ 0x1e37,
+ "ldotbelowmacron",
+ 0x1e39,
+ "leftangleabovecmb",
+ 0x031a,
+ "lefttackbelowcmb",
+ 0x0318,
+ "less",
+ 0x003c,
+ "lessequal",
+ 0x2264,
+ "lessequalorgreater",
+ 0x22da,
+ "lessmonospace",
+ 0xff1c,
+ "lessorequivalent",
+ 0x2272,
+ "lessorgreater",
+ 0x2276,
+ "lessoverequal",
+ 0x2266,
+ "lesssmall",
+ 0xfe64,
+ "lezh",
+ 0x026e,
+ "lfblock",
+ 0x258c,
+ "lhookretroflex",
+ 0x026d,
+ "lira",
+ 0x20a4,
+ "liwnarmenian",
+ 0x056c,
+ "lj",
+ 0x01c9,
+ "ljecyrillic",
+ 0x0459,
+ "ll",
+ 0xf6c0,
+ "lladeva",
+ 0x0933,
+ "llagujarati",
+ 0x0ab3,
+ "llinebelow",
+ 0x1e3b,
+ "llladeva",
+ 0x0934,
+ "llvocalicbengali",
+ 0x09e1,
+ "llvocalicdeva",
+ 0x0961,
+ "llvocalicvowelsignbengali",
+ 0x09e3,
+ "llvocalicvowelsigndeva",
+ 0x0963,
+ "lmiddletilde",
+ 0x026b,
+ "lmonospace",
+ 0xff4c,
+ "lmsquare",
+ 0x33d0,
+ "lochulathai",
+ 0x0e2c,
+ "logicaland",
+ 0x2227,
+ "logicalnot",
+ 0x00ac,
+ "logicalnotreversed",
+ 0x2310,
+ "logicalor",
+ 0x2228,
+ "lolingthai",
+ 0x0e25,
+ "longs",
+ 0x017f,
+ "lowlinecenterline",
+ 0xfe4e,
+ "lowlinecmb",
+ 0x0332,
+ "lowlinedashed",
+ 0xfe4d,
+ "lozenge",
+ 0x25ca,
+ "lparen",
+ 0x24a7,
+ "lslash",
+ 0x0142,
+ "lsquare",
+ 0x2113,
+ "lsuperior",
+ 0xf6ee,
+ "ltshade",
+ 0x2591,
+ "luthai",
+ 0x0e26,
+ "lvocalicbengali",
+ 0x098c,
+ "lvocalicdeva",
+ 0x090c,
+ "lvocalicvowelsignbengali",
+ 0x09e2,
+ "lvocalicvowelsigndeva",
+ 0x0962,
+ "lxsquare",
+ 0x33d3,
+ "m",
+ 0x006d,
+ "mabengali",
+ 0x09ae,
+ "macron",
+ 0x00af,
+ "macronbelowcmb",
+ 0x0331,
+ "macroncmb",
+ 0x0304,
+ "macronlowmod",
+ 0x02cd,
+ "macronmonospace",
+ 0xffe3,
+ "macute",
+ 0x1e3f,
+ "madeva",
+ 0x092e,
+ "magujarati",
+ 0x0aae,
+ "magurmukhi",
+ 0x0a2e,
+ "mahapakhhebrew",
+ 0x05a4,
+ "mahapakhlefthebrew",
+ 0x05a4,
+ "mahiragana",
+ 0x307e,
+ "maichattawalowleftthai",
+ 0xf895,
+ "maichattawalowrightthai",
+ 0xf894,
+ "maichattawathai",
+ 0x0e4b,
+ "maichattawaupperleftthai",
+ 0xf893,
+ "maieklowleftthai",
+ 0xf88c,
+ "maieklowrightthai",
+ 0xf88b,
+ "maiekthai",
+ 0x0e48,
+ "maiekupperleftthai",
+ 0xf88a,
+ "maihanakatleftthai",
+ 0xf884,
+ "maihanakatthai",
+ 0x0e31,
+ "maitaikhuleftthai",
+ 0xf889,
+ "maitaikhuthai",
+ 0x0e47,
+ "maitholowleftthai",
+ 0xf88f,
+ "maitholowrightthai",
+ 0xf88e,
+ "maithothai",
+ 0x0e49,
+ "maithoupperleftthai",
+ 0xf88d,
+ "maitrilowleftthai",
+ 0xf892,
+ "maitrilowrightthai",
+ 0xf891,
+ "maitrithai",
+ 0x0e4a,
+ "maitriupperleftthai",
+ 0xf890,
+ "maiyamokthai",
+ 0x0e46,
+ "makatakana",
+ 0x30de,
+ "makatakanahalfwidth",
+ 0xff8f,
+ "male",
+ 0x2642,
+ "mansyonsquare",
+ 0x3347,
+ "maqafhebrew",
+ 0x05be,
+ "mars",
+ 0x2642,
+ "masoracirclehebrew",
+ 0x05af,
+ "masquare",
+ 0x3383,
+ "mbopomofo",
+ 0x3107,
+ "mbsquare",
+ 0x33d4,
+ "mcircle",
+ 0x24dc,
+ "mcubedsquare",
+ 0x33a5,
+ "mdotaccent",
+ 0x1e41,
+ "mdotbelow",
+ 0x1e43,
+ "meemarabic",
+ 0x0645,
+ "meemfinalarabic",
+ 0xfee2,
+ "meeminitialarabic",
+ 0xfee3,
+ "meemmedialarabic",
+ 0xfee4,
+ "meemmeeminitialarabic",
+ 0xfcd1,
+ "meemmeemisolatedarabic",
+ 0xfc48,
+ "meetorusquare",
+ 0x334d,
+ "mehiragana",
+ 0x3081,
+ "meizierasquare",
+ 0x337e,
+ "mekatakana",
+ 0x30e1,
+ "mekatakanahalfwidth",
+ 0xff92,
+ "mem",
+ 0x05de,
+ "memdagesh",
+ 0xfb3e,
+ "memdageshhebrew",
+ 0xfb3e,
+ "memhebrew",
+ 0x05de,
+ "menarmenian",
+ 0x0574,
+ "merkhahebrew",
+ 0x05a5,
+ "merkhakefulahebrew",
+ 0x05a6,
+ "merkhakefulalefthebrew",
+ 0x05a6,
+ "merkhalefthebrew",
+ 0x05a5,
+ "mhook",
+ 0x0271,
+ "mhzsquare",
+ 0x3392,
+ "middledotkatakanahalfwidth",
+ 0xff65,
+ "middot",
+ 0x00b7,
+ "mieumacirclekorean",
+ 0x3272,
+ "mieumaparenkorean",
+ 0x3212,
+ "mieumcirclekorean",
+ 0x3264,
+ "mieumkorean",
+ 0x3141,
+ "mieumpansioskorean",
+ 0x3170,
+ "mieumparenkorean",
+ 0x3204,
+ "mieumpieupkorean",
+ 0x316e,
+ "mieumsioskorean",
+ 0x316f,
+ "mihiragana",
+ 0x307f,
+ "mikatakana",
+ 0x30df,
+ "mikatakanahalfwidth",
+ 0xff90,
+ "minus",
+ 0x2212,
+ "minusbelowcmb",
+ 0x0320,
+ "minuscircle",
+ 0x2296,
+ "minusmod",
+ 0x02d7,
+ "minusplus",
+ 0x2213,
+ "minute",
+ 0x2032,
+ "miribaarusquare",
+ 0x334a,
+ "mirisquare",
+ 0x3349,
+ "mlonglegturned",
+ 0x0270,
+ "mlsquare",
+ 0x3396,
+ "mmcubedsquare",
+ 0x33a3,
+ "mmonospace",
+ 0xff4d,
+ "mmsquaredsquare",
+ 0x339f,
+ "mohiragana",
+ 0x3082,
+ "mohmsquare",
+ 0x33c1,
+ "mokatakana",
+ 0x30e2,
+ "mokatakanahalfwidth",
+ 0xff93,
+ "molsquare",
+ 0x33d6,
+ "momathai",
+ 0x0e21,
+ "moverssquare",
+ 0x33a7,
+ "moverssquaredsquare",
+ 0x33a8,
+ "mparen",
+ 0x24a8,
+ "mpasquare",
+ 0x33ab,
+ "mssquare",
+ 0x33b3,
+ "msuperior",
+ 0xf6ef,
+ "mturned",
+ 0x026f,
+ "mu",
+ 0x00b5,
+ "mu1",
+ 0x00b5,
+ "muasquare",
+ 0x3382,
+ "muchgreater",
+ 0x226b,
+ "muchless",
+ 0x226a,
+ "mufsquare",
+ 0x338c,
+ "mugreek",
+ 0x03bc,
+ "mugsquare",
+ 0x338d,
+ "muhiragana",
+ 0x3080,
+ "mukatakana",
+ 0x30e0,
+ "mukatakanahalfwidth",
+ 0xff91,
+ "mulsquare",
+ 0x3395,
+ "multiply",
+ 0x00d7,
+ "mumsquare",
+ 0x339b,
+ "munahhebrew",
+ 0x05a3,
+ "munahlefthebrew",
+ 0x05a3,
+ "musicalnote",
+ 0x266a,
+ "musicalnotedbl",
+ 0x266b,
+ "musicflatsign",
+ 0x266d,
+ "musicsharpsign",
+ 0x266f,
+ "mussquare",
+ 0x33b2,
+ "muvsquare",
+ 0x33b6,
+ "muwsquare",
+ 0x33bc,
+ "mvmegasquare",
+ 0x33b9,
+ "mvsquare",
+ 0x33b7,
+ "mwmegasquare",
+ 0x33bf,
+ "mwsquare",
+ 0x33bd,
+ "n",
+ 0x006e,
+ "nabengali",
+ 0x09a8,
+ "nabla",
+ 0x2207,
+ "nacute",
+ 0x0144,
+ "nadeva",
+ 0x0928,
+ "nagujarati",
+ 0x0aa8,
+ "nagurmukhi",
+ 0x0a28,
+ "nahiragana",
+ 0x306a,
+ "nakatakana",
+ 0x30ca,
+ "nakatakanahalfwidth",
+ 0xff85,
+ "napostrophe",
+ 0x0149,
+ "nasquare",
+ 0x3381,
+ "nbopomofo",
+ 0x310b,
+ "nbspace",
+ 0x00a0,
+ "ncaron",
+ 0x0148,
+ "ncedilla",
+ 0x0146,
+ "ncircle",
+ 0x24dd,
+ "ncircumflexbelow",
+ 0x1e4b,
+ "ncommaaccent",
+ 0x0146,
+ "ndotaccent",
+ 0x1e45,
+ "ndotbelow",
+ 0x1e47,
+ "nehiragana",
+ 0x306d,
+ "nekatakana",
+ 0x30cd,
+ "nekatakanahalfwidth",
+ 0xff88,
+ "newsheqelsign",
+ 0x20aa,
+ "nfsquare",
+ 0x338b,
+ "ngabengali",
+ 0x0999,
+ "ngadeva",
+ 0x0919,
+ "ngagujarati",
+ 0x0a99,
+ "ngagurmukhi",
+ 0x0a19,
+ "ngonguthai",
+ 0x0e07,
+ "nhiragana",
+ 0x3093,
+ "nhookleft",
+ 0x0272,
+ "nhookretroflex",
+ 0x0273,
+ "nieunacirclekorean",
+ 0x326f,
+ "nieunaparenkorean",
+ 0x320f,
+ "nieuncieuckorean",
+ 0x3135,
+ "nieuncirclekorean",
+ 0x3261,
+ "nieunhieuhkorean",
+ 0x3136,
+ "nieunkorean",
+ 0x3134,
+ "nieunpansioskorean",
+ 0x3168,
+ "nieunparenkorean",
+ 0x3201,
+ "nieunsioskorean",
+ 0x3167,
+ "nieuntikeutkorean",
+ 0x3166,
+ "nihiragana",
+ 0x306b,
+ "nikatakana",
+ 0x30cb,
+ "nikatakanahalfwidth",
+ 0xff86,
+ "nikhahitleftthai",
+ 0xf899,
+ "nikhahitthai",
+ 0x0e4d,
+ "nine",
+ 0x0039,
+ "ninearabic",
+ 0x0669,
+ "ninebengali",
+ 0x09ef,
+ "ninecircle",
+ 0x2468,
+ "ninecircleinversesansserif",
+ 0x2792,
+ "ninedeva",
+ 0x096f,
+ "ninegujarati",
+ 0x0aef,
+ "ninegurmukhi",
+ 0x0a6f,
+ "ninehackarabic",
+ 0x0669,
+ "ninehangzhou",
+ 0x3029,
+ "nineideographicparen",
+ 0x3228,
+ "nineinferior",
+ 0x2089,
+ "ninemonospace",
+ 0xff19,
+ "nineoldstyle",
+ 0xf739,
+ "nineparen",
+ 0x247c,
+ "nineperiod",
+ 0x2490,
+ "ninepersian",
+ 0x06f9,
+ "nineroman",
+ 0x2178,
+ "ninesuperior",
+ 0x2079,
+ "nineteencircle",
+ 0x2472,
+ "nineteenparen",
+ 0x2486,
+ "nineteenperiod",
+ 0x249a,
+ "ninethai",
+ 0x0e59,
+ "nj",
+ 0x01cc,
+ "njecyrillic",
+ 0x045a,
+ "nkatakana",
+ 0x30f3,
+ "nkatakanahalfwidth",
+ 0xff9d,
+ "nlegrightlong",
+ 0x019e,
+ "nlinebelow",
+ 0x1e49,
+ "nmonospace",
+ 0xff4e,
+ "nmsquare",
+ 0x339a,
+ "nnabengali",
+ 0x09a3,
+ "nnadeva",
+ 0x0923,
+ "nnagujarati",
+ 0x0aa3,
+ "nnagurmukhi",
+ 0x0a23,
+ "nnnadeva",
+ 0x0929,
+ "nohiragana",
+ 0x306e,
+ "nokatakana",
+ 0x30ce,
+ "nokatakanahalfwidth",
+ 0xff89,
+ "nonbreakingspace",
+ 0x00a0,
+ "nonenthai",
+ 0x0e13,
+ "nonuthai",
+ 0x0e19,
+ "noonarabic",
+ 0x0646,
+ "noonfinalarabic",
+ 0xfee6,
+ "noonghunnaarabic",
+ 0x06ba,
+ "noonghunnafinalarabic",
+ 0xfb9f,
+ "nooninitialarabic",
+ 0xfee7,
+ "noonjeeminitialarabic",
+ 0xfcd2,
+ "noonjeemisolatedarabic",
+ 0xfc4b,
+ "noonmedialarabic",
+ 0xfee8,
+ "noonmeeminitialarabic",
+ 0xfcd5,
+ "noonmeemisolatedarabic",
+ 0xfc4e,
+ "noonnoonfinalarabic",
+ 0xfc8d,
+ "notcontains",
+ 0x220c,
+ "notelement",
+ 0x2209,
+ "notelementof",
+ 0x2209,
+ "notequal",
+ 0x2260,
+ "notgreater",
+ 0x226f,
+ "notgreaternorequal",
+ 0x2271,
+ "notgreaternorless",
+ 0x2279,
+ "notidentical",
+ 0x2262,
+ "notless",
+ 0x226e,
+ "notlessnorequal",
+ 0x2270,
+ "notparallel",
+ 0x2226,
+ "notprecedes",
+ 0x2280,
+ "notsubset",
+ 0x2284,
+ "notsucceeds",
+ 0x2281,
+ "notsuperset",
+ 0x2285,
+ "nowarmenian",
+ 0x0576,
+ "nparen",
+ 0x24a9,
+ "nssquare",
+ 0x33b1,
+ "nsuperior",
+ 0x207f,
+ "ntilde",
+ 0x00f1,
+ "nu",
+ 0x03bd,
+ "nuhiragana",
+ 0x306c,
+ "nukatakana",
+ 0x30cc,
+ "nukatakanahalfwidth",
+ 0xff87,
+ "nuktabengali",
+ 0x09bc,
+ "nuktadeva",
+ 0x093c,
+ "nuktagujarati",
+ 0x0abc,
+ "nuktagurmukhi",
+ 0x0a3c,
+ "numbersign",
+ 0x0023,
+ "numbersignmonospace",
+ 0xff03,
+ "numbersignsmall",
+ 0xfe5f,
+ "numeralsigngreek",
+ 0x0374,
+ "numeralsignlowergreek",
+ 0x0375,
+ "numero",
+ 0x2116,
+ "nun",
+ 0x05e0,
+ "nundagesh",
+ 0xfb40,
+ "nundageshhebrew",
+ 0xfb40,
+ "nunhebrew",
+ 0x05e0,
+ "nvsquare",
+ 0x33b5,
+ "nwsquare",
+ 0x33bb,
+ "nyabengali",
+ 0x099e,
+ "nyadeva",
+ 0x091e,
+ "nyagujarati",
+ 0x0a9e,
+ "nyagurmukhi",
+ 0x0a1e,
+ "o",
+ 0x006f,
+ "oacute",
+ 0x00f3,
+ "oangthai",
+ 0x0e2d,
+ "obarred",
+ 0x0275,
+ "obarredcyrillic",
+ 0x04e9,
+ "obarreddieresiscyrillic",
+ 0x04eb,
+ "obengali",
+ 0x0993,
+ "obopomofo",
+ 0x311b,
+ "obreve",
+ 0x014f,
+ "ocandradeva",
+ 0x0911,
+ "ocandragujarati",
+ 0x0a91,
+ "ocandravowelsigndeva",
+ 0x0949,
+ "ocandravowelsigngujarati",
+ 0x0ac9,
+ "ocaron",
+ 0x01d2,
+ "ocircle",
+ 0x24de,
+ "ocircumflex",
+ 0x00f4,
+ "ocircumflexacute",
+ 0x1ed1,
+ "ocircumflexdotbelow",
+ 0x1ed9,
+ "ocircumflexgrave",
+ 0x1ed3,
+ "ocircumflexhookabove",
+ 0x1ed5,
+ "ocircumflextilde",
+ 0x1ed7,
+ "ocyrillic",
+ 0x043e,
+ "odblacute",
+ 0x0151,
+ "odblgrave",
+ 0x020d,
+ "odeva",
+ 0x0913,
+ "odieresis",
+ 0x00f6,
+ "odieresiscyrillic",
+ 0x04e7,
+ "odotbelow",
+ 0x1ecd,
+ "oe",
+ 0x0153,
+ "oekorean",
+ 0x315a,
+ "ogonek",
+ 0x02db,
+ "ogonekcmb",
+ 0x0328,
+ "ograve",
+ 0x00f2,
+ "ogujarati",
+ 0x0a93,
+ "oharmenian",
+ 0x0585,
+ "ohiragana",
+ 0x304a,
+ "ohookabove",
+ 0x1ecf,
+ "ohorn",
+ 0x01a1,
+ "ohornacute",
+ 0x1edb,
+ "ohorndotbelow",
+ 0x1ee3,
+ "ohorngrave",
+ 0x1edd,
+ "ohornhookabove",
+ 0x1edf,
+ "ohorntilde",
+ 0x1ee1,
+ "ohungarumlaut",
+ 0x0151,
+ "oi",
+ 0x01a3,
+ "oinvertedbreve",
+ 0x020f,
+ "okatakana",
+ 0x30aa,
+ "okatakanahalfwidth",
+ 0xff75,
+ "okorean",
+ 0x3157,
+ "olehebrew",
+ 0x05ab,
+ "omacron",
+ 0x014d,
+ "omacronacute",
+ 0x1e53,
+ "omacrongrave",
+ 0x1e51,
+ "omdeva",
+ 0x0950,
+ "omega",
+ 0x03c9,
+ "omega1",
+ 0x03d6,
+ "omegacyrillic",
+ 0x0461,
+ "omegalatinclosed",
+ 0x0277,
+ "omegaroundcyrillic",
+ 0x047b,
+ "omegatitlocyrillic",
+ 0x047d,
+ "omegatonos",
+ 0x03ce,
+ "omgujarati",
+ 0x0ad0,
+ "omicron",
+ 0x03bf,
+ "omicrontonos",
+ 0x03cc,
+ "omonospace",
+ 0xff4f,
+ "one",
+ 0x0031,
+ "onearabic",
+ 0x0661,
+ "onebengali",
+ 0x09e7,
+ "onecircle",
+ 0x2460,
+ "onecircleinversesansserif",
+ 0x278a,
+ "onedeva",
+ 0x0967,
+ "onedotenleader",
+ 0x2024,
+ "oneeighth",
+ 0x215b,
+ "onefitted",
+ 0xf6dc,
+ "onegujarati",
+ 0x0ae7,
+ "onegurmukhi",
+ 0x0a67,
+ "onehackarabic",
+ 0x0661,
+ "onehalf",
+ 0x00bd,
+ "onehangzhou",
+ 0x3021,
+ "oneideographicparen",
+ 0x3220,
+ "oneinferior",
+ 0x2081,
+ "onemonospace",
+ 0xff11,
+ "onenumeratorbengali",
+ 0x09f4,
+ "oneoldstyle",
+ 0xf731,
+ "oneparen",
+ 0x2474,
+ "oneperiod",
+ 0x2488,
+ "onepersian",
+ 0x06f1,
+ "onequarter",
+ 0x00bc,
+ "oneroman",
+ 0x2170,
+ "onesuperior",
+ 0x00b9,
+ "onethai",
+ 0x0e51,
+ "onethird",
+ 0x2153,
+ "oogonek",
+ 0x01eb,
+ "oogonekmacron",
+ 0x01ed,
+ "oogurmukhi",
+ 0x0a13,
+ "oomatragurmukhi",
+ 0x0a4b,
+ "oopen",
+ 0x0254,
+ "oparen",
+ 0x24aa,
+ "openbullet",
+ 0x25e6,
+ "option",
+ 0x2325,
+ "ordfeminine",
+ 0x00aa,
+ "ordmasculine",
+ 0x00ba,
+ "orthogonal",
+ 0x221f,
+ "oshortdeva",
+ 0x0912,
+ "oshortvowelsigndeva",
+ 0x094a,
+ "oslash",
+ 0x00f8,
+ "oslashacute",
+ 0x01ff,
+ "osmallhiragana",
+ 0x3049,
+ "osmallkatakana",
+ 0x30a9,
+ "osmallkatakanahalfwidth",
+ 0xff6b,
+ "ostrokeacute",
+ 0x01ff,
+ "osuperior",
+ 0xf6f0,
+ "otcyrillic",
+ 0x047f,
+ "otilde",
+ 0x00f5,
+ "otildeacute",
+ 0x1e4d,
+ "otildedieresis",
+ 0x1e4f,
+ "oubopomofo",
+ 0x3121,
+ "overline",
+ 0x203e,
+ "overlinecenterline",
+ 0xfe4a,
+ "overlinecmb",
+ 0x0305,
+ "overlinedashed",
+ 0xfe49,
+ "overlinedblwavy",
+ 0xfe4c,
+ "overlinewavy",
+ 0xfe4b,
+ "overscore",
+ 0x00af,
+ "ovowelsignbengali",
+ 0x09cb,
+ "ovowelsigndeva",
+ 0x094b,
+ "ovowelsigngujarati",
+ 0x0acb,
+ "p",
+ 0x0070,
+ "paampssquare",
+ 0x3380,
+ "paasentosquare",
+ 0x332b,
+ "pabengali",
+ 0x09aa,
+ "pacute",
+ 0x1e55,
+ "padeva",
+ 0x092a,
+ "pagedown",
+ 0x21df,
+ "pageup",
+ 0x21de,
+ "pagujarati",
+ 0x0aaa,
+ "pagurmukhi",
+ 0x0a2a,
+ "pahiragana",
+ 0x3071,
+ "paiyannoithai",
+ 0x0e2f,
+ "pakatakana",
+ 0x30d1,
+ "palatalizationcyrilliccmb",
+ 0x0484,
+ "palochkacyrillic",
+ 0x04c0,
+ "pansioskorean",
+ 0x317f,
+ "paragraph",
+ 0x00b6,
+ "parallel",
+ 0x2225,
+ "parenleft",
+ 0x0028,
+ "parenleftaltonearabic",
+ 0xfd3e,
+ "parenleftbt",
+ 0xf8ed,
+ "parenleftex",
+ 0xf8ec,
+ "parenleftinferior",
+ 0x208d,
+ "parenleftmonospace",
+ 0xff08,
+ "parenleftsmall",
+ 0xfe59,
+ "parenleftsuperior",
+ 0x207d,
+ "parenlefttp",
+ 0xf8eb,
+ "parenleftvertical",
+ 0xfe35,
+ "parenright",
+ 0x0029,
+ "parenrightaltonearabic",
+ 0xfd3f,
+ "parenrightbt",
+ 0xf8f8,
+ "parenrightex",
+ 0xf8f7,
+ "parenrightinferior",
+ 0x208e,
+ "parenrightmonospace",
+ 0xff09,
+ "parenrightsmall",
+ 0xfe5a,
+ "parenrightsuperior",
+ 0x207e,
+ "parenrighttp",
+ 0xf8f6,
+ "parenrightvertical",
+ 0xfe36,
+ "partialdiff",
+ 0x2202,
+ "paseqhebrew",
+ 0x05c0,
+ "pashtahebrew",
+ 0x0599,
+ "pasquare",
+ 0x33a9,
+ "patah",
+ 0x05b7,
+ "patah11",
+ 0x05b7,
+ "patah1d",
+ 0x05b7,
+ "patah2a",
+ 0x05b7,
+ "patahhebrew",
+ 0x05b7,
+ "patahnarrowhebrew",
+ 0x05b7,
+ "patahquarterhebrew",
+ 0x05b7,
+ "patahwidehebrew",
+ 0x05b7,
+ "pazerhebrew",
+ 0x05a1,
+ "pbopomofo",
+ 0x3106,
+ "pcircle",
+ 0x24df,
+ "pdotaccent",
+ 0x1e57,
+ "pe",
+ 0x05e4,
+ "pecyrillic",
+ 0x043f,
+ "pedagesh",
+ 0xfb44,
+ "pedageshhebrew",
+ 0xfb44,
+ "peezisquare",
+ 0x333b,
+ "pefinaldageshhebrew",
+ 0xfb43,
+ "peharabic",
+ 0x067e,
+ "peharmenian",
+ 0x057a,
+ "pehebrew",
+ 0x05e4,
+ "pehfinalarabic",
+ 0xfb57,
+ "pehinitialarabic",
+ 0xfb58,
+ "pehiragana",
+ 0x307a,
+ "pehmedialarabic",
+ 0xfb59,
+ "pekatakana",
+ 0x30da,
+ "pemiddlehookcyrillic",
+ 0x04a7,
+ "perafehebrew",
+ 0xfb4e,
+ "percent",
+ 0x0025,
+ "percentarabic",
+ 0x066a,
+ "percentmonospace",
+ 0xff05,
+ "percentsmall",
+ 0xfe6a,
+ "period",
+ 0x002e,
+ "periodarmenian",
+ 0x0589,
+ "periodcentered",
+ 0x00b7,
+ "periodhalfwidth",
+ 0xff61,
+ "periodinferior",
+ 0xf6e7,
+ "periodmonospace",
+ 0xff0e,
+ "periodsmall",
+ 0xfe52,
+ "periodsuperior",
+ 0xf6e8,
+ "perispomenigreekcmb",
+ 0x0342,
+ "perpendicular",
+ 0x22a5,
+ "perthousand",
+ 0x2030,
+ "peseta",
+ 0x20a7,
+ "pfsquare",
+ 0x338a,
+ "phabengali",
+ 0x09ab,
+ "phadeva",
+ 0x092b,
+ "phagujarati",
+ 0x0aab,
+ "phagurmukhi",
+ 0x0a2b,
+ "phi",
+ 0x03c6,
+ "phi1",
+ 0x03d5,
+ "phieuphacirclekorean",
+ 0x327a,
+ "phieuphaparenkorean",
+ 0x321a,
+ "phieuphcirclekorean",
+ 0x326c,
+ "phieuphkorean",
+ 0x314d,
+ "phieuphparenkorean",
+ 0x320c,
+ "philatin",
+ 0x0278,
+ "phinthuthai",
+ 0x0e3a,
+ "phisymbolgreek",
+ 0x03d5,
+ "phook",
+ 0x01a5,
+ "phophanthai",
+ 0x0e1e,
+ "phophungthai",
+ 0x0e1c,
+ "phosamphaothai",
+ 0x0e20,
+ "pi",
+ 0x03c0,
+ "pieupacirclekorean",
+ 0x3273,
+ "pieupaparenkorean",
+ 0x3213,
+ "pieupcieuckorean",
+ 0x3176,
+ "pieupcirclekorean",
+ 0x3265,
+ "pieupkiyeokkorean",
+ 0x3172,
+ "pieupkorean",
+ 0x3142,
+ "pieupparenkorean",
+ 0x3205,
+ "pieupsioskiyeokkorean",
+ 0x3174,
+ "pieupsioskorean",
+ 0x3144,
+ "pieupsiostikeutkorean",
+ 0x3175,
+ "pieupthieuthkorean",
+ 0x3177,
+ "pieuptikeutkorean",
+ 0x3173,
+ "pihiragana",
+ 0x3074,
+ "pikatakana",
+ 0x30d4,
+ "pisymbolgreek",
+ 0x03d6,
+ "piwrarmenian",
+ 0x0583,
+ "plus",
+ 0x002b,
+ "plusbelowcmb",
+ 0x031f,
+ "pluscircle",
+ 0x2295,
+ "plusminus",
+ 0x00b1,
+ "plusmod",
+ 0x02d6,
+ "plusmonospace",
+ 0xff0b,
+ "plussmall",
+ 0xfe62,
+ "plussuperior",
+ 0x207a,
+ "pmonospace",
+ 0xff50,
+ "pmsquare",
+ 0x33d8,
+ "pohiragana",
+ 0x307d,
+ "pointingindexdownwhite",
+ 0x261f,
+ "pointingindexleftwhite",
+ 0x261c,
+ "pointingindexrightwhite",
+ 0x261e,
+ "pointingindexupwhite",
+ 0x261d,
+ "pokatakana",
+ 0x30dd,
+ "poplathai",
+ 0x0e1b,
+ "postalmark",
+ 0x3012,
+ "postalmarkface",
+ 0x3020,
+ "pparen",
+ 0x24ab,
+ "precedes",
+ 0x227a,
+ "prescription",
+ 0x211e,
+ "primemod",
+ 0x02b9,
+ "primereversed",
+ 0x2035,
+ "product",
+ 0x220f,
+ "projective",
+ 0x2305,
+ "prolongedkana",
+ 0x30fc,
+ "propellor",
+ 0x2318,
+ "propersubset",
+ 0x2282,
+ "propersuperset",
+ 0x2283,
+ "proportion",
+ 0x2237,
+ "proportional",
+ 0x221d,
+ "psi",
+ 0x03c8,
+ "psicyrillic",
+ 0x0471,
+ "psilipneumatacyrilliccmb",
+ 0x0486,
+ "pssquare",
+ 0x33b0,
+ "puhiragana",
+ 0x3077,
+ "pukatakana",
+ 0x30d7,
+ "pvsquare",
+ 0x33b4,
+ "pwsquare",
+ 0x33ba,
+ "q",
+ 0x0071,
+ "qadeva",
+ 0x0958,
+ "qadmahebrew",
+ 0x05a8,
+ "qafarabic",
+ 0x0642,
+ "qaffinalarabic",
+ 0xfed6,
+ "qafinitialarabic",
+ 0xfed7,
+ "qafmedialarabic",
+ 0xfed8,
+ "qamats",
+ 0x05b8,
+ "qamats10",
+ 0x05b8,
+ "qamats1a",
+ 0x05b8,
+ "qamats1c",
+ 0x05b8,
+ "qamats27",
+ 0x05b8,
+ "qamats29",
+ 0x05b8,
+ "qamats33",
+ 0x05b8,
+ "qamatsde",
+ 0x05b8,
+ "qamatshebrew",
+ 0x05b8,
+ "qamatsnarrowhebrew",
+ 0x05b8,
+ "qamatsqatanhebrew",
+ 0x05b8,
+ "qamatsqatannarrowhebrew",
+ 0x05b8,
+ "qamatsqatanquarterhebrew",
+ 0x05b8,
+ "qamatsqatanwidehebrew",
+ 0x05b8,
+ "qamatsquarterhebrew",
+ 0x05b8,
+ "qamatswidehebrew",
+ 0x05b8,
+ "qarneyparahebrew",
+ 0x059f,
+ "qbopomofo",
+ 0x3111,
+ "qcircle",
+ 0x24e0,
+ "qhook",
+ 0x02a0,
+ "qmonospace",
+ 0xff51,
+ "qof",
+ 0x05e7,
+ "qofdagesh",
+ 0xfb47,
+ "qofdageshhebrew",
+ 0xfb47,
+ "qofhebrew",
+ 0x05e7,
+ "qparen",
+ 0x24ac,
+ "quarternote",
+ 0x2669,
+ "qubuts",
+ 0x05bb,
+ "qubuts18",
+ 0x05bb,
+ "qubuts25",
+ 0x05bb,
+ "qubuts31",
+ 0x05bb,
+ "qubutshebrew",
+ 0x05bb,
+ "qubutsnarrowhebrew",
+ 0x05bb,
+ "qubutsquarterhebrew",
+ 0x05bb,
+ "qubutswidehebrew",
+ 0x05bb,
+ "question",
+ 0x003f,
+ "questionarabic",
+ 0x061f,
+ "questionarmenian",
+ 0x055e,
+ "questiondown",
+ 0x00bf,
+ "questiondownsmall",
+ 0xf7bf,
+ "questiongreek",
+ 0x037e,
+ "questionmonospace",
+ 0xff1f,
+ "questionsmall",
+ 0xf73f,
+ "quotedbl",
+ 0x0022,
+ "quotedblbase",
+ 0x201e,
+ "quotedblleft",
+ 0x201c,
+ "quotedblmonospace",
+ 0xff02,
+ "quotedblprime",
+ 0x301e,
+ "quotedblprimereversed",
+ 0x301d,
+ "quotedblright",
+ 0x201d,
+ "quoteleft",
+ 0x2018,
+ "quoteleftreversed",
+ 0x201b,
+ "quotereversed",
+ 0x201b,
+ "quoteright",
+ 0x2019,
+ "quoterightn",
+ 0x0149,
+ "quotesinglbase",
+ 0x201a,
+ "quotesingle",
+ 0x0027,
+ "quotesinglemonospace",
+ 0xff07,
+ "r",
+ 0x0072,
+ "raarmenian",
+ 0x057c,
+ "rabengali",
+ 0x09b0,
+ "racute",
+ 0x0155,
+ "radeva",
+ 0x0930,
+ "radical",
+ 0x221a,
+ "radicalex",
+ 0xf8e5,
+ "radoverssquare",
+ 0x33ae,
+ "radoverssquaredsquare",
+ 0x33af,
+ "radsquare",
+ 0x33ad,
+ "rafe",
+ 0x05bf,
+ "rafehebrew",
+ 0x05bf,
+ "ragujarati",
+ 0x0ab0,
+ "ragurmukhi",
+ 0x0a30,
+ "rahiragana",
+ 0x3089,
+ "rakatakana",
+ 0x30e9,
+ "rakatakanahalfwidth",
+ 0xff97,
+ "ralowerdiagonalbengali",
+ 0x09f1,
+ "ramiddlediagonalbengali",
+ 0x09f0,
+ "ramshorn",
+ 0x0264,
+ "ratio",
+ 0x2236,
+ "rbopomofo",
+ 0x3116,
+ "rcaron",
+ 0x0159,
+ "rcedilla",
+ 0x0157,
+ "rcircle",
+ 0x24e1,
+ "rcommaaccent",
+ 0x0157,
+ "rdblgrave",
+ 0x0211,
+ "rdotaccent",
+ 0x1e59,
+ "rdotbelow",
+ 0x1e5b,
+ "rdotbelowmacron",
+ 0x1e5d,
+ "referencemark",
+ 0x203b,
+ "reflexsubset",
+ 0x2286,
+ "reflexsuperset",
+ 0x2287,
+ "registered",
+ 0x00ae,
+ "registersans",
+ 0xf8e8,
+ "registerserif",
+ 0xf6da,
+ "reharabic",
+ 0x0631,
+ "reharmenian",
+ 0x0580,
+ "rehfinalarabic",
+ 0xfeae,
+ "rehiragana",
+ 0x308c,
+ "rekatakana",
+ 0x30ec,
+ "rekatakanahalfwidth",
+ 0xff9a,
+ "resh",
+ 0x05e8,
+ "reshdageshhebrew",
+ 0xfb48,
+ "reshhebrew",
+ 0x05e8,
+ "reversedtilde",
+ 0x223d,
+ "reviahebrew",
+ 0x0597,
+ "reviamugrashhebrew",
+ 0x0597,
+ "revlogicalnot",
+ 0x2310,
+ "rfishhook",
+ 0x027e,
+ "rfishhookreversed",
+ 0x027f,
+ "rhabengali",
+ 0x09dd,
+ "rhadeva",
+ 0x095d,
+ "rho",
+ 0x03c1,
+ "rhook",
+ 0x027d,
+ "rhookturned",
+ 0x027b,
+ "rhookturnedsuperior",
+ 0x02b5,
+ "rhosymbolgreek",
+ 0x03f1,
+ "rhotichookmod",
+ 0x02de,
+ "rieulacirclekorean",
+ 0x3271,
+ "rieulaparenkorean",
+ 0x3211,
+ "rieulcirclekorean",
+ 0x3263,
+ "rieulhieuhkorean",
+ 0x3140,
+ "rieulkiyeokkorean",
+ 0x313a,
+ "rieulkiyeoksioskorean",
+ 0x3169,
+ "rieulkorean",
+ 0x3139,
+ "rieulmieumkorean",
+ 0x313b,
+ "rieulpansioskorean",
+ 0x316c,
+ "rieulparenkorean",
+ 0x3203,
+ "rieulphieuphkorean",
+ 0x313f,
+ "rieulpieupkorean",
+ 0x313c,
+ "rieulpieupsioskorean",
+ 0x316b,
+ "rieulsioskorean",
+ 0x313d,
+ "rieulthieuthkorean",
+ 0x313e,
+ "rieultikeutkorean",
+ 0x316a,
+ "rieulyeorinhieuhkorean",
+ 0x316d,
+ "rightangle",
+ 0x221f,
+ "righttackbelowcmb",
+ 0x0319,
+ "righttriangle",
+ 0x22bf,
+ "rihiragana",
+ 0x308a,
+ "rikatakana",
+ 0x30ea,
+ "rikatakanahalfwidth",
+ 0xff98,
+ "ring",
+ 0x02da,
+ "ringbelowcmb",
+ 0x0325,
+ "ringcmb",
+ 0x030a,
+ "ringhalfleft",
+ 0x02bf,
+ "ringhalfleftarmenian",
+ 0x0559,
+ "ringhalfleftbelowcmb",
+ 0x031c,
+ "ringhalfleftcentered",
+ 0x02d3,
+ "ringhalfright",
+ 0x02be,
+ "ringhalfrightbelowcmb",
+ 0x0339,
+ "ringhalfrightcentered",
+ 0x02d2,
+ "rinvertedbreve",
+ 0x0213,
+ "rittorusquare",
+ 0x3351,
+ "rlinebelow",
+ 0x1e5f,
+ "rlongleg",
+ 0x027c,
+ "rlonglegturned",
+ 0x027a,
+ "rmonospace",
+ 0xff52,
+ "rohiragana",
+ 0x308d,
+ "rokatakana",
+ 0x30ed,
+ "rokatakanahalfwidth",
+ 0xff9b,
+ "roruathai",
+ 0x0e23,
+ "rparen",
+ 0x24ad,
+ "rrabengali",
+ 0x09dc,
+ "rradeva",
+ 0x0931,
+ "rragurmukhi",
+ 0x0a5c,
+ "rreharabic",
+ 0x0691,
+ "rrehfinalarabic",
+ 0xfb8d,
+ "rrvocalicbengali",
+ 0x09e0,
+ "rrvocalicdeva",
+ 0x0960,
+ "rrvocalicgujarati",
+ 0x0ae0,
+ "rrvocalicvowelsignbengali",
+ 0x09c4,
+ "rrvocalicvowelsigndeva",
+ 0x0944,
+ "rrvocalicvowelsigngujarati",
+ 0x0ac4,
+ "rsuperior",
+ 0xf6f1,
+ "rtblock",
+ 0x2590,
+ "rturned",
+ 0x0279,
+ "rturnedsuperior",
+ 0x02b4,
+ "ruhiragana",
+ 0x308b,
+ "rukatakana",
+ 0x30eb,
+ "rukatakanahalfwidth",
+ 0xff99,
+ "rupeemarkbengali",
+ 0x09f2,
+ "rupeesignbengali",
+ 0x09f3,
+ "rupiah",
+ 0xf6dd,
+ "ruthai",
+ 0x0e24,
+ "rvocalicbengali",
+ 0x098b,
+ "rvocalicdeva",
+ 0x090b,
+ "rvocalicgujarati",
+ 0x0a8b,
+ "rvocalicvowelsignbengali",
+ 0x09c3,
+ "rvocalicvowelsigndeva",
+ 0x0943,
+ "rvocalicvowelsigngujarati",
+ 0x0ac3,
+ "s",
+ 0x0073,
+ "sabengali",
+ 0x09b8,
+ "sacute",
+ 0x015b,
+ "sacutedotaccent",
+ 0x1e65,
+ "sadarabic",
+ 0x0635,
+ "sadeva",
+ 0x0938,
+ "sadfinalarabic",
+ 0xfeba,
+ "sadinitialarabic",
+ 0xfebb,
+ "sadmedialarabic",
+ 0xfebc,
+ "sagujarati",
+ 0x0ab8,
+ "sagurmukhi",
+ 0x0a38,
+ "sahiragana",
+ 0x3055,
+ "sakatakana",
+ 0x30b5,
+ "sakatakanahalfwidth",
+ 0xff7b,
+ "sallallahoualayhewasallamarabic",
+ 0xfdfa,
+ "samekh",
+ 0x05e1,
+ "samekhdagesh",
+ 0xfb41,
+ "samekhdageshhebrew",
+ 0xfb41,
+ "samekhhebrew",
+ 0x05e1,
+ "saraaathai",
+ 0x0e32,
+ "saraaethai",
+ 0x0e41,
+ "saraaimaimalaithai",
+ 0x0e44,
+ "saraaimaimuanthai",
+ 0x0e43,
+ "saraamthai",
+ 0x0e33,
+ "saraathai",
+ 0x0e30,
+ "saraethai",
+ 0x0e40,
+ "saraiileftthai",
+ 0xf886,
+ "saraiithai",
+ 0x0e35,
+ "saraileftthai",
+ 0xf885,
+ "saraithai",
+ 0x0e34,
+ "saraothai",
+ 0x0e42,
+ "saraueeleftthai",
+ 0xf888,
+ "saraueethai",
+ 0x0e37,
+ "saraueleftthai",
+ 0xf887,
+ "sarauethai",
+ 0x0e36,
+ "sarauthai",
+ 0x0e38,
+ "sarauuthai",
+ 0x0e39,
+ "sbopomofo",
+ 0x3119,
+ "scaron",
+ 0x0161,
+ "scarondotaccent",
+ 0x1e67,
+ "scedilla",
+ 0x015f,
+ "schwa",
+ 0x0259,
+ "schwacyrillic",
+ 0x04d9,
+ "schwadieresiscyrillic",
+ 0x04db,
+ "schwahook",
+ 0x025a,
+ "scircle",
+ 0x24e2,
+ "scircumflex",
+ 0x015d,
+ "scommaaccent",
+ 0x0219,
+ "sdotaccent",
+ 0x1e61,
+ "sdotbelow",
+ 0x1e63,
+ "sdotbelowdotaccent",
+ 0x1e69,
+ "seagullbelowcmb",
+ 0x033c,
+ "second",
+ 0x2033,
+ "secondtonechinese",
+ 0x02ca,
+ "section",
+ 0x00a7,
+ "seenarabic",
+ 0x0633,
+ "seenfinalarabic",
+ 0xfeb2,
+ "seeninitialarabic",
+ 0xfeb3,
+ "seenmedialarabic",
+ 0xfeb4,
+ "segol",
+ 0x05b6,
+ "segol13",
+ 0x05b6,
+ "segol1f",
+ 0x05b6,
+ "segol2c",
+ 0x05b6,
+ "segolhebrew",
+ 0x05b6,
+ "segolnarrowhebrew",
+ 0x05b6,
+ "segolquarterhebrew",
+ 0x05b6,
+ "segoltahebrew",
+ 0x0592,
+ "segolwidehebrew",
+ 0x05b6,
+ "seharmenian",
+ 0x057d,
+ "sehiragana",
+ 0x305b,
+ "sekatakana",
+ 0x30bb,
+ "sekatakanahalfwidth",
+ 0xff7e,
+ "semicolon",
+ 0x003b,
+ "semicolonarabic",
+ 0x061b,
+ "semicolonmonospace",
+ 0xff1b,
+ "semicolonsmall",
+ 0xfe54,
+ "semivoicedmarkkana",
+ 0x309c,
+ "semivoicedmarkkanahalfwidth",
+ 0xff9f,
+ "sentisquare",
+ 0x3322,
+ "sentosquare",
+ 0x3323,
+ "seven",
+ 0x0037,
+ "sevenarabic",
+ 0x0667,
+ "sevenbengali",
+ 0x09ed,
+ "sevencircle",
+ 0x2466,
+ "sevencircleinversesansserif",
+ 0x2790,
+ "sevendeva",
+ 0x096d,
+ "seveneighths",
+ 0x215e,
+ "sevengujarati",
+ 0x0aed,
+ "sevengurmukhi",
+ 0x0a6d,
+ "sevenhackarabic",
+ 0x0667,
+ "sevenhangzhou",
+ 0x3027,
+ "sevenideographicparen",
+ 0x3226,
+ "seveninferior",
+ 0x2087,
+ "sevenmonospace",
+ 0xff17,
+ "sevenoldstyle",
+ 0xf737,
+ "sevenparen",
+ 0x247a,
+ "sevenperiod",
+ 0x248e,
+ "sevenpersian",
+ 0x06f7,
+ "sevenroman",
+ 0x2176,
+ "sevensuperior",
+ 0x2077,
+ "seventeencircle",
+ 0x2470,
+ "seventeenparen",
+ 0x2484,
+ "seventeenperiod",
+ 0x2498,
+ "seventhai",
+ 0x0e57,
+ "sfthyphen",
+ 0x00ad,
+ "shaarmenian",
+ 0x0577,
+ "shabengali",
+ 0x09b6,
+ "shacyrillic",
+ 0x0448,
+ "shaddaarabic",
+ 0x0651,
+ "shaddadammaarabic",
+ 0xfc61,
+ "shaddadammatanarabic",
+ 0xfc5e,
+ "shaddafathaarabic",
+ 0xfc60,
+ "shaddakasraarabic",
+ 0xfc62,
+ "shaddakasratanarabic",
+ 0xfc5f,
+ "shade",
+ 0x2592,
+ "shadedark",
+ 0x2593,
+ "shadelight",
+ 0x2591,
+ "shademedium",
+ 0x2592,
+ "shadeva",
+ 0x0936,
+ "shagujarati",
+ 0x0ab6,
+ "shagurmukhi",
+ 0x0a36,
+ "shalshelethebrew",
+ 0x0593,
+ "shbopomofo",
+ 0x3115,
+ "shchacyrillic",
+ 0x0449,
+ "sheenarabic",
+ 0x0634,
+ "sheenfinalarabic",
+ 0xfeb6,
+ "sheeninitialarabic",
+ 0xfeb7,
+ "sheenmedialarabic",
+ 0xfeb8,
+ "sheicoptic",
+ 0x03e3,
+ "sheqel",
+ 0x20aa,
+ "sheqelhebrew",
+ 0x20aa,
+ "sheva",
+ 0x05b0,
+ "sheva115",
+ 0x05b0,
+ "sheva15",
+ 0x05b0,
+ "sheva22",
+ 0x05b0,
+ "sheva2e",
+ 0x05b0,
+ "shevahebrew",
+ 0x05b0,
+ "shevanarrowhebrew",
+ 0x05b0,
+ "shevaquarterhebrew",
+ 0x05b0,
+ "shevawidehebrew",
+ 0x05b0,
+ "shhacyrillic",
+ 0x04bb,
+ "shimacoptic",
+ 0x03ed,
+ "shin",
+ 0x05e9,
+ "shindagesh",
+ 0xfb49,
+ "shindageshhebrew",
+ 0xfb49,
+ "shindageshshindot",
+ 0xfb2c,
+ "shindageshshindothebrew",
+ 0xfb2c,
+ "shindageshsindot",
+ 0xfb2d,
+ "shindageshsindothebrew",
+ 0xfb2d,
+ "shindothebrew",
+ 0x05c1,
+ "shinhebrew",
+ 0x05e9,
+ "shinshindot",
+ 0xfb2a,
+ "shinshindothebrew",
+ 0xfb2a,
+ "shinsindot",
+ 0xfb2b,
+ "shinsindothebrew",
+ 0xfb2b,
+ "shook",
+ 0x0282,
+ "sigma",
+ 0x03c3,
+ "sigma1",
+ 0x03c2,
+ "sigmafinal",
+ 0x03c2,
+ "sigmalunatesymbolgreek",
+ 0x03f2,
+ "sihiragana",
+ 0x3057,
+ "sikatakana",
+ 0x30b7,
+ "sikatakanahalfwidth",
+ 0xff7c,
+ "siluqhebrew",
+ 0x05bd,
+ "siluqlefthebrew",
+ 0x05bd,
+ "similar",
+ 0x223c,
+ "sindothebrew",
+ 0x05c2,
+ "siosacirclekorean",
+ 0x3274,
+ "siosaparenkorean",
+ 0x3214,
+ "sioscieuckorean",
+ 0x317e,
+ "sioscirclekorean",
+ 0x3266,
+ "sioskiyeokkorean",
+ 0x317a,
+ "sioskorean",
+ 0x3145,
+ "siosnieunkorean",
+ 0x317b,
+ "siosparenkorean",
+ 0x3206,
+ "siospieupkorean",
+ 0x317d,
+ "siostikeutkorean",
+ 0x317c,
+ "six",
+ 0x0036,
+ "sixarabic",
+ 0x0666,
+ "sixbengali",
+ 0x09ec,
+ "sixcircle",
+ 0x2465,
+ "sixcircleinversesansserif",
+ 0x278f,
+ "sixdeva",
+ 0x096c,
+ "sixgujarati",
+ 0x0aec,
+ "sixgurmukhi",
+ 0x0a6c,
+ "sixhackarabic",
+ 0x0666,
+ "sixhangzhou",
+ 0x3026,
+ "sixideographicparen",
+ 0x3225,
+ "sixinferior",
+ 0x2086,
+ "sixmonospace",
+ 0xff16,
+ "sixoldstyle",
+ 0xf736,
+ "sixparen",
+ 0x2479,
+ "sixperiod",
+ 0x248d,
+ "sixpersian",
+ 0x06f6,
+ "sixroman",
+ 0x2175,
+ "sixsuperior",
+ 0x2076,
+ "sixteencircle",
+ 0x246f,
+ "sixteencurrencydenominatorbengali",
+ 0x09f9,
+ "sixteenparen",
+ 0x2483,
+ "sixteenperiod",
+ 0x2497,
+ "sixthai",
+ 0x0e56,
+ "slash",
+ 0x002f,
+ "slashmonospace",
+ 0xff0f,
+ "slong",
+ 0x017f,
+ "slongdotaccent",
+ 0x1e9b,
+ "smileface",
+ 0x263a,
+ "smonospace",
+ 0xff53,
+ "sofpasuqhebrew",
+ 0x05c3,
+ "softhyphen",
+ 0x00ad,
+ "softsigncyrillic",
+ 0x044c,
+ "sohiragana",
+ 0x305d,
+ "sokatakana",
+ 0x30bd,
+ "sokatakanahalfwidth",
+ 0xff7f,
+ "soliduslongoverlaycmb",
+ 0x0338,
+ "solidusshortoverlaycmb",
+ 0x0337,
+ "sorusithai",
+ 0x0e29,
+ "sosalathai",
+ 0x0e28,
+ "sosothai",
+ 0x0e0b,
+ "sosuathai",
+ 0x0e2a,
+ "space",
+ 0x0020,
+ "spacehackarabic",
+ 0x0020,
+ "spade",
+ 0x2660,
+ "spadesuitblack",
+ 0x2660,
+ "spadesuitwhite",
+ 0x2664,
+ "sparen",
+ 0x24ae,
+ "squarebelowcmb",
+ 0x033b,
+ "squarecc",
+ 0x33c4,
+ "squarecm",
+ 0x339d,
+ "squarediagonalcrosshatchfill",
+ 0x25a9,
+ "squarehorizontalfill",
+ 0x25a4,
+ "squarekg",
+ 0x338f,
+ "squarekm",
+ 0x339e,
+ "squarekmcapital",
+ 0x33ce,
+ "squareln",
+ 0x33d1,
+ "squarelog",
+ 0x33d2,
+ "squaremg",
+ 0x338e,
+ "squaremil",
+ 0x33d5,
+ "squaremm",
+ 0x339c,
+ "squaremsquared",
+ 0x33a1,
+ "squareorthogonalcrosshatchfill",
+ 0x25a6,
+ "squareupperlefttolowerrightfill",
+ 0x25a7,
+ "squareupperrighttolowerleftfill",
+ 0x25a8,
+ "squareverticalfill",
+ 0x25a5,
+ "squarewhitewithsmallblack",
+ 0x25a3,
+ "srsquare",
+ 0x33db,
+ "ssabengali",
+ 0x09b7,
+ "ssadeva",
+ 0x0937,
+ "ssagujarati",
+ 0x0ab7,
+ "ssangcieuckorean",
+ 0x3149,
+ "ssanghieuhkorean",
+ 0x3185,
+ "ssangieungkorean",
+ 0x3180,
+ "ssangkiyeokkorean",
+ 0x3132,
+ "ssangnieunkorean",
+ 0x3165,
+ "ssangpieupkorean",
+ 0x3143,
+ "ssangsioskorean",
+ 0x3146,
+ "ssangtikeutkorean",
+ 0x3138,
+ "ssuperior",
+ 0xf6f2,
+ "sterling",
+ 0x00a3,
+ "sterlingmonospace",
+ 0xffe1,
+ "strokelongoverlaycmb",
+ 0x0336,
+ "strokeshortoverlaycmb",
+ 0x0335,
+ "subset",
+ 0x2282,
+ "subsetnotequal",
+ 0x228a,
+ "subsetorequal",
+ 0x2286,
+ "succeeds",
+ 0x227b,
+ "suchthat",
+ 0x220b,
+ "suhiragana",
+ 0x3059,
+ "sukatakana",
+ 0x30b9,
+ "sukatakanahalfwidth",
+ 0xff7d,
+ "sukunarabic",
+ 0x0652,
+ "summation",
+ 0x2211,
+ "sun",
+ 0x263c,
+ "superset",
+ 0x2283,
+ "supersetnotequal",
+ 0x228b,
+ "supersetorequal",
+ 0x2287,
+ "svsquare",
+ 0x33dc,
+ "syouwaerasquare",
+ 0x337c,
+ "t",
+ 0x0074,
+ "tabengali",
+ 0x09a4,
+ "tackdown",
+ 0x22a4,
+ "tackleft",
+ 0x22a3,
+ "tadeva",
+ 0x0924,
+ "tagujarati",
+ 0x0aa4,
+ "tagurmukhi",
+ 0x0a24,
+ "taharabic",
+ 0x0637,
+ "tahfinalarabic",
+ 0xfec2,
+ "tahinitialarabic",
+ 0xfec3,
+ "tahiragana",
+ 0x305f,
+ "tahmedialarabic",
+ 0xfec4,
+ "taisyouerasquare",
+ 0x337d,
+ "takatakana",
+ 0x30bf,
+ "takatakanahalfwidth",
+ 0xff80,
+ "tatweelarabic",
+ 0x0640,
+ "tau",
+ 0x03c4,
+ "tav",
+ 0x05ea,
+ "tavdages",
+ 0xfb4a,
+ "tavdagesh",
+ 0xfb4a,
+ "tavdageshhebrew",
+ 0xfb4a,
+ "tavhebrew",
+ 0x05ea,
+ "tbar",
+ 0x0167,
+ "tbopomofo",
+ 0x310a,
+ "tcaron",
+ 0x0165,
+ "tccurl",
+ 0x02a8,
+ "tcedilla",
+ 0x0163,
+ "tcheharabic",
+ 0x0686,
+ "tchehfinalarabic",
+ 0xfb7b,
+ "tchehinitialarabic",
+ 0xfb7c,
+ "tchehmedialarabic",
+ 0xfb7d,
+ "tcircle",
+ 0x24e3,
+ "tcircumflexbelow",
+ 0x1e71,
+ "tcommaaccent",
+ 0x0163,
+ "tdieresis",
+ 0x1e97,
+ "tdotaccent",
+ 0x1e6b,
+ "tdotbelow",
+ 0x1e6d,
+ "tecyrillic",
+ 0x0442,
+ "tedescendercyrillic",
+ 0x04ad,
+ "teharabic",
+ 0x062a,
+ "tehfinalarabic",
+ 0xfe96,
+ "tehhahinitialarabic",
+ 0xfca2,
+ "tehhahisolatedarabic",
+ 0xfc0c,
+ "tehinitialarabic",
+ 0xfe97,
+ "tehiragana",
+ 0x3066,
+ "tehjeeminitialarabic",
+ 0xfca1,
+ "tehjeemisolatedarabic",
+ 0xfc0b,
+ "tehmarbutaarabic",
+ 0x0629,
+ "tehmarbutafinalarabic",
+ 0xfe94,
+ "tehmedialarabic",
+ 0xfe98,
+ "tehmeeminitialarabic",
+ 0xfca4,
+ "tehmeemisolatedarabic",
+ 0xfc0e,
+ "tehnoonfinalarabic",
+ 0xfc73,
+ "tekatakana",
+ 0x30c6,
+ "tekatakanahalfwidth",
+ 0xff83,
+ "telephone",
+ 0x2121,
+ "telephoneblack",
+ 0x260e,
+ "telishagedolahebrew",
+ 0x05a0,
+ "telishaqetanahebrew",
+ 0x05a9,
+ "tencircle",
+ 0x2469,
+ "tenideographicparen",
+ 0x3229,
+ "tenparen",
+ 0x247d,
+ "tenperiod",
+ 0x2491,
+ "tenroman",
+ 0x2179,
+ "tesh",
+ 0x02a7,
+ "tet",
+ 0x05d8,
+ "tetdagesh",
+ 0xfb38,
+ "tetdageshhebrew",
+ 0xfb38,
+ "tethebrew",
+ 0x05d8,
+ "tetsecyrillic",
+ 0x04b5,
+ "tevirhebrew",
+ 0x059b,
+ "tevirlefthebrew",
+ 0x059b,
+ "thabengali",
+ 0x09a5,
+ "thadeva",
+ 0x0925,
+ "thagujarati",
+ 0x0aa5,
+ "thagurmukhi",
+ 0x0a25,
+ "thalarabic",
+ 0x0630,
+ "thalfinalarabic",
+ 0xfeac,
+ "thanthakhatlowleftthai",
+ 0xf898,
+ "thanthakhatlowrightthai",
+ 0xf897,
+ "thanthakhatthai",
+ 0x0e4c,
+ "thanthakhatupperleftthai",
+ 0xf896,
+ "theharabic",
+ 0x062b,
+ "thehfinalarabic",
+ 0xfe9a,
+ "thehinitialarabic",
+ 0xfe9b,
+ "thehmedialarabic",
+ 0xfe9c,
+ "thereexists",
+ 0x2203,
+ "therefore",
+ 0x2234,
+ "theta",
+ 0x03b8,
+ "theta1",
+ 0x03d1,
+ "thetasymbolgreek",
+ 0x03d1,
+ "thieuthacirclekorean",
+ 0x3279,
+ "thieuthaparenkorean",
+ 0x3219,
+ "thieuthcirclekorean",
+ 0x326b,
+ "thieuthkorean",
+ 0x314c,
+ "thieuthparenkorean",
+ 0x320b,
+ "thirteencircle",
+ 0x246c,
+ "thirteenparen",
+ 0x2480,
+ "thirteenperiod",
+ 0x2494,
+ "thonangmonthothai",
+ 0x0e11,
+ "thook",
+ 0x01ad,
+ "thophuthaothai",
+ 0x0e12,
+ "thorn",
+ 0x00fe,
+ "thothahanthai",
+ 0x0e17,
+ "thothanthai",
+ 0x0e10,
+ "thothongthai",
+ 0x0e18,
+ "thothungthai",
+ 0x0e16,
+ "thousandcyrillic",
+ 0x0482,
+ "thousandsseparatorarabic",
+ 0x066c,
+ "thousandsseparatorpersian",
+ 0x066c,
+ "three",
+ 0x0033,
+ "threearabic",
+ 0x0663,
+ "threebengali",
+ 0x09e9,
+ "threecircle",
+ 0x2462,
+ "threecircleinversesansserif",
+ 0x278c,
+ "threedeva",
+ 0x0969,
+ "threeeighths",
+ 0x215c,
+ "threegujarati",
+ 0x0ae9,
+ "threegurmukhi",
+ 0x0a69,
+ "threehackarabic",
+ 0x0663,
+ "threehangzhou",
+ 0x3023,
+ "threeideographicparen",
+ 0x3222,
+ "threeinferior",
+ 0x2083,
+ "threemonospace",
+ 0xff13,
+ "threenumeratorbengali",
+ 0x09f6,
+ "threeoldstyle",
+ 0xf733,
+ "threeparen",
+ 0x2476,
+ "threeperiod",
+ 0x248a,
+ "threepersian",
+ 0x06f3,
+ "threequarters",
+ 0x00be,
+ "threequartersemdash",
+ 0xf6de,
+ "threeroman",
+ 0x2172,
+ "threesuperior",
+ 0x00b3,
+ "threethai",
+ 0x0e53,
+ "thzsquare",
+ 0x3394,
+ "tihiragana",
+ 0x3061,
+ "tikatakana",
+ 0x30c1,
+ "tikatakanahalfwidth",
+ 0xff81,
+ "tikeutacirclekorean",
+ 0x3270,
+ "tikeutaparenkorean",
+ 0x3210,
+ "tikeutcirclekorean",
+ 0x3262,
+ "tikeutkorean",
+ 0x3137,
+ "tikeutparenkorean",
+ 0x3202,
+ "tilde",
+ 0x02dc,
+ "tildebelowcmb",
+ 0x0330,
+ "tildecmb",
+ 0x0303,
+ "tildecomb",
+ 0x0303,
+ "tildedoublecmb",
+ 0x0360,
+ "tildeoperator",
+ 0x223c,
+ "tildeoverlaycmb",
+ 0x0334,
+ "tildeverticalcmb",
+ 0x033e,
+ "timescircle",
+ 0x2297,
+ "tipehahebrew",
+ 0x0596,
+ "tipehalefthebrew",
+ 0x0596,
+ "tippigurmukhi",
+ 0x0a70,
+ "titlocyrilliccmb",
+ 0x0483,
+ "tiwnarmenian",
+ 0x057f,
+ "tlinebelow",
+ 0x1e6f,
+ "tmonospace",
+ 0xff54,
+ "toarmenian",
+ 0x0569,
+ "tohiragana",
+ 0x3068,
+ "tokatakana",
+ 0x30c8,
+ "tokatakanahalfwidth",
+ 0xff84,
+ "tonebarextrahighmod",
+ 0x02e5,
+ "tonebarextralowmod",
+ 0x02e9,
+ "tonebarhighmod",
+ 0x02e6,
+ "tonebarlowmod",
+ 0x02e8,
+ "tonebarmidmod",
+ 0x02e7,
+ "tonefive",
+ 0x01bd,
+ "tonesix",
+ 0x0185,
+ "tonetwo",
+ 0x01a8,
+ "tonos",
+ 0x0384,
+ "tonsquare",
+ 0x3327,
+ "topatakthai",
+ 0x0e0f,
+ "tortoiseshellbracketleft",
+ 0x3014,
+ "tortoiseshellbracketleftsmall",
+ 0xfe5d,
+ "tortoiseshellbracketleftvertical",
+ 0xfe39,
+ "tortoiseshellbracketright",
+ 0x3015,
+ "tortoiseshellbracketrightsmall",
+ 0xfe5e,
+ "tortoiseshellbracketrightvertical",
+ 0xfe3a,
+ "totaothai",
+ 0x0e15,
+ "tpalatalhook",
+ 0x01ab,
+ "tparen",
+ 0x24af,
+ "trademark",
+ 0x2122,
+ "trademarksans",
+ 0xf8ea,
+ "trademarkserif",
+ 0xf6db,
+ "tretroflexhook",
+ 0x0288,
+ "triagdn",
+ 0x25bc,
+ "triaglf",
+ 0x25c4,
+ "triagrt",
+ 0x25ba,
+ "triagup",
+ 0x25b2,
+ "ts",
+ 0x02a6,
+ "tsadi",
+ 0x05e6,
+ "tsadidagesh",
+ 0xfb46,
+ "tsadidageshhebrew",
+ 0xfb46,
+ "tsadihebrew",
+ 0x05e6,
+ "tsecyrillic",
+ 0x0446,
+ "tsere",
+ 0x05b5,
+ "tsere12",
+ 0x05b5,
+ "tsere1e",
+ 0x05b5,
+ "tsere2b",
+ 0x05b5,
+ "tserehebrew",
+ 0x05b5,
+ "tserenarrowhebrew",
+ 0x05b5,
+ "tserequarterhebrew",
+ 0x05b5,
+ "tserewidehebrew",
+ 0x05b5,
+ "tshecyrillic",
+ 0x045b,
+ "tsuperior",
+ 0xf6f3,
+ "ttabengali",
+ 0x099f,
+ "ttadeva",
+ 0x091f,
+ "ttagujarati",
+ 0x0a9f,
+ "ttagurmukhi",
+ 0x0a1f,
+ "tteharabic",
+ 0x0679,
+ "ttehfinalarabic",
+ 0xfb67,
+ "ttehinitialarabic",
+ 0xfb68,
+ "ttehmedialarabic",
+ 0xfb69,
+ "tthabengali",
+ 0x09a0,
+ "tthadeva",
+ 0x0920,
+ "tthagujarati",
+ 0x0aa0,
+ "tthagurmukhi",
+ 0x0a20,
+ "tturned",
+ 0x0287,
+ "tuhiragana",
+ 0x3064,
+ "tukatakana",
+ 0x30c4,
+ "tukatakanahalfwidth",
+ 0xff82,
+ "tusmallhiragana",
+ 0x3063,
+ "tusmallkatakana",
+ 0x30c3,
+ "tusmallkatakanahalfwidth",
+ 0xff6f,
+ "twelvecircle",
+ 0x246b,
+ "twelveparen",
+ 0x247f,
+ "twelveperiod",
+ 0x2493,
+ "twelveroman",
+ 0x217b,
+ "twentycircle",
+ 0x2473,
+ "twentyhangzhou",
+ 0x5344,
+ "twentyparen",
+ 0x2487,
+ "twentyperiod",
+ 0x249b,
+ "two",
+ 0x0032,
+ "twoarabic",
+ 0x0662,
+ "twobengali",
+ 0x09e8,
+ "twocircle",
+ 0x2461,
+ "twocircleinversesansserif",
+ 0x278b,
+ "twodeva",
+ 0x0968,
+ "twodotenleader",
+ 0x2025,
+ "twodotleader",
+ 0x2025,
+ "twodotleadervertical",
+ 0xfe30,
+ "twogujarati",
+ 0x0ae8,
+ "twogurmukhi",
+ 0x0a68,
+ "twohackarabic",
+ 0x0662,
+ "twohangzhou",
+ 0x3022,
+ "twoideographicparen",
+ 0x3221,
+ "twoinferior",
+ 0x2082,
+ "twomonospace",
+ 0xff12,
+ "twonumeratorbengali",
+ 0x09f5,
+ "twooldstyle",
+ 0xf732,
+ "twoparen",
+ 0x2475,
+ "twoperiod",
+ 0x2489,
+ "twopersian",
+ 0x06f2,
+ "tworoman",
+ 0x2171,
+ "twostroke",
+ 0x01bb,
+ "twosuperior",
+ 0x00b2,
+ "twothai",
+ 0x0e52,
+ "twothirds",
+ 0x2154,
+ "u",
+ 0x0075,
+ "uacute",
+ 0x00fa,
+ "ubar",
+ 0x0289,
+ "ubengali",
+ 0x0989,
+ "ubopomofo",
+ 0x3128,
+ "ubreve",
+ 0x016d,
+ "ucaron",
+ 0x01d4,
+ "ucircle",
+ 0x24e4,
+ "ucircumflex",
+ 0x00fb,
+ "ucircumflexbelow",
+ 0x1e77,
+ "ucyrillic",
+ 0x0443,
+ "udattadeva",
+ 0x0951,
+ "udblacute",
+ 0x0171,
+ "udblgrave",
+ 0x0215,
+ "udeva",
+ 0x0909,
+ "udieresis",
+ 0x00fc,
+ "udieresisacute",
+ 0x01d8,
+ "udieresisbelow",
+ 0x1e73,
+ "udieresiscaron",
+ 0x01da,
+ "udieresiscyrillic",
+ 0x04f1,
+ "udieresisgrave",
+ 0x01dc,
+ "udieresismacron",
+ 0x01d6,
+ "udotbelow",
+ 0x1ee5,
+ "ugrave",
+ 0x00f9,
+ "ugujarati",
+ 0x0a89,
+ "ugurmukhi",
+ 0x0a09,
+ "uhiragana",
+ 0x3046,
+ "uhookabove",
+ 0x1ee7,
+ "uhorn",
+ 0x01b0,
+ "uhornacute",
+ 0x1ee9,
+ "uhorndotbelow",
+ 0x1ef1,
+ "uhorngrave",
+ 0x1eeb,
+ "uhornhookabove",
+ 0x1eed,
+ "uhorntilde",
+ 0x1eef,
+ "uhungarumlaut",
+ 0x0171,
+ "uhungarumlautcyrillic",
+ 0x04f3,
+ "uinvertedbreve",
+ 0x0217,
+ "ukatakana",
+ 0x30a6,
+ "ukatakanahalfwidth",
+ 0xff73,
+ "ukcyrillic",
+ 0x0479,
+ "ukorean",
+ 0x315c,
+ "umacron",
+ 0x016b,
+ "umacroncyrillic",
+ 0x04ef,
+ "umacrondieresis",
+ 0x1e7b,
+ "umatragurmukhi",
+ 0x0a41,
+ "umonospace",
+ 0xff55,
+ "underscore",
+ 0x005f,
+ "underscoredbl",
+ 0x2017,
+ "underscoremonospace",
+ 0xff3f,
+ "underscorevertical",
+ 0xfe33,
+ "underscorewavy",
+ 0xfe4f,
+ "union",
+ 0x222a,
+ "universal",
+ 0x2200,
+ "uogonek",
+ 0x0173,
+ "uparen",
+ 0x24b0,
+ "upblock",
+ 0x2580,
+ "upperdothebrew",
+ 0x05c4,
+ "upsilon",
+ 0x03c5,
+ "upsilondieresis",
+ 0x03cb,
+ "upsilondieresistonos",
+ 0x03b0,
+ "upsilonlatin",
+ 0x028a,
+ "upsilontonos",
+ 0x03cd,
+ "uptackbelowcmb",
+ 0x031d,
+ "uptackmod",
+ 0x02d4,
+ "uragurmukhi",
+ 0x0a73,
+ "uring",
+ 0x016f,
+ "ushortcyrillic",
+ 0x045e,
+ "usmallhiragana",
+ 0x3045,
+ "usmallkatakana",
+ 0x30a5,
+ "usmallkatakanahalfwidth",
+ 0xff69,
+ "ustraightcyrillic",
+ 0x04af,
+ "ustraightstrokecyrillic",
+ 0x04b1,
+ "utilde",
+ 0x0169,
+ "utildeacute",
+ 0x1e79,
+ "utildebelow",
+ 0x1e75,
+ "uubengali",
+ 0x098a,
+ "uudeva",
+ 0x090a,
+ "uugujarati",
+ 0x0a8a,
+ "uugurmukhi",
+ 0x0a0a,
+ "uumatragurmukhi",
+ 0x0a42,
+ "uuvowelsignbengali",
+ 0x09c2,
+ "uuvowelsigndeva",
+ 0x0942,
+ "uuvowelsigngujarati",
+ 0x0ac2,
+ "uvowelsignbengali",
+ 0x09c1,
+ "uvowelsigndeva",
+ 0x0941,
+ "uvowelsigngujarati",
+ 0x0ac1,
+ "v",
+ 0x0076,
+ "vadeva",
+ 0x0935,
+ "vagujarati",
+ 0x0ab5,
+ "vagurmukhi",
+ 0x0a35,
+ "vakatakana",
+ 0x30f7,
+ "vav",
+ 0x05d5,
+ "vavdagesh",
+ 0xfb35,
+ "vavdagesh65",
+ 0xfb35,
+ "vavdageshhebrew",
+ 0xfb35,
+ "vavhebrew",
+ 0x05d5,
+ "vavholam",
+ 0xfb4b,
+ "vavholamhebrew",
+ 0xfb4b,
+ "vavvavhebrew",
+ 0x05f0,
+ "vavyodhebrew",
+ 0x05f1,
+ "vcircle",
+ 0x24e5,
+ "vdotbelow",
+ 0x1e7f,
+ "vecyrillic",
+ 0x0432,
+ "veharabic",
+ 0x06a4,
+ "vehfinalarabic",
+ 0xfb6b,
+ "vehinitialarabic",
+ 0xfb6c,
+ "vehmedialarabic",
+ 0xfb6d,
+ "vekatakana",
+ 0x30f9,
+ "venus",
+ 0x2640,
+ "verticalbar",
+ 0x007c,
+ "verticallineabovecmb",
+ 0x030d,
+ "verticallinebelowcmb",
+ 0x0329,
+ "verticallinelowmod",
+ 0x02cc,
+ "verticallinemod",
+ 0x02c8,
+ "vewarmenian",
+ 0x057e,
+ "vhook",
+ 0x028b,
+ "vikatakana",
+ 0x30f8,
+ "viramabengali",
+ 0x09cd,
+ "viramadeva",
+ 0x094d,
+ "viramagujarati",
+ 0x0acd,
+ "visargabengali",
+ 0x0983,
+ "visargadeva",
+ 0x0903,
+ "visargagujarati",
+ 0x0a83,
+ "vmonospace",
+ 0xff56,
+ "voarmenian",
+ 0x0578,
+ "voicediterationhiragana",
+ 0x309e,
+ "voicediterationkatakana",
+ 0x30fe,
+ "voicedmarkkana",
+ 0x309b,
+ "voicedmarkkanahalfwidth",
+ 0xff9e,
+ "vokatakana",
+ 0x30fa,
+ "vparen",
+ 0x24b1,
+ "vtilde",
+ 0x1e7d,
+ "vturned",
+ 0x028c,
+ "vuhiragana",
+ 0x3094,
+ "vukatakana",
+ 0x30f4,
+ "w",
+ 0x0077,
+ "wacute",
+ 0x1e83,
+ "waekorean",
+ 0x3159,
+ "wahiragana",
+ 0x308f,
+ "wakatakana",
+ 0x30ef,
+ "wakatakanahalfwidth",
+ 0xff9c,
+ "wakorean",
+ 0x3158,
+ "wasmallhiragana",
+ 0x308e,
+ "wasmallkatakana",
+ 0x30ee,
+ "wattosquare",
+ 0x3357,
+ "wavedash",
+ 0x301c,
+ "wavyunderscorevertical",
+ 0xfe34,
+ "wawarabic",
+ 0x0648,
+ "wawfinalarabic",
+ 0xfeee,
+ "wawhamzaabovearabic",
+ 0x0624,
+ "wawhamzaabovefinalarabic",
+ 0xfe86,
+ "wbsquare",
+ 0x33dd,
+ "wcircle",
+ 0x24e6,
+ "wcircumflex",
+ 0x0175,
+ "wdieresis",
+ 0x1e85,
+ "wdotaccent",
+ 0x1e87,
+ "wdotbelow",
+ 0x1e89,
+ "wehiragana",
+ 0x3091,
+ "weierstrass",
+ 0x2118,
+ "wekatakana",
+ 0x30f1,
+ "wekorean",
+ 0x315e,
+ "weokorean",
+ 0x315d,
+ "wgrave",
+ 0x1e81,
+ "whitebullet",
+ 0x25e6,
+ "whitecircle",
+ 0x25cb,
+ "whitecircleinverse",
+ 0x25d9,
+ "whitecornerbracketleft",
+ 0x300e,
+ "whitecornerbracketleftvertical",
+ 0xfe43,
+ "whitecornerbracketright",
+ 0x300f,
+ "whitecornerbracketrightvertical",
+ 0xfe44,
+ "whitediamond",
+ 0x25c7,
+ "whitediamondcontainingblacksmalldiamond",
+ 0x25c8,
+ "whitedownpointingsmalltriangle",
+ 0x25bf,
+ "whitedownpointingtriangle",
+ 0x25bd,
+ "whiteleftpointingsmalltriangle",
+ 0x25c3,
+ "whiteleftpointingtriangle",
+ 0x25c1,
+ "whitelenticularbracketleft",
+ 0x3016,
+ "whitelenticularbracketright",
+ 0x3017,
+ "whiterightpointingsmalltriangle",
+ 0x25b9,
+ "whiterightpointingtriangle",
+ 0x25b7,
+ "whitesmallsquare",
+ 0x25ab,
+ "whitesmilingface",
+ 0x263a,
+ "whitesquare",
+ 0x25a1,
+ "whitestar",
+ 0x2606,
+ "whitetelephone",
+ 0x260f,
+ "whitetortoiseshellbracketleft",
+ 0x3018,
+ "whitetortoiseshellbracketright",
+ 0x3019,
+ "whiteuppointingsmalltriangle",
+ 0x25b5,
+ "whiteuppointingtriangle",
+ 0x25b3,
+ "wihiragana",
+ 0x3090,
+ "wikatakana",
+ 0x30f0,
+ "wikorean",
+ 0x315f,
+ "wmonospace",
+ 0xff57,
+ "wohiragana",
+ 0x3092,
+ "wokatakana",
+ 0x30f2,
+ "wokatakanahalfwidth",
+ 0xff66,
+ "won",
+ 0x20a9,
+ "wonmonospace",
+ 0xffe6,
+ "wowaenthai",
+ 0x0e27,
+ "wparen",
+ 0x24b2,
+ "wring",
+ 0x1e98,
+ "wsuperior",
+ 0x02b7,
+ "wturned",
+ 0x028d,
+ "wynn",
+ 0x01bf,
+ "x",
+ 0x0078,
+ "xabovecmb",
+ 0x033d,
+ "xbopomofo",
+ 0x3112,
+ "xcircle",
+ 0x24e7,
+ "xdieresis",
+ 0x1e8d,
+ "xdotaccent",
+ 0x1e8b,
+ "xeharmenian",
+ 0x056d,
+ "xi",
+ 0x03be,
+ "xmonospace",
+ 0xff58,
+ "xparen",
+ 0x24b3,
+ "xsuperior",
+ 0x02e3,
+ "y",
+ 0x0079,
+ "yaadosquare",
+ 0x334e,
+ "yabengali",
+ 0x09af,
+ "yacute",
+ 0x00fd,
+ "yadeva",
+ 0x092f,
+ "yaekorean",
+ 0x3152,
+ "yagujarati",
+ 0x0aaf,
+ "yagurmukhi",
+ 0x0a2f,
+ "yahiragana",
+ 0x3084,
+ "yakatakana",
+ 0x30e4,
+ "yakatakanahalfwidth",
+ 0xff94,
+ "yakorean",
+ 0x3151,
+ "yamakkanthai",
+ 0x0e4e,
+ "yasmallhiragana",
+ 0x3083,
+ "yasmallkatakana",
+ 0x30e3,
+ "yasmallkatakanahalfwidth",
+ 0xff6c,
+ "yatcyrillic",
+ 0x0463,
+ "ycircle",
+ 0x24e8,
+ "ycircumflex",
+ 0x0177,
+ "ydieresis",
+ 0x00ff,
+ "ydotaccent",
+ 0x1e8f,
+ "ydotbelow",
+ 0x1ef5,
+ "yeharabic",
+ 0x064a,
+ "yehbarreearabic",
+ 0x06d2,
+ "yehbarreefinalarabic",
+ 0xfbaf,
+ "yehfinalarabic",
+ 0xfef2,
+ "yehhamzaabovearabic",
+ 0x0626,
+ "yehhamzaabovefinalarabic",
+ 0xfe8a,
+ "yehhamzaaboveinitialarabic",
+ 0xfe8b,
+ "yehhamzaabovemedialarabic",
+ 0xfe8c,
+ "yehinitialarabic",
+ 0xfef3,
+ "yehmedialarabic",
+ 0xfef4,
+ "yehmeeminitialarabic",
+ 0xfcdd,
+ "yehmeemisolatedarabic",
+ 0xfc58,
+ "yehnoonfinalarabic",
+ 0xfc94,
+ "yehthreedotsbelowarabic",
+ 0x06d1,
+ "yekorean",
+ 0x3156,
+ "yen",
+ 0x00a5,
+ "yenmonospace",
+ 0xffe5,
+ "yeokorean",
+ 0x3155,
+ "yeorinhieuhkorean",
+ 0x3186,
+ "yerahbenyomohebrew",
+ 0x05aa,
+ "yerahbenyomolefthebrew",
+ 0x05aa,
+ "yericyrillic",
+ 0x044b,
+ "yerudieresiscyrillic",
+ 0x04f9,
+ "yesieungkorean",
+ 0x3181,
+ "yesieungpansioskorean",
+ 0x3183,
+ "yesieungsioskorean",
+ 0x3182,
+ "yetivhebrew",
+ 0x059a,
+ "ygrave",
+ 0x1ef3,
+ "yhook",
+ 0x01b4,
+ "yhookabove",
+ 0x1ef7,
+ "yiarmenian",
+ 0x0575,
+ "yicyrillic",
+ 0x0457,
+ "yikorean",
+ 0x3162,
+ "yinyang",
+ 0x262f,
+ "yiwnarmenian",
+ 0x0582,
+ "ymonospace",
+ 0xff59,
+ "yod",
+ 0x05d9,
+ "yoddagesh",
+ 0xfb39,
+ "yoddageshhebrew",
+ 0xfb39,
+ "yodhebrew",
+ 0x05d9,
+ "yodyodhebrew",
+ 0x05f2,
+ "yodyodpatahhebrew",
+ 0xfb1f,
+ "yohiragana",
+ 0x3088,
+ "yoikorean",
+ 0x3189,
+ "yokatakana",
+ 0x30e8,
+ "yokatakanahalfwidth",
+ 0xff96,
+ "yokorean",
+ 0x315b,
+ "yosmallhiragana",
+ 0x3087,
+ "yosmallkatakana",
+ 0x30e7,
+ "yosmallkatakanahalfwidth",
+ 0xff6e,
+ "yotgreek",
+ 0x03f3,
+ "yoyaekorean",
+ 0x3188,
+ "yoyakorean",
+ 0x3187,
+ "yoyakthai",
+ 0x0e22,
+ "yoyingthai",
+ 0x0e0d,
+ "yparen",
+ 0x24b4,
+ "ypogegrammeni",
+ 0x037a,
+ "ypogegrammenigreekcmb",
+ 0x0345,
+ "yr",
+ 0x01a6,
+ "yring",
+ 0x1e99,
+ "ysuperior",
+ 0x02b8,
+ "ytilde",
+ 0x1ef9,
+ "yturned",
+ 0x028e,
+ "yuhiragana",
+ 0x3086,
+ "yuikorean",
+ 0x318c,
+ "yukatakana",
+ 0x30e6,
+ "yukatakanahalfwidth",
+ 0xff95,
+ "yukorean",
+ 0x3160,
+ "yusbigcyrillic",
+ 0x046b,
+ "yusbigiotifiedcyrillic",
+ 0x046d,
+ "yuslittlecyrillic",
+ 0x0467,
+ "yuslittleiotifiedcyrillic",
+ 0x0469,
+ "yusmallhiragana",
+ 0x3085,
+ "yusmallkatakana",
+ 0x30e5,
+ "yusmallkatakanahalfwidth",
+ 0xff6d,
+ "yuyekorean",
+ 0x318b,
+ "yuyeokorean",
+ 0x318a,
+ "yyabengali",
+ 0x09df,
+ "yyadeva",
+ 0x095f,
+ "z",
+ 0x007a,
+ "zaarmenian",
+ 0x0566,
+ "zacute",
+ 0x017a,
+ "zadeva",
+ 0x095b,
+ "zagurmukhi",
+ 0x0a5b,
+ "zaharabic",
+ 0x0638,
+ "zahfinalarabic",
+ 0xfec6,
+ "zahinitialarabic",
+ 0xfec7,
+ "zahiragana",
+ 0x3056,
+ "zahmedialarabic",
+ 0xfec8,
+ "zainarabic",
+ 0x0632,
+ "zainfinalarabic",
+ 0xfeb0,
+ "zakatakana",
+ 0x30b6,
+ "zaqefgadolhebrew",
+ 0x0595,
+ "zaqefqatanhebrew",
+ 0x0594,
+ "zarqahebrew",
+ 0x0598,
+ "zayin",
+ 0x05d6,
+ "zayindagesh",
+ 0xfb36,
+ "zayindageshhebrew",
+ 0xfb36,
+ "zayinhebrew",
+ 0x05d6,
+ "zbopomofo",
+ 0x3117,
+ "zcaron",
+ 0x017e,
+ "zcircle",
+ 0x24e9,
+ "zcircumflex",
+ 0x1e91,
+ "zcurl",
+ 0x0291,
+ "zdot",
+ 0x017c,
+ "zdotaccent",
+ 0x017c,
+ "zdotbelow",
+ 0x1e93,
+ "zecyrillic",
+ 0x0437,
+ "zedescendercyrillic",
+ 0x0499,
+ "zedieresiscyrillic",
+ 0x04df,
+ "zehiragana",
+ 0x305c,
+ "zekatakana",
+ 0x30bc,
+ "zero",
+ 0x0030,
+ "zeroarabic",
+ 0x0660,
+ "zerobengali",
+ 0x09e6,
+ "zerodeva",
+ 0x0966,
+ "zerogujarati",
+ 0x0ae6,
+ "zerogurmukhi",
+ 0x0a66,
+ "zerohackarabic",
+ 0x0660,
+ "zeroinferior",
+ 0x2080,
+ "zeromonospace",
+ 0xff10,
+ "zerooldstyle",
+ 0xf730,
+ "zeropersian",
+ 0x06f0,
+ "zerosuperior",
+ 0x2070,
+ "zerothai",
+ 0x0e50,
+ "zerowidthjoiner",
+ 0xfeff,
+ "zerowidthnonjoiner",
+ 0x200c,
+ "zerowidthspace",
+ 0x200b,
+ "zeta",
+ 0x03b6,
+ "zhbopomofo",
+ 0x3113,
+ "zhearmenian",
+ 0x056a,
+ "zhebrevecyrillic",
+ 0x04c2,
+ "zhecyrillic",
+ 0x0436,
+ "zhedescendercyrillic",
+ 0x0497,
+ "zhedieresiscyrillic",
+ 0x04dd,
+ "zihiragana",
+ 0x3058,
+ "zikatakana",
+ 0x30b8,
+ "zinorhebrew",
+ 0x05ae,
+ "zlinebelow",
+ 0x1e95,
+ "zmonospace",
+ 0xff5a,
+ "zohiragana",
+ 0x305e,
+ "zokatakana",
+ 0x30be,
+ "zparen",
+ 0x24b5,
+ "zretroflexhook",
+ 0x0290,
+ "zstroke",
+ 0x01b6,
+ "zuhiragana",
+ 0x305a,
+ "zukatakana",
+ 0x30ba,
+ ".notdef",
+ 0x0000,
+ "angbracketleftbig",
+ 0x2329,
+ "angbracketleftBig",
+ 0x2329,
+ "angbracketleftbigg",
+ 0x2329,
+ "angbracketleftBigg",
+ 0x2329,
+ "angbracketrightBig",
+ 0x232a,
+ "angbracketrightbig",
+ 0x232a,
+ "angbracketrightBigg",
+ 0x232a,
+ "angbracketrightbigg",
+ 0x232a,
+ "arrowhookleft",
+ 0x21aa,
+ "arrowhookright",
+ 0x21a9,
+ "arrowlefttophalf",
+ 0x21bc,
+ "arrowleftbothalf",
+ 0x21bd,
+ "arrownortheast",
+ 0x2197,
+ "arrownorthwest",
+ 0x2196,
+ "arrowrighttophalf",
+ 0x21c0,
+ "arrowrightbothalf",
+ 0x21c1,
+ "arrowsoutheast",
+ 0x2198,
+ "arrowsouthwest",
+ 0x2199,
+ "backslashbig",
+ 0x2216,
+ "backslashBig",
+ 0x2216,
+ "backslashBigg",
+ 0x2216,
+ "backslashbigg",
+ 0x2216,
+ "bardbl",
+ 0x2016,
+ "bracehtipdownleft",
+ 0xfe37,
+ "bracehtipdownright",
+ 0xfe37,
+ "bracehtipupleft",
+ 0xfe38,
+ "bracehtipupright",
+ 0xfe38,
+ "braceleftBig",
+ 0x007b,
+ "braceleftbig",
+ 0x007b,
+ "braceleftbigg",
+ 0x007b,
+ "braceleftBigg",
+ 0x007b,
+ "bracerightBig",
+ 0x007d,
+ "bracerightbig",
+ 0x007d,
+ "bracerightbigg",
+ 0x007d,
+ "bracerightBigg",
+ 0x007d,
+ "bracketleftbig",
+ 0x005b,
+ "bracketleftBig",
+ 0x005b,
+ "bracketleftbigg",
+ 0x005b,
+ "bracketleftBigg",
+ 0x005b,
+ "bracketrightBig",
+ 0x005d,
+ "bracketrightbig",
+ 0x005d,
+ "bracketrightbigg",
+ 0x005d,
+ "bracketrightBigg",
+ 0x005d,
+ "ceilingleftbig",
+ 0x2308,
+ "ceilingleftBig",
+ 0x2308,
+ "ceilingleftBigg",
+ 0x2308,
+ "ceilingleftbigg",
+ 0x2308,
+ "ceilingrightbig",
+ 0x2309,
+ "ceilingrightBig",
+ 0x2309,
+ "ceilingrightbigg",
+ 0x2309,
+ "ceilingrightBigg",
+ 0x2309,
+ "circledotdisplay",
+ 0x2299,
+ "circledottext",
+ 0x2299,
+ "circlemultiplydisplay",
+ 0x2297,
+ "circlemultiplytext",
+ 0x2297,
+ "circleplusdisplay",
+ 0x2295,
+ "circleplustext",
+ 0x2295,
+ "contintegraldisplay",
+ 0x222e,
+ "contintegraltext",
+ 0x222e,
+ "coproductdisplay",
+ 0x2210,
+ "coproducttext",
+ 0x2210,
+ "floorleftBig",
+ 0x230a,
+ "floorleftbig",
+ 0x230a,
+ "floorleftbigg",
+ 0x230a,
+ "floorleftBigg",
+ 0x230a,
+ "floorrightbig",
+ 0x230b,
+ "floorrightBig",
+ 0x230b,
+ "floorrightBigg",
+ 0x230b,
+ "floorrightbigg",
+ 0x230b,
+ "hatwide",
+ 0x0302,
+ "hatwider",
+ 0x0302,
+ "hatwidest",
+ 0x0302,
+ "intercal",
+ 0x1d40,
+ "integraldisplay",
+ 0x222b,
+ "integraltext",
+ 0x222b,
+ "intersectiondisplay",
+ 0x22c2,
+ "intersectiontext",
+ 0x22c2,
+ "logicalanddisplay",
+ 0x2227,
+ "logicalandtext",
+ 0x2227,
+ "logicalordisplay",
+ 0x2228,
+ "logicalortext",
+ 0x2228,
+ "parenleftBig",
+ 0x0028,
+ "parenleftbig",
+ 0x0028,
+ "parenleftBigg",
+ 0x0028,
+ "parenleftbigg",
+ 0x0028,
+ "parenrightBig",
+ 0x0029,
+ "parenrightbig",
+ 0x0029,
+ "parenrightBigg",
+ 0x0029,
+ "parenrightbigg",
+ 0x0029,
+ "prime",
+ 0x2032,
+ "productdisplay",
+ 0x220f,
+ "producttext",
+ 0x220f,
+ "radicalbig",
+ 0x221a,
+ "radicalBig",
+ 0x221a,
+ "radicalBigg",
+ 0x221a,
+ "radicalbigg",
+ 0x221a,
+ "radicalbt",
+ 0x221a,
+ "radicaltp",
+ 0x221a,
+ "radicalvertex",
+ 0x221a,
+ "slashbig",
+ 0x002f,
+ "slashBig",
+ 0x002f,
+ "slashBigg",
+ 0x002f,
+ "slashbigg",
+ 0x002f,
+ "summationdisplay",
+ 0x2211,
+ "summationtext",
+ 0x2211,
+ "tildewide",
+ 0x02dc,
+ "tildewider",
+ 0x02dc,
+ "tildewidest",
+ 0x02dc,
+ "uniondisplay",
+ 0x22c3,
+ "unionmultidisplay",
+ 0x228e,
+ "unionmultitext",
+ 0x228e,
+ "unionsqdisplay",
+ 0x2294,
+ "unionsqtext",
+ 0x2294,
+ "uniontext",
+ 0x22c3,
+ "vextenddouble",
+ 0x2225,
+ "vextendsingle",
+ 0x2223
+ ];
});
-var getDingbatsGlyphsUnicode = getLookupTableFactory(function (t) {
- t.space = 0x0020;
- t.a1 = 0x2701;
- t.a2 = 0x2702;
- t.a202 = 0x2703;
- t.a3 = 0x2704;
- t.a4 = 0x260e;
- t.a5 = 0x2706;
- t.a119 = 0x2707;
- t.a118 = 0x2708;
- t.a117 = 0x2709;
- t.a11 = 0x261b;
- t.a12 = 0x261e;
- t.a13 = 0x270c;
- t.a14 = 0x270d;
- t.a15 = 0x270e;
- t.a16 = 0x270f;
- t.a105 = 0x2710;
- t.a17 = 0x2711;
- t.a18 = 0x2712;
- t.a19 = 0x2713;
- t.a20 = 0x2714;
- t.a21 = 0x2715;
- t.a22 = 0x2716;
- t.a23 = 0x2717;
- t.a24 = 0x2718;
- t.a25 = 0x2719;
- t.a26 = 0x271a;
- t.a27 = 0x271b;
- t.a28 = 0x271c;
- t.a6 = 0x271d;
- t.a7 = 0x271e;
- t.a8 = 0x271f;
- t.a9 = 0x2720;
- t.a10 = 0x2721;
- t.a29 = 0x2722;
- t.a30 = 0x2723;
- t.a31 = 0x2724;
- t.a32 = 0x2725;
- t.a33 = 0x2726;
- t.a34 = 0x2727;
- t.a35 = 0x2605;
- t.a36 = 0x2729;
- t.a37 = 0x272a;
- t.a38 = 0x272b;
- t.a39 = 0x272c;
- t.a40 = 0x272d;
- t.a41 = 0x272e;
- t.a42 = 0x272f;
- t.a43 = 0x2730;
- t.a44 = 0x2731;
- t.a45 = 0x2732;
- t.a46 = 0x2733;
- t.a47 = 0x2734;
- t.a48 = 0x2735;
- t.a49 = 0x2736;
- t.a50 = 0x2737;
- t.a51 = 0x2738;
- t.a52 = 0x2739;
- t.a53 = 0x273a;
- t.a54 = 0x273b;
- t.a55 = 0x273c;
- t.a56 = 0x273d;
- t.a57 = 0x273e;
- t.a58 = 0x273f;
- t.a59 = 0x2740;
- t.a60 = 0x2741;
- t.a61 = 0x2742;
- t.a62 = 0x2743;
- t.a63 = 0x2744;
- t.a64 = 0x2745;
- t.a65 = 0x2746;
- t.a66 = 0x2747;
- t.a67 = 0x2748;
- t.a68 = 0x2749;
- t.a69 = 0x274a;
- t.a70 = 0x274b;
- t.a71 = 0x25cf;
- t.a72 = 0x274d;
- t.a73 = 0x25a0;
- t.a74 = 0x274f;
- t.a203 = 0x2750;
- t.a75 = 0x2751;
- t.a204 = 0x2752;
- t.a76 = 0x25b2;
- t.a77 = 0x25bc;
- t.a78 = 0x25c6;
- t.a79 = 0x2756;
- t.a81 = 0x25d7;
- t.a82 = 0x2758;
- t.a83 = 0x2759;
- t.a84 = 0x275a;
- t.a97 = 0x275b;
- t.a98 = 0x275c;
- t.a99 = 0x275d;
- t.a100 = 0x275e;
- t.a101 = 0x2761;
- t.a102 = 0x2762;
- t.a103 = 0x2763;
- t.a104 = 0x2764;
- t.a106 = 0x2765;
- t.a107 = 0x2766;
- t.a108 = 0x2767;
- t.a112 = 0x2663;
- t.a111 = 0x2666;
- t.a110 = 0x2665;
- t.a109 = 0x2660;
- t.a120 = 0x2460;
- t.a121 = 0x2461;
- t.a122 = 0x2462;
- t.a123 = 0x2463;
- t.a124 = 0x2464;
- t.a125 = 0x2465;
- t.a126 = 0x2466;
- t.a127 = 0x2467;
- t.a128 = 0x2468;
- t.a129 = 0x2469;
- t.a130 = 0x2776;
- t.a131 = 0x2777;
- t.a132 = 0x2778;
- t.a133 = 0x2779;
- t.a134 = 0x277a;
- t.a135 = 0x277b;
- t.a136 = 0x277c;
- t.a137 = 0x277d;
- t.a138 = 0x277e;
- t.a139 = 0x277f;
- t.a140 = 0x2780;
- t.a141 = 0x2781;
- t.a142 = 0x2782;
- t.a143 = 0x2783;
- t.a144 = 0x2784;
- t.a145 = 0x2785;
- t.a146 = 0x2786;
- t.a147 = 0x2787;
- t.a148 = 0x2788;
- t.a149 = 0x2789;
- t.a150 = 0x278a;
- t.a151 = 0x278b;
- t.a152 = 0x278c;
- t.a153 = 0x278d;
- t.a154 = 0x278e;
- t.a155 = 0x278f;
- t.a156 = 0x2790;
- t.a157 = 0x2791;
- t.a158 = 0x2792;
- t.a159 = 0x2793;
- t.a160 = 0x2794;
- t.a161 = 0x2192;
- t.a163 = 0x2194;
- t.a164 = 0x2195;
- t.a196 = 0x2798;
- t.a165 = 0x2799;
- t.a192 = 0x279a;
- t.a166 = 0x279b;
- t.a167 = 0x279c;
- t.a168 = 0x279d;
- t.a169 = 0x279e;
- t.a170 = 0x279f;
- t.a171 = 0x27a0;
- t.a172 = 0x27a1;
- t.a173 = 0x27a2;
- t.a162 = 0x27a3;
- t.a174 = 0x27a4;
- t.a175 = 0x27a5;
- t.a176 = 0x27a6;
- t.a177 = 0x27a7;
- t.a178 = 0x27a8;
- t.a179 = 0x27a9;
- t.a193 = 0x27aa;
- t.a180 = 0x27ab;
- t.a199 = 0x27ac;
- t.a181 = 0x27ad;
- t.a200 = 0x27ae;
- t.a182 = 0x27af;
- t.a201 = 0x27b1;
- t.a183 = 0x27b2;
- t.a184 = 0x27b3;
- t.a197 = 0x27b4;
- t.a185 = 0x27b5;
- t.a194 = 0x27b6;
- t.a198 = 0x27b7;
- t.a186 = 0x27b8;
- t.a195 = 0x27b9;
- t.a187 = 0x27ba;
- t.a188 = 0x27bb;
- t.a189 = 0x27bc;
- t.a190 = 0x27bd;
- t.a191 = 0x27be;
- t.a89 = 0x2768;
- t.a90 = 0x2769;
- t.a93 = 0x276a;
- t.a94 = 0x276b;
- t.a91 = 0x276c;
- t.a92 = 0x276d;
- t.a205 = 0x276e;
- t.a85 = 0x276f;
- t.a206 = 0x2770;
- t.a86 = 0x2771;
- t.a87 = 0x2772;
- t.a88 = 0x2773;
- t.a95 = 0x2774;
- t.a96 = 0x2775;
- t[".notdef"] = 0x0000;
+const getDingbatsGlyphsUnicode = (0,_core_utils_js__WEBPACK_IMPORTED_MODULE_0__.getArrayLookupTableFactory)(function () {
+ return [
+ "space",
+ 0x0020,
+ "a1",
+ 0x2701,
+ "a2",
+ 0x2702,
+ "a202",
+ 0x2703,
+ "a3",
+ 0x2704,
+ "a4",
+ 0x260e,
+ "a5",
+ 0x2706,
+ "a119",
+ 0x2707,
+ "a118",
+ 0x2708,
+ "a117",
+ 0x2709,
+ "a11",
+ 0x261b,
+ "a12",
+ 0x261e,
+ "a13",
+ 0x270c,
+ "a14",
+ 0x270d,
+ "a15",
+ 0x270e,
+ "a16",
+ 0x270f,
+ "a105",
+ 0x2710,
+ "a17",
+ 0x2711,
+ "a18",
+ 0x2712,
+ "a19",
+ 0x2713,
+ "a20",
+ 0x2714,
+ "a21",
+ 0x2715,
+ "a22",
+ 0x2716,
+ "a23",
+ 0x2717,
+ "a24",
+ 0x2718,
+ "a25",
+ 0x2719,
+ "a26",
+ 0x271a,
+ "a27",
+ 0x271b,
+ "a28",
+ 0x271c,
+ "a6",
+ 0x271d,
+ "a7",
+ 0x271e,
+ "a8",
+ 0x271f,
+ "a9",
+ 0x2720,
+ "a10",
+ 0x2721,
+ "a29",
+ 0x2722,
+ "a30",
+ 0x2723,
+ "a31",
+ 0x2724,
+ "a32",
+ 0x2725,
+ "a33",
+ 0x2726,
+ "a34",
+ 0x2727,
+ "a35",
+ 0x2605,
+ "a36",
+ 0x2729,
+ "a37",
+ 0x272a,
+ "a38",
+ 0x272b,
+ "a39",
+ 0x272c,
+ "a40",
+ 0x272d,
+ "a41",
+ 0x272e,
+ "a42",
+ 0x272f,
+ "a43",
+ 0x2730,
+ "a44",
+ 0x2731,
+ "a45",
+ 0x2732,
+ "a46",
+ 0x2733,
+ "a47",
+ 0x2734,
+ "a48",
+ 0x2735,
+ "a49",
+ 0x2736,
+ "a50",
+ 0x2737,
+ "a51",
+ 0x2738,
+ "a52",
+ 0x2739,
+ "a53",
+ 0x273a,
+ "a54",
+ 0x273b,
+ "a55",
+ 0x273c,
+ "a56",
+ 0x273d,
+ "a57",
+ 0x273e,
+ "a58",
+ 0x273f,
+ "a59",
+ 0x2740,
+ "a60",
+ 0x2741,
+ "a61",
+ 0x2742,
+ "a62",
+ 0x2743,
+ "a63",
+ 0x2744,
+ "a64",
+ 0x2745,
+ "a65",
+ 0x2746,
+ "a66",
+ 0x2747,
+ "a67",
+ 0x2748,
+ "a68",
+ 0x2749,
+ "a69",
+ 0x274a,
+ "a70",
+ 0x274b,
+ "a71",
+ 0x25cf,
+ "a72",
+ 0x274d,
+ "a73",
+ 0x25a0,
+ "a74",
+ 0x274f,
+ "a203",
+ 0x2750,
+ "a75",
+ 0x2751,
+ "a204",
+ 0x2752,
+ "a76",
+ 0x25b2,
+ "a77",
+ 0x25bc,
+ "a78",
+ 0x25c6,
+ "a79",
+ 0x2756,
+ "a81",
+ 0x25d7,
+ "a82",
+ 0x2758,
+ "a83",
+ 0x2759,
+ "a84",
+ 0x275a,
+ "a97",
+ 0x275b,
+ "a98",
+ 0x275c,
+ "a99",
+ 0x275d,
+ "a100",
+ 0x275e,
+ "a101",
+ 0x2761,
+ "a102",
+ 0x2762,
+ "a103",
+ 0x2763,
+ "a104",
+ 0x2764,
+ "a106",
+ 0x2765,
+ "a107",
+ 0x2766,
+ "a108",
+ 0x2767,
+ "a112",
+ 0x2663,
+ "a111",
+ 0x2666,
+ "a110",
+ 0x2665,
+ "a109",
+ 0x2660,
+ "a120",
+ 0x2460,
+ "a121",
+ 0x2461,
+ "a122",
+ 0x2462,
+ "a123",
+ 0x2463,
+ "a124",
+ 0x2464,
+ "a125",
+ 0x2465,
+ "a126",
+ 0x2466,
+ "a127",
+ 0x2467,
+ "a128",
+ 0x2468,
+ "a129",
+ 0x2469,
+ "a130",
+ 0x2776,
+ "a131",
+ 0x2777,
+ "a132",
+ 0x2778,
+ "a133",
+ 0x2779,
+ "a134",
+ 0x277a,
+ "a135",
+ 0x277b,
+ "a136",
+ 0x277c,
+ "a137",
+ 0x277d,
+ "a138",
+ 0x277e,
+ "a139",
+ 0x277f,
+ "a140",
+ 0x2780,
+ "a141",
+ 0x2781,
+ "a142",
+ 0x2782,
+ "a143",
+ 0x2783,
+ "a144",
+ 0x2784,
+ "a145",
+ 0x2785,
+ "a146",
+ 0x2786,
+ "a147",
+ 0x2787,
+ "a148",
+ 0x2788,
+ "a149",
+ 0x2789,
+ "a150",
+ 0x278a,
+ "a151",
+ 0x278b,
+ "a152",
+ 0x278c,
+ "a153",
+ 0x278d,
+ "a154",
+ 0x278e,
+ "a155",
+ 0x278f,
+ "a156",
+ 0x2790,
+ "a157",
+ 0x2791,
+ "a158",
+ 0x2792,
+ "a159",
+ 0x2793,
+ "a160",
+ 0x2794,
+ "a161",
+ 0x2192,
+ "a163",
+ 0x2194,
+ "a164",
+ 0x2195,
+ "a196",
+ 0x2798,
+ "a165",
+ 0x2799,
+ "a192",
+ 0x279a,
+ "a166",
+ 0x279b,
+ "a167",
+ 0x279c,
+ "a168",
+ 0x279d,
+ "a169",
+ 0x279e,
+ "a170",
+ 0x279f,
+ "a171",
+ 0x27a0,
+ "a172",
+ 0x27a1,
+ "a173",
+ 0x27a2,
+ "a162",
+ 0x27a3,
+ "a174",
+ 0x27a4,
+ "a175",
+ 0x27a5,
+ "a176",
+ 0x27a6,
+ "a177",
+ 0x27a7,
+ "a178",
+ 0x27a8,
+ "a179",
+ 0x27a9,
+ "a193",
+ 0x27aa,
+ "a180",
+ 0x27ab,
+ "a199",
+ 0x27ac,
+ "a181",
+ 0x27ad,
+ "a200",
+ 0x27ae,
+ "a182",
+ 0x27af,
+ "a201",
+ 0x27b1,
+ "a183",
+ 0x27b2,
+ "a184",
+ 0x27b3,
+ "a197",
+ 0x27b4,
+ "a185",
+ 0x27b5,
+ "a194",
+ 0x27b6,
+ "a198",
+ 0x27b7,
+ "a186",
+ 0x27b8,
+ "a195",
+ 0x27b9,
+ "a187",
+ 0x27ba,
+ "a188",
+ 0x27bb,
+ "a189",
+ 0x27bc,
+ "a190",
+ 0x27bd,
+ "a191",
+ 0x27be,
+ "a89",
+ 0x2768,
+ "a90",
+ 0x2769,
+ "a93",
+ 0x276a,
+ "a94",
+ 0x276b,
+ "a91",
+ 0x276c,
+ "a92",
+ 0x276d,
+ "a205",
+ 0x276e,
+ "a85",
+ 0x276f,
+ "a206",
+ 0x2770,
+ "a86",
+ 0x2771,
+ "a87",
+ 0x2772,
+ "a88",
+ 0x2773,
+ "a95",
+ 0x2774,
+ "a96",
+ 0x2775,
+ ".notdef",
+ 0x0000
+ ];
});
-exports.getGlyphsUnicode = getGlyphsUnicode;
-exports.getDingbatsGlyphsUnicode = getDingbatsGlyphsUnicode;
+
/***/ }),
-/* 35 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 40 */
+/***/ ((__unused_webpack_module, __webpack_exports__, __w_pdfjs_require__) => {
+
+__w_pdfjs_require__.r(__webpack_exports__);
+/* harmony export */ __w_pdfjs_require__.d(__webpack_exports__, {
+/* harmony export */ "getNormalizedUnicodes": () => (/* binding */ getNormalizedUnicodes),
+/* harmony export */ "getUnicodeForGlyph": () => (/* binding */ getUnicodeForGlyph),
+/* harmony export */ "getUnicodeRangeFor": () => (/* binding */ getUnicodeRangeFor),
+/* harmony export */ "mapSpecialUnicodeValues": () => (/* binding */ mapSpecialUnicodeValues),
+/* harmony export */ "reverseIfRtl": () => (/* binding */ reverseIfRtl)
+/* harmony export */ });
+/* harmony import */ var _core_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __w_pdfjs_require__(9);
+
+const getSpecialPUASymbols = (0,_core_utils_js__WEBPACK_IMPORTED_MODULE_0__.getLookupTableFactory)(function (t) {
+ t[63721] = 0x00a9;
+ t[63193] = 0x00a9;
+ t[63720] = 0x00ae;
+ t[63194] = 0x00ae;
+ t[63722] = 0x2122;
+ t[63195] = 0x2122;
+ t[63729] = 0x23a7;
+ t[63730] = 0x23a8;
+ t[63731] = 0x23a9;
+ t[63740] = 0x23ab;
+ t[63741] = 0x23ac;
+ t[63742] = 0x23ad;
+ t[63726] = 0x23a1;
+ t[63727] = 0x23a2;
+ t[63728] = 0x23a3;
+ t[63737] = 0x23a4;
+ t[63738] = 0x23a5;
+ t[63739] = 0x23a6;
+ t[63723] = 0x239b;
+ t[63724] = 0x239c;
+ t[63725] = 0x239d;
+ t[63734] = 0x239e;
+ t[63735] = 0x239f;
+ t[63736] = 0x23a0;
+});
+function mapSpecialUnicodeValues(code) {
+ if (code >= 0xfff0 && code <= 0xffff) {
+ return 0;
+ } else if (code >= 0xf600 && code <= 0xf8ff) {
+ return getSpecialPUASymbols()[code] || code;
+ } else if (code === 0x00ad) {
+ return 0x002d;
+ }
+ return code;
+}
+function getUnicodeForGlyph(name, glyphsUnicodeMap) {
+ let unicode = glyphsUnicodeMap[name];
+ if (unicode !== undefined) {
+ return unicode;
+ }
+ if (!name) {
+ return -1;
+ }
+ if (name[0] === "u") {
+ const nameLen = name.length;
+ let hexStr;
+ if (nameLen === 7 && name[1] === "n" && name[2] === "i") {
+ hexStr = name.substring(3);
+ } else if (nameLen >= 5 && nameLen <= 7) {
+ hexStr = name.substring(1);
+ } else {
+ return -1;
+ }
+ if (hexStr === hexStr.toUpperCase()) {
+ unicode = parseInt(hexStr, 16);
+ if (unicode >= 0) {
+ return unicode;
+ }
+ }
+ }
+ return -1;
+}
+const UnicodeRanges = [
+ {
+ begin: 0x0000,
+ end: 0x007f
+ },
+ {
+ begin: 0x0080,
+ end: 0x00ff
+ },
+ {
+ begin: 0x0100,
+ end: 0x017f
+ },
+ {
+ begin: 0x0180,
+ end: 0x024f
+ },
+ {
+ begin: 0x0250,
+ end: 0x02af
+ },
+ {
+ begin: 0x02b0,
+ end: 0x02ff
+ },
+ {
+ begin: 0x0300,
+ end: 0x036f
+ },
+ {
+ begin: 0x0370,
+ end: 0x03ff
+ },
+ {
+ begin: 0x2c80,
+ end: 0x2cff
+ },
+ {
+ begin: 0x0400,
+ end: 0x04ff
+ },
+ {
+ begin: 0x0530,
+ end: 0x058f
+ },
+ {
+ begin: 0x0590,
+ end: 0x05ff
+ },
+ {
+ begin: 0xa500,
+ end: 0xa63f
+ },
+ {
+ begin: 0x0600,
+ end: 0x06ff
+ },
+ {
+ begin: 0x07c0,
+ end: 0x07ff
+ },
+ {
+ begin: 0x0900,
+ end: 0x097f
+ },
+ {
+ begin: 0x0980,
+ end: 0x09ff
+ },
+ {
+ begin: 0x0a00,
+ end: 0x0a7f
+ },
+ {
+ begin: 0x0a80,
+ end: 0x0aff
+ },
+ {
+ begin: 0x0b00,
+ end: 0x0b7f
+ },
+ {
+ begin: 0x0b80,
+ end: 0x0bff
+ },
+ {
+ begin: 0x0c00,
+ end: 0x0c7f
+ },
+ {
+ begin: 0x0c80,
+ end: 0x0cff
+ },
+ {
+ begin: 0x0d00,
+ end: 0x0d7f
+ },
+ {
+ begin: 0x0e00,
+ end: 0x0e7f
+ },
+ {
+ begin: 0x0e80,
+ end: 0x0eff
+ },
+ {
+ begin: 0x10a0,
+ end: 0x10ff
+ },
+ {
+ begin: 0x1b00,
+ end: 0x1b7f
+ },
+ {
+ begin: 0x1100,
+ end: 0x11ff
+ },
+ {
+ begin: 0x1e00,
+ end: 0x1eff
+ },
+ {
+ begin: 0x1f00,
+ end: 0x1fff
+ },
+ {
+ begin: 0x2000,
+ end: 0x206f
+ },
+ {
+ begin: 0x2070,
+ end: 0x209f
+ },
+ {
+ begin: 0x20a0,
+ end: 0x20cf
+ },
+ {
+ begin: 0x20d0,
+ end: 0x20ff
+ },
+ {
+ begin: 0x2100,
+ end: 0x214f
+ },
+ {
+ begin: 0x2150,
+ end: 0x218f
+ },
+ {
+ begin: 0x2190,
+ end: 0x21ff
+ },
+ {
+ begin: 0x2200,
+ end: 0x22ff
+ },
+ {
+ begin: 0x2300,
+ end: 0x23ff
+ },
+ {
+ begin: 0x2400,
+ end: 0x243f
+ },
+ {
+ begin: 0x2440,
+ end: 0x245f
+ },
+ {
+ begin: 0x2460,
+ end: 0x24ff
+ },
+ {
+ begin: 0x2500,
+ end: 0x257f
+ },
+ {
+ begin: 0x2580,
+ end: 0x259f
+ },
+ {
+ begin: 0x25a0,
+ end: 0x25ff
+ },
+ {
+ begin: 0x2600,
+ end: 0x26ff
+ },
+ {
+ begin: 0x2700,
+ end: 0x27bf
+ },
+ {
+ begin: 0x3000,
+ end: 0x303f
+ },
+ {
+ begin: 0x3040,
+ end: 0x309f
+ },
+ {
+ begin: 0x30a0,
+ end: 0x30ff
+ },
+ {
+ begin: 0x3100,
+ end: 0x312f
+ },
+ {
+ begin: 0x3130,
+ end: 0x318f
+ },
+ {
+ begin: 0xa840,
+ end: 0xa87f
+ },
+ {
+ begin: 0x3200,
+ end: 0x32ff
+ },
+ {
+ begin: 0x3300,
+ end: 0x33ff
+ },
+ {
+ begin: 0xac00,
+ end: 0xd7af
+ },
+ {
+ begin: 0xd800,
+ end: 0xdfff
+ },
+ {
+ begin: 0x10900,
+ end: 0x1091f
+ },
+ {
+ begin: 0x4e00,
+ end: 0x9fff
+ },
+ {
+ begin: 0xe000,
+ end: 0xf8ff
+ },
+ {
+ begin: 0x31c0,
+ end: 0x31ef
+ },
+ {
+ begin: 0xfb00,
+ end: 0xfb4f
+ },
+ {
+ begin: 0xfb50,
+ end: 0xfdff
+ },
+ {
+ begin: 0xfe20,
+ end: 0xfe2f
+ },
+ {
+ begin: 0xfe10,
+ end: 0xfe1f
+ },
+ {
+ begin: 0xfe50,
+ end: 0xfe6f
+ },
+ {
+ begin: 0xfe70,
+ end: 0xfeff
+ },
+ {
+ begin: 0xff00,
+ end: 0xffef
+ },
+ {
+ begin: 0xfff0,
+ end: 0xffff
+ },
+ {
+ begin: 0x0f00,
+ end: 0x0fff
+ },
+ {
+ begin: 0x0700,
+ end: 0x074f
+ },
+ {
+ begin: 0x0780,
+ end: 0x07bf
+ },
+ {
+ begin: 0x0d80,
+ end: 0x0dff
+ },
+ {
+ begin: 0x1000,
+ end: 0x109f
+ },
+ {
+ begin: 0x1200,
+ end: 0x137f
+ },
+ {
+ begin: 0x13a0,
+ end: 0x13ff
+ },
+ {
+ begin: 0x1400,
+ end: 0x167f
+ },
+ {
+ begin: 0x1680,
+ end: 0x169f
+ },
+ {
+ begin: 0x16a0,
+ end: 0x16ff
+ },
+ {
+ begin: 0x1780,
+ end: 0x17ff
+ },
+ {
+ begin: 0x1800,
+ end: 0x18af
+ },
+ {
+ begin: 0x2800,
+ end: 0x28ff
+ },
+ {
+ begin: 0xa000,
+ end: 0xa48f
+ },
+ {
+ begin: 0x1700,
+ end: 0x171f
+ },
+ {
+ begin: 0x10300,
+ end: 0x1032f
+ },
+ {
+ begin: 0x10330,
+ end: 0x1034f
+ },
+ {
+ begin: 0x10400,
+ end: 0x1044f
+ },
+ {
+ begin: 0x1d000,
+ end: 0x1d0ff
+ },
+ {
+ begin: 0x1d400,
+ end: 0x1d7ff
+ },
+ {
+ begin: 0xff000,
+ end: 0xffffd
+ },
+ {
+ begin: 0xfe00,
+ end: 0xfe0f
+ },
+ {
+ begin: 0xe0000,
+ end: 0xe007f
+ },
+ {
+ begin: 0x1900,
+ end: 0x194f
+ },
+ {
+ begin: 0x1950,
+ end: 0x197f
+ },
+ {
+ begin: 0x1980,
+ end: 0x19df
+ },
+ {
+ begin: 0x1a00,
+ end: 0x1a1f
+ },
+ {
+ begin: 0x2c00,
+ end: 0x2c5f
+ },
+ {
+ begin: 0x2d30,
+ end: 0x2d7f
+ },
+ {
+ begin: 0x4dc0,
+ end: 0x4dff
+ },
+ {
+ begin: 0xa800,
+ end: 0xa82f
+ },
+ {
+ begin: 0x10000,
+ end: 0x1007f
+ },
+ {
+ begin: 0x10140,
+ end: 0x1018f
+ },
+ {
+ begin: 0x10380,
+ end: 0x1039f
+ },
+ {
+ begin: 0x103a0,
+ end: 0x103df
+ },
+ {
+ begin: 0x10450,
+ end: 0x1047f
+ },
+ {
+ begin: 0x10480,
+ end: 0x104af
+ },
+ {
+ begin: 0x10800,
+ end: 0x1083f
+ },
+ {
+ begin: 0x10a00,
+ end: 0x10a5f
+ },
+ {
+ begin: 0x1d300,
+ end: 0x1d35f
+ },
+ {
+ begin: 0x12000,
+ end: 0x123ff
+ },
+ {
+ begin: 0x1d360,
+ end: 0x1d37f
+ },
+ {
+ begin: 0x1b80,
+ end: 0x1bbf
+ },
+ {
+ begin: 0x1c00,
+ end: 0x1c4f
+ },
+ {
+ begin: 0x1c50,
+ end: 0x1c7f
+ },
+ {
+ begin: 0xa880,
+ end: 0xa8df
+ },
+ {
+ begin: 0xa900,
+ end: 0xa92f
+ },
+ {
+ begin: 0xa930,
+ end: 0xa95f
+ },
+ {
+ begin: 0xaa00,
+ end: 0xaa5f
+ },
+ {
+ begin: 0x10190,
+ end: 0x101cf
+ },
+ {
+ begin: 0x101d0,
+ end: 0x101ff
+ },
+ {
+ begin: 0x102a0,
+ end: 0x102df
+ },
+ {
+ begin: 0x1f030,
+ end: 0x1f09f
+ }
+];
+function getUnicodeRangeFor(value) {
+ for (let i = 0, ii = UnicodeRanges.length; i < ii; i++) {
+ const range = UnicodeRanges[i];
+ if (value >= range.begin && value < range.end) {
+ return i;
+ }
+ }
+ return -1;
+}
+function isRTLRangeFor(value) {
+ let range = UnicodeRanges[13];
+ if (value >= range.begin && value < range.end) {
+ return true;
+ }
+ range = UnicodeRanges[11];
+ if (value >= range.begin && value < range.end) {
+ return true;
+ }
+ return false;
+}
+const getNormalizedUnicodes = (0,_core_utils_js__WEBPACK_IMPORTED_MODULE_0__.getArrayLookupTableFactory)(function () {
+ return [
+ "\u00A8",
+ "\u0020\u0308",
+ "\u00AF",
+ "\u0020\u0304",
+ "\u00B4",
+ "\u0020\u0301",
+ "\u00B5",
+ "\u03BC",
+ "\u00B8",
+ "\u0020\u0327",
+ "\u0132",
+ "\u0049\u004A",
+ "\u0133",
+ "\u0069\u006A",
+ "\u013F",
+ "\u004C\u00B7",
+ "\u0140",
+ "\u006C\u00B7",
+ "\u0149",
+ "\u02BC\u006E",
+ "\u017F",
+ "\u0073",
+ "\u01C4",
+ "\u0044\u017D",
+ "\u01C5",
+ "\u0044\u017E",
+ "\u01C6",
+ "\u0064\u017E",
+ "\u01C7",
+ "\u004C\u004A",
+ "\u01C8",
+ "\u004C\u006A",
+ "\u01C9",
+ "\u006C\u006A",
+ "\u01CA",
+ "\u004E\u004A",
+ "\u01CB",
+ "\u004E\u006A",
+ "\u01CC",
+ "\u006E\u006A",
+ "\u01F1",
+ "\u0044\u005A",
+ "\u01F2",
+ "\u0044\u007A",
+ "\u01F3",
+ "\u0064\u007A",
+ "\u02D8",
+ "\u0020\u0306",
+ "\u02D9",
+ "\u0020\u0307",
+ "\u02DA",
+ "\u0020\u030A",
+ "\u02DB",
+ "\u0020\u0328",
+ "\u02DC",
+ "\u0020\u0303",
+ "\u02DD",
+ "\u0020\u030B",
+ "\u037A",
+ "\u0020\u0345",
+ "\u0384",
+ "\u0020\u0301",
+ "\u03D0",
+ "\u03B2",
+ "\u03D1",
+ "\u03B8",
+ "\u03D2",
+ "\u03A5",
+ "\u03D5",
+ "\u03C6",
+ "\u03D6",
+ "\u03C0",
+ "\u03F0",
+ "\u03BA",
+ "\u03F1",
+ "\u03C1",
+ "\u03F2",
+ "\u03C2",
+ "\u03F4",
+ "\u0398",
+ "\u03F5",
+ "\u03B5",
+ "\u03F9",
+ "\u03A3",
+ "\u0587",
+ "\u0565\u0582",
+ "\u0675",
+ "\u0627\u0674",
+ "\u0676",
+ "\u0648\u0674",
+ "\u0677",
+ "\u06C7\u0674",
+ "\u0678",
+ "\u064A\u0674",
+ "\u0E33",
+ "\u0E4D\u0E32",
+ "\u0EB3",
+ "\u0ECD\u0EB2",
+ "\u0EDC",
+ "\u0EAB\u0E99",
+ "\u0EDD",
+ "\u0EAB\u0EA1",
+ "\u0F77",
+ "\u0FB2\u0F81",
+ "\u0F79",
+ "\u0FB3\u0F81",
+ "\u1E9A",
+ "\u0061\u02BE",
+ "\u1FBD",
+ "\u0020\u0313",
+ "\u1FBF",
+ "\u0020\u0313",
+ "\u1FC0",
+ "\u0020\u0342",
+ "\u1FFE",
+ "\u0020\u0314",
+ "\u2002",
+ "\u0020",
+ "\u2003",
+ "\u0020",
+ "\u2004",
+ "\u0020",
+ "\u2005",
+ "\u0020",
+ "\u2006",
+ "\u0020",
+ "\u2008",
+ "\u0020",
+ "\u2009",
+ "\u0020",
+ "\u200A",
+ "\u0020",
+ "\u2017",
+ "\u0020\u0333",
+ "\u2024",
+ "\u002E",
+ "\u2025",
+ "\u002E\u002E",
+ "\u2026",
+ "\u002E\u002E\u002E",
+ "\u2033",
+ "\u2032\u2032",
+ "\u2034",
+ "\u2032\u2032\u2032",
+ "\u2036",
+ "\u2035\u2035",
+ "\u2037",
+ "\u2035\u2035\u2035",
+ "\u203C",
+ "\u0021\u0021",
+ "\u203E",
+ "\u0020\u0305",
+ "\u2047",
+ "\u003F\u003F",
+ "\u2048",
+ "\u003F\u0021",
+ "\u2049",
+ "\u0021\u003F",
+ "\u2057",
+ "\u2032\u2032\u2032\u2032",
+ "\u205F",
+ "\u0020",
+ "\u20A8",
+ "\u0052\u0073",
+ "\u2100",
+ "\u0061\u002F\u0063",
+ "\u2101",
+ "\u0061\u002F\u0073",
+ "\u2103",
+ "\u00B0\u0043",
+ "\u2105",
+ "\u0063\u002F\u006F",
+ "\u2106",
+ "\u0063\u002F\u0075",
+ "\u2107",
+ "\u0190",
+ "\u2109",
+ "\u00B0\u0046",
+ "\u2116",
+ "\u004E\u006F",
+ "\u2121",
+ "\u0054\u0045\u004C",
+ "\u2135",
+ "\u05D0",
+ "\u2136",
+ "\u05D1",
+ "\u2137",
+ "\u05D2",
+ "\u2138",
+ "\u05D3",
+ "\u213B",
+ "\u0046\u0041\u0058",
+ "\u2160",
+ "\u0049",
+ "\u2161",
+ "\u0049\u0049",
+ "\u2162",
+ "\u0049\u0049\u0049",
+ "\u2163",
+ "\u0049\u0056",
+ "\u2164",
+ "\u0056",
+ "\u2165",
+ "\u0056\u0049",
+ "\u2166",
+ "\u0056\u0049\u0049",
+ "\u2167",
+ "\u0056\u0049\u0049\u0049",
+ "\u2168",
+ "\u0049\u0058",
+ "\u2169",
+ "\u0058",
+ "\u216A",
+ "\u0058\u0049",
+ "\u216B",
+ "\u0058\u0049\u0049",
+ "\u216C",
+ "\u004C",
+ "\u216D",
+ "\u0043",
+ "\u216E",
+ "\u0044",
+ "\u216F",
+ "\u004D",
+ "\u2170",
+ "\u0069",
+ "\u2171",
+ "\u0069\u0069",
+ "\u2172",
+ "\u0069\u0069\u0069",
+ "\u2173",
+ "\u0069\u0076",
+ "\u2174",
+ "\u0076",
+ "\u2175",
+ "\u0076\u0069",
+ "\u2176",
+ "\u0076\u0069\u0069",
+ "\u2177",
+ "\u0076\u0069\u0069\u0069",
+ "\u2178",
+ "\u0069\u0078",
+ "\u2179",
+ "\u0078",
+ "\u217A",
+ "\u0078\u0069",
+ "\u217B",
+ "\u0078\u0069\u0069",
+ "\u217C",
+ "\u006C",
+ "\u217D",
+ "\u0063",
+ "\u217E",
+ "\u0064",
+ "\u217F",
+ "\u006D",
+ "\u222C",
+ "\u222B\u222B",
+ "\u222D",
+ "\u222B\u222B\u222B",
+ "\u222F",
+ "\u222E\u222E",
+ "\u2230",
+ "\u222E\u222E\u222E",
+ "\u2474",
+ "\u0028\u0031\u0029",
+ "\u2475",
+ "\u0028\u0032\u0029",
+ "\u2476",
+ "\u0028\u0033\u0029",
+ "\u2477",
+ "\u0028\u0034\u0029",
+ "\u2478",
+ "\u0028\u0035\u0029",
+ "\u2479",
+ "\u0028\u0036\u0029",
+ "\u247A",
+ "\u0028\u0037\u0029",
+ "\u247B",
+ "\u0028\u0038\u0029",
+ "\u247C",
+ "\u0028\u0039\u0029",
+ "\u247D",
+ "\u0028\u0031\u0030\u0029",
+ "\u247E",
+ "\u0028\u0031\u0031\u0029",
+ "\u247F",
+ "\u0028\u0031\u0032\u0029",
+ "\u2480",
+ "\u0028\u0031\u0033\u0029",
+ "\u2481",
+ "\u0028\u0031\u0034\u0029",
+ "\u2482",
+ "\u0028\u0031\u0035\u0029",
+ "\u2483",
+ "\u0028\u0031\u0036\u0029",
+ "\u2484",
+ "\u0028\u0031\u0037\u0029",
+ "\u2485",
+ "\u0028\u0031\u0038\u0029",
+ "\u2486",
+ "\u0028\u0031\u0039\u0029",
+ "\u2487",
+ "\u0028\u0032\u0030\u0029",
+ "\u2488",
+ "\u0031\u002E",
+ "\u2489",
+ "\u0032\u002E",
+ "\u248A",
+ "\u0033\u002E",
+ "\u248B",
+ "\u0034\u002E",
+ "\u248C",
+ "\u0035\u002E",
+ "\u248D",
+ "\u0036\u002E",
+ "\u248E",
+ "\u0037\u002E",
+ "\u248F",
+ "\u0038\u002E",
+ "\u2490",
+ "\u0039\u002E",
+ "\u2491",
+ "\u0031\u0030\u002E",
+ "\u2492",
+ "\u0031\u0031\u002E",
+ "\u2493",
+ "\u0031\u0032\u002E",
+ "\u2494",
+ "\u0031\u0033\u002E",
+ "\u2495",
+ "\u0031\u0034\u002E",
+ "\u2496",
+ "\u0031\u0035\u002E",
+ "\u2497",
+ "\u0031\u0036\u002E",
+ "\u2498",
+ "\u0031\u0037\u002E",
+ "\u2499",
+ "\u0031\u0038\u002E",
+ "\u249A",
+ "\u0031\u0039\u002E",
+ "\u249B",
+ "\u0032\u0030\u002E",
+ "\u249C",
+ "\u0028\u0061\u0029",
+ "\u249D",
+ "\u0028\u0062\u0029",
+ "\u249E",
+ "\u0028\u0063\u0029",
+ "\u249F",
+ "\u0028\u0064\u0029",
+ "\u24A0",
+ "\u0028\u0065\u0029",
+ "\u24A1",
+ "\u0028\u0066\u0029",
+ "\u24A2",
+ "\u0028\u0067\u0029",
+ "\u24A3",
+ "\u0028\u0068\u0029",
+ "\u24A4",
+ "\u0028\u0069\u0029",
+ "\u24A5",
+ "\u0028\u006A\u0029",
+ "\u24A6",
+ "\u0028\u006B\u0029",
+ "\u24A7",
+ "\u0028\u006C\u0029",
+ "\u24A8",
+ "\u0028\u006D\u0029",
+ "\u24A9",
+ "\u0028\u006E\u0029",
+ "\u24AA",
+ "\u0028\u006F\u0029",
+ "\u24AB",
+ "\u0028\u0070\u0029",
+ "\u24AC",
+ "\u0028\u0071\u0029",
+ "\u24AD",
+ "\u0028\u0072\u0029",
+ "\u24AE",
+ "\u0028\u0073\u0029",
+ "\u24AF",
+ "\u0028\u0074\u0029",
+ "\u24B0",
+ "\u0028\u0075\u0029",
+ "\u24B1",
+ "\u0028\u0076\u0029",
+ "\u24B2",
+ "\u0028\u0077\u0029",
+ "\u24B3",
+ "\u0028\u0078\u0029",
+ "\u24B4",
+ "\u0028\u0079\u0029",
+ "\u24B5",
+ "\u0028\u007A\u0029",
+ "\u2A0C",
+ "\u222B\u222B\u222B\u222B",
+ "\u2A74",
+ "\u003A\u003A\u003D",
+ "\u2A75",
+ "\u003D\u003D",
+ "\u2A76",
+ "\u003D\u003D\u003D",
+ "\u2E9F",
+ "\u6BCD",
+ "\u2EF3",
+ "\u9F9F",
+ "\u2F00",
+ "\u4E00",
+ "\u2F01",
+ "\u4E28",
+ "\u2F02",
+ "\u4E36",
+ "\u2F03",
+ "\u4E3F",
+ "\u2F04",
+ "\u4E59",
+ "\u2F05",
+ "\u4E85",
+ "\u2F06",
+ "\u4E8C",
+ "\u2F07",
+ "\u4EA0",
+ "\u2F08",
+ "\u4EBA",
+ "\u2F09",
+ "\u513F",
+ "\u2F0A",
+ "\u5165",
+ "\u2F0B",
+ "\u516B",
+ "\u2F0C",
+ "\u5182",
+ "\u2F0D",
+ "\u5196",
+ "\u2F0E",
+ "\u51AB",
+ "\u2F0F",
+ "\u51E0",
+ "\u2F10",
+ "\u51F5",
+ "\u2F11",
+ "\u5200",
+ "\u2F12",
+ "\u529B",
+ "\u2F13",
+ "\u52F9",
+ "\u2F14",
+ "\u5315",
+ "\u2F15",
+ "\u531A",
+ "\u2F16",
+ "\u5338",
+ "\u2F17",
+ "\u5341",
+ "\u2F18",
+ "\u535C",
+ "\u2F19",
+ "\u5369",
+ "\u2F1A",
+ "\u5382",
+ "\u2F1B",
+ "\u53B6",
+ "\u2F1C",
+ "\u53C8",
+ "\u2F1D",
+ "\u53E3",
+ "\u2F1E",
+ "\u56D7",
+ "\u2F1F",
+ "\u571F",
+ "\u2F20",
+ "\u58EB",
+ "\u2F21",
+ "\u5902",
+ "\u2F22",
+ "\u590A",
+ "\u2F23",
+ "\u5915",
+ "\u2F24",
+ "\u5927",
+ "\u2F25",
+ "\u5973",
+ "\u2F26",
+ "\u5B50",
+ "\u2F27",
+ "\u5B80",
+ "\u2F28",
+ "\u5BF8",
+ "\u2F29",
+ "\u5C0F",
+ "\u2F2A",
+ "\u5C22",
+ "\u2F2B",
+ "\u5C38",
+ "\u2F2C",
+ "\u5C6E",
+ "\u2F2D",
+ "\u5C71",
+ "\u2F2E",
+ "\u5DDB",
+ "\u2F2F",
+ "\u5DE5",
+ "\u2F30",
+ "\u5DF1",
+ "\u2F31",
+ "\u5DFE",
+ "\u2F32",
+ "\u5E72",
+ "\u2F33",
+ "\u5E7A",
+ "\u2F34",
+ "\u5E7F",
+ "\u2F35",
+ "\u5EF4",
+ "\u2F36",
+ "\u5EFE",
+ "\u2F37",
+ "\u5F0B",
+ "\u2F38",
+ "\u5F13",
+ "\u2F39",
+ "\u5F50",
+ "\u2F3A",
+ "\u5F61",
+ "\u2F3B",
+ "\u5F73",
+ "\u2F3C",
+ "\u5FC3",
+ "\u2F3D",
+ "\u6208",
+ "\u2F3E",
+ "\u6236",
+ "\u2F3F",
+ "\u624B",
+ "\u2F40",
+ "\u652F",
+ "\u2F41",
+ "\u6534",
+ "\u2F42",
+ "\u6587",
+ "\u2F43",
+ "\u6597",
+ "\u2F44",
+ "\u65A4",
+ "\u2F45",
+ "\u65B9",
+ "\u2F46",
+ "\u65E0",
+ "\u2F47",
+ "\u65E5",
+ "\u2F48",
+ "\u66F0",
+ "\u2F49",
+ "\u6708",
+ "\u2F4A",
+ "\u6728",
+ "\u2F4B",
+ "\u6B20",
+ "\u2F4C",
+ "\u6B62",
+ "\u2F4D",
+ "\u6B79",
+ "\u2F4E",
+ "\u6BB3",
+ "\u2F4F",
+ "\u6BCB",
+ "\u2F50",
+ "\u6BD4",
+ "\u2F51",
+ "\u6BDB",
+ "\u2F52",
+ "\u6C0F",
+ "\u2F53",
+ "\u6C14",
+ "\u2F54",
+ "\u6C34",
+ "\u2F55",
+ "\u706B",
+ "\u2F56",
+ "\u722A",
+ "\u2F57",
+ "\u7236",
+ "\u2F58",
+ "\u723B",
+ "\u2F59",
+ "\u723F",
+ "\u2F5A",
+ "\u7247",
+ "\u2F5B",
+ "\u7259",
+ "\u2F5C",
+ "\u725B",
+ "\u2F5D",
+ "\u72AC",
+ "\u2F5E",
+ "\u7384",
+ "\u2F5F",
+ "\u7389",
+ "\u2F60",
+ "\u74DC",
+ "\u2F61",
+ "\u74E6",
+ "\u2F62",
+ "\u7518",
+ "\u2F63",
+ "\u751F",
+ "\u2F64",
+ "\u7528",
+ "\u2F65",
+ "\u7530",
+ "\u2F66",
+ "\u758B",
+ "\u2F67",
+ "\u7592",
+ "\u2F68",
+ "\u7676",
+ "\u2F69",
+ "\u767D",
+ "\u2F6A",
+ "\u76AE",
+ "\u2F6B",
+ "\u76BF",
+ "\u2F6C",
+ "\u76EE",
+ "\u2F6D",
+ "\u77DB",
+ "\u2F6E",
+ "\u77E2",
+ "\u2F6F",
+ "\u77F3",
+ "\u2F70",
+ "\u793A",
+ "\u2F71",
+ "\u79B8",
+ "\u2F72",
+ "\u79BE",
+ "\u2F73",
+ "\u7A74",
+ "\u2F74",
+ "\u7ACB",
+ "\u2F75",
+ "\u7AF9",
+ "\u2F76",
+ "\u7C73",
+ "\u2F77",
+ "\u7CF8",
+ "\u2F78",
+ "\u7F36",
+ "\u2F79",
+ "\u7F51",
+ "\u2F7A",
+ "\u7F8A",
+ "\u2F7B",
+ "\u7FBD",
+ "\u2F7C",
+ "\u8001",
+ "\u2F7D",
+ "\u800C",
+ "\u2F7E",
+ "\u8012",
+ "\u2F7F",
+ "\u8033",
+ "\u2F80",
+ "\u807F",
+ "\u2F81",
+ "\u8089",
+ "\u2F82",
+ "\u81E3",
+ "\u2F83",
+ "\u81EA",
+ "\u2F84",
+ "\u81F3",
+ "\u2F85",
+ "\u81FC",
+ "\u2F86",
+ "\u820C",
+ "\u2F87",
+ "\u821B",
+ "\u2F88",
+ "\u821F",
+ "\u2F89",
+ "\u826E",
+ "\u2F8A",
+ "\u8272",
+ "\u2F8B",
+ "\u8278",
+ "\u2F8C",
+ "\u864D",
+ "\u2F8D",
+ "\u866B",
+ "\u2F8E",
+ "\u8840",
+ "\u2F8F",
+ "\u884C",
+ "\u2F90",
+ "\u8863",
+ "\u2F91",
+ "\u897E",
+ "\u2F92",
+ "\u898B",
+ "\u2F93",
+ "\u89D2",
+ "\u2F94",
+ "\u8A00",
+ "\u2F95",
+ "\u8C37",
+ "\u2F96",
+ "\u8C46",
+ "\u2F97",
+ "\u8C55",
+ "\u2F98",
+ "\u8C78",
+ "\u2F99",
+ "\u8C9D",
+ "\u2F9A",
+ "\u8D64",
+ "\u2F9B",
+ "\u8D70",
+ "\u2F9C",
+ "\u8DB3",
+ "\u2F9D",
+ "\u8EAB",
+ "\u2F9E",
+ "\u8ECA",
+ "\u2F9F",
+ "\u8F9B",
+ "\u2FA0",
+ "\u8FB0",
+ "\u2FA1",
+ "\u8FB5",
+ "\u2FA2",
+ "\u9091",
+ "\u2FA3",
+ "\u9149",
+ "\u2FA4",
+ "\u91C6",
+ "\u2FA5",
+ "\u91CC",
+ "\u2FA6",
+ "\u91D1",
+ "\u2FA7",
+ "\u9577",
+ "\u2FA8",
+ "\u9580",
+ "\u2FA9",
+ "\u961C",
+ "\u2FAA",
+ "\u96B6",
+ "\u2FAB",
+ "\u96B9",
+ "\u2FAC",
+ "\u96E8",
+ "\u2FAD",
+ "\u9751",
+ "\u2FAE",
+ "\u975E",
+ "\u2FAF",
+ "\u9762",
+ "\u2FB0",
+ "\u9769",
+ "\u2FB1",
+ "\u97CB",
+ "\u2FB2",
+ "\u97ED",
+ "\u2FB3",
+ "\u97F3",
+ "\u2FB4",
+ "\u9801",
+ "\u2FB5",
+ "\u98A8",
+ "\u2FB6",
+ "\u98DB",
+ "\u2FB7",
+ "\u98DF",
+ "\u2FB8",
+ "\u9996",
+ "\u2FB9",
+ "\u9999",
+ "\u2FBA",
+ "\u99AC",
+ "\u2FBB",
+ "\u9AA8",
+ "\u2FBC",
+ "\u9AD8",
+ "\u2FBD",
+ "\u9ADF",
+ "\u2FBE",
+ "\u9B25",
+ "\u2FBF",
+ "\u9B2F",
+ "\u2FC0",
+ "\u9B32",
+ "\u2FC1",
+ "\u9B3C",
+ "\u2FC2",
+ "\u9B5A",
+ "\u2FC3",
+ "\u9CE5",
+ "\u2FC4",
+ "\u9E75",
+ "\u2FC5",
+ "\u9E7F",
+ "\u2FC6",
+ "\u9EA5",
+ "\u2FC7",
+ "\u9EBB",
+ "\u2FC8",
+ "\u9EC3",
+ "\u2FC9",
+ "\u9ECD",
+ "\u2FCA",
+ "\u9ED1",
+ "\u2FCB",
+ "\u9EF9",
+ "\u2FCC",
+ "\u9EFD",
+ "\u2FCD",
+ "\u9F0E",
+ "\u2FCE",
+ "\u9F13",
+ "\u2FCF",
+ "\u9F20",
+ "\u2FD0",
+ "\u9F3B",
+ "\u2FD1",
+ "\u9F4A",
+ "\u2FD2",
+ "\u9F52",
+ "\u2FD3",
+ "\u9F8D",
+ "\u2FD4",
+ "\u9F9C",
+ "\u2FD5",
+ "\u9FA0",
+ "\u3036",
+ "\u3012",
+ "\u3038",
+ "\u5341",
+ "\u3039",
+ "\u5344",
+ "\u303A",
+ "\u5345",
+ "\u309B",
+ "\u0020\u3099",
+ "\u309C",
+ "\u0020\u309A",
+ "\u3131",
+ "\u1100",
+ "\u3132",
+ "\u1101",
+ "\u3133",
+ "\u11AA",
+ "\u3134",
+ "\u1102",
+ "\u3135",
+ "\u11AC",
+ "\u3136",
+ "\u11AD",
+ "\u3137",
+ "\u1103",
+ "\u3138",
+ "\u1104",
+ "\u3139",
+ "\u1105",
+ "\u313A",
+ "\u11B0",
+ "\u313B",
+ "\u11B1",
+ "\u313C",
+ "\u11B2",
+ "\u313D",
+ "\u11B3",
+ "\u313E",
+ "\u11B4",
+ "\u313F",
+ "\u11B5",
+ "\u3140",
+ "\u111A",
+ "\u3141",
+ "\u1106",
+ "\u3142",
+ "\u1107",
+ "\u3143",
+ "\u1108",
+ "\u3144",
+ "\u1121",
+ "\u3145",
+ "\u1109",
+ "\u3146",
+ "\u110A",
+ "\u3147",
+ "\u110B",
+ "\u3148",
+ "\u110C",
+ "\u3149",
+ "\u110D",
+ "\u314A",
+ "\u110E",
+ "\u314B",
+ "\u110F",
+ "\u314C",
+ "\u1110",
+ "\u314D",
+ "\u1111",
+ "\u314E",
+ "\u1112",
+ "\u314F",
+ "\u1161",
+ "\u3150",
+ "\u1162",
+ "\u3151",
+ "\u1163",
+ "\u3152",
+ "\u1164",
+ "\u3153",
+ "\u1165",
+ "\u3154",
+ "\u1166",
+ "\u3155",
+ "\u1167",
+ "\u3156",
+ "\u1168",
+ "\u3157",
+ "\u1169",
+ "\u3158",
+ "\u116A",
+ "\u3159",
+ "\u116B",
+ "\u315A",
+ "\u116C",
+ "\u315B",
+ "\u116D",
+ "\u315C",
+ "\u116E",
+ "\u315D",
+ "\u116F",
+ "\u315E",
+ "\u1170",
+ "\u315F",
+ "\u1171",
+ "\u3160",
+ "\u1172",
+ "\u3161",
+ "\u1173",
+ "\u3162",
+ "\u1174",
+ "\u3163",
+ "\u1175",
+ "\u3164",
+ "\u1160",
+ "\u3165",
+ "\u1114",
+ "\u3166",
+ "\u1115",
+ "\u3167",
+ "\u11C7",
+ "\u3168",
+ "\u11C8",
+ "\u3169",
+ "\u11CC",
+ "\u316A",
+ "\u11CE",
+ "\u316B",
+ "\u11D3",
+ "\u316C",
+ "\u11D7",
+ "\u316D",
+ "\u11D9",
+ "\u316E",
+ "\u111C",
+ "\u316F",
+ "\u11DD",
+ "\u3170",
+ "\u11DF",
+ "\u3171",
+ "\u111D",
+ "\u3172",
+ "\u111E",
+ "\u3173",
+ "\u1120",
+ "\u3174",
+ "\u1122",
+ "\u3175",
+ "\u1123",
+ "\u3176",
+ "\u1127",
+ "\u3177",
+ "\u1129",
+ "\u3178",
+ "\u112B",
+ "\u3179",
+ "\u112C",
+ "\u317A",
+ "\u112D",
+ "\u317B",
+ "\u112E",
+ "\u317C",
+ "\u112F",
+ "\u317D",
+ "\u1132",
+ "\u317E",
+ "\u1136",
+ "\u317F",
+ "\u1140",
+ "\u3180",
+ "\u1147",
+ "\u3181",
+ "\u114C",
+ "\u3182",
+ "\u11F1",
+ "\u3183",
+ "\u11F2",
+ "\u3184",
+ "\u1157",
+ "\u3185",
+ "\u1158",
+ "\u3186",
+ "\u1159",
+ "\u3187",
+ "\u1184",
+ "\u3188",
+ "\u1185",
+ "\u3189",
+ "\u1188",
+ "\u318A",
+ "\u1191",
+ "\u318B",
+ "\u1192",
+ "\u318C",
+ "\u1194",
+ "\u318D",
+ "\u119E",
+ "\u318E",
+ "\u11A1",
+ "\u3200",
+ "\u0028\u1100\u0029",
+ "\u3201",
+ "\u0028\u1102\u0029",
+ "\u3202",
+ "\u0028\u1103\u0029",
+ "\u3203",
+ "\u0028\u1105\u0029",
+ "\u3204",
+ "\u0028\u1106\u0029",
+ "\u3205",
+ "\u0028\u1107\u0029",
+ "\u3206",
+ "\u0028\u1109\u0029",
+ "\u3207",
+ "\u0028\u110B\u0029",
+ "\u3208",
+ "\u0028\u110C\u0029",
+ "\u3209",
+ "\u0028\u110E\u0029",
+ "\u320A",
+ "\u0028\u110F\u0029",
+ "\u320B",
+ "\u0028\u1110\u0029",
+ "\u320C",
+ "\u0028\u1111\u0029",
+ "\u320D",
+ "\u0028\u1112\u0029",
+ "\u320E",
+ "\u0028\u1100\u1161\u0029",
+ "\u320F",
+ "\u0028\u1102\u1161\u0029",
+ "\u3210",
+ "\u0028\u1103\u1161\u0029",
+ "\u3211",
+ "\u0028\u1105\u1161\u0029",
+ "\u3212",
+ "\u0028\u1106\u1161\u0029",
+ "\u3213",
+ "\u0028\u1107\u1161\u0029",
+ "\u3214",
+ "\u0028\u1109\u1161\u0029",
+ "\u3215",
+ "\u0028\u110B\u1161\u0029",
+ "\u3216",
+ "\u0028\u110C\u1161\u0029",
+ "\u3217",
+ "\u0028\u110E\u1161\u0029",
+ "\u3218",
+ "\u0028\u110F\u1161\u0029",
+ "\u3219",
+ "\u0028\u1110\u1161\u0029",
+ "\u321A",
+ "\u0028\u1111\u1161\u0029",
+ "\u321B",
+ "\u0028\u1112\u1161\u0029",
+ "\u321C",
+ "\u0028\u110C\u116E\u0029",
+ "\u321D",
+ "\u0028\u110B\u1169\u110C\u1165\u11AB\u0029",
+ "\u321E",
+ "\u0028\u110B\u1169\u1112\u116E\u0029",
+ "\u3220",
+ "\u0028\u4E00\u0029",
+ "\u3221",
+ "\u0028\u4E8C\u0029",
+ "\u3222",
+ "\u0028\u4E09\u0029",
+ "\u3223",
+ "\u0028\u56DB\u0029",
+ "\u3224",
+ "\u0028\u4E94\u0029",
+ "\u3225",
+ "\u0028\u516D\u0029",
+ "\u3226",
+ "\u0028\u4E03\u0029",
+ "\u3227",
+ "\u0028\u516B\u0029",
+ "\u3228",
+ "\u0028\u4E5D\u0029",
+ "\u3229",
+ "\u0028\u5341\u0029",
+ "\u322A",
+ "\u0028\u6708\u0029",
+ "\u322B",
+ "\u0028\u706B\u0029",
+ "\u322C",
+ "\u0028\u6C34\u0029",
+ "\u322D",
+ "\u0028\u6728\u0029",
+ "\u322E",
+ "\u0028\u91D1\u0029",
+ "\u322F",
+ "\u0028\u571F\u0029",
+ "\u3230",
+ "\u0028\u65E5\u0029",
+ "\u3231",
+ "\u0028\u682A\u0029",
+ "\u3232",
+ "\u0028\u6709\u0029",
+ "\u3233",
+ "\u0028\u793E\u0029",
+ "\u3234",
+ "\u0028\u540D\u0029",
+ "\u3235",
+ "\u0028\u7279\u0029",
+ "\u3236",
+ "\u0028\u8CA1\u0029",
+ "\u3237",
+ "\u0028\u795D\u0029",
+ "\u3238",
+ "\u0028\u52B4\u0029",
+ "\u3239",
+ "\u0028\u4EE3\u0029",
+ "\u323A",
+ "\u0028\u547C\u0029",
+ "\u323B",
+ "\u0028\u5B66\u0029",
+ "\u323C",
+ "\u0028\u76E3\u0029",
+ "\u323D",
+ "\u0028\u4F01\u0029",
+ "\u323E",
+ "\u0028\u8CC7\u0029",
+ "\u323F",
+ "\u0028\u5354\u0029",
+ "\u3240",
+ "\u0028\u796D\u0029",
+ "\u3241",
+ "\u0028\u4F11\u0029",
+ "\u3242",
+ "\u0028\u81EA\u0029",
+ "\u3243",
+ "\u0028\u81F3\u0029",
+ "\u32C0",
+ "\u0031\u6708",
+ "\u32C1",
+ "\u0032\u6708",
+ "\u32C2",
+ "\u0033\u6708",
+ "\u32C3",
+ "\u0034\u6708",
+ "\u32C4",
+ "\u0035\u6708",
+ "\u32C5",
+ "\u0036\u6708",
+ "\u32C6",
+ "\u0037\u6708",
+ "\u32C7",
+ "\u0038\u6708",
+ "\u32C8",
+ "\u0039\u6708",
+ "\u32C9",
+ "\u0031\u0030\u6708",
+ "\u32CA",
+ "\u0031\u0031\u6708",
+ "\u32CB",
+ "\u0031\u0032\u6708",
+ "\u3358",
+ "\u0030\u70B9",
+ "\u3359",
+ "\u0031\u70B9",
+ "\u335A",
+ "\u0032\u70B9",
+ "\u335B",
+ "\u0033\u70B9",
+ "\u335C",
+ "\u0034\u70B9",
+ "\u335D",
+ "\u0035\u70B9",
+ "\u335E",
+ "\u0036\u70B9",
+ "\u335F",
+ "\u0037\u70B9",
+ "\u3360",
+ "\u0038\u70B9",
+ "\u3361",
+ "\u0039\u70B9",
+ "\u3362",
+ "\u0031\u0030\u70B9",
+ "\u3363",
+ "\u0031\u0031\u70B9",
+ "\u3364",
+ "\u0031\u0032\u70B9",
+ "\u3365",
+ "\u0031\u0033\u70B9",
+ "\u3366",
+ "\u0031\u0034\u70B9",
+ "\u3367",
+ "\u0031\u0035\u70B9",
+ "\u3368",
+ "\u0031\u0036\u70B9",
+ "\u3369",
+ "\u0031\u0037\u70B9",
+ "\u336A",
+ "\u0031\u0038\u70B9",
+ "\u336B",
+ "\u0031\u0039\u70B9",
+ "\u336C",
+ "\u0032\u0030\u70B9",
+ "\u336D",
+ "\u0032\u0031\u70B9",
+ "\u336E",
+ "\u0032\u0032\u70B9",
+ "\u336F",
+ "\u0032\u0033\u70B9",
+ "\u3370",
+ "\u0032\u0034\u70B9",
+ "\u33E0",
+ "\u0031\u65E5",
+ "\u33E1",
+ "\u0032\u65E5",
+ "\u33E2",
+ "\u0033\u65E5",
+ "\u33E3",
+ "\u0034\u65E5",
+ "\u33E4",
+ "\u0035\u65E5",
+ "\u33E5",
+ "\u0036\u65E5",
+ "\u33E6",
+ "\u0037\u65E5",
+ "\u33E7",
+ "\u0038\u65E5",
+ "\u33E8",
+ "\u0039\u65E5",
+ "\u33E9",
+ "\u0031\u0030\u65E5",
+ "\u33EA",
+ "\u0031\u0031\u65E5",
+ "\u33EB",
+ "\u0031\u0032\u65E5",
+ "\u33EC",
+ "\u0031\u0033\u65E5",
+ "\u33ED",
+ "\u0031\u0034\u65E5",
+ "\u33EE",
+ "\u0031\u0035\u65E5",
+ "\u33EF",
+ "\u0031\u0036\u65E5",
+ "\u33F0",
+ "\u0031\u0037\u65E5",
+ "\u33F1",
+ "\u0031\u0038\u65E5",
+ "\u33F2",
+ "\u0031\u0039\u65E5",
+ "\u33F3",
+ "\u0032\u0030\u65E5",
+ "\u33F4",
+ "\u0032\u0031\u65E5",
+ "\u33F5",
+ "\u0032\u0032\u65E5",
+ "\u33F6",
+ "\u0032\u0033\u65E5",
+ "\u33F7",
+ "\u0032\u0034\u65E5",
+ "\u33F8",
+ "\u0032\u0035\u65E5",
+ "\u33F9",
+ "\u0032\u0036\u65E5",
+ "\u33FA",
+ "\u0032\u0037\u65E5",
+ "\u33FB",
+ "\u0032\u0038\u65E5",
+ "\u33FC",
+ "\u0032\u0039\u65E5",
+ "\u33FD",
+ "\u0033\u0030\u65E5",
+ "\u33FE",
+ "\u0033\u0031\u65E5",
+ "\uFB00",
+ "\u0066\u0066",
+ "\uFB01",
+ "\u0066\u0069",
+ "\uFB02",
+ "\u0066\u006C",
+ "\uFB03",
+ "\u0066\u0066\u0069",
+ "\uFB04",
+ "\u0066\u0066\u006C",
+ "\uFB05",
+ "\u017F\u0074",
+ "\uFB06",
+ "\u0073\u0074",
+ "\uFB13",
+ "\u0574\u0576",
+ "\uFB14",
+ "\u0574\u0565",
+ "\uFB15",
+ "\u0574\u056B",
+ "\uFB16",
+ "\u057E\u0576",
+ "\uFB17",
+ "\u0574\u056D",
+ "\uFB4F",
+ "\u05D0\u05DC",
+ "\uFB50",
+ "\u0671",
+ "\uFB51",
+ "\u0671",
+ "\uFB52",
+ "\u067B",
+ "\uFB53",
+ "\u067B",
+ "\uFB54",
+ "\u067B",
+ "\uFB55",
+ "\u067B",
+ "\uFB56",
+ "\u067E",
+ "\uFB57",
+ "\u067E",
+ "\uFB58",
+ "\u067E",
+ "\uFB59",
+ "\u067E",
+ "\uFB5A",
+ "\u0680",
+ "\uFB5B",
+ "\u0680",
+ "\uFB5C",
+ "\u0680",
+ "\uFB5D",
+ "\u0680",
+ "\uFB5E",
+ "\u067A",
+ "\uFB5F",
+ "\u067A",
+ "\uFB60",
+ "\u067A",
+ "\uFB61",
+ "\u067A",
+ "\uFB62",
+ "\u067F",
+ "\uFB63",
+ "\u067F",
+ "\uFB64",
+ "\u067F",
+ "\uFB65",
+ "\u067F",
+ "\uFB66",
+ "\u0679",
+ "\uFB67",
+ "\u0679",
+ "\uFB68",
+ "\u0679",
+ "\uFB69",
+ "\u0679",
+ "\uFB6A",
+ "\u06A4",
+ "\uFB6B",
+ "\u06A4",
+ "\uFB6C",
+ "\u06A4",
+ "\uFB6D",
+ "\u06A4",
+ "\uFB6E",
+ "\u06A6",
+ "\uFB6F",
+ "\u06A6",
+ "\uFB70",
+ "\u06A6",
+ "\uFB71",
+ "\u06A6",
+ "\uFB72",
+ "\u0684",
+ "\uFB73",
+ "\u0684",
+ "\uFB74",
+ "\u0684",
+ "\uFB75",
+ "\u0684",
+ "\uFB76",
+ "\u0683",
+ "\uFB77",
+ "\u0683",
+ "\uFB78",
+ "\u0683",
+ "\uFB79",
+ "\u0683",
+ "\uFB7A",
+ "\u0686",
+ "\uFB7B",
+ "\u0686",
+ "\uFB7C",
+ "\u0686",
+ "\uFB7D",
+ "\u0686",
+ "\uFB7E",
+ "\u0687",
+ "\uFB7F",
+ "\u0687",
+ "\uFB80",
+ "\u0687",
+ "\uFB81",
+ "\u0687",
+ "\uFB82",
+ "\u068D",
+ "\uFB83",
+ "\u068D",
+ "\uFB84",
+ "\u068C",
+ "\uFB85",
+ "\u068C",
+ "\uFB86",
+ "\u068E",
+ "\uFB87",
+ "\u068E",
+ "\uFB88",
+ "\u0688",
+ "\uFB89",
+ "\u0688",
+ "\uFB8A",
+ "\u0698",
+ "\uFB8B",
+ "\u0698",
+ "\uFB8C",
+ "\u0691",
+ "\uFB8D",
+ "\u0691",
+ "\uFB8E",
+ "\u06A9",
+ "\uFB8F",
+ "\u06A9",
+ "\uFB90",
+ "\u06A9",
+ "\uFB91",
+ "\u06A9",
+ "\uFB92",
+ "\u06AF",
+ "\uFB93",
+ "\u06AF",
+ "\uFB94",
+ "\u06AF",
+ "\uFB95",
+ "\u06AF",
+ "\uFB96",
+ "\u06B3",
+ "\uFB97",
+ "\u06B3",
+ "\uFB98",
+ "\u06B3",
+ "\uFB99",
+ "\u06B3",
+ "\uFB9A",
+ "\u06B1",
+ "\uFB9B",
+ "\u06B1",
+ "\uFB9C",
+ "\u06B1",
+ "\uFB9D",
+ "\u06B1",
+ "\uFB9E",
+ "\u06BA",
+ "\uFB9F",
+ "\u06BA",
+ "\uFBA0",
+ "\u06BB",
+ "\uFBA1",
+ "\u06BB",
+ "\uFBA2",
+ "\u06BB",
+ "\uFBA3",
+ "\u06BB",
+ "\uFBA4",
+ "\u06C0",
+ "\uFBA5",
+ "\u06C0",
+ "\uFBA6",
+ "\u06C1",
+ "\uFBA7",
+ "\u06C1",
+ "\uFBA8",
+ "\u06C1",
+ "\uFBA9",
+ "\u06C1",
+ "\uFBAA",
+ "\u06BE",
+ "\uFBAB",
+ "\u06BE",
+ "\uFBAC",
+ "\u06BE",
+ "\uFBAD",
+ "\u06BE",
+ "\uFBAE",
+ "\u06D2",
+ "\uFBAF",
+ "\u06D2",
+ "\uFBB0",
+ "\u06D3",
+ "\uFBB1",
+ "\u06D3",
+ "\uFBD3",
+ "\u06AD",
+ "\uFBD4",
+ "\u06AD",
+ "\uFBD5",
+ "\u06AD",
+ "\uFBD6",
+ "\u06AD",
+ "\uFBD7",
+ "\u06C7",
+ "\uFBD8",
+ "\u06C7",
+ "\uFBD9",
+ "\u06C6",
+ "\uFBDA",
+ "\u06C6",
+ "\uFBDB",
+ "\u06C8",
+ "\uFBDC",
+ "\u06C8",
+ "\uFBDD",
+ "\u0677",
+ "\uFBDE",
+ "\u06CB",
+ "\uFBDF",
+ "\u06CB",
+ "\uFBE0",
+ "\u06C5",
+ "\uFBE1",
+ "\u06C5",
+ "\uFBE2",
+ "\u06C9",
+ "\uFBE3",
+ "\u06C9",
+ "\uFBE4",
+ "\u06D0",
+ "\uFBE5",
+ "\u06D0",
+ "\uFBE6",
+ "\u06D0",
+ "\uFBE7",
+ "\u06D0",
+ "\uFBE8",
+ "\u0649",
+ "\uFBE9",
+ "\u0649",
+ "\uFBEA",
+ "\u0626\u0627",
+ "\uFBEB",
+ "\u0626\u0627",
+ "\uFBEC",
+ "\u0626\u06D5",
+ "\uFBED",
+ "\u0626\u06D5",
+ "\uFBEE",
+ "\u0626\u0648",
+ "\uFBEF",
+ "\u0626\u0648",
+ "\uFBF0",
+ "\u0626\u06C7",
+ "\uFBF1",
+ "\u0626\u06C7",
+ "\uFBF2",
+ "\u0626\u06C6",
+ "\uFBF3",
+ "\u0626\u06C6",
+ "\uFBF4",
+ "\u0626\u06C8",
+ "\uFBF5",
+ "\u0626\u06C8",
+ "\uFBF6",
+ "\u0626\u06D0",
+ "\uFBF7",
+ "\u0626\u06D0",
+ "\uFBF8",
+ "\u0626\u06D0",
+ "\uFBF9",
+ "\u0626\u0649",
+ "\uFBFA",
+ "\u0626\u0649",
+ "\uFBFB",
+ "\u0626\u0649",
+ "\uFBFC",
+ "\u06CC",
+ "\uFBFD",
+ "\u06CC",
+ "\uFBFE",
+ "\u06CC",
+ "\uFBFF",
+ "\u06CC",
+ "\uFC00",
+ "\u0626\u062C",
+ "\uFC01",
+ "\u0626\u062D",
+ "\uFC02",
+ "\u0626\u0645",
+ "\uFC03",
+ "\u0626\u0649",
+ "\uFC04",
+ "\u0626\u064A",
+ "\uFC05",
+ "\u0628\u062C",
+ "\uFC06",
+ "\u0628\u062D",
+ "\uFC07",
+ "\u0628\u062E",
+ "\uFC08",
+ "\u0628\u0645",
+ "\uFC09",
+ "\u0628\u0649",
+ "\uFC0A",
+ "\u0628\u064A",
+ "\uFC0B",
+ "\u062A\u062C",
+ "\uFC0C",
+ "\u062A\u062D",
+ "\uFC0D",
+ "\u062A\u062E",
+ "\uFC0E",
+ "\u062A\u0645",
+ "\uFC0F",
+ "\u062A\u0649",
+ "\uFC10",
+ "\u062A\u064A",
+ "\uFC11",
+ "\u062B\u062C",
+ "\uFC12",
+ "\u062B\u0645",
+ "\uFC13",
+ "\u062B\u0649",
+ "\uFC14",
+ "\u062B\u064A",
+ "\uFC15",
+ "\u062C\u062D",
+ "\uFC16",
+ "\u062C\u0645",
+ "\uFC17",
+ "\u062D\u062C",
+ "\uFC18",
+ "\u062D\u0645",
+ "\uFC19",
+ "\u062E\u062C",
+ "\uFC1A",
+ "\u062E\u062D",
+ "\uFC1B",
+ "\u062E\u0645",
+ "\uFC1C",
+ "\u0633\u062C",
+ "\uFC1D",
+ "\u0633\u062D",
+ "\uFC1E",
+ "\u0633\u062E",
+ "\uFC1F",
+ "\u0633\u0645",
+ "\uFC20",
+ "\u0635\u062D",
+ "\uFC21",
+ "\u0635\u0645",
+ "\uFC22",
+ "\u0636\u062C",
+ "\uFC23",
+ "\u0636\u062D",
+ "\uFC24",
+ "\u0636\u062E",
+ "\uFC25",
+ "\u0636\u0645",
+ "\uFC26",
+ "\u0637\u062D",
+ "\uFC27",
+ "\u0637\u0645",
+ "\uFC28",
+ "\u0638\u0645",
+ "\uFC29",
+ "\u0639\u062C",
+ "\uFC2A",
+ "\u0639\u0645",
+ "\uFC2B",
+ "\u063A\u062C",
+ "\uFC2C",
+ "\u063A\u0645",
+ "\uFC2D",
+ "\u0641\u062C",
+ "\uFC2E",
+ "\u0641\u062D",
+ "\uFC2F",
+ "\u0641\u062E",
+ "\uFC30",
+ "\u0641\u0645",
+ "\uFC31",
+ "\u0641\u0649",
+ "\uFC32",
+ "\u0641\u064A",
+ "\uFC33",
+ "\u0642\u062D",
+ "\uFC34",
+ "\u0642\u0645",
+ "\uFC35",
+ "\u0642\u0649",
+ "\uFC36",
+ "\u0642\u064A",
+ "\uFC37",
+ "\u0643\u0627",
+ "\uFC38",
+ "\u0643\u062C",
+ "\uFC39",
+ "\u0643\u062D",
+ "\uFC3A",
+ "\u0643\u062E",
+ "\uFC3B",
+ "\u0643\u0644",
+ "\uFC3C",
+ "\u0643\u0645",
+ "\uFC3D",
+ "\u0643\u0649",
+ "\uFC3E",
+ "\u0643\u064A",
+ "\uFC3F",
+ "\u0644\u062C",
+ "\uFC40",
+ "\u0644\u062D",
+ "\uFC41",
+ "\u0644\u062E",
+ "\uFC42",
+ "\u0644\u0645",
+ "\uFC43",
+ "\u0644\u0649",
+ "\uFC44",
+ "\u0644\u064A",
+ "\uFC45",
+ "\u0645\u062C",
+ "\uFC46",
+ "\u0645\u062D",
+ "\uFC47",
+ "\u0645\u062E",
+ "\uFC48",
+ "\u0645\u0645",
+ "\uFC49",
+ "\u0645\u0649",
+ "\uFC4A",
+ "\u0645\u064A",
+ "\uFC4B",
+ "\u0646\u062C",
+ "\uFC4C",
+ "\u0646\u062D",
+ "\uFC4D",
+ "\u0646\u062E",
+ "\uFC4E",
+ "\u0646\u0645",
+ "\uFC4F",
+ "\u0646\u0649",
+ "\uFC50",
+ "\u0646\u064A",
+ "\uFC51",
+ "\u0647\u062C",
+ "\uFC52",
+ "\u0647\u0645",
+ "\uFC53",
+ "\u0647\u0649",
+ "\uFC54",
+ "\u0647\u064A",
+ "\uFC55",
+ "\u064A\u062C",
+ "\uFC56",
+ "\u064A\u062D",
+ "\uFC57",
+ "\u064A\u062E",
+ "\uFC58",
+ "\u064A\u0645",
+ "\uFC59",
+ "\u064A\u0649",
+ "\uFC5A",
+ "\u064A\u064A",
+ "\uFC5B",
+ "\u0630\u0670",
+ "\uFC5C",
+ "\u0631\u0670",
+ "\uFC5D",
+ "\u0649\u0670",
+ "\uFC5E",
+ "\u0020\u064C\u0651",
+ "\uFC5F",
+ "\u0020\u064D\u0651",
+ "\uFC60",
+ "\u0020\u064E\u0651",
+ "\uFC61",
+ "\u0020\u064F\u0651",
+ "\uFC62",
+ "\u0020\u0650\u0651",
+ "\uFC63",
+ "\u0020\u0651\u0670",
+ "\uFC64",
+ "\u0626\u0631",
+ "\uFC65",
+ "\u0626\u0632",
+ "\uFC66",
+ "\u0626\u0645",
+ "\uFC67",
+ "\u0626\u0646",
+ "\uFC68",
+ "\u0626\u0649",
+ "\uFC69",
+ "\u0626\u064A",
+ "\uFC6A",
+ "\u0628\u0631",
+ "\uFC6B",
+ "\u0628\u0632",
+ "\uFC6C",
+ "\u0628\u0645",
+ "\uFC6D",
+ "\u0628\u0646",
+ "\uFC6E",
+ "\u0628\u0649",
+ "\uFC6F",
+ "\u0628\u064A",
+ "\uFC70",
+ "\u062A\u0631",
+ "\uFC71",
+ "\u062A\u0632",
+ "\uFC72",
+ "\u062A\u0645",
+ "\uFC73",
+ "\u062A\u0646",
+ "\uFC74",
+ "\u062A\u0649",
+ "\uFC75",
+ "\u062A\u064A",
+ "\uFC76",
+ "\u062B\u0631",
+ "\uFC77",
+ "\u062B\u0632",
+ "\uFC78",
+ "\u062B\u0645",
+ "\uFC79",
+ "\u062B\u0646",
+ "\uFC7A",
+ "\u062B\u0649",
+ "\uFC7B",
+ "\u062B\u064A",
+ "\uFC7C",
+ "\u0641\u0649",
+ "\uFC7D",
+ "\u0641\u064A",
+ "\uFC7E",
+ "\u0642\u0649",
+ "\uFC7F",
+ "\u0642\u064A",
+ "\uFC80",
+ "\u0643\u0627",
+ "\uFC81",
+ "\u0643\u0644",
+ "\uFC82",
+ "\u0643\u0645",
+ "\uFC83",
+ "\u0643\u0649",
+ "\uFC84",
+ "\u0643\u064A",
+ "\uFC85",
+ "\u0644\u0645",
+ "\uFC86",
+ "\u0644\u0649",
+ "\uFC87",
+ "\u0644\u064A",
+ "\uFC88",
+ "\u0645\u0627",
+ "\uFC89",
+ "\u0645\u0645",
+ "\uFC8A",
+ "\u0646\u0631",
+ "\uFC8B",
+ "\u0646\u0632",
+ "\uFC8C",
+ "\u0646\u0645",
+ "\uFC8D",
+ "\u0646\u0646",
+ "\uFC8E",
+ "\u0646\u0649",
+ "\uFC8F",
+ "\u0646\u064A",
+ "\uFC90",
+ "\u0649\u0670",
+ "\uFC91",
+ "\u064A\u0631",
+ "\uFC92",
+ "\u064A\u0632",
+ "\uFC93",
+ "\u064A\u0645",
+ "\uFC94",
+ "\u064A\u0646",
+ "\uFC95",
+ "\u064A\u0649",
+ "\uFC96",
+ "\u064A\u064A",
+ "\uFC97",
+ "\u0626\u062C",
+ "\uFC98",
+ "\u0626\u062D",
+ "\uFC99",
+ "\u0626\u062E",
+ "\uFC9A",
+ "\u0626\u0645",
+ "\uFC9B",
+ "\u0626\u0647",
+ "\uFC9C",
+ "\u0628\u062C",
+ "\uFC9D",
+ "\u0628\u062D",
+ "\uFC9E",
+ "\u0628\u062E",
+ "\uFC9F",
+ "\u0628\u0645",
+ "\uFCA0",
+ "\u0628\u0647",
+ "\uFCA1",
+ "\u062A\u062C",
+ "\uFCA2",
+ "\u062A\u062D",
+ "\uFCA3",
+ "\u062A\u062E",
+ "\uFCA4",
+ "\u062A\u0645",
+ "\uFCA5",
+ "\u062A\u0647",
+ "\uFCA6",
+ "\u062B\u0645",
+ "\uFCA7",
+ "\u062C\u062D",
+ "\uFCA8",
+ "\u062C\u0645",
+ "\uFCA9",
+ "\u062D\u062C",
+ "\uFCAA",
+ "\u062D\u0645",
+ "\uFCAB",
+ "\u062E\u062C",
+ "\uFCAC",
+ "\u062E\u0645",
+ "\uFCAD",
+ "\u0633\u062C",
+ "\uFCAE",
+ "\u0633\u062D",
+ "\uFCAF",
+ "\u0633\u062E",
+ "\uFCB0",
+ "\u0633\u0645",
+ "\uFCB1",
+ "\u0635\u062D",
+ "\uFCB2",
+ "\u0635\u062E",
+ "\uFCB3",
+ "\u0635\u0645",
+ "\uFCB4",
+ "\u0636\u062C",
+ "\uFCB5",
+ "\u0636\u062D",
+ "\uFCB6",
+ "\u0636\u062E",
+ "\uFCB7",
+ "\u0636\u0645",
+ "\uFCB8",
+ "\u0637\u062D",
+ "\uFCB9",
+ "\u0638\u0645",
+ "\uFCBA",
+ "\u0639\u062C",
+ "\uFCBB",
+ "\u0639\u0645",
+ "\uFCBC",
+ "\u063A\u062C",
+ "\uFCBD",
+ "\u063A\u0645",
+ "\uFCBE",
+ "\u0641\u062C",
+ "\uFCBF",
+ "\u0641\u062D",
+ "\uFCC0",
+ "\u0641\u062E",
+ "\uFCC1",
+ "\u0641\u0645",
+ "\uFCC2",
+ "\u0642\u062D",
+ "\uFCC3",
+ "\u0642\u0645",
+ "\uFCC4",
+ "\u0643\u062C",
+ "\uFCC5",
+ "\u0643\u062D",
+ "\uFCC6",
+ "\u0643\u062E",
+ "\uFCC7",
+ "\u0643\u0644",
+ "\uFCC8",
+ "\u0643\u0645",
+ "\uFCC9",
+ "\u0644\u062C",
+ "\uFCCA",
+ "\u0644\u062D",
+ "\uFCCB",
+ "\u0644\u062E",
+ "\uFCCC",
+ "\u0644\u0645",
+ "\uFCCD",
+ "\u0644\u0647",
+ "\uFCCE",
+ "\u0645\u062C",
+ "\uFCCF",
+ "\u0645\u062D",
+ "\uFCD0",
+ "\u0645\u062E",
+ "\uFCD1",
+ "\u0645\u0645",
+ "\uFCD2",
+ "\u0646\u062C",
+ "\uFCD3",
+ "\u0646\u062D",
+ "\uFCD4",
+ "\u0646\u062E",
+ "\uFCD5",
+ "\u0646\u0645",
+ "\uFCD6",
+ "\u0646\u0647",
+ "\uFCD7",
+ "\u0647\u062C",
+ "\uFCD8",
+ "\u0647\u0645",
+ "\uFCD9",
+ "\u0647\u0670",
+ "\uFCDA",
+ "\u064A\u062C",
+ "\uFCDB",
+ "\u064A\u062D",
+ "\uFCDC",
+ "\u064A\u062E",
+ "\uFCDD",
+ "\u064A\u0645",
+ "\uFCDE",
+ "\u064A\u0647",
+ "\uFCDF",
+ "\u0626\u0645",
+ "\uFCE0",
+ "\u0626\u0647",
+ "\uFCE1",
+ "\u0628\u0645",
+ "\uFCE2",
+ "\u0628\u0647",
+ "\uFCE3",
+ "\u062A\u0645",
+ "\uFCE4",
+ "\u062A\u0647",
+ "\uFCE5",
+ "\u062B\u0645",
+ "\uFCE6",
+ "\u062B\u0647",
+ "\uFCE7",
+ "\u0633\u0645",
+ "\uFCE8",
+ "\u0633\u0647",
+ "\uFCE9",
+ "\u0634\u0645",
+ "\uFCEA",
+ "\u0634\u0647",
+ "\uFCEB",
+ "\u0643\u0644",
+ "\uFCEC",
+ "\u0643\u0645",
+ "\uFCED",
+ "\u0644\u0645",
+ "\uFCEE",
+ "\u0646\u0645",
+ "\uFCEF",
+ "\u0646\u0647",
+ "\uFCF0",
+ "\u064A\u0645",
+ "\uFCF1",
+ "\u064A\u0647",
+ "\uFCF2",
+ "\u0640\u064E\u0651",
+ "\uFCF3",
+ "\u0640\u064F\u0651",
+ "\uFCF4",
+ "\u0640\u0650\u0651",
+ "\uFCF5",
+ "\u0637\u0649",
+ "\uFCF6",
+ "\u0637\u064A",
+ "\uFCF7",
+ "\u0639\u0649",
+ "\uFCF8",
+ "\u0639\u064A",
+ "\uFCF9",
+ "\u063A\u0649",
+ "\uFCFA",
+ "\u063A\u064A",
+ "\uFCFB",
+ "\u0633\u0649",
+ "\uFCFC",
+ "\u0633\u064A",
+ "\uFCFD",
+ "\u0634\u0649",
+ "\uFCFE",
+ "\u0634\u064A",
+ "\uFCFF",
+ "\u062D\u0649",
+ "\uFD00",
+ "\u062D\u064A",
+ "\uFD01",
+ "\u062C\u0649",
+ "\uFD02",
+ "\u062C\u064A",
+ "\uFD03",
+ "\u062E\u0649",
+ "\uFD04",
+ "\u062E\u064A",
+ "\uFD05",
+ "\u0635\u0649",
+ "\uFD06",
+ "\u0635\u064A",
+ "\uFD07",
+ "\u0636\u0649",
+ "\uFD08",
+ "\u0636\u064A",
+ "\uFD09",
+ "\u0634\u062C",
+ "\uFD0A",
+ "\u0634\u062D",
+ "\uFD0B",
+ "\u0634\u062E",
+ "\uFD0C",
+ "\u0634\u0645",
+ "\uFD0D",
+ "\u0634\u0631",
+ "\uFD0E",
+ "\u0633\u0631",
+ "\uFD0F",
+ "\u0635\u0631",
+ "\uFD10",
+ "\u0636\u0631",
+ "\uFD11",
+ "\u0637\u0649",
+ "\uFD12",
+ "\u0637\u064A",
+ "\uFD13",
+ "\u0639\u0649",
+ "\uFD14",
+ "\u0639\u064A",
+ "\uFD15",
+ "\u063A\u0649",
+ "\uFD16",
+ "\u063A\u064A",
+ "\uFD17",
+ "\u0633\u0649",
+ "\uFD18",
+ "\u0633\u064A",
+ "\uFD19",
+ "\u0634\u0649",
+ "\uFD1A",
+ "\u0634\u064A",
+ "\uFD1B",
+ "\u062D\u0649",
+ "\uFD1C",
+ "\u062D\u064A",
+ "\uFD1D",
+ "\u062C\u0649",
+ "\uFD1E",
+ "\u062C\u064A",
+ "\uFD1F",
+ "\u062E\u0649",
+ "\uFD20",
+ "\u062E\u064A",
+ "\uFD21",
+ "\u0635\u0649",
+ "\uFD22",
+ "\u0635\u064A",
+ "\uFD23",
+ "\u0636\u0649",
+ "\uFD24",
+ "\u0636\u064A",
+ "\uFD25",
+ "\u0634\u062C",
+ "\uFD26",
+ "\u0634\u062D",
+ "\uFD27",
+ "\u0634\u062E",
+ "\uFD28",
+ "\u0634\u0645",
+ "\uFD29",
+ "\u0634\u0631",
+ "\uFD2A",
+ "\u0633\u0631",
+ "\uFD2B",
+ "\u0635\u0631",
+ "\uFD2C",
+ "\u0636\u0631",
+ "\uFD2D",
+ "\u0634\u062C",
+ "\uFD2E",
+ "\u0634\u062D",
+ "\uFD2F",
+ "\u0634\u062E",
+ "\uFD30",
+ "\u0634\u0645",
+ "\uFD31",
+ "\u0633\u0647",
+ "\uFD32",
+ "\u0634\u0647",
+ "\uFD33",
+ "\u0637\u0645",
+ "\uFD34",
+ "\u0633\u062C",
+ "\uFD35",
+ "\u0633\u062D",
+ "\uFD36",
+ "\u0633\u062E",
+ "\uFD37",
+ "\u0634\u062C",
+ "\uFD38",
+ "\u0634\u062D",
+ "\uFD39",
+ "\u0634\u062E",
+ "\uFD3A",
+ "\u0637\u0645",
+ "\uFD3B",
+ "\u0638\u0645",
+ "\uFD3C",
+ "\u0627\u064B",
+ "\uFD3D",
+ "\u0627\u064B",
+ "\uFD50",
+ "\u062A\u062C\u0645",
+ "\uFD51",
+ "\u062A\u062D\u062C",
+ "\uFD52",
+ "\u062A\u062D\u062C",
+ "\uFD53",
+ "\u062A\u062D\u0645",
+ "\uFD54",
+ "\u062A\u062E\u0645",
+ "\uFD55",
+ "\u062A\u0645\u062C",
+ "\uFD56",
+ "\u062A\u0645\u062D",
+ "\uFD57",
+ "\u062A\u0645\u062E",
+ "\uFD58",
+ "\u062C\u0645\u062D",
+ "\uFD59",
+ "\u062C\u0645\u062D",
+ "\uFD5A",
+ "\u062D\u0645\u064A",
+ "\uFD5B",
+ "\u062D\u0645\u0649",
+ "\uFD5C",
+ "\u0633\u062D\u062C",
+ "\uFD5D",
+ "\u0633\u062C\u062D",
+ "\uFD5E",
+ "\u0633\u062C\u0649",
+ "\uFD5F",
+ "\u0633\u0645\u062D",
+ "\uFD60",
+ "\u0633\u0645\u062D",
+ "\uFD61",
+ "\u0633\u0645\u062C",
+ "\uFD62",
+ "\u0633\u0645\u0645",
+ "\uFD63",
+ "\u0633\u0645\u0645",
+ "\uFD64",
+ "\u0635\u062D\u062D",
+ "\uFD65",
+ "\u0635\u062D\u062D",
+ "\uFD66",
+ "\u0635\u0645\u0645",
+ "\uFD67",
+ "\u0634\u062D\u0645",
+ "\uFD68",
+ "\u0634\u062D\u0645",
+ "\uFD69",
+ "\u0634\u062C\u064A",
+ "\uFD6A",
+ "\u0634\u0645\u062E",
+ "\uFD6B",
+ "\u0634\u0645\u062E",
+ "\uFD6C",
+ "\u0634\u0645\u0645",
+ "\uFD6D",
+ "\u0634\u0645\u0645",
+ "\uFD6E",
+ "\u0636\u062D\u0649",
+ "\uFD6F",
+ "\u0636\u062E\u0645",
+ "\uFD70",
+ "\u0636\u062E\u0645",
+ "\uFD71",
+ "\u0637\u0645\u062D",
+ "\uFD72",
+ "\u0637\u0645\u062D",
+ "\uFD73",
+ "\u0637\u0645\u0645",
+ "\uFD74",
+ "\u0637\u0645\u064A",
+ "\uFD75",
+ "\u0639\u062C\u0645",
+ "\uFD76",
+ "\u0639\u0645\u0645",
+ "\uFD77",
+ "\u0639\u0645\u0645",
+ "\uFD78",
+ "\u0639\u0645\u0649",
+ "\uFD79",
+ "\u063A\u0645\u0645",
+ "\uFD7A",
+ "\u063A\u0645\u064A",
+ "\uFD7B",
+ "\u063A\u0645\u0649",
+ "\uFD7C",
+ "\u0641\u062E\u0645",
+ "\uFD7D",
+ "\u0641\u062E\u0645",
+ "\uFD7E",
+ "\u0642\u0645\u062D",
+ "\uFD7F",
+ "\u0642\u0645\u0645",
+ "\uFD80",
+ "\u0644\u062D\u0645",
+ "\uFD81",
+ "\u0644\u062D\u064A",
+ "\uFD82",
+ "\u0644\u062D\u0649",
+ "\uFD83",
+ "\u0644\u062C\u062C",
+ "\uFD84",
+ "\u0644\u062C\u062C",
+ "\uFD85",
+ "\u0644\u062E\u0645",
+ "\uFD86",
+ "\u0644\u062E\u0645",
+ "\uFD87",
+ "\u0644\u0645\u062D",
+ "\uFD88",
+ "\u0644\u0645\u062D",
+ "\uFD89",
+ "\u0645\u062D\u062C",
+ "\uFD8A",
+ "\u0645\u062D\u0645",
+ "\uFD8B",
+ "\u0645\u062D\u064A",
+ "\uFD8C",
+ "\u0645\u062C\u062D",
+ "\uFD8D",
+ "\u0645\u062C\u0645",
+ "\uFD8E",
+ "\u0645\u062E\u062C",
+ "\uFD8F",
+ "\u0645\u062E\u0645",
+ "\uFD92",
+ "\u0645\u062C\u062E",
+ "\uFD93",
+ "\u0647\u0645\u062C",
+ "\uFD94",
+ "\u0647\u0645\u0645",
+ "\uFD95",
+ "\u0646\u062D\u0645",
+ "\uFD96",
+ "\u0646\u062D\u0649",
+ "\uFD97",
+ "\u0646\u062C\u0645",
+ "\uFD98",
+ "\u0646\u062C\u0645",
+ "\uFD99",
+ "\u0646\u062C\u0649",
+ "\uFD9A",
+ "\u0646\u0645\u064A",
+ "\uFD9B",
+ "\u0646\u0645\u0649",
+ "\uFD9C",
+ "\u064A\u0645\u0645",
+ "\uFD9D",
+ "\u064A\u0645\u0645",
+ "\uFD9E",
+ "\u0628\u062E\u064A",
+ "\uFD9F",
+ "\u062A\u062C\u064A",
+ "\uFDA0",
+ "\u062A\u062C\u0649",
+ "\uFDA1",
+ "\u062A\u062E\u064A",
+ "\uFDA2",
+ "\u062A\u062E\u0649",
+ "\uFDA3",
+ "\u062A\u0645\u064A",
+ "\uFDA4",
+ "\u062A\u0645\u0649",
+ "\uFDA5",
+ "\u062C\u0645\u064A",
+ "\uFDA6",
+ "\u062C\u062D\u0649",
+ "\uFDA7",
+ "\u062C\u0645\u0649",
+ "\uFDA8",
+ "\u0633\u062E\u0649",
+ "\uFDA9",
+ "\u0635\u062D\u064A",
+ "\uFDAA",
+ "\u0634\u062D\u064A",
+ "\uFDAB",
+ "\u0636\u062D\u064A",
+ "\uFDAC",
+ "\u0644\u062C\u064A",
+ "\uFDAD",
+ "\u0644\u0645\u064A",
+ "\uFDAE",
+ "\u064A\u062D\u064A",
+ "\uFDAF",
+ "\u064A\u062C\u064A",
+ "\uFDB0",
+ "\u064A\u0645\u064A",
+ "\uFDB1",
+ "\u0645\u0645\u064A",
+ "\uFDB2",
+ "\u0642\u0645\u064A",
+ "\uFDB3",
+ "\u0646\u062D\u064A",
+ "\uFDB4",
+ "\u0642\u0645\u062D",
+ "\uFDB5",
+ "\u0644\u062D\u0645",
+ "\uFDB6",
+ "\u0639\u0645\u064A",
+ "\uFDB7",
+ "\u0643\u0645\u064A",
+ "\uFDB8",
+ "\u0646\u062C\u062D",
+ "\uFDB9",
+ "\u0645\u062E\u064A",
+ "\uFDBA",
+ "\u0644\u062C\u0645",
+ "\uFDBB",
+ "\u0643\u0645\u0645",
+ "\uFDBC",
+ "\u0644\u062C\u0645",
+ "\uFDBD",
+ "\u0646\u062C\u062D",
+ "\uFDBE",
+ "\u062C\u062D\u064A",
+ "\uFDBF",
+ "\u062D\u062C\u064A",
+ "\uFDC0",
+ "\u0645\u062C\u064A",
+ "\uFDC1",
+ "\u0641\u0645\u064A",
+ "\uFDC2",
+ "\u0628\u062D\u064A",
+ "\uFDC3",
+ "\u0643\u0645\u0645",
+ "\uFDC4",
+ "\u0639\u062C\u0645",
+ "\uFDC5",
+ "\u0635\u0645\u0645",
+ "\uFDC6",
+ "\u0633\u062E\u064A",
+ "\uFDC7",
+ "\u0646\u062C\u064A",
+ "\uFE49",
+ "\u203E",
+ "\uFE4A",
+ "\u203E",
+ "\uFE4B",
+ "\u203E",
+ "\uFE4C",
+ "\u203E",
+ "\uFE4D",
+ "\u005F",
+ "\uFE4E",
+ "\u005F",
+ "\uFE4F",
+ "\u005F",
+ "\uFE80",
+ "\u0621",
+ "\uFE81",
+ "\u0622",
+ "\uFE82",
+ "\u0622",
+ "\uFE83",
+ "\u0623",
+ "\uFE84",
+ "\u0623",
+ "\uFE85",
+ "\u0624",
+ "\uFE86",
+ "\u0624",
+ "\uFE87",
+ "\u0625",
+ "\uFE88",
+ "\u0625",
+ "\uFE89",
+ "\u0626",
+ "\uFE8A",
+ "\u0626",
+ "\uFE8B",
+ "\u0626",
+ "\uFE8C",
+ "\u0626",
+ "\uFE8D",
+ "\u0627",
+ "\uFE8E",
+ "\u0627",
+ "\uFE8F",
+ "\u0628",
+ "\uFE90",
+ "\u0628",
+ "\uFE91",
+ "\u0628",
+ "\uFE92",
+ "\u0628",
+ "\uFE93",
+ "\u0629",
+ "\uFE94",
+ "\u0629",
+ "\uFE95",
+ "\u062A",
+ "\uFE96",
+ "\u062A",
+ "\uFE97",
+ "\u062A",
+ "\uFE98",
+ "\u062A",
+ "\uFE99",
+ "\u062B",
+ "\uFE9A",
+ "\u062B",
+ "\uFE9B",
+ "\u062B",
+ "\uFE9C",
+ "\u062B",
+ "\uFE9D",
+ "\u062C",
+ "\uFE9E",
+ "\u062C",
+ "\uFE9F",
+ "\u062C",
+ "\uFEA0",
+ "\u062C",
+ "\uFEA1",
+ "\u062D",
+ "\uFEA2",
+ "\u062D",
+ "\uFEA3",
+ "\u062D",
+ "\uFEA4",
+ "\u062D",
+ "\uFEA5",
+ "\u062E",
+ "\uFEA6",
+ "\u062E",
+ "\uFEA7",
+ "\u062E",
+ "\uFEA8",
+ "\u062E",
+ "\uFEA9",
+ "\u062F",
+ "\uFEAA",
+ "\u062F",
+ "\uFEAB",
+ "\u0630",
+ "\uFEAC",
+ "\u0630",
+ "\uFEAD",
+ "\u0631",
+ "\uFEAE",
+ "\u0631",
+ "\uFEAF",
+ "\u0632",
+ "\uFEB0",
+ "\u0632",
+ "\uFEB1",
+ "\u0633",
+ "\uFEB2",
+ "\u0633",
+ "\uFEB3",
+ "\u0633",
+ "\uFEB4",
+ "\u0633",
+ "\uFEB5",
+ "\u0634",
+ "\uFEB6",
+ "\u0634",
+ "\uFEB7",
+ "\u0634",
+ "\uFEB8",
+ "\u0634",
+ "\uFEB9",
+ "\u0635",
+ "\uFEBA",
+ "\u0635",
+ "\uFEBB",
+ "\u0635",
+ "\uFEBC",
+ "\u0635",
+ "\uFEBD",
+ "\u0636",
+ "\uFEBE",
+ "\u0636",
+ "\uFEBF",
+ "\u0636",
+ "\uFEC0",
+ "\u0636",
+ "\uFEC1",
+ "\u0637",
+ "\uFEC2",
+ "\u0637",
+ "\uFEC3",
+ "\u0637",
+ "\uFEC4",
+ "\u0637",
+ "\uFEC5",
+ "\u0638",
+ "\uFEC6",
+ "\u0638",
+ "\uFEC7",
+ "\u0638",
+ "\uFEC8",
+ "\u0638",
+ "\uFEC9",
+ "\u0639",
+ "\uFECA",
+ "\u0639",
+ "\uFECB",
+ "\u0639",
+ "\uFECC",
+ "\u0639",
+ "\uFECD",
+ "\u063A",
+ "\uFECE",
+ "\u063A",
+ "\uFECF",
+ "\u063A",
+ "\uFED0",
+ "\u063A",
+ "\uFED1",
+ "\u0641",
+ "\uFED2",
+ "\u0641",
+ "\uFED3",
+ "\u0641",
+ "\uFED4",
+ "\u0641",
+ "\uFED5",
+ "\u0642",
+ "\uFED6",
+ "\u0642",
+ "\uFED7",
+ "\u0642",
+ "\uFED8",
+ "\u0642",
+ "\uFED9",
+ "\u0643",
+ "\uFEDA",
+ "\u0643",
+ "\uFEDB",
+ "\u0643",
+ "\uFEDC",
+ "\u0643",
+ "\uFEDD",
+ "\u0644",
+ "\uFEDE",
+ "\u0644",
+ "\uFEDF",
+ "\u0644",
+ "\uFEE0",
+ "\u0644",
+ "\uFEE1",
+ "\u0645",
+ "\uFEE2",
+ "\u0645",
+ "\uFEE3",
+ "\u0645",
+ "\uFEE4",
+ "\u0645",
+ "\uFEE5",
+ "\u0646",
+ "\uFEE6",
+ "\u0646",
+ "\uFEE7",
+ "\u0646",
+ "\uFEE8",
+ "\u0646",
+ "\uFEE9",
+ "\u0647",
+ "\uFEEA",
+ "\u0647",
+ "\uFEEB",
+ "\u0647",
+ "\uFEEC",
+ "\u0647",
+ "\uFEED",
+ "\u0648",
+ "\uFEEE",
+ "\u0648",
+ "\uFEEF",
+ "\u0649",
+ "\uFEF0",
+ "\u0649",
+ "\uFEF1",
+ "\u064A",
+ "\uFEF2",
+ "\u064A",
+ "\uFEF3",
+ "\u064A",
+ "\uFEF4",
+ "\u064A",
+ "\uFEF5",
+ "\u0644\u0622",
+ "\uFEF6",
+ "\u0644\u0622",
+ "\uFEF7",
+ "\u0644\u0623",
+ "\uFEF8",
+ "\u0644\u0623",
+ "\uFEF9",
+ "\u0644\u0625",
+ "\uFEFA",
+ "\u0644\u0625",
+ "\uFEFB",
+ "\u0644\u0627",
+ "\uFEFC",
+ "\u0644\u0627"
+ ];
+});
+function reverseIfRtl(chars) {
+ const charsLength = chars.length;
+ if (charsLength <= 1 || !isRTLRangeFor(chars.charCodeAt(0))) {
+ return chars;
+ }
+ const buf = [];
+ for (let ii = charsLength - 1; ii >= 0; ii--) {
+ buf.push(chars[ii]);
+ }
+ return buf.join("");
+}
+
-"use strict";
+/***/ }),
+/* 41 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
-Object.defineProperty(exports, "__esModule", {
+
+Object.defineProperty(exports, "__esModule", ({
value: true
-});
-exports.getSupplementalGlyphMapForCalibri = exports.getSupplementalGlyphMapForArialBlack = exports.getGlyphMapForStandardFonts = exports.getSymbolsFonts = exports.getSerifFonts = exports.getNonStdFontMap = exports.getStdFontMap = void 0;
+}));
+exports.getStandardFontName = getStandardFontName;
+exports.getSymbolsFonts = exports.getSupplementalGlyphMapForCalibri = exports.getSupplementalGlyphMapForArialBlack = exports.getStdFontMap = exports.getSerifFonts = exports.getNonStdFontMap = exports.getGlyphMapForStandardFonts = exports.getFontNameToFileMap = void 0;
-var _core_utils = __w_pdfjs_require__(8);
+var _core_utils = __w_pdfjs_require__(9);
+
+var _fonts_utils = __w_pdfjs_require__(38);
const getStdFontMap = (0, _core_utils.getLookupTableFactory)(function (t) {
+ t["Times-Roman"] = "Times-Roman";
+ t.Helvetica = "Helvetica";
+ t.Courier = "Courier";
+ t.Symbol = "Symbol";
+ t["Times-Bold"] = "Times-Bold";
+ t["Helvetica-Bold"] = "Helvetica-Bold";
+ t["Courier-Bold"] = "Courier-Bold";
+ t.ZapfDingbats = "ZapfDingbats";
+ t["Times-Italic"] = "Times-Italic";
+ t["Helvetica-Oblique"] = "Helvetica-Oblique";
+ t["Courier-Oblique"] = "Courier-Oblique";
+ t["Times-BoldItalic"] = "Times-BoldItalic";
+ t["Helvetica-BoldOblique"] = "Helvetica-BoldOblique";
+ t["Courier-BoldOblique"] = "Courier-BoldOblique";
t.ArialNarrow = "Helvetica";
t["ArialNarrow-Bold"] = "Helvetica-Bold";
t["ArialNarrow-BoldItalic"] = "Helvetica-BoldOblique";
@@ -35918,7 +40453,6 @@ const getStdFontMap = (0, _core_utils.getLookupTableFactory)(function (t) {
t["Arial-BoldMT"] = "Helvetica-Bold";
t["Arial-ItalicMT"] = "Helvetica-Oblique";
t.ArialMT = "Helvetica";
- t["Courier-Bold"] = "Courier-Bold";
t["Courier-BoldItalic"] = "Courier-BoldOblique";
t["Courier-Italic"] = "Courier-Oblique";
t.CourierNew = "Courier";
@@ -35929,12 +40463,8 @@ const getStdFontMap = (0, _core_utils.getLookupTableFactory)(function (t) {
t["CourierNewPS-BoldMT"] = "Courier-Bold";
t["CourierNewPS-ItalicMT"] = "Courier-Oblique";
t.CourierNewPSMT = "Courier";
- t.Helvetica = "Helvetica";
- t["Helvetica-Bold"] = "Helvetica-Bold";
t["Helvetica-BoldItalic"] = "Helvetica-BoldOblique";
- t["Helvetica-BoldOblique"] = "Helvetica-BoldOblique";
t["Helvetica-Italic"] = "Helvetica-Oblique";
- t["Helvetica-Oblique"] = "Helvetica-Oblique";
t["Symbol-Bold"] = "Symbol";
t["Symbol-BoldItalic"] = "Symbol";
t["Symbol-Italic"] = "Symbol";
@@ -35955,6 +40485,27 @@ const getStdFontMap = (0, _core_utils.getLookupTableFactory)(function (t) {
t["TimesNewRomanPSMT-Italic"] = "Times-Italic";
});
exports.getStdFontMap = getStdFontMap;
+const getFontNameToFileMap = (0, _core_utils.getLookupTableFactory)(function (t) {
+ t.Courier = "FoxitFixed.pfb";
+ t["Courier-Bold"] = "FoxitFixedBold.pfb";
+ t["Courier-BoldOblique"] = "FoxitFixedBoldItalic.pfb";
+ t["Courier-Oblique"] = "FoxitFixedItalic.pfb";
+ t.Helvetica = "FoxitSans.pfb";
+ t["Helvetica-Bold"] = "FoxitSansBold.pfb";
+ t["Helvetica-BoldOblique"] = "FoxitSansBoldItalic.pfb";
+ t["Helvetica-Oblique"] = "FoxitSansItalic.pfb";
+ t["Times-Roman"] = "FoxitSerif.pfb";
+ t["Times-Bold"] = "FoxitSerifBold.pfb";
+ t["Times-BoldItalic"] = "FoxitSerifBoldItalic.pfb";
+ t["Times-Italic"] = "FoxitSerifItalic.pfb";
+ t.Symbol = "FoxitSymbol.pfb";
+ t.ZapfDingbats = "FoxitDingbats.pfb";
+ t["LiberationSans-Regular"] = "LiberationSans-Regular.ttf";
+ t["LiberationSans-Bold"] = "LiberationSans-Bold.ttf";
+ t["LiberationSans-Italic"] = "LiberationSans-Italic.ttf";
+ t["LiberationSans-BoldItalic"] = "LiberationSans-BoldItalic.ttf";
+});
+exports.getFontNameToFileMap = getFontNameToFileMap;
const getNonStdFontMap = (0, _core_utils.getLookupTableFactory)(function (t) {
t.Calibri = "Helvetica";
t["Calibri-Bold"] = "Helvetica-Bold";
@@ -36627,2655 +41178,695 @@ const getSupplementalGlyphMapForCalibri = (0, _core_utils.getLookupTableFactory)
});
exports.getSupplementalGlyphMapForCalibri = getSupplementalGlyphMapForCalibri;
+function getStandardFontName(name) {
+ const fontName = (0, _fonts_utils.normalizeFontName)(name);
+ const stdFontMap = getStdFontMap();
+ return stdFontMap[fontName];
+}
+
/***/ }),
-/* 36 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 42 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
-var getLookupTableFactory = __w_pdfjs_require__(8).getLookupTableFactory;
-var getSpecialPUASymbols = getLookupTableFactory(function (t) {
- t[63721] = 0x00a9;
- t[63193] = 0x00a9;
- t[63720] = 0x00ae;
- t[63194] = 0x00ae;
- t[63722] = 0x2122;
- t[63195] = 0x2122;
- t[63729] = 0x23a7;
- t[63730] = 0x23a8;
- t[63731] = 0x23a9;
- t[63740] = 0x23ab;
- t[63741] = 0x23ac;
- t[63742] = 0x23ad;
- t[63726] = 0x23a1;
- t[63727] = 0x23a2;
- t[63728] = 0x23a3;
- t[63737] = 0x23a4;
- t[63738] = 0x23a5;
- t[63739] = 0x23a6;
- t[63723] = 0x239b;
- t[63724] = 0x239c;
- t[63725] = 0x239d;
- t[63734] = 0x239e;
- t[63735] = 0x239f;
- t[63736] = 0x23a0;
-});
-function mapSpecialUnicodeValues(code) {
- if (code >= 0xfff0 && code <= 0xffff) {
- return 0;
- } else if (code >= 0xf600 && code <= 0xf8ff) {
- return getSpecialPUASymbols()[code] || code;
- } else if (code === 0x00ad) {
- return 0x002d;
- }
- return code;
-}
-function getUnicodeForGlyph(name, glyphsUnicodeMap) {
- var unicode = glyphsUnicodeMap[name];
- if (unicode !== undefined) {
- return unicode;
- }
- if (!name) {
- return -1;
- }
- if (name[0] === "u") {
- var nameLen = name.length, hexStr;
- if (nameLen === 7 && name[1] === "n" && name[2] === "i") {
- hexStr = name.substring(3);
- } else if (nameLen >= 5 && nameLen <= 7) {
- hexStr = name.substring(1);
- } else {
- return -1;
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.ToUnicodeMap = exports.IdentityToUnicodeMap = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+class ToUnicodeMap {
+ constructor(cmap = []) {
+ this._map = cmap;
}
- if (hexStr === hexStr.toUpperCase()) {
- unicode = parseInt(hexStr, 16);
- if (unicode >= 0) {
- return unicode;
- }
+
+ get length() {
+ return this._map.length;
}
- }
- return -1;
-}
-var UnicodeRanges = [
- {
- begin: 0x0000,
- end: 0x007f
- },
- {
- begin: 0x0080,
- end: 0x00ff
- },
- {
- begin: 0x0100,
- end: 0x017f
- },
- {
- begin: 0x0180,
- end: 0x024f
- },
- {
- begin: 0x0250,
- end: 0x02af
- },
- {
- begin: 0x02b0,
- end: 0x02ff
- },
- {
- begin: 0x0300,
- end: 0x036f
- },
- {
- begin: 0x0370,
- end: 0x03ff
- },
- {
- begin: 0x2c80,
- end: 0x2cff
- },
- {
- begin: 0x0400,
- end: 0x04ff
- },
- {
- begin: 0x0530,
- end: 0x058f
- },
- {
- begin: 0x0590,
- end: 0x05ff
- },
- {
- begin: 0xa500,
- end: 0xa63f
- },
- {
- begin: 0x0600,
- end: 0x06ff
- },
- {
- begin: 0x07c0,
- end: 0x07ff
- },
- {
- begin: 0x0900,
- end: 0x097f
- },
- {
- begin: 0x0980,
- end: 0x09ff
- },
- {
- begin: 0x0a00,
- end: 0x0a7f
- },
- {
- begin: 0x0a80,
- end: 0x0aff
- },
- {
- begin: 0x0b00,
- end: 0x0b7f
- },
- {
- begin: 0x0b80,
- end: 0x0bff
- },
- {
- begin: 0x0c00,
- end: 0x0c7f
- },
- {
- begin: 0x0c80,
- end: 0x0cff
- },
- {
- begin: 0x0d00,
- end: 0x0d7f
- },
- {
- begin: 0x0e00,
- end: 0x0e7f
- },
- {
- begin: 0x0e80,
- end: 0x0eff
- },
- {
- begin: 0x10a0,
- end: 0x10ff
- },
- {
- begin: 0x1b00,
- end: 0x1b7f
- },
- {
- begin: 0x1100,
- end: 0x11ff
- },
- {
- begin: 0x1e00,
- end: 0x1eff
- },
- {
- begin: 0x1f00,
- end: 0x1fff
- },
- {
- begin: 0x2000,
- end: 0x206f
- },
- {
- begin: 0x2070,
- end: 0x209f
- },
- {
- begin: 0x20a0,
- end: 0x20cf
- },
- {
- begin: 0x20d0,
- end: 0x20ff
- },
- {
- begin: 0x2100,
- end: 0x214f
- },
- {
- begin: 0x2150,
- end: 0x218f
- },
- {
- begin: 0x2190,
- end: 0x21ff
- },
- {
- begin: 0x2200,
- end: 0x22ff
- },
- {
- begin: 0x2300,
- end: 0x23ff
- },
- {
- begin: 0x2400,
- end: 0x243f
- },
- {
- begin: 0x2440,
- end: 0x245f
- },
- {
- begin: 0x2460,
- end: 0x24ff
- },
- {
- begin: 0x2500,
- end: 0x257f
- },
- {
- begin: 0x2580,
- end: 0x259f
- },
- {
- begin: 0x25a0,
- end: 0x25ff
- },
- {
- begin: 0x2600,
- end: 0x26ff
- },
- {
- begin: 0x2700,
- end: 0x27bf
- },
- {
- begin: 0x3000,
- end: 0x303f
- },
- {
- begin: 0x3040,
- end: 0x309f
- },
- {
- begin: 0x30a0,
- end: 0x30ff
- },
- {
- begin: 0x3100,
- end: 0x312f
- },
- {
- begin: 0x3130,
- end: 0x318f
- },
- {
- begin: 0xa840,
- end: 0xa87f
- },
- {
- begin: 0x3200,
- end: 0x32ff
- },
- {
- begin: 0x3300,
- end: 0x33ff
- },
- {
- begin: 0xac00,
- end: 0xd7af
- },
- {
- begin: 0xd800,
- end: 0xdfff
- },
- {
- begin: 0x10900,
- end: 0x1091f
- },
- {
- begin: 0x4e00,
- end: 0x9fff
- },
- {
- begin: 0xe000,
- end: 0xf8ff
- },
- {
- begin: 0x31c0,
- end: 0x31ef
- },
- {
- begin: 0xfb00,
- end: 0xfb4f
- },
- {
- begin: 0xfb50,
- end: 0xfdff
- },
- {
- begin: 0xfe20,
- end: 0xfe2f
- },
- {
- begin: 0xfe10,
- end: 0xfe1f
- },
- {
- begin: 0xfe50,
- end: 0xfe6f
- },
- {
- begin: 0xfe70,
- end: 0xfeff
- },
- {
- begin: 0xff00,
- end: 0xffef
- },
- {
- begin: 0xfff0,
- end: 0xffff
- },
- {
- begin: 0x0f00,
- end: 0x0fff
- },
- {
- begin: 0x0700,
- end: 0x074f
- },
- {
- begin: 0x0780,
- end: 0x07bf
- },
- {
- begin: 0x0d80,
- end: 0x0dff
- },
- {
- begin: 0x1000,
- end: 0x109f
- },
- {
- begin: 0x1200,
- end: 0x137f
- },
- {
- begin: 0x13a0,
- end: 0x13ff
- },
- {
- begin: 0x1400,
- end: 0x167f
- },
- {
- begin: 0x1680,
- end: 0x169f
- },
- {
- begin: 0x16a0,
- end: 0x16ff
- },
- {
- begin: 0x1780,
- end: 0x17ff
- },
- {
- begin: 0x1800,
- end: 0x18af
- },
- {
- begin: 0x2800,
- end: 0x28ff
- },
- {
- begin: 0xa000,
- end: 0xa48f
- },
- {
- begin: 0x1700,
- end: 0x171f
- },
- {
- begin: 0x10300,
- end: 0x1032f
- },
- {
- begin: 0x10330,
- end: 0x1034f
- },
- {
- begin: 0x10400,
- end: 0x1044f
- },
- {
- begin: 0x1d000,
- end: 0x1d0ff
- },
- {
- begin: 0x1d400,
- end: 0x1d7ff
- },
- {
- begin: 0xff000,
- end: 0xffffd
- },
- {
- begin: 0xfe00,
- end: 0xfe0f
- },
- {
- begin: 0xe0000,
- end: 0xe007f
- },
- {
- begin: 0x1900,
- end: 0x194f
- },
- {
- begin: 0x1950,
- end: 0x197f
- },
- {
- begin: 0x1980,
- end: 0x19df
- },
- {
- begin: 0x1a00,
- end: 0x1a1f
- },
- {
- begin: 0x2c00,
- end: 0x2c5f
- },
- {
- begin: 0x2d30,
- end: 0x2d7f
- },
- {
- begin: 0x4dc0,
- end: 0x4dff
- },
- {
- begin: 0xa800,
- end: 0xa82f
- },
- {
- begin: 0x10000,
- end: 0x1007f
- },
- {
- begin: 0x10140,
- end: 0x1018f
- },
- {
- begin: 0x10380,
- end: 0x1039f
- },
- {
- begin: 0x103a0,
- end: 0x103df
- },
- {
- begin: 0x10450,
- end: 0x1047f
- },
- {
- begin: 0x10480,
- end: 0x104af
- },
- {
- begin: 0x10800,
- end: 0x1083f
- },
- {
- begin: 0x10a00,
- end: 0x10a5f
- },
- {
- begin: 0x1d300,
- end: 0x1d35f
- },
- {
- begin: 0x12000,
- end: 0x123ff
- },
- {
- begin: 0x1d360,
- end: 0x1d37f
- },
- {
- begin: 0x1b80,
- end: 0x1bbf
- },
- {
- begin: 0x1c00,
- end: 0x1c4f
- },
- {
- begin: 0x1c50,
- end: 0x1c7f
- },
- {
- begin: 0xa880,
- end: 0xa8df
- },
- {
- begin: 0xa900,
- end: 0xa92f
- },
- {
- begin: 0xa930,
- end: 0xa95f
- },
- {
- begin: 0xaa00,
- end: 0xaa5f
- },
- {
- begin: 0x10190,
- end: 0x101cf
- },
- {
- begin: 0x101d0,
- end: 0x101ff
- },
- {
- begin: 0x102a0,
- end: 0x102df
- },
- {
- begin: 0x1f030,
- end: 0x1f09f
- }
-];
-function getUnicodeRangeFor(value) {
- for (var i = 0, ii = UnicodeRanges.length; i < ii; i++) {
- var range = UnicodeRanges[i];
- if (value >= range.begin && value < range.end) {
- return i;
+
+ forEach(callback) {
+ for (const charCode in this._map) {
+ callback(charCode, this._map[charCode].charCodeAt(0));
+ }
}
- }
- return -1;
-}
-function isRTLRangeFor(value) {
- var range = UnicodeRanges[13];
- if (value >= range.begin && value < range.end) {
- return true;
- }
- range = UnicodeRanges[11];
- if (value >= range.begin && value < range.end) {
- return true;
- }
- return false;
-}
-var getNormalizedUnicodes = getLookupTableFactory(function (t) {
- t["\u00A8"] = "\u0020\u0308";
- t["\u00AF"] = "\u0020\u0304";
- t["\u00B4"] = "\u0020\u0301";
- t["\u00B5"] = "\u03BC";
- t["\u00B8"] = "\u0020\u0327";
- t["\u0132"] = "\u0049\u004A";
- t["\u0133"] = "\u0069\u006A";
- t["\u013F"] = "\u004C\u00B7";
- t["\u0140"] = "\u006C\u00B7";
- t["\u0149"] = "\u02BC\u006E";
- t["\u017F"] = "\u0073";
- t["\u01C4"] = "\u0044\u017D";
- t["\u01C5"] = "\u0044\u017E";
- t["\u01C6"] = "\u0064\u017E";
- t["\u01C7"] = "\u004C\u004A";
- t["\u01C8"] = "\u004C\u006A";
- t["\u01C9"] = "\u006C\u006A";
- t["\u01CA"] = "\u004E\u004A";
- t["\u01CB"] = "\u004E\u006A";
- t["\u01CC"] = "\u006E\u006A";
- t["\u01F1"] = "\u0044\u005A";
- t["\u01F2"] = "\u0044\u007A";
- t["\u01F3"] = "\u0064\u007A";
- t["\u02D8"] = "\u0020\u0306";
- t["\u02D9"] = "\u0020\u0307";
- t["\u02DA"] = "\u0020\u030A";
- t["\u02DB"] = "\u0020\u0328";
- t["\u02DC"] = "\u0020\u0303";
- t["\u02DD"] = "\u0020\u030B";
- t["\u037A"] = "\u0020\u0345";
- t["\u0384"] = "\u0020\u0301";
- t["\u03D0"] = "\u03B2";
- t["\u03D1"] = "\u03B8";
- t["\u03D2"] = "\u03A5";
- t["\u03D5"] = "\u03C6";
- t["\u03D6"] = "\u03C0";
- t["\u03F0"] = "\u03BA";
- t["\u03F1"] = "\u03C1";
- t["\u03F2"] = "\u03C2";
- t["\u03F4"] = "\u0398";
- t["\u03F5"] = "\u03B5";
- t["\u03F9"] = "\u03A3";
- t["\u0587"] = "\u0565\u0582";
- t["\u0675"] = "\u0627\u0674";
- t["\u0676"] = "\u0648\u0674";
- t["\u0677"] = "\u06C7\u0674";
- t["\u0678"] = "\u064A\u0674";
- t["\u0E33"] = "\u0E4D\u0E32";
- t["\u0EB3"] = "\u0ECD\u0EB2";
- t["\u0EDC"] = "\u0EAB\u0E99";
- t["\u0EDD"] = "\u0EAB\u0EA1";
- t["\u0F77"] = "\u0FB2\u0F81";
- t["\u0F79"] = "\u0FB3\u0F81";
- t["\u1E9A"] = "\u0061\u02BE";
- t["\u1FBD"] = "\u0020\u0313";
- t["\u1FBF"] = "\u0020\u0313";
- t["\u1FC0"] = "\u0020\u0342";
- t["\u1FFE"] = "\u0020\u0314";
- t["\u2002"] = "\u0020";
- t["\u2003"] = "\u0020";
- t["\u2004"] = "\u0020";
- t["\u2005"] = "\u0020";
- t["\u2006"] = "\u0020";
- t["\u2008"] = "\u0020";
- t["\u2009"] = "\u0020";
- t["\u200A"] = "\u0020";
- t["\u2017"] = "\u0020\u0333";
- t["\u2024"] = "\u002E";
- t["\u2025"] = "\u002E\u002E";
- t["\u2026"] = "\u002E\u002E\u002E";
- t["\u2033"] = "\u2032\u2032";
- t["\u2034"] = "\u2032\u2032\u2032";
- t["\u2036"] = "\u2035\u2035";
- t["\u2037"] = "\u2035\u2035\u2035";
- t["\u203C"] = "\u0021\u0021";
- t["\u203E"] = "\u0020\u0305";
- t["\u2047"] = "\u003F\u003F";
- t["\u2048"] = "\u003F\u0021";
- t["\u2049"] = "\u0021\u003F";
- t["\u2057"] = "\u2032\u2032\u2032\u2032";
- t["\u205F"] = "\u0020";
- t["\u20A8"] = "\u0052\u0073";
- t["\u2100"] = "\u0061\u002F\u0063";
- t["\u2101"] = "\u0061\u002F\u0073";
- t["\u2103"] = "\u00B0\u0043";
- t["\u2105"] = "\u0063\u002F\u006F";
- t["\u2106"] = "\u0063\u002F\u0075";
- t["\u2107"] = "\u0190";
- t["\u2109"] = "\u00B0\u0046";
- t["\u2116"] = "\u004E\u006F";
- t["\u2121"] = "\u0054\u0045\u004C";
- t["\u2135"] = "\u05D0";
- t["\u2136"] = "\u05D1";
- t["\u2137"] = "\u05D2";
- t["\u2138"] = "\u05D3";
- t["\u213B"] = "\u0046\u0041\u0058";
- t["\u2160"] = "\u0049";
- t["\u2161"] = "\u0049\u0049";
- t["\u2162"] = "\u0049\u0049\u0049";
- t["\u2163"] = "\u0049\u0056";
- t["\u2164"] = "\u0056";
- t["\u2165"] = "\u0056\u0049";
- t["\u2166"] = "\u0056\u0049\u0049";
- t["\u2167"] = "\u0056\u0049\u0049\u0049";
- t["\u2168"] = "\u0049\u0058";
- t["\u2169"] = "\u0058";
- t["\u216A"] = "\u0058\u0049";
- t["\u216B"] = "\u0058\u0049\u0049";
- t["\u216C"] = "\u004C";
- t["\u216D"] = "\u0043";
- t["\u216E"] = "\u0044";
- t["\u216F"] = "\u004D";
- t["\u2170"] = "\u0069";
- t["\u2171"] = "\u0069\u0069";
- t["\u2172"] = "\u0069\u0069\u0069";
- t["\u2173"] = "\u0069\u0076";
- t["\u2174"] = "\u0076";
- t["\u2175"] = "\u0076\u0069";
- t["\u2176"] = "\u0076\u0069\u0069";
- t["\u2177"] = "\u0076\u0069\u0069\u0069";
- t["\u2178"] = "\u0069\u0078";
- t["\u2179"] = "\u0078";
- t["\u217A"] = "\u0078\u0069";
- t["\u217B"] = "\u0078\u0069\u0069";
- t["\u217C"] = "\u006C";
- t["\u217D"] = "\u0063";
- t["\u217E"] = "\u0064";
- t["\u217F"] = "\u006D";
- t["\u222C"] = "\u222B\u222B";
- t["\u222D"] = "\u222B\u222B\u222B";
- t["\u222F"] = "\u222E\u222E";
- t["\u2230"] = "\u222E\u222E\u222E";
- t["\u2474"] = "\u0028\u0031\u0029";
- t["\u2475"] = "\u0028\u0032\u0029";
- t["\u2476"] = "\u0028\u0033\u0029";
- t["\u2477"] = "\u0028\u0034\u0029";
- t["\u2478"] = "\u0028\u0035\u0029";
- t["\u2479"] = "\u0028\u0036\u0029";
- t["\u247A"] = "\u0028\u0037\u0029";
- t["\u247B"] = "\u0028\u0038\u0029";
- t["\u247C"] = "\u0028\u0039\u0029";
- t["\u247D"] = "\u0028\u0031\u0030\u0029";
- t["\u247E"] = "\u0028\u0031\u0031\u0029";
- t["\u247F"] = "\u0028\u0031\u0032\u0029";
- t["\u2480"] = "\u0028\u0031\u0033\u0029";
- t["\u2481"] = "\u0028\u0031\u0034\u0029";
- t["\u2482"] = "\u0028\u0031\u0035\u0029";
- t["\u2483"] = "\u0028\u0031\u0036\u0029";
- t["\u2484"] = "\u0028\u0031\u0037\u0029";
- t["\u2485"] = "\u0028\u0031\u0038\u0029";
- t["\u2486"] = "\u0028\u0031\u0039\u0029";
- t["\u2487"] = "\u0028\u0032\u0030\u0029";
- t["\u2488"] = "\u0031\u002E";
- t["\u2489"] = "\u0032\u002E";
- t["\u248A"] = "\u0033\u002E";
- t["\u248B"] = "\u0034\u002E";
- t["\u248C"] = "\u0035\u002E";
- t["\u248D"] = "\u0036\u002E";
- t["\u248E"] = "\u0037\u002E";
- t["\u248F"] = "\u0038\u002E";
- t["\u2490"] = "\u0039\u002E";
- t["\u2491"] = "\u0031\u0030\u002E";
- t["\u2492"] = "\u0031\u0031\u002E";
- t["\u2493"] = "\u0031\u0032\u002E";
- t["\u2494"] = "\u0031\u0033\u002E";
- t["\u2495"] = "\u0031\u0034\u002E";
- t["\u2496"] = "\u0031\u0035\u002E";
- t["\u2497"] = "\u0031\u0036\u002E";
- t["\u2498"] = "\u0031\u0037\u002E";
- t["\u2499"] = "\u0031\u0038\u002E";
- t["\u249A"] = "\u0031\u0039\u002E";
- t["\u249B"] = "\u0032\u0030\u002E";
- t["\u249C"] = "\u0028\u0061\u0029";
- t["\u249D"] = "\u0028\u0062\u0029";
- t["\u249E"] = "\u0028\u0063\u0029";
- t["\u249F"] = "\u0028\u0064\u0029";
- t["\u24A0"] = "\u0028\u0065\u0029";
- t["\u24A1"] = "\u0028\u0066\u0029";
- t["\u24A2"] = "\u0028\u0067\u0029";
- t["\u24A3"] = "\u0028\u0068\u0029";
- t["\u24A4"] = "\u0028\u0069\u0029";
- t["\u24A5"] = "\u0028\u006A\u0029";
- t["\u24A6"] = "\u0028\u006B\u0029";
- t["\u24A7"] = "\u0028\u006C\u0029";
- t["\u24A8"] = "\u0028\u006D\u0029";
- t["\u24A9"] = "\u0028\u006E\u0029";
- t["\u24AA"] = "\u0028\u006F\u0029";
- t["\u24AB"] = "\u0028\u0070\u0029";
- t["\u24AC"] = "\u0028\u0071\u0029";
- t["\u24AD"] = "\u0028\u0072\u0029";
- t["\u24AE"] = "\u0028\u0073\u0029";
- t["\u24AF"] = "\u0028\u0074\u0029";
- t["\u24B0"] = "\u0028\u0075\u0029";
- t["\u24B1"] = "\u0028\u0076\u0029";
- t["\u24B2"] = "\u0028\u0077\u0029";
- t["\u24B3"] = "\u0028\u0078\u0029";
- t["\u24B4"] = "\u0028\u0079\u0029";
- t["\u24B5"] = "\u0028\u007A\u0029";
- t["\u2A0C"] = "\u222B\u222B\u222B\u222B";
- t["\u2A74"] = "\u003A\u003A\u003D";
- t["\u2A75"] = "\u003D\u003D";
- t["\u2A76"] = "\u003D\u003D\u003D";
- t["\u2E9F"] = "\u6BCD";
- t["\u2EF3"] = "\u9F9F";
- t["\u2F00"] = "\u4E00";
- t["\u2F01"] = "\u4E28";
- t["\u2F02"] = "\u4E36";
- t["\u2F03"] = "\u4E3F";
- t["\u2F04"] = "\u4E59";
- t["\u2F05"] = "\u4E85";
- t["\u2F06"] = "\u4E8C";
- t["\u2F07"] = "\u4EA0";
- t["\u2F08"] = "\u4EBA";
- t["\u2F09"] = "\u513F";
- t["\u2F0A"] = "\u5165";
- t["\u2F0B"] = "\u516B";
- t["\u2F0C"] = "\u5182";
- t["\u2F0D"] = "\u5196";
- t["\u2F0E"] = "\u51AB";
- t["\u2F0F"] = "\u51E0";
- t["\u2F10"] = "\u51F5";
- t["\u2F11"] = "\u5200";
- t["\u2F12"] = "\u529B";
- t["\u2F13"] = "\u52F9";
- t["\u2F14"] = "\u5315";
- t["\u2F15"] = "\u531A";
- t["\u2F16"] = "\u5338";
- t["\u2F17"] = "\u5341";
- t["\u2F18"] = "\u535C";
- t["\u2F19"] = "\u5369";
- t["\u2F1A"] = "\u5382";
- t["\u2F1B"] = "\u53B6";
- t["\u2F1C"] = "\u53C8";
- t["\u2F1D"] = "\u53E3";
- t["\u2F1E"] = "\u56D7";
- t["\u2F1F"] = "\u571F";
- t["\u2F20"] = "\u58EB";
- t["\u2F21"] = "\u5902";
- t["\u2F22"] = "\u590A";
- t["\u2F23"] = "\u5915";
- t["\u2F24"] = "\u5927";
- t["\u2F25"] = "\u5973";
- t["\u2F26"] = "\u5B50";
- t["\u2F27"] = "\u5B80";
- t["\u2F28"] = "\u5BF8";
- t["\u2F29"] = "\u5C0F";
- t["\u2F2A"] = "\u5C22";
- t["\u2F2B"] = "\u5C38";
- t["\u2F2C"] = "\u5C6E";
- t["\u2F2D"] = "\u5C71";
- t["\u2F2E"] = "\u5DDB";
- t["\u2F2F"] = "\u5DE5";
- t["\u2F30"] = "\u5DF1";
- t["\u2F31"] = "\u5DFE";
- t["\u2F32"] = "\u5E72";
- t["\u2F33"] = "\u5E7A";
- t["\u2F34"] = "\u5E7F";
- t["\u2F35"] = "\u5EF4";
- t["\u2F36"] = "\u5EFE";
- t["\u2F37"] = "\u5F0B";
- t["\u2F38"] = "\u5F13";
- t["\u2F39"] = "\u5F50";
- t["\u2F3A"] = "\u5F61";
- t["\u2F3B"] = "\u5F73";
- t["\u2F3C"] = "\u5FC3";
- t["\u2F3D"] = "\u6208";
- t["\u2F3E"] = "\u6236";
- t["\u2F3F"] = "\u624B";
- t["\u2F40"] = "\u652F";
- t["\u2F41"] = "\u6534";
- t["\u2F42"] = "\u6587";
- t["\u2F43"] = "\u6597";
- t["\u2F44"] = "\u65A4";
- t["\u2F45"] = "\u65B9";
- t["\u2F46"] = "\u65E0";
- t["\u2F47"] = "\u65E5";
- t["\u2F48"] = "\u66F0";
- t["\u2F49"] = "\u6708";
- t["\u2F4A"] = "\u6728";
- t["\u2F4B"] = "\u6B20";
- t["\u2F4C"] = "\u6B62";
- t["\u2F4D"] = "\u6B79";
- t["\u2F4E"] = "\u6BB3";
- t["\u2F4F"] = "\u6BCB";
- t["\u2F50"] = "\u6BD4";
- t["\u2F51"] = "\u6BDB";
- t["\u2F52"] = "\u6C0F";
- t["\u2F53"] = "\u6C14";
- t["\u2F54"] = "\u6C34";
- t["\u2F55"] = "\u706B";
- t["\u2F56"] = "\u722A";
- t["\u2F57"] = "\u7236";
- t["\u2F58"] = "\u723B";
- t["\u2F59"] = "\u723F";
- t["\u2F5A"] = "\u7247";
- t["\u2F5B"] = "\u7259";
- t["\u2F5C"] = "\u725B";
- t["\u2F5D"] = "\u72AC";
- t["\u2F5E"] = "\u7384";
- t["\u2F5F"] = "\u7389";
- t["\u2F60"] = "\u74DC";
- t["\u2F61"] = "\u74E6";
- t["\u2F62"] = "\u7518";
- t["\u2F63"] = "\u751F";
- t["\u2F64"] = "\u7528";
- t["\u2F65"] = "\u7530";
- t["\u2F66"] = "\u758B";
- t["\u2F67"] = "\u7592";
- t["\u2F68"] = "\u7676";
- t["\u2F69"] = "\u767D";
- t["\u2F6A"] = "\u76AE";
- t["\u2F6B"] = "\u76BF";
- t["\u2F6C"] = "\u76EE";
- t["\u2F6D"] = "\u77DB";
- t["\u2F6E"] = "\u77E2";
- t["\u2F6F"] = "\u77F3";
- t["\u2F70"] = "\u793A";
- t["\u2F71"] = "\u79B8";
- t["\u2F72"] = "\u79BE";
- t["\u2F73"] = "\u7A74";
- t["\u2F74"] = "\u7ACB";
- t["\u2F75"] = "\u7AF9";
- t["\u2F76"] = "\u7C73";
- t["\u2F77"] = "\u7CF8";
- t["\u2F78"] = "\u7F36";
- t["\u2F79"] = "\u7F51";
- t["\u2F7A"] = "\u7F8A";
- t["\u2F7B"] = "\u7FBD";
- t["\u2F7C"] = "\u8001";
- t["\u2F7D"] = "\u800C";
- t["\u2F7E"] = "\u8012";
- t["\u2F7F"] = "\u8033";
- t["\u2F80"] = "\u807F";
- t["\u2F81"] = "\u8089";
- t["\u2F82"] = "\u81E3";
- t["\u2F83"] = "\u81EA";
- t["\u2F84"] = "\u81F3";
- t["\u2F85"] = "\u81FC";
- t["\u2F86"] = "\u820C";
- t["\u2F87"] = "\u821B";
- t["\u2F88"] = "\u821F";
- t["\u2F89"] = "\u826E";
- t["\u2F8A"] = "\u8272";
- t["\u2F8B"] = "\u8278";
- t["\u2F8C"] = "\u864D";
- t["\u2F8D"] = "\u866B";
- t["\u2F8E"] = "\u8840";
- t["\u2F8F"] = "\u884C";
- t["\u2F90"] = "\u8863";
- t["\u2F91"] = "\u897E";
- t["\u2F92"] = "\u898B";
- t["\u2F93"] = "\u89D2";
- t["\u2F94"] = "\u8A00";
- t["\u2F95"] = "\u8C37";
- t["\u2F96"] = "\u8C46";
- t["\u2F97"] = "\u8C55";
- t["\u2F98"] = "\u8C78";
- t["\u2F99"] = "\u8C9D";
- t["\u2F9A"] = "\u8D64";
- t["\u2F9B"] = "\u8D70";
- t["\u2F9C"] = "\u8DB3";
- t["\u2F9D"] = "\u8EAB";
- t["\u2F9E"] = "\u8ECA";
- t["\u2F9F"] = "\u8F9B";
- t["\u2FA0"] = "\u8FB0";
- t["\u2FA1"] = "\u8FB5";
- t["\u2FA2"] = "\u9091";
- t["\u2FA3"] = "\u9149";
- t["\u2FA4"] = "\u91C6";
- t["\u2FA5"] = "\u91CC";
- t["\u2FA6"] = "\u91D1";
- t["\u2FA7"] = "\u9577";
- t["\u2FA8"] = "\u9580";
- t["\u2FA9"] = "\u961C";
- t["\u2FAA"] = "\u96B6";
- t["\u2FAB"] = "\u96B9";
- t["\u2FAC"] = "\u96E8";
- t["\u2FAD"] = "\u9751";
- t["\u2FAE"] = "\u975E";
- t["\u2FAF"] = "\u9762";
- t["\u2FB0"] = "\u9769";
- t["\u2FB1"] = "\u97CB";
- t["\u2FB2"] = "\u97ED";
- t["\u2FB3"] = "\u97F3";
- t["\u2FB4"] = "\u9801";
- t["\u2FB5"] = "\u98A8";
- t["\u2FB6"] = "\u98DB";
- t["\u2FB7"] = "\u98DF";
- t["\u2FB8"] = "\u9996";
- t["\u2FB9"] = "\u9999";
- t["\u2FBA"] = "\u99AC";
- t["\u2FBB"] = "\u9AA8";
- t["\u2FBC"] = "\u9AD8";
- t["\u2FBD"] = "\u9ADF";
- t["\u2FBE"] = "\u9B25";
- t["\u2FBF"] = "\u9B2F";
- t["\u2FC0"] = "\u9B32";
- t["\u2FC1"] = "\u9B3C";
- t["\u2FC2"] = "\u9B5A";
- t["\u2FC3"] = "\u9CE5";
- t["\u2FC4"] = "\u9E75";
- t["\u2FC5"] = "\u9E7F";
- t["\u2FC6"] = "\u9EA5";
- t["\u2FC7"] = "\u9EBB";
- t["\u2FC8"] = "\u9EC3";
- t["\u2FC9"] = "\u9ECD";
- t["\u2FCA"] = "\u9ED1";
- t["\u2FCB"] = "\u9EF9";
- t["\u2FCC"] = "\u9EFD";
- t["\u2FCD"] = "\u9F0E";
- t["\u2FCE"] = "\u9F13";
- t["\u2FCF"] = "\u9F20";
- t["\u2FD0"] = "\u9F3B";
- t["\u2FD1"] = "\u9F4A";
- t["\u2FD2"] = "\u9F52";
- t["\u2FD3"] = "\u9F8D";
- t["\u2FD4"] = "\u9F9C";
- t["\u2FD5"] = "\u9FA0";
- t["\u3036"] = "\u3012";
- t["\u3038"] = "\u5341";
- t["\u3039"] = "\u5344";
- t["\u303A"] = "\u5345";
- t["\u309B"] = "\u0020\u3099";
- t["\u309C"] = "\u0020\u309A";
- t["\u3131"] = "\u1100";
- t["\u3132"] = "\u1101";
- t["\u3133"] = "\u11AA";
- t["\u3134"] = "\u1102";
- t["\u3135"] = "\u11AC";
- t["\u3136"] = "\u11AD";
- t["\u3137"] = "\u1103";
- t["\u3138"] = "\u1104";
- t["\u3139"] = "\u1105";
- t["\u313A"] = "\u11B0";
- t["\u313B"] = "\u11B1";
- t["\u313C"] = "\u11B2";
- t["\u313D"] = "\u11B3";
- t["\u313E"] = "\u11B4";
- t["\u313F"] = "\u11B5";
- t["\u3140"] = "\u111A";
- t["\u3141"] = "\u1106";
- t["\u3142"] = "\u1107";
- t["\u3143"] = "\u1108";
- t["\u3144"] = "\u1121";
- t["\u3145"] = "\u1109";
- t["\u3146"] = "\u110A";
- t["\u3147"] = "\u110B";
- t["\u3148"] = "\u110C";
- t["\u3149"] = "\u110D";
- t["\u314A"] = "\u110E";
- t["\u314B"] = "\u110F";
- t["\u314C"] = "\u1110";
- t["\u314D"] = "\u1111";
- t["\u314E"] = "\u1112";
- t["\u314F"] = "\u1161";
- t["\u3150"] = "\u1162";
- t["\u3151"] = "\u1163";
- t["\u3152"] = "\u1164";
- t["\u3153"] = "\u1165";
- t["\u3154"] = "\u1166";
- t["\u3155"] = "\u1167";
- t["\u3156"] = "\u1168";
- t["\u3157"] = "\u1169";
- t["\u3158"] = "\u116A";
- t["\u3159"] = "\u116B";
- t["\u315A"] = "\u116C";
- t["\u315B"] = "\u116D";
- t["\u315C"] = "\u116E";
- t["\u315D"] = "\u116F";
- t["\u315E"] = "\u1170";
- t["\u315F"] = "\u1171";
- t["\u3160"] = "\u1172";
- t["\u3161"] = "\u1173";
- t["\u3162"] = "\u1174";
- t["\u3163"] = "\u1175";
- t["\u3164"] = "\u1160";
- t["\u3165"] = "\u1114";
- t["\u3166"] = "\u1115";
- t["\u3167"] = "\u11C7";
- t["\u3168"] = "\u11C8";
- t["\u3169"] = "\u11CC";
- t["\u316A"] = "\u11CE";
- t["\u316B"] = "\u11D3";
- t["\u316C"] = "\u11D7";
- t["\u316D"] = "\u11D9";
- t["\u316E"] = "\u111C";
- t["\u316F"] = "\u11DD";
- t["\u3170"] = "\u11DF";
- t["\u3171"] = "\u111D";
- t["\u3172"] = "\u111E";
- t["\u3173"] = "\u1120";
- t["\u3174"] = "\u1122";
- t["\u3175"] = "\u1123";
- t["\u3176"] = "\u1127";
- t["\u3177"] = "\u1129";
- t["\u3178"] = "\u112B";
- t["\u3179"] = "\u112C";
- t["\u317A"] = "\u112D";
- t["\u317B"] = "\u112E";
- t["\u317C"] = "\u112F";
- t["\u317D"] = "\u1132";
- t["\u317E"] = "\u1136";
- t["\u317F"] = "\u1140";
- t["\u3180"] = "\u1147";
- t["\u3181"] = "\u114C";
- t["\u3182"] = "\u11F1";
- t["\u3183"] = "\u11F2";
- t["\u3184"] = "\u1157";
- t["\u3185"] = "\u1158";
- t["\u3186"] = "\u1159";
- t["\u3187"] = "\u1184";
- t["\u3188"] = "\u1185";
- t["\u3189"] = "\u1188";
- t["\u318A"] = "\u1191";
- t["\u318B"] = "\u1192";
- t["\u318C"] = "\u1194";
- t["\u318D"] = "\u119E";
- t["\u318E"] = "\u11A1";
- t["\u3200"] = "\u0028\u1100\u0029";
- t["\u3201"] = "\u0028\u1102\u0029";
- t["\u3202"] = "\u0028\u1103\u0029";
- t["\u3203"] = "\u0028\u1105\u0029";
- t["\u3204"] = "\u0028\u1106\u0029";
- t["\u3205"] = "\u0028\u1107\u0029";
- t["\u3206"] = "\u0028\u1109\u0029";
- t["\u3207"] = "\u0028\u110B\u0029";
- t["\u3208"] = "\u0028\u110C\u0029";
- t["\u3209"] = "\u0028\u110E\u0029";
- t["\u320A"] = "\u0028\u110F\u0029";
- t["\u320B"] = "\u0028\u1110\u0029";
- t["\u320C"] = "\u0028\u1111\u0029";
- t["\u320D"] = "\u0028\u1112\u0029";
- t["\u320E"] = "\u0028\u1100\u1161\u0029";
- t["\u320F"] = "\u0028\u1102\u1161\u0029";
- t["\u3210"] = "\u0028\u1103\u1161\u0029";
- t["\u3211"] = "\u0028\u1105\u1161\u0029";
- t["\u3212"] = "\u0028\u1106\u1161\u0029";
- t["\u3213"] = "\u0028\u1107\u1161\u0029";
- t["\u3214"] = "\u0028\u1109\u1161\u0029";
- t["\u3215"] = "\u0028\u110B\u1161\u0029";
- t["\u3216"] = "\u0028\u110C\u1161\u0029";
- t["\u3217"] = "\u0028\u110E\u1161\u0029";
- t["\u3218"] = "\u0028\u110F\u1161\u0029";
- t["\u3219"] = "\u0028\u1110\u1161\u0029";
- t["\u321A"] = "\u0028\u1111\u1161\u0029";
- t["\u321B"] = "\u0028\u1112\u1161\u0029";
- t["\u321C"] = "\u0028\u110C\u116E\u0029";
- t["\u321D"] = "\u0028\u110B\u1169\u110C\u1165\u11AB\u0029";
- t["\u321E"] = "\u0028\u110B\u1169\u1112\u116E\u0029";
- t["\u3220"] = "\u0028\u4E00\u0029";
- t["\u3221"] = "\u0028\u4E8C\u0029";
- t["\u3222"] = "\u0028\u4E09\u0029";
- t["\u3223"] = "\u0028\u56DB\u0029";
- t["\u3224"] = "\u0028\u4E94\u0029";
- t["\u3225"] = "\u0028\u516D\u0029";
- t["\u3226"] = "\u0028\u4E03\u0029";
- t["\u3227"] = "\u0028\u516B\u0029";
- t["\u3228"] = "\u0028\u4E5D\u0029";
- t["\u3229"] = "\u0028\u5341\u0029";
- t["\u322A"] = "\u0028\u6708\u0029";
- t["\u322B"] = "\u0028\u706B\u0029";
- t["\u322C"] = "\u0028\u6C34\u0029";
- t["\u322D"] = "\u0028\u6728\u0029";
- t["\u322E"] = "\u0028\u91D1\u0029";
- t["\u322F"] = "\u0028\u571F\u0029";
- t["\u3230"] = "\u0028\u65E5\u0029";
- t["\u3231"] = "\u0028\u682A\u0029";
- t["\u3232"] = "\u0028\u6709\u0029";
- t["\u3233"] = "\u0028\u793E\u0029";
- t["\u3234"] = "\u0028\u540D\u0029";
- t["\u3235"] = "\u0028\u7279\u0029";
- t["\u3236"] = "\u0028\u8CA1\u0029";
- t["\u3237"] = "\u0028\u795D\u0029";
- t["\u3238"] = "\u0028\u52B4\u0029";
- t["\u3239"] = "\u0028\u4EE3\u0029";
- t["\u323A"] = "\u0028\u547C\u0029";
- t["\u323B"] = "\u0028\u5B66\u0029";
- t["\u323C"] = "\u0028\u76E3\u0029";
- t["\u323D"] = "\u0028\u4F01\u0029";
- t["\u323E"] = "\u0028\u8CC7\u0029";
- t["\u323F"] = "\u0028\u5354\u0029";
- t["\u3240"] = "\u0028\u796D\u0029";
- t["\u3241"] = "\u0028\u4F11\u0029";
- t["\u3242"] = "\u0028\u81EA\u0029";
- t["\u3243"] = "\u0028\u81F3\u0029";
- t["\u32C0"] = "\u0031\u6708";
- t["\u32C1"] = "\u0032\u6708";
- t["\u32C2"] = "\u0033\u6708";
- t["\u32C3"] = "\u0034\u6708";
- t["\u32C4"] = "\u0035\u6708";
- t["\u32C5"] = "\u0036\u6708";
- t["\u32C6"] = "\u0037\u6708";
- t["\u32C7"] = "\u0038\u6708";
- t["\u32C8"] = "\u0039\u6708";
- t["\u32C9"] = "\u0031\u0030\u6708";
- t["\u32CA"] = "\u0031\u0031\u6708";
- t["\u32CB"] = "\u0031\u0032\u6708";
- t["\u3358"] = "\u0030\u70B9";
- t["\u3359"] = "\u0031\u70B9";
- t["\u335A"] = "\u0032\u70B9";
- t["\u335B"] = "\u0033\u70B9";
- t["\u335C"] = "\u0034\u70B9";
- t["\u335D"] = "\u0035\u70B9";
- t["\u335E"] = "\u0036\u70B9";
- t["\u335F"] = "\u0037\u70B9";
- t["\u3360"] = "\u0038\u70B9";
- t["\u3361"] = "\u0039\u70B9";
- t["\u3362"] = "\u0031\u0030\u70B9";
- t["\u3363"] = "\u0031\u0031\u70B9";
- t["\u3364"] = "\u0031\u0032\u70B9";
- t["\u3365"] = "\u0031\u0033\u70B9";
- t["\u3366"] = "\u0031\u0034\u70B9";
- t["\u3367"] = "\u0031\u0035\u70B9";
- t["\u3368"] = "\u0031\u0036\u70B9";
- t["\u3369"] = "\u0031\u0037\u70B9";
- t["\u336A"] = "\u0031\u0038\u70B9";
- t["\u336B"] = "\u0031\u0039\u70B9";
- t["\u336C"] = "\u0032\u0030\u70B9";
- t["\u336D"] = "\u0032\u0031\u70B9";
- t["\u336E"] = "\u0032\u0032\u70B9";
- t["\u336F"] = "\u0032\u0033\u70B9";
- t["\u3370"] = "\u0032\u0034\u70B9";
- t["\u33E0"] = "\u0031\u65E5";
- t["\u33E1"] = "\u0032\u65E5";
- t["\u33E2"] = "\u0033\u65E5";
- t["\u33E3"] = "\u0034\u65E5";
- t["\u33E4"] = "\u0035\u65E5";
- t["\u33E5"] = "\u0036\u65E5";
- t["\u33E6"] = "\u0037\u65E5";
- t["\u33E7"] = "\u0038\u65E5";
- t["\u33E8"] = "\u0039\u65E5";
- t["\u33E9"] = "\u0031\u0030\u65E5";
- t["\u33EA"] = "\u0031\u0031\u65E5";
- t["\u33EB"] = "\u0031\u0032\u65E5";
- t["\u33EC"] = "\u0031\u0033\u65E5";
- t["\u33ED"] = "\u0031\u0034\u65E5";
- t["\u33EE"] = "\u0031\u0035\u65E5";
- t["\u33EF"] = "\u0031\u0036\u65E5";
- t["\u33F0"] = "\u0031\u0037\u65E5";
- t["\u33F1"] = "\u0031\u0038\u65E5";
- t["\u33F2"] = "\u0031\u0039\u65E5";
- t["\u33F3"] = "\u0032\u0030\u65E5";
- t["\u33F4"] = "\u0032\u0031\u65E5";
- t["\u33F5"] = "\u0032\u0032\u65E5";
- t["\u33F6"] = "\u0032\u0033\u65E5";
- t["\u33F7"] = "\u0032\u0034\u65E5";
- t["\u33F8"] = "\u0032\u0035\u65E5";
- t["\u33F9"] = "\u0032\u0036\u65E5";
- t["\u33FA"] = "\u0032\u0037\u65E5";
- t["\u33FB"] = "\u0032\u0038\u65E5";
- t["\u33FC"] = "\u0032\u0039\u65E5";
- t["\u33FD"] = "\u0033\u0030\u65E5";
- t["\u33FE"] = "\u0033\u0031\u65E5";
- t["\uFB00"] = "\u0066\u0066";
- t["\uFB01"] = "\u0066\u0069";
- t["\uFB02"] = "\u0066\u006C";
- t["\uFB03"] = "\u0066\u0066\u0069";
- t["\uFB04"] = "\u0066\u0066\u006C";
- t["\uFB05"] = "\u017F\u0074";
- t["\uFB06"] = "\u0073\u0074";
- t["\uFB13"] = "\u0574\u0576";
- t["\uFB14"] = "\u0574\u0565";
- t["\uFB15"] = "\u0574\u056B";
- t["\uFB16"] = "\u057E\u0576";
- t["\uFB17"] = "\u0574\u056D";
- t["\uFB4F"] = "\u05D0\u05DC";
- t["\uFB50"] = "\u0671";
- t["\uFB51"] = "\u0671";
- t["\uFB52"] = "\u067B";
- t["\uFB53"] = "\u067B";
- t["\uFB54"] = "\u067B";
- t["\uFB55"] = "\u067B";
- t["\uFB56"] = "\u067E";
- t["\uFB57"] = "\u067E";
- t["\uFB58"] = "\u067E";
- t["\uFB59"] = "\u067E";
- t["\uFB5A"] = "\u0680";
- t["\uFB5B"] = "\u0680";
- t["\uFB5C"] = "\u0680";
- t["\uFB5D"] = "\u0680";
- t["\uFB5E"] = "\u067A";
- t["\uFB5F"] = "\u067A";
- t["\uFB60"] = "\u067A";
- t["\uFB61"] = "\u067A";
- t["\uFB62"] = "\u067F";
- t["\uFB63"] = "\u067F";
- t["\uFB64"] = "\u067F";
- t["\uFB65"] = "\u067F";
- t["\uFB66"] = "\u0679";
- t["\uFB67"] = "\u0679";
- t["\uFB68"] = "\u0679";
- t["\uFB69"] = "\u0679";
- t["\uFB6A"] = "\u06A4";
- t["\uFB6B"] = "\u06A4";
- t["\uFB6C"] = "\u06A4";
- t["\uFB6D"] = "\u06A4";
- t["\uFB6E"] = "\u06A6";
- t["\uFB6F"] = "\u06A6";
- t["\uFB70"] = "\u06A6";
- t["\uFB71"] = "\u06A6";
- t["\uFB72"] = "\u0684";
- t["\uFB73"] = "\u0684";
- t["\uFB74"] = "\u0684";
- t["\uFB75"] = "\u0684";
- t["\uFB76"] = "\u0683";
- t["\uFB77"] = "\u0683";
- t["\uFB78"] = "\u0683";
- t["\uFB79"] = "\u0683";
- t["\uFB7A"] = "\u0686";
- t["\uFB7B"] = "\u0686";
- t["\uFB7C"] = "\u0686";
- t["\uFB7D"] = "\u0686";
- t["\uFB7E"] = "\u0687";
- t["\uFB7F"] = "\u0687";
- t["\uFB80"] = "\u0687";
- t["\uFB81"] = "\u0687";
- t["\uFB82"] = "\u068D";
- t["\uFB83"] = "\u068D";
- t["\uFB84"] = "\u068C";
- t["\uFB85"] = "\u068C";
- t["\uFB86"] = "\u068E";
- t["\uFB87"] = "\u068E";
- t["\uFB88"] = "\u0688";
- t["\uFB89"] = "\u0688";
- t["\uFB8A"] = "\u0698";
- t["\uFB8B"] = "\u0698";
- t["\uFB8C"] = "\u0691";
- t["\uFB8D"] = "\u0691";
- t["\uFB8E"] = "\u06A9";
- t["\uFB8F"] = "\u06A9";
- t["\uFB90"] = "\u06A9";
- t["\uFB91"] = "\u06A9";
- t["\uFB92"] = "\u06AF";
- t["\uFB93"] = "\u06AF";
- t["\uFB94"] = "\u06AF";
- t["\uFB95"] = "\u06AF";
- t["\uFB96"] = "\u06B3";
- t["\uFB97"] = "\u06B3";
- t["\uFB98"] = "\u06B3";
- t["\uFB99"] = "\u06B3";
- t["\uFB9A"] = "\u06B1";
- t["\uFB9B"] = "\u06B1";
- t["\uFB9C"] = "\u06B1";
- t["\uFB9D"] = "\u06B1";
- t["\uFB9E"] = "\u06BA";
- t["\uFB9F"] = "\u06BA";
- t["\uFBA0"] = "\u06BB";
- t["\uFBA1"] = "\u06BB";
- t["\uFBA2"] = "\u06BB";
- t["\uFBA3"] = "\u06BB";
- t["\uFBA4"] = "\u06C0";
- t["\uFBA5"] = "\u06C0";
- t["\uFBA6"] = "\u06C1";
- t["\uFBA7"] = "\u06C1";
- t["\uFBA8"] = "\u06C1";
- t["\uFBA9"] = "\u06C1";
- t["\uFBAA"] = "\u06BE";
- t["\uFBAB"] = "\u06BE";
- t["\uFBAC"] = "\u06BE";
- t["\uFBAD"] = "\u06BE";
- t["\uFBAE"] = "\u06D2";
- t["\uFBAF"] = "\u06D2";
- t["\uFBB0"] = "\u06D3";
- t["\uFBB1"] = "\u06D3";
- t["\uFBD3"] = "\u06AD";
- t["\uFBD4"] = "\u06AD";
- t["\uFBD5"] = "\u06AD";
- t["\uFBD6"] = "\u06AD";
- t["\uFBD7"] = "\u06C7";
- t["\uFBD8"] = "\u06C7";
- t["\uFBD9"] = "\u06C6";
- t["\uFBDA"] = "\u06C6";
- t["\uFBDB"] = "\u06C8";
- t["\uFBDC"] = "\u06C8";
- t["\uFBDD"] = "\u0677";
- t["\uFBDE"] = "\u06CB";
- t["\uFBDF"] = "\u06CB";
- t["\uFBE0"] = "\u06C5";
- t["\uFBE1"] = "\u06C5";
- t["\uFBE2"] = "\u06C9";
- t["\uFBE3"] = "\u06C9";
- t["\uFBE4"] = "\u06D0";
- t["\uFBE5"] = "\u06D0";
- t["\uFBE6"] = "\u06D0";
- t["\uFBE7"] = "\u06D0";
- t["\uFBE8"] = "\u0649";
- t["\uFBE9"] = "\u0649";
- t["\uFBEA"] = "\u0626\u0627";
- t["\uFBEB"] = "\u0626\u0627";
- t["\uFBEC"] = "\u0626\u06D5";
- t["\uFBED"] = "\u0626\u06D5";
- t["\uFBEE"] = "\u0626\u0648";
- t["\uFBEF"] = "\u0626\u0648";
- t["\uFBF0"] = "\u0626\u06C7";
- t["\uFBF1"] = "\u0626\u06C7";
- t["\uFBF2"] = "\u0626\u06C6";
- t["\uFBF3"] = "\u0626\u06C6";
- t["\uFBF4"] = "\u0626\u06C8";
- t["\uFBF5"] = "\u0626\u06C8";
- t["\uFBF6"] = "\u0626\u06D0";
- t["\uFBF7"] = "\u0626\u06D0";
- t["\uFBF8"] = "\u0626\u06D0";
- t["\uFBF9"] = "\u0626\u0649";
- t["\uFBFA"] = "\u0626\u0649";
- t["\uFBFB"] = "\u0626\u0649";
- t["\uFBFC"] = "\u06CC";
- t["\uFBFD"] = "\u06CC";
- t["\uFBFE"] = "\u06CC";
- t["\uFBFF"] = "\u06CC";
- t["\uFC00"] = "\u0626\u062C";
- t["\uFC01"] = "\u0626\u062D";
- t["\uFC02"] = "\u0626\u0645";
- t["\uFC03"] = "\u0626\u0649";
- t["\uFC04"] = "\u0626\u064A";
- t["\uFC05"] = "\u0628\u062C";
- t["\uFC06"] = "\u0628\u062D";
- t["\uFC07"] = "\u0628\u062E";
- t["\uFC08"] = "\u0628\u0645";
- t["\uFC09"] = "\u0628\u0649";
- t["\uFC0A"] = "\u0628\u064A";
- t["\uFC0B"] = "\u062A\u062C";
- t["\uFC0C"] = "\u062A\u062D";
- t["\uFC0D"] = "\u062A\u062E";
- t["\uFC0E"] = "\u062A\u0645";
- t["\uFC0F"] = "\u062A\u0649";
- t["\uFC10"] = "\u062A\u064A";
- t["\uFC11"] = "\u062B\u062C";
- t["\uFC12"] = "\u062B\u0645";
- t["\uFC13"] = "\u062B\u0649";
- t["\uFC14"] = "\u062B\u064A";
- t["\uFC15"] = "\u062C\u062D";
- t["\uFC16"] = "\u062C\u0645";
- t["\uFC17"] = "\u062D\u062C";
- t["\uFC18"] = "\u062D\u0645";
- t["\uFC19"] = "\u062E\u062C";
- t["\uFC1A"] = "\u062E\u062D";
- t["\uFC1B"] = "\u062E\u0645";
- t["\uFC1C"] = "\u0633\u062C";
- t["\uFC1D"] = "\u0633\u062D";
- t["\uFC1E"] = "\u0633\u062E";
- t["\uFC1F"] = "\u0633\u0645";
- t["\uFC20"] = "\u0635\u062D";
- t["\uFC21"] = "\u0635\u0645";
- t["\uFC22"] = "\u0636\u062C";
- t["\uFC23"] = "\u0636\u062D";
- t["\uFC24"] = "\u0636\u062E";
- t["\uFC25"] = "\u0636\u0645";
- t["\uFC26"] = "\u0637\u062D";
- t["\uFC27"] = "\u0637\u0645";
- t["\uFC28"] = "\u0638\u0645";
- t["\uFC29"] = "\u0639\u062C";
- t["\uFC2A"] = "\u0639\u0645";
- t["\uFC2B"] = "\u063A\u062C";
- t["\uFC2C"] = "\u063A\u0645";
- t["\uFC2D"] = "\u0641\u062C";
- t["\uFC2E"] = "\u0641\u062D";
- t["\uFC2F"] = "\u0641\u062E";
- t["\uFC30"] = "\u0641\u0645";
- t["\uFC31"] = "\u0641\u0649";
- t["\uFC32"] = "\u0641\u064A";
- t["\uFC33"] = "\u0642\u062D";
- t["\uFC34"] = "\u0642\u0645";
- t["\uFC35"] = "\u0642\u0649";
- t["\uFC36"] = "\u0642\u064A";
- t["\uFC37"] = "\u0643\u0627";
- t["\uFC38"] = "\u0643\u062C";
- t["\uFC39"] = "\u0643\u062D";
- t["\uFC3A"] = "\u0643\u062E";
- t["\uFC3B"] = "\u0643\u0644";
- t["\uFC3C"] = "\u0643\u0645";
- t["\uFC3D"] = "\u0643\u0649";
- t["\uFC3E"] = "\u0643\u064A";
- t["\uFC3F"] = "\u0644\u062C";
- t["\uFC40"] = "\u0644\u062D";
- t["\uFC41"] = "\u0644\u062E";
- t["\uFC42"] = "\u0644\u0645";
- t["\uFC43"] = "\u0644\u0649";
- t["\uFC44"] = "\u0644\u064A";
- t["\uFC45"] = "\u0645\u062C";
- t["\uFC46"] = "\u0645\u062D";
- t["\uFC47"] = "\u0645\u062E";
- t["\uFC48"] = "\u0645\u0645";
- t["\uFC49"] = "\u0645\u0649";
- t["\uFC4A"] = "\u0645\u064A";
- t["\uFC4B"] = "\u0646\u062C";
- t["\uFC4C"] = "\u0646\u062D";
- t["\uFC4D"] = "\u0646\u062E";
- t["\uFC4E"] = "\u0646\u0645";
- t["\uFC4F"] = "\u0646\u0649";
- t["\uFC50"] = "\u0646\u064A";
- t["\uFC51"] = "\u0647\u062C";
- t["\uFC52"] = "\u0647\u0645";
- t["\uFC53"] = "\u0647\u0649";
- t["\uFC54"] = "\u0647\u064A";
- t["\uFC55"] = "\u064A\u062C";
- t["\uFC56"] = "\u064A\u062D";
- t["\uFC57"] = "\u064A\u062E";
- t["\uFC58"] = "\u064A\u0645";
- t["\uFC59"] = "\u064A\u0649";
- t["\uFC5A"] = "\u064A\u064A";
- t["\uFC5B"] = "\u0630\u0670";
- t["\uFC5C"] = "\u0631\u0670";
- t["\uFC5D"] = "\u0649\u0670";
- t["\uFC5E"] = "\u0020\u064C\u0651";
- t["\uFC5F"] = "\u0020\u064D\u0651";
- t["\uFC60"] = "\u0020\u064E\u0651";
- t["\uFC61"] = "\u0020\u064F\u0651";
- t["\uFC62"] = "\u0020\u0650\u0651";
- t["\uFC63"] = "\u0020\u0651\u0670";
- t["\uFC64"] = "\u0626\u0631";
- t["\uFC65"] = "\u0626\u0632";
- t["\uFC66"] = "\u0626\u0645";
- t["\uFC67"] = "\u0626\u0646";
- t["\uFC68"] = "\u0626\u0649";
- t["\uFC69"] = "\u0626\u064A";
- t["\uFC6A"] = "\u0628\u0631";
- t["\uFC6B"] = "\u0628\u0632";
- t["\uFC6C"] = "\u0628\u0645";
- t["\uFC6D"] = "\u0628\u0646";
- t["\uFC6E"] = "\u0628\u0649";
- t["\uFC6F"] = "\u0628\u064A";
- t["\uFC70"] = "\u062A\u0631";
- t["\uFC71"] = "\u062A\u0632";
- t["\uFC72"] = "\u062A\u0645";
- t["\uFC73"] = "\u062A\u0646";
- t["\uFC74"] = "\u062A\u0649";
- t["\uFC75"] = "\u062A\u064A";
- t["\uFC76"] = "\u062B\u0631";
- t["\uFC77"] = "\u062B\u0632";
- t["\uFC78"] = "\u062B\u0645";
- t["\uFC79"] = "\u062B\u0646";
- t["\uFC7A"] = "\u062B\u0649";
- t["\uFC7B"] = "\u062B\u064A";
- t["\uFC7C"] = "\u0641\u0649";
- t["\uFC7D"] = "\u0641\u064A";
- t["\uFC7E"] = "\u0642\u0649";
- t["\uFC7F"] = "\u0642\u064A";
- t["\uFC80"] = "\u0643\u0627";
- t["\uFC81"] = "\u0643\u0644";
- t["\uFC82"] = "\u0643\u0645";
- t["\uFC83"] = "\u0643\u0649";
- t["\uFC84"] = "\u0643\u064A";
- t["\uFC85"] = "\u0644\u0645";
- t["\uFC86"] = "\u0644\u0649";
- t["\uFC87"] = "\u0644\u064A";
- t["\uFC88"] = "\u0645\u0627";
- t["\uFC89"] = "\u0645\u0645";
- t["\uFC8A"] = "\u0646\u0631";
- t["\uFC8B"] = "\u0646\u0632";
- t["\uFC8C"] = "\u0646\u0645";
- t["\uFC8D"] = "\u0646\u0646";
- t["\uFC8E"] = "\u0646\u0649";
- t["\uFC8F"] = "\u0646\u064A";
- t["\uFC90"] = "\u0649\u0670";
- t["\uFC91"] = "\u064A\u0631";
- t["\uFC92"] = "\u064A\u0632";
- t["\uFC93"] = "\u064A\u0645";
- t["\uFC94"] = "\u064A\u0646";
- t["\uFC95"] = "\u064A\u0649";
- t["\uFC96"] = "\u064A\u064A";
- t["\uFC97"] = "\u0626\u062C";
- t["\uFC98"] = "\u0626\u062D";
- t["\uFC99"] = "\u0626\u062E";
- t["\uFC9A"] = "\u0626\u0645";
- t["\uFC9B"] = "\u0626\u0647";
- t["\uFC9C"] = "\u0628\u062C";
- t["\uFC9D"] = "\u0628\u062D";
- t["\uFC9E"] = "\u0628\u062E";
- t["\uFC9F"] = "\u0628\u0645";
- t["\uFCA0"] = "\u0628\u0647";
- t["\uFCA1"] = "\u062A\u062C";
- t["\uFCA2"] = "\u062A\u062D";
- t["\uFCA3"] = "\u062A\u062E";
- t["\uFCA4"] = "\u062A\u0645";
- t["\uFCA5"] = "\u062A\u0647";
- t["\uFCA6"] = "\u062B\u0645";
- t["\uFCA7"] = "\u062C\u062D";
- t["\uFCA8"] = "\u062C\u0645";
- t["\uFCA9"] = "\u062D\u062C";
- t["\uFCAA"] = "\u062D\u0645";
- t["\uFCAB"] = "\u062E\u062C";
- t["\uFCAC"] = "\u062E\u0645";
- t["\uFCAD"] = "\u0633\u062C";
- t["\uFCAE"] = "\u0633\u062D";
- t["\uFCAF"] = "\u0633\u062E";
- t["\uFCB0"] = "\u0633\u0645";
- t["\uFCB1"] = "\u0635\u062D";
- t["\uFCB2"] = "\u0635\u062E";
- t["\uFCB3"] = "\u0635\u0645";
- t["\uFCB4"] = "\u0636\u062C";
- t["\uFCB5"] = "\u0636\u062D";
- t["\uFCB6"] = "\u0636\u062E";
- t["\uFCB7"] = "\u0636\u0645";
- t["\uFCB8"] = "\u0637\u062D";
- t["\uFCB9"] = "\u0638\u0645";
- t["\uFCBA"] = "\u0639\u062C";
- t["\uFCBB"] = "\u0639\u0645";
- t["\uFCBC"] = "\u063A\u062C";
- t["\uFCBD"] = "\u063A\u0645";
- t["\uFCBE"] = "\u0641\u062C";
- t["\uFCBF"] = "\u0641\u062D";
- t["\uFCC0"] = "\u0641\u062E";
- t["\uFCC1"] = "\u0641\u0645";
- t["\uFCC2"] = "\u0642\u062D";
- t["\uFCC3"] = "\u0642\u0645";
- t["\uFCC4"] = "\u0643\u062C";
- t["\uFCC5"] = "\u0643\u062D";
- t["\uFCC6"] = "\u0643\u062E";
- t["\uFCC7"] = "\u0643\u0644";
- t["\uFCC8"] = "\u0643\u0645";
- t["\uFCC9"] = "\u0644\u062C";
- t["\uFCCA"] = "\u0644\u062D";
- t["\uFCCB"] = "\u0644\u062E";
- t["\uFCCC"] = "\u0644\u0645";
- t["\uFCCD"] = "\u0644\u0647";
- t["\uFCCE"] = "\u0645\u062C";
- t["\uFCCF"] = "\u0645\u062D";
- t["\uFCD0"] = "\u0645\u062E";
- t["\uFCD1"] = "\u0645\u0645";
- t["\uFCD2"] = "\u0646\u062C";
- t["\uFCD3"] = "\u0646\u062D";
- t["\uFCD4"] = "\u0646\u062E";
- t["\uFCD5"] = "\u0646\u0645";
- t["\uFCD6"] = "\u0646\u0647";
- t["\uFCD7"] = "\u0647\u062C";
- t["\uFCD8"] = "\u0647\u0645";
- t["\uFCD9"] = "\u0647\u0670";
- t["\uFCDA"] = "\u064A\u062C";
- t["\uFCDB"] = "\u064A\u062D";
- t["\uFCDC"] = "\u064A\u062E";
- t["\uFCDD"] = "\u064A\u0645";
- t["\uFCDE"] = "\u064A\u0647";
- t["\uFCDF"] = "\u0626\u0645";
- t["\uFCE0"] = "\u0626\u0647";
- t["\uFCE1"] = "\u0628\u0645";
- t["\uFCE2"] = "\u0628\u0647";
- t["\uFCE3"] = "\u062A\u0645";
- t["\uFCE4"] = "\u062A\u0647";
- t["\uFCE5"] = "\u062B\u0645";
- t["\uFCE6"] = "\u062B\u0647";
- t["\uFCE7"] = "\u0633\u0645";
- t["\uFCE8"] = "\u0633\u0647";
- t["\uFCE9"] = "\u0634\u0645";
- t["\uFCEA"] = "\u0634\u0647";
- t["\uFCEB"] = "\u0643\u0644";
- t["\uFCEC"] = "\u0643\u0645";
- t["\uFCED"] = "\u0644\u0645";
- t["\uFCEE"] = "\u0646\u0645";
- t["\uFCEF"] = "\u0646\u0647";
- t["\uFCF0"] = "\u064A\u0645";
- t["\uFCF1"] = "\u064A\u0647";
- t["\uFCF2"] = "\u0640\u064E\u0651";
- t["\uFCF3"] = "\u0640\u064F\u0651";
- t["\uFCF4"] = "\u0640\u0650\u0651";
- t["\uFCF5"] = "\u0637\u0649";
- t["\uFCF6"] = "\u0637\u064A";
- t["\uFCF7"] = "\u0639\u0649";
- t["\uFCF8"] = "\u0639\u064A";
- t["\uFCF9"] = "\u063A\u0649";
- t["\uFCFA"] = "\u063A\u064A";
- t["\uFCFB"] = "\u0633\u0649";
- t["\uFCFC"] = "\u0633\u064A";
- t["\uFCFD"] = "\u0634\u0649";
- t["\uFCFE"] = "\u0634\u064A";
- t["\uFCFF"] = "\u062D\u0649";
- t["\uFD00"] = "\u062D\u064A";
- t["\uFD01"] = "\u062C\u0649";
- t["\uFD02"] = "\u062C\u064A";
- t["\uFD03"] = "\u062E\u0649";
- t["\uFD04"] = "\u062E\u064A";
- t["\uFD05"] = "\u0635\u0649";
- t["\uFD06"] = "\u0635\u064A";
- t["\uFD07"] = "\u0636\u0649";
- t["\uFD08"] = "\u0636\u064A";
- t["\uFD09"] = "\u0634\u062C";
- t["\uFD0A"] = "\u0634\u062D";
- t["\uFD0B"] = "\u0634\u062E";
- t["\uFD0C"] = "\u0634\u0645";
- t["\uFD0D"] = "\u0634\u0631";
- t["\uFD0E"] = "\u0633\u0631";
- t["\uFD0F"] = "\u0635\u0631";
- t["\uFD10"] = "\u0636\u0631";
- t["\uFD11"] = "\u0637\u0649";
- t["\uFD12"] = "\u0637\u064A";
- t["\uFD13"] = "\u0639\u0649";
- t["\uFD14"] = "\u0639\u064A";
- t["\uFD15"] = "\u063A\u0649";
- t["\uFD16"] = "\u063A\u064A";
- t["\uFD17"] = "\u0633\u0649";
- t["\uFD18"] = "\u0633\u064A";
- t["\uFD19"] = "\u0634\u0649";
- t["\uFD1A"] = "\u0634\u064A";
- t["\uFD1B"] = "\u062D\u0649";
- t["\uFD1C"] = "\u062D\u064A";
- t["\uFD1D"] = "\u062C\u0649";
- t["\uFD1E"] = "\u062C\u064A";
- t["\uFD1F"] = "\u062E\u0649";
- t["\uFD20"] = "\u062E\u064A";
- t["\uFD21"] = "\u0635\u0649";
- t["\uFD22"] = "\u0635\u064A";
- t["\uFD23"] = "\u0636\u0649";
- t["\uFD24"] = "\u0636\u064A";
- t["\uFD25"] = "\u0634\u062C";
- t["\uFD26"] = "\u0634\u062D";
- t["\uFD27"] = "\u0634\u062E";
- t["\uFD28"] = "\u0634\u0645";
- t["\uFD29"] = "\u0634\u0631";
- t["\uFD2A"] = "\u0633\u0631";
- t["\uFD2B"] = "\u0635\u0631";
- t["\uFD2C"] = "\u0636\u0631";
- t["\uFD2D"] = "\u0634\u062C";
- t["\uFD2E"] = "\u0634\u062D";
- t["\uFD2F"] = "\u0634\u062E";
- t["\uFD30"] = "\u0634\u0645";
- t["\uFD31"] = "\u0633\u0647";
- t["\uFD32"] = "\u0634\u0647";
- t["\uFD33"] = "\u0637\u0645";
- t["\uFD34"] = "\u0633\u062C";
- t["\uFD35"] = "\u0633\u062D";
- t["\uFD36"] = "\u0633\u062E";
- t["\uFD37"] = "\u0634\u062C";
- t["\uFD38"] = "\u0634\u062D";
- t["\uFD39"] = "\u0634\u062E";
- t["\uFD3A"] = "\u0637\u0645";
- t["\uFD3B"] = "\u0638\u0645";
- t["\uFD3C"] = "\u0627\u064B";
- t["\uFD3D"] = "\u0627\u064B";
- t["\uFD50"] = "\u062A\u062C\u0645";
- t["\uFD51"] = "\u062A\u062D\u062C";
- t["\uFD52"] = "\u062A\u062D\u062C";
- t["\uFD53"] = "\u062A\u062D\u0645";
- t["\uFD54"] = "\u062A\u062E\u0645";
- t["\uFD55"] = "\u062A\u0645\u062C";
- t["\uFD56"] = "\u062A\u0645\u062D";
- t["\uFD57"] = "\u062A\u0645\u062E";
- t["\uFD58"] = "\u062C\u0645\u062D";
- t["\uFD59"] = "\u062C\u0645\u062D";
- t["\uFD5A"] = "\u062D\u0645\u064A";
- t["\uFD5B"] = "\u062D\u0645\u0649";
- t["\uFD5C"] = "\u0633\u062D\u062C";
- t["\uFD5D"] = "\u0633\u062C\u062D";
- t["\uFD5E"] = "\u0633\u062C\u0649";
- t["\uFD5F"] = "\u0633\u0645\u062D";
- t["\uFD60"] = "\u0633\u0645\u062D";
- t["\uFD61"] = "\u0633\u0645\u062C";
- t["\uFD62"] = "\u0633\u0645\u0645";
- t["\uFD63"] = "\u0633\u0645\u0645";
- t["\uFD64"] = "\u0635\u062D\u062D";
- t["\uFD65"] = "\u0635\u062D\u062D";
- t["\uFD66"] = "\u0635\u0645\u0645";
- t["\uFD67"] = "\u0634\u062D\u0645";
- t["\uFD68"] = "\u0634\u062D\u0645";
- t["\uFD69"] = "\u0634\u062C\u064A";
- t["\uFD6A"] = "\u0634\u0645\u062E";
- t["\uFD6B"] = "\u0634\u0645\u062E";
- t["\uFD6C"] = "\u0634\u0645\u0645";
- t["\uFD6D"] = "\u0634\u0645\u0645";
- t["\uFD6E"] = "\u0636\u062D\u0649";
- t["\uFD6F"] = "\u0636\u062E\u0645";
- t["\uFD70"] = "\u0636\u062E\u0645";
- t["\uFD71"] = "\u0637\u0645\u062D";
- t["\uFD72"] = "\u0637\u0645\u062D";
- t["\uFD73"] = "\u0637\u0645\u0645";
- t["\uFD74"] = "\u0637\u0645\u064A";
- t["\uFD75"] = "\u0639\u062C\u0645";
- t["\uFD76"] = "\u0639\u0645\u0645";
- t["\uFD77"] = "\u0639\u0645\u0645";
- t["\uFD78"] = "\u0639\u0645\u0649";
- t["\uFD79"] = "\u063A\u0645\u0645";
- t["\uFD7A"] = "\u063A\u0645\u064A";
- t["\uFD7B"] = "\u063A\u0645\u0649";
- t["\uFD7C"] = "\u0641\u062E\u0645";
- t["\uFD7D"] = "\u0641\u062E\u0645";
- t["\uFD7E"] = "\u0642\u0645\u062D";
- t["\uFD7F"] = "\u0642\u0645\u0645";
- t["\uFD80"] = "\u0644\u062D\u0645";
- t["\uFD81"] = "\u0644\u062D\u064A";
- t["\uFD82"] = "\u0644\u062D\u0649";
- t["\uFD83"] = "\u0644\u062C\u062C";
- t["\uFD84"] = "\u0644\u062C\u062C";
- t["\uFD85"] = "\u0644\u062E\u0645";
- t["\uFD86"] = "\u0644\u062E\u0645";
- t["\uFD87"] = "\u0644\u0645\u062D";
- t["\uFD88"] = "\u0644\u0645\u062D";
- t["\uFD89"] = "\u0645\u062D\u062C";
- t["\uFD8A"] = "\u0645\u062D\u0645";
- t["\uFD8B"] = "\u0645\u062D\u064A";
- t["\uFD8C"] = "\u0645\u062C\u062D";
- t["\uFD8D"] = "\u0645\u062C\u0645";
- t["\uFD8E"] = "\u0645\u062E\u062C";
- t["\uFD8F"] = "\u0645\u062E\u0645";
- t["\uFD92"] = "\u0645\u062C\u062E";
- t["\uFD93"] = "\u0647\u0645\u062C";
- t["\uFD94"] = "\u0647\u0645\u0645";
- t["\uFD95"] = "\u0646\u062D\u0645";
- t["\uFD96"] = "\u0646\u062D\u0649";
- t["\uFD97"] = "\u0646\u062C\u0645";
- t["\uFD98"] = "\u0646\u062C\u0645";
- t["\uFD99"] = "\u0646\u062C\u0649";
- t["\uFD9A"] = "\u0646\u0645\u064A";
- t["\uFD9B"] = "\u0646\u0645\u0649";
- t["\uFD9C"] = "\u064A\u0645\u0645";
- t["\uFD9D"] = "\u064A\u0645\u0645";
- t["\uFD9E"] = "\u0628\u062E\u064A";
- t["\uFD9F"] = "\u062A\u062C\u064A";
- t["\uFDA0"] = "\u062A\u062C\u0649";
- t["\uFDA1"] = "\u062A\u062E\u064A";
- t["\uFDA2"] = "\u062A\u062E\u0649";
- t["\uFDA3"] = "\u062A\u0645\u064A";
- t["\uFDA4"] = "\u062A\u0645\u0649";
- t["\uFDA5"] = "\u062C\u0645\u064A";
- t["\uFDA6"] = "\u062C\u062D\u0649";
- t["\uFDA7"] = "\u062C\u0645\u0649";
- t["\uFDA8"] = "\u0633\u062E\u0649";
- t["\uFDA9"] = "\u0635\u062D\u064A";
- t["\uFDAA"] = "\u0634\u062D\u064A";
- t["\uFDAB"] = "\u0636\u062D\u064A";
- t["\uFDAC"] = "\u0644\u062C\u064A";
- t["\uFDAD"] = "\u0644\u0645\u064A";
- t["\uFDAE"] = "\u064A\u062D\u064A";
- t["\uFDAF"] = "\u064A\u062C\u064A";
- t["\uFDB0"] = "\u064A\u0645\u064A";
- t["\uFDB1"] = "\u0645\u0645\u064A";
- t["\uFDB2"] = "\u0642\u0645\u064A";
- t["\uFDB3"] = "\u0646\u062D\u064A";
- t["\uFDB4"] = "\u0642\u0645\u062D";
- t["\uFDB5"] = "\u0644\u062D\u0645";
- t["\uFDB6"] = "\u0639\u0645\u064A";
- t["\uFDB7"] = "\u0643\u0645\u064A";
- t["\uFDB8"] = "\u0646\u062C\u062D";
- t["\uFDB9"] = "\u0645\u062E\u064A";
- t["\uFDBA"] = "\u0644\u062C\u0645";
- t["\uFDBB"] = "\u0643\u0645\u0645";
- t["\uFDBC"] = "\u0644\u062C\u0645";
- t["\uFDBD"] = "\u0646\u062C\u062D";
- t["\uFDBE"] = "\u062C\u062D\u064A";
- t["\uFDBF"] = "\u062D\u062C\u064A";
- t["\uFDC0"] = "\u0645\u062C\u064A";
- t["\uFDC1"] = "\u0641\u0645\u064A";
- t["\uFDC2"] = "\u0628\u062D\u064A";
- t["\uFDC3"] = "\u0643\u0645\u0645";
- t["\uFDC4"] = "\u0639\u062C\u0645";
- t["\uFDC5"] = "\u0635\u0645\u0645";
- t["\uFDC6"] = "\u0633\u062E\u064A";
- t["\uFDC7"] = "\u0646\u062C\u064A";
- t["\uFE49"] = "\u203E";
- t["\uFE4A"] = "\u203E";
- t["\uFE4B"] = "\u203E";
- t["\uFE4C"] = "\u203E";
- t["\uFE4D"] = "\u005F";
- t["\uFE4E"] = "\u005F";
- t["\uFE4F"] = "\u005F";
- t["\uFE80"] = "\u0621";
- t["\uFE81"] = "\u0622";
- t["\uFE82"] = "\u0622";
- t["\uFE83"] = "\u0623";
- t["\uFE84"] = "\u0623";
- t["\uFE85"] = "\u0624";
- t["\uFE86"] = "\u0624";
- t["\uFE87"] = "\u0625";
- t["\uFE88"] = "\u0625";
- t["\uFE89"] = "\u0626";
- t["\uFE8A"] = "\u0626";
- t["\uFE8B"] = "\u0626";
- t["\uFE8C"] = "\u0626";
- t["\uFE8D"] = "\u0627";
- t["\uFE8E"] = "\u0627";
- t["\uFE8F"] = "\u0628";
- t["\uFE90"] = "\u0628";
- t["\uFE91"] = "\u0628";
- t["\uFE92"] = "\u0628";
- t["\uFE93"] = "\u0629";
- t["\uFE94"] = "\u0629";
- t["\uFE95"] = "\u062A";
- t["\uFE96"] = "\u062A";
- t["\uFE97"] = "\u062A";
- t["\uFE98"] = "\u062A";
- t["\uFE99"] = "\u062B";
- t["\uFE9A"] = "\u062B";
- t["\uFE9B"] = "\u062B";
- t["\uFE9C"] = "\u062B";
- t["\uFE9D"] = "\u062C";
- t["\uFE9E"] = "\u062C";
- t["\uFE9F"] = "\u062C";
- t["\uFEA0"] = "\u062C";
- t["\uFEA1"] = "\u062D";
- t["\uFEA2"] = "\u062D";
- t["\uFEA3"] = "\u062D";
- t["\uFEA4"] = "\u062D";
- t["\uFEA5"] = "\u062E";
- t["\uFEA6"] = "\u062E";
- t["\uFEA7"] = "\u062E";
- t["\uFEA8"] = "\u062E";
- t["\uFEA9"] = "\u062F";
- t["\uFEAA"] = "\u062F";
- t["\uFEAB"] = "\u0630";
- t["\uFEAC"] = "\u0630";
- t["\uFEAD"] = "\u0631";
- t["\uFEAE"] = "\u0631";
- t["\uFEAF"] = "\u0632";
- t["\uFEB0"] = "\u0632";
- t["\uFEB1"] = "\u0633";
- t["\uFEB2"] = "\u0633";
- t["\uFEB3"] = "\u0633";
- t["\uFEB4"] = "\u0633";
- t["\uFEB5"] = "\u0634";
- t["\uFEB6"] = "\u0634";
- t["\uFEB7"] = "\u0634";
- t["\uFEB8"] = "\u0634";
- t["\uFEB9"] = "\u0635";
- t["\uFEBA"] = "\u0635";
- t["\uFEBB"] = "\u0635";
- t["\uFEBC"] = "\u0635";
- t["\uFEBD"] = "\u0636";
- t["\uFEBE"] = "\u0636";
- t["\uFEBF"] = "\u0636";
- t["\uFEC0"] = "\u0636";
- t["\uFEC1"] = "\u0637";
- t["\uFEC2"] = "\u0637";
- t["\uFEC3"] = "\u0637";
- t["\uFEC4"] = "\u0637";
- t["\uFEC5"] = "\u0638";
- t["\uFEC6"] = "\u0638";
- t["\uFEC7"] = "\u0638";
- t["\uFEC8"] = "\u0638";
- t["\uFEC9"] = "\u0639";
- t["\uFECA"] = "\u0639";
- t["\uFECB"] = "\u0639";
- t["\uFECC"] = "\u0639";
- t["\uFECD"] = "\u063A";
- t["\uFECE"] = "\u063A";
- t["\uFECF"] = "\u063A";
- t["\uFED0"] = "\u063A";
- t["\uFED1"] = "\u0641";
- t["\uFED2"] = "\u0641";
- t["\uFED3"] = "\u0641";
- t["\uFED4"] = "\u0641";
- t["\uFED5"] = "\u0642";
- t["\uFED6"] = "\u0642";
- t["\uFED7"] = "\u0642";
- t["\uFED8"] = "\u0642";
- t["\uFED9"] = "\u0643";
- t["\uFEDA"] = "\u0643";
- t["\uFEDB"] = "\u0643";
- t["\uFEDC"] = "\u0643";
- t["\uFEDD"] = "\u0644";
- t["\uFEDE"] = "\u0644";
- t["\uFEDF"] = "\u0644";
- t["\uFEE0"] = "\u0644";
- t["\uFEE1"] = "\u0645";
- t["\uFEE2"] = "\u0645";
- t["\uFEE3"] = "\u0645";
- t["\uFEE4"] = "\u0645";
- t["\uFEE5"] = "\u0646";
- t["\uFEE6"] = "\u0646";
- t["\uFEE7"] = "\u0646";
- t["\uFEE8"] = "\u0646";
- t["\uFEE9"] = "\u0647";
- t["\uFEEA"] = "\u0647";
- t["\uFEEB"] = "\u0647";
- t["\uFEEC"] = "\u0647";
- t["\uFEED"] = "\u0648";
- t["\uFEEE"] = "\u0648";
- t["\uFEEF"] = "\u0649";
- t["\uFEF0"] = "\u0649";
- t["\uFEF1"] = "\u064A";
- t["\uFEF2"] = "\u064A";
- t["\uFEF3"] = "\u064A";
- t["\uFEF4"] = "\u064A";
- t["\uFEF5"] = "\u0644\u0622";
- t["\uFEF6"] = "\u0644\u0622";
- t["\uFEF7"] = "\u0644\u0623";
- t["\uFEF8"] = "\u0644\u0623";
- t["\uFEF9"] = "\u0644\u0625";
- t["\uFEFA"] = "\u0644\u0625";
- t["\uFEFB"] = "\u0644\u0627";
- t["\uFEFC"] = "\u0644\u0627";
-});
-function reverseIfRtl(chars) {
- var charsLength = chars.length;
- if (charsLength <= 1 || !isRTLRangeFor(chars.charCodeAt(0))) {
- return chars;
- }
- var s = "";
- for (var ii = charsLength - 1; ii >= 0; ii--) {
- s += chars[ii];
- }
- return s;
-}
-exports.mapSpecialUnicodeValues = mapSpecialUnicodeValues;
-exports.reverseIfRtl = reverseIfRtl;
-exports.getUnicodeRangeFor = getUnicodeRangeFor;
-exports.getNormalizedUnicodes = getNormalizedUnicodes;
-exports.getUnicodeForGlyph = getUnicodeForGlyph;
-/***/ }),
-/* 37 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+ has(i) {
+ return this._map[i] !== undefined;
+ }
-"use strict";
+ get(i) {
+ return this._map[i];
+ }
+ charCodeOf(value) {
+ const map = this._map;
-Object.defineProperty(exports, "__esModule", {
- value: true
-});
-exports.FontRendererFactory = void 0;
+ if (map.length <= 0x10000) {
+ return map.indexOf(value);
+ }
-var _util = __w_pdfjs_require__(2);
+ for (const charCode in map) {
+ if (map[charCode] === value) {
+ return charCode | 0;
+ }
+ }
-var _cff_parser = __w_pdfjs_require__(31);
+ return -1;
+ }
-var _glyphlist = __w_pdfjs_require__(34);
+ amend(map) {
+ for (const charCode in map) {
+ this._map[charCode] = map[charCode];
+ }
+ }
-var _encodings = __w_pdfjs_require__(33);
+}
-var _stream = __w_pdfjs_require__(12);
+exports.ToUnicodeMap = ToUnicodeMap;
-var FontRendererFactory = function FontRendererFactoryClosure() {
- function getLong(data, offset) {
- return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3];
+class IdentityToUnicodeMap {
+ constructor(firstChar, lastChar) {
+ this.firstChar = firstChar;
+ this.lastChar = lastChar;
}
- function getUshort(data, offset) {
- return data[offset] << 8 | data[offset + 1];
+ get length() {
+ return this.lastChar + 1 - this.firstChar;
}
- function getSubroutineBias(subrs) {
- const numSubrs = subrs.length;
- let bias = 32768;
+ forEach(callback) {
+ for (let i = this.firstChar, ii = this.lastChar; i <= ii; i++) {
+ callback(i, i);
+ }
+ }
- if (numSubrs < 1240) {
- bias = 107;
- } else if (numSubrs < 33900) {
- bias = 1131;
+ has(i) {
+ return this.firstChar <= i && i <= this.lastChar;
+ }
+
+ get(i) {
+ if (this.firstChar <= i && i <= this.lastChar) {
+ return String.fromCharCode(i);
}
- return bias;
+ return undefined;
}
- function parseCmap(data, start, end) {
- var offset = getUshort(data, start + 2) === 1 ? getLong(data, start + 8) : getLong(data, start + 16);
- var format = getUshort(data, start + offset);
- var ranges, p, i;
+ charCodeOf(v) {
+ return Number.isInteger(v) && v >= this.firstChar && v <= this.lastChar ? v : -1;
+ }
- if (format === 4) {
- getUshort(data, start + offset + 2);
- var segCount = getUshort(data, start + offset + 6) >> 1;
- p = start + offset + 14;
- ranges = [];
+ amend(map) {
+ (0, _util.unreachable)("Should not call amend()");
+ }
- for (i = 0; i < segCount; i++, p += 2) {
- ranges[i] = {
- end: getUshort(data, p)
- };
- }
+}
- p += 2;
+exports.IdentityToUnicodeMap = IdentityToUnicodeMap;
- for (i = 0; i < segCount; i++, p += 2) {
- ranges[i].start = getUshort(data, p);
- }
+/***/ }),
+/* 43 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
- for (i = 0; i < segCount; i++, p += 2) {
- ranges[i].idDelta = getUshort(data, p);
- }
- for (i = 0; i < segCount; i++, p += 2) {
- var idOffset = getUshort(data, p);
- if (idOffset === 0) {
- continue;
- }
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.CFFFont = void 0;
- ranges[i].ids = [];
+var _cff_parser = __w_pdfjs_require__(35);
- for (var j = 0, jj = ranges[i].end - ranges[i].start + 1; j < jj; j++) {
- ranges[i].ids[j] = getUshort(data, p + idOffset);
- idOffset += 2;
- }
- }
+var _fonts_utils = __w_pdfjs_require__(38);
- return ranges;
- } else if (format === 12) {
- getLong(data, start + offset + 4);
- var groups = getLong(data, start + offset + 12);
- p = start + offset + 16;
- ranges = [];
+var _util = __w_pdfjs_require__(2);
- for (i = 0; i < groups; i++) {
- ranges.push({
- start: getLong(data, p),
- end: getLong(data, p + 4),
- idDelta: getLong(data, p + 8) - getLong(data, p)
- });
- p += 12;
- }
+class CFFFont {
+ constructor(file, properties) {
+ this.properties = properties;
+ const parser = new _cff_parser.CFFParser(file, properties, _fonts_utils.SEAC_ANALYSIS_ENABLED);
+ this.cff = parser.parse();
+ this.cff.duplicateFirstGlyph();
+ const compiler = new _cff_parser.CFFCompiler(this.cff);
+ this.seacs = this.cff.seacs;
- return ranges;
+ try {
+ this.data = compiler.compile();
+ } catch (e) {
+ (0, _util.warn)("Failed to compile font " + properties.loadedName);
+ this.data = file;
}
- throw new _util.FormatError(`unsupported cmap: ${format}`);
+ this._createBuiltInEncoding();
}
- function parseCff(data, start, end, seacAnalysisEnabled) {
- var properties = {};
- var parser = new _cff_parser.CFFParser(new _stream.Stream(data, start, end - start), properties, seacAnalysisEnabled);
- var cff = parser.parse();
- return {
- glyphs: cff.charStrings.objects,
- subrs: cff.topDict.privateDict && cff.topDict.privateDict.subrsIndex && cff.topDict.privateDict.subrsIndex.objects,
- gsubrs: cff.globalSubrIndex && cff.globalSubrIndex.objects,
- isCFFCIDFont: cff.isCIDFont,
- fdSelect: cff.fdSelect,
- fdArray: cff.fdArray
- };
+ get numGlyphs() {
+ return this.cff.charStrings.count;
}
- function parseGlyfTable(glyf, loca, isGlyphLocationsLong) {
- var itemSize, itemDecode;
+ getCharset() {
+ return this.cff.charset.charset;
+ }
- if (isGlyphLocationsLong) {
- itemSize = 4;
+ getGlyphMapping() {
+ const cff = this.cff;
+ const properties = this.properties;
+ const charsets = cff.charset.charset;
+ let charCodeToGlyphId;
+ let glyphId;
- itemDecode = function fontItemDecodeLong(data, offset) {
- return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3];
- };
- } else {
- itemSize = 2;
+ if (properties.composite) {
+ charCodeToGlyphId = Object.create(null);
+ let charCode;
- itemDecode = function fontItemDecode(data, offset) {
- return data[offset] << 9 | data[offset + 1] << 1;
- };
+ if (cff.isCIDFont) {
+ for (glyphId = 0; glyphId < charsets.length; glyphId++) {
+ const cid = charsets[glyphId];
+ charCode = properties.cMap.charCodeOf(cid);
+ charCodeToGlyphId[charCode] = glyphId;
+ }
+ } else {
+ for (glyphId = 0; glyphId < cff.charStrings.count; glyphId++) {
+ charCode = properties.cMap.charCodeOf(glyphId);
+ charCodeToGlyphId[charCode] = glyphId;
+ }
+ }
+
+ return charCodeToGlyphId;
}
- var glyphs = [];
- var startOffset = itemDecode(loca, 0);
+ let encoding = cff.encoding ? cff.encoding.encoding : null;
- for (var j = itemSize; j < loca.length; j += itemSize) {
- var endOffset = itemDecode(loca, j);
- glyphs.push(glyf.subarray(startOffset, endOffset));
- startOffset = endOffset;
+ if (properties.isInternalFont) {
+ encoding = properties.defaultEncoding;
}
- return glyphs;
+ charCodeToGlyphId = (0, _fonts_utils.type1FontGlyphMapping)(properties, encoding, charsets);
+ return charCodeToGlyphId;
}
- function lookupCmap(ranges, unicode) {
- var code = unicode.codePointAt(0),
- gid = 0;
- var l = 0,
- r = ranges.length - 1;
+ hasGlyphId(id) {
+ return this.cff.hasGlyphId(id);
+ }
- while (l < r) {
- var c = l + r + 1 >> 1;
+ _createBuiltInEncoding() {
+ const {
+ charset,
+ encoding
+ } = this.cff;
- if (code < ranges[c].start) {
- r = c - 1;
- } else {
- l = c;
- }
+ if (!charset || !encoding) {
+ return;
}
- if (ranges[l].start <= code && code <= ranges[l].end) {
- gid = ranges[l].idDelta + (ranges[l].ids ? ranges[l].ids[code - ranges[l].start] : code) & 0xffff;
- }
+ const charsets = charset.charset,
+ encodings = encoding.encoding;
+ const map = [];
- return {
- charCode: code,
- glyphId: gid
- };
- }
+ for (const charCode in encodings) {
+ const glyphId = encodings[charCode];
- function compileGlyf(code, cmds, font) {
- function moveTo(x, y) {
- cmds.push({
- cmd: "moveTo",
- args: [x, y]
- });
- }
+ if (glyphId >= 0) {
+ const glyphName = charsets[glyphId];
- function lineTo(x, y) {
- cmds.push({
- cmd: "lineTo",
- args: [x, y]
- });
+ if (glyphName) {
+ map[charCode] = glyphName;
+ }
+ }
}
- function quadraticCurveTo(xa, ya, x, y) {
- cmds.push({
- cmd: "quadraticCurveTo",
- args: [xa, ya, x, y]
- });
+ if (map.length > 0) {
+ this.properties.builtInEncoding = map;
}
+ }
- var i = 0;
- var numberOfContours = (code[i] << 24 | code[i + 1] << 16) >> 16;
- var flags;
- var x = 0,
- y = 0;
- i += 10;
-
- if (numberOfContours < 0) {
- do {
- flags = code[i] << 8 | code[i + 1];
- var glyphIndex = code[i + 2] << 8 | code[i + 3];
- i += 4;
- var arg1, arg2;
+}
- if (flags & 0x01) {
- arg1 = (code[i] << 24 | code[i + 1] << 16) >> 16;
- arg2 = (code[i + 2] << 24 | code[i + 3] << 16) >> 16;
- i += 4;
- } else {
- arg1 = code[i++];
- arg2 = code[i++];
- }
+exports.CFFFont = CFFFont;
- if (flags & 0x02) {
- x = arg1;
- y = arg2;
- } else {
- x = 0;
- y = 0;
- }
+/***/ }),
+/* 44 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
- var scaleX = 1,
- scaleY = 1,
- scale01 = 0,
- scale10 = 0;
- if (flags & 0x08) {
- scaleX = scaleY = (code[i] << 24 | code[i + 1] << 16) / 1073741824;
- i += 2;
- } else if (flags & 0x40) {
- scaleX = (code[i] << 24 | code[i + 1] << 16) / 1073741824;
- scaleY = (code[i + 2] << 24 | code[i + 3] << 16) / 1073741824;
- i += 4;
- } else if (flags & 0x80) {
- scaleX = (code[i] << 24 | code[i + 1] << 16) / 1073741824;
- scale01 = (code[i + 2] << 24 | code[i + 3] << 16) / 1073741824;
- scale10 = (code[i + 4] << 24 | code[i + 5] << 16) / 1073741824;
- scaleY = (code[i + 6] << 24 | code[i + 7] << 16) / 1073741824;
- i += 8;
- }
- var subglyph = font.glyphs[glyphIndex];
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.FontRendererFactory = void 0;
- if (subglyph) {
- cmds.push({
- cmd: "save"
- });
- cmds.push({
- cmd: "transform",
- args: [scaleX, scale01, scale10, scaleY, x, y]
- });
- compileGlyf(subglyph, cmds, font);
- cmds.push({
- cmd: "restore"
- });
- }
- } while (flags & 0x20);
- } else {
- var endPtsOfContours = [];
- var j, jj;
+var _util = __w_pdfjs_require__(2);
- for (j = 0; j < numberOfContours; j++) {
- endPtsOfContours.push(code[i] << 8 | code[i + 1]);
- i += 2;
- }
+var _cff_parser = __w_pdfjs_require__(35);
- var instructionLength = code[i] << 8 | code[i + 1];
- i += 2 + instructionLength;
- var numberOfPoints = endPtsOfContours[endPtsOfContours.length - 1] + 1;
- var points = [];
+var _glyphlist = __w_pdfjs_require__(39);
- while (points.length < numberOfPoints) {
- flags = code[i++];
- var repeat = 1;
+var _encodings = __w_pdfjs_require__(37);
- if (flags & 0x08) {
- repeat += code[i++];
- }
+var _stream = __w_pdfjs_require__(10);
- while (repeat-- > 0) {
- points.push({
- flags
- });
- }
- }
+function getLong(data, offset) {
+ return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3];
+}
- for (j = 0; j < numberOfPoints; j++) {
- switch (points[j].flags & 0x12) {
- case 0x00:
- x += (code[i] << 24 | code[i + 1] << 16) >> 16;
- i += 2;
- break;
+function getUshort(data, offset) {
+ return data[offset] << 8 | data[offset + 1];
+}
- case 0x02:
- x -= code[i++];
- break;
+function getSubroutineBias(subrs) {
+ const numSubrs = subrs.length;
+ let bias = 32768;
- case 0x12:
- x += code[i++];
- break;
- }
+ if (numSubrs < 1240) {
+ bias = 107;
+ } else if (numSubrs < 33900) {
+ bias = 1131;
+ }
- points[j].x = x;
- }
+ return bias;
+}
- for (j = 0; j < numberOfPoints; j++) {
- switch (points[j].flags & 0x24) {
- case 0x00:
- y += (code[i] << 24 | code[i + 1] << 16) >> 16;
- i += 2;
- break;
+function parseCmap(data, start, end) {
+ const offset = getUshort(data, start + 2) === 1 ? getLong(data, start + 8) : getLong(data, start + 16);
+ const format = getUshort(data, start + offset);
+ let ranges, p, i;
- case 0x04:
- y -= code[i++];
- break;
+ if (format === 4) {
+ getUshort(data, start + offset + 2);
+ const segCount = getUshort(data, start + offset + 6) >> 1;
+ p = start + offset + 14;
+ ranges = [];
- case 0x24:
- y += code[i++];
- break;
- }
+ for (i = 0; i < segCount; i++, p += 2) {
+ ranges[i] = {
+ end: getUshort(data, p)
+ };
+ }
- points[j].y = y;
- }
+ p += 2;
- var startPoint = 0;
+ for (i = 0; i < segCount; i++, p += 2) {
+ ranges[i].start = getUshort(data, p);
+ }
- for (i = 0; i < numberOfContours; i++) {
- var endPoint = endPtsOfContours[i];
- var contour = points.slice(startPoint, endPoint + 1);
+ for (i = 0; i < segCount; i++, p += 2) {
+ ranges[i].idDelta = getUshort(data, p);
+ }
- if (contour[0].flags & 1) {
- contour.push(contour[0]);
- } else if (contour[contour.length - 1].flags & 1) {
- contour.unshift(contour[contour.length - 1]);
- } else {
- var p = {
- flags: 1,
- x: (contour[0].x + contour[contour.length - 1].x) / 2,
- y: (contour[0].y + contour[contour.length - 1].y) / 2
- };
- contour.unshift(p);
- contour.push(p);
- }
+ for (i = 0; i < segCount; i++, p += 2) {
+ let idOffset = getUshort(data, p);
- moveTo(contour[0].x, contour[0].y);
+ if (idOffset === 0) {
+ continue;
+ }
- for (j = 1, jj = contour.length; j < jj; j++) {
- if (contour[j].flags & 1) {
- lineTo(contour[j].x, contour[j].y);
- } else if (contour[j + 1].flags & 1) {
- quadraticCurveTo(contour[j].x, contour[j].y, contour[j + 1].x, contour[j + 1].y);
- j++;
- } else {
- quadraticCurveTo(contour[j].x, contour[j].y, (contour[j].x + contour[j + 1].x) / 2, (contour[j].y + contour[j + 1].y) / 2);
- }
- }
+ ranges[i].ids = [];
- startPoint = endPoint + 1;
+ for (let j = 0, jj = ranges[i].end - ranges[i].start + 1; j < jj; j++) {
+ ranges[i].ids[j] = getUshort(data, p + idOffset);
+ idOffset += 2;
}
}
- }
- function compileCharString(charStringCode, cmds, font, glyphId) {
- function moveTo(x, y) {
- cmds.push({
- cmd: "moveTo",
- args: [x, y]
+ return ranges;
+ } else if (format === 12) {
+ getLong(data, start + offset + 4);
+ const groups = getLong(data, start + offset + 12);
+ p = start + offset + 16;
+ ranges = [];
+
+ for (i = 0; i < groups; i++) {
+ ranges.push({
+ start: getLong(data, p),
+ end: getLong(data, p + 4),
+ idDelta: getLong(data, p + 8) - getLong(data, p)
});
+ p += 12;
}
- function lineTo(x, y) {
- cmds.push({
- cmd: "lineTo",
- args: [x, y]
- });
- }
+ return ranges;
+ }
- function bezierCurveTo(x1, y1, x2, y2, x, y) {
- cmds.push({
- cmd: "bezierCurveTo",
- args: [x1, y1, x2, y2, x, y]
- });
+ throw new _util.FormatError(`unsupported cmap: ${format}`);
+}
+
+function parseCff(data, start, end, seacAnalysisEnabled) {
+ const properties = {};
+ const parser = new _cff_parser.CFFParser(new _stream.Stream(data, start, end - start), properties, seacAnalysisEnabled);
+ const cff = parser.parse();
+ return {
+ glyphs: cff.charStrings.objects,
+ subrs: cff.topDict.privateDict && cff.topDict.privateDict.subrsIndex && cff.topDict.privateDict.subrsIndex.objects,
+ gsubrs: cff.globalSubrIndex && cff.globalSubrIndex.objects,
+ isCFFCIDFont: cff.isCIDFont,
+ fdSelect: cff.fdSelect,
+ fdArray: cff.fdArray
+ };
+}
+
+function parseGlyfTable(glyf, loca, isGlyphLocationsLong) {
+ let itemSize, itemDecode;
+
+ if (isGlyphLocationsLong) {
+ itemSize = 4;
+
+ itemDecode = function fontItemDecodeLong(data, offset) {
+ return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3];
+ };
+ } else {
+ itemSize = 2;
+
+ itemDecode = function fontItemDecode(data, offset) {
+ return data[offset] << 9 | data[offset + 1] << 1;
+ };
+ }
+
+ const glyphs = [];
+ let startOffset = itemDecode(loca, 0);
+
+ for (let j = itemSize; j < loca.length; j += itemSize) {
+ const endOffset = itemDecode(loca, j);
+ glyphs.push(glyf.subarray(startOffset, endOffset));
+ startOffset = endOffset;
+ }
+
+ return glyphs;
+}
+
+function lookupCmap(ranges, unicode) {
+ const code = unicode.codePointAt(0);
+ let gid = 0,
+ l = 0,
+ r = ranges.length - 1;
+
+ while (l < r) {
+ const c = l + r + 1 >> 1;
+
+ if (code < ranges[c].start) {
+ r = c - 1;
+ } else {
+ l = c;
}
+ }
- var stack = [];
- var x = 0,
- y = 0;
- var stems = 0;
+ if (ranges[l].start <= code && code <= ranges[l].end) {
+ gid = ranges[l].idDelta + (ranges[l].ids ? ranges[l].ids[code - ranges[l].start] : code) & 0xffff;
+ }
- function parse(code) {
- var i = 0;
+ return {
+ charCode: code,
+ glyphId: gid
+ };
+}
- while (i < code.length) {
- var stackClean = false;
- var v = code[i++];
- var xa, xb, ya, yb, y1, y2, y3, n, subrCode;
+function compileGlyf(code, cmds, font) {
+ function moveTo(x, y) {
+ cmds.push({
+ cmd: "moveTo",
+ args: [x, y]
+ });
+ }
- switch (v) {
- case 1:
- stems += stack.length >> 1;
- stackClean = true;
- break;
+ function lineTo(x, y) {
+ cmds.push({
+ cmd: "lineTo",
+ args: [x, y]
+ });
+ }
- case 3:
- stems += stack.length >> 1;
- stackClean = true;
- break;
+ function quadraticCurveTo(xa, ya, x, y) {
+ cmds.push({
+ cmd: "quadraticCurveTo",
+ args: [xa, ya, x, y]
+ });
+ }
- case 4:
- y += stack.pop();
- moveTo(x, y);
- stackClean = true;
- break;
+ let i = 0;
+ const numberOfContours = (code[i] << 24 | code[i + 1] << 16) >> 16;
+ let flags;
+ let x = 0,
+ y = 0;
+ i += 10;
- case 5:
- while (stack.length > 0) {
- x += stack.shift();
- y += stack.shift();
- lineTo(x, y);
- }
+ if (numberOfContours < 0) {
+ do {
+ flags = code[i] << 8 | code[i + 1];
+ const glyphIndex = code[i + 2] << 8 | code[i + 3];
+ i += 4;
+ let arg1, arg2;
+
+ if (flags & 0x01) {
+ arg1 = (code[i] << 24 | code[i + 1] << 16) >> 16;
+ arg2 = (code[i + 2] << 24 | code[i + 3] << 16) >> 16;
+ i += 4;
+ } else {
+ arg1 = code[i++];
+ arg2 = code[i++];
+ }
- break;
+ if (flags & 0x02) {
+ x = arg1;
+ y = arg2;
+ } else {
+ x = 0;
+ y = 0;
+ }
- case 6:
- while (stack.length > 0) {
- x += stack.shift();
- lineTo(x, y);
+ let scaleX = 1,
+ scaleY = 1,
+ scale01 = 0,
+ scale10 = 0;
- if (stack.length === 0) {
- break;
- }
+ if (flags & 0x08) {
+ scaleX = scaleY = (code[i] << 24 | code[i + 1] << 16) / 1073741824;
+ i += 2;
+ } else if (flags & 0x40) {
+ scaleX = (code[i] << 24 | code[i + 1] << 16) / 1073741824;
+ scaleY = (code[i + 2] << 24 | code[i + 3] << 16) / 1073741824;
+ i += 4;
+ } else if (flags & 0x80) {
+ scaleX = (code[i] << 24 | code[i + 1] << 16) / 1073741824;
+ scale01 = (code[i + 2] << 24 | code[i + 3] << 16) / 1073741824;
+ scale10 = (code[i + 4] << 24 | code[i + 5] << 16) / 1073741824;
+ scaleY = (code[i + 6] << 24 | code[i + 7] << 16) / 1073741824;
+ i += 8;
+ }
- y += stack.shift();
- lineTo(x, y);
- }
+ const subglyph = font.glyphs[glyphIndex];
- break;
+ if (subglyph) {
+ cmds.push({
+ cmd: "save"
+ }, {
+ cmd: "transform",
+ args: [scaleX, scale01, scale10, scaleY, x, y]
+ });
+ compileGlyf(subglyph, cmds, font);
+ cmds.push({
+ cmd: "restore"
+ });
+ }
+ } while (flags & 0x20);
+ } else {
+ const endPtsOfContours = [];
+ let j, jj;
- case 7:
- while (stack.length > 0) {
- y += stack.shift();
- lineTo(x, y);
+ for (j = 0; j < numberOfContours; j++) {
+ endPtsOfContours.push(code[i] << 8 | code[i + 1]);
+ i += 2;
+ }
- if (stack.length === 0) {
- break;
- }
+ const instructionLength = code[i] << 8 | code[i + 1];
+ i += 2 + instructionLength;
+ const numberOfPoints = endPtsOfContours[endPtsOfContours.length - 1] + 1;
+ const points = [];
- x += stack.shift();
- lineTo(x, y);
- }
+ while (points.length < numberOfPoints) {
+ flags = code[i++];
+ let repeat = 1;
- break;
+ if (flags & 0x08) {
+ repeat += code[i++];
+ }
- case 8:
- while (stack.length > 0) {
- xa = x + stack.shift();
- ya = y + stack.shift();
- xb = xa + stack.shift();
- yb = ya + stack.shift();
- x = xb + stack.shift();
- y = yb + stack.shift();
- bezierCurveTo(xa, ya, xb, yb, x, y);
- }
+ while (repeat-- > 0) {
+ points.push({
+ flags
+ });
+ }
+ }
- break;
+ for (j = 0; j < numberOfPoints; j++) {
+ switch (points[j].flags & 0x12) {
+ case 0x00:
+ x += (code[i] << 24 | code[i + 1] << 16) >> 16;
+ i += 2;
+ break;
- case 10:
- n = stack.pop();
- subrCode = null;
+ case 0x02:
+ x -= code[i++];
+ break;
- if (font.isCFFCIDFont) {
- const fdIndex = font.fdSelect.getFDIndex(glyphId);
+ case 0x12:
+ x += code[i++];
+ break;
+ }
- if (fdIndex >= 0 && fdIndex < font.fdArray.length) {
- const fontDict = font.fdArray[fdIndex];
- let subrs;
+ points[j].x = x;
+ }
- if (fontDict.privateDict && fontDict.privateDict.subrsIndex) {
- subrs = fontDict.privateDict.subrsIndex.objects;
- }
+ for (j = 0; j < numberOfPoints; j++) {
+ switch (points[j].flags & 0x24) {
+ case 0x00:
+ y += (code[i] << 24 | code[i + 1] << 16) >> 16;
+ i += 2;
+ break;
- if (subrs) {
- n += getSubroutineBias(subrs);
- subrCode = subrs[n];
- }
- } else {
- (0, _util.warn)("Invalid fd index for glyph index.");
- }
- } else {
- subrCode = font.subrs[n + font.subrsBias];
- }
+ case 0x04:
+ y -= code[i++];
+ break;
- if (subrCode) {
- parse(subrCode);
- }
+ case 0x24:
+ y += code[i++];
+ break;
+ }
- break;
+ points[j].y = y;
+ }
- case 11:
- return;
+ let startPoint = 0;
- case 12:
- v = code[i++];
-
- switch (v) {
- case 34:
- xa = x + stack.shift();
- xb = xa + stack.shift();
- y1 = y + stack.shift();
- x = xb + stack.shift();
- bezierCurveTo(xa, y, xb, y1, x, y1);
- xa = x + stack.shift();
- xb = xa + stack.shift();
- x = xb + stack.shift();
- bezierCurveTo(xa, y1, xb, y, x, y);
- break;
+ for (i = 0; i < numberOfContours; i++) {
+ const endPoint = endPtsOfContours[i];
+ const contour = points.slice(startPoint, endPoint + 1);
- case 35:
- xa = x + stack.shift();
- ya = y + stack.shift();
- xb = xa + stack.shift();
- yb = ya + stack.shift();
- x = xb + stack.shift();
- y = yb + stack.shift();
- bezierCurveTo(xa, ya, xb, yb, x, y);
- xa = x + stack.shift();
- ya = y + stack.shift();
- xb = xa + stack.shift();
- yb = ya + stack.shift();
- x = xb + stack.shift();
- y = yb + stack.shift();
- bezierCurveTo(xa, ya, xb, yb, x, y);
- stack.pop();
- break;
+ if (contour[0].flags & 1) {
+ contour.push(contour[0]);
+ } else if (contour[contour.length - 1].flags & 1) {
+ contour.unshift(contour[contour.length - 1]);
+ } else {
+ const p = {
+ flags: 1,
+ x: (contour[0].x + contour[contour.length - 1].x) / 2,
+ y: (contour[0].y + contour[contour.length - 1].y) / 2
+ };
+ contour.unshift(p);
+ contour.push(p);
+ }
- case 36:
- xa = x + stack.shift();
- y1 = y + stack.shift();
- xb = xa + stack.shift();
- y2 = y1 + stack.shift();
- x = xb + stack.shift();
- bezierCurveTo(xa, y1, xb, y2, x, y2);
- xa = x + stack.shift();
- xb = xa + stack.shift();
- y3 = y2 + stack.shift();
- x = xb + stack.shift();
- bezierCurveTo(xa, y2, xb, y3, x, y);
- break;
+ moveTo(contour[0].x, contour[0].y);
- case 37:
- var x0 = x,
- y0 = y;
- xa = x + stack.shift();
- ya = y + stack.shift();
- xb = xa + stack.shift();
- yb = ya + stack.shift();
- x = xb + stack.shift();
- y = yb + stack.shift();
- bezierCurveTo(xa, ya, xb, yb, x, y);
- xa = x + stack.shift();
- ya = y + stack.shift();
- xb = xa + stack.shift();
- yb = ya + stack.shift();
- x = xb;
- y = yb;
-
- if (Math.abs(x - x0) > Math.abs(y - y0)) {
- x += stack.shift();
- } else {
- y += stack.shift();
- }
+ for (j = 1, jj = contour.length; j < jj; j++) {
+ if (contour[j].flags & 1) {
+ lineTo(contour[j].x, contour[j].y);
+ } else if (contour[j + 1].flags & 1) {
+ quadraticCurveTo(contour[j].x, contour[j].y, contour[j + 1].x, contour[j + 1].y);
+ j++;
+ } else {
+ quadraticCurveTo(contour[j].x, contour[j].y, (contour[j].x + contour[j + 1].x) / 2, (contour[j].y + contour[j + 1].y) / 2);
+ }
+ }
- bezierCurveTo(xa, ya, xb, yb, x, y);
- break;
+ startPoint = endPoint + 1;
+ }
+ }
+}
- default:
- throw new _util.FormatError(`unknown operator: 12 ${v}`);
- }
+function compileCharString(charStringCode, cmds, font, glyphId) {
+ function moveTo(x, y) {
+ cmds.push({
+ cmd: "moveTo",
+ args: [x, y]
+ });
+ }
- break;
+ function lineTo(x, y) {
+ cmds.push({
+ cmd: "lineTo",
+ args: [x, y]
+ });
+ }
- case 14:
- if (stack.length >= 4) {
- var achar = stack.pop();
- var bchar = stack.pop();
- y = stack.pop();
- x = stack.pop();
- cmds.push({
- cmd: "save"
- });
- cmds.push({
- cmd: "translate",
- args: [x, y]
- });
- var cmap = lookupCmap(font.cmap, String.fromCharCode(font.glyphNameMap[_encodings.StandardEncoding[achar]]));
- compileCharString(font.glyphs[cmap.glyphId], cmds, font, cmap.glyphId);
- cmds.push({
- cmd: "restore"
- });
- cmap = lookupCmap(font.cmap, String.fromCharCode(font.glyphNameMap[_encodings.StandardEncoding[bchar]]));
- compileCharString(font.glyphs[cmap.glyphId], cmds, font, cmap.glyphId);
- }
+ function bezierCurveTo(x1, y1, x2, y2, x, y) {
+ cmds.push({
+ cmd: "bezierCurveTo",
+ args: [x1, y1, x2, y2, x, y]
+ });
+ }
- return;
+ const stack = [];
+ let x = 0,
+ y = 0;
+ let stems = 0;
- case 18:
- stems += stack.length >> 1;
- stackClean = true;
- break;
+ function parse(code) {
+ let i = 0;
- case 19:
- stems += stack.length >> 1;
- i += stems + 7 >> 3;
- stackClean = true;
- break;
+ while (i < code.length) {
+ let stackClean = false;
+ let v = code[i++];
+ let xa, xb, ya, yb, y1, y2, y3, n, subrCode;
- case 20:
- stems += stack.length >> 1;
- i += stems + 7 >> 3;
- stackClean = true;
- break;
+ switch (v) {
+ case 1:
+ stems += stack.length >> 1;
+ stackClean = true;
+ break;
- case 21:
- y += stack.pop();
- x += stack.pop();
- moveTo(x, y);
- stackClean = true;
- break;
+ case 3:
+ stems += stack.length >> 1;
+ stackClean = true;
+ break;
- case 22:
- x += stack.pop();
- moveTo(x, y);
- stackClean = true;
- break;
+ case 4:
+ y += stack.pop();
+ moveTo(x, y);
+ stackClean = true;
+ break;
- case 23:
- stems += stack.length >> 1;
- stackClean = true;
- break;
+ case 5:
+ while (stack.length > 0) {
+ x += stack.shift();
+ y += stack.shift();
+ lineTo(x, y);
+ }
- case 24:
- while (stack.length > 2) {
- xa = x + stack.shift();
- ya = y + stack.shift();
- xb = xa + stack.shift();
- yb = ya + stack.shift();
- x = xb + stack.shift();
- y = yb + stack.shift();
- bezierCurveTo(xa, ya, xb, yb, x, y);
- }
+ break;
+ case 6:
+ while (stack.length > 0) {
x += stack.shift();
+ lineTo(x, y);
+
+ if (stack.length === 0) {
+ break;
+ }
+
+ y += stack.shift();
+ lineTo(x, y);
+ }
+
+ break;
+
+ case 7:
+ while (stack.length > 0) {
y += stack.shift();
lineTo(x, y);
- break;
- case 25:
- while (stack.length > 6) {
- x += stack.shift();
- y += stack.shift();
- lineTo(x, y);
+ if (stack.length === 0) {
+ break;
}
+ x += stack.shift();
+ lineTo(x, y);
+ }
+
+ break;
+
+ case 8:
+ while (stack.length > 0) {
xa = x + stack.shift();
ya = y + stack.shift();
xb = xa + stack.shift();
@@ -39283,317 +41874,1697 @@ var FontRendererFactory = function FontRendererFactoryClosure() {
x = xb + stack.shift();
y = yb + stack.shift();
bezierCurveTo(xa, ya, xb, yb, x, y);
- break;
+ }
- case 26:
- if (stack.length % 2) {
- x += stack.shift();
- }
+ break;
- while (stack.length > 0) {
- xa = x;
- ya = y + stack.shift();
- xb = xa + stack.shift();
- yb = ya + stack.shift();
- x = xb;
- y = yb + stack.shift();
- bezierCurveTo(xa, ya, xb, yb, x, y);
- }
+ case 10:
+ n = stack.pop();
+ subrCode = null;
- break;
+ if (font.isCFFCIDFont) {
+ const fdIndex = font.fdSelect.getFDIndex(glyphId);
- case 27:
- if (stack.length % 2) {
- y += stack.shift();
- }
+ if (fdIndex >= 0 && fdIndex < font.fdArray.length) {
+ const fontDict = font.fdArray[fdIndex];
+ let subrs;
- while (stack.length > 0) {
- xa = x + stack.shift();
- ya = y;
- xb = xa + stack.shift();
- yb = ya + stack.shift();
- x = xb + stack.shift();
- y = yb;
- bezierCurveTo(xa, ya, xb, yb, x, y);
+ if (fontDict.privateDict && fontDict.privateDict.subrsIndex) {
+ subrs = fontDict.privateDict.subrsIndex.objects;
+ }
+
+ if (subrs) {
+ n += getSubroutineBias(subrs);
+ subrCode = subrs[n];
+ }
+ } else {
+ (0, _util.warn)("Invalid fd index for glyph index.");
}
+ } else {
+ subrCode = font.subrs[n + font.subrsBias];
+ }
- break;
+ if (subrCode) {
+ parse(subrCode);
+ }
- case 28:
- stack.push((code[i] << 24 | code[i + 1] << 16) >> 16);
- i += 2;
- break;
+ break;
- case 29:
- n = stack.pop() + font.gsubrsBias;
- subrCode = font.gsubrs[n];
+ case 11:
+ return;
- if (subrCode) {
- parse(subrCode);
- }
+ case 12:
+ v = code[i++];
- break;
+ switch (v) {
+ case 34:
+ xa = x + stack.shift();
+ xb = xa + stack.shift();
+ y1 = y + stack.shift();
+ x = xb + stack.shift();
+ bezierCurveTo(xa, y, xb, y1, x, y1);
+ xa = x + stack.shift();
+ xb = xa + stack.shift();
+ x = xb + stack.shift();
+ bezierCurveTo(xa, y1, xb, y, x, y);
+ break;
- case 30:
- while (stack.length > 0) {
- xa = x;
+ case 35:
+ xa = x + stack.shift();
ya = y + stack.shift();
xb = xa + stack.shift();
yb = ya + stack.shift();
x = xb + stack.shift();
- y = yb + (stack.length === 1 ? stack.shift() : 0);
+ y = yb + stack.shift();
bezierCurveTo(xa, ya, xb, yb, x, y);
-
- if (stack.length === 0) {
- break;
- }
-
xa = x + stack.shift();
- ya = y;
+ ya = y + stack.shift();
xb = xa + stack.shift();
yb = ya + stack.shift();
+ x = xb + stack.shift();
y = yb + stack.shift();
- x = xb + (stack.length === 1 ? stack.shift() : 0);
bezierCurveTo(xa, ya, xb, yb, x, y);
- }
+ stack.pop();
+ break;
- break;
+ case 36:
+ xa = x + stack.shift();
+ y1 = y + stack.shift();
+ xb = xa + stack.shift();
+ y2 = y1 + stack.shift();
+ x = xb + stack.shift();
+ bezierCurveTo(xa, y1, xb, y2, x, y2);
+ xa = x + stack.shift();
+ xb = xa + stack.shift();
+ y3 = y2 + stack.shift();
+ x = xb + stack.shift();
+ bezierCurveTo(xa, y2, xb, y3, x, y);
+ break;
- case 31:
- while (stack.length > 0) {
+ case 37:
+ const x0 = x,
+ y0 = y;
xa = x + stack.shift();
- ya = y;
+ ya = y + stack.shift();
xb = xa + stack.shift();
yb = ya + stack.shift();
+ x = xb + stack.shift();
y = yb + stack.shift();
- x = xb + (stack.length === 1 ? stack.shift() : 0);
bezierCurveTo(xa, ya, xb, yb, x, y);
-
- if (stack.length === 0) {
- break;
- }
-
- xa = x;
+ xa = x + stack.shift();
ya = y + stack.shift();
xb = xa + stack.shift();
yb = ya + stack.shift();
- x = xb + stack.shift();
- y = yb + (stack.length === 1 ? stack.shift() : 0);
+ x = xb;
+ y = yb;
+
+ if (Math.abs(x - x0) > Math.abs(y - y0)) {
+ x += stack.shift();
+ } else {
+ y += stack.shift();
+ }
+
bezierCurveTo(xa, ya, xb, yb, x, y);
- }
+ break;
- break;
+ default:
+ throw new _util.FormatError(`unknown operator: 12 ${v}`);
+ }
- default:
- if (v < 32) {
- throw new _util.FormatError(`unknown operator: ${v}`);
+ break;
+
+ case 14:
+ if (stack.length >= 4) {
+ const achar = stack.pop();
+ const bchar = stack.pop();
+ y = stack.pop();
+ x = stack.pop();
+ cmds.push({
+ cmd: "save"
+ }, {
+ cmd: "translate",
+ args: [x, y]
+ });
+ let cmap = lookupCmap(font.cmap, String.fromCharCode(font.glyphNameMap[_encodings.StandardEncoding[achar]]));
+ compileCharString(font.glyphs[cmap.glyphId], cmds, font, cmap.glyphId);
+ cmds.push({
+ cmd: "restore"
+ });
+ cmap = lookupCmap(font.cmap, String.fromCharCode(font.glyphNameMap[_encodings.StandardEncoding[bchar]]));
+ compileCharString(font.glyphs[cmap.glyphId], cmds, font, cmap.glyphId);
+ }
+
+ return;
+
+ case 18:
+ stems += stack.length >> 1;
+ stackClean = true;
+ break;
+
+ case 19:
+ stems += stack.length >> 1;
+ i += stems + 7 >> 3;
+ stackClean = true;
+ break;
+
+ case 20:
+ stems += stack.length >> 1;
+ i += stems + 7 >> 3;
+ stackClean = true;
+ break;
+
+ case 21:
+ y += stack.pop();
+ x += stack.pop();
+ moveTo(x, y);
+ stackClean = true;
+ break;
+
+ case 22:
+ x += stack.pop();
+ moveTo(x, y);
+ stackClean = true;
+ break;
+
+ case 23:
+ stems += stack.length >> 1;
+ stackClean = true;
+ break;
+
+ case 24:
+ while (stack.length > 2) {
+ xa = x + stack.shift();
+ ya = y + stack.shift();
+ xb = xa + stack.shift();
+ yb = ya + stack.shift();
+ x = xb + stack.shift();
+ y = yb + stack.shift();
+ bezierCurveTo(xa, ya, xb, yb, x, y);
+ }
+
+ x += stack.shift();
+ y += stack.shift();
+ lineTo(x, y);
+ break;
+
+ case 25:
+ while (stack.length > 6) {
+ x += stack.shift();
+ y += stack.shift();
+ lineTo(x, y);
+ }
+
+ xa = x + stack.shift();
+ ya = y + stack.shift();
+ xb = xa + stack.shift();
+ yb = ya + stack.shift();
+ x = xb + stack.shift();
+ y = yb + stack.shift();
+ bezierCurveTo(xa, ya, xb, yb, x, y);
+ break;
+
+ case 26:
+ if (stack.length % 2) {
+ x += stack.shift();
+ }
+
+ while (stack.length > 0) {
+ xa = x;
+ ya = y + stack.shift();
+ xb = xa + stack.shift();
+ yb = ya + stack.shift();
+ x = xb;
+ y = yb + stack.shift();
+ bezierCurveTo(xa, ya, xb, yb, x, y);
+ }
+
+ break;
+
+ case 27:
+ if (stack.length % 2) {
+ y += stack.shift();
+ }
+
+ while (stack.length > 0) {
+ xa = x + stack.shift();
+ ya = y;
+ xb = xa + stack.shift();
+ yb = ya + stack.shift();
+ x = xb + stack.shift();
+ y = yb;
+ bezierCurveTo(xa, ya, xb, yb, x, y);
+ }
+
+ break;
+
+ case 28:
+ stack.push((code[i] << 24 | code[i + 1] << 16) >> 16);
+ i += 2;
+ break;
+
+ case 29:
+ n = stack.pop() + font.gsubrsBias;
+ subrCode = font.gsubrs[n];
+
+ if (subrCode) {
+ parse(subrCode);
+ }
+
+ break;
+
+ case 30:
+ while (stack.length > 0) {
+ xa = x;
+ ya = y + stack.shift();
+ xb = xa + stack.shift();
+ yb = ya + stack.shift();
+ x = xb + stack.shift();
+ y = yb + (stack.length === 1 ? stack.shift() : 0);
+ bezierCurveTo(xa, ya, xb, yb, x, y);
+
+ if (stack.length === 0) {
+ break;
}
- if (v < 247) {
- stack.push(v - 139);
- } else if (v < 251) {
- stack.push((v - 247) * 256 + code[i++] + 108);
- } else if (v < 255) {
- stack.push(-(v - 251) * 256 - code[i++] - 108);
- } else {
- stack.push((code[i] << 24 | code[i + 1] << 16 | code[i + 2] << 8 | code[i + 3]) / 65536);
- i += 4;
+ xa = x + stack.shift();
+ ya = y;
+ xb = xa + stack.shift();
+ yb = ya + stack.shift();
+ y = yb + stack.shift();
+ x = xb + (stack.length === 1 ? stack.shift() : 0);
+ bezierCurveTo(xa, ya, xb, yb, x, y);
+ }
+
+ break;
+
+ case 31:
+ while (stack.length > 0) {
+ xa = x + stack.shift();
+ ya = y;
+ xb = xa + stack.shift();
+ yb = ya + stack.shift();
+ y = yb + stack.shift();
+ x = xb + (stack.length === 1 ? stack.shift() : 0);
+ bezierCurveTo(xa, ya, xb, yb, x, y);
+
+ if (stack.length === 0) {
+ break;
}
- break;
+ xa = x;
+ ya = y + stack.shift();
+ xb = xa + stack.shift();
+ yb = ya + stack.shift();
+ x = xb + stack.shift();
+ y = yb + (stack.length === 1 ? stack.shift() : 0);
+ bezierCurveTo(xa, ya, xb, yb, x, y);
+ }
+
+ break;
+
+ default:
+ if (v < 32) {
+ throw new _util.FormatError(`unknown operator: ${v}`);
+ }
+
+ if (v < 247) {
+ stack.push(v - 139);
+ } else if (v < 251) {
+ stack.push((v - 247) * 256 + code[i++] + 108);
+ } else if (v < 255) {
+ stack.push(-(v - 251) * 256 - code[i++] - 108);
+ } else {
+ stack.push((code[i] << 24 | code[i + 1] << 16 | code[i + 2] << 8 | code[i + 3]) / 65536);
+ i += 4;
+ }
+
+ break;
+ }
+
+ if (stackClean) {
+ stack.length = 0;
+ }
+ }
+ }
+
+ parse(charStringCode);
+}
+
+const NOOP = [];
+
+class CompiledFont {
+ constructor(fontMatrix) {
+ if (this.constructor === CompiledFont) {
+ (0, _util.unreachable)("Cannot initialize CompiledFont.");
+ }
+
+ this.fontMatrix = fontMatrix;
+ this.compiledGlyphs = Object.create(null);
+ this.compiledCharCodeToGlyphId = Object.create(null);
+ }
+
+ getPathJs(unicode) {
+ const {
+ charCode,
+ glyphId
+ } = lookupCmap(this.cmap, unicode);
+ let fn = this.compiledGlyphs[glyphId];
+
+ if (!fn) {
+ try {
+ fn = this.compileGlyph(this.glyphs[glyphId], glyphId);
+ this.compiledGlyphs[glyphId] = fn;
+ } catch (ex) {
+ this.compiledGlyphs[glyphId] = NOOP;
+
+ if (this.compiledCharCodeToGlyphId[charCode] === undefined) {
+ this.compiledCharCodeToGlyphId[charCode] = glyphId;
}
- if (stackClean) {
- stack.length = 0;
+ throw ex;
+ }
+ }
+
+ if (this.compiledCharCodeToGlyphId[charCode] === undefined) {
+ this.compiledCharCodeToGlyphId[charCode] = glyphId;
+ }
+
+ return fn;
+ }
+
+ compileGlyph(code, glyphId) {
+ if (!code || code.length === 0 || code[0] === 14) {
+ return NOOP;
+ }
+
+ let fontMatrix = this.fontMatrix;
+
+ if (this.isCFFCIDFont) {
+ const fdIndex = this.fdSelect.getFDIndex(glyphId);
+
+ if (fdIndex >= 0 && fdIndex < this.fdArray.length) {
+ const fontDict = this.fdArray[fdIndex];
+ fontMatrix = fontDict.getByName("FontMatrix") || _util.FONT_IDENTITY_MATRIX;
+ } else {
+ (0, _util.warn)("Invalid fd index for glyph index.");
+ }
+ }
+
+ const cmds = [{
+ cmd: "save"
+ }, {
+ cmd: "transform",
+ args: fontMatrix.slice()
+ }, {
+ cmd: "scale",
+ args: ["size", "-size"]
+ }];
+ this.compileGlyphImpl(code, cmds, glyphId);
+ cmds.push({
+ cmd: "restore"
+ });
+ return cmds;
+ }
+
+ compileGlyphImpl() {
+ (0, _util.unreachable)("Children classes should implement this.");
+ }
+
+ hasBuiltPath(unicode) {
+ const {
+ charCode,
+ glyphId
+ } = lookupCmap(this.cmap, unicode);
+ return this.compiledGlyphs[glyphId] !== undefined && this.compiledCharCodeToGlyphId[charCode] !== undefined;
+ }
+
+}
+
+class TrueTypeCompiled extends CompiledFont {
+ constructor(glyphs, cmap, fontMatrix) {
+ super(fontMatrix || [0.000488, 0, 0, 0.000488, 0, 0]);
+ this.glyphs = glyphs;
+ this.cmap = cmap;
+ }
+
+ compileGlyphImpl(code, cmds) {
+ compileGlyf(code, cmds, this);
+ }
+
+}
+
+class Type2Compiled extends CompiledFont {
+ constructor(cffInfo, cmap, fontMatrix, glyphNameMap) {
+ super(fontMatrix || [0.001, 0, 0, 0.001, 0, 0]);
+ this.glyphs = cffInfo.glyphs;
+ this.gsubrs = cffInfo.gsubrs || [];
+ this.subrs = cffInfo.subrs || [];
+ this.cmap = cmap;
+ this.glyphNameMap = glyphNameMap || (0, _glyphlist.getGlyphsUnicode)();
+ this.gsubrsBias = getSubroutineBias(this.gsubrs);
+ this.subrsBias = getSubroutineBias(this.subrs);
+ this.isCFFCIDFont = cffInfo.isCFFCIDFont;
+ this.fdSelect = cffInfo.fdSelect;
+ this.fdArray = cffInfo.fdArray;
+ }
+
+ compileGlyphImpl(code, cmds, glyphId) {
+ compileCharString(code, cmds, this, glyphId);
+ }
+
+}
+
+class FontRendererFactory {
+ static create(font, seacAnalysisEnabled) {
+ const data = new Uint8Array(font.data);
+ let cmap, glyf, loca, cff, indexToLocFormat, unitsPerEm;
+ const numTables = getUshort(data, 4);
+
+ for (let i = 0, p = 12; i < numTables; i++, p += 16) {
+ const tag = (0, _util.bytesToString)(data.subarray(p, p + 4));
+ const offset = getLong(data, p + 8);
+ const length = getLong(data, p + 12);
+
+ switch (tag) {
+ case "cmap":
+ cmap = parseCmap(data, offset, offset + length);
+ break;
+
+ case "glyf":
+ glyf = data.subarray(offset, offset + length);
+ break;
+
+ case "loca":
+ loca = data.subarray(offset, offset + length);
+ break;
+
+ case "head":
+ unitsPerEm = getUshort(data, offset + 18);
+ indexToLocFormat = getUshort(data, offset + 50);
+ break;
+
+ case "CFF ":
+ cff = parseCff(data, offset, offset + length, seacAnalysisEnabled);
+ break;
+ }
+ }
+
+ if (glyf) {
+ const fontMatrix = !unitsPerEm ? font.fontMatrix : [1 / unitsPerEm, 0, 0, 1 / unitsPerEm, 0, 0];
+ return new TrueTypeCompiled(parseGlyfTable(glyf, loca, indexToLocFormat), cmap, fontMatrix);
+ }
+
+ return new Type2Compiled(cff, cmap, font.fontMatrix, font.glyphNameMap);
+ }
+
+}
+
+exports.FontRendererFactory = FontRendererFactory;
+
+/***/ }),
+/* 45 */
+/***/ ((__unused_webpack_module, exports) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.GlyfTable = void 0;
+const ON_CURVE_POINT = 1 << 0;
+const X_SHORT_VECTOR = 1 << 1;
+const Y_SHORT_VECTOR = 1 << 2;
+const REPEAT_FLAG = 1 << 3;
+const X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR = 1 << 4;
+const Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR = 1 << 5;
+const OVERLAP_SIMPLE = 1 << 6;
+const ARG_1_AND_2_ARE_WORDS = 1 << 0;
+const ARGS_ARE_XY_VALUES = 1 << 1;
+const WE_HAVE_A_SCALE = 1 << 3;
+const MORE_COMPONENTS = 1 << 5;
+const WE_HAVE_AN_X_AND_Y_SCALE = 1 << 6;
+const WE_HAVE_A_TWO_BY_TWO = 1 << 7;
+const WE_HAVE_INSTRUCTIONS = 1 << 8;
+
+class GlyfTable {
+ constructor({
+ glyfTable,
+ isGlyphLocationsLong,
+ locaTable,
+ numGlyphs
+ }) {
+ this.glyphs = [];
+ const loca = new DataView(locaTable.buffer, locaTable.byteOffset, locaTable.byteLength);
+ const glyf = new DataView(glyfTable.buffer, glyfTable.byteOffset, glyfTable.byteLength);
+ const offsetSize = isGlyphLocationsLong ? 4 : 2;
+ let prev = isGlyphLocationsLong ? loca.getUint32(0) : 2 * loca.getUint16(0);
+ let pos = 0;
+
+ for (let i = 0; i < numGlyphs; i++) {
+ pos += offsetSize;
+ const next = isGlyphLocationsLong ? loca.getUint32(pos) : 2 * loca.getUint16(pos);
+
+ if (next === prev) {
+ this.glyphs.push(new Glyph({}));
+ continue;
+ }
+
+ const glyph = Glyph.parse(prev, glyf);
+ this.glyphs.push(glyph);
+ prev = next;
+ }
+ }
+
+ getSize() {
+ return this.glyphs.reduce((a, g) => {
+ const size = g.getSize();
+ return a + (size + 3 & ~3);
+ }, 0);
+ }
+
+ write() {
+ const totalSize = this.getSize();
+ const glyfTable = new DataView(new ArrayBuffer(totalSize));
+ const isLocationLong = totalSize > 0x1fffe;
+ const offsetSize = isLocationLong ? 4 : 2;
+ const locaTable = new DataView(new ArrayBuffer((this.glyphs.length + 1) * offsetSize));
+
+ if (isLocationLong) {
+ locaTable.setUint32(0, 0);
+ } else {
+ locaTable.setUint16(0, 0);
+ }
+
+ let pos = 0;
+ let locaIndex = 0;
+
+ for (const glyph of this.glyphs) {
+ pos += glyph.write(pos, glyfTable);
+ pos = pos + 3 & ~3;
+ locaIndex += offsetSize;
+
+ if (isLocationLong) {
+ locaTable.setUint32(locaIndex, pos);
+ } else {
+ locaTable.setUint16(locaIndex, pos >> 1);
+ }
+ }
+
+ return {
+ isLocationLong,
+ loca: new Uint8Array(locaTable.buffer),
+ glyf: new Uint8Array(glyfTable.buffer)
+ };
+ }
+
+ scale(factors) {
+ for (let i = 0, ii = this.glyphs.length; i < ii; i++) {
+ this.glyphs[i].scale(factors[i]);
+ }
+ }
+
+}
+
+exports.GlyfTable = GlyfTable;
+
+class Glyph {
+ constructor({
+ header = null,
+ simple = null,
+ composites = null
+ }) {
+ this.header = header;
+ this.simple = simple;
+ this.composites = composites;
+ }
+
+ static parse(pos, glyf) {
+ const [read, header] = GlyphHeader.parse(pos, glyf);
+ pos += read;
+
+ if (header.numberOfContours < 0) {
+ const composites = [];
+
+ while (true) {
+ const [n, composite] = CompositeGlyph.parse(pos, glyf);
+ pos += n;
+ composites.push(composite);
+
+ if (!(composite.flags & MORE_COMPONENTS)) {
+ break;
}
}
+
+ return new Glyph({
+ header,
+ composites
+ });
}
- parse(charStringCode);
+ const simple = SimpleGlyph.parse(pos, glyf, header.numberOfContours);
+ return new Glyph({
+ header,
+ simple
+ });
+ }
+
+ getSize() {
+ if (!this.header) {
+ return 0;
+ }
+
+ const size = this.simple ? this.simple.getSize() : this.composites.reduce((a, c) => a + c.getSize(), 0);
+ return this.header.getSize() + size;
}
- const NOOP = [];
+ write(pos, buf) {
+ if (!this.header) {
+ return 0;
+ }
+
+ const spos = pos;
+ pos += this.header.write(pos, buf);
- class CompiledFont {
- constructor(fontMatrix) {
- if (this.constructor === CompiledFont) {
- (0, _util.unreachable)("Cannot initialize CompiledFont.");
+ if (this.simple) {
+ pos += this.simple.write(pos, buf);
+ } else {
+ for (const composite of this.composites) {
+ pos += composite.write(pos, buf);
}
+ }
+
+ return pos - spos;
+ }
- this.fontMatrix = fontMatrix;
- this.compiledGlyphs = Object.create(null);
- this.compiledCharCodeToGlyphId = Object.create(null);
+ scale(factor) {
+ if (!this.header) {
+ return;
}
- getPathJs(unicode) {
- const cmap = lookupCmap(this.cmap, unicode);
- let fn = this.compiledGlyphs[cmap.glyphId];
+ const xMiddle = (this.header.xMin + this.header.xMax) / 2;
+ this.header.scale(xMiddle, factor);
- if (!fn) {
- fn = this.compileGlyph(this.glyphs[cmap.glyphId], cmap.glyphId);
- this.compiledGlyphs[cmap.glyphId] = fn;
+ if (this.simple) {
+ this.simple.scale(xMiddle, factor);
+ } else {
+ for (const composite of this.composites) {
+ composite.scale(xMiddle, factor);
}
+ }
+ }
+
+}
+
+class GlyphHeader {
+ constructor({
+ numberOfContours,
+ xMin,
+ yMin,
+ xMax,
+ yMax
+ }) {
+ this.numberOfContours = numberOfContours;
+ this.xMin = xMin;
+ this.yMin = yMin;
+ this.xMax = xMax;
+ this.yMax = yMax;
+ }
+
+ static parse(pos, glyf) {
+ return [10, new GlyphHeader({
+ numberOfContours: glyf.getInt16(pos),
+ xMin: glyf.getInt16(pos + 2),
+ yMin: glyf.getInt16(pos + 4),
+ xMax: glyf.getInt16(pos + 6),
+ yMax: glyf.getInt16(pos + 8)
+ })];
+ }
- if (this.compiledCharCodeToGlyphId[cmap.charCode] === undefined) {
- this.compiledCharCodeToGlyphId[cmap.charCode] = cmap.glyphId;
+ getSize() {
+ return 10;
+ }
+
+ write(pos, buf) {
+ buf.setInt16(pos, this.numberOfContours);
+ buf.setInt16(pos + 2, this.xMin);
+ buf.setInt16(pos + 4, this.yMin);
+ buf.setInt16(pos + 6, this.xMax);
+ buf.setInt16(pos + 8, this.yMax);
+ return 10;
+ }
+
+ scale(x, factor) {
+ this.xMin = Math.round(x + (this.xMin - x) * factor);
+ this.xMax = Math.round(x + (this.xMax - x) * factor);
+ }
+
+}
+
+class Contour {
+ constructor({
+ flags,
+ xCoordinates,
+ yCoordinates
+ }) {
+ this.xCoordinates = xCoordinates;
+ this.yCoordinates = yCoordinates;
+ this.flags = flags;
+ }
+
+}
+
+class SimpleGlyph {
+ constructor({
+ contours,
+ instructions
+ }) {
+ this.contours = contours;
+ this.instructions = instructions;
+ }
+
+ static parse(pos, glyf, numberOfContours) {
+ const endPtsOfContours = [];
+
+ for (let i = 0; i < numberOfContours; i++) {
+ const endPt = glyf.getUint16(pos);
+ pos += 2;
+ endPtsOfContours.push(endPt);
+ }
+
+ const numberOfPt = endPtsOfContours[numberOfContours - 1] + 1;
+ const instructionLength = glyf.getUint16(pos);
+ pos += 2;
+ const instructions = new Uint8Array(glyf).slice(pos, pos + instructionLength);
+ pos += instructionLength;
+ const flags = [];
+
+ for (let i = 0; i < numberOfPt; pos++, i++) {
+ let flag = glyf.getUint8(pos);
+ flags.push(flag);
+
+ if (flag & REPEAT_FLAG) {
+ const count = glyf.getUint8(++pos);
+ flag ^= REPEAT_FLAG;
+
+ for (let m = 0; m < count; m++) {
+ flags.push(flag);
+ }
+
+ i += count;
+ }
+ }
+
+ const allXCoordinates = [];
+ let xCoordinates = [];
+ let yCoordinates = [];
+ let pointFlags = [];
+ const contours = [];
+ let endPtsOfContoursIndex = 0;
+ let lastCoordinate = 0;
+
+ for (let i = 0; i < numberOfPt; i++) {
+ const flag = flags[i];
+
+ if (flag & X_SHORT_VECTOR) {
+ const x = glyf.getUint8(pos++);
+ lastCoordinate += flag & X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR ? x : -x;
+ xCoordinates.push(lastCoordinate);
+ } else if (flag & X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR) {
+ xCoordinates.push(lastCoordinate);
+ } else {
+ lastCoordinate += glyf.getInt16(pos);
+ pos += 2;
+ xCoordinates.push(lastCoordinate);
}
- return fn;
+ if (endPtsOfContours[endPtsOfContoursIndex] === i) {
+ endPtsOfContoursIndex++;
+ allXCoordinates.push(xCoordinates);
+ xCoordinates = [];
+ }
}
- compileGlyph(code, glyphId) {
- if (!code || code.length === 0 || code[0] === 14) {
- return NOOP;
+ lastCoordinate = 0;
+ endPtsOfContoursIndex = 0;
+
+ for (let i = 0; i < numberOfPt; i++) {
+ const flag = flags[i];
+
+ if (flag & Y_SHORT_VECTOR) {
+ const y = glyf.getUint8(pos++);
+ lastCoordinate += flag & Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR ? y : -y;
+ yCoordinates.push(lastCoordinate);
+ } else if (flag & Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR) {
+ yCoordinates.push(lastCoordinate);
+ } else {
+ lastCoordinate += glyf.getInt16(pos);
+ pos += 2;
+ yCoordinates.push(lastCoordinate);
+ }
+
+ pointFlags.push(flag & ON_CURVE_POINT | flag & OVERLAP_SIMPLE);
+
+ if (endPtsOfContours[endPtsOfContoursIndex] === i) {
+ xCoordinates = allXCoordinates[endPtsOfContoursIndex];
+ endPtsOfContoursIndex++;
+ contours.push(new Contour({
+ flags: pointFlags,
+ xCoordinates,
+ yCoordinates
+ }));
+ yCoordinates = [];
+ pointFlags = [];
}
+ }
+
+ return new SimpleGlyph({
+ contours,
+ instructions
+ });
+ }
+
+ getSize() {
+ let size = this.contours.length * 2 + 2 + this.instructions.length;
+ let lastX = 0;
+ let lastY = 0;
+
+ for (const contour of this.contours) {
+ size += contour.flags.length;
+
+ for (let i = 0, ii = contour.xCoordinates.length; i < ii; i++) {
+ const x = contour.xCoordinates[i];
+ const y = contour.yCoordinates[i];
+ let abs = Math.abs(x - lastX);
+
+ if (abs > 255) {
+ size += 2;
+ } else if (abs > 0) {
+ size += 1;
+ }
- let fontMatrix = this.fontMatrix;
+ lastX = x;
+ abs = Math.abs(y - lastY);
+
+ if (abs > 255) {
+ size += 2;
+ } else if (abs > 0) {
+ size += 1;
+ }
+
+ lastY = y;
+ }
+ }
+
+ return size;
+ }
+
+ write(pos, buf) {
+ const spos = pos;
+ const xCoordinates = [];
+ const yCoordinates = [];
+ const flags = [];
+ let lastX = 0;
+ let lastY = 0;
+
+ for (const contour of this.contours) {
+ for (let i = 0, ii = contour.xCoordinates.length; i < ii; i++) {
+ let flag = contour.flags[i];
+ const x = contour.xCoordinates[i];
+ let delta = x - lastX;
+
+ if (delta === 0) {
+ flag |= X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR;
+ xCoordinates.push(0);
+ } else {
+ const abs = Math.abs(delta);
+
+ if (abs <= 255) {
+ flag |= delta >= 0 ? X_SHORT_VECTOR | X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR : X_SHORT_VECTOR;
+ xCoordinates.push(abs);
+ } else {
+ xCoordinates.push(delta);
+ }
+ }
- if (this.isCFFCIDFont) {
- const fdIndex = this.fdSelect.getFDIndex(glyphId);
+ lastX = x;
+ const y = contour.yCoordinates[i];
+ delta = y - lastY;
- if (fdIndex >= 0 && fdIndex < this.fdArray.length) {
- const fontDict = this.fdArray[fdIndex];
- fontMatrix = fontDict.getByName("FontMatrix") || _util.FONT_IDENTITY_MATRIX;
+ if (delta === 0) {
+ flag |= Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR;
+ yCoordinates.push(0);
} else {
- (0, _util.warn)("Invalid fd index for glyph index.");
+ const abs = Math.abs(delta);
+
+ if (abs <= 255) {
+ flag |= delta >= 0 ? Y_SHORT_VECTOR | Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR : Y_SHORT_VECTOR;
+ yCoordinates.push(abs);
+ } else {
+ yCoordinates.push(delta);
+ }
}
+
+ lastY = y;
+ flags.push(flag);
}
- const cmds = [];
- cmds.push({
- cmd: "save"
- });
- cmds.push({
- cmd: "transform",
- args: fontMatrix.slice()
- });
- cmds.push({
- cmd: "scale",
- args: ["size", "-size"]
- });
- this.compileGlyphImpl(code, cmds, glyphId);
- cmds.push({
- cmd: "restore"
- });
- return cmds;
+ buf.setUint16(pos, xCoordinates.length - 1);
+ pos += 2;
+ }
+
+ buf.setUint16(pos, this.instructions.length);
+ pos += 2;
+
+ if (this.instructions.length) {
+ new Uint8Array(buf.buffer, 0, buf.buffer.byteLength).set(this.instructions, pos);
+ pos += this.instructions.length;
+ }
+
+ for (const flag of flags) {
+ buf.setUint8(pos++, flag);
+ }
+
+ for (let i = 0, ii = xCoordinates.length; i < ii; i++) {
+ const x = xCoordinates[i];
+ const flag = flags[i];
+
+ if (flag & X_SHORT_VECTOR) {
+ buf.setUint8(pos++, x);
+ } else if (!(flag & X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR)) {
+ buf.setInt16(pos, x);
+ pos += 2;
+ }
+ }
+
+ for (let i = 0, ii = yCoordinates.length; i < ii; i++) {
+ const y = yCoordinates[i];
+ const flag = flags[i];
+
+ if (flag & Y_SHORT_VECTOR) {
+ buf.setUint8(pos++, y);
+ } else if (!(flag & Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR)) {
+ buf.setInt16(pos, y);
+ pos += 2;
+ }
+ }
+
+ return pos - spos;
+ }
+
+ scale(x, factor) {
+ for (const contour of this.contours) {
+ if (contour.xCoordinates.length === 0) {
+ continue;
+ }
+
+ for (let i = 0, ii = contour.xCoordinates.length; i < ii; i++) {
+ contour.xCoordinates[i] = Math.round(x + (contour.xCoordinates[i] - x) * factor);
+ }
+ }
+ }
+
+}
+
+class CompositeGlyph {
+ constructor({
+ flags,
+ glyphIndex,
+ argument1,
+ argument2,
+ transf,
+ instructions
+ }) {
+ this.flags = flags;
+ this.glyphIndex = glyphIndex;
+ this.argument1 = argument1;
+ this.argument2 = argument2;
+ this.transf = transf;
+ this.instructions = instructions;
+ }
+
+ static parse(pos, glyf) {
+ const spos = pos;
+ const transf = [];
+ let flags = glyf.getUint16(pos);
+ const glyphIndex = glyf.getUint16(pos + 2);
+ pos += 4;
+ let argument1, argument2;
+
+ if (flags & ARG_1_AND_2_ARE_WORDS) {
+ if (flags & ARGS_ARE_XY_VALUES) {
+ argument1 = glyf.getInt16(pos);
+ argument2 = glyf.getInt16(pos + 2);
+ } else {
+ argument1 = glyf.getUint16(pos);
+ argument2 = glyf.getUint16(pos + 2);
+ }
+
+ pos += 4;
+ flags ^= ARG_1_AND_2_ARE_WORDS;
+ } else {
+ argument1 = glyf.getUint8(pos);
+ argument2 = glyf.getUint8(pos + 1);
+
+ if (flags & ARGS_ARE_XY_VALUES) {
+ const abs1 = argument1 & 0x7f;
+ argument1 = argument1 & 0x80 ? -abs1 : abs1;
+ const abs2 = argument2 & 0x7f;
+ argument2 = argument2 & 0x80 ? -abs2 : abs2;
+ }
+
+ pos += 2;
+ }
+
+ if (flags & WE_HAVE_A_SCALE) {
+ transf.push(glyf.getUint16(pos));
+ pos += 2;
+ } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {
+ transf.push(glyf.getUint16(pos), glyf.getUint16(pos + 2));
+ pos += 4;
+ } else if (flags & WE_HAVE_A_TWO_BY_TWO) {
+ transf.push(glyf.getUint16(pos), glyf.getUint16(pos + 2), glyf.getUint16(pos + 4), glyf.getUint16(pos + 6));
+ pos += 8;
+ }
+
+ let instructions = null;
+
+ if (flags & WE_HAVE_INSTRUCTIONS) {
+ const instructionLength = glyf.getUint16(pos);
+ pos += 2;
+ instructions = new Uint8Array(glyf).slice(pos, pos + instructionLength);
+ pos += instructionLength;
+ }
+
+ return [pos - spos, new CompositeGlyph({
+ flags,
+ glyphIndex,
+ argument1,
+ argument2,
+ transf,
+ instructions
+ })];
+ }
+
+ getSize() {
+ let size = 2 + 2 + this.transf.length * 2;
+
+ if (this.flags & WE_HAVE_INSTRUCTIONS) {
+ size += 2 + this.instructions.length;
+ }
+
+ size += 2;
+
+ if (this.flags & 2) {
+ if (!(this.argument1 >= -128 && this.argument1 <= 127 && this.argument2 >= -128 && this.argument2 <= 127)) {
+ size += 2;
+ }
+ } else {
+ if (!(this.argument1 >= 0 && this.argument1 <= 255 && this.argument2 >= 0 && this.argument2 <= 255)) {
+ size += 2;
+ }
+ }
+
+ return size;
+ }
+
+ write(pos, buf) {
+ const spos = pos;
+
+ if (this.flags & ARGS_ARE_XY_VALUES) {
+ if (!(this.argument1 >= -128 && this.argument1 <= 127 && this.argument2 >= -128 && this.argument2 <= 127)) {
+ this.flags |= ARG_1_AND_2_ARE_WORDS;
+ }
+ } else {
+ if (!(this.argument1 >= 0 && this.argument1 <= 255 && this.argument2 >= 0 && this.argument2 <= 255)) {
+ this.flags |= ARG_1_AND_2_ARE_WORDS;
+ }
+ }
+
+ buf.setUint16(pos, this.flags);
+ buf.setUint16(pos + 2, this.glyphIndex);
+ pos += 4;
+
+ if (this.flags & ARG_1_AND_2_ARE_WORDS) {
+ if (this.flags & ARGS_ARE_XY_VALUES) {
+ buf.setInt16(pos, this.argument1);
+ buf.setInt16(pos + 2, this.argument2);
+ } else {
+ buf.setUint16(pos, this.argument1);
+ buf.setUint16(pos + 2, this.argument2);
+ }
+
+ pos += 4;
+ } else {
+ buf.setUint8(pos, this.argument1);
+ buf.setUint8(pos + 1, this.argument2);
+ pos += 2;
+ }
+
+ if (this.flags & WE_HAVE_INSTRUCTIONS) {
+ buf.setUint16(pos, this.instructions.length);
+ pos += 2;
+
+ if (this.instructions.length) {
+ new Uint8Array(buf.buffer, 0, buf.buffer.byteLength).set(this.instructions, pos);
+ pos += this.instructions.length;
+ }
+ }
+
+ return pos - spos;
+ }
+
+ scale(x, factor) {}
+
+}
+
+/***/ }),
+/* 46 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.OpenTypeFileBuilder = void 0;
+
+var _core_utils = __w_pdfjs_require__(9);
+
+var _util = __w_pdfjs_require__(2);
+
+function writeInt16(dest, offset, num) {
+ dest[offset] = num >> 8 & 0xff;
+ dest[offset + 1] = num & 0xff;
+}
+
+function writeInt32(dest, offset, num) {
+ dest[offset] = num >> 24 & 0xff;
+ dest[offset + 1] = num >> 16 & 0xff;
+ dest[offset + 2] = num >> 8 & 0xff;
+ dest[offset + 3] = num & 0xff;
+}
+
+function writeData(dest, offset, data) {
+ if (data instanceof Uint8Array) {
+ dest.set(data, offset);
+ } else if (typeof data === "string") {
+ for (let i = 0, ii = data.length; i < ii; i++) {
+ dest[offset++] = data.charCodeAt(i) & 0xff;
+ }
+ } else {
+ for (let i = 0, ii = data.length; i < ii; i++) {
+ dest[offset++] = data[i] & 0xff;
+ }
+ }
+}
+
+const OTF_HEADER_SIZE = 12;
+const OTF_TABLE_ENTRY_SIZE = 16;
+
+class OpenTypeFileBuilder {
+ constructor(sfnt) {
+ this.sfnt = sfnt;
+ this.tables = Object.create(null);
+ }
+
+ static getSearchParams(entriesCount, entrySize) {
+ let maxPower2 = 1,
+ log2 = 0;
+
+ while ((maxPower2 ^ entriesCount) > maxPower2) {
+ maxPower2 <<= 1;
+ log2++;
+ }
+
+ const searchRange = maxPower2 * entrySize;
+ return {
+ range: searchRange,
+ entry: log2,
+ rangeShift: entrySize * entriesCount - searchRange
+ };
+ }
+
+ toArray() {
+ let sfnt = this.sfnt;
+ const tables = this.tables;
+ const tablesNames = Object.keys(tables);
+ tablesNames.sort();
+ const numTables = tablesNames.length;
+ let i, j, jj, table, tableName;
+ let offset = OTF_HEADER_SIZE + numTables * OTF_TABLE_ENTRY_SIZE;
+ const tableOffsets = [offset];
+
+ for (i = 0; i < numTables; i++) {
+ table = tables[tablesNames[i]];
+ const paddedLength = (table.length + 3 & ~3) >>> 0;
+ offset += paddedLength;
+ tableOffsets.push(offset);
+ }
+
+ const file = new Uint8Array(offset);
+
+ for (i = 0; i < numTables; i++) {
+ table = tables[tablesNames[i]];
+ writeData(file, tableOffsets[i], table);
+ }
+
+ if (sfnt === "true") {
+ sfnt = (0, _util.string32)(0x00010000);
}
- compileGlyphImpl() {
- (0, _util.unreachable)("Children classes should implement this.");
+ file[0] = sfnt.charCodeAt(0) & 0xff;
+ file[1] = sfnt.charCodeAt(1) & 0xff;
+ file[2] = sfnt.charCodeAt(2) & 0xff;
+ file[3] = sfnt.charCodeAt(3) & 0xff;
+ writeInt16(file, 4, numTables);
+ const searchParams = OpenTypeFileBuilder.getSearchParams(numTables, 16);
+ writeInt16(file, 6, searchParams.range);
+ writeInt16(file, 8, searchParams.entry);
+ writeInt16(file, 10, searchParams.rangeShift);
+ offset = OTF_HEADER_SIZE;
+
+ for (i = 0; i < numTables; i++) {
+ tableName = tablesNames[i];
+ file[offset] = tableName.charCodeAt(0) & 0xff;
+ file[offset + 1] = tableName.charCodeAt(1) & 0xff;
+ file[offset + 2] = tableName.charCodeAt(2) & 0xff;
+ file[offset + 3] = tableName.charCodeAt(3) & 0xff;
+ let checksum = 0;
+
+ for (j = tableOffsets[i], jj = tableOffsets[i + 1]; j < jj; j += 4) {
+ const quad = (0, _core_utils.readUint32)(file, j);
+ checksum = checksum + quad >>> 0;
+ }
+
+ writeInt32(file, offset + 4, checksum);
+ writeInt32(file, offset + 8, tableOffsets[i]);
+ writeInt32(file, offset + 12, tables[tableName].length);
+ offset += OTF_TABLE_ENTRY_SIZE;
}
- hasBuiltPath(unicode) {
- const cmap = lookupCmap(this.cmap, unicode);
- return this.compiledGlyphs[cmap.glyphId] !== undefined && this.compiledCharCodeToGlyphId[cmap.charCode] !== undefined;
+ return file;
+ }
+
+ addTable(tag, data) {
+ if (tag in this.tables) {
+ throw new Error("Table " + tag + " already exists");
}
+ this.tables[tag] = data;
}
- class TrueTypeCompiled extends CompiledFont {
- constructor(glyphs, cmap, fontMatrix) {
- super(fontMatrix || [0.000488, 0, 0, 0.000488, 0, 0]);
- this.glyphs = glyphs;
- this.cmap = cmap;
+}
+
+exports.OpenTypeFileBuilder = OpenTypeFileBuilder;
+
+/***/ }),
+/* 47 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.Type1Font = void 0;
+
+var _cff_parser = __w_pdfjs_require__(35);
+
+var _fonts_utils = __w_pdfjs_require__(38);
+
+var _core_utils = __w_pdfjs_require__(9);
+
+var _stream = __w_pdfjs_require__(10);
+
+var _type1_parser = __w_pdfjs_require__(48);
+
+var _util = __w_pdfjs_require__(2);
+
+function findBlock(streamBytes, signature, startIndex) {
+ const streamBytesLength = streamBytes.length;
+ const signatureLength = signature.length;
+ const scanLength = streamBytesLength - signatureLength;
+ let i = startIndex,
+ found = false;
+
+ while (i < scanLength) {
+ let j = 0;
+
+ while (j < signatureLength && streamBytes[i + j] === signature[j]) {
+ j++;
}
- compileGlyphImpl(code, cmds) {
- compileGlyf(code, cmds, this);
+ if (j >= signatureLength) {
+ i += j;
+
+ while (i < streamBytesLength && (0, _core_utils.isWhiteSpace)(streamBytes[i])) {
+ i++;
+ }
+
+ found = true;
+ break;
}
+ i++;
+ }
+
+ return {
+ found,
+ length: i
+ };
+}
+
+function getHeaderBlock(stream, suggestedLength) {
+ const EEXEC_SIGNATURE = [0x65, 0x65, 0x78, 0x65, 0x63];
+ const streamStartPos = stream.pos;
+ let headerBytes, headerBytesLength, block;
+
+ try {
+ headerBytes = stream.getBytes(suggestedLength);
+ headerBytesLength = headerBytes.length;
+ } catch (ex) {}
+
+ if (headerBytesLength === suggestedLength) {
+ block = findBlock(headerBytes, EEXEC_SIGNATURE, suggestedLength - 2 * EEXEC_SIGNATURE.length);
+
+ if (block.found && block.length === suggestedLength) {
+ return {
+ stream: new _stream.Stream(headerBytes),
+ length: suggestedLength
+ };
+ }
}
- class Type2Compiled extends CompiledFont {
- constructor(cffInfo, cmap, fontMatrix, glyphNameMap) {
- super(fontMatrix || [0.001, 0, 0, 0.001, 0, 0]);
- this.glyphs = cffInfo.glyphs;
- this.gsubrs = cffInfo.gsubrs || [];
- this.subrs = cffInfo.subrs || [];
- this.cmap = cmap;
- this.glyphNameMap = glyphNameMap || (0, _glyphlist.getGlyphsUnicode)();
- this.gsubrsBias = getSubroutineBias(this.gsubrs);
- this.subrsBias = getSubroutineBias(this.subrs);
- this.isCFFCIDFont = cffInfo.isCFFCIDFont;
- this.fdSelect = cffInfo.fdSelect;
- this.fdArray = cffInfo.fdArray;
+ (0, _util.warn)('Invalid "Length1" property in Type1 font -- trying to recover.');
+ stream.pos = streamStartPos;
+ const SCAN_BLOCK_LENGTH = 2048;
+ let actualLength;
+
+ while (true) {
+ const scanBytes = stream.peekBytes(SCAN_BLOCK_LENGTH);
+ block = findBlock(scanBytes, EEXEC_SIGNATURE, 0);
+
+ if (block.length === 0) {
+ break;
}
- compileGlyphImpl(code, cmds, glyphId) {
- compileCharString(code, cmds, this, glyphId);
+ stream.pos += block.length;
+
+ if (block.found) {
+ actualLength = stream.pos - streamStartPos;
+ break;
}
+ }
+ stream.pos = streamStartPos;
+
+ if (actualLength) {
+ return {
+ stream: new _stream.Stream(stream.getBytes(actualLength)),
+ length: actualLength
+ };
}
+ (0, _util.warn)('Unable to recover "Length1" property in Type1 font -- using as is.');
return {
- create: function FontRendererFactory_create(font, seacAnalysisEnabled) {
- var data = new Uint8Array(font.data);
- var cmap, glyf, loca, cff, indexToLocFormat, unitsPerEm;
- var numTables = getUshort(data, 4);
-
- for (var i = 0, p = 12; i < numTables; i++, p += 16) {
- var tag = (0, _util.bytesToString)(data.subarray(p, p + 4));
- var offset = getLong(data, p + 8);
- var length = getLong(data, p + 12);
-
- switch (tag) {
- case "cmap":
- cmap = parseCmap(data, offset, offset + length);
- break;
+ stream: new _stream.Stream(stream.getBytes(suggestedLength)),
+ length: suggestedLength
+ };
+}
- case "glyf":
- glyf = data.subarray(offset, offset + length);
- break;
+function getEexecBlock(stream, suggestedLength) {
+ const eexecBytes = stream.getBytes();
+ return {
+ stream: new _stream.Stream(eexecBytes),
+ length: eexecBytes.length
+ };
+}
- case "loca":
- loca = data.subarray(offset, offset + length);
- break;
+class Type1Font {
+ constructor(name, file, properties) {
+ const PFB_HEADER_SIZE = 6;
+ let headerBlockLength = properties.length1;
+ let eexecBlockLength = properties.length2;
+ let pfbHeader = file.peekBytes(PFB_HEADER_SIZE);
+ const pfbHeaderPresent = pfbHeader[0] === 0x80 && pfbHeader[1] === 0x01;
- case "head":
- unitsPerEm = getUshort(data, offset + 18);
- indexToLocFormat = getUshort(data, offset + 50);
- break;
+ if (pfbHeaderPresent) {
+ file.skip(PFB_HEADER_SIZE);
+ headerBlockLength = pfbHeader[5] << 24 | pfbHeader[4] << 16 | pfbHeader[3] << 8 | pfbHeader[2];
+ }
- case "CFF ":
- cff = parseCff(data, offset, offset + length, seacAnalysisEnabled);
- break;
+ const headerBlock = getHeaderBlock(file, headerBlockLength);
+ const headerBlockParser = new _type1_parser.Type1Parser(headerBlock.stream, false, _fonts_utils.SEAC_ANALYSIS_ENABLED);
+ headerBlockParser.extractFontHeader(properties);
+
+ if (pfbHeaderPresent) {
+ pfbHeader = file.getBytes(PFB_HEADER_SIZE);
+ eexecBlockLength = pfbHeader[5] << 24 | pfbHeader[4] << 16 | pfbHeader[3] << 8 | pfbHeader[2];
+ }
+
+ const eexecBlock = getEexecBlock(file, eexecBlockLength);
+ const eexecBlockParser = new _type1_parser.Type1Parser(eexecBlock.stream, true, _fonts_utils.SEAC_ANALYSIS_ENABLED);
+ const data = eexecBlockParser.extractFontProgram(properties);
+
+ for (const key in data.properties) {
+ properties[key] = data.properties[key];
+ }
+
+ const charstrings = data.charstrings;
+ const type2Charstrings = this.getType2Charstrings(charstrings);
+ const subrs = this.getType2Subrs(data.subrs);
+ this.charstrings = charstrings;
+ this.data = this.wrap(name, type2Charstrings, this.charstrings, subrs, properties);
+ this.seacs = this.getSeacs(data.charstrings);
+ }
+
+ get numGlyphs() {
+ return this.charstrings.length + 1;
+ }
+
+ getCharset() {
+ const charset = [".notdef"];
+ const charstrings = this.charstrings;
+
+ for (let glyphId = 0; glyphId < charstrings.length; glyphId++) {
+ charset.push(charstrings[glyphId].glyphName);
+ }
+
+ return charset;
+ }
+
+ getGlyphMapping(properties) {
+ const charstrings = this.charstrings;
+
+ if (properties.composite) {
+ const charCodeToGlyphId = Object.create(null);
+
+ for (let glyphId = 0, charstringsLen = charstrings.length; glyphId < charstringsLen; glyphId++) {
+ const charCode = properties.cMap.charCodeOf(glyphId);
+ charCodeToGlyphId[charCode] = glyphId + 1;
+ }
+
+ return charCodeToGlyphId;
+ }
+
+ const glyphNames = [".notdef"];
+ let builtInEncoding, glyphId;
+
+ for (glyphId = 0; glyphId < charstrings.length; glyphId++) {
+ glyphNames.push(charstrings[glyphId].glyphName);
+ }
+
+ const encoding = properties.builtInEncoding;
+
+ if (encoding) {
+ builtInEncoding = Object.create(null);
+
+ for (const charCode in encoding) {
+ glyphId = glyphNames.indexOf(encoding[charCode]);
+
+ if (glyphId >= 0) {
+ builtInEncoding[charCode] = glyphId;
}
}
+ }
+
+ return (0, _fonts_utils.type1FontGlyphMapping)(properties, builtInEncoding, glyphNames);
+ }
+
+ hasGlyphId(id) {
+ if (id < 0 || id >= this.numGlyphs) {
+ return false;
+ }
+
+ if (id === 0) {
+ return true;
+ }
+
+ const glyph = this.charstrings[id - 1];
+ return glyph.charstring.length > 0;
+ }
+
+ getSeacs(charstrings) {
+ const seacMap = [];
+
+ for (let i = 0, ii = charstrings.length; i < ii; i++) {
+ const charstring = charstrings[i];
+
+ if (charstring.seac) {
+ seacMap[i + 1] = charstring.seac;
+ }
+ }
+
+ return seacMap;
+ }
+
+ getType2Charstrings(type1Charstrings) {
+ const type2Charstrings = [];
+
+ for (let i = 0, ii = type1Charstrings.length; i < ii; i++) {
+ type2Charstrings.push(type1Charstrings[i].charstring);
+ }
+
+ return type2Charstrings;
+ }
+
+ getType2Subrs(type1Subrs) {
+ let bias = 0;
+ const count = type1Subrs.length;
+
+ if (count < 1133) {
+ bias = 107;
+ } else if (count < 33769) {
+ bias = 1131;
+ } else {
+ bias = 32768;
+ }
+
+ const type2Subrs = [];
+ let i;
+
+ for (i = 0; i < bias; i++) {
+ type2Subrs.push([0x0b]);
+ }
+
+ for (i = 0; i < count; i++) {
+ type2Subrs.push(type1Subrs[i]);
+ }
+
+ return type2Subrs;
+ }
+
+ wrap(name, glyphs, charstrings, subrs, properties) {
+ const cff = new _cff_parser.CFF();
+ cff.header = new _cff_parser.CFFHeader(1, 0, 4, 4);
+ cff.names = [name];
+ const topDict = new _cff_parser.CFFTopDict();
+ topDict.setByName("version", 391);
+ topDict.setByName("Notice", 392);
+ topDict.setByName("FullName", 393);
+ topDict.setByName("FamilyName", 394);
+ topDict.setByName("Weight", 395);
+ topDict.setByName("Encoding", null);
+ topDict.setByName("FontMatrix", properties.fontMatrix);
+ topDict.setByName("FontBBox", properties.bbox);
+ topDict.setByName("charset", null);
+ topDict.setByName("CharStrings", null);
+ topDict.setByName("Private", null);
+ cff.topDict = topDict;
+ const strings = new _cff_parser.CFFStrings();
+ strings.add("Version 0.11");
+ strings.add("See original notice");
+ strings.add(name);
+ strings.add(name);
+ strings.add("Medium");
+ cff.strings = strings;
+ cff.globalSubrIndex = new _cff_parser.CFFIndex();
+ const count = glyphs.length;
+ const charsetArray = [".notdef"];
+ let i, ii;
+
+ for (i = 0; i < count; i++) {
+ const glyphName = charstrings[i].glyphName;
+
+ const index = _cff_parser.CFFStandardStrings.indexOf(glyphName);
+
+ if (index === -1) {
+ strings.add(glyphName);
+ }
+
+ charsetArray.push(glyphName);
+ }
+
+ cff.charset = new _cff_parser.CFFCharset(false, 0, charsetArray);
+ const charStringsIndex = new _cff_parser.CFFIndex();
+ charStringsIndex.add([0x8b, 0x0e]);
+
+ for (i = 0; i < count; i++) {
+ charStringsIndex.add(glyphs[i]);
+ }
+
+ cff.charStrings = charStringsIndex;
+ const privateDict = new _cff_parser.CFFPrivateDict();
+ privateDict.setByName("Subrs", null);
+ const fields = ["BlueValues", "OtherBlues", "FamilyBlues", "FamilyOtherBlues", "StemSnapH", "StemSnapV", "BlueShift", "BlueFuzz", "BlueScale", "LanguageGroup", "ExpansionFactor", "ForceBold", "StdHW", "StdVW"];
+
+ for (i = 0, ii = fields.length; i < ii; i++) {
+ const field = fields[i];
+
+ if (!(field in properties.privateData)) {
+ continue;
+ }
+
+ const value = properties.privateData[field];
- if (glyf) {
- var fontMatrix = !unitsPerEm ? font.fontMatrix : [1 / unitsPerEm, 0, 0, 1 / unitsPerEm, 0, 0];
- return new TrueTypeCompiled(parseGlyfTable(glyf, loca, indexToLocFormat), cmap, fontMatrix);
+ if (Array.isArray(value)) {
+ for (let j = value.length - 1; j > 0; j--) {
+ value[j] -= value[j - 1];
+ }
}
- return new Type2Compiled(cff, cmap, font.fontMatrix, font.glyphNameMap);
+ privateDict.setByName(field, value);
}
- };
-}();
-exports.FontRendererFactory = FontRendererFactory;
+ cff.topDict.privateDict = privateDict;
+ const subrIndex = new _cff_parser.CFFIndex();
+
+ for (i = 0, ii = subrs.length; i < ii; i++) {
+ subrIndex.add(subrs[i]);
+ }
+
+ privateDict.subrsIndex = subrIndex;
+ const compiler = new _cff_parser.CFFCompiler(cff);
+ return compiler.compile();
+ }
+
+}
+
+exports.Type1Font = Type1Font;
/***/ }),
-/* 38 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 48 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
-"use strict";
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
value: true
-});
+}));
exports.Type1Parser = void 0;
-var _encodings = __w_pdfjs_require__(33);
+var _encodings = __w_pdfjs_require__(37);
-var _core_utils = __w_pdfjs_require__(8);
+var _core_utils = __w_pdfjs_require__(9);
-var _stream = __w_pdfjs_require__(12);
+var _stream = __w_pdfjs_require__(10);
var _util = __w_pdfjs_require__(2);
-var HINTING_ENABLED = false;
+const HINTING_ENABLED = false;
-var Type1CharString = function Type1CharStringClosure() {
- var COMMAND_MAP = {
+const Type1CharString = function Type1CharStringClosure() {
+ const COMMAND_MAP = {
hstem: [1],
vstem: [3],
vmoveto: [4],
@@ -39611,22 +43582,22 @@ var Type1CharString = function Type1CharStringClosure() {
hvcurveto: [31]
};
- function Type1CharString() {
- this.width = 0;
- this.lsb = 0;
- this.flexing = false;
- this.output = [];
- this.stack = [];
- }
+ class Type1CharString {
+ constructor() {
+ this.width = 0;
+ this.lsb = 0;
+ this.flexing = false;
+ this.output = [];
+ this.stack = [];
+ }
- Type1CharString.prototype = {
- convert: function Type1CharString_convert(encoded, subrs, seacAnalysisEnabled) {
- var count = encoded.length;
- var error = false;
- var wx, sbx, subrNumber;
+ convert(encoded, subrs, seacAnalysisEnabled) {
+ const count = encoded.length;
+ let error = false;
+ let wx, sbx, subrNumber;
- for (var i = 0; i < count; i++) {
- var value = encoded[i];
+ for (let i = 0; i < count; i++) {
+ let value = encoded[i];
if (value < 32) {
if (value === 12) {
@@ -39659,7 +43630,7 @@ var Type1CharString = function Type1CharStringClosure() {
break;
}
- var dy = this.stack.pop();
+ const dy = this.stack.pop();
this.stack.push(0, dy);
break;
}
@@ -39791,7 +43762,7 @@ var Type1CharString = function Type1CharStringClosure() {
this.stack.pop();
wx = this.stack.pop();
- var sby = this.stack.pop();
+ const sby = this.stack.pop();
sbx = this.stack.pop();
this.lsb = sbx;
this.width = wx;
@@ -39805,8 +43776,8 @@ var Type1CharString = function Type1CharStringClosure() {
break;
}
- var num2 = this.stack.pop();
- var num1 = this.stack.pop();
+ const num2 = this.stack.pop();
+ const num1 = this.stack.pop();
this.stack.push(num1 / num2);
break;
@@ -39817,10 +43788,10 @@ var Type1CharString = function Type1CharStringClosure() {
}
subrNumber = this.stack.pop();
- var numArgs = this.stack.pop();
+ const numArgs = this.stack.pop();
if (subrNumber === 0 && numArgs === 3) {
- var flexArgs = this.stack.splice(this.stack.length - 17, 17);
+ const flexArgs = this.stack.splice(this.stack.length - 17, 17);
this.stack.push(flexArgs[2] + flexArgs[0], flexArgs[3] + flexArgs[1], flexArgs[4], flexArgs[5], flexArgs[6], flexArgs[7], flexArgs[8], flexArgs[9], flexArgs[10], flexArgs[11], flexArgs[12], flexArgs[13], flexArgs[14]);
error = this.executeCommand(13, COMMAND_MAP.flex, true);
this.flexing = false;
@@ -39849,7 +43820,7 @@ var Type1CharString = function Type1CharStringClosure() {
continue;
} else if (value <= 246) {
- value = value - 139;
+ value -= 139;
} else if (value <= 250) {
value = (value - 247) * 256 + encoded[++i] + 108;
} else if (value <= 254) {
@@ -39862,19 +43833,19 @@ var Type1CharString = function Type1CharStringClosure() {
}
return error;
- },
+ }
executeCommand(howManyArgs, command, keepStack) {
- var stackLength = this.stack.length;
+ const stackLength = this.stack.length;
if (howManyArgs > stackLength) {
return true;
}
- var start = stackLength - howManyArgs;
+ const start = stackLength - howManyArgs;
- for (var i = start; i < stackLength; i++) {
- var value = this.stack[i];
+ for (let i = start; i < stackLength; i++) {
+ let value = this.stack[i];
if (Number.isInteger(value)) {
this.output.push(28, value >> 8 & 0xff, value & 0xff);
@@ -39895,13 +43866,14 @@ var Type1CharString = function Type1CharStringClosure() {
return false;
}
- };
+ }
+
return Type1CharString;
}();
-var Type1Parser = function Type1ParserClosure() {
- var EEXEC_ENCRYPT_KEY = 55665;
- var CHAR_STRS_ENCRYPT_KEY = 4330;
+const Type1Parser = function Type1ParserClosure() {
+ const EEXEC_ENCRYPT_KEY = 55665;
+ const CHAR_STRS_ENCRYPT_KEY = 4330;
function isHexDigit(code) {
return code >= 48 && code <= 57 || code >= 65 && code <= 70 || code >= 97 && code <= 102;
@@ -39912,9 +43884,9 @@ var Type1Parser = function Type1ParserClosure() {
return new Uint8Array(0);
}
- var r = key | 0,
- c1 = 52845,
- c2 = 22719,
+ const c1 = 52845,
+ c2 = 22719;
+ let r = key | 0,
i,
j;
@@ -39922,11 +43894,11 @@ var Type1Parser = function Type1ParserClosure() {
r = (data[i] + r) * c1 + c2 & (1 << 16) - 1;
}
- var count = data.length - discardNumber;
- var decrypted = new Uint8Array(count);
+ const count = data.length - discardNumber;
+ const decrypted = new Uint8Array(count);
for (i = discardNumber, j = 0; j < count; i++, j++) {
- var value = data[i];
+ const value = data[i];
decrypted[j] = value ^ r >> 8;
r = (value + r) * c1 + c2 & (1 << 16) - 1;
}
@@ -39935,30 +43907,30 @@ var Type1Parser = function Type1ParserClosure() {
}
function decryptAscii(data, key, discardNumber) {
- var r = key | 0,
- c1 = 52845,
- c2 = 22719;
- var count = data.length,
- maybeLength = count >>> 1;
- var decrypted = new Uint8Array(maybeLength);
- var i, j;
+ const c1 = 52845,
+ c2 = 22719;
+ let r = key | 0;
+ const count = data.length,
+ maybeLength = count >>> 1;
+ const decrypted = new Uint8Array(maybeLength);
+ let i, j;
for (i = 0, j = 0; i < count; i++) {
- var digit1 = data[i];
+ const digit1 = data[i];
if (!isHexDigit(digit1)) {
continue;
}
i++;
- var digit2;
+ let digit2;
while (i < count && !isHexDigit(digit2 = data[i])) {
i++;
}
if (i < count) {
- var value = parseInt(String.fromCharCode(digit1, digit2), 16);
+ const value = parseInt(String.fromCharCode(digit1, digit2), 16);
decrypted[j++] = value ^ r >> 8;
r = (value + r) * c1 + c2 & (1 << 16) - 1;
}
@@ -39971,25 +43943,25 @@ var Type1Parser = function Type1ParserClosure() {
return c === 0x2f || c === 0x5b || c === 0x5d || c === 0x7b || c === 0x7d || c === 0x28 || c === 0x29;
}
- function Type1Parser(stream, encrypted, seacAnalysisEnabled) {
- if (encrypted) {
- var data = stream.getBytes();
- var isBinary = !((isHexDigit(data[0]) || (0, _core_utils.isWhiteSpace)(data[0])) && isHexDigit(data[1]) && isHexDigit(data[2]) && isHexDigit(data[3]) && isHexDigit(data[4]) && isHexDigit(data[5]) && isHexDigit(data[6]) && isHexDigit(data[7]));
- stream = new _stream.Stream(isBinary ? decrypt(data, EEXEC_ENCRYPT_KEY, 4) : decryptAscii(data, EEXEC_ENCRYPT_KEY, 4));
- }
+ class Type1Parser {
+ constructor(stream, encrypted, seacAnalysisEnabled) {
+ if (encrypted) {
+ const data = stream.getBytes();
+ const isBinary = !((isHexDigit(data[0]) || (0, _core_utils.isWhiteSpace)(data[0])) && isHexDigit(data[1]) && isHexDigit(data[2]) && isHexDigit(data[3]) && isHexDigit(data[4]) && isHexDigit(data[5]) && isHexDigit(data[6]) && isHexDigit(data[7]));
+ stream = new _stream.Stream(isBinary ? decrypt(data, EEXEC_ENCRYPT_KEY, 4) : decryptAscii(data, EEXEC_ENCRYPT_KEY, 4));
+ }
- this.seacAnalysisEnabled = !!seacAnalysisEnabled;
- this.stream = stream;
- this.nextChar();
- }
+ this.seacAnalysisEnabled = !!seacAnalysisEnabled;
+ this.stream = stream;
+ this.nextChar();
+ }
- Type1Parser.prototype = {
- readNumberArray: function Type1Parser_readNumberArray() {
+ readNumberArray() {
this.getToken();
- var array = [];
+ const array = [];
while (true) {
- var token = this.getToken();
+ const token = this.getToken();
if (token === null || token === "]" || token === "}") {
break;
@@ -39999,25 +43971,30 @@ var Type1Parser = function Type1ParserClosure() {
}
return array;
- },
- readNumber: function Type1Parser_readNumber() {
- var token = this.getToken();
+ }
+
+ readNumber() {
+ const token = this.getToken();
return parseFloat(token || 0);
- },
- readInt: function Type1Parser_readInt() {
- var token = this.getToken();
+ }
+
+ readInt() {
+ const token = this.getToken();
return parseInt(token || 0, 10) | 0;
- },
- readBoolean: function Type1Parser_readBoolean() {
- var token = this.getToken();
+ }
+
+ readBoolean() {
+ const token = this.getToken();
return token === "true" ? 1 : 0;
- },
- nextChar: function Type1_nextChar() {
+ }
+
+ nextChar() {
return this.currentChar = this.stream.getByte();
- },
- getToken: function Type1Parser_getToken() {
- var comment = false;
- var ch = this.currentChar;
+ }
+
+ getToken() {
+ let comment = false;
+ let ch = this.currentChar;
while (true) {
if (ch === -1) {
@@ -40042,7 +44019,7 @@ var Type1Parser = function Type1ParserClosure() {
return String.fromCharCode(ch);
}
- var token = "";
+ let token = "";
do {
token += String.fromCharCode(ch);
@@ -40050,28 +44027,30 @@ var Type1Parser = function Type1ParserClosure() {
} while (ch >= 0 && !(0, _core_utils.isWhiteSpace)(ch) && !isSpecial(ch));
return token;
- },
- readCharStrings: function Type1Parser_readCharStrings(bytes, lenIV) {
+ }
+
+ readCharStrings(bytes, lenIV) {
if (lenIV === -1) {
return bytes;
}
return decrypt(bytes, CHAR_STRS_ENCRYPT_KEY, lenIV);
- },
- extractFontProgram: function Type1Parser_extractFontProgram(properties) {
- var stream = this.stream;
- var subrs = [],
- charstrings = [];
- var privateData = Object.create(null);
+ }
+
+ extractFontProgram(properties) {
+ const stream = this.stream;
+ const subrs = [],
+ charstrings = [];
+ const privateData = Object.create(null);
privateData.lenIV = 4;
- var program = {
+ const program = {
subrs: [],
charstrings: [],
properties: {
privateData
}
};
- var token, length, data, lenIV, encoded;
+ let token, length, data, lenIV, encoded;
while ((token = this.getToken()) !== null) {
if (token !== "/") {
@@ -40098,7 +44077,7 @@ var Type1Parser = function Type1ParserClosure() {
continue;
}
- var glyph = this.getToken();
+ const glyph = this.getToken();
length = this.readInt();
this.getToken();
data = length > 0 ? stream.getBytes(length) : new Uint8Array(0);
@@ -40146,7 +44125,7 @@ var Type1Parser = function Type1ParserClosure() {
case "OtherBlues":
case "FamilyBlues":
case "FamilyOtherBlues":
- var blueArray = this.readNumberArray();
+ const blueArray = this.readNumberArray();
if (blueArray.length > 0 && blueArray.length % 2 === 0 && HINTING_ENABLED) {
program.properties.privateData[token] = blueArray;
@@ -40179,12 +44158,12 @@ var Type1Parser = function Type1ParserClosure() {
}
}
- for (var i = 0; i < charstrings.length; i++) {
- glyph = charstrings[i].glyph;
+ for (let i = 0; i < charstrings.length; i++) {
+ const glyph = charstrings[i].glyph;
encoded = charstrings[i].encoded;
- var charString = new Type1CharString();
- var error = charString.convert(encoded, subrs, this.seacAnalysisEnabled);
- var output = charString.output;
+ const charString = new Type1CharString();
+ const error = charString.convert(encoded, subrs, this.seacAnalysisEnabled);
+ let output = charString.output;
if (error) {
output = [14];
@@ -40214,9 +44193,10 @@ var Type1Parser = function Type1ParserClosure() {
}
return program;
- },
- extractFontHeader: function Type1Parser_extractFontHeader(properties) {
- var token;
+ }
+
+ extractFontHeader(properties) {
+ let token;
while ((token = this.getToken()) !== null) {
if (token !== "/") {
@@ -40227,22 +44207,22 @@ var Type1Parser = function Type1ParserClosure() {
switch (token) {
case "FontMatrix":
- var matrix = this.readNumberArray();
+ const matrix = this.readNumberArray();
properties.fontMatrix = matrix;
break;
case "Encoding":
- var encodingArg = this.getToken();
- var encoding;
+ const encodingArg = this.getToken();
+ let encoding;
if (!/^\d+$/.test(encodingArg)) {
encoding = (0, _encodings.getEncoding)(encodingArg);
} else {
encoding = [];
- var size = parseInt(encodingArg, 10) | 0;
+ const size = parseInt(encodingArg, 10) | 0;
this.getToken();
- for (var j = 0; j < size; j++) {
+ for (let j = 0; j < size; j++) {
token = this.getToken();
while (token !== "dup" && token !== "def") {
@@ -40257,9 +44237,9 @@ var Type1Parser = function Type1ParserClosure() {
break;
}
- var index = this.readInt();
+ const index = this.readInt();
this.getToken();
- var glyph = this.getToken();
+ const glyph = this.getToken();
encoding[index] = glyph;
this.getToken();
}
@@ -40269,7 +44249,7 @@ var Type1Parser = function Type1ParserClosure() {
break;
case "FontBBox":
- var fontBBox = this.readNumberArray();
+ const fontBBox = this.readNumberArray();
properties.ascent = Math.max(fontBBox[3], fontBBox[1]);
properties.descent = Math.min(fontBBox[1], fontBBox[3]);
properties.ascentScaled = true;
@@ -40277,34 +44257,35 @@ var Type1Parser = function Type1ParserClosure() {
}
}
}
- };
+
+ }
+
return Type1Parser;
}();
exports.Type1Parser = Type1Parser;
/***/ }),
-/* 39 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 49 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
-"use strict";
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
value: true
-});
+}));
exports.getTilingPatternIR = getTilingPatternIR;
exports.Pattern = void 0;
var _util = __w_pdfjs_require__(2);
-var _colorspace = __w_pdfjs_require__(23);
+var _colorspace = __w_pdfjs_require__(14);
var _primitives = __w_pdfjs_require__(5);
-var _core_utils = __w_pdfjs_require__(8);
+var _core_utils = __w_pdfjs_require__(9);
-var ShadingType = {
+const ShadingType = {
FUNCTION_BASED: 1,
AXIAL: 2,
RADIAL: 3,
@@ -40314,32 +44295,26 @@ var ShadingType = {
TENSOR_PATCH_MESH: 7
};
-var Pattern = function PatternClosure() {
- function Pattern() {
- (0, _util.unreachable)("should not call Pattern constructor");
+class Pattern {
+ constructor() {
+ (0, _util.unreachable)("Cannot initialize Pattern.");
}
- Pattern.prototype = {
- getPattern: function Pattern_getPattern(ctx) {
- (0, _util.unreachable)(`Should not call Pattern.getStyle: ${ctx}`);
- }
- };
-
- Pattern.parseShading = function (shading, matrix, xref, res, handler, pdfFunctionFactory, localColorSpaceCache) {
- var dict = (0, _primitives.isStream)(shading) ? shading.dict : shading;
- var type = dict.get("ShadingType");
+ static parseShading(shading, matrix, xref, res, handler, pdfFunctionFactory, localColorSpaceCache) {
+ const dict = (0, _primitives.isStream)(shading) ? shading.dict : shading;
+ const type = dict.get("ShadingType");
try {
switch (type) {
case ShadingType.AXIAL:
case ShadingType.RADIAL:
- return new Shadings.RadialAxial(dict, matrix, xref, res, pdfFunctionFactory, localColorSpaceCache);
+ return new RadialAxialShading(dict, matrix, xref, res, pdfFunctionFactory, localColorSpaceCache);
case ShadingType.FREE_FORM_MESH:
case ShadingType.LATTICE_FORM_MESH:
case ShadingType.COONS_PATCH_MESH:
case ShadingType.TENSOR_PATCH_MESH:
- return new Shadings.Mesh(shading, matrix, xref, res, pdfFunctionFactory, localColorSpaceCache);
+ return new MeshShading(shading, matrix, xref, res, pdfFunctionFactory, localColorSpaceCache);
default:
throw new _util.FormatError("Unsupported ShadingType: " + type);
@@ -40353,23 +44328,37 @@ var Pattern = function PatternClosure() {
featureId: _util.UNSUPPORTED_FEATURES.shadingPattern
});
(0, _util.warn)(ex);
- return new Shadings.Dummy();
+ return new DummyShading();
}
- };
+ }
- return Pattern;
-}();
+}
exports.Pattern = Pattern;
-var Shadings = {};
-Shadings.SMALL_NUMBER = 1e-6;
-Shadings.RadialAxial = function RadialAxialClosure() {
- function RadialAxial(dict, matrix, xref, resources, pdfFunctionFactory, localColorSpaceCache) {
+class BaseShading {
+ static get SMALL_NUMBER() {
+ return (0, _util.shadow)(this, "SMALL_NUMBER", 1e-6);
+ }
+
+ constructor() {
+ if (this.constructor === BaseShading) {
+ (0, _util.unreachable)("Cannot initialize BaseShading.");
+ }
+ }
+
+ getIR() {
+ (0, _util.unreachable)("Abstract method `getIR` called.");
+ }
+
+}
+
+class RadialAxialShading extends BaseShading {
+ constructor(dict, matrix, xref, resources, pdfFunctionFactory, localColorSpaceCache) {
+ super();
this.matrix = matrix;
this.coordsArr = dict.getArray("Coords");
this.shadingType = dict.get("ShadingType");
- this.type = "Pattern";
const cs = _colorspace.ColorSpace.parse({
cs: dict.getRaw("ColorSpace") || dict.getRaw("CS"),
@@ -40379,7 +44368,6 @@ Shadings.RadialAxial = function RadialAxialClosure() {
localColorSpaceCache
});
- this.cs = cs;
const bbox = dict.getArray("BBox");
if (Array.isArray(bbox) && bbox.length === 4) {
@@ -40388,32 +44376,27 @@ Shadings.RadialAxial = function RadialAxialClosure() {
this.bbox = null;
}
- var t0 = 0.0,
+ let t0 = 0.0,
t1 = 1.0;
if (dict.has("Domain")) {
- var domainArr = dict.getArray("Domain");
+ const domainArr = dict.getArray("Domain");
t0 = domainArr[0];
t1 = domainArr[1];
}
- var extendStart = false,
+ let extendStart = false,
extendEnd = false;
if (dict.has("Extend")) {
- var extendArr = dict.getArray("Extend");
+ const extendArr = dict.getArray("Extend");
extendStart = extendArr[0];
extendEnd = extendArr[1];
}
if (this.shadingType === ShadingType.RADIAL && (!extendStart || !extendEnd)) {
- var x1 = this.coordsArr[0];
- var y1 = this.coordsArr[1];
- var r1 = this.coordsArr[2];
- var x2 = this.coordsArr[3];
- var y2 = this.coordsArr[4];
- var r2 = this.coordsArr[5];
- var distance = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
+ const [x1, y1, r1, x2, y2, r2] = this.coordsArr;
+ const distance = Math.hypot(x1 - x2, y1 - y2);
if (r1 <= r2 + distance && r2 <= r1 + distance) {
(0, _util.warn)("Unsupported radial gradient.");
@@ -40422,203 +44405,318 @@ Shadings.RadialAxial = function RadialAxialClosure() {
this.extendStart = extendStart;
this.extendEnd = extendEnd;
- var fnObj = dict.getRaw("Function");
- var fn = pdfFunctionFactory.createFromArray(fnObj);
+ const fnObj = dict.getRaw("Function");
+ const fn = pdfFunctionFactory.createFromArray(fnObj);
const NUMBER_OF_SAMPLES = 10;
const step = (t1 - t0) / NUMBER_OF_SAMPLES;
- var colorStops = this.colorStops = [];
+ const colorStops = this.colorStops = [];
if (t0 >= t1 || step <= 0) {
(0, _util.info)("Bad shading domain.");
return;
}
- var color = new Float32Array(cs.numComps),
- ratio = new Float32Array(1);
- var rgbColor;
+ const color = new Float32Array(cs.numComps),
+ ratio = new Float32Array(1);
+ let rgbColor;
for (let i = 0; i <= NUMBER_OF_SAMPLES; i++) {
ratio[0] = t0 + i * step;
fn(ratio, 0, color, 0);
rgbColor = cs.getRgb(color, 0);
- var cssColor = _util.Util.makeCssRgb(rgbColor[0], rgbColor[1], rgbColor[2]);
+ const cssColor = _util.Util.makeHexColor(rgbColor[0], rgbColor[1], rgbColor[2]);
colorStops.push([i / NUMBER_OF_SAMPLES, cssColor]);
}
- var background = "transparent";
+ let background = "transparent";
if (dict.has("Background")) {
rgbColor = cs.getRgb(dict.get("Background"), 0);
- background = _util.Util.makeCssRgb(rgbColor[0], rgbColor[1], rgbColor[2]);
+ background = _util.Util.makeHexColor(rgbColor[0], rgbColor[1], rgbColor[2]);
}
if (!extendStart) {
colorStops.unshift([0, background]);
- colorStops[1][0] += Shadings.SMALL_NUMBER;
+ colorStops[1][0] += BaseShading.SMALL_NUMBER;
}
if (!extendEnd) {
- colorStops[colorStops.length - 1][0] -= Shadings.SMALL_NUMBER;
+ colorStops[colorStops.length - 1][0] -= BaseShading.SMALL_NUMBER;
colorStops.push([1, background]);
}
this.colorStops = colorStops;
}
- RadialAxial.prototype = {
- getIR: function RadialAxial_getIR() {
- var coordsArr = this.coordsArr;
- var shadingType = this.shadingType;
- var type, p0, p1, r0, r1;
-
- if (shadingType === ShadingType.AXIAL) {
- p0 = [coordsArr[0], coordsArr[1]];
- p1 = [coordsArr[2], coordsArr[3]];
- r0 = null;
- r1 = null;
- type = "axial";
- } else if (shadingType === ShadingType.RADIAL) {
- p0 = [coordsArr[0], coordsArr[1]];
- p1 = [coordsArr[3], coordsArr[4]];
- r0 = coordsArr[2];
- r1 = coordsArr[5];
- type = "radial";
- } else {
- (0, _util.unreachable)(`getPattern type unknown: ${shadingType}`);
- }
-
- var matrix = this.matrix;
-
- if (matrix) {
- p0 = _util.Util.applyTransform(p0, matrix);
- p1 = _util.Util.applyTransform(p1, matrix);
-
- if (shadingType === ShadingType.RADIAL) {
- var scale = _util.Util.singularValueDecompose2dScale(matrix);
+ getIR() {
+ const coordsArr = this.coordsArr;
+ const shadingType = this.shadingType;
+ let type, p0, p1, r0, r1;
+
+ if (shadingType === ShadingType.AXIAL) {
+ p0 = [coordsArr[0], coordsArr[1]];
+ p1 = [coordsArr[2], coordsArr[3]];
+ r0 = null;
+ r1 = null;
+ type = "axial";
+ } else if (shadingType === ShadingType.RADIAL) {
+ p0 = [coordsArr[0], coordsArr[1]];
+ p1 = [coordsArr[3], coordsArr[4]];
+ r0 = coordsArr[2];
+ r1 = coordsArr[5];
+ type = "radial";
+ } else {
+ (0, _util.unreachable)(`getPattern type unknown: ${shadingType}`);
+ }
- r0 *= scale[0];
- r1 *= scale[1];
- }
- }
+ return ["RadialAxial", type, this.bbox, this.colorStops, p0, p1, r0, r1, this.matrix];
+ }
- return ["RadialAxial", type, this.bbox, this.colorStops, p0, p1, r0, r1];
- }
- };
- return RadialAxial;
-}();
+}
-Shadings.Mesh = function MeshClosure() {
- function MeshStreamReader(stream, context) {
+class MeshStreamReader {
+ constructor(stream, context) {
this.stream = stream;
this.context = context;
this.buffer = 0;
this.bufferLength = 0;
- var numComps = context.numComps;
+ const numComps = context.numComps;
this.tmpCompsBuf = new Float32Array(numComps);
- var csNumComps = context.colorSpace.numComps;
+ const csNumComps = context.colorSpace.numComps;
this.tmpCsCompsBuf = context.colorFn ? new Float32Array(csNumComps) : this.tmpCompsBuf;
}
- MeshStreamReader.prototype = {
- get hasData() {
- if (this.stream.end) {
- return this.stream.pos < this.stream.end;
- }
+ get hasData() {
+ if (this.stream.end) {
+ return this.stream.pos < this.stream.end;
+ }
- if (this.bufferLength > 0) {
- return true;
- }
+ if (this.bufferLength > 0) {
+ return true;
+ }
- var nextByte = this.stream.getByte();
+ const nextByte = this.stream.getByte();
- if (nextByte < 0) {
- return false;
+ if (nextByte < 0) {
+ return false;
+ }
+
+ this.buffer = nextByte;
+ this.bufferLength = 8;
+ return true;
+ }
+
+ readBits(n) {
+ let buffer = this.buffer;
+ let bufferLength = this.bufferLength;
+
+ if (n === 32) {
+ if (bufferLength === 0) {
+ return (this.stream.getByte() << 24 | this.stream.getByte() << 16 | this.stream.getByte() << 8 | this.stream.getByte()) >>> 0;
}
- this.buffer = nextByte;
- this.bufferLength = 8;
- return true;
- },
+ buffer = buffer << 24 | this.stream.getByte() << 16 | this.stream.getByte() << 8 | this.stream.getByte();
+ const nextByte = this.stream.getByte();
+ this.buffer = nextByte & (1 << bufferLength) - 1;
+ return (buffer << 8 - bufferLength | (nextByte & 0xff) >> bufferLength) >>> 0;
+ }
- readBits: function MeshStreamReader_readBits(n) {
- var buffer = this.buffer;
- var bufferLength = this.bufferLength;
+ if (n === 8 && bufferLength === 0) {
+ return this.stream.getByte();
+ }
- if (n === 32) {
- if (bufferLength === 0) {
- return (this.stream.getByte() << 24 | this.stream.getByte() << 16 | this.stream.getByte() << 8 | this.stream.getByte()) >>> 0;
- }
+ while (bufferLength < n) {
+ buffer = buffer << 8 | this.stream.getByte();
+ bufferLength += 8;
+ }
- buffer = buffer << 24 | this.stream.getByte() << 16 | this.stream.getByte() << 8 | this.stream.getByte();
- var nextByte = this.stream.getByte();
- this.buffer = nextByte & (1 << bufferLength) - 1;
- return (buffer << 8 - bufferLength | (nextByte & 0xff) >> bufferLength) >>> 0;
- }
+ bufferLength -= n;
+ this.bufferLength = bufferLength;
+ this.buffer = buffer & (1 << bufferLength) - 1;
+ return buffer >> bufferLength;
+ }
- if (n === 8 && bufferLength === 0) {
- return this.stream.getByte();
- }
+ align() {
+ this.buffer = 0;
+ this.bufferLength = 0;
+ }
- while (bufferLength < n) {
- buffer = buffer << 8 | this.stream.getByte();
- bufferLength += 8;
- }
+ readFlag() {
+ return this.readBits(this.context.bitsPerFlag);
+ }
- bufferLength -= n;
- this.bufferLength = bufferLength;
- this.buffer = buffer & (1 << bufferLength) - 1;
- return buffer >> bufferLength;
- },
- align: function MeshStreamReader_align() {
- this.buffer = 0;
- this.bufferLength = 0;
- },
- readFlag: function MeshStreamReader_readFlag() {
- return this.readBits(this.context.bitsPerFlag);
- },
- readCoordinate: function MeshStreamReader_readCoordinate() {
- var bitsPerCoordinate = this.context.bitsPerCoordinate;
- var xi = this.readBits(bitsPerCoordinate);
- var yi = this.readBits(bitsPerCoordinate);
- var decode = this.context.decode;
- var scale = bitsPerCoordinate < 32 ? 1 / ((1 << bitsPerCoordinate) - 1) : 2.3283064365386963e-10;
- return [xi * scale * (decode[1] - decode[0]) + decode[0], yi * scale * (decode[3] - decode[2]) + decode[2]];
- },
- readComponents: function MeshStreamReader_readComponents() {
- var numComps = this.context.numComps;
- var bitsPerComponent = this.context.bitsPerComponent;
- var scale = bitsPerComponent < 32 ? 1 / ((1 << bitsPerComponent) - 1) : 2.3283064365386963e-10;
- var decode = this.context.decode;
- var components = this.tmpCompsBuf;
+ readCoordinate() {
+ const bitsPerCoordinate = this.context.bitsPerCoordinate;
+ const xi = this.readBits(bitsPerCoordinate);
+ const yi = this.readBits(bitsPerCoordinate);
+ const decode = this.context.decode;
+ const scale = bitsPerCoordinate < 32 ? 1 / ((1 << bitsPerCoordinate) - 1) : 2.3283064365386963e-10;
+ return [xi * scale * (decode[1] - decode[0]) + decode[0], yi * scale * (decode[3] - decode[2]) + decode[2]];
+ }
- for (var i = 0, j = 4; i < numComps; i++, j += 2) {
- var ci = this.readBits(bitsPerComponent);
- components[i] = ci * scale * (decode[j + 1] - decode[j]) + decode[j];
- }
+ readComponents() {
+ const numComps = this.context.numComps;
+ const bitsPerComponent = this.context.bitsPerComponent;
+ const scale = bitsPerComponent < 32 ? 1 / ((1 << bitsPerComponent) - 1) : 2.3283064365386963e-10;
+ const decode = this.context.decode;
+ const components = this.tmpCompsBuf;
+
+ for (let i = 0, j = 4; i < numComps; i++, j += 2) {
+ const ci = this.readBits(bitsPerComponent);
+ components[i] = ci * scale * (decode[j + 1] - decode[j]) + decode[j];
+ }
- var color = this.tmpCsCompsBuf;
+ const color = this.tmpCsCompsBuf;
- if (this.context.colorFn) {
- this.context.colorFn(components, 0, color, 0);
- }
+ if (this.context.colorFn) {
+ this.context.colorFn(components, 0, color, 0);
+ }
+
+ return this.context.colorSpace.getRgb(color, 0);
+ }
+
+}
+
+const getB = function getBClosure() {
+ function buildB(count) {
+ const lut = [];
+
+ for (let i = 0; i <= count; i++) {
+ const t = i / count,
+ t_ = 1 - t;
+ lut.push(new Float32Array([t_ * t_ * t_, 3 * t * t_ * t_, 3 * t * t * t_, t * t * t]));
+ }
+
+ return lut;
+ }
- return this.context.colorSpace.getRgb(color, 0);
+ const cache = [];
+ return function (count) {
+ if (!cache[count]) {
+ cache[count] = buildB(count);
}
+
+ return cache[count];
};
+}();
+
+class MeshShading extends BaseShading {
+ static get MIN_SPLIT_PATCH_CHUNKS_AMOUNT() {
+ return (0, _util.shadow)(this, "MIN_SPLIT_PATCH_CHUNKS_AMOUNT", 3);
+ }
+
+ static get MAX_SPLIT_PATCH_CHUNKS_AMOUNT() {
+ return (0, _util.shadow)(this, "MAX_SPLIT_PATCH_CHUNKS_AMOUNT", 20);
+ }
+
+ static get TRIANGLE_DENSITY() {
+ return (0, _util.shadow)(this, "TRIANGLE_DENSITY", 20);
+ }
+
+ constructor(stream, matrix, xref, resources, pdfFunctionFactory, localColorSpaceCache) {
+ super();
+
+ if (!(0, _primitives.isStream)(stream)) {
+ throw new _util.FormatError("Mesh data is not a stream");
+ }
+
+ const dict = stream.dict;
+ this.matrix = matrix;
+ this.shadingType = dict.get("ShadingType");
+ const bbox = dict.getArray("BBox");
+
+ if (Array.isArray(bbox) && bbox.length === 4) {
+ this.bbox = _util.Util.normalizeRect(bbox);
+ } else {
+ this.bbox = null;
+ }
+
+ const cs = _colorspace.ColorSpace.parse({
+ cs: dict.getRaw("ColorSpace") || dict.getRaw("CS"),
+ xref,
+ resources,
+ pdfFunctionFactory,
+ localColorSpaceCache
+ });
+
+ this.background = dict.has("Background") ? cs.getRgb(dict.get("Background"), 0) : null;
+ const fnObj = dict.getRaw("Function");
+ const fn = fnObj ? pdfFunctionFactory.createFromArray(fnObj) : null;
+ this.coords = [];
+ this.colors = [];
+ this.figures = [];
+ const decodeContext = {
+ bitsPerCoordinate: dict.get("BitsPerCoordinate"),
+ bitsPerComponent: dict.get("BitsPerComponent"),
+ bitsPerFlag: dict.get("BitsPerFlag"),
+ decode: dict.getArray("Decode"),
+ colorFn: fn,
+ colorSpace: cs,
+ numComps: fn ? 1 : cs.numComps
+ };
+ const reader = new MeshStreamReader(stream, decodeContext);
+ let patchMesh = false;
+
+ switch (this.shadingType) {
+ case ShadingType.FREE_FORM_MESH:
+ this._decodeType4Shading(reader);
+
+ break;
+
+ case ShadingType.LATTICE_FORM_MESH:
+ const verticesPerRow = dict.get("VerticesPerRow") | 0;
+
+ if (verticesPerRow < 2) {
+ throw new _util.FormatError("Invalid VerticesPerRow");
+ }
+
+ this._decodeType5Shading(reader, verticesPerRow);
+
+ break;
+
+ case ShadingType.COONS_PATCH_MESH:
+ this._decodeType6Shading(reader);
+
+ patchMesh = true;
+ break;
+
+ case ShadingType.TENSOR_PATCH_MESH:
+ this._decodeType7Shading(reader);
+
+ patchMesh = true;
+ break;
+
+ default:
+ (0, _util.unreachable)("Unsupported mesh type.");
+ break;
+ }
+
+ if (patchMesh) {
+ this._updateBounds();
- function decodeType4Shading(mesh, reader) {
- var coords = mesh.coords;
- var colors = mesh.colors;
- var operators = [];
- var ps = [];
- var verticesLeft = 0;
+ for (let i = 0, ii = this.figures.length; i < ii; i++) {
+ this._buildFigureFromPatch(i);
+ }
+ }
+
+ this._updateBounds();
+
+ this._packData();
+ }
+
+ _decodeType4Shading(reader) {
+ const coords = this.coords;
+ const colors = this.colors;
+ const operators = [];
+ const ps = [];
+ let verticesLeft = 0;
while (reader.hasData) {
- var f = reader.readFlag();
- var coord = reader.readCoordinate();
- var color = reader.readComponents();
+ const f = reader.readFlag();
+ const coord = reader.readCoordinate();
+ const color = reader.readComponents();
if (verticesLeft === 0) {
if (!(0 <= f && f <= 2)) {
@@ -40651,27 +44749,27 @@ Shadings.Mesh = function MeshClosure() {
reader.align();
}
- mesh.figures.push({
+ this.figures.push({
type: "triangles",
coords: new Int32Array(ps),
colors: new Int32Array(ps)
});
}
- function decodeType5Shading(mesh, reader, verticesPerRow) {
- var coords = mesh.coords;
- var colors = mesh.colors;
- var ps = [];
+ _decodeType5Shading(reader, verticesPerRow) {
+ const coords = this.coords;
+ const colors = this.colors;
+ const ps = [];
while (reader.hasData) {
- var coord = reader.readCoordinate();
- var color = reader.readComponents();
+ const coord = reader.readCoordinate();
+ const color = reader.readComponents();
ps.push(coords.length);
coords.push(coord);
colors.push(color);
}
- mesh.figures.push({
+ this.figures.push({
type: "lattice",
coords: new Int32Array(ps),
colors: new Int32Array(ps),
@@ -40679,140 +44777,32 @@ Shadings.Mesh = function MeshClosure() {
});
}
- var MIN_SPLIT_PATCH_CHUNKS_AMOUNT = 3;
- var MAX_SPLIT_PATCH_CHUNKS_AMOUNT = 20;
- var TRIANGLE_DENSITY = 20;
-
- var getB = function getBClosure() {
- function buildB(count) {
- var lut = [];
-
- for (var i = 0; i <= count; i++) {
- var t = i / count,
- t_ = 1 - t;
- lut.push(new Float32Array([t_ * t_ * t_, 3 * t * t_ * t_, 3 * t * t * t_, t * t * t]));
- }
-
- return lut;
- }
-
- var cache = [];
- return function getB(count) {
- if (!cache[count]) {
- cache[count] = buildB(count);
- }
-
- return cache[count];
- };
- }();
-
- function buildFigureFromPatch(mesh, index) {
- var figure = mesh.figures[index];
- (0, _util.assert)(figure.type === "patch", "Unexpected patch mesh figure");
- var coords = mesh.coords,
- colors = mesh.colors;
- var pi = figure.coords;
- var ci = figure.colors;
- var figureMinX = Math.min(coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], coords[pi[15]][0]);
- var figureMinY = Math.min(coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], coords[pi[15]][1]);
- var figureMaxX = Math.max(coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], coords[pi[15]][0]);
- var figureMaxY = Math.max(coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], coords[pi[15]][1]);
- var splitXBy = Math.ceil((figureMaxX - figureMinX) * TRIANGLE_DENSITY / (mesh.bounds[2] - mesh.bounds[0]));
- splitXBy = Math.max(MIN_SPLIT_PATCH_CHUNKS_AMOUNT, Math.min(MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitXBy));
- var splitYBy = Math.ceil((figureMaxY - figureMinY) * TRIANGLE_DENSITY / (mesh.bounds[3] - mesh.bounds[1]));
- splitYBy = Math.max(MIN_SPLIT_PATCH_CHUNKS_AMOUNT, Math.min(MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitYBy));
- var verticesPerRow = splitXBy + 1;
- var figureCoords = new Int32Array((splitYBy + 1) * verticesPerRow);
- var figureColors = new Int32Array((splitYBy + 1) * verticesPerRow);
- var k = 0;
- var cl = new Uint8Array(3),
- cr = new Uint8Array(3);
- var c0 = colors[ci[0]],
- c1 = colors[ci[1]],
- c2 = colors[ci[2]],
- c3 = colors[ci[3]];
- var bRow = getB(splitYBy),
- bCol = getB(splitXBy);
-
- for (var row = 0; row <= splitYBy; row++) {
- cl[0] = (c0[0] * (splitYBy - row) + c2[0] * row) / splitYBy | 0;
- cl[1] = (c0[1] * (splitYBy - row) + c2[1] * row) / splitYBy | 0;
- cl[2] = (c0[2] * (splitYBy - row) + c2[2] * row) / splitYBy | 0;
- cr[0] = (c1[0] * (splitYBy - row) + c3[0] * row) / splitYBy | 0;
- cr[1] = (c1[1] * (splitYBy - row) + c3[1] * row) / splitYBy | 0;
- cr[2] = (c1[2] * (splitYBy - row) + c3[2] * row) / splitYBy | 0;
-
- for (var col = 0; col <= splitXBy; col++, k++) {
- if ((row === 0 || row === splitYBy) && (col === 0 || col === splitXBy)) {
- continue;
- }
-
- var x = 0,
- y = 0;
- var q = 0;
-
- for (var i = 0; i <= 3; i++) {
- for (var j = 0; j <= 3; j++, q++) {
- var m = bRow[row][i] * bCol[col][j];
- x += coords[pi[q]][0] * m;
- y += coords[pi[q]][1] * m;
- }
- }
-
- figureCoords[k] = coords.length;
- coords.push([x, y]);
- figureColors[k] = colors.length;
- var newColor = new Uint8Array(3);
- newColor[0] = (cl[0] * (splitXBy - col) + cr[0] * col) / splitXBy | 0;
- newColor[1] = (cl[1] * (splitXBy - col) + cr[1] * col) / splitXBy | 0;
- newColor[2] = (cl[2] * (splitXBy - col) + cr[2] * col) / splitXBy | 0;
- colors.push(newColor);
- }
- }
-
- figureCoords[0] = pi[0];
- figureColors[0] = ci[0];
- figureCoords[splitXBy] = pi[3];
- figureColors[splitXBy] = ci[1];
- figureCoords[verticesPerRow * splitYBy] = pi[12];
- figureColors[verticesPerRow * splitYBy] = ci[2];
- figureCoords[verticesPerRow * splitYBy + splitXBy] = pi[15];
- figureColors[verticesPerRow * splitYBy + splitXBy] = ci[3];
- mesh.figures[index] = {
- type: "lattice",
- coords: figureCoords,
- colors: figureColors,
- verticesPerRow
- };
- }
-
- function decodeType6Shading(mesh, reader) {
- var coords = mesh.coords;
- var colors = mesh.colors;
- var ps = new Int32Array(16);
- var cs = new Int32Array(4);
+ _decodeType6Shading(reader) {
+ const coords = this.coords;
+ const colors = this.colors;
+ const ps = new Int32Array(16);
+ const cs = new Int32Array(4);
while (reader.hasData) {
- var f = reader.readFlag();
+ const f = reader.readFlag();
if (!(0 <= f && f <= 3)) {
throw new _util.FormatError("Unknown type6 flag");
}
- var i, ii;
- var pi = coords.length;
+ const pi = coords.length;
- for (i = 0, ii = f !== 0 ? 8 : 12; i < ii; i++) {
+ for (let i = 0, ii = f !== 0 ? 8 : 12; i < ii; i++) {
coords.push(reader.readCoordinate());
}
- var ci = colors.length;
+ const ci = colors.length;
- for (i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) {
+ for (let i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) {
colors.push(reader.readComponents());
}
- var tmp1, tmp2, tmp3, tmp4;
+ let tmp1, tmp2, tmp3, tmp4;
switch (f) {
case 0:
@@ -40909,7 +44899,7 @@ Shadings.Mesh = function MeshClosure() {
coords.push([(-4 * coords[ps[12]][0] - coords[ps[3]][0] + 6 * (coords[ps[8]][0] + coords[ps[13]][0]) - 2 * (coords[ps[0]][0] + coords[ps[15]][0]) + 3 * (coords[ps[11]][0] + coords[ps[1]][0])) / 9, (-4 * coords[ps[12]][1] - coords[ps[3]][1] + 6 * (coords[ps[8]][1] + coords[ps[13]][1]) - 2 * (coords[ps[0]][1] + coords[ps[15]][1]) + 3 * (coords[ps[11]][1] + coords[ps[1]][1])) / 9]);
ps[10] = coords.length;
coords.push([(-4 * coords[ps[15]][0] - coords[ps[0]][0] + 6 * (coords[ps[11]][0] + coords[ps[14]][0]) - 2 * (coords[ps[12]][0] + coords[ps[3]][0]) + 3 * (coords[ps[2]][0] + coords[ps[8]][0])) / 9, (-4 * coords[ps[15]][1] - coords[ps[0]][1] + 6 * (coords[ps[11]][1] + coords[ps[14]][1]) - 2 * (coords[ps[12]][1] + coords[ps[3]][1]) + 3 * (coords[ps[2]][1] + coords[ps[8]][1])) / 9]);
- mesh.figures.push({
+ this.figures.push({
type: "patch",
coords: new Int32Array(ps),
colors: new Int32Array(cs)
@@ -40917,33 +44907,32 @@ Shadings.Mesh = function MeshClosure() {
}
}
- function decodeType7Shading(mesh, reader) {
- var coords = mesh.coords;
- var colors = mesh.colors;
- var ps = new Int32Array(16);
- var cs = new Int32Array(4);
+ _decodeType7Shading(reader) {
+ const coords = this.coords;
+ const colors = this.colors;
+ const ps = new Int32Array(16);
+ const cs = new Int32Array(4);
while (reader.hasData) {
- var f = reader.readFlag();
+ const f = reader.readFlag();
if (!(0 <= f && f <= 3)) {
throw new _util.FormatError("Unknown type7 flag");
}
- var i, ii;
- var pi = coords.length;
+ const pi = coords.length;
- for (i = 0, ii = f !== 0 ? 12 : 16; i < ii; i++) {
+ for (let i = 0, ii = f !== 0 ? 12 : 16; i < ii; i++) {
coords.push(reader.readCoordinate());
}
- var ci = colors.length;
+ const ci = colors.length;
- for (i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) {
+ for (let i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) {
colors.push(reader.readComponents());
}
- var tmp1, tmp2, tmp3, tmp4;
+ let tmp1, tmp2, tmp3, tmp4;
switch (f) {
case 0:
@@ -41048,7 +45037,7 @@ Shadings.Mesh = function MeshClosure() {
break;
}
- mesh.figures.push({
+ this.figures.push({
type: "patch",
coords: new Int32Array(ps),
colors: new Int32Array(cs)
@@ -41056,53 +45045,133 @@ Shadings.Mesh = function MeshClosure() {
}
}
- function updateBounds(mesh) {
- var minX = mesh.coords[0][0],
- minY = mesh.coords[0][1],
+ _buildFigureFromPatch(index) {
+ const figure = this.figures[index];
+ (0, _util.assert)(figure.type === "patch", "Unexpected patch mesh figure");
+ const coords = this.coords,
+ colors = this.colors;
+ const pi = figure.coords;
+ const ci = figure.colors;
+ const figureMinX = Math.min(coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], coords[pi[15]][0]);
+ const figureMinY = Math.min(coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], coords[pi[15]][1]);
+ const figureMaxX = Math.max(coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], coords[pi[15]][0]);
+ const figureMaxY = Math.max(coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], coords[pi[15]][1]);
+ let splitXBy = Math.ceil((figureMaxX - figureMinX) * MeshShading.TRIANGLE_DENSITY / (this.bounds[2] - this.bounds[0]));
+ splitXBy = Math.max(MeshShading.MIN_SPLIT_PATCH_CHUNKS_AMOUNT, Math.min(MeshShading.MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitXBy));
+ let splitYBy = Math.ceil((figureMaxY - figureMinY) * MeshShading.TRIANGLE_DENSITY / (this.bounds[3] - this.bounds[1]));
+ splitYBy = Math.max(MeshShading.MIN_SPLIT_PATCH_CHUNKS_AMOUNT, Math.min(MeshShading.MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitYBy));
+ const verticesPerRow = splitXBy + 1;
+ const figureCoords = new Int32Array((splitYBy + 1) * verticesPerRow);
+ const figureColors = new Int32Array((splitYBy + 1) * verticesPerRow);
+ let k = 0;
+ const cl = new Uint8Array(3),
+ cr = new Uint8Array(3);
+ const c0 = colors[ci[0]],
+ c1 = colors[ci[1]],
+ c2 = colors[ci[2]],
+ c3 = colors[ci[3]];
+ const bRow = getB(splitYBy),
+ bCol = getB(splitXBy);
+
+ for (let row = 0; row <= splitYBy; row++) {
+ cl[0] = (c0[0] * (splitYBy - row) + c2[0] * row) / splitYBy | 0;
+ cl[1] = (c0[1] * (splitYBy - row) + c2[1] * row) / splitYBy | 0;
+ cl[2] = (c0[2] * (splitYBy - row) + c2[2] * row) / splitYBy | 0;
+ cr[0] = (c1[0] * (splitYBy - row) + c3[0] * row) / splitYBy | 0;
+ cr[1] = (c1[1] * (splitYBy - row) + c3[1] * row) / splitYBy | 0;
+ cr[2] = (c1[2] * (splitYBy - row) + c3[2] * row) / splitYBy | 0;
+
+ for (let col = 0; col <= splitXBy; col++, k++) {
+ if ((row === 0 || row === splitYBy) && (col === 0 || col === splitXBy)) {
+ continue;
+ }
+
+ let x = 0,
+ y = 0;
+ let q = 0;
+
+ for (let i = 0; i <= 3; i++) {
+ for (let j = 0; j <= 3; j++, q++) {
+ const m = bRow[row][i] * bCol[col][j];
+ x += coords[pi[q]][0] * m;
+ y += coords[pi[q]][1] * m;
+ }
+ }
+
+ figureCoords[k] = coords.length;
+ coords.push([x, y]);
+ figureColors[k] = colors.length;
+ const newColor = new Uint8Array(3);
+ newColor[0] = (cl[0] * (splitXBy - col) + cr[0] * col) / splitXBy | 0;
+ newColor[1] = (cl[1] * (splitXBy - col) + cr[1] * col) / splitXBy | 0;
+ newColor[2] = (cl[2] * (splitXBy - col) + cr[2] * col) / splitXBy | 0;
+ colors.push(newColor);
+ }
+ }
+
+ figureCoords[0] = pi[0];
+ figureColors[0] = ci[0];
+ figureCoords[splitXBy] = pi[3];
+ figureColors[splitXBy] = ci[1];
+ figureCoords[verticesPerRow * splitYBy] = pi[12];
+ figureColors[verticesPerRow * splitYBy] = ci[2];
+ figureCoords[verticesPerRow * splitYBy + splitXBy] = pi[15];
+ figureColors[verticesPerRow * splitYBy + splitXBy] = ci[3];
+ this.figures[index] = {
+ type: "lattice",
+ coords: figureCoords,
+ colors: figureColors,
+ verticesPerRow
+ };
+ }
+
+ _updateBounds() {
+ let minX = this.coords[0][0],
+ minY = this.coords[0][1],
maxX = minX,
maxY = minY;
- for (var i = 1, ii = mesh.coords.length; i < ii; i++) {
- var x = mesh.coords[i][0],
- y = mesh.coords[i][1];
+ for (let i = 1, ii = this.coords.length; i < ii; i++) {
+ const x = this.coords[i][0],
+ y = this.coords[i][1];
minX = minX > x ? x : minX;
minY = minY > y ? y : minY;
maxX = maxX < x ? x : maxX;
maxY = maxY < y ? y : maxY;
}
- mesh.bounds = [minX, minY, maxX, maxY];
+ this.bounds = [minX, minY, maxX, maxY];
}
- function packData(mesh) {
- var i, ii, j, jj;
- var coords = mesh.coords;
- var coordsPacked = new Float32Array(coords.length * 2);
+ _packData() {
+ let i, ii, j, jj;
+ const coords = this.coords;
+ const coordsPacked = new Float32Array(coords.length * 2);
for (i = 0, j = 0, ii = coords.length; i < ii; i++) {
- var xy = coords[i];
+ const xy = coords[i];
coordsPacked[j++] = xy[0];
coordsPacked[j++] = xy[1];
}
- mesh.coords = coordsPacked;
- var colors = mesh.colors;
- var colorsPacked = new Uint8Array(colors.length * 3);
+ this.coords = coordsPacked;
+ const colors = this.colors;
+ const colorsPacked = new Uint8Array(colors.length * 3);
for (i = 0, j = 0, ii = colors.length; i < ii; i++) {
- var c = colors[i];
+ const c = colors[i];
colorsPacked[j++] = c[0];
colorsPacked[j++] = c[1];
colorsPacked[j++] = c[2];
}
- mesh.colors = colorsPacked;
- var figures = mesh.figures;
+ this.colors = colorsPacked;
+ const figures = this.figures;
for (i = 0, ii = figures.length; i < ii; i++) {
- var figure = figures[i],
- ps = figure.coords,
- cs = figure.colors;
+ const figure = figures[i],
+ ps = figure.coords,
+ cs = figure.colors;
for (j = 0, jj = ps.length; j < jj; j++) {
ps[j] *= 2;
@@ -41111,114 +45180,20 @@ Shadings.Mesh = function MeshClosure() {
}
}
- function Mesh(stream, matrix, xref, resources, pdfFunctionFactory, localColorSpaceCache) {
- if (!(0, _primitives.isStream)(stream)) {
- throw new _util.FormatError("Mesh data is not a stream");
- }
-
- var dict = stream.dict;
- this.matrix = matrix;
- this.shadingType = dict.get("ShadingType");
- this.type = "Pattern";
- const bbox = dict.getArray("BBox");
-
- if (Array.isArray(bbox) && bbox.length === 4) {
- this.bbox = _util.Util.normalizeRect(bbox);
- } else {
- this.bbox = null;
- }
-
- const cs = _colorspace.ColorSpace.parse({
- cs: dict.getRaw("ColorSpace") || dict.getRaw("CS"),
- xref,
- resources,
- pdfFunctionFactory,
- localColorSpaceCache
- });
-
- this.cs = cs;
- this.background = dict.has("Background") ? cs.getRgb(dict.get("Background"), 0) : null;
- var fnObj = dict.getRaw("Function");
- var fn = fnObj ? pdfFunctionFactory.createFromArray(fnObj) : null;
- this.coords = [];
- this.colors = [];
- this.figures = [];
- var decodeContext = {
- bitsPerCoordinate: dict.get("BitsPerCoordinate"),
- bitsPerComponent: dict.get("BitsPerComponent"),
- bitsPerFlag: dict.get("BitsPerFlag"),
- decode: dict.getArray("Decode"),
- colorFn: fn,
- colorSpace: cs,
- numComps: fn ? 1 : cs.numComps
- };
- var reader = new MeshStreamReader(stream, decodeContext);
- var patchMesh = false;
-
- switch (this.shadingType) {
- case ShadingType.FREE_FORM_MESH:
- decodeType4Shading(this, reader);
- break;
-
- case ShadingType.LATTICE_FORM_MESH:
- var verticesPerRow = dict.get("VerticesPerRow") | 0;
-
- if (verticesPerRow < 2) {
- throw new _util.FormatError("Invalid VerticesPerRow");
- }
-
- decodeType5Shading(this, reader, verticesPerRow);
- break;
-
- case ShadingType.COONS_PATCH_MESH:
- decodeType6Shading(this, reader);
- patchMesh = true;
- break;
-
- case ShadingType.TENSOR_PATCH_MESH:
- decodeType7Shading(this, reader);
- patchMesh = true;
- break;
-
- default:
- (0, _util.unreachable)("Unsupported mesh type.");
- break;
- }
-
- if (patchMesh) {
- updateBounds(this);
-
- for (var i = 0, ii = this.figures.length; i < ii; i++) {
- buildFigureFromPatch(this, i);
- }
- }
-
- updateBounds(this);
- packData(this);
+ getIR() {
+ return ["Mesh", this.shadingType, this.coords, this.colors, this.figures, this.bounds, this.matrix, this.bbox, this.background];
}
- Mesh.prototype = {
- getIR: function Mesh_getIR() {
- return ["Mesh", this.shadingType, this.coords, this.colors, this.figures, this.bounds, this.matrix, this.bbox, this.background];
- }
- };
- return Mesh;
-}();
+}
-Shadings.Dummy = function DummyClosure() {
- function Dummy() {
- this.type = "Pattern";
+class DummyShading extends BaseShading {
+ getIR() {
+ return ["Dummy"];
}
- Dummy.prototype = {
- getIR: function Dummy_getIR() {
- return ["Dummy"];
- }
- };
- return Dummy;
-}();
+}
-function getTilingPatternIR(operatorList, dict, args) {
+function getTilingPatternIR(operatorList, dict, color) {
const matrix = dict.getArray("Matrix");
const bbox = _util.Util.normalizeRect(dict.getArray("BBox"));
@@ -41232,29 +45207,28 @@ function getTilingPatternIR(operatorList, dict, args) {
throw new _util.FormatError(`Invalid getTilingPatternIR /BBox array: [${bbox}].`);
}
- return ["TilingPattern", args, operatorList, matrix, bbox, xstep, ystep, paintType, tilingType];
+ return ["TilingPattern", color, operatorList, matrix, bbox, xstep, ystep, paintType, tilingType];
}
/***/ }),
-/* 40 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 50 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
-"use strict";
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
value: true
-});
+}));
exports.isPDFFunction = isPDFFunction;
-exports.PostScriptCompiler = exports.PostScriptEvaluator = exports.PDFFunctionFactory = void 0;
+exports.PostScriptEvaluator = exports.PostScriptCompiler = exports.PDFFunctionFactory = void 0;
var _primitives = __w_pdfjs_require__(5);
var _util = __w_pdfjs_require__(2);
-var _ps_parser = __w_pdfjs_require__(41);
+var _ps_parser = __w_pdfjs_require__(51);
-var _image_utils = __w_pdfjs_require__(24);
+var _image_utils = __w_pdfjs_require__(52);
class PDFFunctionFactory {
constructor({
@@ -41263,7 +45237,6 @@ class PDFFunctionFactory {
}) {
this.xref = xref;
this.isEvalSupported = isEvalSupported !== false;
- this._localFunctionCache = null;
}
create(fn) {
@@ -41314,10 +45287,6 @@ class PDFFunctionFactory {
}
if (fnRef) {
- if (!this._localFunctionCache) {
- this._localFunctionCache = new _image_utils.LocalFunctionCache();
- }
-
const localFunction = this._localFunctionCache.getByRef(fnRef);
if (localFunction) {
@@ -41344,14 +45313,14 @@ class PDFFunctionFactory {
}
if (fnRef) {
- if (!this._localFunctionCache) {
- this._localFunctionCache = new _image_utils.LocalFunctionCache();
- }
-
this._localFunctionCache.set(null, fnRef, parsedFunction);
}
}
+ get _localFunctionCache() {
+ return (0, _util.shadow)(this, "_localFunctionCache", new _image_utils.LocalFunctionCache());
+ }
+
}
exports.PDFFunctionFactory = PDFFunctionFactory;
@@ -41378,507 +45347,413 @@ function toNumberArray(arr) {
return arr;
}
-var PDFFunction = function PDFFunctionClosure() {
- const CONSTRUCT_SAMPLED = 0;
- const CONSTRUCT_INTERPOLATED = 2;
- const CONSTRUCT_STICHED = 3;
- const CONSTRUCT_POSTSCRIPT = 4;
- return {
- getSampleArray(size, outputSize, bps, stream) {
- var i, ii;
- var length = 1;
-
- for (i = 0, ii = size.length; i < ii; i++) {
- length *= size[i];
- }
+class PDFFunction {
+ static getSampleArray(size, outputSize, bps, stream) {
+ let i, ii;
+ let length = 1;
- length *= outputSize;
- var array = new Array(length);
- var codeSize = 0;
- var codeBuf = 0;
- var sampleMul = 1.0 / (2.0 ** bps - 1);
- var strBytes = stream.getBytes((length * bps + 7) / 8);
- var strIdx = 0;
+ for (i = 0, ii = size.length; i < ii; i++) {
+ length *= size[i];
+ }
- for (i = 0; i < length; i++) {
- while (codeSize < bps) {
- codeBuf <<= 8;
- codeBuf |= strBytes[strIdx++];
- codeSize += 8;
- }
+ length *= outputSize;
+ const array = new Array(length);
+ let codeSize = 0;
+ let codeBuf = 0;
+ const sampleMul = 1.0 / (2.0 ** bps - 1);
+ const strBytes = stream.getBytes((length * bps + 7) / 8);
+ let strIdx = 0;
- codeSize -= bps;
- array[i] = (codeBuf >> codeSize) * sampleMul;
- codeBuf &= (1 << codeSize) - 1;
+ for (i = 0; i < length; i++) {
+ while (codeSize < bps) {
+ codeBuf <<= 8;
+ codeBuf |= strBytes[strIdx++];
+ codeSize += 8;
}
- return array;
- },
-
- getIR({
- xref,
- isEvalSupported,
- fn
- }) {
- var dict = fn.dict;
-
- if (!dict) {
- dict = fn;
- }
+ codeSize -= bps;
+ array[i] = (codeBuf >> codeSize) * sampleMul;
+ codeBuf &= (1 << codeSize) - 1;
+ }
- var types = [this.constructSampled, null, this.constructInterpolated, this.constructStiched, this.constructPostScript];
- var typeNum = dict.get("FunctionType");
- var typeFn = types[typeNum];
+ return array;
+ }
- if (!typeFn) {
- throw new _util.FormatError("Unknown type of function");
- }
+ static parse({
+ xref,
+ isEvalSupported,
+ fn
+ }) {
+ const dict = fn.dict || fn;
+ const typeNum = dict.get("FunctionType");
- return typeFn.call(this, {
- xref,
- isEvalSupported,
- fn,
- dict
- });
- },
+ switch (typeNum) {
+ case 0:
+ return this.constructSampled({
+ xref,
+ isEvalSupported,
+ fn,
+ dict
+ });
- fromIR({
- xref,
- isEvalSupported,
- IR
- }) {
- var type = IR[0];
+ case 1:
+ break;
- switch (type) {
- case CONSTRUCT_SAMPLED:
- return this.constructSampledFromIR({
- xref,
- isEvalSupported,
- IR
- });
+ case 2:
+ return this.constructInterpolated({
+ xref,
+ isEvalSupported,
+ dict
+ });
- case CONSTRUCT_INTERPOLATED:
- return this.constructInterpolatedFromIR({
- xref,
- isEvalSupported,
- IR
- });
+ case 3:
+ return this.constructStiched({
+ xref,
+ isEvalSupported,
+ dict
+ });
- case CONSTRUCT_STICHED:
- return this.constructStichedFromIR({
- xref,
- isEvalSupported,
- IR
- });
+ case 4:
+ return this.constructPostScript({
+ xref,
+ isEvalSupported,
+ fn,
+ dict
+ });
+ }
- default:
- return this.constructPostScriptFromIR({
- xref,
- isEvalSupported,
- IR
- });
- }
- },
+ throw new _util.FormatError("Unknown type of function");
+ }
- parse({
- xref,
- isEvalSupported,
- fn
- }) {
- const IR = this.getIR({
+ static parseArray({
+ xref,
+ isEvalSupported,
+ fnObj
+ }) {
+ if (!Array.isArray(fnObj)) {
+ return this.parse({
xref,
isEvalSupported,
- fn
+ fn: fnObj
});
- return this.fromIR({
+ }
+
+ const fnArray = [];
+
+ for (let j = 0, jj = fnObj.length; j < jj; j++) {
+ fnArray.push(this.parse({
xref,
isEvalSupported,
- IR
- });
- },
+ fn: xref.fetchIfRef(fnObj[j])
+ }));
+ }
- parseArray({
- xref,
- isEvalSupported,
- fnObj
- }) {
- if (!Array.isArray(fnObj)) {
- return this.parse({
- xref,
- isEvalSupported,
- fn: fnObj
- });
+ return function (src, srcOffset, dest, destOffset) {
+ for (let i = 0, ii = fnArray.length; i < ii; i++) {
+ fnArray[i](src, srcOffset, dest, destOffset + i);
}
+ };
+ }
- var fnArray = [];
+ static constructSampled({
+ xref,
+ isEvalSupported,
+ fn,
+ dict
+ }) {
+ function toMultiArray(arr) {
+ const inputLength = arr.length;
+ const out = [];
+ let index = 0;
- for (var j = 0, jj = fnObj.length; j < jj; j++) {
- fnArray.push(this.parse({
- xref,
- isEvalSupported,
- fn: xref.fetchIfRef(fnObj[j])
- }));
+ for (let i = 0; i < inputLength; i += 2) {
+ out[index++] = [arr[i], arr[i + 1]];
}
- return function (src, srcOffset, dest, destOffset) {
- for (var i = 0, ii = fnArray.length; i < ii; i++) {
- fnArray[i](src, srcOffset, dest, destOffset + i);
- }
- };
- },
+ return out;
+ }
- constructSampled({
- xref,
- isEvalSupported,
- fn,
- dict
- }) {
- function toMultiArray(arr) {
- var inputLength = arr.length;
- var out = [];
- var index = 0;
+ function interpolate(x, xmin, xmax, ymin, ymax) {
+ return ymin + (x - xmin) * ((ymax - ymin) / (xmax - xmin));
+ }
- for (var i = 0; i < inputLength; i += 2) {
- out[index] = [arr[i], arr[i + 1]];
- ++index;
- }
+ let domain = toNumberArray(dict.getArray("Domain"));
+ let range = toNumberArray(dict.getArray("Range"));
- return out;
- }
+ if (!domain || !range) {
+ throw new _util.FormatError("No domain or range");
+ }
- var domain = toNumberArray(dict.getArray("Domain"));
- var range = toNumberArray(dict.getArray("Range"));
+ const inputSize = domain.length / 2;
+ const outputSize = range.length / 2;
+ domain = toMultiArray(domain);
+ range = toMultiArray(range);
+ const size = toNumberArray(dict.getArray("Size"));
+ const bps = dict.get("BitsPerSample");
+ const order = dict.get("Order") || 1;
- if (!domain || !range) {
- throw new _util.FormatError("No domain or range");
- }
+ if (order !== 1) {
+ (0, _util.info)("No support for cubic spline interpolation: " + order);
+ }
- var inputSize = domain.length / 2;
- var outputSize = range.length / 2;
- domain = toMultiArray(domain);
- range = toMultiArray(range);
- var size = toNumberArray(dict.getArray("Size"));
- var bps = dict.get("BitsPerSample");
- var order = dict.get("Order") || 1;
+ let encode = toNumberArray(dict.getArray("Encode"));
- if (order !== 1) {
- (0, _util.info)("No support for cubic spline interpolation: " + order);
- }
+ if (!encode) {
+ encode = [];
- var encode = toNumberArray(dict.getArray("Encode"));
+ for (let i = 0; i < inputSize; ++i) {
+ encode.push([0, size[i] - 1]);
+ }
+ } else {
+ encode = toMultiArray(encode);
+ }
- if (!encode) {
- encode = [];
+ let decode = toNumberArray(dict.getArray("Decode"));
- for (var i = 0; i < inputSize; ++i) {
- encode.push([0, size[i] - 1]);
- }
- } else {
- encode = toMultiArray(encode);
- }
+ if (!decode) {
+ decode = range;
+ } else {
+ decode = toMultiArray(decode);
+ }
- var decode = toNumberArray(dict.getArray("Decode"));
+ const samples = this.getSampleArray(size, outputSize, bps, fn);
+ return function constructSampledFn(src, srcOffset, dest, destOffset) {
+ const cubeVertices = 1 << inputSize;
+ const cubeN = new Float64Array(cubeVertices);
+ const cubeVertex = new Uint32Array(cubeVertices);
+ let i, j;
- if (!decode) {
- decode = range;
- } else {
- decode = toMultiArray(decode);
+ for (j = 0; j < cubeVertices; j++) {
+ cubeN[j] = 1;
}
- var samples = this.getSampleArray(size, outputSize, bps, fn);
- return [CONSTRUCT_SAMPLED, inputSize, domain, encode, decode, samples, size, outputSize, 2 ** bps - 1, range];
- },
+ let k = outputSize,
+ pos = 1;
- constructSampledFromIR({
- xref,
- isEvalSupported,
- IR
- }) {
- function interpolate(x, xmin, xmax, ymin, ymax) {
- return ymin + (x - xmin) * ((ymax - ymin) / (xmax - xmin));
- }
-
- return function constructSampledFromIRResult(src, srcOffset, dest, destOffset) {
- var m = IR[1];
- var domain = IR[2];
- var encode = IR[3];
- var decode = IR[4];
- var samples = IR[5];
- var size = IR[6];
- var n = IR[7];
- var range = IR[9];
- var cubeVertices = 1 << m;
- var cubeN = new Float64Array(cubeVertices);
- var cubeVertex = new Uint32Array(cubeVertices);
- var i, j;
+ for (i = 0; i < inputSize; ++i) {
+ const domain_2i = domain[i][0];
+ const domain_2i_1 = domain[i][1];
+ const xi = Math.min(Math.max(src[srcOffset + i], domain_2i), domain_2i_1);
+ let e = interpolate(xi, domain_2i, domain_2i_1, encode[i][0], encode[i][1]);
+ const size_i = size[i];
+ e = Math.min(Math.max(e, 0), size_i - 1);
+ const e0 = e < size_i - 1 ? Math.floor(e) : e - 1;
+ const n0 = e0 + 1 - e;
+ const n1 = e - e0;
+ const offset0 = e0 * k;
+ const offset1 = offset0 + k;
for (j = 0; j < cubeVertices; j++) {
- cubeN[j] = 1;
- }
-
- var k = n,
- pos = 1;
-
- for (i = 0; i < m; ++i) {
- var domain_2i = domain[i][0];
- var domain_2i_1 = domain[i][1];
- var xi = Math.min(Math.max(src[srcOffset + i], domain_2i), domain_2i_1);
- var e = interpolate(xi, domain_2i, domain_2i_1, encode[i][0], encode[i][1]);
- var size_i = size[i];
- e = Math.min(Math.max(e, 0), size_i - 1);
- var e0 = e < size_i - 1 ? Math.floor(e) : e - 1;
- var n0 = e0 + 1 - e;
- var n1 = e - e0;
- var offset0 = e0 * k;
- var offset1 = offset0 + k;
-
- for (j = 0; j < cubeVertices; j++) {
- if (j & pos) {
- cubeN[j] *= n1;
- cubeVertex[j] += offset1;
- } else {
- cubeN[j] *= n0;
- cubeVertex[j] += offset0;
- }
+ if (j & pos) {
+ cubeN[j] *= n1;
+ cubeVertex[j] += offset1;
+ } else {
+ cubeN[j] *= n0;
+ cubeVertex[j] += offset0;
}
-
- k *= size_i;
- pos <<= 1;
}
- for (j = 0; j < n; ++j) {
- var rj = 0;
+ k *= size_i;
+ pos <<= 1;
+ }
- for (i = 0; i < cubeVertices; i++) {
- rj += samples[cubeVertex[i] + j] * cubeN[i];
- }
+ for (j = 0; j < outputSize; ++j) {
+ let rj = 0;
- rj = interpolate(rj, 0, 1, decode[j][0], decode[j][1]);
- dest[destOffset + j] = Math.min(Math.max(rj, range[j][0]), range[j][1]);
+ for (i = 0; i < cubeVertices; i++) {
+ rj += samples[cubeVertex[i] + j] * cubeN[i];
}
- };
- },
-
- constructInterpolated({
- xref,
- isEvalSupported,
- fn,
- dict
- }) {
- var c0 = toNumberArray(dict.getArray("C0")) || [0];
- var c1 = toNumberArray(dict.getArray("C1")) || [1];
- var n = dict.get("N");
- var length = c0.length;
- var diff = [];
- for (var i = 0; i < length; ++i) {
- diff.push(c1[i] - c0[i]);
+ rj = interpolate(rj, 0, 1, decode[j][0], decode[j][1]);
+ dest[destOffset + j] = Math.min(Math.max(rj, range[j][0]), range[j][1]);
}
+ };
+ }
- return [CONSTRUCT_INTERPOLATED, c0, diff, n];
- },
+ static constructInterpolated({
+ xref,
+ isEvalSupported,
+ dict
+ }) {
+ const c0 = toNumberArray(dict.getArray("C0")) || [0];
+ const c1 = toNumberArray(dict.getArray("C1")) || [1];
+ const n = dict.get("N");
+ const diff = [];
- constructInterpolatedFromIR({
- xref,
- isEvalSupported,
- IR
- }) {
- var c0 = IR[1];
- var diff = IR[2];
- var n = IR[3];
- var length = diff.length;
- return function constructInterpolatedFromIRResult(src, srcOffset, dest, destOffset) {
- var x = n === 1 ? src[srcOffset] : src[srcOffset] ** n;
+ for (let i = 0, ii = c0.length; i < ii; ++i) {
+ diff.push(c1[i] - c0[i]);
+ }
- for (var j = 0; j < length; ++j) {
- dest[destOffset + j] = c0[j] + x * diff[j];
- }
- };
- },
+ const length = diff.length;
+ return function constructInterpolatedFn(src, srcOffset, dest, destOffset) {
+ const x = n === 1 ? src[srcOffset] : src[srcOffset] ** n;
- constructStiched({
- xref,
- isEvalSupported,
- fn,
- dict
- }) {
- var domain = toNumberArray(dict.getArray("Domain"));
-
- if (!domain) {
- throw new _util.FormatError("No domain");
+ for (let j = 0; j < length; ++j) {
+ dest[destOffset + j] = c0[j] + x * diff[j];
}
+ };
+ }
- var inputSize = domain.length / 2;
-
- if (inputSize !== 1) {
- throw new _util.FormatError("Bad domain for stiched function");
- }
+ static constructStiched({
+ xref,
+ isEvalSupported,
+ dict
+ }) {
+ const domain = toNumberArray(dict.getArray("Domain"));
- var fnRefs = dict.get("Functions");
- var fns = [];
+ if (!domain) {
+ throw new _util.FormatError("No domain");
+ }
- for (var i = 0, ii = fnRefs.length; i < ii; ++i) {
- fns.push(this.parse({
- xref,
- isEvalSupported,
- fn: xref.fetchIfRef(fnRefs[i])
- }));
- }
+ const inputSize = domain.length / 2;
- var bounds = toNumberArray(dict.getArray("Bounds"));
- var encode = toNumberArray(dict.getArray("Encode"));
- return [CONSTRUCT_STICHED, domain, bounds, encode, fns];
- },
+ if (inputSize !== 1) {
+ throw new _util.FormatError("Bad domain for stiched function");
+ }
- constructStichedFromIR({
- xref,
- isEvalSupported,
- IR
- }) {
- var domain = IR[1];
- var bounds = IR[2];
- var encode = IR[3];
- var fns = IR[4];
- var tmpBuf = new Float32Array(1);
- return function constructStichedFromIRResult(src, srcOffset, dest, destOffset) {
- var clip = function constructStichedFromIRClip(v, min, max) {
- if (v > max) {
- v = max;
- } else if (v < min) {
- v = min;
- }
-
- return v;
- };
+ const fnRefs = dict.get("Functions");
+ const fns = [];
- var v = clip(src[srcOffset], domain[0], domain[1]);
+ for (let i = 0, ii = fnRefs.length; i < ii; ++i) {
+ fns.push(this.parse({
+ xref,
+ isEvalSupported,
+ fn: xref.fetchIfRef(fnRefs[i])
+ }));
+ }
- for (var i = 0, ii = bounds.length; i < ii; ++i) {
- if (v < bounds[i]) {
- break;
- }
+ const bounds = toNumberArray(dict.getArray("Bounds"));
+ const encode = toNumberArray(dict.getArray("Encode"));
+ const tmpBuf = new Float32Array(1);
+ return function constructStichedFn(src, srcOffset, dest, destOffset) {
+ const clip = function constructStichedFromIRClip(v, min, max) {
+ if (v > max) {
+ v = max;
+ } else if (v < min) {
+ v = min;
}
- var dmin = domain[0];
-
- if (i > 0) {
- dmin = bounds[i - 1];
- }
+ return v;
+ };
- var dmax = domain[1];
+ const v = clip(src[srcOffset], domain[0], domain[1]);
+ const length = bounds.length;
+ let i;
- if (i < bounds.length) {
- dmax = bounds[i];
+ for (i = 0; i < length; ++i) {
+ if (v < bounds[i]) {
+ break;
}
+ }
- var rmin = encode[2 * i];
- var rmax = encode[2 * i + 1];
- tmpBuf[0] = dmin === dmax ? rmin : rmin + (v - dmin) * (rmax - rmin) / (dmax - dmin);
- fns[i](tmpBuf, 0, dest, destOffset);
- };
- },
+ let dmin = domain[0];
- constructPostScript({
- xref,
- isEvalSupported,
- fn,
- dict
- }) {
- var domain = toNumberArray(dict.getArray("Domain"));
- var range = toNumberArray(dict.getArray("Range"));
-
- if (!domain) {
- throw new _util.FormatError("No domain.");
+ if (i > 0) {
+ dmin = bounds[i - 1];
}
- if (!range) {
- throw new _util.FormatError("No range.");
+ let dmax = domain[1];
+
+ if (i < bounds.length) {
+ dmax = bounds[i];
}
- var lexer = new _ps_parser.PostScriptLexer(fn);
- var parser = new _ps_parser.PostScriptParser(lexer);
- var code = parser.parse();
- return [CONSTRUCT_POSTSCRIPT, domain, range, code];
- },
+ const rmin = encode[2 * i];
+ const rmax = encode[2 * i + 1];
+ tmpBuf[0] = dmin === dmax ? rmin : rmin + (v - dmin) * (rmax - rmin) / (dmax - dmin);
+ fns[i](tmpBuf, 0, dest, destOffset);
+ };
+ }
- constructPostScriptFromIR({
- xref,
- isEvalSupported,
- IR
- }) {
- var domain = IR[1];
- var range = IR[2];
- var code = IR[3];
+ static constructPostScript({
+ xref,
+ isEvalSupported,
+ fn,
+ dict
+ }) {
+ const domain = toNumberArray(dict.getArray("Domain"));
+ const range = toNumberArray(dict.getArray("Range"));
- if (isEvalSupported && _util.IsEvalSupportedCached.value) {
- const compiled = new PostScriptCompiler().compile(code, domain, range);
+ if (!domain) {
+ throw new _util.FormatError("No domain.");
+ }
- if (compiled) {
- return new Function("src", "srcOffset", "dest", "destOffset", compiled);
- }
+ if (!range) {
+ throw new _util.FormatError("No range.");
+ }
+
+ const lexer = new _ps_parser.PostScriptLexer(fn);
+ const parser = new _ps_parser.PostScriptParser(lexer);
+ const code = parser.parse();
+
+ if (isEvalSupported && _util.IsEvalSupportedCached.value) {
+ const compiled = new PostScriptCompiler().compile(code, domain, range);
+
+ if (compiled) {
+ return new Function("src", "srcOffset", "dest", "destOffset", compiled);
}
+ }
- (0, _util.info)("Unable to compile PS function");
- var numOutputs = range.length >> 1;
- var numInputs = domain.length >> 1;
- var evaluator = new PostScriptEvaluator(code);
- var cache = Object.create(null);
- var MAX_CACHE_SIZE = 2048 * 4;
- var cache_available = MAX_CACHE_SIZE;
- var tmpBuf = new Float32Array(numInputs);
- return function constructPostScriptFromIRResult(src, srcOffset, dest, destOffset) {
- var i, value;
- var key = "";
- var input = tmpBuf;
+ (0, _util.info)("Unable to compile PS function");
+ const numOutputs = range.length >> 1;
+ const numInputs = domain.length >> 1;
+ const evaluator = new PostScriptEvaluator(code);
+ const cache = Object.create(null);
+ const MAX_CACHE_SIZE = 2048 * 4;
+ let cache_available = MAX_CACHE_SIZE;
+ const tmpBuf = new Float32Array(numInputs);
+ return function constructPostScriptFn(src, srcOffset, dest, destOffset) {
+ let i, value;
+ let key = "";
+ const input = tmpBuf;
- for (i = 0; i < numInputs; i++) {
- value = src[srcOffset + i];
- input[i] = value;
- key += value + "_";
- }
+ for (i = 0; i < numInputs; i++) {
+ value = src[srcOffset + i];
+ input[i] = value;
+ key += value + "_";
+ }
- var cachedValue = cache[key];
+ const cachedValue = cache[key];
- if (cachedValue !== undefined) {
- dest.set(cachedValue, destOffset);
- return;
- }
+ if (cachedValue !== undefined) {
+ dest.set(cachedValue, destOffset);
+ return;
+ }
- var output = new Float32Array(numOutputs);
- var stack = evaluator.execute(input);
- var stackIndex = stack.length - numOutputs;
+ const output = new Float32Array(numOutputs);
+ const stack = evaluator.execute(input);
+ const stackIndex = stack.length - numOutputs;
- for (i = 0; i < numOutputs; i++) {
- value = stack[stackIndex + i];
- var bound = range[i * 2];
+ for (i = 0; i < numOutputs; i++) {
+ value = stack[stackIndex + i];
+ let bound = range[i * 2];
- if (value < bound) {
- value = bound;
- } else {
- bound = range[i * 2 + 1];
+ if (value < bound) {
+ value = bound;
+ } else {
+ bound = range[i * 2 + 1];
- if (value > bound) {
- value = bound;
- }
+ if (value > bound) {
+ value = bound;
}
-
- output[i] = value;
}
- if (cache_available > 0) {
- cache_available--;
- cache[key] = output;
- }
+ output[i] = value;
+ }
- dest.set(output, destOffset);
- };
- }
+ if (cache_available > 0) {
+ cache_available--;
+ cache[key] = output;
+ }
- };
-}();
+ dest.set(output, destOffset);
+ };
+ }
+
+}
function isPDFFunction(v) {
- var fnDict;
+ let fnDict;
if (typeof v !== "object") {
return false;
@@ -41893,469 +45768,477 @@ function isPDFFunction(v) {
return fnDict.has("FunctionType");
}
-var PostScriptStack = function PostScriptStackClosure() {
- var MAX_STACK_SIZE = 100;
+class PostScriptStack {
+ static get MAX_STACK_SIZE() {
+ return (0, _util.shadow)(this, "MAX_STACK_SIZE", 100);
+ }
- function PostScriptStack(initialStack) {
+ constructor(initialStack) {
this.stack = !initialStack ? [] : Array.prototype.slice.call(initialStack, 0);
}
- PostScriptStack.prototype = {
- push: function PostScriptStack_push(value) {
- if (this.stack.length >= MAX_STACK_SIZE) {
- throw new Error("PostScript function stack overflow.");
- }
+ push(value) {
+ if (this.stack.length >= PostScriptStack.MAX_STACK_SIZE) {
+ throw new Error("PostScript function stack overflow.");
+ }
- this.stack.push(value);
- },
- pop: function PostScriptStack_pop() {
- if (this.stack.length <= 0) {
- throw new Error("PostScript function stack underflow.");
- }
+ this.stack.push(value);
+ }
- return this.stack.pop();
- },
- copy: function PostScriptStack_copy(n) {
- if (this.stack.length + n >= MAX_STACK_SIZE) {
- throw new Error("PostScript function stack overflow.");
- }
+ pop() {
+ if (this.stack.length <= 0) {
+ throw new Error("PostScript function stack underflow.");
+ }
- var stack = this.stack;
+ return this.stack.pop();
+ }
- for (var i = stack.length - n, j = n - 1; j >= 0; j--, i++) {
- stack.push(stack[i]);
- }
- },
- index: function PostScriptStack_index(n) {
- this.push(this.stack[this.stack.length - n - 1]);
- },
- roll: function PostScriptStack_roll(n, p) {
- var stack = this.stack;
- var l = stack.length - n;
- var r = stack.length - 1,
- c = l + (p - Math.floor(p / n) * n),
- i,
- j,
- t;
+ copy(n) {
+ if (this.stack.length + n >= PostScriptStack.MAX_STACK_SIZE) {
+ throw new Error("PostScript function stack overflow.");
+ }
- for (i = l, j = r; i < j; i++, j--) {
- t = stack[i];
- stack[i] = stack[j];
- stack[j] = t;
- }
+ const stack = this.stack;
- for (i = l, j = c - 1; i < j; i++, j--) {
- t = stack[i];
- stack[i] = stack[j];
- stack[j] = t;
- }
+ for (let i = stack.length - n, j = n - 1; j >= 0; j--, i++) {
+ stack.push(stack[i]);
+ }
+ }
- for (i = c, j = r; i < j; i++, j--) {
- t = stack[i];
- stack[i] = stack[j];
- stack[j] = t;
- }
+ index(n) {
+ this.push(this.stack[this.stack.length - n - 1]);
+ }
+
+ roll(n, p) {
+ const stack = this.stack;
+ const l = stack.length - n;
+ const r = stack.length - 1;
+ const c = l + (p - Math.floor(p / n) * n);
+
+ for (let i = l, j = r; i < j; i++, j--) {
+ const t = stack[i];
+ stack[i] = stack[j];
+ stack[j] = t;
+ }
+
+ for (let i = l, j = c - 1; i < j; i++, j--) {
+ const t = stack[i];
+ stack[i] = stack[j];
+ stack[j] = t;
}
- };
- return PostScriptStack;
-}();
-var PostScriptEvaluator = function PostScriptEvaluatorClosure() {
- function PostScriptEvaluator(operators) {
+ for (let i = c, j = r; i < j; i++, j--) {
+ const t = stack[i];
+ stack[i] = stack[j];
+ stack[j] = t;
+ }
+ }
+
+}
+
+class PostScriptEvaluator {
+ constructor(operators) {
this.operators = operators;
}
- PostScriptEvaluator.prototype = {
- execute: function PostScriptEvaluator_execute(initialStack) {
- var stack = new PostScriptStack(initialStack);
- var counter = 0;
- var operators = this.operators;
- var length = operators.length;
- var operator, a, b;
+ execute(initialStack) {
+ const stack = new PostScriptStack(initialStack);
+ let counter = 0;
+ const operators = this.operators;
+ const length = operators.length;
+ let operator, a, b;
- while (counter < length) {
- operator = operators[counter++];
+ while (counter < length) {
+ operator = operators[counter++];
- if (typeof operator === "number") {
- stack.push(operator);
- continue;
- }
+ if (typeof operator === "number") {
+ stack.push(operator);
+ continue;
+ }
- switch (operator) {
- case "jz":
- b = stack.pop();
- a = stack.pop();
+ switch (operator) {
+ case "jz":
+ b = stack.pop();
+ a = stack.pop();
- if (!a) {
- counter = b;
- }
+ if (!a) {
+ counter = b;
+ }
- break;
+ break;
- case "j":
- a = stack.pop();
- counter = a;
- break;
+ case "j":
+ a = stack.pop();
+ counter = a;
+ break;
- case "abs":
- a = stack.pop();
- stack.push(Math.abs(a));
- break;
+ case "abs":
+ a = stack.pop();
+ stack.push(Math.abs(a));
+ break;
- case "add":
- b = stack.pop();
- a = stack.pop();
- stack.push(a + b);
- break;
+ case "add":
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(a + b);
+ break;
- case "and":
- b = stack.pop();
- a = stack.pop();
+ case "and":
+ b = stack.pop();
+ a = stack.pop();
- if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) {
- stack.push(a && b);
- } else {
- stack.push(a & b);
- }
+ if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) {
+ stack.push(a && b);
+ } else {
+ stack.push(a & b);
+ }
- break;
+ break;
- case "atan":
- a = stack.pop();
- stack.push(Math.atan(a));
- break;
+ case "atan":
+ a = stack.pop();
+ stack.push(Math.atan(a));
+ break;
- case "bitshift":
- b = stack.pop();
- a = stack.pop();
+ case "bitshift":
+ b = stack.pop();
+ a = stack.pop();
- if (a > 0) {
- stack.push(a << b);
- } else {
- stack.push(a >> b);
- }
+ if (a > 0) {
+ stack.push(a << b);
+ } else {
+ stack.push(a >> b);
+ }
- break;
+ break;
- case "ceiling":
- a = stack.pop();
- stack.push(Math.ceil(a));
- break;
+ case "ceiling":
+ a = stack.pop();
+ stack.push(Math.ceil(a));
+ break;
- case "copy":
- a = stack.pop();
- stack.copy(a);
- break;
+ case "copy":
+ a = stack.pop();
+ stack.copy(a);
+ break;
- case "cos":
- a = stack.pop();
- stack.push(Math.cos(a));
- break;
+ case "cos":
+ a = stack.pop();
+ stack.push(Math.cos(a));
+ break;
- case "cvi":
- a = stack.pop() | 0;
- stack.push(a);
- break;
+ case "cvi":
+ a = stack.pop() | 0;
+ stack.push(a);
+ break;
- case "cvr":
- break;
+ case "cvr":
+ break;
- case "div":
- b = stack.pop();
- a = stack.pop();
- stack.push(a / b);
- break;
+ case "div":
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(a / b);
+ break;
- case "dup":
- stack.copy(1);
- break;
+ case "dup":
+ stack.copy(1);
+ break;
- case "eq":
- b = stack.pop();
- a = stack.pop();
- stack.push(a === b);
- break;
+ case "eq":
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(a === b);
+ break;
- case "exch":
- stack.roll(2, 1);
- break;
+ case "exch":
+ stack.roll(2, 1);
+ break;
- case "exp":
- b = stack.pop();
- a = stack.pop();
- stack.push(a ** b);
- break;
+ case "exp":
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(a ** b);
+ break;
- case "false":
- stack.push(false);
- break;
+ case "false":
+ stack.push(false);
+ break;
- case "floor":
- a = stack.pop();
- stack.push(Math.floor(a));
- break;
+ case "floor":
+ a = stack.pop();
+ stack.push(Math.floor(a));
+ break;
- case "ge":
- b = stack.pop();
- a = stack.pop();
- stack.push(a >= b);
- break;
+ case "ge":
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(a >= b);
+ break;
- case "gt":
- b = stack.pop();
- a = stack.pop();
- stack.push(a > b);
- break;
+ case "gt":
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(a > b);
+ break;
- case "idiv":
- b = stack.pop();
- a = stack.pop();
- stack.push(a / b | 0);
- break;
+ case "idiv":
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(a / b | 0);
+ break;
- case "index":
- a = stack.pop();
- stack.index(a);
- break;
+ case "index":
+ a = stack.pop();
+ stack.index(a);
+ break;
- case "le":
- b = stack.pop();
- a = stack.pop();
- stack.push(a <= b);
- break;
+ case "le":
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(a <= b);
+ break;
- case "ln":
- a = stack.pop();
- stack.push(Math.log(a));
- break;
+ case "ln":
+ a = stack.pop();
+ stack.push(Math.log(a));
+ break;
- case "log":
- a = stack.pop();
- stack.push(Math.log(a) / Math.LN10);
- break;
+ case "log":
+ a = stack.pop();
+ stack.push(Math.log(a) / Math.LN10);
+ break;
- case "lt":
- b = stack.pop();
- a = stack.pop();
- stack.push(a < b);
- break;
+ case "lt":
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(a < b);
+ break;
- case "mod":
- b = stack.pop();
- a = stack.pop();
- stack.push(a % b);
- break;
+ case "mod":
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(a % b);
+ break;
- case "mul":
- b = stack.pop();
- a = stack.pop();
- stack.push(a * b);
- break;
+ case "mul":
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(a * b);
+ break;
- case "ne":
- b = stack.pop();
- a = stack.pop();
- stack.push(a !== b);
- break;
+ case "ne":
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(a !== b);
+ break;
- case "neg":
- a = stack.pop();
- stack.push(-a);
- break;
+ case "neg":
+ a = stack.pop();
+ stack.push(-a);
+ break;
- case "not":
- a = stack.pop();
+ case "not":
+ a = stack.pop();
- if ((0, _util.isBool)(a)) {
- stack.push(!a);
- } else {
- stack.push(~a);
- }
+ if ((0, _util.isBool)(a)) {
+ stack.push(!a);
+ } else {
+ stack.push(~a);
+ }
- break;
+ break;
- case "or":
- b = stack.pop();
- a = stack.pop();
+ case "or":
+ b = stack.pop();
+ a = stack.pop();
- if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) {
- stack.push(a || b);
- } else {
- stack.push(a | b);
- }
+ if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) {
+ stack.push(a || b);
+ } else {
+ stack.push(a | b);
+ }
- break;
+ break;
- case "pop":
- stack.pop();
- break;
+ case "pop":
+ stack.pop();
+ break;
- case "roll":
- b = stack.pop();
- a = stack.pop();
- stack.roll(a, b);
- break;
+ case "roll":
+ b = stack.pop();
+ a = stack.pop();
+ stack.roll(a, b);
+ break;
- case "round":
- a = stack.pop();
- stack.push(Math.round(a));
- break;
+ case "round":
+ a = stack.pop();
+ stack.push(Math.round(a));
+ break;
- case "sin":
- a = stack.pop();
- stack.push(Math.sin(a));
- break;
+ case "sin":
+ a = stack.pop();
+ stack.push(Math.sin(a));
+ break;
- case "sqrt":
- a = stack.pop();
- stack.push(Math.sqrt(a));
- break;
+ case "sqrt":
+ a = stack.pop();
+ stack.push(Math.sqrt(a));
+ break;
- case "sub":
- b = stack.pop();
- a = stack.pop();
- stack.push(a - b);
- break;
+ case "sub":
+ b = stack.pop();
+ a = stack.pop();
+ stack.push(a - b);
+ break;
- case "true":
- stack.push(true);
- break;
+ case "true":
+ stack.push(true);
+ break;
- case "truncate":
- a = stack.pop();
- a = a < 0 ? Math.ceil(a) : Math.floor(a);
- stack.push(a);
- break;
+ case "truncate":
+ a = stack.pop();
+ a = a < 0 ? Math.ceil(a) : Math.floor(a);
+ stack.push(a);
+ break;
- case "xor":
- b = stack.pop();
- a = stack.pop();
+ case "xor":
+ b = stack.pop();
+ a = stack.pop();
- if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) {
- stack.push(a !== b);
- } else {
- stack.push(a ^ b);
- }
+ if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) {
+ stack.push(a !== b);
+ } else {
+ stack.push(a ^ b);
+ }
- break;
+ break;
- default:
- throw new _util.FormatError(`Unknown operator ${operator}`);
- }
+ default:
+ throw new _util.FormatError(`Unknown operator ${operator}`);
}
-
- return stack.stack;
}
- };
- return PostScriptEvaluator;
-}();
+
+ return stack.stack;
+ }
+
+}
exports.PostScriptEvaluator = PostScriptEvaluator;
-var PostScriptCompiler = function PostScriptCompilerClosure() {
- function AstNode(type) {
- this.type = type;
- }
+const PostScriptCompiler = function PostScriptCompilerClosure() {
+ class AstNode {
+ constructor(type) {
+ this.type = type;
+ }
- AstNode.prototype.visit = function (visitor) {
- (0, _util.unreachable)("abstract method");
- };
+ visit(visitor) {
+ (0, _util.unreachable)("abstract method");
+ }
- function AstArgument(index, min, max) {
- AstNode.call(this, "args");
- this.index = index;
- this.min = min;
- this.max = max;
}
- AstArgument.prototype = Object.create(AstNode.prototype);
+ class AstArgument extends AstNode {
+ constructor(index, min, max) {
+ super("args");
+ this.index = index;
+ this.min = min;
+ this.max = max;
+ }
- AstArgument.prototype.visit = function (visitor) {
- visitor.visitArgument(this);
- };
+ visit(visitor) {
+ visitor.visitArgument(this);
+ }
- function AstLiteral(number) {
- AstNode.call(this, "literal");
- this.number = number;
- this.min = number;
- this.max = number;
}
- AstLiteral.prototype = Object.create(AstNode.prototype);
+ class AstLiteral extends AstNode {
+ constructor(number) {
+ super("literal");
+ this.number = number;
+ this.min = number;
+ this.max = number;
+ }
- AstLiteral.prototype.visit = function (visitor) {
- visitor.visitLiteral(this);
- };
+ visit(visitor) {
+ visitor.visitLiteral(this);
+ }
- function AstBinaryOperation(op, arg1, arg2, min, max) {
- AstNode.call(this, "binary");
- this.op = op;
- this.arg1 = arg1;
- this.arg2 = arg2;
- this.min = min;
- this.max = max;
}
- AstBinaryOperation.prototype = Object.create(AstNode.prototype);
+ class AstBinaryOperation extends AstNode {
+ constructor(op, arg1, arg2, min, max) {
+ super("binary");
+ this.op = op;
+ this.arg1 = arg1;
+ this.arg2 = arg2;
+ this.min = min;
+ this.max = max;
+ }
- AstBinaryOperation.prototype.visit = function (visitor) {
- visitor.visitBinaryOperation(this);
- };
+ visit(visitor) {
+ visitor.visitBinaryOperation(this);
+ }
- function AstMin(arg, max) {
- AstNode.call(this, "max");
- this.arg = arg;
- this.min = arg.min;
- this.max = max;
}
- AstMin.prototype = Object.create(AstNode.prototype);
+ class AstMin extends AstNode {
+ constructor(arg, max) {
+ super("max");
+ this.arg = arg;
+ this.min = arg.min;
+ this.max = max;
+ }
- AstMin.prototype.visit = function (visitor) {
- visitor.visitMin(this);
- };
+ visit(visitor) {
+ visitor.visitMin(this);
+ }
- function AstVariable(index, min, max) {
- AstNode.call(this, "var");
- this.index = index;
- this.min = min;
- this.max = max;
}
- AstVariable.prototype = Object.create(AstNode.prototype);
+ class AstVariable extends AstNode {
+ constructor(index, min, max) {
+ super("var");
+ this.index = index;
+ this.min = min;
+ this.max = max;
+ }
- AstVariable.prototype.visit = function (visitor) {
- visitor.visitVariable(this);
- };
+ visit(visitor) {
+ visitor.visitVariable(this);
+ }
- function AstVariableDefinition(variable, arg) {
- AstNode.call(this, "definition");
- this.variable = variable;
- this.arg = arg;
}
- AstVariableDefinition.prototype = Object.create(AstNode.prototype);
+ class AstVariableDefinition extends AstNode {
+ constructor(variable, arg) {
+ super("definition");
+ this.variable = variable;
+ this.arg = arg;
+ }
- AstVariableDefinition.prototype.visit = function (visitor) {
- visitor.visitVariableDefinition(this);
- };
+ visit(visitor) {
+ visitor.visitVariableDefinition(this);
+ }
- function ExpressionBuilderVisitor() {
- this.parts = [];
}
- ExpressionBuilderVisitor.prototype = {
+ class ExpressionBuilderVisitor {
+ constructor() {
+ this.parts = [];
+ }
+
visitArgument(arg) {
this.parts.push("Math.max(", arg.min, ", Math.min(", arg.max, ", src[srcOffset + ", arg.index, "]))");
- },
+ }
visitVariable(variable) {
this.parts.push("v", variable.index);
- },
+ }
visitLiteral(literal) {
this.parts.push(literal.number);
- },
+ }
visitBinaryOperation(operation) {
this.parts.push("(");
@@ -42363,7 +46246,7 @@ var PostScriptCompiler = function PostScriptCompilerClosure() {
this.parts.push(" ", operation.op, " ");
operation.arg2.visit(this);
this.parts.push(")");
- },
+ }
visitVariableDefinition(definition) {
this.parts.push("var ");
@@ -42371,19 +46254,19 @@ var PostScriptCompiler = function PostScriptCompilerClosure() {
this.parts.push(" = ");
definition.arg.visit(this);
this.parts.push(";");
- },
+ }
visitMin(max) {
this.parts.push("Math.min(");
max.arg.visit(this);
this.parts.push(", ", max.max, ")");
- },
+ }
toString() {
return this.parts.join("");
}
- };
+ }
function buildAddOperation(num1, num2) {
if (num2.type === "literal" && num2.number === 0) {
@@ -42420,8 +46303,8 @@ var PostScriptCompiler = function PostScriptCompilerClosure() {
}
}
- var min = Math.min(num1.min * num2.min, num1.min * num2.max, num1.max * num2.min, num1.max * num2.max);
- var max = Math.max(num1.min * num2.min, num1.min * num2.max, num1.max * num2.min, num1.max * num2.max);
+ const min = Math.min(num1.min * num2.min, num1.min * num2.max, num1.max * num2.min, num1.max * num2.max);
+ const max = Math.max(num1.min * num2.min, num1.min * num2.max, num1.max * num2.min, num1.max * num2.max);
return new AstBinaryOperation("*", num1, num2, min, max);
}
@@ -42451,17 +46334,15 @@ var PostScriptCompiler = function PostScriptCompilerClosure() {
return new AstMin(num1, max);
}
- function PostScriptCompiler() {}
-
- PostScriptCompiler.prototype = {
- compile: function PostScriptCompiler_compile(code, domain, range) {
- var stack = [];
- var instructions = [];
- var inputSize = domain.length >> 1,
- outputSize = range.length >> 1;
- var lastRegister = 0;
- var n, j;
- var num1, num2, ast1, ast2, tmpVar, item;
+ class PostScriptCompiler {
+ compile(code, domain, range) {
+ const stack = [];
+ const instructions = [];
+ const inputSize = domain.length >> 1,
+ outputSize = range.length >> 1;
+ let lastRegister = 0;
+ let n, j;
+ let num1, num2, ast1, ast2, tmpVar, item;
for (let i = 0; i < inputSize; i++) {
stack.push(new AstArgument(i, domain[i * 2], domain[i * 2 + 1]));
@@ -42623,18 +46504,21 @@ var PostScriptCompiler = function PostScriptCompilerClosure() {
return null;
}
- var result = [];
- instructions.forEach(function (instruction) {
- var statementBuilder = new ExpressionBuilderVisitor();
+ const result = [];
+
+ for (const instruction of instructions) {
+ const statementBuilder = new ExpressionBuilderVisitor();
instruction.visit(statementBuilder);
result.push(statementBuilder.toString());
- });
- stack.forEach(function (expr, i) {
- var statementBuilder = new ExpressionBuilderVisitor();
+ }
+
+ for (let i = 0, ii = stack.length; i < ii; i++) {
+ const expr = stack[i],
+ statementBuilder = new ExpressionBuilderVisitor();
expr.visit(statementBuilder);
- var min = range[i * 2],
- max = range[i * 2 + 1];
- var out = [statementBuilder.toString()];
+ const min = range[i * 2],
+ max = range[i * 2 + 1];
+ const out = [statementBuilder.toString()];
if (min > expr.min) {
out.unshift("Math.max(", min, ", ");
@@ -42649,32 +46533,34 @@ var PostScriptCompiler = function PostScriptCompilerClosure() {
out.unshift("dest[destOffset + ", i, "] = ");
out.push(";");
result.push(out.join(""));
- });
+ }
+
return result.join("\n");
}
- };
+
+ }
+
return PostScriptCompiler;
}();
exports.PostScriptCompiler = PostScriptCompiler;
/***/ }),
-/* 41 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 51 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
-"use strict";
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
value: true
-});
+}));
exports.PostScriptParser = exports.PostScriptLexer = void 0;
var _util = __w_pdfjs_require__(2);
var _primitives = __w_pdfjs_require__(5);
-var _core_utils = __w_pdfjs_require__(8);
+var _core_utils = __w_pdfjs_require__(9);
class PostScriptParser {
constructor(lexer) {
@@ -42765,45 +46651,43 @@ const PostScriptTokenTypes = {
IFELSE: 5
};
-const PostScriptToken = function PostScriptTokenClosure() {
- const opCache = Object.create(null);
-
- class PostScriptToken {
- constructor(type, value) {
- this.type = type;
- this.value = value;
- }
+class PostScriptToken {
+ static get opCache() {
+ return (0, _util.shadow)(this, "opCache", Object.create(null));
+ }
- static getOperator(op) {
- const opValue = opCache[op];
+ constructor(type, value) {
+ this.type = type;
+ this.value = value;
+ }
- if (opValue) {
- return opValue;
- }
+ static getOperator(op) {
+ const opValue = PostScriptToken.opCache[op];
- return opCache[op] = new PostScriptToken(PostScriptTokenTypes.OPERATOR, op);
+ if (opValue) {
+ return opValue;
}
- static get LBRACE() {
- return (0, _util.shadow)(this, "LBRACE", new PostScriptToken(PostScriptTokenTypes.LBRACE, "{"));
- }
+ return PostScriptToken.opCache[op] = new PostScriptToken(PostScriptTokenTypes.OPERATOR, op);
+ }
- static get RBRACE() {
- return (0, _util.shadow)(this, "RBRACE", new PostScriptToken(PostScriptTokenTypes.RBRACE, "}"));
- }
+ static get LBRACE() {
+ return (0, _util.shadow)(this, "LBRACE", new PostScriptToken(PostScriptTokenTypes.LBRACE, "{"));
+ }
- static get IF() {
- return (0, _util.shadow)(this, "IF", new PostScriptToken(PostScriptTokenTypes.IF, "IF"));
- }
+ static get RBRACE() {
+ return (0, _util.shadow)(this, "RBRACE", new PostScriptToken(PostScriptTokenTypes.RBRACE, "}"));
+ }
- static get IFELSE() {
- return (0, _util.shadow)(this, "IFELSE", new PostScriptToken(PostScriptTokenTypes.IFELSE, "IFELSE"));
- }
+ static get IF() {
+ return (0, _util.shadow)(this, "IF", new PostScriptToken(PostScriptTokenTypes.IF, "IF"));
+ }
+ static get IFELSE() {
+ return (0, _util.shadow)(this, "IFELSE", new PostScriptToken(PostScriptTokenTypes.IFELSE, "IFELSE"));
}
- return PostScriptToken;
-}();
+}
class PostScriptLexer {
constructor(stream) {
@@ -42913,21 +46797,346 @@ class PostScriptLexer {
exports.PostScriptLexer = PostScriptLexer;
/***/ }),
-/* 42 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 52 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
-"use strict";
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
value: true
-});
+}));
+exports.LocalTilingPatternCache = exports.LocalImageCache = exports.LocalGStateCache = exports.LocalFunctionCache = exports.LocalColorSpaceCache = exports.GlobalImageCache = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _primitives = __w_pdfjs_require__(5);
+
+class BaseLocalCache {
+ constructor(options) {
+ if (this.constructor === BaseLocalCache) {
+ (0, _util.unreachable)("Cannot initialize BaseLocalCache.");
+ }
+
+ if (!options || !options.onlyRefs) {
+ this._nameRefMap = new Map();
+ this._imageMap = new Map();
+ }
+
+ this._imageCache = new _primitives.RefSetCache();
+ }
+
+ getByName(name) {
+ const ref = this._nameRefMap.get(name);
+
+ if (ref) {
+ return this.getByRef(ref);
+ }
+
+ return this._imageMap.get(name) || null;
+ }
+
+ getByRef(ref) {
+ return this._imageCache.get(ref) || null;
+ }
+
+ set(name, ref, data) {
+ (0, _util.unreachable)("Abstract method `set` called.");
+ }
+
+}
+
+class LocalImageCache extends BaseLocalCache {
+ set(name, ref = null, data) {
+ if (typeof name !== "string") {
+ throw new Error('LocalImageCache.set - expected "name" argument.');
+ }
+
+ if (ref) {
+ if (this._imageCache.has(ref)) {
+ return;
+ }
+
+ this._nameRefMap.set(name, ref);
+
+ this._imageCache.put(ref, data);
+
+ return;
+ }
+
+ if (this._imageMap.has(name)) {
+ return;
+ }
+
+ this._imageMap.set(name, data);
+ }
+
+}
+
+exports.LocalImageCache = LocalImageCache;
+
+class LocalColorSpaceCache extends BaseLocalCache {
+ set(name = null, ref = null, data) {
+ if (typeof name !== "string" && !ref) {
+ throw new Error('LocalColorSpaceCache.set - expected "name" and/or "ref" argument.');
+ }
+
+ if (ref) {
+ if (this._imageCache.has(ref)) {
+ return;
+ }
+
+ if (name !== null) {
+ this._nameRefMap.set(name, ref);
+ }
+
+ this._imageCache.put(ref, data);
+
+ return;
+ }
+
+ if (this._imageMap.has(name)) {
+ return;
+ }
+
+ this._imageMap.set(name, data);
+ }
+
+}
+
+exports.LocalColorSpaceCache = LocalColorSpaceCache;
+
+class LocalFunctionCache extends BaseLocalCache {
+ constructor(options) {
+ super({
+ onlyRefs: true
+ });
+ }
+
+ getByName(name) {
+ (0, _util.unreachable)("Should not call `getByName` method.");
+ }
+
+ set(name = null, ref, data) {
+ if (!ref) {
+ throw new Error('LocalFunctionCache.set - expected "ref" argument.');
+ }
+
+ if (this._imageCache.has(ref)) {
+ return;
+ }
+
+ this._imageCache.put(ref, data);
+ }
+
+}
+
+exports.LocalFunctionCache = LocalFunctionCache;
+
+class LocalGStateCache extends BaseLocalCache {
+ set(name, ref = null, data) {
+ if (typeof name !== "string") {
+ throw new Error('LocalGStateCache.set - expected "name" argument.');
+ }
+
+ if (ref) {
+ if (this._imageCache.has(ref)) {
+ return;
+ }
+
+ this._nameRefMap.set(name, ref);
+
+ this._imageCache.put(ref, data);
+
+ return;
+ }
+
+ if (this._imageMap.has(name)) {
+ return;
+ }
+
+ this._imageMap.set(name, data);
+ }
+
+}
+
+exports.LocalGStateCache = LocalGStateCache;
+
+class LocalTilingPatternCache extends BaseLocalCache {
+ set(name, ref = null, data) {
+ if (typeof name !== "string") {
+ throw new Error('LocalTilingPatternCache.set - expected "name" argument.');
+ }
+
+ if (ref) {
+ if (this._imageCache.has(ref)) {
+ return;
+ }
+
+ this._nameRefMap.set(name, ref);
+
+ this._imageCache.put(ref, data);
+
+ return;
+ }
+
+ if (this._imageMap.has(name)) {
+ return;
+ }
+
+ this._imageMap.set(name, data);
+ }
+
+}
+
+exports.LocalTilingPatternCache = LocalTilingPatternCache;
+
+class GlobalImageCache {
+ static get NUM_PAGES_THRESHOLD() {
+ return (0, _util.shadow)(this, "NUM_PAGES_THRESHOLD", 2);
+ }
+
+ static get MIN_IMAGES_TO_CACHE() {
+ return (0, _util.shadow)(this, "MIN_IMAGES_TO_CACHE", 10);
+ }
+
+ static get MAX_BYTE_SIZE() {
+ return (0, _util.shadow)(this, "MAX_BYTE_SIZE", 40e6);
+ }
+
+ constructor() {
+ this._refCache = new _primitives.RefSetCache();
+ this._imageCache = new _primitives.RefSetCache();
+ }
+
+ get _byteSize() {
+ let byteSize = 0;
+
+ this._imageCache.forEach(imageData => {
+ byteSize += imageData.byteSize;
+ });
+
+ return byteSize;
+ }
+
+ get _cacheLimitReached() {
+ if (this._imageCache.size < GlobalImageCache.MIN_IMAGES_TO_CACHE) {
+ return false;
+ }
+
+ if (this._byteSize < GlobalImageCache.MAX_BYTE_SIZE) {
+ return false;
+ }
+
+ return true;
+ }
+
+ shouldCache(ref, pageIndex) {
+ const pageIndexSet = this._refCache.get(ref);
+
+ const numPages = pageIndexSet ? pageIndexSet.size + (pageIndexSet.has(pageIndex) ? 0 : 1) : 1;
+
+ if (numPages < GlobalImageCache.NUM_PAGES_THRESHOLD) {
+ return false;
+ }
+
+ if (!this._imageCache.has(ref) && this._cacheLimitReached) {
+ return false;
+ }
+
+ return true;
+ }
+
+ addPageIndex(ref, pageIndex) {
+ let pageIndexSet = this._refCache.get(ref);
+
+ if (!pageIndexSet) {
+ pageIndexSet = new Set();
+
+ this._refCache.put(ref, pageIndexSet);
+ }
+
+ pageIndexSet.add(pageIndex);
+ }
+
+ addByteSize(ref, byteSize) {
+ const imageData = this._imageCache.get(ref);
+
+ if (!imageData) {
+ return;
+ }
+
+ if (imageData.byteSize) {
+ return;
+ }
+
+ imageData.byteSize = byteSize;
+ }
+
+ getData(ref, pageIndex) {
+ const pageIndexSet = this._refCache.get(ref);
+
+ if (!pageIndexSet) {
+ return null;
+ }
+
+ if (pageIndexSet.size < GlobalImageCache.NUM_PAGES_THRESHOLD) {
+ return null;
+ }
+
+ const imageData = this._imageCache.get(ref);
+
+ if (!imageData) {
+ return null;
+ }
+
+ pageIndexSet.add(pageIndex);
+ return imageData;
+ }
+
+ setData(ref, data) {
+ if (!this._refCache.has(ref)) {
+ throw new Error('GlobalImageCache.setData - expected "addPageIndex" to have been called.');
+ }
+
+ if (this._imageCache.has(ref)) {
+ return;
+ }
+
+ if (this._cacheLimitReached) {
+ (0, _util.warn)("GlobalImageCache.setData - cache limit reached.");
+ return;
+ }
+
+ this._imageCache.put(ref, data);
+ }
+
+ clear(onlyData = false) {
+ if (!onlyData) {
+ this._refCache.clear();
+ }
+
+ this._imageCache.clear();
+ }
+
+}
+
+exports.GlobalImageCache = GlobalImageCache;
+
+/***/ }),
+/* 53 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
exports.bidi = bidi;
var _util = __w_pdfjs_require__(2);
-var baseTypes = ["BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "S", "B", "S", "WS", "B", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "B", "B", "B", "S", "WS", "ON", "ON", "ET", "ET", "ET", "ON", "ON", "ON", "ON", "ON", "ES", "CS", "ES", "CS", "CS", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "CS", "ON", "ON", "ON", "ON", "ON", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "ON", "ON", "ON", "ON", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "ON", "ON", "ON", "BN", "BN", "BN", "BN", "BN", "BN", "B", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "CS", "ON", "ET", "ET", "ET", "ET", "ON", "ON", "ON", "ON", "L", "ON", "ON", "BN", "ON", "ON", "ET", "ET", "EN", "EN", "ON", "L", "ON", "ON", "ON", "EN", "L", "ON", "ON", "ON", "ON", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "L", "L", "L", "L", "L", "L", "L", "L"];
-var arabicTypes = ["AN", "AN", "AN", "AN", "AN", "AN", "ON", "ON", "AL", "ET", "ET", "AL", "CS", "AL", "ON", "ON", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "ET", "AN", "AN", "AL", "AL", "AL", "NSM", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AN", "ON", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "NSM", "NSM", "ON", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "AL", "AL", "AL", "AL", "AL", "AL"];
+const baseTypes = ["BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "S", "B", "S", "WS", "B", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "B", "B", "B", "S", "WS", "ON", "ON", "ET", "ET", "ET", "ON", "ON", "ON", "ON", "ON", "ES", "CS", "ES", "CS", "CS", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "CS", "ON", "ON", "ON", "ON", "ON", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "ON", "ON", "ON", "ON", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "ON", "ON", "ON", "BN", "BN", "BN", "BN", "BN", "BN", "B", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "CS", "ON", "ET", "ET", "ET", "ET", "ON", "ON", "ON", "ON", "L", "ON", "ON", "BN", "ON", "ON", "ET", "ET", "EN", "EN", "ON", "L", "ON", "ON", "ON", "EN", "L", "ON", "ON", "ON", "ON", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "L", "L", "L", "L", "L", "L", "L", "L"];
+const arabicTypes = ["AN", "AN", "AN", "AN", "AN", "AN", "ON", "ON", "AL", "ET", "ET", "AL", "CS", "AL", "ON", "ON", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "ET", "AN", "AN", "AL", "AL", "AL", "NSM", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AN", "ON", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "NSM", "NSM", "ON", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "AL", "AL", "AL", "AL", "AL", "AL"];
function isOdd(i) {
return (i & 1) !== 0;
@@ -42938,7 +47147,9 @@ function isEven(i) {
}
function findUnequal(arr, start, value) {
- for (var j = start, jj = arr.length; j < jj; ++j) {
+ let j, jj;
+
+ for (j = start, jj = arr.length; j < jj; ++j) {
if (arr[j] !== value) {
return j;
}
@@ -42948,14 +47159,14 @@ function findUnequal(arr, start, value) {
}
function setValues(arr, start, end, value) {
- for (var j = start; j < end; ++j) {
+ for (let j = start; j < end; ++j) {
arr[j] = value;
}
}
function reverseValues(arr, start, end) {
- for (var i = start, j = end - 1; i < j; ++i, --j) {
- var temp = arr[i];
+ for (let i = start, j = end - 1; i < j; ++i, --j) {
+ const temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
@@ -42976,12 +47187,12 @@ function createBidiText(str, isLTR, vertical = false) {
};
}
-var chars = [];
-var types = [];
+const chars = [];
+const types = [];
function bidi(str, startLevel, vertical) {
- var isLTR = true;
- var strLength = str.length;
+ let isLTR = true;
+ const strLength = str.length;
if (strLength === 0 || vertical) {
return createBidiText(str, isLTR, vertical);
@@ -42989,13 +47200,13 @@ function bidi(str, startLevel, vertical) {
chars.length = strLength;
types.length = strLength;
- var numBidi = 0;
- var i, ii;
+ let numBidi = 0;
+ let i, ii;
for (i = 0; i < strLength; ++i) {
chars[i] = str.charAt(i);
- var charCode = str.charCodeAt(i);
- var charType = "L";
+ const charCode = str.charCodeAt(i);
+ let charType = "L";
if (charCode <= 0x00ff) {
charType = baseTypes[charCode];
@@ -43033,16 +47244,16 @@ function bidi(str, startLevel, vertical) {
}
}
- var levels = [];
+ const levels = [];
for (i = 0; i < strLength; ++i) {
levels[i] = startLevel;
}
- var e = isOdd(startLevel) ? "R" : "L";
- var sor = e;
- var eor = sor;
- var lastType = sor;
+ const e = isOdd(startLevel) ? "R" : "L";
+ const sor = e;
+ const eor = sor;
+ let lastType = sor;
for (i = 0; i < strLength; ++i) {
if (types[i] === "NSM") {
@@ -43053,7 +47264,7 @@ function bidi(str, startLevel, vertical) {
}
lastType = sor;
- var t;
+ let t;
for (i = 0; i < strLength; ++i) {
t = types[i];
@@ -43085,9 +47296,7 @@ function bidi(str, startLevel, vertical) {
for (i = 0; i < strLength; ++i) {
if (types[i] === "EN") {
- var j;
-
- for (j = i - 1; j >= 0; --j) {
+ for (let j = i - 1; j >= 0; --j) {
if (types[j] !== "ET") {
break;
}
@@ -43095,7 +47304,7 @@ function bidi(str, startLevel, vertical) {
types[j] = "EN";
}
- for (j = i + 1; j < strLength; ++j) {
+ for (let j = i + 1; j < strLength; ++j) {
if (types[j] !== "ET") {
break;
}
@@ -43127,14 +47336,14 @@ function bidi(str, startLevel, vertical) {
for (i = 0; i < strLength; ++i) {
if (types[i] === "ON") {
- var end = findUnequal(types, i + 1, "ON");
- var before = sor;
+ const end = findUnequal(types, i + 1, "ON");
+ let before = sor;
if (i > 0) {
before = types[i - 1];
}
- var after = eor;
+ let after = eor;
if (end + 1 < strLength) {
after = types[end + 1];
@@ -43178,9 +47387,9 @@ function bidi(str, startLevel, vertical) {
}
}
- var highestLevel = -1;
- var lowestOddLevel = 99;
- var level;
+ let highestLevel = -1;
+ let lowestOddLevel = 99;
+ let level;
for (i = 0, ii = levels.length; i < ii; ++i) {
level = levels[i];
@@ -43195,7 +47404,7 @@ function bidi(str, startLevel, vertical) {
}
for (level = highestLevel; level >= lowestOddLevel; --level) {
- var start = -1;
+ let start = -1;
for (i = 0, ii = levels.length; i < ii; ++i) {
if (levels[i] < level) {
@@ -43214,7 +47423,7 @@ function bidi(str, startLevel, vertical) {
}
for (i = 0, ii = chars.length; i < ii; ++i) {
- var ch = chars[i];
+ const ch = chars[i];
if (ch === "<" || ch === ">") {
chars[i] = "";
@@ -43225,20 +47434,19 @@ function bidi(str, startLevel, vertical) {
}
/***/ }),
-/* 43 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 54 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
-"use strict";
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
value: true
-});
+}));
exports.getMetrics = void 0;
-var _core_utils = __w_pdfjs_require__(8);
+var _core_utils = __w_pdfjs_require__(9);
-var getMetrics = (0, _core_utils.getLookupTableFactory)(function (t) {
+const getMetrics = (0, _core_utils.getLookupTableFactory)(function (t) {
t.Courier = 600;
t["Courier-Bold"] = 600;
t["Courier-BoldOblique"] = 600;
@@ -46179,15 +50387,307 @@ var getMetrics = (0, _core_utils.getLookupTableFactory)(function (t) {
exports.getMetrics = getMetrics;
/***/ }),
-/* 44 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 55 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
-"use strict";
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
value: true
+}));
+exports.getXfaFontName = getXfaFontName;
+exports.getXfaFontWidths = getXfaFontWidths;
+
+var _calibri_factors = __w_pdfjs_require__(56);
+
+var _helvetica_factors = __w_pdfjs_require__(57);
+
+var _liberationsans_widths = __w_pdfjs_require__(58);
+
+var _myriadpro_factors = __w_pdfjs_require__(59);
+
+var _segoeui_factors = __w_pdfjs_require__(60);
+
+var _core_utils = __w_pdfjs_require__(9);
+
+var _fonts_utils = __w_pdfjs_require__(38);
+
+const getXFAFontMap = (0, _core_utils.getLookupTableFactory)(function (t) {
+ t["MyriadPro-Regular"] = t["PdfJS-Fallback-Regular"] = {
+ name: "LiberationSans-Regular",
+ factors: _myriadpro_factors.MyriadProRegularFactors,
+ baseWidths: _liberationsans_widths.LiberationSansRegularWidths,
+ lineHeight: _myriadpro_factors.MyriadProRegularLineHeight
+ };
+ t["MyriadPro-Bold"] = t["PdfJS-Fallback-Bold"] = {
+ name: "LiberationSans-Bold",
+ factors: _myriadpro_factors.MyriadProBoldFactors,
+ baseWidths: _liberationsans_widths.LiberationSansBoldWidths,
+ lineHeight: _myriadpro_factors.MyriadProBoldLineHeight
+ };
+ t["MyriadPro-It"] = t["MyriadPro-Italic"] = t["PdfJS-Fallback-Italic"] = {
+ name: "LiberationSans-Italic",
+ factors: _myriadpro_factors.MyriadProItalicFactors,
+ baseWidths: _liberationsans_widths.LiberationSansItalicWidths,
+ lineHeight: _myriadpro_factors.MyriadProItalicLineHeight
+ };
+ t["MyriadPro-BoldIt"] = t["MyriadPro-BoldItalic"] = t["PdfJS-Fallback-BoldItalic"] = {
+ name: "LiberationSans-BoldItalic",
+ factors: _myriadpro_factors.MyriadProBoldItalicFactors,
+ baseWidths: _liberationsans_widths.LiberationSansBoldItalicWidths,
+ lineHeight: _myriadpro_factors.MyriadProBoldItalicLineHeight
+ };
+ t.ArialMT = t.Arial = t["Arial-Regular"] = {
+ name: "LiberationSans-Regular",
+ baseWidths: _liberationsans_widths.LiberationSansRegularWidths
+ };
+ t["Arial-BoldMT"] = t["Arial-Bold"] = {
+ name: "LiberationSans-Bold",
+ baseWidths: _liberationsans_widths.LiberationSansBoldWidths
+ };
+ t["Arial-ItalicMT"] = t["Arial-Italic"] = {
+ name: "LiberationSans-Italic",
+ baseWidths: _liberationsans_widths.LiberationSansItalicWidths
+ };
+ t["Arial-BoldItalicMT"] = t["Arial-BoldItalic"] = {
+ name: "LiberationSans-BoldItalic",
+ baseWidths: _liberationsans_widths.LiberationSansBoldItalicWidths
+ };
+ t["Calibri-Regular"] = {
+ name: "LiberationSans-Regular",
+ factors: _calibri_factors.CalibriRegularFactors,
+ baseWidths: _liberationsans_widths.LiberationSansRegularWidths,
+ lineHeight: _calibri_factors.CalibriRegularLineHeight
+ };
+ t["Calibri-Bold"] = {
+ name: "LiberationSans-Bold",
+ factors: _calibri_factors.CalibriBoldFactors,
+ baseWidths: _liberationsans_widths.LiberationSansBoldWidths,
+ lineHeight: _calibri_factors.CalibriBoldLineHeight
+ };
+ t["Calibri-Italic"] = {
+ name: "LiberationSans-Italic",
+ factors: _calibri_factors.CalibriItalicFactors,
+ baseWidths: _liberationsans_widths.LiberationSansItalicWidths,
+ lineHeight: _calibri_factors.CalibriItalicLineHeight
+ };
+ t["Calibri-BoldItalic"] = {
+ name: "LiberationSans-BoldItalic",
+ factors: _calibri_factors.CalibriBoldItalicFactors,
+ baseWidths: _liberationsans_widths.LiberationSansBoldItalicWidths,
+ lineHeight: _calibri_factors.CalibriBoldItalicLineHeight
+ };
+ t["Segoeui-Regular"] = {
+ name: "LiberationSans-Regular",
+ factors: _segoeui_factors.SegoeuiRegularFactors,
+ baseWidths: _liberationsans_widths.LiberationSansRegularWidths,
+ lineHeight: _segoeui_factors.SegoeuiRegularLineHeight
+ };
+ t["Segoeui-Bold"] = {
+ name: "LiberationSans-Bold",
+ factors: _segoeui_factors.SegoeuiBoldFactors,
+ baseWidths: _liberationsans_widths.LiberationSansBoldWidths,
+ lineHeight: _segoeui_factors.SegoeuiBoldLineHeight
+ };
+ t["Segoeui-Italic"] = {
+ name: "LiberationSans-Italic",
+ factors: _segoeui_factors.SegoeuiItalicFactors,
+ baseWidths: _liberationsans_widths.LiberationSansItalicWidths,
+ lineHeight: _segoeui_factors.SegoeuiItalicLineHeight
+ };
+ t["Segoeui-BoldItalic"] = {
+ name: "LiberationSans-BoldItalic",
+ factors: _segoeui_factors.SegoeuiBoldItalicFactors,
+ baseWidths: _liberationsans_widths.LiberationSansBoldItalicWidths,
+ lineHeight: _segoeui_factors.SegoeuiBoldItalicLineHeight
+ };
+ t["Helvetica-Regular"] = t.Helvetica = {
+ name: "LiberationSans-Regular",
+ factors: _helvetica_factors.HelveticaRegularFactors,
+ baseWidths: _liberationsans_widths.LiberationSansRegularWidths,
+ lineHeight: _helvetica_factors.HelveticaRegularLineHeight
+ };
+ t["Helvetica-Bold"] = {
+ name: "LiberationSans-Bold",
+ factors: _helvetica_factors.HelveticaBoldFactors,
+ baseWidths: _liberationsans_widths.LiberationSansBoldWidths,
+ lineHeight: _helvetica_factors.HelveticaBoldLineHeight
+ };
+ t["Helvetica-Italic"] = {
+ name: "LiberationSans-Italic",
+ factors: _helvetica_factors.HelveticaItalicFactors,
+ baseWidths: _liberationsans_widths.LiberationSansItalicWidths,
+ lineHeight: _helvetica_factors.HelveticaItalicLineHeight
+ };
+ t["Helvetica-BoldItalic"] = {
+ name: "LiberationSans-BoldItalic",
+ factors: _helvetica_factors.HelveticaBoldItalicFactors,
+ baseWidths: _liberationsans_widths.LiberationSansBoldItalicWidths,
+ lineHeight: _helvetica_factors.HelveticaBoldItalicLineHeight
+ };
});
+
+function getXfaFontName(name) {
+ const fontName = (0, _fonts_utils.normalizeFontName)(name);
+ const fontMap = getXFAFontMap();
+ return fontMap[fontName];
+}
+
+function getXfaFontWidths(name) {
+ const info = getXfaFontName(name);
+
+ if (!info) {
+ return null;
+ }
+
+ const {
+ baseWidths,
+ factors
+ } = info;
+
+ if (!factors) {
+ return baseWidths;
+ }
+
+ return baseWidths.map((w, i) => w * factors[i]);
+}
+
+/***/ }),
+/* 56 */
+/***/ ((__unused_webpack_module, exports) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.CalibriRegularLineHeight = exports.CalibriRegularFactors = exports.CalibriItalicLineHeight = exports.CalibriItalicFactors = exports.CalibriBoldLineHeight = exports.CalibriBoldItalicLineHeight = exports.CalibriBoldItalicFactors = exports.CalibriBoldFactors = void 0;
+const CalibriBoldFactors = [1.3877, 1, 0.83908, 0.77539, 0.77539, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.7762, 0.7762, 0.73293, 0.73293, 0.73293, 0.73293, 0.73293, 0.73293, 0.82577, 0.87289, 0.87289, 0.88506, 0.80367, 0.73133, 0.73133, 0.73133, 0.73133, 0.73133, 0.73133, 0.73133, 0.73133, 0.73133, 0.88656, 0.73133, 0.73133, 0.57184, 0.87356, 0.6965, 0.88506, 0.91133, 0.7514, 0.81921, 0.68156, 0.81921, 0.81921, 1, 0.81921, 0.87356, 1, 0.99862, 0.99862, 1, 0.91075, 0.87356, 0.95958, 0.76229, 0.95958, 0.95958, 0.95958, 0.95958, 0.95958, 0.95958, 0.95958, 0.95958, 0.95958, 0.95958, 0.56289, 0.95958, 0.59526, 0.59526, 0.75727, 0.75727, 1, 0.69225, 0.69225, 0.89019, 0.70424, 1, 0.91926, 0.70823, 1.04924, 1.04924, 0.9121, 0.9121, 0.9121, 1, 0.9121, 0.9121, 0.86943, 0.87402, 0.86943, 0.86943, 0.86943, 0.86943, 0.86943, 0.86943, 0.86943, 0.84896, 0.81235, 0.86943, 0.82001, 0.87508, 0.87508, 0.86943, 0.79795, 0.9762, 0.87356, 0.99819, 0.88198, 0.77958, 0.77958, 0.77958, 1, 0.79795, 0.70864, 0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, 1, 1, 0.70572, 0.8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.70864, 0.70864, 0.70864, 0.70864, 1, 0.78275, 0.81055, 0.81055, 0.81055, 0.81055, 1, 0.86943, 0.79795, 0.90399, 0.90399, 0.90399, 0.90399, 0.90399, 0.90399, 0.90399, 0.90399, 0.90399, 0.77892, 0.77892, 0.56029, 0.90399, 0.90399, 0.88653, 0.96017, 0.96017, 0.96017, 0.96017, 0.96017, 0.82577, 0.7648, 0.77892, 0.77892, 0.77892, 0.77892, 0.77892, 0.78257, 0.78257, 0.78257, 0.78257, 0.78257, 0.88762, 0.88762, 0.88762, 0.88762, 0.90323, 1, 0.88762, 0.8715, 0.8715, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.88762, 0.96108, 0.96108, 0.88762, 0.97566, 0.80352, 0.88762, 0.90747, 0.88762, 0.88762, 1.31006, 1.81055, 0.90527, 0.90527, 1.81055, 1.53711, 0.94434, 0.85284, 0.85284, 1.2798, 0.92138, 0.88762, 0.8785, 1.54657, 1.69808, 0.8936, 1, 0.88331, 0.88331, 0.97507, 0.97507, 1.15543, 1, 1.7801, 1.42259, 0.75241, 0.75241, 1.20528, 1, 1, 0.75241, 0.75241, 0.75241, 0.75241, 0.91056, 0.89552, 0.78287, 0.91027, 1.20528, 1, 1, 0.82845, 0.92794, 1, 1, 1.13254, 0.89552, 1, 0.8785, 0.89552, 0.89552, 0.83016, 0.93125, 0.85592, 0.87842, 1, 1.24487, 1, 1.06303, 0.90747, 1, 1, 0.91133, 0.70674, 0.88401, 0.90518, 0.90518, 0.90518, 0.90518, 0.90518, 0.90518, 0.90518, 0.90518, 0.91133, 1, 0.71143, 0.90518, 0.90527, 0.89552, 0.8785, 0.90518, 0.96399, 1.01407, 0.85284, 0.85356, 1.23108, 0.89049, 0.89049, 0.8785, 0.97801, 0.97171, 0.97801, 0.95015, 1, 1, 1, 0.91133, 0.88525, 1, 0.56892, 0.91133, 1, 0.83406, 0.77618, 0.84021, 0.77618, 0.77618, 1, 0.77618, 0.90807, 0.90176, 1, 0.85284, 0.90747, 0.96839, 0.96839, 1.03372, 1.03372, 0.8785, 0.89608, 0.8785, 1, 1.44947, 1.45894, 1, 0.88401, 0.88401, 0.88401, 0.88401, 0.88401, 0.88401, 0.90167, 0.88401, 1.17534, 1.37077, 0.8941, 0.8941, 0.9716, 1, 1, 1, 0.88401, 1.02988, 1.02988, 1.02988, 1.02988, 0.88401, 0.91916, 0.91916, 0.86304, 0.86077, 1, 0.86304, 0.88401, 0.88401, 0.87445, 0.79468, 1, 0.88175, 0.85284, 0.90747, 1, 0.91133, 0.85284, 0.9297, 1.08004, 0.94903, 1, 0.91488, 0.70645, 1, 1, 0.85284, 1, 0.92099, 0.85284, 1, 1, 0.8785, 0.8785, 0.87802, 0.8785, 1, 0.91133, 1, 0.90747, 0.8785, 0.84723, 0.89552, 0.8801, 0.8801, 0.8801, 0.8801, 0.8801, 0.89291, 0.94721, 0.8801, 0.8801, 0.8801, 0.84971, 0.84971, 0.8801, 0.8801, 0.91133, 0.83489, 0.82845, 0.78864, 0.99862, 1.12401, 1.19118, 0.69825, 0.89049, 0.89049, 0.8801, 0.8785, 1.07463, 0.93548, 0.93548, 1.08696, 0.81988, 0.96134, 1.06152, 0.84107, 0.97747, 0.75638, 0.85284, 0.90747, 0.95018, 0.97926, 0.8785, 0.75859, 0.75859, 0.92482, 0.87012, 0.87012, 0.87012, 0.92794, 0.92794, 0.92794, 0.92794, 0.98152, 0.91343, 0.91343, 0.90747, 0.91343, 1, 0.68787, 0.85284, 0.85714, 0.98387, 1, 0.7173, 0.7173, 0.7173, 0.7173, 0.7173, 1, 1, 0.89552, 0.91133, 0.81499, 1, 1, 0.79586, 0.78216, 0.91133, 1.54657, 1, 1, 0.91133, 0.77192, 1, 1.04106, 0.87965, 1.06452, 0.75841, 1, 1.00813, 0.8785, 0.91133, 0.88525, 0.84133, 1.33431, 1, 0.95161, 0.72021, 1, 1, 1, 1, 0.91133, 0.8785, 0.8785, 0.8785, 0.8785, 0.8785, 0.8785, 0.8785, 0.8785, 0.89552, 0.90363, 1, 1, 1.01466, 1.0088, 1, 0.75806, 0.81055, 1.04106, 1, 0.82845, 0.73133, 0.90264, 0.90518, 0.90548, 1, 1, 1.4956, 0.93835, 1, 1, 2.2807, 1, 1, 1, 0.90727, 0.90727, 0.8785, 1, 0.94211, 0.94211, 0.94211, 0.94211, 0.8785, 0.8785, 0.85075, 0.95794, 0.95794, 0.95794, 0.95794, 0.95794, 0.82616, 0.86513, 0.85162, 0.85162, 0.85162, 0.85162, 0.91133, 0.85162, 0.79492, 0.79492, 0.79492, 0.79492, 0.91133, 0.79109];
+exports.CalibriBoldFactors = CalibriBoldFactors;
+const CalibriBoldLineHeight = 1.2207;
+exports.CalibriBoldLineHeight = CalibriBoldLineHeight;
+const CalibriBoldItalicFactors = [1.3877, 1, 0.83908, 0.77539, 0.77539, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.7762, 0.7762, 0.71805, 0.71805, 0.71805, 0.71805, 0.71805, 0.71805, 0.82577, 0.87289, 0.87289, 0.88506, 0.86036, 0.73133, 0.73133, 0.73133, 0.73133, 0.73133, 0.73133, 0.73133, 0.73133, 0.73133, 0.88116, 0.73133, 0.73133, 0.57118, 0.87356, 0.6965, 0.88506, 0.91133, 0.7514, 0.81921, 0.67174, 0.81921, 0.81921, 1, 0.81921, 0.87356, 1, 0.99862, 0.99862, 1, 0.91075, 0.87356, 0.95958, 0.76467, 0.95958, 0.95958, 0.95958, 0.95958, 0.95958, 0.95958, 0.95958, 0.95958, 0.95958, 0.95958, 0.56347, 0.95958, 0.59526, 0.59526, 0.75727, 0.75727, 1, 0.69225, 0.69225, 0.89019, 0.70424, 1, 0.91926, 0.70823, 1.04924, 1.04924, 0.90872, 0.90872, 0.90872, 1, 0.90872, 0.90872, 0.85938, 0.87402, 0.85938, 0.85938, 0.85938, 0.85938, 0.85938, 0.85938, 0.85938, 0.87179, 0.80346, 0.85938, 0.79179, 0.87068, 0.87068, 0.85938, 0.79795, 0.97447, 0.87891, 0.97466, 0.87068, 0.77958, 0.77958, 0.77958, 1, 0.79795, 0.69766, 0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, 1, 1, 0.70572, 0.8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.69766, 0.69766, 0.69766, 0.69766, 1, 0.7957, 0.81055, 0.81055, 0.81055, 0.81055, 1, 0.86441, 0.79795, 0.90399, 0.90399, 0.90399, 0.90399, 0.90399, 0.90399, 0.90399, 0.90399, 0.90399, 0.77892, 0.77892, 0.55853, 0.90399, 0.90399, 0.88653, 0.96068, 0.96068, 0.96068, 0.96068, 0.96068, 0.82577, 0.74889, 0.77892, 0.77892, 0.77892, 0.77892, 0.77892, 0.78257, 0.78257, 0.78257, 0.78257, 0.78257, 0.94908, 0.94908, 0.94908, 0.94908, 0.90323, 1, 0.94908, 0.85887, 0.85887, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.94908, 0.94252, 0.94252, 0.94908, 0.97566, 0.80352, 0.94908, 0.90747, 0.94908, 0.94908, 1.3107, 1.81055, 0.90616, 0.90527, 1.81055, 1.53711, 0.94434, 0.85284, 0.85284, 1.2798, 0.92138, 0.94908, 0.86411, 1.529, 1.69808, 0.87411, 1, 0.88331, 0.88331, 0.97507, 0.97507, 1.15543, 1, 1.7801, 1.42259, 0.74012, 0.74012, 1.20528, 1, 1, 0.74012, 0.74012, 0.74012, 0.74012, 0.91056, 0.89552, 0.78022, 0.91027, 1.20528, 1, 1, 0.82845, 0.92794, 1, 1, 1.13254, 0.89552, 1, 0.86411, 0.89552, 0.89552, 0.79538, 0.92726, 0.85592, 0.8728, 1, 1.24487, 1, 1.48387, 0.90747, 1, 1, 0.91133, 0.70088, 0.88401, 0.88323, 0.88323, 0.88323, 0.88323, 0.88323, 0.88323, 0.88323, 0.88323, 0.91133, 1, 0.71094, 0.88323, 0.90527, 0.89552, 0.86331, 0.88323, 0.95612, 0.95612, 0.85284, 0.85356, 1.23108, 0.8753, 0.8753, 0.8785, 0.97801, 0.97171, 0.97801, 0.95015, 1, 1, 1, 0.91133, 0.88525, 1, 0.56892, 0.91133, 1, 0.83406, 0.86411, 0.84021, 0.86411, 0.86411, 1, 0.86411, 0.90807, 0.90176, 1, 0.85284, 0.90747, 0.96839, 0.96839, 1.03372, 1.03372, 0.86331, 0.8777, 0.86331, 1, 1.44947, 1.45894, 1, 0.88401, 0.88401, 0.88401, 0.88401, 0.88401, 0.88401, 0.90167, 0.88401, 1.17534, 1.37077, 0.8941, 0.8941, 0.9716, 1, 1, 1, 0.88401, 1.02988, 1.02988, 1.02988, 1.02988, 0.88401, 0.91916, 0.91916, 0.86304, 0.84814, 1, 0.86304, 0.88401, 0.88401, 0.87445, 0.77312, 1, 0.88175, 0.85284, 0.90747, 1, 0.91133, 0.85284, 0.9297, 1.08004, 0.94903, 1, 0.9039, 0.70645, 1, 1, 0.85284, 1, 0.91822, 0.85284, 1, 1, 0.86331, 0.86331, 0.86906, 0.86331, 1, 0.91133, 1, 0.90747, 0.86331, 0.84723, 0.89552, 0.86331, 0.86331, 0.86331, 0.86331, 0.86331, 0.86549, 0.94721, 0.86331, 0.86331, 0.86331, 0.86015, 0.86015, 0.86331, 0.86331, 0.91133, 0.83489, 0.82845, 0.78864, 0.99862, 1.19129, 1.19118, 0.69825, 0.89049, 0.89049, 0.86331, 0.86411, 1.07463, 0.93548, 0.93548, 1.08696, 0.81988, 0.96134, 1.06152, 0.83326, 0.99375, 0.81344, 0.85284, 0.90747, 0.95018, 0.95452, 0.86411, 0.75859, 0.75859, 0.92482, 0.87012, 0.87012, 0.87012, 0.92794, 0.89807, 0.92794, 0.92794, 0.98152, 0.90464, 0.90464, 0.90747, 0.90464, 1, 0.68787, 0.85284, 0.87581, 0.98387, 1, 0.70852, 0.70852, 0.70852, 0.70852, 0.70852, 1, 1, 0.89552, 0.91133, 0.81499, 1, 1, 0.82046, 0.76422, 0.91133, 1.56239, 1, 1, 0.91133, 0.77192, 1, 1.04106, 0.96057, 1.06452, 0.75841, 1, 1.02189, 0.86411, 0.91133, 0.88525, 0.84133, 1.33431, 1, 0.95161, 0.72021, 1, 1, 1, 1, 0.91133, 0.86331, 0.86331, 0.86331, 0.86331, 0.86331, 0.86331, 0.86331, 0.86331, 0.89552, 0.90363, 1, 1, 1.01466, 1.0088, 1, 0.75806, 0.81055, 1.04106, 1, 0.82845, 0.73133, 0.90631, 0.88323, 0.85174, 1, 1, 1.4956, 0.92972, 1, 1, 2.2807, 1, 1, 1, 0.90727, 0.90727, 0.86331, 1, 0.92733, 0.92733, 0.92733, 0.92733, 0.86331, 0.86331, 0.84372, 0.95794, 0.95794, 0.95794, 0.95794, 0.95794, 0.82616, 0.85668, 0.84548, 0.84548, 0.84548, 0.84548, 0.91133, 0.84548, 0.79492, 0.79492, 0.79492, 0.79492, 0.91133, 0.74081];
+exports.CalibriBoldItalicFactors = CalibriBoldItalicFactors;
+const CalibriBoldItalicLineHeight = 1.2207;
+exports.CalibriBoldItalicLineHeight = CalibriBoldItalicLineHeight;
+const CalibriItalicFactors = [1.3877, 1, 0.8675, 0.76318, 0.76318, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.81552, 0.81552, 0.72346, 0.72346, 0.72346, 0.72346, 0.72346, 0.72346, 0.77818, 0.85193, 0.85193, 0.86477, 0.84134, 0.73206, 0.73206, 0.73206, 0.73206, 0.73206, 0.73206, 0.73206, 0.73206, 0.73206, 0.86698, 0.73206, 0.73206, 0.6192, 0.86275, 0.7363, 0.86477, 0.91133, 0.7522, 0.81105, 0.7286, 0.81105, 0.81105, 1, 0.81105, 0.86275, 1, 0.99862, 0.99862, 1, 0.90872, 0.86275, 0.90685, 0.77896, 0.90685, 0.90685, 0.90685, 0.90685, 0.90685, 0.90685, 0.90685, 0.90685, 0.90685, 0.90685, 0.64824, 0.90685, 0.6377, 0.6377, 0.77892, 0.77892, 1, 0.75593, 0.75593, 0.85871, 0.76032, 1, 0.98156, 0.77261, 1.02638, 1.02638, 0.89249, 0.89249, 0.89249, 1, 0.89249, 0.89249, 0.84118, 0.8667, 0.84118, 0.84118, 0.84118, 0.84118, 0.84118, 0.84118, 0.84118, 0.87291, 0.85696, 0.84118, 0.82411, 0.84557, 0.84557, 0.84118, 0.77452, 0.90782, 0.85984, 0.903, 0.85374, 0.75186, 0.75186, 0.75186, 1, 0.77452, 0.67789, 0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, 1, 1, 0.70572, 0.8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.67789, 0.67789, 0.67789, 0.67789, 1, 0.76466, 0.79776, 0.79776, 0.79776, 0.79776, 1, 0.84369, 0.77452, 0.88844, 0.88844, 0.88844, 0.88844, 0.88844, 0.88844, 0.88844, 0.88844, 0.88844, 0.7306, 0.7306, 0.56321, 0.88844, 0.88844, 0.85066, 0.94309, 0.94309, 0.94309, 0.94309, 0.94309, 0.77818, 0.75828, 0.7306, 0.7306, 0.7306, 0.7306, 0.7306, 0.76659, 0.76659, 0.76659, 0.76659, 0.76659, 0.9245, 0.9245, 0.9245, 0.9245, 0.87683, 1, 0.9245, 0.84843, 0.84843, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.9245, 0.99058, 0.99058, 0.9245, 1.02269, 0.90861, 0.9245, 0.90747, 0.9245, 0.9245, 1.28809, 1.81055, 0.90572, 0.90749, 1.81055, 1.55469, 0.94434, 1.06139, 0.85284, 1.2798, 0.88071, 0.9245, 0.9245, 1.38313, 1.77256, 0.92393, 1, 0.94152, 0.94152, 1.10369, 1.10369, 1.1437, 1, 1.91729, 1.42259, 0.83203, 0.83203, 1.18622, 1, 1, 0.83203, 0.83203, 0.83203, 0.83203, 0.92229, 0.89552, 0.78086, 0.91027, 1.18622, 1, 1, 0.96309, 0.89807, 1, 1, 1.13254, 0.89552, 1, 0.9245, 0.89552, 0.89552, 0.8875, 0.99034, 0.84737, 0.942, 1, 1.17889, 1, 1.48387, 0.90747, 1, 1, 0.91133, 0.67009, 0.82601, 0.85865, 0.85865, 0.85865, 0.85865, 0.85865, 0.85865, 0.85865, 0.85865, 0.91133, 1, 0.68994, 0.85865, 0.90527, 0.89552, 0.9245, 0.85865, 1.03667, 1.03667, 0.85284, 0.85284, 1.23108, 0.94635, 0.94635, 0.94469, 1.17223, 1.11523, 0.97801, 1.09842, 1, 1, 1, 0.91133, 0.84426, 1, 0.54873, 0.91133, 1, 0.82616, 0.9245, 0.8916, 0.9245, 0.9245, 1, 0.9245, 0.86331, 0.8739, 1, 0.85284, 0.90747, 0.92098, 0.92098, 1.0176, 1.0176, 0.9245, 0.93591, 0.9245, 1, 1.44947, 1.40909, 1, 1.03297, 0.82601, 0.82601, 0.82601, 0.82601, 0.82601, 1.05611, 0.82601, 1.19658, 1.33512, 0.8941, 0.8941, 0.97622, 1, 1, 1, 1.03297, 1.23516, 1.23516, 1.23516, 1.23516, 0.82601, 1.07692, 1.07692, 0.90918, 0.90918, 1, 0.90918, 1.03297, 1.03297, 0.94048, 0.9375, 1, 0.93407, 0.85284, 0.90747, 1, 0.91133, 0.85284, 1.09231, 1.0336, 1.11429, 1, 0.94959, 0.71353, 1, 1, 0.85284, 1, 0.98217, 0.85284, 1, 1, 0.9245, 0.9245, 0.92534, 0.9245, 1, 0.91133, 1, 0.90747, 0.9245, 0.89746, 0.89552, 0.92274, 0.92274, 0.92274, 0.92274, 0.92274, 0.86291, 0.93695, 0.92274, 0.92274, 0.92274, 0.89404, 0.89404, 0.92274, 0.92274, 0.91133, 0.79801, 0.80504, 0.76288, 0.99862, 1.16359, 1.15642, 0.69825, 0.86651, 0.86651, 0.92274, 0.9245, 1.09091, 0.91056, 0.91056, 1.07806, 0.80395, 0.90861, 1.03809, 0.83437, 1.00225, 0.82507, 0.85284, 0.90747, 0.97094, 0.97248, 0.9245, 0.83319, 0.75859, 1.1293, 1.2566, 1.2566, 1.2566, 1.12308, 1.12308, 1.12308, 1.12308, 1.15601, 1.02933, 1.02933, 0.90747, 1.02933, 1, 0.68787, 0.85284, 0.88832, 0.96334, 1, 0.77832, 0.77832, 0.77832, 0.77832, 0.77832, 1, 1, 0.89552, 0.91133, 0.774, 1, 1, 0.88178, 0.84438, 0.91133, 1.39543, 1, 1, 0.91133, 0.7589, 1, 1.20562, 1.03525, 1.23023, 0.97655, 1, 1.0297, 0.9245, 0.91133, 0.84426, 0.80972, 1.35191, 1, 0.95161, 0.70508, 1, 1, 1, 1, 0.91133, 0.9245, 0.9245, 0.9245, 0.9245, 0.9245, 0.9245, 0.9245, 0.9245, 0.89552, 0.90186, 1, 1, 1.0088, 1.0044, 1, 0.739, 0.79776, 1.20562, 1, 0.96309, 0.73206, 0.89693, 0.85865, 0.90933, 1, 1, 1.4956, 0.97858, 1, 1, 2.01462, 1, 1, 1, 1.05859, 1.05859, 0.9245, 1, 0.9849, 0.9849, 0.9849, 0.9849, 0.9245, 0.9245, 0.8916, 0.98986, 0.98986, 0.98986, 0.98986, 0.98986, 0.86621, 0.84153, 0.89453, 0.89453, 0.89453, 0.89453, 0.91133, 0.89453, 0.79004, 0.79004, 0.79004, 0.79004, 0.91133, 0.75026];
+exports.CalibriItalicFactors = CalibriItalicFactors;
+const CalibriItalicLineHeight = 1.2207;
+exports.CalibriItalicLineHeight = CalibriItalicLineHeight;
+const CalibriRegularFactors = [1.3877, 1, 0.8675, 0.76318, 0.76318, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.86686, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.81552, 0.81552, 0.73834, 0.73834, 0.73834, 0.73834, 0.73834, 0.73834, 0.77818, 0.85193, 0.85193, 0.86477, 0.84503, 0.73206, 0.73206, 0.73206, 0.73206, 0.73206, 0.73206, 0.73206, 0.73206, 0.73206, 0.86901, 0.73206, 0.73206, 0.62267, 0.86275, 0.74359, 0.86477, 0.91133, 0.7522, 0.81105, 0.75443, 0.81105, 0.81105, 1, 0.81105, 0.86275, 1, 0.99862, 0.99862, 1, 0.90872, 0.86275, 0.90685, 0.77741, 0.90685, 0.90685, 0.90685, 0.90685, 0.90685, 0.90685, 0.90685, 0.90685, 0.90685, 0.90685, 0.65649, 0.90685, 0.6377, 0.6377, 0.77892, 0.77892, 1, 0.75593, 0.75593, 0.85746, 0.76032, 1, 0.98156, 0.77261, 1.02638, 1.02638, 0.89385, 0.89385, 0.89385, 1, 0.89385, 0.89385, 0.85122, 0.8667, 0.85122, 0.85122, 0.85122, 0.85122, 0.85122, 0.85122, 0.85122, 0.88831, 0.88254, 0.85122, 0.85498, 0.85311, 0.85311, 0.85122, 0.77452, 0.95165, 0.86275, 0.89772, 0.86503, 0.75186, 0.75186, 0.75186, 1, 0.77452, 0.68887, 0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, 1, 1, 0.70572, 0.8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.68887, 0.68887, 0.68887, 0.68887, 1, 0.74171, 0.79776, 0.79776, 0.79776, 0.79776, 1, 0.85122, 0.77452, 0.88844, 0.88844, 0.88844, 0.88844, 0.88844, 0.88844, 0.88844, 0.88844, 0.88844, 0.7306, 0.7306, 0.56963, 0.88844, 0.88844, 0.85066, 0.94258, 0.94258, 0.94258, 0.94258, 0.94258, 0.77818, 0.75657, 0.7306, 0.7306, 0.7306, 0.7306, 0.7306, 0.76659, 0.76659, 0.76659, 0.76659, 0.76659, 0.86128, 0.86128, 0.86128, 0.86128, 0.87683, 0.86128, 0.8693, 0.8693, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.86128, 0.98142, 0.98142, 0.86128, 1.02269, 0.90861, 0.86128, 0.90747, 0.86128, 0.86128, 1.28809, 1.81055, 0.90527, 0.90527, 1.81055, 1.55469, 0.94434, 1.06139, 0.85284, 1.2798, 0.88071, 0.86128, 0.94469, 1.39016, 1.77256, 0.9236, 1, 0.94152, 0.94152, 1.10369, 1.10369, 1.1437, 1.91729, 1.42259, 0.8457, 0.8457, 1.18622, 0.8457, 0.8457, 0.8457, 0.8457, 0.92229, 0.89552, 0.81209, 0.91027, 1.18622, 1, 0.96309, 0.89807, 1.13254, 0.89552, 0.94469, 0.89552, 0.89552, 0.92454, 0.9921, 0.84737, 0.94035, 1, 1.17889, 1.48387, 0.90747, 1, 1, 0.91133, 0.67742, 0.82601, 0.89464, 0.89464, 0.89464, 0.89464, 0.89464, 0.89464, 0.89464, 0.89464, 0.91133, 0.69043, 0.89464, 0.90527, 0.89552, 0.94469, 0.89464, 1.02191, 1.02191, 0.85284, 0.85356, 1.23108, 0.96576, 0.96576, 0.94469, 1.17223, 1.11523, 0.97801, 1.09842, 1, 1, 1, 0.91133, 0.84426, 0.54873, 0.91133, 0.82616, 0.84636, 0.89258, 0.84636, 0.84636, 1, 0.84636, 0.86331, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.8739, 0.85284, 0.90747, 0.92098, 0.92098, 1.0176, 1.0176, 0.94469, 0.95786, 0.94469, 1, 1.44947, 1.40909, 1.03297, 0.82601, 0.82601, 0.82601, 0.82601, 0.82601, 1.05611, 0.82601, 1.19658, 1.33512, 0.8941, 0.8941, 0.97622, 1, 1, 1, 1.03297, 1.23516, 1.23516, 1.23516, 1.23516, 0.82601, 1.07692, 1.07692, 0.90918, 0.90918, 1, 0.90918, 1.03297, 1.03297, 0.92578, 0.90452, 1, 1.11842, 0.85284, 0.90747, 1, 0.91133, 0.85284, 1.09231, 1.0336, 1.11429, 1, 0.95897, 0.71353, 1, 1, 0.85284, 1, 0.95424, 0.85284, 1, 1, 0.94469, 0.94469, 0.95877, 0.94469, 1, 0.91133, 1, 0.90747, 0.94469, 0.89746, 0.89552, 0.9482, 0.9482, 0.9482, 0.9482, 0.9482, 0.90016, 0.93695, 0.9482, 0.9482, 0.9482, 0.89181, 0.89181, 0.9482, 0.9482, 0.91133, 0.79801, 0.80504, 0.76288, 0.99862, 1.08707, 1.15642, 0.69825, 0.86651, 0.86651, 0.9482, 0.94469, 1.09091, 0.91056, 0.91056, 1.07806, 0.80395, 0.90861, 1.03809, 0.84286, 1.00452, 0.80113, 0.85284, 0.90747, 0.97094, 0.99247, 0.94469, 0.83319, 0.75859, 1.1293, 1.2566, 1.2566, 1.2566, 1.12308, 1.12308, 1.12308, 1.12308, 1.15601, 1.04692, 1.04692, 0.90747, 1.04692, 1, 0.68787, 0.85284, 0.89442, 0.96334, 1, 0.78223, 0.78223, 0.78223, 0.78223, 0.78223, 1, 1, 0.89552, 0.91133, 0.774, 1, 0.86155, 0.85208, 0.91133, 1.39016, 1, 1, 0.91133, 0.7589, 1, 1.20562, 0.98022, 1.23023, 0.92188, 1, 0.9561, 0.94469, 0.91133, 0.84426, 0.80972, 1.35191, 0.95161, 0.70508, 1, 1, 1, 1, 0.91133, 0.94469, 0.94469, 0.94469, 0.94469, 0.94469, 0.94469, 0.94469, 0.94469, 0.89552, 0.90186, 1, 1, 1.0088, 1.0044, 1, 0.739, 0.79776, 1.20562, 1, 0.96309, 0.73206, 0.88844, 0.89464, 0.96766, 1, 1, 1.4956, 1.07185, 0.99413, 0.96334, 1.08065, 0.99331, 1, 1, 2.01462, 1, 1, 1, 1, 1.05859, 1.05859, 0.94469, 1, 0.99018, 0.99018, 0.99018, 0.99018, 0.94469, 0.94469, 0.90332, 0.98986, 0.98986, 0.98986, 0.98986, 0.98986, 0.86621, 0.83969, 0.90527, 0.90527, 0.90527, 0.90527, 0.91133, 0.90527, 0.79004, 0.79004, 0.79004, 0.79004, 0.91133, 0.78848];
+exports.CalibriRegularFactors = CalibriRegularFactors;
+const CalibriRegularLineHeight = 1.2207;
+exports.CalibriRegularLineHeight = CalibriRegularLineHeight;
+
+/***/ }),
+/* 57 */
+/***/ ((__unused_webpack_module, exports) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.HelveticaRegularLineHeight = exports.HelveticaRegularFactors = exports.HelveticaItalicLineHeight = exports.HelveticaItalicFactors = exports.HelveticaBoldLineHeight = exports.HelveticaBoldItalicLineHeight = exports.HelveticaBoldItalicFactors = exports.HelveticaBoldFactors = void 0;
+const HelveticaBoldFactors = [0.76116, 1, 0.99977, 1, 1, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 0.99977, 0.99977, 0.99977, 0.85148, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 0.9998, 1.00001, 1.00001, 0.99997, 0.99977, 1.00026, 0.99977, 0.99973, 1.00026, 1.00022, 0.99988, 1.00022, 1.00022, 1.00022, 1.00022, 0.99977, 0.99999, 0.99861, 0.99861, 1, 0.99977, 0.99977, 1.0006, 1.00042, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.00078, 1.0006, 0.99973, 0.99973, 0.99977, 0.99977, 0.99977, 1.00026, 1.00026, 1.00001, 1.00026, 1.00026, 1.00026, 1.00026, 0.99999, 0.99999, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 1.00022, 1, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1, 1.00013, 1.00022, 1.00036, 1.00022, 1.00022, 1.00022, 1.00001, 1.00024, 0.99977, 0.9999, 1.00022, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.6, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 0.99984, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00022, 1.00001, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 0.99973, 0.99977, 0.99977, 1.00001, 1.00016, 1.00016, 1.00016, 1.00016, 1.00016, 1.00001, 1.00069, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 1, 0.99973, 0.99982, 0.99982, 1, 0.99977, 1.00035, 0.99977, 1.00019, 0.99944, 1.00001, 1.00008, 1.00021, 0.99926, 1.00035, 1.00035, 0.99942, 1.00048, 0.99999, 0.99977, 1.00022, 1.00035, 1.00001, 0.99977, 1.00026, 0.99989, 1.00057, 1.00001, 0.99936, 1.00052, 1.00012, 0.99996, 1.00043, 1, 1.00035, 0.9994, 0.99976, 1.00035, 1.00038, 0.99971, 1.00019, 0.9994, 1.00001, 1.0006, 1.00044, 0.99973, 1.00023, 1.00047, 1, 0.99942, 0.99989, 0.99973, 1.00052, 1.00041, 1.00119, 1.00037, 0.99973, 0.99973, 1.00002, 0.99986, 1.00041, 1.00041, 0.99902, 0.9996, 1.00034, 0.99999, 1.00026, 0.99999, 1.00026, 0.99973, 1.00052, 0.99973, 1, 0.99973, 1.00041, 1.00075, 0.9994, 1.0003, 0.99999, 1, 1.00041, 0.99955, 1, 0.99915, 1.0005, 1.00026, 1.00119, 0.99955, 0.99973, 1.0006, 0.99911, 1.0006, 1.00026, 0.99972, 1.00026, 0.99902, 0.99973, 1.00035, 1, 0.99999, 1, 0.99971, 1.00047, 1.00023, 0.99973, 1.00041, 1.00041, 0.99973, 0.99977, 1, 0.99973, 1.00031, 0.99973, 0.99973, 1, 1, 1, 1, 1, 1, 1, 1.00003, 1.00003, 0.99959, 0.9999, 0.99973, 1.00026, 1.0006, 1.00077, 0.99942, 1.41144, 0.99959, 0.99959, 0.99998, 0.99998, 0.99998, 1, 1.00077, 0.99972, 0.99973, 0.99973, 0.99998, 1, 1, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 0.99973, 1.00055, 0.99999, 0.99998, 1, 0.99962, 0.99998, 1.0006, 1, 1, 1.00025, 0.99973, 1, 1.00026, 0.99973, 0.99973, 1.03374, 1.00026, 1.00024, 0.99927, 0.9995, 0.99998, 1, 1.00034, 1.06409, 1.36625, 1.41144, 0.99973, 0.99998, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 1, 0.99973, 1, 0.99973, 1.00026, 0.99973, 1.00082, 0.99962, 1.00003, 0.99915, 0.99984, 1.00026, 1.00026, 1.00026, 0.99998, 0.99999, 0.99998, 0.99998, 1, 0.99999, 1, 0.99973, 1.00002, 0.99998, 0.99973, 0.99973, 0.99998, 0.99973, 1.00026, 0.99973, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 0.99998, 1, 1.00003, 1.00031, 0.99973, 0.99973, 0.99998, 0.99998, 1.00026, 1.00026, 1.00026, 1.00042, 0.99999, 0.99998, 1, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 0.99973, 1.0006, 1.00015, 1.00027, 0.99999, 0.99999, 0.99561, 0.99999, 0.99999, 0.99977, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 0.99973, 1.00069, 0.99973, 0.99973, 1.0006, 1.0006, 0.99973, 1.03828, 1.0006, 0.99999, 1.00003, 1.00031, 1.41144, 0.99973, 1.00003, 1.0006, 0.99972, 1.0006, 1.40579, 0.99982, 0.60299, 1, 1, 1.00003, 1.00106, 0.99867, 1.00003, 1, 1, 1.00026, 1.00026, 0.9993, 1.00026, 1.00026, 0.99973, 1, 1.00031, 1.00026, 0.99973, 0.99973, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00016, 0.99998, 1.00026, 1.00026, 1.00026, 1.00032, 1.00032, 1.00026, 1.00026, 0.99973, 1.00002, 1.00002, 1.00002, 1.40483, 0.99968, 0.99936, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.99973, 0.99998, 0.99998, 0.99972, 0.99982, 1.0006, 1, 1.00023, 0.99954, 1.00049, 1.00003, 1.06409, 1.20985, 0.99945, 1.00026, 1.00026, 1.00026, 0.99974, 1, 1, 1, 1.0006, 1.0006, 1.0006, 1.0006, 1.00087, 0.99959, 0.99959, 1.00031, 0.99959, 0.99959, 1.00025, 1.00003, 1.00056, 0.99998, 1.41144, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99999, 0.99973, 0.99973, 1.00002, 0.99998, 1.40579, 0.99988, 1, 0.99973, 1.0006, 1, 0.99953, 0.99973, 1.39713, 1.00054, 0.99998, 0.99935, 0.99998, 0.8121, 0.99998, 1.00087, 1.00026, 0.99973, 1.00002, 1.00002, 0.99998, 1, 0.99998, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.99973, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 0.99973, 0.99955, 1.0006, 0.99998, 1, 1, 1, 1, 1.00026, 0.99998, 0.99998, 1, 1.00001, 0.99561, 0.99973, 1.00041, 1, 1, 0.99998, 1, 0.99991, 1, 1.66475, 1.0006, 1, 1, 1, 1, 1.00026, 1.41144, 0.99995, 0.99995, 0.99995, 0.99995, 1.00026, 1.00026, 0.99973, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 0.99973, 0.9993, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1, 1, 1, 1, 0.99973, 0.99902];
+exports.HelveticaBoldFactors = HelveticaBoldFactors;
+const HelveticaBoldLineHeight = 1.2;
+exports.HelveticaBoldLineHeight = HelveticaBoldLineHeight;
+const HelveticaBoldItalicFactors = [0.76116, 1, 0.99977, 1, 1, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 0.99977, 0.99977, 0.99977, 0.91155, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 0.9998, 1.00001, 1.00001, 1, 0.99977, 1.00026, 0.99977, 0.99973, 1.00026, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 0.99977, 0.99999, 0.99861, 0.99861, 1, 0.99977, 0.99977, 1.0006, 0.99971, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 0.99969, 1.0006, 0.99973, 0.99973, 0.99977, 0.99977, 0.99977, 1.00026, 1.00026, 1.00001, 1.00026, 1.00026, 1.00026, 1.00026, 0.99999, 0.99999, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 1.00022, 1, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1, 0.9998, 1.00022, 0.99972, 1.00022, 1.00022, 1.00022, 1.00001, 0.99968, 1.00032, 1.00047, 1.00022, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.6, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 0.99944, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00022, 1.00001, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 0.99981, 0.99977, 0.99977, 1.00001, 1.00016, 1.00016, 1.00016, 1.00016, 1.00016, 1.00001, 0.99966, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 1, 0.99973, 0.99982, 0.99982, 1, 0.99977, 0.99999, 0.99977, 1.00038, 0.99977, 1.00001, 1.00001, 0.99973, 1.00066, 0.99967, 0.99967, 1.00041, 0.99998, 0.99999, 0.99977, 1.00022, 0.99967, 1.00001, 0.99977, 1.00026, 0.99964, 1.00031, 1.00001, 0.99999, 0.99999, 1, 1.00023, 1, 1, 0.99999, 1.00035, 1.00001, 0.99999, 0.99966, 1.00029, 1.00038, 1.00035, 1.00001, 1.0006, 1.0006, 0.99973, 0.99978, 1.00001, 1.00057, 0.99989, 0.99964, 0.99973, 0.99977, 0.99999, 1.00058, 0.99973, 0.99973, 0.99973, 0.99955, 0.9995, 1.00026, 1.00026, 1.00032, 0.99989, 1.00034, 0.99999, 1.00026, 1.00026, 1.00026, 0.99973, 0.45998, 0.99973, 1.00026, 0.99973, 1.00001, 0.99999, 0.99982, 0.99994, 0.99996, 1, 1.00042, 1.00044, 1.00029, 1.00023, 1.00044, 1.00026, 0.99949, 1.00002, 0.99973, 1.0006, 1.0006, 1.0006, 0.99975, 1.00026, 1.00026, 1.00032, 0.99973, 0.99967, 1, 1.00026, 1, 0.99971, 0.99978, 1, 0.99973, 0.99981, 0.99981, 0.99973, 0.99977, 1, 0.99973, 1.00031, 0.99973, 0.99973, 1.00049, 1, 1.00098, 1, 1, 1, 1, 1.00003, 1.00003, 0.99959, 0.9999, 0.99973, 1.00026, 1.0006, 1.00077, 1.00064, 1.41144, 0.99959, 0.99959, 0.99998, 0.99998, 0.99998, 1, 1.00077, 0.99972, 0.99973, 0.99973, 0.99998, 1, 1, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 0.99973, 1.00063, 0.99999, 0.99998, 1, 0.99962, 0.99998, 1.0006, 1, 1, 1.00025, 0.99973, 1, 1.00026, 0.99973, 0.99973, 1.0044, 1.00026, 1.00024, 0.99942, 0.9995, 0.99998, 1, 0.99998, 1.06409, 1.36625, 1.41144, 0.99973, 0.99998, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 1, 0.99973, 1, 0.99973, 1.00026, 0.99973, 1.00101, 1.00101, 1.00003, 0.99915, 0.99984, 1.00026, 1.00026, 1.00026, 0.99998, 0.99999, 0.99998, 0.99998, 1, 0.99999, 1, 0.99973, 1.00002, 0.99998, 0.99973, 0.99973, 0.99998, 0.99973, 1.00026, 0.99973, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 0.99998, 1, 1.00003, 1.00031, 0.99973, 0.99973, 0.99998, 0.99998, 1.00026, 1.00026, 1.00026, 1.00042, 0.99999, 0.99998, 1, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 0.99973, 1.0006, 1.00015, 1.00027, 0.99999, 0.99999, 0.99561, 0.99999, 0.99999, 0.99977, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 0.99973, 1.00014, 0.99973, 0.99973, 1.0006, 1.0006, 0.99973, 1.01011, 1.0006, 0.99999, 1.00003, 1.00031, 1.41144, 0.99973, 1.00003, 1.0006, 0.99972, 1.0006, 1.40579, 0.99982, 0.60299, 1, 1, 1.00003, 1.00106, 1.01322, 1.00003, 1, 1, 1.00026, 1.00026, 0.9993, 1.00026, 1.00026, 0.99973, 1, 1.00031, 1.00026, 0.99973, 0.99973, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00016, 0.99998, 1.00026, 1.00026, 1.00026, 0.99943, 0.99943, 1.00026, 1.00026, 0.99973, 1.00002, 1.00002, 1.00002, 1.40483, 0.99968, 0.99936, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.99973, 0.99998, 0.99998, 0.99972, 0.99982, 1.0006, 1, 1, 1.00055, 1.00012, 1.00003, 1.06409, 1.20985, 1.00007, 1.00026, 1.00026, 1.00026, 0.99974, 1, 1, 1, 1.0006, 1.0006, 1.0006, 1.0006, 1.00087, 0.99959, 0.99959, 1.00031, 0.99959, 0.99959, 1.00025, 1.00003, 0.99923, 0.99998, 1.41144, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99999, 0.99973, 0.99973, 1.00002, 0.99998, 1.40579, 1.00064, 1, 0.99973, 1.0006, 1, 0.99953, 0.99973, 1.39713, 1.00054, 0.99998, 1.00076, 0.99998, 0.8121, 0.99998, 1.00069, 1.00026, 0.99973, 1.00002, 1.00002, 0.99998, 1, 0.99998, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.99973, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 0.99973, 0.99955, 1.0006, 0.99998, 1, 1, 1, 1, 1.00026, 0.99998, 0.99998, 1, 1.00001, 0.99967, 0.99973, 0.98685, 1, 1, 0.99998, 1, 0.99991, 1, 1.66475, 1.0006, 1, 1, 1, 1, 1.00026, 1.41144, 0.99948, 0.99948, 0.99948, 0.99948, 1.00026, 1.00026, 0.99973, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 0.99973, 1.00065, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1, 1, 1, 1, 0.99973, 1.00061];
+exports.HelveticaBoldItalicFactors = HelveticaBoldItalicFactors;
+const HelveticaBoldItalicLineHeight = 1.35;
+exports.HelveticaBoldItalicLineHeight = HelveticaBoldItalicLineHeight;
+const HelveticaItalicFactors = [0.76116, 1, 1.00001, 1, 1, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 0.99977, 0.99977, 0.99977, 0.91221, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 0.9998, 1.00001, 1.00001, 1.00054, 0.99977, 0.99977, 0.99977, 0.99973, 1.00026, 1.00022, 0.99945, 1.00022, 1.00022, 1.00022, 1.00022, 0.99977, 0.99999, 0.99861, 0.99861, 1, 0.99977, 0.99977, 1.0006, 0.99946, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.00084, 1.0006, 1, 1, 1.00001, 1.00001, 1.00001, 0.99973, 0.99973, 1.00001, 0.99973, 0.99973, 0.99973, 0.99973, 0.99999, 0.99999, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 1.00022, 1, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1, 1.00013, 1.00022, 1.00007, 1.00022, 1.00022, 1.00022, 1.00001, 1.0001, 1.00054, 1.00052, 1.00022, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.6, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00065, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00022, 1.00001, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 0.99973, 0.99977, 0.99977, 1.00001, 1.00016, 1.00016, 1.00016, 1.00016, 1.00016, 1.00001, 0.99933, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 1, 0.99973, 0.99982, 0.99982, 1, 1.00001, 1.00019, 1.00001, 1.0001, 0.99986, 1.00001, 1.00001, 1.00001, 1.00038, 0.99954, 0.99954, 0.9994, 1.00066, 0.99999, 0.99977, 1.00022, 1.00054, 1.00001, 0.99977, 1.00026, 0.99975, 1.0001, 1.00001, 0.99993, 0.9995, 0.99955, 1.00016, 0.99978, 0.99974, 1.00019, 1.00022, 0.99955, 1.00053, 0.99962, 1.00027, 1.0001, 1.00068, 1.00001, 1.0006, 1.0006, 1, 1.00008, 0.99957, 0.99972, 0.9994, 0.99975, 0.99973, 1.00089, 1.00005, 0.99967, 1.00048, 0.99973, 0.99973, 1.00002, 1.00034, 0.99973, 0.99973, 0.99964, 1.00006, 1.00066, 0.99947, 0.99973, 0.98894, 0.99973, 1, 0.44898, 1, 0.99946, 1, 1.00039, 1.00082, 0.99991, 0.99991, 0.99985, 1.00022, 1.00023, 1.00061, 1.00006, 0.99966, 0.99895, 0.99973, 1.00019, 1.0008, 1, 0.99924, 0.99924, 0.99924, 0.99983, 1.00044, 0.99973, 0.99964, 1, 1.00051, 1, 0.99973, 1, 1.00423, 0.99925, 0.99999, 0.99973, 0.99945, 0.99945, 0.99973, 1.00001, 1, 0.99973, 1.00031, 0.99973, 0.99973, 1, 1, 1.00049, 1.00245, 1, 1, 1, 0.99949, 1.00003, 0.99959, 0.99987, 0.99973, 0.99973, 1.0006, 1.0009, 0.99949, 1.41144, 1.00005, 1.00005, 1.0006, 1.0006, 0.99998, 1, 1.0009, 0.99972, 1, 1, 0.99998, 1, 1, 1, 1, 1, 1, 0.99998, 0.99973, 1.00019, 0.99999, 0.99998, 1, 0.99962, 1.0006, 1.0006, 1, 1, 1.00025, 0.99973, 1, 0.99973, 0.99973, 0.99973, 1.0288, 0.99973, 1.00024, 1.0006, 0.9995, 0.99998, 1, 0.99998, 1.06409, 1.36625, 1.41144, 0.99973, 0.99998, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 1, 0.99973, 1, 0.99973, 0.99973, 0.99973, 0.99897, 0.99897, 1.00003, 1.00003, 0.99984, 0.99968, 0.99968, 0.99973, 1.0006, 1, 0.99998, 1.0006, 1, 0.99999, 1, 0.99973, 1.00002, 0.99998, 0.99973, 0.99973, 0.99998, 0.99973, 0.99973, 1, 0.99973, 0.99973, 0.99973, 0.99973, 1.00026, 0.99998, 1, 1.00003, 1.00031, 0.99973, 0.99973, 0.99998, 0.99998, 0.99973, 0.99973, 0.99973, 1.00042, 0.99999, 0.99998, 1, 0.99924, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.00034, 1.0006, 1.00015, 1.00027, 0.99999, 0.99999, 1.00035, 0.99999, 0.99999, 0.99977, 0.99924, 0.99924, 0.99924, 0.99924, 0.99924, 1.0006, 0.99924, 0.99924, 1, 1, 1, 1, 0.99924, 0.99924, 0.99962, 1.06311, 0.99924, 1.00024, 1.00003, 1.00031, 1.41144, 0.99973, 1.00003, 0.99924, 0.95317, 0.99924, 1.40579, 0.99999, 0.60299, 1, 1, 1.00003, 1.00267, 1.01487, 1.00003, 1, 1, 0.99973, 0.99973, 1.00041, 0.99973, 0.99973, 0.99973, 1, 1.00031, 0.99973, 1, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.00016, 0.99998, 0.99973, 0.99973, 0.99973, 1.00025, 1.00025, 0.99973, 0.99973, 0.99973, 1.00002, 1.00002, 1.00002, 1.40483, 0.99968, 0.99936, 1, 1.00026, 1.00026, 0.99973, 0.99973, 0.9998, 0.99998, 0.99998, 0.96329, 0.99982, 1.0006, 1, 1.00023, 0.99947, 1.00012, 1.00003, 1.06409, 1.20985, 1.00063, 0.99973, 0.99973, 1.00026, 1.00006, 0.99998, 0.99998, 0.99998, 0.99924, 0.99924, 0.99924, 0.99924, 1.00043, 0.99998, 0.99998, 0.8254, 0.99998, 0.99998, 1.00025, 1.00003, 1.00043, 0.99998, 1.41144, 1, 1, 1, 1, 1, 1, 0.99999, 0.99973, 0.99973, 1.00002, 0.99998, 1.40579, 0.99995, 1, 0.99973, 1.0006, 1, 0.99953, 0.99973, 1.39713, 1.00054, 1.0006, 0.99994, 1.0006, 0.89547, 1.0006, 0.99911, 0.99973, 0.99973, 1.00002, 1.00002, 0.99998, 1, 0.99998, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99955, 1.0006, 0.99998, 1, 1, 1, 1, 1.00026, 1.0006, 0.99998, 1, 1.00001, 0.99954, 0.99973, 0.98332, 1, 1, 0.99998, 1, 0.99991, 1, 1.66475, 1.0006, 1, 1, 1, 1, 0.99973, 1.41144, 1.00036, 1.00036, 1.00036, 1.00036, 0.99973, 0.99973, 1, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 1, 1.0005, 1, 1, 1, 1, 0.99973, 1, 1, 1, 1, 1, 0.99973, 0.99918];
+exports.HelveticaItalicFactors = HelveticaItalicFactors;
+const HelveticaItalicLineHeight = 1.35;
+exports.HelveticaItalicLineHeight = HelveticaItalicLineHeight;
+const HelveticaRegularFactors = [0.76116, 1, 1.00001, 1, 1, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 0.99928, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 0.99977, 0.99977, 0.99977, 0.91621, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 0.9998, 1.00001, 1.00001, 0.99977, 0.99977, 1.00013, 0.99977, 0.99973, 1.00026, 1.00022, 1.0004, 1.00022, 1.00022, 1.00022, 1.00022, 0.99977, 0.99999, 0.99861, 0.99861, 1, 0.99977, 0.99977, 1.0006, 1.00019, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.00055, 1.0006, 1, 1, 1.00001, 1.00001, 1.00001, 0.99973, 0.99973, 1.00005, 0.99973, 0.99973, 0.99973, 0.99973, 0.99999, 0.99999, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 1.00022, 1, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1, 0.99941, 1.00022, 0.99947, 1.00022, 1.00022, 1.00022, 1.00001, 1.00019, 0.99977, 0.99946, 1.00022, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.6, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 0.99973, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00022, 1.00001, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 0.99945, 0.99977, 0.99977, 1.00001, 1.00016, 1.00016, 1.00016, 1.00016, 1.00016, 1.00001, 1.00015, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 0.99973, 0.99982, 0.99982, 1, 1.00001, 0.99962, 1.00001, 1.00092, 0.99964, 1.00001, 0.99928, 0.99963, 0.99999, 1.00035, 1.00035, 1.00082, 0.99962, 0.99999, 0.99977, 1.00022, 1.00035, 1.00001, 0.99977, 1.00026, 0.9996, 0.99967, 1.00001, 1.00034, 1.00074, 1.00054, 1.00053, 1.00063, 0.99971, 0.99962, 1.00035, 0.99975, 0.99977, 1.00047, 1.00029, 1.00092, 1.00035, 1.00001, 1.0006, 1.0006, 1, 0.99988, 0.99975, 1, 1.00082, 0.9996, 0.99973, 1.00043, 0.99953, 1.0007, 0.99915, 0.99973, 0.99973, 1.00008, 0.99892, 1.00073, 1.00073, 1.00114, 0.99915, 1.00073, 0.99955, 0.99973, 1.00092, 0.99973, 1, 0.99998, 1, 1.0003, 1, 1.00043, 1.00001, 0.99969, 1.0003, 1, 1.00035, 1.00001, 0.9995, 1, 1.00092, 0.99968, 0.99973, 1.0007, 0.9995, 1, 0.99924, 1.0006, 0.99924, 0.99972, 1.00062, 0.99973, 1.00114, 1, 1.00035, 1, 0.99955, 1, 0.99971, 0.99925, 1.00023, 0.99973, 0.99978, 0.99978, 0.99973, 1.00001, 1, 0.99973, 1.00031, 0.99973, 0.99973, 1, 1, 1, 1, 1, 1, 1, 0.99949, 1.00003, 0.99959, 0.99987, 0.99973, 0.99973, 1.0006, 1.0009, 0.99966, 1.41144, 1.00005, 1.00005, 1.0006, 1.0006, 0.99998, 1.0009, 0.99972, 1, 1, 0.99998, 1, 1, 1, 1, 0.99998, 0.99973, 1.00019, 0.99999, 0.99998, 0.99962, 1.0006, 1.0006, 1.00025, 0.99973, 0.99973, 0.99973, 0.99973, 1.04596, 0.99973, 1.00024, 1.00065, 0.9995, 0.99998, 0.99998, 1.06409, 1.36625, 1.41144, 0.99973, 0.99998, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1, 0.99973, 1, 0.99973, 0.99973, 0.99973, 1.00045, 1.00045, 1.00003, 0.99915, 0.99984, 0.99973, 0.99973, 0.99973, 1.0006, 1, 0.99998, 1.0006, 1, 0.99999, 1, 0.99973, 1.00002, 0.99973, 0.99973, 0.99973, 0.99973, 1, 0.99973, 0.99973, 0.99973, 0.99973, 1.00026, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.99998, 1.00003, 1.00031, 0.99973, 0.99973, 0.99998, 0.99998, 0.99973, 0.99973, 0.99973, 1.00042, 0.99999, 0.99998, 0.99924, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.00034, 1.0006, 1.00015, 1.00027, 0.99999, 0.99999, 1.00035, 0.99999, 0.99999, 0.99977, 0.99924, 0.99924, 0.99924, 0.99924, 0.99924, 1.0006, 0.99924, 0.99924, 1, 1, 1, 1, 0.99924, 0.99924, 1, 1.02572, 0.99924, 1.00005, 1.00003, 1.00031, 1.41144, 0.99973, 1.00003, 0.99924, 0.95317, 0.99924, 1.40579, 0.99999, 0.60299, 1, 1, 1.00003, 1.00267, 0.96499, 1.00003, 1, 1, 0.99973, 0.99973, 0.99999, 0.99973, 0.99973, 0.99973, 1, 1.00031, 0.99973, 1, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.00016, 0.99998, 0.99973, 0.99973, 0.99973, 1.00031, 1.00031, 0.99973, 0.99973, 0.99973, 1.00002, 1.00002, 1.00002, 1.40483, 0.99968, 0.99936, 1, 1.00026, 1.00026, 0.99973, 0.99973, 0.9998, 0.99998, 0.99998, 0.96329, 0.99982, 1.0006, 1, 1.00023, 0.99933, 1.00008, 1.00003, 1.06409, 1.20985, 1.00015, 0.99973, 0.99973, 1.00026, 1.00006, 0.99998, 0.99998, 0.99998, 0.99924, 0.99924, 0.99924, 0.99924, 1.00043, 0.99998, 0.99998, 0.8254, 0.99998, 0.99998, 1.00025, 1.00003, 1.00027, 0.99998, 1.41144, 1, 1, 1, 1, 1, 1, 0.99999, 0.99973, 0.99973, 1.00002, 1.40579, 0.9997, 1, 0.99973, 1.0006, 1, 0.99953, 0.99973, 1.39713, 1.00054, 1.0006, 0.99995, 1.0006, 0.84533, 1.0006, 0.99973, 0.99973, 0.99973, 1.00002, 1.00002, 0.99998, 0.99998, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99955, 1.0006, 0.99998, 1, 1, 1, 1, 1.00026, 1.0006, 0.99998, 1, 1.00001, 0.99561, 0.99973, 1.00073, 1, 1, 0.99998, 1, 1, 1, 1, 1, 0.99991, 1, 1.66475, 1.0006, 1, 1, 1, 1, 1, 0.99973, 1.41144, 1.00023, 1.00023, 1.00023, 1.00023, 0.99973, 0.99973, 1, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 1, 1.00055, 1, 1, 1, 1, 0.99973, 1, 1, 1, 1, 1, 0.99973, 1.00019];
+exports.HelveticaRegularFactors = HelveticaRegularFactors;
+const HelveticaRegularLineHeight = 1.2;
+exports.HelveticaRegularLineHeight = HelveticaRegularLineHeight;
+
+/***/ }),
+/* 58 */
+/***/ ((__unused_webpack_module, exports) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.LiberationSansRegularWidths = exports.LiberationSansItalicWidths = exports.LiberationSansBoldWidths = exports.LiberationSansBoldItalicWidths = void 0;
+const LiberationSansBoldWidths = [365, 0, 722, 1000, 1000, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 667, 722, 722, 722, 719, 667, 667, 667, 667, 667, 667, 667, 667, 667, 723, 667, 667, 853, 722, 906, 722, 556, 611, 778, 601, 778, 778, 778, 778, 722, 604, 354, 354, 604, 722, 722, 278, 785, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 474, 278, 556, 556, 722, 722, 722, 611, 611, 667, 611, 611, 611, 611, 833, 833, 722, 722, 722, 722, 722, 722, 778, 1000, 778, 778, 778, 778, 778, 778, 778, 802, 838, 778, 825, 778, 778, 778, 667, 821, 722, 809, 778, 722, 722, 722, 722, 667, 667, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 667, 667, 667, 667, 667, 600, 611, 611, 611, 611, 611, 778, 667, 722, 722, 722, 722, 722, 722, 722, 722, 722, 667, 667, 927, 722, 722, 667, 944, 944, 944, 944, 944, 667, 644, 667, 667, 667, 667, 667, 611, 611, 611, 611, 611, 556, 556, 556, 556, 333, 333, 556, 889, 889, 1000, 722, 719, 722, 567, 712, 667, 669, 904, 626, 719, 719, 610, 702, 833, 722, 778, 719, 667, 722, 611, 622, 854, 667, 730, 703, 1005, 1019, 870, 979, 719, 711, 1031, 719, 487, 885, 567, 711, 667, 278, 276, 556, 1094, 1062, 875, 610, 622, 556, 618, 615, 417, 635, 556, 556, 709, 497, 615, 615, 500, 635, 740, 604, 611, 604, 611, 556, 490, 556, 875, 556, 615, 581, 833, 844, 729, 854, 615, 552, 854, 583, 447, 611, 417, 552, 556, 278, 281, 278, 969, 906, 611, 500, 556, 719, 778, 604, 611, 885, 489, 1115, 556, 615, 615, 556, 722, 333, 556, 549, 556, 556, 1000, 500, 1000, 1000, 500, 500, 500, 584, 584, 389, 975, 556, 611, 278, 280, 610, 708, 389, 389, 333, 333, 333, 333, 280, 350, 556, 556, 333, 333, 222, 556, 556, 556, 556, 333, 556, 576, 604, 333, 333, 656, 333, 278, 333, 222, 737, 556, 333, 611, 556, 556, 719, 611, 400, 606, 510, 333, 333, 465, 549, 729, 708, 556, 333, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 333, 1000, 556, 1000, 556, 611, 556, 475, 451, 584, 583, 600, 611, 611, 611, 333, 604, 333, 333, 750, 604, 1000, 556, 834, 333, 556, 556, 333, 556, 611, 556, 611, 611, 611, 611, 611, 333, 333, 584, 549, 556, 556, 333, 333, 611, 611, 611, 594, 604, 333, 333, 278, 278, 278, 278, 278, 278, 556, 278, 713, 274, 604, 604, 722, 604, 604, 1052, 278, 278, 278, 278, 278, 278, 278, 278, 556, 558, 556, 556, 278, 278, 556, 385, 278, 479, 584, 549, 708, 556, 584, 278, 494, 278, 708, 889, 552, 750, 333, 584, 240, 612, 584, 500, 750, 611, 611, 708, 611, 611, 556, 333, 549, 611, 556, 556, 611, 611, 611, 611, 611, 944, 333, 611, 611, 611, 845, 845, 611, 611, 556, 834, 834, 834, 354, 370, 365, 979, 611, 611, 611, 611, 556, 333, 333, 494, 889, 278, 1000, 1094, 715, 766, 584, 549, 823, 753, 611, 611, 611, 474, 500, 500, 500, 278, 278, 278, 278, 238, 389, 389, 549, 389, 389, 737, 584, 619, 333, 708, 556, 556, 556, 556, 556, 556, 479, 556, 556, 834, 333, 708, 684, 520, 556, 278, 1021, 531, 556, 713, 917, 333, 446, 333, 479, 333, 541, 611, 556, 834, 834, 333, 333, 333, 1000, 990, 990, 990, 990, 556, 611, 611, 611, 611, 611, 611, 611, 611, 556, 552, 278, 333, 333, 333, 576, 333, 611, 333, 333, 333, 667, 722, 556, 615, 333, 333, 333, 396, 768, 612, 167, 278, 750, 333, 611, 611, 611, 708, 582, 582, 582, 582, 611, 611, 556, 778, 778, 778, 778, 778, 556, 445, 556, 556, 556, 556, 556, 556, 500, 500, 500, 500, 556, 460];
+exports.LiberationSansBoldWidths = LiberationSansBoldWidths;
+const LiberationSansBoldItalicWidths = [365, 0, 722, 1000, 1000, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 722, 667, 722, 722, 722, 671, 667, 667, 667, 667, 667, 667, 667, 667, 667, 723, 667, 667, 854, 722, 906, 722, 556, 611, 778, 610, 778, 778, 778, 778, 722, 604, 354, 354, 604, 722, 722, 278, 782, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 473, 278, 556, 556, 722, 722, 722, 611, 611, 667, 611, 611, 611, 611, 833, 833, 722, 722, 722, 722, 722, 722, 778, 1000, 778, 778, 778, 778, 778, 778, 778, 781, 847, 778, 844, 778, 778, 778, 667, 822, 718, 829, 778, 722, 722, 722, 722, 667, 667, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 667, 667, 667, 667, 667, 590, 611, 611, 611, 611, 611, 778, 667, 722, 722, 722, 722, 722, 722, 722, 722, 722, 667, 667, 930, 722, 722, 667, 944, 944, 944, 944, 944, 667, 657, 667, 667, 667, 667, 667, 611, 611, 611, 611, 611, 556, 556, 556, 556, 333, 333, 556, 889, 889, 1000, 722, 708, 722, 614, 722, 667, 667, 927, 643, 719, 719, 615, 687, 833, 722, 778, 719, 667, 722, 611, 677, 781, 667, 729, 708, 979, 989, 854, 1000, 708, 719, 1042, 729, 575, 886, 614, 719, 667, 278, 278, 556, 1094, 1042, 854, 622, 677, 556, 619, 604, 534, 618, 556, 556, 736, 510, 611, 611, 507, 622, 740, 604, 611, 611, 611, 556, 889, 556, 885, 556, 646, 583, 889, 935, 707, 854, 594, 552, 865, 589, 467, 611, 469, 563, 556, 278, 278, 278, 969, 906, 611, 507, 556, 719, 778, 611, 611, 885, 516, 1146, 556, 620, 620, 556, 722, 333, 556, 549, 556, 556, 1000, 500, 999, 1000, 500, 500, 500, 584, 584, 389, 975, 556, 611, 278, 280, 621, 708, 389, 389, 333, 333, 333, 333, 280, 350, 556, 556, 333, 333, 222, 556, 556, 556, 556, 333, 556, 578, 604, 333, 333, 656, 333, 278, 333, 222, 737, 556, 333, 611, 556, 556, 740, 611, 400, 610, 510, 333, 333, 333, 549, 729, 708, 556, 333, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 333, 1000, 556, 1000, 556, 611, 556, 479, 479, 584, 583, 600, 611, 611, 611, 333, 604, 333, 333, 750, 604, 1000, 556, 834, 333, 556, 556, 333, 556, 611, 556, 611, 611, 611, 611, 611, 333, 333, 584, 549, 556, 556, 333, 333, 611, 611, 611, 594, 604, 333, 333, 278, 278, 278, 278, 278, 278, 556, 278, 713, 274, 604, 604, 722, 604, 604, 1052, 278, 278, 278, 278, 278, 278, 278, 278, 556, 566, 556, 556, 278, 278, 556, 396, 278, 479, 584, 549, 708, 556, 584, 278, 494, 278, 708, 889, 552, 750, 333, 584, 240, 603, 584, 500, 750, 611, 611, 708, 611, 611, 556, 333, 549, 611, 556, 556, 611, 611, 611, 611, 611, 944, 333, 611, 611, 611, 834, 834, 611, 611, 556, 834, 834, 834, 354, 370, 365, 979, 611, 611, 611, 611, 556, 333, 333, 494, 889, 278, 1000, 1104, 704, 712, 584, 549, 823, 773, 611, 611, 611, 474, 500, 500, 500, 278, 278, 278, 278, 238, 389, 389, 549, 389, 389, 737, 584, 605, 333, 708, 556, 556, 556, 556, 556, 556, 479, 556, 556, 834, 333, 708, 664, 532, 556, 278, 1021, 531, 556, 713, 917, 333, 409, 333, 479, 333, 558, 611, 556, 834, 834, 333, 333, 333, 1000, 990, 990, 990, 990, 556, 611, 611, 611, 611, 611, 611, 611, 611, 556, 552, 278, 333, 333, 333, 576, 333, 611, 333, 333, 333, 667, 719, 556, 619, 333, 333, 333, 396, 768, 612, 167, 278, 750, 333, 611, 611, 611, 708, 591, 591, 591, 591, 611, 611, 556, 778, 778, 778, 778, 778, 556, 450, 556, 556, 556, 556, 556, 556, 500, 500, 500, 500, 556, 492];
+exports.LiberationSansBoldItalicWidths = LiberationSansBoldItalicWidths;
+const LiberationSansItalicWidths = [365, 0, 667, 1000, 1000, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 722, 722, 722, 722, 722, 722, 667, 722, 722, 722, 671, 667, 667, 667, 667, 667, 667, 667, 667, 667, 723, 667, 667, 789, 722, 846, 722, 556, 611, 778, 570, 778, 778, 778, 778, 722, 604, 354, 354, 604, 722, 722, 278, 733, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 389, 278, 500, 500, 667, 667, 667, 556, 556, 667, 556, 556, 556, 556, 833, 833, 722, 722, 722, 722, 722, 722, 778, 1000, 778, 778, 778, 778, 778, 778, 778, 761, 775, 778, 794, 778, 778, 778, 667, 837, 725, 831, 778, 722, 722, 722, 722, 667, 667, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 667, 667, 667, 667, 667, 600, 611, 611, 611, 611, 611, 778, 667, 722, 722, 722, 722, 722, 722, 722, 722, 722, 667, 667, 865, 722, 722, 667, 944, 944, 944, 944, 944, 667, 648, 667, 667, 667, 667, 667, 611, 611, 611, 611, 611, 556, 556, 556, 556, 333, 294, 556, 889, 889, 1000, 667, 651, 667, 544, 704, 667, 667, 917, 614, 715, 715, 589, 686, 833, 722, 778, 725, 667, 722, 611, 639, 795, 667, 727, 673, 920, 923, 805, 886, 651, 694, 1022, 682, 492, 843, 544, 708, 667, 278, 278, 500, 1066, 982, 844, 589, 639, 556, 562, 522, 493, 553, 556, 556, 688, 465, 556, 556, 472, 564, 686, 550, 556, 556, 556, 500, 833, 500, 835, 500, 572, 518, 830, 851, 621, 736, 526, 492, 752, 534, 339, 556, 378, 496, 500, 222, 222, 222, 910, 828, 556, 472, 500, 724, 778, 556, 556, 885, 323, 1083, 556, 570, 570, 556, 667, 278, 556, 549, 556, 556, 1000, 500, 1000, 998, 500, 500, 500, 469, 584, 389, 1015, 556, 556, 278, 260, 571, 708, 334, 334, 278, 278, 333, 285, 260, 350, 500, 500, 333, 324, 222, 500, 500, 500, 500, 333, 556, 546, 604, 333, 324, 656, 278, 278, 333, 222, 737, 556, 333, 556, 556, 556, 625, 556, 400, 556, 510, 333, 316, 333, 549, 729, 708, 556, 333, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 333, 1000, 556, 1000, 556, 556, 556, 439, 439, 584, 584, 600, 555, 555, 556, 278, 500, 333, 278, 750, 604, 1000, 556, 834, 333, 556, 556, 333, 556, 556, 500, 556, 556, 556, 556, 611, 333, 294, 584, 549, 556, 556, 333, 333, 556, 556, 556, 594, 604, 333, 398, 222, 278, 278, 278, 278, 278, 444, 278, 713, 274, 604, 604, 719, 604, 604, 1052, 222, 222, 222, 222, 222, 278, 222, 222, 500, 500, 500, 500, 222, 222, 492, 281, 222, 400, 584, 549, 708, 556, 584, 222, 494, 222, 708, 833, 552, 750, 333, 584, 188, 548, 584, 500, 750, 556, 556, 615, 556, 556, 556, 333, 549, 556, 500, 556, 556, 556, 556, 556, 556, 944, 333, 556, 556, 556, 779, 779, 556, 556, 556, 834, 834, 834, 354, 370, 365, 979, 611, 611, 556, 556, 537, 333, 333, 494, 889, 278, 1000, 1094, 652, 670, 584, 549, 823, 728, 556, 556, 611, 355, 333, 333, 333, 222, 222, 222, 222, 191, 333, 333, 549, 333, 333, 737, 584, 573, 333, 708, 500, 500, 500, 500, 500, 500, 354, 556, 556, 834, 333, 708, 603, 486, 556, 278, 1021, 531, 556, 713, 917, 278, 374, 278, 354, 278, 542, 556, 556, 834, 834, 333, 328, 333, 1000, 990, 990, 990, 990, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 552, 278, 333, 333, 333, 576, 333, 611, 278, 333, 278, 667, 715, 556, 565, 333, 333, 333, 365, 768, 612, 167, 278, 750, 333, 500, 500, 556, 708, 550, 550, 550, 550, 556, 556, 500, 722, 722, 722, 722, 722, 500, 447, 500, 500, 500, 500, 556, 500, 500, 500, 500, 500, 556, 463];
+exports.LiberationSansItalicWidths = LiberationSansItalicWidths;
+const LiberationSansRegularWidths = [365, 0, 667, 1000, 1000, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, 722, 722, 722, 722, 722, 722, 667, 722, 722, 722, 668, 667, 667, 667, 667, 667, 667, 667, 667, 667, 723, 667, 667, 784, 722, 838, 722, 556, 611, 778, 551, 778, 778, 778, 778, 722, 604, 354, 354, 604, 722, 722, 278, 735, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 384, 278, 500, 500, 667, 667, 667, 556, 556, 668, 556, 556, 556, 556, 833, 833, 722, 722, 722, 722, 722, 722, 778, 1000, 778, 778, 778, 778, 778, 778, 778, 748, 752, 778, 774, 778, 778, 778, 667, 798, 722, 835, 778, 722, 722, 722, 722, 667, 667, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 667, 667, 667, 667, 667, 618, 611, 611, 611, 611, 611, 778, 667, 722, 722, 722, 722, 722, 722, 722, 722, 722, 667, 667, 855, 722, 722, 667, 944, 944, 944, 944, 944, 667, 650, 667, 667, 667, 667, 667, 611, 611, 611, 611, 611, 556, 556, 556, 556, 333, 556, 889, 889, 1000, 667, 656, 667, 542, 677, 667, 667, 923, 604, 719, 719, 583, 656, 833, 722, 778, 719, 667, 722, 611, 635, 760, 667, 740, 667, 917, 938, 792, 885, 656, 719, 1010, 722, 489, 865, 542, 719, 667, 278, 278, 500, 1057, 1010, 854, 583, 635, 556, 573, 531, 365, 583, 556, 556, 669, 458, 559, 559, 438, 583, 688, 552, 556, 542, 556, 500, 458, 500, 823, 500, 573, 521, 802, 823, 625, 719, 521, 510, 750, 542, 411, 556, 365, 510, 500, 222, 278, 222, 906, 812, 556, 438, 500, 719, 778, 552, 556, 885, 323, 1073, 556, 578, 578, 556, 667, 278, 556, 549, 556, 556, 1000, 500, 1000, 1000, 500, 500, 500, 469, 584, 389, 1015, 556, 556, 278, 260, 575, 708, 334, 334, 278, 278, 333, 260, 350, 500, 500, 333, 500, 500, 500, 500, 333, 556, 525, 604, 333, 656, 278, 278, 737, 556, 556, 556, 556, 615, 556, 400, 557, 510, 333, 333, 549, 729, 708, 556, 333, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 1000, 556, 1000, 556, 556, 556, 446, 446, 584, 583, 600, 556, 556, 556, 278, 500, 333, 278, 750, 604, 1000, 556, 834, 556, 556, 556, 556, 500, 556, 556, 556, 556, 611, 333, 222, 222, 294, 294, 324, 324, 316, 328, 398, 285, 333, 584, 549, 556, 556, 333, 333, 556, 556, 556, 594, 604, 333, 222, 278, 278, 278, 278, 278, 444, 278, 713, 274, 604, 604, 719, 604, 604, 1052, 222, 222, 222, 222, 222, 278, 222, 222, 500, 500, 500, 500, 222, 222, 500, 292, 222, 334, 584, 549, 708, 556, 584, 222, 494, 222, 708, 833, 552, 750, 333, 584, 188, 576, 584, 500, 750, 556, 556, 604, 556, 556, 556, 333, 549, 556, 500, 556, 556, 556, 556, 556, 556, 944, 333, 556, 556, 556, 781, 781, 556, 556, 556, 834, 834, 834, 354, 370, 365, 979, 611, 611, 556, 556, 537, 333, 333, 494, 889, 278, 1000, 1094, 648, 690, 584, 549, 823, 713, 556, 556, 611, 355, 333, 333, 333, 222, 222, 222, 222, 191, 333, 333, 549, 333, 333, 737, 584, 569, 333, 708, 500, 500, 500, 500, 500, 500, 354, 556, 556, 834, 708, 617, 482, 556, 278, 1021, 531, 556, 713, 917, 278, 395, 278, 375, 278, 556, 556, 556, 834, 834, 333, 333, 1000, 990, 990, 990, 990, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 552, 278, 333, 333, 333, 576, 333, 611, 278, 333, 278, 667, 722, 556, 559, 333, 333, 333, 333, 333, 333, 333, 365, 768, 612, 167, 278, 750, 333, 333, 500, 500, 556, 708, 547, 547, 547, 547, 556, 556, 500, 722, 722, 722, 722, 722, 500, 448, 500, 500, 500, 500, 556, 500, 500, 500, 500, 500, 556, 441];
+exports.LiberationSansRegularWidths = LiberationSansRegularWidths;
+
+/***/ }),
+/* 59 */
+/***/ ((__unused_webpack_module, exports) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.MyriadProRegularLineHeight = exports.MyriadProRegularFactors = exports.MyriadProItalicLineHeight = exports.MyriadProItalicFactors = exports.MyriadProBoldLineHeight = exports.MyriadProBoldItalicLineHeight = exports.MyriadProBoldItalicFactors = exports.MyriadProBoldFactors = void 0;
+const MyriadProBoldFactors = [1.36898, 1, 0.90838, 0.868, 0.868, 0.90838, 0.90838, 0.90838, 0.90838, 0.90838, 0.90838, 0.91945, 0.90838, 0.90838, 0.90838, 0.90838, 0.90838, 0.83637, 0.83637, 0.82391, 0.82391, 0.82391, 0.82391, 0.82391, 0.82391, 0.91905, 0.96376, 0.96376, 0.97484, 0.90157, 0.80061, 0.80061, 0.80061, 0.80061, 0.80061, 0.80061, 0.80061, 0.80061, 0.80061, 0.95417, 0.80061, 0.80061, 0.75261, 0.95407, 0.87992, 0.97484, 0.99793, 0.86275, 0.8768, 0.8019, 0.8768, 0.8768, 1, 0.8768, 0.95407, 1, 1, 1, 1, 0.97069, 0.95407, 1.0258, 0.887, 1.0258, 1.0258, 1.0258, 1.0258, 1.0258, 1.0258, 1.0258, 1.0258, 1.0258, 1.0258, 0.82976, 1.0258, 0.73901, 0.73901, 0.85022, 0.85022, 1, 0.83655, 0.83655, 0.97153, 0.83655, 1, 0.83655, 0.84638, 1.0156, 1.0156, 0.95546, 0.95546, 0.95546, 1, 0.95546, 0.95546, 0.92179, 0.936, 0.92179, 0.92179, 0.92179, 0.92179, 0.92179, 0.92179, 0.92179, 0.92796, 0.97268, 0.92179, 0.96034, 0.92179, 0.92179, 0.92179, 0.87107, 0.95638, 0.92361, 0.91709, 0.92179, 0.82114, 0.82114, 0.82114, 1, 0.87107, 0.8096, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.8096, 0.8096, 1, 0.8096, 1, 0.96318, 0.89713, 0.89713, 0.89713, 0.89713, 1, 0.92436, 0.86958, 0.94438, 0.94438, 0.94438, 0.94438, 0.94438, 0.94438, 0.94438, 0.94438, 0.94438, 0.93704, 0.93704, 0.83689, 0.94438, 0.94438, 0.95353, 0.94083, 0.94083, 0.94083, 0.94083, 0.94083, 0.91905, 0.89192, 0.90406, 0.90406, 0.90406, 0.90406, 0.90406, 0.9446, 0.9446, 0.9446, 0.9446, 0.9446, 0.94938, 0.94938, 0.94938, 0.94938, 0.90088, 1, 0.94938, 0.9031, 0.9031, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.94938, 0.94836, 0.94836, 0.94938, 0.93884, 0.83181, 0.94938, 1.08595, 0.94938, 0.94938, 1, 1, 1, 1, 1, 1, 1, 1.02058, 1.02058, 1.16661, 0.78966, 0.94938, 0.97898, 1.18777, 1.01149, 0.96174, 1, 0.80687, 0.80687, 0.94292, 0.94292, 0.90088, 1, 1.01149, 0.96544, 0.81093, 0.81093, 0.90088, 1, 1, 0.81093, 0.81093, 0.81093, 0.81093, 0.90088, 0.99793, 0.87548, 1, 0.90088, 1, 1, 0.78076, 0.93582, 1, 1, 0.91882, 0.99793, 1, 0.97571, 0.94219, 0.94219, 0.84313, 0.97571, 0.89022, 0.9498, 1, 0.90088, 1, 0.9358, 1.08595, 1, 1, 0.99793, 0.90088, 0.98621, 0.94938, 0.94938, 0.94938, 0.94938, 0.94938, 0.94938, 0.94938, 0.94938, 0.99793, 1, 1, 0.94938, 1, 0.89903, 0.95933, 0.94938, 0.98607, 1.0373, 1.02058, 1, 1.36145, 0.95933, 0.95933, 0.93969, 0.80479, 1, 0.80479, 1.024, 1, 1, 1, 0.99793, 1, 1, 0.99793, 0.99793, 1, 1, 0.9577, 0.92601, 0.9577, 0.9577, 1, 0.9577, 0.98225, 0.90088, 1, 1.02058, 1.08595, 0.8361, 0.8361, 0.81079, 0.81079, 0.95933, 0.95933, 0.95933, 1, 1, 0.90088, 1, 0.98621, 0.98621, 0.98621, 0.98621, 0.98621, 0.98621, 1.01591, 0.98621, 1.05486, 1.30692, 1, 1, 1, 1, 1, 1, 0.98621, 1.0078, 1.0078, 1.0078, 1.0078, 0.98621, 1.0474, 1.0474, 0.97455, 0.98275, 1, 0.97455, 0.98981, 0.98981, 0.9314, 0.73977, 1, 0.73903, 1.02058, 1.08595, 1, 1, 1.02058, 1, 1.16161, 1.033, 1, 0.9672, 0.54324, 1, 1, 1.02058, 1, 0.95617, 1.02058, 1, 1, 0.95933, 0.95933, 0.8271, 0.95933, 1, 0.99793, 1, 1.08595, 0.95933, 0.91701, 0.98894, 0.9446, 0.9446, 0.9446, 0.9446, 0.9446, 0.91964, 0.90088, 0.9446, 0.9446, 0.9446, 0.86774, 0.86774, 0.9446, 0.9446, 0.99793, 1, 0.99642, 0.99642, 1, 1.0213, 1.05686, 1, 0.9446, 0.9446, 0.9446, 0.97898, 0.97455, 0.94292, 0.94292, 1.17173, 0.9897, 0.93582, 1.285, 1, 0.99394, 0.78367, 1.02058, 1.08595, 0.80535, 0.96361, 0.97407, 0.72851, 0.72851, 0.83734, 0.918, 0.908, 0.908, 0.93582, 1, 0.93582, 0.93582, 0.86209, 0.97646, 0.97646, 1.0732, 0.97646, 1, 0.62295, 1, 0.9553, 0.90088, 1, 0.78036, 0.78036, 0.78036, 1, 0.78036, 1, 1, 1.00872, 0.99793, 1, 1, 1, 0.86832, 1, 0.99793, 1.19137, 1, 1, 0.99793, 0.76169, 1, 1.10208, 1.0128, 1.10208, 0.77452, 1, 1.05453, 0.97898, 0.99793, 1, 0.99642, 0.90088, 1, 0.90989, 0.65, 1, 1, 1, 1, 0.99793, 0.95442, 0.95442, 0.95442, 0.95442, 0.95442, 0.95442, 0.95442, 0.95442, 0.89903, 1, 0.72706, 0.96694, 1, 1, 1, 1, 0.89713, 1.10208, 0.90088, 0.78076, 1, 1, 1, 1, 0.96694, 1, 1, 1, 1, 1, 0.74854, 0.93582, 1, 1, 1, 1, 0.95442, 1, 0.95871, 0.95871, 0.95871, 0.95871, 0.95442, 0.95442, 0.95298, 0.97579, 0.97579, 0.97579, 0.97579, 0.97579, 0.9332, 1.05993, 0.94039, 0.94039, 0.94039, 0.94039, 0.99793, 0.94039, 0.938, 0.938, 0.938, 0.938, 0.99793, 0.95776];
+exports.MyriadProBoldFactors = MyriadProBoldFactors;
+const MyriadProBoldLineHeight = 1.2;
+exports.MyriadProBoldLineHeight = MyriadProBoldLineHeight;
+const MyriadProBoldItalicFactors = [1.36898, 1, 0.85576, 0.845, 0.845, 0.85576, 0.85576, 0.85576, 0.85576, 0.85576, 0.85576, 0.85576, 0.85576, 0.85576, 0.85576, 0.85576, 0.85576, 0.80591, 0.80591, 0.80729, 0.80729, 0.80729, 0.80729, 0.80729, 0.80729, 0.85308, 0.94299, 0.94299, 0.95961, 0.94729, 0.77512, 0.77512, 0.77512, 0.77512, 0.77512, 0.77512, 0.77512, 0.77512, 0.77512, 0.92098, 0.77512, 0.77512, 0.66862, 0.92222, 0.7927, 0.95961, 0.97276, 0.83655, 0.86523, 0.7805, 0.86523, 0.86523, 1, 0.86523, 0.92222, 1, 1, 1, 1, 0.92222, 0.92222, 0.98621, 0.86036, 0.98621, 0.98621, 0.98621, 0.98621, 0.98621, 0.98621, 0.98621, 0.98621, 0.98621, 0.98621, 0.69323, 0.98621, 0.71743, 0.71743, 0.81698, 0.81698, 1, 0.79726, 0.79726, 0.92655, 0.79726, 1, 0.79726, 0.81691, 0.98558, 0.98558, 0.92222, 0.92222, 0.92222, 1, 0.92222, 0.92222, 0.90637, 0.909, 0.90637, 0.90637, 0.90637, 0.90637, 0.90637, 0.90637, 0.90637, 0.92346, 0.89711, 0.90637, 0.88127, 0.90251, 0.90251, 0.90637, 0.83809, 0.93157, 0.90976, 0.83392, 0.90637, 0.80729, 0.80729, 0.80729, 1, 0.83809, 0.76463, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.76463, 0.76463, 1, 0.76463, 1, 0.94523, 0.86275, 0.86275, 0.86275, 0.86275, 1, 0.90637, 0.83659, 0.90699, 0.90699, 0.90699, 0.90699, 0.90699, 0.90699, 0.90699, 0.90699, 0.90699, 0.83509, 0.83509, 0.72459, 0.90699, 0.90699, 0.91605, 0.9154, 0.9154, 0.9154, 0.9154, 0.9154, 0.85308, 0.85359, 0.85458, 0.85458, 0.85458, 0.85458, 0.85458, 0.90531, 0.90531, 0.90531, 0.90531, 0.90531, 0.99613, 0.99613, 0.99613, 0.99613, 1.18616, 1, 0.99613, 0.85811, 0.85811, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.99613, 0.92886, 0.92886, 0.99613, 0.92222, 0.80178, 0.99613, 1.08595, 0.99613, 0.99613, 1, 1, 1, 1, 1, 1, 1, 1.02058, 1.02058, 1.16148, 0.76813, 0.99613, 0.91677, 1.21296, 0.8578, 0.90557, 1, 0.80687, 0.80687, 0.94292, 0.94292, 1.18616, 1, 0.8578, 0.95973, 0.78216, 0.78216, 1.18616, 1, 1, 0.78216, 0.78216, 0.78216, 0.78216, 1.18616, 0.97276, 0.81539, 1, 1.18616, 1, 1, 0.78076, 0.93582, 1, 1, 0.91339, 0.97276, 1, 0.91677, 0.9332, 0.9332, 0.76783, 0.91677, 0.89022, 0.90276, 1, 1.18616, 1, 1.30628, 1.08595, 1, 1, 0.97276, 1.18616, 0.95381, 0.90083, 0.90083, 0.90083, 0.90083, 0.90083, 0.90083, 0.90083, 0.90083, 0.97276, 1, 1, 0.90083, 1, 0.89903, 0.92168, 0.90083, 0.91324, 0.91324, 1.02058, 1, 1.36145, 0.92168, 0.92168, 0.9135, 0.80779, 1, 0.80779, 0.98796, 1, 1, 1, 0.97276, 1, 1, 0.97276, 0.97276, 1, 1, 0.9135, 0.86847, 0.9135, 0.9135, 1, 0.9135, 0.94951, 1.18616, 1, 1.02058, 1.08595, 0.82891, 0.82711, 0.80479, 0.80178, 0.92168, 0.92168, 0.92168, 1, 1, 1.18616, 1, 0.95381, 0.95381, 0.95381, 0.95381, 0.95381, 0.95381, 0.97096, 0.95381, 1.05486, 1.23026, 1, 1, 1, 1, 1, 1, 0.95381, 0.95381, 0.95381, 0.95381, 0.95381, 0.95381, 0.98981, 0.98981, 0.95298, 0.9224, 1, 0.95298, 0.95381, 0.95381, 0.85408, 0.6894, 1, 0.74321, 1.02058, 1.08595, 1, 1, 1.02058, 1, 1.20006, 1.0006, 1, 0.93459, 0.71526, 1, 1, 1.02058, 1, 0.92699, 1.02058, 1, 1, 0.92168, 0.92168, 0.79464, 0.92168, 1, 0.97276, 1, 1.08595, 0.92168, 0.86847, 0.97276, 0.91513, 0.91513, 0.91513, 0.91513, 0.91513, 0.87514, 1.18616, 0.91513, 0.91513, 0.91513, 0.85923, 0.85923, 0.91513, 0.91513, 0.97276, 1, 0.99043, 0.99043, 1, 1.08074, 1.04864, 1, 0.91677, 0.91677, 0.91513, 0.92004, 0.96736, 0.94292, 0.94292, 1.14542, 0.97733, 0.93582, 1.26, 1, 0.97355, 0.80487, 1.02058, 1.08595, 0.79199, 0.89398, 0.91677, 0.71541, 0.71541, 0.81625, 0.896, 0.896, 0.896, 0.91782, 1, 0.91782, 0.91782, 0.83266, 0.95077, 0.95077, 1.03493, 0.95077, 1, 0.55509, 1, 0.93481, 1.18616, 1, 0.748, 0.748, 0.748, 1, 0.748, 1, 1, 0.99973, 0.97276, 1, 1, 1, 0.88159, 1, 0.97276, 1.17337, 1, 1, 0.97276, 0.78694, 1, 1.04502, 1.05214, 1.04502, 0.72651, 1, 0.99531, 0.92332, 0.97276, 1, 0.99043, 1.18616, 1, 1.00899, 0.698, 1, 1, 1, 1, 0.97276, 0.91677, 0.91677, 0.91677, 0.91677, 0.91677, 0.91677, 0.91677, 0.91677, 0.89903, 1, 0.66227, 0.96694, 1, 1, 1, 1, 0.86275, 1.04502, 1.18616, 0.78076, 1, 1, 1, 1, 0.96694, 1, 1, 1, 1, 1, 0.85633, 0.93582, 1, 1, 1, 1, 0.91677, 1, 0.90646, 0.90646, 0.90646, 0.90646, 0.91677, 0.91677, 0.92061, 0.94236, 0.94236, 0.94236, 0.94236, 0.94236, 0.89544, 1.0051, 0.89364, 0.89364, 0.89364, 0.89364, 0.97276, 0.89364, 0.9, 0.9, 0.9, 0.9, 0.97276, 0.86842];
+exports.MyriadProBoldItalicFactors = MyriadProBoldItalicFactors;
+const MyriadProBoldItalicLineHeight = 1.2;
+exports.MyriadProBoldItalicLineHeight = MyriadProBoldItalicLineHeight;
+const MyriadProItalicFactors = [1.36898, 1, 0.85158, 0.773, 0.773, 0.85158, 0.85158, 0.85158, 0.85158, 0.85158, 0.85158, 0.85158, 0.85158, 0.85158, 0.85158, 0.85158, 0.85158, 0.77812, 0.77812, 0.76852, 0.76852, 0.76852, 0.76852, 0.76852, 0.76852, 0.78112, 0.89591, 0.89591, 0.90561, 0.88836, 0.70466, 0.70466, 0.70466, 0.70466, 0.70466, 0.70466, 0.70466, 0.70466, 0.70466, 0.87396, 0.70466, 0.70466, 0.62264, 0.86822, 0.7646, 0.90561, 0.88465, 0.76125, 0.80094, 0.76449, 0.80094, 0.80094, 1, 0.80094, 0.86822, 1, 1, 1, 1, 0.86822, 0.86822, 0.83864, 0.81402, 0.83864, 0.83864, 0.83864, 0.83864, 0.83864, 0.83864, 0.83864, 0.83864, 0.83864, 0.83864, 0.65351, 0.83864, 0.728, 0.728, 0.77212, 0.77212, 1, 0.79475, 0.79475, 0.85308, 0.79475, 1, 0.79475, 0.80553, 0.93637, 0.93637, 0.87514, 0.87514, 0.87514, 1, 0.87514, 0.87514, 0.8588, 0.867, 0.8588, 0.8588, 0.8588, 0.8588, 0.8588, 0.8588, 0.8588, 0.89386, 0.89947, 0.8588, 0.86026, 0.85751, 0.85751, 0.8588, 0.76013, 0.82565, 0.85701, 0.77899, 0.8588, 0.72421, 0.72421, 0.72421, 1, 0.76013, 0.69866, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.69866, 0.69866, 1, 0.69866, 1, 0.89058, 0.77598, 0.77598, 0.77598, 0.77598, 1, 0.8588, 0.76013, 0.85991, 0.85991, 0.85991, 0.85991, 0.85991, 0.85991, 0.85991, 0.85991, 0.85991, 0.8156, 0.8156, 0.69461, 0.85991, 0.85991, 0.80811, 0.87832, 0.87832, 0.87832, 0.87832, 0.87832, 0.78112, 0.82352, 0.77512, 0.77512, 0.77512, 0.77512, 0.77512, 0.8562, 0.8562, 0.8562, 0.8562, 0.8562, 0.93859, 0.93859, 0.93859, 0.93859, 1.15012, 1, 0.93859, 0.8075, 0.8075, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.93859, 0.9486, 0.9486, 0.93859, 0.88307, 0.77025, 0.93859, 1.08595, 0.93859, 0.93859, 1, 1, 1, 1, 1, 1, 1, 1.27014, 1.02058, 1.06383, 0.70926, 0.93859, 0.94399, 1.18417, 0.83537, 0.93298, 1, 0.85034, 0.85034, 1.0222, 1.0222, 1.15012, 1, 0.83537, 0.79121, 0.846, 0.846, 1.15012, 1, 1, 0.846, 0.846, 0.846, 0.846, 1.15012, 0.88465, 0.77487, 1, 1.15012, 1, 1, 0.75945, 0.75945, 1, 1, 0.9161, 0.88465, 1, 0.94399, 0.86847, 0.86847, 0.8544, 0.94399, 0.79519, 0.93942, 1, 1.15012, 1, 1.03901, 1.08595, 1, 1, 0.88465, 1.15012, 0.82424, 0.81453, 0.81453, 0.81453, 0.81453, 0.81453, 0.81453, 0.81453, 0.81453, 0.88465, 1, 1, 0.81453, 1, 0.89903, 0.96017, 0.81453, 0.92388, 0.92388, 1.02058, 1, 1.36145, 0.96186, 0.96186, 0.9278, 0.84943, 1, 0.70869, 1.0186, 1, 1, 1, 0.88465, 1, 1, 0.88465, 0.88465, 1, 1, 0.94219, 0.878, 0.94219, 0.94219, 1, 0.94219, 0.88075, 1.15012, 1, 1.02058, 1.08595, 0.73541, 0.73361, 0.73572, 0.73572, 0.96017, 0.96017, 0.96017, 1, 1, 1.15012, 1, 1.03075, 0.82424, 0.82424, 0.82424, 0.82424, 0.82424, 1.02738, 0.82424, 1.02119, 1.06233, 1, 1, 1, 1, 1, 1, 1.03075, 1.03075, 1.03075, 1.03075, 1.03075, 0.82424, 1.02175, 1.02175, 0.912, 0.922, 1, 0.912, 1.03075, 1.03075, 0.88787, 0.83911, 1, 0.66266, 1.02058, 1.08595, 1, 1, 1.02058, 1, 1.05233, 1.06676, 1, 0.96998, 0.69353, 1, 1, 1.02058, 1, 0.95829, 1.02058, 1, 1, 0.96017, 0.96017, 0.86865, 0.96017, 1, 0.88465, 1, 1.08595, 0.96017, 0.88, 0.88465, 0.93859, 0.93859, 0.93859, 0.93859, 0.93859, 0.84759, 1.15012, 0.93859, 0.93859, 0.93859, 0.86799, 0.86799, 0.93859, 0.93859, 0.88465, 1, 0.9005, 0.9005, 1, 0.94565, 0.9446, 1, 0.8562, 0.8562, 0.93859, 0.94399, 0.91974, 0.85283, 0.85283, 1.04828, 0.86936, 0.75945, 1.124, 1, 0.93969, 0.78815, 1.02058, 1.08595, 0.74948, 0.85769, 0.94399, 0.69046, 0.62864, 0.85639, 1.027, 1.027, 1.027, 0.87321, 1, 0.87321, 0.87321, 0.86948, 0.95493, 0.95493, 0.98391, 0.95493, 1, 0.53609, 1, 0.93758, 1.15313, 1, 0.746, 0.746, 0.746, 1, 0.746, 1, 1, 0.90083, 0.88465, 1, 1, 1, 0.89217, 1, 0.88465, 1.17337, 1, 1, 0.88465, 0.75187, 1, 1.12658, 1.03737, 1.12658, 0.88417, 1, 0.95119, 0.94578, 0.88465, 1, 0.9005, 1.15012, 1, 1.08106, 0.669, 1, 1, 1, 1, 0.88465, 0.94578, 0.94578, 0.94578, 0.94578, 0.94578, 0.94578, 0.94578, 0.94578, 0.89903, 1, 0.65507, 0.9219, 1, 1, 1, 1, 0.77598, 1.12658, 1.15012, 0.75945, 1, 1, 1, 1, 0.9219, 1, 1, 1, 1, 1, 0.85034, 0.75945, 1, 1, 1, 1, 0.94578, 1, 0.91123, 0.91123, 0.91123, 0.91123, 0.94578, 0.94578, 0.91, 0.979, 0.979, 0.979, 0.979, 0.979, 0.882, 0.93559, 0.882, 0.882, 0.882, 0.882, 0.88465, 0.882, 0.83, 0.83, 0.83, 0.83, 0.88465, 0.84596];
+exports.MyriadProItalicFactors = MyriadProItalicFactors;
+const MyriadProItalicLineHeight = 1.2;
+exports.MyriadProItalicLineHeight = MyriadProItalicLineHeight;
+const MyriadProRegularFactors = [1.36898, 1, 0.91755, 0.788, 0.788, 0.91755, 0.91755, 0.91755, 0.91755, 0.91755, 0.91755, 0.92138, 0.91755, 0.91755, 0.91755, 0.91755, 0.91755, 0.8126, 0.8126, 0.80314, 0.80314, 0.80314, 0.80314, 0.80314, 0.80314, 0.85608, 0.92222, 0.92222, 0.92915, 0.92819, 0.73764, 0.73764, 0.73764, 0.73764, 0.73764, 0.73764, 0.73764, 0.73764, 0.73764, 0.90991, 0.73764, 0.73764, 0.7154, 0.90284, 0.86169, 0.92915, 0.92241, 0.79726, 0.83051, 0.81884, 0.83051, 0.83051, 1, 0.83051, 0.90284, 1, 1, 1, 1, 0.90976, 0.90284, 0.86023, 0.82873, 0.86023, 0.86023, 0.86023, 0.86023, 0.86023, 0.86023, 0.86023, 0.86023, 0.86023, 0.86023, 0.80513, 0.86023, 0.74, 0.74, 0.8126, 0.8126, 1, 0.84869, 0.84869, 0.91172, 0.84869, 1, 0.84869, 0.85588, 0.96518, 0.96518, 0.91115, 0.91115, 0.91115, 1, 0.91115, 0.91115, 0.8858, 0.894, 0.8858, 0.8858, 0.8858, 0.8858, 0.8858, 0.8858, 0.8858, 0.94307, 0.98612, 0.8858, 0.94007, 0.8858, 0.8858, 0.8858, 0.79761, 0.89992, 0.87791, 0.81992, 0.8858, 0.74498, 0.74498, 0.74498, 1, 0.79761, 0.73914, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.73914, 0.73914, 1, 0.73914, 1, 0.89297, 0.81363, 0.81363, 0.81363, 0.81363, 1, 0.8858, 0.79611, 0.89591, 0.89591, 0.89591, 0.89591, 0.89591, 0.89591, 0.89591, 0.89591, 0.89591, 0.88157, 0.88157, 0.82528, 0.89591, 0.89591, 0.83659, 0.89633, 0.89633, 0.89633, 0.89633, 0.89633, 0.85608, 0.83089, 0.8111, 0.8111, 0.8111, 0.8111, 0.8111, 0.90531, 0.90531, 0.90531, 0.90531, 0.90531, 0.86667, 0.86667, 0.86667, 0.86667, 0.90088, 0.86667, 0.86936, 0.86936, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.86667, 0.95308, 0.95308, 0.86667, 0.90706, 0.78105, 0.86667, 1.08595, 0.86667, 0.86667, 1, 1, 1, 1, 1, 1, 1, 1.27014, 1.02058, 1.0664, 0.72601, 0.86667, 1.0231, 1.22736, 0.92006, 0.97358, 1, 0.85034, 0.85034, 1.0222, 1.0222, 0.90088, 0.92006, 0.80549, 0.896, 0.896, 0.90088, 0.896, 0.896, 0.896, 0.896, 0.90088, 0.92241, 0.87064, 1, 0.90088, 1, 0.74505, 0.74505, 0.91882, 0.92241, 1.01411, 0.89903, 0.89903, 0.93372, 1.01411, 0.79519, 0.98088, 1, 0.90088, 1.03901, 1.08595, 1, 1, 0.92241, 0.90088, 0.84224, 0.90083, 0.90083, 0.90083, 0.90083, 0.90083, 0.90083, 0.90083, 0.90083, 0.92241, 1, 0.90083, 1, 0.89903, 0.99793, 0.90083, 0.98699, 0.98699, 1.02058, 1, 1.36145, 0.99793, 0.99793, 0.97276, 0.82784, 1, 0.69067, 1.05099, 1, 1, 1, 0.92241, 1, 0.92241, 0.92241, 1, 1.00512, 0.928, 1.00512, 1.00512, 1, 1.00512, 0.89713, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90088, 1.02058, 1.08595, 0.75339, 0.75339, 0.76575, 0.76575, 0.99793, 0.99793, 0.99793, 1, 1, 0.90088, 1.05326, 0.84224, 0.84224, 0.84224, 0.84224, 0.84224, 1.07469, 0.84224, 1.02119, 1.1536, 1, 1, 1, 1, 1, 1, 1.05326, 1.06226, 1.06226, 1.06226, 1.06226, 0.84224, 1.09377, 1.09377, 0.938, 0.986, 1, 0.938, 1.06226, 1.06226, 0.944, 0.83704, 1, 0.81441, 1.02058, 1.08595, 1, 1, 1.02058, 1, 1.05638, 1.08927, 1, 1.00119, 0.54324, 1, 1, 1.02058, 1, 0.95978, 1.02058, 1, 1, 0.99793, 0.99793, 0.91887, 0.99793, 1, 0.92241, 1, 1.08595, 0.99793, 0.938, 0.89364, 0.98714, 0.98714, 0.98714, 0.98714, 0.98714, 0.91434, 0.90088, 0.98714, 0.98714, 0.98714, 0.88888, 0.88888, 0.98714, 0.98714, 0.92241, 1, 0.91009, 0.91009, 1, 0.93484, 0.97198, 1, 0.89876, 0.89876, 0.98714, 1.0231, 0.95325, 0.85283, 0.85283, 1.07257, 0.89073, 0.74505, 1.156, 1, 0.99007, 0.80442, 1.02058, 1.08595, 0.74705, 0.91879, 1.01231, 0.73002, 0.66466, 0.94935, 1.06904, 1.06304, 1.06304, 0.93173, 1, 0.93173, 0.93173, 0.98472, 0.98196, 0.98196, 1.024, 0.98196, 1, 0.56866, 1, 0.98972, 0.90088, 1, 0.792, 0.792, 0.792, 1, 0.792, 1, 1, 0.9332, 0.92241, 1, 1, 0.89762, 1, 0.92241, 1.23456, 1, 1, 0.92241, 0.71119, 1, 1.19137, 1.04552, 1.19137, 0.904, 1, 0.96017, 1.0231, 0.92241, 1, 0.91009, 0.90088, 0.90388, 0.619, 1, 1, 1, 1, 0.92241, 0.99074, 0.99074, 0.99074, 0.99074, 0.99074, 0.99074, 0.99074, 0.99074, 0.89903, 1, 0.76305, 0.9219, 1, 1, 1, 1, 0.81363, 1.19137, 0.90088, 0.74505, 1, 1, 1, 1, 0.9219, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.72458, 0.74505, 1, 1, 1, 1, 1, 0.99074, 1, 0.95817, 0.95817, 0.95817, 0.95817, 0.99074, 0.99074, 0.962, 1.01915, 1.01915, 1.01915, 1.01915, 1.01915, 0.926, 0.96705, 0.942, 0.942, 0.942, 0.942, 0.92241, 0.942, 0.856, 0.856, 0.856, 0.856, 0.92241, 0.92761];
+exports.MyriadProRegularFactors = MyriadProRegularFactors;
+const MyriadProRegularLineHeight = 1.2;
+exports.MyriadProRegularLineHeight = MyriadProRegularLineHeight;
+
+/***/ }),
+/* 60 */
+/***/ ((__unused_webpack_module, exports) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.SegoeuiRegularLineHeight = exports.SegoeuiRegularFactors = exports.SegoeuiItalicLineHeight = exports.SegoeuiItalicFactors = exports.SegoeuiBoldLineHeight = exports.SegoeuiBoldItalicLineHeight = exports.SegoeuiBoldItalicFactors = exports.SegoeuiBoldFactors = void 0;
+const SegoeuiBoldFactors = [1.76738, 1, 0.97363, 0.93506, 0.93506, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, 1.01149, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, 0.88776, 0.88776, 0.8641, 0.8641, 0.8641, 0.8641, 0.8641, 0.8641, 0.98243, 1.02096, 1.02096, 1.02096, 0.97826, 0.79795, 0.79795, 0.79795, 0.79795, 0.79795, 0.79795, 0.79795, 0.79795, 0.79795, 1.09251, 0.79795, 0.79795, 0.7676, 1.06085, 0.98167, 1.02096, 1.03424, 0.85132, 0.914, 0.85134, 0.914, 0.914, 1, 0.914, 1.06085, 1, 0.99862, 0.99862, 1, 1.06085, 1.06085, 1.1406, 0.97138, 1.1406, 1.1406, 1.1406, 1.1406, 1.1406, 1.1406, 1.1406, 1.1406, 1.1406, 1.1406, 1.01134, 1.1406, 0.8007, 0.8007, 0.89858, 0.89858, 1, 0.83693, 0.83693, 1.0388, 0.83693, 1, 0.83693, 0.83693, 1.14889, 1.14889, 1.09398, 1.09398, 1.09398, 1, 1.09398, 1.09398, 0.97489, 0.93994, 0.97426, 0.97489, 0.97426, 0.97426, 0.97426, 0.97489, 0.97489, 0.95493, 1.03089, 0.97489, 1.02546, 0.97489, 0.97489, 0.97426, 0.92094, 0.99346, 1.0595, 1.02112, 0.97489, 0.90399, 0.90399, 0.90399, 1, 0.92094, 0.84041, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.84041, 0.84041, 0.84041, 0.84041, 1, 0.94793, 0.95923, 0.95923, 0.95923, 0.95923, 1, 0.97489, 0.92094, 1.00135, 1.00135, 1.00135, 1.00135, 1.00135, 1.00135, 1.00135, 1.00135, 1.00135, 0.90996, 0.90996, 0.84097, 1.00135, 1.00135, 1, 1.06467, 1.06467, 1.06467, 1.06467, 1.06467, 0.98243, 0.86039, 0.90996, 0.90996, 0.90996, 0.90996, 0.90996, 0.99361, 0.99361, 0.99361, 0.99361, 0.99361, 0.96752, 0.96752, 0.96752, 0.96752, 0.91056, 1, 0.96752, 0.93136, 0.93136, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.96752, 1.03574, 1.03574, 0.96752, 1.17647, 0.81525, 0.96752, 1.29004, 0.96752, 0.96752, 0.86182, 0.94434, 0.86279, 0.86279, 0.94434, 1, 1, 1.2107, 1.2107, 1.16939, 0.97847, 0.96752, 1.01519, 1.56942, 1.16579, 1.0192, 1, 0.94856, 0.94856, 1.1085, 1.1085, 1.03959, 1, 1.16579, 1.20642, 0.86304, 0.86304, 1.15103, 1, 1, 0.86304, 0.86304, 0.86304, 0.86304, 0.64663, 1.03424, 0.96268, 1.42603, 1.15103, 1, 1.04315, 0.81378, 0.9754, 1, 1, 1.18622, 1, 1, 1.01359, 0.73047, 0.73047, 1.03057, 1.03517, 0.94994, 1.00886, 1.34163, 1.3871, 1, 0.87815, 1.28826, 1, 1, 1.03424, 0.75953, 1.02285, 0.97278, 0.97278, 0.97278, 0.97278, 0.97278, 0.97278, 0.97278, 0.97278, 1.03424, 1, 0.91211, 0.97278, 1, 0.89903, 0.99041, 0.97278, 0.97531, 1.02597, 1.2107, 1.21172, 1, 1.0008, 1.0008, 0.97122, 0.9824, 0.96039, 0.9824, 1.15103, 1, 1.42603, 1, 1.03424, 1.15749, 1, 1.03424, 1.03424, 1, 0.93503, 1.01359, 1.01932, 1.01359, 1.01359, 1, 1.01359, 1.02798, 0.94282, 1, 1.2107, 1.29004, 1.04478, 1.04478, 1.03372, 1.03372, 0.98561, 1.00879, 0.98561, 1.15296, 1, 1.21994, 1, 1.02285, 1.02285, 1.02285, 1.02285, 1.02285, 1.02285, 1.08692, 1.02285, 1.13973, 2.10339, 1, 1, 0.9716, 1.42603, 1.42603, 1, 1.02285, 1.18102, 1.18102, 1.18102, 1.18102, 1.02285, 1.02285, 1.02285, 1.00527, 1.02277, 1, 1.00527, 1.02285, 1.02285, 0.98683, 0.9455, 1, 0.90418, 1.2107, 1.29004, 1, 1.03424, 1.2107, 1.07733, 1.18874, 1.13005, 1, 1.0302, 0.75155, 1, 1, 1.2107, 1.222, 1.0016, 1.2107, 1, 1, 0.99041, 0.99041, 0.96692, 0.99041, 1, 1.03424, 1, 1.29004, 0.99041, 0.99561, 1.06497, 1.0008, 1, 1.0008, 1, 1, 0.97931, 0.79912, 1, 1.0008, 1.0008, 0.98439, 0.98439, 1.0008, 1.0008, 1.03424, 1.15749, 1.15749, 1.14169, 0.99862, 1.10818, 1.24866, 0.69825, 1.0008, 1.0008, 1, 1.01519, 0.91572, 1.1085, 1.1085, 1.16897, 0.97529, 0.9754, 1.25635, 1.19687, 1.04983, 0.90434, 1.2107, 1.28826, 0.96085, 1.0499, 1.01359, 0.71703, 0.71703, 1.04016, 0.98633, 0.98633, 0.98633, 1.04394, 1.04394, 1.04394, 1.04394, 1.23203, 1.02258, 1.02258, 1.18416, 1.02258, 1, 1.18622, 1, 0.99921, 0.81378, 1, 0.79104, 0.79104, 0.79104, 0.79104, 0.79104, 1, 1.02956, 0.8727, 1.03424, 1.10948, 1, 1, 0.8965, 0.93803, 1.03424, 1.59578, 1, 1.2886, 1.03424, 0.90137, 1, 1.16862, 1.23085, 1.16862, 1.07034, 1, 1.13189, 1.01519, 1.03424, 1.15749, 1.17389, 1.15103, 1, 0.95161, 0.771, 0.87025, 0.87025, 0.87025, 0.87025, 1.03424, 0.99041, 0.99041, 0.99041, 0.99041, 0.99041, 0.99041, 0.99041, 0.99041, 0.74627, 0.75155, 0.99297, 1.21408, 1.21408, 1.21408, 1, 1.18328, 0.95923, 1.16862, 1.01173, 0.81378, 0.79795, 1.09466, 0.97278, 1.02065, 1, 1.21408, 1.24633, 1.12454, 1, 1, 1, 0.9754, 1, 1, 1.09193, 1.09193, 0.99041, 1, 1.06628, 1.06628, 1.06628, 1.06628, 0.99041, 0.99041, 0.97454, 1.02511, 1.02511, 1.02511, 1.02511, 1.02511, 0.99298, 1.07237, 0.96752, 0.96752, 0.96752, 0.96752, 1.03424, 0.96752, 0.95801, 0.95801, 0.95801, 0.95801, 1.03424, 1.0106];
+exports.SegoeuiBoldFactors = SegoeuiBoldFactors;
+const SegoeuiBoldLineHeight = 1.33008;
+exports.SegoeuiBoldLineHeight = SegoeuiBoldLineHeight;
+const SegoeuiBoldItalicFactors = [1.76738, 1, 0.97363, 0.94385, 0.94385, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, 1.00811, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, 0.89723, 0.89723, 0.87897, 0.87897, 0.87897, 0.87897, 0.87897, 0.87897, 0.9817, 1.0426, 1.0426, 1.0426, 1.09818, 0.79429, 0.79429, 0.79429, 0.79429, 0.79429, 0.79429, 0.79429, 0.79429, 0.79429, 1.10466, 0.79429, 0.79429, 0.77702, 1.05815, 0.99137, 1.0426, 1.036, 0.85292, 0.91149, 0.86869, 0.91149, 0.91149, 1, 0.91149, 1.05815, 1, 0.99862, 0.99862, 1, 1.05815, 1.05815, 1.1406, 0.97441, 1.1406, 1.1406, 1.1406, 1.1406, 1.1406, 1.1406, 1.1406, 1.1406, 1.1406, 1.1406, 0.95253, 1.1406, 0.79631, 0.79631, 0.90128, 0.90128, 1, 0.83853, 0.83853, 1.06662, 0.83853, 1, 0.83853, 0.83853, 1.04396, 1.04396, 1.10615, 1.10615, 1.10615, 1, 1.10615, 1.10615, 0.97552, 0.91602, 0.97552, 0.97552, 0.97552, 0.97552, 0.97552, 0.97552, 0.97552, 0.98999, 1.07205, 0.97552, 1.0347, 0.97552, 0.97552, 0.97552, 0.94436, 1.00356, 1.04694, 1.01945, 0.97552, 0.88641, 0.88641, 0.88641, 1, 0.94436, 0.80527, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.80527, 0.80527, 0.80527, 0.80527, 1, 0.98015, 0.96083, 0.96083, 0.95923, 0.96083, 1, 0.97552, 0.94436, 1.00135, 1.00135, 1.00135, 1.00135, 1.00135, 1.00135, 1.00135, 1.00135, 1.00135, 0.91142, 0.91142, 0.86142, 1.00135, 1.00135, 1, 1.06777, 1.06777, 1.06777, 1.06777, 1.06777, 0.9817, 0.84918, 0.91142, 0.91142, 0.91142, 0.91142, 0.91142, 0.99361, 0.99361, 0.99361, 0.99361, 0.99361, 1.06585, 1.06585, 1.06585, 1.06585, 1.31818, 1, 1.06585, 0.96705, 0.96705, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.06585, 1.04961, 1.04961, 1.06585, 1.10953, 0.83284, 1.06585, 1.29004, 1.06585, 1.06585, 0.86224, 0.94434, 0.86364, 0.86279, 0.94434, 1, 1, 1.21237, 1.21237, 1.16939, 0.97847, 1.06585, 0.97042, 1.57293, 1.16579, 0.99607, 1, 0.95107, 0.95107, 1.11144, 1.11144, 1.31818, 1, 1.16579, 1.20502, 0.83055, 0.83055, 1.31818, 1, 1, 0.83055, 0.83055, 0.83055, 0.83055, 1.31818, 1.036, 0.93491, 1.42603, 1.31818, 1, 1.04315, 0.81378, 0.9754, 1, 1, 1.18754, 1, 1, 0.97042, 0.72959, 0.72959, 1.0033, 0.97042, 0.94994, 1.008, 1.34163, 1.31818, 1, 1.27126, 1.29004, 1, 1, 1.036, 1.31818, 1.14236, 0.93503, 0.93503, 0.93503, 0.93503, 0.93503, 0.93503, 0.93503, 0.93503, 1.036, 1, 0.91406, 0.93503, 1, 0.89903, 0.97922, 0.93503, 0.9898, 0.9898, 1.21237, 1.21339, 1, 1.00639, 1.00639, 0.93125, 1.03959, 0.96039, 1.03959, 1.1261, 1, 1.42603, 1, 1.036, 1.15574, 1, 1.036, 1.036, 1, 0.93327, 0.97042, 1.02897, 0.97042, 0.97042, 1, 0.97042, 0.98721, 1.31818, 1, 1.21237, 1.29004, 1.05356, 1.05356, 1.03372, 1.03372, 0.97922, 0.97922, 0.97922, 1.15296, 1, 1.31818, 1, 1.14236, 1.14236, 1.14236, 1.14236, 1.14236, 1.14236, 1.04302, 1.14236, 1.13904, 2.10339, 1, 1, 0.9716, 1.42603, 1.42603, 1, 1.14236, 1.14236, 1.14236, 1.14236, 1.14236, 1.14236, 0.94552, 1.01582, 1.01054, 1.00518, 1, 1.01054, 1.14236, 1.14236, 0.97981, 1.09125, 1, 0.90418, 1.21237, 1.29004, 1, 1.03336, 1.21237, 1.23199, 1.18775, 1.19508, 1, 1.02471, 0.79487, 1, 1, 1.21237, 1.222, 1.02186, 1.21237, 1, 1, 0.97922, 0.97922, 1.01034, 0.97922, 1, 1.036, 1, 1.29004, 0.97922, 1, 1.02809, 0.94165, 0.94165, 0.94165, 0.94165, 0.94165, 0.91981, 1.31818, 0.94165, 0.94165, 0.94165, 1.00351, 1.00351, 0.94165, 0.94165, 1.036, 1.15574, 1.15574, 1.13934, 0.99862, 1.26781, 1.24866, 0.69825, 0.94165, 0.94165, 0.94165, 0.97042, 0.91484, 1.11144, 1.11144, 1.16798, 0.97639, 0.9754, 1.26514, 1.16541, 1.10687, 0.99314, 1.21237, 1.29004, 0.96085, 1.04232, 0.97042, 0.73541, 0.73541, 1.04016, 0.98633, 0.98633, 0.98633, 1.04745, 1.04394, 1.04745, 1.04745, 1.23203, 1.0276, 1.0276, 1.18416, 1.0276, 1, 1.18622, 1, 0.98387, 1.31818, 1, 0.78929, 0.78929, 0.78929, 0.78929, 0.78929, 1, 1.02956, 0.87357, 1.036, 1.15574, 1, 1, 0.93377, 0.93028, 1.036, 1.59754, 1, 1.2886, 1.036, 0.90068, 1, 1.1261, 1.35125, 1.16862, 1.05403, 1, 1.11121, 0.97042, 1.036, 1.15574, 1.17389, 1.31818, 1, 0.95161, 0.771, 0.87025, 0.87025, 0.87025, 0.87025, 1.036, 0.97922, 0.97922, 0.97922, 0.97922, 0.97922, 0.97922, 0.97922, 0.97922, 0.74627, 0.75155, 0.98946, 1.21261, 1.24047, 1.24047, 1, 1.1349, 0.96083, 1.1261, 1.31818, 0.81378, 0.79429, 1.09097, 0.93503, 0.96609, 1, 1.21261, 1.24633, 1.09125, 1, 1, 1, 0.9754, 1, 1, 1.13269, 1.13269, 0.97922, 1, 1.07514, 1.07514, 1.07514, 1.07514, 0.97922, 0.97922, 0.95874, 1.02197, 1.02197, 1.02197, 1.02197, 1.02197, 0.98507, 1.08578, 0.96752, 0.96752, 0.96752, 0.96752, 1.036, 0.96752, 0.97168, 0.97168, 0.97168, 0.97168, 1.036, 0.95134];
+exports.SegoeuiBoldItalicFactors = SegoeuiBoldItalicFactors;
+const SegoeuiBoldItalicLineHeight = 1.33008;
+exports.SegoeuiBoldItalicLineHeight = SegoeuiBoldItalicLineHeight;
+const SegoeuiItalicFactors = [1.76738, 1, 0.94729, 0.85498, 0.85498, 0.94729, 0.94729, 0.94729, 0.94729, 0.94729, 0.94729, 0.94729, 0.94729, 0.94729, 0.94729, 0.94729, 0.94729, 0.85944, 0.85944, 0.88506, 0.88506, 0.88506, 0.88506, 0.88506, 0.88506, 0.8858, 0.9858, 0.9858, 0.9858, 0.9607, 0.74817, 0.74817, 0.74817, 0.74817, 0.74817, 0.74817, 0.74817, 0.74817, 0.74817, 1.03849, 0.74817, 0.74817, 0.71022, 0.98039, 0.90883, 0.9858, 0.96927, 0.80016, 0.88449, 0.82791, 0.88449, 0.88449, 1, 0.88449, 0.98039, 1, 0.99862, 0.99862, 1, 0.98039, 0.98039, 0.95782, 0.84421, 0.95782, 0.95782, 0.95782, 0.95782, 0.95782, 0.95782, 0.95782, 0.95782, 0.95782, 0.95782, 0.84171, 0.95782, 0.69238, 0.69238, 0.89898, 0.89898, 1, 0.83231, 0.83231, 0.98316, 0.84723, 1, 0.84723, 0.83231, 0.98183, 0.98183, 1.03989, 1.03989, 1.03989, 1, 1.03989, 1.03989, 0.96924, 0.92383, 0.96924, 0.96924, 0.96924, 0.96924, 0.96924, 0.96924, 0.96924, 1.01284, 1.05734, 0.96924, 0.99877, 0.96924, 0.96924, 0.96924, 0.86237, 0.90082, 0.97642, 0.97296, 0.96924, 0.80595, 0.80595, 0.80595, 1, 0.86237, 0.74524, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.74524, 0.74524, 0.74524, 0.74524, 1, 0.86075, 0.86091, 0.86091, 0.85771, 0.86091, 1, 0.96924, 0.86237, 0.95402, 0.95402, 0.95402, 0.95402, 0.95402, 0.95402, 0.95402, 0.95402, 0.95402, 0.83089, 0.83089, 0.77596, 0.95402, 0.95402, 0.94143, 0.98448, 0.98448, 0.98448, 0.98448, 0.98448, 0.8858, 0.78614, 0.83089, 0.83089, 0.83089, 0.83089, 0.83089, 0.93285, 0.93285, 0.93285, 0.93285, 0.93285, 0.97454, 0.97454, 0.97454, 0.97454, 1.04839, 1, 0.97454, 0.92916, 0.92916, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.97454, 1.0976, 1.0976, 0.97454, 1.15373, 0.78032, 0.97454, 1.24822, 0.97454, 0.97454, 0.86182, 0.94434, 0.86321, 0.8649, 0.94434, 1, 1, 1.45994, 1.17308, 1.07403, 0.94565, 0.97454, 0.97454, 1.39016, 0.92481, 0.98205, 1, 0.91082, 0.91082, 1.0949, 1.0949, 1.04839, 1, 0.92481, 1.15621, 0.87207, 0.87207, 1.04839, 1, 1, 0.87207, 0.87207, 0.87207, 0.87207, 1.04839, 0.96927, 0.99821, 1.42603, 1.04839, 1, 1.04315, 0.78383, 0.78383, 1, 1, 1.23393, 1, 1, 0.97454, 0.67603, 0.67603, 0.95391, 0.97454, 0.94261, 1.05097, 1.34163, 1.04839, 1, 0.81965, 1.24822, 1, 1, 0.96927, 1.04839, 0.93146, 0.87533, 0.87533, 0.87533, 0.87533, 0.87533, 0.87533, 0.87533, 0.87533, 0.96927, 1, 0.73584, 0.87533, 1, 0.89903, 1.01054, 0.87533, 1.04, 1.04, 1.17308, 1.17308, 1, 1.03342, 1.03342, 0.93854, 1.14763, 0.95996, 0.95748, 1.06151, 1, 1.42603, 1, 0.96927, 1.09836, 1, 0.96927, 0.96927, 1, 0.87709, 0.97454, 1.03809, 0.97454, 0.97454, 1, 0.97454, 0.88409, 1.04839, 1, 1.17308, 1.24822, 0.9245, 0.9245, 0.94868, 0.94868, 1.00176, 1.00176, 1.00176, 1.15296, 1, 1.04839, 1, 1.16484, 0.93146, 0.93146, 0.93146, 0.93146, 0.93146, 1.12761, 0.93146, 1.14589, 1.96791, 1, 1, 0.97622, 1.42603, 1.42603, 1, 1.16484, 1.2, 1.2, 1.2, 1.2, 0.93146, 1.08132, 1.08132, 0.98047, 1.02148, 1, 0.98047, 1.16484, 1.16484, 1.0119, 1.04861, 1, 0.78755, 1.17308, 1.24822, 1, 0.96927, 1.17308, 1.31868, 1.17984, 1.23736, 1, 1.02989, 0.63218, 1, 1, 1.17308, 1.22135, 1.04724, 1.17308, 1, 1, 1.01054, 1.01054, 0.9857, 1.01054, 1, 0.96927, 1, 1.24822, 1.01054, 1.0127, 1.06234, 0.96225, 0.96225, 0.96225, 0.96225, 0.96225, 0.90171, 1.04839, 0.96225, 0.96225, 0.96225, 1.0326, 1.0326, 0.96225, 0.96225, 0.96927, 1.09836, 1.13525, 1.09836, 0.99862, 1.1781, 1.22326, 0.69825, 0.8761, 0.8761, 0.96225, 0.97454, 0.85273, 0.91349, 0.91349, 1.083, 0.92586, 0.78383, 1.21191, 1.01473, 1.11826, 0.8965, 1.17308, 1.24822, 0.91578, 1.0557, 0.97454, 0.77349, 0.70424, 1.05365, 1.12317, 1.12317, 1.12317, 0.94945, 0.94945, 0.94945, 0.94945, 1.18414, 1.06598, 1.06598, 1.18416, 1.06598, 1, 1.20808, 1, 0.97783, 1.04839, 1, 0.79004, 0.79004, 0.79004, 0.79004, 0.79004, 1, 1.06483, 0.80597, 0.96927, 1.01522, 1, 1, 0.94818, 0.93574, 0.96927, 1.42531, 1, 1.2886, 0.96927, 0.86438, 1, 1.16344, 1.30679, 1.16344, 1.02759, 1, 1.05401, 0.97454, 0.96927, 1.09836, 1.15222, 1.04839, 1, 0.81965, 0.77295, 0.87025, 0.87025, 0.87025, 0.87025, 0.96927, 1.00351, 1.00351, 1.00351, 1.00351, 1.00351, 1.00351, 1.00351, 1.00351, 0.74627, 0.75155, 0.98946, 1.20088, 1.09971, 1.09971, 1, 1.09971, 0.86091, 1.16344, 1.04839, 0.78383, 0.74817, 1.03754, 0.87533, 0.98705, 1, 1.20088, 1.24633, 1.07497, 1, 1, 1, 0.78032, 1, 1, 1.10742, 1.10742, 1.00351, 1, 1.0675, 1.0675, 1.0675, 1.0675, 1.00351, 1.00351, 0.94629, 0.9973, 0.9973, 0.9973, 0.9973, 0.9973, 0.91016, 1.02732, 0.96777, 0.96777, 0.96777, 0.96777, 0.96927, 0.96777, 0.9043, 0.9043, 0.9043, 0.9043, 0.96927, 0.95364];
+exports.SegoeuiItalicFactors = SegoeuiItalicFactors;
+const SegoeuiItalicLineHeight = 1.33008;
+exports.SegoeuiItalicLineHeight = SegoeuiItalicLineHeight;
+const SegoeuiRegularFactors = [1.76738, 1, 0.96706, 0.86035, 0.86035, 0.96706, 0.96706, 0.96706, 0.96706, 0.96706, 0.96706, 0.96635, 0.96706, 0.96706, 0.96706, 0.96706, 0.96706, 0.85944, 0.85944, 0.85734, 0.85734, 0.85734, 0.85734, 0.85734, 0.85734, 0.88433, 0.97093, 0.97093, 0.97093, 0.96491, 0.75842, 0.75842, 0.75842, 0.75842, 0.75842, 0.75842, 0.75842, 0.75842, 0.75842, 1.03444, 0.75842, 0.75842, 0.72727, 0.9831, 0.92366, 0.97093, 0.96927, 0.79936, 0.88198, 0.85638, 0.88198, 0.88198, 1, 0.88198, 0.9831, 1, 0.99862, 0.99862, 1, 0.9831, 0.9831, 0.95782, 0.84784, 0.95782, 0.95782, 0.95782, 0.95782, 0.95782, 0.95782, 0.95782, 0.95782, 0.95782, 0.95782, 0.98601, 0.95782, 0.71387, 0.71387, 0.86969, 0.86969, 1, 0.84636, 0.84636, 0.94152, 0.84636, 1, 0.84636, 0.84636, 1.07796, 1.07796, 1.03584, 1.03584, 1.03584, 1, 1.03584, 1.03584, 0.96924, 0.93066, 0.96924, 0.96924, 0.96924, 0.96924, 0.96924, 0.96924, 0.96924, 1.0098, 1.09799, 0.96924, 1.03405, 0.96924, 0.96924, 0.96924, 0.83968, 0.94492, 0.98715, 0.9287, 0.96924, 0.82826, 0.82826, 0.82826, 1, 0.83968, 0.79649, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.79649, 0.79649, 0.79649, 0.79649, 1, 0.83491, 0.85771, 0.85771, 0.85771, 0.85771, 1, 0.96924, 0.83968, 0.95132, 0.95132, 0.95132, 0.95132, 0.95132, 0.95132, 0.95132, 0.95132, 0.95132, 0.8287, 0.8287, 0.77968, 0.95132, 0.95132, 0.93119, 0.98965, 0.98965, 0.98965, 0.98965, 0.98965, 0.88433, 0.78437, 0.8287, 0.8287, 0.8287, 0.8287, 0.8287, 0.93365, 0.93365, 0.93365, 0.93365, 0.93365, 0.91484, 0.91484, 0.91484, 0.91484, 0.84751, 0.91484, 0.93575, 0.93575, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.91484, 1.0625, 1.0625, 0.91484, 1.19985, 0.78032, 0.91484, 1.24822, 0.91484, 0.91484, 0.86182, 0.94434, 0.86279, 0.86279, 0.94434, 1, 1, 1.45786, 1.1714, 1.07152, 0.94084, 0.91484, 1.05707, 1.3638, 0.92105, 0.95246, 1, 0.90351, 0.90351, 1.08612, 1.08612, 0.91202, 0.92105, 1.16039, 0.92383, 0.92383, 1.11437, 0.92383, 0.92383, 0.92383, 0.92383, 0.61584, 0.96927, 1.02512, 1.42603, 1.11437, 1.04315, 0.78032, 0.78032, 1.20808, 0.99912, 1.05882, 0.67428, 0.67428, 1.0969, 1.05882, 0.94261, 1.04912, 1.34163, 1.2434, 0.81818, 1.24644, 1, 1, 0.96927, 0.60411, 0.8717, 0.9403, 0.9403, 0.9403, 0.9403, 0.9403, 0.9403, 0.9403, 0.9403, 0.96927, 0.73291, 0.9403, 1, 0.89903, 1.01756, 0.9403, 0.98248, 0.98248, 1.1714, 1.17238, 1, 1.03424, 1.03424, 1.00527, 1.02285, 0.95996, 0.85337, 1.12654, 1, 1.42603, 1, 0.96927, 1.11358, 0.96927, 0.96927, 0.87796, 1.05882, 1.03809, 1.05882, 1.05882, 1, 1.05882, 0.89049, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.80499, 1.1714, 1.24822, 0.90957, 0.90957, 0.94868, 0.94868, 1.01756, 1.01756, 1.01756, 1.15296, 1, 0.97361, 1.09011, 0.8717, 0.8717, 0.8717, 0.8717, 0.8717, 1.11551, 0.8717, 1.14589, 1.9697, 1, 1, 0.97622, 1.42603, 1.42603, 1, 1.09011, 1.2, 1.2, 1.2, 1.2, 0.8717, 1.09011, 1.09011, 0.99414, 1.04785, 1, 0.99414, 1.09011, 1.09011, 0.99609, 1.0536, 1, 0.94298, 1.1714, 1.24822, 1, 0.96927, 1.1714, 1.08571, 1.18083, 1.23297, 1, 1.034, 0.75155, 1, 1, 1.1714, 1.22135, 1.00169, 1.1714, 1, 1, 1.01756, 1.01756, 1.00323, 1.01756, 1, 0.96927, 1, 1.24822, 1.01756, 1.05176, 1.06234, 1.05356, 1.05356, 1.05356, 1.05356, 1.05356, 0.98293, 0.55572, 1.05356, 1.05356, 1.05356, 1.03502, 1.03502, 1.05356, 1.05356, 0.96927, 1.10539, 1.11593, 1.08665, 0.99862, 1.05937, 1.17914, 0.69825, 0.95923, 0.95923, 1.05356, 1.05707, 0.85273, 0.90616, 0.90616, 1.083, 0.92037, 0.78032, 1.20996, 1.01518, 1.07831, 0.9087, 1.1714, 1.24644, 0.91578, 1.05205, 1.05882, 0.80597, 0.73381, 1.10454, 1.13196, 1.13196, 1.13196, 1.03077, 1.03077, 1.03077, 1.03077, 1.2046, 1.04399, 1.04399, 1.18416, 1.04399, 1, 1.20808, 1, 1.03004, 0.84164, 1, 0.84863, 0.84863, 0.84863, 0.84863, 0.84863, 1, 1.06483, 0.80597, 0.96927, 1.06967, 1, 0.93117, 0.95542, 0.96927, 1.40246, 1, 1.2886, 0.96927, 0.86507, 1, 1.21968, 1.23362, 1.21968, 1.17318, 1, 1.05443, 1.05707, 0.96927, 1.10539, 1.14169, 1.01173, 0.81818, 0.77295, 0.87025, 0.87025, 0.87025, 0.87025, 0.96927, 1.01756, 1.01756, 1.01756, 1.01756, 1.01756, 1.01756, 1.01756, 1.01756, 0.74627, 0.75155, 0.98594, 1.20088, 1.09971, 1.09971, 1, 1.05425, 0.85771, 1.21968, 0.93109, 0.78032, 0.75842, 1.03719, 0.9403, 1.04021, 1, 1.20088, 1.24633, 1.05425, 1.09971, 1.09971, 1.09971, 1.07497, 1, 1, 1, 0.78032, 1, 1, 1, 1.10938, 1.10938, 1.01756, 1, 1.01071, 1.01071, 1.01071, 1.01071, 1.01756, 1.01756, 0.95801, 1.00068, 1.00068, 1.00068, 1.00068, 1.00068, 0.91797, 0.99346, 0.96777, 0.96777, 0.96777, 0.96777, 0.96927, 0.96777, 0.9043, 0.9043, 0.9043, 0.9043, 0.96927, 1.00221];
+exports.SegoeuiRegularFactors = SegoeuiRegularFactors;
+const SegoeuiRegularLineHeight = 1.33008;
+exports.SegoeuiRegularLineHeight = SegoeuiRegularLineHeight;
+
+/***/ }),
+/* 61 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
exports.MurmurHash3_64 = void 0;
var _util = __w_pdfjs_require__(2);
@@ -46220,7 +50720,7 @@ class MurmurHash3_64 {
}
}
} else if ((0, _util.isArrayBuffer)(input)) {
- data = input;
+ data = input.slice();
length = data.byteLength;
} else {
throw new Error("Wrong data format in MurmurHash3_64_update. " + "Input must be a string or array.");
@@ -46305,28 +50805,682 @@ class MurmurHash3_64 {
exports.MurmurHash3_64 = MurmurHash3_64;
/***/ }),
-/* 45 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 62 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
-"use strict";
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
value: true
+}));
+exports.OperatorList = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+function addState(parentState, pattern, checkFn, iterateFn, processFn) {
+ let state = parentState;
+
+ for (let i = 0, ii = pattern.length - 1; i < ii; i++) {
+ const item = pattern[i];
+ state = state[item] || (state[item] = []);
+ }
+
+ state[pattern[pattern.length - 1]] = {
+ checkFn,
+ iterateFn,
+ processFn
+ };
+}
+
+function handlePaintSolidColorImageMask(iFirstSave, count, fnArray, argsArray) {
+ const iFirstPIMXO = iFirstSave + 2;
+ let i;
+
+ for (i = 0; i < count; i++) {
+ const arg = argsArray[iFirstPIMXO + 4 * i];
+ const imageMask = arg.length === 1 && arg[0];
+
+ if (imageMask && imageMask.width === 1 && imageMask.height === 1 && (!imageMask.data.length || imageMask.data.length === 1 && imageMask.data[0] === 0)) {
+ fnArray[iFirstPIMXO + 4 * i] = _util.OPS.paintSolidColorImageMask;
+ continue;
+ }
+
+ break;
+ }
+
+ return count - i;
+}
+
+const InitialState = [];
+addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintInlineImageXObject, _util.OPS.restore], null, function iterateInlineImageGroup(context, i) {
+ const fnArray = context.fnArray;
+ const iFirstSave = context.iCurr - 3;
+ const pos = (i - iFirstSave) % 4;
+
+ switch (pos) {
+ case 0:
+ return fnArray[i] === _util.OPS.save;
+
+ case 1:
+ return fnArray[i] === _util.OPS.transform;
+
+ case 2:
+ return fnArray[i] === _util.OPS.paintInlineImageXObject;
+
+ case 3:
+ return fnArray[i] === _util.OPS.restore;
+ }
+
+ throw new Error(`iterateInlineImageGroup - invalid pos: ${pos}`);
+}, function foundInlineImageGroup(context, i) {
+ const MIN_IMAGES_IN_INLINE_IMAGES_BLOCK = 10;
+ const MAX_IMAGES_IN_INLINE_IMAGES_BLOCK = 200;
+ const MAX_WIDTH = 1000;
+ const IMAGE_PADDING = 1;
+ const fnArray = context.fnArray,
+ argsArray = context.argsArray;
+ const curr = context.iCurr;
+ const iFirstSave = curr - 3;
+ const iFirstTransform = curr - 2;
+ const iFirstPIIXO = curr - 1;
+ const count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_INLINE_IMAGES_BLOCK);
+
+ if (count < MIN_IMAGES_IN_INLINE_IMAGES_BLOCK) {
+ return i - (i - iFirstSave) % 4;
+ }
+
+ let maxX = 0;
+ const map = [];
+ let maxLineHeight = 0;
+ let currentX = IMAGE_PADDING,
+ currentY = IMAGE_PADDING;
+
+ for (let q = 0; q < count; q++) {
+ const transform = argsArray[iFirstTransform + (q << 2)];
+ const img = argsArray[iFirstPIIXO + (q << 2)][0];
+
+ if (currentX + img.width > MAX_WIDTH) {
+ maxX = Math.max(maxX, currentX);
+ currentY += maxLineHeight + 2 * IMAGE_PADDING;
+ currentX = 0;
+ maxLineHeight = 0;
+ }
+
+ map.push({
+ transform,
+ x: currentX,
+ y: currentY,
+ w: img.width,
+ h: img.height
+ });
+ currentX += img.width + 2 * IMAGE_PADDING;
+ maxLineHeight = Math.max(maxLineHeight, img.height);
+ }
+
+ const imgWidth = Math.max(maxX, currentX) + IMAGE_PADDING;
+ const imgHeight = currentY + maxLineHeight + IMAGE_PADDING;
+ const imgData = new Uint8ClampedArray(imgWidth * imgHeight * 4);
+ const imgRowSize = imgWidth << 2;
+
+ for (let q = 0; q < count; q++) {
+ const data = argsArray[iFirstPIIXO + (q << 2)][0].data;
+ const rowSize = map[q].w << 2;
+ let dataOffset = 0;
+ let offset = map[q].x + map[q].y * imgWidth << 2;
+ imgData.set(data.subarray(0, rowSize), offset - imgRowSize);
+
+ for (let k = 0, kk = map[q].h; k < kk; k++) {
+ imgData.set(data.subarray(dataOffset, dataOffset + rowSize), offset);
+ dataOffset += rowSize;
+ offset += imgRowSize;
+ }
+
+ imgData.set(data.subarray(dataOffset - rowSize, dataOffset), offset);
+
+ while (offset >= 0) {
+ data[offset - 4] = data[offset];
+ data[offset - 3] = data[offset + 1];
+ data[offset - 2] = data[offset + 2];
+ data[offset - 1] = data[offset + 3];
+ data[offset + rowSize] = data[offset + rowSize - 4];
+ data[offset + rowSize + 1] = data[offset + rowSize - 3];
+ data[offset + rowSize + 2] = data[offset + rowSize - 2];
+ data[offset + rowSize + 3] = data[offset + rowSize - 1];
+ offset -= imgRowSize;
+ }
+ }
+
+ fnArray.splice(iFirstSave, count * 4, _util.OPS.paintInlineImageXObjectGroup);
+ argsArray.splice(iFirstSave, count * 4, [{
+ width: imgWidth,
+ height: imgHeight,
+ kind: _util.ImageKind.RGBA_32BPP,
+ data: imgData
+ }, map]);
+ return iFirstSave + 1;
+});
+addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintImageMaskXObject, _util.OPS.restore], null, function iterateImageMaskGroup(context, i) {
+ const fnArray = context.fnArray;
+ const iFirstSave = context.iCurr - 3;
+ const pos = (i - iFirstSave) % 4;
+
+ switch (pos) {
+ case 0:
+ return fnArray[i] === _util.OPS.save;
+
+ case 1:
+ return fnArray[i] === _util.OPS.transform;
+
+ case 2:
+ return fnArray[i] === _util.OPS.paintImageMaskXObject;
+
+ case 3:
+ return fnArray[i] === _util.OPS.restore;
+ }
+
+ throw new Error(`iterateImageMaskGroup - invalid pos: ${pos}`);
+}, function foundImageMaskGroup(context, i) {
+ const MIN_IMAGES_IN_MASKS_BLOCK = 10;
+ const MAX_IMAGES_IN_MASKS_BLOCK = 100;
+ const MAX_SAME_IMAGES_IN_MASKS_BLOCK = 1000;
+ const fnArray = context.fnArray,
+ argsArray = context.argsArray;
+ const curr = context.iCurr;
+ const iFirstSave = curr - 3;
+ const iFirstTransform = curr - 2;
+ const iFirstPIMXO = curr - 1;
+ let count = Math.floor((i - iFirstSave) / 4);
+ count = handlePaintSolidColorImageMask(iFirstSave, count, fnArray, argsArray);
+
+ if (count < MIN_IMAGES_IN_MASKS_BLOCK) {
+ return i - (i - iFirstSave) % 4;
+ }
+
+ let isSameImage = false;
+ let iTransform, transformArgs;
+ const firstPIMXOArg0 = argsArray[iFirstPIMXO][0];
+ const firstTransformArg0 = argsArray[iFirstTransform][0],
+ firstTransformArg1 = argsArray[iFirstTransform][1],
+ firstTransformArg2 = argsArray[iFirstTransform][2],
+ firstTransformArg3 = argsArray[iFirstTransform][3];
+
+ if (firstTransformArg1 === firstTransformArg2) {
+ isSameImage = true;
+ iTransform = iFirstTransform + 4;
+ let iPIMXO = iFirstPIMXO + 4;
+
+ for (let q = 1; q < count; q++, iTransform += 4, iPIMXO += 4) {
+ transformArgs = argsArray[iTransform];
+
+ if (argsArray[iPIMXO][0] !== firstPIMXOArg0 || transformArgs[0] !== firstTransformArg0 || transformArgs[1] !== firstTransformArg1 || transformArgs[2] !== firstTransformArg2 || transformArgs[3] !== firstTransformArg3) {
+ if (q < MIN_IMAGES_IN_MASKS_BLOCK) {
+ isSameImage = false;
+ } else {
+ count = q;
+ }
+
+ break;
+ }
+ }
+ }
+
+ if (isSameImage) {
+ count = Math.min(count, MAX_SAME_IMAGES_IN_MASKS_BLOCK);
+ const positions = new Float32Array(count * 2);
+ iTransform = iFirstTransform;
+
+ for (let q = 0; q < count; q++, iTransform += 4) {
+ transformArgs = argsArray[iTransform];
+ positions[q << 1] = transformArgs[4];
+ positions[(q << 1) + 1] = transformArgs[5];
+ }
+
+ fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectRepeat);
+ argsArray.splice(iFirstSave, count * 4, [firstPIMXOArg0, firstTransformArg0, firstTransformArg1, firstTransformArg2, firstTransformArg3, positions]);
+ } else {
+ count = Math.min(count, MAX_IMAGES_IN_MASKS_BLOCK);
+ const images = [];
+
+ for (let q = 0; q < count; q++) {
+ transformArgs = argsArray[iFirstTransform + (q << 2)];
+ const maskParams = argsArray[iFirstPIMXO + (q << 2)][0];
+ images.push({
+ data: maskParams.data,
+ width: maskParams.width,
+ height: maskParams.height,
+ transform: transformArgs
+ });
+ }
+
+ fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectGroup);
+ argsArray.splice(iFirstSave, count * 4, [images]);
+ }
+
+ return iFirstSave + 1;
});
+addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintImageXObject, _util.OPS.restore], function (context) {
+ const argsArray = context.argsArray;
+ const iFirstTransform = context.iCurr - 2;
+ return argsArray[iFirstTransform][1] === 0 && argsArray[iFirstTransform][2] === 0;
+}, function iterateImageGroup(context, i) {
+ const fnArray = context.fnArray,
+ argsArray = context.argsArray;
+ const iFirstSave = context.iCurr - 3;
+ const pos = (i - iFirstSave) % 4;
+
+ switch (pos) {
+ case 0:
+ return fnArray[i] === _util.OPS.save;
+
+ case 1:
+ if (fnArray[i] !== _util.OPS.transform) {
+ return false;
+ }
+
+ const iFirstTransform = context.iCurr - 2;
+ const firstTransformArg0 = argsArray[iFirstTransform][0];
+ const firstTransformArg3 = argsArray[iFirstTransform][3];
+
+ if (argsArray[i][0] !== firstTransformArg0 || argsArray[i][1] !== 0 || argsArray[i][2] !== 0 || argsArray[i][3] !== firstTransformArg3) {
+ return false;
+ }
+
+ return true;
+
+ case 2:
+ if (fnArray[i] !== _util.OPS.paintImageXObject) {
+ return false;
+ }
+
+ const iFirstPIXO = context.iCurr - 1;
+ const firstPIXOArg0 = argsArray[iFirstPIXO][0];
+
+ if (argsArray[i][0] !== firstPIXOArg0) {
+ return false;
+ }
+
+ return true;
+
+ case 3:
+ return fnArray[i] === _util.OPS.restore;
+ }
+
+ throw new Error(`iterateImageGroup - invalid pos: ${pos}`);
+}, function (context, i) {
+ const MIN_IMAGES_IN_BLOCK = 3;
+ const MAX_IMAGES_IN_BLOCK = 1000;
+ const fnArray = context.fnArray,
+ argsArray = context.argsArray;
+ const curr = context.iCurr;
+ const iFirstSave = curr - 3;
+ const iFirstTransform = curr - 2;
+ const iFirstPIXO = curr - 1;
+ const firstPIXOArg0 = argsArray[iFirstPIXO][0];
+ const firstTransformArg0 = argsArray[iFirstTransform][0];
+ const firstTransformArg3 = argsArray[iFirstTransform][3];
+ const count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_BLOCK);
+
+ if (count < MIN_IMAGES_IN_BLOCK) {
+ return i - (i - iFirstSave) % 4;
+ }
+
+ const positions = new Float32Array(count * 2);
+ let iTransform = iFirstTransform;
+
+ for (let q = 0; q < count; q++, iTransform += 4) {
+ const transformArgs = argsArray[iTransform];
+ positions[q << 1] = transformArgs[4];
+ positions[(q << 1) + 1] = transformArgs[5];
+ }
+
+ const args = [firstPIXOArg0, firstTransformArg0, firstTransformArg3, positions];
+ fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageXObjectRepeat);
+ argsArray.splice(iFirstSave, count * 4, args);
+ return iFirstSave + 1;
+});
+addState(InitialState, [_util.OPS.beginText, _util.OPS.setFont, _util.OPS.setTextMatrix, _util.OPS.showText, _util.OPS.endText], null, function iterateShowTextGroup(context, i) {
+ const fnArray = context.fnArray,
+ argsArray = context.argsArray;
+ const iFirstSave = context.iCurr - 4;
+ const pos = (i - iFirstSave) % 5;
+
+ switch (pos) {
+ case 0:
+ return fnArray[i] === _util.OPS.beginText;
+
+ case 1:
+ return fnArray[i] === _util.OPS.setFont;
+
+ case 2:
+ return fnArray[i] === _util.OPS.setTextMatrix;
+
+ case 3:
+ if (fnArray[i] !== _util.OPS.showText) {
+ return false;
+ }
+
+ const iFirstSetFont = context.iCurr - 3;
+ const firstSetFontArg0 = argsArray[iFirstSetFont][0];
+ const firstSetFontArg1 = argsArray[iFirstSetFont][1];
+
+ if (argsArray[i][0] !== firstSetFontArg0 || argsArray[i][1] !== firstSetFontArg1) {
+ return false;
+ }
+
+ return true;
+
+ case 4:
+ return fnArray[i] === _util.OPS.endText;
+ }
+
+ throw new Error(`iterateShowTextGroup - invalid pos: ${pos}`);
+}, function (context, i) {
+ const MIN_CHARS_IN_BLOCK = 3;
+ const MAX_CHARS_IN_BLOCK = 1000;
+ const fnArray = context.fnArray,
+ argsArray = context.argsArray;
+ const curr = context.iCurr;
+ const iFirstBeginText = curr - 4;
+ const iFirstSetFont = curr - 3;
+ const iFirstSetTextMatrix = curr - 2;
+ const iFirstShowText = curr - 1;
+ const iFirstEndText = curr;
+ const firstSetFontArg0 = argsArray[iFirstSetFont][0];
+ const firstSetFontArg1 = argsArray[iFirstSetFont][1];
+ let count = Math.min(Math.floor((i - iFirstBeginText) / 5), MAX_CHARS_IN_BLOCK);
+
+ if (count < MIN_CHARS_IN_BLOCK) {
+ return i - (i - iFirstBeginText) % 5;
+ }
+
+ let iFirst = iFirstBeginText;
+
+ if (iFirstBeginText >= 4 && fnArray[iFirstBeginText - 4] === fnArray[iFirstSetFont] && fnArray[iFirstBeginText - 3] === fnArray[iFirstSetTextMatrix] && fnArray[iFirstBeginText - 2] === fnArray[iFirstShowText] && fnArray[iFirstBeginText - 1] === fnArray[iFirstEndText] && argsArray[iFirstBeginText - 4][0] === firstSetFontArg0 && argsArray[iFirstBeginText - 4][1] === firstSetFontArg1) {
+ count++;
+ iFirst -= 5;
+ }
+
+ let iEndText = iFirst + 4;
+
+ for (let q = 1; q < count; q++) {
+ fnArray.splice(iEndText, 3);
+ argsArray.splice(iEndText, 3);
+ iEndText += 2;
+ }
+
+ return iEndText + 1;
+});
+
+class NullOptimizer {
+ constructor(queue) {
+ this.queue = queue;
+ }
+
+ _optimize() {}
+
+ push(fn, args) {
+ this.queue.fnArray.push(fn);
+ this.queue.argsArray.push(args);
+
+ this._optimize();
+ }
+
+ flush() {}
+
+ reset() {}
+
+}
+
+class QueueOptimizer extends NullOptimizer {
+ constructor(queue) {
+ super(queue);
+ this.state = null;
+ this.context = {
+ iCurr: 0,
+ fnArray: queue.fnArray,
+ argsArray: queue.argsArray
+ };
+ this.match = null;
+ this.lastProcessed = 0;
+ }
+
+ _optimize() {
+ const fnArray = this.queue.fnArray;
+ let i = this.lastProcessed,
+ ii = fnArray.length;
+ let state = this.state;
+ let match = this.match;
+
+ if (!state && !match && i + 1 === ii && !InitialState[fnArray[i]]) {
+ this.lastProcessed = ii;
+ return;
+ }
+
+ const context = this.context;
+
+ while (i < ii) {
+ if (match) {
+ const iterate = (0, match.iterateFn)(context, i);
+
+ if (iterate) {
+ i++;
+ continue;
+ }
+
+ i = (0, match.processFn)(context, i + 1);
+ ii = fnArray.length;
+ match = null;
+ state = null;
+
+ if (i >= ii) {
+ break;
+ }
+ }
+
+ state = (state || InitialState)[fnArray[i]];
+
+ if (!state || Array.isArray(state)) {
+ i++;
+ continue;
+ }
+
+ context.iCurr = i;
+ i++;
+
+ if (state.checkFn && !(0, state.checkFn)(context)) {
+ state = null;
+ continue;
+ }
+
+ match = state;
+ state = null;
+ }
+
+ this.state = state;
+ this.match = match;
+ this.lastProcessed = i;
+ }
+
+ flush() {
+ while (this.match) {
+ const length = this.queue.fnArray.length;
+ this.lastProcessed = (0, this.match.processFn)(this.context, length);
+ this.match = null;
+ this.state = null;
+
+ this._optimize();
+ }
+ }
+
+ reset() {
+ this.state = null;
+ this.match = null;
+ this.lastProcessed = 0;
+ }
+
+}
+
+class OperatorList {
+ static get CHUNK_SIZE() {
+ return (0, _util.shadow)(this, "CHUNK_SIZE", 1000);
+ }
+
+ static get CHUNK_SIZE_ABOUT() {
+ return (0, _util.shadow)(this, "CHUNK_SIZE_ABOUT", this.CHUNK_SIZE - 5);
+ }
+
+ constructor(intent, streamSink) {
+ this._streamSink = streamSink;
+ this.fnArray = [];
+ this.argsArray = [];
+
+ if (streamSink && !(intent && intent.startsWith("oplist-"))) {
+ this.optimizer = new QueueOptimizer(this);
+ } else {
+ this.optimizer = new NullOptimizer(this);
+ }
+
+ this.dependencies = new Set();
+ this._totalLength = 0;
+ this.weight = 0;
+ this._resolved = streamSink ? null : Promise.resolve();
+ }
+
+ get length() {
+ return this.argsArray.length;
+ }
+
+ get ready() {
+ return this._resolved || this._streamSink.ready;
+ }
+
+ get totalLength() {
+ return this._totalLength + this.length;
+ }
+
+ addOp(fn, args) {
+ this.optimizer.push(fn, args);
+ this.weight++;
+
+ if (this._streamSink) {
+ if (this.weight >= OperatorList.CHUNK_SIZE) {
+ this.flush();
+ } else if (this.weight >= OperatorList.CHUNK_SIZE_ABOUT && (fn === _util.OPS.restore || fn === _util.OPS.endText)) {
+ this.flush();
+ }
+ }
+ }
+
+ addDependency(dependency) {
+ if (this.dependencies.has(dependency)) {
+ return;
+ }
+
+ this.dependencies.add(dependency);
+ this.addOp(_util.OPS.dependency, [dependency]);
+ }
+
+ addDependencies(dependencies) {
+ for (const dependency of dependencies) {
+ this.addDependency(dependency);
+ }
+ }
+
+ addOpList(opList) {
+ if (!(opList instanceof OperatorList)) {
+ (0, _util.warn)('addOpList - ignoring invalid "opList" parameter.');
+ return;
+ }
+
+ for (const dependency of opList.dependencies) {
+ this.dependencies.add(dependency);
+ }
+
+ for (let i = 0, ii = opList.length; i < ii; i++) {
+ this.addOp(opList.fnArray[i], opList.argsArray[i]);
+ }
+ }
+
+ getIR() {
+ return {
+ fnArray: this.fnArray,
+ argsArray: this.argsArray,
+ length: this.length
+ };
+ }
+
+ get _transfers() {
+ const transfers = [];
+ const {
+ fnArray,
+ argsArray,
+ length
+ } = this;
+
+ for (let i = 0; i < length; i++) {
+ switch (fnArray[i]) {
+ case _util.OPS.paintInlineImageXObject:
+ case _util.OPS.paintInlineImageXObjectGroup:
+ case _util.OPS.paintImageMaskXObject:
+ const arg = argsArray[i][0];
+ ;
+
+ if (!arg.cached) {
+ transfers.push(arg.data.buffer);
+ }
+
+ break;
+ }
+ }
+
+ return transfers;
+ }
+
+ flush(lastChunk = false) {
+ this.optimizer.flush();
+ const length = this.length;
+ this._totalLength += length;
+
+ this._streamSink.enqueue({
+ fnArray: this.fnArray,
+ argsArray: this.argsArray,
+ lastChunk,
+ length
+ }, 1, this._transfers);
+
+ this.dependencies.clear();
+ this.fnArray.length = 0;
+ this.argsArray.length = 0;
+ this.weight = 0;
+ this.optimizer.reset();
+ }
+
+}
+
+exports.OperatorList = OperatorList;
+
+/***/ }),
+/* 63 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
exports.PDFImage = void 0;
var _util = __w_pdfjs_require__(2);
var _primitives = __w_pdfjs_require__(5);
-var _colorspace = __w_pdfjs_require__(23);
+var _colorspace = __w_pdfjs_require__(14);
-var _stream = __w_pdfjs_require__(12);
+var _decode_stream = __w_pdfjs_require__(19);
-var _jpeg_stream = __w_pdfjs_require__(18);
+var _jpeg_stream = __w_pdfjs_require__(27);
-var _jpx = __w_pdfjs_require__(21);
+var _jpx = __w_pdfjs_require__(30);
function decodeAndClamp(value, addend, coefficient, max) {
value = addend + value * coefficient;
@@ -46341,7 +51495,7 @@ function decodeAndClamp(value, addend, coefficient, max) {
}
function resizeImageMask(src, bpc, w1, h1, w2, h2) {
- var length = w2 * h2;
+ const length = w2 * h2;
let dest;
if (bpc <= 8) {
@@ -46352,15 +51506,15 @@ function resizeImageMask(src, bpc, w1, h1, w2, h2) {
dest = new Uint32Array(length);
}
- var xRatio = w1 / w2;
- var yRatio = h1 / h2;
- var i,
+ const xRatio = w1 / w2;
+ const yRatio = h1 / h2;
+ let i,
j,
py,
newIndex = 0,
oldIndex;
- var xScaled = new Uint16Array(w2);
- var w1Scanline = w1;
+ const xScaled = new Uint16Array(w2);
+ const w1Scanline = w1;
for (i = 0; i < w2; i++) {
xScaled[i] = Math.floor(i * xRatio);
@@ -46391,13 +51545,13 @@ class PDFImage {
localColorSpaceCache
}) {
this.image = image;
- var dict = image.dict;
+ const dict = image.dict;
const filter = dict.get("Filter");
if ((0, _primitives.isName)(filter)) {
switch (filter.name) {
case "JPXDecode":
- var jpxImage = new _jpx.JpxImage();
+ const jpxImage = new _jpx.JpxImage();
jpxImage.parseImageProperties(image.stream);
image.stream.reset();
image.width = jpxImage.width;
@@ -46431,7 +51585,7 @@ class PDFImage {
this.interpolate = dict.get("Interpolate", "I") || false;
this.imageMask = dict.get("ImageMask", "IM") || false;
this.matte = dict.get("Matte") || false;
- var bitsPerComponent = image.bitsPerComponent;
+ let bitsPerComponent = image.bitsPerComponent;
if (!bitsPerComponent) {
bitsPerComponent = dict.get("BitsPerComponent", "BPC");
@@ -46486,14 +51640,14 @@ class PDFImage {
if (this.decode && (this.colorSpace && !this.colorSpace.isDefaultDecode(this.decode, bitsPerComponent) || isMask && !_colorspace.ColorSpace.isDefaultDecode(this.decode, 1))) {
this.needsDecode = true;
- var max = (1 << bitsPerComponent) - 1;
+ const max = (1 << bitsPerComponent) - 1;
this.decodeCoefficients = [];
this.decodeAddends = [];
const isIndexed = this.colorSpace && this.colorSpace.name === "Indexed";
- for (var i = 0, j = 0; i < this.decode.length; i += 2, ++j) {
- var dmin = this.decode[i];
- var dmax = this.decode[i + 1];
+ for (let i = 0, j = 0; i < this.decode.length; i += 2, ++j) {
+ const dmin = this.decode[i];
+ const dmax = this.decode[i + 1];
this.decodeCoefficients[j] = isIndexed ? (dmax - dmin) / max : dmax - dmin;
this.decodeAddends[j] = isIndexed ? dmin : max * dmin;
}
@@ -46510,8 +51664,8 @@ class PDFImage {
});
} else if (mask) {
if ((0, _primitives.isStream)(mask)) {
- var maskDict = mask.dict,
- imageMask = maskDict.get("ImageMask", "IM");
+ const maskDict = mask.dict,
+ imageMask = maskDict.get("ImageMask", "IM");
if (!imageMask) {
(0, _util.warn)("Ignoring /Mask in image without /ImageMask.");
@@ -46575,10 +51729,10 @@ class PDFImage {
imageIsFromDecodeStream,
inverseDecode
}) {
- var computedLength = (width + 7 >> 3) * height;
- var actualLength = imgArray.byteLength;
- var haveFullData = computedLength === actualLength;
- var data, i;
+ const computedLength = (width + 7 >> 3) * height;
+ const actualLength = imgArray.byteLength;
+ const haveFullData = computedLength === actualLength;
+ let data, i;
if (imageIsFromDecodeStream && (!inverseDecode || haveFullData)) {
data = imgArray;
@@ -46616,12 +51770,12 @@ class PDFImage {
}
decodeBuffer(buffer) {
- var bpc = this.bpc;
- var numComps = this.numComps;
- var decodeAddends = this.decodeAddends;
- var decodeCoefficients = this.decodeCoefficients;
- var max = (1 << bpc) - 1;
- var i, ii;
+ const bpc = this.bpc;
+ const numComps = this.numComps;
+ const decodeAddends = this.decodeAddends;
+ const decodeCoefficients = this.decodeCoefficients;
+ const max = (1 << bpc) - 1;
+ let i, ii;
if (bpc === 1) {
for (i = 0, ii = buffer.length; i < ii; i++) {
@@ -46631,10 +51785,10 @@ class PDFImage {
return;
}
- var index = 0;
+ let index = 0;
for (i = 0, ii = this.width * this.height; i < ii; i++) {
- for (var j = 0; j < numComps; j++) {
+ for (let j = 0; j < numComps; j++) {
buffer[index] = decodeAndClamp(buffer[index], decodeAddends[j], decodeCoefficients[j], max);
index++;
}
@@ -46642,17 +51796,17 @@ class PDFImage {
}
getComponents(buffer) {
- var bpc = this.bpc;
+ const bpc = this.bpc;
if (bpc === 8) {
return buffer;
}
- var width = this.width;
- var height = this.height;
- var numComps = this.numComps;
- var length = width * height * numComps;
- var bufferPos = 0;
+ const width = this.width;
+ const height = this.height;
+ const numComps = this.numComps;
+ const length = width * height * numComps;
+ let bufferPos = 0;
let output;
if (bpc <= 8) {
@@ -46663,16 +51817,16 @@ class PDFImage {
output = new Uint32Array(length);
}
- var rowComps = width * numComps;
- var max = (1 << bpc) - 1;
- var i = 0,
+ const rowComps = width * numComps;
+ const max = (1 << bpc) - 1;
+ let i = 0,
ii,
buf;
if (bpc === 1) {
- var mask, loop1End, loop2End;
+ let mask, loop1End, loop2End;
- for (var j = 0; j < height; j++) {
+ for (let j = 0; j < height; j++) {
loop1End = i + (rowComps & ~7);
loop2End = i + rowComps;
@@ -46700,7 +51854,7 @@ class PDFImage {
}
}
} else {
- var bits = 0;
+ let bits = 0;
buf = 0;
for (i = 0, ii = length; i < ii; ++i) {
@@ -46714,7 +51868,7 @@ class PDFImage {
bits += 8;
}
- var remainingBits = bits - bpc;
+ const remainingBits = bits - bpc;
let value = buf >> remainingBits;
if (value < 0) {
@@ -46724,7 +51878,7 @@ class PDFImage {
}
output[i] = value;
- buf = buf & (1 << remainingBits) - 1;
+ buf &= (1 << remainingBits) - 1;
bits = remainingBits;
}
}
@@ -46733,9 +51887,9 @@ class PDFImage {
}
fillOpacity(rgbaBuf, width, height, actualHeight, image) {
- var smask = this.smask;
- var mask = this.mask;
- var alphaBuf, sw, sh, i, ii, j;
+ const smask = this.smask;
+ const mask = this.mask;
+ let alphaBuf, sw, sh, i, ii, j;
if (smask) {
sw = smask.width;
@@ -46763,15 +51917,15 @@ class PDFImage {
}
} else if (Array.isArray(mask)) {
alphaBuf = new Uint8ClampedArray(width * height);
- var numComps = this.numComps;
+ const numComps = this.numComps;
for (i = 0, ii = width * height; i < ii; ++i) {
- var opacity = 0;
- var imageOffset = i * numComps;
+ let opacity = 0;
+ const imageOffset = i * numComps;
for (j = 0; j < numComps; ++j) {
- var color = image[imageOffset + j];
- var maskOffset = j * 2;
+ const color = image[imageOffset + j];
+ const maskOffset = j * 2;
if (color < mask[maskOffset] || color > mask[maskOffset + 1]) {
opacity = 255;
@@ -46798,20 +51952,20 @@ class PDFImage {
}
undoPreblend(buffer, width, height) {
- var matte = this.smask && this.smask.matte;
+ const matte = this.smask && this.smask.matte;
if (!matte) {
return;
}
- var matteRgb = this.colorSpace.getRgb(matte, 0);
- var matteR = matteRgb[0];
- var matteG = matteRgb[1];
- var matteB = matteRgb[2];
- var length = width * height * 4;
+ const matteRgb = this.colorSpace.getRgb(matte, 0);
+ const matteR = matteRgb[0];
+ const matteG = matteRgb[1];
+ const matteB = matteRgb[2];
+ const length = width * height * 4;
- for (var i = 0; i < length; i += 4) {
- var alpha = buffer[i + 3];
+ for (let i = 0; i < length; i += 4) {
+ const alpha = buffer[i + 3];
if (alpha === 0) {
buffer[i] = 255;
@@ -46820,7 +51974,7 @@ class PDFImage {
continue;
}
- var k = 255 / alpha;
+ const k = 255 / alpha;
buffer[i] = (buffer[i] - matteR) * k + matteR;
buffer[i + 1] = (buffer[i + 1] - matteG) * k + matteG;
buffer[i + 2] = (buffer[i + 2] - matteB) * k + matteB;
@@ -46828,23 +51982,23 @@ class PDFImage {
}
createImageData(forceRGBA = false) {
- var drawWidth = this.drawWidth;
- var drawHeight = this.drawHeight;
- var imgData = {
+ const drawWidth = this.drawWidth;
+ const drawHeight = this.drawHeight;
+ const imgData = {
width: drawWidth,
height: drawHeight,
kind: 0,
data: null
};
- var numComps = this.numComps;
- var originalWidth = this.width;
- var originalHeight = this.height;
- var bpc = this.bpc;
- var rowBytes = originalWidth * numComps * bpc + 7 >> 3;
- var imgArray;
+ const numComps = this.numComps;
+ const originalWidth = this.width;
+ const originalHeight = this.height;
+ const bpc = this.bpc;
+ const rowBytes = originalWidth * numComps * bpc + 7 >> 3;
+ let imgArray;
if (!forceRGBA) {
- var kind;
+ let kind;
if (this.colorSpace.name === "DeviceGray" && bpc === 1) {
kind = _util.ImageKind.GRAYSCALE_1BPP;
@@ -46856,19 +52010,19 @@ class PDFImage {
imgData.kind = kind;
imgArray = this.getImageBytes(originalHeight * rowBytes);
- if (this.image instanceof _stream.DecodeStream) {
+ if (this.image instanceof _decode_stream.DecodeStream) {
imgData.data = imgArray;
} else {
- var newArray = new Uint8ClampedArray(imgArray.length);
+ const newArray = new Uint8ClampedArray(imgArray.length);
newArray.set(imgArray);
imgData.data = newArray;
}
if (this.needsDecode) {
(0, _util.assert)(kind === _util.ImageKind.GRAYSCALE_1BPP, "PDFImage.createImageData: The image must be grayscale.");
- var buffer = imgData.data;
+ const buffer = imgData.data;
- for (var i = 0, ii = buffer.length; i < ii; i++) {
+ for (let i = 0, ii = buffer.length; i < ii; i++) {
buffer[i] ^= 0xff;
}
}
@@ -46893,9 +52047,9 @@ class PDFImage {
}
imgArray = this.getImageBytes(originalHeight * rowBytes);
- var actualHeight = 0 | imgArray.length / rowBytes * drawHeight / originalHeight;
- var comps = this.getComponents(imgArray);
- var alpha01, maybeUndoPreblend;
+ const actualHeight = 0 | imgArray.length / rowBytes * drawHeight / originalHeight;
+ const comps = this.getComponents(imgArray);
+ let alpha01, maybeUndoPreblend;
if (!forceRGBA && !this.smask && !this.mask) {
imgData.kind = _util.ImageKind.RGB_24BPP;
@@ -46924,19 +52078,19 @@ class PDFImage {
}
fillGrayBuffer(buffer) {
- var numComps = this.numComps;
+ const numComps = this.numComps;
if (numComps !== 1) {
throw new _util.FormatError(`Reading gray scale from a color image: ${numComps}`);
}
- var width = this.width;
- var height = this.height;
- var bpc = this.bpc;
- var rowBytes = width * numComps * bpc + 7 >> 3;
- var imgArray = this.getImageBytes(height * rowBytes);
- var comps = this.getComponents(imgArray);
- var i, length;
+ const width = this.width;
+ const height = this.height;
+ const bpc = this.bpc;
+ const rowBytes = width * numComps * bpc + 7 >> 3;
+ const imgArray = this.getImageBytes(height * rowBytes);
+ const comps = this.getComponents(imgArray);
+ let i, length;
if (bpc === 1) {
length = width * height;
@@ -46959,7 +52113,7 @@ class PDFImage {
}
length = width * height;
- var scale = 255 / ((1 << bpc) - 1);
+ const scale = 255 / ((1 << bpc) - 1);
for (i = 0; i < length; ++i) {
buffer[i] = scale * comps[i];
@@ -46979,15 +52133,19045 @@ class PDFImage {
exports.PDFImage = PDFImage;
/***/ }),
-/* 46 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 64 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
-"use strict";
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
value: true
-});
+}));
+exports.Catalog = void 0;
+
+var _primitives = __w_pdfjs_require__(5);
+
+var _core_utils = __w_pdfjs_require__(9);
+
+var _util = __w_pdfjs_require__(2);
+
+var _name_number_tree = __w_pdfjs_require__(65);
+
+var _colorspace = __w_pdfjs_require__(14);
+
+var _file_spec = __w_pdfjs_require__(66);
+
+var _image_utils = __w_pdfjs_require__(52);
+
+var _metadata_parser = __w_pdfjs_require__(67);
+
+var _struct_tree = __w_pdfjs_require__(69);
+
+function fetchDestination(dest) {
+ if (dest instanceof _primitives.Dict) {
+ dest = dest.get("D");
+ }
+
+ return Array.isArray(dest) ? dest : null;
+}
+
+class Catalog {
+ constructor(pdfManager, xref) {
+ this.pdfManager = pdfManager;
+ this.xref = xref;
+ this._catDict = xref.getCatalogObj();
+
+ if (!(0, _primitives.isDict)(this._catDict)) {
+ throw new _util.FormatError("Catalog object is not a dictionary.");
+ }
+
+ this.fontCache = new _primitives.RefSetCache();
+ this.builtInCMapCache = new Map();
+ this.standardFontDataCache = new Map();
+ this.globalImageCache = new _image_utils.GlobalImageCache();
+ this.pageKidsCountCache = new _primitives.RefSetCache();
+ this.pageIndexCache = new _primitives.RefSetCache();
+ this.nonBlendModesSet = new _primitives.RefSet();
+ }
+
+ get version() {
+ const version = this._catDict.get("Version");
+
+ if (!(0, _primitives.isName)(version)) {
+ return (0, _util.shadow)(this, "version", null);
+ }
+
+ return (0, _util.shadow)(this, "version", version.name);
+ }
+
+ get collection() {
+ let collection = null;
+
+ try {
+ const obj = this._catDict.get("Collection");
+
+ if ((0, _primitives.isDict)(obj) && obj.size > 0) {
+ collection = obj;
+ }
+ } catch (ex) {
+ if (ex instanceof _core_utils.MissingDataException) {
+ throw ex;
+ }
+
+ (0, _util.info)("Cannot fetch Collection entry; assuming no collection is present.");
+ }
+
+ return (0, _util.shadow)(this, "collection", collection);
+ }
+
+ get acroForm() {
+ let acroForm = null;
+
+ try {
+ const obj = this._catDict.get("AcroForm");
+
+ if ((0, _primitives.isDict)(obj) && obj.size > 0) {
+ acroForm = obj;
+ }
+ } catch (ex) {
+ if (ex instanceof _core_utils.MissingDataException) {
+ throw ex;
+ }
+
+ (0, _util.info)("Cannot fetch AcroForm entry; assuming no forms are present.");
+ }
+
+ return (0, _util.shadow)(this, "acroForm", acroForm);
+ }
+
+ get metadata() {
+ const streamRef = this._catDict.getRaw("Metadata");
+
+ if (!(0, _primitives.isRef)(streamRef)) {
+ return (0, _util.shadow)(this, "metadata", null);
+ }
+
+ const suppressEncryption = !(this.xref.encrypt && this.xref.encrypt.encryptMetadata);
+ const stream = this.xref.fetch(streamRef, suppressEncryption);
+ let metadata = null;
+
+ if ((0, _primitives.isStream)(stream) && (0, _primitives.isDict)(stream.dict)) {
+ const type = stream.dict.get("Type");
+ const subtype = stream.dict.get("Subtype");
+
+ if ((0, _primitives.isName)(type, "Metadata") && (0, _primitives.isName)(subtype, "XML")) {
+ try {
+ const data = (0, _util.stringToUTF8String)(stream.getString());
+
+ if (data) {
+ metadata = new _metadata_parser.MetadataParser(data).serializable;
+ }
+ } catch (e) {
+ if (e instanceof _core_utils.MissingDataException) {
+ throw e;
+ }
+
+ (0, _util.info)("Skipping invalid metadata.");
+ }
+ }
+ }
+
+ return (0, _util.shadow)(this, "metadata", metadata);
+ }
+
+ get markInfo() {
+ let markInfo = null;
+
+ try {
+ markInfo = this._readMarkInfo();
+ } catch (ex) {
+ if (ex instanceof _core_utils.MissingDataException) {
+ throw ex;
+ }
+
+ (0, _util.warn)("Unable to read mark info.");
+ }
+
+ return (0, _util.shadow)(this, "markInfo", markInfo);
+ }
+
+ _readMarkInfo() {
+ const obj = this._catDict.get("MarkInfo");
+
+ if (!(0, _primitives.isDict)(obj)) {
+ return null;
+ }
+
+ const markInfo = Object.assign(Object.create(null), {
+ Marked: false,
+ UserProperties: false,
+ Suspects: false
+ });
+
+ for (const key in markInfo) {
+ if (!obj.has(key)) {
+ continue;
+ }
+
+ const value = obj.get(key);
+
+ if (!(0, _util.isBool)(value)) {
+ continue;
+ }
+
+ markInfo[key] = value;
+ }
+
+ return markInfo;
+ }
+
+ get structTreeRoot() {
+ let structTree = null;
+
+ try {
+ structTree = this._readStructTreeRoot();
+ } catch (ex) {
+ if (ex instanceof _core_utils.MissingDataException) {
+ throw ex;
+ }
+
+ (0, _util.warn)("Unable read to structTreeRoot info.");
+ }
+
+ return (0, _util.shadow)(this, "structTreeRoot", structTree);
+ }
+
+ _readStructTreeRoot() {
+ const obj = this._catDict.get("StructTreeRoot");
+
+ if (!(0, _primitives.isDict)(obj)) {
+ return null;
+ }
+
+ const root = new _struct_tree.StructTreeRoot(obj);
+ root.init();
+ return root;
+ }
+
+ get toplevelPagesDict() {
+ const pagesObj = this._catDict.get("Pages");
+
+ if (!(0, _primitives.isDict)(pagesObj)) {
+ throw new _util.FormatError("Invalid top-level pages dictionary.");
+ }
+
+ return (0, _util.shadow)(this, "toplevelPagesDict", pagesObj);
+ }
+
+ get documentOutline() {
+ let obj = null;
+
+ try {
+ obj = this._readDocumentOutline();
+ } catch (ex) {
+ if (ex instanceof _core_utils.MissingDataException) {
+ throw ex;
+ }
+
+ (0, _util.warn)("Unable to read document outline.");
+ }
+
+ return (0, _util.shadow)(this, "documentOutline", obj);
+ }
+
+ _readDocumentOutline() {
+ let obj = this._catDict.get("Outlines");
+
+ if (!(0, _primitives.isDict)(obj)) {
+ return null;
+ }
+
+ obj = obj.getRaw("First");
+
+ if (!(0, _primitives.isRef)(obj)) {
+ return null;
+ }
+
+ const root = {
+ items: []
+ };
+ const queue = [{
+ obj,
+ parent: root
+ }];
+ const processed = new _primitives.RefSet();
+ processed.put(obj);
+ const xref = this.xref,
+ blackColor = new Uint8ClampedArray(3);
+
+ while (queue.length > 0) {
+ const i = queue.shift();
+ const outlineDict = xref.fetchIfRef(i.obj);
+
+ if (outlineDict === null) {
+ continue;
+ }
+
+ if (!outlineDict.has("Title")) {
+ throw new _util.FormatError("Invalid outline item encountered.");
+ }
+
+ const data = {
+ url: null,
+ dest: null
+ };
+ Catalog.parseDestDictionary({
+ destDict: outlineDict,
+ resultObj: data,
+ docBaseUrl: this.pdfManager.docBaseUrl
+ });
+ const title = outlineDict.get("Title");
+ const flags = outlineDict.get("F") || 0;
+ const color = outlineDict.getArray("C");
+ const count = outlineDict.get("Count");
+ let rgbColor = blackColor;
+
+ if (Array.isArray(color) && color.length === 3 && (color[0] !== 0 || color[1] !== 0 || color[2] !== 0)) {
+ rgbColor = _colorspace.ColorSpace.singletons.rgb.getRgb(color, 0);
+ }
+
+ const outlineItem = {
+ dest: data.dest,
+ url: data.url,
+ unsafeUrl: data.unsafeUrl,
+ newWindow: data.newWindow,
+ title: (0, _util.stringToPDFString)(title),
+ color: rgbColor,
+ count: Number.isInteger(count) ? count : undefined,
+ bold: !!(flags & 2),
+ italic: !!(flags & 1),
+ items: []
+ };
+ i.parent.items.push(outlineItem);
+ obj = outlineDict.getRaw("First");
+
+ if ((0, _primitives.isRef)(obj) && !processed.has(obj)) {
+ queue.push({
+ obj,
+ parent: outlineItem
+ });
+ processed.put(obj);
+ }
+
+ obj = outlineDict.getRaw("Next");
+
+ if ((0, _primitives.isRef)(obj) && !processed.has(obj)) {
+ queue.push({
+ obj,
+ parent: i.parent
+ });
+ processed.put(obj);
+ }
+ }
+
+ return root.items.length > 0 ? root.items : null;
+ }
+
+ get permissions() {
+ let permissions = null;
+
+ try {
+ permissions = this._readPermissions();
+ } catch (ex) {
+ if (ex instanceof _core_utils.MissingDataException) {
+ throw ex;
+ }
+
+ (0, _util.warn)("Unable to read permissions.");
+ }
+
+ return (0, _util.shadow)(this, "permissions", permissions);
+ }
+
+ _readPermissions() {
+ const encrypt = this.xref.trailer.get("Encrypt");
+
+ if (!(0, _primitives.isDict)(encrypt)) {
+ return null;
+ }
+
+ let flags = encrypt.get("P");
+
+ if (!(0, _util.isNum)(flags)) {
+ return null;
+ }
+
+ flags += 2 ** 32;
+ const permissions = [];
+
+ for (const key in _util.PermissionFlag) {
+ const value = _util.PermissionFlag[key];
+
+ if (flags & value) {
+ permissions.push(value);
+ }
+ }
+
+ return permissions;
+ }
+
+ get optionalContentConfig() {
+ let config = null;
+
+ try {
+ const properties = this._catDict.get("OCProperties");
+
+ if (!properties) {
+ return (0, _util.shadow)(this, "optionalContentConfig", null);
+ }
+
+ const defaultConfig = properties.get("D");
+
+ if (!defaultConfig) {
+ return (0, _util.shadow)(this, "optionalContentConfig", null);
+ }
+
+ const groupsData = properties.get("OCGs");
+
+ if (!Array.isArray(groupsData)) {
+ return (0, _util.shadow)(this, "optionalContentConfig", null);
+ }
+
+ const groups = [];
+ const groupRefs = [];
+
+ for (const groupRef of groupsData) {
+ if (!(0, _primitives.isRef)(groupRef)) {
+ continue;
+ }
+
+ groupRefs.push(groupRef);
+ const group = this.xref.fetchIfRef(groupRef);
+ groups.push({
+ id: groupRef.toString(),
+ name: (0, _util.isString)(group.get("Name")) ? (0, _util.stringToPDFString)(group.get("Name")) : null,
+ intent: (0, _util.isString)(group.get("Intent")) ? (0, _util.stringToPDFString)(group.get("Intent")) : null
+ });
+ }
+
+ config = this._readOptionalContentConfig(defaultConfig, groupRefs);
+ config.groups = groups;
+ } catch (ex) {
+ if (ex instanceof _core_utils.MissingDataException) {
+ throw ex;
+ }
+
+ (0, _util.warn)(`Unable to read optional content config: ${ex}`);
+ }
+
+ return (0, _util.shadow)(this, "optionalContentConfig", config);
+ }
+
+ _readOptionalContentConfig(config, contentGroupRefs) {
+ function parseOnOff(refs) {
+ const onParsed = [];
+
+ if (Array.isArray(refs)) {
+ for (const value of refs) {
+ if (!(0, _primitives.isRef)(value)) {
+ continue;
+ }
+
+ if (contentGroupRefs.includes(value)) {
+ onParsed.push(value.toString());
+ }
+ }
+ }
+
+ return onParsed;
+ }
+
+ function parseOrder(refs, nestedLevels = 0) {
+ if (!Array.isArray(refs)) {
+ return null;
+ }
+
+ const order = [];
+
+ for (const value of refs) {
+ if ((0, _primitives.isRef)(value) && contentGroupRefs.includes(value)) {
+ parsedOrderRefs.put(value);
+ order.push(value.toString());
+ continue;
+ }
+
+ const nestedOrder = parseNestedOrder(value, nestedLevels);
+
+ if (nestedOrder) {
+ order.push(nestedOrder);
+ }
+ }
+
+ if (nestedLevels > 0) {
+ return order;
+ }
+
+ const hiddenGroups = [];
+
+ for (const groupRef of contentGroupRefs) {
+ if (parsedOrderRefs.has(groupRef)) {
+ continue;
+ }
+
+ hiddenGroups.push(groupRef.toString());
+ }
+
+ if (hiddenGroups.length) {
+ order.push({
+ name: null,
+ order: hiddenGroups
+ });
+ }
+
+ return order;
+ }
+
+ function parseNestedOrder(ref, nestedLevels) {
+ if (++nestedLevels > MAX_NESTED_LEVELS) {
+ (0, _util.warn)("parseNestedOrder - reached MAX_NESTED_LEVELS.");
+ return null;
+ }
+
+ const value = xref.fetchIfRef(ref);
+
+ if (!Array.isArray(value)) {
+ return null;
+ }
+
+ const nestedName = xref.fetchIfRef(value[0]);
+
+ if (typeof nestedName !== "string") {
+ return null;
+ }
+
+ const nestedOrder = parseOrder(value.slice(1), nestedLevels);
+
+ if (!nestedOrder || !nestedOrder.length) {
+ return null;
+ }
+
+ return {
+ name: (0, _util.stringToPDFString)(nestedName),
+ order: nestedOrder
+ };
+ }
+
+ const xref = this.xref,
+ parsedOrderRefs = new _primitives.RefSet(),
+ MAX_NESTED_LEVELS = 10;
+ return {
+ name: (0, _util.isString)(config.get("Name")) ? (0, _util.stringToPDFString)(config.get("Name")) : null,
+ creator: (0, _util.isString)(config.get("Creator")) ? (0, _util.stringToPDFString)(config.get("Creator")) : null,
+ baseState: (0, _primitives.isName)(config.get("BaseState")) ? config.get("BaseState").name : null,
+ on: parseOnOff(config.get("ON")),
+ off: parseOnOff(config.get("OFF")),
+ order: parseOrder(config.get("Order")),
+ groups: null
+ };
+ }
+
+ get numPages() {
+ const obj = this.toplevelPagesDict.get("Count");
+
+ if (!Number.isInteger(obj)) {
+ throw new _util.FormatError("Page count in top-level pages dictionary is not an integer.");
+ }
+
+ return (0, _util.shadow)(this, "numPages", obj);
+ }
+
+ get destinations() {
+ const obj = this._readDests(),
+ dests = Object.create(null);
+
+ if (obj instanceof _name_number_tree.NameTree) {
+ for (const [key, value] of obj.getAll()) {
+ const dest = fetchDestination(value);
+
+ if (dest) {
+ dests[key] = dest;
+ }
+ }
+ } else if (obj instanceof _primitives.Dict) {
+ obj.forEach(function (key, value) {
+ const dest = fetchDestination(value);
+
+ if (dest) {
+ dests[key] = dest;
+ }
+ });
+ }
+
+ return (0, _util.shadow)(this, "destinations", dests);
+ }
+
+ getDestination(id) {
+ const obj = this._readDests();
+
+ if (obj instanceof _name_number_tree.NameTree) {
+ const dest = fetchDestination(obj.get(id));
+
+ if (dest) {
+ return dest;
+ }
+
+ const allDest = this.destinations[id];
+
+ if (allDest) {
+ (0, _util.warn)(`Found "${id}" at an incorrect position in the NameTree.`);
+ return allDest;
+ }
+ } else if (obj instanceof _primitives.Dict) {
+ const dest = fetchDestination(obj.get(id));
+
+ if (dest) {
+ return dest;
+ }
+ }
+
+ return null;
+ }
+
+ _readDests() {
+ const obj = this._catDict.get("Names");
+
+ if (obj && obj.has("Dests")) {
+ return new _name_number_tree.NameTree(obj.getRaw("Dests"), this.xref);
+ } else if (this._catDict.has("Dests")) {
+ return this._catDict.get("Dests");
+ }
+
+ return undefined;
+ }
+
+ get pageLabels() {
+ let obj = null;
+
+ try {
+ obj = this._readPageLabels();
+ } catch (ex) {
+ if (ex instanceof _core_utils.MissingDataException) {
+ throw ex;
+ }
+
+ (0, _util.warn)("Unable to read page labels.");
+ }
+
+ return (0, _util.shadow)(this, "pageLabels", obj);
+ }
+
+ _readPageLabels() {
+ const obj = this._catDict.getRaw("PageLabels");
+
+ if (!obj) {
+ return null;
+ }
+
+ const pageLabels = new Array(this.numPages);
+ let style = null,
+ prefix = "";
+ const numberTree = new _name_number_tree.NumberTree(obj, this.xref);
+ const nums = numberTree.getAll();
+ let currentLabel = "",
+ currentIndex = 1;
+
+ for (let i = 0, ii = this.numPages; i < ii; i++) {
+ const labelDict = nums.get(i);
+
+ if (labelDict !== undefined) {
+ if (!(0, _primitives.isDict)(labelDict)) {
+ throw new _util.FormatError("PageLabel is not a dictionary.");
+ }
+
+ if (labelDict.has("Type") && !(0, _primitives.isName)(labelDict.get("Type"), "PageLabel")) {
+ throw new _util.FormatError("Invalid type in PageLabel dictionary.");
+ }
+
+ if (labelDict.has("S")) {
+ const s = labelDict.get("S");
+
+ if (!(0, _primitives.isName)(s)) {
+ throw new _util.FormatError("Invalid style in PageLabel dictionary.");
+ }
+
+ style = s.name;
+ } else {
+ style = null;
+ }
+
+ if (labelDict.has("P")) {
+ const p = labelDict.get("P");
+
+ if (!(0, _util.isString)(p)) {
+ throw new _util.FormatError("Invalid prefix in PageLabel dictionary.");
+ }
+
+ prefix = (0, _util.stringToPDFString)(p);
+ } else {
+ prefix = "";
+ }
+
+ if (labelDict.has("St")) {
+ const st = labelDict.get("St");
+
+ if (!(Number.isInteger(st) && st >= 1)) {
+ throw new _util.FormatError("Invalid start in PageLabel dictionary.");
+ }
+
+ currentIndex = st;
+ } else {
+ currentIndex = 1;
+ }
+ }
+
+ switch (style) {
+ case "D":
+ currentLabel = currentIndex;
+ break;
+
+ case "R":
+ case "r":
+ currentLabel = (0, _core_utils.toRomanNumerals)(currentIndex, style === "r");
+ break;
+
+ case "A":
+ case "a":
+ const LIMIT = 26;
+ const A_UPPER_CASE = 0x41,
+ A_LOWER_CASE = 0x61;
+ const baseCharCode = style === "a" ? A_LOWER_CASE : A_UPPER_CASE;
+ const letterIndex = currentIndex - 1;
+ const character = String.fromCharCode(baseCharCode + letterIndex % LIMIT);
+ const charBuf = [];
+
+ for (let j = 0, jj = letterIndex / LIMIT | 0; j <= jj; j++) {
+ charBuf.push(character);
+ }
+
+ currentLabel = charBuf.join("");
+ break;
+
+ default:
+ if (style) {
+ throw new _util.FormatError(`Invalid style "${style}" in PageLabel dictionary.`);
+ }
+
+ currentLabel = "";
+ }
+
+ pageLabels[i] = prefix + currentLabel;
+ currentIndex++;
+ }
+
+ return pageLabels;
+ }
+
+ get pageLayout() {
+ const obj = this._catDict.get("PageLayout");
+
+ let pageLayout = "";
+
+ if ((0, _primitives.isName)(obj)) {
+ switch (obj.name) {
+ case "SinglePage":
+ case "OneColumn":
+ case "TwoColumnLeft":
+ case "TwoColumnRight":
+ case "TwoPageLeft":
+ case "TwoPageRight":
+ pageLayout = obj.name;
+ }
+ }
+
+ return (0, _util.shadow)(this, "pageLayout", pageLayout);
+ }
+
+ get pageMode() {
+ const obj = this._catDict.get("PageMode");
+
+ let pageMode = "UseNone";
+
+ if ((0, _primitives.isName)(obj)) {
+ switch (obj.name) {
+ case "UseNone":
+ case "UseOutlines":
+ case "UseThumbs":
+ case "FullScreen":
+ case "UseOC":
+ case "UseAttachments":
+ pageMode = obj.name;
+ }
+ }
+
+ return (0, _util.shadow)(this, "pageMode", pageMode);
+ }
+
+ get viewerPreferences() {
+ const ViewerPreferencesValidators = {
+ HideToolbar: _util.isBool,
+ HideMenubar: _util.isBool,
+ HideWindowUI: _util.isBool,
+ FitWindow: _util.isBool,
+ CenterWindow: _util.isBool,
+ DisplayDocTitle: _util.isBool,
+ NonFullScreenPageMode: _primitives.isName,
+ Direction: _primitives.isName,
+ ViewArea: _primitives.isName,
+ ViewClip: _primitives.isName,
+ PrintArea: _primitives.isName,
+ PrintClip: _primitives.isName,
+ PrintScaling: _primitives.isName,
+ Duplex: _primitives.isName,
+ PickTrayByPDFSize: _util.isBool,
+ PrintPageRange: Array.isArray,
+ NumCopies: Number.isInteger
+ };
+
+ const obj = this._catDict.get("ViewerPreferences");
+
+ let prefs = null;
+
+ if ((0, _primitives.isDict)(obj)) {
+ for (const key in ViewerPreferencesValidators) {
+ if (!obj.has(key)) {
+ continue;
+ }
+
+ const value = obj.get(key);
+
+ if (!ViewerPreferencesValidators[key](value)) {
+ (0, _util.info)(`Bad value in ViewerPreferences for "${key}".`);
+ continue;
+ }
+
+ let prefValue;
+
+ switch (key) {
+ case "NonFullScreenPageMode":
+ switch (value.name) {
+ case "UseNone":
+ case "UseOutlines":
+ case "UseThumbs":
+ case "UseOC":
+ prefValue = value.name;
+ break;
+
+ default:
+ prefValue = "UseNone";
+ }
+
+ break;
+
+ case "Direction":
+ switch (value.name) {
+ case "L2R":
+ case "R2L":
+ prefValue = value.name;
+ break;
+
+ default:
+ prefValue = "L2R";
+ }
+
+ break;
+
+ case "ViewArea":
+ case "ViewClip":
+ case "PrintArea":
+ case "PrintClip":
+ switch (value.name) {
+ case "MediaBox":
+ case "CropBox":
+ case "BleedBox":
+ case "TrimBox":
+ case "ArtBox":
+ prefValue = value.name;
+ break;
+
+ default:
+ prefValue = "CropBox";
+ }
+
+ break;
+
+ case "PrintScaling":
+ switch (value.name) {
+ case "None":
+ case "AppDefault":
+ prefValue = value.name;
+ break;
+
+ default:
+ prefValue = "AppDefault";
+ }
+
+ break;
+
+ case "Duplex":
+ switch (value.name) {
+ case "Simplex":
+ case "DuplexFlipShortEdge":
+ case "DuplexFlipLongEdge":
+ prefValue = value.name;
+ break;
+
+ default:
+ prefValue = "None";
+ }
+
+ break;
+
+ case "PrintPageRange":
+ const length = value.length;
+
+ if (length % 2 !== 0) {
+ break;
+ }
+
+ const isValid = value.every((page, i, arr) => {
+ return Number.isInteger(page) && page > 0 && (i === 0 || page >= arr[i - 1]) && page <= this.numPages;
+ });
+
+ if (isValid) {
+ prefValue = value;
+ }
+
+ break;
+
+ case "NumCopies":
+ if (value > 0) {
+ prefValue = value;
+ }
+
+ break;
+
+ default:
+ if (typeof value !== "boolean") {
+ throw new _util.FormatError(`viewerPreferences - expected a boolean value for: ${key}`);
+ }
+
+ prefValue = value;
+ }
+
+ if (prefValue !== undefined) {
+ if (!prefs) {
+ prefs = Object.create(null);
+ }
+
+ prefs[key] = prefValue;
+ } else {
+ (0, _util.info)(`Bad value in ViewerPreferences for "${key}".`);
+ }
+ }
+ }
+
+ return (0, _util.shadow)(this, "viewerPreferences", prefs);
+ }
+
+ get openAction() {
+ const obj = this._catDict.get("OpenAction");
+
+ const openAction = Object.create(null);
+
+ if ((0, _primitives.isDict)(obj)) {
+ const destDict = new _primitives.Dict(this.xref);
+ destDict.set("A", obj);
+ const resultObj = {
+ url: null,
+ dest: null,
+ action: null
+ };
+ Catalog.parseDestDictionary({
+ destDict,
+ resultObj
+ });
+
+ if (Array.isArray(resultObj.dest)) {
+ openAction.dest = resultObj.dest;
+ } else if (resultObj.action) {
+ openAction.action = resultObj.action;
+ }
+ } else if (Array.isArray(obj)) {
+ openAction.dest = obj;
+ }
+
+ return (0, _util.shadow)(this, "openAction", (0, _util.objectSize)(openAction) > 0 ? openAction : null);
+ }
+
+ get attachments() {
+ const obj = this._catDict.get("Names");
+
+ let attachments = null;
+
+ if (obj instanceof _primitives.Dict && obj.has("EmbeddedFiles")) {
+ const nameTree = new _name_number_tree.NameTree(obj.getRaw("EmbeddedFiles"), this.xref);
+
+ for (const [key, value] of nameTree.getAll()) {
+ const fs = new _file_spec.FileSpec(value, this.xref);
+
+ if (!attachments) {
+ attachments = Object.create(null);
+ }
+
+ attachments[(0, _util.stringToPDFString)(key)] = fs.serializable;
+ }
+ }
+
+ return (0, _util.shadow)(this, "attachments", attachments);
+ }
+
+ get xfaImages() {
+ const obj = this._catDict.get("Names");
+
+ let xfaImages = null;
+
+ if (obj instanceof _primitives.Dict && obj.has("XFAImages")) {
+ const nameTree = new _name_number_tree.NameTree(obj.getRaw("XFAImages"), this.xref);
+
+ for (const [key, value] of nameTree.getAll()) {
+ if (!xfaImages) {
+ xfaImages = new _primitives.Dict(this.xref);
+ }
+
+ xfaImages.set(key, value);
+ }
+ }
+
+ return (0, _util.shadow)(this, "xfaImages", xfaImages);
+ }
+
+ _collectJavaScript() {
+ const obj = this._catDict.get("Names");
+
+ let javaScript = null;
+
+ function appendIfJavaScriptDict(name, jsDict) {
+ if (!(jsDict instanceof _primitives.Dict)) {
+ return;
+ }
+
+ if (!(0, _primitives.isName)(jsDict.get("S"), "JavaScript")) {
+ return;
+ }
+
+ let js = jsDict.get("JS");
+
+ if ((0, _primitives.isStream)(js)) {
+ js = js.getString();
+ } else if (typeof js !== "string") {
+ return;
+ }
+
+ if (javaScript === null) {
+ javaScript = new Map();
+ }
+
+ javaScript.set(name, (0, _util.stringToPDFString)(js));
+ }
+
+ if (obj instanceof _primitives.Dict && obj.has("JavaScript")) {
+ const nameTree = new _name_number_tree.NameTree(obj.getRaw("JavaScript"), this.xref);
+
+ for (const [key, value] of nameTree.getAll()) {
+ appendIfJavaScriptDict(key, value);
+ }
+ }
+
+ const openAction = this._catDict.get("OpenAction");
+
+ if (openAction) {
+ appendIfJavaScriptDict("OpenAction", openAction);
+ }
+
+ return javaScript;
+ }
+
+ get javaScript() {
+ const javaScript = this._collectJavaScript();
+
+ return (0, _util.shadow)(this, "javaScript", javaScript ? [...javaScript.values()] : null);
+ }
+
+ get jsActions() {
+ const javaScript = this._collectJavaScript();
+
+ let actions = (0, _core_utils.collectActions)(this.xref, this._catDict, _util.DocumentActionEventType);
+
+ if (javaScript) {
+ if (!actions) {
+ actions = Object.create(null);
+ }
+
+ for (const [key, val] of javaScript) {
+ if (key in actions) {
+ actions[key].push(val);
+ } else {
+ actions[key] = [val];
+ }
+ }
+ }
+
+ return (0, _util.shadow)(this, "jsActions", actions);
+ }
+
+ fontFallback(id, handler) {
+ const promises = [];
+ this.fontCache.forEach(function (promise) {
+ promises.push(promise);
+ });
+ return Promise.all(promises).then(translatedFonts => {
+ for (const translatedFont of translatedFonts) {
+ if (translatedFont.loadedName === id) {
+ translatedFont.fallback(handler);
+ return;
+ }
+ }
+ });
+ }
+
+ cleanup(manuallyTriggered = false) {
+ (0, _primitives.clearPrimitiveCaches)();
+ this.globalImageCache.clear(manuallyTriggered);
+ this.pageKidsCountCache.clear();
+ this.pageIndexCache.clear();
+ this.nonBlendModesSet.clear();
+ const promises = [];
+ this.fontCache.forEach(function (promise) {
+ promises.push(promise);
+ });
+ return Promise.all(promises).then(translatedFonts => {
+ for (const {
+ dict
+ } of translatedFonts) {
+ delete dict.cacheKey;
+ }
+
+ this.fontCache.clear();
+ this.builtInCMapCache.clear();
+ this.standardFontDataCache.clear();
+ });
+ }
+
+ getPageDict(pageIndex) {
+ const capability = (0, _util.createPromiseCapability)();
+ const nodesToVisit = [this._catDict.getRaw("Pages")];
+ const visitedNodes = new _primitives.RefSet();
+ const xref = this.xref,
+ pageKidsCountCache = this.pageKidsCountCache;
+ let count,
+ currentPageIndex = 0;
+
+ function next() {
+ while (nodesToVisit.length) {
+ const currentNode = nodesToVisit.pop();
+
+ if ((0, _primitives.isRef)(currentNode)) {
+ count = pageKidsCountCache.get(currentNode);
+
+ if (count > 0 && currentPageIndex + count < pageIndex) {
+ currentPageIndex += count;
+ continue;
+ }
+
+ if (visitedNodes.has(currentNode)) {
+ capability.reject(new _util.FormatError("Pages tree contains circular reference."));
+ return;
+ }
+
+ visitedNodes.put(currentNode);
+ xref.fetchAsync(currentNode).then(function (obj) {
+ if ((0, _primitives.isDict)(obj, "Page") || (0, _primitives.isDict)(obj) && !obj.has("Kids")) {
+ if (pageIndex === currentPageIndex) {
+ if (currentNode && !pageKidsCountCache.has(currentNode)) {
+ pageKidsCountCache.put(currentNode, 1);
+ }
+
+ capability.resolve([obj, currentNode]);
+ } else {
+ currentPageIndex++;
+ next();
+ }
+
+ return;
+ }
+
+ nodesToVisit.push(obj);
+ next();
+ }, capability.reject);
+ return;
+ }
+
+ if (!(0, _primitives.isDict)(currentNode)) {
+ capability.reject(new _util.FormatError("Page dictionary kid reference points to wrong type of object."));
+ return;
+ }
+
+ count = currentNode.get("Count");
+
+ if (Number.isInteger(count) && count >= 0) {
+ const objId = currentNode.objId;
+
+ if (objId && !pageKidsCountCache.has(objId)) {
+ pageKidsCountCache.put(objId, count);
+ }
+
+ if (currentPageIndex + count <= pageIndex) {
+ currentPageIndex += count;
+ continue;
+ }
+ }
+
+ const kids = currentNode.get("Kids");
+
+ if (!Array.isArray(kids)) {
+ if ((0, _primitives.isName)(currentNode.get("Type"), "Page") || !currentNode.has("Type") && currentNode.has("Contents")) {
+ if (currentPageIndex === pageIndex) {
+ capability.resolve([currentNode, null]);
+ return;
+ }
+
+ currentPageIndex++;
+ continue;
+ }
+
+ capability.reject(new _util.FormatError("Page dictionary kids object is not an array."));
+ return;
+ }
+
+ for (let last = kids.length - 1; last >= 0; last--) {
+ nodesToVisit.push(kids[last]);
+ }
+ }
+
+ capability.reject(new Error(`Page index ${pageIndex} not found.`));
+ }
+
+ next();
+ return capability.promise;
+ }
+
+ getPageIndex(pageRef) {
+ const cachedPageIndex = this.pageIndexCache.get(pageRef);
+
+ if (cachedPageIndex !== undefined) {
+ return Promise.resolve(cachedPageIndex);
+ }
+
+ const xref = this.xref;
+
+ function pagesBeforeRef(kidRef) {
+ let total = 0,
+ parentRef;
+ return xref.fetchAsync(kidRef).then(function (node) {
+ if ((0, _primitives.isRefsEqual)(kidRef, pageRef) && !(0, _primitives.isDict)(node, "Page") && !((0, _primitives.isDict)(node) && !node.has("Type") && node.has("Contents"))) {
+ throw new _util.FormatError("The reference does not point to a /Page dictionary.");
+ }
+
+ if (!node) {
+ return null;
+ }
+
+ if (!(0, _primitives.isDict)(node)) {
+ throw new _util.FormatError("Node must be a dictionary.");
+ }
+
+ parentRef = node.getRaw("Parent");
+ return node.getAsync("Parent");
+ }).then(function (parent) {
+ if (!parent) {
+ return null;
+ }
+
+ if (!(0, _primitives.isDict)(parent)) {
+ throw new _util.FormatError("Parent must be a dictionary.");
+ }
+
+ return parent.getAsync("Kids");
+ }).then(function (kids) {
+ if (!kids) {
+ return null;
+ }
+
+ const kidPromises = [];
+ let found = false;
+
+ for (let i = 0, ii = kids.length; i < ii; i++) {
+ const kid = kids[i];
+
+ if (!(0, _primitives.isRef)(kid)) {
+ throw new _util.FormatError("Kid must be a reference.");
+ }
+
+ if ((0, _primitives.isRefsEqual)(kid, kidRef)) {
+ found = true;
+ break;
+ }
+
+ kidPromises.push(xref.fetchAsync(kid).then(function (obj) {
+ if (!(0, _primitives.isDict)(obj)) {
+ throw new _util.FormatError("Kid node must be a dictionary.");
+ }
+
+ if (obj.has("Count")) {
+ total += obj.get("Count");
+ } else {
+ total++;
+ }
+ }));
+ }
+
+ if (!found) {
+ throw new _util.FormatError("Kid reference not found in parent's kids.");
+ }
+
+ return Promise.all(kidPromises).then(function () {
+ return [total, parentRef];
+ });
+ });
+ }
+
+ let total = 0;
+
+ const next = ref => pagesBeforeRef(ref).then(args => {
+ if (!args) {
+ this.pageIndexCache.put(pageRef, total);
+ return total;
+ }
+
+ const [count, parentRef] = args;
+ total += count;
+ return next(parentRef);
+ });
+
+ return next(pageRef);
+ }
+
+ static parseDestDictionary(params) {
+ function addDefaultProtocolToUrl(url) {
+ return url.startsWith("www.") ? `http://${url}` : url;
+ }
+
+ function tryConvertUrlEncoding(url) {
+ try {
+ return (0, _util.stringToUTF8String)(url);
+ } catch (e) {
+ return url;
+ }
+ }
+
+ const destDict = params.destDict;
+
+ if (!(0, _primitives.isDict)(destDict)) {
+ (0, _util.warn)("parseDestDictionary: `destDict` must be a dictionary.");
+ return;
+ }
+
+ const resultObj = params.resultObj;
+
+ if (typeof resultObj !== "object") {
+ (0, _util.warn)("parseDestDictionary: `resultObj` must be an object.");
+ return;
+ }
+
+ const docBaseUrl = params.docBaseUrl || null;
+ let action = destDict.get("A"),
+ url,
+ dest;
+
+ if (!(0, _primitives.isDict)(action)) {
+ if (destDict.has("Dest")) {
+ action = destDict.get("Dest");
+ } else {
+ action = destDict.get("AA");
+
+ if ((0, _primitives.isDict)(action)) {
+ if (action.has("D")) {
+ action = action.get("D");
+ } else if (action.has("U")) {
+ action = action.get("U");
+ }
+ }
+ }
+ }
+
+ if ((0, _primitives.isDict)(action)) {
+ const actionType = action.get("S");
+
+ if (!(0, _primitives.isName)(actionType)) {
+ (0, _util.warn)("parseDestDictionary: Invalid type in Action dictionary.");
+ return;
+ }
+
+ const actionName = actionType.name;
+
+ switch (actionName) {
+ case "URI":
+ url = action.get("URI");
+
+ if ((0, _primitives.isName)(url)) {
+ url = "/" + url.name;
+ } else if ((0, _util.isString)(url)) {
+ url = addDefaultProtocolToUrl(url);
+ }
+
+ break;
+
+ case "GoTo":
+ dest = action.get("D");
+ break;
+
+ case "Launch":
+ case "GoToR":
+ const urlDict = action.get("F");
+
+ if ((0, _primitives.isDict)(urlDict)) {
+ url = urlDict.get("F") || null;
+ } else if ((0, _util.isString)(urlDict)) {
+ url = urlDict;
+ }
+
+ let remoteDest = action.get("D");
+
+ if (remoteDest) {
+ if ((0, _primitives.isName)(remoteDest)) {
+ remoteDest = remoteDest.name;
+ }
+
+ if ((0, _util.isString)(url)) {
+ const baseUrl = url.split("#")[0];
+
+ if ((0, _util.isString)(remoteDest)) {
+ url = baseUrl + "#" + remoteDest;
+ } else if (Array.isArray(remoteDest)) {
+ url = baseUrl + "#" + JSON.stringify(remoteDest);
+ }
+ }
+ }
+
+ const newWindow = action.get("NewWindow");
+
+ if ((0, _util.isBool)(newWindow)) {
+ resultObj.newWindow = newWindow;
+ }
+
+ break;
+
+ case "Named":
+ const namedAction = action.get("N");
+
+ if ((0, _primitives.isName)(namedAction)) {
+ resultObj.action = namedAction.name;
+ }
+
+ break;
+
+ case "JavaScript":
+ const jsAction = action.get("JS");
+ let js;
+
+ if ((0, _primitives.isStream)(jsAction)) {
+ js = jsAction.getString();
+ } else if ((0, _util.isString)(jsAction)) {
+ js = jsAction;
+ }
+
+ if (js) {
+ const URL_OPEN_METHODS = ["app.launchURL", "window.open"];
+ const regex = new RegExp("^\\s*(" + URL_OPEN_METHODS.join("|").split(".").join("\\.") + ")\\((?:'|\")([^'\"]*)(?:'|\")(?:,\\s*(\\w+)\\)|\\))", "i");
+ const jsUrl = regex.exec((0, _util.stringToPDFString)(js));
+
+ if (jsUrl && jsUrl[2]) {
+ url = jsUrl[2];
+
+ if (jsUrl[3] === "true" && jsUrl[1] === "app.launchURL") {
+ resultObj.newWindow = true;
+ }
+
+ break;
+ }
+ }
+
+ default:
+ if (actionName === "JavaScript" || actionName === "ResetForm" || actionName === "SubmitForm") {
+ break;
+ }
+
+ (0, _util.warn)(`parseDestDictionary - unsupported action: "${actionName}".`);
+ break;
+ }
+ } else if (destDict.has("Dest")) {
+ dest = destDict.get("Dest");
+ }
+
+ if ((0, _util.isString)(url)) {
+ url = tryConvertUrlEncoding(url);
+ const absoluteUrl = (0, _util.createValidAbsoluteUrl)(url, docBaseUrl);
+
+ if (absoluteUrl) {
+ resultObj.url = absoluteUrl.href;
+ }
+
+ resultObj.unsafeUrl = url;
+ }
+
+ if (dest) {
+ if ((0, _primitives.isName)(dest)) {
+ dest = dest.name;
+ }
+
+ if ((0, _util.isString)(dest) || Array.isArray(dest)) {
+ resultObj.dest = dest;
+ }
+ }
+ }
+
+}
+
+exports.Catalog = Catalog;
+
+/***/ }),
+/* 65 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.NumberTree = exports.NameTree = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _primitives = __w_pdfjs_require__(5);
+
+class NameOrNumberTree {
+ constructor(root, xref, type) {
+ if (this.constructor === NameOrNumberTree) {
+ (0, _util.unreachable)("Cannot initialize NameOrNumberTree.");
+ }
+
+ this.root = root;
+ this.xref = xref;
+ this._type = type;
+ }
+
+ getAll() {
+ const map = new Map();
+
+ if (!this.root) {
+ return map;
+ }
+
+ const xref = this.xref;
+ const processed = new _primitives.RefSet();
+ processed.put(this.root);
+ const queue = [this.root];
+
+ while (queue.length > 0) {
+ const obj = xref.fetchIfRef(queue.shift());
+
+ if (!(0, _primitives.isDict)(obj)) {
+ continue;
+ }
+
+ if (obj.has("Kids")) {
+ const kids = obj.get("Kids");
+
+ for (let i = 0, ii = kids.length; i < ii; i++) {
+ const kid = kids[i];
+
+ if (processed.has(kid)) {
+ throw new _util.FormatError(`Duplicate entry in "${this._type}" tree.`);
+ }
+
+ queue.push(kid);
+ processed.put(kid);
+ }
+
+ continue;
+ }
+
+ const entries = obj.get(this._type);
+
+ if (!Array.isArray(entries)) {
+ continue;
+ }
+
+ for (let i = 0, ii = entries.length; i < ii; i += 2) {
+ map.set(xref.fetchIfRef(entries[i]), xref.fetchIfRef(entries[i + 1]));
+ }
+ }
+
+ return map;
+ }
+
+ get(key) {
+ if (!this.root) {
+ return null;
+ }
+
+ const xref = this.xref;
+ let kidsOrEntries = xref.fetchIfRef(this.root);
+ let loopCount = 0;
+ const MAX_LEVELS = 10;
+
+ while (kidsOrEntries.has("Kids")) {
+ if (++loopCount > MAX_LEVELS) {
+ (0, _util.warn)(`Search depth limit reached for "${this._type}" tree.`);
+ return null;
+ }
+
+ const kids = kidsOrEntries.get("Kids");
+
+ if (!Array.isArray(kids)) {
+ return null;
+ }
+
+ let l = 0,
+ r = kids.length - 1;
+
+ while (l <= r) {
+ const m = l + r >> 1;
+ const kid = xref.fetchIfRef(kids[m]);
+ const limits = kid.get("Limits");
+
+ if (key < xref.fetchIfRef(limits[0])) {
+ r = m - 1;
+ } else if (key > xref.fetchIfRef(limits[1])) {
+ l = m + 1;
+ } else {
+ kidsOrEntries = xref.fetchIfRef(kids[m]);
+ break;
+ }
+ }
+
+ if (l > r) {
+ return null;
+ }
+ }
+
+ const entries = kidsOrEntries.get(this._type);
+
+ if (Array.isArray(entries)) {
+ let l = 0,
+ r = entries.length - 2;
+
+ while (l <= r) {
+ const tmp = l + r >> 1,
+ m = tmp + (tmp & 1);
+ const currentKey = xref.fetchIfRef(entries[m]);
+
+ if (key < currentKey) {
+ r = m - 2;
+ } else if (key > currentKey) {
+ l = m + 2;
+ } else {
+ return xref.fetchIfRef(entries[m + 1]);
+ }
+ }
+ }
+
+ return null;
+ }
+
+}
+
+class NameTree extends NameOrNumberTree {
+ constructor(root, xref) {
+ super(root, xref, "Names");
+ }
+
+}
+
+exports.NameTree = NameTree;
+
+class NumberTree extends NameOrNumberTree {
+ constructor(root, xref) {
+ super(root, xref, "Nums");
+ }
+
+}
+
+exports.NumberTree = NumberTree;
+
+/***/ }),
+/* 66 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.FileSpec = void 0;
+
+var _primitives = __w_pdfjs_require__(5);
+
+var _util = __w_pdfjs_require__(2);
+
+function pickPlatformItem(dict) {
+ if (dict.has("UF")) {
+ return dict.get("UF");
+ } else if (dict.has("F")) {
+ return dict.get("F");
+ } else if (dict.has("Unix")) {
+ return dict.get("Unix");
+ } else if (dict.has("Mac")) {
+ return dict.get("Mac");
+ } else if (dict.has("DOS")) {
+ return dict.get("DOS");
+ }
+
+ return null;
+}
+
+class FileSpec {
+ constructor(root, xref) {
+ if (!root || !(0, _primitives.isDict)(root)) {
+ return;
+ }
+
+ this.xref = xref;
+ this.root = root;
+
+ if (root.has("FS")) {
+ this.fs = root.get("FS");
+ }
+
+ this.description = root.has("Desc") ? (0, _util.stringToPDFString)(root.get("Desc")) : "";
+
+ if (root.has("RF")) {
+ (0, _util.warn)("Related file specifications are not supported");
+ }
+
+ this.contentAvailable = true;
+
+ if (!root.has("EF")) {
+ this.contentAvailable = false;
+ (0, _util.warn)("Non-embedded file specifications are not supported");
+ }
+ }
+
+ get filename() {
+ if (!this._filename && this.root) {
+ const filename = pickPlatformItem(this.root) || "unnamed";
+ this._filename = (0, _util.stringToPDFString)(filename).replace(/\\\\/g, "\\").replace(/\\\//g, "/").replace(/\\/g, "/");
+ }
+
+ return this._filename;
+ }
+
+ get content() {
+ if (!this.contentAvailable) {
+ return null;
+ }
+
+ if (!this.contentRef && this.root) {
+ this.contentRef = pickPlatformItem(this.root.get("EF"));
+ }
+
+ let content = null;
+
+ if (this.contentRef) {
+ const fileObj = this.xref.fetchIfRef(this.contentRef);
+
+ if (fileObj && (0, _primitives.isStream)(fileObj)) {
+ content = fileObj.getBytes();
+ } else {
+ (0, _util.warn)("Embedded file specification points to non-existing/invalid content");
+ }
+ } else {
+ (0, _util.warn)("Embedded file specification does not have a content");
+ }
+
+ return content;
+ }
+
+ get serializable() {
+ return {
+ filename: this.filename,
+ content: this.content
+ };
+ }
+
+}
+
+exports.FileSpec = FileSpec;
+
+/***/ }),
+/* 67 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.MetadataParser = void 0;
+
+var _xml_parser = __w_pdfjs_require__(68);
+
+class MetadataParser {
+ constructor(data) {
+ data = this._repair(data);
+ const parser = new _xml_parser.SimpleXMLParser({
+ lowerCaseName: true
+ });
+ const xmlDocument = parser.parseFromString(data);
+ this._metadataMap = new Map();
+ this._data = data;
+
+ if (xmlDocument) {
+ this._parse(xmlDocument);
+ }
+ }
+
+ _repair(data) {
+ return data.replace(/^[^<]+/, "").replace(/>\\376\\377([^<]+)/g, function (all, codes) {
+ const bytes = codes.replace(/\\([0-3])([0-7])([0-7])/g, function (code, d1, d2, d3) {
+ return String.fromCharCode(d1 * 64 + d2 * 8 + d3 * 1);
+ }).replace(/&(amp|apos|gt|lt|quot);/g, function (str, name) {
+ switch (name) {
+ case "amp":
+ return "&";
+
+ case "apos":
+ return "'";
+
+ case "gt":
+ return ">";
+
+ case "lt":
+ return "<";
+
+ case "quot":
+ return '"';
+ }
+
+ throw new Error(`_repair: ${name} isn't defined.`);
+ });
+ const charBuf = [];
+
+ for (let i = 0, ii = bytes.length; i < ii; i += 2) {
+ const code = bytes.charCodeAt(i) * 256 + bytes.charCodeAt(i + 1);
+
+ if (code >= 32 && code < 127 && code !== 60 && code !== 62 && code !== 38) {
+ charBuf.push(String.fromCharCode(code));
+ } else {
+ charBuf.push("&#x" + (0x10000 + code).toString(16).substring(1) + ";");
+ }
+ }
+
+ return ">" + charBuf.join("");
+ });
+ }
+
+ _getSequence(entry) {
+ const name = entry.nodeName;
+
+ if (name !== "rdf:bag" && name !== "rdf:seq" && name !== "rdf:alt") {
+ return null;
+ }
+
+ return entry.childNodes.filter(node => node.nodeName === "rdf:li");
+ }
+
+ _parseArray(entry) {
+ if (!entry.hasChildNodes()) {
+ return;
+ }
+
+ const [seqNode] = entry.childNodes;
+ const sequence = this._getSequence(seqNode) || [];
+
+ this._metadataMap.set(entry.nodeName, sequence.map(node => node.textContent.trim()));
+ }
+
+ _parse(xmlDocument) {
+ let rdf = xmlDocument.documentElement;
+
+ if (rdf.nodeName !== "rdf:rdf") {
+ rdf = rdf.firstChild;
+
+ while (rdf && rdf.nodeName !== "rdf:rdf") {
+ rdf = rdf.nextSibling;
+ }
+ }
+
+ if (!rdf || rdf.nodeName !== "rdf:rdf" || !rdf.hasChildNodes()) {
+ return;
+ }
+
+ for (const desc of rdf.childNodes) {
+ if (desc.nodeName !== "rdf:description") {
+ continue;
+ }
+
+ for (const entry of desc.childNodes) {
+ const name = entry.nodeName;
+
+ switch (name) {
+ case "#text":
+ continue;
+
+ case "dc:creator":
+ case "dc:subject":
+ this._parseArray(entry);
+
+ continue;
+ }
+
+ this._metadataMap.set(name, entry.textContent.trim());
+ }
+ }
+ }
+
+ get serializable() {
+ return {
+ parsedData: this._metadataMap,
+ rawData: this._data
+ };
+ }
+
+}
+
+exports.MetadataParser = MetadataParser;
+
+/***/ }),
+/* 68 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.XMLParserErrorCode = exports.XMLParserBase = exports.SimpleXMLParser = exports.SimpleDOMNode = void 0;
+
+var _core_utils = __w_pdfjs_require__(9);
+
+const XMLParserErrorCode = {
+ NoError: 0,
+ EndOfDocument: -1,
+ UnterminatedCdat: -2,
+ UnterminatedXmlDeclaration: -3,
+ UnterminatedDoctypeDeclaration: -4,
+ UnterminatedComment: -5,
+ MalformedElement: -6,
+ OutOfMemory: -7,
+ UnterminatedAttributeValue: -8,
+ UnterminatedElement: -9,
+ ElementNeverBegun: -10
+};
+exports.XMLParserErrorCode = XMLParserErrorCode;
+
+function isWhitespace(s, index) {
+ const ch = s[index];
+ return ch === " " || ch === "\n" || ch === "\r" || ch === "\t";
+}
+
+function isWhitespaceString(s) {
+ for (let i = 0, ii = s.length; i < ii; i++) {
+ if (!isWhitespace(s, i)) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+class XMLParserBase {
+ _resolveEntities(s) {
+ return s.replace(/&([^;]+);/g, (all, entity) => {
+ if (entity.substring(0, 2) === "#x") {
+ return String.fromCodePoint(parseInt(entity.substring(2), 16));
+ } else if (entity.substring(0, 1) === "#") {
+ return String.fromCodePoint(parseInt(entity.substring(1), 10));
+ }
+
+ switch (entity) {
+ case "lt":
+ return "<";
+
+ case "gt":
+ return ">";
+
+ case "amp":
+ return "&";
+
+ case "quot":
+ return '"';
+
+ case "apos":
+ return "'";
+ }
+
+ return this.onResolveEntity(entity);
+ });
+ }
+
+ _parseContent(s, start) {
+ const attributes = [];
+ let pos = start;
+
+ function skipWs() {
+ while (pos < s.length && isWhitespace(s, pos)) {
+ ++pos;
+ }
+ }
+
+ while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== ">" && s[pos] !== "/") {
+ ++pos;
+ }
+
+ const name = s.substring(start, pos);
+ skipWs();
+
+ while (pos < s.length && s[pos] !== ">" && s[pos] !== "/" && s[pos] !== "?") {
+ skipWs();
+ let attrName = "",
+ attrValue = "";
+
+ while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== "=") {
+ attrName += s[pos];
+ ++pos;
+ }
+
+ skipWs();
+
+ if (s[pos] !== "=") {
+ return null;
+ }
+
+ ++pos;
+ skipWs();
+ const attrEndChar = s[pos];
+
+ if (attrEndChar !== '"' && attrEndChar !== "'") {
+ return null;
+ }
+
+ const attrEndIndex = s.indexOf(attrEndChar, ++pos);
+
+ if (attrEndIndex < 0) {
+ return null;
+ }
+
+ attrValue = s.substring(pos, attrEndIndex);
+ attributes.push({
+ name: attrName,
+ value: this._resolveEntities(attrValue)
+ });
+ pos = attrEndIndex + 1;
+ skipWs();
+ }
+
+ return {
+ name,
+ attributes,
+ parsed: pos - start
+ };
+ }
+
+ _parseProcessingInstruction(s, start) {
+ let pos = start;
+
+ function skipWs() {
+ while (pos < s.length && isWhitespace(s, pos)) {
+ ++pos;
+ }
+ }
+
+ while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== ">" && s[pos] !== "?" && s[pos] !== "/") {
+ ++pos;
+ }
+
+ const name = s.substring(start, pos);
+ skipWs();
+ const attrStart = pos;
+
+ while (pos < s.length && (s[pos] !== "?" || s[pos + 1] !== ">")) {
+ ++pos;
+ }
+
+ const value = s.substring(attrStart, pos);
+ return {
+ name,
+ value,
+ parsed: pos - start
+ };
+ }
+
+ parseXml(s) {
+ let i = 0;
+
+ while (i < s.length) {
+ const ch = s[i];
+ let j = i;
+
+ if (ch === "<") {
+ ++j;
+ const ch2 = s[j];
+ let q;
+
+ switch (ch2) {
+ case "/":
+ ++j;
+ q = s.indexOf(">", j);
+
+ if (q < 0) {
+ this.onError(XMLParserErrorCode.UnterminatedElement);
+ return;
+ }
+
+ this.onEndElement(s.substring(j, q));
+ j = q + 1;
+ break;
+
+ case "?":
+ ++j;
+
+ const pi = this._parseProcessingInstruction(s, j);
+
+ if (s.substring(j + pi.parsed, j + pi.parsed + 2) !== "?>") {
+ this.onError(XMLParserErrorCode.UnterminatedXmlDeclaration);
+ return;
+ }
+
+ this.onPi(pi.name, pi.value);
+ j += pi.parsed + 2;
+ break;
+
+ case "!":
+ if (s.substring(j + 1, j + 3) === "--") {
+ q = s.indexOf("-->", j + 3);
+
+ if (q < 0) {
+ this.onError(XMLParserErrorCode.UnterminatedComment);
+ return;
+ }
+
+ this.onComment(s.substring(j + 3, q));
+ j = q + 3;
+ } else if (s.substring(j + 1, j + 8) === "[CDATA[") {
+ q = s.indexOf("]]>", j + 8);
+
+ if (q < 0) {
+ this.onError(XMLParserErrorCode.UnterminatedCdat);
+ return;
+ }
+
+ this.onCdata(s.substring(j + 8, q));
+ j = q + 3;
+ } else if (s.substring(j + 1, j + 8) === "DOCTYPE") {
+ const q2 = s.indexOf("[", j + 8);
+ let complexDoctype = false;
+ q = s.indexOf(">", j + 8);
+
+ if (q < 0) {
+ this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration);
+ return;
+ }
+
+ if (q2 > 0 && q > q2) {
+ q = s.indexOf("]>", j + 8);
+
+ if (q < 0) {
+ this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration);
+ return;
+ }
+
+ complexDoctype = true;
+ }
+
+ const doctypeContent = s.substring(j + 8, q + (complexDoctype ? 1 : 0));
+ this.onDoctype(doctypeContent);
+ j = q + (complexDoctype ? 2 : 1);
+ } else {
+ this.onError(XMLParserErrorCode.MalformedElement);
+ return;
+ }
+
+ break;
+
+ default:
+ const content = this._parseContent(s, j);
+
+ if (content === null) {
+ this.onError(XMLParserErrorCode.MalformedElement);
+ return;
+ }
+
+ let isClosed = false;
+
+ if (s.substring(j + content.parsed, j + content.parsed + 2) === "/>") {
+ isClosed = true;
+ } else if (s.substring(j + content.parsed, j + content.parsed + 1) !== ">") {
+ this.onError(XMLParserErrorCode.UnterminatedElement);
+ return;
+ }
+
+ this.onBeginElement(content.name, content.attributes, isClosed);
+ j += content.parsed + (isClosed ? 2 : 1);
+ break;
+ }
+ } else {
+ while (j < s.length && s[j] !== "<") {
+ j++;
+ }
+
+ const text = s.substring(i, j);
+ this.onText(this._resolveEntities(text));
+ }
+
+ i = j;
+ }
+ }
+
+ onResolveEntity(name) {
+ return `&${name};`;
+ }
+
+ onPi(name, value) {}
+
+ onComment(text) {}
+
+ onCdata(text) {}
+
+ onDoctype(doctypeContent) {}
+
+ onText(text) {}
+
+ onBeginElement(name, attributes, isEmpty) {}
+
+ onEndElement(name) {}
+
+ onError(code) {}
+
+}
+
+exports.XMLParserBase = XMLParserBase;
+
+class SimpleDOMNode {
+ constructor(nodeName, nodeValue) {
+ this.nodeName = nodeName;
+ this.nodeValue = nodeValue;
+ Object.defineProperty(this, "parentNode", {
+ value: null,
+ writable: true
+ });
+ }
+
+ get firstChild() {
+ return this.childNodes && this.childNodes[0];
+ }
+
+ get nextSibling() {
+ const childNodes = this.parentNode.childNodes;
+
+ if (!childNodes) {
+ return undefined;
+ }
+
+ const index = childNodes.indexOf(this);
+
+ if (index === -1) {
+ return undefined;
+ }
+
+ return childNodes[index + 1];
+ }
+
+ get textContent() {
+ if (!this.childNodes) {
+ return this.nodeValue || "";
+ }
+
+ return this.childNodes.map(function (child) {
+ return child.textContent;
+ }).join("");
+ }
+
+ hasChildNodes() {
+ return this.childNodes && this.childNodes.length > 0;
+ }
+
+ searchNode(paths, pos) {
+ if (pos >= paths.length) {
+ return this;
+ }
+
+ const component = paths[pos];
+ const stack = [];
+ let node = this;
+
+ while (true) {
+ if (component.name === node.nodeName) {
+ if (component.pos === 0) {
+ const res = node.searchNode(paths, pos + 1);
+
+ if (res !== null) {
+ return res;
+ }
+ } else if (stack.length === 0) {
+ return null;
+ } else {
+ const [parent] = stack.pop();
+ let siblingPos = 0;
+
+ for (const child of parent.childNodes) {
+ if (component.name === child.nodeName) {
+ if (siblingPos === component.pos) {
+ return child.searchNode(paths, pos + 1);
+ }
+
+ siblingPos++;
+ }
+ }
+
+ return node.searchNode(paths, pos + 1);
+ }
+ }
+
+ if (node.childNodes && node.childNodes.length !== 0) {
+ stack.push([node, 0]);
+ node = node.childNodes[0];
+ } else if (stack.length === 0) {
+ return null;
+ } else {
+ while (stack.length !== 0) {
+ const [parent, currentPos] = stack.pop();
+ const newPos = currentPos + 1;
+
+ if (newPos < parent.childNodes.length) {
+ stack.push([parent, newPos]);
+ node = parent.childNodes[newPos];
+ break;
+ }
+ }
+
+ if (stack.length === 0) {
+ return null;
+ }
+ }
+ }
+ }
+
+ dump(buffer) {
+ if (this.nodeName === "#text") {
+ buffer.push((0, _core_utils.encodeToXmlString)(this.nodeValue));
+ return;
+ }
+
+ buffer.push(`<${this.nodeName}`);
+
+ if (this.attributes) {
+ for (const attribute of this.attributes) {
+ buffer.push(` ${attribute.name}="${(0, _core_utils.encodeToXmlString)(attribute.value)}"`);
+ }
+ }
+
+ if (this.hasChildNodes()) {
+ buffer.push(">");
+
+ for (const child of this.childNodes) {
+ child.dump(buffer);
+ }
+
+ buffer.push(`</${this.nodeName}>`);
+ } else if (this.nodeValue) {
+ buffer.push(`>${(0, _core_utils.encodeToXmlString)(this.nodeValue)}</${this.nodeName}>`);
+ } else {
+ buffer.push("/>");
+ }
+ }
+
+}
+
+exports.SimpleDOMNode = SimpleDOMNode;
+
+class SimpleXMLParser extends XMLParserBase {
+ constructor({
+ hasAttributes = false,
+ lowerCaseName = false
+ }) {
+ super();
+ this._currentFragment = null;
+ this._stack = null;
+ this._errorCode = XMLParserErrorCode.NoError;
+ this._hasAttributes = hasAttributes;
+ this._lowerCaseName = lowerCaseName;
+ }
+
+ parseFromString(data) {
+ this._currentFragment = [];
+ this._stack = [];
+ this._errorCode = XMLParserErrorCode.NoError;
+ this.parseXml(data);
+
+ if (this._errorCode !== XMLParserErrorCode.NoError) {
+ return undefined;
+ }
+
+ const [documentElement] = this._currentFragment;
+
+ if (!documentElement) {
+ return undefined;
+ }
+
+ return {
+ documentElement
+ };
+ }
+
+ onText(text) {
+ if (isWhitespaceString(text)) {
+ return;
+ }
+
+ const node = new SimpleDOMNode("#text", text);
+
+ this._currentFragment.push(node);
+ }
+
+ onCdata(text) {
+ const node = new SimpleDOMNode("#text", text);
+
+ this._currentFragment.push(node);
+ }
+
+ onBeginElement(name, attributes, isEmpty) {
+ if (this._lowerCaseName) {
+ name = name.toLowerCase();
+ }
+
+ const node = new SimpleDOMNode(name);
+ node.childNodes = [];
+
+ if (this._hasAttributes) {
+ node.attributes = attributes;
+ }
+
+ this._currentFragment.push(node);
+
+ if (isEmpty) {
+ return;
+ }
+
+ this._stack.push(this._currentFragment);
+
+ this._currentFragment = node.childNodes;
+ }
+
+ onEndElement(name) {
+ this._currentFragment = this._stack.pop() || [];
+ const lastElement = this._currentFragment[this._currentFragment.length - 1];
+
+ if (!lastElement) {
+ return;
+ }
+
+ for (let i = 0, ii = lastElement.childNodes.length; i < ii; i++) {
+ lastElement.childNodes[i].parentNode = lastElement;
+ }
+ }
+
+ onError(code) {
+ this._errorCode = code;
+ }
+
+}
+
+exports.SimpleXMLParser = SimpleXMLParser;
+
+/***/ }),
+/* 69 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.StructTreeRoot = exports.StructTreePage = void 0;
+
+var _primitives = __w_pdfjs_require__(5);
+
+var _util = __w_pdfjs_require__(2);
+
+var _name_number_tree = __w_pdfjs_require__(65);
+
+const MAX_DEPTH = 40;
+const StructElementType = {
+ PAGE_CONTENT: "PAGE_CONTENT",
+ STREAM_CONTENT: "STREAM_CONTENT",
+ OBJECT: "OBJECT",
+ ELEMENT: "ELEMENT"
+};
+
+class StructTreeRoot {
+ constructor(rootDict) {
+ this.dict = rootDict;
+ this.roleMap = new Map();
+ }
+
+ init() {
+ this.readRoleMap();
+ }
+
+ readRoleMap() {
+ const roleMapDict = this.dict.get("RoleMap");
+
+ if (!(0, _primitives.isDict)(roleMapDict)) {
+ return;
+ }
+
+ roleMapDict.forEach((key, value) => {
+ if (!(0, _primitives.isName)(value)) {
+ return;
+ }
+
+ this.roleMap.set(key, value.name);
+ });
+ }
+
+}
+
+exports.StructTreeRoot = StructTreeRoot;
+
+class StructElementNode {
+ constructor(tree, dict) {
+ this.tree = tree;
+ this.dict = dict;
+ this.kids = [];
+ this.parseKids();
+ }
+
+ get role() {
+ const nameObj = this.dict.get("S");
+ const name = (0, _primitives.isName)(nameObj) ? nameObj.name : "";
+ const {
+ root
+ } = this.tree;
+
+ if (root.roleMap.has(name)) {
+ return root.roleMap.get(name);
+ }
+
+ return name;
+ }
+
+ parseKids() {
+ let pageObjId = null;
+ const objRef = this.dict.getRaw("Pg");
+
+ if ((0, _primitives.isRef)(objRef)) {
+ pageObjId = objRef.toString();
+ }
+
+ const kids = this.dict.get("K");
+
+ if (Array.isArray(kids)) {
+ for (const kid of kids) {
+ const element = this.parseKid(pageObjId, kid);
+
+ if (element) {
+ this.kids.push(element);
+ }
+ }
+ } else {
+ const element = this.parseKid(pageObjId, kids);
+
+ if (element) {
+ this.kids.push(element);
+ }
+ }
+ }
+
+ parseKid(pageObjId, kid) {
+ if (Number.isInteger(kid)) {
+ if (this.tree.pageDict.objId !== pageObjId) {
+ return null;
+ }
+
+ return new StructElement({
+ type: StructElementType.PAGE_CONTENT,
+ mcid: kid,
+ pageObjId
+ });
+ }
+
+ let kidDict = null;
+
+ if ((0, _primitives.isRef)(kid)) {
+ kidDict = this.dict.xref.fetch(kid);
+ } else if ((0, _primitives.isDict)(kid)) {
+ kidDict = kid;
+ }
+
+ if (!kidDict) {
+ return null;
+ }
+
+ const pageRef = kidDict.getRaw("Pg");
+
+ if ((0, _primitives.isRef)(pageRef)) {
+ pageObjId = pageRef.toString();
+ }
+
+ const type = (0, _primitives.isName)(kidDict.get("Type")) ? kidDict.get("Type").name : null;
+
+ if (type === "MCR") {
+ if (this.tree.pageDict.objId !== pageObjId) {
+ return null;
+ }
+
+ return new StructElement({
+ type: StructElementType.STREAM_CONTENT,
+ refObjId: (0, _primitives.isRef)(kidDict.getRaw("Stm")) ? kidDict.getRaw("Stm").toString() : null,
+ pageObjId,
+ mcid: kidDict.get("MCID")
+ });
+ }
+
+ if (type === "OBJR") {
+ if (this.tree.pageDict.objId !== pageObjId) {
+ return null;
+ }
+
+ return new StructElement({
+ type: StructElementType.OBJECT,
+ refObjId: (0, _primitives.isRef)(kidDict.getRaw("Obj")) ? kidDict.getRaw("Obj").toString() : null,
+ pageObjId
+ });
+ }
+
+ return new StructElement({
+ type: StructElementType.ELEMENT,
+ dict: kidDict
+ });
+ }
+
+}
+
+class StructElement {
+ constructor({
+ type,
+ dict = null,
+ mcid = null,
+ pageObjId = null,
+ refObjId = null
+ }) {
+ this.type = type;
+ this.dict = dict;
+ this.mcid = mcid;
+ this.pageObjId = pageObjId;
+ this.refObjId = refObjId;
+ this.parentNode = null;
+ }
+
+}
+
+class StructTreePage {
+ constructor(structTreeRoot, pageDict) {
+ this.root = structTreeRoot;
+ this.rootDict = structTreeRoot ? structTreeRoot.dict : null;
+ this.pageDict = pageDict;
+ this.nodes = [];
+ }
+
+ parse() {
+ if (!this.root || !this.rootDict) {
+ return;
+ }
+
+ const parentTree = this.rootDict.get("ParentTree");
+
+ if (!parentTree) {
+ return;
+ }
+
+ const id = this.pageDict.get("StructParents");
+
+ if (!Number.isInteger(id)) {
+ return;
+ }
+
+ const numberTree = new _name_number_tree.NumberTree(parentTree, this.rootDict.xref);
+ const parentArray = numberTree.get(id);
+
+ if (!Array.isArray(parentArray)) {
+ return;
+ }
+
+ const map = new Map();
+
+ for (const ref of parentArray) {
+ if ((0, _primitives.isRef)(ref)) {
+ this.addNode(this.rootDict.xref.fetch(ref), map);
+ }
+ }
+ }
+
+ addNode(dict, map, level = 0) {
+ if (level > MAX_DEPTH) {
+ (0, _util.warn)("StructTree MAX_DEPTH reached.");
+ return null;
+ }
+
+ if (map.has(dict)) {
+ return map.get(dict);
+ }
+
+ const element = new StructElementNode(this, dict);
+ map.set(dict, element);
+ const parent = dict.get("P");
+
+ if (!parent || (0, _primitives.isName)(parent.get("Type"), "StructTreeRoot")) {
+ if (!this.addTopLevelNode(dict, element)) {
+ map.delete(dict);
+ }
+
+ return element;
+ }
+
+ const parentNode = this.addNode(parent, map, level + 1);
+
+ if (!parentNode) {
+ return element;
+ }
+
+ let save = false;
+
+ for (const kid of parentNode.kids) {
+ if (kid.type === StructElementType.ELEMENT && kid.dict === dict) {
+ kid.parentNode = element;
+ save = true;
+ }
+ }
+
+ if (!save) {
+ map.delete(dict);
+ }
+
+ return element;
+ }
+
+ addTopLevelNode(dict, element) {
+ const obj = this.rootDict.get("K");
+
+ if (!obj) {
+ return false;
+ }
+
+ if ((0, _primitives.isDict)(obj)) {
+ if (obj.objId !== dict.objId) {
+ return false;
+ }
+
+ this.nodes[0] = element;
+ return true;
+ }
+
+ if (!Array.isArray(obj)) {
+ return true;
+ }
+
+ let save = false;
+
+ for (let i = 0; i < obj.length; i++) {
+ const kidRef = obj[i];
+
+ if (kidRef && kidRef.toString() === dict.objId) {
+ this.nodes[i] = element;
+ save = true;
+ }
+ }
+
+ return save;
+ }
+
+ get serializable() {
+ function nodeToSerializable(node, parent, level = 0) {
+ if (level > MAX_DEPTH) {
+ (0, _util.warn)("StructTree too deep to be fully serialized.");
+ return;
+ }
+
+ const obj = Object.create(null);
+ obj.role = node.role;
+ obj.children = [];
+ parent.children.push(obj);
+ const alt = node.dict.get("Alt");
+
+ if ((0, _util.isString)(alt)) {
+ obj.alt = (0, _util.stringToPDFString)(alt);
+ }
+
+ for (const kid of node.kids) {
+ const kidElement = kid.type === StructElementType.ELEMENT ? kid.parentNode : null;
+
+ if (kidElement) {
+ nodeToSerializable(kidElement, obj, level + 1);
+ continue;
+ } else if (kid.type === StructElementType.PAGE_CONTENT || kid.type === StructElementType.STREAM_CONTENT) {
+ obj.children.push({
+ type: "content",
+ id: `page${kid.pageObjId}_mcid${kid.mcid}`
+ });
+ } else if (kid.type === StructElementType.OBJECT) {
+ obj.children.push({
+ type: "object",
+ id: kid.refObjId
+ });
+ }
+ }
+ }
+
+ const root = Object.create(null);
+ root.children = [];
+ root.role = "Root";
+
+ for (const child of this.nodes) {
+ if (!child) {
+ continue;
+ }
+
+ nodeToSerializable(child, root);
+ }
+
+ return root;
+ }
+
+}
+
+exports.StructTreePage = StructTreePage;
+
+/***/ }),
+/* 70 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.ObjectLoader = void 0;
+
+var _primitives = __w_pdfjs_require__(5);
+
+var _core_utils = __w_pdfjs_require__(9);
+
+var _util = __w_pdfjs_require__(2);
+
+function mayHaveChildren(value) {
+ return value instanceof _primitives.Ref || value instanceof _primitives.Dict || Array.isArray(value) || (0, _primitives.isStream)(value);
+}
+
+function addChildren(node, nodesToVisit) {
+ if (node instanceof _primitives.Dict) {
+ node = node.getRawValues();
+ } else if ((0, _primitives.isStream)(node)) {
+ node = node.dict.getRawValues();
+ } else if (!Array.isArray(node)) {
+ return;
+ }
+
+ for (const rawValue of node) {
+ if (mayHaveChildren(rawValue)) {
+ nodesToVisit.push(rawValue);
+ }
+ }
+}
+
+class ObjectLoader {
+ constructor(dict, keys, xref) {
+ this.dict = dict;
+ this.keys = keys;
+ this.xref = xref;
+ this.refSet = null;
+ }
+
+ async load() {
+ if (this.xref.stream.isDataLoaded) {
+ return undefined;
+ }
+
+ const {
+ keys,
+ dict
+ } = this;
+ this.refSet = new _primitives.RefSet();
+ const nodesToVisit = [];
+
+ for (let i = 0, ii = keys.length; i < ii; i++) {
+ const rawValue = dict.getRaw(keys[i]);
+
+ if (rawValue !== undefined) {
+ nodesToVisit.push(rawValue);
+ }
+ }
+
+ return this._walk(nodesToVisit);
+ }
+
+ async _walk(nodesToVisit) {
+ const nodesToRevisit = [];
+ const pendingRequests = [];
+
+ while (nodesToVisit.length) {
+ let currentNode = nodesToVisit.pop();
+
+ if (currentNode instanceof _primitives.Ref) {
+ if (this.refSet.has(currentNode)) {
+ continue;
+ }
+
+ try {
+ this.refSet.put(currentNode);
+ currentNode = this.xref.fetch(currentNode);
+ } catch (ex) {
+ if (!(ex instanceof _core_utils.MissingDataException)) {
+ (0, _util.warn)(`ObjectLoader._walk - requesting all data: "${ex}".`);
+ this.refSet = null;
+ const {
+ manager
+ } = this.xref.stream;
+ return manager.requestAllChunks();
+ }
+
+ nodesToRevisit.push(currentNode);
+ pendingRequests.push({
+ begin: ex.begin,
+ end: ex.end
+ });
+ }
+ }
+
+ if ((0, _primitives.isStream)(currentNode)) {
+ const baseStreams = currentNode.getBaseStreams();
+
+ if (baseStreams) {
+ let foundMissingData = false;
+
+ for (const stream of baseStreams) {
+ if (stream.isDataLoaded) {
+ continue;
+ }
+
+ foundMissingData = true;
+ pendingRequests.push({
+ begin: stream.start,
+ end: stream.end
+ });
+ }
+
+ if (foundMissingData) {
+ nodesToRevisit.push(currentNode);
+ }
+ }
+ }
+
+ addChildren(currentNode, nodesToVisit);
+ }
+
+ if (pendingRequests.length) {
+ await this.xref.stream.manager.requestRanges(pendingRequests);
+
+ for (const node of nodesToRevisit) {
+ if (node instanceof _primitives.Ref) {
+ this.refSet.remove(node);
+ }
+ }
+
+ return this._walk(nodesToRevisit);
+ }
+
+ this.refSet = null;
+ return undefined;
+ }
+
+}
+
+exports.ObjectLoader = ObjectLoader;
+
+/***/ }),
+/* 71 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.incrementalUpdate = incrementalUpdate;
+exports.writeDict = writeDict;
+
+var _util = __w_pdfjs_require__(2);
+
+var _primitives = __w_pdfjs_require__(5);
+
+var _core_utils = __w_pdfjs_require__(9);
+
+var _xml_parser = __w_pdfjs_require__(68);
+
+var _crypto = __w_pdfjs_require__(72);
+
+function writeDict(dict, buffer, transform) {
+ buffer.push("<<");
+
+ for (const key of dict.getKeys()) {
+ buffer.push(` /${(0, _core_utils.escapePDFName)(key)} `);
+ writeValue(dict.getRaw(key), buffer, transform);
+ }
+
+ buffer.push(">>");
+}
+
+function writeStream(stream, buffer, transform) {
+ writeDict(stream.dict, buffer, transform);
+ buffer.push(" stream\n");
+ let string = stream.getString();
+
+ if (transform !== null) {
+ string = transform.encryptString(string);
+ }
+
+ buffer.push(string, "\nendstream\n");
+}
+
+function writeArray(array, buffer, transform) {
+ buffer.push("[");
+ let first = true;
+
+ for (const val of array) {
+ if (!first) {
+ buffer.push(" ");
+ } else {
+ first = false;
+ }
+
+ writeValue(val, buffer, transform);
+ }
+
+ buffer.push("]");
+}
+
+function numberToString(value) {
+ if (Number.isInteger(value)) {
+ return value.toString();
+ }
+
+ const roundedValue = Math.round(value * 100);
+
+ if (roundedValue % 100 === 0) {
+ return (roundedValue / 100).toString();
+ }
+
+ if (roundedValue % 10 === 0) {
+ return value.toFixed(1);
+ }
+
+ return value.toFixed(2);
+}
+
+function writeValue(value, buffer, transform) {
+ if ((0, _primitives.isName)(value)) {
+ buffer.push(`/${(0, _core_utils.escapePDFName)(value.name)}`);
+ } else if ((0, _primitives.isRef)(value)) {
+ buffer.push(`${value.num} ${value.gen} R`);
+ } else if (Array.isArray(value)) {
+ writeArray(value, buffer, transform);
+ } else if (typeof value === "string") {
+ if (transform !== null) {
+ value = transform.encryptString(value);
+ }
+
+ buffer.push(`(${(0, _util.escapeString)(value)})`);
+ } else if (typeof value === "number") {
+ buffer.push(numberToString(value));
+ } else if ((0, _primitives.isDict)(value)) {
+ writeDict(value, buffer, transform);
+ } else if ((0, _primitives.isStream)(value)) {
+ writeStream(value, buffer, transform);
+ }
+}
+
+function writeInt(number, size, offset, buffer) {
+ for (let i = size + offset - 1; i > offset - 1; i--) {
+ buffer[i] = number & 0xff;
+ number >>= 8;
+ }
+
+ return offset + size;
+}
+
+function writeString(string, offset, buffer) {
+ for (let i = 0, len = string.length; i < len; i++) {
+ buffer[offset + i] = string.charCodeAt(i) & 0xff;
+ }
+}
+
+function computeMD5(filesize, xrefInfo) {
+ const time = Math.floor(Date.now() / 1000);
+ const filename = xrefInfo.filename || "";
+ const md5Buffer = [time.toString(), filename, filesize.toString()];
+ let md5BufferLen = md5Buffer.reduce((a, str) => a + str.length, 0);
+
+ for (const value of Object.values(xrefInfo.info)) {
+ md5Buffer.push(value);
+ md5BufferLen += value.length;
+ }
+
+ const array = new Uint8Array(md5BufferLen);
+ let offset = 0;
+
+ for (const str of md5Buffer) {
+ writeString(str, offset, array);
+ offset += str.length;
+ }
+
+ return (0, _util.bytesToString)((0, _crypto.calculateMD5)(array));
+}
+
+function writeXFADataForAcroform(str, newRefs) {
+ const xml = new _xml_parser.SimpleXMLParser({
+ hasAttributes: true
+ }).parseFromString(str);
+
+ for (const {
+ xfa
+ } of newRefs) {
+ if (!xfa) {
+ continue;
+ }
+
+ const {
+ path,
+ value
+ } = xfa;
+
+ if (!path) {
+ continue;
+ }
+
+ const node = xml.documentElement.searchNode((0, _core_utils.parseXFAPath)(path), 0);
+
+ if (node) {
+ node.childNodes = [new _xml_parser.SimpleDOMNode("#text", value)];
+ } else {
+ (0, _util.warn)(`Node not found for path: ${path}`);
+ }
+ }
+
+ const buffer = [];
+ xml.documentElement.dump(buffer);
+ return buffer.join("");
+}
+
+function updateXFA(xfaData, datasetsRef, newRefs, xref) {
+ if (datasetsRef === null || xref === null) {
+ return;
+ }
+
+ if (xfaData === null) {
+ const datasets = xref.fetchIfRef(datasetsRef);
+ xfaData = writeXFADataForAcroform(datasets.getString(), newRefs);
+ }
+
+ const encrypt = xref.encrypt;
+
+ if (encrypt) {
+ const transform = encrypt.createCipherTransform(datasetsRef.num, datasetsRef.gen);
+ xfaData = transform.encryptString(xfaData);
+ }
+
+ const data = `${datasetsRef.num} ${datasetsRef.gen} obj\n` + `<< /Type /EmbeddedFile /Length ${xfaData.length}>>\nstream\n` + xfaData + "\nendstream\nendobj\n";
+ newRefs.push({
+ ref: datasetsRef,
+ data
+ });
+}
+
+function incrementalUpdate({
+ originalData,
+ xrefInfo,
+ newRefs,
+ xref = null,
+ datasetsRef = null,
+ xfaData = null
+}) {
+ updateXFA(xfaData, datasetsRef, newRefs, xref);
+ const newXref = new _primitives.Dict(null);
+ const refForXrefTable = xrefInfo.newRef;
+ let buffer, baseOffset;
+ const lastByte = originalData[originalData.length - 1];
+
+ if (lastByte === 0x0a || lastByte === 0x0d) {
+ buffer = [];
+ baseOffset = originalData.length;
+ } else {
+ buffer = ["\n"];
+ baseOffset = originalData.length + 1;
+ }
+
+ newXref.set("Size", refForXrefTable.num + 1);
+ newXref.set("Prev", xrefInfo.startXRef);
+ newXref.set("Type", _primitives.Name.get("XRef"));
+
+ if (xrefInfo.rootRef !== null) {
+ newXref.set("Root", xrefInfo.rootRef);
+ }
+
+ if (xrefInfo.infoRef !== null) {
+ newXref.set("Info", xrefInfo.infoRef);
+ }
+
+ if (xrefInfo.encryptRef !== null) {
+ newXref.set("Encrypt", xrefInfo.encryptRef);
+ }
+
+ newRefs.push({
+ ref: refForXrefTable,
+ data: ""
+ });
+ newRefs = newRefs.sort((a, b) => {
+ return a.ref.num - b.ref.num;
+ });
+ const xrefTableData = [[0, 1, 0xffff]];
+ const indexes = [0, 1];
+ let maxOffset = 0;
+
+ for (const {
+ ref,
+ data
+ } of newRefs) {
+ maxOffset = Math.max(maxOffset, baseOffset);
+ xrefTableData.push([1, baseOffset, Math.min(ref.gen, 0xffff)]);
+ baseOffset += data.length;
+ indexes.push(ref.num, 1);
+ buffer.push(data);
+ }
+
+ newXref.set("Index", indexes);
+
+ if (Array.isArray(xrefInfo.fileIds) && xrefInfo.fileIds.length > 0) {
+ const md5 = computeMD5(baseOffset, xrefInfo);
+ newXref.set("ID", [xrefInfo.fileIds[0], md5]);
+ }
+
+ const offsetSize = Math.ceil(Math.log2(maxOffset) / 8);
+ const sizes = [1, offsetSize, 2];
+ const structSize = sizes[0] + sizes[1] + sizes[2];
+ const tableLength = structSize * xrefTableData.length;
+ newXref.set("W", sizes);
+ newXref.set("Length", tableLength);
+ buffer.push(`${refForXrefTable.num} ${refForXrefTable.gen} obj\n`);
+ writeDict(newXref, buffer, null);
+ buffer.push(" stream\n");
+ const bufferLen = buffer.reduce((a, str) => a + str.length, 0);
+ const footer = `\nendstream\nendobj\nstartxref\n${baseOffset}\n%%EOF\n`;
+ const array = new Uint8Array(originalData.length + bufferLen + tableLength + footer.length);
+ array.set(originalData);
+ let offset = originalData.length;
+
+ for (const str of buffer) {
+ writeString(str, offset, array);
+ offset += str.length;
+ }
+
+ for (const [type, objOffset, gen] of xrefTableData) {
+ offset = writeInt(type, sizes[0], offset, array);
+ offset = writeInt(objOffset, sizes[1], offset, array);
+ offset = writeInt(gen, sizes[2], offset, array);
+ }
+
+ writeString(footer, offset, array);
+ return array;
+}
+
+/***/ }),
+/* 72 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.calculateSHA384 = calculateSHA384;
+exports.PDF20 = exports.PDF17 = exports.CipherTransformFactory = exports.calculateSHA512 = exports.calculateSHA256 = exports.calculateMD5 = exports.ARCFourCipher = exports.AES256Cipher = exports.AES128Cipher = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _primitives = __w_pdfjs_require__(5);
+
+var _decrypt_stream = __w_pdfjs_require__(73);
+
+class ARCFourCipher {
+ constructor(key) {
+ this.a = 0;
+ this.b = 0;
+ const s = new Uint8Array(256);
+ const keyLength = key.length;
+
+ for (let i = 0; i < 256; ++i) {
+ s[i] = i;
+ }
+
+ for (let i = 0, j = 0; i < 256; ++i) {
+ const tmp = s[i];
+ j = j + tmp + key[i % keyLength] & 0xff;
+ s[i] = s[j];
+ s[j] = tmp;
+ }
+
+ this.s = s;
+ }
+
+ encryptBlock(data) {
+ let a = this.a,
+ b = this.b;
+ const s = this.s;
+ const n = data.length;
+ const output = new Uint8Array(n);
+
+ for (let i = 0; i < n; ++i) {
+ a = a + 1 & 0xff;
+ const tmp = s[a];
+ b = b + tmp & 0xff;
+ const tmp2 = s[b];
+ s[a] = tmp2;
+ s[b] = tmp;
+ output[i] = data[i] ^ s[tmp + tmp2 & 0xff];
+ }
+
+ this.a = a;
+ this.b = b;
+ return output;
+ }
+
+ decryptBlock(data) {
+ return this.encryptBlock(data);
+ }
+
+ encrypt(data) {
+ return this.encryptBlock(data);
+ }
+
+}
+
+exports.ARCFourCipher = ARCFourCipher;
+
+const calculateMD5 = function calculateMD5Closure() {
+ const r = new Uint8Array([7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21]);
+ const k = new Int32Array([-680876936, -389564586, 606105819, -1044525330, -176418897, 1200080426, -1473231341, -45705983, 1770035416, -1958414417, -42063, -1990404162, 1804603682, -40341101, -1502002290, 1236535329, -165796510, -1069501632, 643717713, -373897302, -701558691, 38016083, -660478335, -405537848, 568446438, -1019803690, -187363961, 1163531501, -1444681467, -51403784, 1735328473, -1926607734, -378558, -2022574463, 1839030562, -35309556, -1530992060, 1272893353, -155497632, -1094730640, 681279174, -358537222, -722521979, 76029189, -640364487, -421815835, 530742520, -995338651, -198630844, 1126891415, -1416354905, -57434055, 1700485571, -1894986606, -1051523, -2054922799, 1873313359, -30611744, -1560198380, 1309151649, -145523070, -1120210379, 718787259, -343485551]);
+
+ function hash(data, offset, length) {
+ let h0 = 1732584193,
+ h1 = -271733879,
+ h2 = -1732584194,
+ h3 = 271733878;
+ const paddedLength = length + 72 & ~63;
+ const padded = new Uint8Array(paddedLength);
+ let i, j;
+
+ for (i = 0; i < length; ++i) {
+ padded[i] = data[offset++];
+ }
+
+ padded[i++] = 0x80;
+ const n = paddedLength - 8;
+
+ while (i < n) {
+ padded[i++] = 0;
+ }
+
+ padded[i++] = length << 3 & 0xff;
+ padded[i++] = length >> 5 & 0xff;
+ padded[i++] = length >> 13 & 0xff;
+ padded[i++] = length >> 21 & 0xff;
+ padded[i++] = length >>> 29 & 0xff;
+ padded[i++] = 0;
+ padded[i++] = 0;
+ padded[i++] = 0;
+ const w = new Int32Array(16);
+
+ for (i = 0; i < paddedLength;) {
+ for (j = 0; j < 16; ++j, i += 4) {
+ w[j] = padded[i] | padded[i + 1] << 8 | padded[i + 2] << 16 | padded[i + 3] << 24;
+ }
+
+ let a = h0,
+ b = h1,
+ c = h2,
+ d = h3,
+ f,
+ g;
+
+ for (j = 0; j < 64; ++j) {
+ if (j < 16) {
+ f = b & c | ~b & d;
+ g = j;
+ } else if (j < 32) {
+ f = d & b | ~d & c;
+ g = 5 * j + 1 & 15;
+ } else if (j < 48) {
+ f = b ^ c ^ d;
+ g = 3 * j + 5 & 15;
+ } else {
+ f = c ^ (b | ~d);
+ g = 7 * j & 15;
+ }
+
+ const tmp = d,
+ rotateArg = a + f + k[j] + w[g] | 0,
+ rotate = r[j];
+ d = c;
+ c = b;
+ b = b + (rotateArg << rotate | rotateArg >>> 32 - rotate) | 0;
+ a = tmp;
+ }
+
+ h0 = h0 + a | 0;
+ h1 = h1 + b | 0;
+ h2 = h2 + c | 0;
+ h3 = h3 + d | 0;
+ }
+
+ return new Uint8Array([h0 & 0xFF, h0 >> 8 & 0xFF, h0 >> 16 & 0xFF, h0 >>> 24 & 0xFF, h1 & 0xFF, h1 >> 8 & 0xFF, h1 >> 16 & 0xFF, h1 >>> 24 & 0xFF, h2 & 0xFF, h2 >> 8 & 0xFF, h2 >> 16 & 0xFF, h2 >>> 24 & 0xFF, h3 & 0xFF, h3 >> 8 & 0xFF, h3 >> 16 & 0xFF, h3 >>> 24 & 0xFF]);
+ }
+
+ return hash;
+}();
+
+exports.calculateMD5 = calculateMD5;
+
+class Word64 {
+ constructor(highInteger, lowInteger) {
+ this.high = highInteger | 0;
+ this.low = lowInteger | 0;
+ }
+
+ and(word) {
+ this.high &= word.high;
+ this.low &= word.low;
+ }
+
+ xor(word) {
+ this.high ^= word.high;
+ this.low ^= word.low;
+ }
+
+ or(word) {
+ this.high |= word.high;
+ this.low |= word.low;
+ }
+
+ shiftRight(places) {
+ if (places >= 32) {
+ this.low = this.high >>> places - 32 | 0;
+ this.high = 0;
+ } else {
+ this.low = this.low >>> places | this.high << 32 - places;
+ this.high = this.high >>> places | 0;
+ }
+ }
+
+ shiftLeft(places) {
+ if (places >= 32) {
+ this.high = this.low << places - 32;
+ this.low = 0;
+ } else {
+ this.high = this.high << places | this.low >>> 32 - places;
+ this.low <<= places;
+ }
+ }
+
+ rotateRight(places) {
+ let low, high;
+
+ if (places & 32) {
+ high = this.low;
+ low = this.high;
+ } else {
+ low = this.low;
+ high = this.high;
+ }
+
+ places &= 31;
+ this.low = low >>> places | high << 32 - places;
+ this.high = high >>> places | low << 32 - places;
+ }
+
+ not() {
+ this.high = ~this.high;
+ this.low = ~this.low;
+ }
+
+ add(word) {
+ const lowAdd = (this.low >>> 0) + (word.low >>> 0);
+ let highAdd = (this.high >>> 0) + (word.high >>> 0);
+
+ if (lowAdd > 0xffffffff) {
+ highAdd += 1;
+ }
+
+ this.low = lowAdd | 0;
+ this.high = highAdd | 0;
+ }
+
+ copyTo(bytes, offset) {
+ bytes[offset] = this.high >>> 24 & 0xff;
+ bytes[offset + 1] = this.high >> 16 & 0xff;
+ bytes[offset + 2] = this.high >> 8 & 0xff;
+ bytes[offset + 3] = this.high & 0xff;
+ bytes[offset + 4] = this.low >>> 24 & 0xff;
+ bytes[offset + 5] = this.low >> 16 & 0xff;
+ bytes[offset + 6] = this.low >> 8 & 0xff;
+ bytes[offset + 7] = this.low & 0xff;
+ }
+
+ assign(word) {
+ this.high = word.high;
+ this.low = word.low;
+ }
+
+}
+
+const calculateSHA256 = function calculateSHA256Closure() {
+ function rotr(x, n) {
+ return x >>> n | x << 32 - n;
+ }
+
+ function ch(x, y, z) {
+ return x & y ^ ~x & z;
+ }
+
+ function maj(x, y, z) {
+ return x & y ^ x & z ^ y & z;
+ }
+
+ function sigma(x) {
+ return rotr(x, 2) ^ rotr(x, 13) ^ rotr(x, 22);
+ }
+
+ function sigmaPrime(x) {
+ return rotr(x, 6) ^ rotr(x, 11) ^ rotr(x, 25);
+ }
+
+ function littleSigma(x) {
+ return rotr(x, 7) ^ rotr(x, 18) ^ x >>> 3;
+ }
+
+ function littleSigmaPrime(x) {
+ return rotr(x, 17) ^ rotr(x, 19) ^ x >>> 10;
+ }
+
+ const k = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2];
+
+ function hash(data, offset, length) {
+ let h0 = 0x6a09e667,
+ h1 = 0xbb67ae85,
+ h2 = 0x3c6ef372,
+ h3 = 0xa54ff53a,
+ h4 = 0x510e527f,
+ h5 = 0x9b05688c,
+ h6 = 0x1f83d9ab,
+ h7 = 0x5be0cd19;
+ const paddedLength = Math.ceil((length + 9) / 64) * 64;
+ const padded = new Uint8Array(paddedLength);
+ let i, j;
+
+ for (i = 0; i < length; ++i) {
+ padded[i] = data[offset++];
+ }
+
+ padded[i++] = 0x80;
+ const n = paddedLength - 8;
+
+ while (i < n) {
+ padded[i++] = 0;
+ }
+
+ padded[i++] = 0;
+ padded[i++] = 0;
+ padded[i++] = 0;
+ padded[i++] = length >>> 29 & 0xff;
+ padded[i++] = length >> 21 & 0xff;
+ padded[i++] = length >> 13 & 0xff;
+ padded[i++] = length >> 5 & 0xff;
+ padded[i++] = length << 3 & 0xff;
+ const w = new Uint32Array(64);
+
+ for (i = 0; i < paddedLength;) {
+ for (j = 0; j < 16; ++j) {
+ w[j] = padded[i] << 24 | padded[i + 1] << 16 | padded[i + 2] << 8 | padded[i + 3];
+ i += 4;
+ }
+
+ for (j = 16; j < 64; ++j) {
+ w[j] = littleSigmaPrime(w[j - 2]) + w[j - 7] + littleSigma(w[j - 15]) + w[j - 16] | 0;
+ }
+
+ let a = h0,
+ b = h1,
+ c = h2,
+ d = h3,
+ e = h4,
+ f = h5,
+ g = h6,
+ h = h7,
+ t1,
+ t2;
+
+ for (j = 0; j < 64; ++j) {
+ t1 = h + sigmaPrime(e) + ch(e, f, g) + k[j] + w[j];
+ t2 = sigma(a) + maj(a, b, c);
+ h = g;
+ g = f;
+ f = e;
+ e = d + t1 | 0;
+ d = c;
+ c = b;
+ b = a;
+ a = t1 + t2 | 0;
+ }
+
+ h0 = h0 + a | 0;
+ h1 = h1 + b | 0;
+ h2 = h2 + c | 0;
+ h3 = h3 + d | 0;
+ h4 = h4 + e | 0;
+ h5 = h5 + f | 0;
+ h6 = h6 + g | 0;
+ h7 = h7 + h | 0;
+ }
+
+ return new Uint8Array([h0 >> 24 & 0xFF, h0 >> 16 & 0xFF, h0 >> 8 & 0xFF, h0 & 0xFF, h1 >> 24 & 0xFF, h1 >> 16 & 0xFF, h1 >> 8 & 0xFF, h1 & 0xFF, h2 >> 24 & 0xFF, h2 >> 16 & 0xFF, h2 >> 8 & 0xFF, h2 & 0xFF, h3 >> 24 & 0xFF, h3 >> 16 & 0xFF, h3 >> 8 & 0xFF, h3 & 0xFF, h4 >> 24 & 0xFF, h4 >> 16 & 0xFF, h4 >> 8 & 0xFF, h4 & 0xFF, h5 >> 24 & 0xFF, h5 >> 16 & 0xFF, h5 >> 8 & 0xFF, h5 & 0xFF, h6 >> 24 & 0xFF, h6 >> 16 & 0xFF, h6 >> 8 & 0xFF, h6 & 0xFF, h7 >> 24 & 0xFF, h7 >> 16 & 0xFF, h7 >> 8 & 0xFF, h7 & 0xFF]);
+ }
+
+ return hash;
+}();
+
+exports.calculateSHA256 = calculateSHA256;
+
+const calculateSHA512 = function calculateSHA512Closure() {
+ function ch(result, x, y, z, tmp) {
+ result.assign(x);
+ result.and(y);
+ tmp.assign(x);
+ tmp.not();
+ tmp.and(z);
+ result.xor(tmp);
+ }
+
+ function maj(result, x, y, z, tmp) {
+ result.assign(x);
+ result.and(y);
+ tmp.assign(x);
+ tmp.and(z);
+ result.xor(tmp);
+ tmp.assign(y);
+ tmp.and(z);
+ result.xor(tmp);
+ }
+
+ function sigma(result, x, tmp) {
+ result.assign(x);
+ result.rotateRight(28);
+ tmp.assign(x);
+ tmp.rotateRight(34);
+ result.xor(tmp);
+ tmp.assign(x);
+ tmp.rotateRight(39);
+ result.xor(tmp);
+ }
+
+ function sigmaPrime(result, x, tmp) {
+ result.assign(x);
+ result.rotateRight(14);
+ tmp.assign(x);
+ tmp.rotateRight(18);
+ result.xor(tmp);
+ tmp.assign(x);
+ tmp.rotateRight(41);
+ result.xor(tmp);
+ }
+
+ function littleSigma(result, x, tmp) {
+ result.assign(x);
+ result.rotateRight(1);
+ tmp.assign(x);
+ tmp.rotateRight(8);
+ result.xor(tmp);
+ tmp.assign(x);
+ tmp.shiftRight(7);
+ result.xor(tmp);
+ }
+
+ function littleSigmaPrime(result, x, tmp) {
+ result.assign(x);
+ result.rotateRight(19);
+ tmp.assign(x);
+ tmp.rotateRight(61);
+ result.xor(tmp);
+ tmp.assign(x);
+ tmp.shiftRight(6);
+ result.xor(tmp);
+ }
+
+ const k = [new Word64(0x428a2f98, 0xd728ae22), new Word64(0x71374491, 0x23ef65cd), new Word64(0xb5c0fbcf, 0xec4d3b2f), new Word64(0xe9b5dba5, 0x8189dbbc), new Word64(0x3956c25b, 0xf348b538), new Word64(0x59f111f1, 0xb605d019), new Word64(0x923f82a4, 0xaf194f9b), new Word64(0xab1c5ed5, 0xda6d8118), new Word64(0xd807aa98, 0xa3030242), new Word64(0x12835b01, 0x45706fbe), new Word64(0x243185be, 0x4ee4b28c), new Word64(0x550c7dc3, 0xd5ffb4e2), new Word64(0x72be5d74, 0xf27b896f), new Word64(0x80deb1fe, 0x3b1696b1), new Word64(0x9bdc06a7, 0x25c71235), new Word64(0xc19bf174, 0xcf692694), new Word64(0xe49b69c1, 0x9ef14ad2), new Word64(0xefbe4786, 0x384f25e3), new Word64(0x0fc19dc6, 0x8b8cd5b5), new Word64(0x240ca1cc, 0x77ac9c65), new Word64(0x2de92c6f, 0x592b0275), new Word64(0x4a7484aa, 0x6ea6e483), new Word64(0x5cb0a9dc, 0xbd41fbd4), new Word64(0x76f988da, 0x831153b5), new Word64(0x983e5152, 0xee66dfab), new Word64(0xa831c66d, 0x2db43210), new Word64(0xb00327c8, 0x98fb213f), new Word64(0xbf597fc7, 0xbeef0ee4), new Word64(0xc6e00bf3, 0x3da88fc2), new Word64(0xd5a79147, 0x930aa725), new Word64(0x06ca6351, 0xe003826f), new Word64(0x14292967, 0x0a0e6e70), new Word64(0x27b70a85, 0x46d22ffc), new Word64(0x2e1b2138, 0x5c26c926), new Word64(0x4d2c6dfc, 0x5ac42aed), new Word64(0x53380d13, 0x9d95b3df), new Word64(0x650a7354, 0x8baf63de), new Word64(0x766a0abb, 0x3c77b2a8), new Word64(0x81c2c92e, 0x47edaee6), new Word64(0x92722c85, 0x1482353b), new Word64(0xa2bfe8a1, 0x4cf10364), new Word64(0xa81a664b, 0xbc423001), new Word64(0xc24b8b70, 0xd0f89791), new Word64(0xc76c51a3, 0x0654be30), new Word64(0xd192e819, 0xd6ef5218), new Word64(0xd6990624, 0x5565a910), new Word64(0xf40e3585, 0x5771202a), new Word64(0x106aa070, 0x32bbd1b8), new Word64(0x19a4c116, 0xb8d2d0c8), new Word64(0x1e376c08, 0x5141ab53), new Word64(0x2748774c, 0xdf8eeb99), new Word64(0x34b0bcb5, 0xe19b48a8), new Word64(0x391c0cb3, 0xc5c95a63), new Word64(0x4ed8aa4a, 0xe3418acb), new Word64(0x5b9cca4f, 0x7763e373), new Word64(0x682e6ff3, 0xd6b2b8a3), new Word64(0x748f82ee, 0x5defb2fc), new Word64(0x78a5636f, 0x43172f60), new Word64(0x84c87814, 0xa1f0ab72), new Word64(0x8cc70208, 0x1a6439ec), new Word64(0x90befffa, 0x23631e28), new Word64(0xa4506ceb, 0xde82bde9), new Word64(0xbef9a3f7, 0xb2c67915), new Word64(0xc67178f2, 0xe372532b), new Word64(0xca273ece, 0xea26619c), new Word64(0xd186b8c7, 0x21c0c207), new Word64(0xeada7dd6, 0xcde0eb1e), new Word64(0xf57d4f7f, 0xee6ed178), new Word64(0x06f067aa, 0x72176fba), new Word64(0x0a637dc5, 0xa2c898a6), new Word64(0x113f9804, 0xbef90dae), new Word64(0x1b710b35, 0x131c471b), new Word64(0x28db77f5, 0x23047d84), new Word64(0x32caab7b, 0x40c72493), new Word64(0x3c9ebe0a, 0x15c9bebc), new Word64(0x431d67c4, 0x9c100d4c), new Word64(0x4cc5d4be, 0xcb3e42b6), new Word64(0x597f299c, 0xfc657e2a), new Word64(0x5fcb6fab, 0x3ad6faec), new Word64(0x6c44198c, 0x4a475817)];
+
+ function hash(data, offset, length, mode384 = false) {
+ let h0, h1, h2, h3, h4, h5, h6, h7;
+
+ if (!mode384) {
+ h0 = new Word64(0x6a09e667, 0xf3bcc908);
+ h1 = new Word64(0xbb67ae85, 0x84caa73b);
+ h2 = new Word64(0x3c6ef372, 0xfe94f82b);
+ h3 = new Word64(0xa54ff53a, 0x5f1d36f1);
+ h4 = new Word64(0x510e527f, 0xade682d1);
+ h5 = new Word64(0x9b05688c, 0x2b3e6c1f);
+ h6 = new Word64(0x1f83d9ab, 0xfb41bd6b);
+ h7 = new Word64(0x5be0cd19, 0x137e2179);
+ } else {
+ h0 = new Word64(0xcbbb9d5d, 0xc1059ed8);
+ h1 = new Word64(0x629a292a, 0x367cd507);
+ h2 = new Word64(0x9159015a, 0x3070dd17);
+ h3 = new Word64(0x152fecd8, 0xf70e5939);
+ h4 = new Word64(0x67332667, 0xffc00b31);
+ h5 = new Word64(0x8eb44a87, 0x68581511);
+ h6 = new Word64(0xdb0c2e0d, 0x64f98fa7);
+ h7 = new Word64(0x47b5481d, 0xbefa4fa4);
+ }
+
+ const paddedLength = Math.ceil((length + 17) / 128) * 128;
+ const padded = new Uint8Array(paddedLength);
+ let i, j;
+
+ for (i = 0; i < length; ++i) {
+ padded[i] = data[offset++];
+ }
+
+ padded[i++] = 0x80;
+ const n = paddedLength - 16;
+
+ while (i < n) {
+ padded[i++] = 0;
+ }
+
+ padded[i++] = 0;
+ padded[i++] = 0;
+ padded[i++] = 0;
+ padded[i++] = 0;
+ padded[i++] = 0;
+ padded[i++] = 0;
+ padded[i++] = 0;
+ padded[i++] = 0;
+ padded[i++] = 0;
+ padded[i++] = 0;
+ padded[i++] = 0;
+ padded[i++] = length >>> 29 & 0xff;
+ padded[i++] = length >> 21 & 0xff;
+ padded[i++] = length >> 13 & 0xff;
+ padded[i++] = length >> 5 & 0xff;
+ padded[i++] = length << 3 & 0xff;
+ const w = new Array(80);
+
+ for (i = 0; i < 80; i++) {
+ w[i] = new Word64(0, 0);
+ }
+
+ let a = new Word64(0, 0),
+ b = new Word64(0, 0),
+ c = new Word64(0, 0);
+ let d = new Word64(0, 0),
+ e = new Word64(0, 0),
+ f = new Word64(0, 0);
+ let g = new Word64(0, 0),
+ h = new Word64(0, 0);
+ const t1 = new Word64(0, 0),
+ t2 = new Word64(0, 0);
+ const tmp1 = new Word64(0, 0),
+ tmp2 = new Word64(0, 0);
+ let tmp3;
+
+ for (i = 0; i < paddedLength;) {
+ for (j = 0; j < 16; ++j) {
+ w[j].high = padded[i] << 24 | padded[i + 1] << 16 | padded[i + 2] << 8 | padded[i + 3];
+ w[j].low = padded[i + 4] << 24 | padded[i + 5] << 16 | padded[i + 6] << 8 | padded[i + 7];
+ i += 8;
+ }
+
+ for (j = 16; j < 80; ++j) {
+ tmp3 = w[j];
+ littleSigmaPrime(tmp3, w[j - 2], tmp2);
+ tmp3.add(w[j - 7]);
+ littleSigma(tmp1, w[j - 15], tmp2);
+ tmp3.add(tmp1);
+ tmp3.add(w[j - 16]);
+ }
+
+ a.assign(h0);
+ b.assign(h1);
+ c.assign(h2);
+ d.assign(h3);
+ e.assign(h4);
+ f.assign(h5);
+ g.assign(h6);
+ h.assign(h7);
+
+ for (j = 0; j < 80; ++j) {
+ t1.assign(h);
+ sigmaPrime(tmp1, e, tmp2);
+ t1.add(tmp1);
+ ch(tmp1, e, f, g, tmp2);
+ t1.add(tmp1);
+ t1.add(k[j]);
+ t1.add(w[j]);
+ sigma(t2, a, tmp2);
+ maj(tmp1, a, b, c, tmp2);
+ t2.add(tmp1);
+ tmp3 = h;
+ h = g;
+ g = f;
+ f = e;
+ d.add(t1);
+ e = d;
+ d = c;
+ c = b;
+ b = a;
+ tmp3.assign(t1);
+ tmp3.add(t2);
+ a = tmp3;
+ }
+
+ h0.add(a);
+ h1.add(b);
+ h2.add(c);
+ h3.add(d);
+ h4.add(e);
+ h5.add(f);
+ h6.add(g);
+ h7.add(h);
+ }
+
+ let result;
+
+ if (!mode384) {
+ result = new Uint8Array(64);
+ h0.copyTo(result, 0);
+ h1.copyTo(result, 8);
+ h2.copyTo(result, 16);
+ h3.copyTo(result, 24);
+ h4.copyTo(result, 32);
+ h5.copyTo(result, 40);
+ h6.copyTo(result, 48);
+ h7.copyTo(result, 56);
+ } else {
+ result = new Uint8Array(48);
+ h0.copyTo(result, 0);
+ h1.copyTo(result, 8);
+ h2.copyTo(result, 16);
+ h3.copyTo(result, 24);
+ h4.copyTo(result, 32);
+ h5.copyTo(result, 40);
+ }
+
+ return result;
+ }
+
+ return hash;
+}();
+
+exports.calculateSHA512 = calculateSHA512;
+
+function calculateSHA384(data, offset, length) {
+ return calculateSHA512(data, offset, length, true);
+}
+
+class NullCipher {
+ decryptBlock(data) {
+ return data;
+ }
+
+ encrypt(data) {
+ return data;
+ }
+
+}
+
+class AESBaseCipher {
+ constructor() {
+ if (this.constructor === AESBaseCipher) {
+ (0, _util.unreachable)("Cannot initialize AESBaseCipher.");
+ }
+
+ this._s = new Uint8Array([0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16]);
+ this._inv_s = new Uint8Array([0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d]);
+ this._mix = new Uint32Array([0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3]);
+ this._mixCol = new Uint8Array(256);
+
+ for (let i = 0; i < 256; i++) {
+ if (i < 128) {
+ this._mixCol[i] = i << 1;
+ } else {
+ this._mixCol[i] = i << 1 ^ 0x1b;
+ }
+ }
+
+ this.buffer = new Uint8Array(16);
+ this.bufferPosition = 0;
+ }
+
+ _expandKey(cipherKey) {
+ (0, _util.unreachable)("Cannot call `_expandKey` on the base class");
+ }
+
+ _decrypt(input, key) {
+ let t, u, v;
+ const state = new Uint8Array(16);
+ state.set(input);
+
+ for (let j = 0, k = this._keySize; j < 16; ++j, ++k) {
+ state[j] ^= key[k];
+ }
+
+ for (let i = this._cyclesOfRepetition - 1; i >= 1; --i) {
+ t = state[13];
+ state[13] = state[9];
+ state[9] = state[5];
+ state[5] = state[1];
+ state[1] = t;
+ t = state[14];
+ u = state[10];
+ state[14] = state[6];
+ state[10] = state[2];
+ state[6] = t;
+ state[2] = u;
+ t = state[15];
+ u = state[11];
+ v = state[7];
+ state[15] = state[3];
+ state[11] = t;
+ state[7] = u;
+ state[3] = v;
+
+ for (let j = 0; j < 16; ++j) {
+ state[j] = this._inv_s[state[j]];
+ }
+
+ for (let j = 0, k = i * 16; j < 16; ++j, ++k) {
+ state[j] ^= key[k];
+ }
+
+ for (let j = 0; j < 16; j += 4) {
+ const s0 = this._mix[state[j]];
+ const s1 = this._mix[state[j + 1]];
+ const s2 = this._mix[state[j + 2]];
+ const s3 = this._mix[state[j + 3]];
+ t = s0 ^ s1 >>> 8 ^ s1 << 24 ^ s2 >>> 16 ^ s2 << 16 ^ s3 >>> 24 ^ s3 << 8;
+ state[j] = t >>> 24 & 0xff;
+ state[j + 1] = t >> 16 & 0xff;
+ state[j + 2] = t >> 8 & 0xff;
+ state[j + 3] = t & 0xff;
+ }
+ }
+
+ t = state[13];
+ state[13] = state[9];
+ state[9] = state[5];
+ state[5] = state[1];
+ state[1] = t;
+ t = state[14];
+ u = state[10];
+ state[14] = state[6];
+ state[10] = state[2];
+ state[6] = t;
+ state[2] = u;
+ t = state[15];
+ u = state[11];
+ v = state[7];
+ state[15] = state[3];
+ state[11] = t;
+ state[7] = u;
+ state[3] = v;
+
+ for (let j = 0; j < 16; ++j) {
+ state[j] = this._inv_s[state[j]];
+ state[j] ^= key[j];
+ }
+
+ return state;
+ }
+
+ _encrypt(input, key) {
+ const s = this._s;
+ let t, u, v;
+ const state = new Uint8Array(16);
+ state.set(input);
+
+ for (let j = 0; j < 16; ++j) {
+ state[j] ^= key[j];
+ }
+
+ for (let i = 1; i < this._cyclesOfRepetition; i++) {
+ for (let j = 0; j < 16; ++j) {
+ state[j] = s[state[j]];
+ }
+
+ v = state[1];
+ state[1] = state[5];
+ state[5] = state[9];
+ state[9] = state[13];
+ state[13] = v;
+ v = state[2];
+ u = state[6];
+ state[2] = state[10];
+ state[6] = state[14];
+ state[10] = v;
+ state[14] = u;
+ v = state[3];
+ u = state[7];
+ t = state[11];
+ state[3] = state[15];
+ state[7] = v;
+ state[11] = u;
+ state[15] = t;
+
+ for (let j = 0; j < 16; j += 4) {
+ const s0 = state[j + 0];
+ const s1 = state[j + 1];
+ const s2 = state[j + 2];
+ const s3 = state[j + 3];
+ t = s0 ^ s1 ^ s2 ^ s3;
+ state[j + 0] ^= t ^ this._mixCol[s0 ^ s1];
+ state[j + 1] ^= t ^ this._mixCol[s1 ^ s2];
+ state[j + 2] ^= t ^ this._mixCol[s2 ^ s3];
+ state[j + 3] ^= t ^ this._mixCol[s3 ^ s0];
+ }
+
+ for (let j = 0, k = i * 16; j < 16; ++j, ++k) {
+ state[j] ^= key[k];
+ }
+ }
+
+ for (let j = 0; j < 16; ++j) {
+ state[j] = s[state[j]];
+ }
+
+ v = state[1];
+ state[1] = state[5];
+ state[5] = state[9];
+ state[9] = state[13];
+ state[13] = v;
+ v = state[2];
+ u = state[6];
+ state[2] = state[10];
+ state[6] = state[14];
+ state[10] = v;
+ state[14] = u;
+ v = state[3];
+ u = state[7];
+ t = state[11];
+ state[3] = state[15];
+ state[7] = v;
+ state[11] = u;
+ state[15] = t;
+
+ for (let j = 0, k = this._keySize; j < 16; ++j, ++k) {
+ state[j] ^= key[k];
+ }
+
+ return state;
+ }
+
+ _decryptBlock2(data, finalize) {
+ const sourceLength = data.length;
+ let buffer = this.buffer,
+ bufferLength = this.bufferPosition;
+ const result = [];
+ let iv = this.iv;
+
+ for (let i = 0; i < sourceLength; ++i) {
+ buffer[bufferLength] = data[i];
+ ++bufferLength;
+
+ if (bufferLength < 16) {
+ continue;
+ }
+
+ const plain = this._decrypt(buffer, this._key);
+
+ for (let j = 0; j < 16; ++j) {
+ plain[j] ^= iv[j];
+ }
+
+ iv = buffer;
+ result.push(plain);
+ buffer = new Uint8Array(16);
+ bufferLength = 0;
+ }
+
+ this.buffer = buffer;
+ this.bufferLength = bufferLength;
+ this.iv = iv;
+
+ if (result.length === 0) {
+ return new Uint8Array(0);
+ }
+
+ let outputLength = 16 * result.length;
+
+ if (finalize) {
+ const lastBlock = result[result.length - 1];
+ let psLen = lastBlock[15];
+
+ if (psLen <= 16) {
+ for (let i = 15, ii = 16 - psLen; i >= ii; --i) {
+ if (lastBlock[i] !== psLen) {
+ psLen = 0;
+ break;
+ }
+ }
+
+ outputLength -= psLen;
+ result[result.length - 1] = lastBlock.subarray(0, 16 - psLen);
+ }
+ }
+
+ const output = new Uint8Array(outputLength);
+
+ for (let i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) {
+ output.set(result[i], j);
+ }
+
+ return output;
+ }
+
+ decryptBlock(data, finalize, iv = null) {
+ const sourceLength = data.length;
+ const buffer = this.buffer;
+ let bufferLength = this.bufferPosition;
+
+ if (iv) {
+ this.iv = iv;
+ } else {
+ for (let i = 0; bufferLength < 16 && i < sourceLength; ++i, ++bufferLength) {
+ buffer[bufferLength] = data[i];
+ }
+
+ if (bufferLength < 16) {
+ this.bufferLength = bufferLength;
+ return new Uint8Array(0);
+ }
+
+ this.iv = buffer;
+ data = data.subarray(16);
+ }
+
+ this.buffer = new Uint8Array(16);
+ this.bufferLength = 0;
+ this.decryptBlock = this._decryptBlock2;
+ return this.decryptBlock(data, finalize);
+ }
+
+ encrypt(data, iv) {
+ const sourceLength = data.length;
+ let buffer = this.buffer,
+ bufferLength = this.bufferPosition;
+ const result = [];
+
+ if (!iv) {
+ iv = new Uint8Array(16);
+ }
+
+ for (let i = 0; i < sourceLength; ++i) {
+ buffer[bufferLength] = data[i];
+ ++bufferLength;
+
+ if (bufferLength < 16) {
+ continue;
+ }
+
+ for (let j = 0; j < 16; ++j) {
+ buffer[j] ^= iv[j];
+ }
+
+ const cipher = this._encrypt(buffer, this._key);
+
+ iv = cipher;
+ result.push(cipher);
+ buffer = new Uint8Array(16);
+ bufferLength = 0;
+ }
+
+ this.buffer = buffer;
+ this.bufferLength = bufferLength;
+ this.iv = iv;
+
+ if (result.length === 0) {
+ return new Uint8Array(0);
+ }
+
+ const outputLength = 16 * result.length;
+ const output = new Uint8Array(outputLength);
+
+ for (let i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) {
+ output.set(result[i], j);
+ }
+
+ return output;
+ }
+
+}
+
+class AES128Cipher extends AESBaseCipher {
+ constructor(key) {
+ super();
+ this._cyclesOfRepetition = 10;
+ this._keySize = 160;
+ this._rcon = new Uint8Array([0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d]);
+ this._key = this._expandKey(key);
+ }
+
+ _expandKey(cipherKey) {
+ const b = 176;
+ const s = this._s;
+ const rcon = this._rcon;
+ const result = new Uint8Array(b);
+ result.set(cipherKey);
+
+ for (let j = 16, i = 1; j < b; ++i) {
+ let t1 = result[j - 3];
+ let t2 = result[j - 2];
+ let t3 = result[j - 1];
+ let t4 = result[j - 4];
+ t1 = s[t1];
+ t2 = s[t2];
+ t3 = s[t3];
+ t4 = s[t4];
+ t1 ^= rcon[i];
+
+ for (let n = 0; n < 4; ++n) {
+ result[j] = t1 ^= result[j - 16];
+ j++;
+ result[j] = t2 ^= result[j - 16];
+ j++;
+ result[j] = t3 ^= result[j - 16];
+ j++;
+ result[j] = t4 ^= result[j - 16];
+ j++;
+ }
+ }
+
+ return result;
+ }
+
+}
+
+exports.AES128Cipher = AES128Cipher;
+
+class AES256Cipher extends AESBaseCipher {
+ constructor(key) {
+ super();
+ this._cyclesOfRepetition = 14;
+ this._keySize = 224;
+ this._key = this._expandKey(key);
+ }
+
+ _expandKey(cipherKey) {
+ const b = 240;
+ const s = this._s;
+ const result = new Uint8Array(b);
+ result.set(cipherKey);
+ let r = 1;
+ let t1, t2, t3, t4;
+
+ for (let j = 32, i = 1; j < b; ++i) {
+ if (j % 32 === 16) {
+ t1 = s[t1];
+ t2 = s[t2];
+ t3 = s[t3];
+ t4 = s[t4];
+ } else if (j % 32 === 0) {
+ t1 = result[j - 3];
+ t2 = result[j - 2];
+ t3 = result[j - 1];
+ t4 = result[j - 4];
+ t1 = s[t1];
+ t2 = s[t2];
+ t3 = s[t3];
+ t4 = s[t4];
+ t1 ^= r;
+
+ if ((r <<= 1) >= 256) {
+ r = (r ^ 0x1b) & 0xff;
+ }
+ }
+
+ for (let n = 0; n < 4; ++n) {
+ result[j] = t1 ^= result[j - 32];
+ j++;
+ result[j] = t2 ^= result[j - 32];
+ j++;
+ result[j] = t3 ^= result[j - 32];
+ j++;
+ result[j] = t4 ^= result[j - 32];
+ j++;
+ }
+ }
+
+ return result;
+ }
+
+}
+
+exports.AES256Cipher = AES256Cipher;
+
+class PDF17 {
+ checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) {
+ const hashData = new Uint8Array(password.length + 56);
+ hashData.set(password, 0);
+ hashData.set(ownerValidationSalt, password.length);
+ hashData.set(userBytes, password.length + ownerValidationSalt.length);
+ const result = calculateSHA256(hashData, 0, hashData.length);
+ return (0, _util.isArrayEqual)(result, ownerPassword);
+ }
+
+ checkUserPassword(password, userValidationSalt, userPassword) {
+ const hashData = new Uint8Array(password.length + 8);
+ hashData.set(password, 0);
+ hashData.set(userValidationSalt, password.length);
+ const result = calculateSHA256(hashData, 0, hashData.length);
+ return (0, _util.isArrayEqual)(result, userPassword);
+ }
+
+ getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) {
+ const hashData = new Uint8Array(password.length + 56);
+ hashData.set(password, 0);
+ hashData.set(ownerKeySalt, password.length);
+ hashData.set(userBytes, password.length + ownerKeySalt.length);
+ const key = calculateSHA256(hashData, 0, hashData.length);
+ const cipher = new AES256Cipher(key);
+ return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16));
+ }
+
+ getUserKey(password, userKeySalt, userEncryption) {
+ const hashData = new Uint8Array(password.length + 8);
+ hashData.set(password, 0);
+ hashData.set(userKeySalt, password.length);
+ const key = calculateSHA256(hashData, 0, hashData.length);
+ const cipher = new AES256Cipher(key);
+ return cipher.decryptBlock(userEncryption, false, new Uint8Array(16));
+ }
+
+}
+
+exports.PDF17 = PDF17;
+
+const PDF20 = function PDF20Closure() {
+ function calculatePDF20Hash(password, input, userBytes) {
+ let k = calculateSHA256(input, 0, input.length).subarray(0, 32);
+ let e = [0];
+ let i = 0;
+
+ while (i < 64 || e[e.length - 1] > i - 32) {
+ const combinedLength = password.length + k.length + userBytes.length,
+ combinedArray = new Uint8Array(combinedLength);
+ let writeOffset = 0;
+ combinedArray.set(password, writeOffset);
+ writeOffset += password.length;
+ combinedArray.set(k, writeOffset);
+ writeOffset += k.length;
+ combinedArray.set(userBytes, writeOffset);
+ const k1 = new Uint8Array(combinedLength * 64);
+
+ for (let j = 0, pos = 0; j < 64; j++, pos += combinedLength) {
+ k1.set(combinedArray, pos);
+ }
+
+ const cipher = new AES128Cipher(k.subarray(0, 16));
+ e = cipher.encrypt(k1, k.subarray(16, 32));
+ let remainder = 0;
+
+ for (let z = 0; z < 16; z++) {
+ remainder *= 256 % 3;
+ remainder %= 3;
+ remainder += (e[z] >>> 0) % 3;
+ remainder %= 3;
+ }
+
+ if (remainder === 0) {
+ k = calculateSHA256(e, 0, e.length);
+ } else if (remainder === 1) {
+ k = calculateSHA384(e, 0, e.length);
+ } else if (remainder === 2) {
+ k = calculateSHA512(e, 0, e.length);
+ }
+
+ i++;
+ }
+
+ return k.subarray(0, 32);
+ }
+
+ class PDF20 {
+ hash(password, concatBytes, userBytes) {
+ return calculatePDF20Hash(password, concatBytes, userBytes);
+ }
+
+ checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) {
+ const hashData = new Uint8Array(password.length + 56);
+ hashData.set(password, 0);
+ hashData.set(ownerValidationSalt, password.length);
+ hashData.set(userBytes, password.length + ownerValidationSalt.length);
+ const result = calculatePDF20Hash(password, hashData, userBytes);
+ return (0, _util.isArrayEqual)(result, ownerPassword);
+ }
+
+ checkUserPassword(password, userValidationSalt, userPassword) {
+ const hashData = new Uint8Array(password.length + 8);
+ hashData.set(password, 0);
+ hashData.set(userValidationSalt, password.length);
+ const result = calculatePDF20Hash(password, hashData, []);
+ return (0, _util.isArrayEqual)(result, userPassword);
+ }
+
+ getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) {
+ const hashData = new Uint8Array(password.length + 56);
+ hashData.set(password, 0);
+ hashData.set(ownerKeySalt, password.length);
+ hashData.set(userBytes, password.length + ownerKeySalt.length);
+ const key = calculatePDF20Hash(password, hashData, userBytes);
+ const cipher = new AES256Cipher(key);
+ return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16));
+ }
+
+ getUserKey(password, userKeySalt, userEncryption) {
+ const hashData = new Uint8Array(password.length + 8);
+ hashData.set(password, 0);
+ hashData.set(userKeySalt, password.length);
+ const key = calculatePDF20Hash(password, hashData, []);
+ const cipher = new AES256Cipher(key);
+ return cipher.decryptBlock(userEncryption, false, new Uint8Array(16));
+ }
+
+ }
+
+ return PDF20;
+}();
+
+exports.PDF20 = PDF20;
+
+class CipherTransform {
+ constructor(stringCipherConstructor, streamCipherConstructor) {
+ this.StringCipherConstructor = stringCipherConstructor;
+ this.StreamCipherConstructor = streamCipherConstructor;
+ }
+
+ createStream(stream, length) {
+ const cipher = new this.StreamCipherConstructor();
+ return new _decrypt_stream.DecryptStream(stream, length, function cipherTransformDecryptStream(data, finalize) {
+ return cipher.decryptBlock(data, finalize);
+ });
+ }
+
+ decryptString(s) {
+ const cipher = new this.StringCipherConstructor();
+ let data = (0, _util.stringToBytes)(s);
+ data = cipher.decryptBlock(data, true);
+ return (0, _util.bytesToString)(data);
+ }
+
+ encryptString(s) {
+ const cipher = new this.StringCipherConstructor();
+
+ if (cipher instanceof AESBaseCipher) {
+ const strLen = s.length;
+ const pad = 16 - strLen % 16;
+
+ if (pad !== 16) {
+ s = s.padEnd(16 * Math.ceil(strLen / 16), String.fromCharCode(pad));
+ }
+
+ const iv = new Uint8Array(16);
+
+ if (typeof crypto !== "undefined") {
+ crypto.getRandomValues(iv);
+ } else {
+ for (let i = 0; i < 16; i++) {
+ iv[i] = Math.floor(256 * Math.random());
+ }
+ }
+
+ let data = (0, _util.stringToBytes)(s);
+ data = cipher.encrypt(data, iv);
+ const buf = new Uint8Array(16 + data.length);
+ buf.set(iv);
+ buf.set(data, 16);
+ return (0, _util.bytesToString)(buf);
+ }
+
+ let data = (0, _util.stringToBytes)(s);
+ data = cipher.encrypt(data);
+ return (0, _util.bytesToString)(data);
+ }
+
+}
+
+const CipherTransformFactory = function CipherTransformFactoryClosure() {
+ const defaultPasswordBytes = new Uint8Array([0x28, 0xbf, 0x4e, 0x5e, 0x4e, 0x75, 0x8a, 0x41, 0x64, 0x00, 0x4e, 0x56, 0xff, 0xfa, 0x01, 0x08, 0x2e, 0x2e, 0x00, 0xb6, 0xd0, 0x68, 0x3e, 0x80, 0x2f, 0x0c, 0xa9, 0xfe, 0x64, 0x53, 0x69, 0x7a]);
+
+ function createEncryptionKey20(revision, password, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption, perms) {
+ if (password) {
+ const passwordLength = Math.min(127, password.length);
+ password = password.subarray(0, passwordLength);
+ } else {
+ password = [];
+ }
+
+ let pdfAlgorithm;
+
+ if (revision === 6) {
+ pdfAlgorithm = new PDF20();
+ } else {
+ pdfAlgorithm = new PDF17();
+ }
+
+ if (pdfAlgorithm.checkUserPassword(password, userValidationSalt, userPassword)) {
+ return pdfAlgorithm.getUserKey(password, userKeySalt, userEncryption);
+ } else if (password.length && pdfAlgorithm.checkOwnerPassword(password, ownerValidationSalt, uBytes, ownerPassword)) {
+ return pdfAlgorithm.getOwnerKey(password, ownerKeySalt, uBytes, ownerEncryption);
+ }
+
+ return null;
+ }
+
+ function prepareKeyData(fileId, password, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata) {
+ const hashDataSize = 40 + ownerPassword.length + fileId.length;
+ const hashData = new Uint8Array(hashDataSize);
+ let i = 0,
+ j,
+ n;
+
+ if (password) {
+ n = Math.min(32, password.length);
+
+ for (; i < n; ++i) {
+ hashData[i] = password[i];
+ }
+ }
+
+ j = 0;
+
+ while (i < 32) {
+ hashData[i++] = defaultPasswordBytes[j++];
+ }
+
+ for (j = 0, n = ownerPassword.length; j < n; ++j) {
+ hashData[i++] = ownerPassword[j];
+ }
+
+ hashData[i++] = flags & 0xff;
+ hashData[i++] = flags >> 8 & 0xff;
+ hashData[i++] = flags >> 16 & 0xff;
+ hashData[i++] = flags >>> 24 & 0xff;
+
+ for (j = 0, n = fileId.length; j < n; ++j) {
+ hashData[i++] = fileId[j];
+ }
+
+ if (revision >= 4 && !encryptMetadata) {
+ hashData[i++] = 0xff;
+ hashData[i++] = 0xff;
+ hashData[i++] = 0xff;
+ hashData[i++] = 0xff;
+ }
+
+ let hash = calculateMD5(hashData, 0, i);
+ const keyLengthInBytes = keyLength >> 3;
+
+ if (revision >= 3) {
+ for (j = 0; j < 50; ++j) {
+ hash = calculateMD5(hash, 0, keyLengthInBytes);
+ }
+ }
+
+ const encryptionKey = hash.subarray(0, keyLengthInBytes);
+ let cipher, checkData;
+
+ if (revision >= 3) {
+ for (i = 0; i < 32; ++i) {
+ hashData[i] = defaultPasswordBytes[i];
+ }
+
+ for (j = 0, n = fileId.length; j < n; ++j) {
+ hashData[i++] = fileId[j];
+ }
+
+ cipher = new ARCFourCipher(encryptionKey);
+ checkData = cipher.encryptBlock(calculateMD5(hashData, 0, i));
+ n = encryptionKey.length;
+ const derivedKey = new Uint8Array(n);
+
+ for (j = 1; j <= 19; ++j) {
+ for (let k = 0; k < n; ++k) {
+ derivedKey[k] = encryptionKey[k] ^ j;
+ }
+
+ cipher = new ARCFourCipher(derivedKey);
+ checkData = cipher.encryptBlock(checkData);
+ }
+
+ for (j = 0, n = checkData.length; j < n; ++j) {
+ if (userPassword[j] !== checkData[j]) {
+ return null;
+ }
+ }
+ } else {
+ cipher = new ARCFourCipher(encryptionKey);
+ checkData = cipher.encryptBlock(defaultPasswordBytes);
+
+ for (j = 0, n = checkData.length; j < n; ++j) {
+ if (userPassword[j] !== checkData[j]) {
+ return null;
+ }
+ }
+ }
+
+ return encryptionKey;
+ }
+
+ function decodeUserPassword(password, ownerPassword, revision, keyLength) {
+ const hashData = new Uint8Array(32);
+ let i = 0;
+ const n = Math.min(32, password.length);
+
+ for (; i < n; ++i) {
+ hashData[i] = password[i];
+ }
+
+ let j = 0;
+
+ while (i < 32) {
+ hashData[i++] = defaultPasswordBytes[j++];
+ }
+
+ let hash = calculateMD5(hashData, 0, i);
+ const keyLengthInBytes = keyLength >> 3;
+
+ if (revision >= 3) {
+ for (j = 0; j < 50; ++j) {
+ hash = calculateMD5(hash, 0, hash.length);
+ }
+ }
+
+ let cipher, userPassword;
+
+ if (revision >= 3) {
+ userPassword = ownerPassword;
+ const derivedKey = new Uint8Array(keyLengthInBytes);
+
+ for (j = 19; j >= 0; j--) {
+ for (let k = 0; k < keyLengthInBytes; ++k) {
+ derivedKey[k] = hash[k] ^ j;
+ }
+
+ cipher = new ARCFourCipher(derivedKey);
+ userPassword = cipher.encryptBlock(userPassword);
+ }
+ } else {
+ cipher = new ARCFourCipher(hash.subarray(0, keyLengthInBytes));
+ userPassword = cipher.encryptBlock(ownerPassword);
+ }
+
+ return userPassword;
+ }
+
+ const identityName = _primitives.Name.get("Identity");
+
+ function buildObjectKey(num, gen, encryptionKey, isAes = false) {
+ const key = new Uint8Array(encryptionKey.length + 9);
+ const n = encryptionKey.length;
+ let i;
+
+ for (i = 0; i < n; ++i) {
+ key[i] = encryptionKey[i];
+ }
+
+ key[i++] = num & 0xff;
+ key[i++] = num >> 8 & 0xff;
+ key[i++] = num >> 16 & 0xff;
+ key[i++] = gen & 0xff;
+ key[i++] = gen >> 8 & 0xff;
+
+ if (isAes) {
+ key[i++] = 0x73;
+ key[i++] = 0x41;
+ key[i++] = 0x6c;
+ key[i++] = 0x54;
+ }
+
+ const hash = calculateMD5(key, 0, i);
+ return hash.subarray(0, Math.min(encryptionKey.length + 5, 16));
+ }
+
+ function buildCipherConstructor(cf, name, num, gen, key) {
+ if (!(0, _primitives.isName)(name)) {
+ throw new _util.FormatError("Invalid crypt filter name.");
+ }
+
+ const cryptFilter = cf.get(name.name);
+ let cfm;
+
+ if (cryptFilter !== null && cryptFilter !== undefined) {
+ cfm = cryptFilter.get("CFM");
+ }
+
+ if (!cfm || cfm.name === "None") {
+ return function cipherTransformFactoryBuildCipherConstructorNone() {
+ return new NullCipher();
+ };
+ }
+
+ if (cfm.name === "V2") {
+ return function cipherTransformFactoryBuildCipherConstructorV2() {
+ return new ARCFourCipher(buildObjectKey(num, gen, key, false));
+ };
+ }
+
+ if (cfm.name === "AESV2") {
+ return function cipherTransformFactoryBuildCipherConstructorAESV2() {
+ return new AES128Cipher(buildObjectKey(num, gen, key, true));
+ };
+ }
+
+ if (cfm.name === "AESV3") {
+ return function cipherTransformFactoryBuildCipherConstructorAESV3() {
+ return new AES256Cipher(key);
+ };
+ }
+
+ throw new _util.FormatError("Unknown crypto method");
+ }
+
+ class CipherTransformFactory {
+ constructor(dict, fileId, password) {
+ const filter = dict.get("Filter");
+
+ if (!(0, _primitives.isName)(filter, "Standard")) {
+ throw new _util.FormatError("unknown encryption method");
+ }
+
+ this.dict = dict;
+ const algorithm = dict.get("V");
+
+ if (!Number.isInteger(algorithm) || algorithm !== 1 && algorithm !== 2 && algorithm !== 4 && algorithm !== 5) {
+ throw new _util.FormatError("unsupported encryption algorithm");
+ }
+
+ this.algorithm = algorithm;
+ let keyLength = dict.get("Length");
+
+ if (!keyLength) {
+ if (algorithm <= 3) {
+ keyLength = 40;
+ } else {
+ const cfDict = dict.get("CF");
+ const streamCryptoName = dict.get("StmF");
+
+ if ((0, _primitives.isDict)(cfDict) && (0, _primitives.isName)(streamCryptoName)) {
+ cfDict.suppressEncryption = true;
+ const handlerDict = cfDict.get(streamCryptoName.name);
+ keyLength = handlerDict && handlerDict.get("Length") || 128;
+
+ if (keyLength < 40) {
+ keyLength <<= 3;
+ }
+ }
+ }
+ }
+
+ if (!Number.isInteger(keyLength) || keyLength < 40 || keyLength % 8 !== 0) {
+ throw new _util.FormatError("invalid key length");
+ }
+
+ const ownerPassword = (0, _util.stringToBytes)(dict.get("O")).subarray(0, 32);
+ const userPassword = (0, _util.stringToBytes)(dict.get("U")).subarray(0, 32);
+ const flags = dict.get("P");
+ const revision = dict.get("R");
+ const encryptMetadata = (algorithm === 4 || algorithm === 5) && dict.get("EncryptMetadata") !== false;
+ this.encryptMetadata = encryptMetadata;
+ const fileIdBytes = (0, _util.stringToBytes)(fileId);
+ let passwordBytes;
+
+ if (password) {
+ if (revision === 6) {
+ try {
+ password = (0, _util.utf8StringToString)(password);
+ } catch (ex) {
+ (0, _util.warn)("CipherTransformFactory: " + "Unable to convert UTF8 encoded password.");
+ }
+ }
+
+ passwordBytes = (0, _util.stringToBytes)(password);
+ }
+
+ let encryptionKey;
+
+ if (algorithm !== 5) {
+ encryptionKey = prepareKeyData(fileIdBytes, passwordBytes, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata);
+ } else {
+ const ownerValidationSalt = (0, _util.stringToBytes)(dict.get("O")).subarray(32, 40);
+ const ownerKeySalt = (0, _util.stringToBytes)(dict.get("O")).subarray(40, 48);
+ const uBytes = (0, _util.stringToBytes)(dict.get("U")).subarray(0, 48);
+ const userValidationSalt = (0, _util.stringToBytes)(dict.get("U")).subarray(32, 40);
+ const userKeySalt = (0, _util.stringToBytes)(dict.get("U")).subarray(40, 48);
+ const ownerEncryption = (0, _util.stringToBytes)(dict.get("OE"));
+ const userEncryption = (0, _util.stringToBytes)(dict.get("UE"));
+ const perms = (0, _util.stringToBytes)(dict.get("Perms"));
+ encryptionKey = createEncryptionKey20(revision, passwordBytes, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption, perms);
+ }
+
+ if (!encryptionKey && !password) {
+ throw new _util.PasswordException("No password given", _util.PasswordResponses.NEED_PASSWORD);
+ } else if (!encryptionKey && password) {
+ const decodedPassword = decodeUserPassword(passwordBytes, ownerPassword, revision, keyLength);
+ encryptionKey = prepareKeyData(fileIdBytes, decodedPassword, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata);
+ }
+
+ if (!encryptionKey) {
+ throw new _util.PasswordException("Incorrect Password", _util.PasswordResponses.INCORRECT_PASSWORD);
+ }
+
+ this.encryptionKey = encryptionKey;
+
+ if (algorithm >= 4) {
+ const cf = dict.get("CF");
+
+ if ((0, _primitives.isDict)(cf)) {
+ cf.suppressEncryption = true;
+ }
+
+ this.cf = cf;
+ this.stmf = dict.get("StmF") || identityName;
+ this.strf = dict.get("StrF") || identityName;
+ this.eff = dict.get("EFF") || this.stmf;
+ }
+ }
+
+ createCipherTransform(num, gen) {
+ if (this.algorithm === 4 || this.algorithm === 5) {
+ return new CipherTransform(buildCipherConstructor(this.cf, this.stmf, num, gen, this.encryptionKey), buildCipherConstructor(this.cf, this.strf, num, gen, this.encryptionKey));
+ }
+
+ const key = buildObjectKey(num, gen, this.encryptionKey, false);
+
+ const cipherConstructor = function buildCipherCipherConstructor() {
+ return new ARCFourCipher(key);
+ };
+
+ return new CipherTransform(cipherConstructor, cipherConstructor);
+ }
+
+ }
+
+ return CipherTransformFactory;
+}();
+
+exports.CipherTransformFactory = CipherTransformFactory;
+
+/***/ }),
+/* 73 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.DecryptStream = void 0;
+
+var _decode_stream = __w_pdfjs_require__(19);
+
+const chunkSize = 512;
+
+class DecryptStream extends _decode_stream.DecodeStream {
+ constructor(str, maybeLength, decrypt) {
+ super(maybeLength);
+ this.str = str;
+ this.dict = str.dict;
+ this.decrypt = decrypt;
+ this.nextChunk = null;
+ this.initialized = false;
+ }
+
+ readBlock() {
+ let chunk;
+
+ if (this.initialized) {
+ chunk = this.nextChunk;
+ } else {
+ chunk = this.str.getBytes(chunkSize);
+ this.initialized = true;
+ }
+
+ if (!chunk || chunk.length === 0) {
+ this.eof = true;
+ return;
+ }
+
+ this.nextChunk = this.str.getBytes(chunkSize);
+ const hasMoreData = this.nextChunk && this.nextChunk.length > 0;
+ const decrypt = this.decrypt;
+ chunk = decrypt(chunk, !hasMoreData);
+ let bufferLength = this.bufferLength;
+ const n = chunk.length,
+ buffer = this.ensureBuffer(bufferLength + n);
+
+ for (let i = 0; i < n; i++) {
+ buffer[bufferLength++] = chunk[i];
+ }
+
+ this.bufferLength = bufferLength;
+ }
+
+}
+
+exports.DecryptStream = DecryptStream;
+
+/***/ }),
+/* 74 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.XFAFactory = void 0;
+
+var _xfa_object = __w_pdfjs_require__(75);
+
+var _bind = __w_pdfjs_require__(79);
+
+var _data = __w_pdfjs_require__(85);
+
+var _fonts = __w_pdfjs_require__(83);
+
+var _utils = __w_pdfjs_require__(76);
+
+var _util = __w_pdfjs_require__(2);
+
+var _parser = __w_pdfjs_require__(86);
+
+class XFAFactory {
+ constructor(data) {
+ try {
+ this.root = new _parser.XFAParser().parse(XFAFactory._createDocument(data));
+ const binder = new _bind.Binder(this.root);
+ this.form = binder.bind();
+ this.dataHandler = new _data.DataHandler(this.root, binder.getData());
+ this.form[_xfa_object.$globalData].template = this.form;
+ } catch (e) {
+ (0, _util.warn)(`XFA - an error occurred during parsing and binding: ${e}`);
+ }
+ }
+
+ isValid() {
+ return this.root && this.form;
+ }
+
+ _createPages() {
+ try {
+ this.pages = this.form[_xfa_object.$toHTML]();
+ this.dims = this.pages.children.map(c => {
+ const {
+ width,
+ height
+ } = c.attributes.style;
+ return [0, 0, parseInt(width), parseInt(height)];
+ });
+ } catch (e) {
+ (0, _util.warn)(`XFA - an error occurred during layout: ${e}`);
+ }
+ }
+
+ getBoundingBox(pageIndex) {
+ return this.dims[pageIndex];
+ }
+
+ get numberPages() {
+ if (!this.pages) {
+ this._createPages();
+ }
+
+ return this.dims.length;
+ }
+
+ setImages(images) {
+ this.form[_xfa_object.$globalData].images = images;
+ }
+
+ setFonts(fonts) {
+ this.form[_xfa_object.$globalData].fontFinder = new _fonts.FontFinder(fonts);
+ const missingFonts = [];
+
+ for (let typeface of this.form[_xfa_object.$globalData].usedTypefaces) {
+ typeface = (0, _utils.stripQuotes)(typeface);
+
+ const font = this.form[_xfa_object.$globalData].fontFinder.find(typeface);
+
+ if (!font) {
+ missingFonts.push(typeface);
+ }
+ }
+
+ if (missingFonts.length > 0) {
+ return missingFonts;
+ }
+
+ return null;
+ }
+
+ appendFonts(fonts, reallyMissingFonts) {
+ this.form[_xfa_object.$globalData].fontFinder.add(fonts, reallyMissingFonts);
+ }
+
+ getPages() {
+ if (!this.pages) {
+ this._createPages();
+ }
+
+ const pages = this.pages;
+ this.pages = null;
+ return pages;
+ }
+
+ serializeData(storage) {
+ return this.dataHandler.serialize(storage);
+ }
+
+ static _createDocument(data) {
+ if (!data["/xdp:xdp"]) {
+ return data["xdp:xdp"];
+ }
+
+ return Object.values(data).join("");
+ }
+
+}
+
+exports.XFAFactory = XFAFactory;
+
+/***/ }),
+/* 75 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.XmlObject = exports.XFAObjectArray = exports.XFAObject = exports.XFAAttribute = exports.StringObject = exports.OptionObject = exports.Option10 = exports.Option01 = exports.IntegerObject = exports.ContentObject = exports.$uid = exports.$toStyle = exports.$toString = exports.$toHTML = exports.$text = exports.$tabIndex = exports.$setValue = exports.$setSetAttributes = exports.$setId = exports.$searchNode = exports.$root = exports.$resolvePrototypes = exports.$removeChild = exports.$pushGlyphs = exports.$onText = exports.$onChildCheck = exports.$onChild = exports.$nsAttributes = exports.$nodeName = exports.$namespaceId = exports.$isUsable = exports.$isTransparent = exports.$isThereMoreWidth = exports.$isSplittable = exports.$isNsAgnostic = exports.$isDescendent = exports.$isDataValue = exports.$isCDATAXml = exports.$isBindable = exports.$insertAt = exports.$indexOf = exports.$ids = exports.$hasSettableValue = exports.$globalData = exports.$getTemplateRoot = exports.$getSubformParent = exports.$getRealChildrenByNameIt = exports.$getParent = exports.$getNextPage = exports.$getExtra = exports.$getDataValue = exports.$getContainedChildren = exports.$getChildrenByNameIt = exports.$getChildrenByName = exports.$getChildrenByClass = exports.$getChildren = exports.$getAvailableSpace = exports.$getAttributes = exports.$getAttributeIt = exports.$flushHTML = exports.$finalize = exports.$extra = exports.$dump = exports.$data = exports.$content = exports.$consumed = exports.$clone = exports.$cleanup = exports.$cleanPage = exports.$clean = exports.$childrenToHTML = exports.$appendChild = exports.$addHTML = exports.$acceptWhitespace = void 0;
+
+var _utils = __w_pdfjs_require__(76);
+
+var _util = __w_pdfjs_require__(2);
+
+var _core_utils = __w_pdfjs_require__(9);
+
+var _namespaces = __w_pdfjs_require__(77);
+
+var _som = __w_pdfjs_require__(78);
+
+const $acceptWhitespace = Symbol();
+exports.$acceptWhitespace = $acceptWhitespace;
+const $addHTML = Symbol();
+exports.$addHTML = $addHTML;
+const $appendChild = Symbol();
+exports.$appendChild = $appendChild;
+const $childrenToHTML = Symbol();
+exports.$childrenToHTML = $childrenToHTML;
+const $clean = Symbol();
+exports.$clean = $clean;
+const $cleanPage = Symbol();
+exports.$cleanPage = $cleanPage;
+const $cleanup = Symbol();
+exports.$cleanup = $cleanup;
+const $clone = Symbol();
+exports.$clone = $clone;
+const $consumed = Symbol();
+exports.$consumed = $consumed;
+const $content = Symbol("content");
+exports.$content = $content;
+const $data = Symbol("data");
+exports.$data = $data;
+const $dump = Symbol();
+exports.$dump = $dump;
+const $extra = Symbol("extra");
+exports.$extra = $extra;
+const $finalize = Symbol();
+exports.$finalize = $finalize;
+const $flushHTML = Symbol();
+exports.$flushHTML = $flushHTML;
+const $getAttributeIt = Symbol();
+exports.$getAttributeIt = $getAttributeIt;
+const $getAttributes = Symbol();
+exports.$getAttributes = $getAttributes;
+const $getAvailableSpace = Symbol();
+exports.$getAvailableSpace = $getAvailableSpace;
+const $getChildrenByClass = Symbol();
+exports.$getChildrenByClass = $getChildrenByClass;
+const $getChildrenByName = Symbol();
+exports.$getChildrenByName = $getChildrenByName;
+const $getChildrenByNameIt = Symbol();
+exports.$getChildrenByNameIt = $getChildrenByNameIt;
+const $getDataValue = Symbol();
+exports.$getDataValue = $getDataValue;
+const $getExtra = Symbol();
+exports.$getExtra = $getExtra;
+const $getRealChildrenByNameIt = Symbol();
+exports.$getRealChildrenByNameIt = $getRealChildrenByNameIt;
+const $getChildren = Symbol();
+exports.$getChildren = $getChildren;
+const $getContainedChildren = Symbol();
+exports.$getContainedChildren = $getContainedChildren;
+const $getNextPage = Symbol();
+exports.$getNextPage = $getNextPage;
+const $getSubformParent = Symbol();
+exports.$getSubformParent = $getSubformParent;
+const $getParent = Symbol();
+exports.$getParent = $getParent;
+const $getTemplateRoot = Symbol();
+exports.$getTemplateRoot = $getTemplateRoot;
+const $globalData = Symbol();
+exports.$globalData = $globalData;
+const $hasSettableValue = Symbol();
+exports.$hasSettableValue = $hasSettableValue;
+const $ids = Symbol();
+exports.$ids = $ids;
+const $indexOf = Symbol();
+exports.$indexOf = $indexOf;
+const $insertAt = Symbol();
+exports.$insertAt = $insertAt;
+const $isCDATAXml = Symbol();
+exports.$isCDATAXml = $isCDATAXml;
+const $isBindable = Symbol();
+exports.$isBindable = $isBindable;
+const $isDataValue = Symbol();
+exports.$isDataValue = $isDataValue;
+const $isDescendent = Symbol();
+exports.$isDescendent = $isDescendent;
+const $isNsAgnostic = Symbol();
+exports.$isNsAgnostic = $isNsAgnostic;
+const $isSplittable = Symbol();
+exports.$isSplittable = $isSplittable;
+const $isThereMoreWidth = Symbol();
+exports.$isThereMoreWidth = $isThereMoreWidth;
+const $isTransparent = Symbol();
+exports.$isTransparent = $isTransparent;
+const $isUsable = Symbol();
+exports.$isUsable = $isUsable;
+const $lastAttribute = Symbol();
+const $namespaceId = Symbol("namespaceId");
+exports.$namespaceId = $namespaceId;
+const $nodeName = Symbol("nodeName");
+exports.$nodeName = $nodeName;
+const $nsAttributes = Symbol();
+exports.$nsAttributes = $nsAttributes;
+const $onChild = Symbol();
+exports.$onChild = $onChild;
+const $onChildCheck = Symbol();
+exports.$onChildCheck = $onChildCheck;
+const $onText = Symbol();
+exports.$onText = $onText;
+const $pushGlyphs = Symbol();
+exports.$pushGlyphs = $pushGlyphs;
+const $removeChild = Symbol();
+exports.$removeChild = $removeChild;
+const $root = Symbol("root");
+exports.$root = $root;
+const $resolvePrototypes = Symbol();
+exports.$resolvePrototypes = $resolvePrototypes;
+const $searchNode = Symbol();
+exports.$searchNode = $searchNode;
+const $setId = Symbol();
+exports.$setId = $setId;
+const $setSetAttributes = Symbol();
+exports.$setSetAttributes = $setSetAttributes;
+const $setValue = Symbol();
+exports.$setValue = $setValue;
+const $tabIndex = Symbol();
+exports.$tabIndex = $tabIndex;
+const $text = Symbol();
+exports.$text = $text;
+const $toHTML = Symbol();
+exports.$toHTML = $toHTML;
+const $toString = Symbol();
+exports.$toString = $toString;
+const $toStyle = Symbol();
+exports.$toStyle = $toStyle;
+const $uid = Symbol("uid");
+exports.$uid = $uid;
+
+const _applyPrototype = Symbol();
+
+const _attributes = Symbol();
+
+const _attributeNames = Symbol();
+
+const _children = Symbol("_children");
+
+const _cloneAttribute = Symbol();
+
+const _dataValue = Symbol();
+
+const _defaultValue = Symbol();
+
+const _filteredChildrenGenerator = Symbol();
+
+const _getPrototype = Symbol();
+
+const _getUnsetAttributes = Symbol();
+
+const _hasChildren = Symbol();
+
+const _max = Symbol();
+
+const _options = Symbol();
+
+const _parent = Symbol("parent");
+
+const _resolvePrototypesHelper = Symbol();
+
+const _setAttributes = Symbol();
+
+const _validator = Symbol();
+
+let uid = 0;
+const NS_DATASETS = _namespaces.NamespaceIds.datasets.id;
+
+class XFAObject {
+ constructor(nsId, name, hasChildren = false) {
+ this[$namespaceId] = nsId;
+ this[$nodeName] = name;
+ this[_hasChildren] = hasChildren;
+ this[_parent] = null;
+ this[_children] = [];
+ this[$uid] = `${name}${uid++}`;
+ this[$globalData] = null;
+ }
+
+ [$onChild](child) {
+ if (!this[_hasChildren] || !this[$onChildCheck](child)) {
+ return false;
+ }
+
+ const name = child[$nodeName];
+ const node = this[name];
+
+ if (node instanceof XFAObjectArray) {
+ if (node.push(child)) {
+ this[$appendChild](child);
+ return true;
+ }
+ } else {
+ if (node !== null) {
+ this[$removeChild](node);
+ }
+
+ this[name] = child;
+ this[$appendChild](child);
+ return true;
+ }
+
+ let id = "";
+
+ if (this.id) {
+ id = ` (id: ${this.id})`;
+ } else if (this.name) {
+ id = ` (name: ${this.name} ${this.h.value})`;
+ }
+
+ (0, _util.warn)(`XFA - node "${this[$nodeName]}"${id} has already enough "${name}"!`);
+ return false;
+ }
+
+ [$onChildCheck](child) {
+ return this.hasOwnProperty(child[$nodeName]) && child[$namespaceId] === this[$namespaceId];
+ }
+
+ [$isNsAgnostic]() {
+ return false;
+ }
+
+ [$acceptWhitespace]() {
+ return false;
+ }
+
+ [$isCDATAXml]() {
+ return false;
+ }
+
+ [$isBindable]() {
+ return false;
+ }
+
+ [$setId](ids) {
+ if (this.id && this[$namespaceId] === _namespaces.NamespaceIds.template.id) {
+ ids.set(this.id, this);
+ }
+ }
+
+ [$getTemplateRoot]() {
+ return this[$globalData].template;
+ }
+
+ [$isSplittable]() {
+ return false;
+ }
+
+ [$isThereMoreWidth]() {
+ return false;
+ }
+
+ [$appendChild](child) {
+ child[_parent] = this;
+
+ this[_children].push(child);
+ }
+
+ [$removeChild](child) {
+ const i = this[_children].indexOf(child);
+
+ this[_children].splice(i, 1);
+ }
+
+ [$hasSettableValue]() {
+ return this.hasOwnProperty("value");
+ }
+
+ [$setValue](_) {}
+
+ [$onText](_) {}
+
+ [$finalize]() {}
+
+ [$clean](builder) {
+ delete this[_hasChildren];
+
+ if (this[$cleanup]) {
+ builder.clean(this[$cleanup]);
+ delete this[$cleanup];
+ }
+ }
+
+ [$indexOf](child) {
+ return this[_children].indexOf(child);
+ }
+
+ [$insertAt](i, child) {
+ child[_parent] = this;
+
+ this[_children].splice(i, 0, child);
+ }
+
+ [$isTransparent]() {
+ return !this.name;
+ }
+
+ [$lastAttribute]() {
+ return "";
+ }
+
+ [$text]() {
+ if (this[_children].length === 0) {
+ return this[$content];
+ }
+
+ return this[_children].map(c => c[$text]()).join("");
+ }
+
+ get [_attributeNames]() {
+ const proto = Object.getPrototypeOf(this);
+
+ if (!proto._attributes) {
+ const attributes = proto._attributes = new Set();
+
+ for (const name of Object.getOwnPropertyNames(this)) {
+ if (this[name] === null || this[name] instanceof XFAObject || this[name] instanceof XFAObjectArray) {
+ break;
+ }
+
+ attributes.add(name);
+ }
+ }
+
+ return (0, _util.shadow)(this, _attributeNames, proto._attributes);
+ }
+
+ [$isDescendent](parent) {
+ let node = this;
+
+ while (node) {
+ if (node === parent) {
+ return true;
+ }
+
+ node = node[$getParent]();
+ }
+
+ return false;
+ }
+
+ [$getParent]() {
+ return this[_parent];
+ }
+
+ [$getSubformParent]() {
+ return this[$getParent]();
+ }
+
+ [$getChildren](name = null) {
+ if (!name) {
+ return this[_children];
+ }
+
+ return this[name];
+ }
+
+ [$dump]() {
+ const dumped = Object.create(null);
+
+ if (this[$content]) {
+ dumped.$content = this[$content];
+ }
+
+ for (const name of Object.getOwnPropertyNames(this)) {
+ const value = this[name];
+
+ if (value === null) {
+ continue;
+ }
+
+ if (value instanceof XFAObject) {
+ dumped[name] = value[$dump]();
+ } else if (value instanceof XFAObjectArray) {
+ if (!value.isEmpty()) {
+ dumped[name] = value.dump();
+ }
+ } else {
+ dumped[name] = value;
+ }
+ }
+
+ return dumped;
+ }
+
+ [$toStyle]() {
+ return null;
+ }
+
+ [$toHTML]() {
+ return _utils.HTMLResult.EMPTY;
+ }
+
+ *[$getContainedChildren]() {
+ for (const node of this[$getChildren]()) {
+ yield node;
+ }
+ }
+
+ *[_filteredChildrenGenerator](filter, include) {
+ for (const node of this[$getContainedChildren]()) {
+ if (!filter || include === filter.has(node[$nodeName])) {
+ const availableSpace = this[$getAvailableSpace]();
+ const res = node[$toHTML](availableSpace);
+
+ if (!res.success) {
+ this[$extra].failingNode = node;
+ }
+
+ yield res;
+ }
+ }
+ }
+
+ [$flushHTML]() {
+ return null;
+ }
+
+ [$addHTML](html, bbox) {
+ this[$extra].children.push(html);
+ }
+
+ [$getAvailableSpace]() {}
+
+ [$childrenToHTML]({
+ filter = null,
+ include = true
+ }) {
+ if (!this[$extra].generator) {
+ this[$extra].generator = this[_filteredChildrenGenerator](filter, include);
+ } else {
+ const availableSpace = this[$getAvailableSpace]();
+ const res = this[$extra].failingNode[$toHTML](availableSpace);
+
+ if (!res.success) {
+ return res;
+ }
+
+ if (res.html) {
+ this[$addHTML](res.html, res.bbox);
+ }
+
+ delete this[$extra].failingNode;
+ }
+
+ while (true) {
+ const gen = this[$extra].generator.next();
+
+ if (gen.done) {
+ break;
+ }
+
+ const res = gen.value;
+
+ if (!res.success) {
+ return res;
+ }
+
+ if (res.html) {
+ this[$addHTML](res.html, res.bbox);
+ }
+ }
+
+ this[$extra].generator = null;
+ return _utils.HTMLResult.EMPTY;
+ }
+
+ [$setSetAttributes](attributes) {
+ this[_setAttributes] = new Set(Object.keys(attributes));
+ }
+
+ [_getUnsetAttributes](protoAttributes) {
+ const allAttr = this[_attributeNames];
+ const setAttr = this[_setAttributes];
+ return [...protoAttributes].filter(x => allAttr.has(x) && !setAttr.has(x));
+ }
+
+ [$resolvePrototypes](ids, ancestors = new Set()) {
+ for (const child of this[_children]) {
+ child[_resolvePrototypesHelper](ids, ancestors);
+ }
+ }
+
+ [_resolvePrototypesHelper](ids, ancestors) {
+ const proto = this[_getPrototype](ids, ancestors);
+
+ if (proto) {
+ this[_applyPrototype](proto, ids, ancestors);
+ } else {
+ this[$resolvePrototypes](ids, ancestors);
+ }
+ }
+
+ [_getPrototype](ids, ancestors) {
+ const {
+ use,
+ usehref
+ } = this;
+
+ if (!use && !usehref) {
+ return null;
+ }
+
+ let proto = null;
+ let somExpression = null;
+ let id = null;
+ let ref = use;
+
+ if (usehref) {
+ ref = usehref;
+
+ if (usehref.startsWith("#som(") && usehref.endsWith(")")) {
+ somExpression = usehref.slice("#som(".length, usehref.length - 1);
+ } else if (usehref.startsWith(".#som(") && usehref.endsWith(")")) {
+ somExpression = usehref.slice(".#som(".length, usehref.length - 1);
+ } else if (usehref.startsWith("#")) {
+ id = usehref.slice(1);
+ } else if (usehref.startsWith(".#")) {
+ id = usehref.slice(2);
+ }
+ } else if (use.startsWith("#")) {
+ id = use.slice(1);
+ } else {
+ somExpression = use;
+ }
+
+ this.use = this.usehref = "";
+
+ if (id) {
+ proto = ids.get(id);
+ } else {
+ proto = (0, _som.searchNode)(ids.get($root), this, somExpression, true, false);
+
+ if (proto) {
+ proto = proto[0];
+ }
+ }
+
+ if (!proto) {
+ (0, _util.warn)(`XFA - Invalid prototype reference: ${ref}.`);
+ return null;
+ }
+
+ if (proto[$nodeName] !== this[$nodeName]) {
+ (0, _util.warn)(`XFA - Incompatible prototype: ${proto[$nodeName]} !== ${this[$nodeName]}.`);
+ return null;
+ }
+
+ if (ancestors.has(proto)) {
+ (0, _util.warn)(`XFA - Cycle detected in prototypes use.`);
+ return null;
+ }
+
+ ancestors.add(proto);
+
+ const protoProto = proto[_getPrototype](ids, ancestors);
+
+ if (protoProto) {
+ proto[_applyPrototype](protoProto, ids, ancestors);
+ }
+
+ proto[$resolvePrototypes](ids, ancestors);
+ ancestors.delete(proto);
+ return proto;
+ }
+
+ [_applyPrototype](proto, ids, ancestors) {
+ if (ancestors.has(proto)) {
+ (0, _util.warn)(`XFA - Cycle detected in prototypes use.`);
+ return;
+ }
+
+ if (!this[$content] && proto[$content]) {
+ this[$content] = proto[$content];
+ }
+
+ const newAncestors = new Set(ancestors);
+ newAncestors.add(proto);
+
+ for (const unsetAttrName of this[_getUnsetAttributes](proto[_setAttributes])) {
+ this[unsetAttrName] = proto[unsetAttrName];
+
+ if (this[_setAttributes]) {
+ this[_setAttributes].add(unsetAttrName);
+ }
+ }
+
+ for (const name of Object.getOwnPropertyNames(this)) {
+ if (this[_attributeNames].has(name)) {
+ continue;
+ }
+
+ const value = this[name];
+ const protoValue = proto[name];
+
+ if (value instanceof XFAObjectArray) {
+ for (const child of value[_children]) {
+ child[_resolvePrototypesHelper](ids, ancestors);
+ }
+
+ for (let i = value[_children].length, ii = protoValue[_children].length; i < ii; i++) {
+ const child = proto[_children][i][$clone]();
+
+ if (value.push(child)) {
+ child[_parent] = this;
+
+ this[_children].push(child);
+
+ child[_resolvePrototypesHelper](ids, ancestors);
+ } else {
+ break;
+ }
+ }
+
+ continue;
+ }
+
+ if (value !== null) {
+ value[$resolvePrototypes](ids, ancestors);
+
+ if (protoValue) {
+ value[_applyPrototype](protoValue, ids, ancestors);
+ }
+
+ continue;
+ }
+
+ if (protoValue !== null) {
+ const child = protoValue[$clone]();
+ child[_parent] = this;
+ this[name] = child;
+
+ this[_children].push(child);
+
+ child[_resolvePrototypesHelper](ids, ancestors);
+ }
+ }
+ }
+
+ static [_cloneAttribute](obj) {
+ if (Array.isArray(obj)) {
+ return obj.map(x => XFAObject[_cloneAttribute](x));
+ }
+
+ if (typeof obj === "object" && obj !== null) {
+ return Object.assign({}, obj);
+ }
+
+ return obj;
+ }
+
+ [$clone]() {
+ const clone = Object.create(Object.getPrototypeOf(this));
+
+ for (const $symbol of Object.getOwnPropertySymbols(this)) {
+ try {
+ clone[$symbol] = this[$symbol];
+ } catch (_) {
+ (0, _util.shadow)(clone, $symbol, this[$symbol]);
+ }
+ }
+
+ clone[$uid] = `${clone[$nodeName]}${uid++}`;
+ clone[_children] = [];
+
+ for (const name of Object.getOwnPropertyNames(this)) {
+ if (this[_attributeNames].has(name)) {
+ clone[name] = XFAObject[_cloneAttribute](this[name]);
+ continue;
+ }
+
+ const value = this[name];
+
+ if (value instanceof XFAObjectArray) {
+ clone[name] = new XFAObjectArray(value[_max]);
+ } else {
+ clone[name] = null;
+ }
+ }
+
+ for (const child of this[_children]) {
+ const name = child[$nodeName];
+ const clonedChild = child[$clone]();
+
+ clone[_children].push(clonedChild);
+
+ clonedChild[_parent] = clone;
+
+ if (clone[name] === null) {
+ clone[name] = clonedChild;
+ } else {
+ clone[name][_children].push(clonedChild);
+ }
+ }
+
+ return clone;
+ }
+
+ [$getChildren](name = null) {
+ if (!name) {
+ return this[_children];
+ }
+
+ return this[_children].filter(c => c[$nodeName] === name);
+ }
+
+ [$getChildrenByClass](name) {
+ return this[name];
+ }
+
+ [$getChildrenByName](name, allTransparent, first = true) {
+ return Array.from(this[$getChildrenByNameIt](name, allTransparent, first));
+ }
+
+ *[$getChildrenByNameIt](name, allTransparent, first = true) {
+ if (name === "parent") {
+ yield this[_parent];
+ return;
+ }
+
+ for (const child of this[_children]) {
+ if (child[$nodeName] === name) {
+ yield child;
+ }
+
+ if (child.name === name) {
+ yield child;
+ }
+
+ if (allTransparent || child[$isTransparent]()) {
+ yield* child[$getChildrenByNameIt](name, allTransparent, false);
+ }
+ }
+
+ if (first && this[_attributeNames].has(name)) {
+ yield new XFAAttribute(this, name, this[name]);
+ }
+ }
+
+}
+
+exports.XFAObject = XFAObject;
+
+class XFAObjectArray {
+ constructor(max = Infinity) {
+ this[_max] = max;
+ this[_children] = [];
+ }
+
+ push(child) {
+ const len = this[_children].length;
+
+ if (len <= this[_max]) {
+ this[_children].push(child);
+
+ return true;
+ }
+
+ (0, _util.warn)(`XFA - node "${child[$nodeName]}" accepts no more than ${this[_max]} children`);
+ return false;
+ }
+
+ isEmpty() {
+ return this[_children].length === 0;
+ }
+
+ dump() {
+ return this[_children].length === 1 ? this[_children][0][$dump]() : this[_children].map(x => x[$dump]());
+ }
+
+ [$clone]() {
+ const clone = new XFAObjectArray(this[_max]);
+ clone[_children] = this[_children].map(c => c[$clone]());
+ return clone;
+ }
+
+ get children() {
+ return this[_children];
+ }
+
+ clear() {
+ this[_children].length = 0;
+ }
+
+}
+
+exports.XFAObjectArray = XFAObjectArray;
+
+class XFAAttribute {
+ constructor(node, name, value) {
+ this[_parent] = node;
+ this[$nodeName] = name;
+ this[$content] = value;
+ this[$consumed] = false;
+ this[$uid] = `attribute${uid++}`;
+ }
+
+ [$getParent]() {
+ return this[_parent];
+ }
+
+ [$isDataValue]() {
+ return true;
+ }
+
+ [$getDataValue]() {
+ return this[$content].trim();
+ }
+
+ [$setValue](value) {
+ value = value.value || "";
+ this[$content] = value.toString();
+ }
+
+ [$text]() {
+ return this[$content];
+ }
+
+ [$isDescendent](parent) {
+ return this[_parent] === parent || this[_parent][$isDescendent](parent);
+ }
+
+}
+
+exports.XFAAttribute = XFAAttribute;
+
+class XmlObject extends XFAObject {
+ constructor(nsId, name, attributes = {}) {
+ super(nsId, name);
+ this[$content] = "";
+ this[_dataValue] = null;
+
+ if (name !== "#text") {
+ const map = new Map();
+ this[_attributes] = map;
+
+ for (const [attrName, value] of Object.entries(attributes)) {
+ map.set(attrName, new XFAAttribute(this, attrName, value));
+ }
+
+ if (attributes.hasOwnProperty($nsAttributes)) {
+ const dataNode = attributes[$nsAttributes].xfa.dataNode;
+
+ if (dataNode !== undefined) {
+ if (dataNode === "dataGroup") {
+ this[_dataValue] = false;
+ } else if (dataNode === "dataValue") {
+ this[_dataValue] = true;
+ }
+ }
+ }
+ }
+
+ this[$consumed] = false;
+ }
+
+ [$toString](buf) {
+ const tagName = this[$nodeName];
+
+ if (tagName === "#text") {
+ buf.push((0, _core_utils.encodeToXmlString)(this[$content]));
+ return;
+ }
+
+ const prefix = this[$namespaceId] === NS_DATASETS ? "xfa:" : "";
+ buf.push(`<${prefix}${tagName}`);
+
+ for (const [name, value] of this[_attributes].entries()) {
+ buf.push(` ${name}="${(0, _core_utils.encodeToXmlString)(value[$content])}"`);
+ }
+
+ if (this[_dataValue] !== null) {
+ if (this[_dataValue]) {
+ buf.push(` xfa:dataNode="dataValue"`);
+ } else {
+ buf.push(` xfa:dataNode="dataGroup"`);
+ }
+ }
+
+ if (!this[$content] && this[_children].length === 0) {
+ buf.push("/>");
+ return;
+ }
+
+ buf.push(">");
+
+ if (this[$content]) {
+ if (typeof this[$content] === "string") {
+ buf.push((0, _core_utils.encodeToXmlString)(this[$content]));
+ } else {
+ this[$content][$toString](buf);
+ }
+ } else {
+ for (const child of this[_children]) {
+ child[$toString](buf);
+ }
+ }
+
+ buf.push(`</${prefix}${tagName}>`);
+ }
+
+ [$onChild](child) {
+ if (this[$content]) {
+ const node = new XmlObject(this[$namespaceId], "#text");
+ this[$appendChild](node);
+ node[$content] = this[$content];
+ this[$content] = "";
+ }
+
+ this[$appendChild](child);
+ return true;
+ }
+
+ [$onText](str) {
+ this[$content] += str;
+ }
+
+ [$finalize]() {
+ if (this[$content] && this[_children].length > 0) {
+ const node = new XmlObject(this[$namespaceId], "#text");
+ this[$appendChild](node);
+ node[$content] = this[$content];
+ delete this[$content];
+ }
+ }
+
+ [$toHTML]() {
+ if (this[$nodeName] === "#text") {
+ return _utils.HTMLResult.success({
+ name: "#text",
+ value: this[$content]
+ });
+ }
+
+ return _utils.HTMLResult.EMPTY;
+ }
+
+ [$getChildren](name = null) {
+ if (!name) {
+ return this[_children];
+ }
+
+ return this[_children].filter(c => c[$nodeName] === name);
+ }
+
+ [$getAttributes]() {
+ return this[_attributes];
+ }
+
+ [$getChildrenByClass](name) {
+ const value = this[_attributes].get(name);
+
+ if (value !== undefined) {
+ return value;
+ }
+
+ return this[$getChildren](name);
+ }
+
+ *[$getChildrenByNameIt](name, allTransparent) {
+ const value = this[_attributes].get(name);
+
+ if (value) {
+ yield value;
+ }
+
+ for (const child of this[_children]) {
+ if (child[$nodeName] === name) {
+ yield child;
+ }
+
+ if (allTransparent) {
+ yield* child[$getChildrenByNameIt](name, allTransparent);
+ }
+ }
+ }
+
+ *[$getAttributeIt](name, skipConsumed) {
+ const value = this[_attributes].get(name);
+
+ if (value && (!skipConsumed || !value[$consumed])) {
+ yield value;
+ }
+
+ for (const child of this[_children]) {
+ yield* child[$getAttributeIt](name, skipConsumed);
+ }
+ }
+
+ *[$getRealChildrenByNameIt](name, allTransparent, skipConsumed) {
+ for (const child of this[_children]) {
+ if (child[$nodeName] === name && (!skipConsumed || !child[$consumed])) {
+ yield child;
+ }
+
+ if (allTransparent) {
+ yield* child[$getRealChildrenByNameIt](name, allTransparent, skipConsumed);
+ }
+ }
+ }
+
+ [$isDataValue]() {
+ if (this[_dataValue] === null) {
+ return this[_children].length === 0 || this[_children][0][$namespaceId] === _namespaces.NamespaceIds.xhtml.id;
+ }
+
+ return this[_dataValue];
+ }
+
+ [$getDataValue]() {
+ if (this[_dataValue] === null) {
+ if (this[_children].length === 0) {
+ return this[$content].trim();
+ }
+
+ if (this[_children][0][$namespaceId] === _namespaces.NamespaceIds.xhtml.id) {
+ return this[_children][0][$text]().trim();
+ }
+
+ return null;
+ }
+
+ return this[$content].trim();
+ }
+
+ [$setValue](value) {
+ value = value.value || "";
+ this[$content] = value.toString();
+ }
+
+ [$dump]() {
+ const dumped = Object.create(null);
+
+ if (this[$content]) {
+ dumped.$content = this[$content];
+ }
+
+ dumped.$name = this[$nodeName];
+ dumped.children = [];
+
+ for (const child of this[_children]) {
+ dumped.children.push(child[$dump]());
+ }
+
+ dumped.attributes = Object.create(null);
+
+ for (const [name, value] of this[_attributes]) {
+ dumped.attributes[name] = value[$content];
+ }
+
+ return dumped;
+ }
+
+}
+
+exports.XmlObject = XmlObject;
+
+class ContentObject extends XFAObject {
+ constructor(nsId, name) {
+ super(nsId, name);
+ this[$content] = "";
+ }
+
+ [$onText](text) {
+ this[$content] += text;
+ }
+
+ [$finalize]() {}
+
+}
+
+exports.ContentObject = ContentObject;
+
+class OptionObject extends ContentObject {
+ constructor(nsId, name, options) {
+ super(nsId, name);
+ this[_options] = options;
+ }
+
+ [$finalize]() {
+ this[$content] = (0, _utils.getKeyword)({
+ data: this[$content],
+ defaultValue: this[_options][0],
+ validate: k => this[_options].includes(k)
+ });
+ }
+
+ [$clean](builder) {
+ super[$clean](builder);
+ delete this[_options];
+ }
+
+}
+
+exports.OptionObject = OptionObject;
+
+class StringObject extends ContentObject {
+ [$finalize]() {
+ this[$content] = this[$content].trim();
+ }
+
+}
+
+exports.StringObject = StringObject;
+
+class IntegerObject extends ContentObject {
+ constructor(nsId, name, defaultValue, validator) {
+ super(nsId, name);
+ this[_defaultValue] = defaultValue;
+ this[_validator] = validator;
+ }
+
+ [$finalize]() {
+ this[$content] = (0, _utils.getInteger)({
+ data: this[$content],
+ defaultValue: this[_defaultValue],
+ validate: this[_validator]
+ });
+ }
+
+ [$clean](builder) {
+ super[$clean](builder);
+ delete this[_defaultValue];
+ delete this[_validator];
+ }
+
+}
+
+exports.IntegerObject = IntegerObject;
+
+class Option01 extends IntegerObject {
+ constructor(nsId, name) {
+ super(nsId, name, 0, n => n === 1);
+ }
+
+}
+
+exports.Option01 = Option01;
+
+class Option10 extends IntegerObject {
+ constructor(nsId, name) {
+ super(nsId, name, 1, n => n === 0);
+ }
+
+}
+
+exports.Option10 = Option10;
+
+/***/ }),
+/* 76 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.getBBox = getBBox;
+exports.getColor = getColor;
+exports.getFloat = getFloat;
+exports.getInteger = getInteger;
+exports.getKeyword = getKeyword;
+exports.getMeasurement = getMeasurement;
+exports.getRatio = getRatio;
+exports.getRelevant = getRelevant;
+exports.getStringOption = getStringOption;
+exports.stripQuotes = stripQuotes;
+exports.HTMLResult = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+const dimConverters = {
+ pt: x => x,
+ cm: x => x / 2.54 * 72,
+ mm: x => x / (10 * 2.54) * 72,
+ in: x => x * 72,
+ px: x => x
+};
+const measurementPattern = /([+-]?[0-9]+\.?[0-9]*)(.*)/;
+
+function stripQuotes(str) {
+ if (str.startsWith("'") || str.startsWith('"')) {
+ return str.slice(1, str.length - 1);
+ }
+
+ return str;
+}
+
+function getInteger({
+ data,
+ defaultValue,
+ validate
+}) {
+ if (!data) {
+ return defaultValue;
+ }
+
+ data = data.trim();
+ const n = parseInt(data, 10);
+
+ if (!isNaN(n) && validate(n)) {
+ return n;
+ }
+
+ return defaultValue;
+}
+
+function getFloat({
+ data,
+ defaultValue,
+ validate
+}) {
+ if (!data) {
+ return defaultValue;
+ }
+
+ data = data.trim();
+ const n = parseFloat(data);
+
+ if (!isNaN(n) && validate(n)) {
+ return n;
+ }
+
+ return defaultValue;
+}
+
+function getKeyword({
+ data,
+ defaultValue,
+ validate
+}) {
+ if (!data) {
+ return defaultValue;
+ }
+
+ data = data.trim();
+
+ if (validate(data)) {
+ return data;
+ }
+
+ return defaultValue;
+}
+
+function getStringOption(data, options) {
+ return getKeyword({
+ data,
+ defaultValue: options[0],
+ validate: k => options.includes(k)
+ });
+}
+
+function getMeasurement(str, def = "0") {
+ def = def || "0";
+
+ if (!str) {
+ return getMeasurement(def);
+ }
+
+ const match = str.trim().match(measurementPattern);
+
+ if (!match) {
+ return getMeasurement(def);
+ }
+
+ const [, valueStr, unit] = match;
+ const value = parseFloat(valueStr);
+
+ if (isNaN(value)) {
+ return getMeasurement(def);
+ }
+
+ if (value === 0) {
+ return 0;
+ }
+
+ const conv = dimConverters[unit];
+
+ if (conv) {
+ return conv(value);
+ }
+
+ return value;
+}
+
+function getRatio(data) {
+ if (!data) {
+ return {
+ num: 1,
+ den: 1
+ };
+ }
+
+ const ratio = data.trim().split(/\s*:\s*/).map(x => parseFloat(x)).filter(x => !isNaN(x));
+
+ if (ratio.length === 1) {
+ ratio.push(1);
+ }
+
+ if (ratio.length === 0) {
+ return {
+ num: 1,
+ den: 1
+ };
+ }
+
+ const [num, den] = ratio;
+ return {
+ num,
+ den
+ };
+}
+
+function getRelevant(data) {
+ if (!data) {
+ return [];
+ }
+
+ return data.trim().split(/\s+/).map(e => {
+ return {
+ excluded: e[0] === "-",
+ viewname: e.substring(1)
+ };
+ });
+}
+
+function getColor(data, def = [0, 0, 0]) {
+ let [r, g, b] = def;
+
+ if (!data) {
+ return {
+ r,
+ g,
+ b
+ };
+ }
+
+ const color = data.trim().split(/\s*,\s*/).map(c => Math.min(Math.max(0, parseInt(c.trim(), 10)), 255)).map(c => isNaN(c) ? 0 : c);
+
+ if (color.length < 3) {
+ return {
+ r,
+ g,
+ b
+ };
+ }
+
+ [r, g, b] = color;
+ return {
+ r,
+ g,
+ b
+ };
+}
+
+function getBBox(data) {
+ const def = -1;
+
+ if (!data) {
+ return {
+ x: def,
+ y: def,
+ width: def,
+ height: def
+ };
+ }
+
+ const bbox = data.trim().split(/\s*,\s*/).map(m => getMeasurement(m, "-1"));
+
+ if (bbox.length < 4 || bbox[2] < 0 || bbox[3] < 0) {
+ return {
+ x: def,
+ y: def,
+ width: def,
+ height: def
+ };
+ }
+
+ const [x, y, width, height] = bbox;
+ return {
+ x,
+ y,
+ width,
+ height
+ };
+}
+
+class HTMLResult {
+ static get FAILURE() {
+ return (0, _util.shadow)(this, "FAILURE", new HTMLResult(false, null, null, null));
+ }
+
+ static get EMPTY() {
+ return (0, _util.shadow)(this, "EMPTY", new HTMLResult(true, null, null, null));
+ }
+
+ constructor(success, html, bbox, breakNode) {
+ this.success = success;
+ this.html = html;
+ this.bbox = bbox;
+ this.breakNode = breakNode;
+ }
+
+ isBreak() {
+ return !!this.breakNode;
+ }
+
+ static breakNode(node) {
+ return new HTMLResult(false, null, null, node);
+ }
+
+ static success(html, bbox = null) {
+ return new HTMLResult(true, html, bbox, null);
+ }
+
+}
+
+exports.HTMLResult = HTMLResult;
+
+/***/ }),
+/* 77 */
+/***/ ((__unused_webpack_module, exports) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.NamespaceIds = exports.$buildXFAObject = void 0;
+const $buildXFAObject = Symbol();
+exports.$buildXFAObject = $buildXFAObject;
+const NamespaceIds = {
+ config: {
+ id: 0,
+ check: ns => ns.startsWith("http://www.xfa.org/schema/xci/")
+ },
+ connectionSet: {
+ id: 1,
+ check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-connection-set/")
+ },
+ datasets: {
+ id: 2,
+ check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-data/")
+ },
+ form: {
+ id: 3,
+ check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-form/")
+ },
+ localeSet: {
+ id: 4,
+ check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-locale-set/")
+ },
+ pdf: {
+ id: 5,
+ check: ns => ns === "http://ns.adobe.com/xdp/pdf/"
+ },
+ signature: {
+ id: 6,
+ check: ns => ns === "http://www.w3.org/2000/09/xmldsig#"
+ },
+ sourceSet: {
+ id: 7,
+ check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-source-set/")
+ },
+ stylesheet: {
+ id: 8,
+ check: ns => ns === "http://www.w3.org/1999/XSL/Transform"
+ },
+ template: {
+ id: 9,
+ check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-template/")
+ },
+ xdc: {
+ id: 10,
+ check: ns => ns.startsWith("http://www.xfa.org/schema/xdc/")
+ },
+ xdp: {
+ id: 11,
+ check: ns => ns === "http://ns.adobe.com/xdp/"
+ },
+ xfdf: {
+ id: 12,
+ check: ns => ns === "http://ns.adobe.com/xfdf/"
+ },
+ xhtml: {
+ id: 13,
+ check: ns => ns === "http://www.w3.org/1999/xhtml"
+ },
+ xmpmeta: {
+ id: 14,
+ check: ns => ns === "http://ns.adobe.com/xmpmeta/"
+ }
+};
+exports.NamespaceIds = NamespaceIds;
+
+/***/ }),
+/* 78 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.createDataNode = createDataNode;
+exports.searchNode = searchNode;
+
+var _xfa_object = __w_pdfjs_require__(75);
+
+var _util = __w_pdfjs_require__(2);
+
+const namePattern = /^[^.[]+/;
+const indexPattern = /^[^\]]+/;
+const operators = {
+ dot: 0,
+ dotDot: 1,
+ dotHash: 2,
+ dotBracket: 3,
+ dotParen: 4
+};
+const shortcuts = new Map([["$data", (root, current) => root.datasets.data], ["$template", (root, current) => root.template], ["$connectionSet", (root, current) => root.connectionSet], ["$form", (root, current) => root.form], ["$layout", (root, current) => root.layout], ["$host", (root, current) => root.host], ["$dataWindow", (root, current) => root.dataWindow], ["$event", (root, current) => root.event], ["!", (root, current) => root.datasets], ["$xfa", (root, current) => root], ["xfa", (root, current) => root], ["$", (root, current) => current]]);
+const somCache = new WeakMap();
+
+function parseIndex(index) {
+ index = index.trim();
+
+ if (index === "*") {
+ return Infinity;
+ }
+
+ return parseInt(index, 10) || 0;
+}
+
+function parseExpression(expr, dotDotAllowed, noExpr = true) {
+ let match = expr.match(namePattern);
+
+ if (!match) {
+ return null;
+ }
+
+ let [name] = match;
+ const parsed = [{
+ name,
+ cacheName: "." + name,
+ index: 0,
+ js: null,
+ formCalc: null,
+ operator: operators.dot
+ }];
+ let pos = name.length;
+
+ while (pos < expr.length) {
+ const spos = pos;
+ const char = expr.charAt(pos++);
+
+ if (char === "[") {
+ match = expr.slice(pos).match(indexPattern);
+
+ if (!match) {
+ (0, _util.warn)("XFA - Invalid index in SOM expression");
+ return null;
+ }
+
+ parsed[parsed.length - 1].index = parseIndex(match[0]);
+ pos += match[0].length + 1;
+ continue;
+ }
+
+ let operator;
+
+ switch (expr.charAt(pos)) {
+ case ".":
+ if (!dotDotAllowed) {
+ return null;
+ }
+
+ pos++;
+ operator = operators.dotDot;
+ break;
+
+ case "#":
+ pos++;
+ operator = operators.dotHash;
+ break;
+
+ case "[":
+ if (noExpr) {
+ (0, _util.warn)("XFA - SOM expression contains a FormCalc subexpression which is not supported for now.");
+ return null;
+ }
+
+ operator = operators.dotBracket;
+ break;
+
+ case "(":
+ if (noExpr) {
+ (0, _util.warn)("XFA - SOM expression contains a JavaScript subexpression which is not supported for now.");
+ return null;
+ }
+
+ operator = operators.dotParen;
+ break;
+
+ default:
+ operator = operators.dot;
+ break;
+ }
+
+ match = expr.slice(pos).match(namePattern);
+
+ if (!match) {
+ break;
+ }
+
+ [name] = match;
+ pos += name.length;
+ parsed.push({
+ name,
+ cacheName: expr.slice(spos, pos),
+ operator,
+ index: 0,
+ js: null,
+ formCalc: null
+ });
+ }
+
+ return parsed;
+}
+
+function searchNode(root, container, expr, dotDotAllowed = true, useCache = true) {
+ const parsed = parseExpression(expr, dotDotAllowed);
+
+ if (!parsed) {
+ return null;
+ }
+
+ const fn = shortcuts.get(parsed[0].name);
+ let i = 0;
+ let isQualified;
+
+ if (fn) {
+ isQualified = true;
+ root = [fn(root, container)];
+ i = 1;
+ } else {
+ isQualified = container === null;
+ root = [container || root];
+ }
+
+ for (let ii = parsed.length; i < ii; i++) {
+ const {
+ name,
+ cacheName,
+ operator,
+ index
+ } = parsed[i];
+ const nodes = [];
+
+ for (const node of root) {
+ if (!(node instanceof _xfa_object.XFAObject)) {
+ continue;
+ }
+
+ let children, cached;
+
+ if (useCache) {
+ cached = somCache.get(node);
+
+ if (!cached) {
+ cached = new Map();
+ somCache.set(node, cached);
+ }
+
+ children = cached.get(cacheName);
+ }
+
+ if (!children) {
+ switch (operator) {
+ case operators.dot:
+ children = node[_xfa_object.$getChildrenByName](name, false);
+ break;
+
+ case operators.dotDot:
+ children = node[_xfa_object.$getChildrenByName](name, true);
+ break;
+
+ case operators.dotHash:
+ children = node[_xfa_object.$getChildrenByClass](name);
+
+ if (children instanceof _xfa_object.XFAObjectArray) {
+ children = children.children;
+ } else {
+ children = [children];
+ }
+
+ break;
+
+ default:
+ break;
+ }
+
+ if (useCache) {
+ cached.set(cacheName, children);
+ }
+ }
+
+ if (children.length > 0) {
+ nodes.push(children);
+ }
+ }
+
+ if (nodes.length === 0 && !isQualified && i === 0) {
+ const parent = container[_xfa_object.$getParent]();
+
+ container = parent;
+
+ if (!container) {
+ return null;
+ }
+
+ i = -1;
+ root = [container];
+ continue;
+ }
+
+ if (isFinite(index)) {
+ root = nodes.filter(node => index < node.length).map(node => node[index]);
+ } else {
+ root = nodes.reduce((acc, node) => acc.concat(node), []);
+ }
+ }
+
+ if (root.length === 0) {
+ return null;
+ }
+
+ return root;
+}
+
+function createNodes(root, path) {
+ let node = null;
+
+ for (const {
+ name,
+ index
+ } of path) {
+ for (let i = 0, ii = !isFinite(index) ? 0 : index; i <= ii; i++) {
+ node = new _xfa_object.XmlObject(root[_xfa_object.$namespaceId], name);
+
+ root[_xfa_object.$appendChild](node);
+ }
+
+ root = node;
+ }
+
+ return node;
+}
+
+function createDataNode(root, container, expr) {
+ const parsed = parseExpression(expr);
+
+ if (!parsed) {
+ return null;
+ }
+
+ if (parsed.some(x => x.operator === operators.dotDot)) {
+ return null;
+ }
+
+ const fn = shortcuts.get(parsed[0].name);
+ let i = 0;
+
+ if (fn) {
+ root = fn(root, container);
+ i = 1;
+ } else {
+ root = container || root;
+ }
+
+ for (let ii = parsed.length; i < ii; i++) {
+ const {
+ name,
+ operator,
+ index
+ } = parsed[i];
+
+ if (!isFinite(index)) {
+ parsed[i].index = 0;
+ return createNodes(root, parsed.slice(i));
+ }
+
+ let children;
+
+ switch (operator) {
+ case operators.dot:
+ children = root[_xfa_object.$getChildrenByName](name, false);
+ break;
+
+ case operators.dotDot:
+ children = root[_xfa_object.$getChildrenByName](name, true);
+ break;
+
+ case operators.dotHash:
+ children = root[_xfa_object.$getChildrenByClass](name);
+
+ if (children instanceof _xfa_object.XFAObjectArray) {
+ children = children.children;
+ } else {
+ children = [children];
+ }
+
+ break;
+
+ default:
+ break;
+ }
+
+ if (children.length === 0) {
+ return createNodes(root, parsed.slice(i));
+ }
+
+ if (index < children.length) {
+ const child = children[index];
+
+ if (!(child instanceof _xfa_object.XFAObject)) {
+ (0, _util.warn)(`XFA - Cannot create a node.`);
+ return null;
+ }
+
+ root = child;
+ } else {
+ parsed[i].index = index - children.length;
+ return createNodes(root, parsed.slice(i));
+ }
+ }
+
+ return null;
+}
+
+/***/ }),
+/* 79 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.Binder = void 0;
+
+var _xfa_object = __w_pdfjs_require__(75);
+
+var _template = __w_pdfjs_require__(80);
+
+var _som = __w_pdfjs_require__(78);
+
+var _namespaces = __w_pdfjs_require__(77);
+
+var _util = __w_pdfjs_require__(2);
+
+function createText(content) {
+ const node = new _template.Text({});
+ node[_xfa_object.$content] = content;
+ return node;
+}
+
+class Binder {
+ constructor(root) {
+ this.root = root;
+ this.datasets = root.datasets;
+
+ if (root.datasets && root.datasets.data) {
+ this.data = root.datasets.data;
+ } else {
+ this.data = new _xfa_object.XmlObject(_namespaces.NamespaceIds.datasets.id, "data");
+ }
+
+ this.emptyMerge = this.data[_xfa_object.$getChildren]().length === 0;
+ this.root.form = this.form = root.template[_xfa_object.$clone]();
+ }
+
+ _isConsumeData() {
+ return !this.emptyMerge && this._mergeMode;
+ }
+
+ _isMatchTemplate() {
+ return !this._isConsumeData();
+ }
+
+ bind() {
+ this._bindElement(this.form, this.data);
+
+ return this.form;
+ }
+
+ getData() {
+ return this.data;
+ }
+
+ _bindValue(formNode, data, picture) {
+ formNode[_xfa_object.$data] = data;
+
+ if (formNode[_xfa_object.$hasSettableValue]()) {
+ if (data[_xfa_object.$isDataValue]()) {
+ const value = data[_xfa_object.$getDataValue]();
+
+ formNode[_xfa_object.$setValue](createText(value));
+ } else if (formNode instanceof _template.Field && formNode.ui && formNode.ui.choiceList && formNode.ui.choiceList.open === "multiSelect") {
+ const value = data[_xfa_object.$getChildren]().map(child => child[_xfa_object.$content].trim()).join("\n");
+
+ formNode[_xfa_object.$setValue](createText(value));
+ } else if (this._isConsumeData()) {
+ (0, _util.warn)(`XFA - Nodes haven't the same type.`);
+ }
+ } else if (!data[_xfa_object.$isDataValue]() || this._isMatchTemplate()) {
+ this._bindElement(formNode, data);
+ } else {
+ (0, _util.warn)(`XFA - Nodes haven't the same type.`);
+ }
+ }
+
+ _findDataByNameToConsume(name, isValue, dataNode, global) {
+ if (!name) {
+ return null;
+ }
+
+ let generator, match;
+
+ for (let i = 0; i < 3; i++) {
+ generator = dataNode[_xfa_object.$getRealChildrenByNameIt](name, false, true);
+
+ while (true) {
+ match = generator.next().value;
+
+ if (!match) {
+ break;
+ }
+
+ if (isValue === match[_xfa_object.$isDataValue]()) {
+ return match;
+ }
+ }
+
+ if (dataNode[_xfa_object.$namespaceId] === _namespaces.NamespaceIds.datasets.id && dataNode[_xfa_object.$nodeName] === "data") {
+ break;
+ }
+
+ dataNode = dataNode[_xfa_object.$getParent]();
+ }
+
+ if (!global) {
+ return null;
+ }
+
+ generator = this.data[_xfa_object.$getRealChildrenByNameIt](name, true, false);
+ match = generator.next().value;
+
+ if (match) {
+ return match;
+ }
+
+ generator = this.data[_xfa_object.$getAttributeIt](name, true);
+ match = generator.next().value;
+
+ if (match && match[_xfa_object.$isDataValue]()) {
+ return match;
+ }
+
+ return null;
+ }
+
+ _setProperties(formNode, dataNode) {
+ if (!formNode.hasOwnProperty("setProperty")) {
+ return;
+ }
+
+ for (const {
+ ref,
+ target,
+ connection
+ } of formNode.setProperty.children) {
+ if (connection) {
+ continue;
+ }
+
+ if (!ref) {
+ continue;
+ }
+
+ const nodes = (0, _som.searchNode)(this.root, dataNode, ref, false, false);
+
+ if (!nodes) {
+ (0, _util.warn)(`XFA - Invalid reference: ${ref}.`);
+ continue;
+ }
+
+ const [node] = nodes;
+
+ if (!node[_xfa_object.$isDescendent](this.data)) {
+ (0, _util.warn)(`XFA - Invalid node: must be a data node.`);
+ continue;
+ }
+
+ const targetNodes = (0, _som.searchNode)(this.root, formNode, target, false, false);
+
+ if (!targetNodes) {
+ (0, _util.warn)(`XFA - Invalid target: ${target}.`);
+ continue;
+ }
+
+ const [targetNode] = targetNodes;
+
+ if (!targetNode[_xfa_object.$isDescendent](formNode)) {
+ (0, _util.warn)(`XFA - Invalid target: must be a property or subproperty.`);
+ continue;
+ }
+
+ const targetParent = targetNode[_xfa_object.$getParent]();
+
+ if (targetNode instanceof _template.SetProperty || targetParent instanceof _template.SetProperty) {
+ (0, _util.warn)(`XFA - Invalid target: cannot be a setProperty or one of its properties.`);
+ continue;
+ }
+
+ if (targetNode instanceof _template.BindItems || targetParent instanceof _template.BindItems) {
+ (0, _util.warn)(`XFA - Invalid target: cannot be a bindItems or one of its properties.`);
+ continue;
+ }
+
+ const content = node[_xfa_object.$text]();
+
+ const name = targetNode[_xfa_object.$nodeName];
+
+ if (targetNode instanceof _xfa_object.XFAAttribute) {
+ const attrs = Object.create(null);
+ attrs[name] = content;
+ const obj = Reflect.construct(Object.getPrototypeOf(targetParent).constructor, [attrs]);
+ targetParent[name] = obj[name];
+ continue;
+ }
+
+ if (!targetNode.hasOwnProperty(_xfa_object.$content)) {
+ (0, _util.warn)(`XFA - Invalid node to use in setProperty`);
+ continue;
+ }
+
+ targetNode[_xfa_object.$data] = node;
+ targetNode[_xfa_object.$content] = content;
+
+ targetNode[_xfa_object.$finalize]();
+ }
+ }
+
+ _bindItems(formNode, dataNode) {
+ if (!formNode.hasOwnProperty("items") || !formNode.hasOwnProperty("bindItems") || formNode.bindItems.isEmpty()) {
+ return;
+ }
+
+ for (const item of formNode.items.children) {
+ formNode[_xfa_object.$removeChild](item);
+ }
+
+ formNode.items.clear();
+ const labels = new _template.Items({});
+ const values = new _template.Items({});
+
+ formNode[_xfa_object.$appendChild](labels);
+
+ formNode.items.push(labels);
+
+ formNode[_xfa_object.$appendChild](values);
+
+ formNode.items.push(values);
+
+ for (const {
+ ref,
+ labelRef,
+ valueRef,
+ connection
+ } of formNode.bindItems.children) {
+ if (connection) {
+ continue;
+ }
+
+ if (!ref) {
+ continue;
+ }
+
+ const nodes = (0, _som.searchNode)(this.root, dataNode, ref, false, false);
+
+ if (!nodes) {
+ (0, _util.warn)(`XFA - Invalid reference: ${ref}.`);
+ continue;
+ }
+
+ for (const node of nodes) {
+ if (!node[_xfa_object.$isDescendent](this.datasets)) {
+ (0, _util.warn)(`XFA - Invalid ref (${ref}): must be a datasets child.`);
+ continue;
+ }
+
+ const labelNodes = (0, _som.searchNode)(this.root, node, labelRef, true, false);
+
+ if (!labelNodes) {
+ (0, _util.warn)(`XFA - Invalid label: ${labelRef}.`);
+ continue;
+ }
+
+ const [labelNode] = labelNodes;
+
+ if (!labelNode[_xfa_object.$isDescendent](this.datasets)) {
+ (0, _util.warn)(`XFA - Invalid label: must be a datasets child.`);
+ continue;
+ }
+
+ const valueNodes = (0, _som.searchNode)(this.root, node, valueRef, true, false);
+
+ if (!valueNodes) {
+ (0, _util.warn)(`XFA - Invalid value: ${valueRef}.`);
+ continue;
+ }
+
+ const [valueNode] = valueNodes;
+
+ if (!valueNode[_xfa_object.$isDescendent](this.datasets)) {
+ (0, _util.warn)(`XFA - Invalid value: must be a datasets child.`);
+ continue;
+ }
+
+ const label = createText(labelNode[_xfa_object.$text]());
+ const value = createText(valueNode[_xfa_object.$text]());
+
+ labels[_xfa_object.$appendChild](label);
+
+ labels.text.push(label);
+
+ values[_xfa_object.$appendChild](value);
+
+ values.text.push(value);
+ }
+ }
+ }
+
+ _bindOccurrences(formNode, matches, picture) {
+ let baseClone;
+
+ if (matches.length > 1) {
+ baseClone = formNode[_xfa_object.$clone]();
+ }
+
+ this._bindValue(formNode, matches[0], picture);
+
+ this._setProperties(formNode, matches[0]);
+
+ this._bindItems(formNode, matches[0]);
+
+ if (matches.length === 1) {
+ return;
+ }
+
+ const parent = formNode[_xfa_object.$getParent]();
+
+ const name = formNode[_xfa_object.$nodeName];
+
+ const pos = parent[_xfa_object.$indexOf](formNode);
+
+ for (let i = 1, ii = matches.length; i < ii; i++) {
+ const match = matches[i];
+
+ const clone = baseClone[_xfa_object.$clone]();
+
+ clone.occur.min = 1;
+ clone.occur.max = 1;
+ clone.occur.initial = 1;
+ parent[name].push(clone);
+
+ parent[_xfa_object.$insertAt](pos + i, clone);
+
+ this._bindValue(clone, match, picture);
+
+ this._setProperties(clone, match);
+
+ this._bindItems(clone, match);
+ }
+ }
+
+ _createOccurrences(formNode) {
+ if (!this.emptyMerge) {
+ return;
+ }
+
+ const {
+ occur
+ } = formNode;
+
+ if (!occur || occur.initial <= 1) {
+ return;
+ }
+
+ const parent = formNode[_xfa_object.$getParent]();
+
+ const name = formNode[_xfa_object.$nodeName];
+
+ for (let i = 0, ii = occur.initial; i < ii; i++) {
+ const clone = formNode[_xfa_object.$clone]();
+
+ clone.occur.min = 1;
+ clone.occur.max = 1;
+ clone.occur.initial = 1;
+ parent[name].push(clone);
+
+ parent[_xfa_object.$appendChild](clone);
+ }
+ }
+
+ _getOccurInfo(formNode) {
+ const {
+ occur
+ } = formNode;
+ const dataName = formNode.name;
+
+ if (!occur || !dataName) {
+ return [1, 1];
+ }
+
+ const max = occur.max === -1 ? Infinity : occur.max;
+ return [occur.min, max];
+ }
+
+ _bindElement(formNode, dataNode) {
+ const uselessNodes = [];
+
+ this._createOccurrences(formNode);
+
+ for (const child of formNode[_xfa_object.$getChildren]()) {
+ if (child[_xfa_object.$data]) {
+ continue;
+ }
+
+ if (this._mergeMode === undefined && child[_xfa_object.$nodeName] === "subform") {
+ this._mergeMode = child.mergeMode === "consumeData";
+
+ const dataChildren = dataNode[_xfa_object.$getChildren]();
+
+ if (dataChildren.length > 0) {
+ this._bindOccurrences(child, [dataChildren[0]], null);
+ } else if (this.emptyMerge) {
+ const dataChild = child[_xfa_object.$data] = new _xfa_object.XmlObject(dataNode[_xfa_object.$namespaceId], child.name || "root");
+
+ dataNode[_xfa_object.$appendChild](dataChild);
+
+ this._bindElement(child, dataChild);
+ }
+
+ continue;
+ }
+
+ if (!child[_xfa_object.$isBindable]()) {
+ continue;
+ }
+
+ let global = false;
+ let picture = null;
+ let ref = null;
+ let match = null;
+
+ if (child.bind) {
+ switch (child.bind.match) {
+ case "none":
+ this._bindElement(child, dataNode);
+
+ continue;
+
+ case "global":
+ global = true;
+ break;
+
+ case "dataRef":
+ if (!child.bind.ref) {
+ (0, _util.warn)(`XFA - ref is empty in node ${child[_xfa_object.$nodeName]}.`);
+
+ this._bindElement(child, dataNode);
+
+ continue;
+ }
+
+ ref = child.bind.ref;
+ break;
+
+ default:
+ break;
+ }
+
+ if (child.bind.picture) {
+ picture = child.bind.picture[_xfa_object.$content];
+ }
+ }
+
+ const [min, max] = this._getOccurInfo(child);
+
+ if (ref) {
+ match = (0, _som.searchNode)(this.root, dataNode, ref, true, false);
+
+ if (match === null) {
+ match = (0, _som.createDataNode)(this.data, dataNode, ref);
+
+ if (!match) {
+ continue;
+ }
+
+ if (this._isConsumeData()) {
+ match[_xfa_object.$consumed] = true;
+ }
+
+ this._bindElement(child, match);
+
+ continue;
+ } else {
+ if (this._isConsumeData()) {
+ match = match.filter(node => !node[_xfa_object.$consumed]);
+ }
+
+ if (match.length > max) {
+ match = match.slice(0, max);
+ } else if (match.length === 0) {
+ match = null;
+ }
+
+ if (match && this._isConsumeData()) {
+ match.forEach(node => {
+ node[_xfa_object.$consumed] = true;
+ });
+ }
+ }
+ } else {
+ if (!child.name) {
+ this._bindElement(child, dataNode);
+
+ continue;
+ }
+
+ if (this._isConsumeData()) {
+ const matches = [];
+
+ while (matches.length < max) {
+ const found = this._findDataByNameToConsume(child.name, child[_xfa_object.$hasSettableValue](), dataNode, global);
+
+ if (!found) {
+ break;
+ }
+
+ found[_xfa_object.$consumed] = true;
+ matches.push(found);
+ }
+
+ match = matches.length > 0 ? matches : null;
+ } else {
+ match = dataNode[_xfa_object.$getRealChildrenByNameIt](child.name, false, this.emptyMerge).next().value;
+
+ if (!match) {
+ match = child[_xfa_object.$data] = new _xfa_object.XmlObject(dataNode[_xfa_object.$namespaceId], child.name);
+
+ if (this.emptyMerge) {
+ match[_xfa_object.$consumed] = true;
+ }
+
+ dataNode[_xfa_object.$appendChild](match);
+
+ this._setProperties(child, match);
+
+ this._bindItems(child, match);
+
+ this._bindElement(child, match);
+
+ continue;
+ }
+
+ if (this.emptyMerge) {
+ match[_xfa_object.$consumed] = true;
+ }
+
+ match = [match];
+ }
+ }
+
+ if (match) {
+ if (match.length < min) {
+ (0, _util.warn)(`XFA - Must have at least ${min} occurrences: ${formNode[_xfa_object.$nodeName]}.`);
+ continue;
+ }
+
+ this._bindOccurrences(child, match, picture);
+ } else if (min > 0) {
+ this._setProperties(child, dataNode);
+
+ this._bindItems(child, dataNode);
+
+ this._bindElement(child, dataNode);
+ } else {
+ uselessNodes.push(child);
+ }
+ }
+
+ uselessNodes.forEach(node => node[_xfa_object.$getParent]()[_xfa_object.$removeChild](node));
+ }
+
+}
+
+exports.Binder = Binder;
+
+/***/ }),
+/* 80 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.Value = exports.Text = exports.TemplateNamespace = exports.Template = exports.SetProperty = exports.Items = exports.Field = exports.BindItems = void 0;
+
+var _xfa_object = __w_pdfjs_require__(75);
+
+var _namespaces = __w_pdfjs_require__(77);
+
+var _layout = __w_pdfjs_require__(81);
+
+var _html_utils = __w_pdfjs_require__(82);
+
+var _utils = __w_pdfjs_require__(76);
+
+var _util = __w_pdfjs_require__(2);
+
+var _som = __w_pdfjs_require__(78);
+
+const TEMPLATE_NS_ID = _namespaces.NamespaceIds.template.id;
+const SVG_NS = "http://www.w3.org/2000/svg";
+const MAX_ATTEMPTS_FOR_LRTB_LAYOUT = 2;
+const MAX_EMPTY_PAGES = 3;
+
+function hasMargin(node) {
+ return node.margin && (node.margin.topInset || node.margin.rightInset || node.margin.bottomInset || node.margin.leftInset);
+}
+
+function _setValue(templateNode, value) {
+ if (!templateNode.value) {
+ const nodeValue = new Value({});
+
+ templateNode[_xfa_object.$appendChild](nodeValue);
+
+ templateNode.value = nodeValue;
+ }
+
+ templateNode.value[_xfa_object.$setValue](value);
+}
+
+function* getContainedChildren(node) {
+ for (const child of node[_xfa_object.$getChildren]()) {
+ if (child instanceof SubformSet) {
+ yield* child[_xfa_object.$getContainedChildren]();
+ continue;
+ }
+
+ yield child;
+ }
+}
+
+function setTabIndex(node) {
+ while (node) {
+ if (!node.traversal || node[_xfa_object.$tabIndex]) {
+ return;
+ }
+
+ let next = null;
+
+ for (const child of node.traversal[_xfa_object.$getChildren]()) {
+ if (child.operation === "next") {
+ next = child;
+ break;
+ }
+ }
+
+ if (!next || !next.ref) {
+ return;
+ }
+
+ const root = node[_xfa_object.$getTemplateRoot]();
+
+ node[_xfa_object.$tabIndex] = ++root[_xfa_object.$tabIndex];
+
+ const ref = root[_xfa_object.$searchNode](next.ref, node);
+
+ if (!ref) {
+ return;
+ }
+
+ node = ref[0];
+ }
+}
+
+function valueToHtml(value) {
+ return _utils.HTMLResult.success({
+ name: "div",
+ attributes: {
+ class: ["xfaRich"],
+ style: Object.create(null)
+ },
+ children: [{
+ name: "span",
+ attributes: {
+ style: Object.create(null)
+ },
+ value
+ }]
+ });
+}
+
+function setFirstUnsplittable(node) {
+ const root = node[_xfa_object.$getTemplateRoot]();
+
+ if (root[_xfa_object.$extra].firstUnsplittable === null) {
+ root[_xfa_object.$extra].firstUnsplittable = node;
+ root[_xfa_object.$extra].noLayoutFailure = true;
+ }
+}
+
+function unsetFirstUnsplittable(node) {
+ const root = node[_xfa_object.$getTemplateRoot]();
+
+ if (root[_xfa_object.$extra].firstUnsplittable === node) {
+ root[_xfa_object.$extra].noLayoutFailure = false;
+ }
+}
+
+function handleBreak(node) {
+ if (node[_xfa_object.$extra]) {
+ return false;
+ }
+
+ node[_xfa_object.$extra] = Object.create(null);
+
+ if (node.targetType === "auto") {
+ return false;
+ }
+
+ const root = node[_xfa_object.$getTemplateRoot]();
+
+ let target = null;
+
+ if (node.target) {
+ target = root[_xfa_object.$searchNode](node.target, node[_xfa_object.$getParent]());
+
+ if (!target) {
+ return false;
+ }
+
+ target = target[0];
+ }
+
+ const {
+ currentPageArea,
+ currentContentArea
+ } = root[_xfa_object.$extra];
+
+ if (node.targetType === "pageArea") {
+ if (!(target instanceof PageArea)) {
+ target = null;
+ }
+
+ if (node.startNew) {
+ node[_xfa_object.$extra].target = target || currentPageArea;
+ return true;
+ } else if (target && target !== currentPageArea) {
+ node[_xfa_object.$extra].target = target;
+ return true;
+ }
+
+ return false;
+ }
+
+ if (!(target instanceof ContentArea)) {
+ target = null;
+ }
+
+ const pageArea = target && target[_xfa_object.$getParent]();
+
+ let index;
+
+ if (node.startNew) {
+ if (target) {
+ const contentAreas = pageArea.contentArea.children;
+ index = contentAreas.findIndex(e => e === target) - 1;
+ } else {
+ index = currentPageArea.contentArea.children.findIndex(e => e === currentContentArea);
+ }
+ } else if (target && target !== currentContentArea) {
+ const contentAreas = pageArea.contentArea.children;
+ index = contentAreas.findIndex(e => e === target) - 1;
+ } else {
+ return false;
+ }
+
+ node[_xfa_object.$extra].target = pageArea === currentPageArea ? null : pageArea;
+ node[_xfa_object.$extra].index = index;
+ return true;
+}
+
+function handleOverflow(node, extraNode, space) {
+ const root = node[_xfa_object.$getTemplateRoot]();
+
+ const saved = root[_xfa_object.$extra].noLayoutFailure;
+ const savedMethod = extraNode[_xfa_object.$getSubformParent];
+
+ extraNode[_xfa_object.$getSubformParent] = () => node;
+
+ root[_xfa_object.$extra].noLayoutFailure = true;
+
+ const res = extraNode[_xfa_object.$toHTML](space);
+
+ node[_xfa_object.$addHTML](res.html, res.bbox);
+
+ root[_xfa_object.$extra].noLayoutFailure = saved;
+ extraNode[_xfa_object.$getSubformParent] = savedMethod;
+}
+
+class AppearanceFilter extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "appearanceFilter");
+ this.id = attributes.id || "";
+ this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+}
+
+class Arc extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "arc", true);
+ this.circular = (0, _utils.getInteger)({
+ data: attributes.circular,
+ defaultValue: 0,
+ validate: x => x === 1
+ });
+ this.hand = (0, _utils.getStringOption)(attributes.hand, ["even", "left", "right"]);
+ this.id = attributes.id || "";
+ this.startAngle = (0, _utils.getFloat)({
+ data: attributes.startAngle,
+ defaultValue: 0,
+ validate: x => true
+ });
+ this.sweepAngle = (0, _utils.getFloat)({
+ data: attributes.sweepAngle,
+ defaultValue: 360,
+ validate: x => true
+ });
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.edge = null;
+ this.fill = null;
+ }
+
+ [_xfa_object.$toHTML]() {
+ const edge = this.edge ? this.edge : new Edge({});
+
+ const edgeStyle = edge[_xfa_object.$toStyle]();
+
+ const style = Object.create(null);
+
+ if (this.fill && this.fill.presence === "visible") {
+ Object.assign(style, this.fill[_xfa_object.$toStyle]());
+ } else {
+ style.fill = "transparent";
+ }
+
+ style.strokeWidth = (0, _html_utils.measureToString)(edge.presence === "visible" ? edge.thickness : 0);
+ style.stroke = edgeStyle.color;
+ let arc;
+ const attributes = {
+ xmlns: SVG_NS,
+ style: {
+ width: "100%",
+ height: "100%",
+ overflow: "visible"
+ }
+ };
+
+ if (this.startAngle === 0 && this.sweepAngle === 360) {
+ arc = {
+ name: "ellipse",
+ attributes: {
+ xmlns: SVG_NS,
+ cx: "50%",
+ cy: "50%",
+ rx: "50%",
+ ry: "50%",
+ style
+ }
+ };
+ } else {
+ const startAngle = this.startAngle * Math.PI / 180;
+ const sweepAngle = this.sweepAngle * Math.PI / 180;
+ const largeArc = this.sweepAngle - this.startAngle > 180 ? 1 : 0;
+ const [x1, y1, x2, y2] = [50 * (1 + Math.cos(startAngle)), 50 * (1 - Math.sin(startAngle)), 50 * (1 + Math.cos(sweepAngle)), 50 * (1 - Math.sin(sweepAngle))];
+ arc = {
+ name: "path",
+ attributes: {
+ xmlns: SVG_NS,
+ d: `M ${x1} ${y1} A 50 50 0 ${largeArc} 0 ${x2} ${y2}`,
+ vectorEffect: "non-scaling-stroke",
+ style
+ }
+ };
+ Object.assign(attributes, {
+ viewBox: "0 0 100 100",
+ preserveAspectRatio: "none"
+ });
+ }
+
+ const svg = {
+ name: "svg",
+ children: [arc],
+ attributes
+ };
+
+ const parent = this[_xfa_object.$getParent]()[_xfa_object.$getParent]();
+
+ if (hasMargin(parent)) {
+ return _utils.HTMLResult.success({
+ name: "div",
+ attributes: {
+ style: {
+ display: "inline",
+ width: "100%",
+ height: "100%"
+ }
+ },
+ children: [svg]
+ });
+ }
+
+ svg.attributes.style.position = "absolute";
+ return _utils.HTMLResult.success(svg);
+ }
+
+}
+
+class Area extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "area", true);
+ this.colSpan = (0, _utils.getInteger)({
+ data: attributes.colSpan,
+ defaultValue: 1,
+ validate: n => n >= 1 || n === -1
+ });
+ this.id = attributes.id || "";
+ this.name = attributes.name || "";
+ this.relevant = (0, _utils.getRelevant)(attributes.relevant);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.x = (0, _utils.getMeasurement)(attributes.x, "0pt");
+ this.y = (0, _utils.getMeasurement)(attributes.y, "0pt");
+ this.desc = null;
+ this.extras = null;
+ this.area = new _xfa_object.XFAObjectArray();
+ this.draw = new _xfa_object.XFAObjectArray();
+ this.exObject = new _xfa_object.XFAObjectArray();
+ this.exclGroup = new _xfa_object.XFAObjectArray();
+ this.field = new _xfa_object.XFAObjectArray();
+ this.subform = new _xfa_object.XFAObjectArray();
+ this.subformSet = new _xfa_object.XFAObjectArray();
+ }
+
+ *[_xfa_object.$getContainedChildren]() {
+ yield* getContainedChildren(this);
+ }
+
+ [_xfa_object.$isTransparent]() {
+ return true;
+ }
+
+ [_xfa_object.$addHTML](html, bbox) {
+ const [x, y, w, h] = bbox;
+ this[_xfa_object.$extra].width = Math.max(this[_xfa_object.$extra].width, x + w);
+ this[_xfa_object.$extra].height = Math.max(this[_xfa_object.$extra].height, y + h);
+
+ this[_xfa_object.$extra].children.push(html);
+ }
+
+ [_xfa_object.$getAvailableSpace]() {
+ return this[_xfa_object.$extra].availableSpace;
+ }
+
+ [_xfa_object.$toHTML](availableSpace) {
+ const style = (0, _html_utils.toStyle)(this, "position");
+ const attributes = {
+ style,
+ id: this[_xfa_object.$uid],
+ class: ["xfaArea"]
+ };
+
+ if ((0, _html_utils.isPrintOnly)(this)) {
+ attributes.class.push("xfaPrintOnly");
+ }
+
+ if (this.name) {
+ attributes.xfaName = this.name;
+ }
+
+ const children = [];
+ this[_xfa_object.$extra] = {
+ children,
+ width: 0,
+ height: 0,
+ availableSpace
+ };
+
+ const result = this[_xfa_object.$childrenToHTML]({
+ filter: new Set(["area", "draw", "field", "exclGroup", "subform", "subformSet"]),
+ include: true
+ });
+
+ if (!result.success) {
+ if (result.isBreak()) {
+ return result;
+ }
+
+ delete this[_xfa_object.$extra];
+ return _utils.HTMLResult.FAILURE;
+ }
+
+ style.width = (0, _html_utils.measureToString)(this[_xfa_object.$extra].width);
+ style.height = (0, _html_utils.measureToString)(this[_xfa_object.$extra].height);
+ const html = {
+ name: "div",
+ attributes,
+ children
+ };
+ const bbox = [this.x, this.y, this[_xfa_object.$extra].width, this[_xfa_object.$extra].height];
+ delete this[_xfa_object.$extra];
+ return _utils.HTMLResult.success(html, bbox);
+ }
+
+}
+
+class Assist extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "assist", true);
+ this.id = attributes.id || "";
+ this.role = attributes.role || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.speak = null;
+ this.toolTip = null;
+ }
+
+ [_xfa_object.$toHTML]() {
+ return this.toolTip && this.toolTip[_xfa_object.$content] ? this.toolTip[_xfa_object.$content] : null;
+ }
+
+}
+
+class Barcode extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "barcode", true);
+ this.charEncoding = (0, _utils.getKeyword)({
+ data: attributes.charEncoding ? attributes.charEncoding.toLowerCase() : "",
+ defaultValue: "",
+ validate: k => ["utf-8", "big-five", "fontspecific", "gbk", "gb-18030", "gb-2312", "ksc-5601", "none", "shift-jis", "ucs-2", "utf-16"].includes(k) || k.match(/iso-8859-[0-9]{2}/)
+ });
+ this.checksum = (0, _utils.getStringOption)(attributes.checksum, ["none", "1mod10", "1mod10_1mod11", "2mod10", "auto"]);
+ this.dataColumnCount = (0, _utils.getInteger)({
+ data: attributes.dataColumnCount,
+ defaultValue: -1,
+ validate: x => x >= 0
+ });
+ this.dataLength = (0, _utils.getInteger)({
+ data: attributes.dataLength,
+ defaultValue: -1,
+ validate: x => x >= 0
+ });
+ this.dataPrep = (0, _utils.getStringOption)(attributes.dataPrep, ["none", "flateCompress"]);
+ this.dataRowCount = (0, _utils.getInteger)({
+ data: attributes.dataRowCount,
+ defaultValue: -1,
+ validate: x => x >= 0
+ });
+ this.endChar = attributes.endChar || "";
+ this.errorCorrectionLevel = (0, _utils.getInteger)({
+ data: attributes.errorCorrectionLevel,
+ defaultValue: -1,
+ validate: x => x >= 0 && x <= 8
+ });
+ this.id = attributes.id || "";
+ this.moduleHeight = (0, _utils.getMeasurement)(attributes.moduleHeight, "5mm");
+ this.moduleWidth = (0, _utils.getMeasurement)(attributes.moduleWidth, "0.25mm");
+ this.printCheckDigit = (0, _utils.getInteger)({
+ data: attributes.printCheckDigit,
+ defaultValue: 0,
+ validate: x => x === 1
+ });
+ this.rowColumnRatio = (0, _utils.getRatio)(attributes.rowColumnRatio);
+ this.startChar = attributes.startChar || "";
+ this.textLocation = (0, _utils.getStringOption)(attributes.textLocation, ["below", "above", "aboveEmbedded", "belowEmbedded", "none"]);
+ this.truncate = (0, _utils.getInteger)({
+ data: attributes.truncate,
+ defaultValue: 0,
+ validate: x => x === 1
+ });
+ this.type = (0, _utils.getStringOption)(attributes.type ? attributes.type.toLowerCase() : "", ["aztec", "codabar", "code2of5industrial", "code2of5interleaved", "code2of5matrix", "code2of5standard", "code3of9", "code3of9extended", "code11", "code49", "code93", "code128", "code128a", "code128b", "code128c", "code128sscc", "datamatrix", "ean8", "ean8add2", "ean8add5", "ean13", "ean13add2", "ean13add5", "ean13pwcd", "fim", "logmars", "maxicode", "msi", "pdf417", "pdf417macro", "plessey", "postauscust2", "postauscust3", "postausreplypaid", "postausstandard", "postukrm4scc", "postusdpbc", "postusimb", "postusstandard", "postus5zip", "qrcode", "rfid", "rss14", "rss14expanded", "rss14limited", "rss14stacked", "rss14stackedomni", "rss14truncated", "telepen", "ucc128", "ucc128random", "ucc128sscc", "upca", "upcaadd2", "upcaadd5", "upcapwcd", "upce", "upceadd2", "upceadd5", "upcean2", "upcean5", "upsmaxicode"]);
+ this.upsMode = (0, _utils.getStringOption)(attributes.upsMode, ["usCarrier", "internationalCarrier", "secureSymbol", "standardSymbol"]);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.wideNarrowRatio = (0, _utils.getRatio)(attributes.wideNarrowRatio);
+ this.encrypt = null;
+ this.extras = null;
+ }
+
+}
+
+class Bind extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "bind", true);
+ this.match = (0, _utils.getStringOption)(attributes.match, ["once", "dataRef", "global", "none"]);
+ this.ref = attributes.ref || "";
+ this.picture = null;
+ }
+
+}
+
+class BindItems extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "bindItems");
+ this.connection = attributes.connection || "";
+ this.labelRef = attributes.labelRef || "";
+ this.ref = attributes.ref || "";
+ this.valueRef = attributes.valueRef || "";
+ }
+
+}
+
+exports.BindItems = BindItems;
+
+class Bookend extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "bookend");
+ this.id = attributes.id || "";
+ this.leader = attributes.leader || "";
+ this.trailer = attributes.trailer || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+}
+
+class BooleanElement extends _xfa_object.Option01 {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "boolean");
+ this.id = attributes.id || "";
+ this.name = attributes.name || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+ [_xfa_object.$toHTML](availableSpace) {
+ return valueToHtml(this[_xfa_object.$content] === 1 ? "1" : "0");
+ }
+
+}
+
+class Border extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "border", true);
+ this.break = (0, _utils.getStringOption)(attributes.break, ["close", "open"]);
+ this.hand = (0, _utils.getStringOption)(attributes.hand, ["even", "left", "right"]);
+ this.id = attributes.id || "";
+ this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]);
+ this.relevant = (0, _utils.getRelevant)(attributes.relevant);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.corner = new _xfa_object.XFAObjectArray(4);
+ this.edge = new _xfa_object.XFAObjectArray(4);
+ this.extras = null;
+ this.fill = null;
+ this.margin = null;
+ }
+
+ [_xfa_object.$toStyle]() {
+ const edges = this.edge.children.slice();
+
+ if (edges.length < 4) {
+ const defaultEdge = edges[edges.length - 1] || new Edge({});
+
+ for (let i = edges.length; i < 4; i++) {
+ edges.push(defaultEdge);
+ }
+ }
+
+ const edgeStyles = edges.map(node => {
+ const style = node[_xfa_object.$toStyle]();
+
+ style.color = style.color || "#000000";
+ return style;
+ });
+ const widths = edges.map(edge => edge.thickness);
+ const insets = [0, 0, 0, 0];
+
+ if (this.margin) {
+ insets[0] = this.margin.topInset;
+ insets[1] = this.margin.rightInset;
+ insets[2] = this.margin.bottomInset;
+ insets[3] = this.margin.leftInset;
+ }
+
+ this[_xfa_object.$extra] = {
+ widths,
+ insets
+ };
+ const style = Object.create(null);
+
+ if (this.margin) {
+ Object.assign(style, this.margin[_xfa_object.$toStyle]());
+ }
+
+ if (this.fill && this.fill.presence === "visible") {
+ Object.assign(style, this.fill[_xfa_object.$toStyle]());
+ }
+
+ if (this.corner.children.some(node => node.radius !== 0)) {
+ const cornerStyles = this.corner.children.map(node => node[_xfa_object.$toStyle]());
+
+ if (cornerStyles.length === 2 || cornerStyles.length === 3) {
+ const last = cornerStyles[cornerStyles.length - 1];
+
+ for (let i = cornerStyles.length; i < 4; i++) {
+ cornerStyles.push(last);
+ }
+ }
+
+ style.borderRadius = cornerStyles.map(s => s.radius).join(" ");
+ }
+
+ switch (this.presence) {
+ case "invisible":
+ case "hidden":
+ style.borderStyle = "";
+ break;
+
+ case "inactive":
+ style.borderStyle = "none";
+ break;
+
+ default:
+ style.borderStyle = edgeStyles.map(s => s.style).join(" ");
+ break;
+ }
+
+ style.borderWidth = edgeStyles.map(s => s.width).join(" ");
+ style.borderColor = edgeStyles.map(s => s.color).join(" ");
+ return style;
+ }
+
+}
+
+class Break extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "break", true);
+ this.after = (0, _utils.getStringOption)(attributes.after, ["auto", "contentArea", "pageArea", "pageEven", "pageOdd"]);
+ this.afterTarget = attributes.afterTarget || "";
+ this.before = (0, _utils.getStringOption)(attributes.before, ["auto", "contentArea", "pageArea", "pageEven", "pageOdd"]);
+ this.beforeTarget = attributes.beforeTarget || "";
+ this.bookendLeader = attributes.bookendLeader || "";
+ this.bookendTrailer = attributes.bookendTrailer || "";
+ this.id = attributes.id || "";
+ this.overflowLeader = attributes.overflowLeader || "";
+ this.overflowTarget = attributes.overflowTarget || "";
+ this.overflowTrailer = attributes.overflowTrailer || "";
+ this.startNew = (0, _utils.getInteger)({
+ data: attributes.startNew,
+ defaultValue: 0,
+ validate: x => x === 1
+ });
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.extras = null;
+ }
+
+}
+
+class BreakAfter extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "breakAfter", true);
+ this.id = attributes.id || "";
+ this.leader = attributes.leader || "";
+ this.startNew = (0, _utils.getInteger)({
+ data: attributes.startNew,
+ defaultValue: 0,
+ validate: x => x === 1
+ });
+ this.target = attributes.target || "";
+ this.targetType = (0, _utils.getStringOption)(attributes.targetType, ["auto", "contentArea", "pageArea"]);
+ this.trailer = attributes.trailer || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.script = null;
+ }
+
+}
+
+class BreakBefore extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "breakBefore", true);
+ this.id = attributes.id || "";
+ this.leader = attributes.leader || "";
+ this.startNew = (0, _utils.getInteger)({
+ data: attributes.startNew,
+ defaultValue: 0,
+ validate: x => x === 1
+ });
+ this.target = attributes.target || "";
+ this.targetType = (0, _utils.getStringOption)(attributes.targetType, ["auto", "contentArea", "pageArea"]);
+ this.trailer = attributes.trailer || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.script = null;
+ }
+
+ [_xfa_object.$toHTML](availableSpace) {
+ this[_xfa_object.$extra] = {};
+ return _utils.HTMLResult.FAILURE;
+ }
+
+}
+
+class Button extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "button", true);
+ this.highlight = (0, _utils.getStringOption)(attributes.highlight, ["inverted", "none", "outline", "push"]);
+ this.id = attributes.id || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.extras = null;
+ }
+
+ [_xfa_object.$toHTML](availableSpace) {
+ return _utils.HTMLResult.success({
+ name: "button",
+ attributes: {
+ id: this[_xfa_object.$uid],
+ class: ["xfaButton"],
+ style: {}
+ },
+ children: []
+ });
+ }
+
+}
+
+class Calculate extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "calculate", true);
+ this.id = attributes.id || "";
+ this.override = (0, _utils.getStringOption)(attributes.override, ["disabled", "error", "ignore", "warning"]);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.extras = null;
+ this.message = null;
+ this.script = null;
+ }
+
+}
+
+class Caption extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "caption", true);
+ this.id = attributes.id || "";
+ this.placement = (0, _utils.getStringOption)(attributes.placement, ["left", "bottom", "inline", "right", "top"]);
+ this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]);
+ this.reserve = Math.ceil((0, _utils.getMeasurement)(attributes.reserve));
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.extras = null;
+ this.font = null;
+ this.margin = null;
+ this.para = null;
+ this.value = null;
+ }
+
+ [_xfa_object.$setValue](value) {
+ _setValue(this, value);
+ }
+
+ [_xfa_object.$getExtra](availableSpace) {
+ if (!this[_xfa_object.$extra]) {
+ let {
+ width,
+ height
+ } = availableSpace;
+
+ switch (this.placement) {
+ case "left":
+ case "right":
+ case "inline":
+ width = this.reserve <= 0 ? width : this.reserve;
+ break;
+
+ case "top":
+ case "bottom":
+ height = this.reserve <= 0 ? height : this.reserve;
+ break;
+ }
+
+ this[_xfa_object.$extra] = (0, _html_utils.layoutNode)(this, {
+ width,
+ height
+ });
+ }
+
+ return this[_xfa_object.$extra];
+ }
+
+ [_xfa_object.$toHTML](availableSpace) {
+ if (!this.value) {
+ return _utils.HTMLResult.EMPTY;
+ }
+
+ const value = this.value[_xfa_object.$toHTML](availableSpace).html;
+
+ if (!value) {
+ return _utils.HTMLResult.EMPTY;
+ }
+
+ const savedReserve = this.reserve;
+
+ if (this.reserve <= 0) {
+ const {
+ w,
+ h
+ } = this[_xfa_object.$getExtra](availableSpace);
+
+ switch (this.placement) {
+ case "left":
+ case "right":
+ case "inline":
+ this.reserve = w;
+ break;
+
+ case "top":
+ case "bottom":
+ this.reserve = h;
+ break;
+ }
+ }
+
+ const children = [];
+
+ if (typeof value === "string") {
+ children.push({
+ name: "#text",
+ value
+ });
+ } else {
+ children.push(value);
+ }
+
+ const style = (0, _html_utils.toStyle)(this, "font", "margin", "visibility");
+
+ switch (this.placement) {
+ case "left":
+ case "right":
+ if (this.reserve > 0) {
+ style.width = (0, _html_utils.measureToString)(this.reserve);
+ }
+
+ break;
+
+ case "top":
+ case "bottom":
+ if (this.reserve > 0) {
+ style.height = (0, _html_utils.measureToString)(this.reserve);
+ }
+
+ break;
+ }
+
+ (0, _html_utils.setPara)(this, null, value);
+ this.reserve = savedReserve;
+ return _utils.HTMLResult.success({
+ name: "div",
+ attributes: {
+ style,
+ class: ["xfaCaption"]
+ },
+ children
+ });
+ }
+
+}
+
+class Certificate extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "certificate");
+ this.id = attributes.id || "";
+ this.name = attributes.name || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+}
+
+class Certificates extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "certificates", true);
+ this.credentialServerPolicy = (0, _utils.getStringOption)(attributes.credentialServerPolicy, ["optional", "required"]);
+ this.id = attributes.id || "";
+ this.url = attributes.url || "";
+ this.urlPolicy = attributes.urlPolicy || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.encryption = null;
+ this.issuers = null;
+ this.keyUsage = null;
+ this.oids = null;
+ this.signing = null;
+ this.subjectDNs = null;
+ }
+
+}
+
+class CheckButton extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "checkButton", true);
+ this.id = attributes.id || "";
+ this.mark = (0, _utils.getStringOption)(attributes.mark, ["default", "check", "circle", "cross", "diamond", "square", "star"]);
+ this.shape = (0, _utils.getStringOption)(attributes.shape, ["square", "round"]);
+ this.size = (0, _utils.getMeasurement)(attributes.size, "10pt");
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.border = null;
+ this.extras = null;
+ this.margin = null;
+ }
+
+ [_xfa_object.$toHTML](availableSpace) {
+ const style = (0, _html_utils.toStyle)("margin");
+ const size = (0, _html_utils.measureToString)(this.size);
+ style.width = style.height = size;
+ let type;
+ let className;
+ let groupId;
+
+ const field = this[_xfa_object.$getParent]()[_xfa_object.$getParent]();
+
+ const items = field.items.children.length && field.items.children[0][_xfa_object.$toHTML]().html || [];
+ const exportedValue = {
+ on: (items[0] || "on").toString(),
+ off: (items[1] || "off").toString()
+ };
+ const value = field.value && field.value[_xfa_object.$text]() || "off";
+ const checked = value === exportedValue.on || undefined;
+
+ const container = field[_xfa_object.$getSubformParent]();
+
+ const fieldId = field[_xfa_object.$uid];
+ let dataId;
+
+ if (container instanceof ExclGroup) {
+ groupId = container[_xfa_object.$uid];
+ type = "radio";
+ className = "xfaRadio";
+ dataId = container[_xfa_object.$data] && container[_xfa_object.$data][_xfa_object.$uid] || container[_xfa_object.$uid];
+ } else {
+ type = "checkbox";
+ className = "xfaCheckbox";
+ dataId = field[_xfa_object.$data] && field[_xfa_object.$data][_xfa_object.$uid] || field[_xfa_object.$uid];
+ }
+
+ const input = {
+ name: "input",
+ attributes: {
+ class: [className],
+ style,
+ fieldId,
+ dataId,
+ type,
+ checked,
+ xfaOn: exportedValue.on
+ }
+ };
+
+ if (groupId) {
+ input.attributes.name = groupId;
+ }
+
+ return _utils.HTMLResult.success({
+ name: "label",
+ attributes: {
+ class: ["xfaLabel"]
+ },
+ children: [input]
+ });
+ }
+
+}
+
+class ChoiceList extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "choiceList", true);
+ this.commitOn = (0, _utils.getStringOption)(attributes.commitOn, ["select", "exit"]);
+ this.id = attributes.id || "";
+ this.open = (0, _utils.getStringOption)(attributes.open, ["userControl", "always", "multiSelect", "onEntry"]);
+ this.textEntry = (0, _utils.getInteger)({
+ data: attributes.textEntry,
+ defaultValue: 0,
+ validate: x => x === 1
+ });
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.border = null;
+ this.extras = null;
+ this.margin = null;
+ }
+
+ [_xfa_object.$toHTML](availableSpace) {
+ const style = (0, _html_utils.toStyle)(this, "border", "margin");
+
+ const ui = this[_xfa_object.$getParent]();
+
+ const field = ui[_xfa_object.$getParent]();
+
+ const children = [];
+
+ if (field.items.children.length > 0) {
+ const items = field.items;
+ let displayedIndex = 0;
+ let saveIndex = 0;
+
+ if (items.children.length === 2) {
+ displayedIndex = items.children[0].save;
+ saveIndex = 1 - displayedIndex;
+ }
+
+ const displayed = items.children[displayedIndex][_xfa_object.$toHTML]().html;
+
+ const values = items.children[saveIndex][_xfa_object.$toHTML]().html;
+
+ let selected = false;
+ const value = field.value && field.value[_xfa_object.$text]() || "";
+
+ for (let i = 0, ii = displayed.length; i < ii; i++) {
+ const option = {
+ name: "option",
+ attributes: {
+ value: values[i] || displayed[i]
+ },
+ value: displayed[i]
+ };
+
+ if (values[i] === value) {
+ option.attributes.selected = selected = true;
+ }
+
+ children.push(option);
+ }
+
+ if (!selected) {
+ children.splice(0, 0, {
+ name: "option",
+ attributes: {
+ hidden: true,
+ selected: true
+ },
+ value: " "
+ });
+ }
+ }
+
+ const selectAttributes = {
+ class: ["xfaSelect"],
+ fieldId: field[_xfa_object.$uid],
+ dataId: field[_xfa_object.$data] && field[_xfa_object.$data][_xfa_object.$uid] || field[_xfa_object.$uid],
+ style
+ };
+
+ if (this.open === "multiSelect") {
+ selectAttributes.multiple = true;
+ }
+
+ return _utils.HTMLResult.success({
+ name: "label",
+ attributes: {
+ class: ["xfaLabel"]
+ },
+ children: [{
+ name: "select",
+ children,
+ attributes: selectAttributes
+ }]
+ });
+ }
+
+}
+
+class Color extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "color", true);
+ this.cSpace = (0, _utils.getStringOption)(attributes.cSpace, ["SRGB"]);
+ this.id = attributes.id || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.value = attributes.value ? (0, _utils.getColor)(attributes.value) : "";
+ this.extras = null;
+ }
+
+ [_xfa_object.$hasSettableValue]() {
+ return false;
+ }
+
+ [_xfa_object.$toStyle]() {
+ return this.value ? _util.Util.makeHexColor(this.value.r, this.value.g, this.value.b) : null;
+ }
+
+}
+
+class Comb extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "comb");
+ this.id = attributes.id || "";
+ this.numberOfCells = (0, _utils.getInteger)({
+ data: attributes.numberOfCells,
+ defaultValue: 0,
+ validate: x => x >= 0
+ });
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+}
+
+class Connect extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "connect", true);
+ this.connection = attributes.connection || "";
+ this.id = attributes.id || "";
+ this.ref = attributes.ref || "";
+ this.usage = (0, _utils.getStringOption)(attributes.usage, ["exportAndImport", "exportOnly", "importOnly"]);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.picture = null;
+ }
+
+}
+
+class ContentArea extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "contentArea", true);
+ this.h = (0, _utils.getMeasurement)(attributes.h);
+ this.id = attributes.id || "";
+ this.name = attributes.name || "";
+ this.relevant = (0, _utils.getRelevant)(attributes.relevant);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.w = (0, _utils.getMeasurement)(attributes.w);
+ this.x = (0, _utils.getMeasurement)(attributes.x, "0pt");
+ this.y = (0, _utils.getMeasurement)(attributes.y, "0pt");
+ this.desc = null;
+ this.extras = null;
+ }
+
+ [_xfa_object.$toHTML](availableSpace) {
+ const left = (0, _html_utils.measureToString)(this.x);
+ const top = (0, _html_utils.measureToString)(this.y);
+ const style = {
+ left,
+ top,
+ width: (0, _html_utils.measureToString)(this.w),
+ height: (0, _html_utils.measureToString)(this.h)
+ };
+ const classNames = ["xfaContentarea"];
+
+ if ((0, _html_utils.isPrintOnly)(this)) {
+ classNames.push("xfaPrintOnly");
+ }
+
+ return _utils.HTMLResult.success({
+ name: "div",
+ children: [],
+ attributes: {
+ style,
+ class: classNames,
+ id: this[_xfa_object.$uid]
+ }
+ });
+ }
+
+}
+
+class Corner extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "corner", true);
+ this.id = attributes.id || "";
+ this.inverted = (0, _utils.getInteger)({
+ data: attributes.inverted,
+ defaultValue: 0,
+ validate: x => x === 1
+ });
+ this.join = (0, _utils.getStringOption)(attributes.join, ["square", "round"]);
+ this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]);
+ this.radius = (0, _utils.getMeasurement)(attributes.radius);
+ this.stroke = (0, _utils.getStringOption)(attributes.stroke, ["solid", "dashDot", "dashDotDot", "dashed", "dotted", "embossed", "etched", "lowered", "raised"]);
+ this.thickness = (0, _utils.getMeasurement)(attributes.thickness, "0.5pt");
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.color = null;
+ this.extras = null;
+ }
+
+ [_xfa_object.$toStyle]() {
+ const style = (0, _html_utils.toStyle)(this, "visibility");
+ style.radius = (0, _html_utils.measureToString)(this.join === "square" ? 0 : this.radius);
+ return style;
+ }
+
+}
+
+class DateElement extends _xfa_object.ContentObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "date");
+ this.id = attributes.id || "";
+ this.name = attributes.name || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+ [_xfa_object.$finalize]() {
+ const date = this[_xfa_object.$content].trim();
+
+ this[_xfa_object.$content] = date ? new Date(date) : null;
+ }
+
+ [_xfa_object.$toHTML](availableSpace) {
+ return valueToHtml(this[_xfa_object.$content] ? this[_xfa_object.$content].toString() : "");
+ }
+
+}
+
+class DateTime extends _xfa_object.ContentObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "dateTime");
+ this.id = attributes.id || "";
+ this.name = attributes.name || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+ [_xfa_object.$finalize]() {
+ const date = this[_xfa_object.$content].trim();
+
+ this[_xfa_object.$content] = date ? new Date(date) : null;
+ }
+
+ [_xfa_object.$toHTML](availableSpace) {
+ return valueToHtml(this[_xfa_object.$content] ? this[_xfa_object.$content].toString() : "");
+ }
+
+}
+
+class DateTimeEdit extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "dateTimeEdit", true);
+ this.hScrollPolicy = (0, _utils.getStringOption)(attributes.hScrollPolicy, ["auto", "off", "on"]);
+ this.id = attributes.id || "";
+ this.picker = (0, _utils.getStringOption)(attributes.picker, ["host", "none"]);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.border = null;
+ this.comb = null;
+ this.extras = null;
+ this.margin = null;
+ }
+
+ [_xfa_object.$toHTML](availableSpace) {
+ const style = (0, _html_utils.toStyle)(this, "border", "font", "margin");
+
+ const field = this[_xfa_object.$getParent]()[_xfa_object.$getParent]();
+
+ const html = {
+ name: "input",
+ attributes: {
+ type: "text",
+ fieldId: field[_xfa_object.$uid],
+ dataId: field[_xfa_object.$data] && field[_xfa_object.$data][_xfa_object.$uid] || field[_xfa_object.$uid],
+ class: ["xfaTextfield"],
+ style
+ }
+ };
+ return _utils.HTMLResult.success({
+ name: "label",
+ attributes: {
+ class: ["xfaLabel"]
+ },
+ children: [html]
+ });
+ }
+
+}
+
+class Decimal extends _xfa_object.ContentObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "decimal");
+ this.fracDigits = (0, _utils.getInteger)({
+ data: attributes.fracDigits,
+ defaultValue: 2,
+ validate: x => true
+ });
+ this.id = attributes.id || "";
+ this.leadDigits = (0, _utils.getInteger)({
+ data: attributes.leadDigits,
+ defaultValue: -1,
+ validate: x => true
+ });
+ this.name = attributes.name || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+ [_xfa_object.$finalize]() {
+ const number = parseFloat(this[_xfa_object.$content].trim());
+ this[_xfa_object.$content] = isNaN(number) ? null : number;
+ }
+
+ [_xfa_object.$toHTML](availableSpace) {
+ return valueToHtml(this[_xfa_object.$content] !== null ? this[_xfa_object.$content].toString() : "");
+ }
+
+}
+
+class DefaultUi extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "defaultUi", true);
+ this.id = attributes.id || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.extras = null;
+ }
+
+}
+
+class Desc extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "desc", true);
+ this.id = attributes.id || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.boolean = new _xfa_object.XFAObjectArray();
+ this.date = new _xfa_object.XFAObjectArray();
+ this.dateTime = new _xfa_object.XFAObjectArray();
+ this.decimal = new _xfa_object.XFAObjectArray();
+ this.exData = new _xfa_object.XFAObjectArray();
+ this.float = new _xfa_object.XFAObjectArray();
+ this.image = new _xfa_object.XFAObjectArray();
+ this.integer = new _xfa_object.XFAObjectArray();
+ this.text = new _xfa_object.XFAObjectArray();
+ this.time = new _xfa_object.XFAObjectArray();
+ }
+
+}
+
+class DigestMethod extends _xfa_object.OptionObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "digestMethod", ["", "SHA1", "SHA256", "SHA512", "RIPEMD160"]);
+ this.id = attributes.id || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+}
+
+class DigestMethods extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "digestMethods", true);
+ this.id = attributes.id || "";
+ this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.digestMethod = new _xfa_object.XFAObjectArray();
+ }
+
+}
+
+class Draw extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "draw", true);
+ this.anchorType = (0, _utils.getStringOption)(attributes.anchorType, ["topLeft", "bottomCenter", "bottomLeft", "bottomRight", "middleCenter", "middleLeft", "middleRight", "topCenter", "topRight"]);
+ this.colSpan = (0, _utils.getInteger)({
+ data: attributes.colSpan,
+ defaultValue: 1,
+ validate: n => n >= 1 || n === -1
+ });
+ this.h = attributes.h ? (0, _utils.getMeasurement)(attributes.h) : "";
+ this.hAlign = (0, _utils.getStringOption)(attributes.hAlign, ["left", "center", "justify", "justifyAll", "radix", "right"]);
+ this.id = attributes.id || "";
+ this.locale = attributes.locale || "";
+ this.maxH = (0, _utils.getMeasurement)(attributes.maxH, "0pt");
+ this.maxW = (0, _utils.getMeasurement)(attributes.maxW, "0pt");
+ this.minH = (0, _utils.getMeasurement)(attributes.minH, "0pt");
+ this.minW = (0, _utils.getMeasurement)(attributes.minW, "0pt");
+ this.name = attributes.name || "";
+ this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]);
+ this.relevant = (0, _utils.getRelevant)(attributes.relevant);
+ this.rotate = (0, _utils.getInteger)({
+ data: attributes.rotate,
+ defaultValue: 0,
+ validate: x => x % 90 === 0
+ });
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.w = attributes.w ? (0, _utils.getMeasurement)(attributes.w) : "";
+ this.x = (0, _utils.getMeasurement)(attributes.x, "0pt");
+ this.y = (0, _utils.getMeasurement)(attributes.y, "0pt");
+ this.assist = null;
+ this.border = null;
+ this.caption = null;
+ this.desc = null;
+ this.extras = null;
+ this.font = null;
+ this.keep = null;
+ this.margin = null;
+ this.para = null;
+ this.traversal = null;
+ this.ui = null;
+ this.value = null;
+ this.setProperty = new _xfa_object.XFAObjectArray();
+ }
+
+ [_xfa_object.$setValue](value) {
+ _setValue(this, value);
+ }
+
+ [_xfa_object.$toHTML](availableSpace) {
+ if (this.presence === "hidden" || this.presence === "inactive") {
+ return _utils.HTMLResult.EMPTY;
+ }
+
+ (0, _html_utils.fixDimensions)(this);
+ const savedW = this.w;
+ const savedH = this.h;
+ const {
+ w,
+ h,
+ isBroken
+ } = (0, _html_utils.layoutNode)(this, availableSpace);
+
+ if (w && this.w === "") {
+ if (isBroken && this[_xfa_object.$getSubformParent]()[_xfa_object.$isThereMoreWidth]()) {
+ return _utils.HTMLResult.FAILURE;
+ }
+
+ this.w = w;
+ }
+
+ if (h && this.h === "") {
+ this.h = h;
+ }
+
+ setFirstUnsplittable(this);
+
+ if (!(0, _layout.checkDimensions)(this, availableSpace)) {
+ this.w = savedW;
+ this.h = savedH;
+ return _utils.HTMLResult.FAILURE;
+ }
+
+ unsetFirstUnsplittable(this);
+ const style = (0, _html_utils.toStyle)(this, "font", "hAlign", "dimensions", "position", "presence", "rotate", "anchorType", "border", "margin");
+ (0, _html_utils.setMinMaxDimensions)(this, style);
+
+ if (style.margin) {
+ style.padding = style.margin;
+ delete style.margin;
+ }
+
+ const classNames = ["xfaDraw"];
+
+ if (this.font) {
+ classNames.push("xfaFont");
+ }
+
+ if ((0, _html_utils.isPrintOnly)(this)) {
+ classNames.push("xfaPrintOnly");
+ }
+
+ const attributes = {
+ style,
+ id: this[_xfa_object.$uid],
+ class: classNames
+ };
+
+ if (this.name) {
+ attributes.xfaName = this.name;
+ }
+
+ const html = {
+ name: "div",
+ attributes,
+ children: []
+ };
+ const assist = this.assist ? this.assist[_xfa_object.$toHTML]() : null;
+
+ if (assist) {
+ html.attributes.title = assist;
+ }
+
+ const bbox = (0, _html_utils.computeBbox)(this, html, availableSpace);
+ const value = this.value ? this.value[_xfa_object.$toHTML](availableSpace).html : null;
+
+ if (value === null) {
+ this.w = savedW;
+ this.h = savedH;
+ return _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox);
+ }
+
+ html.children.push(value);
+ (0, _html_utils.setPara)(this, style, value);
+ this.w = savedW;
+ this.h = savedH;
+ return _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox);
+ }
+
+}
+
+class Edge extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "edge", true);
+ this.cap = (0, _utils.getStringOption)(attributes.cap, ["square", "butt", "round"]);
+ this.id = attributes.id || "";
+ this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]);
+ this.stroke = (0, _utils.getStringOption)(attributes.stroke, ["solid", "dashDot", "dashDotDot", "dashed", "dotted", "embossed", "etched", "lowered", "raised"]);
+ this.thickness = (0, _utils.getMeasurement)(attributes.thickness, "0.5pt");
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.color = null;
+ this.extras = null;
+ }
+
+ [_xfa_object.$toStyle]() {
+ const style = (0, _html_utils.toStyle)(this, "visibility");
+ Object.assign(style, {
+ linecap: this.cap,
+ width: (0, _html_utils.measureToString)(this.thickness),
+ color: this.color ? this.color[_xfa_object.$toStyle]() : "#000000",
+ style: ""
+ });
+
+ if (this.presence !== "visible") {
+ style.style = "none";
+ } else {
+ switch (this.stroke) {
+ case "solid":
+ style.style = "solid";
+ break;
+
+ case "dashDot":
+ style.style = "dashed";
+ break;
+
+ case "dashDotDot":
+ style.style = "dashed";
+ break;
+
+ case "dashed":
+ style.style = "dashed";
+ break;
+
+ case "dotted":
+ style.style = "dotted";
+ break;
+
+ case "embossed":
+ style.style = "ridge";
+ break;
+
+ case "etched":
+ style.style = "groove";
+ break;
+
+ case "lowered":
+ style.style = "inset";
+ break;
+
+ case "raised":
+ style.style = "outset";
+ break;
+ }
+ }
+
+ return style;
+ }
+
+}
+
+class Encoding extends _xfa_object.OptionObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "encoding", ["adbe.x509.rsa_sha1", "adbe.pkcs7.detached", "adbe.pkcs7.sha1"]);
+ this.id = attributes.id || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+}
+
+class Encodings extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "encodings", true);
+ this.id = attributes.id || "";
+ this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.encoding = new _xfa_object.XFAObjectArray();
+ }
+
+}
+
+class Encrypt extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "encrypt", true);
+ this.id = attributes.id || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.certificate = null;
+ }
+
+}
+
+class EncryptData extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "encryptData", true);
+ this.id = attributes.id || "";
+ this.operation = (0, _utils.getStringOption)(attributes.operation, ["encrypt", "decrypt"]);
+ this.target = attributes.target || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.filter = null;
+ this.manifest = null;
+ }
+
+}
+
+class Encryption extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "encryption", true);
+ this.id = attributes.id || "";
+ this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.certificate = new _xfa_object.XFAObjectArray();
+ }
+
+}
+
+class EncryptionMethod extends _xfa_object.OptionObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "encryptionMethod", ["", "AES256-CBC", "TRIPLEDES-CBC", "AES128-CBC", "AES192-CBC"]);
+ this.id = attributes.id || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+}
+
+class EncryptionMethods extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "encryptionMethods", true);
+ this.id = attributes.id || "";
+ this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.encryptionMethod = new _xfa_object.XFAObjectArray();
+ }
+
+}
+
+class Event extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "event", true);
+ this.activity = (0, _utils.getStringOption)(attributes.activity, ["click", "change", "docClose", "docReady", "enter", "exit", "full", "indexChange", "initialize", "mouseDown", "mouseEnter", "mouseExit", "mouseUp", "postExecute", "postOpen", "postPrint", "postSave", "postSign", "postSubmit", "preExecute", "preOpen", "prePrint", "preSave", "preSign", "preSubmit", "ready", "validationState"]);
+ this.id = attributes.id || "";
+ this.listen = (0, _utils.getStringOption)(attributes.listen, ["refOnly", "refAndDescendents"]);
+ this.name = attributes.name || "";
+ this.ref = attributes.ref || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.extras = null;
+ this.encryptData = null;
+ this.execute = null;
+ this.script = null;
+ this.signData = null;
+ this.submit = null;
+ }
+
+}
+
+class ExData extends _xfa_object.ContentObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "exData");
+ this.contentType = attributes.contentType || "";
+ this.href = attributes.href || "";
+ this.id = attributes.id || "";
+ this.maxLength = (0, _utils.getInteger)({
+ data: attributes.maxLength,
+ defaultValue: -1,
+ validate: x => x >= -1
+ });
+ this.name = attributes.name || "";
+ this.rid = attributes.rid || "";
+ this.transferEncoding = (0, _utils.getStringOption)(attributes.transferEncoding, ["none", "base64", "package"]);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+ [_xfa_object.$isCDATAXml]() {
+ return this.contentType === "text/html";
+ }
+
+ [_xfa_object.$onChild](child) {
+ if (this.contentType === "text/html" && child[_xfa_object.$namespaceId] === _namespaces.NamespaceIds.xhtml.id) {
+ this[_xfa_object.$content] = child;
+ return true;
+ }
+
+ if (this.contentType === "text/xml") {
+ this[_xfa_object.$content] = child;
+ return true;
+ }
+
+ return false;
+ }
+
+ [_xfa_object.$toHTML](availableSpace) {
+ if (this.contentType !== "text/html" || !this[_xfa_object.$content]) {
+ return _utils.HTMLResult.EMPTY;
+ }
+
+ return this[_xfa_object.$content][_xfa_object.$toHTML](availableSpace);
+ }
+
+}
+
+class ExObject extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "exObject", true);
+ this.archive = attributes.archive || "";
+ this.classId = attributes.classId || "";
+ this.codeBase = attributes.codeBase || "";
+ this.codeType = attributes.codeType || "";
+ this.id = attributes.id || "";
+ this.name = attributes.name || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.extras = null;
+ this.boolean = new _xfa_object.XFAObjectArray();
+ this.date = new _xfa_object.XFAObjectArray();
+ this.dateTime = new _xfa_object.XFAObjectArray();
+ this.decimal = new _xfa_object.XFAObjectArray();
+ this.exData = new _xfa_object.XFAObjectArray();
+ this.exObject = new _xfa_object.XFAObjectArray();
+ this.float = new _xfa_object.XFAObjectArray();
+ this.image = new _xfa_object.XFAObjectArray();
+ this.integer = new _xfa_object.XFAObjectArray();
+ this.text = new _xfa_object.XFAObjectArray();
+ this.time = new _xfa_object.XFAObjectArray();
+ }
+
+}
+
+class ExclGroup extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "exclGroup", true);
+ this.access = (0, _utils.getStringOption)(attributes.access, ["open", "nonInteractive", "protected", "readOnly"]);
+ this.accessKey = attributes.accessKey || "";
+ this.anchorType = (0, _utils.getStringOption)(attributes.anchorType, ["topLeft", "bottomCenter", "bottomLeft", "bottomRight", "middleCenter", "middleLeft", "middleRight", "topCenter", "topRight"]);
+ this.colSpan = (0, _utils.getInteger)({
+ data: attributes.colSpan,
+ defaultValue: 1,
+ validate: n => n >= 1 || n === -1
+ });
+ this.h = attributes.h ? (0, _utils.getMeasurement)(attributes.h) : "";
+ this.hAlign = (0, _utils.getStringOption)(attributes.hAlign, ["left", "center", "justify", "justifyAll", "radix", "right"]);
+ this.id = attributes.id || "";
+ this.layout = (0, _utils.getStringOption)(attributes.layout, ["position", "lr-tb", "rl-row", "rl-tb", "row", "table", "tb"]);
+ this.maxH = (0, _utils.getMeasurement)(attributes.maxH, "0pt");
+ this.maxW = (0, _utils.getMeasurement)(attributes.maxW, "0pt");
+ this.minH = (0, _utils.getMeasurement)(attributes.minH, "0pt");
+ this.minW = (0, _utils.getMeasurement)(attributes.minW, "0pt");
+ this.name = attributes.name || "";
+ this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]);
+ this.relevant = (0, _utils.getRelevant)(attributes.relevant);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.w = attributes.w ? (0, _utils.getMeasurement)(attributes.w) : "";
+ this.x = (0, _utils.getMeasurement)(attributes.x, "0pt");
+ this.y = (0, _utils.getMeasurement)(attributes.y, "0pt");
+ this.assist = null;
+ this.bind = null;
+ this.border = null;
+ this.calculate = null;
+ this.caption = null;
+ this.desc = null;
+ this.extras = null;
+ this.margin = null;
+ this.para = null;
+ this.traversal = null;
+ this.validate = null;
+ this.connect = new _xfa_object.XFAObjectArray();
+ this.event = new _xfa_object.XFAObjectArray();
+ this.field = new _xfa_object.XFAObjectArray();
+ this.setProperty = new _xfa_object.XFAObjectArray();
+ }
+
+ [_xfa_object.$isBindable]() {
+ return true;
+ }
+
+ [_xfa_object.$hasSettableValue]() {
+ return true;
+ }
+
+ [_xfa_object.$setValue](value) {
+ for (const field of this.field.children) {
+ if (!field.value) {
+ const nodeValue = new Value({});
+
+ field[_xfa_object.$appendChild](nodeValue);
+
+ field.value = nodeValue;
+ }
+
+ field.value[_xfa_object.$setValue](value);
+ }
+ }
+
+ [_xfa_object.$isThereMoreWidth]() {
+ return this.layout.endsWith("-tb") && this[_xfa_object.$extra].attempt === 0 && this[_xfa_object.$extra].numberInLine > 0 || this[_xfa_object.$getParent]()[_xfa_object.$isThereMoreWidth]();
+ }
+
+ [_xfa_object.$isSplittable]() {
+ const parent = this[_xfa_object.$getSubformParent]();
+
+ if (!parent[_xfa_object.$isSplittable]()) {
+ return false;
+ }
+
+ if (this[_xfa_object.$extra]._isSplittable !== undefined) {
+ return this[_xfa_object.$extra]._isSplittable;
+ }
+
+ if (this.layout === "position" || this.layout.includes("row")) {
+ this[_xfa_object.$extra]._isSplittable = false;
+ return false;
+ }
+
+ if (parent.layout && parent.layout.endsWith("-tb") && parent[_xfa_object.$extra].numberInLine !== 0) {
+ return false;
+ }
+
+ this[_xfa_object.$extra]._isSplittable = true;
+ return true;
+ }
+
+ [_xfa_object.$flushHTML]() {
+ return (0, _layout.flushHTML)(this);
+ }
+
+ [_xfa_object.$addHTML](html, bbox) {
+ (0, _layout.addHTML)(this, html, bbox);
+ }
+
+ [_xfa_object.$getAvailableSpace]() {
+ return (0, _layout.getAvailableSpace)(this);
+ }
+
+ [_xfa_object.$toHTML](availableSpace) {
+ if (this.presence === "hidden" || this.presence === "inactive" || this.h === 0 || this.w === 0) {
+ return _utils.HTMLResult.EMPTY;
+ }
+
+ (0, _html_utils.fixDimensions)(this);
+ const children = [];
+ const attributes = {
+ id: this[_xfa_object.$uid],
+ class: []
+ };
+ (0, _html_utils.setAccess)(this, attributes.class);
+
+ if (!this[_xfa_object.$extra]) {
+ this[_xfa_object.$extra] = Object.create(null);
+ }
+
+ Object.assign(this[_xfa_object.$extra], {
+ children,
+ attributes,
+ attempt: 0,
+ line: null,
+ numberInLine: 0,
+ availableSpace: {
+ width: Math.min(this.w || Infinity, availableSpace.width),
+ height: Math.min(this.h || Infinity, availableSpace.height)
+ },
+ width: 0,
+ height: 0,
+ prevHeight: 0,
+ currentWidth: 0
+ });
+
+ const isSplittable = this[_xfa_object.$isSplittable]();
+
+ if (!isSplittable) {
+ setFirstUnsplittable(this);
+ }
+
+ if (!(0, _layout.checkDimensions)(this, availableSpace)) {
+ return _utils.HTMLResult.FAILURE;
+ }
+
+ availableSpace = {
+ width: this.w === "" ? availableSpace.width : this.w,
+ height: this.h === "" ? availableSpace.height : this.h
+ };
+ const filter = new Set(["field"]);
+
+ if (this.layout.includes("row")) {
+ const columnWidths = this[_xfa_object.$getSubformParent]().columnWidths;
+
+ if (Array.isArray(columnWidths) && columnWidths.length > 0) {
+ this[_xfa_object.$extra].columnWidths = columnWidths;
+ this[_xfa_object.$extra].currentColumn = 0;
+ }
+ }
+
+ const style = (0, _html_utils.toStyle)(this, "anchorType", "dimensions", "position", "presence", "border", "margin", "hAlign");
+ const classNames = ["xfaExclgroup"];
+ const cl = (0, _html_utils.layoutClass)(this);
+
+ if (cl) {
+ classNames.push(cl);
+ }
+
+ if ((0, _html_utils.isPrintOnly)(this)) {
+ classNames.push("xfaPrintOnly");
+ }
+
+ attributes.style = style;
+ attributes.class = classNames;
+
+ if (this.name) {
+ attributes.xfaName = this.name;
+ }
+
+ const isLrTb = this.layout === "lr-tb" || this.layout === "rl-tb";
+ const maxRun = isLrTb ? MAX_ATTEMPTS_FOR_LRTB_LAYOUT : 1;
+
+ for (; this[_xfa_object.$extra].attempt < maxRun; this[_xfa_object.$extra].attempt++) {
+ if (isLrTb && this[_xfa_object.$extra].attempt === MAX_ATTEMPTS_FOR_LRTB_LAYOUT - 1) {
+ this[_xfa_object.$extra].numberInLine = 0;
+ }
+
+ const result = this[_xfa_object.$childrenToHTML]({
+ filter,
+ include: true
+ });
+
+ if (result.success) {
+ break;
+ }
+
+ if (result.isBreak()) {
+ return result;
+ }
+
+ if (isLrTb && this[_xfa_object.$extra].attempt === 0 && this[_xfa_object.$extra].numberInLine === 0 && !this[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].noLayoutFailure) {
+ this[_xfa_object.$extra].attempt = maxRun;
+ break;
+ }
+ }
+
+ if (!isSplittable) {
+ unsetFirstUnsplittable(this);
+ }
+
+ if (this[_xfa_object.$extra].attempt === maxRun) {
+ if (!isSplittable) {
+ delete this[_xfa_object.$extra];
+ }
+
+ return _utils.HTMLResult.FAILURE;
+ }
+
+ let marginH = 0;
+ let marginV = 0;
+
+ if (this.margin) {
+ marginH = this.margin.leftInset + this.margin.rightInset;
+ marginV = this.margin.topInset + this.margin.bottomInset;
+ }
+
+ const width = Math.max(this[_xfa_object.$extra].width + marginH, this.w || 0);
+ const height = Math.max(this[_xfa_object.$extra].height + marginV, this.h || 0);
+ const bbox = [this.x, this.y, width, height];
+
+ if (this.w === "") {
+ style.width = (0, _html_utils.measureToString)(width);
+ }
+
+ if (this.h === "") {
+ style.height = (0, _html_utils.measureToString)(height);
+ }
+
+ const html = {
+ name: "div",
+ attributes,
+ children
+ };
+ const assist = this.assist ? this.assist[_xfa_object.$toHTML]() : null;
+
+ if (assist) {
+ html.attributes.title = assist;
+ }
+
+ delete this[_xfa_object.$extra];
+ return _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox);
+ }
+
+}
+
+class Execute extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "execute");
+ this.connection = attributes.connection || "";
+ this.executeType = (0, _utils.getStringOption)(attributes.executeType, ["import", "remerge"]);
+ this.id = attributes.id || "";
+ this.runAt = (0, _utils.getStringOption)(attributes.runAt, ["client", "both", "server"]);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+}
+
+class Extras extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "extras", true);
+ this.id = attributes.id || "";
+ this.name = attributes.name || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.boolean = new _xfa_object.XFAObjectArray();
+ this.date = new _xfa_object.XFAObjectArray();
+ this.dateTime = new _xfa_object.XFAObjectArray();
+ this.decimal = new _xfa_object.XFAObjectArray();
+ this.exData = new _xfa_object.XFAObjectArray();
+ this.extras = new _xfa_object.XFAObjectArray();
+ this.float = new _xfa_object.XFAObjectArray();
+ this.image = new _xfa_object.XFAObjectArray();
+ this.integer = new _xfa_object.XFAObjectArray();
+ this.text = new _xfa_object.XFAObjectArray();
+ this.time = new _xfa_object.XFAObjectArray();
+ }
+
+}
+
+class Field extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "field", true);
+ this.access = (0, _utils.getStringOption)(attributes.access, ["open", "nonInteractive", "protected", "readOnly"]);
+ this.accessKey = attributes.accessKey || "";
+ this.anchorType = (0, _utils.getStringOption)(attributes.anchorType, ["topLeft", "bottomCenter", "bottomLeft", "bottomRight", "middleCenter", "middleLeft", "middleRight", "topCenter", "topRight"]);
+ this.colSpan = (0, _utils.getInteger)({
+ data: attributes.colSpan,
+ defaultValue: 1,
+ validate: n => n >= 1 || n === -1
+ });
+ this.h = attributes.h ? (0, _utils.getMeasurement)(attributes.h) : "";
+ this.hAlign = (0, _utils.getStringOption)(attributes.hAlign, ["left", "center", "justify", "justifyAll", "radix", "right"]);
+ this.id = attributes.id || "";
+ this.locale = attributes.locale || "";
+ this.maxH = (0, _utils.getMeasurement)(attributes.maxH, "0pt");
+ this.maxW = (0, _utils.getMeasurement)(attributes.maxW, "0pt");
+ this.minH = (0, _utils.getMeasurement)(attributes.minH, "0pt");
+ this.minW = (0, _utils.getMeasurement)(attributes.minW, "0pt");
+ this.name = attributes.name || "";
+ this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]);
+ this.relevant = (0, _utils.getRelevant)(attributes.relevant);
+ this.rotate = (0, _utils.getInteger)({
+ data: attributes.rotate,
+ defaultValue: 0,
+ validate: x => x % 90 === 0
+ });
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.w = attributes.w ? (0, _utils.getMeasurement)(attributes.w) : "";
+ this.x = (0, _utils.getMeasurement)(attributes.x, "0pt");
+ this.y = (0, _utils.getMeasurement)(attributes.y, "0pt");
+ this.assist = null;
+ this.bind = null;
+ this.border = null;
+ this.calculate = null;
+ this.caption = null;
+ this.desc = null;
+ this.extras = null;
+ this.font = null;
+ this.format = null;
+ this.items = new _xfa_object.XFAObjectArray(2);
+ this.keep = null;
+ this.margin = null;
+ this.para = null;
+ this.traversal = null;
+ this.ui = null;
+ this.validate = null;
+ this.value = null;
+ this.bindItems = new _xfa_object.XFAObjectArray();
+ this.connect = new _xfa_object.XFAObjectArray();
+ this.event = new _xfa_object.XFAObjectArray();
+ this.setProperty = new _xfa_object.XFAObjectArray();
+ }
+
+ [_xfa_object.$isBindable]() {
+ return true;
+ }
+
+ [_xfa_object.$setValue](value) {
+ _setValue(this, value);
+ }
+
+ [_xfa_object.$toHTML](availableSpace) {
+ if (!this.ui) {
+ this.ui = new Ui({});
+ this.ui[_xfa_object.$globalData] = this[_xfa_object.$globalData];
+
+ this[_xfa_object.$appendChild](this.ui);
+
+ let node;
+
+ switch (this.items.children.length) {
+ case 0:
+ node = new TextEdit({});
+ this.ui.textEdit = node;
+ break;
+
+ case 1:
+ node = new CheckButton({});
+ this.ui.checkButton = node;
+ break;
+
+ case 2:
+ node = new ChoiceList({});
+ this.ui.choiceList = node;
+ break;
+ }
+
+ this.ui[_xfa_object.$appendChild](node);
+ }
+
+ setTabIndex(this);
+
+ if (!this.ui || this.presence === "hidden" || this.presence === "inactive" || this.h === 0 || this.w === 0) {
+ return _utils.HTMLResult.EMPTY;
+ }
+
+ if (this.caption) {
+ delete this.caption[_xfa_object.$extra];
+ }
+
+ const caption = this.caption ? this.caption[_xfa_object.$toHTML](availableSpace).html : null;
+ const savedW = this.w;
+ const savedH = this.h;
+
+ if (this.w === "" || this.h === "") {
+ let marginH = 0;
+ let marginV = 0;
+
+ if (this.margin) {
+ marginH = this.margin.leftInset + this.margin.rightInset;
+ marginV = this.margin.topInset + this.margin.bottomInset;
+ }
+
+ let width = null;
+ let height = null;
+
+ if (this.caption) {
+ const {
+ w,
+ h,
+ isBroken
+ } = this.caption[_xfa_object.$getExtra](availableSpace);
+
+ if (isBroken && this[_xfa_object.$getSubformParent]()[_xfa_object.$isThereMoreWidth]()) {
+ return _utils.HTMLResult.FAILURE;
+ }
+
+ width = w;
+ height = h;
+
+ if (this.ui.checkButton) {
+ switch (this.caption.placement) {
+ case "left":
+ case "right":
+ case "inline":
+ width += this.ui.checkButton.size;
+ break;
+
+ case "top":
+ case "bottom":
+ height += this.ui.checkButton.size;
+ break;
+ }
+ }
+ }
+
+ if (width && this.w === "") {
+ this.w = Math.min(this.maxW <= 0 ? Infinity : this.maxW, Math.max(this.minW, width + marginH));
+ }
+
+ if (height && this.h === "") {
+ this.h = Math.min(this.maxH <= 0 ? Infinity : this.maxH, Math.max(this.minH, height + marginV));
+ }
+ }
+
+ (0, _html_utils.fixDimensions)(this);
+ setFirstUnsplittable(this);
+
+ if (!(0, _layout.checkDimensions)(this, availableSpace)) {
+ this.w = savedW;
+ this.h = savedH;
+ return _utils.HTMLResult.FAILURE;
+ }
+
+ unsetFirstUnsplittable(this);
+ const style = (0, _html_utils.toStyle)(this, "font", "dimensions", "position", "rotate", "anchorType", "presence", "margin", "hAlign");
+ (0, _html_utils.setMinMaxDimensions)(this, style);
+ const classNames = ["xfaField"];
+
+ if (this.font) {
+ classNames.push("xfaFont");
+ }
+
+ if ((0, _html_utils.isPrintOnly)(this)) {
+ classNames.push("xfaPrintOnly");
+ }
+
+ const attributes = {
+ style,
+ id: this[_xfa_object.$uid],
+ class: classNames
+ };
+
+ if (style.margin) {
+ style.padding = style.margin;
+ delete style.margin;
+ }
+
+ (0, _html_utils.setAccess)(this, classNames);
+
+ if (this.name) {
+ attributes.xfaName = this.name;
+ }
+
+ const children = [];
+ const html = {
+ name: "div",
+ attributes,
+ children
+ };
+ const assist = this.assist ? this.assist[_xfa_object.$toHTML]() : null;
+
+ if (assist) {
+ html.attributes.title = assist;
+ }
+
+ const borderStyle = this.border ? this.border[_xfa_object.$toStyle]() : null;
+ const bbox = (0, _html_utils.computeBbox)(this, html, availableSpace);
+
+ const ui = this.ui[_xfa_object.$toHTML]().html;
+
+ if (!ui) {
+ Object.assign(style, borderStyle);
+ return _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox);
+ }
+
+ if (this[_xfa_object.$tabIndex]) {
+ if (ui.children && ui.children[0]) {
+ ui.children[0].attributes.tabindex = this[_xfa_object.$tabIndex];
+ } else {
+ ui.attributes.tabindex = this[_xfa_object.$tabIndex];
+ }
+ }
+
+ if (!ui.attributes.style) {
+ ui.attributes.style = Object.create(null);
+ }
+
+ if (this.ui.button) {
+ Object.assign(ui.attributes.style, borderStyle);
+ } else {
+ Object.assign(style, borderStyle);
+ }
+
+ children.push(ui);
+
+ if (this.value) {
+ if (this.ui.imageEdit) {
+ ui.children.push(this.value[_xfa_object.$toHTML]().html);
+ } else if (!this.ui.button) {
+ let value = "";
+
+ if (this.value.exData) {
+ value = this.value.exData[_xfa_object.$text]();
+ } else {
+ const htmlValue = this.value[_xfa_object.$toHTML]().html;
+
+ if (htmlValue !== null) {
+ value = htmlValue.children[0].value;
+ }
+ }
+
+ if (this.ui.textEdit && this.value.text && this.value.text.maxChars) {
+ ui.children[0].attributes.maxLength = this.value.text.maxChars;
+ }
+
+ if (value) {
+ if (ui.children[0].name === "textarea") {
+ ui.children[0].attributes.textContent = value;
+ } else {
+ ui.children[0].attributes.value = value;
+ }
+ }
+ }
+ }
+
+ if (!caption) {
+ if (ui.attributes.class) {
+ ui.attributes.class.push("xfaLeft");
+ }
+
+ this.w = savedW;
+ this.h = savedH;
+ return _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox);
+ }
+
+ if (this.ui.button) {
+ if (style.padding) {
+ delete style.padding;
+ }
+
+ if (caption.name === "div") {
+ caption.name = "span";
+ }
+
+ ui.children.push(caption);
+ return _utils.HTMLResult.success(html, bbox);
+ } else if (this.ui.checkButton) {
+ caption.attributes.class[0] = "xfaCaptionForCheckButton";
+ }
+
+ if (!ui.attributes.class) {
+ ui.attributes.class = [];
+ }
+
+ switch (this.caption.placement) {
+ case "left":
+ ui.children.splice(0, 0, caption);
+ ui.attributes.class.push("xfaLeft");
+ break;
+
+ case "right":
+ ui.children.push(caption);
+ ui.attributes.class.push("xfaLeft");
+ break;
+
+ case "top":
+ ui.children.splice(0, 0, caption);
+ ui.attributes.class.push("xfaTop");
+ break;
+
+ case "bottom":
+ ui.children.push(caption);
+ ui.attributes.class.push("xfaTop");
+ break;
+
+ case "inline":
+ ui.attributes.class.push("xfaLeft");
+ break;
+ }
+
+ this.w = savedW;
+ this.h = savedH;
+ return _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox);
+ }
+
+}
+
+exports.Field = Field;
+
+class Fill extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "fill", true);
+ this.id = attributes.id || "";
+ this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.color = null;
+ this.extras = null;
+ this.linear = null;
+ this.pattern = null;
+ this.radial = null;
+ this.solid = null;
+ this.stipple = null;
+ }
+
+ [_xfa_object.$toStyle]() {
+ const parent = this[_xfa_object.$getParent]();
+
+ const style = Object.create(null);
+ let propName = "color";
+
+ if (parent instanceof Border) {
+ propName = "background";
+ }
+
+ if (parent instanceof Rectangle || parent instanceof Arc) {
+ propName = "fill";
+ style.fill = "white";
+ }
+
+ for (const name of Object.getOwnPropertyNames(this)) {
+ if (name === "extras" || name === "color") {
+ continue;
+ }
+
+ const obj = this[name];
+
+ if (!(obj instanceof _xfa_object.XFAObject)) {
+ continue;
+ }
+
+ style[propName] = obj[_xfa_object.$toStyle](this.color);
+ return style;
+ }
+
+ if (this.color) {
+ style[propName] = this.color[_xfa_object.$toStyle]();
+ }
+
+ return style;
+ }
+
+}
+
+class Filter extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "filter", true);
+ this.addRevocationInfo = (0, _utils.getStringOption)(attributes.addRevocationInfo, ["", "required", "optional", "none"]);
+ this.id = attributes.id || "";
+ this.name = attributes.name || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.version = (0, _utils.getInteger)({
+ data: this.version,
+ defaultValue: 5,
+ validate: x => x >= 1 && x <= 5
+ });
+ this.appearanceFilter = null;
+ this.certificates = null;
+ this.digestMethods = null;
+ this.encodings = null;
+ this.encryptionMethods = null;
+ this.handler = null;
+ this.lockDocument = null;
+ this.mdp = null;
+ this.reasons = null;
+ this.timeStamp = null;
+ }
+
+}
+
+class Float extends _xfa_object.ContentObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "float");
+ this.id = attributes.id || "";
+ this.name = attributes.name || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+ [_xfa_object.$finalize]() {
+ const number = parseFloat(this[_xfa_object.$content].trim());
+ this[_xfa_object.$content] = isNaN(number) ? null : number;
+ }
+
+ [_xfa_object.$toHTML](availableSpace) {
+ return valueToHtml(this[_xfa_object.$content] !== null ? this[_xfa_object.$content].toString() : "");
+ }
+
+}
+
+class Font extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "font", true);
+ this.baselineShift = (0, _utils.getMeasurement)(attributes.baselineShift);
+ this.fontHorizontalScale = (0, _utils.getFloat)({
+ data: attributes.fontHorizontalScale,
+ defaultValue: 100,
+ validate: x => x >= 0
+ });
+ this.fontVerticalScale = (0, _utils.getFloat)({
+ data: attributes.fontVerticalScale,
+ defaultValue: 100,
+ validate: x => x >= 0
+ });
+ this.id = attributes.id || "";
+ this.kerningMode = (0, _utils.getStringOption)(attributes.kerningMode, ["none", "pair"]);
+ this.letterSpacing = (0, _utils.getMeasurement)(attributes.letterSpacing, "0");
+ this.lineThrough = (0, _utils.getInteger)({
+ data: attributes.lineThrough,
+ defaultValue: 0,
+ validate: x => x === 1 || x === 2
+ });
+ this.lineThroughPeriod = (0, _utils.getStringOption)(attributes.lineThroughPeriod, ["all", "word"]);
+ this.overline = (0, _utils.getInteger)({
+ data: attributes.overline,
+ defaultValue: 0,
+ validate: x => x === 1 || x === 2
+ });
+ this.overlinePeriod = (0, _utils.getStringOption)(attributes.overlinePeriod, ["all", "word"]);
+ this.posture = (0, _utils.getStringOption)(attributes.posture, ["normal", "italic"]);
+ this.size = (0, _utils.getMeasurement)(attributes.size, "10pt");
+ this.typeface = attributes.typeface || "Courier";
+ this.underline = (0, _utils.getInteger)({
+ data: attributes.underline,
+ defaultValue: 0,
+ validate: x => x === 1 || x === 2
+ });
+ this.underlinePeriod = (0, _utils.getStringOption)(attributes.underlinePeriod, ["all", "word"]);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.weight = (0, _utils.getStringOption)(attributes.weight, ["normal", "bold"]);
+ this.extras = null;
+ this.fill = null;
+ }
+
+ [_xfa_object.$clean](builder) {
+ super[_xfa_object.$clean](builder);
+
+ this[_xfa_object.$globalData].usedTypefaces.add(this.typeface);
+ }
+
+ [_xfa_object.$toStyle]() {
+ const style = (0, _html_utils.toStyle)(this, "fill");
+ const color = style.color;
+
+ if (color) {
+ if (color === "#000000") {
+ delete style.color;
+ } else if (!color.startsWith("#")) {
+ style.background = color;
+ style.backgroundClip = "text";
+ style.color = "transparent";
+ }
+ }
+
+ if (this.baselineShift) {
+ style.verticalAlign = (0, _html_utils.measureToString)(this.baselineShift);
+ }
+
+ style.fontKerning = this.kerningMode === "none" ? "none" : "normal";
+ style.letterSpacing = (0, _html_utils.measureToString)(this.letterSpacing);
+
+ if (this.lineThrough !== 0) {
+ style.textDecoration = "line-through";
+
+ if (this.lineThrough === 2) {
+ style.textDecorationStyle = "double";
+ }
+ }
+
+ if (this.overline !== 0) {
+ style.textDecoration = "overline";
+
+ if (this.overline === 2) {
+ style.textDecorationStyle = "double";
+ }
+ }
+
+ style.fontStyle = this.posture;
+ style.fontSize = (0, _html_utils.measureToString)(0.99 * this.size);
+ (0, _html_utils.setFontFamily)(this, this[_xfa_object.$globalData].fontFinder, style);
+
+ if (this.underline !== 0) {
+ style.textDecoration = "underline";
+
+ if (this.underline === 2) {
+ style.textDecorationStyle = "double";
+ }
+ }
+
+ style.fontWeight = this.weight;
+ return style;
+ }
+
+}
+
+class Format extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "format", true);
+ this.id = attributes.id || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.extras = null;
+ this.picture = null;
+ }
+
+}
+
+class Handler extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "handler");
+ this.id = attributes.id || "";
+ this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+}
+
+class Hyphenation extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "hyphenation");
+ this.excludeAllCaps = (0, _utils.getInteger)({
+ data: attributes.excludeAllCaps,
+ defaultValue: 0,
+ validate: x => x === 1
+ });
+ this.excludeInitialCap = (0, _utils.getInteger)({
+ data: attributes.excludeInitialCap,
+ defaultValue: 0,
+ validate: x => x === 1
+ });
+ this.hyphenate = (0, _utils.getInteger)({
+ data: attributes.hyphenate,
+ defaultValue: 0,
+ validate: x => x === 1
+ });
+ this.id = attributes.id || "";
+ this.pushCharacterCount = (0, _utils.getInteger)({
+ data: attributes.pushCharacterCount,
+ defaultValue: 3,
+ validate: x => x >= 0
+ });
+ this.remainCharacterCount = (0, _utils.getInteger)({
+ data: attributes.remainCharacterCount,
+ defaultValue: 3,
+ validate: x => x >= 0
+ });
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.wordCharacterCount = (0, _utils.getInteger)({
+ data: attributes.wordCharacterCount,
+ defaultValue: 7,
+ validate: x => x >= 0
+ });
+ }
+
+}
+
+class Image extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "image");
+ this.aspect = (0, _utils.getStringOption)(attributes.aspect, ["fit", "actual", "height", "none", "width"]);
+ this.contentType = attributes.contentType || "";
+ this.href = attributes.href || "";
+ this.id = attributes.id || "";
+ this.name = attributes.name || "";
+ this.transferEncoding = (0, _utils.getStringOption)(attributes.transferEncoding, ["base64", "none", "package"]);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+ [_xfa_object.$toHTML]() {
+ let buffer = this[_xfa_object.$globalData].images && this[_xfa_object.$globalData].images.get(this.href);
+
+ if (!buffer && (this.href || !this[_xfa_object.$content])) {
+ return _utils.HTMLResult.EMPTY;
+ }
+
+ if (!buffer && this.transferEncoding === "base64") {
+ buffer = (0, _util.stringToBytes)(atob(this[_xfa_object.$content]));
+ }
+
+ if (!buffer) {
+ return _utils.HTMLResult.EMPTY;
+ }
+
+ const blob = new Blob([buffer], {
+ type: this.contentType
+ });
+ let style;
+
+ switch (this.aspect) {
+ case "fit":
+ case "actual":
+ break;
+
+ case "height":
+ style = {
+ height: "100%",
+ objectFit: "fill"
+ };
+ break;
+
+ case "none":
+ style = {
+ width: "100%",
+ height: "100%",
+ objectFit: "fill"
+ };
+ break;
+
+ case "width":
+ style = {
+ width: "100%",
+ objectFit: "fill"
+ };
+ break;
+ }
+
+ return _utils.HTMLResult.success({
+ name: "img",
+ attributes: {
+ class: ["xfaImage"],
+ style,
+ src: URL.createObjectURL(blob)
+ }
+ });
+ }
+
+}
+
+class ImageEdit extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "imageEdit", true);
+ this.data = (0, _utils.getStringOption)(attributes.data, ["link", "embed"]);
+ this.id = attributes.id || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.border = null;
+ this.extras = null;
+ this.margin = null;
+ }
+
+ [_xfa_object.$toHTML](availableSpace) {
+ if (this.data === "embed") {
+ return _utils.HTMLResult.success({
+ name: "div",
+ children: [],
+ attributes: {}
+ });
+ }
+
+ return _utils.HTMLResult.EMPTY;
+ }
+
+}
+
+class Integer extends _xfa_object.ContentObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "integer");
+ this.id = attributes.id || "";
+ this.name = attributes.name || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+ [_xfa_object.$finalize]() {
+ const number = parseInt(this[_xfa_object.$content].trim(), 10);
+ this[_xfa_object.$content] = isNaN(number) ? null : number;
+ }
+
+ [_xfa_object.$toHTML](availableSpace) {
+ return valueToHtml(this[_xfa_object.$content] !== null ? this[_xfa_object.$content].toString() : "");
+ }
+
+}
+
+class Issuers extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "issuers", true);
+ this.id = attributes.id || "";
+ this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.certificate = new _xfa_object.XFAObjectArray();
+ }
+
+}
+
+class Items extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "items", true);
+ this.id = attributes.id || "";
+ this.name = attributes.name || "";
+ this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]);
+ this.ref = attributes.ref || "";
+ this.save = (0, _utils.getInteger)({
+ data: attributes.save,
+ defaultValue: 0,
+ validate: x => x === 1
+ });
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.boolean = new _xfa_object.XFAObjectArray();
+ this.date = new _xfa_object.XFAObjectArray();
+ this.dateTime = new _xfa_object.XFAObjectArray();
+ this.decimal = new _xfa_object.XFAObjectArray();
+ this.exData = new _xfa_object.XFAObjectArray();
+ this.float = new _xfa_object.XFAObjectArray();
+ this.image = new _xfa_object.XFAObjectArray();
+ this.integer = new _xfa_object.XFAObjectArray();
+ this.text = new _xfa_object.XFAObjectArray();
+ this.time = new _xfa_object.XFAObjectArray();
+ }
+
+ [_xfa_object.$toHTML]() {
+ const output = [];
+
+ for (const child of this[_xfa_object.$getChildren]()) {
+ output.push(child[_xfa_object.$text]());
+ }
+
+ return _utils.HTMLResult.success(output);
+ }
+
+}
+
+exports.Items = Items;
+
+class Keep extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "keep", true);
+ this.id = attributes.id || "";
+ const options = ["none", "contentArea", "pageArea"];
+ this.intact = (0, _utils.getStringOption)(attributes.intact, options);
+ this.next = (0, _utils.getStringOption)(attributes.next, options);
+ this.previous = (0, _utils.getStringOption)(attributes.previous, options);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.extras = null;
+ }
+
+}
+
+class KeyUsage extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "keyUsage");
+ const options = ["", "yes", "no"];
+ this.crlSign = (0, _utils.getStringOption)(attributes.crlSign, options);
+ this.dataEncipherment = (0, _utils.getStringOption)(attributes.dataEncipherment, options);
+ this.decipherOnly = (0, _utils.getStringOption)(attributes.decipherOnly, options);
+ this.digitalSignature = (0, _utils.getStringOption)(attributes.digitalSignature, options);
+ this.encipherOnly = (0, _utils.getStringOption)(attributes.encipherOnly, options);
+ this.id = attributes.id || "";
+ this.keyAgreement = (0, _utils.getStringOption)(attributes.keyAgreement, options);
+ this.keyCertSign = (0, _utils.getStringOption)(attributes.keyCertSign, options);
+ this.keyEncipherment = (0, _utils.getStringOption)(attributes.keyEncipherment, options);
+ this.nonRepudiation = (0, _utils.getStringOption)(attributes.nonRepudiation, options);
+ this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+}
+
+class Line extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "line", true);
+ this.hand = (0, _utils.getStringOption)(attributes.hand, ["even", "left", "right"]);
+ this.id = attributes.id || "";
+ this.slope = (0, _utils.getStringOption)(attributes.slope, ["\\", "/"]);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.edge = null;
+ }
+
+ [_xfa_object.$toHTML]() {
+ const parent = this[_xfa_object.$getParent]()[_xfa_object.$getParent]();
+
+ const edge = this.edge ? this.edge : new Edge({});
+
+ const edgeStyle = edge[_xfa_object.$toStyle]();
+
+ const style = Object.create(null);
+ const thickness = edge.presence === "visible" ? edge.thickness : 0;
+ style.strokeWidth = (0, _html_utils.measureToString)(thickness);
+ style.stroke = edgeStyle.color;
+ let x1, y1, x2, y2;
+ let width = "100%";
+ let height = "100%";
+
+ if (parent.w <= thickness) {
+ [x1, y1, x2, y2] = ["50%", 0, "50%", "100%"];
+ width = style.strokeWidth;
+ } else if (parent.h <= thickness) {
+ [x1, y1, x2, y2] = [0, "50%", "100%", "50%"];
+ height = style.strokeWidth;
+ } else {
+ if (this.slope === "\\") {
+ [x1, y1, x2, y2] = [0, 0, "100%", "100%"];
+ } else {
+ [x1, y1, x2, y2] = [0, "100%", "100%", 0];
+ }
+ }
+
+ const line = {
+ name: "line",
+ attributes: {
+ xmlns: SVG_NS,
+ x1,
+ y1,
+ x2,
+ y2,
+ style
+ }
+ };
+ const svg = {
+ name: "svg",
+ children: [line],
+ attributes: {
+ xmlns: SVG_NS,
+ width,
+ height,
+ style: {
+ overflow: "visible"
+ }
+ }
+ };
+
+ if (hasMargin(parent)) {
+ return _utils.HTMLResult.success({
+ name: "div",
+ attributes: {
+ style: {
+ display: "inline",
+ width: "100%",
+ height: "100%"
+ }
+ },
+ children: [svg]
+ });
+ }
+
+ svg.attributes.style.position = "absolute";
+ return _utils.HTMLResult.success(svg);
+ }
+
+}
+
+class Linear extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "linear", true);
+ this.id = attributes.id || "";
+ this.type = (0, _utils.getStringOption)(attributes.type, ["toRight", "toBottom", "toLeft", "toTop"]);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.color = null;
+ this.extras = null;
+ }
+
+ [_xfa_object.$toStyle](startColor) {
+ startColor = startColor ? startColor[_xfa_object.$toStyle]() : "#FFFFFF";
+ const transf = this.type.replace(/([RBLT])/, " $1").toLowerCase();
+ const endColor = this.color ? this.color[_xfa_object.$toStyle]() : "#000000";
+ return `linear-gradient(${transf}, ${startColor}, ${endColor})`;
+ }
+
+}
+
+class LockDocument extends _xfa_object.ContentObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "lockDocument");
+ this.id = attributes.id || "";
+ this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+ [_xfa_object.$finalize]() {
+ this[_xfa_object.$content] = (0, _utils.getStringOption)(this[_xfa_object.$content], ["auto", "0", "1"]);
+ }
+
+}
+
+class Manifest extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "manifest", true);
+ this.action = (0, _utils.getStringOption)(attributes.action, ["include", "all", "exclude"]);
+ this.id = attributes.id || "";
+ this.name = attributes.name || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.extras = null;
+ this.ref = new _xfa_object.XFAObjectArray();
+ }
+
+}
+
+class Margin extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "margin", true);
+ this.bottomInset = (0, _utils.getMeasurement)(attributes.bottomInset, "0");
+ this.id = attributes.id || "";
+ this.leftInset = (0, _utils.getMeasurement)(attributes.leftInset, "0");
+ this.rightInset = (0, _utils.getMeasurement)(attributes.rightInset, "0");
+ this.topInset = (0, _utils.getMeasurement)(attributes.topInset, "0");
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.extras = null;
+ }
+
+ [_xfa_object.$toStyle]() {
+ return {
+ margin: (0, _html_utils.measureToString)(this.topInset) + " " + (0, _html_utils.measureToString)(this.rightInset) + " " + (0, _html_utils.measureToString)(this.bottomInset) + " " + (0, _html_utils.measureToString)(this.leftInset)
+ };
+ }
+
+}
+
+class Mdp extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "mdp");
+ this.id = attributes.id || "";
+ this.permissions = (0, _utils.getInteger)({
+ data: attributes.permissions,
+ defaultValue: 2,
+ validate: x => x === 1 || x === 3
+ });
+ this.signatureType = (0, _utils.getStringOption)(attributes.signatureType, ["filler", "author"]);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+}
+
+class Medium extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "medium");
+ this.id = attributes.id || "";
+ this.imagingBBox = (0, _utils.getBBox)(attributes.imagingBBox);
+ this.long = (0, _utils.getMeasurement)(attributes.long);
+ this.orientation = (0, _utils.getStringOption)(attributes.orientation, ["portrait", "landscape"]);
+ this.short = (0, _utils.getMeasurement)(attributes.short);
+ this.stock = attributes.stock || "";
+ this.trayIn = (0, _utils.getStringOption)(attributes.trayIn, ["auto", "delegate", "pageFront"]);
+ this.trayOut = (0, _utils.getStringOption)(attributes.trayOut, ["auto", "delegate"]);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+}
+
+class Message extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "message", true);
+ this.id = attributes.id || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.text = new _xfa_object.XFAObjectArray();
+ }
+
+}
+
+class NumericEdit extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "numericEdit", true);
+ this.hScrollPolicy = (0, _utils.getStringOption)(attributes.hScrollPolicy, ["auto", "off", "on"]);
+ this.id = attributes.id || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.border = null;
+ this.comb = null;
+ this.extras = null;
+ this.margin = null;
+ }
+
+ [_xfa_object.$toHTML](availableSpace) {
+ const style = (0, _html_utils.toStyle)(this, "border", "font", "margin");
+
+ const field = this[_xfa_object.$getParent]()[_xfa_object.$getParent]();
+
+ const html = {
+ name: "input",
+ attributes: {
+ type: "text",
+ fieldId: field[_xfa_object.$uid],
+ dataId: field[_xfa_object.$data] && field[_xfa_object.$data][_xfa_object.$uid] || field[_xfa_object.$uid],
+ class: ["xfaTextfield"],
+ style
+ }
+ };
+ return _utils.HTMLResult.success({
+ name: "label",
+ attributes: {
+ class: ["xfaLabel"]
+ },
+ children: [html]
+ });
+ }
+
+}
+
+class Occur extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "occur", true);
+ this.id = attributes.id || "";
+ this.initial = (0, _utils.getInteger)({
+ data: attributes.initial,
+ defaultValue: 1,
+ validate: x => true
+ });
+ this.max = (0, _utils.getInteger)({
+ data: attributes.max,
+ defaultValue: 1,
+ validate: x => true
+ });
+ this.min = (0, _utils.getInteger)({
+ data: attributes.min,
+ defaultValue: 1,
+ validate: x => true
+ });
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.extras = null;
+ }
+
+}
+
+class Oid extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "oid");
+ this.id = attributes.id || "";
+ this.name = attributes.name || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+}
+
+class Oids extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "oids", true);
+ this.id = attributes.id || "";
+ this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.oid = new _xfa_object.XFAObjectArray();
+ }
+
+}
+
+class Overflow extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "overflow");
+ this.id = attributes.id || "";
+ this.leader = attributes.leader || "";
+ this.target = attributes.target || "";
+ this.trailer = attributes.trailer || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+ [_xfa_object.$getExtra]() {
+ if (!this[_xfa_object.$extra]) {
+ const parent = this[_xfa_object.$getParent]();
+
+ const root = this[_xfa_object.$getTemplateRoot]();
+
+ const target = root[_xfa_object.$searchNode](this.target, parent);
+
+ const leader = root[_xfa_object.$searchNode](this.leader, parent);
+
+ const trailer = root[_xfa_object.$searchNode](this.trailer, parent);
+
+ this[_xfa_object.$extra] = {
+ target: target && target[0] || null,
+ leader: leader && leader[0] || null,
+ trailer: trailer && trailer[0] || null,
+ addLeader: false,
+ addTrailer: false
+ };
+ }
+
+ return this[_xfa_object.$extra];
+ }
+
+}
+
+class PageArea extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "pageArea", true);
+ this.blankOrNotBlank = (0, _utils.getStringOption)(attributes.blankOrNotBlank, ["any", "blank", "notBlank"]);
+ this.id = attributes.id || "";
+ this.initialNumber = (0, _utils.getInteger)({
+ data: attributes.initialNumber,
+ defaultValue: 1,
+ validate: x => true
+ });
+ this.name = attributes.name || "";
+ this.numbered = (0, _utils.getInteger)({
+ data: attributes.numbered,
+ defaultValue: 1,
+ validate: x => true
+ });
+ this.oddOrEven = (0, _utils.getStringOption)(attributes.oddOrEven, ["any", "even", "odd"]);
+ this.pagePosition = (0, _utils.getStringOption)(attributes.pagePosition, ["any", "first", "last", "only", "rest"]);
+ this.relevant = (0, _utils.getRelevant)(attributes.relevant);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.desc = null;
+ this.extras = null;
+ this.medium = null;
+ this.occur = null;
+ this.area = new _xfa_object.XFAObjectArray();
+ this.contentArea = new _xfa_object.XFAObjectArray();
+ this.draw = new _xfa_object.XFAObjectArray();
+ this.exclGroup = new _xfa_object.XFAObjectArray();
+ this.field = new _xfa_object.XFAObjectArray();
+ this.subform = new _xfa_object.XFAObjectArray();
+ }
+
+ [_xfa_object.$isUsable]() {
+ if (!this[_xfa_object.$extra]) {
+ this[_xfa_object.$extra] = {
+ numberOfUse: 0
+ };
+ return true;
+ }
+
+ return !this.occur || this.occur.max === -1 || this[_xfa_object.$extra].numberOfUse < this.occur.max;
+ }
+
+ [_xfa_object.$cleanPage]() {
+ delete this[_xfa_object.$extra];
+ }
+
+ [_xfa_object.$getNextPage]() {
+ if (!this[_xfa_object.$extra]) {
+ this[_xfa_object.$extra] = {
+ numberOfUse: 0
+ };
+ }
+
+ const parent = this[_xfa_object.$getParent]();
+
+ if (parent.relation === "orderedOccurrence") {
+ if (this[_xfa_object.$isUsable]()) {
+ this[_xfa_object.$extra].numberOfUse += 1;
+ return this;
+ }
+ }
+
+ return parent[_xfa_object.$getNextPage]();
+ }
+
+ [_xfa_object.$getAvailableSpace]() {
+ return this[_xfa_object.$extra].space || {
+ width: 0,
+ height: 0
+ };
+ }
+
+ [_xfa_object.$toHTML]() {
+ if (!this[_xfa_object.$extra]) {
+ this[_xfa_object.$extra] = {
+ numberOfUse: 1
+ };
+ }
+
+ const children = [];
+ this[_xfa_object.$extra].children = children;
+ const style = Object.create(null);
+
+ if (this.medium && this.medium.short && this.medium.long) {
+ style.width = (0, _html_utils.measureToString)(this.medium.short);
+ style.height = (0, _html_utils.measureToString)(this.medium.long);
+ this[_xfa_object.$extra].space = {
+ width: this.medium.short,
+ height: this.medium.long
+ };
+
+ if (this.medium.orientation === "landscape") {
+ const x = style.width;
+ style.width = style.height;
+ style.height = x;
+ this[_xfa_object.$extra].space = {
+ width: this.medium.long,
+ height: this.medium.short
+ };
+ }
+ } else {
+ (0, _util.warn)("XFA - No medium specified in pageArea: please file a bug.");
+ }
+
+ this[_xfa_object.$childrenToHTML]({
+ filter: new Set(["area", "draw", "field", "subform"]),
+ include: true
+ });
+
+ this[_xfa_object.$childrenToHTML]({
+ filter: new Set(["contentArea"]),
+ include: true
+ });
+
+ return _utils.HTMLResult.success({
+ name: "div",
+ children,
+ attributes: {
+ class: ["xfaPage"],
+ id: this[_xfa_object.$uid],
+ style,
+ xfaName: this.name
+ }
+ });
+ }
+
+}
+
+class PageSet extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "pageSet", true);
+ this.duplexImposition = (0, _utils.getStringOption)(attributes.duplexImposition, ["longEdge", "shortEdge"]);
+ this.id = attributes.id || "";
+ this.name = attributes.name || "";
+ this.relation = (0, _utils.getStringOption)(attributes.relation, ["orderedOccurrence", "duplexPaginated", "simplexPaginated"]);
+ this.relevant = (0, _utils.getRelevant)(attributes.relevant);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.extras = null;
+ this.occur = null;
+ this.pageArea = new _xfa_object.XFAObjectArray();
+ this.pageSet = new _xfa_object.XFAObjectArray();
+ }
+
+ [_xfa_object.$cleanPage]() {
+ for (const page of this.pageArea.children) {
+ page[_xfa_object.$cleanPage]();
+ }
+
+ for (const page of this.pageSet.children) {
+ page[_xfa_object.$cleanPage]();
+ }
+ }
+
+ [_xfa_object.$isUsable]() {
+ return !this.occur || this.occur.max === -1 || this[_xfa_object.$extra].numberOfUse < this.occur.max;
+ }
+
+ [_xfa_object.$getNextPage]() {
+ if (!this[_xfa_object.$extra]) {
+ this[_xfa_object.$extra] = {
+ numberOfUse: 1,
+ pageIndex: -1,
+ pageSetIndex: -1
+ };
+ }
+
+ if (this.relation === "orderedOccurrence") {
+ if (this[_xfa_object.$extra].pageIndex + 1 < this.pageArea.children.length) {
+ this[_xfa_object.$extra].pageIndex += 1;
+ const pageArea = this.pageArea.children[this[_xfa_object.$extra].pageIndex];
+ return pageArea[_xfa_object.$getNextPage]();
+ }
+
+ if (this[_xfa_object.$extra].pageSetIndex + 1 < this.pageSet.children.length) {
+ this[_xfa_object.$extra].pageSetIndex += 1;
+ return this.pageSet.children[this[_xfa_object.$extra].pageSetIndex][_xfa_object.$getNextPage]();
+ }
+
+ if (this[_xfa_object.$isUsable]()) {
+ this[_xfa_object.$extra].numberOfUse += 1;
+ this[_xfa_object.$extra].pageIndex = -1;
+ this[_xfa_object.$extra].pageSetIndex = -1;
+ return this[_xfa_object.$getNextPage]();
+ }
+
+ const parent = this[_xfa_object.$getParent]();
+
+ if (parent instanceof PageSet) {
+ return parent[_xfa_object.$getNextPage]();
+ }
+
+ this[_xfa_object.$cleanPage]();
+
+ return this[_xfa_object.$getNextPage]();
+ }
+
+ const pageNumber = this[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].pageNumber;
+
+ const parity = pageNumber % 2 === 0 ? "even" : "odd";
+ const position = pageNumber === 0 ? "first" : "rest";
+ let page = this.pageArea.children.find(p => p.oddOrEven === parity && p.pagePosition === position);
+
+ if (page) {
+ return page;
+ }
+
+ page = this.pageArea.children.find(p => p.oddOrEven === "any" && p.pagePosition === position);
+
+ if (page) {
+ return page;
+ }
+
+ page = this.pageArea.children.find(p => p.oddOrEven === "any" && p.pagePosition === "any");
+
+ if (page) {
+ return page;
+ }
+
+ return this.pageArea.children[0];
+ }
+
+}
+
+class Para extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "para", true);
+ this.hAlign = (0, _utils.getStringOption)(attributes.hAlign, ["left", "center", "justify", "justifyAll", "radix", "right"]);
+ this.id = attributes.id || "";
+ this.lineHeight = attributes.lineHeight ? (0, _utils.getMeasurement)(attributes.lineHeight, "0pt") : "";
+ this.marginLeft = attributes.marginLeft ? (0, _utils.getMeasurement)(attributes.marginLeft, "0pt") : "";
+ this.marginRight = attributes.marginRight ? (0, _utils.getMeasurement)(attributes.marginRight, "0pt") : "";
+ this.orphans = (0, _utils.getInteger)({
+ data: attributes.orphans,
+ defaultValue: 0,
+ validate: x => x >= 0
+ });
+ this.preserve = attributes.preserve || "";
+ this.radixOffset = attributes.radixOffset ? (0, _utils.getMeasurement)(attributes.radixOffset, "0pt") : "";
+ this.spaceAbove = attributes.spaceAbove ? (0, _utils.getMeasurement)(attributes.spaceAbove, "0pt") : "";
+ this.spaceBelow = attributes.spaceBelow ? (0, _utils.getMeasurement)(attributes.spaceBelow, "0pt") : "";
+ this.tabDefault = attributes.tabDefault ? (0, _utils.getMeasurement)(this.tabDefault) : "";
+ this.tabStops = (attributes.tabStops || "").trim().split(/\s+/).map((x, i) => i % 2 === 1 ? (0, _utils.getMeasurement)(x) : x);
+ this.textIndent = attributes.textIndent ? (0, _utils.getMeasurement)(attributes.textIndent, "0pt") : "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.vAlign = (0, _utils.getStringOption)(attributes.vAlign, ["top", "bottom", "middle"]);
+ this.widows = (0, _utils.getInteger)({
+ data: attributes.widows,
+ defaultValue: 0,
+ validate: x => x >= 0
+ });
+ this.hyphenation = null;
+ }
+
+ [_xfa_object.$toStyle]() {
+ const style = (0, _html_utils.toStyle)(this, "hAlign");
+
+ if (this.marginLeft !== "") {
+ style.paddingLeft = (0, _html_utils.measureToString)(this.marginLeft);
+ }
+
+ if (this.marginRight !== "") {
+ style.paddingight = (0, _html_utils.measureToString)(this.marginRight);
+ }
+
+ if (this.spaceAbove !== "") {
+ style.paddingTop = (0, _html_utils.measureToString)(this.spaceAbove);
+ }
+
+ if (this.spaceBelow !== "") {
+ style.paddingBottom = (0, _html_utils.measureToString)(this.spaceBelow);
+ }
+
+ if (this.textIndent !== "") {
+ style.textIndent = (0, _html_utils.measureToString)(this.textIndent);
+ (0, _html_utils.fixTextIndent)(style);
+ }
+
+ if (this.lineHeight > 0) {
+ style.lineHeight = (0, _html_utils.measureToString)(this.lineHeight);
+ }
+
+ if (this.tabDefault !== "") {
+ style.tabSize = (0, _html_utils.measureToString)(this.tabDefault);
+ }
+
+ if (this.tabStops.length > 0) {}
+
+ if (this.hyphenatation) {
+ Object.assign(style, this.hyphenatation[_xfa_object.$toStyle]());
+ }
+
+ return style;
+ }
+
+}
+
+class PasswordEdit extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "passwordEdit", true);
+ this.hScrollPolicy = (0, _utils.getStringOption)(attributes.hScrollPolicy, ["auto", "off", "on"]);
+ this.id = attributes.id || "";
+ this.passwordChar = attributes.passwordChar || "*";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.border = null;
+ this.extras = null;
+ this.margin = null;
+ }
+
+}
+
+class Pattern extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "pattern", true);
+ this.id = attributes.id || "";
+ this.type = (0, _utils.getStringOption)(attributes.type, ["crossHatch", "crossDiagonal", "diagonalLeft", "diagonalRight", "horizontal", "vertical"]);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.color = null;
+ this.extras = null;
+ }
+
+ [_xfa_object.$toStyle](startColor) {
+ startColor = startColor ? startColor[_xfa_object.$toStyle]() : "#FFFFFF";
+ const endColor = this.color ? this.color[_xfa_object.$toStyle]() : "#000000";
+ const width = 5;
+ const cmd = "repeating-linear-gradient";
+ const colors = `${startColor},${startColor} ${width}px,${endColor} ${width}px,${endColor} ${2 * width}px`;
+
+ switch (this.type) {
+ case "crossHatch":
+ return `${cmd}(to top,${colors}) ${cmd}(to right,${colors})`;
+
+ case "crossDiagonal":
+ return `${cmd}(45deg,${colors}) ${cmd}(-45deg,${colors})`;
+
+ case "diagonalLeft":
+ return `${cmd}(45deg,${colors})`;
+
+ case "diagonalRight":
+ return `${cmd}(-45deg,${colors})`;
+
+ case "horizontal":
+ return `${cmd}(to top,${colors})`;
+
+ case "vertical":
+ return `${cmd}(to right,${colors})`;
+ }
+
+ return "";
+ }
+
+}
+
+class Picture extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "picture");
+ this.id = attributes.id || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+}
+
+class Proto extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "proto", true);
+ this.appearanceFilter = new _xfa_object.XFAObjectArray();
+ this.arc = new _xfa_object.XFAObjectArray();
+ this.area = new _xfa_object.XFAObjectArray();
+ this.assist = new _xfa_object.XFAObjectArray();
+ this.barcode = new _xfa_object.XFAObjectArray();
+ this.bindItems = new _xfa_object.XFAObjectArray();
+ this.bookend = new _xfa_object.XFAObjectArray();
+ this.boolean = new _xfa_object.XFAObjectArray();
+ this.border = new _xfa_object.XFAObjectArray();
+ this.break = new _xfa_object.XFAObjectArray();
+ this.breakAfter = new _xfa_object.XFAObjectArray();
+ this.breakBefore = new _xfa_object.XFAObjectArray();
+ this.button = new _xfa_object.XFAObjectArray();
+ this.calculate = new _xfa_object.XFAObjectArray();
+ this.caption = new _xfa_object.XFAObjectArray();
+ this.certificate = new _xfa_object.XFAObjectArray();
+ this.certificates = new _xfa_object.XFAObjectArray();
+ this.checkButton = new _xfa_object.XFAObjectArray();
+ this.choiceList = new _xfa_object.XFAObjectArray();
+ this.color = new _xfa_object.XFAObjectArray();
+ this.comb = new _xfa_object.XFAObjectArray();
+ this.connect = new _xfa_object.XFAObjectArray();
+ this.contentArea = new _xfa_object.XFAObjectArray();
+ this.corner = new _xfa_object.XFAObjectArray();
+ this.date = new _xfa_object.XFAObjectArray();
+ this.dateTime = new _xfa_object.XFAObjectArray();
+ this.dateTimeEdit = new _xfa_object.XFAObjectArray();
+ this.decimal = new _xfa_object.XFAObjectArray();
+ this.defaultUi = new _xfa_object.XFAObjectArray();
+ this.desc = new _xfa_object.XFAObjectArray();
+ this.digestMethod = new _xfa_object.XFAObjectArray();
+ this.digestMethods = new _xfa_object.XFAObjectArray();
+ this.draw = new _xfa_object.XFAObjectArray();
+ this.edge = new _xfa_object.XFAObjectArray();
+ this.encoding = new _xfa_object.XFAObjectArray();
+ this.encodings = new _xfa_object.XFAObjectArray();
+ this.encrypt = new _xfa_object.XFAObjectArray();
+ this.encryptData = new _xfa_object.XFAObjectArray();
+ this.encryption = new _xfa_object.XFAObjectArray();
+ this.encryptionMethod = new _xfa_object.XFAObjectArray();
+ this.encryptionMethods = new _xfa_object.XFAObjectArray();
+ this.event = new _xfa_object.XFAObjectArray();
+ this.exData = new _xfa_object.XFAObjectArray();
+ this.exObject = new _xfa_object.XFAObjectArray();
+ this.exclGroup = new _xfa_object.XFAObjectArray();
+ this.execute = new _xfa_object.XFAObjectArray();
+ this.extras = new _xfa_object.XFAObjectArray();
+ this.field = new _xfa_object.XFAObjectArray();
+ this.fill = new _xfa_object.XFAObjectArray();
+ this.filter = new _xfa_object.XFAObjectArray();
+ this.float = new _xfa_object.XFAObjectArray();
+ this.font = new _xfa_object.XFAObjectArray();
+ this.format = new _xfa_object.XFAObjectArray();
+ this.handler = new _xfa_object.XFAObjectArray();
+ this.hyphenation = new _xfa_object.XFAObjectArray();
+ this.image = new _xfa_object.XFAObjectArray();
+ this.imageEdit = new _xfa_object.XFAObjectArray();
+ this.integer = new _xfa_object.XFAObjectArray();
+ this.issuers = new _xfa_object.XFAObjectArray();
+ this.items = new _xfa_object.XFAObjectArray();
+ this.keep = new _xfa_object.XFAObjectArray();
+ this.keyUsage = new _xfa_object.XFAObjectArray();
+ this.line = new _xfa_object.XFAObjectArray();
+ this.linear = new _xfa_object.XFAObjectArray();
+ this.lockDocument = new _xfa_object.XFAObjectArray();
+ this.manifest = new _xfa_object.XFAObjectArray();
+ this.margin = new _xfa_object.XFAObjectArray();
+ this.mdp = new _xfa_object.XFAObjectArray();
+ this.medium = new _xfa_object.XFAObjectArray();
+ this.message = new _xfa_object.XFAObjectArray();
+ this.numericEdit = new _xfa_object.XFAObjectArray();
+ this.occur = new _xfa_object.XFAObjectArray();
+ this.oid = new _xfa_object.XFAObjectArray();
+ this.oids = new _xfa_object.XFAObjectArray();
+ this.overflow = new _xfa_object.XFAObjectArray();
+ this.pageArea = new _xfa_object.XFAObjectArray();
+ this.pageSet = new _xfa_object.XFAObjectArray();
+ this.para = new _xfa_object.XFAObjectArray();
+ this.passwordEdit = new _xfa_object.XFAObjectArray();
+ this.pattern = new _xfa_object.XFAObjectArray();
+ this.picture = new _xfa_object.XFAObjectArray();
+ this.radial = new _xfa_object.XFAObjectArray();
+ this.reason = new _xfa_object.XFAObjectArray();
+ this.reasons = new _xfa_object.XFAObjectArray();
+ this.rectangle = new _xfa_object.XFAObjectArray();
+ this.ref = new _xfa_object.XFAObjectArray();
+ this.script = new _xfa_object.XFAObjectArray();
+ this.setProperty = new _xfa_object.XFAObjectArray();
+ this.signData = new _xfa_object.XFAObjectArray();
+ this.signature = new _xfa_object.XFAObjectArray();
+ this.signing = new _xfa_object.XFAObjectArray();
+ this.solid = new _xfa_object.XFAObjectArray();
+ this.speak = new _xfa_object.XFAObjectArray();
+ this.stipple = new _xfa_object.XFAObjectArray();
+ this.subform = new _xfa_object.XFAObjectArray();
+ this.subformSet = new _xfa_object.XFAObjectArray();
+ this.subjectDN = new _xfa_object.XFAObjectArray();
+ this.subjectDNs = new _xfa_object.XFAObjectArray();
+ this.submit = new _xfa_object.XFAObjectArray();
+ this.text = new _xfa_object.XFAObjectArray();
+ this.textEdit = new _xfa_object.XFAObjectArray();
+ this.time = new _xfa_object.XFAObjectArray();
+ this.timeStamp = new _xfa_object.XFAObjectArray();
+ this.toolTip = new _xfa_object.XFAObjectArray();
+ this.traversal = new _xfa_object.XFAObjectArray();
+ this.traverse = new _xfa_object.XFAObjectArray();
+ this.ui = new _xfa_object.XFAObjectArray();
+ this.validate = new _xfa_object.XFAObjectArray();
+ this.value = new _xfa_object.XFAObjectArray();
+ this.variables = new _xfa_object.XFAObjectArray();
+ }
+
+}
+
+class Radial extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "radial", true);
+ this.id = attributes.id || "";
+ this.type = (0, _utils.getStringOption)(attributes.type, ["toEdge", "toCenter"]);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.color = null;
+ this.extras = null;
+ }
+
+ [_xfa_object.$toStyle](startColor) {
+ startColor = startColor ? startColor[_xfa_object.$toStyle]() : "#FFFFFF";
+ const endColor = this.color ? this.color[_xfa_object.$toStyle]() : "#000000";
+ const colors = this.type === "toEdge" ? `${startColor},${endColor}` : `${endColor},${startColor}`;
+ return `radial-gradient(circle at center, ${colors})`;
+ }
+
+}
+
+class Reason extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "reason");
+ this.id = attributes.id || "";
+ this.name = attributes.name || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+}
+
+class Reasons extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "reasons", true);
+ this.id = attributes.id || "";
+ this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.reason = new _xfa_object.XFAObjectArray();
+ }
+
+}
+
+class Rectangle extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "rectangle", true);
+ this.hand = (0, _utils.getStringOption)(attributes.hand, ["even", "left", "right"]);
+ this.id = attributes.id || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.corner = new _xfa_object.XFAObjectArray(4);
+ this.edge = new _xfa_object.XFAObjectArray(4);
+ this.fill = null;
+ }
+
+ [_xfa_object.$toHTML]() {
+ const edge = this.edge.children.length ? this.edge.children[0] : new Edge({});
+
+ const edgeStyle = edge[_xfa_object.$toStyle]();
+
+ const style = Object.create(null);
+
+ if (this.fill && this.fill.presence === "visible") {
+ Object.assign(style, this.fill[_xfa_object.$toStyle]());
+ } else {
+ style.fill = "transparent";
+ }
+
+ style.strokeWidth = (0, _html_utils.measureToString)(edge.presence === "visible" ? edge.thickness : 0);
+ style.stroke = edgeStyle.color;
+ const corner = this.corner.children.length ? this.corner.children[0] : new Corner({});
+
+ const cornerStyle = corner[_xfa_object.$toStyle]();
+
+ const rect = {
+ name: "rect",
+ attributes: {
+ xmlns: SVG_NS,
+ width: "100%",
+ height: "100%",
+ x: 0,
+ y: 0,
+ rx: cornerStyle.radius,
+ ry: cornerStyle.radius,
+ style
+ }
+ };
+ const svg = {
+ name: "svg",
+ children: [rect],
+ attributes: {
+ xmlns: SVG_NS,
+ style: {
+ overflow: "visible"
+ },
+ width: "100%",
+ height: "100%"
+ }
+ };
+
+ const parent = this[_xfa_object.$getParent]()[_xfa_object.$getParent]();
+
+ if (hasMargin(parent)) {
+ return _utils.HTMLResult.success({
+ name: "div",
+ attributes: {
+ style: {
+ display: "inline",
+ width: "100%",
+ height: "100%"
+ }
+ },
+ children: [svg]
+ });
+ }
+
+ svg.attributes.style.position = "absolute";
+ return _utils.HTMLResult.success(svg);
+ }
+
+}
+
+class RefElement extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "ref");
+ this.id = attributes.id || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+}
+
+class Script extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "script");
+ this.binding = attributes.binding || "";
+ this.contentType = attributes.contentType || "";
+ this.id = attributes.id || "";
+ this.name = attributes.name || "";
+ this.runAt = (0, _utils.getStringOption)(attributes.runAt, ["client", "both", "server"]);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+}
+
+class SetProperty extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "setProperty");
+ this.connection = attributes.connection || "";
+ this.ref = attributes.ref || "";
+ this.target = attributes.target || "";
+ }
+
+}
+
+exports.SetProperty = SetProperty;
+
+class SignData extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "signData", true);
+ this.id = attributes.id || "";
+ this.operation = (0, _utils.getStringOption)(attributes.operation, ["sign", "clear", "verify"]);
+ this.ref = attributes.ref || "";
+ this.target = attributes.target || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.filter = null;
+ this.manifest = null;
+ }
+
+}
+
+class Signature extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "signature", true);
+ this.id = attributes.id || "";
+ this.type = (0, _utils.getStringOption)(attributes.type, ["PDF1.3", "PDF1.6"]);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.border = null;
+ this.extras = null;
+ this.filter = null;
+ this.manifest = null;
+ this.margin = null;
+ }
+
+}
+
+class Signing extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "signing", true);
+ this.id = attributes.id || "";
+ this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.certificate = new _xfa_object.XFAObjectArray();
+ }
+
+}
+
+class Solid extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "solid", true);
+ this.id = attributes.id || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.extras = null;
+ }
+
+ [_xfa_object.$toStyle](startColor) {
+ return startColor ? startColor[_xfa_object.$toStyle]() : "#FFFFFF";
+ }
+
+}
+
+class Speak extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "speak");
+ this.disable = (0, _utils.getInteger)({
+ data: attributes.disable,
+ defaultValue: 0,
+ validate: x => x === 1
+ });
+ this.id = attributes.id || "";
+ this.priority = (0, _utils.getStringOption)(attributes.priority, ["custom", "caption", "name", "toolTip"]);
+ this.rid = attributes.rid || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+}
+
+class Stipple extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "stipple", true);
+ this.id = attributes.id || "";
+ this.rate = (0, _utils.getInteger)({
+ data: attributes.rate,
+ defaultValue: 50,
+ validate: x => x >= 0 && x <= 100
+ });
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.color = null;
+ this.extras = null;
+ }
+
+ [_xfa_object.$toStyle](bgColor) {
+ const alpha = this.rate / 100;
+ return _util.Util.makeHexColor(Math.round(bgColor.value.r * (1 - alpha) + this.value.r * alpha), Math.round(bgColor.value.g * (1 - alpha) + this.value.g * alpha), Math.round(bgColor.value.b * (1 - alpha) + this.value.b * alpha));
+ }
+
+}
+
+class Subform extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "subform", true);
+ this.access = (0, _utils.getStringOption)(attributes.access, ["open", "nonInteractive", "protected", "readOnly"]);
+ this.allowMacro = (0, _utils.getInteger)({
+ data: attributes.allowMacro,
+ defaultValue: 0,
+ validate: x => x === 1
+ });
+ this.anchorType = (0, _utils.getStringOption)(attributes.anchorType, ["topLeft", "bottomCenter", "bottomLeft", "bottomRight", "middleCenter", "middleLeft", "middleRight", "topCenter", "topRight"]);
+ this.colSpan = (0, _utils.getInteger)({
+ data: attributes.colSpan,
+ defaultValue: 1,
+ validate: n => n >= 1 || n === -1
+ });
+ this.columnWidths = (attributes.columnWidths || "").trim().split(/\s+/).map(x => x === "-1" ? -1 : (0, _utils.getMeasurement)(x));
+ this.h = attributes.h ? (0, _utils.getMeasurement)(attributes.h) : "";
+ this.hAlign = (0, _utils.getStringOption)(attributes.hAlign, ["left", "center", "justify", "justifyAll", "radix", "right"]);
+ this.id = attributes.id || "";
+ this.layout = (0, _utils.getStringOption)(attributes.layout, ["position", "lr-tb", "rl-row", "rl-tb", "row", "table", "tb"]);
+ this.locale = attributes.locale || "";
+ this.maxH = (0, _utils.getMeasurement)(attributes.maxH, "0pt");
+ this.maxW = (0, _utils.getMeasurement)(attributes.maxW, "0pt");
+ this.mergeMode = (0, _utils.getStringOption)(attributes.mergeMode, ["consumeData", "matchTemplate"]);
+ this.minH = (0, _utils.getMeasurement)(attributes.minH, "0pt");
+ this.minW = (0, _utils.getMeasurement)(attributes.minW, "0pt");
+ this.name = attributes.name || "";
+ this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]);
+ this.relevant = (0, _utils.getRelevant)(attributes.relevant);
+ this.restoreState = (0, _utils.getStringOption)(attributes.restoreState, ["manual", "auto"]);
+ this.scope = (0, _utils.getStringOption)(attributes.scope, ["name", "none"]);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.w = attributes.w ? (0, _utils.getMeasurement)(attributes.w) : "";
+ this.x = (0, _utils.getMeasurement)(attributes.x, "0pt");
+ this.y = (0, _utils.getMeasurement)(attributes.y, "0pt");
+ this.assist = null;
+ this.bind = null;
+ this.bookend = null;
+ this.border = null;
+ this.break = null;
+ this.calculate = null;
+ this.desc = null;
+ this.extras = null;
+ this.keep = null;
+ this.margin = null;
+ this.occur = null;
+ this.overflow = null;
+ this.pageSet = null;
+ this.para = null;
+ this.traversal = null;
+ this.validate = null;
+ this.variables = null;
+ this.area = new _xfa_object.XFAObjectArray();
+ this.breakAfter = new _xfa_object.XFAObjectArray();
+ this.breakBefore = new _xfa_object.XFAObjectArray();
+ this.connect = new _xfa_object.XFAObjectArray();
+ this.draw = new _xfa_object.XFAObjectArray();
+ this.event = new _xfa_object.XFAObjectArray();
+ this.exObject = new _xfa_object.XFAObjectArray();
+ this.exclGroup = new _xfa_object.XFAObjectArray();
+ this.field = new _xfa_object.XFAObjectArray();
+ this.proto = new _xfa_object.XFAObjectArray();
+ this.setProperty = new _xfa_object.XFAObjectArray();
+ this.subform = new _xfa_object.XFAObjectArray();
+ this.subformSet = new _xfa_object.XFAObjectArray();
+ }
+
+ [_xfa_object.$getSubformParent]() {
+ const parent = this[_xfa_object.$getParent]();
+
+ if (parent instanceof SubformSet) {
+ return parent[_xfa_object.$getSubformParent]();
+ }
+
+ return parent;
+ }
+
+ [_xfa_object.$isBindable]() {
+ return true;
+ }
+
+ [_xfa_object.$isThereMoreWidth]() {
+ return this.layout.endsWith("-tb") && this[_xfa_object.$extra].attempt === 0 && this[_xfa_object.$extra].numberInLine > 0 || this[_xfa_object.$getParent]()[_xfa_object.$isThereMoreWidth]();
+ }
+
+ *[_xfa_object.$getContainedChildren]() {
+ yield* getContainedChildren(this);
+ }
+
+ [_xfa_object.$flushHTML]() {
+ return (0, _layout.flushHTML)(this);
+ }
+
+ [_xfa_object.$addHTML](html, bbox) {
+ (0, _layout.addHTML)(this, html, bbox);
+ }
+
+ [_xfa_object.$getAvailableSpace]() {
+ return (0, _layout.getAvailableSpace)(this);
+ }
+
+ [_xfa_object.$isSplittable]() {
+ const parent = this[_xfa_object.$getSubformParent]();
+
+ if (!parent[_xfa_object.$isSplittable]()) {
+ return false;
+ }
+
+ const contentArea = this[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].currentContentArea;
+
+ if (this.overflow && this.overflow[_xfa_object.$getExtra]().target === contentArea) {
+ return false;
+ }
+
+ if (this[_xfa_object.$extra]._isSplittable !== undefined) {
+ return this[_xfa_object.$extra]._isSplittable;
+ }
+
+ if (this.layout === "position" || this.layout.includes("row")) {
+ this[_xfa_object.$extra]._isSplittable = false;
+ return false;
+ }
+
+ if (this.keep && this.keep.intact !== "none") {
+ this[_xfa_object.$extra]._isSplittable = false;
+ return false;
+ }
+
+ if (parent.layout && parent.layout.endsWith("-tb") && parent[_xfa_object.$extra].numberInLine !== 0) {
+ return false;
+ }
+
+ this[_xfa_object.$extra]._isSplittable = true;
+ return true;
+ }
+
+ [_xfa_object.$toHTML](availableSpace) {
+ if (this.break) {
+ if (this.break.after !== "auto" || this.break.afterTarget !== "") {
+ const node = new BreakAfter({
+ targetType: this.break.after,
+ target: this.break.afterTarget,
+ startNew: this.break.startNew.toString()
+ });
+ node[_xfa_object.$globalData] = this[_xfa_object.$globalData];
+
+ this[_xfa_object.$appendChild](node);
+
+ this.breakAfter.push(node);
+ }
+
+ if (this.break.before !== "auto" || this.break.beforeTarget !== "") {
+ const node = new BreakBefore({
+ targetType: this.break.before,
+ target: this.break.beforeTarget,
+ startNew: this.break.startNew.toString()
+ });
+ node[_xfa_object.$globalData] = this[_xfa_object.$globalData];
+
+ this[_xfa_object.$appendChild](node);
+
+ this.breakBefore.push(node);
+ }
+
+ if (this.break.overflowTarget !== "") {
+ const node = new Overflow({
+ target: this.break.overflowTarget,
+ leader: this.break.overflowLeader,
+ trailer: this.break.overflowTrailer
+ });
+ node[_xfa_object.$globalData] = this[_xfa_object.$globalData];
+
+ this[_xfa_object.$appendChild](node);
+
+ this.overflow.push(node);
+ }
+
+ this[_xfa_object.$removeChild](this.break);
+
+ this.break = null;
+ }
+
+ if (this.presence === "hidden" || this.presence === "inactive") {
+ return _utils.HTMLResult.EMPTY;
+ }
+
+ if (this.breakBefore.children.length > 1 || this.breakAfter.children.length > 1) {
+ (0, _util.warn)("XFA - Several breakBefore or breakAfter in subforms: please file a bug.");
+ }
+
+ if (this.breakBefore.children.length >= 1) {
+ const breakBefore = this.breakBefore.children[0];
+
+ if (handleBreak(breakBefore)) {
+ return _utils.HTMLResult.breakNode(breakBefore);
+ }
+ }
+
+ if (this[_xfa_object.$extra] && this[_xfa_object.$extra].afterBreakAfter) {
+ return _utils.HTMLResult.EMPTY;
+ }
+
+ (0, _html_utils.fixDimensions)(this);
+ const children = [];
+ const attributes = {
+ id: this[_xfa_object.$uid],
+ class: []
+ };
+ (0, _html_utils.setAccess)(this, attributes.class);
+
+ if (!this[_xfa_object.$extra]) {
+ this[_xfa_object.$extra] = Object.create(null);
+ }
+
+ Object.assign(this[_xfa_object.$extra], {
+ children,
+ line: null,
+ attributes,
+ attempt: 0,
+ numberInLine: 0,
+ availableSpace: {
+ width: Math.min(this.w || Infinity, availableSpace.width),
+ height: Math.min(this.h || Infinity, availableSpace.height)
+ },
+ width: 0,
+ height: 0,
+ prevHeight: 0,
+ currentWidth: 0
+ });
+
+ const root = this[_xfa_object.$getTemplateRoot]();
+
+ const currentContentArea = root[_xfa_object.$extra].currentContentArea;
+ const savedNoLayoutFailure = root[_xfa_object.$extra].noLayoutFailure;
+
+ if (this.overflow) {
+ root[_xfa_object.$extra].noLayoutFailure = root[_xfa_object.$extra].noLayoutFailure || this.overflow[_xfa_object.$getExtra]().target === currentContentArea;
+ }
+
+ const isSplittable = this[_xfa_object.$isSplittable]();
+
+ if (!isSplittable) {
+ setFirstUnsplittable(this);
+ }
+
+ if (!(0, _layout.checkDimensions)(this, availableSpace)) {
+ return _utils.HTMLResult.FAILURE;
+ }
+
+ const filter = new Set(["area", "draw", "exclGroup", "field", "subform", "subformSet"]);
+
+ if (this.layout.includes("row")) {
+ const columnWidths = this[_xfa_object.$getSubformParent]().columnWidths;
+
+ if (Array.isArray(columnWidths) && columnWidths.length > 0) {
+ this[_xfa_object.$extra].columnWidths = columnWidths;
+ this[_xfa_object.$extra].currentColumn = 0;
+ }
+ }
+
+ const style = (0, _html_utils.toStyle)(this, "anchorType", "dimensions", "position", "presence", "border", "margin", "hAlign");
+ const classNames = ["xfaSubform"];
+ const cl = (0, _html_utils.layoutClass)(this);
+
+ if (cl) {
+ classNames.push(cl);
+ }
+
+ attributes.style = style;
+ attributes.class = classNames;
+
+ if (this.name) {
+ attributes.xfaName = this.name;
+ }
+
+ if (this.overflow) {
+ const overflowExtra = this.overflow[_xfa_object.$getExtra]();
+
+ if (overflowExtra.addLeader) {
+ overflowExtra.addLeader = false;
+ handleOverflow(this, overflowExtra.leader, availableSpace);
+ }
+ }
+
+ const isLrTb = this.layout === "lr-tb" || this.layout === "rl-tb";
+ const maxRun = isLrTb ? MAX_ATTEMPTS_FOR_LRTB_LAYOUT : 1;
+
+ for (; this[_xfa_object.$extra].attempt < maxRun; this[_xfa_object.$extra].attempt++) {
+ if (isLrTb && this[_xfa_object.$extra].attempt === MAX_ATTEMPTS_FOR_LRTB_LAYOUT - 1) {
+ this[_xfa_object.$extra].numberInLine = 0;
+ }
+
+ const result = this[_xfa_object.$childrenToHTML]({
+ filter,
+ include: true
+ });
+
+ if (result.success) {
+ break;
+ }
+
+ if (result.isBreak()) {
+ return result;
+ }
+
+ if (isLrTb && this[_xfa_object.$extra].attempt === 0 && this[_xfa_object.$extra].numberInLine === 0 && !root[_xfa_object.$extra].noLayoutFailure) {
+ this[_xfa_object.$extra].attempt = maxRun;
+ break;
+ }
+ }
+
+ if (!isSplittable) {
+ unsetFirstUnsplittable(this);
+ }
+
+ root[_xfa_object.$extra].noLayoutFailure = savedNoLayoutFailure;
+
+ if (this[_xfa_object.$extra].attempt === maxRun) {
+ if (this.overflow) {
+ this[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].overflowNode = this.overflow;
+ }
+
+ if (!isSplittable) {
+ delete this[_xfa_object.$extra];
+ }
+
+ return _utils.HTMLResult.FAILURE;
+ }
+
+ if (this.overflow) {
+ const overflowExtra = this.overflow[_xfa_object.$getExtra]();
+
+ if (overflowExtra.addTrailer) {
+ overflowExtra.addTrailer = false;
+ handleOverflow(this, overflowExtra.trailer, availableSpace);
+ }
+ }
+
+ let marginH = 0;
+ let marginV = 0;
+
+ if (this.margin) {
+ marginH = this.margin.leftInset + this.margin.rightInset;
+ marginV = this.margin.topInset + this.margin.bottomInset;
+ }
+
+ const width = Math.max(this[_xfa_object.$extra].width + marginH, this.w || 0);
+ const height = Math.max(this[_xfa_object.$extra].height + marginV, this.h || 0);
+ const bbox = [this.x, this.y, width, height];
+
+ if (this.w === "") {
+ style.width = (0, _html_utils.measureToString)(width);
+ }
+
+ if (this.h === "") {
+ style.height = (0, _html_utils.measureToString)(height);
+ }
+
+ const html = {
+ name: "div",
+ attributes,
+ children
+ };
+ const assist = this.assist ? this.assist[_xfa_object.$toHTML]() : null;
+
+ if (assist) {
+ html.attributes.title = assist;
+ }
+
+ const result = _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox);
+
+ if (this.breakAfter.children.length >= 1) {
+ const breakAfter = this.breakAfter.children[0];
+
+ if (handleBreak(breakAfter)) {
+ this[_xfa_object.$extra].afterBreakAfter = result;
+ return _utils.HTMLResult.breakNode(breakAfter);
+ }
+ }
+
+ delete this[_xfa_object.$extra];
+ return result;
+ }
+
+}
+
+class SubformSet extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "subformSet", true);
+ this.id = attributes.id || "";
+ this.name = attributes.name || "";
+ this.relation = (0, _utils.getStringOption)(attributes.relation, ["ordered", "choice", "unordered"]);
+ this.relevant = (0, _utils.getRelevant)(attributes.relevant);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.bookend = null;
+ this.break = null;
+ this.desc = null;
+ this.extras = null;
+ this.occur = null;
+ this.overflow = null;
+ this.breakAfter = new _xfa_object.XFAObjectArray();
+ this.breakBefore = new _xfa_object.XFAObjectArray();
+ this.subform = new _xfa_object.XFAObjectArray();
+ this.subformSet = new _xfa_object.XFAObjectArray();
+ }
+
+ *[_xfa_object.$getContainedChildren]() {
+ yield* getContainedChildren(this);
+ }
+
+ [_xfa_object.$getSubformParent]() {
+ let parent = this[_xfa_object.$getParent]();
+
+ while (!(parent instanceof Subform)) {
+ parent = parent[_xfa_object.$getParent]();
+ }
+
+ return parent;
+ }
+
+}
+
+class SubjectDN extends _xfa_object.ContentObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "subjectDN");
+ this.delimiter = attributes.delimiter || ",";
+ this.id = attributes.id || "";
+ this.name = attributes.name || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+ [_xfa_object.$finalize]() {
+ this[_xfa_object.$content] = new Map(this[_xfa_object.$content].split(this.delimiter).map(kv => {
+ kv = kv.split("=", 2);
+ kv[0] = kv[0].trim();
+ return kv;
+ }));
+ }
+
+}
+
+class SubjectDNs extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "subjectDNs", true);
+ this.id = attributes.id || "";
+ this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.subjectDN = new _xfa_object.XFAObjectArray();
+ }
+
+}
+
+class Submit extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "submit", true);
+ this.embedPDF = (0, _utils.getInteger)({
+ data: attributes.embedPDF,
+ defaultValue: 0,
+ validate: x => x === 1
+ });
+ this.format = (0, _utils.getStringOption)(attributes.format, ["xdp", "formdata", "pdf", "urlencoded", "xfd", "xml"]);
+ this.id = attributes.id || "";
+ this.target = attributes.target || "";
+ this.textEncoding = (0, _utils.getKeyword)({
+ data: attributes.textEncoding ? attributes.textEncoding.toLowerCase() : "",
+ defaultValue: "",
+ validate: k => ["utf-8", "big-five", "fontspecific", "gbk", "gb-18030", "gb-2312", "ksc-5601", "none", "shift-jis", "ucs-2", "utf-16"].includes(k) || k.match(/iso-8859-[0-9]{2}/)
+ });
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.xdpContent = attributes.xdpContent || "";
+ this.encrypt = null;
+ this.encryptData = new _xfa_object.XFAObjectArray();
+ this.signData = new _xfa_object.XFAObjectArray();
+ }
+
+}
+
+class Template extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "template", true);
+ this.baseProfile = (0, _utils.getStringOption)(attributes.baseProfile, ["full", "interactiveForms"]);
+ this.extras = null;
+ this.subform = new _xfa_object.XFAObjectArray();
+ }
+
+ [_xfa_object.$finalize]() {
+ if (this.subform.children.length === 0) {
+ (0, _util.warn)("XFA - No subforms in template node.");
+ }
+
+ if (this.subform.children.length >= 2) {
+ (0, _util.warn)("XFA - Several subforms in template node: please file a bug.");
+ }
+
+ this[_xfa_object.$tabIndex] = 1000;
+ }
+
+ [_xfa_object.$isSplittable]() {
+ return true;
+ }
+
+ [_xfa_object.$searchNode](expr, container) {
+ if (expr.startsWith("#")) {
+ return [this[_xfa_object.$ids].get(expr.slice(1))];
+ }
+
+ return (0, _som.searchNode)(this, container, expr, true, true);
+ }
+
+ [_xfa_object.$toHTML]() {
+ if (!this.subform.children.length) {
+ return _utils.HTMLResult.success({
+ name: "div",
+ children: []
+ });
+ }
+
+ this[_xfa_object.$extra] = {
+ overflowNode: null,
+ firstUnsplittable: null,
+ currentContentArea: null,
+ currentPageArea: null,
+ noLayoutFailure: false,
+ pageNumber: 1,
+ pagePosition: "first",
+ oddOrEven: "odd",
+ blankOrNotBlank: "nonBlank"
+ };
+ const root = this.subform.children[0];
+
+ root.pageSet[_xfa_object.$cleanPage]();
+
+ const pageAreas = root.pageSet.pageArea.children;
+ const mainHtml = {
+ name: "div",
+ children: []
+ };
+ let pageArea = null;
+ let breakBefore = null;
+ let breakBeforeTarget = null;
+
+ if (root.breakBefore.children.length >= 1) {
+ breakBefore = root.breakBefore.children[0];
+ breakBeforeTarget = breakBefore.target;
+ } else if (root.subform.children.length >= 1 && root.subform.children[0].breakBefore.children.length >= 1) {
+ breakBefore = root.subform.children[0].breakBefore.children[0];
+ breakBeforeTarget = breakBefore.target;
+ } else if (root.break && root.break.beforeTarget) {
+ breakBefore = root.break;
+ breakBeforeTarget = breakBefore.beforeTarget;
+ } else if (root.subform.children.length >= 1 && root.subform.children[0].break && root.subform.children[0].break.beforeTarget) {
+ breakBefore = root.subform.children[0].break;
+ breakBeforeTarget = breakBefore.beforeTarget;
+ }
+
+ if (breakBefore) {
+ const target = this[_xfa_object.$searchNode](breakBeforeTarget, breakBefore[_xfa_object.$getParent]());
+
+ if (target instanceof PageArea) {
+ pageArea = target;
+ breakBefore[_xfa_object.$extra] = {};
+ }
+ }
+
+ if (!pageArea) {
+ pageArea = pageAreas[0];
+ }
+
+ pageArea[_xfa_object.$extra] = {
+ numberOfUse: 1
+ };
+
+ const pageAreaParent = pageArea[_xfa_object.$getParent]();
+
+ pageAreaParent[_xfa_object.$extra] = {
+ numberOfUse: 1,
+ pageIndex: pageAreaParent.pageArea.children.indexOf(pageArea),
+ pageSetIndex: 0
+ };
+ let targetPageArea;
+ let leader = null;
+ let trailer = null;
+ let hasSomething = true;
+ let hasSomethingCounter = 0;
+ let startIndex = 0;
+
+ while (true) {
+ if (!hasSomething) {
+ mainHtml.children.pop();
+
+ if (++hasSomethingCounter === MAX_EMPTY_PAGES) {
+ (0, _util.warn)("XFA - Something goes wrong: please file a bug.");
+ return mainHtml;
+ }
+ } else {
+ hasSomethingCounter = 0;
+ }
+
+ targetPageArea = null;
+ this[_xfa_object.$extra].currentPageArea = pageArea;
+
+ const page = pageArea[_xfa_object.$toHTML]().html;
+
+ mainHtml.children.push(page);
+
+ if (leader) {
+ this[_xfa_object.$extra].noLayoutFailure = true;
+ page.children.push(leader[_xfa_object.$toHTML](pageArea[_xfa_object.$extra].space).html);
+ leader = null;
+ }
+
+ if (trailer) {
+ this[_xfa_object.$extra].noLayoutFailure = true;
+ page.children.push(trailer[_xfa_object.$toHTML](pageArea[_xfa_object.$extra].space).html);
+ trailer = null;
+ }
+
+ const contentAreas = pageArea.contentArea.children;
+ const htmlContentAreas = page.children.filter(node => node.attributes.class.includes("xfaContentarea"));
+ hasSomething = false;
+ this[_xfa_object.$extra].firstUnsplittable = null;
+ this[_xfa_object.$extra].noLayoutFailure = false;
+
+ const flush = index => {
+ const html = root[_xfa_object.$flushHTML]();
+
+ if (html) {
+ hasSomething = hasSomething || html.children && html.children.length !== 0;
+ htmlContentAreas[index].children.push(html);
+ }
+ };
+
+ for (let i = startIndex, ii = contentAreas.length; i < ii; i++) {
+ const contentArea = this[_xfa_object.$extra].currentContentArea = contentAreas[i];
+ const space = {
+ width: contentArea.w,
+ height: contentArea.h
+ };
+ startIndex = 0;
+
+ if (leader) {
+ htmlContentAreas[i].children.push(leader[_xfa_object.$toHTML](space).html);
+ leader = null;
+ }
+
+ if (trailer) {
+ htmlContentAreas[i].children.push(trailer[_xfa_object.$toHTML](space).html);
+ trailer = null;
+ }
+
+ const html = root[_xfa_object.$toHTML](space);
+
+ if (html.success) {
+ if (html.html) {
+ hasSomething = hasSomething || html.html.children && html.html.children.length !== 0;
+ htmlContentAreas[i].children.push(html.html);
+ } else if (!hasSomething) {
+ mainHtml.children.pop();
+ }
+
+ return mainHtml;
+ }
+
+ if (html.isBreak()) {
+ const node = html.breakNode;
+ flush(i);
+
+ if (node.targetType === "auto") {
+ continue;
+ }
+
+ if (node.leader) {
+ leader = this[_xfa_object.$searchNode](node.leader, node[_xfa_object.$getParent]());
+ leader = leader ? leader[0] : null;
+ }
+
+ if (node.trailer) {
+ trailer = this[_xfa_object.$searchNode](node.trailer, node[_xfa_object.$getParent]());
+ trailer = trailer ? trailer[0] : null;
+ }
+
+ if (node.targetType === "pageArea") {
+ targetPageArea = node[_xfa_object.$extra].target;
+ i = Infinity;
+ } else if (!node[_xfa_object.$extra].target) {
+ i = node[_xfa_object.$extra].index;
+ } else {
+ targetPageArea = node[_xfa_object.$extra].target;
+ startIndex = node[_xfa_object.$extra].index + 1;
+ i = Infinity;
+ }
+
+ continue;
+ }
+
+ if (this[_xfa_object.$extra].overflowNode) {
+ const node = this[_xfa_object.$extra].overflowNode;
+ this[_xfa_object.$extra].overflowNode = null;
+
+ const overflowExtra = node[_xfa_object.$getExtra]();
+
+ const target = overflowExtra.target;
+ overflowExtra.addLeader = overflowExtra.leader !== null;
+ overflowExtra.addTrailer = overflowExtra.trailer !== null;
+ flush(i);
+ i = Infinity;
+
+ if (target instanceof PageArea) {
+ targetPageArea = target;
+ } else if (target instanceof ContentArea) {
+ const index = contentAreas.findIndex(e => e === target);
+
+ if (index !== -1) {
+ i = index - 1;
+ } else {
+ targetPageArea = target[_xfa_object.$getParent]();
+ startIndex = targetPageArea.contentArea.children.findIndex(e => e === target);
+ }
+ }
+
+ continue;
+ }
+
+ flush(i);
+ }
+
+ this[_xfa_object.$extra].pageNumber += 1;
+
+ if (targetPageArea) {
+ if (targetPageArea[_xfa_object.$isUsable]()) {
+ targetPageArea[_xfa_object.$extra].numberOfUse += 1;
+ } else {
+ targetPageArea = null;
+ }
+ }
+
+ pageArea = targetPageArea || pageArea[_xfa_object.$getNextPage]();
+ }
+ }
+
+}
+
+exports.Template = Template;
+
+class Text extends _xfa_object.ContentObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "text");
+ this.id = attributes.id || "";
+ this.maxChars = (0, _utils.getInteger)({
+ data: attributes.maxChars,
+ defaultValue: 0,
+ validate: x => x >= 0
+ });
+ this.name = attributes.name || "";
+ this.rid = attributes.rid || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+ [_xfa_object.$acceptWhitespace]() {
+ return true;
+ }
+
+ [_xfa_object.$onChild](child) {
+ if (child[_xfa_object.$namespaceId] === _namespaces.NamespaceIds.xhtml.id) {
+ this[_xfa_object.$content] = child;
+ return true;
+ }
+
+ (0, _util.warn)(`XFA - Invalid content in Text: ${child[_xfa_object.$nodeName]}.`);
+ return false;
+ }
+
+ [_xfa_object.$onText](str) {
+ if (this[_xfa_object.$content] instanceof _xfa_object.XFAObject) {
+ return;
+ }
+
+ super[_xfa_object.$onText](str);
+ }
+
+ [_xfa_object.$toHTML](availableSpace) {
+ if (typeof this[_xfa_object.$content] === "string") {
+ const html = valueToHtml(this[_xfa_object.$content]).html;
+
+ if (this[_xfa_object.$content].includes("\u2029")) {
+ html.name = "div";
+ html.children = [];
+
+ this[_xfa_object.$content].split("\u2029").map(para => para.split(/[\u2028\n]/).reduce((acc, line) => {
+ acc.push({
+ name: "span",
+ value: line
+ }, {
+ name: "br"
+ });
+ return acc;
+ }, [])).forEach(lines => {
+ html.children.push({
+ name: "p",
+ children: lines
+ });
+ });
+ } else if (/[\u2028\n]/.test(this[_xfa_object.$content])) {
+ html.name = "div";
+ html.children = [];
+
+ this[_xfa_object.$content].split(/[\u2028\n]/).forEach(line => {
+ html.children.push({
+ name: "span",
+ value: line
+ }, {
+ name: "br"
+ });
+ });
+ }
+
+ return _utils.HTMLResult.success(html);
+ }
+
+ return this[_xfa_object.$content][_xfa_object.$toHTML](availableSpace);
+ }
+
+}
+
+exports.Text = Text;
+
+class TextEdit extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "textEdit", true);
+ this.allowRichText = (0, _utils.getInteger)({
+ data: attributes.allowRichText,
+ defaultValue: 0,
+ validate: x => x === 1
+ });
+ this.hScrollPolicy = (0, _utils.getStringOption)(attributes.hScrollPolicy, ["auto", "off", "on"]);
+ this.id = attributes.id || "";
+ this.multiLine = attributes.multiLine || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.vScrollPolicy = (0, _utils.getStringOption)(attributes.vScrollPolicy, ["auto", "off", "on"]);
+ this.border = null;
+ this.comb = null;
+ this.extras = null;
+ this.margin = null;
+ }
+
+ [_xfa_object.$clean](builder) {
+ super[_xfa_object.$clean](builder);
+
+ const parent = this[_xfa_object.$getParent]();
+
+ const defaultValue = parent instanceof Draw ? 1 : 0;
+ this.multiLine = (0, _utils.getInteger)({
+ data: this.multiLine,
+ defaultValue,
+ validate: x => x === 0 || x === 1
+ });
+ }
+
+ [_xfa_object.$toHTML](availableSpace) {
+ const style = (0, _html_utils.toStyle)(this, "border", "font", "margin");
+ let html;
+
+ const field = this[_xfa_object.$getParent]()[_xfa_object.$getParent]();
+
+ if (this.multiLine === 1) {
+ html = {
+ name: "textarea",
+ attributes: {
+ dataId: field[_xfa_object.$data] && field[_xfa_object.$data][_xfa_object.$uid] || field[_xfa_object.$uid],
+ fieldId: field[_xfa_object.$uid],
+ class: ["xfaTextfield"],
+ style
+ }
+ };
+ } else {
+ html = {
+ name: "input",
+ attributes: {
+ type: "text",
+ dataId: field[_xfa_object.$data] && field[_xfa_object.$data][_xfa_object.$uid] || field[_xfa_object.$uid],
+ fieldId: field[_xfa_object.$uid],
+ class: ["xfaTextfield"],
+ style
+ }
+ };
+ }
+
+ return _utils.HTMLResult.success({
+ name: "label",
+ attributes: {
+ class: ["xfaLabel"]
+ },
+ children: [html]
+ });
+ }
+
+}
+
+class Time extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "time");
+ this.id = attributes.id || "";
+ this.name = attributes.name || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+ [_xfa_object.$finalize]() {
+ const date = this[_xfa_object.$content].trim();
+
+ this[_xfa_object.$content] = date ? new Date(date) : null;
+ }
+
+ [_xfa_object.$toHTML](availableSpace) {
+ return valueToHtml(this[_xfa_object.$content] ? this[_xfa_object.$content].toString() : "");
+ }
+
+}
+
+class TimeStamp extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "timeStamp");
+ this.id = attributes.id || "";
+ this.server = attributes.server || "";
+ this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+}
+
+class ToolTip extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "toolTip");
+ this.id = attributes.id || "";
+ this.rid = attributes.rid || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+}
+
+class Traversal extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "traversal", true);
+ this.id = attributes.id || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.extras = null;
+ this.traverse = new _xfa_object.XFAObjectArray();
+ }
+
+}
+
+class Traverse extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "traverse", true);
+ this.id = attributes.id || "";
+ this.operation = (0, _utils.getStringOption)(attributes.operation, ["next", "back", "down", "first", "left", "right", "up"]);
+ this.ref = attributes.ref || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.extras = null;
+ this.script = null;
+ }
+
+ get name() {
+ return this.operation;
+ }
+
+ [_xfa_object.$isTransparent]() {
+ return false;
+ }
+
+}
+
+class Ui extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "ui", true);
+ this.id = attributes.id || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.extras = null;
+ this.picture = null;
+ this.barcode = null;
+ this.button = null;
+ this.checkButton = null;
+ this.choiceList = null;
+ this.dateTimeEdit = null;
+ this.defaultUi = null;
+ this.imageEdit = null;
+ this.numericEdit = null;
+ this.passwordEdit = null;
+ this.signature = null;
+ this.textEdit = null;
+ }
+
+ [_xfa_object.$toHTML](availableSpace) {
+ for (const name of Object.getOwnPropertyNames(this)) {
+ if (name === "extras" || name === "picture") {
+ continue;
+ }
+
+ const obj = this[name];
+
+ if (!(obj instanceof _xfa_object.XFAObject)) {
+ continue;
+ }
+
+ return obj[_xfa_object.$toHTML](availableSpace);
+ }
+
+ return _utils.HTMLResult.EMPTY;
+ }
+
+}
+
+class Validate extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "validate", true);
+ this.formatTest = (0, _utils.getStringOption)(attributes.formatTest, ["warning", "disabled", "error"]);
+ this.id = attributes.id || "";
+ this.nullTest = (0, _utils.getStringOption)(attributes.nullTest, ["disabled", "error", "warning"]);
+ this.scriptTest = (0, _utils.getStringOption)(attributes.scriptTest, ["error", "disabled", "warning"]);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.extras = null;
+ this.message = null;
+ this.picture = null;
+ this.script = null;
+ }
+
+}
+
+class Value extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "value", true);
+ this.id = attributes.id || "";
+ this.override = (0, _utils.getInteger)({
+ data: attributes.override,
+ defaultValue: 0,
+ validate: x => x === 1
+ });
+ this.relevant = (0, _utils.getRelevant)(attributes.relevant);
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.arc = null;
+ this.boolean = null;
+ this.date = null;
+ this.dateTime = null;
+ this.decimal = null;
+ this.exData = null;
+ this.float = null;
+ this.image = null;
+ this.integer = null;
+ this.line = null;
+ this.rectangle = null;
+ this.text = null;
+ this.time = null;
+ }
+
+ [_xfa_object.$setValue](value) {
+ const parent = this[_xfa_object.$getParent]();
+
+ if (parent instanceof Field) {
+ if (parent.ui && parent.ui.imageEdit) {
+ if (!this.image) {
+ this.image = new Image({});
+ }
+
+ this.image[_xfa_object.$content] = value[_xfa_object.$content];
+ return;
+ }
+ }
+
+ const valueName = value[_xfa_object.$nodeName];
+
+ if (this[valueName] !== null) {
+ this[valueName][_xfa_object.$content] = value[_xfa_object.$content];
+ return;
+ }
+
+ for (const name of Object.getOwnPropertyNames(this)) {
+ const obj = this[name];
+
+ if (obj instanceof _xfa_object.XFAObject) {
+ this[name] = null;
+
+ this[_xfa_object.$removeChild](obj);
+ }
+ }
+
+ this[value[_xfa_object.$nodeName]] = value;
+
+ this[_xfa_object.$appendChild](value);
+ }
+
+ [_xfa_object.$text]() {
+ if (this.exData) {
+ return this.exData[_xfa_object.$content][_xfa_object.$text]().trim();
+ }
+
+ for (const name of Object.getOwnPropertyNames(this)) {
+ if (name === "image") {
+ continue;
+ }
+
+ const obj = this[name];
+
+ if (obj instanceof _xfa_object.XFAObject) {
+ return (obj[_xfa_object.$content] || "").toString().trim();
+ }
+ }
+
+ return null;
+ }
+
+ [_xfa_object.$toHTML](availableSpace) {
+ for (const name of Object.getOwnPropertyNames(this)) {
+ const obj = this[name];
+
+ if (!(obj instanceof _xfa_object.XFAObject)) {
+ continue;
+ }
+
+ return obj[_xfa_object.$toHTML](availableSpace);
+ }
+
+ return _utils.HTMLResult.EMPTY;
+ }
+
+}
+
+exports.Value = Value;
+
+class Variables extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(TEMPLATE_NS_ID, "variables", true);
+ this.id = attributes.id || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ this.boolean = new _xfa_object.XFAObjectArray();
+ this.date = new _xfa_object.XFAObjectArray();
+ this.dateTime = new _xfa_object.XFAObjectArray();
+ this.decimal = new _xfa_object.XFAObjectArray();
+ this.exData = new _xfa_object.XFAObjectArray();
+ this.float = new _xfa_object.XFAObjectArray();
+ this.image = new _xfa_object.XFAObjectArray();
+ this.integer = new _xfa_object.XFAObjectArray();
+ this.manifest = new _xfa_object.XFAObjectArray();
+ this.script = new _xfa_object.XFAObjectArray();
+ this.text = new _xfa_object.XFAObjectArray();
+ this.time = new _xfa_object.XFAObjectArray();
+ }
+
+ [_xfa_object.$isTransparent]() {
+ return true;
+ }
+
+}
+
+class TemplateNamespace {
+ static [_namespaces.$buildXFAObject](name, attributes) {
+ if (TemplateNamespace.hasOwnProperty(name)) {
+ const node = TemplateNamespace[name](attributes);
+
+ node[_xfa_object.$setSetAttributes](attributes);
+
+ return node;
+ }
+
+ return undefined;
+ }
+
+ static appearanceFilter(attrs) {
+ return new AppearanceFilter(attrs);
+ }
+
+ static arc(attrs) {
+ return new Arc(attrs);
+ }
+
+ static area(attrs) {
+ return new Area(attrs);
+ }
+
+ static assist(attrs) {
+ return new Assist(attrs);
+ }
+
+ static barcode(attrs) {
+ return new Barcode(attrs);
+ }
+
+ static bind(attrs) {
+ return new Bind(attrs);
+ }
+
+ static bindItems(attrs) {
+ return new BindItems(attrs);
+ }
+
+ static bookend(attrs) {
+ return new Bookend(attrs);
+ }
+
+ static boolean(attrs) {
+ return new BooleanElement(attrs);
+ }
+
+ static border(attrs) {
+ return new Border(attrs);
+ }
+
+ static break(attrs) {
+ return new Break(attrs);
+ }
+
+ static breakAfter(attrs) {
+ return new BreakAfter(attrs);
+ }
+
+ static breakBefore(attrs) {
+ return new BreakBefore(attrs);
+ }
+
+ static button(attrs) {
+ return new Button(attrs);
+ }
+
+ static calculate(attrs) {
+ return new Calculate(attrs);
+ }
+
+ static caption(attrs) {
+ return new Caption(attrs);
+ }
+
+ static certificate(attrs) {
+ return new Certificate(attrs);
+ }
+
+ static certificates(attrs) {
+ return new Certificates(attrs);
+ }
+
+ static checkButton(attrs) {
+ return new CheckButton(attrs);
+ }
+
+ static choiceList(attrs) {
+ return new ChoiceList(attrs);
+ }
+
+ static color(attrs) {
+ return new Color(attrs);
+ }
+
+ static comb(attrs) {
+ return new Comb(attrs);
+ }
+
+ static connect(attrs) {
+ return new Connect(attrs);
+ }
+
+ static contentArea(attrs) {
+ return new ContentArea(attrs);
+ }
+
+ static corner(attrs) {
+ return new Corner(attrs);
+ }
+
+ static date(attrs) {
+ return new DateElement(attrs);
+ }
+
+ static dateTime(attrs) {
+ return new DateTime(attrs);
+ }
+
+ static dateTimeEdit(attrs) {
+ return new DateTimeEdit(attrs);
+ }
+
+ static decimal(attrs) {
+ return new Decimal(attrs);
+ }
+
+ static defaultUi(attrs) {
+ return new DefaultUi(attrs);
+ }
+
+ static desc(attrs) {
+ return new Desc(attrs);
+ }
+
+ static digestMethod(attrs) {
+ return new DigestMethod(attrs);
+ }
+
+ static digestMethods(attrs) {
+ return new DigestMethods(attrs);
+ }
+
+ static draw(attrs) {
+ return new Draw(attrs);
+ }
+
+ static edge(attrs) {
+ return new Edge(attrs);
+ }
+
+ static encoding(attrs) {
+ return new Encoding(attrs);
+ }
+
+ static encodings(attrs) {
+ return new Encodings(attrs);
+ }
+
+ static encrypt(attrs) {
+ return new Encrypt(attrs);
+ }
+
+ static encryptData(attrs) {
+ return new EncryptData(attrs);
+ }
+
+ static encryption(attrs) {
+ return new Encryption(attrs);
+ }
+
+ static encryptionMethod(attrs) {
+ return new EncryptionMethod(attrs);
+ }
+
+ static encryptionMethods(attrs) {
+ return new EncryptionMethods(attrs);
+ }
+
+ static event(attrs) {
+ return new Event(attrs);
+ }
+
+ static exData(attrs) {
+ return new ExData(attrs);
+ }
+
+ static exObject(attrs) {
+ return new ExObject(attrs);
+ }
+
+ static exclGroup(attrs) {
+ return new ExclGroup(attrs);
+ }
+
+ static execute(attrs) {
+ return new Execute(attrs);
+ }
+
+ static extras(attrs) {
+ return new Extras(attrs);
+ }
+
+ static field(attrs) {
+ return new Field(attrs);
+ }
+
+ static fill(attrs) {
+ return new Fill(attrs);
+ }
+
+ static filter(attrs) {
+ return new Filter(attrs);
+ }
+
+ static float(attrs) {
+ return new Float(attrs);
+ }
+
+ static font(attrs) {
+ return new Font(attrs);
+ }
+
+ static format(attrs) {
+ return new Format(attrs);
+ }
+
+ static handler(attrs) {
+ return new Handler(attrs);
+ }
+
+ static hyphenation(attrs) {
+ return new Hyphenation(attrs);
+ }
+
+ static image(attrs) {
+ return new Image(attrs);
+ }
+
+ static imageEdit(attrs) {
+ return new ImageEdit(attrs);
+ }
+
+ static integer(attrs) {
+ return new Integer(attrs);
+ }
+
+ static issuers(attrs) {
+ return new Issuers(attrs);
+ }
+
+ static items(attrs) {
+ return new Items(attrs);
+ }
+
+ static keep(attrs) {
+ return new Keep(attrs);
+ }
+
+ static keyUsage(attrs) {
+ return new KeyUsage(attrs);
+ }
+
+ static line(attrs) {
+ return new Line(attrs);
+ }
+
+ static linear(attrs) {
+ return new Linear(attrs);
+ }
+
+ static lockDocument(attrs) {
+ return new LockDocument(attrs);
+ }
+
+ static manifest(attrs) {
+ return new Manifest(attrs);
+ }
+
+ static margin(attrs) {
+ return new Margin(attrs);
+ }
+
+ static mdp(attrs) {
+ return new Mdp(attrs);
+ }
+
+ static medium(attrs) {
+ return new Medium(attrs);
+ }
+
+ static message(attrs) {
+ return new Message(attrs);
+ }
+
+ static numericEdit(attrs) {
+ return new NumericEdit(attrs);
+ }
+
+ static occur(attrs) {
+ return new Occur(attrs);
+ }
+
+ static oid(attrs) {
+ return new Oid(attrs);
+ }
+
+ static oids(attrs) {
+ return new Oids(attrs);
+ }
+
+ static overflow(attrs) {
+ return new Overflow(attrs);
+ }
+
+ static pageArea(attrs) {
+ return new PageArea(attrs);
+ }
+
+ static pageSet(attrs) {
+ return new PageSet(attrs);
+ }
+
+ static para(attrs) {
+ return new Para(attrs);
+ }
+
+ static passwordEdit(attrs) {
+ return new PasswordEdit(attrs);
+ }
+
+ static pattern(attrs) {
+ return new Pattern(attrs);
+ }
+
+ static picture(attrs) {
+ return new Picture(attrs);
+ }
+
+ static proto(attrs) {
+ return new Proto(attrs);
+ }
+
+ static radial(attrs) {
+ return new Radial(attrs);
+ }
+
+ static reason(attrs) {
+ return new Reason(attrs);
+ }
+
+ static reasons(attrs) {
+ return new Reasons(attrs);
+ }
+
+ static rectangle(attrs) {
+ return new Rectangle(attrs);
+ }
+
+ static ref(attrs) {
+ return new RefElement(attrs);
+ }
+
+ static script(attrs) {
+ return new Script(attrs);
+ }
+
+ static setProperty(attrs) {
+ return new SetProperty(attrs);
+ }
+
+ static signData(attrs) {
+ return new SignData(attrs);
+ }
+
+ static signature(attrs) {
+ return new Signature(attrs);
+ }
+
+ static signing(attrs) {
+ return new Signing(attrs);
+ }
+
+ static solid(attrs) {
+ return new Solid(attrs);
+ }
+
+ static speak(attrs) {
+ return new Speak(attrs);
+ }
+
+ static stipple(attrs) {
+ return new Stipple(attrs);
+ }
+
+ static subform(attrs) {
+ return new Subform(attrs);
+ }
+
+ static subformSet(attrs) {
+ return new SubformSet(attrs);
+ }
+
+ static subjectDN(attrs) {
+ return new SubjectDN(attrs);
+ }
+
+ static subjectDNs(attrs) {
+ return new SubjectDNs(attrs);
+ }
+
+ static submit(attrs) {
+ return new Submit(attrs);
+ }
+
+ static template(attrs) {
+ return new Template(attrs);
+ }
+
+ static text(attrs) {
+ return new Text(attrs);
+ }
+
+ static textEdit(attrs) {
+ return new TextEdit(attrs);
+ }
+
+ static time(attrs) {
+ return new Time(attrs);
+ }
+
+ static timeStamp(attrs) {
+ return new TimeStamp(attrs);
+ }
+
+ static toolTip(attrs) {
+ return new ToolTip(attrs);
+ }
+
+ static traversal(attrs) {
+ return new Traversal(attrs);
+ }
+
+ static traverse(attrs) {
+ return new Traverse(attrs);
+ }
+
+ static ui(attrs) {
+ return new Ui(attrs);
+ }
+
+ static validate(attrs) {
+ return new Validate(attrs);
+ }
+
+ static value(attrs) {
+ return new Value(attrs);
+ }
+
+ static variables(attrs) {
+ return new Variables(attrs);
+ }
+
+}
+
+exports.TemplateNamespace = TemplateNamespace;
+
+/***/ }),
+/* 81 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.addHTML = addHTML;
+exports.checkDimensions = checkDimensions;
+exports.flushHTML = flushHTML;
+exports.getAvailableSpace = getAvailableSpace;
+
+var _xfa_object = __w_pdfjs_require__(75);
+
+var _html_utils = __w_pdfjs_require__(82);
+
+function createLine(node, children) {
+ return {
+ name: "div",
+ attributes: {
+ class: [node.layout === "lr-tb" ? "xfaLr" : "xfaRl"]
+ },
+ children
+ };
+}
+
+function flushHTML(node) {
+ if (!node[_xfa_object.$extra]) {
+ return null;
+ }
+
+ const attributes = node[_xfa_object.$extra].attributes;
+ const html = {
+ name: "div",
+ attributes,
+ children: node[_xfa_object.$extra].children
+ };
+
+ if (node[_xfa_object.$extra].failingNode) {
+ const htmlFromFailing = node[_xfa_object.$extra].failingNode[_xfa_object.$flushHTML]();
+
+ if (htmlFromFailing) {
+ if (node.layout.endsWith("-tb")) {
+ html.children.push(createLine(node, [htmlFromFailing]));
+ } else {
+ html.children.push(htmlFromFailing);
+ }
+ }
+ }
+
+ if (html.children.length === 0) {
+ return null;
+ }
+
+ return html;
+}
+
+function addHTML(node, html, bbox) {
+ const extra = node[_xfa_object.$extra];
+ const availableSpace = extra.availableSpace;
+ const [x, y, w, h] = bbox;
+
+ switch (node.layout) {
+ case "position":
+ {
+ extra.width = Math.max(extra.width, x + w);
+ extra.height = Math.max(extra.height, y + h);
+ extra.children.push(html);
+ break;
+ }
+
+ case "lr-tb":
+ case "rl-tb":
+ if (!extra.line || extra.attempt === 1) {
+ extra.line = createLine(node, []);
+ extra.children.push(extra.line);
+ extra.numberInLine = 0;
+ }
+
+ extra.numberInLine += 1;
+ extra.line.children.push(html);
+
+ if (extra.attempt === 0) {
+ extra.currentWidth += w;
+ extra.height = Math.max(extra.height, extra.prevHeight + h);
+ } else {
+ extra.currentWidth = w;
+ extra.prevHeight = extra.height;
+ extra.height += h;
+ extra.attempt = 0;
+ }
+
+ extra.width = Math.max(extra.width, extra.currentWidth);
+ break;
+
+ case "rl-row":
+ case "row":
+ {
+ extra.children.push(html);
+ extra.width += w;
+ extra.height = Math.max(extra.height, h);
+ const height = (0, _html_utils.measureToString)(extra.height);
+
+ for (const child of extra.children) {
+ child.attributes.style.height = height;
+ }
+
+ break;
+ }
+
+ case "table":
+ {
+ extra.width = Math.min(availableSpace.width, Math.max(extra.width, w));
+ extra.height += h;
+ extra.children.push(html);
+ break;
+ }
+
+ case "tb":
+ {
+ extra.width = availableSpace.width;
+ extra.height += h;
+ extra.children.push(html);
+ break;
+ }
+ }
+}
+
+function getAvailableSpace(node) {
+ const availableSpace = node[_xfa_object.$extra].availableSpace;
+ const marginV = node.margin ? node.margin.topInset + node.margin.bottomInset : 0;
+ const marginH = node.margin ? node.margin.leftInset + node.margin.rightInset : 0;
+
+ switch (node.layout) {
+ case "lr-tb":
+ case "rl-tb":
+ if (node[_xfa_object.$extra].attempt === 0) {
+ return {
+ width: availableSpace.width - marginH - node[_xfa_object.$extra].currentWidth,
+ height: availableSpace.height - marginV - node[_xfa_object.$extra].prevHeight
+ };
+ }
+
+ return {
+ width: availableSpace.width - marginH,
+ height: availableSpace.height - marginV - node[_xfa_object.$extra].height
+ };
+
+ case "rl-row":
+ case "row":
+ const width = node[_xfa_object.$extra].columnWidths.slice(node[_xfa_object.$extra].currentColumn).reduce((a, x) => a + x);
+
+ return {
+ width,
+ height: availableSpace.height - marginH
+ };
+
+ case "table":
+ case "tb":
+ return {
+ width: availableSpace.width - marginH,
+ height: availableSpace.height - marginV - node[_xfa_object.$extra].height
+ };
+
+ case "position":
+ default:
+ return availableSpace;
+ }
+}
+
+function getTransformedBBox(node) {
+ let w = node.w === "" ? NaN : node.w;
+ let h = node.h === "" ? NaN : node.h;
+ let [centerX, centerY] = [0, 0];
+
+ switch (node.anchorType || "") {
+ case "bottomCenter":
+ [centerX, centerY] = [w / 2, h];
+ break;
+
+ case "bottomLeft":
+ [centerX, centerY] = [0, h];
+ break;
+
+ case "bottomRight":
+ [centerX, centerY] = [w, h];
+ break;
+
+ case "middleCenter":
+ [centerX, centerY] = [w / 2, h / 2];
+ break;
+
+ case "middleLeft":
+ [centerX, centerY] = [0, h / 2];
+ break;
+
+ case "middleRight":
+ [centerX, centerY] = [w, h / 2];
+ break;
+
+ case "topCenter":
+ [centerX, centerY] = [w / 2, 0];
+ break;
+
+ case "topRight":
+ [centerX, centerY] = [w, 0];
+ break;
+ }
+
+ let x, y;
+
+ switch (node.rotate || 0) {
+ case 0:
+ [x, y] = [-centerX, -centerY];
+ break;
+
+ case 90:
+ [x, y] = [-centerY, centerX];
+ [w, h] = [h, -w];
+ break;
+
+ case 180:
+ [x, y] = [centerX, centerY];
+ [w, h] = [-w, -h];
+ break;
+
+ case 270:
+ [x, y] = [centerY, -centerX];
+ [w, h] = [-h, w];
+ break;
+ }
+
+ return [node.x + x + Math.min(0, w), node.y + y + Math.min(0, h), Math.abs(w), Math.abs(h)];
+}
+
+function checkDimensions(node, space) {
+ if (node[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].firstUnsplittable === null) {
+ return true;
+ }
+
+ if (node.w === 0 || node.h === 0) {
+ return true;
+ }
+
+ const ERROR = 2;
+
+ const parent = node[_xfa_object.$getSubformParent]();
+
+ const attempt = parent[_xfa_object.$extra] && parent[_xfa_object.$extra].attempt || 0;
+ const [, y, w, h] = getTransformedBBox(node);
+
+ switch (parent.layout) {
+ case "lr-tb":
+ case "rl-tb":
+ if (attempt === 0) {
+ if (!node[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].noLayoutFailure) {
+ if (node.h !== "" && Math.round(h - space.height) > ERROR) {
+ return false;
+ }
+
+ if (node.w !== "") {
+ if (Math.round(w - space.width) <= ERROR) {
+ return true;
+ }
+
+ if (parent[_xfa_object.$extra].numberInLine === 0) {
+ return space.height > 0;
+ }
+
+ return false;
+ }
+
+ return space.width > 0;
+ }
+
+ if (node.w !== "") {
+ return Math.round(w - space.width) <= ERROR;
+ }
+
+ return space.width > 0;
+ }
+
+ if (node[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].noLayoutFailure) {
+ return true;
+ }
+
+ if (node.h !== "" && Math.round(h - space.height) > ERROR) {
+ return false;
+ }
+
+ if (node.w === "" || Math.round(w - space.width) <= ERROR) {
+ return space.height > 0;
+ }
+
+ if (parent[_xfa_object.$isThereMoreWidth]()) {
+ return false;
+ }
+
+ return space.height > 0;
+
+ case "table":
+ case "tb":
+ if (node[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].noLayoutFailure) {
+ return true;
+ }
+
+ if (node.h !== "" && !node[_xfa_object.$isSplittable]()) {
+ return Math.round(h - space.height) <= ERROR;
+ }
+
+ if (node.w === "" || Math.round(w - space.width) <= ERROR) {
+ return space.height > 0;
+ }
+
+ if (parent[_xfa_object.$isThereMoreWidth]()) {
+ return false;
+ }
+
+ return space.height > 0;
+
+ case "position":
+ if (node[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].noLayoutFailure) {
+ return true;
+ }
+
+ if (node.h === "" || Math.round(h + y - space.height) <= ERROR) {
+ return true;
+ }
+
+ const area = node[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].currentContentArea;
+
+ return h + y > area.h;
+
+ case "rl-row":
+ case "row":
+ if (node[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].noLayoutFailure) {
+ return true;
+ }
+
+ if (node.h !== "") {
+ return Math.round(h - space.height) <= ERROR;
+ }
+
+ return true;
+
+ default:
+ return true;
+ }
+}
+
+/***/ }),
+/* 82 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.computeBbox = computeBbox;
+exports.createWrapper = createWrapper;
+exports.fixDimensions = fixDimensions;
+exports.fixTextIndent = fixTextIndent;
+exports.isPrintOnly = isPrintOnly;
+exports.layoutClass = layoutClass;
+exports.layoutNode = layoutNode;
+exports.measureToString = measureToString;
+exports.setAccess = setAccess;
+exports.setFontFamily = setFontFamily;
+exports.setMinMaxDimensions = setMinMaxDimensions;
+exports.setPara = setPara;
+exports.toStyle = toStyle;
+
+var _xfa_object = __w_pdfjs_require__(75);
+
+var _utils = __w_pdfjs_require__(76);
+
+var _fonts = __w_pdfjs_require__(83);
+
+var _text = __w_pdfjs_require__(84);
+
+var _util = __w_pdfjs_require__(2);
+
+function measureToString(m) {
+ if (typeof m === "string") {
+ return "0px";
+ }
+
+ return Number.isInteger(m) ? `${m}px` : `${m.toFixed(2)}px`;
+}
+
+const converters = {
+ anchorType(node, style) {
+ const parent = node[_xfa_object.$getSubformParent]();
+
+ if (!parent || parent.layout && parent.layout !== "position") {
+ return;
+ }
+
+ if (!("transform" in style)) {
+ style.transform = "";
+ }
+
+ switch (node.anchorType) {
+ case "bottomCenter":
+ style.transform += "translate(-50%, -100%)";
+ break;
+
+ case "bottomLeft":
+ style.transform += "translate(0,-100%)";
+ break;
+
+ case "bottomRight":
+ style.transform += "translate(-100%,-100%)";
+ break;
+
+ case "middleCenter":
+ style.transform += "translate(-50%,-50%)";
+ break;
+
+ case "middleLeft":
+ style.transform += "translate(0,-50%)";
+ break;
+
+ case "middleRight":
+ style.transform += "translate(-100%,-50%)";
+ break;
+
+ case "topCenter":
+ style.transform += "translate(-50%,0)";
+ break;
+
+ case "topRight":
+ style.transform += "translate(-100%,0)";
+ break;
+ }
+ },
+
+ dimensions(node, style) {
+ const parent = node[_xfa_object.$getSubformParent]();
+
+ let width = node.w;
+ const height = node.h;
+
+ if (parent.layout && parent.layout.includes("row")) {
+ const extra = parent[_xfa_object.$extra];
+ const colSpan = node.colSpan;
+ let w;
+
+ if (colSpan === -1) {
+ w = extra.columnWidths.slice(extra.currentColumn).reduce((a, x) => a + x, 0);
+ extra.currentColumn = 0;
+ } else {
+ w = extra.columnWidths.slice(extra.currentColumn, extra.currentColumn + colSpan).reduce((a, x) => a + x, 0);
+ extra.currentColumn = (extra.currentColumn + node.colSpan) % extra.columnWidths.length;
+ }
+
+ if (!isNaN(w)) {
+ width = node.w = w;
+ }
+ }
+
+ if (width !== "") {
+ style.width = measureToString(width);
+ } else {
+ style.width = "auto";
+ }
+
+ if (height !== "") {
+ style.height = measureToString(height);
+ } else {
+ style.height = "auto";
+ }
+ },
+
+ position(node, style) {
+ const parent = node[_xfa_object.$getSubformParent]();
+
+ if (parent && parent.layout && parent.layout !== "position") {
+ return;
+ }
+
+ style.position = "absolute";
+ style.left = measureToString(node.x);
+ style.top = measureToString(node.y);
+ },
+
+ rotate(node, style) {
+ if (node.rotate) {
+ if (!("transform" in style)) {
+ style.transform = "";
+ }
+
+ style.transform += `rotate(-${node.rotate}deg)`;
+ style.transformOrigin = "top left";
+ }
+ },
+
+ presence(node, style) {
+ switch (node.presence) {
+ case "invisible":
+ style.visibility = "hidden";
+ break;
+
+ case "hidden":
+ case "inactive":
+ style.display = "none";
+ break;
+ }
+ },
+
+ hAlign(node, style) {
+ if (node[_xfa_object.$nodeName] === "para") {
+ switch (node.hAlign) {
+ case "justifyAll":
+ style.textAlign = "justify-all";
+ break;
+
+ case "radix":
+ style.textAlign = "left";
+ break;
+
+ default:
+ style.textAlign = node.hAlign;
+ }
+ } else {
+ switch (node.hAlign) {
+ case "left":
+ style.alignSelf = "start";
+ break;
+
+ case "center":
+ style.alignSelf = "center";
+ break;
+
+ case "right":
+ style.alignSelf = "end";
+ break;
+ }
+ }
+ },
+
+ margin(node, style) {
+ if (node.margin) {
+ style.margin = node.margin[_xfa_object.$toStyle]().margin;
+ }
+ }
+
+};
+
+function setMinMaxDimensions(node, style) {
+ const parent = node[_xfa_object.$getSubformParent]();
+
+ if (parent.layout === "position") {
+ if (node.minW > 0) {
+ style.minWidth = measureToString(node.minW);
+ }
+
+ if (node.maxW > 0) {
+ style.maxWidth = measureToString(node.maxW);
+ }
+
+ if (node.minH > 0) {
+ style.minHeight = measureToString(node.minH);
+ }
+
+ if (node.maxH > 0) {
+ style.maxHeight = measureToString(node.maxH);
+ }
+ }
+}
+
+function layoutText(text, xfaFont, margin, lineHeight, fontFinder, width) {
+ const measure = new _text.TextMeasure(xfaFont, margin, lineHeight, fontFinder);
+
+ if (typeof text === "string") {
+ measure.addString(text);
+ } else {
+ text[_xfa_object.$pushGlyphs](measure);
+ }
+
+ return measure.compute(width);
+}
+
+function layoutNode(node, availableSpace) {
+ let height = null;
+ let width = null;
+ let isBroken = false;
+
+ if ((!node.w || !node.h) && node.value) {
+ let marginH = 0;
+ let marginV = 0;
+
+ if (node.margin) {
+ marginH = node.margin.leftInset + node.margin.rightInset;
+ marginV = node.margin.topInset + node.margin.bottomInset;
+ }
+
+ let lineHeight = null;
+ let margin = null;
+
+ if (node.para) {
+ margin = Object.create(null);
+ lineHeight = node.para.lineHeight === "" ? null : node.para.lineHeight;
+ margin.top = node.para.spaceAbove === "" ? 0 : node.para.spaceAbove;
+ margin.bottom = node.para.spaceBelow === "" ? 0 : node.para.spaceBelow;
+ margin.left = node.para.marginLeft === "" ? 0 : node.para.marginLeft;
+ margin.right = node.para.marginRight === "" ? 0 : node.para.marginRight;
+ }
+
+ let font = node.font;
+
+ if (!font) {
+ const root = node[_xfa_object.$getTemplateRoot]();
+
+ let parent = node[_xfa_object.$getParent]();
+
+ while (parent !== root) {
+ if (parent.font) {
+ font = parent.font;
+ break;
+ }
+
+ parent = parent[_xfa_object.$getParent]();
+ }
+ }
+
+ const maxWidth = !node.w ? availableSpace.width : node.w;
+ const fontFinder = node[_xfa_object.$globalData].fontFinder;
+
+ if (node.value.exData && node.value.exData[_xfa_object.$content] && node.value.exData.contentType === "text/html") {
+ const res = layoutText(node.value.exData[_xfa_object.$content], font, margin, lineHeight, fontFinder, maxWidth);
+ width = res.width;
+ height = res.height;
+ isBroken = res.isBroken;
+ } else {
+ const text = node.value[_xfa_object.$text]();
+
+ if (text) {
+ const res = layoutText(text, font, margin, lineHeight, fontFinder, maxWidth);
+ width = res.width;
+ height = res.height;
+ isBroken = res.isBroken;
+ }
+ }
+
+ if (width !== null && !node.w) {
+ width += marginH;
+ }
+
+ if (height !== null && !node.h) {
+ height += marginV;
+ }
+ }
+
+ return {
+ w: width,
+ h: height,
+ isBroken
+ };
+}
+
+function computeBbox(node, html, availableSpace) {
+ let bbox;
+
+ if (node.w !== "" && node.h !== "") {
+ bbox = [node.x, node.y, node.w, node.h];
+ } else {
+ if (!availableSpace) {
+ return null;
+ }
+
+ let width = node.w;
+
+ if (width === "") {
+ if (node.maxW === 0) {
+ const parent = node[_xfa_object.$getSubformParent]();
+
+ if (parent.layout === "position" && parent.w !== "") {
+ width = 0;
+ } else {
+ width = node.minW;
+ }
+ } else {
+ width = Math.min(node.maxW, availableSpace.width);
+ }
+
+ html.attributes.style.width = measureToString(width);
+ }
+
+ let height = node.h;
+
+ if (height === "") {
+ if (node.maxH === 0) {
+ const parent = node[_xfa_object.$getSubformParent]();
+
+ if (parent.layout === "position" && parent.h !== "") {
+ height = 0;
+ } else {
+ height = node.minH;
+ }
+ } else {
+ height = Math.min(node.maxH, availableSpace.height);
+ }
+
+ html.attributes.style.height = measureToString(height);
+ }
+
+ bbox = [node.x, node.y, width, height];
+ }
+
+ return bbox;
+}
+
+function fixDimensions(node) {
+ const parent = node[_xfa_object.$getSubformParent]();
+
+ if (parent.layout && parent.layout.includes("row")) {
+ const extra = parent[_xfa_object.$extra];
+ const colSpan = node.colSpan;
+ let width;
+
+ if (colSpan === -1) {
+ width = extra.columnWidths.slice(extra.currentColumn).reduce((a, w) => a + w, 0);
+ } else {
+ width = extra.columnWidths.slice(extra.currentColumn, extra.currentColumn + colSpan).reduce((a, w) => a + w, 0);
+ }
+
+ if (!isNaN(width)) {
+ node.w = width;
+ }
+ }
+
+ if (parent.layout && parent.layout !== "position") {
+ node.x = node.y = 0;
+ }
+
+ if (node.layout === "table") {
+ if (node.w === "" && Array.isArray(node.columnWidths)) {
+ node.w = node.columnWidths.reduce((a, x) => a + x, 0);
+ }
+ }
+}
+
+function layoutClass(node) {
+ switch (node.layout) {
+ case "position":
+ return "xfaPosition";
+
+ case "lr-tb":
+ return "xfaLrTb";
+
+ case "rl-row":
+ return "xfaRlRow";
+
+ case "rl-tb":
+ return "xfaRlTb";
+
+ case "row":
+ return "xfaRow";
+
+ case "table":
+ return "xfaTable";
+
+ case "tb":
+ return "xfaTb";
+
+ default:
+ return "xfaPosition";
+ }
+}
+
+function toStyle(node, ...names) {
+ const style = Object.create(null);
+
+ for (const name of names) {
+ const value = node[name];
+
+ if (value === null) {
+ continue;
+ }
+
+ if (converters.hasOwnProperty(name)) {
+ converters[name](node, style);
+ continue;
+ }
+
+ if (value instanceof _xfa_object.XFAObject) {
+ const newStyle = value[_xfa_object.$toStyle]();
+
+ if (newStyle) {
+ Object.assign(style, newStyle);
+ } else {
+ (0, _util.warn)(`(DEBUG) - XFA - style for ${name} not implemented yet`);
+ }
+ }
+ }
+
+ return style;
+}
+
+function createWrapper(node, html) {
+ const {
+ attributes
+ } = html;
+ const {
+ style
+ } = attributes;
+ const wrapper = {
+ name: "div",
+ attributes: {
+ class: ["xfaWrapper"],
+ style: Object.create(null)
+ },
+ children: []
+ };
+ attributes.class.push("xfaWrapped");
+
+ if (node.border) {
+ const {
+ widths,
+ insets
+ } = node.border[_xfa_object.$extra];
+ let width, height;
+ let top = insets[0];
+ let left = insets[3];
+ const insetsH = insets[0] + insets[2];
+ const insetsW = insets[1] + insets[3];
+
+ switch (node.border.hand) {
+ case "even":
+ top -= widths[0] / 2;
+ left -= widths[3] / 2;
+ width = `calc(100% + ${(widths[1] + widths[3]) / 2 - insetsW}px)`;
+ height = `calc(100% + ${(widths[0] + widths[2]) / 2 - insetsH}px)`;
+ break;
+
+ case "left":
+ top -= widths[0];
+ left -= widths[3];
+ width = `calc(100% + ${widths[1] + widths[3] - insetsW}px)`;
+ height = `calc(100% + ${widths[0] + widths[2] - insetsH}px)`;
+ break;
+
+ case "right":
+ width = insetsW ? `calc(100% - ${insetsW}px)` : "100%";
+ height = insetsH ? `calc(100% - ${insetsH}px)` : "100%";
+ break;
+ }
+
+ const classNames = ["xfaBorder"];
+
+ if (isPrintOnly(node.border)) {
+ classNames.push("xfaPrintOnly");
+ }
+
+ const border = {
+ name: "div",
+ attributes: {
+ class: classNames,
+ style: {
+ top: `${top}px`,
+ left: `${left}px`,
+ width,
+ height
+ }
+ },
+ children: []
+ };
+
+ for (const key of ["border", "borderWidth", "borderColor", "borderRadius", "borderStyle"]) {
+ if (style[key] !== undefined) {
+ border.attributes.style[key] = style[key];
+ delete style[key];
+ }
+ }
+
+ wrapper.children.push(border, html);
+ } else {
+ wrapper.children.push(html);
+ }
+
+ for (const key of ["background", "backgroundClip", "top", "left", "width", "height", "minWidth", "minHeight", "maxWidth", "maxHeight", "transform", "transformOrigin", "visibility"]) {
+ if (style[key] !== undefined) {
+ wrapper.attributes.style[key] = style[key];
+ delete style[key];
+ }
+ }
+
+ if (style.position === "absolute") {
+ wrapper.attributes.style.position = "absolute";
+ } else {
+ wrapper.attributes.style.position = "relative";
+ }
+
+ delete style.position;
+
+ if (style.alignSelf) {
+ wrapper.attributes.style.alignSelf = style.alignSelf;
+ delete style.alignSelf;
+ }
+
+ return wrapper;
+}
+
+function fixTextIndent(styles) {
+ const indent = (0, _utils.getMeasurement)(styles.textIndent, "0px");
+
+ if (indent >= 0) {
+ return;
+ }
+
+ const align = styles.textAlign === "right" ? "right" : "left";
+ const name = "padding" + (align === "left" ? "Left" : "Right");
+ const padding = (0, _utils.getMeasurement)(styles[name], "0px");
+ styles[name] = `${padding - indent}px`;
+}
+
+function setAccess(node, classNames) {
+ switch (node.access) {
+ case "nonInteractive":
+ classNames.push("xfaNonInteractive");
+ break;
+
+ case "readOnly":
+ classNames.push("xfaReadOnly");
+ break;
+
+ case "protected":
+ classNames.push("xfaDisabled");
+ break;
+ }
+}
+
+function isPrintOnly(node) {
+ return node.relevant.length > 0 && !node.relevant[0].excluded && node.relevant[0].viewname === "print";
+}
+
+function setPara(node, nodeStyle, value) {
+ if (value.attributes.class && value.attributes.class.includes("xfaRich")) {
+ if (nodeStyle) {
+ if (node.h === "") {
+ nodeStyle.height = "auto";
+ }
+
+ if (node.w === "") {
+ nodeStyle.width = "auto";
+ }
+ }
+
+ if (node.para) {
+ const valueStyle = value.attributes.style;
+ valueStyle.display = "flex";
+ valueStyle.flexDirection = "column";
+
+ switch (node.para.vAlign) {
+ case "top":
+ valueStyle.justifyContent = "start";
+ break;
+
+ case "bottom":
+ valueStyle.justifyContent = "end";
+ break;
+
+ case "middle":
+ valueStyle.justifyContent = "center";
+ break;
+ }
+
+ const paraStyle = node.para[_xfa_object.$toStyle]();
+
+ for (const [key, val] of Object.entries(paraStyle)) {
+ if (!(key in valueStyle)) {
+ valueStyle[key] = val;
+ }
+ }
+ }
+ }
+}
+
+function setFontFamily(xfaFont, fontFinder, style) {
+ const name = (0, _utils.stripQuotes)(xfaFont.typeface);
+ const typeface = fontFinder.find(name);
+ style.fontFamily = `"${name}"`;
+
+ if (typeface) {
+ const {
+ fontFamily
+ } = typeface.regular.cssFontInfo;
+
+ if (fontFamily !== name) {
+ style.fontFamily = `"${fontFamily}"`;
+ }
+
+ if (style.lineHeight) {
+ return;
+ }
+
+ const pdfFont = (0, _fonts.selectFont)(xfaFont, typeface);
+
+ if (pdfFont && pdfFont.lineHeight > 0) {
+ style.lineHeight = Math.max(1.2, pdfFont.lineHeight);
+ } else {
+ style.lineHeight = 1.2;
+ }
+ }
+}
+
+/***/ }),
+/* 83 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.selectFont = selectFont;
+exports.FontFinder = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+class FontFinder {
+ constructor(pdfFonts) {
+ this.fonts = new Map();
+ this.cache = new Map();
+ this.warned = new Set();
+ this.defaultFont = null;
+ this.add(pdfFonts);
+ }
+
+ add(pdfFonts, reallyMissingFonts = null) {
+ for (const pdfFont of pdfFonts) {
+ this.addPdfFont(pdfFont);
+ }
+
+ for (const pdfFont of this.fonts.values()) {
+ if (!pdfFont.regular) {
+ pdfFont.regular = pdfFont.italic || pdfFont.bold || pdfFont.bolditalic;
+ }
+ }
+
+ if (!reallyMissingFonts || reallyMissingFonts.size === 0) {
+ return;
+ }
+
+ const myriad = this.fonts.get("PdfJS-Fallback-PdfJS-XFA");
+
+ for (const missing of reallyMissingFonts) {
+ this.fonts.set(missing, myriad);
+ }
+ }
+
+ addPdfFont(pdfFont) {
+ const cssFontInfo = pdfFont.cssFontInfo;
+ const name = cssFontInfo.fontFamily;
+ let font = this.fonts.get(name);
+
+ if (!font) {
+ font = Object.create(null);
+ this.fonts.set(name, font);
+
+ if (!this.defaultFont) {
+ this.defaultFont = font;
+ }
+ }
+
+ let property = "";
+ const fontWeight = parseFloat(cssFontInfo.fontWeight);
+
+ if (parseFloat(cssFontInfo.italicAngle) !== 0) {
+ property = fontWeight >= 700 ? "bolditalic" : "italic";
+ } else if (fontWeight >= 700) {
+ property = "bold";
+ }
+
+ if (!property) {
+ if (pdfFont.name.includes("Bold") || pdfFont.psName && pdfFont.psName.includes("Bold")) {
+ property = "bold";
+ }
+
+ if (pdfFont.name.includes("Italic") || pdfFont.name.endsWith("It") || pdfFont.psName && (pdfFont.psName.includes("Italic") || pdfFont.psName.endsWith("It"))) {
+ property += "italic";
+ }
+ }
+
+ if (!property) {
+ property = "regular";
+ }
+
+ font[property] = pdfFont;
+ }
+
+ getDefault() {
+ return this.defaultFont;
+ }
+
+ find(fontName, mustWarn = true) {
+ let font = this.fonts.get(fontName) || this.cache.get(fontName);
+
+ if (font) {
+ return font;
+ }
+
+ const pattern = /,|-|_| |bolditalic|bold|italic|regular|it/gi;
+ let name = fontName.replace(pattern, "");
+ font = this.fonts.get(name);
+
+ if (font) {
+ this.cache.set(fontName, font);
+ return font;
+ }
+
+ name = name.toLowerCase();
+ const maybe = [];
+
+ for (const [family, pdfFont] of this.fonts.entries()) {
+ if (family.replace(pattern, "").toLowerCase().startsWith(name)) {
+ maybe.push(pdfFont);
+ }
+ }
+
+ if (maybe.length === 0) {
+ for (const [, pdfFont] of this.fonts.entries()) {
+ if (pdfFont.regular.name && pdfFont.regular.name.replace(pattern, "").toLowerCase().startsWith(name)) {
+ maybe.push(pdfFont);
+ }
+ }
+ }
+
+ if (maybe.length === 0) {
+ name = name.replace(/psmt|mt/gi, "");
+
+ for (const [family, pdfFont] of this.fonts.entries()) {
+ if (family.replace(pattern, "").toLowerCase().startsWith(name)) {
+ maybe.push(pdfFont);
+ }
+ }
+ }
+
+ if (maybe.length === 0) {
+ for (const pdfFont of this.fonts.values()) {
+ if (pdfFont.regular.name && pdfFont.regular.name.replace(pattern, "").toLowerCase().startsWith(name)) {
+ maybe.push(pdfFont);
+ }
+ }
+ }
+
+ if (maybe.length >= 1) {
+ if (maybe.length !== 1 && mustWarn) {
+ (0, _util.warn)(`XFA - Too many choices to guess the correct font: ${fontName}`);
+ }
+
+ this.cache.set(fontName, maybe[0]);
+ return maybe[0];
+ }
+
+ if (mustWarn && !this.warned.has(fontName)) {
+ this.warned.add(fontName);
+ (0, _util.warn)(`XFA - Cannot find the font: ${fontName}`);
+ }
+
+ return null;
+ }
+
+}
+
+exports.FontFinder = FontFinder;
+
+function selectFont(xfaFont, typeface) {
+ if (xfaFont.posture === "italic") {
+ if (xfaFont.weight === "bold") {
+ return typeface.bolditalic;
+ }
+
+ return typeface.italic;
+ } else if (xfaFont.weight === "bold") {
+ return typeface.bold;
+ }
+
+ return typeface.regular;
+}
+
+/***/ }),
+/* 84 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.TextMeasure = void 0;
+
+var _fonts = __w_pdfjs_require__(83);
+
+const WIDTH_FACTOR = 1.01;
+
+class FontInfo {
+ constructor(xfaFont, margin, lineHeight, fontFinder) {
+ this.lineHeight = lineHeight;
+ this.paraMargin = margin || {
+ top: 0,
+ bottom: 0,
+ left: 0,
+ right: 0
+ };
+
+ if (!xfaFont) {
+ [this.pdfFont, this.xfaFont] = this.defaultFont(fontFinder);
+ return;
+ }
+
+ this.xfaFont = {
+ typeface: xfaFont.typeface,
+ posture: xfaFont.posture,
+ weight: xfaFont.weight,
+ size: xfaFont.size,
+ letterSpacing: xfaFont.letterSpacing
+ };
+ const typeface = fontFinder.find(xfaFont.typeface);
+
+ if (!typeface) {
+ [this.pdfFont, this.xfaFont] = this.defaultFont(fontFinder);
+ return;
+ }
+
+ this.pdfFont = (0, _fonts.selectFont)(xfaFont, typeface);
+
+ if (!this.pdfFont) {
+ [this.pdfFont, this.xfaFont] = this.defaultFont(fontFinder);
+ }
+ }
+
+ defaultFont(fontFinder) {
+ const font = fontFinder.find("Helvetica", false) || fontFinder.find("Myriad Pro", false) || fontFinder.find("Arial", false) || fontFinder.getDefault();
+
+ if (font && font.regular) {
+ const pdfFont = font.regular;
+ const info = pdfFont.cssFontInfo;
+ const xfaFont = {
+ typeface: info.fontFamily,
+ posture: "normal",
+ weight: "normal",
+ size: 10,
+ letterSpacing: 0
+ };
+ return [pdfFont, xfaFont];
+ }
+
+ const xfaFont = {
+ typeface: "Courier",
+ posture: "normal",
+ weight: "normal",
+ size: 10,
+ letterSpacing: 0
+ };
+ return [null, xfaFont];
+ }
+
+}
+
+class FontSelector {
+ constructor(defaultXfaFont, defaultParaMargin, defaultLineHeight, fontFinder) {
+ this.fontFinder = fontFinder;
+ this.stack = [new FontInfo(defaultXfaFont, defaultParaMargin, defaultLineHeight, fontFinder)];
+ }
+
+ pushData(xfaFont, margin, lineHeight) {
+ const lastFont = this.stack[this.stack.length - 1];
+
+ for (const name of ["typeface", "posture", "weight", "size", "letterSpacing"]) {
+ if (!xfaFont[name]) {
+ xfaFont[name] = lastFont.xfaFont[name];
+ }
+ }
+
+ for (const name of ["top", "bottom", "left", "right"]) {
+ if (isNaN(margin[name])) {
+ margin[name] = lastFont.paraMargin[name];
+ }
+ }
+
+ const fontInfo = new FontInfo(xfaFont, margin, lineHeight || lastFont.lineHeight, this.fontFinder);
+
+ if (!fontInfo.pdfFont) {
+ fontInfo.pdfFont = lastFont.pdfFont;
+ }
+
+ this.stack.push(fontInfo);
+ }
+
+ popFont() {
+ this.stack.pop();
+ }
+
+ topFont() {
+ return this.stack[this.stack.length - 1];
+ }
+
+}
+
+class TextMeasure {
+ constructor(defaultXfaFont, defaultParaMargin, defaultLineHeight, fonts) {
+ this.glyphs = [];
+ this.fontSelector = new FontSelector(defaultXfaFont, defaultParaMargin, defaultLineHeight, fonts);
+ this.extraHeight = 0;
+ }
+
+ pushData(xfaFont, margin, lineHeight) {
+ this.fontSelector.pushData(xfaFont, margin, lineHeight);
+ }
+
+ popFont(xfaFont) {
+ return this.fontSelector.popFont();
+ }
+
+ addPara() {
+ const lastFont = this.fontSelector.topFont();
+ this.extraHeight += lastFont.paraMargin.top + lastFont.paraMargin.bottom;
+ }
+
+ addString(str) {
+ if (!str) {
+ return;
+ }
+
+ const lastFont = this.fontSelector.topFont();
+ const fontSize = lastFont.xfaFont.size;
+
+ if (lastFont.pdfFont) {
+ const letterSpacing = lastFont.xfaFont.letterSpacing;
+ const pdfFont = lastFont.pdfFont;
+ const lineHeight = lastFont.lineHeight || Math.ceil(Math.max(1.2, pdfFont.lineHeight) * fontSize);
+ const scale = fontSize / 1000;
+
+ for (const line of str.split(/[\u2029\n]/)) {
+ const encodedLine = pdfFont.encodeString(line).join("");
+ const glyphs = pdfFont.charsToGlyphs(encodedLine);
+
+ for (const glyph of glyphs) {
+ this.glyphs.push([glyph.width * scale + letterSpacing, lineHeight, glyph.unicode === " ", false]);
+ }
+
+ this.glyphs.push([0, 0, false, true]);
+ }
+
+ this.glyphs.pop();
+ return;
+ }
+
+ for (const line of str.split(/[\u2029\n]/)) {
+ for (const char of line.split("")) {
+ this.glyphs.push([fontSize, fontSize, char === " ", false]);
+ }
+
+ this.glyphs.push([0, 0, false, true]);
+ }
+
+ this.glyphs.pop();
+ }
+
+ compute(maxWidth) {
+ let lastSpacePos = -1,
+ lastSpaceWidth = 0,
+ width = 0,
+ height = 0,
+ currentLineWidth = 0,
+ currentLineHeight = 0;
+ let isBroken = false;
+
+ for (let i = 0, ii = this.glyphs.length; i < ii; i++) {
+ const [glyphWidth, glyphHeight, isSpace, isEOL] = this.glyphs[i];
+
+ if (isEOL) {
+ width = Math.max(width, currentLineWidth);
+ currentLineWidth = 0;
+ height += currentLineHeight;
+ currentLineHeight = glyphHeight;
+ lastSpacePos = -1;
+ lastSpaceWidth = 0;
+ continue;
+ }
+
+ if (isSpace) {
+ if (currentLineWidth + glyphWidth > maxWidth) {
+ width = Math.max(width, currentLineWidth);
+ currentLineWidth = 0;
+ height += currentLineHeight;
+ currentLineHeight = glyphHeight;
+ lastSpacePos = -1;
+ lastSpaceWidth = 0;
+ isBroken = true;
+ } else {
+ currentLineHeight = Math.max(glyphHeight, currentLineHeight);
+ lastSpaceWidth = currentLineWidth;
+ currentLineWidth += glyphWidth;
+ lastSpacePos = i;
+ }
+
+ continue;
+ }
+
+ if (currentLineWidth + glyphWidth > maxWidth) {
+ height += currentLineHeight;
+ currentLineHeight = glyphHeight;
+
+ if (lastSpacePos !== -1) {
+ i = lastSpacePos;
+ width = Math.max(width, lastSpaceWidth);
+ currentLineWidth = 0;
+ lastSpacePos = -1;
+ lastSpaceWidth = 0;
+ } else {
+ width = Math.max(width, currentLineWidth);
+ currentLineWidth = glyphWidth;
+ }
+
+ isBroken = true;
+ continue;
+ }
+
+ currentLineWidth += glyphWidth;
+ currentLineHeight = Math.max(glyphHeight, currentLineHeight);
+ }
+
+ width = Math.max(width, currentLineWidth);
+ height += currentLineHeight + this.extraHeight;
+ return {
+ width: WIDTH_FACTOR * width,
+ height,
+ isBroken
+ };
+ }
+
+}
+
+exports.TextMeasure = TextMeasure;
+
+/***/ }),
+/* 85 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.DataHandler = void 0;
+
+var _xfa_object = __w_pdfjs_require__(75);
+
+class DataHandler {
+ constructor(root, data) {
+ this.data = data;
+ this.dataset = root.datasets || null;
+ }
+
+ serialize(storage) {
+ const stack = [[-1, this.data[_xfa_object.$getChildren]()]];
+
+ while (stack.length > 0) {
+ const last = stack[stack.length - 1];
+ const [i, children] = last;
+
+ if (i + 1 === children.length) {
+ stack.pop();
+ continue;
+ }
+
+ const child = children[++last[0]];
+ const storageEntry = storage.get(child[_xfa_object.$uid]);
+
+ if (storageEntry) {
+ child[_xfa_object.$setValue](storageEntry);
+ } else {
+ const attributes = child[_xfa_object.$getAttributes]();
+
+ for (const value of attributes.values()) {
+ const entry = storage.get(value[_xfa_object.$uid]);
+
+ if (entry) {
+ value[_xfa_object.$setValue](entry);
+
+ break;
+ }
+ }
+ }
+
+ const nodes = child[_xfa_object.$getChildren]();
+
+ if (nodes.length > 0) {
+ stack.push([-1, nodes]);
+ }
+ }
+
+ const buf = [`<xfa:datasets xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/">`];
+
+ if (this.dataset) {
+ for (const child of this.dataset[_xfa_object.$getChildren]()) {
+ if (child[_xfa_object.$nodeName] !== "data") {
+ child[_xfa_object.$toString](buf);
+ }
+ }
+ }
+
+ this.data[_xfa_object.$toString](buf);
+
+ buf.push("</xfa:datasets>");
+ return buf.join("");
+ }
+
+}
+
+exports.DataHandler = DataHandler;
+
+/***/ }),
+/* 86 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.XFAParser = void 0;
+
+var _xfa_object = __w_pdfjs_require__(75);
+
+var _xml_parser = __w_pdfjs_require__(68);
+
+var _builder = __w_pdfjs_require__(87);
+
+var _util = __w_pdfjs_require__(2);
+
+class XFAParser extends _xml_parser.XMLParserBase {
+ constructor() {
+ super();
+ this._builder = new _builder.Builder();
+ this._stack = [];
+ this._globalData = {
+ usedTypefaces: new Set()
+ };
+ this._ids = new Map();
+ this._current = this._builder.buildRoot(this._ids);
+ this._errorCode = _xml_parser.XMLParserErrorCode.NoError;
+ this._whiteRegex = /^\s+$/;
+ this._nbsps = /\xa0+/g;
+ }
+
+ parse(data) {
+ this.parseXml(data);
+
+ if (this._errorCode !== _xml_parser.XMLParserErrorCode.NoError) {
+ return undefined;
+ }
+
+ this._current[_xfa_object.$finalize]();
+
+ return this._current.element;
+ }
+
+ onText(text) {
+ text = text.replace(this._nbsps, match => match.slice(1) + " ");
+
+ if (this._current[_xfa_object.$acceptWhitespace]()) {
+ this._current[_xfa_object.$onText](text);
+
+ return;
+ }
+
+ if (this._whiteRegex.test(text)) {
+ return;
+ }
+
+ this._current[_xfa_object.$onText](text.trim());
+ }
+
+ onCdata(text) {
+ this._current[_xfa_object.$onText](text);
+ }
+
+ _mkAttributes(attributes, tagName) {
+ let namespace = null;
+ let prefixes = null;
+ const attributeObj = Object.create({});
+
+ for (const {
+ name,
+ value
+ } of attributes) {
+ if (name === "xmlns") {
+ if (!namespace) {
+ namespace = value;
+ } else {
+ (0, _util.warn)(`XFA - multiple namespace definition in <${tagName}>`);
+ }
+ } else if (name.startsWith("xmlns:")) {
+ const prefix = name.substring("xmlns:".length);
+
+ if (!prefixes) {
+ prefixes = [];
+ }
+
+ prefixes.push({
+ prefix,
+ value
+ });
+ } else {
+ const i = name.indexOf(":");
+
+ if (i === -1) {
+ attributeObj[name] = value;
+ } else {
+ let nsAttrs = attributeObj[_xfa_object.$nsAttributes];
+
+ if (!nsAttrs) {
+ nsAttrs = attributeObj[_xfa_object.$nsAttributes] = Object.create(null);
+ }
+
+ const [ns, attrName] = [name.slice(0, i), name.slice(i + 1)];
+ let attrs = nsAttrs[ns];
+
+ if (!attrs) {
+ attrs = nsAttrs[ns] = Object.create(null);
+ }
+
+ attrs[attrName] = value;
+ }
+ }
+ }
+
+ return [namespace, prefixes, attributeObj];
+ }
+
+ _getNameAndPrefix(name, nsAgnostic) {
+ const i = name.indexOf(":");
+
+ if (i === -1) {
+ return [name, null];
+ }
+
+ return [name.substring(i + 1), nsAgnostic ? "" : name.substring(0, i)];
+ }
+
+ onBeginElement(tagName, attributes, isEmpty) {
+ const [namespace, prefixes, attributesObj] = this._mkAttributes(attributes, tagName);
+
+ const [name, nsPrefix] = this._getNameAndPrefix(tagName, this._builder.isNsAgnostic());
+
+ const node = this._builder.build({
+ nsPrefix,
+ name,
+ attributes: attributesObj,
+ namespace,
+ prefixes
+ });
+
+ node[_xfa_object.$globalData] = this._globalData;
+
+ if (isEmpty) {
+ node[_xfa_object.$finalize]();
+
+ if (this._current[_xfa_object.$onChild](node)) {
+ node[_xfa_object.$setId](this._ids);
+ }
+
+ node[_xfa_object.$clean](this._builder);
+
+ return;
+ }
+
+ this._stack.push(this._current);
+
+ this._current = node;
+ }
+
+ onEndElement(name) {
+ const node = this._current;
+
+ if (node[_xfa_object.$isCDATAXml]() && typeof node[_xfa_object.$content] === "string") {
+ const parser = new XFAParser();
+ parser._globalData = this._globalData;
+ const root = parser.parse(node[_xfa_object.$content]);
+ node[_xfa_object.$content] = null;
+
+ node[_xfa_object.$onChild](root);
+ }
+
+ node[_xfa_object.$finalize]();
+
+ this._current = this._stack.pop();
+
+ if (this._current[_xfa_object.$onChild](node)) {
+ node[_xfa_object.$setId](this._ids);
+ }
+
+ node[_xfa_object.$clean](this._builder);
+ }
+
+ onError(code) {
+ this._errorCode = code;
+ }
+
+}
+
+exports.XFAParser = XFAParser;
+
+/***/ }),
+/* 87 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.Builder = void 0;
+
+var _namespaces = __w_pdfjs_require__(77);
+
+var _xfa_object = __w_pdfjs_require__(75);
+
+var _setup = __w_pdfjs_require__(88);
+
+var _template = __w_pdfjs_require__(80);
+
+var _unknown = __w_pdfjs_require__(97);
+
+var _util = __w_pdfjs_require__(2);
+
+class Root extends _xfa_object.XFAObject {
+ constructor(ids) {
+ super(-1, "root", Object.create(null));
+ this.element = null;
+ this[_xfa_object.$ids] = ids;
+ }
+
+ [_xfa_object.$onChild](child) {
+ this.element = child;
+ return true;
+ }
+
+ [_xfa_object.$finalize]() {
+ super[_xfa_object.$finalize]();
+
+ if (this.element.template instanceof _template.Template) {
+ this[_xfa_object.$ids].set(_xfa_object.$root, this.element);
+
+ this.element.template[_xfa_object.$resolvePrototypes](this[_xfa_object.$ids]);
+
+ this.element.template[_xfa_object.$ids] = this[_xfa_object.$ids];
+ }
+ }
+
+}
+
+class Empty extends _xfa_object.XFAObject {
+ constructor() {
+ super(-1, "", Object.create(null));
+ }
+
+ [_xfa_object.$onChild](_) {
+ return false;
+ }
+
+}
+
+class Builder {
+ constructor() {
+ this._namespaceStack = [];
+ this._nsAgnosticLevel = 0;
+ this._namespacePrefixes = new Map();
+ this._namespaces = new Map();
+ this._nextNsId = Math.max(...Object.values(_namespaces.NamespaceIds).map(({
+ id
+ }) => id));
+ this._currentNamespace = new _unknown.UnknownNamespace(++this._nextNsId);
+ }
+
+ buildRoot(ids) {
+ return new Root(ids);
+ }
+
+ build({
+ nsPrefix,
+ name,
+ attributes,
+ namespace,
+ prefixes
+ }) {
+ const hasNamespaceDef = namespace !== null;
+
+ if (hasNamespaceDef) {
+ this._namespaceStack.push(this._currentNamespace);
+
+ this._currentNamespace = this._searchNamespace(namespace);
+ }
+
+ if (prefixes) {
+ this._addNamespacePrefix(prefixes);
+ }
+
+ if (attributes.hasOwnProperty(_xfa_object.$nsAttributes)) {
+ const dataTemplate = _setup.NamespaceSetUp.datasets;
+ const nsAttrs = attributes[_xfa_object.$nsAttributes];
+ let xfaAttrs = null;
+
+ for (const [ns, attrs] of Object.entries(nsAttrs)) {
+ const nsToUse = this._getNamespaceToUse(ns);
+
+ if (nsToUse === dataTemplate) {
+ xfaAttrs = {
+ xfa: attrs
+ };
+ break;
+ }
+ }
+
+ if (xfaAttrs) {
+ attributes[_xfa_object.$nsAttributes] = xfaAttrs;
+ } else {
+ delete attributes[_xfa_object.$nsAttributes];
+ }
+ }
+
+ const namespaceToUse = this._getNamespaceToUse(nsPrefix);
+
+ const node = namespaceToUse && namespaceToUse[_namespaces.$buildXFAObject](name, attributes) || new Empty();
+
+ if (node[_xfa_object.$isNsAgnostic]()) {
+ this._nsAgnosticLevel++;
+ }
+
+ if (hasNamespaceDef || prefixes || node[_xfa_object.$isNsAgnostic]()) {
+ node[_xfa_object.$cleanup] = {
+ hasNamespace: hasNamespaceDef,
+ prefixes,
+ nsAgnostic: node[_xfa_object.$isNsAgnostic]()
+ };
+ }
+
+ return node;
+ }
+
+ isNsAgnostic() {
+ return this._nsAgnosticLevel > 0;
+ }
+
+ _searchNamespace(nsName) {
+ let ns = this._namespaces.get(nsName);
+
+ if (ns) {
+ return ns;
+ }
+
+ for (const [name, {
+ check
+ }] of Object.entries(_namespaces.NamespaceIds)) {
+ if (check(nsName)) {
+ ns = _setup.NamespaceSetUp[name];
+
+ if (ns) {
+ this._namespaces.set(nsName, ns);
+
+ return ns;
+ }
+
+ break;
+ }
+ }
+
+ ns = new _unknown.UnknownNamespace(++this._nextNsId);
+
+ this._namespaces.set(nsName, ns);
+
+ return ns;
+ }
+
+ _addNamespacePrefix(prefixes) {
+ for (const {
+ prefix,
+ value
+ } of prefixes) {
+ const namespace = this._searchNamespace(value);
+
+ let prefixStack = this._namespacePrefixes.get(prefix);
+
+ if (!prefixStack) {
+ prefixStack = [];
+
+ this._namespacePrefixes.set(prefix, prefixStack);
+ }
+
+ prefixStack.push(namespace);
+ }
+ }
+
+ _getNamespaceToUse(prefix) {
+ if (!prefix) {
+ return this._currentNamespace;
+ }
+
+ const prefixStack = this._namespacePrefixes.get(prefix);
+
+ if (prefixStack && prefixStack.length > 0) {
+ return prefixStack[prefixStack.length - 1];
+ }
+
+ (0, _util.warn)(`Unknown namespace prefix: ${prefix}.`);
+ return null;
+ }
+
+ clean(data) {
+ const {
+ hasNamespace,
+ prefixes,
+ nsAgnostic
+ } = data;
+
+ if (hasNamespace) {
+ this._currentNamespace = this._namespaceStack.pop();
+ }
+
+ if (prefixes) {
+ prefixes.forEach(({
+ prefix
+ }) => {
+ this._namespacePrefixes.get(prefix).pop();
+ });
+ }
+
+ if (nsAgnostic) {
+ this._nsAgnosticLevel--;
+ }
+ }
+
+}
+
+exports.Builder = Builder;
+
+/***/ }),
+/* 88 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.NamespaceSetUp = void 0;
+
+var _config = __w_pdfjs_require__(89);
+
+var _connection_set = __w_pdfjs_require__(90);
+
+var _datasets = __w_pdfjs_require__(91);
+
+var _locale_set = __w_pdfjs_require__(92);
+
+var _signature = __w_pdfjs_require__(93);
+
+var _stylesheet = __w_pdfjs_require__(94);
+
+var _template = __w_pdfjs_require__(80);
+
+var _xdp = __w_pdfjs_require__(95);
+
+var _xhtml = __w_pdfjs_require__(96);
+
+const NamespaceSetUp = {
+ config: _config.ConfigNamespace,
+ connection: _connection_set.ConnectionSetNamespace,
+ datasets: _datasets.DatasetsNamespace,
+ localeSet: _locale_set.LocaleSetNamespace,
+ signature: _signature.SignatureNamespace,
+ stylesheet: _stylesheet.StylesheetNamespace,
+ template: _template.TemplateNamespace,
+ xdp: _xdp.XdpNamespace,
+ xhtml: _xhtml.XhtmlNamespace
+};
+exports.NamespaceSetUp = NamespaceSetUp;
+
+/***/ }),
+/* 89 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.ConfigNamespace = void 0;
+
+var _namespaces = __w_pdfjs_require__(77);
+
+var _xfa_object = __w_pdfjs_require__(75);
+
+var _utils = __w_pdfjs_require__(76);
+
+var _util = __w_pdfjs_require__(2);
+
+const CONFIG_NS_ID = _namespaces.NamespaceIds.config.id;
+
+class Acrobat extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "acrobat", true);
+ this.acrobat7 = null;
+ this.autoSave = null;
+ this.common = null;
+ this.validate = null;
+ this.validateApprovalSignatures = null;
+ this.submitUrl = new _xfa_object.XFAObjectArray();
+ }
+
+}
+
+class Acrobat7 extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "acrobat7", true);
+ this.dynamicRender = null;
+ }
+
+}
+
+class ADBE_JSConsole extends _xfa_object.OptionObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "ADBE_JSConsole", ["delegate", "Enable", "Disable"]);
+ }
+
+}
+
+class ADBE_JSDebugger extends _xfa_object.OptionObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "ADBE_JSDebugger", ["delegate", "Enable", "Disable"]);
+ }
+
+}
+
+class AddSilentPrint extends _xfa_object.Option01 {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "addSilentPrint");
+ }
+
+}
+
+class AddViewerPreferences extends _xfa_object.Option01 {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "addViewerPreferences");
+ }
+
+}
+
+class AdjustData extends _xfa_object.Option10 {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "adjustData");
+ }
+
+}
+
+class AdobeExtensionLevel extends _xfa_object.IntegerObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "adobeExtensionLevel", 0, n => n >= 1 && n <= 8);
+ }
+
+}
+
+class Agent extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "agent", true);
+ this.name = attributes.name ? attributes.name.trim() : "";
+ this.common = new _xfa_object.XFAObjectArray();
+ }
+
+}
+
+class AlwaysEmbed extends _xfa_object.ContentObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "alwaysEmbed");
+ }
+
+}
+
+class Amd extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "amd");
+ }
+
+}
+
+class Area extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "area");
+ this.level = (0, _utils.getInteger)({
+ data: attributes.level,
+ defaultValue: 0,
+ validate: n => n >= 1 && n <= 3
+ });
+ this.name = (0, _utils.getStringOption)(attributes.name, ["", "barcode", "coreinit", "deviceDriver", "font", "general", "layout", "merge", "script", "signature", "sourceSet", "templateCache"]);
+ }
+
+}
+
+class Attributes extends _xfa_object.OptionObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "attributes", ["preserve", "delegate", "ignore"]);
+ }
+
+}
+
+class AutoSave extends _xfa_object.OptionObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "autoSave", ["disabled", "enabled"]);
+ }
+
+}
+
+class Base extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "base");
+ }
+
+}
+
+class BatchOutput extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "batchOutput");
+ this.format = (0, _utils.getStringOption)(attributes.format, ["none", "concat", "zip", "zipCompress"]);
+ }
+
+}
+
+class BehaviorOverride extends _xfa_object.ContentObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "behaviorOverride");
+ }
+
+ [_xfa_object.$finalize]() {
+ this[_xfa_object.$content] = new Map(this[_xfa_object.$content].trim().split(/\s+/).filter(x => x.includes(":")).map(x => x.split(":", 2)));
+ }
+
+}
+
+class Cache extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "cache", true);
+ this.templateCache = null;
+ }
+
+}
+
+class Change extends _xfa_object.Option01 {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "change");
+ }
+
+}
+
+class Common extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "common", true);
+ this.data = null;
+ this.locale = null;
+ this.localeSet = null;
+ this.messaging = null;
+ this.suppressBanner = null;
+ this.template = null;
+ this.validationMessaging = null;
+ this.versionControl = null;
+ this.log = new _xfa_object.XFAObjectArray();
+ }
+
+}
+
+class Compress extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "compress");
+ this.scope = (0, _utils.getStringOption)(attributes.scope, ["imageOnly", "document"]);
+ }
+
+}
+
+class CompressLogicalStructure extends _xfa_object.Option01 {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "compressLogicalStructure");
+ }
+
+}
+
+class CompressObjectStream extends _xfa_object.Option10 {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "compressObjectStream");
+ }
+
+}
+
+class Compression extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "compression", true);
+ this.compressLogicalStructure = null;
+ this.compressObjectStream = null;
+ this.level = null;
+ this.type = null;
+ }
+
+}
+
+class Config extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "config", true);
+ this.acrobat = null;
+ this.present = null;
+ this.trace = null;
+ this.agent = new _xfa_object.XFAObjectArray();
+ }
+
+}
+
+class Conformance extends _xfa_object.OptionObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "conformance", ["A", "B"]);
+ }
+
+}
+
+class ContentCopy extends _xfa_object.Option01 {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "contentCopy");
+ }
+
+}
+
+class Copies extends _xfa_object.IntegerObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "copies", 1, n => n >= 1);
+ }
+
+}
+
+class Creator extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "creator");
+ }
+
+}
+
+class CurrentPage extends _xfa_object.IntegerObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "currentPage", 0, n => n >= 0);
+ }
+
+}
+
+class Data extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "data", true);
+ this.adjustData = null;
+ this.attributes = null;
+ this.incrementalLoad = null;
+ this.outputXSL = null;
+ this.range = null;
+ this.record = null;
+ this.startNode = null;
+ this.uri = null;
+ this.window = null;
+ this.xsl = null;
+ this.excludeNS = new _xfa_object.XFAObjectArray();
+ this.transform = new _xfa_object.XFAObjectArray();
+ }
+
+}
+
+class Debug extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "debug", true);
+ this.uri = null;
+ }
+
+}
+
+class DefaultTypeface extends _xfa_object.ContentObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "defaultTypeface");
+ this.writingScript = (0, _utils.getStringOption)(attributes.writingScript, ["*", "Arabic", "Cyrillic", "EastEuropeanRoman", "Greek", "Hebrew", "Japanese", "Korean", "Roman", "SimplifiedChinese", "Thai", "TraditionalChinese", "Vietnamese"]);
+ }
+
+}
+
+class Destination extends _xfa_object.OptionObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "destination", ["pdf", "pcl", "ps", "webClient", "zpl"]);
+ }
+
+}
+
+class DocumentAssembly extends _xfa_object.Option01 {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "documentAssembly");
+ }
+
+}
+
+class Driver extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "driver", true);
+ this.name = attributes.name ? attributes.name.trim() : "";
+ this.fontInfo = null;
+ this.xdc = null;
+ }
+
+}
+
+class DuplexOption extends _xfa_object.OptionObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "duplexOption", ["simplex", "duplexFlipLongEdge", "duplexFlipShortEdge"]);
+ }
+
+}
+
+class DynamicRender extends _xfa_object.OptionObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "dynamicRender", ["forbidden", "required"]);
+ }
+
+}
+
+class Embed extends _xfa_object.Option01 {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "embed");
+ }
+
+}
+
+class Encrypt extends _xfa_object.Option01 {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "encrypt");
+ }
+
+}
+
+class Encryption extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "encryption", true);
+ this.encrypt = null;
+ this.encryptionLevel = null;
+ this.permissions = null;
+ }
+
+}
+
+class EncryptionLevel extends _xfa_object.OptionObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "encryptionLevel", ["40bit", "128bit"]);
+ }
+
+}
+
+class Enforce extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "enforce");
+ }
+
+}
+
+class Equate extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "equate");
+ this.force = (0, _utils.getInteger)({
+ data: attributes.force,
+ defaultValue: 1,
+ validate: n => n === 0
+ });
+ this.from = attributes.from || "";
+ this.to = attributes.to || "";
+ }
+
+}
+
+class EquateRange extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "equateRange");
+ this.from = attributes.from || "";
+ this.to = attributes.to || "";
+ this._unicodeRange = attributes.unicodeRange || "";
+ }
+
+ get unicodeRange() {
+ const ranges = [];
+ const unicodeRegex = /U\+([0-9a-fA-F]+)/;
+ const unicodeRange = this._unicodeRange;
+
+ for (let range of unicodeRange.split(",").map(x => x.trim()).filter(x => !!x)) {
+ range = range.split("-", 2).map(x => {
+ const found = x.match(unicodeRegex);
+
+ if (!found) {
+ return 0;
+ }
+
+ return parseInt(found[1], 16);
+ });
+
+ if (range.length === 1) {
+ range.push(range[0]);
+ }
+
+ ranges.push(range);
+ }
+
+ return (0, _util.shadow)(this, "unicodeRange", ranges);
+ }
+
+}
+
+class Exclude extends _xfa_object.ContentObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "exclude");
+ }
+
+ [_xfa_object.$finalize]() {
+ this[_xfa_object.$content] = this[_xfa_object.$content].trim().split(/\s+/).filter(x => x && ["calculate", "close", "enter", "exit", "initialize", "ready", "validate"].includes(x));
+ }
+
+}
+
+class ExcludeNS extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "excludeNS");
+ }
+
+}
+
+class FlipLabel extends _xfa_object.OptionObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "flipLabel", ["usePrinterSetting", "on", "off"]);
+ }
+
+}
+
+class FontInfo extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "fontInfo", true);
+ this.embed = null;
+ this.map = null;
+ this.subsetBelow = null;
+ this.alwaysEmbed = new _xfa_object.XFAObjectArray();
+ this.defaultTypeface = new _xfa_object.XFAObjectArray();
+ this.neverEmbed = new _xfa_object.XFAObjectArray();
+ }
+
+}
+
+class FormFieldFilling extends _xfa_object.Option01 {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "formFieldFilling");
+ }
+
+}
+
+class GroupParent extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "groupParent");
+ }
+
+}
+
+class IfEmpty extends _xfa_object.OptionObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "ifEmpty", ["dataValue", "dataGroup", "ignore", "remove"]);
+ }
+
+}
+
+class IncludeXDPContent extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "includeXDPContent");
+ }
+
+}
+
+class IncrementalLoad extends _xfa_object.OptionObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "incrementalLoad", ["none", "forwardOnly"]);
+ }
+
+}
+
+class IncrementalMerge extends _xfa_object.Option01 {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "incrementalMerge");
+ }
+
+}
+
+class Interactive extends _xfa_object.Option01 {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "interactive");
+ }
+
+}
+
+class Jog extends _xfa_object.OptionObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "jog", ["usePrinterSetting", "none", "pageSet"]);
+ }
+
+}
+
+class LabelPrinter extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "labelPrinter", true);
+ this.name = (0, _utils.getStringOption)(attributes.name, ["zpl", "dpl", "ipl", "tcpl"]);
+ this.batchOutput = null;
+ this.flipLabel = null;
+ this.fontInfo = null;
+ this.xdc = null;
+ }
+
+}
+
+class Layout extends _xfa_object.OptionObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "layout", ["paginate", "panel"]);
+ }
+
+}
+
+class Level extends _xfa_object.IntegerObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "level", 0, n => n > 0);
+ }
+
+}
+
+class Linearized extends _xfa_object.Option01 {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "linearized");
+ }
+
+}
+
+class Locale extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "locale");
+ }
+
+}
+
+class LocaleSet extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "localeSet");
+ }
+
+}
+
+class Log extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "log", true);
+ this.mode = null;
+ this.threshold = null;
+ this.to = null;
+ this.uri = null;
+ }
+
+}
+
+class MapElement extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "map", true);
+ this.equate = new _xfa_object.XFAObjectArray();
+ this.equateRange = new _xfa_object.XFAObjectArray();
+ }
+
+}
+
+class MediumInfo extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "mediumInfo", true);
+ this.map = null;
+ }
+
+}
+
+class Message extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "message", true);
+ this.msgId = null;
+ this.severity = null;
+ }
+
+}
+
+class Messaging extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "messaging", true);
+ this.message = new _xfa_object.XFAObjectArray();
+ }
+
+}
+
+class Mode extends _xfa_object.OptionObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "mode", ["append", "overwrite"]);
+ }
+
+}
+
+class ModifyAnnots extends _xfa_object.Option01 {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "modifyAnnots");
+ }
+
+}
+
+class MsgId extends _xfa_object.IntegerObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "msgId", 1, n => n >= 1);
+ }
+
+}
+
+class NameAttr extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "nameAttr");
+ }
+
+}
+
+class NeverEmbed extends _xfa_object.ContentObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "neverEmbed");
+ }
+
+}
+
+class NumberOfCopies extends _xfa_object.IntegerObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "numberOfCopies", null, n => n >= 2 && n <= 5);
+ }
+
+}
+
+class OpenAction extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "openAction", true);
+ this.destination = null;
+ }
+
+}
+
+class Output extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "output", true);
+ this.to = null;
+ this.type = null;
+ this.uri = null;
+ }
+
+}
+
+class OutputBin extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "outputBin");
+ }
+
+}
+
+class OutputXSL extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "outputXSL", true);
+ this.uri = null;
+ }
+
+}
+
+class Overprint extends _xfa_object.OptionObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "overprint", ["none", "both", "draw", "field"]);
+ }
+
+}
+
+class Packets extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "packets");
+ }
+
+ [_xfa_object.$finalize]() {
+ if (this[_xfa_object.$content] === "*") {
+ return;
+ }
+
+ this[_xfa_object.$content] = this[_xfa_object.$content].trim().split(/\s+/).filter(x => ["config", "datasets", "template", "xfdf", "xslt"].includes(x));
+ }
+
+}
+
+class PageOffset extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "pageOffset");
+ this.x = (0, _utils.getInteger)({
+ data: attributes.x,
+ defaultValue: "useXDCSetting",
+ validate: n => true
+ });
+ this.y = (0, _utils.getInteger)({
+ data: attributes.y,
+ defaultValue: "useXDCSetting",
+ validate: n => true
+ });
+ }
+
+}
+
+class PageRange extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "pageRange");
+ }
+
+ [_xfa_object.$finalize]() {
+ const numbers = this[_xfa_object.$content].trim().split(/\s+/).map(x => parseInt(x, 10));
+
+ const ranges = [];
+
+ for (let i = 0, ii = numbers.length; i < ii; i += 2) {
+ ranges.push(numbers.slice(i, i + 2));
+ }
+
+ this[_xfa_object.$content] = ranges;
+ }
+
+}
+
+class Pagination extends _xfa_object.OptionObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "pagination", ["simplex", "duplexShortEdge", "duplexLongEdge"]);
+ }
+
+}
+
+class PaginationOverride extends _xfa_object.OptionObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "paginationOverride", ["none", "forceDuplex", "forceDuplexLongEdge", "forceDuplexShortEdge", "forceSimplex"]);
+ }
+
+}
+
+class Part extends _xfa_object.IntegerObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "part", 1, n => false);
+ }
+
+}
+
+class Pcl extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "pcl", true);
+ this.name = attributes.name || "";
+ this.batchOutput = null;
+ this.fontInfo = null;
+ this.jog = null;
+ this.mediumInfo = null;
+ this.outputBin = null;
+ this.pageOffset = null;
+ this.staple = null;
+ this.xdc = null;
+ }
+
+}
+
+class Pdf extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "pdf", true);
+ this.name = attributes.name || "";
+ this.adobeExtensionLevel = null;
+ this.batchOutput = null;
+ this.compression = null;
+ this.creator = null;
+ this.encryption = null;
+ this.fontInfo = null;
+ this.interactive = null;
+ this.linearized = null;
+ this.openAction = null;
+ this.pdfa = null;
+ this.producer = null;
+ this.renderPolicy = null;
+ this.scriptModel = null;
+ this.silentPrint = null;
+ this.submitFormat = null;
+ this.tagged = null;
+ this.version = null;
+ this.viewerPreferences = null;
+ this.xdc = null;
+ }
+
+}
+
+class Pdfa extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "pdfa", true);
+ this.amd = null;
+ this.conformance = null;
+ this.includeXDPContent = null;
+ this.part = null;
+ }
+
+}
+
+class Permissions extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "permissions", true);
+ this.accessibleContent = null;
+ this.change = null;
+ this.contentCopy = null;
+ this.documentAssembly = null;
+ this.formFieldFilling = null;
+ this.modifyAnnots = null;
+ this.plaintextMetadata = null;
+ this.print = null;
+ this.printHighQuality = null;
+ }
+
+}
+
+class PickTrayByPDFSize extends _xfa_object.Option01 {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "pickTrayByPDFSize");
+ }
+
+}
+
+class Picture extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "picture");
+ }
+
+}
+
+class PlaintextMetadata extends _xfa_object.Option01 {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "plaintextMetadata");
+ }
+
+}
+
+class Presence extends _xfa_object.OptionObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "presence", ["preserve", "dissolve", "dissolveStructure", "ignore", "remove"]);
+ }
+
+}
+
+class Present extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "present", true);
+ this.behaviorOverride = null;
+ this.cache = null;
+ this.common = null;
+ this.copies = null;
+ this.destination = null;
+ this.incrementalMerge = null;
+ this.layout = null;
+ this.output = null;
+ this.overprint = null;
+ this.pagination = null;
+ this.paginationOverride = null;
+ this.script = null;
+ this.validate = null;
+ this.xdp = null;
+ this.driver = new _xfa_object.XFAObjectArray();
+ this.labelPrinter = new _xfa_object.XFAObjectArray();
+ this.pcl = new _xfa_object.XFAObjectArray();
+ this.pdf = new _xfa_object.XFAObjectArray();
+ this.ps = new _xfa_object.XFAObjectArray();
+ this.submitUrl = new _xfa_object.XFAObjectArray();
+ this.webClient = new _xfa_object.XFAObjectArray();
+ this.zpl = new _xfa_object.XFAObjectArray();
+ }
+
+}
+
+class Print extends _xfa_object.Option01 {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "print");
+ }
+
+}
+
+class PrintHighQuality extends _xfa_object.Option01 {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "printHighQuality");
+ }
+
+}
+
+class PrintScaling extends _xfa_object.OptionObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "printScaling", ["appdefault", "noScaling"]);
+ }
+
+}
+
+class PrinterName extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "printerName");
+ }
+
+}
+
+class Producer extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "producer");
+ }
+
+}
+
+class Ps extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "ps", true);
+ this.name = attributes.name || "";
+ this.batchOutput = null;
+ this.fontInfo = null;
+ this.jog = null;
+ this.mediumInfo = null;
+ this.outputBin = null;
+ this.staple = null;
+ this.xdc = null;
+ }
+
+}
+
+class Range extends _xfa_object.ContentObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "range");
+ }
+
+ [_xfa_object.$finalize]() {
+ this[_xfa_object.$content] = this[_xfa_object.$content].trim().split(/\s*,\s*/, 2).map(range => range.split("-").map(x => parseInt(x.trim(), 10))).filter(range => range.every(x => !isNaN(x))).map(range => {
+ if (range.length === 1) {
+ range.push(range[0]);
+ }
+
+ return range;
+ });
+ }
+
+}
+
+class Record extends _xfa_object.ContentObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "record");
+ }
+
+ [_xfa_object.$finalize]() {
+ this[_xfa_object.$content] = this[_xfa_object.$content].trim();
+ const n = parseInt(this[_xfa_object.$content], 10);
+
+ if (!isNaN(n) && n >= 0) {
+ this[_xfa_object.$content] = n;
+ }
+ }
+
+}
+
+class Relevant extends _xfa_object.ContentObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "relevant");
+ }
+
+ [_xfa_object.$finalize]() {
+ this[_xfa_object.$content] = this[_xfa_object.$content].trim().split(/\s+/);
+ }
+
+}
+
+class Rename extends _xfa_object.ContentObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "rename");
+ }
+
+ [_xfa_object.$finalize]() {
+ this[_xfa_object.$content] = this[_xfa_object.$content].trim();
+
+ if (this[_xfa_object.$content].toLowerCase().startsWith("xml") || this[_xfa_object.$content].match(new RegExp("[\\p{L}_][\\p{L}\\d._\\p{M}-]*", "u"))) {
+ (0, _util.warn)("XFA - Rename: invalid XFA name");
+ }
+ }
+
+}
+
+class RenderPolicy extends _xfa_object.OptionObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "renderPolicy", ["server", "client"]);
+ }
+
+}
+
+class RunScripts extends _xfa_object.OptionObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "runScripts", ["both", "client", "none", "server"]);
+ }
+
+}
+
+class Script extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "script", true);
+ this.currentPage = null;
+ this.exclude = null;
+ this.runScripts = null;
+ }
+
+}
+
+class ScriptModel extends _xfa_object.OptionObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "scriptModel", ["XFA", "none"]);
+ }
+
+}
+
+class Severity extends _xfa_object.OptionObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "severity", ["ignore", "error", "information", "trace", "warning"]);
+ }
+
+}
+
+class SilentPrint extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "silentPrint", true);
+ this.addSilentPrint = null;
+ this.printerName = null;
+ }
+
+}
+
+class Staple extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "staple");
+ this.mode = (0, _utils.getStringOption)(attributes.mode, ["usePrinterSetting", "on", "off"]);
+ }
+
+}
+
+class StartNode extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "startNode");
+ }
+
+}
+
+class StartPage extends _xfa_object.IntegerObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "startPage", 0, n => true);
+ }
+
+}
+
+class SubmitFormat extends _xfa_object.OptionObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "submitFormat", ["html", "delegate", "fdf", "xml", "pdf"]);
+ }
+
+}
+
+class SubmitUrl extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "submitUrl");
+ }
+
+}
+
+class SubsetBelow extends _xfa_object.IntegerObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "subsetBelow", 100, n => n >= 0 && n <= 100);
+ }
+
+}
+
+class SuppressBanner extends _xfa_object.Option01 {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "suppressBanner");
+ }
+
+}
+
+class Tagged extends _xfa_object.Option01 {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "tagged");
+ }
+
+}
+
+class Template extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "template", true);
+ this.base = null;
+ this.relevant = null;
+ this.startPage = null;
+ this.uri = null;
+ this.xsl = null;
+ }
+
+}
+
+class Threshold extends _xfa_object.OptionObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "threshold", ["trace", "error", "information", "warning"]);
+ }
+
+}
+
+class To extends _xfa_object.OptionObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "to", ["null", "memory", "stderr", "stdout", "system", "uri"]);
+ }
+
+}
+
+class TemplateCache extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "templateCache");
+ this.maxEntries = (0, _utils.getInteger)({
+ data: attributes.maxEntries,
+ defaultValue: 5,
+ validate: n => n >= 0
+ });
+ }
+
+}
+
+class Trace extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "trace", true);
+ this.area = new _xfa_object.XFAObjectArray();
+ }
+
+}
+
+class Transform extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "transform", true);
+ this.groupParent = null;
+ this.ifEmpty = null;
+ this.nameAttr = null;
+ this.picture = null;
+ this.presence = null;
+ this.rename = null;
+ this.whitespace = null;
+ }
+
+}
+
+class Type extends _xfa_object.OptionObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "type", ["none", "ascii85", "asciiHex", "ccittfax", "flate", "lzw", "runLength", "native", "xdp", "mergedXDP"]);
+ }
+
+}
+
+class Uri extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "uri");
+ }
+
+}
+
+class Validate extends _xfa_object.OptionObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "validate", ["preSubmit", "prePrint", "preExecute", "preSave"]);
+ }
+
+}
+
+class ValidateApprovalSignatures extends _xfa_object.ContentObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "validateApprovalSignatures");
+ }
+
+ [_xfa_object.$finalize]() {
+ this[_xfa_object.$content] = this[_xfa_object.$content].trim().split(/\s+/).filter(x => ["docReady", "postSign"].includes(x));
+ }
+
+}
+
+class ValidationMessaging extends _xfa_object.OptionObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "validationMessaging", ["allMessagesIndividually", "allMessagesTogether", "firstMessageOnly", "noMessages"]);
+ }
+
+}
+
+class Version extends _xfa_object.OptionObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "version", ["1.7", "1.6", "1.5", "1.4", "1.3", "1.2"]);
+ }
+
+}
+
+class VersionControl extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "VersionControl");
+ this.outputBelow = (0, _utils.getStringOption)(attributes.outputBelow, ["warn", "error", "update"]);
+ this.sourceAbove = (0, _utils.getStringOption)(attributes.sourceAbove, ["warn", "error"]);
+ this.sourceBelow = (0, _utils.getStringOption)(attributes.sourceBelow, ["update", "maintain"]);
+ }
+
+}
+
+class ViewerPreferences extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "viewerPreferences", true);
+ this.ADBE_JSConsole = null;
+ this.ADBE_JSDebugger = null;
+ this.addViewerPreferences = null;
+ this.duplexOption = null;
+ this.enforce = null;
+ this.numberOfCopies = null;
+ this.pageRange = null;
+ this.pickTrayByPDFSize = null;
+ this.printScaling = null;
+ }
+
+}
+
+class WebClient extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "webClient", true);
+ this.name = attributes.name ? attributes.name.trim() : "";
+ this.fontInfo = null;
+ this.xdc = null;
+ }
+
+}
+
+class Whitespace extends _xfa_object.OptionObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "whitespace", ["preserve", "ltrim", "normalize", "rtrim", "trim"]);
+ }
+
+}
+
+class Window extends _xfa_object.ContentObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "window");
+ }
+
+ [_xfa_object.$finalize]() {
+ const pair = this[_xfa_object.$content].trim().split(/\s*,\s*/, 2).map(x => parseInt(x, 10));
+
+ if (pair.some(x => isNaN(x))) {
+ this[_xfa_object.$content] = [0, 0];
+ return;
+ }
+
+ if (pair.length === 1) {
+ pair.push(pair[0]);
+ }
+
+ this[_xfa_object.$content] = pair;
+ }
+
+}
+
+class Xdc extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "xdc", true);
+ this.uri = new _xfa_object.XFAObjectArray();
+ this.xsl = new _xfa_object.XFAObjectArray();
+ }
+
+}
+
+class Xdp extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "xdp", true);
+ this.packets = null;
+ }
+
+}
+
+class Xsl extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "xsl", true);
+ this.debug = null;
+ this.uri = null;
+ }
+
+}
+
+class Zpl extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONFIG_NS_ID, "zpl", true);
+ this.name = attributes.name ? attributes.name.trim() : "";
+ this.batchOutput = null;
+ this.flipLabel = null;
+ this.fontInfo = null;
+ this.xdc = null;
+ }
+
+}
+
+class ConfigNamespace {
+ static [_namespaces.$buildXFAObject](name, attributes) {
+ if (ConfigNamespace.hasOwnProperty(name)) {
+ return ConfigNamespace[name](attributes);
+ }
+
+ return undefined;
+ }
+
+ static acrobat(attrs) {
+ return new Acrobat(attrs);
+ }
+
+ static acrobat7(attrs) {
+ return new Acrobat7(attrs);
+ }
+
+ static ADBE_JSConsole(attrs) {
+ return new ADBE_JSConsole(attrs);
+ }
+
+ static ADBE_JSDebugger(attrs) {
+ return new ADBE_JSDebugger(attrs);
+ }
+
+ static addSilentPrint(attrs) {
+ return new AddSilentPrint(attrs);
+ }
+
+ static addViewerPreferences(attrs) {
+ return new AddViewerPreferences(attrs);
+ }
+
+ static adjustData(attrs) {
+ return new AdjustData(attrs);
+ }
+
+ static adobeExtensionLevel(attrs) {
+ return new AdobeExtensionLevel(attrs);
+ }
+
+ static agent(attrs) {
+ return new Agent(attrs);
+ }
+
+ static alwaysEmbed(attrs) {
+ return new AlwaysEmbed(attrs);
+ }
+
+ static amd(attrs) {
+ return new Amd(attrs);
+ }
+
+ static area(attrs) {
+ return new Area(attrs);
+ }
+
+ static attributes(attrs) {
+ return new Attributes(attrs);
+ }
+
+ static autoSave(attrs) {
+ return new AutoSave(attrs);
+ }
+
+ static base(attrs) {
+ return new Base(attrs);
+ }
+
+ static batchOutput(attrs) {
+ return new BatchOutput(attrs);
+ }
+
+ static behaviorOverride(attrs) {
+ return new BehaviorOverride(attrs);
+ }
+
+ static cache(attrs) {
+ return new Cache(attrs);
+ }
+
+ static change(attrs) {
+ return new Change(attrs);
+ }
+
+ static common(attrs) {
+ return new Common(attrs);
+ }
+
+ static compress(attrs) {
+ return new Compress(attrs);
+ }
+
+ static compressLogicalStructure(attrs) {
+ return new CompressLogicalStructure(attrs);
+ }
+
+ static compressObjectStream(attrs) {
+ return new CompressObjectStream(attrs);
+ }
+
+ static compression(attrs) {
+ return new Compression(attrs);
+ }
+
+ static config(attrs) {
+ return new Config(attrs);
+ }
+
+ static conformance(attrs) {
+ return new Conformance(attrs);
+ }
+
+ static contentCopy(attrs) {
+ return new ContentCopy(attrs);
+ }
+
+ static copies(attrs) {
+ return new Copies(attrs);
+ }
+
+ static creator(attrs) {
+ return new Creator(attrs);
+ }
+
+ static currentPage(attrs) {
+ return new CurrentPage(attrs);
+ }
+
+ static data(attrs) {
+ return new Data(attrs);
+ }
+
+ static debug(attrs) {
+ return new Debug(attrs);
+ }
+
+ static defaultTypeface(attrs) {
+ return new DefaultTypeface(attrs);
+ }
+
+ static destination(attrs) {
+ return new Destination(attrs);
+ }
+
+ static documentAssembly(attrs) {
+ return new DocumentAssembly(attrs);
+ }
+
+ static driver(attrs) {
+ return new Driver(attrs);
+ }
+
+ static duplexOption(attrs) {
+ return new DuplexOption(attrs);
+ }
+
+ static dynamicRender(attrs) {
+ return new DynamicRender(attrs);
+ }
+
+ static embed(attrs) {
+ return new Embed(attrs);
+ }
+
+ static encrypt(attrs) {
+ return new Encrypt(attrs);
+ }
+
+ static encryption(attrs) {
+ return new Encryption(attrs);
+ }
+
+ static encryptionLevel(attrs) {
+ return new EncryptionLevel(attrs);
+ }
+
+ static enforce(attrs) {
+ return new Enforce(attrs);
+ }
+
+ static equate(attrs) {
+ return new Equate(attrs);
+ }
+
+ static equateRange(attrs) {
+ return new EquateRange(attrs);
+ }
+
+ static exclude(attrs) {
+ return new Exclude(attrs);
+ }
+
+ static excludeNS(attrs) {
+ return new ExcludeNS(attrs);
+ }
+
+ static flipLabel(attrs) {
+ return new FlipLabel(attrs);
+ }
+
+ static fontInfo(attrs) {
+ return new FontInfo(attrs);
+ }
+
+ static formFieldFilling(attrs) {
+ return new FormFieldFilling(attrs);
+ }
+
+ static groupParent(attrs) {
+ return new GroupParent(attrs);
+ }
+
+ static ifEmpty(attrs) {
+ return new IfEmpty(attrs);
+ }
+
+ static includeXDPContent(attrs) {
+ return new IncludeXDPContent(attrs);
+ }
+
+ static incrementalLoad(attrs) {
+ return new IncrementalLoad(attrs);
+ }
+
+ static incrementalMerge(attrs) {
+ return new IncrementalMerge(attrs);
+ }
+
+ static interactive(attrs) {
+ return new Interactive(attrs);
+ }
+
+ static jog(attrs) {
+ return new Jog(attrs);
+ }
+
+ static labelPrinter(attrs) {
+ return new LabelPrinter(attrs);
+ }
+
+ static layout(attrs) {
+ return new Layout(attrs);
+ }
+
+ static level(attrs) {
+ return new Level(attrs);
+ }
+
+ static linearized(attrs) {
+ return new Linearized(attrs);
+ }
+
+ static locale(attrs) {
+ return new Locale(attrs);
+ }
+
+ static localeSet(attrs) {
+ return new LocaleSet(attrs);
+ }
+
+ static log(attrs) {
+ return new Log(attrs);
+ }
+
+ static map(attrs) {
+ return new MapElement(attrs);
+ }
+
+ static mediumInfo(attrs) {
+ return new MediumInfo(attrs);
+ }
+
+ static message(attrs) {
+ return new Message(attrs);
+ }
+
+ static messaging(attrs) {
+ return new Messaging(attrs);
+ }
+
+ static mode(attrs) {
+ return new Mode(attrs);
+ }
+
+ static modifyAnnots(attrs) {
+ return new ModifyAnnots(attrs);
+ }
+
+ static msgId(attrs) {
+ return new MsgId(attrs);
+ }
+
+ static nameAttr(attrs) {
+ return new NameAttr(attrs);
+ }
+
+ static neverEmbed(attrs) {
+ return new NeverEmbed(attrs);
+ }
+
+ static numberOfCopies(attrs) {
+ return new NumberOfCopies(attrs);
+ }
+
+ static openAction(attrs) {
+ return new OpenAction(attrs);
+ }
+
+ static output(attrs) {
+ return new Output(attrs);
+ }
+
+ static outputBin(attrs) {
+ return new OutputBin(attrs);
+ }
+
+ static outputXSL(attrs) {
+ return new OutputXSL(attrs);
+ }
+
+ static overprint(attrs) {
+ return new Overprint(attrs);
+ }
+
+ static packets(attrs) {
+ return new Packets(attrs);
+ }
+
+ static pageOffset(attrs) {
+ return new PageOffset(attrs);
+ }
+
+ static pageRange(attrs) {
+ return new PageRange(attrs);
+ }
+
+ static pagination(attrs) {
+ return new Pagination(attrs);
+ }
+
+ static paginationOverride(attrs) {
+ return new PaginationOverride(attrs);
+ }
+
+ static part(attrs) {
+ return new Part(attrs);
+ }
+
+ static pcl(attrs) {
+ return new Pcl(attrs);
+ }
+
+ static pdf(attrs) {
+ return new Pdf(attrs);
+ }
+
+ static pdfa(attrs) {
+ return new Pdfa(attrs);
+ }
+
+ static permissions(attrs) {
+ return new Permissions(attrs);
+ }
+
+ static pickTrayByPDFSize(attrs) {
+ return new PickTrayByPDFSize(attrs);
+ }
+
+ static picture(attrs) {
+ return new Picture(attrs);
+ }
+
+ static plaintextMetadata(attrs) {
+ return new PlaintextMetadata(attrs);
+ }
+
+ static presence(attrs) {
+ return new Presence(attrs);
+ }
+
+ static present(attrs) {
+ return new Present(attrs);
+ }
+
+ static print(attrs) {
+ return new Print(attrs);
+ }
+
+ static printHighQuality(attrs) {
+ return new PrintHighQuality(attrs);
+ }
+
+ static printScaling(attrs) {
+ return new PrintScaling(attrs);
+ }
+
+ static printerName(attrs) {
+ return new PrinterName(attrs);
+ }
+
+ static producer(attrs) {
+ return new Producer(attrs);
+ }
+
+ static ps(attrs) {
+ return new Ps(attrs);
+ }
+
+ static range(attrs) {
+ return new Range(attrs);
+ }
+
+ static record(attrs) {
+ return new Record(attrs);
+ }
+
+ static relevant(attrs) {
+ return new Relevant(attrs);
+ }
+
+ static rename(attrs) {
+ return new Rename(attrs);
+ }
+
+ static renderPolicy(attrs) {
+ return new RenderPolicy(attrs);
+ }
+
+ static runScripts(attrs) {
+ return new RunScripts(attrs);
+ }
+
+ static script(attrs) {
+ return new Script(attrs);
+ }
+
+ static scriptModel(attrs) {
+ return new ScriptModel(attrs);
+ }
+
+ static severity(attrs) {
+ return new Severity(attrs);
+ }
+
+ static silentPrint(attrs) {
+ return new SilentPrint(attrs);
+ }
+
+ static staple(attrs) {
+ return new Staple(attrs);
+ }
+
+ static startNode(attrs) {
+ return new StartNode(attrs);
+ }
+
+ static startPage(attrs) {
+ return new StartPage(attrs);
+ }
+
+ static submitFormat(attrs) {
+ return new SubmitFormat(attrs);
+ }
+
+ static submitUrl(attrs) {
+ return new SubmitUrl(attrs);
+ }
+
+ static subsetBelow(attrs) {
+ return new SubsetBelow(attrs);
+ }
+
+ static suppressBanner(attrs) {
+ return new SuppressBanner(attrs);
+ }
+
+ static tagged(attrs) {
+ return new Tagged(attrs);
+ }
+
+ static template(attrs) {
+ return new Template(attrs);
+ }
+
+ static templateCache(attrs) {
+ return new TemplateCache(attrs);
+ }
+
+ static threshold(attrs) {
+ return new Threshold(attrs);
+ }
+
+ static to(attrs) {
+ return new To(attrs);
+ }
+
+ static trace(attrs) {
+ return new Trace(attrs);
+ }
+
+ static transform(attrs) {
+ return new Transform(attrs);
+ }
+
+ static type(attrs) {
+ return new Type(attrs);
+ }
+
+ static uri(attrs) {
+ return new Uri(attrs);
+ }
+
+ static validate(attrs) {
+ return new Validate(attrs);
+ }
+
+ static validateApprovalSignatures(attrs) {
+ return new ValidateApprovalSignatures(attrs);
+ }
+
+ static validationMessaging(attrs) {
+ return new ValidationMessaging(attrs);
+ }
+
+ static version(attrs) {
+ return new Version(attrs);
+ }
+
+ static versionControl(attrs) {
+ return new VersionControl(attrs);
+ }
+
+ static viewerPreferences(attrs) {
+ return new ViewerPreferences(attrs);
+ }
+
+ static webClient(attrs) {
+ return new WebClient(attrs);
+ }
+
+ static whitespace(attrs) {
+ return new Whitespace(attrs);
+ }
+
+ static window(attrs) {
+ return new Window(attrs);
+ }
+
+ static xdc(attrs) {
+ return new Xdc(attrs);
+ }
+
+ static xdp(attrs) {
+ return new Xdp(attrs);
+ }
+
+ static xsl(attrs) {
+ return new Xsl(attrs);
+ }
+
+ static zpl(attrs) {
+ return new Zpl(attrs);
+ }
+
+}
+
+exports.ConfigNamespace = ConfigNamespace;
+
+/***/ }),
+/* 90 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.ConnectionSetNamespace = void 0;
+
+var _namespaces = __w_pdfjs_require__(77);
+
+var _xfa_object = __w_pdfjs_require__(75);
+
+const CONNECTION_SET_NS_ID = _namespaces.NamespaceIds.connectionSet.id;
+
+class ConnectionSet extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONNECTION_SET_NS_ID, "connectionSet", true);
+ this.wsdlConnection = new _xfa_object.XFAObjectArray();
+ this.xmlConnection = new _xfa_object.XFAObjectArray();
+ this.xsdConnection = new _xfa_object.XFAObjectArray();
+ }
+
+}
+
+class EffectiveInputPolicy extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONNECTION_SET_NS_ID, "effectiveInputPolicy");
+ this.id = attributes.id || "";
+ this.name = attributes.name || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+}
+
+class EffectiveOutputPolicy extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONNECTION_SET_NS_ID, "effectiveOutputPolicy");
+ this.id = attributes.id || "";
+ this.name = attributes.name || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+}
+
+class Operation extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(CONNECTION_SET_NS_ID, "operation");
+ this.id = attributes.id || "";
+ this.input = attributes.input || "";
+ this.name = attributes.name || "";
+ this.output = attributes.output || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+}
+
+class RootElement extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(CONNECTION_SET_NS_ID, "rootElement");
+ this.id = attributes.id || "";
+ this.name = attributes.name || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+}
+
+class SoapAction extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(CONNECTION_SET_NS_ID, "soapAction");
+ this.id = attributes.id || "";
+ this.name = attributes.name || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+}
+
+class SoapAddress extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(CONNECTION_SET_NS_ID, "soapAddress");
+ this.id = attributes.id || "";
+ this.name = attributes.name || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+}
+
+class Uri extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(CONNECTION_SET_NS_ID, "uri");
+ this.id = attributes.id || "";
+ this.name = attributes.name || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+}
+
+class WsdlAddress extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(CONNECTION_SET_NS_ID, "wsdlAddress");
+ this.id = attributes.id || "";
+ this.name = attributes.name || "";
+ this.use = attributes.use || "";
+ this.usehref = attributes.usehref || "";
+ }
+
+}
+
+class WsdlConnection extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONNECTION_SET_NS_ID, "wsdlConnection", true);
+ this.dataDescription = attributes.dataDescription || "";
+ this.name = attributes.name || "";
+ this.effectiveInputPolicy = null;
+ this.effectiveOutputPolicy = null;
+ this.operation = null;
+ this.soapAction = null;
+ this.soapAddress = null;
+ this.wsdlAddress = null;
+ }
+
+}
+
+class XmlConnection extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONNECTION_SET_NS_ID, "xmlConnection", true);
+ this.dataDescription = attributes.dataDescription || "";
+ this.name = attributes.name || "";
+ this.uri = null;
+ }
+
+}
+
+class XsdConnection extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(CONNECTION_SET_NS_ID, "xsdConnection", true);
+ this.dataDescription = attributes.dataDescription || "";
+ this.name = attributes.name || "";
+ this.rootElement = null;
+ this.uri = null;
+ }
+
+}
+
+class ConnectionSetNamespace {
+ static [_namespaces.$buildXFAObject](name, attributes) {
+ if (ConnectionSetNamespace.hasOwnProperty(name)) {
+ return ConnectionSetNamespace[name](attributes);
+ }
+
+ return undefined;
+ }
+
+ static connectionSet(attrs) {
+ return new ConnectionSet(attrs);
+ }
+
+ static effectiveInputPolicy(attrs) {
+ return new EffectiveInputPolicy(attrs);
+ }
+
+ static effectiveOutputPolicy(attrs) {
+ return new EffectiveOutputPolicy(attrs);
+ }
+
+ static operation(attrs) {
+ return new Operation(attrs);
+ }
+
+ static rootElement(attrs) {
+ return new RootElement(attrs);
+ }
+
+ static soapAction(attrs) {
+ return new SoapAction(attrs);
+ }
+
+ static soapAddress(attrs) {
+ return new SoapAddress(attrs);
+ }
+
+ static uri(attrs) {
+ return new Uri(attrs);
+ }
+
+ static wsdlAddress(attrs) {
+ return new WsdlAddress(attrs);
+ }
+
+ static wsdlConnection(attrs) {
+ return new WsdlConnection(attrs);
+ }
+
+ static xmlConnection(attrs) {
+ return new XmlConnection(attrs);
+ }
+
+ static xsdConnection(attrs) {
+ return new XsdConnection(attrs);
+ }
+
+}
+
+exports.ConnectionSetNamespace = ConnectionSetNamespace;
+
+/***/ }),
+/* 91 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.DatasetsNamespace = void 0;
+
+var _xfa_object = __w_pdfjs_require__(75);
+
+var _namespaces = __w_pdfjs_require__(77);
+
+const DATASETS_NS_ID = _namespaces.NamespaceIds.datasets.id;
+
+class Data extends _xfa_object.XmlObject {
+ constructor(attributes) {
+ super(DATASETS_NS_ID, "data", attributes);
+ }
+
+ [_xfa_object.$isNsAgnostic]() {
+ return true;
+ }
+
+}
+
+class Datasets extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(DATASETS_NS_ID, "datasets", true);
+ this.data = null;
+ this.Signature = null;
+ }
+
+ [_xfa_object.$onChild](child) {
+ const name = child[_xfa_object.$nodeName];
+
+ if (name === "data" && child[_xfa_object.$namespaceId] === DATASETS_NS_ID || name === "Signature" && child[_xfa_object.$namespaceId] === _namespaces.NamespaceIds.signature.id) {
+ this[name] = child;
+ }
+
+ this[_xfa_object.$appendChild](child);
+ }
+
+}
+
+class DatasetsNamespace {
+ static [_namespaces.$buildXFAObject](name, attributes) {
+ if (DatasetsNamespace.hasOwnProperty(name)) {
+ return DatasetsNamespace[name](attributes);
+ }
+
+ return undefined;
+ }
+
+ static datasets(attributes) {
+ return new Datasets(attributes);
+ }
+
+ static data(attributes) {
+ return new Data(attributes);
+ }
+
+}
+
+exports.DatasetsNamespace = DatasetsNamespace;
+
+/***/ }),
+/* 92 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.LocaleSetNamespace = void 0;
+
+var _namespaces = __w_pdfjs_require__(77);
+
+var _xfa_object = __w_pdfjs_require__(75);
+
+var _utils = __w_pdfjs_require__(76);
+
+const LOCALE_SET_NS_ID = _namespaces.NamespaceIds.localeSet.id;
+
+class CalendarSymbols extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(LOCALE_SET_NS_ID, "calendarSymbols", true);
+ this.name = "gregorian";
+ this.dayNames = new _xfa_object.XFAObjectArray(2);
+ this.eraNames = null;
+ this.meridiemNames = null;
+ this.monthNames = new _xfa_object.XFAObjectArray(2);
+ }
+
+}
+
+class CurrencySymbol extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(LOCALE_SET_NS_ID, "currencySymbol");
+ this.name = (0, _utils.getStringOption)(attributes.name, ["symbol", "isoname", "decimal"]);
+ }
+
+}
+
+class CurrencySymbols extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(LOCALE_SET_NS_ID, "currencySymbols", true);
+ this.currencySymbol = new _xfa_object.XFAObjectArray(3);
+ }
+
+}
+
+class DatePattern extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(LOCALE_SET_NS_ID, "datePattern");
+ this.name = (0, _utils.getStringOption)(attributes.name, ["full", "long", "med", "short"]);
+ }
+
+}
+
+class DatePatterns extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(LOCALE_SET_NS_ID, "datePatterns", true);
+ this.datePattern = new _xfa_object.XFAObjectArray(4);
+ }
+
+}
+
+class DateTimeSymbols extends _xfa_object.ContentObject {
+ constructor(attributes) {
+ super(LOCALE_SET_NS_ID, "dateTimeSymbols");
+ }
+
+}
+
+class Day extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(LOCALE_SET_NS_ID, "day");
+ }
+
+}
+
+class DayNames extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(LOCALE_SET_NS_ID, "dayNames", true);
+ this.abbr = (0, _utils.getInteger)({
+ data: attributes.abbr,
+ defaultValue: 0,
+ validate: x => x === 1
+ });
+ this.day = new _xfa_object.XFAObjectArray(7);
+ }
+
+}
+
+class Era extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(LOCALE_SET_NS_ID, "era");
+ }
+
+}
+
+class EraNames extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(LOCALE_SET_NS_ID, "eraNames", true);
+ this.era = new _xfa_object.XFAObjectArray(2);
+ }
+
+}
+
+class Locale extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(LOCALE_SET_NS_ID, "locale", true);
+ this.desc = attributes.desc || "";
+ this.name = "isoname";
+ this.calendarSymbols = null;
+ this.currencySymbols = null;
+ this.datePatterns = null;
+ this.dateTimeSymbols = null;
+ this.numberPatterns = null;
+ this.numberSymbols = null;
+ this.timePatterns = null;
+ this.typeFaces = null;
+ }
+
+}
+
+class LocaleSet extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(LOCALE_SET_NS_ID, "localeSet", true);
+ this.locale = new _xfa_object.XFAObjectArray();
+ }
+
+}
+
+class Meridiem extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(LOCALE_SET_NS_ID, "meridiem");
+ }
+
+}
+
+class MeridiemNames extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(LOCALE_SET_NS_ID, "meridiemNames", true);
+ this.meridiem = new _xfa_object.XFAObjectArray(2);
+ }
+
+}
+
+class Month extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(LOCALE_SET_NS_ID, "month");
+ }
+
+}
+
+class MonthNames extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(LOCALE_SET_NS_ID, "monthNames", true);
+ this.abbr = (0, _utils.getInteger)({
+ data: attributes.abbr,
+ defaultValue: 0,
+ validate: x => x === 1
+ });
+ this.month = new _xfa_object.XFAObjectArray(12);
+ }
+
+}
+
+class NumberPattern extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(LOCALE_SET_NS_ID, "numberPattern");
+ this.name = (0, _utils.getStringOption)(attributes.name, ["full", "long", "med", "short"]);
+ }
+
+}
+
+class NumberPatterns extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(LOCALE_SET_NS_ID, "numberPatterns", true);
+ this.numberPattern = new _xfa_object.XFAObjectArray(4);
+ }
+
+}
+
+class NumberSymbol extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(LOCALE_SET_NS_ID, "numberSymbol");
+ this.name = (0, _utils.getStringOption)(attributes.name, ["decimal", "grouping", "percent", "minus", "zero"]);
+ }
+
+}
+
+class NumberSymbols extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(LOCALE_SET_NS_ID, "numberSymbols", true);
+ this.numberSymbol = new _xfa_object.XFAObjectArray(5);
+ }
+
+}
+
+class TimePattern extends _xfa_object.StringObject {
+ constructor(attributes) {
+ super(LOCALE_SET_NS_ID, "timePattern");
+ this.name = (0, _utils.getStringOption)(attributes.name, ["full", "long", "med", "short"]);
+ }
+
+}
+
+class TimePatterns extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(LOCALE_SET_NS_ID, "timePatterns", true);
+ this.timePattern = new _xfa_object.XFAObjectArray(4);
+ }
+
+}
+
+class TypeFace extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(LOCALE_SET_NS_ID, "typeFace", true);
+ this.name = attributes.name | "";
+ }
+
+}
+
+class TypeFaces extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(LOCALE_SET_NS_ID, "typeFaces", true);
+ this.typeFace = new _xfa_object.XFAObjectArray();
+ }
+
+}
+
+class LocaleSetNamespace {
+ static [_namespaces.$buildXFAObject](name, attributes) {
+ if (LocaleSetNamespace.hasOwnProperty(name)) {
+ return LocaleSetNamespace[name](attributes);
+ }
+
+ return undefined;
+ }
+
+ static calendarSymbols(attrs) {
+ return new CalendarSymbols(attrs);
+ }
+
+ static currencySymbol(attrs) {
+ return new CurrencySymbol(attrs);
+ }
+
+ static currencySymbols(attrs) {
+ return new CurrencySymbols(attrs);
+ }
+
+ static datePattern(attrs) {
+ return new DatePattern(attrs);
+ }
+
+ static datePatterns(attrs) {
+ return new DatePatterns(attrs);
+ }
+
+ static dateTimeSymbols(attrs) {
+ return new DateTimeSymbols(attrs);
+ }
+
+ static day(attrs) {
+ return new Day(attrs);
+ }
+
+ static dayNames(attrs) {
+ return new DayNames(attrs);
+ }
+
+ static era(attrs) {
+ return new Era(attrs);
+ }
+
+ static eraNames(attrs) {
+ return new EraNames(attrs);
+ }
+
+ static locale(attrs) {
+ return new Locale(attrs);
+ }
+
+ static localeSet(attrs) {
+ return new LocaleSet(attrs);
+ }
+
+ static meridiem(attrs) {
+ return new Meridiem(attrs);
+ }
+
+ static meridiemNames(attrs) {
+ return new MeridiemNames(attrs);
+ }
+
+ static month(attrs) {
+ return new Month(attrs);
+ }
+
+ static monthNames(attrs) {
+ return new MonthNames(attrs);
+ }
+
+ static numberPattern(attrs) {
+ return new NumberPattern(attrs);
+ }
+
+ static numberPatterns(attrs) {
+ return new NumberPatterns(attrs);
+ }
+
+ static numberSymbol(attrs) {
+ return new NumberSymbol(attrs);
+ }
+
+ static numberSymbols(attrs) {
+ return new NumberSymbols(attrs);
+ }
+
+ static timePattern(attrs) {
+ return new TimePattern(attrs);
+ }
+
+ static timePatterns(attrs) {
+ return new TimePatterns(attrs);
+ }
+
+ static typeFace(attrs) {
+ return new TypeFace(attrs);
+ }
+
+ static typeFaces(attrs) {
+ return new TypeFaces(attrs);
+ }
+
+}
+
+exports.LocaleSetNamespace = LocaleSetNamespace;
+
+/***/ }),
+/* 93 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.SignatureNamespace = void 0;
+
+var _namespaces = __w_pdfjs_require__(77);
+
+var _xfa_object = __w_pdfjs_require__(75);
+
+const SIGNATURE_NS_ID = _namespaces.NamespaceIds.signature.id;
+
+class Signature extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(SIGNATURE_NS_ID, "signature", true);
+ }
+
+}
+
+class SignatureNamespace {
+ static [_namespaces.$buildXFAObject](name, attributes) {
+ if (SignatureNamespace.hasOwnProperty(name)) {
+ return SignatureNamespace[name](attributes);
+ }
+
+ return undefined;
+ }
+
+ static signature(attributes) {
+ return new Signature(attributes);
+ }
+
+}
+
+exports.SignatureNamespace = SignatureNamespace;
+
+/***/ }),
+/* 94 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.StylesheetNamespace = void 0;
+
+var _namespaces = __w_pdfjs_require__(77);
+
+var _xfa_object = __w_pdfjs_require__(75);
+
+const STYLESHEET_NS_ID = _namespaces.NamespaceIds.stylesheet.id;
+
+class Stylesheet extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(STYLESHEET_NS_ID, "stylesheet", true);
+ }
+
+}
+
+class StylesheetNamespace {
+ static [_namespaces.$buildXFAObject](name, attributes) {
+ if (StylesheetNamespace.hasOwnProperty(name)) {
+ return StylesheetNamespace[name](attributes);
+ }
+
+ return undefined;
+ }
+
+ static stylesheet(attributes) {
+ return new Stylesheet(attributes);
+ }
+
+}
+
+exports.StylesheetNamespace = StylesheetNamespace;
+
+/***/ }),
+/* 95 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.XdpNamespace = void 0;
+
+var _namespaces = __w_pdfjs_require__(77);
+
+var _xfa_object = __w_pdfjs_require__(75);
+
+const XDP_NS_ID = _namespaces.NamespaceIds.xdp.id;
+
+class Xdp extends _xfa_object.XFAObject {
+ constructor(attributes) {
+ super(XDP_NS_ID, "xdp", true);
+ this.uuid = attributes.uuid || "";
+ this.timeStamp = attributes.timeStamp || "";
+ this.config = null;
+ this.connectionSet = null;
+ this.datasets = null;
+ this.localeSet = null;
+ this.stylesheet = new _xfa_object.XFAObjectArray();
+ this.template = null;
+ }
+
+ [_xfa_object.$onChildCheck](child) {
+ const ns = _namespaces.NamespaceIds[child[_xfa_object.$nodeName]];
+ return ns && child[_xfa_object.$namespaceId] === ns.id;
+ }
+
+}
+
+class XdpNamespace {
+ static [_namespaces.$buildXFAObject](name, attributes) {
+ if (XdpNamespace.hasOwnProperty(name)) {
+ return XdpNamespace[name](attributes);
+ }
+
+ return undefined;
+ }
+
+ static xdp(attributes) {
+ return new Xdp(attributes);
+ }
+
+}
+
+exports.XdpNamespace = XdpNamespace;
+
+/***/ }),
+/* 96 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.XhtmlNamespace = void 0;
+
+var _xfa_object = __w_pdfjs_require__(75);
+
+var _namespaces = __w_pdfjs_require__(77);
+
+var _html_utils = __w_pdfjs_require__(82);
+
+var _utils = __w_pdfjs_require__(76);
+
+const XHTML_NS_ID = _namespaces.NamespaceIds.xhtml.id;
+const VALID_STYLES = new Set(["color", "font", "font-family", "font-size", "font-stretch", "font-style", "font-weight", "margin", "margin-bottom", "margin-left", "margin-right", "margin-top", "letter-spacing", "line-height", "orphans", "page-break-after", "page-break-before", "page-break-inside", "tab-interval", "tab-stop", "text-align", "text-decoration", "text-indent", "vertical-align", "widows", "kerning-mode", "xfa-font-horizontal-scale", "xfa-font-vertical-scale", "xfa-spacerun", "xfa-tab-stops"]);
+const StyleMapping = new Map([["page-break-after", "breakAfter"], ["page-break-before", "breakBefore"], ["page-break-inside", "breakInside"], ["kerning-mode", value => value === "none" ? "none" : "normal"], ["xfa-font-horizontal-scale", value => `scaleX(${Math.max(0, Math.min(parseInt(value) / 100)).toFixed(2)})`], ["xfa-font-vertical-scale", value => `scaleY(${Math.max(0, Math.min(parseInt(value) / 100)).toFixed(2)})`], ["xfa-spacerun", ""], ["xfa-tab-stops", ""], ["font-size", (value, original) => {
+ value = original.fontSize = (0, _utils.getMeasurement)(value);
+ return (0, _html_utils.measureToString)(0.99 * value);
+}], ["letter-spacing", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["line-height", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["margin", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["margin-bottom", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["margin-left", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["margin-right", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["margin-top", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["text-indent", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["font-family", value => value]]);
+const spacesRegExp = /\s+/g;
+const crlfRegExp = /[\r\n]+/g;
+
+function mapStyle(styleStr, fontFinder) {
+ const style = Object.create(null);
+
+ if (!styleStr) {
+ return style;
+ }
+
+ const original = Object.create(null);
+
+ for (const [key, value] of styleStr.split(";").map(s => s.split(":", 2))) {
+ const mapping = StyleMapping.get(key);
+
+ if (mapping === "") {
+ continue;
+ }
+
+ let newValue = value;
+
+ if (mapping) {
+ if (typeof mapping === "string") {
+ newValue = mapping;
+ } else {
+ newValue = mapping(value, original);
+ }
+ }
+
+ if (key.endsWith("scale")) {
+ if (style.transform) {
+ style.transform = `${style[key]} ${newValue}`;
+ } else {
+ style.transform = newValue;
+ }
+ } else {
+ style[key.replaceAll(/-([a-zA-Z])/g, (_, x) => x.toUpperCase())] = newValue;
+ }
+ }
+
+ if (style.fontFamily) {
+ (0, _html_utils.setFontFamily)({
+ typeface: style.fontFamily,
+ weight: style.fontWeight || "normal",
+ posture: style.fontStyle || "normal",
+ size: original.fontSize || 0
+ }, fontFinder, style);
+ }
+
+ (0, _html_utils.fixTextIndent)(style);
+ return style;
+}
+
+function checkStyle(node) {
+ if (!node.style) {
+ return "";
+ }
+
+ return node.style.trim().split(/\s*;\s*/).filter(s => !!s).map(s => s.split(/\s*:\s*/, 2)).filter(([key, value]) => {
+ if (key === "font-family") {
+ node[_xfa_object.$globalData].usedTypefaces.add(value);
+ }
+
+ return VALID_STYLES.has(key);
+ }).map(kv => kv.join(":")).join(";");
+}
+
+const NoWhites = new Set(["body", "html"]);
+
+class XhtmlObject extends _xfa_object.XmlObject {
+ constructor(attributes, name) {
+ super(XHTML_NS_ID, name);
+ this.style = attributes.style || "";
+ }
+
+ [_xfa_object.$clean](builder) {
+ super[_xfa_object.$clean](builder);
+
+ this.style = checkStyle(this);
+ }
+
+ [_xfa_object.$acceptWhitespace]() {
+ return !NoWhites.has(this[_xfa_object.$nodeName]);
+ }
+
+ [_xfa_object.$onText](str) {
+ str = str.replace(crlfRegExp, "");
+
+ if (!this.style.includes("xfa-spacerun:yes")) {
+ str = str.replace(spacesRegExp, " ");
+ }
+
+ if (str) {
+ this[_xfa_object.$content] += str;
+ }
+ }
+
+ [_xfa_object.$pushGlyphs](measure, mustPop = true) {
+ const xfaFont = Object.create(null);
+ const margin = {
+ top: NaN,
+ bottom: NaN,
+ left: NaN,
+ right: NaN
+ };
+ let lineHeight = null;
+
+ for (const [key, value] of this.style.split(";").map(s => s.split(":", 2))) {
+ switch (key) {
+ case "font-family":
+ xfaFont.typeface = (0, _utils.stripQuotes)(value);
+ break;
+
+ case "font-size":
+ xfaFont.size = (0, _utils.getMeasurement)(value);
+ break;
+
+ case "font-weight":
+ xfaFont.weight = value;
+ break;
+
+ case "font-style":
+ xfaFont.posture = value;
+ break;
+
+ case "letter-spacing":
+ xfaFont.letterSpacing = (0, _utils.getMeasurement)(value);
+ break;
+
+ case "margin":
+ const values = value.split(/ \t/).map(x => (0, _utils.getMeasurement)(x));
+
+ switch (values.length) {
+ case 1:
+ margin.top = margin.bottom = margin.left = margin.right = values[0];
+ break;
+
+ case 2:
+ margin.top = margin.bottom = values[0];
+ margin.left = margin.right = values[1];
+ break;
+
+ case 3:
+ margin.top = values[0];
+ margin.bottom = values[2];
+ margin.left = margin.right = values[1];
+ break;
+
+ case 4:
+ margin.top = values[0];
+ margin.left = values[1];
+ margin.bottom = values[2];
+ margin.right = values[3];
+ break;
+ }
+
+ break;
+
+ case "margin-top":
+ margin.top = (0, _utils.getMeasurement)(value);
+ break;
+
+ case "margin-bottom":
+ margin.bottom = (0, _utils.getMeasurement)(value);
+ break;
+
+ case "margin-left":
+ margin.left = (0, _utils.getMeasurement)(value);
+ break;
+
+ case "margin-right":
+ margin.right = (0, _utils.getMeasurement)(value);
+ break;
+
+ case "line-height":
+ lineHeight = (0, _utils.getMeasurement)(value);
+ break;
+ }
+ }
+
+ measure.pushData(xfaFont, margin, lineHeight);
+
+ if (this[_xfa_object.$content]) {
+ measure.addString(this[_xfa_object.$content]);
+ } else {
+ for (const child of this[_xfa_object.$getChildren]()) {
+ if (child[_xfa_object.$nodeName] === "#text") {
+ measure.addString(child[_xfa_object.$content]);
+ continue;
+ }
+
+ child[_xfa_object.$pushGlyphs](measure);
+ }
+ }
+
+ if (mustPop) {
+ measure.popFont();
+ }
+ }
+
+ [_xfa_object.$toHTML](availableSpace) {
+ const children = [];
+ this[_xfa_object.$extra] = {
+ children
+ };
+
+ this[_xfa_object.$childrenToHTML]({});
+
+ if (children.length === 0 && !this[_xfa_object.$content]) {
+ return _utils.HTMLResult.EMPTY;
+ }
+
+ return _utils.HTMLResult.success({
+ name: this[_xfa_object.$nodeName],
+ attributes: {
+ href: this.href,
+ style: mapStyle(this.style, this[_xfa_object.$globalData].fontFinder)
+ },
+ children,
+ value: this[_xfa_object.$content] || ""
+ });
+ }
+
+}
+
+class A extends XhtmlObject {
+ constructor(attributes) {
+ super(attributes, "a");
+ this.href = attributes.href || "";
+ }
+
+}
+
+class B extends XhtmlObject {
+ constructor(attributes) {
+ super(attributes, "b");
+ }
+
+ [_xfa_object.$pushGlyphs](measure) {
+ measure.pushFont({
+ weight: "bold"
+ });
+
+ super[_xfa_object.$pushGlyphs](measure);
+
+ measure.popFont();
+ }
+
+}
+
+class Body extends XhtmlObject {
+ constructor(attributes) {
+ super(attributes, "body");
+ }
+
+ [_xfa_object.$toHTML](availableSpace) {
+ const res = super[_xfa_object.$toHTML](availableSpace);
+
+ const {
+ html
+ } = res;
+
+ if (!html) {
+ return _utils.HTMLResult.EMPTY;
+ }
+
+ html.name = "div";
+ html.attributes.class = ["xfaRich"];
+ return res;
+ }
+
+}
+
+class Br extends XhtmlObject {
+ constructor(attributes) {
+ super(attributes, "br");
+ }
+
+ [_xfa_object.$text]() {
+ return "\n";
+ }
+
+ [_xfa_object.$pushGlyphs](measure) {
+ measure.addString("\n");
+ }
+
+ [_xfa_object.$toHTML](availableSpace) {
+ return _utils.HTMLResult.success({
+ name: "br"
+ });
+ }
+
+}
+
+class Html extends XhtmlObject {
+ constructor(attributes) {
+ super(attributes, "html");
+ }
+
+ [_xfa_object.$toHTML](availableSpace) {
+ const children = [];
+ this[_xfa_object.$extra] = {
+ children
+ };
+
+ this[_xfa_object.$childrenToHTML]({});
+
+ if (children.length === 0) {
+ return _utils.HTMLResult.success({
+ name: "div",
+ attributes: {
+ class: ["xfaRich"],
+ style: {}
+ },
+ value: this[_xfa_object.$content] || ""
+ });
+ }
+
+ if (children.length === 1) {
+ const child = children[0];
+
+ if (child.attributes && child.attributes.class.includes("xfaRich")) {
+ return _utils.HTMLResult.success(child);
+ }
+ }
+
+ return _utils.HTMLResult.success({
+ name: "div",
+ attributes: {
+ class: ["xfaRich"],
+ style: {}
+ },
+ children
+ });
+ }
+
+}
+
+class I extends XhtmlObject {
+ constructor(attributes) {
+ super(attributes, "i");
+ }
+
+ [_xfa_object.$pushGlyphs](measure) {
+ measure.pushFont({
+ posture: "italic"
+ });
+
+ super[_xfa_object.$pushGlyphs](measure);
+
+ measure.popFont();
+ }
+
+}
+
+class Li extends XhtmlObject {
+ constructor(attributes) {
+ super(attributes, "li");
+ }
+
+}
+
+class Ol extends XhtmlObject {
+ constructor(attributes) {
+ super(attributes, "ol");
+ }
+
+}
+
+class P extends XhtmlObject {
+ constructor(attributes) {
+ super(attributes, "p");
+ }
+
+ [_xfa_object.$pushGlyphs](measure) {
+ super[_xfa_object.$pushGlyphs](measure, false);
+
+ measure.addString("\n");
+ measure.addPara();
+ measure.popFont();
+ }
+
+ [_xfa_object.$text]() {
+ return super[_xfa_object.$text]() + "\n";
+ }
+
+}
+
+class Span extends XhtmlObject {
+ constructor(attributes) {
+ super(attributes, "span");
+ }
+
+}
+
+class Sub extends XhtmlObject {
+ constructor(attributes) {
+ super(attributes, "sub");
+ }
+
+}
+
+class Sup extends XhtmlObject {
+ constructor(attributes) {
+ super(attributes, "sup");
+ }
+
+}
+
+class Ul extends XhtmlObject {
+ constructor(attributes) {
+ super(attributes, "ul");
+ }
+
+}
+
+class XhtmlNamespace {
+ static [_namespaces.$buildXFAObject](name, attributes) {
+ if (XhtmlNamespace.hasOwnProperty(name)) {
+ return XhtmlNamespace[name](attributes);
+ }
+
+ return undefined;
+ }
+
+ static a(attributes) {
+ return new A(attributes);
+ }
+
+ static b(attributes) {
+ return new B(attributes);
+ }
+
+ static body(attributes) {
+ return new Body(attributes);
+ }
+
+ static br(attributes) {
+ return new Br(attributes);
+ }
+
+ static html(attributes) {
+ return new Html(attributes);
+ }
+
+ static i(attributes) {
+ return new I(attributes);
+ }
+
+ static li(attributes) {
+ return new Li(attributes);
+ }
+
+ static ol(attributes) {
+ return new Ol(attributes);
+ }
+
+ static p(attributes) {
+ return new P(attributes);
+ }
+
+ static span(attributes) {
+ return new Span(attributes);
+ }
+
+ static sub(attributes) {
+ return new Sub(attributes);
+ }
+
+ static sup(attributes) {
+ return new Sup(attributes);
+ }
+
+ static ul(attributes) {
+ return new Ul(attributes);
+ }
+
+}
+
+exports.XhtmlNamespace = XhtmlNamespace;
+
+/***/ }),
+/* 97 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.UnknownNamespace = void 0;
+
+var _namespaces = __w_pdfjs_require__(77);
+
+var _xfa_object = __w_pdfjs_require__(75);
+
+class UnknownNamespace {
+ constructor(nsId) {
+ this.namespaceId = nsId;
+ }
+
+ [_namespaces.$buildXFAObject](name, attributes) {
+ return new _xfa_object.XmlObject(this.namespaceId, name, attributes);
+ }
+
+}
+
+exports.UnknownNamespace = UnknownNamespace;
+
+/***/ }),
+/* 98 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.XRef = void 0;
+
+var _util = __w_pdfjs_require__(2);
+
+var _primitives = __w_pdfjs_require__(5);
+
+var _parser = __w_pdfjs_require__(17);
+
+var _core_utils = __w_pdfjs_require__(9);
+
+var _crypto = __w_pdfjs_require__(72);
+
+class XRef {
+ constructor(stream, pdfManager) {
+ this.stream = stream;
+ this.pdfManager = pdfManager;
+ this.entries = [];
+ this.xrefstms = Object.create(null);
+ this._cacheMap = new Map();
+ this.stats = {
+ streamTypes: Object.create(null),
+ fontTypes: Object.create(null)
+ };
+ this._newRefNum = null;
+ }
+
+ getNewRef() {
+ if (this._newRefNum === null) {
+ this._newRefNum = this.entries.length;
+ }
+
+ return _primitives.Ref.get(this._newRefNum++, 0);
+ }
+
+ resetNewRef() {
+ this._newRefNum = null;
+ }
+
+ setStartXRef(startXRef) {
+ this.startXRefQueue = [startXRef];
+ }
+
+ parse(recoveryMode = false) {
+ let trailerDict;
+
+ if (!recoveryMode) {
+ trailerDict = this.readXRef();
+ } else {
+ (0, _util.warn)("Indexing all PDF objects");
+ trailerDict = this.indexObjects();
+ }
+
+ trailerDict.assignXref(this);
+ this.trailer = trailerDict;
+ let encrypt;
+
+ try {
+ encrypt = trailerDict.get("Encrypt");
+ } catch (ex) {
+ if (ex instanceof _core_utils.MissingDataException) {
+ throw ex;
+ }
+
+ (0, _util.warn)(`XRef.parse - Invalid "Encrypt" reference: "${ex}".`);
+ }
+
+ if ((0, _primitives.isDict)(encrypt)) {
+ const ids = trailerDict.get("ID");
+ const fileId = ids && ids.length ? ids[0] : "";
+ encrypt.suppressEncryption = true;
+ this.encrypt = new _crypto.CipherTransformFactory(encrypt, fileId, this.pdfManager.password);
+ }
+
+ let root;
+
+ try {
+ root = trailerDict.get("Root");
+ } catch (ex) {
+ if (ex instanceof _core_utils.MissingDataException) {
+ throw ex;
+ }
+
+ (0, _util.warn)(`XRef.parse - Invalid "Root" reference: "${ex}".`);
+ }
+
+ if ((0, _primitives.isDict)(root) && root.has("Pages")) {
+ this.root = root;
+ } else {
+ if (!recoveryMode) {
+ throw new _core_utils.XRefParseException();
+ }
+
+ throw new _util.FormatError("Invalid root reference");
+ }
+ }
+
+ processXRefTable(parser) {
+ if (!("tableState" in this)) {
+ this.tableState = {
+ entryNum: 0,
+ streamPos: parser.lexer.stream.pos,
+ parserBuf1: parser.buf1,
+ parserBuf2: parser.buf2
+ };
+ }
+
+ const obj = this.readXRefTable(parser);
+
+ if (!(0, _primitives.isCmd)(obj, "trailer")) {
+ throw new _util.FormatError("Invalid XRef table: could not find trailer dictionary");
+ }
+
+ let dict = parser.getObj();
+
+ if (!(0, _primitives.isDict)(dict) && dict.dict) {
+ dict = dict.dict;
+ }
+
+ if (!(0, _primitives.isDict)(dict)) {
+ throw new _util.FormatError("Invalid XRef table: could not parse trailer dictionary");
+ }
+
+ delete this.tableState;
+ return dict;
+ }
+
+ readXRefTable(parser) {
+ const stream = parser.lexer.stream;
+ const tableState = this.tableState;
+ stream.pos = tableState.streamPos;
+ parser.buf1 = tableState.parserBuf1;
+ parser.buf2 = tableState.parserBuf2;
+ let obj;
+
+ while (true) {
+ if (!("firstEntryNum" in tableState) || !("entryCount" in tableState)) {
+ if ((0, _primitives.isCmd)(obj = parser.getObj(), "trailer")) {
+ break;
+ }
+
+ tableState.firstEntryNum = obj;
+ tableState.entryCount = parser.getObj();
+ }
+
+ let first = tableState.firstEntryNum;
+ const count = tableState.entryCount;
+
+ if (!Number.isInteger(first) || !Number.isInteger(count)) {
+ throw new _util.FormatError("Invalid XRef table: wrong types in subsection header");
+ }
+
+ for (let i = tableState.entryNum; i < count; i++) {
+ tableState.streamPos = stream.pos;
+ tableState.entryNum = i;
+ tableState.parserBuf1 = parser.buf1;
+ tableState.parserBuf2 = parser.buf2;
+ const entry = {};
+ entry.offset = parser.getObj();
+ entry.gen = parser.getObj();
+ const type = parser.getObj();
+
+ if (type instanceof _primitives.Cmd) {
+ switch (type.cmd) {
+ case "f":
+ entry.free = true;
+ break;
+
+ case "n":
+ entry.uncompressed = true;
+ break;
+ }
+ }
+
+ if (!Number.isInteger(entry.offset) || !Number.isInteger(entry.gen) || !(entry.free || entry.uncompressed)) {
+ throw new _util.FormatError(`Invalid entry in XRef subsection: ${first}, ${count}`);
+ }
+
+ if (i === 0 && entry.free && first === 1) {
+ first = 0;
+ }
+
+ if (!this.entries[i + first]) {
+ this.entries[i + first] = entry;
+ }
+ }
+
+ tableState.entryNum = 0;
+ tableState.streamPos = stream.pos;
+ tableState.parserBuf1 = parser.buf1;
+ tableState.parserBuf2 = parser.buf2;
+ delete tableState.firstEntryNum;
+ delete tableState.entryCount;
+ }
+
+ if (this.entries[0] && !this.entries[0].free) {
+ throw new _util.FormatError("Invalid XRef table: unexpected first object");
+ }
+
+ return obj;
+ }
+
+ processXRefStream(stream) {
+ if (!("streamState" in this)) {
+ const streamParameters = stream.dict;
+ const byteWidths = streamParameters.get("W");
+ let range = streamParameters.get("Index");
+
+ if (!range) {
+ range = [0, streamParameters.get("Size")];
+ }
+
+ this.streamState = {
+ entryRanges: range,
+ byteWidths,
+ entryNum: 0,
+ streamPos: stream.pos
+ };
+ }
+
+ this.readXRefStream(stream);
+ delete this.streamState;
+ return stream.dict;
+ }
+
+ readXRefStream(stream) {
+ let i, j;
+ const streamState = this.streamState;
+ stream.pos = streamState.streamPos;
+ const byteWidths = streamState.byteWidths;
+ const typeFieldWidth = byteWidths[0];
+ const offsetFieldWidth = byteWidths[1];
+ const generationFieldWidth = byteWidths[2];
+ const entryRanges = streamState.entryRanges;
+
+ while (entryRanges.length > 0) {
+ const first = entryRanges[0];
+ const n = entryRanges[1];
+
+ if (!Number.isInteger(first) || !Number.isInteger(n)) {
+ throw new _util.FormatError(`Invalid XRef range fields: ${first}, ${n}`);
+ }
+
+ if (!Number.isInteger(typeFieldWidth) || !Number.isInteger(offsetFieldWidth) || !Number.isInteger(generationFieldWidth)) {
+ throw new _util.FormatError(`Invalid XRef entry fields length: ${first}, ${n}`);
+ }
+
+ for (i = streamState.entryNum; i < n; ++i) {
+ streamState.entryNum = i;
+ streamState.streamPos = stream.pos;
+ let type = 0,
+ offset = 0,
+ generation = 0;
+
+ for (j = 0; j < typeFieldWidth; ++j) {
+ type = type << 8 | stream.getByte();
+ }
+
+ if (typeFieldWidth === 0) {
+ type = 1;
+ }
+
+ for (j = 0; j < offsetFieldWidth; ++j) {
+ offset = offset << 8 | stream.getByte();
+ }
+
+ for (j = 0; j < generationFieldWidth; ++j) {
+ generation = generation << 8 | stream.getByte();
+ }
+
+ const entry = {};
+ entry.offset = offset;
+ entry.gen = generation;
+
+ switch (type) {
+ case 0:
+ entry.free = true;
+ break;
+
+ case 1:
+ entry.uncompressed = true;
+ break;
+
+ case 2:
+ break;
+
+ default:
+ throw new _util.FormatError(`Invalid XRef entry type: ${type}`);
+ }
+
+ if (!this.entries[first + i]) {
+ this.entries[first + i] = entry;
+ }
+ }
+
+ streamState.entryNum = 0;
+ streamState.streamPos = stream.pos;
+ entryRanges.splice(0, 2);
+ }
+ }
+
+ indexObjects() {
+ const TAB = 0x9,
+ LF = 0xa,
+ CR = 0xd,
+ SPACE = 0x20;
+ const PERCENT = 0x25,
+ LT = 0x3c;
+
+ function readToken(data, offset) {
+ let token = "",
+ ch = data[offset];
+
+ while (ch !== LF && ch !== CR && ch !== LT) {
+ if (++offset >= data.length) {
+ break;
+ }
+
+ token += String.fromCharCode(ch);
+ ch = data[offset];
+ }
+
+ return token;
+ }
+
+ function skipUntil(data, offset, what) {
+ const length = what.length,
+ dataLength = data.length;
+ let skipped = 0;
+
+ while (offset < dataLength) {
+ let i = 0;
+
+ while (i < length && data[offset + i] === what[i]) {
+ ++i;
+ }
+
+ if (i >= length) {
+ break;
+ }
+
+ offset++;
+ skipped++;
+ }
+
+ return skipped;
+ }
+
+ const objRegExp = /^(\d+)\s+(\d+)\s+obj\b/;
+ const endobjRegExp = /\bendobj[\b\s]$/;
+ const nestedObjRegExp = /\s+(\d+\s+\d+\s+obj[\b\s<])$/;
+ const CHECK_CONTENT_LENGTH = 25;
+ const trailerBytes = new Uint8Array([116, 114, 97, 105, 108, 101, 114]);
+ const startxrefBytes = new Uint8Array([115, 116, 97, 114, 116, 120, 114, 101, 102]);
+ const objBytes = new Uint8Array([111, 98, 106]);
+ const xrefBytes = new Uint8Array([47, 88, 82, 101, 102]);
+ this.entries.length = 0;
+ const stream = this.stream;
+ stream.pos = 0;
+ const buffer = stream.getBytes(),
+ length = buffer.length;
+ let position = stream.start;
+ const trailers = [],
+ xrefStms = [];
+
+ while (position < length) {
+ let ch = buffer[position];
+
+ if (ch === TAB || ch === LF || ch === CR || ch === SPACE) {
+ ++position;
+ continue;
+ }
+
+ if (ch === PERCENT) {
+ do {
+ ++position;
+
+ if (position >= length) {
+ break;
+ }
+
+ ch = buffer[position];
+ } while (ch !== LF && ch !== CR);
+
+ continue;
+ }
+
+ const token = readToken(buffer, position);
+ let m;
+
+ if (token.startsWith("xref") && (token.length === 4 || /\s/.test(token[4]))) {
+ position += skipUntil(buffer, position, trailerBytes);
+ trailers.push(position);
+ position += skipUntil(buffer, position, startxrefBytes);
+ } else if (m = objRegExp.exec(token)) {
+ const num = m[1] | 0,
+ gen = m[2] | 0;
+ let contentLength,
+ startPos = position + token.length,
+ updateEntries = false;
+
+ if (!this.entries[num]) {
+ updateEntries = true;
+ } else if (this.entries[num].gen === gen) {
+ try {
+ const parser = new _parser.Parser({
+ lexer: new _parser.Lexer(stream.makeSubStream(startPos))
+ });
+ parser.getObj();
+ updateEntries = true;
+ } catch (ex) {
+ if (ex instanceof _core_utils.ParserEOFException) {
+ (0, _util.warn)(`indexObjects -- checking object (${token}): "${ex}".`);
+ } else {
+ updateEntries = true;
+ }
+ }
+ }
+
+ if (updateEntries) {
+ this.entries[num] = {
+ offset: position - stream.start,
+ gen,
+ uncompressed: true
+ };
+ }
+
+ while (startPos < buffer.length) {
+ const endPos = startPos + skipUntil(buffer, startPos, objBytes) + 4;
+ contentLength = endPos - position;
+ const checkPos = Math.max(endPos - CHECK_CONTENT_LENGTH, startPos);
+ const tokenStr = (0, _util.bytesToString)(buffer.subarray(checkPos, endPos));
+
+ if (endobjRegExp.test(tokenStr)) {
+ break;
+ } else {
+ const objToken = nestedObjRegExp.exec(tokenStr);
+
+ if (objToken && objToken[1]) {
+ (0, _util.warn)('indexObjects: Found new "obj" inside of another "obj", ' + 'caused by missing "endobj" -- trying to recover.');
+ contentLength -= objToken[1].length;
+ break;
+ }
+ }
+
+ startPos = endPos;
+ }
+
+ const content = buffer.subarray(position, position + contentLength);
+ const xrefTagOffset = skipUntil(content, 0, xrefBytes);
+
+ if (xrefTagOffset < contentLength && content[xrefTagOffset + 5] < 64) {
+ xrefStms.push(position - stream.start);
+ this.xrefstms[position - stream.start] = 1;
+ }
+
+ position += contentLength;
+ } else if (token.startsWith("trailer") && (token.length === 7 || /\s/.test(token[7]))) {
+ trailers.push(position);
+ position += skipUntil(buffer, position, startxrefBytes);
+ } else {
+ position += token.length + 1;
+ }
+ }
+
+ for (let i = 0, ii = xrefStms.length; i < ii; ++i) {
+ this.startXRefQueue.push(xrefStms[i]);
+ this.readXRef(true);
+ }
+
+ let trailerDict;
+
+ for (let i = 0, ii = trailers.length; i < ii; ++i) {
+ stream.pos = trailers[i];
+ const parser = new _parser.Parser({
+ lexer: new _parser.Lexer(stream),
+ xref: this,
+ allowStreams: true,
+ recoveryMode: true
+ });
+ const obj = parser.getObj();
+
+ if (!(0, _primitives.isCmd)(obj, "trailer")) {
+ continue;
+ }
+
+ const dict = parser.getObj();
+
+ if (!(0, _primitives.isDict)(dict)) {
+ continue;
+ }
+
+ try {
+ const rootDict = dict.get("Root");
+
+ if (!(rootDict instanceof _primitives.Dict)) {
+ continue;
+ }
+
+ const pagesDict = rootDict.get("Pages");
+
+ if (!(pagesDict instanceof _primitives.Dict)) {
+ continue;
+ }
+
+ const pagesCount = pagesDict.get("Count");
+
+ if (!Number.isInteger(pagesCount)) {
+ continue;
+ }
+ } catch (ex) {
+ continue;
+ }
+
+ if (dict.has("ID")) {
+ return dict;
+ }
+
+ trailerDict = dict;
+ }
+
+ if (trailerDict) {
+ return trailerDict;
+ }
+
+ throw new _util.InvalidPDFException("Invalid PDF structure.");
+ }
+
+ readXRef(recoveryMode = false) {
+ const stream = this.stream;
+ const startXRefParsedCache = new Set();
+
+ try {
+ while (this.startXRefQueue.length) {
+ const startXRef = this.startXRefQueue[0];
+
+ if (startXRefParsedCache.has(startXRef)) {
+ (0, _util.warn)("readXRef - skipping XRef table since it was already parsed.");
+ this.startXRefQueue.shift();
+ continue;
+ }
+
+ startXRefParsedCache.add(startXRef);
+ stream.pos = startXRef + stream.start;
+ const parser = new _parser.Parser({
+ lexer: new _parser.Lexer(stream),
+ xref: this,
+ allowStreams: true
+ });
+ let obj = parser.getObj();
+ let dict;
+
+ if ((0, _primitives.isCmd)(obj, "xref")) {
+ dict = this.processXRefTable(parser);
+
+ if (!this.topDict) {
+ this.topDict = dict;
+ }
+
+ obj = dict.get("XRefStm");
+
+ if (Number.isInteger(obj)) {
+ const pos = obj;
+
+ if (!(pos in this.xrefstms)) {
+ this.xrefstms[pos] = 1;
+ this.startXRefQueue.push(pos);
+ }
+ }
+ } else if (Number.isInteger(obj)) {
+ if (!Number.isInteger(parser.getObj()) || !(0, _primitives.isCmd)(parser.getObj(), "obj") || !(0, _primitives.isStream)(obj = parser.getObj())) {
+ throw new _util.FormatError("Invalid XRef stream");
+ }
+
+ dict = this.processXRefStream(obj);
+
+ if (!this.topDict) {
+ this.topDict = dict;
+ }
+
+ if (!dict) {
+ throw new _util.FormatError("Failed to read XRef stream");
+ }
+ } else {
+ throw new _util.FormatError("Invalid XRef stream header");
+ }
+
+ obj = dict.get("Prev");
+
+ if (Number.isInteger(obj)) {
+ this.startXRefQueue.push(obj);
+ } else if ((0, _primitives.isRef)(obj)) {
+ this.startXRefQueue.push(obj.num);
+ }
+
+ this.startXRefQueue.shift();
+ }
+
+ return this.topDict;
+ } catch (e) {
+ if (e instanceof _core_utils.MissingDataException) {
+ throw e;
+ }
+
+ (0, _util.info)("(while reading XRef): " + e);
+ }
+
+ if (recoveryMode) {
+ return undefined;
+ }
+
+ throw new _core_utils.XRefParseException();
+ }
+
+ getEntry(i) {
+ const xrefEntry = this.entries[i];
+
+ if (xrefEntry && !xrefEntry.free && xrefEntry.offset) {
+ return xrefEntry;
+ }
+
+ return null;
+ }
+
+ fetchIfRef(obj, suppressEncryption = false) {
+ if (obj instanceof _primitives.Ref) {
+ return this.fetch(obj, suppressEncryption);
+ }
+
+ return obj;
+ }
+
+ fetch(ref, suppressEncryption = false) {
+ if (!(ref instanceof _primitives.Ref)) {
+ throw new Error("ref object is not a reference");
+ }
+
+ const num = ref.num;
+
+ const cacheEntry = this._cacheMap.get(num);
+
+ if (cacheEntry !== undefined) {
+ if (cacheEntry instanceof _primitives.Dict && !cacheEntry.objId) {
+ cacheEntry.objId = ref.toString();
+ }
+
+ return cacheEntry;
+ }
+
+ let xrefEntry = this.getEntry(num);
+
+ if (xrefEntry === null) {
+ this._cacheMap.set(num, xrefEntry);
+
+ return xrefEntry;
+ }
+
+ if (xrefEntry.uncompressed) {
+ xrefEntry = this.fetchUncompressed(ref, xrefEntry, suppressEncryption);
+ } else {
+ xrefEntry = this.fetchCompressed(ref, xrefEntry, suppressEncryption);
+ }
+
+ if ((0, _primitives.isDict)(xrefEntry)) {
+ xrefEntry.objId = ref.toString();
+ } else if ((0, _primitives.isStream)(xrefEntry)) {
+ xrefEntry.dict.objId = ref.toString();
+ }
+
+ return xrefEntry;
+ }
+
+ fetchUncompressed(ref, xrefEntry, suppressEncryption = false) {
+ const gen = ref.gen;
+ let num = ref.num;
+
+ if (xrefEntry.gen !== gen) {
+ throw new _core_utils.XRefEntryException(`Inconsistent generation in XRef: ${ref}`);
+ }
+
+ const stream = this.stream.makeSubStream(xrefEntry.offset + this.stream.start);
+ const parser = new _parser.Parser({
+ lexer: new _parser.Lexer(stream),
+ xref: this,
+ allowStreams: true
+ });
+ const obj1 = parser.getObj();
+ const obj2 = parser.getObj();
+ const obj3 = parser.getObj();
+
+ if (obj1 !== num || obj2 !== gen || !(obj3 instanceof _primitives.Cmd)) {
+ throw new _core_utils.XRefEntryException(`Bad (uncompressed) XRef entry: ${ref}`);
+ }
+
+ if (obj3.cmd !== "obj") {
+ if (obj3.cmd.startsWith("obj")) {
+ num = parseInt(obj3.cmd.substring(3), 10);
+
+ if (!Number.isNaN(num)) {
+ return num;
+ }
+ }
+
+ throw new _core_utils.XRefEntryException(`Bad (uncompressed) XRef entry: ${ref}`);
+ }
+
+ if (this.encrypt && !suppressEncryption) {
+ xrefEntry = parser.getObj(this.encrypt.createCipherTransform(num, gen));
+ } else {
+ xrefEntry = parser.getObj();
+ }
+
+ if (!(0, _primitives.isStream)(xrefEntry)) {
+ this._cacheMap.set(num, xrefEntry);
+ }
+
+ return xrefEntry;
+ }
+
+ fetchCompressed(ref, xrefEntry, suppressEncryption = false) {
+ const tableOffset = xrefEntry.offset;
+ const stream = this.fetch(_primitives.Ref.get(tableOffset, 0));
+
+ if (!(0, _primitives.isStream)(stream)) {
+ throw new _util.FormatError("bad ObjStm stream");
+ }
+
+ const first = stream.dict.get("First");
+ const n = stream.dict.get("N");
+
+ if (!Number.isInteger(first) || !Number.isInteger(n)) {
+ throw new _util.FormatError("invalid first and n parameters for ObjStm stream");
+ }
+
+ let parser = new _parser.Parser({
+ lexer: new _parser.Lexer(stream),
+ xref: this,
+ allowStreams: true
+ });
+ const nums = new Array(n);
+ const offsets = new Array(n);
+
+ for (let i = 0; i < n; ++i) {
+ const num = parser.getObj();
+
+ if (!Number.isInteger(num)) {
+ throw new _util.FormatError(`invalid object number in the ObjStm stream: ${num}`);
+ }
+
+ const offset = parser.getObj();
+
+ if (!Number.isInteger(offset)) {
+ throw new _util.FormatError(`invalid object offset in the ObjStm stream: ${offset}`);
+ }
+
+ nums[i] = num;
+ offsets[i] = offset;
+ }
+
+ const start = (stream.start || 0) + first;
+ const entries = new Array(n);
+
+ for (let i = 0; i < n; ++i) {
+ const length = i < n - 1 ? offsets[i + 1] - offsets[i] : undefined;
+
+ if (length < 0) {
+ throw new _util.FormatError("Invalid offset in the ObjStm stream.");
+ }
+
+ parser = new _parser.Parser({
+ lexer: new _parser.Lexer(stream.makeSubStream(start + offsets[i], length, stream.dict)),
+ xref: this,
+ allowStreams: true
+ });
+ const obj = parser.getObj();
+ entries[i] = obj;
+
+ if ((0, _primitives.isStream)(obj)) {
+ continue;
+ }
+
+ const num = nums[i],
+ entry = this.entries[num];
+
+ if (entry && entry.offset === tableOffset && entry.gen === i) {
+ this._cacheMap.set(num, obj);
+ }
+ }
+
+ xrefEntry = entries[xrefEntry.gen];
+
+ if (xrefEntry === undefined) {
+ throw new _core_utils.XRefEntryException(`Bad (compressed) XRef entry: ${ref}`);
+ }
+
+ return xrefEntry;
+ }
+
+ async fetchIfRefAsync(obj, suppressEncryption) {
+ if (obj instanceof _primitives.Ref) {
+ return this.fetchAsync(obj, suppressEncryption);
+ }
+
+ return obj;
+ }
+
+ async fetchAsync(ref, suppressEncryption) {
+ try {
+ return this.fetch(ref, suppressEncryption);
+ } catch (ex) {
+ if (!(ex instanceof _core_utils.MissingDataException)) {
+ throw ex;
+ }
+
+ await this.pdfManager.requestRange(ex.begin, ex.end);
+ return this.fetchAsync(ref, suppressEncryption);
+ }
+ }
+
+ getCatalogObj() {
+ return this.root;
+ }
+
+}
+
+exports.XRef = XRef;
+
+/***/ }),
+/* 99 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
exports.MessageHandler = void 0;
var _util = __w_pdfjs_require__(2);
@@ -47480,15 +71664,14 @@ class MessageHandler {
exports.MessageHandler = MessageHandler;
/***/ }),
-/* 47 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
+/* 100 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
-"use strict";
-Object.defineProperty(exports, "__esModule", {
+Object.defineProperty(exports, "__esModule", ({
value: true
-});
+}));
exports.PDFWorkerStream = void 0;
var _util = __w_pdfjs_require__(2);
@@ -47520,11 +71703,9 @@ class PDFWorkerStream {
this._fullRequestReader.cancel(reason);
}
- const readers = this._rangeRequestReaders.slice(0);
-
- readers.forEach(function (reader) {
+ for (const reader of this._rangeRequestReaders.slice(0)) {
reader.cancel(reason);
- });
+ }
}
}
@@ -47633,6 +71814,86 @@ class PDFWorkerStreamRangeReader {
}
/***/ })
-/******/ ]);
+/******/ ]);
+/************************************************************************/
+/******/ // The module cache
+/******/ var __webpack_module_cache__ = {};
+/******/
+/******/ // The require function
+/******/ function __w_pdfjs_require__(moduleId) {
+/******/ // Check if module is in cache
+/******/ var cachedModule = __webpack_module_cache__[moduleId];
+/******/ if (cachedModule !== undefined) {
+/******/ return cachedModule.exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = __webpack_module_cache__[moduleId] = {
+/******/ // no module.id needed
+/******/ // no module.loaded needed
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ __webpack_modules__[moduleId](module, module.exports, __w_pdfjs_require__);
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/************************************************************************/
+/******/ /* webpack/runtime/define property getters */
+/******/ (() => {
+/******/ // define getter functions for harmony exports
+/******/ __w_pdfjs_require__.d = (exports, definition) => {
+/******/ for(var key in definition) {
+/******/ if(__w_pdfjs_require__.o(definition, key) && !__w_pdfjs_require__.o(exports, key)) {
+/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
+/******/ }
+/******/ }
+/******/ };
+/******/ })();
+/******/
+/******/ /* webpack/runtime/hasOwnProperty shorthand */
+/******/ (() => {
+/******/ __w_pdfjs_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
+/******/ })();
+/******/
+/******/ /* webpack/runtime/make namespace object */
+/******/ (() => {
+/******/ // define __esModule on exports
+/******/ __w_pdfjs_require__.r = (exports) => {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/ })();
+/******/
+/************************************************************************/
+var __webpack_exports__ = {};
+// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
+(() => {
+var exports = __webpack_exports__;
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+Object.defineProperty(exports, "WorkerMessageHandler", ({
+ enumerable: true,
+ get: function () {
+ return _worker.WorkerMessageHandler;
+ }
+}));
+
+var _worker = __w_pdfjs_require__(1);
+
+const pdfjsVersion = '2.10.377';
+const pdfjsBuild = '156762c48';
+})();
+
+/******/ return __webpack_exports__;
+/******/ })()
+;
});
//# sourceMappingURL=pdf.worker.js.map \ No newline at end of file