postext 0.3.5 → 0.3.7
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/__tests__/exports.test.js +1 -0
- package/dist/__tests__/exports.test.js.map +1 -1
- package/dist/canvas-backend/blockRender.d.ts +3 -0
- package/dist/canvas-backend/blockRender.d.ts.map +1 -0
- package/dist/canvas-backend/blockRender.js +176 -0
- package/dist/canvas-backend/blockRender.js.map +1 -0
- package/dist/canvas-backend/decorations.d.ts +6 -0
- package/dist/canvas-backend/decorations.d.ts.map +1 -0
- package/dist/canvas-backend/decorations.js +106 -0
- package/dist/canvas-backend/decorations.js.map +1 -0
- package/dist/{canvas-backend.d.ts → canvas-backend/index.d.ts} +2 -2
- package/dist/canvas-backend/index.d.ts.map +1 -0
- package/dist/canvas-backend/index.js +66 -0
- package/dist/canvas-backend/index.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/knuthPlass/breakpoints.d.ts +6 -0
- package/dist/knuthPlass/breakpoints.d.ts.map +1 -0
- package/dist/knuthPlass/breakpoints.js +284 -0
- package/dist/knuthPlass/breakpoints.js.map +1 -0
- package/dist/knuthPlass/constants.d.ts +8 -0
- package/dist/knuthPlass/constants.d.ts.map +1 -0
- package/dist/knuthPlass/constants.js +8 -0
- package/dist/knuthPlass/constants.js.map +1 -0
- package/dist/knuthPlass/index.d.ts +12 -0
- package/dist/knuthPlass/index.d.ts.map +1 -0
- package/dist/knuthPlass/index.js +11 -0
- package/dist/knuthPlass/index.js.map +1 -0
- package/dist/knuthPlass/pretextAdapter.d.ts +12 -0
- package/dist/knuthPlass/pretextAdapter.d.ts.map +1 -0
- package/dist/knuthPlass/pretextAdapter.js +178 -0
- package/dist/knuthPlass/pretextAdapter.js.map +1 -0
- package/dist/knuthPlass/richAdapter.d.ts +26 -0
- package/dist/knuthPlass/richAdapter.d.ts.map +1 -0
- package/dist/knuthPlass/richAdapter.js +189 -0
- package/dist/knuthPlass/richAdapter.js.map +1 -0
- package/dist/{knuthPlass.d.ts → knuthPlass/types.d.ts} +1 -31
- package/dist/knuthPlass/types.d.ts.map +1 -0
- package/dist/knuthPlass/types.js +5 -0
- package/dist/knuthPlass/types.js.map +1 -0
- package/dist/knuthPlass/utils.d.ts +2 -0
- package/dist/knuthPlass/utils.d.ts.map +1 -0
- package/dist/knuthPlass/utils.js +4 -0
- package/dist/knuthPlass/utils.js.map +1 -0
- package/dist/math/rasterCache.d.ts.map +1 -1
- package/dist/math/rasterCache.js +29 -6
- package/dist/math/rasterCache.js.map +1 -1
- package/dist/measure/cache.d.ts +5 -0
- package/dist/measure/cache.d.ts.map +1 -0
- package/dist/measure/cache.js +38 -0
- package/dist/measure/cache.js.map +1 -0
- package/dist/measure/canvas.d.ts +8 -0
- package/dist/measure/canvas.d.ts.map +1 -0
- package/dist/measure/canvas.js +30 -0
- package/dist/measure/canvas.js.map +1 -0
- package/dist/measure/font.d.ts +19 -0
- package/dist/measure/font.d.ts.map +1 -0
- package/dist/measure/font.js +34 -0
- package/dist/measure/font.js.map +1 -0
- package/dist/measure/index.d.ts +7 -0
- package/dist/measure/index.d.ts.map +1 -0
- package/dist/measure/index.js +6 -0
- package/dist/measure/index.js.map +1 -0
- package/dist/measure/plain.d.ts +13 -0
- package/dist/measure/plain.d.ts.map +1 -0
- package/dist/measure/plain.js +167 -0
- package/dist/measure/plain.js.map +1 -0
- package/dist/measure/rich.d.ts +25 -0
- package/dist/measure/rich.d.ts.map +1 -0
- package/dist/measure/rich.js +246 -0
- package/dist/measure/rich.js.map +1 -0
- package/dist/measure/types.d.ts +28 -0
- package/dist/measure/types.d.ts.map +1 -0
- package/dist/measure/types.js +2 -0
- package/dist/measure/types.js.map +1 -0
- package/dist/parse/blockParser.d.ts +28 -0
- package/dist/parse/blockParser.d.ts.map +1 -0
- package/dist/parse/blockParser.js +302 -0
- package/dist/parse/blockParser.js.map +1 -0
- package/dist/parse/index.d.ts +4 -0
- package/dist/parse/index.d.ts.map +1 -0
- package/dist/parse/index.js +3 -0
- package/dist/parse/index.js.map +1 -0
- package/dist/parse/inlineFormatting.d.ts +12 -0
- package/dist/parse/inlineFormatting.d.ts.map +1 -0
- package/dist/parse/inlineFormatting.js +90 -0
- package/dist/parse/inlineFormatting.js.map +1 -0
- package/dist/parse/inlineMath.d.ts +29 -0
- package/dist/parse/inlineMath.d.ts.map +1 -0
- package/dist/parse/inlineMath.js +141 -0
- package/dist/parse/inlineMath.js.map +1 -0
- package/dist/parse/sourceMapping.d.ts +12 -0
- package/dist/parse/sourceMapping.d.ts.map +1 -0
- package/dist/parse/sourceMapping.js +130 -0
- package/dist/parse/sourceMapping.js.map +1 -0
- package/dist/{parse.d.ts → parse/types.d.ts} +2 -25
- package/dist/parse/types.d.ts.map +1 -0
- package/dist/parse/types.js +2 -0
- package/dist/parse/types.js.map +1 -0
- package/dist/pipeline/build.d.ts +13 -1
- package/dist/pipeline/build.d.ts.map +1 -1
- package/dist/pipeline/build.js +43 -277
- package/dist/pipeline/build.js.map +1 -1
- package/dist/pipeline/buildBlockKind.d.ts +33 -0
- package/dist/pipeline/buildBlockKind.d.ts.map +1 -0
- package/dist/pipeline/buildBlockKind.js +82 -0
- package/dist/pipeline/buildBlockKind.js.map +1 -0
- package/dist/pipeline/buildHelpers.d.ts +47 -0
- package/dist/pipeline/buildHelpers.d.ts.map +1 -0
- package/dist/pipeline/buildHelpers.js +169 -0
- package/dist/pipeline/buildHelpers.js.map +1 -0
- package/dist/pipeline/buildMeasurement.d.ts +27 -0
- package/dist/pipeline/buildMeasurement.d.ts.map +1 -0
- package/dist/pipeline/buildMeasurement.js +49 -0
- package/dist/pipeline/buildMeasurement.js.map +1 -0
- package/dist/pipeline/index.d.ts +2 -1
- package/dist/pipeline/index.d.ts.map +1 -1
- package/dist/pipeline/index.js +1 -1
- package/dist/pipeline/index.js.map +1 -1
- package/dist/worker/client.d.ts +21 -0
- package/dist/worker/client.d.ts.map +1 -0
- package/dist/worker/client.js +98 -0
- package/dist/worker/client.js.map +1 -0
- package/dist/worker/layout.worker.d.ts +2 -0
- package/dist/worker/layout.worker.d.ts.map +1 -0
- package/dist/worker/layout.worker.js +121 -0
- package/dist/worker/layout.worker.js.map +1 -0
- package/dist/worker/protocol.d.ts +43 -0
- package/dist/worker/protocol.d.ts.map +1 -0
- package/dist/worker/protocol.js +2 -0
- package/dist/worker/protocol.js.map +1 -0
- package/package.json +9 -1
- package/dist/canvas-backend.d.ts.map +0 -1
- package/dist/canvas-backend.js +0 -370
- package/dist/canvas-backend.js.map +0 -1
- package/dist/knuthPlass.d.ts.map +0 -1
- package/dist/knuthPlass.js +0 -665
- package/dist/knuthPlass.js.map +0 -1
- package/dist/measure.d.ts +0 -61
- package/dist/measure.d.ts.map +0 -1
- package/dist/measure.js +0 -512
- package/dist/measure.js.map +0 -1
- package/dist/parse.d.ts.map +0 -1
- package/dist/parse.js +0 -653
- package/dist/parse.js.map +0 -1
package/dist/knuthPlass.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"knuthPlass.js","sourceRoot":"","sources":["../src/knuthPlass.ts"],"names":[],"mappings":"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"}
|
package/dist/measure.d.ts
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import type { VDTLine } from './vdt';
|
|
2
|
-
import type { TextAlign, HyphenationLocale } from './types';
|
|
3
|
-
import type { InlineSpan } from './parse';
|
|
4
|
-
/**
|
|
5
|
-
* Build a CSS font shorthand string for canvas / pretext.
|
|
6
|
-
* Example: "75px EB Garamond"
|
|
7
|
-
*/
|
|
8
|
-
export declare function buildFontString(fontFamily: string, fontSizePx: number, weight?: string, style?: string): string;
|
|
9
|
-
/**
|
|
10
|
-
* Initializes the hyphenator for a given locale.
|
|
11
|
-
* Must be called before measureBlock is used with hyphenation.
|
|
12
|
-
*/
|
|
13
|
-
export declare function initHyphenator(locale: HyphenationLocale): void;
|
|
14
|
-
/**
|
|
15
|
-
* Clear pretext's internal measurement caches.
|
|
16
|
-
* Call this after fonts finish loading to ensure accurate measurements.
|
|
17
|
-
*/
|
|
18
|
-
export declare function clearMeasurementCache(): void;
|
|
19
|
-
export interface MeasuredBlock {
|
|
20
|
-
lines: VDTLine[];
|
|
21
|
-
totalHeight: number;
|
|
22
|
-
}
|
|
23
|
-
export interface MeasurementCache {
|
|
24
|
-
_blocks: Map<string, MeasuredBlock>;
|
|
25
|
-
}
|
|
26
|
-
export declare function createMeasurementCache(): MeasurementCache;
|
|
27
|
-
export declare function cachedMeasureBlock(text: string, font: string, maxWidthPx: number, lineHeightPx: number, options: MeasureBlockOptions | undefined, cache: MeasurementCache): MeasuredBlock;
|
|
28
|
-
export declare function cachedMeasureRichBlock(spans: InlineSpan[], normalFont: string, boldFont: string, italicFont: string, boldItalicFont: string, maxWidthPx: number, lineHeightPx: number, options: MeasureBlockOptions | undefined, cache: MeasurementCache): MeasuredBlock;
|
|
29
|
-
export interface MeasureBlockOptions {
|
|
30
|
-
textAlign?: TextAlign;
|
|
31
|
-
hyphenate?: boolean;
|
|
32
|
-
firstLineIndentPx?: number;
|
|
33
|
-
hangingIndent?: boolean;
|
|
34
|
-
/** Use Knuth-Plass optimal line breaking instead of greedy. */
|
|
35
|
-
optimal?: boolean;
|
|
36
|
-
/** Max space stretch ratio (for K-P glue model). Default 1.5. */
|
|
37
|
-
maxStretchRatio?: number;
|
|
38
|
-
/** Min space shrink ratio (for K-P glue model). Default 0.8. */
|
|
39
|
-
minShrinkRatio?: number;
|
|
40
|
-
/** Demerit for a too-short final line (runt). 0 disables. */
|
|
41
|
-
runtPenalty?: number;
|
|
42
|
-
/** Approximate minimum characters on the final line before runt penalty
|
|
43
|
-
* applies. Converted internally to a pixel threshold via normal space width. */
|
|
44
|
-
runtMinCharacters?: number;
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Measure a text block: break it into lines within maxWidthPx
|
|
48
|
-
* and return VDTLine data with bounding boxes.
|
|
49
|
-
*
|
|
50
|
-
* The returned lines have bbox positions relative to the block origin (0,0).
|
|
51
|
-
* The pipeline will offset them to absolute page coordinates later.
|
|
52
|
-
*/
|
|
53
|
-
export declare function measureBlock(text: string, font: string, maxWidthPx: number, lineHeightPx: number, options?: MeasureBlockOptions): MeasuredBlock;
|
|
54
|
-
/** Measure a short glyph (e.g. a list bullet) in the given font. */
|
|
55
|
-
export declare function measureGlyphWidth(text: string, font: string): number;
|
|
56
|
-
/**
|
|
57
|
-
* Measure a rich text block with mixed font weights.
|
|
58
|
-
* Uses canvas measureText for per-token measurement and greedy line-breaking.
|
|
59
|
-
*/
|
|
60
|
-
export declare function measureRichBlock(spans: InlineSpan[], normalFont: string, boldFont: string, italicFont: string, boldItalicFont: string, maxWidthPx: number, lineHeightPx: number, options?: MeasureBlockOptions): MeasuredBlock;
|
|
61
|
-
//# sourceMappingURL=measure.d.ts.map
|
package/dist/measure.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"measure.d.ts","sourceRoot":"","sources":["../src/measure.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAkB,MAAM,OAAO,CAAC;AAGrD,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAgB1C;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,MAAiB,EACzB,KAAK,GAAE,MAAiB,GACvB,MAAM,CAOR;AAkDD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAE9D;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAMD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAOD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CACrC;AAED,wBAAgB,sBAAsB,IAAI,gBAAgB,CAEzD;AAkCD,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,mBAAmB,GAAG,SAAS,EACxC,KAAK,EAAE,gBAAgB,GACtB,aAAa,CAOf;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,UAAU,EAAE,EACnB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,mBAAmB,GAAG,SAAS,EACxC,KAAK,EAAE,gBAAgB,GACtB,aAAa,CAOf;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,iEAAiE;IACjE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gEAAgE;IAChE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6DAA6D;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;qFACiF;IACjF,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAQD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,aAAa,CA+Gf;AAsFD,oEAAoE;AACpE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpE;AAoFD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,UAAU,EAAE,EACnB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,aAAa,CA6Lf"}
|
package/dist/measure.js
DELETED
|
@@ -1,512 +0,0 @@
|
|
|
1
|
-
import { prepareWithSegments, layoutNextLine, clearCache, } from '@chenglou/pretext';
|
|
2
|
-
import { createBoundingBox } from './vdt';
|
|
3
|
-
import { hyphenateText, setHyphenationLocale } from './hyphenate';
|
|
4
|
-
import { pretextSegmentsToItems, richTokensToItems, computeBreakpoints, reconstructPretextLines, reconstructRichLines, } from './knuthPlass';
|
|
5
|
-
const SOFT_HYPHEN = '\u00AD';
|
|
6
|
-
// ---------------------------------------------------------------------------
|
|
7
|
-
// Font string builder
|
|
8
|
-
// ---------------------------------------------------------------------------
|
|
9
|
-
/**
|
|
10
|
-
* Build a CSS font shorthand string for canvas / pretext.
|
|
11
|
-
* Example: "75px EB Garamond"
|
|
12
|
-
*/
|
|
13
|
-
export function buildFontString(fontFamily, fontSizePx, weight = 'normal', style = 'normal') {
|
|
14
|
-
const parts = [];
|
|
15
|
-
if (style !== 'normal')
|
|
16
|
-
parts.push(style);
|
|
17
|
-
if (weight !== 'normal')
|
|
18
|
-
parts.push(weight);
|
|
19
|
-
parts.push(`${fontSizePx}px`);
|
|
20
|
-
parts.push(fontFamily);
|
|
21
|
-
return parts.join(' ');
|
|
22
|
-
}
|
|
23
|
-
// ---------------------------------------------------------------------------
|
|
24
|
-
// Line segment extraction
|
|
25
|
-
// ---------------------------------------------------------------------------
|
|
26
|
-
function extractSegments(prepared, start, end) {
|
|
27
|
-
const result = [];
|
|
28
|
-
let hyphenated = false;
|
|
29
|
-
for (let i = start.segmentIndex; i < end.segmentIndex; i++) {
|
|
30
|
-
const seg = prepared.segments[i];
|
|
31
|
-
const w = prepared.widths[i];
|
|
32
|
-
if (seg === SOFT_HYPHEN) {
|
|
33
|
-
// If this is the last segment before the break, mark as hyphenated
|
|
34
|
-
if (i === end.segmentIndex - 1)
|
|
35
|
-
hyphenated = true;
|
|
36
|
-
continue;
|
|
37
|
-
}
|
|
38
|
-
if (seg.trim().length === 0) {
|
|
39
|
-
result.push({ kind: 'space', text: seg, width: w });
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
result.push({ kind: 'text', text: seg, width: w });
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
// Check if the break point is at a soft hyphen
|
|
46
|
-
if (!hyphenated && end.segmentIndex < prepared.segments.length) {
|
|
47
|
-
if (prepared.segments[end.segmentIndex] === SOFT_HYPHEN) {
|
|
48
|
-
hyphenated = true;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
// Trim trailing spaces
|
|
52
|
-
while (result.length > 0 && result[result.length - 1].kind === 'space') {
|
|
53
|
-
result.pop();
|
|
54
|
-
}
|
|
55
|
-
return { segments: result, hyphenated };
|
|
56
|
-
}
|
|
57
|
-
// ---------------------------------------------------------------------------
|
|
58
|
-
// Hyphenation initialization
|
|
59
|
-
// ---------------------------------------------------------------------------
|
|
60
|
-
/**
|
|
61
|
-
* Initializes the hyphenator for a given locale.
|
|
62
|
-
* Must be called before measureBlock is used with hyphenation.
|
|
63
|
-
*/
|
|
64
|
-
export function initHyphenator(locale) {
|
|
65
|
-
setHyphenationLocale(locale);
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Clear pretext's internal measurement caches.
|
|
69
|
-
* Call this after fonts finish loading to ensure accurate measurements.
|
|
70
|
-
*/
|
|
71
|
-
export function clearMeasurementCache() {
|
|
72
|
-
clearCache();
|
|
73
|
-
}
|
|
74
|
-
export function createMeasurementCache() {
|
|
75
|
-
return { _blocks: new Map() };
|
|
76
|
-
}
|
|
77
|
-
function buildPlainCacheKey(text, font, maxWidthPx, lineHeightPx, options) {
|
|
78
|
-
return `${text}\0${font}\0${maxWidthPx}\0${lineHeightPx}\0${options?.textAlign ?? ''}\0${options?.hyphenate ?? ''}\0${options?.firstLineIndentPx ?? ''}\0${options?.hangingIndent ?? ''}\0${options?.optimal ?? ''}\0${options?.maxStretchRatio ?? ''}\0${options?.minShrinkRatio ?? ''}\0${options?.runtPenalty ?? ''}\0${options?.runtMinCharacters ?? ''}`;
|
|
79
|
-
}
|
|
80
|
-
function buildRichCacheKey(spans, fonts, maxWidthPx, lineHeightPx, options) {
|
|
81
|
-
const spanKey = spans.map((s) => `${s.text}|${s.bold}|${s.italic}`).join('\x01');
|
|
82
|
-
return `R\0${spanKey}\0${fonts[0]}\0${fonts[1]}\0${fonts[2]}\0${fonts[3]}\0${maxWidthPx}\0${lineHeightPx}\0${options?.textAlign ?? ''}\0${options?.hyphenate ?? ''}\0${options?.firstLineIndentPx ?? ''}\0${options?.hangingIndent ?? ''}\0${options?.optimal ?? ''}\0${options?.maxStretchRatio ?? ''}\0${options?.minShrinkRatio ?? ''}\0${options?.runtPenalty ?? ''}\0${options?.runtMinCharacters ?? ''}`;
|
|
83
|
-
}
|
|
84
|
-
function cloneMeasuredBlock(block) {
|
|
85
|
-
return {
|
|
86
|
-
lines: block.lines.map((l) => ({
|
|
87
|
-
...l,
|
|
88
|
-
bbox: { ...l.bbox },
|
|
89
|
-
segments: l.segments ? l.segments.map((s) => ({ ...s })) : undefined,
|
|
90
|
-
})),
|
|
91
|
-
totalHeight: block.totalHeight,
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
export function cachedMeasureBlock(text, font, maxWidthPx, lineHeightPx, options, cache) {
|
|
95
|
-
const key = buildPlainCacheKey(text, font, maxWidthPx, lineHeightPx, options);
|
|
96
|
-
const cached = cache._blocks.get(key);
|
|
97
|
-
if (cached)
|
|
98
|
-
return cloneMeasuredBlock(cached);
|
|
99
|
-
const result = measureBlock(text, font, maxWidthPx, lineHeightPx, options);
|
|
100
|
-
cache._blocks.set(key, result);
|
|
101
|
-
return cloneMeasuredBlock(result);
|
|
102
|
-
}
|
|
103
|
-
export function cachedMeasureRichBlock(spans, normalFont, boldFont, italicFont, boldItalicFont, maxWidthPx, lineHeightPx, options, cache) {
|
|
104
|
-
const key = buildRichCacheKey(spans, [normalFont, boldFont, italicFont, boldItalicFont], maxWidthPx, lineHeightPx, options);
|
|
105
|
-
const cached = cache._blocks.get(key);
|
|
106
|
-
if (cached)
|
|
107
|
-
return cloneMeasuredBlock(cached);
|
|
108
|
-
const result = measureRichBlock(spans, normalFont, boldFont, italicFont, boldItalicFont, maxWidthPx, lineHeightPx, options);
|
|
109
|
-
cache._blocks.set(key, result);
|
|
110
|
-
return cloneMeasuredBlock(result);
|
|
111
|
-
}
|
|
112
|
-
/** Compute the normal space width for a given font, used to express justified
|
|
113
|
-
* spacing as a multiplier of the natural space. */
|
|
114
|
-
function normalSpaceWidthFor(font) {
|
|
115
|
-
return measureTextWidth(' ', font);
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* Measure a text block: break it into lines within maxWidthPx
|
|
119
|
-
* and return VDTLine data with bounding boxes.
|
|
120
|
-
*
|
|
121
|
-
* The returned lines have bbox positions relative to the block origin (0,0).
|
|
122
|
-
* The pipeline will offset them to absolute page coordinates later.
|
|
123
|
-
*/
|
|
124
|
-
export function measureBlock(text, font, maxWidthPx, lineHeightPx, options) {
|
|
125
|
-
if (text.trim() === '') {
|
|
126
|
-
return { lines: [], totalHeight: 0 };
|
|
127
|
-
}
|
|
128
|
-
const shouldHyphenate = options?.hyphenate ?? false;
|
|
129
|
-
const indentPx = options?.firstLineIndentPx ?? 0;
|
|
130
|
-
const hanging = options?.hangingIndent ?? false;
|
|
131
|
-
const textAlign = options?.textAlign ?? 'left';
|
|
132
|
-
const processedText = shouldHyphenate ? hyphenateText(text) : text;
|
|
133
|
-
const prepared = prepareWithSegments(processedText, font);
|
|
134
|
-
const normalSpaceWidth = textAlign === 'justify' ? normalSpaceWidthFor(font) : 0;
|
|
135
|
-
// Knuth-Plass optimal line breaking path
|
|
136
|
-
if (options?.optimal && textAlign === 'justify') {
|
|
137
|
-
const maxStretchRatio = options.maxStretchRatio ?? 1.5;
|
|
138
|
-
const minShrinkRatio = options.minShrinkRatio ?? 0.8;
|
|
139
|
-
const items = pretextSegmentsToItems(prepared, normalSpaceWidth, maxStretchRatio, minShrinkRatio);
|
|
140
|
-
const lineWidthFn = (li) => {
|
|
141
|
-
const isFirst = li === 0;
|
|
142
|
-
const indent = indentPx > 0
|
|
143
|
-
? (hanging ? (isFirst ? 0 : indentPx) : (isFirst ? indentPx : 0))
|
|
144
|
-
: 0;
|
|
145
|
-
return maxWidthPx - indent;
|
|
146
|
-
};
|
|
147
|
-
const lineIndentFn = (li) => {
|
|
148
|
-
const isFirst = li === 0;
|
|
149
|
-
return indentPx > 0
|
|
150
|
-
? (hanging ? (isFirst ? 0 : indentPx) : (isFirst ? indentPx : 0))
|
|
151
|
-
: 0;
|
|
152
|
-
};
|
|
153
|
-
const runtPenalty = options.runtPenalty ?? 0;
|
|
154
|
-
const runtMinWidth = runtPenalty > 0
|
|
155
|
-
? (options.runtMinCharacters ?? 0) * normalSpaceWidth
|
|
156
|
-
: 0;
|
|
157
|
-
const breaks = computeBreakpoints(items, {
|
|
158
|
-
lineWidth: lineWidthFn,
|
|
159
|
-
normalSpaceWidth,
|
|
160
|
-
maxStretchRatio,
|
|
161
|
-
minShrinkRatio,
|
|
162
|
-
runtPenalty,
|
|
163
|
-
runtMinWidth,
|
|
164
|
-
});
|
|
165
|
-
if (breaks.length > 0) {
|
|
166
|
-
const kpLines = reconstructPretextLines(items, breaks, prepared, lineHeightPx, lineWidthFn, lineIndentFn, normalSpaceWidth, textAlign);
|
|
167
|
-
return { lines: kpLines, totalHeight: kpLines.length * lineHeightPx };
|
|
168
|
-
}
|
|
169
|
-
// Fallback to greedy if K-P produced no breaks
|
|
170
|
-
}
|
|
171
|
-
const lines = [];
|
|
172
|
-
let cursor = { segmentIndex: 0, graphemeIndex: 0 };
|
|
173
|
-
let y = 0;
|
|
174
|
-
let lineIndex = 0;
|
|
175
|
-
while (true) {
|
|
176
|
-
// First line indent: indent line 0 only. Hanging indent: indent all lines except 0.
|
|
177
|
-
const isFirstLine = lineIndex === 0;
|
|
178
|
-
const lineIndent = indentPx > 0
|
|
179
|
-
? (hanging ? (isFirstLine ? 0 : indentPx) : (isFirstLine ? indentPx : 0))
|
|
180
|
-
: 0;
|
|
181
|
-
const lineMaxWidth = maxWidthPx - lineIndent;
|
|
182
|
-
const line = layoutNextLine(prepared, cursor, lineMaxWidth);
|
|
183
|
-
if (line === null)
|
|
184
|
-
break;
|
|
185
|
-
const nextCursor = line.end;
|
|
186
|
-
const isLastLine = layoutNextLine(prepared, nextCursor, lineMaxWidth) === null;
|
|
187
|
-
const { segments, hyphenated } = extractSegments(prepared, cursor, nextCursor);
|
|
188
|
-
if (hyphenated) {
|
|
189
|
-
const lastTextIdx = findLastTextSegmentIndex(segments);
|
|
190
|
-
if (lastTextIdx >= 0) {
|
|
191
|
-
const lastSeg = segments[lastTextIdx];
|
|
192
|
-
segments[lastTextIdx] = {
|
|
193
|
-
kind: 'text',
|
|
194
|
-
text: lastSeg.text + '-',
|
|
195
|
-
width: lastSeg.width + getHyphenWidth(prepared),
|
|
196
|
-
};
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
const justifiedSpaceRatio = computeJustifiedSpaceRatio(segments, lineMaxWidth, normalSpaceWidth, textAlign, isLastLine);
|
|
200
|
-
lines.push({
|
|
201
|
-
text: hyphenated ? cleanSoftHyphens(line.text) + '-' : cleanSoftHyphens(line.text),
|
|
202
|
-
bbox: createBoundingBox(lineIndent, y, line.width, lineHeightPx),
|
|
203
|
-
baseline: y + lineHeightPx * 0.8,
|
|
204
|
-
hyphenated,
|
|
205
|
-
segments,
|
|
206
|
-
isLastLine,
|
|
207
|
-
...(justifiedSpaceRatio !== undefined ? { justifiedSpaceRatio } : {}),
|
|
208
|
-
});
|
|
209
|
-
cursor = nextCursor;
|
|
210
|
-
y += lineHeightPx;
|
|
211
|
-
lineIndex++;
|
|
212
|
-
}
|
|
213
|
-
return { lines, totalHeight: y };
|
|
214
|
-
}
|
|
215
|
-
function computeJustifiedSpaceRatio(segments, lineMaxWidth, normalSpaceWidth, textAlign, isLastLine) {
|
|
216
|
-
if (textAlign !== 'justify' || isLastLine || normalSpaceWidth <= 0)
|
|
217
|
-
return undefined;
|
|
218
|
-
let wordWidth = 0;
|
|
219
|
-
let spaceCount = 0;
|
|
220
|
-
for (const s of segments) {
|
|
221
|
-
if (s.kind === 'space')
|
|
222
|
-
spaceCount++;
|
|
223
|
-
else
|
|
224
|
-
wordWidth += s.width;
|
|
225
|
-
}
|
|
226
|
-
if (spaceCount === 0)
|
|
227
|
-
return undefined;
|
|
228
|
-
const justifiedSpaceWidth = (lineMaxWidth - wordWidth) / spaceCount;
|
|
229
|
-
return justifiedSpaceWidth / normalSpaceWidth;
|
|
230
|
-
}
|
|
231
|
-
// ---------------------------------------------------------------------------
|
|
232
|
-
// Helpers
|
|
233
|
-
// ---------------------------------------------------------------------------
|
|
234
|
-
function findLastTextSegmentIndex(segments) {
|
|
235
|
-
for (let i = segments.length - 1; i >= 0; i--) {
|
|
236
|
-
if (segments[i].kind === 'text')
|
|
237
|
-
return i;
|
|
238
|
-
}
|
|
239
|
-
return -1;
|
|
240
|
-
}
|
|
241
|
-
function getHyphenWidth(prepared) {
|
|
242
|
-
// Use discretionaryHyphenWidth from pretext internals
|
|
243
|
-
const core = prepared;
|
|
244
|
-
if (core.discretionaryHyphenWidth && core.discretionaryHyphenWidth > 0) {
|
|
245
|
-
return core.discretionaryHyphenWidth;
|
|
246
|
-
}
|
|
247
|
-
return 5; // fallback
|
|
248
|
-
}
|
|
249
|
-
function cleanSoftHyphens(text) {
|
|
250
|
-
return text.replace(/\u00AD/g, '');
|
|
251
|
-
}
|
|
252
|
-
let _measureCtx = null;
|
|
253
|
-
function getMeasureCtx() {
|
|
254
|
-
if (!_measureCtx) {
|
|
255
|
-
if (typeof OffscreenCanvas !== 'undefined') {
|
|
256
|
-
_measureCtx = new OffscreenCanvas(1, 1).getContext('2d');
|
|
257
|
-
}
|
|
258
|
-
else {
|
|
259
|
-
_measureCtx = document.createElement('canvas').getContext('2d');
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
return _measureCtx;
|
|
263
|
-
}
|
|
264
|
-
function measureTextWidth(text, font) {
|
|
265
|
-
const ctx = getMeasureCtx();
|
|
266
|
-
ctx.font = font;
|
|
267
|
-
return ctx.measureText(text).width;
|
|
268
|
-
}
|
|
269
|
-
/** Measure a short glyph (e.g. a list bullet) in the given font. */
|
|
270
|
-
export function measureGlyphWidth(text, font) {
|
|
271
|
-
return measureTextWidth(text, font);
|
|
272
|
-
}
|
|
273
|
-
/**
|
|
274
|
-
* Tokenize inline spans into word/space tokens with bold/italic flags and measured widths.
|
|
275
|
-
*/
|
|
276
|
-
function tokenizeSpans(spans, normalFont, boldFont, italicFont, boldItalicFont, shouldHyphenate) {
|
|
277
|
-
const tokens = [];
|
|
278
|
-
for (const span of spans) {
|
|
279
|
-
// Math spans are atomic: a single non-breaking box with the render's
|
|
280
|
-
// widthPx. Kind 'text' is correct (not 'space') so trimming trailing
|
|
281
|
-
// spaces from a line doesn't drop the formula.
|
|
282
|
-
if (span.math && span.mathRender) {
|
|
283
|
-
tokens.push({
|
|
284
|
-
text: span.text,
|
|
285
|
-
bold: span.bold,
|
|
286
|
-
italic: span.italic,
|
|
287
|
-
kind: 'text',
|
|
288
|
-
width: span.mathRender.widthPx,
|
|
289
|
-
mathRender: span.mathRender,
|
|
290
|
-
});
|
|
291
|
-
continue;
|
|
292
|
-
}
|
|
293
|
-
const text = shouldHyphenate ? hyphenateText(span.text) : span.text;
|
|
294
|
-
const font = span.bold && span.italic
|
|
295
|
-
? boldItalicFont
|
|
296
|
-
: span.bold
|
|
297
|
-
? boldFont
|
|
298
|
-
: span.italic
|
|
299
|
-
? italicFont
|
|
300
|
-
: normalFont;
|
|
301
|
-
// Split on word boundaries while preserving spaces
|
|
302
|
-
const parts = text.match(/\S+|\s+/g);
|
|
303
|
-
if (!parts)
|
|
304
|
-
continue;
|
|
305
|
-
for (const part of parts) {
|
|
306
|
-
const isSpace = part.trim().length === 0;
|
|
307
|
-
if (!isSpace && part.includes(SOFT_HYPHEN)) {
|
|
308
|
-
const clean = part.replace(/\u00AD/g, '');
|
|
309
|
-
const cleanWidth = measureTextWidth(clean, font);
|
|
310
|
-
const breakPoints = [];
|
|
311
|
-
let priorSoft = 0;
|
|
312
|
-
for (let i = 0; i < part.length; i++) {
|
|
313
|
-
if (part[i] === SOFT_HYPHEN) {
|
|
314
|
-
const cleanIdx = i - priorSoft;
|
|
315
|
-
breakPoints.push({
|
|
316
|
-
charIndex: cleanIdx,
|
|
317
|
-
widthBefore: measureTextWidth(clean.slice(0, cleanIdx), font),
|
|
318
|
-
});
|
|
319
|
-
priorSoft++;
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
tokens.push({
|
|
323
|
-
text: clean,
|
|
324
|
-
bold: span.bold,
|
|
325
|
-
italic: span.italic,
|
|
326
|
-
kind: 'text',
|
|
327
|
-
width: cleanWidth,
|
|
328
|
-
breakPoints,
|
|
329
|
-
hyphenWidth: measureTextWidth('-', font),
|
|
330
|
-
});
|
|
331
|
-
}
|
|
332
|
-
else {
|
|
333
|
-
tokens.push({
|
|
334
|
-
text: part,
|
|
335
|
-
bold: span.bold,
|
|
336
|
-
italic: span.italic,
|
|
337
|
-
kind: isSpace ? 'space' : 'text',
|
|
338
|
-
width: measureTextWidth(part, font),
|
|
339
|
-
});
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
return tokens;
|
|
344
|
-
}
|
|
345
|
-
/**
|
|
346
|
-
* Measure a rich text block with mixed font weights.
|
|
347
|
-
* Uses canvas measureText for per-token measurement and greedy line-breaking.
|
|
348
|
-
*/
|
|
349
|
-
export function measureRichBlock(spans, normalFont, boldFont, italicFont, boldItalicFont, maxWidthPx, lineHeightPx, options) {
|
|
350
|
-
const plainText = spans.map((s) => s.text).join('');
|
|
351
|
-
if (plainText.trim() === '') {
|
|
352
|
-
return { lines: [], totalHeight: 0 };
|
|
353
|
-
}
|
|
354
|
-
const shouldHyphenate = options?.hyphenate ?? false;
|
|
355
|
-
const indentPx = options?.firstLineIndentPx ?? 0;
|
|
356
|
-
const hanging = options?.hangingIndent ?? false;
|
|
357
|
-
const textAlign = options?.textAlign ?? 'left';
|
|
358
|
-
const tokens = tokenizeSpans(spans, normalFont, boldFont, italicFont, boldItalicFont, shouldHyphenate);
|
|
359
|
-
const normalSpaceWidth = textAlign === 'justify' ? normalSpaceWidthFor(normalFont) : 0;
|
|
360
|
-
if (tokens.length === 0) {
|
|
361
|
-
return { lines: [], totalHeight: 0 };
|
|
362
|
-
}
|
|
363
|
-
// Knuth-Plass optimal line breaking path
|
|
364
|
-
if (options?.optimal && textAlign === 'justify') {
|
|
365
|
-
const maxStretchRatio = options.maxStretchRatio ?? 1.5;
|
|
366
|
-
const minShrinkRatio = options.minShrinkRatio ?? 0.8;
|
|
367
|
-
const items = richTokensToItems(tokens, normalSpaceWidth, maxStretchRatio, minShrinkRatio);
|
|
368
|
-
const lineWidthFn = (li) => {
|
|
369
|
-
const isFirst = li === 0;
|
|
370
|
-
const indent = indentPx > 0
|
|
371
|
-
? (hanging ? (isFirst ? 0 : indentPx) : (isFirst ? indentPx : 0))
|
|
372
|
-
: 0;
|
|
373
|
-
return maxWidthPx - indent;
|
|
374
|
-
};
|
|
375
|
-
const lineIndentFn = (li) => {
|
|
376
|
-
const isFirst = li === 0;
|
|
377
|
-
return indentPx > 0
|
|
378
|
-
? (hanging ? (isFirst ? 0 : indentPx) : (isFirst ? indentPx : 0))
|
|
379
|
-
: 0;
|
|
380
|
-
};
|
|
381
|
-
const runtPenalty = options.runtPenalty ?? 0;
|
|
382
|
-
const runtMinWidth = runtPenalty > 0
|
|
383
|
-
? (options.runtMinCharacters ?? 0) * normalSpaceWidth
|
|
384
|
-
: 0;
|
|
385
|
-
const breaks = computeBreakpoints(items, {
|
|
386
|
-
lineWidth: lineWidthFn,
|
|
387
|
-
normalSpaceWidth,
|
|
388
|
-
maxStretchRatio,
|
|
389
|
-
minShrinkRatio,
|
|
390
|
-
runtPenalty,
|
|
391
|
-
runtMinWidth,
|
|
392
|
-
});
|
|
393
|
-
if (breaks.length > 0) {
|
|
394
|
-
const kpLines = reconstructRichLines(items, breaks, tokens, lineHeightPx, lineWidthFn, lineIndentFn, normalSpaceWidth, textAlign);
|
|
395
|
-
return { lines: kpLines, totalHeight: kpLines.length * lineHeightPx };
|
|
396
|
-
}
|
|
397
|
-
// Fallback to greedy if K-P produced no breaks
|
|
398
|
-
}
|
|
399
|
-
const lines = [];
|
|
400
|
-
let y = 0;
|
|
401
|
-
let tokenIdx = 0;
|
|
402
|
-
let lineIndex = 0;
|
|
403
|
-
while (tokenIdx < tokens.length) {
|
|
404
|
-
const isFirstLine = lineIndex === 0;
|
|
405
|
-
const lineIndent = indentPx > 0
|
|
406
|
-
? (hanging ? (isFirstLine ? 0 : indentPx) : (isFirstLine ? indentPx : 0))
|
|
407
|
-
: 0;
|
|
408
|
-
const lineMaxWidth = maxWidthPx - lineIndent;
|
|
409
|
-
const lineTokens = [];
|
|
410
|
-
let lineWidth = 0;
|
|
411
|
-
let lineHyphenated = false;
|
|
412
|
-
// Consume leading spaces at line start (skip them)
|
|
413
|
-
while (tokenIdx < tokens.length && tokens[tokenIdx].kind === 'space') {
|
|
414
|
-
tokenIdx++;
|
|
415
|
-
}
|
|
416
|
-
// Greedy: add tokens until we overflow
|
|
417
|
-
while (tokenIdx < tokens.length) {
|
|
418
|
-
const token = tokens[tokenIdx];
|
|
419
|
-
if (lineWidth + token.width <= lineMaxWidth) {
|
|
420
|
-
lineTokens.push(token);
|
|
421
|
-
lineWidth += token.width;
|
|
422
|
-
tokenIdx++;
|
|
423
|
-
continue;
|
|
424
|
-
}
|
|
425
|
-
// Doesn't fit. Try to split at a soft-hyphen.
|
|
426
|
-
if (token.kind === 'text' && token.breakPoints && token.breakPoints.length > 0) {
|
|
427
|
-
const remaining = lineMaxWidth - lineWidth;
|
|
428
|
-
const hyphenW = token.hyphenWidth ?? 0;
|
|
429
|
-
let chosen = null;
|
|
430
|
-
for (const bp of token.breakPoints) {
|
|
431
|
-
if (bp.widthBefore + hyphenW <= remaining)
|
|
432
|
-
chosen = bp;
|
|
433
|
-
else
|
|
434
|
-
break;
|
|
435
|
-
}
|
|
436
|
-
if (chosen) {
|
|
437
|
-
lineTokens.push({
|
|
438
|
-
text: token.text.slice(0, chosen.charIndex) + '-',
|
|
439
|
-
bold: token.bold,
|
|
440
|
-
italic: token.italic,
|
|
441
|
-
kind: 'text',
|
|
442
|
-
width: chosen.widthBefore + hyphenW,
|
|
443
|
-
});
|
|
444
|
-
lineWidth += chosen.widthBefore + hyphenW;
|
|
445
|
-
lineHyphenated = true;
|
|
446
|
-
const chosenIdx = chosen.charIndex;
|
|
447
|
-
const chosenWidth = chosen.widthBefore;
|
|
448
|
-
const residualBreakPoints = token.breakPoints
|
|
449
|
-
.filter((bp) => bp.charIndex > chosenIdx)
|
|
450
|
-
.map((bp) => ({ charIndex: bp.charIndex - chosenIdx, widthBefore: bp.widthBefore - chosenWidth }));
|
|
451
|
-
tokens[tokenIdx] = {
|
|
452
|
-
text: token.text.slice(chosenIdx),
|
|
453
|
-
bold: token.bold,
|
|
454
|
-
italic: token.italic,
|
|
455
|
-
kind: 'text',
|
|
456
|
-
width: token.width - chosenWidth,
|
|
457
|
-
...(residualBreakPoints.length > 0
|
|
458
|
-
? { breakPoints: residualBreakPoints, hyphenWidth: token.hyphenWidth }
|
|
459
|
-
: {}),
|
|
460
|
-
};
|
|
461
|
-
break;
|
|
462
|
-
}
|
|
463
|
-
}
|
|
464
|
-
// No viable split. If line is empty, force-fit this token; else break to next line.
|
|
465
|
-
if (lineTokens.length === 0) {
|
|
466
|
-
lineTokens.push(token);
|
|
467
|
-
lineWidth += token.width;
|
|
468
|
-
tokenIdx++;
|
|
469
|
-
}
|
|
470
|
-
break;
|
|
471
|
-
}
|
|
472
|
-
if (lineTokens.length === 0)
|
|
473
|
-
break;
|
|
474
|
-
// Trim trailing spaces from line tokens
|
|
475
|
-
while (lineTokens.length > 0 && lineTokens[lineTokens.length - 1].kind === 'space') {
|
|
476
|
-
lineWidth -= lineTokens[lineTokens.length - 1].width;
|
|
477
|
-
lineTokens.pop();
|
|
478
|
-
}
|
|
479
|
-
// Check if this is the last line
|
|
480
|
-
// Skip remaining leading spaces to check if there's more content
|
|
481
|
-
let peekIdx = tokenIdx;
|
|
482
|
-
while (peekIdx < tokens.length && tokens[peekIdx].kind === 'space') {
|
|
483
|
-
peekIdx++;
|
|
484
|
-
}
|
|
485
|
-
const isLastLine = peekIdx >= tokens.length;
|
|
486
|
-
// Build segments for justified rendering
|
|
487
|
-
const segments = lineTokens.map((t) => ({
|
|
488
|
-
kind: t.mathRender ? 'math' : t.kind,
|
|
489
|
-
text: cleanSoftHyphens(t.text),
|
|
490
|
-
width: t.width,
|
|
491
|
-
bold: t.bold || undefined,
|
|
492
|
-
italic: t.italic || undefined,
|
|
493
|
-
...(t.mathRender ? { mathRender: t.mathRender } : {}),
|
|
494
|
-
}));
|
|
495
|
-
const lineText = lineTokens.map((t) => cleanSoftHyphens(t.text)).join('');
|
|
496
|
-
const contentWidth = lineTokens.reduce((sum, t) => sum + t.width, 0);
|
|
497
|
-
const justifiedSpaceRatio = computeJustifiedSpaceRatio(segments, lineMaxWidth, normalSpaceWidth, textAlign, isLastLine);
|
|
498
|
-
lines.push({
|
|
499
|
-
text: lineText,
|
|
500
|
-
bbox: createBoundingBox(lineIndent, y, contentWidth, lineHeightPx),
|
|
501
|
-
baseline: y + lineHeightPx * 0.8,
|
|
502
|
-
hyphenated: lineHyphenated,
|
|
503
|
-
segments,
|
|
504
|
-
isLastLine,
|
|
505
|
-
...(justifiedSpaceRatio !== undefined ? { justifiedSpaceRatio } : {}),
|
|
506
|
-
});
|
|
507
|
-
y += lineHeightPx;
|
|
508
|
-
lineIndex++;
|
|
509
|
-
}
|
|
510
|
-
return { lines, totalHeight: y };
|
|
511
|
-
}
|
|
512
|
-
//# sourceMappingURL=measure.js.map
|