--- xcin.orig/src/Cinput/chewing/xcin_chewing.c 2004-07-09 22:03:30.000000000 +0800 +++ xcin/src/Cinput/chewing/xcin_chewing.c 2004-07-10 10:21:43.000000000 +0800 @@ -27,13 +27,14 @@ #define CTRL_MASK (4) #include -#include #define XCIN_BYTE_NATIVE 2 #define XCIN_BYTE_UTF8 3 static int bimsp_codeset; void preconvert(char *input, char *output, int n_char); wchar_t convert(wchar_t input); +static char selKey_define[11] = "1234567890\0"; + /* statistics symbol required by chewing */ int lifetime ; @@ -51,9 +52,9 @@ int CallSetConfig(inpinfo_t *inpinfo, Ch // config.maxChiSymbolLen = 22 ; config.maxChiSymbolLen = 16; - for(i=0; i<9; i++) - config.selKey[i] = i + '1' ; - config.selKey[9] = '0' ; + for(i=0;i<10;i++) + config.selKey[i] = selKey_define[i]; + SetConfig(pgdata, &config) ; return 0 ; } @@ -61,26 +62,35 @@ int CallSetConfig(inpinfo_t *inpinfo, Ch static int ChewingInit(void *conf, char *objname, xcin_rc_t *xc) { - char *cmd[2], kb_type_str[256]; + char *cmd[2], value[256]; + objenc_t objenc; ChewingConf *cf = (ChewingConf *)conf ; char *prefix = "/usr/share/chewing"; - /* Because libtabe uses BIG-5 encoding for all its structure + /* Because libchewing uses BIG-5 encoding for all its structure so we need to check if it is UTF-8 locale and do any conv */ - char *codeset; - codeset=nl_langinfo(CODESET); - if ( ! strcasecmp(codeset,"UTF-8") ) + if ( ! strcasecmp(xc->locale.encoding,"utf-8") ) bimsp_codeset=XCIN_BYTE_UTF8; else bimsp_codeset=XCIN_BYTE_NATIVE; char *cname = (char *)calloc(3,sizeof(char)*bimsp_codeset); - cmd[0] = objname ; - cmd[1] = "KB_TYPE" ; - kb_type_str[0] = '\0' ; - get_resource(xc, cmd, kb_type_str, 200, 2) ; - cf->kb_type = KBStr2Num(kb_type_str) ; + if (get_objenc(objname, &objenc) == -1) + return False; + cmd[0] = objenc.objloadname; + cmd[1] = "KB_TYPE" ; + value[0] = '\0' ; + get_resource(xc, cmd, value, 200, 2) ; + cf->kb_type = KBStr2Num(value) ; + + cmd[1] = "SELECTION_KEYS_DEFINE"; + if (get_resource(xc, cmd, value, 256, 2)) { + if (strlen(value) == 10) { + strcpy(selKey_define, value); + selKey_define[11] = '\0'; + } + } preconvert("·s»Å­µ", cname, 6); cf->inp_cname = strdup(cname) ; @@ -132,12 +142,10 @@ ChewingXimInit(void *conf, inpinfo_t *in inpinfo->n_selkey = 10; inpinfo->s_selkey = (wch_t *) calloc( MAX_SELKEY, sizeof(wch_t) ); - for (i=0; i<9; i++) { - inpinfo->s_selkey[i].wch = (wchar_t)0; - inpinfo->s_selkey[i].s[0] = i + '1'; + for (i=0; i<10; i++) { + inpinfo->s_selkey[i].wch = (wchar_t)0; + inpinfo->s_selkey[i].s[0] = selKey_define[i]; } - inpinfo->s_selkey[9].wch = (wchar_t)0; - inpinfo->s_selkey[9].s[0] = '0'; return True ; }