#undef LOG_TAG
#define LOG_TAG "ISE_DEFAULT"
#include <sclcommon.h> // scl structures need
-#include <libxml/parser.h>
#include <vector>
#include <string>
#include <assert.h>
#define LANG_TABLE_XML_PATH LAYOUTDIR"/mobile/ise_lang_table.xml"
#endif
-typedef struct Keyboard_UUID {
- std::string name;
- std::string uuid;
-} Keyboard_UUID;
-
-static std::vector<Keyboard_UUID> vec_keyboard_uuid;
-
-class Ise_Lang {
- public:
- Ise_Lang();
- ~Ise_Lang();
- SDK_ISE_LANG_TABLE m_table[MAX_LANG_TABLE_SIZE];
- int m_size;
- private:
- void parsing_languages();
- void parsing_lang_table(const xmlNodePtr);
- void parsing_keyboard_uuid_table(const xmlNodePtr);
-};
-
-Ise_Lang::~Ise_Lang() {
+ISELangTableMgr::ISELangTableMgr() {
+ memset(m_table, 0x00, sizeof(ISE_LANG_TABLE) * MAX_LANG_TABLE_SIZE);
+ m_size = 0;
+ parse_languages();
+}
+
+ISELangTableMgr::~ISELangTableMgr() {
for (int i = 0; i < m_size; ++i) {
if (m_table[i].language)
free(m_table[i].language);
return bret;
}
-Ise_Lang::Ise_Lang() {
- memset(m_table, 0x00, sizeof(SDK_ISE_LANG_TABLE) * MAX_LANG_TABLE_SIZE);
- parsing_languages();
-}
-
void
-Ise_Lang::parsing_languages() {
+ISELangTableMgr::parse_languages() {
xmlDocPtr doc;
xmlNodePtr cur_node;
cur_node = cur_node->next;
continue;
} else if (0 == xmlStrcmp(cur_node->name, (const xmlChar *)"keyboard_uuid_table")) {
- parsing_keyboard_uuid_table(cur_node);
+ parse_keyboard_uuid_table(cur_node);
} else if (0 == xmlStrcmp(cur_node->name, (const xmlChar *)"language_table")) {
- parsing_lang_table(cur_node);
+ parse_lang_table(cur_node);
}
cur_node = cur_node->next;
}
}
void
-Ise_Lang::parsing_keyboard_uuid_table(const xmlNodePtr p_node) {
+ISELangTableMgr::parse_keyboard_uuid_table(const xmlNodePtr p_node) {
assert(p_node != NULL);
if (0 != xmlStrcmp(p_node->name, (const xmlChar *)"keyboard_uuid_table")) {
LOGD("parsing-keyboard_uuid_table error.\n");
rec.name = get_prop_str(cur_node, "name");
rec.uuid = get_prop_str(cur_node, "uuid");
if (!rec.name.empty() && !rec.uuid.empty()) {
- vec_keyboard_uuid.push_back(rec);
+ m_vec_keyboard_uuid.push_back(rec);
}
}
cur_node = cur_node->next;
}
void
-Ise_Lang::parsing_lang_table(const xmlNodePtr p_node) {
+ISELangTableMgr::parse_lang_table(const xmlNodePtr p_node) {
assert(p_node != NULL);
if (0 != xmlStrcmp(p_node->name, (const xmlChar *)"language_table")) {
m_table[m_size].main_keyboard_name = (sclchar *)strdup("abc");
}
- std::string uuid = find_uuid(vec_keyboard_uuid, get_prop_str(cur_node, "keyboard_ise_uuid"));
+ std::string uuid = find_uuid(m_vec_keyboard_uuid, get_prop_str(cur_node, "keyboard_ise_uuid"));
m_table[m_size].keyboard_ise_uuid = get_str(uuid);
xmlChar* country_code_URL = xmlGetProp(cur_node, (const xmlChar*)"country_code_URL");
m_table[m_size].country_code_URL = (sclchar*)country_code_URL;
}
}
-static Ise_Lang ise_lang;
+ISELangTableMgr*
+ISELangTableMgr::get_instance()
+{
+ static ISELangTableMgr instance;
+ return &instance;
+}
-SDK_ISE_LANG_TABLE* get_lang_table() {
- return ise_lang.m_table;
+ISE_LANG_TABLE*
+ISELangTableMgr::get_lang_table()
+{
+ return m_table;
}
-int get_lang_table_size() {
- return ise_lang.m_size;
+int
+ISELangTableMgr::get_lang_table_size()
+{
+ return m_size;
}
/* Our CSDKISE instance will handle the following input modes... */
sclint loop;
- for (loop = 0;loop < get_lang_table_size();loop++) {
- INPUT_MODE_INFO input_mode_QTY;
- input_mode_QTY.name = get_lang_table()[loop].inputmode_QTY;
- input_mode_QTY.display_name = get_lang_table()[loop].inputmode_QTY_name;
- LANGUAGE_INFO language;
- language.name = get_lang_table()[loop].language;
- language.display_name = get_lang_table()[loop].language_name;
- if (get_lang_table()[loop].locale_string) {
- language.locale_string = get_lang_table()[loop].locale_string;
+ ISE_LANG_TABLE *table = NULL;
+ ISELangTableMgr *lang_table_mgr = ISELangTableMgr::get_instance();
+ if (lang_table_mgr) table = lang_table_mgr->get_lang_table();
+
+ if (lang_table_mgr && table) {
+ for (loop = 0;loop < lang_table_mgr->get_lang_table_size();loop++) {
+ INPUT_MODE_INFO input_mode_QTY;
+ input_mode_QTY.name = table[loop].inputmode_QTY;
+ input_mode_QTY.display_name = table[loop].inputmode_QTY_name;
+ LANGUAGE_INFO language;
+ language.name = table[loop].language;
+ language.display_name = table[loop].language_name;
+ if (table[loop].locale_string) {
+ language.locale_string = table[loop].locale_string;
+ }
+ language.callback = this;
+ language.input_modes.push_back(input_mode_QTY);
+ language.priority = LANGAUGE_PRIORITY_DEFAULT;
+ language.resource_file = MAIN_ENTRY_XML_PATH;
+ language.is_latin_language = table[loop].is_latin_language;
+ language.accepts_caps_mode = table[loop].accepts_caps_mode;
+
+ /* These variable should be read from stored setting values */
+ language.enabled = FALSE;
+ language.selected_input_mode = input_mode_QTY.name;
+
+ _language_manager.add_language(language);
}
- language.callback = this;
- language.input_modes.push_back(input_mode_QTY);
- language.priority = LANGAUGE_PRIORITY_DEFAULT;
- language.resource_file = MAIN_ENTRY_XML_PATH;
- language.is_latin_language = get_lang_table()[loop].is_latin_language;
- language.accepts_caps_mode = get_lang_table()[loop].accepts_caps_mode;
-
- /* These variable should be read from stored setting values */
- language.enabled = FALSE;
- language.selected_input_mode = input_mode_QTY.name;
-
- _language_manager.add_language(language);
}
}
SCLEventReturnType on_event_key_clicked(SclUIEventDesc event_desc);
const char *url_postfixes[] = {".co.uk", ".or.uk", ".ac.uk", ".go.uk"};
const char *replace_target = "uk";
- if (language) {
+ ISE_LANG_TABLE *table = NULL;
+ ISELangTableMgr *lang_table_mgr = ISELangTableMgr::get_instance();
+ if (lang_table_mgr) table = lang_table_mgr->get_lang_table();
+ if (lang_table_mgr && table && language) {
LOGD("language : %s\n", language);
sclint loop;
- for (loop = 0;loop < get_lang_table_size();loop++) {
- if (strcmp(language, get_lang_table()[loop].language) == 0) {
+ for (loop = 0;loop < lang_table_mgr->get_lang_table_size();loop++) {
+ if (strcmp(language, table[loop].language) == 0) {
if (g_ui) {
- if (get_lang_table()[loop].keyboard_ise_uuid) {
- g_core.set_keyboard_ise_by_uuid(get_lang_table()[loop].keyboard_ise_uuid);
- g_core.send_imengine_event(-1, get_lang_table()[loop].keyboard_ise_uuid,
- get_lang_table()[loop].language_command, get_lang_table()[loop].language_code);
+ if (table[loop].keyboard_ise_uuid) {
+ g_core.set_keyboard_ise_by_uuid(table[loop].keyboard_ise_uuid);
+ g_core.send_imengine_event(-1, table[loop].keyboard_ise_uuid,
+ table[loop].language_command, table[loop].language_code);
flush_imengine(language);
}
std::string::size_type offset = postfix.find(replace_target, 0);
if (offset != postfix.npos) {
- postfix.replace(offset, strlen(replace_target), get_lang_table()[loop].country_code_URL);
+ postfix.replace(offset, strlen(replace_target), table[loop].country_code_URL);
}
g_ui->set_string_substitution(url_postfixes[inner_loop], postfix.c_str());
#ifdef _WEARABLE
/* Replace LANGUAGE_STRING with language name abbreviation */
- g_ui->set_string_substitution(LANGUAGE_STRING, get_lang_table()[loop].language_name_abbr);
+ g_ui->set_string_substitution(LANGUAGE_STRING, table[loop].language_name_abbr);
#else
if (g_keyboard_state.layout == ISE_LAYOUT_STYLE_EMAIL || g_keyboard_state.layout == ISE_LAYOUT_STYLE_URL) {
/* Replace LANGUAGE_STRING with language name abbreviation */
- g_ui->set_string_substitution(LANGUAGE_STRING, get_lang_table()[loop].language_name_abbr);
+ g_ui->set_string_substitution(LANGUAGE_STRING, table[loop].language_name_abbr);
} else {
/* Replace LANGUAGE_STRING with localized language name */
- g_ui->set_string_substitution(LANGUAGE_STRING, get_lang_table()[loop].language_name);
+ g_ui->set_string_substitution(LANGUAGE_STRING, table[loop].language_name);
}
#endif
/* Change main_keyboard_name with localized language name */
- if (get_lang_table()[loop].main_keyboard_name) {
- g_ui->set_string_substitution(PLACEHOLDER_MAIN_KEYBOARD_NAME, get_lang_table()[loop].main_keyboard_name);
+ if (table[loop].main_keyboard_name) {
+ g_ui->set_string_substitution(PLACEHOLDER_MAIN_KEYBOARD_NAME, table[loop].main_keyboard_name);
}
/* Now we update the whole screen */
{
sclboolean ret = FALSE;
- if (language) {
+ ISE_LANG_TABLE *table = NULL;
+ ISELangTableMgr *lang_table_mgr = ISELangTableMgr::get_instance();
+ if (lang_table_mgr) table = lang_table_mgr->get_lang_table();
+
+ if (language && lang_table_mgr && table) {
sclint loop;
- for (loop = 0;loop < get_lang_table_size();loop++) {
- if (strcmp(language, get_lang_table()[loop].language) == 0) {
+ for (loop = 0;loop < lang_table_mgr->get_lang_table_size();loop++) {
+ if (strcmp(language, table[loop].language) == 0) {
flush_imengine(language);
ret = TRUE;
}
{
sclboolean ret = FALSE;
- if (language) {
+ ISE_LANG_TABLE *table = NULL;
+ ISELangTableMgr *lang_table_mgr = ISELangTableMgr::get_instance();
+ if (lang_table_mgr) table = lang_table_mgr->get_lang_table();
+
+ if (language && lang_table_mgr && table) {
sclint loop;
- for (loop = 0; loop < get_lang_table_size(); loop++) {
- if (strcmp(language, get_lang_table()[loop].language) == 0) {
+ for (loop = 0; loop < lang_table_mgr->get_lang_table_size(); loop++) {
+ if (strcmp(language, table[loop].language) == 0) {
flush_imengine(language);
ret = TRUE;
}
{
if (language == NULL) return -1;
- for (int loop = 0;loop < get_lang_table_size();loop++) {
- if (strcmp(language, get_lang_table()[loop].language) == 0) {
- if (get_lang_table()[loop].keyboard_ise_uuid) {
- return loop;
+ ISE_LANG_TABLE *table = NULL;
+ ISELangTableMgr *lang_table_mgr = ISELangTableMgr::get_instance();
+ if (lang_table_mgr) table = lang_table_mgr->get_lang_table();
+
+ if (language && lang_table_mgr && table) {
+ for (int loop = 0;loop < lang_table_mgr->get_lang_table_size();loop++) {
+ if (strcmp(language, table[loop].language) == 0) {
+ if (table[loop].keyboard_ise_uuid) {
+ return loop;
+ }
}
}
}
{
bool bRet = false;
- if (g_keyboard_state.prev_modifier == KEY_MODIFIER_MULTITAP_START ||
- g_keyboard_state.prev_modifier == KEY_MODIFIER_MULTITAP_REPEAT) {
- ise_update_preedit_string("");
- }
- g_keyboard_state.multitap_value = "";
- g_keyboard_state.prev_modifier = KEY_MODIFIER_NONE;
-
- int lang_id = get_lang_id(language);
- if (lang_id != -1) {
- if (get_lang_table()[lang_id].flush_code != 0) {
- g_core.send_imengine_event(-1, get_lang_table()[lang_id].keyboard_ise_uuid,
- get_lang_table()[lang_id].flush_command, get_lang_table()[lang_id].flush_code);
- bRet = true;
- } else {
- g_core.reset_keyboard_ise();
- bRet = true;
+ ISE_LANG_TABLE *table = NULL;
+ ISELangTableMgr *lang_table_mgr = ISELangTableMgr::get_instance();
+ if (lang_table_mgr) table = lang_table_mgr->get_lang_table();
+
+ if (language && lang_table_mgr && table) {
+ if (g_keyboard_state.prev_modifier == KEY_MODIFIER_MULTITAP_START ||
+ g_keyboard_state.prev_modifier == KEY_MODIFIER_MULTITAP_REPEAT) {
+ ise_update_preedit_string("");
+ }
+ g_keyboard_state.multitap_value = "";
+ g_keyboard_state.prev_modifier = KEY_MODIFIER_NONE;
+
+ int lang_id = get_lang_id(language);
+ if (lang_id != -1) {
+ if (table[lang_id].flush_code != 0) {
+ g_core.send_imengine_event(-1, table[lang_id].keyboard_ise_uuid,
+ table[lang_id].flush_command, table[lang_id].flush_code);
+ bRet = true;
+ } else {
+ g_core.reset_keyboard_ise();
+ bRet = true;
+ }
+ }
+ if (strcmp(_language_manager.get_current_language(), "Korean") == 0) {
+ process_korean_automata(false, SIPKEY_ERROR, true);
}
- }
- if (strcmp(_language_manager.get_current_language(), "Korean") == 0) {
- process_korean_automata(false, SIPKEY_ERROR, true);
}
return bRet;