summaryrefslogtreecommitdiff
path: root/src/ui/android
diff options
context:
space:
mode:
authorkrasimir <krasimir@chalmers.se>2017-04-19 13:00:46 +0000
committerkrasimir <krasimir@chalmers.se>2017-04-19 13:00:46 +0000
commit25e14b253d24a9409ec70758126d8a64f24a691d (patch)
tree4d8cb50896fba0edba8894938a5164db6f4452ae /src/ui/android
parent5c93f2fba5eadaa1e516106c08d495c14a0eb647 (diff)
now the database with glosses is compiled on the PC by running glosses.hs. On the phone we just extract the database
Diffstat (limited to 'src/ui/android')
-rw-r--r--src/ui/android/glosses.hs22
-rw-r--r--src/ui/android/src/org/grammaticalframework/ui/android/SemanticGraphManager.java68
-rw-r--r--src/ui/android/src/org/grammaticalframework/ui/android/Translator.java2
-rw-r--r--src/ui/android/src/se/chalmers/phrasebook/backend/syntax/SyntaxNode.java1
-rw-r--r--src/ui/android/topics.txt (renamed from src/ui/android/assets/topics.txt)0
5 files changed, 60 insertions, 33 deletions
diff --git a/src/ui/android/glosses.hs b/src/ui/android/glosses.hs
index 3776d569b..966ec90aa 100644
--- a/src/ui/android/glosses.hs
+++ b/src/ui/android/glosses.hs
@@ -1,10 +1,21 @@
import SG
+import PGF2
import Data.Char
import Data.List
main = do
- ls <- fmap lines $ readFile "../../../lib/src/translator/Dictionary.gf"
- writeFile "assets/glosses.txt" (unlines [x | Just (fn,gloss) <- map gloss ls, x <- glossTriples fn gloss])
+ db <- openSG "assets/semantics.db"
+ inTransaction db $ do
+ ls <- fmap lines $ readFile "../../../lib/src/translator/Dictionary.gf"
+ let glosses = [x | Just (fn,gloss) <- map gloss ls, x <- glossTriples fn gloss]
+ topics <- fmap (map toTriple . lines) $ readFile "topics.txt"
+ sequence_ [insertTriple db s p o | (s,p,o) <- glosses++topics]
+ closeSG db
+
+toTriple l =
+ case readTriple l of
+ Just t -> t
+ Nothing -> error ("topics.txt: "++l)
gloss l =
case words l of
@@ -14,9 +25,12 @@ gloss l =
_ -> Nothing
glossTriples fn s =
- (if null gs then [] else ["<"++fn++",gloss,"++show (merge gs)++">"])++
- (if null es then [] else ["<"++fn++",example,"++show (merge (map (init . tail) es))++">"])
+ (if null gs then [] else [(fn_e,gloss,mkStr (merge gs))])++
+ (if null es then [] else [(fn_e,example,mkStr (merge (map (init . tail) es)))])
where
+ fn_e = mkApp fn []
+ gloss = mkApp "gloss" []
+ example = mkApp "example" []
(es,gs) = partition isExample (splitGloss s)
splitGloss s =
diff --git a/src/ui/android/src/org/grammaticalframework/ui/android/SemanticGraphManager.java b/src/ui/android/src/org/grammaticalframework/ui/android/SemanticGraphManager.java
index 12f0e2143..f3b26a3cf 100644
--- a/src/ui/android/src/org/grammaticalframework/ui/android/SemanticGraphManager.java
+++ b/src/ui/android/src/org/grammaticalframework/ui/android/SemanticGraphManager.java
@@ -2,6 +2,7 @@ package org.grammaticalframework.ui.android;
import java.io.*;
import android.content.Context;
+import android.util.Log;
import org.grammaticalframework.sg.*;
import org.grammaticalframework.pgf.*;
@@ -10,8 +11,6 @@ public class SemanticGraphManager implements Closeable {
private final Context mContext;
private SG mDB;
- public static final String GLOSSES_FILE_NAME = "glosses.txt";
- public static final String TOPICS_FILE_NAME = "topics.txt";
public static final String DATABASE_FILE_NAME = "semantics.db";
public SemanticGraphManager(Context context) {
@@ -40,38 +39,51 @@ public class SemanticGraphManager implements Closeable {
if (!dir.exists()) {
dir.mkdir();
}
-
+
+ if (!extractDatabase(file))
+ return;
+
mDB = SG.openSG(path);
if (exists)
return;
-
- loadFile(GLOSSES_FILE_NAME);
- loadFile(TOPICS_FILE_NAME);
}
- private void loadFile(String assetName) throws IOException {
- BufferedReader br = new BufferedReader(
- new InputStreamReader(
- mContext.getAssets().open(assetName)));
-
- try {
- mDB.beginTrans();
-
- String line;
- while ((line = br.readLine()) != null) {
- Expr[] triple = SG.readTriple(line);
- mDB.insertTriple(triple[0],triple[1],triple[2]);
- }
+ private boolean extractDatabase(File outFile) {
+ InputStream in = null;
+ OutputStream out = null;
+ try {
+ in = mContext.getAssets().open(DATABASE_FILE_NAME);
+ out = new FileOutputStream(outFile);
+ copyFile(in, out);
+ return true;
+ } catch(IOException e) {
+ Log.e("tag", "Failed to copy asset file: " + DATABASE_FILE_NAME, e);
+ }
+ finally {
+ if (in != null) {
+ try {
+ in.close();
+ } catch (IOException e) {
+ // NOOP
+ }
+ }
+ if (out != null) {
+ try {
+ out.close();
+ } catch (IOException e) {
+ // NOOP
+ }
+ }
+ }
+
+ return false;
+ }
- mDB.commit();
- } catch (IOException e) {
- mDB.rollback();
- throw e;
- } catch (SGError e) {
- mDB.rollback();
- throw e;
- } finally {
- br.close();
+ private void copyFile(InputStream in, OutputStream out) throws IOException {
+ byte[] buffer = new byte[1024];
+ int read;
+ while((read = in.read(buffer)) != -1){
+ out.write(buffer, 0, read);
}
}
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 47f949cdd..69f1eff5d 100644
--- a/src/ui/android/src/org/grammaticalframework/ui/android/Translator.java
+++ b/src/ui/android/src/org/grammaticalframework/ui/android/Translator.java
@@ -41,7 +41,7 @@ public class Translator {
new Language("hi-IN", "Hindi", "AppHin", R.xml.devanagari_page1, R.xml.devanagari_page2),
new Language("it-IT", "Italian", "AppIta", R.xml.qwerty),
new Language("ja-JP", "Japanese","AppJpn", R.xml.qwerty),
- new Language("ru-RU", "Russian", "AppRus", R.xml.cyrillic),
+ new Language("ru-RU", "Russian", "AppRus", R.xml.cyrillic),
new Language("es-ES", "Spanish", "AppSpa", R.xml.qwerty),
new Language("sv-SE", "Swedish", "AppSwe", R.xml.nordic),
new Language("th-TH", "Thai", "AppTha", R.xml.thai_page1, R.xml.thai_page2)
diff --git a/src/ui/android/src/se/chalmers/phrasebook/backend/syntax/SyntaxNode.java b/src/ui/android/src/se/chalmers/phrasebook/backend/syntax/SyntaxNode.java
index bdd81029c..5268e41d4 100644
--- a/src/ui/android/src/se/chalmers/phrasebook/backend/syntax/SyntaxNode.java
+++ b/src/ui/android/src/se/chalmers/phrasebook/backend/syntax/SyntaxNode.java
@@ -1,6 +1,7 @@
package se.chalmers.phrasebook.backend.syntax;
import java.io.Serializable;
+import org.grammaticalframework.pgf.Expr;
public class SyntaxNode implements Serializable {
private String desc;
diff --git a/src/ui/android/assets/topics.txt b/src/ui/android/topics.txt
index 785d07ba4..785d07ba4 100644
--- a/src/ui/android/assets/topics.txt
+++ b/src/ui/android/topics.txt