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

Unified Diff: node_modules/vulcanize/node_modules/cssom/lib/parse.js

Issue 800513006: Added vulcanize under third_party/npm_modules (Closed) Base URL: https://chromium.googlesource.com/infra/third_party/npm_modules.git@master
Patch Set: Created 6 years 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: node_modules/vulcanize/node_modules/cssom/lib/parse.js
diff --git a/node_modules/vulcanize/node_modules/cssom/lib/parse.js b/node_modules/vulcanize/node_modules/cssom/lib/parse.js
new file mode 100644
index 0000000000000000000000000000000000000000..223017b5196cfb49162fca797ac462d7ce69d1af
--- /dev/null
+++ b/node_modules/vulcanize/node_modules/cssom/lib/parse.js
@@ -0,0 +1,338 @@
+//.CommonJS
+var CSSOM = {};
+///CommonJS
+
+
+/**
+ * @param {string} token
+ */
+CSSOM.parse = function parse(token) {
+
+ var i = 0;
+
+ /**
+ "before-selector" or
+ "selector" or
+ "atRule" or
+ "atBlock" or
+ "before-name" or
+ "name" or
+ "before-value" or
+ "value"
+ */
+ var state = "before-selector";
+
+ var index;
+ var buffer = "";
+
+ var SIGNIFICANT_WHITESPACE = {
+ "selector": true,
+ "value": true,
+ "atRule": true,
+ "importRule-begin": true,
+ "importRule": true,
+ "atBlock": true
+ };
+
+ var styleSheet = new CSSOM.CSSStyleSheet;
+
+ // @type CSSStyleSheet|CSSMediaRule|CSSFontFaceRule|CSSKeyframesRule
+ var currentScope = styleSheet;
+
+ // @type CSSMediaRule|CSSKeyframesRule
+ var parentRule;
+
+ var selector, name, value, priority="", styleRule, mediaRule, importRule, fontFaceRule, keyframesRule, keyframeRule;
+
+ var atKeyframesRegExp = /@(-(?:\w+-)+)?keyframes/g;
+
+ var parseError = function(message) {
+ var lines = token.substring(0, i).split('\n');
+ var lineCount = lines.length;
+ var charCount = lines.pop().length + 1;
+ var error = new Error(message + ' (line ' + lineCount + ', char ' + charCount + ')');
+ error.line = lineCount;
+ error.char = charCount;
+ error.styleSheet = styleSheet;
+ throw error;
+ };
+
+ for (var character; character = token.charAt(i); i++) {
+
+ switch (character) {
+
+ case " ":
+ case "\t":
+ case "\r":
+ case "\n":
+ case "\f":
+ if (SIGNIFICANT_WHITESPACE[state]) {
+ buffer += character;
+ }
+ break;
+
+ // String
+ case '"':
+ index = token.indexOf('"', i + 1) + 1;
+ if (!index) {
+ parseError('Unmatched "');
+ }
+ buffer += token.slice(i, index);
+ i = index - 1;
+ switch (state) {
+ case 'before-value':
+ state = 'value';
+ break;
+ case 'importRule-begin':
+ state = 'importRule';
+ break;
+ }
+ break;
+
+ case "'":
+ index = token.indexOf("'", i + 1) + 1;
+ if (!index) {
+ parseError("Unmatched '");
+ }
+ buffer += token.slice(i, index);
+ i = index - 1;
+ switch (state) {
+ case 'before-value':
+ state = 'value';
+ break;
+ case 'importRule-begin':
+ state = 'importRule';
+ break;
+ }
+ break;
+
+ // Comment
+ case "/":
+ if (token.charAt(i + 1) === "*") {
+ i += 2;
+ index = token.indexOf("*/", i);
+ if (index === -1) {
+ parseError("Missing */");
+ } else {
+ i = index + 1;
+ }
+ } else {
+ buffer += character;
+ }
+ if (state === "importRule-begin") {
+ buffer += " ";
+ state = "importRule";
+ }
+ break;
+
+ // At-rule
+ case "@":
+ if (token.indexOf("@media", i) === i) {
+ state = "atBlock";
+ mediaRule = new CSSOM.CSSMediaRule;
+ mediaRule.__starts = i;
+ i += "media".length;
+ buffer = "";
+ break;
+ } else if (token.indexOf("@import", i) === i) {
+ state = "importRule-begin";
+ i += "import".length;
+ buffer += "@import";
+ break;
+ } else if (token.indexOf("@font-face", i) === i) {
+ state = "fontFaceRule-begin";
+ i += "font-face".length;
+ fontFaceRule = new CSSOM.CSSFontFaceRule;
+ fontFaceRule.__starts = i;
+ buffer = "";
+ break;
+ } else {
+ atKeyframesRegExp.lastIndex = i;
+ var matchKeyframes = atKeyframesRegExp.exec(token);
+ if (matchKeyframes && matchKeyframes.index === i) {
+ state = "keyframesRule-begin";
+ keyframesRule = new CSSOM.CSSKeyframesRule;
+ keyframesRule.__starts = i;
+ keyframesRule._vendorPrefix = matchKeyframes[1]; // Will come out as undefined if no prefix was found
+ i += matchKeyframes[0].length - 1;
+ buffer = "";
+ break;
+ } else if (state == "selector") {
+ state = "atRule";
+ }
+ }
+ buffer += character;
+ break;
+
+ case "{":
+ if (state === "selector" || state === "atRule") {
+ styleRule.selectorText = buffer.trim();
+ styleRule.style.__starts = i;
+ buffer = "";
+ state = "before-name";
+ } else if (state === "atBlock") {
+ mediaRule.media.mediaText = buffer.trim();
+ currentScope = parentRule = mediaRule;
+ mediaRule.parentStyleSheet = styleSheet;
+ buffer = "";
+ state = "before-selector";
+ } else if (state === "fontFaceRule-begin") {
+ if (parentRule) {
+ fontFaceRule.parentRule = parentRule;
+ }
+ fontFaceRule.parentStyleSheet = styleSheet;
+ styleRule = fontFaceRule;
+ buffer = "";
+ state = "before-name";
+ } else if (state === "keyframesRule-begin") {
+ keyframesRule.name = buffer.trim();
+ if (parentRule) {
+ keyframesRule.parentRule = parentRule;
+ }
+ keyframesRule.parentStyleSheet = styleSheet;
+ currentScope = parentRule = keyframesRule;
+ buffer = "";
+ state = "keyframeRule-begin";
+ } else if (state === "keyframeRule-begin") {
+ styleRule = new CSSOM.CSSKeyframeRule;
+ styleRule.keyText = buffer.trim();
+ styleRule.__starts = i;
+ buffer = "";
+ state = "before-name";
+ }
+ break;
+
+ case ":":
+ if (state === "name") {
+ name = buffer.trim();
+ buffer = "";
+ state = "before-value";
+ } else {
+ buffer += character;
+ }
+ break;
+
+ case '(':
+ if (state === 'value') {
+ index = token.indexOf(')', i + 1);
+ if (index === -1) {
+ parseError('Unmatched "("');
+ }
+ buffer += token.slice(i, index + 1);
+ i = index;
+ } else {
+ buffer += character;
+ }
+ break;
+
+ case "!":
+ if (state === "value" && token.indexOf("!important", i) === i) {
+ priority = "important";
+ i += "important".length;
+ } else {
+ buffer += character;
+ }
+ break;
+
+ case ";":
+ switch (state) {
+ case "value":
+ styleRule.style.setProperty(name, buffer.trim(), priority);
+ priority = "";
+ buffer = "";
+ state = "before-name";
+ break;
+ case "atRule":
+ buffer = "";
+ state = "before-selector";
+ break;
+ case "importRule":
+ importRule = new CSSOM.CSSImportRule;
+ importRule.parentStyleSheet = importRule.styleSheet.parentStyleSheet = styleSheet;
+ importRule.cssText = buffer + character;
+ styleSheet.cssRules.push(importRule);
+ buffer = "";
+ state = "before-selector";
+ break;
+ default:
+ buffer += character;
+ break;
+ }
+ break;
+
+ case "}":
+ switch (state) {
+ case "value":
+ styleRule.style.setProperty(name, buffer.trim(), priority);
+ priority = "";
+ case "before-name":
+ case "name":
+ styleRule.__ends = i + 1;
+ if (parentRule) {
+ styleRule.parentRule = parentRule;
+ }
+ styleRule.parentStyleSheet = styleSheet;
+ currentScope.cssRules.push(styleRule);
+ buffer = "";
+ if (currentScope.constructor === CSSOM.CSSKeyframesRule) {
+ state = "keyframeRule-begin";
+ } else {
+ state = "before-selector";
+ }
+ break;
+ case "keyframeRule-begin":
+ case "before-selector":
+ case "selector":
+ // End of media rule.
+ if (!parentRule) {
+ parseError("Unexpected }");
+ }
+ currentScope.__ends = i + 1;
+ // Nesting rules aren't supported yet
+ styleSheet.cssRules.push(currentScope);
+ currentScope = styleSheet;
+ parentRule = null;
+ buffer = "";
+ state = "before-selector";
+ break;
+ }
+ break;
+
+ default:
+ switch (state) {
+ case "before-selector":
+ state = "selector";
+ styleRule = new CSSOM.CSSStyleRule;
+ styleRule.__starts = i;
+ break;
+ case "before-name":
+ state = "name";
+ break;
+ case "before-value":
+ state = "value";
+ break;
+ case "importRule-begin":
+ state = "importRule";
+ break;
+ }
+ buffer += character;
+ break;
+ }
+ }
+
+ return styleSheet;
+};
+
+
+//.CommonJS
+exports.parse = CSSOM.parse;
+// The following modules cannot be included sooner due to the mutual dependency with parse.js
+CSSOM.CSSStyleSheet = require("./CSSStyleSheet").CSSStyleSheet;
+CSSOM.CSSStyleRule = require("./CSSStyleRule").CSSStyleRule;
+CSSOM.CSSImportRule = require("./CSSImportRule").CSSImportRule;
+CSSOM.CSSMediaRule = require("./CSSMediaRule").CSSMediaRule;
+CSSOM.CSSFontFaceRule = require("./CSSFontFaceRule").CSSFontFaceRule;
+CSSOM.CSSStyleDeclaration = require('./CSSStyleDeclaration').CSSStyleDeclaration;
+CSSOM.CSSKeyframeRule = require('./CSSKeyframeRule').CSSKeyframeRule;
+CSSOM.CSSKeyframesRule = require('./CSSKeyframesRule').CSSKeyframesRule;
+///CommonJS
« no previous file with comments | « node_modules/vulcanize/node_modules/cssom/lib/index.js ('k') | node_modules/vulcanize/node_modules/cssom/package.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698