UNPKG

angular2

Version:

Angular 2 - a web framework for modern web apps

660 lines 94.9 kB
'use strict';"use strict"; var __extends = (this && this.__extends) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; var parse_util_1 = require("angular2/src/compiler/parse_util"); var lang_1 = require("angular2/src/facade/lang"); var lexer_1 = require("angular2/src/compiler/css/lexer"); var lexer_2 = require("angular2/src/compiler/css/lexer"); exports.CssToken = lexer_2.CssToken; (function (BlockType) { BlockType[BlockType["Import"] = 0] = "Import"; BlockType[BlockType["Charset"] = 1] = "Charset"; BlockType[BlockType["Namespace"] = 2] = "Namespace"; BlockType[BlockType["Supports"] = 3] = "Supports"; BlockType[BlockType["Keyframes"] = 4] = "Keyframes"; BlockType[BlockType["MediaQuery"] = 5] = "MediaQuery"; BlockType[BlockType["Selector"] = 6] = "Selector"; BlockType[BlockType["FontFace"] = 7] = "FontFace"; BlockType[BlockType["Page"] = 8] = "Page"; BlockType[BlockType["Document"] = 9] = "Document"; BlockType[BlockType["Viewport"] = 10] = "Viewport"; BlockType[BlockType["Unsupported"] = 11] = "Unsupported"; })(exports.BlockType || (exports.BlockType = {})); var BlockType = exports.BlockType; var EOF_DELIM = 1; var RBRACE_DELIM = 2; var LBRACE_DELIM = 4; var COMMA_DELIM = 8; var COLON_DELIM = 16; var SEMICOLON_DELIM = 32; var NEWLINE_DELIM = 64; var RPAREN_DELIM = 128; function mergeTokens(tokens, separator) { if (separator === void 0) { separator = ""; } var mainToken = tokens[0]; var str = mainToken.strValue; for (var i = 1; i < tokens.length; i++) { str += separator + tokens[i].strValue; } return new lexer_1.CssToken(mainToken.index, mainToken.column, mainToken.line, mainToken.type, str); } function getDelimFromToken(token) { return getDelimFromCharacter(token.numValue); } function getDelimFromCharacter(code) { switch (code) { case lexer_1.$EOF: return EOF_DELIM; case lexer_1.$COMMA: return COMMA_DELIM; case lexer_1.$COLON: return COLON_DELIM; case lexer_1.$SEMICOLON: return SEMICOLON_DELIM; case lexer_1.$RBRACE: return RBRACE_DELIM; case lexer_1.$LBRACE: return LBRACE_DELIM; case lexer_1.$RPAREN: return RPAREN_DELIM; default: return lexer_1.isNewline(code) ? NEWLINE_DELIM : 0; } } function characterContainsDelimiter(code, delimiters) { return lang_1.bitWiseAnd([getDelimFromCharacter(code), delimiters]) > 0; } var CssAST = (function () { function CssAST() { } CssAST.prototype.visit = function (visitor, context) { }; return CssAST; }()); exports.CssAST = CssAST; var ParsedCssResult = (function () { function ParsedCssResult(errors, ast) { this.errors = errors; this.ast = ast; } return ParsedCssResult; }()); exports.ParsedCssResult = ParsedCssResult; var CssParser = (function () { function CssParser(_scanner, _fileName) { this._scanner = _scanner; this._fileName = _fileName; this._errors = []; this._file = new parse_util_1.ParseSourceFile(this._scanner.input, _fileName); } /** @internal */ CssParser.prototype._resolveBlockType = function (token) { switch (token.strValue) { case '@-o-keyframes': case '@-moz-keyframes': case '@-webkit-keyframes': case '@keyframes': return BlockType.Keyframes; case '@charset': return BlockType.Charset; case '@import': return BlockType.Import; case '@namespace': return BlockType.Namespace; case '@page': return BlockType.Page; case '@document': return BlockType.Document; case '@media': return BlockType.MediaQuery; case '@font-face': return BlockType.FontFace; case '@viewport': return BlockType.Viewport; case '@supports': return BlockType.Supports; default: return BlockType.Unsupported; } }; CssParser.prototype.parse = function () { var delimiters = EOF_DELIM; var ast = this._parseStyleSheet(delimiters); var errors = this._errors; this._errors = []; return new ParsedCssResult(errors, ast); }; /** @internal */ CssParser.prototype._parseStyleSheet = function (delimiters) { var results = []; this._scanner.consumeEmptyStatements(); while (this._scanner.peek != lexer_1.$EOF) { this._scanner.setMode(lexer_1.CssLexerMode.BLOCK); results.push(this._parseRule(delimiters)); } return new CssStyleSheetAST(results); }; /** @internal */ CssParser.prototype._parseRule = function (delimiters) { if (this._scanner.peek == lexer_1.$AT) { return this._parseAtRule(delimiters); } return this._parseSelectorRule(delimiters); }; /** @internal */ CssParser.prototype._parseAtRule = function (delimiters) { this._scanner.setMode(lexer_1.CssLexerMode.BLOCK); var token = this._scan(); this._assertCondition(token.type == lexer_1.CssTokenType.AtKeyword, "The CSS Rule " + token.strValue + " is not a valid [@] rule.", token); var block, type = this._resolveBlockType(token); switch (type) { case BlockType.Charset: case BlockType.Namespace: case BlockType.Import: var value = this._parseValue(delimiters); this._scanner.setMode(lexer_1.CssLexerMode.BLOCK); this._scanner.consumeEmptyStatements(); return new CssInlineRuleAST(type, value); case BlockType.Viewport: case BlockType.FontFace: block = this._parseStyleBlock(delimiters); return new CssBlockRuleAST(type, block); case BlockType.Keyframes: var tokens = this._collectUntilDelim(lang_1.bitWiseOr([delimiters, RBRACE_DELIM, LBRACE_DELIM])); // keyframes only have one identifier name var name = tokens[0]; return new CssKeyframeRuleAST(name, this._parseKeyframeBlock(delimiters)); case BlockType.MediaQuery: this._scanner.setMode(lexer_1.CssLexerMode.MEDIA_QUERY); var tokens = this._collectUntilDelim(lang_1.bitWiseOr([delimiters, RBRACE_DELIM, LBRACE_DELIM])); return new CssMediaQueryRuleAST(tokens, this._parseBlock(delimiters)); case BlockType.Document: case BlockType.Supports: case BlockType.Page: this._scanner.setMode(lexer_1.CssLexerMode.AT_RULE_QUERY); var tokens = this._collectUntilDelim(lang_1.bitWiseOr([delimiters, RBRACE_DELIM, LBRACE_DELIM])); return new CssBlockDefinitionRuleAST(type, tokens, this._parseBlock(delimiters)); // if a custom @rule { ... } is used it should still tokenize the insides default: var listOfTokens = []; this._scanner.setMode(lexer_1.CssLexerMode.ALL); this._error(lexer_1.generateErrorMessage(this._scanner.input, "The CSS \"at\" rule \"" + token.strValue + "\" is not allowed to used here", token.strValue, token.index, token.line, token.column), token); this._collectUntilDelim(lang_1.bitWiseOr([delimiters, LBRACE_DELIM, SEMICOLON_DELIM])) .forEach(function (token) { listOfTokens.push(token); }); if (this._scanner.peek == lexer_1.$LBRACE) { this._consume(lexer_1.CssTokenType.Character, '{'); this._collectUntilDelim(lang_1.bitWiseOr([delimiters, RBRACE_DELIM, LBRACE_DELIM])) .forEach(function (token) { listOfTokens.push(token); }); this._consume(lexer_1.CssTokenType.Character, '}'); } return new CssUnknownTokenListAST(token, listOfTokens); } }; /** @internal */ CssParser.prototype._parseSelectorRule = function (delimiters) { var selectors = this._parseSelectors(delimiters); var block = this._parseStyleBlock(delimiters); this._scanner.setMode(lexer_1.CssLexerMode.BLOCK); this._scanner.consumeEmptyStatements(); return new CssSelectorRuleAST(selectors, block); }; /** @internal */ CssParser.prototype._parseSelectors = function (delimiters) { delimiters = lang_1.bitWiseOr([delimiters, LBRACE_DELIM]); var selectors = []; var isParsingSelectors = true; while (isParsingSelectors) { selectors.push(this._parseSelector(delimiters)); isParsingSelectors = !characterContainsDelimiter(this._scanner.peek, delimiters); if (isParsingSelectors) { this._consume(lexer_1.CssTokenType.Character, ','); isParsingSelectors = !characterContainsDelimiter(this._scanner.peek, delimiters); } } return selectors; }; /** @internal */ CssParser.prototype._scan = function () { var output = this._scanner.scan(); var token = output.token; var error = output.error; if (lang_1.isPresent(error)) { this._error(error.rawMessage, token); } return token; }; /** @internal */ CssParser.prototype._consume = function (type, value) { if (value === void 0) { value = null; } var output = this._scanner.consume(type, value); var token = output.token; var error = output.error; if (lang_1.isPresent(error)) { this._error(error.rawMessage, token); } return token; }; /** @internal */ CssParser.prototype._parseKeyframeBlock = function (delimiters) { delimiters = lang_1.bitWiseOr([delimiters, RBRACE_DELIM]); this._scanner.setMode(lexer_1.CssLexerMode.KEYFRAME_BLOCK); this._consume(lexer_1.CssTokenType.Character, '{'); var definitions = []; while (!characterContainsDelimiter(this._scanner.peek, delimiters)) { definitions.push(this._parseKeyframeDefinition(delimiters)); } this._consume(lexer_1.CssTokenType.Character, '}'); return new CssBlockAST(definitions); }; /** @internal */ CssParser.prototype._parseKeyframeDefinition = function (delimiters) { var stepTokens = []; delimiters = lang_1.bitWiseOr([delimiters, LBRACE_DELIM]); while (!characterContainsDelimiter(this._scanner.peek, delimiters)) { stepTokens.push(this._parseKeyframeLabel(lang_1.bitWiseOr([delimiters, COMMA_DELIM]))); if (this._scanner.peek != lexer_1.$LBRACE) { this._consume(lexer_1.CssTokenType.Character, ','); } } var styles = this._parseStyleBlock(lang_1.bitWiseOr([delimiters, RBRACE_DELIM])); this._scanner.setMode(lexer_1.CssLexerMode.BLOCK); return new CssKeyframeDefinitionAST(stepTokens, styles); }; /** @internal */ CssParser.prototype._parseKeyframeLabel = function (delimiters) { this._scanner.setMode(lexer_1.CssLexerMode.KEYFRAME_BLOCK); return mergeTokens(this._collectUntilDelim(delimiters)); }; /** @internal */ CssParser.prototype._parseSelector = function (delimiters) { delimiters = lang_1.bitWiseOr([delimiters, COMMA_DELIM, LBRACE_DELIM]); this._scanner.setMode(lexer_1.CssLexerMode.SELECTOR); var selectorCssTokens = []; var isComplex = false; var wsCssToken; var previousToken; var parenCount = 0; while (!characterContainsDelimiter(this._scanner.peek, delimiters)) { var code = this._scanner.peek; switch (code) { case lexer_1.$LPAREN: parenCount++; break; case lexer_1.$RPAREN: parenCount--; break; case lexer_1.$COLON: this._scanner.setMode(lexer_1.CssLexerMode.PSEUDO_SELECTOR); previousToken = this._consume(lexer_1.CssTokenType.Character, ':'); selectorCssTokens.push(previousToken); continue; case lexer_1.$LBRACKET: // if we are already inside an attribute selector then we can't // jump into the mode again. Therefore this error will get picked // up when the scan method is called below. if (this._scanner.getMode() != lexer_1.CssLexerMode.ATTRIBUTE_SELECTOR) { selectorCssTokens.push(this._consume(lexer_1.CssTokenType.Character, '[')); this._scanner.setMode(lexer_1.CssLexerMode.ATTRIBUTE_SELECTOR); continue; } break; case lexer_1.$RBRACKET: selectorCssTokens.push(this._consume(lexer_1.CssTokenType.Character, ']')); this._scanner.setMode(lexer_1.CssLexerMode.SELECTOR); continue; } var token = this._scan(); // special case for the ":not(" selector since it // contains an inner selector that needs to be parsed // in isolation if (this._scanner.getMode() == lexer_1.CssLexerMode.PSEUDO_SELECTOR && lang_1.isPresent(previousToken) && previousToken.numValue == lexer_1.$COLON && token.strValue == "not" && this._scanner.peek == lexer_1.$LPAREN) { selectorCssTokens.push(token); selectorCssTokens.push(this._consume(lexer_1.CssTokenType.Character, '(')); // the inner selector inside of :not(...) can only be one // CSS selector (no commas allowed) therefore we parse only // one selector by calling the method below this._parseSelector(lang_1.bitWiseOr([delimiters, RPAREN_DELIM])) .tokens.forEach(function (innerSelectorToken) { selectorCssTokens.push(innerSelectorToken); }); selectorCssTokens.push(this._consume(lexer_1.CssTokenType.Character, ')')); continue; } previousToken = token; if (token.type == lexer_1.CssTokenType.Whitespace) { wsCssToken = token; } else { if (lang_1.isPresent(wsCssToken)) { selectorCssTokens.push(wsCssToken); wsCssToken = null; isComplex = true; } selectorCssTokens.push(token); } } if (this._scanner.getMode() == lexer_1.CssLexerMode.ATTRIBUTE_SELECTOR) { this._error("Unbalanced CSS attribute selector at column " + previousToken.line + ":" + previousToken.column, previousToken); } else if (parenCount > 0) { this._error("Unbalanced pseudo selector function value at column " + previousToken.line + ":" + previousToken.column, previousToken); } return new CssSelectorAST(selectorCssTokens, isComplex); }; /** @internal */ CssParser.prototype._parseValue = function (delimiters) { delimiters = lang_1.bitWiseOr([delimiters, RBRACE_DELIM, SEMICOLON_DELIM, NEWLINE_DELIM]); this._scanner.setMode(lexer_1.CssLexerMode.STYLE_VALUE); var strValue = ""; var tokens = []; var previous; while (!characterContainsDelimiter(this._scanner.peek, delimiters)) { var token; if (lang_1.isPresent(previous) && previous.type == lexer_1.CssTokenType.Identifier && this._scanner.peek == lexer_1.$LPAREN) { token = this._consume(lexer_1.CssTokenType.Character, '('); tokens.push(token); strValue += token.strValue; this._scanner.setMode(lexer_1.CssLexerMode.STYLE_VALUE_FUNCTION); token = this._scan(); tokens.push(token); strValue += token.strValue; this._scanner.setMode(lexer_1.CssLexerMode.STYLE_VALUE); token = this._consume(lexer_1.CssTokenType.Character, ')'); tokens.push(token); strValue += token.strValue; } else { token = this._scan(); if (token.type != lexer_1.CssTokenType.Whitespace) { tokens.push(token); } strValue += token.strValue; } previous = token; } this._scanner.consumeWhitespace(); var code = this._scanner.peek; if (code == lexer_1.$SEMICOLON) { this._consume(lexer_1.CssTokenType.Character, ';'); } else if (code != lexer_1.$RBRACE) { this._error(lexer_1.generateErrorMessage(this._scanner.input, "The CSS key/value definition did not end with a semicolon", previous.strValue, previous.index, previous.line, previous.column), previous); } return new CssStyleValueAST(tokens, strValue); }; /** @internal */ CssParser.prototype._collectUntilDelim = function (delimiters, assertType) { if (assertType === void 0) { assertType = null; } var tokens = []; while (!characterContainsDelimiter(this._scanner.peek, delimiters)) { var val = lang_1.isPresent(assertType) ? this._consume(assertType) : this._scan(); tokens.push(val); } return tokens; }; /** @internal */ CssParser.prototype._parseBlock = function (delimiters) { delimiters = lang_1.bitWiseOr([delimiters, RBRACE_DELIM]); this._scanner.setMode(lexer_1.CssLexerMode.BLOCK); this._consume(lexer_1.CssTokenType.Character, '{'); this._scanner.consumeEmptyStatements(); var results = []; while (!characterContainsDelimiter(this._scanner.peek, delimiters)) { results.push(this._parseRule(delimiters)); } this._consume(lexer_1.CssTokenType.Character, '}'); this._scanner.setMode(lexer_1.CssLexerMode.BLOCK); this._scanner.consumeEmptyStatements(); return new CssBlockAST(results); }; /** @internal */ CssParser.prototype._parseStyleBlock = function (delimiters) { delimiters = lang_1.bitWiseOr([delimiters, RBRACE_DELIM, LBRACE_DELIM]); this._scanner.setMode(lexer_1.CssLexerMode.STYLE_BLOCK); this._consume(lexer_1.CssTokenType.Character, '{'); this._scanner.consumeEmptyStatements(); var definitions = []; while (!characterContainsDelimiter(this._scanner.peek, delimiters)) { definitions.push(this._parseDefinition(delimiters)); this._scanner.consumeEmptyStatements(); } this._consume(lexer_1.CssTokenType.Character, '}'); this._scanner.setMode(lexer_1.CssLexerMode.STYLE_BLOCK); this._scanner.consumeEmptyStatements(); return new CssBlockAST(definitions); }; /** @internal */ CssParser.prototype._parseDefinition = function (delimiters) { this._scanner.setMode(lexer_1.CssLexerMode.STYLE_BLOCK); var prop = this._consume(lexer_1.CssTokenType.Identifier); var parseValue, value = null; // the colon value separates the prop from the style. // there are a few cases as to what could happen if it // is missing switch (this._scanner.peek) { case lexer_1.$COLON: this._consume(lexer_1.CssTokenType.Character, ':'); parseValue = true; break; case lexer_1.$SEMICOLON: case lexer_1.$RBRACE: case lexer_1.$EOF: parseValue = false; break; default: var propStr = [prop.strValue]; if (this._scanner.peek != lexer_1.$COLON) { // this will throw the error var nextValue = this._consume(lexer_1.CssTokenType.Character, ':'); propStr.push(nextValue.strValue); var remainingTokens = this._collectUntilDelim(lang_1.bitWiseOr([delimiters, COLON_DELIM, SEMICOLON_DELIM]), lexer_1.CssTokenType.Identifier); if (remainingTokens.length > 0) { remainingTokens.forEach(function (token) { propStr.push(token.strValue); }); } prop = new lexer_1.CssToken(prop.index, prop.column, prop.line, prop.type, propStr.join(" ")); } // this means we've reached the end of the definition and/or block if (this._scanner.peek == lexer_1.$COLON) { this._consume(lexer_1.CssTokenType.Character, ':'); parseValue = true; } else { parseValue = false; } break; } if (parseValue) { value = this._parseValue(delimiters); } else { this._error(lexer_1.generateErrorMessage(this._scanner.input, "The CSS property was not paired with a style value", prop.strValue, prop.index, prop.line, prop.column), prop); } return new CssDefinitionAST(prop, value); }; /** @internal */ CssParser.prototype._assertCondition = function (status, errorMessage, problemToken) { if (!status) { this._error(errorMessage, problemToken); return true; } return false; }; /** @internal */ CssParser.prototype._error = function (message, problemToken) { var length = problemToken.strValue.length; var error = CssParseError.create(this._file, 0, problemToken.line, problemToken.column, length, message); this._errors.push(error); }; return CssParser; }()); exports.CssParser = CssParser; var CssStyleValueAST = (function (_super) { __extends(CssStyleValueAST, _super); function CssStyleValueAST(tokens, strValue) { _super.call(this); this.tokens = tokens; this.strValue = strValue; } CssStyleValueAST.prototype.visit = function (visitor, context) { visitor.visitCssValue(this); }; return CssStyleValueAST; }(CssAST)); exports.CssStyleValueAST = CssStyleValueAST; var CssRuleAST = (function (_super) { __extends(CssRuleAST, _super); function CssRuleAST() { _super.apply(this, arguments); } return CssRuleAST; }(CssAST)); exports.CssRuleAST = CssRuleAST; var CssBlockRuleAST = (function (_super) { __extends(CssBlockRuleAST, _super); function CssBlockRuleAST(type, block, name) { if (name === void 0) { name = null; } _super.call(this); this.type = type; this.block = block; this.name = name; } CssBlockRuleAST.prototype.visit = function (visitor, context) { visitor.visitCssBlock(this.block, context); }; return CssBlockRuleAST; }(CssRuleAST)); exports.CssBlockRuleAST = CssBlockRuleAST; var CssKeyframeRuleAST = (function (_super) { __extends(CssKeyframeRuleAST, _super); function CssKeyframeRuleAST(name, block) { _super.call(this, BlockType.Keyframes, block, name); } CssKeyframeRuleAST.prototype.visit = function (visitor, context) { visitor.visitCssKeyframeRule(this, context); }; return CssKeyframeRuleAST; }(CssBlockRuleAST)); exports.CssKeyframeRuleAST = CssKeyframeRuleAST; var CssKeyframeDefinitionAST = (function (_super) { __extends(CssKeyframeDefinitionAST, _super); function CssKeyframeDefinitionAST(_steps, block) { _super.call(this, BlockType.Keyframes, block, mergeTokens(_steps, ",")); this.steps = _steps; } CssKeyframeDefinitionAST.prototype.visit = function (visitor, context) { visitor.visitCssKeyframeDefinition(this, context); }; return CssKeyframeDefinitionAST; }(CssBlockRuleAST)); exports.CssKeyframeDefinitionAST = CssKeyframeDefinitionAST; var CssBlockDefinitionRuleAST = (function (_super) { __extends(CssBlockDefinitionRuleAST, _super); function CssBlockDefinitionRuleAST(type, query, block) { _super.call(this, type, block); this.query = query; this.strValue = query.map(function (token) { return token.strValue; }).join(""); var firstCssToken = query[0]; this.name = new lexer_1.CssToken(firstCssToken.index, firstCssToken.column, firstCssToken.line, lexer_1.CssTokenType.Identifier, this.strValue); } CssBlockDefinitionRuleAST.prototype.visit = function (visitor, context) { visitor.visitCssBlock(this.block, context); }; return CssBlockDefinitionRuleAST; }(CssBlockRuleAST)); exports.CssBlockDefinitionRuleAST = CssBlockDefinitionRuleAST; var CssMediaQueryRuleAST = (function (_super) { __extends(CssMediaQueryRuleAST, _super); function CssMediaQueryRuleAST(query, block) { _super.call(this, BlockType.MediaQuery, query, block); } CssMediaQueryRuleAST.prototype.visit = function (visitor, context) { visitor.visitCssMediaQueryRule(this, context); }; return CssMediaQueryRuleAST; }(CssBlockDefinitionRuleAST)); exports.CssMediaQueryRuleAST = CssMediaQueryRuleAST; var CssInlineRuleAST = (function (_super) { __extends(CssInlineRuleAST, _super); function CssInlineRuleAST(type, value) { _super.call(this); this.type = type; this.value = value; } CssInlineRuleAST.prototype.visit = function (visitor, context) { visitor.visitInlineCssRule(this, context); }; return CssInlineRuleAST; }(CssRuleAST)); exports.CssInlineRuleAST = CssInlineRuleAST; var CssSelectorRuleAST = (function (_super) { __extends(CssSelectorRuleAST, _super); function CssSelectorRuleAST(selectors, block) { _super.call(this, BlockType.Selector, block); this.selectors = selectors; this.strValue = selectors.map(function (selector) { return selector.strValue; }).join(","); } CssSelectorRuleAST.prototype.visit = function (visitor, context) { visitor.visitCssSelectorRule(this, context); }; return CssSelectorRuleAST; }(CssBlockRuleAST)); exports.CssSelectorRuleAST = CssSelectorRuleAST; var CssDefinitionAST = (function (_super) { __extends(CssDefinitionAST, _super); function CssDefinitionAST(property, value) { _super.call(this); this.property = property; this.value = value; } CssDefinitionAST.prototype.visit = function (visitor, context) { visitor.visitCssDefinition(this, context); }; return CssDefinitionAST; }(CssAST)); exports.CssDefinitionAST = CssDefinitionAST; var CssSelectorAST = (function (_super) { __extends(CssSelectorAST, _super); function CssSelectorAST(tokens, isComplex) { if (isComplex === void 0) { isComplex = false; } _super.call(this); this.tokens = tokens; this.isComplex = isComplex; this.strValue = tokens.map(function (token) { return token.strValue; }).join(""); } CssSelectorAST.prototype.visit = function (visitor, context) { visitor.visitCssSelector(this, context); }; return CssSelectorAST; }(CssAST)); exports.CssSelectorAST = CssSelectorAST; var CssBlockAST = (function (_super) { __extends(CssBlockAST, _super); function CssBlockAST(entries) { _super.call(this); this.entries = entries; } CssBlockAST.prototype.visit = function (visitor, context) { visitor.visitCssBlock(this, context); }; return CssBlockAST; }(CssAST)); exports.CssBlockAST = CssBlockAST; var CssStyleSheetAST = (function (_super) { __extends(CssStyleSheetAST, _super); function CssStyleSheetAST(rules) { _super.call(this); this.rules = rules; } CssStyleSheetAST.prototype.visit = function (visitor, context) { visitor.visitCssStyleSheet(this, context); }; return CssStyleSheetAST; }(CssAST)); exports.CssStyleSheetAST = CssStyleSheetAST; var CssParseError = (function (_super) { __extends(CssParseError, _super); function CssParseError(span, message) { _super.call(this, span, message); } CssParseError.create = function (file, offset, line, col, length, errMsg) { var start = new parse_util_1.ParseLocation(file, offset, line, col); var end = new parse_util_1.ParseLocation(file, offset, line, col + length); var span = new parse_util_1.ParseSourceSpan(start, end); return new CssParseError(span, "CSS Parse Error: " + errMsg); }; return CssParseError; }(parse_util_1.ParseError)); exports.CssParseError = CssParseError; var CssUnknownTokenListAST = (function (_super) { __extends(CssUnknownTokenListAST, _super); function CssUnknownTokenListAST(name, tokens) { _super.call(this); this.name = name; this.tokens = tokens; } CssUnknownTokenListAST.prototype.visit = function (visitor, context) { visitor.visitUnkownRule(this, context); }; return CssUnknownTokenListAST; }(CssRuleAST)); exports.CssUnknownTokenListAST = CssUnknownTokenListAST; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGlmZmluZ19wbHVnaW5fd3JhcHBlci1vdXRwdXRfcGF0aC1CUkplcjFKOS50bXAvYW5ndWxhcjIvc3JjL2NvbXBpbGVyL2Nzcy9wYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsMkJBS08sa0NBQWtDLENBQUMsQ0FBQTtBQUUxQyxxQkFNTywwQkFBMEIsQ0FBQyxDQUFBO0FBRWxDLHNCQW1CTyxpQ0FBaUMsQ0FBQyxDQUFBO0FBRXpDLHNCQUF1QixpQ0FBaUMsQ0FBQztBQUFqRCxvQ0FBaUQ7QUFFekQsV0FBWSxTQUFTO0lBQ25CLDZDQUFNLENBQUE7SUFDTiwrQ0FBTyxDQUFBO0lBQ1AsbURBQVMsQ0FBQTtJQUNULGlEQUFRLENBQUE7SUFDUixtREFBUyxDQUFBO0lBQ1QscURBQVUsQ0FBQTtJQUNWLGlEQUFRLENBQUE7SUFDUixpREFBUSxDQUFBO0lBQ1IseUNBQUksQ0FBQTtJQUNKLGlEQUFRLENBQUE7SUFDUixrREFBUSxDQUFBO0lBQ1Isd0RBQVcsQ0FBQTtBQUNiLENBQUMsRUFiVyxpQkFBUyxLQUFULGlCQUFTLFFBYXBCO0FBYkQsSUFBWSxTQUFTLEdBQVQsaUJBYVgsQ0FBQTtBQUVELElBQU0sU0FBUyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFNLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDdkIsSUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLElBQU0sV0FBVyxHQUFHLENBQUMsQ0FBQztBQUN0QixJQUFNLFdBQVcsR0FBRyxFQUFFLENBQUM7QUFDdkIsSUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFDO0FBQzNCLElBQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQztBQUN6QixJQUFNLFlBQVksR0FBRyxHQUFHLENBQUM7QUFFekIscUJBQXFCLE1BQWtCLEVBQUUsU0FBc0I7SUFBdEIseUJBQXNCLEdBQXRCLGNBQXNCO0lBQzdELElBQUksU0FBUyxHQUFH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