| 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
|
|
|