postext 1.14.0 → 1.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__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/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/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,267 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Arabic vowel marks (ḥarakāt, tashkīl) in a laid-out document (#376).
|
|
3
|
+
*
|
|
4
|
+
* The marks a vocalised text carries (fatḥa, ḍamma, kasra, tanwīn, sukūn,
|
|
5
|
+
* shadda, the dagger alef, the Qurʾānic annotation signs) stack over and
|
|
6
|
+
* under the letters, so the ink of a vocalised line reaches far past the
|
|
7
|
+
* letters' own ascenders and descenders: a shadda with a fatḥa over a lām
|
|
8
|
+
* stands about 1.3 em above the baseline in Amiri, a kasra under a final yāʾ
|
|
9
|
+
* hangs about 0.7 em under it. The line pitch never changes for them, as
|
|
10
|
+
* for the Chinese marks (`cjkMarks.ts`): they live in the leading. Two
|
|
11
|
+
* things follow from that.
|
|
12
|
+
*
|
|
13
|
+
* - The renderers clip each column to its box (`columnClipRect`). The
|
|
14
|
+
* first line of a column may hold marks that rise above the column's top
|
|
15
|
+
* and the last one marks that hang under its foot; the clip takes them
|
|
16
|
+
* in. A line holding marks carries how far its ink reaches
|
|
17
|
+
* (`VDTLine.markInk`), measured once here, so every renderer reads the
|
|
18
|
+
* same extent without measuring (the PDF backend has no canvas).
|
|
19
|
+
* - Where the marks of one line meet the ink of the line above or below,
|
|
20
|
+
* the paragraph is reported (`arabicMarksExceedLeading`). Two lines are
|
|
21
|
+
* compared word by word: a mark over a word of the lower line only
|
|
22
|
+
* collides with what hangs under the words of the upper line standing
|
|
23
|
+
* above it, which keeps tall marks on an alif from being reported against
|
|
24
|
+
* a descender at the other end of the line. Ink boxes are what the
|
|
25
|
+
* measurer gives (`TextMetrics.actualBoundingBox*`); without them (no
|
|
26
|
+
* canvas metrics) a word's box is estimated from its size and from the
|
|
27
|
+
* marks it holds.
|
|
28
|
+
*
|
|
29
|
+
* A document without vowel marks is looked at once per line (one regular
|
|
30
|
+
* expression test) and left as it was.
|
|
31
|
+
*/
|
|
32
|
+
import { measureInkBox } from './measure/canvas';
|
|
33
|
+
import { fontEm } from './measure/vertical';
|
|
34
|
+
import { segmentFont, segmentPositions } from './cjkMarks';
|
|
35
|
+
/** The combining marks of Arabic vocalisation and Qurʾānic annotation:
|
|
36
|
+
* the honorific and Qurʾānic signs U+0610–U+061A, the ḥarakāt and their
|
|
37
|
+
* extensions U+064B–U+065F, the superscript (dagger) alef U+0670, the
|
|
38
|
+
* small high and low Qurʾānic marks U+06D6–U+06ED (the symbols and
|
|
39
|
+
* letters among them left out: U+06DD end of āya, U+06DE rubʿ el-ḥizb,
|
|
40
|
+
* U+06E5–U+06E6 small wāw and yāʾ, U+06E9 place of sajda), and the
|
|
41
|
+
* extended Arabic marks U+08CA–U+08FF (U+08E2, a format character, left
|
|
42
|
+
* out). */
|
|
43
|
+
export const ARABIC_MARK_RE = /[ؐ-ًؚ-ٰٟۖ-ۜ۟-۪ۤۧۨ-ۭ࣊-ࣣ࣡-ࣿ]/;
|
|
44
|
+
/** The marks among {@link ARABIC_MARK_RE} set under the letter: kasra,
|
|
45
|
+
* kasratan, hamza below, subscript alef, the dots and small letters below
|
|
46
|
+
* of other orthographies, the low Qurʾānic signs. */
|
|
47
|
+
const ARABIC_MARK_BELOW_RE = /[ٍِٕٖٜٟۣ۪ۭ࣏࣍-࣒ࣣࣦࣩ࣭-࣯ࣶࣹࣺ]/;
|
|
48
|
+
/** Arabic-script letters (and marks): what is estimated as Arabic. */
|
|
49
|
+
const ARABIC_SCRIPT_RE = /[-ۿݐ-ݿࡰ-ࣿﭐ-﷿ﹰ-]/;
|
|
50
|
+
/** Whether `text` holds an Arabic vowel or Qurʾānic mark. */
|
|
51
|
+
export function hasArabicMarks(text) {
|
|
52
|
+
return ARABIC_MARK_RE.test(text);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Estimated ink of a word when the measurer gives no ink metrics, in em
|
|
56
|
+
* of its font, above and below the baseline. Arabic letters: the Naskh
|
|
57
|
+
* ascender of alif and lām and the descenders of rāʾ, nūn and yāʾ (about
|
|
58
|
+
* the typographic ascender and descender of Noto Naskh Arabic, 1.07 and
|
|
59
|
+
* 0.63 em, less the room those keep for marks); a mark over a letter adds
|
|
60
|
+
* about a third of an em above it, one under it a fifth below. With the
|
|
61
|
+
* marks of both sides the box is 1.75 em tall, Amiri's line spacing:
|
|
62
|
+
* fully vocalised text set solid at that leading touches. Any other text:
|
|
63
|
+
* a Latin face's ascender and descender.
|
|
64
|
+
*/
|
|
65
|
+
const ESTIMATE = {
|
|
66
|
+
arabicAscent: 0.8,
|
|
67
|
+
arabicDescent: 0.45,
|
|
68
|
+
markAbove: 0.3,
|
|
69
|
+
markBelow: 0.2,
|
|
70
|
+
latinAscent: 0.75,
|
|
71
|
+
latinDescent: 0.25,
|
|
72
|
+
};
|
|
73
|
+
/** Ink boxes measured, per font and text (cleared with each document's
|
|
74
|
+
* annotation pass: fonts may have changed between builds). */
|
|
75
|
+
let inkCache = new Map();
|
|
76
|
+
const MAX_INK_ENTRIES = 50_000;
|
|
77
|
+
/** The ink box of `text` set in `font`, px above and below the baseline:
|
|
78
|
+
* measured, else estimated (see `ESTIMATE`). */
|
|
79
|
+
export function inkBoxOf(text, font) {
|
|
80
|
+
const key = `${font}\u0000${text}`;
|
|
81
|
+
const cached = inkCache.get(key);
|
|
82
|
+
if (cached)
|
|
83
|
+
return cached;
|
|
84
|
+
if (inkCache.size >= MAX_INK_ENTRIES)
|
|
85
|
+
inkCache = new Map();
|
|
86
|
+
let ink = measureInkBox(text, font);
|
|
87
|
+
if (!ink) {
|
|
88
|
+
const em = fontEm(font);
|
|
89
|
+
const marks = hasArabicMarks(text);
|
|
90
|
+
if (ARABIC_SCRIPT_RE.test(text)) {
|
|
91
|
+
ink = {
|
|
92
|
+
ascent: em * (ESTIMATE.arabicAscent + (marks && aboveMark(text) ? ESTIMATE.markAbove : 0)),
|
|
93
|
+
descent: em * (ESTIMATE.arabicDescent + (marks && ARABIC_MARK_BELOW_RE.test(text) ? ESTIMATE.markBelow : 0)),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
ink = { ascent: em * ESTIMATE.latinAscent, descent: em * ESTIMATE.latinDescent };
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
inkCache.set(key, ink);
|
|
101
|
+
return ink;
|
|
102
|
+
}
|
|
103
|
+
/** Whether `text` holds a mark set over its letter. */
|
|
104
|
+
function aboveMark(text) {
|
|
105
|
+
for (const ch of text)
|
|
106
|
+
if (ARABIC_MARK_RE.test(ch) && !ARABIC_MARK_BELOW_RE.test(ch))
|
|
107
|
+
return true;
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
/** The words of a line with their ink, at the x the renderers paint them
|
|
111
|
+
* (the flow order `VDTLine.order` followed when the line has one). Spaces,
|
|
112
|
+
* formulas, chips and swatches hold no Arabic and are left out. */
|
|
113
|
+
export function lineWordInks(line, block) {
|
|
114
|
+
const segments = line.segments;
|
|
115
|
+
if (!segments || segments.length === 0) {
|
|
116
|
+
if (!line.text.trim())
|
|
117
|
+
return [];
|
|
118
|
+
const ink = inkBoxOf(line.text, block.fontString);
|
|
119
|
+
return [{ x0: line.bbox.x, x1: line.bbox.x + line.bbox.width, ...ink, marked: hasArabicMarks(line.text) }];
|
|
120
|
+
}
|
|
121
|
+
const { xs, widths } = segmentPositions(line, block);
|
|
122
|
+
const at = xs.slice();
|
|
123
|
+
if (line.order && line.order.length === segments.length) {
|
|
124
|
+
let x = xs[0] ?? line.bbox.x;
|
|
125
|
+
for (const i of line.order) {
|
|
126
|
+
at[i] = x;
|
|
127
|
+
x += widths[i];
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
const out = [];
|
|
131
|
+
segments.forEach((seg, i) => {
|
|
132
|
+
if (seg.kind !== 'text' || !seg.text.trim())
|
|
133
|
+
return;
|
|
134
|
+
const ink = inkBoxOf(seg.text, segmentFont(seg, block));
|
|
135
|
+
const shift = seg.baselineShift ?? 0;
|
|
136
|
+
out.push({
|
|
137
|
+
x0: at[i],
|
|
138
|
+
x1: at[i] + widths[i],
|
|
139
|
+
ascent: ink.ascent - shift,
|
|
140
|
+
descent: ink.descent + shift,
|
|
141
|
+
marked: hasArabicMarks(seg.text),
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
return out;
|
|
145
|
+
}
|
|
146
|
+
const round = (v) => Math.round(v * 1000) / 1000;
|
|
147
|
+
/** Two lines' ink may touch by this much (px) before they are reported:
|
|
148
|
+
* antialiasing, not a collision. */
|
|
149
|
+
const TOUCH_PX = 0.5;
|
|
150
|
+
/**
|
|
151
|
+
* Set `VDTLine.markInk` on every line of the document that holds an
|
|
152
|
+
* Arabic vowel mark, and report the paragraphs where those marks meet the
|
|
153
|
+
* ink of a neighbouring line of their column (`arabicMarksExceedLeading`,
|
|
154
|
+
* once per paragraph, on the lower line's paragraph). See the module
|
|
155
|
+
* comment.
|
|
156
|
+
*/
|
|
157
|
+
export function annotateArabicMarks(doc) {
|
|
158
|
+
// The document's vowel marks: none, and nothing is done.
|
|
159
|
+
let any = false;
|
|
160
|
+
for (const block of doc.blocks) {
|
|
161
|
+
if (block.type === 'resource' || !block.lines)
|
|
162
|
+
continue;
|
|
163
|
+
if (block.lines.some((l) => hasArabicMarks(l.text))) {
|
|
164
|
+
any = true;
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
if (!any)
|
|
169
|
+
return [];
|
|
170
|
+
inkCache = new Map();
|
|
171
|
+
/** Lines of the columns that hold a marked line, with their words. */
|
|
172
|
+
const columns = new Map();
|
|
173
|
+
const marked = new Set();
|
|
174
|
+
for (const block of doc.blocks) {
|
|
175
|
+
if (block.type === 'resource' || block.designOverlay || block.hidden || !block.lines)
|
|
176
|
+
continue;
|
|
177
|
+
for (const line of block.lines) {
|
|
178
|
+
if (!hasArabicMarks(line.text))
|
|
179
|
+
continue;
|
|
180
|
+
const words = lineWordInks(line, block);
|
|
181
|
+
let above = 0;
|
|
182
|
+
let below = 0;
|
|
183
|
+
for (const w of words) {
|
|
184
|
+
if (!w.marked)
|
|
185
|
+
continue;
|
|
186
|
+
above = Math.max(above, w.ascent);
|
|
187
|
+
below = Math.max(below, w.descent);
|
|
188
|
+
}
|
|
189
|
+
if (above > 0 || below > 0)
|
|
190
|
+
line.markInk = { above: round(above), below: round(below) };
|
|
191
|
+
if (block.pageIndex >= 0)
|
|
192
|
+
marked.add(`${block.pageIndex}:${block.columnIndex}`);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
for (const block of doc.blocks) {
|
|
196
|
+
if (block.type === 'resource' || block.designOverlay || block.hidden || !block.lines || block.pageIndex < 0)
|
|
197
|
+
continue;
|
|
198
|
+
const key = `${block.pageIndex}:${block.columnIndex}`;
|
|
199
|
+
if (!marked.has(key))
|
|
200
|
+
continue;
|
|
201
|
+
let column = columns.get(key);
|
|
202
|
+
if (!column)
|
|
203
|
+
columns.set(key, (column = []));
|
|
204
|
+
const em = fontEm(block.fontString);
|
|
205
|
+
for (const line of block.lines)
|
|
206
|
+
column.push({ line, block, words: lineWordInks(line, block), em });
|
|
207
|
+
}
|
|
208
|
+
const warnings = [];
|
|
209
|
+
const reported = new Set();
|
|
210
|
+
for (const column of columns.values()) {
|
|
211
|
+
column.sort((a, b) => a.line.baseline - b.line.baseline);
|
|
212
|
+
for (let i = 1; i < column.length; i++) {
|
|
213
|
+
const a = column[i - 1];
|
|
214
|
+
const b = column[i];
|
|
215
|
+
if (reported.has(b.block))
|
|
216
|
+
continue;
|
|
217
|
+
const pitch = b.line.baseline - a.line.baseline;
|
|
218
|
+
if (pitch <= 0)
|
|
219
|
+
continue;
|
|
220
|
+
let need = 0;
|
|
221
|
+
for (const lower of b.words) {
|
|
222
|
+
for (const upper of a.words) {
|
|
223
|
+
if (!lower.marked && !upper.marked)
|
|
224
|
+
continue;
|
|
225
|
+
if (Math.min(lower.x1, upper.x1) - Math.max(lower.x0, upper.x0) <= 0)
|
|
226
|
+
continue;
|
|
227
|
+
need = Math.max(need, lower.ascent + upper.descent);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
if (need <= pitch + TOUCH_PX)
|
|
231
|
+
continue;
|
|
232
|
+
reported.add(b.block);
|
|
233
|
+
const block = b.block;
|
|
234
|
+
const sourceStart = block.sourceStart ?? block.lines[0]?.sourceStart;
|
|
235
|
+
warnings.push({
|
|
236
|
+
kind: 'arabicMarksExceedLeading',
|
|
237
|
+
text: b.line.text,
|
|
238
|
+
lineHeightEm: round(pitch / b.em),
|
|
239
|
+
neededEm: round(need / b.em),
|
|
240
|
+
...(sourceStart !== undefined ? { sourceStart } : {}),
|
|
241
|
+
...(block.sourceEnd !== undefined ? { sourceEnd: block.sourceEnd } : {}),
|
|
242
|
+
pageIndex: block.pageIndex,
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
return warnings;
|
|
247
|
+
}
|
|
248
|
+
/** How far the vowel marks of a column's lines reach above `y0` (its top)
|
|
249
|
+
* and below `y1` (its foot), px (`VDTLine.markInk`; 0 when they stay
|
|
250
|
+
* inside). */
|
|
251
|
+
export function markInkOverhang(blocks, y0, y1) {
|
|
252
|
+
let above = 0;
|
|
253
|
+
let below = 0;
|
|
254
|
+
for (const block of blocks) {
|
|
255
|
+
if (block.hidden || !block.lines)
|
|
256
|
+
continue;
|
|
257
|
+
for (const line of block.lines) {
|
|
258
|
+
const ink = line.markInk;
|
|
259
|
+
if (!ink)
|
|
260
|
+
continue;
|
|
261
|
+
above = Math.max(above, y0 - (line.baseline - ink.above));
|
|
262
|
+
below = Math.max(below, line.baseline + ink.below - y1);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
return [above, below];
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=arabicMarks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arabicMarks.js","sourceRoot":"","sources":["../src/arabicMarks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
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
|
+
export type ArabicGender = 'masculine' | 'feminine';
|
|
18
|
+
export type ArabicSpelling = 'modern' | 'classical';
|
|
19
|
+
export interface ArabicWordsOptions {
|
|
20
|
+
/** The gender of the counted noun. Default `'masculine'`. */
|
|
21
|
+
gender?: ArabicGender;
|
|
22
|
+
/** `'classical'` spells the hundreds مائة. Default `'modern'` (مئة). */
|
|
23
|
+
spelling?: ArabicSpelling;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* `n` as an Arabic cardinal, nominative, counting a noun of `gender`:
|
|
27
|
+
* واحد / واحدة, اثنان / اثنتان, ثلاثة / ثلاث, أحد عشر / إحدى عشرة, واحد
|
|
28
|
+
* وعشرون / واحدة وعشرون, مئة وخمسة, ألفان وثلاثمئة. Zero is صفر; past
|
|
29
|
+
* 99 999, and below zero, the number prints in digits.
|
|
30
|
+
*/
|
|
31
|
+
export declare function arabicCardinal(n: number, options?: ArabicWordsOptions): string;
|
|
32
|
+
/**
|
|
33
|
+
* `n` as a definite Arabic ordinal, nominative, agreeing with a noun of
|
|
34
|
+
* `gender`, as a heading names a chapter or a night: الأول / الأولى, الحادي
|
|
35
|
+
* عشر / الحادية عشرة, الحادي والعشرون / الحادية والعشرون, المئة, الخامس
|
|
36
|
+
* والأربعون بعد المئة, الحادية بعد المئتين, الخامسة والأربعون بعد الثلاثمئة,
|
|
37
|
+
* الألف, الحادية بعد الألف. A round hundred or thousand is the definite
|
|
38
|
+
* number itself (المئتان, الألف والمئة); any other number above 100 is
|
|
39
|
+
* the ordinal of its last two digits "after" the round part. Past 9 999,
|
|
40
|
+
* and below 1, the number prints in digits.
|
|
41
|
+
*/
|
|
42
|
+
export declare function arabicOrdinal(n: number, options?: ArabicWordsOptions): string;
|
|
43
|
+
//# sourceMappingURL=arabicNumberWords.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arabicNumberWords.d.ts","sourceRoot":"","sources":["../src/arabicNumberWords.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,UAAU,CAAC;AACpD,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,WAAW,CAAC;AAEpD,MAAM,WAAW,kBAAkB;IACjC,6DAA6D;IAC7D,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAkED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,MAAM,CAQlF;AA0CD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,MAAM,CAajF"}
|
|
@@ -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"}
|