sandygao 2003/03/06 13:19:39 Modified: java/src/org/apache/xerces/impl/xpath/regex message.properties RegexParser.java Log: Fixing bug 17414: \pL isn't a valid schema pattern regex value. Many thanks to Khaled Noaman for the patch. Revision Changes Path 1.2 +1 -1 xml-xerces/java/src/org/apache/xerces/impl/xpath/regex/message.properties Index: message.properties =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xpath/regex/message.properties,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- message.properties 25 Oct 2001 20:36:02 -0000 1.1 +++ message.properties 6 Mar 2003 21:19:39 -0000 1.2 @@ -11,7 +11,7 @@ parser.factor.5=A back reference or an anchor or a lookahead or a lookbehind is expected in a conditional pattern. parser.factor.6=There are more than three choises in a conditional group. parser.atom.1=A character in U+0040-U+005f must follow \\c. -parser.atom.2=A Category character or '{' is required. +parser.atom.2=A '{' is required before a character category. parser.atom.3=A property name is not closed by '}'. parser.atom.4=Unexpected meta character. parser.atom.5=Unknown property. 1.5 +16 -38 xml-xerces/java/src/org/apache/xerces/impl/xpath/regex/RegexParser.java Index: RegexParser.java =================================================================== RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/impl/xpath/regex/RegexParser.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- RegexParser.java 9 Aug 2002 15:18:17 -0000 1.4 +++ RegexParser.java 6 Mar 2003 21:19:39 -0000 1.5 @@ -793,45 +793,23 @@ } protected RangeToken processBacksolidus_pP(int c) throws ParseException { - boolean positive = c == 'p'; - this.next(); - if (this.read() != T_CHAR) throw this.ex("parser.atom.2", this.offset-1); - RangeToken tok; - switch (this.chardata) { - case 'L': // Letter - tok = Token.getRange("L", positive); break; - case 'M': // Mark - tok = Token.getRange("M", positive); break; - case 'N': // Number - tok = Token.getRange("N", positive); break; - case 'Z': // Separator - tok = Token.getRange("Z", positive); break; - case 'C': // Other - tok = Token.getRange("C", positive); break; - case 'P': // Punctuation - tok = Token.getRange("P", positive); break; - case 'S': // Symbol - tok = Token.getRange("S", positive); break; - case '{': - // this.offset points the next of '{'. - //pstart = this.offset; - int namestart = this.offset; - int nameend = this.regex.indexOf('}', namestart); - if (nameend < 0) throw this.ex("parser.atom.3", this.offset); - String pname = this.regex.substring(namestart, nameend); - this.offset = nameend+1; - tok = Token.getRange(pname, positive, - this.isSet(RegularExpression.XMLSCHEMA_MODE)); - /* - if (this.isSet(RegularExpression.IGNORE_CASE)) - tok = RangeToken.createCaseInsensitiveToken(tok); - */ - break; - default: + this.next(); + if (this.read() != T_CHAR || this.chardata != '{') throw this.ex("parser.atom.2", this.offset-1); - } - return tok; + + // handle category escape + boolean positive = c == 'p'; + int namestart = this.offset; + int nameend = this.regex.indexOf('}', namestart); + + if (nameend < 0) + throw this.ex("parser.atom.3", this.offset); + + String pname = this.regex.substring(namestart, nameend); + this.offset = nameend+1; + + return Token.getRange(pname, positive, this.isSet(RegularExpression.XMLSCHEMA_MODE)); } int processCIinCharacterClass(RangeToken tok, int c) {
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]