pdf-parser.js 5.2.26 → 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 (221) 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.d.cts +2 -2
  7. package/dist/annotations.d.ts +2 -2
  8. package/dist/annotations.js +5 -3
  9. package/dist/attachments.d.cts +2 -2
  10. package/dist/attachments.d.ts +2 -2
  11. package/dist/builtin-encoding.cjs +17 -6
  12. package/dist/builtin-encoding.js +17 -6
  13. package/dist/bytes/crc32.cjs +5 -3
  14. package/dist/bytes/crc32.js +5 -3
  15. package/dist/bytes/flate.cjs +0 -1
  16. package/dist/bytes/flate.js +0 -1
  17. package/dist/cff-bounds.cjs +73 -45
  18. package/dist/cff-bounds.js +73 -45
  19. package/dist/cff.cjs +13 -6
  20. package/dist/cff.js +13 -6
  21. package/dist/cmap-table.cjs +54 -26
  22. package/dist/cmap-table.js +54 -26
  23. package/dist/cmap.cjs +5 -3
  24. package/dist/cmap.js +5 -3
  25. package/dist/content-read.d.cts +1 -1
  26. package/dist/content-read.d.ts +1 -1
  27. package/dist/content-write.cjs +21 -14
  28. package/dist/content-write.d.cts +2 -2
  29. package/dist/content-write.d.ts +2 -2
  30. package/dist/content-write.js +21 -14
  31. package/dist/crypto/aes.cjs +76 -55
  32. package/dist/crypto/aes.js +76 -55
  33. package/dist/crypto/md5.cjs +345 -149
  34. package/dist/crypto/md5.js +345 -149
  35. package/dist/crypto/rc4.cjs +5 -4
  36. package/dist/crypto/rc4.js +5 -4
  37. package/dist/crypto/sha2.cjs +92 -43
  38. package/dist/crypto/sha2.js +92 -43
  39. package/dist/document.cjs +17 -11
  40. package/dist/document.d.cts +1 -1
  41. package/dist/document.d.ts +1 -1
  42. package/dist/document.js +17 -11
  43. package/dist/{embedded-font-Bnhh4juV.d.ts → embedded-font-ByD7ZiQS.d.ts} +1 -1
  44. package/dist/{embedded-font-CEf-zBCA.d.cts → embedded-font-DgVBedw6.d.cts} +1 -1
  45. package/dist/embedded-font-write.d.cts +2 -2
  46. package/dist/embedded-font-write.d.ts +2 -2
  47. package/dist/embedded-font.cjs +4 -2
  48. package/dist/embedded-font.d.cts +1 -1
  49. package/dist/embedded-font.d.ts +1 -1
  50. package/dist/embedded-font.js +4 -2
  51. package/dist/encoding.cjs +1 -1
  52. package/dist/encoding.js +1 -1
  53. package/dist/encrypt-write.cjs +25 -21
  54. package/dist/encrypt-write.d.cts +1 -1
  55. package/dist/encrypt-write.d.ts +1 -1
  56. package/dist/encrypt-write.js +25 -21
  57. package/dist/encrypt.cjs +43 -64
  58. package/dist/encrypt.d.cts +1 -1
  59. package/dist/encrypt.d.ts +1 -1
  60. package/dist/encrypt.js +43 -64
  61. package/dist/filters.cjs +46 -26
  62. package/dist/filters.d.cts +1 -1
  63. package/dist/filters.d.ts +1 -1
  64. package/dist/filters.js +46 -26
  65. package/dist/font-face.cjs +2 -1
  66. package/dist/font-face.js +2 -1
  67. package/dist/font-read.cjs +12 -6
  68. package/dist/font-read.d.cts +1 -1
  69. package/dist/font-read.d.ts +1 -1
  70. package/dist/font-read.js +12 -6
  71. package/dist/font-registry.d.cts +3 -3
  72. package/dist/font-registry.d.ts +3 -3
  73. package/dist/font-tables.cjs +55 -28
  74. package/dist/font-tables.js +55 -28
  75. package/dist/form.cjs +13 -8
  76. package/dist/form.d.cts +2 -2
  77. package/dist/form.d.ts +2 -2
  78. package/dist/form.js +13 -8
  79. package/dist/gdef-table.cjs +6 -3
  80. package/dist/gdef-table.js +6 -3
  81. package/dist/{glyf-contours-C0epBNqP.d.ts → glyf-contours-B1PsI9oA.d.ts} +1 -1
  82. package/dist/{glyf-contours-BRpvd0rt.d.cts → glyf-contours-NHBpgks-.d.cts} +1 -1
  83. package/dist/glyf-contours.cjs +3 -1
  84. package/dist/glyf-contours.d.cts +1 -1
  85. package/dist/glyf-contours.d.ts +1 -1
  86. package/dist/glyf-contours.js +3 -1
  87. package/dist/glyf.cjs +22 -11
  88. package/dist/glyf.js +22 -11
  89. package/dist/gpos-table.cjs +37 -19
  90. package/dist/gpos-table.js +37 -19
  91. package/dist/gsub-table.cjs +40 -25
  92. package/dist/gsub-table.js +40 -25
  93. package/dist/hmtx-table.cjs +5 -3
  94. package/dist/hmtx-table.js +5 -3
  95. package/dist/image/ccitt-encode.cjs +8 -5
  96. package/dist/image/ccitt-encode.js +8 -5
  97. package/dist/image/ccitt.cjs +801 -209
  98. package/dist/image/ccitt.js +801 -209
  99. package/dist/image/jbig2-arith.cjs +340 -306
  100. package/dist/image/jbig2-arith.js +340 -306
  101. package/dist/image/jbig2-bitmap.cjs +8 -5
  102. package/dist/image/jbig2-bitmap.js +8 -5
  103. package/dist/image/jbig2-generic.cjs +240 -69
  104. package/dist/image/jbig2-generic.js +240 -69
  105. package/dist/image/jbig2-text.cjs +4 -2
  106. package/dist/image/jbig2-text.js +4 -2
  107. package/dist/image/jbig2.cjs +69 -31
  108. package/dist/image/jbig2.js +69 -31
  109. package/dist/image/jp2-boxes.cjs +52 -27
  110. package/dist/image/jp2-boxes.js +52 -27
  111. package/dist/image/jpeg-info.cjs +29 -24
  112. package/dist/image/jpeg-info.js +29 -24
  113. package/dist/image/jpeg2000-codestream.cjs +61 -32
  114. package/dist/image/jpeg2000-codestream.js +61 -32
  115. package/dist/image/jpeg2000-dwt.cjs +2 -1
  116. package/dist/image/jpeg2000-dwt.js +2 -1
  117. package/dist/image/jpeg2000-t1.cjs +21 -11
  118. package/dist/image/jpeg2000-t1.js +21 -11
  119. package/dist/image/jpeg2000-t2.cjs +12 -5
  120. package/dist/image/jpeg2000-t2.js +12 -5
  121. package/dist/image/jpeg2000-tagtree.cjs +8 -4
  122. package/dist/image/jpeg2000-tagtree.js +8 -4
  123. package/dist/image/jpeg2000.cjs +11 -6
  124. package/dist/image/jpeg2000.js +11 -6
  125. package/dist/image/png-decode.cjs +62 -39
  126. package/dist/image/png-decode.d.cts +3 -2
  127. package/dist/image/png-decode.d.ts +3 -2
  128. package/dist/image/png-decode.js +62 -39
  129. package/dist/image/png-filter.cjs +23 -15
  130. package/dist/image/png-filter.js +23 -15
  131. package/dist/images-read.cjs +41 -36
  132. package/dist/images-read.d.cts +2 -2
  133. package/dist/images-read.d.ts +2 -2
  134. package/dist/images-read.js +41 -36
  135. package/dist/index.cjs +1 -1
  136. package/dist/index.d.cts +1 -1
  137. package/dist/index.d.ts +1 -1
  138. package/dist/index.js +1 -1
  139. package/dist/interpret.cjs +68 -40
  140. package/dist/interpret.d.cts +1 -1
  141. package/dist/interpret.d.ts +1 -1
  142. package/dist/interpret.js +68 -40
  143. package/dist/lexer.cjs +86 -51
  144. package/dist/lexer.js +86 -51
  145. package/dist/math-content-write.cjs +9 -5
  146. package/dist/math-content-write.js +9 -5
  147. package/dist/math-font-write.cjs +2 -1
  148. package/dist/math-font-write.d.cts +1 -1
  149. package/dist/math-font-write.d.ts +1 -1
  150. package/dist/math-font-write.js +2 -1
  151. package/dist/math-font.cjs +16 -7
  152. package/dist/math-font.js +16 -7
  153. package/dist/math-table.cjs +25 -13
  154. package/dist/math-table.js +25 -13
  155. package/dist/matrix.cjs +3 -2
  156. package/dist/matrix.js +3 -2
  157. package/dist/measure.cjs +1 -1
  158. package/dist/measure.js +1 -1
  159. package/dist/names.cjs +7 -7
  160. package/dist/names.d.cts +2 -2
  161. package/dist/names.d.ts +2 -2
  162. package/dist/names.js +7 -7
  163. package/dist/navigation.cjs +16 -12
  164. package/dist/navigation.d.cts +4 -4
  165. package/dist/navigation.d.ts +4 -4
  166. package/dist/navigation.js +16 -12
  167. package/dist/{objects-B7HdMeWS.d.cts → objects-e2RS3-yT.d.cts} +3 -3
  168. package/dist/{objects-B7HdMeWS.d.ts → objects-e2RS3-yT.d.ts} +3 -3
  169. package/dist/objects.d.cts +1 -1
  170. package/dist/objects.d.ts +1 -1
  171. package/dist/optional-content.d.cts +2 -2
  172. package/dist/optional-content.d.ts +2 -2
  173. package/dist/ot-layout-common.cjs +22 -15
  174. package/dist/ot-layout-common.js +22 -15
  175. package/dist/parse.cjs +7 -5
  176. package/dist/parse.d.cts +1 -1
  177. package/dist/parse.d.ts +1 -1
  178. package/dist/parse.js +7 -5
  179. package/dist/pdf-text.cjs +5 -2
  180. package/dist/pdf-text.js +5 -2
  181. package/dist/predictors.cjs +14 -9
  182. package/dist/predictors.d.cts +1 -1
  183. package/dist/predictors.d.ts +1 -1
  184. package/dist/predictors.js +14 -9
  185. package/dist/raster.cjs +30 -19
  186. package/dist/raster.d.cts +8 -8
  187. package/dist/raster.d.ts +8 -8
  188. package/dist/raster.js +30 -19
  189. package/dist/read.cjs +29 -16
  190. package/dist/read.js +29 -16
  191. package/dist/serialize.cjs +6 -2
  192. package/dist/serialize.d.cts +1 -1
  193. package/dist/serialize.d.ts +1 -1
  194. package/dist/serialize.js +6 -2
  195. package/dist/sfnt-subset.cjs +25 -13
  196. package/dist/sfnt-subset.d.cts +1 -1
  197. package/dist/sfnt-subset.d.ts +1 -1
  198. package/dist/sfnt-subset.js +25 -13
  199. package/dist/sfnt.cjs +20 -10
  200. package/dist/sfnt.js +20 -10
  201. package/dist/structure.d.cts +2 -2
  202. package/dist/structure.d.ts +2 -2
  203. package/dist/text-group.cjs +0 -1
  204. package/dist/text-group.js +0 -1
  205. package/dist/text-layout.d.cts +1 -1
  206. package/dist/text-layout.d.ts +1 -1
  207. package/dist/tounicode.cjs +4 -2
  208. package/dist/tounicode.d.cts +1 -1
  209. package/dist/tounicode.d.ts +1 -1
  210. package/dist/tounicode.js +4 -2
  211. package/dist/winansi.cjs +1 -1
  212. package/dist/winansi.js +1 -1
  213. package/dist/write.cjs +20 -12
  214. package/dist/write.d.cts +1 -1
  215. package/dist/write.d.ts +1 -1
  216. package/dist/write.js +20 -12
  217. package/dist/xref.cjs +5 -2
  218. package/dist/xref.d.cts +1 -1
  219. package/dist/xref.d.ts +1 -1
  220. package/dist/xref.js +5 -2
  221. 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 };
