]> gitweb.fperrin.net Git - Dictionary.git/commitdiff
go
authorThad Hughes <thad.hughes@gmail.com>
Wed, 5 Jan 2011 23:00:55 +0000 (15:00 -0800)
committerThad Hughes <thad.hughes@gmail.com>
Wed, 5 Jan 2011 23:00:55 +0000 (15:00 -0800)
images/icon.odg
images/icon.png
res/drawable/icon.png
src/com/hughes/android/dictionary/DictionaryActivity.java
src/com/hughes/android/dictionary/engine/Dictionary.java
src/com/hughes/android/dictionary/engine/EntryTypeName.java
src/com/hughes/android/dictionary/engine/Index.java
src/com/hughes/android/dictionary/engine/PairEntry.java
src/com/hughes/android/dictionary/engine/RowBase.java

index a3d19d6332576897a54d2432cb0d179fb79cceaa..d81940b28ead48c00b9a92c25db8088e2a5ef421 100644 (file)
Binary files a/images/icon.odg and b/images/icon.odg differ
index dc1df50d0fcb0c0ad9e82a36cb7679f78740489c..9266d93ec2ef6272eac8abf7dc053631162c47b1 100644 (file)
Binary files a/images/icon.png and b/images/icon.png differ
index dc1df50d0fcb0c0ad9e82a36cb7679f78740489c..9266d93ec2ef6272eac8abf7dc053631162c47b1 100644 (file)
Binary files a/res/drawable/icon.png and b/res/drawable/icon.png differ
index 666339838b45c1455cd2819a000b40c4f9bfc610..5e251b7f234cc1c207fa9f1c79f3b591d808a04f 100644 (file)
@@ -80,6 +80,8 @@ public class DictionaryActivity extends ListActivity {
 \r
   // Visible for testing.\r
   ListAdapter indexAdapter = null;\r
+  \r
+  final SearchTextWatcher searchTextWatcher = new SearchTextWatcher();\r
 \r
   //private Vibrator vibrator = null;\r
   \r
@@ -127,6 +129,14 @@ public class DictionaryActivity extends ListActivity {
       dictionary = new Dictionary(dictRaf); \r
     } catch (Exception e) {\r
       Log.e(LOG, "Unable to load dictionary.", e);\r
+      if (dictRaf != null) {\r
+        try {\r
+          dictRaf.close();\r
+        } catch (IOException e1) {\r
+          Log.e(LOG, "Unable to close dictRaf.", e1);\r
+        }\r
+        dictRaf = null;\r
+      }\r
       Toast.makeText(this, getString(R.string.invalidDictionary, "", e.getMessage()), Toast.LENGTH_LONG);\r
       startActivity(DictionaryEditActivity.getIntent(dictIndex));\r
       finish();\r
@@ -137,7 +147,9 @@ public class DictionaryActivity extends ListActivity {
     searchExecutor.execute(new Runnable() {\r
       public void run() {\r
         final long startMillis = System.currentTimeMillis();\r
+        Log.d(LOG, "Constructing index for lang=" + index.sortLanguage.getSymbol());\r
         for (final Index index : dictionary.indices) {\r
+          Log.d(LOG, "Starting collator load for lang=" + index.sortLanguage.getSymbol());\r
           final com.ibm.icu.text.Collator c = index.sortLanguage.getCollator();\r
           if (c.compare("pre-print", "preppy") >= 0) {\r
             Log.e(LOG, c.getClass()\r
@@ -158,7 +170,7 @@ public class DictionaryActivity extends ListActivity {
     langButton = (Button) findViewById(R.id.LangButton);\r
     \r
     searchText.requestFocus();\r
-    searchText.addTextChangedListener(new SearchTextWatcher());\r
+    searchText.addTextChangedListener(searchTextWatcher);\r
     searchText.setText(prefs.getString(C.SEARCH_TOKEN, ""));\r
     Log.d(LOG, "Trying to restore searchText=" + searchText.getText());\r
     \r
@@ -237,6 +249,9 @@ public class DictionaryActivity extends ListActivity {
   @Override\r
   protected void onDestroy() {\r
     super.onDestroy();\r
+    if (dictRaf == null) {\r
+      return;\r
+    }\r
     setDictionaryPrefs(this, dictIndex, indexIndex, searchText.getText().toString());\r
     try {\r
       dictRaf.close();\r
@@ -292,11 +307,12 @@ public class DictionaryActivity extends ListActivity {
       // Down\r
       destIndexEntry = Math.min(tokenRow.referenceIndex + 1, index.sortedIndexEntries.size());\r
     }\r
-    \r
     final Index.IndexEntry dest = index.sortedIndexEntries.get(destIndexEntry);\r
-    searchText.setText(dest.token);\r
     Log.d(LOG, "onUpDownButton, destIndexEntry=" + dest.token);\r
-    //jumpToRow(index.sortedIndexEntries.get(destIndexEntry).startRow);\r
+    searchText.removeTextChangedListener(searchTextWatcher);\r
+    searchText.setText(dest.token);\r
+    jumpToRow(index.sortedIndexEntries.get(destIndexEntry).startRow);\r
+    searchText.removeTextChangedListener(searchTextWatcher);\r
   }\r
 \r
   // --------------------------------------------------------------------------\r
@@ -597,6 +613,7 @@ public class DictionaryActivity extends ListActivity {
 \r
   void onSearchTextChange(final String text) {\r
     if (!searchText.isFocused()) {\r
+      Log.d(LOG, "searchText changed without focus, doing nothing.");\r
       return;\r
     }\r
     Log.d(LOG, "onSearchTextChange: " + text);    \r
index f85af818209fae3ac86d23d084bc1ebf777a61fb..18f1c9afa8f889a41a09d4d6ca7c4846f1fb2001 100644 (file)
@@ -79,6 +79,7 @@ public class Dictionary implements RAFSerializable<Dictionary> {
     public void print(final PrintStream out) {
       out.println("dictInfo=" + dictInfo);
       for (final Index index : indices) {
+        out.printf("Index: %s %s\n", index.shortName, index.longName);
         index.print(out);
         out.println();
       }
index 008da6a2dc2f97c4b473c3f0ac5dd96e6eee16d3..c65db05bcf104249a0d611bd54e3e0dff6d77382 100644 (file)
@@ -3,6 +3,10 @@ package com.hughes.android.dictionary.engine;
 
 public enum EntryTypeName {
 
+  WIKTIONARY_TITLE_ONE_WORD(0),
+  WIKTIONARY_MEANING_ONE_WORD(0),
+  WIKTIONARY_TRANSLATION_ONE_WORD(0),
+  
   NOUN(0),
   VERB(0),
   ADJ(0),
@@ -11,18 +15,22 @@ public enum EntryTypeName {
   MULTIROW_HEAD_ONE_WORD(0),
   MULTIROW_TAIL_ONE_WORD(0),
 
+  WIKTIONARY_TITLE_MULTI_WORD(0),
+  WIKTIONARY_MEANING_MULTI_WORD(0),
+  WIKTIONARY_FORM_OF(0),
+  WIKTIONARY_EXAMPLE_HEADWORDS(0),
   TWO_WORDS(0),
   THREE_WORDS(0),
   FOUR_WORDS(0),
   FIVE_OR_MORE_WORDS(0),
+  WIKTIONARY_EXAMPLE_OTHER_WORDS(0),
   
-  WIKTIONARY_DE_MAIN(0),
   MULTIROW_HEAD_MANY_WORDS(0),
   MULTIROW_TAIL_MANY_WORDS(0),
   PART_OF_HYPHENATED(0),
   BRACKETED(0),
   PARENTHESIZED(0),
-  SEE_ALSO(0),
+  SEE_ALSO(0), 
   ;
 
   final int nameResId;
index 7cee7460c8e2f90702aaf98ca66ca8bcbb7171b2..d0d2404a02bba315ed6b7fc65bdedc4e600b7de2 100644 (file)
@@ -231,5 +231,19 @@ public final class Index implements RAFSerializable<Index> {
     return result;
   }
 
+  /*
+  public int tokenRowBinarySearch(final int rowIndex) {
+    int start = 0;
+    int end = sortedIndexEntries.size();
+    while (start < end) {
+      final int mid = (start + end) / 2;
+      final int midRowIndex = sortedIndexEntries.get(mid).startRow;
+      if (midRowIndex == rowIndex) {
+        return mid;
+      }
+      if ()
+    }
+  }
+  */
 
 }
\ No newline at end of file
index 7d30310bb9572bc3ac9072a4d2034524b7dafd4b..5406ed5b2468ff9d9393c79ea738e0e36a953fd4 100644 (file)
@@ -7,7 +7,7 @@ import java.io.RandomAccessFile;
 import com.hughes.util.raf.RAFSerializable;
 import com.hughes.util.raf.RAFSerializer;
 
-public class PairEntry extends Entry implements RAFSerializable<PairEntry> {
+public class PairEntry extends Entry implements RAFSerializable<PairEntry>, Comparable<PairEntry> {
   
   public static final class Pair {
     
@@ -18,7 +18,11 @@ public class PairEntry extends Entry implements RAFSerializable<PairEntry> {
       this.lang1 = lang1;
       this.lang2 = lang2;
     }
-    
+
+    public Pair(final String lang1, final String lang2, final boolean swap) {
+      this(swap ? lang2 : lang1, swap ? lang1 : lang2);
+    }
+
     public String toString() {
       return lang1 + " :: " + lang2;
     }
@@ -27,6 +31,15 @@ public class PairEntry extends Entry implements RAFSerializable<PairEntry> {
       return lang1 + "\t" + lang2;
     }
 
+    public String get(int i) {
+      if (i == 0) {
+        return lang1;
+      } else if (i == 1) {
+        return lang2;
+      }
+      throw new IllegalArgumentException();
+    }
+
   }
   
   public final Pair[] pairs;
@@ -35,6 +48,10 @@ public class PairEntry extends Entry implements RAFSerializable<PairEntry> {
     this.pairs = pairs;
   }
   
+  public PairEntry(final String lang1, final String lang2) {
+    this.pairs = new Pair[] { new Pair(lang1, lang2) };
+  }
+  
   public PairEntry(final RandomAccessFile raf) throws IOException {
     pairs = new Pair[raf.readInt()];
     for (int i = 0; i < pairs.length; ++i) {
@@ -92,27 +109,41 @@ public class PairEntry extends Entry implements RAFSerializable<PairEntry> {
     @Override
     public String getRawText(boolean compact) {
       final PairEntry pairEntry = getEntry();
-      if (compact) {
-        return pairEntry.pairs[0].toStringTab();
-      }
-      final StringBuilder builder = new StringBuilder();
-      for (int i = 0; i < pairEntry.pairs.length; ++i) {
-        if (i > 0) {
-          builder.append(" | ");
-        }
-        builder.append(pairEntry.pairs[i].lang1);
+      return pairEntry.getRawText(compact);
+    }
+  
+  }
+
+  public String getRawText(final boolean compact) {
+    if (compact) {
+      return this.pairs[0].toStringTab();
+    }
+    final StringBuilder builder = new StringBuilder();
+    for (int i = 0; i < this.pairs.length; ++i) {
+      if (i > 0) {
+        builder.append(" | ");
       }
-      builder.append("\t");
-      for (int i = 0; i < pairEntry.pairs.length; ++i) {
-        if (i > 0) {
-          builder.append(" | ");
-        }
-        builder.append(pairEntry.pairs[i].lang2);
+      builder.append(this.pairs[i].lang1);
+    }
+    builder.append("\t");
+    for (int i = 0; i < this.pairs.length; ++i) {
+      if (i > 0) {
+        builder.append(" | ");
       }
-      return builder.toString();
+      builder.append(this.pairs[i].lang2);
     }
+    return builder.toString();
   }
 
-
+  @Override
+  public int compareTo(final PairEntry that) {
+    return this.getRawText(false).compareTo(that.getRawText(false));
+  }
+  
+  @Override
+  public String toString() {
+    return getRawText(false);
+  }
+  
 
 }
index 5491b4e0f9a99026446d8bac53e2db233c74a55d..7ac86d0bc9e502dd59ba840891a2822937ea5d80 100644 (file)
@@ -41,6 +41,7 @@ public abstract class RowBase extends IndexedObject {
   public TokenRow getTokenRow(final boolean search) {
     if (tokenRow == null && search) {
       int r = index() - 1;
+      int rUp = index() + 1;
       while (r >= 0) {
         final RowBase row = index.rows.get(r);
         final TokenRow candidate = row.getTokenRow(false);
@@ -50,6 +51,17 @@ public abstract class RowBase extends IndexedObject {
           }
           break;
         }
+        if (rUp < index.rows.size()) {
+          final RowBase rowUp = index.rows.get(rUp);
+          final TokenRow candidateUp = rowUp.getTokenRow(false);
+          if (candidateUp != null) {
+            for (--rUp; rUp >= index(); --rUp) {
+              index.rows.get(rUp).setTokenRow(candidateUp);
+            }
+            break;
+          }
+          rUp++;
+        }
         --r;
       }
       assert tokenRow != null;