void* ChttransS2T(void* arg, FcitxModuleFunctionArg args) { FcitxChttrans* transState = (FcitxChttrans*) arg; const char* s = args.args[0]; return ConvertGBKSimple2Tradition(transState, s); }
char* ChttransOutputFilter(void* arg, const char *strin) { FcitxChttrans* transState = (FcitxChttrans*) arg; FcitxIM* im = FcitxInstanceGetCurrentIM(transState->owner); /* don't trans for "zh" */ if (!im || strncmp(im->langCode, "zh", 2) != 0 || strlen(im->langCode) == 2) return NULL; if (ChttransEnabled(transState)) { if (strcmp(im->langCode, "zh_HK") == 0 || strcmp(im->langCode, "zh_TW") == 0) { return NULL; } else { return ConvertGBKSimple2Tradition(transState, strin); } } else { if (strcmp(im->langCode, "zh_CN") == 0) { return NULL; } else { return ConvertGBKTradition2Simple(transState, strin); } } return NULL; }
void SendHZtoClient (IMForwardEventStruct * call_data, char *strHZ) { XTextProperty tp; IMCommitStruct cms; char strOutput[300]; char *ps; char *pS2T = (char *) NULL; #ifdef _DEBUG fprintf (stderr, "Sending %s icid=%d connectid=%d\n", strHZ, CurrentIC->id, connect_id); #endif /* avoid Seg fault */ if (!call_data && !CurrentIC) return; #ifdef _ENABLE_RECORDING if (bRecording) { if (OpenRecording(True)) { if ( !bWrittenRecord ) { char buf[20]; struct tm *ts; time_t now; now=time(NULL); ts = localtime(&now); strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", ts); fprintf(fpRecord, "%s\n", buf); } fprintf(fpRecord, "%s", strHZ); bWrittenRecord = True; } } #endif if (bUseGBKT) pS2T = strHZ = ConvertGBKSimple2Tradition (strHZ); if (bIsUtf8) { size_t l1, l2; ps = strOutput; l1 = strlen (strHZ); l2 = 299; l1 = iconv (convUTF8, (ICONV_CONST char **) (&strHZ), &l1, &ps, &l2); *ps = '\0'; ps = strOutput; } else ps = strHZ; XmbTextListToTextProperty (dpy, (char **) &ps, 1, XCompoundTextStyle, &tp); memset (&cms, 0, sizeof (cms)); cms.major_code = XIM_COMMIT; if (call_data) { cms.icid = call_data->icid; cms.connect_id = call_data->connect_id; } else { cms.icid = CurrentIC->id; cms.connect_id = connect_id; } cms.flag = XimLookupChars; cms.commit_string = (char *) tp.value; IMCommitString (ims, (XPointer) & cms); XFree (tp.value); if (bUseGBKT) free (pS2T); }