UNPKG

unicode-to-plain-text

Version:

Convert fancy Unicode text to plain ASCII with smart language preservation

41 lines (40 loc) 1.64 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.handleFlipped = void 0; const UPSIDE_DOWN_MAP_1 = require("./maps/UPSIDE_DOWN_MAP"); const FLIP_EMOTICONS_MAP_1 = require("./maps/FLIP_EMOTICONS_MAP"); const MIRRORED_MAP_1 = require("./maps/MIRRORED_MAP"); const handleFlipped = (text) => { let result = removeEmoticons(text); if (isUpsideDown(result)) { return [...result] .map((c) => UPSIDE_DOWN_MAP_1.UPSIDE_DOWN_MAP[c] ?? c) .reverse() .join(''); } if (isMirrored(result)) { return [...result] .reverse() .map((c) => MIRRORED_MAP_1.MIRRORED_LETTER_SWAPS[c] ?? c) .join(''); } return result; }; exports.handleFlipped = handleFlipped; const removeEmoticons = (text) => { const emoticon = FLIP_EMOTICONS_MAP_1.FLIP_EMOTICONS_MAP.find((e) => text.includes(e)); return emoticon ? removeEmoticons(text.replace(emoticon, '').trim()) : text; }; const isUpsideDown = (text) => { const chars = [...text].filter((c) => c.trim() !== ''); const flipped = chars.filter((c) => UPSIDE_DOWN_MAP_1.UPSIDE_DOWN_MAP[c] && !UPSIDE_DOWN_MAP_1.UPSIDE_DOWN_MAP[UPSIDE_DOWN_MAP_1.UPSIDE_DOWN_MAP[c]]).length; return flipped > 2 || flipped / chars.length > 0.5; }; const isMirrored = (text) => { const chars = [...text].filter((c) => c.trim() !== ''); const mirrored = chars.filter((c) => { const mapped = MIRRORED_MAP_1.MIRRORED_MAP[c]; return mapped && !MIRRORED_MAP_1.MIRRORED_MAP[mapped]; }).length; return mirrored > 2 && mirrored / chars.length >= 0.3; };