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]