@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
@@ -1,73 +1,7 @@
1
- import { FREQUENCY_BUCKETS } from "../dictionary/frequency-table.js";
1
+ import { buildAll, startBuild } from "./reverse-index-build.js";
2
2
  import { KeyIndex } from "../dictionary/key-index.js";
3
- /**
4
- * The separator between reading keys, matching what {@link KeyIndex} expects.
5
- */
6
- const LINE = "\n";
7
- const SPACE = 32;
8
- const ZERO = 48;
9
- const FIVE = 53;
10
- const UMLAUT_U = "ü";
11
- const PLAIN_U = "u";
12
- /**
13
- * How many positions one {@link ReverseIndexBuild.step} covers by default.
14
- *
15
- * Sized so that a step is a frame rather than several: the full tier's build is
16
- * about 510 ms of work over 723,147 keys, so 20,000 keys is roughly 14 ms of it.
17
- * A caller with a frame budget of its own should pass its own number rather than
18
- * trust this one.
19
- */
20
- const STEP = 20_000;
21
- /**
22
- * Fold a stored reading into the key a typist's spelling reaches it by.
23
- *
24
- * `yin2 hang2` becomes `yinhang` and `lü4 se4` becomes `luse`. Three things go:
25
- * the spaces, because nobody types them; the tone digits, because a typist
26
- * mostly does not write tones and a toned query is answered by filtering a
27
- * toneless list rather than by a second index; and the umlaut, because `lu` and
28
- * `lv` both have to reach 绿 and the only spelling both of them fold to is `lu`.
29
- *
30
- * The 儿化 r **stays**, so 玩儿 is keyed `wanr` and not `wan`. It is a letter a
31
- * typist writes, and the query side reaches the key from both directions by
32
- * searching `wan` and `wanr` alike — see `candidates`.
33
- *
34
- * Nothing here parses a syllable, which is what keeps a pass over every key in
35
- * the dictionary affordable.
36
- */
37
- export function readingKey(reading) {
38
- let key = "";
39
- for (let at = 0; at < reading.length; at++) {
40
- /* c8 ignore next -- `at` is inside the string, so the fallback cannot fire */
41
- const code = reading.codePointAt(at) ?? 0;
42
- if (code === SPACE || (code >= ZERO && code <= FIVE)) {
43
- continue;
44
- }
45
- const character = reading.charAt(at);
46
- key += character === UMLAUT_U ? PLAIN_U : character;
47
- }
48
- return key;
49
- }
50
- /**
51
- * What share of the build each pass is worth, for {@link ReverseIndexBuild.progress}.
52
- */
53
- const SHARE = { counting: 0.45, filling: 0.45, ranking: 0.1 };
54
- /**
55
- * The empty posting list, shared rather than allocated per miss.
56
- */
57
- const NONE = new Uint32Array(0);
58
- /**
59
- * Read a `Uint32Array` at an index that is in range by construction.
60
- *
61
- * `noUncheckedIndexedAccess` types every read as possibly undefined, and every
62
- * one below is bounded by the layout of the array it indexes — a group start, a
63
- * cursor inside a group, a bucket between 0 and 15. Gathered here rather than
64
- * written as a fallback at each of them, since a fallback that cannot happen
65
- * reads as a case somebody considered.
66
- */
67
- /* c8 ignore next 3 -- the fallback is unreachable; see above */
68
- function readAt(values, at) {
69
- return values[at] ?? 0;
70
- }
3
+ import { NONE, readAt, } from "./reverse-index-passes.js";
4
+ export { readingKey } from "./reverse-index-format.js";
71
5
  /**
72
6
  * Which readings each word in the dictionary can be reached by.
73
7
  *
@@ -95,12 +29,7 @@ export class ReverseIndex {
95
29
  * for anything that has a frame to hold on to.
96
30
  */
97
31
  static of(dictionary) {
98
- const build = this.building(dictionary);
99
- let index = build.step(Number.POSITIVE_INFINITY);
100
- while (index === undefined) {
101
- index = build.step(Number.POSITIVE_INFINITY);
102
- }
103
- return index;
32
+ return buildAll(dictionary);
104
33
  }
