Beispiel #1
0
        public CssSelector GetCombinatorSelector(string sel)
        {
            string newSel = sel.Replace("+", " + ").Replace("~", " ~ ").Replace(">", " > ");

            string[]      sep       = new string[] { " " };
            List <string> basicSels = newSel.Split(sep, StringSplitOptions.RemoveEmptyEntries).ToList();

            int j = basicSels.Count - 1;

            if (j == 0)
            {
                BasicCssSelector selector = (BasicCssSelector)GetBasicSelector(basicSels[j]);
                return(selector);
            }
            else
            {
                Stack <CssSelector> stack = new Stack <CssSelector>();
                while (j >= 0)
                {
                    CombinatorCssSelector current       = null;
                    CssSelector           selectorRight = null;
                    if (stack.Count == 0)
                    {
                        selectorRight = (BasicCssSelector)GetBasicSelector(basicSels[j]);
                        j--;
                    }
                    else
                    {
                        selectorRight = stack.Pop();
                    }

                    string symbol = basicSels[j];
                    current = (CombinatorCssSelector)GetCurrentSelector(symbol);
                    j--;
                    if (j < 0)
                    {
                        current.right = selectorRight;
                        break;
                    }
                    BasicCssSelector selectorLeft = (BasicCssSelector)GetBasicSelector(basicSels[j]);
                    current.left  = selectorLeft;
                    current.right = selectorRight;
                    stack.Push(current);
                    j--;
                }
                return(stack.Pop());
            }
        }
Beispiel #2
0
        public CssSelector GetCurrentSelector(string symbol)
        {
            CssSelector current = null;

            if (symbol.Equals("+"))
            {
                current = new CombinatorCssSelector("+", CssSelectorType.AdjacentSiblingSelector);
            }
            else if (symbol.Equals("~"))
            {
                current = new CombinatorCssSelector("~", CssSelectorType.GeneralSiblingSelector);
            }
            else if (symbol.Equals(">"))
            {
                current = new CombinatorCssSelector(">", CssSelectorType.ChildSelector);
            }
            else
            {
                current = new CombinatorCssSelector("", CssSelectorType.DescendantSelector);
                (current as CombinatorCssSelector).left = GetBasicSelector(symbol);
            }
            return(current);
        }