@kensio/pinyinjs 1.2.2 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/CHANGELOG.md +116 -3
  2. package/NOTICE +9 -0
  3. package/README.md +58 -9
  4. package/data/core.entries +1 -13
  5. package/data/core.freq +0 -0
  6. package/data/core.keys +1 -13
  7. package/data/full.entries +141 -131
  8. package/data/full.freq +0 -0
  9. package/data/full.keys +167 -157
  10. package/data/manifest.json +24 -9
  11. package/data/script.map +26543 -0
  12. package/data/standard.entries +1 -22
  13. package/data/standard.freq +0 -0
  14. package/data/standard.keys +2 -23
  15. package/dist/cli/arguments.d.ts +72 -0
  16. package/dist/cli/arguments.d.ts.map +1 -1
  17. package/dist/cli/arguments.js +110 -0
  18. package/dist/cli/arguments.js.map +1 -1
  19. package/dist/cli/commands.d.ts +11 -0
  20. package/dist/cli/commands.d.ts.map +1 -1
  21. package/dist/cli/commands.js +77 -1
  22. package/dist/cli/commands.js.map +1 -1
  23. package/dist/cli/environment.d.ts.map +1 -1
  24. package/dist/cli/environment.js +2 -1
  25. package/dist/cli/environment.js.map +1 -1
  26. package/dist/cli/help.d.ts.map +1 -1
  27. package/dist/cli/help.js +21 -0
  28. package/dist/cli/help.js.map +1 -1
  29. package/dist/cli/run.d.ts +8 -0
  30. package/dist/cli/run.d.ts.map +1 -1
  31. package/dist/cli/run.js +11 -1
  32. package/dist/cli/run.js.map +1 -1
  33. package/dist/decode/convert.d.ts +10 -0
  34. package/dist/decode/convert.d.ts.map +1 -1
  35. package/dist/decode/convert.js +12 -0
  36. package/dist/decode/convert.js.map +1 -1
  37. package/dist/decode/script.d.ts +108 -0
  38. package/dist/decode/script.d.ts.map +1 -0
  39. package/dist/decode/script.js +195 -0
  40. package/dist/decode/script.js.map +1 -0
  41. package/dist/dictionary/dictionary.d.ts +13 -1
  42. package/dist/dictionary/dictionary.d.ts.map +1 -1
  43. package/dist/dictionary/dictionary.js +18 -4
  44. package/dist/dictionary/dictionary.js.map +1 -1
  45. package/dist/dictionary/merge.d.ts.map +1 -1
  46. package/dist/dictionary/merge.js +23 -3
  47. package/dist/dictionary/merge.js.map +1 -1
  48. package/dist/dictionary/script-tables.d.ts +17 -0
  49. package/dist/dictionary/script-tables.d.ts.map +1 -0
  50. package/dist/dictionary/script-tables.js +275 -0
  51. package/dist/dictionary/script-tables.js.map +1 -0
  52. package/dist/dictionary/source.d.ts +18 -0
  53. package/dist/dictionary/source.d.ts.map +1 -1
  54. package/dist/dictionary/source.js +20 -0
  55. package/dist/dictionary/source.js.map +1 -1
  56. package/dist/format/slug.d.ts +156 -0
  57. package/dist/format/slug.d.ts.map +1 -0
  58. package/dist/format/slug.js +0 -0
  59. package/dist/format/slug.js.map +1 -0
  60. package/dist/index.d.ts +10 -1
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/index.js +6 -1
  63. package/dist/index.js.map +1 -1
  64. package/dist/script/conversion.d.ts +102 -0
  65. package/dist/script/conversion.d.ts.map +1 -0
  66. package/dist/script/conversion.js +194 -0
  67. package/dist/script/conversion.js.map +1 -0
  68. package/dist/script/glyphs.d.ts +95 -0
  69. package/dist/script/glyphs.d.ts.map +1 -0
  70. package/dist/script/glyphs.js +236 -0
  71. package/dist/script/glyphs.js.map +1 -0
  72. package/dist/sources/opencc.d.ts +32 -0
  73. package/dist/sources/opencc.d.ts.map +1 -0
  74. package/dist/sources/opencc.js +50 -0
  75. package/dist/sources/opencc.js.map +1 -0
  76. package/package.json +1 -1
