You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

преди 3 години
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. "use strict";
  2. var __importDefault = (this && this.__importDefault) || function (mod) {
  3. return (mod && mod.__esModule) ? mod : { "default": mod };
  4. };
  5. Object.defineProperty(exports, "__esModule", { value: true });
  6. var xml_json_1 = __importDefault(require("./maps/xml.json"));
  7. var inverseXML = getInverseObj(xml_json_1.default);
  8. var xmlReplacer = getInverseReplacer(inverseXML);
  9. exports.encodeXML = getInverse(inverseXML, xmlReplacer);
  10. var entities_json_1 = __importDefault(require("./maps/entities.json"));
  11. var inverseHTML = getInverseObj(entities_json_1.default);
  12. var htmlReplacer = getInverseReplacer(inverseHTML);
  13. exports.encodeHTML = getInverse(inverseHTML, htmlReplacer);
  14. function getInverseObj(obj) {
  15. return Object.keys(obj)
  16. .sort()
  17. .reduce(function (inverse, name) {
  18. inverse[obj[name]] = "&" + name + ";";
  19. return inverse;
  20. }, {});
  21. }
  22. function getInverseReplacer(inverse) {
  23. var single = [];
  24. var multiple = [];
  25. for (var _i = 0, _a = Object.keys(inverse); _i < _a.length; _i++) {
  26. var k = _a[_i];
  27. if (k.length === 1) {
  28. // Add value to single array
  29. single.push("\\" + k);
  30. }
  31. else {
  32. // Add value to multiple array
  33. multiple.push(k);
  34. }
  35. }
  36. // Add ranges to single characters.
  37. single.sort();
  38. for (var start = 0; start < single.length - 1; start++) {
  39. // Find the end of a run of characters
  40. var end = start;
  41. while (end < single.length - 1 &&
  42. single[end].charCodeAt(1) + 1 === single[end + 1].charCodeAt(1)) {
  43. end += 1;
  44. }
  45. var count = 1 + end - start;
  46. // We want to replace at least three characters
  47. if (count < 3)
  48. continue;
  49. single.splice(start, count, single[start] + "-" + single[end]);
  50. }
  51. multiple.unshift("[" + single.join("") + "]");
  52. return new RegExp(multiple.join("|"), "g");
  53. }
  54. var reNonASCII = /[^\0-\x7F]/gu;
  55. function singleCharReplacer(c) {
  56. // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
  57. return "&#x" + c.codePointAt(0).toString(16).toUpperCase() + ";";
  58. }
  59. function getInverse(inverse, re) {
  60. return function (data) {
  61. return data
  62. .replace(re, function (name) { return inverse[name]; })
  63. .replace(reNonASCII, singleCharReplacer);
  64. };
  65. }
  66. var reXmlChars = getInverseReplacer(inverseXML);
  67. function escape(data) {
  68. return data
  69. .replace(reXmlChars, singleCharReplacer)
  70. .replace(reNonASCII, singleCharReplacer);
  71. }
  72. exports.escape = escape;