@kensio/pinyinjs 1.7.3 → 1.7.5

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 (695) hide show
  1. package/dist/accuracy/score-case.d.ts +23 -0
  2. package/dist/accuracy/score-case.d.ts.map +1 -0
  3. package/dist/accuracy/score-case.js +63 -0
  4. package/dist/accuracy/score-case.js.map +1 -0
  5. package/dist/accuracy/score.d.ts +1 -8
  6. package/dist/accuracy/score.d.ts.map +1 -1
  7. package/dist/accuracy/score.js +1 -55
  8. package/dist/accuracy/score.js.map +1 -1
  9. package/dist/cli/arguments.d.ts +4 -290
  10. package/dist/cli/arguments.d.ts.map +1 -1
  11. package/dist/cli/arguments.js +5 -357
  12. package/dist/cli/arguments.js.map +1 -1
  13. package/dist/cli/check-command.d.ts +9 -0
  14. package/dist/cli/check-command.d.ts.map +1 -0
  15. package/dist/cli/check-command.js +95 -0
  16. package/dist/cli/check-command.js.map +1 -0
  17. package/dist/cli/cli-input.d.ts +49 -0
  18. package/dist/cli/cli-input.d.ts.map +1 -0
  19. package/dist/cli/cli-input.js +31 -0
  20. package/dist/cli/cli-input.js.map +1 -0
  21. package/dist/cli/command.d.ts +97 -0
  22. package/dist/cli/command.d.ts.map +1 -0
  23. package/dist/cli/command.js +40 -0
  24. package/dist/cli/command.js.map +1 -0
  25. package/dist/cli/commands.d.ts +7 -110
  26. package/dist/cli/commands.d.ts.map +1 -1
  27. package/dist/cli/commands.js +14 -991
  28. package/dist/cli/commands.js.map +1 -1
  29. package/dist/cli/convert-command.d.ts +6 -0
  30. package/dist/cli/convert-command.d.ts.map +1 -0
  31. package/dist/cli/convert-command.js +52 -0
  32. package/dist/cli/convert-command.js.map +1 -0
  33. package/dist/cli/environment.d.ts +1 -1
  34. package/dist/cli/environment.d.ts.map +1 -1
  35. package/dist/cli/explain-command.d.ts +6 -0
  36. package/dist/cli/explain-command.d.ts.map +1 -0
  37. package/dist/cli/explain-command.js +40 -0
  38. package/dist/cli/explain-command.js.map +1 -0
  39. package/dist/cli/explain-syllable.d.ts +10 -0
  40. package/dist/cli/explain-syllable.d.ts.map +1 -0
  41. package/dist/cli/explain-syllable.js +70 -0
  42. package/dist/cli/explain-syllable.js.map +1 -0
  43. package/dist/cli/flag-help.d.ts +18 -0
  44. package/dist/cli/flag-help.d.ts.map +1 -0
  45. package/dist/cli/flag-help.js +78 -0
  46. package/dist/cli/flag-help.js.map +1 -0
  47. package/dist/cli/flag-lists.d.ts +49 -0
  48. package/dist/cli/flag-lists.d.ts.map +1 -0
  49. package/dist/cli/flag-lists.js +58 -0
  50. package/dist/cli/flag-lists.js.map +1 -0
  51. package/dist/cli/flag-values.d.ts +44 -0
  52. package/dist/cli/flag-values.d.ts.map +1 -0
  53. package/dist/cli/flag-values.js +56 -0
  54. package/dist/cli/flag-values.js.map +1 -0
  55. package/dist/cli/flags.d.ts +193 -0
  56. package/dist/cli/flags.d.ts.map +1 -0
  57. package/dist/cli/flags.js +133 -0
  58. package/dist/cli/flags.js.map +1 -0
  59. package/dist/cli/format-options.d.ts +29 -0
  60. package/dist/cli/format-options.d.ts.map +1 -0
  61. package/dist/cli/format-options.js +72 -0
  62. package/dist/cli/format-options.js.map +1 -0
  63. package/dist/cli/global-help.d.ts +23 -0
  64. package/dist/cli/global-help.d.ts.map +1 -0
  65. package/dist/cli/global-help.js +40 -0
  66. package/dist/cli/global-help.js.map +1 -0
  67. package/dist/cli/help.d.ts +1 -1
  68. package/dist/cli/help.d.ts.map +1 -1
  69. package/dist/cli/help.js +5 -99
  70. package/dist/cli/help.js.map +1 -1
  71. package/dist/cli/html-commands.d.ts +13 -0
  72. package/dist/cli/html-commands.d.ts.map +1 -0
  73. package/dist/cli/html-commands.js +49 -0
  74. package/dist/cli/html-commands.js.map +1 -0
  75. package/dist/cli/info-command.d.ts +7 -0
  76. package/dist/cli/info-command.d.ts.map +1 -0
  77. package/dist/cli/info-command.js +39 -0
  78. package/dist/cli/info-command.js.map +1 -0
  79. package/dist/cli/lookup-commands.d.ts +10 -0
  80. package/dist/cli/lookup-commands.d.ts.map +1 -0
  81. package/dist/cli/lookup-commands.js +101 -0
  82. package/dist/cli/lookup-commands.js.map +1 -0
  83. package/dist/cli/match-command.d.ts +11 -0
  84. package/dist/cli/match-command.d.ts.map +1 -0
  85. package/dist/cli/match-command.js +76 -0
  86. package/dist/cli/match-command.js.map +1 -0
  87. package/dist/cli/number-command.d.ts +12 -0
  88. package/dist/cli/number-command.d.ts.map +1 -0
  89. package/dist/cli/number-command.js +89 -0
  90. package/dist/cli/number-command.js.map +1 -0
  91. package/dist/cli/options.d.ts +30 -0
  92. package/dist/cli/options.d.ts.map +1 -0
  93. package/dist/cli/options.js +54 -0
  94. package/dist/cli/options.js.map +1 -0
  95. package/dist/cli/run-command.d.ts +24 -0
  96. package/dist/cli/run-command.d.ts.map +1 -0
  97. package/dist/cli/run-command.js +40 -0
  98. package/dist/cli/run-command.js.map +1 -0
  99. package/dist/cli/run.d.ts +4 -42
  100. package/dist/cli/run.d.ts.map +1 -1
  101. package/dist/cli/run.js +6 -61
  102. package/dist/cli/run.js.map +1 -1
  103. package/dist/cli/script-command.d.ts +10 -0
  104. package/dist/cli/script-command.d.ts.map +1 -0
  105. package/dist/cli/script-command.js +58 -0
  106. package/dist/cli/script-command.js.map +1 -0
  107. package/dist/cli/segment-command.d.ts +11 -0
  108. package/dist/cli/segment-command.d.ts.map +1 -0
  109. package/dist/cli/segment-command.js +53 -0
  110. package/dist/cli/segment-command.js.map +1 -0
  111. package/dist/cli/slug-command.d.ts +10 -0
  112. package/dist/cli/slug-command.d.ts.map +1 -0
  113. package/dist/cli/slug-command.js +28 -0
  114. package/dist/cli/slug-command.js.map +1 -0
  115. package/dist/cli/syllable-command.d.ts +14 -0
  116. package/dist/cli/syllable-command.d.ts.map +1 -0
  117. package/dist/cli/syllable-command.js +82 -0
  118. package/dist/cli/syllable-command.js.map +1 -0
  119. package/dist/cli/system-table.d.ts +12 -0
  120. package/dist/cli/system-table.d.ts.map +1 -0
  121. package/dist/cli/system-table.js +48 -0
  122. package/dist/cli/system-table.js.map +1 -0
  123. package/dist/cli/systems.d.ts +57 -0
  124. package/dist/cli/systems.d.ts.map +1 -0
  125. package/dist/cli/systems.js +27 -0
  126. package/dist/cli/systems.js.map +1 -0
  127. package/dist/cli/transcribe-command.d.ts +18 -0
  128. package/dist/cli/transcribe-command.d.ts.map +1 -0
  129. package/dist/cli/transcribe-command.js +86 -0
  130. package/dist/cli/transcribe-command.js.map +1 -0
  131. package/dist/cli/transcribe-reading.d.ts +15 -0
  132. package/dist/cli/transcribe-reading.d.ts.map +1 -0
  133. package/dist/cli/transcribe-reading.js +90 -0
  134. package/dist/cli/transcribe-reading.js.map +1 -0
  135. package/dist/cli/transcribe-rows.d.ts +26 -0
  136. package/dist/cli/transcribe-rows.d.ts.map +1 -0
  137. package/dist/cli/transcribe-rows.js +30 -0
  138. package/dist/cli/transcribe-rows.js.map +1 -0
  139. package/dist/cli/usage-error.d.ts +9 -0
  140. package/dist/cli/usage-error.d.ts.map +1 -0
  141. package/dist/cli/usage-error.js +9 -0
  142. package/dist/cli/usage-error.js.map +1 -0
  143. package/dist/decode/alternatives.d.ts +16 -0
  144. package/dist/decode/alternatives.d.ts.map +1 -0
  145. package/dist/decode/alternatives.js +31 -0
  146. package/dist/decode/alternatives.js.map +1 -0
  147. package/dist/decode/confidence.d.ts.map +1 -1
  148. package/dist/decode/confidence.js +3 -118
  149. package/dist/decode/confidence.js.map +1 -1
  150. package/dist/decode/convert-options.d.ts +116 -0
  151. package/dist/decode/convert-options.d.ts.map +1 -0
  152. package/dist/decode/convert-options.js +2 -0
  153. package/dist/decode/convert-options.js.map +1 -0
  154. package/dist/decode/convert-pipeline.d.ts +18 -0
  155. package/dist/decode/convert-pipeline.d.ts.map +1 -0
  156. package/dist/decode/convert-pipeline.js +66 -0
  157. package/dist/decode/convert-pipeline.js.map +1 -0
  158. package/dist/decode/convert.d.ts +9 -118
  159. package/dist/decode/convert.d.ts.map +1 -1
  160. package/dist/decode/convert.js +5 -453
  161. package/dist/decode/convert.js.map +1 -1
  162. package/dist/decode/decode.d.ts +2 -15
  163. package/dist/decode/decode.d.ts.map +1 -1
  164. package/dist/decode/decode.js +2 -121
  165. package/dist/decode/decode.js.map +1 -1
  166. package/dist/decode/decoders.d.ts +32 -0
  167. package/dist/decode/decoders.d.ts.map +1 -0
  168. package/dist/decode/decoders.js +29 -0
  169. package/dist/decode/decoders.js.map +1 -0
  170. package/dist/decode/edge-context.d.ts +38 -0
  171. package/dist/decode/edge-context.d.ts.map +1 -0
  172. package/dist/decode/edge-context.js +57 -0
  173. package/dist/decode/edge-context.js.map +1 -0
  174. package/dist/decode/hint-lattice.d.ts +45 -0
  175. package/dist/decode/hint-lattice.d.ts.map +1 -0
  176. package/dist/decode/hint-lattice.js +140 -0
  177. package/dist/decode/hint-lattice.js.map +1 -0
  178. package/dist/decode/hints.d.ts +2 -45
  179. package/dist/decode/hints.d.ts.map +1 -1
  180. package/dist/decode/hints.js +1 -139
  181. package/dist/decode/hints.js.map +1 -1
  182. package/dist/decode/jiao-rule.d.ts +58 -0
  183. package/dist/decode/jiao-rule.d.ts.map +1 -0
  184. package/dist/decode/jiao-rule.js +76 -0
  185. package/dist/decode/jiao-rule.js.map +1 -0
  186. package/dist/decode/lattice-costs.d.ts +55 -0
  187. package/dist/decode/lattice-costs.d.ts.map +1 -0
  188. package/dist/decode/lattice-costs.js +90 -0
  189. package/dist/decode/lattice-costs.js.map +1 -0
  190. package/dist/decode/lattice-edges.d.ts +29 -0
  191. package/dist/decode/lattice-edges.d.ts.map +1 -0
  192. package/dist/decode/lattice-edges.js +78 -0
  193. package/dist/decode/lattice-edges.js.map +1 -0
  194. package/dist/decode/lattice-slice.d.ts +37 -0
  195. package/dist/decode/lattice-slice.d.ts.map +1 -0
  196. package/dist/decode/lattice-slice.js +43 -0
  197. package/dist/decode/lattice-slice.js.map +1 -0
  198. package/dist/decode/lattice-types.d.ts +82 -0
  199. package/dist/decode/lattice-types.d.ts.map +1 -0
  200. package/dist/decode/lattice-types.js +44 -0
  201. package/dist/decode/lattice-types.js.map +1 -0
  202. package/dist/decode/lattice.d.ts +2 -59
  203. package/dist/decode/lattice.d.ts.map +1 -1
  204. package/dist/decode/lattice.js +2 -118
  205. package/dist/decode/lattice.js.map +1 -1
  206. package/dist/decode/number-pieces.d.ts +62 -0
  207. package/dist/decode/number-pieces.d.ts.map +1 -0
  208. package/dist/decode/number-pieces.js +106 -0
  209. package/dist/decode/number-pieces.js.map +1 -0
  210. package/dist/decode/numbers.d.ts +53 -0
  211. package/dist/decode/numbers.d.ts.map +1 -0
  212. package/dist/decode/numbers.js +69 -0
  213. package/dist/decode/numbers.js.map +1 -0
  214. package/dist/decode/pieces.d.ts +78 -0
  215. package/dist/decode/pieces.d.ts.map +1 -0
  216. package/dist/decode/pieces.js +136 -0
  217. package/dist/decode/pieces.js.map +1 -0
  218. package/dist/decode/polyphone-rules.d.ts +31 -0
  219. package/dist/decode/polyphone-rules.d.ts.map +1 -0
  220. package/dist/decode/polyphone-rules.js +159 -0
  221. package/dist/decode/polyphone-rules.js.map +1 -0
  222. package/dist/decode/reading-rules.d.ts +2 -97
  223. package/dist/decode/reading-rules.d.ts.map +1 -1
  224. package/dist/decode/reading-rules.js +4 -365
  225. package/dist/decode/reading-rules.js.map +1 -1
  226. package/dist/decode/rules.d.ts +1 -17
  227. package/dist/decode/rules.d.ts.map +1 -1
  228. package/dist/decode/rules.js +1 -43
  229. package/dist/decode/rules.js.map +1 -1
  230. package/dist/decode/run-lattice.d.ts +52 -0
  231. package/dist/decode/run-lattice.d.ts.map +1 -0
  232. package/dist/decode/run-lattice.js +91 -0
  233. package/dist/decode/run-lattice.js.map +1 -0
  234. package/dist/decode/sandhi-tones.d.ts +69 -0
  235. package/dist/decode/sandhi-tones.d.ts.map +1 -0
  236. package/dist/decode/sandhi-tones.js +88 -0
  237. package/dist/decode/sandhi-tones.js.map +1 -0
  238. package/dist/decode/sandhi.d.ts +1 -1
  239. package/dist/decode/sandhi.d.ts.map +1 -1
  240. package/dist/decode/sandhi.js +1 -81
  241. package/dist/decode/sandhi.js.map +1 -1
  242. package/dist/decode/script-types.d.ts +76 -0
  243. package/dist/decode/script-types.d.ts.map +1 -0
  244. package/dist/decode/script-types.js +35 -0
  245. package/dist/decode/script-types.js.map +1 -0
  246. package/dist/decode/script-words.d.ts +32 -0
  247. package/dist/decode/script-words.d.ts.map +1 -0
  248. package/dist/decode/script-words.js +77 -0
  249. package/dist/decode/script-words.js.map +1 -0
  250. package/dist/decode/script.d.ts +3 -73
  251. package/dist/decode/script.d.ts.map +1 -1
  252. package/dist/decode/script.js +3 -109
  253. package/dist/decode/script.js.map +1 -1
  254. package/dist/decode/tan-rule.d.ts +68 -0
  255. package/dist/decode/tan-rule.d.ts.map +1 -0
  256. package/dist/decode/tan-rule.js +131 -0
  257. package/dist/decode/tan-rule.js.map +1 -0
  258. package/dist/decode/write-run.d.ts +28 -0
  259. package/dist/decode/write-run.d.ts.map +1 -0
  260. package/dist/decode/write-run.js +77 -0
  261. package/dist/decode/write-run.js.map +1 -0
  262. package/dist/dictionary/artifact-claims.d.ts +25 -0
  263. package/dist/dictionary/artifact-claims.d.ts.map +1 -0
  264. package/dist/dictionary/artifact-claims.js +47 -0
  265. package/dist/dictionary/artifact-claims.js.map +1 -0
  266. package/dist/dictionary/artifact-format.d.ts +86 -0
  267. package/dist/dictionary/artifact-format.d.ts.map +1 -0
  268. package/dist/dictionary/artifact-format.js +91 -0
  269. package/dist/dictionary/artifact-format.js.map +1 -0
  270. package/dist/dictionary/artifact-read.d.ts +34 -0
  271. package/dist/dictionary/artifact-read.d.ts.map +1 -0
  272. package/dist/dictionary/artifact-read.js +114 -0
  273. package/dist/dictionary/artifact-read.js.map +1 -0
  274. package/dist/dictionary/artifact.d.ts +4 -63
  275. package/dist/dictionary/artifact.d.ts.map +1 -1
  276. package/dist/dictionary/artifact.js +12 -229
  277. package/dist/dictionary/artifact.js.map +1 -1
  278. package/dist/dictionary/assertions.d.ts +5 -57
  279. package/dist/dictionary/assertions.d.ts.map +1 -1
  280. package/dist/dictionary/assertions.js +4 -317
  281. package/dist/dictionary/assertions.js.map +1 -1
  282. package/dist/dictionary/build-assertions.d.ts +12 -0
  283. package/dist/dictionary/build-assertions.d.ts.map +1 -0
  284. package/dist/dictionary/build-assertions.js +13 -0
  285. package/dist/dictionary/build-assertions.js.map +1 -0
  286. package/dist/dictionary/built-dictionary.d.ts +46 -0
  287. package/dist/dictionary/built-dictionary.d.ts.map +1 -0
  288. package/dist/dictionary/built-dictionary.js +97 -0
  289. package/dist/dictionary/built-dictionary.js.map +1 -0
  290. package/dist/dictionary/cedict-senses.d.ts +80 -0
  291. package/dist/dictionary/cedict-senses.d.ts.map +1 -0
  292. package/dist/dictionary/cedict-senses.js +114 -0
  293. package/dist/dictionary/cedict-senses.js.map +1 -0
  294. package/dist/dictionary/character-defaults.d.ts +26 -0
  295. package/dist/dictionary/character-defaults.d.ts.map +1 -0
  296. package/dist/dictionary/character-defaults.js +67 -0
  297. package/dist/dictionary/character-defaults.js.map +1 -0
  298. package/dist/dictionary/character-readings.d.ts +10 -0
  299. package/dist/dictionary/character-readings.d.ts.map +1 -0
  300. package/dist/dictionary/character-readings.js +25 -0
  301. package/dist/dictionary/character-readings.js.map +1 -0
  302. package/dist/dictionary/dictionary-entry.d.ts +37 -0
  303. package/dist/dictionary/dictionary-entry.d.ts.map +1 -0
  304. package/dist/dictionary/dictionary-entry.js +41 -0
  305. package/dist/dictionary/dictionary-entry.js.map +1 -0
  306. package/dist/dictionary/dictionary-readings.d.ts +56 -0
  307. package/dist/dictionary/dictionary-readings.d.ts.map +1 -0
  308. package/dist/dictionary/dictionary-readings.js +93 -0
  309. package/dist/dictionary/dictionary-readings.js.map +1 -0
  310. package/dist/dictionary/dictionary.d.ts +6 -60
  311. package/dist/dictionary/dictionary.d.ts.map +1 -1
  312. package/dist/dictionary/dictionary.js +9 -169
  313. package/dist/dictionary/dictionary.js.map +1 -1
  314. package/dist/dictionary/entry-invariants.d.ts +3 -0
  315. package/dist/dictionary/entry-invariants.d.ts.map +1 -0
  316. package/dist/dictionary/entry-invariants.js +67 -0
  317. package/dist/dictionary/entry-invariants.js.map +1 -0
  318. package/dist/dictionary/entry-lines.d.ts +35 -0
  319. package/dist/dictionary/entry-lines.d.ts.map +1 -0
  320. package/dist/dictionary/entry-lines.js +70 -0
  321. package/dist/dictionary/entry-lines.js.map +1 -0
  322. package/dist/dictionary/erhua-repair.d.ts +26 -0
  323. package/dist/dictionary/erhua-repair.d.ts.map +1 -0
  324. package/dist/dictionary/erhua-repair.js +49 -0
  325. package/dist/dictionary/erhua-repair.js.map +1 -0
  326. package/dist/dictionary/frequency-tones.d.ts +74 -0
  327. package/dist/dictionary/frequency-tones.d.ts.map +1 -0
  328. package/dist/dictionary/frequency-tones.js +128 -0
  329. package/dist/dictionary/frequency-tones.js.map +1 -0
  330. package/dist/dictionary/inventory-invariants.d.ts +3 -0
  331. package/dist/dictionary/inventory-invariants.d.ts.map +1 -0
  332. package/dist/dictionary/inventory-invariants.js +54 -0
  333. package/dist/dictionary/inventory-invariants.js.map +1 -0
  334. package/dist/dictionary/locale-candidates.d.ts +40 -0
  335. package/dist/dictionary/locale-candidates.d.ts.map +1 -0
  336. package/dist/dictionary/locale-candidates.js +77 -0
  337. package/dist/dictionary/locale-candidates.js.map +1 -0
  338. package/dist/dictionary/locale-segments.d.ts +47 -0
  339. package/dist/dictionary/locale-segments.d.ts.map +1 -0
  340. package/dist/dictionary/locale-segments.js +141 -0
  341. package/dist/dictionary/locale-segments.js.map +1 -0
  342. package/dist/dictionary/locale.d.ts +1 -21
  343. package/dist/dictionary/locale.d.ts.map +1 -1
  344. package/dist/dictionary/locale.js +9 -198
  345. package/dist/dictionary/locale.js.map +1 -1
  346. package/dist/dictionary/merge-types.d.ts +121 -0
  347. package/dist/dictionary/merge-types.d.ts.map +1 -0
  348. package/dist/dictionary/merge-types.js +35 -0
  349. package/dist/dictionary/merge-types.js.map +1 -0
  350. package/dist/dictionary/merge-word.d.ts +7 -0
  351. package/dist/dictionary/merge-word.d.ts.map +1 -0
  352. package/dist/dictionary/merge-word.js +91 -0
  353. package/dist/dictionary/merge-word.js.map +1 -0
  354. package/dist/dictionary/merge.d.ts +5 -62
  355. package/dist/dictionary/merge.d.ts.map +1 -1
  356. package/dist/dictionary/merge.js +30 -713
  357. package/dist/dictionary/merge.js.map +1 -1
  358. package/dist/dictionary/proper-noun.d.ts +28 -0
  359. package/dist/dictionary/proper-noun.d.ts.map +1 -0
  360. package/dist/dictionary/proper-noun.js +43 -0
  361. package/dist/dictionary/proper-noun.js.map +1 -0
  362. package/dist/dictionary/reading-agreement.d.ts +71 -0
  363. package/dist/dictionary/reading-agreement.d.ts.map +1 -0
  364. package/dist/dictionary/reading-agreement.js +156 -0
  365. package/dist/dictionary/reading-agreement.js.map +1 -0
  366. package/dist/dictionary/script-conversion.d.ts +28 -0
  367. package/dist/dictionary/script-conversion.d.ts.map +1 -0
  368. package/dist/dictionary/script-conversion.js +58 -0
  369. package/dist/dictionary/script-conversion.js.map +1 -0
  370. package/dist/dictionary/script-pairings.d.ts +74 -0
  371. package/dist/dictionary/script-pairings.d.ts.map +1 -0
  372. package/dist/dictionary/script-pairings.js +120 -0
  373. package/dist/dictionary/script-pairings.js.map +1 -0
  374. package/dist/dictionary/script-tables.d.ts.map +1 -1
  375. package/dist/dictionary/script-tables.js +2 -165
  376. package/dist/dictionary/script-tables.js.map +1 -1
  377. package/dist/dictionary/taiwan-reading.d.ts +8 -0
  378. package/dist/dictionary/taiwan-reading.d.ts.map +1 -0
  379. package/dist/dictionary/taiwan-reading.js +38 -0
  380. package/dist/dictionary/taiwan-reading.js.map +1 -0
  381. package/dist/dictionary/tone-invariants.d.ts +3 -0
  382. package/dist/dictionary/tone-invariants.d.ts.map +1 -0
  383. package/dist/dictionary/tone-invariants.js +64 -0
  384. package/dist/dictionary/tone-invariants.js.map +1 -0
  385. package/dist/dictionary/traditional-form.d.ts +21 -0
  386. package/dist/dictionary/traditional-form.d.ts.map +1 -0
  387. package/dist/dictionary/traditional-form.js +59 -0
  388. package/dist/dictionary/traditional-form.js.map +1 -0
  389. package/dist/dictionary/traditional-ranking.d.ts +22 -0
  390. package/dist/dictionary/traditional-ranking.d.ts.map +1 -0
  391. package/dist/dictionary/traditional-ranking.js +74 -0
  392. package/dist/dictionary/traditional-ranking.js.map +1 -0
  393. package/dist/dictionary/traditional-table.d.ts +51 -0
  394. package/dist/dictionary/traditional-table.d.ts.map +1 -0
  395. package/dist/dictionary/traditional-table.js +98 -0
  396. package/dist/dictionary/traditional-table.js.map +1 -0
  397. package/dist/dictionary/traditional.d.ts +3 -56
  398. package/dist/dictionary/traditional.d.ts.map +1 -1
  399. package/dist/dictionary/traditional.js +3 -186
  400. package/dist/dictionary/traditional.js.map +1 -1
  401. package/dist/dictionary/variant-counts.d.ts +39 -0
  402. package/dist/dictionary/variant-counts.d.ts.map +1 -0
  403. package/dist/dictionary/variant-counts.js +38 -0
  404. package/dist/dictionary/variant-counts.js.map +1 -0
  405. package/dist/dictionary/word-reading.d.ts +26 -0
  406. package/dist/dictionary/word-reading.d.ts.map +1 -0
  407. package/dist/dictionary/word-reading.js +76 -0
  408. package/dist/dictionary/word-reading.js.map +1 -0
  409. package/dist/dictionary/word-readings.d.ts +15 -0
  410. package/dist/dictionary/word-readings.d.ts.map +1 -0
  411. package/dist/dictionary/word-readings.js +38 -0
  412. package/dist/dictionary/word-readings.js.map +1 -0
  413. package/dist/format/annotate.d.ts +90 -0
  414. package/dist/format/annotate.d.ts.map +1 -0
  415. package/dist/format/annotate.js +168 -0
  416. package/dist/format/annotate.js.map +1 -0
  417. package/dist/format/html.d.ts +15 -46
  418. package/dist/format/html.d.ts.map +1 -1
  419. package/dist/format/html.js +3 -162
  420. package/dist/format/html.js.map +1 -1
  421. package/dist/format/slug-hash.d.ts +51 -0
  422. package/dist/format/slug-hash.d.ts.map +1 -0
  423. package/dist/format/slug-hash.js +74 -0
  424. package/dist/format/slug-hash.js.map +1 -0
  425. package/dist/format/slug-options.d.ts +98 -0
  426. package/dist/format/slug-options.d.ts.map +1 -0
  427. package/dist/format/slug-options.js +2 -0
  428. package/dist/format/slug-options.js.map +1 -0
  429. package/dist/format/slug-words.d.ts +27 -0
  430. package/dist/format/slug-words.d.ts.map +1 -0
  431. package/dist/format/slug-words.js +0 -0
  432. package/dist/format/slug-words.js.map +1 -0
  433. package/dist/format/slug.d.ts +3 -128
  434. package/dist/format/slug.d.ts.map +1 -1
  435. package/dist/format/slug.js +0 -0
  436. package/dist/format/slug.js.map +1 -1
  437. package/dist/grade/check-readings.d.ts +41 -0
  438. package/dist/grade/check-readings.d.ts.map +1 -0
  439. package/dist/grade/check-readings.js +36 -0
  440. package/dist/grade/check-readings.js.map +1 -0
  441. package/dist/grade/check.d.ts +4 -4
  442. package/dist/grade/check.d.ts.map +1 -1
  443. package/dist/grade/check.js +5 -270
  444. package/dist/grade/check.js.map +1 -1
  445. package/dist/grade/pair-syllables.d.ts +48 -0
  446. package/dist/grade/pair-syllables.d.ts.map +1 -0
  447. package/dist/grade/pair-syllables.js +71 -0
  448. package/dist/grade/pair-syllables.js.map +1 -0
  449. package/dist/grade/reading-syllables.d.ts +62 -0
  450. package/dist/grade/reading-syllables.d.ts.map +1 -0
  451. package/dist/grade/reading-syllables.js +58 -0
  452. package/dist/grade/reading-syllables.js.map +1 -0
  453. package/dist/grade/reading-tolerance.d.ts +72 -0
  454. package/dist/grade/reading-tolerance.d.ts.map +1 -0
  455. package/dist/grade/reading-tolerance.js +107 -0
  456. package/dist/grade/reading-tolerance.js.map +1 -0
  457. package/dist/grade/typed-reading.d.ts +28 -0
  458. package/dist/grade/typed-reading.d.ts.map +1 -0
  459. package/dist/grade/typed-reading.js +36 -0
  460. package/dist/grade/typed-reading.js.map +1 -0
  461. package/dist/numerals/numeral-parse.d.ts +32 -0
  462. package/dist/numerals/numeral-parse.d.ts.map +1 -0
  463. package/dist/numerals/numeral-parse.js +44 -0
  464. package/dist/numerals/numeral-parse.js.map +1 -0
  465. package/dist/numerals/numeral-shapes.d.ts +89 -0
  466. package/dist/numerals/numeral-shapes.d.ts.map +1 -0
  467. package/dist/numerals/numeral-shapes.js +99 -0
  468. package/dist/numerals/numeral-shapes.js.map +1 -0
  469. package/dist/numerals/numerals.d.ts.map +1 -1
  470. package/dist/numerals/numerals.js +2 -36
  471. package/dist/numerals/numerals.js.map +1 -1
  472. package/dist/numerals/read-numeral.d.ts +76 -0
  473. package/dist/numerals/read-numeral.d.ts.map +1 -0
  474. package/dist/numerals/read-numeral.js +88 -0
  475. package/dist/numerals/read-numeral.js.map +1 -0
  476. package/dist/numerals/text.d.ts +3 -37
  477. package/dist/numerals/text.d.ts.map +1 -1
  478. package/dist/numerals/text.js +3 -254
  479. package/dist/numerals/text.js.map +1 -1
  480. package/dist/numerals/time.d.ts +34 -0
  481. package/dist/numerals/time.d.ts.map +1 -0
  482. package/dist/numerals/time.js +93 -0
  483. package/dist/numerals/time.js.map +1 -0
  484. package/dist/orthography/address-grouping.d.ts +34 -0
  485. package/dist/orthography/address-grouping.d.ts.map +1 -0
  486. package/dist/orthography/address-grouping.js +52 -0
  487. package/dist/orthography/address-grouping.js.map +1 -0
  488. package/dist/orthography/grouping.d.ts +3 -87
  489. package/dist/orthography/grouping.d.ts.map +1 -1
  490. package/dist/orthography/grouping.js +4 -270
  491. package/dist/orthography/grouping.js.map +1 -1
  492. package/dist/orthography/place-grouping.d.ts +39 -0
  493. package/dist/orthography/place-grouping.d.ts.map +1 -0
  494. package/dist/orthography/place-grouping.js +83 -0
  495. package/dist/orthography/place-grouping.js.map +1 -0
  496. package/dist/orthography/word-grouping.d.ts +48 -0
  497. package/dist/orthography/word-grouping.d.ts.map +1 -0
  498. package/dist/orthography/word-grouping.js +147 -0
  499. package/dist/orthography/word-grouping.js.map +1 -0
  500. package/dist/script/conversion-format.d.ts +22 -0
  501. package/dist/script/conversion-format.d.ts.map +1 -0
  502. package/dist/script/conversion-format.js +22 -0
  503. package/dist/script/conversion-format.js.map +1 -0
  504. package/dist/script/conversion-read.d.ts +9 -0
  505. package/dist/script/conversion-read.d.ts.map +1 -0
  506. package/dist/script/conversion-read.js +69 -0
  507. package/dist/script/conversion-read.js.map +1 -0
  508. package/dist/script/conversion-write.d.ts +14 -0
  509. package/dist/script/conversion-write.d.ts.map +1 -0
  510. package/dist/script/conversion-write.js +34 -0
  511. package/dist/script/conversion-write.js.map +1 -0
  512. package/dist/script/conversion.d.ts +10 -16
  513. package/dist/script/conversion.d.ts.map +1 -1
  514. package/dist/script/conversion.js +2 -115
  515. package/dist/script/conversion.js.map +1 -1
  516. package/dist/search/candidate-narrowing.d.ts +56 -0
  517. package/dist/search/candidate-narrowing.d.ts.map +1 -0
  518. package/dist/search/candidate-narrowing.js +55 -0
  519. package/dist/search/candidate-narrowing.js.map +1 -0
  520. package/dist/search/candidate-query.d.ts +25 -0
  521. package/dist/search/candidate-query.d.ts.map +1 -0
  522. package/dist/search/candidate-query.js +28 -0
  523. package/dist/search/candidate-query.js.map +1 -0
  524. package/dist/search/candidate-writings.d.ts +24 -0
  525. package/dist/search/candidate-writings.d.ts.map +1 -0
  526. package/dist/search/candidate-writings.js +114 -0
  527. package/dist/search/candidate-writings.js.map +1 -0
  528. package/dist/search/candidates.d.ts +7 -41
  529. package/dist/search/candidates.d.ts.map +1 -1
  530. package/dist/search/candidates.js +10 -164
  531. package/dist/search/candidates.js.map +1 -1
  532. package/dist/search/match-chunks.d.ts +19 -0
  533. package/dist/search/match-chunks.d.ts.map +1 -0
  534. package/dist/search/match-chunks.js +30 -0
  535. package/dist/search/match-chunks.js.map +1 -0
  536. package/dist/search/match-ranking.d.ts +39 -0
  537. package/dist/search/match-ranking.d.ts.map +1 -0
  538. package/dist/search/match-ranking.js +51 -0
  539. package/dist/search/match-ranking.js.map +1 -0
  540. package/dist/search/match-readings.d.ts +43 -0
  541. package/dist/search/match-readings.d.ts.map +1 -0
  542. package/dist/search/match-readings.js +83 -0
  543. package/dist/search/match-readings.js.map +1 -0
  544. package/dist/search/match-scoring.d.ts +146 -0
  545. package/dist/search/match-scoring.d.ts.map +1 -0
  546. package/dist/search/match-scoring.js +114 -0
  547. package/dist/search/match-scoring.js.map +1 -0
  548. package/dist/search/match-search.d.ts +28 -0
  549. package/dist/search/match-search.d.ts.map +1 -0
  550. package/dist/search/match-search.js +128 -0
  551. package/dist/search/match-search.js.map +1 -0
  552. package/dist/search/match.d.ts +5 -36
  553. package/dist/search/match.d.ts.map +1 -1
  554. package/dist/search/match.js +2 -379
  555. package/dist/search/match.js.map +1 -1
  556. package/dist/search/reverse-index-build.d.ts +30 -0
  557. package/dist/search/reverse-index-build.d.ts.map +1 -0
  558. package/dist/search/reverse-index-build.js +72 -0
  559. package/dist/search/reverse-index-build.js.map +1 -0
  560. package/dist/search/reverse-index-format.d.ts +60 -0
  561. package/dist/search/reverse-index-format.d.ts.map +1 -0
  562. package/dist/search/reverse-index-format.js +54 -0
  563. package/dist/search/reverse-index-format.js.map +1 -0
  564. package/dist/search/reverse-index-groups.d.ts +37 -0
  565. package/dist/search/reverse-index-groups.d.ts.map +1 -0
  566. package/dist/search/reverse-index-groups.js +71 -0
  567. package/dist/search/reverse-index-groups.js.map +1 -0
  568. package/dist/search/reverse-index-passes.d.ts +78 -0
  569. package/dist/search/reverse-index-passes.d.ts.map +1 -0
  570. package/dist/search/reverse-index-passes.js +59 -0
  571. package/dist/search/reverse-index-passes.js.map +1 -0
  572. package/dist/search/reverse-index-state.d.ts +36 -0
  573. package/dist/search/reverse-index-state.d.ts.map +1 -0
  574. package/dist/search/reverse-index-state.js +95 -0
  575. package/dist/search/reverse-index-state.js.map +1 -0
  576. package/dist/search/reverse-index.d.ts +8 -67
  577. package/dist/search/reverse-index.d.ts.map +1 -1
  578. package/dist/search/reverse-index.js +4 -255
  579. package/dist/search/reverse-index.js.map +1 -1
  580. package/dist/sources/unihan-readings.d.ts +58 -0
  581. package/dist/sources/unihan-readings.d.ts.map +1 -0
  582. package/dist/sources/unihan-readings.js +95 -0
  583. package/dist/sources/unihan-readings.js.map +1 -0
  584. package/dist/sources/unihan.d.ts +6 -9
  585. package/dist/sources/unihan.d.ts.map +1 -1
  586. package/dist/sources/unihan.js +2 -85
  587. package/dist/sources/unihan.js.map +1 -1
  588. package/dist/syllable/final-tables.d.ts +23 -0
  589. package/dist/syllable/final-tables.d.ts.map +1 -0
  590. package/dist/syllable/final-tables.js +50 -0
  591. package/dist/syllable/final-tables.js.map +1 -0
  592. package/dist/syllable/inventory.d.ts +8 -42
  593. package/dist/syllable/inventory.d.ts.map +1 -1
  594. package/dist/syllable/inventory.js +9 -918
  595. package/dist/syllable/inventory.js.map +1 -1
  596. package/dist/syllable/spellings.d.ts +40 -0
  597. package/dist/syllable/spellings.d.ts.map +1 -0
  598. package/dist/syllable/spellings.js +469 -0
  599. package/dist/syllable/spellings.js.map +1 -0
  600. package/dist/syllable/syllable-parts.d.ts +31 -0
  601. package/dist/syllable/syllable-parts.d.ts.map +1 -0
  602. package/dist/syllable/syllable-parts.js +105 -0
  603. package/dist/syllable/syllable-parts.js.map +1 -0
  604. package/dist/syllable/syllable.d.ts +1 -14
  605. package/dist/syllable/syllable.d.ts.map +1 -1
  606. package/dist/syllable/syllable.js +3 -144
  607. package/dist/syllable/syllable.js.map +1 -1
  608. package/dist/syllable/written-tones.d.ts +6 -0
  609. package/dist/syllable/written-tones.d.ts.map +1 -0
  610. package/dist/syllable/written-tones.js +453 -0
  611. package/dist/syllable/written-tones.js.map +1 -0
  612. package/dist/transcription/bopomofo-parse.d.ts +42 -0
  613. package/dist/transcription/bopomofo-parse.d.ts.map +1 -0
  614. package/dist/transcription/bopomofo-parse.js +92 -0
  615. package/dist/transcription/bopomofo-parse.js.map +1 -0
  616. package/dist/transcription/bopomofo-reverse.d.ts +31 -0
  617. package/dist/transcription/bopomofo-reverse.d.ts.map +1 -0
  618. package/dist/transcription/bopomofo-reverse.js +48 -0
  619. package/dist/transcription/bopomofo-reverse.js.map +1 -0
  620. package/dist/transcription/bopomofo-symbols.d.ts +36 -0
  621. package/dist/transcription/bopomofo-symbols.d.ts.map +1 -0
  622. package/dist/transcription/bopomofo-symbols.js +41 -0
  623. package/dist/transcription/bopomofo-symbols.js.map +1 -0
  624. package/dist/transcription/bopomofo-tables.d.ts +87 -0
  625. package/dist/transcription/bopomofo-tables.d.ts.map +1 -0
  626. package/dist/transcription/bopomofo-tables.js +180 -0
  627. package/dist/transcription/bopomofo-tables.js.map +1 -0
  628. package/dist/transcription/bopomofo.d.ts +14 -32
  629. package/dist/transcription/bopomofo.d.ts.map +1 -1
  630. package/dist/transcription/bopomofo.js +5 -343
  631. package/dist/transcription/bopomofo.js.map +1 -1
  632. package/dist/transcription/gwoyeu-first-second.d.ts +36 -0
  633. package/dist/transcription/gwoyeu-first-second.d.ts.map +1 -0
  634. package/dist/transcription/gwoyeu-first-second.js +75 -0
  635. package/dist/transcription/gwoyeu-first-second.js.map +1 -0
  636. package/dist/transcription/gwoyeu-spelling.d.ts +38 -0
  637. package/dist/transcription/gwoyeu-spelling.d.ts.map +1 -0
  638. package/dist/transcription/gwoyeu-spelling.js +124 -0
  639. package/dist/transcription/gwoyeu-spelling.js.map +1 -0
  640. package/dist/transcription/gwoyeu-tables.d.ts +93 -0
  641. package/dist/transcription/gwoyeu-tables.d.ts.map +1 -0
  642. package/dist/transcription/gwoyeu-tables.js +205 -0
  643. package/dist/transcription/gwoyeu-tables.js.map +1 -0
  644. package/dist/transcription/gwoyeu-tonal-forms.d.ts +49 -0
  645. package/dist/transcription/gwoyeu-tonal-forms.d.ts.map +1 -0
  646. package/dist/transcription/gwoyeu-tonal-forms.js +89 -0
  647. package/dist/transcription/gwoyeu-tonal-forms.js.map +1 -0
  648. package/dist/transcription/gwoyeu-vowels.d.ts +51 -0
  649. package/dist/transcription/gwoyeu-vowels.d.ts.map +1 -0
  650. package/dist/transcription/gwoyeu-vowels.js +58 -0
  651. package/dist/transcription/gwoyeu-vowels.js.map +1 -0
  652. package/dist/transcription/gwoyeu.d.ts +1 -26
  653. package/dist/transcription/gwoyeu.d.ts.map +1 -1
  654. package/dist/transcription/gwoyeu.js +2 -540
  655. package/dist/transcription/gwoyeu.js.map +1 -1
  656. package/dist/transcription/ipa-symbols.d.ts +67 -0
  657. package/dist/transcription/ipa-symbols.d.ts.map +1 -0
  658. package/dist/transcription/ipa-symbols.js +135 -0
  659. package/dist/transcription/ipa-symbols.js.map +1 -0
  660. package/dist/transcription/ipa.d.ts +2 -10
  661. package/dist/transcription/ipa.d.ts.map +1 -1
  662. package/dist/transcription/ipa.js +2 -134
  663. package/dist/transcription/ipa.js.map +1 -1
  664. package/dist/transcription/wade-giles-index.d.ts +35 -0
  665. package/dist/transcription/wade-giles-index.d.ts.map +1 -0
  666. package/dist/transcription/wade-giles-index.js +110 -0
  667. package/dist/transcription/wade-giles-index.js.map +1 -0
  668. package/dist/transcription/wade-giles-parse.d.ts +36 -0
  669. package/dist/transcription/wade-giles-parse.d.ts.map +1 -0
  670. package/dist/transcription/wade-giles-parse.js +84 -0
  671. package/dist/transcription/wade-giles-parse.js.map +1 -0
  672. package/dist/transcription/wade-giles-spelling.d.ts +61 -0
  673. package/dist/transcription/wade-giles-spelling.d.ts.map +1 -0
  674. package/dist/transcription/wade-giles-spelling.js +107 -0
  675. package/dist/transcription/wade-giles-spelling.js.map +1 -0
  676. package/dist/transcription/wade-giles-syllable.d.ts +29 -0
  677. package/dist/transcription/wade-giles-syllable.d.ts.map +1 -0
  678. package/dist/transcription/wade-giles-syllable.js +90 -0
  679. package/dist/transcription/wade-giles-syllable.js.map +1 -0
  680. package/dist/transcription/wade-giles-tables.d.ts +80 -0
  681. package/dist/transcription/wade-giles-tables.d.ts.map +1 -0
  682. package/dist/transcription/wade-giles-tables.js +178 -0
  683. package/dist/transcription/wade-giles-tables.js.map +1 -0
  684. package/dist/transcription/wade-giles.d.ts +9 -60
  685. package/dist/transcription/wade-giles.d.ts.map +1 -1
  686. package/dist/transcription/wade-giles.js +6 -543
  687. package/dist/transcription/wade-giles.js.map +1 -1
  688. package/dist/transcription/yale-tables.d.ts +54 -0
  689. package/dist/transcription/yale-tables.d.ts.map +1 -0
  690. package/dist/transcription/yale-tables.js +125 -0
  691. package/dist/transcription/yale-tables.js.map +1 -0
  692. package/dist/transcription/yale.d.ts.map +1 -1
  693. package/dist/transcription/yale.js +1 -124
  694. package/dist/transcription/yale.js.map +1 -1
  695. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reading-syllables.d.ts","sourceRoot":"","sources":["../../src/grade/reading-syllables.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAGxD;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,cAAc,GAAG;IAAE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC;AAE5E;;;;;;;GAOG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,SAAS,cAAc,EAAE,GAChC,SAAS,MAAM,EAAE,CAQnB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAEnE;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,SAAS,cAAc,EAAE,GAChC,SAAS,eAAe,EAAE,CAoB5B"}
