postext 1.8.6 → 1.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__bench__/cjkChapter.bench.test.d.ts +2 -0
- package/dist/__bench__/cjkChapter.bench.test.d.ts.map +1 -0
- package/dist/__bench__/cjkChapter.bench.test.js +71 -0
- package/dist/__bench__/cjkChapter.bench.test.js.map +1 -0
- package/dist/__tests__/bundle.test.js +16 -0
- package/dist/__tests__/bundle.test.js.map +1 -1
- package/dist/__tests__/canvasDirection.test.d.ts +2 -0
- package/dist/__tests__/canvasDirection.test.d.ts.map +1 -0
- package/dist/__tests__/canvasDirection.test.js +45 -0
- package/dist/__tests__/canvasDirection.test.js.map +1 -0
- package/dist/__tests__/chineseLocale.test.d.ts +2 -0
- package/dist/__tests__/chineseLocale.test.d.ts.map +1 -0
- package/dist/__tests__/chineseLocale.test.js +253 -0
- package/dist/__tests__/chineseLocale.test.js.map +1 -0
- package/dist/__tests__/chineseNumbering.test.d.ts +2 -0
- package/dist/__tests__/chineseNumbering.test.d.ts.map +1 -0
- package/dist/__tests__/chineseNumbering.test.js +376 -0
- package/dist/__tests__/chineseNumbering.test.js.map +1 -0
- package/dist/__tests__/cjk/annotations.test.d.ts +2 -0
- package/dist/__tests__/cjk/annotations.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/annotations.test.js +483 -0
- package/dist/__tests__/cjk/annotations.test.js.map +1 -0
- package/dist/__tests__/cjk/annotationsRender.test.d.ts +2 -0
- package/dist/__tests__/cjk/annotationsRender.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/annotationsRender.test.js +263 -0
- package/dist/__tests__/cjk/annotationsRender.test.js.map +1 -0
- package/dist/__tests__/cjk/composer.test.d.ts +2 -0
- package/dist/__tests__/cjk/composer.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/composer.test.js +237 -0
- package/dist/__tests__/cjk/composer.test.js.map +1 -0
- package/dist/__tests__/cjk/composerEdges.test.d.ts +2 -0
- package/dist/__tests__/cjk/composerEdges.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/composerEdges.test.js +352 -0
- package/dist/__tests__/cjk/composerEdges.test.js.map +1 -0
- package/dist/__tests__/cjk/dashRule.test.d.ts +2 -0
- package/dist/__tests__/cjk/dashRule.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/dashRule.test.js +261 -0
- package/dist/__tests__/cjk/dashRule.test.js.map +1 -0
- package/dist/__tests__/cjk/fuzz.test.d.ts +2 -0
- package/dist/__tests__/cjk/fuzz.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/fuzz.test.js +102 -0
- package/dist/__tests__/cjk/fuzz.test.js.map +1 -0
- package/dist/__tests__/cjk/grid.test.d.ts +2 -0
- package/dist/__tests__/cjk/grid.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/grid.test.js +261 -0
- package/dist/__tests__/cjk/grid.test.js.map +1 -0
- package/dist/__tests__/cjk/justifyRender.test.d.ts +2 -0
- package/dist/__tests__/cjk/justifyRender.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/justifyRender.test.js +139 -0
- package/dist/__tests__/cjk/justifyRender.test.js.map +1 -0
- package/dist/__tests__/cjk/latinFastPath.test.d.ts +2 -0
- package/dist/__tests__/cjk/latinFastPath.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/latinFastPath.test.js +208 -0
- package/dist/__tests__/cjk/latinFastPath.test.js.map +1 -0
- package/dist/__tests__/cjk/markCutsLatin.test.d.ts +2 -0
- package/dist/__tests__/cjk/markCutsLatin.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/markCutsLatin.test.js +69 -0
- package/dist/__tests__/cjk/markCutsLatin.test.js.map +1 -0
- package/dist/__tests__/cjk/markRuns.test.d.ts +2 -0
- package/dist/__tests__/cjk/markRuns.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/markRuns.test.js +347 -0
- package/dist/__tests__/cjk/markRuns.test.js.map +1 -0
- package/dist/__tests__/cjk/punctuation.test.d.ts +2 -0
- package/dist/__tests__/cjk/punctuation.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/punctuation.test.js +440 -0
- package/dist/__tests__/cjk/punctuation.test.js.map +1 -0
- package/dist/__tests__/cjk/punctuationRender.test.d.ts +2 -0
- package/dist/__tests__/cjk/punctuationRender.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/punctuationRender.test.js +135 -0
- package/dist/__tests__/cjk/punctuationRender.test.js.map +1 -0
- package/dist/__tests__/cjk/rubyDescenders.test.d.ts +2 -0
- package/dist/__tests__/cjk/rubyDescenders.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/rubyDescenders.test.js +77 -0
- package/dist/__tests__/cjk/rubyDescenders.test.js.map +1 -0
- package/dist/__tests__/cjk/runt.test.d.ts +2 -0
- package/dist/__tests__/cjk/runt.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/runt.test.js +103 -0
- package/dist/__tests__/cjk/runt.test.js.map +1 -0
- package/dist/__tests__/cjk/sharedMarks.test.d.ts +2 -0
- package/dist/__tests__/cjk/sharedMarks.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/sharedMarks.test.js +347 -0
- package/dist/__tests__/cjk/sharedMarks.test.js.map +1 -0
- package/dist/__tests__/cjk/uprightDots.test.d.ts +2 -0
- package/dist/__tests__/cjk/uprightDots.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/uprightDots.test.js +47 -0
- package/dist/__tests__/cjk/uprightDots.test.js.map +1 -0
- package/dist/__tests__/cjk/wordJoiner.test.d.ts +2 -0
- package/dist/__tests__/cjk/wordJoiner.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/wordJoiner.test.js +47 -0
- package/dist/__tests__/cjk/wordJoiner.test.js.map +1 -0
- package/dist/__tests__/cjk/zhuyinTones.test.d.ts +2 -0
- package/dist/__tests__/cjk/zhuyinTones.test.d.ts.map +1 -0
- package/dist/__tests__/cjk/zhuyinTones.test.js +72 -0
- package/dist/__tests__/cjk/zhuyinTones.test.js.map +1 -0
- package/dist/__tests__/contentLocale.test.d.ts +2 -0
- package/dist/__tests__/contentLocale.test.d.ts.map +1 -0
- package/dist/__tests__/contentLocale.test.js +167 -0
- package/dist/__tests__/contentLocale.test.js.map +1 -0
- package/dist/__tests__/defaults/cjk.test.d.ts +2 -0
- package/dist/__tests__/defaults/cjk.test.d.ts.map +1 -0
- package/dist/__tests__/defaults/cjk.test.js +70 -0
- package/dist/__tests__/defaults/cjk.test.js.map +1 -0
- package/dist/__tests__/design/designTextRender.test.js +31 -0
- package/dist/__tests__/design/designTextRender.test.js.map +1 -1
- package/dist/__tests__/design/imageAltText.test.d.ts +2 -0
- package/dist/__tests__/design/imageAltText.test.d.ts.map +1 -0
- package/dist/__tests__/design/imageAltText.test.js +126 -0
- package/dist/__tests__/design/imageAltText.test.js.map +1 -0
- package/dist/__tests__/exports.test.js +61 -0
- package/dist/__tests__/exports.test.js.map +1 -1
- package/dist/__tests__/headingLetterSpacing.test.js +1 -1
- package/dist/__tests__/headingLetterSpacing.test.js.map +1 -1
- package/dist/__tests__/indexChinese.test.d.ts +2 -0
- package/dist/__tests__/indexChinese.test.d.ts.map +1 -0
- package/dist/__tests__/indexChinese.test.js +190 -0
- package/dist/__tests__/indexChinese.test.js.map +1 -0
- package/dist/__tests__/parse/annotations.test.d.ts +2 -0
- package/dist/__tests__/parse/annotations.test.d.ts.map +1 -0
- package/dist/__tests__/parse/annotations.test.js +175 -0
- package/dist/__tests__/parse/annotations.test.js.map +1 -0
- package/dist/__tests__/parse/attrQuoting.test.js +10 -8
- package/dist/__tests__/parse/attrQuoting.test.js.map +1 -1
- package/dist/__tests__/parse/chineseText.test.d.ts +2 -0
- package/dist/__tests__/parse/chineseText.test.d.ts.map +1 -0
- package/dist/__tests__/parse/chineseText.test.js +352 -0
- package/dist/__tests__/parse/chineseText.test.js.map +1 -0
- package/dist/__tests__/parts.test.js +25 -0
- package/dist/__tests__/parts.test.js.map +1 -1
- package/dist/__tests__/pipeline/colonListRoom.test.js +20 -0
- package/dist/__tests__/pipeline/colonListRoom.test.js.map +1 -1
- package/dist/__tests__/presets/hongloumeng.test.d.ts +2 -0
- package/dist/__tests__/presets/hongloumeng.test.d.ts.map +1 -0
- package/dist/__tests__/presets/hongloumeng.test.js +485 -0
- package/dist/__tests__/presets/hongloumeng.test.js.map +1 -0
- package/dist/__tests__/vertical/canvasPaint.test.d.ts +2 -0
- package/dist/__tests__/vertical/canvasPaint.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/canvasPaint.test.js +229 -0
- package/dist/__tests__/vertical/canvasPaint.test.js.map +1 -0
- package/dist/__tests__/vertical/compositionPaint.test.d.ts +2 -0
- package/dist/__tests__/vertical/compositionPaint.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/compositionPaint.test.js +538 -0
- package/dist/__tests__/vertical/compositionPaint.test.js.map +1 -0
- package/dist/__tests__/vertical/geometry.test.d.ts +2 -0
- package/dist/__tests__/vertical/geometry.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/geometry.test.js +276 -0
- package/dist/__tests__/vertical/geometry.test.js.map +1 -0
- package/dist/__tests__/vertical/htmlSmoke.test.d.ts +2 -0
- package/dist/__tests__/vertical/htmlSmoke.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/htmlSmoke.test.js +25 -0
- package/dist/__tests__/vertical/htmlSmoke.test.js.map +1 -0
- package/dist/__tests__/vertical/htmlTurnedCells.test.d.ts +2 -0
- package/dist/__tests__/vertical/htmlTurnedCells.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/htmlTurnedCells.test.js +99 -0
- package/dist/__tests__/vertical/htmlTurnedCells.test.js.map +1 -0
- package/dist/__tests__/vertical/htmlVertical.test.d.ts +2 -0
- package/dist/__tests__/vertical/htmlVertical.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/htmlVertical.test.js +145 -0
- package/dist/__tests__/vertical/htmlVertical.test.js.map +1 -0
- package/dist/__tests__/vertical/lineAxis.test.d.ts +2 -0
- package/dist/__tests__/vertical/lineAxis.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/lineAxis.test.js +128 -0
- package/dist/__tests__/vertical/lineAxis.test.js.map +1 -0
- package/dist/__tests__/vertical/measurePaint.test.d.ts +2 -0
- package/dist/__tests__/vertical/measurePaint.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/measurePaint.test.js +259 -0
- package/dist/__tests__/vertical/measurePaint.test.js.map +1 -0
- package/dist/__tests__/vertical/orientation.test.d.ts +2 -0
- package/dist/__tests__/vertical/orientation.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/orientation.test.js +153 -0
- package/dist/__tests__/vertical/orientation.test.js.map +1 -0
- package/dist/__tests__/vertical/stub.d.ts +8 -0
- package/dist/__tests__/vertical/stub.d.ts.map +1 -0
- package/dist/__tests__/vertical/stub.js +37 -0
- package/dist/__tests__/vertical/stub.js.map +1 -0
- package/dist/__tests__/vertical/tateChuYoko.test.d.ts +2 -0
- package/dist/__tests__/vertical/tateChuYoko.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/tateChuYoko.test.js +270 -0
- package/dist/__tests__/vertical/tateChuYoko.test.js.map +1 -0
- package/dist/__tests__/vertical/uprightResources.test.d.ts +2 -0
- package/dist/__tests__/vertical/uprightResources.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/uprightResources.test.js +182 -0
- package/dist/__tests__/vertical/uprightResources.test.js.map +1 -0
- package/dist/__tests__/vertical/verticalDesignText.test.d.ts +2 -0
- package/dist/__tests__/vertical/verticalDesignText.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/verticalDesignText.test.js +190 -0
- package/dist/__tests__/vertical/verticalDesignText.test.js.map +1 -0
- package/dist/__tests__/vertical/verticalSpans.d.ts +25 -0
- package/dist/__tests__/vertical/verticalSpans.d.ts.map +1 -0
- package/dist/__tests__/vertical/verticalSpans.js +39 -0
- package/dist/__tests__/vertical/verticalSpans.js.map +1 -0
- package/dist/__tests__/vertical/verticalTwins.test.d.ts +2 -0
- package/dist/__tests__/vertical/verticalTwins.test.d.ts.map +1 -0
- package/dist/__tests__/vertical/verticalTwins.test.js +71 -0
- package/dist/__tests__/vertical/verticalTwins.test.js.map +1 -0
- package/dist/bundle/adapters.d.ts +14 -5
- package/dist/bundle/adapters.d.ts.map +1 -1
- package/dist/bundle/adapters.js +4 -3
- package/dist/bundle/adapters.js.map +1 -1
- package/dist/bundle/codec.d.ts.map +1 -1
- package/dist/bundle/codec.js +27 -4
- package/dist/bundle/codec.js.map +1 -1
- package/dist/bundle/index.d.ts +1 -1
- package/dist/bundle/index.d.ts.map +1 -1
- package/dist/bundle/manifest.d.ts +6 -4
- package/dist/bundle/manifest.d.ts.map +1 -1
- package/dist/bundle/manifest.js +31 -32
- package/dist/bundle/manifest.js.map +1 -1
- package/dist/bundle/types.d.ts +7 -2
- package/dist/bundle/types.d.ts.map +1 -1
- package/dist/canvas-backend/annotations.d.ts +31 -0
- package/dist/canvas-backend/annotations.d.ts.map +1 -0
- package/dist/canvas-backend/annotations.js +120 -0
- package/dist/canvas-backend/annotations.js.map +1 -0
- package/dist/canvas-backend/blockRender.d.ts.map +1 -1
- package/dist/canvas-backend/blockRender.js +195 -15
- package/dist/canvas-backend/blockRender.js.map +1 -1
- package/dist/canvas-backend/decorations.d.ts +5 -0
- package/dist/canvas-backend/decorations.d.ts.map +1 -1
- package/dist/canvas-backend/decorations.js +27 -0
- package/dist/canvas-backend/decorations.js.map +1 -1
- package/dist/canvas-backend/headerFooter.d.ts.map +1 -1
- package/dist/canvas-backend/headerFooter.js +32 -16
- package/dist/canvas-backend/headerFooter.js.map +1 -1
- package/dist/canvas-backend/index.d.ts +2 -0
- package/dist/canvas-backend/index.d.ts.map +1 -1
- package/dist/canvas-backend/index.js +62 -2
- package/dist/canvas-backend/index.js.map +1 -1
- package/dist/canvas-backend/renderResourceBlock.d.ts.map +1 -1
- package/dist/canvas-backend/renderResourceBlock.js +42 -5
- package/dist/canvas-backend/renderResourceBlock.js.map +1 -1
- package/dist/canvas-backend/segmentText.d.ts +23 -0
- package/dist/canvas-backend/segmentText.d.ts.map +1 -0
- package/dist/canvas-backend/segmentText.js +41 -0
- package/dist/canvas-backend/segmentText.js.map +1 -0
- package/dist/canvas-backend/verticalText.d.ts +113 -0
- package/dist/canvas-backend/verticalText.d.ts.map +1 -0
- package/dist/canvas-backend/verticalText.js +437 -0
- package/dist/canvas-backend/verticalText.js.map +1 -0
- package/dist/chineseNumerals.d.ts +39 -0
- package/dist/chineseNumerals.d.ts.map +1 -0
- package/dist/chineseNumerals.js +192 -0
- package/dist/chineseNumerals.js.map +1 -0
- package/dist/cjkMarks.d.ts +61 -0
- package/dist/cjkMarks.d.ts.map +1 -0
- package/dist/cjkMarks.js +441 -0
- package/dist/cjkMarks.js.map +1 -0
- package/dist/columnClip.d.ts +13 -4
- package/dist/columnClip.d.ts.map +1 -1
- package/dist/columnClip.js +33 -5
- package/dist/columnClip.js.map +1 -1
- package/dist/configWarnings.d.ts.map +1 -1
- package/dist/configWarnings.js +18 -3
- package/dist/configWarnings.js.map +1 -1
- package/dist/defaults/bodyText.d.ts +4 -1
- package/dist/defaults/bodyText.d.ts.map +1 -1
- package/dist/defaults/bodyText.js +27 -5
- package/dist/defaults/bodyText.js.map +1 -1
- package/dist/defaults/calloutStyles.js +1 -1
- package/dist/defaults/calloutStyles.js.map +1 -1
- package/dist/defaults/captionStyle.d.ts.map +1 -1
- package/dist/defaults/captionStyle.js +14 -0
- package/dist/defaults/captionStyle.js.map +1 -1
- package/dist/defaults/cjk.d.ts +33 -0
- package/dist/defaults/cjk.d.ts.map +1 -0
- package/dist/defaults/cjk.js +234 -0
- package/dist/defaults/cjk.js.map +1 -0
- package/dist/defaults/headerFooter.d.ts.map +1 -1
- package/dist/defaults/headerFooter.js +2 -0
- package/dist/defaults/headerFooter.js.map +1 -1
- package/dist/defaults/headingStyles.d.ts.map +1 -1
- package/dist/defaults/headingStyles.js +4 -0
- package/dist/defaults/headingStyles.js.map +1 -1
- package/dist/defaults/headings.d.ts.map +1 -1
- package/dist/defaults/headings.js +13 -6
- package/dist/defaults/headings.js.map +1 -1
- package/dist/defaults/index.d.ts +1 -0
- package/dist/defaults/index.d.ts.map +1 -1
- package/dist/defaults/index.js +10 -1
- package/dist/defaults/index.js.map +1 -1
- package/dist/defaults/indexConfig.d.ts +2 -1
- package/dist/defaults/indexConfig.d.ts.map +1 -1
- package/dist/defaults/indexConfig.js +5 -0
- package/dist/defaults/indexConfig.js.map +1 -1
- package/dist/defaults/layout.d.ts.map +1 -1
- package/dist/defaults/layout.js +7 -0
- package/dist/defaults/layout.js.map +1 -1
- package/dist/defaults/orderedLists.d.ts +5 -2
- package/dist/defaults/orderedLists.d.ts.map +1 -1
- package/dist/defaults/orderedLists.js +20 -5
- package/dist/defaults/orderedLists.js.map +1 -1
- package/dist/defaults/page.d.ts +8 -2
- package/dist/defaults/page.d.ts.map +1 -1
- package/dist/defaults/page.js +24 -7
- package/dist/defaults/page.js.map +1 -1
- package/dist/defaults/resourceTypes.d.ts +3 -3
- package/dist/defaults/resourceTypes.d.ts.map +1 -1
- package/dist/defaults/resourceTypes.js +23 -9
- package/dist/defaults/resourceTypes.js.map +1 -1
- package/dist/defaults/tableStyle.d.ts.map +1 -1
- package/dist/defaults/tableStyle.js +8 -5
- package/dist/defaults/tableStyle.js.map +1 -1
- package/dist/design/layout.d.ts +33 -0
- package/dist/design/layout.d.ts.map +1 -1
- package/dist/design/layout.js +124 -18
- package/dist/design/layout.js.map +1 -1
- package/dist/design/placeholders.d.ts.map +1 -1
- package/dist/design/placeholders.js +5 -1
- package/dist/design/placeholders.js.map +1 -1
- package/dist/design/richText.d.ts +24 -4
- package/dist/design/richText.d.ts.map +1 -1
- package/dist/design/richText.js +77 -16
- package/dist/design/richText.js.map +1 -1
- package/dist/html-backend.d.ts.map +1 -1
- package/dist/html-backend.js +635 -25
- package/dist/html-backend.js.map +1 -1
- package/dist/htmlAnnotations.d.ts +29 -0
- package/dist/htmlAnnotations.d.ts.map +1 -0
- package/dist/htmlAnnotations.js +86 -0
- package/dist/htmlAnnotations.js.map +1 -0
- package/dist/hyphenate.js +2 -1
- package/dist/hyphenate.js.map +1 -1
- package/dist/index.d.ts +28 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -8
- package/dist/index.js.map +1 -1
- package/dist/knuthPlass/pretextAdapter.d.ts +4 -1
- package/dist/knuthPlass/pretextAdapter.d.ts.map +1 -1
- package/dist/knuthPlass/pretextAdapter.js +9 -5
- package/dist/knuthPlass/pretextAdapter.js.map +1 -1
- package/dist/knuthPlass/richAdapter.d.ts +15 -2
- package/dist/knuthPlass/richAdapter.d.ts.map +1 -1
- package/dist/knuthPlass/richAdapter.js +16 -6
- package/dist/knuthPlass/richAdapter.js.map +1 -1
- package/dist/knuthPlass/tracking.d.ts +1 -1
- package/dist/knuthPlass/tracking.d.ts.map +1 -1
- package/dist/knuthPlass/tracking.js +4 -3
- package/dist/knuthPlass/tracking.js.map +1 -1
- package/dist/knuthPlass/types.d.ts +3 -0
- package/dist/knuthPlass/types.d.ts.map +1 -1
- package/dist/lineInk.d.ts +13 -0
- package/dist/lineInk.d.ts.map +1 -1
- package/dist/lineInk.js +28 -1
- package/dist/lineInk.js.map +1 -1
- package/dist/locale.d.ts +91 -3
- package/dist/locale.d.ts.map +1 -1
- package/dist/locale.js +245 -1
- package/dist/locale.js.map +1 -1
- package/dist/looseLines.d.ts +11 -1
- package/dist/looseLines.d.ts.map +1 -1
- package/dist/looseLines.js +26 -1
- package/dist/looseLines.js.map +1 -1
- package/dist/measure/cache.d.ts.map +1 -1
- package/dist/measure/cache.js +51 -3
- package/dist/measure/cache.js.map +1 -1
- package/dist/measure/canvas.d.ts +25 -0
- package/dist/measure/canvas.d.ts.map +1 -1
- package/dist/measure/canvas.js +90 -1
- package/dist/measure/canvas.js.map +1 -1
- package/dist/measure/cjk.d.ts +8 -13
- package/dist/measure/cjk.d.ts.map +1 -1
- package/dist/measure/cjk.js +29 -53
- package/dist/measure/cjk.js.map +1 -1
- package/dist/measure/cjkAnnotate.d.ts +96 -0
- package/dist/measure/cjkAnnotate.d.ts.map +1 -0
- package/dist/measure/cjkAnnotate.js +237 -0
- package/dist/measure/cjkAnnotate.js.map +1 -0
- package/dist/measure/cjkClasses.d.ts +133 -0
- package/dist/measure/cjkClasses.d.ts.map +1 -0
- package/dist/measure/cjkClasses.js +273 -0
- package/dist/measure/cjkClasses.js.map +1 -0
- package/dist/measure/cjkCompose.d.ts +86 -0
- package/dist/measure/cjkCompose.d.ts.map +1 -0
- package/dist/measure/cjkCompose.js +2022 -0
- package/dist/measure/cjkCompose.js.map +1 -0
- package/dist/measure/cjkPunctuation.d.ts +248 -0
- package/dist/measure/cjkPunctuation.d.ts.map +1 -0
- package/dist/measure/cjkPunctuation.js +492 -0
- package/dist/measure/cjkPunctuation.js.map +1 -0
- package/dist/measure/graphemes.d.ts +13 -0
- package/dist/measure/graphemes.d.ts.map +1 -0
- package/dist/measure/graphemes.js +38 -0
- package/dist/measure/graphemes.js.map +1 -0
- package/dist/measure/index.d.ts +3 -0
- package/dist/measure/index.d.ts.map +1 -1
- package/dist/measure/index.js +2 -0
- package/dist/measure/index.js.map +1 -1
- package/dist/measure/links.d.ts +6 -2
- package/dist/measure/links.d.ts.map +1 -1
- package/dist/measure/links.js +15 -5
- package/dist/measure/links.js.map +1 -1
- package/dist/measure/markCuts.d.ts +37 -0
- package/dist/measure/markCuts.d.ts.map +1 -0
- package/dist/measure/markCuts.js +77 -0
- package/dist/measure/markCuts.js.map +1 -0
- package/dist/measure/plain.d.ts.map +1 -1
- package/dist/measure/plain.js +33 -11
- package/dist/measure/plain.js.map +1 -1
- package/dist/measure/rich.d.ts +88 -1
- package/dist/measure/rich.d.ts.map +1 -1
- package/dist/measure/rich.js +233 -111
- package/dist/measure/rich.js.map +1 -1
- package/dist/measure/rubyLift.d.ts +11 -0
- package/dist/measure/rubyLift.d.ts.map +1 -0
- package/dist/measure/rubyLift.js +57 -0
- package/dist/measure/rubyLift.js.map +1 -0
- package/dist/measure/spaces.d.ts +12 -2
- package/dist/measure/spaces.d.ts.map +1 -1
- package/dist/measure/spaces.js +21 -7
- package/dist/measure/spaces.js.map +1 -1
- package/dist/measure/types.d.ts +20 -1
- package/dist/measure/types.d.ts.map +1 -1
- package/dist/measure/types.js.map +1 -1
- package/dist/measure/vertical.d.ts +104 -0
- package/dist/measure/vertical.d.ts.map +1 -0
- package/dist/measure/vertical.js +184 -0
- package/dist/measure/vertical.js.map +1 -0
- package/dist/numberWords.d.ts +3 -10
- package/dist/numberWords.d.ts.map +1 -1
- package/dist/numberWords.js +21 -9
- package/dist/numberWords.js.map +1 -1
- package/dist/numbering.d.ts +23 -5
- package/dist/numbering.d.ts.map +1 -1
- package/dist/numbering.js +99 -14
- package/dist/numbering.js.map +1 -1
- package/dist/parse/annotations.d.ts +101 -0
- package/dist/parse/annotations.d.ts.map +1 -0
- package/dist/parse/annotations.js +556 -0
- package/dist/parse/annotations.js.map +1 -0
- package/dist/parse/attrs.d.ts +48 -1
- package/dist/parse/attrs.d.ts.map +1 -1
- package/dist/parse/attrs.js +121 -8
- package/dist/parse/attrs.js.map +1 -1
- package/dist/parse/blockParser.d.ts.map +1 -1
- package/dist/parse/blockParser.js +50 -24
- package/dist/parse/blockParser.js.map +1 -1
- package/dist/parse/index.d.ts +3 -1
- package/dist/parse/index.d.ts.map +1 -1
- package/dist/parse/index.js +1 -0
- package/dist/parse/index.js.map +1 -1
- package/dist/parse/injectSpans.d.ts +3 -1
- package/dist/parse/injectSpans.d.ts.map +1 -1
- package/dist/parse/injectSpans.js +29 -8
- package/dist/parse/injectSpans.js.map +1 -1
- package/dist/parse/inlineFormatting.d.ts +38 -6
- package/dist/parse/inlineFormatting.d.ts.map +1 -1
- package/dist/parse/inlineFormatting.js +139 -26
- package/dist/parse/inlineFormatting.js.map +1 -1
- package/dist/parse/inlineSnippet.d.ts +2 -1
- package/dist/parse/inlineSnippet.d.ts.map +1 -1
- package/dist/parse/inlineSnippet.js +6 -2
- package/dist/parse/inlineSnippet.js.map +1 -1
- package/dist/parse/orientationMarks.d.ts +49 -0
- package/dist/parse/orientationMarks.d.ts.map +1 -0
- package/dist/parse/orientationMarks.js +138 -0
- package/dist/parse/orientationMarks.js.map +1 -0
- package/dist/parse/softBreaks.d.ts +56 -0
- package/dist/parse/softBreaks.d.ts.map +1 -0
- package/dist/parse/softBreaks.js +271 -0
- package/dist/parse/softBreaks.js.map +1 -0
- package/dist/parse/sourceMapping.d.ts.map +1 -1
- package/dist/parse/sourceMapping.js +41 -0
- package/dist/parse/sourceMapping.js.map +1 -1
- package/dist/parse/types.d.ts +84 -0
- package/dist/parse/types.d.ts.map +1 -1
- package/dist/pipeline/annotations.d.ts +56 -0
- package/dist/pipeline/annotations.d.ts.map +1 -0
- package/dist/pipeline/annotations.js +181 -0
- package/dist/pipeline/annotations.js.map +1 -0
- package/dist/pipeline/build.d.ts.map +1 -1
- package/dist/pipeline/build.js +158 -47
- package/dist/pipeline/build.js.map +1 -1
- package/dist/pipeline/buildBlockKind.d.ts +3 -0
- package/dist/pipeline/buildBlockKind.d.ts.map +1 -1
- package/dist/pipeline/buildBlockKind.js +5 -3
- package/dist/pipeline/buildBlockKind.js.map +1 -1
- package/dist/pipeline/buildHelpers.d.ts +36 -6
- package/dist/pipeline/buildHelpers.d.ts.map +1 -1
- package/dist/pipeline/buildHelpers.js +55 -8
- package/dist/pipeline/buildHelpers.js.map +1 -1
- package/dist/pipeline/buildMeasurement.d.ts +4 -0
- package/dist/pipeline/buildMeasurement.d.ts.map +1 -1
- package/dist/pipeline/buildMeasurement.js +3 -1
- package/dist/pipeline/buildMeasurement.js.map +1 -1
- package/dist/pipeline/calloutLayout.d.ts.map +1 -1
- package/dist/pipeline/calloutLayout.js +25 -11
- package/dist/pipeline/calloutLayout.js.map +1 -1
- package/dist/pipeline/cjkGrid.d.ts +133 -0
- package/dist/pipeline/cjkGrid.d.ts.map +1 -0
- package/dist/pipeline/cjkGrid.js +191 -0
- package/dist/pipeline/cjkGrid.js.map +1 -0
- package/dist/pipeline/config.d.ts +13 -9
- package/dist/pipeline/config.d.ts.map +1 -1
- package/dist/pipeline/config.js +43 -18
- package/dist/pipeline/config.js.map +1 -1
- package/dist/pipeline/contentWarnings.d.ts +10 -0
- package/dist/pipeline/contentWarnings.d.ts.map +1 -1
- package/dist/pipeline/contentWarnings.js +174 -2
- package/dist/pipeline/contentWarnings.js.map +1 -1
- package/dist/pipeline/floatPlacement.d.ts +9 -3
- package/dist/pipeline/floatPlacement.d.ts.map +1 -1
- package/dist/pipeline/floatPlacement.js +17 -6
- package/dist/pipeline/floatPlacement.js.map +1 -1
- package/dist/pipeline/headerFooter.d.ts +5 -2
- package/dist/pipeline/headerFooter.d.ts.map +1 -1
- package/dist/pipeline/headerFooter.js +123 -28
- package/dist/pipeline/headerFooter.js.map +1 -1
- package/dist/pipeline/headingDesignCuts.d.ts.map +1 -1
- package/dist/pipeline/headingDesignCuts.js +3 -1
- package/dist/pipeline/headingDesignCuts.js.map +1 -1
- package/dist/pipeline/headingStyles.d.ts +9 -3
- package/dist/pipeline/headingStyles.d.ts.map +1 -1
- package/dist/pipeline/headingStyles.js +23 -5
- package/dist/pipeline/headingStyles.js.map +1 -1
- package/dist/pipeline/indexDirective.d.ts.map +1 -1
- package/dist/pipeline/indexDirective.js +64 -20
- package/dist/pipeline/indexDirective.js.map +1 -1
- package/dist/pipeline/indexGroups.d.ts +55 -0
- package/dist/pipeline/indexGroups.d.ts.map +1 -0
- package/dist/pipeline/indexGroups.js +151 -0
- package/dist/pipeline/indexGroups.js.map +1 -0
- package/dist/pipeline/lists.d.ts +17 -0
- package/dist/pipeline/lists.d.ts.map +1 -1
- package/dist/pipeline/lists.js +43 -51
- package/dist/pipeline/lists.js.map +1 -1
- package/dist/pipeline/measureContentBlock.d.ts +3 -0
- package/dist/pipeline/measureContentBlock.d.ts.map +1 -1
- package/dist/pipeline/measureContentBlock.js +31 -4
- package/dist/pipeline/measureContentBlock.js.map +1 -1
- package/dist/pipeline/outline.d.ts.map +1 -1
- package/dist/pipeline/outline.js +13 -8
- package/dist/pipeline/outline.js.map +1 -1
- package/dist/pipeline/parts.d.ts +6 -3
- package/dist/pipeline/parts.d.ts.map +1 -1
- package/dist/pipeline/parts.js +28 -5
- package/dist/pipeline/parts.js.map +1 -1
- package/dist/pipeline/placeholders.d.ts +11 -0
- package/dist/pipeline/placeholders.d.ts.map +1 -1
- package/dist/pipeline/placeholders.js +48 -18
- package/dist/pipeline/placeholders.js.map +1 -1
- package/dist/pipeline/placement.d.ts +10 -6
- package/dist/pipeline/placement.d.ts.map +1 -1
- package/dist/pipeline/placement.js +33 -16
- package/dist/pipeline/placement.js.map +1 -1
- package/dist/pipeline/resourceLayout.d.ts +18 -1
- package/dist/pipeline/resourceLayout.d.ts.map +1 -1
- package/dist/pipeline/resourceLayout.js +109 -21
- package/dist/pipeline/resourceLayout.js.map +1 -1
- package/dist/pipeline/toc.d.ts.map +1 -1
- package/dist/pipeline/toc.js +6 -5
- package/dist/pipeline/toc.js.map +1 -1
- package/dist/pipeline/verticalMetrics.d.ts +14 -0
- package/dist/pipeline/verticalMetrics.d.ts.map +1 -0
- package/dist/pipeline/verticalMetrics.js +154 -0
- package/dist/pipeline/verticalMetrics.js.map +1 -0
- package/dist/types.d.ts +344 -13
- package/dist/types.d.ts.map +1 -1
- package/dist/vdt.d.ts +396 -6
- package/dist/vdt.d.ts.map +1 -1
- package/dist/vdt.js +49 -0
- package/dist/vdt.js.map +1 -1
- package/dist/writingMode.d.ts +156 -0
- package/dist/writingMode.d.ts.map +1 -0
- package/dist/writingMode.js +291 -0
- package/dist/writingMode.js.map +1 -0
- package/package.json +1 -1
package/dist/locale.d.ts
CHANGED
|
@@ -1,12 +1,77 @@
|
|
|
1
|
-
import type { HyphenationLocale, LocaleTag } from './types';
|
|
1
|
+
import type { CjkRegion, HyphenationLocale, LocaleTag } from './types';
|
|
2
2
|
/** The languages whose hyphenation patterns ship with the engine. */
|
|
3
3
|
export declare const HYPHENATION_LOCALES: readonly HyphenationLocale[];
|
|
4
4
|
/** The primary language subtag of a BCP 47 tag, lower-cased (`'pt_BR'` →
|
|
5
5
|
* `'pt'`, `'en-us'` → `'en'`). The key of the built-in string tables. */
|
|
6
|
-
export declare function languageOf(tag:
|
|
6
|
+
export declare function languageOf(tag: unknown): string;
|
|
7
7
|
/** A configured tag, trimmed, or `undefined` when it is missing, blank or not
|
|
8
8
|
* a string: such a tag counts as unset wherever a locale falls back. */
|
|
9
9
|
export declare function presentTag(tag: unknown): string | undefined;
|
|
10
|
+
/** Whether `tag` names Chinese, Japanese or Korean (`'zh-Hant'`, `'ja-JP'`,
|
|
11
|
+
* `'ko'`, in any case, with `-` or `_`). Such a document needs no
|
|
12
|
+
* hyphenation patterns: hyphenation is off unless the author turns it on
|
|
13
|
+
* and names a language for the Latin words. */
|
|
14
|
+
export declare function isCjkLanguage(tag: unknown): boolean;
|
|
15
|
+
/** The script of a tag, as `Intl.Locale(tag).maximize()` reads it: `'Hans'`
|
|
16
|
+
* for `zh`, `zh-CN`, `zh-SG`; `'Hant'` for `zh-TW`, `zh-HK`, `zh-MO` and
|
|
17
|
+
* `zh-Hant`; `'Latn'` for `en`. `undefined` for a missing or invalid tag. */
|
|
18
|
+
export declare function localeScript(tag: unknown): string | undefined;
|
|
19
|
+
/** The typographic region of a Chinese tag, which decides its typographic
|
|
20
|
+
* defaults (clreq §1.2: rules follow the region, not the script): CN, SG
|
|
21
|
+
* and MY are `'mainland'`, TW `'taiwan'`, HK and MO `'hongkong'`; a tag
|
|
22
|
+
* without a region follows its script (`zh-Hant` → `'taiwan'`, `zh` and
|
|
23
|
+
* `zh-Hans` → `'mainland'`). `undefined` for any other language. */
|
|
24
|
+
export declare function cjkRegionOf(tag: unknown): CjkRegion | undefined;
|
|
25
|
+
/** The script of a Chinese tag once maximised: `'Hant'` for `zh-TW`,
|
|
26
|
+
* `zh-HK`, `zh-MO` and `zh-Hant`, `'Hans'` for every other Chinese tag
|
|
27
|
+
* (`zh`, `zh-CN`, `zh-SG`, `zh-Hans`); `undefined` for any other
|
|
28
|
+
* language. */
|
|
29
|
+
export declare function chineseScriptOf(tag: unknown): 'Hans' | 'Hant' | undefined;
|
|
30
|
+
/** The key of the built-in string tables for a tag: `'zh-hans'` or
|
|
31
|
+
* `'zh-hant'` for Chinese (Simplified and Traditional need different
|
|
32
|
+
* characters: 图/圖, 续/續, 见/見), else the bare language
|
|
33
|
+
* ({@link languageOf}). */
|
|
34
|
+
export declare function stringsKeyOf(tag: unknown): string;
|
|
35
|
+
/** A BCP 47 tag in its canonical case (`'zh-hant-tw'` → `'zh-Hant-TW'`,
|
|
36
|
+
* `'PT-br'` → `'pt-BR'`, `'en_us'` → `'en-US'`), script and region kept;
|
|
37
|
+
* `undefined` for a missing, blank or malformed tag. The form HTML `lang`,
|
|
38
|
+
* PDF `/Lang` and a Sandbox permalink's `lang=` carry. */
|
|
39
|
+
export declare function canonicalLocaleTag(tag: unknown): string | undefined;
|
|
40
|
+
/** The `lang` a renderer declares for a resolved document (the HTML root,
|
|
41
|
+
* the canvas context): its language in canonical form (`zh-Hant-TW`),
|
|
42
|
+
* from `locale`, else the hyphenation tag. Only Chinese, Japanese and
|
|
43
|
+
* Korean documents declare one — there the browser picks regional glyph
|
|
44
|
+
* forms from it (Han characters unified in Unicode, punctuation set in the
|
|
45
|
+
* corner or the centre of the em box) — so the output of every other
|
|
46
|
+
* document is unchanged. */
|
|
47
|
+
export declare function renderLangOf(config: {
|
|
48
|
+
locale?: string;
|
|
49
|
+
bodyText?: {
|
|
50
|
+
hyphenation?: {
|
|
51
|
+
tag?: string;
|
|
52
|
+
locale?: string;
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
} | undefined): string | undefined;
|
|
56
|
+
/**
|
|
57
|
+
* The entry of a built-in string table for `tag`, keyed by
|
|
58
|
+
* {@link stringsKeyOf}: the tag's own, then — for Traditional Chinese — the
|
|
59
|
+
* Simplified one, then English (`en`). A table only lists the languages it
|
|
60
|
+
* has strings for.
|
|
61
|
+
*/
|
|
62
|
+
export declare function stringsFor<T>(table: Readonly<Record<string, T>>, tag: unknown): T;
|
|
63
|
+
/** A document language the engine has built-in strings for (figure and
|
|
64
|
+
* table names, continuation marks, index labels), with its name in the
|
|
65
|
+
* language itself. */
|
|
66
|
+
export interface DocumentLanguage {
|
|
67
|
+
tag: string;
|
|
68
|
+
name: string;
|
|
69
|
+
}
|
|
70
|
+
/** The document languages with built-in strings, in the order a language
|
|
71
|
+
* picker lists them: the eight hyphenation languages, then Chinese in
|
|
72
|
+
* Simplified characters, in Traditional characters (Taiwan) and in
|
|
73
|
+
* Traditional characters as set in Hong Kong. */
|
|
74
|
+
export declare const DOCUMENT_LANGUAGES: readonly DocumentLanguage[];
|
|
10
75
|
/**
|
|
11
76
|
* The bundled hyphenation locale for a BCP 47 language tag, or `undefined`
|
|
12
77
|
* when no patterns ship for its language. Case, `_` separators and any
|
|
@@ -18,9 +83,32 @@ export declare function matchHyphenationLocale(tag: string): HyphenationLocale |
|
|
|
18
83
|
/**
|
|
19
84
|
* {@link matchHyphenationLocale}, falling back to `'en-us'` for a language
|
|
20
85
|
* with no bundled patterns. The fallback is reported once per tag on the
|
|
21
|
-
* console, since the text is then hyphenated with another language's rules
|
|
86
|
+
* console, since the text is then hyphenated with another language's rules
|
|
87
|
+
* (Chinese, Japanese and Korean excepted: they are set without hyphenation);
|
|
22
88
|
* `warn: false` skips the report (hyphenation is off, so no text uses the
|
|
23
89
|
* patterns). A missing or blank tag gives `'en-us'` silently.
|
|
24
90
|
*/
|
|
25
91
|
export declare function hyphenationLocaleFor(tag: LocaleTag, warn?: boolean): HyphenationLocale;
|
|
92
|
+
/**
|
|
93
|
+
* Whether two locale tags name the same content language: the same
|
|
94
|
+
* language, and for a language written in several scripts (Chinese,
|
|
95
|
+
* Serbian…) the same script once the tags are maximised. `zh-TW` is
|
|
96
|
+
* `zh-Hant`, `zh` is `zh-Hans`, `es-ES` is `es`; `zh-Hans` is never
|
|
97
|
+
* `zh-Hant`. Case and `_` separators are ignored; a missing or blank tag
|
|
98
|
+
* matches nothing.
|
|
99
|
+
*/
|
|
100
|
+
export declare function sameContentLocale(a: unknown, b: unknown): boolean;
|
|
101
|
+
/**
|
|
102
|
+
* The one of `candidates` that serves `wanted`, or undefined when none is
|
|
103
|
+
* in its language. An exact tag (case aside) wins; then, for a tag naming
|
|
104
|
+
* a region, the one that maximises to the same language, script and region
|
|
105
|
+
* (`zh-TW` finds `zh-Hant`, `en-US` finds `en`); then one in the same
|
|
106
|
+
* script (a tag with no region first: `zh` finds `zh-Hans`); then any tag
|
|
107
|
+
* of the language, in another script too: `zh-Hant` finds `zh-Hans` (or a
|
|
108
|
+
* bare `zh`) only when no candidate is written in Traditional characters.
|
|
109
|
+
* Ties keep the order of `candidates`. Whether two tags are the same
|
|
110
|
+
* edition is {@link sameContentLocale}'s question, which the script
|
|
111
|
+
* always answers.
|
|
112
|
+
*/
|
|
113
|
+
export declare function matchContentLocale(candidates: readonly string[], wanted: string): string | undefined;
|
|
26
114
|
//# sourceMappingURL=locale.d.ts.map
|
package/dist/locale.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locale.d.ts","sourceRoot":"","sources":["../src/locale.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"locale.d.ts","sourceRoot":"","sources":["../src/locale.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEvE,qEAAqE;AACrE,eAAO,MAAM,mBAAmB,EAAE,SAAS,iBAAiB,EAEjD,CAAC;AAIZ;0EAC0E;AAC1E,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAE/C;AAQD;yEACyE;AACzE,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAE3D;AAMD;;;gDAGgD;AAChD,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAEnD;AAmBD;;8EAE8E;AAC9E,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAE7D;AAED;;;;qEAIqE;AACrE,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAS/D;AAED;;;gBAGgB;AAChB,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAGzE;AAED;;;4BAG4B;AAC5B,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAIjD;AAED;;;2DAG2D;AAC3D,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAOnE;AAED;;;;;;6BAM6B;AAC7B,wBAAgB,YAAY,CAAC,MAAM,EAAE;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE;YAAE,GAAG,CAAC,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;CAChE,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAIjC;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,GAAG,CAAC,CAGjF;AAED;;uBAEuB;AACvB,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;kDAGkD;AAClD,eAAO,MAAM,kBAAkB,EAAE,SAAS,gBAAgB,EAY3B,CAAC;AAEhC;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAQjF;AAKD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,UAAO,GAAG,iBAAiB,CAenF;AAiDD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CASjE;AAgCD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAYpG"}
|
package/dist/locale.js
CHANGED
|
@@ -18,6 +18,130 @@ function isTag(tag) {
|
|
|
18
18
|
export function presentTag(tag) {
|
|
19
19
|
return isTag(tag) ? tag.trim() : undefined;
|
|
20
20
|
}
|
|
21
|
+
/** Languages set without hyphenation: Chinese, Japanese and Korean break
|
|
22
|
+
* lines between characters, and no patterns ship for them. */
|
|
23
|
+
const CJK_LANGUAGES = new Set(['zh', 'ja', 'ko']);
|
|
24
|
+
/** Whether `tag` names Chinese, Japanese or Korean (`'zh-Hant'`, `'ja-JP'`,
|
|
25
|
+
* `'ko'`, in any case, with `-` or `_`). Such a document needs no
|
|
26
|
+
* hyphenation patterns: hyphenation is off unless the author turns it on
|
|
27
|
+
* and names a language for the Latin words. */
|
|
28
|
+
export function isCjkLanguage(tag) {
|
|
29
|
+
return isTag(tag) && CJK_LANGUAGES.has(languageOf(tag));
|
|
30
|
+
}
|
|
31
|
+
/** `Intl.Locale(tag).maximize()`, memoised; `undefined` for a tag the
|
|
32
|
+
* runtime rejects (or a runtime without `Intl.Locale`). */
|
|
33
|
+
const maximized = new Map();
|
|
34
|
+
function maximize(tag) {
|
|
35
|
+
const key = tag.trim().replace(/_/g, '-');
|
|
36
|
+
let hit = maximized.get(key);
|
|
37
|
+
if (hit === undefined) {
|
|
38
|
+
try {
|
|
39
|
+
hit = typeof Intl.Locale === 'function' ? new Intl.Locale(key).maximize() : null;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
hit = null;
|
|
43
|
+
}
|
|
44
|
+
maximized.set(key, hit);
|
|
45
|
+
}
|
|
46
|
+
return hit ?? undefined;
|
|
47
|
+
}
|
|
48
|
+
/** The script of a tag, as `Intl.Locale(tag).maximize()` reads it: `'Hans'`
|
|
49
|
+
* for `zh`, `zh-CN`, `zh-SG`; `'Hant'` for `zh-TW`, `zh-HK`, `zh-MO` and
|
|
50
|
+
* `zh-Hant`; `'Latn'` for `en`. `undefined` for a missing or invalid tag. */
|
|
51
|
+
export function localeScript(tag) {
|
|
52
|
+
return isTag(tag) ? maximize(tag)?.script : undefined;
|
|
53
|
+
}
|
|
54
|
+
/** The typographic region of a Chinese tag, which decides its typographic
|
|
55
|
+
* defaults (clreq §1.2: rules follow the region, not the script): CN, SG
|
|
56
|
+
* and MY are `'mainland'`, TW `'taiwan'`, HK and MO `'hongkong'`; a tag
|
|
57
|
+
* without a region follows its script (`zh-Hant` → `'taiwan'`, `zh` and
|
|
58
|
+
* `zh-Hans` → `'mainland'`). `undefined` for any other language. */
|
|
59
|
+
export function cjkRegionOf(tag) {
|
|
60
|
+
if (!isTag(tag) || languageOf(tag) !== 'zh')
|
|
61
|
+
return undefined;
|
|
62
|
+
const loc = maximize(tag);
|
|
63
|
+
switch (loc?.region) {
|
|
64
|
+
case 'CN':
|
|
65
|
+
case 'SG':
|
|
66
|
+
case 'MY': return 'mainland';
|
|
67
|
+
case 'TW': return 'taiwan';
|
|
68
|
+
case 'HK':
|
|
69
|
+
case 'MO': return 'hongkong';
|
|
70
|
+
default: return loc?.script === 'Hant' ? 'taiwan' : 'mainland';
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/** The script of a Chinese tag once maximised: `'Hant'` for `zh-TW`,
|
|
74
|
+
* `zh-HK`, `zh-MO` and `zh-Hant`, `'Hans'` for every other Chinese tag
|
|
75
|
+
* (`zh`, `zh-CN`, `zh-SG`, `zh-Hans`); `undefined` for any other
|
|
76
|
+
* language. */
|
|
77
|
+
export function chineseScriptOf(tag) {
|
|
78
|
+
if (!isTag(tag) || languageOf(tag) !== 'zh')
|
|
79
|
+
return undefined;
|
|
80
|
+
return localeScript(tag) === 'Hant' ? 'Hant' : 'Hans';
|
|
81
|
+
}
|
|
82
|
+
/** The key of the built-in string tables for a tag: `'zh-hans'` or
|
|
83
|
+
* `'zh-hant'` for Chinese (Simplified and Traditional need different
|
|
84
|
+
* characters: 图/圖, 续/續, 见/見), else the bare language
|
|
85
|
+
* ({@link languageOf}). */
|
|
86
|
+
export function stringsKeyOf(tag) {
|
|
87
|
+
const script = chineseScriptOf(tag);
|
|
88
|
+
if (script)
|
|
89
|
+
return script === 'Hant' ? 'zh-hant' : 'zh-hans';
|
|
90
|
+
return languageOf(tag);
|
|
91
|
+
}
|
|
92
|
+
/** A BCP 47 tag in its canonical case (`'zh-hant-tw'` → `'zh-Hant-TW'`,
|
|
93
|
+
* `'PT-br'` → `'pt-BR'`, `'en_us'` → `'en-US'`), script and region kept;
|
|
94
|
+
* `undefined` for a missing, blank or malformed tag. The form HTML `lang`,
|
|
95
|
+
* PDF `/Lang` and a Sandbox permalink's `lang=` carry. */
|
|
96
|
+
export function canonicalLocaleTag(tag) {
|
|
97
|
+
if (!isTag(tag))
|
|
98
|
+
return undefined;
|
|
99
|
+
try {
|
|
100
|
+
return Intl.getCanonicalLocales(tag.trim().replace(/_/g, '-'))[0];
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
return undefined;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/** The `lang` a renderer declares for a resolved document (the HTML root,
|
|
107
|
+
* the canvas context): its language in canonical form (`zh-Hant-TW`),
|
|
108
|
+
* from `locale`, else the hyphenation tag. Only Chinese, Japanese and
|
|
109
|
+
* Korean documents declare one — there the browser picks regional glyph
|
|
110
|
+
* forms from it (Han characters unified in Unicode, punctuation set in the
|
|
111
|
+
* corner or the centre of the em box) — so the output of every other
|
|
112
|
+
* document is unchanged. */
|
|
113
|
+
export function renderLangOf(config) {
|
|
114
|
+
const h = config?.bodyText?.hyphenation;
|
|
115
|
+
const tag = presentTag(config?.locale) ?? presentTag(h?.tag) ?? presentTag(h?.locale);
|
|
116
|
+
return isCjkLanguage(tag) ? canonicalLocaleTag(tag) : undefined;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* The entry of a built-in string table for `tag`, keyed by
|
|
120
|
+
* {@link stringsKeyOf}: the tag's own, then — for Traditional Chinese — the
|
|
121
|
+
* Simplified one, then English (`en`). A table only lists the languages it
|
|
122
|
+
* has strings for.
|
|
123
|
+
*/
|
|
124
|
+
export function stringsFor(table, tag) {
|
|
125
|
+
const key = stringsKeyOf(tag);
|
|
126
|
+
return table[key] ?? (key === 'zh-hant' ? table['zh-hans'] : undefined) ?? table.en;
|
|
127
|
+
}
|
|
128
|
+
/** The document languages with built-in strings, in the order a language
|
|
129
|
+
* picker lists them: the eight hyphenation languages, then Chinese in
|
|
130
|
+
* Simplified characters, in Traditional characters (Taiwan) and in
|
|
131
|
+
* Traditional characters as set in Hong Kong. */
|
|
132
|
+
export const DOCUMENT_LANGUAGES = Object.freeze([
|
|
133
|
+
{ tag: 'en-us', name: 'English' },
|
|
134
|
+
{ tag: 'es', name: 'Español' },
|
|
135
|
+
{ tag: 'fr', name: 'Français' },
|
|
136
|
+
{ tag: 'de', name: 'Deutsch' },
|
|
137
|
+
{ tag: 'it', name: 'Italiano' },
|
|
138
|
+
{ tag: 'pt', name: 'Português' },
|
|
139
|
+
{ tag: 'ca', name: 'Català' },
|
|
140
|
+
{ tag: 'nl', name: 'Nederlands' },
|
|
141
|
+
{ tag: 'zh-Hans', name: '中文(简体)' },
|
|
142
|
+
{ tag: 'zh-Hant', name: '中文(繁體)' },
|
|
143
|
+
{ tag: 'zh-Hant-HK', name: '中文(香港)' },
|
|
144
|
+
].map((l) => Object.freeze(l)));
|
|
21
145
|
/**
|
|
22
146
|
* The bundled hyphenation locale for a BCP 47 language tag, or `undefined`
|
|
23
147
|
* when no patterns ship for its language. Case, `_` separators and any
|
|
@@ -43,7 +167,8 @@ const warnedTags = new Set();
|
|
|
43
167
|
/**
|
|
44
168
|
* {@link matchHyphenationLocale}, falling back to `'en-us'` for a language
|
|
45
169
|
* with no bundled patterns. The fallback is reported once per tag on the
|
|
46
|
-
* console, since the text is then hyphenated with another language's rules
|
|
170
|
+
* console, since the text is then hyphenated with another language's rules
|
|
171
|
+
* (Chinese, Japanese and Korean excepted: they are set without hyphenation);
|
|
47
172
|
* `warn: false` skips the report (hyphenation is off, so no text uses the
|
|
48
173
|
* patterns). A missing or blank tag gives `'en-us'` silently.
|
|
49
174
|
*/
|
|
@@ -53,6 +178,10 @@ export function hyphenationLocaleFor(tag, warn = true) {
|
|
|
53
178
|
const match = matchHyphenationLocale(tag);
|
|
54
179
|
if (match)
|
|
55
180
|
return match;
|
|
181
|
+
// Chinese, Japanese and Korean need no patterns: nothing to report. The
|
|
182
|
+
// body text resolves hyphenation off for them (see `resolveHyphenation`).
|
|
183
|
+
if (isCjkLanguage(tag))
|
|
184
|
+
return 'en-us';
|
|
56
185
|
if (warn && !warnedTags.has(tag)) {
|
|
57
186
|
warnedTags.add(tag);
|
|
58
187
|
console.warn(`[postext] No hyphenation patterns for locale "${tag}"; hyphenating with en-us. `
|
|
@@ -60,4 +189,119 @@ export function hyphenationLocaleFor(tag, warn = true) {
|
|
|
60
189
|
}
|
|
61
190
|
return 'en-us';
|
|
62
191
|
}
|
|
192
|
+
// ---------------------------------------------------------------------------
|
|
193
|
+
// Content locales: which of a book's languages serves a locale asked for.
|
|
194
|
+
/** Languages written in more than one script, where the script tells two
|
|
195
|
+
* editions apart: a Traditional Chinese book is not a Simplified one,
|
|
196
|
+
* whatever the language subtag says. */
|
|
197
|
+
const SCRIPT_DISTINCT_LANGUAGES = new Set(['zh', 'sr', 'uz', 'pa', 'az', 'bs', 'mn', 'ks', 'sd', 'ku']);
|
|
198
|
+
const partsCache = new Map();
|
|
199
|
+
function localeParts(tag) {
|
|
200
|
+
const hit = partsCache.get(tag);
|
|
201
|
+
if (hit !== undefined)
|
|
202
|
+
return hit;
|
|
203
|
+
let parts = null;
|
|
204
|
+
const canonical = canonicalLocaleTag(tag);
|
|
205
|
+
if (canonical) {
|
|
206
|
+
try {
|
|
207
|
+
const locale = new Intl.Locale(canonical);
|
|
208
|
+
// No likely-subtags data: the tag as written.
|
|
209
|
+
const max = maximize(canonical) ?? locale;
|
|
210
|
+
parts = {
|
|
211
|
+
tag: canonical.toLowerCase(),
|
|
212
|
+
language: locale.language.toLowerCase(),
|
|
213
|
+
script: max.script ?? '',
|
|
214
|
+
region: max.region ?? '',
|
|
215
|
+
hasRegion: !!locale.region,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
parts = null;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
if (partsCache.size > 512)
|
|
223
|
+
partsCache.clear();
|
|
224
|
+
partsCache.set(tag, parts);
|
|
225
|
+
return parts;
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Whether two locale tags name the same content language: the same
|
|
229
|
+
* language, and for a language written in several scripts (Chinese,
|
|
230
|
+
* Serbian…) the same script once the tags are maximised. `zh-TW` is
|
|
231
|
+
* `zh-Hant`, `zh` is `zh-Hans`, `es-ES` is `es`; `zh-Hans` is never
|
|
232
|
+
* `zh-Hant`. Case and `_` separators are ignored; a missing or blank tag
|
|
233
|
+
* matches nothing.
|
|
234
|
+
*/
|
|
235
|
+
export function sameContentLocale(a, b) {
|
|
236
|
+
const pa = isTag(a) ? localeParts(a) : null;
|
|
237
|
+
const pb = isTag(b) ? localeParts(b) : null;
|
|
238
|
+
if (!pa || !pb) {
|
|
239
|
+
const la = languageOf(a);
|
|
240
|
+
return la !== '' && la === languageOf(b);
|
|
241
|
+
}
|
|
242
|
+
if (pa.language !== pb.language)
|
|
243
|
+
return false;
|
|
244
|
+
return !SCRIPT_DISTINCT_LANGUAGES.has(pa.language) || pa.script === pb.script;
|
|
245
|
+
}
|
|
246
|
+
/** How well `candidate` serves `wanted`: 0 not at all, then 1 for the
|
|
247
|
+
* language only (in another script: a Taiwanese reader of a book keyed by
|
|
248
|
+
* bare `zh` reads the Chinese rather than the manifest's own language), the
|
|
249
|
+
* same script in a region of its own, the same script and no region, the
|
|
250
|
+
* same script and the region `wanted` names (once maximised), and the same
|
|
251
|
+
* tag. */
|
|
252
|
+
function localeMatchScore(candidate, wanted) {
|
|
253
|
+
const pc = isTag(candidate) ? localeParts(candidate) : null;
|
|
254
|
+
const pw = isTag(wanted) ? localeParts(wanted) : null;
|
|
255
|
+
if (!pc || !pw) {
|
|
256
|
+
if (!isTag(candidate) || !isTag(wanted))
|
|
257
|
+
return 0;
|
|
258
|
+
const c = candidate.trim().toLowerCase();
|
|
259
|
+
const w = wanted.trim().toLowerCase();
|
|
260
|
+
if (c === w)
|
|
261
|
+
return 5;
|
|
262
|
+
const lc = languageOf(c);
|
|
263
|
+
if (lc === '' || lc !== languageOf(w))
|
|
264
|
+
return 0;
|
|
265
|
+
return c === lc ? 3 : 1;
|
|
266
|
+
}
|
|
267
|
+
if (pc.tag === pw.tag)
|
|
268
|
+
return 5;
|
|
269
|
+
if (pc.language !== pw.language)
|
|
270
|
+
return 0;
|
|
271
|
+
if (pc.script === pw.script) {
|
|
272
|
+
// A region counts when the reader names one: `zh-TW` reads `zh-Hant`
|
|
273
|
+
// (Taiwan once maximised), while a bare `pt` does not prefer `pt-BR`
|
|
274
|
+
// over `pt-PT`.
|
|
275
|
+
if (pw.hasRegion && pc.region === pw.region)
|
|
276
|
+
return 4;
|
|
277
|
+
return pc.hasRegion ? 2 : 3;
|
|
278
|
+
}
|
|
279
|
+
return 1;
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* The one of `candidates` that serves `wanted`, or undefined when none is
|
|
283
|
+
* in its language. An exact tag (case aside) wins; then, for a tag naming
|
|
284
|
+
* a region, the one that maximises to the same language, script and region
|
|
285
|
+
* (`zh-TW` finds `zh-Hant`, `en-US` finds `en`); then one in the same
|
|
286
|
+
* script (a tag with no region first: `zh` finds `zh-Hans`); then any tag
|
|
287
|
+
* of the language, in another script too: `zh-Hant` finds `zh-Hans` (or a
|
|
288
|
+
* bare `zh`) only when no candidate is written in Traditional characters.
|
|
289
|
+
* Ties keep the order of `candidates`. Whether two tags are the same
|
|
290
|
+
* edition is {@link sameContentLocale}'s question, which the script
|
|
291
|
+
* always answers.
|
|
292
|
+
*/
|
|
293
|
+
export function matchContentLocale(candidates, wanted) {
|
|
294
|
+
let best;
|
|
295
|
+
let bestScore = 0;
|
|
296
|
+
for (const c of candidates) {
|
|
297
|
+
const score = localeMatchScore(c, wanted);
|
|
298
|
+
if (score > bestScore) {
|
|
299
|
+
best = c;
|
|
300
|
+
bestScore = score;
|
|
301
|
+
if (score === 5)
|
|
302
|
+
break;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
return best;
|
|
306
|
+
}
|
|
63
307
|
//# sourceMappingURL=locale.js.map
|
package/dist/locale.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locale.js","sourceRoot":"","sources":["../src/locale.ts"],"names":[],"mappings":"AAEA,qEAAqE;AACrE,MAAM,CAAC,MAAM,mBAAmB,GAAiC,MAAM,CAAC,MAAM,CAAC;IAC7E,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;CACzC,CAAC,CAAC;AAEZ,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,mBAAmB,CAAC,CAAC;AAErD;0EAC0E;AAC1E,MAAM,UAAU,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"locale.js","sourceRoot":"","sources":["../src/locale.ts"],"names":[],"mappings":"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"}
|
package/dist/looseLines.d.ts
CHANGED
|
@@ -1,11 +1,21 @@
|
|
|
1
1
|
import type { VDTBlock, VDTDocument, VDTLine, VDTPage } from './vdt';
|
|
2
|
+
/**
|
|
3
|
+
* How loosely a line is set, as a word-space ratio: its
|
|
4
|
+
* `justifiedSpaceRatio`, or, for a CJK line spread between its characters
|
|
5
|
+
* (segment `tracking`), `1 + tracking / (⅛ em)` — at the default threshold
|
|
6
|
+
* of 3, a line whose characters are spread by more than ¼ em is loose. The
|
|
7
|
+
* larger of the two when a line has both; undefined when it has neither.
|
|
8
|
+
* `fontSizePx` is the block's text size.
|
|
9
|
+
*/
|
|
10
|
+
export declare function lineLooseness(line: VDTLine, fontSizePx: number): number | undefined;
|
|
2
11
|
/** A justified line whose word spaces stretch past the loose-line threshold,
|
|
3
12
|
* with the band the highlight covers. */
|
|
4
13
|
export interface LooseLine {
|
|
5
14
|
block: VDTBlock;
|
|
6
15
|
line: VDTLine;
|
|
7
16
|
/** Applied word-space width over the font's normal space
|
|
8
|
-
* (`line.justifiedSpaceRatio`)
|
|
17
|
+
* (`line.justifiedSpaceRatio`); for a CJK line spread between its
|
|
18
|
+
* characters, the ratio {@link lineLooseness} gives. */
|
|
9
19
|
ratio: number;
|
|
10
20
|
/** The highlight band, in page pixels: the block's full width across the
|
|
11
21
|
* line's box. */
|
package/dist/looseLines.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"looseLines.d.ts","sourceRoot":"","sources":["../src/looseLines.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"looseLines.d.ts","sourceRoot":"","sources":["../src/looseLines.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAKrE;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAOnF;AAED;0CAC0C;AAC1C,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,QAAQ,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd;;6DAEyD;IACzD,KAAK,EAAE,MAAM,CAAC;IACd;sBACkB;IAClB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC;;2EAEuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,mDAAmD;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;oDACgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,GAAE,qBAA0B,GAAG,SAAS,EAAE,CAyBjG;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,wBAAwB,GAAG,iCAAiC,EACjE,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,WAAW,EAChB,OAAO,GAAE,qBAA0B,GAClC,SAAS,EAAE,CAQb"}
|
package/dist/looseLines.js
CHANGED
|
@@ -1,4 +1,24 @@
|
|
|
1
1
|
import { DEFAULT_DEBUG_CONFIG } from './defaults/debug';
|
|
2
|
+
const FONT_SIZE_RE = /(\d*\.?\d+)px/;
|
|
3
|
+
/**
|
|
4
|
+
* How loosely a line is set, as a word-space ratio: its
|
|
5
|
+
* `justifiedSpaceRatio`, or, for a CJK line spread between its characters
|
|
6
|
+
* (segment `tracking`), `1 + tracking / (⅛ em)` — at the default threshold
|
|
7
|
+
* of 3, a line whose characters are spread by more than ¼ em is loose. The
|
|
8
|
+
* larger of the two when a line has both; undefined when it has neither.
|
|
9
|
+
* `fontSizePx` is the block's text size.
|
|
10
|
+
*/
|
|
11
|
+
export function lineLooseness(line, fontSizePx) {
|
|
12
|
+
let tracking = 0;
|
|
13
|
+
for (const seg of line.segments ?? [])
|
|
14
|
+
if (seg.tracking !== undefined && seg.tracking > tracking)
|
|
15
|
+
tracking = seg.tracking;
|
|
16
|
+
const cjk = tracking > 0 && fontSizePx > 0 ? 1 + tracking / (fontSizePx / 8) : undefined;
|
|
17
|
+
const spaces = line.justifiedSpaceRatio;
|
|
18
|
+
if (cjk === undefined)
|
|
19
|
+
return spaces;
|
|
20
|
+
return spaces === undefined ? cjk : Math.max(spaces, cjk);
|
|
21
|
+
}
|
|
2
22
|
/**
|
|
3
23
|
* The loose lines of a laid-out document, in block and line order: the lines
|
|
4
24
|
* the Sandbox's loose-line highlight and its `looseLine` check mark.
|
|
@@ -9,8 +29,13 @@ export function findLooseLines(doc, options = {}) {
|
|
|
9
29
|
for (const block of doc.blocks) {
|
|
10
30
|
if (options.pageIndex !== undefined && block.pageIndex !== options.pageIndex)
|
|
11
31
|
continue;
|
|
32
|
+
let fontSizePx;
|
|
12
33
|
for (const line of block.lines) {
|
|
13
|
-
|
|
34
|
+
let ratio = line.justifiedSpaceRatio;
|
|
35
|
+
if (line.segments?.some((s) => s.tracking !== undefined)) {
|
|
36
|
+
fontSizePx ??= Number(FONT_SIZE_RE.exec(block.fontString ?? '')?.[1] ?? 16);
|
|
37
|
+
ratio = lineLooseness(line, fontSizePx);
|
|
38
|
+
}
|
|
14
39
|
if (ratio === undefined || ratio <= threshold)
|
|
15
40
|
continue;
|
|
16
41
|
out.push({
|
package/dist/looseLines.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"looseLines.js","sourceRoot":"","sources":["../src/looseLines.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"looseLines.js","sourceRoot":"","sources":["../src/looseLines.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/measure/cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/measure/cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AA4GpF,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,mBAAmB,GAAG,SAAS,EACxC,KAAK,EAAE,gBAAgB,GACtB,aAAa,CAOf;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,UAAU,EAAE,EACnB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,mBAAmB,GAAG,SAAS,EACxC,KAAK,EAAE,gBAAgB,GACtB,aAAa,CAOf"}
|
package/dist/measure/cache.js
CHANGED
|
@@ -1,14 +1,33 @@
|
|
|
1
1
|
import { measureBlock } from './plain';
|
|
2
2
|
import { measureRichBlock } from './rich';
|
|
3
3
|
import { getHyphenationLocale } from '../hyphenate';
|
|
4
|
+
import { hasCJK } from './cjk';
|
|
5
|
+
import { getCjkLineBreak } from './cjkClasses';
|
|
6
|
+
import { getMeasureRegion, getMeasureUprightDigits, getMeasureWritingMode } from './vertical';
|
|
7
|
+
import { cjkCompositionKey, getCjkComposition } from './cjkPunctuation';
|
|
4
8
|
/** Options that change a block's lines, joined into its cache key. The
|
|
5
9
|
* active hyphenation dictionary is one: soft hyphens (and the syllables an
|
|
6
10
|
* overlong word is divided at) depend on it. */
|
|
7
11
|
function optionsKey(options) {
|
|
8
12
|
return `${options?.textAlign ?? ''}\x00${options?.hyphenate ?? ''}\x00${options?.firstLineIndentPx ?? ''}\x00${options?.hangingIndent ?? ''}\x00${options?.optimal ?? ''}\x00${options?.maxStretchRatio ?? ''}\x00${options?.minShrinkRatio ?? ''}\x00${options?.runtPenalty ?? ''}\x00${options?.runtMinCharacters ?? ''}\x00${options?.looseness ?? ''}\x00${options?.letterSpacingPx ?? ''}\x00${options?.hyphenationZonePx ?? ''}\x00${getHyphenationLocale()}${options?.justifyTrackingPx ? `\x00${options.justifyTrackingPx}` : ''}${options?.runtGraded ? '\x00rg' : ''}${options?.avoidHyphenAtLines?.length ? `\x00ah${options.avoidHyphenAtLines.join(',')}` : ''}`;
|
|
9
13
|
}
|
|
14
|
+
/** The CJK line-break level and composition (punctuation widths, hanging,
|
|
15
|
+
* the Han–Latin space), joined to the key of a text that holds CJK only,
|
|
16
|
+
* so every other key is unchanged; and the vertical writing mode (with the
|
|
17
|
+
* region whose cells it measures), which gives every character that stands
|
|
18
|
+
* in a cell its cell (`verticalTextWidth`) — CJK or not. */
|
|
19
|
+
function cjkKey(text, options) {
|
|
20
|
+
const vertical = (options?.writingMode ?? getMeasureWritingMode()) === 'vertical-rl';
|
|
21
|
+
// Short numbers set in one cell (`cjk.uprightDigits`) join the key only
|
|
22
|
+
// when they are not the default two digits.
|
|
23
|
+
const digits = getMeasureUprightDigits();
|
|
24
|
+
const v = vertical ? `:v:${getMeasureRegion()}${digits !== 2 ? `:d${digits}` : ''}` : '';
|
|
25
|
+
if (!hasCJK(text))
|
|
26
|
+
return vertical ? `\x00${v}` : '';
|
|
27
|
+
return `\x00cjk:${options?.cjkLineBreak ?? getCjkLineBreak()}:${cjkCompositionKey(options?.cjkComposition ?? getCjkComposition())}${v}`;
|
|
28
|
+
}
|
|
10
29
|
function buildPlainCacheKey(text, font, maxWidthPx, lineHeightPx, options) {
|
|
11
|
-
return `${text}\x00${font}\x00${maxWidthPx}\x00${lineHeightPx}\x00${optionsKey(options)}`;
|
|
30
|
+
return `${text}\x00${font}\x00${maxWidthPx}\x00${lineHeightPx}\x00${optionsKey(options)}${cjkKey(text, options)}`;
|
|
12
31
|
}
|
|
13
32
|
/** A chip is one placeholder char in the span text: its words and resolved
|
|
14
33
|
* box decide its measure, so they join the key. */
|
|
@@ -23,12 +42,41 @@ function mathCacheKey(span) {
|
|
|
23
42
|
const render = span.mathRender;
|
|
24
43
|
return `|m:${span.math.tex}${render ? `|${render.widthPx}x${render.heightPx}` : ''}`;
|
|
25
44
|
}
|
|
45
|
+
/** The Chinese annotations of a span (#193–#195): marks set on the same
|
|
46
|
+
* text change its segments, a reading or a note its measure. Empty for a
|
|
47
|
+
* span without any, so its key is unchanged. */
|
|
48
|
+
function annotationCacheKey(s) {
|
|
49
|
+
if (!s.emphasisMark && s.properName === undefined && !s.bookTitle && !s.ruby && !s.warichu && !s.inserted)
|
|
50
|
+
return '';
|
|
51
|
+
let key = '';
|
|
52
|
+
if (s.emphasisMark)
|
|
53
|
+
key += `|em:${s.emphasisMark.style ?? ''}:${s.emphasisMark.fill ?? ''}:${s.emphasisMark.position ?? ''}`;
|
|
54
|
+
if (s.properName !== undefined)
|
|
55
|
+
key += `|pn:${s.properName}`;
|
|
56
|
+
if (s.bookTitle)
|
|
57
|
+
key += `|bt:${s.bookTitle.id}.${s.bookTitle.depth}`;
|
|
58
|
+
if (s.ruby)
|
|
59
|
+
key += `|rb:${s.ruby.text}|${s.ruby.group ? 'g' : 'm'}|${s.ruby.position ?? ''}|${s.ruby.fontString ?? ''}|${s.ruby.color ?? ''}|${s.ruby.id}`;
|
|
60
|
+
if (s.warichu)
|
|
61
|
+
key += `|wc:${s.warichu.id}|${s.warichu.fontString ?? ''}|${s.warichu.open ?? ''}|${s.warichu.close ?? ''}|${s.warichu.color ?? ''}`;
|
|
62
|
+
if (s.inserted)
|
|
63
|
+
key += '|ins';
|
|
64
|
+
return key;
|
|
65
|
+
}
|
|
26
66
|
function buildRichCacheKey(spans, fonts, maxWidthPx, lineHeightPx, options) {
|
|
27
67
|
// Script and small-caps marks change the measure of the same text, and a
|
|
28
68
|
// formula or a swatch colour what a placeholder paints: they join the key
|
|
29
69
|
// only when set, so the common keys are unchanged.
|
|
30
|
-
const spanKey = spans.map((s) => `${s.text}|${s.bold}|${s.italic}|${s.ref?.resourceId ?? ''}${s.footnote ? `|fn:${s.footnote.id}` : ''}${s.chip ? chipCacheKey(s.chip) : ''}${s.math ? mathCacheKey(s) : ''}${s.swatch ? `|sw:${s.swatch.color}` : ''}${s.script ? `|${s.script}` : ''}${s.smallCaps ? '|sc' : ''}`).join('\x01');
|
|
31
|
-
return `R\x00${spanKey}\x00${fonts[0]}\x00${fonts[1]}\x00${fonts[2]}\x00${fonts[3]}\x00${maxWidthPx}\x00${lineHeightPx}\x00${optionsKey(options)}`;
|
|
70
|
+
const spanKey = spans.map((s) => `${s.text}|${s.bold}|${s.italic}|${s.ref?.resourceId ?? ''}${s.footnote ? `|fn:${s.footnote.id}` : ''}${s.chip ? chipCacheKey(s.chip) : ''}${s.math ? mathCacheKey(s) : ''}${s.swatch ? `|sw:${s.swatch.color}` : ''}${s.script ? `|${s.script}` : ''}${s.smallCaps ? '|sc' : ''}${s.combineUpright ? '|tcy' : ''}${s.orientation === 'upright' ? '|up' : s.orientation === 'sideways' ? '|side' : ''}${annotationCacheKey(s)}`).join('\x01');
|
|
71
|
+
return `R\x00${spanKey}\x00${fonts[0]}\x00${fonts[1]}\x00${fonts[2]}\x00${fonts[3]}\x00${maxWidthPx}\x00${lineHeightPx}\x00${optionsKey(options)}${cjkKey(spanKey, options)}${cjkLinkKey(spans, spanKey)}`;
|
|
72
|
+
}
|
|
73
|
+
/** The ranges of the Markdown links of a text that holds CJK: the CJK
|
|
74
|
+
* composer gives linked characters segments of their own. Empty for any
|
|
75
|
+
* other text, so its key is unchanged. */
|
|
76
|
+
function cjkLinkKey(spans, spanKey) {
|
|
77
|
+
if (!spans.some((s) => s.links !== undefined && s.links.length > 0) || !hasCJK(spanKey))
|
|
78
|
+
return '';
|
|
79
|
+
return `\x00ln:${spans.map((s) => (s.links ?? []).map((l) => `${l.start}-${l.end}`).join(',')).join(';')}`;
|
|
32
80
|
}
|
|
33
81
|
/** A cached result must read exactly like a fresh measure: the block's own
|
|
34
82
|
* fields (`totalHeight`, `lastLineRunt`, whatever it gains) are carried
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/measure/cache.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/measure/cache.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAC9F,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAExE;;iDAEiD;AACjD,SAAS,UAAU,CAAC,OAAwC;IAC1D,OAAO,GAAG,OAAO,EAAE,SAAS,IAAI,EAAE,OAAO,OAAO,EAAE,SAAS,IAAI,EAAE,OAAO,OAAO,EAAE,iBAAiB,IAAI,EAAE,OAAO,OAAO,EAAE,aAAa,IAAI,EAAE,OAAO,OAAO,EAAE,OAAO,IAAI,EAAE,OAAO,OAAO,EAAE,eAAe,IAAI,EAAE,OAAO,OAAO,EAAE,cAAc,IAAI,EAAE,OAAO,OAAO,EAAE,WAAW,IAAI,EAAE,OAAO,OAAO,EAAE,iBAAiB,IAAI,EAAE,OAAO,OAAO,EAAE,SAAS,IAAI,EAAE,OAAO,OAAO,EAAE,eAAe,IAAI,EAAE,OAAO,OAAO,EAAE,iBAAiB,IAAI,EAAE,OAAO,oBAAoB,EAAE,GAAG,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAChpB,CAAC;AAED;;;;6DAI6D;AAC7D,SAAS,MAAM,CAAC,IAAY,EAAE,OAAwC;IACpE,MAAM,QAAQ,GAAG,CAAC,OAAO,EAAE,WAAW,IAAI,qBAAqB,EAAE,CAAC,KAAK,aAAa,CAAC;IACrF,wEAAwE;IACxE,4CAA4C;IAC5C,MAAM,MAAM,GAAG,uBAAuB,EAAE,CAAC;IACzC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,gBAAgB,EAAE,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACzF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACrD,OAAO,WAAW,OAAO,EAAE,YAAY,IAAI,eAAe,EAAE,IAAI,iBAAiB,CAAC,OAAO,EAAE,cAAc,IAAI,iBAAiB,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1I,CAAC;AAED,SAAS,kBAAkB,CACzB,IAAY,EACZ,IAAY,EACZ,UAAkB,EAClB,YAAoB,EACpB,OAAwC;IAExC,OAAO,GAAG,IAAI,OAAO,IAAI,OAAO,UAAU,OAAO,YAAY,OAAO,UAAU,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;AACpH,CAAC;AAED;oDACoD;AACpD,SAAS,YAAY,CAAC,IAAqC;IACzD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9H,OAAO,SAAS,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACtE,CAAC;AAED;;4EAE4E;AAC5E,SAAS,YAAY,CAAC,IAAgB;IACpC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;IAC/B,OAAO,MAAM,IAAI,CAAC,IAAK,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACxF,CAAC;AAED;;iDAEiD;AACjD,SAAS,kBAAkB,CAAC,CAAa;IACvC,IAAI,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IACrH,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,CAAC,CAAC,YAAY;QAAE,GAAG,IAAI,OAAO,CAAC,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE,IAAI,CAAC,CAAC,YAAY,CAAC,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC,YAAY,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;IAC7H,IAAI,CAAC,CAAC,UAAU,KAAK,SAAS;QAAE,GAAG,IAAI,OAAO,CAAC,CAAC,UAAU,EAAE,CAAC;IAC7D,IAAI,CAAC,CAAC,SAAS;QAAE,GAAG,IAAI,OAAO,CAAC,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACrE,IAAI,CAAC,CAAC,IAAI;QAAE,GAAG,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;IAC3J,IAAI,CAAC,CAAC,OAAO;QAAE,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;IACpJ,IAAI,CAAC,CAAC,QAAQ;QAAE,GAAG,IAAI,MAAM,CAAC;IAC9B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,iBAAiB,CACxB,KAAmB,EACnB,KAAuC,EACvC,UAAkB,EAClB,YAAoB,EACpB,OAAwC;IAExC,yEAAyE;IACzE,0EAA0E;IAC1E,mDAAmD;IACnD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,EAAE,UAAU,IAAI,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/c,OAAO,QAAQ,OAAO,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,UAAU,OAAO,YAAY,OAAO,UAAU,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;AAC7M,CAAC;AAED;;2CAE2C;AAC3C,SAAS,UAAU,CAAC,KAAmB,EAAE,OAAe;IACtD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IACnG,OAAO,UAAU,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAC7G,CAAC;AAED;;;cAGc;AACd,SAAS,kBAAkB,CAAC,KAAoB;IAC9C,OAAO;QACL,GAAG,KAAK;QACR,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7B,GAAG,CAAC;YACJ,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE;YACnB,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;SACrE,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,IAAY,EACZ,IAAY,EACZ,UAAkB,EAClB,YAAoB,EACpB,OAAwC,EACxC,KAAuB;IAEvB,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAC9E,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,MAAM;QAAE,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAC3E,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC/B,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,KAAmB,EACnB,UAAkB,EAClB,QAAgB,EAChB,UAAkB,EAClB,cAAsB,EACtB,UAAkB,EAClB,YAAoB,EACpB,OAAwC,EACxC,KAAuB;IAEvB,MAAM,GAAG,GAAG,iBAAiB,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAC5H,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,MAAM;QAAE,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAC5H,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC/B,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC"}
|