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.
Files changed (145) hide show
  1. package/dist/{afm-widths-BYiX2L9D.cjs → afm-widths-BHD2HZIL.cjs} +553 -642
  2. package/dist/{afm-widths-blUDDjlI.js → afm-widths-B_IGbGky.js} +553 -642
  3. package/dist/afm-widths.cjs +1 -1
  4. package/dist/afm-widths.js +1 -1
  5. package/dist/annotations.cjs +5 -3
  6. package/dist/annotations.js +5 -3
  7. package/dist/builtin-encoding.cjs +17 -6
  8. package/dist/builtin-encoding.js +17 -6
  9. package/dist/bytes/crc32.cjs +5 -3
  10. package/dist/bytes/crc32.js +5 -3
  11. package/dist/bytes/flate.cjs +0 -1
  12. package/dist/bytes/flate.js +0 -1
  13. package/dist/cff-bounds.cjs +42 -24
  14. package/dist/cff-bounds.js +42 -24
  15. package/dist/cff.cjs +13 -6
  16. package/dist/cff.js +13 -6
  17. package/dist/cmap-table.cjs +54 -26
  18. package/dist/cmap-table.js +54 -26
  19. package/dist/cmap.cjs +5 -3
  20. package/dist/cmap.js +5 -3
  21. package/dist/content-write.cjs +3 -2
  22. package/dist/content-write.js +3 -2
  23. package/dist/crypto/aes.cjs +76 -55
  24. package/dist/crypto/aes.js +76 -55
  25. package/dist/crypto/md5.cjs +345 -149
  26. package/dist/crypto/md5.js +345 -149
  27. package/dist/crypto/rc4.cjs +5 -4
  28. package/dist/crypto/rc4.js +5 -4
  29. package/dist/crypto/sha2.cjs +92 -43
  30. package/dist/crypto/sha2.js +92 -43
  31. package/dist/embedded-font.cjs +4 -2
  32. package/dist/embedded-font.js +4 -2
  33. package/dist/encoding.cjs +1 -1
  34. package/dist/encoding.js +1 -1
  35. package/dist/encrypt-write.cjs +25 -21
  36. package/dist/encrypt-write.js +25 -21
  37. package/dist/encrypt.cjs +43 -64
  38. package/dist/encrypt.js +43 -64
  39. package/dist/filters.cjs +40 -20
  40. package/dist/filters.js +40 -20
  41. package/dist/font-face.cjs +2 -1
  42. package/dist/font-face.js +2 -1
  43. package/dist/font-read.cjs +12 -6
  44. package/dist/font-read.js +12 -6
  45. package/dist/font-tables.cjs +55 -28
  46. package/dist/font-tables.js +55 -28
  47. package/dist/gdef-table.cjs +6 -3
  48. package/dist/gdef-table.js +6 -3
  49. package/dist/glyf-contours.cjs +3 -1
  50. package/dist/glyf-contours.js +3 -1
  51. package/dist/glyf.cjs +22 -11
  52. package/dist/glyf.js +22 -11
  53. package/dist/gpos-table.cjs +37 -19
  54. package/dist/gpos-table.js +37 -19
  55. package/dist/gsub-table.cjs +28 -17
  56. package/dist/gsub-table.js +28 -17
  57. package/dist/hmtx-table.cjs +5 -3
  58. package/dist/hmtx-table.js +5 -3
  59. package/dist/image/ccitt-encode.cjs +8 -5
  60. package/dist/image/ccitt-encode.js +8 -5
  61. package/dist/image/ccitt.cjs +801 -209
  62. package/dist/image/ccitt.js +801 -209
  63. package/dist/image/jbig2-arith.cjs +340 -306
  64. package/dist/image/jbig2-arith.js +340 -306
  65. package/dist/image/jbig2-bitmap.cjs +8 -5
  66. package/dist/image/jbig2-bitmap.js +8 -5
  67. package/dist/image/jbig2-generic.cjs +240 -69
  68. package/dist/image/jbig2-generic.js +240 -69
  69. package/dist/image/jbig2-text.cjs +4 -2
  70. package/dist/image/jbig2-text.js +4 -2
  71. package/dist/image/jbig2.cjs +69 -31
  72. package/dist/image/jbig2.js +69 -31
  73. package/dist/image/jp2-boxes.cjs +52 -27
  74. package/dist/image/jp2-boxes.js +52 -27
  75. package/dist/image/jpeg-info.cjs +29 -24
  76. package/dist/image/jpeg-info.js +29 -24
  77. package/dist/image/jpeg2000-codestream.cjs +44 -24
  78. package/dist/image/jpeg2000-codestream.js +44 -24
  79. package/dist/image/jpeg2000-dwt.cjs +2 -1
  80. package/dist/image/jpeg2000-dwt.js +2 -1
  81. package/dist/image/jpeg2000-t1.cjs +21 -11
  82. package/dist/image/jpeg2000-t1.js +21 -11
  83. package/dist/image/jpeg2000-t2.cjs +12 -5
  84. package/dist/image/jpeg2000-t2.js +12 -5
  85. package/dist/image/jpeg2000-tagtree.cjs +8 -4
  86. package/dist/image/jpeg2000-tagtree.js +8 -4
  87. package/dist/image/jpeg2000.cjs +11 -6
  88. package/dist/image/jpeg2000.js +11 -6
  89. package/dist/image/png-decode.cjs +62 -39
  90. package/dist/image/png-decode.d.cts +3 -2
  91. package/dist/image/png-decode.d.ts +3 -2
  92. package/dist/image/png-decode.js +62 -39
  93. package/dist/image/png-filter.cjs +23 -15
  94. package/dist/image/png-filter.js +23 -15
  95. package/dist/images-read.cjs +41 -36
  96. package/dist/images-read.js +41 -36
  97. package/dist/index.cjs +1 -1
  98. package/dist/index.js +1 -1
  99. package/dist/interpret.cjs +39 -24
  100. package/dist/interpret.js +39 -24
  101. package/dist/lexer.cjs +86 -51
  102. package/dist/lexer.js +86 -51
  103. package/dist/math-content-write.cjs +9 -5
  104. package/dist/math-content-write.js +9 -5
  105. package/dist/math-font-write.cjs +2 -1
  106. package/dist/math-font-write.js +2 -1
  107. package/dist/math-font.cjs +16 -7
  108. package/dist/math-font.js +16 -7
  109. package/dist/math-table.cjs +25 -13
  110. package/dist/math-table.js +25 -13
  111. package/dist/matrix.cjs +3 -2
  112. package/dist/matrix.js +3 -2
  113. package/dist/measure.cjs +1 -1
  114. package/dist/measure.js +1 -1
  115. package/dist/navigation.cjs +10 -5
  116. package/dist/navigation.js +10 -5
  117. package/dist/ot-layout-common.cjs +4 -2
  118. package/dist/ot-layout-common.js +4 -2
  119. package/dist/parse.cjs +7 -5
  120. package/dist/parse.js +7 -5
  121. package/dist/pdf-text.cjs +5 -2
  122. package/dist/pdf-text.js +5 -2
  123. package/dist/predictors.cjs +14 -9
  124. package/dist/predictors.js +14 -9
  125. package/dist/raster.cjs +30 -19
  126. package/dist/raster.js +30 -19
  127. package/dist/read.cjs +17 -8
  128. package/dist/read.js +17 -8
  129. package/dist/serialize.cjs +6 -2
  130. package/dist/serialize.js +6 -2
  131. package/dist/sfnt-subset.cjs +25 -13
  132. package/dist/sfnt-subset.js +25 -13
  133. package/dist/sfnt.cjs +20 -10
  134. package/dist/sfnt.js +20 -10
  135. package/dist/text-group.cjs +0 -1
  136. package/dist/text-group.js +0 -1
  137. package/dist/tounicode.cjs +4 -2
  138. package/dist/tounicode.js +4 -2
  139. package/dist/winansi.cjs +1 -1
  140. package/dist/winansi.js +1 -1
  141. package/dist/write.cjs +20 -12
  142. package/dist/write.js +20 -12
  143. package/dist/xref.cjs +5 -2
  144. package/dist/xref.js +5 -2
  145. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_afm_widths = require("./afm-widths-BYiX2L9D.cjs");
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;
@@ -1,2 +1,2 @@
1
- import { n as widthOfCode, t as STANDARD_METRICS } from "./afm-widths-blUDDjlI.js";
1
+ import { n as widthOfCode, t as STANDARD_METRICS } from "./afm-widths-B_IGbGky.js";
2
2
  export { STANDARD_METRICS, widthOfCode };
