postext 1.27.0 → 1.28.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 (544) hide show
  1. package/dist/__tests__/bundle/balloonPlacementPin.test.d.ts +2 -0
  2. package/dist/__tests__/bundle/balloonPlacementPin.test.d.ts.map +1 -0
  3. package/dist/__tests__/bundle/balloonPlacementPin.test.js +71 -0
  4. package/dist/__tests__/bundle/balloonPlacementPin.test.js.map +1 -0
  5. package/dist/__tests__/bundle/cjkRulesPin.test.js +131 -7
  6. package/dist/__tests__/bundle/cjkRulesPin.test.js.map +1 -1
  7. package/dist/__tests__/bundle/designOverflowPin.test.js +3 -3
  8. package/dist/__tests__/bundle/designOverflowPin.test.js.map +1 -1
  9. package/dist/__tests__/bundle/flowColumnsPin.test.js +3 -1
  10. package/dist/__tests__/bundle/flowColumnsPin.test.js.map +1 -1
  11. package/dist/__tests__/bundle/gridBalancingPin.test.js +14 -5
  12. package/dist/__tests__/bundle/gridBalancingPin.test.js.map +1 -1
  13. package/dist/__tests__/bundle/gridBreakRulesPin.test.d.ts +2 -0
  14. package/dist/__tests__/bundle/gridBreakRulesPin.test.d.ts.map +1 -0
  15. package/dist/__tests__/bundle/gridBreakRulesPin.test.js +144 -0
  16. package/dist/__tests__/bundle/gridBreakRulesPin.test.js.map +1 -0
  17. package/dist/__tests__/bundle/indexGroupSplitPin.test.d.ts +2 -0
  18. package/dist/__tests__/bundle/indexGroupSplitPin.test.d.ts.map +1 -0
  19. package/dist/__tests__/bundle/indexGroupSplitPin.test.js +55 -0
  20. package/dist/__tests__/bundle/indexGroupSplitPin.test.js.map +1 -0
  21. package/dist/__tests__/bundle/inlineCaptionSidePin.test.d.ts +2 -0
  22. package/dist/__tests__/bundle/inlineCaptionSidePin.test.d.ts.map +1 -0
  23. package/dist/__tests__/bundle/inlineCaptionSidePin.test.js +60 -0
  24. package/dist/__tests__/bundle/inlineCaptionSidePin.test.js.map +1 -0
  25. package/dist/__tests__/bundle/inlineTableSplitPin.test.js +3 -1
  26. package/dist/__tests__/bundle/inlineTableSplitPin.test.js.map +1 -1
  27. package/dist/__tests__/bundle/looseOrderPin.test.d.ts +2 -0
  28. package/dist/__tests__/bundle/looseOrderPin.test.d.ts.map +1 -0
  29. package/dist/__tests__/bundle/looseOrderPin.test.js +76 -0
  30. package/dist/__tests__/bundle/looseOrderPin.test.js.map +1 -0
  31. package/dist/__tests__/bundle/openerHeadFloatsPin.test.js +2 -1
  32. package/dist/__tests__/bundle/openerHeadFloatsPin.test.js.map +1 -1
  33. package/dist/__tests__/bundle/refLabelBreaksPin.test.d.ts +2 -0
  34. package/dist/__tests__/bundle/refLabelBreaksPin.test.d.ts.map +1 -0
  35. package/dist/__tests__/bundle/refLabelBreaksPin.test.js +72 -0
  36. package/dist/__tests__/bundle/refLabelBreaksPin.test.js.map +1 -0
  37. package/dist/__tests__/bundle/scriptContextPin.test.d.ts +2 -0
  38. package/dist/__tests__/bundle/scriptContextPin.test.d.ts.map +1 -0
  39. package/dist/__tests__/bundle/scriptContextPin.test.js +66 -0
  40. package/dist/__tests__/bundle/scriptContextPin.test.js.map +1 -0
  41. package/dist/__tests__/bundle/trailingStepPin.test.d.ts +2 -0
  42. package/dist/__tests__/bundle/trailingStepPin.test.d.ts.map +1 -0
  43. package/dist/__tests__/bundle/trailingStepPin.test.js +59 -0
  44. package/dist/__tests__/bundle/trailingStepPin.test.js.map +1 -0
  45. package/dist/__tests__/bundle/wideFloatStretchPin.test.d.ts +2 -0
  46. package/dist/__tests__/bundle/wideFloatStretchPin.test.d.ts.map +1 -0
  47. package/dist/__tests__/bundle/wideFloatStretchPin.test.js +59 -0
  48. package/dist/__tests__/bundle/wideFloatStretchPin.test.js.map +1 -0
  49. package/dist/__tests__/bundle.test.js +8 -6
  50. package/dist/__tests__/bundle.test.js.map +1 -1
  51. package/dist/__tests__/cjk/annotations.test.js +223 -0
  52. package/dist/__tests__/cjk/annotations.test.js.map +1 -1
  53. package/dist/__tests__/cjk/annotationsRender.test.js +3 -3
  54. package/dist/__tests__/cjk/annotationsRender.test.js.map +1 -1
  55. package/dist/__tests__/cjk/chipLatinSpacing.test.js +13 -2
  56. package/dist/__tests__/cjk/chipLatinSpacing.test.js.map +1 -1
  57. package/dist/__tests__/cjk/designNumberSeams.test.d.ts +2 -0
  58. package/dist/__tests__/cjk/designNumberSeams.test.d.ts.map +1 -0
  59. package/dist/__tests__/cjk/designNumberSeams.test.js +221 -0
  60. package/dist/__tests__/cjk/designNumberSeams.test.js.map +1 -0
  61. package/dist/__tests__/cjk/grid.test.js +1 -1
  62. package/dist/__tests__/cjk/grid.test.js.map +1 -1
  63. package/dist/__tests__/cjk/gridBalancing.test.js +3 -1
  64. package/dist/__tests__/cjk/gridBalancing.test.js.map +1 -1
  65. package/dist/__tests__/cjk/japaneseSpacing.test.js +3 -1
  66. package/dist/__tests__/cjk/japaneseSpacing.test.js.map +1 -1
  67. package/dist/__tests__/cjk/keepAll.test.js +3 -1
  68. package/dist/__tests__/cjk/keepAll.test.js.map +1 -1
  69. package/dist/__tests__/cjk/keepAllLatinQuotation.test.d.ts +2 -0
  70. package/dist/__tests__/cjk/keepAllLatinQuotation.test.d.ts.map +1 -0
  71. package/dist/__tests__/cjk/keepAllLatinQuotation.test.js +166 -0
  72. package/dist/__tests__/cjk/keepAllLatinQuotation.test.js.map +1 -0
  73. package/dist/__tests__/cjk/latinSpacingEdge.test.d.ts +2 -0
  74. package/dist/__tests__/cjk/latinSpacingEdge.test.d.ts.map +1 -0
  75. package/dist/__tests__/cjk/latinSpacingEdge.test.js +179 -0
  76. package/dist/__tests__/cjk/latinSpacingEdge.test.js.map +1 -0
  77. package/dist/__tests__/cjk/runt.test.js +92 -1
  78. package/dist/__tests__/cjk/runt.test.js.map +1 -1
  79. package/dist/__tests__/codeBlocks.test.js +1 -1
  80. package/dist/__tests__/columnBalancing.test.js +216 -0
  81. package/dist/__tests__/columnBalancing.test.js.map +1 -1
  82. package/dist/__tests__/columnRuleBands.test.js +78 -0
  83. package/dist/__tests__/columnRuleBands.test.js.map +1 -1
  84. package/dist/__tests__/comics/readingDirection.test.js +52 -0
  85. package/dist/__tests__/comics/readingDirection.test.js.map +1 -1
  86. package/dist/__tests__/comics/script.test.js +5 -0
  87. package/dist/__tests__/comics/script.test.js.map +1 -1
  88. package/dist/__tests__/contrast.test.d.ts +2 -0
  89. package/dist/__tests__/contrast.test.d.ts.map +1 -0
  90. package/dist/__tests__/contrast.test.js +258 -0
  91. package/dist/__tests__/contrast.test.js.map +1 -0
  92. package/dist/__tests__/defaults/cjk.test.js +4 -4
  93. package/dist/__tests__/defaults/cjk.test.js.map +1 -1
  94. package/dist/__tests__/defaults/gridBreakRules.test.d.ts +2 -0
  95. package/dist/__tests__/defaults/gridBreakRules.test.d.ts.map +1 -0
  96. package/dist/__tests__/defaults/gridBreakRules.test.js +152 -0
  97. package/dist/__tests__/defaults/gridBreakRules.test.js.map +1 -0
  98. package/dist/__tests__/defaults/headingsBalancing.test.js +25 -0
  99. package/dist/__tests__/defaults/headingsBalancing.test.js.map +1 -1
  100. package/dist/__tests__/defaults/stripContextDefaults.test.js +41 -0
  101. package/dist/__tests__/defaults/stripContextDefaults.test.js.map +1 -1
  102. package/dist/__tests__/defaults/stripRoundTrip.test.js +8 -5
  103. package/dist/__tests__/defaults/stripRoundTrip.test.js.map +1 -1
  104. package/dist/__tests__/exports.test.js +30 -0
  105. package/dist/__tests__/exports.test.js.map +1 -1
  106. package/dist/__tests__/fontUsage.test.d.ts +2 -0
  107. package/dist/__tests__/fontUsage.test.d.ts.map +1 -0
  108. package/dist/__tests__/fontUsage.test.js +113 -0
  109. package/dist/__tests__/fontUsage.test.js.map +1 -0
  110. package/dist/__tests__/hardBreaks.test.js +1 -1
  111. package/dist/__tests__/headingInlineMarks.test.js +7 -5
  112. package/dist/__tests__/headingInlineMarks.test.js.map +1 -1
  113. package/dist/__tests__/hyphenationRules.test.d.ts +2 -0
  114. package/dist/__tests__/hyphenationRules.test.d.ts.map +1 -0
  115. package/dist/__tests__/hyphenationRules.test.js +295 -0
  116. package/dist/__tests__/hyphenationRules.test.js.map +1 -0
  117. package/dist/__tests__/indexGroupSplit.test.d.ts +2 -0
  118. package/dist/__tests__/indexGroupSplit.test.d.ts.map +1 -0
  119. package/dist/__tests__/indexGroupSplit.test.js +175 -0
  120. package/dist/__tests__/indexGroupSplit.test.js.map +1 -0
  121. package/dist/__tests__/mathSizeMigration.test.js +7 -5
  122. package/dist/__tests__/mathSizeMigration.test.js.map +1 -1
  123. package/dist/__tests__/multipleColumns.test.js +19 -0
  124. package/dist/__tests__/multipleColumns.test.js.map +1 -1
  125. package/dist/__tests__/pipeline/calloutInlineResourceGap.test.js +1 -1
  126. package/dist/__tests__/pipeline/calloutSplitMinLinesChild.test.js +3 -3
  127. package/dist/__tests__/pipeline/calloutSplitMinLinesChild.test.js.map +1 -1
  128. package/dist/__tests__/pipeline/closingBandUnderOpener.test.d.ts +2 -0
  129. package/dist/__tests__/pipeline/closingBandUnderOpener.test.d.ts.map +1 -0
  130. package/dist/__tests__/pipeline/closingBandUnderOpener.test.js +90 -0
  131. package/dist/__tests__/pipeline/closingBandUnderOpener.test.js.map +1 -0
  132. package/dist/__tests__/pipeline/colonListRoom.test.js +5 -4
  133. package/dist/__tests__/pipeline/colonListRoom.test.js.map +1 -1
  134. package/dist/__tests__/pipeline/columnHeadSpace.test.d.ts +2 -0
  135. package/dist/__tests__/pipeline/columnHeadSpace.test.d.ts.map +1 -0
  136. package/dist/__tests__/pipeline/columnHeadSpace.test.js +175 -0
  137. package/dist/__tests__/pipeline/columnHeadSpace.test.js.map +1 -0
  138. package/dist/__tests__/pipeline/compoundBreaks.test.js +6 -6
  139. package/dist/__tests__/pipeline/compoundBreaks.test.js.map +1 -1
  140. package/dist/__tests__/pipeline/dashBreaks.test.js +5 -5
  141. package/dist/__tests__/pipeline/dashBreaks.test.js.map +1 -1
  142. package/dist/__tests__/pipeline/flowColumns.test.js +100 -0
  143. package/dist/__tests__/pipeline/flowColumns.test.js.map +1 -1
  144. package/dist/__tests__/pipeline/headingShortBand.test.js +2 -1
  145. package/dist/__tests__/pipeline/headingShortBand.test.js.map +1 -1
  146. package/dist/__tests__/pipeline/headingSplitOrphans.test.js +6 -5
  147. package/dist/__tests__/pipeline/headingSplitOrphans.test.js.map +1 -1
  148. package/dist/__tests__/pipeline/hyphenAcrossColumns.test.js +188 -1
  149. package/dist/__tests__/pipeline/hyphenAcrossColumns.test.js.map +1 -1
  150. package/dist/__tests__/pipeline/inlineCaptionSide.test.d.ts +2 -0
  151. package/dist/__tests__/pipeline/inlineCaptionSide.test.d.ts.map +1 -0
  152. package/dist/__tests__/pipeline/inlineCaptionSide.test.js +270 -0
  153. package/dist/__tests__/pipeline/inlineCaptionSide.test.js.map +1 -0
  154. package/dist/__tests__/pipeline/inlineFigureSpace.test.js +5 -5
  155. package/dist/__tests__/pipeline/inlineFigureSpace.test.js.map +1 -1
  156. package/dist/__tests__/pipeline/inlineRefRender.test.js +8 -6
  157. package/dist/__tests__/pipeline/inlineRefRender.test.js.map +1 -1
  158. package/dist/__tests__/pipeline/looseBeforeHeadingLines.test.d.ts +2 -0
  159. package/dist/__tests__/pipeline/looseBeforeHeadingLines.test.d.ts.map +1 -0
  160. package/dist/__tests__/pipeline/looseBeforeHeadingLines.test.js +73 -0
  161. package/dist/__tests__/pipeline/looseBeforeHeadingLines.test.js.map +1 -0
  162. package/dist/__tests__/pipeline/openerFloats.test.d.ts +2 -0
  163. package/dist/__tests__/pipeline/openerFloats.test.d.ts.map +1 -0
  164. package/dist/__tests__/pipeline/openerFloats.test.js +137 -0
  165. package/dist/__tests__/pipeline/openerFloats.test.js.map +1 -0
  166. package/dist/__tests__/pipeline/orderedNumberWidthItem.test.d.ts +2 -0
  167. package/dist/__tests__/pipeline/orderedNumberWidthItem.test.d.ts.map +1 -0
  168. package/dist/__tests__/pipeline/orderedNumberWidthItem.test.js +162 -0
  169. package/dist/__tests__/pipeline/orderedNumberWidthItem.test.js.map +1 -0
  170. package/dist/__tests__/pipeline/paragraphContainerTail.test.js +68 -8
  171. package/dist/__tests__/pipeline/paragraphContainerTail.test.js.map +1 -1
  172. package/dist/__tests__/pipeline/paragraphStyleFaces.test.js +1 -1
  173. package/dist/__tests__/pipeline/paragraphStyleFaces.test.js.map +1 -1
  174. package/dist/__tests__/pipeline/raggedLineAndRuntFix.test.d.ts +2 -0
  175. package/dist/__tests__/pipeline/raggedLineAndRuntFix.test.d.ts.map +1 -0
  176. package/dist/__tests__/pipeline/raggedLineAndRuntFix.test.js +151 -0
  177. package/dist/__tests__/pipeline/raggedLineAndRuntFix.test.js.map +1 -0
  178. package/dist/__tests__/pipeline/raggedOptimal.test.js +6 -6
  179. package/dist/__tests__/pipeline/raggedOptimal.test.js.map +1 -1
  180. package/dist/__tests__/pipeline/refLabelBreaks.test.d.ts +2 -0
  181. package/dist/__tests__/pipeline/refLabelBreaks.test.d.ts.map +1 -0
  182. package/dist/__tests__/pipeline/refLabelBreaks.test.js +324 -0
  183. package/dist/__tests__/pipeline/refLabelBreaks.test.js.map +1 -0
  184. package/dist/__tests__/pipeline/resourceTemplateStyles.test.d.ts +2 -0
  185. package/dist/__tests__/pipeline/resourceTemplateStyles.test.d.ts.map +1 -0
  186. package/dist/__tests__/pipeline/resourceTemplateStyles.test.js +145 -0
  187. package/dist/__tests__/pipeline/resourceTemplateStyles.test.js.map +1 -0
  188. package/dist/__tests__/pipeline/shortListSplit.test.d.ts +2 -0
  189. package/dist/__tests__/pipeline/shortListSplit.test.d.ts.map +1 -0
  190. package/dist/__tests__/pipeline/shortListSplit.test.js +181 -0
  191. package/dist/__tests__/pipeline/shortListSplit.test.js.map +1 -0
  192. package/dist/__tests__/pipeline/snapTailAtColumnFoot.test.d.ts +2 -0
  193. package/dist/__tests__/pipeline/snapTailAtColumnFoot.test.d.ts.map +1 -0
  194. package/dist/__tests__/pipeline/snapTailAtColumnFoot.test.js +133 -0
  195. package/dist/__tests__/pipeline/snapTailAtColumnFoot.test.js.map +1 -0
  196. package/dist/__tests__/pipeline/stretchAfterDisplays.test.d.ts +2 -0
  197. package/dist/__tests__/pipeline/stretchAfterDisplays.test.d.ts.map +1 -0
  198. package/dist/__tests__/pipeline/stretchAfterDisplays.test.js +51 -0
  199. package/dist/__tests__/pipeline/stretchAfterDisplays.test.js.map +1 -0
  200. package/dist/__tests__/pipeline/trailingCapFloatHead.test.js +26 -0
  201. package/dist/__tests__/pipeline/trailingCapFloatHead.test.js.map +1 -1
  202. package/dist/__tests__/pipeline/trailingStep.test.d.ts +2 -0
  203. package/dist/__tests__/pipeline/trailingStep.test.d.ts.map +1 -0
  204. package/dist/__tests__/pipeline/trailingStep.test.js +187 -0
  205. package/dist/__tests__/pipeline/trailingStep.test.js.map +1 -0
  206. package/dist/__tests__/pipeline/wideFloatStretch.test.d.ts +2 -0
  207. package/dist/__tests__/pipeline/wideFloatStretch.test.d.ts.map +1 -0
  208. package/dist/__tests__/pipeline/wideFloatStretch.test.js +84 -0
  209. package/dist/__tests__/pipeline/wideFloatStretch.test.js.map +1 -0
  210. package/dist/__tests__/scriptContext.test.d.ts +2 -0
  211. package/dist/__tests__/scriptContext.test.d.ts.map +1 -0
  212. package/dist/__tests__/scriptContext.test.js +919 -0
  213. package/dist/__tests__/scriptContext.test.js.map +1 -0
  214. package/dist/__tests__/softHyphenEdges.test.d.ts +2 -0
  215. package/dist/__tests__/softHyphenEdges.test.d.ts.map +1 -0
  216. package/dist/__tests__/softHyphenEdges.test.js +217 -0
  217. package/dist/__tests__/softHyphenEdges.test.js.map +1 -0
  218. package/dist/__tests__/spaceLimitRatio.test.d.ts +2 -0
  219. package/dist/__tests__/spaceLimitRatio.test.d.ts.map +1 -0
  220. package/dist/__tests__/spaceLimitRatio.test.js +226 -0
  221. package/dist/__tests__/spaceLimitRatio.test.js.map +1 -0
  222. package/dist/__tests__/trackedLigatures.test.js +365 -24
  223. package/dist/__tests__/trackedLigatures.test.js.map +1 -1
  224. package/dist/__tests__/verseLines.test.js +9 -7
  225. package/dist/__tests__/verseLines.test.js.map +1 -1
  226. package/dist/bundle/configVersion.d.ts +201 -6
  227. package/dist/bundle/configVersion.d.ts.map +1 -1
  228. package/dist/bundle/configVersion.js +440 -6
  229. package/dist/bundle/configVersion.js.map +1 -1
  230. package/dist/bundle/index.d.ts +8 -0
  231. package/dist/bundle/index.d.ts.map +1 -1
  232. package/dist/bundle/index.js +8 -0
  233. package/dist/bundle/index.js.map +1 -1
  234. package/dist/canvas-backend/blockRender.d.ts.map +1 -1
  235. package/dist/canvas-backend/blockRender.js +3 -2
  236. package/dist/canvas-backend/blockRender.js.map +1 -1
  237. package/dist/canvas-backend/chip.js +1 -1
  238. package/dist/canvas-backend/chip.js.map +1 -1
  239. package/dist/canvas-backend/headerFooter.d.ts.map +1 -1
  240. package/dist/canvas-backend/headerFooter.js +17 -2
  241. package/dist/canvas-backend/headerFooter.js.map +1 -1
  242. package/dist/canvas-backend/runDirection.d.ts +10 -6
  243. package/dist/canvas-backend/runDirection.d.ts.map +1 -1
  244. package/dist/canvas-backend/runDirection.js +12 -7
  245. package/dist/canvas-backend/runDirection.js.map +1 -1
  246. package/dist/canvas-backend/scriptText.d.ts +11 -0
  247. package/dist/canvas-backend/scriptText.d.ts.map +1 -0
  248. package/dist/canvas-backend/scriptText.js +75 -0
  249. package/dist/canvas-backend/scriptText.js.map +1 -0
  250. package/dist/canvas-backend/segmentText.d.ts.map +1 -1
  251. package/dist/canvas-backend/segmentText.js +9 -1
  252. package/dist/canvas-backend/segmentText.js.map +1 -1
  253. package/dist/canvas-backend/trackedText.d.ts +35 -20
  254. package/dist/canvas-backend/trackedText.d.ts.map +1 -1
  255. package/dist/canvas-backend/trackedText.js +58 -22
  256. package/dist/canvas-backend/trackedText.js.map +1 -1
  257. package/dist/canvas-backend/verticalText.d.ts.map +1 -1
  258. package/dist/canvas-backend/verticalText.js +10 -2
  259. package/dist/canvas-backend/verticalText.js.map +1 -1
  260. package/dist/canvas-backend/wordRuns.d.ts +14 -5
  261. package/dist/canvas-backend/wordRuns.d.ts.map +1 -1
  262. package/dist/canvas-backend/wordRuns.js +20 -7
  263. package/dist/canvas-backend/wordRuns.js.map +1 -1
  264. package/dist/citations/names.d.ts +8 -0
  265. package/dist/citations/names.d.ts.map +1 -0
  266. package/dist/citations/names.js +25 -0
  267. package/dist/citations/names.js.map +1 -0
  268. package/dist/columnClip.d.ts +8 -1
  269. package/dist/columnClip.d.ts.map +1 -1
  270. package/dist/columnClip.js +32 -3
  271. package/dist/columnClip.js.map +1 -1
  272. package/dist/columnRule.d.ts +6 -3
  273. package/dist/columnRule.d.ts.map +1 -1
  274. package/dist/columnRule.js +6 -3
  275. package/dist/columnRule.js.map +1 -1
  276. package/dist/comics/layoutPage.d.ts.map +1 -1
  277. package/dist/comics/layoutPage.js +51 -22
  278. package/dist/comics/layoutPage.js.map +1 -1
  279. package/dist/comics/lettering/__tests__/bystanderFaces.test.d.ts +2 -0
  280. package/dist/comics/lettering/__tests__/bystanderFaces.test.d.ts.map +1 -0
  281. package/dist/comics/lettering/__tests__/bystanderFaces.test.js +204 -0
  282. package/dist/comics/lettering/__tests__/bystanderFaces.test.js.map +1 -0
  283. package/dist/comics/lettering/__tests__/shapeTextDash.test.d.ts +2 -0
  284. package/dist/comics/lettering/__tests__/shapeTextDash.test.d.ts.map +1 -0
  285. package/dist/comics/lettering/__tests__/shapeTextDash.test.js +173 -0
  286. package/dist/comics/lettering/__tests__/shapeTextDash.test.js.map +1 -0
  287. package/dist/comics/lettering/__tests__/strictPlacement.test.d.ts +2 -0
  288. package/dist/comics/lettering/__tests__/strictPlacement.test.d.ts.map +1 -0
  289. package/dist/comics/lettering/__tests__/strictPlacement.test.js +130 -0
  290. package/dist/comics/lettering/__tests__/strictPlacement.test.js.map +1 -0
  291. package/dist/comics/lettering/letter.js +21 -8
  292. package/dist/comics/lettering/letter.js.map +1 -1
  293. package/dist/comics/lettering/placement.d.ts.map +1 -1
  294. package/dist/comics/lettering/placement.js +12 -3
  295. package/dist/comics/lettering/placement.js.map +1 -1
  296. package/dist/comics/lettering/shape-text.d.ts +3 -0
  297. package/dist/comics/lettering/shape-text.d.ts.map +1 -1
  298. package/dist/comics/lettering/shape-text.js +71 -12
  299. package/dist/comics/lettering/shape-text.js.map +1 -1
  300. package/dist/comics/lettering/text.d.ts +5 -0
  301. package/dist/comics/lettering/text.d.ts.map +1 -1
  302. package/dist/comics/lettering/text.js +6 -1
  303. package/dist/comics/lettering/text.js.map +1 -1
  304. package/dist/comics/lettering/types.d.ts +12 -2
  305. package/dist/comics/lettering/types.d.ts.map +1 -1
  306. package/dist/comics/script.js +1 -1
  307. package/dist/comics/script.js.map +1 -1
  308. package/dist/comics/types.d.ts +7 -3
  309. package/dist/comics/types.d.ts.map +1 -1
  310. package/dist/configWarnings.d.ts.map +1 -1
  311. package/dist/configWarnings.js +33 -6
  312. package/dist/configWarnings.js.map +1 -1
  313. package/dist/contrast.d.ts +188 -0
  314. package/dist/contrast.d.ts.map +1 -0
  315. package/dist/contrast.js +583 -0
  316. package/dist/contrast.js.map +1 -0
  317. package/dist/defaults/bodyText.d.ts +31 -3
  318. package/dist/defaults/bodyText.d.ts.map +1 -1
  319. package/dist/defaults/bodyText.js +76 -8
  320. package/dist/defaults/bodyText.js.map +1 -1
  321. package/dist/defaults/citations.d.ts.map +1 -1
  322. package/dist/defaults/citations.js +4 -0
  323. package/dist/defaults/citations.js.map +1 -1
  324. package/dist/defaults/cjk.d.ts +11 -1
  325. package/dist/defaults/cjk.d.ts.map +1 -1
  326. package/dist/defaults/cjk.js +41 -3
  327. package/dist/defaults/cjk.js.map +1 -1
  328. package/dist/defaults/comics.d.ts.map +1 -1
  329. package/dist/defaults/comics.js +2 -0
  330. package/dist/defaults/comics.js.map +1 -1
  331. package/dist/defaults/contrast.d.ts +11 -0
  332. package/dist/defaults/contrast.d.ts.map +1 -0
  333. package/dist/defaults/contrast.js +65 -0
  334. package/dist/defaults/contrast.js.map +1 -0
  335. package/dist/defaults/crossRefs.d.ts +1 -1
  336. package/dist/defaults/crossRefs.d.ts.map +1 -1
  337. package/dist/defaults/crossRefs.js +6 -1
  338. package/dist/defaults/crossRefs.js.map +1 -1
  339. package/dist/defaults/footnotes.d.ts.map +1 -1
  340. package/dist/defaults/footnotes.js +5 -0
  341. package/dist/defaults/footnotes.js.map +1 -1
  342. package/dist/defaults/headings.d.ts +5 -1
  343. package/dist/defaults/headings.d.ts.map +1 -1
  344. package/dist/defaults/headings.js +41 -1
  345. package/dist/defaults/headings.js.map +1 -1
  346. package/dist/defaults/index.d.ts +3 -2
  347. package/dist/defaults/index.d.ts.map +1 -1
  348. package/dist/defaults/index.js +15 -4
  349. package/dist/defaults/index.js.map +1 -1
  350. package/dist/defaults/indexConfig.d.ts +1 -0
  351. package/dist/defaults/indexConfig.d.ts.map +1 -1
  352. package/dist/defaults/indexConfig.js +7 -1
  353. package/dist/defaults/indexConfig.js.map +1 -1
  354. package/dist/defaults/layout.d.ts.map +1 -1
  355. package/dist/defaults/layout.js +13 -1
  356. package/dist/defaults/layout.js.map +1 -1
  357. package/dist/defaults/orderedLists.js +1 -1
  358. package/dist/defaults/orderedLists.js.map +1 -1
  359. package/dist/defaults/paragraphStyles.d.ts.map +1 -1
  360. package/dist/defaults/paragraphStyles.js +5 -0
  361. package/dist/defaults/paragraphStyles.js.map +1 -1
  362. package/dist/defaults/shared.d.ts +4 -1
  363. package/dist/defaults/shared.d.ts.map +1 -1
  364. package/dist/defaults/shared.js +5 -0
  365. package/dist/defaults/shared.js.map +1 -1
  366. package/dist/design/cjkText.d.ts +7 -2
  367. package/dist/design/cjkText.d.ts.map +1 -1
  368. package/dist/design/cjkText.js +8 -2
  369. package/dist/design/cjkText.js.map +1 -1
  370. package/dist/design/layout.d.ts.map +1 -1
  371. package/dist/design/layout.js +85 -12
  372. package/dist/design/layout.js.map +1 -1
  373. package/dist/design/richText.d.ts.map +1 -1
  374. package/dist/design/richText.js +7 -3
  375. package/dist/design/richText.js.map +1 -1
  376. package/dist/fonts/usage.d.ts.map +1 -1
  377. package/dist/fonts/usage.js +89 -0
  378. package/dist/fonts/usage.js.map +1 -1
  379. package/dist/html-backend.d.ts.map +1 -1
  380. package/dist/html-backend.js +97 -27
  381. package/dist/html-backend.js.map +1 -1
  382. package/dist/hyphenate.d.ts +58 -1
  383. package/dist/hyphenate.d.ts.map +1 -1
  384. package/dist/hyphenate.js +228 -19
  385. package/dist/hyphenate.js.map +1 -1
  386. package/dist/hyphenationExceptions.d.ts +10 -0
  387. package/dist/hyphenationExceptions.d.ts.map +1 -0
  388. package/dist/hyphenationExceptions.js +29 -0
  389. package/dist/hyphenationExceptions.js.map +1 -0
  390. package/dist/index.d.ts +12 -4
  391. package/dist/index.d.ts.map +1 -1
  392. package/dist/index.js +10 -3
  393. package/dist/index.js.map +1 -1
  394. package/dist/knuthPlass/pretextAdapter.d.ts.map +1 -1
  395. package/dist/knuthPlass/pretextAdapter.js +4 -17
  396. package/dist/knuthPlass/pretextAdapter.js.map +1 -1
  397. package/dist/knuthPlass/richAdapter.d.ts +9 -0
  398. package/dist/knuthPlass/richAdapter.d.ts.map +1 -1
  399. package/dist/knuthPlass/richAdapter.js +15 -18
  400. package/dist/knuthPlass/richAdapter.js.map +1 -1
  401. package/dist/looseLines.d.ts +15 -4
  402. package/dist/looseLines.d.ts.map +1 -1
  403. package/dist/looseLines.js +17 -4
  404. package/dist/looseLines.js.map +1 -1
  405. package/dist/measure/cache.d.ts.map +1 -1
  406. package/dist/measure/cache.js +14 -4
  407. package/dist/measure/cache.js.map +1 -1
  408. package/dist/measure/canvas.d.ts +18 -0
  409. package/dist/measure/canvas.d.ts.map +1 -1
  410. package/dist/measure/canvas.js +104 -0
  411. package/dist/measure/canvas.js.map +1 -1
  412. package/dist/measure/cjkAnnotate.d.ts +11 -6
  413. package/dist/measure/cjkAnnotate.d.ts.map +1 -1
  414. package/dist/measure/cjkAnnotate.js +27 -11
  415. package/dist/measure/cjkAnnotate.js.map +1 -1
  416. package/dist/measure/cjkCompose.d.ts +6 -2
  417. package/dist/measure/cjkCompose.d.ts.map +1 -1
  418. package/dist/measure/cjkCompose.js +146 -30
  419. package/dist/measure/cjkCompose.js.map +1 -1
  420. package/dist/measure/cjkPunctuation.d.ts +17 -0
  421. package/dist/measure/cjkPunctuation.d.ts.map +1 -1
  422. package/dist/measure/cjkPunctuation.js +15 -1
  423. package/dist/measure/cjkPunctuation.js.map +1 -1
  424. package/dist/measure/font.d.ts +2 -1
  425. package/dist/measure/font.d.ts.map +1 -1
  426. package/dist/measure/font.js +4 -2
  427. package/dist/measure/font.js.map +1 -1
  428. package/dist/measure/hardBreaks.d.ts.map +1 -1
  429. package/dist/measure/hardBreaks.js +6 -2
  430. package/dist/measure/hardBreaks.js.map +1 -1
  431. package/dist/measure/kashida.d.ts.map +1 -1
  432. package/dist/measure/kashida.js +8 -11
  433. package/dist/measure/kashida.js.map +1 -1
  434. package/dist/measure/plain.d.ts +3 -0
  435. package/dist/measure/plain.d.ts.map +1 -1
  436. package/dist/measure/plain.js +70 -5
  437. package/dist/measure/plain.js.map +1 -1
  438. package/dist/measure/rich.d.ts +32 -0
  439. package/dist/measure/rich.d.ts.map +1 -1
  440. package/dist/measure/rich.js +227 -35
  441. package/dist/measure/rich.js.map +1 -1
  442. package/dist/measure/script.d.ts +180 -0
  443. package/dist/measure/script.d.ts.map +1 -0
  444. package/dist/measure/script.js +329 -0
  445. package/dist/measure/script.js.map +1 -0
  446. package/dist/measure/spaceRatios.d.ts +28 -0
  447. package/dist/measure/spaceRatios.d.ts.map +1 -0
  448. package/dist/measure/spaceRatios.js +48 -0
  449. package/dist/measure/spaceRatios.js.map +1 -0
  450. package/dist/measure/spaces.d.ts +10 -0
  451. package/dist/measure/spaces.d.ts.map +1 -1
  452. package/dist/measure/spaces.js +36 -0
  453. package/dist/measure/spaces.js.map +1 -1
  454. package/dist/measure/types.d.ts +9 -0
  455. package/dist/measure/types.d.ts.map +1 -1
  456. package/dist/measure/types.js.map +1 -1
  457. package/dist/numbering.d.ts +5 -0
  458. package/dist/numbering.d.ts.map +1 -1
  459. package/dist/numbering.js +5 -1
  460. package/dist/numbering.js.map +1 -1
  461. package/dist/parse/types.d.ts +13 -0
  462. package/dist/parse/types.d.ts.map +1 -1
  463. package/dist/pipeline/bandCaps.d.ts +35 -1
  464. package/dist/pipeline/bandCaps.d.ts.map +1 -1
  465. package/dist/pipeline/bandCaps.js +95 -3
  466. package/dist/pipeline/bandCaps.js.map +1 -1
  467. package/dist/pipeline/build.d.ts.map +1 -1
  468. package/dist/pipeline/build.js +754 -49
  469. package/dist/pipeline/build.js.map +1 -1
  470. package/dist/pipeline/buildHelpers.d.ts.map +1 -1
  471. package/dist/pipeline/buildHelpers.js +5 -1
  472. package/dist/pipeline/buildHelpers.js.map +1 -1
  473. package/dist/pipeline/buildMeasurement.d.ts +9 -0
  474. package/dist/pipeline/buildMeasurement.d.ts.map +1 -1
  475. package/dist/pipeline/buildMeasurement.js +3 -2
  476. package/dist/pipeline/buildMeasurement.js.map +1 -1
  477. package/dist/pipeline/calloutLayout.d.ts +10 -1
  478. package/dist/pipeline/calloutLayout.d.ts.map +1 -1
  479. package/dist/pipeline/calloutLayout.js +45 -9
  480. package/dist/pipeline/calloutLayout.js.map +1 -1
  481. package/dist/pipeline/columnBalancing.d.ts +44 -7
  482. package/dist/pipeline/columnBalancing.d.ts.map +1 -1
  483. package/dist/pipeline/columnBalancing.js +167 -40
  484. package/dist/pipeline/columnBalancing.js.map +1 -1
  485. package/dist/pipeline/config.d.ts +2 -2
  486. package/dist/pipeline/config.d.ts.map +1 -1
  487. package/dist/pipeline/config.js +18 -3
  488. package/dist/pipeline/config.js.map +1 -1
  489. package/dist/pipeline/contentWarnings.d.ts +6 -0
  490. package/dist/pipeline/contentWarnings.d.ts.map +1 -1
  491. package/dist/pipeline/contentWarnings.js +32 -0
  492. package/dist/pipeline/contentWarnings.js.map +1 -1
  493. package/dist/pipeline/crossRefs.d.ts +12 -1
  494. package/dist/pipeline/crossRefs.d.ts.map +1 -1
  495. package/dist/pipeline/crossRefs.js +22 -14
  496. package/dist/pipeline/crossRefs.js.map +1 -1
  497. package/dist/pipeline/flowColumns.d.ts +2 -1
  498. package/dist/pipeline/flowColumns.d.ts.map +1 -1
  499. package/dist/pipeline/flowColumns.js +12 -2
  500. package/dist/pipeline/flowColumns.js.map +1 -1
  501. package/dist/pipeline/footnotes.d.ts.map +1 -1
  502. package/dist/pipeline/footnotes.js +3 -0
  503. package/dist/pipeline/footnotes.js.map +1 -1
  504. package/dist/pipeline/indexDirective.d.ts.map +1 -1
  505. package/dist/pipeline/indexDirective.js +15 -0
  506. package/dist/pipeline/indexDirective.js.map +1 -1
  507. package/dist/pipeline/lists.d.ts +1 -1
  508. package/dist/pipeline/lists.d.ts.map +1 -1
  509. package/dist/pipeline/lists.js +9 -1
  510. package/dist/pipeline/lists.js.map +1 -1
  511. package/dist/pipeline/measureContentBlock.d.ts +18 -0
  512. package/dist/pipeline/measureContentBlock.d.ts.map +1 -1
  513. package/dist/pipeline/measureContentBlock.js +13 -3
  514. package/dist/pipeline/measureContentBlock.js.map +1 -1
  515. package/dist/pipeline/paragraphContainers.d.ts +4 -1
  516. package/dist/pipeline/paragraphContainers.d.ts.map +1 -1
  517. package/dist/pipeline/paragraphContainers.js +2 -0
  518. package/dist/pipeline/paragraphContainers.js.map +1 -1
  519. package/dist/pipeline/placement.d.ts +15 -0
  520. package/dist/pipeline/placement.d.ts.map +1 -1
  521. package/dist/pipeline/placement.js +36 -4
  522. package/dist/pipeline/placement.js.map +1 -1
  523. package/dist/pipeline/raggedLines.d.ts +8 -6
  524. package/dist/pipeline/raggedLines.d.ts.map +1 -1
  525. package/dist/pipeline/raggedLines.js +13 -10
  526. package/dist/pipeline/raggedLines.js.map +1 -1
  527. package/dist/pipeline/resourceLayout.d.ts +4 -0
  528. package/dist/pipeline/resourceLayout.d.ts.map +1 -1
  529. package/dist/pipeline/resourceLayout.js +22 -7
  530. package/dist/pipeline/resourceLayout.js.map +1 -1
  531. package/dist/pipeline/resourceNumbering.d.ts +6 -3
  532. package/dist/pipeline/resourceNumbering.d.ts.map +1 -1
  533. package/dist/pipeline/resourceNumbering.js +36 -19
  534. package/dist/pipeline/resourceNumbering.js.map +1 -1
  535. package/dist/pipeline/toc.d.ts +0 -3
  536. package/dist/pipeline/toc.d.ts.map +1 -1
  537. package/dist/pipeline/toc.js +19 -2
  538. package/dist/pipeline/toc.js.map +1 -1
  539. package/dist/types.d.ts +411 -15
  540. package/dist/types.d.ts.map +1 -1
  541. package/dist/vdt.d.ts +90 -7
  542. package/dist/vdt.d.ts.map +1 -1
  543. package/dist/vdt.js.map +1 -1
  544. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spaceLimitRatio.test.js","sourceRoot":"","sources":["../../src/__tests__/spaceLimitRatio.test.ts"],"names":[],"mappings":"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"}
