diff options
author | 2012-09-07 16:49:16 +0900 | |
---|---|---|
committer | 2012-09-10 12:35:53 +0900 | |
commit | eae7b293e4a854819aa0de663066cd0b6cdd52e7 (patch) | |
tree | bf627271b3afb00cb5e6baba2383dcde8f50535b /java/src | |
parent | 096f35ff4b5413906e2a339663baf16e5dabaf64 (diff) | |
download | latinime-eae7b293e4a854819aa0de663066cd0b6cdd52e7.tar.gz latinime-eae7b293e4a854819aa0de663066cd0b6cdd52e7.tar.xz latinime-eae7b293e4a854819aa0de663066cd0b6cdd52e7.zip |
Check the length of the word when add to FusionDictionary.
Change-Id: Id98d18e90a8b83b597507728b467f56888c8fd12
Diffstat (limited to 'java/src')
4 files changed, 18 insertions, 2 deletions
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionary.java b/java/src/com/android/inputmethod/latin/BinaryDictionary.java index 8909526d8..c3ae81f3a 100644 --- a/java/src/com/android/inputmethod/latin/BinaryDictionary.java +++ b/java/src/com/android/inputmethod/latin/BinaryDictionary.java @@ -41,7 +41,7 @@ public class BinaryDictionary extends Dictionary { * It is necessary to keep it at this value because some languages e.g. German have * really long words. */ - public static final int MAX_WORD_LENGTH = 48; + public static final int MAX_WORD_LENGTH = Constants.Dictionary.MAX_WORD_LENGTH; public static final int MAX_WORDS = 18; public static final int MAX_SPACES = 16; diff --git a/java/src/com/android/inputmethod/latin/Constants.java b/java/src/com/android/inputmethod/latin/Constants.java index d71c0f995..61817ce65 100644 --- a/java/src/com/android/inputmethod/latin/Constants.java +++ b/java/src/com/android/inputmethod/latin/Constants.java @@ -128,6 +128,14 @@ public final class Constants { } } + public static class Dictionary { + public static final int MAX_WORD_LENGTH = 48; + + private Dictionary() { + // This utility class is no publicly instantiable. + } + } + public static final int NOT_A_CODE = -1; // See {@link KeyboardActionListener.Adapter#isInvalidCoordinate(int)}. diff --git a/java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java b/java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java index 7de5cf340..6b79810f9 100644 --- a/java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java +++ b/java/src/com/android/inputmethod/latin/makedict/BinaryDictInputOutput.java @@ -16,6 +16,7 @@ package com.android.inputmethod.latin.makedict; +import com.android.inputmethod.latin.Constants; import com.android.inputmethod.latin.makedict.FusionDictionary.CharGroup; import com.android.inputmethod.latin.makedict.FusionDictionary.DictionaryOptions; import com.android.inputmethod.latin.makedict.FusionDictionary.Node; @@ -143,7 +144,7 @@ public class BinaryDictInputOutput { // TODO: Make this value adaptative to content data, store it in the header, and // use it in the reading code. - private static final int MAX_WORD_LENGTH = 48; + private static final int MAX_WORD_LENGTH = Constants.Dictionary.MAX_WORD_LENGTH; private static final int MASK_GROUP_ADDRESS_TYPE = 0xC0; private static final int FLAG_GROUP_ADDRESS_TYPE_NOADDRESS = 0x00; diff --git a/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java b/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java index 61f7371b8..eebead414 100644 --- a/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java +++ b/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java @@ -16,6 +16,8 @@ package com.android.inputmethod.latin.makedict; +import com.android.inputmethod.latin.Constants; + import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -382,6 +384,11 @@ public class FusionDictionary implements Iterable<Word> { final ArrayList<WeightedString> shortcutTargets, final boolean isNotAWord, final boolean isBlacklistEntry) { assert(frequency >= 0 && frequency <= 255); + if (word.length >= Constants.Dictionary.MAX_WORD_LENGTH) { + MakedictLog.w("Ignoring a word that is too long: word.length = " + word.length); + return; + } + Node currentNode = mRoot; int charIndex = 0; |