react / wstein / node_modules / jest-cli / node_modules / jsdom / node_modules / htmlparser2 / node_modules / domutils / node_modules / dom-serializer / node_modules / entities / lib / encode.js
81169 viewsvar inverseXML = getInverseObj(require("../maps/xml.json")),1xmlReplacer = getInverseReplacer(inverseXML);23exports.XML = getInverse(inverseXML, xmlReplacer);45var inverseHTML = getInverseObj(require("../maps/entities.json")),6htmlReplacer = getInverseReplacer(inverseHTML);78exports.HTML = getInverse(inverseHTML, htmlReplacer);910function getInverseObj(obj){11return Object.keys(obj).sort().reduce(function(inverse, name){12inverse[obj[name]] = "&" + name + ";";13return inverse;14}, {});15}1617function getInverseReplacer(inverse){18var single = [],19multiple = [];2021Object.keys(inverse).forEach(function(k){22if(k.length === 1){23single.push("\\" + k);24} else {25multiple.push(k);26}27});2829//TODO add ranges30multiple.unshift("[" + single.join("") + "]");3132return new RegExp(multiple.join("|"), "g");33}3435var re_nonASCII = /[^\0-\x7F]/g,36re_astralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;3738function singleCharReplacer(c){39return "&#x" + c.charCodeAt(0).toString(16).toUpperCase() + ";";40}4142function astralReplacer(c){43// http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae44var high = c.charCodeAt(0);45var low = c.charCodeAt(1);46var codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000;47return "&#x" + codePoint.toString(16).toUpperCase() + ";";48}4950function getInverse(inverse, re){51function func(name){52return inverse[name];53}5455return function(data){56return data57.replace(re, func)58.replace(re_astralSymbols, astralReplacer)59.replace(re_nonASCII, singleCharReplacer);60};61}6263var re_xmlChars = getInverseReplacer(inverseXML);6465function escapeXML(data){66return data67.replace(re_xmlChars, singleCharReplacer)68.replace(re_astralSymbols, astralReplacer)69.replace(re_nonASCII, singleCharReplacer);70}7172exports.escape = escapeXML;737475