postext 1.8.6 → 1.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (565) hide show
  1. package/dist/__bench__/cjkChapter.bench.test.d.ts +2 -0
  2. package/dist/__bench__/cjkChapter.bench.test.d.ts.map +1 -0
  3. package/dist/__bench__/cjkChapter.bench.test.js +71 -0
  4. package/dist/__bench__/cjkChapter.bench.test.js.map +1 -0
  5. package/dist/__tests__/bundle.test.js +16 -0
  6. package/dist/__tests__/bundle.test.js.map +1 -1
  7. package/dist/__tests__/canvasDirection.test.d.ts +2 -0
  8. package/dist/__tests__/canvasDirection.test.d.ts.map +1 -0
  9. package/dist/__tests__/canvasDirection.test.js +45 -0
  10. package/dist/__tests__/canvasDirection.test.js.map +1 -0
  11. package/dist/__tests__/chineseLocale.test.d.ts +2 -0
  12. package/dist/__tests__/chineseLocale.test.d.ts.map +1 -0
  13. package/dist/__tests__/chineseLocale.test.js +253 -0
  14. package/dist/__tests__/chineseLocale.test.js.map +1 -0
  15. package/dist/__tests__/chineseNumbering.test.d.ts +2 -0
  16. package/dist/__tests__/chineseNumbering.test.d.ts.map +1 -0
  17. package/dist/__tests__/chineseNumbering.test.js +376 -0
  18. package/dist/__tests__/chineseNumbering.test.js.map +1 -0
  19. package/dist/__tests__/cjk/annotations.test.d.ts +2 -0
  20. package/dist/__tests__/cjk/annotations.test.d.ts.map +1 -0
  21. package/dist/__tests__/cjk/annotations.test.js +483 -0
  22. package/dist/__tests__/cjk/annotations.test.js.map +1 -0
  23. package/dist/__tests__/cjk/annotationsRender.test.d.ts +2 -0
  24. package/dist/__tests__/cjk/annotationsRender.test.d.ts.map +1 -0
  25. package/dist/__tests__/cjk/annotationsRender.test.js +263 -0
  26. package/dist/__tests__/cjk/annotationsRender.test.js.map +1 -0
  27. package/dist/__tests__/cjk/composer.test.d.ts +2 -0
  28. package/dist/__tests__/cjk/composer.test.d.ts.map +1 -0
  29. package/dist/__tests__/cjk/composer.test.js +237 -0
  30. package/dist/__tests__/cjk/composer.test.js.map +1 -0
  31. package/dist/__tests__/cjk/composerEdges.test.d.ts +2 -0
  32. package/dist/__tests__/cjk/composerEdges.test.d.ts.map +1 -0
  33. package/dist/__tests__/cjk/composerEdges.test.js +352 -0
  34. package/dist/__tests__/cjk/composerEdges.test.js.map +1 -0
  35. package/dist/__tests__/cjk/dashRule.test.d.ts +2 -0
  36. package/dist/__tests__/cjk/dashRule.test.d.ts.map +1 -0
  37. package/dist/__tests__/cjk/dashRule.test.js +261 -0
  38. package/dist/__tests__/cjk/dashRule.test.js.map +1 -0
  39. package/dist/__tests__/cjk/fuzz.test.d.ts +2 -0
  40. package/dist/__tests__/cjk/fuzz.test.d.ts.map +1 -0
  41. package/dist/__tests__/cjk/fuzz.test.js +102 -0
  42. package/dist/__tests__/cjk/fuzz.test.js.map +1 -0
  43. package/dist/__tests__/cjk/grid.test.d.ts +2 -0
  44. package/dist/__tests__/cjk/grid.test.d.ts.map +1 -0
  45. package/dist/__tests__/cjk/grid.test.js +261 -0
  46. package/dist/__tests__/cjk/grid.test.js.map +1 -0
  47. package/dist/__tests__/cjk/justifyRender.test.d.ts +2 -0
  48. package/dist/__tests__/cjk/justifyRender.test.d.ts.map +1 -0
  49. package/dist/__tests__/cjk/justifyRender.test.js +139 -0
  50. package/dist/__tests__/cjk/justifyRender.test.js.map +1 -0
  51. package/dist/__tests__/cjk/latinFastPath.test.d.ts +2 -0
  52. package/dist/__tests__/cjk/latinFastPath.test.d.ts.map +1 -0
  53. package/dist/__tests__/cjk/latinFastPath.test.js +208 -0
  54. package/dist/__tests__/cjk/latinFastPath.test.js.map +1 -0
  55. package/dist/__tests__/cjk/markCutsLatin.test.d.ts +2 -0
  56. package/dist/__tests__/cjk/markCutsLatin.test.d.ts.map +1 -0
  57. package/dist/__tests__/cjk/markCutsLatin.test.js +69 -0
  58. package/dist/__tests__/cjk/markCutsLatin.test.js.map +1 -0
  59. package/dist/__tests__/cjk/markRuns.test.d.ts +2 -0
  60. package/dist/__tests__/cjk/markRuns.test.d.ts.map +1 -0
  61. package/dist/__tests__/cjk/markRuns.test.js +347 -0
  62. package/dist/__tests__/cjk/markRuns.test.js.map +1 -0
  63. package/dist/__tests__/cjk/punctuation.test.d.ts +2 -0
  64. package/dist/__tests__/cjk/punctuation.test.d.ts.map +1 -0
  65. package/dist/__tests__/cjk/punctuation.test.js +440 -0
  66. package/dist/__tests__/cjk/punctuation.test.js.map +1 -0
  67. package/dist/__tests__/cjk/punctuationRender.test.d.ts +2 -0
  68. package/dist/__tests__/cjk/punctuationRender.test.d.ts.map +1 -0
  69. package/dist/__tests__/cjk/punctuationRender.test.js +135 -0
  70. package/dist/__tests__/cjk/punctuationRender.test.js.map +1 -0
  71. package/dist/__tests__/cjk/rubyDescenders.test.d.ts +2 -0
  72. package/dist/__tests__/cjk/rubyDescenders.test.d.ts.map +1 -0
  73. package/dist/__tests__/cjk/rubyDescenders.test.js +77 -0
  74. package/dist/__tests__/cjk/rubyDescenders.test.js.map +1 -0
  75. package/dist/__tests__/cjk/runt.test.d.ts +2 -0
  76. package/dist/__tests__/cjk/runt.test.d.ts.map +1 -0
  77. package/dist/__tests__/cjk/runt.test.js +103 -0
  78. package/dist/__tests__/cjk/runt.test.js.map +1 -0
  79. package/dist/__tests__/cjk/sharedMarks.test.d.ts +2 -0
  80. package/dist/__tests__/cjk/sharedMarks.test.d.ts.map +1 -0
  81. package/dist/__tests__/cjk/sharedMarks.test.js +347 -0
  82. package/dist/__tests__/cjk/sharedMarks.test.js.map +1 -0
  83. package/dist/__tests__/cjk/uprightDots.test.d.ts +2 -0
  84. package/dist/__tests__/cjk/uprightDots.test.d.ts.map +1 -0
  85. package/dist/__tests__/cjk/uprightDots.test.js +47 -0
  86. package/dist/__tests__/cjk/uprightDots.test.js.map +1 -0
  87. package/dist/__tests__/cjk/wordJoiner.test.d.ts +2 -0
  88. package/dist/__tests__/cjk/wordJoiner.test.d.ts.map +1 -0
  89. package/dist/__tests__/cjk/wordJoiner.test.js +47 -0
  90. package/dist/__tests__/cjk/wordJoiner.test.js.map +1 -0
  91. package/dist/__tests__/cjk/zhuyinTones.test.d.ts +2 -0
  92. package/dist/__tests__/cjk/zhuyinTones.test.d.ts.map +1 -0
  93. package/dist/__tests__/cjk/zhuyinTones.test.js +72 -0
  94. package/dist/__tests__/cjk/zhuyinTones.test.js.map +1 -0
  95. package/dist/__tests__/contentLocale.test.d.ts +2 -0
  96. package/dist/__tests__/contentLocale.test.d.ts.map +1 -0
  97. package/dist/__tests__/contentLocale.test.js +167 -0
  98. package/dist/__tests__/contentLocale.test.js.map +1 -0
  99. package/dist/__tests__/defaults/cjk.test.d.ts +2 -0
  100. package/dist/__tests__/defaults/cjk.test.d.ts.map +1 -0
  101. package/dist/__tests__/defaults/cjk.test.js +70 -0
  102. package/dist/__tests__/defaults/cjk.test.js.map +1 -0
  103. package/dist/__tests__/design/designTextRender.test.js +31 -0
  104. package/dist/__tests__/design/designTextRender.test.js.map +1 -1
  105. package/dist/__tests__/design/imageAltText.test.d.ts +2 -0
  106. package/dist/__tests__/design/imageAltText.test.d.ts.map +1 -0
  107. package/dist/__tests__/design/imageAltText.test.js +126 -0
  108. package/dist/__tests__/design/imageAltText.test.js.map +1 -0
  109. package/dist/__tests__/exports.test.js +61 -0
  110. package/dist/__tests__/exports.test.js.map +1 -1
  111. package/dist/__tests__/headingLetterSpacing.test.js +1 -1
  112. package/dist/__tests__/headingLetterSpacing.test.js.map +1 -1
  113. package/dist/__tests__/indexChinese.test.d.ts +2 -0
  114. package/dist/__tests__/indexChinese.test.d.ts.map +1 -0
  115. package/dist/__tests__/indexChinese.test.js +190 -0
  116. package/dist/__tests__/indexChinese.test.js.map +1 -0
  117. package/dist/__tests__/parse/annotations.test.d.ts +2 -0
  118. package/dist/__tests__/parse/annotations.test.d.ts.map +1 -0
  119. package/dist/__tests__/parse/annotations.test.js +175 -0
  120. package/dist/__tests__/parse/annotations.test.js.map +1 -0
  121. package/dist/__tests__/parse/attrQuoting.test.js +10 -8
  122. package/dist/__tests__/parse/attrQuoting.test.js.map +1 -1
  123. package/dist/__tests__/parse/chineseText.test.d.ts +2 -0
  124. package/dist/__tests__/parse/chineseText.test.d.ts.map +1 -0
  125. package/dist/__tests__/parse/chineseText.test.js +352 -0
  126. package/dist/__tests__/parse/chineseText.test.js.map +1 -0
  127. package/dist/__tests__/parts.test.js +25 -0
  128. package/dist/__tests__/parts.test.js.map +1 -1
  129. package/dist/__tests__/pipeline/colonListRoom.test.js +20 -0
  130. package/dist/__tests__/pipeline/colonListRoom.test.js.map +1 -1
  131. package/dist/__tests__/presets/hongloumeng.test.d.ts +2 -0
  132. package/dist/__tests__/presets/hongloumeng.test.d.ts.map +1 -0
  133. package/dist/__tests__/presets/hongloumeng.test.js +485 -0
  134. package/dist/__tests__/presets/hongloumeng.test.js.map +1 -0
  135. package/dist/__tests__/vertical/canvasPaint.test.d.ts +2 -0
  136. package/dist/__tests__/vertical/canvasPaint.test.d.ts.map +1 -0
  137. package/dist/__tests__/vertical/canvasPaint.test.js +229 -0
  138. package/dist/__tests__/vertical/canvasPaint.test.js.map +1 -0
  139. package/dist/__tests__/vertical/compositionPaint.test.d.ts +2 -0
  140. package/dist/__tests__/vertical/compositionPaint.test.d.ts.map +1 -0
  141. package/dist/__tests__/vertical/compositionPaint.test.js +538 -0
  142. package/dist/__tests__/vertical/compositionPaint.test.js.map +1 -0
  143. package/dist/__tests__/vertical/geometry.test.d.ts +2 -0
  144. package/dist/__tests__/vertical/geometry.test.d.ts.map +1 -0
  145. package/dist/__tests__/vertical/geometry.test.js +276 -0
  146. package/dist/__tests__/vertical/geometry.test.js.map +1 -0
  147. package/dist/__tests__/vertical/htmlSmoke.test.d.ts +2 -0
  148. package/dist/__tests__/vertical/htmlSmoke.test.d.ts.map +1 -0
  149. package/dist/__tests__/vertical/htmlSmoke.test.js +25 -0
  150. package/dist/__tests__/vertical/htmlSmoke.test.js.map +1 -0
  151. package/dist/__tests__/vertical/htmlTurnedCells.test.d.ts +2 -0
  152. package/dist/__tests__/vertical/htmlTurnedCells.test.d.ts.map +1 -0
  153. package/dist/__tests__/vertical/htmlTurnedCells.test.js +99 -0
  154. package/dist/__tests__/vertical/htmlTurnedCells.test.js.map +1 -0
  155. package/dist/__tests__/vertical/htmlVertical.test.d.ts +2 -0
  156. package/dist/__tests__/vertical/htmlVertical.test.d.ts.map +1 -0
  157. package/dist/__tests__/vertical/htmlVertical.test.js +145 -0
  158. package/dist/__tests__/vertical/htmlVertical.test.js.map +1 -0
  159. package/dist/__tests__/vertical/lineAxis.test.d.ts +2 -0
  160. package/dist/__tests__/vertical/lineAxis.test.d.ts.map +1 -0
  161. package/dist/__tests__/vertical/lineAxis.test.js +128 -0
  162. package/dist/__tests__/vertical/lineAxis.test.js.map +1 -0
  163. package/dist/__tests__/vertical/measurePaint.test.d.ts +2 -0
  164. package/dist/__tests__/vertical/measurePaint.test.d.ts.map +1 -0
  165. package/dist/__tests__/vertical/measurePaint.test.js +259 -0
  166. package/dist/__tests__/vertical/measurePaint.test.js.map +1 -0
  167. package/dist/__tests__/vertical/orientation.test.d.ts +2 -0
  168. package/dist/__tests__/vertical/orientation.test.d.ts.map +1 -0
  169. package/dist/__tests__/vertical/orientation.test.js +153 -0
  170. package/dist/__tests__/vertical/orientation.test.js.map +1 -0
  171. package/dist/__tests__/vertical/stub.d.ts +8 -0
  172. package/dist/__tests__/vertical/stub.d.ts.map +1 -0
  173. package/dist/__tests__/vertical/stub.js +37 -0
  174. package/dist/__tests__/vertical/stub.js.map +1 -0
  175. package/dist/__tests__/vertical/tateChuYoko.test.d.ts +2 -0
  176. package/dist/__tests__/vertical/tateChuYoko.test.d.ts.map +1 -0
  177. package/dist/__tests__/vertical/tateChuYoko.test.js +270 -0
  178. package/dist/__tests__/vertical/tateChuYoko.test.js.map +1 -0
  179. package/dist/__tests__/vertical/uprightResources.test.d.ts +2 -0
  180. package/dist/__tests__/vertical/uprightResources.test.d.ts.map +1 -0
  181. package/dist/__tests__/vertical/uprightResources.test.js +182 -0
  182. package/dist/__tests__/vertical/uprightResources.test.js.map +1 -0
  183. package/dist/__tests__/vertical/verticalDesignText.test.d.ts +2 -0
  184. package/dist/__tests__/vertical/verticalDesignText.test.d.ts.map +1 -0
  185. package/dist/__tests__/vertical/verticalDesignText.test.js +190 -0
  186. package/dist/__tests__/vertical/verticalDesignText.test.js.map +1 -0
  187. package/dist/__tests__/vertical/verticalSpans.d.ts +25 -0
  188. package/dist/__tests__/vertical/verticalSpans.d.ts.map +1 -0
  189. package/dist/__tests__/vertical/verticalSpans.js +39 -0
  190. package/dist/__tests__/vertical/verticalSpans.js.map +1 -0
  191. package/dist/__tests__/vertical/verticalTwins.test.d.ts +2 -0
  192. package/dist/__tests__/vertical/verticalTwins.test.d.ts.map +1 -0
  193. package/dist/__tests__/vertical/verticalTwins.test.js +71 -0
  194. package/dist/__tests__/vertical/verticalTwins.test.js.map +1 -0
  195. package/dist/bundle/adapters.d.ts +14 -5
  196. package/dist/bundle/adapters.d.ts.map +1 -1
  197. package/dist/bundle/adapters.js +4 -3
  198. package/dist/bundle/adapters.js.map +1 -1
  199. package/dist/bundle/codec.d.ts.map +1 -1
  200. package/dist/bundle/codec.js +27 -4
  201. package/dist/bundle/codec.js.map +1 -1
  202. package/dist/bundle/index.d.ts +1 -1
  203. package/dist/bundle/index.d.ts.map +1 -1
  204. package/dist/bundle/manifest.d.ts +6 -4
  205. package/dist/bundle/manifest.d.ts.map +1 -1
  206. package/dist/bundle/manifest.js +31 -32
  207. package/dist/bundle/manifest.js.map +1 -1
  208. package/dist/bundle/types.d.ts +7 -2
  209. package/dist/bundle/types.d.ts.map +1 -1
  210. package/dist/canvas-backend/annotations.d.ts +31 -0
  211. package/dist/canvas-backend/annotations.d.ts.map +1 -0
  212. package/dist/canvas-backend/annotations.js +120 -0
  213. package/dist/canvas-backend/annotations.js.map +1 -0
  214. package/dist/canvas-backend/blockRender.d.ts.map +1 -1
  215. package/dist/canvas-backend/blockRender.js +195 -15
  216. package/dist/canvas-backend/blockRender.js.map +1 -1
  217. package/dist/canvas-backend/decorations.d.ts +5 -0
  218. package/dist/canvas-backend/decorations.d.ts.map +1 -1
  219. package/dist/canvas-backend/decorations.js +27 -0
  220. package/dist/canvas-backend/decorations.js.map +1 -1
  221. package/dist/canvas-backend/headerFooter.d.ts.map +1 -1
  222. package/dist/canvas-backend/headerFooter.js +32 -16
  223. package/dist/canvas-backend/headerFooter.js.map +1 -1
  224. package/dist/canvas-backend/index.d.ts +2 -0
  225. package/dist/canvas-backend/index.d.ts.map +1 -1
  226. package/dist/canvas-backend/index.js +62 -2
  227. package/dist/canvas-backend/index.js.map +1 -1
  228. package/dist/canvas-backend/renderResourceBlock.d.ts.map +1 -1
  229. package/dist/canvas-backend/renderResourceBlock.js +42 -5
  230. package/dist/canvas-backend/renderResourceBlock.js.map +1 -1
  231. package/dist/canvas-backend/segmentText.d.ts +23 -0
  232. package/dist/canvas-backend/segmentText.d.ts.map +1 -0
  233. package/dist/canvas-backend/segmentText.js +41 -0
  234. package/dist/canvas-backend/segmentText.js.map +1 -0
  235. package/dist/canvas-backend/verticalText.d.ts +113 -0
  236. package/dist/canvas-backend/verticalText.d.ts.map +1 -0
  237. package/dist/canvas-backend/verticalText.js +437 -0
  238. package/dist/canvas-backend/verticalText.js.map +1 -0
  239. package/dist/chineseNumerals.d.ts +39 -0
  240. package/dist/chineseNumerals.d.ts.map +1 -0
  241. package/dist/chineseNumerals.js +192 -0
  242. package/dist/chineseNumerals.js.map +1 -0
  243. package/dist/cjkMarks.d.ts +61 -0
  244. package/dist/cjkMarks.d.ts.map +1 -0
  245. package/dist/cjkMarks.js +441 -0
  246. package/dist/cjkMarks.js.map +1 -0
  247. package/dist/columnClip.d.ts +13 -4
  248. package/dist/columnClip.d.ts.map +1 -1
  249. package/dist/columnClip.js +33 -5
  250. package/dist/columnClip.js.map +1 -1
  251. package/dist/configWarnings.d.ts.map +1 -1
  252. package/dist/configWarnings.js +18 -3
  253. package/dist/configWarnings.js.map +1 -1
  254. package/dist/defaults/bodyText.d.ts +4 -1
  255. package/dist/defaults/bodyText.d.ts.map +1 -1
  256. package/dist/defaults/bodyText.js +27 -5
  257. package/dist/defaults/bodyText.js.map +1 -1
  258. package/dist/defaults/calloutStyles.js +1 -1
  259. package/dist/defaults/calloutStyles.js.map +1 -1
  260. package/dist/defaults/captionStyle.d.ts.map +1 -1
  261. package/dist/defaults/captionStyle.js +14 -0
  262. package/dist/defaults/captionStyle.js.map +1 -1
  263. package/dist/defaults/cjk.d.ts +33 -0
  264. package/dist/defaults/cjk.d.ts.map +1 -0
  265. package/dist/defaults/cjk.js +234 -0
  266. package/dist/defaults/cjk.js.map +1 -0
  267. package/dist/defaults/headerFooter.d.ts.map +1 -1
  268. package/dist/defaults/headerFooter.js +2 -0
  269. package/dist/defaults/headerFooter.js.map +1 -1
  270. package/dist/defaults/headingStyles.d.ts.map +1 -1
  271. package/dist/defaults/headingStyles.js +4 -0
  272. package/dist/defaults/headingStyles.js.map +1 -1
  273. package/dist/defaults/headings.d.ts.map +1 -1
  274. package/dist/defaults/headings.js +13 -6
  275. package/dist/defaults/headings.js.map +1 -1
  276. package/dist/defaults/index.d.ts +1 -0
  277. package/dist/defaults/index.d.ts.map +1 -1
  278. package/dist/defaults/index.js +10 -1
  279. package/dist/defaults/index.js.map +1 -1
  280. package/dist/defaults/indexConfig.d.ts +2 -1
  281. package/dist/defaults/indexConfig.d.ts.map +1 -1
  282. package/dist/defaults/indexConfig.js +5 -0
  283. package/dist/defaults/indexConfig.js.map +1 -1
  284. package/dist/defaults/layout.d.ts.map +1 -1
  285. package/dist/defaults/layout.js +7 -0
  286. package/dist/defaults/layout.js.map +1 -1
  287. package/dist/defaults/orderedLists.d.ts +5 -2
  288. package/dist/defaults/orderedLists.d.ts.map +1 -1
  289. package/dist/defaults/orderedLists.js +20 -5
  290. package/dist/defaults/orderedLists.js.map +1 -1
  291. package/dist/defaults/page.d.ts +8 -2
  292. package/dist/defaults/page.d.ts.map +1 -1
  293. package/dist/defaults/page.js +24 -7
  294. package/dist/defaults/page.js.map +1 -1
  295. package/dist/defaults/resourceTypes.d.ts +3 -3
  296. package/dist/defaults/resourceTypes.d.ts.map +1 -1
  297. package/dist/defaults/resourceTypes.js +23 -9
  298. package/dist/defaults/resourceTypes.js.map +1 -1
  299. package/dist/defaults/tableStyle.d.ts.map +1 -1
  300. package/dist/defaults/tableStyle.js +8 -5
  301. package/dist/defaults/tableStyle.js.map +1 -1
  302. package/dist/design/layout.d.ts +33 -0
  303. package/dist/design/layout.d.ts.map +1 -1
  304. package/dist/design/layout.js +124 -18
  305. package/dist/design/layout.js.map +1 -1
  306. package/dist/design/placeholders.d.ts.map +1 -1
  307. package/dist/design/placeholders.js +5 -1
  308. package/dist/design/placeholders.js.map +1 -1
  309. package/dist/design/richText.d.ts +24 -4
  310. package/dist/design/richText.d.ts.map +1 -1
  311. package/dist/design/richText.js +77 -16
  312. package/dist/design/richText.js.map +1 -1
  313. package/dist/html-backend.d.ts.map +1 -1
  314. package/dist/html-backend.js +635 -25
  315. package/dist/html-backend.js.map +1 -1
  316. package/dist/htmlAnnotations.d.ts +29 -0
  317. package/dist/htmlAnnotations.d.ts.map +1 -0
  318. package/dist/htmlAnnotations.js +86 -0
  319. package/dist/htmlAnnotations.js.map +1 -0
  320. package/dist/hyphenate.js +2 -1
  321. package/dist/hyphenate.js.map +1 -1
  322. package/dist/index.d.ts +28 -14
  323. package/dist/index.d.ts.map +1 -1
  324. package/dist/index.js +16 -8
  325. package/dist/index.js.map +1 -1
  326. package/dist/knuthPlass/pretextAdapter.d.ts +4 -1
  327. package/dist/knuthPlass/pretextAdapter.d.ts.map +1 -1
  328. package/dist/knuthPlass/pretextAdapter.js +9 -5
  329. package/dist/knuthPlass/pretextAdapter.js.map +1 -1
  330. package/dist/knuthPlass/richAdapter.d.ts +15 -2
  331. package/dist/knuthPlass/richAdapter.d.ts.map +1 -1
  332. package/dist/knuthPlass/richAdapter.js +16 -6
  333. package/dist/knuthPlass/richAdapter.js.map +1 -1
  334. package/dist/knuthPlass/tracking.d.ts +1 -1
  335. package/dist/knuthPlass/tracking.d.ts.map +1 -1
  336. package/dist/knuthPlass/tracking.js +4 -3
  337. package/dist/knuthPlass/tracking.js.map +1 -1
  338. package/dist/knuthPlass/types.d.ts +3 -0
  339. package/dist/knuthPlass/types.d.ts.map +1 -1
  340. package/dist/lineInk.d.ts +13 -0
  341. package/dist/lineInk.d.ts.map +1 -1
  342. package/dist/lineInk.js +28 -1
  343. package/dist/lineInk.js.map +1 -1
  344. package/dist/locale.d.ts +91 -3
  345. package/dist/locale.d.ts.map +1 -1
  346. package/dist/locale.js +245 -1
  347. package/dist/locale.js.map +1 -1
  348. package/dist/looseLines.d.ts +11 -1
  349. package/dist/looseLines.d.ts.map +1 -1
  350. package/dist/looseLines.js +26 -1
  351. package/dist/looseLines.js.map +1 -1
  352. package/dist/measure/cache.d.ts.map +1 -1
  353. package/dist/measure/cache.js +51 -3
  354. package/dist/measure/cache.js.map +1 -1
  355. package/dist/measure/canvas.d.ts +25 -0
  356. package/dist/measure/canvas.d.ts.map +1 -1
  357. package/dist/measure/canvas.js +90 -1
  358. package/dist/measure/canvas.js.map +1 -1
  359. package/dist/measure/cjk.d.ts +8 -13
  360. package/dist/measure/cjk.d.ts.map +1 -1
  361. package/dist/measure/cjk.js +29 -53
  362. package/dist/measure/cjk.js.map +1 -1
  363. package/dist/measure/cjkAnnotate.d.ts +96 -0
  364. package/dist/measure/cjkAnnotate.d.ts.map +1 -0
  365. package/dist/measure/cjkAnnotate.js +237 -0
  366. package/dist/measure/cjkAnnotate.js.map +1 -0
  367. package/dist/measure/cjkClasses.d.ts +133 -0
  368. package/dist/measure/cjkClasses.d.ts.map +1 -0
  369. package/dist/measure/cjkClasses.js +273 -0
  370. package/dist/measure/cjkClasses.js.map +1 -0
  371. package/dist/measure/cjkCompose.d.ts +86 -0
  372. package/dist/measure/cjkCompose.d.ts.map +1 -0
  373. package/dist/measure/cjkCompose.js +2022 -0
  374. package/dist/measure/cjkCompose.js.map +1 -0
  375. package/dist/measure/cjkPunctuation.d.ts +248 -0
  376. package/dist/measure/cjkPunctuation.d.ts.map +1 -0
  377. package/dist/measure/cjkPunctuation.js +492 -0
  378. package/dist/measure/cjkPunctuation.js.map +1 -0
  379. package/dist/measure/graphemes.d.ts +13 -0
  380. package/dist/measure/graphemes.d.ts.map +1 -0
  381. package/dist/measure/graphemes.js +38 -0
  382. package/dist/measure/graphemes.js.map +1 -0
  383. package/dist/measure/index.d.ts +3 -0
  384. package/dist/measure/index.d.ts.map +1 -1
  385. package/dist/measure/index.js +2 -0
  386. package/dist/measure/index.js.map +1 -1
  387. package/dist/measure/links.d.ts +6 -2
  388. package/dist/measure/links.d.ts.map +1 -1
  389. package/dist/measure/links.js +15 -5
  390. package/dist/measure/links.js.map +1 -1
  391. package/dist/measure/markCuts.d.ts +37 -0
  392. package/dist/measure/markCuts.d.ts.map +1 -0
  393. package/dist/measure/markCuts.js +77 -0
  394. package/dist/measure/markCuts.js.map +1 -0
  395. package/dist/measure/plain.d.ts.map +1 -1
  396. package/dist/measure/plain.js +33 -11
  397. package/dist/measure/plain.js.map +1 -1
  398. package/dist/measure/rich.d.ts +88 -1
  399. package/dist/measure/rich.d.ts.map +1 -1
  400. package/dist/measure/rich.js +233 -111
  401. package/dist/measure/rich.js.map +1 -1
  402. package/dist/measure/rubyLift.d.ts +11 -0
  403. package/dist/measure/rubyLift.d.ts.map +1 -0
  404. package/dist/measure/rubyLift.js +57 -0
  405. package/dist/measure/rubyLift.js.map +1 -0
  406. package/dist/measure/spaces.d.ts +12 -2
  407. package/dist/measure/spaces.d.ts.map +1 -1
  408. package/dist/measure/spaces.js +21 -7
  409. package/dist/measure/spaces.js.map +1 -1
  410. package/dist/measure/types.d.ts +20 -1
  411. package/dist/measure/types.d.ts.map +1 -1
  412. package/dist/measure/types.js.map +1 -1
  413. package/dist/measure/vertical.d.ts +104 -0
  414. package/dist/measure/vertical.d.ts.map +1 -0
  415. package/dist/measure/vertical.js +184 -0
  416. package/dist/measure/vertical.js.map +1 -0
  417. package/dist/numberWords.d.ts +3 -10
  418. package/dist/numberWords.d.ts.map +1 -1
  419. package/dist/numberWords.js +21 -9
  420. package/dist/numberWords.js.map +1 -1
  421. package/dist/numbering.d.ts +23 -5
  422. package/dist/numbering.d.ts.map +1 -1
  423. package/dist/numbering.js +99 -14
  424. package/dist/numbering.js.map +1 -1
  425. package/dist/parse/annotations.d.ts +101 -0
  426. package/dist/parse/annotations.d.ts.map +1 -0
  427. package/dist/parse/annotations.js +556 -0
  428. package/dist/parse/annotations.js.map +1 -0
  429. package/dist/parse/attrs.d.ts +48 -1
  430. package/dist/parse/attrs.d.ts.map +1 -1
  431. package/dist/parse/attrs.js +121 -8
  432. package/dist/parse/attrs.js.map +1 -1
  433. package/dist/parse/blockParser.d.ts.map +1 -1
  434. package/dist/parse/blockParser.js +50 -24
  435. package/dist/parse/blockParser.js.map +1 -1
  436. package/dist/parse/index.d.ts +3 -1
  437. package/dist/parse/index.d.ts.map +1 -1
  438. package/dist/parse/index.js +1 -0
  439. package/dist/parse/index.js.map +1 -1
  440. package/dist/parse/injectSpans.d.ts +3 -1
  441. package/dist/parse/injectSpans.d.ts.map +1 -1
  442. package/dist/parse/injectSpans.js +29 -8
  443. package/dist/parse/injectSpans.js.map +1 -1
  444. package/dist/parse/inlineFormatting.d.ts +38 -6
  445. package/dist/parse/inlineFormatting.d.ts.map +1 -1
  446. package/dist/parse/inlineFormatting.js +139 -26
  447. package/dist/parse/inlineFormatting.js.map +1 -1
  448. package/dist/parse/inlineSnippet.d.ts +2 -1
  449. package/dist/parse/inlineSnippet.d.ts.map +1 -1
  450. package/dist/parse/inlineSnippet.js +6 -2
  451. package/dist/parse/inlineSnippet.js.map +1 -1
  452. package/dist/parse/orientationMarks.d.ts +49 -0
  453. package/dist/parse/orientationMarks.d.ts.map +1 -0
  454. package/dist/parse/orientationMarks.js +138 -0
  455. package/dist/parse/orientationMarks.js.map +1 -0
  456. package/dist/parse/softBreaks.d.ts +56 -0
  457. package/dist/parse/softBreaks.d.ts.map +1 -0
  458. package/dist/parse/softBreaks.js +271 -0
  459. package/dist/parse/softBreaks.js.map +1 -0
  460. package/dist/parse/sourceMapping.d.ts.map +1 -1
  461. package/dist/parse/sourceMapping.js +41 -0
  462. package/dist/parse/sourceMapping.js.map +1 -1
  463. package/dist/parse/types.d.ts +84 -0
  464. package/dist/parse/types.d.ts.map +1 -1
  465. package/dist/pipeline/annotations.d.ts +56 -0
  466. package/dist/pipeline/annotations.d.ts.map +1 -0
  467. package/dist/pipeline/annotations.js +181 -0
  468. package/dist/pipeline/annotations.js.map +1 -0
  469. package/dist/pipeline/build.d.ts.map +1 -1
  470. package/dist/pipeline/build.js +158 -47
  471. package/dist/pipeline/build.js.map +1 -1
  472. package/dist/pipeline/buildBlockKind.d.ts +3 -0
  473. package/dist/pipeline/buildBlockKind.d.ts.map +1 -1
  474. package/dist/pipeline/buildBlockKind.js +5 -3
  475. package/dist/pipeline/buildBlockKind.js.map +1 -1
  476. package/dist/pipeline/buildHelpers.d.ts +36 -6
  477. package/dist/pipeline/buildHelpers.d.ts.map +1 -1
  478. package/dist/pipeline/buildHelpers.js +55 -8
  479. package/dist/pipeline/buildHelpers.js.map +1 -1
  480. package/dist/pipeline/buildMeasurement.d.ts +4 -0
  481. package/dist/pipeline/buildMeasurement.d.ts.map +1 -1
  482. package/dist/pipeline/buildMeasurement.js +3 -1
  483. package/dist/pipeline/buildMeasurement.js.map +1 -1
  484. package/dist/pipeline/calloutLayout.d.ts.map +1 -1
  485. package/dist/pipeline/calloutLayout.js +25 -11
  486. package/dist/pipeline/calloutLayout.js.map +1 -1
  487. package/dist/pipeline/cjkGrid.d.ts +133 -0
  488. package/dist/pipeline/cjkGrid.d.ts.map +1 -0
  489. package/dist/pipeline/cjkGrid.js +191 -0
  490. package/dist/pipeline/cjkGrid.js.map +1 -0
  491. package/dist/pipeline/config.d.ts +13 -9
  492. package/dist/pipeline/config.d.ts.map +1 -1
  493. package/dist/pipeline/config.js +43 -18
  494. package/dist/pipeline/config.js.map +1 -1
  495. package/dist/pipeline/contentWarnings.d.ts +10 -0
  496. package/dist/pipeline/contentWarnings.d.ts.map +1 -1
  497. package/dist/pipeline/contentWarnings.js +174 -2
  498. package/dist/pipeline/contentWarnings.js.map +1 -1
  499. package/dist/pipeline/floatPlacement.d.ts +9 -3
  500. package/dist/pipeline/floatPlacement.d.ts.map +1 -1
  501. package/dist/pipeline/floatPlacement.js +17 -6
  502. package/dist/pipeline/floatPlacement.js.map +1 -1
  503. package/dist/pipeline/headerFooter.d.ts +5 -2
  504. package/dist/pipeline/headerFooter.d.ts.map +1 -1
  505. package/dist/pipeline/headerFooter.js +123 -28
  506. package/dist/pipeline/headerFooter.js.map +1 -1
  507. package/dist/pipeline/headingDesignCuts.d.ts.map +1 -1
  508. package/dist/pipeline/headingDesignCuts.js +3 -1
  509. package/dist/pipeline/headingDesignCuts.js.map +1 -1
  510. package/dist/pipeline/headingStyles.d.ts +9 -3
  511. package/dist/pipeline/headingStyles.d.ts.map +1 -1
  512. package/dist/pipeline/headingStyles.js +23 -5
  513. package/dist/pipeline/headingStyles.js.map +1 -1
  514. package/dist/pipeline/indexDirective.d.ts.map +1 -1
  515. package/dist/pipeline/indexDirective.js +64 -20
  516. package/dist/pipeline/indexDirective.js.map +1 -1
  517. package/dist/pipeline/indexGroups.d.ts +55 -0
  518. package/dist/pipeline/indexGroups.d.ts.map +1 -0
  519. package/dist/pipeline/indexGroups.js +151 -0
  520. package/dist/pipeline/indexGroups.js.map +1 -0
  521. package/dist/pipeline/lists.d.ts +17 -0
  522. package/dist/pipeline/lists.d.ts.map +1 -1
  523. package/dist/pipeline/lists.js +43 -51
  524. package/dist/pipeline/lists.js.map +1 -1
  525. package/dist/pipeline/measureContentBlock.d.ts +3 -0
  526. package/dist/pipeline/measureContentBlock.d.ts.map +1 -1
  527. package/dist/pipeline/measureContentBlock.js +31 -4
  528. package/dist/pipeline/measureContentBlock.js.map +1 -1
  529. package/dist/pipeline/outline.d.ts.map +1 -1
  530. package/dist/pipeline/outline.js +13 -8
  531. package/dist/pipeline/outline.js.map +1 -1
  532. package/dist/pipeline/parts.d.ts +6 -3
  533. package/dist/pipeline/parts.d.ts.map +1 -1
  534. package/dist/pipeline/parts.js +28 -5
  535. package/dist/pipeline/parts.js.map +1 -1
  536. package/dist/pipeline/placeholders.d.ts +11 -0
  537. package/dist/pipeline/placeholders.d.ts.map +1 -1
  538. package/dist/pipeline/placeholders.js +48 -18
  539. package/dist/pipeline/placeholders.js.map +1 -1
  540. package/dist/pipeline/placement.d.ts +10 -6
  541. package/dist/pipeline/placement.d.ts.map +1 -1
  542. package/dist/pipeline/placement.js +33 -16
  543. package/dist/pipeline/placement.js.map +1 -1
  544. package/dist/pipeline/resourceLayout.d.ts +18 -1
  545. package/dist/pipeline/resourceLayout.d.ts.map +1 -1
  546. package/dist/pipeline/resourceLayout.js +109 -21
  547. package/dist/pipeline/resourceLayout.js.map +1 -1
  548. package/dist/pipeline/toc.d.ts.map +1 -1
  549. package/dist/pipeline/toc.js +6 -5
  550. package/dist/pipeline/toc.js.map +1 -1
  551. package/dist/pipeline/verticalMetrics.d.ts +14 -0
  552. package/dist/pipeline/verticalMetrics.d.ts.map +1 -0
  553. package/dist/pipeline/verticalMetrics.js +154 -0
  554. package/dist/pipeline/verticalMetrics.js.map +1 -0
  555. package/dist/types.d.ts +344 -13
  556. package/dist/types.d.ts.map +1 -1
  557. package/dist/vdt.d.ts +396 -6
  558. package/dist/vdt.d.ts.map +1 -1
  559. package/dist/vdt.js +49 -0
  560. package/dist/vdt.js.map +1 -1
  561. package/dist/writingMode.d.ts +156 -0
  562. package/dist/writingMode.d.ts.map +1 -0
  563. package/dist/writingMode.js +291 -0
  564. package/dist/writingMode.js.map +1 -0
  565. package/package.json +1 -1
