diff --git a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtils.java b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtils.java index 7a2fde8a0..4573fa6f7 100644 --- a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtils.java +++ b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtils.java @@ -17,6 +17,11 @@ package com.android.inputmethod.latin.dicttool; import com.android.inputmethod.latin.makedict.BinaryDictInputOutput; +import com.android.inputmethod.latin.makedict.BinaryDictInputOutput.ByteBufferWrapper; +import com.android.inputmethod.latin.makedict.FusionDictionary; +import com.android.inputmethod.latin.makedict.UnsupportedFormatException; + +import org.xml.sax.SAXException; import java.io.File; import java.io.BufferedInputStream; @@ -26,8 +31,13 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.nio.ByteBuffer; +import java.nio.channels.FileChannel; +import java.nio.channels.FileChannel.MapMode; import java.util.ArrayList; +import javax.xml.parsers.ParserConfigurationException; + /** * Class grouping utilities for offline dictionary making. * @@ -141,4 +151,54 @@ public final class BinaryDictOffdeviceUtils { return null; } } + + static void crash(final String filename, final Exception e) { + throw new RuntimeException("Can't read file " + filename, e); + } + + static FusionDictionary getDictionary(final String filename, final boolean report) { + final File file = new File(filename); + if (report) { + System.out.println("Dictionary : " + file.getAbsolutePath()); + System.out.println("Size : " + file.length() + " bytes"); + } + try { + if (XmlDictInputOutput.isXmlUnigramDictionary(filename)) { + if (report) System.out.println("Format : XML unigram list"); + return XmlDictInputOutput.readDictionaryXml( + new BufferedInputStream(new FileInputStream(file)), + null /* shortcuts */, null /* bigrams */); + } else if (CombinedInputOutput.isCombinedDictionary(filename)) { + if (report) System.out.println("Format : Combined format"); + return CombinedInputOutput.readDictionaryCombined( + new BufferedInputStream(new FileInputStream(file))); + } else { + final DecoderChainSpec decodedSpec = getRawBinaryDictionaryOrNull(file); + if (null == decodedSpec) { + crash(filename, new RuntimeException( + filename + " does not seem to be a dictionary file")); + } else { + final FileInputStream inStream = new FileInputStream(decodedSpec.mFile); + final ByteBuffer buffer = inStream.getChannel().map( + FileChannel.MapMode.READ_ONLY, 0, decodedSpec.mFile.length()); + if (report) { + System.out.println("Format : Binary dictionary format"); + System.out.println("Packaging : " + decodedSpec.describeChain()); + System.out.println("Uncompressed size : " + decodedSpec.mFile.length()); + } + return BinaryDictInputOutput.readDictionaryBinary( + new BinaryDictInputOutput.ByteBufferWrapper(buffer), null); + } + } + } catch (IOException e) { + crash(filename, e); + } catch (SAXException e) { + crash(filename, e); + } catch (ParserConfigurationException e) { + crash(filename, e); + } catch (UnsupportedFormatException e) { + crash(filename, e); + } + return null; + } } diff --git a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Compress.java b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Compress.java index 072de5c01..8c159201a 100644 --- a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Compress.java +++ b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Compress.java @@ -45,11 +45,13 @@ public class Compress { public Compressor() { } + @Override public String getHelp() { return COMMAND + " : " + "Compresses a file using gzip compression"; } + @Override public void run() throws IOException { if (mArgs.length > 2) { throw new RuntimeException("Too many arguments for command " + COMMAND); @@ -71,11 +73,13 @@ public class Compress { public Uncompressor() { } + @Override public String getHelp() { return COMMAND + " : " + "Uncompresses a file compressed with gzip compression"; } + @Override public void run() throws IOException { if (mArgs.length > 2) { throw new RuntimeException("Too many arguments for command " + COMMAND); 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 be4b2b881..98a4e8fa3 100644 --- a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Info.java +++ b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Info.java @@ -16,25 +16,11 @@ package com.android.inputmethod.latin.dicttool; -import com.android.inputmethod.latin.dicttool.BinaryDictOffdeviceUtils.DecoderChainSpec; -import com.android.inputmethod.latin.makedict.BinaryDictInputOutput; import com.android.inputmethod.latin.makedict.FormatSpec; import com.android.inputmethod.latin.makedict.FusionDictionary; import com.android.inputmethod.latin.makedict.FusionDictionary.WeightedString; -import com.android.inputmethod.latin.makedict.UnsupportedFormatException; import com.android.inputmethod.latin.makedict.Word; -import org.xml.sax.SAXException; - -import java.io.BufferedInputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.nio.ByteBuffer; -import java.nio.channels.FileChannel; - -import javax.xml.parsers.ParserConfigurationException; - public class Info extends Dicttool.Command { public static final String COMMAND = "info"; @@ -46,52 +32,6 @@ public class Info extends Dicttool.Command { return COMMAND + ": prints various information about a dictionary file"; } - private static void crash(final String filename, final Exception e) { - throw new RuntimeException("Can't read file " + filename, e); - } - - private static FusionDictionary getDictionary(final String filename) { - final File file = new File(filename); - System.out.println("Dictionary : " + file.getAbsolutePath()); - System.out.println("Size : " + file.length() + " bytes"); - try { - if (XmlDictInputOutput.isXmlUnigramDictionary(filename)) { - System.out.println("Format : XML unigram list"); - return XmlDictInputOutput.readDictionaryXml( - new BufferedInputStream(new FileInputStream(file)), - null /* shortcuts */, null /* bigrams */); - } else if (CombinedInputOutput.isCombinedDictionary(filename)) { - System.out.println("Format : Combined format"); - return CombinedInputOutput.readDictionaryCombined( - new BufferedInputStream(new FileInputStream(file))); - } else { - final DecoderChainSpec decodedSpec = - BinaryDictOffdeviceUtils.getRawBinaryDictionaryOrNull(file); - if (null == decodedSpec) { - crash(filename, new RuntimeException( - filename + " does not seem to be a dictionary file")); - } - final FileInputStream inStream = new FileInputStream(decodedSpec.mFile); - final ByteBuffer buffer = inStream.getChannel().map( - FileChannel.MapMode.READ_ONLY, 0, decodedSpec.mFile.length()); - System.out.println("Format : Binary dictionary format"); - System.out.println("Packaging : " + decodedSpec.describeChain()); - System.out.println("Uncompressed size : " + decodedSpec.mFile.length()); - return BinaryDictInputOutput.readDictionaryBinary( - new BinaryDictInputOutput.ByteBufferWrapper(buffer), null); - } - } catch (IOException e) { - crash(filename, e); - } catch (SAXException e) { - crash(filename, e); - } catch (ParserConfigurationException e) { - crash(filename, e); - } catch (UnsupportedFormatException e) { - crash(filename, e); - } - return null; - } - private static void showInfo(final FusionDictionary dict) { System.out.println("Header attributes :"); System.out.print(dict.mOptions.toString(2)); @@ -125,7 +65,8 @@ public class Info extends Dicttool.Command { throw new RuntimeException("Not enough arguments for command " + COMMAND); } final String filename = mArgs[0]; - final FusionDictionary dict = getDictionary(filename); + final FusionDictionary dict = BinaryDictOffdeviceUtils.getDictionary(filename, + true /* report */); showInfo(dict); } } diff --git a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Makedict.java b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Makedict.java index c004cfbe4..808e1d4c8 100644 --- a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Makedict.java +++ b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Makedict.java @@ -29,10 +29,12 @@ public class Makedict extends Dicttool.Command { public Makedict() { } + @Override public String getHelp() { return DictionaryMaker.Arguments.getHelp(); } + @Override public void run() throws FileNotFoundException, IOException, ParserConfigurationException, SAXException, UnsupportedFormatException { DictionaryMaker.main(mArgs); diff --git a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/XmlDictInputOutput.java b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/XmlDictInputOutput.java index d8d94a13c..1fd2cba7a 100644 --- a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/XmlDictInputOutput.java +++ b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/XmlDictInputOutput.java @@ -56,8 +56,6 @@ public class XmlDictInputOutput { private static final String WORD_ATTR = "word"; private static final String NOT_A_WORD_ATTR = "not_a_word"; - private static final int SHORTCUT_ONLY_DEFAULT_FREQ = 1; - private static final String OPTIONS_KEY = "options"; private static final String GERMAN_UMLAUT_PROCESSING_OPTION = "german_umlaut_processing"; private static final String FRENCH_LIGATURE_PROCESSING_OPTION = "french_ligature_processing"; @@ -67,12 +65,9 @@ public class XmlDictInputOutput { */ static private class UnigramHandler extends DefaultHandler { // Parser states - private static final int NONE = 0; private static final int START = 1; private static final int WORD = 2; - private static final int BIGRAM = 4; - private static final int END = 5; - private static final int UNKNOWN = 6; + private static final int UNKNOWN = 3; FusionDictionary mDictionary; int mState; // the state of the parser