diff options
Diffstat (limited to 'bin/wiki/ImportarDesdeURL/node_modules/cheerio/node_modules/entities/lib/decode.js')
-rw-r--r-- | bin/wiki/ImportarDesdeURL/node_modules/cheerio/node_modules/entities/lib/decode.js | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/bin/wiki/ImportarDesdeURL/node_modules/cheerio/node_modules/entities/lib/decode.js b/bin/wiki/ImportarDesdeURL/node_modules/cheerio/node_modules/entities/lib/decode.js new file mode 100644 index 00000000..1ca99ad6 --- /dev/null +++ b/bin/wiki/ImportarDesdeURL/node_modules/cheerio/node_modules/entities/lib/decode.js @@ -0,0 +1,70 @@ +var entityMap = require("../maps/entities.json"), + legacyMap = require("../maps/legacy.json"), + xmlMap = require("../maps/xml.json"), + decodeCodePoint = require("./decode_codepoint.js"); + +var decodeXMLStrict = getStrictDecoder(xmlMap), + decodeHTMLStrict = getStrictDecoder(entityMap); + +function getStrictDecoder(map) { + var keys = Object.keys(map).join("|"), + replace = getReplacer(map); + + keys += "|#[xX][\\da-fA-F]+|#\\d+"; + + var re = new RegExp("&(?:" + keys + ");", "g"); + + return function(str) { + return String(str).replace(re, replace); + }; +} + +var decodeHTML = (function() { + var legacy = Object.keys(legacyMap).sort(sorter); + + var keys = Object.keys(entityMap).sort(sorter); + + for (var i = 0, j = 0; i < keys.length; i++) { + if (legacy[j] === keys[i]) { + keys[i] += ";?"; + j++; + } else { + keys[i] += ";"; + } + } + + var re = new RegExp("&(?:" + keys.join("|") + "|#[xX][\\da-fA-F]+;?|#\\d+;?)", "g"), + replace = getReplacer(entityMap); + + function replacer(str) { + if (str.substr(-1) !== ";") str += ";"; + return replace(str); + } + + //TODO consider creating a merged map + return function(str) { + return String(str).replace(re, replacer); + }; +})(); + +function sorter(a, b) { + return a < b ? 1 : -1; +} + +function getReplacer(map) { + return function replace(str) { + if (str.charAt(1) === "#") { + if (str.charAt(2) === "X" || str.charAt(2) === "x") { + return decodeCodePoint(parseInt(str.substr(3), 16)); + } + return decodeCodePoint(parseInt(str.substr(2), 10)); + } + return map[str.slice(1, -1)]; + }; +} + +module.exports = { + XML: decodeXMLStrict, + HTML: decodeHTML, + HTMLStrict: decodeHTMLStrict +}; |