int main() { char* words[] = { "a", "b", "c" , "d", "e" }; char* extras[] = { "A", "B", "C" , "D", "E" }; FcitxInstance* instance = fcitx_utils_malloc0(sizeof(FcitxInstance)); instance->input = fcitx_utils_malloc0(sizeof(FcitxInputState)); instance->input->candList = FcitxCandidateWordNewList(); instance->config = fcitx_utils_malloc0(sizeof(FcitxGlobalConfig)); instance->config->bPointAfterNumber = true; FcitxCandidateWord word; word.callback = NULL; word.owner = NULL; word.priv = NULL; int i = 0; for (i = 0; i < 5; i ++) { word.strWord = strdup(words[i]); word.strExtra = strdup(extras[i]); FcitxCandidateWordAppend(instance->input->candList, &word); } char* result = FcitxUICandidateWordToCString(instance); if (strcmp(result, "1.aA 2.bB 3.cC 4.dD 5.eE ") == 0) { return 0; } return 1; }
static void TestbedCallback(void* arg, FcitxSimpleEvent* event) { #define TESTBED_CASE(NAME) \ case SSE_##NAME: \ fprintf(stderr, "UI:" #NAME "\n"); FcitxInputState* input = FcitxInstanceGetInputState(instance); switch (event->type) { TESTBED_CASE(ShowInputWindow) { char* candidateword = FcitxUICandidateWordToCString(instance); char* str = FcitxInstanceProcessOutputFilter(instance, candidateword); if (str) { free(candidateword); candidateword = str; } fprintf(stderr, "CANDIDATE:%s\n", candidateword); free(candidateword); break; } TESTBED_CASE(CloseInputWindow) break; TESTBED_CASE(RegisterComplexStatus) break; TESTBED_CASE(RegisterStatus) break; TESTBED_CASE(UpdateComplexStatus) break; TESTBED_CASE(UpdateStatus) break; TESTBED_CASE(RegisterMenu) break; TESTBED_CASE(ShowMenu) break; TESTBED_CASE(CommitString){ fprintf(stderr, "COMMIT:%s\n", event->commitString); break; } TESTBED_CASE(UpdatePreedit) { char* clientPreedit = FcitxUIMessagesToCString(FcitxInputStateGetClientPreedit(input)); char* str = FcitxInstanceProcessOutputFilter(instance, clientPreedit); if (str) { free(clientPreedit); clientPreedit = str; } fprintf(stderr, "PREEDIT:%s\n", clientPreedit); free(clientPreedit); break; } } #undef TESTBED_CASE }