Пример #1
0
            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);
            }
Пример #2
0
            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;
            }