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
package/dist/design/layout.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { flowTextWidth, getMeasureWritingMode, lineBaselineOffset, withMeasureWritingMode } from '../measure/vertical';
|
|
2
|
-
import { isLogicalEdge, physicalEdge, physicalPlacement } from './logicalEdges';
|
|
2
|
+
import { edgeSide, isLogicalEdge, physicalEdge, physicalPlacement, sideFraction } from './logicalEdges';
|
|
3
3
|
import { bitmapLayoutSize } from '../bitmapResolution';
|
|
4
4
|
import { comicArtCrop } from '../comics/art';
|
|
5
5
|
import { dimensionToPx } from '../units';
|
|
6
|
+
import { borderSidesPx, cornerRadiiPx, isCornerRadii, normalizeBoxStyle, uniformRadius } from './boxShape';
|
|
6
7
|
import { resolveTextDots } from '../textDots';
|
|
7
8
|
import { resolveDesignLineHeight } from '../defaults/headerFooter';
|
|
8
9
|
import { createBoundingBox, pictureTraits } from '../vdt';
|
|
10
|
+
import { mapPath, parseSvgPathCached, pathViewBox } from './svgPath';
|
|
9
11
|
import { buildFontString } from '../measure';
|
|
10
12
|
import { graphemeCount } from '../measure/graphemes';
|
|
11
13
|
import { joiningScriptIn } from '../measure/joining';
|
|
@@ -15,6 +17,8 @@ import { withLineEndHyphen } from '../measure/geminate';
|
|
|
15
17
|
import { BREAKING_SPACE_RUNS_SPLIT_RE, NO_BREAK_SPACES, isBreakingSpaceRun } from '../measure/spaces';
|
|
16
18
|
import { LEADER_MARK, resolveDesignResourceId, resolveDesignText, } from './placeholders';
|
|
17
19
|
import { fitLeader } from '../measure/leader';
|
|
20
|
+
import { layoutConnector } from './connector';
|
|
21
|
+
import { repeatInstance } from '../composed/templates';
|
|
18
22
|
import { hasJoiningScript, joinsWithNext } from '../bidi';
|
|
19
23
|
import { designBaseDirection, directRuns, directedTextWidth, measuresRunsAsPainted, paintedRunWidth } from './bidiText';
|
|
20
24
|
import { composeCjkDesignParagraph, composesDesignAsCjk } from './cjkText';
|
|
@@ -94,13 +98,29 @@ function resolvePadding(padding, dpi, baseFontSizePx) {
|
|
|
94
98
|
function resolveBox(style, dpi, baseFontSizePx) {
|
|
95
99
|
if (!style)
|
|
96
100
|
return undefined;
|
|
97
|
-
|
|
101
|
+
const padding = resolvePadding(style.padding, dpi, baseFontSizePx);
|
|
102
|
+
if (!isCornerRadii(style.borderRadius) && style.borderSides === undefined) {
|
|
103
|
+
return {
|
|
104
|
+
backgroundColor: style.backgroundColor?.hex,
|
|
105
|
+
borderColor: style.borderColor?.hex,
|
|
106
|
+
borderWidthPx: dimPx(style.borderWidth, dpi, baseFontSizePx),
|
|
107
|
+
borderRadiusPx: dimPx(uniformRadius(style.borderRadius), dpi, baseFontSizePx),
|
|
108
|
+
padding,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
// Corners of their own and a border per side (#1059), folded back to
|
|
112
|
+
// the plain fields where they say no more.
|
|
113
|
+
const toPx = (d) => dimPx(d, dpi, baseFontSizePx);
|
|
114
|
+
const whole = { enabled: true, color: style.borderColor, width: style.borderWidth };
|
|
115
|
+
const shape = normalizeBoxStyle({
|
|
98
116
|
backgroundColor: style.backgroundColor?.hex,
|
|
99
117
|
borderColor: style.borderColor?.hex,
|
|
100
118
|
borderWidthPx: dimPx(style.borderWidth, dpi, baseFontSizePx),
|
|
101
|
-
borderRadiusPx:
|
|
102
|
-
|
|
103
|
-
|
|
119
|
+
borderRadiusPx: 0,
|
|
120
|
+
borderRadiiPx: cornerRadiiPx(style.borderRadius, toPx),
|
|
121
|
+
...(style.borderSides !== undefined ? { borderSides: borderSidesPx(whole, style.borderSides, toPx) } : {}),
|
|
122
|
+
});
|
|
123
|
+
return { ...shape, padding };
|
|
104
124
|
}
|
|
105
125
|
function colorHex(c) {
|
|
106
126
|
return c?.hex ?? '#000000';
|
|
@@ -115,10 +135,17 @@ function overrideColor(c, overrides) {
|
|
|
115
135
|
function overrideBoxStyle(style, overrides) {
|
|
116
136
|
if (!style)
|
|
117
137
|
return style;
|
|
138
|
+
const sides = style.borderSides;
|
|
118
139
|
return {
|
|
119
140
|
...style,
|
|
120
141
|
backgroundColor: overrideColor(style.backgroundColor, overrides),
|
|
121
142
|
borderColor: overrideColor(style.borderColor, overrides),
|
|
143
|
+
// Each side's own colour too (#1059).
|
|
144
|
+
...(sides && typeof sides === 'object'
|
|
145
|
+
? {
|
|
146
|
+
borderSides: Object.fromEntries(Object.entries(sides).map(([k, v]) => [k, v && typeof v === 'object' && v.color ? { ...v, color: overrideColor(v.color, overrides) } : v])),
|
|
147
|
+
}
|
|
148
|
+
: {}),
|
|
122
149
|
};
|
|
123
150
|
}
|
|
124
151
|
/** The element with every palette-linked colour (text colour, rule colour,
|
|
@@ -140,6 +167,14 @@ export function applyPaletteOverrides(el, overrides) {
|
|
|
140
167
|
return { ...el, color: overrideColor(el.color, overrides) ?? el.color };
|
|
141
168
|
case 'box':
|
|
142
169
|
return { ...el, style: overrideBoxStyle(el.style, overrides) ?? el.style };
|
|
170
|
+
case 'path':
|
|
171
|
+
return {
|
|
172
|
+
...el,
|
|
173
|
+
...(el.fill ? { fill: overrideColor(el.fill, overrides) } : {}),
|
|
174
|
+
...(el.stroke ? { stroke: overrideColor(el.stroke, overrides) } : {}),
|
|
175
|
+
};
|
|
176
|
+
case 'connector':
|
|
177
|
+
return { ...el, color: overrideColor(el.color, overrides) ?? el.color };
|
|
143
178
|
default:
|
|
144
179
|
return el;
|
|
145
180
|
}
|
|
@@ -736,6 +771,25 @@ function edgeYFromPin(anchorY, pinY, height) {
|
|
|
736
771
|
// ---------------------------------------------------------------------------
|
|
737
772
|
// Main engine
|
|
738
773
|
// ---------------------------------------------------------------------------
|
|
774
|
+
/**
|
|
775
|
+
* `anchor` (the point of `edge` on `ref`) moved along the side the edge
|
|
776
|
+
* stands on to `at` (#1055): from the side's start — the left of a top or
|
|
777
|
+
* bottom side, its right when the page starts on the right (`startRight`),
|
|
778
|
+
* the top of a left or right side — a fraction of its length. Along the
|
|
779
|
+
* side the element is centred on that point (a rule's thickness on a
|
|
780
|
+
* frame's middle); across it the edge's pin stays (`below` hangs under the
|
|
781
|
+
* side, `bottom` stands inside on it). `center`, and an `at` that is no
|
|
782
|
+
* side position, leave the anchor as it is.
|
|
783
|
+
*/
|
|
784
|
+
function alongSide(anchor, edge, at, ref, startRight) {
|
|
785
|
+
const side = edgeSide(edge);
|
|
786
|
+
const f = sideFraction(at);
|
|
787
|
+
if (!side || f === undefined)
|
|
788
|
+
return anchor;
|
|
789
|
+
if (side === 'left' || side === 'right')
|
|
790
|
+
return { ...anchor, anchorY: ref.y + f * ref.height, pinY: 'middle' };
|
|
791
|
+
return { ...anchor, anchorX: ref.x + (startRight ? 1 - f : f) * ref.width, pinX: 'middle' };
|
|
792
|
+
}
|
|
739
793
|
/** A size written as `{ to, edge }` (#928). */
|
|
740
794
|
function isSizeTo(size) {
|
|
741
795
|
return typeof size === 'object' && size !== null && 'to' in size && 'edge' in size;
|
|
@@ -752,11 +806,12 @@ function withSizesTo(el, pin, refOf) {
|
|
|
752
806
|
return el;
|
|
753
807
|
const along = (s, axis) => {
|
|
754
808
|
const ref = refOf(s.to);
|
|
755
|
-
|
|
756
|
-
const
|
|
757
|
-
|
|
809
|
+
// `center` (#1055): the box's middle on the axis being sized.
|
|
810
|
+
const edges = axis === 'x' ? { left: 0, center: 0.5, right: 1 } : { top: 0, center: 0.5, bottom: 1 };
|
|
811
|
+
const side = Object.prototype.hasOwnProperty.call(edges, s.edge) ? edges[s.edge] : undefined;
|
|
812
|
+
if (!ref || side === undefined)
|
|
758
813
|
return 'fill';
|
|
759
|
-
const at = axis === 'x' ?
|
|
814
|
+
const at = axis === 'x' ? ref.x + side * ref.width : ref.y + side * ref.height;
|
|
760
815
|
const from = axis === 'x' ? pin.anchorX : pin.anchorY;
|
|
761
816
|
const p = axis === 'x' ? pin.pinX : pin.pinY;
|
|
762
817
|
const room = p === 'start' ? at - from : p === 'end' ? from - at : 2 * Math.abs(at - from);
|
|
@@ -771,6 +826,81 @@ function withSizesTo(el, pin, refOf) {
|
|
|
771
826
|
out.maxWidth = along(size.maxWidth, 'x');
|
|
772
827
|
return { ...el, placement: { ...el.placement, size: out } };
|
|
773
828
|
}
|
|
829
|
+
/**
|
|
830
|
+
* A connector (#1056) between the boxes it names: another element of the
|
|
831
|
+
* slot, else a frame or group of the page (`frames.named`, or the declared
|
|
832
|
+
* boxes with `pin`). `#card[*]` in `to` is every instance of `card` the
|
|
833
|
+
* page has, in item order. An end on a box the page does not show (absent
|
|
834
|
+
* from `named`, or in `frames.absent`) is dropped with a
|
|
835
|
+
* `connectorDropped` issue; with no `from` or no `to` left nothing is
|
|
836
|
+
* drawn.
|
|
837
|
+
*/
|
|
838
|
+
function layoutConnectorElement(el, resolvedGeo, frames, issues, dpi, startRight) {
|
|
839
|
+
const boxes = (el.pin ? frames.declared : undefined) ?? frames.named ?? {};
|
|
840
|
+
const boxOf = (name) => {
|
|
841
|
+
const dep = resolvedGeo.get(name);
|
|
842
|
+
if (dep)
|
|
843
|
+
return { x: dep.x, y: dep.y, width: dep.width, height: dep.height };
|
|
844
|
+
if (frames.absent?.has(name))
|
|
845
|
+
return undefined;
|
|
846
|
+
return Object.prototype.hasOwnProperty.call(boxes, name) ? boxes[name] : undefined;
|
|
847
|
+
};
|
|
848
|
+
const endOf = (end) => {
|
|
849
|
+
const to = end?.to;
|
|
850
|
+
if (typeof to !== 'string' || !to.startsWith('#'))
|
|
851
|
+
return null;
|
|
852
|
+
const name = to.slice(1);
|
|
853
|
+
const box = boxOf(name);
|
|
854
|
+
if (!box) {
|
|
855
|
+
issues.push({ kind: 'connectorDropped', elementId: el.id, targetId: name });
|
|
856
|
+
return undefined;
|
|
857
|
+
}
|
|
858
|
+
const anchor = end.anchor;
|
|
859
|
+
if (typeof anchor === 'string' && anchor !== '' && !resolvedGeo.has(name)) {
|
|
860
|
+
// An anchor of the frame's picture (#1057): the end is that point, a
|
|
861
|
+
// box of no size the line arrives at.
|
|
862
|
+
const at = frames.anchorPoint?.(name, anchor) ?? { known: [] };
|
|
863
|
+
if ('hidden' in at) {
|
|
864
|
+
// The point is cut off by its frame (a picture past the frame's
|
|
865
|
+
// foot): nothing to point at on this page.
|
|
866
|
+
issues.push({ kind: 'connectorDropped', elementId: el.id, targetId: name });
|
|
867
|
+
return undefined;
|
|
868
|
+
}
|
|
869
|
+
if (!('x' in at)) {
|
|
870
|
+
issues.push({ kind: 'connectorAnchorUnknown', elementId: el.id, targetId: name, anchor, ...(at.resourceId !== undefined ? { resourceId: at.resourceId } : {}), known: at.known });
|
|
871
|
+
return undefined;
|
|
872
|
+
}
|
|
873
|
+
return { name, box: { x: at.x, y: at.y, width: 0, height: 0 }, end: end };
|
|
874
|
+
}
|
|
875
|
+
return { name, box, end: end };
|
|
876
|
+
};
|
|
877
|
+
const from = endOf(el.from);
|
|
878
|
+
if (!from)
|
|
879
|
+
return undefined;
|
|
880
|
+
const written = Array.isArray(el.to) ? el.to : el.to ? [el.to] : [];
|
|
881
|
+
const ends = [];
|
|
882
|
+
for (const end of written) {
|
|
883
|
+
const to = end?.to;
|
|
884
|
+
if (typeof to === 'string' && to.endsWith('[*]')) {
|
|
885
|
+
// Every instance of the frame the page has (#1061), in item order.
|
|
886
|
+
const frame = to.slice(1, -3);
|
|
887
|
+
const items = Object.keys(boxes)
|
|
888
|
+
.map((n) => ({ n, at: repeatInstance(n) }))
|
|
889
|
+
.filter((x) => x.at?.frame === frame)
|
|
890
|
+
.sort((a, b) => a.at.item - b.at.item);
|
|
891
|
+
for (const { n } of items) {
|
|
892
|
+
const e = endOf({ ...end, to: `#${n}` });
|
|
893
|
+
if (e)
|
|
894
|
+
ends.push(e);
|
|
895
|
+
}
|
|
896
|
+
continue;
|
|
897
|
+
}
|
|
898
|
+
const e = endOf(end);
|
|
899
|
+
if (e)
|
|
900
|
+
ends.push(e);
|
|
901
|
+
}
|
|
902
|
+
return layoutConnector(el, from, ends, { dpi, startRight });
|
|
903
|
+
}
|
|
774
904
|
/** Layout one design slot against its container. */
|
|
775
905
|
export function layoutDesignSlot(slot, context, pageIndex) {
|
|
776
906
|
const issues = [];
|
|
@@ -787,10 +917,14 @@ export function layoutDesignSlot(slot, context, pageIndex) {
|
|
|
787
917
|
.filter((el) => pageMatchesParity(pageIndex, el.parity) && pageMatchesRole(el.pages, context.pageRole))
|
|
788
918
|
.map((el) => (overrides && Object.keys(overrides).length > 0 ? applyPaletteOverrides(el, overrides) : el))
|
|
789
919
|
// Start and end edges read as the physical ones of this page (#936).
|
|
790
|
-
.map((el) => (isLogicalEdge(el.placement.anchor.edge) ? { ...el, placement: physicalPlacement(el.placement, context.startRight === true) } : el));
|
|
920
|
+
.map((el) => (el.kind !== 'connector' && isLogicalEdge(el.placement.anchor.edge) ? { ...el, placement: physicalPlacement(el.placement, context.startRight === true) } : el));
|
|
921
|
+
// Connectors (#1056) are laid after every placed element, between the
|
|
922
|
+
// boxes they join; only where there are frames to join (a composed
|
|
923
|
+
// page's decoration).
|
|
924
|
+
const placed = candidates.filter((el) => el.kind !== 'connector');
|
|
791
925
|
// Topologically sort (dependencies first) to resolve geometry; paint
|
|
792
926
|
// order is still the array order (first = back), restored below.
|
|
793
|
-
const ordered = topoSort(
|
|
927
|
+
const ordered = topoSort(placed, issues, context.frames?.named);
|
|
794
928
|
// Precompute: resolved text contents (placeholder-expanded), with the
|
|
795
929
|
// `\n` escape of the template and of attribute values turned into a
|
|
796
930
|
// newline before any case transform (which would make it `\N`).
|
|
@@ -847,9 +981,13 @@ export function layoutDesignSlot(slot, context, pageIndex) {
|
|
|
847
981
|
fillRef = refGeo;
|
|
848
982
|
}
|
|
849
983
|
}
|
|
850
|
-
const
|
|
984
|
+
const onEdge = useElementEdge
|
|
851
985
|
? resolveElementAnchor(given.placement.anchor.edge, refGeo)
|
|
852
986
|
: resolveContainerAnchor(given.placement.anchor.edge, refGeo);
|
|
987
|
+
// A point along a side of another element, a frame or a group (#1055).
|
|
988
|
+
const anchor = target && !frame && refGeo !== containerRef && given.placement.anchor.at !== undefined
|
|
989
|
+
? alongSide(onEdge, given.placement.anchor.edge, given.placement.anchor.at, refGeo, context.startRight === true)
|
|
990
|
+
: onEdge;
|
|
853
991
|
// A text element's offset may be written in ems of its own size (a
|
|
854
992
|
// running head four characters below the type area).
|
|
855
993
|
const emPx = given.kind === 'text' ? dimPx(given.fontSize, context.dpi) : undefined;
|
|
@@ -903,6 +1041,14 @@ export function layoutDesignSlot(slot, context, pageIndex) {
|
|
|
903
1041
|
resolvedGeo.set(el.id, prim);
|
|
904
1042
|
primsByElement.set(given, [prim]);
|
|
905
1043
|
}
|
|
1044
|
+
else if (el.kind === 'path') {
|
|
1045
|
+
// Data that cannot be read draws nothing; the box still stands for
|
|
1046
|
+
// the elements anchored to it.
|
|
1047
|
+
const prim = layoutPathElement(el, { anchorX, anchorY, pinX: anchor.pinX, pinY: anchor.pinY }, fillRef, context.dpi);
|
|
1048
|
+
resolvedGeo.set(el.id, prim);
|
|
1049
|
+
if (prim.subpaths.length > 0)
|
|
1050
|
+
primsByElement.set(given, [prim]);
|
|
1051
|
+
}
|
|
906
1052
|
else if (el.kind === 'image') {
|
|
907
1053
|
const prim = layoutImageElement(el, {
|
|
908
1054
|
anchorX,
|
|
@@ -926,6 +1072,15 @@ export function layoutDesignSlot(slot, context, pageIndex) {
|
|
|
926
1072
|
primsByElement.set(given, [prim]);
|
|
927
1073
|
}
|
|
928
1074
|
}
|
|
1075
|
+
if (context.frames?.named) {
|
|
1076
|
+
for (const el of candidates) {
|
|
1077
|
+
if (el.kind !== 'connector')
|
|
1078
|
+
continue;
|
|
1079
|
+
const prim = layoutConnectorElement(el, resolvedGeo, context.frames, issues, context.dpi, context.startRight === true);
|
|
1080
|
+
if (prim)
|
|
1081
|
+
primsByElement.set(el, [prim]);
|
|
1082
|
+
}
|
|
1083
|
+
}
|
|
929
1084
|
const primitives = [];
|
|
930
1085
|
const elementIds = [];
|
|
931
1086
|
for (const el of candidates) {
|
|
@@ -1788,6 +1943,53 @@ function altTextOf(el, resource) {
|
|
|
1788
1943
|
const altText = designImageAltText(resource);
|
|
1789
1944
|
return altText ? { altText } : {};
|
|
1790
1945
|
}
|
|
1946
|
+
/** The black of a path that sets neither a fill nor an outline (an SVG
|
|
1947
|
+
* path's default fill). */
|
|
1948
|
+
const DEFAULT_PATH_FILL = '#000000';
|
|
1949
|
+
/** An outline's width when the element gives none: 0.5 pt, a rule's. */
|
|
1950
|
+
const DEFAULT_PATH_STROKE_WIDTH = { value: 0.5, unit: 'pt' };
|
|
1951
|
+
/** A path element (#1060): its box sized and pinned as a box's, its
|
|
1952
|
+
* `viewBox` stretched to the box (`'none'`) or fitted inside it, centred
|
|
1953
|
+
* (`'meet'`), the outline in page px. Path data that cannot be read, or a
|
|
1954
|
+
* `viewBox` with no area, gives no outline. */
|
|
1955
|
+
function layoutPathElement(el, pin, container, dpi) {
|
|
1956
|
+
const widthSize = resolveFixedSize(el.placement.size?.width, dpi);
|
|
1957
|
+
const heightSize = resolveFixedSize(el.placement.size?.height, dpi);
|
|
1958
|
+
const width = typeof widthSize === 'number' ? widthSize : Math.max(0, fillToContainerEdge(pin.anchorX, pin.pinX, container));
|
|
1959
|
+
const height = typeof heightSize === 'number' ? heightSize : Math.max(0, fillToContainerEdgeY(pin.anchorY, pin.pinY, container));
|
|
1960
|
+
const x = edgeXFromPin(pin.anchorX, pin.pinX, width);
|
|
1961
|
+
const y = edgeYFromPin(pin.anchorY, pin.pinY, height);
|
|
1962
|
+
const prim = { kind: 'path', id: el.id, x, y, width, height, subpaths: [] };
|
|
1963
|
+
const vb = pathViewBox(el.viewBox);
|
|
1964
|
+
const parsed = typeof el.d === 'string' ? parseSvgPathCached(el.d) : undefined;
|
|
1965
|
+
if (!vb || !parsed?.ok)
|
|
1966
|
+
return prim;
|
|
1967
|
+
let sx = width / vb[0];
|
|
1968
|
+
let sy = height / vb[1];
|
|
1969
|
+
let ox = x;
|
|
1970
|
+
let oy = y;
|
|
1971
|
+
if (el.preserveAspectRatio === 'meet') {
|
|
1972
|
+
const k = Math.min(sx, sy);
|
|
1973
|
+
ox += (width - vb[0] * k) / 2;
|
|
1974
|
+
oy += (height - vb[1] * k) / 2;
|
|
1975
|
+
sx = k;
|
|
1976
|
+
sy = k;
|
|
1977
|
+
}
|
|
1978
|
+
prim.subpaths = mapPath(parsed.subpaths, ox, oy, sx, sy);
|
|
1979
|
+
const fill = el.fill?.hex ?? (el.stroke ? undefined : DEFAULT_PATH_FILL);
|
|
1980
|
+
if (fill)
|
|
1981
|
+
prim.fill = fill;
|
|
1982
|
+
if (el.stroke?.hex) {
|
|
1983
|
+
const widthPx = dimPx(el.width ?? DEFAULT_PATH_STROKE_WIDTH, dpi);
|
|
1984
|
+
const dash = (Array.isArray(el.dash) ? el.dash : []).map((d) => Math.max(0, dimPx(d, dpi)));
|
|
1985
|
+
prim.stroke = {
|
|
1986
|
+
color: el.stroke.hex,
|
|
1987
|
+
widthPx: Math.max(0, widthPx),
|
|
1988
|
+
...(dash.length > 0 && dash.some((v) => v > 0) ? { dash } : {}),
|
|
1989
|
+
};
|
|
1990
|
+
}
|
|
1991
|
+
return prim;
|
|
1992
|
+
}
|
|
1791
1993
|
function layoutBoxElement(el, pin, container, dpi) {
|
|
1792
1994
|
const widthSize = resolveFixedSize(el.placement.size?.width, dpi);
|
|
1793
1995
|
const heightSize = resolveFixedSize(el.placement.size?.height, dpi);
|