@@ -1,9 +1,9 @@
1
1
  import { PdfDiagnosticSink } from "./diagnostics.cjs";
2
2
  import { r as Matrix } from "./matrix-B7_SBKQ5.cjs";
3
- import { n as PdfDict } from "./objects-B7HdMeWS.cjs";
3
+ import { n as PdfDict } from "./objects-e2RS3-yT.cjs";
4
4
  import { PdfObjectResolver } from "./interpret.cjs";
5
5
  import { LayoutAnnotation } from "./layout.cjs";
6
6
  //#region src/annotations.d.ts
7
- declare function readPageAnnotations(page: PdfDict, pageMatrix: Matrix, resolver: PdfObjectResolver, sink: PdfDiagnosticSink): LayoutAnnotation[];
7
+ declare function readPageAnnotations(page: PdfDict, pageMatrix: Matrix, resolver: Readonly<PdfObjectResolver>, sink: PdfDiagnosticSink): LayoutAnnotation[];
8
8
  //#endregion
9
9
  export { readPageAnnotations };
@@ -1,9 +1,9 @@
1
1
  import { PdfDiagnosticSink } from "./diagnostics.js";
2
2
  import { r as Matrix } from "./matrix-B7_SBKQ5.js";
3
- import { n as PdfDict } from "./objects-B7HdMeWS.js";
3
+ import { n as PdfDict } from "./objects-e2RS3-yT.js";
4
4
  import { PdfObjectResolver } from "./interpret.js";
