From 74d66a5513c12539459dc872e7cca4521e908f1b Mon Sep 17 00:00:00 2001 From: Jean Chalard Date: Mon, 29 Oct 2012 12:28:20 +0900 Subject: [PATCH] Add word arguments to the info command (A10) With this, it's now possible to get all the information about a word from any dictionary. Bug: 7388857 Change-Id: Ifc9d539f52f87044a1974d95bf35d87465e84c47 --- .../inputmethod/latin/dicttool/Info.java | 48 ++++++++++++++++++- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Info.java b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Info.java index 98a4e8fa3..6f1c020f2 100644 --- a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Info.java +++ b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Info.java @@ -18,9 +18,12 @@ package com.android.inputmethod.latin.dicttool; import com.android.inputmethod.latin.makedict.FormatSpec; import com.android.inputmethod.latin.makedict.FusionDictionary; +import com.android.inputmethod.latin.makedict.FusionDictionary.CharGroup; import com.android.inputmethod.latin.makedict.FusionDictionary.WeightedString; import com.android.inputmethod.latin.makedict.Word; +import java.util.ArrayList; + public class Info extends Dicttool.Command { public static final String COMMAND = "info"; @@ -59,14 +62,55 @@ public class Info extends Dicttool.Command { + " whitelist entries)"); } + private static void showWordInfo(final FusionDictionary dict, final String word) { + final CharGroup group = dict.findWordInTree(dict.mRoot, word); + if (null == group) { + System.out.println(word + " is not in the dictionary"); + return; + } + System.out.println("Word: " + word); + System.out.println(" Freq: " + group.getFrequency()); + if (group.getIsNotAWord()) { + System.out.println(" Is not a word"); + } + if (group.getIsBlacklistEntry()) { + System.out.println(" Is a blacklist entry"); + } + final ArrayList shortcutTargets = group.getShortcutTargets(); + if (null == shortcutTargets || shortcutTargets.isEmpty()) { + System.out.println(" No shortcuts"); + } else { + for (final WeightedString shortcutTarget : shortcutTargets) { + System.out.println(" Shortcut target: " + shortcutTarget.mWord + " (" + + (FormatSpec.SHORTCUT_WHITELIST_FREQUENCY == shortcutTarget.mFrequency + ? "whitelist" : shortcutTarget.mFrequency) + ")"); + } + } + final ArrayList bigrams = group.getBigrams(); + if (null == bigrams || bigrams.isEmpty()) { + System.out.println(" No bigrams"); + } else { + for (final WeightedString bigram : bigrams) { + System.out.println(" Bigram: " + bigram.mWord + " (" + bigram.mFrequency + ")"); + } + } + } + @Override public void run() { if (mArgs.length < 1) { throw new RuntimeException("Not enough arguments for command " + COMMAND); } final String filename = mArgs[0]; + final boolean hasWordArguments = (1 == mArgs.length); final FusionDictionary dict = BinaryDictOffdeviceUtils.getDictionary(filename, - true /* report */); - showInfo(dict); + hasWordArguments /* report */); + if (hasWordArguments) { + showInfo(dict); + } else { + for (int i = 1; i < mArgs.length; ++i) { + showWordInfo(dict, mArgs[i]); + } + } } }