internal BaseSelector GetSelector() { if (_complexSelector != null) { _complexSelector.ConcludeSelector(_currentSelector); _currentSelector = _complexSelector; } if (_aggregateSelectorList == null || _aggregateSelectorList.Length == 0) { return(_currentSelector ?? SimpleSelector.All); } if (_currentSelector == null && _aggregateSelectorList.Length == 1) { return(_aggregateSelectorList[0]); } if (_currentSelector == null) { return(_aggregateSelectorList); } _aggregateSelectorList.AppendSelector(_currentSelector); _currentSelector = null; return(_aggregateSelectorList); }
private void Insert(BaseSelector selector) { if (_currentSelector != null) { if (!_hasCombinator) { var compound = _currentSelector as AggregateSelectorList; if (compound == null) { compound = new AggregateSelectorList(""); compound.AppendSelector(_currentSelector); } compound.AppendSelector(selector); _currentSelector = compound; } else { if (_complexSelector == null) { _complexSelector = new ComplexSelector(); } _complexSelector.AppendSelector(_currentSelector, _combinator); _combinator = Combinator.Descendent; _hasCombinator = false; _currentSelector = selector; } } else { if (_currentSelector == null && _complexSelector == null && _combinator == Combinator.Namespace) { _complexSelector = new ComplexSelector(); _complexSelector.AppendSelector(SimpleSelector.Type(""), _combinator); _currentSelector = selector; } else { _combinator = Combinator.Descendent; _hasCombinator = false; _currentSelector = selector; } } }
BaseSelector ObfuscateSelectors(BaseSelector selector) { Type ruleType = selector.GetType(); if (ruleType == typeof(SimpleSelector)) { string obf = ObfuscateSelectorPart(selector.ToString()); if (obf == null) return selector; else return new SimpleSelector(obf); } if (ruleType == typeof(ComplexSelector)) { var obf = new ComplexSelector(); var cs = (ComplexSelector)selector; foreach (var sel in cs) obf.AppendSelector(ObfuscateSelectors(sel.Selector), sel.Delimiter); return obf; } if (ruleType == typeof(AggregateSelectorList)) { var cs = (AggregateSelectorList)selector; var obf = new AggregateSelectorList(cs.Delimiter); foreach (BaseSelector sel in cs) obf.AppendSelector(ObfuscateSelectors(sel)); return obf; } if (ruleType == typeof(MultipleSelectorList)) { var obf = new MultipleSelectorList(); var cs = (MultipleSelectorList)selector; foreach (BaseSelector sel in cs) obf.AppendSelector(ObfuscateSelectors(sel)); return obf; } return selector; }