Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(20)

Unified Diff: tools/vulcanize/node_modules/vulcanize/node_modules/cheerio/node_modules/entities/index.js

Issue 125733002: Add vulcanize to tools. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tools/vulcanize/node_modules/vulcanize/node_modules/cheerio/node_modules/entities/index.js
diff --git a/tools/vulcanize/node_modules/vulcanize/node_modules/cheerio/node_modules/entities/index.js b/tools/vulcanize/node_modules/vulcanize/node_modules/cheerio/node_modules/entities/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..b5365383305f17647e17cd2ae1afbfea04ad2e97
--- /dev/null
+++ b/tools/vulcanize/node_modules/vulcanize/node_modules/cheerio/node_modules/entities/index.js
@@ -0,0 +1,117 @@
+var modes = ["XML", "HTML4", "HTML5"];
+
+module.exports = {
+ decode: function(data, level){
+ if(!modes[level]) level = 0;
+ return module.exports["decode" + modes[level]](data);
+ },
+ decodeStrict: function(data, level){
+ if(!modes[level]) level = 0;
+ return module.exports["decode" + modes[level] + "Strict"](data);
+ },
+ encode: function(data, level){
+ if(!modes[level]) level = 0;
+ return module.exports["encode" + modes[level]](data);
+ }
+};
+
+modes.reduce(function(prev, name){
+ var obj = require("./entities/" + name.toLowerCase() + ".json");
+
+ if(prev){
+ Object.keys(prev).forEach(function(name){
+ obj[name] = prev[name];
+ });
+ }
+
+ module.exports["decode" + name + "Strict"] = getStrictReplacer(obj);
+
+ if(name === "XML"){
+ //there is no non-strict mode for XML
+ module.exports.decodeXML = module.exports.decodeXMLStrict;
+ } else {
+ module.exports["decode" + name] = getReplacer(obj);
+ }
+
+ module.exports["encode" + name] = getReverse(obj);
+
+ return obj;
+}, null);
+
+function getReplacer(obj){
+ var keys = Object.keys(obj).sort();
+ var re = keys.join("|").replace(/(\w+)\|\1;/g, "$1;?");
+
+ // also match hex and char codes
+ re += "|#[xX][\\da-fA-F]+;?|#\\d+;?";
+
+ return genReplaceFunc(
+ new RegExp("&(?:" + re + ")", "g"),
+ function func(name){
+ if(name.charAt(1) === "#"){
+ if(name.charAt(2).toLowerCase() === "x"){
+ return String.fromCharCode(parseInt(name.substr(3), 16));
+ }
+ return String.fromCharCode(parseInt(name.substr(2), 10));
+ }
+ return obj[name.substr(1)];
+ }
+ );
+}
+
+function getStrictReplacer(obj){
+ var keys = Object.keys(obj).sort().filter(RegExp.prototype.test, /;$/);
+ var re = keys.map(function(name){
+ return name.slice(0, -1); //remove trailing semicolon
+ }).join("|");
+
+ // also match hex and char codes
+ re += "|#[xX][\\da-fA-F]+|#\\d+";
+
+ var expr = new RegExp("&(?:" + re + ");", "g");
+
+ return genReplaceFunc(expr, func);
+
+ function func(name){
+ if(name.charAt(1) === "#"){
+ if(name.charAt(2).toLowerCase() === "x"){
+ return String.fromCharCode(parseInt(name.substr(3), 16));
+ }
+ return String.fromCharCode(parseInt(name.substr(2), 10));
+ }
+ return obj[name.substr(1)];
+ }
+}
+
+var re_nonUTF8 = /[\u00c0-\u00d6\u00d8-\u00f6\u00f8-\u02ff\u0370-\u037d\u037f-\u1fff\u200c\u200d\u2070-\u218f\u2c00-\u2fef\u3001-\ud7ff\uf900-\ufdcf\ufdf0-\ufffd]/g;
+
+function nonUTF8Replacer(c){
+ return "&#" + c.charCodeAt(0) + ";";
+}
+
+function getReverse(obj){
+ var reverse = Object.keys(obj).filter(function(name){
+ //prefer identifiers with a semicolon
+ return name.substr(-1) === ";" || obj[name + ";"] !== obj[name];
+ }).reduce(function(reverse, name){
+ reverse[obj[name]] = name;
+ return reverse;
+ }, {});
+
+ var regex = new RegExp("\\" + Object.keys(reverse).sort().join("|\\"), "g");
+ function func(name){
+ return "&" + reverse[name];
+ }
+
+ return function(data){
+ return data
+ .replace(regex, func)
+ .replace(re_nonUTF8, nonUTF8Replacer);
+ };
+}
+
+function genReplaceFunc(regex, func){
+ return function(data){
+ return data.replace(regex, func);
+ };
+}

Powered by Google App Engine
This is Rietveld 408576698