diff options
author | mkoch <mkoch@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-10-20 20:14:05 +0000 |
---|---|---|
committer | mkoch <mkoch@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-10-20 20:14:05 +0000 |
commit | 89c9e4b416a48e836c3c03f94554c4542bf0f3a8 (patch) | |
tree | e08b8043d06910a0ac23827ab4aba2e98ca0026a | |
parent | 8d9f9c57e2f659ca9577a2d6195f0a470e257b5b (diff) | |
download | gcc-89c9e4b416a48e836c3c03f94554c4542bf0f3a8.tar.gz |
2003-10-20 Michael Koch <konqueror@gmx.de>
* 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
-rw-r--r-- | libjava/ChangeLog | 9 | ||||
-rw-r--r-- | libjava/java/text/RuleBasedCollator.java | 41 |
2 files changed, 39 insertions, 11 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog index dfe95a6e59b..e67710c9d92 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,12 @@ +2003-10-20 Michael Koch <konqueror@gmx.de> + + * 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 <konqueror@gmx.de> * gnu/java/net/protocol/file/Connection.java, diff --git a/libjava/java/text/RuleBasedCollator.java b/libjava/java/text/RuleBasedCollator.java index c05b45d5049..27507524876 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; } |