@@ -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 < 8 || quadPoints.length % 8 !== 0) return {};
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 += 8) {
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(3)
100
+ corner(QUAD_POINT_LAST_CORNER_INDEX)
99
101
  ]);
100
102
  }
101
103
  return { quads };
@@ -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 < 8 || quadPoints.length % 8 !== 0) return {};
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 += 8) {
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(3)
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-BYiX2L9D.cjs");
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 >= 57344 && codePoint <= 63743 || codePoint >= 983040 && codePoint <= 1048573 || codePoint >= 1048576 && codePoint <= 1114109;
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 === 3 && s.encodingId === 0) ?? subtables.find((s) => s.platformId === 1 && s.encodingId === 0);
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 === 3 && s.encodingId === 10) ?? subtables.find((s) => s.platformId === 3 && s.encodingId === 1) ?? subtables.find((s) => s.platformId === 0);
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, 3)) return glyphByCode;
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 += 3;
148
+ cursor += CFF_ENCODING_SUPPLEMENT_RECORD_SIZE;
138
149
  }
139
150
  }
140
151
  return glyphByCode;
@@ -1,11 +1,17 @@
1
- import { c as glyphNameToUnicode, d as standardGlyphName } from "./afm-widths-blUDDjlI.js";
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 >= 57344 && codePoint <= 63743 || codePoint >= 983040 && codePoint <= 1048573 || codePoint >= 1048576 && codePoint <= 1114109;
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 === 3 && s.encodingId === 0) ?? subtables.find((s) => s.platformId === 1 && s.encodingId === 0);
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 === 3 && s.encodingId === 10) ?? subtables.find((s) => s.platformId === 3 && s.encodingId === 1) ?? subtables.find((s) => s.platformId === 0);
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, 3)) return glyphByCode;
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 += 3;
147
+ cursor += CFF_ENCODING_SUPPLEMENT_RECORD_SIZE;
137
148
  }
