@vyaz/core 0.0.10 → 0.0.14
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/compile/DocumentCompiler.d.ts +1 -0
- package/dist/compile/DocumentCompiler.d.ts.map +1 -0
- package/dist/index.browser.d.ts +19 -43
- package/dist/index.browser.d.ts.map +1 -0
- package/dist/index.browser.js +170 -43
- package/dist/index.d.ts +33 -48
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +141 -40
- package/dist/layout/AutoFitEngine.d.ts +1 -0
- package/dist/layout/AutoFitEngine.d.ts.map +1 -0
- package/dist/layout/LineBoxValidator.d.ts +1 -0
- package/dist/layout/LineBoxValidator.d.ts.map +1 -0
- package/dist/layout/ParagraphLayoutEngine.d.ts +1 -0
- package/dist/layout/ParagraphLayoutEngine.d.ts.map +1 -0
- package/dist/layout/PositioningEngine.d.ts +1 -0
- package/dist/layout/PositioningEngine.d.ts.map +1 -0
- package/dist/layout/TextFrameLayoutEngine.d.ts +1 -0
- package/dist/layout/TextFrameLayoutEngine.d.ts.map +1 -0
- package/dist/layout/estimateWidth.d.ts +1 -0
- package/dist/layout/estimateWidth.d.ts.map +1 -0
- package/dist/measure/FontEngine.d.ts +1 -0
- package/dist/measure/FontEngine.d.ts.map +1 -0
- package/dist/measure/FontMetricsProvider.d.ts +74 -15
- package/dist/measure/FontMetricsProvider.d.ts.map +1 -0
- package/dist/measure/FontNotFoundError.d.ts +1 -0
- package/dist/measure/FontNotFoundError.d.ts.map +1 -0
- package/dist/measure/SystemFontRegistry.d.ts +1 -0
- package/dist/measure/SystemFontRegistry.d.ts.map +1 -0
- package/dist/measure/canvas-polyfill.d.ts +1 -0
- package/dist/measure/canvas-polyfill.d.ts.map +1 -0
- package/dist/types/Document.d.ts +1 -0
- package/dist/types/Document.d.ts.map +1 -0
- package/dist/types/FontTypes.d.ts +1 -0
- package/dist/types/FontTypes.d.ts.map +1 -0
- package/dist/types/LayoutTypes.d.ts +1 -0
- package/dist/types/LayoutTypes.d.ts.map +1 -0
- package/dist/utils/env.d.ts +1 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/font.d.ts +1 -0
- package/dist/utils/font.d.ts.map +1 -0
- package/dist/utils/groupLinesByParagraph.d.ts +1 -0
- package/dist/utils/groupLinesByParagraph.d.ts.map +1 -0
- package/dist/utils/list.d.ts +1 -0
- package/dist/utils/list.d.ts.map +1 -0
- package/dist/utils/textTransform.d.ts +1 -0
- package/dist/utils/textTransform.d.ts.map +1 -0
- package/package.json +3 -2
|
@@ -81,3 +81,4 @@ export declare function splitParagraphByHardBreaks(paragraph: Paragraph): Paragr
|
|
|
81
81
|
* Get the full text of a paragraph (for INDEX_CONSIST checks).
|
|
82
82
|
*/
|
|
83
83
|
export declare function getParagraphText(paragraph: Paragraph): string;
|
|
84
|
+
//# sourceMappingURL=DocumentCompiler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DocumentCompiler.d.ts","sourceRoot":"","sources":["../../src/compile/DocumentCompiler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAiB,MAAM,sBAAsB,CAAC;AAM9E,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAe/C,CAAC;AAEF,gEAAgE;AAChE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAI/E;AAED,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,GAAG,MAAM,CAK7E;AAED,8CAA8C;AAC9C,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC3B,wGAAwG;IACxG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE;QACR,gBAAgB,EAAE,MAAM,CAAC;QACzB,cAAc,EAAE,MAAM,CAAC;QACvB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,KAAK,EAAE,OAAO,CAAC;QACf,YAAY,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;KACxC,CAAC;CACH;AAcD;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAIjE;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAMnE;AAID;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,sBAAsB,EAAE,CA+D/E;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS,EAAE,CAoD5E;AAOD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAE7D"}
|
package/dist/index.browser.d.ts
CHANGED
|
@@ -4,11 +4,20 @@
|
|
|
4
4
|
* Re-exports all browser-safe APIs. Forces bundlers to inline the modules
|
|
5
5
|
* by using a single `export *`/re-export style that bun build inlines.
|
|
6
6
|
*
|
|
7
|
+
* ## Stability
|
|
8
|
+
*
|
|
9
|
+
* - **Stable**: types, layout engines, font metrics provider, compiler
|
|
10
|
+
* - **@beta** — may change with reasonable notice
|
|
11
|
+
* - **@internal** — implementation details, not for external use
|
|
12
|
+
*
|
|
7
13
|
* ❌ NOT exported: SystemFontRegistry / systemFontRegistry — requires `node:fs`
|
|
8
14
|
*/
|
|
9
15
|
export { ParagraphLayoutEngine, paragraphLayoutEngine } from './layout/ParagraphLayoutEngine.js';
|
|
16
|
+
/** @internal */
|
|
10
17
|
export { positionLines } from './layout/PositioningEngine.js';
|
|
18
|
+
/** @internal */
|
|
11
19
|
export { assertLineInvariants, linesToYAML } from './layout/LineBoxValidator.js';
|
|
20
|
+
export { groupLinesByParagraph } from './utils/groupLinesByParagraph.js';
|
|
12
21
|
export { layoutTextFrame } from './layout/TextFrameLayoutEngine.js';
|
|
13
22
|
export { applyScale, findScale } from './layout/AutoFitEngine.js';
|
|
14
23
|
export { compileParagraph, getParagraphText, makeFontToken, collapseSegmentWhitespace, splitParagraphByHardBreaks } from './compile/DocumentCompiler.js';
|
|
@@ -16,48 +25,15 @@ export { FontMetricsProvider, fontMetricsProvider } from './measure/FontMetricsP
|
|
|
16
25
|
export { createFontFace, getGlyphAdvance, computePixelMetrics, isFontEngineAvailable } from './measure/FontEngine.js';
|
|
17
26
|
export { getFontBuffer } from './utils/font.js';
|
|
18
27
|
export { FontNotFoundError } from './measure/FontNotFoundError.js';
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
leftIndent?: number;
|
|
26
|
-
rightIndent?: number;
|
|
27
|
-
textIndent?: number;
|
|
28
|
-
letterSpacing?: number;
|
|
29
|
-
textAlignLast?: import("./index.js").TextAlignLast;
|
|
30
|
-
wordBreak?: import("./index.js").WordBreak;
|
|
31
|
-
lineBreak?: import("./index.js").LineBreak;
|
|
32
|
-
overflowWrap?: import("./index.js").OverflowWrap;
|
|
33
|
-
hyphens?: boolean;
|
|
34
|
-
whiteSpace?: import("./index.js").WhiteSpace;
|
|
35
|
-
listStyle?: import("./index.js").ListStyle;
|
|
36
|
-
listRestart?: boolean;
|
|
37
|
-
};
|
|
38
|
-
export declare const DEFAULT_TEXT_STYLE: {
|
|
39
|
-
type?: "text" | "inline-box" | undefined;
|
|
40
|
-
text?: string | undefined;
|
|
41
|
-
inlineWidget?: import("./index.js").InlineWidget | undefined;
|
|
42
|
-
fontFamily?: string | undefined;
|
|
43
|
-
fontSize?: number | undefined;
|
|
44
|
-
fontWeight?: number | "bold" | "normal" | undefined;
|
|
45
|
-
fontStyle?: "normal" | "italic" | undefined;
|
|
46
|
-
color?: string | undefined;
|
|
47
|
-
backgroundColor?: string | undefined;
|
|
48
|
-
letterSpacing?: number | undefined;
|
|
49
|
-
script?: import("./index.js").ScriptType | undefined;
|
|
50
|
-
underline?: boolean | undefined;
|
|
51
|
-
strikethrough?: boolean | undefined;
|
|
52
|
-
overline?: boolean | undefined;
|
|
53
|
-
textDecorationStyle?: import("./index.js").TextDecorationStyle | undefined;
|
|
54
|
-
textDecorationColor?: string | undefined;
|
|
55
|
-
textTransform?: import("./index.js").TextTransform | undefined;
|
|
56
|
-
fullWidth?: boolean | undefined;
|
|
57
|
-
fullSizeKana?: boolean | undefined;
|
|
58
|
-
};
|
|
28
|
+
import type { ParagraphStyle, TextRun } from './types/Document.js';
|
|
29
|
+
/** @internal */
|
|
30
|
+
export declare const DEFAULT_PARAGRAPH_STYLE: ParagraphStyle;
|
|
31
|
+
/** @internal */
|
|
32
|
+
export declare const DEFAULT_TEXT_STYLE: Partial<TextRun>;
|
|
33
|
+
/** @internal */
|
|
59
34
|
export { transformText } from './utils/textTransform.js';
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
35
|
+
/** @internal */
|
|
36
|
+
export declare const BULLET_CHARACTERS: Record<number, string>;
|
|
37
|
+
/** @internal */
|
|
63
38
|
export { formatListNumber, defaultBulletChar } from './utils/list.js';
|
|
39
|
+
//# sourceMappingURL=index.browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.browser.d.ts","sourceRoot":"","sources":["../src/index.browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAEjG,gBAAgB;AAChB,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,gBAAgB;AAChB,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAGjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAGzE,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAGpE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAGlE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAGzJ,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC5F,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACtH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAOnE,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnE,gBAAgB;AAChB,eAAO,MAAM,uBAAuB,EAAE,cAA4B,CAAC;AACnE,gBAAgB;AAChB,eAAO,MAAM,kBAAkB,EAAE,OAAO,CAAC,OAAO,CAAe,CAAC;AAEhE,gBAAgB;AAChB,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGzD,gBAAgB;AAChB,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAc,CAAC;AACpE,gBAAgB;AAChB,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/index.browser.js
CHANGED
|
@@ -18124,33 +18124,31 @@ function splitParagraphByHardBreaks(paragraph) {
|
|
|
18124
18124
|
const result = [];
|
|
18125
18125
|
let currentRuns = [];
|
|
18126
18126
|
for (const run of paragraph.children) {
|
|
18127
|
-
const
|
|
18127
|
+
const segments = run.text.split(`
|
|
18128
18128
|
`);
|
|
18129
|
-
if (
|
|
18129
|
+
if (segments.length === 1) {
|
|
18130
18130
|
currentRuns.push({ ...run });
|
|
18131
18131
|
continue;
|
|
18132
18132
|
}
|
|
18133
|
-
|
|
18134
|
-
|
|
18135
|
-
|
|
18136
|
-
|
|
18137
|
-
|
|
18138
|
-
|
|
18139
|
-
|
|
18140
|
-
|
|
18141
|
-
|
|
18142
|
-
|
|
18143
|
-
|
|
18144
|
-
|
|
18145
|
-
|
|
18146
|
-
|
|
18147
|
-
|
|
18148
|
-
|
|
18149
|
-
|
|
18150
|
-
|
|
18151
|
-
|
|
18152
|
-
} else {
|
|
18153
|
-
currentRuns = [];
|
|
18133
|
+
for (let i = 0;i < segments.length; i++) {
|
|
18134
|
+
const seg = segments[i];
|
|
18135
|
+
const textTransform = run.textTransform;
|
|
18136
|
+
const effectiveFontSize = computeEffFs(run);
|
|
18137
|
+
if (i === 0) {
|
|
18138
|
+
if (seg.length > 0) {
|
|
18139
|
+
const text = ws === "pre-line" ? collapseSegmentWhitespace(seg) : seg;
|
|
18140
|
+
currentRuns.push({ ...run, text: transformText(text, textTransform) });
|
|
18141
|
+
}
|
|
18142
|
+
} else {
|
|
18143
|
+
result.push({ style: paragraph.style, children: currentRuns });
|
|
18144
|
+
if (seg.length > 0) {
|
|
18145
|
+
const text = ws === "pre-line" ? collapseSegmentWhitespace(seg) : seg;
|
|
18146
|
+
currentRuns = [{ ...run, text: transformText(text, textTransform) }];
|
|
18147
|
+
} else {
|
|
18148
|
+
result.push({ style: paragraph.style, children: [] });
|
|
18149
|
+
currentRuns = [];
|
|
18150
|
+
}
|
|
18151
|
+
}
|
|
18154
18152
|
}
|
|
18155
18153
|
}
|
|
18156
18154
|
result.push({ style: paragraph.style, children: currentRuns });
|
|
@@ -18200,12 +18198,31 @@ function normaliseWeight(weight) {
|
|
|
18200
18198
|
return mapped;
|
|
18201
18199
|
return weight;
|
|
18202
18200
|
}
|
|
18203
|
-
function
|
|
18204
|
-
|
|
18201
|
+
function weightToNumber(weight) {
|
|
18202
|
+
const num = parseInt(weight, 10);
|
|
18203
|
+
return isNaN(num) ? 400 : num;
|
|
18204
|
+
}
|
|
18205
|
+
function variantKey(weight, style) {
|
|
18206
|
+
return `${normaliseWeight(weight)}_${style}`;
|
|
18207
|
+
}
|
|
18208
|
+
function nearestWeight(registeredWeights, requested) {
|
|
18209
|
+
if (registeredWeights.length === 0)
|
|
18210
|
+
return null;
|
|
18211
|
+
let best = registeredWeights[0];
|
|
18212
|
+
let bestDist = Math.abs(best - requested);
|
|
18213
|
+
for (let i = 1;i < registeredWeights.length; i++) {
|
|
18214
|
+
const w = registeredWeights[i];
|
|
18215
|
+
const dist = Math.abs(w - requested);
|
|
18216
|
+
if (dist < bestDist || dist === bestDist && w > best) {
|
|
18217
|
+
best = w;
|
|
18218
|
+
bestDist = dist;
|
|
18219
|
+
}
|
|
18220
|
+
}
|
|
18221
|
+
return best;
|
|
18205
18222
|
}
|
|
18206
18223
|
|
|
18207
18224
|
class FontMetricsProvider {
|
|
18208
|
-
|
|
18225
|
+
registry = new Map;
|
|
18209
18226
|
metricsCache = new Map;
|
|
18210
18227
|
mode = "browser";
|
|
18211
18228
|
pendingRegistrations = new Set;
|
|
@@ -18229,7 +18246,7 @@ class FontMetricsProvider {
|
|
|
18229
18246
|
this.mode = mode;
|
|
18230
18247
|
this.metricsCache.clear();
|
|
18231
18248
|
if (mode === "office") {
|
|
18232
|
-
enableOfficeTextMeasure(this.
|
|
18249
|
+
enableOfficeTextMeasure(this._flattenCache());
|
|
18233
18250
|
} else {
|
|
18234
18251
|
disableOfficeTextMeasure();
|
|
18235
18252
|
}
|
|
@@ -18237,6 +18254,15 @@ class FontMetricsProvider {
|
|
|
18237
18254
|
getMode() {
|
|
18238
18255
|
return this.mode;
|
|
18239
18256
|
}
|
|
18257
|
+
_flattenCache() {
|
|
18258
|
+
const flat = new Map;
|
|
18259
|
+
for (const [family, variants] of this.registry) {
|
|
18260
|
+
for (const [vKey, font] of variants) {
|
|
18261
|
+
flat.set(`${family}_${vKey}`, font);
|
|
18262
|
+
}
|
|
18263
|
+
}
|
|
18264
|
+
return flat;
|
|
18265
|
+
}
|
|
18240
18266
|
async registerFont(family, options, source, sourcePath) {
|
|
18241
18267
|
const promise = this._registerFontInternal(family, options, source, sourcePath);
|
|
18242
18268
|
this.pendingRegistrations.add(promise);
|
|
@@ -18254,9 +18280,18 @@ class FontMetricsProvider {
|
|
|
18254
18280
|
source = await getFontBuffer2(source);
|
|
18255
18281
|
}
|
|
18256
18282
|
const font = await createFontFace2(source);
|
|
18257
|
-
const
|
|
18258
|
-
|
|
18259
|
-
|
|
18283
|
+
const w = options.weight || "normal";
|
|
18284
|
+
const s = options.style || "normal";
|
|
18285
|
+
const vKey = variantKey(w, s);
|
|
18286
|
+
if (!this.registry.has(family)) {
|
|
18287
|
+
this.registry.set(family, new Map);
|
|
18288
|
+
}
|
|
18289
|
+
this.registry.get(family).set(vKey, font);
|
|
18290
|
+
for (const key of this.metricsCache.keys()) {
|
|
18291
|
+
if (key.startsWith(family)) {
|
|
18292
|
+
this.metricsCache.delete(key);
|
|
18293
|
+
}
|
|
18294
|
+
}
|
|
18260
18295
|
if (sourcePath) {
|
|
18261
18296
|
registerCanvasFont2(sourcePath, family);
|
|
18262
18297
|
}
|
|
@@ -18264,22 +18299,88 @@ class FontMetricsProvider {
|
|
|
18264
18299
|
async waitForPendingRegistrations() {
|
|
18265
18300
|
await Promise.all(this.pendingRegistrations);
|
|
18266
18301
|
}
|
|
18302
|
+
getRegisteredFamilies() {
|
|
18303
|
+
return Array.from(this.registry.keys());
|
|
18304
|
+
}
|
|
18305
|
+
getFamilyVariants(family) {
|
|
18306
|
+
const variants = this.registry.get(family);
|
|
18307
|
+
return variants ? Array.from(variants.keys()) : [];
|
|
18308
|
+
}
|
|
18267
18309
|
getFont(family, weight = "normal", style = "normal") {
|
|
18268
|
-
const
|
|
18269
|
-
|
|
18310
|
+
const resolved = this._resolveFont(family, weight, style);
|
|
18311
|
+
if (!resolved)
|
|
18312
|
+
return;
|
|
18313
|
+
return resolved.font;
|
|
18314
|
+
}
|
|
18315
|
+
_resolveFont(family, weight, style) {
|
|
18316
|
+
const variants = this.registry.get(family);
|
|
18317
|
+
if (!variants || variants.size === 0)
|
|
18318
|
+
return null;
|
|
18319
|
+
const normalisedW = normaliseWeight(weight);
|
|
18320
|
+
const normalisedS = style;
|
|
18321
|
+
let key = variantKey(normalisedW, normalisedS);
|
|
18322
|
+
let font = variants.get(key);
|
|
18323
|
+
if (font)
|
|
18324
|
+
return { font, resolvedWeight: normalisedW, resolvedStyle: normalisedS };
|
|
18325
|
+
if (normalisedS === "italic") {
|
|
18326
|
+
key = variantKey(normalisedW, "normal");
|
|
18327
|
+
font = variants.get(key);
|
|
18328
|
+
if (font)
|
|
18329
|
+
return { font, resolvedWeight: normalisedW, resolvedStyle: "normal" };
|
|
18330
|
+
}
|
|
18331
|
+
const sameStyleWeights = [];
|
|
18332
|
+
for (const vKey of variants.keys()) {
|
|
18333
|
+
const [_w, _s] = vKey.split("_");
|
|
18334
|
+
if (_s === normalisedS) {
|
|
18335
|
+
sameStyleWeights.push(weightToNumber(_w));
|
|
18336
|
+
}
|
|
18337
|
+
}
|
|
18338
|
+
const sameStyleNearest = nearestWeight(sameStyleWeights, weightToNumber(normalisedW));
|
|
18339
|
+
if (sameStyleNearest !== null) {
|
|
18340
|
+
key = variantKey(String(sameStyleNearest), normalisedS);
|
|
18341
|
+
font = variants.get(key);
|
|
18342
|
+
if (font)
|
|
18343
|
+
return { font, resolvedWeight: String(sameStyleNearest), resolvedStyle: normalisedS };
|
|
18344
|
+
}
|
|
18345
|
+
if (normalisedS === "italic") {
|
|
18346
|
+
const normalWeights = [];
|
|
18347
|
+
for (const vKey of variants.keys()) {
|
|
18348
|
+
const [_w, _s] = vKey.split("_");
|
|
18349
|
+
if (_s === "normal") {
|
|
18350
|
+
normalWeights.push(weightToNumber(_w));
|
|
18351
|
+
}
|
|
18352
|
+
}
|
|
18353
|
+
const normalNearest = nearestWeight(normalWeights, weightToNumber(normalisedW));
|
|
18354
|
+
if (normalNearest !== null) {
|
|
18355
|
+
key = variantKey(String(normalNearest), "normal");
|
|
18356
|
+
font = variants.get(key);
|
|
18357
|
+
if (font)
|
|
18358
|
+
return { font, resolvedWeight: String(normalNearest), resolvedStyle: "normal" };
|
|
18359
|
+
}
|
|
18360
|
+
}
|
|
18361
|
+
const firstKey = variants.keys().next().value;
|
|
18362
|
+
if (firstKey) {
|
|
18363
|
+
font = variants.get(firstKey);
|
|
18364
|
+
if (font) {
|
|
18365
|
+
const [_w, _s] = firstKey.split("_");
|
|
18366
|
+
return { font, resolvedWeight: _w, resolvedStyle: _s };
|
|
18367
|
+
}
|
|
18368
|
+
}
|
|
18369
|
+
return null;
|
|
18270
18370
|
}
|
|
18271
18371
|
getMetrics(fontFamily, fontSize, weight = "normal", style = "normal") {
|
|
18272
18372
|
const _process2 = typeof globalThis !== "undefined" ? globalThis.process : undefined;
|
|
18273
18373
|
if (this.pendingRegistrations.size > 0 && _process2?.env?.NODE_ENV !== "production") {
|
|
18274
18374
|
console.warn("[vyaz] getMetrics() called while registerFont() promises are still pending. Wait for registerFont() to resolve before layout to avoid inaccurate metrics. Use fontMetricsProvider.waitForPendingRegistrations() if needed.");
|
|
18275
18375
|
}
|
|
18276
|
-
const
|
|
18277
|
-
const metricsKey = `${
|
|
18376
|
+
const normalisedW = normaliseWeight(weight);
|
|
18377
|
+
const metricsKey = `${fontFamily}_${normalisedW}_${style}_${fontSize}_${this.mode}`;
|
|
18278
18378
|
const cached = this.metricsCache.get(metricsKey);
|
|
18279
18379
|
if (cached)
|
|
18280
18380
|
return cached;
|
|
18281
|
-
const
|
|
18282
|
-
if (
|
|
18381
|
+
const resolved = this._resolveFont(fontFamily, weight, style);
|
|
18382
|
+
if (resolved) {
|
|
18383
|
+
const font = resolved.font;
|
|
18283
18384
|
const scale = fontSize / font.unitsPerEm;
|
|
18284
18385
|
let ascent;
|
|
18285
18386
|
let descent;
|
|
@@ -18303,7 +18404,7 @@ class FontMetricsProvider {
|
|
|
18303
18404
|
this.metricsCache.set(metricsKey, metrics);
|
|
18304
18405
|
return metrics;
|
|
18305
18406
|
}
|
|
18306
|
-
if (this.
|
|
18407
|
+
if (this.registry.has(fontFamily)) {
|
|
18307
18408
|
throw new FontNotFoundError(fontFamily, weight, style);
|
|
18308
18409
|
}
|
|
18309
18410
|
if (typeof document !== "undefined") {
|
|
@@ -24368,15 +24469,15 @@ function isLineStartCursor(cursor) {
|
|
|
24368
24469
|
return cursor.segmentIndex === 0 && cursor.graphemeIndex === 0;
|
|
24369
24470
|
}
|
|
24370
24471
|
function getCollapsedSpaceWidth(font, letterSpacing, cache) {
|
|
24371
|
-
const
|
|
24372
|
-
const cached = cache.get(
|
|
24472
|
+
const cacheKey2 = `${font}\x00${letterSpacing}`;
|
|
24473
|
+
const cached = cache.get(cacheKey2);
|
|
24373
24474
|
if (cached !== undefined)
|
|
24374
24475
|
return cached;
|
|
24375
24476
|
const options = letterSpacing === 0 ? undefined : { letterSpacing };
|
|
24376
24477
|
const joinedWidth = measureNaturalWidth(prepareWithSegments("A A", font, options));
|
|
24377
24478
|
const compactWidth = measureNaturalWidth(prepareWithSegments("AA", font, options));
|
|
24378
24479
|
const collapsedWidth = Math.max(0, joinedWidth - compactWidth);
|
|
24379
|
-
cache.set(
|
|
24480
|
+
cache.set(cacheKey2, collapsedWidth);
|
|
24380
24481
|
return collapsedWidth;
|
|
24381
24482
|
}
|
|
24382
24483
|
function prepareWholeItemLine(prepared) {
|
|
@@ -24621,11 +24722,11 @@ class ParagraphLayoutEngine {
|
|
|
24621
24722
|
layout(paragraph, maxWidth, yOffset = 0, fontProvider, listStyle, listIndex, listMarkerWidth) {
|
|
24622
24723
|
const provider = fontProvider || fontMetricsProvider;
|
|
24623
24724
|
const items = compileParagraph(paragraph);
|
|
24624
|
-
const
|
|
24625
|
-
let prepared = this.preparedCache.get(
|
|
24725
|
+
const cacheKey2 = JSON.stringify(paragraph);
|
|
24726
|
+
let prepared = this.preparedCache.get(cacheKey2);
|
|
24626
24727
|
if (!prepared) {
|
|
24627
24728
|
prepared = prepareRichInline(items);
|
|
24628
|
-
this.preparedCache.set(
|
|
24729
|
+
this.preparedCache.set(cacheKey2, prepared);
|
|
24629
24730
|
}
|
|
24630
24731
|
const effectiveMaxWidth = paragraph.style.whiteSpace === "nowrap" ? Infinity : maxWidth;
|
|
24631
24732
|
const pretextLines = [];
|
|
@@ -24701,6 +24802,31 @@ class ParagraphLayoutEngine {
|
|
|
24701
24802
|
}
|
|
24702
24803
|
}
|
|
24703
24804
|
var paragraphLayoutEngine = new ParagraphLayoutEngine;
|
|
24805
|
+
// src/utils/groupLinesByParagraph.ts
|
|
24806
|
+
function groupLinesByParagraph(lines) {
|
|
24807
|
+
const map = new Map;
|
|
24808
|
+
for (const line of lines) {
|
|
24809
|
+
const idx = line.spans[0]?.pIdx ?? -1;
|
|
24810
|
+
let entry = map.get(idx);
|
|
24811
|
+
if (!entry) {
|
|
24812
|
+
entry = { lines: [] };
|
|
24813
|
+
map.set(idx, entry);
|
|
24814
|
+
}
|
|
24815
|
+
entry.lines.push(line);
|
|
24816
|
+
if (!entry.tag) {
|
|
24817
|
+
entry.tag = line.spans[0]?.tag;
|
|
24818
|
+
}
|
|
24819
|
+
}
|
|
24820
|
+
const groups = [];
|
|
24821
|
+
const sortedKeys = Array.from(map.keys()).sort((a, b) => a - b);
|
|
24822
|
+
for (const key of sortedKeys) {
|
|
24823
|
+
if (key === -1)
|
|
24824
|
+
continue;
|
|
24825
|
+
const entry = map.get(key);
|
|
24826
|
+
groups.push({ lines: entry.lines, pIdx: key, tag: entry.tag });
|
|
24827
|
+
}
|
|
24828
|
+
return groups;
|
|
24829
|
+
}
|
|
24704
24830
|
// src/layout/TextFrameLayoutEngine.ts
|
|
24705
24831
|
function getMarkerTextHelper(listStyle, listIndex) {
|
|
24706
24832
|
if (listStyle.type === "bullet") {
|
|
@@ -24989,6 +25115,7 @@ export {
|
|
|
24989
25115
|
linesToYAML,
|
|
24990
25116
|
layoutTextFrame,
|
|
24991
25117
|
isFontEngineAvailable,
|
|
25118
|
+
groupLinesByParagraph,
|
|
24992
25119
|
getParagraphText,
|
|
24993
25120
|
getGlyphAdvance,
|
|
24994
25121
|
getFontBuffer,
|
package/dist/index.d.ts
CHANGED
|
@@ -1,54 +1,34 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @vyaz/core — Public API.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* ## Stability
|
|
5
|
+
*
|
|
6
|
+
* - **Stable**: types, layout engines, font metrics provider, compiler
|
|
7
|
+
* - **@beta** — may change with reasonable notice
|
|
8
|
+
* - **@internal** — implementation details, not for external use
|
|
9
|
+
*
|
|
10
|
+
* ## Environments
|
|
11
|
+
*
|
|
12
|
+
* - `index.ts` (Node.js / Bun) — full API including SystemFontRegistry
|
|
13
|
+
* - `index.browser.ts` (browser) — browser-safe subset (no node:fs)
|
|
6
14
|
*/
|
|
7
15
|
export type { TextFrame, Paragraph, ParagraphStyle, TextRun, InlineWidget, AutofitConfig, TextAlignment, WritingMode, TextOrientation, VerticalAlignment, ScriptType, WhiteSpace, MultiColumnConfig, DominantBaseline, LineFitEdge, TextAlignLast, WordBreak, LineBreak, OverflowWrap, TextDecorationStyle, TextTransform, ListType, NumberFormat, ListStylePosition, ListStyle, } from './types/Document.js';
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
indent?: number;
|
|
14
|
-
leftIndent?: number;
|
|
15
|
-
rightIndent?: number;
|
|
16
|
-
textIndent?: number;
|
|
17
|
-
letterSpacing?: number;
|
|
18
|
-
textAlignLast?: import("./index.js").TextAlignLast;
|
|
19
|
-
wordBreak?: import("./index.js").WordBreak;
|
|
20
|
-
lineBreak?: import("./index.js").LineBreak;
|
|
21
|
-
overflowWrap?: import("./index.js").OverflowWrap;
|
|
22
|
-
hyphens?: boolean;
|
|
23
|
-
whiteSpace?: import("./index.js").WhiteSpace;
|
|
24
|
-
listStyle?: import("./index.js").ListStyle;
|
|
25
|
-
listRestart?: boolean;
|
|
26
|
-
};
|
|
27
|
-
export declare const DEFAULT_TEXT_STYLE: {
|
|
28
|
-
type?: "text" | "inline-box" | undefined;
|
|
29
|
-
text?: string | undefined;
|
|
30
|
-
inlineWidget?: import("./index.js").InlineWidget | undefined;
|
|
31
|
-
fontFamily?: string | undefined;
|
|
32
|
-
fontSize?: number | undefined;
|
|
33
|
-
fontWeight?: number | "bold" | "normal" | undefined;
|
|
34
|
-
fontStyle?: "normal" | "italic" | undefined;
|
|
35
|
-
color?: string | undefined;
|
|
36
|
-
backgroundColor?: string | undefined;
|
|
37
|
-
letterSpacing?: number | undefined;
|
|
38
|
-
script?: import("./index.js").ScriptType | undefined;
|
|
39
|
-
underline?: boolean | undefined;
|
|
40
|
-
strikethrough?: boolean | undefined;
|
|
41
|
-
overline?: boolean | undefined;
|
|
42
|
-
textDecorationStyle?: import("./index.js").TextDecorationStyle | undefined;
|
|
43
|
-
textDecorationColor?: string | undefined;
|
|
44
|
-
textTransform?: import("./index.js").TextTransform | undefined;
|
|
45
|
-
fullWidth?: boolean | undefined;
|
|
46
|
-
fullSizeKana?: boolean | undefined;
|
|
47
|
-
};
|
|
16
|
+
import type { ParagraphStyle } from './types/Document.js';
|
|
17
|
+
/** @internal */
|
|
18
|
+
export declare const DEFAULT_PARAGRAPH_STYLE: ParagraphStyle;
|
|
19
|
+
/** @internal */
|
|
20
|
+
export declare const DEFAULT_TEXT_STYLE: Partial<import('./types/Document.js').TextRun>;
|
|
48
21
|
export type { ParagraphLayoutResult, Line, Span, SpanFontMetrics, SemanticParagraph, SemanticLine, SemanticFragment, } from './types/LayoutTypes.js';
|
|
49
22
|
export type { FontMetrics, IFontMetricsProvider, GlyphData, } from './types/FontTypes.js';
|
|
50
23
|
export { ParagraphLayoutEngine, paragraphLayoutEngine } from './layout/ParagraphLayoutEngine.js';
|
|
24
|
+
/**
|
|
25
|
+
* @internal List layout positions lines within a paragraph box.
|
|
26
|
+
* Used internally by ParagraphLayoutEngine.
|
|
27
|
+
*/
|
|
51
28
|
export { positionLines } from './layout/PositioningEngine.js';
|
|
29
|
+
/**
|
|
30
|
+
* @internal Line box invariant checks for debugging.
|
|
31
|
+
*/
|
|
52
32
|
export { assertLineInvariants, linesToYAML } from './layout/LineBoxValidator.js';
|
|
53
33
|
export type { InvariantError } from './layout/LineBoxValidator.js';
|
|
54
34
|
export { layoutTextFrame } from './layout/TextFrameLayoutEngine.js';
|
|
@@ -57,13 +37,17 @@ export { applyScale, findScale } from './layout/AutoFitEngine.js';
|
|
|
57
37
|
export type { AutoFitOptions, AutoFitResult } from './layout/AutoFitEngine.js';
|
|
58
38
|
export { groupLinesByParagraph } from './utils/groupLinesByParagraph.js';
|
|
59
39
|
export type { ParagraphGroup } from './utils/groupLinesByParagraph.js';
|
|
40
|
+
/**
|
|
41
|
+
* @internal Text transformation (uppercase, lowercase, capitalize).
|
|
42
|
+
*/
|
|
60
43
|
export { transformText } from './utils/textTransform.js';
|
|
61
|
-
import {
|
|
62
|
-
|
|
63
|
-
export declare const
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
44
|
+
import type { NumberFormat } from './types/Document.js';
|
|
45
|
+
/** @internal */
|
|
46
|
+
export declare const formatListNumber: (n: number, format: NumberFormat) => string;
|
|
47
|
+
/** @internal */
|
|
48
|
+
export declare const defaultBulletChar: (level: number) => string;
|
|
49
|
+
/** @internal */
|
|
50
|
+
export declare const BULLET_CHARACTERS: Record<number, string>;
|
|
67
51
|
export { compileParagraph, getParagraphText, makeFontToken, splitParagraphByHardBreaks, collapseSegmentWhitespace } from './compile/DocumentCompiler.js';
|
|
68
52
|
export type { PreparedRichInlineItem } from './compile/DocumentCompiler.js';
|
|
69
53
|
export type { FontFace } from './measure/FontEngine.js';
|
|
@@ -72,3 +56,4 @@ export { FontMetricsProvider, fontMetricsProvider } from './measure/FontMetricsP
|
|
|
72
56
|
export { SystemFontRegistry, systemFontRegistry } from './measure/SystemFontRegistry.js';
|
|
73
57
|
export { getFontBuffer } from './utils/font.js';
|
|
74
58
|
export { FontNotFoundError } from './measure/FontNotFoundError.js';
|
|
59
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,YAAY,EACV,SAAS,EACT,SAAS,EACT,cAAc,EACd,OAAO,EACP,YAAY,EACZ,aAAa,EACb,aAAa,EACb,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,SAAS,EACT,SAAS,EACT,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,iBAAiB,EACjB,SAAS,GACV,MAAM,qBAAqB,CAAC;AAK7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,gBAAgB;AAChB,eAAO,MAAM,uBAAuB,EAAE,cAA6B,CAAC;AACpE,gBAAgB;AAChB,eAAO,MAAM,kBAAkB,EAAE,OAAO,CAAC,OAAO,qBAAqB,EAAE,OAAO,CAAgB,CAAC;AAG/F,YAAY,EACV,qBAAqB,EACrB,IAAI,EACJ,IAAI,EACJ,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAGhC,YAAY,EACV,WAAW,EACX,oBAAoB,EACpB,SAAS,GACV,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAEjG;;;GAGG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAE9D;;GAEG;AACH,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AACjF,YAAY,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAGnE,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,YAAY,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAG/E,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAClE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,YAAY,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAEvE;;GAEG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAIzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,gBAAgB;AAChB,eAAO,MAAM,gBAAgB,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,KAAK,MAAa,CAAC;AAClF,gBAAgB;AAChB,eAAO,MAAM,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAa,CAAC;AACjE,gBAAgB;AAChB,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAe,CAAC;AAGrE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,0BAA0B,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AACzJ,YAAY,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAG5E,YAAY,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGtH,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAG5F,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAGzF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -421,33 +421,31 @@ function splitParagraphByHardBreaks(paragraph) {
|
|
|
421
421
|
const result = [];
|
|
422
422
|
let currentRuns = [];
|
|
423
423
|
for (const run of paragraph.children) {
|
|
424
|
-
const
|
|
424
|
+
const segments = run.text.split(`
|
|
425
425
|
`);
|
|
426
|
-
if (
|
|
426
|
+
if (segments.length === 1) {
|
|
427
427
|
currentRuns.push({ ...run });
|
|
428
428
|
continue;
|
|
429
429
|
}
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
} else {
|
|
450
|
-
currentRuns = [];
|
|
430
|
+
for (let i = 0;i < segments.length; i++) {
|
|
431
|
+
const seg = segments[i];
|
|
432
|
+
const textTransform = run.textTransform;
|
|
433
|
+
const effectiveFontSize = computeEffFs(run);
|
|
434
|
+
if (i === 0) {
|
|
435
|
+
if (seg.length > 0) {
|
|
436
|
+
const text = ws === "pre-line" ? collapseSegmentWhitespace(seg) : seg;
|
|
437
|
+
currentRuns.push({ ...run, text: transformText(text, textTransform) });
|
|
438
|
+
}
|
|
439
|
+
} else {
|
|
440
|
+
result.push({ style: paragraph.style, children: currentRuns });
|
|
441
|
+
if (seg.length > 0) {
|
|
442
|
+
const text = ws === "pre-line" ? collapseSegmentWhitespace(seg) : seg;
|
|
443
|
+
currentRuns = [{ ...run, text: transformText(text, textTransform) }];
|
|
444
|
+
} else {
|
|
445
|
+
result.push({ style: paragraph.style, children: [] });
|
|
446
|
+
currentRuns = [];
|
|
447
|
+
}
|
|
448
|
+
}
|
|
451
449
|
}
|
|
452
450
|
}
|
|
453
451
|
result.push({ style: paragraph.style, children: currentRuns });
|
|
@@ -497,12 +495,31 @@ function normaliseWeight(weight) {
|
|
|
497
495
|
return mapped;
|
|
498
496
|
return weight;
|
|
499
497
|
}
|
|
500
|
-
function
|
|
501
|
-
|
|
498
|
+
function weightToNumber(weight) {
|
|
499
|
+
const num = parseInt(weight, 10);
|
|
500
|
+
return isNaN(num) ? 400 : num;
|
|
501
|
+
}
|
|
502
|
+
function variantKey(weight, style) {
|
|
503
|
+
return `${normaliseWeight(weight)}_${style}`;
|
|
504
|
+
}
|
|
505
|
+
function nearestWeight(registeredWeights, requested) {
|
|
506
|
+
if (registeredWeights.length === 0)
|
|
507
|
+
return null;
|
|
508
|
+
let best = registeredWeights[0];
|
|
509
|
+
let bestDist = Math.abs(best - requested);
|
|
510
|
+
for (let i = 1;i < registeredWeights.length; i++) {
|
|
511
|
+
const w = registeredWeights[i];
|
|
512
|
+
const dist = Math.abs(w - requested);
|
|
513
|
+
if (dist < bestDist || dist === bestDist && w > best) {
|
|
514
|
+
best = w;
|
|
515
|
+
bestDist = dist;
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
return best;
|
|
502
519
|
}
|
|
503
520
|
|
|
504
521
|
class FontMetricsProvider {
|
|
505
|
-
|
|
522
|
+
registry = new Map;
|
|
506
523
|
metricsCache = new Map;
|
|
507
524
|
mode = "browser";
|
|
508
525
|
pendingRegistrations = new Set;
|
|
@@ -526,7 +543,7 @@ class FontMetricsProvider {
|
|
|
526
543
|
this.mode = mode;
|
|
527
544
|
this.metricsCache.clear();
|
|
528
545
|
if (mode === "office") {
|
|
529
|
-
enableOfficeTextMeasure(this.
|
|
546
|
+
enableOfficeTextMeasure(this._flattenCache());
|
|
530
547
|
} else {
|
|
531
548
|
disableOfficeTextMeasure();
|
|
532
549
|
}
|
|
@@ -534,6 +551,15 @@ class FontMetricsProvider {
|
|
|
534
551
|
getMode() {
|
|
535
552
|
return this.mode;
|
|
536
553
|
}
|
|
554
|
+
_flattenCache() {
|
|
555
|
+
const flat = new Map;
|
|
556
|
+
for (const [family, variants] of this.registry) {
|
|
557
|
+
for (const [vKey, font] of variants) {
|
|
558
|
+
flat.set(`${family}_${vKey}`, font);
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
return flat;
|
|
562
|
+
}
|
|
537
563
|
async registerFont(family, options, source, sourcePath) {
|
|
538
564
|
const promise = this._registerFontInternal(family, options, source, sourcePath);
|
|
539
565
|
this.pendingRegistrations.add(promise);
|
|
@@ -551,9 +577,18 @@ class FontMetricsProvider {
|
|
|
551
577
|
source = await getFontBuffer2(source);
|
|
552
578
|
}
|
|
553
579
|
const font = await createFontFace2(source);
|
|
554
|
-
const
|
|
555
|
-
|
|
556
|
-
|
|
580
|
+
const w = options.weight || "normal";
|
|
581
|
+
const s = options.style || "normal";
|
|
582
|
+
const vKey = variantKey(w, s);
|
|
583
|
+
if (!this.registry.has(family)) {
|
|
584
|
+
this.registry.set(family, new Map);
|
|
585
|
+
}
|
|
586
|
+
this.registry.get(family).set(vKey, font);
|
|
587
|
+
for (const key of this.metricsCache.keys()) {
|
|
588
|
+
if (key.startsWith(family)) {
|
|
589
|
+
this.metricsCache.delete(key);
|
|
590
|
+
}
|
|
591
|
+
}
|
|
557
592
|
if (sourcePath) {
|
|
558
593
|
registerCanvasFont2(sourcePath, family);
|
|
559
594
|
}
|
|
@@ -561,22 +596,88 @@ class FontMetricsProvider {
|
|
|
561
596
|
async waitForPendingRegistrations() {
|
|
562
597
|
await Promise.all(this.pendingRegistrations);
|
|
563
598
|
}
|
|
599
|
+
getRegisteredFamilies() {
|
|
600
|
+
return Array.from(this.registry.keys());
|
|
601
|
+
}
|
|
602
|
+
getFamilyVariants(family) {
|
|
603
|
+
const variants = this.registry.get(family);
|
|
604
|
+
return variants ? Array.from(variants.keys()) : [];
|
|
605
|
+
}
|
|
564
606
|
getFont(family, weight = "normal", style = "normal") {
|
|
565
|
-
const
|
|
566
|
-
|
|
607
|
+
const resolved = this._resolveFont(family, weight, style);
|
|
608
|
+
if (!resolved)
|
|
609
|
+
return;
|
|
610
|
+
return resolved.font;
|
|
611
|
+
}
|
|
612
|
+
_resolveFont(family, weight, style) {
|
|
613
|
+
const variants = this.registry.get(family);
|
|
614
|
+
if (!variants || variants.size === 0)
|
|
615
|
+
return null;
|
|
616
|
+
const normalisedW = normaliseWeight(weight);
|
|
617
|
+
const normalisedS = style;
|
|
618
|
+
let key = variantKey(normalisedW, normalisedS);
|
|
619
|
+
let font = variants.get(key);
|
|
620
|
+
if (font)
|
|
621
|
+
return { font, resolvedWeight: normalisedW, resolvedStyle: normalisedS };
|
|
622
|
+
if (normalisedS === "italic") {
|
|
623
|
+
key = variantKey(normalisedW, "normal");
|
|
624
|
+
font = variants.get(key);
|
|
625
|
+
if (font)
|
|
626
|
+
return { font, resolvedWeight: normalisedW, resolvedStyle: "normal" };
|
|
627
|
+
}
|
|
628
|
+
const sameStyleWeights = [];
|
|
629
|
+
for (const vKey of variants.keys()) {
|
|
630
|
+
const [_w, _s] = vKey.split("_");
|
|
631
|
+
if (_s === normalisedS) {
|
|
632
|
+
sameStyleWeights.push(weightToNumber(_w));
|
|
633
|
+
}
|
|
634
|
+
}
|
|
635
|
+
const sameStyleNearest = nearestWeight(sameStyleWeights, weightToNumber(normalisedW));
|
|
636
|
+
if (sameStyleNearest !== null) {
|
|
637
|
+
key = variantKey(String(sameStyleNearest), normalisedS);
|
|
638
|
+
font = variants.get(key);
|
|
639
|
+
if (font)
|
|
640
|
+
return { font, resolvedWeight: String(sameStyleNearest), resolvedStyle: normalisedS };
|
|
641
|
+
}
|
|
642
|
+
if (normalisedS === "italic") {
|
|
643
|
+
const normalWeights = [];
|
|
644
|
+
for (const vKey of variants.keys()) {
|
|
645
|
+
const [_w, _s] = vKey.split("_");
|
|
646
|
+
if (_s === "normal") {
|
|
647
|
+
normalWeights.push(weightToNumber(_w));
|
|
648
|
+
}
|
|
649
|
+
}
|
|
650
|
+
const normalNearest = nearestWeight(normalWeights, weightToNumber(normalisedW));
|
|
651
|
+
if (normalNearest !== null) {
|
|
652
|
+
key = variantKey(String(normalNearest), "normal");
|
|
653
|
+
font = variants.get(key);
|
|
654
|
+
if (font)
|
|
655
|
+
return { font, resolvedWeight: String(normalNearest), resolvedStyle: "normal" };
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
const firstKey = variants.keys().next().value;
|
|
659
|
+
if (firstKey) {
|
|
660
|
+
font = variants.get(firstKey);
|
|
661
|
+
if (font) {
|
|
662
|
+
const [_w, _s] = firstKey.split("_");
|
|
663
|
+
return { font, resolvedWeight: _w, resolvedStyle: _s };
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
return null;
|
|
567
667
|
}
|
|
568
668
|
getMetrics(fontFamily, fontSize, weight = "normal", style = "normal") {
|
|
569
669
|
const _process2 = typeof globalThis !== "undefined" ? globalThis.process : undefined;
|
|
570
670
|
if (this.pendingRegistrations.size > 0 && _process2?.env?.NODE_ENV !== "production") {
|
|
571
671
|
console.warn("[vyaz] getMetrics() called while registerFont() promises are still pending. Wait for registerFont() to resolve before layout to avoid inaccurate metrics. Use fontMetricsProvider.waitForPendingRegistrations() if needed.");
|
|
572
672
|
}
|
|
573
|
-
const
|
|
574
|
-
const metricsKey = `${
|
|
673
|
+
const normalisedW = normaliseWeight(weight);
|
|
674
|
+
const metricsKey = `${fontFamily}_${normalisedW}_${style}_${fontSize}_${this.mode}`;
|
|
575
675
|
const cached = this.metricsCache.get(metricsKey);
|
|
576
676
|
if (cached)
|
|
577
677
|
return cached;
|
|
578
|
-
const
|
|
579
|
-
if (
|
|
678
|
+
const resolved = this._resolveFont(fontFamily, weight, style);
|
|
679
|
+
if (resolved) {
|
|
680
|
+
const font = resolved.font;
|
|
580
681
|
const scale = fontSize / font.unitsPerEm;
|
|
581
682
|
let ascent;
|
|
582
683
|
let descent;
|
|
@@ -600,7 +701,7 @@ class FontMetricsProvider {
|
|
|
600
701
|
this.metricsCache.set(metricsKey, metrics);
|
|
601
702
|
return metrics;
|
|
602
703
|
}
|
|
603
|
-
if (this.
|
|
704
|
+
if (this.registry.has(fontFamily)) {
|
|
604
705
|
throw new FontNotFoundError(fontFamily, weight, style);
|
|
605
706
|
}
|
|
606
707
|
if (typeof document !== "undefined") {
|
|
@@ -1170,11 +1271,11 @@ class ParagraphLayoutEngine {
|
|
|
1170
1271
|
layout(paragraph, maxWidth, yOffset = 0, fontProvider, listStyle, listIndex, listMarkerWidth) {
|
|
1171
1272
|
const provider = fontProvider || fontMetricsProvider;
|
|
1172
1273
|
const items = compileParagraph(paragraph);
|
|
1173
|
-
const
|
|
1174
|
-
let prepared = this.preparedCache.get(
|
|
1274
|
+
const cacheKey2 = JSON.stringify(paragraph);
|
|
1275
|
+
let prepared = this.preparedCache.get(cacheKey2);
|
|
1175
1276
|
if (!prepared) {
|
|
1176
1277
|
prepared = prepareRichInline(items);
|
|
1177
|
-
this.preparedCache.set(
|
|
1278
|
+
this.preparedCache.set(cacheKey2, prepared);
|
|
1178
1279
|
}
|
|
1179
1280
|
const effectiveMaxWidth = paragraph.style.whiteSpace === "nowrap" ? Infinity : maxWidth;
|
|
1180
1281
|
const pretextLines = [];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AutoFitEngine.d.ts","sourceRoot":"","sources":["../../src/layout/AutoFitEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,sBAAsB;AACtB,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAAqB;AACrB,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,SAAS,EACd,KAAK,EAAE,MAAM,GACZ,SAAS,CAcX;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CACvB,GAAG,EAAE,SAAS,EACd,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EACrE,MAAM,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAC/C,OAAO,CAAC,EAAE,cAAc,GACvB,aAAa,CAoCf"}
|
|
@@ -23,3 +23,4 @@ export declare function assertLineInvariants(lines: Line[], originalText: string
|
|
|
23
23
|
* No glyphAdvances, fontMetrics (noise), inlineWidget.
|
|
24
24
|
*/
|
|
25
25
|
export declare function linesToYAML(lines: Line[], paragraphWidth: number, paragraphHeight: number): string;
|
|
26
|
+
//# sourceMappingURL=LineBoxValidator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LineBoxValidator.d.ts","sourceRoot":"","sources":["../../src/layout/LineBoxValidator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,IAAI,EAA2B,MAAM,yBAAyB,CAAC;AAM7E,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,GAAG,CAAC;CACf;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,IAAI,EAAE,EACb,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GACf,IAAI,CAqFN;AAYD;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,IAAI,EAAE,EACb,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,MAAM,GACtB,MAAM,CAwBR"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ParagraphLayoutEngine.d.ts","sourceRoot":"","sources":["../../src/layout/ParagraphLayoutEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAqCrE,qBAAa,qBAAqB;IAChC,OAAO,CAAC,aAAa,CAAyC;IAE9D;;;;;;;OAOG;IACH,MAAM,CACJ,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,MAAU,EACnB,YAAY,CAAC,EAAE,oBAAoB,EACnC,SAAS,CAAC,EAAE,SAAS,EACrB,SAAS,CAAC,EAAE,MAAM,EAClB,eAAe,CAAC,EAAE,MAAM,GACvB,qBAAqB;IA+HxB;;;;;OAKG;IACH,WAAW,CACT,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,MAAU,GAClB,qBAAqB;IAIxB;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;CAoC7B;AAED,gBAAgB;AAChB,eAAO,MAAM,qBAAqB,EAAE,qBAAmD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PositioningEngine.d.ts","sourceRoot":"","sources":["../../src/layout/PositioningEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAgB,MAAM,sBAAsB,CAAC;AACpF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,IAAI,EAAyB,MAAM,yBAAyB,CAAC;AAC3E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAO7E,UAAU,eAAe;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;IACvD,GAAG,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;CACtD;AAED,UAAU,WAAW;IACnB,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;CACtD;AA8CD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,aAAa,CAC3B,YAAY,EAAE,WAAW,EAAE,EAC3B,KAAK,EAAE,sBAAsB,EAAE,EAC/B,aAAa,EAAE,CAAC,IAAI,EAAE,sBAAsB,KAAK,WAAW,EAC5D,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,YAAI,EAClB,IAAI,EAAE,SAAS,GAAG,QAAQ,YAAY,EACtC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,MAAM,EACrH,GAAG,CAAC,EAAE,MAAM,EACZ,SAAS,CAAC,EAAE,SAAS,EACrB,SAAS,CAAC,EAAE,MAAM,EAClB,eAAe,CAAC,EAAE,MAAM,GACvB;IAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,CA8ezC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextFrameLayoutEngine.d.ts","sourceRoot":"","sources":["../../src/layout/TextFrameLayoutEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,EAAE,SAAS,EAA2C,MAAM,sBAAsB,CAAC;AAC/F,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAKpD;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6DAA6D;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,YAAY,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,aAAa,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,aAAa,EAAE,OAAO,GAAG,SAAS,CAAC;IACnC,mEAAmE;IACnE,WAAW,EAAE,OAAO,GAAG,SAAS,CAAC;CAClC;AAmED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,qBAAqB,CAoRvE"}
|
|
@@ -34,3 +34,4 @@ export type MeasureFn = (text: string) => number;
|
|
|
34
34
|
* @returns widths that sum to occupiedWidth (within floating point tolerance)
|
|
35
35
|
*/
|
|
36
36
|
export declare function resolveFragmentWidths(fragments: string[], fullText: string, occupiedWidth: number, measureFn: MeasureFn): number[];
|
|
37
|
+
//# sourceMappingURL=estimateWidth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"estimateWidth.d.ts","sourceRoot":"","sources":["../../src/layout/estimateWidth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAAE,EAClB,aAAa,EAAE,MAAM,GACpB,MAAM,EAAE,CAUV;AAID,MAAM,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;AAEjD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EAAE,EACnB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,SAAS,GACnB,MAAM,EAAE,CAaV"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FontEngine.d.ts","sourceRoot":"","sources":["../../src/measure/FontEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAKzD,8DAA8D;AAC9D,MAAM,WAAW,QAAQ;IACvB,kEAAkE;IAClE,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC;IACnB,kDAAkD;IAClD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAkDD;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAQxF;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIhF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,WAAW,CAqB7G;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC,CAO9D"}
|
|
@@ -2,34 +2,66 @@
|
|
|
2
2
|
* FontMetricsProvider.ts — isomorphic font metrics provider.
|
|
3
3
|
*
|
|
4
4
|
* Strategy (priority):
|
|
5
|
-
* 1. FontEngine (fontkit) — from registered buffer
|
|
6
|
-
* - 'browser' mode: hhea.ascender / hhea.descender
|
|
7
|
-
* - 'office' mode: OS/2.usWinAscent / OS/2.usWinDescent
|
|
5
|
+
* 1. FontEngine (fontkit) — from registered buffer, with smart weight fallback
|
|
8
6
|
* 2. Canvas TextMetrics (browser fallback when fontkit unavailable)
|
|
9
7
|
*
|
|
10
|
-
*
|
|
8
|
+
* Key features:
|
|
9
|
+
* - Nested registry: family → variants (weight + style)
|
|
10
|
+
* - Smart weight fallback: if exact weight not found, picks closest
|
|
11
|
+
* - Style fallback: if exact style not found, falls back to 'normal'
|
|
12
|
+
* - Tracks pending registrations to warn about race conditions
|
|
13
|
+
* - Reusable off-screen canvas for Canvas TextMetrics fallback
|
|
11
14
|
*/
|
|
12
15
|
import type { FontMetrics, IFontMetricsProvider } from '../types/FontTypes.js';
|
|
13
16
|
import type { FontFace } from './FontEngine.js';
|
|
14
17
|
/**
|
|
15
18
|
* Factor used when a glyph is not found in the font.
|
|
16
19
|
* Multiplied by fontSize to estimate the missing glyph width.
|
|
17
|
-
* Used across all measurement code paths (ParagraphLayoutEngine, canvas-polyfill).
|
|
18
20
|
*/
|
|
19
21
|
export declare const MISSING_GLYPH_FACTOR = 0.5;
|
|
22
|
+
/**
|
|
23
|
+
* Font metrics provider — registers, resolves, and measures fonts.
|
|
24
|
+
*
|
|
25
|
+
* Public API (stable):
|
|
26
|
+
* - `registerFont()`
|
|
27
|
+
* - `getMetrics()`
|
|
28
|
+
* - `getFont()`
|
|
29
|
+
* - `setMode()` / `getMode()`
|
|
30
|
+
*
|
|
31
|
+
* Semi-stable (@beta — may change with notice):
|
|
32
|
+
* - `waitForPendingRegistrations()`
|
|
33
|
+
* - `getRegisteredFamilies()`
|
|
34
|
+
* - `getFamilyVariants()`
|
|
35
|
+
*
|
|
36
|
+
* Everything else is internal.
|
|
37
|
+
*/
|
|
20
38
|
export declare class FontMetricsProvider implements IFontMetricsProvider {
|
|
21
|
-
/**
|
|
22
|
-
private
|
|
39
|
+
/** @internal Nested registry: family → variantKey → FontFace */
|
|
40
|
+
private registry;
|
|
41
|
+
/** @internal Metrics cache keyed by variantKey_fontSize_mode */
|
|
23
42
|
private metricsCache;
|
|
43
|
+
/** @internal */
|
|
24
44
|
private mode;
|
|
25
|
-
/** Set of in-flight registerFont() promises for race-condition guarding */
|
|
45
|
+
/** @internal Set of in-flight registerFont() promises for race-condition guarding */
|
|
26
46
|
private pendingRegistrations;
|
|
47
|
+
/** @internal Reusable off-screen canvas for Canvas TextMetrics fallback */
|
|
27
48
|
private _measureCanvas;
|
|
49
|
+
/** @internal */
|
|
28
50
|
private _measureCtx;
|
|
29
|
-
/** Get or create a reusable canvas context
|
|
51
|
+
/** @internal Get or create a reusable canvas context */
|
|
30
52
|
private _getMeasureContext;
|
|
53
|
+
/**
|
|
54
|
+
* Set measurement mode.
|
|
55
|
+
* - `'browser'` — hhea.ascender/descender (default)
|
|
56
|
+
* - `'office'` — OS/2.usWinAscent/usWinDescent
|
|
57
|
+
*/
|
|
31
58
|
setMode(mode: 'browser' | 'office'): void;
|
|
59
|
+
/** Get current measurement mode. */
|
|
32
60
|
getMode(): 'browser' | 'office';
|
|
61
|
+
/**
|
|
62
|
+
* @internal Flatten the nested registry for office mode.
|
|
63
|
+
*/
|
|
64
|
+
private _flattenCache;
|
|
33
65
|
/**
|
|
34
66
|
* Register a binary font for use with fontkit.
|
|
35
67
|
*
|
|
@@ -37,9 +69,6 @@ export declare class FontMetricsProvider implements IFontMetricsProvider {
|
|
|
37
69
|
* In the browser the caller must provide font bytes (e.g. fetched via
|
|
38
70
|
* `getFontBuffer()` from `../utils/font.js`).
|
|
39
71
|
*
|
|
40
|
-
* Tracks pending registrations to detect race conditions where
|
|
41
|
-
* getMetrics() is called before registration completes.
|
|
42
|
-
*
|
|
43
72
|
* @param source Font file bytes (ArrayBuffer / Uint8Array), or a URL string
|
|
44
73
|
* @param sourcePath Optional filesystem path (used for @napi-rs/canvas in Node.js)
|
|
45
74
|
*/
|
|
@@ -47,19 +76,49 @@ export declare class FontMetricsProvider implements IFontMetricsProvider {
|
|
|
47
76
|
weight?: string;
|
|
48
77
|
style?: string;
|
|
49
78
|
}, source: string | ArrayBuffer | Uint8Array, sourcePath?: string): Promise<void>;
|
|
50
|
-
/** Internal registration logic
|
|
79
|
+
/** @internal Internal registration logic */
|
|
51
80
|
private _registerFontInternal;
|
|
52
81
|
/**
|
|
53
82
|
* Wait for all in-flight font registrations to complete.
|
|
54
83
|
* Useful after a batch of registerFont() calls before layout.
|
|
84
|
+
*
|
|
85
|
+
* @beta — may change with notice
|
|
55
86
|
*/
|
|
56
87
|
waitForPendingRegistrations(): Promise<void>;
|
|
57
88
|
/**
|
|
58
|
-
*
|
|
59
|
-
*
|
|
89
|
+
* List all families registered in the provider.
|
|
90
|
+
*
|
|
91
|
+
* @beta — may change with notice
|
|
92
|
+
*/
|
|
93
|
+
getRegisteredFamilies(): string[];
|
|
94
|
+
/**
|
|
95
|
+
* Get all variant keys registered for a given family.
|
|
96
|
+
* Returns empty array if family not found.
|
|
97
|
+
*
|
|
98
|
+
* @beta — may change with notice
|
|
99
|
+
*/
|
|
100
|
+
getFamilyVariants(family: string): string[];
|
|
101
|
+
/**
|
|
102
|
+
* Get font engine FontFace for per-character calculations.
|
|
103
|
+
* Uses the same smart fallback logic as getMetrics().
|
|
60
104
|
*/
|
|
61
105
|
getFont(family: string, weight?: string, style?: string): FontFace | undefined;
|
|
106
|
+
/**
|
|
107
|
+
* @internal Resolve a font request with fallback.
|
|
108
|
+
* Returns { font, resolvedWeight, resolvedStyle } or null.
|
|
109
|
+
*/
|
|
110
|
+
private _resolveFont;
|
|
111
|
+
/**
|
|
112
|
+
* Get pixel-scale metrics for a given font family, size, weight, and style.
|
|
113
|
+
*
|
|
114
|
+
* Resolution order:
|
|
115
|
+
* 1. FontEngine (fontkit) from registry — with smart weight/style fallback
|
|
116
|
+
* 2. Canvas TextMetrics (browser fallback when fontkit unavailable)
|
|
117
|
+
*
|
|
118
|
+
* @throws FontNotFoundError when font is neither registered nor available via Canvas
|
|
119
|
+
*/
|
|
62
120
|
getMetrics(fontFamily: string, fontSize: number, weight?: string, style?: string): FontMetrics;
|
|
63
121
|
}
|
|
64
122
|
/** Singleton */
|
|
65
123
|
export declare const fontMetricsProvider: FontMetricsProvider;
|
|
124
|
+
//# sourceMappingURL=FontMetricsProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FontMetricsProvider.d.ts","sourceRoot":"","sources":["../../src/measure/FontMetricsProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAMhD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAyExC;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,mBAAoB,YAAW,oBAAoB;IAC9D,gEAAgE;IAChE,OAAO,CAAC,QAAQ,CAA4C;IAE5D,gEAAgE;IAChE,OAAO,CAAC,YAAY,CAAkC;IAEtD,gBAAgB;IAChB,OAAO,CAAC,IAAI,CAAmC;IAE/C,qFAAqF;IACrF,OAAO,CAAC,oBAAoB,CAA4B;IAExD,2EAA2E;IAC3E,OAAO,CAAC,cAAc,CAAoD;IAC1E,gBAAgB;IAChB,OAAO,CAAC,WAAW,CAA6E;IAEhG,wDAAwD;IACxD,OAAO,CAAC,kBAAkB;IAe1B;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,IAAI;IAWzC,oCAAoC;IACpC,OAAO,IAAI,SAAS,GAAG,QAAQ;IAI/B;;OAEG;IACH,OAAO,CAAC,aAAa;IAYrB;;;;;;;;;OASG;IACG,YAAY,CAChB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAC5C,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,UAAU,EACzC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC;IAUhB,4CAA4C;YAC9B,qBAAqB;IAmCnC;;;;;OAKG;IACG,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC;IAMlD;;;;OAIG;IACH,qBAAqB,IAAI,MAAM,EAAE;IAIjC;;;;;OAKG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAO3C;;;OAGG;IACH,OAAO,CACL,MAAM,EAAE,MAAM,EACd,MAAM,SAAW,EACjB,KAAK,SAAW,GACf,QAAQ,GAAG,SAAS;IAMvB;;;OAGG;IACH,OAAO,CAAC,YAAY;IAsEpB;;;;;;;;OAQG;IACH,UAAU,CACR,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,SAAW,EACjB,KAAK,SAAW,GACf,WAAW;CA6Ef;AAED,gBAAgB;AAChB,eAAO,MAAM,mBAAmB,EAAE,mBAA+C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FontNotFoundError.d.ts","sourceRoot":"","sources":["../../src/measure/FontNotFoundError.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;gBAExC,MAAM,EAAE,MAAM,EACd,MAAM,SAAW,EACjB,KAAK,SAAW;CAQnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SystemFontRegistry.d.ts","sourceRoot":"","sources":["../../src/measure/SystemFontRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,UAAU,UAAU;IAClB,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;CACpB;AA4CD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAC,SAAS,CAAqB;IAE7C,4CAA4C;IAC5C,OAAO,CAAC,UAAU,CAA2B;IAE7C,OAAO;IAEP,MAAM,KAAK,QAAQ,IAAI,kBAAkB,CAKxC;IAED;;;;;;;;OAQG;IACG,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC;IA8CjC;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAIrC;;OAEG;IACH,qBAAqB,IAAI,MAAM,EAAE;CAGlC;AAED,yBAAyB;AACzB,eAAO,MAAM,kBAAkB,EAAE,kBAAgD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvas-polyfill.d.ts","sourceRoot":"","sources":["../../src/measure/canvas-polyfill.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAwLH;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAUzE;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CASzE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAS/C"}
|
package/dist/types/Document.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Document.d.ts","sourceRoot":"","sources":["../../src/types/Document.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FontTypes.d.ts","sourceRoot":"","sources":["../../src/types/FontTypes.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,6DAA6D;AAC7D,MAAM,WAAW,WAAW;IAC1B,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;CACvD;AAED,8CAA8C;AAC9C,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC;IAE1C;;OAEG;IACH,OAAO,IAAI,SAAS,GAAG,QAAQ,CAAC;IAEhC;;;;;OAKG;IACH,YAAY,CACV,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,EAC5C,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,UAAU,CAAC,EAAE,MAAM,GAClB,IAAI,CAAC;IAER;;OAEG;IACH,UAAU,CACR,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,MAAM,GACb,WAAW,CAAC;CAChB;AAED,gFAAgF;AAChF,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,CAAC,EAAE,MAAM,CAAC;CACX"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LayoutTypes.d.ts","sourceRoot":"","sources":["../../src/types/LayoutTypes.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/env.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,0EAA0E;AAC1E,eAAO,MAAM,UAAU,EAAE,OAGmB,CAAC"}
|
package/dist/utils/font.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"font.d.ts","sourceRoot":"","sources":["../../src/utils/font.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAWzE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"groupLinesByParagraph.d.ts","sourceRoot":"","sources":["../../src/utils/groupLinesByParagraph.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,+BAA+B;IAC/B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,cAAc,EAAE,CA2BrE"}
|
package/dist/utils/list.d.ts
CHANGED
|
@@ -39,3 +39,4 @@ export declare function defaultBulletChar(level: number): string;
|
|
|
39
39
|
* @see {@link https://www.w3.org/TR/css-counter-styles-3/ | CSS Counter Styles Level 3}
|
|
40
40
|
*/
|
|
41
41
|
export declare function formatListNumber(n: number, format: NumberFormat): string;
|
|
42
|
+
//# sourceMappingURL=list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/utils/list.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAIpD,CAAC;AAKF;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,CAexE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textTransform.d.ts","sourceRoot":"","sources":["../../src/utils/textTransform.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,aAAa,GAAG,MAAM,CA8D7E"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vyaz/core",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.14",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -28,7 +28,8 @@
|
|
|
28
28
|
"child_process": false
|
|
29
29
|
},
|
|
30
30
|
"scripts": {
|
|
31
|
-
"build": "bun build ./src/index.ts --outdir ./dist --target bun --external @chenglou/pretext --external js-yaml --external @napi-rs/canvas --external fontkit --external get-system-fonts && bun build ./src/index.browser.ts --outdir ./dist --outfile ./dist/index.browser.js --target browser && tsc
|
|
31
|
+
"build": "bun build ./src/index.ts --outdir ./dist --target bun --external @chenglou/pretext --external js-yaml --external @napi-rs/canvas --external fontkit --external get-system-fonts && bun build ./src/index.browser.ts --outdir ./dist --outfile ./dist/index.browser.js --target browser && tsc -b",
|
|
32
|
+
"prepublishOnly": "bun run build",
|
|
32
33
|
"test": "bun test"
|
|
33
34
|
},
|
|
34
35
|
"dependencies": {
|