postext 0.3.17 → 0.3.19
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__/columnBalancing.test.d.ts +2 -0
- package/dist/__tests__/columnBalancing.test.d.ts.map +1 -0
- package/dist/__tests__/columnBalancing.test.js +372 -0
- package/dist/__tests__/columnBalancing.test.js.map +1 -0
- package/dist/__tests__/exports.test.js +6 -0
- package/dist/__tests__/exports.test.js.map +1 -1
- package/dist/__tests__/knuthPlass.test.js +60 -0
- package/dist/__tests__/knuthPlass.test.js.map +1 -1
- package/dist/__tests__/pipeline/floatPlacement.test.js +121 -0
- package/dist/__tests__/pipeline/floatPlacement.test.js.map +1 -1
- package/dist/__tests__/singleInk.test.d.ts +2 -0
- package/dist/__tests__/singleInk.test.d.ts.map +1 -0
- package/dist/__tests__/singleInk.test.js +42 -0
- package/dist/__tests__/singleInk.test.js.map +1 -0
- package/dist/canvas-backend/blockRender.d.ts.map +1 -1
- package/dist/canvas-backend/blockRender.js +93 -75
- package/dist/canvas-backend/blockRender.js.map +1 -1
- package/dist/canvas-backend/decorations.d.ts +4 -1
- package/dist/canvas-backend/decorations.d.ts.map +1 -1
- package/dist/canvas-backend/decorations.js +14 -6
- package/dist/canvas-backend/decorations.js.map +1 -1
- package/dist/canvas-backend/headerFooter.d.ts +0 -1
- package/dist/canvas-backend/headerFooter.d.ts.map +1 -1
- package/dist/canvas-backend/headerFooter.js +0 -1
- package/dist/canvas-backend/headerFooter.js.map +1 -1
- package/dist/canvas-backend/index.d.ts.map +1 -1
- package/dist/canvas-backend/index.js +9 -10
- package/dist/canvas-backend/index.js.map +1 -1
- package/dist/defaults/diagramStyle.d.ts +5 -0
- package/dist/defaults/diagramStyle.d.ts.map +1 -0
- package/dist/defaults/diagramStyle.js +29 -0
- package/dist/defaults/diagramStyle.js.map +1 -0
- package/dist/defaults/headings.d.ts +7 -0
- package/dist/defaults/headings.d.ts.map +1 -1
- package/dist/defaults/headings.js +57 -3
- package/dist/defaults/headings.js.map +1 -1
- package/dist/defaults/index.d.ts +2 -1
- package/dist/defaults/index.d.ts.map +1 -1
- package/dist/defaults/index.js +10 -1
- package/dist/defaults/index.js.map +1 -1
- package/dist/defaults/shared.d.ts.map +1 -1
- package/dist/defaults/shared.js +10 -0
- package/dist/defaults/shared.js.map +1 -1
- package/dist/html-backend.d.ts +6 -0
- package/dist/html-backend.d.ts.map +1 -1
- package/dist/html-backend.js +183 -9
- package/dist/html-backend.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/knuthPlass/breakpoints.d.ts.map +1 -1
- package/dist/knuthPlass/breakpoints.js +75 -98
- package/dist/knuthPlass/breakpoints.js.map +1 -1
- package/dist/knuthPlass/types.d.ts +7 -0
- package/dist/knuthPlass/types.d.ts.map +1 -1
- package/dist/measure/cache.js +2 -2
- package/dist/measure/cache.js.map +1 -1
- package/dist/measure/canvas.d.ts +3 -0
- package/dist/measure/canvas.d.ts.map +1 -1
- package/dist/measure/canvas.js +40 -2
- package/dist/measure/canvas.js.map +1 -1
- package/dist/measure/font.d.ts +3 -2
- package/dist/measure/font.d.ts.map +1 -1
- package/dist/measure/font.js +5 -2
- package/dist/measure/font.js.map +1 -1
- package/dist/measure/plain.d.ts.map +1 -1
- package/dist/measure/plain.js +15 -7
- package/dist/measure/plain.js.map +1 -1
- package/dist/measure/rich.d.ts.map +1 -1
- package/dist/measure/rich.js +12 -14
- package/dist/measure/rich.js.map +1 -1
- package/dist/measure/types.d.ts +4 -0
- package/dist/measure/types.d.ts.map +1 -1
- package/dist/measure/types.js.map +1 -1
- package/dist/parse/injectSpans.d.ts +9 -0
- package/dist/parse/injectSpans.d.ts.map +1 -0
- package/dist/parse/injectSpans.js +35 -0
- package/dist/parse/injectSpans.js.map +1 -0
- package/dist/parse/inlineFormatting.d.ts.map +1 -1
- package/dist/parse/inlineFormatting.js +9 -35
- package/dist/parse/inlineFormatting.js.map +1 -1
- package/dist/parse/inlineMath.d.ts.map +1 -1
- package/dist/parse/inlineMath.js +26 -43
- package/dist/parse/inlineMath.js.map +1 -1
- package/dist/parse/sourceMapping.d.ts.map +1 -1
- package/dist/parse/sourceMapping.js +15 -8
- package/dist/parse/sourceMapping.js.map +1 -1
- package/dist/pipeline/build.d.ts.map +1 -1
- package/dist/pipeline/build.js +187 -37
- package/dist/pipeline/build.js.map +1 -1
- package/dist/pipeline/columnBalancing.d.ts +119 -0
- package/dist/pipeline/columnBalancing.d.ts.map +1 -0
- package/dist/pipeline/columnBalancing.js +219 -0
- package/dist/pipeline/columnBalancing.js.map +1 -0
- package/dist/pipeline/config.d.ts +4 -1
- package/dist/pipeline/config.d.ts.map +1 -1
- package/dist/pipeline/config.js +10 -1
- package/dist/pipeline/config.js.map +1 -1
- package/dist/pipeline/headerFooter.d.ts.map +1 -1
- package/dist/pipeline/headerFooter.js +7 -5
- package/dist/pipeline/headerFooter.js.map +1 -1
- package/dist/pipeline/lists.d.ts +4 -9
- package/dist/pipeline/lists.d.ts.map +1 -1
- package/dist/pipeline/lists.js +24 -42
- package/dist/pipeline/lists.js.map +1 -1
- package/dist/pipeline/placeholders.d.ts.map +1 -1
- package/dist/pipeline/placeholders.js +18 -51
- package/dist/pipeline/placeholders.js.map +1 -1
- package/dist/svg/singleInk.d.ts +10 -0
- package/dist/svg/singleInk.d.ts.map +1 -0
- package/dist/svg/singleInk.js +86 -0
- package/dist/svg/singleInk.js.map +1 -0
- package/dist/types.d.ts +44 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/vdt.d.ts +17 -1
- package/dist/vdt.d.ts.map +1 -1
- package/dist/vdt.js +34 -0
- package/dist/vdt.js.map +1 -1
- package/package.json +6 -6
|
@@ -16,15 +16,28 @@ function computeBadness(r) {
|
|
|
16
16
|
const b = Math.round(100 * absR * absR * absR);
|
|
17
17
|
return Math.min(b, BADNESS_CAP);
|
|
18
18
|
}
|
|
19
|
+
/** Quality gate for the looseness target: every line in the chain must stay
|
|
20
|
+
* within the stretch limit (fitness class ≤ 2, i.e. adjustment ratio < 1.0
|
|
21
|
+
* — word spacing strictly below `maxStretchRatio`). The paragraph's last
|
|
22
|
+
* line never trips this: its closing glue has near-infinite stretch, so its
|
|
23
|
+
* ratio is ≈ 0. */
|
|
24
|
+
function chainWithinStretchLimit(node) {
|
|
25
|
+
for (let n = node; n !== null && n.position >= 0; n = n.previous) {
|
|
26
|
+
if (n.fitnessClass === 3)
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
19
31
|
export function computeBreakpoints(items, options) {
|
|
20
32
|
const { lineWidth, consecutiveHyphenDemerit = DEFAULT_CONSECUTIVE_HYPHEN_DEMERIT, fitnessClassDemerit = DEFAULT_FITNESS_CLASS_DEMERIT, runtPenalty = 0, runtMinWidth = 0, } = options;
|
|
21
33
|
const terminalBreakPosition = items.length - 1;
|
|
22
|
-
//
|
|
34
|
+
// Prefix sums over box/glue widths and glue stretch/shrink.
|
|
35
|
+
// sumWidthAt has length items.length + 1: sumWidthAt[k] covers items 0..k-1,
|
|
36
|
+
// so a penalty at position i (which adds no width) satisfies
|
|
37
|
+
// sumWidthAt[i] === sumWidthAt[i + 1].
|
|
23
38
|
let sumWidth = 0;
|
|
24
39
|
let sumStretch = 0;
|
|
25
40
|
let sumShrink = 0;
|
|
26
|
-
// Prefix sums: sumWidthAt[i] = sum of widths of items 0..i-1
|
|
27
|
-
// We build these incrementally and store for the range computations.
|
|
28
41
|
const sumWidthAt = [0];
|
|
29
42
|
const sumStretchAt = [0];
|
|
30
43
|
const sumShrinkAt = [0];
|
|
@@ -37,7 +50,6 @@ export function computeBreakpoints(items, options) {
|
|
|
37
50
|
sumStretch += item.stretch;
|
|
38
51
|
sumShrink += item.shrink;
|
|
39
52
|
}
|
|
40
|
-
// Penalties don't contribute to running width/stretch/shrink
|
|
41
53
|
sumWidthAt.push(sumWidth);
|
|
42
54
|
sumStretchAt.push(sumStretch);
|
|
43
55
|
sumShrinkAt.push(sumShrink);
|
|
@@ -53,12 +65,18 @@ export function computeBreakpoints(items, options) {
|
|
|
53
65
|
totalDemerits: 0,
|
|
54
66
|
previous: null,
|
|
55
67
|
}];
|
|
68
|
+
// Candidate nodes for the current breakpoint, deduplicated on the fly by
|
|
69
|
+
// (line, fitnessClass): only the lowest-demerit node per key survives.
|
|
70
|
+
// Nodes at different breakpoint positions are never merged — every entry
|
|
71
|
+
// here shares the current position `i`. Hoisted out of the loop and
|
|
72
|
+
// cleared per breakpoint to avoid one Map allocation per legal break.
|
|
73
|
+
const bestNewNodeByKey = new Map();
|
|
56
74
|
for (let i = 0; i < items.length; i++) {
|
|
57
75
|
const item = items[i];
|
|
58
|
-
// Determine if this position is a legal breakpoint
|
|
76
|
+
// Determine if this position is a legal breakpoint: glue preceded by a
|
|
77
|
+
// box, or a penalty below infinity.
|
|
59
78
|
let isLegalBreak = false;
|
|
60
79
|
if (item.type === 'glue') {
|
|
61
|
-
// Glue breaks if preceded by a box
|
|
62
80
|
if (i > 0 && items[i - 1].type === 'box') {
|
|
63
81
|
isLegalBreak = true;
|
|
64
82
|
}
|
|
@@ -70,51 +88,22 @@ export function computeBreakpoints(items, options) {
|
|
|
70
88
|
}
|
|
71
89
|
if (!isLegalBreak)
|
|
72
90
|
continue;
|
|
73
|
-
//
|
|
91
|
+
// A glue break excludes the glue itself from the line; a penalty break
|
|
92
|
+
// adds the penalty's width (e.g. a discretionary hyphen).
|
|
74
93
|
const breakWidth = item.type === 'penalty' ? item.width : 0;
|
|
75
94
|
const isFlagged = item.type === 'penalty' && item.flagged;
|
|
76
|
-
|
|
77
|
-
//
|
|
78
|
-
//
|
|
79
|
-
|
|
80
|
-
// If penalty: sumWidthAt[i] - a.totalWidth (sumWidthAt doesn't include penalty width)
|
|
81
|
-
// Plus breakWidth for penalties.
|
|
82
|
-
// Compute the content width from the items between a.position and i.
|
|
83
|
-
// After the break at active node a.position:
|
|
84
|
-
// - If a.position was a glue break, the next line starts at the item AFTER the glue
|
|
85
|
-
// - If a.position was a penalty break, the next line starts at the item AFTER the penalty
|
|
86
|
-
// - For the sentinel (-1), the line starts at item 0
|
|
87
|
-
// Total width from start to just before item i (excluding this glue/penalty's own width):
|
|
88
|
-
// For a glue at i: line content = sumWidthAt[i] (which includes all box+glue widths before i)
|
|
89
|
-
// but we need to subtract the width of glues/boxes after the previous break.
|
|
90
|
-
// Actually sumWidthAt[i] already accounts for that.
|
|
91
|
-
// We subtract a.totalWidth which is sumWidthAt at the point right after a's break.
|
|
92
|
-
const newNodes = [];
|
|
93
|
-
const toDeactivate = new Set();
|
|
95
|
+
bestNewNodeByKey.clear();
|
|
96
|
+
// Iterate the active set, compacting it in place: nodes whose line can
|
|
97
|
+
// no longer shrink enough to fit (r < -1) are dropped permanently.
|
|
98
|
+
let keepCount = 0;
|
|
94
99
|
for (let ai = 0; ai < activeNodes.length; ai++) {
|
|
95
100
|
const a = activeNodes[ai];
|
|
96
|
-
// Line content
|
|
97
|
-
//
|
|
98
|
-
//
|
|
99
|
-
// For penalty break: content is items from (a.position+1) to (i-1) inclusive + penalty.width
|
|
100
|
-
// = sumWidthAt[i] - a.totalWidth + breakWidth
|
|
101
|
-
// Note: sumWidthAt[i] does NOT include item i if it's a penalty.
|
|
102
|
-
// sumWidthAt[i] includes item i's width only for box/glue through the push.
|
|
103
|
-
// Wait — re-examine: sumWidthAt[i] is the prefix sum BEFORE item i is processed.
|
|
104
|
-
// Actually, sumWidthAt has length items.length + 1. sumWidthAt[0] = 0, sumWidthAt[k+1] includes item k.
|
|
105
|
-
// So sumWidthAt[i] includes items 0..i-1, and sumWidthAt[i+1] includes items 0..i.
|
|
106
|
-
// For a glue break at position i:
|
|
107
|
-
// The line goes from after a's break to just before this glue.
|
|
108
|
-
// Content width = sumWidthAt[i] - a.totalWidth
|
|
109
|
-
// (sumWidthAt[i] includes items 0..i-1, which covers everything up to but not including the glue)
|
|
110
|
-
//
|
|
111
|
-
// For a penalty break at position i:
|
|
112
|
-
// The line includes everything up to but not including the penalty, plus breakWidth
|
|
113
|
-
// Content width = sumWidthAt[i] - a.totalWidth + breakWidth
|
|
101
|
+
// Line content from after a's break up to this break. a.totalWidth is
|
|
102
|
+
// the prefix sum at the start of a's line, so the subtraction excludes
|
|
103
|
+
// everything already consumed (including a broken-at glue).
|
|
114
104
|
const contentWidth = sumWidthAt[i] - a.totalWidth + breakWidth;
|
|
115
105
|
const available = lineWidth(a.line);
|
|
116
106
|
const slack = available - contentWidth;
|
|
117
|
-
// Stretch/shrink from the items on this line
|
|
118
107
|
const lineStretch = sumStretchAt[i] - a.totalStretch;
|
|
119
108
|
const lineShrink = sumShrinkAt[i] - a.totalShrink;
|
|
120
109
|
let r;
|
|
@@ -124,15 +113,14 @@ export function computeBreakpoints(items, options) {
|
|
|
124
113
|
else {
|
|
125
114
|
r = lineShrink > 0 ? slack / lineShrink : -KP_INFINITY;
|
|
126
115
|
}
|
|
127
|
-
//
|
|
116
|
+
// Too far behind: the line is overfull beyond shrinkability. Drop the
|
|
117
|
+
// node (do not copy it into the surviving prefix).
|
|
128
118
|
if (r < -1) {
|
|
129
|
-
toDeactivate.add(ai);
|
|
130
119
|
continue;
|
|
131
120
|
}
|
|
132
|
-
|
|
133
|
-
//
|
|
121
|
+
activeNodes[keepCount++] = a;
|
|
122
|
+
// Infeasible — too few items to fill the line.
|
|
134
123
|
if (r > KP_INFINITY) {
|
|
135
|
-
// Infeasible — too few items to fill the line
|
|
136
124
|
continue;
|
|
137
125
|
}
|
|
138
126
|
const badness = computeBadness(r);
|
|
@@ -170,61 +158,28 @@ export function computeBreakpoints(items, options) {
|
|
|
170
158
|
d += fitnessClassDemerit;
|
|
171
159
|
}
|
|
172
160
|
const totalDemerits = a.totalDemerits + d;
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
//
|
|
179
|
-
//
|
|
180
|
-
//
|
|
181
|
-
//
|
|
182
|
-
|
|
183
|
-
// totalWidth = sumWidthAt[i+1] (which for penalties is same as sumWidthAt[i] since penalties
|
|
184
|
-
// don't add to sumWidth). Wait — let me re-check: penalties don't contribute to sumWidth,
|
|
185
|
-
// so sumWidthAt[i+1] == sumWidthAt[i] for a penalty at position i.
|
|
186
|
-
// But the next line starts at i+1. So totalWidth = sumWidthAt[i+1].
|
|
187
|
-
const newTotalWidth = sumWidthAt[i + 1];
|
|
188
|
-
const newTotalStretch = sumStretchAt[i + 1];
|
|
189
|
-
const newTotalShrink = sumShrinkAt[i + 1];
|
|
190
|
-
newNodes.push({
|
|
161
|
+
const key = (a.line + 1) * 4 + fc;
|
|
162
|
+
const existing = bestNewNodeByKey.get(key);
|
|
163
|
+
if (existing && existing.totalDemerits <= totalDemerits) {
|
|
164
|
+
continue;
|
|
165
|
+
}
|
|
166
|
+
// Cumulative totals at the START of the next line. The next line begins
|
|
167
|
+
// at item i+1, so sumWidthAt[i + 1] is correct for both break kinds: it
|
|
168
|
+
// includes a broken-at glue (consumed, excluded by the subtraction
|
|
169
|
+
// above) and adds nothing for a penalty.
|
|
170
|
+
bestNewNodeByKey.set(key, {
|
|
191
171
|
position: i,
|
|
192
172
|
line: a.line + 1,
|
|
193
173
|
fitnessClass: fc,
|
|
194
|
-
totalWidth:
|
|
195
|
-
totalStretch:
|
|
196
|
-
totalShrink:
|
|
197
|
-
totalDemerits
|
|
174
|
+
totalWidth: sumWidthAt[i + 1],
|
|
175
|
+
totalStretch: sumStretchAt[i + 1],
|
|
176
|
+
totalShrink: sumShrinkAt[i + 1],
|
|
177
|
+
totalDemerits,
|
|
198
178
|
previous: a,
|
|
199
179
|
});
|
|
200
180
|
}
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
activeNodes = activeNodes.filter((_, idx) => !toDeactivate.has(idx));
|
|
204
|
-
}
|
|
205
|
-
// Deduplicate new nodes by (line, fitnessClass): keep best demerits.
|
|
206
|
-
// Different breakpoint positions must NOT be merged — only nodes at the
|
|
207
|
-
// same position (which all newNodes share) can be compared.
|
|
208
|
-
const deduped = [];
|
|
209
|
-
for (const node of newNodes) {
|
|
210
|
-
const key = node.line * 4 + node.fitnessClass;
|
|
211
|
-
let found = false;
|
|
212
|
-
for (let di = 0; di < deduped.length; di++) {
|
|
213
|
-
const existing = deduped[di];
|
|
214
|
-
if (existing.line * 4 + existing.fitnessClass === key) {
|
|
215
|
-
if (node.totalDemerits < existing.totalDemerits) {
|
|
216
|
-
deduped[di] = node;
|
|
217
|
-
}
|
|
218
|
-
found = true;
|
|
219
|
-
break;
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
if (!found) {
|
|
223
|
-
deduped.push(node);
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
// Append all deduplicated nodes to the active set
|
|
227
|
-
for (const node of deduped) {
|
|
181
|
+
activeNodes.length = keepCount;
|
|
182
|
+
for (const node of bestNewNodeByKey.values()) {
|
|
228
183
|
activeNodes.push(node);
|
|
229
184
|
}
|
|
230
185
|
// Forced breaks: when penalty = -INFINITY, remove all active nodes that
|
|
@@ -257,6 +212,28 @@ export function computeBreakpoints(items, options) {
|
|
|
257
212
|
best = a;
|
|
258
213
|
}
|
|
259
214
|
}
|
|
215
|
+
// Looseness (TeX \looseness): among the surviving final nodes, prefer the
|
|
216
|
+
// lowest-demerit sequence with exactly (natural + looseness) lines — used
|
|
217
|
+
// by column balancing to run a paragraph one line long. The DP never
|
|
218
|
+
// merges nodes with different line counts, so when such a sequence is
|
|
219
|
+
// feasible a final node for it exists here. Gated on chain quality so the
|
|
220
|
+
// loose solution never stretches any line beyond the user's limit; when no
|
|
221
|
+
// acceptable node matches, the natural solution stands.
|
|
222
|
+
const looseness = options.looseness ?? 0;
|
|
223
|
+
if (looseness > 0 && best) {
|
|
224
|
+
const targetLine = best.line + looseness;
|
|
225
|
+
let loose = null;
|
|
226
|
+
for (const a of activeNodes) {
|
|
227
|
+
if (a.position !== lastBreakPosition || a.line !== targetLine)
|
|
228
|
+
continue;
|
|
229
|
+
if (!chainWithinStretchLimit(a))
|
|
230
|
+
continue;
|
|
231
|
+
if (loose === null || a.totalDemerits < loose.totalDemerits)
|
|
232
|
+
loose = a;
|
|
233
|
+
}
|
|
234
|
+
if (loose)
|
|
235
|
+
best = loose;
|
|
236
|
+
}
|
|
260
237
|
// Fallback: if no node reached the final position, take any node with the
|
|
261
238
|
// highest position (nearest to the end).
|
|
262
239
|
if (!best) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"breakpoints.js","sourceRoot":"","sources":["../../src/knuthPlass/breakpoints.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,WAAW,EACX,kCAAkC,EAClC,6BAA6B,EAC7B,WAAW,GACZ,MAAM,aAAa,CAAC;AAyBrB,SAAS,eAAe,CAAC,CAAS;IAChC,IAAI,CAAC,GAAG,CAAC,GAAG;QAAE,OAAO,CAAC,CAAC,CAAC,QAAQ;IAChC,IAAI,CAAC,GAAG,GAAG;QAAE,OAAO,CAAC,CAAC,CAAE,SAAS;IACjC,IAAI,CAAC,GAAG,GAAG;QAAE,OAAO,CAAC,CAAC,CAAE,QAAQ;IAChC,OAAO,CAAC,CAAC,CAAgB,aAAa;AACxC,CAAC;AAED,SAAS,cAAc,CAAC,CAAS;IAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;IAC/C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAe,EAAE,OAAkB;IACpE,MAAM,EACJ,SAAS,EACT,wBAAwB,GAAG,kCAAkC,EAC7D,mBAAmB,GAAG,6BAA6B,EACnD,WAAW,GAAG,CAAC,EACf,YAAY,GAAG,CAAC,GACjB,GAAG,OAAO,CAAC;IACZ,MAAM,qBAAqB,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAE/C,
|
|
1
|
+
{"version":3,"file":"breakpoints.js","sourceRoot":"","sources":["../../src/knuthPlass/breakpoints.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,6 +43,13 @@ export interface KPOptions {
|
|
|
43
43
|
/** Minimum content width (in px) the final line must have to avoid the runt
|
|
44
44
|
* penalty. Typically `runtMinCharacters * normalSpaceWidth`. */
|
|
45
45
|
runtMinWidth?: number;
|
|
46
|
+
/** TeX-style \looseness: prefer a final break sequence with exactly
|
|
47
|
+
* (natural + looseness) lines, but only when every line of that sequence
|
|
48
|
+
* stays within the configured stretch limit (adjustment ratio < 1.0, i.e.
|
|
49
|
+
* word spacing below `maxStretchRatio`). Falls back silently to the
|
|
50
|
+
* natural solution otherwise. Only positive values are supported.
|
|
51
|
+
* Default 0 (off). */
|
|
52
|
+
looseness?: number;
|
|
46
53
|
}
|
|
47
54
|
export interface RichTokenMeta {
|
|
48
55
|
bold: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/knuthPlass/types.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,KAAK,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,MAAM,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;AAMhD,MAAM,WAAW,SAAS;IACxB,0DAA0D;IAC1D,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IACzC,uCAAuC;IACvC,gBAAgB,EAAE,MAAM,CAAC;IACzB,sEAAsE;IACtE,eAAe,EAAE,MAAM,CAAC;IACxB,oEAAoE;IACpE,cAAc,EAAE,MAAM,CAAC;IACvB,oDAAoD;IACpD,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,8DAA8D;IAC9D,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;uEAImE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;qEACiE;IACjE,YAAY,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/knuthPlass/types.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,KAAK,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,MAAM,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;AAMhD,MAAM,WAAW,SAAS;IACxB,0DAA0D;IAC1D,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IACzC,uCAAuC;IACvC,gBAAgB,EAAE,MAAM,CAAC;IACzB,sEAAsE;IACtE,eAAe,EAAE,MAAM,CAAC;IACxB,oEAAoE;IACpE,cAAc,EAAE,MAAM,CAAC;IACvB,oDAAoD;IACpD,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,8DAA8D;IAC9D,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;uEAImE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;qEACiE;IACjE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;2BAKuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
|
package/dist/measure/cache.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { measureBlock } from './plain';
|
|
2
2
|
import { measureRichBlock } from './rich';
|
|
3
3
|
function buildPlainCacheKey(text, font, maxWidthPx, lineHeightPx, options) {
|
|
4
|
-
return `${text}\x00${font}\x00${maxWidthPx}\x00${lineHeightPx}\x00${options?.textAlign ?? ''}\x00${options?.hyphenate ?? ''}\x00${options?.firstLineIndentPx ?? ''}\x00${options?.hangingIndent ?? ''}\x00${options?.optimal ?? ''}\x00${options?.maxStretchRatio ?? ''}\x00${options?.minShrinkRatio ?? ''}\x00${options?.runtPenalty ?? ''}\x00${options?.runtMinCharacters ?? ''}`;
|
|
4
|
+
return `${text}\x00${font}\x00${maxWidthPx}\x00${lineHeightPx}\x00${options?.textAlign ?? ''}\x00${options?.hyphenate ?? ''}\x00${options?.firstLineIndentPx ?? ''}\x00${options?.hangingIndent ?? ''}\x00${options?.optimal ?? ''}\x00${options?.maxStretchRatio ?? ''}\x00${options?.minShrinkRatio ?? ''}\x00${options?.runtPenalty ?? ''}\x00${options?.runtMinCharacters ?? ''}\x00${options?.looseness ?? ''}`;
|
|
5
5
|
}
|
|
6
6
|
function buildRichCacheKey(spans, fonts, maxWidthPx, lineHeightPx, options) {
|
|
7
7
|
const spanKey = spans.map((s) => `${s.text}|${s.bold}|${s.italic}|${s.ref?.resourceId ?? ''}`).join('\x01');
|
|
8
|
-
return `R\x00${spanKey}\x00${fonts[0]}\x00${fonts[1]}\x00${fonts[2]}\x00${fonts[3]}\x00${maxWidthPx}\x00${lineHeightPx}\x00${options?.textAlign ?? ''}\x00${options?.hyphenate ?? ''}\x00${options?.firstLineIndentPx ?? ''}\x00${options?.hangingIndent ?? ''}\x00${options?.optimal ?? ''}\x00${options?.maxStretchRatio ?? ''}\x00${options?.minShrinkRatio ?? ''}\x00${options?.runtPenalty ?? ''}\x00${options?.runtMinCharacters ?? ''}`;
|
|
8
|
+
return `R\x00${spanKey}\x00${fonts[0]}\x00${fonts[1]}\x00${fonts[2]}\x00${fonts[3]}\x00${maxWidthPx}\x00${lineHeightPx}\x00${options?.textAlign ?? ''}\x00${options?.hyphenate ?? ''}\x00${options?.firstLineIndentPx ?? ''}\x00${options?.hangingIndent ?? ''}\x00${options?.optimal ?? ''}\x00${options?.maxStretchRatio ?? ''}\x00${options?.minShrinkRatio ?? ''}\x00${options?.runtPenalty ?? ''}\x00${options?.runtMinCharacters ?? ''}\x00${options?.looseness ?? ''}`;
|
|
9
9
|
}
|
|
10
10
|
function cloneMeasuredBlock(block) {
|
|
11
11
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/measure/cache.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAE1C,SAAS,kBAAkB,CACzB,IAAY,EACZ,IAAY,EACZ,UAAkB,EAClB,YAAoB,EACpB,OAAwC;IAExC,OAAO,GAAG,IAAI,OAAO,IAAI,OAAO,UAAU,OAAO,YAAY,OAAO,OAAO,EAAE,SAAS,IAAI,EAAE,OAAO,OAAO,EAAE,SAAS,IAAI,EAAE,OAAO,OAAO,EAAE,iBAAiB,IAAI,EAAE,OAAO,OAAO,EAAE,aAAa,IAAI,EAAE,OAAO,OAAO,EAAE,OAAO,IAAI,EAAE,OAAO,OAAO,EAAE,eAAe,IAAI,EAAE,OAAO,OAAO,EAAE,cAAc,IAAI,EAAE,OAAO,OAAO,EAAE,WAAW,IAAI,EAAE,OAAO,OAAO,EAAE,iBAAiB,IAAI,EAAE,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/measure/cache.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAE1C,SAAS,kBAAkB,CACzB,IAAY,EACZ,IAAY,EACZ,UAAkB,EAClB,YAAoB,EACpB,OAAwC;IAExC,OAAO,GAAG,IAAI,OAAO,IAAI,OAAO,UAAU,OAAO,YAAY,OAAO,OAAO,EAAE,SAAS,IAAI,EAAE,OAAO,OAAO,EAAE,SAAS,IAAI,EAAE,OAAO,OAAO,EAAE,iBAAiB,IAAI,EAAE,OAAO,OAAO,EAAE,aAAa,IAAI,EAAE,OAAO,OAAO,EAAE,OAAO,IAAI,EAAE,OAAO,OAAO,EAAE,eAAe,IAAI,EAAE,OAAO,OAAO,EAAE,cAAc,IAAI,EAAE,OAAO,OAAO,EAAE,WAAW,IAAI,EAAE,OAAO,OAAO,EAAE,iBAAiB,IAAI,EAAE,OAAO,OAAO,EAAE,SAAS,IAAI,EAAE,EAAE,CAAC;AACvZ,CAAC;AAED,SAAS,iBAAiB,CACxB,KAAmB,EACnB,KAAuC,EACvC,UAAkB,EAClB,YAAoB,EACpB,OAAwC;IAExC,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,EAAE,UAAU,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5G,OAAO,QAAQ,OAAO,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,UAAU,OAAO,YAAY,OAAO,OAAO,EAAE,SAAS,IAAI,EAAE,OAAO,OAAO,EAAE,SAAS,IAAI,EAAE,OAAO,OAAO,EAAE,iBAAiB,IAAI,EAAE,OAAO,OAAO,EAAE,aAAa,IAAI,EAAE,OAAO,OAAO,EAAE,OAAO,IAAI,EAAE,OAAO,OAAO,EAAE,eAAe,IAAI,EAAE,OAAO,OAAO,EAAE,cAAc,IAAI,EAAE,OAAO,OAAO,EAAE,WAAW,IAAI,EAAE,OAAO,OAAO,EAAE,iBAAiB,IAAI,EAAE,OAAO,OAAO,EAAE,SAAS,IAAI,EAAE,EAAE,CAAC;AAChd,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAoB;IAC9C,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7B,GAAG,CAAC;YACJ,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE;YACnB,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;SACrE,CAAC,CAAC;QACH,WAAW,EAAE,KAAK,CAAC,WAAW;KAC/B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,IAAY,EACZ,IAAY,EACZ,UAAkB,EAClB,YAAoB,EACpB,OAAwC,EACxC,KAAuB;IAEvB,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAC9E,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,MAAM;QAAE,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAC3E,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC/B,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,KAAmB,EACnB,UAAkB,EAClB,QAAgB,EAChB,UAAkB,EAClB,cAAsB,EACtB,UAAkB,EAClB,YAAoB,EACpB,OAAwC,EACxC,KAAuB;IAEvB,MAAM,GAAG,GAAG,iBAAiB,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAC5H,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,MAAM;QAAE,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAC5H,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC/B,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC"}
|
package/dist/measure/canvas.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
export declare function measureTextWidth(text: string, font: string): number;
|
|
2
|
+
/** Drop all cached text widths. Must be called whenever font faces are
|
|
3
|
+
* (un)registered: widths measured against fallback glyphs are stale. */
|
|
4
|
+
export declare function clearTextWidthCache(): void;
|
|
2
5
|
/** Measure a short glyph (e.g. a list bullet) in the given font. */
|
|
3
6
|
export declare function measureGlyphWidth(text: string, font: string): number;
|
|
4
7
|
/** Compute the normal space width for a given font, used to express justified
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvas.d.ts","sourceRoot":"","sources":["../../src/measure/canvas.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"canvas.d.ts","sourceRoot":"","sources":["../../src/measure/canvas.ts"],"names":[],"mappings":"AA0BA,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAyBnE;AAED;yEACyE;AACzE,wBAAgB,mBAAmB,IAAI,IAAI,CAG1C;AAED,oEAAoE;AACpE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED;oDACoD;AACpD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD"}
|
package/dist/measure/canvas.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
let _measureCtx = null;
|
|
2
|
+
/** Font string currently set on the measure context, to skip redundant
|
|
3
|
+
* `ctx.font` assignments (each assignment re-parses the shorthand). */
|
|
4
|
+
let _currentFont = '';
|
|
2
5
|
function getMeasureCtx() {
|
|
3
6
|
if (!_measureCtx) {
|
|
4
7
|
if (typeof OffscreenCanvas !== 'undefined') {
|
|
@@ -7,13 +10,48 @@ function getMeasureCtx() {
|
|
|
7
10
|
else {
|
|
8
11
|
_measureCtx = document.createElement('canvas').getContext('2d');
|
|
9
12
|
}
|
|
13
|
+
_currentFont = '';
|
|
10
14
|
}
|
|
11
15
|
return _measureCtx;
|
|
12
16
|
}
|
|
17
|
+
// Word-level width cache. Text measurement is the engine's hottest call:
|
|
18
|
+
// tokenizers measure every word (plus hyphenation prefixes), and natural
|
|
19
|
+
// language repeats words constantly. Keyed font → text → width so the key
|
|
20
|
+
// needs no string concatenation. Cleared wholesale when it grows past the
|
|
21
|
+
// cap (rare) or when fonts change (see clearTextWidthCache).
|
|
22
|
+
const MAX_WIDTH_CACHE_ENTRIES = 100_000;
|
|
23
|
+
let _widthCaches = new Map();
|
|
24
|
+
let _widthCacheEntries = 0;
|
|
13
25
|
export function measureTextWidth(text, font) {
|
|
26
|
+
let byText = _widthCaches.get(font);
|
|
27
|
+
if (byText === undefined) {
|
|
28
|
+
byText = new Map();
|
|
29
|
+
_widthCaches.set(font, byText);
|
|
30
|
+
}
|
|
31
|
+
const cached = byText.get(text);
|
|
32
|
+
if (cached !== undefined)
|
|
33
|
+
return cached;
|
|
14
34
|
const ctx = getMeasureCtx();
|
|
15
|
-
|
|
16
|
-
|
|
35
|
+
if (font !== _currentFont) {
|
|
36
|
+
ctx.font = font;
|
|
37
|
+
_currentFont = font;
|
|
38
|
+
}
|
|
39
|
+
const width = ctx.measureText(text).width;
|
|
40
|
+
if (_widthCacheEntries >= MAX_WIDTH_CACHE_ENTRIES) {
|
|
41
|
+
_widthCaches = new Map();
|
|
42
|
+
_widthCacheEntries = 0;
|
|
43
|
+
byText = new Map();
|
|
44
|
+
_widthCaches.set(font, byText);
|
|
45
|
+
}
|
|
46
|
+
byText.set(text, width);
|
|
47
|
+
_widthCacheEntries++;
|
|
48
|
+
return width;
|
|
49
|
+
}
|
|
50
|
+
/** Drop all cached text widths. Must be called whenever font faces are
|
|
51
|
+
* (un)registered: widths measured against fallback glyphs are stale. */
|
|
52
|
+
export function clearTextWidthCache() {
|
|
53
|
+
_widthCaches = new Map();
|
|
54
|
+
_widthCacheEntries = 0;
|
|
17
55
|
}
|
|
18
56
|
/** Measure a short glyph (e.g. a list bullet) in the given font. */
|
|
19
57
|
export function measureGlyphWidth(text, font) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvas.js","sourceRoot":"","sources":["../../src/measure/canvas.ts"],"names":[],"mappings":"AAAA,IAAI,WAAW,GAAwE,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"canvas.js","sourceRoot":"","sources":["../../src/measure/canvas.ts"],"names":[],"mappings":"AAAA,IAAI,WAAW,GAAwE,IAAI,CAAC;AAC5F;wEACwE;AACxE,IAAI,YAAY,GAAG,EAAE,CAAC;AAEtB,SAAS,aAAa;IACpB,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,IAAI,OAAO,eAAe,KAAK,WAAW,EAAE,CAAC;YAC3C,WAAW,GAAG,IAAI,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAE,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,IAAI,CAAE,CAAC;QACnE,CAAC;QACD,YAAY,GAAG,EAAE,CAAC;IACpB,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,yEAAyE;AACzE,yEAAyE;AACzE,0EAA0E;AAC1E,0EAA0E;AAC1E,6DAA6D;AAC7D,MAAM,uBAAuB,GAAG,OAAO,CAAC;AACxC,IAAI,YAAY,GAAG,IAAI,GAAG,EAA+B,CAAC;AAC1D,IAAI,kBAAkB,GAAG,CAAC,CAAC;AAE3B,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,IAAY;IACzD,IAAI,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QACnB,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACjC,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAExC,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;IAC5B,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAC1B,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;QAChB,YAAY,GAAG,IAAI,CAAC;IACtB,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;IAE1C,IAAI,kBAAkB,IAAI,uBAAuB,EAAE,CAAC;QAClD,YAAY,GAAG,IAAI,GAAG,EAAE,CAAC;QACzB,kBAAkB,GAAG,CAAC,CAAC;QACvB,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QACnB,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACjC,CAAC;IACD,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACxB,kBAAkB,EAAE,CAAC;IACrB,OAAO,KAAK,CAAC;AACf,CAAC;AAED;yEACyE;AACzE,MAAM,UAAU,mBAAmB;IACjC,YAAY,GAAG,IAAI,GAAG,EAAE,CAAC;IACzB,kBAAkB,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,IAAY;IAC1D,OAAO,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACtC,CAAC;AAED;oDACoD;AACpD,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,OAAO,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;AACrC,CAAC"}
|
package/dist/measure/font.d.ts
CHANGED
|
@@ -11,8 +11,9 @@ export declare function buildFontString(fontFamily: string, fontSizePx: number,
|
|
|
11
11
|
*/
|
|
12
12
|
export declare function initHyphenator(locale: HyphenationLocale): void;
|
|
13
13
|
/**
|
|
14
|
-
* Clear pretext's internal measurement caches
|
|
15
|
-
* Call this after fonts finish loading
|
|
14
|
+
* Clear pretext's internal measurement caches and the engine's own
|
|
15
|
+
* text-width cache. Call this after fonts finish loading (or are removed)
|
|
16
|
+
* to ensure accurate measurements.
|
|
16
17
|
*/
|
|
17
18
|
export declare function clearMeasurementCache(): void;
|
|
18
19
|
export declare function createMeasurementCache(): MeasurementCache;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"font.d.ts","sourceRoot":"","sources":["../../src/measure/font.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"font.d.ts","sourceRoot":"","sources":["../../src/measure/font.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAGlD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,MAAiB,EACzB,KAAK,GAAE,MAAiB,GACvB,MAAM,CAOR;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAE9D;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAG5C;AAED,wBAAgB,sBAAsB,IAAI,gBAAgB,CAEzD"}
|
package/dist/measure/font.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { clearCache } from '@chenglou/pretext';
|
|
2
2
|
import { setHyphenationLocale } from '../hyphenate';
|
|
3
|
+
import { clearTextWidthCache } from './canvas';
|
|
3
4
|
/**
|
|
4
5
|
* Build a CSS font shorthand string for canvas / pretext.
|
|
5
6
|
* Example: "75px EB Garamond"
|
|
@@ -22,11 +23,13 @@ export function initHyphenator(locale) {
|
|
|
22
23
|
setHyphenationLocale(locale);
|
|
23
24
|
}
|
|
24
25
|
/**
|
|
25
|
-
* Clear pretext's internal measurement caches
|
|
26
|
-
* Call this after fonts finish loading
|
|
26
|
+
* Clear pretext's internal measurement caches and the engine's own
|
|
27
|
+
* text-width cache. Call this after fonts finish loading (or are removed)
|
|
28
|
+
* to ensure accurate measurements.
|
|
27
29
|
*/
|
|
28
30
|
export function clearMeasurementCache() {
|
|
29
31
|
clearCache();
|
|
32
|
+
clearTextWidthCache();
|
|
30
33
|
}
|
|
31
34
|
export function createMeasurementCache() {
|
|
32
35
|
return { _blocks: new Map() };
|
package/dist/measure/font.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"font.js","sourceRoot":"","sources":["../../src/measure/font.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"font.js","sourceRoot":"","sources":["../../src/measure/font.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAG/C;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,UAAkB,EAClB,UAAkB,EAClB,SAAiB,QAAQ,EACzB,QAAgB,QAAQ;IAExB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,KAAK,KAAK,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,MAAM,KAAK,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5C,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,IAAI,CAAC,CAAC;IAC9B,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACvB,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAAyB;IACtD,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB;IACnC,UAAU,EAAE,CAAC;IACb,mBAAmB,EAAE,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;AAChC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plain.d.ts","sourceRoot":"","sources":["../../src/measure/plain.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAW,cAAc,EAAE,MAAM,QAAQ,CAAC;AAEtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAQ1C,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AA2DlE,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,cAAc,EAAE,EAC1B,YAAY,EAAE,MAAM,EACpB,gBAAgB,EAAE,MAAM,EACxB,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,OAAO,GAClB,MAAM,GAAG,SAAS,CAWpB;AAED;;;;;;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,
|
|
1
|
+
{"version":3,"file":"plain.d.ts","sourceRoot":"","sources":["../../src/measure/plain.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAW,cAAc,EAAE,MAAM,QAAQ,CAAC;AAEtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAQ1C,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AA2DlE,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,cAAc,EAAE,EAC1B,YAAY,EAAE,MAAM,EACpB,gBAAgB,EAAE,MAAM,EACxB,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,OAAO,GAClB,MAAM,GAAG,SAAS,CAWpB;AAED;;;;;;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,CAwHf"}
|
package/dist/measure/plain.js
CHANGED
|
@@ -3,7 +3,7 @@ import { createBoundingBox } from '../vdt';
|
|
|
3
3
|
import { hyphenateText } from '../hyphenate';
|
|
4
4
|
import { pretextSegmentsToItems, computeBreakpoints, reconstructPretextLines, } from '../knuthPlass';
|
|
5
5
|
import { SOFT_HYPHEN } from './types';
|
|
6
|
-
import { cleanSoftHyphens, normalSpaceWidthFor } from './canvas';
|
|
6
|
+
import { cleanSoftHyphens, measureTextWidth, normalSpaceWidthFor } from './canvas';
|
|
7
7
|
function extractSegments(prepared, start, end) {
|
|
8
8
|
const result = [];
|
|
9
9
|
let hyphenated = false;
|
|
@@ -42,13 +42,13 @@ function findLastTextSegmentIndex(segments) {
|
|
|
42
42
|
}
|
|
43
43
|
return -1;
|
|
44
44
|
}
|
|
45
|
-
function getHyphenWidth(prepared) {
|
|
45
|
+
function getHyphenWidth(prepared, font) {
|
|
46
46
|
// Use discretionaryHyphenWidth from pretext internals
|
|
47
47
|
const core = prepared;
|
|
48
48
|
if (core.discretionaryHyphenWidth && core.discretionaryHyphenWidth > 0) {
|
|
49
49
|
return core.discretionaryHyphenWidth;
|
|
50
50
|
}
|
|
51
|
-
return
|
|
51
|
+
return measureTextWidth('-', font);
|
|
52
52
|
}
|
|
53
53
|
export function computeJustifiedSpaceRatio(segments, lineMaxWidth, normalSpaceWidth, textAlign, isLastLine) {
|
|
54
54
|
if (textAlign !== 'justify' || isLastLine || normalSpaceWidth <= 0)
|
|
@@ -113,6 +113,7 @@ export function measureBlock(text, font, maxWidthPx, lineHeightPx, options) {
|
|
|
113
113
|
minShrinkRatio,
|
|
114
114
|
runtPenalty,
|
|
115
115
|
runtMinWidth,
|
|
116
|
+
looseness: options.looseness ?? 0,
|
|
116
117
|
});
|
|
117
118
|
if (breaks.length > 0) {
|
|
118
119
|
const kpLines = reconstructPretextLines(items, breaks, prepared, lineHeightPx, lineWidthFn, lineIndentFn, normalSpaceWidth, textAlign);
|
|
@@ -135,7 +136,6 @@ export function measureBlock(text, font, maxWidthPx, lineHeightPx, options) {
|
|
|
135
136
|
if (line === null)
|
|
136
137
|
break;
|
|
137
138
|
const nextCursor = line.end;
|
|
138
|
-
const isLastLine = layoutNextLine(prepared, nextCursor, lineMaxWidth) === null;
|
|
139
139
|
const { segments, hyphenated } = extractSegments(prepared, cursor, nextCursor);
|
|
140
140
|
if (hyphenated) {
|
|
141
141
|
const lastTextIdx = findLastTextSegmentIndex(segments);
|
|
@@ -144,24 +144,32 @@ export function measureBlock(text, font, maxWidthPx, lineHeightPx, options) {
|
|
|
144
144
|
segments[lastTextIdx] = {
|
|
145
145
|
kind: 'text',
|
|
146
146
|
text: lastSeg.text + '-',
|
|
147
|
-
width: lastSeg.width + getHyphenWidth(prepared),
|
|
147
|
+
width: lastSeg.width + getHyphenWidth(prepared, font),
|
|
148
148
|
};
|
|
149
149
|
}
|
|
150
150
|
}
|
|
151
|
-
|
|
151
|
+
// Whether this turns out to be the last line is only known once the
|
|
152
|
+
// loop ends; the ratio is computed as if it weren't and corrected below.
|
|
153
|
+
// This avoids a second layoutNextLine call per line just to peek ahead.
|
|
154
|
+
const justifiedSpaceRatio = computeJustifiedSpaceRatio(segments, lineMaxWidth, normalSpaceWidth, textAlign, false);
|
|
152
155
|
lines.push({
|
|
153
156
|
text: hyphenated ? cleanSoftHyphens(line.text) + '-' : cleanSoftHyphens(line.text),
|
|
154
157
|
bbox: createBoundingBox(lineIndent, y, line.width, lineHeightPx),
|
|
155
158
|
baseline: y + lineHeightPx * 0.8,
|
|
156
159
|
hyphenated,
|
|
157
160
|
segments,
|
|
158
|
-
isLastLine,
|
|
161
|
+
isLastLine: false,
|
|
159
162
|
...(justifiedSpaceRatio !== undefined ? { justifiedSpaceRatio } : {}),
|
|
160
163
|
});
|
|
161
164
|
cursor = nextCursor;
|
|
162
165
|
y += lineHeightPx;
|
|
163
166
|
lineIndex++;
|
|
164
167
|
}
|
|
168
|
+
const lastLine = lines[lines.length - 1];
|
|
169
|
+
if (lastLine) {
|
|
170
|
+
lastLine.isLastLine = true;
|
|
171
|
+
delete lastLine.justifiedSpaceRatio;
|
|
172
|
+
}
|
|
165
173
|
return { lines, totalHeight: y };
|
|
166
174
|
}
|
|
167
175
|
//# sourceMappingURL=plain.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plain.js","sourceRoot":"","sources":["../../src/measure/plain.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,cAAc,GAGf,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAE3C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"plain.js","sourceRoot":"","sources":["../../src/measure/plain.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rich.d.ts","sourceRoot":"","sources":["../../src/measure/rich.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAQ3C,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAIlE,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;yEACqE;IACrE,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;oFAEgF;IAChF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;2DACuD;IACvD,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;
|
|
1
|
+
{"version":3,"file":"rich.d.ts","sourceRoot":"","sources":["../../src/measure/rich.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAQ3C,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAIlE,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;yEACqE;IACrE,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB;;oFAEgF;IAChF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;2DACuD;IACvD,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAgHD;;;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,CAkMf"}
|