diff --git a/scim-wnn/data/like-msime.rkt b/scim-wnn/data/like-msime.rkt index 72dde25..c28e26f 100644 --- a/scim-wnn/data/like-msime.rkt +++ b/scim-wnn/data/like-msime.rkt @@ -1,4 +1,7 @@ # utf8 +!nnMode true +$Key/Ascii null +$Key/WideAscii null a あ i い yi い diff --git a/scim-wnn/data/scim-wnn-def.rkt b/scim-wnn/data/scim-wnn-def.rkt index 98c0c05..294c489 100644 --- a/scim-wnn/data/scim-wnn-def.rkt +++ b/scim-wnn/data/scim-wnn-def.rkt @@ -1,5 +1,7 @@ # utf8 - +!nnMode false +$Key/Ascii q +$Key/WideAscii Shift+Q a あ i い u う diff --git a/scim-wnn/src/romkan.cpp b/scim-wnn/src/romkan.cpp index c08167c..35258d5 100644 --- a/scim-wnn/src/romkan.cpp +++ b/scim-wnn/src/romkan.cpp @@ -53,13 +53,10 @@ /*! - \fn Romkan::loadTable(const String &filename) + \fn Romkan::loadTable(const String &filename, bool inc) */ -void Romkan::loadTable(const String &filename) +void Romkan::loadTable(const String &filename, bool inc) { - RomkanTable.clear(); - keepTable.clear(); - FILE *f = fopen(filename.c_str(),"r"); if (!f) return; @@ -68,11 +65,15 @@ if(fgets(s,256,f) == NULL) break; String k,r; unsigned int i = 0; + bool ex = false; for(;s[i];i ++) { if (s[i] == ' ') { if (k.size()) break; else continue; } + if ((s[i] == '!') || (s[i] == '$') ||(s[i] == '%')) { + if (!k.size()) ex = true; + } if (s[i] == '#') break; if ((s[i] == '\\') && (s[i + 1] != 0)) { i ++; @@ -92,6 +93,20 @@ } r += s[i]; } + if (k[0] == '%') { + loadTable(k.substr(1),true); + continue; + } + if ((k[0] == '$') && (!inc)) { + setConfigFromTable(k.substr(1),r); + continue; + } + if ((k[0] == '!') && (!inc)) { + bool v = true; + if ((r == "false") || (r == "FALSE") || (r == "0")) v = false; + setConfigFromTable(k.substr(1),v); + continue; + } if (!r.size()) continue; RomkanTable.insert(pair(k,utf8_mbstowcs(r))); @@ -107,11 +122,58 @@ } + +/*! + \fn Romkan::setConfigFromTable(const String &name, const String &value) + */ +void Romkan::setConfigFromTable(const String &name, const String &value) +{ + if (name.substr(0,4) == String("Key/")) { + config->write(String(SCIM_CONFIG_WNN_ROMKAN_PREFIX) + name,value); + } +} + + +/*! + \fn Romkan::setConfigFromTable(const String &name, bool value) + */ +void Romkan::setConfigFromTable(const String &name, bool value) +{ + config->write(String(SCIM_CONFIG_WNN_ROMKAN_PREFIX) + name,value); +} + + + /*! \fn Romkan::init() */ void Romkan::init() { + RomkanTable.clear(); + keepTable.clear(); + + String rk_table = config->read(SCIM_CONFIG_WNN_ROMKAN_TABLE_FILE,String(SCIM_DEFAULT_WNN_ROMKAN_TABLE_FILE)); + + if (rk_table.size()) { + loadTable(rk_table); + } else { + unsigned int i = 0; + while(strcmp(_RomkanTable[i],"") != 0) { + WideString w; + String s = _RomkanTable[i]; + iconvert.convert(w,String(_RomkanTable[i + 1])); + RomkanTable.insert(pair(s,w)); + + for(unsigned int j = s.length();j > 1;j --) { + String k = s.substr(0,j - 1); + if ((keepTable.find(k) == keepTable.end()) && (RomkanTable.find(k) == RomkanTable.end())) { + keepTable.insert(k); + } + } + i += 2; + } + } + nnMode = config->read(SCIM_CONFIG_WNN_ROMKAN_NNMODE,SCIM_DEFAULT_WNN_ROMKAN_NNMODE); scim_string_to_key_list(key_ascii_mode, config->read(String(SCIM_CONFIG_WNN_KEY_ROMKAN_ASCIIMODE), @@ -119,31 +181,6 @@ scim_string_to_key_list(key_wascii_mode, config->read(String(SCIM_CONFIG_WNN_KEY_ROMKAN_WASCIIMODE), String(SCIM_DEFAULT_WNN_KEY_ROMKAN_WASCIIMODE))); - String rk_table = config->read(SCIM_CONFIG_WNN_ROMKAN_TABLE_FILE,String(SCIM_DEFAULT_WNN_ROMKAN_TABLE_FILE)); - - if (rk_table.size()) { - loadTable(rk_table); - return; - } - - RomkanTable.clear(); - keepTable.clear(); - - unsigned int i = 0; - while(strcmp(_RomkanTable[i],"") != 0) { - WideString w; - String s = _RomkanTable[i]; - iconvert.convert(w,String(_RomkanTable[i + 1])); - RomkanTable.insert(pair(s,w)); - - for(unsigned int j = s.length();j > 1;j --) { - String k = s.substr(0,j - 1); - if ((keepTable.find(k) == keepTable.end()) && (RomkanTable.find(k) == RomkanTable.end())) { - keepTable.insert(k); - } - } - i += 2; - } } @@ -471,4 +508,3 @@ - diff --git a/scim-wnn/src/romkan.h b/scim-wnn/src/romkan.h index 55199f0..a393c07 100644 --- a/scim-wnn/src/romkan.h +++ b/scim-wnn/src/romkan.h @@ -68,7 +68,9 @@ WideString eval(); WideString insert(char k); void init(); - void loadTable(const String &filename); + void loadTable(const String &filename, bool inc = false); + void setConfigFromTable(const String &name, const String &value); + void setConfigFromTable(const String &name, bool value); protected: String buf; diff --git a/scim-wnn/src/scim_wnn_def.h b/scim-wnn/src/scim_wnn_def.h index b5565d7..b8adc8a 100644 --- a/scim-wnn/src/scim_wnn_def.h +++ b/scim-wnn/src/scim_wnn_def.h @@ -111,6 +111,7 @@ // Romkan +#define SCIM_CONFIG_WNN_ROMKAN_PREFIX "/IMEngine/Wnn/Romkan/" #define SCIM_CONFIG_WNN_ROMKAN_NNMODE "/IMEngine/Wnn/Romkan/nnMode" #define SCIM_DEFAULT_WNN_ROMKAN_NNMODE false #define SCIM_CONFIG_WNN_ROMKAN_TABLE_FILE "/IMEngine/Wnn/Romkan/TableFile"