105
34
  /**
106
35
  * Start a build that can be driven a slice at a time.
@@ -173,184 +102,4 @@ export class ReverseIndex {
173
102
  };
174
103
  }
175
104
  }
176
- /**
177
- * The streaming build, which never holds every reading at once.
178
- *
179
- * Three passes over the dictionary — count the groups, fill them, rank them —
180
- * with each key's reading recomputed in the fill pass rather than kept from the
181
- * count pass. That trade is the whole reason this is safe on a phone: keeping
182
- * all 723,147 readings costs 39 MB retained and peaks at 65 MB, where
183
- * recomputing them peaks at 25 MB for a 2 MB result.
184
- *
185
- * A closure rather than a class because the state is a cursor and four buffers
186
- * that only the passes below ever touch, and because two of them are dropped
187
- * part way through: what is live during counting is not what is live during
188
- * ranking.
189
- */
190
- function startBuild(dictionary) {
191
- const readings = dictionary.readingsInOrder();
192
- let counts = new Map();
193
- let pass = "counting";
194
- let at = 0;
195
- let keys = [];
196
- let slots = new Map();
197
- let starts = new Uint32Array(1);
198
- let cursors = new Uint32Array(0);
199
- let postings = NONE;
200
- let widest = 0;
201
- /** The reading key at a position, or the empty string where there is none. */
202
- const keyAt = (position) => readingKey(readings.readingAt(position));
203
- /** Where a position sorts, commonest first: the bucket, counted downwards. */
204
- const rankOf = (position) => FREQUENCY_BUCKETS - 1 - dictionary.frequencyAt(position);
205
- /** Count how many words each reading has, so the postings can be one array. */
206
- const count = (positions) => {
207
- const end = Math.min(readings.size, at + positions);
208
- for (; at < end; at++) {
209
- const key = keyAt(at);
210
- if (key !== "") {
211
- counts.set(key, (counts.get(key) ?? 0) + 1);
212
- }
213
- }
214
- if (at >= readings.size) {
215
- pass = "ordering";
216
- }
217
- };
218
- /**
219
- * Sort the reading keys and lay out where each group's postings go.
220
- *
221
- * One step of its own, because a sort cannot be resumed part way through.
222
- */
223
- const order = () => {
224
- // Sorted as pairs rather than by key and looked up again, and by code unit
225
- // rather than by locale, which is the order `KeyIndex` searches in.
226
- const ordered = [...counts].toSorted(([left], [right]) => left < right ? -1 : Number(left > right));
227
- keys = ordered.map(([key]) => key);
228
- starts = new Uint32Array(keys.length + 1);
229
- let running = 0;
230
- for (const [group, [key, held]] of ordered.entries()) {
231
- slots.set(key, group);
232
- starts[group] = running;
233
- running += held;
234
- widest = Math.max(widest, held);
235
- }
236
- starts[keys.length] = running;
237
- counts = new Map();
238
- cursors = starts.slice(0, keys.length);
239
- postings = new Uint32Array(running);
240
- at = 0;
241
- pass = "filling";
242
- };
243
- /** Place each position in its reading's group, recomputing the reading. */
244
- const fill = (positions) => {
245
- const end = Math.min(readings.size, at + positions);
246
- for (; at < end; at++) {
247
- const key = keyAt(at);
248
- const group = key === "" ? undefined : slots.get(key);
249
- if (group === undefined) {
250
- continue;
251
- }
252
- const cursor = readAt(cursors, group);
253
- postings[cursor] = at;
254
- cursors[group] = cursor + 1;
255
- }
256
- if (at >= readings.size) {
257
- slots = new Map();
258
- cursors = new Uint32Array(0);
259
- at = 0;
260
- pass = "ranking";
261
- }
262
- };
263
- /**
264
- * Sort each group likeliest-first, which is a counting sort on the bucket.
265
- *
266
- * Buckets run 0 to 15, so there is nothing to compare: tally the group, turn
267
- * the tally into offsets, and deal the postings out. Stable, so two words in
268
- * the same bucket keep the dictionary's own order and the result does not
269
- * depend on how the fill pass happened to lay the postings down.
270
- */
271
- const rank = (groups) => {
272
- const scratch = new Uint32Array(widest);
273
- const tally = new Uint32Array(FREQUENCY_BUCKETS);
274
- const end = Math.min(keys.length, at + groups);
275
- for (; at < end; at++) {
276
- const from = readAt(starts, at);
277
- const to = readAt(starts, at + 1);
278
- tally.fill(0);
279
- for (let cursor = from; cursor < to; cursor++) {
280
- const position = readAt(postings, cursor);
281
- scratch[cursor - from] = position;
282
- const bucket = rankOf(position);
283
- tally[bucket] = readAt(tally, bucket) + 1;
284
- }
285
- let running = from;
286
- for (let bucket = 0; bucket < FREQUENCY_BUCKETS; bucket++) {
287
- const held = readAt(tally, bucket);
288
- tally[bucket] = running;
289
- running += held;
290
- }
291
- for (let cursor = 0; cursor < to - from; cursor++) {
292
- const position = readAt(scratch, cursor);
293
- const bucket = rankOf(position);
294
- postings[readAt(tally, bucket)] = position;
295
- tally[bucket] = readAt(tally, bucket) + 1;
296
- }
297
- }
298
- if (at < keys.length) {
299
- return undefined;
300
- }
301
- pass = "done";
302
- return ReverseIndex.from(dictionary, {
303
- keys: keys.join(LINE),
304
- postings,
305
- starts,
306
- });
307
- };
308
- return {
309
- get progress() {
310
- const size = Math.max(1, readings.size);
311
- switch (pass) {
312
- case "counting": {
313
- return (SHARE.counting * at) / size;
314
- }
315
- case "ordering": {
316
- return SHARE.counting;
317
- }
318
- case "filling": {
319
- return SHARE.counting + (SHARE.filling * at) / size;
320
- }
321
- case "ranking": {
322
- return (SHARE.counting +
323
- SHARE.filling +
324
- (SHARE.ranking * at) / Math.max(1, keys.length));
325
- }
326
- case "done": {
327
- return 1;
328
- }
329
- }
330
- },
331
- step(positions = STEP) {
332
- switch (pass) {
333
- case "counting": {
334
- count(positions);
335
- return undefined;
336
- }
337
- case "ordering": {
338
- order();
339
- return undefined;
340
- }
341
- case "filling": {
342
- fill(positions);
343
- return undefined;
344
- }
345
- case "ranking": {
346
- return rank(positions);
347
- }
348
- /* c8 ignore next 3 -- a finished build is not stepped again */
349
- case "done": {
350
- return undefined;
351
- }
352
- }
353
- },
354
- };
355
- }
356
105
  //# sourceMappingURL=reverse-index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"reverse-index.js","sourceRoot":"","sources":["../../src/search/reverse-index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reverse-index.js","sourceRoot":"","sources":["../../src/search/reverse-index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEtD,OAAO,EACL,IAAI,EACJ,MAAM,GAEP,MAAM,2BAA2B,CAAC;AAInC,OAAO,EAAE,UAAU,EAAyB,MAAM,2BAA2B,CAAC;AAE9E;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAO,YAAY;IACvB;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,CAAC,UAAsB;QAC9B,OAAO,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,UAAsB;QACpC,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,IAAI,CAAC,UAAsB,EAAE,IAAsB;QACxD,OAAO,IAAI,YAAY,CACrB,UAAU,EACV,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EACxB,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,MAAM,CACZ,CAAC;IACJ,CAAC;IAEQ,WAAW,CAAa;IACxB,KAAK,CAAW;IAChB,SAAS,CAAc;IACvB,OAAO,CAAc;IAE9B;;;OAGG;IACH,YACE,UAAsB,EACtB,IAAc,EACd,QAAqB,EACrB,MAAmB;QAEnB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAED;;;OAGG;IACH,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;IAED;;;;;;;;OAQG;IACH,YAAY,CAAC,GAAW;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAC5B,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,EACjC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CACtC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;YAC5B,QAAQ,EAAE,IAAI,CAAC,SAAS;YACxB,MAAM,EAAE,IAAI,CAAC,OAAO;SACrB,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Reading and ranking the pronunciation fields Unihan carries.
