private void PrasePseudoClassFunctionEnd(Block token) { _selectorOperation = SelectorOperation.Data; if (token.GrammarSegment != GrammarSegment.ParenClose) { return; } switch (_attributeName) { case PseudoSelectorPrefix.PseudoFunctionNthchild: Insert(GetChildSelector <NthFirstChildSelector>()); break; case PseudoSelectorPrefix.PseudoFunctionNthlastchild: Insert(GetChildSelector <NthLastChildSelector>()); break; case PseudoSelectorPrefix.PseudoFunctionNthOfType: Insert(GetChildSelector <NthOfTypeSelector>()); break; case PseudoSelectorPrefix.PseudoFunctionNthLastOfType: Insert(GetChildSelector <NthLastOfTypeSelector>()); break; case PseudoSelectorPrefix.PseudoFunctionNot: { var selector = _nestedSelectorFactory.GetSelector(); var code = string.Format("{0}({1})", PseudoSelectorPrefix.PseudoFunctionNot, selector); Insert(SimpleSelector.PseudoClass(code)); break; } case PseudoSelectorPrefix.PseudoFunctionDir: { var code = string.Format("{0}({1})", PseudoSelectorPrefix.PseudoFunctionDir, _attributeValue); Insert(SimpleSelector.PseudoClass(code)); break; } case PseudoSelectorPrefix.PseudoFunctionLang: { var code = string.Format("{0}({1})", PseudoSelectorPrefix.PseudoFunctionLang, _attributeValue); Insert(SimpleSelector.PseudoClass(code)); break; } case PseudoSelectorPrefix.PseudoFunctionContains: { var code = string.Format("{0}({1})", PseudoSelectorPrefix.PseudoFunctionContains, _attributeValue); Insert(SimpleSelector.PseudoClass(code)); break; } } }
internal static BaseSelector ParseSelector(string selector) { var tokenizer = new Lexer(new StylesheetReader(selector)); var tokens = tokenizer.Tokens; var selctor = new SelectorFactory(); foreach (var token in tokens) { selctor.Apply(token); } var result = selctor.GetSelector(); return(result); }