postext 0.3.18 → 0.3.20
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.js +183 -5
- package/dist/__tests__/columnBalancing.test.js.map +1 -1
- package/dist/__tests__/defaults/calloutStyles.test.d.ts +2 -0
- package/dist/__tests__/defaults/calloutStyles.test.d.ts.map +1 -0
- package/dist/__tests__/defaults/calloutStyles.test.js +201 -0
- package/dist/__tests__/defaults/calloutStyles.test.js.map +1 -0
- package/dist/__tests__/defaults/captionStyle.test.d.ts +2 -0
- package/dist/__tests__/defaults/captionStyle.test.d.ts.map +1 -0
- package/dist/__tests__/defaults/captionStyle.test.js +87 -0
- package/dist/__tests__/defaults/captionStyle.test.js.map +1 -0
- package/dist/__tests__/defaults/pageSizePreset.test.d.ts +2 -0
- package/dist/__tests__/defaults/pageSizePreset.test.d.ts.map +1 -0
- package/dist/__tests__/defaults/pageSizePreset.test.js +24 -0
- package/dist/__tests__/defaults/pageSizePreset.test.js.map +1 -0
- package/dist/__tests__/defaults/paragraphStyles.test.d.ts +2 -0
- package/dist/__tests__/defaults/paragraphStyles.test.d.ts.map +1 -0
- package/dist/__tests__/defaults/paragraphStyles.test.js +93 -0
- package/dist/__tests__/defaults/paragraphStyles.test.js.map +1 -0
- package/dist/__tests__/design/pageAnchors.test.d.ts +2 -0
- package/dist/__tests__/design/pageAnchors.test.d.ts.map +1 -0
- package/dist/__tests__/design/pageAnchors.test.js +140 -0
- package/dist/__tests__/design/pageAnchors.test.js.map +1 -0
- package/dist/__tests__/directives.test.js +58 -0
- package/dist/__tests__/directives.test.js.map +1 -1
- package/dist/__tests__/exports.test.js +19 -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__/mirroredMargins.test.d.ts +2 -0
- package/dist/__tests__/mirroredMargins.test.d.ts.map +1 -0
- package/dist/__tests__/mirroredMargins.test.js +136 -0
- package/dist/__tests__/mirroredMargins.test.js.map +1 -0
- package/dist/__tests__/numbering.test.js +54 -0
- package/dist/__tests__/numbering.test.js.map +1 -1
- package/dist/__tests__/openerTitleSource.test.d.ts +2 -0
- package/dist/__tests__/openerTitleSource.test.d.ts.map +1 -0
- package/dist/__tests__/openerTitleSource.test.js +108 -0
- package/dist/__tests__/openerTitleSource.test.js.map +1 -0
- package/dist/__tests__/pageRoles.test.d.ts +2 -0
- package/dist/__tests__/pageRoles.test.d.ts.map +1 -0
- package/dist/__tests__/pageRoles.test.js +95 -0
- package/dist/__tests__/pageRoles.test.js.map +1 -0
- package/dist/__tests__/parse/containers.test.d.ts +2 -0
- package/dist/__tests__/parse/containers.test.d.ts.map +1 -0
- package/dist/__tests__/parse/containers.test.js +204 -0
- package/dist/__tests__/parse/containers.test.js.map +1 -0
- package/dist/__tests__/parse/headingAttrs.test.d.ts +2 -0
- package/dist/__tests__/parse/headingAttrs.test.d.ts.map +1 -0
- package/dist/__tests__/parse/headingAttrs.test.js +62 -0
- package/dist/__tests__/parse/headingAttrs.test.js.map +1 -0
- package/dist/__tests__/parse/inlineRef.test.js +26 -0
- package/dist/__tests__/parse/inlineRef.test.js.map +1 -1
- package/dist/__tests__/parts.test.d.ts +2 -0
- package/dist/__tests__/parts.test.d.ts.map +1 -0
- package/dist/__tests__/parts.test.js +405 -0
- package/dist/__tests__/parts.test.js.map +1 -0
- package/dist/__tests__/pipeline/calloutLayout.test.d.ts +2 -0
- package/dist/__tests__/pipeline/calloutLayout.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline/calloutLayout.test.js +273 -0
- package/dist/__tests__/pipeline/calloutLayout.test.js.map +1 -0
- package/dist/__tests__/pipeline/calloutPlacement.test.d.ts +2 -0
- package/dist/__tests__/pipeline/calloutPlacement.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline/calloutPlacement.test.js +239 -0
- package/dist/__tests__/pipeline/calloutPlacement.test.js.map +1 -0
- package/dist/__tests__/pipeline/captionLayout.test.d.ts +2 -0
- package/dist/__tests__/pipeline/captionLayout.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline/captionLayout.test.js +269 -0
- package/dist/__tests__/pipeline/captionLayout.test.js.map +1 -0
- package/dist/__tests__/pipeline/inlineRefRender.test.js +53 -0
- package/dist/__tests__/pipeline/inlineRefRender.test.js.map +1 -1
- package/dist/__tests__/pipeline/orderedSeparator.test.d.ts +2 -0
- package/dist/__tests__/pipeline/orderedSeparator.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline/orderedSeparator.test.js +196 -0
- package/dist/__tests__/pipeline/orderedSeparator.test.js.map +1 -0
- package/dist/__tests__/pipeline/paragraphStyles.test.d.ts +2 -0
- package/dist/__tests__/pipeline/paragraphStyles.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline/paragraphStyles.test.js +172 -0
- package/dist/__tests__/pipeline/paragraphStyles.test.js.map +1 -0
- package/dist/__tests__/pipeline/spanBands.test.d.ts +2 -0
- package/dist/__tests__/pipeline/spanBands.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline/spanBands.test.js +303 -0
- package/dist/__tests__/pipeline/spanBands.test.js.map +1 -0
- package/dist/__tests__/pipeline/spanBlocks.test.d.ts +2 -0
- package/dist/__tests__/pipeline/spanBlocks.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline/spanBlocks.test.js +407 -0
- package/dist/__tests__/pipeline/spanBlocks.test.js.map +1 -0
- package/dist/__tests__/placeholders.test.d.ts +2 -0
- package/dist/__tests__/placeholders.test.d.ts.map +1 -0
- package/dist/__tests__/placeholders.test.js +130 -0
- package/dist/__tests__/placeholders.test.js.map +1 -0
- package/dist/__tests__/table/model.test.js +24 -0
- package/dist/__tests__/table/model.test.js.map +1 -1
- package/dist/canvas-backend/blockRender.d.ts.map +1 -1
- package/dist/canvas-backend/blockRender.js +13 -1
- package/dist/canvas-backend/blockRender.js.map +1 -1
- package/dist/canvas-backend/decorations.d.ts +3 -0
- package/dist/canvas-backend/decorations.d.ts.map +1 -1
- package/dist/canvas-backend/decorations.js +14 -8
- package/dist/canvas-backend/decorations.js.map +1 -1
- package/dist/canvas-backend/headerFooter.d.ts.map +1 -1
- package/dist/canvas-backend/headerFooter.js +23 -0
- 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 +4 -2
- 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 +33 -5
- package/dist/canvas-backend/renderResourceBlock.js.map +1 -1
- package/dist/columnRule.d.ts +19 -0
- package/dist/columnRule.d.ts.map +1 -0
- package/dist/columnRule.js +36 -0
- package/dist/columnRule.js.map +1 -0
- package/dist/defaults/calloutStyles.d.ts +61 -0
- package/dist/defaults/calloutStyles.d.ts.map +1 -0
- package/dist/defaults/calloutStyles.js +292 -0
- package/dist/defaults/calloutStyles.js.map +1 -0
- package/dist/defaults/captionStyle.d.ts +11 -1
- package/dist/defaults/captionStyle.d.ts.map +1 -1
- package/dist/defaults/captionStyle.js +127 -2
- package/dist/defaults/captionStyle.js.map +1 -1
- package/dist/defaults/headerFooter.d.ts.map +1 -1
- package/dist/defaults/headerFooter.js +3 -0
- package/dist/defaults/headerFooter.js.map +1 -1
- package/dist/defaults/headings.d.ts +3 -0
- package/dist/defaults/headings.d.ts.map +1 -1
- package/dist/defaults/headings.js +33 -6
- package/dist/defaults/headings.js.map +1 -1
- package/dist/defaults/index.d.ts +4 -1
- package/dist/defaults/index.d.ts.map +1 -1
- package/dist/defaults/index.js +28 -1
- package/dist/defaults/index.js.map +1 -1
- package/dist/defaults/orderedLists.d.ts +9 -8
- package/dist/defaults/orderedLists.d.ts.map +1 -1
- package/dist/defaults/orderedLists.js +66 -4
- package/dist/defaults/orderedLists.js.map +1 -1
- package/dist/defaults/page.d.ts.map +1 -1
- package/dist/defaults/page.js +14 -3
- package/dist/defaults/page.js.map +1 -1
- package/dist/defaults/paragraphStyles.d.ts +10 -0
- package/dist/defaults/paragraphStyles.d.ts.map +1 -0
- package/dist/defaults/paragraphStyles.js +67 -0
- package/dist/defaults/paragraphStyles.js.map +1 -0
- package/dist/defaults/parts.d.ts +22 -0
- package/dist/defaults/parts.d.ts.map +1 -0
- package/dist/defaults/parts.js +139 -0
- package/dist/defaults/parts.js.map +1 -0
- package/dist/defaults/shared.d.ts.map +1 -1
- package/dist/defaults/shared.js +110 -17
- package/dist/defaults/shared.js.map +1 -1
- package/dist/defaults/tableStyle.d.ts.map +1 -1
- package/dist/defaults/tableStyle.js +6 -0
- package/dist/defaults/tableStyle.js.map +1 -1
- package/dist/design/layout.d.ts +27 -1
- package/dist/design/layout.d.ts.map +1 -1
- package/dist/design/layout.js +39 -8
- package/dist/design/layout.js.map +1 -1
- package/dist/design/placeholders.d.ts +21 -4
- package/dist/design/placeholders.d.ts.map +1 -1
- package/dist/design/placeholders.js +38 -7
- package/dist/design/placeholders.js.map +1 -1
- package/dist/html-backend.d.ts.map +1 -1
- package/dist/html-backend.js +71 -16
- package/dist/html-backend.js.map +1 -1
- package/dist/index.d.ts +13 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -4
- package/dist/index.js.map +1 -1
- package/dist/knuthPlass/breakpoints.d.ts.map +1 -1
- package/dist/knuthPlass/breakpoints.js +34 -0
- 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/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.map +1 -1
- package/dist/measure/rich.js +1 -0
- 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/attrs.d.ts +10 -0
- package/dist/parse/attrs.d.ts.map +1 -0
- package/dist/parse/attrs.js +20 -0
- package/dist/parse/attrs.js.map +1 -0
- package/dist/parse/blockParser.d.ts +8 -4
- package/dist/parse/blockParser.d.ts.map +1 -1
- package/dist/parse/blockParser.js +134 -20
- package/dist/parse/blockParser.js.map +1 -1
- package/dist/parse/index.d.ts +2 -2
- package/dist/parse/index.d.ts.map +1 -1
- package/dist/parse/index.js +1 -1
- package/dist/parse/index.js.map +1 -1
- package/dist/parse/inlineFormatting.d.ts +17 -1
- package/dist/parse/inlineFormatting.d.ts.map +1 -1
- package/dist/parse/inlineFormatting.js +56 -7
- package/dist/parse/inlineFormatting.js.map +1 -1
- package/dist/parse/sourceMapping.d.ts.map +1 -1
- package/dist/parse/sourceMapping.js +13 -1
- package/dist/parse/sourceMapping.js.map +1 -1
- package/dist/parse/types.d.ts +55 -5
- package/dist/parse/types.d.ts.map +1 -1
- package/dist/pipeline/bandCaps.d.ts +86 -0
- package/dist/pipeline/bandCaps.d.ts.map +1 -0
- package/dist/pipeline/bandCaps.js +142 -0
- package/dist/pipeline/bandCaps.js.map +1 -0
- package/dist/pipeline/build.d.ts +32 -0
- package/dist/pipeline/build.d.ts.map +1 -1
- package/dist/pipeline/build.js +621 -162
- package/dist/pipeline/build.js.map +1 -1
- package/dist/pipeline/buildBlockKind.d.ts +8 -0
- package/dist/pipeline/buildBlockKind.d.ts.map +1 -1
- package/dist/pipeline/buildBlockKind.js +40 -11
- package/dist/pipeline/buildBlockKind.js.map +1 -1
- package/dist/pipeline/buildHelpers.d.ts +23 -1
- package/dist/pipeline/buildHelpers.d.ts.map +1 -1
- package/dist/pipeline/buildHelpers.js +50 -6
- package/dist/pipeline/buildHelpers.js.map +1 -1
- package/dist/pipeline/calloutLayout.d.ts +107 -0
- package/dist/pipeline/calloutLayout.d.ts.map +1 -0
- package/dist/pipeline/calloutLayout.js +498 -0
- package/dist/pipeline/calloutLayout.js.map +1 -0
- package/dist/pipeline/columnBalancing.d.ts +54 -10
- package/dist/pipeline/columnBalancing.d.ts.map +1 -1
- package/dist/pipeline/columnBalancing.js +136 -22
- package/dist/pipeline/columnBalancing.js.map +1 -1
- package/dist/pipeline/config.d.ts.map +1 -1
- package/dist/pipeline/config.js +17 -5
- package/dist/pipeline/config.js.map +1 -1
- package/dist/pipeline/headerFooter.d.ts +37 -2
- package/dist/pipeline/headerFooter.d.ts.map +1 -1
- package/dist/pipeline/headerFooter.js +231 -15
- package/dist/pipeline/headerFooter.js.map +1 -1
- package/dist/pipeline/lists.d.ts +15 -0
- package/dist/pipeline/lists.d.ts.map +1 -1
- package/dist/pipeline/lists.js +73 -16
- package/dist/pipeline/lists.js.map +1 -1
- package/dist/pipeline/measureContentBlock.d.ts +59 -0
- package/dist/pipeline/measureContentBlock.d.ts.map +1 -0
- package/dist/pipeline/measureContentBlock.js +124 -0
- package/dist/pipeline/measureContentBlock.js.map +1 -0
- package/dist/pipeline/pageRoles.d.ts +23 -0
- package/dist/pipeline/pageRoles.d.ts.map +1 -0
- package/dist/pipeline/pageRoles.js +54 -0
- package/dist/pipeline/pageRoles.js.map +1 -0
- package/dist/pipeline/paragraphContainers.d.ts +32 -0
- package/dist/pipeline/paragraphContainers.d.ts.map +1 -0
- package/dist/pipeline/paragraphContainers.js +61 -0
- package/dist/pipeline/paragraphContainers.js.map +1 -0
- package/dist/pipeline/parts.d.ts +47 -0
- package/dist/pipeline/parts.d.ts.map +1 -0
- package/dist/pipeline/parts.js +230 -0
- package/dist/pipeline/parts.js.map +1 -0
- package/dist/pipeline/placeholders.d.ts +46 -1
- package/dist/pipeline/placeholders.d.ts.map +1 -1
- package/dist/pipeline/placeholders.js +93 -11
- package/dist/pipeline/placeholders.js.map +1 -1
- package/dist/pipeline/placement.d.ts +61 -7
- package/dist/pipeline/placement.d.ts.map +1 -1
- package/dist/pipeline/placement.js +151 -12
- package/dist/pipeline/placement.js.map +1 -1
- package/dist/pipeline/resourceLayout.d.ts +18 -5
- package/dist/pipeline/resourceLayout.d.ts.map +1 -1
- package/dist/pipeline/resourceLayout.js +145 -23
- package/dist/pipeline/resourceLayout.js.map +1 -1
- package/dist/pipeline/styles.d.ts +9 -1
- package/dist/pipeline/styles.d.ts.map +1 -1
- package/dist/pipeline/styles.js +50 -0
- package/dist/pipeline/styles.js.map +1 -1
- package/dist/table/model.d.ts.map +1 -1
- package/dist/table/model.js +16 -2
- package/dist/table/model.js.map +1 -1
- package/dist/types.d.ts +466 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/vdt.d.ts +128 -4
- package/dist/vdt.d.ts.map +1 -1
- package/dist/vdt.js +2 -1
- package/dist/vdt.js.map +1 -1
- package/package.json +8 -8
|
@@ -20,24 +20,38 @@
|
|
|
20
20
|
* level first), so the most important heading always receives the largest
|
|
21
21
|
* share — e.g. 3 lines over an h2 and an h3 become +2 above the h2 and +1
|
|
22
22
|
* above the h3.
|
|
23
|
+
*
|
|
24
|
+
* When the column's headings cannot absorb the whole gap, two further
|
|
25
|
+
* levers apply in editorial priority order:
|
|
26
|
+
* - extra grid lines where a list/enumeration ends (space after a list
|
|
27
|
+
* reads naturally), capped per list end;
|
|
28
|
+
* - as a last resort, ONE paragraph of the column is re-broken one line
|
|
29
|
+
* looser (TeX \looseness=+1) via the Knuth-Plass `looseness` option —
|
|
30
|
+
* always within the configured `maxWordSpacing`, so type colour never
|
|
31
|
+
* exceeds the user's limit.
|
|
23
32
|
*/
|
|
24
33
|
import type { VDTDocument } from '../vdt';
|
|
25
34
|
/** Maximum number of placement passes (initial + balancing retries). */
|
|
26
|
-
export declare const MAX_BALANCING_PASSES =
|
|
35
|
+
export declare const MAX_BALANCING_PASSES = 7;
|
|
36
|
+
export type BalanceCandidateKind = 'heading' | 'listEnd' | 'looseParagraph';
|
|
27
37
|
interface BalanceCandidate {
|
|
28
38
|
/** Stable content-block index keying the adjustment across passes. */
|
|
29
39
|
contentIndex: number;
|
|
30
|
-
|
|
40
|
+
kind: BalanceCandidateKind;
|
|
41
|
+
/** Heading level (1–6) for `kind: 'heading'`; 0 otherwise. */
|
|
31
42
|
level: number;
|
|
32
43
|
/** Reading-order tiebreak within the column. */
|
|
33
44
|
order: number;
|
|
45
|
+
/** Line count of the block — loose-paragraph preference (more lines =
|
|
46
|
+
* more glue = least visible loosening). */
|
|
47
|
+
lineCount: number;
|
|
34
48
|
}
|
|
35
49
|
interface ColumnGap {
|
|
36
50
|
pageIndex: number;
|
|
37
51
|
columnIndex: number;
|
|
38
52
|
/** Whole empty grid lines at the bottom of the column. */
|
|
39
53
|
gapLines: number;
|
|
40
|
-
/**
|
|
54
|
+
/** Stretch points inside this column that can absorb extra lines. */
|
|
41
55
|
candidates: BalanceCandidate[];
|
|
42
56
|
}
|
|
43
57
|
/**
|
|
@@ -52,24 +66,54 @@ interface ColumnGap {
|
|
|
52
66
|
* Eligible headings are heading blocks that are neither the first block of
|
|
53
67
|
* their column (their top margin is suppressed there so the column keeps
|
|
54
68
|
* starting at the page top) nor the last (space above a trailing heading
|
|
55
|
-
* would strand it at the column bottom).
|
|
69
|
+
* would strand it at the column bottom). List-end points are the first
|
|
70
|
+
* non-list block after a run of list items — they may be last in column
|
|
71
|
+
* (pushing a trailing paragraph down by at most the gap is local: the
|
|
72
|
+
* element that opened the next column still does not fit). Loose-paragraph
|
|
73
|
+
* candidates are justified paragraphs wholly contained in the column (never
|
|
74
|
+
* split parts — loosening those would reshuffle lines across columns).
|
|
56
75
|
*/
|
|
57
76
|
export declare function collectColumnGaps(doc: VDTDocument, forcedBreakPages: ReadonlySet<number>): ColumnGap[];
|
|
58
77
|
/** Total empty grid lines across all balanceable columns — the quantity the
|
|
59
78
|
* convergence loop minimises. */
|
|
60
79
|
export declare function totalGapLines(doc: VDTDocument, forcedBreakPages: ReadonlySet<number>): number;
|
|
80
|
+
/** Adjustments already applied in the layout being inspected. */
|
|
81
|
+
export interface BalanceState {
|
|
82
|
+
/** Extra spacing grid lines per content index (headings + list ends). */
|
|
83
|
+
lines: ReadonlyMap<number, number>;
|
|
84
|
+
/** Loose paragraphs: contentIndex → extra lines (always 1). */
|
|
85
|
+
loose: ReadonlyMap<number, number>;
|
|
86
|
+
}
|
|
87
|
+
export interface BalanceProposalOptions {
|
|
88
|
+
maxLinesPerHeading: number;
|
|
89
|
+
stretchAfterLists: boolean;
|
|
90
|
+
maxLinesAfterList: number;
|
|
91
|
+
looseParagraphs: boolean;
|
|
92
|
+
/** `bodyText.optimalLineBreaking` — the loose lever needs the K-P path. */
|
|
93
|
+
optimalLineBreaking: boolean;
|
|
94
|
+
/** Loose candidates that failed to gain a line in a previous attempt. */
|
|
95
|
+
failedLoose: ReadonlySet<number>;
|
|
96
|
+
}
|
|
61
97
|
export interface BalanceProposal {
|
|
62
|
-
/** Extra grid lines per content
|
|
98
|
+
/** Extra spacing grid lines per content index (cumulative across passes). */
|
|
63
99
|
lines: Map<number, number>;
|
|
100
|
+
/** Loose paragraphs per content index (cumulative across passes). */
|
|
101
|
+
loose: Map<number, number>;
|
|
64
102
|
/** Whether the proposal adds anything over `current`. */
|
|
65
103
|
changed: boolean;
|
|
66
104
|
}
|
|
67
105
|
/**
|
|
68
|
-
* Propose the next round of
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
106
|
+
* Propose the next round of adjustments. Per column gap, levers apply in
|
|
107
|
+
* strict editorial priority order, on top of the already-applied `current`
|
|
108
|
+
* state:
|
|
109
|
+
* 1. headings — round-robin in importance order (level asc, then reading
|
|
110
|
+
* order), capped at `maxLinesPerHeading`;
|
|
111
|
+
* 2. list ends — round-robin in reading order, capped at
|
|
112
|
+
* `maxLinesAfterList`;
|
|
113
|
+
* 3. one loose paragraph per column (cumulative across passes) — the one
|
|
114
|
+
* with the most lines (most glue = least visible loosening), skipping
|
|
115
|
+
* candidates that already failed to gain a line.
|
|
72
116
|
*/
|
|
73
|
-
export declare function proposeBalanceLines(doc: VDTDocument, forcedBreakPages: ReadonlySet<number>, current:
|
|
117
|
+
export declare function proposeBalanceLines(doc: VDTDocument, forcedBreakPages: ReadonlySet<number>, current: BalanceState, options: BalanceProposalOptions): BalanceProposal;
|
|
74
118
|
export {};
|
|
75
119
|
//# sourceMappingURL=columnBalancing.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"columnBalancing.d.ts","sourceRoot":"","sources":["../../src/pipeline/columnBalancing.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"columnBalancing.d.ts","sourceRoot":"","sources":["../../src/pipeline/columnBalancing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EAAa,WAAW,EAAW,MAAM,QAAQ,CAAC;AAK9D,wEAAwE;AACxE,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,SAAS,GAAG,gBAAgB,CAAC;AAE5E,UAAU,gBAAgB;IACxB,sEAAsE;IACtE,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,oBAAoB,CAAC;IAC3B,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC;IACd;gDAC4C;IAC5C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,SAAS;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,UAAU,EAAE,gBAAgB,EAAE,CAAC;CAChC;AAYD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,WAAW,EAChB,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,GACpC,SAAS,EAAE,CA0Gb;AAED;kCACkC;AAClC,wBAAgB,aAAa,CAC3B,GAAG,EAAE,WAAW,EAChB,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,GACpC,MAAM,CAER;AAED,iEAAiE;AACjE,MAAM,WAAW,YAAY;IAC3B,yEAAyE;IACzE,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,+DAA+D;IAC/D,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,sBAAsB;IACrC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;IACzB,2EAA2E;IAC3E,mBAAmB,EAAE,OAAO,CAAC;IAC7B,yEAAyE;IACzE,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,6EAA6E;IAC7E,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,qEAAqE;IACrE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3B,yDAAyD;IACzD,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,WAAW,EAChB,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,EACrC,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,sBAAsB,GAC9B,eAAe,CA2DjB"}
|
|
@@ -20,14 +20,28 @@
|
|
|
20
20
|
* level first), so the most important heading always receives the largest
|
|
21
21
|
* share — e.g. 3 lines over an h2 and an h3 become +2 above the h2 and +1
|
|
22
22
|
* above the h3.
|
|
23
|
+
*
|
|
24
|
+
* When the column's headings cannot absorb the whole gap, two further
|
|
25
|
+
* levers apply in editorial priority order:
|
|
26
|
+
* - extra grid lines where a list/enumeration ends (space after a list
|
|
27
|
+
* reads naturally), capped per list end;
|
|
28
|
+
* - as a last resort, ONE paragraph of the column is re-broken one line
|
|
29
|
+
* looser (TeX \looseness=+1) via the Knuth-Plass `looseness` option —
|
|
30
|
+
* always within the configured `maxWordSpacing`, so type colour never
|
|
31
|
+
* exceeds the user's limit.
|
|
23
32
|
*/
|
|
24
33
|
/** Tolerance against FP drift when converting free space to grid lines. */
|
|
25
34
|
const EPS = 0.01;
|
|
26
35
|
/** Maximum number of placement passes (initial + balancing retries). */
|
|
27
|
-
export const MAX_BALANCING_PASSES =
|
|
36
|
+
export const MAX_BALANCING_PASSES = 7;
|
|
28
37
|
function pageHasBodyContent(page) {
|
|
29
38
|
return page.columns.some((c) => c.blocks.length > 0);
|
|
30
39
|
}
|
|
40
|
+
/** Regular flow column with a usable height — never a page-span block's
|
|
41
|
+
* full-width column, nor a band closed at its own top. */
|
|
42
|
+
function isTextColumn(col) {
|
|
43
|
+
return col.kind !== 'span' && col.bbox.height > 0.5;
|
|
44
|
+
}
|
|
31
45
|
/**
|
|
32
46
|
* Collect the bottom gaps of every balanceable column.
|
|
33
47
|
*
|
|
@@ -40,7 +54,12 @@ function pageHasBodyContent(page) {
|
|
|
40
54
|
* Eligible headings are heading blocks that are neither the first block of
|
|
41
55
|
* their column (their top margin is suppressed there so the column keeps
|
|
42
56
|
* starting at the page top) nor the last (space above a trailing heading
|
|
43
|
-
* would strand it at the column bottom).
|
|
57
|
+
* would strand it at the column bottom). List-end points are the first
|
|
58
|
+
* non-list block after a run of list items — they may be last in column
|
|
59
|
+
* (pushing a trailing paragraph down by at most the gap is local: the
|
|
60
|
+
* element that opened the next column still does not fit). Loose-paragraph
|
|
61
|
+
* candidates are justified paragraphs wholly contained in the column (never
|
|
62
|
+
* split parts — loosening those would reshuffle lines across columns).
|
|
44
63
|
*/
|
|
45
64
|
export function collectColumnGaps(doc, forcedBreakPages) {
|
|
46
65
|
let lastContentPage = -1;
|
|
@@ -48,14 +67,33 @@ export function collectColumnGaps(doc, forcedBreakPages) {
|
|
|
48
67
|
if (pageHasBodyContent(doc.pages[i]))
|
|
49
68
|
lastContentPage = i;
|
|
50
69
|
}
|
|
70
|
+
// Multiplicity of each content index across the whole document — a count
|
|
71
|
+
// above 1 means the block was split across columns/pages.
|
|
72
|
+
const partCount = new Map();
|
|
73
|
+
for (const page of doc.pages) {
|
|
74
|
+
for (const col of page.columns) {
|
|
75
|
+
for (const b of col.blocks) {
|
|
76
|
+
if (b.contentIndex !== undefined) {
|
|
77
|
+
partCount.set(b.contentIndex, (partCount.get(b.contentIndex) ?? 0) + 1);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
51
82
|
const gaps = [];
|
|
52
83
|
for (let p = 0; p <= lastContentPage; p++) {
|
|
53
84
|
const page = doc.pages[p];
|
|
54
85
|
if (page.blankForParity || page.blankForForce)
|
|
55
86
|
continue;
|
|
87
|
+
// Only text columns balance. A page-span block's full-width column is
|
|
88
|
+
// exactly as tall as its content, and a band closed before any text
|
|
89
|
+
// landed in it is zero-height — neither has a gap to absorb. The "last
|
|
90
|
+
// column of the page" is likewise the last non-empty TEXT column: a
|
|
91
|
+
// trailing span column must not turn a chapter's real closing column
|
|
92
|
+
// into a balanceable one.
|
|
56
93
|
let lastNonEmpty = -1;
|
|
57
94
|
for (let c = 0; c < page.columns.length; c++) {
|
|
58
|
-
|
|
95
|
+
const col = page.columns[c];
|
|
96
|
+
if (isTextColumn(col) && col.blocks.length > 0)
|
|
59
97
|
lastNonEmpty = c;
|
|
60
98
|
}
|
|
61
99
|
if (lastNonEmpty === -1)
|
|
@@ -63,21 +101,62 @@ export function collectColumnGaps(doc, forcedBreakPages) {
|
|
|
63
101
|
const pageFlowsOn = p < lastContentPage && !forcedBreakPages.has(p);
|
|
64
102
|
for (let c = 0; c <= lastNonEmpty; c++) {
|
|
65
103
|
const col = page.columns[c];
|
|
66
|
-
if (col.blocks.length === 0)
|
|
104
|
+
if (!isTextColumn(col) || col.blocks.length === 0)
|
|
67
105
|
continue;
|
|
68
106
|
if (c === lastNonEmpty && !pageFlowsOn)
|
|
69
107
|
continue;
|
|
108
|
+
// A `:::columnbreak` ended this column on purpose — leave its gap.
|
|
109
|
+
if (col.forcedBreak)
|
|
110
|
+
continue;
|
|
70
111
|
const gapLines = Math.floor((col.availableHeight + EPS) / doc.baselineGrid);
|
|
71
112
|
if (gapLines < 1)
|
|
72
113
|
continue;
|
|
73
114
|
const candidates = [];
|
|
74
|
-
for (let i =
|
|
115
|
+
for (let i = 0; i < col.blocks.length; i++) {
|
|
75
116
|
const b = col.blocks[i];
|
|
117
|
+
if (b.hidden || b.contentIndex === undefined)
|
|
118
|
+
continue;
|
|
119
|
+
// Callout frames and their children form one unbreakable unit whose
|
|
120
|
+
// interior is off-grid by design — never a stretch point.
|
|
121
|
+
if (b.containerId !== undefined)
|
|
122
|
+
continue;
|
|
76
123
|
if (b.type === 'heading'
|
|
77
124
|
&& b.headingLevel !== undefined
|
|
78
|
-
&&
|
|
79
|
-
&&
|
|
80
|
-
candidates.push({
|
|
125
|
+
&& i >= 1
|
|
126
|
+
&& i < col.blocks.length - 1) {
|
|
127
|
+
candidates.push({
|
|
128
|
+
contentIndex: b.contentIndex,
|
|
129
|
+
kind: 'heading',
|
|
130
|
+
level: b.headingLevel,
|
|
131
|
+
order: i,
|
|
132
|
+
lineCount: b.lines.length,
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
else if (i >= 1
|
|
136
|
+
&& col.blocks[i - 1].type === 'listItem'
|
|
137
|
+
&& col.blocks[i - 1].containerId === undefined
|
|
138
|
+
&& b.type !== 'listItem'
|
|
139
|
+
&& b.type !== 'heading' // a heading after a list is a heading candidate
|
|
140
|
+
&& !b.id.includes('-cont-')) {
|
|
141
|
+
candidates.push({
|
|
142
|
+
contentIndex: b.contentIndex,
|
|
143
|
+
kind: 'listEnd',
|
|
144
|
+
level: 0,
|
|
145
|
+
order: i,
|
|
146
|
+
lineCount: b.lines.length,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
if (b.type === 'paragraph'
|
|
150
|
+
&& b.textAlign === 'justify'
|
|
151
|
+
&& b.lines.length >= 2
|
|
152
|
+
&& partCount.get(b.contentIndex) === 1) {
|
|
153
|
+
candidates.push({
|
|
154
|
+
contentIndex: b.contentIndex,
|
|
155
|
+
kind: 'looseParagraph',
|
|
156
|
+
level: 0,
|
|
157
|
+
order: i,
|
|
158
|
+
lineCount: b.lines.length,
|
|
159
|
+
});
|
|
81
160
|
}
|
|
82
161
|
}
|
|
83
162
|
gaps.push({ pageIndex: p, columnIndex: c, gapLines, candidates });
|
|
@@ -91,27 +170,32 @@ export function totalGapLines(doc, forcedBreakPages) {
|
|
|
91
170
|
return collectColumnGaps(doc, forcedBreakPages).reduce((sum, g) => sum + g.gapLines, 0);
|
|
92
171
|
}
|
|
93
172
|
/**
|
|
94
|
-
* Propose the next round of
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
*
|
|
173
|
+
* Propose the next round of adjustments. Per column gap, levers apply in
|
|
174
|
+
* strict editorial priority order, on top of the already-applied `current`
|
|
175
|
+
* state:
|
|
176
|
+
* 1. headings — round-robin in importance order (level asc, then reading
|
|
177
|
+
* order), capped at `maxLinesPerHeading`;
|
|
178
|
+
* 2. list ends — round-robin in reading order, capped at
|
|
179
|
+
* `maxLinesAfterList`;
|
|
180
|
+
* 3. one loose paragraph per column (cumulative across passes) — the one
|
|
181
|
+
* with the most lines (most glue = least visible loosening), skipping
|
|
182
|
+
* candidates that already failed to gain a line.
|
|
98
183
|
*/
|
|
99
|
-
export function proposeBalanceLines(doc, forcedBreakPages, current,
|
|
100
|
-
const lines = new Map(current);
|
|
184
|
+
export function proposeBalanceLines(doc, forcedBreakPages, current, options) {
|
|
185
|
+
const lines = new Map(current.lines);
|
|
186
|
+
const loose = new Map(current.loose);
|
|
101
187
|
let changed = false;
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
const ordered = [...gap.candidates].sort((a, b) => a.level - b.level || a.order - b.order);
|
|
106
|
-
let remaining = gap.gapLines;
|
|
188
|
+
/** Round-robin one extra line at a time over `cands` until the gap is
|
|
189
|
+
* absorbed or every candidate hits `cap`. Returns the unabsorbed rest. */
|
|
190
|
+
const distribute = (cands, remaining, cap) => {
|
|
107
191
|
let progress = true;
|
|
108
192
|
while (remaining > 0 && progress) {
|
|
109
193
|
progress = false;
|
|
110
|
-
for (const cand of
|
|
194
|
+
for (const cand of cands) {
|
|
111
195
|
if (remaining <= 0)
|
|
112
196
|
break;
|
|
113
197
|
const cur = lines.get(cand.contentIndex) ?? 0;
|
|
114
|
-
if (cur >=
|
|
198
|
+
if (cur >= cap)
|
|
115
199
|
continue;
|
|
116
200
|
lines.set(cand.contentIndex, cur + 1);
|
|
117
201
|
remaining--;
|
|
@@ -119,7 +203,37 @@ export function proposeBalanceLines(doc, forcedBreakPages, current, maxLinesPerH
|
|
|
119
203
|
progress = true;
|
|
120
204
|
}
|
|
121
205
|
}
|
|
206
|
+
return remaining;
|
|
207
|
+
};
|
|
208
|
+
for (const gap of collectColumnGaps(doc, forcedBreakPages)) {
|
|
209
|
+
let remaining = gap.gapLines;
|
|
210
|
+
const headings = gap.candidates
|
|
211
|
+
.filter((c) => c.kind === 'heading')
|
|
212
|
+
.sort((a, b) => a.level - b.level || a.order - b.order);
|
|
213
|
+
remaining = distribute(headings, remaining, options.maxLinesPerHeading);
|
|
214
|
+
if (remaining > 0 && options.stretchAfterLists) {
|
|
215
|
+
const listEnds = gap.candidates
|
|
216
|
+
.filter((c) => c.kind === 'listEnd')
|
|
217
|
+
.sort((a, b) => a.order - b.order);
|
|
218
|
+
remaining = distribute(listEnds, remaining, options.maxLinesAfterList);
|
|
219
|
+
}
|
|
220
|
+
if (remaining > 0
|
|
221
|
+
&& options.looseParagraphs
|
|
222
|
+
&& options.optimalLineBreaking) {
|
|
223
|
+
const columnLoose = gap.candidates.filter((c) => c.kind === 'looseParagraph');
|
|
224
|
+
// One loose paragraph per column, cumulative across passes.
|
|
225
|
+
const alreadyLoose = columnLoose.some((c) => loose.has(c.contentIndex));
|
|
226
|
+
if (!alreadyLoose) {
|
|
227
|
+
const pick = columnLoose
|
|
228
|
+
.filter((c) => !options.failedLoose.has(c.contentIndex))
|
|
229
|
+
.sort((a, b) => b.lineCount - a.lineCount || a.order - b.order)[0];
|
|
230
|
+
if (pick) {
|
|
231
|
+
loose.set(pick.contentIndex, 1);
|
|
232
|
+
changed = true;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
122
236
|
}
|
|
123
|
-
return { lines, changed };
|
|
237
|
+
return { lines, loose, changed };
|
|
124
238
|
}
|
|
125
239
|
//# sourceMappingURL=columnBalancing.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"columnBalancing.js","sourceRoot":"","sources":["../../src/pipeline/columnBalancing.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"columnBalancing.js","sourceRoot":"","sources":["../../src/pipeline/columnBalancing.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/pipeline/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/pipeline/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AAoB1E,OAAO,EAAqB,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,QAAQ,CAAC;AAElF,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,aAAa,GAAG,cAAc,CA8B1E;AAED;6DAC6D;AAC7D,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,cAAc,GACvB,GAAG,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAIzC;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAUpE;AAED,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,cAAc,GACvB,WAAW,EAAE,CAyBf"}
|
package/dist/pipeline/config.js
CHANGED
|
@@ -1,22 +1,34 @@
|
|
|
1
|
-
import { resolvePageConfig, resolveLayoutConfig, resolveBodyTextConfig, resolveHeadingsConfig, resolveTableStyleConfig, resolveCaptionStyleConfig, resolveDiagramStyleConfig, resolveUnorderedListsConfig, resolveOrderedListsConfig, resolveMathConfig, resolveHeaderFooterConfig, applyPaletteToConfig, applyPaletteToResolvedConfig, } from '../defaults';
|
|
1
|
+
import { resolvePageConfig, resolveLayoutConfig, resolveBodyTextConfig, resolveHeadingsConfig, resolveTableStyleConfig, resolveCaptionStyleConfig, resolveDiagramStyleConfig, resolveParagraphStylesConfig, resolveCalloutStylesConfig, resolveUnorderedListsConfig, resolveOrderedListsConfig, resolveMathConfig, resolveHeaderFooterConfig, resolvePartsConfig, applyPaletteToConfig, applyPaletteToResolvedConfig, } from '../defaults';
|
|
2
2
|
import { dimensionToPx } from '../units';
|
|
3
3
|
import { createBoundingBox } from '../vdt';
|
|
4
4
|
export function resolveAllConfig(rawConfig) {
|
|
5
5
|
const config = applyPaletteToConfig(rawConfig);
|
|
6
6
|
const bodyText = resolveBodyTextConfig(config?.bodyText);
|
|
7
|
+
const headings = resolveHeadingsConfig(config?.headings);
|
|
8
|
+
const unorderedLists = resolveUnorderedListsConfig(config?.unorderedLists, bodyText);
|
|
9
|
+
const orderedLists = resolveOrderedListsConfig(config?.orderedLists, bodyText);
|
|
10
|
+
const page = resolvePageConfig(config?.page);
|
|
7
11
|
const resolved = {
|
|
8
|
-
page
|
|
12
|
+
page,
|
|
9
13
|
layout: resolveLayoutConfig(config?.layout),
|
|
10
14
|
bodyText,
|
|
11
|
-
headings
|
|
15
|
+
headings,
|
|
12
16
|
tableStyle: resolveTableStyleConfig(config?.tableStyle, bodyText),
|
|
13
17
|
captionStyle: resolveCaptionStyleConfig(config?.captionStyle, bodyText),
|
|
14
18
|
diagramStyle: resolveDiagramStyleConfig(config?.diagramStyle),
|
|
15
|
-
|
|
16
|
-
|
|
19
|
+
paragraphStyles: resolveParagraphStylesConfig(config?.paragraphStyles, bodyText),
|
|
20
|
+
calloutStyles: resolveCalloutStylesConfig(config?.calloutStyles, bodyText, headings, unorderedLists),
|
|
21
|
+
unorderedLists,
|
|
22
|
+
orderedLists,
|
|
17
23
|
math: resolveMathConfig(config?.math),
|
|
18
24
|
header: resolveHeaderFooterConfig(config?.header, 'header'),
|
|
19
25
|
footer: resolveHeaderFooterConfig(config?.footer, 'footer'),
|
|
26
|
+
parts: resolvePartsConfig(config?.parts, page, bodyText, unorderedLists, orderedLists),
|
|
27
|
+
// Kept for per-resource-type caption overrides, which resolve their
|
|
28
|
+
// palette colours at layout time (see `mergeCaptionStyle`).
|
|
29
|
+
...(rawConfig?.colorPalette && rawConfig.colorPalette.length > 0
|
|
30
|
+
? { colorPalette: rawConfig.colorPalette }
|
|
31
|
+
: {}),
|
|
20
32
|
};
|
|
21
33
|
return applyPaletteToResolvedConfig(resolved, rawConfig?.colorPalette);
|
|
22
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/pipeline/config.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,EACvB,yBAAyB,EACzB,yBAAyB,EACzB,2BAA2B,EAC3B,yBAAyB,EACzB,iBAAiB,EACjB,yBAAyB,EACzB,oBAAoB,EACpB,4BAA4B,GAC7B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAyC,MAAM,QAAQ,CAAC;AAElF,MAAM,UAAU,gBAAgB,CAAC,SAAyB;IACxD,MAAM,MAAM,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACzD,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/pipeline/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { DocumentMetadata, ResolvedDesignSlot, ResolvedHeadingLevelConfig } from '../types';
|
|
2
2
|
import { type VDTDocument, type VDTDesignSlot } from '../vdt';
|
|
3
|
+
import type { PageRole } from '../types';
|
|
4
|
+
import { type DesignFrames } from '../design/layout';
|
|
3
5
|
import type { DesignPlaceholderContext } from '../design/placeholders';
|
|
4
6
|
/** Measure the natural bottom of a heading's advanced-design slot when laid
|
|
5
7
|
* out against a container of the given `width` with unbounded height.
|
|
@@ -13,13 +15,46 @@ export declare function measureHeadingAdvancedDesignHeight(level: ResolvedHeadin
|
|
|
13
15
|
titleText: string;
|
|
14
16
|
formattedNumber: string;
|
|
15
17
|
chapterNumber: string;
|
|
16
|
-
|
|
18
|
+
attrs?: Record<string, string>;
|
|
19
|
+
}, width: number, dpi: number, metadata: DocumentMetadata, pageIndex: number,
|
|
20
|
+
/** Page/bleed frames in absolute page px, for `anchor.to: 'page' |
|
|
21
|
+
* 'bleed'` elements. Translated into the stub coordinate system (the
|
|
22
|
+
* heading container's top-left at `origin`) so a band anchored above the
|
|
23
|
+
* heading does not grow the reserved height, while anything extending
|
|
24
|
+
* below the heading's top does. */
|
|
25
|
+
frames?: DesignFrames,
|
|
26
|
+
/** Absolute page position of the heading container's top-left. Defaults
|
|
27
|
+
* to the frames' page origin when omitted. */
|
|
28
|
+
origin?: {
|
|
29
|
+
x: number;
|
|
30
|
+
y: number;
|
|
31
|
+
}): number;
|
|
32
|
+
/** Optional page-level inputs for `layoutSlotToVdt`. */
|
|
33
|
+
export interface SlotLayoutExtras {
|
|
34
|
+
frames?: DesignFrames;
|
|
35
|
+
pageRole?: PageRole;
|
|
36
|
+
/** Source range of the text `{titleText}` renders; stamped on the text
|
|
37
|
+
* blocks whose element content mentions the placeholder. */
|
|
38
|
+
titleSource?: {
|
|
39
|
+
start: number;
|
|
40
|
+
end: number;
|
|
41
|
+
text?: string;
|
|
42
|
+
sourceMap?: number[];
|
|
43
|
+
};
|
|
44
|
+
/** Source ranges of heading attribute values; a text element whose
|
|
45
|
+
* content is exactly `{attr.<key>}` maps back to that value. */
|
|
46
|
+
attrSources?: Record<string, {
|
|
47
|
+
start: number;
|
|
48
|
+
end: number;
|
|
49
|
+
}>;
|
|
50
|
+
attrs?: Record<string, string>;
|
|
51
|
+
}
|
|
17
52
|
export declare function layoutSlotToVdt(slot: ResolvedDesignSlot, container: {
|
|
18
53
|
x: number;
|
|
19
54
|
y: number;
|
|
20
55
|
width: number;
|
|
21
56
|
height: number;
|
|
22
|
-
}, pageIndex: number, placeholders: DesignPlaceholderContext, dpi: number): VDTDesignSlot | undefined;
|
|
57
|
+
}, pageIndex: number, placeholders: DesignPlaceholderContext, dpi: number, extras?: SlotLayoutExtras): VDTDesignSlot | undefined;
|
|
23
58
|
/**
|
|
24
59
|
* After body placement finishes, attach header/footer slots to every page.
|
|
25
60
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headerFooter.d.ts","sourceRoot":"","sources":["../../src/pipeline/headerFooter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"headerFooter.d.ts","sourceRoot":"","sources":["../../src/pipeline/headerFooter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAA6B,0BAA0B,EAAE,MAAM,UAAU,CAAC;AAC5H,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,aAAa,EAMnB,MAAM,QAAQ,CAAC;AAQhB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAEL,KAAK,YAAY,EAKlB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AA0GvE;;;;;;;mDAOmD;AACnD,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,0BAA0B,EACjC,OAAO,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,EAC9G,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,gBAAgB,EAC1B,SAAS,EAAE,MAAM;AACjB;;;;oCAIoC;AACpC,MAAM,CAAC,EAAE,YAAY;AACrB;+CAC+C;AAC/C,MAAM,CAAC,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAChC,MAAM,CAgCR;AAED,wDAAwD;AACxD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB;iEAC6D;IAC7D,WAAW,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAClF;qEACiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,kBAAkB,EACxB,SAAS,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAClE,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,wBAAwB,EACtC,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,gBAAgB,GACxB,aAAa,GAAG,SAAS,CA+C3B;AAsID;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAyO7D"}
|