64 lines
1.3 KiB
JavaScript
64 lines
1.3 KiB
JavaScript
|
|
//#region src/string/deburr.ts
|
|||
|
|
const deburrMap = new Map([
|
|||
|
|
["Æ", "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"]
|
|||
|
|
]);
|
|||
|
|
/**
|
|||
|
|
* Converts a string by replacing special characters and diacritical marks with their ASCII equivalents.
|
|||
|
|
* For example, "Crème brûlée" becomes "Creme brulee".
|
|||
|
|
*
|
|||
|
|
* @param {string} str - The input string to be deburred.
|
|||
|
|
* @returns {string} - The deburred string with special characters replaced by their ASCII equivalents.
|
|||
|
|
*
|
|||
|
|
* @example
|
|||
|
|
* // Basic usage:
|
|||
|
|
* deburr('Æthelred') // returns 'Aethelred'
|
|||
|
|
*
|
|||
|
|
* @example
|
|||
|
|
* // Handling diacritical marks:
|
|||
|
|
* deburr('München') // returns 'Munchen'
|
|||
|
|
*
|
|||
|
|
* @example
|
|||
|
|
* // Special characters:
|
|||
|
|
* deburr('Crème brûlée') // returns 'Creme brulee'
|
|||
|
|
*/
|
|||
|
|
function deburr(str) {
|
|||
|
|
str = str.normalize("NFD");
|
|||
|
|
let result = "";
|
|||
|
|
for (let i = 0; i < str.length; i++) {
|
|||
|
|
const char = str[i];
|
|||
|
|
if (char >= "̀" && char <= "ͯ" || char >= "︠" && char <= "︣") continue;
|
|||
|
|
result += deburrMap.get(char) ?? char;
|
|||
|
|
}
|
|||
|
|
return result;
|
|||
|
|
}
|
|||
|
|
//#endregion
|
|||
|
|
export { deburr };
|