5
5
  import { LayoutAnnotation } from "./layout.js";
6
6
  //#region src/annotations.d.ts
7
- declare function readPageAnnotations(page: PdfDict, pageMatrix: Matrix, resolver: PdfObjectResolver, sink: PdfDiagnosticSink): LayoutAnnotation[];
7
+ declare function readPageAnnotations(page: PdfDict, pageMatrix: Matrix, resolver: Readonly<PdfObjectResolver>, sink: PdfDiagnosticSink): LayoutAnnotation[];
8
8
  //#endregion
9
9
  export { readPageAnnotations };
@@ -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,8 +1,8 @@
1
1
  import { PdfDiagnosticSink } from "./diagnostics.cjs";
2
- import { n as PdfDict } from "./objects-B7HdMeWS.cjs";
2
+ import { n as PdfDict } from "./objects-e2RS3-yT.cjs";
3
3
  import { PdfObjectResolver } from "./interpret.cjs";
4
4
  import { LayoutAttachment } from "./layout.cjs";
5
5
  //#region src/attachments.d.ts
6
- declare function readAttachments(catalog: PdfDict, pages: readonly PdfDict[], resolver: PdfObjectResolver, sink: PdfDiagnosticSink): LayoutAttachment[];
6
+ declare function readAttachments(catalog: PdfDict, pages: readonly PdfDict[], resolver: Readonly<PdfObjectResolver>, sink: PdfDiagnosticSink): LayoutAttachment[];
7
7
  //#endregion
