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]

Reply via email to