postext 1.14.1 → 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.
Files changed (489) hide show
  1. package/dist/__tests__/arabic/blockLanguageDigits.test.d.ts +2 -0
  2. package/dist/__tests__/arabic/blockLanguageDigits.test.d.ts.map +1 -0
  3. package/dist/__tests__/arabic/blockLanguageDigits.test.js +54 -0
  4. package/dist/__tests__/arabic/blockLanguageDigits.test.js.map +1 -0
  5. package/dist/__tests__/arabic/emphasis.test.d.ts +2 -0
  6. package/dist/__tests__/arabic/emphasis.test.d.ts.map +1 -0
  7. package/dist/__tests__/arabic/emphasis.test.js +206 -0
  8. package/dist/__tests__/arabic/emphasis.test.js.map +1 -0
  9. package/dist/__tests__/arabic/footnotes.test.d.ts +2 -0
  10. package/dist/__tests__/arabic/footnotes.test.d.ts.map +1 -0
  11. package/dist/__tests__/arabic/footnotes.test.js +118 -0
  12. package/dist/__tests__/arabic/footnotes.test.js.map +1 -0
  13. package/dist/__tests__/arabic/harakat.test.d.ts +2 -0
  14. package/dist/__tests__/arabic/harakat.test.d.ts.map +1 -0
  15. package/dist/__tests__/arabic/harakat.test.js +167 -0
  16. package/dist/__tests__/arabic/harakat.test.js.map +1 -0
  17. package/dist/__tests__/arabic/ornateBrackets.test.d.ts +2 -0
  18. package/dist/__tests__/arabic/ornateBrackets.test.d.ts.map +1 -0
  19. package/dist/__tests__/arabic/ornateBrackets.test.js +71 -0
  20. package/dist/__tests__/arabic/ornateBrackets.test.js.map +1 -0
  21. package/dist/__tests__/arabic/tashkil.test.d.ts +2 -0
  22. package/dist/__tests__/arabic/tashkil.test.d.ts.map +1 -0
  23. package/dist/__tests__/arabic/tashkil.test.js +106 -0
  24. package/dist/__tests__/arabic/tashkil.test.js.map +1 -0
  25. package/dist/__tests__/arabicLocale.test.d.ts +2 -0
  26. package/dist/__tests__/arabicLocale.test.d.ts.map +1 -0
  27. package/dist/__tests__/arabicLocale.test.js +232 -0
  28. package/dist/__tests__/arabicLocale.test.js.map +1 -0
  29. package/dist/__tests__/arabicNumberWords.test.d.ts +2 -0
  30. package/dist/__tests__/arabicNumberWords.test.d.ts.map +1 -0
  31. package/dist/__tests__/arabicNumberWords.test.js +176 -0
  32. package/dist/__tests__/arabicNumberWords.test.js.map +1 -0
  33. package/dist/__tests__/arabicNumbering.test.d.ts +2 -0
  34. package/dist/__tests__/arabicNumbering.test.d.ts.map +1 -0
  35. package/dist/__tests__/arabicNumbering.test.js +257 -0
  36. package/dist/__tests__/arabicNumbering.test.js.map +1 -0
  37. package/dist/__tests__/arabicWords.test.d.ts +2 -0
  38. package/dist/__tests__/arabicWords.test.d.ts.map +1 -0
  39. package/dist/__tests__/arabicWords.test.js +302 -0
  40. package/dist/__tests__/arabicWords.test.js.map +1 -0
  41. package/dist/__tests__/bidi.test.d.ts +2 -0
  42. package/dist/__tests__/bidi.test.d.ts.map +1 -0
  43. package/dist/__tests__/bidi.test.js +282 -0
  44. package/dist/__tests__/bidi.test.js.map +1 -0
  45. package/dist/__tests__/blockHints.test.d.ts +2 -0
  46. package/dist/__tests__/blockHints.test.d.ts.map +1 -0
  47. package/dist/__tests__/blockHints.test.js +79 -0
  48. package/dist/__tests__/blockHints.test.js.map +1 -0
  49. package/dist/__tests__/chineseLocale.test.js +2 -2
  50. package/dist/__tests__/chineseLocale.test.js.map +1 -1
  51. package/dist/__tests__/cjk/grid.test.js +2 -2
  52. package/dist/__tests__/cjk/grid.test.js.map +1 -1
  53. package/dist/__tests__/cjk/justifyRender.test.js +2 -1
  54. package/dist/__tests__/cjk/justifyRender.test.js.map +1 -1
  55. package/dist/__tests__/defaults/folio.test.js +16 -1
  56. package/dist/__tests__/defaults/folio.test.js.map +1 -1
  57. package/dist/__tests__/direction.test.d.ts +2 -0
  58. package/dist/__tests__/direction.test.d.ts.map +1 -0
  59. package/dist/__tests__/direction.test.js +117 -0
  60. package/dist/__tests__/direction.test.js.map +1 -0
  61. package/dist/__tests__/exports.test.js +29 -0
  62. package/dist/__tests__/exports.test.js.map +1 -1
  63. package/dist/__tests__/headingLetterSpacing.test.js +1 -1
  64. package/dist/__tests__/headingLetterSpacing.test.js.map +1 -1
  65. package/dist/__tests__/headingNumberPosition.test.d.ts +2 -0
  66. package/dist/__tests__/headingNumberPosition.test.d.ts.map +1 -0
  67. package/dist/__tests__/headingNumberPosition.test.js +87 -0
  68. package/dist/__tests__/headingNumberPosition.test.js.map +1 -0
  69. package/dist/__tests__/htmlCopyText.test.d.ts +2 -0
  70. package/dist/__tests__/htmlCopyText.test.d.ts.map +1 -0
  71. package/dist/__tests__/htmlCopyText.test.js +153 -0
  72. package/dist/__tests__/htmlCopyText.test.js.map +1 -0
  73. package/dist/__tests__/kashida.test.d.ts +2 -0
  74. package/dist/__tests__/kashida.test.d.ts.map +1 -0
  75. package/dist/__tests__/kashida.test.js +281 -0
  76. package/dist/__tests__/kashida.test.js.map +1 -0
  77. package/dist/__tests__/kashidaPatterns.test.d.ts +2 -0
  78. package/dist/__tests__/kashidaPatterns.test.d.ts.map +1 -0
  79. package/dist/__tests__/kashidaPatterns.test.js +143 -0
  80. package/dist/__tests__/kashidaPatterns.test.js.map +1 -0
  81. package/dist/__tests__/links.test.js +3 -1
  82. package/dist/__tests__/links.test.js.map +1 -1
  83. package/dist/__tests__/parse/containers.test.js +1 -1
  84. package/dist/__tests__/parse/containers.test.js.map +1 -1
  85. package/dist/__tests__/rtl/designText.test.d.ts +2 -0
  86. package/dist/__tests__/rtl/designText.test.d.ts.map +1 -0
  87. package/dist/__tests__/rtl/designText.test.js +301 -0
  88. package/dist/__tests__/rtl/designText.test.js.map +1 -0
  89. package/dist/__tests__/rtl/designTextPaint.test.d.ts +2 -0
  90. package/dist/__tests__/rtl/designTextPaint.test.d.ts.map +1 -0
  91. package/dist/__tests__/rtl/designTextPaint.test.js +140 -0
  92. package/dist/__tests__/rtl/designTextPaint.test.js.map +1 -0
  93. package/dist/__tests__/rtl/htmlRtl.test.d.ts +2 -0
  94. package/dist/__tests__/rtl/htmlRtl.test.d.ts.map +1 -0
  95. package/dist/__tests__/rtl/htmlRtl.test.js +175 -0
  96. package/dist/__tests__/rtl/htmlRtl.test.js.map +1 -0
  97. package/dist/__tests__/rtl/mirroredFrame.test.d.ts +2 -0
  98. package/dist/__tests__/rtl/mirroredFrame.test.d.ts.map +1 -0
  99. package/dist/__tests__/rtl/mirroredFrame.test.js +313 -0
  100. package/dist/__tests__/rtl/mirroredFrame.test.js.map +1 -0
  101. package/dist/__tests__/rtl/mirroredPaint.test.d.ts +2 -0
  102. package/dist/__tests__/rtl/mirroredPaint.test.d.ts.map +1 -0
  103. package/dist/__tests__/rtl/mirroredPaint.test.js +116 -0
  104. package/dist/__tests__/rtl/mirroredPaint.test.js.map +1 -0
  105. package/dist/__tests__/rtl/oppositeBlocks.test.d.ts +2 -0
  106. package/dist/__tests__/rtl/oppositeBlocks.test.d.ts.map +1 -0
  107. package/dist/__tests__/rtl/oppositeBlocks.test.js +273 -0
  108. package/dist/__tests__/rtl/oppositeBlocks.test.js.map +1 -0
  109. package/dist/__tests__/rtl/segmentLang.test.d.ts +2 -0
  110. package/dist/__tests__/rtl/segmentLang.test.d.ts.map +1 -0
  111. package/dist/__tests__/rtl/segmentLang.test.js +54 -0
  112. package/dist/__tests__/rtl/segmentLang.test.js.map +1 -0
  113. package/dist/__tests__/rtlLines.test.d.ts +2 -0
  114. package/dist/__tests__/rtlLines.test.d.ts.map +1 -0
  115. package/dist/__tests__/rtlLines.test.js +180 -0
  116. package/dist/__tests__/rtlLines.test.js.map +1 -0
  117. package/dist/__tests__/tocNumberColumn.test.d.ts +2 -0
  118. package/dist/__tests__/tocNumberColumn.test.d.ts.map +1 -0
  119. package/dist/__tests__/tocNumberColumn.test.js +67 -0
  120. package/dist/__tests__/tocNumberColumn.test.js.map +1 -0
  121. package/dist/__tests__/verse.test.d.ts +2 -0
  122. package/dist/__tests__/verse.test.d.ts.map +1 -0
  123. package/dist/__tests__/verse.test.js +232 -0
  124. package/dist/__tests__/verse.test.js.map +1 -0
  125. package/dist/__tests__/vertical/geometry.test.js +2 -2
  126. package/dist/__tests__/vertical/geometry.test.js.map +1 -1
  127. package/dist/__tests__/vertical/htmlTurnedCells.test.js +2 -2
  128. package/dist/__tests__/vertical/htmlTurnedCells.test.js.map +1 -1
  129. package/dist/arabicMarks.d.ts +80 -0
  130. package/dist/arabicMarks.d.ts.map +1 -0
  131. package/dist/arabicMarks.js +267 -0
  132. package/dist/arabicMarks.js.map +1 -0
  133. package/dist/arabicNumberWords.d.ts +43 -0
  134. package/dist/arabicNumberWords.d.ts.map +1 -0
  135. package/dist/arabicNumberWords.js +163 -0
  136. package/dist/arabicNumberWords.js.map +1 -0
  137. package/dist/arabicNumerals.d.ts +54 -0
  138. package/dist/arabicNumerals.d.ts.map +1 -0
  139. package/dist/arabicNumerals.js +143 -0
  140. package/dist/arabicNumerals.js.map +1 -0
  141. package/dist/bidi.d.ts +186 -0
  142. package/dist/bidi.d.ts.map +1 -0
  143. package/dist/bidi.js +851 -0
  144. package/dist/bidi.js.map +1 -0
  145. package/dist/bidiData.d.ts +13 -0
  146. package/dist/bidiData.d.ts.map +1 -0
  147. package/dist/bidiData.js +318 -0
  148. package/dist/bidiData.js.map +1 -0
  149. package/dist/canvas-backend/blockRender.d.ts.map +1 -1
  150. package/dist/canvas-backend/blockRender.js +58 -27
  151. package/dist/canvas-backend/blockRender.js.map +1 -1
  152. package/dist/canvas-backend/chip.d.ts.map +1 -1
  153. package/dist/canvas-backend/chip.js +16 -2
  154. package/dist/canvas-backend/chip.js.map +1 -1
  155. package/dist/canvas-backend/headerFooter.d.ts.map +1 -1
  156. package/dist/canvas-backend/headerFooter.js +7 -3
  157. package/dist/canvas-backend/headerFooter.js.map +1 -1
  158. package/dist/canvas-backend/index.d.ts.map +1 -1
  159. package/dist/canvas-backend/index.js +9 -4
  160. package/dist/canvas-backend/index.js.map +1 -1
  161. package/dist/canvas-backend/mirrorFrame.d.ts +38 -0
  162. package/dist/canvas-backend/mirrorFrame.d.ts.map +1 -0
  163. package/dist/canvas-backend/mirrorFrame.js +129 -0
  164. package/dist/canvas-backend/mirrorFrame.js.map +1 -0
  165. package/dist/canvas-backend/renderResourceBlock.d.ts.map +1 -1
  166. package/dist/canvas-backend/renderResourceBlock.js +16 -5
  167. package/dist/canvas-backend/renderResourceBlock.js.map +1 -1
  168. package/dist/canvas-backend/runDirection.d.ts +21 -0
  169. package/dist/canvas-backend/runDirection.d.ts.map +1 -0
  170. package/dist/canvas-backend/runDirection.js +46 -0
  171. package/dist/canvas-backend/runDirection.js.map +1 -0
  172. package/dist/canvas-backend/wordRuns.d.ts +49 -0
  173. package/dist/canvas-backend/wordRuns.d.ts.map +1 -0
  174. package/dist/canvas-backend/wordRuns.js +111 -0
  175. package/dist/canvas-backend/wordRuns.js.map +1 -0
  176. package/dist/columnClip.d.ts +4 -1
  177. package/dist/columnClip.d.ts.map +1 -1
  178. package/dist/columnClip.js +8 -3
  179. package/dist/columnClip.js.map +1 -1
  180. package/dist/configWarnings.d.ts +3 -1
  181. package/dist/configWarnings.d.ts.map +1 -1
  182. package/dist/configWarnings.js +59 -5
  183. package/dist/configWarnings.js.map +1 -1
  184. package/dist/defaults/bodyText.d.ts +28 -6
  185. package/dist/defaults/bodyText.d.ts.map +1 -1
  186. package/dist/defaults/bodyText.js +158 -30
  187. package/dist/defaults/bodyText.js.map +1 -1
  188. package/dist/defaults/calloutStyles.js +1 -1
  189. package/dist/defaults/calloutStyles.js.map +1 -1
  190. package/dist/defaults/captionStyle.js +5 -5
  191. package/dist/defaults/captionStyle.js.map +1 -1
  192. package/dist/defaults/folio.d.ts +4 -0
  193. package/dist/defaults/folio.d.ts.map +1 -1
  194. package/dist/defaults/folio.js +12 -1
  195. package/dist/defaults/folio.js.map +1 -1
  196. package/dist/defaults/footnotes.d.ts.map +1 -1
  197. package/dist/defaults/footnotes.js +12 -2
  198. package/dist/defaults/footnotes.js.map +1 -1
  199. package/dist/defaults/headerFooter.d.ts.map +1 -1
  200. package/dist/defaults/headerFooter.js +1 -0
  201. package/dist/defaults/headerFooter.js.map +1 -1
  202. package/dist/defaults/headingStyles.d.ts.map +1 -1
  203. package/dist/defaults/headingStyles.js +2 -1
  204. package/dist/defaults/headingStyles.js.map +1 -1
  205. package/dist/defaults/headings.d.ts.map +1 -1
  206. package/dist/defaults/headings.js +9 -2
  207. package/dist/defaults/headings.js.map +1 -1
  208. package/dist/defaults/index.d.ts +1 -1
  209. package/dist/defaults/index.d.ts.map +1 -1
  210. package/dist/defaults/index.js +7 -1
  211. package/dist/defaults/index.js.map +1 -1
  212. package/dist/defaults/indexConfig.d.ts +6 -2
  213. package/dist/defaults/indexConfig.d.ts.map +1 -1
  214. package/dist/defaults/indexConfig.js +25 -5
  215. package/dist/defaults/indexConfig.js.map +1 -1
  216. package/dist/defaults/page.d.ts +7 -4
  217. package/dist/defaults/page.d.ts.map +1 -1
  218. package/dist/defaults/page.js +10 -7
  219. package/dist/defaults/page.js.map +1 -1
  220. package/dist/defaults/paragraphStyles.js +2 -2
  221. package/dist/defaults/paragraphStyles.js.map +1 -1
  222. package/dist/defaults/parts.d.ts.map +1 -1
  223. package/dist/defaults/parts.js +2 -1
  224. package/dist/defaults/parts.js.map +1 -1
  225. package/dist/defaults/resourceTypes.d.ts +1 -1
  226. package/dist/defaults/resourceTypes.d.ts.map +1 -1
  227. package/dist/defaults/resourceTypes.js +10 -2
  228. package/dist/defaults/resourceTypes.js.map +1 -1
  229. package/dist/defaults/shared.d.ts +9 -0
  230. package/dist/defaults/shared.d.ts.map +1 -1
  231. package/dist/defaults/shared.js +15 -0
  232. package/dist/defaults/shared.js.map +1 -1
  233. package/dist/defaults/tableStyle.d.ts.map +1 -1
  234. package/dist/defaults/tableStyle.js +5 -1
  235. package/dist/defaults/tableStyle.js.map +1 -1
  236. package/dist/design/bidiText.d.ts +89 -0
  237. package/dist/design/bidiText.d.ts.map +1 -0
  238. package/dist/design/bidiText.js +165 -0
  239. package/dist/design/bidiText.js.map +1 -0
  240. package/dist/design/layout.d.ts +20 -0
  241. package/dist/design/layout.d.ts.map +1 -1
  242. package/dist/design/layout.js +46 -5
  243. package/dist/design/layout.js.map +1 -1
  244. package/dist/design/placeholders.d.ts +7 -1
  245. package/dist/design/placeholders.d.ts.map +1 -1
  246. package/dist/design/placeholders.js +6 -3
  247. package/dist/design/placeholders.js.map +1 -1
  248. package/dist/design/richText.d.ts +5 -2
  249. package/dist/design/richText.d.ts.map +1 -1
  250. package/dist/design/richText.js +35 -2
  251. package/dist/design/richText.js.map +1 -1
  252. package/dist/emphasisOverline.d.ts +27 -0
  253. package/dist/emphasisOverline.d.ts.map +1 -0
  254. package/dist/emphasisOverline.js +107 -0
  255. package/dist/emphasisOverline.js.map +1 -0
  256. package/dist/frontmatter.d.ts +25 -6
  257. package/dist/frontmatter.d.ts.map +1 -1
  258. package/dist/frontmatter.js +51 -10
  259. package/dist/frontmatter.js.map +1 -1
  260. package/dist/html-backend.d.ts +4 -1
  261. package/dist/html-backend.d.ts.map +1 -1
  262. package/dist/html-backend.js +363 -87
  263. package/dist/html-backend.js.map +1 -1
  264. package/dist/hyphenate.d.ts.map +1 -1
  265. package/dist/hyphenate.js +4 -1
  266. package/dist/hyphenate.js.map +1 -1
  267. package/dist/index.d.ts +11 -8
  268. package/dist/index.d.ts.map +1 -1
  269. package/dist/index.js +6 -4
  270. package/dist/index.js.map +1 -1
  271. package/dist/knuthPlass/breakpoints.d.ts.map +1 -1
  272. package/dist/knuthPlass/breakpoints.js +3 -0
  273. package/dist/knuthPlass/breakpoints.js.map +1 -1
  274. package/dist/knuthPlass/pretextAdapter.d.ts.map +1 -1
  275. package/dist/knuthPlass/pretextAdapter.js +9 -3
  276. package/dist/knuthPlass/pretextAdapter.js.map +1 -1
  277. package/dist/knuthPlass/richAdapter.d.ts +11 -0
  278. package/dist/knuthPlass/richAdapter.d.ts.map +1 -1
  279. package/dist/knuthPlass/richAdapter.js +11 -4
  280. package/dist/knuthPlass/richAdapter.js.map +1 -1
  281. package/dist/knuthPlass/tracking.d.ts +2 -1
  282. package/dist/knuthPlass/tracking.d.ts.map +1 -1
  283. package/dist/knuthPlass/tracking.js +5 -2
  284. package/dist/knuthPlass/tracking.js.map +1 -1
  285. package/dist/knuthPlass/types.d.ts +4 -0
  286. package/dist/knuthPlass/types.d.ts.map +1 -1
  287. package/dist/locale.d.ts +63 -9
  288. package/dist/locale.d.ts.map +1 -1
  289. package/dist/locale.js +129 -12
  290. package/dist/locale.js.map +1 -1
  291. package/dist/measure/bidiLines.d.ts +91 -0
  292. package/dist/measure/bidiLines.d.ts.map +1 -0
  293. package/dist/measure/bidiLines.js +293 -0
  294. package/dist/measure/bidiLines.js.map +1 -0
  295. package/dist/measure/cache.d.ts.map +1 -1
  296. package/dist/measure/cache.js +10 -4
  297. package/dist/measure/cache.js.map +1 -1
  298. package/dist/measure/joining.d.ts +39 -0
  299. package/dist/measure/joining.d.ts.map +1 -0
  300. package/dist/measure/joining.js +91 -0
  301. package/dist/measure/joining.js.map +1 -0
  302. package/dist/measure/joiningGroups.d.ts +7 -0
  303. package/dist/measure/joiningGroups.d.ts.map +1 -0
  304. package/dist/measure/joiningGroups.js +110 -0
  305. package/dist/measure/joiningGroups.js.map +1 -0
  306. package/dist/measure/kashida.d.ts +97 -0
  307. package/dist/measure/kashida.d.ts.map +1 -0
  308. package/dist/measure/kashida.js +285 -0
  309. package/dist/measure/kashida.js.map +1 -0
  310. package/dist/measure/kashidaPatterns.d.ts +109 -0
  311. package/dist/measure/kashidaPatterns.d.ts.map +1 -0
  312. package/dist/measure/kashidaPatterns.js +519 -0
  313. package/dist/measure/kashidaPatterns.js.map +1 -0
  314. package/dist/measure/links.d.ts.map +1 -1
  315. package/dist/measure/links.js +5 -2
  316. package/dist/measure/links.js.map +1 -1
  317. package/dist/measure/plain.d.ts.map +1 -1
  318. package/dist/measure/plain.js +31 -0
  319. package/dist/measure/plain.js.map +1 -1
  320. package/dist/measure/rich.d.ts +24 -0
  321. package/dist/measure/rich.d.ts.map +1 -1
  322. package/dist/measure/rich.js +250 -22
  323. package/dist/measure/rich.js.map +1 -1
  324. package/dist/measure/types.d.ts +14 -0
  325. package/dist/measure/types.d.ts.map +1 -1
  326. package/dist/measure/types.js.map +1 -1
  327. package/dist/numberWords.d.ts +17 -4
  328. package/dist/numberWords.d.ts.map +1 -1
  329. package/dist/numberWords.js +19 -13
  330. package/dist/numberWords.js.map +1 -1
  331. package/dist/numbering.d.ts +49 -11
  332. package/dist/numbering.d.ts.map +1 -1
  333. package/dist/numbering.js +117 -21
  334. package/dist/numbering.js.map +1 -1
  335. package/dist/parse/annotations.d.ts +6 -3
  336. package/dist/parse/annotations.d.ts.map +1 -1
  337. package/dist/parse/annotations.js +31 -7
  338. package/dist/parse/annotations.js.map +1 -1
  339. package/dist/parse/attrs.d.ts +3 -3
  340. package/dist/parse/attrs.d.ts.map +1 -1
  341. package/dist/parse/attrs.js +5 -4
  342. package/dist/parse/attrs.js.map +1 -1
  343. package/dist/parse/blockParser.d.ts.map +1 -1
  344. package/dist/parse/blockParser.js +158 -14
  345. package/dist/parse/blockParser.js.map +1 -1
  346. package/dist/parse/index.d.ts +1 -1
  347. package/dist/parse/index.d.ts.map +1 -1
  348. package/dist/parse/index.js.map +1 -1
  349. package/dist/parse/inlineFormatting.d.ts.map +1 -1
  350. package/dist/parse/inlineFormatting.js +5 -4
  351. package/dist/parse/inlineFormatting.js.map +1 -1
  352. package/dist/parse/types.d.ts +63 -1
  353. package/dist/parse/types.d.ts.map +1 -1
  354. package/dist/pipeline/build.d.ts.map +1 -1
  355. package/dist/pipeline/build.js +161 -43
  356. package/dist/pipeline/build.js.map +1 -1
  357. package/dist/pipeline/buildBlockKind.d.ts +2 -0
  358. package/dist/pipeline/buildBlockKind.d.ts.map +1 -1
  359. package/dist/pipeline/buildBlockKind.js +67 -2
  360. package/dist/pipeline/buildBlockKind.js.map +1 -1
  361. package/dist/pipeline/buildHelpers.d.ts +22 -1
  362. package/dist/pipeline/buildHelpers.d.ts.map +1 -1
  363. package/dist/pipeline/buildHelpers.js +55 -5
  364. package/dist/pipeline/buildHelpers.js.map +1 -1
  365. package/dist/pipeline/calloutLayout.d.ts +6 -1
  366. package/dist/pipeline/calloutLayout.d.ts.map +1 -1
  367. package/dist/pipeline/calloutLayout.js +63 -18
  368. package/dist/pipeline/calloutLayout.js.map +1 -1
  369. package/dist/pipeline/citations.d.ts +2 -1
  370. package/dist/pipeline/citations.d.ts.map +1 -1
  371. package/dist/pipeline/citations.js +29 -9
  372. package/dist/pipeline/citations.js.map +1 -1
  373. package/dist/pipeline/cjkGrid.d.ts +3 -2
  374. package/dist/pipeline/cjkGrid.d.ts.map +1 -1
  375. package/dist/pipeline/cjkGrid.js +3 -2
  376. package/dist/pipeline/cjkGrid.js.map +1 -1
  377. package/dist/pipeline/config.d.ts +13 -1
  378. package/dist/pipeline/config.d.ts.map +1 -1
  379. package/dist/pipeline/config.js +32 -3
  380. package/dist/pipeline/config.js.map +1 -1
  381. package/dist/pipeline/contentWarnings.d.ts +10 -0
  382. package/dist/pipeline/contentWarnings.d.ts.map +1 -1
  383. package/dist/pipeline/contentWarnings.js +88 -0
  384. package/dist/pipeline/contentWarnings.js.map +1 -1
  385. package/dist/pipeline/continuation.d.ts.map +1 -1
  386. package/dist/pipeline/continuation.js +1 -1
  387. package/dist/pipeline/continuation.js.map +1 -1
  388. package/dist/pipeline/crossRefs.d.ts.map +1 -1
  389. package/dist/pipeline/crossRefs.js +2 -0
  390. package/dist/pipeline/crossRefs.js.map +1 -1
  391. package/dist/pipeline/floatPlacement.d.ts.map +1 -1
  392. package/dist/pipeline/floatPlacement.js +2 -1
  393. package/dist/pipeline/floatPlacement.js.map +1 -1
  394. package/dist/pipeline/footnotes.d.ts +13 -5
  395. package/dist/pipeline/footnotes.d.ts.map +1 -1
  396. package/dist/pipeline/footnotes.js +19 -8
  397. package/dist/pipeline/footnotes.js.map +1 -1
  398. package/dist/pipeline/headerFooter.d.ts +4 -0
  399. package/dist/pipeline/headerFooter.d.ts.map +1 -1
  400. package/dist/pipeline/headerFooter.js +41 -13
  401. package/dist/pipeline/headerFooter.js.map +1 -1
  402. package/dist/pipeline/headingDesignCuts.d.ts +1 -1
  403. package/dist/pipeline/headingDesignCuts.d.ts.map +1 -1
  404. package/dist/pipeline/headingDesignCuts.js +2 -1
  405. package/dist/pipeline/headingDesignCuts.js.map +1 -1
  406. package/dist/pipeline/headingStyles.d.ts +10 -0
  407. package/dist/pipeline/headingStyles.d.ts.map +1 -1
  408. package/dist/pipeline/headingStyles.js +46 -0
  409. package/dist/pipeline/headingStyles.js.map +1 -1
  410. package/dist/pipeline/indexDirective.d.ts.map +1 -1
  411. package/dist/pipeline/indexDirective.js +33 -6
  412. package/dist/pipeline/indexDirective.js.map +1 -1
  413. package/dist/pipeline/indexGroups.d.ts +23 -1
  414. package/dist/pipeline/indexGroups.d.ts.map +1 -1
  415. package/dist/pipeline/indexGroups.js +50 -1
  416. package/dist/pipeline/indexGroups.js.map +1 -1
  417. package/dist/pipeline/lists.d.ts +16 -4
  418. package/dist/pipeline/lists.d.ts.map +1 -1
  419. package/dist/pipeline/lists.js +51 -12
  420. package/dist/pipeline/lists.js.map +1 -1
  421. package/dist/pipeline/measureContentBlock.d.ts +5 -0
  422. package/dist/pipeline/measureContentBlock.d.ts.map +1 -1
  423. package/dist/pipeline/measureContentBlock.js +63 -4
  424. package/dist/pipeline/measureContentBlock.js.map +1 -1
  425. package/dist/pipeline/mirrorFrame.d.ts +37 -0
  426. package/dist/pipeline/mirrorFrame.d.ts.map +1 -0
  427. package/dist/pipeline/mirrorFrame.js +143 -0
  428. package/dist/pipeline/mirrorFrame.js.map +1 -0
  429. package/dist/pipeline/outline.d.ts +2 -2
  430. package/dist/pipeline/outline.d.ts.map +1 -1
  431. package/dist/pipeline/outline.js +33 -6
  432. package/dist/pipeline/outline.js.map +1 -1
  433. package/dist/pipeline/paragraphContainers.d.ts +5 -0
  434. package/dist/pipeline/paragraphContainers.d.ts.map +1 -1
  435. package/dist/pipeline/paragraphContainers.js +12 -0
  436. package/dist/pipeline/paragraphContainers.js.map +1 -1
  437. package/dist/pipeline/parts.d.ts +1 -1
  438. package/dist/pipeline/parts.d.ts.map +1 -1
  439. package/dist/pipeline/parts.js +3 -2
  440. package/dist/pipeline/parts.js.map +1 -1
  441. package/dist/pipeline/placeholders.d.ts +13 -6
  442. package/dist/pipeline/placeholders.d.ts.map +1 -1
  443. package/dist/pipeline/placeholders.js +15 -11
  444. package/dist/pipeline/placeholders.js.map +1 -1
  445. package/dist/pipeline/placement.d.ts +3 -2
  446. package/dist/pipeline/placement.d.ts.map +1 -1
  447. package/dist/pipeline/placement.js +18 -6
  448. package/dist/pipeline/placement.js.map +1 -1
  449. package/dist/pipeline/resourceLayout.d.ts.map +1 -1
  450. package/dist/pipeline/resourceLayout.js +70 -7
  451. package/dist/pipeline/resourceLayout.js.map +1 -1
  452. package/dist/pipeline/resourceNumbering.d.ts +5 -3
  453. package/dist/pipeline/resourceNumbering.d.ts.map +1 -1
  454. package/dist/pipeline/resourceNumbering.js +11 -8
  455. package/dist/pipeline/resourceNumbering.js.map +1 -1
  456. package/dist/pipeline/styles.d.ts +6 -1
  457. package/dist/pipeline/styles.d.ts.map +1 -1
  458. package/dist/pipeline/styles.js +44 -14
  459. package/dist/pipeline/styles.js.map +1 -1
  460. package/dist/pipeline/tashkil.d.ts +27 -0
  461. package/dist/pipeline/tashkil.d.ts.map +1 -0
  462. package/dist/pipeline/tashkil.js +161 -0
  463. package/dist/pipeline/tashkil.js.map +1 -0
  464. package/dist/pipeline/toc.d.ts +12 -0
  465. package/dist/pipeline/toc.d.ts.map +1 -1
  466. package/dist/pipeline/toc.js +64 -4
  467. package/dist/pipeline/toc.js.map +1 -1
  468. package/dist/pipeline/verse.d.ts +65 -0
  469. package/dist/pipeline/verse.d.ts.map +1 -0
  470. package/dist/pipeline/verse.js +252 -0
  471. package/dist/pipeline/verse.js.map +1 -0
  472. package/dist/pipeline/verticalMetrics.d.ts +1 -1
  473. package/dist/pipeline/verticalMetrics.d.ts.map +1 -1
  474. package/dist/pipeline/verticalMetrics.js +7 -5
  475. package/dist/pipeline/verticalMetrics.js.map +1 -1
  476. package/dist/table/model.d.ts +4 -3
  477. package/dist/table/model.d.ts.map +1 -1
  478. package/dist/table/model.js.map +1 -1
  479. package/dist/types.d.ts +286 -36
  480. package/dist/types.d.ts.map +1 -1
  481. package/dist/uprightArabic.d.ts +39 -0
  482. package/dist/uprightArabic.d.ts.map +1 -0
  483. package/dist/uprightArabic.js +105 -0
  484. package/dist/uprightArabic.js.map +1 -0
  485. package/dist/vdt.d.ts +276 -11
  486. package/dist/vdt.d.ts.map +1 -1
  487. package/dist/vdt.js +46 -9
  488. package/dist/vdt.js.map +1 -1
  489. package/package.json +1 -1
