46 lines
805 B
JavaScript
46 lines
805 B
JavaScript
const deburrMap = new Map(Object.entries({
|
||
Æ: 'Ae',
|
||
Ð: 'D',
|
||
Ø: 'O',
|
||
Þ: 'Th',
|
||
ß: 'ss',
|
||
æ: 'ae',
|
||
ð: 'd',
|
||
ø: 'o',
|
||
þ: 'th',
|
||
Đ: 'D',
|
||
đ: 'd',
|
||
Ħ: 'H',
|
||
ħ: 'h',
|
||
ı: 'i',
|
||
IJ: 'IJ',
|
||
ij: 'ij',
|
||
ĸ: 'k',
|
||
Ŀ: 'L',
|
||
ŀ: 'l',
|
||
Ł: 'L',
|
||
ł: 'l',
|
||
ʼn: "'n",
|
||
Ŋ: 'N',
|
||
ŋ: 'n',
|
||
Œ: 'Oe',
|
||
œ: 'oe',
|
||
Ŧ: 'T',
|
||
ŧ: 't',
|
||
ſ: 's',
|
||
}));
|
||
function deburr(str) {
|
||
str = str.normalize('NFD');
|
||
let result = '';
|
||
for (let i = 0; i < str.length; i++) {
|
||
const char = str[i];
|
||
if ((char >= '\u0300' && char <= '\u036f') || (char >= '\ufe20' && char <= '\ufe23')) {
|
||
continue;
|
||
}
|
||
result += deburrMap.get(char) ?? char;
|
||
}
|
||
return result;
|
||
}
|
||
|
||
export { deburr };
|