summaryrefslogtreecommitdiff
path: root/src/ui
diff options
context:
space:
mode:
authorkr.angelov <kr.angelov@gmail.com>2013-10-23 15:10:13 +0000
committerkr.angelov <kr.angelov@gmail.com>2013-10-23 15:10:13 +0000
commit10fa2baa56a4166d75a3807198b17c2b34db77de (patch)
tree74004dc0d09df3617c6b6013c810ce10a5a1044b /src/ui
parent0882396875e26995ef996890e022acc3662eb70f (diff)
the first version of the Android's morphology browser
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/android/res/layout/lexical_item.xml12
-rw-r--r--src/ui/android/res/xml/inflection_bg.xml615
-rw-r--r--src/ui/android/res/xml/inflection_en.xml84
-rw-r--r--src/ui/android/src/org/grammaticalframework/ui/android/Language.java8
-rw-r--r--src/ui/android/src/org/grammaticalframework/ui/android/LexicalEntryActivity.java200
-rw-r--r--src/ui/android/src/org/grammaticalframework/ui/android/Translator.java16
6 files changed, 901 insertions, 34 deletions
diff --git a/src/ui/android/res/layout/lexical_item.xml b/src/ui/android/res/layout/lexical_item.xml
index 0c56b6730..49f090a26 100644
--- a/src/ui/android/res/layout/lexical_item.xml
+++ b/src/ui/android/res/layout/lexical_item.xml
@@ -3,7 +3,7 @@
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageView
- android:id="@+id/icon"
+ android:id="@+id/arrow"
android:layout_width="30dp"
android:layout_height="30dp"
android:contentDescription="@string/open_image"
@@ -14,8 +14,14 @@
<TextView
android:id="@+id/lexical_desc"
android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:layout_toRightOf="@+id/icon"
+ android:layout_height="wrap_content"
+ android:layout_toRightOf="@id/arrow"
android:paddingLeft="10dp"
android:textSize="25sp"/>
+
+ <WebView
+ android:id="@+id/lexical_inflection"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_below="@id/lexical_desc"/>
</RelativeLayout> \ No newline at end of file
diff --git a/src/ui/android/res/xml/inflection_bg.xml b/src/ui/android/res/xml/inflection_bg.xml
new file mode 100644
index 000000000..6d666fddf
--- /dev/null
+++ b/src/ui/android/res/xml/inflection_bg.xml
@@ -0,0 +1,615 @@
+<inflection_temlate>
+ <noun>
+ <h1>Съществително</h1>
+
+ <table class="forms-table" rules="all">
+ <tr>
+ <th rowspan="3">ед.ч.</th>
+ <th>нечленувано</th>
+ <td><form>s (NF Sg Indef)</form></td>
+ </tr>
+ <tr>
+ <th>членувано</th>
+ <td><form>s (NF Sg Def)</form></td>
+ </tr>
+ <tr>
+ <th>пълен член</th>
+ <td><form>s NFSgDefNom</form></td>
+ </tr>
+ <tr>
+ <th rowspan="2">мн.ч.</th>
+ <th>нечленувано</th>
+ <td><form>s (NF Pl Indef)</form></td>
+ </tr>
+ <tr>
+ <th>членувано</th>
+ <td><form>s (NF Pl Def)</form></td>
+ </tr>
+ <tr>
+ <th colspan="2">звателна форма</th>
+ <td><form>s NFVocative</form></td>
+ </tr>
+ <tr>
+ <th colspan="2">бройна форма</th>
+ <td><form>s NFPlCount</form></td>
+ </tr>
+ </table>
+
+ <h1>Прилагателно</h1>
+ <table class="forms-table" rules="all">
+ <tr>
+ <th rowspan="7">ед.ч.</th>
+ <th rowspan="3">м.р.</th>
+ <th>нечленувано</th>
+ <td><form>rel (ASg Masc Indef)</form></td>
+ </tr>
+ <tr>
+ <th>непълен член</th>
+ <td><form>rel (ASg Masc Def)</form></td>
+ </tr>
+ <tr>
+ <th>пълен член</th>
+ <td><form>rel ASgMascDefNom</form></td>
+ </tr>
+ <tr>
+ <th rowspan="2">ж.р.</th>
+ <th>нечленувано</th>
+ <td><form>rel (ASg Fem Indef)</form></td>
+ </tr>
+ <tr>
+ <th>членувано</th>
+ <td><form>rel (ASg Fem Def)</form></td>
+ </tr>
+ <tr>
+ <th rowspan="2">ср.р.</th>
+ <th>нечленувано</th>
+ <td><form>rel (ASg Neut Indef)</form></td>
+ </tr>
+ <tr>
+ <th>членувано</th>
+ <td><form>rel (ASg Neut Def)</form></td>
+ </tr>
+ <tr>
+ <th rowspan="2" colspan="2">мн.ч.</th>
+ <th>нечленувано</th>
+ <td><form>rel (APl Indef)</form></td>
+ </tr>
+ <tr>
+ <th>членувано</th>
+ <td><form>rel (APl Def)</form></td>
+ </tr>
+ </table>
+ </noun>
+ <adjective>
+ <h1>Прилагателно</h1>
+ <table class="forms-table" rules="all">
+ <tr>
+ <th rowspan="7">ед.ч.</th>
+ <th rowspan="3">м.р.</th>
+ <th>нечленувано</th>
+ <td><form>s (ASg Masc Indef)</form></td>
+ </tr>
+ <tr>
+ <th>непълен член</th>
+ <td><form>s (ASg Masc Def)</form></td>
+ </tr>
+ <tr>
+ <th>пълен член</th>
+ <td><form>s ASgMascDefNom</form></td>
+ </tr>
+ <tr>
+ <th rowspan="2">ж.р.</th>
+ <th>нечленувано</th>
+ <td><form>s (ASg Fem Indef)</form></td>
+ </tr>
+ <tr>
+ <th>членувано</th>
+ <td><form>s (ASg Fem Def)</form></td>
+ </tr>
+ <tr>
+ <th rowspan="2">ср.р.</th>
+ <th>нечленувано</th>
+ <td><form>s (ASg Neut Indef)</form></td>
+ </tr>
+ <tr>
+ <th>членувано</th>
+ <td><form>s (ASg Neut Def)</form></td>
+ </tr>
+ <tr>
+ <th rowspan="2" colspan="2">мн.ч.</th>
+ <th>нечленувано</th>
+ <td><form>s (APl Indef)</form></td>
+ </tr>
+ <tr>
+ <th>членувано</th>
+ <td><form>s (APl Def)</form></td>
+ </tr>
+ </table>
+
+ <h1>Наречие</h1>
+ <p><form>adv</form></p>
+ </adjective>
+ <adverb>
+ <h1>Наречие</h1>
+ <p><form>s</form></p>
+ </adverb>
+ <prep>
+ <h1>Предлог</h1>
+ <p><form>s</form></p>
+ </prep>
+ <verb>
+ <h1>Глагол от несвършен вид</h1>
+
+ <h2>Изявително наклонение</h2>
+
+ <h3>Сегашно време</h3>
+ <table class="forms-table" rules="all">
+ <tr>
+ <th></th>
+ <th>ед.ч.</th>
+ <th>мн.ч.</th>
+ </tr>
+ <tr>
+ <th>1 л.</th>
+ <td><form>s Imperf (VPres Sg P1)</form></td>
+ <td><form>s Imperf (VPres Pl P1)</form></td>
+ </tr>
+ <tr>
+ <th>2 л.</th>
+ <td><form>s Imperf (VPres Sg P2)</form></td>
+ <td><form>s Imperf (VPres Pl P2)</form></td>
+ </tr>
+ <tr>
+ <th>3 л.</th>
+ <td><form>s Imperf (VPres Sg P3)</form></td>
+ <td><form>s Imperf (VPres Pl P3)</form></td>
+ </tr>
+ </table>
+
+ <h3>Минало свършено време (аорист)</h3>
+ <table class="forms-table" rules="all">
+ <tr>
+ <th></th>
+ <th>ед.ч.</th>
+ <th>мн.ч.</th>
+ </tr>
+ <tr>
+ <th>1 л.</th>
+ <td><form>s Imperf (VAorist Sg P1)</form></td>
+ <td><form>s Imperf (VAorist Pl P1)</form></td>
+ </tr>
+ <tr>
+ <th>2 л.</th>
+ <td><form>s Imperf (VAorist Sg P2)</form></td>
+ <td><form>s Imperf (VAorist Pl P2)</form></td>
+ </tr>
+ <tr>
+ <th>3 л.</th>
+ <td><form>s Imperf (VAorist Sg P3)</form></td>
+ <td><form>s Imperf (VAorist Pl P3)</form></td>
+ </tr>
+ </table>
+
+ <h3>Минало несвършено време (имперфект)</h3>
+ <table class="forms-table" rules="all">
+ <tr>
+ <th></th>
+ <th>ед.ч.</th>
+ <th>мн.ч.</th>
+ </tr>
+ <tr>
+ <th>1 л.</th>
+ <td><form>s Imperf (VImperfect Sg P1)</form></td>
+ <td><form>s Imperf (VImperfect Pl P1)</form></td>
+ </tr>
+ <tr>
+ <th>2 л.</th>
+ <td><form>s Imperf (VImperfect Sg P2)</form></td>
+ <td><form>s Imperf (VImperfect Pl P2)</form></td>
+ </tr>
+ <tr>
+ <th>3 л.</th>
+ <td><form>s Imperf (VImperfect Sg P3)</form></td>
+ <td><form>s Imperf (VImperfect Pl P3)</form></td>
+ </tr>
+ </table>
+
+ <h2>Повелително наклонение</h2>
+ <table class="forms-table" rules="all">
+ <tr>
+ <th>ед.ч.</th>
+ <th>мн.ч.</th>
+ </tr>
+ <tr>
+ <td><form>s Imperf (VImperative Sg)</form></td>
+ <td><form>s Imperf (VImperative Pl)</form></td>
+ </tr>
+ </table>
+
+ <h2>Причастия (отглаголни прилагателни)</h2>
+
+ <h3>Минало страдателно причастие</h3>
+ <table class="forms-table" rules="all">
+ <tr>
+ <th rowspan="7">ед.ч.</th>
+ <th rowspan="3">м.р.</th>
+ <th>нечленувано</th>
+ <td><form>s Imperf (VPassive (ASg Masc Indef))</form></td>
+ </tr>
+ <tr>
+ <th>непълен член</th>
+ <td><form>s Imperf (VPassive (ASg Masc Def))</form></td>
+ </tr>
+ <tr>
+ <th>пълен член</th>
+ <td><form>s Imperf (VPassive ASgMascDefNom)</form></td>
+ </tr>
+ <tr>
+ <th rowspan="2">ж.р.</th>
+ <th>нечленувано</th>
+ <td><form>s Imperf (VPassive (ASg Fem Indef))</form></td>
+ </tr>
+ <tr>
+ <th>членувано</th>
+ <td><form>s Imperf (VPassive (ASg Fem Def))</form></td>
+ </tr>
+ <tr>
+ <th rowspan="2">ср.р.</th>
+ <th>нечленувано</th>
+ <td><form>s Imperf (VPassive (ASg Neut Indef))</form></td>
+ </tr>
+ <tr>
+ <th>членувано</th>
+ <td><form>s Imperf (VPassive (ASg Neut Def))</form></td>
+ </tr>
+ <tr>
+ <th rowspan="2" colspan="2">мн.ч.</th>
+ <th>нечленувано</th>
+ <td><form>s Imperf (VPassive (APl Indef))</form></td>
+ </tr>
+ <tr>
+ <th>членувано</th>
+ <td><form>s Imperf (VPassive (APl Def))</form></td>
+ </tr>
+ </table>
+
+ <h3>Минало свършено деятелно причастие</h3>
+ <table class="forms-table" rules="all">
+ <tr>
+ <th rowspan="7">ед.ч.</th>
+ <th rowspan="3">м.р.</th>
+ <th>нечленувано</th>
+ <td><form>s Imperf (VPerfect (ASg Masc Indef))</form></td>
+ </tr>
+ <tr>
+ <th>непълен член</th>
+ <td><form>s Imperf (VPerfect (ASg Masc Def))</form></td>
+ </tr>
+ <tr>
+ <th>пълен член</th>
+ <td><form>s Imperf (VPerfect ASgMascDefNom)</form></td>
+ </tr>
+ <tr>
+ <th rowspan="2">ж.р.</th>
+ <th>нечленувано</th>
+ <td><form>s Imperf (VPerfect (ASg Fem Indef))</form></td>
+ </tr>
+ <tr>
+ <th>членувано</th>
+ <td><form>s Imperf (VPerfect (ASg Fem Def))</form></td>
+ </tr>
+ <tr>
+ <th rowspan="2">ср.р.</th>
+ <th>нечленувано</th>
+ <td><form>s Imperf (VPerfect (ASg Neut Indef))</form></td>
+ </tr>
+ <tr>
+ <th>членувано</th>
+ <td><form>s Imperf (VPerfect (ASg Neut Def))</form></td>
+ </tr>
+ <tr>
+ <th rowspan="2" colspan="2">мн.ч.</th>
+ <th>нечленувано</th>
+ <td><form>s Imperf (VPerfect (APl Indef))</form></td>
+ </tr>
+ <tr>
+ <th>членувано</th>
+ <td><form>s Imperf (VPerfect (APl Def))</form></td>
+ </tr>
+ </table>
+
+ <h3>Минало несвършено деятелно причастие</h3>
+ <table class="forms-table" rules="all">
+ <tr>
+ <th rowspan="7">ед.ч.</th>
+ <th rowspan="3">м.р.</th>
+ <th>нечленувано</th>
+ <td><form>s Imperf (VPluPerfect (ASg Masc Indef))</form></td>
+ </tr>
+ <tr>
+ <th>непълен член</th>
+ <td><form>s Imperf (VPluPerfect (ASg Masc Def))</form></td>
+ </tr>
+ <tr>
+ <th>пълен член</th>
+ <td><form>s Imperf (VPluPerfect ASgMascDefNom)</form></td>
+ </tr>
+ <tr>
+ <th rowspan="2">ж.р.</th>
+ <th>нечленувано</th>
+ <td><form>s Imperf (VPluPerfect (ASg Fem Indef))</form></td>
+ </tr>
+ <tr>
+ <th>членувано</th>
+ <td><form>s Imperf (VPluPerfect (ASg Fem Def))</form></td>
+ </tr>
+ <tr>
+ <th rowspan="2">ср.р.</th>
+ <th>нечленувано</th>
+ <td><form>s Imperf (VPluPerfect (ASg Neut Indef))</form></td>
+ </tr>
+ <tr>
+ <th>членувано</th>
+ <td><form>s Imperf (VPluPerfect (ASg Neut Def))</form></td>
+ </tr>
+ <tr>
+ <th rowspan="2" colspan="2">мн.ч.</th>
+ <th>нечленувано</th>
+ <td><form>s Imperf (VPluPerfect (APl Indef))</form></td>
+ </tr>
+ <tr>
+ <th>членувано</th>
+ <td><form>s Imperf (VPluPerfect (APl Def))</form></td>
+ </tr>
+ </table>
+
+ <h3>Сегашно деятелно причастие</h3>
+ <table class="forms-table" rules="all">
+ <tr>
+ <th rowspan="7">ед.ч.</th>
+ <th rowspan="3">м.р.</th>
+ <th>нечленувано</th>
+ <td><form>s Imperf (VPresPart (ASg Masc Indef))</form></td>
+ </tr>
+ <tr>
+ <th>непълен член</th>
+ <td><form>s Imperf (VPresPart (ASg Masc Def))</form></td>
+ </tr>
+ <tr>
+ <th>пълен член</th>
+ <td><form>s Imperf (VPresPart ASgMascDefNom)</form></td>
+ </tr>
+ <tr>
+ <th rowspan="2">ж.р.</th>
+ <th>нечленувано</th>
+ <td><form>s Imperf (VPresPart (ASg Fem Indef))</form></td>
+ </tr>
+ <tr>
+ <th>членувано</th>
+ <td><form>s Imperf (VPresPart (ASg Fem Def))</form></td>
+ </tr>
+ <tr>
+ <th rowspan="2">ср.р.</th>
+ <th>нечленувано</th>
+ <td><form>s Imperf (VPresPart (ASg Neut Indef))</form></td>
+ </tr>
+ <tr>
+ <th>членувано</th>
+ <td><form>s Imperf (VPresPart (ASg Neut Def))</form></td>
+ </tr>
+ <tr>
+ <th rowspan="2" colspan="2">мн.ч.</th>
+ <th>нечленувано</th>
+ <td><form>s Imperf (VPresPart (APl Indef))</form></td>
+ </tr>
+ <tr>
+ <th>членувано</th>
+ <td><form>s Imperf (VPresPart (APl Def))</form></td>
+ </tr>
+ </table>
+
+ <h2>Деепричастие (отглаголно наречие)</h2>
+ <p><form>s Imperf VGerund</form></p>
+
+ <h1>Глагол от свършен вид</h1>
+ <h2>Изявително наклонение</h2>
+
+ <h3>Сегашно време</h3>
+ <table class="forms-table" rules="all">
+ <tr>
+ <th></th>
+ <th>ед.ч.</th>
+ <th>мн.ч.</th>
+ </tr>
+ <tr>
+ <th>1 л.</th>
+ <td><form>s Perf (VPres Sg P1)</form></td>
+ <td><form>s Perf (VPres Pl P1)</form></td>
+ </tr>
+ <tr>
+ <th>2 л.</th>
+ <td><form>s Perf (VPres Sg P2)</form></td>
+ <td><form>s Perf (VPres Pl P2)</form></td>
+ </tr>
+ <tr>
+ <th>3 л.</th>
+ <td><form>s Perf (VPres Sg P3)</form></td>
+ <td><form>s Perf (VPres Pl P3)</form></td>
+ </tr>
+ </table>
+
+ <h3>Минало свършено време (аорист)</h3>
+ <table class="forms-table" rules="all">
+ <tr>
+ <th></th>
+ <th>ед.ч.</th>
+ <th>мн.ч.</th>
+ </tr>
+ <tr>
+ <th>1 л.</th>
+ <td><form>s Perf (VAorist Sg P1)</form></td>
+ <td><form>s Perf (VAorist Pl P1)</form></td>
+ </tr>
+ <tr>
+ <th>2 л.</th>
+ <td><form>s Perf (VAorist Sg P2)</form></td>
+ <td><form>s Perf (VAorist Pl P2)</form></td>
+ </tr>
+ <tr>
+ <th>3 л.</th>
+ <td><form>s Perf (VAorist Sg P3)</form></td>
+ <td><form>s Perf (VAorist Pl P3)</form></td>
+ </tr>
+ </table>
+
+ <h3>Минало несвършено време (имперфект)</h3>
+ <table class="forms-table" rules="all">
+ <tr>
+ <th></th>
+ <th>ед.ч.</th>
+ <th>мн.ч.</th>
+ </tr>
+ <tr>
+ <th>1 л.</th>
+ <td><form>s Perf (VImperfect Sg P1)</form></td>
+ <td><form>s Perf (VImperfect Pl P1)</form></td>
+ </tr>
+ <tr>
+ <th>2 л.</th>
+ <td><form>s Perf (VImperfect Sg P2)</form></td>
+ <td><form>s Perf (VImperfect Pl P2)</form></td>
+ </tr>
+ <tr>
+ <th>3 л.</th>
+ <td><form>s Perf (VImperfect Sg P3)</form></td>
+ <td><form>s Perf (VImperfect Pl P3)</form></td>
+ </tr>
+ </table>
+
+ <h2>Повелително наклонение</h2>
+ <table class="forms-table" rules="all">
+ <tr>
+ <th>ед.ч.</th>
+ <th>мн.ч.</th>
+ </tr>
+ <tr>
+ <td><form>s Perf (VImperative Sg)</form></td>
+ <td><form>s Perf (VImperative Pl)</form></td>
+ </tr>
+ </table>
+
+ <h2>Причастия (отглаголни прилагателни)</h2>
+
+ <h3>Минало свършено деятелно причастие</h3>
+ <table class="forms-table" rules="all">
+ <tr>
+ <th rowspan="7">ед.ч.</th>
+ <th rowspan="3">м.р.</th>
+ <th>нечленувано</th>
+ <td><form>s Perf (VPerfect (ASg Masc Indef))</form></td>
+ </tr>
+ <tr>
+ <th>непълен член</th>
+ <td><form>s Perf (VPerfect (ASg Masc Def))</form></td>
+ </tr>
+ <tr>
+ <th>пълен член</th>
+ <td><form>s Perf (VPerfect ASgMascDefNom)</form></td>
+ </tr>
+ <tr>
+ <th rowspan="2">ж.р.</th>
+ <th>нечленувано</th>
+ <td><form>s Perf (VPerfect (ASg Fem Indef))</form></td>
+ </tr>
+ <tr>
+ <th>членувано</th>
+ <td><form>s Perf (VPerfect (ASg Fem Def))</form></td>
+ </tr>
+ <tr>
+ <th rowspan="2">ср.р.</th>
+ <th>нечленувано</th>
+ <td><form>s Perf (VPerfect (ASg Neut Indef))</form></td>
+ </tr>
+ <tr>
+ <th>членувано</th>
+ <td><form>s Perf (VPerfect (ASg Neut Def))</form></td>
+ </tr>
+ <tr>
+ <th rowspan="2" colspan="2">мн.ч.</th>
+ <th>нечленувано</th>
+ <td><form>s Perf (VPerfect (APl Indef))</form></td>
+ </tr>
+ <tr>
+ <th>членувано</th>
+ <td><form>s Perf (VPerfect (APl Def))</form></td>
+ </tr>
+ </table>
+
+ <h3>Минало несвършено деятелно причастие</h3>
+ <table class="forms-table" rules="all">
+ <tr>
+ <th rowspan="7">ед.ч.</th>
+ <th rowspan="3">м.р.</th>
+ <th>нечленувано</th>
+ <td><form>s Perf (VPluPerfect (ASg Masc Indef))</form></td>
+ </tr>
+ <tr>
+ <th>непълен член</th>
+ <td><form>s Perf (VPluPerfect (ASg Masc Def))</form></td>
+ </tr>
+ <tr>
+ <th>пълен член</th>
+ <td><form>s Perf (VPluPerfect ASgMascDefNom)</form></td>
+ </tr>
+ <tr>
+ <th rowspan="2">ж.р.</th>
+ <th>нечленувано</th>
+ <td><form>s Perf (VPluPerfect (ASg Fem Indef))</form></td>
+ </tr>
+ <tr>
+ <th>членувано</th>
+ <td><form>s Perf (VPluPerfect (ASg Fem Def))</form></td>
+ </tr>
+ <tr>
+ <th rowspan="2">ср.р.</th>
+ <th>нечленувано</th>
+ <td><form>s Perf (VPluPerfect (ASg Neut Indef))</form></td>
+ </tr>
+ <tr>
+ <th>членувано</th>
+ <td><form>s Perf (VPluPerfect (ASg Neut Def))</form></td>
+ </tr>
+ <tr>
+ <th rowspan="2" colspan="2">мн.ч.</th>
+ <th>нечленувано</th>
+ <td><form>s Perf (VPluPerfect (APl Indef))</form></td>
+ </tr>
+ <tr>
+ <th>членувано</th>
+ <td><form>s Perf (VPluPerfect (APl Def))</form></td>
+ </tr>
+ </table>
+
+ <h1>Отглаголно съществително</h1>
+ <table class="forms-table" rules="all">
+ <tr>
+ <th rowspan="2">ед.ч.</th>
+ <th>нечленувано</th>
+ <td><form>s Imperf (VNoun (NF Sg Indef))</form></td>
+ </tr>
+ <tr>
+ <th>членувано</th>
+ <td><form>s Imperf (VNoun (NF Sg Def))</form></td>
+ </tr>
+ <tr>
+ <th rowspan="2">мн.ч.</th>
+ <th>нечленувано</th>
+ <td><form>s Imperf (VNoun (NF Pl Indef))</form></td>
+ </tr>
+ <tr>
+ <th>членувано</th>
+ <td><form>s Imperf (VNoun (NF Pl Def))</form></td>
+ </tr>
+ </table>
+ </verb>
+</inflection_temlate>
diff --git a/src/ui/android/res/xml/inflection_en.xml b/src/ui/android/res/xml/inflection_en.xml
new file mode 100644
index 000000000..13835ccde
--- /dev/null
+++ b/src/ui/android/res/xml/inflection_en.xml
@@ -0,0 +1,84 @@
+<inflection_temlate>
+ <noun>
+ <h1>Noun</h1>
+
+ <table class="forms-table" rules="all">
+ <tr>
+ <th></th>
+ <th>nom</th>
+ <th>gen</th>
+ </tr>
+ <tr>
+ <th>sg</th>
+ <td><form>s Sg Nom</form></td>
+ <td><form>s Sg Gen</form></td>
+ </tr>
+ <tr>
+ <th>pl</th>
+ <td><form>s Pl Nom</form></td>
+ <td><form>s Pl Gen</form></td>
+ </tr>
+ </table>
+ </noun>
+ <adjective>
+ <h1>Adjective</h1>
+
+ <table class="forms-table" rules="all">
+ <tr>
+ <th></th>
+ <th>nom</th>
+ <th>gen</th>
+ </tr>
+ <tr>
+ <th>posit</th>
+ <td><form>s (AAdj Posit Nom)</form></td>
+ <td><form>s (AAdj Posit Gen)</form></td>
+ </tr>
+ <tr>
+ <th>compar</th>
+ <td><form>s (AAdj Compar Nom)</form></td>
+ <td><form>s (AAdj Compar Gen)</form></td>
+ </tr>
+ <tr>
+ <th>compar</th>
+ <td><form>s (AAdj Superl Nom)</form></td>
+ <td><form>s (AAdj Superl Gen)</form></td>
+ </tr>
+ </table>
+ <h1>Adverb</h1>
+ <p><form>s AAdv</form></p>
+ </adjective>
+ <adverb>
+ <h1>Adverb</h1>
+ <p><form>s</form></p>
+ </adverb>
+ <prep>
+ <h1>Preposition</h1>
+ <p><form>s</form></p>
+ </prep>
+ <verb>
+ <h1>Verb</h1>
+ <table class="forms-table" rules="all">
+ <tr>
+ <th>infitive</th>
+ <td><form>s VInf</form></td>
+ </tr>
+ <tr>
+ <th>present</th>
+ <td><form>s VPres</form></td>
+ </tr>
+ <tr>
+ <th>past</th>
+ <td><form>s VPast</form></td>
+ </tr>
+ <tr>
+ <th>past part.</th>
+ <td><form>s VPPart</form></td>
+ </tr>
+ <tr>
+ <th>present part.</th>
+ <td><form>s VPresPart</form></td>
+ </tr>
+ </table>
+ </verb>
+</inflection_temlate>
diff --git a/src/ui/android/src/org/grammaticalframework/ui/android/Language.java b/src/ui/android/src/org/grammaticalframework/ui/android/Language.java
index cd16974ab..996846e82 100644
--- a/src/ui/android/src/org/grammaticalframework/ui/android/Language.java
+++ b/src/ui/android/src/org/grammaticalframework/ui/android/Language.java
@@ -8,11 +8,13 @@ public class Language implements Serializable {
private final String mLangCode;
private final String mLangName;
private final String mConcrete;
+ private final int mInflResource;
- public Language(String langCode, String langName, String concrete) {
+ public Language(String langCode, String langName, String concrete, int inflResource) {
mLangCode = langCode;
mLangName = langName;
mConcrete = concrete;
+ mInflResource = inflResource;
}
public String getLangCode() {
@@ -22,6 +24,10 @@ public class Language implements Serializable {
public String getLangName() {
return mLangName;
}
+
+ public int getInflectionResource() {
+ return mInflResource;
+ }
String getConcrete() {
return mConcrete;
diff --git a/src/ui/android/src/org/grammaticalframework/ui/android/LexicalEntryActivity.java b/src/ui/android/src/org/grammaticalframework/ui/android/LexicalEntryActivity.java
index 393a854cf..8c8777e2f 100644
--- a/src/ui/android/src/org/grammaticalframework/ui/android/LexicalEntryActivity.java
+++ b/src/ui/android/src/org/grammaticalframework/ui/android/LexicalEntryActivity.java
@@ -1,19 +1,35 @@
package org.grammaticalframework.ui.android;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
+import java.util.Scanner;
import android.app.Activity;
import android.app.ListActivity;
+import android.content.Context;
+import android.content.res.Resources;
+import android.content.res.XmlResourceParser;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
+import android.view.View.OnClickListener;
import android.view.ViewGroup;
+import android.view.ViewGroup.LayoutParams;
+import android.webkit.WebView;
import android.widget.ArrayAdapter;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.ListView;
+import android.widget.RelativeLayout;
import android.widget.TextView;
import org.grammaticalframework.pgf.*;
import org.grammaticalframework.ui.android.LanguageSelector.OnLanguageSelectedListener;
+import org.xmlpull.v1.XmlPullParserException;
public class LexicalEntryActivity extends ListActivity {
@@ -51,6 +67,8 @@ public class LexicalEntryActivity extends ListActivity {
mShowLanguageView.setSelectedLanguage(mTranslator.getTargetLanguage());
}
+ private View expandedView;
+
private void updateTranslations() {
@SuppressWarnings("unchecked")
List<MorphoAnalysis> list = (List<MorphoAnalysis>)
@@ -59,33 +77,167 @@ public class LexicalEntryActivity extends ListActivity {
List<String> data = new ArrayList<String>();
for (MorphoAnalysis a : list) {
Expr e = Expr.readExpr(a.getLemma());
- String phrase = mTranslator.linearize(e);
- if (!data.contains(phrase)) {
- data.add(phrase);
+ if (!data.contains(a.getLemma())) {
+ data.add(a.getLemma());
}
}
- ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
- android.R.layout.simple_list_item_1,
- data) {
- public View getView(int position, View convertView, ViewGroup parent) {
- String item = getItem(position);
-
- LayoutInflater inflater = (LayoutInflater) getContext()
- .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
- if (convertView == null) {
- convertView = inflater.inflate(R.layout.lexical_item, null);
- }
-
- TextView descView =
- (TextView) convertView.findViewById(R.id.lexical_desc);
- descView.setText(item);
-
- return convertView;
- }
- };
-
- setListAdapter(adapter);
+ setListAdapter(new LexicalAdapter(this, data));
+ expandedView = null;
}
+
+ private void collapse() {
+ if (expandedView == null)
+ return;
+
+ ImageView arrow = (ImageView) expandedView.findViewById(R.id.arrow);
+ arrow.setImageResource(R.drawable.open_arrow);
+
+ WebView inflectionView = (WebView) expandedView.findViewById(R.id.lexical_inflection);
+ ((RelativeLayout) expandedView).removeView(inflectionView);
+
+ expandedView = null;
+ }
+
+ private void expand(View view, String lemma) {
+ String tag = null;
+ if (lemma.endsWith("_N") || lemma.endsWith("_N2"))
+ tag = "noun";
+ else if (lemma.endsWith("_V") || lemma.endsWith("_V2") ||
+ lemma.endsWith("_V3") || lemma.endsWith("_V2V") ||
+ lemma.endsWith("_VV") || lemma.endsWith("_VS"))
+ tag = "verb";
+ else if (lemma.endsWith("_A") || lemma.endsWith("_A2"))
+ tag = "adjective";
+ else if (lemma.endsWith("_Prep"))
+ tag = "prep";
+ else if (lemma.endsWith("_Adv"))
+ tag = "adverb";
+
+ if (tag == null)
+ return;
+
+ int res = mTranslator.getTargetLanguage().getInflectionResource();
+ if (res == 0)
+ return;
+
+ ImageView arrow = (ImageView) view.findViewById(R.id.arrow);
+ arrow.setImageResource(R.drawable.close_arrow);
+
+ WebView inflectionView = (WebView) view.findViewById(R.id.lexical_inflection);
+ if (inflectionView == null) {
+ inflectionView = new WebView(this);
+ inflectionView.setId(R.id.lexical_inflection);
+ RelativeLayout.LayoutParams params =
+ new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
+ params.addRule(RelativeLayout.BELOW, R.id.lexical_desc);
+ ((RelativeLayout) view).addView(inflectionView, params);
+ }
+
+ Expr expr = Expr.readExpr(lemma);
+ Map<String,String> lins = mTranslator.tabularLinearize(expr);
+ XmlResourceParser parser = getResources().getXml(res);
+ StringBuilder builder = new StringBuilder();
+ builder.append("<html><head><meta charset=\"UTF-8\"/></head><body>");
+
+ try {
+ boolean emit = false;
+ boolean form = false;
+ int event = parser.next();
+ while (event != XmlResourceParser.END_DOCUMENT) {
+ switch (event) {
+ case XmlResourceParser.START_TAG:
+ if (tag.equals(parser.getName())) {
+ emit = true;
+ } if ("form".equals(parser.getName())) {
+ form = true;
+ } else if (emit) {
+ builder.append("<"+parser.getName());
+ int n_attrs = parser.getAttributeCount();
+ for (int i = 0; i < n_attrs; i++) {
+ builder.append(' ');
+ builder.append(parser.getAttributeName(i));
+ builder.append("=\"");
+ builder.append(parser.getAttributeValue(i));
+ builder.append("\"");
+ }
+ builder.append(">");
+ }
+ break;
+ case XmlResourceParser.END_TAG:
+ if (tag.equals(parser.getName())) {
+ emit = false;
+ } else if ("form".equals(parser.getName())) {
+ form = false;
+ } else if (emit) {
+ builder.append("</"+parser.getName()+">");
+ }
+ break;
+ case XmlResourceParser.TEXT:
+ if (emit) {
+ if (form) {
+ String s = lins.get(parser.getText());
+ if (s != null)
+ builder.append(s);
+ } else {
+ builder.append(parser.getText());
+ }
+ }
+ break;
+ }
+ event = parser.next();
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ } catch (XmlPullParserException e) {
+ e.printStackTrace();
+ } finally {
+ parser.close();
+ }
+
+ builder.append("</body>");
+ inflectionView.loadData(builder.toString(), "text/html", null);
+
+ expandedView = view;
+ }
+
+ private class LexicalAdapter extends ArrayAdapter<String> {
+ public LexicalAdapter(Context context, List<String> data) {
+ super(context, android.R.layout.simple_list_item_1, data);
+ }
+
+ public View getView(int position, View convertView, ViewGroup parent) {
+ final String lemma = getItem(position);
+
+ LayoutInflater inflater = (LayoutInflater) getContext()
+ .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
+ if (convertView == null) {
+ convertView = inflater.inflate(R.layout.lexical_item, null);
+ }
+
+ TextView descView =
+ (TextView) convertView.findViewById(R.id.lexical_desc);
+
+ Expr e = Expr.readExpr(lemma);
+ String phrase = mTranslator.linearize(e);
+ descView.setText(phrase);
+
+ convertView.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ if (expandedView == view)
+ collapse();
+ else if (expandedView == null)
+ expand(view, lemma);
+ else {
+ collapse();
+ expand(view, lemma);
+ }
+ }
+ });
+
+ return convertView;
+ }
+ }
}
diff --git a/src/ui/android/src/org/grammaticalframework/ui/android/Translator.java b/src/ui/android/src/org/grammaticalframework/ui/android/Translator.java
index 9f50ebc18..5f52d5325 100644
--- a/src/ui/android/src/org/grammaticalframework/ui/android/Translator.java
+++ b/src/ui/android/src/org/grammaticalframework/ui/android/Translator.java
@@ -14,6 +14,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.List;
+import java.util.Map;
public class Translator {
@@ -24,12 +25,10 @@ public class Translator {
// TODO: build dynamically?
private Language[] mLanguages = {
- new Language("en-US", "English", "ParseEng"),
- new Language("cmn-Hans-CN", "Chinese", "ParseChi"),
- // new Language("de-DE", "German", "ParseGer"),
- // new Language("es-ES", "Spanish", "ResourceDemoSpa"),
- //new Language("fr-FR", "French", "ResourceDemoFre"),
- // new Language("bg-BG", "Bulgarian", "ParseBul"),
+ new Language("en-US", "English", "ParseEng", R.xml.inflection_en),
+ new Language("bg-BG", "Bulgarian", "ParseBul", R.xml.inflection_bg),
+ //new Language("fr-FR", "French", "ParseFre", 0)
+ //new Language("cmn-Hans-CN", "Chinese", "ParseChi", 0)
};
private Language mSourceLanguage;
@@ -104,6 +103,11 @@ public class Translator {
return targetLang.linearize(e);
}
+ public Map<String,String> tabularLinearize(Expr e) {
+ Concr targetLang = getConcr(getTargetLanguage().getConcrete());
+ return targetLang.tabularLinearize(e);
+ }
+
public List<MorphoAnalysis> lookupMorpho(String sentence) {
return getConcr(getSourceLanguage().getConcrete()).lookupMorpho(sentence);
}