8
8
  export { readAttachments };
@@ -1,8 +1,8 @@
1
1
  import { PdfDiagnosticSink } from "./diagnostics.js";
2
- import { n as PdfDict } from "./objects-B7HdMeWS.js";
2
+ import { n as PdfDict } from "./objects-e2RS3-yT.js";
3
3
  import { PdfObjectResolver } from "./interpret.js";
4
4
  import { LayoutAttachment } from "./layout.js";
5
5
  //#region src/attachments.d.ts
6
- declare function readAttachments(catalog: PdfDict, pages: readonly PdfDict[], resolver: PdfObjectResolver, sink: PdfDiagnosticSink): LayoutAttachment[];
6
+ declare function readAttachments(catalog: PdfDict, pages: readonly PdfDict[], resolver: Readonly<PdfObjectResolver>, sink: PdfDiagnosticSink): LayoutAttachment[];
7
7
  //#endregion
8
8
  export { readAttachments };
@@ -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;
@@ -62,28 +74,48 @@ function subrBias(count) {
62
74
  if (count < SUBR_BIAS_MEDIUM_LIMIT) return SUBR_BIAS_MEDIUM;
63
75
  return SUBR_BIAS_LARGE;
64
76
  }
65
- function includePoint(box, x, y) {
66
- box.minX = Math.min(box.minX, x);
67
- box.minY = Math.min(box.minY, y);
68
- box.maxX = Math.max(box.maxX, x);
69
- box.maxY = Math.max(box.maxY, y);
70
- box.drawn = true;
71
- }
77
+ var BoundsBox = class {
78
+ minX = Infinity;
79
+ minY = Infinity;
80
+ maxX = -Infinity;
81
+ maxY = -Infinity;
82
+ drawn = false;
83
+ includePoint(x, y) {
84
+ this.minX = Math.min(this.minX, x);
85
+ this.minY = Math.min(this.minY, y);
86
+ this.maxX = Math.max(this.maxX, x);
87
+ this.maxY = Math.max(this.maxY, y);
88
+ this.drawn = true;
89
+ }
90
+ includeXExtent(value) {
91
+ this.minX = Math.min(this.minX, value);
92
+ this.maxX = Math.max(this.maxX, value);
93
+ }
94
+ includeYExtent(value) {
95
+ this.minY = Math.min(this.minY, value);
96
+ this.maxY = Math.max(this.maxY, value);
97
+ }
98
+ markDrawn() {
99
+ this.drawn = true;
100
+ }
101
+ };
102
+ const CUBIC_BERNSTEIN_COEFFICIENT = 3;
103
+ const QUADRATIC_FORMULA_COEFFICIENT = 4;
72
104
  function cubicAt(p0, p1, p2, p3, t) {
73
105
  const s = 1 - t;
74
- 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;
75
107
  }
