react / wstein / node_modules / jest-cli / node_modules / jsdom / node_modules / htmlparser2 / node_modules / entities / lib / decode.js
81147 viewsvar entityMap = require("../maps/entities.json"),1legacyMap = require("../maps/legacy.json"),2xmlMap = require("../maps/xml.json"),3decodeCodePoint = require("./decode_codepoint.js");45var decodeXMLStrict = getStrictDecoder(xmlMap),6decodeHTMLStrict = getStrictDecoder(entityMap);78function getStrictDecoder(map){9var keys = Object.keys(map).join("|"),10replace = getReplacer(map);1112keys += "|#[xX][\\da-fA-F]+|#\\d+";1314var re = new RegExp("&(?:" + keys + ");", "g");1516return function(str){17return String(str).replace(re, replace);18};19}2021var decodeHTML = (function(){22var legacy = Object.keys(legacyMap)23.sort(sorter);2425var keys = Object.keys(entityMap)26.sort(sorter);2728for(var i = 0, j = 0; i < keys.length; i++){29if(legacy[j] === keys[i]){30keys[i] += ";?";31j++;32} else {33keys[i] += ";";34}35}3637var re = new RegExp("&(?:" + keys.join("|") + "|#[xX][\\da-fA-F]+;?|#\\d+;?)", "g"),38replace = getReplacer(entityMap);3940function replacer(str){41if(str.substr(-1) !== ";") str += ";";42return replace(str);43}4445//TODO consider creating a merged map46return function(str){47return String(str).replace(re, replacer);48};49}());5051function sorter(a, b){52return a < b ? 1 : -1;53}5455function getReplacer(map){56return function replace(str){57if(str.charAt(1) === "#"){58if(str.charAt(2) === "X" || str.charAt(2) === "x"){59return decodeCodePoint(parseInt(str.substr(3), 16));60}61return decodeCodePoint(parseInt(str.substr(2), 10));62}63return map[str.slice(1, -1)];64};65}6667module.exports = {68XML: decodeXMLStrict,69HTML: decodeHTML,70HTMLStrict: decodeHTMLStrict71};7273