]> gitweb.fperrin.net Git - Dictionary.git/commitdiff
Fix comparison for entries starting with "-".
authorReimar Döffinger <Reimar.Doeffinger@gmx.de>
Tue, 29 Dec 2015 10:41:00 +0000 (11:41 +0100)
committerReimar Döffinger <Reimar.Doeffinger@gmx.de>
Tue, 29 Dec 2015 10:41:00 +0000 (11:41 +0100)
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
src/com/hughes/android/dictionary/engine/Index.java
src/com/hughes/android/dictionary/engine/NormalizeComparator.java

index c6d80ba6024257bd35854b54eef425f1b234e912..f872e98a1ab42ba4337138d41c6290cde3987cc6 100644 (file)
@@ -2,8 +2,8 @@
 <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"
index d9d17bf24be41f2cfa2b3c177c3196e8a0bae286..93dd34bb02d4e9fd21feaf0cc4e6ed9d8ad231fc 100644 (file)
@@ -117,7 +117,7 @@ public final class Index implements RAFSerializable<Index> {
      * 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<Index> {
             }
             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;
index c0fef4f282431a52d7280040c5cb4f9edb27d6d8..82f0feac6af99b3c61e4c98ac8958db99d212436 100644 (file)
@@ -22,18 +22,38 @@ public class NormalizeComparator implements Comparator<String> {
 
     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;
         }