diff -Nru scim-pinyin-0.5.91.orig/src/scim_pinyin_imengine.cpp scim-pinyin-0.5.91/src/scim_pinyin_imengine.cpp --- scim-pinyin-0.5.91.orig/src/scim_pinyin_imengine.cpp 2005-08-06 23:31:08.000000000 +0800 +++ scim-pinyin-0.5.91/src/scim_pinyin_imengine.cpp 2009-02-18 00:06:34.000000000 +0800 @@ -706,8 +706,12 @@ m_sys_phrase_lib = m_pinyin_global->get_sys_phrase_lib (); m_user_phrase_lib = m_pinyin_global->get_user_phrase_lib (); } - - if (encoding == "GBK" || encoding == "GB2312") { + + if (encoding == "GBK") { + m_simplified = true; + m_traditional = true; + m_chinese_iconv.set_encoding ("GBK"); + } else if (encoding == "GB2312") { m_simplified = true; m_traditional = false; m_chinese_iconv.set_encoding ("GB2312"); @@ -930,10 +934,39 @@ m_iconv.set_encoding (encoding); - if (encoding == "GBK" || encoding == "GB2312") { - m_simplified = true; - m_traditional = false; - m_chinese_iconv.set_encoding ("GB2312"); + if (encoding == "GBK") { + if (m_simplified == false) { + if(m_traditional == true){ + ; //Big5. Big5togbk is not implemented. Set to next available. + m_simplified = true; + m_chinese_iconv.set_encoding ("GBK"); + }else{ // nochinese mode. Should not happen. + m_forward = true; + m_chinese_iconv.set_encoding (""); + } + }else{ + if( m_traditional == false) //GB2312 + m_chinese_iconv.set_encoding("GB2312"); + else m_chinese_iconv.set_encoding ("GBK"); //ALL + } + } else if (encoding == "GB2312") { + if ( m_simplified == false ) { + if(m_traditional == true) { + ; //partly map big5 to gb2312 is not done. Set to next. + m_forward = true; + m_chinese_iconv.set_encoding (""); + }else{//Should not happen. + m_forward = true; + m_chinese_iconv.set_encoding(""); + } + }else{ + if (m_traditional == true) { //Should not happen. + m_forward = true; + m_chinese_iconv.set_encoding (""); + }else{ + m_chinese_iconv.set_encoding ("GB2312"); + } + } } else if (encoding == "BIG5" || encoding == "BIG5-HKSCS") { m_simplified = false; m_traditional = true;