postext 1.8.6 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__bench__/cjkChapter.bench.test.d.ts +2 -0
- package/dist/__bench__/cjkChapter.bench.test.d.ts.map +1 -0
- package/dist/__bench__/cjkChapter.bench.test.js +71 -0
- package/dist/__bench__/cjkChapter.bench.test.js.map +1 -0
- package/dist/__tests__/bundle.test.js +16 -0
- package/dist/__tests__/bundle.test.js.map +1 -1
- package/dist/__tests__/canvasDirection.test.d.ts +2 -0
- package/dist/__tests__/canvasDirection.test.d.ts.map +1 -0
- package/dist/__tests__/canvasDirection.test.js +45 -0
- package/dist/__tests__/canvasDirection.test.js.map +1 -0
- package/dist/__tests__/chineseLocale.test.d.ts +2 -0
- package/dist/__tests__/chineseLocale.test.d.ts.map +1 -0
- package/dist/__tests__/chineseLocale.test.js +253 -0
- package/dist/__tests__/chineseLocale.test.js.map +1 -0
- package/dist/__tests__/chineseNumbering.test.d.ts +2 -0
- package/dist/__tests__/chineseNumbering.test.d.ts.map +1 -0
- package/dist/__tests__/chineseNumbering.test.js +376 -0
- package/dist/__tests__/chineseNumbering.test.js.map +1 -0
- package/dist/__tests__/cjk/annotations.test.d.ts +2 -0
- package/dist/__tests__/cjk/annotations.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/annotations.test.js +483 -0
- package/dist/__tests__/cjk/annotations.test.js.map +1 -0
- package/dist/__tests__/cjk/annotationsRender.test.d.ts +2 -0
- package/dist/__tests__/cjk/annotationsRender.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/annotationsRender.test.js +263 -0
- package/dist/__tests__/cjk/annotationsRender.test.js.map +1 -0
- package/dist/__tests__/cjk/composer.test.d.ts +2 -0
- package/dist/__tests__/cjk/composer.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/composer.test.js +237 -0
- package/dist/__tests__/cjk/composer.test.js.map +1 -0
- package/dist/__tests__/cjk/composerEdges.test.d.ts +2 -0
- package/dist/__tests__/cjk/composerEdges.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/composerEdges.test.js +352 -0
- package/dist/__tests__/cjk/composerEdges.test.js.map +1 -0
- package/dist/__tests__/cjk/dashRule.test.d.ts +2 -0
- package/dist/__tests__/cjk/dashRule.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/dashRule.test.js +261 -0
- package/dist/__tests__/cjk/dashRule.test.js.map +1 -0
- package/dist/__tests__/cjk/fuzz.test.d.ts +2 -0
- package/dist/__tests__/cjk/fuzz.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/fuzz.test.js +102 -0
- package/dist/__tests__/cjk/fuzz.test.js.map +1 -0
- package/dist/__tests__/cjk/grid.test.d.ts +2 -0
- package/dist/__tests__/cjk/grid.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/grid.test.js +261 -0
- package/dist/__tests__/cjk/grid.test.js.map +1 -0
- package/dist/__tests__/cjk/justifyRender.test.d.ts +2 -0
- package/dist/__tests__/cjk/justifyRender.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/justifyRender.test.js +139 -0
- package/dist/__tests__/cjk/justifyRender.test.js.map +1 -0
- package/dist/__tests__/cjk/latinFastPath.test.d.ts +2 -0
- package/dist/__tests__/cjk/latinFastPath.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/latinFastPath.test.js +208 -0
- package/dist/__tests__/cjk/latinFastPath.test.js.map +1 -0
- package/dist/__tests__/cjk/markCutsLatin.test.d.ts +2 -0
- package/dist/__tests__/cjk/markCutsLatin.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/markCutsLatin.test.js +69 -0
- package/dist/__tests__/cjk/markCutsLatin.test.js.map +1 -0
- package/dist/__tests__/cjk/markRuns.test.d.ts +2 -0
- package/dist/__tests__/cjk/markRuns.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/markRuns.test.js +347 -0
- package/dist/__tests__/cjk/markRuns.test.js.map +1 -0
- package/dist/__tests__/cjk/punctuation.test.d.ts +2 -0
- package/dist/__tests__/cjk/punctuation.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/punctuation.test.js +440 -0
- package/dist/__tests__/cjk/punctuation.test.js.map +1 -0
- package/dist/__tests__/cjk/punctuationRender.test.d.ts +2 -0
- package/dist/__tests__/cjk/punctuationRender.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/punctuationRender.test.js +135 -0
- package/dist/__tests__/cjk/punctuationRender.test.js.map +1 -0
- package/dist/__tests__/cjk/rubyDescenders.test.d.ts +2 -0
- package/dist/__tests__/cjk/rubyDescenders.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/rubyDescenders.test.js +77 -0
- package/dist/__tests__/cjk/rubyDescenders.test.js.map +1 -0
- package/dist/__tests__/cjk/runt.test.d.ts +2 -0
- package/dist/__tests__/cjk/runt.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/runt.test.js +103 -0
- package/dist/__tests__/cjk/runt.test.js.map +1 -0
- package/dist/__tests__/cjk/sharedMarks.test.d.ts +2 -0
- package/dist/__tests__/cjk/sharedMarks.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/sharedMarks.test.js +347 -0
- package/dist/__tests__/cjk/sharedMarks.test.js.map +1 -0
- package/dist/__tests__/cjk/uprightDots.test.d.ts +2 -0
- package/dist/__tests__/cjk/uprightDots.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/uprightDots.test.js +47 -0
- package/dist/__tests__/cjk/uprightDots.test.js.map +1 -0
- package/dist/__tests__/cjk/wordJoiner.test.d.ts +2 -0
- package/dist/__tests__/cjk/wordJoiner.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/wordJoiner.test.js +47 -0
- package/dist/__tests__/cjk/wordJoiner.test.js.map +1 -0
- package/dist/__tests__/cjk/zhuyinTones.test.d.ts +2 -0
- package/dist/__tests__/cjk/zhuyinTones.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/zhuyinTones.test.js +72 -0
- package/dist/__tests__/cjk/zhuyinTones.test.js.map +1 -0
- package/dist/__tests__/contentLocale.test.d.ts +2 -0
- package/dist/__tests__/contentLocale.test.d.ts.map +1 -0
- package/dist/__tests__/contentLocale.test.js +167 -0
- package/dist/__tests__/contentLocale.test.js.map +1 -0
- package/dist/__tests__/defaults/cjk.test.d.ts +2 -0
- package/dist/__tests__/defaults/cjk.test.d.ts.map +1 -0
- package/dist/__tests__/defaults/cjk.test.js +70 -0
- package/dist/__tests__/defaults/cjk.test.js.map +1 -0
- package/dist/__tests__/design/designTextRender.test.js +31 -0
- package/dist/__tests__/design/designTextRender.test.js.map +1 -1
- package/dist/__tests__/design/imageAltText.test.d.ts +2 -0
- package/dist/__tests__/design/imageAltText.test.d.ts.map +1 -0
- package/dist/__tests__/design/imageAltText.test.js +126 -0
- package/dist/__tests__/design/imageAltText.test.js.map +1 -0
- package/dist/__tests__/exports.test.js +61 -0
- package/dist/__tests__/exports.test.js.map +1 -1
- package/dist/__tests__/headingLetterSpacing.test.js +1 -1
- package/dist/__tests__/headingLetterSpacing.test.js.map +1 -1
- package/dist/__tests__/indexChinese.test.d.ts +2 -0
- package/dist/__tests__/indexChinese.test.d.ts.map +1 -0
- package/dist/__tests__/indexChinese.test.js +190 -0
- package/dist/__tests__/indexChinese.test.js.map +1 -0
- package/dist/__tests__/parse/annotations.test.d.ts +2 -0
- package/dist/__tests__/parse/annotations.test.d.ts.map +1 -0
- package/dist/__tests__/parse/annotations.test.js +175 -0
- package/dist/__tests__/parse/annotations.test.js.map +1 -0
- package/dist/__tests__/parse/attrQuoting.test.js +10 -8
- package/dist/__tests__/parse/attrQuoting.test.js.map +1 -1
- package/dist/__tests__/parse/chineseText.test.d.ts +2 -0
- package/dist/__tests__/parse/chineseText.test.d.ts.map +1 -0
- package/dist/__tests__/parse/chineseText.test.js +352 -0
- package/dist/__tests__/parse/chineseText.test.js.map +1 -0
- package/dist/__tests__/parts.test.js +25 -0
- package/dist/__tests__/parts.test.js.map +1 -1
- package/dist/__tests__/pipeline/colonListRoom.test.js +20 -0
- package/dist/__tests__/pipeline/colonListRoom.test.js.map +1 -1
- package/dist/__tests__/presets/hongloumeng.test.d.ts +2 -0
- package/dist/__tests__/presets/hongloumeng.test.d.ts.map +1 -0
- package/dist/__tests__/presets/hongloumeng.test.js +484 -0
- package/dist/__tests__/presets/hongloumeng.test.js.map +1 -0
- package/dist/__tests__/vertical/canvasPaint.test.d.ts +2 -0
- package/dist/__tests__/vertical/canvasPaint.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/canvasPaint.test.js +229 -0
- package/dist/__tests__/vertical/canvasPaint.test.js.map +1 -0
- package/dist/__tests__/vertical/compositionPaint.test.d.ts +2 -0
- package/dist/__tests__/vertical/compositionPaint.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/compositionPaint.test.js +538 -0
- package/dist/__tests__/vertical/compositionPaint.test.js.map +1 -0
- package/dist/__tests__/vertical/geometry.test.d.ts +2 -0
- package/dist/__tests__/vertical/geometry.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/geometry.test.js +276 -0
- package/dist/__tests__/vertical/geometry.test.js.map +1 -0
- package/dist/__tests__/vertical/htmlSmoke.test.d.ts +2 -0
- package/dist/__tests__/vertical/htmlSmoke.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/htmlSmoke.test.js +25 -0
- package/dist/__tests__/vertical/htmlSmoke.test.js.map +1 -0
- package/dist/__tests__/vertical/htmlTurnedCells.test.d.ts +2 -0
- package/dist/__tests__/vertical/htmlTurnedCells.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/htmlTurnedCells.test.js +99 -0
- package/dist/__tests__/vertical/htmlTurnedCells.test.js.map +1 -0
- package/dist/__tests__/vertical/htmlVertical.test.d.ts +2 -0
- package/dist/__tests__/vertical/htmlVertical.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/htmlVertical.test.js +145 -0
- package/dist/__tests__/vertical/htmlVertical.test.js.map +1 -0
- package/dist/__tests__/vertical/lineAxis.test.d.ts +2 -0
- package/dist/__tests__/vertical/lineAxis.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/lineAxis.test.js +128 -0
- package/dist/__tests__/vertical/lineAxis.test.js.map +1 -0
- package/dist/__tests__/vertical/measurePaint.test.d.ts +2 -0
- package/dist/__tests__/vertical/measurePaint.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/measurePaint.test.js +259 -0
- package/dist/__tests__/vertical/measurePaint.test.js.map +1 -0
- package/dist/__tests__/vertical/orientation.test.d.ts +2 -0
- package/dist/__tests__/vertical/orientation.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/orientation.test.js +153 -0
- package/dist/__tests__/vertical/orientation.test.js.map +1 -0
- package/dist/__tests__/vertical/stub.d.ts +8 -0
- package/dist/__tests__/vertical/stub.d.ts.map +1 -0
- package/dist/__tests__/vertical/stub.js +37 -0
- package/dist/__tests__/vertical/stub.js.map +1 -0
- package/dist/__tests__/vertical/tateChuYoko.test.d.ts +2 -0
- package/dist/__tests__/vertical/tateChuYoko.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/tateChuYoko.test.js +270 -0
- package/dist/__tests__/vertical/tateChuYoko.test.js.map +1 -0
- package/dist/__tests__/vertical/uprightResources.test.d.ts +2 -0
- package/dist/__tests__/vertical/uprightResources.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/uprightResources.test.js +182 -0
- package/dist/__tests__/vertical/uprightResources.test.js.map +1 -0
- package/dist/__tests__/vertical/verticalDesignText.test.d.ts +2 -0
- package/dist/__tests__/vertical/verticalDesignText.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/verticalDesignText.test.js +190 -0
- package/dist/__tests__/vertical/verticalDesignText.test.js.map +1 -0
- package/dist/__tests__/vertical/verticalSpans.d.ts +25 -0
- package/dist/__tests__/vertical/verticalSpans.d.ts.map +1 -0
- package/dist/__tests__/vertical/verticalSpans.js +39 -0
- package/dist/__tests__/vertical/verticalSpans.js.map +1 -0
- package/dist/__tests__/vertical/verticalTwins.test.d.ts +2 -0
- package/dist/__tests__/vertical/verticalTwins.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/verticalTwins.test.js +71 -0
- package/dist/__tests__/vertical/verticalTwins.test.js.map +1 -0
- package/dist/bundle/adapters.d.ts +14 -5
- package/dist/bundle/adapters.d.ts.map +1 -1
- package/dist/bundle/adapters.js +4 -3
- package/dist/bundle/adapters.js.map +1 -1
- package/dist/bundle/codec.d.ts.map +1 -1
- package/dist/bundle/codec.js +27 -4
- package/dist/bundle/codec.js.map +1 -1
- package/dist/bundle/index.d.ts +1 -1
- package/dist/bundle/index.d.ts.map +1 -1
- package/dist/bundle/manifest.d.ts +6 -4
- package/dist/bundle/manifest.d.ts.map +1 -1
- package/dist/bundle/manifest.js +31 -32
- package/dist/bundle/manifest.js.map +1 -1
- package/dist/bundle/types.d.ts +7 -2
- package/dist/bundle/types.d.ts.map +1 -1
- package/dist/canvas-backend/annotations.d.ts +31 -0
- package/dist/canvas-backend/annotations.d.ts.map +1 -0
- package/dist/canvas-backend/annotations.js +120 -0
- package/dist/canvas-backend/annotations.js.map +1 -0
- package/dist/canvas-backend/blockRender.d.ts.map +1 -1
- package/dist/canvas-backend/blockRender.js +195 -15
- package/dist/canvas-backend/blockRender.js.map +1 -1
- package/dist/canvas-backend/decorations.d.ts +5 -0
- package/dist/canvas-backend/decorations.d.ts.map +1 -1
- package/dist/canvas-backend/decorations.js +27 -0
- package/dist/canvas-backend/decorations.js.map +1 -1
- package/dist/canvas-backend/headerFooter.d.ts.map +1 -1
- package/dist/canvas-backend/headerFooter.js +32 -16
- package/dist/canvas-backend/headerFooter.js.map +1 -1
- package/dist/canvas-backend/index.d.ts +2 -0
- package/dist/canvas-backend/index.d.ts.map +1 -1
- package/dist/canvas-backend/index.js +62 -2
- package/dist/canvas-backend/index.js.map +1 -1
- package/dist/canvas-backend/renderResourceBlock.d.ts.map +1 -1
- package/dist/canvas-backend/renderResourceBlock.js +42 -5
- package/dist/canvas-backend/renderResourceBlock.js.map +1 -1
- package/dist/canvas-backend/segmentText.d.ts +23 -0
- package/dist/canvas-backend/segmentText.d.ts.map +1 -0
- package/dist/canvas-backend/segmentText.js +41 -0
- package/dist/canvas-backend/segmentText.js.map +1 -0
- package/dist/canvas-backend/verticalText.d.ts +113 -0
- package/dist/canvas-backend/verticalText.d.ts.map +1 -0
- package/dist/canvas-backend/verticalText.js +437 -0
- package/dist/canvas-backend/verticalText.js.map +1 -0
- package/dist/chineseNumerals.d.ts +39 -0
- package/dist/chineseNumerals.d.ts.map +1 -0
- package/dist/chineseNumerals.js +192 -0
- package/dist/chineseNumerals.js.map +1 -0
- package/dist/cjkMarks.d.ts +61 -0
- package/dist/cjkMarks.d.ts.map +1 -0
- package/dist/cjkMarks.js +441 -0
- package/dist/cjkMarks.js.map +1 -0
- package/dist/columnClip.d.ts +13 -4
- package/dist/columnClip.d.ts.map +1 -1
- package/dist/columnClip.js +33 -5
- package/dist/columnClip.js.map +1 -1
- package/dist/configWarnings.d.ts.map +1 -1
- package/dist/configWarnings.js +18 -3
- package/dist/configWarnings.js.map +1 -1
- package/dist/defaults/bodyText.d.ts +4 -1
- package/dist/defaults/bodyText.d.ts.map +1 -1
- package/dist/defaults/bodyText.js +27 -5
- package/dist/defaults/bodyText.js.map +1 -1
- package/dist/defaults/calloutStyles.js +1 -1
- package/dist/defaults/calloutStyles.js.map +1 -1
- package/dist/defaults/captionStyle.d.ts.map +1 -1
- package/dist/defaults/captionStyle.js +14 -0
- package/dist/defaults/captionStyle.js.map +1 -1
- package/dist/defaults/cjk.d.ts +33 -0
- package/dist/defaults/cjk.d.ts.map +1 -0
- package/dist/defaults/cjk.js +234 -0
- package/dist/defaults/cjk.js.map +1 -0
- package/dist/defaults/headerFooter.d.ts.map +1 -1
- package/dist/defaults/headerFooter.js +2 -0
- package/dist/defaults/headerFooter.js.map +1 -1
- package/dist/defaults/headingStyles.d.ts.map +1 -1
- package/dist/defaults/headingStyles.js +4 -0
- package/dist/defaults/headingStyles.js.map +1 -1
- package/dist/defaults/headings.d.ts.map +1 -1
- package/dist/defaults/headings.js +13 -6
- package/dist/defaults/headings.js.map +1 -1
- package/dist/defaults/index.d.ts +1 -0
- package/dist/defaults/index.d.ts.map +1 -1
- package/dist/defaults/index.js +10 -1
- package/dist/defaults/index.js.map +1 -1
- package/dist/defaults/indexConfig.d.ts +2 -1
- package/dist/defaults/indexConfig.d.ts.map +1 -1
- package/dist/defaults/indexConfig.js +5 -0
- package/dist/defaults/indexConfig.js.map +1 -1
- package/dist/defaults/layout.d.ts.map +1 -1
- package/dist/defaults/layout.js +7 -0
- package/dist/defaults/layout.js.map +1 -1
- package/dist/defaults/orderedLists.d.ts +5 -2
- package/dist/defaults/orderedLists.d.ts.map +1 -1
- package/dist/defaults/orderedLists.js +20 -5
- package/dist/defaults/orderedLists.js.map +1 -1
- package/dist/defaults/page.d.ts +8 -2
- package/dist/defaults/page.d.ts.map +1 -1
- package/dist/defaults/page.js +24 -7
- package/dist/defaults/page.js.map +1 -1
- package/dist/defaults/resourceTypes.d.ts +3 -3
- package/dist/defaults/resourceTypes.d.ts.map +1 -1
- package/dist/defaults/resourceTypes.js +23 -9
- package/dist/defaults/resourceTypes.js.map +1 -1
- package/dist/defaults/tableStyle.d.ts.map +1 -1
- package/dist/defaults/tableStyle.js +8 -5
- package/dist/defaults/tableStyle.js.map +1 -1
- package/dist/design/layout.d.ts +33 -0
- package/dist/design/layout.d.ts.map +1 -1
- package/dist/design/layout.js +124 -18
- package/dist/design/layout.js.map +1 -1
- package/dist/design/placeholders.d.ts.map +1 -1
- package/dist/design/placeholders.js +5 -1
- package/dist/design/placeholders.js.map +1 -1
- package/dist/design/richText.d.ts +24 -4
- package/dist/design/richText.d.ts.map +1 -1
- package/dist/design/richText.js +77 -16
- package/dist/design/richText.js.map +1 -1
- package/dist/html-backend.d.ts.map +1 -1
- package/dist/html-backend.js +635 -25
- package/dist/html-backend.js.map +1 -1
- package/dist/htmlAnnotations.d.ts +29 -0
- package/dist/htmlAnnotations.d.ts.map +1 -0
- package/dist/htmlAnnotations.js +86 -0
- package/dist/htmlAnnotations.js.map +1 -0
- package/dist/hyphenate.js +2 -1
- package/dist/hyphenate.js.map +1 -1
- package/dist/index.d.ts +28 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -8
- package/dist/index.js.map +1 -1
- package/dist/knuthPlass/pretextAdapter.d.ts +4 -1
- package/dist/knuthPlass/pretextAdapter.d.ts.map +1 -1
- package/dist/knuthPlass/pretextAdapter.js +9 -5
- package/dist/knuthPlass/pretextAdapter.js.map +1 -1
- package/dist/knuthPlass/richAdapter.d.ts +15 -2
- package/dist/knuthPlass/richAdapter.d.ts.map +1 -1
- package/dist/knuthPlass/richAdapter.js +16 -6
- package/dist/knuthPlass/richAdapter.js.map +1 -1
- package/dist/knuthPlass/tracking.d.ts +1 -1
- package/dist/knuthPlass/tracking.d.ts.map +1 -1
- package/dist/knuthPlass/tracking.js +4 -3
- package/dist/knuthPlass/tracking.js.map +1 -1
- package/dist/knuthPlass/types.d.ts +3 -0
- package/dist/knuthPlass/types.d.ts.map +1 -1
- package/dist/lineInk.d.ts +13 -0
- package/dist/lineInk.d.ts.map +1 -1
- package/dist/lineInk.js +28 -1
- package/dist/lineInk.js.map +1 -1
- package/dist/locale.d.ts +91 -3
- package/dist/locale.d.ts.map +1 -1
- package/dist/locale.js +245 -1
- package/dist/locale.js.map +1 -1
- package/dist/looseLines.d.ts +11 -1
- package/dist/looseLines.d.ts.map +1 -1
- package/dist/looseLines.js +26 -1
- package/dist/looseLines.js.map +1 -1
- package/dist/measure/cache.d.ts.map +1 -1
- package/dist/measure/cache.js +51 -3
- package/dist/measure/cache.js.map +1 -1
- package/dist/measure/canvas.d.ts +25 -0
- package/dist/measure/canvas.d.ts.map +1 -1
- package/dist/measure/canvas.js +90 -1
- package/dist/measure/canvas.js.map +1 -1
- package/dist/measure/cjk.d.ts +8 -13
- package/dist/measure/cjk.d.ts.map +1 -1
- package/dist/measure/cjk.js +29 -53
- package/dist/measure/cjk.js.map +1 -1
- package/dist/measure/cjkAnnotate.d.ts +96 -0
- package/dist/measure/cjkAnnotate.d.ts.map +1 -0
- package/dist/measure/cjkAnnotate.js +237 -0
- package/dist/measure/cjkAnnotate.js.map +1 -0
- package/dist/measure/cjkClasses.d.ts +133 -0
- package/dist/measure/cjkClasses.d.ts.map +1 -0
- package/dist/measure/cjkClasses.js +273 -0
- package/dist/measure/cjkClasses.js.map +1 -0
- package/dist/measure/cjkCompose.d.ts +86 -0
- package/dist/measure/cjkCompose.d.ts.map +1 -0
- package/dist/measure/cjkCompose.js +2022 -0
- package/dist/measure/cjkCompose.js.map +1 -0
- package/dist/measure/cjkPunctuation.d.ts +248 -0
- package/dist/measure/cjkPunctuation.d.ts.map +1 -0
- package/dist/measure/cjkPunctuation.js +492 -0
- package/dist/measure/cjkPunctuation.js.map +1 -0
- package/dist/measure/graphemes.d.ts +13 -0
- package/dist/measure/graphemes.d.ts.map +1 -0
- package/dist/measure/graphemes.js +38 -0
- package/dist/measure/graphemes.js.map +1 -0
- package/dist/measure/index.d.ts +3 -0
- package/dist/measure/index.d.ts.map +1 -1
- package/dist/measure/index.js +2 -0
- package/dist/measure/index.js.map +1 -1
- package/dist/measure/links.d.ts +6 -2
- package/dist/measure/links.d.ts.map +1 -1
- package/dist/measure/links.js +15 -5
- package/dist/measure/links.js.map +1 -1
- package/dist/measure/markCuts.d.ts +37 -0
- package/dist/measure/markCuts.d.ts.map +1 -0
- package/dist/measure/markCuts.js +77 -0
- package/dist/measure/markCuts.js.map +1 -0
- package/dist/measure/plain.d.ts.map +1 -1
- package/dist/measure/plain.js +33 -11
- package/dist/measure/plain.js.map +1 -1
- package/dist/measure/rich.d.ts +88 -1
- package/dist/measure/rich.d.ts.map +1 -1
- package/dist/measure/rich.js +233 -111
- package/dist/measure/rich.js.map +1 -1
- package/dist/measure/rubyLift.d.ts +11 -0
- package/dist/measure/rubyLift.d.ts.map +1 -0
- package/dist/measure/rubyLift.js +57 -0
- package/dist/measure/rubyLift.js.map +1 -0
- package/dist/measure/spaces.d.ts +12 -2
- package/dist/measure/spaces.d.ts.map +1 -1
- package/dist/measure/spaces.js +21 -7
- package/dist/measure/spaces.js.map +1 -1
- package/dist/measure/types.d.ts +20 -1
- package/dist/measure/types.d.ts.map +1 -1
- package/dist/measure/types.js.map +1 -1
- package/dist/measure/vertical.d.ts +104 -0
- package/dist/measure/vertical.d.ts.map +1 -0
- package/dist/measure/vertical.js +184 -0
- package/dist/measure/vertical.js.map +1 -0
- package/dist/numberWords.d.ts +3 -10
- package/dist/numberWords.d.ts.map +1 -1
- package/dist/numberWords.js +21 -9
- package/dist/numberWords.js.map +1 -1
- package/dist/numbering.d.ts +23 -5
- package/dist/numbering.d.ts.map +1 -1
- package/dist/numbering.js +99 -14
- package/dist/numbering.js.map +1 -1
- package/dist/parse/annotations.d.ts +101 -0
- package/dist/parse/annotations.d.ts.map +1 -0
- package/dist/parse/annotations.js +556 -0
- package/dist/parse/annotations.js.map +1 -0
- package/dist/parse/attrs.d.ts +48 -1
- package/dist/parse/attrs.d.ts.map +1 -1
- package/dist/parse/attrs.js +121 -8
- package/dist/parse/attrs.js.map +1 -1
- package/dist/parse/blockParser.d.ts.map +1 -1
- package/dist/parse/blockParser.js +50 -24
- package/dist/parse/blockParser.js.map +1 -1
- package/dist/parse/index.d.ts +3 -1
- package/dist/parse/index.d.ts.map +1 -1
- package/dist/parse/index.js +1 -0
- package/dist/parse/index.js.map +1 -1
- package/dist/parse/injectSpans.d.ts +3 -1
- package/dist/parse/injectSpans.d.ts.map +1 -1
- package/dist/parse/injectSpans.js +29 -8
- package/dist/parse/injectSpans.js.map +1 -1
- package/dist/parse/inlineFormatting.d.ts +38 -6
- package/dist/parse/inlineFormatting.d.ts.map +1 -1
- package/dist/parse/inlineFormatting.js +139 -26
- package/dist/parse/inlineFormatting.js.map +1 -1
- package/dist/parse/inlineSnippet.d.ts +2 -1
- package/dist/parse/inlineSnippet.d.ts.map +1 -1
- package/dist/parse/inlineSnippet.js +6 -2
- package/dist/parse/inlineSnippet.js.map +1 -1
- package/dist/parse/orientationMarks.d.ts +49 -0
- package/dist/parse/orientationMarks.d.ts.map +1 -0
- package/dist/parse/orientationMarks.js +138 -0
- package/dist/parse/orientationMarks.js.map +1 -0
- package/dist/parse/softBreaks.d.ts +56 -0
- package/dist/parse/softBreaks.d.ts.map +1 -0
- package/dist/parse/softBreaks.js +271 -0
- package/dist/parse/softBreaks.js.map +1 -0
- package/dist/parse/sourceMapping.d.ts.map +1 -1
- package/dist/parse/sourceMapping.js +41 -0
- package/dist/parse/sourceMapping.js.map +1 -1
- package/dist/parse/types.d.ts +84 -0
- package/dist/parse/types.d.ts.map +1 -1
- package/dist/pipeline/annotations.d.ts +56 -0
- package/dist/pipeline/annotations.d.ts.map +1 -0
- package/dist/pipeline/annotations.js +181 -0
- package/dist/pipeline/annotations.js.map +1 -0
- package/dist/pipeline/build.d.ts.map +1 -1
- package/dist/pipeline/build.js +158 -47
- package/dist/pipeline/build.js.map +1 -1
- package/dist/pipeline/buildBlockKind.d.ts +3 -0
- package/dist/pipeline/buildBlockKind.d.ts.map +1 -1
- package/dist/pipeline/buildBlockKind.js +5 -3
- package/dist/pipeline/buildBlockKind.js.map +1 -1
- package/dist/pipeline/buildHelpers.d.ts +36 -6
- package/dist/pipeline/buildHelpers.d.ts.map +1 -1
- package/dist/pipeline/buildHelpers.js +55 -8
- package/dist/pipeline/buildHelpers.js.map +1 -1
- package/dist/pipeline/buildMeasurement.d.ts +4 -0
- package/dist/pipeline/buildMeasurement.d.ts.map +1 -1
- package/dist/pipeline/buildMeasurement.js +3 -1
- package/dist/pipeline/buildMeasurement.js.map +1 -1
- package/dist/pipeline/calloutLayout.d.ts.map +1 -1
- package/dist/pipeline/calloutLayout.js +25 -11
- package/dist/pipeline/calloutLayout.js.map +1 -1
- package/dist/pipeline/cjkGrid.d.ts +133 -0
- package/dist/pipeline/cjkGrid.d.ts.map +1 -0
- package/dist/pipeline/cjkGrid.js +191 -0
- package/dist/pipeline/cjkGrid.js.map +1 -0
- package/dist/pipeline/config.d.ts +13 -9
- package/dist/pipeline/config.d.ts.map +1 -1
- package/dist/pipeline/config.js +43 -18
- package/dist/pipeline/config.js.map +1 -1
- package/dist/pipeline/contentWarnings.d.ts +10 -0
- package/dist/pipeline/contentWarnings.d.ts.map +1 -1
- package/dist/pipeline/contentWarnings.js +174 -2
- package/dist/pipeline/contentWarnings.js.map +1 -1
- package/dist/pipeline/floatPlacement.d.ts +9 -3
- package/dist/pipeline/floatPlacement.d.ts.map +1 -1
- package/dist/pipeline/floatPlacement.js +17 -6
- package/dist/pipeline/floatPlacement.js.map +1 -1
- package/dist/pipeline/headerFooter.d.ts +5 -2
- package/dist/pipeline/headerFooter.d.ts.map +1 -1
- package/dist/pipeline/headerFooter.js +123 -28
- package/dist/pipeline/headerFooter.js.map +1 -1
- package/dist/pipeline/headingDesignCuts.d.ts.map +1 -1
- package/dist/pipeline/headingDesignCuts.js +3 -1
- package/dist/pipeline/headingDesignCuts.js.map +1 -1
- package/dist/pipeline/headingStyles.d.ts +9 -3
- package/dist/pipeline/headingStyles.d.ts.map +1 -1
- package/dist/pipeline/headingStyles.js +23 -5
- package/dist/pipeline/headingStyles.js.map +1 -1
- package/dist/pipeline/indexDirective.d.ts.map +1 -1
- package/dist/pipeline/indexDirective.js +64 -20
- package/dist/pipeline/indexDirective.js.map +1 -1
- package/dist/pipeline/indexGroups.d.ts +55 -0
- package/dist/pipeline/indexGroups.d.ts.map +1 -0
- package/dist/pipeline/indexGroups.js +151 -0
- package/dist/pipeline/indexGroups.js.map +1 -0
- package/dist/pipeline/lists.d.ts +17 -0
- package/dist/pipeline/lists.d.ts.map +1 -1
- package/dist/pipeline/lists.js +43 -51
- package/dist/pipeline/lists.js.map +1 -1
- package/dist/pipeline/measureContentBlock.d.ts +3 -0
- package/dist/pipeline/measureContentBlock.d.ts.map +1 -1
- package/dist/pipeline/measureContentBlock.js +31 -4
- package/dist/pipeline/measureContentBlock.js.map +1 -1
- package/dist/pipeline/outline.d.ts.map +1 -1
- package/dist/pipeline/outline.js +13 -8
- package/dist/pipeline/outline.js.map +1 -1
- package/dist/pipeline/parts.d.ts +6 -3
- package/dist/pipeline/parts.d.ts.map +1 -1
- package/dist/pipeline/parts.js +28 -5
- package/dist/pipeline/parts.js.map +1 -1
- package/dist/pipeline/placeholders.d.ts +11 -0
- package/dist/pipeline/placeholders.d.ts.map +1 -1
- package/dist/pipeline/placeholders.js +48 -18
- package/dist/pipeline/placeholders.js.map +1 -1
- package/dist/pipeline/placement.d.ts +10 -6
- package/dist/pipeline/placement.d.ts.map +1 -1
- package/dist/pipeline/placement.js +33 -16
- package/dist/pipeline/placement.js.map +1 -1
- package/dist/pipeline/resourceLayout.d.ts +18 -1
- package/dist/pipeline/resourceLayout.d.ts.map +1 -1
- package/dist/pipeline/resourceLayout.js +109 -21
- package/dist/pipeline/resourceLayout.js.map +1 -1
- package/dist/pipeline/toc.d.ts.map +1 -1
- package/dist/pipeline/toc.js +6 -5
- package/dist/pipeline/toc.js.map +1 -1
- package/dist/pipeline/verticalMetrics.d.ts +14 -0
- package/dist/pipeline/verticalMetrics.d.ts.map +1 -0
- package/dist/pipeline/verticalMetrics.js +154 -0
- package/dist/pipeline/verticalMetrics.js.map +1 -0
- package/dist/types.d.ts +344 -13
- package/dist/types.d.ts.map +1 -1
- package/dist/vdt.d.ts +396 -6
- package/dist/vdt.d.ts.map +1 -1
- package/dist/vdt.js +49 -0
- package/dist/vdt.js.map +1 -1
- package/dist/writingMode.d.ts +156 -0
- package/dist/writingMode.d.ts.map +1 -0
- package/dist/writingMode.js +291 -0
- package/dist/writingMode.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Measurement in vertical text (`layout.writingMode: 'vertical-rl'`).
|
|
3
|
+
*
|
|
4
|
+
* A vertical line is measured as a horizontal one in the turned flow frame
|
|
5
|
+
* (see `VDTPage.flow`), cut into the runs the renderers paint
|
|
6
|
+
* (`verticalRuns`): a Latin word or number set sideways keeps its
|
|
7
|
+
* horizontal advance, and every character that stands in a cell of its own
|
|
8
|
+
* (Han, Chinese punctuation, dashes, ellipses, and the symbols Unicode sets
|
|
9
|
+
* upright — × © ± ℃ ① —, inside a Latin word or number too) advances its
|
|
10
|
+
* cell down the line, whatever its horizontal width. {@link cellAdvance} is
|
|
11
|
+
* the one place a cell's advance is decided; the composer then applies the
|
|
12
|
+
* punctuation widths (`cjkPunctuation.ts`: compression, line-edge trims,
|
|
13
|
+
* hanging, the Han–Latin space) to the cells as it does to horizontal
|
|
14
|
+
* advances, along the line. {@link verticalTextWidth} measures any run of
|
|
15
|
+
* text with it.
|
|
16
|
+
*/
|
|
17
|
+
import { measureTextWidth, measureInkBox, onTextWidthCacheClear } from './canvas';
|
|
18
|
+
import { isVerticalCell, verticalCellEms, verticalRuns } from '../writingMode';
|
|
19
|
+
import { graphemesOf } from './graphemes';
|
|
20
|
+
import { DEFAULT_CENTRAL_BASELINE } from '../vdt';
|
|
21
|
+
const FONT_SIZE_RE = /(\d*\.?\d+)px/;
|
|
22
|
+
let measureWritingMode = 'horizontal-tb';
|
|
23
|
+
let measureRegion = 'mainland';
|
|
24
|
+
let measureUprightDigits = 2;
|
|
25
|
+
/** Set the writing mode text is measured in, and the Chinese region whose
|
|
26
|
+
* cells it uses (the mainland interpunct takes half a cell). The build
|
|
27
|
+
* does, from the layout of the pages it is placing (a styled section may
|
|
28
|
+
* change it), and puts back what it found when it is done. */
|
|
29
|
+
export function setMeasureWritingMode(mode, region = measureRegion) {
|
|
30
|
+
measureWritingMode = mode === 'vertical-rl' ? 'vertical-rl' : 'horizontal-tb';
|
|
31
|
+
measureRegion = region;
|
|
32
|
+
}
|
|
33
|
+
/** The writing mode text is measured in (see {@link setMeasureWritingMode});
|
|
34
|
+
* horizontal outside a build. */
|
|
35
|
+
export function getMeasureWritingMode() {
|
|
36
|
+
return measureWritingMode;
|
|
37
|
+
}
|
|
38
|
+
/** Set how many ASCII digits a number may have to be set in one upright
|
|
39
|
+
* cell in vertical text (`cjk.uprightDigits`; 0: none). The build does,
|
|
40
|
+
* from the document's configuration, and puts back what it found. */
|
|
41
|
+
export function setMeasureUprightDigits(digits) {
|
|
42
|
+
measureUprightDigits = digits;
|
|
43
|
+
}
|
|
44
|
+
/** See {@link setMeasureUprightDigits}; 2 outside a build. */
|
|
45
|
+
export function getMeasureUprightDigits() {
|
|
46
|
+
return measureUprightDigits;
|
|
47
|
+
}
|
|
48
|
+
/** The Chinese region vertical cells are measured for. */
|
|
49
|
+
export function getMeasureRegion() {
|
|
50
|
+
return measureRegion;
|
|
51
|
+
}
|
|
52
|
+
/** Whether text is measured vertically now. */
|
|
53
|
+
export function measuringVertically() {
|
|
54
|
+
return measureWritingMode === 'vertical-rl';
|
|
55
|
+
}
|
|
56
|
+
/** Run `fn` with text measured in `mode` (and `region`), then put back the
|
|
57
|
+
* mode in force before — also when `fn` throws. */
|
|
58
|
+
export function withMeasureWritingMode(mode, fn, region = measureRegion) {
|
|
59
|
+
const prevMode = measureWritingMode;
|
|
60
|
+
const prevRegion = measureRegion;
|
|
61
|
+
if (prevMode === mode && prevRegion === region)
|
|
62
|
+
return fn();
|
|
63
|
+
setMeasureWritingMode(mode, region);
|
|
64
|
+
try {
|
|
65
|
+
return fn();
|
|
66
|
+
}
|
|
67
|
+
finally {
|
|
68
|
+
measureWritingMode = prevMode;
|
|
69
|
+
measureRegion = prevRegion;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/** The em of a font string (its size in px), 16 when it names none. */
|
|
73
|
+
export function fontEm(font) {
|
|
74
|
+
const m = FONT_SIZE_RE.exec(font);
|
|
75
|
+
return m ? parseFloat(m[1]) : 16;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* The advance of one CJK grapheme along its line. Horizontal: its measured
|
|
79
|
+
* width. Vertical: its cell for every character that stands in one (one
|
|
80
|
+
* em; half an em for the mainland interpunct, `verticalCellEms`); a
|
|
81
|
+
* character set sideways keeps its horizontal width. `cls` is the
|
|
82
|
+
* grapheme's line-break class, when the caller has it. This is a mark's
|
|
83
|
+
* full advance: the composition takes its blank off afterwards
|
|
84
|
+
* (`punctuationBox`), in either writing mode.
|
|
85
|
+
*/
|
|
86
|
+
export function cellAdvance(grapheme, font, vertical, cls) {
|
|
87
|
+
if (vertical && isVerticalCell(grapheme))
|
|
88
|
+
return fontEm(font) * verticalCellEms(grapheme, measureRegion, cls);
|
|
89
|
+
return measureTextWidth(grapheme, font);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* The advance of `text` along a vertical line: its sideways runs at
|
|
93
|
+
* `measureRun`'s width (the horizontal one), each cell at
|
|
94
|
+
* {@link cellAdvance}. The same runs the renderers paint
|
|
95
|
+
* (`verticalRuns`), so what is measured is what is painted. Text with no
|
|
96
|
+
* cell is one sideways run: `measureRun(text)`.
|
|
97
|
+
*/
|
|
98
|
+
export function verticalTextWidth(text, font, measureRun = (run) => measureTextWidth(run, font)) {
|
|
99
|
+
let width = 0;
|
|
100
|
+
for (const run of verticalRuns(graphemesOf(text), measureRegion, measureUprightDigits)) {
|
|
101
|
+
width += run.cell === undefined ? measureRun(run.text) : run.glyph.orient === 'tcy' ? fontEm(font) : cellAdvance(run.text, font, true);
|
|
102
|
+
}
|
|
103
|
+
return width;
|
|
104
|
+
}
|
|
105
|
+
/** How many times tracking follows the characters of `text` in a vertical
|
|
106
|
+
* line: once per grapheme, a number set in one cell (tate-chu-yoko)
|
|
107
|
+
* counting as one. */
|
|
108
|
+
export function verticalTrackCount(text) {
|
|
109
|
+
let n = 0;
|
|
110
|
+
for (const run of verticalRuns(graphemesOf(text), measureRegion, measureUprightDigits)) {
|
|
111
|
+
n += run.glyph.orient === 'tcy' ? 1 : graphemesOf(run.text).length;
|
|
112
|
+
}
|
|
113
|
+
return n;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* The advance of text painted in the page's flow (design text, list
|
|
117
|
+
* markers, contents rows, box titles): `measureTextWidth`, except in
|
|
118
|
+
* vertical text, where what stands in a cell advances its cell
|
|
119
|
+
* ({@link verticalTextWidth}), as the renderers paint it. ASCII text reads
|
|
120
|
+
* the same either way.
|
|
121
|
+
*/
|
|
122
|
+
export function flowTextWidth(text, font) {
|
|
123
|
+
if (measureWritingMode === 'vertical-rl' && (/[^\u0000-\u007F]/.test(text) || (measureUprightDigits > 0 && /[0-9]/.test(text))))
|
|
124
|
+
return verticalTextWidth(text, font);
|
|
125
|
+
return measureTextWidth(text, font);
|
|
126
|
+
}
|
|
127
|
+
/** A font string's first family, unquoted: the key of
|
|
128
|
+
* `VDTFlowFrame.centralBaselines`. */
|
|
129
|
+
export function fontFamilyOf(font) {
|
|
130
|
+
const m = FONT_SIZE_RE.exec(font);
|
|
131
|
+
const rest = (m ? font.slice(m.index + m[0].length) : font).replace(/^\s*(\/\s*\S+\s*)?/, '');
|
|
132
|
+
const first = rest.split(',')[0].trim();
|
|
133
|
+
return first.length >= 2 && /^["']/.test(first) && first.endsWith(first[0]) ? first.slice(1, -1) : first;
|
|
134
|
+
}
|
|
135
|
+
const centralCache = new Map();
|
|
136
|
+
/** Drop the measured axes (fonts changed). */
|
|
137
|
+
export function clearCentralBaselineCache() {
|
|
138
|
+
centralCache.clear();
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Where the ideographic em box's centre sits above the alphabetic baseline
|
|
142
|
+
* of `family`, in ems: the axis upright characters are centred on. Read
|
|
143
|
+
* from the ink of 中 at 100 px, whose long stroke runs the height of the
|
|
144
|
+
* em box: the centre of its ink is the centre of the box within a few
|
|
145
|
+
* hundredths of an em (0.380 in Noto Serif and Sans SC and TC, whose box
|
|
146
|
+
* centre is 0.38; 0.357 in LXGW WenKai) — and every Chinese, Japanese and
|
|
147
|
+
* Korean face has the character, where a face for one script lacks the
|
|
148
|
+
* other's (國 is not in a Simplified Chinese font: the canvas measured a
|
|
149
|
+
* fallback face's, 0.04 em off). Kept between 0.25 and 0.5 em; a measurer
|
|
150
|
+
* with no ink metrics gives {@link DEFAULT_CENTRAL_BASELINE}.
|
|
151
|
+
*/
|
|
152
|
+
export function measureCentralBaseline(family) {
|
|
153
|
+
const hit = centralCache.get(family);
|
|
154
|
+
if (hit !== undefined)
|
|
155
|
+
return hit;
|
|
156
|
+
let value = DEFAULT_CENTRAL_BASELINE;
|
|
157
|
+
const box = measureInkBox('中', `100px ${/^[\w -]+$/.test(family) && !/^\d/.test(family) ? family : JSON.stringify(family)}`);
|
|
158
|
+
if (box && box.ascent + box.descent > 60) {
|
|
159
|
+
const centre = (box.ascent - box.descent) / 2 / 100;
|
|
160
|
+
if (centre >= 0.25 && centre <= 0.5)
|
|
161
|
+
value = Math.round(centre * 1000) / 1000;
|
|
162
|
+
}
|
|
163
|
+
centralCache.set(family, value);
|
|
164
|
+
return value;
|
|
165
|
+
}
|
|
166
|
+
onTextWidthCacheClear(clearCentralBaselineCache);
|
|
167
|
+
/**
|
|
168
|
+
* How far below the top of its line box a line of `font` has its baseline,
|
|
169
|
+
* for a line box `lineHeightPx` tall. Horizontal text: 0.8 of the line
|
|
170
|
+
* height, as it always was. Vertical text: the line box runs down the
|
|
171
|
+
* column and its height is the pitch across it, and the characters stand
|
|
172
|
+
* centred on the font's central axis ({@link measureCentralBaseline}), so
|
|
173
|
+
* the baseline goes where that axis falls in the middle of the box: a
|
|
174
|
+
* column of characters in the middle of its pitch, as CSS sets a vertical
|
|
175
|
+
* line and as a rule drawn between two columns expects. `font`'s family
|
|
176
|
+
* and size decide the axis; the renderers turn each character about the
|
|
177
|
+
* same one (`VDTFlowFrame.centralBaselines`).
|
|
178
|
+
*/
|
|
179
|
+
export function lineBaselineOffset(lineHeightPx, font) {
|
|
180
|
+
if (measureWritingMode !== 'vertical-rl')
|
|
181
|
+
return lineHeightPx * 0.8;
|
|
182
|
+
return lineHeightPx / 2 + measureCentralBaseline(fontFamilyOf(font)) * fontEm(font);
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=vertical.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vertical.js","sourceRoot":"","sources":["../../src/measure/vertical.ts"],"names":[],"mappings":"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"}
|
package/dist/numberWords.d.ts
CHANGED
|
@@ -1,17 +1,10 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Numbers spelled out in words — "twenty-one", "twenty-first", "veintiuno",
|
|
3
|
-
* "vigesimoprimero" — for heading numbering templates (`{1:words}`,
|
|
4
|
-
* `{1:ordinal}`) and the `{numberWords}` / `{numberOrdinalWords}` design
|
|
5
|
-
* placeholders. English and Spanish; any other language takes the English
|
|
6
|
-
* words, like the other localised strings (table continuation labels).
|
|
7
|
-
* Masculine forms, as a chapter or a part is numbered ("capítulo primero").
|
|
8
|
-
*/
|
|
9
1
|
/** Cardinal ("twenty-one") or ordinal ("twenty-first"). */
|
|
10
2
|
export type NumberWordsKind = 'cardinal' | 'ordinal';
|
|
11
3
|
/**
|
|
12
4
|
* `n` spelled out in lower case, in the document language (`locale`:
|
|
13
|
-
* `'es'` or a Spanish tag gives Spanish,
|
|
14
|
-
*
|
|
5
|
+
* `'es'` or a Spanish tag gives Spanish, a Chinese tag Chinese numerals in
|
|
6
|
+
* its script, anything else English). Numbers past 999 999 (Spanish
|
|
7
|
+
* ordinals: past 999; Chinese: past 10¹⁶ − 1) print in digits; zero and
|
|
15
8
|
* below print nothing, like the other numeral formats.
|
|
16
9
|
*/
|
|
17
10
|
export declare function numberToWords(n: number, kind?: NumberWordsKind, locale?: string): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"numberWords.d.ts","sourceRoot":"","sources":["../src/numberWords.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"numberWords.d.ts","sourceRoot":"","sources":["../src/numberWords.ts"],"names":[],"mappings":"AAaA,2DAA2D;AAC3D,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,SAAS,CAAC;AA8HrD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,GAAE,eAA4B,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAcpG;AAED;oBACoB;AACpB,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;AAEtD,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAMtF"}
|
package/dist/numberWords.js
CHANGED
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Numbers spelled out in words — "twenty-one", "twenty-first", "veintiuno",
|
|
3
|
-
* "vigesimoprimero" — for heading numbering templates
|
|
4
|
-
* `{1:ordinal}`) and the `{numberWords}` /
|
|
5
|
-
* placeholders. English
|
|
6
|
-
*
|
|
7
|
-
*
|
|
3
|
+
* "vigesimoprimero", 二十一, 第二十一 — for heading numbering templates
|
|
4
|
+
* (`{1:words}`, `{1:ordinal}`) and the `{numberWords}` /
|
|
5
|
+
* `{numberOrdinalWords}` design placeholders. English, Spanish and Chinese
|
|
6
|
+
* (in the document's script: 一万 / 一萬); any other language takes the
|
|
7
|
+
* English words, like the other localised strings (table continuation
|
|
8
|
+
* labels). Masculine forms, as a chapter or a part is numbered ("capítulo
|
|
9
|
+
* primero").
|
|
8
10
|
*/
|
|
11
|
+
import { stringsKeyOf } from './locale';
|
|
12
|
+
import { chineseNumeral } from './chineseNumerals';
|
|
9
13
|
/** Largest number spelled out; anything past it prints in digits. */
|
|
10
14
|
const MAX_CARDINAL = 999_999;
|
|
11
15
|
const MAX_ORDINAL_ES = 999;
|
|
12
16
|
function language(locale) {
|
|
13
|
-
|
|
17
|
+
const key = stringsKeyOf(locale ?? 'en');
|
|
18
|
+
return key === 'es' || key === 'zh-hans' || key === 'zh-hant' ? key : 'en';
|
|
14
19
|
}
|
|
15
20
|
// --- English ---------------------------------------------------------------
|
|
16
21
|
const EN_ONES = [
|
|
@@ -127,14 +132,20 @@ function esOrdinal(n) {
|
|
|
127
132
|
}
|
|
128
133
|
/**
|
|
129
134
|
* `n` spelled out in lower case, in the document language (`locale`:
|
|
130
|
-
* `'es'` or a Spanish tag gives Spanish,
|
|
131
|
-
*
|
|
135
|
+
* `'es'` or a Spanish tag gives Spanish, a Chinese tag Chinese numerals in
|
|
136
|
+
* its script, anything else English). Numbers past 999 999 (Spanish
|
|
137
|
+
* ordinals: past 999; Chinese: past 10¹⁶ − 1) print in digits; zero and
|
|
132
138
|
* below print nothing, like the other numeral formats.
|
|
133
139
|
*/
|
|
134
140
|
export function numberToWords(n, kind = 'cardinal', locale) {
|
|
135
141
|
if (!Number.isInteger(n) || n < 1)
|
|
136
142
|
return n > 0 ? String(n) : '';
|
|
137
143
|
const lang = language(locale);
|
|
144
|
+
if (lang === 'zh-hans' || lang === 'zh-hant') {
|
|
145
|
+
// Informal numerals; the ordinal is 第 before them (第十二).
|
|
146
|
+
const numeral = chineseNumeral(n, 'informal', lang === 'zh-hant');
|
|
147
|
+
return kind === 'ordinal' ? `第${numeral}` : numeral;
|
|
148
|
+
}
|
|
138
149
|
if (kind === 'ordinal') {
|
|
139
150
|
if (lang === 'es')
|
|
140
151
|
return n <= MAX_ORDINAL_ES ? esOrdinal(n) : String(n);
|
|
@@ -145,7 +156,8 @@ export function numberToWords(n, kind = 'cardinal', locale) {
|
|
|
145
156
|
return lang === 'es' ? esCardinal(n) : enCardinal(n);
|
|
146
157
|
}
|
|
147
158
|
export function caseWords(words, wordsCase, locale) {
|
|
148
|
-
|
|
159
|
+
// Han characters have no case: the variants print alike.
|
|
160
|
+
const tag = language(locale) === 'es' ? 'es' : 'en';
|
|
149
161
|
if (wordsCase === 'upper')
|
|
150
162
|
return words.toLocaleUpperCase(tag);
|
|
151
163
|
if (wordsCase === 'capital')
|
package/dist/numberWords.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"numberWords.js","sourceRoot":"","sources":["../src/numberWords.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"numberWords.js","sourceRoot":"","sources":["../src/numberWords.ts"],"names":[],"mappings":"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"}
|
package/dist/numbering.d.ts
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import type { ContentBlock } from './parse';
|
|
2
2
|
import type { OrderedListNumberFormat } from './types';
|
|
3
|
-
|
|
3
|
+
/** The East Asian numeral styles, named as in CSS Counter Styles 3: Chinese
|
|
4
|
+
* numerals in the informal (一百二十) and formal (壹佰贰拾) longhand of
|
|
5
|
+
* either script, digit by digit (`cjk-decimal`, 二〇二六), the heavenly
|
|
6
|
+
* stems (甲乙丙) and earthly branches (子丑寅), circled (①) and fullwidth
|
|
7
|
+
* (123) digits. Every numbering setting takes them. */
|
|
8
|
+
export type EastAsianNumeralStyle = 'simp-chinese-informal' | 'trad-chinese-informal' | 'simp-chinese-formal' | 'trad-chinese-formal' | 'cjk-decimal' | 'cjk-heavenly-stem' | 'cjk-earthly-branch' | 'circled-decimal' | 'fullwidth-decimal';
|
|
9
|
+
/** Every {@link EastAsianNumeralStyle}, in the order a picker lists them. */
|
|
10
|
+
export declare const EAST_ASIAN_NUMERAL_STYLES: readonly EastAsianNumeralStyle[];
|
|
11
|
+
export type NumeralStyle = 'decimal' | 'decimal-02' | 'upper-alpha' | 'lower-alpha' | 'upper-roman' | 'lower-roman' | EastAsianNumeralStyle;
|
|
4
12
|
/** A counter spelled out in words (heading templates only): cardinal
|
|
5
13
|
* (`words`) or ordinal (`ordinal`), the case of the suffix picking the
|
|
6
14
|
* case of the words — `{1:words}` "twenty-one", `{1:Words}` "Twenty-one",
|
|
@@ -19,20 +27,30 @@ type Token = {
|
|
|
19
27
|
/** The numeral styles a format field can name: every {@link NumeralStyle}
|
|
20
28
|
* but the template-only zero-padded `decimal-02`. */
|
|
21
29
|
export type NumberFormatStyle = Exclude<NumeralStyle, 'decimal-02'>;
|
|
30
|
+
/** The informal Chinese style of a document's script: `trad-chinese-informal`
|
|
31
|
+
* for a Traditional tag, else `simp-chinese-informal`. What `{1:一}`, the
|
|
32
|
+
* `{numberHan}` placeholder and spelled-out Chinese numbers use. */
|
|
33
|
+
export declare function chineseInformalStyle(locale?: string): 'simp-chinese-informal' | 'trad-chinese-informal';
|
|
22
34
|
/**
|
|
23
35
|
* The numeral style a numbering-format value names, in any of the
|
|
24
36
|
* spellings the engine accepts (see `NUMBER_FORMAT_NAMES`: `decimal` /
|
|
25
37
|
* `arabic`, `lower-roman` / `roman-lower` / `i`, `upper-alpha` /
|
|
26
|
-
* `alpha-upper` / `upper-latin` / `A
|
|
27
|
-
*
|
|
38
|
+
* `alpha-upper` / `upper-latin` / `A`, the CSS names of the East Asian
|
|
39
|
+
* styles and their one-character tokens `〇`, `①`, `甲`, `子`, `1`…; names
|
|
40
|
+
* are case-insensitive). `一` and `壹` name the informal and formal Chinese
|
|
41
|
+
* numerals of the document's script: Traditional when `locale` is
|
|
42
|
+
* (`zh-Hant`, `zh-TW`…), else Simplified. `undefined` for anything else —
|
|
43
|
+
* the caller numbers in decimal.
|
|
28
44
|
*/
|
|
29
|
-
export declare function parseNumberFormat(value: unknown): NumberFormatStyle | undefined;
|
|
45
|
+
export declare function parseNumberFormat(value: unknown, locale?: string): NumberFormatStyle | undefined;
|
|
30
46
|
/** A numeral style in the ordered-list vocabulary (`arabic` for decimal). */
|
|
31
47
|
export declare function toOrderedListNumberFormat(style: NumberFormatStyle): OrderedListNumberFormat;
|
|
32
48
|
/** A counter value in a template style; spelled-out styles use the
|
|
33
49
|
* document language `locale`. */
|
|
34
50
|
export declare function formatCounter(n: number, style: CounterStyle, locale?: string): string;
|
|
35
|
-
|
|
51
|
+
/** The tokens of a numbering template. `locale` (the document language)
|
|
52
|
+
* decides the script of the `{1:一}` and `{1:壹}` tokens. */
|
|
53
|
+
export declare function parseTemplate(tpl: string, locale?: string): Token[];
|
|
36
54
|
export declare function formatNumeral(n: number, style: NumeralStyle): string;
|
|
37
55
|
/** A pre-resolved template piece fed to {@link renderCounterTemplate}. A
|
|
38
56
|
* `counter` piece whose `text` is empty is treated as a "missing" counter and
|
package/dist/numbering.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"numbering.d.ts","sourceRoot":"","sources":["../src/numbering.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"numbering.d.ts","sourceRoot":"","sources":["../src/numbering.ts"],"names":[],"mappings":"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"}
|
package/dist/numbering.js
CHANGED
|
@@ -1,4 +1,18 @@
|
|
|
1
1
|
import { caseWords, numberToWords } from './numberWords';
|
|
2
|
+
import { localeScript } from './locale';
|
|
3
|
+
import { chineseNumeral, cjkDecimal, circledDecimal, fullwidthDecimal, fixedSymbol, CJK_HEAVENLY_STEMS, CJK_EARTHLY_BRANCHES } from './chineseNumerals';
|
|
4
|
+
/** Every {@link EastAsianNumeralStyle}, in the order a picker lists them. */
|
|
5
|
+
export const EAST_ASIAN_NUMERAL_STYLES = Object.freeze([
|
|
6
|
+
'simp-chinese-informal',
|
|
7
|
+
'trad-chinese-informal',
|
|
8
|
+
'simp-chinese-formal',
|
|
9
|
+
'trad-chinese-formal',
|
|
10
|
+
'cjk-decimal',
|
|
11
|
+
'cjk-heavenly-stem',
|
|
12
|
+
'cjk-earthly-branch',
|
|
13
|
+
'circled-decimal',
|
|
14
|
+
'fullwidth-decimal',
|
|
15
|
+
]);
|
|
2
16
|
const STYLE_ALIASES = {
|
|
3
17
|
'1': 'decimal',
|
|
4
18
|
decimal: 'decimal',
|
|
@@ -31,27 +45,56 @@ const NUMBER_FORMAT_NAMES = new Map([
|
|
|
31
45
|
['upper-alpha', 'upper-alpha'],
|
|
32
46
|
['alpha-upper', 'upper-alpha'],
|
|
33
47
|
['upper-latin', 'upper-alpha'],
|
|
48
|
+
...EAST_ASIAN_NUMERAL_STYLES.map((name) => [name, name]),
|
|
49
|
+
// CSS keeps `cjk-ideographic` as another name of the traditional informal.
|
|
50
|
+
['cjk-ideographic', 'trad-chinese-informal'],
|
|
34
51
|
]);
|
|
35
52
|
/** The one-character tokens of the heading templates (`{1:i}`), which the
|
|
36
|
-
* format fields accept as well. Case-sensitive: `i` and `I` differ.
|
|
53
|
+
* format fields accept as well. Case-sensitive: `i` and `I` differ. The
|
|
54
|
+
* Chinese tokens `一` and `壹` are read apart: they follow the document's
|
|
55
|
+
* script (see {@link parseNumberFormat}). */
|
|
37
56
|
const NUMBER_FORMAT_TOKENS = new Map([
|
|
38
57
|
['1', 'decimal'],
|
|
39
58
|
['i', 'lower-roman'],
|
|
40
59
|
['I', 'upper-roman'],
|
|
41
60
|
['a', 'lower-alpha'],
|
|
42
61
|
['A', 'upper-alpha'],
|
|
62
|
+
['〇', 'cjk-decimal'],
|
|
63
|
+
['①', 'circled-decimal'],
|
|
64
|
+
['甲', 'cjk-heavenly-stem'],
|
|
65
|
+
['子', 'cjk-earthly-branch'],
|
|
66
|
+
['1', 'fullwidth-decimal'],
|
|
43
67
|
]);
|
|
68
|
+
/** Whether `locale` is written in Traditional characters (`zh-Hant`,
|
|
69
|
+
* `zh-TW`, `zh-HK`…). */
|
|
70
|
+
function traditional(locale) {
|
|
71
|
+
return localeScript(locale) === 'Hant';
|
|
72
|
+
}
|
|
73
|
+
/** The informal Chinese style of a document's script: `trad-chinese-informal`
|
|
74
|
+
* for a Traditional tag, else `simp-chinese-informal`. What `{1:一}`, the
|
|
75
|
+
* `{numberHan}` placeholder and spelled-out Chinese numbers use. */
|
|
76
|
+
export function chineseInformalStyle(locale) {
|
|
77
|
+
return traditional(locale) ? 'trad-chinese-informal' : 'simp-chinese-informal';
|
|
78
|
+
}
|
|
44
79
|
/**
|
|
45
80
|
* The numeral style a numbering-format value names, in any of the
|
|
46
81
|
* spellings the engine accepts (see `NUMBER_FORMAT_NAMES`: `decimal` /
|
|
47
82
|
* `arabic`, `lower-roman` / `roman-lower` / `i`, `upper-alpha` /
|
|
48
|
-
* `alpha-upper` / `upper-latin` / `A
|
|
49
|
-
*
|
|
83
|
+
* `alpha-upper` / `upper-latin` / `A`, the CSS names of the East Asian
|
|
84
|
+
* styles and their one-character tokens `〇`, `①`, `甲`, `子`, `1`…; names
|
|
85
|
+
* are case-insensitive). `一` and `壹` name the informal and formal Chinese
|
|
86
|
+
* numerals of the document's script: Traditional when `locale` is
|
|
87
|
+
* (`zh-Hant`, `zh-TW`…), else Simplified. `undefined` for anything else —
|
|
88
|
+
* the caller numbers in decimal.
|
|
50
89
|
*/
|
|
51
|
-
export function parseNumberFormat(value) {
|
|
90
|
+
export function parseNumberFormat(value, locale) {
|
|
52
91
|
if (typeof value !== 'string')
|
|
53
92
|
return undefined;
|
|
54
93
|
const v = value.trim();
|
|
94
|
+
if (v === '一')
|
|
95
|
+
return chineseInformalStyle(locale);
|
|
96
|
+
if (v === '壹')
|
|
97
|
+
return traditional(locale) ? 'trad-chinese-formal' : 'simp-chinese-formal';
|
|
55
98
|
return NUMBER_FORMAT_TOKENS.get(v) ?? NUMBER_FORMAT_NAMES.get(v.toLowerCase());
|
|
56
99
|
}
|
|
57
100
|
/** A numeral style in the ordered-list vocabulary (`arabic` for decimal). */
|
|
@@ -59,19 +102,20 @@ export function toOrderedListNumberFormat(style) {
|
|
|
59
102
|
return style === 'decimal' ? 'arabic' : style;
|
|
60
103
|
}
|
|
61
104
|
/** A template token's style: its own alias, else any format-field
|
|
62
|
-
* spelling (`{1:roman-lower}`), else
|
|
63
|
-
|
|
105
|
+
* spelling (`{1:roman-lower}`, `{1:一}` in the script of `locale`), else
|
|
106
|
+
* decimal. */
|
|
107
|
+
function templateStyle(raw, locale) {
|
|
64
108
|
const s = raw.trim();
|
|
65
|
-
return Object.prototype.hasOwnProperty.call(STYLE_ALIASES, s) ? STYLE_ALIASES[s] : parseNumberFormat(s) ?? 'decimal';
|
|
109
|
+
return Object.prototype.hasOwnProperty.call(STYLE_ALIASES, s) ? STYLE_ALIASES[s] : parseNumberFormat(s, locale) ?? 'decimal';
|
|
66
110
|
}
|
|
67
111
|
const SPELLED_STYLES = new Set(['words', 'Words', 'WORDS', 'ordinal', 'Ordinal', 'ORDINAL']);
|
|
68
|
-
function counterStyleOf(raw) {
|
|
112
|
+
function counterStyleOf(raw, locale) {
|
|
69
113
|
if (!raw)
|
|
70
114
|
return 'decimal';
|
|
71
115
|
const key = raw.trim();
|
|
72
116
|
if (SPELLED_STYLES.has(key))
|
|
73
117
|
return key;
|
|
74
|
-
return templateStyle(key);
|
|
118
|
+
return templateStyle(key, locale);
|
|
75
119
|
}
|
|
76
120
|
/** A counter value in a template style; spelled-out styles use the
|
|
77
121
|
* document language `locale`. */
|
|
@@ -84,7 +128,9 @@ export function formatCounter(n, style, locale) {
|
|
|
84
128
|
const wordsCase = style === style.toUpperCase() ? 'upper' : style[0] === style[0].toUpperCase() ? 'capital' : 'lower';
|
|
85
129
|
return caseWords(numberToWords(n, kind, locale), wordsCase, locale);
|
|
86
130
|
}
|
|
87
|
-
|
|
131
|
+
/** The tokens of a numbering template. `locale` (the document language)
|
|
132
|
+
* decides the script of the `{1:一}` and `{1:壹}` tokens. */
|
|
133
|
+
export function parseTemplate(tpl, locale) {
|
|
88
134
|
const tokens = [];
|
|
89
135
|
let buf = '';
|
|
90
136
|
let i = 0;
|
|
@@ -115,7 +161,7 @@ export function parseTemplate(tpl) {
|
|
|
115
161
|
const [rawLevel, rawStyle] = body.split(':');
|
|
116
162
|
const level = Number(rawLevel);
|
|
117
163
|
if (Number.isInteger(level) && level >= 1 && level <= 6) {
|
|
118
|
-
const style = counterStyleOf(rawStyle);
|
|
164
|
+
const style = counterStyleOf(rawStyle, locale);
|
|
119
165
|
flush();
|
|
120
166
|
tokens.push({ kind: 'counter', level, style });
|
|
121
167
|
i = end + 1;
|
|
@@ -162,7 +208,26 @@ function toRoman(n) {
|
|
|
162
208
|
return s;
|
|
163
209
|
}
|
|
164
210
|
export function formatNumeral(n, style) {
|
|
165
|
-
if (n
|
|
211
|
+
if (n === 0) {
|
|
212
|
+
// The positional East Asian styles have a zero; the others print
|
|
213
|
+
// nothing for it, as before.
|
|
214
|
+
switch (style) {
|
|
215
|
+
case 'simp-chinese-informal':
|
|
216
|
+
case 'trad-chinese-informal':
|
|
217
|
+
case 'simp-chinese-formal':
|
|
218
|
+
case 'trad-chinese-formal':
|
|
219
|
+
return '零';
|
|
220
|
+
case 'cjk-decimal':
|
|
221
|
+
return '〇';
|
|
222
|
+
case 'circled-decimal':
|
|
223
|
+
return '⓪';
|
|
224
|
+
case 'fullwidth-decimal':
|
|
225
|
+
return '0';
|
|
226
|
+
default:
|
|
227
|
+
return '';
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
if (n < 0)
|
|
166
231
|
return '';
|
|
167
232
|
switch (style) {
|
|
168
233
|
case 'decimal':
|
|
@@ -177,6 +242,24 @@ export function formatNumeral(n, style) {
|
|
|
177
242
|
return toRoman(n);
|
|
178
243
|
case 'lower-roman':
|
|
179
244
|
return toRoman(n).toLowerCase();
|
|
245
|
+
case 'simp-chinese-informal':
|
|
246
|
+
return chineseNumeral(n, 'informal', false);
|
|
247
|
+
case 'trad-chinese-informal':
|
|
248
|
+
return chineseNumeral(n, 'informal', true);
|
|
249
|
+
case 'simp-chinese-formal':
|
|
250
|
+
return chineseNumeral(n, 'formal', false);
|
|
251
|
+
case 'trad-chinese-formal':
|
|
252
|
+
return chineseNumeral(n, 'formal', true);
|
|
253
|
+
case 'cjk-decimal':
|
|
254
|
+
return cjkDecimal(n);
|
|
255
|
+
case 'cjk-heavenly-stem':
|
|
256
|
+
return fixedSymbol(n, CJK_HEAVENLY_STEMS);
|
|
257
|
+
case 'cjk-earthly-branch':
|
|
258
|
+
return fixedSymbol(n, CJK_EARTHLY_BRANCHES);
|
|
259
|
+
case 'circled-decimal':
|
|
260
|
+
return circledDecimal(n);
|
|
261
|
+
case 'fullwidth-decimal':
|
|
262
|
+
return fullwidthDecimal(n);
|
|
180
263
|
default:
|
|
181
264
|
// A style from outside the type (a hand-written config, a stale
|
|
182
265
|
// continuation) numbers in decimal rather than printing "undefined".
|
|
@@ -202,7 +285,9 @@ export function renderCounterTemplate(pieces) {
|
|
|
202
285
|
continue;
|
|
203
286
|
}
|
|
204
287
|
if (prev.length > 0 && work[i - 1]?.kind === 'literal') {
|
|
205
|
-
|
|
288
|
+
// Punctuation and spaces go; letters and numerals of any script
|
|
289
|
+
// stay (第 before a missing counter is text, not a separator).
|
|
290
|
+
out = out.replace(/[^\p{L}\p{N}]+$/u, '');
|
|
206
291
|
}
|
|
207
292
|
continue;
|
|
208
293
|
}
|
|
@@ -322,7 +407,7 @@ isNumbered = () => true, options = {}) {
|
|
|
322
407
|
const tokensOf = (tpl) => {
|
|
323
408
|
let tokens = parsed.get(tpl);
|
|
324
409
|
if (tokens === undefined) {
|
|
325
|
-
tokens = tpl.length > 0 ? parseTemplate(tpl) : null;
|
|
410
|
+
tokens = tpl.length > 0 ? parseTemplate(tpl, options.locale) : null;
|
|
326
411
|
parsed.set(tpl, tokens);
|
|
327
412
|
}
|
|
328
413
|
return tokens;
|