postext 0.3.38 → 0.3.40
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/__bench__/chapter.bench.test.d.ts +2 -0
- package/dist/__bench__/chapter.bench.test.d.ts.map +1 -0
- package/dist/__bench__/chapter.bench.test.js +80 -0
- package/dist/__bench__/chapter.bench.test.js.map +1 -0
- package/dist/__tests__/buildAsync.test.d.ts +2 -0
- package/dist/__tests__/buildAsync.test.d.ts.map +1 -0
- package/dist/__tests__/buildAsync.test.js +50 -0
- package/dist/__tests__/buildAsync.test.js.map +1 -0
- package/dist/__tests__/exports.test.js +5 -0
- package/dist/__tests__/exports.test.js.map +1 -1
- package/dist/__tests__/hyphenateMemo.test.d.ts +2 -0
- package/dist/__tests__/hyphenateMemo.test.d.ts.map +1 -0
- package/dist/__tests__/hyphenateMemo.test.js +21 -0
- package/dist/__tests__/hyphenateMemo.test.js.map +1 -0
- package/dist/__tests__/knuthPlassMerge.test.d.ts +2 -0
- package/dist/__tests__/knuthPlassMerge.test.d.ts.map +1 -0
- package/dist/__tests__/knuthPlassMerge.test.js +55 -0
- package/dist/__tests__/knuthPlassMerge.test.js.map +1 -0
- package/dist/__tests__/memos.test.d.ts +2 -0
- package/dist/__tests__/memos.test.d.ts.map +1 -0
- package/dist/__tests__/memos.test.js +37 -0
- package/dist/__tests__/memos.test.js.map +1 -0
- package/dist/__tests__/pipeline/rotatedResource.test.d.ts +2 -0
- package/dist/__tests__/pipeline/rotatedResource.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline/rotatedResource.test.js +242 -0
- package/dist/__tests__/pipeline/rotatedResource.test.js.map +1 -0
- package/dist/canvas-backend/blockRender.d.ts.map +1 -1
- package/dist/canvas-backend/blockRender.js +7 -1
- package/dist/canvas-backend/blockRender.js.map +1 -1
- package/dist/canvas-backend/index.d.ts +5 -0
- package/dist/canvas-backend/index.d.ts.map +1 -1
- package/dist/canvas-backend/index.js +7 -4
- package/dist/canvas-backend/index.js.map +1 -1
- package/dist/canvas-backend/renderResourceBlock.d.ts.map +1 -1
- package/dist/canvas-backend/renderResourceBlock.js +21 -4
- package/dist/canvas-backend/renderResourceBlock.js.map +1 -1
- package/dist/canvas-backend/swatch.d.ts +8 -0
- package/dist/canvas-backend/swatch.d.ts.map +1 -0
- package/dist/canvas-backend/swatch.js +20 -0
- package/dist/canvas-backend/swatch.js.map +1 -0
- package/dist/html-backend.d.ts.map +1 -1
- package/dist/html-backend.js +38 -10
- package/dist/html-backend.js.map +1 -1
- package/dist/hyphenate.d.ts.map +1 -1
- package/dist/hyphenate.js +50 -1
- package/dist/hyphenate.js.map +1 -1
- package/dist/index.d.ts +5 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/knuthPlass/breakpoints.d.ts.map +1 -1
- package/dist/knuthPlass/breakpoints.js +7 -1
- package/dist/knuthPlass/breakpoints.js.map +1 -1
- package/dist/knuthPlass/richAdapter.d.ts +4 -0
- package/dist/knuthPlass/richAdapter.d.ts.map +1 -1
- package/dist/knuthPlass/richAdapter.js +2 -1
- package/dist/knuthPlass/richAdapter.js.map +1 -1
- package/dist/knuthPlass/types.d.ts +8 -0
- package/dist/knuthPlass/types.d.ts.map +1 -1
- package/dist/measure/plain.d.ts.map +1 -1
- package/dist/measure/plain.js +1 -0
- package/dist/measure/plain.js.map +1 -1
- package/dist/measure/rich.d.ts +8 -0
- package/dist/measure/rich.d.ts.map +1 -1
- package/dist/measure/rich.js +25 -2
- package/dist/measure/rich.js.map +1 -1
- package/dist/parse/blockParser.d.ts +5 -3
- package/dist/parse/blockParser.d.ts.map +1 -1
- package/dist/parse/blockParser.js +45 -30
- package/dist/parse/blockParser.js.map +1 -1
- package/dist/parse/index.d.ts +2 -0
- package/dist/parse/index.d.ts.map +1 -1
- package/dist/parse/index.js +1 -0
- package/dist/parse/index.js.map +1 -1
- package/dist/parse/inlineFormatting.d.ts +26 -0
- package/dist/parse/inlineFormatting.d.ts.map +1 -1
- package/dist/parse/inlineFormatting.js +45 -0
- package/dist/parse/inlineFormatting.js.map +1 -1
- package/dist/parse/inlineSnippet.d.ts +1 -1
- package/dist/parse/inlineSnippet.d.ts.map +1 -1
- package/dist/parse/inlineSnippet.js +4 -3
- package/dist/parse/inlineSnippet.js.map +1 -1
- package/dist/parse/sourceMapping.d.ts.map +1 -1
- package/dist/parse/sourceMapping.js +19 -1
- package/dist/parse/sourceMapping.js.map +1 -1
- package/dist/parse/types.d.ts +10 -0
- package/dist/parse/types.d.ts.map +1 -1
- package/dist/pipeline/bandCaps.d.ts +16 -0
- package/dist/pipeline/bandCaps.d.ts.map +1 -1
- package/dist/pipeline/bandCaps.js +22 -0
- package/dist/pipeline/bandCaps.js.map +1 -1
- package/dist/pipeline/build.d.ts +33 -0
- package/dist/pipeline/build.d.ts.map +1 -1
- package/dist/pipeline/build.js +140 -38
- package/dist/pipeline/build.js.map +1 -1
- package/dist/pipeline/config.d.ts.map +1 -1
- package/dist/pipeline/config.js +18 -0
- package/dist/pipeline/config.js.map +1 -1
- package/dist/pipeline/floatPlacement.d.ts +10 -3
- package/dist/pipeline/floatPlacement.d.ts.map +1 -1
- package/dist/pipeline/floatPlacement.js +10 -5
- package/dist/pipeline/floatPlacement.js.map +1 -1
- package/dist/pipeline/floatSlots.d.ts +3 -0
- package/dist/pipeline/floatSlots.d.ts.map +1 -1
- package/dist/pipeline/floatSlots.js.map +1 -1
- package/dist/pipeline/index.d.ts +2 -2
- 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/pipeline/measureContentBlock.d.ts.map +1 -1
- package/dist/pipeline/measureContentBlock.js +6 -2
- package/dist/pipeline/measureContentBlock.js.map +1 -1
- package/dist/pipeline/resourceLayout.d.ts +16 -2
- package/dist/pipeline/resourceLayout.d.ts.map +1 -1
- package/dist/pipeline/resourceLayout.js +51 -4
- package/dist/pipeline/resourceLayout.js.map +1 -1
- package/dist/table/model.d.ts +7 -1
- package/dist/table/model.d.ts.map +1 -1
- package/dist/table/model.js +19 -0
- package/dist/table/model.js.map +1 -1
- package/dist/types.d.ts +18 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/vdt.d.ts +50 -1
- package/dist/vdt.d.ts.map +1 -1
- package/dist/vdt.js +29 -0
- package/dist/vdt.js.map +1 -1
- package/dist/worker/client.d.ts +18 -2
- package/dist/worker/client.d.ts.map +1 -1
- package/dist/worker/client.js +28 -3
- package/dist/worker/client.js.map +1 -1
- package/dist/worker/layout.worker.js +135 -56
- package/dist/worker/layout.worker.js.map +1 -1
- package/dist/worker/protocol.d.ts +27 -2
- package/dist/worker/protocol.d.ts.map +1 -1
- package/package.json +3 -2
|
@@ -126,6 +126,20 @@ const capKey = (spanIndex, cap) => `${spanIndex}:${cap.startContentIndex}:${cap.
|
|
|
126
126
|
* fit stage 1 costs no extra pass at all.
|
|
127
127
|
*/
|
|
128
128
|
export function resolveBandCaps(initial, runPass) {
|
|
129
|
+
return drainPasses(resolveBandCapsGen(initial, runPass));
|
|
130
|
+
}
|
|
131
|
+
/** Run a pass driver to completion synchronously. */
|
|
132
|
+
export function drainPasses(gen) {
|
|
133
|
+
for (;;) {
|
|
134
|
+
const step = gen.next();
|
|
135
|
+
if (step.done)
|
|
136
|
+
return step.value;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/** {@link resolveBandCaps} as a generator that yields after every pass it
|
|
140
|
+
* runs, so a host driving the build asynchronously can let a cancel land
|
|
141
|
+
* (or the event loop turn) between passes. */
|
|
142
|
+
export function* resolveBandCapsGen(initial, runPass) {
|
|
129
143
|
const caps = new Map();
|
|
130
144
|
let result = initial;
|
|
131
145
|
let passCount = 1;
|
|
@@ -165,6 +179,7 @@ export function resolveBandCaps(initial, runPass) {
|
|
|
165
179
|
tried.add(capKey(spanIndex, cap));
|
|
166
180
|
result = runPass(caps);
|
|
167
181
|
passCount++;
|
|
182
|
+
yield;
|
|
168
183
|
}
|
|
169
184
|
// Never hand back a layout whose columns were capped for a box that did
|
|
170
185
|
// not arrive: strip the failing caps (dropping an earlier cap can unsettle
|
|
@@ -181,6 +196,7 @@ export function resolveBandCaps(initial, runPass) {
|
|
|
181
196
|
}
|
|
182
197
|
result = runPass(caps);
|
|
183
198
|
passCount++;
|
|
199
|
+
yield;
|
|
184
200
|
}
|
|
185
201
|
return { result, bandCaps: caps, passCount };
|
|
186
202
|
}
|
|
@@ -202,6 +218,10 @@ export function resolveBandCaps(initial, runPass) {
|
|
|
202
218
|
* returned untouched.
|
|
203
219
|
*/
|
|
204
220
|
export function resolveTrailingCaps(initial, spanCaps, runPass) {
|
|
221
|
+
return drainPasses(resolveTrailingCapsGen(initial, spanCaps, runPass));
|
|
222
|
+
}
|
|
223
|
+
/** {@link resolveTrailingCaps} as a generator yielding after every pass. */
|
|
224
|
+
export function* resolveTrailingCapsGen(initial, spanCaps, runPass) {
|
|
205
225
|
const caps = new Map(spanCaps);
|
|
206
226
|
/** Caps whose band did open under them and overflowed — the only ones a
|
|
207
227
|
* pass says anything about; a cap that never applied may come back. */
|
|
@@ -227,6 +247,7 @@ export function resolveTrailingCaps(initial, spanCaps, runPass) {
|
|
|
227
247
|
for (let extra = 0; extra < MAX_BAND_PASSES; extra++) {
|
|
228
248
|
result = runPass(caps);
|
|
229
249
|
passCount++;
|
|
250
|
+
yield;
|
|
230
251
|
if ([...spanCaps.keys()].some((i) => !result.spanPlacedInBand.has(i)))
|
|
231
252
|
return giveUp();
|
|
232
253
|
const failing = trailingKeys().filter((i) => !result.spanPlacedInBand.has(i));
|
|
@@ -265,6 +286,7 @@ export function resolveTrailingCaps(initial, spanCaps, runPass) {
|
|
|
265
286
|
return giveUp();
|
|
266
287
|
result = runPass(caps);
|
|
267
288
|
passCount++;
|
|
289
|
+
yield;
|
|
268
290
|
const delivered = [...caps.keys()].every((i) => result.spanPlacedInBand.has(i));
|
|
269
291
|
return delivered ? { result, caps, passCount } : giveUp();
|
|
270
292
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bandCaps.js","sourceRoot":"","sources":["../../src/pipeline/bandCaps.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bandCaps.js","sourceRoot":"","sources":["../../src/pipeline/bandCaps.ts"],"names":[],"mappings":"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"}
|
package/dist/pipeline/build.d.ts
CHANGED
|
@@ -18,6 +18,23 @@ export interface BuildDocumentOptions {
|
|
|
18
18
|
* restarts). A long build can show a bar from it.
|
|
19
19
|
*/
|
|
20
20
|
onProgress?: (progress: BuildProgress) => void;
|
|
21
|
+
/**
|
|
22
|
+
* Called after every placement pass with its wall time — the engine
|
|
23
|
+
* re-places the document several times (band caps, column balancing,
|
|
24
|
+
* contents rounds); dev tooling shows where a build's time went.
|
|
25
|
+
*/
|
|
26
|
+
onPass?: (info: BuildPassInfo) => void;
|
|
27
|
+
}
|
|
28
|
+
/** One placement pass of a build, as reported to {@link BuildDocumentOptions.onPass}. */
|
|
29
|
+
export interface BuildPassInfo {
|
|
30
|
+
/** 1-based pass within its contents round. */
|
|
31
|
+
pass: number;
|
|
32
|
+
/** 0-based round of a document laying out its own contents (see `MAX_TOC_ROUNDS`). */
|
|
33
|
+
tocRound: number;
|
|
34
|
+
/** Wall time of the pass in ms. */
|
|
35
|
+
ms: number;
|
|
36
|
+
/** Pages the pass produced. */
|
|
37
|
+
pages: number;
|
|
21
38
|
}
|
|
22
39
|
export interface BuildProgress {
|
|
23
40
|
/** 1-based placement pass. */
|
|
@@ -72,4 +89,20 @@ export interface PassResult extends BandPassReport {
|
|
|
72
89
|
*/
|
|
73
90
|
export declare function buildDocumentPass(content: PostextContent, config?: PostextConfig, cache?: MeasurementCache, options?: BuildDocumentOptions, hints?: PassHints): PassResult;
|
|
74
91
|
export declare function buildDocument(content: PostextContent, config?: PostextConfig, cache?: MeasurementCache, options?: BuildDocumentOptions): VDTDocument;
|
|
92
|
+
/** Let the event loop turn: `scheduler.yield()` where it exists, else a
|
|
93
|
+
* message-channel hop (a `setTimeout(0)` is clamped to 4 ms once nested). */
|
|
94
|
+
export declare function yieldToEventLoop(): Promise<void>;
|
|
95
|
+
/**
|
|
96
|
+
* {@link buildDocument}, yielding to the event loop between placement
|
|
97
|
+
* passes. A build is several passes (band caps, column balancing, contents
|
|
98
|
+
* rounds), each a synchronous re-placement of the document; in a worker
|
|
99
|
+
* this lets a `cancel` posted mid-build be observed at the next pass
|
|
100
|
+
* boundary — `shouldCancel` is polled there as well as inside a pass —
|
|
101
|
+
* instead of after the whole build.
|
|
102
|
+
*/
|
|
103
|
+
export declare function buildDocumentAsync(content: PostextContent, config?: PostextConfig, cache?: MeasurementCache, options?: BuildDocumentOptions & {
|
|
104
|
+
yieldBetweenPasses?: () => Promise<void>;
|
|
105
|
+
}): Promise<VDTDocument>;
|
|
106
|
+
/** The build as a generator: one `yield` after every placement pass. */
|
|
107
|
+
export declare function buildDocumentGen(content: PostextContent, config?: PostextConfig, cache?: MeasurementCache, options?: BuildDocumentOptions): Generator<void, VDTDocument, void>;
|
|
75
108
|
//# sourceMappingURL=build.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/pipeline/build.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/pipeline/build.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAA4F,MAAM,UAAU,CAAC;AAGxJ,OAAO,EAIL,KAAK,WAAW,EAMjB,MAAM,QAAQ,CAAC;AAYhB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAmFnD,OAAO,EAA0F,KAAK,WAAW,EAAuG,MAAM,mBAAmB,CAAC;AAClP,OAAO,EAQL,KAAK,OAAO,EACZ,KAAK,cAAc,EAGpB,MAAM,YAAY,CAAC;AAOpB,MAAM,WAAW,oBAAoB;IACnC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC;IAC7B;;;;;OAKG;IACH,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAC;IAC/C;;;;OAIG;IACH,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;CACxC;AAED,yFAAyF;AACzF,MAAM,WAAW,aAAa;IAC5B,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,sFAAsF;IACtF,QAAQ,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb;qCACiC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,mBAAoB,SAAQ,KAAK;;CAK7C;AAWD;yEACyE;AACzE,MAAM,WAAW,SAAS;IACxB,8EAA8E;IAC9E,cAAc,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,+EAA+E;IAC/E,gBAAgB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C;4EACwE;IACxE,kBAAkB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACtD,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,UAAW,SAAQ,cAAc;IAChD,GAAG,EAAE,WAAW,CAAC;IACjB;;+DAE2D;IAC3D,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7B;;;4EAGwE;IACxE,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;CAC1C;AAuCD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,cAAc,EACvB,MAAM,CAAC,EAAE,aAAa,EACtB,KAAK,CAAC,EAAE,gBAAgB,EACxB,OAAO,CAAC,EAAE,oBAAoB,EAC9B,KAAK,GAAE,SAAc,GACpB,UAAU,CAk6FZ;AAMD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,cAAc,EACvB,MAAM,CAAC,EAAE,aAAa,EACtB,KAAK,CAAC,EAAE,gBAAgB,EACxB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,WAAW,CAEb;AAED;8EAC8E;AAC9E,wBAAgB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAchD;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,cAAc,EACvB,MAAM,CAAC,EAAE,aAAa,EACtB,KAAK,CAAC,EAAE,gBAAgB,EACxB,OAAO,CAAC,EAAE,oBAAoB,GAAG;IAAE,kBAAkB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,GAC5E,OAAO,CAAC,WAAW,CAAC,CAStB;AAED,wEAAwE;AACxE,wBAAiB,gBAAgB,CAC/B,OAAO,EAAE,cAAc,EACvB,MAAM,CAAC,EAAE,aAAa,EACtB,KAAK,CAAC,EAAE,gBAAgB,EACxB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,SAAS,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,CAqBpC"}
|
package/dist/pipeline/build.js
CHANGED
|
@@ -26,7 +26,7 @@ import { computeHeadingContext, computeResourceNumbering, } from './resourceNumb
|
|
|
26
26
|
import { defaultResourceTypes } from '../defaults/resourceTypes';
|
|
27
27
|
import { buildHeadersAndFooters, measureHeadingAdvancedDesignHeight } from './headerFooter';
|
|
28
28
|
import { proposeBalanceLines, collectColumnGaps, firstDivergentColumn, gapLinesIn, pageSegments, MAX_BALANCING_PASSES, MAX_BALANCING_PASSES_PER_DOCUMENT, balanceKey } from './columnBalancing';
|
|
29
|
-
import { applyBandCap, uncapBand, columnBottom, bandCapLines, bandTop,
|
|
29
|
+
import { applyBandCap, uncapBand, columnBottom, bandCapLines, bandTop, resolveBandCapsGen, drainPasses, resolveTrailingCapsGen, bandCapLinesAroundZone, } from './bandCaps';
|
|
30
30
|
import { raggedLooseLines } from './raggedLines';
|
|
31
31
|
/** Tolerance for "does this block fit" checks against a column's free
|
|
32
32
|
* height, absorbing floating-point drift between grid multiples. */
|
|
@@ -233,6 +233,13 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
233
233
|
/** Offset a resolved resource block's caption/table geometry from
|
|
234
234
|
* block-relative to absolute page coordinates (mirrors inline placement). */
|
|
235
235
|
const offsetResourceBlockToAbsolute = (rb, ox, oy) => {
|
|
236
|
+
// A rotated block keeps its geometry in the upright frame; only the
|
|
237
|
+
// frame's origin moves on the page.
|
|
238
|
+
if (rb.rotation) {
|
|
239
|
+
rb.rotation.originX += ox;
|
|
240
|
+
rb.rotation.originY += oy;
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
236
243
|
for (const ln of rb.captionLines) {
|
|
237
244
|
ln.bbox.x += ox;
|
|
238
245
|
ln.bbox.y += oy;
|
|
@@ -268,7 +275,8 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
268
275
|
}
|
|
269
276
|
}
|
|
270
277
|
};
|
|
271
|
-
const
|
|
278
|
+
const rotationKey = (rotated) => rotated ? `:${rotated.direction}${rotated.length.toFixed(2)}` : '';
|
|
279
|
+
const layoutFloat = (resourceId, width, slice, rotated) => {
|
|
272
280
|
const resource = resourceById.get(resourceId);
|
|
273
281
|
if (!resource)
|
|
274
282
|
return null;
|
|
@@ -282,8 +290,15 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
282
290
|
resourceTypes,
|
|
283
291
|
resources,
|
|
284
292
|
...(slice ? { slice } : {}),
|
|
293
|
+
...(rotated ? { rotate: rotated.direction, rotatedLength: rotated.length } : {}),
|
|
285
294
|
});
|
|
286
295
|
};
|
|
296
|
+
/** The rotation of a pending float on a band whose columns keep `avail`
|
|
297
|
+
* px: the upright frame is as long as the grid multiple within that
|
|
298
|
+
* room, less the float gap, so the band it takes is `avail` at most. */
|
|
299
|
+
const rotationFor = (f, avail) => f.rotate
|
|
300
|
+
? { direction: f.rotate, length: Math.max(1, Math.floor((avail + 0.01) / baselineGrid) * baselineGrid - floatGapPx) }
|
|
301
|
+
: undefined;
|
|
287
302
|
/** Row count of a table resource (0 for anything else). */
|
|
288
303
|
const tableRowCount = (resourceId) => resourceById.get(resourceId)?.table?.model.rows.length ?? 0;
|
|
289
304
|
/** The slice a pending float stands for: the whole resource, or — for the
|
|
@@ -295,26 +310,31 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
295
310
|
const sliceKey = (slice) => slice ? `:${slice.startRow}-${slice.endRow}${slice.continues ? '+' : ''}` : '';
|
|
296
311
|
/** Row metrics of a table float laid out in full at a width, memoised. */
|
|
297
312
|
const tableMetricsMemo = new Map();
|
|
298
|
-
const tableMetrics = (resourceId, width) => {
|
|
299
|
-
const key = `${resourceId}:${width.toFixed(2)}`;
|
|
313
|
+
const tableMetrics = (resourceId, width, rotated) => {
|
|
314
|
+
const key = `${resourceId}:${width.toFixed(2)}${rotationKey(rotated)}`;
|
|
300
315
|
const memo = tableMetricsMemo.get(key);
|
|
301
316
|
if (memo !== undefined)
|
|
302
317
|
return memo;
|
|
303
|
-
const m = layoutFloat(resourceId, width)?.tableRows ?? null;
|
|
318
|
+
const m = layoutFloat(resourceId, width, undefined, rotated)?.tableRows ?? null;
|
|
304
319
|
tableMetricsMemo.set(key, m);
|
|
305
320
|
return m;
|
|
306
321
|
};
|
|
307
322
|
/** Height (and caption baseline) of a float at a given width, memoised —
|
|
308
323
|
* fit checks run for every pending float on every loop iteration. */
|
|
309
324
|
const floatMeasureMemo = new Map();
|
|
310
|
-
const measureFloat = (resourceId, width, slice) => {
|
|
311
|
-
const key = `${resourceId}:${width.toFixed(2)}${sliceKey(slice)}`;
|
|
325
|
+
const measureFloat = (resourceId, width, slice, rotated) => {
|
|
326
|
+
const key = `${resourceId}:${width.toFixed(2)}${sliceKey(slice)}${rotationKey(rotated)}`;
|
|
312
327
|
const memo = floatMeasureMemo.get(key);
|
|
313
328
|
if (memo !== undefined)
|
|
314
329
|
return memo;
|
|
315
|
-
const laid = layoutFloat(resourceId, width, slice);
|
|
330
|
+
const laid = layoutFloat(resourceId, width, slice, rotated);
|
|
316
331
|
let m = null;
|
|
317
|
-
if (laid) {
|
|
332
|
+
if (laid && laid.block.rotation) {
|
|
333
|
+
// A rotated block takes its band whole: no caption baseline to align,
|
|
334
|
+
// and its upright height is what must fit the band's width.
|
|
335
|
+
m = { height: laid.totalHeight, rotatedWidth: laid.block.rotation.height };
|
|
336
|
+
}
|
|
337
|
+
else if (laid) {
|
|
318
338
|
// A bottom band aligns the float's LAST text line to the grid: the
|
|
319
339
|
// caption's (or the note's) last line when it sits under the body. A
|
|
320
340
|
// caption set above the body (caption bars) leaves the body's bottom
|
|
@@ -338,8 +358,11 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
338
358
|
};
|
|
339
359
|
/** Measure + build a float block at horizontal offset `x` (y = 0), or null
|
|
340
360
|
* when the resource id is unknown. Caller offsets it to its final `y`. */
|
|
341
|
-
const buildFloatBlock = (resourceId, x, width, slice
|
|
342
|
-
|
|
361
|
+
const buildFloatBlock = (resourceId, x, width, slice, rotated,
|
|
362
|
+
/** A rotated block sits flush to the band's right edge (the spine of a
|
|
363
|
+
* verso page) instead of its left. */
|
|
364
|
+
flushEnd = false) => {
|
|
365
|
+
const laid = layoutFloat(resourceId, width, slice, rotated);
|
|
343
366
|
if (!laid)
|
|
344
367
|
return null;
|
|
345
368
|
const { block: rb, totalHeight } = laid;
|
|
@@ -350,9 +373,23 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
350
373
|
blk.snappedToGrid = false;
|
|
351
374
|
blk.bbox = createBoundingBox(x, 0, width, totalHeight);
|
|
352
375
|
blk.lines = [];
|
|
353
|
-
|
|
376
|
+
if (rb.rotation) {
|
|
377
|
+
// The upright frame's origin: for a counter-clockwise turn the frame's
|
|
378
|
+
// top-left lands at the bottom-left of the block, for a clockwise one
|
|
379
|
+
// at its top-right (see `resourceBlockToPage`).
|
|
380
|
+
const used = Math.min(rb.rotation.height, width);
|
|
381
|
+
const left = x + (flushEnd ? Math.max(0, width - used) : 0);
|
|
382
|
+
rb.rotation.originX = rb.rotation.direction === 'ccw' ? left : left + used;
|
|
383
|
+
rb.rotation.originY = rb.rotation.direction === 'ccw' ? totalHeight : 0;
|
|
384
|
+
}
|
|
385
|
+
else {
|
|
386
|
+
offsetResourceBlockToAbsolute(rb, x, 0);
|
|
387
|
+
}
|
|
354
388
|
return { block: blk, height: totalHeight };
|
|
355
389
|
};
|
|
390
|
+
/** Whether a rotated float on `page` sits flush to the band's right edge:
|
|
391
|
+
* with mirrored margins the spine of a verso (even-numbered) page. */
|
|
392
|
+
const rotatedFlushEnd = (page) => !!resolved.page.margins.mirror && (page.index + pageIndexOffset) % 2 === 1;
|
|
356
393
|
/** Float bands reserved per column in this pass (the fresh-page flush
|
|
357
394
|
* sends single-column floats to the least reserved column). */
|
|
358
395
|
const floatReserved = new Map();
|
|
@@ -386,14 +423,14 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
386
423
|
* (current-page) mode nothing is forced: `'none'` when not even the
|
|
387
424
|
* smallest slice fits the slot.
|
|
388
425
|
*/
|
|
389
|
-
const splitTableFloat = (f, width, position, targetCols, contentArea, avail, mode) => {
|
|
426
|
+
const splitTableFloat = (f, width, position, targetCols, contentArea, avail, mode, rotated) => {
|
|
390
427
|
const rowCount = tableRowCount(f.resourceId);
|
|
391
428
|
if (rowCount === 0)
|
|
392
429
|
return null;
|
|
393
430
|
const overflow = resolved.tableStyle.overflow;
|
|
394
431
|
if (overflow === 'hide')
|
|
395
432
|
return 'skip';
|
|
396
|
-
const metrics = tableMetrics(f.resourceId, width);
|
|
433
|
+
const metrics = tableMetrics(f.resourceId, width, rotated);
|
|
397
434
|
if (!metrics)
|
|
398
435
|
return null;
|
|
399
436
|
const startRow = f.startRow ?? 0;
|
|
@@ -402,14 +439,16 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
402
439
|
return null;
|
|
403
440
|
// Overhead of a continuing slice at this width — caption, gaps, marker —
|
|
404
441
|
// from a one-row probe; the row heights come from the metrics.
|
|
405
|
-
const probe = layoutFloat(f.resourceId, width, { startRow, endRow: firstBody + 1, continues: true });
|
|
442
|
+
const probe = layoutFloat(f.resourceId, width, { startRow, endRow: firstBody + 1, continues: true }, rotated);
|
|
406
443
|
if (!probe)
|
|
407
444
|
return null;
|
|
408
|
-
|
|
445
|
+
// A rotated table's rows run across the page: the room for them is
|
|
446
|
+
// the band's width, less the upright overhead.
|
|
447
|
+
const overhead = (probe.block.rotation ? probe.block.rotation.height : probe.totalHeight) - probe.block.bodyRect.height;
|
|
409
448
|
// A top band rounds up to the grid: the tallest float it holds within
|
|
410
449
|
// `avail` is the grid multiple below it, less the gap.
|
|
411
450
|
const hMax = Math.floor((avail + 0.01) / baselineGrid) * baselineGrid - floatGapPx;
|
|
412
|
-
let end = planTableSlice(metrics, startRow, hMax - overhead);
|
|
451
|
+
let end = planTableSlice(metrics, startRow, (rotated ? width : hMax) - overhead);
|
|
413
452
|
const floor = firstBody + 1;
|
|
414
453
|
if (end < floor) {
|
|
415
454
|
// Nothing fits. A fresh page carries the smallest slice anyway (it
|
|
@@ -432,9 +471,11 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
432
471
|
end = e;
|
|
433
472
|
}
|
|
434
473
|
const fits = (slice) => {
|
|
435
|
-
const measure = measureFloat(f.resourceId, width, slice);
|
|
474
|
+
const measure = measureFloat(f.resourceId, width, slice, rotated);
|
|
436
475
|
if (!measure)
|
|
437
476
|
return true;
|
|
477
|
+
if (rotated)
|
|
478
|
+
return (measure.rotatedWidth ?? 0) <= width + 0.01;
|
|
438
479
|
const { need } = measureFloatBand(position, measure, targetCols, contentArea, baselineGrid, floatGapPx, (c) => trueBottom(c, uncappedBottoms));
|
|
439
480
|
return need <= avail + 0.01;
|
|
440
481
|
};
|
|
@@ -478,7 +519,8 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
478
519
|
const width = pageSpan ? page.contentArea.width : first.bbox.width;
|
|
479
520
|
const xLeft = pageSpan ? page.contentArea.x : first.bbox.x;
|
|
480
521
|
const slice = sliceOf(f);
|
|
481
|
-
const
|
|
522
|
+
const rotated = rotationFor(f, Math.min(...targetCols.map((c) => c.availableHeight)));
|
|
523
|
+
const measure = measureFloat(f.resourceId, width, slice, rotated);
|
|
482
524
|
if (!measure)
|
|
483
525
|
return null;
|
|
484
526
|
// A bottom band normally anchors to the column's true foot (under a
|
|
@@ -487,7 +529,7 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
487
529
|
// and the box follows both.
|
|
488
530
|
const bottomOf = (c) => anchorToCap ? c.bbox.y + c.bbox.height : trueBottom(c, uncappedBottoms);
|
|
489
531
|
const { need, y } = measureFloatBand(position, measure, targetCols, page.contentArea, baselineGrid, floatGapPx, bottomOf);
|
|
490
|
-
return { need, y, measure, slice, width, xLeft };
|
|
532
|
+
return { need, y, measure, slice, width, xLeft, rotated };
|
|
491
533
|
};
|
|
492
534
|
/** Free height `col` keeps for the flow once a float band `probe` is
|
|
493
535
|
* reserved in it at `position` (mirrors the reservation arithmetic of
|
|
@@ -506,11 +548,13 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
506
548
|
const probe = probeFloatBand(page, f, targetCols, position, pageSpan, anchorToCap);
|
|
507
549
|
if (!probe)
|
|
508
550
|
return 'skip';
|
|
509
|
-
const { width, xLeft } = probe;
|
|
551
|
+
const { width, xLeft, rotated } = probe;
|
|
510
552
|
let { slice, measure, need, y } = probe;
|
|
511
553
|
let rest;
|
|
512
554
|
/** The float was cut to this slot (a table slice). */
|
|
513
555
|
let cut = false;
|
|
556
|
+
/** A rotated block wider than the band (its upright height). */
|
|
557
|
+
const tooWide = (m) => m.rotatedWidth !== undefined && m.rotatedWidth > width + 0.01;
|
|
514
558
|
if (mode === 'fresh') {
|
|
515
559
|
let minAvail = Infinity;
|
|
516
560
|
let anyReserved = false;
|
|
@@ -522,16 +566,17 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
522
566
|
}
|
|
523
567
|
if (need > minAvail - minTextPx && anyReserved)
|
|
524
568
|
return 'defer';
|
|
525
|
-
if (need > minAvail + 0.01) {
|
|
526
|
-
// Dominating the band: a table is cut to it
|
|
527
|
-
|
|
569
|
+
if (need > minAvail + 0.01 || tooWide(measure)) {
|
|
570
|
+
// Dominating the band: a table is cut to it (a rotated table, to
|
|
571
|
+
// the band's width).
|
|
572
|
+
const split = splitTableFloat(f, width, position, targetCols, page.contentArea, minAvail, 'fresh', rotated);
|
|
528
573
|
if (split === 'skip')
|
|
529
574
|
return 'skip';
|
|
530
575
|
if (split && split !== 'none') {
|
|
531
576
|
slice = split.slice;
|
|
532
577
|
rest = split.rest;
|
|
533
578
|
cut = true;
|
|
534
|
-
const m = measureFloat(f.resourceId, width, slice);
|
|
579
|
+
const m = measureFloat(f.resourceId, width, slice, rotated);
|
|
535
580
|
if (!m)
|
|
536
581
|
return 'skip';
|
|
537
582
|
measure = m;
|
|
@@ -540,6 +585,11 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
540
585
|
}
|
|
541
586
|
}
|
|
542
587
|
else {
|
|
588
|
+
// A rotated block takes a page of its own: it never shares the
|
|
589
|
+
// current page's foot, and waits for a fresh page to be cut to when
|
|
590
|
+
// too wide.
|
|
591
|
+
if (f.rotate || tooWide(measure))
|
|
592
|
+
return 'defer';
|
|
543
593
|
for (const c of targetCols) {
|
|
544
594
|
if (position === 'bottom' && uncappedBottoms.has(c) && !anchorToCap) {
|
|
545
595
|
// Trailing cap: the band must lie entirely below the level cut.
|
|
@@ -585,7 +635,7 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
585
635
|
if (rest) {
|
|
586
636
|
rest = { ...rest, notBefore: { pageIndex: page.index, columnIndex: targetCols[targetCols.length - 1].index } };
|
|
587
637
|
}
|
|
588
|
-
const built = buildFloatBlock(f.resourceId, xLeft, width, slice);
|
|
638
|
+
const built = buildFloatBlock(f.resourceId, xLeft, width, slice, rotated, rotated ? rotatedFlushEnd(page) : false);
|
|
589
639
|
if (!built)
|
|
590
640
|
return 'skip';
|
|
591
641
|
for (const col of targetCols) {
|
|
@@ -653,7 +703,8 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
653
703
|
}
|
|
654
704
|
return false;
|
|
655
705
|
};
|
|
656
|
-
|
|
706
|
+
/** A rotated float takes its page from the top. */
|
|
707
|
+
const positionsFor = (f) => f.rotate ? ['top'] : f.position === 'auto' ? ['top', 'bottom'] : [f.position];
|
|
657
708
|
/** Reserve top/bottom bands on a freshly opened page and position as many
|
|
658
709
|
* pending floats as fit, shrinking the affected columns so body text flows
|
|
659
710
|
* around them. Full-width (page-span) floats reserve the outermost bands
|
|
@@ -2872,6 +2923,48 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
2872
2923
|
* first, for the page labels it prints to settle. */
|
|
2873
2924
|
const MAX_TOC_ROUNDS = 3;
|
|
2874
2925
|
export function buildDocument(content, config, cache, options) {
|
|
2926
|
+
return drainPasses(buildDocumentGen(content, config, cache, options));
|
|
2927
|
+
}
|
|
2928
|
+
/** Let the event loop turn: `scheduler.yield()` where it exists, else a
|
|
2929
|
+
* message-channel hop (a `setTimeout(0)` is clamped to 4 ms once nested). */
|
|
2930
|
+
export function yieldToEventLoop() {
|
|
2931
|
+
const scheduler = globalThis.scheduler;
|
|
2932
|
+
if (scheduler?.yield)
|
|
2933
|
+
return scheduler.yield();
|
|
2934
|
+
if (typeof MessageChannel !== 'undefined') {
|
|
2935
|
+
return new Promise((resolve) => {
|
|
2936
|
+
const channel = new MessageChannel();
|
|
2937
|
+
channel.port1.onmessage = () => {
|
|
2938
|
+
channel.port1.close();
|
|
2939
|
+
resolve();
|
|
2940
|
+
};
|
|
2941
|
+
channel.port2.postMessage(null);
|
|
2942
|
+
});
|
|
2943
|
+
}
|
|
2944
|
+
return new Promise((resolve) => setTimeout(resolve, 0));
|
|
2945
|
+
}
|
|
2946
|
+
/**
|
|
2947
|
+
* {@link buildDocument}, yielding to the event loop between placement
|
|
2948
|
+
* passes. A build is several passes (band caps, column balancing, contents
|
|
2949
|
+
* rounds), each a synchronous re-placement of the document; in a worker
|
|
2950
|
+
* this lets a `cancel` posted mid-build be observed at the next pass
|
|
2951
|
+
* boundary — `shouldCancel` is polled there as well as inside a pass —
|
|
2952
|
+
* instead of after the whole build.
|
|
2953
|
+
*/
|
|
2954
|
+
export async function buildDocumentAsync(content, config, cache, options) {
|
|
2955
|
+
const gen = buildDocumentGen(content, config, cache, options);
|
|
2956
|
+
const pause = options?.yieldBetweenPasses ?? yieldToEventLoop;
|
|
2957
|
+
for (;;) {
|
|
2958
|
+
const step = gen.next();
|
|
2959
|
+
if (step.done)
|
|
2960
|
+
return step.value;
|
|
2961
|
+
await pause();
|
|
2962
|
+
if (options?.shouldCancel?.())
|
|
2963
|
+
throw new BuildCancelledError();
|
|
2964
|
+
}
|
|
2965
|
+
}
|
|
2966
|
+
/** The build as a generator: one `yield` after every placement pass. */
|
|
2967
|
+
export function* buildDocumentGen(content, config, cache, options) {
|
|
2875
2968
|
// A document printing its own table of contents (`:::toc` with no
|
|
2876
2969
|
// host-supplied outline) is laid out with the page labels of the previous
|
|
2877
2970
|
// build until they no longer change: the contents' own length moves what
|
|
@@ -2881,36 +2974,44 @@ export function buildDocument(content, config, cache, options) {
|
|
|
2881
2974
|
const parsed = parseMarkdownMemo(extractFrontmatter(content.markdown).content);
|
|
2882
2975
|
if (hasTocDirective(parsed)) {
|
|
2883
2976
|
let outline = computeOutline(parsed, resolveAllConfig(config), content.continuation?.headings);
|
|
2884
|
-
let doc = buildDocumentBalanced({ ...content, outline }, config, cache, options);
|
|
2977
|
+
let doc = yield* buildDocumentBalanced({ ...content, outline }, config, cache, options, 0);
|
|
2885
2978
|
for (let round = 0; round < MAX_TOC_ROUNDS; round++) {
|
|
2886
2979
|
const after = outlineFromDoc(doc, outline);
|
|
2887
2980
|
if (sameOutline(after, outline))
|
|
2888
2981
|
break;
|
|
2889
2982
|
outline = after;
|
|
2890
|
-
doc = buildDocumentBalanced({ ...content, outline }, config, cache, options);
|
|
2983
|
+
doc = yield* buildDocumentBalanced({ ...content, outline }, config, cache, options, round + 1);
|
|
2891
2984
|
}
|
|
2892
2985
|
return doc;
|
|
2893
2986
|
}
|
|
2894
2987
|
}
|
|
2895
|
-
return buildDocumentBalanced(content, config, cache, options);
|
|
2988
|
+
return yield* buildDocumentBalanced(content, config, cache, options);
|
|
2896
2989
|
}
|
|
2897
|
-
|
|
2990
|
+
const now = () => (typeof performance !== 'undefined' ? performance.now() : Date.now());
|
|
2991
|
+
function* buildDocumentBalanced(content, config, cache, options, tocRound = 0) {
|
|
2898
2992
|
// Each pass reports its own progress, numbered in build order.
|
|
2899
2993
|
let passIndex = 0;
|
|
2900
2994
|
const onProgress = options?.onProgress;
|
|
2995
|
+
const onPass = options?.onPass;
|
|
2901
2996
|
const passOptions = onProgress
|
|
2902
2997
|
? { ...options, onProgress: (p) => onProgress({ ...p, pass: passIndex }) }
|
|
2903
2998
|
: options;
|
|
2904
2999
|
const runPass = (hints) => {
|
|
2905
3000
|
passIndex++;
|
|
2906
|
-
|
|
3001
|
+
const started = onPass ? now() : 0;
|
|
3002
|
+
const result = buildDocumentPass(content, config, cache, passOptions, hints);
|
|
3003
|
+
onPass?.({ pass: passIndex, tocRound, ms: now() - started, pages: result.doc.pages.length });
|
|
3004
|
+
return result;
|
|
2907
3005
|
};
|
|
3006
|
+
// The first pass is a pass too: let a cancel land before the caps run.
|
|
3007
|
+
const initial = runPass();
|
|
3008
|
+
yield;
|
|
2908
3009
|
// --- Band caps (page-span blocks mid-page) -----------------------------
|
|
2909
3010
|
// A span block that arrived in an uneven band proposes a cap; the driver
|
|
2910
3011
|
// re-places the document with it (and grows / drops caps whose band
|
|
2911
3012
|
// overflowed) before balancing runs. Documents without such blocks get
|
|
2912
3013
|
// their first pass back untouched — no extra pass.
|
|
2913
|
-
const bands =
|
|
3014
|
+
const bands = yield* resolveBandCapsGen(initial, (bandCaps) => runPass({ bandCaps }));
|
|
2914
3015
|
let best = bands.result;
|
|
2915
3016
|
const bandCaps = bands.bandCaps;
|
|
2916
3017
|
let passCount = bands.passCount;
|
|
@@ -3103,7 +3204,7 @@ function buildDocumentBalanced(content, config, cache, options) {
|
|
|
3103
3204
|
return blacklist(null);
|
|
3104
3205
|
};
|
|
3105
3206
|
let balancingPasses = 0;
|
|
3106
|
-
|
|
3207
|
+
function* balance() {
|
|
3107
3208
|
while (balancingPasses < MAX_BALANCING_PASSES_PER_DOCUMENT) {
|
|
3108
3209
|
const active = segments.filter((s) => !s.done);
|
|
3109
3210
|
if (active.length === 0)
|
|
@@ -3173,6 +3274,7 @@ function buildDocumentBalanced(content, config, cache, options) {
|
|
|
3173
3274
|
const next = runPass(hintsFrom(proposal.lines, proposal.loose, proposal.looseBudget));
|
|
3174
3275
|
passCount++;
|
|
3175
3276
|
balancingPasses++;
|
|
3277
|
+
yield;
|
|
3176
3278
|
const nextGaps = collectColumnGaps(next.doc, next.forcedBreakPages);
|
|
3177
3279
|
const capPage = pageOfContent(best.doc);
|
|
3178
3280
|
const accepted = [];
|
|
@@ -3236,9 +3338,9 @@ function buildDocumentBalanced(content, config, cache, options) {
|
|
|
3236
3338
|
if (accepted.length > 0)
|
|
3237
3339
|
best = spliceSegments(next, accepted);
|
|
3238
3340
|
}
|
|
3239
|
-
}
|
|
3341
|
+
}
|
|
3240
3342
|
resetSegments();
|
|
3241
|
-
balance();
|
|
3343
|
+
yield* balance();
|
|
3242
3344
|
// --- Trailing bands (closing columns cut level) -------------------------
|
|
3243
3345
|
// Once the balancing levers have settled the earlier pages, level the
|
|
3244
3346
|
// closing band of every chapter / the document with a trailing cap. It is
|
|
@@ -3249,14 +3351,14 @@ function buildDocumentBalanced(content, config, cache, options) {
|
|
|
3249
3351
|
// fill what the cut left short (a column ending a line under the cap).
|
|
3250
3352
|
if (balancing.trailing) {
|
|
3251
3353
|
const frozen = hintsFrom(applied.lines, applied.loose);
|
|
3252
|
-
const trailing =
|
|
3354
|
+
const trailing = yield* resolveTrailingCapsGen(best, bandCaps, (caps) => runPass({ ...frozen, bandCaps: caps }));
|
|
3253
3355
|
passCount += trailing.passCount;
|
|
3254
3356
|
if (trailing.result !== best) {
|
|
3255
3357
|
best = trailing.result;
|
|
3256
3358
|
for (const [i, cap] of trailing.caps)
|
|
3257
3359
|
bandCaps.set(i, cap);
|
|
3258
3360
|
resetSegments();
|
|
3259
|
-
balance();
|
|
3361
|
+
yield* balance();
|
|
3260
3362
|
}
|
|
3261
3363
|
}
|
|
3262
3364
|
best.doc.iterationCount = passCount;
|