package/dist/types.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { EastAsianNumeralStyle, NumberFormatStyle, NumeralStyle } from './numbering';
1
+ import type { ArabicNumeralStyle, EastAsianNumeralStyle, NumberFormatStyle, NumeralStyle } from './numbering';
2
2
  /** @deprecated Legacy content-model resource used by the VDT renderer
3
3
  * (`VDTBlock.resource`). The Resources-panel feature uses the newer
4
4
  * `Resource` / `ResourceType` model below. Retained until the renderer
@@ -13,9 +13,10 @@ export interface PostextResource {
13
13
  width?: number;
14
14
  height?: number;
15
15
  }
16
- /** How a counter renders for a given resource type. The East Asian styles
17
- * keep their CSS names (`simp-chinese-informal`, `circled-decimal`…). */
18
- export type ResourceCounterFormat = 'decimal' | 'roman-lower' | 'roman-upper' | 'alpha-lower' | 'alpha-upper' | EastAsianNumeralStyle;
16
+ /** How a counter renders for a given resource type. The East Asian and
17
+ * Arabic styles keep their CSS names (`simp-chinese-informal`,
18
+ * `circled-decimal`, `arabic-indic`…). */
19
+ export type ResourceCounterFormat = 'decimal' | 'roman-lower' | 'roman-upper' | 'alpha-lower' | 'alpha-upper' | EastAsianNumeralStyle | ArabicNumeralStyle;
19
20
  /** When the per-type counter resets back to its starting value. `'never'`
20
21
  * yields a single document-wide running count; `'h1'..'h6'` resets the
21
22
  * counter whenever a heading of that level is encountered. */
