package com.adobe.dp.css; import com.adobe.dp.xml.util.SMap; public class DescendantElementMatcher extends ElementMatcher { private ElementMatcher ancestor; private ElementMatcher descendant; private int ancestorMatchedDepth; DescendantElementMatcher(DescendantSelector selector, ElementMatcher parent, ElementMatcher child) { super(selector); this.ancestor = parent; this.descendant = child; } public void popElement() { if (ancestorMatchedDepth > 0) descendant.popElement(); else ancestor.popElement(); ancestorMatchedDepth--; } public MatchResult pushElement(String ns, String name, SMap attrs) { if (ancestorMatchedDepth > 0) { ancestorMatchedDepth++; return descendant.pushElement(ns, name, attrs); } else { MatchResult r = ancestor.pushElement(ns, name, attrs); if( r != null && r.getPseudoElement() == null ) ancestorMatchedDepth = 1; return null; } } }