package lux.index.analysis; import java.util.Iterator; import net.sf.saxon.pattern.NodeKindTest; import net.sf.saxon.s9api.Axis; import net.sf.saxon.s9api.XdmNode; import net.sf.saxon.s9api.XdmSequenceIterator; /** * Iterates over //text(); all descendant text nodes */ public class TextIterator implements Iterator<XdmNode> { private XdmSequenceIterator descendants; private XdmNode next = null; // storage for lookahead public TextIterator(XdmNode node) { descendants = new TextNodeDescendantIterator(node); } @Override public boolean hasNext () { if (next != null) { return true; } next = getNext(); return next != null; } @Override public XdmNode next () { if (next != null) { XdmNode node = next; next = null; return node; } return getNext (); } protected XdmNode getNext () { while (descendants.hasNext()) { return (XdmNode) descendants.next(); } return null; } @Override public void remove() { } class TextNodeDescendantIterator extends XdmSequenceIterator { protected TextNodeDescendantIterator(XdmNode node) { super (node.getUnderlyingNode().iterateAxis(Axis.DESCENDANT_OR_SELF.getAxisNumber(), NodeKindTest.TEXT)); } } } /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */