From: Reimar Döffinger Date: Sun, 21 Oct 2018 17:55:51 +0000 (+0200) Subject: Fix multiword search with incomplete words. X-Git-Url: http://gitweb.fperrin.net/?p=Dictionary.git;a=commitdiff_plain;h=c30780dce1351b55c0e94b05dd8ef327aa31cebd Fix multiword search with incomplete words. It would trip over if the dictionary contained words with the same prefix starting with -. Example is searching for "sense des aiguilles" which would break the loop upon encountering "-aige". Which meant that searching for "sense des aig" would find nothing. "sense des a" would however due to "a" not being considered due to the stoplist. --- diff --git a/src/com/hughes/android/dictionary/engine/Index.java b/src/com/hughes/android/dictionary/engine/Index.java index 30c18e2..ef6d11c 100644 --- a/src/com/hughes/android/dictionary/engine/Index.java +++ b/src/com/hughes/android/dictionary/engine/Index.java @@ -410,7 +410,8 @@ public final class Index implements RAFSerializable { return -1; } final IndexEntry indexEntry = sortedIndexEntries.get(index); - if (!indexEntry.normalizedToken.startsWith(normalizedPrefix)) { + if (!indexEntry.normalizedToken.startsWith(normalizedPrefix) && + !NormalizeComparator.withoutDash(indexEntry.normalizedToken).startsWith(normalizedPrefix)) { break; } rowCount += indexEntry.numRows + indexEntry.htmlEntries.size(); @@ -500,7 +501,8 @@ public final class Index implements RAFSerializable { return null; } final IndexEntry indexEntry = sortedIndexEntries.get(index); - if (!indexEntry.normalizedToken.startsWith(searchToken)) { + if (!indexEntry.normalizedToken.startsWith(searchToken) && + !NormalizeComparator.withoutDash(indexEntry.normalizedToken).startsWith(searchToken)) { break; } diff --git a/src/com/hughes/android/dictionary/engine/NormalizeComparator.java b/src/com/hughes/android/dictionary/engine/NormalizeComparator.java index efe05d1..c744334 100644 --- a/src/com/hughes/android/dictionary/engine/NormalizeComparator.java +++ b/src/com/hughes/android/dictionary/engine/NormalizeComparator.java @@ -31,12 +31,16 @@ public class NormalizeComparator implements Comparator { this.version = version; } + public static String withoutDash(final String a) { + return a.replace("-", "").replace("þ", "th").replace("Þ", "Th"); + } + // 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"); + String s1 = withoutDash(a); + String s2 = withoutDash(b); return c.compare(s1, s2); }