diff --git a/scim-wnn/src/preeditor.cpp b/scim-wnn/src/preeditor.cpp index d3e04e3..5fc0a4c 100644 --- a/scim-wnn/src/preeditor.cpp +++ b/scim-wnn/src/preeditor.cpp @@ -24,7 +24,33 @@ iconvert.set_encoding ("EUC-JP"); config = cfg; if (!convChars.size()) - iconvert.convert(convChars,String("���󥡥�!~�������")); + iconvert.convert(convChars,String("���󥡥�!~���Ѥ��")); + if (!hKanaChars.size()) { + // ���������ɤ���ʳ���ˡ�פ��Ĥ��ʤ��衼 + const String hKana[] = { + "��","��","��","��","��","��","��","��","��","��","��","����","��","����","��", + "����","��","����","��","����","��","����","��","����","��","����","��","����","��", + "����","��","����","��","����","��","��","�Ž�","��","�Î�","��","�Ď�","��","��","��", + "��","��","��","�ʎ�","�ʎ�","��","�ˎ�","�ˎ�","��","�̎�","�̎�","��","�͎�","�͎�", + "��","�Ύ�","�Ύ�","��","��","��","��","��","��","��","��","��","��","��","��", + "��","��","��","��","��","��","��","��","��","��","","","","","","","", + "��","��","","","","", + "��","��","��","��","��","��","��","��","��","��","��","����","��","����","��", + "����","��","����","��","����","��","����","��","����","��","����","��","����","��", + "����","��","����","��","����","��","��","�Ž�","��","�Î�","��","�Ď�","��","��","��", + "��","��","��","�ʎ�","�ʎ�","��","�ˎ�","�ˎ�","��","�̎�","�̎�","��","�͎�","�͎�", + "��","�Ύ�","�Ύ�","��","��","��","��","��","��","��","��","��","��","��","��", + "��","��","��","��","��","��","��","��","��","��","����","��","��","","","","", + "","-","���܎؎��ގ��ގَ�" + }; + for(unsigned int i = 0;hKana[i] != "���܎؎��ގ��ގَ�";i ++) { + if (hKana[i] != "") { + WideString k; + iconvert.convert(k,hKana[i]); + hKanaChars.insert(pair(convChars[HIRA_START] + i,k)); + } + } + } } @@ -34,6 +60,7 @@ WideString PreEditor::text = WideString(); WideString PreEditor::convChars = WideString(); +map PreEditor::hKanaChars; int PreEditor::pos = 0; IConvert PreEditor::iconvert; @@ -173,8 +200,17 @@ void PreEditor::convZenHan(WideString &t) { for(unsigned int i = 0;i < t.size();i ++) { - if ((t[i] >= convChars[WASCII_START]) && (t[i] <= convChars[WASCII_START])) + if ((t[i] >= convChars[WASCII_START]) && (t[i] <= convChars[WASCII_END])) t[i] = t[i] - convChars[WASCII_START] + convChars[ASCII_START]; + + // Ķ��Ⱦ�ѥ����Ѵ� + map::iterator it = hKanaChars.find(t[i]); + if (it != hKanaChars.end()) { + WideString m1 = t.substr(0,i); + WideString m2 = t.substr(i + 1); + t = m1 + it->second + m2; + i += it->second.length() - 1; + } } return; @@ -200,6 +236,23 @@ /*! + \fn PreEditor::toHalf() + */ +void PreEditor::toHalf() +{ + convZenHan(text); +} + +/*! + \fn PreEditor::toWide() + */ +void PreEditor::toWide() +{ + convHanZen(text); +} + + +/*! \fn PreEditor::keyEventHook(const KeyEvent &key) */ bool PreEditor::keyEventHook(const KeyEvent &key) diff --git a/scim-wnn/src/preeditor.h b/scim-wnn/src/preeditor.h index 921dcd6..94837de 100644 --- a/scim-wnn/src/preeditor.h +++ b/scim-wnn/src/preeditor.h @@ -22,6 +22,8 @@ #define Uses_SCIM_ICONV #define Uses_SCIM_CONFIG_BASE +#include +#include #include #include #include @@ -75,6 +77,8 @@ virtual String getName(); virtual String getPropertyName() {return(String("PreEditor"));}; virtual void setText(const WideString &t); + virtual void toWide(); + virtual void toHalf(); protected: static WideString text; @@ -82,6 +86,7 @@ static IConvert iconvert; ConfigPointer config; static WideString convChars; + static map hKanaChars; }; diff --git a/scim-wnn/src/romkan.cpp b/scim-wnn/src/romkan.cpp index ddc8a50..cb1ed68 100644 --- a/scim-wnn/src/romkan.cpp +++ b/scim-wnn/src/romkan.cpp @@ -52,9 +52,10 @@ String s = _RomkanTable[i]; iconvert.convert(w,String(_RomkanTable[i + 1])); RomkanTable.insert(pair(s,w)); - if (s.length() > 1) { - String k = s.substr(0,s.length() - 1); - if (keepTable.find(k) == keepTable.end()) { + + 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); } } @@ -271,6 +272,25 @@ convKataHira(text); } +/*! + \fn Romkan::toHalf() + */ +void Romkan::toHalf() +{ + convZenHan(text); + buf.clear(); +} + +/*! + \fn Romkan::toWide() + */ +void Romkan::toWide() +{ + convHanZen(text); + buf.clear(); +} + + /*! \fn Romkan::keyEventHook(const KeyEvent &key) diff --git a/scim-wnn/src/romkan.h b/scim-wnn/src/romkan.h index d6d8e31..6cd9ca6 100644 --- a/scim-wnn/src/romkan.h +++ b/scim-wnn/src/romkan.h @@ -54,6 +54,8 @@ virtual void del(); virtual void hiraKata(); virtual void kataHira(); + virtual void toWide(); + virtual void toHalf(); virtual bool keyEventHook(const KeyEvent &key); virtual String getModeName(); virtual bool cancelEvent(); diff --git a/scim-wnn/src/romkan_table.h b/scim-wnn/src/romkan_table.h index 954525b..c9f0d99 100644 --- a/scim-wnn/src/romkan_table.h +++ b/scim-wnn/src/romkan_table.h @@ -354,3 +354,4 @@ "zx", ":-", "" }; + diff --git a/scim-wnn/src/scim_wnn_def.h b/scim-wnn/src/scim_wnn_def.h index 3daca15..7beacc7 100644 --- a/scim-wnn/src/scim_wnn_def.h +++ b/scim-wnn/src/scim_wnn_def.h @@ -61,6 +61,10 @@ #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_KEY_CONVERT_HALF "/IMEngine/Wnn/Key/ConvertHalf" +#define SCIM_DEFAULT_WNN_KEY_CONVERT_HALF "F6" +#define SCIM_CONFIG_WNN_KEY_CONVERT_WIDE "/IMEngine/Wnn/Key/ConvertWide" +#define SCIM_DEFAULT_WNN_KEY_CONVERT_WIDE "F5" #define SCIM_CONFIG_WNN_KEY_CONVERSION_IKEIJI "/IMEngine/Wnn/Key/ConversionIkeiji" #define SCIM_DEFAULT_WNN_KEY_CONVERSION_IKEIJI "Shift+F8" diff --git a/scim-wnn/src/scim_wnn_imengine.cpp b/scim-wnn/src/scim_wnn_imengine.cpp index 34c9119..fc5bb93 100644 --- a/scim-wnn/src/scim_wnn_imengine.cpp +++ b/scim-wnn/src/scim_wnn_imengine.cpp @@ -280,6 +280,12 @@ 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))); + scim_string_to_key_list(k_convert_half, + _scim_config->read(String(SCIM_CONFIG_WNN_KEY_CONVERT_HALF), + String(SCIM_DEFAULT_WNN_KEY_CONVERT_HALF))); + scim_string_to_key_list(k_convert_wide, + _scim_config->read(String(SCIM_CONFIG_WNN_KEY_CONVERT_WIDE), + String(SCIM_DEFAULT_WNN_KEY_CONVERT_WIDE))); scim_string_to_key_list(k_conversion_rensou, _scim_config->read(String(SCIM_CONFIG_WNN_KEY_CONVERSION_RENSOU), @@ -478,6 +484,16 @@ updatePreEditor(); return(true); } else + if (k_convert_half.comp(key)) { + m_preeditor->toHalf(); + updatePreEditor(); + return(true); + } else + if (k_convert_wide.comp(key)) { + m_preeditor->toWide(); + updatePreEditor(); + return(true); + } else if (k_select_yosoku.comp(key) && yosoku) { if ((m_convList.kType == YOSOKU) && (m_convList.count)) { return(process_yosoku_key_event(key)); diff --git a/scim-wnn/src/scim_wnn_imengine.h b/scim-wnn/src/scim_wnn_imengine.h index 48998ac..d829bbb 100644 --- a/scim-wnn/src/scim_wnn_imengine.h +++ b/scim-wnn/src/scim_wnn_imengine.h @@ -141,6 +141,8 @@ k_lookup_pagedown, // ����������� k_convert_hiragana, // �Ҥ餬���Ѵ� k_convert_katakana, // ���������Ѵ� + k_convert_half, // Ⱦ���Ѵ� + k_convert_wide, // �����Ѵ� k_auto_conversion, // �Ѵ��⡼�ɥȥ��� // for Wnn7