diff options
author | Peng Wu <alexepico@gmail.com> | 2022-09-23 16:19:10 +0800 |
---|---|---|
committer | Peng Wu <alexepico@gmail.com> | 2022-09-23 16:19:10 +0800 |
commit | 98f7e43b3bfe69f6cbcd2e7c2479c8cac503f580 (patch) | |
tree | 0773179ab356895ec05bd8e71b48af3069d1be4b | |
parent | 38e61f5b2164996244280a92d40b84ad6f54a457 (diff) | |
download | ibus-libpinyin-98f7e43b3bfe69f6cbcd2e7c2479c8cac503f580.tar.gz |
Support longer candidates
-rw-r--r-- | src/PYPEnhancedCandidates.h | 2 | ||||
-rw-r--r-- | src/PYPLibPinyinCandidates.cc | 23 | ||||
-rw-r--r-- | src/PYPPhoneticEditor.cc | 4 |
3 files changed, 28 insertions, 1 deletions
diff --git a/src/PYPEnhancedCandidates.h b/src/PYPEnhancedCandidates.h index d4257fb..c418434 100644 --- a/src/PYPEnhancedCandidates.h +++ b/src/PYPEnhancedCandidates.h @@ -29,6 +29,8 @@ namespace PY { enum CandidateType { CANDIDATE_NBEST_MATCH = 1, + CANDIDATE_LONGER, + CANDIDATE_LONGER_USER, /* not included with user candidate */ CANDIDATE_NORMAL, /* both normal candidate and user candidate */ diff --git a/src/PYPLibPinyinCandidates.cc b/src/PYPLibPinyinCandidates.cc index d541967..3c9fe71 100644 --- a/src/PYPLibPinyinCandidates.cc +++ b/src/PYPLibPinyinCandidates.cc @@ -53,6 +53,14 @@ LibPinyinCandidates::processCandidates (std::vector<EnhancedCandidate> & candida enhanced.m_candidate_type = CANDIDATE_NBEST_MATCH; break; + case LONGER_CANDIDATE: + enhanced.m_candidate_type = CANDIDATE_LONGER; + + if (pinyin_is_user_candidate (instance, candidate)) + enhanced.m_candidate_type = CANDIDATE_LONGER_USER; + + break; + case NORMAL_CANDIDATE: case ADDON_CANDIDATE: enhanced.m_candidate_type = CANDIDATE_NORMAL; @@ -80,6 +88,8 @@ LibPinyinCandidates::selectCandidate (EnhancedCandidate & enhanced) { pinyin_instance_t * instance = m_editor->m_instance; assert (CANDIDATE_NBEST_MATCH == enhanced.m_candidate_type || + CANDIDATE_LONGER == enhanced.m_candidate_type || + CANDIDATE_LONGER_USER == enhanced.m_candidate_type || CANDIDATE_NORMAL == enhanced.m_candidate_type || CANDIDATE_USER == enhanced.m_candidate_type); @@ -115,6 +125,16 @@ LibPinyinCandidates::selectCandidate (EnhancedCandidate & enhanced) return SELECT_CANDIDATE_COMMIT; } + if (CANDIDATE_LONGER == enhanced.m_candidate_type) { + /* because longer candidate + starts from the beginning of user input. */ + pinyin_choose_candidate (instance, 0, candidate); + + LibPinyinBackEnd::instance ().modified (); + + return SELECT_CANDIDATE_COMMIT; + } + lookup_cursor = pinyin_choose_candidate (instance, lookup_cursor, candidate); @@ -148,7 +168,8 @@ LibPinyinCandidates::removeCandidate (EnhancedCandidate & enhanced) { pinyin_instance_t * instance = m_editor->m_instance; - if (enhanced.m_candidate_type != CANDIDATE_USER) + if (enhanced.m_candidate_type != CANDIDATE_USER && + enhanced.m_candidate_type != CANDIDATE_LONGER_USER) return FALSE; lookup_candidate_t * candidate = NULL; diff --git a/src/PYPPhoneticEditor.cc b/src/PYPPhoneticEditor.cc index 8854b89..bba9dfb 100644 --- a/src/PYPPhoneticEditor.cc +++ b/src/PYPPhoneticEditor.cc @@ -377,6 +377,8 @@ PhoneticEditor::selectCandidateInternal (EnhancedCandidate & candidate) { switch (candidate.m_candidate_type) { case CANDIDATE_NBEST_MATCH: + case CANDIDATE_LONGER: + case CANDIDATE_LONGER_USER: case CANDIDATE_NORMAL: case CANDIDATE_USER: return m_libpinyin_candidates.selectCandidate (candidate); @@ -415,6 +417,8 @@ PhoneticEditor::removeCandidateInternal (EnhancedCandidate & candidate) { switch (candidate.m_candidate_type) { case CANDIDATE_NBEST_MATCH: + case CANDIDATE_LONGER: + case CANDIDATE_LONGER_USER: case CANDIDATE_NORMAL: case CANDIDATE_USER: return m_libpinyin_candidates.removeCandidate (candidate); |