aboutsummaryrefslogtreecommitdiffstats
path: root/tools/dicttool/src
diff options
context:
space:
mode:
authorJean Chalard <jchalard@google.com>2012-10-25 15:53:21 +0900
committerJean Chalard <jchalard@google.com>2012-10-25 18:19:10 +0900
commitf1d35ac5dc0cca2b357940cab1001cadca37bcb4 (patch)
tree438b21fa339a78dd83176929c4dd170005271293 /tools/dicttool/src
parent3862b9e8197e3fc5eeb615453066752f49d62dc1 (diff)
downloadlatinime-f1d35ac5dc0cca2b357940cab1001cadca37bcb4.tar.gz
latinime-f1d35ac5dc0cca2b357940cab1001cadca37bcb4.tar.xz
latinime-f1d35ac5dc0cca2b357940cab1001cadca37bcb4.zip
Implement a part of the "info" command (A5)
Bug: 7388857 Change-Id: Id1bba7a33ab6195d5711bebb1df5c18c9c08925c
Diffstat (limited to 'tools/dicttool/src')
-rw-r--r--tools/dicttool/src/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtils.java12
-rw-r--r--tools/dicttool/src/com/android/inputmethod/latin/dicttool/Info.java64
2 files changed, 73 insertions, 3 deletions
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 09717eb56..7a2fde8a0 100644
--- a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtils.java
+++ b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtils.java
@@ -39,8 +39,8 @@ public final class BinaryDictOffdeviceUtils {
private final static String PREFIX = "dicttool";
private final static String SUFFIX = ".tmp";
- public final static String COMPRESSION = "compression";
- public final static String ENCRYPTION = "encryption";
+ public final static String COMPRESSION = "compressed";
+ public final static String ENCRYPTION = "encrypted";
public static class DecoderChainSpec {
ArrayList<String> mDecoderSpec = new ArrayList<String>();
@@ -49,6 +49,14 @@ public final class BinaryDictOffdeviceUtils {
mDecoderSpec.add(stepDescription);
return this;
}
+ public String describeChain() {
+ final StringBuilder s = new StringBuilder("raw");
+ for (final String step : mDecoderSpec) {
+ s.append(" > ");
+ s.append(step);
+ }
+ return s.toString();
+ }
}
public static void copy(final InputStream input, final OutputStream output) throws IOException {
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 e59261706..bafde627d 100644
--- a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Info.java
+++ b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Info.java
@@ -16,6 +16,22 @@
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.FusionDictionary;
+import com.android.inputmethod.latin.makedict.UnsupportedFormatException;
+
+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";
@@ -26,11 +42,57 @@ public class Info extends Dicttool.Command {
return "info <filename>: 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());
+ 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;
+ }
+
public void run() {
// TODO: implement this
if (mArgs.length < 1) {
throw new RuntimeException("Not enough arguments for command " + COMMAND);
}
- System.out.println("Not implemented yet");
+ final String filename = mArgs[0];
+ final FusionDictionary dict = getDictionary(filename);
}
}