@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,69 @@
1
+ import { isSpaced, numberPieces, runEdge } from "./number-pieces.js";
2
+ /**
3
+ * The numbers in a text, said out loud.
4
+ *
5
+ * A digit is not Han and does not reach the decoder, so reading 1998年 as
6
+ * `yī jiǔ jiǔ bā nián` means working out what the run around it says and
7
+ * whether a space belongs between them. That is all this does.
8
+ */
9
+ import { saidNumeral } from "../numerals/text.js";
10
+ import { surroundingCharacters } from "./runs.js";
11
+ import { plainPiece, sourcePiece, } from "./pieces.js";
12
+ /**
13
+ * What surrounds a run once it has been decoded: the character after it, and
14
+ * the syllable that character is read as.
15
+ *
16
+ * The syllable is the one part of a number's context that a decode has to
17
+ * supply, and it is what a 一 ending the number assimilates to.
18
+ */
19
+ export function surrounding(runs, decoded, at) {
20
+ return {
21
+ after: {
22
+ character: surroundingCharacters(runs, at).following,
23
+ syllable: decoded[at + 1]?.[0]?.word.reading[0],
24
+ },
25
+ isAfterHan: runs[at - 1]?.isHan === true,
26
+ };
27
+ }
28
+ /**
29
+ * The 汉字 a number in front of a Han run stands for, for that run's decode.
30
+ *
31
+ * Only the last segment of the run before, because only that one touches the
32
+ * Han: the D of 3D银行 comes between them, and a decode of 银行 that saw 三
33
+ * beside it would be reading a text nobody wrote.
34
+ */
35
+ export function numeralBefore(segments) {
36
+ return segments.at(-1)?.hanzi ?? "";
37
+ }
38
+ /**
39
+ * Write a stretch that was never Han, reading the numbers in it.
40
+ *
41
+ * Everything that is not a number goes through exactly as written, which is
42
+ * what this always did: digits are the only part of a non-Han run this package
43
+ * has anything to say about. Once a number *has* been read, though, the whole
44
+ * stretch is being said rather than shown, so its parts take the spacing of
45
+ * words — 3D打印 is `sān D dǎyìn` — and punctuation still takes none.
46
+ */
47
+ export function writeNumbers(text, segments, context, written, options) {
48
+ if (segments.every((segment) => segment.reading === undefined)) {
49
+ return [sourcePiece(text)];
50
+ }
51
+ const pieces = [];
52
+ let before = runEdge(context.isAfterHan);
53
+ for (const segment of segments) {
54
+ if (isSpaced(before, segment.text)) {
55
+ pieces.push(plainPiece(" "));
56
+ }
57
+ pieces.push(...(segment.reading === undefined
58
+ ? [sourcePiece(segment.text)]
59
+ : numberPieces(saidNumeral(segment, context.after.syllable, options.sandhi), segment, written)));
60
+ // What decides the next space is what was *written*, not what was read:
61
+ // 95% ends in a sign and `bǎifēnzhījiǔshíwǔ` ends in a letter.
62
+ before = pieces.at(-1)?.text ?? before;
63
+ }
64
+ if (isSpaced(before, runEdge(context.after.character !== ""))) {
65
+ pieces.push(plainPiece(" "));
66
+ }
67
+ return pieces;
68
+ }
69
+ //# sourceMappingURL=numbers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"numbers.js","sourceRoot":"","sources":["../../src/decode/numbers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AACrE;;;;;;GAMG;AACH,OAAO,EAAuB,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAgB,MAAM,WAAW,CAAC;AAGhE,OAAO,EAEL,UAAU,EACV,WAAW,GAEZ,MAAM,aAAa,CAAC;AAcrB;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CACzB,IAAwB,EACxB,OAA2C,EAC3C,EAAU;IAEV,OAAO;QACL,KAAK,EAAE;YACL,SAAS,EAAE,qBAAqB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,SAAS;YACpD,QAAQ,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;SAChD;QACD,UAAU,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI;KACzC,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,QAAmC;IAC/D,OAAO,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;AACtC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAC1B,IAAY,EACZ,QAAmC,EACnC,OAAmB,EACnB,OAAgB,EAChB,OAAuD;IAEvD,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,EAAE,CAAC;QAC/D,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,IAAI,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAEzC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/B,CAAC;QACD,MAAM,CAAC,IAAI,CACT,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS;YAC/B,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC,CAAC,YAAY,CACV,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,EAC5D,OAAO,EACP,OAAO,CACR,CAAC,CACP,CAAC;QACF,wEAAwE;QACxE,+DAA+D;QAC/D,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,MAAM,CAAC;IACzC,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC;QAC9D,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * What a conversion is made of: the options it takes, and the pieces it
3
+ * hands back.
4
+ *
5
+ * The leaf layer of the conversion. Everything here builds or describes a
6
+ * single piece of output, and none of it knows how a text is decoded — which
7
+ * is what lets `convert.ts` sit on top of it.
8
+ */
9
+ import type { ConvertedPiece, Written } from "./convert-options.js";
10
+ import type { DecodedWord } from "./word.js";
11
+ import type { Dictionary } from "../dictionary/dictionary.js";
12
+ export type { ConvertedPiece, ConvertOptions, NumberStyle, Written, } from "./convert-options.js";
13
+ import type { Locale } from "../script/script.js";
14
+ import { type Syllable } from "../syllable/syllable.js";
15
+ import type { ReadingConfidence } from "./confidence.js";
16
+ /**
17
+ * The reading a word takes in a locale.
18
+ *
19
+ * `zh-TW` is stored as a delta, so a word with no Taiwan reading simply reads
20
+ * the same in both.
21
+ *
22
+ * The delta is measured against the entry's own 普通话 reading, so it only
23
+ * applies where the decode settled on that reading. A polyphone the decode read
24
+ * some other way — 长 as `cháng` where its entry reads `zhǎng`, 差 as `chā`
25
+ * where its entry reads `chà` — is a different sense of the word, and the delta
26
+ * beside the entry says nothing about it. Replacing the reading there would
27
+ * discard what the lattice worked out in favour of a reading of the wrong
28
+ * syllable entirely.
29
+ */
30
+ export declare function readingFor(dictionary: Dictionary, word: DecodedWord, locale: Locale): readonly Syllable[];
31
+ /**
32
+ * Text that writes no syllable: a space, or a run that was never Han.
33
+ */
34
+ export declare function plainPiece(text: string): ConvertedPiece;
35
+ /**
36
+ * Source text that is written out but read as nothing.
37
+ *
38
+ * The difference from {@link plainPiece} is what the text *is*. Both write no
39
+ * syllable, but a run that was never Han — punctuation, a Latin word, a digit
40
+ * left unread — stands for something the author wrote, whereas the space
41
+ * between two words and the hyphen inside 干干净净 are pinyin orthography that
42
+ * the source has no trace of.
43
+ *
44
+ * A conversion joins them into one string and the distinction does not arise.
45
+ * An annotation writes the source and the reading in different places, and
46
+ * putting a hyphen the pinyin needs into the hanzi it annotates would be
47
+ * inventing text: 干干净净 is `gāngān-jìngjìng` and is not written 干干-净净.
48
+ *
49
+ * The text and the source can differ, and the punctuation pass is why: it
50
+ * rewrites 。 to a full stop in the `text` a conversion writes, and leaves the
51
+ * `source` as the mark the author actually typed.
52
+ */
53
+ export declare function sourcePiece(text: string): ConvertedPiece;
54
+ /**
55
+ * Which characters of a word each of its syllables reads.
56
+ *
57
+ * One per syllable, in order, and undefined where a syllable reads on into the
58
+ * characters the one before it took. Only 儿化 does that: measured over the
59
+ * committed dictionary, 5,283 of 723,147 keys have fewer syllables than
60
+ * characters, 4,024 of them because a final 儿 folds into the syllable before
61
+ * it, and the remaining 1,259 because the word is written with punctuation —
62
+ * which cannot reach here, since punctuation ends a Han run before the decode
63
+ * ever sees it.
64
+ *
65
+ * The deficit is spent from the right, which is where 儿化 always is. 打哪儿指
66
+ * 哪儿 is the case that needs it: two syllables short over six characters, and
67
+ * both 儿 attach to the character in front of them rather than one taking two.
68
+ */
69
+ export declare function sourcesOf(word: string, reading: readonly Syllable[]): readonly (string | undefined)[];
70
+ /**
71
+ * Write one decoded word as one piece per syllable.
72
+ *
73
+ * Only proper nouns are capitalised here; a sentence capital is applied to the
74
+ * whole conversion afterwards, since it belongs to whichever run happens to
75
+ * start the sentence.
76
+ */
77
+ export declare function writeWord(reading: readonly Syllable[], confidence: readonly ReadingConfidence[], word: DecodedWord, written: Written): readonly ConvertedPiece[];
78
+ //# sourceMappingURL=pieces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pieces.d.ts","sourceRoot":"","sources":["../../src/decode/pieces.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAG7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D,YAAY,EACV,cAAc,EACd,cAAc,EACd,WAAW,EACX,OAAO,GACR,MAAM,sBAAsB,CAAC;AAI9B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,KAAK,QAAQ,EAAiB,MAAM,yBAAyB,CAAC;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CACxB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,MAAM,GACb,SAAS,QAAQ,EAAE,CAWrB;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAOvD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAOxD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,SAAS,QAAQ,EAAE,GAC3B,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CA2BjC;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CACvB,OAAO,EAAE,SAAS,QAAQ,EAAE,EAC5B,UAAU,EAAE,SAAS,iBAAiB,EAAE,EACxC,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,OAAO,GACf,SAAS,cAAc,EAAE,CAqB3B"}
@@ -0,0 +1,136 @@
1
+ import { markWord } from "../orthography/apostrophe.js";
2
+ import { capitaliseWord } from "../orthography/capitals.js";
3
+ import { isErCharacter, isErFinal } from "../dictionary/erhua.js";
4
+ import { isSameReading } from "../dictionary/entry.js";
5
+ import { toCharacters } from "../script/characters.js";
6
+ import { writeSyllable } from "../syllable/syllable.js";
7
+ /**
8
+ * The reading a word takes in a locale.
9
+ *
10
+ * `zh-TW` is stored as a delta, so a word with no Taiwan reading simply reads
11
+ * the same in both.
12
+ *
13
+ * The delta is measured against the entry's own 普通话 reading, so it only
14
+ * applies where the decode settled on that reading. A polyphone the decode read
15
+ * some other way — 长 as `cháng` where its entry reads `zhǎng`, 差 as `chā`
16
+ * where its entry reads `chà` — is a different sense of the word, and the delta
17
+ * beside the entry says nothing about it. Replacing the reading there would
18
+ * discard what the lattice worked out in favour of a reading of the wrong
19
+ * syllable entirely.
20
+ */
21
+ export function readingFor(dictionary, word, locale) {
22
+ if (locale !== "zh-TW") {
23
+ return word.reading;
24
+ }
25
+ const entry = dictionary.lookup(word.text);
26
+ if (entry?.taiwanReading === undefined) {
27
+ return word.reading;
28
+ }
29
+ return isSameReading(entry.reading, word.reading)
30
+ ? entry.taiwanReading
31
+ : word.reading;
32
+ }
33
+ /**
34
+ * Text that writes no syllable: a space, or a run that was never Han.
35
+ */
36
+ export function plainPiece(text) {
37
+ return {
38
+ text,
39
+ syllable: undefined,
40
+ confidence: undefined,
41
+ source: undefined,
42
+ };
43
+ }
44
+ /**
45
+ * Source text that is written out but read as nothing.
46
+ *
47
+ * The difference from {@link plainPiece} is what the text *is*. Both write no
48
+ * syllable, but a run that was never Han — punctuation, a Latin word, a digit
49
+ * left unread — stands for something the author wrote, whereas the space
50
+ * between two words and the hyphen inside 干干净净 are pinyin orthography that
51
+ * the source has no trace of.
52
+ *
53
+ * A conversion joins them into one string and the distinction does not arise.
54
+ * An annotation writes the source and the reading in different places, and
55
+ * putting a hyphen the pinyin needs into the hanzi it annotates would be
56
+ * inventing text: 干干净净 is `gāngān-jìngjìng` and is not written 干干-净净.
57
+ *
58
+ * The text and the source can differ, and the punctuation pass is why: it
59
+ * rewrites 。 to a full stop in the `text` a conversion writes, and leaves the
60
+ * `source` as the mark the author actually typed.
61
+ */
62
+ export function sourcePiece(text) {
63
+ return {
64
+ text,
65
+ syllable: undefined,
66
+ confidence: undefined,
67
+ source: text,
68
+ };
69
+ }
70
+ /**
71
+ * Which characters of a word each of its syllables reads.
72
+ *
73
+ * One per syllable, in order, and undefined where a syllable reads on into the
74
+ * characters the one before it took. Only 儿化 does that: measured over the
75
+ * committed dictionary, 5,283 of 723,147 keys have fewer syllables than
76
+ * characters, 4,024 of them because a final 儿 folds into the syllable before
77
+ * it, and the remaining 1,259 because the word is written with punctuation —
78
+ * which cannot reach here, since punctuation ends a Han run before the decode
79
+ * ever sees it.
80
+ *
81
+ * The deficit is spent from the right, which is where 儿化 always is. 打哪儿指
82
+ * 哪儿 is the case that needs it: two syllables short over six characters, and
83
+ * both 儿 attach to the character in front of them rather than one taking two.
84
+ */
85
+ export function sourcesOf(word, reading) {
86
+ const characters = toCharacters(word);
87
+ if (characters.length === reading.length) {
88
+ return characters;
89
+ }
90
+ // Anything this does not understand is one base for the whole word, which is
91
+ // always true and merely less useful than naming each syllable's characters.
92
+ if (characters.length < reading.length || !isErFinal(word)) {
93
+ return reading.map((_, at) => (at === 0 ? word : undefined));
94
+ }
95
+ const sources = [];
96
+ let deficit = characters.length - reading.length;
97
+ for (const character of characters) {
98
+ const previous = sources.at(-1);
99
+ if (deficit > 0 && previous !== undefined && isErCharacter(character)) {
100
+ sources[sources.length - 1] = previous + character;
101
+ deficit--;
102
+ continue;
103
+ }
104
+ sources.push(character);
105
+ }
106
+ /* c8 ignore next 3 -- the deficit is 儿 by construction, but a source that
107
+ wrote one somewhere else would otherwise misalign every later syllable */
108
+ return sources.length === reading.length
109
+ ? sources
110
+ : reading.map((_, at) => (at === 0 ? word : undefined));
111
+ }
112
+ /**
113
+ * Write one decoded word as one piece per syllable.
114
+ *
115
+ * Only proper nouns are capitalised here; a sentence capital is applied to the
116
+ * whole conversion afterwards, since it belongs to whichever run happens to
117
+ * start the sentence.
118
+ */
119
+ export function writeWord(reading, confidence, word, written) {
120
+ if (reading.length === 0) {
121
+ return [sourcePiece(word.text)];
122
+ }
123
+ // A tone number already ends its syllable, raised or not, so `xi1an1` cannot
124
+ // be misread and the 隔音符号 would only be noise.
125
+ const isNumbered = written.notation === "numbers" || written.notation === "superscript";
126
+ const spellings = markWord(reading.map((syllable) => writeSyllable(syllable, written.notation)), isNumbered ? "never" : written.apostrophe);
127
+ const isCapitalised = word.isProperNoun && written.capitals !== "none";
128
+ const sources = sourcesOf(word.text, reading);
129
+ return spellings.map((spelling, at) => ({
130
+ text: at === 0 && isCapitalised ? capitaliseWord(spelling) : spelling,
131
+ syllable: reading[at],
132
+ confidence: confidence[at],
133
+ source: sources[at],
134
+ }));
135
+ }
136
+ //# sourceMappingURL=pieces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pieces.js","sourceRoot":"","sources":["../../src/decode/pieces.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ export { PLAYING_TAN } from "./tan-rule.js";
2
+ import { type EdgeRule } from "./rules.js";
3
+ /**
4
+ * 长 read as `cháng` where an adverb of degree measures it.
5
+ *
6
+ * The character is stored `zhǎng` with `cháng` as an alternate, and the data
7
+ * says so about the character in isolation: Unihan ranks the readings
8
+ * `zhǎng(1879) cháng(1179)` by corpus count and names `zhǎng` in `kMandarin`.
9
+ * That ranking is doing real work — 署长, 团长, 公安局长, 总会长, 审理长 and
10
+ * the rest reach a bare 长 at the end of a title and read it correctly — so the
11
+ * default is not the thing to change. What is left over is the 长 that is an
12
+ * adjective, and nothing in the cost model can prefer an alternate at a
13
+ * position no word covers: 这篇文章不太长 came out `bú tài zhǎng`.
14
+ *
15
+ * The context that separates them is one-sided, as it was for the modal 得. A
16
+ * 长 that is *growing* is a verb, and a degree adverb cannot modify one — there
17
+ * is no 很长 meaning it grew a lot — so 很, 太, 最, 多 and their kin in front of
18
+ * a bare 长 make it the adjective. The other side carries almost nothing: what
19
+ * follows an adjectival 长 is a noun (很长时间), a particle (最长的大桥), or the
20
+ * end of the sentence (他的腿很长), which is also what follows half the verbs.
21
+ *
22
+ * Measured over the same 88,866 lines of Tatoeba and zh.wikipedia the other
23
+ * rules were sized against, 260 长 decode as a word of their own and this moves
24
+ * 75 of them to `cháng`, all 75 correctly. On CPP's 40 hand-labelled 长 it takes
25
+ * the character from 85.00% to 87.50%, fixing 时间最长 and breaking nothing.
26
+ *
27
+ * The other half of the rule is {@link GROWN_INTO}, which pushes the opposite
28
+ * way on the one shape the sources get wrong.
29
+ */
30
+ export declare const ADJECTIVAL_CHANG: EdgeRule;
31
+ //# sourceMappingURL=polyphone-rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polyphone-rules.d.ts","sourceRoot":"","sources":["../../src/decode/polyphone-rules.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAoB,KAAK,QAAQ,EAAgB,MAAM,YAAY,CAAC;AA2H3E;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,gBAAgB,EAAE,QAgB9B,CAAC"}
@@ -0,0 +1,159 @@
1
+ export { PLAYING_TAN } from "./tan-rule.js";
2
+ import { wordEndingAt } from "./rules.js";
3
+ /**
4
+ * Whether a syllable is `cháng`, the stative reading of 长.
5
+ */
6
+ function isChang(syllable) {
7
+ return (syllable?.initial === "ch" &&
8
+ syllable.final === "ang" &&
9
+ syllable.tone === 2);
10
+ }
11
+ /**
12
+ * Adverbs that measure a quality rather than modify an action.
13
+ *
14
+ * The discriminating side of the 长 context, and the reason the set is written
15
+ * out rather than taken from a tag: jieba calls 很 `zg` and 多 `m`, so the two
16
+ * commonest members are not adverbs as far as the dictionary is concerned,
17
+ * while 已经, 也, 却 and 就 — which sit in front of the *verb* 长 — are `d`
18
+ * along with the ones wanted here. The tag names the wrong set in both
19
+ * directions, so the set is named directly.
20
+ *
21
+ * Everything here is degree or comparison. 还 and 不 are deliberately absent
22
+ * even though 距离还长 and 那座桥不长 are both `cháng`: they modify verbs as
23
+ * readily as qualities, and 还长有毛 and 胡子不长在前额上 are the same two
24
+ * characters around the verb.
25
+ */
26
+ const DEGREE = new Set([
27
+ "一样",
28
+ "十分",
29
+ "多",
30
+ "多么",
31
+ "好",
32
+ "如此",
33
+ "尽量",
34
+ "很",
35
+ "格外",
36
+ "极",
37
+ "极其",
38
+ "比较",
39
+ "略",
40
+ "相当",
41
+ "真",
42
+ "稍",
43
+ "稍微",
44
+ "越",
45
+ "越来越",
46
+ "这么",
47
+ "这样",
48
+ "那么",
49
+ "那样",
50
+ "更",
51
+ "最",
52
+ "有多",
53
+ "特别",
54
+ "老",
55
+ "够",
56
+ "挺",
57
+ "太",
58
+ "非常",
59
+ ]);
60
+ /**
61
+ * What shows a 长 to be growing even with a degree word in front of it.
62
+ *
63
+ * {@link DEGREE} already excludes nearly everything that precedes the verb, so
64
+ * this only has to settle the three shapes reachable from both sets: 真长得很快
65
+ * and 越长得快, where 得 marks the complement; 长着, where the aspect does; and
66
+ * 越长越高, where the correlative makes the 长 the thing that increases.
67
+ *
68
+ * 了 and 的 are pointedly *not* here, and that is the whole use of conditioning
69
+ * on the adverb first. Following a bare 长 either would suggest the verb — 长了
70
+ * 一个大包, 长的很像 — but following an adverb and a 长 they are the sentence
71
+ * particle and the attributive: 时间太长了 and 很长的道路 are both `cháng`, and
72
+ * an earlier draft of this rule that guarded on them read both as `zhǎng`.
73
+ */
74
+ const GROWING = new Set(["得", "着", "越"]);
75
+ /**
76
+ * What growing produces, as the far half of 越长越X.
77
+ *
78
+ * 越长越高, 越长越大, 越长越胖: each names a dimension that increases *because*
79
+ * something grew, so the 长 in front of it is the verb. The adjectives that go
80
+ * with a length or a duration are pointedly absent — 时间越长越好, 队伍越长越慢
81
+ * — because those are the cases the sources already read correctly.
82
+ */
83
+ const GROWN_INTO = new Set(["高", "大", "胖", "壮", "结实"]);
84
+ /**
85
+ * Whether an edge is the 越长 of a 越长越X saying something grew.
86
+ *
87
+ * This exists because of a defect in the sources rather than a gap in them.
88
+ * 越长 is a key, read `yuè cháng`, and it is the *only* one of its shape: 越大,
89
+ * 越高, 越好, 越快 and 越多 are all absent, so 越高越好 decodes as two words and
90
+ * 越长越高 reaches for a word nothing else in the paradigm has. It carries no
91
+ * part of speech, which is how the dictionary holds a reading somebody asserted
92
+ * rather than a word anybody counted — the same category {@link TEACHING_JIAO}
93
+ * declines to trust — and it comes from one source, `large_pinyin.txt`, with
94
+ * CC-CEDICT holding no such entry.
95
+ *
96
+ * Taking the edge away leaves the character's own default, which is `zhǎng`,
97
+ * and leaves `cháng` standing as a rival about one bucket dearer. That last
98
+ * part is the point of forbidding rather than forcing: 越长越X is genuinely
99
+ * ambiguous — 孩子越长越漂亮 grows and 头发越长越漂亮 lengthens, and only the
100
+ * subject says which — so the decode should answer with the likelier reading
101
+ * and still report itself as guessing. A forced edge could not.
102
+ *
103
+ * Unlike the rest of this file the shape has no corpus behind it: 越长 occurs
104
+ * three times in the 88,866 lines, and all three are 越来越长 or 说的越长. The
105
+ * word list is therefore small on purpose, and everything outside it is left as
106
+ * the sources have it.
107
+ */
108
+ function isGrowthCorrelative(context) {
109
+ const { characters, edge } = context;
110
+ return (edge.text === "越长" &&
111
+ edge.partOfSpeech === "" &&
112
+ characters[edge.to] === "越" &&
113
+ GROWN_INTO.has(characters[edge.to + 1] ?? ""));
114
+ }
115
+ /**
116
+ * 长 read as `cháng` where an adverb of degree measures it.
117
+ *
118
+ * The character is stored `zhǎng` with `cháng` as an alternate, and the data
119
+ * says so about the character in isolation: Unihan ranks the readings
120
+ * `zhǎng(1879) cháng(1179)` by corpus count and names `zhǎng` in `kMandarin`.
121
+ * That ranking is doing real work — 署长, 团长, 公安局长, 总会长, 审理长 and
122
+ * the rest reach a bare 长 at the end of a title and read it correctly — so the
123
+ * default is not the thing to change. What is left over is the 长 that is an
124
+ * adjective, and nothing in the cost model can prefer an alternate at a
125
+ * position no word covers: 这篇文章不太长 came out `bú tài zhǎng`.
126
+ *
127
+ * The context that separates them is one-sided, as it was for the modal 得. A
128
+ * 长 that is *growing* is a verb, and a degree adverb cannot modify one — there
129
+ * is no 很长 meaning it grew a lot — so 很, 太, 最, 多 and their kin in front of
130
+ * a bare 长 make it the adjective. The other side carries almost nothing: what
131
+ * follows an adjectival 长 is a noun (很长时间), a particle (最长的大桥), or the
132
+ * end of the sentence (他的腿很长), which is also what follows half the verbs.
133
+ *
134
+ * Measured over the same 88,866 lines of Tatoeba and zh.wikipedia the other
135
+ * rules were sized against, 260 长 decode as a word of their own and this moves
136
+ * 75 of them to `cháng`, all 75 correctly. On CPP's 40 hand-labelled 长 it takes
137
+ * the character from 85.00% to 87.50%, fixing 时间最长 and breaking nothing.
138
+ *
139
+ * The other half of the rule is {@link GROWN_INTO}, which pushes the opposite
140
+ * way on the one shape the sources get wrong.
141
+ */
142
+ export const ADJECTIVAL_CHANG = {
143
+ name: "adjectival-chang",
144
+ verdictFor: (context) => {
145
+ const { characters, edge } = context;
146
+ if (isGrowthCorrelative(context)) {
147
+ return "forbid";
148
+ }
149
+ if (edge.text !== "长" || !isChang(edge.reading[0])) {
150
+ return "keep";
151
+ }
152
+ if (GROWING.has(characters[edge.to] ?? "")) {
153
+ return "keep";
154
+ }
155
+ const before = wordEndingAt(context, edge.from);
156
+ return before !== undefined && DEGREE.has(before) ? "force" : "keep";
157
+ },
158
+ };
159
+ //# sourceMappingURL=polyphone-rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polyphone-rules.js","sourceRoot":"","sources":["../../src/decode/polyphone-rules.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAmC,YAAY,EAAE,MAAM,YAAY,CAAC;AAE3E;;GAEG;AACH,SAAS,OAAO,CAAC,QAA8B;IAC7C,OAAO,CACL,QAAQ,EAAE,OAAO,KAAK,IAAI;QAC1B,QAAQ,CAAC,KAAK,KAAK,KAAK;QACxB,QAAQ,CAAC,IAAI,KAAK,CAAC,CACpB,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC;IACrB,IAAI;IACJ,IAAI;IACJ,GAAG;IACH,IAAI;IACJ,GAAG;IACH,IAAI;IACJ,IAAI;IACJ,GAAG;IACH,IAAI;IACJ,GAAG;IACH,IAAI;IACJ,IAAI;IACJ,GAAG;IACH,IAAI;IACJ,GAAG;IACH,GAAG;IACH,IAAI;IACJ,GAAG;IACH,KAAK;IACL,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,GAAG;IACH,GAAG;IACH,IAAI;IACJ,IAAI;IACJ,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,IAAI;CACL,CAAC,CAAC;AAEH;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAEzC;;;;;;;GAOG;AACH,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AAEvD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,SAAS,mBAAmB,CAAC,OAAoB;IAC/C,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IACrC,OAAO,CACL,IAAI,CAAC,IAAI,KAAK,IAAI;QAClB,IAAI,CAAC,YAAY,KAAK,EAAE;QACxB,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,GAAG;QAC3B,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAC9C,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAa;IACxC,IAAI,EAAE,kBAAkB;IACxB,UAAU,EAAE,CAAC,OAAoB,EAAE,EAAE;QACnC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QACrC,IAAI,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;YACjC,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACnD,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAC3C,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAChD,OAAO,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IACvE,CAAC;CACF,CAAC"}
@@ -1,3 +1,4 @@
1
+ export { TEACHING_JIAO } from "./jiao-rule.js";
1
2
  import { type EdgeRule } from "./rules.js";
