diff --git a/scim-wnn/src/preeditor.cpp b/scim-wnn/src/preeditor.cpp index 6ab43dd..f24c796 100644 --- a/scim-wnn/src/preeditor.cpp +++ b/scim-wnn/src/preeditor.cpp @@ -19,6 +19,26 @@ ***************************************************************************/ #include "preeditor.h" +void PreEditorKeyEventList::append(const KeyEvent &k) { + push_back(k); +} + +void PreEditorKeyEventList::append(int code,int mask) { + KeyEvent k; + k.code = code; + k.mask = mask; + append(k); +} + +bool PreEditorKeyEventList::comp(const KeyEvent &k) { + for (unsigned int i = 0;i < size();i ++) { + if ((at(i).code == k.code) && (at(i).mask == k.mask)) { + return(true); + } + } + return(false); +} + PreEditor::PreEditor(ConfigPointer cfg) { iconvert.set_encoding ("EUC-JP"); diff --git a/scim-wnn/src/preeditor.h b/scim-wnn/src/preeditor.h index 0925f61..1316f67 100644 --- a/scim-wnn/src/preeditor.h +++ b/scim-wnn/src/preeditor.h @@ -50,6 +50,15 @@ /** @author TAM(Teppei Tamra) */ +class PreEditorKeyEventList : public KeyEventList +{ + // �ꥹ�Ȥ˥������٥�Ȥ��ɲä��ơ�comp(KeyEvent)��Ƚ�̡� +public: + void append(const KeyEvent &k); + void append(int code,int mask); + bool comp(const KeyEvent &k); +}; + class PreEditor{ public: PreEditor(ConfigPointer cfg); diff --git a/scim-wnn/src/romkan.cpp b/scim-wnn/src/romkan.cpp index 194304b..e027703 100644 --- a/scim-wnn/src/romkan.cpp +++ b/scim-wnn/src/romkan.cpp @@ -19,6 +19,7 @@ ***************************************************************************/ #include "romkan.h" #include "romkan_table.h" +#include "scim_wnn_def.h" #ifdef HAVE_CONFIG_H #include @@ -42,9 +43,30 @@ reset(); iconvert.set_encoding ("EUC-JP"); mode = ROMA; + init(); +} - // �����Ǥ��٤����ȤǤ�̵������ - nnMode = cfg->read(String("/IMEngine/Wnn/Romkan/nnMode"),false); + +Romkan::~Romkan() +{ +} + + +/*! + \fn Romkan::init() + */ +void Romkan::init() +{ + 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), + String(SCIM_DEFAULT_WNN_KEY_ROMKAN_ASCIIMODE))); + scim_string_to_key_list(key_wascii_mode, + config->read(String(SCIM_CONFIG_WNN_KEY_ROMKAN_WASCIIMODE), + String(SCIM_DEFAULT_WNN_KEY_ROMKAN_WASCIIMODE))); + + RomkanTable.clear(); + keepTable.clear(); unsigned int i = 0; while(strcmp(_RomkanTable[i],"") != 0) { @@ -62,15 +84,10 @@ i += 2; } - // ��α�ơ��֥������ } -Romkan::~Romkan() -{ -} - /*! @@ -121,15 +138,6 @@ break; } case ROMA: { - if (k == 'q') { - mode = ASCII; - buf.clear(); - return(text); - } else if (k == 'Q') { - mode = WASCII; - buf.clear(); - return(text); - } buf += s; text = text.substr(0,pos) + utf8_mbstowcs(s) + text.substr(pos); pos ++; @@ -370,6 +378,15 @@ (key.code == SCIM_KEY_Super_R) || (key.code == SCIM_KEY_Hyper_L) || (key.code == SCIM_KEY_Hyper_R)) return(true); + if (key_ascii_mode.comp(key)) { + mode = ASCII; + return(true); + } + if (key_wascii_mode.comp(key)) { + mode = WASCII; + return(true); + } + if (key.get_ascii_code() && (!key.is_alt_down()) && (!key.is_control_down())) { if (key.get_ascii_code() == ' ') return(false); // ��ľ���֤��٤���� @@ -390,3 +407,5 @@ { return(String(_("Roma"))); } + + diff --git a/scim-wnn/src/romkan.h b/scim-wnn/src/romkan.h index 6cd9ca6..1010000 100644 --- a/scim-wnn/src/romkan.h +++ b/scim-wnn/src/romkan.h @@ -67,6 +67,7 @@ protected: WideString eval(); WideString insert(char k); + void init(); protected: String buf; @@ -74,6 +75,7 @@ enum inputMode {ROMA,ASCII,WASCII}; inputMode mode; bool nnMode; + PreEditorKeyEventList key_ascii_mode,key_wascii_mode; map RomkanTable; set keepTable; }; diff --git a/scim-wnn/src/scim_wnn_def.h b/scim-wnn/src/scim_wnn_def.h index 7beacc7..61a09f4 100644 --- a/scim-wnn/src/scim_wnn_def.h +++ b/scim-wnn/src/scim_wnn_def.h @@ -108,5 +108,16 @@ #define SCIM_PROP_WNN_INPUTMODE "/IMEngine/Wnn/InputMode" #define SCIM_PROP_WNN_CONVERSIONMODE "/IMEngine/Wnn/ConversionMode" + +// Romkan + +#define SCIM_CONFIG_WNN_ROMKAN_NNMODE "/IMEngine/Wnn/Romkan/nnMode" +#define SCIM_DEFAULT_WNN_ROMKAN_NNMODE false +#define SCIM_CONFIG_WNN_KEY_ROMKAN_ASCIIMODE "/IMEngine/Wnn/Romkan/Key/Ascii" +#define SCIM_DEFAULT_WNN_KEY_ROMKAN_ASCIIMODE "q" +#define SCIM_CONFIG_WNN_KEY_ROMKAN_WASCIIMODE "/IMEngine/Wnn/Romkan/Key/WideAscii" +#define SCIM_DEFAULT_WNN_KEY_ROMKAN_WASCIIMODE "Shift+Q" + + #endif