133 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			133 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "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;
 |