X-Git-Url: http://gitweb.fperrin.net/?a=blobdiff_plain;f=src%2Fcom%2Fhughes%2Fandroid%2Fdictionary%2Fengine%2FPairEntry.java;h=e836a5cf2fc4237b5dc4322f2e356fdc14097d03;hb=590af2616dcdacdd2c4d56e71e3a502a4b3b81da;hp=ebfd84a14f4fd9bbdafc62c4679b6f4ad51721f3;hpb=c332b9768f8b6d1b81137dba2aa6e0cb06c76046;p=Dictionary.git diff --git a/src/com/hughes/android/dictionary/engine/PairEntry.java b/src/com/hughes/android/dictionary/engine/PairEntry.java index ebfd84a..e836a5c 100644 --- a/src/com/hughes/android/dictionary/engine/PairEntry.java +++ b/src/com/hughes/android/dictionary/engine/PairEntry.java @@ -19,9 +19,11 @@ import java.io.PrintStream; import java.io.RandomAccessFile; import java.util.ArrayList; import java.util.List; +import java.util.regex.Pattern; import com.hughes.util.raf.RAFSerializable; import com.hughes.util.raf.RAFSerializer; +import com.ibm.icu.text.Transliterator; public class PairEntry extends AbstractEntry implements RAFSerializable, Comparable { @@ -97,6 +99,11 @@ public class PairEntry extends AbstractEntry implements RAFSerializable searchTokens, final Transliterator normalizer, final boolean swapPairEntries) { + final int side = swapPairEntries ? 1 : 0; + final List pairs = getEntry().pairs; + final String[] pairSides = new String[pairs.size()]; + for (int i = 0; i < pairs.size(); ++i) { + pairSides[i] = normalizer.transform(pairs.get(i).get(side)); + } + for (int i = searchTokens.size() - 1; i >= 0; --i) { + final String searchToken = searchTokens.get(i); + boolean found = false; + for (final String pairSide : pairSides) { + found |= pairSide.contains(searchToken); + } + if (!found) { + return RowMatchType.NO_MATCH; + } + } + final StringBuilder regex = new StringBuilder(); + for (final String searchToken : searchTokens) { + if (regex.length() > 0) { + regex.append("[\\s]*"); + } + regex.append(Pattern.quote(searchToken)); + } + final Pattern pattern = Pattern.compile(regex.toString()); + for (final String pairSide : pairSides) { + if (pattern.matcher(pairSide).matches()) { + return RowMatchType.ORDERED_MATCH; + } + } + return RowMatchType.BAG_OF_WORDS_MATCH; + } }