if(node != null) { context = new SingleNodeSet(node);
if(contextNode != null) { contextSet = new SingleNodeSet(contextNode);
	public Value eval(DocumentSet docs, NodeSet context, NodeProxy node) {		arg1 = getArgument(0);		start = getArgument(1);		if(node != null) {			context = new SingleNodeSet(node);		}		int s = (int)start.eval(docs, context, node).getNumericValue();		int l = 0;		if(length != null)			l = (int)length.eval(docs, context, node).getNumericValue();		Value nodes = arg1.eval(docs, context, node);		if(nodes.getType()==Value.isNodeList) {			NodeSet nset = (NodeSet)nodes.getNodeList();			NodeProxy n;			String temp;			ValueSet result = new ValueSet();			for(int i = 0; i < nset.getLength(); i++) {				n = nset.get(i);				temp = n.getNodeValue();				if(s >= 0 && temp.length() > s + l)					result.add(new ValueString((l > 0) ? temp.substring(s, l) : temp.substring(s)));			}			return result;		} else {			String result = nodes.getStringValue();			if(s < 0 || s + l >= result.length())				return new ValueString("");			return new ValueString((l > 0) ? result.substring(s, l) : result.substring(s));		}	}