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]