"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var surrogate_pairs_1 = require("./surrogate-pairs"); var ALPHA_INDEX = { '<': '<', '>': '>', '"': '"', '&apos': '\'', '&': '&', '<': '<', '>': '>', '"': '"', ''': '\'', '&': '&' }; var CHAR_INDEX = { 60: 'lt', 62: 'gt', 34: 'quot', 39: 'apos', 38: 'amp' }; var CHAR_S_INDEX = { '<': '<', '>': '>', '"': '"', '\'': ''', '&': '&' }; var XmlEntities = /** @class */ (function () { function XmlEntities() { } XmlEntities.prototype.encode = function (str) { if (!str || !str.length) { return ''; } return str.replace(/[<>"'&]/g, function (s) { return CHAR_S_INDEX[s]; }); }; XmlEntities.encode = function (str) { return new XmlEntities().encode(str); }; XmlEntities.prototype.decode = function (str) { if (!str || !str.length) { return ''; } return str.replace(/&#?[0-9a-zA-Z]+;?/g, function (s) { if (s.charAt(1) === '#') { var code = s.charAt(2).toLowerCase() === 'x' ? parseInt(s.substr(3), 16) : parseInt(s.substr(2)); if (!isNaN(code) || code >= -32768) { if (code <= 65535) { return String.fromCharCode(code); } else { return surrogate_pairs_1.fromCodePoint(code); } } return ''; } return ALPHA_INDEX[s] || s; }); }; XmlEntities.decode = function (str) { return new XmlEntities().decode(str); }; XmlEntities.prototype.encodeNonUTF = function (str) { if (!str || !str.length) { return ''; } var strLength = str.length; var result = ''; var i = 0; while (i < strLength) { var c = str.charCodeAt(i); var alpha = CHAR_INDEX[c]; if (alpha) { result += "&" + alpha + ";"; i++; continue; } if (c < 32 || c > 126) { if (c >= surrogate_pairs_1.highSurrogateFrom && c <= surrogate_pairs_1.highSurrogateTo) { result += '&#' + surrogate_pairs_1.getCodePoint(str, i) + ';'; i++; } else { result += '&#' + c + ';'; } } else { result += str.charAt(i); } i++; } return result; }; XmlEntities.encodeNonUTF = function (str) { return new XmlEntities().encodeNonUTF(str); }; XmlEntities.prototype.encodeNonASCII = function (str) { if (!str || !str.length) { return ''; } var strLength = str.length; var result = ''; var i = 0; while (i < strLength) { var c = str.charCodeAt(i); if (c <= 255) { result += str[i++]; continue; } if (c >= surrogate_pairs_1.highSurrogateFrom && c <= surrogate_pairs_1.highSurrogateTo) { result += '&#' + surrogate_pairs_1.getCodePoint(str, i) + ';'; i++; } else { result += '&#' + c + ';'; } i++; } return result; }; XmlEntities.encodeNonASCII = function (str) { return new XmlEntities().encodeNonASCII(str); }; return XmlEntities; }()); exports.XmlEntities = XmlEntities;