From b0f77a006a2fe4965a4454ba93f91841aef0eba0 Mon Sep 17 00:00:00 2001 From: fanlusky <1730976608@qq.com> Date: Fri, 19 Jun 2026 23:13:34 +0800 Subject: [PATCH] Add a switch to change preedit between quanpin and shuangpin --- server/assets/config/config.toml | 6 +++++- server/src/config/ime_config.cpp | 12 ++++++++++++ server/src/config/ime_config.h | 1 + server/src/session/engine_input_session.cpp | 6 ++++++ 4 files changed, 24 insertions(+), 1 deletion(-) diff --git a/server/assets/config/config.toml b/server/assets/config/config.toml index 799a9f22..92bcd644 100644 --- a/server/assets/config/config.toml +++ b/server/assets/config/config.toml @@ -53,9 +53,13 @@ candidate_window_layout = "vertical" # engine + shuangpin -> 使用新版引擎双拼会话 # engine + quanpin -> 使用新版引擎全拼会话 # 任意 backend + wubi -> 当前暂不支持 -session_backend = "engine" +session_backend = "legacy" # 输入方案,可选:"quanpin", "shuangpin", "wubi" schema = "shuangpin" +# engine + shuangpin 时的 preedit 显示方式,可选:"quanpin", "shuangpin" +# quanpin -> 预编辑显示转换后的全拼分词 +# shuangpin -> 预编辑显示原始双拼输入串 +shuangpin_preedit_mode = "shuangpin" # 双拼方案,可选:"xiaohe", "ziranma" shuangpin_schema = "xiaohe" # 五笔方案,可选:"wubi86", "wubi98" diff --git a/server/src/config/ime_config.cpp b/server/src/config/ime_config.cpp index 3df6d7f8..95bc5445 100644 --- a/server/src/config/ime_config.cpp +++ b/server/src/config/ime_config.cpp @@ -8,6 +8,7 @@ namespace { std::string g_session_backend = "legacy"; SchemeType g_input_scheme = SchemeType::Shuangpin; +std::string g_shuangpin_preedit_mode = "quanpin"; SchemeType ParseScheme(const std::string &value) { @@ -45,6 +46,7 @@ void InitImeConfig() bool follow_cursor = tbl["candidate_window"]["follow_cursor"].value_or(false); g_session_backend = tbl["input"]["session_backend"].value_or(std::string("legacy")); g_input_scheme = ParseScheme(tbl["input"]["schema"].value_or(std::string("shuangpin"))); + g_shuangpin_preedit_mode = tbl["input"]["shuangpin_preedit_mode"].value_or(std::string("quanpin")); #ifdef FANY_DEBUG OutputDebugString(fmt::format(L"[msime]: page_size = {}", page_size).c_str()); @@ -59,6 +61,11 @@ void InitImeConfig() OutputDebugString(fmt::format(L"[msime]: session_backend = {}", string_to_wstring(g_session_backend)) .c_str()); +#endif +#ifdef FANY_DEBUG + OutputDebugString(fmt::format(L"[msime]: shuangpin_preedit_mode = {}", + string_to_wstring(g_shuangpin_preedit_mode)) + .c_str()); #endif } catch (const toml::parse_error &err) @@ -78,3 +85,8 @@ SchemeType GetConfiguredInputScheme() { return g_input_scheme; } + +const std::string &GetConfiguredShuangpinPreeditMode() +{ + return g_shuangpin_preedit_mode; +} diff --git a/server/src/config/ime_config.h b/server/src/config/ime_config.h index 7a489206..334214cb 100644 --- a/server/src/config/ime_config.h +++ b/server/src/config/ime_config.h @@ -7,3 +7,4 @@ void InitImeConfig(); const std::string &GetConfiguredSessionBackend(); SchemeType GetConfiguredInputScheme(); +const std::string &GetConfiguredShuangpinPreeditMode(); diff --git a/server/src/session/engine_input_session.cpp b/server/src/session/engine_input_session.cpp index 732daa6b..67810e7f 100644 --- a/server/src/session/engine_input_session.cpp +++ b/server/src/session/engine_input_session.cpp @@ -1,5 +1,7 @@ #include "engine_input_session.h" +#include "config/ime_config.h" + EngineInputSession::EngineInputSession(SchemeType scheme_type) : session_(scheme_type) { } @@ -68,6 +70,10 @@ const std::string &EngineInputSession::get_pinyin_segmentation() const std::string EngineInputSession::get_pinyin_segmentation_with_cases() const { + if (is_shuangpin() && GetConfiguredShuangpinPreeditMode() == "shuangpin") + { + return request().raw_input; + } return request().segmentation; }