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
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Geometry of ruby readings (#194) and warichu notes (#195) inside a line,
|
|
3
|
+
* for the CJK composer.
|
|
4
|
+
*
|
|
5
|
+
* Everything is in the flow frame: `dx` along the line from where the
|
|
6
|
+
* annotated segment starts, `dy` across it from the line's baseline to the
|
|
7
|
+
* annotation's baseline, positive towards the line's foot (down in
|
|
8
|
+
* horizontal text, left in vertical text). A character's em box is centred
|
|
9
|
+
* on the font's central axis, {@link CENTRAL} em above the baseline, the
|
|
10
|
+
* axis vertical text is set on (`VDTFlowFrame.centralBaselines`) and the
|
|
11
|
+
* middle of a CJK face's ideographic em box in horizontal text.
|
|
12
|
+
*
|
|
13
|
+
* - Ruby over or under the base sits in the line gap, against the base's em
|
|
14
|
+
* box, centred on the base; a reading wider than its base widens the base's
|
|
15
|
+
* box (the base is centred in it) less what it may pass the base by: a
|
|
16
|
+
* quarter of the ruby em onto a neighbour without ruby, none past a line
|
|
17
|
+
* edge (the composer shifts it back), and it keeps a quarter of the ruby
|
|
18
|
+
* em from a neighbour's reading (two zhuyin readings: a quarter of the
|
|
19
|
+
* symbols' em).
|
|
20
|
+
* - Zhuyin right of the base (horizontal text) stacks its symbols in a
|
|
21
|
+
* column beside each character, at 60 % of the ruby size (0.3 em by
|
|
22
|
+
* default, clreq §5.5.3.2), the tone mark right of the column with half
|
|
23
|
+
* of its ink above the top of the last symbol (§5.5.3.3), the
|
|
24
|
+
* neutral-tone dot above the first in a tenth of an em; the character's
|
|
25
|
+
* box grows by the column. Zhuyin over the base of vertical text is the
|
|
26
|
+
* same column down the line, its tone mark and dot standing upright.
|
|
27
|
+
* Tone marks and the dot are placed by their ink (the measurer's ink
|
|
28
|
+
* box): fonts set these modifier letters high in their em box.
|
|
29
|
+
* - A warichu note's part on a line folds into two rows of the note size,
|
|
30
|
+
* centred on the line's axis with no gap between them: the upper row
|
|
31
|
+
* takes characters until it is at least half the part (the second row is
|
|
32
|
+
* never the longer), and one more while the lower row would open with a
|
|
33
|
+
* mark that may not start a line or the upper row would end with one
|
|
34
|
+
* that may not end a line (an opening bracket).
|
|
35
|
+
*/
|
|
36
|
+
import { DEFAULT_CENTRAL_BASELINE } from '../vdt';
|
|
37
|
+
import { measureInkBox, measureTextWidth, onTextWidthCacheClear } from './canvas';
|
|
38
|
+
import { flowTextWidth, fontEm, measuringVertically } from './vertical';
|
|
39
|
+
import { graphemesOf } from './graphemes';
|
|
40
|
+
import { latinReadingLift } from './rubyLift';
|
|
41
|
+
/** The central axis of a face, in em above its baseline. */
|
|
42
|
+
export const CENTRAL = DEFAULT_CENTRAL_BASELINE;
|
|
43
|
+
/** Zhuyin is set at this fraction of the ruby size (0.3 em of the text for
|
|
44
|
+
* the default half-em ruby). */
|
|
45
|
+
export const ZHUYIN_SIZE_RATIO = 0.6;
|
|
46
|
+
const BOPOMOFO_RE = /[-ㄯㆠ-ㆿ]/;
|
|
47
|
+
/** The zhuyin tone marks: ˊ ˇ ˋ (second to fourth tone), ˉ (first, rarely
|
|
48
|
+
* written) and the neutral-tone dot ˙. */
|
|
49
|
+
const TONE_MARKS = new Set(['ˊ', 'ˇ', 'ˋ', 'ˉ']);
|
|
50
|
+
const NEUTRAL_TONE = '˙';
|
|
51
|
+
/** Whether a reading is zhuyin (bopomofo). */
|
|
52
|
+
export function isZhuyin(reading) {
|
|
53
|
+
return BOPOMOFO_RE.test(reading);
|
|
54
|
+
}
|
|
55
|
+
/** `font` at `sizePx`, style, weight and family kept. */
|
|
56
|
+
export function withFontSize(font, sizePx) {
|
|
57
|
+
const m = /^(.*?)(\d*\.?\d+)px(\s*\/\s*[^\s]+)?\s+(.+)$/.exec(font);
|
|
58
|
+
if (!m)
|
|
59
|
+
return font;
|
|
60
|
+
return `${m[1]}${sizePx}px ${m[4]}`;
|
|
61
|
+
}
|
|
62
|
+
/** The baseline, px from the line's baseline, of text of em `rowEm` whose
|
|
63
|
+
* em box is centred `axis` px from the line's baseline. */
|
|
64
|
+
function baselineOf(axis, rowEm) {
|
|
65
|
+
return axis + CENTRAL * rowEm;
|
|
66
|
+
}
|
|
67
|
+
/** Gap between a base and its zhuyin column, in em of the text. */
|
|
68
|
+
const ZHUYIN_GAP_EM = 0.04;
|
|
69
|
+
/** The space the neutral-tone dot takes along the column, in em of the
|
|
70
|
+
* text (clreq §5.5.3.3: a tenth of the base). */
|
|
71
|
+
const NEUTRAL_SPACE_EM = 0.1;
|
|
72
|
+
/** Where the ink of a tone mark or of the neutral-tone dot is centred, in
|
|
73
|
+
* em above its baseline, when the measurer gives no ink box. */
|
|
74
|
+
const TONE_INK_MID_EM = 0.65;
|
|
75
|
+
const inkMids = new Map();
|
|
76
|
+
onTextWidthCacheClear(() => inkMids.clear());
|
|
77
|
+
/** How far above its baseline the ink of `g` is centred in `font`, px. */
|
|
78
|
+
function inkMid(g, font) {
|
|
79
|
+
const key = `${font}\n${g}`;
|
|
80
|
+
let mid = inkMids.get(key);
|
|
81
|
+
if (mid === undefined) {
|
|
82
|
+
const box = measureInkBox(g, font);
|
|
83
|
+
mid = box && box.ascent + box.descent > 0 ? (box.ascent - box.descent) / 2 : TONE_INK_MID_EM * fontEm(font);
|
|
84
|
+
inkMids.set(key, mid);
|
|
85
|
+
}
|
|
86
|
+
return mid;
|
|
87
|
+
}
|
|
88
|
+
/** The start (`dx`) of an upright cell of em `cellEm` on a vertical line
|
|
89
|
+
* whose glyph's ink is centred `mid` px above its baseline, for the ink
|
|
90
|
+
* to be centred `along` px down the line (see `VDTAnnotationRun.upright`:
|
|
91
|
+
* the cell's glyph stands on the font's central axis). */
|
|
92
|
+
function uprightCellAt(along, cellEm, mid) {
|
|
93
|
+
return along - cellEm / 2 - CENTRAL * cellEm + mid;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* The geometry of a ruby base (see the module comment). Measured in the
|
|
97
|
+
* writing mode the composer runs in: a vertical reading advances cell by
|
|
98
|
+
* cell down the line.
|
|
99
|
+
*/
|
|
100
|
+
export function rubyGeometry(input) {
|
|
101
|
+
const { reading, fontString, position, baseWidth, em, allowLeft, allowRight } = input;
|
|
102
|
+
const allow = { allowLeft, allowRight };
|
|
103
|
+
const rtEm = fontEm(fontString);
|
|
104
|
+
const zhuyin = isZhuyin(reading);
|
|
105
|
+
const axis = -CENTRAL * em;
|
|
106
|
+
if (zhuyin) {
|
|
107
|
+
const zEm = rtEm * ZHUYIN_SIZE_RATIO;
|
|
108
|
+
const zFont = withFontSize(fontString, zEm);
|
|
109
|
+
const graphemes = graphemesOf(reading);
|
|
110
|
+
const symbols = graphemes.filter((g) => !TONE_MARKS.has(g) && g !== NEUTRAL_TONE);
|
|
111
|
+
const tone = graphemes.find((g) => TONE_MARKS.has(g));
|
|
112
|
+
const neutral = graphemes.includes(NEUTRAL_TONE);
|
|
113
|
+
const dot = neutral ? NEUTRAL_SPACE_EM * em : 0;
|
|
114
|
+
const runs = [];
|
|
115
|
+
if (position === 'right') {
|
|
116
|
+
// A column right of the character, symbols stacked down it, the
|
|
117
|
+
// column (the dot's space above it included) centred on the
|
|
118
|
+
// character's axis.
|
|
119
|
+
const x0 = baseWidth + ZHUYIN_GAP_EM * em;
|
|
120
|
+
const n = Math.max(1, symbols.length);
|
|
121
|
+
const start = axis - (n * zEm + dot) / 2;
|
|
122
|
+
const top = start + dot;
|
|
123
|
+
symbols.forEach((g, i) => {
|
|
124
|
+
const w = measureTextWidth(g, zFont);
|
|
125
|
+
runs.push({ text: g, dx: x0 + (zEm - w) / 2, dy: baselineOf(top + (i + 0.5) * zEm, zEm), fontString: zFont });
|
|
126
|
+
});
|
|
127
|
+
let width = x0 + zEm;
|
|
128
|
+
if (tone) {
|
|
129
|
+
// Right of the column, half of its ink above the last symbol's top.
|
|
130
|
+
const tw = measureTextWidth(tone, zFont);
|
|
131
|
+
runs.push({ text: tone, dx: x0 + zEm, dy: top + (n - 1) * zEm + inkMid(tone, zFont), fontString: zFont });
|
|
132
|
+
width += tw;
|
|
133
|
+
}
|
|
134
|
+
if (neutral) {
|
|
135
|
+
const nw = measureTextWidth(NEUTRAL_TONE, zFont);
|
|
136
|
+
runs.push({ text: NEUTRAL_TONE, dx: x0 + (zEm - nw) / 2, dy: start + dot / 2 + inkMid(NEUTRAL_TONE, zFont), fontString: zFont });
|
|
137
|
+
}
|
|
138
|
+
return { width, inset: 0, rtWidth: width - baseWidth, runs, ...allow };
|
|
139
|
+
}
|
|
140
|
+
// Over or under the base. In vertical text (over is the right of the
|
|
141
|
+
// column) the symbols make a column down the line beside the base, the
|
|
142
|
+
// tone mark upright beside the column, half of its ink above the last
|
|
143
|
+
// symbol's top, and the dot upright before the first symbol; in
|
|
144
|
+
// horizontal text a row, the tone mark over (under) the right end of
|
|
145
|
+
// the last symbol, half of it past the symbol.
|
|
146
|
+
const vertical = measuringVertically();
|
|
147
|
+
const text = symbols.join('');
|
|
148
|
+
const rtWidth = flowTextWidth(text, zFont);
|
|
149
|
+
const need = rtWidth - 2 * Math.min(allowLeft, allowRight);
|
|
150
|
+
const width = Math.max(baseWidth, need);
|
|
151
|
+
const inset = (width - baseWidth) / 2;
|
|
152
|
+
const dx = (width - rtWidth) / 2;
|
|
153
|
+
const side = position === 'under' ? 1 : -1;
|
|
154
|
+
const rtAxis = axis + side * (em / 2 + zEm / 2);
|
|
155
|
+
runs.push({ text, dx, dy: baselineOf(rtAxis, zEm), fontString: zFont });
|
|
156
|
+
if (tone) {
|
|
157
|
+
const tw = measureTextWidth(tone, zFont);
|
|
158
|
+
const mid = inkMid(tone, zFont);
|
|
159
|
+
if (vertical) {
|
|
160
|
+
const lastTop = dx + (symbols.length > 0 ? rtWidth - flowTextWidth(symbols[symbols.length - 1], zFont) : 0);
|
|
161
|
+
runs.push({ text: tone, dx: uprightCellAt(lastTop, zEm, mid), dy: baselineOf(rtAxis + side * (zEm / 2 + tw / 2), zEm), fontString: zFont, upright: true });
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
runs.push({ text: tone, dx: dx + rtWidth - tw / 2, dy: rtAxis + (side * zEm) / 2 + mid, fontString: zFont });
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
if (neutral) {
|
|
168
|
+
const mid = inkMid(NEUTRAL_TONE, zFont);
|
|
169
|
+
if (vertical) {
|
|
170
|
+
runs.push({ text: NEUTRAL_TONE, dx: uprightCellAt(dx - dot / 2, zEm, mid), dy: baselineOf(rtAxis, zEm), fontString: zFont, upright: true });
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
const nw = measureTextWidth(NEUTRAL_TONE, zFont);
|
|
174
|
+
runs.push({ text: NEUTRAL_TONE, dx: dx - dot / 2 - nw / 2, dy: rtAxis + mid, fontString: zFont });
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return { width, inset, rtWidth, runs, ...allow };
|
|
178
|
+
}
|
|
179
|
+
const rtWidth = flowTextWidth(reading, fontString);
|
|
180
|
+
const need = rtWidth - 2 * Math.min(allowLeft, allowRight);
|
|
181
|
+
const width = Math.max(baseWidth, need);
|
|
182
|
+
const inset = (width - baseWidth) / 2;
|
|
183
|
+
// `right` outside zhuyin (pinyin asked right of horizontal text): over.
|
|
184
|
+
const side = position === 'under' ? 1 : -1;
|
|
185
|
+
const rtAxis = axis + side * (em / 2 + rtEm / 2);
|
|
186
|
+
// A Latin reading over the base: its descenders clear the base (rubyLift.ts).
|
|
187
|
+
const lift = side < 0 ? latinReadingLift(reading, fontString, em) : 0;
|
|
188
|
+
return { width, inset, rtWidth, runs: [{ text: reading, dx: (width - rtWidth) / 2, dy: baselineOf(rtAxis, rtEm) - lift, fontString }], ...allow };
|
|
189
|
+
}
|
|
190
|
+
/** The advance of a reading along the line (a zhuyin reading: its
|
|
191
|
+
* symbols' column, tone marks aside), before its base is sized. */
|
|
192
|
+
export function readingAdvance(reading, fontString, position) {
|
|
193
|
+
if (!isZhuyin(reading))
|
|
194
|
+
return flowTextWidth(reading, fontString);
|
|
195
|
+
const zEm = fontEm(fontString) * ZHUYIN_SIZE_RATIO;
|
|
196
|
+
if (position === 'right')
|
|
197
|
+
return zEm;
|
|
198
|
+
const symbols = graphemesOf(reading).filter((g) => !TONE_MARKS.has(g) && g !== NEUTRAL_TONE).join('');
|
|
199
|
+
return flowTextWidth(symbols, withFontSize(fontString, zEm));
|
|
200
|
+
}
|
|
201
|
+
/** Where the upper row of a warichu part ends (units `[0, at)`): see the
|
|
202
|
+
* module comment. `startProhibited[i]`: unit `i` may not open a row;
|
|
203
|
+
* `endProhibited[i]`: unit `i` may not close one (an opening bracket), so
|
|
204
|
+
* the upper row takes the unit after it too. */
|
|
205
|
+
export function splitNote(widths, startProhibited, endProhibited) {
|
|
206
|
+
const n = widths.length;
|
|
207
|
+
let total = 0;
|
|
208
|
+
for (const w of widths)
|
|
209
|
+
total += w;
|
|
210
|
+
let prefix = 0;
|
|
211
|
+
let at = 0;
|
|
212
|
+
while (at < n && prefix < total / 2 - 1e-9)
|
|
213
|
+
prefix += widths[at++];
|
|
214
|
+
while (at < n && (startProhibited[at] || (at > 0 && endProhibited?.[at - 1])))
|
|
215
|
+
prefix += widths[at++];
|
|
216
|
+
return at;
|
|
217
|
+
}
|
|
218
|
+
/** The advance of a warichu part folded at `at`: the wider row. */
|
|
219
|
+
export function foldWidth(widths, at) {
|
|
220
|
+
let upper = 0;
|
|
221
|
+
let lower = 0;
|
|
222
|
+
widths.forEach((w, i) => {
|
|
223
|
+
if (i < at)
|
|
224
|
+
upper += w;
|
|
225
|
+
else
|
|
226
|
+
lower += w;
|
|
227
|
+
});
|
|
228
|
+
return Math.max(upper, lower);
|
|
229
|
+
}
|
|
230
|
+
/** The baselines of a warichu part's rows (px from the line's baseline):
|
|
231
|
+
* the upper row's em box ends at the line's axis, the lower one's starts
|
|
232
|
+
* there. */
|
|
233
|
+
export function noteRowBaselines(em, noteEm) {
|
|
234
|
+
const axis = -CENTRAL * em;
|
|
235
|
+
return { upper: baselineOf(axis - noteEm / 2, noteEm), lower: baselineOf(axis + noteEm / 2, noteEm) };
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=cjkAnnotate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cjkAnnotate.js","sourceRoot":"","sources":["../../src/measure/cjkAnnotate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import type { CjkLineBreak } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Character classes of Chinese (and Japanese) text layout, after the W3C
|
|
4
|
+
* "Requirements for Chinese Text Layout" (clreq §3.1 and §6.1) and GB/T
|
|
5
|
+
* 15834—2011: what a line may not start or end with at each strictness
|
|
6
|
+
* level, which marks never part (—— ……), and which characters take no
|
|
7
|
+
* inter-character space when a justified line is spread.
|
|
8
|
+
*
|
|
9
|
+
* A class is read from the first code point of a grapheme. The marks Latin
|
|
10
|
+
* text shares with Chinese (— … · “ ” ‘ ’) are classed as Chinese marks
|
|
11
|
+
* here: the table is only consulted for paragraphs set by the CJK composer
|
|
12
|
+
* (`cjkCompose.ts`) and for the joints of words that hold CJK, where they
|
|
13
|
+
* are Chinese punctuation. The apostrophe of a Latin word ("don’t") and the
|
|
14
|
+
* interpunct inside one ("l·l") are kept in their word by the unit builder.
|
|
15
|
+
*/
|
|
16
|
+
/** How strictly lines avoid starting or ending with punctuation (clreq
|
|
17
|
+
* §6.1.1). `none`: anywhere between characters (Taiwan and Hong Kong
|
|
18
|
+
* newspapers). `basic`: no pause or stop mark, closing bracket or quote,
|
|
19
|
+
* connector, interpunct or iteration mark opens a line, and no opening
|
|
20
|
+
* bracket or quote closes one. `gb`: `basic` plus the solidus at either
|
|
21
|
+
* end (GB/T 15834—2011 §5.1.9). `strict`: `gb` plus the two-em dash and
|
|
22
|
+
* the ellipsis at the start of a line. */
|
|
23
|
+
export type CjkLineBreakLevel = CjkLineBreak;
|
|
24
|
+
export declare const CJK_LINE_BREAK_LEVELS: readonly CjkLineBreakLevel[];
|
|
25
|
+
export type CjkClass =
|
|
26
|
+
/** Han, kana, hangul, bopomofo, fullwidth letters and digits, 〇, emoji
|
|
27
|
+
* and the CJK symbols: a line may break before and after each (the
|
|
28
|
+
* composer keeps a run of fullwidth digits or letters together, see
|
|
29
|
+
* {@link isFullwidthAlnum}). */
|
|
30
|
+
'ideograph'
|
|
31
|
+
/** Opening brackets and quotes: (〔[{【〖《〈「『“‘ and ASCII ( [ {. */
|
|
32
|
+
| 'opening'
|
|
33
|
+
/** Closing brackets and quotes: )〕]}】〗》〉」』”’ and ASCII ) ] }. */
|
|
34
|
+
| 'closing'
|
|
35
|
+
/** Pause marks: 、,;: and ASCII , ; : */
|
|
36
|
+
| 'pause'
|
|
37
|
+
/** Stop marks: 。.!?‼⁇⁈⁉ and ASCII . ! ? */
|
|
38
|
+
| 'stop'
|
|
39
|
+
/** Interpuncts: · ‧ ・ ・ */
|
|
40
|
+
| 'interpunct'
|
|
41
|
+
/** Iteration marks and the prolonged sound mark: 々〻ゝゞヽヾー */
|
|
42
|
+
| 'iteration'
|
|
43
|
+
/** Dashes: — ― ⸺ ⸻ (two U+2014 in a row are one unit, 破折号). */
|
|
44
|
+
| 'dash'
|
|
45
|
+
/** Ellipses: … ‥ ⋯ (two in a row are one unit, 省略号). */
|
|
46
|
+
| 'ellipsis'
|
|
47
|
+
/** Connectors: – ~ 〜 ~ 〰 ゠ */
|
|
48
|
+
| 'connector'
|
|
49
|
+
/** Solidus: / / */
|
|
50
|
+
| 'solidus'
|
|
51
|
+
/** The ideographic space U+3000: a fixed character one em wide; a line
|
|
52
|
+
* may break after it, never before. */
|
|
53
|
+
| 'ideoSpace'
|
|
54
|
+
/** Signs a number takes before it: ¥ $ € £ ₩ ¥ $ £ ± − + (the ASCII
|
|
55
|
+
* plus is Western text: `C++` may end a line). */
|
|
56
|
+
| 'prefix'
|
|
57
|
+
/** Signs a number takes after it: % ‰ ‱ ° ℃ ℉ ′ ″ % and the unit
|
|
58
|
+
* squares ㎡ ㎏ ㎞ ㏄ (U+3371–337A, U+3380–33DF, U+33FF), which are set
|
|
59
|
+
* in the Western run of their number. */
|
|
60
|
+
| 'postfix'
|
|
61
|
+
/** Latin, Greek, Cyrillic letters, digits and everything else: set in
|
|
62
|
+
* runs a line never breaks inside. */
|
|
63
|
+
| 'western'
|
|
64
|
+
/** U+200B, the zero-width space: a break opportunity, not printed. */
|
|
65
|
+
| 'zwsp';
|
|
66
|
+
/** Set the level {@link getCjkLineBreak} returns (the build does, from the
|
|
67
|
+
* resolved `cjk.lineBreak`). */
|
|
68
|
+
export declare function setCjkLineBreak(level: CjkLineBreakLevel): void;
|
|
69
|
+
/** The document's line-break level for CJK text (see
|
|
70
|
+
* {@link setCjkLineBreak}); `gb` until a build sets another. */
|
|
71
|
+
export declare function getCjkLineBreak(): CjkLineBreakLevel;
|
|
72
|
+
/** Whether a line may break between two graphemes that touch: `a` (class
|
|
73
|
+
* `aCls`, a CJK grapheme when `aCjk`) and `b` after it. Only next to a CJK
|
|
74
|
+
* grapheme — two Western graphemes never part here — and never before the
|
|
75
|
+
* ideographic space; at `level`, no prohibited mark opens or closes a
|
|
76
|
+
* line. */
|
|
77
|
+
export declare function cjkBreakAllowed(aCls: CjkClass, aCjk: boolean, bCls: CjkClass, bCjk: boolean, level: CjkLineBreakLevel): boolean;
|
|
78
|
+
/** Whether a grapheme of `cls` may not open a line at `level`. */
|
|
79
|
+
export declare function isLineStartProhibited(cls: CjkClass, level: CjkLineBreakLevel): boolean;
|
|
80
|
+
/** Whether a grapheme of `cls` may not close a line at `level`. */
|
|
81
|
+
export declare function isLineEndProhibited(cls: CjkClass, level: CjkLineBreakLevel): boolean;
|
|
82
|
+
/** The squared Latin abbreviations of units in the CJK compatibility
|
|
83
|
+
* block: ㍱ hPa to ㍺ IU, ㎀ pA to ㏟ A∕m, ㏿ gal. They follow a number as
|
|
84
|
+
* % does, in any script, and are no CJK text. */
|
|
85
|
+
export declare function isUnitSquare(cp: number): boolean;
|
|
86
|
+
/** Fullwidth digits 0–9. */
|
|
87
|
+
export declare function isFullwidthDigit(cp: number): boolean;
|
|
88
|
+
/** Fullwidth digits and Latin letters (0–9, A–Z, a–z): set one em
|
|
89
|
+
* wide like ideographs, but a number or a word a line never breaks
|
|
90
|
+
* inside. */
|
|
91
|
+
export declare function isFullwidthAlnum(cp: number): boolean;
|
|
92
|
+
/** The class of a grapheme, read from its first code point. */
|
|
93
|
+
export declare function cjkClassOf(grapheme: string): CjkClass;
|
|
94
|
+
/** Whether a grapheme is set as a Chinese character in a CJK paragraph: it
|
|
95
|
+
* opens a unit of its own instead of joining a Western run. The ASCII
|
|
96
|
+
* marks (`,` `.` `(` `%`…) and the signs of numbers stay in the Western
|
|
97
|
+
* run they touch; the marks Chinese shares with Latin text (— … · “ ” ‘ ’
|
|
98
|
+
* – ~) are Chinese marks, except the apostrophe or the interpunct of a
|
|
99
|
+
* Latin word, which the unit builder keeps in it. */
|
|
100
|
+
export declare function isCjkGrapheme(grapheme: string): boolean;
|
|
101
|
+
/** Whether a grapheme is a letter or digit of Western text (the neighbours
|
|
102
|
+
* of an apostrophe or an interpunct kept inside a word). */
|
|
103
|
+
export declare function isWesternWordChar(grapheme: string | undefined): boolean;
|
|
104
|
+
/** Whether an apostrophe or an interpunct sits inside a Latin word
|
|
105
|
+
* ("don’t", "l·l"): between two letters or digits of Western text. It
|
|
106
|
+
* belongs to the word then — the composer keeps it in the word's run, and
|
|
107
|
+
* vertical text sets it sideways with the word — not to the Chinese text
|
|
108
|
+
* around it. */
|
|
109
|
+
export declare function isWordInnerMark(grapheme: string, prev: string | undefined, next: string | undefined): boolean;
|
|
110
|
+
/** Whether a code point is a mark a browser sets half width when it meets
|
|
111
|
+
* another (CSS `text-spacing-trim`, OpenType `chws`/`halt`): an opening or
|
|
112
|
+
* closing bracket or quote, a pause or stop mark, an interpunct, the
|
|
113
|
+
* ideographic space. The marks of the CJK blocks always; the marks Latin
|
|
114
|
+
* text shares with Chinese (“ ” ‘ ’ · ‧ « »…) only when `shared` is set
|
|
115
|
+
* (the text is Chinese). ASCII never. */
|
|
116
|
+
export declare function isTrimmableMark(cp: number, shared: boolean): boolean;
|
|
117
|
+
/**
|
|
118
|
+
* Where to cut `text` so that no piece holds two CJK marks side by side:
|
|
119
|
+
* the offsets (UTF-16) between each such pair. Chrome (CSS
|
|
120
|
+
* `text-spacing-trim: normal`, and fonts with `chws`) sets the first of
|
|
121
|
+
* `)》`, `”“`, `》。` or `。《` half width when a run is measured or painted
|
|
122
|
+
* whole — `本)》录` in Noto Serif SC is 3.5 em as one run and 4 em
|
|
123
|
+
* character by character — while the CJK composer measures every
|
|
124
|
+
* character alone and adjusts the marks itself (`cjk.punctuationWidth`).
|
|
125
|
+
* Measuring and painting such text piece by piece keeps the browser out of
|
|
126
|
+
* it. `shared` counts the marks Latin text shares with Chinese (“ ” ‘ ’ ·):
|
|
127
|
+
* set it for Chinese text only, so a Latin `’”` is never cut. Empty for
|
|
128
|
+
* text with no such pair.
|
|
129
|
+
*/
|
|
130
|
+
export declare function cjkMarkCuts(text: string, shared: boolean): number[];
|
|
131
|
+
/** `text` cut at {@link cjkMarkCuts}: one piece when there is no cut. */
|
|
132
|
+
export declare function cjkMarkPieces(text: string, shared: boolean): string[];
|
|
133
|
+
//# sourceMappingURL=cjkClasses.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cjkClasses.d.ts","sourceRoot":"","sources":["../../src/measure/cjkClasses.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C;;;;;;;;;;;;;GAaG;AAEH;;;;;;2CAM2C;AAC3C,MAAM,MAAM,iBAAiB,GAAG,YAAY,CAAC;AAE7C,eAAO,MAAM,qBAAqB,EAAE,SAAS,iBAAiB,EAAsC,CAAC;AAErG,MAAM,MAAM,QAAQ;AAClB;;;iCAGiC;AAC/B,WAAW;AACb,iEAAiE;GAC/D,SAAS;AACX,iEAAiE;GAC/D,SAAS;AACX,wCAAwC;GACtC,OAAO;AACT,2CAA2C;GACzC,MAAM;AACR,2BAA2B;GACzB,YAAY;AACd,4DAA4D;GAC1D,WAAW;AACb,+DAA+D;GAC7D,MAAM;AACR,wDAAwD;GACtD,UAAU;AACZ,8BAA8B;GAC5B,WAAW;AACb,mBAAmB;GACjB,SAAS;AACX;wCACwC;GACtC,WAAW;AACb;mDACmD;GACjD,QAAQ;AACV;;0CAE0C;GACxC,SAAS;AACX;uCACuC;GACrC,SAAS;AACX,sEAAsE;GACpE,MAAM,CAAC;AAQX;iCACiC;AACjC,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAE9D;AAED;iEACiE;AACjE,wBAAgB,eAAe,IAAI,iBAAiB,CAEnD;AAED;;;;YAIY;AACZ,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAK/H;AAED,kEAAkE;AAClE,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CActF;AAED,mEAAmE;AACnE,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAWpF;AAeD;;kDAEkD;AAClD,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED,4BAA4B;AAC5B,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;cAEc;AACd,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEpD;AA+BD,+DAA+D;AAC/D,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAqBrD;AAED;;;;;sDAKsD;AACtD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAcvD;AAED;6DAC6D;AAC7D,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAKvE;AAED;;;;iBAIiB;AACjB,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAE7G;AAED;;;;;0CAK0C;AAC1C,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CASpE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,CAWnE;AAED,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,CAWrE"}
|