@@ -0,0 +1,58 @@
1
+ import { toCharacters } from "../script/characters.js";
2
+ /**
3
+ * Where each piece's source characters start, in code points.
4
+ *
5
+ * Read off the sources rather than tracked through the conversion, which works
6
+ * because every character of the text is named by exactly one piece — a piece
7
+ * naming none is either pinyin orthography the source has no trace of, such as
8
+ * the space between two words, or a syllable reading on into the characters the
9
+ * piece before it named.
10
+ */
11
+ export function sourcePositions(pieces) {
12
+ const positions = [];
13
+ let at = 0;
14
+ for (const piece of pieces) {
15
+ positions.push(at);
16
+ at += toCharacters(piece.source ?? "").length;
17
+ }
18
+ return positions;
19
+ }
20
+ /**
21
+ * What a piece written between two syllables makes of the join.
22
+ *
23
+ * Only a hyphen written where the syllables would otherwise have run together
24
+ * is 分词连写's internal boundary; anything else — a space, punctuation, a
25
+ * stretch that was never Han — separates two words.
26
+ */
27
+ export function junctionOver(text, held) {
28
+ return text === "-" && held === "join" ? "hyphen" : "break";
29
+ }
30
+ /**
31
+ * The syllables a conversion writes, with their positions and what joins them.
32
+ *
33
+ * A conversion writes its syllables as adjacent pieces within a word — the
34
+ * 隔音符号 is part of a syllable's own spelling rather than a piece of its own —
35
+ * so anything standing between two of them is a boundary, and the hyphen of
36
+ * 分词连写 is the one that is not a word boundary.
37
+ */
38
+ export function readingSyllables(pieces) {
39
+ const positions = sourcePositions(pieces);
40
+ const syllables = [];
41
+ // The first syllable of a text begins a word, whatever comes before it.
42
+ let junction = "break";
43
+ for (const [at, piece] of pieces.entries()) {
44
+ if (piece.syllable === undefined) {
45
+ junction = junctionOver(piece.text, junction);
46
+ continue;
47
+ }
48
+ syllables.push({
49
+ piece: { ...piece, syllable: piece.syllable },
50
+ /* c8 ignore next -- one position is recorded for each piece there is */
51
+ at: positions[at] ?? 0,
52
+ junction,
53
+ });
54
+ junction = "join";
55
+ }
56
+ return syllables;
57
+ }
58
+ //# sourceMappingURL=reading-syllables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reading-syllables.js","sourceRoot":"","sources":["../../src/grade/reading-syllables.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AA0BvD;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAC7B,MAAiC;IAEjC,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnB,EAAE,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IAChD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,IAAc;IACvD,OAAO,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;AAC9D,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAAiC;IAEjC,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAsB,EAAE,CAAC;IACxC,wEAAwE;IACxE,IAAI,QAAQ,GAAa,OAAO,CAAC;IAEjC,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QAC3C,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACjC,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC9C,SAAS;QACX,CAAC;QACD,SAAS,CAAC,IAAI,CAAC;YACb,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE;YAC7C,wEAAwE;YACxE,EAAE,EAAE,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC;YACtB,QAAQ;SACT,CAAC,CAAC;QACH,QAAQ,GAAG,MAAM,CAAC;IACpB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Everything a typed syllable is allowed to be, beside the one answer.
3
+ *
4
+ * The checker's whole difficulty is here: the library writes one reading, and
5
+ * several others are not mistakes. A tone the sandhi square reaches the other
6
+ * way round, a reading the decode turned down without much reason to — each is
7
+ * a separate source of tolerance, and each is gathered here so that
8
+ * `check-readings.ts` can simply put them together.
9
+ */
10
+ import { type ConvertOptions } from "../decode/convert.js";
11
+ import type { Dictionary } from "../dictionary/dictionary.js";
12
+ import type { SandhiOptions } from "../decode/sandhi.js";
13
+ import { type Syllable } from "../syllable/syllable.js";
14
+ import type { Tone } from "../tone/tone.js";
15
+ import { type ReadingPiece, type ReadingSyllable } from "./reading-syllables.js";
16
+ /**
17
+ * The other corner of the sandhi square.
18
+ *
19
+ * A learner may write the underlying tones or the tones actually said, and both
20
+ * are right — 你好 is written `nǐ hǎo` and said `ní hǎo`. Rather than convert
21
+ * four times for the four combinations of {@link SandhiOptions}, this converts
22
+ * twice and inverts both switches at once, which reaches every tone: 一 and 不
23
+ * sandhi applies to syllables in the first and fourth tones, third-tone sandhi
24
+ * only to syllables in the third, so the two passes never touch the same
25
+ * syllable and each one's two forms both appear across the two corners.
26
+ */
27
+ export declare function oppositeSandhi(sandhi: SandhiOptions | undefined): SandhiOptions;
28
+ /**
29
+ * The readings the decode turned down without much reason to.
30
+ *
31
+ * The decode charges {@link READING_CHARGE} for a word boundary, so a rejected
32
+ * reading costing less than that was available without breaking any dictionary
33
+ * word apart — see {@link import("../decode/confidence.js").isUncertain}, which
34
+ * is the same threshold read as a question rather than as a filter. The library
35
+ * knows it was guessing there, so a learner who guessed the other way is not
36
+ * wrong.
37
+ *
38
+ * Only a rejected reading of exactly the one character this syllable reads is
39
+ * taken. An alternative can cover a different stretch — 玩儿 read as `wánr`
40
+ * competes with 玩 `wán` and 儿 `ér` — and a claim about other characters says
41
+ * nothing about what belongs in this position.
42
+ */
43
+ export declare function rejectedReadings(piece: ReadingPiece): readonly Syllable[];
44
+ /**
45
+ * Gather readings into the spellings and tones they allow.
46
+ *
47
+ * The tone is allowed to be undefined only because {@link Syllable.tone} is: a
48
+ * reading that came out of the dictionary always carries one.
49
+ */
50
+ export declare function acceptedReadings(readings: readonly Syllable[]): ReadonlyMap<string, ReadonlySet<Tone | undefined>>;
51
+ /**
52
+ * The same text converted three ways, one for each source of tolerance.
53
+ *
54
+ * The first is the answer itself, with the confidence report beside it. The
55
+ * second is the other corner of the sandhi square, which is where the second
56
+ * form of every tone comes from. The third is the same text written under the
57
+ * other spacing convention, which is where a boundary's tolerance comes from:
58
+ * 分词连写 is what puts 了 on its verb and separates 市 from 南京, and a learner
59
+ * who wrote the words the dictionary knows instead — `tā kàn le`, `Nánjīngshì`
60
+ * — has written one of the two conventions this package implements rather than
61
+ * made a mistake.
62
+ *
63
+ * All three decode identically. Sandhi rewrites tones and 分词连写 moves
64
+ * boundaries; neither touches the syllables underneath, so all three line up one
65
+ * for one.
66
+ */
67
+ export declare function readingsThreeWays(dictionary: Dictionary, text: string, options: ConvertOptions): {
68
+ readonly written: readonly ReadingSyllable[];
69
+ readonly said: readonly ReadingSyllable[];
70
+ readonly spaced: readonly ReadingSyllable[];
71
+ };
72
+ //# sourceMappingURL=reading-tolerance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reading-tolerance.d.ts","sourceRoot":"","sources":["../../src/grade/reading-tolerance.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EACL,KAAK,cAAc,EAGpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EAAE,KAAK,QAAQ,EAAyB,MAAM,yBAAyB,CAAC;AAC/E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,eAAe,EAErB,MAAM,wBAAwB,CAAC;AAEhC;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,aAAa,GAAG,SAAS,GAChC,aAAa,CAKf;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,SAAS,QAAQ,EAAE,CAczE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,SAAS,QAAQ,EAAE,GAC5B,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,CAUpD;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,cAAc,GACtB;IACD,QAAQ,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,CAAC;IAC7C,QAAQ,CAAC,IAAI,EAAE,SAAS,eAAe,EAAE,CAAC;IAC1C,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;CAC7C,CAgBA"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Everything a typed syllable is allowed to be, beside the one answer.
3
+ *
4
+ * The checker's whole difficulty is here: the library writes one reading, and
5
+ * several others are not mistakes. A tone the sandhi square reaches the other
6
+ * way round, a reading the decode turned down without much reason to — each is
7
+ * a separate source of tolerance, and each is gathered here so that
8
+ * `check-readings.ts` can simply put them together.
9
+ */
10
+ import { convertPieces, convertPiecesUnscored, } from "../decode/convert.js";
11
+ import { READING_CHARGE } from "../decode/lattice.js";
12
+ import { toCharacters } from "../script/characters.js";
13
+ import { writeSyllableSpelling } from "../syllable/syllable.js";
14
+ import { readingSyllables, } from "./reading-syllables.js";
15
+ /**
16
+ * The other corner of the sandhi square.
17
+ *
18
+ * A learner may write the underlying tones or the tones actually said, and both
19
+ * are right — 你好 is written `nǐ hǎo` and said `ní hǎo`. Rather than convert
20
+ * four times for the four combinations of {@link SandhiOptions}, this converts
21
+ * twice and inverts both switches at once, which reaches every tone: 一 and 不
22
+ * sandhi applies to syllables in the first and fourth tones, third-tone sandhi
23
+ * only to syllables in the third, so the two passes never touch the same
24
+ * syllable and each one's two forms both appear across the two corners.
25
+ */
26
+ export function oppositeSandhi(sandhi) {
27
+ return {
28
+ yiBu: !(sandhi?.yiBu ?? true),
29
+ thirdTone: !(sandhi?.thirdTone ?? false),
30
+ };
31
+ }
32
+ /**
33
+ * The readings the decode turned down without much reason to.
34
+ *
35
+ * The decode charges {@link READING_CHARGE} for a word boundary, so a rejected
36
+ * reading costing less than that was available without breaking any dictionary
37
+ * word apart — see {@link import("../decode/confidence.js").isUncertain}, which
38
+ * is the same threshold read as a question rather than as a filter. The library
39
+ * knows it was guessing there, so a learner who guessed the other way is not
40
+ * wrong.
41
+ *
42
+ * Only a rejected reading of exactly the one character this syllable reads is
43
+ * taken. An alternative can cover a different stretch — 玩儿 read as `wánr`
44
+ * competes with 玩 `wán` and 儿 `ér` — and a claim about other characters says
45
+ * nothing about what belongs in this position.
46
+ */
47
+ export function rejectedReadings(piece) {
48
+ const { confidence, source } = piece;
49
+ if (source === undefined || toCharacters(source).length !== 1) {
50
+ return [];
51
+ }
52
+ return (confidence?.alternatives ?? []).flatMap((alternative) => {
53
+ const [syllable] = alternative.reading;
54
+ return alternative.cost < READING_CHARGE &&
55
+ alternative.to - alternative.from === 1 &&
56
+ alternative.reading.length === 1 &&
57
+ syllable !== undefined
58
+ ? [syllable]
59
+ : [];
60
+ });
61
+ }
62
+ /**
63
+ * Gather readings into the spellings and tones they allow.
64
+ *
65
+ * The tone is allowed to be undefined only because {@link Syllable.tone} is: a
66
+ * reading that came out of the dictionary always carries one.
67
+ */
68
+ export function acceptedReadings(readings) {
69
+ const accepted = new Map();
70
+ for (const syllable of readings) {
71
+ const base = writeSyllableSpelling(syllable);
72
+ const tones = accepted.get(base) ?? new Set();
73
+ tones.add(syllable.tone);
74
+ accepted.set(base, tones);
75
+ }
76
+ return accepted;
77
+ }
78
+ /**
79
+ * The same text converted three ways, one for each source of tolerance.
80
+ *
81
+ * The first is the answer itself, with the confidence report beside it. The
82
+ * second is the other corner of the sandhi square, which is where the second
83
+ * form of every tone comes from. The third is the same text written under the
84
+ * other spacing convention, which is where a boundary's tolerance comes from:
85
+ * 分词连写 is what puts 了 on its verb and separates 市 from 南京, and a learner
86
+ * who wrote the words the dictionary knows instead — `tā kàn le`, `Nánjīngshì`
87
+ * — has written one of the two conventions this package implements rather than
88
+ * made a mistake.
89
+ *
90
+ * All three decode identically. Sandhi rewrites tones and 分词连写 moves
91
+ * boundaries; neither touches the syllables underneath, so all three line up one
92
+ * for one.
93
+ */
94
+ export function readingsThreeWays(dictionary, text, options) {
95
+ return {
96
+ written: readingSyllables(convertPieces(dictionary, text, options)),
97
+ said: readingSyllables(convertPiecesUnscored(dictionary, text, {
98
+ ...options,
99
+ sandhi: oppositeSandhi(options.sandhi),
100
+ })),
101
+ spaced: readingSyllables(convertPiecesUnscored(dictionary, text, {
102
+ ...options,
103
+ grouping: !(options.grouping ?? true),
104
+ })),
105
+ };
106
+ }
107
+ //# sourceMappingURL=reading-tolerance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reading-tolerance.js","sourceRoot":"","sources":["../../src/grade/reading-tolerance.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAEL,aAAa,EACb,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAiB,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAE/E,OAAO,EAGL,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAEhC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAiC;IAEjC,OAAO;QACL,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,IAAI,IAAI,CAAC;QAC7B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,SAAS,IAAI,KAAK,CAAC;KACzC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAmB;IAClD,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACrC,IAAI,MAAM,KAAK,SAAS,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9D,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,CAAC,UAAU,EAAE,YAAY,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE;QAC9D,MAAM,CAAC,QAAQ,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC;QACvC,OAAO,WAAW,CAAC,IAAI,GAAG,cAAc;YACtC,WAAW,CAAC,EAAE,GAAG,WAAW,CAAC,IAAI,KAAK,CAAC;YACvC,WAAW,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAChC,QAAQ,KAAK,SAAS;YACtB,CAAC,CAAC,CAAC,QAAQ,CAAC;YACZ,CAAC,CAAC,EAAE,CAAC;IACT,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAA6B;IAE7B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAiC,CAAC;IAE1D,KAAK,MAAM,QAAQ,IAAI,QAAQ,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,EAAoB,CAAC;QAChE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzB,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,iBAAiB,CAC/B,UAAsB,EACtB,IAAY,EACZ,OAAuB;IAMvB,OAAO;QACL,OAAO,EAAE,gBAAgB,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACnE,IAAI,EAAE,gBAAgB,CACpB,qBAAqB,CAAC,UAAU,EAAE,IAAI,EAAE;YACtC,GAAG,OAAO;YACV,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;SACvC,CAAC,CACH;QACD,MAAM,EAAE,gBAAgB,CACtB,qBAAqB,CAAC,UAAU,EAAE,IAAI,EAAE;YACtC,GAAG,OAAO;YACV,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC;SACtC,CAAC,CACH;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { type Syllable } from "../syllable/syllable.js";
2
+ import type { Tone } from "../tone/tone.js";
3
+ /**
4
+ * One syllable of what was typed.
5
+ */
6
+ export interface TypedSyllable {
7
+ readonly text: string;
8
+ readonly syllable: Syllable | undefined;
9
+ /** The toneless spelling this is aligned and compared by. */
10
+ readonly base: string;
11
+ /** The tone written on it, or undefined where none was. */
12
+ readonly tone: Tone | undefined;
13
+ /** Whether a written word begins here. */
14
+ readonly startsWord: boolean;
15
+ }
16
+ /**
17
+ * Read what was typed, one syllable at a time.
18
+ *
19
+ * {@link tokenisePinyin} is what the decoder is scored with, and it is tolerant
20
+ * in the two ways that matter here: word spacing is discarded, and the
21
+ * apostrophes and hyphens inside a word are read as the syllable boundaries
22
+ * they are and dropped. Both are orthography rather than pronunciation.
23
+ *
24
+ * A stretch that is not pinyin at all comes back whole, and is reported as
25
+ * written rather than thrown away.
26
+ */
27
+ export declare function typedReading(typed: string): readonly TypedSyllable[];
28
+ //# sourceMappingURL=typed-reading.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typed-reading.d.ts","sourceRoot":"","sources":["../../src/grade/typed-reading.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,KAAK,QAAQ,EAEd,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE5C;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC;IACxC,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,2DAA2D;IAC3D,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;IAChC,0CAA0C;IAC1C,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,aAAa,EAAE,CAepE"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * The reading someone typed, as the checker compares it.
3
+ *
4
+ * The other side from `check-readings.ts`, and much the smaller one: there is
5
+ * no dictionary behind a typed string, only the tokeniser and what each token
6
+ * turns out to spell.
7
+ */
8
+ import { tokenisePinyin } from "../accuracy/tokenise.js";
9
+ import { readSyllable, writeSyllableSpelling, } from "../syllable/syllable.js";
10
+ /**
11
+ * Read what was typed, one syllable at a time.
12
+ *
13
+ * {@link tokenisePinyin} is what the decoder is scored with, and it is tolerant
14
+ * in the two ways that matter here: word spacing is discarded, and the
15
+ * apostrophes and hyphens inside a word are read as the syllable boundaries
16
+ * they are and dropped. Both are orthography rather than pronunciation.
17
+ *
18
+ * A stretch that is not pinyin at all comes back whole, and is reported as
19
+ * written rather than thrown away.
20
+ */
21
+ export function typedReading(typed) {
22
+ const { syllables, wordStarts } = tokenisePinyin(typed);
23
+ return syllables.map((text, at) => {
24
+ const syllable = readSyllable(text);
25
+ return {
26
+ text,
27
+ syllable,
28
+ base: syllable === undefined
29
+ ? text.toLowerCase().normalize("NFC")
30
+ : writeSyllableSpelling(syllable),
31
+ tone: syllable?.tone,
32
+ startsWord: wordStarts.has(at),
33
+ };
34
+ });
35
+ }
36
+ //# sourceMappingURL=typed-reading.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typed-reading.js","sourceRoot":"","sources":["../../src/grade/typed-reading.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EACL,YAAY,EAEZ,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AAiBjC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACxD,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;QAChC,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACpC,OAAO;YACL,IAAI;YACJ,QAAQ;YACR,IAAI,EACF,QAAQ,KAAK,SAAS;gBACpB,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC;gBACrC,CAAC,CAAC,qBAAqB,CAAC,QAAQ,CAAC;YACrC,IAAI,EAAE,QAAQ,EAAE,IAAI;YACpB,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;SAC/B,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * What a number is made of, once its sign and its point are taken off.
3
+ */
4
+ export interface Parsed {
5
+ readonly isNegative: boolean;
6
+ /** The digits before the point, as written. */
7
+ readonly whole: string;
8
+ /** The digits after it, as written, or the empty string. */
9
+ readonly fraction: string;
10
+ }
11
+ /**
12
+ * Anything this module will read: digits, optionally signed and pointed.
13
+ *
14
+ * `security/detect-unsafe-regex` flags the optional group after `\d+`, and the
15
+ * literal `.` in front of it means no input can be split between the two. Timed
16
+ * on a signed decimal that cannot match, it is linear to 128k characters.
17
+ */
18
+ export declare const NUMBER: RegExp;
19
+ /**
20
+ * Take a number apart, keeping the digits exactly as they were written.
21
+ *
22
+ * A string rather than a number is the input that carries the most: `007` and
23
+ * `7` are the same quantity and different digits, and a room number keeps its
24
+ * zeros. A `number` is stringified first, which is why a caller who cares about
25
+ * leading zeros should pass the string.
26
+ */
27
+ export declare function parse(value: string | number): Parsed | undefined;
28
+ /**
29
+ * Write digits one at a time: 2019 → 二〇一九.
30
+ */
31
+ export declare function digitsHanzi(digits: string, zero: string): string;
32
+ //# sourceMappingURL=numeral-parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"numeral-parse.d.ts","sourceRoot":"","sources":["../../src/numerals/numeral-parse.ts"],"names":[],"mappings":"AASA;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,+CAA+C;IAC/C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,eAAO,MAAM,MAAM,QAAuD,CAAC;AAE3E;;;;;;;GAOG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAUhE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAMhE"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Taking a number apart into the pieces 汉字 are written from.
3
+ *
4
+ * A sign, a whole part and a fraction, plus the digit-at-a-time reading a
5
+ * fraction and a spelled-out number both use.
6
+ */
7
+ import { toCharacters } from "../script/characters.js";
8
+ import { DIGIT_CHARACTERS } from "./characters.js";
9
+ /**
10
+ * Anything this module will read: digits, optionally signed and pointed.
11
+ *
12
+ * `security/detect-unsafe-regex` flags the optional group after `\d+`, and the
13
+ * literal `.` in front of it means no input can be split between the two. Timed
14
+ * on a signed decimal that cannot match, it is linear to 128k characters.
15
+ */
16
+ export const NUMBER = /^(?<sign>-?)(?<whole>\d+)(?:\.(?<fraction>\d+))?$/u;
17
+ /**
18
+ * Take a number apart, keeping the digits exactly as they were written.
19
+ *
20
+ * A string rather than a number is the input that carries the most: `007` and
21
+ * `7` are the same quantity and different digits, and a room number keeps its
22
+ * zeros. A `number` is stringified first, which is why a caller who cares about
23
+ * leading zeros should pass the string.
24
+ */
25
+ export function parse(value) {
26
+ const found = NUMBER.exec(String(value))?.groups;
27
+ if (found === undefined) {
28
+ return undefined;
29
+ }
30
+ return {
31
+ isNegative: found["sign"] === "-",
32
+ whole: found["whole"] ?? "",
33
+ fraction: found["fraction"] ?? "",
34
+ };
35
+ }
36
+ /**
37
+ * Write digits one at a time: 2019 → 二〇一九.
38
+ */
39
+ export function digitsHanzi(digits, zero) {
40
+ return toCharacters(digits)
41
+ .map((digit) => digit === "0" ? zero : (DIGIT_CHARACTERS[Number(digit)] ?? digit))
42
+ .join("");
43
+ }
44
+ //# sourceMappingURL=numeral-parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"numeral-parse.js","sourceRoot":"","sources":["../../src/numerals/numeral-parse.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAanD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,oDAAoD,CAAC;AAE3E;;;;;;;GAOG;AACH,MAAM,UAAU,KAAK,CAAC,KAAsB;IAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC;IACjD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO;QACL,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG;QACjC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;QAC3B,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE;KAClC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,IAAY;IACtD,OAAO,YAAY,CAAC,MAAM,CAAC;SACxB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACb,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAClE;SACA,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * The shapes a number takes in running text.
3
+ *
4
+ * What counts as a number, what follows one and changes how it is said, and
5
+ * the bounds a time is written within. `text.ts` walks a text against them.
6
+ */
7
+ /**
8
+ * A number as it appears in running text: digits, with the separators a writer
9
+ * uses and an optional decimal part.
10
+ *
11
+ * `security/detect-unsafe-regex` flags the optional decimal after `[\d,]*`. A
12
+ * comma run and a decimal part cannot claim the same characters, since `\.` is
13
+ * neither a digit nor a comma, so there is nothing to backtrack over — timed
14
+ * linear to 128k characters.
15
+ */
16
+ export declare const NUMBER: RegExp;
17
+ /**
18
+ * The percent signs a number can carry, half-width and full-width.
19
+ */
20
+ export declare const PERCENT: Set<string>;
21
+ /**
22
+ * Marks that make the digits beside them an identifier rather than a quantity.
23
+ *
24
+ * 6:30 is a time, 3202-5625 is a phone number and COVID-19 is a name; none of
25
+ * them is counted, and the mark between the parts has no reading at all. So a
26
+ * digit run touching one is left exactly as it was written — of 7,846 digit
27
+ * runs measured over Tatoeba and zh.wikipedia about 55 are this shape, and
28
+ * reading them produced `liù:sānshí` for 6:30, which is worse than leaving it.
29
+ */
30
+ export declare const IDENTIFIER: Set<string>;
31
+ /**
32
+ * A time as a writer punctuates it: 6:30, 07:05, 2:30.
33
+ *
34
+ * Sticky, because it is tried at the start of a digit run the number scanner
35
+ * has already found rather than searched for on its own.
36
+ *
37
+ * Two digits after the colon and no more, which is what separates a time from
38
+ * a ratio: 16:9 and 2:1 are proportions and scores and are read `shíliù bǐ
39
+ * jiǔ`, which this does not attempt. Measured over Tatoeba and zh.wikipedia,
40
+ * the shape catches 104 runs and every one of them is a time — none has an
41
+ * hour above 23 or a minute above 59, and the four colon runs that are not
42
+ * times all have a single digit after the colon.
43
+ */
44
+ export declare const TIME: RegExp;
45
+ /**
46
+ * The bounds a time is written within.
47
+ */
48
+ export declare const HOURS_IN_A_DAY = 24;
49
+ export declare const MINUTES_IN_AN_HOUR = 60;
50
+ /**
51
+ * The characters a lone 2 in front of them labels rather than counts.
52
+ *
53
+ * A 2 standing immediately in front of what it counts is 两 — 两个, 两人, 两岁,
54
+ * 两次, 两天 — and the measure words it can count with are an open list, so 两
55
+ * is the default and this is the exception. What is left is the positions a
56
+ * digit *names*: 2月 is February, 2日 and 2号 are the second of the month, 2楼
57
+ * is the second floor, 2路 is the number 2 bus, 2班 is the second class and 2期
58
+ * is the second phase. A named position is 二.
59
+ *
60
+ * The traditional forms are listed beside the simplified ones, since the text
61
+ * being converted may be in either script.
62
+ */
63
+ export declare const LABELLED: Set<string>;
64
+ /**
65
+ * The units a lone 2 in front of them keeps 二 for, as the number itself does.
66
+ *
67
+ * 20 是二十 and 200 是二百, so 2十 and 2百 are written the same way: whether the
68
+ * unit is a digit or a character does not change how the number is said. 千, 万
69
+ * and 亿 are left to `CardinalOptions.liang` for exactly the same reason, which
70
+ * is why 2万 is 两万 as 20,000 already is.
71
+ */
72
+ export declare const SMALL_UNITS: Set<string>;
73
+ /**
74
+ * The mark that makes the number after it an ordinal: 第2次 is 第二次.
75
+ *
76
+ * An ordinal names a position however ordinary the measure word after it is,
77
+ * so it takes 二 where the same 2次 on its own would be 两次.
78
+ */
79
+ export declare const ORDINAL = "\u7B2C";
80
+ /**
81
+ * How many digits a year is written with, when it is a year and not a count.
82
+ *
83
+ * 1998年 is a year and is spelled out; 30年 is thirty years and is counted.
84
+ * Four is the length that separates them, and a two-digit year — 98年 for 1998
85
+ * — is left counted, because 20年 meaning twenty years is far commoner than
86
+ * 20年 meaning 2020 and nothing in the text tells them apart.
87
+ */
88
+ export declare const YEAR_DIGITS = 4;
89
+ //# sourceMappingURL=numeral-shapes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"numeral-shapes.d.ts","sourceRoot":"","sources":["../../src/numerals/numeral-shapes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH;;;;;;;;GAQG;AACH,eAAO,MAAM,MAAM,QAAyB,CAAC;AAE7C;;GAEG;AACH,eAAO,MAAM,OAAO,aAAsB,CAAC;AAE3C;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,aAAoD,CAAC;AAE5E;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,IAAI,QAAkC,CAAC;AAEpD;;GAEG;AACH,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,QAAQ,aAUnB,CAAC;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,aAAsB,CAAC;AAE/C;;;;;GAKG;AACH,eAAO,MAAM,OAAO,WAAM,CAAC;AAE3B;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,IAAI,CAAC"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * The shapes a number takes in running text.
3
+ *
4
+ * What counts as a number, what follows one and changes how it is said, and
5
+ * the bounds a time is written within. `text.ts` walks a text against them.
6
+ */
7
+ /**
8
+ * A number as it appears in running text: digits, with the separators a writer
9
+ * uses and an optional decimal part.
10
+ *
11
+ * `security/detect-unsafe-regex` flags the optional decimal after `[\d,]*`. A
12
+ * comma run and a decimal part cannot claim the same characters, since `\.` is
13
+ * neither a digit nor a comma, so there is nothing to backtrack over — timed
14
+ * linear to 128k characters.
15
+ */
16
+ export const NUMBER = /\d[\d,]*(?:\.\d+)?/gu;
17
+ /**
18
+ * The percent signs a number can carry, half-width and full-width.
19
+ */
20
+ export const PERCENT = new Set(["%", "%"]);
21
+ /**
22
+ * Marks that make the digits beside them an identifier rather than a quantity.
23
+ *
24
+ * 6:30 is a time, 3202-5625 is a phone number and COVID-19 is a name; none of
25
+ * them is counted, and the mark between the parts has no reading at all. So a
26
+ * digit run touching one is left exactly as it was written — of 7,846 digit
27
+ * runs measured over Tatoeba and zh.wikipedia about 55 are this shape, and
28
+ * reading them produced `liù:sānshí` for 6:30, which is worse than leaving it.
29
+ */
30
+ export const IDENTIFIER = new Set([":", ":", "-", "-", "—", "–", "/", "/"]);
31
+ /**
32
+ * A time as a writer punctuates it: 6:30, 07:05, 2:30.
33
+ *
34
+ * Sticky, because it is tried at the start of a digit run the number scanner
35
+ * has already found rather than searched for on its own.
36
+ *
37
+ * Two digits after the colon and no more, which is what separates a time from
38
+ * a ratio: 16:9 and 2:1 are proportions and scores and are read `shíliù bǐ
39
+ * jiǔ`, which this does not attempt. Measured over Tatoeba and zh.wikipedia,
40
+ * the shape catches 104 runs and every one of them is a time — none has an
41
+ * hour above 23 or a minute above 59, and the four colon runs that are not
42
+ * times all have a single digit after the colon.
43
+ */
44
+ export const TIME = /(\d{1,2})[::](\d{2})(?!\d)/duy;
45
+ /**
46
+ * The bounds a time is written within.
47
+ */
48
+ export const HOURS_IN_A_DAY = 24;
49
+ export const MINUTES_IN_AN_HOUR = 60;
50
+ /**
51
+ * The characters a lone 2 in front of them labels rather than counts.
52
+ *
53
+ * A 2 standing immediately in front of what it counts is 两 — 两个, 两人, 两岁,
54
+ * 两次, 两天 — and the measure words it can count with are an open list, so 两
55
+ * is the default and this is the exception. What is left is the positions a
56
+ * digit *names*: 2月 is February, 2日 and 2号 are the second of the month, 2楼
57
+ * is the second floor, 2路 is the number 2 bus, 2班 is the second class and 2期
58
+ * is the second phase. A named position is 二.
59
+ *
60
+ * The traditional forms are listed beside the simplified ones, since the text
61
+ * being converted may be in either script.
62
+ */
63
+ export const LABELLED = new Set([
64
+ "月",
65
+ "日",
66
+ "号",
67
+ "號",
68
+ "楼",
69
+ "樓",
70
+ "路",
71
+ "班",
72
+ "期",
73
+ ]);
74
+ /**
75
+ * The units a lone 2 in front of them keeps 二 for, as the number itself does.
76
+ *
77
+ * 20 是二十 and 200 是二百, so 2十 and 2百 are written the same way: whether the
78
+ * unit is a digit or a character does not change how the number is said. 千, 万
79
+ * and 亿 are left to `CardinalOptions.liang` for exactly the same reason, which
80
+ * is why 2万 is 两万 as 20,000 already is.
81
+ */
82
+ export const SMALL_UNITS = new Set(["十", "百"]);
83
+ /**
84
+ * The mark that makes the number after it an ordinal: 第2次 is 第二次.
85
+ *
86
+ * An ordinal names a position however ordinary the measure word after it is,
87
+ * so it takes 二 where the same 2次 on its own would be 两次.
88
+ */
89
+ export const ORDINAL = "第";
90
+ /**
91
+ * How many digits a year is written with, when it is a year and not a count.
92
+ *
93
+ * 1998年 is a year and is spelled out; 30年 is thirty years and is counted.
94
+ * Four is the length that separates them, and a two-digit year — 98年 for 1998
95
+ * — is left counted, because 20年 meaning twenty years is far commoner than
96
+ * 20年 meaning 2020 and nothing in the text tells them apart.
97
+ */
98
+ export const YEAR_DIGITS = 4;
99
+ //# sourceMappingURL=numeral-shapes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"numeral-shapes.js","sourceRoot":"","sources":["../../src/numerals/numeral-shapes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,sBAAsB,CAAC;AAE7C;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAE3C;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAE5E;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,+BAA+B,CAAC;AAEpD;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AACjC,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAErC;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC;IAC9B,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;CACJ,CAAC,CAAC;AAEH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAE/C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,CAAC;AAE3B;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"numerals.d.ts","sourceRoot":"","sources":["../../src/numerals/numerals.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAEL,KAAK,eAAe,EAErB,MAAM,eAAe,CAAC;AAOvB;;;;;;;;;GASG;AACH,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,eAAe;IACrD,8BAA8B;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC;IAC9B;;;;;;;OAOG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACvB;;OAEG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;CAC3B;AAqDD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,OAAO,GAAE,cAAmB,GAC3B,MAAM,GAAG,SAAS,CA0BpB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,cAAmB,GAC3B,SAAS,QAAQ,EAAE,GAAG,SAAS,CAajC;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,OAAO,GAAE,cAAmB,GAC3B,SAAS,QAAQ,EAAE,GAAG,SAAS,CAGjC;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,OAAO,GAAE,cAAmB,GAC3B,MAAM,GAAG,SAAS,CAKpB;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,GAAG,MAAM,EAC1B,WAAW,EAAE,MAAM,GAAG,MAAM,EAC5B,OAAO,GAAE,cAAmB,GAC3B,MAAM,GAAG,SAAS,CAOpB"}
1
+ {"version":3,"file":"numerals.d.ts","sourceRoot":"","sources":["../../src/numerals/numerals.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAEL,KAAK,eAAe,EAErB,MAAM,eAAe,CAAC;AAGvB;;;;;;;;;GASG;AACH,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,eAAe;IACrD,8BAA8B;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC;IAC9B;;;;;;;OAOG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACvB;;OAEG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;CAC3B;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,OAAO,GAAE,cAAmB,GAC3B,MAAM,GAAG,SAAS,CA0BpB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,cAAmB,GAC3B,SAAS,QAAQ,EAAE,GAAG,SAAS,CAajC;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,OAAO,GAAE,cAAmB,GAC3B,SAAS,QAAQ,EAAE,GAAG,SAAS,CAGjC;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,OAAO,GAAE,cAAmB,GAC3B,MAAM,GAAG,SAAS,CAKpB;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,GAAG,MAAM,EAC1B,WAAW,EAAE,MAAM,GAAG,MAAM,EAC5B,OAAO,GAAE,cAAmB,GAC3B,MAAM,GAAG,SAAS,CAOpB"}