use of org.eclipse.wst.xml.xpath2.api.ResultBuffer in project webtools.sourceediting by eclipse.
the class DefaultEvaluator method visit.
/**
* visit context item expression.
*
* @param e
* is the context item expression.
* @return a result sequence
*/
public Object visit(CntxItemExpr e) {
ResultBuffer rs = new ResultBuffer();
AnyType contextItem = focus().context_item();
if (contextItem == null) {
report_error(DynamicError.contextUndefined());
}
rs.add(contextItem);
return rs.getSequence();
}
use of org.eclipse.wst.xml.xpath2.api.ResultBuffer 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.api.ResultBuffer in project webtools.sourceediting by eclipse.
the class DefaultEvaluator method visit.
/**
* visit variable reference
*
* @param e
* is the variable reference.
* @return a result sequence
*/
public Object visit(VarRef e) {
ResultBuffer rs = new ResultBuffer();
Object var = getVariable(e.name());
assert var != null;
if (var instanceof AnyType) {
rs.add((AnyType) var);
} else if (var instanceof ResultSequence) {
rs.concat((ResultSequence) var);
}
return rs.getSequence();
}
use of org.eclipse.wst.xml.xpath2.api.ResultBuffer in project webtools.sourceediting by eclipse.
the class DefaultEvaluator method do_predicate.
// do the predicate for all items in focus
private ResultSequence do_predicate(Collection exprs) {
ResultBuffer rs = new ResultBuffer();
Focus focus = focus();
int original_cp = focus.position();
// check if predicate is single numeric constant
if (exprs.size() == 1) {
Expr expr = (Expr) exprs.iterator().next();
if (expr instanceof XPathExpr) {
XPathExpr xpe = (XPathExpr) expr;
if (xpe.next() == null && xpe.slashes() == 0 && xpe.expr() instanceof FilterExpr) {
FilterExpr fex = (FilterExpr) xpe.expr();
if (fex.primary() instanceof IntegerLiteral) {
int pos = (((IntegerLiteral) fex.primary()).value().int_value()).intValue();
if (pos <= focus.last() && pos > 0) {
focus.set_position(pos);
rs.add(focus.context_item());
}
focus.set_position(original_cp);
return rs.getSequence();
}
}
}
}
// go through all elements
while (true) {
// do the predicate
// XXX saxon doesn't allow for predicates to have
// commas... but XPath 2.0 spec seems to do
ResultSequence res = do_expr(exprs.iterator());
// in the sequence
if (predicate_truth(res))
rs.add(focus().context_item());
if (!focus.advance_cp())
break;
}
// restore
focus.set_position(original_cp);
return rs.getSequence();
}
use of org.eclipse.wst.xml.xpath2.api.ResultBuffer in project webtools.sourceediting by eclipse.
the class AncestorAxis method iterate.
/**
* Get the ancestors of the context node.
*
* @param node
* is the type of node.
*/
// XXX unify this with descendants axis ?
public void iterate(NodeType node, ResultBuffer copyInto, Node limitNode) {
if (limitNode != null && limitNode.isSameNode(node.node_value()))
return;
int before = copyInto.size();
// get the parent
super.iterate(node, copyInto, limitNode);
// no parent
if (copyInto.size() == before)
return;
NodeType parent = (NodeType) copyInto.item(before);
// get ancestors of parent
iterate(parent, copyInto, limitNode);
}
Aggregations