From 71e3edc548080b5c6abcd043652035397c6a41d8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Reimar=20D=C3=B6ffinger?= Date: Tue, 29 Dec 2015 11:41:00 +0100 Subject: [PATCH] Fix comparison for entries starting with "-". This avoids not being able to find whole sections if unlucky, e.g. everything between petitz and phi in the EN-FR dictionary because of the "-phil" entry. --- AndroidManifest.xml | 4 ++-- .../android/dictionary/engine/Index.java | 6 +++-- .../engine/NormalizeComparator.java | 24 +++++++++++++++++-- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index c6d80ba..f872e98 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -2,8 +2,8 @@ + android:versionCode="53" + android:versionName="5.2.2" > { * 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 { @@ -309,7 +309,9 @@ public final class Index implements RAFSerializable { } 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; diff --git a/src/com/hughes/android/dictionary/engine/NormalizeComparator.java b/src/com/hughes/android/dictionary/engine/NormalizeComparator.java index c0fef4f..82f0fea 100644 --- a/src/com/hughes/android/dictionary/engine/NormalizeComparator.java +++ b/src/com/hughes/android/dictionary/engine/NormalizeComparator.java @@ -22,18 +22,38 @@ public class NormalizeComparator implements Comparator { final Transliterator normalizer; final Comparator comparator; + int version; public NormalizeComparator(final Transliterator normalizer, - final Comparator comparator) { + final Comparator 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; } -- 2.43.0