summaryrefslogtreecommitdiff
path: root/src/runtime/java/org/grammaticalframework
diff options
context:
space:
mode:
authorkr.angelov <kr.angelov@gmail.com>2014-03-07 21:29:26 +0000
committerkr.angelov <kr.angelov@gmail.com>2014-03-07 21:29:26 +0000
commit2132eb6beddc838470e454a63248b3ad652a230d (patch)
tree7f6d2c49cd9c15db40ddb1a84bc549e54c26d8b2 /src/runtime/java/org/grammaticalframework
parent319308007cb4aa23287fa3195c5c35e1329f44d6 (diff)
added Java API to the simple word completion
Diffstat (limited to 'src/runtime/java/org/grammaticalframework')
-rw-r--r--src/runtime/java/org/grammaticalframework/pgf/Concr.java4
-rw-r--r--src/runtime/java/org/grammaticalframework/pgf/FullFormEntry.java21
-rw-r--r--src/runtime/java/org/grammaticalframework/pgf/FullFormIterator.java50
-rw-r--r--src/runtime/java/org/grammaticalframework/pgf/Lexicon.java29
4 files changed, 104 insertions, 0 deletions
diff --git a/src/runtime/java/org/grammaticalframework/pgf/Concr.java b/src/runtime/java/org/grammaticalframework/pgf/Concr.java
index fad1e9086..f7a026681 100644
--- a/src/runtime/java/org/grammaticalframework/pgf/Concr.java
+++ b/src/runtime/java/org/grammaticalframework/pgf/Concr.java
@@ -26,6 +26,10 @@ public class Concr {
public native List<MorphoAnalysis> lookupMorpho(String sentence);
+ public Iterable<FullFormEntry> lookupWordPrefix(String prefix) {
+ return new Lexicon(this, prefix);
+ }
+
public native boolean hasLinearization(String id);
public native void load(String path) throws FileNotFoundException;
diff --git a/src/runtime/java/org/grammaticalframework/pgf/FullFormEntry.java b/src/runtime/java/org/grammaticalframework/pgf/FullFormEntry.java
new file mode 100644
index 000000000..b0be7c342
--- /dev/null
+++ b/src/runtime/java/org/grammaticalframework/pgf/FullFormEntry.java
@@ -0,0 +1,21 @@
+package org.grammaticalframework.pgf;
+
+import java.util.List;
+
+public class FullFormEntry {
+ private String form;
+ private long ref;
+ private Concr concr;
+
+ public FullFormEntry(String form, long ref, Concr concr) {
+ this.form = form;
+ this.ref = ref;
+ this.concr = concr;
+ }
+
+ public String getForm() {
+ return form;
+ }
+
+ public native List<MorphoAnalysis> getAnalyses();
+}
diff --git a/src/runtime/java/org/grammaticalframework/pgf/FullFormIterator.java b/src/runtime/java/org/grammaticalframework/pgf/FullFormIterator.java
new file mode 100644
index 000000000..6a4c5efd7
--- /dev/null
+++ b/src/runtime/java/org/grammaticalframework/pgf/FullFormIterator.java
@@ -0,0 +1,50 @@
+package org.grammaticalframework.pgf;
+
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+class FullFormIterator implements Iterator<FullFormEntry> {
+ private Concr concr;
+ private Pool pool;
+ private long ref;
+ private FullFormEntry entry;
+ private boolean fetched;
+
+ public FullFormIterator(Concr concr, long pool, long ref) {
+ this.concr = concr;
+ this.pool = new Pool(pool);
+ this.ref = ref;
+ this.entry = null;
+ this.fetched = false;
+ }
+
+ private native FullFormEntry fetchFullFormEntry(long ref, Pool pool, Concr concr);
+
+ private void fetch() {
+ if (!fetched) {
+ entry = fetchFullFormEntry(ref, pool, concr);
+ fetched = true;
+ }
+ }
+
+ @Override
+ public boolean hasNext() {
+ fetch();
+ return (entry != null);
+ }
+
+ @Override
+ public FullFormEntry next() {
+ fetch();
+ fetched = false;
+
+ if (entry == null)
+ throw new NoSuchElementException();
+ return entry;
+ }
+
+ @Override
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+}
diff --git a/src/runtime/java/org/grammaticalframework/pgf/Lexicon.java b/src/runtime/java/org/grammaticalframework/pgf/Lexicon.java
new file mode 100644
index 000000000..3c0b615f0
--- /dev/null
+++ b/src/runtime/java/org/grammaticalframework/pgf/Lexicon.java
@@ -0,0 +1,29 @@
+package org.grammaticalframework.pgf;
+
+import java.util.Iterator;
+
+class Lexicon implements Iterable<FullFormEntry> {
+ private Concr concr;
+ private String prefix;
+ private FullFormIterator iter;
+
+ public Lexicon(Concr concr, String prefix) {
+ this.concr = concr;
+ this.prefix = prefix;
+ this.iter = lookupWordPrefix(concr, prefix);
+ }
+
+ public Iterator<FullFormEntry> iterator() {
+ if (iter == null) {
+ // If someone has asked for a second iterator over
+ // the same parse results then we have to parse again.
+ return lookupWordPrefix(concr, prefix);
+ } else {
+ FullFormIterator tmp_iter = iter;
+ iter = null;
+ return tmp_iter;
+ }
+ }
+
+ static private native FullFormIterator lookupWordPrefix(Concr concr, String prefix);
+}