diff --git a/scim-wnn/src/romkan.cpp b/scim-wnn/src/romkan.cpp index db4d14a..36aa55b 100644 --- a/scim-wnn/src/romkan.cpp +++ b/scim-wnn/src/romkan.cpp @@ -32,7 +32,6 @@ } - /*! \fn Romkan::getPos() */ @@ -125,12 +124,12 @@ // �ơ��֥�򸡺��������Ϥ��롣 unsigned int i = 0; while(RomkanTable[i] != "") { - if (buf == RomkanTable[i]) { - if (RomkanTable[i + 1] == "") { + if (buf == String(RomkanTable[i])) { + if (String(RomkanTable[i + 1]) == "") { return(text); // ��α���롣 } WideString w; - iconvert.convert(w,RomkanTable[i + 1]); + iconvert.convert(w,String(RomkanTable[i + 1])); text = text.substr(0,pos - buf.length()) + w + text.substr(pos); pos = pos - buf.length() + w.length(); buf.clear(); @@ -193,3 +192,56 @@ if (getPos() == getTextLength()) return; text = text.substr(0,pos) + text.substr(pos + 1); } + + +/*! + \fn Romkan::convHiraKata(WideString &t) + */ +void Romkan::convHiraKata(WideString &t) +{ + WideString start_c,end_c,conv_c; + iconvert.convert(start_c,String("��")); + iconvert.convert(end_c,String("��")); + iconvert.convert(conv_c,String("��")); + for(unsigned int i = 0;i < t.size();i ++) { + if ((t[i] >= start_c[0]) && (t[i] <= end_c[0])) + t[i] = t[i] - start_c[0] + conv_c[0]; + } + return; +} + + +/*! + \fn Romkan::convKataHira(WideString &t) + */ +void Romkan::convKataHira(WideString &t) +{ + WideString start_c,end_c,conv_c; + iconvert.convert(start_c,String("��")); + iconvert.convert(end_c,String("��")); + iconvert.convert(conv_c,String("��")); + for(unsigned int i = 0;i < t.size();i ++) { + if ((t[i] >= start_c[0]) && (t[i] <= end_c[0])) + t[i] = t[i] - start_c[0] + conv_c[0]; + } + return; + +} + + +/*! + \fn Romkan::hiraKata() + */ +void Romkan::hiraKata() +{ + convHiraKata(text); +} + + +/*! + \fn Romkan::kataHira() + */ +void Romkan::kataHira() +{ + convKataHira(text); +} diff --git a/scim-wnn/src/romkan.h b/scim-wnn/src/romkan.h index f0a9d89..649d4be 100644 --- a/scim-wnn/src/romkan.h +++ b/scim-wnn/src/romkan.h @@ -21,9 +21,11 @@ #define ROMKAN_H #define Uses_SCIM_ICONV +#include #include #include +using namespace std; using namespace scim; /** @@ -44,6 +46,10 @@ WideString getText(bool hosei = false); void backspace(); void del(); + void convHiraKata(WideString &t); + void convKataHira(WideString &t); + void hiraKata(); + void kataHira(); protected: WideString text; diff --git a/scim-wnn/src/romkan_table.h b/scim-wnn/src/romkan_table.h index e7511bc..cd6795d 100644 --- a/scim-wnn/src/romkan_table.h +++ b/scim-wnn/src/romkan_table.h @@ -21,7 +21,7 @@ // ���޻������Ѵ��ơ��֥롣 // �������ʤΤǥߥ�/��­�β�ǽ�����ꡣ -String RomkanTable[] = { +const char RomkanTable[][6] = { // "�ɤ�", "�Ѵ�", // ("�Ѵ�"������ξ�����α��"�ɤ�"����ϥ����ߥ͡���) "a", "��", diff --git a/scim-wnn/src/scim_wnn_def.h b/scim-wnn/src/scim_wnn_def.h index 4a9e40e..45e9ea2 100644 --- a/scim-wnn/src/scim_wnn_def.h +++ b/scim-wnn/src/scim_wnn_def.h @@ -53,6 +53,10 @@ #define SCIM_DEFAULT_WNN_KEY_LOOKUPPAGEUP "Page_Up" #define SCIM_CONFIG_WNN_KEY_LOOKUPPAGEDOWN "/IMEngine/Wnn/Key/LookupPageDown" #define SCIM_DEFAULT_WNN_KEY_LOOKUPPAGEDOWN "Page_Down" +#define SCIM_CONFIG_WNN_KEY_CONVERT_HIRAGANA "/IMEngine/Wnn/Key/ConvertHiragana" +#define SCIM_DEFAULT_WNN_KEY_CONVERT_HIRAGANA "Alt+h" +#define SCIM_CONFIG_WNN_KEY_CONVERT_KATAKANA "/IMEngine/Wnn/Key/ConvertKatakana" +#define SCIM_DEFAULT_WNN_KEY_CONVERT_KATAKANA "Alt+k" #define SCIM_CONFIG_WNN_ALP "/IMEngine/Wnn/AutoLookupPopup" #define SCIM_DEFAULT_WNN_ALP 3 diff --git a/scim-wnn/src/scim_wnn_imengine.cpp b/scim-wnn/src/scim_wnn_imengine.cpp index 64b5207..448ec96 100644 --- a/scim-wnn/src/scim_wnn_imengine.cpp +++ b/scim-wnn/src/scim_wnn_imengine.cpp @@ -250,6 +250,12 @@ scim_string_to_key_list(k_lookup_pagedown, _scim_config->read(String(SCIM_CONFIG_WNN_KEY_LOOKUPPAGEDOWN), String(SCIM_DEFAULT_WNN_KEY_LOOKUPPAGEDOWN))); + scim_string_to_key_list(k_convert_hiragana, + _scim_config->read(String(SCIM_CONFIG_WNN_KEY_CONVERT_HIRAGANA), + String(SCIM_DEFAULT_WNN_KEY_CONVERT_HIRAGANA))); + scim_string_to_key_list(k_convert_katakana, + _scim_config->read(String(SCIM_CONFIG_WNN_KEY_CONVERT_KATAKANA), + String(SCIM_DEFAULT_WNN_KEY_CONVERT_KATAKANA))); } @@ -329,6 +335,24 @@ hide_preedit_string(); return(true); } else + if (k_convert_hiragana.comp(key)) { + if (!m_rk.getTextLength()) { + return(false); + } + m_rk.kataHira(); + update_preedit_string(m_rk.getText()); + update_preedit_caret(m_rk.getPos()); + return(true); + } else + if (k_convert_katakana.comp(key)) { + if (!m_rk.getTextLength()) { + return(false); + } + m_rk.hiraKata(); + update_preedit_string(m_rk.getText()); + update_preedit_caret(m_rk.getPos()); + return(true); + } else if (isprint(key.code)) { if (key.mask & (SCIM_KEY_AltMask | SCIM_KEY_ControlMask)) return(false); show_preedit_string(); diff --git a/scim-wnn/src/scim_wnn_imengine.h b/scim-wnn/src/scim_wnn_imengine.h index 9e1e05a..eef64f3 100644 --- a/scim-wnn/src/scim_wnn_imengine.h +++ b/scim-wnn/src/scim_wnn_imengine.h @@ -115,6 +115,8 @@ k_lookup_popup, // �������ɽ�� k_lookup_pageup, // ����������� k_lookup_pagedown, // ����������� + k_convert_hiragana, // �Ҥ餬���Ѵ� + k_convert_katakana, // ���������Ѵ� k_dummy; };