postext 1.8.6 → 1.9.1
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 +485 -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
package/dist/pipeline/build.js
CHANGED
|
@@ -7,8 +7,12 @@ import { buildPageLabels, computeHeadingNumbering, parseNumberFormat, } from '..
|
|
|
7
7
|
import { extractFrontmatter, normalizeMetadata } from '../frontmatter';
|
|
8
8
|
import { collectConfigWarnings } from '../configWarnings';
|
|
9
9
|
import { initHyphenator } from '../measure';
|
|
10
|
+
import { getCjkLineBreak, setCjkLineBreak } from '../measure/cjkClasses';
|
|
11
|
+
import { cjkCompositionOf, getCjkComposition, setCjkComposition } from '../measure/cjkPunctuation';
|
|
12
|
+
import { getMeasureRegion, getMeasureUprightDigits, getMeasureWritingMode, setMeasureUprightDigits, setMeasureWritingMode } from '../measure/vertical';
|
|
13
|
+
import { stampCentralBaselines } from './verticalMetrics';
|
|
10
14
|
import { resolveAllConfig, computeBaselineGrid, resolvedLocale } from './config';
|
|
11
|
-
import { createHeadingLevelResolver, deriveSectionGeometryConfig, deriveSectionMeasureContext, headingIsHidden, headingIsNumbered, headingMarksFor, headingStyleOf, planHeadingSections, } from './headingStyles';
|
|
15
|
+
import { createHeadingLevelResolver, deriveSectionGeometryConfig, sectionWritingMode, deriveSectionMeasureContext, headingIsHidden, headingIsNumbered, headingMarksFor, headingStyleOf, planHeadingSections, } from './headingStyles';
|
|
12
16
|
import { computeOutline, hasIndexDirective, hasTocDirective, headingNumberingOptions, headingTemplatesOf, outlineFromDoc, sameOutline } from './outline';
|
|
13
17
|
import { expandTocDirectives } from './toc';
|
|
14
18
|
import { expandIndexDirectives, locateIndexMarks } from './indexDirective';
|
|
@@ -16,7 +20,7 @@ import { resolveBodyStyle, resolveBlockquoteStyle, resolveParagraphStyle } from
|
|
|
16
20
|
import { computeLevelIndentsPx, computeOrderedLevelIndentsPx, computeOrderedListRunMetrics, listBulletPosition, listItemGapPx, listItemSpacingPx, } from './lists';
|
|
17
21
|
import { resetLinePositions, createPageWithColumns, currentColumn, advanceToNextColumn, advanceToNextPageBoundary, enforcePageParity, placeBlockInColumn, placeAtomicBlock, createPartPage, pageHasContent, sideColumnOf, sideColumns, sideUsedBottom, pageIsOccupied, bandColumns, currentBand, isBandLevel, bandUsedBottom, closeBandAndInsertSpan, pageLayoutOf, } from './placement';
|
|
18
22
|
import { chooseParagraphSplit } from './orphanWidow';
|
|
19
|
-
import { applyStyleAttrs, computePageMetrics, isMarkerBlock, nextNonMarkerBlock, spaceLinesAfter, prevNonMarkerBlock, rollbackTrailingBlocks, } from './buildHelpers';
|
|
23
|
+
import { applyStyleAttrs, computePageMetrics, pageMirrored, sheetRectToFlow, isMarkerBlock, nextNonMarkerBlock, spaceLinesAfter, prevNonMarkerBlock, rollbackTrailingBlocks, } from './buildHelpers';
|
|
20
24
|
import { measureContentBlock } from './measureContentBlock';
|
|
21
25
|
import { planParagraphContainers } from './paragraphContainers';
|
|
22
26
|
import { appendChapterEndNotes, footnoteIdsOfLines, footnoteParagraphStyle, noteContentBlock, numberFootnotes, splitFootnoteDefinitions, withFootnoteStyle, } from './footnotes';
|
|
@@ -34,7 +38,9 @@ import { chapterNumberCounter, leadingBoldText } from './placeholders';
|
|
|
34
38
|
import { proposeBalanceLines, collectColumnGaps, firstDivergentColumn, gapLinesIn, boxRoomIn, boxLeverKeys, pageSegments, MAX_BALANCING_PASSES, MAX_BALANCING_PASSES_PER_DOCUMENT, balanceKey } from './columnBalancing';
|
|
35
39
|
import { applyBandCap, uncapBand, columnBottom, bandCapLines, bandTop, bareBandTop, resolveBandCapsGen, drainPasses, resolveTrailingCapsGen, bandCapLinesAroundZone, } from './bandCaps';
|
|
36
40
|
import { raggedLooseLines } from './raggedLines';
|
|
37
|
-
import { collectContentWarnings, locateContentWarnings } from './contentWarnings';
|
|
41
|
+
import { cjkLooseLineWarnings, collectContentWarnings, locateContentWarnings } from './contentWarnings';
|
|
42
|
+
import { annotateDocument } from '../cjkMarks';
|
|
43
|
+
import { withBookTitleBrackets } from './annotations';
|
|
38
44
|
/** Tolerance for "does this block fit" checks against a column's free
|
|
39
45
|
* height, absorbing floating-point drift between grid multiples. */
|
|
40
46
|
const FIT_EPS = 0.01;
|
|
@@ -109,7 +115,9 @@ function measureLooseParagraph(rawBlock, blockIdx, columnWidth, ctx, styleOverri
|
|
|
109
115
|
const optimum = measureContentBlock(rawBlock, blockIdx, columnWidth, ctx, { styleOverride, looseness: 0 });
|
|
110
116
|
const looseness = optimum ? target - optimum.measured.lines.length : extraLines;
|
|
111
117
|
const maxWordSpacing = ctx.resolved.bodyText.maxWordSpacing + 1e-9;
|
|
112
|
-
|
|
118
|
+
// A CJK line spread past its tracking cap (`cjkLoose`) is past the
|
|
119
|
+
// limit too.
|
|
120
|
+
const withinLimit = (lines) => lines.every((l) => l.isLastLine || ((l.justifiedSpaceRatio === undefined || l.justifiedSpaceRatio <= maxWordSpacing) && !l.cjkLoose));
|
|
113
121
|
for (const tracking of trackingLadder) {
|
|
114
122
|
const loose = measureContentBlock(rawBlock, blockIdx, columnWidth, ctx, {
|
|
115
123
|
styleOverride,
|
|
@@ -138,6 +146,26 @@ function measureLooseParagraph(rawBlock, blockIdx, columnWidth, ctx, styleOverri
|
|
|
138
146
|
* @internal Exposed for tests only; use `buildDocument`.
|
|
139
147
|
*/
|
|
140
148
|
export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
149
|
+
// A pass sets the CJK line-break level, the CJK composition and the
|
|
150
|
+
// writing mode text is measured in for its own measuring; what the caller had in force is put
|
|
151
|
+
// back when it ends, also when it throws (a cancelled build), so text
|
|
152
|
+
// measured outside a build reads as it did before it.
|
|
153
|
+
const lineBreak = getCjkLineBreak();
|
|
154
|
+
const composition = getCjkComposition();
|
|
155
|
+
const writingMode = getMeasureWritingMode();
|
|
156
|
+
const region = getMeasureRegion();
|
|
157
|
+
const uprightDigits = getMeasureUprightDigits();
|
|
158
|
+
try {
|
|
159
|
+
return placeDocumentPass(content, config, cache, options, hints);
|
|
160
|
+
}
|
|
161
|
+
finally {
|
|
162
|
+
setCjkLineBreak(lineBreak);
|
|
163
|
+
setCjkComposition(composition);
|
|
164
|
+
setMeasureWritingMode(writingMode, region);
|
|
165
|
+
setMeasureUprightDigits(uprightDigits);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
function placeDocumentPass(content, config, cache, options, hints) {
|
|
141
169
|
const { balanceExtraPx, balanceLooseness, balanceLooseBudget, bandCaps, captionUnder } = hints;
|
|
142
170
|
const captionUnderProposals = new Set();
|
|
143
171
|
/** Side columns whose foot a figure's side caption has cut, by the figure. */
|
|
@@ -170,6 +198,18 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
170
198
|
// syllable even in ragged text. Left unset, a build would hyphenate with
|
|
171
199
|
// whichever dictionary the previous one (or the default, en-us) chose.
|
|
172
200
|
initHyphenator(resolved.bodyText.hyphenation.locale);
|
|
201
|
+
// CJK text breaks at the document's level wherever it is measured (body,
|
|
202
|
+
// captions, cells, notes, boxes), as it hyphenates in its language.
|
|
203
|
+
setCjkLineBreak(resolved.cjk.lineBreak);
|
|
204
|
+
// And is composed with the document's punctuation widths, hanging and
|
|
205
|
+
// Han–Latin space (along the line in either writing mode), in its
|
|
206
|
+
// language.
|
|
207
|
+
setCjkComposition(cjkCompositionOf(resolved.cjk, resolved.page.dpi, resolvedLocale(resolved)));
|
|
208
|
+
// Characters of a vertical flow that stand in a cell advance by it (half
|
|
209
|
+
// an em for the mainland interpunct).
|
|
210
|
+
setMeasureWritingMode(resolved.layout.writingMode, resolved.cjk.region);
|
|
211
|
+
// Short numbers set in one upright cell (`cjk.uprightDigits`).
|
|
212
|
+
setMeasureUprightDigits(resolved.cjk.uprightDigits);
|
|
173
213
|
// Compute baseline grid
|
|
174
214
|
const baselineGrid = computeBaselineGrid(resolved);
|
|
175
215
|
// Create document
|
|
@@ -201,9 +241,21 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
201
241
|
// styled section with its own margins / layout — the section's.
|
|
202
242
|
let contentArea = pageMetrics.contentArea;
|
|
203
243
|
let geomResolved = resolved;
|
|
204
|
-
// Page/bleed frames for design elements anchored to `'page'` / `'bleed'
|
|
205
|
-
|
|
244
|
+
// Page/bleed frames for design elements anchored to `'page'` / `'bleed'`,
|
|
245
|
+
// in the frame of the page's flow: the sheet's, or on a vertical page
|
|
246
|
+
// (`page.flow`) the flow frame, where "the top of the page" is the
|
|
247
|
+
// sheet's right edge.
|
|
248
|
+
const physicalFrames = { page: pageMetrics.physical.trimBox, bleed: pageMetrics.physical.bleedBox };
|
|
249
|
+
const verticalFrames = {
|
|
250
|
+
page: sheetRectToFlow(pageMetrics.physical.trimBox, pageWidthPx),
|
|
251
|
+
bleed: sheetRectToFlow(pageMetrics.physical.bleedBox, pageWidthPx),
|
|
252
|
+
upright: true,
|
|
253
|
+
};
|
|
254
|
+
const designFramesOn = (page) => (page?.flow ? verticalFrames : physicalFrames);
|
|
206
255
|
doc.trimOffset = trimOffset;
|
|
256
|
+
// A right-bound book (`page.binding`): hosts show its spreads mirrored.
|
|
257
|
+
if (resolved.page.binding === 'right')
|
|
258
|
+
doc.binding = 'right';
|
|
207
259
|
// Create first page
|
|
208
260
|
const firstPage = createPageWithColumns(0, resolved, contentArea, pageWidthPx, pageHeightPx, pageIndexOffset);
|
|
209
261
|
doc.pages.push(firstPage);
|
|
@@ -289,7 +341,11 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
289
341
|
// chapter already numbered (`continuation.resourceNumbers`) was placed
|
|
290
342
|
// there: here it is only referred to, never floated again.
|
|
291
343
|
const incorporated = new Set(Object.keys(continuation?.resourceNumbers ?? {}));
|
|
292
|
-
|
|
344
|
+
// A resource first referred to in a vertical flow stands upright: a turn
|
|
345
|
+
// it asks for is not applied there. Decided per block, by the writing
|
|
346
|
+
// mode of the styled section the reference sits in (a horizontal
|
|
347
|
+
// appendix of a vertical book turns its figures as asked).
|
|
348
|
+
const floatPlan = computeFloatPlan(contentBlocks, resources, resourceTypes, incorporated, (blockIdx) => sectionWritingMode(sectionPlan, resolved, blockIdx) === 'vertical-rl');
|
|
293
349
|
const floatedIds = floatedResourceIds(floatPlan, incorporated, resources, resourceTypes);
|
|
294
350
|
const floatsByFirstBlock = new Map();
|
|
295
351
|
for (const f of floatPlan) {
|
|
@@ -554,7 +610,7 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
554
610
|
}
|
|
555
611
|
}
|
|
556
612
|
};
|
|
557
|
-
const rotationKey = (rotated) => rotated ? `:${rotated.direction}${rotated.length.toFixed(2)}` : '';
|
|
613
|
+
const rotationKey = (rotated) => rotated ? `:${rotated.direction}${rotated.length.toFixed(2)}${rotated.upright ? 'u' : ''}` : '';
|
|
558
614
|
const asideKey = (a) => (a ? `:aside${a.dx.toFixed(1)}x${a.width.toFixed(1)}${a.alignBottom ? 'b' : 't'}${(a.offsetY ?? 0).toFixed(1)}` : '');
|
|
559
615
|
const layoutFloat = (resourceId, width, slice, rotated, aside) => {
|
|
560
616
|
const resource = resourceById.get(resourceId);
|
|
@@ -570,16 +626,26 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
570
626
|
resourceTypes,
|
|
571
627
|
resources,
|
|
572
628
|
...(slice ? { slice } : {}),
|
|
573
|
-
...(rotated ? { rotate: rotated.direction, rotatedLength: rotated.length } : {}),
|
|
629
|
+
...(rotated ? (rotated.upright ? { upright: { maxLength: rotated.length } } : { rotate: rotated.direction, rotatedLength: rotated.length }) : {}),
|
|
574
630
|
...(aside ? { captionAside: aside } : {}),
|
|
575
631
|
});
|
|
576
632
|
};
|
|
577
633
|
/** The rotation of a pending float on a band whose columns keep `avail`
|
|
578
634
|
* px: the upright frame is as long as the grid multiple within that
|
|
579
635
|
* room, less the float gap, so the band it takes is `avail` at most. */
|
|
580
|
-
const rotationFor = (f, avail) =>
|
|
581
|
-
?
|
|
582
|
-
:
|
|
636
|
+
const rotationFor = (f, avail, page) => page?.flow
|
|
637
|
+
? uprightOn(page)
|
|
638
|
+
: f.rotate
|
|
639
|
+
? { direction: f.rotate, length: Math.max(1, Math.floor((avail + 0.01) / baselineGrid) * baselineGrid - floatGapPx) }
|
|
640
|
+
: undefined;
|
|
641
|
+
/** A resource on a vertical page stands upright: its frame at most as
|
|
642
|
+
* wide as the page's flow is tall (the content area's width on the
|
|
643
|
+
* sheet), the float gap kept. */
|
|
644
|
+
const uprightOn = (page) => ({
|
|
645
|
+
direction: 'ccw',
|
|
646
|
+
length: Math.max(1, Math.floor((page.contentArea.height + 0.01) / baselineGrid) * baselineGrid - floatGapPx),
|
|
647
|
+
upright: true,
|
|
648
|
+
});
|
|
583
649
|
/** Row count of a table resource (0 for anything else). */
|
|
584
650
|
const tableRowCount = (resourceId) => resourceById.get(resourceId)?.table?.model.rows.length ?? 0;
|
|
585
651
|
/** What a table resource does when taller than the page — its own
|
|
@@ -660,7 +726,9 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
660
726
|
* when the resource id is unknown. Caller offsets it to its final `y`. */
|
|
661
727
|
const buildFloatBlock = (resourceId, x, width, slice, rotated,
|
|
662
728
|
/** A rotated block sits flush to the band's right edge (the spine of a
|
|
663
|
-
* verso page) instead of its left
|
|
729
|
+
* verso page) instead of its left; a number is the share of the room
|
|
730
|
+
* left over set before it (an upright block of a vertical page, set
|
|
731
|
+
* per `placement.align` along its tier). */
|
|
664
732
|
flushEnd = false, aside,
|
|
665
733
|
/** The page is a verso of mirrored margins (a floated box's `'outer'`
|
|
666
734
|
* corner icon hangs on the left there). */
|
|
@@ -688,7 +756,8 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
688
756
|
// top-left lands at the bottom-left of the block, for a clockwise one
|
|
689
757
|
// at its top-right (see `resourceBlockToPage`).
|
|
690
758
|
const used = Math.min(rb.rotation.height, width);
|
|
691
|
-
const
|
|
759
|
+
const share = typeof flushEnd === 'number' ? flushEnd : flushEnd ? 1 : 0;
|
|
760
|
+
const left = x + (share > 0 ? Math.max(0, width - used) * share : 0);
|
|
692
761
|
rb.rotation.originX = rb.rotation.direction === 'ccw' ? left : left + used;
|
|
693
762
|
rb.rotation.originY = rb.rotation.direction === 'ccw' ? totalHeight : 0;
|
|
694
763
|
}
|
|
@@ -698,8 +767,9 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
698
767
|
return { block: blk, height: totalHeight };
|
|
699
768
|
};
|
|
700
769
|
/** Whether a rotated float on `page` sits flush to the band's right edge:
|
|
701
|
-
* with mirrored margins the spine of a
|
|
702
|
-
|
|
770
|
+
* with mirrored margins the spine of a page whose spine is on its right
|
|
771
|
+
* (a verso of a left-bound book, a recto of a right-bound one). */
|
|
772
|
+
const rotatedFlushEnd = (page) => pageMirrored(resolved, page.index, pageIndexOffset);
|
|
703
773
|
/** Float bands reserved per column in this pass (the fresh-page flush
|
|
704
774
|
* sends single-column floats to the least reserved column). */
|
|
705
775
|
const floatReserved = new Map();
|
|
@@ -846,8 +916,9 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
846
916
|
const alignK = f.align === 'center' ? 0.5 : f.align === 'right' ? 1 : 0;
|
|
847
917
|
const xLeft = slotX + (slotWidth - width) * alignK;
|
|
848
918
|
const slice = sliceOf(f);
|
|
849
|
-
// A side float never turns: it stacks upright in the side column
|
|
850
|
-
|
|
919
|
+
// A side float never turns: it stacks upright in the side column (on a
|
|
920
|
+
// vertical page it is counter-rotated to stand upright there too).
|
|
921
|
+
const rotated = side && !page.flow ? undefined : rotationFor(f, Math.min(...targetCols.map((c) => c.availableHeight)), page);
|
|
851
922
|
// The caption beside the figure, in the band's side column.
|
|
852
923
|
let aside;
|
|
853
924
|
let sideCol;
|
|
@@ -983,7 +1054,7 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
983
1054
|
if (cutBy !== undefined)
|
|
984
1055
|
captionUnderProposals.add(cutBy);
|
|
985
1056
|
}
|
|
986
|
-
const built = buildFloatBlock(f.resourceId, xLeft, width, slice);
|
|
1057
|
+
const built = buildFloatBlock(f.resourceId, xLeft, width, slice, rotated);
|
|
987
1058
|
if (!built)
|
|
988
1059
|
return 'skip';
|
|
989
1060
|
first.availableHeight = Math.max(0, first.availableHeight - need);
|
|
@@ -1057,13 +1128,13 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
1057
1128
|
return 'defer';
|
|
1058
1129
|
if (tableOverflow(f.resourceId) !== 'split')
|
|
1059
1130
|
return 'defer';
|
|
1060
|
-
const split = splitTableFloat(f, width, position, targetCols, page.contentArea, c.availableHeight - (hasBand ? minTextPx : 0), 'strict');
|
|
1131
|
+
const split = splitTableFloat(f, width, position, targetCols, page.contentArea, c.availableHeight - (hasBand ? minTextPx : 0), 'strict', rotated);
|
|
1061
1132
|
if (!split || split === 'none' || split === 'skip')
|
|
1062
1133
|
return 'defer';
|
|
1063
1134
|
slice = split.slice;
|
|
1064
1135
|
rest = split.rest;
|
|
1065
1136
|
cut = true;
|
|
1066
|
-
const m = measureFloat(f.resourceId, width, slice);
|
|
1137
|
+
const m = measureFloat(f.resourceId, width, slice, rotated);
|
|
1067
1138
|
if (!m)
|
|
1068
1139
|
return 'skip';
|
|
1069
1140
|
measure = m;
|
|
@@ -1093,7 +1164,10 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
1093
1164
|
if (rest) {
|
|
1094
1165
|
rest = { ...rest, notBefore: { pageIndex: page.index, columnIndex: targetCols[targetCols.length - 1].index } };
|
|
1095
1166
|
}
|
|
1096
|
-
|
|
1167
|
+
// An upright figure of a vertical page stands at the head of its tier
|
|
1168
|
+
// (`placement.align`: `left` the top, `center`, `right` the foot).
|
|
1169
|
+
const flush = rotated?.upright ? (f.align === 'center' ? 0.5 : f.align === 'right' ? 1 : 0) : rotated ? rotatedFlushEnd(page) : false;
|
|
1170
|
+
const built = buildFloatBlock(f.resourceId, xLeft, width, slice, rotated, flush, aside, mirroredOf(page));
|
|
1097
1171
|
if (!built)
|
|
1098
1172
|
return 'skip';
|
|
1099
1173
|
// The caption beside the figure takes its band of the side column: a
|
|
@@ -1797,6 +1871,7 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
1797
1871
|
currentSection = style;
|
|
1798
1872
|
geomResolved = style ? deriveSectionGeometryConfig(resolved, style) : resolved;
|
|
1799
1873
|
contentArea = geomResolved === resolved ? pageMetrics.contentArea : computePageMetrics(geomResolved).contentArea;
|
|
1874
|
+
setMeasureWritingMode(geomResolved.layout.writingMode);
|
|
1800
1875
|
// A page still empty takes the geometry right away — the document (or
|
|
1801
1876
|
// a chapter laid out on its own) opening with a styled heading.
|
|
1802
1877
|
const page = doc.pages[cursor.pageIndex];
|
|
@@ -1827,7 +1902,7 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
1827
1902
|
// a resource keeps the printed text, whose `:ref` label the source
|
|
1828
1903
|
// does not hold.
|
|
1829
1904
|
if (headingLevels.forBlock(raw)?.textTransform === 'uppercase' && !raw.spans.some((s) => s.ref)) {
|
|
1830
|
-
blk.sourceTitle = flattenTitleBreaks(raw.text);
|
|
1905
|
+
blk.sourceTitle = flattenTitleBreaks(withBookTitleBrackets(raw.text, raw.spans, resolved.cjk).text);
|
|
1831
1906
|
}
|
|
1832
1907
|
}
|
|
1833
1908
|
if (raw.footnoteNote !== undefined)
|
|
@@ -2015,7 +2090,7 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
2015
2090
|
const side = sideColumnOf(page, currentBand(page, cursor));
|
|
2016
2091
|
if (!side || side.bbox.height <= 0.5)
|
|
2017
2092
|
return;
|
|
2018
|
-
const boxes = headingDesignBoxes(design.lvl, design.info, blk.bbox, resolved.page.dpi, doc.metadata, cursor.pageIndex,
|
|
2093
|
+
const boxes = headingDesignBoxes(design.lvl, design.info, blk.bbox, resolved.page.dpi, doc.metadata, cursor.pageIndex, designFramesOn(page), resourceById);
|
|
2019
2094
|
const top = side.bbox.y;
|
|
2020
2095
|
const foot = side.bbox.y + side.bbox.height;
|
|
2021
2096
|
const left = side.bbox.x;
|
|
@@ -2428,9 +2503,11 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
2428
2503
|
};
|
|
2429
2504
|
return { children, childBase: startIdx + 1, realAt, end: { child: children.length, line: 0 }, layoutRange, groups };
|
|
2430
2505
|
};
|
|
2431
|
-
/** Whether a page
|
|
2432
|
-
*
|
|
2433
|
-
|
|
2506
|
+
/** Whether a page swaps its mirrored margins (a verso of a left-bound
|
|
2507
|
+
* book, a recto of a right-bound one: an `'outer'` corner icon hangs on
|
|
2508
|
+
* the left there). A vertical page has no outer side: a box's outer
|
|
2509
|
+
* corner stays where the style puts it. */
|
|
2510
|
+
const mirroredOf = (page) => !page.flow && pageMirrored(resolved, page.index, pageIndexOffset);
|
|
2434
2511
|
/** Where a block's paint ends: its last line's foot (a list tail's box
|
|
2435
2512
|
* bakes its bottom margin in and may reach past a cut with every line
|
|
2436
2513
|
* inside it), else its box's. */
|
|
@@ -2694,7 +2771,9 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
2694
2771
|
}
|
|
2695
2772
|
const width = page.contentArea.width;
|
|
2696
2773
|
const slice = sliceOf(f);
|
|
2697
|
-
|
|
2774
|
+
// On a vertical page the figure stands upright.
|
|
2775
|
+
const upright = page.flow ? uprightOn(page) : undefined;
|
|
2776
|
+
const measure = measureFloat(f.resourceId, width, slice, upright);
|
|
2698
2777
|
if (!measure) {
|
|
2699
2778
|
i++;
|
|
2700
2779
|
continue;
|
|
@@ -2707,7 +2786,7 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
2707
2786
|
i++;
|
|
2708
2787
|
continue;
|
|
2709
2788
|
}
|
|
2710
|
-
const built = buildFloatBlock(f.resourceId, page.contentArea.x, width, slice);
|
|
2789
|
+
const built = buildFloatBlock(f.resourceId, page.contentArea.x, width, slice, upright);
|
|
2711
2790
|
if (!built) {
|
|
2712
2791
|
i++;
|
|
2713
2792
|
continue;
|
|
@@ -3052,8 +3131,8 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
3052
3131
|
const snapUp = (page, v) => page.contentArea.y + Math.ceil((v - page.contentArea.y - 0.01) / baselineGrid) * baselineGrid;
|
|
3053
3132
|
/** The box laid out for `page` and the zone it takes there. */
|
|
3054
3133
|
const zoneOn = (page) => {
|
|
3055
|
-
const ref = anchor.to === 'page' ?
|
|
3056
|
-
: anchor.to === 'bleed' ?
|
|
3134
|
+
const ref = anchor.to === 'page' ? designFramesOn(page).page
|
|
3135
|
+
: anchor.to === 'bleed' ? designFramesOn(page).bleed
|
|
3057
3136
|
: page.contentArea;
|
|
3058
3137
|
const band = cursor.pageIndex === page.index ? currentBand(page, cursor) : 0;
|
|
3059
3138
|
const cols = bandColumns(page, band).filter((c) => c.bbox.height > 0.5);
|
|
@@ -3667,9 +3746,9 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
3667
3746
|
}
|
|
3668
3747
|
else if (name === 'numbering') {
|
|
3669
3748
|
const change = {};
|
|
3670
|
-
// Any spelling of a format (`roman-lower`, `arabic`, `i
|
|
3671
|
-
// unknown one keeps the current format.
|
|
3672
|
-
const fmt = parseNumberFormat(attrs.format);
|
|
3749
|
+
// Any spelling of a format (`roman-lower`, `arabic`, `i`…, `一` in
|
|
3750
|
+
// the document's script); an unknown one keeps the current format.
|
|
3751
|
+
const fmt = parseNumberFormat(attrs.format, resolvedLocale(resolved));
|
|
3673
3752
|
if (fmt)
|
|
3674
3753
|
change.format = fmt;
|
|
3675
3754
|
if (attrs.startAt !== undefined) {
|
|
@@ -3901,9 +3980,15 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
3901
3980
|
const measureWidth = rawBlock.type === 'heading' && opensDefaultOpener(rawBlock)
|
|
3902
3981
|
? doc.pages[cursor.pageIndex].contentArea.width
|
|
3903
3982
|
: col.bbox.width;
|
|
3983
|
+
// A resource on a vertical page stands upright, its frame at most as
|
|
3984
|
+
// wide as the flow is tall (less the float gap it keeps).
|
|
3985
|
+
const blockPage = doc.pages[cursor.pageIndex];
|
|
3986
|
+
const upright = blockPage.flow && rawBlock.type === 'resourceBlock'
|
|
3987
|
+
? { uprightMaxLength: uprightOn(blockPage).length }
|
|
3988
|
+
: {};
|
|
3904
3989
|
let measuredBlock = tryLoose
|
|
3905
3990
|
? measureLooseParagraph(rawBlock, blockIdx, col.bbox.width, blockMeasureCtx, styleOverride, looseLines, trackingLadder, looseOutcome)
|
|
3906
|
-
: measureContentBlock(rawBlock, blockIdx, measureWidth, blockMeasureCtx, { styleOverride });
|
|
3991
|
+
: measureContentBlock(rawBlock, blockIdx, measureWidth, blockMeasureCtx, { styleOverride, ...upright });
|
|
3907
3992
|
// Screen pages (`layout.fitFiguresToPage`): an inline figure a little
|
|
3908
3993
|
// too tall for the room left in its column — under an opener band, say
|
|
3909
3994
|
// — is set smaller to stay with its text rather than leave the rest of
|
|
@@ -3945,7 +4030,7 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
3945
4030
|
/** Tracking the block's lines are set with; a paragraph moved whole into
|
|
3946
4031
|
* a column of another width is measured again, and may change it. */
|
|
3947
4032
|
let { letterSpacingPx } = measuredBlock;
|
|
3948
|
-
const { vdtType, headingLevel, numberPrefix, headingNumber, listBullet, listDepth, listKind, bulletXOffsetInColumn, strikethroughText } = kind;
|
|
4033
|
+
const { vdtType, headingLevel, numberPrefix, numberSeparator, headingNumber, listBullet, listDepth, listKind, bulletXOffsetInColumn, strikethroughText } = kind;
|
|
3949
4034
|
// A structural heading (`hidden`) is placed like any heading — its
|
|
3950
4035
|
// break, keep-with-next and grid snap apply — but with no line height
|
|
3951
4036
|
// and no margins: it takes no room, and renderers skip it.
|
|
@@ -4032,6 +4117,10 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
4032
4117
|
blk.separatorFontString = listBullet.separatorFontString;
|
|
4033
4118
|
blk.separatorColor = listBullet.separatorColor;
|
|
4034
4119
|
blk.separatorX = blk.bulletOffsetX + (listBullet.separatorOffsetPx ?? 0);
|
|
4120
|
+
if (listBullet.prefixText !== undefined) {
|
|
4121
|
+
blk.prefixText = listBullet.prefixText;
|
|
4122
|
+
blk.prefixX = blk.bulletOffsetX + (listBullet.prefixOffsetPx ?? 0);
|
|
4123
|
+
}
|
|
4035
4124
|
}
|
|
4036
4125
|
if (strikethroughText)
|
|
4037
4126
|
blk.strikethroughText = true;
|
|
@@ -4118,14 +4207,15 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
4118
4207
|
...extra,
|
|
4119
4208
|
});
|
|
4120
4209
|
// "Keep with next" for colon-introduced lists: a paragraph ending in `:`
|
|
4121
|
-
//
|
|
4210
|
+
// (or the full-width `:` of Chinese text and its presentation forms `︰`
|
|
4211
|
+
// `﹕`, #211) followed directly by a list acts as a lead-in title — the colon-bearing
|
|
4122
4212
|
// line must share a column with the first list item. Only checked for the
|
|
4123
4213
|
// original, unsplit paragraph (partIndex === 0) on the iteration that is
|
|
4124
4214
|
// about to place it.
|
|
4125
4215
|
const endsWithColon = vdtType === 'paragraph'
|
|
4126
4216
|
&& resolved.bodyText.keepColonWithList
|
|
4127
4217
|
&& nextIsListItem
|
|
4128
|
-
&&
|
|
4218
|
+
&& /[::︰﹕]\s*$/.test(contentBlock.text);
|
|
4129
4219
|
while (remainingLines.length > 0) {
|
|
4130
4220
|
enterBand(blockIdx, partIndex);
|
|
4131
4221
|
const curCol = currentColumn(doc, cursor);
|
|
@@ -4311,13 +4401,13 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
4311
4401
|
const pref = numberPrefix ?? '';
|
|
4312
4402
|
// The lines joined back into the title (EF-162), as the design is
|
|
4313
4403
|
// painted (`buildHeadersAndFooters`).
|
|
4314
|
-
const title = headingTitleText(remainingLines, pref, rawBlock.titleBreaks, rawBlock.text.length);
|
|
4404
|
+
const title = headingTitleText(remainingLines, pref, rawBlock.titleBreaks, rawBlock.text.length, lvl.numberSeparator);
|
|
4315
4405
|
// Span-page openers lay out across the full content area (both
|
|
4316
4406
|
// columns); in-column headings use just the column width.
|
|
4317
4407
|
const pageArea = doc.pages[cursor.pageIndex].contentArea;
|
|
4318
4408
|
const measureWidth = lvl.span === 'page' ? pageArea.width : curCol.bbox.width;
|
|
4319
4409
|
const info = { titleText: title, formattedNumber: pref, numericValue: headingNumber, locale: resolvedLocale(resolved), chapterNumber: chapterNumberByBlock[blockIdx] ?? '', attrs: rawBlock.attrs };
|
|
4320
|
-
const design = measureHeadingDesign(lvl, info, measureWidth, resolved.page.dpi, doc.metadata, cursor.pageIndex,
|
|
4410
|
+
const design = measureHeadingDesign(lvl, info, measureWidth, resolved.page.dpi, doc.metadata, cursor.pageIndex, designFramesOn(doc.pages[cursor.pageIndex]), {
|
|
4321
4411
|
x: lvl.span === 'page' ? pageArea.x : curCol.bbox.x,
|
|
4322
4412
|
y: curCol.bbox.y + (curCol.bbox.height - curCol.availableHeight) + spacingBefore,
|
|
4323
4413
|
}, resourceById);
|
|
@@ -4335,7 +4425,7 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
4335
4425
|
// line whose spaces shrink, a forced break, a run it prints plain):
|
|
4336
4426
|
// the band holds every line it paints (EF-100).
|
|
4337
4427
|
if (opensDefaultOpener(rawBlock)) {
|
|
4338
|
-
const painted = measureDefaultOpenerHeight(lvl, resolved.headings.textAlign, defaultOpenerTitle(remainingLines, pref, rawBlock.titleBreaks, rawBlock.text.length), pref, pageArea.width, resolved.page.dpi, doc.metadata, cursor.pageIndex);
|
|
4428
|
+
const painted = measureDefaultOpenerHeight(lvl, resolved.headings.textAlign, defaultOpenerTitle(remainingLines, pref, rawBlock.titleBreaks, rawBlock.text.length, lvl.numberSeparator), pref, pageArea.width, resolved.page.dpi, doc.metadata, cursor.pageIndex);
|
|
4339
4429
|
if (painted > effectiveRemainHeight)
|
|
4340
4430
|
effectiveRemainHeight = painted;
|
|
4341
4431
|
}
|
|
@@ -4391,8 +4481,11 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
4391
4481
|
blk.contentIndex = blockIdx;
|
|
4392
4482
|
stampBlockExtras(blk, rawBlock);
|
|
4393
4483
|
blk.headingLevel = headingLevel;
|
|
4394
|
-
if (numberPrefix)
|
|
4484
|
+
if (numberPrefix) {
|
|
4395
4485
|
blk.numberPrefix = numberPrefix;
|
|
4486
|
+
if (numberSeparator !== undefined)
|
|
4487
|
+
blk.numberSeparator = numberSeparator;
|
|
4488
|
+
}
|
|
4396
4489
|
blk.lines = resetLinePositions(splitLines, style.lineHeightPx);
|
|
4397
4490
|
blk.dirty = false;
|
|
4398
4491
|
blk.snappedToGrid = false;
|
|
@@ -4590,8 +4683,11 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
4590
4683
|
stampBlockExtras(blk, rawBlock);
|
|
4591
4684
|
if (partIndex === 0) {
|
|
4592
4685
|
blk.headingLevel = headingLevel;
|
|
4593
|
-
if (numberPrefix)
|
|
4686
|
+
if (numberPrefix) {
|
|
4594
4687
|
blk.numberPrefix = numberPrefix;
|
|
4688
|
+
if (numberSeparator !== undefined)
|
|
4689
|
+
blk.numberSeparator = numberSeparator;
|
|
4690
|
+
}
|
|
4595
4691
|
if (headingNumber !== undefined)
|
|
4596
4692
|
blk.headingNumber = headingNumber;
|
|
4597
4693
|
}
|
|
@@ -4854,8 +4950,11 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
4854
4950
|
stampBlockExtras(blk, rawBlock);
|
|
4855
4951
|
if (partIndex === 0) {
|
|
4856
4952
|
blk.headingLevel = headingLevel;
|
|
4857
|
-
if (numberPrefix)
|
|
4953
|
+
if (numberPrefix) {
|
|
4858
4954
|
blk.numberPrefix = numberPrefix;
|
|
4955
|
+
if (numberSeparator !== undefined)
|
|
4956
|
+
blk.numberSeparator = numberSeparator;
|
|
4957
|
+
}
|
|
4859
4958
|
if (headingNumber !== undefined)
|
|
4860
4959
|
blk.headingNumber = headingNumber;
|
|
4861
4960
|
}
|
|
@@ -4957,8 +5056,11 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
4957
5056
|
// `{chapterNumber}` from `numberPrefix`, as the measure did (EF-59).
|
|
4958
5057
|
if (partIndex === 0) {
|
|
4959
5058
|
blk.headingLevel = headingLevel;
|
|
4960
|
-
if (numberPrefix)
|
|
5059
|
+
if (numberPrefix) {
|
|
4961
5060
|
blk.numberPrefix = numberPrefix;
|
|
5061
|
+
if (numberSeparator !== undefined)
|
|
5062
|
+
blk.numberSeparator = numberSeparator;
|
|
5063
|
+
}
|
|
4962
5064
|
if (headingNumber !== undefined)
|
|
4963
5065
|
blk.headingNumber = headingNumber;
|
|
4964
5066
|
}
|
|
@@ -5108,6 +5210,9 @@ export function buildDocumentPass(content, config, cache, options, hints = {}) {
|
|
|
5108
5210
|
return text.length > 0 ? { styleId, text } : undefined;
|
|
5109
5211
|
},
|
|
5110
5212
|
});
|
|
5213
|
+
// Vertical pages: the axis each font's upright characters turn about.
|
|
5214
|
+
if (doc.pages.some((p) => p.flow))
|
|
5215
|
+
stampCentralBaselines(doc);
|
|
5111
5216
|
doc.converged = true;
|
|
5112
5217
|
doc.iterationCount = 1;
|
|
5113
5218
|
return { doc, forcedBreakPages, bandCapProposals, spanPlacedInBand, bandCapsApplied, looseOutcome, captionUnderProposals };
|
|
@@ -5163,8 +5268,14 @@ export function* buildDocumentGen(content, config, cache, options) {
|
|
|
5163
5268
|
// once, located on the pages of the finished layout. Kept apart from
|
|
5164
5269
|
// `doc.warnings`, whose entries keep their postext 1.4 shape.
|
|
5165
5270
|
const found = [...collectContentWarnings(content.markdown, config, content.resources ?? []), ...(indexWarnings.get(doc) ?? [])];
|
|
5166
|
-
|
|
5167
|
-
|
|
5271
|
+
const located = found.length > 0 ? locateContentWarnings(doc, found) : [];
|
|
5272
|
+
// Justified CJK lines the composer could not fill within its tracking cap.
|
|
5273
|
+
const loose = cjkLooseLineWarnings(doc);
|
|
5274
|
+
// Chinese marks placed where the lines are painted (#193), and the
|
|
5275
|
+
// paragraphs whose leading is too tight for their marks or readings.
|
|
5276
|
+
const annotations = annotateDocument(doc, doc.config?.cjk);
|
|
5277
|
+
if (located.length > 0 || loose.length > 0 || annotations.length > 0)
|
|
5278
|
+
doc.contentWarnings = [...located, ...loose, ...annotations];
|
|
5168
5279
|
// Config values the build replaced (an unknown number format, a font
|
|
5169
5280
|
// stack, a side column no column width can take): walked once per build,
|
|
5170
5281
|
// not per pass — they belong to no page.
|