3
+ *
4
+ * The fields disagree and are not equally trustworthy, so the order they are
5
+ * consulted in is what settles a character's readings.
6
+ */
7
+ import { type ReadingField } from "./unihan.js";
8
+ /**
9
+
10
+ /**
11
+ * Pull the readings out of one field's value.
12
+ *
13
+ * The fields do not share a syntax: `kHanyuPinlu` writes `de(5096) dé(1496)`,
14
+ * the dictionary-indexed fields write `069.040:dé 069.090:de`, and `kMandarin`
15
+ * writes bare readings separated by spaces.
16
+ */
17
+ export declare function readFieldValue(field: ReadingField, value: string): string[];
18
+ /**
19
+ * Whether `kHanyuPinlu` ranks this character's readings against each other.
20
+ *
21
+ * True only where it lists more than one, which is the difference between a
22
+ * ranking and a bare observation — see {@link fieldOrder}. It decides both what
23
+ * ranks the readings here and whether anything downstream is entitled to
24
+ * re-rank them, so it is one predicate rather than two.
25
+ */
26
+ export declare function isFrequencyRanked(fields: ReadonlyMap<ReadingField, readonly string[]>): boolean;
27
+ /**
28
+ * Which fields to trust, in order, for one character.
29
+ *
30
+ * `kHanyuPinlu` is a ranking, and a ranking of one thing is not a ranking. Where
31
+ * the field lists a single reading it never compared it against anything, so it
32
+ * is saying "this reading occurred in the corpus" rather than "this reading
33
+ * leads" — and it is demoted to last, keeping its reading as a candidate
34
+ * without letting it set the default.
35
+ *
36
+ * That matters because the corpus behind the field, 《現代漢語頻率詞典》,
37
+ * predates the 1985 普通话异读词审音表. Where it is the only voice it can be
38
+ * reporting a reading that was standard then and is not now: of the ten
39
+ * characters where a lone `kHanyuPinlu` reading disagrees with `kMandarin`,
40
+ * eight are the superseded reading — 绩 `jī` for `jì`, 迹 `jī` for `jì`, 脊
41
+ * `jí` for `jǐ`, 哮 `xiāo` for `xiào`, 茸 `rōng` for `róng`, 澎 `pēng` for
42
+ * `péng`, 啥 `shà` for `shá`, 甸 `diān` for `diàn`. A high count does not make
43
+ * one current; 绩 `jī` carries 132 of them.
44
+ *
45
+ * The other two are genuine variants where both readings are current — 谁 is
46
+ * `shéi` or `shuí`, 桔 is `jié` or `jú` — so `kMandarin` deciding them costs
47
+ * nothing that a word entry does not already settle.
48
+ */
49
+ export declare function fieldOrder(fields: ReadonlyMap<ReadingField, readonly string[]>): readonly ReadingField[];
50
+ /**
51
+ * Gather one character's readings from its fields, likeliest first.
52
+ *
53
+ * A reading appearing in several fields keeps the position its highest-trusted
54
+ * one gives it, and every field's readings survive: the order decides the
55
+ * default, not the membership.
56
+ */
57
+ export declare function rankReadings(fields: ReadonlyMap<ReadingField, readonly string[]>): string[];
58
+ //# sourceMappingURL=unihan-readings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unihan-readings.d.ts","sourceRoot":"","sources":["../../src/sources/unihan-readings.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AAGrB;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAoB3E;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,WAAW,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC,GACnD,OAAO,CAET;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,WAAW,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC,GACnD,SAAS,YAAY,EAAE,CAQzB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,WAAW,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC,GACnD,MAAM,EAAE,CAUV"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Reading and ranking the pronunciation fields Unihan carries.
3
+ *
4
+ * The fields disagree and are not equally trustworthy, so the order they are
5
+ * consulted in is what settles a character's readings.
6
+ */
7
+ import { FREQUENCY_FIELD, READING_FIELDS, } from "./unihan.js";
8
+ const READING_WITH_COUNT = /^(.+)\((\d+)\)$/u;
9
+ /**
10
+
11
+ /**
12
+ * Pull the readings out of one field's value.
13
+ *
14
+ * The fields do not share a syntax: `kHanyuPinlu` writes `de(5096) dé(1496)`,
15
+ * the dictionary-indexed fields write `069.040:dé 069.090:de`, and `kMandarin`
16
+ * writes bare readings separated by spaces.
17
+ */
18
+ export function readFieldValue(field, value) {
19
+ const tokens = value.split(/\s+/u).filter((token) => token !== "");
20
+ if (field === "kHanyuPinlu") {
21
+ return tokens
22
+ .map((token) => READING_WITH_COUNT.exec(token))
23
+ .filter((match) => match !== null)
24
+ .map((match) => ({ reading: match[1] ?? "", count: Number(match[2]) }))
25
+ .toSorted((left, right) => right.count - left.count)
26
+ .map(({ reading }) => reading);
27
+ }
28
+ // kTGHZ2013 and kXHC1983 prefix each reading with its dictionary entry
29
+ // number, as in 069.040:dé, and may list several against one entry.
30
+ return tokens
31
+ .flatMap((token) => token.includes(":") ? (token.split(":", 2)[1] ?? "") : token)
32
+ .flatMap((reading) => reading.split(","))
33
+ .filter((reading) => reading !== "");
34
+ }
35
+ /**
36
+ * Whether `kHanyuPinlu` ranks this character's readings against each other.
37
+ *
38
+ * True only where it lists more than one, which is the difference between a
39
+ * ranking and a bare observation — see {@link fieldOrder}. It decides both what
40
+ * ranks the readings here and whether anything downstream is entitled to
41
+ * re-rank them, so it is one predicate rather than two.
42
+ */
43
+ export function isFrequencyRanked(fields) {
44
+ return (fields.get(FREQUENCY_FIELD) ?? []).length > 1;
45
+ }
46
+ /**
47
+ * Which fields to trust, in order, for one character.
48
+ *
49
+ * `kHanyuPinlu` is a ranking, and a ranking of one thing is not a ranking. Where
50
+ * the field lists a single reading it never compared it against anything, so it
51
+ * is saying "this reading occurred in the corpus" rather than "this reading
52
+ * leads" — and it is demoted to last, keeping its reading as a candidate
53
+ * without letting it set the default.
54
+ *
55
+ * That matters because the corpus behind the field, 《現代漢語頻率詞典》,
56
+ * predates the 1985 普通话异读词审音表. Where it is the only voice it can be
57
+ * reporting a reading that was standard then and is not now: of the ten
58
+ * characters where a lone `kHanyuPinlu` reading disagrees with `kMandarin`,
59
+ * eight are the superseded reading — 绩 `jī` for `jì`, 迹 `jī` for `jì`, 脊
60
+ * `jí` for `jǐ`, 哮 `xiāo` for `xiào`, 茸 `rōng` for `róng`, 澎 `pēng` for
61
+ * `péng`, 啥 `shà` for `shá`, 甸 `diān` for `diàn`. A high count does not make
62
+ * one current; 绩 `jī` carries 132 of them.
63
+ *
64
+ * The other two are genuine variants where both readings are current — 谁 is
65
+ * `shéi` or `shuí`, 桔 is `jié` or `jú` — so `kMandarin` deciding them costs
66
+ * nothing that a word entry does not already settle.
67
+ */
68
+ export function fieldOrder(fields) {
69
+ if (isFrequencyRanked(fields)) {
70
+ return READING_FIELDS;
71
+ }
72
+ return [
73
+ ...READING_FIELDS.filter((field) => field !== FREQUENCY_FIELD),
74
+ FREQUENCY_FIELD,
75
+ ];
76
+ }
77
+ /**
78
+ * Gather one character's readings from its fields, likeliest first.
79
+ *
80
+ * A reading appearing in several fields keeps the position its highest-trusted
81
+ * one gives it, and every field's readings survive: the order decides the
82
+ * default, not the membership.
83
+ */
84
+ export function rankReadings(fields) {
85
+ const ordered = [];
86
+ for (const field of fieldOrder(fields)) {
87
+ for (const reading of fields.get(field) ?? []) {
88
+ if (!ordered.includes(reading)) {
89
+ ordered.push(reading);
90
+ }
91
+ }
92
+ }
93
+ return ordered;
94
+ }
95
+ //# sourceMappingURL=unihan-readings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unihan-readings.js","sourceRoot":"","sources":["../../src/sources/unihan-readings.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,eAAe,EACf,cAAc,GAEf,MAAM,aAAa,CAAC;AAErB,MAAM,kBAAkB,GAAG,kBAAkB,CAAC;AAC9C;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAAC,KAAmB,EAAE,KAAa;IAC/D,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;IAEnE,IAAI,KAAK,KAAK,aAAa,EAAE,CAAC;QAC5B,OAAO,MAAM;aACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAC9C,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC;aACjC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;aACtE,QAAQ,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;aACnD,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,uEAAuE;IACvE,oEAAoE;IACpE,OAAO,MAAM;SACV,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CACjB,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAC7D;SACA,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SACxC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAAoD;IAEpD,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AACxD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,UAAU,CACxB,MAAoD;IAEpD,IAAI,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,OAAO,cAAc,CAAC;IACxB,CAAC;IACD,OAAO;QACL,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,eAAe,CAAC;QAC9D,eAAe;KAChB,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAC1B,MAAoD;IAEpD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACvC,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YAC9C,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC/B,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1,4 +1,6 @@
1
+ export { isFrequencyRanked } from "./unihan-readings.js";
1
2
  /**
3
+ import { fieldOrder, isFrequencyRanked, rankReadings, readFieldValue } from "./unihan-readings.js";
2
4
  * What the Unihan database knows about one character's readings.
3
5
  */
