@channel.io/tolgee-cli
Version:
Tolgee CLI tool for managing translations
60 lines (59 loc) • 1.85 kB
JavaScript
;
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 = {
" ": " ",
" ": " ",
"<": "<",
">": ">",
""": '"',
"'": "'",
"'": "'",
};
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);
}