@@ -3,8 +3,13 @@ import { renderPageToCanvas } from '../canvas-backend';
3
3
  import { renderBlock } from '../canvas-backend/blockRender';
4
4
  import { beginMirroredFlow } from '../canvas-backend/mirrorFrame';
5
5
  import { fillTrackedWord, trackedPieces, shapedOtherwise } from '../canvas-backend/trackedText';
6
+ import { renderHeaderFooterSlot, renderTextBlock } from '../canvas-backend/headerFooter';
7
+ import { renderComicBalloon } from '../canvas-backend/comic';
8
+ import { fillFlowText, setVerticalPaint } from '../canvas-backend/verticalText';
6
9
  import { renderToHtml } from '../html-backend';
7
10
  import { buildDocument } from '../pipeline';
11
+ import { layoutSlotToVdt } from '../pipeline/headerFooter';
12
+ import { resolveDesignSlot } from '../defaults/headerFooter';
8
13
  // #663: a tracked word is measured at its natural width, ligatures counted,
9
14
  // plus the tracking times its letters. A browser shapes it without its
10
15
  // common ligatures once `letterSpacing` is not zero, so the canvas painted
@@ -253,6 +258,7 @@ const rightOf = (r) => Math.max(r.x, r.x + r.ux * r.width);
253
258
  * other. */
