hunspell-reader
Version:
A library for reading Hunspell Dictionary Files
84 lines • 2.28 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.removeLooseAccents = exports.removeAccents = exports.toRange = exports.escapeUnicodeCode = void 0;
/**
* Escape Unicode Characters
* @param text
* @param regexp
* @returns
*/
function escapeUnicodeCode(text, regexp = /\p{M}/gu) {
return text.replace(regexp, replaceWithUnicode);
}
exports.escapeUnicodeCode = escapeUnicodeCode;
function replaceWithUnicode(substring) {
const start = 0x20;
const end = 0x7a;
let val = '';
for (let i = 0; i < substring.length; ++i) {
const char = substring[i];
const code = char.charCodeAt(0);
if (code >= start && code <= end) {
val += char;
continue;
}
const hex = '0000' + code.toString(16);
val += code < 256 ? '\\x' + hex.slice(-2) : '\\u' + hex.slice(-4);
}
return val;
}
/**
* Converts a string of letters in ranges.
*
* `abcde` => `a-e`
*
* @param letters - sorted letters
*/
function toRange(letters, minLength = 4) {
const chars = [];
let begin = 0;
let end = 0;
let endChar = '';
const minDiff = Math.max(minLength - 2, 1);
function fill() {
if (!(end - begin > 1))
return;
if (end - begin > minDiff) {
chars.push('-');
return;
}
for (let code = begin + 1; code < end; code += 1) {
chars.push(String.fromCharCode(code));
}
}
function pushRange() {
fill();
chars.push(endChar);
endChar = '';
}
for (let i = 0; i < letters.length; ++i) {
const letter = letters[i];
const code = letter.charCodeAt(0);
if (code - end === 1) {
end = code;
endChar = letter;
continue;
}
pushRange();
chars.push(letter);
begin = code;
end = code;
}
pushRange();
return chars.join('');
}
exports.toRange = toRange;
function removeAccents(text) {
return removeLooseAccents(text.normalize('NFD'));
}
exports.removeAccents = removeAccents;
function removeLooseAccents(text) {
return text.replace(/\p{M}/gu, '');
}
exports.removeLooseAccents = removeLooseAccents;
//# sourceMappingURL=textUtils.js.map