postext 1.14.1 → 1.15.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/__tests__/arabic/blockLanguageDigits.test.d.ts +2 -0
- package/dist/__tests__/arabic/blockLanguageDigits.test.d.ts.map +1 -0
- package/dist/__tests__/arabic/blockLanguageDigits.test.js +54 -0
- package/dist/__tests__/arabic/blockLanguageDigits.test.js.map +1 -0
- package/dist/__tests__/arabic/emphasis.test.d.ts +2 -0
- package/dist/__tests__/arabic/emphasis.test.d.ts.map +1 -0
- package/dist/__tests__/arabic/emphasis.test.js +206 -0
- package/dist/__tests__/arabic/emphasis.test.js.map +1 -0
- package/dist/__tests__/arabic/footnotes.test.d.ts +2 -0
- package/dist/__tests__/arabic/footnotes.test.d.ts.map +1 -0
- package/dist/__tests__/arabic/footnotes.test.js +118 -0
- package/dist/__tests__/arabic/footnotes.test.js.map +1 -0
- package/dist/__tests__/arabic/harakat.test.d.ts +2 -0
- package/dist/__tests__/arabic/harakat.test.d.ts.map +1 -0
- package/dist/__tests__/arabic/harakat.test.js +167 -0
- package/dist/__tests__/arabic/harakat.test.js.map +1 -0
- package/dist/__tests__/arabic/ornateBrackets.test.d.ts +2 -0
- package/dist/__tests__/arabic/ornateBrackets.test.d.ts.map +1 -0
- package/dist/__tests__/arabic/ornateBrackets.test.js +71 -0
- package/dist/__tests__/arabic/ornateBrackets.test.js.map +1 -0
- package/dist/__tests__/arabic/tashkil.test.d.ts +2 -0
- package/dist/__tests__/arabic/tashkil.test.d.ts.map +1 -0
- package/dist/__tests__/arabic/tashkil.test.js +106 -0
- package/dist/__tests__/arabic/tashkil.test.js.map +1 -0
- package/dist/__tests__/arabicLocale.test.d.ts +2 -0
- package/dist/__tests__/arabicLocale.test.d.ts.map +1 -0
- package/dist/__tests__/arabicLocale.test.js +232 -0
- package/dist/__tests__/arabicLocale.test.js.map +1 -0
- package/dist/__tests__/arabicNumberWords.test.d.ts +2 -0
- package/dist/__tests__/arabicNumberWords.test.d.ts.map +1 -0
- package/dist/__tests__/arabicNumberWords.test.js +176 -0
- package/dist/__tests__/arabicNumberWords.test.js.map +1 -0
- package/dist/__tests__/arabicNumbering.test.d.ts +2 -0
- package/dist/__tests__/arabicNumbering.test.d.ts.map +1 -0
- package/dist/__tests__/arabicNumbering.test.js +257 -0
- package/dist/__tests__/arabicNumbering.test.js.map +1 -0
- package/dist/__tests__/arabicWords.test.d.ts +2 -0
- package/dist/__tests__/arabicWords.test.d.ts.map +1 -0
- package/dist/__tests__/arabicWords.test.js +302 -0
- package/dist/__tests__/arabicWords.test.js.map +1 -0
- package/dist/__tests__/bidi.test.d.ts +2 -0
- package/dist/__tests__/bidi.test.d.ts.map +1 -0
- package/dist/__tests__/bidi.test.js +282 -0
- package/dist/__tests__/bidi.test.js.map +1 -0
- package/dist/__tests__/blockHints.test.d.ts +2 -0
- package/dist/__tests__/blockHints.test.d.ts.map +1 -0
- package/dist/__tests__/blockHints.test.js +79 -0
- package/dist/__tests__/blockHints.test.js.map +1 -0
- package/dist/__tests__/chineseLocale.test.js +2 -2
- package/dist/__tests__/chineseLocale.test.js.map +1 -1
- package/dist/__tests__/cjk/grid.test.js +2 -2
- package/dist/__tests__/cjk/grid.test.js.map +1 -1
- package/dist/__tests__/cjk/justifyRender.test.js +2 -1
- package/dist/__tests__/cjk/justifyRender.test.js.map +1 -1
- package/dist/__tests__/defaults/folio.test.js +16 -1
- package/dist/__tests__/defaults/folio.test.js.map +1 -1
- package/dist/__tests__/direction.test.d.ts +2 -0
- package/dist/__tests__/direction.test.d.ts.map +1 -0
- package/dist/__tests__/direction.test.js +117 -0
- package/dist/__tests__/direction.test.js.map +1 -0
- package/dist/__tests__/exports.test.js +29 -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__/headingNumberPosition.test.d.ts +2 -0
- package/dist/__tests__/headingNumberPosition.test.d.ts.map +1 -0
- package/dist/__tests__/headingNumberPosition.test.js +87 -0
- package/dist/__tests__/headingNumberPosition.test.js.map +1 -0
- package/dist/__tests__/htmlCopyText.test.d.ts +2 -0
- package/dist/__tests__/htmlCopyText.test.d.ts.map +1 -0
- package/dist/__tests__/htmlCopyText.test.js +153 -0
- package/dist/__tests__/htmlCopyText.test.js.map +1 -0
- package/dist/__tests__/kashida.test.d.ts +2 -0
- package/dist/__tests__/kashida.test.d.ts.map +1 -0
- package/dist/__tests__/kashida.test.js +281 -0
- package/dist/__tests__/kashida.test.js.map +1 -0
- package/dist/__tests__/kashidaPatterns.test.d.ts +2 -0
- package/dist/__tests__/kashidaPatterns.test.d.ts.map +1 -0
- package/dist/__tests__/kashidaPatterns.test.js +143 -0
- package/dist/__tests__/kashidaPatterns.test.js.map +1 -0
- package/dist/__tests__/links.test.js +3 -1
- package/dist/__tests__/links.test.js.map +1 -1
- package/dist/__tests__/parse/anchors.test.js +17 -0
- package/dist/__tests__/parse/anchors.test.js.map +1 -1
- package/dist/__tests__/parse/containers.test.js +1 -1
- package/dist/__tests__/parse/containers.test.js.map +1 -1
- package/dist/__tests__/rtl/designText.test.d.ts +2 -0
- package/dist/__tests__/rtl/designText.test.d.ts.map +1 -0
- package/dist/__tests__/rtl/designText.test.js +301 -0
- package/dist/__tests__/rtl/designText.test.js.map +1 -0
- package/dist/__tests__/rtl/designTextPaint.test.d.ts +2 -0
- package/dist/__tests__/rtl/designTextPaint.test.d.ts.map +1 -0
- package/dist/__tests__/rtl/designTextPaint.test.js +140 -0
- package/dist/__tests__/rtl/designTextPaint.test.js.map +1 -0
- package/dist/__tests__/rtl/htmlRtl.test.d.ts +2 -0
- package/dist/__tests__/rtl/htmlRtl.test.d.ts.map +1 -0
- package/dist/__tests__/rtl/htmlRtl.test.js +175 -0
- package/dist/__tests__/rtl/htmlRtl.test.js.map +1 -0
- package/dist/__tests__/rtl/mirroredFrame.test.d.ts +2 -0
- package/dist/__tests__/rtl/mirroredFrame.test.d.ts.map +1 -0
- package/dist/__tests__/rtl/mirroredFrame.test.js +313 -0
- package/dist/__tests__/rtl/mirroredFrame.test.js.map +1 -0
- package/dist/__tests__/rtl/mirroredPaint.test.d.ts +2 -0
- package/dist/__tests__/rtl/mirroredPaint.test.d.ts.map +1 -0
- package/dist/__tests__/rtl/mirroredPaint.test.js +116 -0
- package/dist/__tests__/rtl/mirroredPaint.test.js.map +1 -0
- package/dist/__tests__/rtl/oppositeBlocks.test.d.ts +2 -0
- package/dist/__tests__/rtl/oppositeBlocks.test.d.ts.map +1 -0
- package/dist/__tests__/rtl/oppositeBlocks.test.js +273 -0
- package/dist/__tests__/rtl/oppositeBlocks.test.js.map +1 -0
- package/dist/__tests__/rtl/segmentLang.test.d.ts +2 -0
- package/dist/__tests__/rtl/segmentLang.test.d.ts.map +1 -0
- package/dist/__tests__/rtl/segmentLang.test.js +54 -0
- package/dist/__tests__/rtl/segmentLang.test.js.map +1 -0
- package/dist/__tests__/rtlLines.test.d.ts +2 -0
- package/dist/__tests__/rtlLines.test.d.ts.map +1 -0
- package/dist/__tests__/rtlLines.test.js +180 -0
- package/dist/__tests__/rtlLines.test.js.map +1 -0
- package/dist/__tests__/tocNumberColumn.test.d.ts +2 -0
- package/dist/__tests__/tocNumberColumn.test.d.ts.map +1 -0
- package/dist/__tests__/tocNumberColumn.test.js +67 -0
- package/dist/__tests__/tocNumberColumn.test.js.map +1 -0
- package/dist/__tests__/verse.test.d.ts +2 -0
- package/dist/__tests__/verse.test.d.ts.map +1 -0
- package/dist/__tests__/verse.test.js +232 -0
- package/dist/__tests__/verse.test.js.map +1 -0
- package/dist/__tests__/vertical/geometry.test.js +2 -2
- package/dist/__tests__/vertical/geometry.test.js.map +1 -1
- package/dist/__tests__/vertical/htmlTurnedCells.test.js +2 -2
- package/dist/__tests__/vertical/htmlTurnedCells.test.js.map +1 -1
- package/dist/arabicMarks.d.ts +80 -0
- package/dist/arabicMarks.d.ts.map +1 -0
- package/dist/arabicMarks.js +267 -0
- package/dist/arabicMarks.js.map +1 -0
- package/dist/arabicNumberWords.d.ts +43 -0
- package/dist/arabicNumberWords.d.ts.map +1 -0
- package/dist/arabicNumberWords.js +163 -0
- package/dist/arabicNumberWords.js.map +1 -0
- package/dist/arabicNumerals.d.ts +54 -0
- package/dist/arabicNumerals.d.ts.map +1 -0
- package/dist/arabicNumerals.js +143 -0
- package/dist/arabicNumerals.js.map +1 -0
- package/dist/bidi.d.ts +186 -0
- package/dist/bidi.d.ts.map +1 -0
- package/dist/bidi.js +851 -0
- package/dist/bidi.js.map +1 -0
- package/dist/bidiData.d.ts +13 -0
- package/dist/bidiData.d.ts.map +1 -0
- package/dist/bidiData.js +318 -0
- package/dist/bidiData.js.map +1 -0
- package/dist/canvas-backend/blockRender.d.ts.map +1 -1
- package/dist/canvas-backend/blockRender.js +58 -27
- package/dist/canvas-backend/blockRender.js.map +1 -1
- package/dist/canvas-backend/chip.d.ts.map +1 -1
- package/dist/canvas-backend/chip.js +16 -2
- package/dist/canvas-backend/chip.js.map +1 -1
- package/dist/canvas-backend/headerFooter.d.ts.map +1 -1
- package/dist/canvas-backend/headerFooter.js +7 -3
- package/dist/canvas-backend/headerFooter.js.map +1 -1
- package/dist/canvas-backend/index.d.ts.map +1 -1
- package/dist/canvas-backend/index.js +9 -4
- package/dist/canvas-backend/index.js.map +1 -1
- package/dist/canvas-backend/mirrorFrame.d.ts +38 -0
- package/dist/canvas-backend/mirrorFrame.d.ts.map +1 -0
- package/dist/canvas-backend/mirrorFrame.js +129 -0
- package/dist/canvas-backend/mirrorFrame.js.map +1 -0
- package/dist/canvas-backend/renderResourceBlock.d.ts.map +1 -1
- package/dist/canvas-backend/renderResourceBlock.js +16 -5
- package/dist/canvas-backend/renderResourceBlock.js.map +1 -1
- package/dist/canvas-backend/runDirection.d.ts +21 -0
- package/dist/canvas-backend/runDirection.d.ts.map +1 -0
- package/dist/canvas-backend/runDirection.js +46 -0
- package/dist/canvas-backend/runDirection.js.map +1 -0
- package/dist/canvas-backend/wordRuns.d.ts +49 -0
- package/dist/canvas-backend/wordRuns.d.ts.map +1 -0
- package/dist/canvas-backend/wordRuns.js +111 -0
- package/dist/canvas-backend/wordRuns.js.map +1 -0
- package/dist/columnClip.d.ts +4 -1
- package/dist/columnClip.d.ts.map +1 -1
- package/dist/columnClip.js +8 -3
- package/dist/columnClip.js.map +1 -1
- package/dist/configWarnings.d.ts +3 -1
- package/dist/configWarnings.d.ts.map +1 -1
- package/dist/configWarnings.js +59 -5
- package/dist/configWarnings.js.map +1 -1
- package/dist/defaults/bodyText.d.ts +28 -6
- package/dist/defaults/bodyText.d.ts.map +1 -1
- package/dist/defaults/bodyText.js +158 -30
- 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.js +5 -5
- package/dist/defaults/captionStyle.js.map +1 -1
- package/dist/defaults/folio.d.ts +4 -0
- package/dist/defaults/folio.d.ts.map +1 -1
- package/dist/defaults/folio.js +12 -1
- package/dist/defaults/folio.js.map +1 -1
- package/dist/defaults/footnotes.d.ts.map +1 -1
- package/dist/defaults/footnotes.js +12 -2
- package/dist/defaults/footnotes.js.map +1 -1
- package/dist/defaults/headerFooter.d.ts.map +1 -1
- package/dist/defaults/headerFooter.js +1 -0
- package/dist/defaults/headerFooter.js.map +1 -1
- package/dist/defaults/headingStyles.d.ts.map +1 -1
- package/dist/defaults/headingStyles.js +2 -1
- package/dist/defaults/headingStyles.js.map +1 -1
- package/dist/defaults/headings.d.ts.map +1 -1
- package/dist/defaults/headings.js +9 -2
- package/dist/defaults/headings.js.map +1 -1
- package/dist/defaults/index.d.ts +1 -1
- package/dist/defaults/index.d.ts.map +1 -1
- package/dist/defaults/index.js +7 -1
- package/dist/defaults/index.js.map +1 -1
- package/dist/defaults/indexConfig.d.ts +6 -2
- package/dist/defaults/indexConfig.d.ts.map +1 -1
- package/dist/defaults/indexConfig.js +25 -5
- package/dist/defaults/indexConfig.js.map +1 -1
- package/dist/defaults/page.d.ts +7 -4
- package/dist/defaults/page.d.ts.map +1 -1
- package/dist/defaults/page.js +10 -7
- package/dist/defaults/page.js.map +1 -1
- package/dist/defaults/paragraphStyles.js +2 -2
- package/dist/defaults/paragraphStyles.js.map +1 -1
- package/dist/defaults/parts.d.ts.map +1 -1
- package/dist/defaults/parts.js +2 -1
- package/dist/defaults/parts.js.map +1 -1
- package/dist/defaults/resourceTypes.d.ts +1 -1
- package/dist/defaults/resourceTypes.d.ts.map +1 -1
- package/dist/defaults/resourceTypes.js +10 -2
- package/dist/defaults/resourceTypes.js.map +1 -1
- package/dist/defaults/shared.d.ts +9 -0
- package/dist/defaults/shared.d.ts.map +1 -1
- package/dist/defaults/shared.js +15 -0
- package/dist/defaults/shared.js.map +1 -1
- package/dist/defaults/tableStyle.d.ts.map +1 -1
- package/dist/defaults/tableStyle.js +5 -1
- package/dist/defaults/tableStyle.js.map +1 -1
- package/dist/design/bidiText.d.ts +89 -0
- package/dist/design/bidiText.d.ts.map +1 -0
- package/dist/design/bidiText.js +165 -0
- package/dist/design/bidiText.js.map +1 -0
- package/dist/design/layout.d.ts +20 -0
- package/dist/design/layout.d.ts.map +1 -1
- package/dist/design/layout.js +46 -5
- package/dist/design/layout.js.map +1 -1
- package/dist/design/placeholders.d.ts +7 -1
- package/dist/design/placeholders.d.ts.map +1 -1
- package/dist/design/placeholders.js +6 -3
- package/dist/design/placeholders.js.map +1 -1
- package/dist/design/richText.d.ts +5 -2
- package/dist/design/richText.d.ts.map +1 -1
- package/dist/design/richText.js +35 -2
- package/dist/design/richText.js.map +1 -1
- package/dist/emphasisOverline.d.ts +27 -0
- package/dist/emphasisOverline.d.ts.map +1 -0
- package/dist/emphasisOverline.js +107 -0
- package/dist/emphasisOverline.js.map +1 -0
- package/dist/frontmatter.d.ts +25 -6
- package/dist/frontmatter.d.ts.map +1 -1
- package/dist/frontmatter.js +51 -10
- package/dist/frontmatter.js.map +1 -1
- package/dist/html-backend.d.ts +4 -1
- package/dist/html-backend.d.ts.map +1 -1
- package/dist/html-backend.js +363 -87
- package/dist/html-backend.js.map +1 -1
- package/dist/hyphenate.d.ts.map +1 -1
- package/dist/hyphenate.js +4 -1
- package/dist/hyphenate.js.map +1 -1
- package/dist/index.d.ts +11 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- package/dist/knuthPlass/breakpoints.d.ts.map +1 -1
- package/dist/knuthPlass/breakpoints.js +3 -0
- package/dist/knuthPlass/breakpoints.js.map +1 -1
- package/dist/knuthPlass/pretextAdapter.d.ts.map +1 -1
- package/dist/knuthPlass/pretextAdapter.js +9 -3
- package/dist/knuthPlass/pretextAdapter.js.map +1 -1
- package/dist/knuthPlass/richAdapter.d.ts +11 -0
- package/dist/knuthPlass/richAdapter.d.ts.map +1 -1
- package/dist/knuthPlass/richAdapter.js +11 -4
- package/dist/knuthPlass/richAdapter.js.map +1 -1
- package/dist/knuthPlass/tracking.d.ts +2 -1
- package/dist/knuthPlass/tracking.d.ts.map +1 -1
- package/dist/knuthPlass/tracking.js +5 -2
- package/dist/knuthPlass/tracking.js.map +1 -1
- package/dist/knuthPlass/types.d.ts +4 -0
- package/dist/knuthPlass/types.d.ts.map +1 -1
- package/dist/locale.d.ts +63 -9
- package/dist/locale.d.ts.map +1 -1
- package/dist/locale.js +129 -12
- package/dist/locale.js.map +1 -1
- package/dist/measure/bidiLines.d.ts +91 -0
- package/dist/measure/bidiLines.d.ts.map +1 -0
- package/dist/measure/bidiLines.js +293 -0
- package/dist/measure/bidiLines.js.map +1 -0
- package/dist/measure/cache.d.ts.map +1 -1
- package/dist/measure/cache.js +10 -4
- package/dist/measure/cache.js.map +1 -1
- package/dist/measure/joining.d.ts +39 -0
- package/dist/measure/joining.d.ts.map +1 -0
- package/dist/measure/joining.js +91 -0
- package/dist/measure/joining.js.map +1 -0
- package/dist/measure/joiningGroups.d.ts +7 -0
- package/dist/measure/joiningGroups.d.ts.map +1 -0
- package/dist/measure/joiningGroups.js +110 -0
- package/dist/measure/joiningGroups.js.map +1 -0
- package/dist/measure/kashida.d.ts +97 -0
- package/dist/measure/kashida.d.ts.map +1 -0
- package/dist/measure/kashida.js +285 -0
- package/dist/measure/kashida.js.map +1 -0
- package/dist/measure/kashidaPatterns.d.ts +109 -0
- package/dist/measure/kashidaPatterns.d.ts.map +1 -0
- package/dist/measure/kashidaPatterns.js +519 -0
- package/dist/measure/kashidaPatterns.js.map +1 -0
- package/dist/measure/links.d.ts.map +1 -1
- package/dist/measure/links.js +5 -2
- package/dist/measure/links.js.map +1 -1
- package/dist/measure/plain.d.ts.map +1 -1
- package/dist/measure/plain.js +31 -0
- package/dist/measure/plain.js.map +1 -1
- package/dist/measure/rich.d.ts +24 -0
- package/dist/measure/rich.d.ts.map +1 -1
- package/dist/measure/rich.js +250 -22
- package/dist/measure/rich.js.map +1 -1
- package/dist/measure/types.d.ts +14 -0
- package/dist/measure/types.d.ts.map +1 -1
- package/dist/measure/types.js.map +1 -1
- package/dist/numberWords.d.ts +17 -4
- package/dist/numberWords.d.ts.map +1 -1
- package/dist/numberWords.js +19 -13
- package/dist/numberWords.js.map +1 -1
- package/dist/numbering.d.ts +49 -11
- package/dist/numbering.d.ts.map +1 -1
- package/dist/numbering.js +117 -21
- package/dist/numbering.js.map +1 -1
- package/dist/parse/annotations.d.ts +6 -3
- package/dist/parse/annotations.d.ts.map +1 -1
- package/dist/parse/annotations.js +31 -7
- package/dist/parse/annotations.js.map +1 -1
- package/dist/parse/attrs.d.ts +3 -3
- package/dist/parse/attrs.d.ts.map +1 -1
- package/dist/parse/attrs.js +5 -4
- package/dist/parse/attrs.js.map +1 -1
- package/dist/parse/blockParser.d.ts.map +1 -1
- package/dist/parse/blockParser.js +158 -14
- package/dist/parse/blockParser.js.map +1 -1
- package/dist/parse/index.d.ts +1 -1
- package/dist/parse/index.d.ts.map +1 -1
- package/dist/parse/index.js.map +1 -1
- package/dist/parse/indexMarks.d.ts.map +1 -1
- package/dist/parse/indexMarks.js +32 -10
- package/dist/parse/indexMarks.js.map +1 -1
- package/dist/parse/inlineFormatting.d.ts.map +1 -1
- package/dist/parse/inlineFormatting.js +5 -4
- package/dist/parse/inlineFormatting.js.map +1 -1
- package/dist/parse/types.d.ts +63 -1
- package/dist/parse/types.d.ts.map +1 -1
- package/dist/pipeline/build.d.ts.map +1 -1
- package/dist/pipeline/build.js +161 -43
- package/dist/pipeline/build.js.map +1 -1
- package/dist/pipeline/buildBlockKind.d.ts +2 -0
- package/dist/pipeline/buildBlockKind.d.ts.map +1 -1
- package/dist/pipeline/buildBlockKind.js +67 -2
- package/dist/pipeline/buildBlockKind.js.map +1 -1
- package/dist/pipeline/buildHelpers.d.ts +22 -1
- package/dist/pipeline/buildHelpers.d.ts.map +1 -1
- package/dist/pipeline/buildHelpers.js +55 -5
- package/dist/pipeline/buildHelpers.js.map +1 -1
- package/dist/pipeline/calloutLayout.d.ts +6 -1
- package/dist/pipeline/calloutLayout.d.ts.map +1 -1
- package/dist/pipeline/calloutLayout.js +63 -18
- package/dist/pipeline/calloutLayout.js.map +1 -1
- package/dist/pipeline/citations.d.ts +2 -1
- package/dist/pipeline/citations.d.ts.map +1 -1
- package/dist/pipeline/citations.js +29 -9
- package/dist/pipeline/citations.js.map +1 -1
- package/dist/pipeline/cjkGrid.d.ts +3 -2
- package/dist/pipeline/cjkGrid.d.ts.map +1 -1
- package/dist/pipeline/cjkGrid.js +3 -2
- package/dist/pipeline/cjkGrid.js.map +1 -1
- package/dist/pipeline/config.d.ts +13 -1
- package/dist/pipeline/config.d.ts.map +1 -1
- package/dist/pipeline/config.js +32 -3
- 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 +88 -0
- package/dist/pipeline/contentWarnings.js.map +1 -1
- package/dist/pipeline/continuation.d.ts.map +1 -1
- package/dist/pipeline/continuation.js +1 -1
- package/dist/pipeline/continuation.js.map +1 -1
- package/dist/pipeline/crossRefs.d.ts.map +1 -1
- package/dist/pipeline/crossRefs.js +2 -0
- package/dist/pipeline/crossRefs.js.map +1 -1
- package/dist/pipeline/floatPlacement.d.ts.map +1 -1
- package/dist/pipeline/floatPlacement.js +2 -1
- package/dist/pipeline/floatPlacement.js.map +1 -1
- package/dist/pipeline/footnotes.d.ts +13 -5
- package/dist/pipeline/footnotes.d.ts.map +1 -1
- package/dist/pipeline/footnotes.js +19 -8
- package/dist/pipeline/footnotes.js.map +1 -1
- package/dist/pipeline/headerFooter.d.ts +4 -0
- package/dist/pipeline/headerFooter.d.ts.map +1 -1
- package/dist/pipeline/headerFooter.js +41 -13
- package/dist/pipeline/headerFooter.js.map +1 -1
- package/dist/pipeline/headingDesignCuts.d.ts +1 -1
- package/dist/pipeline/headingDesignCuts.d.ts.map +1 -1
- package/dist/pipeline/headingDesignCuts.js +2 -1
- package/dist/pipeline/headingDesignCuts.js.map +1 -1
- package/dist/pipeline/headingStyles.d.ts +10 -0
- package/dist/pipeline/headingStyles.d.ts.map +1 -1
- package/dist/pipeline/headingStyles.js +46 -0
- package/dist/pipeline/headingStyles.js.map +1 -1
- package/dist/pipeline/indexDirective.d.ts.map +1 -1
- package/dist/pipeline/indexDirective.js +33 -6
- package/dist/pipeline/indexDirective.js.map +1 -1
- package/dist/pipeline/indexGroups.d.ts +23 -1
- package/dist/pipeline/indexGroups.d.ts.map +1 -1
- package/dist/pipeline/indexGroups.js +50 -1
- package/dist/pipeline/indexGroups.js.map +1 -1
- package/dist/pipeline/lists.d.ts +16 -4
- package/dist/pipeline/lists.d.ts.map +1 -1
- package/dist/pipeline/lists.js +51 -12
- package/dist/pipeline/lists.js.map +1 -1
- package/dist/pipeline/measureContentBlock.d.ts +5 -0
- package/dist/pipeline/measureContentBlock.d.ts.map +1 -1
- package/dist/pipeline/measureContentBlock.js +63 -4
- package/dist/pipeline/measureContentBlock.js.map +1 -1
- package/dist/pipeline/mirrorFrame.d.ts +37 -0
- package/dist/pipeline/mirrorFrame.d.ts.map +1 -0
- package/dist/pipeline/mirrorFrame.js +143 -0
- package/dist/pipeline/mirrorFrame.js.map +1 -0
- package/dist/pipeline/outline.d.ts +2 -2
- package/dist/pipeline/outline.d.ts.map +1 -1
- package/dist/pipeline/outline.js +33 -6
- package/dist/pipeline/outline.js.map +1 -1
- package/dist/pipeline/paragraphContainers.d.ts +5 -0
- package/dist/pipeline/paragraphContainers.d.ts.map +1 -1
- package/dist/pipeline/paragraphContainers.js +12 -0
- package/dist/pipeline/paragraphContainers.js.map +1 -1
- package/dist/pipeline/parts.d.ts +1 -1
- package/dist/pipeline/parts.d.ts.map +1 -1
- package/dist/pipeline/parts.js +3 -2
- package/dist/pipeline/parts.js.map +1 -1
- package/dist/pipeline/placeholders.d.ts +13 -6
- package/dist/pipeline/placeholders.d.ts.map +1 -1
- package/dist/pipeline/placeholders.js +15 -11
- package/dist/pipeline/placeholders.js.map +1 -1
- package/dist/pipeline/placement.d.ts +3 -2
- package/dist/pipeline/placement.d.ts.map +1 -1
- package/dist/pipeline/placement.js +18 -6
- package/dist/pipeline/placement.js.map +1 -1
- package/dist/pipeline/resourceLayout.d.ts.map +1 -1
- package/dist/pipeline/resourceLayout.js +70 -7
- package/dist/pipeline/resourceLayout.js.map +1 -1
- package/dist/pipeline/resourceNumbering.d.ts +5 -3
- package/dist/pipeline/resourceNumbering.d.ts.map +1 -1
- package/dist/pipeline/resourceNumbering.js +11 -8
- package/dist/pipeline/resourceNumbering.js.map +1 -1
- package/dist/pipeline/styles.d.ts +6 -1
- package/dist/pipeline/styles.d.ts.map +1 -1
- package/dist/pipeline/styles.js +44 -14
- package/dist/pipeline/styles.js.map +1 -1
- package/dist/pipeline/tashkil.d.ts +27 -0
- package/dist/pipeline/tashkil.d.ts.map +1 -0
- package/dist/pipeline/tashkil.js +161 -0
- package/dist/pipeline/tashkil.js.map +1 -0
- package/dist/pipeline/toc.d.ts +12 -0
- package/dist/pipeline/toc.d.ts.map +1 -1
- package/dist/pipeline/toc.js +64 -4
- package/dist/pipeline/toc.js.map +1 -1
- package/dist/pipeline/verse.d.ts +65 -0
- package/dist/pipeline/verse.d.ts.map +1 -0
- package/dist/pipeline/verse.js +252 -0
- package/dist/pipeline/verse.js.map +1 -0
- package/dist/pipeline/verticalMetrics.d.ts +1 -1
- package/dist/pipeline/verticalMetrics.d.ts.map +1 -1
- package/dist/pipeline/verticalMetrics.js +7 -5
- package/dist/pipeline/verticalMetrics.js.map +1 -1
- package/dist/table/model.d.ts +4 -3
- package/dist/table/model.d.ts.map +1 -1
- package/dist/table/model.js.map +1 -1
- package/dist/types.d.ts +286 -36
- package/dist/types.d.ts.map +1 -1
- package/dist/uprightArabic.d.ts +39 -0
- package/dist/uprightArabic.d.ts.map +1 -0
- package/dist/uprightArabic.js +105 -0
- package/dist/uprightArabic.js.map +1 -0
- package/dist/vdt.d.ts +276 -11
- package/dist/vdt.d.ts.map +1 -1
- package/dist/vdt.js +46 -9
- package/dist/vdt.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Arabic numbers in words, for heading templates (`{1:ordinal}`,
|
|
3
|
+
* `{1:ordinal-feminine}`, `{1:words}`): the ordinal a chapter or a night is
|
|
4
|
+
* titled with — الفصل الأول, الباب الحادي عشر, الليلة الأولى, الليلة الحادية
|
|
5
|
+
* بعد الألف — and the cardinal (واحد وعشرون, إحدى عشرة). Both agree in gender
|
|
6
|
+
* with the noun they count: masculine for فصل, باب, جزء, كتاب; feminine for
|
|
7
|
+
* ليلة, مقالة, حكاية.
|
|
8
|
+
*
|
|
9
|
+
* The forms are those of Modern Standard Arabic as headings print them:
|
|
10
|
+
* nominative, and for ordinals definite (with ال). Numbers above a hundred
|
|
11
|
+
* that are not round take the "after" formula of the classical editions
|
|
12
|
+
* and their modern reprints: 145 الخامس والأربعون بعد المئة, 1001 الحادية
|
|
13
|
+
* بعد الألف. Hundreds are spelled مئة, as the language academies write
|
|
14
|
+
* them today, or مائة (`spelling: 'classical'`), as Bulaq and most
|
|
15
|
+
* Egyptian prints do (ثلاثمائة in one word either way).
|
|
16
|
+
*/
|
|
17
|
+
/** Largest cardinal spelled out; past it the number prints in digits. */
|
|
18
|
+
const MAX_CARDINAL_AR = 99_999;
|
|
19
|
+
/** Largest ordinal spelled out. */
|
|
20
|
+
const MAX_ORDINAL_AR = 9_999;
|
|
21
|
+
// --- Cardinals --------------------------------------------------------------
|
|
22
|
+
/** 1–10 counting a masculine noun (3–10 take the feminine ending, by the
|
|
23
|
+
* rule of polarity) and a feminine one. */
|
|
24
|
+
const CARDINAL_UNITS = {
|
|
25
|
+
masculine: ['', 'واحد', 'اثنان', 'ثلاثة', 'أربعة', 'خمسة', 'ستة', 'سبعة', 'ثمانية', 'تسعة', 'عشرة'],
|
|
26
|
+
feminine: ['', 'واحدة', 'اثنتان', 'ثلاث', 'أربع', 'خمس', 'ست', 'سبع', 'ثماني', 'تسع', 'عشر'],
|
|
27
|
+
};
|
|
28
|
+
/** 11 and 12: their own forms; 13–19 take the unit of 3–9 above. */
|
|
29
|
+
const CARDINAL_TEENS = {
|
|
30
|
+
masculine: { eleven: 'أحد عشر', twelve: 'اثنا عشر', ten: 'عشر' },
|
|
31
|
+
feminine: { eleven: 'إحدى عشرة', twelve: 'اثنتا عشرة', ten: 'عشرة' },
|
|
32
|
+
};
|
|
33
|
+
/** The tens, alike for both genders, nominative (genitive and accusative
|
|
34
|
+
* end in ين). */
|
|
35
|
+
const TENS = ['', '', 'عشرون', 'ثلاثون', 'أربعون', 'خمسون', 'ستون', 'سبعون', 'ثمانون', 'تسعون'];
|
|
36
|
+
/** 100–900, nominative: مئتان is the dual (genitive مئتين); 300–900 are
|
|
37
|
+
* written as one word. */
|
|
38
|
+
const HUNDREDS = ['', 'مئة', 'مئتان', 'ثلاثمئة', 'أربعمئة', 'خمسمئة', 'ستمئة', 'سبعمئة', 'ثمانمئة', 'تسعمئة'];
|
|
39
|
+
/** The classical spelling of the hundreds: مئة → مائة, مئتان → مائتان,
|
|
40
|
+
* ثلاثمئة → ثلاثمائة. */
|
|
41
|
+
function spelled(words, spelling) {
|
|
42
|
+
return spelling === 'classical' ? words.replace(/مئ/g, 'مائ') : words;
|
|
43
|
+
}
|
|
44
|
+
/** "a and b", the conjunction written onto the next word: ألف ومئة. */
|
|
45
|
+
function joinAnd(parts) {
|
|
46
|
+
return parts.filter((p) => p.length > 0).join(' و');
|
|
47
|
+
}
|
|
48
|
+
function cardinalBelow100(n, gender) {
|
|
49
|
+
if (n <= 10)
|
|
50
|
+
return CARDINAL_UNITS[gender][n];
|
|
51
|
+
const teens = CARDINAL_TEENS[gender];
|
|
52
|
+
if (n === 11)
|
|
53
|
+
return teens.eleven;
|
|
54
|
+
if (n === 12)
|
|
55
|
+
return teens.twelve;
|
|
56
|
+
if (n < 20)
|
|
57
|
+
return `${CARDINAL_UNITS[gender][n - 10]} ${teens.ten}`;
|
|
58
|
+
const unit = n % 10;
|
|
59
|
+
// Units before tens: واحد وعشرون (21).
|
|
60
|
+
return joinAnd([unit ? CARDINAL_UNITS[gender][unit] : '', TENS[Math.floor(n / 10)]]);
|
|
61
|
+
}
|
|
62
|
+
function cardinalBelow1000(n, gender) {
|
|
63
|
+
return joinAnd([HUNDREDS[Math.floor(n / 100)], n % 100 ? cardinalBelow100(n % 100, gender) : '']);
|
|
64
|
+
}
|
|
65
|
+
/** The thousands of a cardinal: ألف, ألفان, ثلاثة آلاف … عشرة آلاف (the
|
|
66
|
+
* plural, counted as a masculine noun), أحد عشر ألفًا … تسعة وتسعون ألفًا
|
|
67
|
+
* (the singular in the accusative). */
|
|
68
|
+
function thousandsWords(k) {
|
|
69
|
+
if (k === 1)
|
|
70
|
+
return 'ألف';
|
|
71
|
+
if (k === 2)
|
|
72
|
+
return 'ألفان';
|
|
73
|
+
if (k <= 10)
|
|
74
|
+
return `${CARDINAL_UNITS.masculine[k]} آلاف`;
|
|
75
|
+
return `${cardinalBelow100(k, 'masculine')} ألفًا`;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* `n` as an Arabic cardinal, nominative, counting a noun of `gender`:
|
|
79
|
+
* واحد / واحدة, اثنان / اثنتان, ثلاثة / ثلاث, أحد عشر / إحدى عشرة, واحد
|
|
80
|
+
* وعشرون / واحدة وعشرون, مئة وخمسة, ألفان وثلاثمئة. Zero is صفر; past
|
|
81
|
+
* 99 999, and below zero, the number prints in digits.
|
|
82
|
+
*/
|
|
83
|
+
export function arabicCardinal(n, options = {}) {
|
|
84
|
+
if (!Number.isSafeInteger(n) || n < 0 || n > MAX_CARDINAL_AR)
|
|
85
|
+
return String(n);
|
|
86
|
+
if (n === 0)
|
|
87
|
+
return 'صفر';
|
|
88
|
+
const gender = options.gender ?? 'masculine';
|
|
89
|
+
const k = Math.floor(n / 1000);
|
|
90
|
+
const rest = n % 1000;
|
|
91
|
+
const words = joinAnd([k ? thousandsWords(k) : '', rest ? cardinalBelow1000(rest, gender) : '']);
|
|
92
|
+
return spelled(words, options.spelling);
|
|
93
|
+
}
|
|
94
|
+
// --- Ordinals ---------------------------------------------------------------
|
|
95
|
+
const ORDINAL_UNITS = {
|
|
96
|
+
masculine: ['', 'الأول', 'الثاني', 'الثالث', 'الرابع', 'الخامس', 'السادس', 'السابع', 'الثامن', 'التاسع', 'العاشر'],
|
|
97
|
+
feminine: ['', 'الأولى', 'الثانية', 'الثالثة', 'الرابعة', 'الخامسة', 'السادسة', 'السابعة', 'الثامنة', 'التاسعة', 'العاشرة'],
|
|
98
|
+
};
|
|
99
|
+
/** The first unit inside a compound ordinal: الحادي عشر, الحادي والعشرون
|
|
100
|
+
* (not الأول). */
|
|
101
|
+
function compoundUnit(unit, gender) {
|
|
102
|
+
if (unit === 1)
|
|
103
|
+
return gender === 'feminine' ? 'الحادية' : 'الحادي';
|
|
104
|
+
return ORDINAL_UNITS[gender][unit];
|
|
105
|
+
}
|
|
106
|
+
/** The ordinal 1–99: الأول … العاشر, الحادي عشر … التاسع عشر (feminine:
|
|
107
|
+
* الحادية عشرة), العشرون, الحادي والعشرون. 11–19 are indeclinable; the
|
|
108
|
+
* tens are nominative. */
|
|
109
|
+
function ordinalBelow100(n, gender) {
|
|
110
|
+
if (n <= 10)
|
|
111
|
+
return ORDINAL_UNITS[gender][n];
|
|
112
|
+
if (n < 20)
|
|
113
|
+
return `${compoundUnit(n - 10, gender)} ${gender === 'feminine' ? 'عشرة' : 'عشر'}`;
|
|
114
|
+
const tens = `ال${TENS[Math.floor(n / 10)]}`;
|
|
115
|
+
const unit = n % 10;
|
|
116
|
+
return unit === 0 ? tens : joinAnd([compoundUnit(unit, gender), tens]);
|
|
117
|
+
}
|
|
118
|
+
/** A round number (a multiple of 100 below 10 000) made definite, every
|
|
119
|
+
* term with ال: المئة, الثلاثمئة, الألف, الألف والمئتان. The duals مئتان
|
|
120
|
+
* and ألفان take the genitive (مئتين, ألفين) after بعد. */
|
|
121
|
+
function definiteRound(n, genitive) {
|
|
122
|
+
const k = Math.floor(n / 1000);
|
|
123
|
+
const h = Math.floor((n % 1000) / 100);
|
|
124
|
+
const dual = (word) => (genitive ? word.replace(/ان$/, 'ين') : word);
|
|
125
|
+
let thousands = '';
|
|
126
|
+
if (k === 1)
|
|
127
|
+
thousands = 'الألف';
|
|
128
|
+
else if (k === 2)
|
|
129
|
+
thousands = dual('الألفان');
|
|
130
|
+
else if (k > 2)
|
|
131
|
+
thousands = `ال${CARDINAL_UNITS.masculine[k]} آلاف`;
|
|
132
|
+
const hundreds = h === 0 ? '' : h === 2 ? dual('المئتان') : `ال${HUNDREDS[h]}`;
|
|
133
|
+
return joinAnd([thousands, hundreds]);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* `n` as a definite Arabic ordinal, nominative, agreeing with a noun of
|
|
137
|
+
* `gender`, as a heading names a chapter or a night: الأول / الأولى, الحادي
|
|
138
|
+
* عشر / الحادية عشرة, الحادي والعشرون / الحادية والعشرون, المئة, الخامس
|
|
139
|
+
* والأربعون بعد المئة, الحادية بعد المئتين, الخامسة والأربعون بعد الثلاثمئة,
|
|
140
|
+
* الألف, الحادية بعد الألف. A round hundred or thousand is the definite
|
|
141
|
+
* number itself (المئتان, الألف والمئة); any other number above 100 is
|
|
142
|
+
* the ordinal of its last two digits "after" the round part. Past 9 999,
|
|
143
|
+
* and below 1, the number prints in digits.
|
|
144
|
+
*/
|
|
145
|
+
export function arabicOrdinal(n, options = {}) {
|
|
146
|
+
if (!Number.isSafeInteger(n) || n < 1 || n > MAX_ORDINAL_AR)
|
|
147
|
+
return String(n);
|
|
148
|
+
const gender = options.gender ?? 'masculine';
|
|
149
|
+
const rest = n % 100;
|
|
150
|
+
const round = n - rest;
|
|
151
|
+
let words;
|
|
152
|
+
if (round === 0)
|
|
153
|
+
words = ordinalBelow100(rest, gender);
|
|
154
|
+
else if (rest === 0)
|
|
155
|
+
words = definiteRound(round, false);
|
|
156
|
+
// One after a round number is the compound form, as in 21: الحادي بعد
|
|
157
|
+
// المئة, الحادية بعد الألف (the alternatives الأولى / الواحدة بعد الألف
|
|
158
|
+
// are not generated).
|
|
159
|
+
else
|
|
160
|
+
words = `${rest === 1 ? compoundUnit(1, gender) : ordinalBelow100(rest, gender)} بعد ${definiteRound(round, true)}`;
|
|
161
|
+
return spelled(words, options.spelling);
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=arabicNumberWords.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arabicNumberWords.js","sourceRoot":"","sources":["../src/arabicNumberWords.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Arabic-script numerals, written and read: the Arabic-Indic digits of the
|
|
3
|
+
* Mashriq (٠١٢٣٤٥٦٧٨٩, U+0660–0669) and the Extended Arabic-Indic digits
|
|
4
|
+
* of Persian and Urdu (۰۱۲۳۴۵۶۷۸۹, U+06F0–06F9); the additive abjad
|
|
5
|
+
* numerals of Classical Arabic and manuscript foliation (يا = 11,
|
|
6
|
+
* غتمو = 1446) in the Mashriqi and the Maghrebi values; and the letter
|
|
7
|
+
* series that number list items and front matter, in abjad order
|
|
8
|
+
* (أ ب ج د هـ) and in the alphabetical, hijāʾī order (أ ب ت ث). Also
|
|
9
|
+
* the reverse for digits: an Arabic author types ٣ where a Latin one
|
|
10
|
+
* types 3.
|
|
11
|
+
*/
|
|
12
|
+
import type { DigitSystem } from './types';
|
|
13
|
+
/** `n` in Arabic-Indic digits: 2026 → ٢٠٢٦. */
|
|
14
|
+
export declare function arabicIndicDecimal(n: number): string;
|
|
15
|
+
/** `n` in Extended Arabic-Indic (Persian) digits: 2026 → ۲۰۲۶. Urdu writes
|
|
16
|
+
* the same code points; its glyph forms come from the font (`locl`). */
|
|
17
|
+
export declare function persianDecimal(n: number): string;
|
|
18
|
+
/**
|
|
19
|
+
* The ASCII digits of an engine-generated string in the document's digit
|
|
20
|
+
* system: `'arab'` writes ٠–٩, `'arabext'` ۰–۹, `'latn'` (or none) leaves
|
|
21
|
+
* the string as it is. Only strings the engine composed go through it — a
|
|
22
|
+
* page count, a chapter ordinal, the fallback of a list number — never
|
|
23
|
+
* the author's text.
|
|
24
|
+
*/
|
|
25
|
+
export declare function withDigits(text: string, digits: DigitSystem | undefined): string;
|
|
26
|
+
/** Arabic-Indic (٠–٩) and Extended Arabic-Indic (۰–۹) digits turned into
|
|
27
|
+
* ASCII ones, everything else kept: what a number an author typed on an
|
|
28
|
+
* Arabic or Persian keyboard (`startAt=٣`, `:::part{number="١٢"}`) is
|
|
29
|
+
* read through before `Number()`. */
|
|
30
|
+
export declare function asciiDigits(text: string): string;
|
|
31
|
+
/**
|
|
32
|
+
* `n` in additive abjad numerals, highest value first in logical order
|
|
33
|
+
* (the reader sees it right to left): 11 يا, 15 يه, 1446 غتمو, 1835 غضله.
|
|
34
|
+
* The thousands count is written before the thousand letter (2000 بغ, as
|
|
35
|
+
* against 1002 غب). `'maghrebi'` takes the Maghrebi values. A final heh
|
|
36
|
+
* that would stand alone takes a tatweel (5 هـ). Zero has no abjad numeral
|
|
37
|
+
* and prints nothing; past 999 999 the number prints in digits.
|
|
38
|
+
*/
|
|
39
|
+
export declare function abjadNumeral(n: number, variant?: 'mashriqi' | 'maghrebi'): string;
|
|
40
|
+
/** The 28 letters in abjad order, as list items are lettered in Arabic
|
|
41
|
+
* textbooks and outlines (أ، ب، ج، د، هـ…). The first is written with its
|
|
42
|
+
* hamza, as a list marker always is: a bare alif reads as the digit ١. */
|
|
43
|
+
export declare const ABJAD_LETTERS: readonly string[];
|
|
44
|
+
/** The 28 letters in alphabetical (hijāʾī) order, the dictionary order of
|
|
45
|
+
* today (أ، ب، ت، ث، ج…); the first with its hamza, as above. */
|
|
46
|
+
export declare const HIJAI_LETTERS: readonly string[];
|
|
47
|
+
/**
|
|
48
|
+
* The `n`th marker of a letter series, by the bijective rule of
|
|
49
|
+
* `lower-alpha` (z, aa, ab…): past the last letter the series goes on in
|
|
50
|
+
* two letters (أأ, أب…), then three. A final heh that would stand alone
|
|
51
|
+
* takes a tatweel (هـ). Zero and below print nothing.
|
|
52
|
+
*/
|
|
53
|
+
export declare function arabicLettering(n: number, letters: readonly string[]): string;
|
|
54
|
+
//# sourceMappingURL=arabicNumerals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arabicNumerals.d.ts","sourceRoot":"","sources":["../src/arabicNumerals.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAK3C,+CAA+C;AAC/C,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;yEACyE;AACzE,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,CAIhF;AAED;;;sCAGsC;AACtC,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKhD;AAsDD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,UAAU,GAAG,UAAuB,GAAG,MAAM,CAQ7F;AAMD;;2EAE2E;AAC3E,eAAO,MAAM,aAAa,EAAE,SAAS,MAAM,EAGzC,CAAC;AAEH;kEACkE;AAClE,eAAO,MAAM,aAAa,EAAE,SAAS,MAAM,EAGzC,CAAC;AAEH;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAQ7E"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Arabic-script numerals, written and read: the Arabic-Indic digits of the
|
|
3
|
+
* Mashriq (٠١٢٣٤٥٦٧٨٩, U+0660–0669) and the Extended Arabic-Indic digits
|
|
4
|
+
* of Persian and Urdu (۰۱۲۳۴۵۶۷۸۹, U+06F0–06F9); the additive abjad
|
|
5
|
+
* numerals of Classical Arabic and manuscript foliation (يا = 11,
|
|
6
|
+
* غتمو = 1446) in the Mashriqi and the Maghrebi values; and the letter
|
|
7
|
+
* series that number list items and front matter, in abjad order
|
|
8
|
+
* (أ ب ج د هـ) and in the alphabetical, hijāʾī order (أ ب ت ث). Also
|
|
9
|
+
* the reverse for digits: an Arabic author types ٣ where a Latin one
|
|
10
|
+
* types 3.
|
|
11
|
+
*/
|
|
12
|
+
const ARABIC_INDIC_ZERO = 0x0660;
|
|
13
|
+
const PERSIAN_ZERO = 0x06f0;
|
|
14
|
+
/** `n` in Arabic-Indic digits: 2026 → ٢٠٢٦. */
|
|
15
|
+
export function arabicIndicDecimal(n) {
|
|
16
|
+
return String(n).replace(/\d/g, (d) => String.fromCharCode(ARABIC_INDIC_ZERO + Number(d)));
|
|
17
|
+
}
|
|
18
|
+
/** `n` in Extended Arabic-Indic (Persian) digits: 2026 → ۲۰۲۶. Urdu writes
|
|
19
|
+
* the same code points; its glyph forms come from the font (`locl`). */
|
|
20
|
+
export function persianDecimal(n) {
|
|
21
|
+
return String(n).replace(/\d/g, (d) => String.fromCharCode(PERSIAN_ZERO + Number(d)));
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* The ASCII digits of an engine-generated string in the document's digit
|
|
25
|
+
* system: `'arab'` writes ٠–٩, `'arabext'` ۰–۹, `'latn'` (or none) leaves
|
|
26
|
+
* the string as it is. Only strings the engine composed go through it — a
|
|
27
|
+
* page count, a chapter ordinal, the fallback of a list number — never
|
|
28
|
+
* the author's text.
|
|
29
|
+
*/
|
|
30
|
+
export function withDigits(text, digits) {
|
|
31
|
+
if (!digits || digits === 'latn')
|
|
32
|
+
return text;
|
|
33
|
+
const zero = digits === 'arab' ? ARABIC_INDIC_ZERO : PERSIAN_ZERO;
|
|
34
|
+
return text.replace(/[0-9]/g, (d) => String.fromCharCode(zero + d.charCodeAt(0) - 48));
|
|
35
|
+
}
|
|
36
|
+
/** Arabic-Indic (٠–٩) and Extended Arabic-Indic (۰–۹) digits turned into
|
|
37
|
+
* ASCII ones, everything else kept: what a number an author typed on an
|
|
38
|
+
* Arabic or Persian keyboard (`startAt=٣`, `:::part{number="١٢"}`) is
|
|
39
|
+
* read through before `Number()`. */
|
|
40
|
+
export function asciiDigits(text) {
|
|
41
|
+
return text.replace(/[٠-٩۰-۹]/g, (d) => {
|
|
42
|
+
const c = d.charCodeAt(0);
|
|
43
|
+
return String.fromCharCode(48 + c - (c >= PERSIAN_ZERO ? PERSIAN_ZERO : ARABIC_INDIC_ZERO));
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
// Abjad numerals
|
|
48
|
+
// ---------------------------------------------------------------------------
|
|
49
|
+
/** Units, tens and hundreds (index 1–9) and the thousand of the Mashriqi
|
|
50
|
+
* abjad (أبجد هوز حطي كلمن سعفص قرشت ثخذ ضظغ). */
|
|
51
|
+
const MASHRIQI = {
|
|
52
|
+
units: ['', 'ا', 'ب', 'ج', 'د', 'ه', 'و', 'ز', 'ح', 'ط'],
|
|
53
|
+
tens: ['', 'ي', 'ك', 'ل', 'م', 'ن', 'س', 'ع', 'ف', 'ص'],
|
|
54
|
+
hundreds: ['', 'ق', 'ر', 'ش', 'ت', 'ث', 'خ', 'ذ', 'ض', 'ظ'],
|
|
55
|
+
thousand: 'غ',
|
|
56
|
+
};
|
|
57
|
+
/** The Maghrebi abjad (أبجد هوز حطي كلمن صعفض قرست ثخذ ظغش): the same up to
|
|
58
|
+
* ن = 50, then ص 60, ض 90, س 300, ظ 800, غ 900 and ش 1000. The W3C
|
|
59
|
+
* `maghrebi-abjad` counter lists ض before ع (60) and ص after ف (90); the
|
|
60
|
+
* mnemonic صعفض and the reference tables put them the other way round,
|
|
61
|
+
* which is what is followed here. */
|
|
62
|
+
const MAGHREBI = {
|
|
63
|
+
units: MASHRIQI.units,
|
|
64
|
+
tens: ['', 'ي', 'ك', 'ل', 'م', 'ن', 'ص', 'ع', 'ف', 'ض'],
|
|
65
|
+
hundreds: ['', 'ق', 'ر', 'س', 'ت', 'ث', 'خ', 'ذ', 'ظ', 'غ'],
|
|
66
|
+
thousand: 'ش',
|
|
67
|
+
};
|
|
68
|
+
/** Largest abjad numeral written; past it the number prints in digits. */
|
|
69
|
+
const MAX_ABJAD = 999_999;
|
|
70
|
+
/** Letters that join only to the letter before them: a ه written after
|
|
71
|
+
* one of them stands alone. */
|
|
72
|
+
const RIGHT_JOINING = new Set(['ا', 'أ', 'إ', 'آ', 'د', 'ذ', 'ر', 'ز', 'و']);
|
|
73
|
+
/**
|
|
74
|
+
* A heh that would stand alone at the end of a numeral or a list marker —
|
|
75
|
+
* the whole marker (the fifth item, هـ) or after a letter that does not
|
|
76
|
+
* join forward (ده) — takes a tatweel, هـ, as Arabic books write it, so it
|
|
77
|
+
* is not read as the digit ٥. A heh joined to the letter before it (يه,
|
|
78
|
+
* 15) is clear as it is. The W3C counter styles write ه followed by a
|
|
79
|
+
* zero-width joiner, which shapes the same in a font that honours the
|
|
80
|
+
* joiner; the tatweel shapes alike everywhere, and is the form printed
|
|
81
|
+
* books use.
|
|
82
|
+
*/
|
|
83
|
+
function settleFinalHeh(text) {
|
|
84
|
+
if (!text.endsWith('ه'))
|
|
85
|
+
return text;
|
|
86
|
+
const before = text.slice(-2, -1);
|
|
87
|
+
return before === '' || RIGHT_JOINING.has(before) ? `${text}ـ` : text;
|
|
88
|
+
}
|
|
89
|
+
function abjadBelow1000(n, table) {
|
|
90
|
+
return table.hundreds[Math.floor(n / 100)] + table.tens[Math.floor(n / 10) % 10] + table.units[n % 10];
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* `n` in additive abjad numerals, highest value first in logical order
|
|
94
|
+
* (the reader sees it right to left): 11 يا, 15 يه, 1446 غتمو, 1835 غضله.
|
|
95
|
+
* The thousands count is written before the thousand letter (2000 بغ, as
|
|
96
|
+
* against 1002 غب). `'maghrebi'` takes the Maghrebi values. A final heh
|
|
97
|
+
* that would stand alone takes a tatweel (5 هـ). Zero has no abjad numeral
|
|
98
|
+
* and prints nothing; past 999 999 the number prints in digits.
|
|
99
|
+
*/
|
|
100
|
+
export function abjadNumeral(n, variant = 'mashriqi') {
|
|
101
|
+
if (!Number.isSafeInteger(n) || n < 1)
|
|
102
|
+
return '';
|
|
103
|
+
if (n > MAX_ABJAD)
|
|
104
|
+
return String(n);
|
|
105
|
+
const table = variant === 'maghrebi' ? MAGHREBI : MASHRIQI;
|
|
106
|
+
const thousands = Math.floor(n / 1000);
|
|
107
|
+
const rest = n % 1000;
|
|
108
|
+
const head = thousands === 0 ? '' : (thousands === 1 ? '' : abjadBelow1000(thousands, table)) + table.thousand;
|
|
109
|
+
return settleFinalHeh(head + abjadBelow1000(rest, table));
|
|
110
|
+
}
|
|
111
|
+
// ---------------------------------------------------------------------------
|
|
112
|
+
// Letter series
|
|
113
|
+
// ---------------------------------------------------------------------------
|
|
114
|
+
/** The 28 letters in abjad order, as list items are lettered in Arabic
|
|
115
|
+
* textbooks and outlines (أ، ب، ج، د، هـ…). The first is written with its
|
|
116
|
+
* hamza, as a list marker always is: a bare alif reads as the digit ١. */
|
|
117
|
+
export const ABJAD_LETTERS = Object.freeze([
|
|
118
|
+
'أ', 'ب', 'ج', 'د', 'ه', 'و', 'ز', 'ح', 'ط', 'ي', 'ك', 'ل', 'م', 'ن',
|
|
119
|
+
'س', 'ع', 'ف', 'ص', 'ق', 'ر', 'ش', 'ت', 'ث', 'خ', 'ذ', 'ض', 'ظ', 'غ',
|
|
120
|
+
]);
|
|
121
|
+
/** The 28 letters in alphabetical (hijāʾī) order, the dictionary order of
|
|
122
|
+
* today (أ، ب، ت، ث، ج…); the first with its hamza, as above. */
|
|
123
|
+
export const HIJAI_LETTERS = Object.freeze([
|
|
124
|
+
'أ', 'ب', 'ت', 'ث', 'ج', 'ح', 'خ', 'د', 'ذ', 'ر', 'ز', 'س', 'ش', 'ص',
|
|
125
|
+
'ض', 'ط', 'ظ', 'ع', 'غ', 'ف', 'ق', 'ك', 'ل', 'م', 'ن', 'ه', 'و', 'ي',
|
|
126
|
+
]);
|
|
127
|
+
/**
|
|
128
|
+
* The `n`th marker of a letter series, by the bijective rule of
|
|
129
|
+
* `lower-alpha` (z, aa, ab…): past the last letter the series goes on in
|
|
130
|
+
* two letters (أأ, أب…), then three. A final heh that would stand alone
|
|
131
|
+
* takes a tatweel (هـ). Zero and below print nothing.
|
|
132
|
+
*/
|
|
133
|
+
export function arabicLettering(n, letters) {
|
|
134
|
+
if (!Number.isSafeInteger(n) || n < 1)
|
|
135
|
+
return '';
|
|
136
|
+
let s = '';
|
|
137
|
+
for (let x = n; x > 0; x = Math.floor(x / letters.length)) {
|
|
138
|
+
x -= 1;
|
|
139
|
+
s = letters[x % letters.length] + s;
|
|
140
|
+
}
|
|
141
|
+
return settleFinalHeh(s);
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=arabicNumerals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arabicNumerals.js","sourceRoot":"","sources":["../src/arabicNumerals.ts"],"names":[],"mappings":"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"}
|
package/dist/bidi.d.ts
ADDED
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Unicode Bidirectional Algorithm (UAX #9), shared by the measurer and
|
|
3
|
+
* every renderer the way `writingMode.ts` shares vertical orientation.
|
|
4
|
+
*
|
|
5
|
+
* Arabic and Hebrew run right to left, digits and Latin words inside them
|
|
6
|
+
* left to right, and the order in which a line's pieces are painted follows
|
|
7
|
+
* from the characters themselves: their `Bidi_Class`, the paragraph's base
|
|
8
|
+
* direction and any explicit isolates (`:rtl[…]`, `:ltr[…]`, or the Unicode
|
|
9
|
+
* controls U+2066–U+2069). {@link resolveParagraph} resolves a paragraph's
|
|
10
|
+
* embedding levels (rules P2–P3, X1–X10, W1–W7, N0–N2, I1–I2); the line
|
|
11
|
+
* functions apply L1 (trailing white space back to the paragraph level) and
|
|
12
|
+
* L2 (reversal) to one line of it once the line breaker has cut it, so the
|
|
13
|
+
* breaker works on the logical text and never needs to know about
|
|
14
|
+
* direction. L3 (combining marks) is the shaper's business and L4
|
|
15
|
+
* (mirroring) is {@link mirroredChar}.
|
|
16
|
+
*
|
|
17
|
+
* Text is UTF-16: levels are kept per code unit, a surrogate pair's two
|
|
18
|
+
* units always share one level, and the order functions return the index
|
|
19
|
+
* of each code point's first unit. Characters rule X9 removes (embedding
|
|
20
|
+
* and override controls, `BN`) get the level of the character before them,
|
|
21
|
+
* so they never split a run; they paint nothing.
|
|
22
|
+
*
|
|
23
|
+
* Conformance: the full `BidiCharacterTest.txt` and `BidiTest.txt` of
|
|
24
|
+
* Unicode 18 pass (see `__tests__/bidi.test.ts`). The data tables are in
|
|
25
|
+
* `bidiData.ts`, generated by `scripts/gen-bidi-data.mjs`.
|
|
26
|
+
*/
|
|
27
|
+
import type { InlineDirection } from './parse/types';
|
|
28
|
+
/** A Unicode `Bidi_Class` (UAX #9 table 4). */
|
|
29
|
+
export type BidiClass = 'L' | 'R' | 'AL' | 'EN' | 'ES' | 'ET' | 'AN' | 'CS' | 'NSM' | 'BN' | 'B' | 'S' | 'WS' | 'ON' | 'LRE' | 'LRO' | 'RLE' | 'RLO' | 'PDF' | 'LRI' | 'RLI' | 'FSI' | 'PDI';
|
|
30
|
+
/** Every `Bidi_Class`, by its code in the data tables. */
|
|
31
|
+
export declare const BIDI_CLASS_NAMES: readonly BidiClass[];
|
|
32
|
+
/** A paragraph's base direction as configured: `auto` takes it from the
|
|
33
|
+
* first strong letter (rules P2–P3), left to right when there is none. */
|
|
34
|
+
export type BaseDirection = 'ltr' | 'rtl' | 'auto';
|
|
35
|
+
/** A code point's Unicode `Bidi_Class`. */
|
|
36
|
+
export declare function bidiClassOf(cp: number): BidiClass;
|
|
37
|
+
/** Whether a code point is a right-to-left letter (`Bidi_Class` `R` or
|
|
38
|
+
* `AL`): Hebrew, Arabic, Syriac, Thaana, N'Ko, Adlam and the other
|
|
39
|
+
* scripts written from right to left. Digits, punctuation and marks are
|
|
40
|
+
* not, whatever text they sit in. */
|
|
41
|
+
export declare function isRtlScriptChar(cp: number): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Whether a paragraph needs the bidi algorithm at all: it holds a
|
|
44
|
+
* right-to-left letter or a control that opens a right-to-left embedding,
|
|
45
|
+
* override or isolate. Text without one, in a left-to-right paragraph,
|
|
46
|
+
* resolves to even levels throughout and paints in logical order, so the
|
|
47
|
+
* layout can skip the algorithm (and stays exactly as it was). Arabic-Indic
|
|
48
|
+
* digits alone do not count: they run left to right.
|
|
49
|
+
*/
|
|
50
|
+
export declare function needsBidi(text: string): boolean;
|
|
51
|
+
/**
|
|
52
|
+
* The mirrored form of a character (`Bidi_Mirroring_Glyph`, rule L4): `)`
|
|
53
|
+
* for `(`, `»` for `«`, `≥` for `≤`. A renderer paints it in place of the
|
|
54
|
+
* character when the character's resolved level is odd and the font does
|
|
55
|
+
* not mirror it itself (OpenType `rtlm`). A character without a mirror is
|
|
56
|
+
* returned unchanged, as is anything longer than one code point.
|
|
57
|
+
*
|
|
58
|
+
* The ornate parentheses of Quranic text, U+FD3E ﴾ and U+FD3F ﴿, have no
|
|
59
|
+
* mirror and are not paired brackets: Unicode 14 gave them their present
|
|
60
|
+
* general categories (FD3F opens, FD3E closes, as they are written in
|
|
61
|
+
* Arabic) and keeps them out of `BidiMirroring.txt` and `BidiBrackets.txt`
|
|
62
|
+
* on purpose, so they always paint as they are encoded.
|
|
63
|
+
*/
|
|
64
|
+
export declare function mirroredChar(ch: string): string;
|
|
65
|
+
/** The mirrored form of a code point (see {@link mirroredChar}), or the
|
|
66
|
+
* code point itself when it has none. */
|
|
67
|
+
export declare function mirroredCodePoint(cp: number): number;
|
|
68
|
+
/** A Unicode `Joining_Type` (ArabicShaping.txt): `D` dual-joining (most
|
|
69
|
+
* Arabic letters), `R` right-joining (alef, dal, ra, waw…: joined only to
|
|
70
|
+
* the letter before them), `L` left-joining, `C` join-causing (tatweel,
|
|
71
|
+
* ZWJ), `T` transparent (harakat and other marks, skipped when deciding
|
|
72
|
+
* what joins), `U` non-joining. */
|
|
73
|
+
export type JoiningType = 'U' | 'C' | 'D' | 'R' | 'L' | 'T';
|
|
74
|
+
/** A code point's Unicode `Joining_Type`. */
|
|
75
|
+
export declare function joiningTypeOf(cp: number): JoiningType;
|
|
76
|
+
/** Whether a text holds a letter of a joining script: a character that is
|
|
77
|
+
* dual-, right- or left-joining (Arabic, Syriac, N'Ko, Mongolian, Adlam…).
|
|
78
|
+
* Join-causing characters alone do not count: a ZWJ also sits inside emoji
|
|
79
|
+
* sequences. */
|
|
80
|
+
export declare function hasJoiningScript(text: string): boolean;
|
|
81
|
+
/**
|
|
82
|
+
* Whether the character starting at `index` is joined to the next
|
|
83
|
+
* non-transparent character of `text` (cursive Arabic: the two letters
|
|
84
|
+
* connect, so a cut, a style change or a kashida between them must keep
|
|
85
|
+
* the connection). It joins when it joins forward (`D`, `L`, `C`) and the
|
|
86
|
+
* next one joins backward (`D`, `R`, `C`); transparent marks between them
|
|
87
|
+
* (harakat) are skipped. `false` at the end of the text, and when `index`
|
|
88
|
+
* itself is a transparent mark.
|
|
89
|
+
*/
|
|
90
|
+
export declare function joinsWithNext(text: string, index: number): boolean;
|
|
91
|
+
/** Whether any two characters of a text join (see {@link joinsWithNext}):
|
|
92
|
+
* a word that must be measured, cut and painted as one shaped run. */
|
|
93
|
+
export declare function joinsLetters(text: string): boolean;
|
|
94
|
+
/** The embedding levels of one paragraph, before any line is cut. */
|
|
95
|
+
export interface BidiParagraph {
|
|
96
|
+
/** The paragraph's text, in logical order. */
|
|
97
|
+
readonly text: string;
|
|
98
|
+
/** The paragraph embedding level: 0 left to right, 1 right to left. */
|
|
99
|
+
readonly paragraphLevel: number;
|
|
100
|
+
/** Resolved embedding level of each UTF-16 unit (rules X1–I2; L1 is per
|
|
101
|
+
* line, see {@link lineLevels}). Odd levels run right to left. */
|
|
102
|
+
readonly levels: Uint8Array;
|
|
103
|
+
/** Each unit's original `Bidi_Class` code: what L1 reads. */
|
|
104
|
+
readonly classes: Uint8Array;
|
|
105
|
+
}
|
|
106
|
+
/** A stretch of a paragraph set as an isolate of its own direction (an
|
|
107
|
+
* inline `:rtl[…]` / `:ltr[…]`), as if it were wrapped in RLI/LRI … PDI:
|
|
108
|
+
* `[start, end)` in UTF-16 units. Isolates nest or are disjoint. */
|
|
109
|
+
export interface BidiIsolate {
|
|
110
|
+
start: number;
|
|
111
|
+
end: number;
|
|
112
|
+
direction: 'ltr' | 'rtl';
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Resolve the embedding levels of one paragraph (UAX #9 up to I2). `base`
|
|
116
|
+
* is the paragraph direction: `ltr`, `rtl`, or `auto` for the direction of
|
|
117
|
+
* its first strong letter (left to right when it has none). `isolates`
|
|
118
|
+
* sets stretches of the text as directional isolates, as if their bounds
|
|
119
|
+
* held RLI/LRI and PDI controls (the inline `:rtl[…]` and `:ltr[…]`); the
|
|
120
|
+
* text itself may also hold the Unicode controls. A paragraph separator
|
|
121
|
+
* (`B`) ends the embeddings opened before it, as at the end of a paragraph;
|
|
122
|
+
* callers split the text at paragraph breaks first (rule P1).
|
|
123
|
+
*/
|
|
124
|
+
export declare function resolveParagraph(text: string, base?: BaseDirection, isolates?: readonly BidiIsolate[]): BidiParagraph;
|
|
125
|
+
/** A span of a parsed paragraph as {@link resolveSpans} reads it. */
|
|
126
|
+
interface DirectedSpan {
|
|
127
|
+
text: string;
|
|
128
|
+
direction?: InlineDirection;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* The isolates of a paragraph's spans (`InlineSpan.direction`, set by
|
|
132
|
+
* `:rtl[…]` and `:ltr[…]`) as ranges of their joined text. Spans of one
|
|
133
|
+
* isolate share its `id`; an isolate nested in another names it as `outer`.
|
|
134
|
+
*/
|
|
135
|
+
export declare function spanIsolates(spans: readonly DirectedSpan[]): BidiIsolate[];
|
|
136
|
+
/** {@link resolveParagraph} for a paragraph given as its spans: the text is
|
|
137
|
+
* their texts joined, and their `direction` isolates apply. */
|
|
138
|
+
export declare function resolveSpans(spans: readonly DirectedSpan[], base?: BaseDirection): BidiParagraph;
|
|
139
|
+
/**
|
|
140
|
+
* The algorithm proper, on class codes. `text` (with `map` from class
|
|
141
|
+
* positions to text positions, `-1` for a virtual control) gives the code
|
|
142
|
+
* units the paired-bracket rule reads; without it no bracket pairs.
|
|
143
|
+
* @internal Exported for the conformance tests (`BidiTest.txt` lists
|
|
144
|
+
* classes, not characters).
|
|
145
|
+
*/
|
|
146
|
+
export declare function resolveClasses(cls: Uint8Array, baseLevel: number, text: string | null, map: Int32Array | null): {
|
|
147
|
+
levels: Uint8Array;
|
|
148
|
+
paragraphLevel: number;
|
|
149
|
+
};
|
|
150
|
+
/**
|
|
151
|
+
* The levels of one line of a paragraph, `[start, end)` in UTF-16 units,
|
|
152
|
+
* after rule L1: segment and paragraph separators, and the white space and
|
|
153
|
+
* isolate controls before them or at the end of the line, go back to the
|
|
154
|
+
* paragraph level (a space that ends an Arabic line inside an English
|
|
155
|
+
* paragraph sits at the line's right end, not inside the Arabic run).
|
|
156
|
+
* Index 0 of the result is the line's first unit.
|
|
157
|
+
*/
|
|
158
|
+
export declare function lineLevels(par: BidiParagraph, start?: number, end?: number): Uint8Array;
|
|
159
|
+
/**
|
|
160
|
+
* Rule L2 on any sequence of items with levels (characters, or a line's
|
|
161
|
+
* segments with the level of each): the indices of `levels[start..end)`
|
|
162
|
+
* from left to right. Every run at or above each odd level is reversed,
|
|
163
|
+
* from the highest level down.
|
|
164
|
+
*/
|
|
165
|
+
export declare function visualOrder(levels: ArrayLike<number>, start?: number, end?: number): number[];
|
|
166
|
+
/**
|
|
167
|
+
* The characters of one line of a paragraph in visual order, left to right
|
|
168
|
+
* (rules L1 and L2): the index, in the paragraph's text, of each code
|
|
169
|
+
* point's first unit.
|
|
170
|
+
*/
|
|
171
|
+
export declare function lineVisualOrder(par: BidiParagraph, start?: number, end?: number): number[];
|
|
172
|
+
/** A run of one level within a line: `[start, end)` in the paragraph's
|
|
173
|
+
* text, painted right to left when `level` is odd. */
|
|
174
|
+
export interface BidiRun {
|
|
175
|
+
start: number;
|
|
176
|
+
end: number;
|
|
177
|
+
level: number;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* One line of a paragraph as runs of one level each, in visual order (left
|
|
181
|
+
* to right): what a renderer paints, each run shaped in its own direction
|
|
182
|
+
* (an odd level is right to left). Rules L1 and L2.
|
|
183
|
+
*/
|
|
184
|
+
export declare function lineRuns(par: BidiParagraph, start?: number, end?: number): BidiRun[];
|
|
185
|
+
export {};
|
|
186
|
+
//# sourceMappingURL=bidi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bidi.d.ts","sourceRoot":"","sources":["../src/bidi.ts"],"names":[],"mappings":"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"}
|