1 4 package gnu.kawa.xml; 5 import gnu.lists.*; 6 7 8 9 public class PrecedingSiblingAxis extends TreeScanner 10 { 11 public static PrecedingSiblingAxis make (NodePredicate type) 12 { 13 PrecedingSiblingAxis axis = new PrecedingSiblingAxis(); 14 axis.type = type; 15 return axis; 16 } 17 18 public void scan (AbstractSequence seq, int ipos, PositionConsumer out) 19 { 20 int end = seq.endPos(); 21 int parent = seq.parentPos(ipos); 22 if (parent == end) 23 return; 24 int child = seq.firstChildPos(parent); 25 if (child == 0) 26 return; 27 if (type.isInstancePos(seq, child)) 28 out.writePosition(seq, child); 29 for (;;) 30 { 31 child = seq.nextMatching(child, type, ipos, false); 32 if (child == 0) 33 break; 34 out.writePosition(seq, child); 35 } 36 } 37 } 38 | Popular Tags |