private void OnData(Token token) { switch (token.Type) { case TokenType.SquareBracketOpen: _attrName = null; _attrValue = null; _attrOp = string.Empty; _attrNs = null; _state = State.Attribute; _ready = false; break; case TokenType.Colon: _state = State.PseudoClass; _ready = false; break; case TokenType.Hash: Insert(SimpleSelector.Id(token.Data)); _ready = true; break; case TokenType.Ident: Insert(SimpleSelector.Type(token.Data)); _ready = true; break; case TokenType.Whitespace: Insert(Combinator.Descendent); break; case TokenType.Delim: OnDelim(token); break; case TokenType.Comma: InsertOr(); _ready = false; break; default: _valid = false; break; } }
private void ParseSymbol(Block token) { switch (token.GrammarSegment) { // Attribute [A] case GrammarSegment.SquareBraceOpen: _attributeName = null; _attributeValue = null; _attributeOperator = string.Empty; _selectorOperation = SelectorOperation.Attribute; return; // Pseudo :P case GrammarSegment.Colon: _selectorOperation = SelectorOperation.PseudoClass; return; // ID #I case GrammarSegment.Hash: Insert(SimpleSelector.Id(((SymbolBlock)token).Value)); return; // Type E case GrammarSegment.Ident: Insert(SimpleSelector.Type(((SymbolBlock)token).Value)); return; // Whitespace case GrammarSegment.Whitespace: Insert(Combinator.Descendent); return; case GrammarSegment.Delimiter: ParseDelimiter(token); return; case GrammarSegment.Comma: InsertCommaDelimited(); return; } }