2
3
  /**
3
4
  * 得 read as `děi` where it is a modal rather than a particle.
@@ -49,34 +50,6 @@ export declare const MODAL_DE: EdgeRule;
49
50
  * 门铃儿 and a row of Mongol names transliterated with 儿.
50
51
  */
51
52
  export declare const ATTESTED_ERHUA: EdgeRule;
52
- /**
53
- * 教 read as `jiāo` where it is teaching rather than a religion.
54
- *
55
- * The dictionary stores 教 as `jiào` with `jiāo` as an alternate, and `jiào` is
56
- * right for the compounds — 教育, 教师, 宗教, 主教 — which are words and reach
57
- * their reading through the word. What is left is the 教 that stands as a word
58
- * of its own, and that one is the verb: 他在北京大学教了三年书 came out
59
- * `jiàole sān nián shū`, and 我教英语, 谁教你法语 and 她教我如何游泳 with it.
60
- * 教书 is a word and was always `jiāo shū`; nothing carried that across a 了.
61
- *
62
- * See {@link isTeachingAt} for what decides it. Forcing the single-character
63
- * edge is not enough on its own, because a reading spanning two characters
64
- * carries its own 教 into the position: 王老师教我们汉语 read `jiào` off 师教,
65
- * and 来教我 off 来教. Those are pairs the dictionary holds with no part of
66
- * speech and at the cost of a word nothing has ever counted — a reading rather
67
- * than a word — so a *tagged* word ending in 教 is left alone, which is every
68
- * one that matters: 任教, 宗教, 主教, 佛教, 传教, 执教, 请教, 家教.
69
- *
70
- * Measured over 88,866 lines of Tatoeba and zh.wikipedia, 181 教 decode as a
71
- * word of their own and every one of them read `jiào`. This moves 158 to
72
- * `jiāo` and is wrong on three: 统一教创始人, 方法教深思 and 做到了教政分离,
73
- * where a nominal compound takes an object's shape, the last of them because
74
- * 做到了 is a word and so the 了 in front is not a particle to look at. Of the
75
- * 21 it leaves, 8 are right — 诸教中, 教外别传, 董教总, 风教, 教青局 twice, a
76
- * 教室 reached through a bad split, and a 教 used as a bare noun — and 13 are
77
- * misses, where jieba tags the object something this does not name.
78
- */
79
- export declare const TEACHING_JIAO: EdgeRule;
80
53
  /**
81
54
  * A 量词 with a number in front of it does not start the next word.
82
55
  *
@@ -106,75 +79,7 @@ export declare const TEACHING_JIAO: EdgeRule;
106
79
  * corpus and it is a fix, 下了两天雨 having read 天雨 as `tiān yù`.
107
80
  */
