if (getArgumentCount() < 1) throw new IllegalArgumentException("lang requires an argument");
	public Sequence eval(		StaticContext context,		DocumentSet docs,		Sequence contextSequence,		Item contextItem)		throws XPathException {		if (getArgumentCount() < 1)			throw new IllegalArgumentException("lang requires an argument");		if (contextItem != null)			contextSequence = contextItem.toSequence();		if (contextSequence.getItemType() != Type.NODE)			return Sequence.EMPTY_SEQUENCE;		String lang =			getArgument(0)				.eval(context, docs, contextSequence)				.getStringValue();		QName qname = new QName("lang", context.getURIForPrefix("xml"), "xml");		NodeSet attribs = context.getBroker().getAttributesByName(docs, qname);		System.out.println("found " + attribs.getLength() + " attributes");		NodeSet temp = new ExtArrayNodeSet();		NodeProxy p;		String langValue;		int hyphen;		boolean include;		for (Iterator i = attribs.iterator(); i.hasNext();) {			include = false;			p = (NodeProxy) i.next();			langValue = p.getNodeValue();			include = lang.equalsIgnoreCase(langValue);			if (!include) {				hyphen = langValue.indexOf('-');				if (hyphen != -1) {					langValue = langValue.substring(0, hyphen);					include = lang.equalsIgnoreCase(langValue);				}			}			System.out.println(langValue + " == " + lang);			if (include) {				p.gid = XMLUtil.getParentId(p.doc, p.gid);				if (p.gid > -1)					temp.add(p);			}		}		if (temp.getLength() > 0) {			NodeSet result =				((NodeSet) contextSequence).selectAncestorDescendant(					temp,					NodeSet.DESCENDANT,					true,					false);			for (Iterator i = result.iterator(); i.hasNext();) {				p = (NodeProxy) i.next();				p.addContextNode(p);			}			return result;		}		return Sequence.EMPTY_SEQUENCE;	}