mmidy       2002/08/28 08:39:24

  Modified:    java/src/org/apache/xpath/functions Tag: xslt20
                        FuncReplace.java
  Log:
  Fix problem with evaluating pattern tokens
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.1.2.4   +31 -5     
xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncReplace.java
  
  Index: FuncReplace.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xpath/functions/Attic/FuncReplace.java,v
  retrieving revision 1.1.2.3
  retrieving revision 1.1.2.4
  diff -u -r1.1.2.3 -r1.1.2.4
  --- FuncReplace.java  27 Aug 2002 16:43:29 -0000      1.1.2.3
  +++ FuncReplace.java  28 Aug 2002 15:39:24 -0000      1.1.2.4
  @@ -103,13 +103,31 @@
          int length = input.length();
          while (index < length)
       {
  +     boolean matched = false;
        String[] s = new String[tokenTree.size()];
        int t=0;
                for(int i=0; i<tokenTree.size(); i++)
                {
                        child = tokenTree.getChild(i);
  -                     regex.compileToken(child);
  -                     int[] range = regex.matchString(input, index, length);
  +                     int[] range;
  +                     // Note: Not really sure this is correct.
  +                     // Needs review!!! See regex020, E4...
  +                     if (child.getType() == Token.PAREN &&
  +                     (i+1 < tokenTree.size()) &&
  +                     tokenTree.getChild(i+1).getType() == Token.CHAR)
  +                     {
  +                             regex.compileToken(tokenTree.getChild(i+1));
  +                         range = regex.matchString(input, index, length);
  +            int start = range[0] > length ? length : range[0]; 
  +             regex.compileToken(child);
  +             range = regex.matchString(input, index, start);
  +                     }
  +                     else
  +                     {
  +                             regex.compileToken(child);
  +                             range = regex.matchString(input, index, length);
  +                     }                       
  +                     
        int start = range[0];
        int end = range[1];
        if (end >= 0)
  @@ -118,14 +136,19 @@
                s[t++] = input.substring(start, end);
                outString = outString + input.substring(index, start);
            index = end;
  +         matched = true;
                }
                else
        {
            s[t++] = "";
            outString = outString + input.substring(index);
  -         index = length;
  +         index = length;         
  +         break;
        }
  -             }               
  +             }
  +             
  +             if(!matched)
  +             break;                  
        
        //int j = 0;
        String repVars = "";
  @@ -149,7 +172,10 @@
                }
                }
                else
  -             break;
  +             {
  +                     repVars = repVars+ replace.substring(start);
  +                     break;
  +             }
        }
        outString = outString + repVars; 
       }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to