postext 1.15.1 → 1.16.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 (457) hide show
  1. package/dist/__tests__/arabic/harakatProfile.test.d.ts +2 -0
  2. package/dist/__tests__/arabic/harakatProfile.test.d.ts.map +1 -0
  3. package/dist/__tests__/arabic/harakatProfile.test.js +105 -0
  4. package/dist/__tests__/arabic/harakatProfile.test.js.map +1 -0
  5. package/dist/__tests__/bundleLocaleAndBytes.test.js +9 -9
  6. package/dist/__tests__/bundleLocaleAndBytes.test.js.map +1 -1
  7. package/dist/__tests__/chineseLocale.test.js +10 -5
  8. package/dist/__tests__/chineseLocale.test.js.map +1 -1
  9. package/dist/__tests__/cjk/annotationsRender.test.js +5 -2
  10. package/dist/__tests__/cjk/annotationsRender.test.js.map +1 -1
  11. package/dist/__tests__/cjk/chipLatinSpacing.test.d.ts +2 -0
  12. package/dist/__tests__/cjk/chipLatinSpacing.test.d.ts.map +1 -0
  13. package/dist/__tests__/cjk/chipLatinSpacing.test.js +137 -0
  14. package/dist/__tests__/cjk/chipLatinSpacing.test.js.map +1 -0
  15. package/dist/__tests__/cjk/chipTracking.test.d.ts +2 -0
  16. package/dist/__tests__/cjk/chipTracking.test.d.ts.map +1 -0
  17. package/dist/__tests__/cjk/chipTracking.test.js +56 -0
  18. package/dist/__tests__/cjk/chipTracking.test.js.map +1 -0
  19. package/dist/__tests__/cjk/japaneseHtml.test.d.ts +2 -0
  20. package/dist/__tests__/cjk/japaneseHtml.test.d.ts.map +1 -0
  21. package/dist/__tests__/cjk/japaneseHtml.test.js +163 -0
  22. package/dist/__tests__/cjk/japaneseHtml.test.js.map +1 -0
  23. package/dist/__tests__/cjk/japaneseMarks.test.d.ts +2 -0
  24. package/dist/__tests__/cjk/japaneseMarks.test.d.ts.map +1 -0
  25. package/dist/__tests__/cjk/japaneseMarks.test.js +289 -0
  26. package/dist/__tests__/cjk/japaneseMarks.test.js.map +1 -0
  27. package/dist/__tests__/cjk/japaneseMarksRender.test.d.ts +2 -0
  28. package/dist/__tests__/cjk/japaneseMarksRender.test.d.ts.map +1 -0
  29. package/dist/__tests__/cjk/japaneseMarksRender.test.js +161 -0
  30. package/dist/__tests__/cjk/japaneseMarksRender.test.js.map +1 -0
  31. package/dist/__tests__/cjk/japaneseRuby.test.d.ts +2 -0
  32. package/dist/__tests__/cjk/japaneseRuby.test.d.ts.map +1 -0
  33. package/dist/__tests__/cjk/japaneseRuby.test.js +457 -0
  34. package/dist/__tests__/cjk/japaneseRuby.test.js.map +1 -0
  35. package/dist/__tests__/cjk/japaneseSegmentLanguage.test.d.ts +2 -0
  36. package/dist/__tests__/cjk/japaneseSegmentLanguage.test.d.ts.map +1 -0
  37. package/dist/__tests__/cjk/japaneseSegmentLanguage.test.js +50 -0
  38. package/dist/__tests__/cjk/japaneseSegmentLanguage.test.js.map +1 -0
  39. package/dist/__tests__/cjk/japaneseSpacing.test.d.ts +2 -0
  40. package/dist/__tests__/cjk/japaneseSpacing.test.d.ts.map +1 -0
  41. package/dist/__tests__/cjk/japaneseSpacing.test.js +417 -0
  42. package/dist/__tests__/cjk/japaneseSpacing.test.js.map +1 -0
  43. package/dist/__tests__/cjk/kanbunKunten.test.d.ts +2 -0
  44. package/dist/__tests__/cjk/kanbunKunten.test.d.ts.map +1 -0
  45. package/dist/__tests__/cjk/kanbunKunten.test.js +230 -0
  46. package/dist/__tests__/cjk/kanbunKunten.test.js.map +1 -0
  47. package/dist/__tests__/cjk/kanbunKuntenRender.test.d.ts +2 -0
  48. package/dist/__tests__/cjk/kanbunKuntenRender.test.d.ts.map +1 -0
  49. package/dist/__tests__/cjk/kanbunKuntenRender.test.js +127 -0
  50. package/dist/__tests__/cjk/kanbunKuntenRender.test.js.map +1 -0
  51. package/dist/__tests__/cjk/keepAll.test.d.ts +2 -0
  52. package/dist/__tests__/cjk/keepAll.test.d.ts.map +1 -0
  53. package/dist/__tests__/cjk/keepAll.test.js +146 -0
  54. package/dist/__tests__/cjk/keepAll.test.js.map +1 -0
  55. package/dist/__tests__/cjk/kinsokuJa.test.d.ts +2 -0
  56. package/dist/__tests__/cjk/kinsokuJa.test.d.ts.map +1 -0
  57. package/dist/__tests__/cjk/kinsokuJa.test.js +388 -0
  58. package/dist/__tests__/cjk/kinsokuJa.test.js.map +1 -0
  59. package/dist/__tests__/cjk/kinsokuJaBuild.test.d.ts +2 -0
  60. package/dist/__tests__/cjk/kinsokuJaBuild.test.d.ts.map +1 -0
  61. package/dist/__tests__/cjk/kinsokuJaBuild.test.js +38 -0
  62. package/dist/__tests__/cjk/kinsokuJaBuild.test.js.map +1 -0
  63. package/dist/__tests__/cjk/resourceAnnotations.test.d.ts +2 -0
  64. package/dist/__tests__/cjk/resourceAnnotations.test.d.ts.map +1 -0
  65. package/dist/__tests__/cjk/resourceAnnotations.test.js +223 -0
  66. package/dist/__tests__/cjk/resourceAnnotations.test.js.map +1 -0
  67. package/dist/__tests__/defaults/cjk.test.js +10 -2
  68. package/dist/__tests__/defaults/cjk.test.js.map +1 -1
  69. package/dist/__tests__/exports.test.js +37 -0
  70. package/dist/__tests__/exports.test.js.map +1 -1
  71. package/dist/__tests__/headingLetterSpacing.test.js +2 -1
  72. package/dist/__tests__/headingLetterSpacing.test.js.map +1 -1
  73. package/dist/__tests__/indexChinese.test.js +1 -1
  74. package/dist/__tests__/indexJapanese.test.d.ts +2 -0
  75. package/dist/__tests__/indexJapanese.test.d.ts.map +1 -0
  76. package/dist/__tests__/indexJapanese.test.js +242 -0
  77. package/dist/__tests__/indexJapanese.test.js.map +1 -0
  78. package/dist/__tests__/japaneseCaptions.test.d.ts +2 -0
  79. package/dist/__tests__/japaneseCaptions.test.d.ts.map +1 -0
  80. package/dist/__tests__/japaneseCaptions.test.js +79 -0
  81. package/dist/__tests__/japaneseCaptions.test.js.map +1 -0
  82. package/dist/__tests__/japaneseHeadings.test.d.ts +2 -0
  83. package/dist/__tests__/japaneseHeadings.test.d.ts.map +1 -0
  84. package/dist/__tests__/japaneseHeadings.test.js +364 -0
  85. package/dist/__tests__/japaneseHeadings.test.js.map +1 -0
  86. package/dist/__tests__/japaneseLocale.test.d.ts +2 -0
  87. package/dist/__tests__/japaneseLocale.test.d.ts.map +1 -0
  88. package/dist/__tests__/japaneseLocale.test.js +201 -0
  89. package/dist/__tests__/japaneseLocale.test.js.map +1 -0
  90. package/dist/__tests__/japaneseNotes.test.d.ts +2 -0
  91. package/dist/__tests__/japaneseNotes.test.d.ts.map +1 -0
  92. package/dist/__tests__/japaneseNotes.test.js +336 -0
  93. package/dist/__tests__/japaneseNotes.test.js.map +1 -0
  94. package/dist/__tests__/japaneseNumbering.test.d.ts +2 -0
  95. package/dist/__tests__/japaneseNumbering.test.d.ts.map +1 -0
  96. package/dist/__tests__/japaneseNumbering.test.js +292 -0
  97. package/dist/__tests__/japaneseNumbering.test.js.map +1 -0
  98. package/dist/__tests__/parse/listNesting.test.d.ts +2 -0
  99. package/dist/__tests__/parse/listNesting.test.d.ts.map +1 -0
  100. package/dist/__tests__/parse/listNesting.test.js +142 -0
  101. package/dist/__tests__/parse/listNesting.test.js.map +1 -0
  102. package/dist/__tests__/pipeline/citationsJapanese.test.d.ts +2 -0
  103. package/dist/__tests__/pipeline/citationsJapanese.test.d.ts.map +1 -0
  104. package/dist/__tests__/pipeline/citationsJapanese.test.js +110 -0
  105. package/dist/__tests__/pipeline/citationsJapanese.test.js.map +1 -0
  106. package/dist/__tests__/pipeline/listNestingLayout.test.d.ts +2 -0
  107. package/dist/__tests__/pipeline/listNestingLayout.test.d.ts.map +1 -0
  108. package/dist/__tests__/pipeline/listNestingLayout.test.js +90 -0
  109. package/dist/__tests__/pipeline/listNestingLayout.test.js.map +1 -0
  110. package/dist/__tests__/pipeline/paragraphStyleFaces.test.js +2 -2
  111. package/dist/__tests__/pipeline/paragraphStyleFaces.test.js.map +1 -1
  112. package/dist/__tests__/pipeline/safeArea.test.d.ts +2 -0
  113. package/dist/__tests__/pipeline/safeArea.test.d.ts.map +1 -0
  114. package/dist/__tests__/pipeline/safeArea.test.js +207 -0
  115. package/dist/__tests__/pipeline/safeArea.test.js.map +1 -0
  116. package/dist/__tests__/vertical/compositionPaint.test.js +6 -5
  117. package/dist/__tests__/vertical/compositionPaint.test.js.map +1 -1
  118. package/dist/__tests__/vertical/japaneseVertical.test.d.ts +2 -0
  119. package/dist/__tests__/vertical/japaneseVertical.test.d.ts.map +1 -0
  120. package/dist/__tests__/vertical/japaneseVertical.test.js +247 -0
  121. package/dist/__tests__/vertical/japaneseVertical.test.js.map +1 -0
  122. package/dist/__tests__/vertical/verticalSpans.d.ts +2 -1
  123. package/dist/__tests__/vertical/verticalSpans.d.ts.map +1 -1
  124. package/dist/__tests__/vertical/verticalSpans.js +3 -2
  125. package/dist/__tests__/vertical/verticalSpans.js.map +1 -1
  126. package/dist/__tests__/video.test.d.ts +2 -0
  127. package/dist/__tests__/video.test.d.ts.map +1 -0
  128. package/dist/__tests__/video.test.js +305 -0
  129. package/dist/__tests__/video.test.js.map +1 -0
  130. package/dist/arabicMarks.d.ts +11 -1
  131. package/dist/arabicMarks.d.ts.map +1 -1
  132. package/dist/arabicMarks.js +72 -5
  133. package/dist/arabicMarks.js.map +1 -1
  134. package/dist/bundle/adapters.d.ts +6 -0
  135. package/dist/bundle/adapters.d.ts.map +1 -1
  136. package/dist/bundle/adapters.js +30 -0
  137. package/dist/bundle/adapters.js.map +1 -1
  138. package/dist/bundle/codec.d.ts.map +1 -1
  139. package/dist/bundle/codec.js +67 -3
  140. package/dist/bundle/codec.js.map +1 -1
  141. package/dist/bundle/index.d.ts +2 -2
  142. package/dist/bundle/index.d.ts.map +1 -1
  143. package/dist/bundle/index.js +2 -2
  144. package/dist/bundle/index.js.map +1 -1
  145. package/dist/bundle/manifest.d.ts +8 -0
  146. package/dist/bundle/manifest.d.ts.map +1 -1
  147. package/dist/bundle/manifest.js +48 -1
  148. package/dist/bundle/manifest.js.map +1 -1
  149. package/dist/bundle/types.d.ts +5 -0
  150. package/dist/bundle/types.d.ts.map +1 -1
  151. package/dist/bundle/zip.js +1 -1
  152. package/dist/bundle/zip.js.map +1 -1
  153. package/dist/canvas-backend/annotations.d.ts +20 -5
  154. package/dist/canvas-backend/annotations.d.ts.map +1 -1
  155. package/dist/canvas-backend/annotations.js +59 -6
  156. package/dist/canvas-backend/annotations.js.map +1 -1
  157. package/dist/canvas-backend/blockRender.d.ts.map +1 -1
  158. package/dist/canvas-backend/blockRender.js +29 -3
  159. package/dist/canvas-backend/blockRender.js.map +1 -1
  160. package/dist/canvas-backend/renderResourceBlock.d.ts +6 -1
  161. package/dist/canvas-backend/renderResourceBlock.d.ts.map +1 -1
  162. package/dist/canvas-backend/renderResourceBlock.js +124 -5
  163. package/dist/canvas-backend/renderResourceBlock.js.map +1 -1
  164. package/dist/canvas-backend/verticalText.d.ts +9 -4
  165. package/dist/canvas-backend/verticalText.d.ts.map +1 -1
  166. package/dist/canvas-backend/verticalText.js +20 -9
  167. package/dist/canvas-backend/verticalText.js.map +1 -1
  168. package/dist/chineseNumerals.d.ts +3 -2
  169. package/dist/chineseNumerals.d.ts.map +1 -1
  170. package/dist/chineseNumerals.js +11 -8
  171. package/dist/chineseNumerals.js.map +1 -1
  172. package/dist/citations/bibtex.d.ts.map +1 -1
  173. package/dist/citations/bibtex.js +4 -0
  174. package/dist/citations/bibtex.js.map +1 -1
  175. package/dist/citations/data.d.ts.map +1 -1
  176. package/dist/citations/data.js +6 -1
  177. package/dist/citations/data.js.map +1 -1
  178. package/dist/citations/types.d.ts +8 -0
  179. package/dist/citations/types.d.ts.map +1 -1
  180. package/dist/cjkMarks.d.ts +23 -14
  181. package/dist/cjkMarks.d.ts.map +1 -1
  182. package/dist/cjkMarks.js +251 -49
  183. package/dist/cjkMarks.js.map +1 -1
  184. package/dist/configWarnings.js +10 -4
  185. package/dist/configWarnings.js.map +1 -1
  186. package/dist/defaults/captionStyle.d.ts +19 -4
  187. package/dist/defaults/captionStyle.d.ts.map +1 -1
  188. package/dist/defaults/captionStyle.js +27 -8
  189. package/dist/defaults/captionStyle.js.map +1 -1
  190. package/dist/defaults/cjk.d.ts +64 -14
  191. package/dist/defaults/cjk.d.ts.map +1 -1
  192. package/dist/defaults/cjk.js +209 -29
  193. package/dist/defaults/cjk.js.map +1 -1
  194. package/dist/defaults/footnotes.d.ts +27 -4
  195. package/dist/defaults/footnotes.d.ts.map +1 -1
  196. package/dist/defaults/footnotes.js +95 -36
  197. package/dist/defaults/footnotes.js.map +1 -1
  198. package/dist/defaults/headings.d.ts +5 -0
  199. package/dist/defaults/headings.d.ts.map +1 -1
  200. package/dist/defaults/headings.js +46 -1
  201. package/dist/defaults/headings.js.map +1 -1
  202. package/dist/defaults/index.d.ts +4 -3
  203. package/dist/defaults/index.d.ts.map +1 -1
  204. package/dist/defaults/index.js +14 -5
  205. package/dist/defaults/index.js.map +1 -1
  206. package/dist/defaults/indexConfig.d.ts.map +1 -1
  207. package/dist/defaults/indexConfig.js +7 -4
  208. package/dist/defaults/indexConfig.js.map +1 -1
  209. package/dist/defaults/paragraphStyles.d.ts.map +1 -1
  210. package/dist/defaults/paragraphStyles.js +8 -0
  211. package/dist/defaults/paragraphStyles.js.map +1 -1
  212. package/dist/defaults/resourceTypes.d.ts +16 -3
  213. package/dist/defaults/resourceTypes.d.ts.map +1 -1
  214. package/dist/defaults/resourceTypes.js +56 -8
  215. package/dist/defaults/resourceTypes.js.map +1 -1
  216. package/dist/defaults/shared.d.ts.map +1 -1
  217. package/dist/defaults/shared.js +21 -0
  218. package/dist/defaults/shared.js.map +1 -1
  219. package/dist/defaults/tableStyle.d.ts.map +1 -1
  220. package/dist/defaults/tableStyle.js +4 -1
  221. package/dist/defaults/tableStyle.js.map +1 -1
  222. package/dist/defaults/videoStyle.d.ts +9 -0
  223. package/dist/defaults/videoStyle.d.ts.map +1 -0
  224. package/dist/defaults/videoStyle.js +130 -0
  225. package/dist/defaults/videoStyle.js.map +1 -0
  226. package/dist/design/placeholders.d.ts.map +1 -1
  227. package/dist/design/placeholders.js +5 -3
  228. package/dist/design/placeholders.js.map +1 -1
  229. package/dist/html-backend.d.ts +13 -0
  230. package/dist/html-backend.d.ts.map +1 -1
  231. package/dist/html-backend.js +233 -26
  232. package/dist/html-backend.js.map +1 -1
  233. package/dist/htmlAnnotations.d.ts +47 -9
  234. package/dist/htmlAnnotations.d.ts.map +1 -1
  235. package/dist/htmlAnnotations.js +89 -17
  236. package/dist/htmlAnnotations.js.map +1 -1
  237. package/dist/index.d.ts +13 -7
  238. package/dist/index.d.ts.map +1 -1
  239. package/dist/index.js +8 -4
  240. package/dist/index.js.map +1 -1
  241. package/dist/japaneseNumerals.d.ts +44 -0
  242. package/dist/japaneseNumerals.d.ts.map +1 -0
  243. package/dist/japaneseNumerals.js +100 -0
  244. package/dist/japaneseNumerals.js.map +1 -0
  245. package/dist/knuthPlass/richAdapter.d.ts +5 -1
  246. package/dist/knuthPlass/richAdapter.d.ts.map +1 -1
  247. package/dist/knuthPlass/richAdapter.js +2 -0
  248. package/dist/knuthPlass/richAdapter.js.map +1 -1
  249. package/dist/locale.d.ts +19 -12
  250. package/dist/locale.d.ts.map +1 -1
  251. package/dist/locale.js +24 -12
  252. package/dist/locale.js.map +1 -1
  253. package/dist/measure/cache.d.ts.map +1 -1
  254. package/dist/measure/cache.js +20 -9
  255. package/dist/measure/cache.js.map +1 -1
  256. package/dist/measure/canvas.d.ts +21 -0
  257. package/dist/measure/canvas.d.ts.map +1 -1
  258. package/dist/measure/canvas.js +82 -0
  259. package/dist/measure/canvas.js.map +1 -1
  260. package/dist/measure/cjk.d.ts +3 -1
  261. package/dist/measure/cjk.d.ts.map +1 -1
  262. package/dist/measure/cjk.js +4 -2
  263. package/dist/measure/cjk.js.map +1 -1
  264. package/dist/measure/cjkAnnotate.d.ts +62 -3
  265. package/dist/measure/cjkAnnotate.d.ts.map +1 -1
  266. package/dist/measure/cjkAnnotate.js +99 -2
  267. package/dist/measure/cjkAnnotate.js.map +1 -1
  268. package/dist/measure/cjkClasses.d.ts +93 -13
  269. package/dist/measure/cjkClasses.d.ts.map +1 -1
  270. package/dist/measure/cjkClasses.js +204 -14
  271. package/dist/measure/cjkClasses.js.map +1 -1
  272. package/dist/measure/cjkCompose.d.ts +10 -4
  273. package/dist/measure/cjkCompose.d.ts.map +1 -1
  274. package/dist/measure/cjkCompose.js +834 -85
  275. package/dist/measure/cjkCompose.js.map +1 -1
  276. package/dist/measure/cjkPunctuation.d.ts +73 -14
  277. package/dist/measure/cjkPunctuation.d.ts.map +1 -1
  278. package/dist/measure/cjkPunctuation.js +97 -21
  279. package/dist/measure/cjkPunctuation.js.map +1 -1
  280. package/dist/measure/plain.js +2 -2
  281. package/dist/measure/plain.js.map +1 -1
  282. package/dist/measure/rich.d.ts +12 -2
  283. package/dist/measure/rich.d.ts.map +1 -1
  284. package/dist/measure/rich.js +46 -8
  285. package/dist/measure/rich.js.map +1 -1
  286. package/dist/measure/rubyJis.d.ts +96 -0
  287. package/dist/measure/rubyJis.d.ts.map +1 -0
  288. package/dist/measure/rubyJis.js +245 -0
  289. package/dist/measure/rubyJis.js.map +1 -0
  290. package/dist/measure/types.d.ts +6 -1
  291. package/dist/measure/types.d.ts.map +1 -1
  292. package/dist/measure/types.js.map +1 -1
  293. package/dist/measure/vertical.d.ts +13 -5
  294. package/dist/measure/vertical.d.ts.map +1 -1
  295. package/dist/measure/vertical.js +16 -6
  296. package/dist/measure/vertical.js.map +1 -1
  297. package/dist/numberWords.d.ts +4 -3
  298. package/dist/numberWords.d.ts.map +1 -1
  299. package/dist/numberWords.js +15 -5
  300. package/dist/numberWords.js.map +1 -1
  301. package/dist/numbering.d.ts +24 -12
  302. package/dist/numbering.d.ts.map +1 -1
  303. package/dist/numbering.js +57 -11
  304. package/dist/numbering.js.map +1 -1
  305. package/dist/parse/annotations.d.ts +21 -18
  306. package/dist/parse/annotations.d.ts.map +1 -1
  307. package/dist/parse/annotations.js +140 -51
  308. package/dist/parse/annotations.js.map +1 -1
  309. package/dist/parse/blockParser.d.ts.map +1 -1
  310. package/dist/parse/blockParser.js +12 -1
  311. package/dist/parse/blockParser.js.map +1 -1
  312. package/dist/parse/index.d.ts +1 -1
  313. package/dist/parse/index.d.ts.map +1 -1
  314. package/dist/parse/index.js.map +1 -1
  315. package/dist/parse/indexMarks.d.ts.map +1 -1
  316. package/dist/parse/indexMarks.js +42 -0
  317. package/dist/parse/indexMarks.js.map +1 -1
  318. package/dist/parse/inlineFormatting.d.ts +4 -3
  319. package/dist/parse/inlineFormatting.d.ts.map +1 -1
  320. package/dist/parse/inlineFormatting.js +9 -8
  321. package/dist/parse/inlineFormatting.js.map +1 -1
  322. package/dist/parse/listNesting.d.ts +47 -0
  323. package/dist/parse/listNesting.d.ts.map +1 -0
  324. package/dist/parse/listNesting.js +65 -0
  325. package/dist/parse/listNesting.js.map +1 -0
  326. package/dist/parse/types.d.ts +93 -5
  327. package/dist/parse/types.d.ts.map +1 -1
  328. package/dist/pipeline/annotations.d.ts +25 -15
  329. package/dist/pipeline/annotations.d.ts.map +1 -1
  330. package/dist/pipeline/annotations.js +102 -16
  331. package/dist/pipeline/annotations.js.map +1 -1
  332. package/dist/pipeline/build.d.ts.map +1 -1
  333. package/dist/pipeline/build.js +284 -31
  334. package/dist/pipeline/build.js.map +1 -1
  335. package/dist/pipeline/buildBlockKind.d.ts +7 -0
  336. package/dist/pipeline/buildBlockKind.d.ts.map +1 -1
  337. package/dist/pipeline/buildBlockKind.js +25 -2
  338. package/dist/pipeline/buildBlockKind.js.map +1 -1
  339. package/dist/pipeline/buildHelpers.d.ts +2 -0
  340. package/dist/pipeline/buildHelpers.d.ts.map +1 -1
  341. package/dist/pipeline/buildHelpers.js +17 -0
  342. package/dist/pipeline/buildHelpers.js.map +1 -1
  343. package/dist/pipeline/buildMeasurement.d.ts +3 -0
  344. package/dist/pipeline/buildMeasurement.d.ts.map +1 -1
  345. package/dist/pipeline/buildMeasurement.js +1 -0
  346. package/dist/pipeline/buildMeasurement.js.map +1 -1
  347. package/dist/pipeline/calloutLayout.d.ts +2 -0
  348. package/dist/pipeline/calloutLayout.d.ts.map +1 -1
  349. package/dist/pipeline/calloutLayout.js +5 -5
  350. package/dist/pipeline/calloutLayout.js.map +1 -1
  351. package/dist/pipeline/citations.d.ts +1 -1
  352. package/dist/pipeline/citations.d.ts.map +1 -1
  353. package/dist/pipeline/citations.js +15 -7
  354. package/dist/pipeline/citations.js.map +1 -1
  355. package/dist/pipeline/columnBalancing.d.ts +22 -0
  356. package/dist/pipeline/columnBalancing.d.ts.map +1 -1
  357. package/dist/pipeline/columnBalancing.js +80 -3
  358. package/dist/pipeline/columnBalancing.js.map +1 -1
  359. package/dist/pipeline/config.d.ts.map +1 -1
  360. package/dist/pipeline/config.js +4 -3
  361. package/dist/pipeline/config.js.map +1 -1
  362. package/dist/pipeline/contentWarnings.d.ts.map +1 -1
  363. package/dist/pipeline/contentWarnings.js +19 -0
  364. package/dist/pipeline/contentWarnings.js.map +1 -1
  365. package/dist/pipeline/continuation.d.ts.map +1 -1
  366. package/dist/pipeline/continuation.js +3 -3
  367. package/dist/pipeline/continuation.js.map +1 -1
  368. package/dist/pipeline/crossRefs.d.ts.map +1 -1
  369. package/dist/pipeline/crossRefs.js +3 -0
  370. package/dist/pipeline/crossRefs.js.map +1 -1
  371. package/dist/pipeline/footnotes.d.ts +20 -12
  372. package/dist/pipeline/footnotes.d.ts.map +1 -1
  373. package/dist/pipeline/footnotes.js +62 -16
  374. package/dist/pipeline/footnotes.js.map +1 -1
  375. package/dist/pipeline/headingStyles.js +1 -1
  376. package/dist/pipeline/headingStyles.js.map +1 -1
  377. package/dist/pipeline/indexDirective.d.ts.map +1 -1
  378. package/dist/pipeline/indexDirective.js +89 -12
  379. package/dist/pipeline/indexDirective.js.map +1 -1
  380. package/dist/pipeline/indexGroups.d.ts +5 -3
  381. package/dist/pipeline/indexGroups.d.ts.map +1 -1
  382. package/dist/pipeline/indexGroups.js +9 -4
  383. package/dist/pipeline/indexGroups.js.map +1 -1
  384. package/dist/pipeline/indexJapanese.d.ts +75 -0
  385. package/dist/pipeline/indexJapanese.d.ts.map +1 -0
  386. package/dist/pipeline/indexJapanese.js +264 -0
  387. package/dist/pipeline/indexJapanese.js.map +1 -0
  388. package/dist/pipeline/lineSpan.d.ts +36 -0
  389. package/dist/pipeline/lineSpan.d.ts.map +1 -0
  390. package/dist/pipeline/lineSpan.js +36 -0
  391. package/dist/pipeline/lineSpan.js.map +1 -0
  392. package/dist/pipeline/lists.js +2 -2
  393. package/dist/pipeline/lists.js.map +1 -1
  394. package/dist/pipeline/measureContentBlock.d.ts +4 -0
  395. package/dist/pipeline/measureContentBlock.d.ts.map +1 -1
  396. package/dist/pipeline/measureContentBlock.js +57 -5
  397. package/dist/pipeline/measureContentBlock.js.map +1 -1
  398. package/dist/pipeline/outline.d.ts.map +1 -1
  399. package/dist/pipeline/outline.js +3 -1
  400. package/dist/pipeline/outline.js.map +1 -1
  401. package/dist/pipeline/paragraphContainers.d.ts +25 -2
  402. package/dist/pipeline/paragraphContainers.d.ts.map +1 -1
  403. package/dist/pipeline/paragraphContainers.js +82 -2
  404. package/dist/pipeline/paragraphContainers.js.map +1 -1
  405. package/dist/pipeline/parts.d.ts +2 -2
  406. package/dist/pipeline/parts.js +3 -3
  407. package/dist/pipeline/parts.js.map +1 -1
  408. package/dist/pipeline/placement.d.ts.map +1 -1
  409. package/dist/pipeline/placement.js +2 -2
  410. package/dist/pipeline/placement.js.map +1 -1
  411. package/dist/pipeline/resourceLayout.d.ts +6 -0
  412. package/dist/pipeline/resourceLayout.d.ts.map +1 -1
  413. package/dist/pipeline/resourceLayout.js +93 -17
  414. package/dist/pipeline/resourceLayout.js.map +1 -1
  415. package/dist/pipeline/resourceNumbering.d.ts +5 -2
  416. package/dist/pipeline/resourceNumbering.d.ts.map +1 -1
  417. package/dist/pipeline/resourceNumbering.js +12 -7
  418. package/dist/pipeline/resourceNumbering.js.map +1 -1
  419. package/dist/pipeline/safeArea.d.ts +29 -0
  420. package/dist/pipeline/safeArea.d.ts.map +1 -0
  421. package/dist/pipeline/safeArea.js +89 -0
  422. package/dist/pipeline/safeArea.js.map +1 -0
  423. package/dist/pipeline/styles.d.ts +16 -1
  424. package/dist/pipeline/styles.d.ts.map +1 -1
  425. package/dist/pipeline/styles.js +8 -1
  426. package/dist/pipeline/styles.js.map +1 -1
  427. package/dist/pipeline/verse.d.ts +3 -0
  428. package/dist/pipeline/verse.d.ts.map +1 -1
  429. package/dist/pipeline/verse.js +1 -1
  430. package/dist/pipeline/verse.js.map +1 -1
  431. package/dist/pipeline/verticalMetrics.d.ts.map +1 -1
  432. package/dist/pipeline/verticalMetrics.js +4 -0
  433. package/dist/pipeline/verticalMetrics.js.map +1 -1
  434. package/dist/pipeline/videoOverlay.d.ts +24 -0
  435. package/dist/pipeline/videoOverlay.d.ts.map +1 -0
  436. package/dist/pipeline/videoOverlay.js +134 -0
  437. package/dist/pipeline/videoOverlay.js.map +1 -0
  438. package/dist/types.d.ts +594 -50
  439. package/dist/types.d.ts.map +1 -1
  440. package/dist/uprightArabic.js +1 -1
  441. package/dist/uprightArabic.js.map +1 -1
  442. package/dist/vdt.d.ts +221 -17
  443. package/dist/vdt.d.ts.map +1 -1
  444. package/dist/vdt.js.map +1 -1
  445. package/dist/video/qr.d.ts +21 -0
  446. package/dist/video/qr.d.ts.map +1 -0
  447. package/dist/video/qr.js +326 -0
  448. package/dist/video/qr.js.map +1 -0
  449. package/dist/video/url.d.ts +62 -0
  450. package/dist/video/url.d.ts.map +1 -0
  451. package/dist/video/url.js +206 -0
  452. package/dist/video/url.js.map +1 -0
  453. package/dist/writingMode.d.ts +74 -20
  454. package/dist/writingMode.d.ts.map +1 -1
  455. package/dist/writingMode.js +146 -27
  456. package/dist/writingMode.js.map +1 -1
  457. package/package.json +1 -1
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Japanese ruby geometry (furigana, #422), after JIS X 4051 §12 and JLReq
3
+ * §3.3: where a reading sits on its base, how far a longer one may run
4
+ * past the base before the base is spread, and how the readings of a
5
+ * jukugo ruby (熟語ルビ) share a word.
6
+ *
7
+ * Pure arithmetic along the line, in px of the flow frame: the composer
8
+ * (`cjkCompose.ts`) gives each base's advance and its reading's
9
+ * characters, and how far the reading may pass the base on each side
10
+ * (`allow`: what the neighbour outside takes, 0 at a line edge, where
11
+ * the reading is set flush with the edge and the base moves in); it gets
12
+ * back each base's box (its advance on the line), where the base's first
13
+ * glyph starts in the box (`inset`), the spacing after each base
14
+ * character (`tracking`) and the reading's pieces, placed from the box's
15
+ * start.
16
+ *
17
+ * - A reading no longer than its base (JLReq §3.3.6 a) leaves the box as
18
+ * the base: `center` centres it, `start` sets it from the base's start,
19
+ * `jis` spreads it 1:2:1 (half a unit before the first character and
20
+ * after the last, a unit between characters), or, when that half unit
21
+ * would be more than a ruby character, from one end of the base to the
22
+ * other (space-between). One character is centred by either.
23
+ * - A longer reading (§3.3.6 b) runs past the base as far as each side
24
+ * allows, evenly while both sides can take it; what is left spreads the
25
+ * base: 1:2:1 under `jis` (half a unit before the first character and
26
+ * after the last, a unit between), centred in its box otherwise. The
27
+ * reading is set solid.
28
+ * - A jukugo ruby (§3.3.7) is set as mono ruby while every reading fits
29
+ * its base. When one does not, each reading stays by its own base and
30
+ * may run onto the next or the previous base of the word by up to one
31
+ * ruby character, the readings never overlapping, the first and the
32
+ * last passing the word by what the neighbours outside allow. When even
33
+ * that does not hold them, the word takes its readings as one, a group
34
+ * ruby over the whole word.
35
+ */
36
+ /** A ruby base and its reading. */
37
+ export interface JisRubyBase {
38
+ /** The base's advance (its characters at their own spacing), px. */
39
+ width: number;
40
+ /** How many characters (graphemes) the base holds. */
41
+ graphemes: number;
42
+ /** The reading's characters as painted, with their advances (px). */
43
+ reading: readonly {
44
+ text: string;
45
+ width: number;
46
+ }[];
47
+ }
48
+ /** Where a reading sits (see `CjkRubyAlign`). */
49
+ export type JisRubyAlign = 'center' | 'jis' | 'start';
50
+ /** How far a reading may pass its base, or a jukugo word, on each side, px. */
51
+ export interface JisRubyAllow {
52
+ start: number;
53
+ end: number;
54
+ }
55
+ /** A piece of a reading: its text, its advance and where it starts, px
56
+ * from the start of its base's box (negative: before the box). */
57
+ export interface JisRubyPiece {
58
+ text: string;
59
+ dx: number;
60
+ width: number;
61
+ }
62
+ /** How a ruby base is set (see the module comment). */
63
+ export interface JisRubyBox {
64
+ /** The box's advance on the line, px. */
65
+ width: number;
66
+ /** Where the base's first glyph starts in the box, px. */
67
+ inset: number;
68
+ /** Space after each base character (a spread base of two or more), px;
69
+ * counted in `width`. */
70
+ tracking: number;
71
+ pieces: JisRubyPiece[];
72
+ }
73
+ /** How far a longer reading passes its base on each side: evenly while
74
+ * both sides take it, then the side that takes more (`start` alignment:
75
+ * only after the base). */
76
+ export declare function overhangs(need: number, allow: JisRubyAllow, align: JisRubyAlign): {
77
+ start: number;
78
+ end: number;
79
+ };
80
+ /**
81
+ * One base and its reading: a mono ruby's character, or a group ruby's
82
+ * base (see the module comment). `rubyEm` is the reading's em, for the
83
+ * limit of the 1:2:1 spread.
84
+ */
85
+ export declare function layoutJisRuby(base: JisRubyBase, align: JisRubyAlign, rubyEm: number, allow: JisRubyAllow): JisRubyBox;
86
+ /**
87
+ * A jukugo ruby's characters (a word, or the part of it on a line): one
88
+ * box per base (see the module comment). `allow` is what the word's
89
+ * neighbours outside it take.
90
+ */
91
+ export declare function layoutJukugo(bases: readonly JisRubyBase[], align: JisRubyAlign, rubyEm: number, allow: JisRubyAllow): JisRubyBox[];
92
+ /** The total advance of boxes. */
93
+ export declare function boxesWidth(boxes: readonly JisRubyBox[]): number;
94
+ /** A reading with its small kana full size (がっこう → がつこう). */
95
+ export declare function fullSizeKana(reading: string): string;
96
+ //# sourceMappingURL=rubyJis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rubyJis.d.ts","sourceRoot":"","sources":["../../src/measure/rubyJis.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,mCAAmC;AACnC,MAAM,WAAW,WAAW;IAC1B,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,OAAO,EAAE,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACrD;AAED,iDAAiD;AACjD,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,CAAC;AAEtD,+EAA+E;AAC/E,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED;mEACmE;AACnE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf;AAED,uDAAuD;AACvD,MAAM,WAAW,UAAU;IACzB,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,KAAK,EAAE,MAAM,CAAC;IACd;8BAC0B;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,YAAY,EAAE,CAAC;CACxB;AAsCD;;4BAE4B;AAC5B,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAahH;AA2CD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,UAAU,CAGrH;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,UAAU,EAAE,CAwElI;AAED,kCAAkC;AAClC,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,GAAG,MAAM,CAI/D;AAWD,6DAA6D;AAC7D,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEpD"}
@@ -0,0 +1,245 @@
1
+ /**
2
+ * Japanese ruby geometry (furigana, #422), after JIS X 4051 §12 and JLReq
3
+ * §3.3: where a reading sits on its base, how far a longer one may run
4
+ * past the base before the base is spread, and how the readings of a
5
+ * jukugo ruby (熟語ルビ) share a word.
6
+ *
7
+ * Pure arithmetic along the line, in px of the flow frame: the composer
8
+ * (`cjkCompose.ts`) gives each base's advance and its reading's
9
+ * characters, and how far the reading may pass the base on each side
10
+ * (`allow`: what the neighbour outside takes, 0 at a line edge, where
11
+ * the reading is set flush with the edge and the base moves in); it gets
12
+ * back each base's box (its advance on the line), where the base's first
13
+ * glyph starts in the box (`inset`), the spacing after each base
14
+ * character (`tracking`) and the reading's pieces, placed from the box's
15
+ * start.
16
+ *
17
+ * - A reading no longer than its base (JLReq §3.3.6 a) leaves the box as
18
+ * the base: `center` centres it, `start` sets it from the base's start,
19
+ * `jis` spreads it 1:2:1 (half a unit before the first character and
20
+ * after the last, a unit between characters), or, when that half unit
21
+ * would be more than a ruby character, from one end of the base to the
22
+ * other (space-between). One character is centred by either.
23
+ * - A longer reading (§3.3.6 b) runs past the base as far as each side
24
+ * allows, evenly while both sides can take it; what is left spreads the
25
+ * base: 1:2:1 under `jis` (half a unit before the first character and
26
+ * after the last, a unit between), centred in its box otherwise. The
27
+ * reading is set solid.
28
+ * - A jukugo ruby (§3.3.7) is set as mono ruby while every reading fits
29
+ * its base. When one does not, each reading stays by its own base and
30
+ * may run onto the next or the previous base of the word by up to one
31
+ * ruby character, the readings never overlapping, the first and the
32
+ * last passing the word by what the neighbours outside allow. When even
33
+ * that does not hold them, the word takes its readings as one, a group
34
+ * ruby over the whole word.
35
+ */
36
+ const EPS = 1e-9;
37
+ /** The sum of the advances. */
38
+ function advance(reading) {
39
+ let w = 0;
40
+ for (const r of reading)
41
+ w += r.width;
42
+ return w;
43
+ }
44
+ /** Where each character of a reading starts when the first starts at `x`
45
+ * with `gap` after each but the last. */
46
+ function charStarts(reading, x, gap) {
47
+ const out = [];
48
+ let at = x;
49
+ for (const r of reading) {
50
+ out.push(at);
51
+ at += r.width + gap;
52
+ }
53
+ return out;
54
+ }
55
+ /** A reading's characters at `xs` as pieces: characters set solid share a
56
+ * piece. */
57
+ function piecesAt(reading, xs) {
58
+ const out = [];
59
+ reading.forEach((r, i) => {
60
+ const x = xs[i];
61
+ const last = out[out.length - 1];
62
+ if (last && Math.abs(last.dx + last.width - x) < EPS) {
63
+ last.text += r.text;
64
+ last.width += r.width;
65
+ }
66
+ else
67
+ out.push({ text: r.text, dx: x, width: r.width });
68
+ });
69
+ return out;
70
+ }
71
+ /** How far a longer reading passes its base on each side: evenly while
72
+ * both sides take it, then the side that takes more (`start` alignment:
73
+ * only after the base). */
74
+ export function overhangs(need, allow, align) {
75
+ const a = Math.max(0, allow.start);
76
+ const b = Math.max(0, allow.end);
77
+ if (align === 'start')
78
+ return { start: 0, end: Math.min(b, need) };
79
+ let start = Math.min(a, need / 2);
80
+ let end = Math.min(b, need / 2);
81
+ const left = need - start - end;
82
+ if (left > EPS) {
83
+ const more = Math.min(a - start, left);
84
+ start += more;
85
+ end += Math.min(b - end, left - more);
86
+ }
87
+ return { start, end };
88
+ }
89
+ /** {@link layoutJisRuby} with the reading's characters' starts (`xs`)
90
+ * instead of its pieces. */
91
+ function placeReading(base, align, rubyEm, allow) {
92
+ const reading = base.reading;
93
+ const r = advance(reading);
94
+ const b = base.width;
95
+ if (r <= b + EPS) {
96
+ const slack = Math.max(0, b - r);
97
+ const n = reading.length;
98
+ let x = slack / 2;
99
+ let gap = 0;
100
+ if (align === 'start')
101
+ x = 0;
102
+ else if (align === 'jis' && n > 1) {
103
+ // 1:2:1 (space-around); flush with both ends (space-between) when
104
+ // the half unit at each end would be more than a ruby character.
105
+ const unit = slack / n;
106
+ if (unit / 2 > rubyEm + EPS) {
107
+ x = 0;
108
+ gap = slack / (n - 1);
109
+ }
110
+ else {
111
+ x = unit / 2;
112
+ gap = unit;
113
+ }
114
+ }
115
+ return { width: b, inset: 0, tracking: 0, xs: charStarts(reading, x, gap) };
116
+ }
117
+ const over = overhangs(r - b, allow, align);
118
+ const spread = Math.max(0, r - b - over.start - over.end);
119
+ const m = Math.max(1, base.graphemes);
120
+ let inset = spread / 2;
121
+ let tracking = 0;
122
+ if (align === 'start')
123
+ inset = 0;
124
+ else if (align === 'jis' && m > 1) {
125
+ // The base spread 1:2:1: half a unit before its first character and
126
+ // after its last, a unit between.
127
+ tracking = spread / m;
128
+ inset = tracking / 2;
129
+ }
130
+ return { width: b + spread, inset, tracking, xs: charStarts(reading, 0 - over.start, 0) };
131
+ }
132
+ /**
133
+ * One base and its reading: a mono ruby's character, or a group ruby's
134
+ * base (see the module comment). `rubyEm` is the reading's em, for the
135
+ * limit of the 1:2:1 spread.
136
+ */
137
+ export function layoutJisRuby(base, align, rubyEm, allow) {
138
+ const { xs, ...box } = placeReading(base, align, rubyEm, allow);
139
+ return { ...box, pieces: piecesAt(base.reading, xs) };
140
+ }
141
+ /**
142
+ * A jukugo ruby's characters (a word, or the part of it on a line): one
143
+ * box per base (see the module comment). `allow` is what the word's
144
+ * neighbours outside it take.
145
+ */
146
+ export function layoutJukugo(bases, align, rubyEm, allow) {
147
+ if (bases.length === 1)
148
+ return [layoutJisRuby(bases[0], align, rubyEm, allow)];
149
+ // Every reading fits its base: mono ruby.
150
+ if (bases.every((b) => advance(b.reading) <= b.width + EPS)) {
151
+ return bases.map((b) => layoutJisRuby(b, align, rubyEm, { start: 0, end: 0 }));
152
+ }
153
+ // Each reading by its own base, running onto the bases next to it by up
154
+ // to a ruby character, never onto another reading: from the centred
155
+ // places, pushed after the reading before, then pulled back inside
156
+ // their limits.
157
+ const n = bases.length;
158
+ const starts = [];
159
+ let total = 0;
160
+ for (const b of bases) {
161
+ starts.push(total);
162
+ total += b.width;
163
+ }
164
+ const w = bases.map((b) => advance(b.reading));
165
+ const lo = bases.map((_, i) => starts[i] - (i === 0 ? Math.max(0, allow.start) : rubyEm));
166
+ const hi = bases.map((b, i) => starts[i] + b.width + (i === n - 1 ? Math.max(0, allow.end) : rubyEm));
167
+ const x = bases.map((b, i) => (align === 'start' ? starts[i] : starts[i] + (b.width - w[i]) / 2));
168
+ for (let i = 0; i < n; i++)
169
+ x[i] = Math.max(x[i], lo[i], i > 0 ? x[i - 1] + w[i - 1] : -Infinity);
170
+ for (let i = n - 1; i >= 0; i--)
171
+ x[i] = Math.min(x[i], hi[i] - w[i], i < n - 1 ? x[i + 1] - w[i] : Infinity);
172
+ const fits = x.every((xi, i) => xi >= lo[i] - EPS && xi + w[i] <= hi[i] + EPS && (i === 0 || xi >= x[i - 1] + w[i - 1] - EPS));
173
+ if (fits) {
174
+ return bases.map((b, i) => ({
175
+ width: b.width,
176
+ inset: 0,
177
+ tracking: 0,
178
+ pieces: piecesAt(b.reading, charStarts(b.reading, x[i] - starts[i], 0)),
179
+ }));
180
+ }
181
+ // The word shares its reading: a group ruby over it. Each base keeps a
182
+ // box of its own (its share of the word's spread) and its own
183
+ // characters of the reading, so the parts of a word broken across lines
184
+ // and the HTML `<ruby>` still pair each base with its reading.
185
+ const graphemes = bases.reduce((g, b) => g + Math.max(1, b.graphemes), 0);
186
+ const flat = bases.flatMap((b) => b.reading);
187
+ const word = placeReading({ width: total, graphemes, reading: flat }, align, rubyEm, allow);
188
+ const spread = word.width - total;
189
+ const boxes = [];
190
+ let boxAt = 0;
191
+ let ci = 0;
192
+ bases.forEach((b, i) => {
193
+ const m = Math.max(1, b.graphemes);
194
+ let width = b.width;
195
+ let inset = 0;
196
+ let tracking = 0;
197
+ if (spread > EPS) {
198
+ if (word.tracking > 0) {
199
+ // The word spread 1:2:1 over its characters: each base takes its
200
+ // characters' units, half of one before its first.
201
+ const unit = word.tracking;
202
+ width += unit * m;
203
+ inset = unit / 2;
204
+ tracking = m > 1 ? unit : 0;
205
+ }
206
+ else if (align === 'start') {
207
+ if (i === n - 1)
208
+ width += spread;
209
+ }
210
+ else {
211
+ // Centred: the spread before the first base and after the last.
212
+ if (i === 0) {
213
+ width += word.inset;
214
+ inset = word.inset;
215
+ }
216
+ if (i === n - 1)
217
+ width += spread - word.inset;
218
+ }
219
+ }
220
+ const xs = b.reading.map(() => word.xs[ci++] - boxAt);
221
+ boxes.push({ width, inset, tracking, pieces: piecesAt(b.reading, xs) });
222
+ boxAt += width;
223
+ });
224
+ return boxes;
225
+ }
226
+ /** The total advance of boxes. */
227
+ export function boxesWidth(boxes) {
228
+ let w = 0;
229
+ for (const b of boxes)
230
+ w += b.width;
231
+ return w;
232
+ }
233
+ /** Small kana and their full-size forms (`cjk.ruby.smallKana: 'full'`). */
234
+ const FULL_KANA = {
235
+ 'ぁ': 'あ', 'ぃ': 'い', 'ぅ': 'う', 'ぇ': 'え', 'ぉ': 'お', 'っ': 'つ', 'ゃ': 'や', 'ゅ': 'ゆ', 'ょ': 'よ', 'ゎ': 'わ', 'ゕ': 'か', 'ゖ': 'け',
236
+ 'ァ': 'ア', 'ィ': 'イ', 'ゥ': 'ウ', 'ェ': 'エ', 'ォ': 'オ', 'ッ': 'ツ', 'ャ': 'ヤ', 'ュ': 'ユ', 'ョ': 'ヨ', 'ヮ': 'ワ', 'ヵ': 'カ', 'ヶ': 'ケ',
237
+ 'ㇰ': 'ク', 'ㇱ': 'シ', 'ㇲ': 'ス', 'ㇳ': 'ト', 'ㇴ': 'ヌ', 'ㇵ': 'ハ', 'ㇶ': 'ヒ', 'ㇷ': 'フ', 'ㇸ': 'ヘ', 'ㇹ': 'ホ', 'ㇺ': 'ム', 'ㇻ': 'ラ', 'ㇼ': 'リ', 'ㇽ': 'ル', 'ㇾ': 'レ', 'ㇿ': 'ロ',
238
+ 'ァ': 'ア', 'ィ': 'イ', 'ゥ': 'ウ', 'ェ': 'エ', 'ォ': 'オ', 'ャ': 'ヤ', 'ュ': 'ユ', 'ョ': 'ヨ', 'ッ': 'ツ',
239
+ };
240
+ const SMALL_KANA_RE = /[ぁぃぅぇぉっゃゅょゎゕゖァィゥェォッャュョヮヵヶㇰ-ㇿァ-ッ]/g;
241
+ /** A reading with its small kana full size (がっこう → がつこう). */
242
+ export function fullSizeKana(reading) {
243
+ return reading.replace(SMALL_KANA_RE, (c) => FULL_KANA[c] ?? c);
244
+ }
245
+ //# sourceMappingURL=rubyJis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rubyJis.js","sourceRoot":"","sources":["../../src/measure/rubyJis.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { VDTLine } from '../vdt';
2
- import type { TextAlign, WritingMode } from '../types';
2
+ import type { CjkWordBreak, TextAlign, WritingMode } from '../types';
3
3
  import type { CjkLineBreakLevel } from './cjkClasses';
4
4
  import type { CjkComposition } from './cjkPunctuation';
5
5
  /** Where the Knuth–Plass breaker broke a paragraph: the path it ran on
@@ -153,6 +153,11 @@ export interface MeasureBlockOptions {
153
153
  * `CjkLineBreakLevel`. Unset: the document's level, which the build sets
154
154
  * (`setCjkLineBreak`); `gb` outside a build. Only CJK text reads it. */
155
155
  cjkLineBreak?: CjkLineBreakLevel;
156
+ /** Where CJK text breaks between characters, for this paragraph alone (a
157
+ * paragraph style's `wordBreak`): `'keep-all'` only at spaces and next
158
+ * to punctuation, `'normal'` between any two characters. Unset: the
159
+ * composition's (`cjk.wordBreak`). Only CJK text reads it. */
160
+ cjkWordBreak?: CjkWordBreak;
156
161
  /** The writing mode the text is measured in: `'vertical-rl'` gives every
157
162
  * character that stands in a cell of its own in vertical text its cell
158
163
  * (CJK characters, Chinese marks, the signs Unicode sets upright: see
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/measure/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/measure/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/measure/types.ts"],"names":[],"mappings":"AAsBA;oDACoD;AACpD,MAAM,UAAU,WAAW,CAAC,UAAkB,EAAE,KAA2C,EAAE,SAAiB;IAC5G,IAAI,KAAK,GAAG,UAAU,CAAC;IACvB,IAAI,KAAK;QAAE,KAAK,MAAM,CAAC,IAAI,KAAK;YAAE,IAAI,CAAC,CAAC,QAAQ,IAAI,SAAS;gBAAE,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC;IACpF,OAAO,KAAK,CAAC;AACf,CAAC;AAED;4CAC4C;AAC5C,MAAM,UAAU,kBAAkB,CAAC,KAA2C;IAC5E,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,KAAK;QAAE,KAAK,MAAM,CAAC,IAAI,KAAK;YAAE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;IACpE,OAAO,IAAI,CAAC;AACd,CAAC;AA6JD,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/measure/types.ts"],"names":[],"mappings":"AAsBA;oDACoD;AACpD,MAAM,UAAU,WAAW,CAAC,UAAkB,EAAE,KAA2C,EAAE,SAAiB;IAC5G,IAAI,KAAK,GAAG,UAAU,CAAC;IACvB,IAAI,KAAK;QAAE,KAAK,MAAM,CAAC,IAAI,KAAK;YAAE,IAAI,CAAC,CAAC,QAAQ,IAAI,SAAS;gBAAE,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC;IACpF,OAAO,KAAK,CAAC;AACf,CAAC;AAED;4CAC4C;AAC5C,MAAM,UAAU,kBAAkB,CAAC,KAA2C;IAC5E,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,KAAK;QAAE,KAAK,MAAM,CAAC,IAAI,KAAK;YAAE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;IACpE,OAAO,IAAI,CAAC;AACd,CAAC;AAkKD,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC"}
@@ -17,8 +17,9 @@
17
17
  import type { CjkRegion, WritingMode } from '../types';
18
18
  import type { CjkClass } from './cjkClasses';
19
19
  import { type UprightDigits } from '../writingMode';
20
- /** Set the writing mode text is measured in, and the Chinese region whose
21
- * cells it uses (the mainland interpunct takes half a cell). The build
20
+ /** Set the writing mode text is measured in, and the CJK region whose
21
+ * cells it uses (the mainland interpunct takes half a cell, Japan sets
22
+ * !? upright). The build
22
23
  * does, from the layout of the pages it is placing (a styled section may
23
24
  * change it), and puts back what it found when it is done. */
24
25
  export declare function setMeasureWritingMode(mode: WritingMode, region?: CjkRegion): void;
@@ -31,7 +32,8 @@ export declare function getMeasureWritingMode(): WritingMode;
31
32
  export declare function setMeasureUprightDigits(digits: UprightDigits): void;
32
33
  /** See {@link setMeasureUprightDigits}; 2 outside a build. */
33
34
  export declare function getMeasureUprightDigits(): UprightDigits;
34
- /** The Chinese region vertical cells are measured for. */
35
+ /** The CJK region (Chinese or Japanese) vertical cells are measured
36
+ * for. */
35
37
  export declare function getMeasureRegion(): CjkRegion;
36
38
  /** Whether text is measured vertically now. */
37
39
  export declare function measuringVertically(): boolean;
@@ -66,10 +68,16 @@ export declare function verticalTrackCount(text: string): number;
66
68
  * The advance of text painted in the page's flow (design text, list
67
69
  * markers, contents rows, box titles): `measureTextWidth`, except in
