@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
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { decodeReading } from "./artifact.js";
|
|
2
|
+
const ALTERNATE = ",";
|
|
3
|
+
/**
|
|
4
|
+
* The stored reading of a key, or undefined when it is not a key.
|
|
5
|
+
*
|
|
6
|
+
* Read from the blob without decoding the rest of the line, since deriving a
|
|
7
|
+
* word's reading needs its characters' readings and nothing else about them.
|
|
8
|
+
*/
|
|
9
|
+
export function storedReadingOf(index, lines, word) {
|
|
10
|
+
const found = index.lookup(word);
|
|
11
|
+
return found.isKey ? (lines.columnsAt(found.index)[0] ?? "") : undefined;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* The other readings recorded on a line, after the one the entry names.
|
|
15
|
+
*
|
|
16
|
+
* The lattice needs these for its single-character fallback edges: 行 has to
|
|
17
|
+
* offer `xíng`, `háng` and `héng` at a position no word covers.
|
|
18
|
+
*/
|
|
19
|
+
export function alternateReadings(lines, at) {
|
|
20
|
+
return (lines.columnsAt(at)[4] ?? "")
|
|
21
|
+
.split(ALTERNATE)
|
|
22
|
+
.map((text) => decodeReading(text))
|
|
23
|
+
.filter((reading) => reading !== undefined);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* The lowest code unit that begins a surrogate pair.
|
|
27
|
+
*/
|
|
28
|
+
const HIGH_SURROGATE = 0x1_00_00;
|
|
29
|
+
/**
|
|
30
|
+
* Whether a key is written with exactly one character, without allocating.
|
|
31
|
+
*
|
|
32
|
+
* Asked of every key in the dictionary when {@link readingsCursor} gathers the
|
|
33
|
+
* character defaults, which is where splitting each key into characters would
|
|
34
|
+
* cost an array per key for an answer that is a length check.
|
|
35
|
+
*/
|
|
36
|
+
function isOneCharacter(key) {
|
|
37
|
+
if (key.length === 1) {
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
return key.length === 2 && (key.codePointAt(0) ?? 0) >= HIGH_SURROGATE;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* A word's reading, joined from its characters' default readings.
|
|
44
|
+
*
|
|
45
|
+
* Walked by code point rather than split into characters first, for the same
|
|
46
|
+
* reason as {@link isOneCharacter}: this runs over every key in the dictionary
|
|
47
|
+
* three times during a reverse index build, and the array `toCharacters`
|
|
48
|
+
* allocates per key is 20% of it.
|
|
49
|
+
*
|
|
50
|
+
* Returns the empty string where any character has no default, which is what a
|
|
51
|
+
* tier missing a character would look like. No tier does: `selectTier` never
|
|
52
|
+
* drops a character some word is written with.
|
|
53
|
+
*/
|
|
54
|
+
function derivedReading(key, defaults) {
|
|
55
|
+
let joined = "";
|
|
56
|
+
let at = 0;
|
|
57
|
+
while (at < key.length) {
|
|
58
|
+
const width = (key.codePointAt(at) ?? 0) >= HIGH_SURROGATE ? 2 : 1;
|
|
59
|
+
const value = defaults.get(key.slice(at, at + width));
|
|
60
|
+
if (value === undefined) {
|
|
61
|
+
return "";
|
|
62
|
+
}
|
|
63
|
+
joined = joined === "" ? value : `${joined} ${value}`;
|
|
64
|
+
at += width;
|
|
65
|
+
}
|
|
66
|
+
return joined;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* A cursor over every key's reading, in key order.
|
|
70
|
+
*
|
|
71
|
+
* Two passes, mirroring `readArtifact`: the character defaults are gathered
|
|
72
|
+
* first, because 83.25% of the full tier's keys store no reading and mean "the
|
|
73
|
+
* characters' defaults, in order". Holding the cursor holds those defaults, so
|
|
74
|
+
* build what needs it, use it, and let it go.
|
|
75
|
+
*/
|
|
76
|
+
export function readingsCursor(index, lines) {
|
|
77
|
+
const defaults = new Map();
|
|
78
|
+
for (let at = 0; at < index.size; at++) {
|
|
79
|
+
const key = index.keyAt(at);
|
|
80
|
+
const reading = isOneCharacter(key) ? lines.readingColumnAt(at) : "";
|
|
81
|
+
if (reading !== "") {
|
|
82
|
+
defaults.set(key, reading);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
size: index.size,
|
|
87
|
+
readingAt: (at) => {
|
|
88
|
+
const stored = lines.readingColumnAt(at);
|
|
89
|
+
return stored === "" ? derivedReading(index.keyAt(at), defaults) : stored;
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=dictionary-readings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dictionary-readings.js","sourceRoot":"","sources":["../../src/dictionary/dictionary-readings.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,55 +1,9 @@
|
|
|
1
1
|
import type { Syllable } from "../syllable/syllable.js";
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
* `yin2 hang2` on the way in and on the way out, and no {@link Syllable} is
|
|
8
|
-
* constructed anywhere along it — which is what makes a pass over all 723,147
|
|
9
|
-
* keys affordable at load time rather than a decode of the whole dictionary.
|
|
10
|
-
*
|
|
11
|
-
* Handed out as a cursor rather than as an array because the array is 39 MB on
|
|
12
|
-
* the full tier. What the cursor holds instead is the character defaults a
|
|
13
|
-
* derived reading is assembled from, and dropping it releases them.
|
|
14
|
-
*/
|
|
15
|
-
export interface DictionaryReadings {
|
|
16
|
-
/** How many positions there are, which is the dictionary's own size. */
|
|
17
|
-
readonly size: number;
|
|
18
|
-
/**
|
|
19
|
-
* The reading at a position, in the artifact's tone-numbered spelling.
|
|
20
|
-
*
|
|
21
|
-
* Empty where the position is out of range, or where a character the word is
|
|
22
|
-
* written with is not itself a key.
|
|
23
|
-
*/
|
|
24
|
-
readonly readingAt: (at: number) => string;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* What the dictionary knows about one word.
|
|
28
|
-
*/
|
|
29
|
-
export interface WordEntry {
|
|
30
|
-
readonly word: string;
|
|
31
|
-
/** 普通话 reading. */
|
|
32
|
-
readonly reading: readonly Syllable[];
|
|
33
|
-
/** 國語 reading, absent when it does not differ. */
|
|
34
|
-
readonly taiwanReading?: readonly Syllable[];
|
|
35
|
-
readonly partOfSpeech: string;
|
|
36
|
-
readonly isProperNoun: boolean;
|
|
37
|
-
/**
|
|
38
|
-
* Where a proper name divides into its parts, in characters.
|
|
39
|
-
*
|
|
40
|
-
* Present only where CC-CEDICT's own capitalisation divides it: 齐白石 is
|
|
41
|
-
* `[Qi2 Bai2 shi2]`, 司马迁 `[Si1 ma3 Qian1]`, 上海交通大学
|
|
42
|
-
* `[Shang4 hai3 Jiao1 tong1 Da4 xue2]`. Absent for 马克思 `[Ma3 ke4 si1]`,
|
|
43
|
-
* which is why a transliteration stays one word.
|
|
44
|
-
*/
|
|
45
|
-
readonly nameBoundaries?: readonly number[];
|
|
46
|
-
/**
|
|
47
|
-
* Decoding cost, where lower means more likely.
|
|
48
|
-
*
|
|
49
|
-
* Quantised from the corpus frequency; see {@link FrequencyTable.costOf}.
|
|
50
|
-
*/
|
|
51
|
-
readonly cost: number;
|
|
52
|
-
}
|
|
2
|
+
import type { DictionaryArtifact } from "./artifact.js";
|
|
3
|
+
import { type WordEntry } from "./dictionary-entry.js";
|
|
4
|
+
import { type DictionaryReadings } from "./dictionary-readings.js";
|
|
5
|
+
export type { WordEntry } from "./dictionary-entry.js";
|
|
6
|
+
export type { DictionaryReadings } from "./dictionary-readings.js";
|
|
53
7
|
/**
|
|
54
8
|
* A compiled dictionary, queried without being parsed.
|
|
55
9
|
*
|
|
@@ -76,7 +30,7 @@ export declare class Dictionary {
|
|
|
76
30
|
*/
|
|
77
31
|
static from(artifact: DictionaryArtifact): Dictionary;
|
|
78
32
|
/**
|
|
79
|
-
*
|
|
33
|
+
* Wrap an artifact's blobs. Use {@link Dictionary.from}.
|
|
80
34
|
*/
|
|
81
35
|
private constructor();
|
|
82
36
|
/**
|
|
@@ -103,11 +57,6 @@ export declare class Dictionary {
|
|
|
103
57
|
frequencyAt(at: number): number;
|
|
104
58
|
/**
|
|
105
59
|
* A cursor over every key's reading, in key order.
|
|
106
|
-
*
|
|
107
|
-
* Two passes, mirroring `readArtifact`: the character defaults are gathered
|
|
108
|
-
* first, because 83.25% of the full tier's keys store no reading and mean
|
|
109
|
-
* "the characters' defaults, in order". Holding the cursor holds those
|
|
110
|
-
* defaults, so build what needs it, use it, and let it go.
|
|
111
60
|
*/
|
|
112
61
|
readingsInOrder(): DictionaryReadings;
|
|
113
62
|
/**
|
|
@@ -129,9 +78,6 @@ export declare class Dictionary {
|
|
|
129
78
|
/**
|
|
130
79
|
* Every reading a single character is known to take, most likely first.
|
|
131
80
|
*
|
|
132
|
-
* The lattice needs these for its single-character fallback edges: 行 has to
|
|
133
|
-
* offer `xíng`, `háng` and `héng` at a position no word covers.
|
|
134
|
-
*
|
|
135
81
|
* The alternates are read off the canonical form's line, the same form
|
|
136
82
|
* {@link Dictionary.lookup} found the entry under. Searching the index for
|
|
137
83
|
* the raw character instead would land on the insertion point for a Hong Kong
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dictionary.d.ts","sourceRoot":"","sources":["../../src/dictionary/dictionary.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dictionary.d.ts","sourceRoot":"","sources":["../../src/dictionary/dictionary.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAEL,KAAK,kBAAkB,EAGxB,MAAM,0BAA0B,CAAC;AAKlC,YAAY,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,YAAY,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnE;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,UAAU;;IACrB;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,kBAAkB,GAAG,UAAU,CAEpD;IAOD;;OAEG;IACH,OAAO,eAON;IAED;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEzB;IAED;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE9B;IAED;;OAEG;IACH,eAAe,IAAI,kBAAkB,CAEpC;IAED;;;;;OAKG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE/B;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAkB1C;IAED;;;;;;;;OAQG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,SAAS,QAAQ,EAAE,CAAC,EAAE,CAO9D;CACF"}
|
|
@@ -1,67 +1,9 @@
|
|
|
1
|
-
import { toCharacters } from "../script/characters.js";
|
|
2
1
|
import { toCanonicalGlyphs } from "../script/glyphs.js";
|
|
3
|
-
import {
|
|
2
|
+
import { decodeEntry } from "./dictionary-entry.js";
|
|
3
|
+
import { alternateReadings, readingsCursor, storedReadingOf, } from "./dictionary-readings.js";
|
|
4
|
+
import { EntryLines } from "./entry-lines.js";
|
|
4
5
|
import { FrequencyTable } from "./frequency-table.js";
|
|
5
6
|
import { KeyIndex } from "./key-index.js";
|
|
6
|
-
/**
|
|
7
|
-
* Separator between a line's columns, matching what the artifact writes.
|
|
8
|
-
*/
|
|
9
|
-
const COLUMN = "\t";
|
|
10
|
-
const LINE = "\n";
|
|
11
|
-
const ALTERNATE = ",";
|
|
12
|
-
const PROPER_NOUN_FLAG = "p";
|
|
13
|
-
/**
|
|
14
|
-
* Where a proper name divides, after the proper-noun flag: `p1`, `p2.4`. *
|
|
15
|
-
* `security/detect-unsafe-regex` flags the nested quantifier, and there is no
|
|
16
|
-
* ambiguity behind it: a literal `.` separates `\d+` from `(?:\.\d+)*`, so no
|
|
17
|
-
* input can be split between them two ways. Timed on a string of digits and
|
|
18
|
-
* dots that cannot match, it is linear — 8k to 128k characters doubles the time
|
|
19
|
-
* for each doubling of the input, 39µs to 607µs.
|
|
20
|
-
*/
|
|
21
|
-
const NAME_BOUNDARIES = /^p(?<at>\d+(?:\.\d+)*)$/u;
|
|
22
|
-
/**
|
|
23
|
-
* The lowest code unit that begins a surrogate pair.
|
|
24
|
-
*/
|
|
25
|
-
const HIGH_SURROGATE = 0x1_00_00;
|
|
26
|
-
/**
|
|
27
|
-
* Whether a key is written with exactly one character, without allocating.
|
|
28
|
-
*
|
|
29
|
-
* Asked of every key in the dictionary when {@link Dictionary.readingsInOrder}
|
|
30
|
-
* gathers the character defaults, which is where splitting each key into
|
|
31
|
-
* characters would cost an array per key for an answer that is a length check.
|
|
32
|
-
*/
|
|
33
|
-
function isOneCharacter(key) {
|
|
34
|
-
if (key.length === 1) {
|
|
35
|
-
return true;
|
|
36
|
-
}
|
|
37
|
-
return key.length === 2 && (key.codePointAt(0) ?? 0) >= HIGH_SURROGATE;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* A word's reading, joined from its characters' default readings.
|
|
41
|
-
*
|
|
42
|
-
* Walked by code point rather than split into characters first, for the same
|
|
43
|
-
* reason as {@link isOneCharacter}: this runs over every key in the dictionary
|
|
44
|
-
* three times during a reverse index build, and the array `toCharacters`
|
|
45
|
-
* allocates per key is 20% of it.
|
|
46
|
-
*
|
|
47
|
-
* Returns the empty string where any character has no default, which is what a
|
|
48
|
-
* tier missing a character would look like. No tier does: `selectTier` never
|
|
49
|
-
* drops a character some word is written with.
|
|
50
|
-
*/
|
|
51
|
-
function derivedReading(key, defaults) {
|
|
52
|
-
let joined = "";
|
|
53
|
-
let at = 0;
|
|
54
|
-
while (at < key.length) {
|
|
55
|
-
const width = (key.codePointAt(at) ?? 0) >= HIGH_SURROGATE ? 2 : 1;
|
|
56
|
-
const value = defaults.get(key.slice(at, at + width));
|
|
57
|
-
if (value === undefined) {
|
|
58
|
-
return "";
|
|
59
|
-
}
|
|
60
|
-
joined = joined === "" ? value : `${joined} ${value}`;
|
|
61
|
-
at += width;
|
|
62
|
-
}
|
|
63
|
-
return joined;
|
|
64
|
-
}
|
|
65
7
|
/**
|
|
66
8
|
* A compiled dictionary, queried without being parsed.
|
|
67
9
|
*
|
|
@@ -89,91 +31,17 @@ export class Dictionary {
|
|
|
89
31
|
return new Dictionary(artifact);
|
|
90
32
|
}
|
|
91
33
|
#index;
|
|
92
|
-
#
|
|
93
|
-
#lineStarts;
|
|
34
|
+
#lines;
|
|
94
35
|
#frequencies;
|
|
95
36
|
#decoded = new Map();
|
|
96
37
|
/**
|
|
97
|
-
*
|
|
38
|
+
* Wrap an artifact's blobs. Use {@link Dictionary.from}.
|
|
98
39
|
*/
|
|
99
40
|
constructor(artifact) {
|
|
100
41
|
this.#index = KeyIndex.from(artifact.keys);
|
|
101
|
-
this.#
|
|
102
|
-
const starts = [0];
|
|
103
|
-
let separator = this.#entries.indexOf(LINE);
|
|
104
|
-
while (separator !== -1) {
|
|
105
|
-
starts.push(separator + 1);
|
|
106
|
-
separator = this.#entries.indexOf(LINE, separator + 1);
|
|
107
|
-
}
|
|
108
|
-
starts.push(this.#entries.length + 1);
|
|
109
|
-
this.#lineStarts = Uint32Array.from(starts);
|
|
42
|
+
this.#lines = EntryLines.from(artifact.entries);
|
|
110
43
|
this.#frequencies = FrequencyTable.from(artifact.frequencies, this.#index.size);
|
|
111
44
|
}
|
|
112
|
-
/**
|
|
113
|
-
* The columns of the line at a position.
|
|
114
|
-
*/
|
|
115
|
-
#columns(at) {
|
|
116
|
-
const start = this.#lineStarts[at];
|
|
117
|
-
const nextStart = this.#lineStarts[at + 1];
|
|
118
|
-
/* c8 ignore next 3 -- every position comes from a successful key lookup */
|
|
119
|
-
if (start === undefined || nextStart === undefined) {
|
|
120
|
-
return [];
|
|
121
|
-
}
|
|
122
|
-
return this.#entries.slice(start, nextStart - 1).split(COLUMN);
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* The stored reading of a key, or undefined when it is not a key.
|
|
126
|
-
*
|
|
127
|
-
* Read from the blob without decoding the rest of the line, since deriving a
|
|
128
|
-
* word's reading needs its characters' readings and nothing else about them.
|
|
129
|
-
*/
|
|
130
|
-
#storedReading(word) {
|
|
131
|
-
const found = this.#index.lookup(word);
|
|
132
|
-
return found.isKey ? (this.#columns(found.index)[0] ?? "") : undefined;
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Decode one line into an entry.
|
|
136
|
-
*/
|
|
137
|
-
#decode(word, at) {
|
|
138
|
-
const [reading = "", taiwan = "", partOfSpeech = "", flags = ""] = this.#columns(at);
|
|
139
|
-
// An empty reading means the word is read as its characters' defaults,
|
|
140
|
-
// which is how 87.8% of multi-character entries are stored.
|
|
141
|
-
const encoded = reading === ""
|
|
142
|
-
? toCharacters(word)
|
|
143
|
-
.map((character) => this.#storedReading(character) ?? "")
|
|
144
|
-
.join(" ")
|
|
145
|
-
: reading;
|
|
146
|
-
const decoded = decodeReading(encoded) ?? [];
|
|
147
|
-
const taiwanReading = decodeReading(taiwan);
|
|
148
|
-
const stated = NAME_BOUNDARIES.exec(flags)?.groups?.["at"];
|
|
149
|
-
const nameBoundaries = stated === undefined ? [] : stated.split(".").map(Number);
|
|
150
|
-
return {
|
|
151
|
-
word,
|
|
152
|
-
reading: decoded,
|
|
153
|
-
...(taiwanReading !== undefined && { taiwanReading }),
|
|
154
|
-
partOfSpeech,
|
|
155
|
-
isProperNoun: flags.includes(PROPER_NOUN_FLAG),
|
|
156
|
-
...(nameBoundaries.length > 0 && { nameBoundaries }),
|
|
157
|
-
cost: this.#frequencies.costOf(at),
|
|
158
|
-
};
|
|
159
|
-
}
|
|
160
|
-
/**
|
|
161
|
-
* The reading column of a line, without slicing or splitting the rest of it.
|
|
162
|
-
*
|
|
163
|
-
* Deriving a word's reading needs its characters' readings and nothing else
|
|
164
|
-
* about them, and this is asked of every line in the dictionary during a
|
|
165
|
-
* reverse index build, so the other four columns are never touched.
|
|
166
|
-
*/
|
|
167
|
-
#readingColumn(at) {
|
|
168
|
-
const start = this.#lineStarts[at];
|
|
169
|
-
const nextStart = this.#lineStarts[at + 1];
|
|
170
|
-
if (start === undefined || nextStart === undefined) {
|
|
171
|
-
return "";
|
|
172
|
-
}
|
|
173
|
-
const end = nextStart - 1;
|
|
174
|
-
const column = this.#entries.indexOf(COLUMN, start);
|
|
175
|
-
return this.#entries.slice(start, column === -1 || column > end ? end : column);
|
|
176
|
-
}
|
|
177
45
|
/**
|
|
178
46
|
* How many words the dictionary holds, counting each script's key.
|
|
179
47
|
*/
|
|
@@ -204,30 +72,9 @@ export class Dictionary {
|
|
|
204
72
|
}
|
|
205
73
|
/**
|
|
206
74
|
* A cursor over every key's reading, in key order.
|
|
207
|
-
*
|
|
208
|
-
* Two passes, mirroring `readArtifact`: the character defaults are gathered
|
|
209
|
-
* first, because 83.25% of the full tier's keys store no reading and mean
|
|
210
|
-
* "the characters' defaults, in order". Holding the cursor holds those
|
|
211
|
-
* defaults, so build what needs it, use it, and let it go.
|
|
212
75
|
*/
|
|
213
76
|
readingsInOrder() {
|
|
214
|
-
|
|
215
|
-
for (let at = 0; at < this.#index.size; at++) {
|
|
216
|
-
const key = this.#index.keyAt(at);
|
|
217
|
-
const reading = isOneCharacter(key) ? this.#readingColumn(at) : "";
|
|
218
|
-
if (reading !== "") {
|
|
219
|
-
defaults.set(key, reading);
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
return {
|
|
223
|
-
size: this.#index.size,
|
|
224
|
-
readingAt: (at) => {
|
|
225
|
-
const stored = this.#readingColumn(at);
|
|
226
|
-
return stored === ""
|
|
227
|
-
? derivedReading(this.#index.keyAt(at), defaults)
|
|
228
|
-
: stored;
|
|
229
|
-
},
|
|
230
|
-
};
|
|
77
|
+
return readingsCursor(this.#index, this.#lines);
|
|
231
78
|
}
|
|
232
79
|
/**
|
|
233
80
|
* Whether any word begins with this text. An exact match counts.
|
|
@@ -256,16 +103,13 @@ export class Dictionary {
|
|
|
256
103
|
if (held !== undefined) {
|
|
257
104
|
return held;
|
|
258
105
|
}
|
|
259
|
-
const entry = this.#
|
|
106
|
+
const entry = decodeEntry(canonical, this.#lines.columnsAt(found.index), (character) => storedReadingOf(this.#index, this.#lines, character), this.#frequencies.costOf(found.index));
|
|
260
107
|
this.#decoded.set(found.index, entry);
|
|
261
108
|
return entry;
|
|
262
109
|
}
|
|
263
110
|
/**
|
|
264
111
|
* Every reading a single character is known to take, most likely first.
|
|
265
112
|
*
|
|
266
|
-
* The lattice needs these for its single-character fallback edges: 行 has to
|
|
267
|
-
* offer `xíng`, `háng` and `héng` at a position no word covers.
|
|
268
|
-
*
|
|
269
113
|
* The alternates are read off the canonical form's line, the same form
|
|
270
114
|
* {@link Dictionary.lookup} found the entry under. Searching the index for
|
|
271
115
|
* the raw character instead would land on the insertion point for a Hong Kong
|
|
@@ -278,11 +122,7 @@ export class Dictionary {
|
|
|
278
122
|
return [];
|
|
279
123
|
}
|
|
280
124
|
const found = this.#index.lookup(toCanonicalGlyphs(character));
|
|
281
|
-
|
|
282
|
-
.split(ALTERNATE)
|
|
283
|
-
.map((text) => decodeReading(text))
|
|
284
|
-
.filter((reading) => reading !== undefined);
|
|
285
|
-
return [entry.reading, ...alternates];
|
|
125
|
+
return [entry.reading, ...alternateReadings(this.#lines, found.index)];
|
|
286
126
|
}
|
|
287
127
|
}
|
|
288
128
|
//# sourceMappingURL=dictionary.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dictionary.js","sourceRoot":"","sources":["../../src/dictionary/dictionary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"dictionary.js","sourceRoot":"","sources":["../../src/dictionary/dictionary.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry-invariants.d.ts","sourceRoot":"","sources":["../../src/dictionary/entry-invariants.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAmB,MAAM,uBAAuB,CAAC;AAE7E,eAAO,MAAM,gBAAgB,EAAE,SAAS,cAAc,EAmErD,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What must hold of an entry's own fields.
|
|
3
|
+
*
|
|
4
|
+
* The proper noun bit and the 繁體 form are both derived rather than taken from
|
|
5
|
+
* one source, so each is asserted where the derivation is known to be delicate.
|
|
6
|
+
*/
|
|
7
|
+
import { writeSyllable } from "../syllable/syllable.js";
|
|
8
|
+
export const ENTRY_INVARIANTS = [
|
|
9
|
+
{
|
|
10
|
+
description: "北京 is a proper noun (jieba POS carried through)",
|
|
11
|
+
check: (dictionary) => dictionary.get("北京")?.isProperNoun === true
|
|
12
|
+
? undefined
|
|
13
|
+
: "北京 is not marked as a proper noun",
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
// jieba tags all four of these a proper noun; CC-CEDICT writes their
|
|
17
|
+
// pinyin in lower case, and the decoder capitalises straight off this bit.
|
|
18
|
+
description: "沙发, 城市, 阿姨 and 长大 are not proper nouns",
|
|
19
|
+
check: (dictionary) => {
|
|
20
|
+
const wrong = ["沙发", "城市", "阿姨", "长大"].filter((word) => dictionary.get(word)?.isProperNoun === true);
|
|
21
|
+
return wrong.length === 0
|
|
22
|
+
? undefined
|
|
23
|
+
: `marked as proper nouns: ${wrong.join(", ")}`;
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
// The veto only demotes. These stay proper nouns, and 人民政府 is the
|
|
28
|
+
// control that shows the veto still fires on an institution.
|
|
29
|
+
description: "齐白石, 国务院 and 湖北 stay proper nouns",
|
|
30
|
+
check: (dictionary) => {
|
|
31
|
+
const wrong = ["齐白石", "国务院", "湖北"].filter((word) => dictionary.get(word)?.isProperNoun !== true);
|
|
32
|
+
return wrong.length === 0
|
|
33
|
+
? undefined
|
|
34
|
+
: `no longer proper nouns: ${wrong.join(", ")}`;
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
// The gap composeLocaleDeltas closes, and the two ways it must not close
|
|
39
|
+
// it. 運行狀況 contains the marked word 行狀 and cuts elsewhere; 一个个地
|
|
40
|
+
// ends in a character whose delta is a different sense of 地 entirely.
|
|
41
|
+
description: "垃圾分類 inherits 垃圾's 國語 reading, 運行狀況 inherits nothing",
|
|
42
|
+
check: (dictionary) => {
|
|
43
|
+
const taiwan = (word) => dictionary
|
|
44
|
+
.get(word)
|
|
45
|
+
?.readings.tw?.map((syllable) => writeSyllable(syllable))
|
|
46
|
+
.join(" ");
|
|
47
|
+
const composed = taiwan("垃圾分类");
|
|
48
|
+
if (composed !== "lè sè fēn lèi") {
|
|
49
|
+
return `垃圾分类 reads ${composed ?? "nothing"} in zh-TW, expected lè sè fēn lèi`;
|
|
50
|
+
}
|
|
51
|
+
const wrong = ["运行状况", "一个个地", "相亲相爱"].filter((word) => taiwan(word) !== undefined);
|
|
52
|
+
return wrong.length === 0
|
|
53
|
+
? undefined
|
|
54
|
+
: `composed a zh-TW reading for: ${wrong.join(", ")}`;
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
description: "头发 derives 頭髮 rather than 頭發",
|
|
59
|
+
check: (dictionary) => {
|
|
60
|
+
const hant = dictionary.get("头发")?.hant;
|
|
61
|
+
return hant === "頭髮"
|
|
62
|
+
? undefined
|
|
63
|
+
: `头发 derived ${hant ?? "nothing"}, expected 頭髮`;
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
];
|
|
67
|
+
//# sourceMappingURL=entry-invariants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry-invariants.js","sourceRoot":"","sources":["../../src/dictionary/entry-invariants.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The entry blob read as lines and columns, and nothing above that.
|
|
3
|
+
*
|
|
4
|
+
* `Dictionary` never parses its artifact; it scans for separators and slices.
|
|
5
|
+
* That scanning is a concern of its own — it is the only code that knows the
|
|
6
|
+
* blob is tab-separated columns one line per key — so it sits here, and the
|
|
7
|
+
* dictionary above it deals in positions and words.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* A blob of entry lines, indexed by position.
|
|
11
|
+
*/
|
|
12
|
+
export declare class EntryLines {
|
|
13
|
+
#private;
|
|
14
|
+
/**
|
|
15
|
+
* Scan a blob for its line starts.
|
|
16
|
+
*
|
|
17
|
+
* The scan is the whole of the load cost: an `indexOf` per line, and no
|
|
18
|
+
* allocation beyond the offsets themselves. Everything after it is a slice.
|
|
19
|
+
*/
|
|
20
|
+
static from(entries: string): EntryLines;
|
|
21
|
+
private constructor();
|
|
22
|
+
/**
|
|
23
|
+
* The columns of the line at a position.
|
|
24
|
+
*/
|
|
25
|
+
columnsAt(at: number): readonly string[];
|
|
26
|
+
/**
|
|
27
|
+
* The reading column of a line, without slicing or splitting the rest of it.
|
|
28
|
+
*
|
|
29
|
+
* Deriving a word's reading needs its characters' readings and nothing else
|
|
30
|
+
* about them, and this is asked of every line in the dictionary during a
|
|
31
|
+
* reverse index build, so the other four columns are never touched.
|
|
32
|
+
*/
|
|
33
|
+
readingColumnAt(at: number): string;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=entry-lines.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry-lines.d.ts","sourceRoot":"","sources":["../../src/dictionary/entry-lines.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH;;GAEG;AACH,qBAAa,UAAU;;IACrB;;;;;OAKG;IACH,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CASvC;IAKD,OAAO,eAGN;IAED;;OAEG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAQvC;IAED;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAYlC;CACF"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The entry blob read as lines and columns, and nothing above that.
|
|
3
|
+
*
|
|
4
|
+
* `Dictionary` never parses its artifact; it scans for separators and slices.
|
|
5
|
+
* That scanning is a concern of its own — it is the only code that knows the
|
|
6
|
+
* blob is tab-separated columns one line per key — so it sits here, and the
|
|
7
|
+
* dictionary above it deals in positions and words.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Separator between a line's columns, matching what the artifact writes.
|
|
11
|
+
*/
|
|
12
|
+
const COLUMN = "\t";
|
|
13
|
+
const LINE = "\n";
|
|
14
|
+
/**
|
|
15
|
+
* A blob of entry lines, indexed by position.
|
|
16
|
+
*/
|
|
17
|
+
export class EntryLines {
|
|
18
|
+
/**
|
|
19
|
+
* Scan a blob for its line starts.
|
|
20
|
+
*
|
|
21
|
+
* The scan is the whole of the load cost: an `indexOf` per line, and no
|
|
22
|
+
* allocation beyond the offsets themselves. Everything after it is a slice.
|
|
23
|
+
*/
|
|
24
|
+
static from(entries) {
|
|
25
|
+
const starts = [0];
|
|
26
|
+
let separator = entries.indexOf(LINE);
|
|
27
|
+
while (separator !== -1) {
|
|
28
|
+
starts.push(separator + 1);
|
|
29
|
+
separator = entries.indexOf(LINE, separator + 1);
|
|
30
|
+
}
|
|
31
|
+
starts.push(entries.length + 1);
|
|
32
|
+
return new EntryLines(entries, Uint32Array.from(starts));
|
|
33
|
+
}
|
|
34
|
+
#entries;
|
|
35
|
+
#lineStarts;
|
|
36
|
+
constructor(entries, lineStarts) {
|
|
37
|
+
this.#entries = entries;
|
|
38
|
+
this.#lineStarts = lineStarts;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* The columns of the line at a position.
|
|
42
|
+
*/
|
|
43
|
+
columnsAt(at) {
|
|
44
|
+
const start = this.#lineStarts[at];
|
|
45
|
+
const nextStart = this.#lineStarts[at + 1];
|
|
46
|
+
/* c8 ignore next 3 -- every position comes from a successful key lookup */
|
|
47
|
+
if (start === undefined || nextStart === undefined) {
|
|
48
|
+
return [];
|
|
49
|
+
}
|
|
50
|
+
return this.#entries.slice(start, nextStart - 1).split(COLUMN);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* The reading column of a line, without slicing or splitting the rest of it.
|
|
54
|
+
*
|
|
55
|
+
* Deriving a word's reading needs its characters' readings and nothing else
|
|
56
|
+
* about them, and this is asked of every line in the dictionary during a
|
|
57
|
+
* reverse index build, so the other four columns are never touched.
|
|
58
|
+
*/
|
|
59
|
+
readingColumnAt(at) {
|
|
60
|
+
const start = this.#lineStarts[at];
|
|
61
|
+
const nextStart = this.#lineStarts[at + 1];
|
|
62
|
+
if (start === undefined || nextStart === undefined) {
|
|
63
|
+
return "";
|
|
64
|
+
}
|
|
65
|
+
const end = nextStart - 1;
|
|
66
|
+
const column = this.#entries.indexOf(COLUMN, start);
|
|
67
|
+
return this.#entries.slice(start, column === -1 || column > end ? end : column);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=entry-lines.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry-lines.js","sourceRoot":"","sources":["../../src/dictionary/entry-lines.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,MAAM,GAAG,IAAI,CAAC;AAEpB,MAAM,IAAI,GAAG,IAAI,CAAC;AAElB;;GAEG;AACH,MAAM,OAAO,UAAU;IACrB;;;;;OAKG;IACH,MAAM,CAAC,IAAI,CAAC,OAAe;QACzB,MAAM,MAAM,GAAa,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACtC,OAAO,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;YAC3B,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC;QACnD,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAChC,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3D,CAAC;IAEQ,QAAQ,CAAS;IACjB,WAAW,CAAc;IAElC,YAAoB,OAAe,EAAE,UAAuB;QAC1D,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,EAAU;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC3C,2EAA2E;QAC3E,IAAI,KAAK,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YACnD,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACjE,CAAC;IAED;;;;;;OAMG;IACH,eAAe,CAAC,EAAU;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC3C,IAAI,KAAK,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YACnD,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,GAAG,GAAG,SAAS,GAAG,CAAC,CAAC;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CACxB,KAAK,EACL,MAAM,KAAK,CAAC,CAAC,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAC7C,CAAC;IACJ,CAAC;CACF"}
|