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,583 @@
1
+ /**
2
+ * Contrast check (#748): the text of a laid-out document against the
3
+ * ground it is set on, found on the VDT so it runs as soon as a page is
4
+ * laid out. A tagged PDF says what the text is; this says whether it can
5
+ * be read.
6
+ *
7
+ * Two renditions, since the same pages go to a screen and to a press:
8
+ *
9
+ * - `screen`: the WCAG 2 contrast ratio of the sRGB colours, as the
10
+ * canvas, the HTML and an RGB PDF show them.
11
+ * - `print`: the same ratio worked out from the luminance each colour has
12
+ * on paper — its separation on the job's output profile (the values of
13
+ * a colour authored in CMYK as they are), read back through the profile
14
+ * and taken relative to the bare paper, which is the white of a printed
15
+ * page as the display's white is the white of a screen. Ink is never a
16
+ * perfect black, least of all on uncoated stock: black on newsprint is
17
+ * about 5:1 where a screen gives 21:1, and the number says so. Needs
18
+ * the profile's transform (`options.transform`); without it only the
19
+ * reversed text is checked.
20
+ *
21
+ * The threshold follows the text's size and weight (large text: 18 pt, or
22
+ * 14 pt bold) and the level asked (`contrast.level`, AA or AAA).
23
+ *
24
+ * In print, text knocked out of an inked ground is reported on its own
25
+ * (`reversedText`) when it is small, italic or light: its strokes fill in
26
+ * on press whatever the ratio says.
27
+ *
28
+ * What it reads: the lines of every block (inline bold, italic, reference
29
+ * and chip colours included), list markers, drop caps, captions, notes and
30
+ * table cells, and the text of design slots (running heads, openers,
31
+ * heading designs, box titles). The ground is the topmost fill under the
32
+ * text: a design box, a callout, a caption bar, a table cell, a chip, else
33
+ * the page's paper colour; a translucent colour is blended with what is
34
+ * under it. Text over a picture is skipped (its ground is not a colour),
35
+ * as are comic lettering, ruby and formulas.
36
+ */
37
+ import { flowRectToPage, tableCellFill } from './vdt';
38
+ import { labToXyz } from './color/transform';
39
+ import { authoredCmykColors } from './color/authored';
40
+ import { resolveContrastConfig } from './defaults/contrast';
41
+ import { parseFontString } from './measure/fontString';
42
+ import { dimensionToPx } from './units';
43
+ function parseColor(color) {
44
+ if (!color)
45
+ return undefined;
46
+ const c = color.trim().toLowerCase();
47
+ if (c === 'transparent')
48
+ return { r: 255, g: 255, b: 255, a: 0 };
49
+ let m = /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})?$/.exec(c);
50
+ if (m)
51
+ return { r: parseInt(m[1], 16), g: parseInt(m[2], 16), b: parseInt(m[3], 16), a: m[4] ? parseInt(m[4], 16) / 255 : 1 };
52
+ m = /^#([0-9a-f])([0-9a-f])([0-9a-f])([0-9a-f])?$/.exec(c);
53
+ if (m)
54
+ return { r: parseInt(m[1] + m[1], 16), g: parseInt(m[2] + m[2], 16), b: parseInt(m[3] + m[3], 16), a: m[4] ? parseInt(m[4] + m[4], 16) / 255 : 1 };
55
+ return undefined;
56
+ }
57
+ const hexByte = (v) => Math.max(0, Math.min(255, Math.round(v))).toString(16).padStart(2, '0');
58
+ const toHex = (c) => `#${hexByte(c.r)}${hexByte(c.g)}${hexByte(c.b)}`;
59
+ function blend(top, under) {
60
+ if (top.a >= 1)
61
+ return top;
62
+ return { r: top.r * top.a + under.r * (1 - top.a), g: top.g * top.a + under.g * (1 - top.a), b: top.b * top.a + under.b * (1 - top.a) };
63
+ }
64
+ /** `top` painted over `under`, as `#rrggbb`: a translucent colour
65
+ * (`#rrggbbaa`) blended, an opaque one as it is. `under` reads as opaque.
66
+ * A colour that is no hex gives `under`. */
67
+ export function blendColors(top, under) {
68
+ const u = parseColor(under) ?? { r: 255, g: 255, b: 255, a: 1 };
69
+ const t = parseColor(top);
70
+ return toHex(t ? blend(t, u) : u);
71
+ }
72
+ const channel = (v) => {
73
+ const s = v / 255;
74
+ return s <= 0.04045 ? s / 12.92 : ((s + 0.055) / 1.055) ** 2.4;
75
+ };
76
+ /** The relative luminance of an sRGB colour (WCAG 2), 0 for black to 1 for
77
+ * white. Alpha is ignored; a colour that is no hex reads as black. */
78
+ export function relativeLuminance(color) {
79
+ const c = parseColor(color);
80
+ if (!c)
81
+ return 0;
82
+ return 0.2126 * channel(c.r) + 0.7152 * channel(c.g) + 0.0722 * channel(c.b);
83
+ }
84
+ const ratioOf = (l1, l2) => (Math.max(l1, l2) + 0.05) / (Math.min(l1, l2) + 0.05);
85
+ /** The WCAG 2 contrast ratio of two sRGB colours, 1 to 21. */
86
+ export function contrastRatio(a, b) {
87
+ return ratioOf(relativeLuminance(a), relativeLuminance(b));
88
+ }
89
+ /** Whether text counts as large (WCAG 2): 18 pt, or 14 pt at a weight of
90
+ * 700 and over. */
91
+ export function isLargeText(sizePt, weight = 400) {
92
+ return sizePt >= 18 - 1e-6 || (sizePt >= 14 - 1e-6 && weight >= 700);
93
+ }
94
+ /** The ratio a level asks: AA 4.5:1 (3:1 for large text), AAA 7:1
95
+ * (4.5:1). */
96
+ export function contrastThreshold(level, large) {
97
+ if (level === 'AAA')
98
+ return large ? 4.5 : 7;
99
+ return large ? 3 : 4.5;
100
+ }
101
+ /** The process values a colour prints with, percent: its authored CMYK,
102
+ * else its separation on the output profile. */
103
+ export function printSeparation(color, context) {
104
+ const c = parseColor(color) ?? { r: 0, g: 0, b: 0, a: 1 };
105
+ const exact = context.authored?.get(toHex(c));
106
+ if (exact)
107
+ return exact;
108
+ const k = context.transform.fromRgb(c.r / 255, c.g / 255, c.b / 255);
109
+ return { c: k.c * 100, m: k.m * 100, y: k.y * 100, k: k.k * 100 };
110
+ }
111
+ /** The luminance a colour has printed, relative to the bare paper: its
112
+ * separation read back through the profile (media-relative), 0 to 1.
113
+ * Paper is 1, as a display's white is in the screen measure; solid black
114
+ * is about 0.02 on coated stock and 0.1 to 0.17 on newsprint. */
115
+ export function printLuminance(color, context) {
116
+ const s = printSeparation(color, context);
117
+ const lab = context.transform.toLab({ c: s.c / 100, m: s.m / 100, y: s.y / 100, k: s.k / 100 });
118
+ return Math.max(0, Math.min(1, labToXyz(lab).Y));
119
+ }
120
+ /** The contrast ratio of two colours on paper: the WCAG formula over
121
+ * their printed luminances. */
122
+ export function printContrastRatio(a, b, context) {
123
+ return ratioOf(printLuminance(a, context), printLuminance(b, context));
124
+ }
125
+ /** The renditions a document is checked in under `contrast.mode`: with
126
+ * `'auto'`, the screen always and print for a book set up for print (a
127
+ * PDF/X standard, a CMYK PDF, or crop marks). */
128
+ export function contrastMedia(config, contrast = config.contrast ?? resolveContrastConfig()) {
129
+ if (contrast.mode === 'screen')
130
+ return ['screen'];
131
+ if (contrast.mode === 'print')
132
+ return ['print'];
133
+ if (contrast.mode === 'both')
134
+ return ['screen', 'print'];
135
+ const pdf = config.pdfGeneration;
136
+ const forPrint = (config.print !== undefined && config.print.standard !== 'none')
137
+ || (!!pdf?.forceColorSpace && pdf.colorSpace === 'cmyk')
138
+ || config.page.cutLines.enabled;
139
+ return forPrint ? ['screen', 'print'] : ['screen'];
140
+ }
141
+ // ---------------------------------------------------------------------------
142
+ // The walk
143
+ // ---------------------------------------------------------------------------
144
+ const EPS = 0.5;
145
+ function fontSizePx(fontString) {
146
+ const m = fontString ? /(\d*\.?\d+)px/.exec(fontString) : null;
147
+ return m ? Number(m[1]) : undefined;
148
+ }
149
+ const normal = (color) => color.trim().toLowerCase();
150
+ /**
151
+ * Every text and ground combination `doc` sets, with its ratio on screen
152
+ * and, when `options.transform` is given, on paper — passing or not, one
153
+ * entry per colours, size, weight and slant. Runs whatever
154
+ * `contrast.enabled` says: a host shows these beside its colour fields.
155
+ */
156
+ export function contrastPairs(doc, options = {}) {
157
+ const contrast = options.contrast ?? doc.config.contrast ?? resolveContrastConfig();
158
+ const dpi = doc.config.page.dpi;
159
+ const pxToPt = (px) => (px / dpi) * 72;
160
+ const offset = doc.pageIndexOffset ?? 0;
161
+ const printContext = options.transform
162
+ ? { transform: options.transform, authored: authoredCmykColors(doc.config) }
163
+ : undefined;
164
+ const authored = printContext?.authored ?? authoredCmykColors(doc.config);
165
+ const reversedCfg = contrast.reversedText;
166
+ const minPt = pxToPt(dimensionToPx(reversedCfg.minSize, dpi));
167
+ const minFinePt = pxToPt(dimensionToPx(reversedCfg.minFineSize, dpi));
168
+ const pairs = new Map();
169
+ const printLum = new Map();
170
+ const lumOnPaper = (hex) => {
171
+ let v = printLum.get(hex);
172
+ if (v === undefined)
173
+ printLum.set(hex, (v = printLuminance(hex, printContext)));
174
+ return v;
175
+ };
176
+ /** Inks of a colour: exact with the transform or an authored CMYK, else
177
+ * one for a neutral and three for any other colour. */
178
+ const inksOf = (hex) => {
179
+ const sep = authored.get(hex) ?? (printContext ? printSeparation(hex, printContext) : undefined);
180
+ if (sep)
181
+ return [sep.c, sep.m, sep.y, sep.k].filter((v) => v > EPS).length;
182
+ if (hex === '#ffffff')
183
+ return 0;
184
+ return hex.slice(1, 3) === hex.slice(3, 5) && hex.slice(3, 5) === hex.slice(5, 7) ? 1 : 3;
185
+ };
186
+ for (const page of doc.pages) {
187
+ const pageIndex = page.index + offset;
188
+ const sheet = (rect, inFlow) => (inFlow ? flowRectToPage(page, rect) : rect);
189
+ const paperRaw = page.background ?? doc.config.page.backgroundColor.hex;
190
+ const fills = [{
191
+ rect: { x: -Infinity, y: -Infinity, width: Infinity, height: Infinity },
192
+ color: parseColor(paperRaw) ?? { r: 255, g: 255, b: 255, a: 1 },
193
+ raw: normal(paperRaw),
194
+ }];
195
+ const fill = (rect, color) => {
196
+ const c = parseColor(color);
197
+ if (c && c.a > 0)
198
+ fills.push({ rect, color: c, raw: normal(color) });
199
+ };
200
+ const picture = (rect) => fills.push({ rect });
201
+ /** The ground at a point of the sheet: the fills there from the top
202
+ * one down to the first opaque one, blended over white. Undefined
203
+ * over a picture. */
204
+ const groundAt = (x, y) => {
205
+ const stack = [];
206
+ for (let i = fills.length - 1; i >= 0; i--) {
207
+ const f = fills[i];
208
+ const r = f.rect;
209
+ if (i > 0 && (x < r.x || y < r.y || x > r.x + r.width || y > r.y + r.height))
210
+ continue;
211
+ if (!f.color)
212
+ return undefined;
213
+ if (f.color.a <= 0)
214
+ continue;
215
+ stack.push(f);
216
+ if (f.color.a >= 1)
217
+ break;
218
+ }
219
+ let under = { r: 255, g: 255, b: 255 };
220
+ for (let i = stack.length - 1; i >= 0; i--)
221
+ under = blend(stack[i].color, under);
222
+ return { hex: toHex(under), raw: stack[0]?.raw ?? '#ffffff' };
223
+ };
224
+ const groundIn = (rect) => groundAt(rect.x + rect.width / 2, rect.y + rect.height / 2);
225
+ /** A fill of the element's own over the ground beneath it. */
226
+ const over = (color, beneath) => {
227
+ const c = parseColor(color);
228
+ if (!c || c.a <= 0)
229
+ return beneath;
230
+ if (c.a >= 1)
231
+ return { hex: toHex(c), raw: normal(color) };
232
+ if (!beneath)
233
+ return undefined;
234
+ return { hex: blendColors(color, beneath.hex), raw: normal(color) };
235
+ };
236
+ const note = (color, font, text, ground, rect, role, src, sizeFont = font) => {
237
+ if (!ground)
238
+ return;
239
+ const c = parseColor(color);
240
+ const sizePx = fontSizePx(sizeFont);
241
+ if (!c || c.a <= 0 || sizePx === undefined || sizePx <= 0)
242
+ return;
243
+ const face = font ? parseFontString(font) : null;
244
+ const weight = face?.weight ?? 400;
245
+ const italic = face?.style === 'italic';
246
+ const hex = toHex(blend(c, parseColor(ground.hex)));
247
+ const sizePt = Math.round(pxToPt(sizePx) * 10) / 10;
248
+ const key = `${hex}|${ground.hex}|${normal(color)}|${ground.raw}|${sizePt}|${weight}|${italic ? 'i' : 'n'}`;
249
+ const seen = pairs.get(key);
250
+ if (seen) {
251
+ seen.count++;
252
+ return;
253
+ }
254
+ const large = isLargeText(sizePt, weight);
255
+ const pair = {
256
+ color: hex,
257
+ background: ground.hex,
258
+ textColor: normal(color),
259
+ groundColor: ground.raw,
260
+ sizePt,
261
+ weight,
262
+ italic,
263
+ large,
264
+ role,
265
+ count: 1,
266
+ pageIndex,
267
+ rect,
268
+ ...(src.start !== undefined ? { sourceStart: src.start, ...(src.end !== undefined ? { sourceEnd: src.end } : {}) } : {}),
269
+ text: text.trim().slice(0, 40),
270
+ required: contrastThreshold(contrast.level, large),
271
+ screen: contrastRatio(hex, ground.hex),
272
+ };
273
+ if (printContext)
274
+ pair.print = ratioOf(lumOnPaper(hex), lumOnPaper(ground.hex));
275
+ // Knocked out of an inked ground: lighter than it, and the ground
276
+ // is more than bare paper.
277
+ const lighter = printContext ? lumOnPaper(hex) > lumOnPaper(ground.hex) : relativeLuminance(hex) > relativeLuminance(ground.hex);
278
+ const inks = lighter ? inksOf(ground.hex) : 0;
279
+ if (inks > 0) {
280
+ const reasons = [];
281
+ if (sizePt < minPt - 1e-6)
282
+ reasons.push('small');
283
+ if (sizePt < minFinePt - 1e-6) {
284
+ if (italic)
285
+ reasons.push('italic');
286
+ if (weight <= reversedCfg.lightWeight)
287
+ reasons.push('light');
288
+ }
289
+ if (reasons.length > 0) {
290
+ const fine = reasons.includes('italic') || reasons.includes('light');
291
+ pair.reversed = { reasons, minimumPt: Math.round((fine ? minFinePt : minPt) * 10) / 10, inks };
292
+ }
293
+ }
294
+ pairs.set(key, pair);
295
+ };
296
+ /** The runs of laid-out lines, each in the colour and face the
297
+ * renderers paint it with. */
298
+ const noteLines = (lines, style, ground, rectOf, role, src) => {
299
+ for (const line of lines) {
300
+ const segs = line.segments ?? [];
301
+ const lineSrc = line.sourceStart !== undefined ? { start: line.sourceStart, end: line.sourceEnd } : src;
302
+ if (segs.length === 0) {
303
+ if (line.text.trim())
304
+ note(style.color, style.font, line.text, ground, rectOf(line), role, lineSrc);
305
+ continue;
306
+ }
307
+ const seen = new Set();
308
+ for (const seg of segs) {
309
+ const bold = !!seg.bold;
310
+ const italic = !!seg.italic;
311
+ const segColor = seg.color
312
+ ?? (seg.refResourceId !== undefined && style.refColor ? style.refColor
313
+ : seg.captionLabel && style.labelColor ? style.labelColor
314
+ : bold && style.boldColor ? style.boldColor
315
+ : italic && style.italicColor ? style.italicColor
316
+ : style.color);
317
+ if (seg.kind === 'chip' && seg.chip) {
318
+ const chip = seg.chip;
319
+ const chipGround = over(chip.background, ground);
320
+ for (const run of chip.runs) {
321
+ if (run.text.trim())
322
+ note(chip.color ?? segColor, run.fontString, run.text, chipGround, rectOf(line), 'chip', lineSrc);
323
+ }
324
+ continue;
325
+ }
326
+ if (seg.kind !== 'text' || !seg.text.trim() || seg.sideMarker)
327
+ continue;
328
+ const base = (bold && italic && style.boldItalicFont) || (bold && style.boldFont) || (italic && style.italicFont) || style.font;
329
+ const font = seg.fontString ?? base;
330
+ const key = `${font}|${segColor}`;
331
+ if (seen.has(key))
332
+ continue;
333
+ seen.add(key);
334
+ // A superscript or subscript is judged at its text's size.
335
+ // An inline run in a face or colour of its own is quoted alone.
336
+ const own = bold || italic || seg.color !== undefined || seg.fontString !== undefined || seg.refResourceId !== undefined;
337
+ note(segColor, font, own ? seg.text : line.text, ground, rectOf(line), role, lineSrc, seg.script ? base : font);
338
+ }
339
+ }
340
+ };
341
+ const walkSlot = (slot, inFlow, role) => {
342
+ for (const b of slot?.blocks ?? []) {
343
+ const rect = sheet(b.bbox, inFlow);
344
+ if (b.kind === 'box') {
345
+ fill(rect, b.box.backgroundColor);
346
+ }
347
+ else if (b.kind === 'image') {
348
+ picture(rect);
349
+ }
350
+ else if (b.kind === 'text') {
351
+ if (b.box)
352
+ fill(rect, b.box.backgroundColor);
353
+ const first = b.lines.find((l) => l.text.trim());
354
+ if (!first)
355
+ continue;
356
+ // Under the first line's ink (a horizontal block's lines start
357
+ // `xOffset` from its box's edge, on a baseline given in the
358
+ // slot's own coordinates), else under the box's middle.
359
+ const size = fontSizePx(b.fontString) ?? 0;
360
+ const probe = b.vertical
361
+ ? rect
362
+ : sheet({ x: b.bbox.x + first.xOffset, y: first.baselineY - size * 0.7, width: Math.max(first.width, 1), height: Math.max(size * 0.7, 1) }, inFlow);
363
+ const ground = groundIn(probe);
364
+ // Hollow letters print their outline only.
365
+ const color = b.stroke?.hollow ? b.stroke.color : b.color;
366
+ const src = { start: b.sourceStart, end: b.sourceEnd };
367
+ const fonts = new Set();
368
+ for (const line of b.lines) {
369
+ if (!line.text.trim())
370
+ continue;
371
+ for (const font of line.runs?.length ? line.runs.filter((r) => r.text.trim()).map((r) => r.fontString) : [b.fontString]) {
372
+ if (fonts.has(font))
373
+ continue;
374
+ fonts.add(font);
375
+ note(color, font, line.text, ground, rect, role, src);
376
+ }
377
+ }
378
+ }
379
+ }
380
+ };
381
+ const walkBlock = (block) => {
382
+ if (block.hidden)
383
+ return;
384
+ const src = { start: block.sourceStart, end: block.sourceEnd };
385
+ const heading = block.type === 'heading' || block.headingLevel !== undefined;
386
+ if (block.designOverlay) {
387
+ walkSlot(block.designOverlay, true, heading ? 'heading' : 'design');
388
+ return;
389
+ }
390
+ const box = sheet(block.bbox, true);
391
+ const blockStyle = {
392
+ font: block.fontString,
393
+ boldFont: block.boldFontString,
394
+ italicFont: block.italicFontString,
395
+ boldItalicFont: block.boldItalicFontString,
396
+ color: block.color,
397
+ refColor: block.refColor,
398
+ };
399
+ if (block.comic) {
400
+ // A strip: its art is a picture; only its caption is text.
401
+ const caption = block.stripCaption;
402
+ if (caption) {
403
+ const ground = over(caption.bar?.background, groundIn(box));
404
+ noteLines(block.lines.slice(caption.firstLine, caption.firstLine + caption.lineCount), blockStyle, ground, () => box, 'caption', src);
405
+ }
406
+ picture(box);
407
+ return;
408
+ }
409
+ const rb = block.resourceBlock;
410
+ if (rb) {
411
+ const beneath = groundIn(box);
412
+ const table = rb.table;
413
+ if (table) {
414
+ for (const cell of table.cells ?? []) {
415
+ if (cell.lines.length === 0)
416
+ continue;
417
+ const header = cell.isHeader;
418
+ noteLines(cell.lines, {
419
+ font: header ? table.headerFontString : table.fontString,
420
+ boldFont: header ? table.headerBoldFontString : table.boldFontString,
421
+ italicFont: header ? table.headerItalicFontString : table.italicFontString,
422
+ boldItalicFont: header ? table.headerBoldItalicFontString : table.boldItalicFontString,
423
+ color: header ? table.headerColor : table.color,
424
+ refColor: rb.linkColor,
425
+ }, over(tableCellFill(table, cell), beneath), () => box, 'table', src);
426
+ }
427
+ }
428
+ if (rb.captionLines.length > 0) {
429
+ noteLines(rb.captionLines, {
430
+ font: rb.captionFontString,
431
+ boldFont: rb.captionBoldFontString,
432
+ italicFont: rb.captionItalicFontString,
433
+ boldItalicFont: rb.captionBoldItalicFontString,
434
+ color: rb.captionColor,
435
+ refColor: rb.linkColor,
436
+ labelColor: rb.captionLabelColor,
437
+ }, over(rb.captionBar?.background, beneath), () => box, 'caption', src);
438
+ }
439
+ const noteStyle = {
440
+ font: rb.noteFontString,
441
+ boldFont: rb.noteBoldFontString,
442
+ italicFont: rb.noteItalicFontString,
443
+ boldItalicFont: rb.noteBoldItalicFontString,
444
+ color: rb.noteColor,
445
+ refColor: rb.linkColor,
446
+ };
447
+ if (rb.noteLines.length > 0)
448
+ noteLines(rb.noteLines, noteStyle, beneath, () => box, 'caption', src);
449
+ if (rb.continuesLines.length > 0)
450
+ noteLines(rb.continuesLines, noteStyle, beneath, () => box, 'caption', src);
451
+ return;
452
+ }
453
+ const role = heading ? 'heading' : 'body';
454
+ const ground = groundIn(box);
455
+ if (block.bulletText?.trim()) {
456
+ note(block.bulletColor ?? block.color, block.bulletFontString ?? block.fontString, block.bulletText, ground, box, 'marker', src);
457
+ }
458
+ if (block.dropCap)
459
+ note(block.dropCap.color, block.dropCap.fontString, block.dropCap.text, ground, box, role, src);
460
+ noteLines(block.lines, { ...blockStyle, boldColor: block.boldColor, italicColor: block.italicColor }, ground, (line) => sheet(line.bbox, true), role, src);
461
+ };
462
+ // In paint order: what is painted later lies over what came before.
463
+ walkSlot(page.openerBand, true, 'design');
464
+ for (const column of page.columns)
465
+ for (const block of column.blocks)
466
+ walkBlock(block);
467
+ for (const block of page.floats ?? [])
468
+ walkBlock(block);
469
+ for (const block of page.marginNotes)
470
+ walkBlock(block);
471
+ // A comic page is pictures and lettering from edge to edge.
472
+ if (page.comic)
473
+ picture({ x: 0, y: 0, width: page.width, height: page.height });
474
+ walkSlot(page.lineNumbers, false, 'marker');
475
+ walkSlot(page.header, false, 'runningHead');
476
+ walkSlot(page.footer, false, 'runningHead');
477
+ }
478
+ return [...pairs.values()];
479
+ }
480
+ /**
481
+ * The text of `doc` that does not read: every text and ground pair under
482
+ * the ratio its size, its weight and `contrast.level` ask, in the
483
+ * renditions `contrast.mode` names (`lowContrast`, one finding per pair
484
+ * and threshold, at its first occurrence), and in print the reversed text
485
+ * under the sizes of `contrast.reversedText` (`reversedText`). Worst
486
+ * ratio first. Empty when `contrast.enabled` is off.
487
+ */
488
+ export function contrastDocument(doc, options = {}) {
489
+ const contrast = options.contrast ?? doc.config.contrast ?? resolveContrastConfig();
490
+ if (!contrast.enabled)
491
+ return [];
492
+ const media = options.media ?? contrastMedia(doc.config, contrast);
493
+ const screen = media.includes('screen');
494
+ const print = media.includes('print');
495
+ if (!screen && !print)
496
+ return [];
497
+ const pairs = options.pairs ?? contrastPairs(doc, { ...options, contrast });
498
+ const low = new Map();
499
+ const reversed = new Map();
500
+ // The finding of a pair is its first occurrence, at its smallest size.
501
+ const merge = (into, pair) => {
502
+ into.count += pair.count;
503
+ const earlier = pair.pageIndex < into.pageIndex;
504
+ if (pair.sizePt < into.sizePt) {
505
+ into.sizePt = pair.sizePt;
506
+ into.weight = pair.weight;
507
+ into.italic = pair.italic;
508
+ }
509
+ if (earlier) {
510
+ into.pageIndex = pair.pageIndex;
511
+ into.rect = pair.rect;
512
+ into.text = pair.text;
513
+ into.role = pair.role;
514
+ delete into.sourceStart;
515
+ delete into.sourceEnd;
516
+ if (pair.sourceStart !== undefined)
517
+ into.sourceStart = pair.sourceStart;
518
+ if (pair.sourceEnd !== undefined)
519
+ into.sourceEnd = pair.sourceEnd;
520
+ }
521
+ };
522
+ const base = (pair) => ({
523
+ pageIndex: pair.pageIndex,
524
+ rect: pair.rect,
525
+ ...(pair.sourceStart !== undefined ? { sourceStart: pair.sourceStart } : {}),
526
+ ...(pair.sourceEnd !== undefined ? { sourceEnd: pair.sourceEnd } : {}),
527
+ color: pair.color,
528
+ background: pair.background,
529
+ sizePt: pair.sizePt,
530
+ weight: pair.weight,
531
+ italic: pair.italic,
532
+ role: pair.role,
533
+ text: pair.text,
534
+ count: pair.count,
535
+ });
536
+ const round = (ratio) => Math.floor(ratio * 100) / 100;
537
+ for (const pair of pairs) {
538
+ const failing = [];
539
+ if (screen && pair.screen < pair.required)
540
+ failing.push('screen');
541
+ if (print && pair.print !== undefined && pair.print < pair.required)
542
+ failing.push('print');
543
+ if (failing.length > 0) {
544
+ const key = `${pair.color}|${pair.background}|${pair.required}`;
545
+ const seen = low.get(key);
546
+ if (seen) {
547
+ merge(seen, pair);
548
+ }
549
+ else {
550
+ low.set(key, {
551
+ ...base(pair),
552
+ kind: 'lowContrast',
553
+ level: contrast.level,
554
+ large: pair.large,
555
+ required: pair.required,
556
+ ...(screen ? { screen: round(pair.screen) } : {}),
557
+ ...(print && pair.print !== undefined ? { print: round(pair.print) } : {}),
558
+ failing,
559
+ });
560
+ }
561
+ }
562
+ if (print && contrast.reversedText.enabled && pair.reversed) {
563
+ const key = `${pair.color}|${pair.background}`;
564
+ const seen = reversed.get(key);
565
+ if (seen) {
566
+ for (const reason of pair.reversed.reasons)
567
+ if (!seen.reasons.includes(reason))
568
+ seen.reasons.push(reason);
569
+ seen.minimumPt = Math.max(seen.minimumPt, pair.reversed.minimumPt);
570
+ merge(seen, pair);
571
+ }
572
+ else {
573
+ reversed.set(key, { ...base(pair), kind: 'reversedText', reasons: [...pair.reversed.reasons], minimumPt: pair.reversed.minimumPt, inks: pair.reversed.inks });
574
+ }
575
+ }
576
+ }
577
+ const worst = (issue) => Math.min(issue.screen ?? Infinity, issue.print ?? Infinity);
578
+ return [
579
+ ...[...low.values()].sort((a, b) => worst(a) - worst(b) || a.pageIndex - b.pageIndex),
580
+ ...[...reversed.values()].sort((a, b) => a.sizePt - b.sizePt || a.pageIndex - b.pageIndex),
581
+ ];
582
+ }
583
+ //# sourceMappingURL=contrast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contrast.js","sourceRoot":"","sources":["../src/contrast.ts"],"names":[],"mappings":"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"}