summaryrefslogtreecommitdiff
path: root/src/ui/android
diff options
context:
space:
mode:
authorkr.angelov <kr.angelov@gmail.com>2013-11-28 22:06:55 +0000
committerkr.angelov <kr.angelov@gmail.com>2013-11-28 22:06:55 +0000
commit870b0738914e08a5fb05572291e2872d78e07d8f (patch)
treef9d463c6a5c8bbcf5f1d0f2bce52877e18793549 /src/ui/android
parentde33d7dd7c1f95f85deb55eacbef0a9dc453b964 (diff)
added caching to be able to quickly generate the inflection table for Finnish
Diffstat (limited to 'src/ui/android')
-rw-r--r--src/ui/android/src/org/grammaticalframework/ui/android/Translator.java31
1 files changed, 23 insertions, 8 deletions
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 0c03f4ad3..dddc59108 100644
--- a/src/ui/android/src/org/grammaticalframework/ui/android/Translator.java
+++ b/src/ui/android/src/org/grammaticalframework/ui/android/Translator.java
@@ -17,6 +17,7 @@ import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -223,9 +224,10 @@ public class Translator {
if (res == 0)
return "";
+ Map<String,Map<String,String>> cache = new HashMap<String,Map<String,String>>();
+
String cat = getGrammar().getFunctionType(lemma).getCategory();
- Expr expr = Expr.readExpr(lemma);
- Map<String,String> lins = targetLang.tabularLinearize(expr);
+
XmlResourceParser parser = mContext.getResources().getXml(res);
StringBuilder builder = new StringBuilder();
builder.append("<html><head><meta charset=\"UTF-8\"/></head><body>");
@@ -282,11 +284,18 @@ public class Translator {
} else if (state == 4 && "form".equals(parser.getName())) {
form = false;
} else if (state == 4 && lin && "lin".equals(parser.getName())) {
- Expr expr2 = Expr.readExpr(abstrBuilder.toString());
- if (formName == null)
- builder.append(TextUtils.htmlEncode(targetLang.linearize(expr2)));
- else {
- String elin = targetLang.tabularLinearize(expr2).get(formName);
+ String s = abstrBuilder.toString();
+ if (formName == null) {
+ Expr expr = Expr.readExpr(s);
+ builder.append(TextUtils.htmlEncode(targetLang.linearize(expr)));
+ } else {
+ Map<String,String> elins = cache.get(s);
+ if (elins == null) {
+ Expr expr = Expr.readExpr(s);
+ elins = targetLang.tabularLinearize(expr);
+ cache.put(s, elins);
+ }
+ String elin = elins.get(formName);
builder.append(TextUtils.htmlEncode(elin));
}
@@ -302,7 +311,13 @@ public class Translator {
emit = true;
} else if (state == 4 && emit) {
if (form) {
- String s = lins.get(parser.getText());
+ Map<String,String> elins = cache.get(lemma);
+ if (elins == null) {
+ Expr expr = Expr.readExpr(lemma);
+ elins = targetLang.tabularLinearize(expr);
+ cache.put(lemma, elins);
+ }
+ String s = elins.get(parser.getText());
if (s != null)
builder.append(TextUtils.htmlEncode(s));
} else {