package aQute.libg.sax.filters;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import aQute.libg.sax.ContentFilterImpl;
public abstract class ElementSelectionFilter extends ContentFilterImpl {
int depth = 0;
int hiddenDepth = -1;
protected abstract boolean select(int depth, String uri, String localName, String qName, Attributes attribs);
@Override
public final void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
if (hiddenDepth < 0) {
boolean allow = select(depth, uri, localName, qName, atts);
if (allow)
super.startElement(uri, localName, qName, atts);
else
hiddenDepth = 0;
} else {
hiddenDepth++;
}
depth++;
}
@Override
public final void endElement(String uri, String localName, String qName) throws SAXException {
if (hiddenDepth < 0) {
super.endElement(uri, localName, qName);
} else {
hiddenDepth--;
}
depth--;
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
if (hiddenDepth < 0)
super.characters(ch, start, length);
}
@Override
public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
if (hiddenDepth < 0)
super.ignorableWhitespace(ch, start, length);
}
}