@@ -0,0 +1,441 @@
1
+ /**
2
+ * The Chinese interlinear marks of a laid-out document (#193): emphasis dots
3
+ * (着重号), the proper-name line (专名号) and the wavy book-title line
4
+ * (书名号甲式), as `VDTLine.marks` — primitives the renderers draw as they
5
+ * are — and the leading checks of marks and ruby (#194).
6
+ *
7
+ * The measurer flags the segments (`VDTLineSegment.cjkMarks`); the marks are
8
+ * placed once the document is laid out, where the renderers paint each
9
+ * segment ({@link segmentPositions}: alignment and the justified word
10
+ * spaces of a line included), in the flow frame of the line. Dots are
11
+ * centred on each character, spacing after it left out, and skip
12
+ * punctuation and spaces; a line spans its run's characters, and where two
13
+ * runs meet each end gives up an eighth of an em (clreq §5.6.1). Marks sit
14
+ * against the characters' em box, centred on the font's central axis:
15
+ * under in horizontal text (left in vertical text), emphasis dots over in
16
+ * vertical text (right); when dots and a line mark the same text on one
17
+ * side, the line is nearer the text.
18
+ */
19
+ import { lineInkExtent, lineTrailingTracking } from './lineInk';
20
+ import { measureTextWidth } from './measure/canvas';
21
+ import { graphemesOf } from './measure/graphemes';
22
+ import { isCjkGrapheme } from './measure/cjkClasses';
23
+ import { CENTRAL, ZHUYIN_SIZE_RATIO, isZhuyin } from './measure/cjkAnnotate';
24
+ import { fontEm } from './measure/vertical';
25
+ import { latinReadingLift } from './measure/rubyLift';
26
+ import { verticalRuns } from './writingMode';
27
+ /**
28
+ * Where the renderers paint each segment of a line: its x (absolute, in
29
+ * the flow frame) and the advance they give it — a word space of a
30
+ * justified line its share of the slack, a centred or right-aligned line
31
+ * shifted by its slack. Mirrors the line painters of the canvas, PDF and
32
+ * HTML backends.
33
+ */
34
+ export function segmentPositions(line, block) {
35
+ const segments = line.segments ?? [];
36
+ const tracking = (block.letterSpacing ?? 0) + (line.letterSpacing ?? 0);
37
+ const lineIndent = line.bbox.x - block.bbox.x;
38
+ const effectiveWidth = block.bbox.width - lineIndent;
39
+ let start = line.bbox.x;
40
+ let justified;
41
+ if (block.textAlign === 'justify') {
42
+ let wordWidth = 0;
43
+ let natural = 0;
44
+ let spaces = 0;
45
+ for (const seg of segments) {
46
+ if (seg.hangs)
47
+ continue;
48
+ if (seg.kind === 'space' && !seg.autospace)
49
+ spaces++;
50
+ else
51
+ wordWidth += seg.width;
52
+ natural += seg.width;
53
+ }
54
+ if (spaces > 0 && ((!line.isLastLine && !line.ragged) || natural > effectiveWidth))
55
+ justified = (effectiveWidth - wordWidth) / spaces;
56
+ }
57
+ else if (block.textAlign === 'center' || block.textAlign === 'right') {
58
+ const trailing = lineTrailingTracking(line, tracking);
59
+ const slack = Math.max(0, effectiveWidth - (lineInkExtent(line, 0).width - trailing));
60
+ start += block.textAlign === 'center' ? slack / 2 : slack;
61
+ }
62
+ const xs = [];
63
+ const widths = [];
64
+ let x = start;
65
+ for (const seg of segments) {
66
+ xs.push(x);
67
+ const w = seg.kind === 'space' && !seg.autospace && justified !== undefined ? justified : seg.width;
68
+ widths.push(w);
69
+ x += w;
70
+ }
71
+ return { xs, widths };
72
+ }
73
+ /** The font a segment is painted in. */
74
+ export function segmentFont(seg, block) {
75
+ if (seg.fontString)
76
+ return seg.fontString;
77
+ if (seg.bold && seg.italic && block.boldItalicFontString)
78
+ return block.boldItalicFontString;
79
+ if (seg.bold && block.boldFontString)
80
+ return block.boldFontString;
81
+ if (seg.italic && block.italicFontString)
82
+ return block.italicFontString;
83
+ return block.fontString;
84
+ }
85
+ /** Characters that take no emphasis dot: punctuation, spaces, controls. */
86
+ const NO_DOT_RE = /^[\p{P}\p{Z}\p{Cc}\p{Cf}]/u;
87
+ /** Mark sizes, in em of the text they mark. */
88
+ const DOT = { dot: 0.16, circle: 0.2, sesame: 0.3 };
89
+ const GAP = 0.06;
90
+ const STROKE = 0.05;
91
+ const OUTLINE = 0.035;
92
+ const LINE_AT = 0.08;
93
+ const WAVE_AT = 0.1;
94
+ const WAVE_HEIGHT = 0.08;
95
+ const WAVE_LENGTH = 0.25;
96
+ /** How far dots move out when a line marks the same text on their side. */
97
+ const PAST_LINE = 0.16;
98
+ /** Where each grapheme of a segment starts and how far it advances, px
99
+ * from the segment's start: CJK characters share the segment's width
100
+ * evenly (the composer only puts characters that advance alike in one
101
+ * segment); anything else is measured and scaled to the segment. Down a
102
+ * vertical line a number set in one upright cell (`:tcy[…]`, or up to
103
+ * `cjk.uprightDigits` digits) is one character: it takes one dot; the
104
+ * letters of an `:upright[…]` run stand one to a cell, whatever their
105
+ * horizontal widths. */
106
+ function graphemeAdvances(seg, width, font, vertical) {
107
+ const graphemes = graphemesOf(seg.text);
108
+ if (graphemes.length === 0)
109
+ return [];
110
+ const out = [];
111
+ if (vertical && seg.tcy)
112
+ return [{ g: seg.text, at: 0, adv: width }];
113
+ if (vertical && seg.orientation === 'upright') {
114
+ const adv = width / graphemes.length;
115
+ graphemes.forEach((g, i) => out.push({ g, at: i * adv, adv }));
116
+ return out;
117
+ }
118
+ if (vertical && seg.orientation !== 'sideways' && vertical.uprightDigits > 0 && /[0-9]/.test(seg.text)) {
119
+ const em = fontEm(font);
120
+ const pieces = verticalRuns(graphemes, vertical.region, vertical.uprightDigits).flatMap((run) => run.cell !== undefined ? [{ g: run.text, w: em * run.cell }] : graphemesOf(run.text).map((g) => ({ g, w: measureTextWidth(g, font) })));
121
+ const sum = pieces.reduce((a, p) => a + p.w, 0);
122
+ const k = sum > 0 ? width / sum : 1;
123
+ let at = 0;
124
+ for (const p of pieces) {
125
+ out.push({ g: p.g, at, adv: p.w * k });
126
+ at += p.w * k;
127
+ }
128
+ return out;
129
+ }
130
+ if (graphemes.every(isCjkGrapheme)) {
131
+ const adv = width / graphemes.length;
132
+ graphemes.forEach((g, i) => out.push({ g, at: i * adv, adv }));
133
+ return out;
134
+ }
135
+ const natural = graphemes.map((g) => measureTextWidth(g, font));
136
+ const sum = natural.reduce((a, b) => a + b, 0);
137
+ const scale = sum > 0 ? width / sum : 1;
138
+ let at = 0;
139
+ graphemes.forEach((g, i) => {
140
+ const adv = natural[i] * scale;
141
+ out.push({ g, at, adv });
142
+ at += adv;
143
+ });
144
+ return out;
145
+ }
146
+ /** The marks of one line (see the module comment), relative to it; empty
147
+ * when it has none. `color` is `cjk.annotationColor` (hex), if set;
148
+ * `vertical` is set on a vertical page. */
149
+ export function lineMarks(line, block, color, vertical) {
150
+ const segments = line.segments;
151
+ if (!segments || !segments.some((s) => s.cjkMarks))
152
+ return [];
153
+ const { xs, widths } = segmentPositions(line, block);
154
+ const x0 = line.bbox.x;
155
+ const tracking = (block.letterSpacing ?? 0) + (line.letterSpacing ?? 0);
156
+ const out = [];
157
+ const paint = color !== undefined ? { color } : {};
158
+ const runs = [];
159
+ const lined = new Set();
160
+ for (const kind of ['line', 'wavy']) {
161
+ let open;
162
+ for (let i = 0; i < segments.length; i++) {
163
+ const seg = segments[i];
164
+ const id = kind === 'line' ? seg.cjkMarks?.properName : seg.cjkMarks?.bookTitle;
165
+ if (seg.kind === 'space' && id === undefined && open) {
166
+ // A space inside a run: the line goes on when the run does.
167
+ let j = i + 1;
168
+ while (j < segments.length && segments[j].kind === 'space')
169
+ j++;
170
+ const nextId = kind === 'line' ? segments[j]?.cjkMarks?.properName : segments[j]?.cjkMarks?.bookTitle;
171
+ if (nextId !== undefined && `${kind}:${nextId}` === open.key)
172
+ continue;
173
+ }
174
+ if (id === undefined || seg.warichu || seg.inserted) {
175
+ open = undefined;
176
+ continue;
177
+ }
178
+ const key = `${kind}:${id}`;
179
+ const font = segmentFont(seg, block);
180
+ const em = fontEm(font);
181
+ const end = xs[i] + widths[i] - (seg.kind === 'text' ? tracking + (seg.tracking ?? 0) : 0);
182
+ if (open && open.key === key) {
183
+ open.to = Math.max(open.to, end);
184
+ open.endSeg = i;
185
+ lined.add(i);
186
+ continue;
187
+ }
188
+ open = { kind, key, from: xs[i], to: end, em, axis: -CENTRAL * em + (seg.baselineShift ?? 0), startSeg: i, endSeg: i };
189
+ runs.push(open);
190
+ lined.add(i);
191
+ }
192
+ }
193
+ // Two runs that meet each give up an eighth of an em.
194
+ for (const a of runs) {
195
+ for (const b of runs) {
196
+ if (a === b || a.kind !== b.kind || b.startSeg !== a.endSeg + 1)
197
+ continue;
198
+ a.to -= a.em / 8;
199
+ b.from += b.em / 8;
200
+ }
201
+ }
202
+ for (const r of runs) {
203
+ const length = r.to - r.from;
204
+ if (length <= 0)
205
+ continue;
206
+ const edge = r.axis + r.em / 2;
207
+ if (r.kind === 'line') {
208
+ out.push({ kind: 'line', x: r.from - x0, y: edge + LINE_AT * r.em, length, thickness: Math.max(0.5, STROKE * r.em), ...paint });
209
+ }
210
+ else {
211
+ out.push({
212
+ kind: 'wavy',
213
+ x: r.from - x0,
214
+ y: edge + WAVE_AT * r.em,
215
+ length,
216
+ thickness: Math.max(0.5, STROKE * r.em * 0.9),
217
+ amplitude: WAVE_HEIGHT * r.em,
218
+ wavelength: WAVE_LENGTH * r.em,
219
+ ...paint,
220
+ });
221
+ }
222
+ }
223
+ // Emphasis dots, one per character.
224
+ segments.forEach((seg, i) => {
225
+ const dots = seg.cjkMarks?.dots;
226
+ if (!dots || seg.kind !== 'text' || seg.warichu || seg.inserted)
227
+ return;
228
+ const font = segmentFont(seg, block);
229
+ const em = fontEm(font);
230
+ const axis = -CENTRAL * em + (seg.baselineShift ?? 0);
231
+ const size = DOT[dots.style] * em;
232
+ const under = dots.position === 'under';
233
+ const past = under && lined.has(i) ? PAST_LINE * em : 0;
234
+ const y = under ? axis + em / 2 + GAP * em + past + size / 2 : axis - em / 2 - GAP * em - size / 2;
235
+ const t = tracking + (seg.tracking ?? 0);
236
+ const inset = seg.ruby ? seg.inkOffset ?? 0 : 0;
237
+ const box = seg.ruby ? Math.max(0, widths[i] - 2 * inset) : widths[i];
238
+ for (const { g, at, adv } of graphemeAdvances(seg, box, font, vertical)) {
239
+ if (NO_DOT_RE.test(g))
240
+ continue;
241
+ out.push({
242
+ kind: dots.style === 'dot' ? 'dot' : dots.style,
243
+ x: xs[i] + inset + at + (adv - t) / 2 - x0,
244
+ y,
245
+ size,
246
+ thickness: Math.max(0.4, OUTLINE * em),
247
+ ...(dots.fill === 'open' ? { open: true } : {}),
248
+ ...paint,
249
+ });
250
+ }
251
+ });
252
+ return out;
253
+ }
254
+ /** How much line gap (em of the text) a line's marks need: half an em on
255
+ * one side, five eighths on both (clreq §5.6.1). 0 when it has none. */
256
+ function marksNeed(line) {
257
+ const sides = new Set();
258
+ for (const seg of line.segments ?? []) {
259
+ const m = seg.cjkMarks;
260
+ if (!m)
261
+ continue;
262
+ if (m.dots)
263
+ sides.add(m.dots.position);
264
+ if (m.properName !== undefined || m.bookTitle !== undefined)
265
+ sides.add('under');
266
+ }
267
+ return sides.size === 0 ? 0 : sides.size > 1 ? 0.625 : 0.5;
268
+ }
269
+ /** How much line gap (em of the text) a line's ruby readings over or under
270
+ * it need: the reading's size (a zhuyin column's, with its tone mark; a
271
+ * Latin reading over the base, with the lift that clears its descenders). */
272
+ function rubyNeed(line, em) {
273
+ let need = 0;
274
+ for (const seg of line.segments ?? []) {
275
+ const r = seg.ruby;
276
+ if (!r || r.position === 'right')
277
+ continue;
278
+ const rtEm = fontEm(r.fontString);
279
+ // A Latin reading over its base stands higher by its lift (rubyLift.ts).
280
+ const lift = r.position === 'under' ? 0 : latinReadingLift(r.text, r.fontString, em);
281
+ const size = isZhuyin(r.text) ? rtEm * ZHUYIN_SIZE_RATIO * (/[ˊˇˋˉ]/.test(r.text) ? 1.75 : 1) : rtEm + lift;
282
+ need = Math.max(need, size / em);
283
+ }
284
+ return need;
285
+ }
286
+ /** The {@link LineReach} of a line whose text is `em` px (its em box
287
+ * centred on the central axis): marks by their drawn extent, readings by
288
+ * their em box (an upright tone mark by its advance across the line). */
289
+ function lineReach(line, em) {
290
+ const top = -(CENTRAL + 0.5) * em;
291
+ const bottom = (0.5 - CENTRAL) * em;
292
+ const reach = { head: 0, foot: 0, headRuby: false, footRuby: false };
293
+ const extend = (lo, hi, ruby) => {
294
+ if (top - lo > reach.head + 1e-9) {
295
+ reach.head = top - lo;
296
+ reach.headRuby = ruby;
297
+ }
298
+ else if (ruby && top - lo > 1e-9)
299
+ reach.headRuby = true;
300
+ if (hi - bottom > reach.foot + 1e-9) {
301
+ reach.foot = hi - bottom;
302
+ reach.footRuby = ruby;
303
+ }
304
+ else if (ruby && hi - bottom > 1e-9)
305
+ reach.footRuby = true;
306
+ };
307
+ for (const m of line.marks ?? []) {
308
+ const half = m.kind === 'line' ? m.thickness / 2 : m.kind === 'wavy' ? (m.amplitude ?? 0) / 2 + m.thickness / 2 : (m.size ?? 0) / 2;
309
+ extend(m.y - half, m.y + half, false);
310
+ }
311
+ for (const seg of line.segments ?? []) {
312
+ const r = seg.ruby;
313
+ if (!r || r.position === 'right')
314
+ continue;
315
+ for (const run of r.runs) {
316
+ const runEm = fontEm(run.fontString);
317
+ if (run.upright) {
318
+ const axis = run.dy - CENTRAL * runEm;
319
+ let w = 0;
320
+ for (const g of graphemesOf(run.text))
321
+ w = Math.max(w, measureTextWidth(g, run.fontString));
322
+ extend(axis - w / 2, axis + w / 2, true);
323
+ }
324
+ else {
325
+ extend(run.dy - (CENTRAL + 0.5) * runEm, run.dy + (0.5 - CENTRAL) * runEm, true);
326
+ }
327
+ }
328
+ }
329
+ return reach;
330
+ }
331
+ /**
332
+ * Set `VDTLine.marks` on every line of the document that holds Chinese
333
+ * marks, and report the paragraphs whose line gap is narrower than their
334
+ * marks or readings need (`cjkMarksExceedLeading`, `rubyExceedsLeading`),
335
+ * once per paragraph. `cjk` is the resolved configuration (its
336
+ * `annotationColor`).
337
+ *
338
+ * The gap between two lines of a column is shared: what the upper line
339
+ * sets under it and the lower one over it (dots under one line and the
340
+ * readings over the next, in one paragraph or across two) must fit in it
341
+ * together. Where they do not, the lower line's paragraph is reported
342
+ * (`rubyExceedsLeading` when readings take part, else
343
+ * `cjkMarksExceedLeading`).
344
+ */
345
+ export function annotateDocument(doc, cjk) {
346
+ const warnings = [];
347
+ const color = cjk?.annotationColor?.hex;
348
+ const reported = new Set();
349
+ const whereOf = (block) => `${block.sourceStart ?? block.lines[0]?.sourceStart ?? block.id}`;
350
+ const atOf = (block) => ({
351
+ ...(block.sourceStart !== undefined ? { sourceStart: block.sourceStart } : block.lines[0]?.sourceStart !== undefined ? { sourceStart: block.lines[0].sourceStart } : {}),
352
+ ...(block.sourceEnd !== undefined ? { sourceEnd: block.sourceEnd } : {}),
353
+ ...(block.pageIndex >= 0 ? { pageIndex: block.pageIndex } : {}),
354
+ });
355
+ /** The lines of each column's annotated paragraphs, in order, with
356
+ * their reach. */
357
+ const columns = new Map();
358
+ for (const block of doc.blocks) {
359
+ if (block.type === 'resource' || block.designOverlay)
360
+ continue;
361
+ let marked = false;
362
+ let ruby = false;
363
+ for (const line of block.lines) {
364
+ const segs = line.segments;
365
+ if (!segs)
366
+ continue;
367
+ if (segs.some((s) => s.cjkMarks)) {
368
+ marked = true;
369
+ const flow = block.pageIndex >= 0 ? doc.pages[block.pageIndex]?.flow : undefined;
370
+ const vertical = flow?.writingMode === 'vertical-rl' ? { region: cjk?.region ?? 'mainland', uprightDigits: cjk?.uprightDigits ?? 2 } : undefined;
371
+ const marks = lineMarks(line, block, color, vertical);
372
+ if (marks.length > 0)
373
+ line.marks = marks;
374
+ }
375
+ // Only the CJK composer sets ruby (#194).
376
+ if (line.cjkComposed && segs.some((s) => s.ruby && s.ruby.position !== 'right'))
377
+ ruby = true;
378
+ }
379
+ if (!marked && !ruby)
380
+ continue;
381
+ const em = fontEm(block.fontString);
382
+ const first = block.lines[0];
383
+ if (!first || em <= 0)
384
+ continue;
385
+ if (block.pageIndex >= 0) {
386
+ // Lines of plain paragraphs between two annotated ones are left
387
+ // out: the gap is then measured across them, and is wide.
388
+ const key = `${block.pageIndex}:${block.columnIndex}`;
389
+ let column = columns.get(key);
390
+ if (!column)
391
+ columns.set(key, (column = []));
392
+ for (const line of block.lines)
393
+ column.push({ line, block, em, reach: lineReach(line, em) });
394
+ }
395
+ const gapEm = (first.bbox.height - em) / em;
396
+ const at = atOf(block);
397
+ const where = whereOf(block);
398
+ if (marked) {
399
+ const need = Math.max(...block.lines.map(marksNeed));
400
+ if (need > 0 && gapEm < need - 1e-6 && !reported.has(`m${where}`)) {
401
+ reported.add(`m${where}`);
402
+ warnings.push({ kind: 'cjkMarksExceedLeading', text: first.text, gapEm: round(gapEm), neededEm: need, ...at });
403
+ }
404
+ }
405
+ if (ruby) {
406
+ const need = Math.max(...block.lines.map((l) => rubyNeed(l, em)));
407
+ if (need > 0 && gapEm < need - 1e-6 && !reported.has(`r${where}`)) {
408
+ reported.add(`r${where}`);
409
+ warnings.push({ kind: 'rubyExceedsLeading', text: first.text, gapEm: round(gapEm), neededEm: round(need), ...at });
410
+ }
411
+ }
412
+ }
413
+ // The gaps two lines of a column share.
414
+ for (const column of columns.values()) {
415
+ for (let i = 1; i < column.length; i++) {
416
+ const a = column[i - 1];
417
+ const b = column[i];
418
+ const need = a.reach.foot + b.reach.head;
419
+ if (need <= 0)
420
+ continue;
421
+ const gap = (b.line.baseline - (CENTRAL + 0.5) * b.em) - (a.line.baseline + (0.5 - CENTRAL) * a.em);
422
+ if (need <= gap + 1e-6)
423
+ continue;
424
+ const ruby = a.reach.footRuby || b.reach.headRuby;
425
+ const key = `${ruby ? 'r' : 'm'}${whereOf(b.block)}`;
426
+ if (reported.has(key))
427
+ continue;
428
+ reported.add(key);
429
+ warnings.push({
430
+ kind: ruby ? 'rubyExceedsLeading' : 'cjkMarksExceedLeading',
431
+ text: b.line.text,
432
+ gapEm: round(gap / b.em),
433
+ neededEm: round(need / b.em),
434
+ ...atOf(b.block),
435
+ });
436
+ }
437
+ }
438
+ return warnings;
439
+ }
440
+ const round = (v) => Math.round(v * 1000) / 1000;
441
+ //# sourceMappingURL=cjkMarks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cjkMarks.js","sourceRoot":"","sources":["../src/cjkMarks.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,11 @@ import type { BoundingBox, VDTBlock, VDTColumn } from './vdt';
2
2
  /** How far the design overlays of `blocks` reach past `x0` on the left and
3
3
  * `x1` on the right, in px (0 when they stay inside). */