254
259
  function sheetCanvas(keeps = false) {
255
260
  const runs = [];
261
+ const strokes = [];
256
262
  let m = [1, 0, 0, 1, 0, 0];
257
263
  const stack = [];
258
264
  const measure = new BrowserCtx(keeps);
@@ -276,17 +282,19 @@ function sheetCanvas(keeps = false) {
276
282
  scale(x, y) { m = mul(m, [x, 0, 0, y, 0, 0]); },
277
283
  rotate(t) { m = mul(m, [Math.cos(t), Math.sin(t), -Math.sin(t), Math.cos(t), 0, 0]); },
278
284
  measureText,
279
- fillText(text, x, y) {
280
- const width = measureText(text).width;
281
- // The run's box from its alignment, as a browser places it.
282
- const rtl = state.direction === 'rtl';
283
- const from = state.textAlign === 'right' || (state.textAlign === 'start' && rtl) || (state.textAlign === 'end' && !rtl) ? x - width : x;
284
- runs.push({
285
- text, x: m[0] * from + m[2] * y + m[4], y: m[1] * from + m[3] * y + m[5], ux: m[0], uy: m[1], det: m[0] * m[3] - m[1] * m[2],
286
- width, baseline: y, spacing: parseFloat(state.letterSpacing) || 0, direction: state.direction, font: state.font,
287
- });
288
- },
285
+ fillText(text, x, y) { record(runs, text, x, y); },
286
+ strokeText(text, x, y) { record(strokes, text, x, y); },
289
287
  };
288
+ function record(list, text, x, y) {
289
+ const width = measureText(text).width;
290
+ // The run's box from its alignment, as a browser places it.
291
+ const rtl = state.direction === 'rtl';
292
+ const from = state.textAlign === 'right' || (state.textAlign === 'start' && rtl) || (state.textAlign === 'end' && !rtl) ? x - width : x;
293
+ list.push({
294
+ text, x: m[0] * from + m[2] * y + m[4], y: m[1] * from + m[3] * y + m[5], ux: m[0], uy: m[1], det: m[0] * m[3] - m[1] * m[2],
295
+ width, baseline: y, spacing: parseFloat(state.letterSpacing) || 0, direction: state.direction, font: state.font,
296
+ });
297
+ }
290
298
  const ctx = new Proxy(state, {
291
299
  get(target, key) {
292
300
  if (typeof key === 'string' && key in api)
@@ -308,7 +316,7 @@ function sheetCanvas(keeps = false) {
308
316
  getOwnPropertyDescriptor() { return undefined; },
309
317
  });
310
318
  const canvas = { width: 0, height: 0, getContext: () => ctx };
311
- return { canvas, ctx, runs };
319
+ return { canvas, ctx, runs, strokes };
312
320
  }
313
321
  function runsOn(doc, page = 0, keeps = false) {
314
322
  const { canvas, runs } = sheetCanvas(keeps);
@@ -453,9 +461,9 @@ const tracked2 = (config) => ({
453
461
  });
454
462
  const headingOf = (doc) => doc.blocks.find((b) => b.type === 'heading');
455
463
  describe('right-to-left words on a tracked line (#685)', () => {
456
- it('an Arabic or a Hebrew word is never cut, though its face has ligatures', () => {
464
+ it('an Arabic word, a word in two directions and a Hebrew word in a left-to-right context are never cut, though the face has ligatures', () => {
457
465
  const { ctx } = paintingCtx();
458
- for (const word of [SALAM, ISRAEL, `first${SALAM}`, `${ISRAEL}first`]) {
466
+ for (const word of [SALAM, ISRAEL, `first${SALAM}`, `${ISRAEL}first`, `${ISRAEL}12`]) {
459
467
  // The browser shapes it otherwise under a letter-spacing…
460
468
  expect(shapedOtherwise(ctx, word)).toBe(true);
461
469
  // …and it is still painted whole, with one `fillText`.
@@ -551,18 +559,62 @@ describe('tracked header cells in either direction (#685)', () => {
551
559
  }
552
560
  }
553
561
  });
554
- describe('lines that are never cut (#685)', () => {
555
- it('a vertical line is painted the same whether the browser drops ligatures or not', () => {
562
+ describe('a tracked vertical line (#685, #703)', () => {
563
+ it('paints its sideways Latin run with its ligatures, ending where the line was measured to end', () => {
556
564
  const doc = buildDocument({ markdown: '## first office fire' }, tracked2({ ...CONFIG, layout: { writingMode: 'vertical-rl', layoutType: 'single' } }));
557
- expect(headingOf(doc).letterSpacing ?? headingOf(doc).lines[0].letterSpacing).toBeCloseTo(0.5, 6);
558
- // What was painted and where; the two browsers measure the run apart.
559
- const put = (r) => ({ ...r, font: r.font.replace(', Keeps', ''), width: 0 });
560
- const cut = runsOn(doc).map(put);
561
- expect(cut.length).toBeGreaterThan(0);
562
- expect(cut).toEqual(runsOn(doc, 0, true).map(put));
563
- // The words with their neighbours, tracked: no ligature set apart.
564
- expect(cut.map((r) => r.text).join(' ')).toContain('first');
565
- expect(cut.some((r) => r.text === 'fi' || r.text === 'ffi' || r.spacing === 0)).toBe(false);
565
+ const heading = headingOf(doc);
566
+ const t = heading.letterSpacing ?? heading.lines[0].letterSpacing;
567
+ expect(t).toBeCloseTo(0.5, 6);
568
+ const cut = runsOn(doc);
569
+ // Up to postext 1.27 the run was one text under the letter-spacing,
570
+ // shaped without its ligatures and wider than its place.
571
+ expect(cut.map((r) => r.text)).toEqual(['fi', 'rst o', 'ffi', 'ce ', 'fi', 're']);
572
+ expect(cut.filter((r) => r.text === 'fi' || r.text === 'ffi').every((r) => r.spacing === 0)).toBe(true);
573
+ expect(cut.filter((r) => r.text !== 'fi' && r.text !== 'ffi').every((r) => r.spacing === t)).toBe(true);
574
+ // The frame turns the line a quarter: the letters advance down the sheet.
575
+ expect(cut.every((r) => Math.abs(r.ux) < 1e-9 && r.uy === 1)).toBe(true);
576
+ for (let k = 1; k < cut.length; k++)
577
+ expect(cut[k].y).toBeGreaterThan(cut[k - 1].y);
578
+ // Against a browser that keeps its ligatures, which paints the run
579
+ // whole at the width the layout measured: the same start, and an end
580
+ // short of it by the tracking the letters of its ligatures do not take
581
+ // (fi, ffi, fi: four letters).
582
+ const [whole, ...rest] = runsOn(doc, 0, true);
583
+ expect(rest).toEqual([]);
584
+ expect(whole.text).toBe('first office fire');
585
+ expect(whole.width).toBeCloseTo(heading.lines[0].bbox.width, 6);
586
+ expect(cut[0].y).toBeCloseTo(whole.y, 6);
587
+ expect(cut[0].x).toBeCloseTo(whole.x, 6);
588
+ const last = cut[cut.length - 1];
589
+ expect(whole.y + whole.width - (last.y + last.width)).toBeCloseTo(4 * t, 6);
590
+ // Painted whole without its ligatures it ran past its place.
591
+ const dropped = new BrowserCtx();
592
+ dropped.font = whole.font.replace(', Keeps', '');
593
+ dropped.letterSpacing = `${t}px`;
594
+ expect(dropped.measureText(whole.text).width - whole.width).toBeGreaterThan(3);
595
+ });
596
+ it('moves the pen past a sideways run by the width it was measured at', () => {
597
+ // "first" then a Han character in one text: the character stands
598
+ // after the run's natural width and the tracking of its five letters,
599
+ // where a browser that keeps the ligature puts it.
600
+ const cellAt = (keeps) => {
601
+ const { ctx, runs } = sheetCanvas(keeps);
602
+ ctx.letterSpacing = '0.5px';
603
+ const outer = setVerticalPaint({ region: 'mainland' });
604
+ fillFlowText(ctx, 'first\u697C', 30, 50);
605
+ setVerticalPaint(outer);
606
+ expect(ctx.letterSpacing).toBe('0.5px');
607
+ return runs.find((r) => r.text === '\u697C');
608
+ };
609
+ const cut = cellAt(false);
610
+ const whole = cellAt(true);
611
+ expect(cut.x).toBeCloseTo(whole.x, 6);
612
+ expect(cut.y).toBeCloseTo(whole.y, 6);
613
+ // Measured without its ligature the run is one letter's advance (a
614
+ // third of an em less the ligature's saving: 1 px here) longer.
615
+ const dropped = new BrowserCtx();
616
+ dropped.letterSpacing = '0.5px';
617
+ expect(dropped.measureText('first').width - (20 + 5 * 0.5)).toBeCloseTo(1, 6);
566
618
  });
567
619
  });
568
620
  describe('a tracked line in HTML, either direction (#685)', () => {
@@ -584,4 +636,293 @@ describe('a tracked line in HTML, either direction (#685)', () => {
584
636
  expect(html).not.toMatch(new RegExp(`<span[^>]*letter-spacing:0;[^>]*>${SHALOM}</span>`));
585
637
  });
586
638
  });
639
+ // #703: letter-spacing never changes the glyphs. What #663 and #685 left
640
+ // out is painted by the same rule: design text (running heads, openers,
641
+ // callout titles, balloon lettering), the sideways Latin runs of a
642
+ // vertical line (above), the Western runs of a line of the CJK composer,
643
+ // and Hebrew words. And a Hebrew run of a tracked design text keeps the
644
+ // tracking it was measured with.
645
+ const container = { x: 20, y: 10, width: 300, height: 40 };
646
+ const stubPage = { index: 0, pageLabel: '1' };
647
+ const placeholders = { kind: 'header', page: stubPage, allPages: [stubPage], metadata: {}, chapterTitleByPageIndex: [] };
648
+ const T = 0.2;
649
+ /** A running head tracked by {@link T} px after each letter (72 dpi). */
650
+ const head = (content, extra = {}) => ({
651
+ kind: 'text', id: 'rh', content, fontSize: pt(10), letterSpacing: pt(T), overflow: 'wrap',
652
+ placement: { anchor: { to: 'container', edge: 'top-left' }, size: { width: 'auto' } },
653
+ ...extra,
654
+ });
655
+ const slotOf = (el) => layoutSlotToVdt(resolveDesignSlot({ elements: [el] }), container, 0, placeholders, 72);
656
+ const textOf = (slot) => slot.blocks.find((b) => b.kind === 'text');
657
+ function paintedSlot(slot, keeps = false) {
658
+ const { ctx, runs, strokes } = sheetCanvas(keeps);
659
+ renderHeaderFooterSlot(ctx, slot);
660
+ return { runs, strokes, ctx };
661
+ }
662
+ const where = (runs) => runs.map((r) => [r.text, +leftOf(r).toFixed(6), r.spacing]);
663
+ describe('a tracked design text on canvas (#703)', () => {
664
+ it('a running head with ligatures is painted in pieces and takes its measured width', () => {
665
+ const slot = slotOf(head('first office'));
666
+ const block = textOf(slot);
667
+ const line = block.lines[0];
668
+ expect(block.letterSpacingPx).toBeCloseTo(T, 6);
669
+ // Measured with its ligatures: fi 5, ffi 7.5, the rest 5 a letter, the
670
+ // space 2.5, and the tracking after each of its twelve characters.
671
+ expect(line.width).toBeCloseTo(5 + 15 + 2.5 + 5 + 7.5 + 10 + 12 * T, 6);
672
+ const x0 = block.bbox.x + line.xOffset;
673
+ const { runs, ctx } = paintedSlot(slot);
674
+ expect(where(runs)).toEqual([
675
+ ['fi', x0, 0],
676
+ ['rst o', +(x0 + 5 + T).toFixed(6), T],
677
+ ['ffi', +(x0 + 27.5 + 6 * T).toFixed(6), 0],
678
+ ['ce', +(x0 + 35 + 7 * T).toFixed(6), T],
679
+ ]);
680
+ expect(ctx.letterSpacing).toBe('0px');
681
+ // Its ink ends where the line does, less the tracking the letters of
682
+ // its two ligatures do not take (one for fi, two for ffi).
683
+ const last = runs[runs.length - 1];
684
+ const ink = rightOf(last) - T;
685
+ const place = x0 + line.width - T;
686
+ expect(place - ink).toBeCloseTo(3 * T, 6);
687
+ // Painted as one text under the letter-spacing it was 2.5 px wider:
688
+ // the letters of two ligatures set apart.
689
+ const dropped = new BrowserCtx();
690
+ dropped.letterSpacing = `${T}px`;
691
+ expect(dropped.measureText('first office').width - line.width).toBeCloseTo(2.5, 6);
692
+ });
693
+ it('a text with no ligature, and any text in a browser that keeps them, is one fillText as before', () => {
694
+ const plain = slotOf(head('RUNNING HEAD'));
695
+ const x0 = textOf(plain).bbox.x + textOf(plain).lines[0].xOffset;
696
+ expect(where(paintedSlot(plain).runs)).toEqual([['RUNNING HEAD', x0, T]]);
697
+ const slot = slotOf(head('first office'));
698
+ expect(where(paintedSlot(slot, true).runs)).toEqual([['first office', x0, T]]);
699
+ // And an untracked one is never asked about.
700
+ const untracked = slotOf(head('first office', { letterSpacing: pt(0) }));
701
+ const { ctx, runs } = sheetCanvas();
702
+ const measure = ctx.measureText;
703
+ let measured = 0;
704
+ ctx.measureText = (s) => { measured++; return measure(s); };
705
+ renderHeaderFooterSlot(ctx, untracked);
706
+ expect(runs.map((r) => [r.text, r.spacing])).toEqual([['first office', 0]]);
707
+ expect(measured).toBe(0);
708
+ });
709
+ it('a bold run is cut in its own face, each run from where the layout put it', () => {
710
+ const slot = slotOf(head('the **first** office', { inlineMarks: true }));
711
+ const block = textOf(slot);
712
+ const line = block.lines[0];
713
+ expect(line.runs.map((r) => r.text)).toEqual(['the ', 'first', ' office']);
714
+ const { runs } = paintedSlot(slot);
715
+ expect(runs.map((r) => r.text)).toEqual(['the ', 'fi', 'rst', ' o', 'ffi', 'ce']);
716
+ const starts = line.runs.map((_, k) => block.bbox.x + line.xOffset + line.runs.slice(0, k).reduce((w, r) => w + r.width, 0));
717
+ expect(leftOf(runs[0])).toBeCloseTo(starts[0], 6);
718
+ expect(leftOf(runs[1])).toBeCloseTo(starts[1], 6);
719
+ expect(leftOf(runs[3])).toBeCloseTo(starts[2], 6);
720
+ // The bold word in the bold face, ligature and letters alike.
721
+ expect(runs[1].font).toBe(line.runs[1].fontString);
722
+ expect(runs[2].font).toBe(line.runs[1].fontString);
723
+ expect(runs[1].font).not.toBe(runs[0].font);
724
+ expect(runs.filter((r) => r.text === 'fi' || r.text === 'ffi').every((r) => r.spacing === 0)).toBe(true);
725
+ // Each run ends inside its place.
726
+ expect(rightOf(runs[2]) - T).toBeLessThanOrEqual(starts[2] + 1e-6);
727
+ expect(rightOf(runs[5]) - T).toBeLessThanOrEqual(starts[2] + line.runs[2].width + 1e-6);
728
+ });
729
+ it('inside a mirrored frame the pieces of a line read from its box\'s left, turned once', () => {
730
+ const block = textOf(slotOf(head('first office')));
731
+ const paint = (keeps) => {
732
+ const { ctx, runs } = sheetCanvas(keeps);
733
+ const end = beginMirroredFlow(ctx, 400);
734
+ renderTextBlock(ctx, block);
735
+ end();
736
+ return runs;
737
+ };
738
+ const cut = paint(false);
739
+ const [whole] = paint(true);
740
+ expect(cut.map((r) => r.text)).toEqual(['fi', 'rst o', 'ffi', 'ce']);
741
+ expect(cut.every((r) => r.det > 0 && r.ux === 1)).toBe(true);
742
+ expect(leftOf(cut[0])).toBeCloseTo(leftOf(whole), 6);
743
+ for (let k = 1; k < cut.length; k++)
744
+ expect(leftOf(cut[k])).toBeGreaterThan(leftOf(cut[k - 1]));
745
+ expect(rightOf(cut[3])).toBeLessThanOrEqual(rightOf(whole) + 1e-6);
746
+ expect(rightOf(whole) - rightOf(cut[3])).toBeCloseTo(3 * T, 6);
747
+ });
748
+ it('an outlined text strokes the same pieces it fills, a hollow one only strokes them', () => {
749
+ const block = textOf(slotOf(head('first office')));
750
+ const paint = (stroke) => {
751
+ const { ctx, runs, strokes } = sheetCanvas();
752
+ renderTextBlock(ctx, { ...block, stroke });
753
+ return { runs, strokes };
754
+ };
755
+ const outlined = paint({ widthPx: 1, color: '#000000' });
756
+ expect(outlined.runs.map((r) => r.text)).toEqual(['fi', 'rst o', 'ffi', 'ce']);
757
+ expect(where(outlined.strokes)).toEqual(where(outlined.runs));
758
+ const hollow = paint({ widthPx: 1, color: '#000000', hollow: true });
759
+ expect(hollow.runs).toEqual([]);
760
+ expect(where(hollow.strokes)).toEqual(where(outlined.runs));
761
+ });
762
+ it('a balloon\'s lettering and its halo are painted in the same pieces', () => {
763
+ const block = textOf(slotOf(head('first office')));
764
+ const balloon = {
765
+ id: 'b', panelIndex: 0, order: 0, kind: 'sfx', style: 'sfx', sourceStart: 0, sourceEnd: 0, group: 0,
766
+ text: [block], bbox: block.bbox, halo: { width: 1, color: '#ffffff' },
767
+ };
768
+ const { ctx, runs, strokes } = sheetCanvas();
769
+ renderComicBalloon(ctx, balloon);
770
+ // The halo (filled and stroked), then the letters over it.
771
+ const pieces = ['fi', 'rst o', 'ffi', 'ce'];
772
+ expect(strokes.map((r) => r.text)).toEqual(pieces);
773
+ expect(runs.map((r) => r.text)).toEqual([...pieces, ...pieces]);
774
+ expect(where(runs.slice(0, 4))).toEqual(where(runs.slice(4)));
775
+ expect(where(strokes)).toEqual(where(runs.slice(4)));
776
+ });
777
+ it('a line with CJK text keeps the ligature of its Latin word', () => {
778
+ const slot = slotOf(head('楼 first'));
779
+ const { runs } = paintedSlot(slot);
780
+ // The design composer sets the Han character, the space and the word
781
+ // as runs of their own.
782
+ expect(runs.map((r) => [r.text, r.spacing])).toEqual([['楼', T], [' ', T], ['fi', 0], ['rst', T]]);
783
+ });
784
+ });
785
+ const calloutConfig = (config) => ({
786
+ ...config,
787
+ page: { ...config.page, width: pt(300), height: pt(300) },
788
+ calloutStyles: [{ id: 'd', titleStyle: { letterSpacing: pt(0.5) } }],
789
+ });
790
+ const CALLOUT_MD = 'Text.\n\n:::callout{type="d" title="first office"}\nOne line.\n:::\n';
791
+ describe('a tracked callout title (#703)', () => {
792
+ for (const [name, config] of [['a left-to-right page', CONFIG], ['a right-to-left page', RTL]]) {
793
+ it(`${name}: the title in pieces where the whole title would stand`, () => {
794
+ const doc = buildDocument({ markdown: CALLOUT_MD }, calloutConfig(config));
795
+ const frame = doc.blocks.find((b) => b.type === 'callout');
796
+ const title = frame.designOverlay.blocks.find((b) => b.kind === 'text');
797
+ expect(title.letterSpacingPx).toBeCloseTo(0.5, 6);
798
+ const words = againstWholeWords(doc);
799
+ expect(words.map((w) => w.map((r) => r.text))).toEqual([['fi', 'rst o', 'ffi', 'ce']]);
800
+ const [pieces] = words;
801
+ for (let k = 1; k < pieces.length; k++)
802
+ expect(leftOf(pieces[k])).toBeGreaterThan(leftOf(pieces[k - 1]));
803
+ });
804
+ }
805
+ });
806
+ describe('a tracked Hebrew word of a face with a ligature (#703)', () => {
807
+ for (const [name, config, dir] of [['a right-to-left line of a left-to-right page', CONFIG, ' {dir=rtl}'], ['a line of a right-to-left page', RTL, '']]) {
808
+ it(`${name}: its pieces from the right end of its box, each painted right to left`, () => {
809
+ const doc = buildDocument({ markdown: `## ${ISRAEL} ${SALAM} ${SHALOM}${dir}` }, tracked2(config));
810
+ const t = 0.5;
811
+ const cut = runsOn(doc);
812
+ const whole = runsOn(doc, 0, true);
813
+ // The Arabic word and the Hebrew one with no ligature: whole, as before.
814
+ expect(cut.filter((r) => r.text === SALAM).map((r) => [r.spacing, r.direction])).toEqual([[0, 'rtl']]);
815
+ expect(cut.filter((r) => r.text === SHALOM).map((r) => [r.spacing, r.direction])).toEqual([[t, 'rtl']]);
816
+ const word = whole.find((r) => r.text === ISRAEL);
817
+ const pieces = cut.filter((r) => r.text !== SALAM && r.text !== SHALOM);
818
+ expect(pieces.map((r) => [r.text, r.spacing, r.direction])).toEqual([[ISRAEL.slice(0, 3), t, 'rtl'], [ISRAEL.slice(3), 0, 'rtl']]);
819
+ expect(pieces.every((r) => r.det > 0 && r.ux === 1)).toBe(true);
820
+ const [letters, ligature] = pieces;
821
+ // The word starts at its right end: its first letters end there.
822
+ expect(rightOf(letters)).toBeCloseTo(rightOf(word), 6);
823
+ // The ligature after them, to their left, inside the word's box:
824
+ // short of its left end by the trailing tracking and the one its
825
+ // second letter does not take.
826
+ expect(rightOf(ligature)).toBeCloseTo(leftOf(letters), 6);
827
+ expect(leftOf(ligature) - leftOf(word)).toBeCloseTo(2 * t, 6);
828
+ // Painted whole under the letter-spacing it overran its segment.
829
+ const seg = headingOf(doc).lines[0].segments.find((sg) => sg.text === ISRAEL);
830
+ expect(seg.width).toBeCloseTo(word.width, 6);
831
+ const dropped = new BrowserCtx();
832
+ dropped.font = word.font;
833
+ dropped.letterSpacing = `${t}px`;
834
+ expect(dropped.measureText(ISRAEL).width).toBeGreaterThan(seg.width + 1);
835
+ });
836
+ }
837
+ it('a Hebrew run of a tracked running head keeps its tracking and its ligature', () => {
838
+ const slot = slotOf(head(`${ISRAEL} first`, { direction: 'ltr' }));
839
+ const block = textOf(slot);
840
+ const line = block.lines[0];
841
+ expect(block.letterSpacingPx).toBeCloseTo(T, 6);
842
+ const hebrew = line.runs.find((r) => r.rtl);
843
+ const x0 = block.bbox.x + line.xOffset;
844
+ const { runs } = paintedSlot(slot);
845
+ const rtl = runs.filter((r) => r.direction === 'rtl');
846
+ expect(rtl.map((r) => [r.text, r.spacing])).toEqual([[ISRAEL.slice(0, 3), T], [ISRAEL.slice(3), 0]]);
847
+ expect(rightOf(rtl[0])).toBeCloseTo(x0 + hebrew.width, 6);
848
+ expect(leftOf(rtl[1])).toBeGreaterThanOrEqual(x0 - 1e-6);
849
+ // The Latin word after it, in its own pieces.
850
+ expect(runs.filter((r) => r.direction !== 'rtl').map((r) => r.text).join('').trim()).toBe('first');
851
+ expect(runs.filter((r) => r.text === 'fi').map((r) => r.spacing)).toEqual([0]);
852
+ });
853
+ it('a Hebrew running head is tracked as it was measured; an Arabic one is not', () => {
854
+ const hebrew = slotOf(head(`${SHALOM} ${SHALOM}`, { direction: 'rtl' }));
855
+ const block = textOf(hebrew);
856
+ expect(block.letterSpacingPx).toBeCloseTo(T, 6);
857
+ // Up to postext 1.27 every right-to-left run was painted untracked,
858
+ // narrower than the width its line was measured at.
859
+ const painted = paintedSlot(hebrew).runs;
860
+ expect(painted.length).toBeGreaterThan(0);
861
+ expect(painted.every((r) => r.spacing === T && r.direction === 'rtl')).toBe(true);
862
+ expect(painted.reduce((w, r) => w + r.width, 0)).toBeCloseTo(block.lines[0].width, 6);
863
+ // A text with Arabic letters is measured and painted untracked.
864
+ const arabic = slotOf(head(`${SALAM} ${SALAM}`, { direction: 'rtl' }));
865
+ expect(textOf(arabic).letterSpacingPx ?? 0).toBe(0);
866
+ expect(paintedSlot(arabic).runs.every((r) => r.spacing === 0)).toBe(true);
867
+ });
868
+ });
869
+ describe('a Western run of a tracked line of the CJK composer (#703)', () => {
870
+ it('keeps its ligature on canvas and asks for it in HTML beside the CJK features', () => {
871
+ const doc = buildDocument({ markdown: '## 红楼 first 梦' }, tracked2({ ...CONFIG, locale: 'zh', cjk: { region: 'mainland' } }));
872
+ const heading = headingOf(doc);
873
+ expect(heading.lines[0].cjkComposed).toBe(true);
874
+ const runs = runsOn(doc);
875
+ expect(runs.filter((r) => /[a-z]/.test(r.text)).map((r) => [r.text, r.spacing])).toEqual([['fi', 0], ['rst', 0.5]]);
876
+ const html = renderToHtml(doc);
877
+ expect(html).toContain("letter-spacing:0.5px;font-feature-settings:'liga' 1,'clig' 1;text-spacing-trim:space-all;text-autospace:no-autospace;font-feature-settings:'chws' 0,'halt' 0,'vchw' 0,'liga' 1,'clig' 1;");
878
+ });
879
+ });
880
+ const withHead = (content, extra = {}, config = CONFIG) => ({
881
+ ...config,
882
+ page: { ...config.page, width: pt(300), margins: { top: pt(40), bottom: pt(10), left: pt(10), right: pt(10) } },
883
+ header: { elements: [head(content, extra)] },
884
+ });
885
+ const LIGA = "font-feature-settings:'liga' 1,'clig' 1;";
886
+ describe('a tracked design text in HTML (#703)', () => {
887
+ it('asks for its ligatures after the letter-spacing', () => {
888
+ const html = renderToHtml(buildDocument({ markdown: 'Text.' }, withHead('first office')));
889
+ expect(html).toContain(`letter-spacing:${T}px;${LIGA}`);
890
+ expect(html).toContain('>first office</span>');
891
+ });
892
+ it('a run in another face asks again after its own font', () => {
893
+ const html = renderToHtml(buildDocument({ markdown: 'Text.' }, withHead('the **first** office', { inlineMarks: true })));
894
+ expect(html).toMatch(/<span style="font:[^;]+;line-height:1;font-feature-settings:'liga' 1,'clig' 1;">first<\/span>/);
895
+ });
896
+ it('an untracked design text carries no feature', () => {
897
+ const html = renderToHtml(buildDocument({ markdown: 'Text.' }, withHead('the **first** office', { inlineMarks: true, letterSpacing: pt(0) })));
898
+ expect(html).not.toContain("'liga'");
899
+ });
900
+ it('a line with CJK text holds both sets of features in one declaration', () => {
901
+ const html = renderToHtml(buildDocument({ markdown: 'Text.' }, withHead('楼 first')));
902
+ expect(html).toContain("font-feature-settings:'chws' 0,'halt' 0,'vchw' 0,'liga' 1,'clig' 1;\">楼</span>");
903
+ // Untracked, the CJK declaration alone, as before.
904
+ const plain = renderToHtml(buildDocument({ markdown: 'Text.' }, withHead('楼 first', { letterSpacing: pt(0) })));
905
+ expect(plain).toContain("font-feature-settings:'chws' 0,'halt' 0,'vchw' 0;\">楼</span>");
906
+ expect(plain).not.toContain("'liga'");
907
+ });
908
+ it('a Hebrew running head keeps the block\'s letter-spacing', () => {
909
+ const html = renderToHtml(buildDocument({ markdown: 'Text.' }, withHead(`${SHALOM} ${SHALOM}`, { direction: 'rtl' })));
910
+ expect(html).toContain(`letter-spacing:${T}px;${LIGA}`);
911
+ expect(html).toContain(SHALOM);
912
+ expect(html).not.toContain('letter-spacing:0;');
913
+ });
914
+ it('a text set vertically asks after each font, which resets the features', () => {
915
+ const html = renderToHtml(buildDocument({ markdown: 'Text.' }, withHead('first office', { writingMode: 'vertical-rl' })));
916
+ expect(html).toContain(`letter-spacing:${T}px;`);
917
+ expect(html).toMatch(/font:[^;"]+;color:[^;"]+;font-feature-settings:'liga' 1,'clig' 1;/);
918
+ });
919
+ it('a tracked line of a vertical page asks for the ligatures of its sideways runs', () => {
920
+ const doc = buildDocument({ markdown: '## first office fire' }, tracked2({ ...CONFIG, layout: { writingMode: 'vertical-rl', layoutType: 'single' } }));
921
+ const html = renderToHtml(doc);
922
+ expect(html).toContain(`letter-spacing:0.5px;${LIGA}`);
923
+ // An untracked vertical line carries none.
924
+ const plain = renderToHtml(buildDocument({ markdown: '## first office fire' }, { ...CONFIG, layout: { writingMode: 'vertical-rl', layoutType: 'single' } }));
925
+ expect(plain).not.toContain("'liga'");
926
+ });
927
+ });
587
928
  //# sourceMappingURL=trackedLigatures.test.js.map