@@ -0,0 +1,275 @@
1
+ import { toCharacters } from "../script/characters.js";
2
+ import { toCanonicalGlyphs } from "../script/glyphs.js";
3
+ import { conversionKey, convertCharacters, } from "../script/conversion.js";
4
+ /**
5
+ * The key standing for "at any reading".
6
+ */
7
+ const ANY = "";
8
+ /**
9
+ * How much of a reading's evidence must agree before it overrides the default.
10
+ *
11
+ * A reading that disagrees with the default only earns a line in the table if
12
+ * the sources are reasonably united about it. Below this it is noise — one
13
+ * mis-aligned entry, or a spelling nobody else uses — and storing it would
14
+ * make the conversion worse at the cost of bytes.
15
+ */
16
+ const READING_AGREEMENT = 0.8;
17
+ /**
18
+ * How much of a character's evidence a rival form needs to be worth reporting.
19
+ *
20
+ * This decides honesty rather than output: a form listed here makes the
21
+ * character *ambiguous*, so every conversion of it is reported as a guess
22
+ * unless a word or a reading settled it. Set too low and 和 is doubtful because
23
+ * Unihan knows 咊; set too high and 面 looks certain when only the word tells
24
+ * 面 from 麵. A twentieth of the evidence is enough to be a real spelling and
25
+ * far more than the one-off variants clear.
26
+ */
27
+ const RIVAL_SHARE = 0.05;
28
+ /**
29
+ * The pairings an entry attests, character by character.
30
+ *
31
+ * Entries whose two scripts are written with a different number of characters
32
+ * are skipped rather than aligned by guesswork, for the same reason
33
+ * `pairScripts` skips them: an invented alignment is evidence for a pairing
34
+ * nobody wrote.
35
+ */
36
+ function pairingsOf(entry) {
37
+ const hans = toCharacters(entry.hans);
38
+ const hant = toCharacters(entry.hant);
39
+ if (hans.length !== hant.length) {
40
+ return [];
41
+ }
42
+ const reading = entry.readings.cn;
43
+ // Only a reading with one syllable per character lines up; anything else
44
+ // (儿化 covering two, or a source disagreeing about length) is used as
45
+ // evidence for the pairing but not for any particular reading.
46
+ const isAligned = reading.length === hans.length;
47
+ return hans.map((character, at) => ({
48
+ hans: character,
49
+ /* c8 ignore next -- the two forms are known to be the same length */
50
+ hant: hant[at] ?? character,
51
+ key: isAligned ? conversionKey(reading[at]) : ANY,
52
+ }));
53
+ }
54
+ /**
55
+ * Tally one pairing under both its own reading and the any-reading key.
56
+ */
57
+ function tally(observed, from, to, key, weight) {
58
+ const byReading = observed.get(from) ?? new Map();
59
+ const keys = new Set([ANY, key]);
60
+ for (const at of keys) {
61
+ const counts = byReading.get(at) ?? new Map();
62
+ counts.set(to, (counts.get(to) ?? 0) + weight);
63
+ byReading.set(at, counts);
64
+ }
65
+ observed.set(from, byReading);
66
+ }
67
+ /**
68
+ * The commonest form in a tally, and what share of the evidence it holds.
69
+ *
70
+ * A tie prefers a form other than the character itself, and that matters more
71
+ * than it looks. Every character has an entry of its own where both scripts are
72
+ * the same string, so a character attested in exactly one cross-script word
73
+ * arrives here tied one-all against its own identity — 儁 against 㑺. The real
74
+ * pairing is the one somebody wrote down; the identity is an artefact of how
75
+ * the dictionary is keyed. `TraditionalTable` breaks the same tie the same way.
76
+ */
77
+ function commonest(from, counts) {
78
+ if (counts === undefined || counts.size === 0) {
79
+ return undefined;
80
+ }
81
+ let form = "";
82
+ let best = 0;
83
+ let total = 0;
84
+ for (const [candidate, count] of counts) {
85
+ total += count;
86
+ if (count > best ||
87
+ (count === best && form === from && candidate !== from)) {
88
+ form = candidate;
89
+ best = count;
90
+ }
91
+ }
92
+ return { form, share: best / total };
93
+ }
94
+ /**
95
+ * Reduce one character's observations to a default and its exceptions.
96
+ *
97
+ * A character with only one observed form needs no entry at all when that form
98
+ * is itself — simplification changed a minority of characters, and storing the
99
+ * other 40,000 as identities would be most of the file.
100
+ */
101
+ function conversionOf(from, byReading) {
102
+ const overall = commonest(from, byReading.get(ANY));
103
+ if (overall === undefined) {
104
+ return undefined;
105
+ }
106
+ const exceptions = new Map();
107
+ for (const [key, counts] of byReading) {
108
+ const at = commonest(from, counts);
109
+ if (key !== ANY &&
110
+ at !== undefined &&
111
+ at.form !== overall.form &&
112
+ at.share >= READING_AGREEMENT) {
113
+ exceptions.set(key, at.form);
114
+ }
115
+ }
116
+ const also = rivalsOf(byReading.get(ANY), overall.form, exceptions);
117
+ if (overall.form === from && exceptions.size === 0 && also.length === 0) {
118
+ return undefined;
119
+ }
120
+ return {
121
+ to: overall.form,
122
+ ...(exceptions.size > 0 && { byReading: exceptions }),
123
+ ...(also.length > 0 && { also }),
124
+ };
125
+ }
126
+ /**
127
+ * The forms a character takes often enough to make it genuinely ambiguous.
128
+ *
129
+ * Forms a reading already accounts for are left out: those are settled evidence
130
+ * rather than open questions, and repeating them here would report 发 as a
131
+ * guess in 头发 when the reading decided it.
132
+ */
133
+ function rivalsOf(counts, chosen, exceptions) {
134
+ if (counts === undefined) {
135
+ return [];
136
+ }
137
+ let total = 0;
138
+ for (const count of counts.values()) {
139
+ total += count;
140
+ }
141
+ const settled = new Set([chosen, ...exceptions.values()]);
142
+ return [...counts]
143
+ .filter(([form, count]) => !settled.has(form) && count / total >= RIVAL_SHARE)
144
+ .toSorted(([, left], [, right]) => right - left)
145
+ .map(([form]) => form);
146
+ }
147
+ /**
148
+ * Reduce every character's observations into a table.
149
+ */
150
+ function tableOf(observed) {
151
+ const table = new Map();
152
+ for (const [from, byReading] of observed) {
153
+ const conversion = conversionOf(from, byReading);
154
+ if (conversion !== undefined) {
155
+ table.set(from, conversion);
156
+ }
157
+ }
158
+ return table;
159
+ }
160
+ /**
161
+ * The readings a word is converted with, where they line up character by
162
+ * character.
163
+ */
164
+ function alignedReadings(entry) {
165
+ const characters = toCharacters(entry.hans).length;
166
+ return entry.readings.cn.length === characters ? entry.readings.cn : [];
167
+ }
168
+ /**
169
+ * Build the script conversion tables from the merged dictionary.
170
+ *
171
+ * The evidence is the merged entries rather than CC-CEDICT directly, which
172
+ * matters: the merge has already corrected neutral tones, repaired 儿化 and
173
+ * derived 繁體 forms for the phrase corpus, so what is counted here is what the
174
+ * dictionary actually holds rather than what one source said about it.
175
+ *
176
+ * Words are counted once each rather than weighted by frequency. A default is
177
+ * only there to keep the exception list short — every word it gets wrong is
178
+ * stored — so what matters is how many words agree, not how often they are
179
+ * said.
180
+ */
181
+ export function buildScriptTables(entries) {
182
+ const toTraditionalCounts = new Map();
183
+ const toSimplifiedCounts = new Map();
184
+ for (const entry of entries) {
185
+ for (const { hans, hant, key } of pairingsOf(entry)) {
186
+ tally(toTraditionalCounts, hans, hant, key, 1);
187
+ tally(toSimplifiedCounts, hant, hans, key, 1);
188
+ }
189
+ }
190
+ const toTraditional = tableOf(toTraditionalCounts);
191
+ const toSimplified = tableOf(toSimplifiedCounts);
192
+ // Only the words the character tables get wrong. Everything else is already
193
+ // right and would be bytes spent restating it.
194
+ //
195
+ // Single characters are deliberately excluded. A one-character entry is not
196
+ // independent evidence about that character — it is one of the observations
197
+ // the character table was built from — so an "exception" for it is simply the
198
+ // aggregate being overruled by one of its own inputs. 和 has a rare variant
199
+ // 咊 that Unihan knows and nobody writes; keeping the exception would convert
200
+ // every 和 to it, against the thousands of words that say otherwise.
201
+ const traditionalWords = new Map();
202
+ const simplifiedWords = new Map();
203
+ for (const entry of entries) {
204
+ if (toCharacters(entry.hans).length < 2) {
205
+ continue;
206
+ }
207
+ const readings = alignedReadings(entry);
208
+ if (convertCharacters(toTraditional, entry.hans, readings) !== entry.hant) {
209
+ traditionalWords.set(entry.hans, entry.hant);
210
+ }
211
+ if (convertCharacters(toSimplified, entry.hant, readings) !== entry.hans) {
212
+ simplifiedWords.set(entry.hant, entry.hans);
213
+ }
214
+ }
215
+ return {
216
+ toTraditional,
217
+ toSimplified,
218
+ traditionalWords,
219
+ simplifiedWords,
220
+ ...scriptOnlyCharacters(entries),
221
+ };
222
+ }
223
+ /**
224
+ * The characters each script writes and the other does not.
225
+ *
226
+ * What settles a text's script is which characters *occur* in each: 发 is
227
+ * 简体-only because no 繁體 word is written with it, and 髮 is 繁體-only for the
228
+ * mirror reason. A character both scripts use — the great majority — settles
229
+ * nothing and belongs in neither set.
230
+ *
231
+ * Only entries whose two forms **differ** are counted, and that restriction is
232
+ * what makes this work at all. `hans` is the dictionary's key rather than a
233
+ * claim about script, so every 繁體 character is also some entry's `hans` — 髮
234
+ * has a character entry of its own, with 髮 on both sides. Counting those would
235
+ * put every character in both sets and leave both empty.
236
+ *
237
+ * It also settles the genuinely two-sided characters correctly. 干 is a 简体
238
+ * form of 幹 and 乾 *and* a 繁體 character in its own right, so it appears on
239
+ * both sides of 干扰/干擾 and lands in neither set, which is the honest answer.
240
+ *
241
+ * Both sides are folded to their canonical glyph forms first. The phrase corpus
242
+ * is nominally 简体 and writes a few hundred headwords with 繁體 variants — 衞生,
243
+ * 鹫峯寺 — and taking those at face value put 衞 and 峯 in the 简体-only set. A
244
+ * text written 衞生 was then detected as 简体 and left alone when it was asked
245
+ * for 简体, which is the opposite of what it needed.
246
+ */
247
+ function scriptOnlyCharacters(entries) {
248
+ const inHans = new Set();
249
+ const inHant = new Set();
250
+ for (const entry of entries) {
251
+ // A 繁體 form that differs from the 简体 one only by glyph normalisation is
252
+ // not evidence about script — 衞生 and 衛生 are two 繁體 spellings of one
253
+ // word, and the merge keys the second so the first can be found. Counting
254
+ // it would put that entry's 简体 characters on the 繁體 side, which is how
255
+ // 发 stopped being 简体-only.
256
+ const canonicalHans = toCanonicalGlyphs(entry.hans);
257
+ const forms = [entry.hant, ...(entry.hantVariants ?? [])].filter((form) => form !== entry.hans && form !== canonicalHans);
258
+ if (forms.length === 0) {
259
+ continue;
260
+ }
261
+ const hansCharacters = toCharacters(canonicalHans);
262
+ for (const character of hansCharacters) {
263
+ inHans.add(character);
264
+ }
265
+ const hantCharacters = forms.flatMap((form) => toCharacters(toCanonicalGlyphs(form)));
266
+ for (const character of hantCharacters) {
267
+ inHant.add(character);
268
+ }
269
+ }
270
+ return {
271
+ hansOnly: new Set([...inHans].filter((c) => !inHant.has(c))),
272
+ hantOnly: new Set([...inHant].filter((c) => !inHans.has(c))),
273
+ };
274
+ }
275
+ //# sourceMappingURL=script-tables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"script-tables.js","sourceRoot":"","sources":["../../src/dictionary/script-tables.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type ScriptTables } from "../script/conversion.js";
1
2
  import type { DictionaryArtifact } from "./artifact.js";
