diff --git a/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java b/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java index b08702e47..55ceb1ca4 100644 --- a/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java +++ b/java/src/com/android/inputmethod/latin/makedict/FusionDictionary.java @@ -28,6 +28,8 @@ import java.util.LinkedList; */ public class FusionDictionary implements Iterable { + private static final boolean DBG = MakedictLog.DBG; + /** * A node of the dictionary, containing several CharGroups. * @@ -159,6 +161,7 @@ public class FusionDictionary implements Iterable { * shortcut list. */ public WeightedString getShortcut(final String word) { + // TODO: Don't do a linear search if (mShortcutTargets != null) { final int size = mShortcutTargets.size(); for (int i = 0; i < size; ++i) { @@ -176,6 +179,7 @@ public class FusionDictionary implements Iterable { * Returns null if the word is not in the bigrams list. */ public WeightedString getBigram(final String word) { + // TODO: Don't do a linear search if (mBigrams != null) { final int size = mBigrams.size(); for (int i = 0; i < size; ++i) { @@ -265,31 +269,21 @@ public class FusionDictionary implements Iterable { /** * Helper method to convert a String to an int array. */ - static private int[] getCodePoints(String word) { - final int wordLength = word.length(); - int[] array = new int[word.codePointCount(0, wordLength)]; - for (int i = 0; i < wordLength; i = word.offsetByCodePoints(i, 1)) { - array[i] = word.codePointAt(i); - } - return array; - } - - /** - * Helper method to add all words in a list as 0-frequency entries - * - * These words are added when shortcuts targets or bigrams are not found in the dictionary - * yet. The same words may be added later with an actual frequency - this is handled by - * the private version of add(). - */ - private void addNeutralWords(final ArrayList words) { - if (null != words) { - for (WeightedString word : words) { - final CharGroup t = findWordInTree(mRoot, word.mWord); - if (null == t) { - add(getCodePoints(word.mWord), 0, null); - } - } + static private int[] getCodePoints(final String word) { + // TODO: this is a copy-paste of the contents of StringUtils.toCodePointArray, + // which is not visible from the makedict package. Factor this code. + final char[] characters = word.toCharArray(); + final int length = characters.length; + final int[] codePoints = new int[Character.codePointCount(characters, 0, length)]; + int codePoint = Character.codePointAt(characters, 0); + int dsti = 0; + for (int srci = Character.charCount(codePoint); + srci < length; srci += Character.charCount(codePoint), ++dsti) { + codePoints[dsti] = codePoint; + codePoint = Character.codePointAt(characters, srci); } + codePoints[dsti] = codePoint; + return codePoints; } /** @@ -339,7 +333,6 @@ public class FusionDictionary implements Iterable { if (charGroup != null) { final CharGroup charGroup2 = findWordInTree(mRoot, word2); if (charGroup2 == null) { - // TODO: refactor with the identical code in addNeutralWords add(getCodePoints(word2), 0, null); } charGroup.addBigram(word2, frequency); @@ -386,7 +379,7 @@ public class FusionDictionary implements Iterable { Arrays.copyOfRange(word, charIndex, word.length), shortcutTargets, null /* bigrams */, frequency); currentNode.mData.add(insertionIndex, newGroup); - checkStack(currentNode); + if (DBG) checkStack(currentNode); } else { // There is a word with a common prefix. if (differentCharIndex == currentGroup.mChars.length) { @@ -437,7 +430,7 @@ public class FusionDictionary implements Iterable { } currentNode.mData.set(nodeIndex, newParent); } - checkStack(currentNode); + if (DBG) checkStack(currentNode); } } } diff --git a/java/src/com/android/inputmethod/latin/makedict/MakedictLog.java b/java/src/com/android/inputmethod/latin/makedict/MakedictLog.java index 1281c7e3a..3f0cd0796 100644 --- a/java/src/com/android/inputmethod/latin/makedict/MakedictLog.java +++ b/java/src/com/android/inputmethod/latin/makedict/MakedictLog.java @@ -22,7 +22,7 @@ import android.util.Log; * Wrapper to redirect log events to the right output medium. */ public class MakedictLog { - private static final boolean DBG = false; + public static final boolean DBG = false; private static final String TAG = MakedictLog.class.getSimpleName(); public static void d(String message) { diff --git a/tools/makedict/src/com/android/inputmethod/latin/makedict/MakedictLog.java b/tools/makedict/src/com/android/inputmethod/latin/makedict/MakedictLog.java index 1ab9f42dd..7eccff2b4 100644 --- a/tools/makedict/src/com/android/inputmethod/latin/makedict/MakedictLog.java +++ b/tools/makedict/src/com/android/inputmethod/latin/makedict/MakedictLog.java @@ -20,6 +20,8 @@ package com.android.inputmethod.latin.makedict; * Wrapper to redirect log events to the right output medium. */ public class MakedictLog { + public static final boolean DBG = true; + private static void print(String message) { System.out.println(message); }