private void ExtractValues(string elementName, XmlReader reader) { for (int i = 0; i < reader.AttributeCount; ++i) { reader.MoveToAttribute(i); string name = reader.Name; string value = reader.Value; if (E.Equals(name)) { this.element = value.ToElement(); } else if (K.Equals(name)) { this.keys = value; } else if (V.Equals(name)) { this.values = value; } else if (CAT.Equals(name)) { this.cat = value; } else if (CLOSED.Equals(name)) { this.closed = value.ToClosed(); } else if (ZOOM_MIN.Equals(name)) { this.zoomMin = XmlUtils.ParseNonNegativeByte(name, value); } else if (ZOOM_MAX.Equals(name)) { this.zoomMax = XmlUtils.ParseNonNegativeByte(name, value); } else { throw XmlUtils.CreateXmlReaderException(elementName, name, value, i); } } Validate(elementName); this.keyList = new List <string>(this.keys.Split(SPLIT_PATTERN, StringSplitOptions.RemoveEmptyEntries)); this.valueList = new List <string>(this.values.Split(SPLIT_PATTERN, StringSplitOptions.RemoveEmptyEntries)); this.elementMatcher = getElementMatcher(this.element); this.closedMatcher = GetClosedMatcher(this.closed); this.elementMatcher = RuleOptimizer.optimize(this.elementMatcher, this.ruleStack); this.closedMatcher = RuleOptimizer.optimize(this.closedMatcher, this.ruleStack); }
private readonly List <Rule> subRules; // NOSONAR NOPMD we need specific interface public Rule(RuleBuilder ruleBuilder) { this.cat = ruleBuilder.cat; this.closedMatcher = ruleBuilder.closedMatcher; this.elementMatcher = ruleBuilder.elementMatcher; this.zoomMax = ruleBuilder.zoomMax; this.zoomMin = ruleBuilder.zoomMin; this.renderInstructions = new List <RenderInstruction>(4); this.subRules = new List <Rule>(4); }
public void IsNullSafe() { ICollection collection = CollectionOf(1, 2, null, 4); Matcher matcher = new ElementMatcher(collection); Assert.IsTrue(matcher.Matches(1), "should match 1"); Assert.IsTrue(matcher.Matches(2), "should match 2"); Assert.IsTrue(matcher.Matches(null), "should match null"); Assert.IsTrue(matcher.Matches(4), "should match 4"); Assert.IsFalse(matcher.Matches(0), "should not match 0"); }
public void MatchesIfArgumentInCollection() { ICollection collection = CollectionOf(1, 2, 3, 4); Matcher matcher = new ElementMatcher(collection); Assert.IsTrue(matcher.Matches(1), "should match 1"); Assert.IsTrue(matcher.Matches(2), "should match 2"); Assert.IsTrue(matcher.Matches(3), "should match 3"); Assert.IsTrue(matcher.Matches(4), "should match 4"); Assert.IsFalse(matcher.Matches(0), "should not match 0"); }
/// <summary> /// Find the closest ancestor (or self) that matches the condition /// </summary> /// <param name="startElement"></param> /// <param name="matcher">A function that returns true if the element matches</param> /// <returns></returns> internal static XmlElement GetClosestMatch(XmlElement startElement, ElementMatcher matcher) { XmlElement currentElement = startElement; while (currentElement != null) { if (matcher(currentElement)) { return(currentElement); } currentElement = currentElement.ParentNode as XmlElement; } return(null); }
internal static ElementMatcher optimize(ElementMatcher elementMatcher, Stack <Rule> ruleStack) { if (elementMatcher is AnyMatcher) { return(elementMatcher); } foreach (var rule in ruleStack) { if (rule.elementMatcher.IsCoveredBy(elementMatcher)) { return(AnyMatcher.INSTANCE); } else if (!elementMatcher.IsCoveredBy(rule.elementMatcher)) { LOGGER.Warn("unreachable rule (e)"); } } return(elementMatcher); }
public SimpleHtmlElementLocator(string name = null, ElementMatcher <HtmlElement> matcher = null ) : base(name) { this.Matcher = matcher; }
public TagElementLocator(string name = null, string tag = null, bool recursive = false, String contextKey = null, ChildHtmlElementLocator childLocator = null, ElementMatcher <HtmlElement> matcher = null) : base(name, contextKey) { this.Tag = tag; this.Recursive = recursive; this.ChildLocator = childLocator; this.Matcher = matcher; }
public IdElementLocator(string name = null, string id = null, String contextKey = null, ElementMatcher <HtmlElement> matcher = null) : base(name, contextKey) { this.Id = id; this.Matcher = matcher; }
public ListHtmlElementDataExtractor(ElementMatcher <HtmlElement> matcher = null, ElementTarget target = ElementTarget.SELF, HtmlElementDataExtractor <V> extractor = null) { Matcher = matcher; Target = target; Extractor = extractor; }
public bool IsCoveredBy(ElementMatcher elementMatcher) { return(elementMatcher.Matches(Element.Way)); }
public SimpleChildHtmlElementLocator(string name = null, ElementMatcher<HtmlElement> matcher = null, ChildHtmlElementLocator filter = null) : base() { this.Matcher = matcher; this.Filter = filter; }
public bool IsCoveredBy(ElementMatcher elementMatcher) { return(elementMatcher == this); }
public SimpleChildHtmlElementLocator(string name = null, ElementMatcher <HtmlElement> matcher = null, ChildHtmlElementLocator filter = null) : base() { this.Matcher = matcher; this.Filter = filter; }