@reportwright/viewer 0.12.1 → 0.13.0

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 (81) hide show
  1. package/CHANGELOG.md +78 -0
  2. package/README.md +16 -1
  3. package/THIRD-PARTY-NOTICES.md +52 -0
  4. package/dist/{chunk-S2IUUI6N.js → chunk-BF7GCWZY.js} +67 -49
  5. package/dist/chunk-BF7GCWZY.js.map +6 -0
  6. package/dist/chunk-BR5K6SBL.js +324 -0
  7. package/dist/chunk-BR5K6SBL.js.map +6 -0
  8. package/dist/{peer/chunk-BQFI3DHK.js → chunk-CNDUJ7IV.js} +289 -25
  9. package/dist/chunk-CNDUJ7IV.js.map +6 -0
  10. package/dist/{chunk-VNOWPSE6.js → chunk-EK5CJY22.js} +1223 -899
  11. package/dist/chunk-EK5CJY22.js.map +6 -0
  12. package/dist/{chunk-2BPBQMH2.js → chunk-F5EPQTPF.js} +3 -3
  13. package/dist/chunk-FEM2QVOO.js +18 -0
  14. package/dist/{chunk-3D2KFKG2.js → chunk-IFYCJZNS.js} +8 -6
  15. package/dist/chunk-IFYCJZNS.js.map +6 -0
  16. package/dist/{chunk-NR2G4TMG.js → chunk-L6YEIVVD.js} +43 -22
  17. package/dist/chunk-L6YEIVVD.js.map +6 -0
  18. package/dist/{chunk-DPVJEFKP.js → chunk-PQNM6ET7.js} +4 -4
  19. package/dist/{chunk-DPVJEFKP.js.map → chunk-PQNM6ET7.js.map} +1 -1
  20. package/dist/{chunk-Z7MKH66Z.js → chunk-QFLVVM3H.js} +225 -11
  21. package/dist/chunk-QFLVVM3H.js.map +6 -0
  22. package/dist/{chunk-PGP3QA6L.js → chunk-TZXEEVKE.js} +1301 -70
  23. package/dist/chunk-TZXEEVKE.js.map +6 -0
  24. package/dist/{chunk-Q6MMPKQA.js → chunk-UHHURTSV.js} +11 -10
  25. package/dist/chunk-UHHURTSV.js.map +6 -0
  26. package/dist/{chunk-M6AYND5G.js → chunk-UJL7C2AS.js} +16 -7
  27. package/dist/chunk-UJL7C2AS.js.map +6 -0
  28. package/dist/chunk-YIX3OJXU.js +34 -0
  29. package/dist/designer.d.ts +11 -3
  30. package/dist/designer.js +587 -386
  31. package/dist/designer.js.map +3 -3
  32. package/dist/engine.worker.js +16729 -18
  33. package/dist/engine.worker.js.map +3 -3
  34. package/dist/peer/{chunk-6I2EAAVN.js → chunk-2CD5COHN.js} +43 -22
  35. package/dist/peer/chunk-2CD5COHN.js.map +6 -0
  36. package/dist/peer/{chunk-BMAXIBP2.js → chunk-3CBV5SAI.js} +4 -4
  37. package/dist/peer/{chunk-BMAXIBP2.js.map → chunk-3CBV5SAI.js.map} +1 -1
  38. package/dist/peer/{chunk-WSNRD2AQ.js → chunk-45GVDKP5.js} +11 -10
  39. package/dist/{chunk-Q6MMPKQA.js.map → peer/chunk-45GVDKP5.js.map} +1 -1
  40. package/dist/peer/{chunk-R4VX5UC7.js → chunk-LWXQX3NJ.js} +3 -3
  41. package/dist/{chunk-6TPZ7G74.js → peer/chunk-MKY3SDXU.js} +289 -25
  42. package/dist/peer/chunk-MKY3SDXU.js.map +6 -0
  43. package/dist/peer/chunk-S6LSPHSU.js +17 -0
  44. package/dist/peer/chunk-S6LSPHSU.js.map +6 -0
  45. package/dist/peer/{chunk-TSC4RAH3.js → chunk-VZHHNQYB.js} +1301 -70
  46. package/dist/peer/chunk-VZHHNQYB.js.map +6 -0
  47. package/dist/peer/{chunk-WQGENQZO.js → chunk-YITWGAR4.js} +8 -6
  48. package/dist/peer/chunk-YITWGAR4.js.map +6 -0
  49. package/dist/peer/chunk-Z5II55QT.js +33 -0
  50. package/dist/peer/chunk-Z5II55QT.js.map +6 -0
  51. package/dist/peer/designer.js +444 -243
  52. package/dist/peer/designer.js.map +3 -3
  53. package/dist/peer/engine.worker.js +16729 -17
  54. package/dist/peer/engine.worker.js.map +3 -3
  55. package/dist/peer/viewer.js +14 -11
  56. package/dist/peer/viewer.js.map +1 -1
  57. package/dist/viewer.d.ts +2 -1
  58. package/dist/viewer.js +14 -11
  59. package/dist/viewer.js.map +1 -1
  60. package/package.json +4 -2
  61. package/dist/chunk-3D2KFKG2.js.map +0 -6
  62. package/dist/chunk-6TPZ7G74.js.map +0 -6
  63. package/dist/chunk-BRB34AJ2.js +0 -16
  64. package/dist/chunk-M6AYND5G.js.map +0 -6
  65. package/dist/chunk-NR2G4TMG.js.map +0 -6
  66. package/dist/chunk-PGP3QA6L.js.map +0 -6
  67. package/dist/chunk-S2IUUI6N.js.map +0 -6
  68. package/dist/chunk-ULKEEARQ.js +0 -553
  69. package/dist/chunk-ULKEEARQ.js.map +0 -6
  70. package/dist/chunk-VNOWPSE6.js.map +0 -6
  71. package/dist/chunk-Z7MKH66Z.js.map +0 -6
  72. package/dist/peer/chunk-2FZTYEDE.js +0 -15
  73. package/dist/peer/chunk-6I2EAAVN.js.map +0 -6
  74. package/dist/peer/chunk-BQFI3DHK.js.map +0 -6
  75. package/dist/peer/chunk-TSC4RAH3.js.map +0 -6
  76. package/dist/peer/chunk-WQGENQZO.js.map +0 -6
  77. package/dist/peer/chunk-WSNRD2AQ.js.map +0 -6
  78. /package/dist/{chunk-2BPBQMH2.js.map → chunk-F5EPQTPF.js.map} +0 -0
  79. /package/dist/{chunk-BRB34AJ2.js.map → chunk-FEM2QVOO.js.map} +0 -0
  80. /package/dist/{peer/chunk-2FZTYEDE.js.map → chunk-YIX3OJXU.js.map} +0 -0
  81. /package/dist/peer/{chunk-R4VX5UC7.js.map → chunk-LWXQX3NJ.js.map} +0 -0