@@ -68,8 +69,10 @@ export interface ResourcePlacement {
68
69
  * shrank — whose caption and note keep the slot's measure. A turned
69
70
  * figure and one with its caption beside it stay flush left. Default
70
71
  * `'left'` (up to postext 1.4 a narrower picture was always set flush
71
- * left). */
72
- align?: 'left' | 'center' | 'right';
72
+ * left). Sides of the body flow, so on a right-to-left document's
73
+ * mirrored pages `'left'` is the sheet's right; `'start'` / `'end'`
74
+ * (#371) are the same sides by their logical names. */
75
+ align?: 'left' | 'center' | 'right' | 'start' | 'end';
73
76
  /** Set the caption beside the figure, in the float-only side column of
74
77
  * a `oneAndHalf` layout (`layout.sideColumnRole: 'floats'`): the body
75
78
  * keeps its column, the caption goes to the margin level with the
@@ -117,6 +120,12 @@ export interface ResourceType {
117
120
  export type ResourceKind = 'bitmap' | 'svg' | 'table';
118
121
  /** Horizontal alignment of a table cell's content. */
119
122
  export type TableCellAlign = 'left' | 'center' | 'right';
123
+ /** A cell's alignment as a table model writes it: a {@link TableCellAlign},
124
+ * or the logical `'start'` / `'end'` (#371), the side the cell's text
125
+ * starts or ends on. Cell text reads like body text: `'left'` is the
126
+ * start side too, the right in a right-to-left table (see
127
+ * {@link TextAlignKeyword}); the layout keeps only the physical values. */
128
+ export type TableCellAlignKeyword = TableCellAlign | 'start' | 'end';
120
129
  /** Vertical alignment of a table cell's content. */
121
130
  export type TableCellVerticalAlign = 'top' | 'middle' | 'bottom';
122
131
  /** Position of a cell within a {@link TableModel} grid (zero-based). */
@@ -151,7 +160,7 @@ export interface TableCell {
151
160
  rowSpan?: number;
152
161
  /** When true, render as a header cell (`<th>`). */
153
162
  isHeader?: boolean;
154
- align?: TableCellAlign;
163
+ align?: TableCellAlignKeyword;
155
164
  verticalAlign?: TableCellVerticalAlign;
156
165
  /** Fill colour of this cell, painted instead of the table style's header
157
166
  * / body background. A palette-linked value (`paletteId`) follows the
@@ -231,6 +240,15 @@ export interface Resource {
231
240
  * set in. Unset, or an id no style declares, falls back to the
232
241
  * document's `tableStyle`. */
233
242
  styleId?: string;
243
+ /** The direction the table runs in (#371), when it is not the
244
+ * document's: `'ltr'` for an English data table in an Arabic book,
245
+ * `'rtl'` for an Arabic one in an English book. Its first column then
246
+ * sits on the side its text starts on, its cells are read in that
247
+ * direction and align from that side (`'left'` / `'start'` being the
248
+ * start). Unset, the table runs with the document (in a right-to-left
249
+ * document, first column on the right). Its caption and note follow
250
+ * the document. */
251
+ direction?: 'ltr' | 'rtl';
234
252
  };
235
253
  /** Optional per-resource placement override. When unset, the resource's
236
254
  * type default (then `top` / `column`) applies. A `position` of `'top'` or
@@ -517,7 +535,7 @@ export interface CutLinesConfig {
517
535
  * separation), so they print on every plate. Default black. */
518
536
  color?: ColorValue;
519
537
  }
