@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.
- package/dist/accuracy/score-case.d.ts +23 -0
- package/dist/accuracy/score-case.d.ts.map +1 -0
- package/dist/accuracy/score-case.js +63 -0
- package/dist/accuracy/score-case.js.map +1 -0
- package/dist/accuracy/score.d.ts +1 -8
- package/dist/accuracy/score.d.ts.map +1 -1
- package/dist/accuracy/score.js +1 -55
- package/dist/accuracy/score.js.map +1 -1
- package/dist/cli/arguments.d.ts +4 -290
- package/dist/cli/arguments.d.ts.map +1 -1
- package/dist/cli/arguments.js +5 -357
- package/dist/cli/arguments.js.map +1 -1
- package/dist/cli/check-command.d.ts +9 -0
- package/dist/cli/check-command.d.ts.map +1 -0
- package/dist/cli/check-command.js +95 -0
- package/dist/cli/check-command.js.map +1 -0
- package/dist/cli/cli-input.d.ts +49 -0
- package/dist/cli/cli-input.d.ts.map +1 -0
- package/dist/cli/cli-input.js +31 -0
- package/dist/cli/cli-input.js.map +1 -0
- package/dist/cli/command.d.ts +97 -0
- package/dist/cli/command.d.ts.map +1 -0
- package/dist/cli/command.js +40 -0
- package/dist/cli/command.js.map +1 -0
- package/dist/cli/commands.d.ts +7 -110
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +14 -991
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/convert-command.d.ts +6 -0
- package/dist/cli/convert-command.d.ts.map +1 -0
- package/dist/cli/convert-command.js +52 -0
- package/dist/cli/convert-command.js.map +1 -0
- package/dist/cli/environment.d.ts +1 -1
- package/dist/cli/environment.d.ts.map +1 -1
- package/dist/cli/explain-command.d.ts +6 -0
- package/dist/cli/explain-command.d.ts.map +1 -0
- package/dist/cli/explain-command.js +40 -0
- package/dist/cli/explain-command.js.map +1 -0
- package/dist/cli/explain-syllable.d.ts +10 -0
- package/dist/cli/explain-syllable.d.ts.map +1 -0
- package/dist/cli/explain-syllable.js +70 -0
- package/dist/cli/explain-syllable.js.map +1 -0
- package/dist/cli/flag-help.d.ts +18 -0
- package/dist/cli/flag-help.d.ts.map +1 -0
- package/dist/cli/flag-help.js +78 -0
- package/dist/cli/flag-help.js.map +1 -0
- package/dist/cli/flag-lists.d.ts +49 -0
- package/dist/cli/flag-lists.d.ts.map +1 -0
- package/dist/cli/flag-lists.js +58 -0
- package/dist/cli/flag-lists.js.map +1 -0
- package/dist/cli/flag-values.d.ts +44 -0
- package/dist/cli/flag-values.d.ts.map +1 -0
- package/dist/cli/flag-values.js +56 -0
- package/dist/cli/flag-values.js.map +1 -0
- package/dist/cli/flags.d.ts +193 -0
- package/dist/cli/flags.d.ts.map +1 -0
- package/dist/cli/flags.js +133 -0
- package/dist/cli/flags.js.map +1 -0
- package/dist/cli/format-options.d.ts +29 -0
- package/dist/cli/format-options.d.ts.map +1 -0
- package/dist/cli/format-options.js +72 -0
- package/dist/cli/format-options.js.map +1 -0
- package/dist/cli/global-help.d.ts +23 -0
- package/dist/cli/global-help.d.ts.map +1 -0
- package/dist/cli/global-help.js +40 -0
- package/dist/cli/global-help.js.map +1 -0
- package/dist/cli/help.d.ts +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +5 -99
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/html-commands.d.ts +13 -0
- package/dist/cli/html-commands.d.ts.map +1 -0
- package/dist/cli/html-commands.js +49 -0
- package/dist/cli/html-commands.js.map +1 -0
- package/dist/cli/info-command.d.ts +7 -0
- package/dist/cli/info-command.d.ts.map +1 -0
- package/dist/cli/info-command.js +39 -0
- package/dist/cli/info-command.js.map +1 -0
- package/dist/cli/lookup-commands.d.ts +10 -0
- package/dist/cli/lookup-commands.d.ts.map +1 -0
- package/dist/cli/lookup-commands.js +101 -0
- package/dist/cli/lookup-commands.js.map +1 -0
- package/dist/cli/match-command.d.ts +11 -0
- package/dist/cli/match-command.d.ts.map +1 -0
- package/dist/cli/match-command.js +76 -0
- package/dist/cli/match-command.js.map +1 -0
- package/dist/cli/number-command.d.ts +12 -0
- package/dist/cli/number-command.d.ts.map +1 -0
- package/dist/cli/number-command.js +89 -0
- package/dist/cli/number-command.js.map +1 -0
- package/dist/cli/options.d.ts +30 -0
- package/dist/cli/options.d.ts.map +1 -0
- package/dist/cli/options.js +54 -0
- package/dist/cli/options.js.map +1 -0
- package/dist/cli/run-command.d.ts +24 -0
- package/dist/cli/run-command.d.ts.map +1 -0
- package/dist/cli/run-command.js +40 -0
- package/dist/cli/run-command.js.map +1 -0
- package/dist/cli/run.d.ts +4 -42
- package/dist/cli/run.d.ts.map +1 -1
- package/dist/cli/run.js +6 -61
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/script-command.d.ts +10 -0
- package/dist/cli/script-command.d.ts.map +1 -0
- package/dist/cli/script-command.js +58 -0
- package/dist/cli/script-command.js.map +1 -0
- package/dist/cli/segment-command.d.ts +11 -0
- package/dist/cli/segment-command.d.ts.map +1 -0
- package/dist/cli/segment-command.js +53 -0
- package/dist/cli/segment-command.js.map +1 -0
- package/dist/cli/slug-command.d.ts +10 -0
- package/dist/cli/slug-command.d.ts.map +1 -0
- package/dist/cli/slug-command.js +28 -0
- package/dist/cli/slug-command.js.map +1 -0
- package/dist/cli/syllable-command.d.ts +14 -0
- package/dist/cli/syllable-command.d.ts.map +1 -0
- package/dist/cli/syllable-command.js +82 -0
- package/dist/cli/syllable-command.js.map +1 -0
- package/dist/cli/system-table.d.ts +12 -0
- package/dist/cli/system-table.d.ts.map +1 -0
- package/dist/cli/system-table.js +48 -0
- package/dist/cli/system-table.js.map +1 -0
- package/dist/cli/systems.d.ts +57 -0
- package/dist/cli/systems.d.ts.map +1 -0
- package/dist/cli/systems.js +27 -0
- package/dist/cli/systems.js.map +1 -0
- package/dist/cli/transcribe-command.d.ts +18 -0
- package/dist/cli/transcribe-command.d.ts.map +1 -0
- package/dist/cli/transcribe-command.js +86 -0
- package/dist/cli/transcribe-command.js.map +1 -0
- package/dist/cli/transcribe-reading.d.ts +15 -0
- package/dist/cli/transcribe-reading.d.ts.map +1 -0
- package/dist/cli/transcribe-reading.js +90 -0
- package/dist/cli/transcribe-reading.js.map +1 -0
- package/dist/cli/transcribe-rows.d.ts +26 -0
- package/dist/cli/transcribe-rows.d.ts.map +1 -0
- package/dist/cli/transcribe-rows.js +30 -0
- package/dist/cli/transcribe-rows.js.map +1 -0
- package/dist/cli/usage-error.d.ts +9 -0
- package/dist/cli/usage-error.d.ts.map +1 -0
- package/dist/cli/usage-error.js +9 -0
- package/dist/cli/usage-error.js.map +1 -0
- package/dist/decode/alternatives.d.ts +16 -0
- package/dist/decode/alternatives.d.ts.map +1 -0
- package/dist/decode/alternatives.js +31 -0
- package/dist/decode/alternatives.js.map +1 -0
- package/dist/decode/confidence.d.ts.map +1 -1
- package/dist/decode/confidence.js +3 -118
- package/dist/decode/confidence.js.map +1 -1
- package/dist/decode/convert-options.d.ts +116 -0
- package/dist/decode/convert-options.d.ts.map +1 -0
- package/dist/decode/convert-options.js +2 -0
- package/dist/decode/convert-options.js.map +1 -0
- package/dist/decode/convert-pipeline.d.ts +18 -0
- package/dist/decode/convert-pipeline.d.ts.map +1 -0
- package/dist/decode/convert-pipeline.js +66 -0
- package/dist/decode/convert-pipeline.js.map +1 -0
- package/dist/decode/convert.d.ts +9 -118
- package/dist/decode/convert.d.ts.map +1 -1
- package/dist/decode/convert.js +5 -453
- package/dist/decode/convert.js.map +1 -1
- package/dist/decode/decode.d.ts +2 -15
- package/dist/decode/decode.d.ts.map +1 -1
- package/dist/decode/decode.js +2 -121
- package/dist/decode/decode.js.map +1 -1
- package/dist/decode/decoders.d.ts +32 -0
- package/dist/decode/decoders.d.ts.map +1 -0
- package/dist/decode/decoders.js +29 -0
- package/dist/decode/decoders.js.map +1 -0
- package/dist/decode/edge-context.d.ts +38 -0
- package/dist/decode/edge-context.d.ts.map +1 -0
- package/dist/decode/edge-context.js +57 -0
- package/dist/decode/edge-context.js.map +1 -0
- package/dist/decode/hint-lattice.d.ts +45 -0
- package/dist/decode/hint-lattice.d.ts.map +1 -0
- package/dist/decode/hint-lattice.js +140 -0
- package/dist/decode/hint-lattice.js.map +1 -0
- package/dist/decode/hints.d.ts +2 -45
- package/dist/decode/hints.d.ts.map +1 -1
- package/dist/decode/hints.js +1 -139
- package/dist/decode/hints.js.map +1 -1
- package/dist/decode/jiao-rule.d.ts +58 -0
- package/dist/decode/jiao-rule.d.ts.map +1 -0
- package/dist/decode/jiao-rule.js +76 -0
- package/dist/decode/jiao-rule.js.map +1 -0
- package/dist/decode/lattice-costs.d.ts +55 -0
- package/dist/decode/lattice-costs.d.ts.map +1 -0
- package/dist/decode/lattice-costs.js +90 -0
- package/dist/decode/lattice-costs.js.map +1 -0
- package/dist/decode/lattice-edges.d.ts +29 -0
- package/dist/decode/lattice-edges.d.ts.map +1 -0
- package/dist/decode/lattice-edges.js +78 -0
- package/dist/decode/lattice-edges.js.map +1 -0
- package/dist/decode/lattice-slice.d.ts +37 -0
- package/dist/decode/lattice-slice.d.ts.map +1 -0
- package/dist/decode/lattice-slice.js +43 -0
- package/dist/decode/lattice-slice.js.map +1 -0
- package/dist/decode/lattice-types.d.ts +82 -0
- package/dist/decode/lattice-types.d.ts.map +1 -0
- package/dist/decode/lattice-types.js +44 -0
- package/dist/decode/lattice-types.js.map +1 -0
- package/dist/decode/lattice.d.ts +2 -59
- package/dist/decode/lattice.d.ts.map +1 -1
- package/dist/decode/lattice.js +2 -118
- package/dist/decode/lattice.js.map +1 -1
- package/dist/decode/number-pieces.d.ts +62 -0
- package/dist/decode/number-pieces.d.ts.map +1 -0
- package/dist/decode/number-pieces.js +106 -0
- package/dist/decode/number-pieces.js.map +1 -0
- package/dist/decode/numbers.d.ts +53 -0
- package/dist/decode/numbers.d.ts.map +1 -0
- package/dist/decode/numbers.js +69 -0
- package/dist/decode/numbers.js.map +1 -0
- package/dist/decode/pieces.d.ts +78 -0
- package/dist/decode/pieces.d.ts.map +1 -0
- package/dist/decode/pieces.js +136 -0
- package/dist/decode/pieces.js.map +1 -0
- package/dist/decode/polyphone-rules.d.ts +31 -0
- package/dist/decode/polyphone-rules.d.ts.map +1 -0
- package/dist/decode/polyphone-rules.js +159 -0
- package/dist/decode/polyphone-rules.js.map +1 -0
- package/dist/decode/reading-rules.d.ts +2 -97
- package/dist/decode/reading-rules.d.ts.map +1 -1
- package/dist/decode/reading-rules.js +4 -365
- package/dist/decode/reading-rules.js.map +1 -1
- package/dist/decode/rules.d.ts +1 -17
- package/dist/decode/rules.d.ts.map +1 -1
- package/dist/decode/rules.js +1 -43
- package/dist/decode/rules.js.map +1 -1
- package/dist/decode/run-lattice.d.ts +52 -0
- package/dist/decode/run-lattice.d.ts.map +1 -0
- package/dist/decode/run-lattice.js +91 -0
- package/dist/decode/run-lattice.js.map +1 -0
- package/dist/decode/sandhi-tones.d.ts +69 -0
- package/dist/decode/sandhi-tones.d.ts.map +1 -0
- package/dist/decode/sandhi-tones.js +88 -0
- package/dist/decode/sandhi-tones.js.map +1 -0
- package/dist/decode/sandhi.d.ts +1 -1
- package/dist/decode/sandhi.d.ts.map +1 -1
- package/dist/decode/sandhi.js +1 -81
- package/dist/decode/sandhi.js.map +1 -1
- package/dist/decode/script-types.d.ts +76 -0
- package/dist/decode/script-types.d.ts.map +1 -0
- package/dist/decode/script-types.js +35 -0
- package/dist/decode/script-types.js.map +1 -0
- package/dist/decode/script-words.d.ts +32 -0
- package/dist/decode/script-words.d.ts.map +1 -0
- package/dist/decode/script-words.js +77 -0
- package/dist/decode/script-words.js.map +1 -0
- package/dist/decode/script.d.ts +3 -73
- package/dist/decode/script.d.ts.map +1 -1
- package/dist/decode/script.js +3 -109
- package/dist/decode/script.js.map +1 -1
- package/dist/decode/tan-rule.d.ts +68 -0
- package/dist/decode/tan-rule.d.ts.map +1 -0
- package/dist/decode/tan-rule.js +131 -0
- package/dist/decode/tan-rule.js.map +1 -0
- package/dist/decode/write-run.d.ts +28 -0
- package/dist/decode/write-run.d.ts.map +1 -0
- package/dist/decode/write-run.js +77 -0
- package/dist/decode/write-run.js.map +1 -0
- package/dist/dictionary/artifact-claims.d.ts +25 -0
- package/dist/dictionary/artifact-claims.d.ts.map +1 -0
- package/dist/dictionary/artifact-claims.js +47 -0
- package/dist/dictionary/artifact-claims.js.map +1 -0
- package/dist/dictionary/artifact-format.d.ts +86 -0
- package/dist/dictionary/artifact-format.d.ts.map +1 -0
- package/dist/dictionary/artifact-format.js +91 -0
- package/dist/dictionary/artifact-format.js.map +1 -0
- package/dist/dictionary/artifact-read.d.ts +34 -0
- package/dist/dictionary/artifact-read.d.ts.map +1 -0
- package/dist/dictionary/artifact-read.js +114 -0
- package/dist/dictionary/artifact-read.js.map +1 -0
- package/dist/dictionary/artifact.d.ts +4 -63
- package/dist/dictionary/artifact.d.ts.map +1 -1
- package/dist/dictionary/artifact.js +12 -229
- package/dist/dictionary/artifact.js.map +1 -1
- package/dist/dictionary/assertions.d.ts +5 -57
- package/dist/dictionary/assertions.d.ts.map +1 -1
- package/dist/dictionary/assertions.js +4 -317
- package/dist/dictionary/assertions.js.map +1 -1
- package/dist/dictionary/build-assertions.d.ts +12 -0
- package/dist/dictionary/build-assertions.d.ts.map +1 -0
- package/dist/dictionary/build-assertions.js +13 -0
- package/dist/dictionary/build-assertions.js.map +1 -0
- package/dist/dictionary/built-dictionary.d.ts +46 -0
- package/dist/dictionary/built-dictionary.d.ts.map +1 -0
- package/dist/dictionary/built-dictionary.js +97 -0
- package/dist/dictionary/built-dictionary.js.map +1 -0
- package/dist/dictionary/cedict-senses.d.ts +80 -0
- package/dist/dictionary/cedict-senses.d.ts.map +1 -0
- package/dist/dictionary/cedict-senses.js +114 -0
- package/dist/dictionary/cedict-senses.js.map +1 -0
- package/dist/dictionary/character-defaults.d.ts +26 -0
- package/dist/dictionary/character-defaults.d.ts.map +1 -0
- package/dist/dictionary/character-defaults.js +67 -0
- package/dist/dictionary/character-defaults.js.map +1 -0
- package/dist/dictionary/character-readings.d.ts +10 -0
- package/dist/dictionary/character-readings.d.ts.map +1 -0
- package/dist/dictionary/character-readings.js +25 -0
- package/dist/dictionary/character-readings.js.map +1 -0
- package/dist/dictionary/dictionary-entry.d.ts +37 -0
- package/dist/dictionary/dictionary-entry.d.ts.map +1 -0
- package/dist/dictionary/dictionary-entry.js +41 -0
- package/dist/dictionary/dictionary-entry.js.map +1 -0
- package/dist/dictionary/dictionary-readings.d.ts +56 -0
- package/dist/dictionary/dictionary-readings.d.ts.map +1 -0
- package/dist/dictionary/dictionary-readings.js +93 -0
- package/dist/dictionary/dictionary-readings.js.map +1 -0
- package/dist/dictionary/dictionary.d.ts +6 -60
- package/dist/dictionary/dictionary.d.ts.map +1 -1
- package/dist/dictionary/dictionary.js +9 -169
- package/dist/dictionary/dictionary.js.map +1 -1
- package/dist/dictionary/entry-invariants.d.ts +3 -0
- package/dist/dictionary/entry-invariants.d.ts.map +1 -0
- package/dist/dictionary/entry-invariants.js +67 -0
- package/dist/dictionary/entry-invariants.js.map +1 -0
- package/dist/dictionary/entry-lines.d.ts +35 -0
- package/dist/dictionary/entry-lines.d.ts.map +1 -0
- package/dist/dictionary/entry-lines.js +70 -0
- package/dist/dictionary/entry-lines.js.map +1 -0
- package/dist/dictionary/erhua-repair.d.ts +26 -0
- package/dist/dictionary/erhua-repair.d.ts.map +1 -0
- package/dist/dictionary/erhua-repair.js +49 -0
- package/dist/dictionary/erhua-repair.js.map +1 -0
- package/dist/dictionary/frequency-tones.d.ts +74 -0
- package/dist/dictionary/frequency-tones.d.ts.map +1 -0
- package/dist/dictionary/frequency-tones.js +128 -0
- package/dist/dictionary/frequency-tones.js.map +1 -0
- package/dist/dictionary/inventory-invariants.d.ts +3 -0
- package/dist/dictionary/inventory-invariants.d.ts.map +1 -0
- package/dist/dictionary/inventory-invariants.js +54 -0
- package/dist/dictionary/inventory-invariants.js.map +1 -0
- package/dist/dictionary/locale-candidates.d.ts +40 -0
- package/dist/dictionary/locale-candidates.d.ts.map +1 -0
- package/dist/dictionary/locale-candidates.js +77 -0
- package/dist/dictionary/locale-candidates.js.map +1 -0
- package/dist/dictionary/locale-segments.d.ts +47 -0
- package/dist/dictionary/locale-segments.d.ts.map +1 -0
- package/dist/dictionary/locale-segments.js +141 -0
- package/dist/dictionary/locale-segments.js.map +1 -0
- package/dist/dictionary/locale.d.ts +1 -21
- package/dist/dictionary/locale.d.ts.map +1 -1
- package/dist/dictionary/locale.js +9 -198
- package/dist/dictionary/locale.js.map +1 -1
- package/dist/dictionary/merge-types.d.ts +121 -0
- package/dist/dictionary/merge-types.d.ts.map +1 -0
- package/dist/dictionary/merge-types.js +35 -0
- package/dist/dictionary/merge-types.js.map +1 -0
- package/dist/dictionary/merge-word.d.ts +7 -0
- package/dist/dictionary/merge-word.d.ts.map +1 -0
- package/dist/dictionary/merge-word.js +91 -0
- package/dist/dictionary/merge-word.js.map +1 -0
- package/dist/dictionary/merge.d.ts +5 -62
- package/dist/dictionary/merge.d.ts.map +1 -1
- package/dist/dictionary/merge.js +30 -713
- package/dist/dictionary/merge.js.map +1 -1
- package/dist/dictionary/proper-noun.d.ts +28 -0
- package/dist/dictionary/proper-noun.d.ts.map +1 -0
- package/dist/dictionary/proper-noun.js +43 -0
- package/dist/dictionary/proper-noun.js.map +1 -0
- package/dist/dictionary/reading-agreement.d.ts +71 -0
- package/dist/dictionary/reading-agreement.d.ts.map +1 -0
- package/dist/dictionary/reading-agreement.js +156 -0
- package/dist/dictionary/reading-agreement.js.map +1 -0
- package/dist/dictionary/script-conversion.d.ts +28 -0
- package/dist/dictionary/script-conversion.d.ts.map +1 -0
- package/dist/dictionary/script-conversion.js +58 -0
- package/dist/dictionary/script-conversion.js.map +1 -0
- package/dist/dictionary/script-pairings.d.ts +74 -0
- package/dist/dictionary/script-pairings.d.ts.map +1 -0
- package/dist/dictionary/script-pairings.js +120 -0
- package/dist/dictionary/script-pairings.js.map +1 -0
- package/dist/dictionary/script-tables.d.ts.map +1 -1
- package/dist/dictionary/script-tables.js +2 -165
- package/dist/dictionary/script-tables.js.map +1 -1
- package/dist/dictionary/taiwan-reading.d.ts +8 -0
- package/dist/dictionary/taiwan-reading.d.ts.map +1 -0
- package/dist/dictionary/taiwan-reading.js +38 -0
- package/dist/dictionary/taiwan-reading.js.map +1 -0
- package/dist/dictionary/tone-invariants.d.ts +3 -0
- package/dist/dictionary/tone-invariants.d.ts.map +1 -0
- package/dist/dictionary/tone-invariants.js +64 -0
- package/dist/dictionary/tone-invariants.js.map +1 -0
- package/dist/dictionary/traditional-form.d.ts +21 -0
- package/dist/dictionary/traditional-form.d.ts.map +1 -0
- package/dist/dictionary/traditional-form.js +59 -0
- package/dist/dictionary/traditional-form.js.map +1 -0
- package/dist/dictionary/traditional-ranking.d.ts +22 -0
- package/dist/dictionary/traditional-ranking.d.ts.map +1 -0
- package/dist/dictionary/traditional-ranking.js +74 -0
- package/dist/dictionary/traditional-ranking.js.map +1 -0
- package/dist/dictionary/traditional-table.d.ts +51 -0
- package/dist/dictionary/traditional-table.d.ts.map +1 -0
- package/dist/dictionary/traditional-table.js +98 -0
- package/dist/dictionary/traditional-table.js.map +1 -0
- package/dist/dictionary/traditional.d.ts +3 -56
- package/dist/dictionary/traditional.d.ts.map +1 -1
- package/dist/dictionary/traditional.js +3 -186
- package/dist/dictionary/traditional.js.map +1 -1
- package/dist/dictionary/variant-counts.d.ts +39 -0
- package/dist/dictionary/variant-counts.d.ts.map +1 -0
- package/dist/dictionary/variant-counts.js +38 -0
- package/dist/dictionary/variant-counts.js.map +1 -0
- package/dist/dictionary/word-reading.d.ts +26 -0
- package/dist/dictionary/word-reading.d.ts.map +1 -0
- package/dist/dictionary/word-reading.js +76 -0
- package/dist/dictionary/word-reading.js.map +1 -0
- package/dist/dictionary/word-readings.d.ts +15 -0
- package/dist/dictionary/word-readings.d.ts.map +1 -0
- package/dist/dictionary/word-readings.js +38 -0
- package/dist/dictionary/word-readings.js.map +1 -0
- package/dist/format/annotate.d.ts +90 -0
- package/dist/format/annotate.d.ts.map +1 -0
- package/dist/format/annotate.js +168 -0
- package/dist/format/annotate.js.map +1 -0
- package/dist/format/html.d.ts +15 -46
- package/dist/format/html.d.ts.map +1 -1
- package/dist/format/html.js +3 -162
- package/dist/format/html.js.map +1 -1
- package/dist/format/slug-hash.d.ts +51 -0
- package/dist/format/slug-hash.d.ts.map +1 -0
- package/dist/format/slug-hash.js +74 -0
- package/dist/format/slug-hash.js.map +1 -0
- package/dist/format/slug-options.d.ts +98 -0
- package/dist/format/slug-options.d.ts.map +1 -0
- package/dist/format/slug-options.js +2 -0
- package/dist/format/slug-options.js.map +1 -0
- package/dist/format/slug-words.d.ts +27 -0
- package/dist/format/slug-words.d.ts.map +1 -0
- package/dist/format/slug-words.js +0 -0
- package/dist/format/slug-words.js.map +1 -0
- package/dist/format/slug.d.ts +3 -128
- package/dist/format/slug.d.ts.map +1 -1
- package/dist/format/slug.js +0 -0
- package/dist/format/slug.js.map +1 -1
- package/dist/grade/check-readings.d.ts +41 -0
- package/dist/grade/check-readings.d.ts.map +1 -0
- package/dist/grade/check-readings.js +36 -0
- package/dist/grade/check-readings.js.map +1 -0
- package/dist/grade/check.d.ts +4 -4
- package/dist/grade/check.d.ts.map +1 -1
- package/dist/grade/check.js +5 -270
- package/dist/grade/check.js.map +1 -1
- package/dist/grade/pair-syllables.d.ts +48 -0
- package/dist/grade/pair-syllables.d.ts.map +1 -0
- package/dist/grade/pair-syllables.js +71 -0
- package/dist/grade/pair-syllables.js.map +1 -0
- package/dist/grade/reading-syllables.d.ts +62 -0
- package/dist/grade/reading-syllables.d.ts.map +1 -0
- package/dist/grade/reading-syllables.js +58 -0
- package/dist/grade/reading-syllables.js.map +1 -0
- package/dist/grade/reading-tolerance.d.ts +72 -0
- package/dist/grade/reading-tolerance.d.ts.map +1 -0
- package/dist/grade/reading-tolerance.js +107 -0
- package/dist/grade/reading-tolerance.js.map +1 -0
- package/dist/grade/typed-reading.d.ts +28 -0
- package/dist/grade/typed-reading.d.ts.map +1 -0
- package/dist/grade/typed-reading.js +36 -0
- package/dist/grade/typed-reading.js.map +1 -0
- package/dist/numerals/numeral-parse.d.ts +32 -0
- package/dist/numerals/numeral-parse.d.ts.map +1 -0
- package/dist/numerals/numeral-parse.js +44 -0
- package/dist/numerals/numeral-parse.js.map +1 -0
- package/dist/numerals/numeral-shapes.d.ts +89 -0
- package/dist/numerals/numeral-shapes.d.ts.map +1 -0
- package/dist/numerals/numeral-shapes.js +99 -0
- package/dist/numerals/numeral-shapes.js.map +1 -0
- package/dist/numerals/numerals.d.ts.map +1 -1
- package/dist/numerals/numerals.js +2 -36
- package/dist/numerals/numerals.js.map +1 -1
- package/dist/numerals/read-numeral.d.ts +76 -0
- package/dist/numerals/read-numeral.d.ts.map +1 -0
- package/dist/numerals/read-numeral.js +88 -0
- package/dist/numerals/read-numeral.js.map +1 -0
- package/dist/numerals/text.d.ts +3 -37
- package/dist/numerals/text.d.ts.map +1 -1
- package/dist/numerals/text.js +3 -254
- package/dist/numerals/text.js.map +1 -1
- package/dist/numerals/time.d.ts +34 -0
- package/dist/numerals/time.d.ts.map +1 -0
- package/dist/numerals/time.js +93 -0
- package/dist/numerals/time.js.map +1 -0
- package/dist/orthography/address-grouping.d.ts +34 -0
- package/dist/orthography/address-grouping.d.ts.map +1 -0
- package/dist/orthography/address-grouping.js +52 -0
- package/dist/orthography/address-grouping.js.map +1 -0
- package/dist/orthography/grouping.d.ts +3 -87
- package/dist/orthography/grouping.d.ts.map +1 -1
- package/dist/orthography/grouping.js +4 -270
- package/dist/orthography/grouping.js.map +1 -1
- package/dist/orthography/place-grouping.d.ts +39 -0
- package/dist/orthography/place-grouping.d.ts.map +1 -0
- package/dist/orthography/place-grouping.js +83 -0
- package/dist/orthography/place-grouping.js.map +1 -0
- package/dist/orthography/word-grouping.d.ts +48 -0
- package/dist/orthography/word-grouping.d.ts.map +1 -0
- package/dist/orthography/word-grouping.js +147 -0
- package/dist/orthography/word-grouping.js.map +1 -0
- package/dist/script/conversion-format.d.ts +22 -0
- package/dist/script/conversion-format.d.ts.map +1 -0
- package/dist/script/conversion-format.js +22 -0
- package/dist/script/conversion-format.js.map +1 -0
- package/dist/script/conversion-read.d.ts +9 -0
- package/dist/script/conversion-read.d.ts.map +1 -0
- package/dist/script/conversion-read.js +69 -0
- package/dist/script/conversion-read.js.map +1 -0
- package/dist/script/conversion-write.d.ts +14 -0
- package/dist/script/conversion-write.d.ts.map +1 -0
- package/dist/script/conversion-write.js +34 -0
- package/dist/script/conversion-write.js.map +1 -0
- package/dist/script/conversion.d.ts +10 -16
- package/dist/script/conversion.d.ts.map +1 -1
- package/dist/script/conversion.js +2 -115
- package/dist/script/conversion.js.map +1 -1
- package/dist/search/candidate-narrowing.d.ts +56 -0
- package/dist/search/candidate-narrowing.d.ts.map +1 -0
- package/dist/search/candidate-narrowing.js +55 -0
- package/dist/search/candidate-narrowing.js.map +1 -0
- package/dist/search/candidate-query.d.ts +25 -0
- package/dist/search/candidate-query.d.ts.map +1 -0
- package/dist/search/candidate-query.js +28 -0
- package/dist/search/candidate-query.js.map +1 -0
- package/dist/search/candidate-writings.d.ts +24 -0
- package/dist/search/candidate-writings.d.ts.map +1 -0
- package/dist/search/candidate-writings.js +114 -0
- package/dist/search/candidate-writings.js.map +1 -0
- package/dist/search/candidates.d.ts +7 -41
- package/dist/search/candidates.d.ts.map +1 -1
- package/dist/search/candidates.js +10 -164
- package/dist/search/candidates.js.map +1 -1
- package/dist/search/match-chunks.d.ts +19 -0
- package/dist/search/match-chunks.d.ts.map +1 -0
- package/dist/search/match-chunks.js +30 -0
- package/dist/search/match-chunks.js.map +1 -0
- package/dist/search/match-ranking.d.ts +39 -0
- package/dist/search/match-ranking.d.ts.map +1 -0
- package/dist/search/match-ranking.js +51 -0
- package/dist/search/match-ranking.js.map +1 -0
- package/dist/search/match-readings.d.ts +43 -0
- package/dist/search/match-readings.d.ts.map +1 -0
- package/dist/search/match-readings.js +83 -0
- package/dist/search/match-readings.js.map +1 -0
- package/dist/search/match-scoring.d.ts +146 -0
- package/dist/search/match-scoring.d.ts.map +1 -0
- package/dist/search/match-scoring.js +114 -0
- package/dist/search/match-scoring.js.map +1 -0
- package/dist/search/match-search.d.ts +28 -0
- package/dist/search/match-search.d.ts.map +1 -0
- package/dist/search/match-search.js +128 -0
- package/dist/search/match-search.js.map +1 -0
- package/dist/search/match.d.ts +5 -36
- package/dist/search/match.d.ts.map +1 -1
- package/dist/search/match.js +2 -379
- package/dist/search/match.js.map +1 -1
- package/dist/search/reverse-index-build.d.ts +30 -0
- package/dist/search/reverse-index-build.d.ts.map +1 -0
- package/dist/search/reverse-index-build.js +72 -0
- package/dist/search/reverse-index-build.js.map +1 -0
- package/dist/search/reverse-index-format.d.ts +60 -0
- package/dist/search/reverse-index-format.d.ts.map +1 -0
- package/dist/search/reverse-index-format.js +54 -0
- package/dist/search/reverse-index-format.js.map +1 -0
- package/dist/search/reverse-index-groups.d.ts +37 -0
- package/dist/search/reverse-index-groups.d.ts.map +1 -0
- package/dist/search/reverse-index-groups.js +71 -0
- package/dist/search/reverse-index-groups.js.map +1 -0
- package/dist/search/reverse-index-passes.d.ts +78 -0
- package/dist/search/reverse-index-passes.d.ts.map +1 -0
- package/dist/search/reverse-index-passes.js +59 -0
- package/dist/search/reverse-index-passes.js.map +1 -0
- package/dist/search/reverse-index-state.d.ts +36 -0
- package/dist/search/reverse-index-state.d.ts.map +1 -0
- package/dist/search/reverse-index-state.js +95 -0
- package/dist/search/reverse-index-state.js.map +1 -0
- package/dist/search/reverse-index.d.ts +8 -67
- package/dist/search/reverse-index.d.ts.map +1 -1
- package/dist/search/reverse-index.js +4 -255
- package/dist/search/reverse-index.js.map +1 -1
- package/dist/sources/unihan-readings.d.ts +58 -0
- package/dist/sources/unihan-readings.d.ts.map +1 -0
- package/dist/sources/unihan-readings.js +95 -0
- package/dist/sources/unihan-readings.js.map +1 -0
- package/dist/sources/unihan.d.ts +6 -9
- package/dist/sources/unihan.d.ts.map +1 -1
- package/dist/sources/unihan.js +2 -85
- package/dist/sources/unihan.js.map +1 -1
- package/dist/syllable/final-tables.d.ts +23 -0
- package/dist/syllable/final-tables.d.ts.map +1 -0
- package/dist/syllable/final-tables.js +50 -0
- package/dist/syllable/final-tables.js.map +1 -0
- package/dist/syllable/inventory.d.ts +8 -42
- package/dist/syllable/inventory.d.ts.map +1 -1
- package/dist/syllable/inventory.js +9 -918
- package/dist/syllable/inventory.js.map +1 -1
- package/dist/syllable/spellings.d.ts +40 -0
- package/dist/syllable/spellings.d.ts.map +1 -0
- package/dist/syllable/spellings.js +469 -0
- package/dist/syllable/spellings.js.map +1 -0
- package/dist/syllable/syllable-parts.d.ts +31 -0
- package/dist/syllable/syllable-parts.d.ts.map +1 -0
- package/dist/syllable/syllable-parts.js +105 -0
- package/dist/syllable/syllable-parts.js.map +1 -0
- package/dist/syllable/syllable.d.ts +1 -14
- package/dist/syllable/syllable.d.ts.map +1 -1
- package/dist/syllable/syllable.js +3 -144
- package/dist/syllable/syllable.js.map +1 -1
- package/dist/syllable/written-tones.d.ts +6 -0
- package/dist/syllable/written-tones.d.ts.map +1 -0
- package/dist/syllable/written-tones.js +453 -0
- package/dist/syllable/written-tones.js.map +1 -0
- package/dist/transcription/bopomofo-parse.d.ts +42 -0
- package/dist/transcription/bopomofo-parse.d.ts.map +1 -0
- package/dist/transcription/bopomofo-parse.js +92 -0
- package/dist/transcription/bopomofo-parse.js.map +1 -0
- package/dist/transcription/bopomofo-reverse.d.ts +31 -0
- package/dist/transcription/bopomofo-reverse.d.ts.map +1 -0
- package/dist/transcription/bopomofo-reverse.js +48 -0
- package/dist/transcription/bopomofo-reverse.js.map +1 -0
- package/dist/transcription/bopomofo-symbols.d.ts +36 -0
- package/dist/transcription/bopomofo-symbols.d.ts.map +1 -0
- package/dist/transcription/bopomofo-symbols.js +41 -0
- package/dist/transcription/bopomofo-symbols.js.map +1 -0
- package/dist/transcription/bopomofo-tables.d.ts +87 -0
- package/dist/transcription/bopomofo-tables.d.ts.map +1 -0
- package/dist/transcription/bopomofo-tables.js +180 -0
- package/dist/transcription/bopomofo-tables.js.map +1 -0
- package/dist/transcription/bopomofo.d.ts +14 -32
- package/dist/transcription/bopomofo.d.ts.map +1 -1
- package/dist/transcription/bopomofo.js +5 -343
- package/dist/transcription/bopomofo.js.map +1 -1
- package/dist/transcription/gwoyeu-first-second.d.ts +36 -0
- package/dist/transcription/gwoyeu-first-second.d.ts.map +1 -0
- package/dist/transcription/gwoyeu-first-second.js +75 -0
- package/dist/transcription/gwoyeu-first-second.js.map +1 -0
- package/dist/transcription/gwoyeu-spelling.d.ts +38 -0
- package/dist/transcription/gwoyeu-spelling.d.ts.map +1 -0
- package/dist/transcription/gwoyeu-spelling.js +124 -0
- package/dist/transcription/gwoyeu-spelling.js.map +1 -0
- package/dist/transcription/gwoyeu-tables.d.ts +93 -0
- package/dist/transcription/gwoyeu-tables.d.ts.map +1 -0
- package/dist/transcription/gwoyeu-tables.js +205 -0
- package/dist/transcription/gwoyeu-tables.js.map +1 -0
- package/dist/transcription/gwoyeu-tonal-forms.d.ts +49 -0
- package/dist/transcription/gwoyeu-tonal-forms.d.ts.map +1 -0
- package/dist/transcription/gwoyeu-tonal-forms.js +89 -0
- package/dist/transcription/gwoyeu-tonal-forms.js.map +1 -0
- package/dist/transcription/gwoyeu-vowels.d.ts +51 -0
- package/dist/transcription/gwoyeu-vowels.d.ts.map +1 -0
- package/dist/transcription/gwoyeu-vowels.js +58 -0
- package/dist/transcription/gwoyeu-vowels.js.map +1 -0
- package/dist/transcription/gwoyeu.d.ts +1 -26
- package/dist/transcription/gwoyeu.d.ts.map +1 -1
- package/dist/transcription/gwoyeu.js +2 -540
- package/dist/transcription/gwoyeu.js.map +1 -1
- package/dist/transcription/ipa-symbols.d.ts +67 -0
- package/dist/transcription/ipa-symbols.d.ts.map +1 -0
- package/dist/transcription/ipa-symbols.js +135 -0
- package/dist/transcription/ipa-symbols.js.map +1 -0
- package/dist/transcription/ipa.d.ts +2 -10
- package/dist/transcription/ipa.d.ts.map +1 -1
- package/dist/transcription/ipa.js +2 -134
- package/dist/transcription/ipa.js.map +1 -1
- package/dist/transcription/wade-giles-index.d.ts +35 -0
- package/dist/transcription/wade-giles-index.d.ts.map +1 -0
- package/dist/transcription/wade-giles-index.js +110 -0
- package/dist/transcription/wade-giles-index.js.map +1 -0
- package/dist/transcription/wade-giles-parse.d.ts +36 -0
- package/dist/transcription/wade-giles-parse.d.ts.map +1 -0
- package/dist/transcription/wade-giles-parse.js +84 -0
- package/dist/transcription/wade-giles-parse.js.map +1 -0
- package/dist/transcription/wade-giles-spelling.d.ts +61 -0
- package/dist/transcription/wade-giles-spelling.d.ts.map +1 -0
- package/dist/transcription/wade-giles-spelling.js +107 -0
- package/dist/transcription/wade-giles-spelling.js.map +1 -0
- package/dist/transcription/wade-giles-syllable.d.ts +29 -0
- package/dist/transcription/wade-giles-syllable.d.ts.map +1 -0
- package/dist/transcription/wade-giles-syllable.js +90 -0
- package/dist/transcription/wade-giles-syllable.js.map +1 -0
- package/dist/transcription/wade-giles-tables.d.ts +80 -0
- package/dist/transcription/wade-giles-tables.d.ts.map +1 -0
- package/dist/transcription/wade-giles-tables.js +178 -0
- package/dist/transcription/wade-giles-tables.js.map +1 -0
- package/dist/transcription/wade-giles.d.ts +9 -60
- package/dist/transcription/wade-giles.d.ts.map +1 -1
- package/dist/transcription/wade-giles.js +6 -543
- package/dist/transcription/wade-giles.js.map +1 -1
- package/dist/transcription/yale-tables.d.ts +54 -0
- package/dist/transcription/yale-tables.d.ts.map +1 -0
- package/dist/transcription/yale-tables.js +125 -0
- package/dist/transcription/yale-tables.js.map +1 -0
- package/dist/transcription/yale.d.ts.map +1 -1
- package/dist/transcription/yale.js +1 -124
- package/dist/transcription/yale.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,346 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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":"
|
|
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":"AAOA,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE3E;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,OAAgB;IACtD,OAAO,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC;QACnC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;QACxC,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,MAAM,CAAC,IAAY;IACjC,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI;QAC5B,CAAC,GAAG,EAAE,GAAG,CAAC;QACV,CAAC,GAAG,EAAE,GAAG,CAAC;KACF,EAAE,CAAC;QACX,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAChC,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAChC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACtE,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,OAAgB;IACvD,IAAI,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;AAC5D,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,MAAM,KAAK,GACT;QACE,CAAC,GAAG,EAAE,GAAG,CAAC;QACV,CAAC,GAAG,EAAE,GAAG,CAAC;KAEb;SACE,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,CAAU,CAAC;SAC9D,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;SAC3B,QAAQ,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;IACzB,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3B,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,MAAM,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,CAAC;IACpD,OAAO,QAAQ,IAAI,CAAC,SAAS;QAC3B,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;QACpD,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC"}
|
|
@@ -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
|