package com.hughes.android.dictionary.engine;
-import java.util.Comparator;
-
import com.ibm.icu.text.Transliterator;
+import java.util.Comparator;
+
public class NormalizeComparator implements Comparator<String> {
-
- final Transliterator normalizer;
- final Comparator<Object> comparator;
-
- public NormalizeComparator(final Transliterator normalizer,
- final Comparator<Object> comparator) {
- this.normalizer = normalizer;
- this.comparator = comparator;
- }
-
- @Override
- public int compare(final String s1, final String s2) {
- final String n1 = normalizer.transform(s1);
- final String n2 = normalizer.transform(s2);
- final int cn = comparator.compare(n1, n2);
- if (cn != 0) {
- return cn;
+
+ final Transliterator normalizer;
+ final Comparator<Object> comparator;
+ int version;
+
+ public NormalizeComparator(final Transliterator normalizer,
+ final Comparator<Object> comparator, int version) {
+ this.normalizer = normalizer;
+ this.comparator = comparator;
+ this.version = version;
+ }
+
+ // Handles comparison between items starting with "-", returns 0 for all others.
+ public static int compareWithoutLeadingDash(final String a, final String b, final Comparator c, int version) {
+ if (version < 7) return 0;
+ if (a.startsWith("-") || b.startsWith("-"))
+ {
+ String s1 = a;
+ String s2 = b;
+ if (s1.startsWith("-")) s1 = s1.substring(1);
+ if (s2.startsWith("-")) s2 = s2.substring(1);
+ return c.compare(s1, s2);
+ }
+ return 0;
+ }
+
+ @Override
+ public int compare(final String s1, final String s2) {
+ final String n1 = normalizer.transform(s1);
+ final String n2 = normalizer.transform(s2);
+ int cn = compareWithoutLeadingDash(n1, n2, comparator, version);
+ if (cn != 0) {
+ return cn;
+ }
+ cn = comparator.compare(n1, n2);
+ if (cn != 0) {
+ return cn;
+ }
+ return comparator.compare(s1, s2);
}
- return comparator.compare(s1, s2);
- }
}