68
70
  * vertical text, where what stands in a cell advances its cell
69
- * ({@link verticalTextWidth}), as the renderers paint it. ASCII text reads
70
- * the same either way.
71
+ * ({@link verticalTextWidth}), as the renderers paint it. ASCII text with
72
+ * no cell reads the same either way ({@link mayHoldVerticalCell}).
71
73
  */
72
74
  export declare function flowTextWidth(text: string, font: string): number;
75
+ /** Whether `text` may hold a cell in vertical text (see `verticalRuns`):
76
+ * any non-ASCII character, a digit when short numbers stand in one cell
77
+ * (`cjk.uprightDigits`), two exclamation or question marks in Japanese
78
+ * text (`isUprightMarkPair`). ASCII text with none of them runs sideways
79
+ * whole. */
80
+ export declare function mayHoldVerticalCell(text: string): boolean;
73
81
  /** A font string's first family, unquoted: the key of
74
82
  * `VDTFlowFrame.centralBaselines`. */
75
83
  export declare function fontFamilyOf(font: string): string;
@@ -1 +1 @@
1
- {"version":3,"file":"vertical.d.ts","sourceRoot":"","sources":["../../src/measure/vertical.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,EAAiD,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAUnG;;;+DAG+D;AAC/D,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,GAAE,SAAyB,GAAG,IAAI,CAGhG;AAED;kCACkC;AAClC,wBAAgB,qBAAqB,IAAI,WAAW,CAEnD;AAED;;sEAEsE;AACtE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAEnE;AAED,8DAA8D;AAC9D,wBAAgB,uBAAuB,IAAI,aAAa,CAEvD;AAED,0DAA0D;AAC1D,wBAAgB,gBAAgB,IAAI,SAAS,CAE5C;AAED,+CAA+C;AAC/C,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAED;oDACoD;AACpD,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,GAAE,SAAyB,GAAG,CAAC,CAW9G;AAED,uEAAuE;AACvE,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG3C;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,QAAQ,GAAG,MAAM,CAGrG;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAA6C,GAAG,MAAM,CAMhJ;AAED;;uBAEuB;AACvB,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMvD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAGhE;AAED;uCACuC;AACvC,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKjD;AAID,8CAA8C;AAC9C,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAW7D;AAID;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAG7E"}
1
+ {"version":3,"file":"vertical.d.ts","sourceRoot":"","sources":["../../src/measure/vertical.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,EAAiD,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAUnG;;;;+DAI+D;AAC/D,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,GAAE,SAAyB,GAAG,IAAI,CAGhG;AAED;kCACkC;AAClC,wBAAgB,qBAAqB,IAAI,WAAW,CAEnD;AAED;;sEAEsE;AACtE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAEnE;AAED,8DAA8D;AAC9D,wBAAgB,uBAAuB,IAAI,aAAa,CAEvD;AAED;WACW;AACX,wBAAgB,gBAAgB,IAAI,SAAS,CAE5C;AAED,+CAA+C;AAC/C,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAED;oDACoD;AACpD,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,GAAE,SAAyB,GAAG,CAAC,CAW9G;AAED,uEAAuE;AACvE,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAG3C;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,QAAQ,GAAG,MAAM,CAGrG;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAA6C,GAAG,MAAM,CAMhJ;AAED;;uBAEuB;AACvB,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMvD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAGhE;AAED;;;;aAIa;AACb,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;uCACuC;AACvC,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKjD;AAID,8CAA8C;AAC9C,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAW7D;AAID;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAG7E"}
@@ -22,8 +22,9 @@ const FONT_SIZE_RE = /(\d*\.?\d+)px/;
22
22
  let measureWritingMode = 'horizontal-tb';
23
23
  let measureRegion = 'mainland';
24
24
  let measureUprightDigits = 2;
25
- /** Set the writing mode text is measured in, and the Chinese region whose
26
- * cells it uses (the mainland interpunct takes half a cell). The build
25
+ /** Set the writing mode text is measured in, and the CJK region whose
26
+ * cells it uses (the mainland interpunct takes half a cell, Japan sets
27
+ * !? upright). The build
27
28
  * does, from the layout of the pages it is placing (a styled section may
28
29
  * change it), and puts back what it found when it is done. */
29
30
  export function setMeasureWritingMode(mode, region = measureRegion) {
@@ -45,7 +46,8 @@ export function setMeasureUprightDigits(digits) {
45
46
  export function getMeasureUprightDigits() {
46
47
  return measureUprightDigits;
47
48
  }
48
- /** The Chinese region vertical cells are measured for. */
49
+ /** The CJK region (Chinese or Japanese) vertical cells are measured
50
+ * for. */
49
51
  export function getMeasureRegion() {
50
52
  return measureRegion;
51
53
  }
@@ -116,14 +118,22 @@ export function verticalTrackCount(text) {
116
118
  * The advance of text painted in the page's flow (design text, list
117
119
  * markers, contents rows, box titles): `measureTextWidth`, except in
118
120
  * vertical text, where what stands in a cell advances its cell
119
- * ({@link verticalTextWidth}), as the renderers paint it. ASCII text reads
120
- * the same either way.
121
+ * ({@link verticalTextWidth}), as the renderers paint it. ASCII text with
122
+ * no cell reads the same either way ({@link mayHoldVerticalCell}).
121
123
  */
122
124
  export function flowTextWidth(text, font) {
123
- if (measureWritingMode === 'vertical-rl' && (/[^\u0000-\u007F]/.test(text) || (measureUprightDigits > 0 && /[0-9]/.test(text))))
125
+ if (measureWritingMode === 'vertical-rl' && mayHoldVerticalCell(text))
124
126
  return verticalTextWidth(text, font);
125
127
  return measureTextWidth(text, font);
126
128
  }
129
+ /** Whether `text` may hold a cell in vertical text (see `verticalRuns`):
130
+ * any non-ASCII character, a digit when short numbers stand in one cell
131
+ * (`cjk.uprightDigits`), two exclamation or question marks in Japanese
132
+ * text (`isUprightMarkPair`). ASCII text with none of them runs sideways
133
+ * whole. */
134
+ export function mayHoldVerticalCell(text) {
135
+ return /[^\u0000-\u007F]/.test(text) || (measureUprightDigits > 0 && /[0-9]/.test(text)) || (measureRegion === 'japan' && /[!?][!?]/.test(text));
136
+ }
127
137
  /** A font string's first family, unquoted: the key of
128
138
  * `VDTFlowFrame.centralBaselines`. */
129
139
  export function fontFamilyOf(font) {
@@ -1 +1 @@
1
- {"version":3,"file":"vertical.js","sourceRoot":"","sources":["../../src/measure/vertical.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vertical.js","sourceRoot":"","sources":["../../src/measure/vertical.ts"],"names":[],"mappings":"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"}
@@ -14,9 +14,10 @@ export interface NumberWordsOptions {
14
14
  /**
15
15
  * `n` spelled out in lower case, in the document language (`locale`:
16
16
  * `'es'` or a Spanish tag gives Spanish, a Chinese tag Chinese numerals in
17
- * its script, an Arabic tag Arabic words in the gender and spelling of
18
- * `options`, anything else English). Numbers past 999 999 (Spanish
19
- * ordinals: past 999; Chinese: past 10¹⁶ − 1; Arabic: cardinals past
17
+ * its script, a Japanese tag Japanese kanji numerals, an Arabic tag Arabic
18
+ * words in the gender and spelling of `options`, anything else English).
19
+ * Numbers past 999 999 (Spanish ordinals: past 999; Chinese and Japanese:
20
+ * past 10¹⁶ − 1; Arabic: cardinals past
20
21
  * 99 999, ordinals past 9 999) print in digits; zero and below print
21
22
  * nothing, like the other numeral formats.
22
23
  */
@@ -1 +1 @@
1
- {"version":3,"file":"numberWords.d.ts","sourceRoot":"","sources":["../src/numberWords.ts"],"names":[],"mappings":"AAaA,OAAO,EAAiC,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE5G,2DAA2D;AAC3D,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,SAAS,CAAC;AAErD;6DAC6D;AAC7D,MAAM,WAAW,kBAAkB;IACjC;uDACmD;IACnD,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;mCAC+B;IAC/B,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AA8HD;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,GAAE,eAA4B,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,MAAM,CAetI;AAED;oBACoB;AACpB,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;AAEtD,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAMtF"}
1
+ {"version":3,"file":"numberWords.d.ts","sourceRoot":"","sources":["../src/numberWords.ts"],"names":[],"mappings":"AAeA,OAAO,EAAiC,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE5G,2DAA2D;AAC3D,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,SAAS,CAAC;AAErD;6DAC6D;AAC7D,MAAM,WAAW,kBAAkB;IACjC;uDACmD;IACnD,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;mCAC+B;IAC/B,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AA8HD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,GAAE,eAA4B,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,MAAM,CAsBtI;AAED;oBACoB;AACpB,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;AAEtD,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAMtF"}
@@ -3,7 +3,8 @@
3
3
  * "vigesimoprimero", 二十一, 第二十一, الحادي والعشرون — for heading numbering
4
4
  * templates (`{1:words}`, `{1:ordinal}`) and the `{numberWords}` /
5
5
  * `{numberOrdinalWords}` design placeholders. English, Spanish, Chinese
6
- * (in the document's script: 一万 / 一萬) and Arabic; any other language
6
+ * (in the document's script: 一万 / 一萬), Japanese (百一, where Chinese
7
+ * writes 一百零一) and Arabic; any other language
7
8
  * takes the English words, like the other localised strings (table
8
9
  * continuation labels). Masculine forms by default, as a chapter or a part
9
10
  * is numbered ("capítulo primero", الفصل الأول); Arabic also has the
@@ -11,13 +12,14 @@
11
12
  */
12
13
  import { stringsKeyOf } from './locale';
13
14
  import { chineseNumeral } from './chineseNumerals';
15
+ import { japaneseNumeral } from './japaneseNumerals';
14
16
  import { arabicCardinal, arabicOrdinal } from './arabicNumberWords';
15
17
  /** Largest number spelled out; anything past it prints in digits. */
16
18
  const MAX_CARDINAL = 999_999;
17
19
  const MAX_ORDINAL_ES = 999;
18
20
  function language(locale) {
19
21
  const key = stringsKeyOf(locale ?? 'en');
20
- return key === 'es' || key === 'zh-hans' || key === 'zh-hant' || key === 'ar' ? key : 'en';
22
+ return key === 'es' || key === 'zh-hans' || key === 'zh-hant' || key === 'ja' || key === 'ar' ? key : 'en';
21
23
  }
22
24
  // --- English ---------------------------------------------------------------
23
25
  const EN_ONES = [
@@ -135,9 +137,10 @@ function esOrdinal(n) {
135
137
  /**
136
138
  * `n` spelled out in lower case, in the document language (`locale`:
137
139
  * `'es'` or a Spanish tag gives Spanish, a Chinese tag Chinese numerals in
138
- * its script, an Arabic tag Arabic words in the gender and spelling of
139
- * `options`, anything else English). Numbers past 999 999 (Spanish
140
- * ordinals: past 999; Chinese: past 10¹⁶ − 1; Arabic: cardinals past
140
+ * its script, a Japanese tag Japanese kanji numerals, an Arabic tag Arabic
141
+ * words in the gender and spelling of `options`, anything else English).
142
+ * Numbers past 999 999 (Spanish ordinals: past 999; Chinese and Japanese:
143
+ * past 10¹⁶ − 1; Arabic: cardinals past
141
144
  * 99 999, ordinals past 9 999) print in digits; zero and below print
142
145
  * nothing, like the other numeral formats.
143
146
  */
@@ -152,6 +155,13 @@ export function numberToWords(n, kind = 'cardinal', locale, options = {}) {
152
155
  const numeral = chineseNumeral(n, 'informal', lang === 'zh-hant');
153
156
  return kind === 'ordinal' ? `第${numeral}` : numeral;
154
157
  }
158
+ if (lang === 'ja') {
159
+ // The counted kanji numerals as they are read (二十一, 百一, 一万一:
160
+ // no 一 before 十百千, no 零 for a gap); the ordinal is 第 before
161
+ // them (第一, 第二十一), as chapters are numbered (第一章).
162
+ const numeral = japaneseNumeral(n, 'informal');
163
+ return kind === 'ordinal' ? `第${numeral}` : numeral;
164
+ }
155
165
  if (kind === 'ordinal') {
156
166
  if (lang === 'es')
157
167
  return n <= MAX_ORDINAL_ES ? esOrdinal(n) : String(n);