UNPKG

@channel.io/tolgee-cli

Version:

Tolgee CLI tool for managing translations

60 lines (59 loc) 1.85 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.decodeHtmlEntities = decodeHtmlEntities; exports.escapeStr = escapeStr; exports.escapeQuote = escapeQuote; exports.escapeDoubleQuote = escapeDoubleQuote; exports.escapeNewLine = escapeNewLine; exports.includesFormatStringMoreThanOne = includesFormatStringMoreThanOne; exports.includesHtmlTag = includesHtmlTag; /** * HTML 엔티티를 디코딩하는 함수 */ function decodeHtmlEntities(str) { const htmlEntities = { "&#160;": " ", "&nbsp;": " ", "&lt;": "<", "&gt;": ">", "&quot;": '"', "&#39;": "'", "&apos;": "'", }; let result = str; // HTML 엔티티 디코딩 for (const [entity, replacement] of Object.entries(htmlEntities)) { result = result.replace(new RegExp(entity, "g"), replacement); } // 숫자 형태의 HTML 엔티티 처리 (&#xxx; 형태) result = result.replace(/&#(\d+);/g, (match, num) => { const charCode = parseInt(num, 10); // 160은 non-breaking space if (charCode === 160) { return " "; } return String.fromCharCode(charCode); }); return result; } function escapeStr(str) { // HTML 엔티티 디코딩을 먼저 수행 const decoded = decodeHtmlEntities(str); return escapeQuote(escapeDoubleQuote(escapeNewLine(decoded))); } function escapeQuote(str) { return str.replace(/'/g, `\\'`); } function escapeDoubleQuote(str) { return str.replace(/"/g, `\\"`); } function escapeNewLine(str) { return str.replace(/\n/g, `\\n`); } function includesFormatStringMoreThanOne(str) { return (str.match(/%[sd]/g) || []).length > 1; } // html_tag_pattern = re.compile(r'<[a-zA-Z][^>]*>') function includesHtmlTag(str) { return /<[a-zA-Z][^>]*>/.test(str); }