postext 1.8.6 → 1.9.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 (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 +484 -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,237 @@
1
+ /**
2
+ * Geometry of ruby readings (#194) and warichu notes (#195) inside a line,
3
+ * for the CJK composer.
4
+ *
5
+ * Everything is in the flow frame: `dx` along the line from where the
6
+ * annotated segment starts, `dy` across it from the line's baseline to the
7
+ * annotation's baseline, positive towards the line's foot (down in
8
+ * horizontal text, left in vertical text). A character's em box is centred
9
+ * on the font's central axis, {@link CENTRAL} em above the baseline, the
10
+ * axis vertical text is set on (`VDTFlowFrame.centralBaselines`) and the
11
+ * middle of a CJK face's ideographic em box in horizontal text.
12
+ *
13
+ * - Ruby over or under the base sits in the line gap, against the base's em
14
+ * box, centred on the base; a reading wider than its base widens the base's
15
+ * box (the base is centred in it) less what it may pass the base by: a
16
+ * quarter of the ruby em onto a neighbour without ruby, none past a line
17
+ * edge (the composer shifts it back), and it keeps a quarter of the ruby
18
+ * em from a neighbour's reading (two zhuyin readings: a quarter of the
19
+ * symbols' em).
20
+ * - Zhuyin right of the base (horizontal text) stacks its symbols in a
21
+ * column beside each character, at 60 % of the ruby size (0.3 em by
22
+ * default, clreq §5.5.3.2), the tone mark right of the column with half
23
+ * of its ink above the top of the last symbol (§5.5.3.3), the
24
+ * neutral-tone dot above the first in a tenth of an em; the character's
25
+ * box grows by the column. Zhuyin over the base of vertical text is the
26
+ * same column down the line, its tone mark and dot standing upright.
27
+ * Tone marks and the dot are placed by their ink (the measurer's ink
28
+ * box): fonts set these modifier letters high in their em box.
29
+ * - A warichu note's part on a line folds into two rows of the note size,
30
+ * centred on the line's axis with no gap between them: the upper row
31
+ * takes characters until it is at least half the part (the second row is
32
+ * never the longer), and one more while the lower row would open with a
33
+ * mark that may not start a line or the upper row would end with one
34
+ * that may not end a line (an opening bracket).
35
+ */
36
+ import { DEFAULT_CENTRAL_BASELINE } from '../vdt';
37
+ import { measureInkBox, measureTextWidth, onTextWidthCacheClear } from './canvas';
38
+ import { flowTextWidth, fontEm, measuringVertically } from './vertical';
39
+ import { graphemesOf } from './graphemes';
40
+ import { latinReadingLift } from './rubyLift';
41
+ /** The central axis of a face, in em above its baseline. */
42
+ export const CENTRAL = DEFAULT_CENTRAL_BASELINE;
43
+ /** Zhuyin is set at this fraction of the ruby size (0.3 em of the text for
44
+ * the default half-em ruby). */
45
+ export const ZHUYIN_SIZE_RATIO = 0.6;
46
+ const BOPOMOFO_RE = /[㄀-ㄯㆠ-ㆿ]/;
47
+ /** The zhuyin tone marks: ˊ ˇ ˋ (second to fourth tone), ˉ (first, rarely
48
+ * written) and the neutral-tone dot ˙. */
49
+ const TONE_MARKS = new Set(['ˊ', 'ˇ', 'ˋ', 'ˉ']);
50
+ const NEUTRAL_TONE = '˙';
51
+ /** Whether a reading is zhuyin (bopomofo). */
52
+ export function isZhuyin(reading) {
53
+ return BOPOMOFO_RE.test(reading);
54
+ }
55
+ /** `font` at `sizePx`, style, weight and family kept. */
56
+ export function withFontSize(font, sizePx) {
57
+ const m = /^(.*?)(\d*\.?\d+)px(\s*\/\s*[^\s]+)?\s+(.+)$/.exec(font);
58
+ if (!m)
59
+ return font;
60
+ return `${m[1]}${sizePx}px ${m[4]}`;
61
+ }
62
+ /** The baseline, px from the line's baseline, of text of em `rowEm` whose
63
+ * em box is centred `axis` px from the line's baseline. */
64
+ function baselineOf(axis, rowEm) {
65
+ return axis + CENTRAL * rowEm;
66
+ }
67
+ /** Gap between a base and its zhuyin column, in em of the text. */
68
+ const ZHUYIN_GAP_EM = 0.04;
69
+ /** The space the neutral-tone dot takes along the column, in em of the
70
+ * text (clreq §5.5.3.3: a tenth of the base). */
71
+ const NEUTRAL_SPACE_EM = 0.1;
72
+ /** Where the ink of a tone mark or of the neutral-tone dot is centred, in
73
+ * em above its baseline, when the measurer gives no ink box. */
74
+ const TONE_INK_MID_EM = 0.65;
75
+ const inkMids = new Map();
76
+ onTextWidthCacheClear(() => inkMids.clear());
77
+ /** How far above its baseline the ink of `g` is centred in `font`, px. */
78
+ function inkMid(g, font) {
79
+ const key = `${font}\n${g}`;
80
+ let mid = inkMids.get(key);
81
+ if (mid === undefined) {
82
+ const box = measureInkBox(g, font);
83
+ mid = box && box.ascent + box.descent > 0 ? (box.ascent - box.descent) / 2 : TONE_INK_MID_EM * fontEm(font);
84
+ inkMids.set(key, mid);
85
+ }
86
+ return mid;
87
+ }
88
+ /** The start (`dx`) of an upright cell of em `cellEm` on a vertical line
89
+ * whose glyph's ink is centred `mid` px above its baseline, for the ink
90
+ * to be centred `along` px down the line (see `VDTAnnotationRun.upright`:
91
+ * the cell's glyph stands on the font's central axis). */
92
+ function uprightCellAt(along, cellEm, mid) {
93
+ return along - cellEm / 2 - CENTRAL * cellEm + mid;
94
+ }
95
+ /**
96
+ * The geometry of a ruby base (see the module comment). Measured in the
97
+ * writing mode the composer runs in: a vertical reading advances cell by
98
+ * cell down the line.
99
+ */
100
+ export function rubyGeometry(input) {
101
+ const { reading, fontString, position, baseWidth, em, allowLeft, allowRight } = input;
102
+ const allow = { allowLeft, allowRight };
103
+ const rtEm = fontEm(fontString);
104
+ const zhuyin = isZhuyin(reading);
105
+ const axis = -CENTRAL * em;
106
+ if (zhuyin) {
107
+ const zEm = rtEm * ZHUYIN_SIZE_RATIO;
108
+ const zFont = withFontSize(fontString, zEm);
109
+ const graphemes = graphemesOf(reading);
110
+ const symbols = graphemes.filter((g) => !TONE_MARKS.has(g) && g !== NEUTRAL_TONE);
111
+ const tone = graphemes.find((g) => TONE_MARKS.has(g));
112
+ const neutral = graphemes.includes(NEUTRAL_TONE);
113
+ const dot = neutral ? NEUTRAL_SPACE_EM * em : 0;
114
+ const runs = [];
115
+ if (position === 'right') {
116
+ // A column right of the character, symbols stacked down it, the
117
+ // column (the dot's space above it included) centred on the
118
+ // character's axis.
119
+ const x0 = baseWidth + ZHUYIN_GAP_EM * em;
120
+ const n = Math.max(1, symbols.length);
121
+ const start = axis - (n * zEm + dot) / 2;
122
+ const top = start + dot;
123
+ symbols.forEach((g, i) => {
124
+ const w = measureTextWidth(g, zFont);
125
+ runs.push({ text: g, dx: x0 + (zEm - w) / 2, dy: baselineOf(top + (i + 0.5) * zEm, zEm), fontString: zFont });
126
+ });
127
+ let width = x0 + zEm;
128
+ if (tone) {
129
+ // Right of the column, half of its ink above the last symbol's top.
130
+ const tw = measureTextWidth(tone, zFont);
131
+ runs.push({ text: tone, dx: x0 + zEm, dy: top + (n - 1) * zEm + inkMid(tone, zFont), fontString: zFont });
132
+ width += tw;
133
+ }
134
+ if (neutral) {
135
+ const nw = measureTextWidth(NEUTRAL_TONE, zFont);
136
+ runs.push({ text: NEUTRAL_TONE, dx: x0 + (zEm - nw) / 2, dy: start + dot / 2 + inkMid(NEUTRAL_TONE, zFont), fontString: zFont });
137
+ }
138
+ return { width, inset: 0, rtWidth: width - baseWidth, runs, ...allow };
139
+ }
140
+ // Over or under the base. In vertical text (over is the right of the
141
+ // column) the symbols make a column down the line beside the base, the
142
+ // tone mark upright beside the column, half of its ink above the last
143
+ // symbol's top, and the dot upright before the first symbol; in
144
+ // horizontal text a row, the tone mark over (under) the right end of
145
+ // the last symbol, half of it past the symbol.
146
+ const vertical = measuringVertically();
147
+ const text = symbols.join('');
148
+ const rtWidth = flowTextWidth(text, zFont);
149
+ const need = rtWidth - 2 * Math.min(allowLeft, allowRight);
150
+ const width = Math.max(baseWidth, need);
151
+ const inset = (width - baseWidth) / 2;
152
+ const dx = (width - rtWidth) / 2;
153
+ const side = position === 'under' ? 1 : -1;
154
+ const rtAxis = axis + side * (em / 2 + zEm / 2);
155
+ runs.push({ text, dx, dy: baselineOf(rtAxis, zEm), fontString: zFont });
156
+ if (tone) {
157
+ const tw = measureTextWidth(tone, zFont);
158
+ const mid = inkMid(tone, zFont);
159
+ if (vertical) {
160
+ const lastTop = dx + (symbols.length > 0 ? rtWidth - flowTextWidth(symbols[symbols.length - 1], zFont) : 0);
161
+ runs.push({ text: tone, dx: uprightCellAt(lastTop, zEm, mid), dy: baselineOf(rtAxis + side * (zEm / 2 + tw / 2), zEm), fontString: zFont, upright: true });
162
+ }
163
+ else {
164
+ runs.push({ text: tone, dx: dx + rtWidth - tw / 2, dy: rtAxis + (side * zEm) / 2 + mid, fontString: zFont });
165
+ }
166
+ }
167
+ if (neutral) {
168
+ const mid = inkMid(NEUTRAL_TONE, zFont);
169
+ if (vertical) {
170
+ runs.push({ text: NEUTRAL_TONE, dx: uprightCellAt(dx - dot / 2, zEm, mid), dy: baselineOf(rtAxis, zEm), fontString: zFont, upright: true });
171
+ }
172
+ else {
173
+ const nw = measureTextWidth(NEUTRAL_TONE, zFont);
174
+ runs.push({ text: NEUTRAL_TONE, dx: dx - dot / 2 - nw / 2, dy: rtAxis + mid, fontString: zFont });
175
+ }
176
+ }
177
+ return { width, inset, rtWidth, runs, ...allow };
178
+ }
179
+ const rtWidth = flowTextWidth(reading, fontString);
180
+ const need = rtWidth - 2 * Math.min(allowLeft, allowRight);
181
+ const width = Math.max(baseWidth, need);
182
+ const inset = (width - baseWidth) / 2;
183
+ // `right` outside zhuyin (pinyin asked right of horizontal text): over.
184
+ const side = position === 'under' ? 1 : -1;
185
+ const rtAxis = axis + side * (em / 2 + rtEm / 2);
186
+ // A Latin reading over the base: its descenders clear the base (rubyLift.ts).
187
+ const lift = side < 0 ? latinReadingLift(reading, fontString, em) : 0;
188
+ return { width, inset, rtWidth, runs: [{ text: reading, dx: (width - rtWidth) / 2, dy: baselineOf(rtAxis, rtEm) - lift, fontString }], ...allow };
189
+ }
190
+ /** The advance of a reading along the line (a zhuyin reading: its
191
+ * symbols' column, tone marks aside), before its base is sized. */
192
+ export function readingAdvance(reading, fontString, position) {
193
+ if (!isZhuyin(reading))
194
+ return flowTextWidth(reading, fontString);
195
+ const zEm = fontEm(fontString) * ZHUYIN_SIZE_RATIO;
196
+ if (position === 'right')
197
+ return zEm;
198
+ const symbols = graphemesOf(reading).filter((g) => !TONE_MARKS.has(g) && g !== NEUTRAL_TONE).join('');
199
+ return flowTextWidth(symbols, withFontSize(fontString, zEm));
200
+ }
201
+ /** Where the upper row of a warichu part ends (units `[0, at)`): see the
202
+ * module comment. `startProhibited[i]`: unit `i` may not open a row;
203
+ * `endProhibited[i]`: unit `i` may not close one (an opening bracket), so
204
+ * the upper row takes the unit after it too. */
205
+ export function splitNote(widths, startProhibited, endProhibited) {
206
+ const n = widths.length;
207
+ let total = 0;
208
+ for (const w of widths)
209
+ total += w;
210
+ let prefix = 0;
211
+ let at = 0;
212
+ while (at < n && prefix < total / 2 - 1e-9)
213
+ prefix += widths[at++];
214
+ while (at < n && (startProhibited[at] || (at > 0 && endProhibited?.[at - 1])))
215
+ prefix += widths[at++];
216
+ return at;
217
+ }
218
+ /** The advance of a warichu part folded at `at`: the wider row. */
219
+ export function foldWidth(widths, at) {
220
+ let upper = 0;
221
+ let lower = 0;
222
+ widths.forEach((w, i) => {
223
+ if (i < at)
224
+ upper += w;
225
+ else
226
+ lower += w;
227
+ });
228
+ return Math.max(upper, lower);
229
+ }
230
+ /** The baselines of a warichu part's rows (px from the line's baseline):
231
+ * the upper row's em box ends at the line's axis, the lower one's starts
232
+ * there. */
233
+ export function noteRowBaselines(em, noteEm) {
234
+ const axis = -CENTRAL * em;
235
+ return { upper: baselineOf(axis - noteEm / 2, noteEm), lower: baselineOf(axis + noteEm / 2, noteEm) };
236
+ }
237
+ //# sourceMappingURL=cjkAnnotate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cjkAnnotate.js","sourceRoot":"","sources":["../../src/measure/cjkAnnotate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,133 @@
1
+ import type { CjkLineBreak } from '../types';
2
+ /**
3
+ * Character classes of Chinese (and Japanese) text layout, after the W3C
4
+ * "Requirements for Chinese Text Layout" (clreq §3.1 and §6.1) and GB/T
5
+ * 15834—2011: what a line may not start or end with at each strictness
6
+ * level, which marks never part (—— ……), and which characters take no
7
+ * inter-character space when a justified line is spread.
8
+ *
9
+ * A class is read from the first code point of a grapheme. The marks Latin
10
+ * text shares with Chinese (— … · “ ” ‘ ’) are classed as Chinese marks
11
+ * here: the table is only consulted for paragraphs set by the CJK composer
12
+ * (`cjkCompose.ts`) and for the joints of words that hold CJK, where they
13
+ * are Chinese punctuation. The apostrophe of a Latin word ("don’t") and the
14
+ * interpunct inside one ("l·l") are kept in their word by the unit builder.
15
+ */
16
+ /** How strictly lines avoid starting or ending with punctuation (clreq
17
+ * §6.1.1). `none`: anywhere between characters (Taiwan and Hong Kong
18
+ * newspapers). `basic`: no pause or stop mark, closing bracket or quote,
19
+ * connector, interpunct or iteration mark opens a line, and no opening
20
+ * bracket or quote closes one. `gb`: `basic` plus the solidus at either
21
+ * end (GB/T 15834—2011 §5.1.9). `strict`: `gb` plus the two-em dash and
22
+ * the ellipsis at the start of a line. */
23
+ export type CjkLineBreakLevel = CjkLineBreak;
24
+ export declare const CJK_LINE_BREAK_LEVELS: readonly CjkLineBreakLevel[];
25
+ export type CjkClass =
26
+ /** Han, kana, hangul, bopomofo, fullwidth letters and digits, 〇, emoji
27
+ * and the CJK symbols: a line may break before and after each (the
28
+ * composer keeps a run of fullwidth digits or letters together, see
29
+ * {@link isFullwidthAlnum}). */
30
+ 'ideograph'
31
+ /** Opening brackets and quotes: (〔[{【〖《〈「『“‘ and ASCII ( [ {. */
32
+ | 'opening'
33
+ /** Closing brackets and quotes: )〕]}】〗》〉」』”’ and ASCII ) ] }. */
34
+ | 'closing'
35
+ /** Pause marks: 、,;: and ASCII , ; : */
36
+ | 'pause'
37
+ /** Stop marks: 。.!?‼⁇⁈⁉ and ASCII . ! ? */
38
+ | 'stop'
39
+ /** Interpuncts: · ‧ ・ ・ */
40
+ | 'interpunct'
41
+ /** Iteration marks and the prolonged sound mark: 々〻ゝゞヽヾー */
42
+ | 'iteration'
43
+ /** Dashes: — ― ⸺ ⸻ (two U+2014 in a row are one unit, 破折号). */
44
+ | 'dash'
45
+ /** Ellipses: … ‥ ⋯ (two in a row are one unit, 省略号). */
46
+ | 'ellipsis'
47
+ /** Connectors: – ~ 〜 ~ 〰 ゠ */
48
+ | 'connector'
49
+ /** Solidus: / / */
50
+ | 'solidus'
51
+ /** The ideographic space U+3000: a fixed character one em wide; a line
52
+ * may break after it, never before. */
53
+ | 'ideoSpace'
54
+ /** Signs a number takes before it: ¥ $ € £ ₩ ¥ $ £ ± − + (the ASCII
55
+ * plus is Western text: `C++` may end a line). */
56
+ | 'prefix'
57
+ /** Signs a number takes after it: % ‰ ‱ ° ℃ ℉ ′ ″ % and the unit
58
+ * squares ㎡ ㎏ ㎞ ㏄ (U+3371–337A, U+3380–33DF, U+33FF), which are set
59
+ * in the Western run of their number. */
60
+ | 'postfix'
61
+ /** Latin, Greek, Cyrillic letters, digits and everything else: set in
62
+ * runs a line never breaks inside. */
63
+ | 'western'
64
+ /** U+200B, the zero-width space: a break opportunity, not printed. */
65
+ | 'zwsp';
66
+ /** Set the level {@link getCjkLineBreak} returns (the build does, from the
67
+ * resolved `cjk.lineBreak`). */
68
+ export declare function setCjkLineBreak(level: CjkLineBreakLevel): void;
69
+ /** The document's line-break level for CJK text (see
70
+ * {@link setCjkLineBreak}); `gb` until a build sets another. */
71
+ export declare function getCjkLineBreak(): CjkLineBreakLevel;
72
+ /** Whether a line may break between two graphemes that touch: `a` (class
73
+ * `aCls`, a CJK grapheme when `aCjk`) and `b` after it. Only next to a CJK
74
+ * grapheme — two Western graphemes never part here — and never before the
75
+ * ideographic space; at `level`, no prohibited mark opens or closes a
76
+ * line. */
77
+ export declare function cjkBreakAllowed(aCls: CjkClass, aCjk: boolean, bCls: CjkClass, bCjk: boolean, level: CjkLineBreakLevel): boolean;
78
+ /** Whether a grapheme of `cls` may not open a line at `level`. */
79
+ export declare function isLineStartProhibited(cls: CjkClass, level: CjkLineBreakLevel): boolean;
80
+ /** Whether a grapheme of `cls` may not close a line at `level`. */
81
+ export declare function isLineEndProhibited(cls: CjkClass, level: CjkLineBreakLevel): boolean;
82
+ /** The squared Latin abbreviations of units in the CJK compatibility
83
+ * block: ㍱ hPa to ㍺ IU, ㎀ pA to ㏟ A∕m, ㏿ gal. They follow a number as
84
+ * % does, in any script, and are no CJK text. */
85
+ export declare function isUnitSquare(cp: number): boolean;
86
+ /** Fullwidth digits 0–9. */
87
+ export declare function isFullwidthDigit(cp: number): boolean;
88
+ /** Fullwidth digits and Latin letters (0–9, A–Z, a–z): set one em
89
+ * wide like ideographs, but a number or a word a line never breaks
90
+ * inside. */
91
+ export declare function isFullwidthAlnum(cp: number): boolean;
92
+ /** The class of a grapheme, read from its first code point. */
93
+ export declare function cjkClassOf(grapheme: string): CjkClass;
94
+ /** Whether a grapheme is set as a Chinese character in a CJK paragraph: it
95
+ * opens a unit of its own instead of joining a Western run. The ASCII
96
+ * marks (`,` `.` `(` `%`…) and the signs of numbers stay in the Western
97
+ * run they touch; the marks Chinese shares with Latin text (— … · “ ” ‘ ’
98
+ * – ~) are Chinese marks, except the apostrophe or the interpunct of a
99
+ * Latin word, which the unit builder keeps in it. */
100
+ export declare function isCjkGrapheme(grapheme: string): boolean;
101
+ /** Whether a grapheme is a letter or digit of Western text (the neighbours
102
+ * of an apostrophe or an interpunct kept inside a word). */
103
+ export declare function isWesternWordChar(grapheme: string | undefined): boolean;
104
+ /** Whether an apostrophe or an interpunct sits inside a Latin word
105
+ * ("don’t", "l·l"): between two letters or digits of Western text. It
106
+ * belongs to the word then — the composer keeps it in the word's run, and
107
+ * vertical text sets it sideways with the word — not to the Chinese text
108
+ * around it. */
109
+ export declare function isWordInnerMark(grapheme: string, prev: string | undefined, next: string | undefined): boolean;
110
+ /** Whether a code point is a mark a browser sets half width when it meets
111
+ * another (CSS `text-spacing-trim`, OpenType `chws`/`halt`): an opening or
112
+ * closing bracket or quote, a pause or stop mark, an interpunct, the
113
+ * ideographic space. The marks of the CJK blocks always; the marks Latin
114
+ * text shares with Chinese (“ ” ‘ ’ · ‧ « »…) only when `shared` is set
115
+ * (the text is Chinese). ASCII never. */
116
+ export declare function isTrimmableMark(cp: number, shared: boolean): boolean;
117
+ /**
118
+ * Where to cut `text` so that no piece holds two CJK marks side by side:
119
+ * the offsets (UTF-16) between each such pair. Chrome (CSS
120
+ * `text-spacing-trim: normal`, and fonts with `chws`) sets the first of
121
+ * `)》`, `”“`, `》。` or `。《` half width when a run is measured or painted
122
+ * whole — `本)》录` in Noto Serif SC is 3.5 em as one run and 4 em
123
+ * character by character — while the CJK composer measures every
124
+ * character alone and adjusts the marks itself (`cjk.punctuationWidth`).
125
+ * Measuring and painting such text piece by piece keeps the browser out of
126
+ * it. `shared` counts the marks Latin text shares with Chinese (“ ” ‘ ’ ·):
127
+ * set it for Chinese text only, so a Latin `’”` is never cut. Empty for
128
+ * text with no such pair.
129
+ */
130
+ export declare function cjkMarkCuts(text: string, shared: boolean): number[];
131
+ /** `text` cut at {@link cjkMarkCuts}: one piece when there is no cut. */
132
+ export declare function cjkMarkPieces(text: string, shared: boolean): string[];
133
+ //# sourceMappingURL=cjkClasses.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cjkClasses.d.ts","sourceRoot":"","sources":["../../src/measure/cjkClasses.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C;;;;;;;;;;;;;GAaG;AAEH;;;;;;2CAM2C;AAC3C,MAAM,MAAM,iBAAiB,GAAG,YAAY,CAAC;AAE7C,eAAO,MAAM,qBAAqB,EAAE,SAAS,iBAAiB,EAAsC,CAAC;AAErG,MAAM,MAAM,QAAQ;AAClB;;;iCAGiC;AAC/B,WAAW;AACb,iEAAiE;GAC/D,SAAS;AACX,iEAAiE;GAC/D,SAAS;AACX,wCAAwC;GACtC,OAAO;AACT,2CAA2C;GACzC,MAAM;AACR,2BAA2B;GACzB,YAAY;AACd,4DAA4D;GAC1D,WAAW;AACb,+DAA+D;GAC7D,MAAM;AACR,wDAAwD;GACtD,UAAU;AACZ,8BAA8B;GAC5B,WAAW;AACb,mBAAmB;GACjB,SAAS;AACX;wCACwC;GACtC,WAAW;AACb;mDACmD;GACjD,QAAQ;AACV;;0CAE0C;GACxC,SAAS;AACX;uCACuC;GACrC,SAAS;AACX,sEAAsE;GACpE,MAAM,CAAC;AAQX;iCACiC;AACjC,wBAAgB,eAAe,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAE9D;AAED;iEACiE;AACjE,wBAAgB,eAAe,IAAI,iBAAiB,CAEnD;AAED;;;;YAIY;AACZ,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAK/H;AAED,kEAAkE;AAClE,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CActF;AAED,mEAAmE;AACnE,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAWpF;AAeD;;kDAEkD;AAClD,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED,4BAA4B;AAC5B,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;cAEc;AACd,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEpD;AA+BD,+DAA+D;AAC/D,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAqBrD;AAED;;;;;sDAKsD;AACtD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAcvD;AAED;6DAC6D;AAC7D,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAKvE;AAED;;;;iBAIiB;AACjB,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAE7G;AAED;;;;;0CAK0C;AAC1C,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CASpE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,CAWnE;AAED,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,CAWrE"}