@web-ppt/fonts 0.8.0 → 0.9.0-beta.1
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/CHANGELOG.md +33 -42
- package/README.md +25 -2
- package/dist/export-faces.d.ts +40 -0
- package/dist/fault-Wg7mCzGf.js +13 -0
- package/dist/fonts.js +573 -199
- package/dist/glyphs/index.d.ts +1 -1
- package/dist/glyphs-browser.js +112 -76
- package/dist/glyphs-harfbuzz.js +36 -37
- package/dist/glyphs-worker.js +276 -212
- package/dist/glyphs.js +108 -68
- package/dist/index.d.ts +2 -0
- package/dist/load.d.ts +4 -0
- package/dist/provider-B6_T5p3K.js +796 -0
- package/dist/subset/harfbuzz.d.ts +12 -0
- package/dist/subset/index.d.ts +7 -0
- package/dist/subset.js +64 -0
- package/package.json +9 -2
- package/dist/fault-HMYM9DhC.js +0 -16
- package/dist/provider-9-K8y5p4.js +0 -617
|
@@ -0,0 +1,796 @@
|
|
|
1
|
+
import { n as e, r as t, t as n } from "./fault-Wg7mCzGf.js";
|
|
2
|
+
// src/glyphs/permissions.ts
|
|
3
|
+
function r(e, t) {
|
|
4
|
+
if (!t) return e;
|
|
5
|
+
let n = [
|
|
6
|
+
"installable",
|
|
7
|
+
"editable",
|
|
8
|
+
"view-print",
|
|
9
|
+
"restricted"
|
|
10
|
+
];
|
|
11
|
+
if (!n.includes(t.usage) || typeof t.subsetAllowed != "boolean" || typeof t.outlineAllowed != "boolean") throw Error("invalid-font");
|
|
12
|
+
return {
|
|
13
|
+
usage: n[Math.max(n.indexOf(e.usage), n.indexOf(t.usage))],
|
|
14
|
+
subsetAllowed: e.subsetAllowed && t.subsetAllowed,
|
|
15
|
+
outlineAllowed: e.outlineAllowed && t.outlineAllowed
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function i(e, t) {
|
|
19
|
+
let n = e & 15;
|
|
20
|
+
if (t > 5 || n & 1 || t >= 3 && ![
|
|
21
|
+
0,
|
|
22
|
+
2,
|
|
23
|
+
4,
|
|
24
|
+
8
|
|
25
|
+
].includes(n) || t >= 2 && e & 64752) throw Error("invalid-font");
|
|
26
|
+
return {
|
|
27
|
+
usage: n & 8 ? "editable" : n & 4 ? "view-print" : n & 2 ? "restricted" : "installable",
|
|
28
|
+
subsetAllowed: t < 2 || !(e & 256),
|
|
29
|
+
outlineAllowed: t < 2 || !(e & 512)
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function a(e, t) {
|
|
33
|
+
if (!e.outlineAllowed) return "bitmap-only";
|
|
34
|
+
if (e.usage === "restricted") return "embedding-restricted";
|
|
35
|
+
if (e.usage === "view-print" && t !== "view-print") return "preview-print-only";
|
|
36
|
+
}
|
|
37
|
+
// src/glyphs/sfnt.ts
|
|
38
|
+
function o(r) {
|
|
39
|
+
let a = new DataView(r.buffer, r.byteOffset, r.byteLength), o = e;
|
|
40
|
+
r.length < 4 && o();
|
|
41
|
+
let s = a.getUint32(0);
|
|
42
|
+
if ([2001684038, 2001684018].includes(s)) throw new n("needs-container-decoder");
|
|
43
|
+
if (s === 1953784678) throw new n("collection-not-supported");
|
|
44
|
+
(r.length < 12 || ![
|
|
45
|
+
65536,
|
|
46
|
+
1953658213,
|
|
47
|
+
1330926671
|
|
48
|
+
].includes(s)) && o();
|
|
49
|
+
let c = a.getUint16(4), l = 12 + c * 16;
|
|
50
|
+
(!c || c > 256 || l > r.length) && o();
|
|
51
|
+
let u = /* @__PURE__ */ new Map();
|
|
52
|
+
for (let e = 0; e < c; e++) {
|
|
53
|
+
let t = 12 + e * 16, n = String.fromCharCode(...r.subarray(t, t + 4)), i = a.getUint32(t + 8), s = a.getUint32(t + 12);
|
|
54
|
+
(u.has(n) || i < l || i % 4 || i + s > r.length) && o(), u.set(n, {
|
|
55
|
+
offset: i,
|
|
56
|
+
length: s
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
let d = [...u.values()].filter((e) => e.length).sort((e, t) => e.offset - t.offset);
|
|
60
|
+
d.some((e, t) => t > 0 && d[t - 1].offset + d[t - 1].length > e.offset) && o();
|
|
61
|
+
let f = (e, t) => {
|
|
62
|
+
let n = u.get(e);
|
|
63
|
+
return !n || n.length < t ? o() : n.offset;
|
|
64
|
+
};
|
|
65
|
+
if (u.has("fvar")) throw new n("variable-not-supported");
|
|
66
|
+
if (u.has("CFF ") || u.has("CFF2")) throw new n("cff-not-supported");
|
|
67
|
+
if ([
|
|
68
|
+
"COLR",
|
|
69
|
+
"CPAL",
|
|
70
|
+
"CBDT",
|
|
71
|
+
"CBLC",
|
|
72
|
+
"sbix",
|
|
73
|
+
"SVG "
|
|
74
|
+
].some((e) => u.has(e))) throw new n("color-font-not-supported");
|
|
75
|
+
s === 1330926671 && o(), f("glyf", 0), f("loca", 4), f("cmap", 4), f("hmtx", 4);
|
|
76
|
+
let p = f("head", 54), m = f("OS/2", 78), h = f("maxp", 32), g = a.getUint16(m);
|
|
77
|
+
f("OS/2", g === 0 ? 78 : g === 1 ? 86 : g < 5 ? 96 : 100), f("hhea", 36);
|
|
78
|
+
let _ = a.getUint16(p + 18), v = a.getUint16(h + 4), y = a.getUint16(m + 4), b = a.getUint16(m + 8);
|
|
79
|
+
(a.getUint32(p + 12) !== 1594834165 || _ < 16 || _ > 16384 || !v || y < 1 || y > 1e3 || a.getUint32(h) !== 65536) && o();
|
|
80
|
+
let x = f("name", 6), S = u.get("name").length, C = a.getUint16(x + 2), w = a.getUint16(x + 4);
|
|
81
|
+
(6 + C * 12 > S || w < 6 + C * 12 || w > S) && o(), C > 1024 && t();
|
|
82
|
+
let T = [], E = 65536;
|
|
83
|
+
for (let e = 0; e < C; e++) {
|
|
84
|
+
let n = x + 6 + e * 12, i = a.getUint16(n), s = a.getUint16(n + 4), c = a.getUint16(n + 6), l = a.getUint16(n + 8), u = w + a.getUint16(n + 10);
|
|
85
|
+
if (u + l > S && o(), c !== 16 && c !== 1 || ![0, 3].includes(i) || l % 2 || l > 512) continue;
|
|
86
|
+
E -= l, E < 0 && t();
|
|
87
|
+
let d = new TextDecoder("utf-16be", { fatal: !0 }).decode(r.subarray(x + u, x + u + l)).trim();
|
|
88
|
+
d && d.length <= 256 && !/[\u0000-\u001f\u007f]/.test(d) && T.push({
|
|
89
|
+
value: d,
|
|
90
|
+
rank: (c === 16 ? 10 : 0) + (s === 1033 ? 2 : 0)
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
let D = T.sort((e, t) => t.rank - e.rank)[0]?.value;
|
|
94
|
+
return D || o(), {
|
|
95
|
+
tables: u,
|
|
96
|
+
info: {
|
|
97
|
+
sourceFamily: D,
|
|
98
|
+
weight: y,
|
|
99
|
+
italic: !!(a.getUint16(m + 62) & 1),
|
|
100
|
+
format: "ttf-glyf",
|
|
101
|
+
unitsPerEm: _,
|
|
102
|
+
glyphCount: v,
|
|
103
|
+
bbox: [
|
|
104
|
+
36,
|
|
105
|
+
38,
|
|
106
|
+
40,
|
|
107
|
+
42
|
|
108
|
+
].map((e) => a.getInt16(p + e)),
|
|
109
|
+
fsType: b,
|
|
110
|
+
os2Version: a.getUint16(m),
|
|
111
|
+
embedding: i(b, a.getUint16(m)),
|
|
112
|
+
byteLength: r.length
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
// src/glyphs/glyph-data.ts
|
|
117
|
+
async function s(n, r, i, a) {
|
|
118
|
+
let o = i.length - 1, s = Array.from({ length: o }, () => []);
|
|
119
|
+
for (let c = 0; c < o; c++) {
|
|
120
|
+
let l = a();
|
|
121
|
+
l && await l;
|
|
122
|
+
let u = r + i[c], d = r + i[c + 1];
|
|
123
|
+
if (u === d) continue;
|
|
124
|
+
let f = u + 10, p = (t) => {
|
|
125
|
+
f + t > d && e();
|
|
126
|
+
}, m = () => {
|
|
127
|
+
p(2);
|
|
128
|
+
let e = n.getUint16(f);
|
|
129
|
+
return f += 2, e;
|
|
130
|
+
}, h = () => (p(1), n.getUint8(f++)), g = n.getInt16(u);
|
|
131
|
+
if ((n.getInt16(u + 2) > n.getInt16(u + 6) || n.getInt16(u + 4) > n.getInt16(u + 8)) && e(), g >= 0) {
|
|
132
|
+
let t = -1;
|
|
133
|
+
for (let n = 0; n < g; n++) {
|
|
134
|
+
let n = m();
|
|
135
|
+
n <= t && e(), t = n;
|
|
136
|
+
}
|
|
137
|
+
if (!g && f === d) continue;
|
|
138
|
+
let n = m();
|
|
139
|
+
p(n), f += n;
|
|
140
|
+
let r = t + 1, i = 0;
|
|
141
|
+
for (let t = 0; t < r;) {
|
|
142
|
+
let n = h(), a = n & 8 ? h() + 1 : 1;
|
|
143
|
+
(n & 128 || t + a > r) && e(), i += a * ((n & 2 ? 1 : n & 16 ? 0 : 2) + (n & 4 ? 1 : n & 32 ? 0 : 2)), t += a;
|
|
144
|
+
}
|
|
145
|
+
p(i);
|
|
146
|
+
} else {
|
|
147
|
+
let n = !0, r = !1;
|
|
148
|
+
for (; n;) {
|
|
149
|
+
let i = m(), a = m();
|
|
150
|
+
(a >= o || i & 57360 || (i & 6144) == 6144 || !s[c].length && !(i & 2)) && e(), [
|
|
151
|
+
8,
|
|
152
|
+
64,
|
|
153
|
+
128
|
|
154
|
+
].filter((e) => i & e).length > 1 && e();
|
|
155
|
+
let l = (i & 1 ? 4 : 2) + (i & 8 ? 2 : i & 64 ? 4 : i & 128 ? 8 : 0);
|
|
156
|
+
p(l), f += l, s[c].push(a), s[c].length > 4096 && t(), r ||= !!(i & 256), n = !!(i & 32);
|
|
157
|
+
}
|
|
158
|
+
r && p(m());
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
let c = new Uint8Array(o), l = new Uint8Array(o), u = new Uint32Array(o), d = (n, r) => {
|
|
162
|
+
if (c[n] === 1 && e(), r > 32 && t(), c[n] === 2) return;
|
|
163
|
+
c[n] = 1;
|
|
164
|
+
let i = 0, a = 1;
|
|
165
|
+
for (let e of s[n]) d(e, r + 1), i = Math.max(i, l[e] + 1), a += u[e], (i > 32 || a > 16384) && t();
|
|
166
|
+
l[n] = i, u[n] = a, c[n] = 2;
|
|
167
|
+
};
|
|
168
|
+
for (let e = 0; e < o; e++) {
|
|
169
|
+
let t = a();
|
|
170
|
+
t && await t, d(e, 0);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// src/glyphs/validate-glyphs.ts
|
|
174
|
+
async function c(e, t, n) {
|
|
175
|
+
let r = new DataView(e.buffer, e.byteOffset, e.byteLength), { tables: i, info: a } = t, o = i.get("head"), c = i.get("loca"), l = i.get("glyf"), u = i.get("hhea"), d = i.get("hmtx"), f = r.getInt16(o.offset + 50), p = f === 0 ? 2 : 4, m = r.getUint16(u.offset + 34);
|
|
176
|
+
if (![0, 1].includes(f) || c.length < (a.glyphCount + 1) * p || !m || m > a.glyphCount || d.length < m * 4 + (a.glyphCount - m) * 2) throw Error("invalid-font");
|
|
177
|
+
let h = 0, g = new Uint32Array(a.glyphCount + 1);
|
|
178
|
+
for (let e = 0; e <= a.glyphCount; e++) {
|
|
179
|
+
let t = p === 2 ? r.getUint16(c.offset + e * 2) * 2 : r.getUint32(c.offset + e * 4);
|
|
180
|
+
if (t < h || t > l.length || e > 0 && t !== h && t - h < 10) throw Error("invalid-font");
|
|
181
|
+
h = g[e] = t;
|
|
182
|
+
}
|
|
183
|
+
await s(r, l.offset, g, n);
|
|
184
|
+
}
|
|
185
|
+
// src/glyphs/validate-cmap.ts
|
|
186
|
+
async function l(r, i, a) {
|
|
187
|
+
let o = i.tables.get("cmap"), s = new DataView(r.buffer, r.byteOffset + o.offset, o.length), c = s.getUint16(2), l = 4 + c * 8;
|
|
188
|
+
(s.getUint16(0) || !c || l > s.byteLength) && e(), c > 256 && t();
|
|
189
|
+
let u = !1, d = 2e6, f = /* @__PURE__ */ new Set(), p = (t) => {
|
|
190
|
+
t >= i.info.glyphCount && e();
|
|
191
|
+
}, m = (e) => {
|
|
192
|
+
d -= e, d < 0 && t();
|
|
193
|
+
};
|
|
194
|
+
for (let t = 0; t < c; t++) {
|
|
195
|
+
let i = a();
|
|
196
|
+
i && await i;
|
|
197
|
+
let c = 4 + t * 8, d = s.getUint16(c), h = s.getUint16(c + 2), g = s.getUint32(c + 4);
|
|
198
|
+
(g < l || g + 6 > s.byteLength) && e();
|
|
199
|
+
let _ = s.getUint16(g);
|
|
200
|
+
if ((d === 0 && h !== 5 || d === 3 && [1, 10].includes(h)) && [
|
|
201
|
+
4,
|
|
202
|
+
6,
|
|
203
|
+
10,
|
|
204
|
+
12,
|
|
205
|
+
13
|
|
206
|
+
].includes(_) && (u = !0), ![
|
|
207
|
+
0,
|
|
208
|
+
4,
|
|
209
|
+
6,
|
|
210
|
+
10,
|
|
211
|
+
12,
|
|
212
|
+
13,
|
|
213
|
+
14
|
|
214
|
+
].includes(_)) throw new n("cmap-not-supported");
|
|
215
|
+
_ >= 10 && _ !== 14 && g + 12 > s.byteLength && e();
|
|
216
|
+
let v = _ === 14 ? s.getUint32(g + 2) : _ >= 10 ? s.getUint32(g + 4) : s.getUint16(g + 2);
|
|
217
|
+
(v < 6 || g + v > s.byteLength) && e();
|
|
218
|
+
let y = new DataView(r.buffer, r.byteOffset + o.offset + g, v), b = (t, n) => {
|
|
219
|
+
(t < 0 || t + n > v) && e();
|
|
220
|
+
};
|
|
221
|
+
if (d !== 1 && _ !== 14 && (_ >= 10 ? y.getUint32(8) : y.getUint16(4)) && e(), !f.has(g)) {
|
|
222
|
+
if (f.add(g), _ === 0) {
|
|
223
|
+
b(6, 256), m(256);
|
|
224
|
+
for (let e = 0; e < 256; e++) p(y.getUint8(6 + e));
|
|
225
|
+
} else if (_ === 4) {
|
|
226
|
+
b(0, 16);
|
|
227
|
+
let t = y.getUint16(6), n = t / 2, r = 16 + n * 8;
|
|
228
|
+
(!t || t % 2) && e(), b(0, r), y.getUint16(14 + n * 2) && e();
|
|
229
|
+
let i = -1;
|
|
230
|
+
for (let t = 0; t < n; t++) {
|
|
231
|
+
let o = a();
|
|
232
|
+
o && await o;
|
|
233
|
+
let s = y.getUint16(14 + t * 2), c = y.getUint16(16 + n * 2 + t * 2), l = y.getInt16(16 + n * 4 + t * 2), u = 16 + n * 6 + t * 2, d = y.getUint16(u);
|
|
234
|
+
(c > s || c <= i || d % 2 || t === n - 1 && (c !== 65535 || s !== 65535)) && e(), i = s, m(s - c + 1), d && u + d < r && e(), d && b(u + d, (s - c + 1) * 2);
|
|
235
|
+
for (let e = c; e <= s; e++) {
|
|
236
|
+
let t = d ? y.getUint16(u + d + (e - c) * 2) : e;
|
|
237
|
+
p(d && !t ? 0 : t + l & 65535);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
} else if (_ === 6 || _ === 10) {
|
|
241
|
+
let t = _ === 10, n = t ? 20 : 10;
|
|
242
|
+
b(0, n);
|
|
243
|
+
let r = t ? y.getUint32(12) : y.getUint16(6), i = t ? y.getUint32(16) : y.getUint16(8);
|
|
244
|
+
(r + i > (t ? 1114112 : 65536) || t && y.getUint16(2)) && e(), b(n, i * 2), m(i);
|
|
245
|
+
for (let e = 0; e < i; e++) {
|
|
246
|
+
if (e % 256 == 0) {
|
|
247
|
+
let e = a();
|
|
248
|
+
e && await e;
|
|
249
|
+
}
|
|
250
|
+
p(y.getUint16(n + e * 2));
|
|
251
|
+
}
|
|
252
|
+
} else if (_ === 12 || _ === 13) {
|
|
253
|
+
b(0, 16);
|
|
254
|
+
let t = y.getUint32(12);
|
|
255
|
+
y.getUint16(2) && e(), b(16, t * 12), m(t);
|
|
256
|
+
let n = -1;
|
|
257
|
+
for (let r = 0; r < t; r++) {
|
|
258
|
+
if (r % 256 == 0) {
|
|
259
|
+
let e = a();
|
|
260
|
+
e && await e;
|
|
261
|
+
}
|
|
262
|
+
let t = 16 + r * 12, i = y.getUint32(t), o = y.getUint32(t + 4), s = y.getUint32(t + 8);
|
|
263
|
+
(i > o || i <= n || o > 1114111) && e(), p(s), p(s + (_ === 12 ? o - i : 0)), n = o;
|
|
264
|
+
}
|
|
265
|
+
} else {
|
|
266
|
+
b(0, 10);
|
|
267
|
+
let t = y.getUint32(6), n = 10 + t * 11;
|
|
268
|
+
b(0, n), m(t);
|
|
269
|
+
let r = (e) => y.getUint16(e) * 256 + y.getUint8(e + 2), i = -1;
|
|
270
|
+
for (let o = 0; o < t; o++) {
|
|
271
|
+
let t = a();
|
|
272
|
+
t && await t;
|
|
273
|
+
let s = 10 + o * 11, c = r(s);
|
|
274
|
+
(c <= i || !(c >= 65024 && c <= 65039 || c >= 917760 && c <= 917999)) && e(), i = c;
|
|
275
|
+
for (let t of [0, 1]) {
|
|
276
|
+
let i = y.getUint32(s + 3 + t * 4);
|
|
277
|
+
if (!i) continue;
|
|
278
|
+
i < n && e(), b(i, 4);
|
|
279
|
+
let o = y.getUint32(i), c = t ? 5 : 4;
|
|
280
|
+
b(i + 4, o * c), m(o);
|
|
281
|
+
let l = -1;
|
|
282
|
+
for (let n = 0; n < o; n++) {
|
|
283
|
+
if (n % 256 == 0) {
|
|
284
|
+
let e = a();
|
|
285
|
+
e && await e;
|
|
286
|
+
}
|
|
287
|
+
let o = i + 4 + n * c, s = r(o), u = s + (t ? 0 : y.getUint8(o + 3));
|
|
288
|
+
(s <= l || u > 1114111 || s <= 57343 && u >= 55296) && e(), t && p(y.getUint16(o + 3)), l = u;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
if (!u) throw new n("cmap-not-supported");
|
|
296
|
+
}
|
|
297
|
+
// src/glyphs/text-scripts.ts
|
|
298
|
+
function u(e, t) {
|
|
299
|
+
let r = e.codePointAt(0), i = {
|
|
300
|
+
start: t,
|
|
301
|
+
end: t + e.length
|
|
302
|
+
};
|
|
303
|
+
if (r >= 55296 && r <= 57343 || /[\u0000-\u001f\u007f-\u009f]/u.test(e)) throw new n("invalid-text", void 0, i);
|
|
304
|
+
if (/[\u061c\u200e\u200f\u202a-\u202e\u2066-\u2069]/u.test(e)) throw new n("unsupported-direction", void 0, i);
|
|
305
|
+
if (/\p{Script=Latin}/u.test(e)) return "Latn";
|
|
306
|
+
if (/\p{Script=Han}/u.test(e)) return "Hani";
|
|
307
|
+
if (!/[\p{Script=Common}\p{Script=Inherited}]/u.test(e)) throw new n("unsupported-script", void 0, i);
|
|
308
|
+
}
|
|
309
|
+
function d(e, t) {
|
|
310
|
+
if (t.direction !== "ltr") return {
|
|
311
|
+
ok: !1,
|
|
312
|
+
reason: "unsupported-direction"
|
|
313
|
+
};
|
|
314
|
+
if (e.length > 1e5) return {
|
|
315
|
+
ok: !1,
|
|
316
|
+
reason: "resource-limit"
|
|
317
|
+
};
|
|
318
|
+
let r = [];
|
|
319
|
+
try {
|
|
320
|
+
let n = 0;
|
|
321
|
+
for (let t of e) r.push({
|
|
322
|
+
start: n,
|
|
323
|
+
script: u(t, n)
|
|
324
|
+
}), n += t.length;
|
|
325
|
+
let i = [], a = 0, o = r.find((e) => e.script)?.script ?? "Latn", s = (n) => {
|
|
326
|
+
n > a && i.push({
|
|
327
|
+
start: a,
|
|
328
|
+
end: n,
|
|
329
|
+
text: e.slice(a, n),
|
|
330
|
+
script: o,
|
|
331
|
+
...t
|
|
332
|
+
});
|
|
333
|
+
};
|
|
334
|
+
for (let e of r) e.script && e.script !== o && (s(e.start), a = e.start, o = e.script);
|
|
335
|
+
return s(e.length), {
|
|
336
|
+
ok: !0,
|
|
337
|
+
value: i
|
|
338
|
+
};
|
|
339
|
+
} catch (e) {
|
|
340
|
+
return e instanceof n ? {
|
|
341
|
+
ok: !1,
|
|
342
|
+
reason: e.reason,
|
|
343
|
+
range: e.range
|
|
344
|
+
} : {
|
|
345
|
+
ok: !1,
|
|
346
|
+
reason: "invalid-text"
|
|
347
|
+
};
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
// src/glyphs/shape-run.ts
|
|
351
|
+
function f(e, t, r) {
|
|
352
|
+
if (t.direction !== "ltr") throw new n("unsupported-direction");
|
|
353
|
+
if (!["Latn", "Hani"].includes(t.script)) throw new n("unsupported-script");
|
|
354
|
+
if (e.length > r) throw new n("resource-limit");
|
|
355
|
+
if (typeof t.language != "string" || !/^[a-zA-Z]{2,8}(?:-[a-zA-Z0-9]{1,8})*$/.test(t.language)) throw new n("invalid-text");
|
|
356
|
+
let i = 0;
|
|
357
|
+
for (let r of e) {
|
|
358
|
+
let e = u(r, i);
|
|
359
|
+
if (e && e !== t.script) throw new n("script-mismatch", void 0, {
|
|
360
|
+
start: i,
|
|
361
|
+
end: i + r.length
|
|
362
|
+
});
|
|
363
|
+
i += r.length;
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
function p(e, t, r, i) {
|
|
367
|
+
let a = () => {
|
|
368
|
+
throw new n("shaper-failed");
|
|
369
|
+
};
|
|
370
|
+
if (i.length > Math.max(256, t.length * 32)) throw new n("resource-limit");
|
|
371
|
+
(t.length && !i.length || !t.length && i.length) && a();
|
|
372
|
+
let o = [], s = -1, c = 0, l = 0, u = i.map((n, r) => {
|
|
373
|
+
let { id: u, cluster: d, xOffset: f, yOffset: p } = n;
|
|
374
|
+
if ((!Number.isInteger(u) || u < 0 || u >= e.glyphCount || !Number.isInteger(d) || d < s || d >= t.length || r === 0 && d !== 0 || d > 0 && /[\udc00-\udfff]/u.test(t[d]) || ![
|
|
375
|
+
n.xAdvance,
|
|
376
|
+
n.yAdvance,
|
|
377
|
+
f,
|
|
378
|
+
p
|
|
379
|
+
].every((e) => Number.isFinite(e) && Math.abs(e) <= 1e9)) && a(), d !== s) {
|
|
380
|
+
let e = o[o.length - 1];
|
|
381
|
+
e && (e.end = d, e.text = t.slice(e.start, d), e.glyphEnd = r), o.push({
|
|
382
|
+
start: d,
|
|
383
|
+
end: t.length,
|
|
384
|
+
text: "",
|
|
385
|
+
glyphStart: r,
|
|
386
|
+
glyphEnd: i.length
|
|
387
|
+
}), s = d;
|
|
388
|
+
}
|
|
389
|
+
return c += n.xAdvance, l += n.yAdvance, {
|
|
390
|
+
id: u,
|
|
391
|
+
xAdvance: n.xAdvance,
|
|
392
|
+
yAdvance: n.yAdvance,
|
|
393
|
+
xOffset: f,
|
|
394
|
+
yOffset: p
|
|
395
|
+
};
|
|
396
|
+
}), d = o[o.length - 1];
|
|
397
|
+
d && (d.text = t.slice(d.start));
|
|
398
|
+
let f = o.filter((e) => u.slice(e.glyphStart, e.glyphEnd).some((e) => e.id === 0)).map(({ start: e, end: t, text: n }) => ({
|
|
399
|
+
start: e,
|
|
400
|
+
end: t,
|
|
401
|
+
text: n
|
|
402
|
+
}));
|
|
403
|
+
return f.length ? {
|
|
404
|
+
ok: !1,
|
|
405
|
+
reason: "missing-glyphs",
|
|
406
|
+
faceId: e.id,
|
|
407
|
+
missing: f
|
|
408
|
+
} : {
|
|
409
|
+
ok: !0,
|
|
410
|
+
value: {
|
|
411
|
+
faceId: e.id,
|
|
412
|
+
text: t,
|
|
413
|
+
script: r.script,
|
|
414
|
+
direction: "ltr",
|
|
415
|
+
language: r.language,
|
|
416
|
+
unitsPerEm: e.unitsPerEm,
|
|
417
|
+
xAdvance: c,
|
|
418
|
+
yAdvance: l,
|
|
419
|
+
glyphs: u,
|
|
420
|
+
clusters: o
|
|
421
|
+
}
|
|
422
|
+
};
|
|
423
|
+
}
|
|
424
|
+
// src/glyphs/shaping.ts
|
|
425
|
+
function m(e, t) {
|
|
426
|
+
return new Promise((r, i) => {
|
|
427
|
+
let a = () => {
|
|
428
|
+
t.removeEventListener("abort", a), i(new n("aborted"));
|
|
429
|
+
};
|
|
430
|
+
t.aborted ? a() : t.addEventListener("abort", a, { once: !0 }), e.then(r, i).finally(() => t.removeEventListener("abort", a));
|
|
431
|
+
});
|
|
432
|
+
}
|
|
433
|
+
function h(e, t) {
|
|
434
|
+
let r = new AbortController(), i = /* @__PURE__ */ new Map(), a = /* @__PURE__ */ new Set(), o = /* @__PURE__ */ new Map(), s, c, l = () => e.loadShaper ? s ??= Promise.resolve().then(() => {
|
|
435
|
+
if (r.signal.aborted) throw new n("provider-disposed");
|
|
436
|
+
return e.loadShaper(r.signal);
|
|
437
|
+
}).then((e) => {
|
|
438
|
+
if (r.signal.aborted) throw e.dispose(), new n("provider-disposed");
|
|
439
|
+
return c = e, e;
|
|
440
|
+
}).catch((e) => {
|
|
441
|
+
throw s = void 0, e;
|
|
442
|
+
}) : Promise.reject(new n("shaper-unavailable")), u = async (e, s, c, u) => {
|
|
443
|
+
if (r.signal.aborted) return {
|
|
444
|
+
ok: !1,
|
|
445
|
+
reason: "provider-disposed",
|
|
446
|
+
faceId: e
|
|
447
|
+
};
|
|
448
|
+
let d = new AbortController(), f = () => d.abort();
|
|
449
|
+
o.has(e) || o.set(e, /* @__PURE__ */ new Set()), o.get(e).add(d), r.signal.addEventListener("abort", f, { once: !0 }), s.signal?.addEventListener("abort", f, { once: !0 }), s.signal?.aborted && f();
|
|
450
|
+
try {
|
|
451
|
+
if (d.signal.aborted) throw new n("aborted");
|
|
452
|
+
let o = await t(e, s);
|
|
453
|
+
if (!o.ok) return o;
|
|
454
|
+
if (a.has(e)) throw new n("face-unavailable");
|
|
455
|
+
if (d.signal.aborted) throw new n("aborted");
|
|
456
|
+
c(o.value);
|
|
457
|
+
let f = i.get(e);
|
|
458
|
+
if (!f) {
|
|
459
|
+
let t = new AbortController(), s;
|
|
460
|
+
s = {
|
|
461
|
+
pending: m(l(), t.signal).then((r) => {
|
|
462
|
+
if (a.has(e)) throw new n("face-unavailable");
|
|
463
|
+
return r.open({
|
|
464
|
+
...o.value,
|
|
465
|
+
bytes: o.value.bytes.slice()
|
|
466
|
+
}, t.signal);
|
|
467
|
+
}).then((t) => {
|
|
468
|
+
if (r.signal.aborted || a.has(e)) throw t.dispose(), new n(r.signal.aborted ? "provider-disposed" : "face-unavailable");
|
|
469
|
+
return s.face = t, t;
|
|
470
|
+
}).catch((t) => {
|
|
471
|
+
throw i.delete(e), t;
|
|
472
|
+
}),
|
|
473
|
+
controller: t
|
|
474
|
+
}, i.set(e, s), f = s;
|
|
475
|
+
}
|
|
476
|
+
let p = await m(f.pending, d.signal);
|
|
477
|
+
return await m(Promise.resolve().then(() => {
|
|
478
|
+
if (d.signal.aborted) throw new n("aborted");
|
|
479
|
+
return u(p, o.value, d.signal);
|
|
480
|
+
}), d.signal);
|
|
481
|
+
} catch (t) {
|
|
482
|
+
return {
|
|
483
|
+
ok: !1,
|
|
484
|
+
faceId: e,
|
|
485
|
+
reason: r.signal.aborted ? "provider-disposed" : a.has(e) ? "face-unavailable" : d.signal.aborted ? "aborted" : t instanceof n ? t.reason : "shaper-failed",
|
|
486
|
+
...t instanceof n && t.missing ? { missing: t.missing } : {},
|
|
487
|
+
...t instanceof n && t.range ? { range: t.range } : {}
|
|
488
|
+
};
|
|
489
|
+
} finally {
|
|
490
|
+
r.signal.removeEventListener("abort", f), s.signal?.removeEventListener("abort", f), o.get(e)?.delete(d), o.get(e)?.size || o.delete(e);
|
|
491
|
+
}
|
|
492
|
+
};
|
|
493
|
+
return {
|
|
494
|
+
release(e) {
|
|
495
|
+
a.add(e);
|
|
496
|
+
let t = i.get(e);
|
|
497
|
+
i.delete(e), t?.face?.dispose(), t?.controller.abort();
|
|
498
|
+
for (let t of o.get(e) ?? []) t.abort();
|
|
499
|
+
},
|
|
500
|
+
shape(t, n, r) {
|
|
501
|
+
return u(t, r, () => f(n, r, e.limits?.maxTextLength ?? 1e5), async (e, t, i) => {
|
|
502
|
+
let a = n ? await e.shape(n, {
|
|
503
|
+
...r,
|
|
504
|
+
signal: i
|
|
505
|
+
}) : [];
|
|
506
|
+
return p(t.info, n, r, a);
|
|
507
|
+
});
|
|
508
|
+
},
|
|
509
|
+
outline(e, t, r) {
|
|
510
|
+
return u(e, r, (e) => {
|
|
511
|
+
if (!Number.isInteger(t) || t < 0 || t >= e.info.glyphCount) throw new n("invalid-glyph-id");
|
|
512
|
+
}, async (e, i, a) => {
|
|
513
|
+
let o = await e.outline(t, {
|
|
514
|
+
...r,
|
|
515
|
+
signal: a
|
|
516
|
+
});
|
|
517
|
+
if (o.length > 4e6) throw new n("resource-limit");
|
|
518
|
+
if (!/^[MmLlHhVvCcSsQqTtAaZz\d\s.,+eE-]*$/.test(o)) throw new n("shaper-failed");
|
|
519
|
+
return {
|
|
520
|
+
ok: !0,
|
|
521
|
+
value: o
|
|
522
|
+
};
|
|
523
|
+
});
|
|
524
|
+
},
|
|
525
|
+
dispose() {
|
|
526
|
+
if (!r.signal.aborted) {
|
|
527
|
+
c?.dispose(), c = void 0, r.abort();
|
|
528
|
+
for (let e of i.values()) e.controller.abort(), e.pending.then((e) => e.dispose(), () => {});
|
|
529
|
+
i.clear();
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
};
|
|
533
|
+
}
|
|
534
|
+
// src/glyphs/validation-budget.ts
|
|
535
|
+
function g(e = {}) {
|
|
536
|
+
let t = {
|
|
537
|
+
maxFontBytes: 33554432,
|
|
538
|
+
maxTotalFontBytes: 67108864,
|
|
539
|
+
maxFaces: 64,
|
|
540
|
+
maxGlyphs: 65535,
|
|
541
|
+
maxTextLength: 1e5,
|
|
542
|
+
...e
|
|
543
|
+
};
|
|
544
|
+
if (!Object.values(t).every((e) => Number.isSafeInteger(e) && e > 0)) throw RangeError("Invalid font resource budget");
|
|
545
|
+
return t;
|
|
546
|
+
}
|
|
547
|
+
function _(e) {
|
|
548
|
+
let t = 0;
|
|
549
|
+
return () => {
|
|
550
|
+
if (e(), !(Date.now() < t)) return new Promise((e) => setTimeout(e, 0)).then(() => {
|
|
551
|
+
e(), t = Date.now() + 8;
|
|
552
|
+
});
|
|
553
|
+
};
|
|
554
|
+
}
|
|
555
|
+
// src/glyphs/eot-container.ts
|
|
556
|
+
function v(e) {
|
|
557
|
+
if (e.length < 36 || e[34] !== 76 || e[35] !== 80) return !1;
|
|
558
|
+
let t = new DataView(e.buffer, e.byteOffset, e.byteLength).getUint32(0);
|
|
559
|
+
return ![
|
|
560
|
+
65536,
|
|
561
|
+
1953658213,
|
|
562
|
+
1330926671,
|
|
563
|
+
1953784678,
|
|
564
|
+
2001684038,
|
|
565
|
+
2001684018
|
|
566
|
+
].includes(t);
|
|
567
|
+
}
|
|
568
|
+
function y(t) {
|
|
569
|
+
let r = new DataView(t.buffer, t.byteOffset, t.byteLength);
|
|
570
|
+
(t.length < 96 || !v(t) || r.getUint32(0, !0) !== t.length) && e();
|
|
571
|
+
let a = r.getUint32(8, !0), o = r.getUint32(12, !0), s = r.getUint32(4, !0);
|
|
572
|
+
if (![
|
|
573
|
+
65536,
|
|
574
|
+
131073,
|
|
575
|
+
131074
|
|
576
|
+
].includes(a) || o & -268435702) throw new n("eot-feature-not-supported");
|
|
577
|
+
(!s || s > t.length - 96) && e();
|
|
578
|
+
let c = t.length - s, l = 80, u = (t) => {
|
|
579
|
+
l + t > c && e();
|
|
580
|
+
}, d = () => {
|
|
581
|
+
u(2);
|
|
582
|
+
let e = r.getUint16(l, !0);
|
|
583
|
+
return l += 2, e;
|
|
584
|
+
}, f = () => {
|
|
585
|
+
u(4);
|
|
586
|
+
let e = r.getUint32(l, !0);
|
|
587
|
+
return l += 4, e;
|
|
588
|
+
}, p = () => {
|
|
589
|
+
d() && e();
|
|
590
|
+
let n = d();
|
|
591
|
+
n % 2 && e(), u(n);
|
|
592
|
+
let r = new TextDecoder("utf-16le", { fatal: !0 }).decode(t.subarray(l, l + n));
|
|
593
|
+
return l += n, r;
|
|
594
|
+
};
|
|
595
|
+
for (let t = 64; t < 80; t += 4) r.getUint32(t, !0) && e();
|
|
596
|
+
for (let e = 0; e < 4; e++) p();
|
|
597
|
+
if (a !== 65536) {
|
|
598
|
+
if (p().replace(/\0/g, "")) throw new n("eot-root-restricted");
|
|
599
|
+
if (a === 131074) {
|
|
600
|
+
let t = f();
|
|
601
|
+
f(), t !== 1346851650 && e(), d() && e();
|
|
602
|
+
let r = d();
|
|
603
|
+
u(r), l += r;
|
|
604
|
+
let i = f(), a = f();
|
|
605
|
+
if (u(a), l += a, r || i || a) throw new n("eot-feature-not-supported");
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
if (l !== c && e(), o & 32) throw new n("eot-feature-not-supported");
|
|
609
|
+
let m = i(r.getUint16(32, !0), 2);
|
|
610
|
+
if (o & 1 && !m.subsetAllowed) throw new n("subset-not-permitted");
|
|
611
|
+
return {
|
|
612
|
+
offset: c,
|
|
613
|
+
size: s,
|
|
614
|
+
flags: o,
|
|
615
|
+
rights: m
|
|
616
|
+
};
|
|
617
|
+
}
|
|
618
|
+
function b(e, t) {
|
|
619
|
+
let n = e.slice(t.offset);
|
|
620
|
+
if (t.flags & 268435456) for (let e = 0; e < n.length; e++) n[e] ^= 80;
|
|
621
|
+
return n;
|
|
622
|
+
}
|
|
623
|
+
// src/glyphs/provider.ts
|
|
624
|
+
function x(e = {}) {
|
|
625
|
+
let t = !1, i = 0, s = new AbortController(), u = e.decodeEot, d = g(e.limits), f = /* @__PURE__ */ new Set(), p = /* @__PURE__ */ new Set(), x = /* @__PURE__ */ new Map(), S = (e) => ({
|
|
626
|
+
...e,
|
|
627
|
+
bbox: [...e.bbox],
|
|
628
|
+
embedding: { ...e.embedding }
|
|
629
|
+
}), C = (e, n) => t ? {
|
|
630
|
+
ok: !1,
|
|
631
|
+
reason: "provider-disposed",
|
|
632
|
+
faceId: n
|
|
633
|
+
} : e.signal?.aborted ? {
|
|
634
|
+
ok: !1,
|
|
635
|
+
reason: "aborted",
|
|
636
|
+
faceId: n
|
|
637
|
+
} : void 0, w = async (e, t) => {
|
|
638
|
+
let n = C(t, e);
|
|
639
|
+
if (n) return n;
|
|
640
|
+
let r = x.get(e), i = r && a(r.info.embedding, t.purpose);
|
|
641
|
+
return i ? {
|
|
642
|
+
ok: !1,
|
|
643
|
+
reason: i,
|
|
644
|
+
faceId: e
|
|
645
|
+
} : r ? {
|
|
646
|
+
ok: !0,
|
|
647
|
+
value: {
|
|
648
|
+
bytes: r.bytes,
|
|
649
|
+
info: S(r.info)
|
|
650
|
+
}
|
|
651
|
+
} : {
|
|
652
|
+
ok: !1,
|
|
653
|
+
reason: "face-unavailable",
|
|
654
|
+
faceId: e
|
|
655
|
+
};
|
|
656
|
+
}, T = h({
|
|
657
|
+
...e,
|
|
658
|
+
limits: d
|
|
659
|
+
}, w);
|
|
660
|
+
return {
|
|
661
|
+
async register(e, h) {
|
|
662
|
+
e = {
|
|
663
|
+
...e,
|
|
664
|
+
restrictions: e.restrictions && { ...e.restrictions }
|
|
665
|
+
}, h = { ...h };
|
|
666
|
+
let g = C(h, e.id);
|
|
667
|
+
if (g) return g;
|
|
668
|
+
let w = (t) => ({
|
|
669
|
+
ok: !1,
|
|
670
|
+
reason: t,
|
|
671
|
+
faceId: e.id
|
|
672
|
+
});
|
|
673
|
+
if (!e.bytes?.length) return w("font-bytes-unavailable");
|
|
674
|
+
if (!e.id || e.id.length > 256) return w("invalid-font");
|
|
675
|
+
if (![
|
|
676
|
+
"explicit",
|
|
677
|
+
"embedded",
|
|
678
|
+
"substitute"
|
|
679
|
+
].includes(e.origin) || !["edit", "view-print"].includes(h.purpose) || e.family !== void 0 && (!e.family.trim() || e.family.length > 256 || /[\u0000-\u001f\u007f]/.test(e.family))) return w("invalid-request");
|
|
680
|
+
if (x.has(e.id) || f.has(e.id) || p.has(e.id)) return w("duplicate-face-id");
|
|
681
|
+
let T = e.bytes.length, E = T + (v(e.bytes) ? d.maxFontBytes : 0), D = [...x.values()].reduce((e, t) => e + t.bytes.length, 0);
|
|
682
|
+
if (T > d.maxFontBytes || D + i + E > d.maxTotalFontBytes || x.size + f.size >= d.maxFaces) return w("resource-limit");
|
|
683
|
+
f.add(e.id), i += E;
|
|
684
|
+
let O = new AbortController(), k = () => O.abort();
|
|
685
|
+
s.signal.addEventListener("abort", k, { once: !0 }), h.signal?.addEventListener("abort", k, { once: !0 });
|
|
686
|
+
try {
|
|
687
|
+
let i = new Uint8Array(e.bytes), s = _(() => {
|
|
688
|
+
let e = C(h);
|
|
689
|
+
if (e) throw new n(e.reason);
|
|
690
|
+
});
|
|
691
|
+
await s();
|
|
692
|
+
let f = v(i) ? y(i) : void 0;
|
|
693
|
+
if (f) {
|
|
694
|
+
let e = a(f.rights, h.purpose);
|
|
695
|
+
if (e) return w(e);
|
|
696
|
+
if (f.flags & 4) {
|
|
697
|
+
if (!u) return w("decoder-unavailable");
|
|
698
|
+
let e;
|
|
699
|
+
try {
|
|
700
|
+
e = await m(Promise.resolve().then(() => {
|
|
701
|
+
if (O.signal.aborted) throw new n("aborted");
|
|
702
|
+
return u(i, {
|
|
703
|
+
signal: O.signal,
|
|
704
|
+
maxOutputBytes: d.maxFontBytes
|
|
705
|
+
});
|
|
706
|
+
}), O.signal);
|
|
707
|
+
} catch (e) {
|
|
708
|
+
return w(t ? "provider-disposed" : O.signal.aborted ? "aborted" : e instanceof n ? e.reason : "decode-failed");
|
|
709
|
+
}
|
|
710
|
+
if (!e?.length) return w("decode-failed");
|
|
711
|
+
if (e.length > d.maxFontBytes) return w("resource-limit");
|
|
712
|
+
i = new Uint8Array(e);
|
|
713
|
+
} else i = b(i, f);
|
|
714
|
+
}
|
|
715
|
+
let p = o(i);
|
|
716
|
+
if (p.info.embedding = r(r(p.info.embedding, f?.rights), e.restrictions), f && f.flags & 1 && !p.info.embedding.subsetAllowed) return w("subset-not-permitted");
|
|
717
|
+
if (p.info.glyphCount > d.maxGlyphs) return w("resource-limit");
|
|
718
|
+
let g = a(p.info.embedding, h.purpose);
|
|
719
|
+
if (g) return w(g);
|
|
720
|
+
await c(i, p, s), await l(i, p, s);
|
|
721
|
+
let T = C(h, e.id);
|
|
722
|
+
if (T) return T;
|
|
723
|
+
let E = {
|
|
724
|
+
...p.info,
|
|
725
|
+
id: e.id,
|
|
726
|
+
family: e.family ?? p.info.sourceFamily,
|
|
727
|
+
origin: e.origin,
|
|
728
|
+
sourceLabel: e.sourceLabel,
|
|
729
|
+
embeddingEvidence: e.embeddingEvidence
|
|
730
|
+
};
|
|
731
|
+
return x.set(e.id, {
|
|
732
|
+
info: E,
|
|
733
|
+
bytes: i
|
|
734
|
+
}), {
|
|
735
|
+
ok: !0,
|
|
736
|
+
value: S(E)
|
|
737
|
+
};
|
|
738
|
+
} catch (e) {
|
|
739
|
+
return w(e instanceof n ? e.reason : "invalid-font");
|
|
740
|
+
} finally {
|
|
741
|
+
f.delete(e.id), i -= E, s.signal.removeEventListener("abort", k), h.signal?.removeEventListener("abort", k);
|
|
742
|
+
}
|
|
743
|
+
},
|
|
744
|
+
async resolve(e) {
|
|
745
|
+
let t = C(e);
|
|
746
|
+
if (t) return t;
|
|
747
|
+
let n = [...x.values()].filter(({ info: t }) => t.family.toLowerCase() === e.family.toLowerCase() && t.weight === e.weight && t.italic === e.italic), r = n.length === 1 ? a(n[0].info.embedding, e.purpose) : void 0;
|
|
748
|
+
return r ? {
|
|
749
|
+
ok: !1,
|
|
750
|
+
reason: r,
|
|
751
|
+
faceId: n[0].info.id
|
|
752
|
+
} : n.length === 1 ? {
|
|
753
|
+
ok: !0,
|
|
754
|
+
value: S(n[0].info)
|
|
755
|
+
} : {
|
|
756
|
+
ok: !1,
|
|
757
|
+
reason: n.length ? "ambiguous-face" : "face-unavailable"
|
|
758
|
+
};
|
|
759
|
+
},
|
|
760
|
+
async embedding(e, t) {
|
|
761
|
+
let n = await w(e, t);
|
|
762
|
+
return n.ok ? {
|
|
763
|
+
ok: !0,
|
|
764
|
+
value: {
|
|
765
|
+
info: n.value.info,
|
|
766
|
+
bytes: n.value.bytes.slice()
|
|
767
|
+
}
|
|
768
|
+
} : n;
|
|
769
|
+
},
|
|
770
|
+
async faceInfo(e, t) {
|
|
771
|
+
let n = await w(e, t);
|
|
772
|
+
return n.ok ? {
|
|
773
|
+
ok: !0,
|
|
774
|
+
value: n.value.info
|
|
775
|
+
} : n;
|
|
776
|
+
},
|
|
777
|
+
shape: T.shape,
|
|
778
|
+
outline: T.outline,
|
|
779
|
+
release(e) {
|
|
780
|
+
return x.delete(e) ? (p.add(e), T.release(e), !0) : !1;
|
|
781
|
+
},
|
|
782
|
+
state() {
|
|
783
|
+
return {
|
|
784
|
+
disposed: t,
|
|
785
|
+
retainedFontBytes: [...x.values()].reduce((e, t) => e + t.bytes.length, 0),
|
|
786
|
+
reservedFontBytes: i,
|
|
787
|
+
pendingRegistrations: f.size,
|
|
788
|
+
faces: x.size
|
|
789
|
+
};
|
|
790
|
+
},
|
|
791
|
+
dispose() {
|
|
792
|
+
t = !0, T.dispose(), s.abort(), x.clear(), p.clear();
|
|
793
|
+
}
|
|
794
|
+
};
|
|
795
|
+
}
|
|
796
|
+
export { d as i, g as n, p as r, x as t };
|