[kaffe] CVS kaffe (jim): Fix Pattern.split() bug + convert CRLF to LF.
Kaffe CVS
Kaffe Mailing List <kaffe@kaffe.org>
Sun Oct 12 20:13:16 2003
PatchSet 4109
Date: 2003/10/13 03:10:02
Author: jim
Branch: HEAD
Tag: (none)
Log:
Fix Pattern.split() bug + convert CRLF to LF.
This should probably be merged upstream. Here's some sample
code to illustrate the bug:
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
public class Tst {
public static void main(String[] args)
{
String test1 = "test1/test2";
String test2 = "test3";
String [] test1parts = test1.split("/");
for (int i=0; i < test1parts.length; i++)
System.out.println("test1parts[" + i + "] = " + test1parts[i]);
String [] test2parts = test2.split("/");
for (int i=0; i < test2parts.length; i++)
System.out.println("test2parts[" + i + "] = " + test2parts[i]);
String [] test3parts = Pattern.compile("/").split(test2, 0);
for (int i=0; i < test3parts.length; i++)
System.out.println("test3parts[" + i + "] = " + test3parts[i]);
}
}
With this, I can run "Open DP-500", to stream DiVX and audio
to my new KiSS DVD player w/Ethernet. :-)
http://www.sourceforge.net/projects/open-dp500/
Cheers,
- Jim
Members:
ChangeLog:1.1703->1.1704
libraries/javalib/java/util/regex/Matcher.java:1.2->1.3
libraries/javalib/java/util/regex/Pattern.java:1.2->1.3
libraries/javalib/java/util/regex/PatternSyntaxException.java:1.1->1.2
Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.1703 kaffe/ChangeLog:1.1704
--- kaffe/ChangeLog:1.1703 Sat Oct 11 20:45:46 2003
+++ kaffe/ChangeLog Mon Oct 13 03:10:02 2003
@@ -1,3 +1,11 @@
+2003-10-12 Jim Pick <jim@kaffe.org>
+
+ * libraries/javalib/java/util/regex/Matcher.java,
+ libraries/javalib/java/util/regex/Pattern.java,
+ libraries/javalib/java/util/regex/PatternSyntaxException.java:
+ Return original string when Pattern.split(regex) does
+ not match. Convert from DOS to Unix line endings.
+
2003-10-11 Timothy S. Stack <stack@cs.utah.edu>
* config/i386/jit3-i386.def:
Index: kaffe/libraries/javalib/java/util/regex/Matcher.java
diff -u kaffe/libraries/javalib/java/util/regex/Matcher.java:1.2 kaffe/libraries/javalib/java/util/regex/Matcher.java:1.3
--- kaffe/libraries/javalib/java/util/regex/Matcher.java:1.2 Mon Dec 2 14:35:53 2002
+++ kaffe/libraries/javalib/java/util/regex/Matcher.java Mon Oct 13 03:10:04 2003
@@ -1,123 +1,123 @@
-package java.util.regex;
-import gnu.regexp.RE;
-import gnu.regexp.REMatch;
-
-public final class Matcher {
- private Pattern pattern;
- private CharSequence input;
- private int position;
- private int appendPosition;
- private REMatch match;
-
- public Pattern pattern() {
- return pattern;
- }
-
- Matcher(Pattern pattern, CharSequence input) {
- this.pattern = pattern;
- this.input = input;
- }
-
- public boolean matches() {
- return find(0);
- }
-
- public boolean lookingAt() {
- match = pattern.getRE().getMatch(input, 0);
- if (match != null) {
- if (match.getStartIndex() == 0) {
- return true;
- }
- match = null;
- }
- return false;
- }
-
- public boolean find() {
- return find(position);
- }
-
- public boolean find(int start) {
- match = pattern.getRE().getMatch(input, start);
- if (match != null) {
- position = match.getEndIndex();
- return true;
- }
- return false;
- }
-
- private void assertMatchOp() {
- if (match == null) throw new IllegalStateException();
- }
-
- public int start() {
- assertMatchOp();
- return match.getStartIndex();
- }
-
- public int start(int group) {
- assertMatchOp();
- return match.getStartIndex(group);
- }
-
- public int end() {
- assertMatchOp();
- return match.getEndIndex();
- }
-
- public int end(int group) {
- assertMatchOp();
- return match.getEndIndex(group);
- }
-
- public String group() {
- assertMatchOp();
- return match.toString();
- }
-
- public String group(int group) {
- assertMatchOp();
- return match.toString(group);
- }
-
- public int groupCount() {
- return pattern.getRE().getNumSubs();
- }
-
- public Matcher appendReplacement(StringBuffer sb, String replacement) {
- assertMatchOp();
- sb.append(input.subSequence(appendPosition, match.getStartIndex()).toString());
- sb.append(match.substituteInto(replacement));
- appendPosition = match.getEndIndex();
-
- return this;
- }
-
- public StringBuffer appendTail(StringBuffer sb) {
- sb.append(input.subSequence(appendPosition, input.length()).toString());
- return sb;
- }
-
- public String replaceAll(String replacement) {
- reset();
- return pattern.getRE().substituteAll(input, replacement, position);
- }
-
- public String replaceFirst(String replacement) {
- reset();
- // Semantics might not quite match
- return pattern.getRE().substitute(input, replacement, position);
- }
-
- public Matcher reset() {
- position = 0;
- match = null;
- return this;
- }
-
- public Matcher reset(CharSequence input) {
- this.input = input;
- reset();
- return this;
- }
-}
+package java.util.regex;
+import gnu.regexp.RE;
+import gnu.regexp.REMatch;
+
+public final class Matcher {
+ private Pattern pattern;
+ private CharSequence input;
+ private int position;
+ private int appendPosition;
+ private REMatch match;
+
+ public Pattern pattern() {
+ return pattern;
+ }
+
+ Matcher(Pattern pattern, CharSequence input) {
+ this.pattern = pattern;
+ this.input = input;
+ }
+
+ public boolean matches() {
+ return find(0);
+ }
+
+ public boolean lookingAt() {
+ match = pattern.getRE().getMatch(input, 0);
+ if (match != null) {
+ if (match.getStartIndex() == 0) {
+ return true;
+ }
+ match = null;
+ }
+ return false;
+ }
+
+ public boolean find() {
+ return find(position);
+ }
+
+ public boolean find(int start) {
+ match = pattern.getRE().getMatch(input, start);
+ if (match != null) {
+ position = match.getEndIndex();
+ return true;
+ }
+ return false;
+ }
+
+ private void assertMatchOp() {
+ if (match == null) throw new IllegalStateException();
+ }
+
+ public int start() {
+ assertMatchOp();
+ return match.getStartIndex();
+ }
+
+ public int start(int group) {
+ assertMatchOp();
+ return match.getStartIndex(group);
+ }
+
+ public int end() {
+ assertMatchOp();
+ return match.getEndIndex();
+ }
+
+ public int end(int group) {
+ assertMatchOp();
+ return match.getEndIndex(group);
+ }
+
+ public String group() {
+ assertMatchOp();
+ return match.toString();
+ }
+
+ public String group(int group) {
+ assertMatchOp();
+ return match.toString(group);
+ }
+
+ public int groupCount() {
+ return pattern.getRE().getNumSubs();
+ }
+
+ public Matcher appendReplacement(StringBuffer sb, String replacement) {
+ assertMatchOp();
+ sb.append(input.subSequence(appendPosition, match.getStartIndex()).toString());
+ sb.append(match.substituteInto(replacement));
+ appendPosition = match.getEndIndex();
+
+ return this;
+ }
+
+ public StringBuffer appendTail(StringBuffer sb) {
+ sb.append(input.subSequence(appendPosition, input.length()).toString());
+ return sb;
+ }
+
+ public String replaceAll(String replacement) {
+ reset();
+ return pattern.getRE().substituteAll(input, replacement, position);
+ }
+
+ public String replaceFirst(String replacement) {
+ reset();
+ // Semantics might not quite match
+ return pattern.getRE().substitute(input, replacement, position);
+ }
+
+ public Matcher reset() {
+ position = 0;
+ match = null;
+ return this;
+ }
+
+ public Matcher reset(CharSequence input) {
+ this.input = input;
+ reset();
+ return this;
+ }
+}
Index: kaffe/libraries/javalib/java/util/regex/Pattern.java
diff -u kaffe/libraries/javalib/java/util/regex/Pattern.java:1.2 kaffe/libraries/javalib/java/util/regex/Pattern.java:1.3
--- kaffe/libraries/javalib/java/util/regex/Pattern.java:1.2 Mon Dec 2 14:35:53 2002
+++ kaffe/libraries/javalib/java/util/regex/Pattern.java Mon Oct 13 03:10:04 2003
@@ -1,117 +1,120 @@
-package java.util.regex;
-import java.io.Serializable;
-import gnu.regexp.RE;
-import gnu.regexp.RESyntax;
-import gnu.regexp.REException;
-import java.util.Vector;
-
-public final class Pattern implements Serializable {
-
- public static final int UNIX_LINES = 1;
- public static final int CASE_INSENSITIVE = 2;
- public static final int COMMENTS = 4;
- public static final int MULTILINE = 8;
- public static final int DOTALL = 32;
- public static final int UNICODE_CASE = 64;
- public static final int CANON_EQ = 128;
-
- private String pattern;
- private int flags;
-
- private RE re;
- RE getRE() { return re; }
-
- private Pattern(String pattern, int flags) throws PatternSyntaxException {
- this.pattern = pattern;
- this.flags = flags;
-
- int gnuFlags = 0;
- if ((flags & CASE_INSENSITIVE) != 0) gnuFlags |= RE.REG_ICASE;
- if ((flags & MULTILINE) != 0) gnuFlags |= RE.REG_MULTILINE;
- if ((flags & DOTALL) != 0) gnuFlags |= RE.REG_DOT_NEWLINE;
- // not yet supported:
- // if ((flags & UNICODE_CASE) != 0) gnuFlags =
- // if ((flags & CANON_EQ) != 0) gnuFlags =
-
- // Eventually there will be such a thing as JDK 1_4 syntax
- RESyntax syntax = RESyntax.RE_SYNTAX_PERL5;
- if ((flags & UNIX_LINES) != 0) {
- // Use a syntax set with \n for linefeeds?
- syntax = new RESyntax(syntax);
- syntax.setLineSeparator("\n");
- }
-
- if ((flags & COMMENTS) != 0) {
- // Use a syntax with support for comments?
- }
-
- try {
- this.re = new RE(pattern, gnuFlags, syntax);
- } catch (REException e) {
- throw new PatternSyntaxException(e.getMessage(),
- pattern, e.getPosition());
- }
- }
-
- public static Pattern compile(String regex) throws PatternSyntaxException {
- return compile(regex, 0);
- }
-
- public static Pattern compile(String regex, int flags) throws PatternSyntaxException {
- return new Pattern(regex, flags);
- }
-
- public static boolean matches(String regex, CharSequence input) throws PatternSyntaxException {
- return compile(regex).matcher(input).matches();
- }
-
- public String pattern() {
- return pattern;
- }
-
- public int flags() {
- return flags;
- }
-
- public Matcher matcher(CharSequence input) {
- return new Matcher(this, input);
- }
-
- public String[] split(CharSequence input) {
- return split(input, 0);
- }
-
- private static final String[] modelArray = new String [0];
-
- public String[] split(CharSequence input, int limit) {
- Matcher matcher = new Matcher(this, input);
- Vector list = new Vector();
- int count = 0;
- int start = 0;
- int end;
- while (matcher.find()) {
- ++count;
- end = matcher.start();
- if (start == end) {
- if (limit != 0) {
- list.addElement("");
- }
- } else {
- String text = input.subSequence(start, end).toString();
- list.addElement(text);
- }
- start = matcher.end();
- if (count == limit) break;
- }
- // last token at end
- if (count != limit) {
- String text = input.subSequence(start, input.length()).toString();
- if (!("".equals(text) && (limit == 0))) {
- list.addElement(text);
- }
- }
- String[] output = new String [list.size()];
- list.copyInto(output);
- return output;
- }
-}
+package java.util.regex;
+import java.io.Serializable;
+import gnu.regexp.RE;
+import gnu.regexp.RESyntax;
+import gnu.regexp.REException;
+import java.util.Vector;
+
+public final class Pattern implements Serializable {
+
+ public static final int UNIX_LINES = 1;
+ public static final int CASE_INSENSITIVE = 2;
+ public static final int COMMENTS = 4;
+ public static final int MULTILINE = 8;
+ public static final int DOTALL = 32;
+ public static final int UNICODE_CASE = 64;
+ public static final int CANON_EQ = 128;
+
+ private String pattern;
+ private int flags;
+
+ private RE re;
+ RE getRE() { return re; }
+
+ private Pattern(String pattern, int flags) throws PatternSyntaxException {
+ this.pattern = pattern;
+ this.flags = flags;
+
+ int gnuFlags = 0;
+ if ((flags & CASE_INSENSITIVE) != 0) gnuFlags |= RE.REG_ICASE;
+ if ((flags & MULTILINE) != 0) gnuFlags |= RE.REG_MULTILINE;
+ if ((flags & DOTALL) != 0) gnuFlags |= RE.REG_DOT_NEWLINE;
+ // not yet supported:
+ // if ((flags & UNICODE_CASE) != 0) gnuFlags =
+ // if ((flags & CANON_EQ) != 0) gnuFlags =
+
+ // Eventually there will be such a thing as JDK 1_4 syntax
+ RESyntax syntax = RESyntax.RE_SYNTAX_PERL5;
+ if ((flags & UNIX_LINES) != 0) {
+ // Use a syntax set with \n for linefeeds?
+ syntax = new RESyntax(syntax);
+ syntax.setLineSeparator("\n");
+ }
+
+ if ((flags & COMMENTS) != 0) {
+ // Use a syntax with support for comments?
+ }
+
+ try {
+ this.re = new RE(pattern, gnuFlags, syntax);
+ } catch (REException e) {
+ throw new PatternSyntaxException(e.getMessage(),
+ pattern, e.getPosition());
+ }
+ }
+
+ public static Pattern compile(String regex) throws PatternSyntaxException {
+ return compile(regex, 0);
+ }
+
+ public static Pattern compile(String regex, int flags) throws PatternSyntaxException {
+ return new Pattern(regex, flags);
+ }
+
+ public static boolean matches(String regex, CharSequence input) throws PatternSyntaxException {
+ return compile(regex).matcher(input).matches();
+ }
+
+ public String pattern() {
+ return pattern;
+ }
+
+ public int flags() {
+ return flags;
+ }
+
+ public Matcher matcher(CharSequence input) {
+ return new Matcher(this, input);
+ }
+
+ public String[] split(CharSequence input) {
+ return split(input, 0);
+ }
+
+ private static final String[] modelArray = new String [0];
+
+ public String[] split(CharSequence input, int limit) {
+ Matcher matcher = new Matcher(this, input);
+ Vector list = new Vector();
+ int count = 0;
+ int start = 0;
+ int end;
+ while (matcher.find()) {
+ ++count;
+ end = matcher.start();
+ if (start == end) {
+ if (limit != 0) {
+ list.addElement("");
+ }
+ } else {
+ String text = input.subSequence(start, end).toString();
+ list.addElement(text);
+ }
+ start = matcher.end();
+ if (count == limit) break;
+ }
+ // last token at end
+ if (count != limit) {
+ String text = input.subSequence(start, input.length()).toString();
+ if (!("".equals(text) && (limit == 0))) {
+ list.addElement(text);
+ }
+ }
+ if (list.size() == 0) {
+ list.addElement(input.toString());
+ }
+ String[] output = new String [list.size()];
+ list.copyInto(output);
+ return output;
+ }
+}
Index: kaffe/libraries/javalib/java/util/regex/PatternSyntaxException.java
diff -u kaffe/libraries/javalib/java/util/regex/PatternSyntaxException.java:1.1 kaffe/libraries/javalib/java/util/regex/PatternSyntaxException.java:1.2
--- kaffe/libraries/javalib/java/util/regex/PatternSyntaxException.java:1.1 Thu Nov 28 10:23:18 2002
+++ kaffe/libraries/javalib/java/util/regex/PatternSyntaxException.java Mon Oct 13 03:10:04 2003
@@ -1,29 +1,29 @@
-package java.util.regex;
-
-public class PatternSyntaxException extends IllegalArgumentException {
- protected String description;
- protected String pattern;
- protected int index;
-
- public PatternSyntaxException(String description, String pattern, int index) {
- this.description = description;
- this.pattern = pattern;
- this.index = index;
- }
-
- public String getDescription() {
- return description;
- }
-
- public String getPattern() {
- return pattern;
- }
-
- public int getIndex() {
- return index;
- }
-
- public String getMessage() {
- return description; // XXX
- }
-}
+package java.util.regex;
+
+public class PatternSyntaxException extends IllegalArgumentException {
+ protected String description;
+ protected String pattern;
+ protected int index;
+
+ public PatternSyntaxException(String description, String pattern, int index) {
+ this.description = description;
+ this.pattern = pattern;
+ this.index = index;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public String getPattern() {
+ return pattern;
+ }
+
+ public int getIndex() {
+ return index;
+ }
+
+ public String getMessage() {
+ return description; // XXX
+ }
+}