taraskevizer
Version:
Канвэртацыя акадэмічнага правапісу ў клясычны
37 lines (34 loc) • 1.43 kB
JavaScript
import { restoreCase, mutatingStep } from '../lib/index.js';
export const applyNoFix = (ctx) => {
const { noFixArr } = ctx.storage;
if (noFixArr.length) {
noFixArr.reverse();
ctx.text = ctx.text.replaceAll(ctx.cfg.noFixPlaceholder, () => noFixArr.pop());
}
};
export const resolveSpecialSyntax = mutatingStep(({ text, storage, cfg: { doEscapeCapitalized, abc, noFixPlaceholder } }) => {
const noFixArr = (storage.noFixArr = []);
const convertAlphavet = (abcOnlyText, abc) => restoreCase(abc.lower(abcOnlyText.toLowerCase()).split(' '), abcOnlyText.split(' ')).join(' ');
text = text.replace(/<(.*?[^\\])>/g, (_$0, $1) => {
const isAbc = +$1.startsWith('*');
const char = isAbc ? $1[1] : $1[0];
const doRemoveBrackets = +(char === '.');
const doTarask = +(char === ',');
$1 = $1.slice(isAbc + doRemoveBrackets + doTarask).replace(/\\>/g, '>');
if (doTarask) {
$1 = `<${$1}>`;
}
else {
noFixArr.push(isAbc ? convertAlphavet($1, abc) : $1);
$1 = doRemoveBrackets ? noFixPlaceholder : `<${noFixPlaceholder}>`;
}
return $1;
});
if (doEscapeCapitalized) {
text = text.replace(/(?!<=\p{Lu} )\p{Lu}{2}[\p{Lu} ]*(?!= \p{Lu})/gu, ($0) => {
noFixArr.push(convertAlphavet($0, abc));
return noFixPlaceholder;
});
}
return text;
});