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
@@ -0,0 +1,293 @@
1
+ /**
2
+ * Right-to-left lines (UAX #9 on the measurer's output, #369).
3
+ *
4
+ * The line breakers work on the logical text and know nothing of
5
+ * direction: a line is a run of the paragraph, and its `segments` stay in
6
+ * logical order (copied text, links, source maps, the hyphen at the end of
7
+ * a line and every other engine rule read them as written). Once a
8
+ * paragraph is broken, {@link applyLineDirections} resolves its embedding
9
+ * levels once (`resolveParagraph`, with the inline `:rtl[…]` / `:ltr[…]`
10
+ * isolates) and, line by line, applies rule L1 to the line's characters,
11
+ * cuts each text segment where its level changes, marks the right-to-left
12
+ * ones (`VDTLineSegment.rtl`, and `level` past 1) and works out the order
13
+ * the renderers advance through the segments in (`VDTLine.order`, rule L2
14
+ * on the segments' levels): the visual order, left to right, whatever the
15
+ * frame; the build turns it around on a mirrored page (#370).
16
+ *
17
+ * A cut at a level change never falls inside a word of a joining script:
18
+ * Arabic letters next to each other have one level, and a cut between a
19
+ * letter and a digit or a Latin letter leaves both sides measured as they
20
+ * are painted. The pieces of a segment share its width in proportion to
21
+ * their own widths, so a line keeps the width it was broken with and no
22
+ * break changes.
23
+ *
24
+ * Only a paragraph that needs it pays for it: one set right to left, or
25
+ * one holding a right-to-left letter or control (`needsBidi`). Every other
26
+ * line is left exactly as it was, with none of these fields.
27
+ */
28
+ import { lineLevels, visualOrder } from '../bidi';
29
+ import { insideJoiningWord } from './joining';
30
+ import { lineMeasure } from './types';
31
+ let measureDirection = 'ltr';
32
+ /** Set the base direction a paragraph is measured with when nothing sets
33
+ * its own (`MeasureBlockOptions.direction`): the document's
34
+ * (`resolvedDirection`). The build does, and puts back what it found when
35
+ * it is done; left to right outside a build. */
36
+ export function setMeasureDirection(direction) {
37
+ measureDirection = direction === 'rtl' ? 'rtl' : 'ltr';
38
+ }
39
+ /** See {@link setMeasureDirection}. */
40
+ export function getMeasureDirection() {
41
+ return measureDirection;
42
+ }
43
+ /** Source characters a line may leave out of its segments: the space a
44
+ * break consumed, a soft hyphen or a zero-width space, the middle dot of a
45
+ * Catalan `l·l` broken as `l-` | `l`. */
46
+ const UNPRINTED_RE = /[\s­​·]/;
47
+ /** The paragraph-text index of each character of each segment of a line,
48
+ * -1 for a character the line added (the hyphen of a break, a repeated
49
+ * hyphen, a book title's brackets), read from `from` on; and where the
50
+ * next line starts reading. */
51
+ function alignLine(segments, text, from) {
52
+ let p = from;
53
+ const at = [];
54
+ for (const seg of segments) {
55
+ const idx = new Int32Array(seg.text.length).fill(-1);
56
+ at.push(idx);
57
+ if (seg.inserted)
58
+ continue;
59
+ for (let k = 0; k < seg.text.length; k++) {
60
+ const c = seg.text[k];
61
+ let q = p;
62
+ while (q < text.length && !sameChar(c, text[q]) && UNPRINTED_RE.test(text[q]))
63
+ q++;
64
+ // A character small capitals print as their capital is the same one.
65
+ if (q < text.length && sameChar(c, text[q])) {
66
+ idx[k] = q;
67
+ p = q + 1;
68
+ }
69
+ }
70
+ }
71
+ return { at, next: p };
72
+ }
73
+ function sameChar(printed, source) {
74
+ return printed === source || printed === source.toUpperCase();
75
+ }
76
+ /** Whether a segment is set as a whole (a formula, a swatch, a chip, a
77
+ * reference's label, a note marker): it is never cut, and paints in the
78
+ * direction of its lowest level (a label `شكل ١-٢` right to left, which
79
+ * the renderer's shaper orders inside). */
80
+ function isAtomic(seg) {
81
+ return (seg.kind !== 'text' && seg.kind !== 'space') || seg.refResourceId !== undefined || seg.footnoteId !== undefined
82
+ || seg.chip !== undefined || seg.stacked === true || seg.labelTab === true || seg.mathRender !== undefined;
83
+ }
84
+ /** The runs of a word set in several styles (`runs`) that fall in
85
+ * `[from, to)` of its text. */
86
+ function sliceRuns(runs, from, to) {
87
+ const out = [];
88
+ let at = 0;
89
+ for (const run of runs) {
90
+ const a = Math.max(from, at);
91
+ const b = Math.min(to, at + run.text.length);
92
+ if (a < b)
93
+ out.push({ ...run, text: run.text.slice(a - at, b - at) });
94
+ at += run.text.length;
95
+ }
96
+ return out.length > 1 ? out : undefined;
97
+ }
98
+ /**
99
+ * Resolve the directions of a paragraph's lines (see the module comment):
100
+ * `par` is the paragraph's levels (`resolveParagraph` on the text the lines
101
+ * were cut from, the spans' texts joined, with its base direction and its
102
+ * inline `:rtl[…]` / `:ltr[…]` isolates); `widthOf` measures a piece of a
103
+ * segment in that segment's font, to share its width. The lines are
104
+ * changed in place.
105
+ */
106
+ export function applyLineDirections(lines, par, widthOf) {
107
+ const text = par.text;
108
+ let from = 0;
109
+ for (const line of lines) {
110
+ const segments = line.segments;
111
+ if (!segments || segments.length === 0)
112
+ continue;
113
+ const { at, next } = alignLine(segments, text, from);
114
+ from = next;
115
+ let start = Infinity;
116
+ let end = -1;
117
+ for (const idx of at) {
118
+ for (const q of idx) {
119
+ if (q < 0)
120
+ continue;
121
+ if (q < start)
122
+ start = q;
123
+ if (q > end)
124
+ end = q;
125
+ }
126
+ }
127
+ if (end < 0)
128
+ continue;
129
+ const lv = lineLevels(par, start, end + 1);
130
+ const levelAt = (q) => lv[q - start];
131
+ const out = [];
132
+ const levels = [];
133
+ let previous = par.paragraphLevel;
134
+ segments.forEach((seg, s) => {
135
+ const idx = at[s];
136
+ // Each character's level; one the line added takes its neighbour's.
137
+ const own = [];
138
+ for (let k = 0; k < idx.length; k++)
139
+ own.push(idx[k] >= 0 ? levelAt(idx[k]) : -1);
140
+ for (let k = 0; k < own.length; k++)
141
+ if (own[k] < 0 && k > 0)
142
+ own[k] = own[k - 1];
143
+ for (let k = own.length - 1; k >= 0; k--)
144
+ if (own[k] < 0 && k + 1 < own.length)
145
+ own[k] = own[k + 1];
146
+ if (own.length === 0 || own[0] < 0)
147
+ own.fill(previous);
148
+ previous = own[own.length - 1] ?? previous;
149
+ // Where the segment changes level: never inside a joining word.
150
+ const cuts = [];
151
+ if (seg.kind === 'text' && !isAtomic(seg)) {
152
+ for (let k = 1; k < own.length; k++) {
153
+ if (own[k] === own[k - 1] || insideJoiningWord(seg.text, k))
154
+ continue;
155
+ const c = seg.text.charCodeAt(k);
156
+ if (c >= 0xDC00 && c <= 0xDFFF)
157
+ continue;
158
+ cuts.push(k);
159
+ }
160
+ }
161
+ if (cuts.length === 0) {
162
+ out.push(seg);
163
+ levels.push(own.length > 0 ? Math.min(...own) : previous);
164
+ return;
165
+ }
166
+ const bounds = [0, ...cuts, seg.text.length];
167
+ const pieces = [];
168
+ for (let b = 0; b + 1 < bounds.length; b++) {
169
+ const a = bounds[b];
170
+ const z = bounds[b + 1];
171
+ const piece = seg.text.slice(a, z);
172
+ pieces.push({ text: piece, from: a, to: z, level: Math.min(...own.slice(a, z)), width: widthOf(seg, piece) });
173
+ }
174
+ // The pieces share the segment's width in proportion to their own,
175
+ // so the line keeps the width it was broken with.
176
+ const total = pieces.reduce((sum, p) => sum + p.width, 0);
177
+ for (const p of pieces) {
178
+ const width = total > 0 ? seg.width * (p.width / total) : seg.width * ((p.to - p.from) / seg.text.length);
179
+ const piece = { ...seg, text: p.text, width };
180
+ if (seg.runs) {
181
+ const runs = sliceRuns(seg.runs, p.from, p.to);
182
+ if (runs)
183
+ piece.runs = runs;
184
+ else
185
+ delete piece.runs;
186
+ }
187
+ out.push(piece);
188
+ levels.push(p.level);
189
+ }
190
+ });
191
+ // A line with nothing right to left on it (an English line of an
192
+ // Arabic paragraph, all at level 2) paints as it always did.
193
+ if (!levels.some((l) => (l & 1) === 1))
194
+ continue;
195
+ out.forEach((seg, i) => {
196
+ const level = levels[i];
197
+ if (level & 1)
198
+ seg.rtl = true;
199
+ if (level > 1)
200
+ seg.level = level;
201
+ });
202
+ line.segments = out;
203
+ const order = visualOrder(levels);
204
+ if (order.some((v, i) => v !== i))
205
+ line.order = order;
206
+ }
207
+ }
208
+ /**
209
+ * The lines of a paragraph whose direction opposes its frame's: an Arabic
210
+ * quotation in an English book, or an English one in an Arabic book (whose
211
+ * pages are mirrored, #370, so that the flow's right is the sheet's left).
212
+ * Its start side is the frame's right. The breaker set each line's indent
213
+ * on the left (`bbox.x`); the line now fills the span from the block's left
214
+ * edge to its right edge less that indent (`VDTLine.measure`), so a
215
+ * first-line or hanging indent falls on the right, and its line box starts
216
+ * at the span's left edge. Renderers align the line in that span from its
217
+ * start side: a ragged line, or the last line of a justified paragraph,
218
+ * ends flush right (see `VDTLine.measure`). `maxWidthPx` and `restWidths`
219
+ * are the measures the lines were broken at, from the block's left edge.
220
+ */
221
+ export function mirrorLineSpans(lines, maxWidthPx, restWidths) {
222
+ lines.forEach((line, i) => {
223
+ const width = Math.max(0, lineMeasure(maxWidthPx, restWidths, i) - line.bbox.x);
224
+ line.measure = { x: 0, width };
225
+ line.bbox.x = 0;
226
+ });
227
+ }
228
+ /** Move a line along x by `dx`, its {@link VDTLine.measure} with it. The
229
+ * measure is replaced, never changed in place: a cached measurement may
230
+ * share it. */
231
+ export function shiftLineX(line, dx) {
232
+ line.bbox.x += dx;
233
+ if (line.measure)
234
+ line.measure = { x: line.measure.x + dx, width: line.measure.width };
235
+ }
236
+ /**
237
+ * The stretches of a paragraph's spans in a language their isolate names
238
+ * (`InlineSpan.direction.lang`, the innermost isolate that names one), as
239
+ * ranges of the joined text; empty when none does.
240
+ */
241
+ export function spanLanguages(spans) {
242
+ const out = [];
243
+ let at = 0;
244
+ for (const span of spans) {
245
+ let lang;
246
+ for (let d = span.direction; d && lang === undefined; d = d.outer)
247
+ lang = d.lang;
248
+ const end = at + span.text.length;
249
+ if (lang !== undefined && end > at) {
250
+ const last = out[out.length - 1];
251
+ if (last && last.end === at && last.lang === lang)
252
+ last.end = end;
253
+ else
254
+ out.push({ start: at, end, lang });
255
+ }
256
+ at = end;
257
+ }
258
+ return out;
259
+ }
260
+ /**
261
+ * Stamps `VDTLineSegment.lang` on the segments of a paragraph's lines whose
262
+ * text lies in one of `ranges` (#379, see {@link spanLanguages}): a segment
263
+ * takes the language of its first character read from the paragraph text
264
+ * (`text`). Segments of a cut line are replaced, never changed in place.
265
+ */
266
+ export function applySegmentLanguages(lines, text, ranges) {
267
+ if (ranges.length === 0)
268
+ return;
269
+ let from = 0;
270
+ for (const line of lines) {
271
+ const segments = line.segments;
272
+ if (!segments || segments.length === 0)
273
+ continue;
274
+ const { at, next } = alignLine(segments, text, from);
275
+ from = next;
276
+ let changed = false;
277
+ const out = segments.map((seg, s) => {
278
+ if (seg.kind === 'space')
279
+ return seg;
280
+ const first = at[s].find((q) => q >= 0);
281
+ if (first === undefined)
282
+ return seg;
283
+ const range = ranges.find((r) => first >= r.start && first < r.end);
284
+ if (!range || seg.lang === range.lang)
285
+ return seg;
286
+ changed = true;
287
+ return { ...seg, lang: range.lang };
288
+ });
289
+ if (changed)
290
+ line.segments = out;
291
+ }
292
+ }
293
+ //# sourceMappingURL=bidiLines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bidiLines.js","sourceRoot":"","sources":["../../src/measure/bidiLines.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/measure/cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AA4GpF,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,mBAAmB,GAAG,SAAS,EACxC,KAAK,EAAE,gBAAgB,GACtB,aAAa,CAOf;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,UAAU,EAAE,EACnB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,mBAAmB,GAAG,SAAS,EACxC,KAAK,EAAE,gBAAgB,GACtB,aAAa,CAOf"}
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/measure/cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAiHpF,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,mBAAmB,GAAG,SAAS,EACxC,KAAK,EAAE,gBAAgB,GACtB,aAAa,CAOf;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,UAAU,EAAE,EACnB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,mBAAmB,GAAG,SAAS,EACxC,KAAK,EAAE,gBAAgB,GACtB,aAAa,CAOf"}
@@ -5,11 +5,14 @@ import { hasCJK } from './cjk';
5
5
  import { getCjkLineBreak } from './cjkClasses';