108
81
  export declare const COUNTED_MEASURE: EdgeRule;
109
- /**
110
- * 长 read as `cháng` where an adverb of degree measures it.
111
- *
112
- * The character is stored `zhǎng` with `cháng` as an alternate, and the data
113
- * says so about the character in isolation: Unihan ranks the readings
114
- * `zhǎng(1879) cháng(1179)` by corpus count and names `zhǎng` in `kMandarin`.
115
- * That ranking is doing real work — 署长, 团长, 公安局长, 总会长, 审理长 and
116
- * the rest reach a bare 长 at the end of a title and read it correctly — so the
117
- * default is not the thing to change. What is left over is the 长 that is an
118
- * adjective, and nothing in the cost model can prefer an alternate at a
119
- * position no word covers: 这篇文章不太长 came out `bú tài zhǎng`.
120
- *
121
- * The context that separates them is one-sided, as it was for the modal 得. A
122
- * 长 that is *growing* is a verb, and a degree adverb cannot modify one — there
123
- * is no 很长 meaning it grew a lot — so 很, 太, 最, 多 and their kin in front of
124
- * a bare 长 make it the adjective. The other side carries almost nothing: what
125
- * follows an adjectival 长 is a noun (很长时间), a particle (最长的大桥), or the
126
- * end of the sentence (他的腿很长), which is also what follows half the verbs.
127
- *
128
- * Measured over the same 88,866 lines of Tatoeba and zh.wikipedia the other
129
- * rules were sized against, 260 长 decode as a word of their own and this moves
130
- * 75 of them to `cháng`, all 75 correctly. On CPP's 40 hand-labelled 长 it takes
131
- * the character from 85.00% to 87.50%, fixing 时间最长 and breaking nothing.
132
- *
133
- * The other half of the rule is {@link GROWN_INTO}, which pushes the opposite
134
- * way on the one shape the sources get wrong.
135
- */
136
- export declare const ADJECTIVAL_CHANG: EdgeRule;
137
- /**
138
- * 弹 read as `tán` where it is playing rather than a projectile.
139
- *
140
- * The character is stored `dàn` with `tán` as an alternate, and the sources are
141
- * agreed about it: Unihan's `kHanyuPinlu` counts `dàn(313)` against `tán(50)`
142
- * and `kMandarin` names `dàn`. That is a fact about a corpus in which nearly
143
- * every 弹 is ammunition — 子弹, 炮弹, 导弹, 原子弹, 手榴弹 — and every one of
144
- * those is a word that carries its own reading. What the default is left
145
- * deciding is the 弹 that stands as a word of its own, and in running text that
146
- * one is the verb: 他会弹一点儿古筝 came out `dàn`, and 弹吉他, 弹竖琴, 我在弹肖邦
147
- * and 他钢琴弹得很好 with it.
148
- *
149
- * See {@link isPlayingAt} for what decides it. Forcing the single-character
150
- * edge is not enough on its own, for the reason {@link TEACHING_JIAO} gives: a
151
- * reading spanning two characters carries its own 弹 into the position, and
152
- * 我的爱好是开车和弹吉他 read `dàn` off 和弹, a pair the dictionary holds with
153
- * no part of speech and at the cost of a reading nobody counted. A *tagged*
154
- * word ending in 弹 is left alone, which is every one that matters — 子弹, 炸弹,
155
- * 导弹, 反弹, 手榴弹. Nothing has to be done about the other side, since the
156
- * nominal compounds starting with 弹 are all listed: 弹匣, 弹坑, 弹壳, 弹片,
157
- * 弹药, 弹道 and 弹头 reach their reading through the word, so a bare 弹 with a
158
- * noun after it is not the front of one that got away.
159
- *
160
- * The 88,866 lines of Tatoeba and zh.wikipedia the other rules were sized
161
- * against are the wrong corpus for this one on their own: 38 弹 decode as a
162
- * word of their own in them, and 31 are somebody playing something. So CPP's
163
- * 20,147 sentences are measured with them as plain text — the benchmark is
164
- * drawn from zh.wikipedia's military articles, which is precisely where the
165
- * shapes this rule can break live. Over the 109,013 lines together, 60 弹
166
- * decode as a word of their own, every one read `dàn`, and 34 of the 60 are
167
- * wrong.
168
- *
169
- * This moves 30 of them, of which 29 are right: the whole of 弹吉他, 弹一曲肖邦
170
- * and 钢琴弹得很好, and none of 南部弹, 毛瑟弹, 掷弹兵, 供弹爪, 着弹点, 弹洞 or
171
- * 底排弹时. The one it breaks is 拆弹专家, where a compound has an object's
172
- * shape on both sides. Five it leaves alone: 开始弹, 四手联弹 and 弹起三次, which
173
- * have no object to see, 用那种指法弹不会觉得费力, and 反手持法去弹班卓琴, where
174
- * the decode reaches 班 rather than 班卓琴. On CPP's 40 labelled 弹 nothing
175
- * moves at all, every one of them having been right through a word.
176
- */
177
- export declare const PLAYING_TAN: EdgeRule;
82
+ export { ADJECTIVAL_CHANG, PLAYING_TAN } from "./polyphone-rules.js";
178
83
  /**
179
84
  * The rules the lattice decode applies, in order.
180
85
  */
@@ -1 +1 @@
1
- {"version":3,"file":"reading-rules.d.ts","sourceRoot":"","sources":["../../src/decode/reading-rules.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,QAAQ,EAId,MAAM,YAAY,CAAC;AAgCpB;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,QAAQ,EAAE,QActB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,cAAc,EAAE,QAY5B,CAAC;AAqDF;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,aAAa,EAAE,QAiB3B,CAAC;AAsCF;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,eAAe,EAAE,QAuB7B,CAAC;AA2HF;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,gBAAgB,EAAE,QAgB9B,CAAC;AA0EF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,eAAO,MAAM,WAAW,EAAE,QAiBzB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,QAAQ,EAO5C,CAAC"}
1
+ {"version":3,"file":"reading-rules.d.ts","sourceRoot":"","sources":["../../src/decode/reading-rules.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG/C,OAAO,EAEL,KAAK,QAAQ,EAId,MAAM,YAAY,CAAC;AAgCpB;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,QAAQ,EAAE,QActB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,cAAc,EAAE,QAY5B,CAAC;AAsCF;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,eAAe,EAAE,QAuB7B,CAAC;AAIF,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAErE;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,QAAQ,EAO5C,CAAC"}