UNPKG

taraskevizer

Version:

Канвэртацыя акадэмічнага правапісу ў клясычны

37 lines (34 loc) 1.43 kB
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; });