postext 1.14.1 → 1.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (494) 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/anchors.test.js +17 -0
  84. package/dist/__tests__/parse/anchors.test.js.map +1 -1
  85. package/dist/__tests__/parse/containers.test.js +1 -1
  86. package/dist/__tests__/parse/containers.test.js.map +1 -1
  87. package/dist/__tests__/rtl/designText.test.d.ts +2 -0
  88. package/dist/__tests__/rtl/designText.test.d.ts.map +1 -0
  89. package/dist/__tests__/rtl/designText.test.js +301 -0
  90. package/dist/__tests__/rtl/designText.test.js.map +1 -0
  91. package/dist/__tests__/rtl/designTextPaint.test.d.ts +2 -0
  92. package/dist/__tests__/rtl/designTextPaint.test.d.ts.map +1 -0
  93. package/dist/__tests__/rtl/designTextPaint.test.js +140 -0
  94. package/dist/__tests__/rtl/designTextPaint.test.js.map +1 -0
  95. package/dist/__tests__/rtl/htmlRtl.test.d.ts +2 -0
  96. package/dist/__tests__/rtl/htmlRtl.test.d.ts.map +1 -0
  97. package/dist/__tests__/rtl/htmlRtl.test.js +175 -0
  98. package/dist/__tests__/rtl/htmlRtl.test.js.map +1 -0
  99. package/dist/__tests__/rtl/mirroredFrame.test.d.ts +2 -0
  100. package/dist/__tests__/rtl/mirroredFrame.test.d.ts.map +1 -0
  101. package/dist/__tests__/rtl/mirroredFrame.test.js +313 -0
  102. package/dist/__tests__/rtl/mirroredFrame.test.js.map +1 -0
  103. package/dist/__tests__/rtl/mirroredPaint.test.d.ts +2 -0
  104. package/dist/__tests__/rtl/mirroredPaint.test.d.ts.map +1 -0
  105. package/dist/__tests__/rtl/mirroredPaint.test.js +116 -0
  106. package/dist/__tests__/rtl/mirroredPaint.test.js.map +1 -0
  107. package/dist/__tests__/rtl/oppositeBlocks.test.d.ts +2 -0
  108. package/dist/__tests__/rtl/oppositeBlocks.test.d.ts.map +1 -0
  109. package/dist/__tests__/rtl/oppositeBlocks.test.js +273 -0
  110. package/dist/__tests__/rtl/oppositeBlocks.test.js.map +1 -0
  111. package/dist/__tests__/rtl/segmentLang.test.d.ts +2 -0
  112. package/dist/__tests__/rtl/segmentLang.test.d.ts.map +1 -0
  113. package/dist/__tests__/rtl/segmentLang.test.js +54 -0
  114. package/dist/__tests__/rtl/segmentLang.test.js.map +1 -0
  115. package/dist/__tests__/rtlLines.test.d.ts +2 -0
  116. package/dist/__tests__/rtlLines.test.d.ts.map +1 -0
  117. package/dist/__tests__/rtlLines.test.js +180 -0
  118. package/dist/__tests__/rtlLines.test.js.map +1 -0
  119. package/dist/__tests__/tocNumberColumn.test.d.ts +2 -0
  120. package/dist/__tests__/tocNumberColumn.test.d.ts.map +1 -0
  121. package/dist/__tests__/tocNumberColumn.test.js +67 -0
  122. package/dist/__tests__/tocNumberColumn.test.js.map +1 -0
  123. package/dist/__tests__/verse.test.d.ts +2 -0
  124. package/dist/__tests__/verse.test.d.ts.map +1 -0
  125. package/dist/__tests__/verse.test.js +232 -0
  126. package/dist/__tests__/verse.test.js.map +1 -0
  127. package/dist/__tests__/vertical/geometry.test.js +2 -2
  128. package/dist/__tests__/vertical/geometry.test.js.map +1 -1
  129. package/dist/__tests__/vertical/htmlTurnedCells.test.js +2 -2
  130. package/dist/__tests__/vertical/htmlTurnedCells.test.js.map +1 -1
  131. package/dist/arabicMarks.d.ts +80 -0
  132. package/dist/arabicMarks.d.ts.map +1 -0
  133. package/dist/arabicMarks.js +267 -0
  134. package/dist/arabicMarks.js.map +1 -0
  135. package/dist/arabicNumberWords.d.ts +43 -0
  136. package/dist/arabicNumberWords.d.ts.map +1 -0
  137. package/dist/arabicNumberWords.js +163 -0
  138. package/dist/arabicNumberWords.js.map +1 -0
  139. package/dist/arabicNumerals.d.ts +54 -0
  140. package/dist/arabicNumerals.d.ts.map +1 -0
  141. package/dist/arabicNumerals.js +143 -0
  142. package/dist/arabicNumerals.js.map +1 -0
  143. package/dist/bidi.d.ts +186 -0
  144. package/dist/bidi.d.ts.map +1 -0
  145. package/dist/bidi.js +851 -0
  146. package/dist/bidi.js.map +1 -0
  147. package/dist/bidiData.d.ts +13 -0
  148. package/dist/bidiData.d.ts.map +1 -0
  149. package/dist/bidiData.js +318 -0
  150. package/dist/bidiData.js.map +1 -0
  151. package/dist/canvas-backend/blockRender.d.ts.map +1 -1
  152. package/dist/canvas-backend/blockRender.js +58 -27
  153. package/dist/canvas-backend/blockRender.js.map +1 -1
  154. package/dist/canvas-backend/chip.d.ts.map +1 -1
  155. package/dist/canvas-backend/chip.js +16 -2
  156. package/dist/canvas-backend/chip.js.map +1 -1
  157. package/dist/canvas-backend/headerFooter.d.ts.map +1 -1
  158. package/dist/canvas-backend/headerFooter.js +7 -3
  159. package/dist/canvas-backend/headerFooter.js.map +1 -1
  160. package/dist/canvas-backend/index.d.ts.map +1 -1
  161. package/dist/canvas-backend/index.js +9 -4
  162. package/dist/canvas-backend/index.js.map +1 -1
  163. package/dist/canvas-backend/mirrorFrame.d.ts +38 -0
  164. package/dist/canvas-backend/mirrorFrame.d.ts.map +1 -0
  165. package/dist/canvas-backend/mirrorFrame.js +129 -0
  166. package/dist/canvas-backend/mirrorFrame.js.map +1 -0
  167. package/dist/canvas-backend/renderResourceBlock.d.ts.map +1 -1
  168. package/dist/canvas-backend/renderResourceBlock.js +16 -5
  169. package/dist/canvas-backend/renderResourceBlock.js.map +1 -1
  170. package/dist/canvas-backend/runDirection.d.ts +21 -0
  171. package/dist/canvas-backend/runDirection.d.ts.map +1 -0
  172. package/dist/canvas-backend/runDirection.js +46 -0
  173. package/dist/canvas-backend/runDirection.js.map +1 -0
  174. package/dist/canvas-backend/wordRuns.d.ts +49 -0
  175. package/dist/canvas-backend/wordRuns.d.ts.map +1 -0
  176. package/dist/canvas-backend/wordRuns.js +111 -0
  177. package/dist/canvas-backend/wordRuns.js.map +1 -0
  178. package/dist/columnClip.d.ts +4 -1
  179. package/dist/columnClip.d.ts.map +1 -1
  180. package/dist/columnClip.js +8 -3
  181. package/dist/columnClip.js.map +1 -1
  182. package/dist/configWarnings.d.ts +3 -1
  183. package/dist/configWarnings.d.ts.map +1 -1
  184. package/dist/configWarnings.js +59 -5
  185. package/dist/configWarnings.js.map +1 -1
  186. package/dist/defaults/bodyText.d.ts +28 -6
  187. package/dist/defaults/bodyText.d.ts.map +1 -1
  188. package/dist/defaults/bodyText.js +158 -30
  189. package/dist/defaults/bodyText.js.map +1 -1
  190. package/dist/defaults/calloutStyles.js +1 -1
  191. package/dist/defaults/calloutStyles.js.map +1 -1
  192. package/dist/defaults/captionStyle.js +5 -5
  193. package/dist/defaults/captionStyle.js.map +1 -1
  194. package/dist/defaults/folio.d.ts +4 -0
  195. package/dist/defaults/folio.d.ts.map +1 -1
  196. package/dist/defaults/folio.js +12 -1
  197. package/dist/defaults/folio.js.map +1 -1
  198. package/dist/defaults/footnotes.d.ts.map +1 -1
  199. package/dist/defaults/footnotes.js +12 -2
  200. package/dist/defaults/footnotes.js.map +1 -1
  201. package/dist/defaults/headerFooter.d.ts.map +1 -1
  202. package/dist/defaults/headerFooter.js +1 -0
  203. package/dist/defaults/headerFooter.js.map +1 -1
  204. package/dist/defaults/headingStyles.d.ts.map +1 -1
  205. package/dist/defaults/headingStyles.js +2 -1
  206. package/dist/defaults/headingStyles.js.map +1 -1
  207. package/dist/defaults/headings.d.ts.map +1 -1
  208. package/dist/defaults/headings.js +9 -2
  209. package/dist/defaults/headings.js.map +1 -1
  210. package/dist/defaults/index.d.ts +1 -1
  211. package/dist/defaults/index.d.ts.map +1 -1
  212. package/dist/defaults/index.js +7 -1
  213. package/dist/defaults/index.js.map +1 -1
  214. package/dist/defaults/indexConfig.d.ts +6 -2
  215. package/dist/defaults/indexConfig.d.ts.map +1 -1
  216. package/dist/defaults/indexConfig.js +25 -5
  217. package/dist/defaults/indexConfig.js.map +1 -1
  218. package/dist/defaults/page.d.ts +7 -4
  219. package/dist/defaults/page.d.ts.map +1 -1
  220. package/dist/defaults/page.js +10 -7
  221. package/dist/defaults/page.js.map +1 -1
  222. package/dist/defaults/paragraphStyles.js +2 -2
  223. package/dist/defaults/paragraphStyles.js.map +1 -1
  224. package/dist/defaults/parts.d.ts.map +1 -1
  225. package/dist/defaults/parts.js +2 -1
  226. package/dist/defaults/parts.js.map +1 -1
  227. package/dist/defaults/resourceTypes.d.ts +1 -1
  228. package/dist/defaults/resourceTypes.d.ts.map +1 -1
  229. package/dist/defaults/resourceTypes.js +10 -2
  230. package/dist/defaults/resourceTypes.js.map +1 -1
  231. package/dist/defaults/shared.d.ts +9 -0
  232. package/dist/defaults/shared.d.ts.map +1 -1
  233. package/dist/defaults/shared.js +15 -0
  234. package/dist/defaults/shared.js.map +1 -1
  235. package/dist/defaults/tableStyle.d.ts.map +1 -1
  236. package/dist/defaults/tableStyle.js +5 -1
  237. package/dist/defaults/tableStyle.js.map +1 -1
  238. package/dist/design/bidiText.d.ts +89 -0
  239. package/dist/design/bidiText.d.ts.map +1 -0
  240. package/dist/design/bidiText.js +165 -0
  241. package/dist/design/bidiText.js.map +1 -0
  242. package/dist/design/layout.d.ts +20 -0
  243. package/dist/design/layout.d.ts.map +1 -1
  244. package/dist/design/layout.js +46 -5
  245. package/dist/design/layout.js.map +1 -1
  246. package/dist/design/placeholders.d.ts +7 -1
  247. package/dist/design/placeholders.d.ts.map +1 -1
  248. package/dist/design/placeholders.js +6 -3
  249. package/dist/design/placeholders.js.map +1 -1
  250. package/dist/design/richText.d.ts +5 -2
  251. package/dist/design/richText.d.ts.map +1 -1
  252. package/dist/design/richText.js +35 -2
  253. package/dist/design/richText.js.map +1 -1
  254. package/dist/emphasisOverline.d.ts +27 -0
  255. package/dist/emphasisOverline.d.ts.map +1 -0
  256. package/dist/emphasisOverline.js +107 -0
  257. package/dist/emphasisOverline.js.map +1 -0
  258. package/dist/frontmatter.d.ts +25 -6
  259. package/dist/frontmatter.d.ts.map +1 -1
  260. package/dist/frontmatter.js +51 -10
  261. package/dist/frontmatter.js.map +1 -1
  262. package/dist/html-backend.d.ts +4 -1
  263. package/dist/html-backend.d.ts.map +1 -1
  264. package/dist/html-backend.js +363 -87
  265. package/dist/html-backend.js.map +1 -1
  266. package/dist/hyphenate.d.ts.map +1 -1
  267. package/dist/hyphenate.js +4 -1
  268. package/dist/hyphenate.js.map +1 -1
  269. package/dist/index.d.ts +11 -8
  270. package/dist/index.d.ts.map +1 -1
  271. package/dist/index.js +6 -4
  272. package/dist/index.js.map +1 -1
  273. package/dist/knuthPlass/breakpoints.d.ts.map +1 -1
  274. package/dist/knuthPlass/breakpoints.js +3 -0
  275. package/dist/knuthPlass/breakpoints.js.map +1 -1
  276. package/dist/knuthPlass/pretextAdapter.d.ts.map +1 -1
  277. package/dist/knuthPlass/pretextAdapter.js +9 -3
  278. package/dist/knuthPlass/pretextAdapter.js.map +1 -1
  279. package/dist/knuthPlass/richAdapter.d.ts +11 -0
  280. package/dist/knuthPlass/richAdapter.d.ts.map +1 -1
  281. package/dist/knuthPlass/richAdapter.js +11 -4
  282. package/dist/knuthPlass/richAdapter.js.map +1 -1
  283. package/dist/knuthPlass/tracking.d.ts +2 -1
  284. package/dist/knuthPlass/tracking.d.ts.map +1 -1
  285. package/dist/knuthPlass/tracking.js +5 -2
  286. package/dist/knuthPlass/tracking.js.map +1 -1
  287. package/dist/knuthPlass/types.d.ts +4 -0
  288. package/dist/knuthPlass/types.d.ts.map +1 -1
  289. package/dist/locale.d.ts +63 -9
  290. package/dist/locale.d.ts.map +1 -1
  291. package/dist/locale.js +129 -12
  292. package/dist/locale.js.map +1 -1
  293. package/dist/measure/bidiLines.d.ts +91 -0
  294. package/dist/measure/bidiLines.d.ts.map +1 -0
  295. package/dist/measure/bidiLines.js +293 -0
  296. package/dist/measure/bidiLines.js.map +1 -0
  297. package/dist/measure/cache.d.ts.map +1 -1
  298. package/dist/measure/cache.js +10 -4
  299. package/dist/measure/cache.js.map +1 -1
  300. package/dist/measure/joining.d.ts +39 -0
  301. package/dist/measure/joining.d.ts.map +1 -0
  302. package/dist/measure/joining.js +91 -0
  303. package/dist/measure/joining.js.map +1 -0
  304. package/dist/measure/joiningGroups.d.ts +7 -0
  305. package/dist/measure/joiningGroups.d.ts.map +1 -0
  306. package/dist/measure/joiningGroups.js +110 -0
  307. package/dist/measure/joiningGroups.js.map +1 -0
  308. package/dist/measure/kashida.d.ts +97 -0
  309. package/dist/measure/kashida.d.ts.map +1 -0
  310. package/dist/measure/kashida.js +285 -0
  311. package/dist/measure/kashida.js.map +1 -0
  312. package/dist/measure/kashidaPatterns.d.ts +109 -0
  313. package/dist/measure/kashidaPatterns.d.ts.map +1 -0
  314. package/dist/measure/kashidaPatterns.js +519 -0
  315. package/dist/measure/kashidaPatterns.js.map +1 -0
  316. package/dist/measure/links.d.ts.map +1 -1
  317. package/dist/measure/links.js +5 -2
  318. package/dist/measure/links.js.map +1 -1
  319. package/dist/measure/plain.d.ts.map +1 -1
  320. package/dist/measure/plain.js +31 -0
  321. package/dist/measure/plain.js.map +1 -1
  322. package/dist/measure/rich.d.ts +24 -0
  323. package/dist/measure/rich.d.ts.map +1 -1
  324. package/dist/measure/rich.js +250 -22
  325. package/dist/measure/rich.js.map +1 -1
  326. package/dist/measure/types.d.ts +14 -0
  327. package/dist/measure/types.d.ts.map +1 -1
  328. package/dist/measure/types.js.map +1 -1
  329. package/dist/numberWords.d.ts +17 -4
  330. package/dist/numberWords.d.ts.map +1 -1
  331. package/dist/numberWords.js +19 -13
  332. package/dist/numberWords.js.map +1 -1
  333. package/dist/numbering.d.ts +49 -11
  334. package/dist/numbering.d.ts.map +1 -1
  335. package/dist/numbering.js +117 -21
  336. package/dist/numbering.js.map +1 -1
  337. package/dist/parse/annotations.d.ts +6 -3
  338. package/dist/parse/annotations.d.ts.map +1 -1
  339. package/dist/parse/annotations.js +31 -7
  340. package/dist/parse/annotations.js.map +1 -1
  341. package/dist/parse/attrs.d.ts +3 -3
  342. package/dist/parse/attrs.d.ts.map +1 -1
  343. package/dist/parse/attrs.js +5 -4
  344. package/dist/parse/attrs.js.map +1 -1
  345. package/dist/parse/blockParser.d.ts.map +1 -1
  346. package/dist/parse/blockParser.js +158 -14
  347. package/dist/parse/blockParser.js.map +1 -1
  348. package/dist/parse/index.d.ts +1 -1
  349. package/dist/parse/index.d.ts.map +1 -1
  350. package/dist/parse/index.js.map +1 -1
  351. package/dist/parse/indexMarks.d.ts.map +1 -1
  352. package/dist/parse/indexMarks.js +32 -10
  353. package/dist/parse/indexMarks.js.map +1 -1
  354. package/dist/parse/inlineFormatting.d.ts.map +1 -1
  355. package/dist/parse/inlineFormatting.js +5 -4
  356. package/dist/parse/inlineFormatting.js.map +1 -1
  357. package/dist/parse/types.d.ts +63 -1
  358. package/dist/parse/types.d.ts.map +1 -1
  359. package/dist/pipeline/build.d.ts.map +1 -1
  360. package/dist/pipeline/build.js +161 -43
  361. package/dist/pipeline/build.js.map +1 -1
  362. package/dist/pipeline/buildBlockKind.d.ts +2 -0
  363. package/dist/pipeline/buildBlockKind.d.ts.map +1 -1
  364. package/dist/pipeline/buildBlockKind.js +67 -2
  365. package/dist/pipeline/buildBlockKind.js.map +1 -1
  366. package/dist/pipeline/buildHelpers.d.ts +22 -1
  367. package/dist/pipeline/buildHelpers.d.ts.map +1 -1
  368. package/dist/pipeline/buildHelpers.js +55 -5
  369. package/dist/pipeline/buildHelpers.js.map +1 -1
  370. package/dist/pipeline/calloutLayout.d.ts +6 -1
  371. package/dist/pipeline/calloutLayout.d.ts.map +1 -1
  372. package/dist/pipeline/calloutLayout.js +63 -18
  373. package/dist/pipeline/calloutLayout.js.map +1 -1
  374. package/dist/pipeline/citations.d.ts +2 -1
  375. package/dist/pipeline/citations.d.ts.map +1 -1
  376. package/dist/pipeline/citations.js +29 -9
  377. package/dist/pipeline/citations.js.map +1 -1
  378. package/dist/pipeline/cjkGrid.d.ts +3 -2
  379. package/dist/pipeline/cjkGrid.d.ts.map +1 -1
  380. package/dist/pipeline/cjkGrid.js +3 -2
  381. package/dist/pipeline/cjkGrid.js.map +1 -1
  382. package/dist/pipeline/config.d.ts +13 -1
  383. package/dist/pipeline/config.d.ts.map +1 -1
  384. package/dist/pipeline/config.js +32 -3
  385. package/dist/pipeline/config.js.map +1 -1
  386. package/dist/pipeline/contentWarnings.d.ts +10 -0
  387. package/dist/pipeline/contentWarnings.d.ts.map +1 -1
  388. package/dist/pipeline/contentWarnings.js +88 -0
  389. package/dist/pipeline/contentWarnings.js.map +1 -1
  390. package/dist/pipeline/continuation.d.ts.map +1 -1
  391. package/dist/pipeline/continuation.js +1 -1
  392. package/dist/pipeline/continuation.js.map +1 -1
  393. package/dist/pipeline/crossRefs.d.ts.map +1 -1
  394. package/dist/pipeline/crossRefs.js +2 -0
  395. package/dist/pipeline/crossRefs.js.map +1 -1
  396. package/dist/pipeline/floatPlacement.d.ts.map +1 -1
  397. package/dist/pipeline/floatPlacement.js +2 -1
  398. package/dist/pipeline/floatPlacement.js.map +1 -1
  399. package/dist/pipeline/footnotes.d.ts +13 -5
  400. package/dist/pipeline/footnotes.d.ts.map +1 -1
  401. package/dist/pipeline/footnotes.js +19 -8
  402. package/dist/pipeline/footnotes.js.map +1 -1
  403. package/dist/pipeline/headerFooter.d.ts +4 -0
  404. package/dist/pipeline/headerFooter.d.ts.map +1 -1
  405. package/dist/pipeline/headerFooter.js +41 -13
  406. package/dist/pipeline/headerFooter.js.map +1 -1
  407. package/dist/pipeline/headingDesignCuts.d.ts +1 -1
  408. package/dist/pipeline/headingDesignCuts.d.ts.map +1 -1
  409. package/dist/pipeline/headingDesignCuts.js +2 -1
  410. package/dist/pipeline/headingDesignCuts.js.map +1 -1
  411. package/dist/pipeline/headingStyles.d.ts +10 -0
  412. package/dist/pipeline/headingStyles.d.ts.map +1 -1
  413. package/dist/pipeline/headingStyles.js +46 -0
  414. package/dist/pipeline/headingStyles.js.map +1 -1
  415. package/dist/pipeline/indexDirective.d.ts.map +1 -1
  416. package/dist/pipeline/indexDirective.js +33 -6
  417. package/dist/pipeline/indexDirective.js.map +1 -1
  418. package/dist/pipeline/indexGroups.d.ts +23 -1
  419. package/dist/pipeline/indexGroups.d.ts.map +1 -1
  420. package/dist/pipeline/indexGroups.js +50 -1
  421. package/dist/pipeline/indexGroups.js.map +1 -1
  422. package/dist/pipeline/lists.d.ts +16 -4
  423. package/dist/pipeline/lists.d.ts.map +1 -1
  424. package/dist/pipeline/lists.js +51 -12
  425. package/dist/pipeline/lists.js.map +1 -1
  426. package/dist/pipeline/measureContentBlock.d.ts +5 -0
  427. package/dist/pipeline/measureContentBlock.d.ts.map +1 -1
  428. package/dist/pipeline/measureContentBlock.js +63 -4
  429. package/dist/pipeline/measureContentBlock.js.map +1 -1
  430. package/dist/pipeline/mirrorFrame.d.ts +37 -0
  431. package/dist/pipeline/mirrorFrame.d.ts.map +1 -0
  432. package/dist/pipeline/mirrorFrame.js +143 -0
  433. package/dist/pipeline/mirrorFrame.js.map +1 -0
  434. package/dist/pipeline/outline.d.ts +2 -2
  435. package/dist/pipeline/outline.d.ts.map +1 -1
  436. package/dist/pipeline/outline.js +33 -6
  437. package/dist/pipeline/outline.js.map +1 -1
  438. package/dist/pipeline/paragraphContainers.d.ts +5 -0
  439. package/dist/pipeline/paragraphContainers.d.ts.map +1 -1
  440. package/dist/pipeline/paragraphContainers.js +12 -0
  441. package/dist/pipeline/paragraphContainers.js.map +1 -1
  442. package/dist/pipeline/parts.d.ts +1 -1
  443. package/dist/pipeline/parts.d.ts.map +1 -1
  444. package/dist/pipeline/parts.js +3 -2
  445. package/dist/pipeline/parts.js.map +1 -1
  446. package/dist/pipeline/placeholders.d.ts +13 -6
  447. package/dist/pipeline/placeholders.d.ts.map +1 -1
  448. package/dist/pipeline/placeholders.js +15 -11
  449. package/dist/pipeline/placeholders.js.map +1 -1
  450. package/dist/pipeline/placement.d.ts +3 -2
  451. package/dist/pipeline/placement.d.ts.map +1 -1
  452. package/dist/pipeline/placement.js +18 -6
  453. package/dist/pipeline/placement.js.map +1 -1
  454. package/dist/pipeline/resourceLayout.d.ts.map +1 -1
  455. package/dist/pipeline/resourceLayout.js +70 -7
  456. package/dist/pipeline/resourceLayout.js.map +1 -1
  457. package/dist/pipeline/resourceNumbering.d.ts +5 -3
  458. package/dist/pipeline/resourceNumbering.d.ts.map +1 -1
  459. package/dist/pipeline/resourceNumbering.js +11 -8
  460. package/dist/pipeline/resourceNumbering.js.map +1 -1
  461. package/dist/pipeline/styles.d.ts +6 -1
  462. package/dist/pipeline/styles.d.ts.map +1 -1
  463. package/dist/pipeline/styles.js +44 -14
  464. package/dist/pipeline/styles.js.map +1 -1
  465. package/dist/pipeline/tashkil.d.ts +27 -0
  466. package/dist/pipeline/tashkil.d.ts.map +1 -0
  467. package/dist/pipeline/tashkil.js +161 -0
  468. package/dist/pipeline/tashkil.js.map +1 -0
  469. package/dist/pipeline/toc.d.ts +12 -0
  470. package/dist/pipeline/toc.d.ts.map +1 -1
  471. package/dist/pipeline/toc.js +64 -4
  472. package/dist/pipeline/toc.js.map +1 -1
  473. package/dist/pipeline/verse.d.ts +65 -0
  474. package/dist/pipeline/verse.d.ts.map +1 -0
  475. package/dist/pipeline/verse.js +252 -0
  476. package/dist/pipeline/verse.js.map +1 -0
  477. package/dist/pipeline/verticalMetrics.d.ts +1 -1
  478. package/dist/pipeline/verticalMetrics.d.ts.map +1 -1
  479. package/dist/pipeline/verticalMetrics.js +7 -5
  480. package/dist/pipeline/verticalMetrics.js.map +1 -1
  481. package/dist/table/model.d.ts +4 -3
  482. package/dist/table/model.d.ts.map +1 -1
  483. package/dist/table/model.js.map +1 -1
  484. package/dist/types.d.ts +286 -36
  485. package/dist/types.d.ts.map +1 -1
  486. package/dist/uprightArabic.d.ts +39 -0
  487. package/dist/uprightArabic.d.ts.map +1 -0
  488. package/dist/uprightArabic.js +105 -0
  489. package/dist/uprightArabic.js.map +1 -0
  490. package/dist/vdt.d.ts +276 -11
  491. package/dist/vdt.d.ts.map +1 -1
  492. package/dist/vdt.js +46 -9
  493. package/dist/vdt.js.map +1 -1
  494. package/package.json +1 -1
