pdf-parser.js 5.2.27 → 5.2.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{afm-widths-BYiX2L9D.cjs → afm-widths-BHD2HZIL.cjs} +553 -642
- package/dist/{afm-widths-blUDDjlI.js → afm-widths-B_IGbGky.js} +553 -642
- package/dist/afm-widths.cjs +1 -1
- package/dist/afm-widths.js +1 -1
- package/dist/annotations.cjs +5 -3
- package/dist/annotations.js +5 -3
- package/dist/builtin-encoding.cjs +17 -6
- package/dist/builtin-encoding.js +17 -6
- package/dist/bytes/crc32.cjs +5 -3
- package/dist/bytes/crc32.js +5 -3
- package/dist/bytes/flate.cjs +0 -1
- package/dist/bytes/flate.js +0 -1
- package/dist/cff-bounds.cjs +42 -24
- package/dist/cff-bounds.js +42 -24
- package/dist/cff.cjs +13 -6
- package/dist/cff.js +13 -6
- package/dist/cmap-table.cjs +54 -26
- package/dist/cmap-table.js +54 -26
- package/dist/cmap.cjs +5 -3
- package/dist/cmap.js +5 -3
- package/dist/content-write.cjs +3 -2
- package/dist/content-write.js +3 -2
- package/dist/crypto/aes.cjs +76 -55
- package/dist/crypto/aes.js +76 -55
- package/dist/crypto/md5.cjs +345 -149
- package/dist/crypto/md5.js +345 -149
- package/dist/crypto/rc4.cjs +5 -4
- package/dist/crypto/rc4.js +5 -4
- package/dist/crypto/sha2.cjs +92 -43
- package/dist/crypto/sha2.js +92 -43
- package/dist/embedded-font.cjs +4 -2
- package/dist/embedded-font.js +4 -2
- package/dist/encoding.cjs +1 -1
- package/dist/encoding.js +1 -1
- package/dist/encrypt-write.cjs +25 -21
- package/dist/encrypt-write.js +25 -21
- package/dist/encrypt.cjs +43 -64
- package/dist/encrypt.js +43 -64
- package/dist/filters.cjs +40 -20
- package/dist/filters.js +40 -20
- package/dist/font-face.cjs +2 -1
- package/dist/font-face.js +2 -1
- package/dist/font-read.cjs +12 -6
- package/dist/font-read.js +12 -6
- package/dist/font-tables.cjs +55 -28
- package/dist/font-tables.js +55 -28
- package/dist/gdef-table.cjs +6 -3
- package/dist/gdef-table.js +6 -3
- package/dist/glyf-contours.cjs +3 -1
- package/dist/glyf-contours.js +3 -1
- package/dist/glyf.cjs +22 -11
- package/dist/glyf.js +22 -11
- package/dist/gpos-table.cjs +37 -19
- package/dist/gpos-table.js +37 -19
- package/dist/gsub-table.cjs +28 -17
- package/dist/gsub-table.js +28 -17
- package/dist/hmtx-table.cjs +5 -3
- package/dist/hmtx-table.js +5 -3
- package/dist/image/ccitt-encode.cjs +8 -5
- package/dist/image/ccitt-encode.js +8 -5
- package/dist/image/ccitt.cjs +801 -209
- package/dist/image/ccitt.js +801 -209
- package/dist/image/jbig2-arith.cjs +340 -306
- package/dist/image/jbig2-arith.js +340 -306
- package/dist/image/jbig2-bitmap.cjs +8 -5
- package/dist/image/jbig2-bitmap.js +8 -5
- package/dist/image/jbig2-generic.cjs +240 -69
- package/dist/image/jbig2-generic.js +240 -69
- package/dist/image/jbig2-text.cjs +4 -2
- package/dist/image/jbig2-text.js +4 -2
- package/dist/image/jbig2.cjs +69 -31
- package/dist/image/jbig2.js +69 -31
- package/dist/image/jp2-boxes.cjs +52 -27
- package/dist/image/jp2-boxes.js +52 -27
- package/dist/image/jpeg-info.cjs +29 -24
- package/dist/image/jpeg-info.js +29 -24
- package/dist/image/jpeg2000-codestream.cjs +44 -24
- package/dist/image/jpeg2000-codestream.js +44 -24
- package/dist/image/jpeg2000-dwt.cjs +2 -1
- package/dist/image/jpeg2000-dwt.js +2 -1
- package/dist/image/jpeg2000-t1.cjs +21 -11
- package/dist/image/jpeg2000-t1.js +21 -11
- package/dist/image/jpeg2000-t2.cjs +12 -5
- package/dist/image/jpeg2000-t2.js +12 -5
- package/dist/image/jpeg2000-tagtree.cjs +8 -4
- package/dist/image/jpeg2000-tagtree.js +8 -4
- package/dist/image/jpeg2000.cjs +11 -6
- package/dist/image/jpeg2000.js +11 -6
- package/dist/image/png-decode.cjs +62 -39
- package/dist/image/png-decode.d.cts +3 -2
- package/dist/image/png-decode.d.ts +3 -2
- package/dist/image/png-decode.js +62 -39
- package/dist/image/png-filter.cjs +23 -15
- package/dist/image/png-filter.js +23 -15
- package/dist/images-read.cjs +41 -36
- package/dist/images-read.js +41 -36
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/interpret.cjs +39 -24
- package/dist/interpret.js +39 -24
- package/dist/lexer.cjs +86 -51
- package/dist/lexer.js +86 -51
- package/dist/math-content-write.cjs +9 -5
- package/dist/math-content-write.js +9 -5
- package/dist/math-font-write.cjs +2 -1
- package/dist/math-font-write.js +2 -1
- package/dist/math-font.cjs +16 -7
- package/dist/math-font.js +16 -7
- package/dist/math-table.cjs +25 -13
- package/dist/math-table.js +25 -13
- package/dist/matrix.cjs +3 -2
- package/dist/matrix.js +3 -2
- package/dist/measure.cjs +1 -1
- package/dist/measure.js +1 -1
- package/dist/navigation.cjs +10 -5
- package/dist/navigation.js +10 -5
- package/dist/ot-layout-common.cjs +4 -2
- package/dist/ot-layout-common.js +4 -2
- package/dist/parse.cjs +7 -5
- package/dist/parse.js +7 -5
- package/dist/pdf-text.cjs +5 -2
- package/dist/pdf-text.js +5 -2
- package/dist/predictors.cjs +14 -9
- package/dist/predictors.js +14 -9
- package/dist/raster.cjs +30 -19
- package/dist/raster.js +30 -19
- package/dist/read.cjs +17 -8
- package/dist/read.js +17 -8
- package/dist/serialize.cjs +6 -2
- package/dist/serialize.js +6 -2
- package/dist/sfnt-subset.cjs +25 -13
- package/dist/sfnt-subset.js +25 -13
- package/dist/sfnt.cjs +20 -10
- package/dist/sfnt.js +20 -10
- package/dist/text-group.cjs +0 -1
- package/dist/text-group.js +0 -1
- package/dist/tounicode.cjs +4 -2
- package/dist/tounicode.js +4 -2
- package/dist/winansi.cjs +1 -1
- package/dist/winansi.js +1 -1
- package/dist/write.cjs +20 -12
- package/dist/write.js +20 -12
- package/dist/xref.cjs +5 -2
- package/dist/xref.js +5 -2
- package/package.json +1 -1
package/dist/afm-widths.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_afm_widths = require("./afm-widths-
|
|
2
|
+
const require_afm_widths = require("./afm-widths-BHD2HZIL.cjs");
|
|
3
3
|
exports.STANDARD_METRICS = require_afm_widths.STANDARD_METRICS;
|
|
4
4
|
exports.widthOfCode = require_afm_widths.widthOfCode;
|
package/dist/afm-widths.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as widthOfCode, t as STANDARD_METRICS } from "./afm-widths-
|
|
1
|
+
import { n as widthOfCode, t as STANDARD_METRICS } from "./afm-widths-B_IGbGky.js";
|
|
2
2
|
export { STANDARD_METRICS, widthOfCode };
|
package/dist/annotations.cjs
CHANGED
|
@@ -74,11 +74,13 @@ function annotString(annot, key) {
|
|
|
74
74
|
const obj = require_objects.dictGet(annot, key);
|
|
75
75
|
return obj?.kind === "string" ? require_pdf_text.decodePdfString(obj.bytes) : void 0;
|
|
76
76
|
}
|
|
77
|
+
const QUAD_POINT_COORDINATES_PER_QUAD = 8;
|
|
78
|
+
const QUAD_POINT_LAST_CORNER_INDEX = 3;
|
|
77
79
|
function markupFields(annot, pageMatrix) {
|
|
78
80
|
const quadPoints = require_objects.asArray(require_objects.dictGet(annot, "QuadPoints"));
|
|
79
|
-
if (quadPoints === void 0 || quadPoints.length <
|
|
81
|
+
if (quadPoints === void 0 || quadPoints.length < QUAD_POINT_COORDINATES_PER_QUAD || quadPoints.length % QUAD_POINT_COORDINATES_PER_QUAD !== 0) return {};
|
|
80
82
|
const quads = [];
|
|
81
|
-
for (let i = 0; i < quadPoints.length; i +=
|
|
83
|
+
for (let i = 0; i < quadPoints.length; i += QUAD_POINT_COORDINATES_PER_QUAD) {
|
|
82
84
|
const corner = (index) => {
|
|
83
85
|
const x = require_objects.asNumber(quadPoints[i + index * 2]) ?? 0;
|
|
84
86
|
const y = require_objects.asNumber(quadPoints[i + index * 2 + 1]) ?? 0;
|
|
@@ -95,7 +97,7 @@ function markupFields(annot, pageMatrix) {
|
|
|
95
97
|
corner(0),
|
|
96
98
|
corner(1),
|
|
97
99
|
corner(2),
|
|
98
|
-
corner(
|
|
100
|
+
corner(QUAD_POINT_LAST_CORNER_INDEX)
|
|
99
101
|
]);
|
|
100
102
|
}
|
|
101
103
|
return { quads };
|
package/dist/annotations.js
CHANGED
|
@@ -73,11 +73,13 @@ function annotString(annot, key) {
|
|
|
73
73
|
const obj = dictGet(annot, key);
|
|
74
74
|
return obj?.kind === "string" ? decodePdfString(obj.bytes) : void 0;
|
|
75
75
|
}
|
|
76
|
+
const QUAD_POINT_COORDINATES_PER_QUAD = 8;
|
|
77
|
+
const QUAD_POINT_LAST_CORNER_INDEX = 3;
|
|
76
78
|
function markupFields(annot, pageMatrix) {
|
|
77
79
|
const quadPoints = asArray(dictGet(annot, "QuadPoints"));
|
|
78
|
-
if (quadPoints === void 0 || quadPoints.length <
|
|
80
|
+
if (quadPoints === void 0 || quadPoints.length < QUAD_POINT_COORDINATES_PER_QUAD || quadPoints.length % QUAD_POINT_COORDINATES_PER_QUAD !== 0) return {};
|
|
79
81
|
const quads = [];
|
|
80
|
-
for (let i = 0; i < quadPoints.length; i +=
|
|
82
|
+
for (let i = 0; i < quadPoints.length; i += QUAD_POINT_COORDINATES_PER_QUAD) {
|
|
81
83
|
const corner = (index) => {
|
|
82
84
|
const x = asNumber(quadPoints[i + index * 2]) ?? 0;
|
|
83
85
|
const y = asNumber(quadPoints[i + index * 2 + 1]) ?? 0;
|
|
@@ -94,7 +96,7 @@ function markupFields(annot, pageMatrix) {
|
|
|
94
96
|
corner(0),
|
|
95
97
|
corner(1),
|
|
96
98
|
corner(2),
|
|
97
|
-
corner(
|
|
99
|
+
corner(QUAD_POINT_LAST_CORNER_INDEX)
|
|
98
100
|
]);
|
|
99
101
|
}
|
|
100
102
|
return { quads };
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_afm_widths = require("./afm-widths-
|
|
2
|
+
const require_afm_widths = require("./afm-widths-BHD2HZIL.cjs");
|
|
3
3
|
const require_sfnt = require("./sfnt.cjs");
|
|
4
4
|
const require_cff = require("./cff.cjs");
|
|
5
5
|
const require_cmap_table = require("./cmap-table.cjs");
|
|
6
6
|
const require_font_tables = require("./font-tables.cjs");
|
|
7
7
|
//#region src/builtin-encoding.ts
|
|
8
|
+
const PRIVATE_USE_BMP_START = 57344;
|
|
9
|
+
const PRIVATE_USE_BMP_END = 63743;
|
|
10
|
+
const PRIVATE_USE_PLANE_A_START = 983040;
|
|
11
|
+
const PRIVATE_USE_PLANE_A_END = 1048573;
|
|
12
|
+
const PRIVATE_USE_PLANE_B_START = 1048576;
|
|
13
|
+
const PRIVATE_USE_PLANE_B_END = 1114109;
|
|
8
14
|
function isPrivateUse(codePoint) {
|
|
9
|
-
return codePoint >=
|
|
15
|
+
return codePoint >= PRIVATE_USE_BMP_START && codePoint <= PRIVATE_USE_BMP_END || codePoint >= PRIVATE_USE_PLANE_A_START && codePoint <= PRIVATE_USE_PLANE_A_END || codePoint >= PRIVATE_USE_PLANE_B_START && codePoint <= PRIVATE_USE_PLANE_B_END;
|
|
10
16
|
}
|
|
11
17
|
function encodingFromSources(sources) {
|
|
12
18
|
const { codeToGlyphId, codeToName, glyphIdToName, glyphIdToUnicode } = sources;
|
|
@@ -29,11 +35,15 @@ function encodingFromSources(sources) {
|
|
|
29
35
|
} : void 0;
|
|
30
36
|
}
|
|
31
37
|
const SYMBOL_CMAP_CODE_BASE = 61440;
|
|
38
|
+
const CMAP_PLATFORM_MICROSOFT = 3;
|
|
39
|
+
const CMAP_MICROSOFT_ENCODING_SYMBOL = 0;
|
|
40
|
+
const CMAP_MICROSOFT_ENCODING_UNICODE_FULL_REPERTOIRE = 10;
|
|
41
|
+
const CMAP_MICROSOFT_ENCODING_UNICODE_BMP = 1;
|
|
32
42
|
function symbolSubtable(subtables) {
|
|
33
|
-
return subtables.find((s) => s.platformId ===
|
|
43
|
+
return subtables.find((s) => s.platformId === CMAP_PLATFORM_MICROSOFT && s.encodingId === CMAP_MICROSOFT_ENCODING_SYMBOL) ?? subtables.find((s) => s.platformId === 1 && s.encodingId === 0);
|
|
34
44
|
}
|
|
35
45
|
function unicodeSubtable(subtables) {
|
|
36
|
-
return subtables.find((s) => s.platformId ===
|
|
46
|
+
return subtables.find((s) => s.platformId === CMAP_PLATFORM_MICROSOFT && s.encodingId === CMAP_MICROSOFT_ENCODING_UNICODE_FULL_REPERTOIRE) ?? subtables.find((s) => s.platformId === CMAP_PLATFORM_MICROSOFT && s.encodingId === CMAP_MICROSOFT_ENCODING_UNICODE_BMP) ?? subtables.find((s) => s.platformId === 0);
|
|
37
47
|
}
|
|
38
48
|
function invertUnicodeSubtable(subtable) {
|
|
39
49
|
let inverse;
|
|
@@ -64,6 +74,7 @@ const CFF_PREDEFINED_CHARSET_ISO_ADOBE = 0;
|
|
|
64
74
|
const CFF_PREDEFINED_ENCODING_STANDARD = 0;
|
|
65
75
|
const CFF_ENCODING_FORMAT_MASK = 127;
|
|
66
76
|
const CFF_ENCODING_SUPPLEMENT_FLAG = 128;
|
|
77
|
+
const CFF_ENCODING_SUPPLEMENT_RECORD_SIZE = 3;
|
|
67
78
|
function readCffCharset(bytes, offset, glyphCount) {
|
|
68
79
|
const sidByGlyph = /* @__PURE__ */ new Map();
|
|
69
80
|
if (offset === CFF_PREDEFINED_CHARSET_ISO_ADOBE) {
|
|
@@ -131,10 +142,10 @@ function readCffEncoding(bytes, offset, glyphCount, glyphBySid) {
|
|
|
131
142
|
const nSups = require_sfnt.u8(bytes, cursor);
|
|
132
143
|
cursor += 1;
|
|
133
144
|
for (let i = 0; i < nSups; i++) {
|
|
134
|
-
if (!require_sfnt.hasBytes(bytes, cursor,
|
|
145
|
+
if (!require_sfnt.hasBytes(bytes, cursor, CFF_ENCODING_SUPPLEMENT_RECORD_SIZE)) return glyphByCode;
|
|
135
146
|
const glyphId = glyphBySid.get(require_sfnt.u16(bytes, cursor + 1));
|
|
136
147
|
if (glyphId !== void 0) glyphByCode.set(require_sfnt.u8(bytes, cursor), glyphId);
|
|
137
|
-
cursor +=
|
|
148
|
+
cursor += CFF_ENCODING_SUPPLEMENT_RECORD_SIZE;
|
|
138
149
|
}
|
|
139
150
|
}
|
|
140
151
|
return glyphByCode;
|
package/dist/builtin-encoding.js
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
|
-
import { c as glyphNameToUnicode, d as standardGlyphName } from "./afm-widths-
|
|
1
|
+
import { c as glyphNameToUnicode, d as standardGlyphName } from "./afm-widths-B_IGbGky.js";
|
|
2
2
|
import { hasBytes, parseSfnt, sfntTableBytes, u16, u8 } from "./sfnt.js";
|
|
3
3
|
import { cffStringForSid, parseCffDict, readCffIndex } from "./cff.js";
|
|
4
4
|
import { readCmapSubtables } from "./cmap-table.js";
|
|
5
5
|
import { parsePostGlyphNames } from "./font-tables.js";
|
|
6
6
|
//#region src/builtin-encoding.ts
|
|
7
|
+
const PRIVATE_USE_BMP_START = 57344;
|
|
8
|
+
const PRIVATE_USE_BMP_END = 63743;
|
|
9
|
+
const PRIVATE_USE_PLANE_A_START = 983040;
|
|
10
|
+
const PRIVATE_USE_PLANE_A_END = 1048573;
|
|
11
|
+
const PRIVATE_USE_PLANE_B_START = 1048576;
|
|
12
|
+
const PRIVATE_USE_PLANE_B_END = 1114109;
|
|
7
13
|
function isPrivateUse(codePoint) {
|
|
8
|
-
return codePoint >=
|
|
14
|
+
return codePoint >= PRIVATE_USE_BMP_START && codePoint <= PRIVATE_USE_BMP_END || codePoint >= PRIVATE_USE_PLANE_A_START && codePoint <= PRIVATE_USE_PLANE_A_END || codePoint >= PRIVATE_USE_PLANE_B_START && codePoint <= PRIVATE_USE_PLANE_B_END;
|
|
9
15
|
}
|
|
10
16
|
function encodingFromSources(sources) {
|
|
11
17
|
const { codeToGlyphId, codeToName, glyphIdToName, glyphIdToUnicode } = sources;
|
|
@@ -28,11 +34,15 @@ function encodingFromSources(sources) {
|
|
|
28
34
|
} : void 0;
|
|
29
35
|
}
|
|
30
36
|
const SYMBOL_CMAP_CODE_BASE = 61440;
|
|
37
|
+
const CMAP_PLATFORM_MICROSOFT = 3;
|
|
38
|
+
const CMAP_MICROSOFT_ENCODING_SYMBOL = 0;
|
|
39
|
+
const CMAP_MICROSOFT_ENCODING_UNICODE_FULL_REPERTOIRE = 10;
|
|
40
|
+
const CMAP_MICROSOFT_ENCODING_UNICODE_BMP = 1;
|
|
31
41
|
function symbolSubtable(subtables) {
|
|
32
|
-
return subtables.find((s) => s.platformId ===
|
|
42
|
+
return subtables.find((s) => s.platformId === CMAP_PLATFORM_MICROSOFT && s.encodingId === CMAP_MICROSOFT_ENCODING_SYMBOL) ?? subtables.find((s) => s.platformId === 1 && s.encodingId === 0);
|
|
33
43
|
}
|
|
34
44
|
function unicodeSubtable(subtables) {
|
|
35
|
-
return subtables.find((s) => s.platformId ===
|
|
45
|
+
return subtables.find((s) => s.platformId === CMAP_PLATFORM_MICROSOFT && s.encodingId === CMAP_MICROSOFT_ENCODING_UNICODE_FULL_REPERTOIRE) ?? subtables.find((s) => s.platformId === CMAP_PLATFORM_MICROSOFT && s.encodingId === CMAP_MICROSOFT_ENCODING_UNICODE_BMP) ?? subtables.find((s) => s.platformId === 0);
|
|
36
46
|
}
|
|
37
47
|
function invertUnicodeSubtable(subtable) {
|
|
38
48
|
let inverse;
|
|
@@ -63,6 +73,7 @@ const CFF_PREDEFINED_CHARSET_ISO_ADOBE = 0;
|
|
|
63
73
|
const CFF_PREDEFINED_ENCODING_STANDARD = 0;
|
|
64
74
|
const CFF_ENCODING_FORMAT_MASK = 127;
|
|
65
75
|
const CFF_ENCODING_SUPPLEMENT_FLAG = 128;
|
|
76
|
+
const CFF_ENCODING_SUPPLEMENT_RECORD_SIZE = 3;
|
|
66
77
|
function readCffCharset(bytes, offset, glyphCount) {
|
|
67
78
|
const sidByGlyph = /* @__PURE__ */ new Map();
|
|
68
79
|
if (offset === CFF_PREDEFINED_CHARSET_ISO_ADOBE) {
|
|
@@ -130,10 +141,10 @@ function readCffEncoding(bytes, offset, glyphCount, glyphBySid) {
|
|
|
130
141
|
const nSups = u8(bytes, cursor);
|
|
131
142
|
cursor += 1;
|
|
132
143
|
for (let i = 0; i < nSups; i++) {
|
|
133
|
-
if (!hasBytes(bytes, cursor,
|
|
144
|
+
if (!hasBytes(bytes, cursor, CFF_ENCODING_SUPPLEMENT_RECORD_SIZE)) return glyphByCode;
|
|
134
145
|
const glyphId = glyphBySid.get(u16(bytes, cursor + 1));
|
|
135
146
|
if (glyphId !== void 0) glyphByCode.set(u8(bytes, cursor), glyphId);
|
|
136
|
-
cursor +=
|
|
147
|
+
cursor += CFF_ENCODING_SUPPLEMENT_RECORD_SIZE;
|
|
137
148
|
}
|
|
138
149
|
}
|
|
139
150
|
return glyphByCode;
|
package/dist/bytes/crc32.cjs
CHANGED
|
@@ -3,6 +3,8 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
3
3
|
const CRC32_POLYNOMIAL = 3988292384;
|
|
4
4
|
const BYTE_VALUES = 256;
|
|
5
5
|
const BITS_PER_BYTE = 8;
|
|
6
|
+
const BYTE_MASK = 255;
|
|
7
|
+
const CRC32_INVERT_MASK = 4294967295;
|
|
6
8
|
const CRC32_TABLE = (() => {
|
|
7
9
|
const table = new Uint32Array(BYTE_VALUES);
|
|
8
10
|
for (let n = 0; n < BYTE_VALUES; n++) {
|
|
@@ -13,9 +15,9 @@ const CRC32_TABLE = (() => {
|
|
|
13
15
|
return table;
|
|
14
16
|
})();
|
|
15
17
|
function crc32(bytes) {
|
|
16
|
-
let crc =
|
|
17
|
-
for (const byte of bytes) crc = CRC32_TABLE[(crc ^ byte) &
|
|
18
|
-
return (crc ^
|
|
18
|
+
let crc = CRC32_INVERT_MASK;
|
|
19
|
+
for (const byte of bytes) crc = CRC32_TABLE[(crc ^ byte) & BYTE_MASK] ^ crc >>> BITS_PER_BYTE;
|
|
20
|
+
return (crc ^ CRC32_INVERT_MASK) >>> 0;
|
|
19
21
|
}
|
|
20
22
|
//#endregion
|
|
21
23
|
exports.crc32 = crc32;
|
package/dist/bytes/crc32.js
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
const CRC32_POLYNOMIAL = 3988292384;
|
|
3
3
|
const BYTE_VALUES = 256;
|
|
4
4
|
const BITS_PER_BYTE = 8;
|
|
5
|
+
const BYTE_MASK = 255;
|
|
6
|
+
const CRC32_INVERT_MASK = 4294967295;
|
|
5
7
|
const CRC32_TABLE = (() => {
|
|
6
8
|
const table = new Uint32Array(BYTE_VALUES);
|
|
7
9
|
for (let n = 0; n < BYTE_VALUES; n++) {
|
|
@@ -12,9 +14,9 @@ const CRC32_TABLE = (() => {
|
|
|
12
14
|
return table;
|
|
13
15
|
})();
|
|
14
16
|
function crc32(bytes) {
|
|
15
|
-
let crc =
|
|
16
|
-
for (const byte of bytes) crc = CRC32_TABLE[(crc ^ byte) &
|
|
17
|
-
return (crc ^
|
|
17
|
+
let crc = CRC32_INVERT_MASK;
|
|
18
|
+
for (const byte of bytes) crc = CRC32_TABLE[(crc ^ byte) & BYTE_MASK] ^ crc >>> BITS_PER_BYTE;
|
|
19
|
+
return (crc ^ CRC32_INVERT_MASK) >>> 0;
|
|
18
20
|
}
|
|
19
21
|
//#endregion
|
|
20
22
|
export { crc32 };
|
package/dist/bytes/flate.cjs
CHANGED
|
@@ -2,7 +2,6 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
2
2
|
const require_bytes_writer = require("./writer.cjs");
|
|
3
3
|
const require_bytes_reader = require("./reader.cjs");
|
|
4
4
|
let fflate = require("fflate");
|
|
5
|
-
//#region src/bytes/flate.ts
|
|
6
5
|
const MAX_INFLATE_OUTPUT_BYTES = 536870912;
|
|
7
6
|
function deflate(data, level) {
|
|
8
7
|
return (0, fflate.zlibSync)(data, level === void 0 ? void 0 : { level });
|
package/dist/bytes/flate.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { concatBytes } from "./writer.js";
|
|
2
2
|
import { isAsciiWhitespace } from "./reader.js";
|
|
3
3
|
import { Unzlib, inflateSync, unzlibSync, zlibSync } from "fflate";
|
|
4
|
-
//#region src/bytes/flate.ts
|
|
5
4
|
const MAX_INFLATE_OUTPUT_BYTES = 536870912;
|
|
6
5
|
function deflate(data, level) {
|
|
7
6
|
return zlibSync(data, level === void 0 ? void 0 : { level });
|
package/dist/cff-bounds.cjs
CHANGED
|
@@ -17,6 +17,11 @@ const CS_OPERAND_MEDIUM_BIAS = 108;
|
|
|
17
17
|
const CS_OPERAND_MEDIUM_FIRST_BYTE_BIAS = 247;
|
|
18
18
|
const CS_OPERAND_NEGATIVE_MEDIUM_FIRST_BYTE_BIAS = 251;
|
|
19
19
|
const BYTE_RADIX = 256;
|
|
20
|
+
const INT16_SIGN_BIT = 32768;
|
|
21
|
+
const INT16_MODULUS = 65536;
|
|
22
|
+
const CS_OPERAND_INT16_TOTAL_LENGTH = 3;
|
|
23
|
+
const CS_OPERAND_FIXED_BYTE_LENGTH = 4;
|
|
24
|
+
const CS_OPERAND_FIXED_TOTAL_LENGTH = 5;
|
|
20
25
|
const FIXED_POINT_SCALE = 65536;
|
|
21
26
|
const OP_HSTEM = 1;
|
|
22
27
|
const OP_VSTEM = 3;
|
|
@@ -53,6 +58,13 @@ const SUBR_BIAS_MEDIUM = 1131;
|
|
|
53
58
|
const SUBR_BIAS_LARGE = 32768;
|
|
54
59
|
const HINT_MASK_BITS_PER_BYTE = 8;
|
|
55
60
|
const STEM_ARGS_PER_STEM = 2;
|
|
61
|
+
const CURVE_ARG_COUNT = 6;
|
|
62
|
+
const CURVE_DY2_OFFSET = 3;
|
|
63
|
+
const CURVE_DX3_OFFSET = 4;
|
|
64
|
+
const CURVE_DY3_OFFSET = 5;
|
|
65
|
+
const QUAD_CURVE_ARG_COUNT = 4;
|
|
66
|
+
const QUAD_CURVE_LAST_OFFSET = 3;
|
|
67
|
+
const QUAD_CURVE_WITH_EXTRA_ARG_COUNT = 5;
|
|
56
68
|
const MAX_OPERAND_STACK = 48;
|
|
57
69
|
const MAX_SUBR_DEPTH = 10;
|
|
58
70
|
const MAX_OPERATIONS_PER_GLYPH = 1e5;
|
|
@@ -87,21 +99,23 @@ var BoundsBox = class {
|
|
|
87
99
|
this.drawn = true;
|
|
88
100
|
}
|
|
89
101
|
};
|
|
102
|
+
const CUBIC_BERNSTEIN_COEFFICIENT = 3;
|
|
103
|
+
const QUADRATIC_FORMULA_COEFFICIENT = 4;
|
|
90
104
|
function cubicAt(p0, p1, p2, p3, t) {
|
|
91
105
|
const s = 1 - t;
|
|
92
|
-
return s * s * s * p0 +
|
|
106
|
+
return s * s * s * p0 + CUBIC_BERNSTEIN_COEFFICIENT * s * s * t * p1 + CUBIC_BERNSTEIN_COEFFICIENT * s * t * t * p2 + t * t * t * p3;
|
|
93
107
|
}
|
|
94
108
|
function includeCubicAxis(p0, p1, p2, p3, apply) {
|
|
95
109
|
apply(p0);
|
|
96
110
|
apply(p3);
|
|
97
|
-
const a = -p0 +
|
|
111
|
+
const a = -p0 + CUBIC_BERNSTEIN_COEFFICIENT * p1 - CUBIC_BERNSTEIN_COEFFICIENT * p2 + p3;
|
|
98
112
|
const b = 2 * (p0 - 2 * p1 + p2);
|
|
99
113
|
const c = p1 - p0;
|
|
100
114
|
const roots = [];
|
|
101
115
|
if (a === 0) {
|
|
102
116
|
if (b !== 0) roots.push(-c / b);
|
|
103
117
|
} else {
|
|
104
|
-
const discriminant = b * b -
|
|
118
|
+
const discriminant = b * b - QUADRATIC_FORMULA_COEFFICIENT * a * c;
|
|
105
119
|
if (discriminant >= 0) {
|
|
106
120
|
const root = Math.sqrt(discriminant);
|
|
107
121
|
roots.push((-b + root) / (2 * a), (-b - root) / (2 * a));
|
|
@@ -152,15 +166,15 @@ function readOperand(code, offset) {
|
|
|
152
166
|
if (!require_sfnt.hasBytes(code, offset + 1, 2)) return;
|
|
153
167
|
const raw = require_sfnt.u16(code, offset + 1);
|
|
154
168
|
return {
|
|
155
|
-
value: raw >=
|
|
156
|
-
endOffset: offset +
|
|
169
|
+
value: raw >= INT16_SIGN_BIT ? raw - INT16_MODULUS : raw,
|
|
170
|
+
endOffset: offset + CS_OPERAND_INT16_TOTAL_LENGTH
|
|
157
171
|
};
|
|
158
172
|
}
|
|
159
173
|
if (b0 === CS_OPERAND_FIXED) {
|
|
160
|
-
if (!require_sfnt.hasBytes(code, offset + 1,
|
|
174
|
+
if (!require_sfnt.hasBytes(code, offset + 1, CS_OPERAND_FIXED_BYTE_LENGTH)) return;
|
|
161
175
|
return {
|
|
162
176
|
value: (require_sfnt.u32(code, offset + 1) | 0) / FIXED_POINT_SCALE,
|
|
163
|
-
endOffset: offset +
|
|
177
|
+
endOffset: offset + CS_OPERAND_FIXED_TOTAL_LENGTH
|
|
164
178
|
};
|
|
165
179
|
}
|
|
166
180
|
if (b0 >= CS_OPERAND_SMALL_FIRST && b0 <= CS_OPERAND_SMALL_LAST) return {
|
|
@@ -247,20 +261,20 @@ function execute(code, state, context, depth) {
|
|
|
247
261
|
break;
|
|
248
262
|
}
|
|
249
263
|
case OP_RRCURVETO:
|
|
250
|
-
for (let k = 0; k +
|
|
264
|
+
for (let k = 0; k + CURVE_DY3_OFFSET < stack.length; k += CURVE_ARG_COUNT) curveTo(state, stack[k], stack[k + 1], stack[k + 2], stack[k + CURVE_DY2_OFFSET], stack[k + CURVE_DX3_OFFSET], stack[k + CURVE_DY3_OFFSET]);
|
|
251
265
|
stack.length = 0;
|
|
252
266
|
break;
|
|
253
267
|
case OP_RCURVELINE: {
|
|
254
268
|
let k = 0;
|
|
255
|
-
for (; k +
|
|
269
|
+
for (; k + CURVE_DY3_OFFSET < stack.length - 2; k += CURVE_ARG_COUNT) curveTo(state, stack[k], stack[k + 1], stack[k + 2], stack[k + CURVE_DY2_OFFSET], stack[k + CURVE_DX3_OFFSET], stack[k + CURVE_DY3_OFFSET]);
|
|
256
270
|
if (k + 1 < stack.length) lineTo(state, stack[k], stack[k + 1]);
|
|
257
271
|
stack.length = 0;
|
|
258
272
|
break;
|
|
259
273
|
}
|
|
260
274
|
case OP_RLINECURVE: {
|
|
261
275
|
let k = 0;
|
|
262
|
-
for (; k + 1 < stack.length -
|
|
263
|
-
if (k +
|
|
276
|
+
for (; k + 1 < stack.length - CURVE_ARG_COUNT; k += 2) lineTo(state, stack[k], stack[k + 1]);
|
|
277
|
+
if (k + CURVE_DY3_OFFSET < stack.length) curveTo(state, stack[k], stack[k + 1], stack[k + 2], stack[k + CURVE_DY2_OFFSET], stack[k + CURVE_DX3_OFFSET], stack[k + CURVE_DY3_OFFSET]);
|
|
264
278
|
stack.length = 0;
|
|
265
279
|
break;
|
|
266
280
|
}
|
|
@@ -268,14 +282,14 @@ function execute(code, state, context, depth) {
|
|
|
268
282
|
case OP_HHCURVETO: {
|
|
269
283
|
let k = 0;
|
|
270
284
|
let firstCross = 0;
|
|
271
|
-
if (stack.length %
|
|
285
|
+
if (stack.length % QUAD_CURVE_ARG_COUNT === 1) {
|
|
272
286
|
firstCross = stack[0];
|
|
273
287
|
k = 1;
|
|
274
288
|
}
|
|
275
|
-
for (; k +
|
|
289
|
+
for (; k + QUAD_CURVE_LAST_OFFSET < stack.length; k += QUAD_CURVE_ARG_COUNT) {
|
|
276
290
|
const cross = k <= 1 ? firstCross : 0;
|
|
277
|
-
if (b0 === OP_VVCURVETO) curveTo(state, cross, stack[k], stack[k + 1], stack[k + 2], 0, stack[k +
|
|
278
|
-
else curveTo(state, stack[k], cross, stack[k + 1], stack[k + 2], stack[k +
|
|
291
|
+
if (b0 === OP_VVCURVETO) curveTo(state, cross, stack[k], stack[k + 1], stack[k + 2], 0, stack[k + QUAD_CURVE_LAST_OFFSET]);
|
|
292
|
+
else curveTo(state, stack[k], cross, stack[k + 1], stack[k + 2], stack[k + QUAD_CURVE_LAST_OFFSET], 0);
|
|
279
293
|
}
|
|
280
294
|
stack.length = 0;
|
|
281
295
|
break;
|
|
@@ -284,11 +298,11 @@ function execute(code, state, context, depth) {
|
|
|
284
298
|
case OP_HVCURVETO: {
|
|
285
299
|
let horizontal = b0 === OP_HVCURVETO;
|
|
286
300
|
let k = 0;
|
|
287
|
-
while (stack.length - k >=
|
|
288
|
-
const extra = stack.length - k ===
|
|
289
|
-
if (horizontal) curveTo(state, stack[k], 0, stack[k + 1], stack[k + 2], extra, stack[k +
|
|
290
|
-
else curveTo(state, 0, stack[k], stack[k + 1], stack[k + 2], stack[k +
|
|
291
|
-
k +=
|
|
301
|
+
while (stack.length - k >= QUAD_CURVE_ARG_COUNT) {
|
|
302
|
+
const extra = stack.length - k === QUAD_CURVE_WITH_EXTRA_ARG_COUNT ? stack[k + QUAD_CURVE_ARG_COUNT] : 0;
|
|
303
|
+
if (horizontal) curveTo(state, stack[k], 0, stack[k + 1], stack[k + 2], extra, stack[k + QUAD_CURVE_LAST_OFFSET]);
|
|
304
|
+
else curveTo(state, 0, stack[k], stack[k + 1], stack[k + 2], stack[k + QUAD_CURVE_LAST_OFFSET], extra);
|
|
305
|
+
k += QUAD_CURVE_ARG_COUNT;
|
|
292
306
|
horizontal = !horizontal;
|
|
293
307
|
}
|
|
294
308
|
stack.length = 0;
|
|
@@ -323,25 +337,29 @@ function execute(code, state, context, depth) {
|
|
|
323
337
|
}
|
|
324
338
|
return true;
|
|
325
339
|
}
|
|
340
|
+
const FLEX_ARG_COUNT = 13;
|
|
341
|
+
const HFLEX_ARG_COUNT = 7;
|
|
342
|
+
const HFLEX1_ARG_COUNT = 9;
|
|
343
|
+
const FLEX1_ARG_COUNT = 11;
|
|
326
344
|
function executeEscaped(operator, state) {
|
|
327
345
|
const stack = state.stack;
|
|
328
346
|
const startY = state.y;
|
|
329
347
|
if (operator === ESC_FLEX) {
|
|
330
|
-
if (stack.length <
|
|
348
|
+
if (stack.length < FLEX_ARG_COUNT) return false;
|
|
331
349
|
curveTo(state, stack[0], stack[1], stack[2], stack[3], stack[4], stack[5]);
|
|
332
350
|
curveTo(state, stack[6], stack[7], stack[8], stack[9], stack[10], stack[11]);
|
|
333
351
|
stack.length = 0;
|
|
334
352
|
return true;
|
|
335
353
|
}
|
|
336
354
|
if (operator === ESC_HFLEX) {
|
|
337
|
-
if (stack.length <
|
|
355
|
+
if (stack.length < HFLEX_ARG_COUNT) return false;
|
|
338
356
|
curveTo(state, stack[0], 0, stack[1], stack[2], stack[3], 0);
|
|
339
357
|
curveTo(state, stack[4], 0, stack[5], -stack[2], stack[6], 0);
|
|
340
358
|
stack.length = 0;
|
|
341
359
|
return true;
|
|
342
360
|
}
|
|
343
361
|
if (operator === ESC_HFLEX1) {
|
|
344
|
-
if (stack.length <
|
|
362
|
+
if (stack.length < HFLEX1_ARG_COUNT) return false;
|
|
345
363
|
curveTo(state, stack[0], stack[1], stack[2], stack[3], stack[4], 0);
|
|
346
364
|
const dy5 = stack[7];
|
|
347
365
|
curveTo(state, stack[5], 0, stack[6], dy5, stack[8], startY - (state.y + dy5));
|
|
@@ -349,7 +367,7 @@ function executeEscaped(operator, state) {
|
|
|
349
367
|
return true;
|
|
350
368
|
}
|
|
351
369
|
if (operator === ESC_FLEX1) {
|
|
352
|
-
if (stack.length <
|
|
370
|
+
if (stack.length < FLEX1_ARG_COUNT) return false;
|
|
353
371
|
const startX = state.x;
|
|
354
372
|
let dx = 0;
|
|
355
373
|
let dy = 0;
|
package/dist/cff-bounds.js
CHANGED
|
@@ -16,6 +16,11 @@ const CS_OPERAND_MEDIUM_BIAS = 108;
|
|
|
16
16
|
const CS_OPERAND_MEDIUM_FIRST_BYTE_BIAS = 247;
|
|
17
17
|
const CS_OPERAND_NEGATIVE_MEDIUM_FIRST_BYTE_BIAS = 251;
|
|
18
18
|
const BYTE_RADIX = 256;
|
|
19
|
+
const INT16_SIGN_BIT = 32768;
|
|
20
|
+
const INT16_MODULUS = 65536;
|
|
21
|
+
const CS_OPERAND_INT16_TOTAL_LENGTH = 3;
|
|
22
|
+
const CS_OPERAND_FIXED_BYTE_LENGTH = 4;
|
|
23
|
+
const CS_OPERAND_FIXED_TOTAL_LENGTH = 5;
|
|
19
24
|
const FIXED_POINT_SCALE = 65536;
|
|
20
25
|
const OP_HSTEM = 1;
|
|
21
26
|
const OP_VSTEM = 3;
|
|
@@ -52,6 +57,13 @@ const SUBR_BIAS_MEDIUM = 1131;
|
|
|
52
57
|
const SUBR_BIAS_LARGE = 32768;
|
|
53
58
|
const HINT_MASK_BITS_PER_BYTE = 8;
|
|
54
59
|
const STEM_ARGS_PER_STEM = 2;
|
|
60
|
+
const CURVE_ARG_COUNT = 6;
|
|
61
|
+
const CURVE_DY2_OFFSET = 3;
|
|
62
|
+
const CURVE_DX3_OFFSET = 4;
|
|
63
|
+
const CURVE_DY3_OFFSET = 5;
|
|
64
|
+
const QUAD_CURVE_ARG_COUNT = 4;
|
|
65
|
+
const QUAD_CURVE_LAST_OFFSET = 3;
|
|
66
|
+
const QUAD_CURVE_WITH_EXTRA_ARG_COUNT = 5;
|
|
55
67
|
const MAX_OPERAND_STACK = 48;
|
|
56
68
|
const MAX_SUBR_DEPTH = 10;
|
|
57
69
|
const MAX_OPERATIONS_PER_GLYPH = 1e5;
|
|
@@ -86,21 +98,23 @@ var BoundsBox = class {
|
|
|
86
98
|
this.drawn = true;
|
|
87
99
|
}
|
|
88
100
|
};
|
|
101
|
+
const CUBIC_BERNSTEIN_COEFFICIENT = 3;
|
|
102
|
+
const QUADRATIC_FORMULA_COEFFICIENT = 4;
|
|
89
103
|
function cubicAt(p0, p1, p2, p3, t) {
|
|
90
104
|
const s = 1 - t;
|
|
91
|
-
return s * s * s * p0 +
|
|
105
|
+
return s * s * s * p0 + CUBIC_BERNSTEIN_COEFFICIENT * s * s * t * p1 + CUBIC_BERNSTEIN_COEFFICIENT * s * t * t * p2 + t * t * t * p3;
|
|
92
106
|
}
|
|
93
107
|
function includeCubicAxis(p0, p1, p2, p3, apply) {
|
|
94
108
|
apply(p0);
|
|
95
109
|
apply(p3);
|
|
96
|
-
const a = -p0 +
|
|
110
|
+
const a = -p0 + CUBIC_BERNSTEIN_COEFFICIENT * p1 - CUBIC_BERNSTEIN_COEFFICIENT * p2 + p3;
|
|
97
111
|
const b = 2 * (p0 - 2 * p1 + p2);
|
|
98
112
|
const c = p1 - p0;
|
|
99
113
|
const roots = [];
|
|
100
114
|
if (a === 0) {
|
|
101
115
|
if (b !== 0) roots.push(-c / b);
|
|
102
116
|
} else {
|
|
103
|
-
const discriminant = b * b -
|
|
117
|
+
const discriminant = b * b - QUADRATIC_FORMULA_COEFFICIENT * a * c;
|
|
104
118
|
if (discriminant >= 0) {
|
|
105
119
|
const root = Math.sqrt(discriminant);
|
|
106
120
|
roots.push((-b + root) / (2 * a), (-b - root) / (2 * a));
|
|
@@ -151,15 +165,15 @@ function readOperand(code, offset) {
|
|
|
151
165
|
if (!hasBytes(code, offset + 1, 2)) return;
|
|
152
166
|
const raw = u16(code, offset + 1);
|
|
153
167
|
return {
|
|
154
|
-
value: raw >=
|
|
155
|
-
endOffset: offset +
|
|
168
|
+
value: raw >= INT16_SIGN_BIT ? raw - INT16_MODULUS : raw,
|
|
169
|
+
endOffset: offset + CS_OPERAND_INT16_TOTAL_LENGTH
|
|
156
170
|
};
|
|
157
171
|
}
|
|
158
172
|
if (b0 === CS_OPERAND_FIXED) {
|
|
159
|
-
if (!hasBytes(code, offset + 1,
|
|
173
|
+
if (!hasBytes(code, offset + 1, CS_OPERAND_FIXED_BYTE_LENGTH)) return;
|
|
160
174
|
return {
|
|
161
175
|
value: (u32(code, offset + 1) | 0) / FIXED_POINT_SCALE,
|
|
162
|
-
endOffset: offset +
|
|
176
|
+
endOffset: offset + CS_OPERAND_FIXED_TOTAL_LENGTH
|
|
163
177
|
};
|
|
164
178
|
}
|
|
165
179
|
if (b0 >= CS_OPERAND_SMALL_FIRST && b0 <= CS_OPERAND_SMALL_LAST) return {
|
|
@@ -246,20 +260,20 @@ function execute(code, state, context, depth) {
|
|
|
246
260
|
break;
|
|
247
261
|
}
|
|
248
262
|
case OP_RRCURVETO:
|
|
249
|
-
for (let k = 0; k +
|
|
263
|
+
for (let k = 0; k + CURVE_DY3_OFFSET < stack.length; k += CURVE_ARG_COUNT) curveTo(state, stack[k], stack[k + 1], stack[k + 2], stack[k + CURVE_DY2_OFFSET], stack[k + CURVE_DX3_OFFSET], stack[k + CURVE_DY3_OFFSET]);
|
|
250
264
|
stack.length = 0;
|
|
251
265
|
break;
|
|
252
266
|
case OP_RCURVELINE: {
|
|
253
267
|
let k = 0;
|
|
254
|
-
for (; k +
|
|
268
|
+
for (; k + CURVE_DY3_OFFSET < stack.length - 2; k += CURVE_ARG_COUNT) curveTo(state, stack[k], stack[k + 1], stack[k + 2], stack[k + CURVE_DY2_OFFSET], stack[k + CURVE_DX3_OFFSET], stack[k + CURVE_DY3_OFFSET]);
|
|
255
269
|
if (k + 1 < stack.length) lineTo(state, stack[k], stack[k + 1]);
|
|
256
270
|
stack.length = 0;
|
|
257
271
|
break;
|
|
258
272
|
}
|
|
259
273
|
case OP_RLINECURVE: {
|
|
260
274
|
let k = 0;
|
|
261
|
-
for (; k + 1 < stack.length -
|
|
262
|
-
if (k +
|
|
275
|
+
for (; k + 1 < stack.length - CURVE_ARG_COUNT; k += 2) lineTo(state, stack[k], stack[k + 1]);
|
|
276
|
+
if (k + CURVE_DY3_OFFSET < stack.length) curveTo(state, stack[k], stack[k + 1], stack[k + 2], stack[k + CURVE_DY2_OFFSET], stack[k + CURVE_DX3_OFFSET], stack[k + CURVE_DY3_OFFSET]);
|
|
263
277
|
stack.length = 0;
|
|
264
278
|
break;
|
|
265
279
|
}
|
|
@@ -267,14 +281,14 @@ function execute(code, state, context, depth) {
|
|
|
267
281
|
case OP_HHCURVETO: {
|
|
268
282
|
let k = 0;
|
|
269
283
|
let firstCross = 0;
|
|
270
|
-
if (stack.length %
|
|
284
|
+
if (stack.length % QUAD_CURVE_ARG_COUNT === 1) {
|
|
271
285
|
firstCross = stack[0];
|
|
272
286
|
k = 1;
|
|
273
287
|
}
|
|
274
|
-
for (; k +
|
|
288
|
+
for (; k + QUAD_CURVE_LAST_OFFSET < stack.length; k += QUAD_CURVE_ARG_COUNT) {
|
|
275
289
|
const cross = k <= 1 ? firstCross : 0;
|
|
276
|
-
if (b0 === OP_VVCURVETO) curveTo(state, cross, stack[k], stack[k + 1], stack[k + 2], 0, stack[k +
|
|
277
|
-
else curveTo(state, stack[k], cross, stack[k + 1], stack[k + 2], stack[k +
|
|
290
|
+
if (b0 === OP_VVCURVETO) curveTo(state, cross, stack[k], stack[k + 1], stack[k + 2], 0, stack[k + QUAD_CURVE_LAST_OFFSET]);
|
|
291
|
+
else curveTo(state, stack[k], cross, stack[k + 1], stack[k + 2], stack[k + QUAD_CURVE_LAST_OFFSET], 0);
|
|
278
292
|
}
|
|
279
293
|
stack.length = 0;
|
|
280
294
|
break;
|
|
@@ -283,11 +297,11 @@ function execute(code, state, context, depth) {
|
|
|
283
297
|
case OP_HVCURVETO: {
|
|
284
298
|
let horizontal = b0 === OP_HVCURVETO;
|
|
285
299
|
let k = 0;
|
|
286
|
-
while (stack.length - k >=
|
|
287
|
-
const extra = stack.length - k ===
|
|
288
|
-
if (horizontal) curveTo(state, stack[k], 0, stack[k + 1], stack[k + 2], extra, stack[k +
|
|
289
|
-
else curveTo(state, 0, stack[k], stack[k + 1], stack[k + 2], stack[k +
|
|
290
|
-
k +=
|
|
300
|
+
while (stack.length - k >= QUAD_CURVE_ARG_COUNT) {
|
|
301
|
+
const extra = stack.length - k === QUAD_CURVE_WITH_EXTRA_ARG_COUNT ? stack[k + QUAD_CURVE_ARG_COUNT] : 0;
|
|
302
|
+
if (horizontal) curveTo(state, stack[k], 0, stack[k + 1], stack[k + 2], extra, stack[k + QUAD_CURVE_LAST_OFFSET]);
|
|
303
|
+
else curveTo(state, 0, stack[k], stack[k + 1], stack[k + 2], stack[k + QUAD_CURVE_LAST_OFFSET], extra);
|
|
304
|
+
k += QUAD_CURVE_ARG_COUNT;
|
|
291
305
|
horizontal = !horizontal;
|
|
292
306
|
}
|
|
293
307
|
stack.length = 0;
|
|
@@ -322,25 +336,29 @@ function execute(code, state, context, depth) {
|
|
|
322
336
|
}
|
|
323
337
|
return true;
|
|
324
338
|
}
|
|
339
|
+
const FLEX_ARG_COUNT = 13;
|
|
340
|
+
const HFLEX_ARG_COUNT = 7;
|
|
341
|
+
const HFLEX1_ARG_COUNT = 9;
|
|
342
|
+
const FLEX1_ARG_COUNT = 11;
|
|
325
343
|
function executeEscaped(operator, state) {
|
|
326
344
|
const stack = state.stack;
|
|
327
345
|
const startY = state.y;
|
|
328
346
|
if (operator === ESC_FLEX) {
|
|
329
|
-
if (stack.length <
|
|
347
|
+
if (stack.length < FLEX_ARG_COUNT) return false;
|
|
330
348
|
curveTo(state, stack[0], stack[1], stack[2], stack[3], stack[4], stack[5]);
|
|
331
349
|
curveTo(state, stack[6], stack[7], stack[8], stack[9], stack[10], stack[11]);
|
|
332
350
|
stack.length = 0;
|
|
333
351
|
return true;
|
|
334
352
|
}
|
|
335
353
|
if (operator === ESC_HFLEX) {
|
|
336
|
-
if (stack.length <
|
|
354
|
+
if (stack.length < HFLEX_ARG_COUNT) return false;
|
|
337
355
|
curveTo(state, stack[0], 0, stack[1], stack[2], stack[3], 0);
|
|
338
356
|
curveTo(state, stack[4], 0, stack[5], -stack[2], stack[6], 0);
|
|
339
357
|
stack.length = 0;
|
|
340
358
|
return true;
|
|
341
359
|
}
|
|
342
360
|
if (operator === ESC_HFLEX1) {
|
|
343
|
-
if (stack.length <
|
|
361
|
+
if (stack.length < HFLEX1_ARG_COUNT) return false;
|
|
344
362
|
curveTo(state, stack[0], stack[1], stack[2], stack[3], stack[4], 0);
|
|
345
363
|
const dy5 = stack[7];
|
|
346
364
|
curveTo(state, stack[5], 0, stack[6], dy5, stack[8], startY - (state.y + dy5));
|
|
@@ -348,7 +366,7 @@ function executeEscaped(operator, state) {
|
|
|
348
366
|
return true;
|
|
349
367
|
}
|
|
350
368
|
if (operator === ESC_FLEX1) {
|
|
351
|
-
if (stack.length <
|
|
369
|
+
if (stack.length < FLEX1_ARG_COUNT) return false;
|
|
352
370
|
const startX = state.x;
|
|
353
371
|
let dx = 0;
|
|
354
372
|
let dy = 0;
|
package/dist/cff.cjs
CHANGED
|
@@ -12,6 +12,7 @@ const INDEX_COUNT_SIZE = 2;
|
|
|
12
12
|
const INDEX_OFF_SIZE_SIZE = 1;
|
|
13
13
|
const MIN_OFF_SIZE = 1;
|
|
14
14
|
const MAX_OFF_SIZE = 4;
|
|
15
|
+
const OFF_SIZE_3_BYTES = 3;
|
|
15
16
|
const DICT_OPERATOR_MAX = 21;
|
|
16
17
|
const DICT_OPERATOR_ESCAPE = 12;
|
|
17
18
|
const DICT_OPERAND_INT16 = 28;
|
|
@@ -28,6 +29,12 @@ const DICT_OPERAND_MEDIUM_BIAS = 108;
|
|
|
28
29
|
const DICT_OPERAND_MEDIUM_FIRST_BYTE_BIAS = 247;
|
|
29
30
|
const DICT_OPERAND_NEGATIVE_MEDIUM_FIRST_BYTE_BIAS = 251;
|
|
30
31
|
const BYTE_RADIX = 256;
|
|
32
|
+
const INT16_SIGN_BIT = 32768;
|
|
33
|
+
const UINT16_MODULUS = 65536;
|
|
34
|
+
const DICT_OPERAND_INT16_TOTAL_SIZE = 3;
|
|
35
|
+
const INT32_SIZE_BYTES = 4;
|
|
36
|
+
const DICT_OPERAND_INT32_TOTAL_SIZE = 5;
|
|
37
|
+
const REAL_NIBBLE_DIGIT_MAX = 9;
|
|
31
38
|
const REAL_NIBBLE_DECIMAL_POINT = 10;
|
|
32
39
|
const REAL_NIBBLE_EXPONENT = 11;
|
|
33
40
|
const REAL_NIBBLE_NEGATIVE_EXPONENT = 12;
|
|
@@ -39,7 +46,7 @@ const LOW_NIBBLE_MASK = 15;
|
|
|
39
46
|
function readOffsetAt(bytes, offset, offSize) {
|
|
40
47
|
if (offSize === 1) return require_sfnt.u8(bytes, offset);
|
|
41
48
|
if (offSize === 2) return require_sfnt.u16(bytes, offset);
|
|
42
|
-
if (offSize ===
|
|
49
|
+
if (offSize === OFF_SIZE_3_BYTES) return require_sfnt.u24(bytes, offset);
|
|
43
50
|
return require_sfnt.u32(bytes, offset);
|
|
44
51
|
}
|
|
45
52
|
function readCffIndex(bytes, offset) {
|
|
@@ -80,7 +87,7 @@ function readRealOperand(data, start) {
|
|
|
80
87
|
endOffset: i + 1
|
|
81
88
|
};
|
|
82
89
|
if (nibble === REAL_NIBBLE_RESERVED) return;
|
|
83
|
-
if (nibble <=
|
|
90
|
+
if (nibble <= REAL_NIBBLE_DIGIT_MAX) text += String(nibble);
|
|
84
91
|
else if (nibble === REAL_NIBBLE_DECIMAL_POINT) text += ".";
|
|
85
92
|
else if (nibble === REAL_NIBBLE_EXPONENT) text += "E";
|
|
86
93
|
else if (nibble === REAL_NIBBLE_NEGATIVE_EXPONENT) text += "E-";
|
|
@@ -109,14 +116,14 @@ function parseCffDict(data) {
|
|
|
109
116
|
if (b0 === DICT_OPERAND_INT16) {
|
|
110
117
|
if (!require_sfnt.hasBytes(data, i + 1, 2)) return;
|
|
111
118
|
const raw = require_sfnt.u16(data, i + 1);
|
|
112
|
-
operands.push(raw >=
|
|
113
|
-
i +=
|
|
119
|
+
operands.push(raw >= INT16_SIGN_BIT ? raw - UINT16_MODULUS : raw);
|
|
120
|
+
i += DICT_OPERAND_INT16_TOTAL_SIZE;
|
|
114
121
|
continue;
|
|
115
122
|
}
|
|
116
123
|
if (b0 === DICT_OPERAND_INT32) {
|
|
117
|
-
if (!require_sfnt.hasBytes(data, i + 1,
|
|
124
|
+
if (!require_sfnt.hasBytes(data, i + 1, INT32_SIZE_BYTES)) return;
|
|
118
125
|
operands.push(require_sfnt.u32(data, i + 1) | 0);
|
|
119
|
-
i +=
|
|
126
|
+
i += DICT_OPERAND_INT32_TOTAL_SIZE;
|
|
120
127
|
continue;
|
|
121
128
|
}
|
|
122
129
|
if (b0 === DICT_OPERAND_REAL) {
|