From 7a227297e807ba19ae9821fe49f9e88f1ae8cc64 Mon Sep 17 00:00:00 2001 From: Kevin Martin Jose Date: Wed, 4 Mar 2015 14:39:50 +0530 Subject: [PATCH 1/7] masking working --- engine/engine.c | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/engine/engine.c b/engine/engine.c index bb59fa6..0155a35 100644 --- a/engine/engine.c +++ b/engine/engine.c @@ -155,6 +155,34 @@ ibus_varnam_engine_update_lookup_table (IBusVarnamEngine *engine) ibus_engine_update_lookup_table ((IBusEngine *) engine, engine->table, TRUE); } +static void +ibus_varnam_engine_update_lookup_table_with_text(IBusVarnamEngine *engine, gchar *text){ + varray *words; + vword *word; + int rc, i; + + if (engine->preedit->len == 0) { + ibus_engine_hide_lookup_table ((IBusEngine *) engine); + return; + } + + ibus_lookup_table_clear (engine->table); + + rc = varnam_transliterate (handle, text, &words); + if (rc != VARNAM_SUCCESS) { + g_message ("Error transliterating: %s. %s\n", text, varnam_get_last_error (handle)); + ibus_engine_hide_lookup_table ((IBusEngine *) engine); + return; + } + + for (i = 0; i < varray_length (words); i++) { + word = varray_get (words, i); + ibus_lookup_table_append_candidate (engine->table, ibus_text_new_from_string (word->text)); + } + ibus_lookup_table_append_candidate (engine->table, ibus_text_new_from_string (engine->preedit->str)); + ibus_engine_update_lookup_table ((IBusEngine *) engine, engine->table, TRUE); +} + static void ibus_varnam_engine_update_preedit (IBusVarnamEngine *engine) { @@ -332,6 +360,7 @@ ibus_varnam_engine_process_key_event (IBusEngine *engine, return FALSE; } + if (keyval <= 128) { if (varnamEngine->preedit->len == 0) { /* We are starting a new word. Now there could be a word selected in the text field @@ -343,8 +372,13 @@ ibus_varnam_engine_process_key_event (IBusEngine *engine, } g_string_insert_c (varnamEngine->preedit, varnamEngine->cursor_pos, keyval); varnamEngine->cursor_pos ++; - ibus_varnam_engine_update_preedit (varnamEngine); - ibus_varnam_engine_update_lookup_table (varnamEngine); + /*ibus_varnam_engine_update_preedit (varnamEngine);*/ + /*ibus_varnam_engine_update_lookup_table (varnamEngine);*/ + ibus_varnam_engine_update_lookup_table_with_text(varnamEngine, varnamEngine->preedit->str); + text = ibus_varnam_engine_get_candidate (varnamEngine); + /*tmp = ibus_text_new_from_printf ("%s ", ibus_text_get_text (text));*/ + ibus_engine_hide_preedit_text((IBusEngine*)varnamEngine); + ibus_engine_update_preedit_text((IBusEngine*)varnamEngine, text, varnamEngine->cursor_pos, TRUE); return TRUE; } From 8bb9f3e6da6be947a62038db8bae0593da1eb670 Mon Sep 17 00:00:00 2001 From: Kevin Martin Jose Date: Sat, 7 Mar 2015 23:25:20 +0530 Subject: [PATCH 2/7] masking and inscript working - commit corresponding to another commit in libvarnam with the same name and date --- engine/engine.c | 39 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/engine/engine.c b/engine/engine.c index 0155a35..c3abe89 100644 --- a/engine/engine.c +++ b/engine/engine.c @@ -233,12 +233,36 @@ ibus_varnam_engine_get_candidate (IBusVarnamEngine *engine) #define is_alpha(c) (((c) >= IBUS_a && (c) <= IBUS_z) || ((c) >= IBUS_A && (c) <= IBUS_Z)) +static char* +set_word_breaks() +{ + /*Maximum number of word breakers in the scheme file. + Hard coded. Might lead to bugs in the future. Change*/ + static char *list=0; + int allocated=25; + + if(list == 0) + { + list = (char*)malloc(allocated); + varnam_word_breakers(handle, list, allocated); + } + return list; +} + static gboolean is_word_break (guint keyval) { - if (keyval == 46 || keyval == 44 || keyval == 63 || keyval == 33 || keyval == 40 || keyval == 41 || keyval == 34 || keyval == 59 || keyval == 39) - return TRUE; - return FALSE; + + int i; + char *list = set_word_breaks(); + + for(i=0; list[i] != '\0'; i++) + { + if((int)list[i] == keyval) + return true; + } + + return false; } static gboolean @@ -360,7 +384,16 @@ ibus_varnam_engine_process_key_event (IBusEngine *engine, return FALSE; } + if (is_word_break (keyval)) { + text = ibus_varnam_engine_get_candidate (varnamEngine); + if (text != NULL) { + tmp = ibus_text_new_from_printf ("%s%c", ibus_text_get_text (text), keyval); + return ibus_varnam_engine_commit (varnamEngine, tmp, TRUE); + } + return FALSE; + } + if (keyval <= 128) { if (varnamEngine->preedit->len == 0) { /* We are starting a new word. Now there could be a word selected in the text field From 32acc39af2cea16993940d7601069d0432348956 Mon Sep 17 00:00:00 2001 From: Kevin Martin Jose Date: Tue, 10 Mar 2015 20:34:28 +0530 Subject: [PATCH 3/7] changing orientation to horizontal --- engine/engine.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/engine.c b/engine/engine.c index c3abe89..bb6ea5e 100644 --- a/engine/engine.c +++ b/engine/engine.c @@ -106,7 +106,7 @@ ibus_varnam_engine_init (IBusVarnamEngine *engine) engine->preedit = g_string_new (""); engine->cursor_pos = 0; engine->table = ibus_lookup_table_new (9, 0, TRUE, TRUE); - ibus_lookup_table_set_orientation (engine->table, IBUS_ORIENTATION_HORIZONTAL); + ibus_lookup_table_set_orientation (engine->table, IBUS_ORIENTATION_VERTICAL); g_object_ref_sink (engine->table); } From f2d762c1b62bc84d218355706c7a44555f8acb2e Mon Sep 17 00:00:00 2001 From: Kevin Martin Jose Date: Tue, 10 Mar 2015 20:42:49 +0530 Subject: [PATCH 4/7] adding num key navigation --- engine/engine.c | 84 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/engine/engine.c b/engine/engine.c index bb6ea5e..2b95527 100644 --- a/engine/engine.c +++ b/engine/engine.c @@ -273,6 +273,7 @@ ibus_varnam_engine_process_key_event (IBusEngine *engine, { IBusText *text, *tmp; IBusVarnamEngine *varnamEngine = (IBusVarnamEngine *) engine; + int ncandidates = 0; if (modifiers & IBUS_RELEASE_MASK) return FALSE; @@ -286,6 +287,8 @@ ibus_varnam_engine_process_key_event (IBusEngine *engine, return TRUE; } + ncandidates = ibus_lookup_table_get_number_of_candidates(varnamEngine->table); + switch (keyval) { case IBUS_space: text = ibus_varnam_engine_get_candidate (varnamEngine); @@ -347,6 +350,87 @@ ibus_varnam_engine_process_key_event (IBusEngine *engine, ibus_engine_update_lookup_table (engine, varnamEngine->table, TRUE); return TRUE; + case IBUS_0: + return TRUE; + + case IBUS_1: + if (varnamEngine->preedit->len == 0) + return FALSE; + ibus_lookup_table_set_cursor_pos(varnamEngine->table, 0); + ibus_engine_update_lookup_table(engine, varnamEngine->table, TRUE); + return TRUE; + + case IBUS_2: + if (varnamEngine->preedit->len == 0) + return FALSE; + if(ncandidates < 2) + return TRUE; + ibus_lookup_table_set_cursor_pos(varnamEngine->table, 1); + ibus_engine_update_lookup_table(engine, varnamEngine->table, TRUE); + return TRUE; + + case IBUS_3: + if (varnamEngine->preedit->len == 0) + return FALSE; + if(ncandidates < 3) + return TRUE; + ibus_lookup_table_set_cursor_pos(varnamEngine->table, 2); + ibus_engine_update_lookup_table(engine, varnamEngine->table, TRUE); + return TRUE; + + case IBUS_4: + if (varnamEngine->preedit->len == 0) + return FALSE; + if(ncandidates < 4) + return TRUE; + ibus_lookup_table_set_cursor_pos(varnamEngine->table, 3); + ibus_engine_update_lookup_table(engine, varnamEngine->table, TRUE); + return TRUE; + + case IBUS_5: + if (varnamEngine->preedit->len == 0) + return FALSE; + if(ncandidates < 5) + return TRUE; + ibus_lookup_table_set_cursor_pos(varnamEngine->table, 4); + ibus_engine_update_lookup_table(engine, varnamEngine->table, TRUE); + return TRUE; + + case IBUS_6: + if (varnamEngine->preedit->len == 0) + return FALSE; + if(ncandidates < 6) + return TRUE; + ibus_lookup_table_set_cursor_pos(varnamEngine->table, 5); + ibus_engine_update_lookup_table(engine, varnamEngine->table, TRUE); + return TRUE; + + case IBUS_7: + if (varnamEngine->preedit->len == 0) + return FALSE; + if(ncandidates < 7) + return TRUE; + ibus_lookup_table_set_cursor_pos(varnamEngine->table, 6); + ibus_engine_update_lookup_table(engine, varnamEngine->table, TRUE); + return TRUE; + + case IBUS_8: + if (varnamEngine->preedit->len == 0) + return FALSE; + if(ncandidates < 8) + return TRUE; + ibus_lookup_table_set_cursor_pos(varnamEngine->table, 7); + ibus_engine_update_lookup_table(engine, varnamEngine->table, TRUE); + return TRUE; + + case IBUS_9: + if (varnamEngine->preedit->len == 0) + return FALSE; + if(ncandidates < 9) + return TRUE; + ibus_lookup_table_set_cursor_pos(varnamEngine->table, 8); + ibus_engine_update_lookup_table(engine, varnamEngine->table, TRUE); + return TRUE; case IBUS_BackSpace: if (varnamEngine->preedit->len == 0) From a65bf4774dbbafd0752d291d6ebdc165f82672b5 Mon Sep 17 00:00:00 2001 From: Kevin Martin Jose Date: Wed, 25 Mar 2015 21:47:29 +0530 Subject: [PATCH 5/7] showing malayalam letters when pressing backspace --- engine/engine.c | 46 ++++++++++++++++++++++------------------------ 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/engine/engine.c b/engine/engine.c index 2b95527..35d23fb 100644 --- a/engine/engine.c +++ b/engine/engine.c @@ -234,31 +234,34 @@ ibus_varnam_engine_get_candidate (IBusVarnamEngine *engine) #define is_alpha(c) (((c) >= IBUS_a && (c) <= IBUS_z) || ((c) >= IBUS_A && (c) <= IBUS_Z)) static char* -set_word_breaks() +set_word_breakers() { + static char *breakerList=0; /*Maximum number of word breakers in the scheme file. Hard coded. Might lead to bugs in the future. Change*/ - static char *list=0; - int allocated=25; + int allocatedSize=1; - if(list == 0) + if(breakerList == 0) { - list = (char*)malloc(allocated); - varnam_word_breakers(handle, list, allocated); + breakerList = (char*)malloc(allocatedSize); + /*varnam_word_breakers calls realloc on breakerList if + memory allocated is too small*/ + varnam_word_breakers(handle, breakerList, allocatedSize); } - return list; + + /*Never freed. Memory leak. Fix*/ + return breakerList; } static gboolean -is_word_break (guint keyval) +is_word_breaker (guint keyval, char *breakerList) { int i; - char *list = set_word_breaks(); - for(i=0; list[i] != '\0'; i++) + for(i=0; breakerList[i] != '\0'; i++) { - if((int)list[i] == keyval) + if((int)breakerList[i] == keyval) return true; } @@ -274,6 +277,7 @@ ibus_varnam_engine_process_key_event (IBusEngine *engine, IBusText *text, *tmp; IBusVarnamEngine *varnamEngine = (IBusVarnamEngine *) engine; int ncandidates = 0; + char *breakerList=0; if (modifiers & IBUS_RELEASE_MASK) return FALSE; @@ -287,6 +291,8 @@ ibus_varnam_engine_process_key_event (IBusEngine *engine, return TRUE; } + /*A list containing all word breakers*/ + breakerList = set_word_breakers(); ncandidates = ibus_lookup_table_get_number_of_candidates(varnamEngine->table); switch (keyval) { @@ -440,6 +446,9 @@ ibus_varnam_engine_process_key_event (IBusEngine *engine, g_string_erase (varnamEngine->preedit, varnamEngine->cursor_pos, 1); ibus_varnam_engine_update_preedit (varnamEngine); ibus_varnam_engine_update_lookup_table (varnamEngine); + text = ibus_varnam_engine_get_candidate (varnamEngine); + ibus_engine_hide_preedit_text((IBusEngine*)varnamEngine); + ibus_engine_update_preedit_text((IBusEngine*)varnamEngine, text, varnamEngine->cursor_pos, TRUE); if (varnamEngine->preedit->len == 0) { /* Current backspace has cleared the preedit. Need to reset the engine state */ ibus_varnam_engine_clear_state (varnamEngine); @@ -458,7 +467,7 @@ ibus_varnam_engine_process_key_event (IBusEngine *engine, return TRUE; } - if (is_word_break (keyval)) { + if (is_word_breaker (keyval, breakerList)) { text = ibus_varnam_engine_get_candidate (varnamEngine); if (text != NULL) { tmp = ibus_text_new_from_printf ("%s%c", ibus_text_get_text (text), keyval); @@ -468,16 +477,6 @@ ibus_varnam_engine_process_key_event (IBusEngine *engine, return FALSE; } - if (is_word_break (keyval)) { - text = ibus_varnam_engine_get_candidate (varnamEngine); - if (text != NULL) { - tmp = ibus_text_new_from_printf ("%s%c", ibus_text_get_text (text), keyval); - return ibus_varnam_engine_commit (varnamEngine, tmp, TRUE); - } - - return FALSE; - } - if (keyval <= 128) { if (varnamEngine->preedit->len == 0) { /* We are starting a new word. Now there could be a word selected in the text field @@ -493,8 +492,7 @@ ibus_varnam_engine_process_key_event (IBusEngine *engine, /*ibus_varnam_engine_update_lookup_table (varnamEngine);*/ ibus_varnam_engine_update_lookup_table_with_text(varnamEngine, varnamEngine->preedit->str); text = ibus_varnam_engine_get_candidate (varnamEngine); - /*tmp = ibus_text_new_from_printf ("%s ", ibus_text_get_text (text));*/ - ibus_engine_hide_preedit_text((IBusEngine*)varnamEngine); + ibus_engine_hide_preedit_text((IBusEngine*)varnamEngine); ibus_engine_update_preedit_text((IBusEngine*)varnamEngine, text, varnamEngine->cursor_pos, TRUE); return TRUE; } From bcac8caa079e876e46cf5d0e50b9dd8261bda439 Mon Sep 17 00:00:00 2001 From: Kevin Martin Jose Date: Tue, 14 Apr 2015 23:55:17 +0530 Subject: [PATCH 6/7] Removed my code after merging navaneeths version of number navigation --- engine/engine.c | 84 ++----------------------------------------------- 1 file changed, 2 insertions(+), 82 deletions(-) diff --git a/engine/engine.c b/engine/engine.c index 42cdc88..6716b00 100644 --- a/engine/engine.c +++ b/engine/engine.c @@ -310,7 +310,7 @@ ibus_varnam_engine_process_key_event (IBusEngine *engine, IBusText *text, *tmp; IBusVarnamEngine *varnamEngine = (IBusVarnamEngine *) engine; int ncandidates = 0; - char *breakerList=0; + char *breakerList; if (modifiers & IBUS_RELEASE_MASK) return FALSE; @@ -389,87 +389,6 @@ ibus_varnam_engine_process_key_event (IBusEngine *engine, ibus_engine_update_lookup_table (engine, varnamEngine->table, TRUE); return TRUE; - case IBUS_0: - return TRUE; - - case IBUS_1: - if (varnamEngine->preedit->len == 0) - return FALSE; - ibus_lookup_table_set_cursor_pos(varnamEngine->table, 0); - ibus_engine_update_lookup_table(engine, varnamEngine->table, TRUE); - return TRUE; - - case IBUS_2: - if (varnamEngine->preedit->len == 0) - return FALSE; - if(ncandidates < 2) - return TRUE; - ibus_lookup_table_set_cursor_pos(varnamEngine->table, 1); - ibus_engine_update_lookup_table(engine, varnamEngine->table, TRUE); - return TRUE; - - case IBUS_3: - if (varnamEngine->preedit->len == 0) - return FALSE; - if(ncandidates < 3) - return TRUE; - ibus_lookup_table_set_cursor_pos(varnamEngine->table, 2); - ibus_engine_update_lookup_table(engine, varnamEngine->table, TRUE); - return TRUE; - - case IBUS_4: - if (varnamEngine->preedit->len == 0) - return FALSE; - if(ncandidates < 4) - return TRUE; - ibus_lookup_table_set_cursor_pos(varnamEngine->table, 3); - ibus_engine_update_lookup_table(engine, varnamEngine->table, TRUE); - return TRUE; - - case IBUS_5: - if (varnamEngine->preedit->len == 0) - return FALSE; - if(ncandidates < 5) - return TRUE; - ibus_lookup_table_set_cursor_pos(varnamEngine->table, 4); - ibus_engine_update_lookup_table(engine, varnamEngine->table, TRUE); - return TRUE; - - case IBUS_6: - if (varnamEngine->preedit->len == 0) - return FALSE; - if(ncandidates < 6) - return TRUE; - ibus_lookup_table_set_cursor_pos(varnamEngine->table, 5); - ibus_engine_update_lookup_table(engine, varnamEngine->table, TRUE); - return TRUE; - - case IBUS_7: - if (varnamEngine->preedit->len == 0) - return FALSE; - if(ncandidates < 7) - return TRUE; - ibus_lookup_table_set_cursor_pos(varnamEngine->table, 6); - ibus_engine_update_lookup_table(engine, varnamEngine->table, TRUE); - return TRUE; - - case IBUS_8: - if (varnamEngine->preedit->len == 0) - return FALSE; - if(ncandidates < 8) - return TRUE; - ibus_lookup_table_set_cursor_pos(varnamEngine->table, 7); - ibus_engine_update_lookup_table(engine, varnamEngine->table, TRUE); - return TRUE; - - case IBUS_9: - if (varnamEngine->preedit->len == 0) - return FALSE; - if(ncandidates < 9) - return TRUE; - ibus_lookup_table_set_cursor_pos(varnamEngine->table, 8); - ibus_engine_update_lookup_table(engine, varnamEngine->table, TRUE); - return TRUE; case IBUS_BackSpace: if (varnamEngine->preedit->len == 0) @@ -498,6 +417,7 @@ ibus_varnam_engine_process_key_event (IBusEngine *engine, ibus_varnam_engine_update_lookup_table (varnamEngine); } return TRUE; + case IBUS_1: return ibus_varnam_engine_commit_candidate_at (varnamEngine, 0); case IBUS_2: From a6e8f9056d47028571e6611b3b2092fbc51cab13 Mon Sep 17 00:00:00 2001 From: Kevin Martin Jose Date: Wed, 15 Apr 2015 00:25:08 +0530 Subject: [PATCH 7/7] Refactored usage of get_word_breakers --- engine/engine.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/engine/engine.c b/engine/engine.c index 6716b00..27846b8 100644 --- a/engine/engine.c +++ b/engine/engine.c @@ -34,6 +34,7 @@ struct _IBusVarnamEngine { GString *preedit; gint cursor_pos; IBusLookupTable *table; + char *breakerList; }; struct _IBusVarnamEngineClass { @@ -45,7 +46,7 @@ struct _IBusVarnamEngineClass { /*static void ibus_varnam_engine_init (IBusVarnamEngine *engine);*/ static void ibus_varnam_engine_destroy (IBusVarnamEngine *engine); static gboolean ibus_varnam_engine_process_key_event (IBusEngine *engine, guint keyval, guint keycode, guint modifiers); - +static char* get_word_breakers(); /*[>static void ibus_varnam_engine_focus_in (IBusEngine *engine);<]*/ /*static void ibus_varnam_engine_focus_out (IBusEngine *engine);*/ /*static void ibus_varnam_engine_reset (IBusEngine *engine);*/ @@ -109,6 +110,7 @@ ibus_varnam_engine_init (IBusVarnamEngine *engine) engine->preedit = g_string_new (""); engine->cursor_pos = 0; engine->table = ibus_lookup_table_new (9, 0, TRUE, TRUE); + engine->breakerList = get_word_breakers(); ibus_lookup_table_set_orientation (engine->table, IBUS_ORIENTATION_VERTICAL); g_object_ref_sink (engine->table); @@ -267,11 +269,9 @@ ibus_varnam_engine_commit_candidate_at (IBusVarnamEngine *engine, guint index) #define is_alpha(c) (((c) >= IBUS_a && (c) <= IBUS_z) || ((c) >= IBUS_A && (c) <= IBUS_Z)) static char* -set_word_breakers() +get_word_breakers() { static char *breakerList=0; - /*Maximum number of word breakers in the scheme file. - Hard coded. Might lead to bugs in the future. Change*/ int allocatedSize=1; if(breakerList == 0) @@ -282,7 +282,6 @@ set_word_breakers() varnam_word_breakers(handle, breakerList, allocatedSize); } - /*Never freed. Memory leak. Fix*/ return breakerList; } @@ -310,7 +309,6 @@ ibus_varnam_engine_process_key_event (IBusEngine *engine, IBusText *text, *tmp; IBusVarnamEngine *varnamEngine = (IBusVarnamEngine *) engine; int ncandidates = 0; - char *breakerList; if (modifiers & IBUS_RELEASE_MASK) return FALSE; @@ -324,8 +322,6 @@ ibus_varnam_engine_process_key_event (IBusEngine *engine, return TRUE; } - /*A list containing all word breakers*/ - breakerList = set_word_breakers(); ncandidates = ibus_lookup_table_get_number_of_candidates(varnamEngine->table); switch (keyval) { @@ -457,7 +453,7 @@ ibus_varnam_engine_process_key_event (IBusEngine *engine, } - if (is_word_breaker (keyval, breakerList)) { + if (is_word_breaker (keyval, varnamEngine->breakerList)) { text = ibus_varnam_engine_get_candidate (varnamEngine); if (text != NULL) { tmp = ibus_text_new_from_printf ("%s%c", ibus_text_get_text (text), keyval);