@kensio/pinyinjs 1.7.3 → 1.7.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +2 -2
package/dist/decode/script.d.ts
CHANGED
|
@@ -1,77 +1,7 @@
|
|
|
1
1
|
import type { Dictionary } from "../dictionary/dictionary.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
* A script and, for 繁體, a regional orthography, as a BCP-47 tag.
|
|
6
|
-
*
|
|
7
|
-
* BCP-47 rather than a shape of our own because these subtags already mean
|
|
8
|
-
* exactly this, and callers recognise them. `zh-Hant` alone takes
|
|
9
|
-
* {@link DEFAULT_REGION}, since there is no region-free 繁體 to fall back on —
|
|
10
|
-
* see SCRIPTS-AND-LOCALES.md.
|
|
11
|
-
*/
|
|
12
|
-
export declare const SCRIPT_TARGETS: readonly ["zh-Hans", "zh-Hant", "zh-Hant-TW", "zh-Hant-HK"];
|
|
13
|
-
/**
|
|
14
|
-
* One of the orthographies {@link toScript} writes.
|
|
15
|
-
*/
|
|
16
|
-
export type ScriptTarget = (typeof SCRIPT_TARGETS)[number];
|
|
17
|
-
/**
|
|
18
|
-
* How a script conversion should be carried out.
|
|
19
|
-
*/
|
|
20
|
-
export interface ScriptOptions {
|
|
21
|
-
/** Which orthography to write. Defaults to `zh-Hans`. */
|
|
22
|
-
readonly to?: ScriptTarget;
|
|
23
|
-
/**
|
|
24
|
-
* The script the text is written in. Detected when not given.
|
|
25
|
-
*
|
|
26
|
-
* Worth setting when the text is short enough that detection has nothing to
|
|
27
|
-
* go on — a run of characters both scripts share settles nothing, and the
|
|
28
|
-
* conversion then assumes the text needs converting.
|
|
29
|
-
*/
|
|
30
|
-
readonly from?: Script;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* What settled one character's conversion, strongest first.
|
|
34
|
-
*
|
|
35
|
-
* - `locked` — the character has one form and there was nothing to decide.
|
|
36
|
-
* True of the great majority: simplification changed a minority of
|
|
37
|
-
* characters, and most of those are one-to-one.
|
|
38
|
-
* - `word` — a word some source wrote in both scripts settled it. The strongest
|
|
39
|
-
* real evidence, because it was written rather than inferred.
|
|
40
|
-
* - `reading` — the character had rival forms and the syllable it was decoded
|
|
41
|
-
* as picked between them. This is the evidence an orthographic converter does
|
|
42
|
-
* not have.
|
|
43
|
-
* - `default` — rival forms existed and nothing separated them, so the
|
|
44
|
-
* commonest was taken. The only one of the four that is a guess.
|
|
45
|
-
*/
|
|
46
|
-
export declare const SCRIPT_EVIDENCE: readonly ["locked", "word", "reading", "default"];
|
|
47
|
-
/**
|
|
48
|
-
* What settled one character's conversion.
|
|
49
|
-
*/
|
|
50
|
-
export type ScriptEvidence = (typeof SCRIPT_EVIDENCE)[number];
|
|
51
|
-
/**
|
|
52
|
-
* Why one character came out as it did.
|
|
53
|
-
*
|
|
54
|
-
* The same kind of claim `ReadingConfidence` makes about a syllable, and for
|
|
55
|
-
* the same reason: a conversion that cannot say which characters it guessed at
|
|
56
|
-
* is asking to be trusted further than it deserves. Nothing else in this space
|
|
57
|
-
* reports it.
|
|
58
|
-
*/
|
|
59
|
-
export interface ScriptChoice {
|
|
60
|
-
/** The character as it was written. */
|
|
61
|
-
readonly from: string;
|
|
62
|
-
/** The character as it was converted. */
|
|
63
|
-
readonly to: string;
|
|
64
|
-
readonly evidence: ScriptEvidence;
|
|
65
|
-
/** The forms this character could also have taken. */
|
|
66
|
-
readonly alternatives: readonly string[];
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* A converted text, with an account of every character it was unsure about.
|
|
70
|
-
*/
|
|
71
|
-
export interface ScriptConversion {
|
|
72
|
-
readonly text: string;
|
|
73
|
-
readonly choices: readonly ScriptChoice[];
|
|
74
|
-
}
|
|
2
|
+
import type { ScriptTables } from "../script/conversion.js";
|
|
3
|
+
import type { ScriptChoice, ScriptConversion, ScriptOptions } from "./script-types.js";
|
|
4
|
+
export { SCRIPT_EVIDENCE, type ScriptChoice, type ScriptConversion, type ScriptEvidence, type ScriptOptions, SCRIPT_TARGETS, type ScriptTarget, } from "./script-types.js";
|
|
75
5
|
/**
|
|
76
6
|
* Convert a text between the scripts, reporting what it was unsure about.
|
|
77
7
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"script.d.ts","sourceRoot":"","sources":["../../src/decode/script.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,
|
|
1
|
+
{"version":3,"file":"script.d.ts","sourceRoot":"","sources":["../../src/decode/script.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAQ5D,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACd,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,eAAe,EACf,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,cAAc,EACd,KAAK,YAAY,GAClB,MAAM,mBAAmB,CAAC;AAC3B;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,aAAkB,GAC1B,gBAAgB,CA0ClB;AAeD;;GAEG;AACH,wBAAgB,QAAQ,CACtB,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,aAAkB,GAC1B,MAAM,CAER;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAE/D"}
|
package/dist/decode/script.js
CHANGED
|
@@ -1,117 +1,11 @@
|
|
|
1
1
|
import { toCharacters } from "../script/characters.js";
|
|
2
|
-
import {
|
|
3
|
-
import { DEFAULT_REGION, isReadingSensitive, toCanonicalGlyphs, toRegionalGlyph, } from "../script/glyphs.js";
|
|
2
|
+
import { toCanonicalGlyphs } from "../script/glyphs.js";
|
|
4
3
|
import { detectScript } from "../script/script.js";
|
|
5
4
|
import { decodeRun } from "./decode.js";
|
|
6
5
|
import { READING_RULES } from "./reading-rules.js";
|
|
7
6
|
import { splitRuns } from "./runs.js";
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
*
|
|
11
|
-
* BCP-47 rather than a shape of our own because these subtags already mean
|
|
12
|
-
* exactly this, and callers recognise them. `zh-Hant` alone takes
|
|
13
|
-
* {@link DEFAULT_REGION}, since there is no region-free 繁體 to fall back on —
|
|
14
|
-
* see SCRIPTS-AND-LOCALES.md.
|
|
15
|
-
*/
|
|
16
|
-
export const SCRIPT_TARGETS = [
|
|
17
|
-
"zh-Hans",
|
|
18
|
-
"zh-Hant",
|
|
19
|
-
"zh-Hant-TW",
|
|
20
|
-
"zh-Hant-HK",
|
|
21
|
-
];
|
|
22
|
-
/**
|
|
23
|
-
* What settled one character's conversion, strongest first.
|
|
24
|
-
*
|
|
25
|
-
* - `locked` — the character has one form and there was nothing to decide.
|
|
26
|
-
* True of the great majority: simplification changed a minority of
|
|
27
|
-
* characters, and most of those are one-to-one.
|
|
28
|
-
* - `word` — a word some source wrote in both scripts settled it. The strongest
|
|
29
|
-
* real evidence, because it was written rather than inferred.
|
|
30
|
-
* - `reading` — the character had rival forms and the syllable it was decoded
|
|
31
|
-
* as picked between them. This is the evidence an orthographic converter does
|
|
32
|
-
* not have.
|
|
33
|
-
* - `default` — rival forms existed and nothing separated them, so the
|
|
34
|
-
* commonest was taken. The only one of the four that is a guess.
|
|
35
|
-
*/
|
|
36
|
-
export const SCRIPT_EVIDENCE = [
|
|
37
|
-
"locked",
|
|
38
|
-
"word",
|
|
39
|
-
"reading",
|
|
40
|
-
"default",
|
|
41
|
-
];
|
|
42
|
-
/**
|
|
43
|
-
* The script and region a target names.
|
|
44
|
-
*/
|
|
45
|
-
function targetOf(target) {
|
|
46
|
-
if (target === "zh-Hans") {
|
|
47
|
-
return { script: "Hans", region: DEFAULT_REGION };
|
|
48
|
-
}
|
|
49
|
-
return {
|
|
50
|
-
script: "Hant",
|
|
51
|
-
region: target === "zh-Hant-HK" ? "HK" : DEFAULT_REGION,
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Convert one word, preferring what a source wrote to what its characters imply.
|
|
56
|
-
*/
|
|
57
|
-
function convertWord(table, words, word, reading) {
|
|
58
|
-
const characters = toCharacters(word);
|
|
59
|
-
const attested = words.get(word);
|
|
60
|
-
// A word only counts as attested when it lines up character for character;
|
|
61
|
-
// anything else cannot be reported per character, which is what the choices
|
|
62
|
-
// are. Those are rare enough to fall through to the characters.
|
|
63
|
-
const attestedCharacters = attested === undefined ? undefined : toCharacters(attested);
|
|
64
|
-
const isAttested = attestedCharacters?.length === characters.length;
|
|
65
|
-
// A reading covering a different number of characters than the word has
|
|
66
|
-
// cannot be lined up with them — 儿化 writes two characters as one syllable.
|
|
67
|
-
const isAligned = reading.length === characters.length;
|
|
68
|
-
return characters.map((character, at) => {
|
|
69
|
-
const syllable = isAligned ? reading[at] : undefined;
|
|
70
|
-
const conversion = table.get(character);
|
|
71
|
-
const atReading = conversion?.byReading?.get(conversionKey(syllable));
|
|
72
|
-
const to = isAttested
|
|
73
|
-
? /* c8 ignore next -- the lengths were just checked */
|
|
74
|
-
(attestedCharacters[at] ?? character)
|
|
75
|
-
: convertCharacter(table, character, syllable);
|
|
76
|
-
return {
|
|
77
|
-
from: character,
|
|
78
|
-
to,
|
|
79
|
-
evidence: evidenceFor(isAttested, atReading !== undefined, isAmbiguousCharacter(table, character)),
|
|
80
|
-
alternatives: formsOf(conversion).filter((form) => form !== character && form !== to),
|
|
81
|
-
};
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Rank what settled a character, strongest evidence first.
|
|
86
|
-
*/
|
|
87
|
-
function evidenceFor(isAttested, isAtReading, isAmbiguous) {
|
|
88
|
-
if (!isAmbiguous) {
|
|
89
|
-
return "locked";
|
|
90
|
-
}
|
|
91
|
-
if (isAttested) {
|
|
92
|
-
return "word";
|
|
93
|
-
}
|
|
94
|
-
return isAtReading ? "reading" : "default";
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Apply the regional 繁體 forms, which never change a reading.
|
|
98
|
-
*/
|
|
99
|
-
function applyRegion(choices, reading, region, isAligned) {
|
|
100
|
-
if (region === DEFAULT_REGION) {
|
|
101
|
-
return choices;
|
|
102
|
-
}
|
|
103
|
-
return choices.map((choice, at) => {
|
|
104
|
-
const syllable = isAligned ? reading[at] : undefined;
|
|
105
|
-
// A regional form that needs the reading and has none is a guess, whatever
|
|
106
|
-
// settled the script conversion before it: 著 is 着 or 著 in Hong Kong.
|
|
107
|
-
const isGuess = isReadingSensitive(choice.to) && syllable === undefined;
|
|
108
|
-
return {
|
|
109
|
-
...choice,
|
|
110
|
-
to: toRegionalGlyph(choice.to, region, syllable),
|
|
111
|
-
evidence: isGuess ? "default" : choice.evidence,
|
|
112
|
-
};
|
|
113
|
-
});
|
|
114
|
-
}
|
|
7
|
+
import { applyRegion, convertWord, targetOf } from "./script-words.js";
|
|
8
|
+
export { SCRIPT_EVIDENCE, SCRIPT_TARGETS, } from "./script-types.js";
|
|
115
9
|
/**
|
|
116
10
|
* Convert a text between the scripts, reporting what it was unsure about.
|
|
117
11
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"script.js","sourceRoot":"","sources":["../../src/decode/script.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"script.js","sourceRoot":"","sources":["../../src/decode/script.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { Syllable } from "../syllable/syllable.js";
|
|
2
|
+
import type { EdgeContext, EdgeRule } from "./rules.js";
|
|
3
|
+
/**
|
|
4
|
+
* Whether a syllable is `tán`, the verbal reading of 弹.
|
|
5
|
+
*/
|
|
6
|
+
export declare function isTan(syllable: Syllable | undefined): boolean;
|
|
7
|
+
/**
|
|
8
|
+
* The character in both scripts, since 彈 is not the shape 弹 is.
|
|
9
|
+
*
|
|
10
|
+
* 得, 教 and 儿 are the same character in either script and need say it once.
|
|
11
|
+
* This one is not, and neither is the 长 above, which is silent on 長 as a
|
|
12
|
+
* result. {@link ASPECT} carries 過 and 著 for the same reason this carries 彈.
|
|
13
|
+
*/
|
|
14
|
+
export declare const PLUCKED: Set<string>;
|
|
15
|
+
/**
|
|
16
|
+
* Whether the character at a position is 弹, in either script.
|
|
17
|
+
*/
|
|
18
|
+
export declare function isPluckedAt(context: EdgeContext, at: number): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* What a 弹 that is playing governs: the instrument, the piece or its composer.
|
|
21
|
+
*
|
|
22
|
+
* 弹吉他, 弹竖琴, 弹肖邦, 弹一曲, 给我们弹一手. The name tags are in because
|
|
23
|
+
* jieba calls 吉他 `ns` and 管风琴, 班卓琴 and 古琴 `nr` — instruments read as
|
|
24
|
+
* places and people — and `m` because a piece is as often counted as named.
|
|
25
|
+
*/
|
|
26
|
+
export declare const PLAYED_TAGS: Set<string>;
|
|
27
|
+
/**
|
|
28
|
+
* 弹 read as `tán` where it is playing rather than a projectile.
|
|
29
|
+
*
|
|
30
|
+
* The character is stored `dàn` with `tán` as an alternate, and the sources are
|
|
31
|
+
* agreed about it: Unihan's `kHanyuPinlu` counts `dàn(313)` against `tán(50)`
|
|
32
|
+
* and `kMandarin` names `dàn`. That is a fact about a corpus in which nearly
|
|
33
|
+
* every 弹 is ammunition — 子弹, 炮弹, 导弹, 原子弹, 手榴弹 — and every one of
|
|
34
|
+
* those is a word that carries its own reading. What the default is left
|
|
35
|
+
* deciding is the 弹 that stands as a word of its own, and in running text that
|
|
36
|
+
* one is the verb: 他会弹一点儿古筝 came out `dàn`, and 弹吉他, 弹竖琴, 我在弹肖邦
|
|
37
|
+
* and 他钢琴弹得很好 with it.
|
|
38
|
+
*
|
|
39
|
+
* See {@link isPlayingAt} for what decides it. Forcing the single-character
|
|
40
|
+
* edge is not enough on its own, for the reason {@link TEACHING_JIAO} gives: a
|
|
41
|
+
* reading spanning two characters carries its own 弹 into the position, and
|
|
42
|
+
* 我的爱好是开车和弹吉他 read `dàn` off 和弹, a pair the dictionary holds with
|
|
43
|
+
* no part of speech and at the cost of a reading nobody counted. A *tagged*
|
|
44
|
+
* word ending in 弹 is left alone, which is every one that matters — 子弹, 炸弹,
|
|
45
|
+
* 导弹, 反弹, 手榴弹. Nothing has to be done about the other side, since the
|
|
46
|
+
* nominal compounds starting with 弹 are all listed: 弹匣, 弹坑, 弹壳, 弹片,
|
|
47
|
+
* 弹药, 弹道 and 弹头 reach their reading through the word, so a bare 弹 with a
|
|
48
|
+
* noun after it is not the front of one that got away.
|
|
49
|
+
*
|
|
50
|
+
* The 88,866 lines of Tatoeba and zh.wikipedia the other rules were sized
|
|
51
|
+
* against are the wrong corpus for this one on their own: 38 弹 decode as a
|
|
52
|
+
* word of their own in them, and 31 are somebody playing something. So CPP's
|
|
53
|
+
* 20,147 sentences are measured with them as plain text — the benchmark is
|
|
54
|
+
* drawn from zh.wikipedia's military articles, which is precisely where the
|
|
55
|
+
* shapes this rule can break live. Over the 109,013 lines together, 60 弹
|
|
56
|
+
* decode as a word of their own, every one read `dàn`, and 34 of the 60 are
|
|
57
|
+
* wrong.
|
|
58
|
+
*
|
|
59
|
+
* This moves 30 of them, of which 29 are right: the whole of 弹吉他, 弹一曲肖邦
|
|
60
|
+
* and 钢琴弹得很好, and none of 南部弹, 毛瑟弹, 掷弹兵, 供弹爪, 着弹点, 弹洞 or
|
|
61
|
+
* 底排弹时. The one it breaks is 拆弹专家, where a compound has an object's
|
|
62
|
+
* shape on both sides. Five it leaves alone: 开始弹, 四手联弹 and 弹起三次, which
|
|
63
|
+
* have no object to see, 用那种指法弹不会觉得费力, and 反手持法去弹班卓琴, where
|
|
64
|
+
* the decode reaches 班 rather than 班卓琴. On CPP's 40 labelled 弹 nothing
|
|
65
|
+
* moves at all, every one of them having been right through a word.
|
|
66
|
+
*/
|
|
67
|
+
export declare const PLAYING_TAN: EdgeRule;
|
|
68
|
+
//# sourceMappingURL=tan-rule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tan-rule.d.ts","sourceRoot":"","sources":["../../src/decode/tan-rule.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAQxD,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAExD;;GAEG;AACH,wBAAgB,KAAK,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,CAI7D;AAED;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,aAAsB,CAAC;AAE3C;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAErE;AAED;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,aAAoD,CAAC;AAwC7E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,eAAO,MAAM,WAAW,EAAE,QAiBzB,CAAC"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether a 弹 is plucked or is a bullet.
|
|
3
|
+
*
|
|
4
|
+
* The two readings are a verb and a noun, so what settles it is what the word
|
|
5
|
+
* beside it is doing rather than what the character is.
|
|
6
|
+
*/
|
|
7
|
+
import { toCharacters } from "../script/characters.js";
|
|
8
|
+
import { ASPECT, PARTICLE_TAG, tagOf, wordEndingAt, wordStartingAt, } from "./edge-context.js";
|
|
9
|
+
/**
|
|
10
|
+
* Whether a syllable is `tán`, the verbal reading of 弹.
|
|
11
|
+
*/
|
|
12
|
+
export function isTan(syllable) {
|
|
13
|
+
return (syllable?.initial === "t" && syllable.final === "an" && syllable.tone === 2);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* The character in both scripts, since 彈 is not the shape 弹 is.
|
|
17
|
+
*
|
|
18
|
+
* 得, 教 and 儿 are the same character in either script and need say it once.
|
|
19
|
+
* This one is not, and neither is the 长 above, which is silent on 長 as a
|
|
20
|
+
* result. {@link ASPECT} carries 過 and 著 for the same reason this carries 彈.
|
|
21
|
+
*/
|
|
22
|
+
export const PLUCKED = new Set(["弹", "彈"]);
|
|
23
|
+
/**
|
|
24
|
+
* Whether the character at a position is 弹, in either script.
|
|
25
|
+
*/
|
|
26
|
+
export function isPluckedAt(context, at) {
|
|
27
|
+
return PLUCKED.has(context.characters[at] ?? "");
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* What a 弹 that is playing governs: the instrument, the piece or its composer.
|
|
31
|
+
*
|
|
32
|
+
* 弹吉他, 弹竖琴, 弹肖邦, 弹一曲, 给我们弹一手. The name tags are in because
|
|
33
|
+
* jieba calls 吉他 `ns` and 管风琴, 班卓琴 and 古琴 `nr` — instruments read as
|
|
34
|
+
* places and people — and `m` because a piece is as often counted as named.
|
|
35
|
+
*/
|
|
36
|
+
export const PLAYED_TAGS = new Set(["n", "nz", "nr", "ns", "nt", "ng", "m"]);
|
|
37
|
+
/**
|
|
38
|
+
* Whether a word is an object rather than the far half of a compound.
|
|
39
|
+
*
|
|
40
|
+
* The one place this rule departs from {@link isTeachingAt}, and it is what
|
|
41
|
+
* makes it usable on technical prose. 弹 joins bound morphemes into nouns far
|
|
42
|
+
* more readily than 教 does — 着弹点, 掷弹兵, 供弹爪, 底排弹时, 弹洞 — and every
|
|
43
|
+
* one of those puts a single tagged character after the 弹 where an object
|
|
44
|
+
* would go. What the verb actually governs is a word: 吉他, 竖琴, 管风琴, 电子琴,
|
|
45
|
+
* 一曲, 肖邦. Requiring two characters keeps the compounds out at the cost of
|
|
46
|
+
* 反手持法去弹班卓琴, where the decode reaches 班 rather than 班卓琴 anyway.
|
|
47
|
+
*
|
|
48
|
+
* 教 could not take the same guard, since 教我 and 教你 are the commonest shape
|
|
49
|
+
* it has. Nobody plays a pronoun, so `r` is out of {@link PLAYED_TAGS} too.
|
|
50
|
+
*/
|
|
51
|
+
function isPlayedObject(word) {
|
|
52
|
+
return word !== undefined && toCharacters(word).length > 1;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Whether the 弹 at a position is playing something.
|
|
56
|
+
*
|
|
57
|
+
* Much the same shape as {@link isTeachingAt}, and for the same reason: the
|
|
58
|
+
* object is what says so. A 弹 with an instrument, a tune or a name after it is
|
|
59
|
+
* governing it, and a 弹 with 了, 过, 着 or 得 after it is a verb whatever
|
|
60
|
+
* follows that. A particle in front of it rules it out, since a verb does not
|
|
61
|
+
* follow one.
|
|
62
|
+
*/
|
|
63
|
+
function isPlayingAt(context, at) {
|
|
64
|
+
if (tagOf(context, wordEndingAt(context, at)).startsWith(PARTICLE_TAG)) {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
if (ASPECT.has(context.characters[at + 1] ?? "")) {
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
const played = wordStartingAt(context, at + 1);
|
|
71
|
+
return isPlayedObject(played) && PLAYED_TAGS.has(tagOf(context, played));
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* 弹 read as `tán` where it is playing rather than a projectile.
|
|
75
|
+
*
|
|
76
|
+
* The character is stored `dàn` with `tán` as an alternate, and the sources are
|
|
77
|
+
* agreed about it: Unihan's `kHanyuPinlu` counts `dàn(313)` against `tán(50)`
|
|
78
|
+
* and `kMandarin` names `dàn`. That is a fact about a corpus in which nearly
|
|
79
|
+
* every 弹 is ammunition — 子弹, 炮弹, 导弹, 原子弹, 手榴弹 — and every one of
|
|
80
|
+
* those is a word that carries its own reading. What the default is left
|
|
81
|
+
* deciding is the 弹 that stands as a word of its own, and in running text that
|
|
82
|
+
* one is the verb: 他会弹一点儿古筝 came out `dàn`, and 弹吉他, 弹竖琴, 我在弹肖邦
|
|
83
|
+
* and 他钢琴弹得很好 with it.
|
|
84
|
+
*
|
|
85
|
+
* See {@link isPlayingAt} for what decides it. Forcing the single-character
|
|
86
|
+
* edge is not enough on its own, for the reason {@link TEACHING_JIAO} gives: a
|
|
87
|
+
* reading spanning two characters carries its own 弹 into the position, and
|
|
88
|
+
* 我的爱好是开车和弹吉他 read `dàn` off 和弹, a pair the dictionary holds with
|
|
89
|
+
* no part of speech and at the cost of a reading nobody counted. A *tagged*
|
|
90
|
+
* word ending in 弹 is left alone, which is every one that matters — 子弹, 炸弹,
|
|
91
|
+
* 导弹, 反弹, 手榴弹. Nothing has to be done about the other side, since the
|
|
92
|
+
* nominal compounds starting with 弹 are all listed: 弹匣, 弹坑, 弹壳, 弹片,
|
|
93
|
+
* 弹药, 弹道 and 弹头 reach their reading through the word, so a bare 弹 with a
|
|
94
|
+
* noun after it is not the front of one that got away.
|
|
95
|
+
*
|
|
96
|
+
* The 88,866 lines of Tatoeba and zh.wikipedia the other rules were sized
|
|
97
|
+
* against are the wrong corpus for this one on their own: 38 弹 decode as a
|
|
98
|
+
* word of their own in them, and 31 are somebody playing something. So CPP's
|
|
99
|
+
* 20,147 sentences are measured with them as plain text — the benchmark is
|
|
100
|
+
* drawn from zh.wikipedia's military articles, which is precisely where the
|
|
101
|
+
* shapes this rule can break live. Over the 109,013 lines together, 60 弹
|
|
102
|
+
* decode as a word of their own, every one read `dàn`, and 34 of the 60 are
|
|
103
|
+
* wrong.
|
|
104
|
+
*
|
|
105
|
+
* This moves 30 of them, of which 29 are right: the whole of 弹吉他, 弹一曲肖邦
|
|
106
|
+
* and 钢琴弹得很好, and none of 南部弹, 毛瑟弹, 掷弹兵, 供弹爪, 着弹点, 弹洞 or
|
|
107
|
+
* 底排弹时. The one it breaks is 拆弹专家, where a compound has an object's
|
|
108
|
+
* shape on both sides. Five it leaves alone: 开始弹, 四手联弹 and 弹起三次, which
|
|
109
|
+
* have no object to see, 用那种指法弹不会觉得费力, and 反手持法去弹班卓琴, where
|
|
110
|
+
* the decode reaches 班 rather than 班卓琴. On CPP's 40 labelled 弹 nothing
|
|
111
|
+
* moves at all, every one of them having been right through a word.
|
|
112
|
+
*/
|
|
113
|
+
export const PLAYING_TAN = {
|
|
114
|
+
name: "playing-tan",
|
|
115
|
+
verdictFor: (context) => {
|
|
116
|
+
const { edge } = context;
|
|
117
|
+
if (PLUCKED.has(edge.text)) {
|
|
118
|
+
return isTan(edge.reading[0]) && isPlayingAt(context, edge.from)
|
|
119
|
+
? "force"
|
|
120
|
+
: "keep";
|
|
121
|
+
}
|
|
122
|
+
return edge.partOfSpeech === "" &&
|
|
123
|
+
isPluckedAt(context, edge.to - 1) &&
|
|
124
|
+
edge.reading.length === edge.to - edge.from &&
|
|
125
|
+
!isTan(edge.reading.at(-1)) &&
|
|
126
|
+
isPlayingAt(context, edge.to - 1)
|
|
127
|
+
? "forbid"
|
|
128
|
+
: "keep";
|
|
129
|
+
},
|
|
130
|
+
};
|
|
131
|
+
//# sourceMappingURL=tan-rule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tan-rule.js","sourceRoot":"","sources":["../../src/decode/tan-rule.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Writing one decoded Han run out as pieces.
|
|
3
|
+
*
|
|
4
|
+
* Sandhi runs across the whole run rather than within a word, and 分词连写
|
|
5
|
+
* rewrites the word boundaries without touching the readings, so both happen
|
|
6
|
+
* here rather than per word.
|
|
7
|
+
*/
|
|
8
|
+
import type { Dictionary } from "../dictionary/dictionary.js";
|
|
9
|
+
import type { Locale } from "../script/script.js";
|
|
10
|
+
import { type SandhiOptions } from "./sandhi.js";
|
|
11
|
+
import type { ScoredWord } from "./word.js";
|
|
12
|
+
import { type ConvertedPiece, type Written } from "./pieces.js";
|
|
13
|
+
/**
|
|
14
|
+
* Write one Han run's worth of decoded words.
|
|
15
|
+
*/
|
|
16
|
+
export declare function writeRun(dictionary: Dictionary, words: readonly ScoredWord[], locale: Locale, written: Written, sandhi: SandhiOptions | undefined): readonly ConvertedPiece[];
|
|
17
|
+
/**
|
|
18
|
+
* Rewrite every piece's text with a pass that reads across all of them.
|
|
19
|
+
*/
|
|
20
|
+
export declare function rewrite(pieces: readonly ConvertedPiece[], pass: (parts: readonly string[]) => readonly string[]): readonly ConvertedPiece[];
|
|
21
|
+
/**
|
|
22
|
+
* The words a Han run decodes to, with 分词连写 applied.
|
|
23
|
+
*
|
|
24
|
+
* Grouping rewrites word boundaries and never the readings behind them, so the
|
|
25
|
+
* syllables — and the confidence beside them — survive it in order.
|
|
26
|
+
*/
|
|
27
|
+
export declare function wordsOf(decoded: readonly ScoredWord[], dictionary: Dictionary, isGrouped: boolean): readonly ScoredWord[];
|
|
28
|
+
//# sourceMappingURL=write-run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-run.d.ts","sourceRoot":"","sources":["../../src/decode/write-run.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAe,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,KAAK,EAAe,UAAU,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EACL,KAAK,cAAc,EAInB,KAAK,OAAO,EACb,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,wBAAgB,QAAQ,CACtB,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,SAAS,UAAU,EAAE,EAC5B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,aAAa,GAAG,SAAS,GAChC,SAAS,cAAc,EAAE,CA0C3B;AAED;;GAEG;AACH,wBAAgB,OAAO,CACrB,MAAM,EAAE,SAAS,cAAc,EAAE,EACjC,IAAI,EAAE,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,KAAK,SAAS,MAAM,EAAE,GACpD,SAAS,cAAc,EAAE,CAO3B;AAED;;;;;GAKG;AACH,wBAAgB,OAAO,CACrB,OAAO,EAAE,SAAS,UAAU,EAAE,EAC9B,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,OAAO,GACjB,SAAS,UAAU,EAAE,CAUvB"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { applyGrouping } from "../orthography/grouping.js";
|
|
2
|
+
import { divisionOf } from "./constituents.js";
|
|
3
|
+
import { applySandhi } from "./sandhi.js";
|
|
4
|
+
import { plainPiece, readingFor, writeWord, } from "./pieces.js";
|
|
5
|
+
/**
|
|
6
|
+
* Write one Han run's worth of decoded words.
|
|
7
|
+
*/
|
|
8
|
+
export function writeRun(dictionary, words, locale, written, sandhi) {
|
|
9
|
+
// Sandhi runs across the whole run rather than within a word, since 不 in one
|
|
10
|
+
// word assimilates to the tone starting the next. Third-tone sandhi needs to
|
|
11
|
+
// know where the words are all the same, so the grouping goes with it — and
|
|
12
|
+
// only when it is asked for, since dividing a word costs lookups.
|
|
13
|
+
const readings = words.map((scored) => readingFor(dictionary, scored.word, locale));
|
|
14
|
+
const grouping = sandhi?.thirdTone === true
|
|
15
|
+
? words.map((scored, index) => {
|
|
16
|
+
const reading = readings[index] ?? [];
|
|
17
|
+
return (divisionOf(dictionary, scored.word.text, reading) ?? reading.length);
|
|
18
|
+
})
|
|
19
|
+
: undefined;
|
|
20
|
+
const flattened = applySandhi(readings.flat(), sandhi, grouping);
|
|
21
|
+
let at = 0;
|
|
22
|
+
const pieces = [];
|
|
23
|
+
for (const [index, scored] of words.entries()) {
|
|
24
|
+
/* c8 ignore next -- readings is built by mapping over these same words */
|
|
25
|
+
const length = readings[index]?.length ?? 0;
|
|
26
|
+
if (index > 0) {
|
|
27
|
+
// A space, unless 分词连写 wrote a hyphen: 干干净净 is one orthographic
|
|
28
|
+
// word, `gāngān-jìngjìng`, cut into two decoded ones.
|
|
29
|
+
pieces.push(plainPiece(scored.word.separator ?? " "));
|
|
30
|
+
}
|
|
31
|
+
pieces.push(...writeWord(flattened.slice(at, at + length),
|
|
32
|
+
// A locale reading of a different length cannot be lined up with the
|
|
33
|
+
// confidence reported for the reading it replaced.
|
|
34
|
+
scored.confidence.length === length ? scored.confidence : [], scored.word, written));
|
|
35
|
+
at += length;
|
|
36
|
+
}
|
|
37
|
+
return pieces;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Rewrite every piece's text with a pass that reads across all of them.
|
|
41
|
+
*/
|
|
42
|
+
export function rewrite(pieces, pass) {
|
|
43
|
+
const rewritten = pass(pieces.map((piece) => piece.text));
|
|
44
|
+
return pieces.map((piece, at) => {
|
|
45
|
+
/* c8 ignore next -- one part comes back for each part handed over */
|
|
46
|
+
const text = rewritten[at] ?? piece.text;
|
|
47
|
+
return text === piece.text ? piece : { ...piece, text };
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* The words a Han run decodes to, with 分词连写 applied.
|
|
52
|
+
*
|
|
53
|
+
* Grouping rewrites word boundaries and never the readings behind them, so the
|
|
54
|
+
* syllables — and the confidence beside them — survive it in order.
|
|
55
|
+
*/
|
|
56
|
+
export function wordsOf(decoded, dictionary, isGrouped) {
|
|
57
|
+
return isGrouped
|
|
58
|
+
? regroup(decoded, applyGrouping(decoded.map((scored) => scored.word), dictionary))
|
|
59
|
+
: decoded;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Redistribute the decode's per-syllable confidence over regrouped words.
|
|
63
|
+
*
|
|
64
|
+
* 分词连写 moves word boundaries — 看 and 了 become 看了 — without touching a
|
|
65
|
+
* reading, so the run's syllables are the same syllables in the same order and
|
|
66
|
+
* are simply cut in different places.
|
|
67
|
+
*/
|
|
68
|
+
function regroup(decoded, grouped) {
|
|
69
|
+
const confidence = decoded.flatMap((scored) => [...scored.confidence]);
|
|
70
|
+
let at = 0;
|
|
71
|
+
return grouped.map((word) => {
|
|
72
|
+
const held = confidence.slice(at, at + word.reading.length);
|
|
73
|
+
at += word.reading.length;
|
|
74
|
+
return { word, confidence: held };
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=write-run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-run.js","sourceRoot":"","sources":["../../src/decode/write-run.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which entry owns each key, since an entry claims both its scripts.
|
|
3
|
+
*
|
|
4
|
+
* Settled before a single line is written, and separately from writing them,
|
|
5
|
+
* because it is the one place the artifact resolves a disagreement rather than
|
|
6
|
+
* recording one: 发 and 髮 both claim 发 and read it differently, and something
|
|
7
|
+
* has to say which of them the key means.
|
|
8
|
+
*/
|
|
9
|
+
import type { DictionaryEntry } from "./entry.js";
|
|
10
|
+
/**
|
|
11
|
+
* Decide which entry owns each key, since an entry claims both its scripts.
|
|
12
|
+
*
|
|
13
|
+
* Entries overlap: 头 claims 頭 as its 繁體 key, and 頭 is also a character
|
|
14
|
+
* entry of its own. They agree, so the conflict is harmless there — but 发 and
|
|
15
|
+
* 髮 both claim 发, and they emphatically do not agree, one reading `fā` and the
|
|
16
|
+
* other `fà`. The entry whose own headword *is* the key wins, which is what
|
|
17
|
+
* keeps 发 on its own reading rather than the one that reached it sideways.
|
|
18
|
+
*
|
|
19
|
+
* An entry claims every 繁體 spelling a source attests for it, not only the one
|
|
20
|
+
* it stores as {@link DictionaryEntry.hant}: 重复 claims 重複 and 重覆 alike,
|
|
21
|
+
* since a reader typing either expects `chóngfù` rather than the character by
|
|
22
|
+
* character reading a missing key falls back to.
|
|
23
|
+
*/
|
|
24
|
+
export declare function claimKeys(entries: readonly DictionaryEntry[]): ReadonlyMap<string, DictionaryEntry>;
|
|
25
|
+
//# sourceMappingURL=artifact-claims.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-claims.d.ts","sourceRoot":"","sources":["../../src/dictionary/artifact-claims.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAuBlD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,SAAS,CACvB,OAAO,EAAE,SAAS,eAAe,EAAE,GAClC,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAiBtC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { traditionalForms } from "./artifact-format.js";
|
|
2
|
+
/**
|
|
3
|
+
* Let one entry claim each of its 繁體 spellings, where nothing outranks it.
|
|
4
|
+
*
|
|
5
|
+
* A spelling equal to the 简体 headword is already claimed, and a spelling that
|
|
6
|
+
* is some entry's own headword belongs to that entry — 发 and 髮 disagree about
|
|
7
|
+
* the reading, and the one the key names has to win.
|
|
8
|
+
*/
|
|
9
|
+
function claimTraditional(claimed, entry) {
|
|
10
|
+
for (const form of traditionalForms(entry)) {
|
|
11
|
+
const held = claimed.get(form);
|
|
12
|
+
const isTaken = form === entry.hans || held?.hans === form;
|
|
13
|
+
if (!isTaken && (held === undefined || entry.frequency > held.frequency)) {
|
|
14
|
+
claimed.set(form, entry);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Decide which entry owns each key, since an entry claims both its scripts.
|
|
20
|
+
*
|
|
21
|
+
* Entries overlap: 头 claims 頭 as its 繁體 key, and 頭 is also a character
|
|
22
|
+
* entry of its own. They agree, so the conflict is harmless there — but 发 and
|
|
23
|
+
* 髮 both claim 发, and they emphatically do not agree, one reading `fā` and the
|
|
24
|
+
* other `fà`. The entry whose own headword *is* the key wins, which is what
|
|
25
|
+
* keeps 发 on its own reading rather than the one that reached it sideways.
|
|
26
|
+
*
|
|
27
|
+
* An entry claims every 繁體 spelling a source attests for it, not only the one
|
|
28
|
+
* it stores as {@link DictionaryEntry.hant}: 重复 claims 重複 and 重覆 alike,
|
|
29
|
+
* since a reader typing either expects `chóngfù` rather than the character by
|
|
30
|
+
* character reading a missing key falls back to.
|
|
31
|
+
*/
|
|
32
|
+
export function claimKeys(entries) {
|
|
33
|
+
const claimed = new Map();
|
|
34
|
+
// Headwords first, so that the second pass can never displace one: a 繁體
|
|
35
|
+
// alias reaching a key sideways must not outrank the entry that key names.
|
|
36
|
+
for (const entry of entries) {
|
|
37
|
+
const held = claimed.get(entry.hans);
|
|
38
|
+
if (held === undefined || entry.frequency > held.frequency) {
|
|
39
|
+
claimed.set(entry.hans, entry);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
for (const entry of entries) {
|
|
43
|
+
claimTraditional(claimed, entry);
|
|
44
|
+
}
|
|
45
|
+
return claimed;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=artifact-claims.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-claims.js","sourceRoot":"","sources":["../../src/dictionary/artifact-claims.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD;;;;;;GAMG;AACH,SAAS,gBAAgB,CACvB,OAAqC,EACrC,KAAsB;IAEtB,KAAK,MAAM,IAAI,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/B,MAAM,OAAO,GAAG,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;QAC3D,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACzE,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,SAAS,CACvB,OAAmC;IAEnC,MAAM,OAAO,GAAG,IAAI,GAAG,EAA2B,CAAC;IAEnD,wEAAwE;IACxE,2EAA2E;IAC3E,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|