diff --git a/honoka/plugins/nicolainput.cpp b/honoka/plugins/nicolainput.cpp index 1c02b52..b8c4799 100644 --- a/honoka/plugins/nicolainput.cpp +++ b/honoka/plugins/nicolainput.cpp @@ -117,6 +117,12 @@ iconvert.convert(k.rightShift,_nicolaTable[i].rightShift); keymap.insert(pair(_nicolaTable[i].key,k)); } + iconvert.convert(vsc,String("��")); + iconvert.convert(svsc,String("��")); + iconvert.convert(vs1,String("�������������������������ĤƤȤϤҤդؤۤѤԤפڤ�")); + iconvert.convert(vs2,String("�����������������������¤ŤǤɤФӤ֤٤ܤФӤ֤٤�")); + iconvert.convert(svs1,String("�ϤҤդؤۤФӤ֤٤�")); + iconvert.convert(svs2,String("�ѤԤפڤݤѤԤפڤ�")); } @@ -167,11 +173,29 @@ (key.code == SCIM_KEY_Hyper_R)) return true; map::iterator it = keymap.find(key.code); - if (it == keymap.end()) return true; + if (it == keymap.end()) { + if (isprint(key.get_ascii_code())) { + String s; + s += key.get_ascii_code(); + text = text.substr(0,pos) + utf8_mbstowcs(s) + text.substr(pos); + pos ++; + } + return true; + } WideString w; if (LShift) w = it->second.leftShift; else if (RShift) w = it->second.rightShift; else w = it->second.noShift; + if (w == vsc) { + for(unsigned int i = 0;i < vs1.length();i ++) { + if (vs1[i] == text[pos - 1]) text = text.substr(0,pos - 1) + vs2[i] + text.substr(pos); + } + } else + if (w == svsc) { + for(unsigned int i = 0;i < svs1.length();i ++) { + if (svs1[i] == text[pos - 1]) text = text.substr(0,pos - 1) + svs2[i] + text.substr(pos); + } + } else if (w.length()) { text = text.substr(0,pos) + w + text.substr(pos); pos ++; diff --git a/honoka/plugins/nicolainput.h b/honoka/plugins/nicolainput.h index 6392def..cc7226d 100644 --- a/honoka/plugins/nicolainput.h +++ b/honoka/plugins/nicolainput.h @@ -58,6 +58,12 @@ bool LShift; bool RShift; map keymap; + WideString vsc; + WideString svsc; + WideString vs1; + WideString vs2; + WideString svs1; + WideString svs2; }; } #endif