From eb128110e2b763ff2e59f3b5a16770baa520f0a3 Mon Sep 17 00:00:00 2001 From: malayaleecoder Date: Sun, 21 Aug 2016 12:53:27 +0530 Subject: [PATCH] initial varnam keyboard commit --- java/AndroidManifest.xml | 2 +- .../src/org.smc.inputmethod/indic/Varnam.java | 17 +++++++++----- .../indic/WordComposer.java | 22 +++++++++++++++++++ 3 files changed, 35 insertions(+), 6 deletions(-) diff --git a/java/AndroidManifest.xml b/java/AndroidManifest.xml index bfb73772..b170ac48 100644 --- a/java/AndroidManifest.xml +++ b/java/AndroidManifest.xml @@ -21,7 +21,7 @@ android:versionName="2.0.4"> - + diff --git a/java/src/org.smc.inputmethod/indic/Varnam.java b/java/src/org.smc.inputmethod/indic/Varnam.java index ed932a76..56afd80e 100644 --- a/java/src/org.smc.inputmethod/indic/Varnam.java +++ b/java/src/org.smc.inputmethod/indic/Varnam.java @@ -12,7 +12,7 @@ public class Varnam{ - public String readfromurl(String input) { + public String transliterate(String input) { String starting = "https://api.varnamproject.com/tl/ml/"; String urlstring = starting + input; @@ -27,12 +27,19 @@ public String readfromurl(String input) { JSONArray dummy = json.getJSONArray("result"); return dummy.getString(0); } catch (MalformedURLException e) { - throw new RuntimeExceptio(e); + throw new RuntimeException(e); } catch (IOException e) { - throw new RuntimeExceptio(e); + throw new RuntimeException(e); } catch (JSONException e) { - throw new RuntimeExceptio(e); + throw new RuntimeException(e); } - return ""; + } + + public int getMaxKeyLength() { + return 4; + } + + public int getContextLength() { + return 2; } } diff --git a/java/src/org.smc.inputmethod/indic/WordComposer.java b/java/src/org.smc.inputmethod/indic/WordComposer.java index a5baf30a..8ee58363 100644 --- a/java/src/org.smc.inputmethod/indic/WordComposer.java +++ b/java/src/org.smc.inputmethod/indic/WordComposer.java @@ -241,6 +241,27 @@ public void applyTransliteration(final Event event) { } } + public void applyTransliterationByEngine(final Event event) { + context = ""; + final int primaryCode = event.mCodePoint; + + refreshTypedWordCache(); + + String mTypedWord = mTypedWordCache.toString(); + + if(mTransliterationEngine != null && Constants.CODE_DELETE != event.mKeyCode) { + String current = new String(Character.toChars(primaryCode)); + int startPos = mTypedWord.length() - 1 > mTransliterationEngine.getMaxKeyLength() ? mTypedWord.length() - mTransliterationEngine.getMaxKeyLength() - 1: 0; + String replacement = mTransliterationEngine.transliterate(mTypedWord); + mCombinerChain.replace(startPos + replacement.length() - 1, mTypedWord.length(), replacement); + + context += current; + if(context.length() > mTransliterationEngine.getContextLength()) { + context = context.substring(context.length() - mTransliterationEngine.getContextLength()); + } + } + } + /** * Apply a processed input event. * @@ -257,6 +278,7 @@ public void applyProcessedEvent(final Event event) { final int newIndex = size(); applyTransliteration(event); + applyTransliterationByEngine(event); refreshTypedWordCache(); mCursorPositionWithinWord = mCodePointSize;