6
6
  import { getMeasureRegion, getMeasureUprightDigits, getMeasureWritingMode } from './vertical';
7
7
  import { cjkCompositionKey, getCjkComposition } from './cjkPunctuation';
8
+ import { getMeasureDirection } from './bidiLines';
8
9
  /** Options that change a block's lines, joined into its cache key. The
9
10
  * active hyphenation dictionary is one: soft hyphens (and the syllables an
10
- * overlong word is divided at) depend on it. */
11
+ * overlong word is divided at) depend on it. So is a right-to-left base
12
+ * direction (`MeasureBlockOptions.direction`, else the build's), which
13
+ * joins the key only when set, so every left-to-right key is unchanged. */
11
14
  function optionsKey(options) {
12
- return `${options?.textAlign ?? ''}\x00${options?.hyphenate ?? ''}\x00${options?.firstLineIndentPx ?? ''}\x00${options?.hangingIndent ?? ''}\x00${options?.optimal ?? ''}\x00${options?.maxStretchRatio ?? ''}\x00${options?.minShrinkRatio ?? ''}\x00${options?.runtPenalty ?? ''}\x00${options?.runtMinCharacters ?? ''}\x00${options?.looseness ?? ''}\x00${options?.letterSpacingPx ?? ''}\x00${options?.hyphenationZonePx ?? ''}\x00${getHyphenationLocale()}${options?.justifyTrackingPx ? `\x00${options.justifyTrackingPx}` : ''}${options?.runtGraded ? '\x00rg' : ''}${options?.labelColumnPx !== undefined ? `\x00lc${options.labelColumnPx}` : ''}${options?.avoidHyphenAtLines?.length ? `\x00ah${options.avoidHyphenAtLines.join(',')}` : ''}`;
15
+ return `${(options?.direction ?? getMeasureDirection()) === 'rtl' ? 'rtl\x00' : ''}${options?.textAlign ?? ''}\x00${options?.hyphenate ?? ''}\x00${options?.firstLineIndentPx ?? ''}\x00${options?.hangingIndent ?? ''}\x00${options?.optimal ?? ''}\x00${options?.maxStretchRatio ?? ''}\x00${options?.minShrinkRatio ?? ''}\x00${options?.runtPenalty ?? ''}\x00${options?.runtMinCharacters ?? ''}\x00${options?.looseness ?? ''}\x00${options?.letterSpacingPx ?? ''}\x00${options?.hyphenationZonePx ?? ''}\x00${getHyphenationLocale()}${options?.justifyTrackingPx ? `\x00${options.justifyTrackingPx}` : ''}${options?.runtGraded ? '\x00rg' : ''}${options?.labelColumnPx !== undefined ? `\x00lc${options.labelColumnPx}` : ''}${options?.avoidHyphenAtLines?.length ? `\x00ah${options.avoidHyphenAtLines.join(',')}` : ''}${options?.kashida ? `\x00k${options.kashida.patterns}:${options.kashida.perWord}:${options.kashida.maxLengthPx}` : ''}`;
13
16
  }
14
17
  /** The CJK line-break level and composition (punctuation widths, hanging,
15
18
  * the Han–Latin space), joined to the key of a text that holds CJK only,
@@ -43,10 +46,11 @@ function mathCacheKey(span) {
43
46
  return `|m:${span.math.tex}${render ? `|${render.widthPx}x${render.heightPx}` : ''}`;
44
47
  }
45
48
  /** The Chinese annotations of a span (#193–#195): marks set on the same
46
- * text change its segments, a reading or a note its measure. Empty for a
49
+ * text change its segments, a reading or a note its measure. A
50
+ * directional isolate (#367) changes the order of its line. Empty for a
47
51
  * span without any, so its key is unchanged. */
48
52
  function annotationCacheKey(s) {
49
- if (!s.emphasisMark && s.properName === undefined && !s.bookTitle && !s.ruby && !s.warichu && !s.inserted)
53
+ if (!s.emphasisMark && s.properName === undefined && !s.bookTitle && !s.ruby && !s.warichu && !s.inserted && !s.direction)
50
54
  return '';
51
55
  let key = '';
52
56
  if (s.emphasisMark)
@@ -61,6 +65,8 @@ function annotationCacheKey(s) {
61
65
  key += `|wc:${s.warichu.id}|${s.warichu.fontString ?? ''}|${s.warichu.open ?? ''}|${s.warichu.close ?? ''}|${s.warichu.color ?? ''}`;
62
66
  if (s.inserted)
63
67
  key += '|ins';
68
+ for (let d = s.direction; d; d = d.outer)
69
+ key += `|dir:${d.dir}${d.id}${d.lang ? `:${d.lang}` : ''}`;
64
70
  return key;
65
71
  }
66
72
  function buildRichCacheKey(spans, fonts, maxWidthPx, lineHeightPx, options) {
@@ -1 +1 @@
1
- {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/measure/cache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/measure/cache.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAC9F,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD;;;;4EAI4E;AAC5E,SAAS,UAAU,CAAC,OAAwC;IAC1D,OAAO,GAAG,CAAC,OAAO,EAAE,SAAS,IAAI,mBAAmB,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,SAAS,IAAI,EAAE,OAAO,OAAO,EAAE,SAAS,IAAI,EAAE,OAAO,OAAO,EAAE,iBAAiB,IAAI,EAAE,OAAO,OAAO,EAAE,aAAa,IAAI,EAAE,OAAO,OAAO,EAAE,OAAO,IAAI,EAAE,OAAO,OAAO,EAAE,eAAe,IAAI,EAAE,OAAO,OAAO,EAAE,cAAc,IAAI,EAAE,OAAO,OAAO,EAAE,WAAW,IAAI,EAAE,OAAO,OAAO,EAAE,iBAAiB,IAAI,EAAE,OAAO,OAAO,EAAE,SAAS,IAAI,EAAE,OAAO,OAAO,EAAE,eAAe,IAAI,EAAE,OAAO,OAAO,EAAE,iBAAiB,IAAI,EAAE,OAAO,oBAAoB,EAAE,GAAG,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,OAAO,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACj6B,CAAC;AAED;;;;6DAI6D;AAC7D,SAAS,MAAM,CAAC,IAAY,EAAE,OAAwC;IACpE,MAAM,QAAQ,GAAG,CAAC,OAAO,EAAE,WAAW,IAAI,qBAAqB,EAAE,CAAC,KAAK,aAAa,CAAC;IACrF,wEAAwE;IACxE,4CAA4C;IAC5C,MAAM,MAAM,GAAG,uBAAuB,EAAE,CAAC;IACzC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,gBAAgB,EAAE,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACzF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACrD,OAAO,WAAW,OAAO,EAAE,YAAY,IAAI,eAAe,EAAE,IAAI,iBAAiB,CAAC,OAAO,EAAE,cAAc,IAAI,iBAAiB,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1I,CAAC;AAED,SAAS,kBAAkB,CACzB,IAAY,EACZ,IAAY,EACZ,UAAkB,EAClB,YAAoB,EACpB,OAAwC;IAExC,OAAO,GAAG,IAAI,OAAO,IAAI,OAAO,UAAU,OAAO,YAAY,OAAO,UAAU,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;AACpH,CAAC;AAED;oDACoD;AACpD,SAAS,YAAY,CAAC,IAAqC;IACzD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9H,OAAO,SAAS,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACtE,CAAC;AAED;;4EAE4E;AAC5E,SAAS,YAAY,CAAC,IAAgB;IACpC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;IAC/B,OAAO,MAAM,IAAI,CAAC,IAAK,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACxF,CAAC;AAED;;;iDAGiD;AACjD,SAAS,kBAAkB,CAAC,CAAa;IACvC,IAAI,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,SAAS;QAAE,OAAO,EAAE,CAAC;IACrI,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,CAAC,CAAC,YAAY;QAAE,GAAG,IAAI,OAAO,CAAC,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE,IAAI,CAAC,CAAC,YAAY,CAAC,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC,YAAY,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;IAC7H,IAAI,CAAC,CAAC,UAAU,KAAK,SAAS;QAAE,GAAG,IAAI,OAAO,CAAC,CAAC,UAAU,EAAE,CAAC;IAC7D,IAAI,CAAC,CAAC,SAAS;QAAE,GAAG,IAAI,OAAO,CAAC,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACrE,IAAI,CAAC,CAAC,IAAI;QAAE,GAAG,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;IAC3J,IAAI,CAAC,CAAC,OAAO;QAAE,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;IACpJ,IAAI,CAAC,CAAC,QAAQ;QAAE,GAAG,IAAI,MAAM,CAAC;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK;QAAE,GAAG,IAAI,QAAQ,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACrG,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,iBAAiB,CACxB,KAAmB,EACnB,KAAuC,EACvC,UAAkB,EAClB,YAAoB,EACpB,OAAwC;IAExC,yEAAyE;IACzE,0EAA0E;IAC1E,mDAAmD;IACnD,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,EAAE,UAAU,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtoB,OAAO,QAAQ,OAAO,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,UAAU,OAAO,YAAY,OAAO,UAAU,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;AAC7M,CAAC;AAED;;2CAE2C;AAC3C,SAAS,UAAU,CAAC,KAAmB,EAAE,OAAe;IACtD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IACnG,OAAO,UAAU,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AAC7G,CAAC;AAED;;;cAGc;AACd,SAAS,kBAAkB,CAAC,KAAoB;IAC9C,OAAO;QACL,GAAG,KAAK;QACR,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7B,GAAG,CAAC;YACJ,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE;YACnB,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;SACrE,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,IAAY,EACZ,IAAY,EACZ,UAAkB,EAClB,YAAoB,EACpB,OAAwC,EACxC,KAAuB;IAEvB,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAC9E,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,MAAM;QAAE,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAC3E,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC/B,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,KAAmB,EACnB,UAAkB,EAClB,QAAgB,EAChB,UAAkB,EAClB,cAAsB,EACtB,UAAkB,EAClB,YAAoB,EACpB,OAAwC,EACxC,KAAuB;IAEvB,MAAM,GAAG,GAAG,iBAAiB,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAC5H,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,MAAM;QAAE,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAC5H,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC/B,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Words of a joining script (Arabic, Syriac, N'Ko, Mongolian, Adlam…) stay
3
+ * whole: their letters connect, and the shape of each letter depends on
4
+ * its neighbours. A piece of such a word measured alone has the wrong
5
+ * width (in Amiri `مكت` alone is wider than the whole `مكتبة`), and painted
6
+ * alone it shows the wrong letter forms. So the measurer never hyphenates
7
+ * one, never cuts one between letters, never measures a prefix of one, and
8
+ * never spreads letter-spacing on one (tracking breaks the joins on every
9
+ * renderer, as CSS `letter-spacing` does). See engine-ltr-audit §1.3–1.4
10
+ * and §2.2.
11
+ *
12
+ * The predicates here are the measurer's gate: they cost one comparison
13
+ * per UTF-16 unit for text with nothing past U+05FF (every Latin, Greek,
14
+ * Cyrillic, Hebrew or CJK word), which never holds a joining letter.
15
+ */
16
+ /** Whether `text` holds a letter of a joining script (dual-, right- or
17
+ * left-joining, see `hasJoiningScript`): a word to keep whole and set
18
+ * without tracking. */
19
+ export declare function joiningScriptIn(text: string): boolean;
20
+ /**
21
+ * Whether a cut before `text[idx]` falls inside a word of a joining script:
22
+ * between two of its letters (whether or not those two connect: an Arabic
23
+ * word is not divided at a line end either way), or before a mark, which
24
+ * stays with its letter. A cut between an Arabic word and a Latin one or a
25
+ * digit run glued to it (`ABCكتاب`, `و2020`) is not inside one.
26
+ */
27
+ export declare function insideJoiningWord(text: string, idx: number): boolean;
28
+ /**
29
+ * Whether most of a paragraph's letters belong to a joining script: an
30
+ * Arabic paragraph, which no tracking lever may reach (column balancing's
31
+ * paragraph tracking, the runt fix's negative tracking). Those levers then
32
+ * fall through to the others. A Latin paragraph quoting an Arabic word
33
+ * keeps them: the quoted word alone is set without tracking.
34
+ */
35
+ export declare function mostlyJoiningScript(text: string): boolean;
36
+ /** The tracking (letter-spacing) a word of `text` takes, `letterSpacingPx`
37
+ * after each grapheme: none on a word of a joining script. */
38
+ export declare function wordLetterSpacing(text: string, letterSpacingPx: number): number;
39
+ //# sourceMappingURL=joining.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"joining.d.ts","sourceRoot":"","sources":["../../src/measure/joining.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAOH;;wBAEwB;AACxB,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKrD;AASD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAcpE;AAID;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAWzD;AAED;+DAC+D;AAC/D,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM,CAE/E"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Words of a joining script (Arabic, Syriac, N'Ko, Mongolian, Adlam…) stay
3
+ * whole: their letters connect, and the shape of each letter depends on
4
+ * its neighbours. A piece of such a word measured alone has the wrong
5
+ * width (in Amiri `مكت` alone is wider than the whole `مكتبة`), and painted
6
+ * alone it shows the wrong letter forms. So the measurer never hyphenates
7
+ * one, never cuts one between letters, never measures a prefix of one, and
8
+ * never spreads letter-spacing on one (tracking breaks the joins on every
9
+ * renderer, as CSS `letter-spacing` does). See engine-ltr-audit §1.3–1.4
10
+ * and §2.2.
11
+ *
12
+ * The predicates here are the measurer's gate: they cost one comparison
13
+ * per UTF-16 unit for text with nothing past U+05FF (every Latin, Greek,
14
+ * Cyrillic, Hebrew or CJK word), which never holds a joining letter.
15
+ */
16
+ import { hasJoiningScript, joiningTypeOf } from '../bidi';
17
+ /** The first code unit a joining letter can have: the Arabic block. */
18
+ const FIRST_JOINING_UNIT = 0x0600;
19
+ /** Whether `text` holds a letter of a joining script (dual-, right- or
20
+ * left-joining, see `hasJoiningScript`): a word to keep whole and set
21
+ * without tracking. */
22
+ export function joiningScriptIn(text) {
23
+ for (let i = 0; i < text.length; i++) {
24
+ if (text.charCodeAt(i) >= FIRST_JOINING_UNIT)
25
+ return hasJoiningScript(text);
26
+ }
27
+ return false;
28
+ }
29
+ /** Whether the code point is a letter of a joining script, or a
30
+ * join-causing character (tatweel, ZWJ) or a mark riding on one. */
31
+ function joinsInWord(cp) {
32
+ const t = joiningTypeOf(cp);
33
+ return t === 'D' || t === 'R' || t === 'L' || t === 'C' || t === 'T';
34
+ }
35
+ /**
36
+ * Whether a cut before `text[idx]` falls inside a word of a joining script:
37
+ * between two of its letters (whether or not those two connect: an Arabic
38
+ * word is not divided at a line end either way), or before a mark, which
39
+ * stays with its letter. A cut between an Arabic word and a Latin one or a
40
+ * digit run glued to it (`ABCكتاب`, `و2020`) is not inside one.
41
+ */
42
+ export function insideJoiningWord(text, idx) {
43
+ if (idx <= 0 || idx >= text.length)
44
+ return false;
45
+ const next = text.codePointAt(idx);
46
+ // A surrogate pair is never cut.
47
+ if (next >= 0xDC00 && next <= 0xDFFF)
48
+ return true;
49
+ if (next < FIRST_JOINING_UNIT && text.charCodeAt(idx - 1) < FIRST_JOINING_UNIT)
50
+ return false;
51
+ const nextType = joiningTypeOf(next);
52
+ if (nextType === 'T')
53
+ return joiningScriptIn(text.slice(0, idx));
54
+ let k = idx - 1;
55
+ if (k > 0 && text.charCodeAt(k) >= 0xDC00 && text.charCodeAt(k) <= 0xDFFF)
56
+ k--;
57
+ // The letter before, looking past the marks on it.
58
+ while (k > 0 && joiningTypeOf(text.codePointAt(k)) === 'T')
59
+ k--;
60
+ const prev = text.codePointAt(k);
61
+ return joinsInWord(prev) && joiningTypeOf(prev) !== 'T' && joinsInWord(next);
62
+ }
63
+ const LETTER_RE = /\p{L}/u;
64
+ /**
65
+ * Whether most of a paragraph's letters belong to a joining script: an
66
+ * Arabic paragraph, which no tracking lever may reach (column balancing's
67
+ * paragraph tracking, the runt fix's negative tracking). Those levers then
68
+ * fall through to the others. A Latin paragraph quoting an Arabic word
69
+ * keeps them: the quoted word alone is set without tracking.
70
+ */
71
+ export function mostlyJoiningScript(text) {
72
+ if (!joiningScriptIn(text))
73
+ return false;
74
+ let letters = 0;
75
+ let joining = 0;
76
+ for (const ch of text) {
77
+ if (!LETTER_RE.test(ch))
78
+ continue;
79
+ letters++;
80
+ const t = joiningTypeOf(ch.codePointAt(0));
81
+ if (t === 'D' || t === 'R' || t === 'L')
82
+ joining++;
83
+ }
84
+ return joining * 2 > letters;
85
+ }
86
+ /** The tracking (letter-spacing) a word of `text` takes, `letterSpacingPx`
87
+ * after each grapheme: none on a word of a joining script. */
88
+ export function wordLetterSpacing(text, letterSpacingPx) {
89
+ return letterSpacingPx !== 0 && joiningScriptIn(text) ? 0 : letterSpacingPx;
90
+ }
91
+ //# sourceMappingURL=joining.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"joining.js","sourceRoot":"","sources":["../../src/measure/joining.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /** Joining_Group long names, indexed by the values of
2
+ * {@link JOINING_GROUP_RANGES}. */
3
+ export declare const JOINING_GROUP_NAMES: readonly string[];
4
+ /** Joining_Group of the Arabic blocks (U+0600–08FF): [first, last, group]
5
+ * for every range with a group, merged, in code point order. */
6
+ export declare const JOINING_GROUP_RANGES: readonly number[];
7
+ //# sourceMappingURL=joiningGroups.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"joiningGroups.d.ts","sourceRoot":"","sources":["../../src/measure/joiningGroups.ts"],"names":[],"mappings":"AAIA;oCACoC;AACpC,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EA4EhD,CAAC;AAEF;iEACiE;AACjE,eAAO,MAAM,oBAAoB,EAAE,SAAS,MAAM,EAwBjD,CAAC"}