1 /* 2 * SPDX-FileCopyrightText: 2017-2017 CSSlayer <wengxt@gmail.com> 3 * 4 * SPDX-License-Identifier: GPL-2.0-or-later 5 * 6 */ 7 #ifndef _FCITX5_ANTHY_ENGINE_H_ 8 #define _FCITX5_ANTHY_ENGINE_H_ 9 10 #include "action.h" 11 #include "key2kana_table.h" 12 #include "style_file.h" 13 #include <anthy/anthy.h> 14 #include <fcitx-config/enum.h> 15 #include <fcitx-config/iniparser.h> 16 #include <fcitx-utils/i18n.h> 17 #include <fcitx/addonmanager.h> 18 #include <fcitx/candidatelist.h> 19 #include <fcitx/inputcontext.h> 20 #include <fcitx/inputcontextproperty.h> 21 #include <fcitx/inputmethodengine.h> 22 #include <fcitx/instance.h> 23 #include <fcitx/menu.h> 24 25 FCITX_DECLARE_LOG_CATEGORY(anthy_logcategory); 26 27 #define FCITX_ANTHY_DEBUG() FCITX_LOGC(anthy_logcategory, Debug) 28 29 class AnthyEngine : public fcitx::InputMethodEngine { 30 public: 31 AnthyEngine(fcitx::Instance *instance); 32 ~AnthyEngine(); 33 void keyEvent(const fcitx::InputMethodEntry &entry, 34 fcitx::KeyEvent &keyEvent) override; 35 void reloadConfig() override; 36 std::string subMode(const fcitx::InputMethodEntry &, 37 fcitx::InputContext &) override; 38 void activate(const fcitx::InputMethodEntry &, 39 fcitx::InputContextEvent &) override; 40 void deactivate(const fcitx::InputMethodEntry &entry, 41 fcitx::InputContextEvent &event) override; 42 void reset(const fcitx::InputMethodEntry &, 43 fcitx::InputContextEvent &) override; 44 getConfig()45 const fcitx::Configuration *getConfig() const override { return &config_; } setConfig(const fcitx::RawConfig & config)46 void setConfig(const fcitx::RawConfig &config) override { 47 config_.load(config, true); 48 saveConfig(); 49 reloadConfig(); 50 } 51 saveConfig()52 void saveConfig() { fcitx::safeSaveAsIni(config_, "conf/anthy.conf"); } 53 state(fcitx::InputContext * ic)54 auto state(fcitx::InputContext *ic) { return ic->propertyFor(&factory_); } config()55 auto &config() { return config_; } keyProfile()56 auto keyProfile() { return keyProfileFileLoaded_ ? &keyProfile_ : nullptr; } customRomajiTable()57 auto customRomajiTable() { 58 return customRomajiTableLoaded_ ? &customRomajiTable_ : nullptr; 59 } customKanaTable()60 auto customKanaTable() { 61 return customKanaTableLoaded_ ? &customKanaTable_ : nullptr; 62 } customNicolaTable()63 auto customNicolaTable() { 64 return customNicolaTableLoaded_ ? &customNicolaTable_ : nullptr; 65 } 66 67 FCITX_ADDON_DEPENDENCY_LOADER(clipboard, instance_->addonManager()); 68 constructed()69 bool constructed() { return constructed_; } inputModeAction()70 auto inputModeAction() { return inputModeAction_.get(); } typingMethodAction()71 auto typingMethodAction() { return typingMethodAction_.get(); } conversionModeAction()72 auto conversionModeAction() { return conversionModeAction_.get(); } periodStyleAction()73 auto periodStyleAction() { return periodStyleAction_.get(); } symbolStyleAction()74 auto symbolStyleAction() { return symbolStyleAction_.get(); } 75 76 private: 77 std::string keyProfileName(); 78 std::string romajiTableName(); 79 std::string kanaTableName(); 80 std::string nicolaTableName(); 81 std::string fullFileName(const std::string &name); 82 83 bool constructed_ = false; 84 fcitx::Instance *instance_; 85 fcitx::FactoryFor<AnthyState> factory_; 86 AnthyConfig config_; 87 88 bool keyProfileFileLoaded_ = false; 89 AnthyKeyProfile keyProfile_; 90 91 bool customRomajiTableLoaded_ = false; 92 Key2KanaTable customRomajiTable_{"custom-romaji"}; 93 94 bool customKanaTableLoaded_ = false; 95 Key2KanaTable customKanaTable_{"custom-kana"}; 96 97 bool customNicolaTableLoaded_ = false; 98 Key2KanaTable customNicolaTable_{"custom-nicola"}; 99 100 std::unique_ptr<fcitx::Action> inputModeAction_; 101 std::unique_ptr<fcitx::Action> typingMethodAction_; 102 std::unique_ptr<fcitx::Action> conversionModeAction_; 103 std::unique_ptr<fcitx::Action> periodStyleAction_; 104 std::unique_ptr<fcitx::Action> symbolStyleAction_; 105 std::vector<std::unique_ptr<fcitx::Action>> subModeActions_; 106 107 fcitx::Menu inputModeMenu_; 108 fcitx::Menu typingMethodMenu_; 109 fcitx::Menu conversionModeMenu_; 110 fcitx::Menu periodStyleMenu_; 111 fcitx::Menu symbolStyleMenu_; 112 }; 113 114 #endif // _FCITX5_ANTHY_ENGINE_H_ 115