summaryrefslogtreecommitdiff
path: root/libjava/java/text/RuleBasedCollator.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/java/text/RuleBasedCollator.java')
-rw-r--r--libjava/java/text/RuleBasedCollator.java31
1 files changed, 18 insertions, 13 deletions
diff --git a/libjava/java/text/RuleBasedCollator.java b/libjava/java/text/RuleBasedCollator.java
index 18046adf9e5..fd4002b1a9f 100644
--- a/libjava/java/text/RuleBasedCollator.java
+++ b/libjava/java/text/RuleBasedCollator.java
@@ -43,7 +43,7 @@ public class RuleBasedCollator extends Collator
}
// A helper for CollationElementIterator.next().
- static int ceiNext (CollationElementIterator cei)
+ int ceiNext (CollationElementIterator cei)
{
if (cei.lookahead_set)
{
@@ -61,7 +61,7 @@ public class RuleBasedCollator extends Collator
boolean found = false;
int i;
- for (i = save; i < max; ++i)
+ for (i = save + 1; i <= max; ++i)
{
s = cei.text.substring(save, i);
if (prefixes.get(s) == null)
@@ -108,16 +108,15 @@ public class RuleBasedCollator extends Collator
switch (strength)
{
case PRIMARY:
- c |= CollationElementIterator.primaryOrder(os);
- /* Fall through. */
+ c = os & ~0xffff;
+ break;
case SECONDARY:
- c |= CollationElementIterator.secondaryOrder(os);
- /* Fall through. */
- case TERTIARY:
- c |= CollationElementIterator.tertiaryOrder(os);
+ c = os & ~0x00ff;
break;
+ case TERTIARY:
case IDENTICAL:
c = os;
+ break;
}
if (c != 0)
return c;
@@ -128,8 +127,8 @@ public class RuleBasedCollator extends Collator
{
CollationElementIterator cs, ct;
- cs = new CollationElementIterator (source);
- ct = new CollationElementIterator (target);
+ cs = new CollationElementIterator (source, this);
+ ct = new CollationElementIterator (target, this);
while (true)
{
@@ -140,9 +139,15 @@ public class RuleBasedCollator extends Collator
&& ot == CollationElementIterator.NULLORDER)
break;
else if (os == CollationElementIterator.NULLORDER)
- return 1;
+ {
+ // Source string is shorter, so return "less than".
+ return -1;
+ }
else if (ot == CollationElementIterator.NULLORDER)
- return -1;
+ {
+ // Target string is shorter, so return "greater than".
+ return 1;
+ }
if (os != ot)
return os - ot;
@@ -168,7 +173,7 @@ public class RuleBasedCollator extends Collator
int max = source.length();
for (int i = 0; i < max; ++i)
decomposeCharacter (source.charAt(i), expand);
- return new CollationElementIterator (expand.toString());
+ return new CollationElementIterator (expand.toString(), this);
}
public CollationKey getCollationKey (String source)