4
4
  export declare function designOverlayOverhang(blocks: readonly VDTBlock[], x0: number, x1: number): [number, number];
5
+ /** How far the marks hung past the end of their lines
6
+ * (`cjk.hangingPunctuation`) in `blocks` reach past `x1`, in px (0 when
7
+ * none does). Only the CJK composer hangs a mark, so no other line is
8
+ * looked into. */
9
+ export declare function hangingPunctuationOverhang(blocks: readonly VDTBlock[], x1: number): number;
5
10
  /** How far the design overlays of the heading blocks among `blocks` reach
6
11
  * above `y0`, in px (0 when they stay below it). */
7
12
  export declare function headingDesignOverhangAbove(blocks: readonly VDTBlock[], y0: number): number;
@@ -16,12 +21,16 @@ export declare function headingDesignOverhangAbove(blocks: readonly VDTBlock[],
16
21
  * design may also reach above the column — a band anchored to the top of
17
22
  * the page or of the bleed — and the clip grows up to take that in too
18
23
  * (EF-113), and so does the first block of a column under a page-span
19
- * opener set a little above the column's top (EF-139). The column's foot
20
- * stays the edge: the flow ends there, and a design reaching past it is cut
21
- * and reported (`collectHeadingDesignCuts`).
24
+ * opener set a little above the column's top (EF-139). A CJK mark hung
25
+ * past the end of its line widens it on the right
26
+ * (`cjk.hangingPunctuation`); `hanging` false says no line of the document
27
+ * hangs one (its `cjk.hangingPunctuation` is `'none'`), and the lines are
28
+ * not looked into. The column's foot stays the edge: the flow ends there,
29
+ * and a design reaching past it is cut and reported
30
+ * (`collectHeadingDesignCuts`).
22
31
  * A box frame (a callout) is cut at the column's top as well, with the text
23
32
  * inside it. Shared by the canvas and PDF backends so both paint the same
24
33
  * thing.
25
34
  */
26
- export declare function columnClipRect(col: VDTColumn, dpi: number): BoundingBox;
35
+ export declare function columnClipRect(col: VDTColumn, dpi: number, hanging?: boolean): BoundingBox;
27
36
  //# sourceMappingURL=columnClip.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"columnClip.d.ts","sourceRoot":"","sources":["../src/columnClip.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAG9D;0DAC0D;AAC1D,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAW3G;AAED;qDACqD;AACrD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAO1F;AAcD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,WAAW,CAUvE"}
1
+ {"version":3,"file":"columnClip.d.ts","sourceRoot":"","sources":["../src/columnClip.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAI9D;0DAC0D;AAC1D,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAW3G;AAED;;;mBAGmB;AACnB,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAa1F;AAED;qDACqD;AACrD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAO1F;AAcD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,UAAO,GAAG,WAAW,CAYvF"}
@@ -1,4 +1,5 @@
1
1
  import { dimensionToPx } from './units';
2
+ import { lineInkExtent } from './lineInk';
2
3
  /** How far the design overlays of `blocks` reach past `x0` on the left and
3
4
  * `x1` on the right, in px (0 when they stay inside). */
4
5
  export function designOverlayOverhang(blocks, x0, x1) {
@@ -14,6 +15,27 @@ export function designOverlayOverhang(blocks, x0, x1) {
14
15
  }
15
16
  return [left, right];
16
17
  }
18
+ /** How far the marks hung past the end of their lines
19
+ * (`cjk.hangingPunctuation`) in `blocks` reach past `x1`, in px (0 when
20
+ * none does). Only the CJK composer hangs a mark, so no other line is
21
+ * looked into. */
22
+ export function hangingPunctuationOverhang(blocks, x1) {
23
+ let right = 0;
24
+ for (const block of blocks) {
25
+ if (block.hidden || !block.lines)
26
+ continue;
27
+ for (const line of block.lines) {
28
+ if (!line.cjkComposed)
29
+ continue;
30
+ const segments = line.segments;
31
+ if (!segments || !segments[segments.length - 1]?.hangs)
32
+ continue;
33
+ const { hang } = lineInkExtent(line, 0);
34
+ right = Math.max(right, line.bbox.x + line.bbox.width + hang - x1);
35
+ }
36
+ }
37
+ return right;
38
+ }
17
39
  /** How far the design overlays of the heading blocks among `blocks` reach
18
40
  * above `y0`, in px (0 when they stay below it). */
19
41
  export function headingDesignOverhangAbove(blocks, y0) {
@@ -49,16 +71,22 @@ function firstBlockAbove(blocks, y0) {
49
71
  * design may also reach above the column — a band anchored to the top of
50
72
  * the page or of the bleed — and the clip grows up to take that in too
51
73
  * (EF-113), and so does the first block of a column under a page-span
52
- * opener set a little above the column's top (EF-139). The column's foot
53
- * stays the edge: the flow ends there, and a design reaching past it is cut
54
- * and reported (`collectHeadingDesignCuts`).
74
+ * opener set a little above the column's top (EF-139). A CJK mark hung
75
+ * past the end of its line widens it on the right
76
+ * (`cjk.hangingPunctuation`); `hanging` false says no line of the document
77
+ * hangs one (its `cjk.hangingPunctuation` is `'none'`), and the lines are
78
+ * not looked into. The column's foot stays the edge: the flow ends there,
79
+ * and a design reaching past it is cut and reported
80
+ * (`collectHeadingDesignCuts`).
55
81
  * A box frame (a callout) is cut at the column's top as well, with the text
56
82
  * inside it. Shared by the canvas and PDF backends so both paint the same
57
83
  * thing.
58
84
  */
59
- export function columnClipRect(col, dpi) {
85
+ export function columnClipRect(col, dpi, hanging = true) {
60
86
  const overhang = dimensionToPx({ value: 2, unit: 'pt' }, dpi);
61
- const [left, right] = designOverlayOverhang(col.blocks, col.bbox.x, col.bbox.x + col.bbox.width);
87
+ const [left, overlayRight] = designOverlayOverhang(col.blocks, col.bbox.x, col.bbox.x + col.bbox.width);
88
+ // A mark hung past the measure is shown whole.
89
+ const right = Math.max(overlayRight, hanging ? hangingPunctuationOverhang(col.blocks, col.bbox.x + col.bbox.width) : 0);
62
90
  const above = Math.max(headingDesignOverhangAbove(col.blocks, col.bbox.y), firstBlockAbove(col.blocks, col.bbox.y));
63
91
  return {
64
92
  x: col.bbox.x - overhang - left,
@@ -1 +1 @@
1
- {"version":3,"file":"columnClip.js","sourceRoot":"","sources":["../src/columnClip.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"columnClip.js","sourceRoot":"","sources":["../src/columnClip.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C;0DAC0D;AAC1D,MAAM,UAAU,qBAAqB,CAAC,MAA2B,EAAE,EAAU,EAAE,EAAU;IACvF,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,MAAM;YAAE,SAAS;QACnD,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;YAC3C,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACrC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IACD,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACvB,CAAC;AAED;;;mBAGmB;AACnB,MAAM,UAAU,0BAA0B,CAAC,MAA2B,EAAE,EAAU;IAChF,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK;YAAE,SAAS;QAC3C,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC/B,IAAI,CAAC,IAAI,CAAC,WAAW;gBAAE,SAAS;YAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC/B,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,KAAK;gBAAE,SAAS;YACjE,MAAM,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACxC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;qDACqD;AACrD,MAAM,UAAU,0BAA0B,CAAC,MAA2B,EAAE,EAAU;IAChF,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,MAAM;YAAE,SAAS;QAC/E,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC,MAAM;YAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACrF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;gBAKgB;AAChB,SAAS,eAAe,CAAC,MAA2B,EAAE,EAAU;IAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC;IACvD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACxC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,cAAc,CAAC,GAAc,EAAE,GAAW,EAAE,OAAO,GAAG,IAAI;IACxE,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;IAC9D,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,GAAG,qBAAqB,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxG,+CAA+C;IAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxH,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,0BAA0B,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACpH,OAAO;QACL,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,QAAQ,GAAG,IAAI;QAC/B,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK;QACrB,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,KAAK;QACnD,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,KAAK;KAChC,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"configWarnings.d.ts","sourceRoot":"","sources":["../src/configWarnings.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAMV,aAAa,EAEd,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,OAAO,CAAC;AA0B3D;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,SAAS,GAAG,aAAa,EAAE,CAGxF"}
1
+ {"version":3,"file":"configWarnings.d.ts","sourceRoot":"","sources":["../src/configWarnings.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAMV,aAAa,EAEd,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,aAAa,EAAkB,MAAM,OAAO,CAAC;AA2B3D;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,SAAS,GAAG,aAAa,EAAE,CAGxF"}
@@ -13,6 +13,7 @@ import { dimensionToPx } from './units';
13
13
  import { resolveAllConfig, sideColumnPercentUsed } from './pipeline/config';
14
14
  import { computePageMetrics } from './pipeline/buildHelpers';
15
15
  import { deriveSectionGeometryConfig } from './pipeline/headingStyles';
16
+ import { cjkGridGeometry } from './pipeline/cjkGrid';
16
17
  /** The format fields and the decimal spelling each falls back to. A
17
18
  * `format` is a format field only under `pageNumbering`. */
18
19
  function numberFormatFallback(key, parentKey) {
@@ -47,7 +48,7 @@ function percentText(n) {
47
48
  export function collectConfigWarnings(config) {
48
49
  if (!config)
49
50
  return [];
50
- return [...collectValueWarnings(config), ...collectSideColumnWarnings(config), ...collectUnknownKeyWarnings(config)];
51
+ return [...collectValueWarnings(config), ...collectSideColumnWarnings(config), ...collectUnknownKeyWarnings(config), ...collectCjkGridWarnings(config)];
51
52
  }
52
53
  // The keys of the heading settings, checked against their types: a key
53
54
  // added to (or removed from) a type fails to compile until it is listed
@@ -63,14 +64,14 @@ const BALANCING_KEYS = {
63
64
  };
64
65
  const HEADING_LEVEL_KEYS = {
65
66
  level: true, fontSize: true, lineHeight: true, fontFamily: true, color: true, fontWeight: true,
66
- marginTop: true, marginBottom: true, numberingTemplate: true, italic: true, letterSpacing: true,
67
+ marginTop: true, marginBottom: true, numberingTemplate: true, numberSeparator: true, italic: true, letterSpacing: true,
67
68
  breakBefore: true, span: true, advancedDesign: true, textTransform: true, hidden: true, snapToGrid: true,
68
69
  };
69
70
  const HEADING_STYLE_KEYS = {
70
71
  id: true, name: true, numberingTemplate: true, numbered: true, toc: true, runningChapter: true, header: true, footer: true,
71
72
  margins: true, layout: true, bodyStyle: true, palette: true,
72
73
  fontSize: true, lineHeight: true, fontFamily: true, color: true, fontWeight: true, marginTop: true,
73
- marginBottom: true, italic: true, letterSpacing: true, breakBefore: true, span: true,
74
+ marginBottom: true, numberSeparator: true, italic: true, letterSpacing: true, breakBefore: true, span: true,
74
75
  advancedDesign: true, textTransform: true, hidden: true, snapToGrid: true,
75
76
  };
76
77
  const PARAGRAPH_STYLE_KEYS = {
@@ -220,4 +221,18 @@ function collectSideColumnWarnings(config) {
220
221
  });
221
222
  return out;
222
223
  }
224
+ /** A character grid (`cjk.grid`) with more characters per line or lines
225
+ * per page than the page's margins leave room for: the grid is reduced to
226
+ * what fits (`cjkGridClamped`, `used` the number set). */
227
+ function collectCjkGridWarnings(config) {
228
+ const g = cjkGridGeometry(config);
229
+ if (!g)
230
+ return [];
231
+ const out = [];
232
+ if (g.clamped.charsPerLine !== undefined)
233
+ out.push({ kind: 'cjkGridClamped', path: 'cjk.grid.charsPerLine', value: String(g.clamped.charsPerLine), used: String(g.charsPerLine) });
234
+ if (g.clamped.linesPerPage !== undefined)
235
+ out.push({ kind: 'cjkGridClamped', path: 'cjk.grid.linesPerPage', value: String(g.clamped.linesPerPage), used: String(g.linesPerPage) });
236
+ return out;
237
+ }
223
238
  //# sourceMappingURL=configWarnings.js.map