2
3
  import { Dictionary } from "./dictionary.js";
3
4
  import type { Tier } from "./tiers.js";
@@ -42,4 +43,21 @@ export declare function loadArtifact(source: DictionarySource, tier: Tier): Prom
42
43
  * Load a tier and wrap it in a {@link Dictionary}.
43
44
  */
44
45
  export declare function loadDictionary(source: DictionarySource, tier: Tier): Promise<Dictionary>;
46
+ /**
47
+ * The file the script conversion tables live in.
48
+ *
49
+ * One file rather than one per table, and outside the tiers rather than
50
+ * repeated in each: script conversion does not get more accurate with a bigger
51
+ * dictionary the way reading does, so there is nothing to tier.
52
+ */
53
+ export declare const SCRIPT_FILE = "script.map";
54
+ /**
55
+ * Load the script conversion tables.
56
+ *
57
+ * Separate from the dictionary on purpose. A caller converting hanzi to pinyin
58
+ * — which is most of them — never fetches this, and a caller converting between
59
+ * the scripts fetches about 100 KB compressed rather than carrying it inside
60
+ * every tier. See SCRIPTS-AND-LOCALES.md.
61
+ */
62
+ export declare function loadScriptTables(source: DictionarySource): Promise<ScriptTables>;
45
63
  //# sourceMappingURL=source.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../src/dictionary/source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,0CAA0C;IAC1C,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACjD,2CAA2C;IAC3C,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CACvD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B,CAMA;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,CAqB7D;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,kBAAkB,CAAC,CAQ7B;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,UAAU,CAAC,CAErB"}