76
108
  function includeCubicAxis(p0, p1, p2, p3, apply) {
77
109
  apply(p0);
78
110
  apply(p3);
79
- const a = -p0 + 3 * p1 - 3 * p2 + p3;
111
+ const a = -p0 + CUBIC_BERNSTEIN_COEFFICIENT * p1 - CUBIC_BERNSTEIN_COEFFICIENT * p2 + p3;
80
112
  const b = 2 * (p0 - 2 * p1 + p2);
81
113
  const c = p1 - p0;
82
114
  const roots = [];
83
115
  if (a === 0) {
84
116
  if (b !== 0) roots.push(-c / b);
85
117
  } else {
86
- const discriminant = b * b - 4 * a * c;
118
+ const discriminant = b * b - QUADRATIC_FORMULA_COEFFICIENT * a * c;
87
119
  if (discriminant >= 0) {
88
120
  const root = Math.sqrt(discriminant);
89
121
  roots.push((-b + root) / (2 * a), (-b - root) / (2 * a));
@@ -93,14 +125,12 @@ function includeCubicAxis(p0, p1, p2, p3, apply) {
93
125
  }
94
126
  function includeCubic(box, x0, y0, x1, y1, x2, y2, x3, y3) {
95
127
  includeCubicAxis(x0, x1, x2, x3, (value) => {
96
- box.minX = Math.min(box.minX, value);
97
- box.maxX = Math.max(box.maxX, value);
128
+ box.includeXExtent(value);
98
129
  });
99
130
  includeCubicAxis(y0, y1, y2, y3, (value) => {
100
- box.minY = Math.min(box.minY, value);
101
- box.maxY = Math.max(box.maxY, value);
131
+ box.includeYExtent(value);
102
132
  });
103
- box.drawn = true;
133
+ box.markDrawn();
104
134
  }
105
135
  function curveTo(state, dx1, dy1, dx2, dy2, dx3, dy3) {
106
136
  const x0 = state.x;
@@ -116,10 +146,10 @@ function curveTo(state, dx1, dy1, dx2, dy2, dx3, dy3) {
116
146
  state.y = y3;
117
147
  }
118
148
  function lineTo(state, dx, dy) {
119
- includePoint(state.box, state.x, state.y);
149
+ state.box.includePoint(state.x, state.y);
120
150
  state.x += dx;
121
151
  state.y += dy;
122
- includePoint(state.box, state.x, state.y);
152
+ state.box.includePoint(state.x, state.y);
123
153
  }
124
154
  function moveTo(state, dx, dy) {
125
155
  state.x += dx;
@@ -136,15 +166,15 @@ function readOperand(code, offset) {
136
166
  if (!require_sfnt.hasBytes(code, offset + 1, 2)) return;
137
167
  const raw = require_sfnt.u16(code, offset + 1);
138
168
  return {
139
- value: raw >= 32768 ? raw - 65536 : raw,
140
- endOffset: offset + 3
169
+ value: raw >= INT16_SIGN_BIT ? raw - INT16_MODULUS : raw,
170
+ endOffset: offset + CS_OPERAND_INT16_TOTAL_LENGTH
141
171
  };
142
172
  }
143
173
  if (b0 === CS_OPERAND_FIXED) {
144
- if (!require_sfnt.hasBytes(code, offset + 1, 4)) return;
174
+ if (!require_sfnt.hasBytes(code, offset + 1, CS_OPERAND_FIXED_BYTE_LENGTH)) return;
145
175
  return {
146
176
  value: (require_sfnt.u32(code, offset + 1) | 0) / FIXED_POINT_SCALE,
147
- endOffset: offset + 5
177
+ endOffset: offset + CS_OPERAND_FIXED_TOTAL_LENGTH
148
178
  };
149
179
  }
150
180
  if (b0 >= CS_OPERAND_SMALL_FIRST && b0 <= CS_OPERAND_SMALL_LAST) return {
@@ -231,20 +261,20 @@ function execute(code, state, context, depth) {
231
261
  break;
232
262
  }
233
263
  case OP_RRCURVETO:
234
- 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]);
235
265
  stack.length = 0;
236
266
  break;
237
267
  case OP_RCURVELINE: {
238
268
  let k = 0;
239
- 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]);
240
270
  if (k + 1 < stack.length) lineTo(state, stack[k], stack[k + 1]);
241
271
  stack.length = 0;
242
272
  break;
243
273
  }
244
274
  case OP_RLINECURVE: {
245
275
  let k = 0;
246
- for (; k + 1 < stack.length - 6; k += 2) lineTo(state, stack[k], stack[k + 1]);
247
- 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]);
248
278
  stack.length = 0;
249
279
  break;
250
280
  }