520
- export type PageNumberFormat = 'decimal' | 'lower-roman' | 'upper-roman' | 'lower-alpha' | 'upper-alpha' | EastAsianNumeralStyle;
538
+ export type PageNumberFormat = 'decimal' | 'lower-roman' | 'upper-roman' | 'lower-alpha' | 'upper-alpha' | EastAsianNumeralStyle | ArabicNumeralStyle;
521
539
  export interface PageNumberingConfig {
522
540
  /** Format for page labels. Default: `'decimal'`. The list and resource
523
541
  * spellings of a format are read too (`'arabic'`, `'roman-lower'`,
@@ -547,12 +565,14 @@ export interface PageConfig {
547
565
  pageNumbering?: PageNumberingConfig;
548
566
  /** The edge the book is bound on. `'left'`: pages turn right to left, as
549
567
  * in any Western book. `'right'`: the book is bound on its right edge,
550
- * as vertical Chinese and Japanese books are (clreq §7.1.1.1): page 1 is
568
+ * as vertical Chinese and Japanese books and Arabic and Hebrew books
569
+ * are (clreq §7.1.1.1): page 1 is
551
570
  * still the recto (odd), but it is the LEFT page of a spread, its inner
552
571
  * margin is on its right, and viewers show the pairs `[3 | 2]`. With
553
572
  * mirrored margins the recto therefore swaps `left` and `right`: `left`
554
573
  * stays the inner margin. `'auto'` (the default) is `'right'` when
555
- * `layout.writingMode` is `'vertical-rl'`, else `'left'`. Book-level:
574
+ * `layout.writingMode` is `'vertical-rl'` or the document runs right to
575
+ * left (`PostextConfig.direction`), else `'left'`. Book-level:
556
576
  * a heading style's own `layout` never changes it. */
557
577
  binding?: PageBinding;
558
578
  }
