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

Unified Diff: tools/vulcanize/node_modules/vulcanize/node_modules/cheerio/node_modules/cheerio-select/node_modules/CSSselect/node_modules/CSSwhat/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/cheerio-select/node_modules/CSSselect/node_modules/CSSwhat/index.js
diff --git a/tools/vulcanize/node_modules/vulcanize/node_modules/cheerio/node_modules/cheerio-select/node_modules/CSSselect/node_modules/CSSwhat/index.js b/tools/vulcanize/node_modules/vulcanize/node_modules/cheerio/node_modules/cheerio-select/node_modules/CSSselect/node_modules/CSSwhat/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..72963d01361482f450d50a67fdb8e5358a7365c5
--- /dev/null
+++ b/tools/vulcanize/node_modules/vulcanize/node_modules/cheerio/node_modules/cheerio-select/node_modules/CSSselect/node_modules/CSSwhat/index.js
@@ -0,0 +1,164 @@
+"use strict";
+
+module.exports = parse;
+
+var re_ws = /^\s/,
+ re_name = /^(?:\\.|[\w\-\u00c0-\uFFFF])+/,
+ re_cleanSelector = /([^\\])\s*([>~+,]|$)\s*/g,
+ re_combinators = /^\s*[^\\]\s*[>~+,]|$\s*/g,
+ re_escape = /\\([\da-f]{1,6}\s?|(\s)|.)/ig,
+ re_comma = /^\s*,\s*/,
+ //modified version of https://github.com/jquery/sizzle/blob/master/src/sizzle.js#L87
+ re_attr = /^\s*((?:\\.|[\w\u00c0-\uFFFF\-])+)\s*(?:(\S?)=\s*(?:(['"])(.*?)\3|(#?(?:\\.|[\w\u00c0-\uFFFF\-])*)|)|)\s*(i)?\]/;
+
+var actionTypes = {
+ __proto__: null,
+ "undefined": "exists",
+ "": "equals",
+ "~": "element",
+ "^": "start",
+ "$": "end",
+ "*": "any",
+ "!": "not",
+ "|": "hyphen"
+};
+
+var simpleSelectors = {
+ __proto__: null,
+ ">": "child",
+ "<": "parent",
+ "~": "sibling",
+ "+": "adjacent",
+ "*": "universal"
+};
+
+var attribSelectors = {
+ __proto__: null,
+ "#": ["id", "equals"],
+ ".": ["class", "element"]
+};
+
+//unescape function taken from https://github.com/jquery/sizzle/blob/master/src/sizzle.js#L139
+function funescape( _, escaped, escapedWhitespace ) {
+ var high = "0x" + escaped - 0x10000;
+ // NaN means non-codepoint
+ // Support: Firefox
+ // Workaround erroneous numeric interpretation of +"0x"
+ return high !== high || escapedWhitespace ?
+ escaped :
+ // BMP codepoint
+ high < 0 ?
+ String.fromCharCode( high + 0x10000 ) :
+ // Supplemental Plane codepoint (surrogate pair)
+ String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+}
+
+function unescapeCSS(str){
+ return str.replace(re_escape, funescape);
+}
+
+function getClosingPos(selector){
+ var pos = 1, counter = 1, len = selector.length;
+
+ for(; counter > 0 && pos < len; pos++){
+ if(selector.charAt(pos) === "(") counter++;
+ else if(selector.charAt(pos) === ")") counter--;
+ }
+
+ return pos;
+}
+
+function parse(selector, options){
+ selector = (selector + "").trimLeft().replace(re_cleanSelector, "$1$2");
+
+ var subselects = [],
+ tokens = [],
+ data, firstChar, name;
+
+ function getName(){
+ var sub = selector.match(re_name)[0];
+ selector = selector.substr(sub.length);
+ return unescapeCSS(sub);
+ }
+
+ function getLCName(){
+ var name = getName();
+
+ if(!options || !options.xmlMode){
+ name = name.toLowerCase();
+ }
+
+ return name;
+ }
+
+ while(selector !== ""){
+ if(re_name.test(selector)){
+ tokens.push({type: "tag", name: getLCName()});
+ } else if(re_ws.test(selector)){
+ tokens.push({type: "descendant"});
+ selector = selector.trimLeft();
+ } else {
+ firstChar = selector.charAt(0);
+ selector = selector.substr(1);
+
+ if(firstChar in simpleSelectors){
+ tokens.push({type: simpleSelectors[firstChar]});
+ } else if(firstChar in attribSelectors){
+ tokens.push({
+ type: "attribute",
+ name: attribSelectors[firstChar][0],
+ action: attribSelectors[firstChar][1],
+ value: getName(),
+ ignoreCase: false
+ });
+ } else if(firstChar === "["){
+ data = selector.match(re_attr);
+ if(!data){
+ throw new SyntaxError("Malformed attribute selector: " + selector);
+ }
+ selector = selector.substr(data[0].length);
+ name = unescapeCSS(data[1]);
+
+ if(!options || !options.xmlMode){
+ name = name.toLowerCase();
+ }
+
+ tokens.push({
+ type: "attribute",
+ name: name,
+ action: actionTypes[data[2]],
+ value: unescapeCSS(data[4] || data[5] || ""),
+ ignoreCase: !!data[6]
+ });
+
+ } else if(firstChar === ":"){
+ //if(selector.charAt(0) === ":"){} //TODO pseudo-element
+ name = getLCName();
+ data = null;
+
+ if(selector.charAt(0) === "("){
+ var pos = getClosingPos(selector);
+ data = selector.substr(1, pos - 2);
+ selector = selector.substr(pos);
+ }
+
+ tokens.push({type: "pseudo", name: name, data: data});
+ } else if(firstChar === ","){
+ if(tokens.length === 0){
+ throw new SyntaxError("empty sub-selector");
+ }
+ subselects.push(tokens);
+ tokens = [];
+ } else {
+ //otherwise, the parser needs to throw or it would enter an infinite loop
+ throw new SyntaxError("Unmatched selector: " + firstChar + selector);
+ }
+ }
+ }
+
+ if(subselects.length > 0 && tokens.length === 0){
+ throw new SyntaxError("empty sub-selector");
+ }
+ subselects.push(tokens);
+ return subselects;
+}

Powered by Google App Engine
This is Rietveld 408576698