aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Koch <konqueror@gmx.de>2003-10-20 20:14:05 +0000
committerMichael Koch <mkoch@gcc.gnu.org>2003-10-20 20:14:05 +0000
commitc7560266087585d8d1022bba563d5b03ae44ba26 (patch)
treee08b8043d06910a0ac23827ab4aba2e98ca0026a
parentd15f01e3d946722d9db38c949d0a0d27644c9b60 (diff)
downloadgcc-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
-rw-r--r--libjava/ChangeLog9
-rw-r--r--libjava/java/text/RuleBasedCollator.java41
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;
}