@@ -698,6 +718,18 @@ export interface ResolvedLayoutConfig {
698
718
  writingMode: WritingMode;
699
719
  }
700
720
  export type TextAlign = 'left' | 'justify' | 'center' | 'right';
721
+ /**
722
+ * A text alignment as a config writes it (#371): a {@link TextAlign}, or the
723
+ * logical `'start'` / `'end'`. Running text reads its alignment in its own
724
+ * direction: `'left'` and `'start'` are the side a line starts on, `'right'`
725
+ * and `'end'` the side it ends on — the left and the right of an English
726
+ * paragraph, the right and the left of an Arabic one, on a page of either
727
+ * direction (a right-to-left document's pages are mirrored, so its body
728
+ * flow's left is the sheet's right). The last line of a justified paragraph
729
+ * goes to the start side. `'start'` / `'end'` say so explicitly; a resolved
730
+ * config carries `'left'` / `'right'` only.
731
+ */
732
+ export type TextAlignKeyword = TextAlign | 'start' | 'end';
701
733
  export type HyphenationLocale = 'en-us' | 'es' | 'fr' | 'de' | 'it' | 'pt' | 'ca' | 'nl';
702
734
  /**
703
735
  * A BCP 47 language tag: one of the bundled {@link HyphenationLocale} ids,
@@ -708,6 +740,19 @@ export type HyphenationLocale = 'en-us' | 'es' | 'fr' | 'de' | 'it' | 'pt' | 'ca
708
740
  * console. The tag itself is kept as the PDF's document language.
709
741
  */
710
742
  export type LocaleTag = HyphenationLocale | (string & {});
743
+ /** The direction a document's text runs (`PostextConfig.direction`):
744
+ * `'ltr'` left to right, `'rtl'` right to left (Arabic, Hebrew), `'auto'`
745
+ * from the script of the document language. */
746
+ export type DocumentDirection = 'auto' | 'ltr' | 'rtl';
747
+ /** A digit system, named as the Unicode `-u-nu-` keyword names it: `'latn'`
748
+ * the European digits 0–9, `'arab'` the Arabic-Indic digits ٠–٩ of the
749
+ * Mashriq (U+0660–0669), `'arabext'` the Extended Arabic-Indic digits
750
+ * ۰–۹ of Persian and Urdu (U+06F0–06F9). */
751
+ export type DigitSystem = 'latn' | 'arab' | 'arabext';
752
+ /** The digits a document's generated numbers are written in (see
753
+ * `PostextConfig.numerals`): a {@link DigitSystem}, or `'auto'` to take
754
+ * the one of the document language (`defaultNumeralsFor`). */
755
+ export type NumeralsSetting = 'auto' | DigitSystem;
711
756
  export interface HyphenationConfig {
712
757
  enabled?: boolean;
713
758
  /** Language of the hyphenation patterns. Defaults to the top-level
@@ -751,6 +796,17 @@ export interface ResolvedHyphenationConfig {
751
796
  zone: Dimension;
752
797
  compounds: boolean;
753
798
  }
799
+ /** `BodyTextConfig.kashida`. */
800
+ export type KashidaSetting = 'auto' | 'none';
801
+ /** `BodyTextConfig.kashidaPatterns`. */
802
+ export type KashidaPatterns = 'auto' | 'naskh' | 'simple' | 'nastaliq';
803
+ /** Kashida justification as resolved (see `BodyTextConfig.kashida`). */
804
+ export interface ResolvedKashidaConfig {
805
+ patterns: KashidaPatterns;
806
+ perWord: number;
807
+ /** Longest elongation at one join, em. */
808
+ maxLength: number;
809
+ }
754
810
  export interface BodyTextConfig {
755
811
  /** One family, as every `fontFamily` field: a CSS font stack is set in
756
812
  * its first family (see `primaryFontFamily`) and reported by
@@ -769,7 +825,7 @@ export interface BodyTextConfig {
769
825
  referenceBold?: boolean;
770
826
  /** Whether reference labels are rendered italic. Default `false`. */
771
827
  referenceItalic?: boolean;
772
- textAlign?: TextAlign;
828
+ textAlign?: TextAlignKeyword;
773
829
  fontWeight?: number;
774
830
  boldFontWeight?: number;
775
831
  hyphenation?: HyphenationConfig;
@@ -802,6 +858,39 @@ export interface BodyTextConfig {
802
858
  * is taken only where word spacing alone would pass its limits), so it
803
859
  * needs `optimalLineBreaking`. 0 (the default) turns it off. */
804
860
  maxJustifyTracking?: number;
861
+ /** Kashida justification (#375): a justified line of Arabic-script text
862
+ * takes part of its slack by elongating letter joins with tatweels
863
+ * (U+0640), the rest in its word spaces. Each word gets at most
864
+ * {@link kashidaPerWord} elongations, at the joins the pattern set
865
+ * ({@link kashidaPatterns}) ranks best, never after a letter that does
866
+ * not join onward (ا د ذ ر ز و ة), never at the end of a word, never
867
+ * inside lām-alif; a word that holds a tatweel the author typed is
868
+ * lengthened there. Never in Latin text, digits, a heading, a ragged
869
+ * line or a paragraph's last line, and never as letter-spacing.
870
+ * Knuth–Plass counts each word's elongation as stretch, so lines with
871
+ * Arabic words choose their breaks knowing they can stretch there.
872
+ * The tatweels are painted as text; copied and extracted text leaves
873
+ * them out (see `VDTLineSegment.kashida`).
874
+ * `'auto'` elongates; `'none'` justifies with the spaces alone. Unset:
875
+ * `'auto'` in a document whose language is written in the Arabic
876
+ * script (`ar`, `fa`, `ur`…), `'none'` otherwise. */
877
+ kashida?: KashidaSetting;
878
+ /** Which joins take a kashida, and in what order (#375): `'naskh'`, the
879
+ * classical Naskh rules (Benatia's matrix with Afifi's prohibitions, as
880
+ * in raqim-kashida), for Amiri, Noto Naskh, Scheherazade and their
881
+ * kind; `'simple'`, the Microsoft priorities, for simple modern faces;
882
+ * `'nastaliq'`, the Naskh rules tailored for Nastaʿlīq. `'auto'` (the
883
+ * default) reads the body font's family: no kashida at all in a Ruqʿa
884
+ * or Dīwānī face (`Aref Ruqaa`), whose letters do not elongate,
885
+ * `'nastaliq'` in a Nastaʿlīq one, else `'naskh'`. */
886
+ kashidaPatterns?: KashidaPatterns;
887
+ /** Most elongations in one word (#375). Default 1, the rule of book
888
+ * typography; a classical verse line (`:::verse`) may take more. */
889
+ kashidaPerWord?: number;
890
+ /** Longest elongation at one join, in ems (#375): the tatweels inserted
891
+ * there are whole ones, as many as fit in this. Default 0.6 (three
892
+ * tatweels of Amiri, two of Noto Naskh Arabic). */
893
+ kashidaMaxLength?: number;
805
894
  /** Use Knuth-Plass optimal line breaking instead of greedy first-fit. Default true. */
806
895
  optimalLineBreaking?: boolean;
807
896
  /** Break ragged paragraphs with Knuth–Plass too: body text, blockquotes
@@ -996,7 +1085,44 @@ export interface BodyTextConfig {
996
1085
  * container that closes on a list is set as in 1.4 under both rules: the
997
1086
  * list keeps its own space in its snap, and `marginBottom` follows. */
998
1087
  paragraphContainerSpacing?: ParagraphContainerSpacing;
999
- }
1088
+ /** How Markdown emphasis (`*…*`) is set (see {@link EmphasisStyle}).
1089
+ * `'auto'` (the default): `'bold'` in a document whose language is
1090
+ * written in Arabic script (`ar`, `fa`, `ur`…), whose type has no
1091
+ * italics, and `'italic'` in any other. Whatever is chosen, the engine
1092
+ * never slants Arabic letters: an italic run sets its Arabic words
1093
+ * upright (#376). */
1094
+ emphasis?: 'auto' | EmphasisStyle;
1095
+ /** Arabic vowel marks (tashkīl) in the text (see {@link TashkilMode}).
1096
+ * Default `'keep'`. */
1097
+ tashkil?: TashkilMode;
1098
+ }
1099
+ /** How `*…*` is set (`BodyTextConfig.emphasis`):
1100
+ * - `'italic'`: in the italic face, as postext always did;
1101
+ * - `'bold'`: in the bold face and `boldColor`, as `**…**` is (bold
1102
+ * and italic together stay bold);
1103
+ * - `'color'`: upright, in `italicColor`;
1104
+ * - `'overline'`: upright, in `italicColor`, with a rule over the words
1105
+ * (the Arabic khaṭṭ fawqī).
1106
+ * It applies to the body text and to what is set in its faces: lists,
1107
+ * blockquotes, paragraph styles, callout bodies, notes and headings.
1108
+ * Captions, table cells, the contents and the index keep their own
1109
+ * italic settings. */
1110
+ export type EmphasisStyle = 'italic' | 'bold' | 'color' | 'overline';
1111
+ /** What becomes of the Arabic vowel marks of the text
1112
+ * (`BodyTextConfig.tashkil`), for an edition without them made from a
1113
+ * vocalised source:
1114
+ * - `'keep'`: set as written;
1115
+ * - `'strip'`: every vowel and Qurʾānic mark is dropped: fatḥa, ḍamma,
1116
+ * kasra, their tanwīn, sukūn, shadda, the superscript (dagger) alef
1117
+ * U+0670 (هٰذا is set هذا) and the other marks U+0656–U+065F, and the
1118
+ * Qurʾānic annotation signs U+06D6–U+06ED;
1119
+ * - `'strip-vowels'`: as `'strip'`, but the shadda stays, as most modern
1120
+ * books print it.
1121
+ * Hamza and madda are kept in both: أ إ آ ؤ ئ are letters, also when
1122
+ * written with the combining U+0653–U+0655. The marks leave the text the
1123
+ * layout sets (body, headings, notes, the contents); the source keeps
1124
+ * them, and every character set still maps to its place in it. */
1125
+ export type TashkilMode = 'keep' | 'strip' | 'strip-vowels';
1000
1126
  /** The room kept for a list under the colon line that introduces it
1001
1127
  * (`BodyTextConfig.colonListRoom`). */
