static void* FcitxThaiCreate(FcitxInstance* instance) { FcitxThai* thai = fcitx_utils_new(FcitxThai); bindtextdomain("fcitx-thai", LOCALEDIR); thai->owner = instance; if (!ThaiLoadConfig(&thai->config)) { free(thai); return NULL; } FcitxIMIFace iface; memset(&iface, 0, sizeof(FcitxIMIFace)); iface.DoInput = FcitxThaiDoInput; iface.GetCandWords = FcitxThaiGetCandWords; iface.Init = FcitxThaiInit; iface.Save = FcitxThaiSave; iface.ResetIM = FcitxThaiResetIM; FcitxInstanceRegisterIMv2( instance, thai, "thai", _("Thai"), "thai", iface, 10, "th" ); FcitxThaiAddFunctions(instance); return thai; }
void* FcitxUnikeyCreate(FcitxInstance* instance) { FcitxUnikey* unikey = (FcitxUnikey*) fcitx_utils_malloc0(sizeof(FcitxUnikey)); if (!LoadUnikeyConfig(&unikey->config)) { free(unikey); return NULL; } unikey->owner = instance; unikey->preeditstr = new std::string; union { short s; unsigned char b[2]; } endian; endian.s = 0x1234; if (endian.b[0] == 0x12) unikey->conv = iconv_open("utf-8", "ucs-4be"); else unikey->conv = iconv_open("utf-8", "ucs-4le"); FcitxIMIFace iface; memset(&iface, 0, sizeof(FcitxIMIFace)); iface.Init = FcitxUnikeyInit; iface.ResetIM = FcitxUnikeyReset; iface.DoInput = FcitxUnikeyDoInput; iface.ReloadConfig = ReloadConfigFcitxUnikey; iface.Save = FcitxUnikeySave; FcitxInstanceRegisterIMv2( instance, unikey, "unikey", _("Unikey"), "unikey", iface, 1, "vi" ); UnikeySetup(); InitializeBar(unikey); InitializeMenu(unikey); ConfigUnikey(unikey); FcitxIMEventHook hk; hk.arg = unikey; hk.func = FcitxUnikeyResetUI; FcitxInstanceRegisterResetInputHook(instance, hk); return unikey; }
void* FcitxUnikeyCreate(FcitxInstance* instance) { FcitxUnikey* unikey = (FcitxUnikey*) fcitx_utils_malloc0(sizeof(FcitxUnikey)); if (!LoadUnikeyConfig(&unikey->config)) { free(unikey); return NULL; } unikey->owner = instance; unikey->preeditstr = new std::string; FcitxIMIFace iface; memset(&iface, 0, sizeof(FcitxIMIFace)); iface.Init = FcitxUnikeyInit; iface.ResetIM = FcitxUnikeyReset; iface.DoInput = FcitxUnikeyDoInput; iface.ReloadConfig = ReloadConfigFcitxUnikey; iface.Save = FcitxUnikeySave; FcitxInstanceRegisterIMv2( instance, unikey, "unikey", _("Unikey"), "unikey", iface, 1, "vi" ); UnikeySetup(); InitializeBar(unikey); InitializeMenu(unikey); ConfigUnikey(unikey); FcitxIMEventHook hk; hk.arg = unikey; hk.func = FcitxUnikeyResetUI; FcitxInstanceRegisterResetInputHook(instance, hk); return unikey; }
static void* FcitxRimeCreate(FcitxInstance* instance) { FcitxRime* rime = (FcitxRime*) fcitx_utils_malloc0(sizeof(FcitxRime)); rime->owner = instance; rime->api = rime_get_api(); rime->firstRun = true; if (!rime->api) { free(rime); return NULL; } FcitxRimeStart(rime, false); FcitxIMIFace iface; memset(&iface, 0, sizeof(FcitxIMIFace)); iface.Init = FcitxRimeInit; iface.ResetIM = FcitxRimeReset; iface.DoInput = FcitxRimeDoInput; iface.DoReleaseInput = FcitxRimeDoReleaseInput; iface.GetCandWords = FcitxRimeGetCandWords; iface.ReloadConfig = FcitxRimeReloadConfig; FcitxInstanceRegisterIMv2( instance, rime, "rime", _("Rime"), "rime", iface, 10, "zh" ); FcitxUIRegisterComplexStatus( instance, rime, "rime-enzh", "", "", FcitxRimeToggleEnZh, FcitxRimeGetIMIcon); FcitxUIRegisterComplexStatus( instance, rime, "rime-deploy", _("Deploy"), _("Deploy"), FcitxRimeToggleDeploy, FcitxRimeGetDeployIcon); FcitxUIRegisterComplexStatus( instance, rime, "rime-sync", _("Synchronize"), _("Synchronize"), FcitxRimeToggleSync, FcitxRimeGetSyncIcon); FcitxUISetStatusVisable(instance, "rime-enzh", false); FcitxUISetStatusVisable(instance, "rime-sync", false); FcitxUISetStatusVisable(instance, "rime-deploy", false); FcitxIMEventHook hk; hk.arg = rime; hk.func = FcitxRimeResetUI; FcitxInstanceRegisterResetInputHook(instance, hk); FcitxMenuInit(&rime->schemamenu); rime->schemamenu.name = strdup(_("Schema List")); rime->schemamenu.candStatusBind = strdup("rime-enzh"); rime->schemamenu.MenuAction = FcitxRimeSchemaMenuAction; rime->schemamenu.UpdateMenu = FcitxRimeSchemaMenuUpdate; rime->schemamenu.priv = rime; rime->schemamenu.isSubMenu = false; FcitxUIRegisterMenu(rime->owner, &rime->schemamenu); return rime; }
static void* FcitxKkcCreate(FcitxInstance *instance) { FcitxKkc *kkc = fcitx_utils_new(FcitxKkc); bindtextdomain("fcitx-kkc", LOCALEDIR); bind_textdomain_codeset("fcitx-kkc", "UTF-8"); kkc->owner = instance; if (!KkcLoadConfig(&kkc->config)) { free(kkc); return NULL; } #if !GLIB_CHECK_VERSION(2, 36, 0) g_type_init(); #endif kkc_init(); KkcLanguageModel* model = kkc_language_model_load("sorted3", NULL); if (!model) { free(kkc); return NULL; } FcitxXDGMakeDirUser("kkc/rules"); FcitxXDGMakeDirUser("kkc/dictionary"); kkc->model = model; kkc->context = kkc_context_new(model); if (!FcitxKkcLoadDictionary(kkc) || !FcitxKkcLoadRule(kkc)) { g_object_unref(kkc->context); free(kkc); return NULL; } kkc_context_set_punctuation_style(kkc->context, KKC_PUNCTUATION_STYLE_JA_JA); kkc_context_set_input_mode(kkc->context, KKC_INPUT_MODE_HIRAGANA); kkc->tempMsg = FcitxMessagesNew(); FcitxKkcApplyConfig(kkc); FcitxIMIFace iface; memset(&iface, 0, sizeof(FcitxIMIFace)); iface.Init = FcitxKkcInit; iface.DoInput = FcitxKkcDoInput; iface.DoReleaseInput = FcitxKkcDoReleaseInput; iface.GetCandWords = FcitxKkcGetCandWords; iface.Save = FcitxKkcSave; iface.ResetIM = FcitxKkcResetIM; iface.OnClose = FcitxKkcOnClose; FcitxInstanceRegisterIMv2(instance, kkc, "kkc", _("Kana Kanji"), "kkc", iface, 1, "ja"); #define INIT_MENU(VARNAME, NAME, I18NNAME, STATUS_NAME, STATUS_ARRAY, SIZE) \ do { \ FcitxUIRegisterComplexStatus(instance, kkc, \ STATUS_NAME, \ I18NNAME, \ I18NNAME, \ NULL, \ FcitxKkcGet##NAME##IconName \ ); \ FcitxMenuInit(&VARNAME); \ VARNAME.name = strdup(I18NNAME); \ VARNAME.candStatusBind = strdup(STATUS_NAME); \ VARNAME.UpdateMenu = FcitxKkcUpdate##NAME##Menu; \ VARNAME.MenuAction = FcitxKkc##NAME##MenuAction; \ VARNAME.priv = kkc; \ VARNAME.isSubMenu = false; \ int i; \ for (i = 0; i < SIZE; i ++) \ FcitxMenuAddMenuItem(&VARNAME, _(STATUS_ARRAY[i].label), MENUTYPE_SIMPLE, NULL); \ FcitxUIRegisterMenu(instance, &VARNAME); \ FcitxUISetStatusVisable(instance, STATUS_NAME, false); \ } while(0) INIT_MENU(kkc->inputModeMenu, InputMode, _("Input Mode"), "kkc-input-mode", input_mode_status, KKC_INPUT_MODE_DIRECT); kkc->handler = g_signal_connect(kkc->context, "notify::input-mode", G_CALLBACK(_kkc_input_mode_changed_cb), kkc); FcitxKkcUpdateInputMode(kkc); kkc_context_set_input_mode(kkc->context, kkc->config.initialInputMode); FcitxIMEventHook hk; hk.arg = kkc; hk.func = FcitxKkcResetHook; FcitxInstanceRegisterResetInputHook(instance, hk); FcitxKkcAddFunctions(instance); return kkc; }