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()); } }
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); }