use of org.eclipse.wst.xml.xpath2.processor.internal.Axis in project webtools.sourceediting by eclipse.
the class DefaultEvaluator method descendant_or_self_node.
private ResultSequence descendant_or_self_node(ResultSequence rs) {
ResultBuffer res = new ResultBuffer();
Axis axis = new DescendantOrSelfAxis();
// for all nodes, get descendant or self nodes
for (Iterator i = rs.iterator(); i.hasNext(); ) {
NodeType item = (NodeType) i.next();
axis.iterate(item, res, _dc.getLimitNode());
}
return res.getSequence();
}
use of org.eclipse.wst.xml.xpath2.processor.internal.Axis in project webtools.sourceediting by eclipse.
the class DefaultEvaluator method visit.
/**
* visit a reverse step expression
*
* @param e
* is the reverse step.
* @return a new function
*/
// XXX unify with top
public Object visit(ReverseStep e) {
// get context node
AnyType ci = focus().context_item();
if (!(ci instanceof NodeType))
report_error(TypeError.ci_not_node(ci.string_type()));
NodeType cn = (NodeType) ci;
// get the nodes on the axis
ReverseAxis axis = e.iterator();
ResultBuffer result = new ResultBuffer();
// short for "gimme da parent"
if (e.axis() == ReverseStep.DOTDOT) {
new ParentAxis().iterate(cn, result, _dc.getLimitNode());
return result.getSequence();
}
assert axis != null;
axis.iterate(cn, result, null);
// get all nodes in the axis, and principal node
Pair arg = new Pair(axis.principal_node_kind().string_type(), result.getSequence());
// do the name test
_param = arg;
ResultSequence rs = (ResultSequence) e.node_test().accept(this);
return rs;
}
use of org.eclipse.wst.xml.xpath2.processor.internal.Axis in project webtools.sourceediting by eclipse.
the class DefaultEvaluator method visit.
/**
* visit a forward step expression
*
* @param e
* is the forward step.
* @return a new function
*/
public Object visit(ForwardStep e) {
// get context node
AnyType ci = focus().context_item();
if (ci == null)
report_error(DynamicError.contextUndefined());
if (!(ci instanceof NodeType))
report_error(TypeError.ci_not_node(ci.string_type()));
NodeType cn = (NodeType) ci;
// get the nodes on the axis
ForwardAxis axis = e.iterator();
ResultBuffer rb = new ResultBuffer();
axis.iterate(cn, rb, _dc.getLimitNode());
// get all nodes in the axis, and principal node
Pair arg = new Pair(axis.principal_node_kind().string_type(), rb.getSequence());
// do the name test
_param = arg;
ResultSequence rs = (ResultSequence) e.node_test().accept(this);
return rs;
}
use of org.eclipse.wst.xml.xpath2.processor.internal.Axis in project webtools.sourceediting by eclipse.
the class DefaultEvaluator method root_self_node.
private ResultSequence root_self_node() {
Axis axis = new SelfAxis();
ResultBuffer buffer = new ResultBuffer();
// XXX the cast!!!
axis.iterate((NodeType) focus().context_item(), buffer, _dc.getLimitNode());
ResultSequence rs = kind_test(buffer.getSequence(), NodeType.class);
List records = new ArrayList();
records.add(rs);
rs = FnRoot.fn_root(records, _ec);
return rs;
}
use of org.eclipse.wst.xml.xpath2.processor.internal.Axis in project webtools.sourceediting by eclipse.
the class DefaultEvaluator method visit.
/**
* visit axis step.
*
* @param e
* is the axis step.
* @return a result sequence
*/
public Object visit(AxisStep e) {
ResultSequence rs = (ResultSequence) e.step().accept(this);
if (e.predicate_count() == 0)
return rs;
// I take it predicates are logical ANDS...
Focus original_focus = focus();
// go through all predicates
for (Iterator i = e.iterator(); i.hasNext(); ) {
// empty results... get out of here ? XXX
if (rs.size() == 0)
break;
set_focus(new Focus(rs));
rs = do_predicate((Collection) i.next());
}
// restore focus [context switching ;D ]
set_focus(original_focus);
return rs;
}
Aggregations