@kensio/pinyinjs 1.7.4 → 1.7.6
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/README.md +128 -123
- package/data/full.entries +2595 -2595
- package/data/manifest.json +5 -5
- package/data/script.map +66 -3
- 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/chang-context.d.ts +27 -0
- package/dist/decode/chang-context.d.ts.map +1 -0
- package/dist/decode/chang-context.js +66 -0
- package/dist/decode/chang-context.js.map +1 -0
- package/dist/decode/chang-rule.d.ts +37 -0
- package/dist/decode/chang-rule.d.ts.map +1 -0
- package/dist/decode/chang-rule.js +169 -0
- package/dist/decode/chang-rule.js.map +1 -0
- package/dist/decode/confidence.d.ts +11 -3
- package/dist/decode/confidence.d.ts.map +1 -1
- package/dist/decode/confidence.js +14 -121
- 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 +67 -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/de-rule.d.ts +54 -0
- package/dist/decode/de-rule.d.ts.map +1 -0
- package/dist/decode/de-rule.js +113 -0
- package/dist/decode/de-rule.js.map +1 -0
- 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 +154 -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 +64 -0
- package/dist/decode/jiao-rule.d.ts.map +1 -0
- package/dist/decode/jiao-rule.js +115 -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 +101 -0
- package/dist/decode/lattice-types.d.ts.map +1 -0
- package/dist/decode/lattice-types.js +63 -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 +11 -0
- package/dist/decode/polyphone-rules.d.ts.map +1 -0
- package/dist/decode/polyphone-rules.js +11 -0
- package/dist/decode/polyphone-rules.js.map +1 -0
- package/dist/decode/reading-rules.d.ts +3 -126
- package/dist/decode/reading-rules.d.ts.map +1 -1
- package/dist/decode/reading-rules.js +8 -434
- 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/run-words.d.ts +17 -0
- package/dist/decode/run-words.d.ts.map +1 -0
- package/dist/decode/run-words.js +29 -0
- package/dist/decode/run-words.js.map +1 -0
- package/dist/decode/sandhi-input.d.ts +30 -0
- package/dist/decode/sandhi-input.d.ts.map +1 -0
- package/dist/decode/sandhi-input.js +35 -0
- package/dist/decode/sandhi-input.js.map +1 -0
- package/dist/decode/sandhi-tones.d.ts +97 -0
- package/dist/decode/sandhi-tones.d.ts.map +1 -0
- package/dist/decode/sandhi-tones.js +139 -0
- package/dist/decode/sandhi-tones.js.map +1 -0
- package/dist/decode/sandhi.d.ts +10 -7
- package/dist/decode/sandhi.d.ts.map +1 -1
- package/dist/decode/sandhi.js +11 -88
- 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 +21 -0
- package/dist/decode/write-run.d.ts.map +1 -0
- package/dist/decode/write-run.js +42 -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 +87 -0
- package/dist/dictionary/cedict-senses.d.ts.map +1 -0
- package/dist/dictionary/cedict-senses.js +126 -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/constituent-repair.d.ts +36 -0
- package/dist/dictionary/constituent-repair.d.ts.map +1 -0
- package/dist/dictionary/constituent-repair.js +117 -0
- package/dist/dictionary/constituent-repair.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 +127 -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-walk.d.ts +27 -0
- package/dist/dictionary/merge-walk.d.ts.map +1 -0
- package/dist/dictionary/merge-walk.js +49 -0
- package/dist/dictionary/merge-walk.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 +32 -725
- 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 +41 -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/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- 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/lattice.js
CHANGED
|
@@ -1,123 +1,7 @@
|
|
|
1
1
|
import { toCharacters } from "../script/characters.js";
|
|
2
2
|
import { applyHints } from "./hints.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
*
|
|
6
|
-
* The prefix check stops a scan long before this in practice; it is a guard
|
|
7
|
-
* against pathological input, not a real limit.
|
|
8
|
-
*/
|
|
9
|
-
const LONGEST_WORD = 16;
|
|
10
|
-
/**
|
|
11
|
-
* What each step down a character's list of readings adds to the edge cost.
|
|
12
|
-
*
|
|
13
|
-
* A character's readings arrive most likely first, and nothing else in the data
|
|
14
|
-
* says how much more likely. One frequency bucket per step is the smallest
|
|
15
|
-
* separation that still ranks them, and it keeps a rare reading of a common
|
|
16
|
-
* character from outbidding a real dictionary word.
|
|
17
|
-
*/
|
|
18
|
-
const ALTERNATE_PENALTY = 1;
|
|
19
|
-
/**
|
|
20
|
-
* What every edge costs the reading decode on top of its word cost.
|
|
21
|
-
*
|
|
22
|
-
* The two decodes want different things, which is the asymmetry ALGORITHM.md
|
|
23
|
-
* builds on. Spacing asks which segmentation the corpus makes likeliest, and
|
|
24
|
-
* `−log P(word)` answers it. Readings ask something else: 地气 is rarer than 地
|
|
25
|
-
* followed by 气, so the unigram model is right to split it and the reading
|
|
26
|
-
* that falls out — `de qì` — is still wrong, because the dictionary states
|
|
27
|
-
* outright that those two characters together read `dì qì`. A stored reading is
|
|
28
|
-
* evidence about the characters; a character's default reading is only a prior.
|
|
29
|
-
*
|
|
30
|
-
* So the reading decode charges per *edge* heavily enough that dictionary
|
|
31
|
-
* evidence outranks frequency: at 16 an attested word always beats splitting it
|
|
32
|
-
* into characters, however common those characters are, since the worst word
|
|
33
|
-
* costs `15 + 16` and the best two-character split costs `0 + 16` twice. Word
|
|
34
|
-
* frequency survives as the tiebreak between paths covering the same span with
|
|
35
|
-
* the same number of words. That ordering — fewest words first, frequency
|
|
36
|
-
* second — is the one ALGORITHM.md already gives its data-free fallback tier.
|
|
37
|
-
*/
|
|
38
|
-
export const READING_CHARGE = 16;
|
|
39
|
-
/**
|
|
40
|
-
* What an edge covering a character no dictionary entry knows costs.
|
|
41
|
-
*
|
|
42
|
-
* Above the worst cost a real entry can carry, so that any known reading is
|
|
43
|
-
* preferred to none.
|
|
44
|
-
*/
|
|
45
|
-
export const UNKNOWN_COST = 32;
|
|
46
|
-
/**
|
|
47
|
-
* The edges leaving a position that come from multi-character dictionary words.
|
|
48
|
-
*
|
|
49
|
-
* Walks one character at a time and stops as soon as the dictionary reports
|
|
50
|
-
* that nothing begins with what has been collected, which is what keeps the
|
|
51
|
-
* scan linear in practice rather than quadratic in the longest key.
|
|
52
|
-
*/
|
|
53
|
-
function wordEdgesAt(dictionary, characters, at) {
|
|
54
|
-
const edges = [];
|
|
55
|
-
let candidate = "";
|
|
56
|
-
for (let length = 0; length < LONGEST_WORD && at + length < characters.length; length++) {
|
|
57
|
-
/* c8 ignore next -- the loop condition keeps the index in range */
|
|
58
|
-
candidate += characters[at + length] ?? "";
|
|
59
|
-
if (!dictionary.hasPrefix(candidate)) {
|
|
60
|
-
break;
|
|
61
|
-
}
|
|
62
|
-
const entry = length === 0 ? undefined : dictionary.lookup(candidate);
|
|
63
|
-
if (entry !== undefined) {
|
|
64
|
-
edges.push({
|
|
65
|
-
from: at,
|
|
66
|
-
to: at + length + 1,
|
|
67
|
-
text: candidate,
|
|
68
|
-
reading: entry.reading,
|
|
69
|
-
cost: entry.cost,
|
|
70
|
-
readingCost: entry.cost + READING_CHARGE,
|
|
71
|
-
isProperNoun: entry.isProperNoun,
|
|
72
|
-
partOfSpeech: entry.partOfSpeech,
|
|
73
|
-
isKnown: true,
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
return edges;
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* The single-character edges leaving a position, one per known reading.
|
|
81
|
-
*
|
|
82
|
-
* Always present, whatever words also start here. Two things depend on that:
|
|
83
|
-
* every position has an outgoing edge, so the lattice is always traversable;
|
|
84
|
-
* and a polyphone offers all of its readings at every position, so scoring has
|
|
85
|
-
* something to choose between rather than only what the word list happens to
|
|
86
|
-
* cover.
|
|
87
|
-
*/
|
|
88
|
-
function characterEdgesAt(dictionary, characters, at) {
|
|
89
|
-
/* c8 ignore next -- callers only ask about positions inside the run */
|
|
90
|
-
const character = characters[at] ?? "";
|
|
91
|
-
const entry = dictionary.lookup(character);
|
|
92
|
-
if (entry === undefined) {
|
|
93
|
-
// A character with no entry at all: keep it, unread, so that the text still
|
|
94
|
-
// round-trips and the failure is visible rather than silent.
|
|
95
|
-
return [
|
|
96
|
-
{
|
|
97
|
-
from: at,
|
|
98
|
-
to: at + 1,
|
|
99
|
-
text: character,
|
|
100
|
-
reading: [],
|
|
101
|
-
cost: UNKNOWN_COST,
|
|
102
|
-
readingCost: UNKNOWN_COST + READING_CHARGE,
|
|
103
|
-
isProperNoun: false,
|
|
104
|
-
partOfSpeech: "",
|
|
105
|
-
isKnown: false,
|
|
106
|
-
},
|
|
107
|
-
];
|
|
108
|
-
}
|
|
109
|
-
return dictionary.readingsOf(character).map((reading, rank) => ({
|
|
110
|
-
from: at,
|
|
111
|
-
to: at + 1,
|
|
112
|
-
text: character,
|
|
113
|
-
reading,
|
|
114
|
-
cost: entry.cost + rank * ALTERNATE_PENALTY,
|
|
115
|
-
readingCost: entry.cost + rank * ALTERNATE_PENALTY + READING_CHARGE,
|
|
116
|
-
isProperNoun: entry.isProperNoun,
|
|
117
|
-
partOfSpeech: entry.partOfSpeech,
|
|
118
|
-
isKnown: true,
|
|
119
|
-
}));
|
|
120
|
-
}
|
|
3
|
+
export { READING_CHARGE, UNKNOWN_COST, } from "./lattice-types.js";
|
|
4
|
+
import { characterEdgesAt, wordEdgesAt } from "./lattice-edges.js";
|
|
121
5
|
/**
|
|
122
6
|
* Build the lattice of every way a Han run could be read.
|
|
123
7
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lattice.js","sourceRoot":"","sources":["../../src/decode/lattice.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"lattice.js","sourceRoot":"","sources":["../../src/decode/lattice.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAsB,MAAM,YAAY,CAAC;AAG5D,OAAO,EAGL,cAAc,EACd,YAAY,GACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEnE;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAC1B,UAAsB,EACtB,GAAW,EACX,KAAqB;IAErB,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,KAAK,GAA+B,EAAE,CAAC;IAE7C,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC;YACT,GAAG,WAAW,CAAC,UAAU,EAAE,UAAU,EAAE,EAAE,CAAC;YAC1C,GAAG,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,EAAE,CAAC;SAChD,CAAC,CAAC;IACL,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IACtC,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACpE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAgB;IACvC,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,SAAS,CAAC,OAAgB;IACxC,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;IACzC,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE7C,2EAA2E;IAC3E,8DAA8D;IAC9D,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACrC,0EAA0E;QAC1E,SAAS,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/D,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;QACpC,mEAAmE;QACnE,QAAQ,IAAI,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Turning one read number into pieces, spaced against what surrounds it.
|
|
3
|
+
*
|
|
4
|
+
* A digit run is said as words and the words are grouped, so the pieces carry
|
|
5
|
+
* both the reading and where the words break — and whether a space belongs
|
|
6
|
+
* between the number and the text beside it.
|
|
7
|
+
*/
|
|
8
|
+
import type { NumeralSegment } from "../numerals/read-numeral.js";
|
|
9
|
+
/**
|
|
10
|
+
* The numbers in a text, said out loud.
|
|
11
|
+
*
|
|
12
|
+
* A digit is not Han and does not reach the decoder, so reading 1998年 as
|
|
13
|
+
* `yī jiǔ jiǔ bā nián` means working out what the run around it says and
|
|
14
|
+
* whether a space belongs between them. That is all this does.
|
|
15
|
+
*/
|
|
16
|
+
import { type Syllable } from "../syllable/syllable.js";
|
|
17
|
+
import { type ApostropheStyle } from "../orthography/apostrophe.js";
|
|
18
|
+
import { type ConvertedPiece, type Written } from "./pieces.js";
|
|
19
|
+
/**
|
|
20
|
+
* Whether a character wants a space between it and a number read out.
|
|
21
|
+
*
|
|
22
|
+
* A letter or a digit does; punctuation does not, so 20%。 keeps its full stop
|
|
23
|
+
* against the number.
|
|
24
|
+
*/
|
|
25
|
+
export declare const WORDLIKE: RegExp;
|
|
26
|
+
/**
|
|
27
|
+
* Whether two stretches take a space between them once one has been read.
|
|
28
|
+
*/
|
|
29
|
+
export declare function isSpaced(before: string, after: string): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Write a run whose words are already known, a word at a time.
|
|
32
|
+
*
|
|
33
|
+
* Each group is one orthographic word and takes the 隔音符号 within itself, so
|
|
34
|
+
* a time's minutes are `sānshí` rather than `sān shí` — the same grouping the
|
|
35
|
+
* number would get if the text had written 6点30分 out in 汉字.
|
|
36
|
+
*/
|
|
37
|
+
export declare function groupedPieces(spelled: readonly string[], said: readonly Syllable[], words: readonly number[], apostrophe: ApostropheStyle): readonly ConvertedPiece[];
|
|
38
|
+
/**
|
|
39
|
+
* Write a number's syllables as the pieces they are written with.
|
|
40
|
+
*
|
|
41
|
+
* A counted number is *one word*, which is what 正词法 6.1.5 asks for: 123 is
|
|
42
|
+
* `yībǎi'èrshísān` and not three words, so the syllables run together and take
|
|
43
|
+
* the 隔音符号 where one is needed. A number read out digit by digit is not a
|
|
44
|
+
* word at all — it is digits — so those are written apart: 1998年 is
|
|
45
|
+
* `yī jiǔ jiǔ bā nián`.
|
|
46
|
+
*/
|
|
47
|
+
export declare function numberPieces(said: readonly Syllable[], segment: NumeralSegment, written: Written): readonly ConvertedPiece[];
|
|
48
|
+
/**
|
|
49
|
+
* Name what a read number is a reading of, once for the whole of it.
|
|
50
|
+
*
|
|
51
|
+
* A number is not read character by character the way a word is: 95% is
|
|
52
|
+
* `bǎifēnzhījiǔshíwǔ` over eight syllables and three written characters, and
|
|
53
|
+
* the order reverses on the way, so no syllable belongs to any one of them.
|
|
54
|
+
* The written form is therefore named once, by the first piece that says
|
|
55
|
+
* anything, and the rest read on into it.
|
|
56
|
+
*/
|
|
57
|
+
export declare function read(pieces: readonly ConvertedPiece[], source: string): readonly ConvertedPiece[];
|
|
58
|
+
/**
|
|
59
|
+
* A stand-in for the pinyin either side of a run, which ends in a letter.
|
|
60
|
+
*/
|
|
61
|
+
export declare function runEdge(isHan: boolean): string;
|
|
62
|
+
//# sourceMappingURL=number-pieces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number-pieces.d.ts","sourceRoot":"","sources":["../../src/decode/number-pieces.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE;;;;;;GAMG;AACH,OAAO,EAAE,KAAK,QAAQ,EAAiB,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,KAAK,eAAe,EAAY,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,KAAK,cAAc,EAAc,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAE5E;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,QAAkB,CAAC;AAExC;;GAEG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAE/D;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,IAAI,EAAE,SAAS,QAAQ,EAAE,EACzB,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,UAAU,EAAE,eAAe,GAC1B,SAAS,cAAc,EAAE,CAmB3B;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,SAAS,QAAQ,EAAE,EACzB,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,OAAO,GACf,SAAS,cAAc,EAAE,CAkC3B;AAED;;;;;;;;GAQG;AACH,wBAAgB,IAAI,CAClB,MAAM,EAAE,SAAS,cAAc,EAAE,EACjC,MAAM,EAAE,MAAM,GACb,SAAS,cAAc,EAAE,CAS3B;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE9C"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The numbers in a text, said out loud.
|
|
3
|
+
*
|
|
4
|
+
* A digit is not Han and does not reach the decoder, so reading 1998年 as
|
|
5
|
+
* `yī jiǔ jiǔ bā nián` means working out what the run around it says and
|
|
6
|
+
* whether a space belongs between them. That is all this does.
|
|
7
|
+
*/
|
|
8
|
+
import { writeSyllable } from "../syllable/syllable.js";
|
|
9
|
+
import { markWord } from "../orthography/apostrophe.js";
|
|
10
|
+
import { plainPiece } from "./pieces.js";
|
|
11
|
+
/**
|
|
12
|
+
* Whether a character wants a space between it and a number read out.
|
|
13
|
+
*
|
|
14
|
+
* A letter or a digit does; punctuation does not, so 20%。 keeps its full stop
|
|
15
|
+
* against the number.
|
|
16
|
+
*/
|
|
17
|
+
export const WORDLIKE = /[\p{L}\p{N}]/u;
|
|
18
|
+
/**
|
|
19
|
+
* Whether two stretches take a space between them once one has been read.
|
|
20
|
+
*/
|
|
21
|
+
export function isSpaced(before, after) {
|
|
22
|
+
return WORDLIKE.test(before.at(-1) ?? "") && WORDLIKE.test(after[0] ?? "");
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Write a run whose words are already known, a word at a time.
|
|
26
|
+
*
|
|
27
|
+
* Each group is one orthographic word and takes the 隔音符号 within itself, so
|
|
28
|
+
* a time's minutes are `sānshí` rather than `sān shí` — the same grouping the
|
|
29
|
+
* number would get if the text had written 6点30分 out in 汉字.
|
|
30
|
+
*/
|
|
31
|
+
export function groupedPieces(spelled, said, words, apostrophe) {
|
|
32
|
+
const pieces = [];
|
|
33
|
+
let at = 0;
|
|
34
|
+
for (const length of words) {
|
|
35
|
+
if (at > 0) {
|
|
36
|
+
pieces.push(plainPiece(" "));
|
|
37
|
+
}
|
|
38
|
+
const group = spelled.slice(at, at + length);
|
|
39
|
+
for (const [index, text] of markWord(group, apostrophe).entries()) {
|
|
40
|
+
pieces.push({
|
|
41
|
+
text,
|
|
42
|
+
syllable: said[at + index],
|
|
43
|
+
confidence: undefined,
|
|
44
|
+
source: undefined,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
at += length;
|
|
48
|
+
}
|
|
49
|
+
return pieces;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Write a number's syllables as the pieces they are written with.
|
|
53
|
+
*
|
|
54
|
+
* A counted number is *one word*, which is what 正词法 6.1.5 asks for: 123 is
|
|
55
|
+
* `yībǎi'èrshísān` and not three words, so the syllables run together and take
|
|
56
|
+
* the 隔音符号 where one is needed. A number read out digit by digit is not a
|
|
57
|
+
* word at all — it is digits — so those are written apart: 1998年 is
|
|
58
|
+
* `yī jiǔ jiǔ bā nián`.
|
|
59
|
+
*/
|
|
60
|
+
export function numberPieces(said, segment, written) {
|
|
61
|
+
const spelled = said.map((syllable) => writeSyllable(syllable, written.notation));
|
|
62
|
+
if (segment.style === "digits") {
|
|
63
|
+
return read(spelled.flatMap((text, at) => [
|
|
64
|
+
...(at === 0 ? [] : [plainPiece(" ")]),
|
|
65
|
+
{ text, syllable: said[at], confidence: undefined, source: undefined },
|
|
66
|
+
]), segment.text);
|
|
67
|
+
}
|
|
68
|
+
const isNumbered = written.notation === "numbers" || written.notation === "superscript";
|
|
69
|
+
const apostrophe = isNumbered ? "never" : written.apostrophe;
|
|
70
|
+
// A run that says where its words break gets them: a time is `liù diǎn
|
|
71
|
+
// sānshí fēn` and a decimal is `qīshíwǔ diǎn wǔ`, each counted part a word
|
|
72
|
+
// of its own and everything after the 点 a digit at a time.
|
|
73
|
+
if (segment.words !== undefined) {
|
|
74
|
+
return read(groupedPieces(spelled, said, segment.words, apostrophe), segment.text);
|
|
75
|
+
}
|
|
76
|
+
return read(markWord(spelled, apostrophe).map((text, at) => ({
|
|
77
|
+
text,
|
|
78
|
+
syllable: said[at],
|
|
79
|
+
confidence: undefined,
|
|
80
|
+
source: undefined,
|
|
81
|
+
})), segment.text);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Name what a read number is a reading of, once for the whole of it.
|
|
85
|
+
*
|
|
86
|
+
* A number is not read character by character the way a word is: 95% is
|
|
87
|
+
* `bǎifēnzhījiǔshíwǔ` over eight syllables and three written characters, and
|
|
88
|
+
* the order reverses on the way, so no syllable belongs to any one of them.
|
|
89
|
+
* The written form is therefore named once, by the first piece that says
|
|
90
|
+
* anything, and the rest read on into it.
|
|
91
|
+
*/
|
|
92
|
+
export function read(pieces, source) {
|
|
93
|
+
const first = pieces.findIndex((piece) => piece.syllable !== undefined);
|
|
94
|
+
/* c8 ignore next 3 -- a read number has at least one syllable in it */
|
|
95
|
+
if (first === -1) {
|
|
96
|
+
return pieces;
|
|
97
|
+
}
|
|
98
|
+
return pieces.map((piece, at) => at === first ? { ...piece, source } : piece);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* A stand-in for the pinyin either side of a run, which ends in a letter.
|
|
102
|
+
*/
|
|
103
|
+
export function runEdge(isHan) {
|
|
104
|
+
return isHan ? "a" : "";
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=number-pieces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number-pieces.js","sourceRoot":"","sources":["../../src/decode/number-pieces.ts"],"names":[],"mappings":"AAQA;;;;;;GAMG;AACH,OAAO,EAAiB,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAwB,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAuB,UAAU,EAAgB,MAAM,aAAa,CAAC;AAE5E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,eAAe,CAAC;AAExC;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,MAAc,EAAE,KAAa;IACpD,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAC7E,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAC3B,OAA0B,EAC1B,IAAyB,EACzB,KAAwB,EACxB,UAA2B;IAE3B,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE,CAAC;QAC3B,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/B,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC;QAC7C,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;YAClE,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI;gBACJ,QAAQ,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC;gBAC1B,UAAU,EAAE,SAAS;gBACrB,MAAM,EAAE,SAAS;aAClB,CAAC,CAAC;QACL,CAAC;QACD,EAAE,IAAI,MAAM,CAAC;IACf,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAC1B,IAAyB,EACzB,OAAuB,EACvB,OAAgB;IAEhB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CACpC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAC1C,CAAC;IACF,IAAI,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,IAAI,CACT,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;YAC5B,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;YACtC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE;SACvE,CAAC,EACF,OAAO,CAAC,IAAI,CACb,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GACd,OAAO,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,KAAK,aAAa,CAAC;IACvE,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;IAC7D,uEAAuE;IACvE,2EAA2E;IAC3E,2DAA2D;IAC3D,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,IAAI,CACT,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,EACvD,OAAO,CAAC,IAAI,CACb,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CACT,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/C,IAAI;QACJ,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC;QAClB,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,SAAS;KAClB,CAAC,CAAC,EACH,OAAO,CAAC,IAAI,CACb,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,IAAI,CAClB,MAAiC,EACjC,MAAc;IAEd,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC;IACxE,uEAAuE;IACvE,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;QACjB,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAC9B,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,CAC5C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,KAAc;IACpC,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { Syllable } from "../syllable/syllable.js";
|
|
2
|
+
/**
|
|
3
|
+
* The numbers in a text, said out loud.
|
|
4
|
+
*
|
|
5
|
+
* A digit is not Han and does not reach the decoder, so reading 1998年 as
|
|
6
|
+
* `yī jiǔ jiǔ bā nián` means working out what the run around it says and
|
|
7
|
+
* whether a space belongs between them. That is all this does.
|
|
8
|
+
*/
|
|
9
|
+
import { type NumeralSegment } from "../numerals/text.js";
|
|
10
|
+
import { type TextRun } from "./runs.js";
|
|
11
|
+
import type { ScoredWord } from "./word.js";
|
|
12
|
+
import type { SandhiOptions } from "./sandhi.js";
|
|
13
|
+
import { type ConvertedPiece, type Written } from "./pieces.js";
|
|
14
|
+
/**
|
|
15
|
+
* What surrounds a non-Han run, as far as a number in it cares.
|
|
16
|
+
*/
|
|
17
|
+
export interface RunContext {
|
|
18
|
+
readonly after: {
|
|
19
|
+
readonly character: string;
|
|
20
|
+
readonly syllable: Syllable | undefined;
|
|
21
|
+
};
|
|
22
|
+
/** Whether pinyin was written immediately before this run. */
|
|
23
|
+
readonly isAfterHan: boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* What surrounds a run once it has been decoded: the character after it, and
|
|
27
|
+
* the syllable that character is read as.
|
|
28
|
+
*
|
|
29
|
+
* The syllable is the one part of a number's context that a decode has to
|
|
30
|
+
* supply, and it is what a 一 ending the number assimilates to.
|
|
31
|
+
*/
|
|
32
|
+
export declare function surrounding(runs: readonly TextRun[], decoded: readonly (readonly ScoredWord[])[], at: number): RunContext;
|
|
33
|
+
/**
|
|
34
|
+
* The 汉字 a number in front of a Han run stands for, for that run's decode.
|
|
35
|
+
*
|
|
36
|
+
* Only the last segment of the run before, because only that one touches the
|
|
37
|
+
* Han: the D of 3D银行 comes between them, and a decode of 银行 that saw 三
|
|
38
|
+
* beside it would be reading a text nobody wrote.
|
|
39
|
+
*/
|
|
40
|
+
export declare function numeralBefore(segments: readonly NumeralSegment[]): string;
|
|
41
|
+
/**
|
|
42
|
+
* Write a stretch that was never Han, reading the numbers in it.
|
|
43
|
+
*
|
|
44
|
+
* Everything that is not a number goes through exactly as written, which is
|
|
45
|
+
* what this always did: digits are the only part of a non-Han run this package
|
|
46
|
+
* has anything to say about. Once a number *has* been read, though, the whole
|
|
47
|
+
* stretch is being said rather than shown, so its parts take the spacing of
|
|
48
|
+
* words — 3D打印 is `sān D dǎyìn` — and punctuation still takes none.
|
|
49
|
+
*/
|
|
50
|
+
export declare function writeNumbers(text: string, segments: readonly NumeralSegment[], context: RunContext, written: Written, options: {
|
|
51
|
+
readonly sandhi: SandhiOptions | undefined;
|
|
52
|
+
}): readonly ConvertedPiece[];
|
|
53
|
+
//# sourceMappingURL=numbers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"numbers.d.ts","sourceRoot":"","sources":["../../src/decode/numbers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAExD;;;;;;GAMG;AACH,OAAO,EAAE,KAAK,cAAc,EAAe,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAyB,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EACL,KAAK,cAAc,EAGnB,KAAK,OAAO,EACb,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE;QACd,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC;KACzC,CAAC;IACF,8DAA8D;IAC9D,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,IAAI,EAAE,SAAS,OAAO,EAAE,EACxB,OAAO,EAAE,SAAS,CAAC,SAAS,UAAU,EAAE,CAAC,EAAE,EAC3C,EAAE,EAAE,MAAM,GACT,UAAU,CAQZ;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,GAAG,MAAM,CAEzE;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,SAAS,cAAc,EAAE,EACnC,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE;IAAE,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,SAAS,CAAA;CAAE,GACtD,SAAS,cAAc,EAAE,CA6B3B"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { isSpaced, numberPieces, runEdge } from "./number-pieces.js";
|
|
2
|
+
/**
|
|
3
|
+
* The numbers in a text, said out loud.
|
|
4
|
+
*
|
|
5
|
+
* A digit is not Han and does not reach the decoder, so reading 1998年 as
|
|
6
|
+
* `yī jiǔ jiǔ bā nián` means working out what the run around it says and
|
|
7
|
+
* whether a space belongs between them. That is all this does.
|
|
8
|
+
*/
|
|
9
|
+
import { saidNumeral } from "../numerals/text.js";
|
|
10
|
+
import { surroundingCharacters } from "./runs.js";
|
|
11
|
+
import { plainPiece, sourcePiece, } from "./pieces.js";
|
|
12
|
+
/**
|
|
13
|
+
* What surrounds a run once it has been decoded: the character after it, and
|
|
14
|
+
* the syllable that character is read as.
|
|
15
|
+
*
|
|
16
|
+
* The syllable is the one part of a number's context that a decode has to
|
|
17
|
+
* supply, and it is what a 一 ending the number assimilates to.
|
|
18
|
+
*/
|
|
19
|
+
export function surrounding(runs, decoded, at) {
|
|
20
|
+
return {
|
|
21
|
+
after: {
|
|
22
|
+
character: surroundingCharacters(runs, at).following,
|
|
23
|
+
syllable: decoded[at + 1]?.[0]?.word.reading[0],
|
|
24
|
+
},
|
|
25
|
+
isAfterHan: runs[at - 1]?.isHan === true,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* The 汉字 a number in front of a Han run stands for, for that run's decode.
|
|
30
|
+
*
|
|
31
|
+
* Only the last segment of the run before, because only that one touches the
|
|
32
|
+
* Han: the D of 3D银行 comes between them, and a decode of 银行 that saw 三
|
|
33
|
+
* beside it would be reading a text nobody wrote.
|
|
34
|
+
*/
|
|
35
|
+
export function numeralBefore(segments) {
|
|
36
|
+
return segments.at(-1)?.hanzi ?? "";
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Write a stretch that was never Han, reading the numbers in it.
|
|
40
|
+
*
|
|
41
|
+
* Everything that is not a number goes through exactly as written, which is
|
|
42
|
+
* what this always did: digits are the only part of a non-Han run this package
|
|
43
|
+
* has anything to say about. Once a number *has* been read, though, the whole
|
|
44
|
+
* stretch is being said rather than shown, so its parts take the spacing of
|
|
45
|
+
* words — 3D打印 is `sān D dǎyìn` — and punctuation still takes none.
|
|
46
|
+
*/
|
|
47
|
+
export function writeNumbers(text, segments, context, written, options) {
|
|
48
|
+
if (segments.every((segment) => segment.reading === undefined)) {
|
|
49
|
+
return [sourcePiece(text)];
|
|
50
|
+
}
|
|
51
|
+
const pieces = [];
|
|
52
|
+
let before = runEdge(context.isAfterHan);
|
|
53
|
+
for (const segment of segments) {
|
|
54
|
+
if (isSpaced(before, segment.text)) {
|
|
55
|
+
pieces.push(plainPiece(" "));
|
|
56
|
+
}
|
|
57
|
+
pieces.push(...(segment.reading === undefined
|
|
58
|
+
? [sourcePiece(segment.text)]
|
|
59
|
+
: numberPieces(saidNumeral(segment, context.after.syllable, options.sandhi), segment, written)));
|
|
60
|
+
// What decides the next space is what was *written*, not what was read:
|
|
61
|
+
// 95% ends in a sign and `bǎifēnzhījiǔshíwǔ` ends in a letter.
|
|
62
|
+
before = pieces.at(-1)?.text ?? before;
|
|
63
|
+
}
|
|
64
|
+
if (isSpaced(before, runEdge(context.after.character !== ""))) {
|
|
65
|
+
pieces.push(plainPiece(" "));
|
|
66
|
+
}
|
|
67
|
+
return pieces;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=numbers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"numbers.js","sourceRoot":"","sources":["../../src/decode/numbers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AACrE;;;;;;GAMG;AACH,OAAO,EAAuB,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAgB,MAAM,WAAW,CAAC;AAGhE,OAAO,EAEL,UAAU,EACV,WAAW,GAEZ,MAAM,aAAa,CAAC;AAcrB;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CACzB,IAAwB,EACxB,OAA2C,EAC3C,EAAU;IAEV,OAAO;QACL,KAAK,EAAE;YACL,SAAS,EAAE,qBAAqB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,SAAS;YACpD,QAAQ,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;SAChD;QACD,UAAU,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI;KACzC,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,QAAmC;IAC/D,OAAO,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;AACtC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAC1B,IAAY,EACZ,QAAmC,EACnC,OAAmB,EACnB,OAAgB,EAChB,OAAuD;IAEvD,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,EAAE,CAAC;QAC/D,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,IAAI,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAEzC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/B,CAAC;QACD,MAAM,CAAC,IAAI,CACT,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS;YAC/B,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC,CAAC,YAAY,CACV,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,EAC5D,OAAO,EACP,OAAO,CACR,CAAC,CACP,CAAC;QACF,wEAAwE;QACxE,+DAA+D;QAC/D,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,MAAM,CAAC;IACzC,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC;QAC9D,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a conversion is made of: the options it takes, and the pieces it
|
|
3
|
+
* hands back.
|
|
4
|
+
*
|
|
5
|
+
* The leaf layer of the conversion. Everything here builds or describes a
|
|
6
|
+
* single piece of output, and none of it knows how a text is decoded — which
|
|
7
|
+
* is what lets `convert.ts` sit on top of it.
|
|
8
|
+
*/
|
|
9
|
+
import type { ConvertedPiece, Written } from "./convert-options.js";
|
|
10
|
+
import type { DecodedWord } from "./word.js";
|
|
11
|
+
import type { Dictionary } from "../dictionary/dictionary.js";
|
|
12
|
+
export type { ConvertedPiece, ConvertOptions, NumberStyle, Written, } from "./convert-options.js";
|
|
13
|
+
import type { Locale } from "../script/script.js";
|
|
14
|
+
import { type Syllable } from "../syllable/syllable.js";
|
|
15
|
+
import type { ReadingConfidence } from "./confidence.js";
|
|
16
|
+
/**
|
|
17
|
+
* The reading a word takes in a locale.
|
|
18
|
+
*
|
|
19
|
+
* `zh-TW` is stored as a delta, so a word with no Taiwan reading simply reads
|
|
20
|
+
* the same in both.
|
|
21
|
+
*
|
|
22
|
+
* The delta is measured against the entry's own 普通话 reading, so it only
|
|
23
|
+
* applies where the decode settled on that reading. A polyphone the decode read
|
|
24
|
+
* some other way — 长 as `cháng` where its entry reads `zhǎng`, 差 as `chā`
|
|
25
|
+
* where its entry reads `chà` — is a different sense of the word, and the delta
|
|
26
|
+
* beside the entry says nothing about it. Replacing the reading there would
|
|
27
|
+
* discard what the lattice worked out in favour of a reading of the wrong
|
|
28
|
+
* syllable entirely.
|
|
29
|
+
*/
|
|
30
|
+
export declare function readingFor(dictionary: Dictionary, word: DecodedWord, locale: Locale): readonly Syllable[];
|
|
31
|
+
/**
|
|
32
|
+
* Text that writes no syllable: a space, or a run that was never Han.
|
|
33
|
+
*/
|
|
34
|
+
export declare function plainPiece(text: string): ConvertedPiece;
|
|
35
|
+
/**
|
|
36
|
+
* Source text that is written out but read as nothing.
|
|
37
|
+
*
|
|
38
|
+
* The difference from {@link plainPiece} is what the text *is*. Both write no
|
|
39
|
+
* syllable, but a run that was never Han — punctuation, a Latin word, a digit
|
|
40
|
+
* left unread — stands for something the author wrote, whereas the space
|
|
41
|
+
* between two words and the hyphen inside 干干净净 are pinyin orthography that
|
|
42
|
+
* the source has no trace of.
|
|
43
|
+
*
|
|
44
|
+
* A conversion joins them into one string and the distinction does not arise.
|
|
45
|
+
* An annotation writes the source and the reading in different places, and
|
|
46
|
+
* putting a hyphen the pinyin needs into the hanzi it annotates would be
|
|
47
|
+
* inventing text: 干干净净 is `gāngān-jìngjìng` and is not written 干干-净净.
|
|
48
|
+
*
|
|
49
|
+
* The text and the source can differ, and the punctuation pass is why: it
|
|
50
|
+
* rewrites 。 to a full stop in the `text` a conversion writes, and leaves the
|
|
51
|
+
* `source` as the mark the author actually typed.
|
|
52
|
+
*/
|
|
53
|
+
export declare function sourcePiece(text: string): ConvertedPiece;
|
|
54
|
+
/**
|
|
55
|
+
* Which characters of a word each of its syllables reads.
|
|
56
|
+
*
|
|
57
|
+
* One per syllable, in order, and undefined where a syllable reads on into the
|
|
58
|
+
* characters the one before it took. Only 儿化 does that: measured over the
|
|
59
|
+
* committed dictionary, 5,283 of 723,147 keys have fewer syllables than
|
|
60
|
+
* characters, 4,024 of them because a final 儿 folds into the syllable before
|
|
61
|
+
* it, and the remaining 1,259 because the word is written with punctuation —
|
|
62
|
+
* which cannot reach here, since punctuation ends a Han run before the decode
|
|
63
|
+
* ever sees it.
|
|
64
|
+
*
|
|
65
|
+
* The deficit is spent from the right, which is where 儿化 always is. 打哪儿指
|
|
66
|
+
* 哪儿 is the case that needs it: two syllables short over six characters, and
|
|
67
|
+
* both 儿 attach to the character in front of them rather than one taking two.
|
|
68
|
+
*/
|
|
69
|
+
export declare function sourcesOf(word: string, reading: readonly Syllable[]): readonly (string | undefined)[];
|
|
70
|
+
/**
|
|
71
|
+
* Write one decoded word as one piece per syllable.
|
|
72
|
+
*
|
|
73
|
+
* Only proper nouns are capitalised here; a sentence capital is applied to the
|
|
74
|
+
* whole conversion afterwards, since it belongs to whichever run happens to
|
|
75
|
+
* start the sentence.
|
|
76
|
+
*/
|
|
77
|
+
export declare function writeWord(reading: readonly Syllable[], confidence: readonly ReadingConfidence[], word: DecodedWord, written: Written): readonly ConvertedPiece[];
|
|
78
|
+
//# sourceMappingURL=pieces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pieces.d.ts","sourceRoot":"","sources":["../../src/decode/pieces.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAG7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D,YAAY,EACV,cAAc,EACd,cAAc,EACd,WAAW,EACX,OAAO,GACR,MAAM,sBAAsB,CAAC;AAI9B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,KAAK,QAAQ,EAAiB,MAAM,yBAAyB,CAAC;AACvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CACxB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,MAAM,GACb,SAAS,QAAQ,EAAE,CAWrB;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAOvD;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAOxD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,SAAS,QAAQ,EAAE,GAC3B,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CA2BjC;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CACvB,OAAO,EAAE,SAAS,QAAQ,EAAE,EAC5B,UAAU,EAAE,SAAS,iBAAiB,EAAE,EACxC,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,OAAO,GACf,SAAS,cAAc,EAAE,CAqB3B"}
|