From 89c9e4b416a48e836c3c03f94554c4542bf0f3a8 Mon Sep 17 00:00:00 2001 From: mkoch Date: Mon, 20 Oct 2003 20:14:05 +0000 Subject: [PATCH] 2003-10-20 Michael Koch * java/text/RuleBasedCollator.java (RuleBasedCollator): Check rules not empty, fixed search in already existing collation elements. (is_special): Removed common whitespace characters. (text_argument): Dont return on whitespaces, add characters between two ' to string buffer. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@72716 138bc75d-0d04-0410-961f-82ee72b054a4 --- libjava/ChangeLog | 9 +++++++ libjava/java/text/RuleBasedCollator.java | 41 +++++++++++++++++++++++--------- 2 files changed, 39 insertions(+), 11 deletions(-) diff --git a/libjava/ChangeLog b/libjava/ChangeLog index dfe95a6..e67710c 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,12 @@ +2003-10-20 Michael Koch + + * java/text/RuleBasedCollator.java + (RuleBasedCollator): Check rules not empty, fixed search in already + existing collation elements. + (is_special): Removed common whitespace characters. + (text_argument): Dont return on whitespaces, add characters between + two ' to string buffer. + 2003-10-18 Michael Koch * gnu/java/net/protocol/file/Connection.java, diff --git a/libjava/java/text/RuleBasedCollator.java b/libjava/java/text/RuleBasedCollator.java index c05b45d..2750752 100644 --- a/libjava/java/text/RuleBasedCollator.java +++ b/libjava/java/text/RuleBasedCollator.java @@ -180,6 +180,9 @@ public class RuleBasedCollator extends Collator */ public RuleBasedCollator (String rules) throws ParseException { + if (rules.equals ("")) + throw new ParseException ("empty rule set", 0); + this.rules = rules; this.frenchAccents = false; @@ -225,7 +228,19 @@ public class RuleBasedCollator extends Collator if (argument.length() == 0) throw new ParseException ("invalid character", save); String arg = argument.toString(); - int item_index = vec.indexOf(arg); + int item_index = -1; + + for (int j = 0; j < vec.size(); ++j) + { + CollationElement e = (CollationElement) vec.elementAt (j); + + if (arg.equals (e.key)) + { + item_index = j; + break; + } + } + if (c != '&') { // If the argument already appears in the vector, then we @@ -535,8 +550,7 @@ public class RuleBasedCollator extends Collator private final boolean is_special (char c) { // Rules from JCL book. - return ((c >= 0x0009 && c <= 0x000d) - || (c >= 0x0020 && c <= 0x002f) + return ((c >= 0x0021 && c <= 0x002f) || (c >= 0x003a && c <= 0x0040) || (c >= 0x005b && c <= 0x0060) || (c >= 0x007b && c <= 0x007e)); @@ -549,15 +563,20 @@ public class RuleBasedCollator extends Collator int len = rules.length(); while (index < len) { - char c = rules.charAt(index); - if (c == '\'' && index + 2 < len - && rules.charAt(index + 2) == '\'' - && is_special (rules.charAt(index + 1))) - index += 2; - else if (is_special (c) || Character.isWhitespace(c)) + char c = rules.charAt (index); + if (c == '\'' + && index + 2 < len + && rules.charAt (index + 2) == '\'') + { + result.append (rules.charAt (index + 1)); + index += 2; + } + else if (is_special (c)) return index; - result.append(c); - ++index; + else if (!Character.isWhitespace (c)) + result.append (c); + + ++index; } return index; } -- 2.7.4