postext 1.8.5 → 1.9.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/__bench__/cjkChapter.bench.test.d.ts +2 -0
- package/dist/__bench__/cjkChapter.bench.test.d.ts.map +1 -0
- package/dist/__bench__/cjkChapter.bench.test.js +71 -0
- package/dist/__bench__/cjkChapter.bench.test.js.map +1 -0
- package/dist/__tests__/bundle.test.js +16 -0
- package/dist/__tests__/bundle.test.js.map +1 -1
- package/dist/__tests__/canvasDirection.test.d.ts +2 -0
- package/dist/__tests__/canvasDirection.test.d.ts.map +1 -0
- package/dist/__tests__/canvasDirection.test.js +45 -0
- package/dist/__tests__/canvasDirection.test.js.map +1 -0
- package/dist/__tests__/chineseLocale.test.d.ts +2 -0
- package/dist/__tests__/chineseLocale.test.d.ts.map +1 -0
- package/dist/__tests__/chineseLocale.test.js +253 -0
- package/dist/__tests__/chineseLocale.test.js.map +1 -0
- package/dist/__tests__/chineseNumbering.test.d.ts +2 -0
- package/dist/__tests__/chineseNumbering.test.d.ts.map +1 -0
- package/dist/__tests__/chineseNumbering.test.js +376 -0
- package/dist/__tests__/chineseNumbering.test.js.map +1 -0
- package/dist/__tests__/cjk/annotations.test.d.ts +2 -0
- package/dist/__tests__/cjk/annotations.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/annotations.test.js +483 -0
- package/dist/__tests__/cjk/annotations.test.js.map +1 -0
- package/dist/__tests__/cjk/annotationsRender.test.d.ts +2 -0
- package/dist/__tests__/cjk/annotationsRender.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/annotationsRender.test.js +263 -0
- package/dist/__tests__/cjk/annotationsRender.test.js.map +1 -0
- package/dist/__tests__/cjk/composer.test.d.ts +2 -0
- package/dist/__tests__/cjk/composer.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/composer.test.js +237 -0
- package/dist/__tests__/cjk/composer.test.js.map +1 -0
- package/dist/__tests__/cjk/composerEdges.test.d.ts +2 -0
- package/dist/__tests__/cjk/composerEdges.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/composerEdges.test.js +352 -0
- package/dist/__tests__/cjk/composerEdges.test.js.map +1 -0
- package/dist/__tests__/cjk/dashRule.test.d.ts +2 -0
- package/dist/__tests__/cjk/dashRule.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/dashRule.test.js +261 -0
- package/dist/__tests__/cjk/dashRule.test.js.map +1 -0
- package/dist/__tests__/cjk/fuzz.test.d.ts +2 -0
- package/dist/__tests__/cjk/fuzz.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/fuzz.test.js +102 -0
- package/dist/__tests__/cjk/fuzz.test.js.map +1 -0
- package/dist/__tests__/cjk/grid.test.d.ts +2 -0
- package/dist/__tests__/cjk/grid.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/grid.test.js +261 -0
- package/dist/__tests__/cjk/grid.test.js.map +1 -0
- package/dist/__tests__/cjk/justifyRender.test.d.ts +2 -0
- package/dist/__tests__/cjk/justifyRender.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/justifyRender.test.js +139 -0
- package/dist/__tests__/cjk/justifyRender.test.js.map +1 -0
- package/dist/__tests__/cjk/latinFastPath.test.d.ts +2 -0
- package/dist/__tests__/cjk/latinFastPath.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/latinFastPath.test.js +208 -0
- package/dist/__tests__/cjk/latinFastPath.test.js.map +1 -0
- package/dist/__tests__/cjk/markCutsLatin.test.d.ts +2 -0
- package/dist/__tests__/cjk/markCutsLatin.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/markCutsLatin.test.js +69 -0
- package/dist/__tests__/cjk/markCutsLatin.test.js.map +1 -0
- package/dist/__tests__/cjk/markRuns.test.d.ts +2 -0
- package/dist/__tests__/cjk/markRuns.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/markRuns.test.js +347 -0
- package/dist/__tests__/cjk/markRuns.test.js.map +1 -0
- package/dist/__tests__/cjk/punctuation.test.d.ts +2 -0
- package/dist/__tests__/cjk/punctuation.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/punctuation.test.js +440 -0
- package/dist/__tests__/cjk/punctuation.test.js.map +1 -0
- package/dist/__tests__/cjk/punctuationRender.test.d.ts +2 -0
- package/dist/__tests__/cjk/punctuationRender.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/punctuationRender.test.js +135 -0
- package/dist/__tests__/cjk/punctuationRender.test.js.map +1 -0
- package/dist/__tests__/cjk/rubyDescenders.test.d.ts +2 -0
- package/dist/__tests__/cjk/rubyDescenders.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/rubyDescenders.test.js +77 -0
- package/dist/__tests__/cjk/rubyDescenders.test.js.map +1 -0
- package/dist/__tests__/cjk/runt.test.d.ts +2 -0
- package/dist/__tests__/cjk/runt.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/runt.test.js +103 -0
- package/dist/__tests__/cjk/runt.test.js.map +1 -0
- package/dist/__tests__/cjk/sharedMarks.test.d.ts +2 -0
- package/dist/__tests__/cjk/sharedMarks.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/sharedMarks.test.js +347 -0
- package/dist/__tests__/cjk/sharedMarks.test.js.map +1 -0
- package/dist/__tests__/cjk/uprightDots.test.d.ts +2 -0
- package/dist/__tests__/cjk/uprightDots.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/uprightDots.test.js +47 -0
- package/dist/__tests__/cjk/uprightDots.test.js.map +1 -0
- package/dist/__tests__/cjk/wordJoiner.test.d.ts +2 -0
- package/dist/__tests__/cjk/wordJoiner.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/wordJoiner.test.js +47 -0
- package/dist/__tests__/cjk/wordJoiner.test.js.map +1 -0
- package/dist/__tests__/cjk/zhuyinTones.test.d.ts +2 -0
- package/dist/__tests__/cjk/zhuyinTones.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/zhuyinTones.test.js +72 -0
- package/dist/__tests__/cjk/zhuyinTones.test.js.map +1 -0
- package/dist/__tests__/contentLocale.test.d.ts +2 -0
- package/dist/__tests__/contentLocale.test.d.ts.map +1 -0
- package/dist/__tests__/contentLocale.test.js +167 -0
- package/dist/__tests__/contentLocale.test.js.map +1 -0
- package/dist/__tests__/defaults/cjk.test.d.ts +2 -0
- package/dist/__tests__/defaults/cjk.test.d.ts.map +1 -0
- package/dist/__tests__/defaults/cjk.test.js +70 -0
- package/dist/__tests__/defaults/cjk.test.js.map +1 -0
- package/dist/__tests__/design/designTextRender.test.js +31 -0
- package/dist/__tests__/design/designTextRender.test.js.map +1 -1
- package/dist/__tests__/design/imageAltText.test.d.ts +2 -0
- package/dist/__tests__/design/imageAltText.test.d.ts.map +1 -0
- package/dist/__tests__/design/imageAltText.test.js +126 -0
- package/dist/__tests__/design/imageAltText.test.js.map +1 -0
- package/dist/__tests__/exports.test.js +61 -0
- package/dist/__tests__/exports.test.js.map +1 -1
- package/dist/__tests__/headingLetterSpacing.test.js +1 -1
- package/dist/__tests__/headingLetterSpacing.test.js.map +1 -1
- package/dist/__tests__/indexChinese.test.d.ts +2 -0
- package/dist/__tests__/indexChinese.test.d.ts.map +1 -0
- package/dist/__tests__/indexChinese.test.js +190 -0
- package/dist/__tests__/indexChinese.test.js.map +1 -0
- package/dist/__tests__/parse/annotations.test.d.ts +2 -0
- package/dist/__tests__/parse/annotations.test.d.ts.map +1 -0
- package/dist/__tests__/parse/annotations.test.js +175 -0
- package/dist/__tests__/parse/annotations.test.js.map +1 -0
- package/dist/__tests__/parse/attrQuoting.test.js +10 -8
- package/dist/__tests__/parse/attrQuoting.test.js.map +1 -1
- package/dist/__tests__/parse/chineseText.test.d.ts +2 -0
- package/dist/__tests__/parse/chineseText.test.d.ts.map +1 -0
- package/dist/__tests__/parse/chineseText.test.js +352 -0
- package/dist/__tests__/parse/chineseText.test.js.map +1 -0
- package/dist/__tests__/parts.test.js +25 -0
- package/dist/__tests__/parts.test.js.map +1 -1
- package/dist/__tests__/pipeline/colonListRoom.test.js +20 -0
- package/dist/__tests__/pipeline/colonListRoom.test.js.map +1 -1
- package/dist/__tests__/presets/hongloumeng.test.d.ts +2 -0
- package/dist/__tests__/presets/hongloumeng.test.d.ts.map +1 -0
- package/dist/__tests__/presets/hongloumeng.test.js +484 -0
- package/dist/__tests__/presets/hongloumeng.test.js.map +1 -0
- package/dist/__tests__/vertical/canvasPaint.test.d.ts +2 -0
- package/dist/__tests__/vertical/canvasPaint.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/canvasPaint.test.js +229 -0
- package/dist/__tests__/vertical/canvasPaint.test.js.map +1 -0
- package/dist/__tests__/vertical/compositionPaint.test.d.ts +2 -0
- package/dist/__tests__/vertical/compositionPaint.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/compositionPaint.test.js +538 -0
- package/dist/__tests__/vertical/compositionPaint.test.js.map +1 -0
- package/dist/__tests__/vertical/geometry.test.d.ts +2 -0
- package/dist/__tests__/vertical/geometry.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/geometry.test.js +276 -0
- package/dist/__tests__/vertical/geometry.test.js.map +1 -0
- package/dist/__tests__/vertical/htmlSmoke.test.d.ts +2 -0
- package/dist/__tests__/vertical/htmlSmoke.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/htmlSmoke.test.js +25 -0
- package/dist/__tests__/vertical/htmlSmoke.test.js.map +1 -0
- package/dist/__tests__/vertical/htmlTurnedCells.test.d.ts +2 -0
- package/dist/__tests__/vertical/htmlTurnedCells.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/htmlTurnedCells.test.js +99 -0
- package/dist/__tests__/vertical/htmlTurnedCells.test.js.map +1 -0
- package/dist/__tests__/vertical/htmlVertical.test.d.ts +2 -0
- package/dist/__tests__/vertical/htmlVertical.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/htmlVertical.test.js +145 -0
- package/dist/__tests__/vertical/htmlVertical.test.js.map +1 -0
- package/dist/__tests__/vertical/lineAxis.test.d.ts +2 -0
- package/dist/__tests__/vertical/lineAxis.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/lineAxis.test.js +128 -0
- package/dist/__tests__/vertical/lineAxis.test.js.map +1 -0
- package/dist/__tests__/vertical/measurePaint.test.d.ts +2 -0
- package/dist/__tests__/vertical/measurePaint.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/measurePaint.test.js +259 -0
- package/dist/__tests__/vertical/measurePaint.test.js.map +1 -0
- package/dist/__tests__/vertical/orientation.test.d.ts +2 -0
- package/dist/__tests__/vertical/orientation.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/orientation.test.js +153 -0
- package/dist/__tests__/vertical/orientation.test.js.map +1 -0
- package/dist/__tests__/vertical/stub.d.ts +8 -0
- package/dist/__tests__/vertical/stub.d.ts.map +1 -0
- package/dist/__tests__/vertical/stub.js +37 -0
- package/dist/__tests__/vertical/stub.js.map +1 -0
- package/dist/__tests__/vertical/tateChuYoko.test.d.ts +2 -0
- package/dist/__tests__/vertical/tateChuYoko.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/tateChuYoko.test.js +270 -0
- package/dist/__tests__/vertical/tateChuYoko.test.js.map +1 -0
- package/dist/__tests__/vertical/uprightResources.test.d.ts +2 -0
- package/dist/__tests__/vertical/uprightResources.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/uprightResources.test.js +182 -0
- package/dist/__tests__/vertical/uprightResources.test.js.map +1 -0
- package/dist/__tests__/vertical/verticalDesignText.test.d.ts +2 -0
- package/dist/__tests__/vertical/verticalDesignText.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/verticalDesignText.test.js +190 -0
- package/dist/__tests__/vertical/verticalDesignText.test.js.map +1 -0
- package/dist/__tests__/vertical/verticalSpans.d.ts +25 -0
- package/dist/__tests__/vertical/verticalSpans.d.ts.map +1 -0
- package/dist/__tests__/vertical/verticalSpans.js +39 -0
- package/dist/__tests__/vertical/verticalSpans.js.map +1 -0
- package/dist/__tests__/vertical/verticalTwins.test.d.ts +2 -0
- package/dist/__tests__/vertical/verticalTwins.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/verticalTwins.test.js +71 -0
- package/dist/__tests__/vertical/verticalTwins.test.js.map +1 -0
- package/dist/bundle/adapters.d.ts +14 -5
- package/dist/bundle/adapters.d.ts.map +1 -1
- package/dist/bundle/adapters.js +4 -3
- package/dist/bundle/adapters.js.map +1 -1
- package/dist/bundle/codec.d.ts.map +1 -1
- package/dist/bundle/codec.js +27 -4
- package/dist/bundle/codec.js.map +1 -1
- package/dist/bundle/index.d.ts +1 -1
- package/dist/bundle/index.d.ts.map +1 -1
- package/dist/bundle/manifest.d.ts +6 -4
- package/dist/bundle/manifest.d.ts.map +1 -1
- package/dist/bundle/manifest.js +31 -32
- package/dist/bundle/manifest.js.map +1 -1
- package/dist/bundle/types.d.ts +7 -2
- package/dist/bundle/types.d.ts.map +1 -1
- package/dist/canvas-backend/annotations.d.ts +31 -0
- package/dist/canvas-backend/annotations.d.ts.map +1 -0
- package/dist/canvas-backend/annotations.js +120 -0
- package/dist/canvas-backend/annotations.js.map +1 -0
- package/dist/canvas-backend/blockRender.d.ts.map +1 -1
- package/dist/canvas-backend/blockRender.js +195 -15
- package/dist/canvas-backend/blockRender.js.map +1 -1
- package/dist/canvas-backend/decorations.d.ts +5 -0
- package/dist/canvas-backend/decorations.d.ts.map +1 -1
- package/dist/canvas-backend/decorations.js +27 -0
- 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 +32 -16
- package/dist/canvas-backend/headerFooter.js.map +1 -1
- package/dist/canvas-backend/index.d.ts +2 -0
- package/dist/canvas-backend/index.d.ts.map +1 -1
- package/dist/canvas-backend/index.js +62 -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 +42 -5
- package/dist/canvas-backend/renderResourceBlock.js.map +1 -1
- package/dist/canvas-backend/segmentText.d.ts +23 -0
- package/dist/canvas-backend/segmentText.d.ts.map +1 -0
- package/dist/canvas-backend/segmentText.js +41 -0
- package/dist/canvas-backend/segmentText.js.map +1 -0
- package/dist/canvas-backend/verticalText.d.ts +113 -0
- package/dist/canvas-backend/verticalText.d.ts.map +1 -0
- package/dist/canvas-backend/verticalText.js +437 -0
- package/dist/canvas-backend/verticalText.js.map +1 -0
- package/dist/chineseNumerals.d.ts +39 -0
- package/dist/chineseNumerals.d.ts.map +1 -0
- package/dist/chineseNumerals.js +192 -0
- package/dist/chineseNumerals.js.map +1 -0
- package/dist/cjkMarks.d.ts +61 -0
- package/dist/cjkMarks.d.ts.map +1 -0
- package/dist/cjkMarks.js +441 -0
- package/dist/cjkMarks.js.map +1 -0
- package/dist/columnClip.d.ts +13 -4
- package/dist/columnClip.d.ts.map +1 -1
- package/dist/columnClip.js +33 -5
- package/dist/columnClip.js.map +1 -1
- package/dist/configWarnings.d.ts.map +1 -1
- package/dist/configWarnings.js +18 -3
- package/dist/configWarnings.js.map +1 -1
- package/dist/defaults/bodyText.d.ts +4 -1
- package/dist/defaults/bodyText.d.ts.map +1 -1
- package/dist/defaults/bodyText.js +27 -5
- package/dist/defaults/bodyText.js.map +1 -1
- package/dist/defaults/calloutStyles.js +1 -1
- package/dist/defaults/calloutStyles.js.map +1 -1
- package/dist/defaults/captionStyle.d.ts.map +1 -1
- package/dist/defaults/captionStyle.js +14 -0
- package/dist/defaults/captionStyle.js.map +1 -1
- package/dist/defaults/cjk.d.ts +33 -0
- package/dist/defaults/cjk.d.ts.map +1 -0
- package/dist/defaults/cjk.js +234 -0
- package/dist/defaults/cjk.js.map +1 -0
- package/dist/defaults/headerFooter.d.ts.map +1 -1
- package/dist/defaults/headerFooter.js +2 -0
- package/dist/defaults/headerFooter.js.map +1 -1
- package/dist/defaults/headingStyles.d.ts.map +1 -1
- package/dist/defaults/headingStyles.js +4 -0
- package/dist/defaults/headingStyles.js.map +1 -1
- package/dist/defaults/headings.d.ts.map +1 -1
- package/dist/defaults/headings.js +13 -6
- package/dist/defaults/headings.js.map +1 -1
- package/dist/defaults/index.d.ts +1 -0
- package/dist/defaults/index.d.ts.map +1 -1
- package/dist/defaults/index.js +10 -1
- package/dist/defaults/index.js.map +1 -1
- package/dist/defaults/indexConfig.d.ts +2 -1
- package/dist/defaults/indexConfig.d.ts.map +1 -1
- package/dist/defaults/indexConfig.js +5 -0
- package/dist/defaults/indexConfig.js.map +1 -1
- package/dist/defaults/layout.d.ts.map +1 -1
- package/dist/defaults/layout.js +7 -0
- package/dist/defaults/layout.js.map +1 -1
- package/dist/defaults/orderedLists.d.ts +5 -2
- package/dist/defaults/orderedLists.d.ts.map +1 -1
- package/dist/defaults/orderedLists.js +20 -5
- package/dist/defaults/orderedLists.js.map +1 -1
- package/dist/defaults/page.d.ts +8 -2
- package/dist/defaults/page.d.ts.map +1 -1
- package/dist/defaults/page.js +24 -7
- package/dist/defaults/page.js.map +1 -1
- package/dist/defaults/resourceTypes.d.ts +3 -3
- package/dist/defaults/resourceTypes.d.ts.map +1 -1
- package/dist/defaults/resourceTypes.js +23 -9
- package/dist/defaults/resourceTypes.js.map +1 -1
- package/dist/defaults/tableStyle.d.ts.map +1 -1
- package/dist/defaults/tableStyle.js +8 -5
- package/dist/defaults/tableStyle.js.map +1 -1
- package/dist/design/layout.d.ts +33 -0
- package/dist/design/layout.d.ts.map +1 -1
- package/dist/design/layout.js +124 -18
- package/dist/design/layout.js.map +1 -1
- package/dist/design/placeholders.d.ts.map +1 -1
- package/dist/design/placeholders.js +5 -1
- package/dist/design/placeholders.js.map +1 -1
- package/dist/design/richText.d.ts +24 -4
- package/dist/design/richText.d.ts.map +1 -1
- package/dist/design/richText.js +77 -16
- package/dist/design/richText.js.map +1 -1
- package/dist/html-backend.d.ts.map +1 -1
- package/dist/html-backend.js +635 -25
- package/dist/html-backend.js.map +1 -1
- package/dist/htmlAnnotations.d.ts +29 -0
- package/dist/htmlAnnotations.d.ts.map +1 -0
- package/dist/htmlAnnotations.js +86 -0
- package/dist/htmlAnnotations.js.map +1 -0
- package/dist/hyphenate.js +2 -1
- package/dist/hyphenate.js.map +1 -1
- package/dist/index.d.ts +28 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -8
- package/dist/index.js.map +1 -1
- package/dist/knuthPlass/pretextAdapter.d.ts +4 -1
- package/dist/knuthPlass/pretextAdapter.d.ts.map +1 -1
- package/dist/knuthPlass/pretextAdapter.js +9 -5
- package/dist/knuthPlass/pretextAdapter.js.map +1 -1
- package/dist/knuthPlass/richAdapter.d.ts +15 -2
- package/dist/knuthPlass/richAdapter.d.ts.map +1 -1
- package/dist/knuthPlass/richAdapter.js +16 -6
- package/dist/knuthPlass/richAdapter.js.map +1 -1
- package/dist/knuthPlass/tracking.d.ts +1 -1
- package/dist/knuthPlass/tracking.d.ts.map +1 -1
- package/dist/knuthPlass/tracking.js +4 -3
- package/dist/knuthPlass/tracking.js.map +1 -1
- package/dist/knuthPlass/types.d.ts +3 -0
- package/dist/knuthPlass/types.d.ts.map +1 -1
- package/dist/lineInk.d.ts +13 -0
- package/dist/lineInk.d.ts.map +1 -1
- package/dist/lineInk.js +28 -1
- package/dist/lineInk.js.map +1 -1
- package/dist/locale.d.ts +91 -3
- package/dist/locale.d.ts.map +1 -1
- package/dist/locale.js +245 -1
- package/dist/locale.js.map +1 -1
- package/dist/looseLines.d.ts +11 -1
- package/dist/looseLines.d.ts.map +1 -1
- package/dist/looseLines.js +26 -1
- package/dist/looseLines.js.map +1 -1
- package/dist/measure/cache.d.ts.map +1 -1
- package/dist/measure/cache.js +51 -3
- package/dist/measure/cache.js.map +1 -1
- package/dist/measure/canvas.d.ts +25 -0
- package/dist/measure/canvas.d.ts.map +1 -1
- package/dist/measure/canvas.js +90 -1
- package/dist/measure/canvas.js.map +1 -1
- package/dist/measure/cjk.d.ts +8 -13
- package/dist/measure/cjk.d.ts.map +1 -1
- package/dist/measure/cjk.js +29 -53
- package/dist/measure/cjk.js.map +1 -1
- package/dist/measure/cjkAnnotate.d.ts +96 -0
- package/dist/measure/cjkAnnotate.d.ts.map +1 -0
- package/dist/measure/cjkAnnotate.js +237 -0
- package/dist/measure/cjkAnnotate.js.map +1 -0
- package/dist/measure/cjkClasses.d.ts +133 -0
- package/dist/measure/cjkClasses.d.ts.map +1 -0
- package/dist/measure/cjkClasses.js +273 -0
- package/dist/measure/cjkClasses.js.map +1 -0
- package/dist/measure/cjkCompose.d.ts +86 -0
- package/dist/measure/cjkCompose.d.ts.map +1 -0
- package/dist/measure/cjkCompose.js +2022 -0
- package/dist/measure/cjkCompose.js.map +1 -0
- package/dist/measure/cjkPunctuation.d.ts +248 -0
- package/dist/measure/cjkPunctuation.d.ts.map +1 -0
- package/dist/measure/cjkPunctuation.js +492 -0
- package/dist/measure/cjkPunctuation.js.map +1 -0
- package/dist/measure/graphemes.d.ts +13 -0
- package/dist/measure/graphemes.d.ts.map +1 -0
- package/dist/measure/graphemes.js +38 -0
- package/dist/measure/graphemes.js.map +1 -0
- package/dist/measure/index.d.ts +3 -0
- package/dist/measure/index.d.ts.map +1 -1
- package/dist/measure/index.js +2 -0
- package/dist/measure/index.js.map +1 -1
- package/dist/measure/links.d.ts +6 -2
- package/dist/measure/links.d.ts.map +1 -1
- package/dist/measure/links.js +15 -5
- package/dist/measure/links.js.map +1 -1
- package/dist/measure/markCuts.d.ts +37 -0
- package/dist/measure/markCuts.d.ts.map +1 -0
- package/dist/measure/markCuts.js +77 -0
- package/dist/measure/markCuts.js.map +1 -0
- package/dist/measure/plain.d.ts.map +1 -1
- package/dist/measure/plain.js +33 -11
- package/dist/measure/plain.js.map +1 -1
- package/dist/measure/rich.d.ts +88 -1
- package/dist/measure/rich.d.ts.map +1 -1
- package/dist/measure/rich.js +233 -111
- package/dist/measure/rich.js.map +1 -1
- package/dist/measure/rubyLift.d.ts +11 -0
- package/dist/measure/rubyLift.d.ts.map +1 -0
- package/dist/measure/rubyLift.js +57 -0
- package/dist/measure/rubyLift.js.map +1 -0
- package/dist/measure/spaces.d.ts +12 -2
- package/dist/measure/spaces.d.ts.map +1 -1
- package/dist/measure/spaces.js +21 -7
- package/dist/measure/spaces.js.map +1 -1
- package/dist/measure/types.d.ts +20 -1
- package/dist/measure/types.d.ts.map +1 -1
- package/dist/measure/types.js.map +1 -1
- package/dist/measure/vertical.d.ts +104 -0
- package/dist/measure/vertical.d.ts.map +1 -0
- package/dist/measure/vertical.js +184 -0
- package/dist/measure/vertical.js.map +1 -0
- package/dist/numberWords.d.ts +3 -10
- package/dist/numberWords.d.ts.map +1 -1
- package/dist/numberWords.js +21 -9
- package/dist/numberWords.js.map +1 -1
- package/dist/numbering.d.ts +23 -5
- package/dist/numbering.d.ts.map +1 -1
- package/dist/numbering.js +99 -14
- package/dist/numbering.js.map +1 -1
- package/dist/parse/annotations.d.ts +101 -0
- package/dist/parse/annotations.d.ts.map +1 -0
- package/dist/parse/annotations.js +556 -0
- package/dist/parse/annotations.js.map +1 -0
- package/dist/parse/attrs.d.ts +48 -1
- package/dist/parse/attrs.d.ts.map +1 -1
- package/dist/parse/attrs.js +121 -8
- package/dist/parse/attrs.js.map +1 -1
- package/dist/parse/blockParser.d.ts.map +1 -1
- package/dist/parse/blockParser.js +50 -24
- package/dist/parse/blockParser.js.map +1 -1
- package/dist/parse/index.d.ts +3 -1
- package/dist/parse/index.d.ts.map +1 -1
- package/dist/parse/index.js +1 -0
- package/dist/parse/index.js.map +1 -1
- package/dist/parse/injectSpans.d.ts +3 -1
- package/dist/parse/injectSpans.d.ts.map +1 -1
- package/dist/parse/injectSpans.js +29 -8
- package/dist/parse/injectSpans.js.map +1 -1
- package/dist/parse/inlineFormatting.d.ts +38 -6
- package/dist/parse/inlineFormatting.d.ts.map +1 -1
- package/dist/parse/inlineFormatting.js +139 -26
- 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 +6 -2
- package/dist/parse/inlineSnippet.js.map +1 -1
- package/dist/parse/orientationMarks.d.ts +49 -0
- package/dist/parse/orientationMarks.d.ts.map +1 -0
- package/dist/parse/orientationMarks.js +138 -0
- package/dist/parse/orientationMarks.js.map +1 -0
- package/dist/parse/softBreaks.d.ts +56 -0
- package/dist/parse/softBreaks.d.ts.map +1 -0
- package/dist/parse/softBreaks.js +271 -0
- package/dist/parse/softBreaks.js.map +1 -0
- package/dist/parse/sourceMapping.d.ts.map +1 -1
- package/dist/parse/sourceMapping.js +41 -0
- package/dist/parse/sourceMapping.js.map +1 -1
- package/dist/parse/types.d.ts +84 -0
- package/dist/parse/types.d.ts.map +1 -1
- package/dist/pipeline/annotations.d.ts +56 -0
- package/dist/pipeline/annotations.d.ts.map +1 -0
- package/dist/pipeline/annotations.js +181 -0
- package/dist/pipeline/annotations.js.map +1 -0
- package/dist/pipeline/build.d.ts.map +1 -1
- package/dist/pipeline/build.js +158 -47
- package/dist/pipeline/build.js.map +1 -1
- package/dist/pipeline/buildBlockKind.d.ts +3 -0
- package/dist/pipeline/buildBlockKind.d.ts.map +1 -1
- package/dist/pipeline/buildBlockKind.js +5 -3
- package/dist/pipeline/buildBlockKind.js.map +1 -1
- package/dist/pipeline/buildHelpers.d.ts +36 -6
- package/dist/pipeline/buildHelpers.d.ts.map +1 -1
- package/dist/pipeline/buildHelpers.js +55 -8
- package/dist/pipeline/buildHelpers.js.map +1 -1
- package/dist/pipeline/buildMeasurement.d.ts +4 -0
- package/dist/pipeline/buildMeasurement.d.ts.map +1 -1
- package/dist/pipeline/buildMeasurement.js +3 -1
- package/dist/pipeline/buildMeasurement.js.map +1 -1
- package/dist/pipeline/calloutLayout.d.ts.map +1 -1
- package/dist/pipeline/calloutLayout.js +25 -11
- package/dist/pipeline/calloutLayout.js.map +1 -1
- package/dist/pipeline/cjkGrid.d.ts +133 -0
- package/dist/pipeline/cjkGrid.d.ts.map +1 -0
- package/dist/pipeline/cjkGrid.js +191 -0
- package/dist/pipeline/cjkGrid.js.map +1 -0
- package/dist/pipeline/config.d.ts +13 -9
- package/dist/pipeline/config.d.ts.map +1 -1
- package/dist/pipeline/config.js +43 -18
- package/dist/pipeline/config.js.map +1 -1
- package/dist/pipeline/contentWarnings.d.ts +10 -0
- package/dist/pipeline/contentWarnings.d.ts.map +1 -1
- package/dist/pipeline/contentWarnings.js +174 -2
- package/dist/pipeline/contentWarnings.js.map +1 -1
- package/dist/pipeline/floatPlacement.d.ts +9 -3
- package/dist/pipeline/floatPlacement.d.ts.map +1 -1
- package/dist/pipeline/floatPlacement.js +17 -6
- package/dist/pipeline/floatPlacement.js.map +1 -1
- package/dist/pipeline/headerFooter.d.ts +5 -2
- package/dist/pipeline/headerFooter.d.ts.map +1 -1
- package/dist/pipeline/headerFooter.js +123 -28
- package/dist/pipeline/headerFooter.js.map +1 -1
- package/dist/pipeline/headingDesignCuts.d.ts.map +1 -1
- package/dist/pipeline/headingDesignCuts.js +3 -1
- package/dist/pipeline/headingDesignCuts.js.map +1 -1
- package/dist/pipeline/headingStyles.d.ts +9 -3
- package/dist/pipeline/headingStyles.d.ts.map +1 -1
- package/dist/pipeline/headingStyles.js +23 -5
- package/dist/pipeline/headingStyles.js.map +1 -1
- package/dist/pipeline/indexDirective.d.ts.map +1 -1
- package/dist/pipeline/indexDirective.js +64 -20
- package/dist/pipeline/indexDirective.js.map +1 -1
- package/dist/pipeline/indexGroups.d.ts +55 -0
- package/dist/pipeline/indexGroups.d.ts.map +1 -0
- package/dist/pipeline/indexGroups.js +151 -0
- package/dist/pipeline/indexGroups.js.map +1 -0
- package/dist/pipeline/lists.d.ts +17 -0
- package/dist/pipeline/lists.d.ts.map +1 -1
- package/dist/pipeline/lists.js +43 -51
- package/dist/pipeline/lists.js.map +1 -1
- package/dist/pipeline/measureContentBlock.d.ts +3 -0
- package/dist/pipeline/measureContentBlock.d.ts.map +1 -1
- package/dist/pipeline/measureContentBlock.js +31 -4
- package/dist/pipeline/measureContentBlock.js.map +1 -1
- package/dist/pipeline/outline.d.ts.map +1 -1
- package/dist/pipeline/outline.js +13 -8
- package/dist/pipeline/outline.js.map +1 -1
- package/dist/pipeline/parts.d.ts +6 -3
- package/dist/pipeline/parts.d.ts.map +1 -1
- package/dist/pipeline/parts.js +28 -5
- package/dist/pipeline/parts.js.map +1 -1
- package/dist/pipeline/placeholders.d.ts +11 -0
- package/dist/pipeline/placeholders.d.ts.map +1 -1
- package/dist/pipeline/placeholders.js +48 -18
- package/dist/pipeline/placeholders.js.map +1 -1
- package/dist/pipeline/placement.d.ts +10 -6
- package/dist/pipeline/placement.d.ts.map +1 -1
- package/dist/pipeline/placement.js +33 -16
- package/dist/pipeline/placement.js.map +1 -1
- package/dist/pipeline/resourceLayout.d.ts +18 -1
- package/dist/pipeline/resourceLayout.d.ts.map +1 -1
- package/dist/pipeline/resourceLayout.js +109 -21
- package/dist/pipeline/resourceLayout.js.map +1 -1
- package/dist/pipeline/toc.d.ts.map +1 -1
- package/dist/pipeline/toc.js +6 -5
- package/dist/pipeline/toc.js.map +1 -1
- package/dist/pipeline/verticalMetrics.d.ts +14 -0
- package/dist/pipeline/verticalMetrics.d.ts.map +1 -0
- package/dist/pipeline/verticalMetrics.js +154 -0
- package/dist/pipeline/verticalMetrics.js.map +1 -0
- package/dist/types.d.ts +344 -13
- package/dist/types.d.ts.map +1 -1
- package/dist/vdt.d.ts +396 -6
- package/dist/vdt.d.ts.map +1 -1
- package/dist/vdt.js +49 -0
- package/dist/vdt.js.map +1 -1
- package/dist/writingMode.d.ts +156 -0
- package/dist/writingMode.d.ts.map +1 -0
- package/dist/writingMode.js +291 -0
- package/dist/writingMode.js.map +1 -0
- package/package.json +1 -1
|
@@ -18,10 +18,11 @@
|
|
|
18
18
|
/** Resolve a resource's placement: own `placement` → its type's
|
|
19
19
|
* `defaultPlacement` → the built-in default (`auto` / `column`). A rotated
|
|
20
20
|
* resource is always a page-span float; an inline (`here`) embed is never
|
|
21
|
-
* rotated
|
|
22
|
-
|
|
21
|
+
* rotated, and neither is any resource of a vertical flow (`noRotation`:
|
|
22
|
+
* every resource there stands upright, in its own span). */
|
|
23
|
+
export function resolveResourcePlacement(resource, type, noRotation = false) {
|
|
23
24
|
const position = resource.placement?.position ?? type?.defaultPlacement?.position ?? 'auto';
|
|
24
|
-
const rotate = position === 'here'
|
|
25
|
+
const rotate = position === 'here' || noRotation
|
|
25
26
|
? undefined
|
|
26
27
|
: (resource.placement?.rotate ?? type?.defaultPlacement?.rotate);
|
|
27
28
|
const span = rotate ? 'page' : (resource.placement?.span ?? type?.defaultPlacement?.span ?? 'column');
|
|
@@ -43,7 +44,13 @@ export function resolveResourcePlacement(resource, type) {
|
|
|
43
44
|
* one that first cited a figure only refers to it — the figure was placed
|
|
44
45
|
* there, and is not placed again (EF-57).
|
|
45
46
|
*/
|
|
46
|
-
export function computeFloatPlan(blocks, resources, resourceTypes, incorporated
|
|
47
|
+
export function computeFloatPlan(blocks, resources, resourceTypes, incorporated,
|
|
48
|
+
/** A vertical flow: no resource is turned (see `resolveResourcePlacement`).
|
|
49
|
+
* Either for the whole document or per content block (the block a
|
|
50
|
+
* resource is first referred to in: a styled section may set its own
|
|
51
|
+
* writing mode). */
|
|
52
|
+
noRotation = false) {
|
|
53
|
+
const noRotationAt = typeof noRotation === 'function' ? noRotation : () => noRotation;
|
|
47
54
|
const resourceById = new Map();
|
|
48
55
|
for (const r of resources)
|
|
49
56
|
resourceById.set(r.id, r);
|
|
@@ -60,13 +67,17 @@ export function computeFloatPlan(blocks, resources, resourceTypes, incorporated)
|
|
|
60
67
|
if (!resource)
|
|
61
68
|
return;
|
|
62
69
|
const type = typeById.get(resource.typeId);
|
|
63
|
-
const
|
|
70
|
+
const upright = noRotationAt(blockIdx);
|
|
71
|
+
const { position, span, rotate, widthFraction, align, captionSide } = resolveResourcePlacement(resource, type, upright);
|
|
64
72
|
if (position === 'here')
|
|
65
73
|
return;
|
|
66
74
|
plan.push({
|
|
67
75
|
resourceId, firstBlockIdx: blockIdx, position, span,
|
|
68
76
|
...(rotate ? { rotate } : {}),
|
|
69
|
-
...(widthFraction < 1 && !rotate
|
|
77
|
+
...(widthFraction < 1 && !rotate
|
|
78
|
+
? { widthFraction, align }
|
|
79
|
+
// A vertical flow's upright figure keeps its alignment along the tier.
|
|
80
|
+
: upright && align !== 'left' ? { align } : {}),
|
|
70
81
|
...(captionSide && span === 'column' ? { captionSide } : {}),
|
|
71
82
|
});
|
|
72
83
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"floatPlacement.js","sourceRoot":"","sources":["../../src/pipeline/floatPlacement.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AA+DH
|
|
1
|
+
{"version":3,"file":"floatPlacement.js","sourceRoot":"","sources":["../../src/pipeline/floatPlacement.ts"],"names":[],"mappings":"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"}
|
|
@@ -154,12 +154,15 @@ export type TitleLine = JoinedLine & {
|
|
|
154
154
|
};
|
|
155
155
|
/** `{titleText}` of a heading, from the lines it was laid out in: the
|
|
156
156
|
* plain title of {@link defaultOpenerTitle}. */
|
|
157
|
-
export declare function headingTitleText(lines: readonly TitleLine[], numberPrefix: string, titleBreaks: readonly number[] | undefined, titleLength: number): string;
|
|
157
|
+
export declare function headingTitleText(lines: readonly TitleLine[], numberPrefix: string, titleBreaks: readonly number[] | undefined, titleLength: number, numberSeparator?: string): string;
|
|
158
158
|
/** The title a page-span heading's default opener prints, from the lines the
|
|
159
159
|
* heading was measured into (see {@link DefaultOpenerTitle}). The same
|
|
160
160
|
* reading serves the band's measure (`build.ts`) and its paint, so the
|
|
161
161
|
* two lay out one text. */
|
|
162
|
-
export declare function defaultOpenerTitle(lines: readonly TitleLine[], numberPrefix: string, titleBreaks: readonly number[] | undefined, titleLength: number
|
|
162
|
+
export declare function defaultOpenerTitle(lines: readonly TitleLine[], numberPrefix: string, titleBreaks: readonly number[] | undefined, titleLength: number,
|
|
163
|
+
/** What joins the number to the title in the lines
|
|
164
|
+
* (`HeadingLevelConfig.numberSeparator`). */
|
|
165
|
+
numberSeparator?: string): DefaultOpenerTitle;
|
|
163
166
|
/** The height of the title a page-span heading's default opener paints
|
|
164
167
|
* across `width`, with the opener's own painter (a greedy wrap at natural
|
|
165
168
|
* widths, a justified heading set flush left). The band reserved for the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"headerFooter.d.ts","sourceRoot":"","sources":["../../src/pipeline/headerFooter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"headerFooter.d.ts","sourceRoot":"","sources":["../../src/pipeline/headerFooter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { fontFamilyOf, getMeasureRegion, getMeasureUprightDigits, getMeasureWritingMode, measureCentralBaseline, setMeasureWritingMode, withMeasureWritingMode } from '../measure/vertical';
|
|
1
2
|
import { applyPartPalettesToFlow } from './partPalette';
|
|
2
3
|
import { TITLE_BREAK_RE, applyTitleBreaks, parseInlineFormatting } from '../parse/inlineFormatting';
|
|
3
|
-
import { createBoundingBox, } from '../vdt';
|
|
4
|
+
import { createBoundingBox, flowRectToPage, } from '../vdt';
|
|
4
5
|
import { computeChapterTitles, computeChapterTitlesAtTop, computeChapterNumbers, computeChapterNumbersAtTop, computeChapterNumbersByBlock, computeChapterAttrs, computePageMarks, computePartValues, lineJoin, markSourceOf } from './placeholders';
|
|
5
6
|
import { parsePartNumber, partMarkPages } from './parts';
|
|
6
|
-
import { computePageMetrics } from './buildHelpers';
|
|
7
|
+
import { computePageMetrics, sheetRectToFlow } from './buildHelpers';
|
|
7
8
|
import { resolvedLocale } from './config';
|
|
8
9
|
import { classifyPages } from './pageRoles';
|
|
9
10
|
import { computeSectionStyles, createHeadingLevelResolver, headingIsHidden } from './headingStyles';
|
|
@@ -67,6 +68,8 @@ function imagePrimitiveToBlock(prim) {
|
|
|
67
68
|
fileId: prim.fileId,
|
|
68
69
|
...(prim.imageKind ? { imageKind: prim.imageKind } : {}),
|
|
69
70
|
...(prim.pdfFileId ? { pdfFileId: prim.pdfFileId } : {}),
|
|
71
|
+
...(prim.upright ? { upright: true } : {}),
|
|
72
|
+
...(prim.altText ? { altText: prim.altText } : {}),
|
|
70
73
|
};
|
|
71
74
|
}
|
|
72
75
|
function textPrimitiveToBlock(prim) {
|
|
@@ -76,11 +79,13 @@ function textPrimitiveToBlock(prim) {
|
|
|
76
79
|
const vOffset = textVerticalOffset(prim.verticalAlign, prim.contentHeight, prim.lines);
|
|
77
80
|
// A centred or right-aligned line is placed by its ink: the tracking
|
|
78
81
|
// after its last glyph does not count (EF-153).
|
|
82
|
+
// A vertical block's lines stay in its own turned frame: baselines from
|
|
83
|
+
// the box's right edge (see `VDTDesignTextBlock.vertical`).
|
|
79
84
|
const lines = prim.lines.map((l) => ({
|
|
80
85
|
text: l.text,
|
|
81
86
|
xOffset: prim.contentX + (l.xOffset ?? 0)
|
|
82
87
|
+ textAlignOffsetX(prim.align, prim.contentWidth - (l.xOffset ?? 0), l.width - trailingTracking(l.text, prim.letterSpacingPx)),
|
|
83
|
-
baselineY: prim.y + prim.contentY + vOffset + l.baselineY,
|
|
88
|
+
baselineY: (prim.vertical ? 0 : prim.y) + prim.contentY + vOffset + l.baselineY,
|
|
84
89
|
width: l.width,
|
|
85
90
|
...(l.runs ? { runs: l.runs.map((r) => ({ ...r })) } : {}),
|
|
86
91
|
...(l.wordSpacingPx !== undefined ? { wordSpacingPx: l.wordSpacingPx } : {}),
|
|
@@ -105,8 +110,25 @@ function textPrimitiveToBlock(prim) {
|
|
|
105
110
|
? { letterSpacingPx: prim.letterSpacingPx }
|
|
106
111
|
: {}),
|
|
107
112
|
...(prim.stroke ? { stroke: { ...prim.stroke } } : {}),
|
|
113
|
+
...(prim.vertical ? { vertical: verticalTextOf(prim) } : {}),
|
|
108
114
|
};
|
|
109
115
|
}
|
|
116
|
+
/** How a vertical design text is set (`VDTDesignTextBlock.vertical`): the
|
|
117
|
+
* document's region and upright digits, the central axis of each family
|
|
118
|
+
* of its runs. */
|
|
119
|
+
function verticalTextOf(prim) {
|
|
120
|
+
const centralBaselines = {};
|
|
121
|
+
const add = (font) => {
|
|
122
|
+
const family = fontFamilyOf(font);
|
|
123
|
+
if (!(family in centralBaselines))
|
|
124
|
+
centralBaselines[family] = measureCentralBaseline(family);
|
|
125
|
+
};
|
|
126
|
+
add(prim.fontString);
|
|
127
|
+
for (const line of prim.lines)
|
|
128
|
+
for (const run of line.runs ?? [])
|
|
129
|
+
add(run.fontString);
|
|
130
|
+
return { region: getMeasureRegion(), uprightDigits: getMeasureUprightDigits(), centralBaselines };
|
|
131
|
+
}
|
|
110
132
|
function rulePrimitiveToBlock(prim) {
|
|
111
133
|
return {
|
|
112
134
|
kind: 'rule',
|
|
@@ -237,7 +259,7 @@ export function measureHeadingDesign(level, heading, width, dpi, metadata, pageI
|
|
|
237
259
|
const ox = origin?.x ?? frames.page.x;
|
|
238
260
|
const oy = origin?.y ?? frames.page.y;
|
|
239
261
|
const shift = (f) => ({ x: f.x - ox, y: f.y - oy, width: f.width, height: f.height });
|
|
240
|
-
stubFrames = { page: shift(frames.page), bleed: shift(frames.bleed) };
|
|
262
|
+
stubFrames = { page: shift(frames.page), bleed: shift(frames.bleed), ...(frames.upright ? { upright: true } : {}) };
|
|
241
263
|
}
|
|
242
264
|
const layoutAt = (height) => layoutDesignSlot(level.advancedDesign.slot, { container: { x: 0, y: 0, width, height }, dpi, placeholders, frames: stubFrames, resourceById }, pageIndex);
|
|
243
265
|
const result = layoutAt(MEASURE_CONTAINER_HEIGHT);
|
|
@@ -277,7 +299,7 @@ export function measureHeadingDesign(level, heading, width, dpi, metadata, pageI
|
|
|
277
299
|
});
|
|
278
300
|
return { height: Math.max(bottom, minHeightPx), textFloor };
|
|
279
301
|
}
|
|
280
|
-
const HEADING_LINE_PLACEHOLDER = /\{(number|numberDecimal|numberRoman|numberRomanLower|numberAlpha|numberAlphaLower|numberWords|numberWordsLower|numberOrdinalWords|numberOrdinalWordsLower|chapterNumber|chapterTitle)\}/;
|
|
302
|
+
const HEADING_LINE_PLACEHOLDER = /\{(number|numberDecimal|numberRoman|numberRomanLower|numberAlpha|numberAlphaLower|numberWords|numberWordsLower|numberOrdinalWords|numberOrdinalWordsLower|numberHan|chapterNumber|chapterTitle)\}/;
|
|
281
303
|
const METADATA_ELEMENT = /^\s*\{(title|subtitle|author|publishDate)\}\s*$/;
|
|
282
304
|
/** The source a text element maps back to, from what its content renders:
|
|
283
305
|
* the heading title for `{titleText}`, an attribute value for a bare
|
|
@@ -349,6 +371,27 @@ export function layoutSlotToVdt(slot, container, pageIndex, placeholders, dpi, e
|
|
|
349
371
|
blocks,
|
|
350
372
|
};
|
|
351
373
|
}
|
|
374
|
+
/**
|
|
375
|
+
* A running head or footer as page furniture: the pictures it repeats on
|
|
376
|
+
* every page keep no alternative text, so HTML gives them `alt=""` and
|
|
377
|
+
* `role="presentation"` and a screen reader skips them, as the tagged PDF
|
|
378
|
+
* does (a pagination artifact). The pictures of an opener, a part page or a
|
|
379
|
+
* heading design keep theirs.
|
|
380
|
+
*/
|
|
381
|
+
function asFurniture(slot) {
|
|
382
|
+
if (!slot || !slot.blocks.some((b) => b.kind === 'image' && b.altText !== undefined))
|
|
383
|
+
return slot;
|
|
384
|
+
return {
|
|
385
|
+
...slot,
|
|
386
|
+
blocks: slot.blocks.map((b) => {
|
|
387
|
+
if (b.kind !== 'image' || b.altText === undefined)
|
|
388
|
+
return b;
|
|
389
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
390
|
+
const { altText: _alt, ...rest } = b;
|
|
391
|
+
return rest;
|
|
392
|
+
}),
|
|
393
|
+
};
|
|
394
|
+
}
|
|
352
395
|
/** The source of a heading block's title text: its per-character map when
|
|
353
396
|
* the block has one, else its whole range. */
|
|
354
397
|
function headingTitleSource(block, titleText) {
|
|
@@ -411,7 +454,7 @@ function findOpenerHeading(page, levels) {
|
|
|
411
454
|
if (headingIsHidden(block, lvl))
|
|
412
455
|
continue;
|
|
413
456
|
const pref = block.numberPrefix ?? '';
|
|
414
|
-
const title = defaultOpenerTitle(block.lines, pref, block.titleBreaks, block.titleLength ?? -1);
|
|
457
|
+
const title = defaultOpenerTitle(block.lines, pref, block.titleBreaks, block.titleLength ?? -1, block.numberSeparator);
|
|
415
458
|
return { block, level: block.headingLevel, title, numberPrefix: pref };
|
|
416
459
|
}
|
|
417
460
|
}
|
|
@@ -419,8 +462,8 @@ function findOpenerHeading(page, levels) {
|
|
|
419
462
|
}
|
|
420
463
|
/** `{titleText}` of a heading, from the lines it was laid out in: the
|
|
421
464
|
* plain title of {@link defaultOpenerTitle}. */
|
|
422
|
-
export function headingTitleText(lines, numberPrefix, titleBreaks, titleLength) {
|
|
423
|
-
return defaultOpenerTitle(lines, numberPrefix, titleBreaks, titleLength).titleText;
|
|
465
|
+
export function headingTitleText(lines, numberPrefix, titleBreaks, titleLength, numberSeparator = ' ') {
|
|
466
|
+
return defaultOpenerTitle(lines, numberPrefix, titleBreaks, titleLength, numberSeparator).titleText;
|
|
424
467
|
}
|
|
425
468
|
const PLAIN_RUN = { bold: false, italic: false };
|
|
426
469
|
/** The marker characters a backslash escapes (see `protectEscapes`). */
|
|
@@ -431,7 +474,10 @@ const sameEmphasis = (a, b) => a.bold === b.bold && a.italic === b.italic;
|
|
|
431
474
|
* heading was measured into (see {@link DefaultOpenerTitle}). The same
|
|
432
475
|
* reading serves the band's measure (`build.ts`) and its paint, so the
|
|
433
476
|
* two lay out one text. */
|
|
434
|
-
export function defaultOpenerTitle(lines, numberPrefix, titleBreaks, titleLength
|
|
477
|
+
export function defaultOpenerTitle(lines, numberPrefix, titleBreaks, titleLength,
|
|
478
|
+
/** What joins the number to the title in the lines
|
|
479
|
+
* (`HeadingLevelConfig.numberSeparator`). */
|
|
480
|
+
numberSeparator = ' ') {
|
|
435
481
|
const chars = [];
|
|
436
482
|
const flags = [];
|
|
437
483
|
/** Where a line break was read back as a space or a no-break space. */
|
|
@@ -489,7 +535,7 @@ export function defaultOpenerTitle(lines, numberPrefix, titleBreaks, titleLength
|
|
|
489
535
|
}
|
|
490
536
|
}
|
|
491
537
|
const full = chars.join('');
|
|
492
|
-
const drop = numberPrefix && full.startsWith(`${numberPrefix}
|
|
538
|
+
const drop = numberPrefix && full.startsWith(`${numberPrefix}${numberSeparator}`) ? numberPrefix.length + numberSeparator.length : 0;
|
|
493
539
|
const title = full.slice(drop);
|
|
494
540
|
const titleText = applyTitleBreaks(title, titleBreaks, titleLength);
|
|
495
541
|
if (!hasMarks)
|
|
@@ -606,13 +652,14 @@ export function measureDefaultOpenerHeight(level, textAlign, title, numberPrefix
|
|
|
606
652
|
* text element, anchored to fill the full-page-width container, using the
|
|
607
653
|
* heading level's resolved typography and `headings.textAlign` (justified
|
|
608
654
|
* sets flush left, like the last line of a justified heading). Emits
|
|
609
|
-
* `{number} {titleText}`
|
|
610
|
-
* `{titleText}`. With `marked`, `{titleText}` holds the title as inline
|
|
655
|
+
* `{number} {titleText}` (the level's `numberSeparator` between them) when
|
|
656
|
+
* the heading carries a numberPrefix, otherwise `{titleText}`. With `marked`, `{titleText}` holds the title as inline
|
|
611
657
|
* Markdown (see {@link DefaultOpenerTitle}) and the element reads it so. */
|
|
612
658
|
function synthesiseDefaultOpenerSlot(level, hasNumberPrefix, textAlign, marked = false) {
|
|
613
659
|
// `{number}` is the heading placeholder for the formatted number;
|
|
614
660
|
// `{formattedNumber}` is not one, and left the title with a leading space.
|
|
615
|
-
|
|
661
|
+
// The level's separator joins them, as in the column (`' '` in Chinese).
|
|
662
|
+
const content = hasNumberPrefix ? `{number}${level.numberSeparator ?? ' '}{titleText}` : '{titleText}';
|
|
616
663
|
const textEl = {
|
|
617
664
|
kind: 'text',
|
|
618
665
|
id: 'defaultHeadingOpener',
|
|
@@ -643,14 +690,25 @@ function synthesiseDefaultOpenerSlot(level, hasNumberPrefix, textAlign, marked =
|
|
|
643
690
|
};
|
|
644
691
|
return { elements: [textEl] };
|
|
645
692
|
}
|
|
693
|
+
/** The level-1 heading settings, which the default part designs borrow. */
|
|
694
|
+
function levelOne(resolved) {
|
|
695
|
+
return resolved.headings.levels.find((l) => l.level === 1) ?? resolved.headings.levels[0];
|
|
696
|
+
}
|
|
697
|
+
/** `{number}` and `{titleText}` joined as the book's chapter openers join
|
|
698
|
+
* them: with the H1's `numberSeparator` (`' '` in Chinese, one space by
|
|
699
|
+
* default). */
|
|
700
|
+
function partNumberAndTitle(resolved) {
|
|
701
|
+
return `{number}${levelOne(resolved).numberSeparator ?? ' '}{titleText}`;
|
|
702
|
+
}
|
|
646
703
|
/** Default opener design of a `:::part` page when `parts.design` is empty:
|
|
647
|
-
* `{number} {titleText}` (
|
|
648
|
-
*
|
|
649
|
-
*
|
|
650
|
-
*
|
|
704
|
+
* `{number} {titleText}` (the H1's `numberSeparator` between them; just
|
|
705
|
+
* `{titleText}` without a number) in the H1 typography, anchored at the
|
|
706
|
+
* top-left of the part's body area — the container is the trim box, so
|
|
707
|
+
* the offset is the part margins. Purely decorative: raise
|
|
708
|
+
* `parts.margins.top` to keep the body clear of it. */
|
|
651
709
|
function synthesiseDefaultPartSlot(resolved, page, trimBox, hasNumber) {
|
|
652
|
-
const level = resolved
|
|
653
|
-
const content = hasNumber ?
|
|
710
|
+
const level = levelOne(resolved);
|
|
711
|
+
const content = hasNumber ? partNumberAndTitle(resolved) : '{titleText}';
|
|
654
712
|
const textEl = {
|
|
655
713
|
kind: 'text',
|
|
656
714
|
id: 'defaultPartOpener',
|
|
@@ -679,9 +737,10 @@ function synthesiseDefaultPartSlot(resolved, page, trimBox, hasNumber) {
|
|
|
679
737
|
return { elements: [textEl] };
|
|
680
738
|
}
|
|
681
739
|
/** Default row design of a part in the contents when `toc.parts.design` is
|
|
682
|
-
* empty: `{number} {titleText}`
|
|
683
|
-
*
|
|
684
|
-
|
|
740
|
+
* empty: `{number} {titleText}` (the H1's `numberSeparator` between them;
|
|
741
|
+
* just `{titleText}` without a number) at the left and `{pageNumber}` at
|
|
742
|
+
* the right, in the level-1 entry typography. */
|
|
743
|
+
function synthesiseDefaultTocPartSlot(resolved, hasNumber) {
|
|
685
744
|
const entry = resolved.toc.levels[0];
|
|
686
745
|
const common = {
|
|
687
746
|
kind: 'text', parity: 'all', pages: 'all',
|
|
@@ -689,7 +748,7 @@ function synthesiseDefaultTocPartSlot(resolved) {
|
|
|
689
748
|
color: entry.color, verticalAlign: 'middle', lineHeight: 1.2, hyphenate: false,
|
|
690
749
|
};
|
|
691
750
|
const title = {
|
|
692
|
-
...common, id: 'tocPartTitle', content: '{
|
|
751
|
+
...common, id: 'tocPartTitle', content: hasNumber ? partNumberAndTitle(resolved) : '{titleText}', align: 'left', overflow: 'ellipsis-end',
|
|
693
752
|
placement: { anchor: { to: 'container', edge: 'left' }, offset: {}, size: { width: 'auto', height: 'auto' } },
|
|
694
753
|
};
|
|
695
754
|
const page = {
|
|
@@ -719,10 +778,29 @@ function pagesWithPartMarks(doc) {
|
|
|
719
778
|
return doc.pages.map((p, i) => (marked.has(i) && !p.partInfo ? { ...p, partInfo: marked.get(i) } : p));
|
|
720
779
|
}
|
|
721
780
|
export function buildHeadersAndFooters(doc, resourceById, inputs = {}) {
|
|
781
|
+
// Each page's slots measure their text in the writing mode they are set
|
|
782
|
+
// in (see the loop); the mode in force before is put back.
|
|
783
|
+
const measureMode = getMeasureWritingMode();
|
|
784
|
+
try {
|
|
785
|
+
layoutHeadersAndFooters(doc, resourceById, inputs);
|
|
786
|
+
}
|
|
787
|
+
finally {
|
|
788
|
+
setMeasureWritingMode(measureMode);
|
|
789
|
+
}
|
|
790
|
+
}
|
|
791
|
+
function layoutHeadersAndFooters(doc, resourceById, inputs) {
|
|
722
792
|
const resolved = doc.config;
|
|
723
793
|
const dpi = resolved.page.dpi;
|
|
724
794
|
const metrics = computePageMetrics(resolved);
|
|
725
|
-
|
|
795
|
+
// Header and footer are laid out on the sheet on every page; every other
|
|
796
|
+
// slot (openers, part pages, overlays) in the page's flow frame, so on a
|
|
797
|
+
// vertical page their text reads vertically.
|
|
798
|
+
const physicalFrames = { page: metrics.physical.trimBox, bleed: metrics.physical.bleedBox };
|
|
799
|
+
const verticalFrames = {
|
|
800
|
+
page: sheetRectToFlow(metrics.physical.trimBox, metrics.pageWidthPx),
|
|
801
|
+
bleed: sheetRectToFlow(metrics.physical.bleedBox, metrics.pageWidthPx),
|
|
802
|
+
upright: true,
|
|
803
|
+
};
|
|
726
804
|
// Page roles drive the per-element `pages` filter of every slot below.
|
|
727
805
|
classifyPages(doc, resolved);
|
|
728
806
|
const chapterTitleByPageIndex = computeChapterTitles(doc.blocks, doc.pages.length, doc.pages);
|
|
@@ -775,12 +853,29 @@ export function buildHeadersAndFooters(doc, resourceById, inputs = {}) {
|
|
|
775
853
|
// The same overrides recolour the palette-linked colours of the flow.
|
|
776
854
|
applyPartPalettesToFlow(doc, partPaletteByPageIndex, resolved.colorPalette, inputs.flowColorValues);
|
|
777
855
|
for (const page of doc.pages) {
|
|
856
|
+
// Text in the flow (openers, part pages, in-column designs) reads as the
|
|
857
|
+
// page's flow does; running heads and folios are horizontal on the
|
|
858
|
+
// sheet, whatever the flow (see below).
|
|
859
|
+
setMeasureWritingMode(page.flow ? 'vertical-rl' : 'horizontal-tb');
|
|
778
860
|
// Per-page content area: mirrored margins swap inner/outer on even pages.
|
|
779
861
|
const contentArea = page.contentArea;
|
|
862
|
+
const frames = page.flow ? verticalFrames : physicalFrames;
|
|
780
863
|
const extras = {
|
|
781
864
|
frames, pageRole: page.role, resourceById,
|
|
782
865
|
metadataSources: doc.metadataSources, metadata: doc.metadata,
|
|
783
866
|
};
|
|
867
|
+
// Running heads and folios stay on the sheet: the physical content
|
|
868
|
+
// area and trim box. `anchor.to: 'outer'` is the outer margin, on the
|
|
869
|
+
// side away from the spine (it swaps with the binding and the page's
|
|
870
|
+
// parity, as mirrored margins do).
|
|
871
|
+
const sheetArea = flowRectToPage(page, contentArea);
|
|
872
|
+
const trim = metrics.physical.trimBox;
|
|
873
|
+
const recto = (page.index + pageIndexOffset) % 2 === 0;
|
|
874
|
+
const outerRight = recto !== (resolved.page.binding === 'right');
|
|
875
|
+
const outer = outerRight
|
|
876
|
+
? { x: sheetArea.x + sheetArea.width, y: sheetArea.y, width: Math.max(0, trim.x + trim.width - (sheetArea.x + sheetArea.width)), height: sheetArea.height }
|
|
877
|
+
: { x: trim.x, y: sheetArea.y, width: Math.max(0, sheetArea.x - trim.x), height: sheetArea.height };
|
|
878
|
+
const sheetExtras = { ...extras, frames: { ...physicalFrames, outer } };
|
|
784
879
|
const section = sectionByPage[page.index];
|
|
785
880
|
const headerSlot = section?.header ?? resolved.header;
|
|
786
881
|
const footerSlot = section?.footer ?? resolved.footer;
|
|
@@ -801,7 +896,7 @@ export function buildHeadersAndFooters(doc, resourceById, inputs = {}) {
|
|
|
801
896
|
partNumberByPageIndex,
|
|
802
897
|
partPaletteByPageIndex,
|
|
803
898
|
};
|
|
804
|
-
page.header = layoutSlotToVdt(headerSlot, headerContainerBbox(
|
|
899
|
+
page.header = asFurniture(withMeasureWritingMode('horizontal-tb', () => layoutSlotToVdt(headerSlot, headerContainerBbox(sheetArea, metrics.physical.trimBox), page.index + pageIndexOffset, placeholders, dpi, sheetExtras)));
|
|
805
900
|
}
|
|
806
901
|
// Back of a part divider: a blank page right after a part page takes the
|
|
807
902
|
// part's verso design (the model book tints the whole leaf). The part
|
|
@@ -934,7 +1029,7 @@ export function buildHeadersAndFooters(doc, resourceById, inputs = {}) {
|
|
|
934
1029
|
const tp = block.tocPart;
|
|
935
1030
|
const slot = resolved.toc.parts.design.elements.length > 0
|
|
936
1031
|
? resolved.toc.parts.design
|
|
937
|
-
: synthesiseDefaultTocPartSlot(resolved);
|
|
1032
|
+
: synthesiseDefaultTocPartSlot(resolved, tp.number.length > 0);
|
|
938
1033
|
const rowPage = { ...page, pageLabel: tp.pageLabel };
|
|
939
1034
|
const palette = { ...(partPaletteByPageIndex[page.index] ?? {}), ...(tp.palette ?? {}) };
|
|
940
1035
|
const placeholders = {
|
|
@@ -978,7 +1073,7 @@ export function buildHeadersAndFooters(doc, resourceById, inputs = {}) {
|
|
|
978
1073
|
// The lines joined back into the title (EF-162), with a forced break
|
|
979
1074
|
// (`\\`) as a newline, as the block's height was measured
|
|
980
1075
|
// (`build.ts`) and as an opener prints it (EF-152).
|
|
981
|
-
const title = headingTitleText(block.lines, pref, block.titleBreaks, block.titleLength ?? -1);
|
|
1076
|
+
const title = headingTitleText(block.lines, pref, block.titleBreaks, block.titleLength ?? -1, block.numberSeparator);
|
|
982
1077
|
const placeholders = {
|
|
983
1078
|
kind: 'heading',
|
|
984
1079
|
page,
|
|
@@ -1029,7 +1124,7 @@ export function buildHeadersAndFooters(doc, resourceById, inputs = {}) {
|
|
|
1029
1124
|
partNumberByPageIndex,
|
|
1030
1125
|
partPaletteByPageIndex,
|
|
1031
1126
|
};
|
|
1032
|
-
page.footer = layoutSlotToVdt(footerSlot, footerContainerBbox(
|
|
1127
|
+
page.footer = asFurniture(withMeasureWritingMode('horizontal-tb', () => layoutSlotToVdt(footerSlot, footerContainerBbox(sheetArea, metrics.physical.trimBox), page.index + pageIndexOffset, placeholders, dpi, sheetExtras)));
|
|
1033
1128
|
}
|
|
1034
1129
|
}
|
|
1035
1130
|
}
|