diff options
author | Michael Koch <konqueror@gmx.de> | 2003-10-20 20:14:05 +0000 |
---|---|---|
committer | Michael Koch <mkoch@gcc.gnu.org> | 2003-10-20 20:14:05 +0000 |
commit | c7560266087585d8d1022bba563d5b03ae44ba26 (patch) | |
tree | e08b8043d06910a0ac23827ab4aba2e98ca0026a /libjava | |
parent | d15f01e3d946722d9db38c949d0a0d27644c9b60 (diff) | |
download | gcc-c7560266087585d8d1022bba563d5b03ae44ba26.zip gcc-c7560266087585d8d1022bba563d5b03ae44ba26.tar.gz gcc-c7560266087585d8d1022bba563d5b03ae44ba26.tar.bz2 |
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.
From-SVN: r72716
Diffstat (limited to 'libjava')
-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 dfe95a6..e67710c 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 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; } |