postext 1.46.4 → 1.48.0
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__/bundle/designOverflowPin.test.js +1 -1
- package/dist/__tests__/bundle/gridBreakRulesPin.test.js +2 -2
- package/dist/__tests__/bundle/shapingLanguagePin.test.js +3 -3
- package/dist/__tests__/bundle/taskBoxPin.test.js +1 -1
- package/dist/__tests__/bundle.test.js +1 -1
- package/dist/__tests__/codeBlocks.test.js +1 -1
- package/dist/__tests__/comics/config.test.js +20 -0
- package/dist/__tests__/comics/config.test.js.map +1 -1
- package/dist/__tests__/composed/cardShapes.test.d.ts +2 -0
- package/dist/__tests__/composed/cardShapes.test.d.ts.map +1 -0
- package/dist/__tests__/composed/cardShapes.test.js +82 -0
- package/dist/__tests__/composed/cardShapes.test.js.map +1 -0
- package/dist/__tests__/composed/connectors.test.d.ts +2 -0
- package/dist/__tests__/composed/connectors.test.d.ts.map +1 -0
- package/dist/__tests__/composed/connectors.test.js +349 -0
- package/dist/__tests__/composed/connectors.test.js.map +1 -0
- package/dist/__tests__/composed/decorationSidePoints.test.d.ts +2 -0
- package/dist/__tests__/composed/decorationSidePoints.test.d.ts.map +1 -0
- package/dist/__tests__/composed/decorationSidePoints.test.js +164 -0
- package/dist/__tests__/composed/decorationSidePoints.test.js.map +1 -0
- package/dist/__tests__/composed/fit.test.js +2 -1
- package/dist/__tests__/composed/fit.test.js.map +1 -1
- package/dist/__tests__/composed/fixtures/connectors.d.ts +33 -0
- package/dist/__tests__/composed/fixtures/connectors.d.ts.map +1 -0
- package/dist/__tests__/composed/fixtures/connectors.js +142 -0
- package/dist/__tests__/composed/fixtures/connectors.js.map +1 -0
- package/dist/__tests__/composed/fixtures/grid.d.ts +32 -0
- package/dist/__tests__/composed/fixtures/grid.d.ts.map +1 -0
- package/dist/__tests__/composed/fixtures/grid.js +53 -0
- package/dist/__tests__/composed/fixtures/grid.js.map +1 -0
- package/dist/__tests__/composed/fixtures/legendMap.d.ts +24 -0
- package/dist/__tests__/composed/fixtures/legendMap.d.ts.map +1 -0
- package/dist/__tests__/composed/fixtures/legendMap.js +117 -0
- package/dist/__tests__/composed/fixtures/legendMap.js.map +1 -0
- package/dist/__tests__/composed/fixtures/mapParts.d.ts +58 -0
- package/dist/__tests__/composed/fixtures/mapParts.d.ts.map +1 -0
- package/dist/__tests__/composed/fixtures/mapParts.js +192 -0
- package/dist/__tests__/composed/fixtures/mapParts.js.map +1 -0
- package/dist/__tests__/composed/fixtures/modules.d.ts +55 -0
- package/dist/__tests__/composed/fixtures/modules.d.ts.map +1 -0
- package/dist/__tests__/composed/fixtures/modules.js +123 -0
- package/dist/__tests__/composed/fixtures/modules.js.map +1 -0
- package/dist/__tests__/composed/grid.test.d.ts +2 -0
- package/dist/__tests__/composed/grid.test.d.ts.map +1 -0
- package/dist/__tests__/composed/grid.test.js +357 -0
- package/dist/__tests__/composed/grid.test.js.map +1 -0
- package/dist/__tests__/composed/groups.test.js +6 -3
- package/dist/__tests__/composed/groups.test.js.map +1 -1
- package/dist/__tests__/composed/labelLegend.test.d.ts +2 -0
- package/dist/__tests__/composed/labelLegend.test.d.ts.map +1 -0
- package/dist/__tests__/composed/labelLegend.test.js +268 -0
- package/dist/__tests__/composed/labelLegend.test.js.map +1 -0
- package/dist/__tests__/composed/labelsChecks.test.js.map +1 -1
- package/dist/__tests__/composed/leaders.test.d.ts +2 -0
- package/dist/__tests__/composed/leaders.test.d.ts.map +1 -0
- package/dist/__tests__/composed/leaders.test.js +372 -0
- package/dist/__tests__/composed/leaders.test.js.map +1 -0
- package/dist/__tests__/composed/modules.test.d.ts +2 -0
- package/dist/__tests__/composed/modules.test.d.ts.map +1 -0
- package/dist/__tests__/composed/modules.test.js +352 -0
- package/dist/__tests__/composed/modules.test.js.map +1 -0
- package/dist/__tests__/composed/overConnectors.test.d.ts +2 -0
- package/dist/__tests__/composed/overConnectors.test.d.ts.map +1 -0
- package/dist/__tests__/composed/overConnectors.test.js +232 -0
- package/dist/__tests__/composed/overConnectors.test.js.map +1 -0
- package/dist/__tests__/composed/overlap.test.d.ts +2 -0
- package/dist/__tests__/composed/overlap.test.d.ts.map +1 -0
- package/dist/__tests__/composed/overlap.test.js +339 -0
- package/dist/__tests__/composed/overlap.test.js.map +1 -0
- package/dist/__tests__/composed/viewerLeaf.test.d.ts +2 -0
- package/dist/__tests__/composed/viewerLeaf.test.d.ts.map +1 -0
- package/dist/__tests__/composed/viewerLeaf.test.js +106 -0
- package/dist/__tests__/composed/viewerLeaf.test.js.map +1 -0
- package/dist/__tests__/composedTemplates.test.js +1 -1
- package/dist/__tests__/design/boxShape.test.d.ts +2 -0
- package/dist/__tests__/design/boxShape.test.d.ts.map +1 -0
- package/dist/__tests__/design/boxShape.test.js +126 -0
- package/dist/__tests__/design/boxShape.test.js.map +1 -0
- package/dist/__tests__/design/boxShapePaint.test.d.ts +2 -0
- package/dist/__tests__/design/boxShapePaint.test.d.ts.map +1 -0
- package/dist/__tests__/design/boxShapePaint.test.js +130 -0
- package/dist/__tests__/design/boxShapePaint.test.js.map +1 -0
- package/dist/__tests__/design/openerBottomAnchor.test.js.map +1 -1
- package/dist/__tests__/design/pathBlock.test.d.ts +2 -0
- package/dist/__tests__/design/pathBlock.test.d.ts.map +1 -0
- package/dist/__tests__/design/pathBlock.test.js +194 -0
- package/dist/__tests__/design/pathBlock.test.js.map +1 -0
- package/dist/__tests__/design/pathElement.test.d.ts +2 -0
- package/dist/__tests__/design/pathElement.test.d.ts.map +1 -0
- package/dist/__tests__/design/pathElement.test.js +257 -0
- package/dist/__tests__/design/pathElement.test.js.map +1 -0
- package/dist/__tests__/design/svgPath.test.d.ts +2 -0
- package/dist/__tests__/design/svgPath.test.d.ts.map +1 -0
- package/dist/__tests__/design/svgPath.test.js +144 -0
- package/dist/__tests__/design/svgPath.test.js.map +1 -0
- package/dist/__tests__/exports.test.js +53 -0
- package/dist/__tests__/exports.test.js.map +1 -1
- package/dist/__tests__/fontUsage.test.js +46 -0
- package/dist/__tests__/fontUsage.test.js.map +1 -1
- package/dist/__tests__/hardBreaks.test.js +1 -1
- package/dist/__tests__/headingInlineMarks.test.js +1 -1
- package/dist/__tests__/labelGlyphPaint.test.d.ts +2 -0
- package/dist/__tests__/labelGlyphPaint.test.d.ts.map +1 -0
- package/dist/__tests__/labelGlyphPaint.test.js +86 -0
- package/dist/__tests__/labelGlyphPaint.test.js.map +1 -0
- package/dist/__tests__/mathSizeMigration.test.js +2 -2
- package/dist/__tests__/migrate/labelsOnPictures.test.js +1 -1
- package/dist/__tests__/migrate/labelsOnPictures.test.js.map +1 -1
- package/dist/__tests__/parse/containers.test.js +1 -1
- package/dist/__tests__/parse/containers.test.js.map +1 -1
- package/dist/__tests__/pipeline/calloutInlineResourceGap.test.js +1 -1
- package/dist/__tests__/pipeline/calloutLabelGlyph.test.d.ts +2 -0
- package/dist/__tests__/pipeline/calloutLabelGlyph.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline/calloutLabelGlyph.test.js +198 -0
- package/dist/__tests__/pipeline/calloutLabelGlyph.test.js.map +1 -0
- package/dist/__tests__/pipeline/calloutShapes.test.d.ts +2 -0
- package/dist/__tests__/pipeline/calloutShapes.test.d.ts.map +1 -0
- package/dist/__tests__/pipeline/calloutShapes.test.js +159 -0
- package/dist/__tests__/pipeline/calloutShapes.test.js.map +1 -0
- package/dist/__tests__/pipeline/calloutSplitMinLinesChild.test.js +1 -1
- package/dist/__tests__/pipeline/colonListRoom.test.js +1 -1
- package/dist/__tests__/pipeline/compoundBreaks.test.js +1 -1
- package/dist/__tests__/pipeline/dashBreaks.test.js +1 -1
- package/dist/__tests__/pipeline/headingSplitOrphans.test.js +1 -1
- package/dist/__tests__/pipeline/inlineFigureSpace.test.js +1 -1
- package/dist/__tests__/pipeline/paragraphContainerTail.test.js +1 -1
- package/dist/__tests__/pipeline/raggedOptimal.test.js +1 -1
- package/dist/__tests__/prepareFonts.test.js +8 -6
- package/dist/__tests__/prepareFonts.test.js.map +1 -1
- package/dist/__tests__/verseLines.test.js +1 -1
- package/dist/bundle/configVersion.d.ts +12 -3
- package/dist/bundle/configVersion.d.ts.map +1 -1
- package/dist/bundle/configVersion.js +16 -5
- package/dist/bundle/configVersion.js.map +1 -1
- package/dist/canvas-backend/blockRender.js +3 -3
- package/dist/canvas-backend/blockRender.js.map +1 -1
- package/dist/canvas-backend/composed.d.ts +4 -2
- package/dist/canvas-backend/composed.d.ts.map +1 -1
- package/dist/canvas-backend/composed.js +12 -7
- package/dist/canvas-backend/composed.js.map +1 -1
- package/dist/canvas-backend/headerFooter.d.ts +17 -1
- package/dist/canvas-backend/headerFooter.d.ts.map +1 -1
- package/dist/canvas-backend/headerFooter.js +64 -1
- package/dist/canvas-backend/headerFooter.js.map +1 -1
- package/dist/canvas-backend/index.d.ts.map +1 -1
- package/dist/canvas-backend/index.js +7 -1
- 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 +17 -6
- package/dist/canvas-backend/renderResourceBlock.js.map +1 -1
- package/dist/canvas-backend/swatch.d.ts +20 -1
- package/dist/canvas-backend/swatch.d.ts.map +1 -1
- package/dist/canvas-backend/swatch.js +51 -1
- package/dist/canvas-backend/swatch.js.map +1 -1
- package/dist/comics/fonts.d.ts +19 -0
- package/dist/comics/fonts.d.ts.map +1 -1
- package/dist/comics/fonts.js +70 -17
- package/dist/comics/fonts.js.map +1 -1
- package/dist/comics/layoutPage.d.ts.map +1 -1
- package/dist/comics/layoutPage.js +6 -1
- package/dist/comics/layoutPage.js.map +1 -1
- package/dist/composed/continuation.d.ts +10 -2
- package/dist/composed/continuation.d.ts.map +1 -1
- package/dist/composed/continuation.js +10 -2
- package/dist/composed/continuation.js.map +1 -1
- package/dist/composed/document.d.ts +45 -1
- package/dist/composed/document.d.ts.map +1 -1
- package/dist/composed/document.js +76 -17
- package/dist/composed/document.js.map +1 -1
- package/dist/composed/labelText.d.ts +9 -1
- package/dist/composed/labelText.d.ts.map +1 -1
- package/dist/composed/labelText.js +23 -1
- package/dist/composed/labelText.js.map +1 -1
- package/dist/composed/labels.d.ts +57 -3
- package/dist/composed/labels.d.ts.map +1 -1
- package/dist/composed/labels.js +261 -12
- package/dist/composed/labels.js.map +1 -1
- package/dist/composed/modules.d.ts +30 -0
- package/dist/composed/modules.d.ts.map +1 -0
- package/dist/composed/modules.js +194 -0
- package/dist/composed/modules.js.map +1 -0
- package/dist/composed/overlap.d.ts +52 -0
- package/dist/composed/overlap.d.ts.map +1 -0
- package/dist/composed/overlap.js +611 -0
- package/dist/composed/overlap.js.map +1 -0
- package/dist/composed/paint.d.ts +28 -5
- package/dist/composed/paint.d.ts.map +1 -1
- package/dist/composed/paint.js +26 -5
- package/dist/composed/paint.js.map +1 -1
- package/dist/composed/reflowLog.d.ts +6 -1
- package/dist/composed/reflowLog.d.ts.map +1 -1
- package/dist/composed/reflowLog.js +43 -0
- package/dist/composed/reflowLog.js.map +1 -1
- package/dist/composed/repeat.d.ts +66 -0
- package/dist/composed/repeat.d.ts.map +1 -0
- package/dist/composed/repeat.js +217 -0
- package/dist/composed/repeat.js.map +1 -0
- package/dist/composed/slotChecks.d.ts +1 -1
- package/dist/composed/slotChecks.d.ts.map +1 -1
- package/dist/composed/slotChecks.js +114 -8
- package/dist/composed/slotChecks.js.map +1 -1
- package/dist/composed/sourceMap.d.ts.map +1 -1
- package/dist/composed/sourceMap.js +16 -4
- package/dist/composed/sourceMap.js.map +1 -1
- package/dist/composed/spread.d.ts.map +1 -1
- package/dist/composed/spread.js +6 -2
- package/dist/composed/spread.js.map +1 -1
- package/dist/composed/templates.d.ts +22 -2
- package/dist/composed/templates.d.ts.map +1 -1
- package/dist/composed/templates.js +159 -9
- package/dist/composed/templates.js.map +1 -1
- package/dist/composed/types.d.ts +140 -7
- package/dist/composed/types.d.ts.map +1 -1
- package/dist/composed/validate.d.ts +1 -1
- package/dist/composed/validate.d.ts.map +1 -1
- package/dist/composed/validate.js +101 -4
- package/dist/composed/validate.js.map +1 -1
- package/dist/composed/wrap.d.ts.map +1 -1
- package/dist/composed/wrap.js +95 -17
- package/dist/composed/wrap.js.map +1 -1
- package/dist/configWarnings.d.ts +7 -1
- package/dist/configWarnings.d.ts.map +1 -1
- package/dist/configWarnings.js +275 -4
- package/dist/configWarnings.js.map +1 -1
- package/dist/contrast.d.ts.map +1 -1
- package/dist/contrast.js +8 -0
- package/dist/contrast.js.map +1 -1
- package/dist/defaults/calloutStyles.d.ts +10 -1
- package/dist/defaults/calloutStyles.d.ts.map +1 -1
- package/dist/defaults/calloutStyles.js +46 -7
- package/dist/defaults/calloutStyles.js.map +1 -1
- package/dist/defaults/comics.d.ts +2 -1
- package/dist/defaults/comics.d.ts.map +1 -1
- package/dist/defaults/comics.js +18 -3
- package/dist/defaults/comics.js.map +1 -1
- package/dist/defaults/headerFooter.d.ts.map +1 -1
- package/dist/defaults/headerFooter.js +38 -0
- package/dist/defaults/headerFooter.js.map +1 -1
- package/dist/design/boxShape.d.ts +101 -0
- package/dist/design/boxShape.d.ts.map +1 -0
- package/dist/design/boxShape.js +398 -0
- package/dist/design/boxShape.js.map +1 -0
- package/dist/design/connector.d.ts +75 -0
- package/dist/design/connector.d.ts.map +1 -0
- package/dist/design/connector.js +325 -0
- package/dist/design/connector.js.map +1 -0
- package/dist/design/layout.d.ts +56 -3
- package/dist/design/layout.d.ts.map +1 -1
- package/dist/design/layout.js +214 -12
- package/dist/design/layout.js.map +1 -1
- package/dist/design/logicalEdges.d.ts +7 -0
- package/dist/design/logicalEdges.d.ts.map +1 -1
- package/dist/design/logicalEdges.js +28 -0
- package/dist/design/logicalEdges.js.map +1 -1
- package/dist/design/pathBlock.d.ts +69 -0
- package/dist/design/pathBlock.d.ts.map +1 -0
- package/dist/design/pathBlock.js +286 -0
- package/dist/design/pathBlock.js.map +1 -0
- package/dist/design/svgPath.d.ts +48 -0
- package/dist/design/svgPath.d.ts.map +1 -0
- package/dist/design/svgPath.js +402 -0
- package/dist/design/svgPath.js.map +1 -0
- package/dist/fonts/usage.d.ts +5 -0
- package/dist/fonts/usage.d.ts.map +1 -1
- package/dist/fonts/usage.js +81 -11
- package/dist/fonts/usage.js.map +1 -1
- package/dist/html-backend.d.ts.map +1 -1
- package/dist/html-backend.js +127 -22
- package/dist/html-backend.js.map +1 -1
- package/dist/index.d.ts +19 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -5
- package/dist/index.js.map +1 -1
- package/dist/measure/cache.js +1 -1
- package/dist/measure/cache.js.map +1 -1
- package/dist/measure/inlineIcon.d.ts +34 -0
- package/dist/measure/inlineIcon.d.ts.map +1 -0
- package/dist/measure/inlineIcon.js +89 -0
- package/dist/measure/inlineIcon.js.map +1 -0
- package/dist/measure/rich.d.ts +2 -1
- package/dist/measure/rich.d.ts.map +1 -1
- package/dist/measure/rich.js +6 -0
- package/dist/measure/rich.js.map +1 -1
- package/dist/migrate/pageDesign.d.ts.map +1 -1
- package/dist/migrate/pageDesign.js +4 -2
- package/dist/migrate/pageDesign.js.map +1 -1
- package/dist/migrate/textToMarkdown.js +2 -0
- package/dist/migrate/textToMarkdown.js.map +1 -1
- package/dist/parse/blockParser.d.ts.map +1 -1
- package/dist/parse/blockParser.js +171 -20
- package/dist/parse/blockParser.js.map +1 -1
- package/dist/parse/index.d.ts +1 -1
- package/dist/parse/index.d.ts.map +1 -1
- package/dist/parse/index.js.map +1 -1
- package/dist/parse/inlineFormatting.d.ts +11 -3
- package/dist/parse/inlineFormatting.d.ts.map +1 -1
- package/dist/parse/inlineFormatting.js +63 -5
- package/dist/parse/inlineFormatting.js.map +1 -1
- package/dist/parse/inlineSnippet.d.ts +2 -1
- package/dist/parse/inlineSnippet.d.ts.map +1 -1
- package/dist/parse/inlineSnippet.js +3 -2
- package/dist/parse/inlineSnippet.js.map +1 -1
- package/dist/parse/sourceMapping.d.ts.map +1 -1
- package/dist/parse/sourceMapping.js +8 -1
- package/dist/parse/sourceMapping.js.map +1 -1
- package/dist/parse/types.d.ts +71 -1
- package/dist/parse/types.d.ts.map +1 -1
- package/dist/pipeline/build.d.ts.map +1 -1
- package/dist/pipeline/build.js +67 -13
- package/dist/pipeline/build.js.map +1 -1
- package/dist/pipeline/buildHelpers.d.ts +10 -0
- package/dist/pipeline/buildHelpers.d.ts.map +1 -1
- package/dist/pipeline/buildHelpers.js +17 -0
- package/dist/pipeline/buildHelpers.js.map +1 -1
- package/dist/pipeline/buildMeasurement.d.ts.map +1 -1
- package/dist/pipeline/buildMeasurement.js +23 -11
- package/dist/pipeline/buildMeasurement.js.map +1 -1
- package/dist/pipeline/calloutLayout.d.ts.map +1 -1
- package/dist/pipeline/calloutLayout.js +142 -32
- package/dist/pipeline/calloutLayout.js.map +1 -1
- package/dist/pipeline/composedLayout.d.ts +1 -33
- package/dist/pipeline/composedLayout.d.ts.map +1 -1
- package/dist/pipeline/composedLayout.js +526 -36
- package/dist/pipeline/composedLayout.js.map +1 -1
- package/dist/pipeline/config.d.ts.map +1 -1
- package/dist/pipeline/config.js +12 -0
- package/dist/pipeline/config.js.map +1 -1
- package/dist/pipeline/contentWarnings.d.ts.map +1 -1
- package/dist/pipeline/contentWarnings.js +46 -1
- package/dist/pipeline/contentWarnings.js.map +1 -1
- package/dist/pipeline/continuation.d.ts.map +1 -1
- package/dist/pipeline/continuation.js +3 -2
- package/dist/pipeline/continuation.js.map +1 -1
- package/dist/pipeline/headerFooter.d.ts +19 -1
- package/dist/pipeline/headerFooter.d.ts.map +1 -1
- package/dist/pipeline/headerFooter.js +169 -17
- package/dist/pipeline/headerFooter.js.map +1 -1
- package/dist/pipeline/partPalette.d.ts.map +1 -1
- package/dist/pipeline/partPalette.js +40 -1
- package/dist/pipeline/partPalette.js.map +1 -1
- package/dist/pipeline/resourceLayout.d.ts +1 -1
- package/dist/pipeline/resourceLayout.d.ts.map +1 -1
- package/dist/pipeline/resourceLayout.js +44 -15
- package/dist/pipeline/resourceLayout.js.map +1 -1
- package/dist/preflight.d.ts.map +1 -1
- package/dist/preflight.js +36 -1
- package/dist/preflight.js.map +1 -1
- package/dist/types.d.ts +319 -22
- package/dist/types.d.ts.map +1 -1
- package/dist/vdt.d.ts +392 -12
- package/dist/vdt.d.ts.map +1 -1
- package/dist/vdt.js.map +1 -1
- package/package.json +1 -1
|
@@ -6,15 +6,17 @@ import { applyTitleBreaks, parseInlineFormatting, replaceTitleBreaks } from '../
|
|
|
6
6
|
import { createBoundingBox, flowRectToPage, pageIsMirrored, pageIsVertical, } from '../vdt';
|
|
7
7
|
import { computeChapterTitles, computeChapterTitlesAtTop, computeChapterNumbers, computeChapterNumbersAtTop, computeChapterNumbersByBlock, computeChapterAttrs, computePageMarks, computePartValues, lineJoin, markSourceOf } from './placeholders';
|
|
8
8
|
import { parsePartNumber, parsePartPalette, partMarkPages } from './parts';
|
|
9
|
-
import { computePageMetrics, sheetRectToFlow } from './buildHelpers';
|
|
9
|
+
import { composedLeafConfig, computePageMetrics, onComposedLeaf, sheetRectToFlow } from './buildHelpers';
|
|
10
10
|
import { arabicNumbersOf, resolvedLocale } from './config';
|
|
11
11
|
import { classifyPages } from './pageRoles';
|
|
12
12
|
import { computeSectionStyles, createHeadingLevelResolver, headingIsHidden } from './headingStyles';
|
|
13
13
|
import { dimensionToPx } from '../units';
|
|
14
14
|
import { resolveDesignLineHeight, resolveDesignSlot } from '../defaults/headerFooter';
|
|
15
|
-
import { resolvePageTemplate } from '../composed/templates';
|
|
15
|
+
import { repeatInstance, resolvePageTemplate } from '../composed/templates';
|
|
16
16
|
import { splitSpreadDecoration } from '../composed/spread';
|
|
17
|
+
import { pathInkBox } from '../design/pathBlock';
|
|
17
18
|
import { frameOfBlock, framePageRect } from '../composed/paint';
|
|
19
|
+
import { figureAnchorPointOnPage } from '../composed/labels';
|
|
18
20
|
import { layoutDesignSlot, textVerticalOffset, trailingTracking, } from '../design/layout';
|
|
19
21
|
import { resolveDesignText } from '../design/placeholders';
|
|
20
22
|
import { plainDesignText } from '../design/richText';
|
|
@@ -74,8 +76,27 @@ export function primitiveToBlock(prim) {
|
|
|
74
76
|
return rulePrimitiveToBlock(prim);
|
|
75
77
|
if (prim.kind === 'image')
|
|
76
78
|
return imagePrimitiveToBlock(prim);
|
|
79
|
+
if (prim.kind === 'path')
|
|
80
|
+
return pathPrimitiveToBlock(prim);
|
|
77
81
|
return boxPrimitiveToBlock(prim);
|
|
78
82
|
}
|
|
83
|
+
/** A path element's outline as the vector block (#1060): the block's box
|
|
84
|
+
* is the ink's (`pathInkBox`), for hit tests and clips. */
|
|
85
|
+
function pathPrimitiveToBlock(prim) {
|
|
86
|
+
const block = {
|
|
87
|
+
kind: 'path',
|
|
88
|
+
bbox: createBoundingBox(0, 0, 0, 0),
|
|
89
|
+
subpaths: prim.subpaths.map((sp) => sp.map((c) => ({ ...c }))),
|
|
90
|
+
...(prim.fill ? { fill: prim.fill } : {}),
|
|
91
|
+
...(prim.stroke ? { stroke: { ...prim.stroke, ...(prim.stroke.dash ? { dash: [...prim.stroke.dash] } : {}) } } : {}),
|
|
92
|
+
// A connector's end marks (#1056).
|
|
93
|
+
...(prim.markers ? { markers: prim.markers.map((m) => ({ ...m })) } : {}),
|
|
94
|
+
// Painted after the frames (#1076).
|
|
95
|
+
...(prim.over ? { over: true } : {}),
|
|
96
|
+
};
|
|
97
|
+
block.bbox = pathInkBox(block);
|
|
98
|
+
return block;
|
|
99
|
+
}
|
|
79
100
|
function imagePrimitiveToBlock(prim) {
|
|
80
101
|
return {
|
|
81
102
|
kind: 'image',
|
|
@@ -120,6 +141,7 @@ function textPrimitiveToBlock(prim) {
|
|
|
120
141
|
borderColor: prim.box.borderColor,
|
|
121
142
|
borderWidthPx: prim.box.borderWidthPx,
|
|
122
143
|
borderRadiusPx: prim.box.borderRadiusPx,
|
|
144
|
+
...shapeFields(prim.box),
|
|
123
145
|
}
|
|
124
146
|
: undefined,
|
|
125
147
|
clip: prim.needsClip,
|
|
@@ -167,9 +189,17 @@ function boxPrimitiveToBlock(prim) {
|
|
|
167
189
|
borderColor: prim.box.borderColor,
|
|
168
190
|
borderWidthPx: prim.box.borderWidthPx,
|
|
169
191
|
borderRadiusPx: prim.box.borderRadiusPx,
|
|
192
|
+
...shapeFields(prim.box),
|
|
170
193
|
},
|
|
171
194
|
};
|
|
172
195
|
}
|
|
196
|
+
/** A box's corners of their own and border per side (#1059), copied. */
|
|
197
|
+
function shapeFields(box) {
|
|
198
|
+
return {
|
|
199
|
+
...(box.borderRadiiPx ? { borderRadiiPx: [...box.borderRadiiPx] } : {}),
|
|
200
|
+
...(box.borderSides ? { borderSides: { ...box.borderSides } } : {}),
|
|
201
|
+
};
|
|
202
|
+
}
|
|
173
203
|
/** Where a primitive's reservation ends: its foot, except for a drop cap,
|
|
174
204
|
* whose line box runs a quarter of its size under its baseline. The letter
|
|
175
205
|
* sits inside its paragraph's lines, so it reserves nothing below the text
|
|
@@ -211,7 +241,7 @@ export function headingDesignBoxes(level, heading, container, dpi, metadata, pag
|
|
|
211
241
|
if (!level.advancedDesign.enabled || level.advancedDesign.slot.elements.length === 0)
|
|
212
242
|
return [];
|
|
213
243
|
const result = layoutDesignSlot(level.advancedDesign.slot, { container, dpi, placeholders: headingPlaceholders(heading, metadata, pageIndex), frames, resourceById }, pageIndex);
|
|
214
|
-
const excluded = new Set(level.advancedDesign.slot.elements.filter((el) => el.reserve === false).map((el) => el.id));
|
|
244
|
+
const excluded = new Set(level.advancedDesign.slot.elements.filter((el) => el.kind !== 'connector' && el.reserve === false).map((el) => el.id));
|
|
215
245
|
const out = [];
|
|
216
246
|
result.primitives.forEach((prim, i) => {
|
|
217
247
|
if (excluded.has(result.elementIds[i]))
|
|
@@ -294,7 +324,7 @@ function measureDesignBand(design, heading, width, dpi, metadata, pageIndex, fra
|
|
|
294
324
|
const taller = result.primitives.some((p) => p.y + p.height > MEASURE_CONTAINER_HEIGHT / 4)
|
|
295
325
|
? layoutAt(2 * MEASURE_CONTAINER_HEIGHT)
|
|
296
326
|
: result;
|
|
297
|
-
const excluded = new Set(design.slot.elements.filter((el) => el.reserve === false).map((el) => el.id));
|
|
327
|
+
const excluded = new Set(design.slot.elements.filter((el) => el.kind !== 'connector' && el.reserve === false).map((el) => el.id));
|
|
298
328
|
let bottom = 0;
|
|
299
329
|
let claimedBy;
|
|
300
330
|
let textFloor = 0;
|
|
@@ -433,6 +463,20 @@ export function layoutSlotToVdt(slot, container, pageIndex, placeholders, dpi, e
|
|
|
433
463
|
...(extras?.startRight ? { startRight: true } : {}),
|
|
434
464
|
...(extras?.arabicNumbers ? { arabicNumbers: true } : {}),
|
|
435
465
|
}, pageIndex);
|
|
466
|
+
if (extras?.connectorDropped) {
|
|
467
|
+
for (const issue of result.issues)
|
|
468
|
+
if (issue.kind === 'connectorDropped')
|
|
469
|
+
extras.connectorDropped.push({ elementId: issue.elementId, targetId: issue.targetId });
|
|
470
|
+
}
|
|
471
|
+
if (extras?.connectorAnchorUnknown) {
|
|
472
|
+
for (const issue of result.issues) {
|
|
473
|
+
if (issue.kind !== 'connectorAnchorUnknown')
|
|
474
|
+
continue;
|
|
475
|
+
const { kind: _kind, ...rest } = issue;
|
|
476
|
+
void _kind;
|
|
477
|
+
extras.connectorAnchorUnknown.push(rest);
|
|
478
|
+
}
|
|
479
|
+
}
|
|
436
480
|
if (result.primitives.length === 0)
|
|
437
481
|
return undefined;
|
|
438
482
|
const sourceByElement = new Map();
|
|
@@ -937,6 +981,15 @@ export function framesInFrame(frames, frame) {
|
|
|
937
981
|
const back = (r) => ({ x: o.x + (r.x - o.x) / s, y: o.y + (r.y - o.y) / s, width: r.width / s, height: r.height / s });
|
|
938
982
|
return { ...frames, page: back(frames.page), bleed: back(frames.bleed), ...(frames.outer ? { outer: back(frames.outer) } : {}) };
|
|
939
983
|
}
|
|
984
|
+
/** The ends of connectors at an anchor no picture of their frame has
|
|
985
|
+
* (#1057), per document, as `labelAnchorUnknown` warnings with the
|
|
986
|
+
* connector's id (read by {@link connectorAnchorUnknownWarnings}). */
|
|
987
|
+
const connectorAnchorWarnings = new WeakMap();
|
|
988
|
+
/** The `labelAnchorUnknown` warnings of the connectors of `doc`'s composed
|
|
989
|
+
* pages (#1057): an end set at an anchor no picture of its frame has. */
|
|
990
|
+
export function connectorAnchorUnknownWarnings(doc) {
|
|
991
|
+
return connectorAnchorWarnings.get(doc) ?? [];
|
|
992
|
+
}
|
|
940
993
|
export function buildHeadersAndFooters(doc, resourceById, inputs = {}) {
|
|
941
994
|
// Each page's slots measure their text in the writing mode they are set
|
|
942
995
|
// in (see the loop); the mode in force before is put back.
|
|
@@ -955,12 +1008,21 @@ function layoutHeadersAndFooters(doc, resourceById, inputs) {
|
|
|
955
1008
|
// Header and footer are laid out on the sheet on every page; every other
|
|
956
1009
|
// slot (openers, part pages, overlays) in the page's flow frame, so on a
|
|
957
1010
|
// vertical page their text reads vertically.
|
|
958
|
-
const
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
1011
|
+
const framesOf = (m) => ({
|
|
1012
|
+
physical: { page: m.physical.trimBox, bleed: m.physical.bleedBox },
|
|
1013
|
+
vertical: {
|
|
1014
|
+
page: sheetRectToFlow(m.physical.trimBox, m.pageWidthPx),
|
|
1015
|
+
bleed: sheetRectToFlow(m.physical.bleedBox, m.pageWidthPx),
|
|
1016
|
+
upright: true,
|
|
1017
|
+
},
|
|
1018
|
+
});
|
|
1019
|
+
const docFrames = framesOf(metrics);
|
|
1020
|
+
// A composed page laid out on a host's leaf (`composedViewerLeaf`,
|
|
1021
|
+
// #1045) has the leaf's sheet: its decoration and furniture are laid on
|
|
1022
|
+
// it.
|
|
1023
|
+
const leafConfig = composedLeafConfig(resolved);
|
|
1024
|
+
const leafMetrics = leafConfig ? computePageMetrics(leafConfig) : undefined;
|
|
1025
|
+
const leafFrames = leafMetrics ? framesOf(leafMetrics) : undefined;
|
|
964
1026
|
// Page roles drive the per-element `pages` filter of every slot below.
|
|
965
1027
|
classifyPages(doc, resolved);
|
|
966
1028
|
// The headings a composed page's frames set (#874) count as running
|
|
@@ -1051,6 +1113,9 @@ function layoutHeadersAndFooters(doc, resourceById, inputs) {
|
|
|
1051
1113
|
// page's flow does; running heads and folios are horizontal on the
|
|
1052
1114
|
// sheet, whatever the flow (see below).
|
|
1053
1115
|
setMeasureWritingMode(pageIsVertical(page) ? 'vertical-rl' : 'horizontal-tb');
|
|
1116
|
+
const onLeaf = leafMetrics !== undefined && onComposedLeaf(resolved, page);
|
|
1117
|
+
const pageMetrics = onLeaf ? leafMetrics : metrics;
|
|
1118
|
+
const { physical: physicalFrames, vertical: verticalFrames } = onLeaf ? leafFrames : docFrames;
|
|
1054
1119
|
// Per-page content area: mirrored margins swap inner/outer on even pages.
|
|
1055
1120
|
const contentArea = page.contentArea;
|
|
1056
1121
|
// A right-to-left page lays these out in its mirrored flow, whose trim
|
|
@@ -1072,7 +1137,7 @@ function layoutHeadersAndFooters(doc, resourceById, inputs) {
|
|
|
1072
1137
|
// side away from the spine (it swaps with the binding and the page's
|
|
1073
1138
|
// parity, as mirrored margins do).
|
|
1074
1139
|
const sheetArea = flowRectToPage(page, contentArea);
|
|
1075
|
-
const trim =
|
|
1140
|
+
const trim = pageMetrics.physical.trimBox;
|
|
1076
1141
|
const recto = (page.index + pageIndexOffset) % 2 === 0;
|
|
1077
1142
|
const outerRight = recto !== (resolved.page.binding === 'right');
|
|
1078
1143
|
const outer = outerRight
|
|
@@ -1086,7 +1151,7 @@ function layoutHeadersAndFooters(doc, resourceById, inputs) {
|
|
|
1086
1151
|
// A composed page (#855) takes its template's running heads: a slot of
|
|
1087
1152
|
// its own, `false` for none, unset for the section's.
|
|
1088
1153
|
const template = page.composed
|
|
1089
|
-
? resolvePageTemplate({ pageTemplates: resolved.pageTemplates, calloutStyles: resolved.calloutStyles }, page.composed.template, { parity: recto ? 'recto' : 'verso' })
|
|
1154
|
+
? resolvePageTemplate({ pageTemplates: resolved.pageTemplates, calloutStyles: resolved.calloutStyles }, page.composed.template, { parity: recto ? 'recto' : 'verso', ...(page.composed.modules ? { modules: page.composed.modules } : {}) })
|
|
1090
1155
|
: undefined;
|
|
1091
1156
|
const pageAttrs = page.composed && Object.keys(page.composed.attrs).length > 0 ? page.composed.attrs : undefined;
|
|
1092
1157
|
const templateSlot = (own, kind, inherited) => own === false ? { elements: [] } : own ? resolveDesignSlot(own, kind) : inherited;
|
|
@@ -1133,7 +1198,7 @@ function layoutHeadersAndFooters(doc, resourceById, inputs) {
|
|
|
1133
1198
|
partNumberByPageIndex,
|
|
1134
1199
|
partPaletteByPageIndex,
|
|
1135
1200
|
};
|
|
1136
|
-
page.header = asFurniture(withMeasureWritingMode('horizontal-tb', () => layoutSlotToVdt(headerSlot, headerContainerBbox(sheetArea,
|
|
1201
|
+
page.header = asFurniture(withMeasureWritingMode('horizontal-tb', () => layoutSlotToVdt(headerSlot, headerContainerBbox(sheetArea, pageMetrics.physical.trimBox), page.index + pageIndexOffset, placeholders, dpi, { ...headExtras, slot: 'header', ...withPath(slotPath('header')) })));
|
|
1137
1202
|
}
|
|
1138
1203
|
// Back of a part divider: a blank page right after a part page takes the
|
|
1139
1204
|
// part's verso design (the model book tints the whole leaf). The part
|
|
@@ -1430,7 +1495,7 @@ function layoutHeadersAndFooters(doc, resourceById, inputs) {
|
|
|
1430
1495
|
partNumberByPageIndex,
|
|
1431
1496
|
partPaletteByPageIndex,
|
|
1432
1497
|
};
|
|
1433
|
-
page.footer = asFurniture(withMeasureWritingMode('horizontal-tb', () => layoutSlotToVdt(footerSlot, footerContainerBbox(sheetArea,
|
|
1498
|
+
page.footer = asFurniture(withMeasureWritingMode('horizontal-tb', () => layoutSlotToVdt(footerSlot, footerContainerBbox(sheetArea, pageMetrics.physical.trimBox), page.index + pageIndexOffset, placeholders, dpi, { ...headExtras, slot: 'footer', ...withPath(slotPath('footer')) })));
|
|
1434
1499
|
}
|
|
1435
1500
|
// The template's decoration, laid with the frames' final boxes (its
|
|
1436
1501
|
// elements may anchor to `'#frame'`), on the sheet like the running
|
|
@@ -1442,8 +1507,8 @@ function layoutHeadersAndFooters(doc, resourceById, inputs) {
|
|
|
1442
1507
|
const ruled = (p) => (p?.composed?.frames ?? []).some((f) => f.rules && !f.facingBlocks);
|
|
1443
1508
|
if (page.composed && template && (template.decoration.elements.length > 0 || ruled(page) || ruled(facing)) && !(facing && spreadDecorated.has(page.index))) {
|
|
1444
1509
|
const pair = facing?.composed?.spread && page.composed.spread ? { left: page.composed.spread === 'left' ? page : facing, right: page.composed.spread === 'left' ? facing : page } : undefined;
|
|
1445
|
-
const trimBox =
|
|
1446
|
-
const bleedBox =
|
|
1510
|
+
const trimBox = pageMetrics.physical.trimBox;
|
|
1511
|
+
const bleedBox = pageMetrics.physical.bleedBox;
|
|
1447
1512
|
const shift = trimBox.width;
|
|
1448
1513
|
/** A frame's box on the sheet (of the spread, the right page's set
|
|
1449
1514
|
* `shift` along). */
|
|
@@ -1454,6 +1519,10 @@ function layoutHeadersAndFooters(doc, resourceById, inputs) {
|
|
|
1454
1519
|
/** Frames that take no room on the page (#912): what anchors to
|
|
1455
1520
|
* them is not drawn. */
|
|
1456
1521
|
const collapsed = new Set();
|
|
1522
|
+
/** Frames a connector does not reach (#1056): collapsed, or empty and
|
|
1523
|
+
* optional. */
|
|
1524
|
+
const absent = new Set();
|
|
1525
|
+
const optional = new Set(template.frames.filter((f) => f.optional).map((f) => f.name));
|
|
1457
1526
|
/** Empty frames' ruled lines (#914), on the sheet. */
|
|
1458
1527
|
const rules = [];
|
|
1459
1528
|
/** The counter of the first numbered heading each frame holds
|
|
@@ -1461,12 +1530,17 @@ function layoutHeadersAndFooters(doc, resourceById, inputs) {
|
|
|
1461
1530
|
const headingNumberByFrame = {};
|
|
1462
1531
|
let headingNumber;
|
|
1463
1532
|
const floatById = new Map();
|
|
1533
|
+
/** The page and the blocks of each frame, for a connector's end at
|
|
1534
|
+
* an anchor of the picture it holds (#1057). */
|
|
1535
|
+
const frameBlocks = new Map();
|
|
1464
1536
|
const nameFrames = (p, dx) => {
|
|
1465
1537
|
for (const b of p.floats ?? [])
|
|
1466
1538
|
floatById.set(b.id, b);
|
|
1467
1539
|
for (const f of p.composed?.frames ?? []) {
|
|
1468
1540
|
if (f.collapsed)
|
|
1469
1541
|
collapsed.add(f.name);
|
|
1542
|
+
if (f.collapsed || (optional.has(f.repeat?.frame ?? f.name) && f.sourceStart === undefined && f.continuedFrom === undefined))
|
|
1543
|
+
absent.add(f.name);
|
|
1470
1544
|
if (!f.facingBlocks) {
|
|
1471
1545
|
for (const id of f.blockIds) {
|
|
1472
1546
|
const n = floatById.get(id)?.headingNumber;
|
|
@@ -1485,12 +1559,23 @@ function layoutHeadersAndFooters(doc, resourceById, inputs) {
|
|
|
1485
1559
|
const d = flowRectToPage(p, framePageRect({ rect: f.declaredRect ?? f.rect, writingMode: f.writingMode }));
|
|
1486
1560
|
named[f.name] = { ...r, x: r.x + dx };
|
|
1487
1561
|
declared[f.name] = { ...d, x: d.x + dx };
|
|
1562
|
+
frameBlocks.set(f.name, { page: p, dx, blocks: f.blockIds.map((id) => floatById.get(id)).filter((b) => b !== undefined) });
|
|
1488
1563
|
for (const rule of f.rules ?? []) {
|
|
1489
1564
|
// A vertical page's flow turns a rule across its lines.
|
|
1490
1565
|
const b = flowRectToPage(p, rule.bbox);
|
|
1491
1566
|
rules.push({ ...rule, bbox: { ...b, x: b.x + dx }, direction: b.height > b.width ? 'vertical' : 'horizontal' });
|
|
1492
1567
|
}
|
|
1493
1568
|
}
|
|
1569
|
+
// A module's box (#1062): what its decoration anchored to its
|
|
1570
|
+
// `'container'` reads (`#<name>`). A module laid elsewhere has none
|
|
1571
|
+
// here, and its decoration is not drawn.
|
|
1572
|
+
for (const m of p.composed?.modules ?? []) {
|
|
1573
|
+
if (!m.rect || named[m.name] !== undefined)
|
|
1574
|
+
continue;
|
|
1575
|
+
const r = flowRectToPage(p, m.rect);
|
|
1576
|
+
named[m.name] = { ...r, x: r.x + dx };
|
|
1577
|
+
declared[m.name] = { ...r, x: r.x + dx };
|
|
1578
|
+
}
|
|
1494
1579
|
};
|
|
1495
1580
|
let container;
|
|
1496
1581
|
let slotFrames = physicalFrames;
|
|
@@ -1534,12 +1619,76 @@ function layoutHeadersAndFooters(doc, resourceById, inputs) {
|
|
|
1534
1619
|
...(headingNumber !== undefined ? { headingNumber } : {}),
|
|
1535
1620
|
...(Object.keys(headingNumberByFrame).length > 0 ? { headingNumberByFrame } : {}),
|
|
1536
1621
|
};
|
|
1622
|
+
// An element anchored to an instance of a repeated frame (#1061) the
|
|
1623
|
+
// page does not have (`#card[5]` on a page of three cards) is not
|
|
1624
|
+
// drawn, as one anchored to a frame that takes no room. So is one
|
|
1625
|
+
// anchored to a module (#1062), or a frame of it, that went on whole.
|
|
1626
|
+
const ofModule = new Set((template.modules ?? []).flatMap((m) => [m.name, ...m.frames, ...m.groups]));
|
|
1627
|
+
for (const el of template.decoration.elements) {
|
|
1628
|
+
const to = el.placement?.anchor?.to;
|
|
1629
|
+
const t = typeof to === 'string' && to.startsWith('#') ? to.slice(1) : undefined;
|
|
1630
|
+
if (t !== undefined && named[t] === undefined && (repeatInstance(t) !== undefined || ofModule.has(t)))
|
|
1631
|
+
collapsed.add(t);
|
|
1632
|
+
}
|
|
1537
1633
|
const slot = resolveDesignSlot(template.decoration, 'header');
|
|
1634
|
+
const connectorDropped = [];
|
|
1635
|
+
const connectorAnchorUnknown = [];
|
|
1636
|
+
// A connector's end at an anchor of the picture its frame holds
|
|
1637
|
+
// (#1057): the first figure of the frame whose resource has it.
|
|
1638
|
+
const anchorPoint = (frame, anchor) => {
|
|
1639
|
+
const held = frameBlocks.get(frame);
|
|
1640
|
+
let first;
|
|
1641
|
+
for (const b of held?.blocks ?? []) {
|
|
1642
|
+
const rb = b.resourceBlock;
|
|
1643
|
+
if (!rb || (rb.kind !== 'bitmap' && rb.kind !== 'svg'))
|
|
1644
|
+
continue;
|
|
1645
|
+
first ??= b;
|
|
1646
|
+
const at = figureAnchorPointOnPage(held.page, b, anchor);
|
|
1647
|
+
if (!at)
|
|
1648
|
+
continue;
|
|
1649
|
+
const p = { x: at.x + held.dx, y: at.y };
|
|
1650
|
+
// A point the frame cuts off (its picture runs past the frame's
|
|
1651
|
+
// foot) is not shown on the page.
|
|
1652
|
+
const box = named[frame];
|
|
1653
|
+
if (box && (p.x < box.x - 0.5 || p.x > box.x + box.width + 0.5 || p.y < box.y - 0.5 || p.y > box.y + box.height + 0.5))
|
|
1654
|
+
return { hidden: true };
|
|
1655
|
+
return p;
|
|
1656
|
+
}
|
|
1657
|
+
const res = first?.resourceBlock?.resource;
|
|
1658
|
+
return res ? { resourceId: res.id, known: (res.anchors ?? []).map((a) => a.id) } : { known: [] };
|
|
1659
|
+
};
|
|
1538
1660
|
const laidDecoration = template.decoration.elements.length === 0 ? undefined : withMeasureWritingMode('horizontal-tb', () => layoutSlotToVdt(collapsed.size > 0 ? withoutAnchoredTo(slot, collapsed) : slot, container, page.index + pageIndexOffset, placeholders, dpi, {
|
|
1539
|
-
...sheetExtras, frames: { ...slotFrames, named, declared }, attrs: page.composed.attrs, attrSources,
|
|
1661
|
+
...sheetExtras, frames: { ...slotFrames, named, declared, ...(absent.size > 0 ? { absent } : {}), anchorPoint }, attrs: page.composed.attrs, attrSources, connectorDropped, connectorAnchorUnknown,
|
|
1540
1662
|
// Each element's pointer, from the template that sets it (#857).
|
|
1541
1663
|
elementPaths: new Map(resolveDesignSlot(template.decoration, 'header').elements.map((el, i) => [el.id, template.decorationPaths[i]])),
|
|
1542
1664
|
}));
|
|
1665
|
+
// The ends connectors left out, in the reflow log of the page laid
|
|
1666
|
+
// (of a spread, its first page); a pass that lays the decoration
|
|
1667
|
+
// again replaces them.
|
|
1668
|
+
for (const p of pair ? [pair.left, pair.right] : [page]) {
|
|
1669
|
+
if (p.composed?.log.some((e) => e.kind === 'connectorDropped'))
|
|
1670
|
+
p.composed.log = p.composed.log.filter((e) => e.kind !== 'connectorDropped');
|
|
1671
|
+
}
|
|
1672
|
+
for (const d of connectorDropped)
|
|
1673
|
+
page.composed.log.push({ frame: d.targetId, kind: 'connectorDropped', cause: d.elementId });
|
|
1674
|
+
// Ends at an anchor the frame's picture lacks (#1057): a content
|
|
1675
|
+
// warning on the page laid, once per pass.
|
|
1676
|
+
const unknown = connectorAnchorWarnings.get(doc) ?? [];
|
|
1677
|
+
const kept = unknown.filter((w) => !(pair ? [pair.left.index, pair.right.index] : [page.index]).includes(w.pageIndex ?? -1));
|
|
1678
|
+
for (const d of connectorAnchorUnknown) {
|
|
1679
|
+
kept.push({
|
|
1680
|
+
kind: 'labelAnchorUnknown',
|
|
1681
|
+
resourceId: d.resourceId ?? '',
|
|
1682
|
+
anchor: d.anchor,
|
|
1683
|
+
known: d.known,
|
|
1684
|
+
connector: d.elementId,
|
|
1685
|
+
frame: d.targetId,
|
|
1686
|
+
...(doc.config?.locale ? { locale: doc.config.locale } : {}),
|
|
1687
|
+
pageIndex: page.index,
|
|
1688
|
+
});
|
|
1689
|
+
}
|
|
1690
|
+
if (kept.length > 0 || unknown.length > 0)
|
|
1691
|
+
connectorAnchorWarnings.set(doc, kept);
|
|
1543
1692
|
const decoration = rules.length === 0 ? laidDecoration
|
|
1544
1693
|
: laidDecoration ? { ...laidDecoration, blocks: [...laidDecoration.blocks, ...rules] } : { bbox: { ...container }, blocks: rules };
|
|
1545
1694
|
if (decoration && pair) {
|
|
@@ -1560,6 +1709,9 @@ function layoutHeadersAndFooters(doc, resourceById, inputs) {
|
|
|
1560
1709
|
function withoutAnchoredTo(slot, frames) {
|
|
1561
1710
|
const dropped = new Set();
|
|
1562
1711
|
const target = (el) => {
|
|
1712
|
+
// A connector (#1056) drops its own ends on frames the page lacks.
|
|
1713
|
+
if (el.kind === 'connector')
|
|
1714
|
+
return undefined;
|
|
1563
1715
|
const to = el.placement.anchor.to;
|
|
1564
1716
|
return to.startsWith('#') ? to.slice(1) : undefined;
|
|
1565
1717
|
};
|