postext 0.3.6 → 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.
Files changed (121) hide show
  1. package/dist/canvas-backend/blockRender.d.ts +3 -0
  2. package/dist/canvas-backend/blockRender.d.ts.map +1 -0
  3. package/dist/canvas-backend/blockRender.js +176 -0
  4. package/dist/canvas-backend/blockRender.js.map +1 -0
  5. package/dist/canvas-backend/decorations.d.ts +6 -0
  6. package/dist/canvas-backend/decorations.d.ts.map +1 -0
  7. package/dist/canvas-backend/decorations.js +106 -0
  8. package/dist/canvas-backend/decorations.js.map +1 -0
  9. package/dist/{canvas-backend.d.ts → canvas-backend/index.d.ts} +2 -2
  10. package/dist/canvas-backend/index.d.ts.map +1 -0
  11. package/dist/canvas-backend/index.js +66 -0
  12. package/dist/canvas-backend/index.js.map +1 -0
  13. package/dist/knuthPlass/breakpoints.d.ts +6 -0
  14. package/dist/knuthPlass/breakpoints.d.ts.map +1 -0
  15. package/dist/knuthPlass/breakpoints.js +284 -0
  16. package/dist/knuthPlass/breakpoints.js.map +1 -0
  17. package/dist/knuthPlass/constants.d.ts +8 -0
  18. package/dist/knuthPlass/constants.d.ts.map +1 -0
  19. package/dist/knuthPlass/constants.js +8 -0
  20. package/dist/knuthPlass/constants.js.map +1 -0
  21. package/dist/knuthPlass/index.d.ts +12 -0
  22. package/dist/knuthPlass/index.d.ts.map +1 -0
  23. package/dist/knuthPlass/index.js +11 -0
  24. package/dist/knuthPlass/index.js.map +1 -0
  25. package/dist/knuthPlass/pretextAdapter.d.ts +12 -0
  26. package/dist/knuthPlass/pretextAdapter.d.ts.map +1 -0
  27. package/dist/knuthPlass/pretextAdapter.js +178 -0
  28. package/dist/knuthPlass/pretextAdapter.js.map +1 -0
  29. package/dist/knuthPlass/richAdapter.d.ts +26 -0
  30. package/dist/knuthPlass/richAdapter.d.ts.map +1 -0
  31. package/dist/knuthPlass/richAdapter.js +189 -0
  32. package/dist/knuthPlass/richAdapter.js.map +1 -0
  33. package/dist/{knuthPlass.d.ts → knuthPlass/types.d.ts} +1 -31
  34. package/dist/knuthPlass/types.d.ts.map +1 -0
  35. package/dist/knuthPlass/types.js +5 -0
  36. package/dist/knuthPlass/types.js.map +1 -0
  37. package/dist/knuthPlass/utils.d.ts +2 -0
  38. package/dist/knuthPlass/utils.d.ts.map +1 -0
  39. package/dist/knuthPlass/utils.js +4 -0
  40. package/dist/knuthPlass/utils.js.map +1 -0
  41. package/dist/measure/cache.d.ts +5 -0
  42. package/dist/measure/cache.d.ts.map +1 -0
  43. package/dist/measure/cache.js +38 -0
  44. package/dist/measure/cache.js.map +1 -0
  45. package/dist/measure/canvas.d.ts +8 -0
  46. package/dist/measure/canvas.d.ts.map +1 -0
  47. package/dist/measure/canvas.js +30 -0
  48. package/dist/measure/canvas.js.map +1 -0
  49. package/dist/measure/font.d.ts +19 -0
  50. package/dist/measure/font.d.ts.map +1 -0
  51. package/dist/measure/font.js +34 -0
  52. package/dist/measure/font.js.map +1 -0
  53. package/dist/measure/index.d.ts +7 -0
  54. package/dist/measure/index.d.ts.map +1 -0
  55. package/dist/measure/index.js +6 -0
  56. package/dist/measure/index.js.map +1 -0
  57. package/dist/measure/plain.d.ts +13 -0
  58. package/dist/measure/plain.d.ts.map +1 -0
  59. package/dist/measure/plain.js +167 -0
  60. package/dist/measure/plain.js.map +1 -0
  61. package/dist/measure/rich.d.ts +25 -0
  62. package/dist/measure/rich.d.ts.map +1 -0
  63. package/dist/measure/rich.js +246 -0
  64. package/dist/measure/rich.js.map +1 -0
  65. package/dist/measure/types.d.ts +28 -0
  66. package/dist/measure/types.d.ts.map +1 -0
  67. package/dist/measure/types.js +2 -0
  68. package/dist/measure/types.js.map +1 -0
  69. package/dist/parse/blockParser.d.ts +28 -0
  70. package/dist/parse/blockParser.d.ts.map +1 -0
  71. package/dist/parse/blockParser.js +302 -0
  72. package/dist/parse/blockParser.js.map +1 -0
  73. package/dist/parse/index.d.ts +4 -0
  74. package/dist/parse/index.d.ts.map +1 -0
  75. package/dist/parse/index.js +3 -0
  76. package/dist/parse/index.js.map +1 -0
  77. package/dist/parse/inlineFormatting.d.ts +12 -0
  78. package/dist/parse/inlineFormatting.d.ts.map +1 -0
  79. package/dist/parse/inlineFormatting.js +90 -0
  80. package/dist/parse/inlineFormatting.js.map +1 -0
  81. package/dist/parse/inlineMath.d.ts +29 -0
  82. package/dist/parse/inlineMath.d.ts.map +1 -0
  83. package/dist/parse/inlineMath.js +141 -0
  84. package/dist/parse/inlineMath.js.map +1 -0
  85. package/dist/parse/sourceMapping.d.ts +12 -0
  86. package/dist/parse/sourceMapping.d.ts.map +1 -0
  87. package/dist/parse/sourceMapping.js +130 -0
  88. package/dist/parse/sourceMapping.js.map +1 -0
  89. package/dist/{parse.d.ts → parse/types.d.ts} +2 -25
  90. package/dist/parse/types.d.ts.map +1 -0
  91. package/dist/parse/types.js +2 -0
  92. package/dist/parse/types.js.map +1 -0
  93. package/dist/pipeline/build.d.ts.map +1 -1
  94. package/dist/pipeline/build.js +34 -276
  95. package/dist/pipeline/build.js.map +1 -1
  96. package/dist/pipeline/buildBlockKind.d.ts +33 -0
  97. package/dist/pipeline/buildBlockKind.d.ts.map +1 -0
  98. package/dist/pipeline/buildBlockKind.js +82 -0
  99. package/dist/pipeline/buildBlockKind.js.map +1 -0
  100. package/dist/pipeline/buildHelpers.d.ts +47 -0
  101. package/dist/pipeline/buildHelpers.d.ts.map +1 -0
  102. package/dist/pipeline/buildHelpers.js +169 -0
  103. package/dist/pipeline/buildHelpers.js.map +1 -0
  104. package/dist/pipeline/buildMeasurement.d.ts +27 -0
  105. package/dist/pipeline/buildMeasurement.d.ts.map +1 -0
  106. package/dist/pipeline/buildMeasurement.js +49 -0
  107. package/dist/pipeline/buildMeasurement.js.map +1 -0
  108. package/package.json +1 -1
  109. package/dist/canvas-backend.d.ts.map +0 -1
  110. package/dist/canvas-backend.js +0 -370
  111. package/dist/canvas-backend.js.map +0 -1
  112. package/dist/knuthPlass.d.ts.map +0 -1
  113. package/dist/knuthPlass.js +0 -665
  114. package/dist/knuthPlass.js.map +0 -1
  115. package/dist/measure.d.ts +0 -61
  116. package/dist/measure.d.ts.map +0 -1
  117. package/dist/measure.js +0 -512
  118. package/dist/measure.js.map +0 -1
  119. package/dist/parse.d.ts.map +0 -1
  120. package/dist/parse.js +0 -653
  121. package/dist/parse.js.map +0 -1
@@ -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
@@ -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