X-Git-Url: http://gitweb.fperrin.net/?a=blobdiff_plain;f=src%2Fcom%2Fhughes%2Fandroid%2Fdictionary%2Fengine%2FNormalizeComparator.java;h=efe05d1f58e0bd2cba2171ff7d47db90c9ca5cd7;hb=83d9dc7cd871082a82c2dd0dbb7a0ceabd7c83a0;hp=b0efdee3b9a04d83e74c19683ed69c23a59fc299;hpb=c13aa24dfe80777b92c42b4d738243cf24fafff6;p=Dictionary.git diff --git a/src/com/hughes/android/dictionary/engine/NormalizeComparator.java b/src/com/hughes/android/dictionary/engine/NormalizeComparator.java index b0efdee..efe05d1 100644 --- a/src/com/hughes/android/dictionary/engine/NormalizeComparator.java +++ b/src/com/hughes/android/dictionary/engine/NormalizeComparator.java @@ -14,30 +14,45 @@ 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 { - - final Transliterator normalizer; - final Comparator comparator; - - public NormalizeComparator(final Transliterator normalizer, - final Comparator 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; + + private final Transliterator normalizer; + private final Comparator comparator; + private final int version; + + public NormalizeComparator(final Transliterator normalizer, + final Comparator comparator, int version) { + this.normalizer = normalizer; + this.comparator = comparator; + this.version = version; + } + + // Handles comparison between items containing "-". + // Also replaces other problematic cases like "thorn". + public static int compareWithoutDash(final String a, final String b, final Comparator c, int version) { + if (version < 7) return 0; + String s1 = a.replace("-", "").replace("þ", "th").replace("Þ", "Th"); + String s2 = b.replace("-", "").replace("þ", "th").replace("Þ", "Th"); + return c.compare(s1, s2); + } + + @Override + public int compare(final String s1, final String s2) { + final String n1 = normalizer == null ? s1.toLowerCase() : normalizer.transform(s1); + final String n2 = normalizer == null ? s2.toLowerCase() : normalizer.transform(s2); + int cn = compareWithoutDash(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); - } }