public static CssSelectorParseTree Parse(string selector) { List <CssSelectorNode> nodes = new List <CssSelectorNode>(); CssSelectorParseTree parsed = new CssSelectorParseTree(nodes); Parser parser = new Parser { Input = selector }; while (parser.Input.Length > 0) { string read = parser.ReadUntil('>', ' ', '+'); if (parser.Input.Length > 0) { parser.Read(1); parser.ReadWhile(' ', '\t'); } if (read.Length == 0) { continue; } if (read.Contains(':')) { //Handle pseudoclass Parser pseudoParser = new Parser() { Input = read }; read = pseudoParser.ReadUntil(':'); pseudoParser.Read(1); string type = pseudoParser.ReadUntil('('); string args = null; if (pseudoParser.Input.Length > 0) { pseudoParser.Read(1); args = pseudoParser.ReadUntil(')'); pseudoParser.Read(1); } nodes.Add(new PseudoCssSelector(read, type, args)); } else { nodes.Add(new CoreCssSelector(read)); } } return(parsed); }
public static CssSelectorParseTree Parse(string selector) { List<CssSelectorNode> nodes = new List<CssSelectorNode>(); CssSelectorParseTree parsed = new CssSelectorParseTree(nodes); Parser parser = new Parser { Input = selector }; while (parser.Input.Length > 0) { string read = parser.ReadUntil('>', ' ', '+'); if (parser.Input.Length > 0) { parser.Read(1); parser.ReadWhile(' ', '\t'); } if (read.Length == 0) continue; if (read.Contains(':')) { //Handle pseudoclass Parser pseudoParser = new Parser() { Input = read }; read = pseudoParser.ReadUntil(':'); pseudoParser.Read(1); string type = pseudoParser.ReadUntil('('); string args = null; if (pseudoParser.Input.Length > 0) { pseudoParser.Read(1); args = pseudoParser.ReadUntil(')'); pseudoParser.Read(1); } nodes.Add(new PseudoCssSelector(read, type, args)); } else { nodes.Add(new CoreCssSelector(read)); } } return parsed; }