@finbheara/names 0.9.2 → 0.11.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.
- package/README.md +38 -1
- package/dist/chunks/{index-0vg56t5v.js → index-61wk7v9c.js} +3 -3
- package/dist/chunks/{index-0qptxnwh.js → index-7vvt5hhy.js} +13 -2
- package/dist/chunks/{index-0qptxnwh.js.map → index-7vvt5hhy.js.map} +2 -2
- package/dist/chunks/index-ebebeamh.js +446 -0
- package/dist/chunks/index-ebebeamh.js.map +10 -0
- package/dist/chunks/{index-fzzq5txh.js → index-jx97zxtz.js} +4 -4
- package/dist/chunks/{index-fzzq5txh.js.map → index-jx97zxtz.js.map} +3 -3
- package/dist/chunks/{index-2fsdvhaf.js → index-kw6gbrnq.js} +2 -2
- package/dist/chunks/{index-knrkej0f.js → index-n4t288kj.js} +72 -8
- package/dist/chunks/{index-knrkej0f.js.map → index-n4t288kj.js.map} +5 -3
- package/dist/chunks/{index-d4wr471g.js → index-pncn9y2r.js} +2 -2
- package/dist/chunks/index-qsznkk4s.js +3 -0
- package/dist/chunks/index-qsznkk4s.js.map +9 -0
- package/dist/chunks/{index-852w8w1s.js → index-r5fp3znj.js} +3 -3
- package/dist/chunks/phrase-672g18kw.js +11 -0
- package/dist/classifier/index.js +3 -3
- package/dist/cli/census.js +4 -4
- package/dist/index.js +25 -8
- package/dist/index.js.map +1 -1
- package/dist/lexicon/index.js +1 -1
- package/dist/measure/index.js +4 -4
- package/dist/normalize/index.js +17 -5
- package/dist/normalize/index.js.map +1 -1
- package/dist/phonetic/index.js +10 -0
- package/dist/phonetic/index.js.map +9 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/normalize/block-keys.d.ts +53 -0
- package/dist/types/normalize/index.d.ts +2 -0
- package/dist/types/normalize/name-columns.d.ts +51 -0
- package/dist/types/phonetic/double-metaphone.d.ts +25 -0
- package/dist/types/phonetic/index.d.ts +11 -0
- package/names.txt +11 -0
- package/package.json +8 -2
- package/dist/chunks/phrase-dczgr4vs.js +0 -11
- /package/dist/chunks/{index-0vg56t5v.js.map → index-61wk7v9c.js.map} +0 -0
- /package/dist/chunks/{index-2fsdvhaf.js.map → index-kw6gbrnq.js.map} +0 -0
- /package/dist/chunks/{index-d4wr471g.js.map → index-pncn9y2r.js.map} +0 -0
- /package/dist/chunks/{index-852w8w1s.js.map → index-r5fp3znj.js.map} +0 -0
- /package/dist/chunks/{phrase-dczgr4vs.js.map → phrase-672g18kw.js.map} +0 -0
|
@@ -0,0 +1,446 @@
|
|
|
1
|
+
// src/phonetic/double-metaphone.ts
|
|
2
|
+
function isVowel(c) {
|
|
3
|
+
return c !== "" && "AEIOUY".includes(c);
|
|
4
|
+
}
|
|
5
|
+
function isSlavoGermanic(w) {
|
|
6
|
+
return /W|K|CZ|WITZ/.test(w);
|
|
7
|
+
}
|
|
8
|
+
function doubleMetaphone2(word) {
|
|
9
|
+
const w = (word ?? "").toUpperCase();
|
|
10
|
+
const length = w.length;
|
|
11
|
+
const last = length - 1;
|
|
12
|
+
const slavo = isSlavoGermanic(w);
|
|
13
|
+
let primary = "";
|
|
14
|
+
let secondary = "";
|
|
15
|
+
const at = (i) => w.charAt(i);
|
|
16
|
+
const stringAt = (start, len, list) => {
|
|
17
|
+
if (start < 0 || start >= length)
|
|
18
|
+
return false;
|
|
19
|
+
return list.includes(w.substring(start, start + len));
|
|
20
|
+
};
|
|
21
|
+
const add = (p, s) => {
|
|
22
|
+
primary += p;
|
|
23
|
+
secondary += s === undefined ? p : s;
|
|
24
|
+
};
|
|
25
|
+
let n = 0;
|
|
26
|
+
if (stringAt(0, 2, ["GN", "KN", "PN", "WR", "PS"]))
|
|
27
|
+
n = 1;
|
|
28
|
+
if (at(0) === "X") {
|
|
29
|
+
add("S");
|
|
30
|
+
n = 1;
|
|
31
|
+
}
|
|
32
|
+
while (n < length && (primary.length < 4 || secondary.length < 4)) {
|
|
33
|
+
const c = at(n);
|
|
34
|
+
switch (c) {
|
|
35
|
+
case "A":
|
|
36
|
+
case "E":
|
|
37
|
+
case "I":
|
|
38
|
+
case "O":
|
|
39
|
+
case "U":
|
|
40
|
+
case "Y":
|
|
41
|
+
if (n === 0)
|
|
42
|
+
add("A");
|
|
43
|
+
n += 1;
|
|
44
|
+
break;
|
|
45
|
+
case "B":
|
|
46
|
+
add("P");
|
|
47
|
+
n += at(n + 1) === "B" ? 2 : 1;
|
|
48
|
+
break;
|
|
49
|
+
case "C":
|
|
50
|
+
if (n > 1 && !isVowel(at(n - 2)) && stringAt(n - 1, 3, ["ACH"]) && at(n + 2) !== "I" && (at(n + 2) !== "E" || stringAt(n - 2, 6, ["BACHER", "MACHER"]))) {
|
|
51
|
+
add("K");
|
|
52
|
+
n += 2;
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
if (n === 0 && stringAt(0, 6, ["CAESAR"])) {
|
|
56
|
+
add("S");
|
|
57
|
+
n += 2;
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
if (stringAt(n, 4, ["CHIA"])) {
|
|
61
|
+
add("K");
|
|
62
|
+
n += 2;
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
if (stringAt(n, 2, ["CH"])) {
|
|
66
|
+
if (n > 0 && stringAt(n, 4, ["CHAE"])) {
|
|
67
|
+
add("K", "X");
|
|
68
|
+
n += 2;
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
if (n === 0 && (stringAt(n + 1, 5, ["HARAC", "HARIS"]) || stringAt(n + 1, 3, ["HOR", "HYM", "HIA", "HEM"])) && !stringAt(0, 5, ["CHORE"])) {
|
|
72
|
+
add("K");
|
|
73
|
+
n += 2;
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
if (stringAt(0, 4, ["VAN ", "VON "]) || stringAt(0, 3, ["SCH"]) || stringAt(n - 2, 6, ["ORCHES", "ARCHIT", "ORCHID"]) || stringAt(n + 2, 1, ["T", "S"]) || (stringAt(n - 1, 1, ["A", "O", "U", "E"]) || n === 0) && stringAt(n + 2, 1, ["L", "R", "N", "M", "B", "H", "F", "V", "W", " "])) {
|
|
77
|
+
add("K");
|
|
78
|
+
} else if (n > 0) {
|
|
79
|
+
if (stringAt(0, 2, ["MC"]))
|
|
80
|
+
add("K");
|
|
81
|
+
else
|
|
82
|
+
add("X", "K");
|
|
83
|
+
} else {
|
|
84
|
+
add("X");
|
|
85
|
+
}
|
|
86
|
+
n += 2;
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
if (stringAt(n, 2, ["CZ"]) && !stringAt(n - 2, 4, ["WICZ"])) {
|
|
90
|
+
add("S", "X");
|
|
91
|
+
n += 2;
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
if (stringAt(n + 1, 3, ["CIA"])) {
|
|
95
|
+
add("X");
|
|
96
|
+
n += 3;
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
if (stringAt(n, 2, ["CC"]) && !(n === 1 && at(0) === "M")) {
|
|
100
|
+
if (stringAt(n + 2, 1, ["I", "E", "H"]) && !stringAt(n + 2, 2, ["HU"])) {
|
|
101
|
+
if (n === 1 && at(n - 1) === "A" || stringAt(n - 1, 5, ["UCCEE", "UCCES"])) {
|
|
102
|
+
add("KS");
|
|
103
|
+
} else {
|
|
104
|
+
add("X");
|
|
105
|
+
}
|
|
106
|
+
n += 3;
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
add("K");
|
|
110
|
+
n += 2;
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
if (stringAt(n, 2, ["CK", "CG", "CQ"])) {
|
|
114
|
+
add("K");
|
|
115
|
+
n += 2;
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
if (stringAt(n, 2, ["CI", "CE", "CY"])) {
|
|
119
|
+
if (stringAt(n, 3, ["CIO", "CIE", "CIA"]))
|
|
120
|
+
add("S", "X");
|
|
121
|
+
else
|
|
122
|
+
add("S");
|
|
123
|
+
n += 2;
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
add("K");
|
|
127
|
+
if (stringAt(n + 1, 2, [" C", " Q", " G"]))
|
|
128
|
+
n += 3;
|
|
129
|
+
else if (stringAt(n + 1, 1, ["C", "K", "Q"]) && !stringAt(n + 1, 2, ["CE", "CI"]))
|
|
130
|
+
n += 2;
|
|
131
|
+
else
|
|
132
|
+
n += 1;
|
|
133
|
+
break;
|
|
134
|
+
case "D":
|
|
135
|
+
if (stringAt(n, 2, ["DG"])) {
|
|
136
|
+
if (stringAt(n + 2, 1, ["I", "E", "Y"])) {
|
|
137
|
+
add("J");
|
|
138
|
+
n += 3;
|
|
139
|
+
} else {
|
|
140
|
+
add("TK");
|
|
141
|
+
n += 2;
|
|
142
|
+
}
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
if (stringAt(n, 2, ["DT", "DD"])) {
|
|
146
|
+
add("T");
|
|
147
|
+
n += 2;
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
150
|
+
add("T");
|
|
151
|
+
n += 1;
|
|
152
|
+
break;
|
|
153
|
+
case "F":
|
|
154
|
+
add("F");
|
|
155
|
+
n += at(n + 1) === "F" ? 2 : 1;
|
|
156
|
+
break;
|
|
157
|
+
case "G":
|
|
158
|
+
if (at(n + 1) === "H") {
|
|
159
|
+
if (n > 0 && !isVowel(at(n - 1))) {
|
|
160
|
+
add("K");
|
|
161
|
+
n += 2;
|
|
162
|
+
break;
|
|
163
|
+
}
|
|
164
|
+
if (n === 0) {
|
|
165
|
+
if (at(n + 2) === "I")
|
|
166
|
+
add("J");
|
|
167
|
+
else
|
|
168
|
+
add("K");
|
|
169
|
+
n += 2;
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
if (n > 1 && stringAt(n - 2, 1, ["B", "H", "D"]) || n > 2 && stringAt(n - 3, 1, ["B", "H", "D"]) || n > 3 && stringAt(n - 4, 1, ["B", "H"])) {
|
|
173
|
+
n += 2;
|
|
174
|
+
break;
|
|
175
|
+
}
|
|
176
|
+
if (n > 2 && at(n - 1) === "U" && stringAt(n - 3, 1, ["C", "G", "L", "R", "T"])) {
|
|
177
|
+
add("F");
|
|
178
|
+
} else if (n > 0 && at(n - 1) !== "I") {
|
|
179
|
+
add("K");
|
|
180
|
+
}
|
|
181
|
+
n += 2;
|
|
182
|
+
break;
|
|
183
|
+
}
|
|
184
|
+
if (at(n + 1) === "N") {
|
|
185
|
+
if (n === 1 && isVowel(at(0)) && !slavo) {
|
|
186
|
+
add("KN", "N");
|
|
187
|
+
} else if (!stringAt(n + 2, 2, ["EY"]) && at(n + 1) !== "Y" && !slavo) {
|
|
188
|
+
add("N", "KN");
|
|
189
|
+
} else {
|
|
190
|
+
add("KN");
|
|
191
|
+
}
|
|
192
|
+
n += 2;
|
|
193
|
+
break;
|
|
194
|
+
}
|
|
195
|
+
if (stringAt(n + 1, 2, ["LI"]) && !slavo) {
|
|
196
|
+
add("KL", "L");
|
|
197
|
+
n += 2;
|
|
198
|
+
break;
|
|
199
|
+
}
|
|
200
|
+
if (n === 0 && (at(n + 1) === "Y" || stringAt(n + 1, 2, ["ES", "EP", "EB", "EL", "EY", "IB", "IL", "IN", "IE", "EI", "ER"]))) {
|
|
201
|
+
add("K", "J");
|
|
202
|
+
n += 2;
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
if ((stringAt(n + 1, 2, ["ER"]) || at(n + 1) === "Y") && !stringAt(0, 6, ["DANGER", "RANGER", "MANGER"]) && !stringAt(n - 1, 1, ["E", "I"]) && !stringAt(n - 1, 3, ["RGY", "OGY"])) {
|
|
206
|
+
add("K", "J");
|
|
207
|
+
n += 2;
|
|
208
|
+
break;
|
|
209
|
+
}
|
|
210
|
+
if (stringAt(n + 1, 1, ["E", "I", "Y"]) || stringAt(n - 1, 4, ["AGGI", "OGGI"])) {
|
|
211
|
+
if (stringAt(0, 4, ["VAN ", "VON "]) || stringAt(0, 3, ["SCH"]) || stringAt(n + 1, 2, ["ET"])) {
|
|
212
|
+
add("K");
|
|
213
|
+
} else if (stringAt(n + 1, 4, ["IER "])) {
|
|
214
|
+
add("J");
|
|
215
|
+
} else {
|
|
216
|
+
add("J", "K");
|
|
217
|
+
}
|
|
218
|
+
n += 2;
|
|
219
|
+
break;
|
|
220
|
+
}
|
|
221
|
+
add("K");
|
|
222
|
+
n += at(n + 1) === "G" ? 2 : 1;
|
|
223
|
+
break;
|
|
224
|
+
case "H":
|
|
225
|
+
if ((n === 0 || isVowel(at(n - 1))) && isVowel(at(n + 1))) {
|
|
226
|
+
add("H");
|
|
227
|
+
n += 2;
|
|
228
|
+
} else {
|
|
229
|
+
n += 1;
|
|
230
|
+
}
|
|
231
|
+
break;
|
|
232
|
+
case "J":
|
|
233
|
+
if (stringAt(n, 4, ["JOSE"]) || stringAt(0, 4, ["SAN "])) {
|
|
234
|
+
if (n === 0 && at(n + 4) === " " || stringAt(0, 4, ["SAN "])) {
|
|
235
|
+
add("H");
|
|
236
|
+
} else {
|
|
237
|
+
add("J", "H");
|
|
238
|
+
}
|
|
239
|
+
n += 1;
|
|
240
|
+
break;
|
|
241
|
+
}
|
|
242
|
+
if (n === 0) {
|
|
243
|
+
add("J", "A");
|
|
244
|
+
} else if (isVowel(at(n - 1)) && !slavo && (at(n + 1) === "A" || at(n + 1) === "O")) {
|
|
245
|
+
add("J", "H");
|
|
246
|
+
} else if (n === last) {
|
|
247
|
+
add("J", "");
|
|
248
|
+
} else if (!stringAt(n + 1, 1, ["L", "T", "K", "S", "N", "M", "B", "Z"]) && !stringAt(n - 1, 1, ["S", "K", "L"])) {
|
|
249
|
+
add("J");
|
|
250
|
+
}
|
|
251
|
+
n += at(n + 1) === "J" ? 2 : 1;
|
|
252
|
+
break;
|
|
253
|
+
case "K":
|
|
254
|
+
add("K");
|
|
255
|
+
n += at(n + 1) === "K" ? 2 : 1;
|
|
256
|
+
break;
|
|
257
|
+
case "L":
|
|
258
|
+
if (at(n + 1) === "L") {
|
|
259
|
+
if (n === length - 3 && stringAt(n - 1, 4, ["ILLO", "ILLA", "ALLE"]) || (stringAt(last - 1, 2, ["AS", "OS"]) || stringAt(last, 1, ["A", "O"])) && stringAt(n - 1, 4, ["ALLE"])) {
|
|
260
|
+
add("L", "");
|
|
261
|
+
n += 2;
|
|
262
|
+
break;
|
|
263
|
+
}
|
|
264
|
+
n += 2;
|
|
265
|
+
} else {
|
|
266
|
+
n += 1;
|
|
267
|
+
}
|
|
268
|
+
add("L");
|
|
269
|
+
break;
|
|
270
|
+
case "M":
|
|
271
|
+
add("M");
|
|
272
|
+
if (at(n + 1) === "M" || at(n - 1) === "U" && at(n + 1) === "B" && (n + 1 === last || stringAt(n + 2, 2, ["ER"]))) {
|
|
273
|
+
n += 2;
|
|
274
|
+
} else {
|
|
275
|
+
n += 1;
|
|
276
|
+
}
|
|
277
|
+
break;
|
|
278
|
+
case "N":
|
|
279
|
+
add("N");
|
|
280
|
+
n += at(n + 1) === "N" ? 2 : 1;
|
|
281
|
+
break;
|
|
282
|
+
case "P":
|
|
283
|
+
if (at(n + 1) === "H") {
|
|
284
|
+
add("F");
|
|
285
|
+
n += 2;
|
|
286
|
+
break;
|
|
287
|
+
}
|
|
288
|
+
add("P");
|
|
289
|
+
n += stringAt(n + 1, 1, ["P", "B"]) ? 2 : 1;
|
|
290
|
+
break;
|
|
291
|
+
case "Q":
|
|
292
|
+
add("K");
|
|
293
|
+
n += at(n + 1) === "Q" ? 2 : 1;
|
|
294
|
+
break;
|
|
295
|
+
case "R":
|
|
296
|
+
if (n === last && !slavo && stringAt(n - 2, 2, ["IE"]) && !stringAt(n - 4, 2, ["ME", "MA"])) {
|
|
297
|
+
add("", "R");
|
|
298
|
+
} else {
|
|
299
|
+
add("R");
|
|
300
|
+
}
|
|
301
|
+
n += at(n + 1) === "R" ? 2 : 1;
|
|
302
|
+
break;
|
|
303
|
+
case "S":
|
|
304
|
+
if (stringAt(n - 1, 3, ["ISL", "YSL"])) {
|
|
305
|
+
n += 1;
|
|
306
|
+
break;
|
|
307
|
+
}
|
|
308
|
+
if (n === 0 && stringAt(0, 5, ["SUGAR"])) {
|
|
309
|
+
add("X", "S");
|
|
310
|
+
n += 1;
|
|
311
|
+
break;
|
|
312
|
+
}
|
|
313
|
+
if (stringAt(n, 2, ["SH"])) {
|
|
314
|
+
if (stringAt(n + 1, 4, ["HEIM", "HOEK", "HOLM", "HOLZ"]))
|
|
315
|
+
add("S");
|
|
316
|
+
else
|
|
317
|
+
add("X");
|
|
318
|
+
n += 2;
|
|
319
|
+
break;
|
|
320
|
+
}
|
|
321
|
+
if (stringAt(n, 3, ["SIO", "SIA"]) || stringAt(n, 4, ["SIAN"])) {
|
|
322
|
+
if (!slavo)
|
|
323
|
+
add("S", "X");
|
|
324
|
+
else
|
|
325
|
+
add("S");
|
|
326
|
+
n += 3;
|
|
327
|
+
break;
|
|
328
|
+
}
|
|
329
|
+
if (n === 0 && stringAt(n + 1, 1, ["M", "N", "L", "W"]) || at(n + 1) === "Z") {
|
|
330
|
+
add("S", "X");
|
|
331
|
+
n += at(n + 1) === "Z" ? 2 : 1;
|
|
332
|
+
break;
|
|
333
|
+
}
|
|
334
|
+
if (stringAt(n, 2, ["SC"])) {
|
|
335
|
+
if (at(n + 2) === "H") {
|
|
336
|
+
if (stringAt(n + 3, 2, ["OO", "ER", "EN", "UY", "ED", "EM"])) {
|
|
337
|
+
if (stringAt(n + 3, 2, ["ER", "EN"]))
|
|
338
|
+
add("X", "SK");
|
|
339
|
+
else
|
|
340
|
+
add("SK");
|
|
341
|
+
} else if (n === 0 && !isVowel(at(3)) && at(3) !== "W") {
|
|
342
|
+
add("X", "S");
|
|
343
|
+
} else {
|
|
344
|
+
add("X");
|
|
345
|
+
}
|
|
346
|
+
n += 3;
|
|
347
|
+
break;
|
|
348
|
+
}
|
|
349
|
+
if (stringAt(n + 2, 1, ["I", "E", "Y"])) {
|
|
350
|
+
add("S");
|
|
351
|
+
n += 3;
|
|
352
|
+
break;
|
|
353
|
+
}
|
|
354
|
+
add("SK");
|
|
355
|
+
n += 3;
|
|
356
|
+
break;
|
|
357
|
+
}
|
|
358
|
+
if (n === last && stringAt(n - 2, 2, ["AI", "OI"])) {
|
|
359
|
+
add("", "S");
|
|
360
|
+
} else {
|
|
361
|
+
add("S");
|
|
362
|
+
}
|
|
363
|
+
n += stringAt(n + 1, 1, ["S", "Z"]) ? 2 : 1;
|
|
364
|
+
break;
|
|
365
|
+
case "T":
|
|
366
|
+
if (stringAt(n, 4, ["TION"])) {
|
|
367
|
+
add("X");
|
|
368
|
+
n += 3;
|
|
369
|
+
break;
|
|
370
|
+
}
|
|
371
|
+
if (stringAt(n, 3, ["TIA", "TCH"])) {
|
|
372
|
+
add("X");
|
|
373
|
+
n += 3;
|
|
374
|
+
break;
|
|
375
|
+
}
|
|
376
|
+
if (stringAt(n, 2, ["TH"]) || stringAt(n, 3, ["TTH"])) {
|
|
377
|
+
if (stringAt(n + 2, 2, ["OM", "AM"]) || stringAt(0, 4, ["VAN ", "VON "]) || stringAt(0, 3, ["SCH"])) {
|
|
378
|
+
add("T");
|
|
379
|
+
} else {
|
|
380
|
+
add("0", "T");
|
|
381
|
+
}
|
|
382
|
+
n += 2;
|
|
383
|
+
break;
|
|
384
|
+
}
|
|
385
|
+
add("T");
|
|
386
|
+
n += stringAt(n + 1, 1, ["T", "D"]) ? 2 : 1;
|
|
387
|
+
break;
|
|
388
|
+
case "V":
|
|
389
|
+
add("F");
|
|
390
|
+
n += at(n + 1) === "V" ? 2 : 1;
|
|
391
|
+
break;
|
|
392
|
+
case "W":
|
|
393
|
+
if (stringAt(n, 2, ["WR"])) {
|
|
394
|
+
add("R");
|
|
395
|
+
n += 2;
|
|
396
|
+
break;
|
|
397
|
+
}
|
|
398
|
+
if (n === 0 && (isVowel(at(n + 1)) || stringAt(n, 2, ["WH"]))) {
|
|
399
|
+
if (isVowel(at(n + 1)))
|
|
400
|
+
add("A", "F");
|
|
401
|
+
else
|
|
402
|
+
add("A");
|
|
403
|
+
}
|
|
404
|
+
if (n === last && isVowel(at(n - 1)) || stringAt(n - 1, 5, ["EWSKI", "EWSKY", "OWSKI", "OWSKY"]) || stringAt(0, 3, ["SCH"])) {
|
|
405
|
+
add("", "F");
|
|
406
|
+
n += 1;
|
|
407
|
+
break;
|
|
408
|
+
}
|
|
409
|
+
if (stringAt(n, 4, ["WICZ", "WITZ"])) {
|
|
410
|
+
add("TS", "FX");
|
|
411
|
+
n += 4;
|
|
412
|
+
break;
|
|
413
|
+
}
|
|
414
|
+
n += 1;
|
|
415
|
+
break;
|
|
416
|
+
case "X":
|
|
417
|
+
if (!(n === last && (stringAt(n - 3, 3, ["IAU", "EAU"]) || stringAt(n - 2, 2, ["AU", "OU"])))) {
|
|
418
|
+
add("KS");
|
|
419
|
+
}
|
|
420
|
+
n += stringAt(n + 1, 1, ["C", "X"]) ? 2 : 1;
|
|
421
|
+
break;
|
|
422
|
+
case "Z":
|
|
423
|
+
if (at(n + 1) === "H") {
|
|
424
|
+
add("J");
|
|
425
|
+
n += 2;
|
|
426
|
+
break;
|
|
427
|
+
}
|
|
428
|
+
if (stringAt(n + 1, 2, ["ZO", "ZI", "ZA"]) || slavo && n > 0 && at(n - 1) !== "T") {
|
|
429
|
+
add("S", "TS");
|
|
430
|
+
} else {
|
|
431
|
+
add("S");
|
|
432
|
+
}
|
|
433
|
+
n += at(n + 1) === "Z" ? 2 : 1;
|
|
434
|
+
break;
|
|
435
|
+
default:
|
|
436
|
+
n += 1;
|
|
437
|
+
break;
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
return [primary.slice(0, 4), secondary.slice(0, 4)];
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
export { doubleMetaphone2 };
|
|
444
|
+
|
|
445
|
+
//# debugId=48794DFF0F1B895264756E2164756E21
|
|
446
|
+
//# sourceMappingURL=index-ebebeamh.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/phonetic/double-metaphone.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"/**\n * Double Metaphone: a phonetic key for a word, as it sounds rather than as it is spelt.\n *\n * Unlike Soundex it emits TWO codes per word, a primary and a secondary\n * (alternate), so a word can be looked up under either pronunciation. That\n * double-code behaviour is what a sound-alike lookup wants: `Smith` and `Smyth`\n * (SM0 / XMT) collide, and `Kavanagh` / `Cavanagh` both encode to KFNK. It is a\n * general key, not a surname key: a transcribed spoken word and a printed name are\n * asked the same question, how does this sound.\n *\n * It follows the reference Double Metaphone control flow (2000): the same silent\n * onsets (GN/KN/PN/WR/PS), GH / CH / C-variant / PH->F / vowel-only-at-start\n * rules, Slavo-Germanic detection, and the 4-character code cap. It is NOT\n * guaranteed byte-perfect against every entry of the reference test table, but it\n * reproduces the standard rule set and groups the classic sound-alikes.\n *\n * Plain TypeScript, no dependencies and no state.\n */\n\n/** AEIOUY — Double Metaphone treats Y as a vowel. Empty string is not a vowel. */\nfunction isVowel(c: string): boolean {\n\treturn c !== \"\" && \"AEIOUY\".includes(c);\n}\n\n/** Slavo-Germanic words get special S/Z/J handling in the reference algorithm. */\nfunction isSlavoGermanic(w: string): boolean {\n\treturn /W|K|CZ|WITZ/.test(w);\n}\n\n/**\n * Encode `word` into its [primary, secondary] Double Metaphone codes. When the\n * word has no phonetic alternate, secondary === primary. Non-letters are left\n * to the caller to strip (`metaphoneBlocks` in `/normalize` keeps A-Z only); this\n * operates on the raw uppercased string.\n */\nexport function doubleMetaphone(word: string): [string, string] {\n\tconst w = (word ?? \"\").toUpperCase();\n\tconst length = w.length;\n\tconst last = length - 1;\n\tconst slavo = isSlavoGermanic(w);\n\n\tlet primary = \"\";\n\tlet secondary = \"\";\n\n\t/** Character at index i (or \"\" out of range — never undefined). */\n\tconst at = (i: number): string => w.charAt(i);\n\t/** True if the fixed-length window at `start` equals any option. */\n\tconst stringAt = (start: number, len: number, list: string[]): boolean => {\n\t\tif (start < 0 || start >= length) return false;\n\t\treturn list.includes(w.substring(start, start + len));\n\t};\n\t/** Append to both codes (secondary defaults to the primary append). */\n\tconst add = (p: string, s?: string): void => {\n\t\tprimary += p;\n\t\tsecondary += s === undefined ? p : s;\n\t};\n\n\tlet n = 0;\n\n\t// Silent onsets: skip the first letter.\n\tif (stringAt(0, 2, [\"GN\", \"KN\", \"PN\", \"WR\", \"PS\"])) n = 1;\n\t// Initial X is pronounced like S (e.g. \"Xavier\").\n\tif (at(0) === \"X\") {\n\t\tadd(\"S\");\n\t\tn = 1;\n\t}\n\n\twhile (n < length && (primary.length < 4 || secondary.length < 4)) {\n\t\tconst c = at(n);\n\t\tswitch (c) {\n\t\t\tcase \"A\":\n\t\t\tcase \"E\":\n\t\t\tcase \"I\":\n\t\t\tcase \"O\":\n\t\t\tcase \"U\":\n\t\t\tcase \"Y\":\n\t\t\t\t// Only a leading vowel is coded (all vowels -> \"A\").\n\t\t\t\tif (n === 0) add(\"A\");\n\t\t\t\tn += 1;\n\t\t\t\tbreak;\n\n\t\t\tcase \"B\":\n\t\t\t\tadd(\"P\");\n\t\t\t\tn += at(n + 1) === \"B\" ? 2 : 1;\n\t\t\t\tbreak;\n\n\t\t\tcase \"C\":\n\t\t\t\t// Various Germanic: e.g. \"bacher\", \"macher\".\n\t\t\t\tif (\n\t\t\t\t\tn > 1 &&\n\t\t\t\t\t!isVowel(at(n - 2)) &&\n\t\t\t\t\tstringAt(n - 1, 3, [\"ACH\"]) &&\n\t\t\t\t\tat(n + 2) !== \"I\" &&\n\t\t\t\t\t(at(n + 2) !== \"E\" || stringAt(n - 2, 6, [\"BACHER\", \"MACHER\"]))\n\t\t\t\t) {\n\t\t\t\t\tadd(\"K\");\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// Special case \"caesar\".\n\t\t\t\tif (n === 0 && stringAt(0, 6, [\"CAESAR\"])) {\n\t\t\t\t\tadd(\"S\");\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// Italian \"chianti\".\n\t\t\t\tif (stringAt(n, 4, [\"CHIA\"])) {\n\t\t\t\t\tadd(\"K\");\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (stringAt(n, 2, [\"CH\"])) {\n\t\t\t\t\t// \"michael\".\n\t\t\t\t\tif (n > 0 && stringAt(n, 4, [\"CHAE\"])) {\n\t\t\t\t\t\tadd(\"K\", \"X\");\n\t\t\t\t\t\tn += 2;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t// Greek roots e.g. \"chemistry\", \"chorus\".\n\t\t\t\t\tif (\n\t\t\t\t\t\tn === 0 &&\n\t\t\t\t\t\t(stringAt(n + 1, 5, [\"HARAC\", \"HARIS\"]) ||\n\t\t\t\t\t\t\tstringAt(n + 1, 3, [\"HOR\", \"HYM\", \"HIA\", \"HEM\"])) &&\n\t\t\t\t\t\t!stringAt(0, 5, [\"CHORE\"])\n\t\t\t\t\t) {\n\t\t\t\t\t\tadd(\"K\");\n\t\t\t\t\t\tn += 2;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t// Germanic / Greek / otherwise hard \"kh\" sound.\n\t\t\t\t\tif (\n\t\t\t\t\t\tstringAt(0, 4, [\"VAN \", \"VON \"]) ||\n\t\t\t\t\t\tstringAt(0, 3, [\"SCH\"]) ||\n\t\t\t\t\t\tstringAt(n - 2, 6, [\"ORCHES\", \"ARCHIT\", \"ORCHID\"]) ||\n\t\t\t\t\t\tstringAt(n + 2, 1, [\"T\", \"S\"]) ||\n\t\t\t\t\t\t((stringAt(n - 1, 1, [\"A\", \"O\", \"U\", \"E\"]) || n === 0) &&\n\t\t\t\t\t\t\tstringAt(n + 2, 1, [\"L\", \"R\", \"N\", \"M\", \"B\", \"H\", \"F\", \"V\", \"W\", \" \"]))\n\t\t\t\t\t) {\n\t\t\t\t\t\tadd(\"K\");\n\t\t\t\t\t} else if (n > 0) {\n\t\t\t\t\t\tif (stringAt(0, 2, [\"MC\"])) add(\"K\");\n\t\t\t\t\t\telse add(\"X\", \"K\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tadd(\"X\");\n\t\t\t\t\t}\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// e.g. \"czerny\".\n\t\t\t\tif (stringAt(n, 2, [\"CZ\"]) && !stringAt(n - 2, 4, [\"WICZ\"])) {\n\t\t\t\t\tadd(\"S\", \"X\");\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// e.g. \"focaccia\".\n\t\t\t\tif (stringAt(n + 1, 3, [\"CIA\"])) {\n\t\t\t\t\tadd(\"X\");\n\t\t\t\t\tn += 3;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// Double C, but not \"McClellan\".\n\t\t\t\tif (stringAt(n, 2, [\"CC\"]) && !(n === 1 && at(0) === \"M\")) {\n\t\t\t\t\t// \"bellocchio\" but not \"bacchus\".\n\t\t\t\t\tif (stringAt(n + 2, 1, [\"I\", \"E\", \"H\"]) && !stringAt(n + 2, 2, [\"HU\"])) {\n\t\t\t\t\t\t// \"accident\", \"accede\", \"succeed\".\n\t\t\t\t\t\tif ((n === 1 && at(n - 1) === \"A\") || stringAt(n - 1, 5, [\"UCCEE\", \"UCCES\"])) {\n\t\t\t\t\t\t\tadd(\"KS\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tadd(\"X\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tn += 3;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t// Any other CC: a hard K.\n\t\t\t\t\tadd(\"K\");\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (stringAt(n, 2, [\"CK\", \"CG\", \"CQ\"])) {\n\t\t\t\t\tadd(\"K\");\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (stringAt(n, 2, [\"CI\", \"CE\", \"CY\"])) {\n\t\t\t\t\t// Italian vs English.\n\t\t\t\t\tif (stringAt(n, 3, [\"CIO\", \"CIE\", \"CIA\"])) add(\"S\", \"X\");\n\t\t\t\t\telse add(\"S\");\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tadd(\"K\");\n\t\t\t\tif (stringAt(n + 1, 2, [\" C\", \" Q\", \" G\"])) n += 3;\n\t\t\t\telse if (stringAt(n + 1, 1, [\"C\", \"K\", \"Q\"]) && !stringAt(n + 1, 2, [\"CE\", \"CI\"])) n += 2;\n\t\t\t\telse n += 1;\n\t\t\t\tbreak;\n\n\t\t\tcase \"D\":\n\t\t\t\tif (stringAt(n, 2, [\"DG\"])) {\n\t\t\t\t\tif (stringAt(n + 2, 1, [\"I\", \"E\", \"Y\"])) {\n\t\t\t\t\t\t// \"edge\".\n\t\t\t\t\t\tadd(\"J\");\n\t\t\t\t\t\tn += 3;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// \"edgar\".\n\t\t\t\t\t\tadd(\"TK\");\n\t\t\t\t\t\tn += 2;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (stringAt(n, 2, [\"DT\", \"DD\"])) {\n\t\t\t\t\tadd(\"T\");\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tadd(\"T\");\n\t\t\t\tn += 1;\n\t\t\t\tbreak;\n\n\t\t\tcase \"F\":\n\t\t\t\tadd(\"F\");\n\t\t\t\tn += at(n + 1) === \"F\" ? 2 : 1;\n\t\t\t\tbreak;\n\n\t\t\tcase \"G\":\n\t\t\t\tif (at(n + 1) === \"H\") {\n\t\t\t\t\tif (n > 0 && !isVowel(at(n - 1))) {\n\t\t\t\t\t\tadd(\"K\");\n\t\t\t\t\t\tn += 2;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif (n === 0) {\n\t\t\t\t\t\t// \"ghislane\", \"ghiradelli\".\n\t\t\t\t\t\tif (at(n + 2) === \"I\") add(\"J\");\n\t\t\t\t\t\telse add(\"K\");\n\t\t\t\t\t\tn += 2;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t// GH after B, H or D two or three back is silent.\n\t\t\t\t\tif (\n\t\t\t\t\t\t(n > 1 && stringAt(n - 2, 1, [\"B\", \"H\", \"D\"])) ||\n\t\t\t\t\t\t(n > 2 && stringAt(n - 3, 1, [\"B\", \"H\", \"D\"])) ||\n\t\t\t\t\t\t(n > 3 && stringAt(n - 4, 1, [\"B\", \"H\"]))\n\t\t\t\t\t) {\n\t\t\t\t\t\tn += 2;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t// e.g. \"laugh\", \"cough\", \"rough\", \"tough\".\n\t\t\t\t\tif (n > 2 && at(n - 1) === \"U\" && stringAt(n - 3, 1, [\"C\", \"G\", \"L\", \"R\", \"T\"])) {\n\t\t\t\t\t\tadd(\"F\");\n\t\t\t\t\t} else if (n > 0 && at(n - 1) !== \"I\") {\n\t\t\t\t\t\tadd(\"K\");\n\t\t\t\t\t}\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (at(n + 1) === \"N\") {\n\t\t\t\t\tif (n === 1 && isVowel(at(0)) && !slavo) {\n\t\t\t\t\t\tadd(\"KN\", \"N\");\n\t\t\t\t\t} else if (!stringAt(n + 2, 2, [\"EY\"]) && at(n + 1) !== \"Y\" && !slavo) {\n\t\t\t\t\t\tadd(\"N\", \"KN\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tadd(\"KN\");\n\t\t\t\t\t}\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// \"tagliaro\".\n\t\t\t\tif (stringAt(n + 1, 2, [\"LI\"]) && !slavo) {\n\t\t\t\t\tadd(\"KL\", \"L\");\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// Initial \"GE-/GY-\" variants that can sound soft.\n\t\t\t\tif (\n\t\t\t\t\tn === 0 &&\n\t\t\t\t\t(at(n + 1) === \"Y\" ||\n\t\t\t\t\t\tstringAt(n + 1, 2, [\"ES\", \"EP\", \"EB\", \"EL\", \"EY\", \"IB\", \"IL\", \"IN\", \"IE\", \"EI\", \"ER\"]))\n\t\t\t\t) {\n\t\t\t\t\tadd(\"K\", \"J\");\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// -GER-, -GY-.\n\t\t\t\tif (\n\t\t\t\t\t(stringAt(n + 1, 2, [\"ER\"]) || at(n + 1) === \"Y\") &&\n\t\t\t\t\t!stringAt(0, 6, [\"DANGER\", \"RANGER\", \"MANGER\"]) &&\n\t\t\t\t\t!stringAt(n - 1, 1, [\"E\", \"I\"]) &&\n\t\t\t\t\t!stringAt(n - 1, 3, [\"RGY\", \"OGY\"])\n\t\t\t\t) {\n\t\t\t\t\tadd(\"K\", \"J\");\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// Italian e.g. \"biaggi\".\n\t\t\t\tif (stringAt(n + 1, 1, [\"E\", \"I\", \"Y\"]) || stringAt(n - 1, 4, [\"AGGI\", \"OGGI\"])) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tstringAt(0, 4, [\"VAN \", \"VON \"]) ||\n\t\t\t\t\t\tstringAt(0, 3, [\"SCH\"]) ||\n\t\t\t\t\t\tstringAt(n + 1, 2, [\"ET\"])\n\t\t\t\t\t) {\n\t\t\t\t\t\tadd(\"K\");\n\t\t\t\t\t} else if (stringAt(n + 1, 4, [\"IER \"])) {\n\t\t\t\t\t\tadd(\"J\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tadd(\"J\", \"K\");\n\t\t\t\t\t}\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tadd(\"K\");\n\t\t\t\tn += at(n + 1) === \"G\" ? 2 : 1;\n\t\t\t\tbreak;\n\n\t\t\tcase \"H\":\n\t\t\t\t// Only kept if first-and-before-vowel, or between two vowels.\n\t\t\t\tif ((n === 0 || isVowel(at(n - 1))) && isVowel(at(n + 1))) {\n\t\t\t\t\tadd(\"H\");\n\t\t\t\t\tn += 2;\n\t\t\t\t} else {\n\t\t\t\t\tn += 1;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"J\":\n\t\t\t\t// Spanish \"jose\", \"san jacinto\".\n\t\t\t\tif (stringAt(n, 4, [\"JOSE\"]) || stringAt(0, 4, [\"SAN \"])) {\n\t\t\t\t\tif ((n === 0 && at(n + 4) === \" \") || stringAt(0, 4, [\"SAN \"])) {\n\t\t\t\t\t\tadd(\"H\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tadd(\"J\", \"H\");\n\t\t\t\t\t}\n\t\t\t\t\tn += 1;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (n === 0) {\n\t\t\t\t\t// \"Jankelowicz\" / anglicised \"Yankelovich\".\n\t\t\t\t\tadd(\"J\", \"A\");\n\t\t\t\t} else if (isVowel(at(n - 1)) && !slavo && (at(n + 1) === \"A\" || at(n + 1) === \"O\")) {\n\t\t\t\t\tadd(\"J\", \"H\");\n\t\t\t\t} else if (n === last) {\n\t\t\t\t\tadd(\"J\", \"\");\n\t\t\t\t} else if (\n\t\t\t\t\t!stringAt(n + 1, 1, [\"L\", \"T\", \"K\", \"S\", \"N\", \"M\", \"B\", \"Z\"]) &&\n\t\t\t\t\t!stringAt(n - 1, 1, [\"S\", \"K\", \"L\"])\n\t\t\t\t) {\n\t\t\t\t\tadd(\"J\");\n\t\t\t\t}\n\t\t\t\tn += at(n + 1) === \"J\" ? 2 : 1;\n\t\t\t\tbreak;\n\n\t\t\tcase \"K\":\n\t\t\t\tadd(\"K\");\n\t\t\t\tn += at(n + 1) === \"K\" ? 2 : 1;\n\t\t\t\tbreak;\n\n\t\t\tcase \"L\":\n\t\t\t\tif (at(n + 1) === \"L\") {\n\t\t\t\t\t// Spanish silent-LL e.g. \"cabrillo\", \"gallegos\".\n\t\t\t\t\tif (\n\t\t\t\t\t\t(n === length - 3 && stringAt(n - 1, 4, [\"ILLO\", \"ILLA\", \"ALLE\"])) ||\n\t\t\t\t\t\t((stringAt(last - 1, 2, [\"AS\", \"OS\"]) || stringAt(last, 1, [\"A\", \"O\"])) &&\n\t\t\t\t\t\t\tstringAt(n - 1, 4, [\"ALLE\"]))\n\t\t\t\t\t) {\n\t\t\t\t\t\tadd(\"L\", \"\");\n\t\t\t\t\t\tn += 2;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tn += 2;\n\t\t\t\t} else {\n\t\t\t\t\tn += 1;\n\t\t\t\t}\n\t\t\t\tadd(\"L\");\n\t\t\t\tbreak;\n\n\t\t\tcase \"M\":\n\t\t\t\tadd(\"M\");\n\t\t\t\tif (\n\t\t\t\t\tat(n + 1) === \"M\" ||\n\t\t\t\t\t// Silent B: \"dumb\", \"thumb\", \"comb\".\n\t\t\t\t\t(at(n - 1) === \"U\" && at(n + 1) === \"B\" && (n + 1 === last || stringAt(n + 2, 2, [\"ER\"])))\n\t\t\t\t) {\n\t\t\t\t\tn += 2;\n\t\t\t\t} else {\n\t\t\t\t\tn += 1;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase \"N\":\n\t\t\t\tadd(\"N\");\n\t\t\t\tn += at(n + 1) === \"N\" ? 2 : 1;\n\t\t\t\tbreak;\n\n\t\t\tcase \"P\":\n\t\t\t\tif (at(n + 1) === \"H\") {\n\t\t\t\t\tadd(\"F\");\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tadd(\"P\");\n\t\t\t\t// \"campbell\", \"raspberry\".\n\t\t\t\tn += stringAt(n + 1, 1, [\"P\", \"B\"]) ? 2 : 1;\n\t\t\t\tbreak;\n\n\t\t\tcase \"Q\":\n\t\t\t\tadd(\"K\");\n\t\t\t\tn += at(n + 1) === \"Q\" ? 2 : 1;\n\t\t\t\tbreak;\n\n\t\t\tcase \"R\":\n\t\t\t\t// French final \"-ier\" e.g. \"rogier\" (but not \"hochmeier\").\n\t\t\t\tif (\n\t\t\t\t\tn === last &&\n\t\t\t\t\t!slavo &&\n\t\t\t\t\tstringAt(n - 2, 2, [\"IE\"]) &&\n\t\t\t\t\t!stringAt(n - 4, 2, [\"ME\", \"MA\"])\n\t\t\t\t) {\n\t\t\t\t\tadd(\"\", \"R\");\n\t\t\t\t} else {\n\t\t\t\t\tadd(\"R\");\n\t\t\t\t}\n\t\t\t\tn += at(n + 1) === \"R\" ? 2 : 1;\n\t\t\t\tbreak;\n\n\t\t\tcase \"S\":\n\t\t\t\t// \"island\", \"isle\", \"carlisle\".\n\t\t\t\tif (stringAt(n - 1, 3, [\"ISL\", \"YSL\"])) {\n\t\t\t\t\tn += 1;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// \"sugar\".\n\t\t\t\tif (n === 0 && stringAt(0, 5, [\"SUGAR\"])) {\n\t\t\t\t\tadd(\"X\", \"S\");\n\t\t\t\t\tn += 1;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (stringAt(n, 2, [\"SH\"])) {\n\t\t\t\t\t// Germanic \"sh\".\n\t\t\t\t\tif (stringAt(n + 1, 4, [\"HEIM\", \"HOEK\", \"HOLM\", \"HOLZ\"])) add(\"S\");\n\t\t\t\t\telse add(\"X\");\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// Italian / Armenian.\n\t\t\t\tif (stringAt(n, 3, [\"SIO\", \"SIA\"]) || stringAt(n, 4, [\"SIAN\"])) {\n\t\t\t\t\tif (!slavo) add(\"S\", \"X\");\n\t\t\t\t\telse add(\"S\");\n\t\t\t\t\tn += 3;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// German onset \"sm/sn/sl/sw\", and any \"sz\".\n\t\t\t\tif ((n === 0 && stringAt(n + 1, 1, [\"M\", \"N\", \"L\", \"W\"])) || at(n + 1) === \"Z\") {\n\t\t\t\t\tadd(\"S\", \"X\");\n\t\t\t\t\tn += at(n + 1) === \"Z\" ? 2 : 1;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (stringAt(n, 2, [\"SC\"])) {\n\t\t\t\t\t// SC: SCH reads SK or X, SCE/SCI/SCY reads S, any other SC reads SK.\n\t\t\t\t\tif (at(n + 2) === \"H\") {\n\t\t\t\t\t\t// Dutch e.g. \"school\", \"schooner\".\n\t\t\t\t\t\tif (stringAt(n + 3, 2, [\"OO\", \"ER\", \"EN\", \"UY\", \"ED\", \"EM\"])) {\n\t\t\t\t\t\t\tif (stringAt(n + 3, 2, [\"ER\", \"EN\"])) add(\"X\", \"SK\");\n\t\t\t\t\t\t\telse add(\"SK\");\n\t\t\t\t\t\t} else if (n === 0 && !isVowel(at(3)) && at(3) !== \"W\") {\n\t\t\t\t\t\t\tadd(\"X\", \"S\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tadd(\"X\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tn += 3;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif (stringAt(n + 2, 1, [\"I\", \"E\", \"Y\"])) {\n\t\t\t\t\t\tadd(\"S\");\n\t\t\t\t\t\tn += 3;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tadd(\"SK\");\n\t\t\t\t\tn += 3;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// French final \"-ais/-ois\".\n\t\t\t\tif (n === last && stringAt(n - 2, 2, [\"AI\", \"OI\"])) {\n\t\t\t\t\tadd(\"\", \"S\");\n\t\t\t\t} else {\n\t\t\t\t\tadd(\"S\");\n\t\t\t\t}\n\t\t\t\tn += stringAt(n + 1, 1, [\"S\", \"Z\"]) ? 2 : 1;\n\t\t\t\tbreak;\n\n\t\t\tcase \"T\":\n\t\t\t\tif (stringAt(n, 4, [\"TION\"])) {\n\t\t\t\t\tadd(\"X\");\n\t\t\t\t\tn += 3;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (stringAt(n, 3, [\"TIA\", \"TCH\"])) {\n\t\t\t\t\tadd(\"X\");\n\t\t\t\t\tn += 3;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (stringAt(n, 2, [\"TH\"]) || stringAt(n, 3, [\"TTH\"])) {\n\t\t\t\t\t// \"thomas\", \"thames\", or Germanic -> hard T.\n\t\t\t\t\tif (\n\t\t\t\t\t\tstringAt(n + 2, 2, [\"OM\", \"AM\"]) ||\n\t\t\t\t\t\tstringAt(0, 4, [\"VAN \", \"VON \"]) ||\n\t\t\t\t\t\tstringAt(0, 3, [\"SCH\"])\n\t\t\t\t\t) {\n\t\t\t\t\t\tadd(\"T\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\tadd(\"0\", \"T\");\n\t\t\t\t\t}\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tadd(\"T\");\n\t\t\t\tn += stringAt(n + 1, 1, [\"T\", \"D\"]) ? 2 : 1;\n\t\t\t\tbreak;\n\n\t\t\tcase \"V\":\n\t\t\t\tadd(\"F\");\n\t\t\t\tn += at(n + 1) === \"V\" ? 2 : 1;\n\t\t\t\tbreak;\n\n\t\t\tcase \"W\":\n\t\t\t\t// \"wr\" -> R.\n\t\t\t\tif (stringAt(n, 2, [\"WR\"])) {\n\t\t\t\t\tadd(\"R\");\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (n === 0 && (isVowel(at(n + 1)) || stringAt(n, 2, [\"WH\"]))) {\n\t\t\t\t\t// \"Wasserman\" ~ \"Vasserman\"; \"Uomo\" ~ \"Womo\".\n\t\t\t\t\tif (isVowel(at(n + 1))) add(\"A\", \"F\");\n\t\t\t\t\telse add(\"A\");\n\t\t\t\t}\n\t\t\t\t// \"Arnow\" ~ \"Arnoff\"; Polish/Slavic \"-owski\".\n\t\t\t\tif (\n\t\t\t\t\t(n === last && isVowel(at(n - 1))) ||\n\t\t\t\t\tstringAt(n - 1, 5, [\"EWSKI\", \"EWSKY\", \"OWSKI\", \"OWSKY\"]) ||\n\t\t\t\t\tstringAt(0, 3, [\"SCH\"])\n\t\t\t\t) {\n\t\t\t\t\tadd(\"\", \"F\");\n\t\t\t\t\tn += 1;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t// Polish e.g. \"filipowicz\".\n\t\t\t\tif (stringAt(n, 4, [\"WICZ\", \"WITZ\"])) {\n\t\t\t\t\tadd(\"TS\", \"FX\");\n\t\t\t\t\tn += 4;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tn += 1;\n\t\t\t\tbreak;\n\n\t\t\tcase \"X\":\n\t\t\t\t// French final \"-eaux/-aux\" is silent.\n\t\t\t\tif (\n\t\t\t\t\t!(n === last && (stringAt(n - 3, 3, [\"IAU\", \"EAU\"]) || stringAt(n - 2, 2, [\"AU\", \"OU\"])))\n\t\t\t\t) {\n\t\t\t\t\tadd(\"KS\");\n\t\t\t\t}\n\t\t\t\tn += stringAt(n + 1, 1, [\"C\", \"X\"]) ? 2 : 1;\n\t\t\t\tbreak;\n\n\t\t\tcase \"Z\":\n\t\t\t\t// Chinese pinyin \"zhao\".\n\t\t\t\tif (at(n + 1) === \"H\") {\n\t\t\t\t\tadd(\"J\");\n\t\t\t\t\tn += 2;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (stringAt(n + 1, 2, [\"ZO\", \"ZI\", \"ZA\"]) || (slavo && n > 0 && at(n - 1) !== \"T\")) {\n\t\t\t\t\tadd(\"S\", \"TS\");\n\t\t\t\t} else {\n\t\t\t\t\tadd(\"S\");\n\t\t\t\t}\n\t\t\t\tn += at(n + 1) === \"Z\" ? 2 : 1;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tn += 1;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn [primary.slice(0, 4), secondary.slice(0, 4)];\n}\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "48794DFF0F1B895264756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
normalizeApostrophes2,
|
|
4
4
|
lexiconKey2,
|
|
5
5
|
Lexicon2
|
|
6
|
-
} from "./index-
|
|
6
|
+
} from "./index-7vvt5hhy.js";
|
|
7
7
|
import {
|
|
8
8
|
canonicalTeamName2,
|
|
9
9
|
isTeamPrint2
|
|
@@ -170,7 +170,7 @@ function scrubNameDetail2(printed, options = {}) {
|
|
|
170
170
|
rules.push("accept-team");
|
|
171
171
|
return { value: s, refused: false, rules };
|
|
172
172
|
}
|
|
173
|
-
if (s.split(
|
|
173
|
+
if (s.split(/[ ,]/).filter((t) => t !== "").length < 2) {
|
|
174
174
|
rules.push("refuse-single-token");
|
|
175
175
|
return { value: NAME_REFUSED2, refused: true, rules };
|
|
176
176
|
}
|
|
@@ -1057,5 +1057,5 @@ function personNameFromIcao2(icao, print) {
|
|
|
1057
1057
|
|
|
1058
1058
|
export { NAME_REFUSED2, stripEveryAside2, stripTrailingCredentials2, scrubNameDetail2, scrubName2, foldNameKey2, nameFold2, PLATFORM_PLACEHOLDERS2, NAME_PLACEHOLDERS2, isPlaceholderPrint2, isNoNamePrint2, COMPOUND_SURNAMES2, isCompoundSurname2, spaceAfterComma2, isNameSuffix, tokenize, inferNameOrder2, commaReading2, lexiconNameOrder, resolveNameOrder2, splitPersonName2, classifyCell2, capitalise2, nameCase2, SURNAME_SEPARATOR2, GIVEN_SEPARATOR2, titleCaseNamePart2, spellingLookup2, parsePersonName2, formatPersonDisplay2, personDisplayName2, NAME_TRADITIONS2, traditionFromIndex2, isIcaoName2, levelOf2, givenKeyAbbreviates2, givenAbbreviates2, PersonName2, DEFAULT_PERSON_NAME_CAPACITY2, traditionLookupOf2, createPersonNameFactory2, createCachingPersonNameFactory2, defaultPersonNameFactory2, personName2, personNameFromIcao2 };
|
|
1059
1059
|
|
|
1060
|
-
//# debugId=
|
|
1061
|
-
//# sourceMappingURL=index-
|
|
1060
|
+
//# debugId=6DB0BC302D69D65E64756E2164756E21
|
|
1061
|
+
//# sourceMappingURL=index-jx97zxtz.js.map
|