@@ -252,14 +282,14 @@ function execute(code, state, context, depth) {
252
282
  case OP_HHCURVETO: {
253
283
  let k = 0;
254
284
  let firstCross = 0;
255
- if (stack.length % 4 === 1) {
285
+ if (stack.length % QUAD_CURVE_ARG_COUNT === 1) {
256
286
  firstCross = stack[0];
257
287
  k = 1;
258
288
  }
259
- for (; k + 3 < stack.length; k += 4) {
289
+ for (; k + QUAD_CURVE_LAST_OFFSET < stack.length; k += QUAD_CURVE_ARG_COUNT) {
260
290
  const cross = k <= 1 ? firstCross : 0;
261
- if (b0 === OP_VVCURVETO) curveTo(state, cross, stack[k], stack[k + 1], stack[k + 2], 0, stack[k + 3]);
262
- 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);
263
293
  }
264
294
  stack.length = 0;
265
295
  break;
@@ -268,11 +298,11 @@ function execute(code, state, context, depth) {
268
298
  case OP_HVCURVETO: {
269
299
  let horizontal = b0 === OP_HVCURVETO;
270
300
  let k = 0;
271
- while (stack.length - k >= 4) {
272
- const extra = stack.length - k === 5 ? stack[k + 4] : 0;
273
- if (horizontal) curveTo(state, stack[k], 0, stack[k + 1], stack[k + 2], extra, stack[k + 3]);
274
- else curveTo(state, 0, stack[k], stack[k + 1], stack[k + 2], stack[k + 3], extra);
275
- 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;
276
306
  horizontal = !horizontal;
277
307
  }
278
308
  stack.length = 0;
@@ -307,25 +337,29 @@ function execute(code, state, context, depth) {
307
337
  }
308
338
  return true;
309
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;
310
344
  function executeEscaped(operator, state) {
311
345
  const stack = state.stack;
312
346
  const startY = state.y;
313
347
  if (operator === ESC_FLEX) {
314
- if (stack.length < 13) return false;
348
+ if (stack.length < FLEX_ARG_COUNT) return false;
315
349
  curveTo(state, stack[0], stack[1], stack[2], stack[3], stack[4], stack[5]);
316
350
  curveTo(state, stack[6], stack[7], stack[8], stack[9], stack[10], stack[11]);
317
351
  stack.length = 0;
318
352
  return true;
319
353
  }
320
354
  if (operator === ESC_HFLEX) {
321
- if (stack.length < 7) return false;
355
+ if (stack.length < HFLEX_ARG_COUNT) return false;
322
356
  curveTo(state, stack[0], 0, stack[1], stack[2], stack[3], 0);
323
357
  curveTo(state, stack[4], 0, stack[5], -stack[2], stack[6], 0);
324
358
  stack.length = 0;
325
359
  return true;
326
360
  }
327
361
  if (operator === ESC_HFLEX1) {
328
- if (stack.length < 9) return false;
362
+ if (stack.length < HFLEX1_ARG_COUNT) return false;
329
363
  curveTo(state, stack[0], stack[1], stack[2], stack[3], stack[4], 0);
330
364
  const dy5 = stack[7];
331
365
  curveTo(state, stack[5], 0, stack[6], dy5, stack[8], startY - (state.y + dy5));
@@ -333,7 +367,7 @@ function executeEscaped(operator, state) {
333
367
  return true;
334
368
  }
335
369
  if (operator === ESC_FLEX1) {
336
- if (stack.length < 11) return false;
370
+ if (stack.length < FLEX1_ARG_COUNT) return false;
337
371
  const startX = state.x;
338
372
  let dx = 0;
339
373
  let dy = 0;
@@ -408,13 +442,7 @@ function computeBounds(glyphId, context) {
408
442
  stems: 0,
409
443
  widthParsed: false,
410
444
  operations: 0,
411
- box: {
412
- minX: Infinity,
413
- minY: Infinity,
414
- maxX: -Infinity,
415
- maxY: -Infinity,
416
- drawn: false
417
- }
445
+ box: new BoundsBox()
418
446
  };
419
447
  if (!execute(code, state, context, 0) || !state.box.drawn) return;
420
448
  return {