@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/dist/glyphs.js CHANGED
@@ -1,69 +1,109 @@
1
- import { s as I } from "./provider-9-K8y5p4.js";
2
- import { c as P } from "./provider-9-K8y5p4.js";
3
- import { F as k } from "./fault-HMYM9DhC.js";
4
- async function x(c, z, t) {
5
- var F;
6
- const u = /* @__PURE__ */ new Map(), y = /* @__PURE__ */ new Set(), w = /* @__PURE__ */ new Map(), n = /* @__PURE__ */ new Map(), g = t.maxQueries ?? 8192;
7
- let d = !1, b = 0;
8
- const v = (e, a, m) => {
9
- if (!e) return 0;
10
- const s = JSON.stringify([e, a.fonts, !!a.b, !!a.i]), i = u.get(s), o = a.size * m * (a.baseline ? 0.65 : 1);
11
- if (i !== void 0) return i * o + (a.spacing ?? 0) * e.length;
12
- if (!d) throw new k("measurement-not-prepared");
13
- if (!n.has(s)) {
14
- if (b += e.length, u.size + n.size >= g || b > 1e6) throw new k("resource-limit");
15
- n.set(s, { text: e, style: { fonts: [...a.fonts], b: a.b, i: a.i } });
16
- }
17
- return e.length * o;
18
- };
19
- try {
20
- if (!Number.isSafeInteger(g) || g < 1) return { ok: !1, reason: "invalid-request" };
21
- for (let e = 0; e < 8; e++) {
22
- if (c.state().disposed) return { ok: !1, reason: "provider-disposed" };
23
- if ((F = t.signal) != null && F.aborted) return { ok: !1, reason: "aborted" };
24
- n.clear(), d = !0;
25
- let a;
26
- try {
27
- a = z(v);
28
- } finally {
29
- d = !1;
30
- }
31
- if (!n.size) return { ok: !0, value: { result: a, measureText: v, faceIds: [...y] } };
32
- for (const [m, s] of n) {
33
- const i = I(s.text, { direction: "ltr", language: t.language });
34
- if (!i.ok) return i;
35
- let o = 0;
36
- for (const p of i.value) {
37
- const r = t.faceForRun(s.style, p.script);
38
- if (!r) return { ok: !1, reason: "face-unavailable" };
39
- let l = w.get(r);
40
- if (!l) {
41
- const h = await c.faceInfo(r, t);
42
- if (!h.ok) return h;
43
- l = h.value, w.set(r, l);
44
- }
45
- if (l.weight !== (s.style.b ? 700 : 400) || l.italic !== !!s.style.i)
46
- return { ok: !1, reason: "face-style-mismatch", faceId: r };
47
- const f = await c.shape(r, p.text, {
48
- purpose: t.purpose,
49
- signal: t.signal,
50
- language: t.language,
51
- script: p.script,
52
- direction: "ltr"
53
- });
54
- if (!f.ok) return f;
55
- o += f.value.xAdvance / f.value.unitsPerEm, y.add(r);
56
- }
57
- u.set(m, o);
58
- }
59
- }
60
- return { ok: !1, reason: "resource-limit" };
61
- } catch (e) {
62
- return e instanceof k ? { ok: !1, reason: e.reason, range: e.range } : { ok: !1, reason: "layout-failed" };
63
- }
1
+ import { i as e, t } from "./provider-B6_T5p3K.js";
2
+ import { t as n } from "./fault-Wg7mCzGf.js";
3
+ // src/glyphs/measurement.ts
4
+ async function r(t, r, i) {
5
+ let a = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Set(), s = /* @__PURE__ */ new Map(), c = /* @__PURE__ */ new Map(), l = i.maxQueries ?? 8192, u = !1, d = 0, f = (e, t, r) => {
6
+ if (!e) return 0;
7
+ let i = JSON.stringify([
8
+ e,
9
+ t.fonts,
10
+ !!t.b,
11
+ !!t.i
12
+ ]), o = a.get(i), s = t.size * r * (t.baseline ? .65 : 1);
13
+ if (o !== void 0) return o * s + (t.spacing ?? 0) * e.length;
14
+ if (!u) throw new n("measurement-not-prepared");
15
+ if (!c.has(i)) {
16
+ if (d += e.length, a.size + c.size >= l || d > 1e6) throw new n("resource-limit");
17
+ c.set(i, {
18
+ text: e,
19
+ style: {
20
+ fonts: [...t.fonts],
21
+ b: t.b,
22
+ i: t.i
23
+ }
24
+ });
25
+ }
26
+ return e.length * s;
27
+ };
28
+ try {
29
+ if (!Number.isSafeInteger(l) || l < 1) return {
30
+ ok: !1,
31
+ reason: "invalid-request"
32
+ };
33
+ for (let n = 0; n < 8; n++) {
34
+ if (t.state().disposed) return {
35
+ ok: !1,
36
+ reason: "provider-disposed"
37
+ };
38
+ if (i.signal?.aborted) return {
39
+ ok: !1,
40
+ reason: "aborted"
41
+ };
42
+ c.clear(), u = !0;
43
+ let n;
44
+ try {
45
+ n = r(f);
46
+ } finally {
47
+ u = !1;
48
+ }
49
+ if (!c.size) return {
50
+ ok: !0,
51
+ value: {
52
+ result: n,
53
+ measureText: f,
54
+ faceIds: [...o]
55
+ }
56
+ };
57
+ for (let [n, r] of c) {
58
+ let c = e(r.text, {
59
+ direction: "ltr",
60
+ language: i.language
61
+ });
62
+ if (!c.ok) return c;
63
+ let l = 0;
64
+ for (let e of c.value) {
65
+ let n = i.faceForRun(r.style, e.script);
66
+ if (!n) return {
67
+ ok: !1,
68
+ reason: "face-unavailable"
69
+ };
70
+ let a = s.get(n);
71
+ if (!a) {
72
+ let e = await t.faceInfo(n, i);
73
+ if (!e.ok) return e;
74
+ a = e.value, s.set(n, a);
75
+ }
76
+ if (a.weight !== (r.style.b ? 700 : 400) || a.italic !== !!r.style.i) return {
77
+ ok: !1,
78
+ reason: "face-style-mismatch",
79
+ faceId: n
80
+ };
81
+ let c = await t.shape(n, e.text, {
82
+ purpose: i.purpose,
83
+ signal: i.signal,
84
+ language: i.language,
85
+ script: e.script,
86
+ direction: "ltr"
87
+ });
88
+ if (!c.ok) return c;
89
+ l += c.value.xAdvance / c.value.unitsPerEm, o.add(n);
90
+ }
91
+ a.set(n, l);
92
+ }
93
+ }
94
+ return {
95
+ ok: !1,
96
+ reason: "resource-limit"
97
+ };
98
+ } catch (e) {
99
+ return e instanceof n ? {
100
+ ok: !1,
101
+ reason: e.reason,
102
+ range: e.range
103
+ } : {
104
+ ok: !1,
105
+ reason: "layout-failed"
106
+ };
107
+ }
64
108
  }
65
- export {
66
- P as createFontProvider,
67
- I as segmentFontText,
68
- x as withFontMeasurement
69
- };
109
+ export { t as createFontProvider, e as segmentFontText, r as withFontMeasurement };
package/dist/index.d.ts CHANGED
@@ -14,3 +14,5 @@ export { DEFAULT_BASE, PACKAGES, cssUrl } from './sources';
14
14
  export type { FontPackage } from './sources';
15
15
  export { isInstalled, loadFontsFor, rewriteFontFaceCss, unloadFonts } from './load';
16
16
  export type { LoadOptions, LoadResult } from './load';
17
+ export { exportFontFaces } from './export-faces';
18
+ export type { ExportFaceOptions } from './export-faces';
package/dist/load.d.ts CHANGED
@@ -59,6 +59,10 @@ export declare function isInstalled(family: string, doc?: Document): boolean;
59
59
  export declare function rewriteFontFaceCss(css: string, original: string, cssHref: string, opts?: {
60
60
  readonly preferLocal?: boolean;
61
61
  }): string;
62
+ /** run 文字里出现西文时才需要西文替代家族;导出脸集与页面加载共用这一判定 */
63
+ export declare const LATIN_CHARS: RegExp;
64
+ /** 抓一份按字重的 CSS(短缓存);导出脸集与页面加载共用,页面抓过导出就免费 */
65
+ export declare function fetchCss(url: string): Promise<string | null>;
62
66
  /**
63
67
  * 为一份演示文稿的字体用量准备好网络字体。
64
68
  *