@@ -1,553 +0,0 @@
1
- import {
2
- CORE_FONT_KEY,
3
- DEFAULT_FAMILY,
4
- SHAPER,
5
- fallbackKey,
6
- fontCss,
7
- resolveFontKey
8
- } from "./chunk-Z7MKH66Z.js";
9
-
10
- // src/engine/text/measure.js
11
- import bidiFactory from "bidi-js";
12
- var bidi = bidiFactory();
13
- function special(cp) {
14
- if (cp < 1424) return false;
15
- if (cp <= 7423) return true;
16
- if (cp >= 8192 && cp <= 8303) return cp >= 8203 && cp <= 8207 || cp >= 8234 && cp <= 8238 || cp >= 8288;
17
- return cp >= 11904 && cp <= 42191 || cp >= 43056 && cp <= 44031 || cp >= 44032 && cp <= 55215 || cp >= 63744 && cp <= 64255 || cp >= 64285 && cp <= 65023 || cp >= 65024 && cp <= 65039 || cp >= 65072 && cp <= 65103 || cp >= 65136 && cp <= 65278 || cp >= 65280 && cp <= 65519 || cp >= 65536;
18
- }
19
- var FORMAT_CHAR = /^\p{Cf}$/u;
20
- var cjk = (cp) => cp >= 11904 && cp <= 40959 || cp >= 44032 && cp <= 55215 || cp >= 63744 && cp <= 64255 || cp >= 65280 && cp <= 65519 || cp >= 131072 && cp <= 262143;
21
- var NO_START = new Set("、。,.・:;?!ー)」』】〕〉》〗〙〟’”}⦆ぁぃぅぇぉっゃゅょゎゕゖァィゥェォッャュョヮヵヶ々〻‐゠–〜~…‥,.!?:;)]}%ゝゞヽヾ゛゜ㇰㇱㇲㇳㇴㇵㇶㇷㇸㇹㇺㇻㇼㇽㇾㇿ。」、・ー%]⦆");
22
- var NO_END = new Set("(「『【〔〈《〖〘〝‘“{⦅([{[「$¥£");
23
- var MAYBE = /[^\u0000-\u058f]/;
24
- var RTL_OR_CONTROLS = /[֐-ࣿיִ-﷿ﹰ-﻾‎‏‪-‮⁦-⁩]|[\uD802\uD803\uD83A]/;
25
- var SCRIPTS = [
26
- "Latin",
27
- "Greek",
28
- "Cyrillic",
29
- "Armenian",
30
- "Hebrew",
31
- "Arabic",
32
- "Syriac",
33
- "Thaana",
34
- "Devanagari",
35
- "Bengali",
36
- "Gurmukhi",
37
- "Gujarati",
38
- "Oriya",
39
- "Tamil",
40
- "Telugu",
41
- "Kannada",
42
- "Malayalam",
43
- "Sinhala",
44
- "Thai",
45
- "Lao",
46
- "Tibetan",
47
- "Myanmar",
48
- "Georgian",
49
- "Hangul",
50
- "Ethiopic",
51
- "Khmer",
52
- "Mongolian",
53
- "Han",
54
- "Hiragana",
55
- "Katakana",
56
- "Bopomofo"
57
- ].map((s) => (
58
- /** @type {[string, RegExp]} */
59
- [s, new RegExp(`\\p{Script=${s}}`, "u")]
60
- ));
61
- var SIMPLE = /* @__PURE__ */ new Set(["Latin", "Greek", "Cyrillic", "Armenian", "Georgian", "Hangul", "Han", "Hiragana", "Katakana", "Bopomofo", "Common"]);
62
- var STICKY = /[\p{M}\p{Cf}]/u;
63
- var SPACE = /\s/u;
64
- var scriptCache = /* @__PURE__ */ new Map();
65
- function scriptOf(cp) {
66
- let s = scriptCache.get(cp);
67
- if (s === void 0) {
68
- const ch = String.fromCodePoint(cp);
69
- s = "Common";
70
- for (const [name, re] of SCRIPTS) if (re.test(ch)) {
71
- s = name;
72
- break;
73
- }
74
- if (scriptCache.size >= 2e4) scriptCache.clear();
75
- scriptCache.set(cp, s);
76
- }
77
- return s;
78
- }
79
- var INTL = typeof Intl !== "undefined" && typeof Intl.Segmenter === "function";
80
- var GRAPHEMES = INTL ? new Intl.Segmenter(void 0, { granularity: "grapheme" }) : null;
81
- var JOINS = /[\p{M}\u200c\u200d\ufe00-\ufe0f]/u;
82
- function clusters(s, intl = true) {
83
- if (intl && GRAPHEMES) return [...GRAPHEMES.segment(s)].map((x) => x.segment);
84
- const out = [];
85
- for (const ch of s) {
86
- if (out.length && (JOINS.test(ch) || out[out.length - 1].endsWith("‍"))) out[out.length - 1] += ch;
87
- else out.push(ch);
88
- }
89
- return out;
90
- }
91
- var graphemes = (s) => clusters(s);
92
- var SA = /[\u0e00-\u0eff\u1000-\u109f\u1780-\u17ff\u19e0-\u19ff\u1a20-\u1aaf\ua9e0-\ua9ff\uaa60-\uaadf]/;
93
- var WORDS = INTL ? new Intl.Segmenter(void 0, { granularity: "word" }) : null;
94
- function saBreaks(text, segmenter = WORDS) {
95
- const out = /* @__PURE__ */ new Set();
96
- if (!segmenter) return out;
97
- for (const { index } of segmenter.segment(text)) {
98
- if (index > 0 && (SA.test(text[index]) || SA.test(text[index - 1]))) out.add(index);
99
- }
100
- return out;
101
- }
102
- var TextMeasurer = class {
103
- /** @param {import('./fonts.js').FontStore} store */
104
- constructor(store) {
105
- this.store = store;
106
- this.faces = /* @__PURE__ */ new Map();
107
- this.boxes = /* @__PURE__ */ new WeakMap();
108
- this.boxCount = 0;
109
- this.looks = /* @__PURE__ */ new WeakMap();
110
- this.cover = /* @__PURE__ */ new Map();
111
- this.cache = /* @__PURE__ */ new Map();
112
- this.missing = /* @__PURE__ */ new Set();
113
- this.noGlyph = /* @__PURE__ */ new Set();
114
- }
115
- /**
116
- * The key to measure with: `key` when loaded; else (not loaded yet, or failed) the bundled face of the same weight
117
- * and style when that is loaded, else the core regular face. A key not yet loaded is asked for in the next pass.
118
- */
119
- usable(key) {
120
- if (this.store.has(key)) return key;
121
- if (!this.store.failed.has(key)) this.missing.add(key);
122
- const c = fontCss(key);
123
- const same = resolveFontKey(DEFAULT_FAMILY, c.weight, c.style);
124
- return this.store.has(same) ? same : CORE_FONT_KEY;
125
- }
126
- /**
127
- * A loaded face's numbers, read once: fontkit's getters (unitsPerEm, ascent…) decode tables on every read.
128
- * adv: advances per code point (-1 = not on the fast path); words: fast-path units per string (a table repeats them).
129
- * @param {string} key a loaded key
130
- */
131
- face(key) {
132
- let f = this.faces.get(key);
133
- if (!f) {
134
- const font = this.store.get(key);
135
- f = { font, upm: font.unitsPerEm, ascent: font.ascent, descent: font.descent, adv: /* @__PURE__ */ new Map(), words: /* @__PURE__ */ new Map(), met: /* @__PURE__ */ new Map() };
136
- this.faces.set(key, f);
137
- }
138
- return f;
139
- }
140
- /** Font units of `text` on the fast path, or -1 when it needs the complex path. */
141
- fast(text, key) {
142
- const f = this.face(key);
143
- const hit = f.words.get(text);
144
- if (hit !== void 0) return hit;
145
- const m = f.adv, font = f.font;
146
- let units = 0;
147
- for (let i = 0; i < text.length; i++) {
148
- let cp = text.charCodeAt(i);
149
- if (cp >= 55296 && cp <= 56319) {
150
- const lo = text.charCodeAt(i + 1);
151
- if (lo >= 56320 && lo <= 57343) {
152
- cp = (cp - 55296) * 1024 + lo - 56320 + 65536;
153
- i++;
154
- }
155
- }
156
- let a = m.get(cp);
157
- if (a === void 0) {
158
- a = special(cp) || cp >= 32 && !font.hasGlyphForCodePoint(cp) ? -1 : font.glyphForCodePoint(cp).advanceWidth || 0;
159
- m.set(cp, a);
160
- }
161
- if (a < 0) {
162
- units = -1;
163
- break;
164
- }
165
- units += a;
166
- }
167
- if (text.length <= 256) {
168
- if (f.words.size >= 5e4) f.words.clear();
169
- f.words.set(text, units);
170
- }
171
- return units;
172
- }
173
- /**
174
- * Advance width in points. @param {string} text @param {string} key @param {number} size
175
- * @param {'ltr'|'rtl'} [dir] paragraph direction (default: from the first strong character)
176
- */
177
- width(text, key, size, dir) {
178
- const k = this.store.has(key) ? key : this.usable(key);
179
- const u = this.fast(text, k);
180
- if (u >= 0) return u * size / this.face(k).upm;
181
- return this.layout(text, k, dir).w * size;
182
- }
183
- /**
184
- * Where underline and strike-through go, from the font's own tables (post and OS/2), in points:
185
- * y offsets of the stroke centre from the baseline (positive = down, as on the page) and thicknesses.
186
- * A font without the tables falls back to proportions of its descent and x-height.
187
- * @param {string} key @param {number} size
188
- */
189
- decoration(key, size) {
190
- const f = this.store.get(this.usable(key));
191
- const u = f.unitsPerEm, os2 = f["OS/2"] || {};
192
- const ut = f.underlineThickness > 0 ? f.underlineThickness : u / 14;
193
- const up = f.underlinePosition < 0 ? f.underlinePosition : f.descent / 2;
194
- const st = os2.yStrikeoutSize > 0 ? os2.yStrikeoutSize : ut;
195
- const sp = os2.yStrikeoutPosition > 0 ? os2.yStrikeoutPosition : (f.xHeight > 0 ? f.xHeight : f.ascent * 0.5) / 2 + st / 2;
196
- const k = size / u;
197
- return { underlineY: -(up - ut / 2) * k, underlineWidth: ut * k, strikeY: -(sp - st / 2) * k, strikeWidth: st * k };
198
- }
199
- /**
200
- * Superscript and subscript from the font's OS/2 table, in em: the size of the small text and how far its
201
- * baseline moves (rise up for superscript, drop down for subscript). Fonts without the values get the
202
- * proportions most fonts use.
203
- * @param {string} key
204
- */
205
- script(key) {
206
- const f = this.store.get(this.usable(key));
207
- const u = f.unitsPerEm, o = f["OS/2"] || {};
208
- const frac = (v, d) => v > 0 && v < u * 2 ? v / u : d;
209
- return { supScale: frac(o.ySuperscriptYSize, 0.65), supRise: frac(o.ySuperscriptYOffset, 0.35), subScale: frac(o.ySubscriptYSize, 0.65), subDrop: frac(o.ySubscriptYOffset, 0.15) };
210
- }
211
- /** @param {string} key @param {number} size */
212
- metrics(key, size) {
213
- const f = this.face(this.usable(key));
214
- let r = f.met.get(size);
215
- if (!r) {
216
- r = Object.freeze({ ascent: f.ascent * size / f.upm, descent: -f.descent * size / f.upm });
217
- f.met.set(size, r);
218
- }
219
- return r;
220
- }
221
- /**
222
- * The visually ordered runs of one line, or null when the line is simple (draw `text` as it is).
223
- * @param {string} text @param {string} key @param {number} size @param {'ltr'|'rtl'} [dir]
224
- * @returns {Run[]|null}
225
- */
226
- runs(text, key, size, dir) {
227
- if (!dir && !MAYBE.test(text)) return null;
228
- const k = this.usable(key);
229
- if (this.fast(text, k) >= 0) return null;
230
- return this.layout(text, k, dir).runs.map((r) => ({
231
- ...r,
232
- x: r.x * size,
233
- w: r.w * size,
234
- glyphs: r.glyphs.map((v, i) => i % 4 === 1 || i % 4 === 2 ? v * size : v)
235
- }));
236
- }
237
- /** Paragraph direction of text that needs shaping, bidi or CJK breaks, else undefined. */
238
- direction(text, key) {
239
- if (!MAYBE.test(text)) return void 0;
240
- const k = this.usable(key);
241
- if (this.fast(text, k) >= 0) return void 0;
242
- return this.layout(text, k, void 0).rtl ? "rtl" : "ltr";
243
- }
244
- /**
245
- * Greedy line breaking. Simple paragraphs break at spaces (a word longer than the line breaks by
246
- * character), exactly as before. Others also break between CJK characters (kinsoku applied), never
247
- * inside a grapheme cluster (a conjunct, a letter and its marks), and remember their direction.
248
- * @param {string} text @param {string} key @param {number} size @param {number} maxWidth
249
- * @returns {{text: string, width: number, dir?: 'ltr'|'rtl'}[]}
250
- */
251
- wrap(text, key, size, maxWidth) {
252
- const out = [];
253
- const k = this.usable(key);
254
- const sp = this.width(" ", k, size);
255
- const str = String(text);
256
- for (const para of str.includes("\n") ? str.split(/\r?\n/) : [str]) {
257
- const dir = this.direction(para, k);
258
- if (dir) {
259
- this.wrapComplex(para, k, size, maxWidth, dir, sp, out);
260
- continue;
261
- }
262
- if (!para.includes(" ")) {
263
- const ww = this.width(para, k, size);
264
- if (ww <= maxWidth || maxWidth <= 0) {
265
- out.push({ text: para, width: ww, end: true });
266
- continue;
267
- }
268
- }
269
- const words = para.split(/ +/);
270
- let line = "", lw = 0;
271
- const push = () => {
272
- out.push({ text: line, width: lw });
273
- line = "";
274
- lw = 0;
275
- };
276
- for (let wi = 0; wi < words.length; wi++) {
277
- const w = words[wi];
278
- if (w === "" && wi > 0) continue;
279
- const ww = this.width(w, k, size);
280
- if (line === "") {
281
- if (ww <= maxWidth || maxWidth <= 0) {
282
- line = w;
283
- lw = ww;
284
- continue;
285
- }
286
- } else if (lw + sp + ww <= maxWidth) {
287
- line += " " + w;
288
- lw += sp + ww;
289
- continue;
290
- } else {
291
- push();
292
- if (ww <= maxWidth) {
293
- line = w;
294
- lw = ww;
295
- continue;
296
- }
297
- }
298
- let after = -1;
299
- for (const ch of w) {
300
- const cw = this.width(ch, k, size);
301
- if (lw + cw > maxWidth && line !== "") {
302
- if (after > 0 && after < line.length) {
303
- const rest = line.slice(after);
304
- line = line.slice(0, after);
305
- lw = this.width(line, k, size);
306
- push();
307
- line = rest;
308
- lw = this.width(rest, k, size);
309
- } else push();
310
- after = -1;
311
- }
312
- line += ch;
313
- lw += cw;
314
- if ((ch === "/" || ch === "-") && line.length > 1) after = line.length;
315
- }
316
- }
317
- push();
318
- out[out.length - 1].end = true;
319
- }
320
- return out;
321
- }
322
- /** @param {string} para @param {string} key @param {number} size @param {number} maxWidth @param {'ltr'|'rtl'} dir @param {number} sp @param {any[]} out */
323
- wrapComplex(para, key, size, maxWidth, dir, sp, out) {
324
- const tokens = [];
325
- const sa = SA.test(para) ? saBreaks(para) : null;
326
- let cur = "", space = false, prev = "", at = 0;
327
- for (const ch of para) {
328
- const i = at;
329
- at += ch.length;
330
- if (ch === " ") {
331
- if (cur) {
332
- tokens.push({ text: cur, space });
333
- cur = "";
334
- }
335
- space = tokens.length > 0;
336
- prev = "";
337
- continue;
338
- }
339
- const cp = (
340
- /** @type {number} */
341
- ch.codePointAt(0)
342
- );
343
- const pcp = prev ? (
344
- /** @type {number} */
345
- prev.codePointAt(0)
346
- ) : 0;
347
- if (cur && (sa?.has(i) || (cjk(cp) || cjk(pcp)) && !NO_START.has(ch) && !NO_END.has(prev) && !STICKY.test(ch))) {
348
- tokens.push({ text: cur, space });
349
- cur = "";
350
- space = false;
351
- }
352
- cur += ch;
353
- prev = ch;
354
- }
355
- if (cur) tokens.push({ text: cur, space });
356
- let line = "", lw = 0;
357
- const push = () => {
358
- out.push({ text: line, width: this.width(line, key, size, dir), dir });
359
- line = "";
360
- lw = 0;
361
- };
362
- for (const t of tokens) {
363
- const tw = this.width(t.text, key, size, dir);
364
- const gap = line && t.space ? sp : 0;
365
- if (line === "" ? tw <= maxWidth || maxWidth <= 0 : lw + gap + tw <= maxWidth) {
366
- line += (line && t.space ? " " : "") + t.text;
367
- lw += gap + tw;
368
- continue;
369
- }
370
- if (line) push();
371
- if (tw <= maxWidth) {
372
- line = t.text;
373
- lw = tw;
374
- continue;
375
- }
376
- for (const g of graphemes(t.text)) {
377
- const gw = this.width(g, key, size, dir);
378
- if (lw + gw > maxWidth && line !== "") push();
379
- line += g;
380
- lw += gw;
381
- }
382
- }
383
- push();
384
- }
385
- /** Cut a line so it fits, then add "…". */
386
- ellipsize(text, key, size, maxWidth, dir) {
387
- const ell = "…";
388
- if (this.width(text, key, size, dir) <= maxWidth) return text;
389
- const ew = this.width(ell, key, size);
390
- if (this.direction(text, key)) {
391
- const gs = graphemes(text);
392
- while (gs.length && this.width(gs.join(""), key, size, dir) + ew > maxWidth) gs.pop();
393
- return gs.join("").trimEnd() + ell;
394
- }
395
- let s = text;
396
- while (s.length && this.width(s, key, size) + ew > maxWidth) s = s.slice(0, -1);
397
- return s.trimEnd() + ell;
398
- }
399
- /** Does this font have a glyph for the character? */
400
- has(key, cp) {
401
- let m = this.cover.get(key);
402
- if (!m) {
403
- m = /* @__PURE__ */ new Map();
404
- this.cover.set(key, m);
405
- }
406
- let h = m.get(cp);
407
- if (h === void 0) {
408
- h = !!this.store.get(key).hasGlyphForCodePoint(cp);
409
- m.set(cp, h);
410
- }
411
- return h;
412
- }
413
- /** The font for one character: the chosen one, else the bundled fallback for its script, else the one before. */
414
- pick(cp, key, prev) {
415
- if (cp < 32 || this.has(key, cp) || FORMAT_CHAR.test(String.fromCodePoint(cp))) return key;
416
- const fb = fallbackKey(cp, key);
417
- if (fb && !this.store.failed.has(fb)) {
418
- if (!this.store.has(fb)) {
419
- this.missing.add(fb);
420
- return key;
421
- }
422
- if (this.has(fb, cp)) return fb;
423
- }
424
- if (prev && prev !== key && this.has(prev, cp)) return prev;
425
- if (!this.missing.size) this.noGlyph.add(String.fromCodePoint(cp));
426
- return key;
427
- }
428
- /**
429
- * Bidi levels, a font per character, runs (one font, level, script, and space or not), shaping,
430
- * then visual order. Cached at size 1.
431
- * @param {string} text @param {string} key a loaded key @param {'ltr'|'rtl'|undefined} dir
432
- * @returns {{ w: number, rtl: boolean, runs: Run[] }}
433
- */
434
- layout(text, key, dir) {
435
- const ck = `${key}${dir || ""}${text}`;
436
- const hit = this.cache.get(ck);
437
- if (hit) return hit;
438
- let levels = null, rtl = dir === "rtl";
439
- if (dir === "rtl" || RTL_OR_CONTROLS.test(text)) {
440
- const e = bidi.getEmbeddingLevels(text, dir);
441
- levels = e.levels;
442
- rtl = ((e.paragraphs[0]?.level ?? 0) & 1) === 1;
443
- }
444
- const segs = [];
445
- let cur = null, prevFont = "";
446
- for (let i = 0; i < text.length; ) {
447
- const cp = (
448
- /** @type {number} */
449
- text.codePointAt(i)
450
- );
451
- const n = cp > 65535 ? 2 : 1;
452
- const ch = text.slice(i, i + n);
453
- const font = STICKY.test(ch) && prevFont ? prevFont : this.pick(cp, key, prevFont);
454
- const level = levels ? levels[i] : 0;
455
- const ws = SPACE.test(ch);
456
- const script = scriptOf(cp);
457
- if (!cur || font !== cur.font || level !== cur.level || ws !== cur.ws || script !== "Common" && cur.script !== "Common" && script !== cur.script) {
458
- cur = { start: i, end: i + n, font, level, script, ws };
459
- segs.push(cur);
460
- } else {
461
- cur.end = i + n;
462
- if (cur.script === "Common") cur.script = script;
463
- }
464
- prevFont = font;
465
- i += n;
466
- }
467
- const runs = segs.map((s) => this.shapeRun(text.slice(s.start, s.end), s.font, (s.level & 1) === 1, s.script));
468
- const order = runs.map((r, i) => ({ r, level: segs[i].level }));
469
- let max = 0, minOdd = Infinity;
470
- for (const o of order) {
471
- max = Math.max(max, o.level);
472
- if (o.level & 1) minOdd = Math.min(minOdd, o.level);
473
- }
474
- for (let l = max; l >= minOdd; l--) {
475
- for (let i = 0; i < order.length; ) {
476
- if (order[i].level < l) {
477
- i++;
478
- continue;
479
- }
480
- let j = i;
481
- while (j < order.length && order[j].level >= l) j++;
482
- const rev = order.slice(i, j).reverse();
483
- order.splice(i, j - i, ...rev);
484
- i = j;
485
- }
486
- }
487
- let x = 0;
488
- for (const o of order) {
489
- o.r.x = x;
490
- x += o.r.w;
491
- }
492
- const out = { w: x, rtl, runs: order.map((o) => o.r) };
493
- if (this.cache.size > 2e4) this.cache.clear();
494
- this.cache.set(ck, out);
495
- return out;
496
- }
497
- /** One run at size 1: HarfBuzz for complex scripts and right-to-left text, else character-map glyphs. @returns {Run} */
498
- shapeRun(text, key, rtl, script) {
499
- const complex = !SIMPLE.has(script);
500
- const store = this.store;
501
- const glyphs = [];
502
- let pen = 0;
503
- if ((complex || rtl) && store.shaper) {
504
- const hf = store.hbFont(key);
505
- const g = store.shaper.shape(hf, text, rtl, !complex);
506
- for (let i = 0; i < g.length; i += 5) {
507
- glyphs.push(g[i], (pen + g[i + 2]) / hf.upem, g[i + 3] / hf.upem, g[i + 4]);
508
- pen += g[i + 1];
509
- }
510
- return { font: key, x: 0, w: pen / hf.upem, text, ...rtl ? { rtl } : {}, ...complex ? { shaped: true } : {}, glyphs };
511
- }
512
- if ((complex || rtl) && !store.failed.has(SHAPER)) this.missing.add(SHAPER);
513
- else if (complex || rtl) this.unshaped = true;
514
- const f = store.get(key);
515
- const list = [];
516
- for (let i = 0; i < text.length; ) {
517
- const cp = (
518
- /** @type {number} */
519
- text.codePointAt(i)
520
- );
521
- const g = f.glyphForCodePoint(cp);
522
- list.push([g.id, g.advanceWidth || 0, i]);
523
- i += cp > 65535 ? 2 : 1;
524
- }
525
- if (rtl) list.reverse();
526
- for (const [id, a, c] of list) {
527
- glyphs.push(id, pen / f.unitsPerEm, 0, c);
528
- pen += a;
529
- }
530
- return { font: key, x: 0, w: pen / f.unitsPerEm, text, ...rtl ? { rtl } : {}, glyphs };
531
- }
532
- };
533
- function finishText(items, m) {
534
- for (const it of items) {
535
- if (it.t === "field") {
536
- finishText(it.draw, m);
537
- continue;
538
- }
539
- if (it.t !== "text") continue;
540
- it.font = m.usable(it.font);
541
- for (const l of it.lines) {
542
- const r = m.runs(l.text, it.font, it.size, l.dir);
543
- if (r) l.runs = r;
544
- }
545
- }
546
- }
547
-
548
- export {
549
- FORMAT_CHAR,
550
- TextMeasurer,
551
- finishText
552
- };
553
- //# sourceMappingURL=chunk-ULKEEARQ.js.map
@@ -1,6 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/engine/text/measure.js"],
4
- "mappings": "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",
5
- "names": []
6
- }