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 <[EMAIL PROTECTED]> + + * 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 <[EMAIL PROTECTED]> * 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 + } +} _______________________________________________ kaffe mailing list [EMAIL PROTECTED] http://kaffe.org/cgi-bin/mailman/listinfo/kaffe