1
+ {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../src/dictionary/source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,0CAA0C;IAC1C,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACjD,2CAA2C;IAC3C,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CACvD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B,CAMA;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,CAqB7D;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,kBAAkB,CAAC,CAQ7B;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,UAAU,CAAC,CAErB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,eAAe,CAAC;AAExC;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,YAAY,CAAC,CAEvB"}
@@ -1,3 +1,4 @@
1
+ import { readScriptTables } from "../script/conversion.js";
1
2
  import { Dictionary } from "./dictionary.js";
2
3
  /**
3
4
  * The three files a tier is made of.
@@ -57,4 +58,23 @@ export async function loadArtifact(source, tier) {
57
58
  export async function loadDictionary(source, tier) {
58
59
  return Dictionary.from(await loadArtifact(source, tier));
59
60
  }
61
+ /**
62
+ * The file the script conversion tables live in.
63
+ *
64
+ * One file rather than one per table, and outside the tiers rather than
65
+ * repeated in each: script conversion does not get more accurate with a bigger
66
+ * dictionary the way reading does, so there is nothing to tier.
67
+ */
68
+ export const SCRIPT_FILE = "script.map";
69
+ /**
70
+ * Load the script conversion tables.
71
+ *
72
+ * Separate from the dictionary on purpose. A caller converting hanzi to pinyin
73
+ * — which is most of them — never fetches this, and a caller converting between
74
+ * the scripts fetches about 100 KB compressed rather than carrying it inside
75
+ * every tier. See SCRIPTS-AND-LOCALES.md.
76
+ */
77
+ export async function loadScriptTables(source) {
78
+ return readScriptTables(await source.text(SCRIPT_FILE));
79
+ }
60
80
  //# sourceMappingURL=source.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"source.js","sourceRoot":"","sources":["../../src/dictionary/source.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAkB7C;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,IAAU;IAKlC,OAAO;QACL,IAAI,EAAE,GAAG,IAAI,OAAO;QACpB,OAAO,EAAE,GAAG,IAAI,UAAU;QAC1B,WAAW,EAAE,GAAG,IAAI,OAAO;KAC5B,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,MAAM,EAAE,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;IAC9E,MAAM,GAAG,GAAG,KAAK,EAAE,IAAY,EAAqB,EAAE;QACpD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CACb,YAAY,EAAE,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,UAAU,EAAE,CACjF,CAAC;QACJ,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;IACF,OAAO;QACL,IAAI,EAAE,KAAK,EAAE,IAAY,EAAmB,EAAE;YAC5C,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;YACjC,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;QACzB,CAAC;QACD,KAAK,EAAE,KAAK,EAAE,IAAY,EAAuB,EAAE;YACjD,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;YACjC,OAAO,IAAI,UAAU,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QACtD,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAwB,EACxB,IAAU;IAEV,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;KAChC,CAAC,CAAC;IACH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAwB,EACxB,IAAU;IAEV,OAAO,UAAU,CAAC,IAAI,CAAC,MAAM,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AAC3D,CAAC"}
1
+ {"version":3,"file":"source.js","sourceRoot":"","sources":["../../src/dictionary/source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAqB,MAAM,yBAAyB,CAAC;AAE9E,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAkB7C;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,IAAU;IAKlC,OAAO;QACL,IAAI,EAAE,GAAG,IAAI,OAAO;QACpB,OAAO,EAAE,GAAG,IAAI,UAAU;QAC1B,WAAW,EAAE,GAAG,IAAI,OAAO;KAC5B,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,MAAM,EAAE,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;IAC9E,MAAM,GAAG,GAAG,KAAK,EAAE,IAAY,EAAqB,EAAE;QACpD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CACb,YAAY,EAAE,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,UAAU,EAAE,CACjF,CAAC;QACJ,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;IACF,OAAO;QACL,IAAI,EAAE,KAAK,EAAE,IAAY,EAAmB,EAAE;YAC5C,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;YACjC,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;QACzB,CAAC;QACD,KAAK,EAAE,KAAK,EAAE,IAAY,EAAuB,EAAE;YACjD,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;YACjC,OAAO,IAAI,UAAU,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QACtD,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAwB,EACxB,IAAU;IAEV,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;KAChC,CAAC,CAAC;IACH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAwB,EACxB,IAAU;IAEV,OAAO,UAAU,CAAC,IAAI,CAAC,MAAM,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,YAAY,CAAC;AAExC;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAwB;IAExB,OAAO,gBAAgB,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,156 @@
1
+ import { type NumberStyle } from "../decode/convert.js";
2
+ import type { SandhiOptions } from "../decode/sandhi.js";
3
+ import type { Dictionary } from "../dictionary/dictionary.js";
4
+ import type { Locale } from "../script/script.js";
5
+ /**
6
+ * Whether a slug carries its tones.
7
+ *
8
+ * `numbers` writes them as digits — 中文 is `zhong1wen2` — and `none` leaves
9
+ * them off. Tones are on by default because dropping them collides: there are
10
+ * roughly 400 toneless syllables against 1300 toned ones, so a toneless slug
11
+ * runs 树, 书 and 输 together as `shu`. They are not a guarantee, though —
12
+ * 权利 and 权力 are both `quan2li4`, and only {@link SlugOptions.hash} tells
13
+ * those apart.
14
+ */
15
+ export type SlugTones = "numbers" | "none";
16
+ /**
17
+ * Whether the syllables inside one word are separated.
18
+ *
19
+ * `join` writes a word as a word — 中文 is `zhong1wen2` — which is what 正词法
20
+ * asks for and what a reader expects in a URL. `separate` cuts every syllable
21
+ * apart, `zhong1-wen2`, for a caller matching a slug syllable by syllable.
22
+ */
23
+ export type SlugSyllables = "join" | "separate";
24
+ /**
25
+ * How ü is written where the alphabet has no room for it.
26
+ *
27
+ * `v` is the input-method convention and keeps 绿 `lv4` apart from 路 `lu4`;
28
+ * `u` is prettier and merges them.
29
+ */
30
+ export type SlugUmlaut = "v" | "u";
31
+ /**
32
+ * How a slug is built.
33
+ */
34
+ export interface SlugOptions {
35
+ /** Whether tones are written. Defaults to `numbers`. */
36
+ readonly tones?: SlugTones;
37
+ /**
38
+ * What goes between words. Defaults to `-`.
39
+ *
40
+ * Written as given rather than checked, because the separator is the one
41
+ * place a caller decides what kind of identifier this is: `-` for a URL, `_`
42
+ * for a name in code, and the empty string for a key to match against.
43
+ */
44
+ readonly separator?: string;
45
+ /** Whether the syllables within a word are separated. Defaults to `join`. */
46
+ readonly syllables?: SlugSyllables;
47
+ /** How ü is written. Defaults to `v`. */
48
+ readonly umlaut?: SlugUmlaut;
49
+ /**
50
+ * What to do with the digits in a text. Defaults to `keep`.
51
+ *
52
+ * The opposite of what a conversion defaults to, and deliberately: a slug for
53
+ * iPhone 15 评测 should be `iphone-15-ping2ce4` rather than
54
+ * `iphone-shi2wu3-ping2ce4`, because the digits are how anyone would look for
55
+ * it. `read` says them, for a caller that wants the text spoken.
56
+ */
57
+ readonly numbers?: NumberStyle;
58
+ /**
59
+ * A short hash of the source text on the end. Defaults to none.
60
+ *
61
+ * `true` for {@link DEFAULT_HASH_LENGTH} characters, or a length of your own,
62
+ * up to {@link LONGEST_HASH}. See {@link hashOf} for what is hashed and why
63
+ * it is the hanzi rather than the pinyin.
64
+ *
65
+ * Unconditional rather than only where two slugs collide: a function that
66
+ * cannot see the rest of your corpus cannot know that they did. It narrows
67
+ * collisions rather than closing them, and checking the slug you generated
68
+ * against the ones you have stored is still yours to do.
69
+ */
70
+ readonly hash?: number | boolean;
71
+ /**
72
+ * The longest the slug may be, counting any hash. Defaults to no limit.
73
+ *
74
+ * Cut at a word boundary, so a limit lands between words rather than through
75
+ * the middle of one. A single word longer than the limit is cut where the
76
+ * limit falls, since there is nowhere else to cut it, and the hash is never
77
+ * what gets dropped.
78
+ */
79
+ readonly maxLength?: number;
80
+ /**
81
+ * What to write where a text slugs to nothing. Defaults to the empty string.
82
+ *
83
+ * 《》! has no letters in it, and neither does an empty text.
84
+ */
85
+ readonly fallback?: string;
86
+ /** Which reading standard to use. Defaults to `zh-CN`. */
87
+ readonly locale?: Locale;
88
+ /** Which tone sandhi to apply. Defaults to what a conversion applies. */
89
+ readonly sandhi?: SandhiOptions;
90
+ }
91
+ /**
92
+ * How many characters {@link SlugOptions.hash} writes when simply asked for.
93
+ *
94
+ * Four base-36 characters is 1.7 million values, which is far more than it
95
+ * looks: two texts only collide when their slugs *and* their hashes match, so
96
+ * the suffix is only ever telling apart the handful of texts sharing one slug,
97
+ * not the whole corpus.
98
+ */
99
+ export declare const DEFAULT_HASH_LENGTH = 4;
100
+ /**
101
+ * The longest hash there is anything to fill.
102
+ *
103
+ * {@link hashOf} is 32 bits wide, and 36⁷ is the last power of 36 under 2³²:
104
+ * asking for an eighth character would add a place that some values can never
105
+ * reach, which looks like more uniqueness while being none.
106
+ */
107
+ export declare const LONGEST_HASH = 7;
108
+ /**
109
+ * A 32-bit hash of a text, written in the letters and digits a slug allows.
110
+ *
111
+ * **The source text is what is hashed, not the pinyin.** Two texts needing a
112
+ * hash to tell them apart are, by definition, ones the pinyin already ran
113
+ * together: 权利 and 权力 are both `quan2li4`, and hashing that would give them
114
+ * the same suffix and settle nothing. Hashing the hanzi also means the suffix
115
+ * does not move when a later release reads a word differently, so a slug's tail
116
+ * is the stable half of it.
117
+ *
118
+ * FNV-1a with murmur3's finalizer, which is neither cryptographic nor trying to
119
+ * be: nothing here resists an attacker, and all that is being asked of it is
120
+ * that two texts a reader would call different land on different suffixes.
121
+ * Written out rather than reached for because the package has no runtime
122
+ * dependencies and the core imports no Node built-ins, and `crypto.subtle` —
123
+ * the one hash a browser ships — is asynchronous, which this is not.
124
+ *
125
+ * Normalised first, so that text typed as a decomposed sequence hashes as the
126
+ * same text once composed. 简体 and 繁體 are deliberately *not* folded together:
127
+ * a caller who wrote 头发 and 頭髮 separately meant them separately.
128
+ */
129
+ export declare function hashOf(text: string, length: number): string;
130
+ /**
131
+ * Convert hanzi to a URL-safe slug.
132
+ *
133
+ * 我想学中文。 is `wo3-xiang3-xue2-zhong1wen2`, and the reason to ask a
134
+ * dictionary for it rather than a string is everything a slugifier working
135
+ * after the fact cannot recover: 银行 is `yin2hang2` and not `yin2xing2`
136
+ * because the word was decoded rather than the characters looked up one at a
137
+ * time; the hyphens fall between words because 正词法 grouping put them there;
138
+ * and 西安 is `xi-an` rather than `xian` — a different word — because the
139
+ * syllable boundary was still known when the slug was cut.
140
+ *
141
+ * Everything that is not Han is folded into the same alphabet and kept, so
142
+ * iPhone 15 评测 is `iphone-15-ping2ce4`, and everything else — punctuation,
143
+ * emoji, marks of any script — becomes a boundary between words.
144
+ *
145
+ * The options generalise it past URLs: a separator of `_` writes a name in
146
+ * code, and one of the empty string with `tones: "none"` writes a key to match
147
+ * a search box against, where someone typing `zhongwen` should find 中文. See
148
+ * the slug page in `docs/` for those written out.
149
+ *
150
+ * **A slug is not unique and this cannot make it one.** Tones narrow the
151
+ * collisions, {@link SlugOptions.hash} narrows them much further, and neither
152
+ * is a guarantee; a slug that has to be unique still has to be checked against
153
+ * the ones already stored.
154
+ */
155
+ export declare function slug(dictionary: Dictionary, text: string, options?: SlugOptions): string;
156
+ //# sourceMappingURL=slug.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slug.d.ts","sourceRoot":"","sources":["../../src/format/slug.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGlD;;;;;;;;;GASG;AACH,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAE3C;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,UAAU,CAAC;AAEhD;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAAG,GAAG,GAAG,GAAG,CAAC;AAEnC;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,wDAAwD;IACxD,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;IAC3B;;;;;;OAMG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,6EAA6E;IAC7E,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC;IACnC,yCAAyC;IACzC,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;IAC7B;;;;;;;OAOG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC;IAC/B;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC;;;;;;;OAOG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,yEAAyE;IACzE,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;CACjC;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,IAAI,CAAC;AAwK9B;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAgB3D;AA0BD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,IAAI,CAClB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,WAAgB,GACxB,MAAM,CAuBR"}
Binary file
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slug.js","sourceRoot":"","sources":["../../src/format/slug.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -25,7 +25,7 @@ export { pairScripts, TraditionalTable } from "./dictionary/traditional.js";
25
25
  export type { ScriptPairing } from "./dictionary/traditional.js";
26
26
  export { Dictionary } from "./dictionary/dictionary.js";
27
27
  export type { WordEntry } from "./dictionary/dictionary.js";
28
- export { fetchSource, loadArtifact, loadDictionary, tierFiles, } from "./dictionary/source.js";
28
+ export { fetchSource, loadArtifact, loadDictionary, loadScriptTables, SCRIPT_FILE, tierFiles, } from "./dictionary/source.js";
29
29
  export type { DictionarySource } from "./dictionary/source.js";
30
30
  export { convert, convertGreedily, convertPieces, joinPieces, } from "./decode/convert.js";
31
31
  export type { ConvertedPiece, ConvertOptions } from "./decode/convert.js";
@@ -35,7 +35,14 @@ export { decodeReadings, decodeRun, decodeRunScored, decodeSpacing, } from "./de
35
35
  export { convertToHtml, toHtml } from "./format/html.js";
36
36
  export { convertToWadeGiles, toTranscription, type TranscriptionOptions, type WriteWord, } from "./format/transcription.js";
37
37
  export type { HtmlOptions } from "./format/html.js";
38
+ export { slug } from "./format/slug.js";
39
+ export type { SlugOptions, SlugSyllables, SlugTones, SlugUmlaut, } from "./format/slug.js";
38
40
  export { decodeGreedily } from "./decode/greedy.js";
41
+ export { isUncertainChoice, SCRIPT_EVIDENCE, SCRIPT_TARGETS, toScript, toScriptPieces, } from "./decode/script.js";
42
+ export type { ScriptChoice, ScriptConversion, ScriptEvidence, ScriptOptions, ScriptTarget, } from "./decode/script.js";
43
+ export { conversionKey, convertCharacter, convertCharacters, formsOf, isAmbiguousCharacter, readConversionKey, readScriptTables, writeScriptTables, } from "./script/conversion.js";
44
+ export type { CharacterConversion, ScriptTables } from "./script/conversion.js";
45
+ export { buildScriptTables } from "./dictionary/script-tables.js";
39
46
  export { allEdges, buildLattice, cutPoints, READING_CHARGE, } from "./decode/lattice.js";
40
47
  export type { Lattice, LatticeEdge } from "./decode/lattice.js";
41
48
  export { isSettled, projectReadings, settledUnits, unitsOf, } from "./decode/locking.js";
@@ -84,6 +91,8 @@ export type { PunctuationStyle } from "./orthography/punctuation.js";
84
91
  export { isSeparableStart, SEPARABLE_VOWELS } from "./syllable/separation.js";
85
92
  export { detectScript, DEFAULT_LOCALE, isLocale, isScript, LOCALES, SCRIPTS, } from "./script/script.js";
86
93
  export type { Locale, Script } from "./script/script.js";
94
+ export { DEFAULT_REGION, isReadingSensitive, REGIONS, toCanonicalGlyph, toCanonicalGlyphs, toRegionalGlyph, toRegionalGlyphs, } from "./script/glyphs.js";
95
+ export type { Region } from "./script/glyphs.js";
87
96
  export { ATTESTED_SYLLABLES, DICTIONARY_SYLLABLES, isAttestedTone, RARE_SYLLABLES, SYLLABLE_TONES, } from "./syllable/inventory.js";
88
97
  export { FINALS, INITIALS, isFinal, isInitial, isPalatalInitial, } from "./syllable/phonology.js";
89
98
  export type { Final, Initial } from "./syllable/phonology.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -16,13 +16,17 @@ export { OVERRIDE_READINGS, READING_OVERRIDES, readOverrideReading, } from "./di
16
16
  export { readAlignedReading, readDictionaryReading, } from "./dictionary/reading.js";
17
17
  export { pairScripts, TraditionalTable } from "./dictionary/traditional.js";
18
18
  export { Dictionary } from "./dictionary/dictionary.js";
19
- export { fetchSource, loadArtifact, loadDictionary, tierFiles, } from "./dictionary/source.js";
19
+ export { fetchSource, loadArtifact, loadDictionary, loadScriptTables, SCRIPT_FILE, tierFiles, } from "./dictionary/source.js";
20
20
  export { convert, convertGreedily, convertPieces, joinPieces, } from "./decode/convert.js";
21
21
  export { isUncertain, scoreReadings } from "./decode/confidence.js";
22
22
  export { decodeReadings, decodeRun, decodeRunScored, decodeSpacing, } from "./decode/decode.js";
23
23
  export { convertToHtml, toHtml } from "./format/html.js";
24
24
  export { convertToWadeGiles, toTranscription, } from "./format/transcription.js";
25
+ export { slug } from "./format/slug.js";
25
26
  export { decodeGreedily } from "./decode/greedy.js";
27
+ export { isUncertainChoice, SCRIPT_EVIDENCE, SCRIPT_TARGETS, toScript, toScriptPieces, } from "./decode/script.js";
28
+ export { conversionKey, convertCharacter, convertCharacters, formsOf, isAmbiguousCharacter, readConversionKey, readScriptTables, writeScriptTables, } from "./script/conversion.js";
29
+ export { buildScriptTables } from "./dictionary/script-tables.js";
26
30
  export { allEdges, buildLattice, cutPoints, READING_CHARGE, } from "./decode/lattice.js";
27
31
  export { isSettled, projectReadings, settledUnits, unitsOf, } from "./decode/locking.js";
28
32
  export { applyEdgeRules, tagOf, wordEndingAt, wordStartingAt, } from "./decode/rules.js";
@@ -50,6 +54,7 @@ export { rewriteParts } from "./orthography/parts.js";
50
54
  export { toLatinPunctuation, toLatinPunctuationParts, } from "./orthography/punctuation.js";
51
55
  export { isSeparableStart, SEPARABLE_VOWELS } from "./syllable/separation.js";
52
56
  export { detectScript, DEFAULT_LOCALE, isLocale, isScript, LOCALES, SCRIPTS, } from "./script/script.js";
57
+ export { DEFAULT_REGION, isReadingSensitive, REGIONS, toCanonicalGlyph, toCanonicalGlyphs, toRegionalGlyph, toRegionalGlyphs, } from "./script/glyphs.js";
53
58
  export { ATTESTED_SYLLABLES, DICTIONARY_SYLLABLES, isAttestedTone, RARE_SYLLABLES, SYLLABLE_TONES, } from "./syllable/inventory.js";
54
59
  export { FINALS, INITIALS, isFinal, isInitial, isPalatalInitial, } from "./syllable/phonology.js";
55
60
  export { readWord, splitSyllables } from "./syllable/split.js";