private ISelector GetResult() { if (IsValid) { if (_complex != null) { _complex.ConcludeSelector(_temp); _temp = _complex; _complex = null; } if (_group == null || _group.Length == 0) { return(_temp ?? AllSelector.Instance); } else if (_temp == null && _group.Length == 1) { return(_group[0]); } if (_temp != null) { _group.Add(_temp); _temp = null; } return(_group); } return(null); }
private void Insert(ISelector selector) { if (_temp != null) { if (_combinators.Count == 0) { if (!(_temp is CompoundSelector compound)) { compound = new CompoundSelector { _temp }; } compound.Add(selector); _temp = compound; } else { if (_complex == null) { _complex = new ComplexSelector(); } var combinator = GetCombinator(); _complex.AppendSelector(_temp, combinator); _temp = selector; } } else { _combinators.Clear(); _temp = selector; } }
/// <summary> /// Inserts the given selector. /// </summary> /// <param name="selector">The selector to insert.</param> void Insert(ISelector selector) { if (temp != null) { if (combinators.Count == 0) { var compound = temp as CompoundSelector; if (compound == null) { compound = new CompoundSelector(); compound.Add(temp); } compound.Add(selector); temp = compound; } else { if (complex == null) { complex = new ComplexSelector(); } var combinator = GetCombinator(); complex.AppendSelector(temp, combinator); temp = selector; } } else { combinators.Clear(); temp = selector; } }
private void VisitBaseSelector(BaseSelector selector) { AggregateSelectorList aggregateSelectorList = selector as AggregateSelectorList; if (aggregateSelectorList != null) { this.VisitSelectorList(aggregateSelectorList); } else { ComplexSelector complexSelector = selector as ComplexSelector; if (complexSelector != null) { this.VisitComplexSelector(complexSelector); } else { SimpleSelector simpleSelector = selector as SimpleSelector; if (simpleSelector != null) { this.VisitSimpleSelector(simpleSelector.ToString()); } } } }
/// <summary> /// Gets the currently formed selector. /// </summary> public ISelector GetResult() { if (!IsValid) { return(new UnknownSelector(Serialize())); } if (complex != null) { complex.ConcludeSelector(temp); temp = complex; complex = null; } if (group == null || group.Length == 0) { return(temp ?? SimpleSelector.All); } else if (temp == null && group.Length == 1) { return(group[0]); } if (temp != null) { group.Add(temp); temp = null; } return(group); }
public ISelector GetResult() { if (!IsValid) { var selector = new UnknownSelector(); return(selector); } if (_complex != null) { _complex.ConcludeSelector(_temp); _temp = _complex; _complex = null; } if (_group == null || _group.Length == 0) { return(_temp ?? SimpleSelector.All); } else if (_temp == null && _group.Length == 1) { return(_group[0]); } if (_temp != null) { _group.Add(_temp); _temp = null; } return(_group); }
static void Test(int expectedCount, params object[] q) { var num = q.Length / 2; var clauses = q.Take(num).Select(z => (SelectClauseNode) z).ToArray(); var roots = q.Skip(num).Select(z => (INode) z).ToArray(); var selector = new ComplexSelector(clauses); Assert.That(selector.Select(roots).Count() == expectedCount); }
static void Test(int expectedCount, params object[] q) { var num = q.Length / 2; var clauses = q.Take(num).Select(z => (SelectClauseNode)z).ToArray(); var roots = q.Skip(num).Select(z => (INode)z).ToArray(); var selector = new ComplexSelector(clauses); Assert.IsTrue(selector.Select(roots).Count() == expectedCount); }
void VisitComplexSelector(ComplexSelector complexSelector) { int fullSpecificity = CSSSpec.GetSelectorSpecificity(complexSelector.ToString()); if (fullSpecificity == 0) { m_Errors.AddInternalError("Failed to calculate selector specificity " + complexSelector); return; } using (m_Builder.BeginComplexSelector(fullSpecificity)) { StyleSelectorRelationship relationShip = StyleSelectorRelationship.None; foreach (CombinatorSelector selector in complexSelector) { StyleSelectorPart[] parts; string simpleSelector = ExtractSimpleSelector(selector.Selector); if (string.IsNullOrEmpty(simpleSelector)) { m_Errors.AddInternalError("Expected simple selector inside complex selector " + simpleSelector); return; } if (CheckSimpleSelector(simpleSelector, out parts)) { m_Builder.AddSimpleSelector(parts, relationShip); // Read relation for next element switch (selector.Delimiter) { case Combinator.Child: relationShip = StyleSelectorRelationship.Child; break; case Combinator.Descendent: relationShip = StyleSelectorRelationship.Descendent; break; default: m_Errors.AddSemanticError(StyleSheetImportErrorCode.InvalidComplexSelectorDelimiter, complexSelector.ToString()); return; } } else { return; } } } }
/// <summary> /// Resets the current state. /// </summary> /// <returns>The current instance.</returns> public CssSelectorConstructor Reset() { attrName = null; attrValue = null; attrOp = String.Empty; state = State.Data; combinator = CssCombinator.Descendent; hasCombinator = false; temp = null; group = null; complex = null; return(this); }
/// <summary> /// Resets the current state. /// </summary> /// <returns>The current instance.</returns> public CssSelectorConstructor Reset() { attrName = null; attrValue = null; attrNs = null; attrOp = String.Empty; state = State.Data; combinators.Clear(); temp = null; group = null; complex = null; valid = true; IsNested = false; ready = true; return(this); }
private void VisitComplexSelector(ComplexSelector complexSelector) { int selectorSpecificity = CSSSpec.GetSelectorSpecificity(complexSelector.ToString()); if (selectorSpecificity == 0) { this.m_Errors.AddInternalError("Failed to calculate selector specificity " + complexSelector); } else { using (this.m_Builder.BeginComplexSelector(selectorSpecificity)) { StyleSelectorRelationship previousRelationsip = StyleSelectorRelationship.None; foreach (CombinatorSelector current in complexSelector) { string text = this.ExtractSimpleSelector(current.Selector); if (string.IsNullOrEmpty(text)) { this.m_Errors.AddInternalError("Expected simple selector inside complex selector " + text); break; } StyleSelectorPart[] parts; if (!this.CheckSimpleSelector(text, out parts)) { break; } this.m_Builder.AddSimpleSelector(parts, previousRelationsip); Combinator delimiter = current.Delimiter; if (delimiter != Combinator.Child) { if (delimiter != Combinator.Descendent) { this.m_Errors.AddSemanticError(StyleSheetImportErrorCode.InvalidComplexSelectorDelimiter, complexSelector.ToString()); break; } previousRelationsip = StyleSelectorRelationship.Descendent; } else { previousRelationsip = StyleSelectorRelationship.Child; } } } } }
public CssSelectorConstructor Reset(IAttributeSelectorFactory attributeSelector, IPseudoClassSelectorFactory pseudoClassSelector, IPseudoElementSelectorFactory pseudoElementSelector) { _attrName = null; _attrValue = null; _attrNs = null; _attrOp = String.Empty; _state = State.Data; _combinators.Clear(); _temp = null; _group = null; _complex = null; _valid = true; _nested = false; _ready = true; _attributeSelector = attributeSelector; _pseudoClassSelector = pseudoClassSelector; _pseudoElementSelector = pseudoElementSelector; return(this); }
void InsertOr() { if (_temp != null) { if (_group == null) { _group = new ListSelector(); } if (_complex != null) { _complex.ConcludeSelector(_temp); _group.Add(_complex); _complex = null; } else { _group.Add(_temp); } _temp = null; } }
/// <summary> /// Inserts a comma. /// </summary> void InsertOr() { if (temp != null) { if (group == null) { group = new ListSelector(); } if (complex != null) { complex.ConcludeSelector(temp); group.Add(complex); complex = null; } else { group.Add(temp); } temp = null; } }
/// <summary> /// Inserts the given selector. /// </summary> /// <param name="selector">The selector to insert.</param> void Insert(ISelector selector) { if (temp != null) { if (!hasCombinator) { var compound = temp as CompoundSelector; if (compound == null) { compound = new CompoundSelector(); compound.Add(temp); } compound.Add(selector); temp = compound; } else { if (complex == null) { complex = new ComplexSelector(); } complex.AppendSelector(temp, combinator); combinator = CssCombinator.Descendent; hasCombinator = false; temp = selector; } } else { combinator = CssCombinator.Descendent; hasCombinator = false; temp = selector; } }
public void Visit(ComplexSelector selector) { foreach (var sel in selector) sel.Selector.Visit(this); }
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; }
internal SelectorFactory ResetFactory() { _attributeName = null; _attributeValue = null; _attributeOperator = string.Empty; _selectorOperation = SelectorOperation.Data; _combinator = Combinator.Descendent; _hasCombinator = false; _currentSelector = null; _aggregateSelectorList = null; _complexSelector = null; return this; }
private void InsertCommaDelimited() { if (_currentSelector == null) { return; } if (_aggregateSelectorList == null) { _aggregateSelectorList = new AggregateSelectorList(","); } if (_complexSelector != null) { _complexSelector.ConcludeSelector(_currentSelector); _aggregateSelectorList.AppendSelector(_complexSelector); _complexSelector = null; } else { _aggregateSelectorList.AppendSelector(_currentSelector); } _currentSelector = null; }
public void Visit(ComplexSelector selector) { bool first = true; foreach (var sel in selector.Reverse()) { if (!first) { switch (sel.Delimiter) { case Combinator.AdjacentSibling: _matches = _matches.SelectMany(n => _engine.PrecedingSiblings(n).Take(1)); break; case Combinator.Child: _matches = _matches.SelectMany(n => _engine.Parents(n).Take(1)); break; case Combinator.Descendent: _matches = _matches.SelectMany(n => _engine.Parents(n)); break; case Combinator.Sibling: _matches = _matches.SelectMany(n => _engine.PrecedingSiblings(n)); break; default: NotSupported(); break; } } sel.Selector.Visit(this); if (!_matches.Any()) return; first = false; } }
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(new UnknownSelector(""), _combinator); _currentSelector = selector; } else { _combinator = Combinator.Descendent; _hasCombinator = false; _currentSelector = selector; } } }
public void Visit(ComplexSelector selector) { var n = selector.Length - 1; for (var i = 0; i < n; i++) { selector[i].Selector.Visit(this); _writer.Write(selector[i].Character); } selector[n].Selector.Visit(this); }