/** * Evaluate the matches() function to give a Boolean value. * * @param c The dynamic evaluation context * @return the result as a BooleanValue, or null to indicate the empty sequence * @throws XPathException on an error */ public Item evaluateItem(XPathContext c) throws XPathException { AtomicValue sv0 = (AtomicValue) argument[0].evaluateItem(c); if (sv0 == null) { sv0 = StringValue.EMPTY_STRING; } ; RegularExpression re = regexp; if (re == null) { AtomicValue pat = (AtomicValue) argument[1].evaluateItem(c); if (pat == null) return null; CharSequence flags; if (argument.length == 2) { flags = ""; } else { AtomicValue sv2 = (AtomicValue) argument[2].evaluateItem(c); if (sv2 == null) return null; flags = sv2.getStringValueCS(); } try { final Platform platform = c.getConfiguration().getPlatform(); re = platform.compileRegularExpression(pat.getStringValueCS(), true, flags); } catch (XPathException err) { DynamicError de = new DynamicError(err); de.setErrorCode("FORX0002"); de.setXPathContext(c); throw de; } } return BooleanValue.get(re.containsMatch(sv0.getStringValueCS())); }