From: Thad Hughes Date: Wed, 5 Jan 2011 23:00:55 +0000 (-0800) Subject: go X-Git-Url: http://gitweb.fperrin.net/?p=Dictionary.git;a=commitdiff_plain;h=6a6d3ea1aec31eb2f7ba0a3fd727b80c96a67868 go --- diff --git a/images/icon.odg b/images/icon.odg index a3d19d6..d81940b 100644 Binary files a/images/icon.odg and b/images/icon.odg differ diff --git a/images/icon.png b/images/icon.png index dc1df50..9266d93 100644 Binary files a/images/icon.png and b/images/icon.png differ diff --git a/res/drawable/icon.png b/res/drawable/icon.png index dc1df50..9266d93 100644 Binary files a/res/drawable/icon.png and b/res/drawable/icon.png differ diff --git a/src/com/hughes/android/dictionary/DictionaryActivity.java b/src/com/hughes/android/dictionary/DictionaryActivity.java index 6663398..5e251b7 100644 --- a/src/com/hughes/android/dictionary/DictionaryActivity.java +++ b/src/com/hughes/android/dictionary/DictionaryActivity.java @@ -80,6 +80,8 @@ public class DictionaryActivity extends ListActivity { // Visible for testing. ListAdapter indexAdapter = null; + + final SearchTextWatcher searchTextWatcher = new SearchTextWatcher(); //private Vibrator vibrator = null; @@ -127,6 +129,14 @@ public class DictionaryActivity extends ListActivity { dictionary = new Dictionary(dictRaf); } catch (Exception e) { Log.e(LOG, "Unable to load dictionary.", e); + if (dictRaf != null) { + try { + dictRaf.close(); + } catch (IOException e1) { + Log.e(LOG, "Unable to close dictRaf.", e1); + } + dictRaf = null; + } Toast.makeText(this, getString(R.string.invalidDictionary, "", e.getMessage()), Toast.LENGTH_LONG); startActivity(DictionaryEditActivity.getIntent(dictIndex)); finish(); @@ -137,7 +147,9 @@ public class DictionaryActivity extends ListActivity { searchExecutor.execute(new Runnable() { public void run() { final long startMillis = System.currentTimeMillis(); + Log.d(LOG, "Constructing index for lang=" + index.sortLanguage.getSymbol()); for (final Index index : dictionary.indices) { + Log.d(LOG, "Starting collator load for lang=" + index.sortLanguage.getSymbol()); final com.ibm.icu.text.Collator c = index.sortLanguage.getCollator(); if (c.compare("pre-print", "preppy") >= 0) { Log.e(LOG, c.getClass() @@ -158,7 +170,7 @@ public class DictionaryActivity extends ListActivity { langButton = (Button) findViewById(R.id.LangButton); searchText.requestFocus(); - searchText.addTextChangedListener(new SearchTextWatcher()); + searchText.addTextChangedListener(searchTextWatcher); searchText.setText(prefs.getString(C.SEARCH_TOKEN, "")); Log.d(LOG, "Trying to restore searchText=" + searchText.getText()); @@ -237,6 +249,9 @@ public class DictionaryActivity extends ListActivity { @Override protected void onDestroy() { super.onDestroy(); + if (dictRaf == null) { + return; + } setDictionaryPrefs(this, dictIndex, indexIndex, searchText.getText().toString()); try { dictRaf.close(); @@ -292,11 +307,12 @@ public class DictionaryActivity extends ListActivity { // Down destIndexEntry = Math.min(tokenRow.referenceIndex + 1, index.sortedIndexEntries.size()); } - final Index.IndexEntry dest = index.sortedIndexEntries.get(destIndexEntry); - searchText.setText(dest.token); Log.d(LOG, "onUpDownButton, destIndexEntry=" + dest.token); - //jumpToRow(index.sortedIndexEntries.get(destIndexEntry).startRow); + searchText.removeTextChangedListener(searchTextWatcher); + searchText.setText(dest.token); + jumpToRow(index.sortedIndexEntries.get(destIndexEntry).startRow); + searchText.removeTextChangedListener(searchTextWatcher); } // -------------------------------------------------------------------------- @@ -597,6 +613,7 @@ public class DictionaryActivity extends ListActivity { void onSearchTextChange(final String text) { if (!searchText.isFocused()) { + Log.d(LOG, "searchText changed without focus, doing nothing."); return; } Log.d(LOG, "onSearchTextChange: " + text); diff --git a/src/com/hughes/android/dictionary/engine/Dictionary.java b/src/com/hughes/android/dictionary/engine/Dictionary.java index f85af81..18f1c9a 100644 --- a/src/com/hughes/android/dictionary/engine/Dictionary.java +++ b/src/com/hughes/android/dictionary/engine/Dictionary.java @@ -79,6 +79,7 @@ public class Dictionary implements RAFSerializable { 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(); } diff --git a/src/com/hughes/android/dictionary/engine/EntryTypeName.java b/src/com/hughes/android/dictionary/engine/EntryTypeName.java index 008da6a..c65db05 100644 --- a/src/com/hughes/android/dictionary/engine/EntryTypeName.java +++ b/src/com/hughes/android/dictionary/engine/EntryTypeName.java @@ -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; diff --git a/src/com/hughes/android/dictionary/engine/Index.java b/src/com/hughes/android/dictionary/engine/Index.java index 7cee746..d0d2404 100644 --- a/src/com/hughes/android/dictionary/engine/Index.java +++ b/src/com/hughes/android/dictionary/engine/Index.java @@ -231,5 +231,19 @@ public final class Index implements RAFSerializable { 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 diff --git a/src/com/hughes/android/dictionary/engine/PairEntry.java b/src/com/hughes/android/dictionary/engine/PairEntry.java index 7d30310..5406ed5 100644 --- a/src/com/hughes/android/dictionary/engine/PairEntry.java +++ b/src/com/hughes/android/dictionary/engine/PairEntry.java @@ -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 { +public class PairEntry extends Entry implements RAFSerializable, Comparable { public static final class Pair { @@ -18,7 +18,11 @@ public class PairEntry extends Entry implements RAFSerializable { 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 { 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 { 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 { @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); + } + } diff --git a/src/com/hughes/android/dictionary/engine/RowBase.java b/src/com/hughes/android/dictionary/engine/RowBase.java index 5491b4e..7ac86d0 100644 --- a/src/com/hughes/android/dictionary/engine/RowBase.java +++ b/src/com/hughes/android/dictionary/engine/RowBase.java @@ -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;