@kensio/pinyinjs 1.7.4 → 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 +1 -1
@@ -1,346 +1,8 @@
1
- /**
2
- * Bopomofo (注音符號), in both directions.
3
- *
4
- * This is the easy half of romanisation interchange, and the reason is
5
- * [phonology.ts](../syllable/phonology.ts): a parsed syllable already holds the
6
- * underlying initial and final rather than the spelling, and bopomofo writes
7
- * exactly those. 就 is
8
- * `j` + `iou` and ㄐㄧㄡ; 军 is `j` + `ün` and ㄐㄩㄣ; 中 is `zh` + `ong` and
9
- * ㄓㄨㄥ. Nothing here undoes a pinyin spelling rule, because `readSyllable`
10
- * never applied one.
11
- *
12
- * So the mapping is compositional — an initial symbol, a medial symbol and a
13
- * rhyme symbol — and it is a bijection over the whole syllable inventory. The
14
- * three places it is not quite mechanical are recorded on the tables below.
15
- */
16
- import { toCharacters } from "../script/characters.js";
17
- import { NEUTRAL_TONE } from "../tone/tone.js";
18
- /**
19
- * The symbol each initial is written with.
20
- *
21
- * A syllable with no initial has no entry and writes nothing, which is what the
22
- * empty string stands for throughout this file.
23
- */
24
- const INITIAL_SYMBOLS = new Map([
25
- ["b", "ㄅ"],
26
- ["p", "ㄆ"],
27
- ["m", "ㄇ"],
28
- ["f", "ㄈ"],
29
- ["d", "ㄉ"],
30
- ["t", "ㄊ"],
31
- ["n", "ㄋ"],
32
- ["l", "ㄌ"],
33
- ["g", "ㄍ"],
34
- ["k", "ㄎ"],
35
- ["h", "ㄏ"],
36
- ["j", "ㄐ"],
37
- ["q", "ㄑ"],
38
- ["x", "ㄒ"],
39
- ["zh", "ㄓ"],
40
- ["ch", "ㄔ"],
41
- ["sh", "ㄕ"],
42
- ["r", "ㄖ"],
43
- ["z", "ㄗ"],
44
- ["c", "ㄘ"],
45
- ["s", "ㄙ"],
46
- ]);
47
- /**
48
- * The symbol each medial is written with.
49
- */
50
- const MEDIAL_SYMBOLS = new Map([
51
- ["i", "ㄧ"],
52
- ["u", "ㄨ"],
53
- ["ü", "ㄩ"],
54
- ]);
55
- /**
56
- * The symbol each rhyme is written with.
57
- *
58
- * ㄦ is here as a rhyme of its own and also serves as the 儿化 suffix, which is
59
- * what bopomofo does with it: 歌儿 gēr is ㄍㄜㄦ.
60
- *
61
- * The three syllabic nasals at the end are the marginal case. ㄇ and ㄋ are
62
- * initial letters doing rhyme duty, as bopomofo writes 呣 and 嗯; ㄫ is the
63
- * obsolete letter for a syllabic ng, used here rather than ㄥ so that 嗯 ǹg and
64
- * the rare 鞥 ēng do not come out identical.
65
- */
66
- const RHYME_SYMBOLS = new Map([
67
- ["a", "ㄚ"],
68
- ["o", "ㄛ"],
69
- ["e", "ㄜ"],
70
- ["ê", "ㄝ"],
71
- ["ai", "ㄞ"],
72
- ["ei", "ㄟ"],
73
- ["ao", "ㄠ"],
74
- ["ou", "ㄡ"],
75
- ["an", "ㄢ"],
76
- ["en", "ㄣ"],
77
- ["ang", "ㄤ"],
78
- ["eng", "ㄥ"],
79
- ["er", "ㄦ"],
80
- ["m", "ㄇ"],
81
- ["n", "ㄋ"],
82
- ["ng", "ㄫ"],
83
- ]);
84
- /**
85
- * How each final divides into a medial and a rhyme.
86
- *
87
- * Written out rather than split off the front of the spelling, because the
88
- * division is phonological and the spelling only mostly follows it: `in` is
89
- * ㄧㄣ, an i medial over the ㄣ rhyme rather than over an n of its own, and
90
- * `iong` is ㄩㄥ — a ü medial despite the i in the spelling, which is why
91
- * 兄 xiōng and 军 jūn share a medial.
92
- */
93
- const FINAL_PARTS = {
94
- a: ["", "a"],
95
- o: ["", "o"],
96
- e: ["", "e"],
97
- ê: ["", "ê"],
98
- er: ["", "er"],
99
- ai: ["", "ai"],
100
- ei: ["", "ei"],
101
- ao: ["", "ao"],
102
- ou: ["", "ou"],
103
- an: ["", "an"],
104
- en: ["", "en"],
105
- ang: ["", "ang"],
106
- eng: ["", "eng"],
107
- ong: ["u", "eng"],
108
- i: ["i", ""],
109
- ia: ["i", "a"],
110
- io: ["i", "o"],
111
- ie: ["i", "ê"],
112
- iao: ["i", "ao"],
113
- iou: ["i", "ou"],
114
- ian: ["i", "an"],
115
- in: ["i", "en"],
116
- iang: ["i", "ang"],
117
- ing: ["i", "eng"],
118
- iong: ["ü", "eng"],
119
- u: ["u", ""],
120
- ua: ["u", "a"],
121
- uo: ["u", "o"],
122
- uai: ["u", "ai"],
123
- uei: ["u", "ei"],
124
- uan: ["u", "an"],
125
- uen: ["u", "en"],
126
- uang: ["u", "ang"],
127
- ueng: ["u", "eng"],
128
- ü: ["ü", ""],
129
- üe: ["ü", "ê"],
130
- üan: ["ü", "an"],
131
- ün: ["ü", "en"],
132
- m: ["", "m"],
133
- n: ["", "n"],
134
- ng: ["", "ng"],
135
- };
136
- /**
137
- * The initials whose syllable with an i final is written as the initial alone:
138
- * 知 is ㄓ, not ㄓㄧ.
139
- *
140
- * The i of zhi, chi, shi, ri, zi, ci and si is not the i of ji at all — it is
141
- * the syllabic continuation of the initial (空韻), and bopomofo simply does not
142
- * write it. This is the one place the correspondence is not one symbol per
143
- * part.
144
- */
145
- const EMPTY_RHYME_INITIALS = new Set([
146
- "zh",
147
- "ch",
148
- "sh",
149
- "r",
150
- "z",
151
- "c",
152
- "s",
153
- ]);
154
- /**
155
- * The symbol 儿化 is written with.
156
- *
157
- * ㄦ, the same letter as the rhyme of 兒 ér itself, which is why reading it
158
- * takes the position into account: see {@link parseSymbols}.
159
- */
160
- const ERHUA_SYMBOL = "ㄦ";
161
- /**
162
- * The mark each tone takes.
163
- *
164
- * The neutral tone's dot goes *before* the syllable and the other four go
165
- * after — but **before a 儿化 ㄦ rather than after it**: 哪儿 nǎr is ㄋㄚˇㄦ and
166
- * 玩儿 wánr is ㄨㄢˊㄦ. The mark belongs to the syllable's nucleus, and the
167
- * suffix is not part of what it marks. Wikipedia's *Bopomofo*, citing 教育部's
168
- * 國語注音符號手冊, says so outright, and it is what 教育部's dictionaries and
169
- * Wiktionary both write.
170
- */
171
- const TONE_MARKS = new Map([
172
- [1, "ˉ"],
173
- [2, "ˊ"],
174
- [3, "ˇ"],
175
- [4, "ˋ"],
176
- [NEUTRAL_TONE, "˙"],
177
- ]);
178
- /**
179
- * The tone each mark stands for, including the shapes a keyboard produces.
180
- *
181
- * Tolerant input and standard output, as the rest of the package has: `´` and
182
- * `` ` `` are the ASCII neighbours of ˊ and ˋ, and are what text that was typed
183
- * rather than composed tends to carry.
184
- */
185
- const TONES_BY_MARK = new Map([
186
- ["ˉ", 1],
187
- ["¯", 1],
188
- ["ˊ", 2],
189
- ["´", 2],
190
- ["ˇ", 3],
191
- ["ˋ", 4],
192
- ["`", 4],
193
- ["˙", NEUTRAL_TONE],
194
- ["·", NEUTRAL_TONE],
195
- ]);
196
- /**
197
- * Write a syllable in bopomofo: 就 jiù becomes ㄐㄧㄡˋ.
198
- *
199
- * Total over well-formed syllables — every initial and every final has a
200
- * symbol — so anything the syllable parser accepts can be written, including
201
- * the syllables no dictionary uses.
202
- */
203
- export function writeBopomofo(syllable, options = {}) {
204
- const { initial, final, tone } = syllable;
205
- const [medial, rhyme] = FINAL_PARTS[final];
206
- const isEmptyRhyme = final === "i" && EMPTY_RHYME_INITIALS.has(initial);
207
- const written = [
208
- INITIAL_SYMBOLS.get(initial) ?? "",
209
- isEmptyRhyme ? "" : (MEDIAL_SYMBOLS.get(medial) ?? ""),
210
- isEmptyRhyme ? "" : (RHYME_SYMBOLS.get(rhyme) ?? ""),
211
- ].join("");
212
- const suffix = syllable.erhua === true ? ERHUA_SYMBOL : "";
213
- const mark = tone === undefined ? undefined : TONE_MARKS.get(tone);
214
- if (mark === undefined || (tone === 1 && options.firstTone !== "mark")) {
215
- return `${written}${suffix}`;
216
- }
217
- return tone === NEUTRAL_TONE
218
- ? `${mark}${written}${suffix}`
219
- : `${written}${mark}${suffix}`;
220
- }
221
- /**
222
- * Write a word in bopomofo, one syllable after another.
223
- *
224
- * Separated by spaces, as 教育部's dictionaries write them. A syllable boundary
225
- * is findable without the space — an initial symbol can only start one — but a
226
- * long unbroken run of symbols is hard to read, and the space costs nothing.
227
- */
228
- export function writeBopomofoWord(syllables, options = {}) {
229
- return syllables
230
- .map((syllable) => writeBopomofo(syllable, options))
231
- .join(" ");
232
- }
233
- /**
234
- * The final each medial and rhyme pair spells, keyed as `medial|rhyme`.
235
- */
236
- const FINALS_BY_PARTS = new Map(Object.entries(FINAL_PARTS).map(([final, [medial, rhyme]]) => [
237
- `${medial}|${rhyme}`,
238
- final,
239
- ]));
240
- /**
241
- * The initial each symbol stands for.
242
- */
243
- const INITIALS_BY_SYMBOL = new Map([...INITIAL_SYMBOLS].map(([initial, symbol]) => [symbol, initial]));
244
- /**
245
- * The medial each symbol stands for.
246
- */
247
- const MEDIALS_BY_SYMBOL = new Map([...MEDIAL_SYMBOLS].map(([medial, symbol]) => [symbol, medial]));
248
- /**
249
- * The rhyme each symbol stands for.
250
- */
251
- const RHYMES_BY_SYMBOL = new Map([...RHYME_SYMBOLS].map(([rhyme, symbol]) => [symbol, rhyme]));
252
- /**
253
- * Whether one character is a bopomofo letter or tone mark.
254
- */
255
- function isSymbol(symbol) {
256
- return (INITIALS_BY_SYMBOL.has(symbol) ||
257
- MEDIALS_BY_SYMBOL.has(symbol) ||
258
- RHYMES_BY_SYMBOL.has(symbol) ||
259
- TONES_BY_MARK.has(symbol));
260
- }
261
- /**
262
- * Whether a string is written in bopomofo at all.
263
- *
264
- * This is the one thing bopomofo makes easy that Wade-Giles cannot: it has a
265
- * script of its own, so it is never mistaken for pinyin and a caller never has
266
- * to be told which system its input is in.
267
- */
268
- export function isBopomofo(text) {
269
- const trimmed = text.trim();
270
- return (trimmed !== "" && toCharacters(trimmed).every((symbol) => isSymbol(symbol)));
271
- }
272
- /**
273
- * Take the tone mark off, wherever it was written.
274
- *
275
- * Three positions, because bopomofo uses two of them and texts use the third.
276
- * The neutral dot belongs at the front and the other four at the back, in front
277
- * of a 儿化 ㄦ where there is one — ㄨㄢˊㄦ. A mark written after the ㄦ is not
278
- * standard and is read anyway, since it is what a text that treated the suffix
279
- * as part of the syllable would produce. A mark at each end is rejected rather
280
- * than resolved, which is the same call `readSyllable` makes about `běi3`.
281
- */
282
- function splitTone(text) {
283
- const leading = TONES_BY_MARK.get(text.slice(0, 1));
284
- if (leading !== undefined) {
285
- const rest = text.slice(1);
286
- return TONES_BY_MARK.has(rest.slice(-1)) ? undefined : [rest, leading];
287
- }
288
- const trailing = TONES_BY_MARK.get(text.slice(-1));
289
- if (trailing !== undefined) {
290
- return [text.slice(0, -1), trailing];
291
- }
292
- if (text.endsWith(ERHUA_SYMBOL)) {
293
- const marked = TONES_BY_MARK.get(text.slice(-2, -1));
294
- if (marked !== undefined) {
295
- return [`${text.slice(0, -2)}${ERHUA_SYMBOL}`, marked];
296
- }
297
- }
298
- return [text, undefined];
299
- }
300
- /**
301
- * Read the symbols of one syllable, in the order bopomofo writes them.
302
- *
303
- * `hasInitial` is what recovers the syllabic nasals on a second pass: ㄇ is an
304
- * initial letter, so 呣 m̄ parses as an m initial with nothing after it and has
305
- * to be retried as a rhyme standing alone. `readParts` in
306
- * [syllable.ts](../syllable/syllable.ts) retries n and ng the same way, for the
307
- * same reason.
308
- */
309
- function parseSymbols(text, hasInitial) {
310
- const symbols = toCharacters(text);
311
- let at = 0;
312
- const initial = hasInitial
313
- ? INITIALS_BY_SYMBOL.get(symbols[at] ?? "")
314
- : undefined;
315
- if (initial !== undefined) {
316
- at += 1;
317
- }
318
- const medial = MEDIALS_BY_SYMBOL.get(symbols[at] ?? "");
319
- if (medial !== undefined) {
320
- at += 1;
321
- }
322
- // ㄦ is the 儿化 suffix everywhere except at the very front of a syllable,
323
- // where it is the rhyme of 儿 ér itself. That is what separates ㄦ from ㄕㄦ:
324
- // 事儿 shìr writes no rhyme at all, so the ㄦ can only be the suffix, and
325
- // 二儿 èr with a suffix is ㄦㄦ.
326
- const isSuffix = at > 0 && symbols[at] === ERHUA_SYMBOL;
327
- const rhyme = isSuffix ? undefined : RHYMES_BY_SYMBOL.get(symbols[at] ?? "");
328
- if (rhyme !== undefined) {
329
- at += 1;
330
- }
331
- const hasErhua = at > 0 && symbols[at] === ERHUA_SYMBOL;
332
- if (hasErhua) {
333
- at += 1;
334
- }
335
- return at === symbols.length
336
- ? {
337
- initial: initial ?? "",
338
- medial: medial ?? "",
339
- rhyme: rhyme ?? "",
340
- hasErhua,
341
- }
342
- : undefined;
343
- }
1
+ import { EMPTY_RHYME_INITIALS } from "./bopomofo-symbols.js";
2
+ export { writeBopomofo, writeBopomofoWord, } from "./bopomofo-symbols.js";
3
+ import { FINALS_BY_PARTS } from "./bopomofo-reverse.js";
4
+ import { parseSymbols, splitTone } from "./bopomofo-parse.js";
5
+ export { isBopomofo } from "./bopomofo-reverse.js";
344
6
  /**
345
7
  * Resolve parsed symbols to an underlying final.
346
8
  *
@@ -1 +1 @@
1
- {"version":3,"file":"bopomofo.js","sourceRoot":"","sources":["../../src/transcription/bopomofo.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bopomofo.js","sourceRoot":"","sources":["../../src/transcription/bopomofo.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,EAEL,aAAa,EACb,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAe,YAAY,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAE3E,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD;;;;;;GAMG;AACH,SAAS,OAAO,CAAC,MAAc;IAC7B,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IAC1C,IAAI,MAAM,KAAK,EAAE,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QAClC,OAAO,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7D,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;QACtC,OAAO,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IACzC,CAAC;IACD,OAAO,eAAe,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,IAAY,EAAE,UAAmB;IACnD,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACjE,OAAO,MAAM,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS;QAChD,CAAC,CAAC,SAAS;QACX,CAAC,CAAC;YACE,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,KAAK;YACL,IAAI,EAAE,SAAS;YACf,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;SACxC,CAAC;AACR,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IACtD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;QAC3C,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;IAE9B,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACrE,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;AACvE,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * The first and second tone rules, the two that reach for a glide.
3
+ *
4
+ * Both work on the rime's vowels rather than the syllable as a whole, and the
5
+ * sonorant initials swap what the two of them do.
6
+ */
7
+ import type { Initial } from "../syllable/phonology.js";
8
+ /**
9
+ * Tone 1: the basic form, with `-h-` inserted after a sonorant initial.
10
+ */
11
+ export declare function firstTone(form: string, initial: Initial): string;
12
+ /**
13
+ * The i or u a glide can be written on, turned into y or w.
14
+ *
15
+ * The rule is `NiV → NyV` and `NuV → NwV`, where N is a non-vowel or nothing at
16
+ * all: the i or u has to be the medial rather than part of a diphthong, which
17
+ * is what the "not preceded by a vowel" test says. The `+ -i if final` clause
18
+ * covers the rimes that are nothing but the medial — `i` becomes `yi` and not
19
+ * a bare `y`.
20
+ */
21
+ export declare function glided(form: string): string | undefined;
22
+ /**
23
+ * Tone 2: i/u to y/w, or an `-r` after the vowels.
24
+ */
25
+ export declare function secondTone(form: string, initial: Initial): string;
26
+ /**
27
+ * The i or u a third tone can be swapped for e or o.
28
+ *
29
+ * `Vi`/`iV` becomes `Ve`/`eV` and `Vu`/`uV` becomes `Vo`/`oV`, so the letter
30
+ * has to sit beside a vowel; where both an i and a u are available it is
31
+ * whichever comes *first* that changes, which is why 交 jiǎo is `jeau` and not
32
+ * `jiao`. The swap is abandoned where it would produce `ee` or `oo`, both of
33
+ * which are the doubling below and would collide with it.
34
+ */
35
+ export declare function swapped(form: string): string | undefined;
36
+ //# sourceMappingURL=gwoyeu-first-second.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gwoyeu-first-second.d.ts","sourceRoot":"","sources":["../../src/transcription/gwoyeu-first-second.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAGxD;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAIhE;AAED;;;;;;;;GAQG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAYvD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAUjE;AAED;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAqBxD"}
@@ -0,0 +1,75 @@
1
+ import { isVowel, SONORANT_INITIALS, vowelSpan } from "./gwoyeu-vowels.js";
2
+ /**
3
+ * Tone 1: the basic form, with `-h-` inserted after a sonorant initial.
4
+ */
5
+ export function firstTone(form, initial) {
6
+ return SONORANT_INITIALS.has(initial)
7
+ ? `${form.slice(0, 1)}h${form.slice(1)}`
8
+ : form;
9
+ }
10
+ /**
11
+ * The i or u a glide can be written on, turned into y or w.
12
+ *
13
+ * The rule is `NiV → NyV` and `NuV → NwV`, where N is a non-vowel or nothing at
14
+ * all: the i or u has to be the medial rather than part of a diphthong, which
15
+ * is what the "not preceded by a vowel" test says. The `+ -i if final` clause
16
+ * covers the rimes that are nothing but the medial — `i` becomes `yi` and not
17
+ * a bare `y`.
18
+ */
19
+ export function glided(form) {
20
+ for (const [letter, glide] of [
21
+ ["i", "y"],
22
+ ["u", "w"],
23
+ ]) {
24
+ const at = form.indexOf(letter);
25
+ if (at !== -1 && !isVowel(form[at - 1])) {
26
+ const rest = form.slice(at + 1);
27
+ return `${form.slice(0, at)}${glide}${rest === "" ? letter : rest}`;
28
+ }
29
+ }
30
+ return undefined;
31
+ }
32
+ /**
33
+ * Tone 2: i/u to y/w, or an `-r` after the vowels.
34
+ */
35
+ export function secondTone(form, initial) {
36
+ if (SONORANT_INITIALS.has(initial)) {
37
+ return form;
38
+ }
39
+ const glide = glided(form);
40
+ if (glide !== undefined) {
41
+ return glide;
42
+ }
43
+ const [, end] = vowelSpan(form);
44
+ return `${form.slice(0, end + 1)}r${form.slice(end + 1)}`;
45
+ }
46
+ /**
47
+ * The i or u a third tone can be swapped for e or o.
48
+ *
49
+ * `Vi`/`iV` becomes `Ve`/`eV` and `Vu`/`uV` becomes `Vo`/`oV`, so the letter
50
+ * has to sit beside a vowel; where both an i and a u are available it is
51
+ * whichever comes *first* that changes, which is why 交 jiǎo is `jeau` and not
52
+ * `jiao`. The swap is abandoned where it would produce `ee` or `oo`, both of
53
+ * which are the doubling below and would collide with it.
54
+ */
55
+ export function swapped(form) {
56
+ const found = [
57
+ ["i", "e"],
58
+ ["u", "o"],
59
+ ]
60
+ .map(([letter, swap]) => [form.indexOf(letter), swap])
61
+ .filter(([at]) => at !== -1)
62
+ .toSorted((one, other) => one[0] - other[0])[0];
63
+ if (found === undefined) {
64
+ return undefined;
65
+ }
66
+ const [at, swap] = found;
67
+ const before = form[at - 1];
68
+ const after = form[at + 1];
69
+ const isBeside = isVowel(before) || isVowel(after);
70
+ const isDoubles = before === swap || after === swap;
71
+ return isBeside && !isDoubles
72
+ ? `${form.slice(0, at)}${swap}${form.slice(at + 1)}`
73
+ : undefined;
74
+ }
75
+ //# sourceMappingURL=gwoyeu-first-second.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gwoyeu-first-second.js","sourceRoot":"","sources":["../../src/transcription/gwoyeu-first-second.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { Syllable } from "../syllable/syllable.js";
2
+ import { type ContourTone } from "./gwoyeu-tonal-forms.js";
3
+ export declare const NEUTRAL_MARK = ".";
4
+ /**
5
+ * Spell a syllable in a given tone.
6
+ */
7
+ export declare function toneForm(syllable: Syllable, tone: ContourTone): string;
8
+ /**
9
+ * Spell a rhotacised syllable in a given tone.
10
+ */
11
+ export declare function rhotacisedTone(syllable: Syllable, tone: ContourTone): string;
12
+ /**
13
+ * Write a syllable in Gwoyeu Romatzyh: 就 jiù becomes `jiow`.
14
+ *
15
+ * An unwritten tone is written as the first-tone form, because GR has no other
16
+ * form to write — which means it reads back as a first tone, exactly as
17
+ * bopomofo's unmarked syllable does.
18
+ *
19
+ * The neutral tone takes the dot in front, and behind it goes the syllable's
20
+ * original tonal spelling where {@link Syllable.originalTone} says what that
21
+ * was: 没有 méiyou is `mei.yeou`. Where it does not, the basic form goes there
22
+ * instead — which is what GR itself writes for a syllable that is neutral in
23
+ * its own right, 什么 shénme being `shern.me`. The basic form is not the first
24
+ * tone for a sonorant initial, and writing `.mhe` would say the 么 was one.
25
+ */
26
+ export declare function writeGwoyeu(syllable: Syllable): string;
27
+ /**
28
+ * Write a word in Gwoyeu Romatzyh, one syllable after another.
29
+ *
30
+ * Solid, as GR writes a word: 北京 is `Beeijing`, which is the convention
31
+ * pinyin inherited. GR uses an apostrophe where the join is ambiguous — its own
32
+ * name for pinyin, `Pin'in`, is the standard example — and that is not written
33
+ * here, for the same reason `readGwoyeu` takes one syllable at a time: knowing
34
+ * where the boundary is ambiguous means being able to split the word, and
35
+ * nothing here splits a GR word.
36
+ */
37
+ export declare function writeGwoyeuWord(syllables: readonly Syllable[]): string;
38
+ //# sourceMappingURL=gwoyeu-spelling.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gwoyeu-spelling.d.ts","sourceRoot":"","sources":["../../src/transcription/gwoyeu-spelling.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EACL,KAAK,WAAW,EAIjB,MAAM,yBAAyB,CAAC;AAWjC,eAAO,MAAM,YAAY,MAAM,CAAC;AAoBhC;;GAEG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM,CAEtE;AA4BD;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM,CAY5E;AA0BD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAUtD;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,QAAQ,EAAE,GAAG,MAAM,CAEtE"}
@@ -0,0 +1,124 @@
1
+ import { NEUTRAL_TONE } from "../tone/tone.js";
2
+ import { fourthTone, tonalForm, zeroInitial, } from "./gwoyeu-tonal-forms.js";
3
+ import { APOSTROPHE, APOSTROPHE_TONES, EMPTY_RHYME_INITIALS, ERHUA_SUFFIX, FINAL_SPELLINGS, INITIAL_SPELLINGS, RHOTACISED_EMPTY_RHYME, RHOTACISED_RIMES, } from "./gwoyeu-tables.js";
4
+ export const NEUTRAL_MARK = ".";
5
+ /**
6
+ * How a final is spelled after a given initial.
7
+ */
8
+ function rimeSpelling(initial, final) {
9
+ return final === "i" && EMPTY_RHYME_INITIALS.has(initial)
10
+ ? "y"
11
+ : FINAL_SPELLINGS[final];
12
+ }
13
+ /**
14
+ * The basic form of a syllable: the spelling every tonal rule starts from.
15
+ */
16
+ function basicForm(syllable) {
17
+ const { initial, final } = syllable;
18
+ const spelt = INITIAL_SPELLINGS.get(initial) ?? "";
19
+ return `${spelt}${rimeSpelling(initial, final)}`;
20
+ }
21
+ /**
22
+ * Spell a syllable in a given tone.
23
+ */
24
+ export function toneForm(syllable, tone) {
25
+ return tonalForm(basicForm(syllable), syllable.initial, tone);
26
+ }
27
+ /**
28
+ * The basic rhotacised form of a syllable: the spelling before the `-l`.
29
+ */
30
+ function rhotacisedForm(syllable) {
31
+ const { initial, final } = syllable;
32
+ const rime = final === "i" && EMPTY_RHYME_INITIALS.has(initial)
33
+ ? RHOTACISED_EMPTY_RHYME
34
+ : RHOTACISED_RIMES[final];
35
+ return `${INITIAL_SPELLINGS.get(initial) ?? ""}${rime}`;
36
+ }
37
+ /**
38
+ * Whether a rhotacised rime spells its fourth tone rather than doubling the l.
39
+ *
40
+ * The fourth tone of a rhotacised syllable doubles the `-l` — `nal` becomes
41
+ * `nall` — except where the rime has a fourth tone of its own to spell, and
42
+ * then it spells that and adds the l on the end: `aul` becomes `awl` and `angl`
43
+ * becomes `anql`. *Spelling in Gwoyeu Romatzyh* lists the exceptions as
44
+ * `awl, owl, anql, enql, onql` and `ehl`, which is every rime ending in a
45
+ * diphthong's -u or in -ng, plus the `e` that takes the apostrophe.
46
+ */
47
+ function isOwnFourthTone(final, rime) {
48
+ return final === "e" || /(?:[aeiou]u|ng)$/u.test(rime);
49
+ }
50
+ /**
51
+ * Spell a rhotacised syllable in a given tone.
52
+ */
53
+ export function rhotacisedTone(syllable, tone) {
54
+ const { initial, final } = syllable;
55
+ const basic = rhotacisedForm(syllable);
56
+ if (tone === 4) {
57
+ const spelt = isOwnFourthTone(final, basic)
58
+ ? `${fourthTone(basic)}${ERHUA_SUFFIX}`
59
+ : `${basic}${ERHUA_SUFFIX}${ERHUA_SUFFIX}`;
60
+ return initial === "" ? zeroInitial(spelt, basic) : spelt;
61
+ }
62
+ const apostrophe = tone <= (APOSTROPHE_TONES.get(final) ?? 0) ? APOSTROPHE : "";
63
+ return `${tonalForm(basic, initial, tone)}${apostrophe}${ERHUA_SUFFIX}`;
64
+ }
65
+ /**
66
+ * Spell a syllable in a given tone, rhotacised or not.
67
+ */
68
+ function spelling(syllable, tone) {
69
+ return syllable.erhua === true
70
+ ? rhotacisedTone(syllable, tone)
71
+ : toneForm(syllable, tone);
72
+ }
73
+ /**
74
+ * The basic form of a syllable, rhotacised or not.
75
+ *
76
+ * The spelling before any tonal rule has touched it, which is the first tone
77
+ * for every initial but the sonorants and the second tone for those. It is
78
+ * what a neutral syllable with no original tone is written as.
79
+ */
80
+ function basicSpelling(syllable) {
81
+ if (syllable.erhua !== true) {
82
+ return basicForm(syllable);
83
+ }
84
+ const apostrophe = APOSTROPHE_TONES.has(syllable.final) ? APOSTROPHE : "";
85
+ return `${rhotacisedForm(syllable)}${apostrophe}${ERHUA_SUFFIX}`;
86
+ }
87
+ /**
88
+ * Write a syllable in Gwoyeu Romatzyh: 就 jiù becomes `jiow`.
89
+ *
90
+ * An unwritten tone is written as the first-tone form, because GR has no other
91
+ * form to write — which means it reads back as a first tone, exactly as
92
+ * bopomofo's unmarked syllable does.
93
+ *
94
+ * The neutral tone takes the dot in front, and behind it goes the syllable's
95
+ * original tonal spelling where {@link Syllable.originalTone} says what that
96
+ * was: 没有 méiyou is `mei.yeou`. Where it does not, the basic form goes there
97
+ * instead — which is what GR itself writes for a syllable that is neutral in
98
+ * its own right, 什么 shénme being `shern.me`. The basic form is not the first
99
+ * tone for a sonorant initial, and writing `.mhe` would say the 么 was one.
100
+ */
101
+ export function writeGwoyeu(syllable) {
102
+ const { tone, originalTone } = syllable;
103
+ if (tone === NEUTRAL_TONE) {
104
+ const spelt = originalTone === undefined || originalTone === NEUTRAL_TONE
105
+ ? basicSpelling(syllable)
106
+ : spelling(syllable, originalTone);
107
+ return `${NEUTRAL_MARK}${spelt}`;
108
+ }
109
+ return spelling(syllable, tone ?? 1);
110
+ }
111
+ /**
112
+ * Write a word in Gwoyeu Romatzyh, one syllable after another.
113
+ *
114
+ * Solid, as GR writes a word: 北京 is `Beeijing`, which is the convention
115
+ * pinyin inherited. GR uses an apostrophe where the join is ambiguous — its own
116
+ * name for pinyin, `Pin'in`, is the standard example — and that is not written
117
+ * here, for the same reason `readGwoyeu` takes one syllable at a time: knowing
118
+ * where the boundary is ambiguous means being able to split the word, and
119
+ * nothing here splits a GR word.
120
+ */
121
+ export function writeGwoyeuWord(syllables) {
122
+ return syllables.map((syllable) => writeGwoyeu(syllable)).join("");
123
+ }
124
+ //# sourceMappingURL=gwoyeu-spelling.js.map