4
6
  export interface UnihanReadings {
@@ -29,6 +31,10 @@ export interface UnihanReadings {
29
31
  */
30
32
  readonly taiwanReading?: string;
31
33
  }
34
+ /**
35
+ * A single `kHanyuPinlu` token: a reading with its corpus count, as in
36
+ * `de(5096)`.
37
+ */
32
38
  /**
33
39
  * Fields carrying readings, in the order their readings are trusted.
34
40
  *
@@ -58,15 +64,6 @@ export type ReadingField = (typeof READING_FIELDS)[number];
58
64
  * most careful to read.
59
65
  */
60
66
  export declare const FREQUENCY_FIELD = "kHanyuPinlu";
61
- /**
62
- * Whether `kHanyuPinlu` ranks this character's readings against each other.
63
- *
64
- * True only where it lists more than one, which is the difference between a
65
- * ranking and a bare observation — see {@link fieldOrder}. It decides both what
66
- * ranks the readings here and whether anything downstream is entitled to
67
- * re-rank them, so it is one predicate rather than two.
68
- */
69
- export declare function isFrequencyRanked(fields: ReadonlyMap<ReadingField, readonly string[]>): boolean;
70
67
  /**
71
68
  * Read the readings out of a Unihan data file such as `Unihan_Readings.txt`.
72
69
  *
@@ -1 +1 @@
1
- {"version":3,"file":"unihan.d.ts","sourceRoot":"","sources":["../../src/sources/unihan.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC;;;;;;;;OAQG;IACH,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;IAC9D;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAaD;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,cAAc,YACzB,aAAa,EACb,WAAW,EACX,WAAW,EACX,UAAU,CACF,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,gBAAuC,CAAC;AA+BpE;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,WAAW,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC,GACnD,OAAO,CAET;AAyDD;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CA+C7E;AAUD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,mDAAmD;IACnD,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;IAC5D,mDAAmD;IACnD,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;CAC9D;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CA2BhE"}
1
+ {"version":3,"file":"unihan.d.ts","sourceRoot":"","sources":["../../src/sources/unihan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC;;;;;;;;OAQG;IACH,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;IAC9D;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAOD;;;GAGG;AAEH;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,cAAc,YACzB,aAAa,EACb,WAAW,EACX,WAAW,EACX,UAAU,CACF,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,gBAAuC,CAAC;AAEpE;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CA+C7E;AAUD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,mDAAmD;IACnD,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;IAC5D,mDAAmD;IACnD,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC;CAC9D;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CA2BhE"}
@@ -1,3 +1,5 @@
1
+ export { isFrequencyRanked } from "./unihan-readings.js";
2
+ import { rankReadings, readFieldValue } from "./unihan-readings.js";
1
3
  /**
2
4
  * A line of a Unihan data file: code point, field name, value.
3
5
  */
@@ -6,7 +8,6 @@ const FIELD_LINE = /^U\+([\dA-F]+)\t(\w+)\t(.+)$/u;
6
8
  * A single `kHanyuPinlu` token: a reading with its corpus count, as in
7
9
  * `de(5096)`.
8
10
  */
9
- const READING_WITH_COUNT = /^(.+)\((\d+)\)$/u;
10
11
  /**
11
12
  * Fields carrying readings, in the order their readings are trusted.
12
13
  *
@@ -37,90 +38,6 @@ export const READING_FIELDS = [
37
38
  * most careful to read.
38
39
  */
39
40
  export const FREQUENCY_FIELD = "kHanyuPinlu";
40
- /**
41
- * Pull the readings out of one field's value.
42
- *
43
- * The fields do not share a syntax: `kHanyuPinlu` writes `de(5096) dé(1496)`,
44
- * the dictionary-indexed fields write `069.040:dé 069.090:de`, and `kMandarin`
45
- * writes bare readings separated by spaces.
46
- */
47
- function readFieldValue(field, value) {
48
- const tokens = value.split(/\s+/u).filter((token) => token !== "");
49
- if (field === "kHanyuPinlu") {
50
- return tokens
51
- .map((token) => READING_WITH_COUNT.exec(token))
52
- .filter((match) => match !== null)
53
- .map((match) => ({ reading: match[1] ?? "", count: Number(match[2]) }))
54
- .toSorted((left, right) => right.count - left.count)
55
- .map(({ reading }) => reading);
56
- }
57
- // kTGHZ2013 and kXHC1983 prefix each reading with its dictionary entry
58
- // number, as in 069.040:dé, and may list several against one entry.
59
- return tokens
60
- .flatMap((token) => token.includes(":") ? (token.split(":", 2)[1] ?? "") : token)
61
- .flatMap((reading) => reading.split(","))
62
- .filter((reading) => reading !== "");
63
- }
64
- /**
65
- * Whether `kHanyuPinlu` ranks this character's readings against each other.
66
- *
67
- * True only where it lists more than one, which is the difference between a
68
- * ranking and a bare observation — see {@link fieldOrder}. It decides both what
69
- * ranks the readings here and whether anything downstream is entitled to
70
- * re-rank them, so it is one predicate rather than two.
71
- */
72
- export function isFrequencyRanked(fields) {
73
- return (fields.get(FREQUENCY_FIELD) ?? []).length > 1;
74
- }
75
- /**
76
- * Which fields to trust, in order, for one character.
77
- *
78
- * `kHanyuPinlu` is a ranking, and a ranking of one thing is not a ranking. Where
79
- * the field lists a single reading it never compared it against anything, so it
80
- * is saying "this reading occurred in the corpus" rather than "this reading
81
- * leads" — and it is demoted to last, keeping its reading as a candidate
82
- * without letting it set the default.
83
- *
84
- * That matters because the corpus behind the field, 《現代漢語頻率詞典》,
85
- * predates the 1985 普通话异读词审音表. Where it is the only voice it can be
86
- * reporting a reading that was standard then and is not now: of the ten
87
- * characters where a lone `kHanyuPinlu` reading disagrees with `kMandarin`,
88
- * eight are the superseded reading — 绩 `jī` for `jì`, 迹 `jī` for `jì`, 脊
89
- * `jí` for `jǐ`, 哮 `xiāo` for `xiào`, 茸 `rōng` for `róng`, 澎 `pēng` for
90
- * `péng`, 啥 `shà` for `shá`, 甸 `diān` for `diàn`. A high count does not make
91
- * one current; 绩 `jī` carries 132 of them.
92
- *
93
- * The other two are genuine variants where both readings are current — 谁 is
94
- * `shéi` or `shuí`, 桔 is `jié` or `jú` — so `kMandarin` deciding them costs
95
- * nothing that a word entry does not already settle.
96
- */
97
- function fieldOrder(fields) {
98
- if (isFrequencyRanked(fields)) {
99
- return READING_FIELDS;
100
- }
101
- return [
102
- ...READING_FIELDS.filter((field) => field !== FREQUENCY_FIELD),
103
- FREQUENCY_FIELD,
104
- ];
105
- }
106
- /**
107
- * Gather one character's readings from its fields, likeliest first.
108
- *
109
- * A reading appearing in several fields keeps the position its highest-trusted
110
- * one gives it, and every field's readings survive: the order decides the
111
- * default, not the membership.
112
- */
113
- function rankReadings(fields) {
114
- const ordered = [];
115
- for (const field of fieldOrder(fields)) {
116
- for (const reading of fields.get(field) ?? []) {
117
- if (!ordered.includes(reading)) {
118
- ordered.push(reading);
119
- }
120
- }
121
- }
122
- return ordered;
123
- }
124
41
  /**
125
42
  * Read the readings out of a Unihan data file such as `Unihan_Readings.txt`.
126
43
  *
@@ -1 +1 @@
1
- {"version":3,"file":"unihan.js","sourceRoot":"","sources":["../../src/sources/unihan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"unihan.js","sourceRoot":"","sources":["../../src/sources/unihan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAkCpE;;GAEG;AACH,MAAM,UAAU,GAAG,+BAA+B,CAAC;AAEnD;;;GAGG;AAEH;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,aAAa;IACb,WAAW;IACX,WAAW;IACX,UAAU;CACF,CAAC;AAOX;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,aAAoC,CAAC;AAEpE;;;;;;;;;;GAUG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAuC,CAAC;IAC/D,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEjD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,SAAS;QACX,CAAC;QACD,MAAM,CAAC,EAAE,SAAS,GAAG,EAAE,EAAE,SAAS,GAAG,EAAE,EAAE,KAAK,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC;QAC7D,IAAI,CAAE,cAAoC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/D,SAAS;QACX,CAAC;QAED,MAAM,KAAK,GAAG,SAAyB,CAAC;QACxC,MAAM,SAAS,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;QACvE,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC9C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,SAAS;QACX,CAAC;QAED,wEAAwE;QACxE,IAAI,KAAK,KAAK,WAAW,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjD,MAAM,CAAC,QAAQ,GAAG,EAAE,EAAE,MAAM,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC;YAC9C,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACxB,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACxC,CAAC;YACD,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACtB,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,GAAG,EAA0B,CAAC;QAC3E,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,EAA0B,CAAC;IACjD,KAAK,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,aAAa,GAAG,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE;YACpB,QAAQ,EAAE,OAAO;YACjB,MAAM;YACN,GAAG,CAAC,aAAa,KAAK,SAAS,IAAI,EAAE,aAAa,EAAE,CAAC;SACtD,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,YAAY,GAChB,kEAAkE,CAAC;AAErE,MAAM,kBAAkB,GAAG,kBAAkB,CAAC;AAY9C;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,MAAM,UAAU,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC/C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAoB,CAAC;IAEhD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,SAAS;QACX,CAAC;QACD,MAAM,CAAC,EAAE,SAAS,GAAG,EAAE,EAAE,SAAS,GAAG,EAAE,EAAE,KAAK,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC;QAC7D,MAAM,SAAS,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;QACvE,MAAM,QAAQ,GAAG,KAAK;aACnB,KAAK,CAAC,MAAM,CAAC;aACb,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAC9C,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC;aACjC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACb,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC,CAC3D,CAAC;QACJ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GACV,SAAS,KAAK,oBAAoB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC;QAChE,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;AACrC,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * How a written final maps back to its underlying form after a palatal initial,
3
+ * where a written u always stands for ü.
4
+ */
5
+ export declare const PALATAL_FINALS: Map<string, "a" | "ai" | "an" | "ang" | "ao" | "e" | "ei" | "en" | "eng" | "er" | "i" | "ia" | "ian" | "iang" | "iao" | "ie" | "in" | "ing" | "io" | "iong" | "iou" | "m" | "n" | "ng" | "o" | "ong" | "ou" | "u" | "ua" | "uai" | "uan" | "uang" | "uei" | "uen" | "ueng" | "uo" | "ê" | "ü" | "üan" | "üe" | "ün">;
6
+ /**
7
+ * How a written final maps back to its underlying form after any other initial.
8
+ */
9
+ export declare const ABBREVIATED_FINALS: Map<string, "a" | "ai" | "an" | "ang" | "ao" | "e" | "ei" | "en" | "eng" | "er" | "i" | "ia" | "ian" | "iang" | "iao" | "ie" | "in" | "ing" | "io" | "iong" | "iou" | "m" | "n" | "ng" | "o" | "ong" | "ou" | "u" | "ua" | "uai" | "uan" | "uang" | "uei" | "uen" | "ueng" | "uo" | "ê" | "ü" | "üan" | "üe" | "ün">;
10
+ /**
11
+ * The reverse of {@link ZERO_INITIAL_SPELLINGS}, for reading y- and w- forms.
12
+ */
13
+ export declare const ZERO_INITIAL_FINALS: Map<string, "a" | "ai" | "an" | "ang" | "ao" | "e" | "ei" | "en" | "eng" | "er" | "i" | "ia" | "ian" | "iang" | "iao" | "ie" | "in" | "ing" | "io" | "iong" | "iou" | "m" | "n" | "ng" | "o" | "ong" | "ou" | "u" | "ua" | "uai" | "uan" | "uang" | "uei" | "uen" | "ueng" | "uo" | "ê" | "ü" | "üan" | "üe" | "ün">;
14
+ /**
15
+ * Finals that are written as-is when they make up a whole syllable on their own.
16
+ *
17
+ * Every other final either takes a y or w onset with no initial (i becomes yi)
18
+ * or cannot stand alone at all (ong only ever follows an initial), so accepting
19
+ * anything outside this set would let underlying forms such as `iou` through as
20
+ * if they were valid spellings.
21
+ */
22
+ export declare const STANDALONE_FINALS: Set<"a" | "ai" | "an" | "ang" | "ao" | "e" | "ei" | "en" | "eng" | "er" | "i" | "ia" | "ian" | "iang" | "iao" | "ie" | "in" | "ing" | "io" | "iong" | "iou" | "m" | "n" | "ng" | "o" | "ong" | "ou" | "u" | "ua" | "uai" | "uan" | "uang" | "uei" | "uen" | "ueng" | "uo" | "ê" | "ü" | "üan" | "üe" | "ün">;
23
+ //# sourceMappingURL=final-tables.d.ts.map