@@ -0,0 +1,175 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { buildDocument } from '../../pipeline';
3
+ import { HTML_TEXT_RESET, renderToHtml, renderToHtmlIndexed } from '../../html-backend';
4
+ // #379: the HTML backend renders right-to-left text. Every word stays a box
5
+ // at the x the layout gave it; a box whose direction differs from what it
6
+ // inherits declares its own (`dir`), the document root a right-to-left
7
+ // document's, and the markup stays in logical order.
8
+ // 7 px a character, whatever the font.
9
+ class StubCtx {
10
+ font = '';
11
+ measureText(s) {
12
+ return { width: s.length * 7 };
13
+ }
14
+ }
15
+ globalThis.OffscreenCanvas = class {
16
+ getContext() {
17
+ return new StubCtx();
18
+ }
19
+ };
20
+ const pt = (value) => ({ value, unit: 'pt' });
21
+ const config = (direction, extra = {}) => ({
22
+ direction,
23
+ ...(direction === 'rtl' ? { locale: 'ar' } : {}),
24
+ page: { dpi: 72, width: pt(300), height: pt(500), margins: { top: pt(20), bottom: pt(20), left: pt(20), right: pt(20) } },
25
+ layout: { layoutType: 'single' },
26
+ header: { elements: [] },
27
+ footer: { elements: [] },
28
+ bodyText: { firstLineIndent: pt(0), textAlign: 'left', fontFamily: 'Test', boldFontWeight: 700 },
29
+ ...extra,
30
+ });
31
+ const AR = 'قال AAA إن 2024 و١٤٤٥ (BBB) جميلة';
32
+ function boxes(html) {
33
+ const out = [];
34
+ const re = /<span( dir="(ltr|rtl)")? style="position:absolute;left:([\d.-]+)px;top:[^"]*white-space:pre;[^"]*">(.*?)<\/span>(?=<span|<\/div>|<a |<\/a>)/g;
35
+ for (const m of html.matchAll(re)) {
36
+ out.push({ ...(m[2] ? { dir: m[2] } : {}), left: Number(m[3]), html: m[4], text: m[4].replace(/<[^>]+>/g, '') });
37
+ }
38
+ return out;
39
+ }
40
+ const lineHtml = (html, needle) => {
41
+ const lines = html.split('<div class="pt-line"').slice(1);
42
+ return lines.find((l) => l.includes(needle));
43
+ };
44
+ describe('document root and pages', () => {
45
+ it('a right-to-left document declares its direction and language', () => {
46
+ const doc = buildDocument({ markdown: AR }, config('rtl'));
47
+ const html = renderToHtml(doc, { mode: 'multi' });
48
+ expect(html).toMatch(/^<div class="pt-doc" lang="ar" dir="rtl" data-mode="multi" style="/);
49
+ expect(html).toContain(HTML_TEXT_RESET.replace('direction:ltr;', 'direction:rtl;'));
50
+ // Right-bound (the default for rtl): pages run right to left, which a
51
+ // row already does in a right-to-left root.
52
+ expect(doc.binding).toBe('right');
53
+ expect(html).toContain('flex-direction:row;');
54
+ const indexed = renderToHtmlIndexed(doc);
55
+ expect(indexed.html).toContain('class="pt-page"');
56
+ expect(indexed.html).toMatch(/class="pt-page" id="[^"]+" data-page="0" dir="rtl" lang="ar"/);
57
+ });
58
+ it('a right-to-left document bound on the left lays its pages left to right', () => {
59
+ const doc = buildDocument({ markdown: AR }, config('rtl', { page: { ...config('rtl').page, binding: 'left' } }));
60
+ expect(renderToHtml(doc, { mode: 'multi' })).toContain('flex-direction:row-reverse;');
61
+ });
62
+ it('a left-to-right document is marked as before', () => {
63
+ const doc = buildDocument({ markdown: 'Plain English words.' }, config('ltr'));
64
+ const html = renderToHtml(doc);
65
+ expect(html).toMatch(/^<div class="pt-doc" data-mode="multi" style="/);
66
+ expect(html).toContain(HTML_TEXT_RESET);
67
+ expect(html).not.toContain(' dir=');
68
+ });
69
+ });
70
+ describe('runs', () => {
71
+ it('in an English book, only the right-to-left words declare a direction', () => {
72
+ const doc = buildDocument({ markdown: `:::paragraphs{dir=rtl}\n${AR}\n:::` }, config('ltr'));
73
+ const html = renderToHtml(doc);
74
+ const all = boxes(lineHtml(html, 'قال'));
75
+ const byText = new Map(all.map((b) => [b.text, b]));
76
+ expect(byText.get('قال').dir).toBe('rtl');
77
+ expect(byText.get('جميلة').dir).toBe('rtl');
78
+ expect(byText.get('AAA').dir).toBeUndefined();
79
+ expect(byText.get('2024').dir).toBeUndefined();
80
+ // Markup in logical order: copying reads as written.
81
+ expect(all.map((b) => b.text).join(' ').replace(/\s+/g, ' ')).toBe('قال AAA إن 2024 و ١٤٤٥ ( BBB ) جميلة');
82
+ // Visual order: the sentence's end on the left, its start on the right.
83
+ expect(byText.get('جميلة').left).toBeLessThan(byText.get('AAA').left);
84
+ expect(byText.get('AAA').left).toBeLessThan(byText.get('قال').left);
85
+ });
86
+ it('in an Arabic book, the left-to-right words declare theirs', () => {
87
+ const doc = buildDocument({ markdown: AR }, config('rtl'));
88
+ const html = renderToHtml(doc);
89
+ const byText = new Map(boxes(lineHtml(html, 'قال')).map((b) => [b.text, b]));
90
+ expect(byText.get('قال').dir).toBeUndefined();
91
+ expect(byText.get('AAA').dir).toBe('ltr');
92
+ expect(byText.get('١٤٤٥').dir).toBe('ltr');
93
+ // The mirrored flow turns the layout over; the words' flow order is
94
+ // reversed accordingly (the start of the sentence at flow x 0).
95
+ expect(html).toContain('pt-flow-mirrored');
96
+ expect(byText.get('قال').left).toBeLessThan(byText.get('جميلة').left);
97
+ });
98
+ it('a word whose letters change style is one box, its styled letters inner spans', () => {
99
+ const doc = buildDocument({ markdown: 'كتا**ب** جميل' }, config('rtl'));
100
+ const block = doc.blocks.find((b) => b.lines.some((l) => l.text.includes('كتاب')));
101
+ const seg = block.lines[0].segments.find((s) => s.text === 'كتاب');
102
+ expect(seg.runs).toBeDefined();
103
+ const html = renderToHtml(doc);
104
+ const box = boxes(lineHtml(html, 'كتا')).find((b) => b.text === 'كتاب');
105
+ expect(box).toBeDefined();
106
+ expect(box.html).toMatch(/^كتا<span style="font:[^"]*700[^"]*;line-height:0;[^"]*">ب<\/span>$/);
107
+ });
108
+ it('a tracked line leaves Arabic words untracked', () => {
109
+ const doc = buildDocument({ markdown: `:::paragraphs{dir=rtl}\n${AR}\n:::` }, config('ltr'));
110
+ const tracked = {
111
+ ...doc,
112
+ pages: doc.pages.map((p) => ({ ...p, columns: p.columns.map((c) => ({ ...c, blocks: c.blocks.map((b) => ({ ...b, letterSpacing: 0.5 })) })) })),
113
+ };
114
+ const line = lineHtml(renderToHtml(tracked), 'قال');
115
+ expect(line).toContain('letter-spacing:0.5px;');
116
+ const all = boxes(line);
117
+ const at = (t) => all.find((b) => b.text === t);
118
+ expect(lineHtml(renderToHtml(tracked), 'قال')).toMatch(/<span dir="rtl" style="position:absolute;left:[\d.]+px;top:0;white-space:pre;letter-spacing:0;">قال</);
119
+ expect(at('AAA').html).toBe('AAA');
120
+ expect(line).not.toMatch(/letter-spacing:0;">AAA</);
121
+ });
122
+ });
123
+ describe('lines set against their frame', () => {
124
+ const lastLine = (b) => b.lines[b.lines.length - 1];
125
+ it('a ragged Arabic line in an English book ends on the right of its span', () => {
126
+ const doc = buildDocument({ markdown: `:::paragraphs{dir=rtl}\n${AR}\n:::` }, config('ltr'));
127
+ const block = doc.blocks.find((b) => b.direction === 'rtl');
128
+ const line = lastLine(block);
129
+ const width = line.segments.reduce((w, s) => w + s.width, 0);
130
+ const all = boxes(lineHtml(renderToHtml(doc), 'قال'));
131
+ const left = Math.min(...all.map((b) => b.left));
132
+ // Box lefts are relative to the line box (at `bbox.x`).
133
+ expect(left + line.bbox.x).toBeCloseTo(line.measure.x + line.measure.width - width, 2);
134
+ });
135
+ it('centred stays centred', () => {
136
+ const doc = buildDocument({ markdown: `:::paragraphs{dir=rtl}\n${AR}\n:::` }, config('ltr', { bodyText: { textAlign: 'center', firstLineIndent: pt(0) } }));
137
+ const block = doc.blocks.find((b) => b.direction === 'rtl');
138
+ const line = lastLine(block);
139
+ const width = line.segments.reduce((w, s) => w + s.width, 0);
140
+ const left = Math.min(...boxes(lineHtml(renderToHtml(doc), 'قال')).map((b) => b.left));
141
+ expect(left + line.bbox.x).toBeCloseTo(line.measure.x + (line.measure.width - width) / 2, 2);
142
+ });
143
+ it('an English list in an Arabic book: its marker declares ltr', () => {
144
+ const doc = buildDocument({ markdown: `${AR}\n\n:::paragraphs{dir=ltr}\n1. English item\n:::` }, config('rtl'));
145
+ const html = renderToHtml(doc);
146
+ expect(html).toMatch(/<div class="pt-bullet" aria-hidden="true" dir="ltr" style="/);
147
+ });
148
+ });
149
+ describe('captions and table cells', () => {
150
+ it('a mixed cell line advances in its order, its runs declaring their direction', () => {
151
+ const table = {
152
+ id: 'tab', typeId: 'table', kind: 'table', caption: 'جدول AAA ١', createdAt: 0, updatedAt: 0,
153
+ table: { model: { rows: [[{ content: 'كلمة AAA BBB أخرى' }, { content: 'CCC' }]] } },
154
+ placement: { position: 'here' },
155
+ };
156
+ const doc = buildDocument({ markdown: `${AR}\n\n::resource{id="tab"}\n`, resources: [table] }, config('ltr', { direction: 'rtl', locale: 'ar' }));
157
+ const rb = doc.blocks.find((b) => b.resourceBlock).resourceBlock;
158
+ const cell = rb.table.cells.find((c) => c.col === 0);
159
+ expect(cell.lines[0].order).toBeDefined();
160
+ const html = renderToHtml(doc);
161
+ const line = lineHtml(html, 'كلمة');
162
+ const all = boxes(line);
163
+ const at = (t) => all.find((b) => b.text === t);
164
+ expect(at('AAA').dir).toBe('ltr');
165
+ expect(at('كلمة').dir).toBeUndefined();
166
+ expect(at('BBB').dir).toBe('ltr');
167
+ // Flow order of the mirrored page: the first word at the flow's left,
168
+ // the English pair turned round in the flow so the mirror reads it
169
+ // AAA BBB.
170
+ expect(at('كلمة').left).toBeLessThan(at('BBB').left);
171
+ expect(at('BBB').left).toBeLessThan(at('AAA').left);
172
+ expect(at('AAA').left).toBeLessThan(at('أخرى').left);
173
+ });
174
+ });
175
+ //# sourceMappingURL=htmlRtl.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"htmlRtl.test.js","sourceRoot":"","sources":["../../../src/__tests__/rtl/htmlRtl.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mirroredFrame.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mirroredFrame.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/rtl/mirroredFrame.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,313 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { buildDocument } from '../../pipeline';
3
+ import { flowPageMirrored, pageMirrored } from '../../pipeline/buildHelpers';
4
+ import { mirroredLineOrder } from '../../pipeline/mirrorFrame';
5
+ import { flowRectToPage, flowToPage, pageIsMirrored, pageIsVertical, pageRectToFlow, pageToFlow, } from '../../vdt';
6
+ import { resolveParagraph, visualOrder } from '../../bidi';
7
+ // Issue #370: a right-to-left document lays its flow out as a left-to-right
8
+ // one and mirrors it onto the sheet (`VDTMirroredFlowFrame`).
9
+ class StubCtx {
10
+ font = '';
11
+ measureText(s) {
12
+ return { width: s.length * 7 };
13
+ }
14
+ }
15
+ globalThis.OffscreenCanvas = class {
16
+ getContext() {
17
+ return new StubCtx();
18
+ }
19
+ };
20
+ const pt = (value) => ({ value, unit: 'pt' });
21
+ // Latin placeholder text with marker words, so line order is checkable
22
+ // whatever the measurer does with Arabic.
23
+ // No full stop: in a right-to-left paragraph a final stop after Latin
24
+ // words is a neutral at the paragraph's level and stands at the line's
25
+ // left end (UAX #9, see rtlLines.test.ts); these tests look at the frame.
26
+ const para = (i) => `Paragraph ${i} alpha beta gamma delta epsilon zeta eta theta iota kappa lambda mu nu xi omicron pi rho`;
27
+ const filler = (n, from = 0) => Array.from({ length: n }, (_, i) => para(from + i)).join('\n\n');
28
+ const svgFigure = {
29
+ id: 'fig', typeId: 'figure', kind: 'svg', caption: 'A figure', createdAt: 0, updatedAt: 0,
30
+ svg: { fileId: 'file-fig', width: 200, height: 100 },
31
+ placement: { position: 'top', span: 'column' },
32
+ };
33
+ const table = {
34
+ id: 'tab', typeId: 'table', kind: 'table', caption: 'A table', createdAt: 0, updatedAt: 0,
35
+ table: { model: { headerRowCount: 1, rows: [[{ content: 'First' }, { content: 'Second' }, { content: 'Third' }], [{ content: 'a1' }, { content: 'b1' }, { content: 'c1' }]] } },
36
+ placement: { position: 'bottom', span: 'column' },
37
+ };
38
+ const MD = [
39
+ ':::toc',
40
+ ':::',
41
+ '',
42
+ '# الفصل الأول',
43
+ '',
44
+ 'Opening words with a note[^1] and :ref{id="fig"} and :ref{id="tab"}.',
45
+ '',
46
+ '- alpha item',
47
+ '- beta item',
48
+ '',
49
+ '1. first entry',
50
+ '2. second entry',
51
+ '',
52
+ ':::callout{type="mark"}',
53
+ 'Callout body words set inside the box.',
54
+ ':::',
55
+ '',
56
+ filler(10),
57
+ '',
58
+ '# الفصل الثاني',
59
+ '',
60
+ filler(6, 10),
61
+ '',
62
+ '[^1]: The note text of the first chapter.',
63
+ ].join('\n');
64
+ function config(direction, extra = {}) {
65
+ return {
66
+ direction,
67
+ locale: 'en',
68
+ page: {
69
+ width: pt(420), height: pt(560),
70
+ margins: { top: pt(30), bottom: pt(30), left: pt(50), right: pt(26), mirror: true },
71
+ // The left-to-right twin is left-bound; the right-to-left book binds
72
+ // on the right by default (#367).
73
+ ...(direction === 'ltr' ? { binding: 'left' } : {}),
74
+ },
75
+ layout: { layoutType: 'double', gutterWidth: pt(14) },
76
+ headings: { balancing: { enabled: false }, levels: [{ level: 1, breakBefore: { enabled: true } }] },
77
+ calloutStyles: [{ id: 'mark', name: 'Mark', marker: { kind: 'glyph', glyph: '>', size: { value: 2, unit: 'em' } } }],
78
+ ...extra,
79
+ };
80
+ }
81
+ const build = (direction, extra = {}, markdown = MD) => buildDocument({ markdown, resources: [svgFigure, table] }, config(direction, extra));
82
+ function rounded(v) {
83
+ if (typeof v === 'number')
84
+ return (Math.round(v * 1e4) / 1e4);
85
+ if (Array.isArray(v))
86
+ return v.map(rounded);
87
+ if (v && typeof v === 'object')
88
+ return Object.fromEntries(Object.entries(v).map(([k, x]) => [k, rounded(x)]));
89
+ return v;
90
+ }
91
+ /** Everything the flow lays out, minus the line order (which a mirrored
92
+ * page turns, see `mirrorFrame.ts`). */
93
+ function flowShape(doc) {
94
+ const line = (l) => ({ text: l.text, bbox: l.bbox, baseline: l.baseline });
95
+ const block = (b) => ({
96
+ type: b.type, bbox: b.bbox, lines: b.lines.map(line),
97
+ bullet: b.bulletOffsetX, separator: b.separatorX,
98
+ overlay: b.designOverlay?.blocks.map((d) => ({ kind: d.kind, bbox: d.bbox })),
99
+ resource: b.resourceBlock && {
100
+ bodyRect: b.resourceBlock.bodyRect,
101
+ caption: b.resourceBlock.captionLines.map(line),
102
+ cells: b.resourceBlock.table?.cells.map((c) => ({ rect: c.rect, lines: c.lines.map(line) })),
103
+ },
104
+ });
105
+ return rounded(doc.pages.map((p) => ({
106
+ contentArea: p.contentArea,
107
+ role: p.role,
108
+ columns: p.columns.map((c) => ({ bbox: c.bbox, blocks: c.blocks.map(block) })),
109
+ floats: (p.floats ?? []).map(block),
110
+ footnotes: p.footnoteAreas?.map((a) => ({ bbox: a.bbox, rule: a.rule })),
111
+ opener: p.openerBand?.bbox,
112
+ })));
113
+ }
114
+ const blocksOf = (page) => [...page.columns.flatMap((c) => c.blocks), ...(page.floats ?? [])];
115
+ const right = (r) => r.x + r.width;
116
+ describe('mirrored flow frame — helpers', () => {
117
+ const page = { flow: { writingMode: 'horizontal-tb', direction: 'rtl', mirror: { originX: 400 } } };
118
+ it('maps x to W − x and is its own inverse', () => {
119
+ expect(flowToPage(page, 10, 20)).toEqual({ x: 390, y: 20 });
120
+ expect(pageToFlow(page, 390, 20)).toEqual({ x: 10, y: 20 });
121
+ for (const [x, y] of [[0, 0], [17.5, 3], [399, 299]]) {
122
+ const p = flowToPage(page, x, y);
123
+ expect(pageToFlow(page, p.x, p.y)).toEqual({ x, y });
124
+ }
125
+ });
126
+ it('mirrors rects, keeping width and height', () => {
127
+ const r = { x: 10, y: 20, width: 100, height: 30 };
128
+ expect(flowRectToPage(page, r)).toEqual({ x: 290, y: 20, width: 100, height: 30 });
129
+ expect(pageRectToFlow(page, flowRectToPage(page, r))).toEqual(r);
130
+ });
131
+ it('tells a mirrored page from a vertical one', () => {
132
+ expect(pageIsMirrored(page)).toBe(true);
133
+ expect(pageIsVertical(page)).toBe(false);
134
+ const vertical = { flow: { writingMode: 'vertical-rl', rotation: { direction: 'cw', originX: 300, originY: 0, width: 420, height: 300 } } };
135
+ expect(pageIsVertical(vertical)).toBe(true);
136
+ expect(pageIsMirrored(vertical)).toBe(false);
137
+ expect(pageIsMirrored({})).toBe(false);
138
+ expect(pageIsVertical({})).toBe(false);
139
+ });
140
+ it('reverses a line order, dropping it when that is the logical order', () => {
141
+ expect(mirroredLineOrder(undefined, 3)).toEqual([2, 1, 0]);
142
+ expect(mirroredLineOrder([2, 1, 0], 3)).toBeUndefined();
143
+ expect(mirroredLineOrder([3, 4, 2, 0, 1], 5)).toEqual([1, 0, 2, 4, 3]);
144
+ });
145
+ });
146
+ describe('a right-to-left document', () => {
147
+ const ltr = build('ltr');
148
+ const rtl = build('rtl');
149
+ it('gives every page the mirrored frame, and none to a left-to-right one', () => {
150
+ expect(rtl.binding).toBe('right');
151
+ expect(rtl.pages.length).toBeGreaterThan(3);
152
+ for (const page of rtl.pages)
153
+ expect(page.flow).toEqual({ writingMode: 'horizontal-tb', direction: 'rtl', mirror: { originX: page.width } });
154
+ for (const page of ltr.pages)
155
+ expect(page.flow).toBeUndefined();
156
+ });
157
+ it('lays its flow out as the left-bound left-to-right book does', () => {
158
+ expect(rtl.pages.length).toBe(ltr.pages.length);
159
+ expect(flowShape(rtl)).toEqual(flowShape(ltr));
160
+ });
161
+ it('puts the first column on the right of the sheet', () => {
162
+ for (const page of rtl.pages) {
163
+ if (page.columns.length < 2)
164
+ continue;
165
+ const [first, second] = page.columns.map((c) => flowRectToPage(page, c.bbox));
166
+ expect(first.x).toBeGreaterThan(right(second));
167
+ }
168
+ });
169
+ it('turns the margins over: the inner margin faces the spine on the right of a recto', () => {
170
+ const trim = rtl.trimOffset;
171
+ const [recto, verso] = rtl.pages.map((p) => flowRectToPage(p, p.contentArea));
172
+ // Page 1 of a right-bound book is a recto whose spine is on its right:
173
+ // the inner margin (written `left`, 50 pt) is on the right.
174
+ const W = rtl.pages[0].width;
175
+ const pt2px = (v) => (v * rtl.config.page.dpi) / 72;
176
+ expect(W - trim - right(recto)).toBeCloseTo(pt2px(50), 4);
177
+ expect(recto.x - trim).toBeCloseTo(pt2px(26), 4);
178
+ expect(verso.x - trim).toBeCloseTo(pt2px(50), 4);
179
+ });
180
+ it('hangs list markers on the right of their text', () => {
181
+ const page = rtl.pages.find((p) => blocksOf(p).some((b) => b.bulletText));
182
+ for (const b of blocksOf(page).filter((x) => x.bulletText && x.bulletOffsetX !== undefined)) {
183
+ const marker = flowToPage(page, b.bulletOffsetX, 0).x;
184
+ const textRight = right(flowRectToPage(page, b.lines[0].bbox));
185
+ expect(marker).toBeGreaterThanOrEqual(textRight - 0.5);
186
+ }
187
+ });
188
+ it('draws the footnote rule from the right end of the column', () => {
189
+ const page = rtl.pages.find((p) => p.footnoteAreas?.some((a) => a.rule));
190
+ const area = page.footnoteAreas.find((a) => a.rule);
191
+ const col = flowRectToPage(page, page.columns[area.columnIndex].bbox);
192
+ const rule = flowRectToPage(page, { x: area.rule.x, y: area.rule.y, width: area.rule.width, height: 1 });
193
+ expect(right(rule)).toBeCloseTo(right(col), 4);
194
+ expect(rule.x).toBeGreaterThan(col.x + 1);
195
+ });
196
+ it('sets the contents page numbers on the left of their titles', () => {
197
+ const page = rtl.pages[0];
198
+ const entries = blocksOf(page).filter((b) => b.tocEntry && b.lines[0]?.segments && b.lines[0].segments.length > 1);
199
+ expect(entries.length).toBeGreaterThan(0);
200
+ for (const b of entries) {
201
+ const line = b.lines[0];
202
+ const segs = line.segments;
203
+ // The order the measurer gives the row of an Arabic title in a
204
+ // right-to-left paragraph (the visual order of its bidi levels:
205
+ // number, leader, title), turned for the mirrored flow: the title
206
+ // first, at the flow's left.
207
+ const par = resolveParagraph(segs.map((s) => s.text).join(''), 'rtl');
208
+ let at0 = 0;
209
+ const levels = segs.map((s) => { const l = par.levels[at0] ?? 1; at0 += s.text.length; return l; });
210
+ const order = mirroredLineOrder(visualOrder(levels), segs.length) ?? segs.map((_, i) => i);
211
+ let x = line.bbox.x;
212
+ const at = new Map();
213
+ for (const i of order) {
214
+ at.set(i, x);
215
+ x += segs[i].width;
216
+ }
217
+ const label = segs.length - 1;
218
+ const title = segs.findIndex((s) => s.kind === 'text');
219
+ expect(flowToPage(page, at.get(label), 0).x).toBeLessThan(flowToPage(page, at.get(title), 0).x);
220
+ }
221
+ });
222
+ it('puts the first column of a table on the right', () => {
223
+ const blk = rtl.pages.flatMap(blocksOf).find((b) => b.resourceBlock?.table);
224
+ const page = rtl.pages[blk.pageIndex];
225
+ const cells = blk.resourceBlock.table.cells.filter((c) => c.row === 0);
226
+ const first = flowRectToPage(page, cells.find((c) => c.col === 0).rect);
227
+ const last = flowRectToPage(page, cells.find((c) => c.col === 2).rect);
228
+ expect(first.x).toBeGreaterThan(last.x);
229
+ });
230
+ it('sets a callout marker column on the right of its box', () => {
231
+ const frame = rtl.blocks.find((b) => b.type === 'callout');
232
+ const page = rtl.pages[frame.pageIndex];
233
+ const marker = frame.designOverlay.blocks.find((d) => d.kind === 'text');
234
+ const box = frame.designOverlay.blocks.find((d) => d.kind === 'box');
235
+ expect(flowRectToPage(page, marker.bbox).x).toBeGreaterThan(flowRectToPage(page, box.bbox).x);
236
+ });
237
+ it('advances the words of a Latin line in reverse in the flow, so they read left to right on the sheet', () => {
238
+ const line = rtl.blocks.flatMap((b) => b.lines).find((l) => l.text.startsWith('Paragraph 3 '));
239
+ const twin = ltr.blocks.flatMap((b) => b.lines).find((l) => l.text === line.text);
240
+ const n = line.segments.length;
241
+ expect(twin.order).toBeUndefined();
242
+ expect(line.order).toEqual(Array.from({ length: n }, (_, i) => n - 1 - i));
243
+ // Shared measured lines are never changed in place: the left-to-right
244
+ // twin's are untouched, and so is the line built again.
245
+ const again = build('rtl').blocks.flatMap((b) => b.lines).find((l) => l.text === line.text);
246
+ expect(again.order).toEqual(line.order);
247
+ });
248
+ });
249
+ describe('parity in the mirrored flow', () => {
250
+ it('is the physical parity turned over, with mirrored margins only', () => {
251
+ const doc = build('rtl');
252
+ for (const page of doc.pages) {
253
+ expect(flowPageMirrored(doc.config, page)).toBe(!pageMirrored(doc.config, page.index));
254
+ }
255
+ const plain = build('rtl', { page: { ...config('rtl').page, margins: { ...config('rtl').page.margins, mirror: false } } });
256
+ for (const page of plain.pages)
257
+ expect(flowPageMirrored(plain.config, page)).toBe(false);
258
+ });
259
+ it('keeps an outer side column on the side away from the spine', () => {
260
+ const extra = {
261
+ layout: { layoutType: 'oneAndHalf', gutterWidth: pt(10), sideColumnPercent: 30, sideColumnRole: 'floats', sideColumnSide: 'outer' },
262
+ };
263
+ const doc = build('rtl', extra, filler(30));
264
+ const twin = build('ltr', extra, filler(30));
265
+ expect(flowShape(doc)).toEqual(flowShape(twin));
266
+ for (const page of doc.pages.slice(0, 2)) {
267
+ const [main, side] = page.columns.map((c) => flowRectToPage(page, c.bbox));
268
+ // A recto (odd page) of a right-bound book has its spine on the right.
269
+ const recto = page.index % 2 === 0;
270
+ if (recto)
271
+ expect(side.x).toBeLessThan(main.x);
272
+ else
273
+ expect(side.x).toBeGreaterThan(main.x);
274
+ }
275
+ });
276
+ });
277
+ describe('part pages of a right-to-left document', () => {
278
+ it('are mirrored as the body pages are', () => {
279
+ const md = `${filler(2)}\n\n:::part{number="I" title="Foundations"}\n:::\n\n# Chapter\n\n${filler(2)}`;
280
+ const extra = { parts: { margins: { top: pt(60), left: pt(40), right: pt(20), bottom: pt(12) } } };
281
+ const doc = build('rtl', extra, md);
282
+ const twin = build('ltr', extra, md);
283
+ const part = doc.pages.find((p) => p.partInfo);
284
+ expect(pageIsMirrored(part)).toBe(true);
285
+ const twinPart = twin.pages[part.index];
286
+ expect(twinPart.partInfo).toBeDefined();
287
+ expect(rounded(part.contentArea)).toEqual(rounded(twinPart.contentArea));
288
+ expect(rounded(flowRectToPage(part, part.contentArea))).toEqual(rounded({
289
+ ...twinPart.contentArea, x: part.width - right(twinPart.contentArea),
290
+ }));
291
+ });
292
+ });
293
+ describe('turned figures of a right-to-left document', () => {
294
+ it('turn the other way in the flow, so the sheet shows the turn asked for', () => {
295
+ const turned = (rotate) => ({ ...svgFigure, id: 'wide', placement: { position: 'top', rotate } });
296
+ for (const rotate of ['ccw', 'cw']) {
297
+ const md = `See :ref{id="wide"}.\n\n${filler(8)}`;
298
+ const ltr = buildDocument({ markdown: md, resources: [turned(rotate)] }, config('ltr'));
299
+ const rtl = buildDocument({ markdown: md, resources: [turned(rotate)] }, config('rtl'));
300
+ const of = (d) => d.pages.flatMap((p) => p.floats ?? []).find((b) => b.resourceBlock?.rotation).resourceBlock.rotation;
301
+ expect(of(ltr).direction).toBe(rotate);
302
+ expect(of(rtl).direction).toBe(rotate === 'ccw' ? 'cw' : 'ccw');
303
+ }
304
+ });
305
+ });
306
+ describe('a vertical right-to-left document', () => {
307
+ it('keeps the vertical frame', () => {
308
+ const doc = buildDocument({ markdown: '此開卷第一回也。' }, { locale: 'zh-Hant', direction: 'rtl', layout: { writingMode: 'vertical-rl' } });
309
+ for (const page of doc.pages)
310
+ expect(pageIsVertical(page)).toBe(true);
311
+ });
312
+ });
313
+ //# sourceMappingURL=mirroredFrame.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mirroredFrame.test.js","sourceRoot":"","sources":["../../../src/__tests__/rtl/mirroredFrame.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mirroredPaint.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mirroredPaint.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/rtl/mirroredPaint.test.ts"],"names":[],"mappings":""}