138
149
  }
139
150
  return glyphByCode;
@@ -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 = 4294967295;
17
- for (const byte of bytes) crc = CRC32_TABLE[(crc ^ byte) & 255] ^ crc >>> 8;
18
- return (crc ^ 4294967295) >>> 0;
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;
@@ -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 = 4294967295;
16
- for (const byte of bytes) crc = CRC32_TABLE[(crc ^ byte) & 255] ^ crc >>> 8;
17
- return (crc ^ 4294967295) >>> 0;
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 };
@@ -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 });
@@ -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 });
@@ -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 + 3 * s * s * t * p1 + 3 * s * t * t * p2 + t * t * t * p3;
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 + 3 * p1 - 3 * p2 + p3;
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 - 4 * a * c;
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 >= 32768 ? raw - 65536 : raw,
156
- endOffset: offset + 3
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, 4)) return;
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 + 5
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 + 5 < stack.length; k += 6) curveTo(state, stack[k], stack[k + 1], stack[k + 2], stack[k + 3], stack[k + 4], stack[k + 5]);
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 + 5 < stack.length - 2; k += 6) curveTo(state, stack[k], stack[k + 1], stack[k + 2], stack[k + 3], stack[k + 4], stack[k + 5]);
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 - 6; k += 2) lineTo(state, stack[k], stack[k + 1]);
263
- if (k + 5 < stack.length) curveTo(state, stack[k], stack[k + 1], stack[k + 2], stack[k + 3], stack[k + 4], stack[k + 5]);
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 % 4 === 1) {
285
+ if (stack.length % QUAD_CURVE_ARG_COUNT === 1) {
272
286
  firstCross = stack[0];
273
287
  k = 1;
274
288
  }
275
- for (; k + 3 < stack.length; k += 4) {
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 + 3]);
278
- else curveTo(state, stack[k], cross, stack[k + 1], stack[k + 2], stack[k + 3], 0);
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 >= 4) {
288
- const extra = stack.length - k === 5 ? stack[k + 4] : 0;
289
- if (horizontal) curveTo(state, stack[k], 0, stack[k + 1], stack[k + 2], extra, stack[k + 3]);
290
- else curveTo(state, 0, stack[k], stack[k + 1], stack[k + 2], stack[k + 3], extra);
291
- k += 4;
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 < 13) return false;
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 < 7) return false;
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 < 9) return false;
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 < 11) return false;
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;
@@ -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 + 3 * s * s * t * p1 + 3 * s * t * t * p2 + t * t * t * p3;
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 + 3 * p1 - 3 * p2 + p3;
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 - 4 * a * c;
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 >= 32768 ? raw - 65536 : raw,
155
- endOffset: offset + 3
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, 4)) return;
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 + 5
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 + 5 < stack.length; k += 6) curveTo(state, stack[k], stack[k + 1], stack[k + 2], stack[k + 3], stack[k + 4], stack[k + 5]);
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 + 5 < stack.length - 2; k += 6) curveTo(state, stack[k], stack[k + 1], stack[k + 2], stack[k + 3], stack[k + 4], stack[k + 5]);
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 - 6; k += 2) lineTo(state, stack[k], stack[k + 1]);
262
- if (k + 5 < stack.length) curveTo(state, stack[k], stack[k + 1], stack[k + 2], stack[k + 3], stack[k + 4], stack[k + 5]);
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 % 4 === 1) {
284
+ if (stack.length % QUAD_CURVE_ARG_COUNT === 1) {
271
285
  firstCross = stack[0];
272
286
  k = 1;
273
287
  }
274
- for (; k + 3 < stack.length; k += 4) {
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 + 3]);
277
- else curveTo(state, stack[k], cross, stack[k + 1], stack[k + 2], stack[k + 3], 0);
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 >= 4) {
287
- const extra = stack.length - k === 5 ? stack[k + 4] : 0;
288
- if (horizontal) curveTo(state, stack[k], 0, stack[k + 1], stack[k + 2], extra, stack[k + 3]);
289
- else curveTo(state, 0, stack[k], stack[k + 1], stack[k + 2], stack[k + 3], extra);
290
- k += 4;
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 < 13) return false;
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 < 7) return false;
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 < 9) return false;
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 < 11) return false;
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 === 3) return require_sfnt.u24(bytes, offset);
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 <= 9) text += String(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 >= 32768 ? raw - 65536 : raw);
113
- i += 3;
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, 4)) return;
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 += 5;
126
+ i += DICT_OPERAND_INT32_TOTAL_SIZE;
120
127
  continue;
121
128
  }
122
129
  if (b0 === DICT_OPERAND_REAL) {