2012-09-01 07:48:21 +09:00
|
|
|
/* Copyright 2012 Mozilla Foundation
|
|
|
|
*
|
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
* you may not use this file except in compliance with the License.
|
|
|
|
* You may obtain a copy of the License at
|
|
|
|
*
|
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
*
|
|
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
* See the License for the specific language governing permissions and
|
|
|
|
* limitations under the License.
|
|
|
|
*/
|
2011-10-26 10:18:22 +09:00
|
|
|
|
2020-01-16 13:32:11 +09:00
|
|
|
import "./compatibility.js";
|
2013-08-13 02:48:06 +09:00
|
|
|
|
2018-09-11 22:27:15 +09:00
|
|
|
const IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];
|
|
|
|
const FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];
|
2013-08-13 02:48:06 +09:00
|
|
|
|
2018-08-27 04:37:05 +09:00
|
|
|
// Permission flags from Table 22, Section 7.6.3.2 of the PDF specification.
|
|
|
|
const PermissionFlag = {
|
|
|
|
PRINT: 0x04,
|
|
|
|
MODIFY_CONTENTS: 0x08,
|
|
|
|
COPY: 0x10,
|
|
|
|
MODIFY_ANNOTATIONS: 0x20,
|
|
|
|
FILL_INTERACTIVE_FORMS: 0x100,
|
|
|
|
COPY_FOR_ACCESSIBILITY: 0x200,
|
|
|
|
ASSEMBLE: 0x400,
|
|
|
|
PRINT_HIGH_QUALITY: 0x800,
|
|
|
|
};
|
|
|
|
|
2018-09-11 22:27:15 +09:00
|
|
|
const TextRenderingMode = {
|
2013-08-20 08:33:20 +09:00
|
|
|
FILL: 0,
|
|
|
|
STROKE: 1,
|
|
|
|
FILL_STROKE: 2,
|
|
|
|
INVISIBLE: 3,
|
|
|
|
FILL_ADD_TO_PATH: 4,
|
|
|
|
STROKE_ADD_TO_PATH: 5,
|
|
|
|
FILL_STROKE_ADD_TO_PATH: 6,
|
|
|
|
ADD_TO_PATH: 7,
|
|
|
|
FILL_STROKE_MASK: 3,
|
Fix inconsistent spacing and trailing commas in objects in remaining `src/` files, so we can enable the `comma-dangle` and `object-curly-spacing` ESLint rules later on
http://eslint.org/docs/rules/comma-dangle
http://eslint.org/docs/rules/object-curly-spacing
Given that we currently have quite inconsistent object formatting, fixing this in *one* big patch probably wouldn't be feasible (since I cannot imagine anyone wanting to review that); hence I've opted to try and do this piecewise instead.
Please note: This patch was created automatically, using the ESLint `--fix` command line option. In a couple of places this caused lines to become too long, and I've fixed those manually; please refer to the interdiff below for the only hand-edits in this patch.
```diff
diff --git a/src/display/canvas.js b/src/display/canvas.js
index 5739f6f2..4216b2d2 100644
--- a/src/display/canvas.js
+++ b/src/display/canvas.js
@@ -2071,7 +2071,7 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
var map = [];
for (var i = 0, ii = positions.length; i < ii; i += 2) {
map.push({ transform: [scaleX, 0, 0, scaleY, positions[i],
- positions[i + 1]], x: 0, y: 0, w: width, h: height, });
+ positions[i + 1]], x: 0, y: 0, w: width, h: height, });
}
this.paintInlineImageXObjectGroup(imgData, map);
},
diff --git a/src/display/svg.js b/src/display/svg.js
index 9eb05dfa..2aa21482 100644
--- a/src/display/svg.js
+++ b/src/display/svg.js
@@ -458,7 +458,11 @@ SVGGraphics = (function SVGGraphicsClosure() {
for (var x = 0; x < fnArrayLen; x++) {
var fnId = fnArray[x];
- opList.push({ 'fnId': fnId, 'fn': REVOPS[fnId], 'args': argsArray[x], });
+ opList.push({
+ 'fnId': fnId,
+ 'fn': REVOPS[fnId],
+ 'args': argsArray[x],
+ });
}
return opListToTree(opList);
},
```
2017-06-02 18:26:37 +09:00
|
|
|
ADD_TO_PATH_FLAG: 4,
|
2013-08-20 08:33:20 +09:00
|
|
|
};
|
|
|
|
|
2018-09-11 22:27:15 +09:00
|
|
|
const ImageKind = {
|
2014-02-26 08:11:15 +09:00
|
|
|
GRAYSCALE_1BPP: 1,
|
|
|
|
RGB_24BPP: 2,
|
Fix inconsistent spacing and trailing commas in objects in remaining `src/` files, so we can enable the `comma-dangle` and `object-curly-spacing` ESLint rules later on
http://eslint.org/docs/rules/comma-dangle
http://eslint.org/docs/rules/object-curly-spacing
Given that we currently have quite inconsistent object formatting, fixing this in *one* big patch probably wouldn't be feasible (since I cannot imagine anyone wanting to review that); hence I've opted to try and do this piecewise instead.
Please note: This patch was created automatically, using the ESLint `--fix` command line option. In a couple of places this caused lines to become too long, and I've fixed those manually; please refer to the interdiff below for the only hand-edits in this patch.
```diff
diff --git a/src/display/canvas.js b/src/display/canvas.js
index 5739f6f2..4216b2d2 100644
--- a/src/display/canvas.js
+++ b/src/display/canvas.js
@@ -2071,7 +2071,7 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
var map = [];
for (var i = 0, ii = positions.length; i < ii; i += 2) {
map.push({ transform: [scaleX, 0, 0, scaleY, positions[i],
- positions[i + 1]], x: 0, y: 0, w: width, h: height, });
+ positions[i + 1]], x: 0, y: 0, w: width, h: height, });
}
this.paintInlineImageXObjectGroup(imgData, map);
},
diff --git a/src/display/svg.js b/src/display/svg.js
index 9eb05dfa..2aa21482 100644
--- a/src/display/svg.js
+++ b/src/display/svg.js
@@ -458,7 +458,11 @@ SVGGraphics = (function SVGGraphicsClosure() {
for (var x = 0; x < fnArrayLen; x++) {
var fnId = fnArray[x];
- opList.push({ 'fnId': fnId, 'fn': REVOPS[fnId], 'args': argsArray[x], });
+ opList.push({
+ 'fnId': fnId,
+ 'fn': REVOPS[fnId],
+ 'args': argsArray[x],
+ });
}
return opListToTree(opList);
},
```
2017-06-02 18:26:37 +09:00
|
|
|
RGBA_32BPP: 3,
|
2014-02-26 08:11:15 +09:00
|
|
|
};
|
|
|
|
|
2018-09-11 22:27:15 +09:00
|
|
|
const AnnotationType = {
|
2015-12-15 22:52:17 +09:00
|
|
|
TEXT: 1,
|
|
|
|
LINK: 2,
|
|
|
|
FREETEXT: 3,
|
|
|
|
LINE: 4,
|
|
|
|
SQUARE: 5,
|
|
|
|
CIRCLE: 6,
|
|
|
|
POLYGON: 7,
|
|
|
|
POLYLINE: 8,
|
|
|
|
HIGHLIGHT: 9,
|
|
|
|
UNDERLINE: 10,
|
|
|
|
SQUIGGLY: 11,
|
|
|
|
STRIKEOUT: 12,
|
|
|
|
STAMP: 13,
|
|
|
|
CARET: 14,
|
|
|
|
INK: 15,
|
|
|
|
POPUP: 16,
|
|
|
|
FILEATTACHMENT: 17,
|
|
|
|
SOUND: 18,
|
|
|
|
MOVIE: 19,
|
|
|
|
WIDGET: 20,
|
|
|
|
SCREEN: 21,
|
|
|
|
PRINTERMARK: 22,
|
|
|
|
TRAPNET: 23,
|
|
|
|
WATERMARK: 24,
|
|
|
|
THREED: 25,
|
Fix inconsistent spacing and trailing commas in objects in remaining `src/` files, so we can enable the `comma-dangle` and `object-curly-spacing` ESLint rules later on
http://eslint.org/docs/rules/comma-dangle
http://eslint.org/docs/rules/object-curly-spacing
Given that we currently have quite inconsistent object formatting, fixing this in *one* big patch probably wouldn't be feasible (since I cannot imagine anyone wanting to review that); hence I've opted to try and do this piecewise instead.
Please note: This patch was created automatically, using the ESLint `--fix` command line option. In a couple of places this caused lines to become too long, and I've fixed those manually; please refer to the interdiff below for the only hand-edits in this patch.
```diff
diff --git a/src/display/canvas.js b/src/display/canvas.js
index 5739f6f2..4216b2d2 100644
--- a/src/display/canvas.js
+++ b/src/display/canvas.js
@@ -2071,7 +2071,7 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
var map = [];
for (var i = 0, ii = positions.length; i < ii; i += 2) {
map.push({ transform: [scaleX, 0, 0, scaleY, positions[i],
- positions[i + 1]], x: 0, y: 0, w: width, h: height, });
+ positions[i + 1]], x: 0, y: 0, w: width, h: height, });
}
this.paintInlineImageXObjectGroup(imgData, map);
},
diff --git a/src/display/svg.js b/src/display/svg.js
index 9eb05dfa..2aa21482 100644
--- a/src/display/svg.js
+++ b/src/display/svg.js
@@ -458,7 +458,11 @@ SVGGraphics = (function SVGGraphicsClosure() {
for (var x = 0; x < fnArrayLen; x++) {
var fnId = fnArray[x];
- opList.push({ 'fnId': fnId, 'fn': REVOPS[fnId], 'args': argsArray[x], });
+ opList.push({
+ 'fnId': fnId,
+ 'fn': REVOPS[fnId],
+ 'args': argsArray[x],
+ });
}
return opListToTree(opList);
},
```
2017-06-02 18:26:37 +09:00
|
|
|
REDACT: 26,
|
2014-06-18 07:43:33 +09:00
|
|
|
};
|
|
|
|
|
2019-05-15 04:14:35 +09:00
|
|
|
const AnnotationStateModelType = {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
MARKED: "Marked",
|
|
|
|
REVIEW: "Review",
|
2019-05-15 04:14:35 +09:00
|
|
|
};
|
|
|
|
|
|
|
|
const AnnotationMarkedState = {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
MARKED: "Marked",
|
|
|
|
UNMARKED: "Unmarked",
|
2019-05-15 04:14:35 +09:00
|
|
|
};
|
|
|
|
|
|
|
|
const AnnotationReviewState = {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
ACCEPTED: "Accepted",
|
|
|
|
REJECTED: "Rejected",
|
|
|
|
CANCELLED: "Cancelled",
|
|
|
|
COMPLETED: "Completed",
|
|
|
|
NONE: "None",
|
2019-05-15 04:14:35 +09:00
|
|
|
};
|
|
|
|
|
|
|
|
const AnnotationReplyType = {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
GROUP: "Group",
|
|
|
|
REPLY: "R",
|
2019-05-15 04:14:35 +09:00
|
|
|
};
|
|
|
|
|
2018-09-11 22:27:15 +09:00
|
|
|
const AnnotationFlag = {
|
2015-11-22 07:25:17 +09:00
|
|
|
INVISIBLE: 0x01,
|
|
|
|
HIDDEN: 0x02,
|
|
|
|
PRINT: 0x04,
|
|
|
|
NOZOOM: 0x08,
|
|
|
|
NOROTATE: 0x10,
|
|
|
|
NOVIEW: 0x20,
|
|
|
|
READONLY: 0x40,
|
|
|
|
LOCKED: 0x80,
|
|
|
|
TOGGLENOVIEW: 0x100,
|
Fix inconsistent spacing and trailing commas in objects in remaining `src/` files, so we can enable the `comma-dangle` and `object-curly-spacing` ESLint rules later on
http://eslint.org/docs/rules/comma-dangle
http://eslint.org/docs/rules/object-curly-spacing
Given that we currently have quite inconsistent object formatting, fixing this in *one* big patch probably wouldn't be feasible (since I cannot imagine anyone wanting to review that); hence I've opted to try and do this piecewise instead.
Please note: This patch was created automatically, using the ESLint `--fix` command line option. In a couple of places this caused lines to become too long, and I've fixed those manually; please refer to the interdiff below for the only hand-edits in this patch.
```diff
diff --git a/src/display/canvas.js b/src/display/canvas.js
index 5739f6f2..4216b2d2 100644
--- a/src/display/canvas.js
+++ b/src/display/canvas.js
@@ -2071,7 +2071,7 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
var map = [];
for (var i = 0, ii = positions.length; i < ii; i += 2) {
map.push({ transform: [scaleX, 0, 0, scaleY, positions[i],
- positions[i + 1]], x: 0, y: 0, w: width, h: height, });
+ positions[i + 1]], x: 0, y: 0, w: width, h: height, });
}
this.paintInlineImageXObjectGroup(imgData, map);
},
diff --git a/src/display/svg.js b/src/display/svg.js
index 9eb05dfa..2aa21482 100644
--- a/src/display/svg.js
+++ b/src/display/svg.js
@@ -458,7 +458,11 @@ SVGGraphics = (function SVGGraphicsClosure() {
for (var x = 0; x < fnArrayLen; x++) {
var fnId = fnArray[x];
- opList.push({ 'fnId': fnId, 'fn': REVOPS[fnId], 'args': argsArray[x], });
+ opList.push({
+ 'fnId': fnId,
+ 'fn': REVOPS[fnId],
+ 'args': argsArray[x],
+ });
}
return opListToTree(opList);
},
```
2017-06-02 18:26:37 +09:00
|
|
|
LOCKEDCONTENTS: 0x200,
|
2015-11-22 07:25:17 +09:00
|
|
|
};
|
|
|
|
|
2018-09-11 22:27:15 +09:00
|
|
|
const AnnotationFieldFlag = {
|
2016-09-22 04:06:44 +09:00
|
|
|
READONLY: 0x0000001,
|
|
|
|
REQUIRED: 0x0000002,
|
|
|
|
NOEXPORT: 0x0000004,
|
|
|
|
MULTILINE: 0x0001000,
|
|
|
|
PASSWORD: 0x0002000,
|
|
|
|
NOTOGGLETOOFF: 0x0004000,
|
|
|
|
RADIO: 0x0008000,
|
|
|
|
PUSHBUTTON: 0x0010000,
|
|
|
|
COMBO: 0x0020000,
|
|
|
|
EDIT: 0x0040000,
|
|
|
|
SORT: 0x0080000,
|
|
|
|
FILESELECT: 0x0100000,
|
|
|
|
MULTISELECT: 0x0200000,
|
|
|
|
DONOTSPELLCHECK: 0x0400000,
|
|
|
|
DONOTSCROLL: 0x0800000,
|
|
|
|
COMB: 0x1000000,
|
|
|
|
RICHTEXT: 0x2000000,
|
|
|
|
RADIOSINUNISON: 0x2000000,
|
|
|
|
COMMITONSELCHANGE: 0x4000000,
|
2016-09-14 23:32:51 +09:00
|
|
|
};
|
|
|
|
|
2018-09-11 22:27:15 +09:00
|
|
|
const AnnotationBorderStyleType = {
|
2014-12-26 04:11:23 +09:00
|
|
|
SOLID: 1,
|
|
|
|
DASHED: 2,
|
|
|
|
BEVELED: 3,
|
|
|
|
INSET: 4,
|
Fix inconsistent spacing and trailing commas in objects in remaining `src/` files, so we can enable the `comma-dangle` and `object-curly-spacing` ESLint rules later on
http://eslint.org/docs/rules/comma-dangle
http://eslint.org/docs/rules/object-curly-spacing
Given that we currently have quite inconsistent object formatting, fixing this in *one* big patch probably wouldn't be feasible (since I cannot imagine anyone wanting to review that); hence I've opted to try and do this piecewise instead.
Please note: This patch was created automatically, using the ESLint `--fix` command line option. In a couple of places this caused lines to become too long, and I've fixed those manually; please refer to the interdiff below for the only hand-edits in this patch.
```diff
diff --git a/src/display/canvas.js b/src/display/canvas.js
index 5739f6f2..4216b2d2 100644
--- a/src/display/canvas.js
+++ b/src/display/canvas.js
@@ -2071,7 +2071,7 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
var map = [];
for (var i = 0, ii = positions.length; i < ii; i += 2) {
map.push({ transform: [scaleX, 0, 0, scaleY, positions[i],
- positions[i + 1]], x: 0, y: 0, w: width, h: height, });
+ positions[i + 1]], x: 0, y: 0, w: width, h: height, });
}
this.paintInlineImageXObjectGroup(imgData, map);
},
diff --git a/src/display/svg.js b/src/display/svg.js
index 9eb05dfa..2aa21482 100644
--- a/src/display/svg.js
+++ b/src/display/svg.js
@@ -458,7 +458,11 @@ SVGGraphics = (function SVGGraphicsClosure() {
for (var x = 0; x < fnArrayLen; x++) {
var fnId = fnArray[x];
- opList.push({ 'fnId': fnId, 'fn': REVOPS[fnId], 'args': argsArray[x], });
+ opList.push({
+ 'fnId': fnId,
+ 'fn': REVOPS[fnId],
+ 'args': argsArray[x],
+ });
}
return opListToTree(opList);
},
```
2017-06-02 18:26:37 +09:00
|
|
|
UNDERLINE: 5,
|
2014-12-26 04:11:23 +09:00
|
|
|
};
|
|
|
|
|
2020-10-01 03:58:45 +09:00
|
|
|
const AnnotationActionEventType = {
|
|
|
|
E: "MouseEnter",
|
|
|
|
X: "MouseExit",
|
|
|
|
D: "MouseDown",
|
|
|
|
U: "MouseUp",
|
|
|
|
Fo: "Focus",
|
|
|
|
Bl: "Blur",
|
|
|
|
PO: "PageOpen",
|
|
|
|
PC: "PageClose",
|
|
|
|
PV: "PageVisible",
|
|
|
|
PI: "PageInvisible",
|
|
|
|
K: "Keystroke",
|
|
|
|
F: "Format",
|
|
|
|
V: "Validate",
|
|
|
|
C: "Calculate",
|
2020-12-08 03:22:14 +09:00
|
|
|
};
|
|
|
|
|
|
|
|
const DocumentActionEventType = {
|
2020-10-01 03:58:45 +09:00
|
|
|
WC: "WillClose",
|
|
|
|
WS: "WillSave",
|
|
|
|
DS: "DidSave",
|
|
|
|
WP: "WillPrint",
|
|
|
|
DP: "DidPrint",
|
|
|
|
};
|
|
|
|
|
2020-12-08 03:22:14 +09:00
|
|
|
const PageActionEventType = {
|
|
|
|
O: "PageOpen",
|
|
|
|
C: "PageClose",
|
|
|
|
};
|
|
|
|
|
2018-09-11 22:27:15 +09:00
|
|
|
const StreamType = {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
UNKNOWN: "UNKNOWN",
|
|
|
|
FLATE: "FLATE",
|
|
|
|
LZW: "LZW",
|
|
|
|
DCT: "DCT",
|
|
|
|
JPX: "JPX",
|
|
|
|
JBIG: "JBIG",
|
|
|
|
A85: "A85",
|
|
|
|
AHX: "AHX",
|
|
|
|
CCF: "CCF",
|
|
|
|
RLX: "RLX", // PDF short name is 'RL', but telemetry requires three chars.
|
2014-06-16 23:52:04 +09:00
|
|
|
};
|
|
|
|
|
2018-09-11 22:27:15 +09:00
|
|
|
const FontType = {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
UNKNOWN: "UNKNOWN",
|
|
|
|
TYPE1: "TYPE1",
|
|
|
|
TYPE1C: "TYPE1C",
|
|
|
|
CIDFONTTYPE0: "CIDFONTTYPE0",
|
|
|
|
CIDFONTTYPE0C: "CIDFONTTYPE0C",
|
|
|
|
TRUETYPE: "TRUETYPE",
|
|
|
|
CIDFONTTYPE2: "CIDFONTTYPE2",
|
|
|
|
TYPE3: "TYPE3",
|
|
|
|
OPENTYPE: "OPENTYPE",
|
|
|
|
TYPE0: "TYPE0",
|
|
|
|
MMTYPE1: "MMTYPE1",
|
2014-06-16 23:52:04 +09:00
|
|
|
};
|
|
|
|
|
2018-02-15 01:35:08 +09:00
|
|
|
const VerbosityLevel = {
|
|
|
|
ERRORS: 0,
|
|
|
|
WARNINGS: 1,
|
|
|
|
INFOS: 5,
|
2013-12-19 06:39:03 +09:00
|
|
|
};
|
|
|
|
|
2018-09-11 22:27:15 +09:00
|
|
|
const CMapCompressionType = {
|
2017-02-12 23:54:41 +09:00
|
|
|
NONE: 0,
|
|
|
|
BINARY: 1,
|
|
|
|
STREAM: 2,
|
|
|
|
};
|
|
|
|
|
2013-11-14 04:43:38 +09:00
|
|
|
// All the possible operations for an operator list.
|
2018-09-11 22:27:15 +09:00
|
|
|
const OPS = {
|
2013-11-18 19:58:38 +09:00
|
|
|
// Intentionally start from 1 so it is easy to spot bad operators that will be
|
2013-11-14 04:43:38 +09:00
|
|
|
// 0's.
|
|
|
|
dependency: 1,
|
|
|
|
setLineWidth: 2,
|
|
|
|
setLineCap: 3,
|
|
|
|
setLineJoin: 4,
|
|
|
|
setMiterLimit: 5,
|
|
|
|
setDash: 6,
|
|
|
|
setRenderingIntent: 7,
|
|
|
|
setFlatness: 8,
|
|
|
|
setGState: 9,
|
|
|
|
save: 10,
|
|
|
|
restore: 11,
|
|
|
|
transform: 12,
|
|
|
|
moveTo: 13,
|
|
|
|
lineTo: 14,
|
|
|
|
curveTo: 15,
|
|
|
|
curveTo2: 16,
|
|
|
|
curveTo3: 17,
|
|
|
|
closePath: 18,
|
|
|
|
rectangle: 19,
|
|
|
|
stroke: 20,
|
|
|
|
closeStroke: 21,
|
|
|
|
fill: 22,
|
|
|
|
eoFill: 23,
|
|
|
|
fillStroke: 24,
|
|
|
|
eoFillStroke: 25,
|
|
|
|
closeFillStroke: 26,
|
|
|
|
closeEOFillStroke: 27,
|
|
|
|
endPath: 28,
|
|
|
|
clip: 29,
|
|
|
|
eoClip: 30,
|
|
|
|
beginText: 31,
|
|
|
|
endText: 32,
|
|
|
|
setCharSpacing: 33,
|
|
|
|
setWordSpacing: 34,
|
|
|
|
setHScale: 35,
|
|
|
|
setLeading: 36,
|
|
|
|
setFont: 37,
|
|
|
|
setTextRenderingMode: 38,
|
|
|
|
setTextRise: 39,
|
|
|
|
moveText: 40,
|
|
|
|
setLeadingMoveText: 41,
|
|
|
|
setTextMatrix: 42,
|
|
|
|
nextLine: 43,
|
|
|
|
showText: 44,
|
|
|
|
showSpacedText: 45,
|
|
|
|
nextLineShowText: 46,
|
|
|
|
nextLineSetSpacingShowText: 47,
|
|
|
|
setCharWidth: 48,
|
|
|
|
setCharWidthAndBounds: 49,
|
|
|
|
setStrokeColorSpace: 50,
|
|
|
|
setFillColorSpace: 51,
|
|
|
|
setStrokeColor: 52,
|
|
|
|
setStrokeColorN: 53,
|
|
|
|
setFillColor: 54,
|
|
|
|
setFillColorN: 55,
|
|
|
|
setStrokeGray: 56,
|
|
|
|
setFillGray: 57,
|
|
|
|
setStrokeRGBColor: 58,
|
|
|
|
setFillRGBColor: 59,
|
|
|
|
setStrokeCMYKColor: 60,
|
|
|
|
setFillCMYKColor: 61,
|
|
|
|
shadingFill: 62,
|
|
|
|
beginInlineImage: 63,
|
|
|
|
beginImageData: 64,
|
|
|
|
endInlineImage: 65,
|
|
|
|
paintXObject: 66,
|
|
|
|
markPoint: 67,
|
|
|
|
markPointProps: 68,
|
|
|
|
beginMarkedContent: 69,
|
|
|
|
beginMarkedContentProps: 70,
|
|
|
|
endMarkedContent: 71,
|
|
|
|
beginCompat: 72,
|
|
|
|
endCompat: 73,
|
|
|
|
paintFormXObjectBegin: 74,
|
|
|
|
paintFormXObjectEnd: 75,
|
|
|
|
beginGroup: 76,
|
|
|
|
endGroup: 77,
|
|
|
|
beginAnnotations: 78,
|
|
|
|
endAnnotations: 79,
|
|
|
|
beginAnnotation: 80,
|
|
|
|
endAnnotation: 81,
|
|
|
|
paintJpegXObject: 82,
|
|
|
|
paintImageMaskXObject: 83,
|
|
|
|
paintImageMaskXObjectGroup: 84,
|
|
|
|
paintImageXObject: 85,
|
|
|
|
paintInlineImageXObject: 86,
|
2014-02-24 23:00:08 +09:00
|
|
|
paintInlineImageXObjectGroup: 87,
|
2014-02-25 00:59:02 +09:00
|
|
|
paintImageXObjectRepeat: 88,
|
2014-03-17 00:17:13 +09:00
|
|
|
paintImageMaskXObjectRepeat: 89,
|
2014-04-30 23:09:04 +09:00
|
|
|
paintSolidColorImageMask: 90,
|
Fix inconsistent spacing and trailing commas in objects in remaining `src/` files, so we can enable the `comma-dangle` and `object-curly-spacing` ESLint rules later on
http://eslint.org/docs/rules/comma-dangle
http://eslint.org/docs/rules/object-curly-spacing
Given that we currently have quite inconsistent object formatting, fixing this in *one* big patch probably wouldn't be feasible (since I cannot imagine anyone wanting to review that); hence I've opted to try and do this piecewise instead.
Please note: This patch was created automatically, using the ESLint `--fix` command line option. In a couple of places this caused lines to become too long, and I've fixed those manually; please refer to the interdiff below for the only hand-edits in this patch.
```diff
diff --git a/src/display/canvas.js b/src/display/canvas.js
index 5739f6f2..4216b2d2 100644
--- a/src/display/canvas.js
+++ b/src/display/canvas.js
@@ -2071,7 +2071,7 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
var map = [];
for (var i = 0, ii = positions.length; i < ii; i += 2) {
map.push({ transform: [scaleX, 0, 0, scaleY, positions[i],
- positions[i + 1]], x: 0, y: 0, w: width, h: height, });
+ positions[i + 1]], x: 0, y: 0, w: width, h: height, });
}
this.paintInlineImageXObjectGroup(imgData, map);
},
diff --git a/src/display/svg.js b/src/display/svg.js
index 9eb05dfa..2aa21482 100644
--- a/src/display/svg.js
+++ b/src/display/svg.js
@@ -458,7 +458,11 @@ SVGGraphics = (function SVGGraphicsClosure() {
for (var x = 0; x < fnArrayLen; x++) {
var fnId = fnArray[x];
- opList.push({ 'fnId': fnId, 'fn': REVOPS[fnId], 'args': argsArray[x], });
+ opList.push({
+ 'fnId': fnId,
+ 'fn': REVOPS[fnId],
+ 'args': argsArray[x],
+ });
}
return opListToTree(opList);
},
```
2017-06-02 18:26:37 +09:00
|
|
|
constructPath: 91,
|
2013-11-14 04:43:38 +09:00
|
|
|
};
|
2013-08-13 02:48:06 +09:00
|
|
|
|
2018-09-11 22:27:15 +09:00
|
|
|
const UNSUPPORTED_FEATURES = {
|
2020-05-01 07:27:37 +09:00
|
|
|
/** @deprecated unused */
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
unknown: "unknown",
|
|
|
|
forms: "forms",
|
|
|
|
javaScript: "javaScript",
|
|
|
|
smask: "smask",
|
|
|
|
shadingPattern: "shadingPattern",
|
2020-05-01 07:27:37 +09:00
|
|
|
/** @deprecated unused */
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
font: "font",
|
2020-05-01 07:27:37 +09:00
|
|
|
errorTilingPattern: "errorTilingPattern",
|
|
|
|
errorExtGState: "errorExtGState",
|
|
|
|
errorXObject: "errorXObject",
|
|
|
|
errorFontLoadType3: "errorFontLoadType3",
|
|
|
|
errorFontState: "errorFontState",
|
|
|
|
errorFontMissing: "errorFontMissing",
|
|
|
|
errorFontTranslate: "errorFontTranslate",
|
|
|
|
errorColorSpace: "errorColorSpace",
|
|
|
|
errorOperatorList: "errorOperatorList",
|
|
|
|
errorFontToUnicode: "errorFontToUnicode",
|
|
|
|
errorFontLoadNative: "errorFontLoadNative",
|
|
|
|
errorFontGetPath: "errorFontGetPath",
|
2020-07-15 07:17:27 +09:00
|
|
|
errorMarkedContent: "errorMarkedContent",
|
2018-09-11 22:27:15 +09:00
|
|
|
};
|
|
|
|
|
|
|
|
const PasswordResponses = {
|
|
|
|
NEED_PASSWORD: 1,
|
|
|
|
INCORRECT_PASSWORD: 2,
|
|
|
|
};
|
|
|
|
|
2018-02-15 01:35:08 +09:00
|
|
|
let verbosity = VerbosityLevel.WARNINGS;
|
2016-03-03 09:48:21 +09:00
|
|
|
|
|
|
|
function setVerbosityLevel(level) {
|
2018-02-15 01:35:08 +09:00
|
|
|
if (Number.isInteger(level)) {
|
|
|
|
verbosity = level;
|
|
|
|
}
|
2016-03-03 09:48:21 +09:00
|
|
|
}
|
|
|
|
|
|
|
|
function getVerbosityLevel() {
|
|
|
|
return verbosity;
|
|
|
|
}
|
|
|
|
|
2014-01-04 02:34:13 +09:00
|
|
|
// A notice for devs. These are good for things that are helpful to devs, such
|
|
|
|
// as warning that Workers were disabled, which is important to devs but not
|
|
|
|
// end users.
|
2012-05-15 09:19:09 +09:00
|
|
|
function info(msg) {
|
2018-02-15 01:35:08 +09:00
|
|
|
if (verbosity >= VerbosityLevel.INFOS) {
|
2019-08-11 21:10:29 +09:00
|
|
|
console.log(`Info: ${msg}`);
|
2012-05-15 09:19:09 +09:00
|
|
|
}
|
2011-10-25 08:55:23 +09:00
|
|
|
}
|
|
|
|
|
2014-01-04 02:34:13 +09:00
|
|
|
// Non-fatal warnings.
|
2012-05-15 09:19:09 +09:00
|
|
|
function warn(msg) {
|
2018-02-15 01:35:08 +09:00
|
|
|
if (verbosity >= VerbosityLevel.WARNINGS) {
|
2019-08-11 21:10:29 +09:00
|
|
|
console.log(`Warning: ${msg}`);
|
2011-10-25 08:55:23 +09:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-06-29 05:51:31 +09:00
|
|
|
function unreachable(msg) {
|
2011-10-25 08:55:23 +09:00
|
|
|
throw new Error(msg);
|
|
|
|
}
|
|
|
|
|
|
|
|
function assert(cond, msg) {
|
2014-03-03 21:21:57 +09:00
|
|
|
if (!cond) {
|
2017-06-29 05:51:31 +09:00
|
|
|
unreachable(msg);
|
2014-03-03 21:21:57 +09:00
|
|
|
}
|
2011-10-25 08:55:23 +09:00
|
|
|
}
|
|
|
|
|
2016-01-16 06:05:46 +09:00
|
|
|
// Checks if URLs have the same origin. For non-HTTP based URLs, returns false.
|
|
|
|
function isSameOrigin(baseUrl, otherUrl) {
|
2019-08-11 21:10:29 +09:00
|
|
|
let base;
|
2016-01-16 06:05:46 +09:00
|
|
|
try {
|
2019-08-11 21:10:29 +09:00
|
|
|
base = new URL(baseUrl);
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (!base.origin || base.origin === "null") {
|
2016-01-16 06:05:46 +09:00
|
|
|
return false; // non-HTTP url
|
|
|
|
}
|
|
|
|
} catch (e) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2019-08-11 21:10:29 +09:00
|
|
|
const other = new URL(otherUrl, base);
|
2016-01-16 06:05:46 +09:00
|
|
|
return base.origin === other.origin;
|
|
|
|
}
|
|
|
|
|
2020-06-30 00:15:14 +09:00
|
|
|
// Checks if URLs use one of the allowed protocols, e.g. to avoid XSS.
|
2018-09-11 22:16:07 +09:00
|
|
|
function _isValidProtocol(url) {
|
2016-10-03 21:35:29 +09:00
|
|
|
if (!url) {
|
2013-07-13 03:36:20 +09:00
|
|
|
return false;
|
|
|
|
}
|
2016-10-03 21:35:29 +09:00
|
|
|
switch (url.protocol) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
case "http:":
|
|
|
|
case "https:":
|
|
|
|
case "ftp:":
|
|
|
|
case "mailto:":
|
|
|
|
case "tel:":
|
2013-07-13 03:36:20 +09:00
|
|
|
return true;
|
|
|
|
default:
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
2015-12-22 20:59:23 +09:00
|
|
|
|
2016-10-03 21:35:29 +09:00
|
|
|
/**
|
2018-09-11 22:16:07 +09:00
|
|
|
* Attempts to create a valid absolute URL.
|
|
|
|
*
|
2016-10-03 21:35:29 +09:00
|
|
|
* @param {URL|string} url - An absolute, or relative, URL.
|
|
|
|
* @param {URL|string} baseUrl - An absolute URL.
|
|
|
|
* @returns Either a valid {URL}, or `null` otherwise.
|
|
|
|
*/
|
|
|
|
function createValidAbsoluteUrl(url, baseUrl) {
|
|
|
|
if (!url) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
try {
|
2019-08-11 21:10:29 +09:00
|
|
|
const absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url);
|
2018-09-11 22:16:07 +09:00
|
|
|
if (_isValidProtocol(absoluteUrl)) {
|
2016-10-03 21:35:29 +09:00
|
|
|
return absoluteUrl;
|
|
|
|
}
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
} catch (ex) {
|
|
|
|
/* `new URL()` will throw on incorrect data. */
|
|
|
|
}
|
2016-10-03 21:35:29 +09:00
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2011-10-25 08:55:23 +09:00
|
|
|
function shadow(obj, prop, value) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
Object.defineProperty(obj, prop, {
|
|
|
|
value,
|
|
|
|
enumerable: true,
|
|
|
|
configurable: true,
|
|
|
|
writable: false,
|
|
|
|
});
|
2011-10-25 08:55:23 +09:00
|
|
|
return value;
|
|
|
|
}
|
|
|
|
|
2020-07-23 05:38:04 +09:00
|
|
|
/**
|
|
|
|
* @type {any}
|
|
|
|
*/
|
2019-09-29 08:18:48 +09:00
|
|
|
const BaseException = (function BaseExceptionClosure() {
|
2020-03-25 18:15:50 +09:00
|
|
|
// eslint-disable-next-line no-shadow
|
2019-09-29 08:18:48 +09:00
|
|
|
function BaseException(message) {
|
|
|
|
if (this.constructor === BaseException) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
unreachable("Cannot initialize BaseException.");
|
2019-09-29 08:18:48 +09:00
|
|
|
}
|
|
|
|
this.message = message;
|
|
|
|
this.name = this.constructor.name;
|
2012-05-18 04:34:39 +09:00
|
|
|
}
|
2019-09-29 08:18:48 +09:00
|
|
|
BaseException.prototype = new Error();
|
|
|
|
BaseException.constructor = BaseException;
|
2012-05-18 04:34:39 +09:00
|
|
|
|
2019-09-29 08:18:48 +09:00
|
|
|
return BaseException;
|
2012-05-18 04:34:39 +09:00
|
|
|
})();
|
2012-05-15 03:45:07 +09:00
|
|
|
|
2019-09-29 08:18:48 +09:00
|
|
|
class PasswordException extends BaseException {
|
|
|
|
constructor(msg, code) {
|
|
|
|
super(msg);
|
|
|
|
this.code = code;
|
2012-10-16 19:10:37 +09:00
|
|
|
}
|
2019-09-29 08:18:48 +09:00
|
|
|
}
|
2012-10-16 19:10:37 +09:00
|
|
|
|
2019-09-29 08:18:48 +09:00
|
|
|
class UnknownErrorException extends BaseException {
|
|
|
|
constructor(msg, details) {
|
|
|
|
super(msg);
|
|
|
|
this.details = details;
|
2013-01-30 03:13:28 +09:00
|
|
|
}
|
2019-09-29 08:18:48 +09:00
|
|
|
}
|
2013-01-30 03:13:28 +09:00
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
class InvalidPDFException extends BaseException {}
|
2013-01-30 03:13:28 +09:00
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
class MissingPDFException extends BaseException {}
|
2013-01-30 03:13:28 +09:00
|
|
|
|
2019-09-29 08:18:48 +09:00
|
|
|
class UnexpectedResponseException extends BaseException {
|
|
|
|
constructor(msg, status) {
|
|
|
|
super(msg);
|
2014-09-13 23:47:16 +09:00
|
|
|
this.status = status;
|
|
|
|
}
|
2019-09-29 08:18:48 +09:00
|
|
|
}
|
2014-09-13 23:47:16 +09:00
|
|
|
|
2017-06-29 05:51:31 +09:00
|
|
|
/**
|
|
|
|
* Error caused during parsing PDF data.
|
|
|
|
*/
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
class FormatError extends BaseException {}
|
2017-06-29 05:51:31 +09:00
|
|
|
|
2017-08-04 06:36:46 +09:00
|
|
|
/**
|
|
|
|
* Error used to indicate task cancellation.
|
|
|
|
*/
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
class AbortException extends BaseException {}
|
2017-08-04 06:36:46 +09:00
|
|
|
|
2019-08-11 21:10:29 +09:00
|
|
|
const NullCharactersRegExp = /\x00/g;
|
2016-01-05 05:33:41 +09:00
|
|
|
|
2020-08-03 19:19:48 +09:00
|
|
|
/**
|
|
|
|
* @param {string} str
|
|
|
|
*/
|
2016-01-05 05:33:41 +09:00
|
|
|
function removeNullCharacters(str) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (typeof str !== "string") {
|
|
|
|
warn("The argument for removeNullCharacters must be a string.");
|
2016-01-05 05:33:41 +09:00
|
|
|
return str;
|
|
|
|
}
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
return str.replace(NullCharactersRegExp, "");
|
2016-01-05 05:33:41 +09:00
|
|
|
}
|
2013-02-07 08:19:29 +09:00
|
|
|
|
2011-10-25 08:55:23 +09:00
|
|
|
function bytesToString(bytes) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
assert(
|
|
|
|
bytes !== null && typeof bytes === "object" && bytes.length !== undefined,
|
|
|
|
"Invalid argument for bytesToString"
|
|
|
|
);
|
2019-08-11 21:10:29 +09:00
|
|
|
const length = bytes.length;
|
|
|
|
const MAX_ARGUMENT_COUNT = 8192;
|
2014-03-27 21:01:43 +09:00
|
|
|
if (length < MAX_ARGUMENT_COUNT) {
|
|
|
|
return String.fromCharCode.apply(null, bytes);
|
|
|
|
}
|
2019-08-11 21:10:29 +09:00
|
|
|
const strBuf = [];
|
|
|
|
for (let i = 0; i < length; i += MAX_ARGUMENT_COUNT) {
|
|
|
|
const chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length);
|
|
|
|
const chunk = bytes.subarray(i, chunkEnd);
|
2014-03-27 21:01:43 +09:00
|
|
|
strBuf.push(String.fromCharCode.apply(null, chunk));
|
2014-02-28 08:23:56 +09:00
|
|
|
}
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
return strBuf.join("");
|
2011-10-25 08:55:23 +09:00
|
|
|
}
|
|
|
|
|
|
|
|
function stringToBytes(str) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
assert(typeof str === "string", "Invalid argument for stringToBytes");
|
2019-08-11 21:10:29 +09:00
|
|
|
const length = str.length;
|
|
|
|
const bytes = new Uint8Array(length);
|
|
|
|
for (let i = 0; i < length; ++i) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
bytes[i] = str.charCodeAt(i) & 0xff;
|
2014-03-03 21:21:57 +09:00
|
|
|
}
|
2011-10-25 08:55:23 +09:00
|
|
|
return bytes;
|
|
|
|
}
|
|
|
|
|
2016-02-10 05:55:11 +09:00
|
|
|
/**
|
|
|
|
* Gets length of the array (Array, Uint8Array, or string) in bytes.
|
2020-07-23 05:38:04 +09:00
|
|
|
* @param {Array<any>|Uint8Array|string} arr
|
2016-02-10 05:55:11 +09:00
|
|
|
* @returns {number}
|
|
|
|
*/
|
|
|
|
function arrayByteLength(arr) {
|
|
|
|
if (arr.length !== undefined) {
|
|
|
|
return arr.length;
|
|
|
|
}
|
2020-05-05 19:40:01 +09:00
|
|
|
assert(arr.byteLength !== undefined, "arrayByteLength - invalid argument.");
|
2016-02-10 05:55:11 +09:00
|
|
|
return arr.byteLength;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Combines array items (arrays) into single Uint8Array object.
|
2020-07-23 05:38:04 +09:00
|
|
|
* @param {Array<Array<any>|Uint8Array|string>} arr - the array of the arrays
|
|
|
|
* (Array, Uint8Array, or string).
|
2016-02-10 05:55:11 +09:00
|
|
|
* @returns {Uint8Array}
|
|
|
|
*/
|
|
|
|
function arraysToBytes(arr) {
|
2019-08-11 21:10:29 +09:00
|
|
|
const length = arr.length;
|
2016-02-10 05:55:11 +09:00
|
|
|
// Shortcut: if first and only item is Uint8Array, return it.
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (length === 1 && arr[0] instanceof Uint8Array) {
|
2016-02-10 05:55:11 +09:00
|
|
|
return arr[0];
|
|
|
|
}
|
2019-08-11 21:10:29 +09:00
|
|
|
let resultLength = 0;
|
|
|
|
for (let i = 0; i < length; i++) {
|
|
|
|
resultLength += arrayByteLength(arr[i]);
|
|
|
|
}
|
|
|
|
let pos = 0;
|
|
|
|
const data = new Uint8Array(resultLength);
|
|
|
|
for (let i = 0; i < length; i++) {
|
|
|
|
let item = arr[i];
|
2016-02-10 05:55:11 +09:00
|
|
|
if (!(item instanceof Uint8Array)) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (typeof item === "string") {
|
2016-02-10 05:55:11 +09:00
|
|
|
item = stringToBytes(item);
|
|
|
|
} else {
|
|
|
|
item = new Uint8Array(item);
|
|
|
|
}
|
|
|
|
}
|
2019-08-11 21:10:29 +09:00
|
|
|
const itemLength = item.byteLength;
|
2016-02-10 05:55:11 +09:00
|
|
|
data.set(item, pos);
|
|
|
|
pos += itemLength;
|
|
|
|
}
|
|
|
|
return data;
|
|
|
|
}
|
|
|
|
|
2014-03-27 21:01:43 +09:00
|
|
|
function string32(value) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
return String.fromCharCode(
|
|
|
|
(value >> 24) & 0xff,
|
|
|
|
(value >> 16) & 0xff,
|
|
|
|
(value >> 8) & 0xff,
|
|
|
|
value & 0xff
|
|
|
|
);
|
2014-03-27 21:01:43 +09:00
|
|
|
}
|
|
|
|
|
2020-10-29 22:17:32 +09:00
|
|
|
function objectSize(obj) {
|
|
|
|
return Object.keys(obj).length;
|
|
|
|
}
|
|
|
|
|
2020-10-28 22:04:09 +09:00
|
|
|
// Ensures that the returned Object has a `null` prototype.
|
|
|
|
function objectFromEntries(iterable) {
|
|
|
|
return Object.assign(Object.create(null), Object.fromEntries(iterable));
|
|
|
|
}
|
|
|
|
|
2020-02-10 17:38:33 +09:00
|
|
|
// Checks the endianness of the platform.
|
2014-03-21 00:57:11 +09:00
|
|
|
function isLittleEndian() {
|
2019-08-11 21:10:29 +09:00
|
|
|
const buffer8 = new Uint8Array(4);
|
2014-03-21 00:57:11 +09:00
|
|
|
buffer8[0] = 1;
|
2019-08-11 21:10:29 +09:00
|
|
|
const view32 = new Uint32Array(buffer8.buffer, 0, 1);
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
return view32[0] === 1;
|
2014-03-21 00:57:11 +09:00
|
|
|
}
|
2020-02-10 17:38:33 +09:00
|
|
|
const IsLittleEndianCached = {
|
|
|
|
get value() {
|
|
|
|
return shadow(this, "value", isLittleEndian());
|
|
|
|
},
|
|
|
|
};
|
2014-03-21 00:57:11 +09:00
|
|
|
|
2016-03-29 04:49:22 +09:00
|
|
|
// Checks if it's possible to eval JS expressions.
|
|
|
|
function isEvalSupported() {
|
|
|
|
try {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
new Function(""); // eslint-disable-line no-new, no-new-func
|
2016-03-29 04:49:22 +09:00
|
|
|
return true;
|
|
|
|
} catch (e) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
2020-02-10 17:38:33 +09:00
|
|
|
const IsEvalSupportedCached = {
|
|
|
|
get value() {
|
|
|
|
return shadow(this, "value", isEvalSupported());
|
|
|
|
},
|
|
|
|
};
|
2016-03-29 04:49:22 +09:00
|
|
|
|
2020-10-30 22:51:50 +09:00
|
|
|
const hexNumbers = [...Array(256).keys()].map(n =>
|
|
|
|
n.toString(16).padStart(2, "0")
|
|
|
|
);
|
2012-02-02 07:48:44 +09:00
|
|
|
|
2019-08-11 20:56:15 +09:00
|
|
|
class Util {
|
2020-10-30 22:51:50 +09:00
|
|
|
static makeHexColor(r, g, b) {
|
|
|
|
return `#${hexNumbers[r]}${hexNumbers[g]}${hexNumbers[b]}`;
|
2019-08-11 20:56:15 +09:00
|
|
|
}
|
2012-02-02 07:48:44 +09:00
|
|
|
|
2013-04-16 08:14:07 +09:00
|
|
|
// Concatenates two transformation matrices together and returns the result.
|
2019-08-11 20:56:15 +09:00
|
|
|
static transform(m1, m2) {
|
2013-04-16 08:14:07 +09:00
|
|
|
return [
|
|
|
|
m1[0] * m2[0] + m1[2] * m2[1],
|
|
|
|
m1[1] * m2[0] + m1[3] * m2[1],
|
|
|
|
m1[0] * m2[2] + m1[2] * m2[3],
|
|
|
|
m1[1] * m2[2] + m1[3] * m2[3],
|
|
|
|
m1[0] * m2[4] + m1[2] * m2[5] + m1[4],
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
m1[1] * m2[4] + m1[3] * m2[5] + m1[5],
|
2013-04-16 08:14:07 +09:00
|
|
|
];
|
2019-08-11 20:56:15 +09:00
|
|
|
}
|
2013-04-16 08:14:07 +09:00
|
|
|
|
2012-02-02 07:48:44 +09:00
|
|
|
// For 2d affine transforms
|
2019-08-11 20:56:15 +09:00
|
|
|
static applyTransform(p, m) {
|
|
|
|
const xt = p[0] * m[0] + p[1] * m[2] + m[4];
|
|
|
|
const yt = p[0] * m[1] + p[1] * m[3] + m[5];
|
2011-10-25 08:55:23 +09:00
|
|
|
return [xt, yt];
|
2019-08-11 20:56:15 +09:00
|
|
|
}
|
2011-10-25 08:55:23 +09:00
|
|
|
|
2019-08-11 20:56:15 +09:00
|
|
|
static applyInverseTransform(p, m) {
|
|
|
|
const d = m[0] * m[3] - m[1] * m[2];
|
|
|
|
const xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d;
|
|
|
|
const yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d;
|
2012-04-12 00:29:44 +09:00
|
|
|
return [xt, yt];
|
2019-08-11 20:56:15 +09:00
|
|
|
}
|
2012-04-12 00:29:44 +09:00
|
|
|
|
2013-03-13 09:20:38 +09:00
|
|
|
// Applies the transform to the rectangle and finds the minimum axially
|
|
|
|
// aligned bounding box.
|
2019-08-11 20:56:15 +09:00
|
|
|
static getAxialAlignedBoundingBox(r, m) {
|
|
|
|
const p1 = Util.applyTransform(r, m);
|
|
|
|
const p2 = Util.applyTransform(r.slice(2, 4), m);
|
|
|
|
const p3 = Util.applyTransform([r[0], r[3]], m);
|
|
|
|
const p4 = Util.applyTransform([r[2], r[1]], m);
|
2013-03-13 09:20:38 +09:00
|
|
|
return [
|
|
|
|
Math.min(p1[0], p2[0], p3[0], p4[0]),
|
|
|
|
Math.min(p1[1], p2[1], p3[1], p4[1]),
|
|
|
|
Math.max(p1[0], p2[0], p3[0], p4[0]),
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
Math.max(p1[1], p2[1], p3[1], p4[1]),
|
2013-03-13 09:20:38 +09:00
|
|
|
];
|
2019-08-11 20:56:15 +09:00
|
|
|
}
|
2013-03-13 09:20:38 +09:00
|
|
|
|
2019-08-11 20:56:15 +09:00
|
|
|
static inverseTransform(m) {
|
|
|
|
const d = m[0] * m[3] - m[1] * m[2];
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
return [
|
|
|
|
m[3] / d,
|
|
|
|
-m[1] / d,
|
|
|
|
-m[2] / d,
|
|
|
|
m[0] / d,
|
|
|
|
(m[2] * m[5] - m[4] * m[3]) / d,
|
|
|
|
(m[4] * m[1] - m[5] * m[0]) / d,
|
|
|
|
];
|
2019-08-11 20:56:15 +09:00
|
|
|
}
|
2012-04-12 00:29:44 +09:00
|
|
|
|
2012-02-02 07:48:44 +09:00
|
|
|
// Apply a generic 3d matrix M on a 3-vector v:
|
|
|
|
// | a b c | | X |
|
|
|
|
// | d e f | x | Y |
|
|
|
|
// | g h i | | Z |
|
|
|
|
// M is assumed to be serialized as [a,b,c,d,e,f,g,h,i],
|
|
|
|
// with v as [X,Y,Z]
|
2019-08-11 20:56:15 +09:00
|
|
|
static apply3dTransform(m, v) {
|
2012-02-02 07:48:44 +09:00
|
|
|
return [
|
|
|
|
m[0] * v[0] + m[1] * v[1] + m[2] * v[2],
|
|
|
|
m[3] * v[0] + m[4] * v[1] + m[5] * v[2],
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
m[6] * v[0] + m[7] * v[1] + m[8] * v[2],
|
2012-02-02 07:48:44 +09:00
|
|
|
];
|
2019-08-11 20:56:15 +09:00
|
|
|
}
|
2012-02-02 07:48:44 +09:00
|
|
|
|
2012-12-27 16:35:25 +09:00
|
|
|
// This calculation uses Singular Value Decomposition.
|
|
|
|
// The SVD can be represented with formula A = USV. We are interested in the
|
|
|
|
// matrix S here because it represents the scale values.
|
2019-08-11 20:56:15 +09:00
|
|
|
static singularValueDecompose2dScale(m) {
|
|
|
|
const transpose = [m[0], m[2], m[1], m[3]];
|
2012-12-27 16:35:25 +09:00
|
|
|
|
|
|
|
// Multiply matrix m with its transpose.
|
2019-08-11 20:56:15 +09:00
|
|
|
const a = m[0] * transpose[0] + m[1] * transpose[2];
|
|
|
|
const b = m[0] * transpose[1] + m[1] * transpose[3];
|
|
|
|
const c = m[2] * transpose[0] + m[3] * transpose[2];
|
|
|
|
const d = m[2] * transpose[1] + m[3] * transpose[3];
|
2012-12-27 16:35:25 +09:00
|
|
|
|
|
|
|
// Solve the second degree polynomial to get roots.
|
2019-08-11 20:56:15 +09:00
|
|
|
const first = (a + d) / 2;
|
|
|
|
const second = Math.sqrt((a + d) * (a + d) - 4 * (a * d - c * b)) / 2;
|
|
|
|
const sx = first + second || 1;
|
|
|
|
const sy = first - second || 1;
|
2012-12-27 16:35:25 +09:00
|
|
|
|
|
|
|
// Scale values are the square roots of the eigenvalues.
|
|
|
|
return [Math.sqrt(sx), Math.sqrt(sy)];
|
2019-08-11 20:56:15 +09:00
|
|
|
}
|
2012-12-27 16:35:25 +09:00
|
|
|
|
2012-02-15 04:48:58 +09:00
|
|
|
// Normalize rectangle rect=[x1, y1, x2, y2] so that (x1,y1) < (x2,y2)
|
|
|
|
// For coordinate systems whose origin lies in the bottom-left, this
|
|
|
|
// means normalization to (BL,TR) ordering. For systems with origin in the
|
|
|
|
// top-left, this means (TL,BR) ordering.
|
2019-08-11 20:56:15 +09:00
|
|
|
static normalizeRect(rect) {
|
|
|
|
const r = rect.slice(0); // clone rect
|
2012-02-15 04:48:58 +09:00
|
|
|
if (rect[0] > rect[2]) {
|
|
|
|
r[0] = rect[2];
|
|
|
|
r[2] = rect[0];
|
|
|
|
}
|
|
|
|
if (rect[1] > rect[3]) {
|
|
|
|
r[1] = rect[3];
|
|
|
|
r[3] = rect[1];
|
|
|
|
}
|
|
|
|
return r;
|
2019-08-11 20:56:15 +09:00
|
|
|
}
|
2012-02-15 04:48:58 +09:00
|
|
|
|
|
|
|
// Returns a rectangle [x1, y1, x2, y2] corresponding to the
|
|
|
|
// intersection of rect1 and rect2. If no intersection, returns 'false'
|
|
|
|
// The rectangle coordinates of rect1, rect2 should be [x1, y1, x2, y2]
|
2019-08-11 20:56:15 +09:00
|
|
|
static intersect(rect1, rect2) {
|
2012-02-15 04:48:58 +09:00
|
|
|
function compare(a, b) {
|
|
|
|
return a - b;
|
2013-02-01 08:33:38 +09:00
|
|
|
}
|
2012-02-15 04:48:58 +09:00
|
|
|
|
|
|
|
// Order points along the axes
|
2019-08-11 20:56:15 +09:00
|
|
|
const orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare);
|
|
|
|
const orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare);
|
|
|
|
const result = [];
|
2012-02-15 04:48:58 +09:00
|
|
|
|
|
|
|
rect1 = Util.normalizeRect(rect1);
|
|
|
|
rect2 = Util.normalizeRect(rect2);
|
|
|
|
|
|
|
|
// X: first and second points belong to different rectangles?
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (
|
|
|
|
(orderedX[0] === rect1[0] && orderedX[1] === rect2[0]) ||
|
|
|
|
(orderedX[0] === rect2[0] && orderedX[1] === rect1[0])
|
|
|
|
) {
|
2012-02-15 04:48:58 +09:00
|
|
|
// Intersection must be between second and third points
|
|
|
|
result[0] = orderedX[1];
|
|
|
|
result[2] = orderedX[2];
|
|
|
|
} else {
|
Fallback gracefully when encountering corrupt PDF files with empty /MediaBox and /CropBox entries
This is based on a real-world PDF file I encountered very recently[1], although I'm currently unable to recall where I saw it.
Note that different PDF viewers handle these sort of errors differently, with Adobe Reader outright failing to render the attached PDF file whereas PDFium mostly handles it "correctly".
The patch makes the following notable changes:
- Refactor the `cropBox` and `mediaBox` getters, on the `Page`, to reduce unnecessary duplication. (This will also help in the future, if support for extracting additional page bounding boxes are added to the API.)
- Ensure that the page bounding boxes, i.e. `cropBox` and `mediaBox`, are never empty to prevent issues/weirdness in the viewer.
- Ensure that the `view` getter on the `Page` will never return an empty intersection of the `cropBox` and `mediaBox`.
- Add an *optional* parameter to `Util.intersect`, to allow checking that the computed intersection isn't actually empty.
- Change `Util.intersect` to have consistent return types, since Arrays are of type `Object` and falling back to returning a `Boolean` thus seem strange.
---
[1] In that case I believe that only the `cropBox` was empty, but it seemed like a good idea to attempt to fix a bunch of related cases all at once.
2019-08-08 22:54:46 +09:00
|
|
|
return null;
|
2012-02-15 04:48:58 +09:00
|
|
|
}
|
|
|
|
|
|
|
|
// Y: first and second points belong to different rectangles?
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
if (
|
|
|
|
(orderedY[0] === rect1[1] && orderedY[1] === rect2[1]) ||
|
|
|
|
(orderedY[0] === rect2[1] && orderedY[1] === rect1[1])
|
|
|
|
) {
|
2012-02-15 04:48:58 +09:00
|
|
|
// Intersection must be between second and third points
|
|
|
|
result[1] = orderedY[1];
|
|
|
|
result[3] = orderedY[2];
|
|
|
|
} else {
|
Fallback gracefully when encountering corrupt PDF files with empty /MediaBox and /CropBox entries
This is based on a real-world PDF file I encountered very recently[1], although I'm currently unable to recall where I saw it.
Note that different PDF viewers handle these sort of errors differently, with Adobe Reader outright failing to render the attached PDF file whereas PDFium mostly handles it "correctly".
The patch makes the following notable changes:
- Refactor the `cropBox` and `mediaBox` getters, on the `Page`, to reduce unnecessary duplication. (This will also help in the future, if support for extracting additional page bounding boxes are added to the API.)
- Ensure that the page bounding boxes, i.e. `cropBox` and `mediaBox`, are never empty to prevent issues/weirdness in the viewer.
- Ensure that the `view` getter on the `Page` will never return an empty intersection of the `cropBox` and `mediaBox`.
- Add an *optional* parameter to `Util.intersect`, to allow checking that the computed intersection isn't actually empty.
- Change `Util.intersect` to have consistent return types, since Arrays are of type `Object` and falling back to returning a `Boolean` thus seem strange.
---
[1] In that case I believe that only the `cropBox` was empty, but it seemed like a good idea to attempt to fix a bunch of related cases all at once.
2019-08-08 22:54:46 +09:00
|
|
|
return null;
|
2012-02-15 04:48:58 +09:00
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
2019-08-11 20:56:15 +09:00
|
|
|
}
|
|
|
|
}
|
2011-10-25 08:55:23 +09:00
|
|
|
|
2019-12-25 23:54:34 +09:00
|
|
|
// prettier-ignore
|
2018-09-11 22:27:15 +09:00
|
|
|
const PDFStringTranslateTable = [
|
2011-10-25 08:55:23 +09:00
|
|
|
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) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
const length = str.length,
|
|
|
|
strBuf = [];
|
|
|
|
if (str[0] === "\xFE" && str[1] === "\xFF") {
|
2011-10-25 08:55:23 +09:00
|
|
|
// UTF16BE BOM
|
2019-08-11 21:10:29 +09:00
|
|
|
for (let i = 2; i < length; i += 2) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
strBuf.push(
|
|
|
|
String.fromCharCode((str.charCodeAt(i) << 8) | str.charCodeAt(i + 1))
|
|
|
|
);
|
2014-02-28 08:23:56 +09:00
|
|
|
}
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
} else if (str[0] === "\xFF" && str[1] === "\xFE") {
|
2019-11-05 19:52:30 +09:00
|
|
|
// UTF16LE BOM
|
|
|
|
for (let i = 2; i < length; i += 2) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
strBuf.push(
|
|
|
|
String.fromCharCode((str.charCodeAt(i + 1) << 8) | str.charCodeAt(i))
|
|
|
|
);
|
2019-11-05 19:52:30 +09:00
|
|
|
}
|
2011-10-25 08:55:23 +09:00
|
|
|
} else {
|
2019-08-11 21:10:29 +09:00
|
|
|
for (let i = 0; i < length; ++i) {
|
|
|
|
const code = PDFStringTranslateTable[str.charCodeAt(i)];
|
2014-02-28 08:23:56 +09:00
|
|
|
strBuf.push(code ? String.fromCharCode(code) : str.charAt(i));
|
2011-10-25 08:55:23 +09:00
|
|
|
}
|
|
|
|
}
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
return strBuf.join("");
|
2011-10-25 08:55:23 +09:00
|
|
|
}
|
|
|
|
|
2020-08-05 21:40:31 +09:00
|
|
|
function escapeString(str) {
|
2020-09-15 00:34:39 +09:00
|
|
|
// replace "(", ")", "\n", "\r" and "\"
|
|
|
|
// by "\(", "\)", "\\n", "\\r" and "\\"
|
2020-08-05 21:40:31 +09:00
|
|
|
// in order to write it in a PDF file.
|
2020-11-07 20:59:53 +09:00
|
|
|
return str.replace(/([()\\\n\r])/g, match => {
|
2020-09-15 00:34:39 +09:00
|
|
|
if (match === "\n") {
|
|
|
|
return "\\n";
|
|
|
|
} else if (match === "\r") {
|
|
|
|
return "\\r";
|
|
|
|
}
|
|
|
|
return `\\${match}`;
|
|
|
|
});
|
2020-08-05 21:40:31 +09:00
|
|
|
}
|
|
|
|
|
2020-08-27 23:04:17 +09:00
|
|
|
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));
|
|
|
|
buf.push(String.fromCharCode(char & 0xff));
|
|
|
|
}
|
|
|
|
return buf.join("");
|
|
|
|
}
|
|
|
|
|
2012-05-28 05:49:28 +09:00
|
|
|
function stringToUTF8String(str) {
|
|
|
|
return decodeURIComponent(escape(str));
|
|
|
|
}
|
|
|
|
|
2015-05-14 00:25:42 +09:00
|
|
|
function utf8StringToString(str) {
|
|
|
|
return unescape(encodeURIComponent(str));
|
|
|
|
}
|
|
|
|
|
2011-10-25 08:55:23 +09:00
|
|
|
function isBool(v) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
return typeof v === "boolean";
|
2011-10-25 08:55:23 +09:00
|
|
|
}
|
|
|
|
|
|
|
|
function isNum(v) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
return typeof v === "number";
|
2011-10-25 08:55:23 +09:00
|
|
|
}
|
|
|
|
|
|
|
|
function isString(v) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
return typeof v === "string";
|
2011-10-25 08:55:23 +09:00
|
|
|
}
|
|
|
|
|
|
|
|
function isArrayBuffer(v) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
return typeof v === "object" && v !== null && v.byteLength !== undefined;
|
2011-10-25 08:55:23 +09:00
|
|
|
}
|
|
|
|
|
2019-03-08 20:55:44 +09:00
|
|
|
function isArrayEqual(arr1, arr2) {
|
|
|
|
if (arr1.length !== arr2.length) {
|
|
|
|
return false;
|
|
|
|
}
|
2020-04-14 19:28:14 +09:00
|
|
|
return arr1.every(function (element, index) {
|
2019-03-08 20:55:44 +09:00
|
|
|
return element === arr2[index];
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2020-09-10 00:56:28 +09:00
|
|
|
function getModificationDate(date = new Date()) {
|
2020-08-04 02:44:04 +09:00
|
|
|
const buffer = [
|
|
|
|
date.getUTCFullYear().toString(),
|
|
|
|
(date.getUTCMonth() + 1).toString().padStart(2, "0"),
|
2020-09-10 00:56:28 +09:00
|
|
|
date.getUTCDate().toString().padStart(2, "0"),
|
2020-08-04 02:44:04 +09:00
|
|
|
date.getUTCHours().toString().padStart(2, "0"),
|
|
|
|
date.getUTCMinutes().toString().padStart(2, "0"),
|
|
|
|
date.getUTCSeconds().toString().padStart(2, "0"),
|
|
|
|
];
|
|
|
|
|
|
|
|
return buffer.join("");
|
|
|
|
}
|
|
|
|
|
2014-04-29 03:51:53 +09:00
|
|
|
/**
|
|
|
|
* Promise Capability object.
|
|
|
|
*
|
|
|
|
* @typedef {Object} PromiseCapability
|
2020-07-23 05:38:04 +09:00
|
|
|
* @property {Promise<any>} promise - A Promise object.
|
2019-02-02 21:10:06 +09:00
|
|
|
* @property {boolean} settled - If the Promise has been fulfilled/rejected.
|
|
|
|
* @property {function} resolve - Fulfills the Promise.
|
|
|
|
* @property {function} reject - Rejects the Promise.
|
2014-04-29 03:51:53 +09:00
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Creates a promise capability object.
|
2016-03-29 04:49:22 +09:00
|
|
|
* @alias createPromiseCapability
|
2014-05-06 04:09:47 +09:00
|
|
|
*
|
2019-10-13 01:14:29 +09:00
|
|
|
* @returns {PromiseCapability}
|
2014-04-29 03:51:53 +09:00
|
|
|
*/
|
|
|
|
function createPromiseCapability() {
|
2019-02-02 21:10:06 +09:00
|
|
|
const capability = Object.create(null);
|
|
|
|
let isSettled = false;
|
|
|
|
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
Object.defineProperty(capability, "settled", {
|
2019-02-02 21:10:06 +09:00
|
|
|
get() {
|
|
|
|
return isSettled;
|
|
|
|
},
|
|
|
|
});
|
2020-04-14 19:28:14 +09:00
|
|
|
capability.promise = new Promise(function (resolve, reject) {
|
|
|
|
capability.resolve = function (data) {
|
2019-02-02 21:10:06 +09:00
|
|
|
isSettled = true;
|
|
|
|
resolve(data);
|
|
|
|
};
|
2020-04-14 19:28:14 +09:00
|
|
|
capability.reject = function (reason) {
|
2019-02-02 21:10:06 +09:00
|
|
|
isSettled = true;
|
|
|
|
reject(reason);
|
|
|
|
};
|
2014-04-29 03:51:53 +09:00
|
|
|
});
|
|
|
|
return capability;
|
|
|
|
}
|
|
|
|
|
2019-08-11 21:10:29 +09:00
|
|
|
const createObjectURL = (function createObjectURLClosure() {
|
2013-11-12 13:25:03 +09:00
|
|
|
// Blob/createObjectURL is not available, falling back to data schema.
|
2019-08-11 21:10:29 +09:00
|
|
|
const digits =
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
2013-11-12 13:25:03 +09:00
|
|
|
|
2020-03-25 18:15:50 +09:00
|
|
|
// eslint-disable-next-line no-shadow
|
2017-04-16 01:25:10 +09:00
|
|
|
return function createObjectURL(data, contentType, forceDataSchema = false) {
|
2017-04-28 03:49:48 +09:00
|
|
|
if (!forceDataSchema && URL.createObjectURL) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
const blob = new Blob([data], { type: contentType });
|
2014-01-11 07:30:41 +09:00
|
|
|
return URL.createObjectURL(blob);
|
|
|
|
}
|
|
|
|
|
2019-08-11 21:10:29 +09:00
|
|
|
let buffer = `data:${contentType};base64,`;
|
|
|
|
for (let i = 0, ii = data.length; i < ii; i += 3) {
|
Enable auto-formatting of the entire code-base using Prettier (issue 11444)
Note that Prettier, purposely, has only limited [configuration options](https://prettier.io/docs/en/options.html). The configuration file is based on [the one in `mozilla central`](https://searchfox.org/mozilla-central/source/.prettierrc) with just a few additions (to avoid future breakage if the defaults ever changes).
Prettier is being used for a couple of reasons:
- To be consistent with `mozilla-central`, where Prettier is already in use across the tree.
- To ensure a *consistent* coding style everywhere, which is automatically enforced during linting (since Prettier is used as an ESLint plugin). This thus ends "all" formatting disussions once and for all, removing the need for review comments on most stylistic matters.
Many ESLint options are now redundant, and I've tried my best to remove all the now unnecessary options (but I may have missed some).
Note also that since Prettier considers the `printWidth` option as a guide, rather than a hard rule, this patch resorts to a small hack in the ESLint config to ensure that *comments* won't become too long.
*Please note:* This patch is generated automatically, by appending the `--fix` argument to the ESLint call used in the `gulp lint` task. It will thus require some additional clean-up, which will be done in a *separate* commit.
(On a more personal note, I'll readily admit that some of the changes Prettier makes are *extremely* ugly. However, in the name of consistency we'll probably have to live with that.)
2019-12-25 23:59:37 +09:00
|
|
|
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;
|
2013-11-12 13:25:03 +09:00
|
|
|
buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4];
|
|
|
|
}
|
|
|
|
return buffer;
|
|
|
|
};
|
|
|
|
})();
|
|
|
|
|
2020-09-09 07:13:52 +09:00
|
|
|
const XMLEntities = {
|
|
|
|
/* < */ 0x3c: "<",
|
|
|
|
/* > */ 0x3e: ">",
|
|
|
|
/* & */ 0x26: "&",
|
|
|
|
/* " */ 0x22: """,
|
|
|
|
/* ' */ 0x27: "'",
|
|
|
|
};
|
|
|
|
|
|
|
|
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) {
|
|
|
|
// ascii
|
|
|
|
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)) {
|
|
|
|
// char is represented by two u16
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
start = i + 1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (buffer.length === 0) {
|
|
|
|
return str;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (start < str.length) {
|
|
|
|
buffer.push(str.substring(start, str.length));
|
|
|
|
}
|
|
|
|
|
|
|
|
return buffer.join("");
|
|
|
|
}
|
|
|
|
|
2017-04-02 20:14:36 +09:00
|
|
|
export {
|
2021-01-09 23:37:44 +09:00
|
|
|
AbortException,
|
2020-10-01 03:58:45 +09:00
|
|
|
AnnotationActionEventType,
|
2017-04-02 20:14:36 +09:00
|
|
|
AnnotationBorderStyleType,
|
|
|
|
AnnotationFieldFlag,
|
|
|
|
AnnotationFlag,
|
2019-05-15 04:14:35 +09:00
|
|
|
AnnotationMarkedState,
|
|
|
|
AnnotationReplyType,
|
|
|
|
AnnotationReviewState,
|
|
|
|
AnnotationStateModelType,
|
2017-04-02 20:14:36 +09:00
|
|
|
AnnotationType,
|
|
|
|
arrayByteLength,
|
|
|
|
arraysToBytes,
|
|
|
|
assert,
|
2021-01-09 23:37:44 +09:00
|
|
|
BaseException,
|
2017-04-02 20:14:36 +09:00
|
|
|
bytesToString,
|
2021-01-09 23:37:44 +09:00
|
|
|
CMapCompressionType,
|
2017-04-02 20:14:36 +09:00
|
|
|
createObjectURL,
|
2021-01-09 23:37:44 +09:00
|
|
|
createPromiseCapability,
|
|
|
|
createValidAbsoluteUrl,
|
|
|
|
DocumentActionEventType,
|
2020-09-09 07:13:52 +09:00
|
|
|
encodeToXmlString,
|
2021-01-09 23:37:44 +09:00
|
|
|
escapeString,
|
|
|
|
FONT_IDENTITY_MATRIX,
|
|
|
|
FontType,
|
|
|
|
FormatError,
|
2020-08-04 02:44:04 +09:00
|
|
|
getModificationDate,
|
2017-04-02 20:14:36 +09:00
|
|
|
getVerbosityLevel,
|
2021-01-09 23:37:44 +09:00
|
|
|
IDENTITY_MATRIX,
|
|
|
|
ImageKind,
|
2017-04-02 20:14:36 +09:00
|
|
|
info,
|
2021-01-09 23:37:44 +09:00
|
|
|
InvalidPDFException,
|
2017-04-02 20:14:36 +09:00
|
|
|
isArrayBuffer,
|
2019-03-08 20:55:44 +09:00
|
|
|
isArrayEqual,
|
2021-01-09 23:37:44 +09:00
|
|
|
isAscii,
|
2017-04-02 20:14:36 +09:00
|
|
|
isBool,
|
2021-01-09 23:37:44 +09:00
|
|
|
IsEvalSupportedCached,
|
|
|
|
IsLittleEndianCached,
|
2017-04-02 20:14:36 +09:00
|
|
|
isNum,
|
|
|
|
isSameOrigin,
|
2021-01-09 23:37:44 +09:00
|
|
|
isString,
|
|
|
|
MissingPDFException,
|
2020-10-28 22:04:09 +09:00
|
|
|
objectFromEntries,
|
2021-01-09 23:37:44 +09:00
|
|
|
objectSize,
|
|
|
|
OPS,
|
|
|
|
PageActionEventType,
|
|
|
|
PasswordException,
|
|
|
|
PasswordResponses,
|
|
|
|
PermissionFlag,
|
2017-04-02 20:14:36 +09:00
|
|
|
removeNullCharacters,
|
|
|
|
setVerbosityLevel,
|
|
|
|
shadow,
|
2021-01-09 23:37:44 +09:00
|
|
|
StreamType,
|
2017-04-02 20:14:36 +09:00
|
|
|
string32,
|
|
|
|
stringToBytes,
|
|
|
|
stringToPDFString,
|
2020-08-27 23:04:17 +09:00
|
|
|
stringToUTF16BEString,
|
2017-04-02 20:14:36 +09:00
|
|
|
stringToUTF8String,
|
2021-01-09 23:37:44 +09:00
|
|
|
TextRenderingMode,
|
|
|
|
UnexpectedResponseException,
|
|
|
|
UnknownErrorException,
|
|
|
|
unreachable,
|
|
|
|
UNSUPPORTED_FEATURES,
|
2017-04-02 20:14:36 +09:00
|
|
|
utf8StringToString,
|
2021-01-09 23:37:44 +09:00
|
|
|
Util,
|
|
|
|
VerbosityLevel,
|
2017-04-02 20:14:36 +09:00
|
|
|
warn,
|
|
|
|
};
|