<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.hughes.android.dictionary"
android:installLocation="auto"
- android:versionCode="52"
- android:versionName="5.2.1" >
+ android:versionCode="53"
+ android:versionName="5.2.2" >
<uses-sdk
android:minSdkVersion="10"
* normalizations.
*/
public NormalizeComparator getSortComparator() {
- return new NormalizeComparator(normalizer(), sortLanguage.getCollator());
+ return new NormalizeComparator(normalizer(), sortLanguage.getCollator(), dict.dictFileVersion);
}
public Index(final Dictionary dict, final DataInput inp) throws IOException {
}
final IndexEntry midEntry = sortedIndexEntries.get(mid);
- final int comp = sortCollator.compare(token, midEntry.normalizedToken());
+ int comp = NormalizeComparator.compareWithoutLeadingDash(token, midEntry.normalizedToken(), sortCollator, dict.dictFileVersion);
+ if (comp == 0)
+ comp = sortCollator.compare(token, midEntry.normalizedToken());
if (comp == 0) {
final int result = windBackCase(token, mid, interrupted);
return result;
final Transliterator normalizer;
final Comparator<Object> comparator;
+ int version;
public NormalizeComparator(final Transliterator normalizer,
- final Comparator<Object> comparator) {
+ 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);
- final int cn = comparator.compare(n1, n2);
+ int cn = compareWithoutLeadingDash(n1, n2, comparator, version);
+ if (cn != 0) {
+ return cn;
+ }
+ cn = comparator.compare(n1, n2);
if (cn != 0) {
return cn;
}