postext 0.3.19 → 0.3.21
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 +36 -2
- 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__/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__/overStretch.test.d.ts +2 -0
- package/dist/__tests__/overStretch.test.d.ts.map +1 -0
- package/dist/__tests__/overStretch.test.js +35 -0
- package/dist/__tests__/overStretch.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/__tests__/tracking.test.d.ts +2 -0
- package/dist/__tests__/tracking.test.d.ts.map +1 -0
- package/dist/__tests__/tracking.test.js +37 -0
- package/dist/__tests__/tracking.test.js.map +1 -0
- package/dist/__tests__/urlBreaks.test.d.ts +2 -0
- package/dist/__tests__/urlBreaks.test.d.ts.map +1 -0
- package/dist/__tests__/urlBreaks.test.js +57 -0
- package/dist/__tests__/urlBreaks.test.js.map +1 -0
- package/dist/canvas-backend/blockRender.d.ts.map +1 -1
- package/dist/canvas-backend/blockRender.js +20 -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/bodyText.js +1 -1
- package/dist/defaults/bodyText.js.map +1 -1
- 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 +75 -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 +4 -2
- package/dist/knuthPlass/breakpoints.js.map +1 -1
- package/dist/knuthPlass/constants.d.ts +7 -0
- package/dist/knuthPlass/constants.d.ts.map +1 -1
- package/dist/knuthPlass/constants.js +7 -0
- package/dist/knuthPlass/constants.js.map +1 -1
- package/dist/knuthPlass/richAdapter.d.ts +2 -0
- package/dist/knuthPlass/richAdapter.d.ts.map +1 -1
- package/dist/knuthPlass/richAdapter.js +6 -6
- package/dist/knuthPlass/richAdapter.js.map +1 -1
- package/dist/measure/cache.js +2 -2
- package/dist/measure/cache.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 +54 -10
- 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 +41 -0
- package/dist/pipeline/build.d.ts.map +1 -1
- package/dist/pipeline/build.js +675 -168
- 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 +26 -8
- package/dist/pipeline/columnBalancing.d.ts.map +1 -1
- package/dist/pipeline/columnBalancing.js +50 -18
- 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 +65 -0
- package/dist/pipeline/measureContentBlock.d.ts.map +1 -0
- package/dist/pipeline/measureContentBlock.js +134 -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 +468 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/vdt.d.ts +132 -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
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `:::callout{type="…"}` containers — boxed content (notes, tips, warnings,
|
|
3
|
+
* objectives) styled by a `CalloutStyleConfig`.
|
|
4
|
+
*
|
|
5
|
+
* `layoutCallout` lays out one callout — decoration frame, optional title
|
|
6
|
+
* and the child blocks — against a given width, in block-relative
|
|
7
|
+
* coordinates (frame origin = `(0,0)`). It is pure in `width`, so the
|
|
8
|
+
* placement code can re-run it when a callout lands in a column of a
|
|
9
|
+
* different width, and the pagination phase (`spanBlocks`) can run it at
|
|
10
|
+
* page width for `span: 'page'` boxes. `offsetCalloutToAbsolute` then moves
|
|
11
|
+
* the whole result to its final page position.
|
|
12
|
+
*
|
|
13
|
+
* Children are measured with the ordinary per-block measurer against a
|
|
14
|
+
* *derived* resolved config (`deriveCalloutResolvedConfig`) whose body text
|
|
15
|
+
* and list sections carry the style's `body` / `lists` overrides, so the
|
|
16
|
+
* existing style resolvers produce the callout typography unchanged.
|
|
17
|
+
*
|
|
18
|
+
* v1 limits: callouts never split (`keepTogether` is always on); nested
|
|
19
|
+
* `:::callout` fences inside a callout are flattened into the outer box;
|
|
20
|
+
* `width: 'auto'` shrink-wraps the title only and ignores the children.
|
|
21
|
+
*/
|
|
22
|
+
import type { ContentBlock, DirectiveAttrs } from '../parse';
|
|
23
|
+
import type { CalloutPlacement, CalloutSpan, ResolvedCalloutStyleConfig } from '../types';
|
|
24
|
+
import { type ResolvedConfig, type VDTBlock } from '../vdt';
|
|
25
|
+
import { type BlockStyle } from './styles';
|
|
26
|
+
import { type BlockMeasureContext } from './measureContentBlock';
|
|
27
|
+
export interface PlannedCallout {
|
|
28
|
+
/** Index of the matching `containerEnd` marker. */
|
|
29
|
+
endIdx: number;
|
|
30
|
+
/** Attributes parsed from the opening fence. */
|
|
31
|
+
attrs: DirectiveAttrs;
|
|
32
|
+
/** Parser `containerId` shared by the marker pair. */
|
|
33
|
+
containerId: number;
|
|
34
|
+
}
|
|
35
|
+
/** Map every `containerStart{callout}` index to its range. Resolved up front
|
|
36
|
+
* (like `:::paragraphs`) because keep-with-next rollbacks rewind the
|
|
37
|
+
* placement loop and replay blocks. Unclosed containers are auto-closed by
|
|
38
|
+
* the parser, so every start has an end. */
|
|
39
|
+
export declare function planCallouts(contentBlocks: readonly ContentBlock[]): Map<number, PlannedCallout>;
|
|
40
|
+
/** The style a `:::callout{type="…"}` selects: the matching id, else the
|
|
41
|
+
* first configured style (the sandbox flags unknown types as a warning). */
|
|
42
|
+
export declare function pickCalloutStyle(styles: readonly ResolvedCalloutStyleConfig[], type: string | undefined): ResolvedCalloutStyleConfig | undefined;
|
|
43
|
+
/** Shallow copy of `resolved` whose `bodyText`, `unorderedLists` and
|
|
44
|
+
* `orderedLists` carry the callout style's `body` / `lists` overrides, so
|
|
45
|
+
* `resolveBodyStyle`, the list item resolvers and the indent cascade yield
|
|
46
|
+
* the callout typography without any callout-specific branches. Child
|
|
47
|
+
* headings (rare) keep the normal heading styles. */
|
|
48
|
+
export declare function deriveCalloutResolvedConfig(resolved: ResolvedConfig, style: ResolvedCalloutStyleConfig): ResolvedConfig;
|
|
49
|
+
/** Measurement context for the children: the derived config plus the body
|
|
50
|
+
* / blockquote styles and list indents recomputed from it. Ordered-list run
|
|
51
|
+
* metrics (number widths) are kept from the document context — they were
|
|
52
|
+
* measured with the document's list font, a close-enough approximation. */
|
|
53
|
+
export declare function deriveCalloutMeasureContext(ctx: BlockMeasureContext, style: ResolvedCalloutStyleConfig): BlockMeasureContext;
|
|
54
|
+
export interface CalloutLayoutInput {
|
|
55
|
+
style: ResolvedCalloutStyleConfig;
|
|
56
|
+
/** Fence attributes (`type`, `title`, `span`, `placement`). */
|
|
57
|
+
attrs: DirectiveAttrs;
|
|
58
|
+
/** Content blocks between the markers (marker blocks of nested containers
|
|
59
|
+
* are skipped). */
|
|
60
|
+
children: readonly ContentBlock[];
|
|
61
|
+
/** Content-block index of `children[0]` — children keep their real index
|
|
62
|
+
* so neighbour lookups (indent-after-heading, list runs) work. */
|
|
63
|
+
childStartIdx: number;
|
|
64
|
+
/** Frame width to lay out against (column or page width). */
|
|
65
|
+
width: number;
|
|
66
|
+
ctx: BlockMeasureContext;
|
|
67
|
+
resolved: ResolvedConfig;
|
|
68
|
+
/** Parser `containerId` of the fence pair, stamped on the frame and children. */
|
|
69
|
+
containerId: number;
|
|
70
|
+
/** Block ids: the frame's own id and a generator for the children. */
|
|
71
|
+
frameId: string;
|
|
72
|
+
nextChildId: () => string;
|
|
73
|
+
/** Optional paragraph-style override per child index (nested
|
|
74
|
+
* `:::paragraphs` containers). */
|
|
75
|
+
paragraphStyleFor?: (blockIdx: number) => BlockStyle | undefined;
|
|
76
|
+
/** Source offset of the markdown body inside the original document. */
|
|
77
|
+
bodyOffset?: number;
|
|
78
|
+
}
|
|
79
|
+
export interface CalloutLayoutResult {
|
|
80
|
+
/** The frame block (`type: 'callout'`); decoration on `designOverlay`. */
|
|
81
|
+
frame: VDTBlock;
|
|
82
|
+
/** Content blocks in reading order, block-relative to the frame origin. */
|
|
83
|
+
children: VDTBlock[];
|
|
84
|
+
/** Frame width actually used (`width`, or the shrink-wrapped width for
|
|
85
|
+
* `width: 'auto'`). */
|
|
86
|
+
width: number;
|
|
87
|
+
totalHeight: number;
|
|
88
|
+
/** Top margin in px (applied by the caller through pending spacing). */
|
|
89
|
+
marginTopPx: number;
|
|
90
|
+
/** Bottom margin in px (baked into the post-callout grid snap). */
|
|
91
|
+
marginBottomPx: number;
|
|
92
|
+
}
|
|
93
|
+
/** Per-instance span / placement: fence attribute when valid, else the style. */
|
|
94
|
+
export declare function resolveCalloutAttrs(style: ResolvedCalloutStyleConfig, attrs: DirectiveAttrs): {
|
|
95
|
+
span: CalloutSpan;
|
|
96
|
+
placement: CalloutPlacement;
|
|
97
|
+
title: string;
|
|
98
|
+
};
|
|
99
|
+
/** Move a laid-out callout from frame-relative to absolute page coordinates
|
|
100
|
+
* with the frame's top-left at `(x, y)`. */
|
|
101
|
+
export declare function offsetCalloutToAbsolute(result: CalloutLayoutResult, x: number, y: number): void;
|
|
102
|
+
/**
|
|
103
|
+
* Lay out one callout at `width`. Everything is frame-relative; see
|
|
104
|
+
* {@link offsetCalloutToAbsolute}.
|
|
105
|
+
*/
|
|
106
|
+
export declare function layoutCallout(input: CalloutLayoutInput): CalloutLayoutResult;
|
|
107
|
+
//# sourceMappingURL=calloutLayout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calloutLayout.d.ts","sourceRoot":"","sources":["../../src/pipeline/calloutLayout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,KAAK,EACV,gBAAgB,EAChB,WAAW,EAEX,0BAA0B,EAC3B,MAAM,UAAU,CAAC;AAElB,OAAO,EAGL,KAAK,cAAc,EAEnB,KAAK,QAAQ,EAId,MAAM,QAAQ,CAAC;AAIhB,OAAO,EAA4C,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAErF,OAAO,EAAuB,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAOtF,MAAM,WAAW,cAAc;IAC7B,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,KAAK,EAAE,cAAc,CAAC;IACtB,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;6CAG6C;AAC7C,wBAAgB,YAAY,CAAC,aAAa,EAAE,SAAS,YAAY,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAiBhG;AAED;6EAC6E;AAC7E,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,SAAS,0BAA0B,EAAE,EAC7C,IAAI,EAAE,MAAM,GAAG,SAAS,GACvB,0BAA0B,GAAG,SAAS,CAOxC;AAMD;;;;sDAIsD;AACtD,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,0BAA0B,GAChC,cAAc,CA4ChB;AAED;;;4EAG4E;AAC5E,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,mBAAmB,EACxB,KAAK,EAAE,0BAA0B,GAChC,mBAAmB,CAerB;AAMD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,0BAA0B,CAAC;IAClC,+DAA+D;IAC/D,KAAK,EAAE,cAAc,CAAC;IACtB;wBACoB;IACpB,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;IAClC;uEACmE;IACnE,aAAa,EAAE,MAAM,CAAC;IACtB,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,mBAAmB,CAAC;IACzB,QAAQ,EAAE,cAAc,CAAC;IACzB,iFAAiF;IACjF,WAAW,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,MAAM,CAAC;IAC1B;uCACmC;IACnC,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,UAAU,GAAG,SAAS,CAAC;IACjE,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,0EAA0E;IAC1E,KAAK,EAAE,QAAQ,CAAC;IAChB,2EAA2E;IAC3E,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACrB;4BACwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,WAAW,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,cAAc,EAAE,MAAM,CAAC;CACxB;AAKD,iFAAiF;AACjF,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,0BAA0B,EACjC,KAAK,EAAE,cAAc,GACpB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,gBAAgB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CASnE;AAsCD;6CAC6C;AAC7C,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAS/F;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,mBAAmB,CA8R5E"}
|
|
@@ -0,0 +1,498 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `:::callout{type="…"}` containers — boxed content (notes, tips, warnings,
|
|
3
|
+
* objectives) styled by a `CalloutStyleConfig`.
|
|
4
|
+
*
|
|
5
|
+
* `layoutCallout` lays out one callout — decoration frame, optional title
|
|
6
|
+
* and the child blocks — against a given width, in block-relative
|
|
7
|
+
* coordinates (frame origin = `(0,0)`). It is pure in `width`, so the
|
|
8
|
+
* placement code can re-run it when a callout lands in a column of a
|
|
9
|
+
* different width, and the pagination phase (`spanBlocks`) can run it at
|
|
10
|
+
* page width for `span: 'page'` boxes. `offsetCalloutToAbsolute` then moves
|
|
11
|
+
* the whole result to its final page position.
|
|
12
|
+
*
|
|
13
|
+
* Children are measured with the ordinary per-block measurer against a
|
|
14
|
+
* *derived* resolved config (`deriveCalloutResolvedConfig`) whose body text
|
|
15
|
+
* and list sections carry the style's `body` / `lists` overrides, so the
|
|
16
|
+
* existing style resolvers produce the callout typography unchanged.
|
|
17
|
+
*
|
|
18
|
+
* v1 limits: callouts never split (`keepTogether` is always on); nested
|
|
19
|
+
* `:::callout` fences inside a callout are flattened into the outer box;
|
|
20
|
+
* `width: 'auto'` shrink-wraps the title only and ignores the children.
|
|
21
|
+
*/
|
|
22
|
+
import { dimensionToPx } from '../units';
|
|
23
|
+
import { createBoundingBox, createVDTBlock, } from '../vdt';
|
|
24
|
+
import { buildFontString, measureBlock, measureTextWidth } from '../measure';
|
|
25
|
+
import { applyStyleAttrs, isMarkerBlock } from './buildHelpers';
|
|
26
|
+
import { resetLinePositions } from './placement';
|
|
27
|
+
import { resolveBodyStyle, resolveBlockquoteStyle } from './styles';
|
|
28
|
+
import { computeLevelIndentsPx, computeOrderedLevelIndentsPx } from './lists';
|
|
29
|
+
import { measureContentBlock } from './measureContentBlock';
|
|
30
|
+
import { uppercasePreservingLength } from './buildBlockKind';
|
|
31
|
+
/** Map every `containerStart{callout}` index to its range. Resolved up front
|
|
32
|
+
* (like `:::paragraphs`) because keep-with-next rollbacks rewind the
|
|
33
|
+
* placement loop and replay blocks. Unclosed containers are auto-closed by
|
|
34
|
+
* the parser, so every start has an end. */
|
|
35
|
+
export function planCallouts(contentBlocks) {
|
|
36
|
+
const plan = new Map();
|
|
37
|
+
const openByIdx = new Map(); // containerId → startIdx
|
|
38
|
+
for (let i = 0; i < contentBlocks.length; i++) {
|
|
39
|
+
const b = contentBlocks[i];
|
|
40
|
+
if (b.containerName !== 'callout' || b.containerId === undefined)
|
|
41
|
+
continue;
|
|
42
|
+
if (b.type === 'containerStart') {
|
|
43
|
+
openByIdx.set(b.containerId, i);
|
|
44
|
+
}
|
|
45
|
+
else if (b.type === 'containerEnd') {
|
|
46
|
+
const startIdx = openByIdx.get(b.containerId);
|
|
47
|
+
if (startIdx === undefined)
|
|
48
|
+
continue;
|
|
49
|
+
openByIdx.delete(b.containerId);
|
|
50
|
+
const start = contentBlocks[startIdx];
|
|
51
|
+
plan.set(startIdx, { endIdx: i, attrs: start.containerAttrs ?? {}, containerId: b.containerId });
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return plan;
|
|
55
|
+
}
|
|
56
|
+
/** The style a `:::callout{type="…"}` selects: the matching id, else the
|
|
57
|
+
* first configured style (the sandbox flags unknown types as a warning). */
|
|
58
|
+
export function pickCalloutStyle(styles, type) {
|
|
59
|
+
if (styles.length === 0)
|
|
60
|
+
return undefined;
|
|
61
|
+
if (type) {
|
|
62
|
+
const match = styles.find((s) => s.id === type);
|
|
63
|
+
if (match)
|
|
64
|
+
return match;
|
|
65
|
+
}
|
|
66
|
+
return styles[0];
|
|
67
|
+
}
|
|
68
|
+
// ---------------------------------------------------------------------------
|
|
69
|
+
// Derived config: body/list overrides folded into the resolved config.
|
|
70
|
+
// ---------------------------------------------------------------------------
|
|
71
|
+
/** Shallow copy of `resolved` whose `bodyText`, `unorderedLists` and
|
|
72
|
+
* `orderedLists` carry the callout style's `body` / `lists` overrides, so
|
|
73
|
+
* `resolveBodyStyle`, the list item resolvers and the indent cascade yield
|
|
74
|
+
* the callout typography without any callout-specific branches. Child
|
|
75
|
+
* headings (rare) keep the normal heading styles. */
|
|
76
|
+
export function deriveCalloutResolvedConfig(resolved, style) {
|
|
77
|
+
const { body, lists } = style;
|
|
78
|
+
const ul = resolved.unorderedLists;
|
|
79
|
+
const ol = resolved.orderedLists;
|
|
80
|
+
// Level-specific bullets/colours only follow the override when it actually
|
|
81
|
+
// differs from the general value they were resolved from — a style that
|
|
82
|
+
// inherits keeps the document's per-level bullets intact.
|
|
83
|
+
const bulletOverride = lists.bulletChar !== ul.bulletChar;
|
|
84
|
+
const colorOverride = lists.color.hex !== ul.color.hex;
|
|
85
|
+
return {
|
|
86
|
+
...resolved,
|
|
87
|
+
bodyText: {
|
|
88
|
+
...resolved.bodyText,
|
|
89
|
+
fontFamily: body.fontFamily,
|
|
90
|
+
fontSize: body.fontSize,
|
|
91
|
+
lineHeight: body.lineHeight,
|
|
92
|
+
color: body.color,
|
|
93
|
+
textAlign: body.textAlign,
|
|
94
|
+
hyphenation: { ...resolved.bodyText.hyphenation, enabled: body.hyphenation },
|
|
95
|
+
paragraphSpacing: body.paragraphSpacing,
|
|
96
|
+
firstLineIndent: body.firstLineIndent,
|
|
97
|
+
},
|
|
98
|
+
unorderedLists: {
|
|
99
|
+
...ul,
|
|
100
|
+
bulletChar: lists.bulletChar,
|
|
101
|
+
color: lists.color,
|
|
102
|
+
indent: lists.indent,
|
|
103
|
+
gap: lists.gap,
|
|
104
|
+
itemSpacing: lists.itemSpacing,
|
|
105
|
+
levels: ul.levels.map((l) => ({
|
|
106
|
+
...l,
|
|
107
|
+
bulletChar: bulletOverride ? lists.bulletChar : l.bulletChar,
|
|
108
|
+
color: colorOverride ? lists.color : l.color,
|
|
109
|
+
})),
|
|
110
|
+
},
|
|
111
|
+
orderedLists: {
|
|
112
|
+
...ol,
|
|
113
|
+
color: colorOverride ? lists.color : ol.color,
|
|
114
|
+
indent: lists.indent,
|
|
115
|
+
gap: lists.gap,
|
|
116
|
+
itemSpacing: lists.itemSpacing,
|
|
117
|
+
levels: ol.levels.map((l) => ({ ...l, color: colorOverride ? lists.color : l.color })),
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
/** Measurement context for the children: the derived config plus the body
|
|
122
|
+
* / blockquote styles and list indents recomputed from it. Ordered-list run
|
|
123
|
+
* metrics (number widths) are kept from the document context — they were
|
|
124
|
+
* measured with the document's list font, a close-enough approximation. */
|
|
125
|
+
export function deriveCalloutMeasureContext(ctx, style) {
|
|
126
|
+
const resolved = deriveCalloutResolvedConfig(ctx.resolved, style);
|
|
127
|
+
const bodyStyle = resolveBodyStyle(resolved);
|
|
128
|
+
return {
|
|
129
|
+
...ctx,
|
|
130
|
+
resolved,
|
|
131
|
+
bodyStyle,
|
|
132
|
+
blockquoteStyle: resolveBlockquoteStyle(resolved),
|
|
133
|
+
listLevelIndentsPx: computeLevelIndentsPx(resolved, bodyStyle.fontSizePx),
|
|
134
|
+
orderedLevelIndentsPx: computeOrderedLevelIndentsPx(resolved, bodyStyle.fontSizePx, ctx.orderedMetrics.maxWidthByDepth),
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
const VALID_SPANS = new Set(['column', 'page']);
|
|
138
|
+
const VALID_PLACEMENTS = new Set(['here', 'top', 'bottom']);
|
|
139
|
+
/** Per-instance span / placement: fence attribute when valid, else the style. */
|
|
140
|
+
export function resolveCalloutAttrs(style, attrs) {
|
|
141
|
+
const span = attrs.span !== undefined && VALID_SPANS.has(attrs.span)
|
|
142
|
+
? attrs.span
|
|
143
|
+
: style.span;
|
|
144
|
+
const placement = attrs.placement !== undefined && VALID_PLACEMENTS.has(attrs.placement)
|
|
145
|
+
? attrs.placement
|
|
146
|
+
: style.placement;
|
|
147
|
+
const title = attrs.title !== undefined ? attrs.title : style.title;
|
|
148
|
+
return { span, placement, title };
|
|
149
|
+
}
|
|
150
|
+
/** Shift a resolved resource block's caption/table geometry by `(ox, oy)`. */
|
|
151
|
+
function offsetResourceBlock(rb, ox, oy) {
|
|
152
|
+
for (const ln of rb.captionLines) {
|
|
153
|
+
ln.bbox.x += ox;
|
|
154
|
+
ln.bbox.y += oy;
|
|
155
|
+
ln.baseline += oy;
|
|
156
|
+
}
|
|
157
|
+
for (const ln of rb.noteLines) {
|
|
158
|
+
ln.bbox.x += ox;
|
|
159
|
+
ln.bbox.y += oy;
|
|
160
|
+
ln.baseline += oy;
|
|
161
|
+
}
|
|
162
|
+
if (rb.captionBar) {
|
|
163
|
+
rb.captionBar.rect.x += ox;
|
|
164
|
+
rb.captionBar.rect.y += oy;
|
|
165
|
+
}
|
|
166
|
+
if (rb.table) {
|
|
167
|
+
for (const cell of rb.table.cells) {
|
|
168
|
+
cell.rect.x += ox;
|
|
169
|
+
cell.rect.y += oy;
|
|
170
|
+
for (const cl of cell.lines) {
|
|
171
|
+
cl.bbox.x += ox;
|
|
172
|
+
cl.bbox.y += oy;
|
|
173
|
+
cl.baseline += oy;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/** Shift one block (lines, bullet, resource geometry) by `(ox, oy)`. */
|
|
179
|
+
function offsetBlock(blk, ox, oy) {
|
|
180
|
+
blk.bbox.x += ox;
|
|
181
|
+
blk.bbox.y += oy;
|
|
182
|
+
for (const line of blk.lines) {
|
|
183
|
+
line.bbox.x += ox;
|
|
184
|
+
line.bbox.y += oy;
|
|
185
|
+
line.baseline += oy;
|
|
186
|
+
}
|
|
187
|
+
if (blk.bulletOffsetX !== undefined)
|
|
188
|
+
blk.bulletOffsetX += ox;
|
|
189
|
+
if (blk.separatorX !== undefined)
|
|
190
|
+
blk.separatorX += ox;
|
|
191
|
+
if (blk.bulletY !== undefined)
|
|
192
|
+
blk.bulletY += oy;
|
|
193
|
+
if (blk.resourceBlock)
|
|
194
|
+
offsetResourceBlock(blk.resourceBlock, ox, oy);
|
|
195
|
+
}
|
|
196
|
+
function offsetDesignBlock(b, ox, oy) {
|
|
197
|
+
b.bbox.x += ox;
|
|
198
|
+
b.bbox.y += oy;
|
|
199
|
+
if (b.kind === 'text') {
|
|
200
|
+
for (const line of b.lines)
|
|
201
|
+
line.baselineY += oy;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
/** Move a laid-out callout from frame-relative to absolute page coordinates
|
|
205
|
+
* with the frame's top-left at `(x, y)`. */
|
|
206
|
+
export function offsetCalloutToAbsolute(result, x, y) {
|
|
207
|
+
const { frame } = result;
|
|
208
|
+
frame.bbox = createBoundingBox(x, y, result.width, result.totalHeight);
|
|
209
|
+
if (frame.designOverlay) {
|
|
210
|
+
frame.designOverlay.bbox.x += x;
|
|
211
|
+
frame.designOverlay.bbox.y += y;
|
|
212
|
+
for (const b of frame.designOverlay.blocks)
|
|
213
|
+
offsetDesignBlock(b, x, y);
|
|
214
|
+
}
|
|
215
|
+
for (const child of result.children)
|
|
216
|
+
offsetBlock(child, x, y);
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Lay out one callout at `width`. Everything is frame-relative; see
|
|
220
|
+
* {@link offsetCalloutToAbsolute}.
|
|
221
|
+
*/
|
|
222
|
+
export function layoutCallout(input) {
|
|
223
|
+
const { style, attrs, children, childStartIdx, ctx, containerId, frameId } = input;
|
|
224
|
+
const dpi = input.resolved.page.dpi;
|
|
225
|
+
const derivedCtx = deriveCalloutMeasureContext(ctx, style);
|
|
226
|
+
const bodyStyle = derivedCtx.bodyStyle;
|
|
227
|
+
const em = bodyStyle.fontSizePx;
|
|
228
|
+
const px = (d) => dimensionToPx(d, dpi, em);
|
|
229
|
+
const { span, placement, title: rawTitle } = resolveCalloutAttrs(style, attrs);
|
|
230
|
+
const isAuto = style.width === 'auto';
|
|
231
|
+
// --- Frame geometry ------------------------------------------------------
|
|
232
|
+
const padT = px(style.padding.top);
|
|
233
|
+
const padR = px(style.padding.right);
|
|
234
|
+
const padB = px(style.padding.bottom);
|
|
235
|
+
const padL = px(style.padding.left);
|
|
236
|
+
const stripeOn = style.stripe.enabled;
|
|
237
|
+
const stripeW = stripeOn ? px(style.stripe.width) : 0;
|
|
238
|
+
const sideStripe = stripeOn && style.stripe.side !== 'top';
|
|
239
|
+
const stripeLeft = sideStripe && style.stripe.side === 'left';
|
|
240
|
+
const stripeRight = sideStripe && style.stripe.side === 'right';
|
|
241
|
+
const topStripe = stripeOn && style.stripe.side === 'top';
|
|
242
|
+
const hasIcon = style.icon.kind !== 'none'
|
|
243
|
+
&& (style.icon.kind === 'glyph' ? style.icon.glyph.length > 0 : style.icon.resourceId.length > 0);
|
|
244
|
+
const iconSize = hasIcon ? px(style.icon.size) : 0;
|
|
245
|
+
const gapPx = px(style.titleStyle.gap);
|
|
246
|
+
// The icon takes its own column only when there is no side stripe to sit
|
|
247
|
+
// over.
|
|
248
|
+
const iconColumn = hasIcon && !sideStripe ? iconSize + gapPx : 0;
|
|
249
|
+
const innerX = (stripeLeft ? stripeW : 0) + padL + iconColumn;
|
|
250
|
+
const innerTop = (topStripe ? stripeW : 0) + padT;
|
|
251
|
+
// --- Title -----------------------------------------------------------------
|
|
252
|
+
const titleText = style.titleStyle.textTransform === 'uppercase'
|
|
253
|
+
? uppercasePreservingLength(rawTitle)
|
|
254
|
+
: rawTitle;
|
|
255
|
+
const titleFontPx = dimensionToPx(style.titleStyle.fontSize, dpi, em);
|
|
256
|
+
const titleFont = buildFontString(style.titleStyle.fontFamily, titleFontPx, style.titleStyle.fontWeight.toString(), style.titleStyle.italic ? 'italic' : 'normal');
|
|
257
|
+
const titleLineHeight = titleFontPx * 1.2;
|
|
258
|
+
const hasTitle = titleText.trim().length > 0;
|
|
259
|
+
// Frame width: `fill` uses the given width; `auto` shrink-wraps the title.
|
|
260
|
+
let width = input.width;
|
|
261
|
+
let innerWidth;
|
|
262
|
+
if (isAuto) {
|
|
263
|
+
const titleW = hasTitle ? measureTextWidth(titleText, titleFont) : 0;
|
|
264
|
+
innerWidth = Math.max(1, titleW);
|
|
265
|
+
width = innerX + innerWidth + padR + (stripeRight ? stripeW : 0);
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
innerWidth = Math.max(1, width - innerX - padR - (stripeRight ? stripeW : 0));
|
|
269
|
+
}
|
|
270
|
+
let cursorY = innerTop;
|
|
271
|
+
const overlayBlocks = [];
|
|
272
|
+
let titleBlock;
|
|
273
|
+
if (hasTitle) {
|
|
274
|
+
const measured = measureBlock(titleText, titleFont, innerWidth, titleLineHeight, { textAlign: 'left' });
|
|
275
|
+
const lines = measured.lines.length > 0
|
|
276
|
+
? measured.lines
|
|
277
|
+
: [{ text: titleText, bbox: createBoundingBox(0, 0, innerWidth, titleLineHeight), baseline: titleLineHeight * 0.8, hyphenated: false }];
|
|
278
|
+
const titleHeight = lines.length * titleLineHeight;
|
|
279
|
+
titleBlock = {
|
|
280
|
+
kind: 'text',
|
|
281
|
+
bbox: createBoundingBox(innerX, cursorY, innerWidth, titleHeight),
|
|
282
|
+
fontString: titleFont,
|
|
283
|
+
color: style.titleStyle.color.hex,
|
|
284
|
+
lines: lines.map((ln, i) => ({
|
|
285
|
+
text: ln.text,
|
|
286
|
+
xOffset: 0,
|
|
287
|
+
baselineY: cursorY + i * titleLineHeight + titleLineHeight * 0.8,
|
|
288
|
+
width: ln.bbox.width,
|
|
289
|
+
})),
|
|
290
|
+
clip: false,
|
|
291
|
+
};
|
|
292
|
+
cursorY += titleHeight;
|
|
293
|
+
}
|
|
294
|
+
// --- Children --------------------------------------------------------------
|
|
295
|
+
const childBlocks = [];
|
|
296
|
+
if (!isAuto) {
|
|
297
|
+
let prevMarginBottom = hasTitle ? gapPx : 0;
|
|
298
|
+
let prevWasListItem = false;
|
|
299
|
+
let first = true;
|
|
300
|
+
for (let k = 0; k < children.length; k++) {
|
|
301
|
+
const raw = children[k];
|
|
302
|
+
const blockIdx = childStartIdx + k;
|
|
303
|
+
if (raw.type === 'directive' || isMarkerBlock(raw))
|
|
304
|
+
continue;
|
|
305
|
+
const measuredBlock = measureContentBlock(raw, blockIdx, innerWidth, derivedCtx, {
|
|
306
|
+
styleOverride: input.paragraphStyleFor?.(blockIdx),
|
|
307
|
+
});
|
|
308
|
+
if (!measuredBlock)
|
|
309
|
+
continue;
|
|
310
|
+
const { kind, measured, prefixLen, absoluteSourceMap, mathDisplayRender, resourceBlock } = measuredBlock;
|
|
311
|
+
const { style: bs, vdtType, headingLevel, numberPrefix, listBullet, listDepth, listKind, bulletXOffsetInColumn, strikethroughText } = kind;
|
|
312
|
+
// Spacing above: margin collapsing, list-item spacing inside a run.
|
|
313
|
+
let spacing;
|
|
314
|
+
if (first) {
|
|
315
|
+
spacing = prevMarginBottom;
|
|
316
|
+
}
|
|
317
|
+
else if (vdtType === 'listItem' && prevWasListItem) {
|
|
318
|
+
spacing = listBullet ? listBullet.itemSpacingPx : 0;
|
|
319
|
+
}
|
|
320
|
+
else {
|
|
321
|
+
spacing = Math.max(prevMarginBottom, bs.marginTopPx);
|
|
322
|
+
}
|
|
323
|
+
cursorY += spacing;
|
|
324
|
+
const blk = createVDTBlock(input.nextChildId(), vdtType, bs.fontString, bs.color, bs.textAlign);
|
|
325
|
+
applyStyleAttrs(blk, bs);
|
|
326
|
+
blk.contentIndex = blockIdx;
|
|
327
|
+
blk.containerId = containerId;
|
|
328
|
+
blk.dirty = false;
|
|
329
|
+
blk.snappedToGrid = false;
|
|
330
|
+
blk.headingLevel = headingLevel;
|
|
331
|
+
if (numberPrefix)
|
|
332
|
+
blk.numberPrefix = numberPrefix;
|
|
333
|
+
blk.sourceMap = absoluteSourceMap;
|
|
334
|
+
blk.plainPrefixLen = prefixLen;
|
|
335
|
+
let height;
|
|
336
|
+
if (vdtType === 'resource' && resourceBlock) {
|
|
337
|
+
height = measured.totalHeight;
|
|
338
|
+
blk.resourceBlock = resourceBlock;
|
|
339
|
+
blk.lines = [{
|
|
340
|
+
text: '',
|
|
341
|
+
bbox: createBoundingBox(0, 0, resourceBlock.bodyRect.width, height),
|
|
342
|
+
baseline: 0,
|
|
343
|
+
hyphenated: false,
|
|
344
|
+
segments: [],
|
|
345
|
+
isLastLine: true,
|
|
346
|
+
}];
|
|
347
|
+
blk.sourceStart = raw.sourceStart + (input.bodyOffset ?? ctx.bodyOffset);
|
|
348
|
+
blk.sourceEnd = raw.sourceEnd + (input.bodyOffset ?? ctx.bodyOffset);
|
|
349
|
+
}
|
|
350
|
+
else if (vdtType === 'mathDisplay' && mathDisplayRender) {
|
|
351
|
+
blk.mathRender = mathDisplayRender;
|
|
352
|
+
blk.tex = raw.tex;
|
|
353
|
+
const mathLine = { ...measured.lines[0], bbox: { ...measured.lines[0].bbox, y: 0 } };
|
|
354
|
+
blk.lines = [mathLine];
|
|
355
|
+
height = mathLine.bbox.height;
|
|
356
|
+
blk.sourceStart = raw.sourceStart + ctx.bodyOffset;
|
|
357
|
+
blk.sourceEnd = raw.sourceEnd + ctx.bodyOffset;
|
|
358
|
+
}
|
|
359
|
+
else {
|
|
360
|
+
blk.lines = resetLinePositions(measured.lines, bs.lineHeightPx);
|
|
361
|
+
height = blk.lines.length * bs.lineHeightPx;
|
|
362
|
+
blk.sourceStart = measured.lines[0].sourceStart ?? raw.sourceStart + ctx.bodyOffset;
|
|
363
|
+
blk.sourceEnd = measured.lines[measured.lines.length - 1].sourceEnd ?? raw.sourceEnd + ctx.bodyOffset;
|
|
364
|
+
}
|
|
365
|
+
// Relocate to the inner rect (frame-relative).
|
|
366
|
+
blk.bbox = createBoundingBox(innerX, cursorY, innerWidth, height);
|
|
367
|
+
for (const line of blk.lines) {
|
|
368
|
+
line.bbox.x += innerX;
|
|
369
|
+
line.bbox.y += cursorY;
|
|
370
|
+
line.baseline += cursorY;
|
|
371
|
+
}
|
|
372
|
+
if (blk.resourceBlock)
|
|
373
|
+
offsetResourceBlock(blk.resourceBlock, innerX, cursorY);
|
|
374
|
+
if (listBullet) {
|
|
375
|
+
blk.listDepth = listDepth;
|
|
376
|
+
blk.listKind = listKind;
|
|
377
|
+
blk.bulletText = listBullet.bulletText;
|
|
378
|
+
blk.bulletFontString = listBullet.bulletFontString;
|
|
379
|
+
blk.bulletColor = listBullet.bulletColor;
|
|
380
|
+
blk.bulletOffsetX = innerX + bulletXOffsetInColumn;
|
|
381
|
+
if (listBullet.separatorText !== undefined) {
|
|
382
|
+
blk.separatorText = listBullet.separatorText;
|
|
383
|
+
blk.separatorFontString = listBullet.separatorFontString;
|
|
384
|
+
blk.separatorColor = listBullet.separatorColor;
|
|
385
|
+
blk.separatorX = blk.bulletOffsetX + (listBullet.separatorOffsetPx ?? 0);
|
|
386
|
+
}
|
|
387
|
+
if (strikethroughText)
|
|
388
|
+
blk.strikethroughText = true;
|
|
389
|
+
const firstLine = blk.lines[0];
|
|
390
|
+
if (firstLine) {
|
|
391
|
+
blk.bulletY = firstLine.baseline - listBullet.textFontSizePx * 0.3 + listBullet.verticalOffsetPx;
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
childBlocks.push(blk);
|
|
395
|
+
cursorY += height;
|
|
396
|
+
prevMarginBottom = bs.marginBottomPx;
|
|
397
|
+
prevWasListItem = vdtType === 'listItem';
|
|
398
|
+
first = false;
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
const contentBottom = cursorY;
|
|
402
|
+
const totalHeight = contentBottom + padB;
|
|
403
|
+
const innerRect = createBoundingBox(innerX, innerTop, innerWidth, Math.max(0, contentBottom - innerTop));
|
|
404
|
+
// --- Decoration (paint order: background, stripe, icon, title) -------------
|
|
405
|
+
const overlay = { bbox: createBoundingBox(0, 0, width, totalHeight), blocks: overlayBlocks };
|
|
406
|
+
const borderOn = style.border.enabled;
|
|
407
|
+
if (style.backgroundEnabled || borderOn) {
|
|
408
|
+
overlayBlocks.push({
|
|
409
|
+
kind: 'box',
|
|
410
|
+
bbox: createBoundingBox(0, 0, width, totalHeight),
|
|
411
|
+
box: {
|
|
412
|
+
backgroundColor: style.backgroundEnabled ? style.background.hex : undefined,
|
|
413
|
+
borderColor: borderOn ? style.border.color.hex : undefined,
|
|
414
|
+
borderWidthPx: borderOn ? px(style.border.width) : 0,
|
|
415
|
+
borderRadiusPx: px(style.borderRadius),
|
|
416
|
+
},
|
|
417
|
+
});
|
|
418
|
+
}
|
|
419
|
+
if (stripeOn) {
|
|
420
|
+
const stripeBox = topStripe
|
|
421
|
+
? createBoundingBox(0, 0, width, stripeW)
|
|
422
|
+
: stripeLeft
|
|
423
|
+
? createBoundingBox(0, 0, stripeW, totalHeight)
|
|
424
|
+
: createBoundingBox(width - stripeW, 0, stripeW, totalHeight);
|
|
425
|
+
overlayBlocks.push({
|
|
426
|
+
kind: 'box',
|
|
427
|
+
bbox: stripeBox,
|
|
428
|
+
box: { backgroundColor: style.stripe.color.hex, borderWidthPx: 0, borderRadiusPx: 0 },
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
let iconFileId;
|
|
432
|
+
let iconFormat;
|
|
433
|
+
if (hasIcon) {
|
|
434
|
+
// Over a side stripe the icon is centred on the stripe; otherwise it
|
|
435
|
+
// sits in its own column left of the content.
|
|
436
|
+
const iconX = sideStripe
|
|
437
|
+
? (stripeLeft ? (stripeW - iconSize) / 2 : width - stripeW + (stripeW - iconSize) / 2)
|
|
438
|
+
: innerX - iconColumn;
|
|
439
|
+
const iconY = style.icon.align === 'center'
|
|
440
|
+
? innerTop + Math.max(0, (contentBottom - innerTop - iconSize) / 2)
|
|
441
|
+
: innerTop;
|
|
442
|
+
const iconBox = createBoundingBox(iconX, iconY, iconSize, iconSize);
|
|
443
|
+
if (style.icon.kind === 'resource') {
|
|
444
|
+
const resource = ctx.resourceById.get(style.icon.resourceId);
|
|
445
|
+
const fileId = resource?.bitmap?.fileId ?? resource?.svg?.fileId;
|
|
446
|
+
if (fileId) {
|
|
447
|
+
iconFileId = fileId;
|
|
448
|
+
iconFormat = resource?.bitmap?.format;
|
|
449
|
+
overlayBlocks.push({ kind: 'image', bbox: iconBox, fileId });
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
else {
|
|
453
|
+
const iconFont = buildFontString(style.icon.fontFamily, iconSize, style.icon.fontWeight.toString());
|
|
454
|
+
const glyphW = measureTextWidth(style.icon.glyph, iconFont);
|
|
455
|
+
overlayBlocks.push({
|
|
456
|
+
kind: 'text',
|
|
457
|
+
bbox: iconBox,
|
|
458
|
+
fontString: iconFont,
|
|
459
|
+
color: style.icon.color.hex,
|
|
460
|
+
lines: [{
|
|
461
|
+
text: style.icon.glyph,
|
|
462
|
+
xOffset: Math.max(0, (iconSize - glyphW) / 2),
|
|
463
|
+
baselineY: iconY + iconSize * 0.8,
|
|
464
|
+
width: glyphW,
|
|
465
|
+
}],
|
|
466
|
+
clip: false,
|
|
467
|
+
});
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
if (titleBlock)
|
|
471
|
+
overlayBlocks.push(titleBlock);
|
|
472
|
+
// --- Frame block -------------------------------------------------------------
|
|
473
|
+
const frame = createVDTBlock(frameId, 'callout', bodyStyle.fontString, bodyStyle.color, bodyStyle.textAlign);
|
|
474
|
+
frame.bbox = createBoundingBox(0, 0, width, totalHeight);
|
|
475
|
+
frame.lines = [];
|
|
476
|
+
frame.dirty = false;
|
|
477
|
+
frame.snappedToGrid = false;
|
|
478
|
+
frame.containerId = containerId;
|
|
479
|
+
frame.designOverlay = overlay;
|
|
480
|
+
frame.callout = {
|
|
481
|
+
styleId: style.id,
|
|
482
|
+
span,
|
|
483
|
+
placement,
|
|
484
|
+
innerRect,
|
|
485
|
+
childIds: childBlocks.map((b) => b.id),
|
|
486
|
+
iconFileId,
|
|
487
|
+
iconFormat,
|
|
488
|
+
};
|
|
489
|
+
return {
|
|
490
|
+
frame,
|
|
491
|
+
children: childBlocks,
|
|
492
|
+
width,
|
|
493
|
+
totalHeight,
|
|
494
|
+
marginTopPx: px(style.marginTop),
|
|
495
|
+
marginBottomPx: px(style.marginBottom),
|
|
496
|
+
};
|
|
497
|
+
}
|
|
498
|
+
//# sourceMappingURL=calloutLayout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calloutLayout.js","sourceRoot":"","sources":["../../src/pipeline/calloutLayout.ts"],"names":[],"mappings":"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"}
|