Software zum Installieren eines Smart-Mirror Frameworks , zum Nutzen von hochschulrelevanten Informationen, auf einem Raspberry-Pi.
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.

encode.js 2.0KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. var inverseXML = getInverseObj(require("../maps/xml.json")),
  2. xmlReplacer = getInverseReplacer(inverseXML);
  3. exports.XML = getInverse(inverseXML, xmlReplacer);
  4. var inverseHTML = getInverseObj(require("../maps/entities.json")),
  5. htmlReplacer = getInverseReplacer(inverseHTML);
  6. exports.HTML = getInverse(inverseHTML, htmlReplacer);
  7. function getInverseObj(obj) {
  8. return Object.keys(obj)
  9. .sort()
  10. .reduce(function(inverse, name) {
  11. inverse[obj[name]] = "&" + name + ";";
  12. return inverse;
  13. }, {});
  14. }
  15. function getInverseReplacer(inverse) {
  16. var single = [],
  17. multiple = [];
  18. Object.keys(inverse).forEach(function(k) {
  19. if (k.length === 1) {
  20. single.push("\\" + k);
  21. } else {
  22. multiple.push(k);
  23. }
  24. });
  25. //TODO add ranges
  26. multiple.unshift("[" + single.join("") + "]");
  27. return new RegExp(multiple.join("|"), "g");
  28. }
  29. var re_nonASCII = /[^\0-\x7F]/g,
  30. re_astralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
  31. function singleCharReplacer(c) {
  32. return (
  33. "&#x" +
  34. c
  35. .charCodeAt(0)
  36. .toString(16)
  37. .toUpperCase() +
  38. ";"
  39. );
  40. }
  41. function astralReplacer(c) {
  42. // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
  43. var high = c.charCodeAt(0);
  44. var low = c.charCodeAt(1);
  45. var codePoint = (high - 0xd800) * 0x400 + low - 0xdc00 + 0x10000;
  46. return "&#x" + codePoint.toString(16).toUpperCase() + ";";
  47. }
  48. function getInverse(inverse, re) {
  49. function func(name) {
  50. return inverse[name];
  51. }
  52. return function(data) {
  53. return data
  54. .replace(re, func)
  55. .replace(re_astralSymbols, astralReplacer)
  56. .replace(re_nonASCII, singleCharReplacer);
  57. };
  58. }
  59. var re_xmlChars = getInverseReplacer(inverseXML);
  60. function escapeXML(data) {
  61. return data
  62. .replace(re_xmlChars, singleCharReplacer)
  63. .replace(re_astralSymbols, astralReplacer)
  64. .replace(re_nonASCII, singleCharReplacer);
  65. }
  66. exports.escape = escapeXML;