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 |