1002
1128
  export type ColonListRoom = 'item' | 'line';
@@ -1053,6 +1179,14 @@ export interface ResolvedBodyTextConfig {
1053
1179
  maxWordSpacing: number;
1054
1180
  minWordSpacing: number;
1055
1181
  maxJustifyTracking: number;
1182
+ /** Kashida justification (see `BodyTextConfig.kashida`): `'auto'` and
1183
+ * its three details, all resolved, when it is on; all four absent when
1184
+ * it is off, so a document that does not use it resolves as it did
1185
+ * before kashidas existed. Read them with `resolvedKashida`. */
1186
+ kashida?: 'auto';
1187
+ kashidaPatterns?: KashidaPatterns;
1188
+ kashidaPerWord?: number;
1189
+ kashidaMaxLength?: number;
1056
1190
  optimalLineBreaking: boolean;
1057
1191
  optimalRagged: boolean;
1058
1192
  breakAfterDashes: boolean;
@@ -1079,6 +1213,10 @@ export interface ResolvedBodyTextConfig {
1079
1213
  colonListRoom: ColonListRoom;
1080
1214
  hyphenateAcrossColumns: boolean;
1081
1215
  paragraphContainerSpacing: ParagraphContainerSpacing;
1216
+ /** `emphasis` resolved; absent when `*…*` is set in italics. */
1217
+ emphasis?: Exclude<EmphasisStyle, 'italic'>;
1218
+ /** `tashkil`; absent when the marks are kept. */
1219
+ tashkil?: Exclude<TashkilMode, 'keep'>;
1082
1220
  /** Set only in the derived config a callout lays its children out with
1083
1221
  * (a style's `body.italic` / `body.smallCaps`): the running text of a
1084
1222
  * document is always upright, in lowercase. */
@@ -1234,7 +1372,7 @@ export interface CaptionNoteStyleConfig {
1234
1372
  /** Gap between the note and what precedes it (body or caption). Default `0.35em`. */
1235
1373
  gap?: Dimension;
1236
1374
  /** Horizontal alignment of the note. Default `'left'`. */
1237
- align?: TextAlign;
1375
+ align?: TextAlignKeyword;
1238
1376
  }
1239
1377
  export interface ResolvedCaptionNoteStyleConfig {
1240
1378
  fontSize: Dimension;
@@ -1256,7 +1394,7 @@ export interface CaptionStyleConfig {
1256
1394
  /** Description text colour. Defaults to the body-text colour. */
1257
1395
  color?: ColorValue;
1258
1396
  /** Horizontal alignment of caption text. Default `'left'`. */
1259
- align?: TextAlign;
1397
+ align?: TextAlignKeyword;
1260
1398
  /** Gap between the figure body and the caption. Default `0.75em`. */
1261
1399
  gap?: Dimension;
1262
1400
  /** Render the numbered label bold. Default `true`. */
@@ -1342,7 +1480,7 @@ export interface ParagraphStyleConfig {
1342
1480
  color?: ColorValue;
1343
1481
  /** Defaults to the body alignment. `'center'` and `'right'` set every
1344
1482
  * line ragged from the other side (a dedication, a signature block). */
1345
- textAlign?: TextAlign;
1483
+ textAlign?: TextAlignKeyword;
1346
1484
  /** Colour of bold runs. Defaults to `bodyText.boldColor`. */
1347
1485
  boldColor?: ColorValue;
1348
1486
  /** Colour of italic (`*…*`) runs — in an {@link italic} style, the runs
@@ -1460,7 +1598,13 @@ export interface CalloutFixedConfig {
1460
1598
  /** `'fill'` spans the available width; `'auto'` shrink-wraps the title
1461
1599
  * (badge use — children are ignored). */
1462
1600
  export type CalloutWidth = 'fill' | 'auto';
1463
- export type CalloutStripeSide = 'left' | 'right' | 'top';
1601
+ /** The edge a callout's stripe runs along. `'left'` / `'right'` are sides
1602
+ * of the body flow (on a right-to-left document's mirrored pages, its left
1603
+ * is the sheet's right); `'start'` / `'end'` (#371) are the box's own: the
1604
+ * side its text starts or ends on, which differs from the flow's in a box
1605
+ * set against the document's direction (`:::callout{dir=ltr}` in an
1606
+ * Arabic book). */
1607
+ export type CalloutStripeSide = 'left' | 'right' | 'top' | 'start' | 'end';
1464
1608
  export type CalloutIconKind = 'none' | 'glyph' | 'resource';
1465
1609
  export type CalloutIconAlign = 'top' | 'center';
1466
1610
  /** Where the in-box icon sits: `'inline'` (the default) in a column of its
@@ -1469,10 +1613,16 @@ export type CalloutIconAlign = 'top' | 'center';
1469
1613
  * border, taking no room from the content (the icon of a marginal box). */
1470
1614
  export type CalloutIconPosition = 'inline' | 'corner';
1471
1615
  /** Which corner a `position: 'corner'` icon hangs on: `'right'` (the
1472
- * default) / `'left'` are fixed; `'outer'` / `'inner'` follow the page
1473
- * parity when the margins are mirrored (outer = right on a recto, left on
1474
- * a verso), like the side column of a `oneAndHalf` layout. */
1475
- export type CalloutIconCornerSide = 'right' | 'left' | 'outer' | 'inner';
1616
+ * default) / `'left'` are fixed sides of the body flow; `'outer'` /
1617
+ * `'inner'` follow the page parity when the margins are mirrored (outer =
1618
+ * right on a recto, left on a verso), like the side column of a
1619
+ * `oneAndHalf` layout; `'start'` / `'end'` (#371) the box's own direction
1620
+ * (see {@link CalloutStripeSide}). */
1621
+ export type CalloutIconCornerSide = 'right' | 'left' | 'outer' | 'inner' | 'start' | 'end';
1622
+ /** The top corner a callout's label tab hugs: `'top-right'` / `'top-left'`
1623
+ * in the body flow's terms, `'top-start'` / `'top-end'` (#371) in the box's
1624
+ * own direction (see {@link CalloutStripeSide}). */
1625
+ export type CalloutLabelPosition = 'top-right' | 'top-left' | 'top-start' | 'top-end';
1476
1626
  export type CalloutTextTransform = 'none' | 'uppercase';
1477
1627
  export interface CalloutBorderConfig {
1478
1628
  enabled?: boolean;
@@ -1535,7 +1685,7 @@ export interface CalloutLabelConfig {
1535
1685
  /** Tab fill. Default: the main colour. */
1536
1686
  background?: ColorValue;
1537
1687
  /** Default `'top-right'`. */
1538
- position?: 'top-right' | 'top-left';
1688
+ position?: CalloutLabelPosition;
1539
1689
  /** Tab height. Default `1.4em` of the label size. */
1540
1690
  height?: Dimension;
1541
1691
  /** Horizontal padding on each side of the text. Default `0.6em`. */
@@ -1630,7 +1780,8 @@ export interface CalloutBodyStyleConfig {
1630
1780
  /** Set the box's paragraphs and list items in small capitals (see
1631
1781
  * `ParagraphStyleConfig.smallCaps`). Default `false`. */
1632
1782
  smallCaps?: boolean;
1633
- textAlign?: 'left' | 'justify';
1783
+ /** `'start'` is `'left'` (see {@link TextAlignKeyword}). */
1784
+ textAlign?: 'left' | 'justify' | 'start';
1634
1785
  /** Hyphenate when justified — and, when `bodyText.hyphenation.ragged` is
1635
1786
  * on, when ragged too. Defaults to the body hyphenation setting. */
1636
1787
  hyphenation?: boolean;
@@ -1833,7 +1984,7 @@ export interface ResolvedCalloutStyleConfig {
1833
1984
  fontWeight: number;
1834
1985
  color: ColorValue;
1835
1986
  background: ColorValue;
1836
- position: 'top-right' | 'top-left';
1987
+ position: CalloutLabelPosition;
1837
1988
  height: Dimension;
1838
1989
  paddingX: Dimension;
1839
1990
  offset: Dimension;
@@ -2072,6 +2223,9 @@ export interface ResolvedHeadingAdvancedDesignConfig {
2072
2223
  slot: ResolvedDesignSlot;
2073
2224
  minHeight?: Dimension;
2074
2225
  }
2226
+ /** Where a heading's generated number stands (see
2227
+ * `HeadingLevelConfig.numberPosition`). */
2228
+ export type HeadingNumberPosition = 'before' | 'replace';
2075
2229
  export interface HeadingLevelConfig {
2076
2230
  level: number;
2077
2231
  fontSize?: Dimension;
@@ -2094,6 +2248,14 @@ export interface HeadingLevelConfig {
2094
2248
  * Chinese sets U+3000 (`' '`) or nothing (`''`). The contents keep
2095
2249
  * their own number column (`toc.levels[].numberGap`). */
2096
2250
  numberSeparator?: string;
2251
+ /** Where the generated number stands. `'before'` (default): before the
2252
+ * title, joined by `numberSeparator`. `'replace'`: the number is the
2253
+ * whole title, and the title written in the source is not printed: a
2254
+ * `# Night` under `الليلة {1:ordinal-feminine}` prints الليلة الثانية,
2255
+ * and its contents row, bookmark and running head read the same. Only
2256
+ * for numbered headings with a template (the level's, or their style's);
2257
+ * any other keeps its title. */
2258
+ numberPosition?: HeadingNumberPosition;
2097
2259
  italic?: boolean;
2098
2260
  /** Tracking after every glyph of the heading (spaces and the numbering
2099
2261
  * prefix included), as CSS `letter-spacing`: positive spreads the
@@ -2152,6 +2314,11 @@ export interface ResolvedHeadingLevelConfig {
2152
2314
  numberingTemplate: string;
2153
2315
  /** The level's own separator, else `' '`. */
2154
2316
  numberSeparator: string;
2317
+ /** `'replace'` when the number stands for the title; absent for the
2318
+ * default `'before'` on a level. A heading style's overrides carry
2319
+ * `'before'` when the style sets it, to keep the title its level would
2320
+ * replace. */
2321
+ numberPosition?: HeadingNumberPosition;
2155
2322
  italic: boolean;
2156
2323
  /** The level's own tracking, else `0`. */
2157
2324
  letterSpacing: Dimension;
@@ -2167,7 +2334,7 @@ export interface HeadingsConfig {
2167
2334
  fontFamily?: string;
2168
2335
  lineHeight?: Dimension;
2169
2336
  color?: ColorValue;
2170
- textAlign?: TextAlign;
2337
+ textAlign?: TextAlignKeyword;
2171
2338
  fontWeight?: number;
2172
2339
  marginTop?: Dimension;
2173
2340
  marginBottom?: Dimension;
@@ -2413,7 +2580,7 @@ export interface ResolvedUnorderedListsConfig {
2413
2580
  /** Undefined => inherit body text color at render time. */
2414
2581
  taskCompletedColor?: ColorValue;
2415
2582
  }
2416
- export type OrderedListNumberFormat = 'arabic' | 'lower-alpha' | 'upper-alpha' | 'lower-roman' | 'upper-roman' | EastAsianNumeralStyle;
2583
+ export type OrderedListNumberFormat = 'arabic' | 'lower-alpha' | 'upper-alpha' | 'lower-roman' | 'upper-roman' | EastAsianNumeralStyle | ArabicNumeralStyle;
2417
2584
  export interface OrderedListLevelConfig {
2418
2585
  level: number;
2419
2586
  /** Number style of this level (see `OrderedListsConfig.numberFormat`). */
@@ -2709,9 +2876,15 @@ export interface FolioLightingConfig {
2709
2876
  * the view, the paper, the binding, the surface it lies on and the light.
2710
2877
  * Canvas, PDF and HTML ignore it. */
2711
2878
  export interface FolioConfig {
2712
- /** How far the view is tilted from straight above, in degrees (0 … 40):
2713
- * the foot of the pages comes closer. Default 22. */
2879
+ /** How far the view is tilted from straight above, in degrees (0 … 70,
2880
+ * the lowest the reader can orbit it): the foot of the pages comes
2881
+ * closer. Default 22. */
2714
2882
  tilt?: number;
2883
+ /** How far the view is turned round the book, in degrees (−180 … 180;
2884
+ * positive brings the eye round to the right of the book): 0 faces the
2885
+ * foot of the pages.
2886
+ * Default 0. */
2887
+ yaw?: number;
2715
2888
  paper?: FolioPaperConfig;
2716
2889
  binding?: FolioBindingConfig;
2717
2890
  surface?: FolioSurfaceConfig;
@@ -2719,6 +2892,7 @@ export interface FolioConfig {
2719
2892
  }
2720
2893
  export interface ResolvedFolioConfig {
2721
2894
  tilt: number;
2895
+ yaw: number;
2722
2896
  paper: {
2723
2897
  type: FolioPaperType;
2724
2898
  grammage: number;
@@ -2974,6 +3148,18 @@ export interface FootnotesConfig {
2974
3148
  /** Size of an inline marker in the text, `em` of the text around it.
2975
3149
  * Default `1em`. No effect on a superscript marker. */
2976
3150
  markerSize?: Dimension;
3151
+ /** How a note's number is written, `{n}` standing for it in its number
3152
+ * format and the document's digits: `'({n})'` sets the parentheses of
3153
+ * Arabic books, «(١)» (#376). It writes the marker in the text and the
3154
+ * number that opens the note alike. Default `'{n}'`; a template
3155
+ * without `{n}` is read as the default. */
3156
+ markerTemplate?: string;
3157
+ /** Where the number that opens the note itself stands: raised
3158
+ * (`'superscript'`) or on the baseline at the note's size
3159
+ * (`'inline'`). Default `'auto'`: as the marker in the text
3160
+ * ({@link markerPosition}). Arabic books raise the marker in the text
3161
+ * and set the note's own «(١)» on the line. */
3162
+ noteNumberPosition?: FootnoteMarkerPosition;
2977
3163
  /** `'chapterEnd'` placement: where the notes stand in the columns that
2978
3164
  * close the chapter. `'foot'` sets them at the foot of the column, the
2979
3165
  * room left over staying between the text and them (as notes at the
@@ -2989,7 +3175,7 @@ export interface FootnotesConfig {
2989
3175
  /** Note text colour. Defaults to the body colour. */
2990
3176
  color?: ColorValue;
2991
3177
  /** Alignment of the note text. Defaults to the body alignment. */
2992
- textAlign?: TextAlign;
3178
+ textAlign?: TextAlignKeyword;
2993
3179
  /** Indent of the turnover lines of a note, so they align past its
2994
3180
  * number. Default `0` (the lines run flush under the number). */
2995
3181
  hangingIndent?: Dimension;
@@ -3010,6 +3196,11 @@ export interface ResolvedFootnotesConfig {
3010
3196
  /** `'auto'` resolved against the number format. */
3011
3197
  markerPosition: 'superscript' | 'inline';
3012
3198
  markerSize: Dimension;
3199
+ /** Set when it is not `'{n}'` (and holds `{n}`). */
3200
+ markerTemplate?: string;
3201
+ /** Set when it is not `'auto'`: the note's own number then stands so,
3202
+ * whatever {@link markerPosition} is. */
3203
+ noteNumberPosition?: 'superscript' | 'inline';
3013
3204
  chapterEndAlign: 'foot' | 'text';
3014
3205
  fontSize: Dimension;
3015
3206
  lineHeight: Dimension;
@@ -3306,9 +3497,10 @@ export type PageRole = 'body' | 'opener' | 'part' | 'blank';
3306
3497
  * on every page the parity filter admits. */
3307
3498
  export type PageRoleFilter = 'all' | PageRole;
3308
3499
  export type HAlign = 'left' | 'center' | 'right';
3309
- /** Alignment of a design text's lines: an {@link HAlign}, or `'justify'`
3500
+ /** Alignment of a design text's lines: an {@link HAlign}, `'justify'`, or
3501
+ * `'start'` / `'end'`, the sides its base direction reads from and to
3310
3502
  * (see `DesignTextElement.align`). */
3311
- export type DesignTextAlign = HAlign | 'justify';
3503
+ export type DesignTextAlign = HAlign | 'justify' | 'start' | 'end';
3312
3504
  export type VAlign = 'top' | 'middle' | 'bottom';
3313
3505
  export type AnchorEdge = 'top-left' | 'top' | 'top-right' | 'left' | 'center' | 'right' | 'bottom-left' | 'bottom' | 'bottom-right' | 'right-of' | 'left-of' | 'below' | 'above' | 'align-top' | 'align-bottom' | 'align-left' | 'align-right';
3314
3506
  export interface ElementAnchor {
@@ -3416,8 +3608,24 @@ export interface DesignTextElement {
3416
3608
  * but the last of each paragraph so it fills the box (the lines beside a
3417
3609
  * drop cap fill the room beside it); with `hyphenate` a word that does not
3418
3610
  * fit is also cut at a syllable to fill the line. A line with no space,
3419
- * and a text that does not wrap, is set flush left. */
3611
+ * and a text that does not wrap, is set flush with the start (left for
3612
+ * left-to-right text). `'start'` and `'end'` follow the text's base
3613
+ * direction (`direction`): the right and the left of a right-to-left
3614
+ * text. `'left'` and `'right'` are the box's own sides; in a design laid
3615
+ * out in the flow of a right-to-left page (an opener, a heading design)
3616
+ * the flow is mirrored, so they are its start and end sides, as in the
3617
+ * body text. */
3420
3618
  align?: DesignTextAlign;
3619
+ /** Base direction of the text (UAX #9 paragraph level): `'auto'` takes
3620
+ * it from the first strong letter of the resolved text, falling back to
3621
+ * the document's. Default: the document's direction
3622
+ * (`PostextConfig.direction`). Right-to-left runs (Arabic, Hebrew) are
3623
+ * ordered and painted right to left whatever the base; the base decides
3624
+ * where neutral characters go, the order of the runs on a line and the
3625
+ * sides `'start'` / `'end'` mean. A text with Arabic letters is never
3626
+ * tracked (`letterSpacing` is ignored), and its words are never cut
3627
+ * while wrapping or truncating. */
3628
+ direction?: 'ltr' | 'rtl' | 'auto';
3421
3629
  /** Vertical alignment within the element's box. */
3422
3630
  verticalAlign?: VAlign;
3423
3631
  /** Leading of the element's lines. A number is a multiplier of
@@ -3643,7 +3851,7 @@ export interface PartsBodyStyleConfig {
3643
3851
  fontSize?: Dimension;
3644
3852
  lineHeight?: Dimension;
3645
3853
  color?: ColorValue;
3646
- textAlign?: TextAlign;
3854
+ textAlign?: TextAlignKeyword;
3647
3855
  /** Bullet colour of unordered lists inside the part. */
3648
3856
  bulletColor?: ColorValue;
3649
3857
  /** Number colour of ordered lists inside the part (numbers are set bold). */
@@ -3830,7 +4038,9 @@ export interface TocEntryStyleConfig {
3830
4038
  indent?: Dimension;
3831
4039
  /** Width of the number column: the title starts after it plus
3832
4040
  * `numberGap`; numbers are right-aligned in it, on the baseline of the
3833
- * title's first line whatever their face and size. Default `2em`. */
4041
+ * title's first line whatever their face and size. A number wider than
4042
+ * this (`الفصل الحادي عشر`, `Chapter 12`) widens the column of its
4043
+ * level in that contents to the widest number. Default `2em`. */
3834
4044
  numberWidth?: Dimension;
3835
4045
  /** Gap between the number column and the title. Default `0.5em`. */
3836
4046
  numberGap?: Dimension;
@@ -4003,9 +4213,11 @@ export interface IndexConfig {
4003
4213
  turnoverIndent?: Dimension;
4004
4214
  /** Space above each main entry. Default `0`. */
4005
4215
  entrySpacing?: Dimension;
4006
- /** Between the term and its first page number. Default `', '`. */
4216
+ /** Between the term and its first page number. Default `', '` (the
4217
+ * Arabic comma `'، '` in an index sorted in a language written in
4218
+ * Arabic script). */
4007
4219
  separator?: string;
4008
- /** Between two page numbers. Default `', '`. */
4220
+ /** Between two page numbers. Default `', '` (`'، '` in Arabic script). */
4009
4221
  locatorSeparator?: string;
4010
4222
  /** Between the ends of a page range. Default `'–'` (en dash). */
4011
4223
  rangeSeparator?: string;
@@ -4023,7 +4235,8 @@ export interface IndexConfig {
4023
4235
  italic?: boolean;
4024
4236
  };
4025
4237
  /** Cross-references. The labels default to `See` / `See also` (Spanish
4026
- * `Véase` / `Véase también`), in italics. */
4238
+ * `Véase` / `Véase también`, Arabic `انظر` / `انظر أيضًا`), in italics
4239
+ * — upright in an Arabic-script index, whose fonts have no italics. */
4027
4240
  see?: {
4028
4241
  label?: string;
4029
4242
  alsoLabel?: string;
@@ -4053,6 +4266,14 @@ export interface IndexConfig {
4053
4266
  * Chinese collation data sets a pinyin or stroke index with no heads. */
4054
4267
  groupBy?: IndexGroupBy;
4055
4268
  groups?: IndexGroupsConfig;
4269
+ /** Sort and group Arabic entries as if a leading article `ال` (`ٱل`)
4270
+ * were not there: البصرة files under ب, between بدر and بغداد, and
4271
+ * prints as written. The article is the definite `al-` only — `ابن`,
4272
+ * `أبو`, `وال`… are kept — and an entry with its own `sort` key is
4273
+ * sorted by that key as given. Default: `true` when the index sorts in
4274
+ * Arabic (`locale`, else the document language, is `ar` or `ar-…`),
4275
+ * else `false`. */
4276
+ ignoreArticle?: boolean;
4056
4277
  }
4057
4278
  /** See {@link IndexConfig.groupBy}. */
4058
4279
  export type IndexGroupBy = 'auto' | 'letter' | 'pinyin' | 'stroke' | 'none';
@@ -4082,6 +4303,7 @@ export interface ResolvedIndexConfig {
4082
4303
  };
4083
4304
  locale?: string;
4084
4305
  groupBy: IndexGroupBy;
4306
+ ignoreArticle: boolean;
4085
4307
  groups: {
4086
4308
  enabled: boolean;
4087
4309
  fontFamily: string;
@@ -4154,6 +4376,34 @@ export interface PostextConfig {
4154
4376
  * bundled hyphenation languages; any other language gets the English
4155
4377
  * ones. Defaults to `'en-us'`. */
4156
4378
  locale?: LocaleTag;
4379
+ /** The base direction of the document's text. `'rtl'` sets paragraphs
4380
+ * right to left (Arabic, Hebrew, Persian, Urdu), `'ltr'` left to right;
4381
+ * `'auto'` (the default) takes it from the script of the document
4382
+ * language ({@link locale}, else the hyphenation locale): right to left
4383
+ * for a language written in Arabic, Hebrew, Syriac, Thaana, N'Ko, Adlam
4384
+ * or another right-to-left script (`directionOf`), else left to right.
4385
+ * A right-to-left document is bound on the right when `page.binding` is
4386
+ * `'auto'`. A block sets its own with `{dir=ltr}` / `{dir=rtl}` (a
4387
+ * heading, a `:::` container), a run of text with `:ltr[…]` /
4388
+ * `:rtl[…]`; inside a paragraph the order of mixed text follows the
4389
+ * Unicode Bidirectional Algorithm (`bidi.ts`). Any other value counts
4390
+ * as `'auto'` and is reported (`unknownConfigValue`). */
4391
+ direction?: DocumentDirection;
4392
+ /** The digits of every number the engine writes — page numbers (and the
4393
+ * page labels of the contents, the index and page references), ordered
4394
+ * list and footnote numbers, heading, chapter and resource counters, the
4395
+ * `{h1}` and `{n}` of a figure number, `{totalPages}`,
4396
+ * `{numberDecimal}`: `'latn'` 0–9, `'arab'` ٠–٩, `'arabext'` ۰–۹. Only
4397
+ * numbers in the decimal format change (`decimal`, the lists'
4398
+ * `arabic`, or no format at all); a format the author names —
4399
+ * `lower-roman`, `arabic-indic`, `persian` — prints as named, and the
4400
+ * author's own text is never rewritten. Default `'auto'`: the digits of
4401
+ * {@link locale} (`defaultNumeralsFor`) — `'arab'` for Arabic (`ar`,
4402
+ * `ar-EG`, `ar-SA`…) but `'latn'` in the Maghreb (`ar-MA`, `ar-DZ`,
4403
+ * `ar-TN`, `ar-LY`, `ar-MR`, `ar-EH`), `'arabext'` for Persian, Pashto
4404
+ * and the Urdu of India, `'latn'` for every other language; a tag that
4405
+ * names its digits (`ar-MA-u-nu-arab`) has them. */
4406
+ numerals?: NumeralsSetting;
4157
4407
  debug?: DebugConfig;
4158
4408
  htmlViewer?: HtmlViewerConfig;
4159
4409
  /** The 3D book viewer (`postext-folio`): paper, binding, surface, light. */