Add uppercase-first reverse auxiliary-code matching with dedicated caching for Shuangpin.

This commit is contained in:
fanlusky committed 2026-08-16 02:40:14 +08:00
1 parent eb1211e595
commit 2bc321ecfb
3 files changed
+36 -1

No files matched your search

Submodule server/MetasequoiaImeEngine updated: 76d3c77546...12b65317cc.
@@ -97,6 +97,31 @@ TEST_CASE(EngineShuangpinSessionContinuesCompositionWithSingleHelpcode)
REQUIRE_EQ(session.get_pinyin_sequence(), std::string("tele"));
}
TEST_CASE(EngineShuangpinUppercaseSingleHelpcodePrefersSecondCodeMatches)
{
REQUIRE(HelpcodeUtils::select_helpcode_schema("lantian"));
EngineInputSession session(SchemeType::Shuangpin);
InputLetters(session, "nid");
session.reset_state();
InputLetters(session, "niD");
const auto &candidates = session.get_candidates();
const auto index_of = [&](const std::string &word) {
const auto found = std::find_if(candidates.begin(), candidates.end(),
[&](const IInputSession::WordItem &item) { return item.word == word; });
return static_cast<size_t>(std::distance(candidates.begin(), found));
};
const size_t ni = index_of("泥");
const size_t ni_second_code = index_of("溺");
const size_t ni_other_second_code = index_of("腻");
REQUIRE(ni < candidates.size());
REQUIRE(ni_second_code < candidates.size());
REQUIRE(ni_other_second_code < candidates.size());
REQUIRE(ni_second_code < ni);
REQUIRE(ni_other_second_code < ni);
}
TEST_CASE(EngineShuangpinSessionContinuesCompositionWithDoubleHelpcode)
{
EngineInputSession session(SchemeType::Shuangpin);
+10
View File
@@ -12,6 +12,16 @@ TEST_CASE(ApplySegmentationCasesPreservesUppercaseMarkers)
TEST_CASE(IsFullHelpModeRecognizesDoubleHelpcodePattern)
{
REQUIRE(ShuangpinUtil::IsFullHelpMode("xiteleaA"));
REQUIRE(ShuangpinUtil::IsFullHelpMode("xiteleAa"));
REQUIRE(ShuangpinUtil::IsFullHelpMode("xiteleAA"));
REQUIRE(!ShuangpinUtil::IsFullHelpMode("xiteleaa"));
REQUIRE(!ShuangpinUtil::IsFullHelpMode("xitelea"));
REQUIRE(!ShuangpinUtil::IsFullHelpMode("xi"));
}
TEST_CASE(FullHelpCodesUseFirstUppercaseMarkerForReverseOrder)
{
REQUIRE_EQ(ShuangpinUtil::GetFullHelpCodes("xiteleaB"), std::string("ab"));
REQUIRE_EQ(ShuangpinUtil::GetFullHelpCodes("xiteleAb"), std::string("ba"));
REQUIRE_EQ(ShuangpinUtil::GetFullHelpCodes("xiteleAB"), std::string("ba"));
}