summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2022-09-23 16:19:10 +0800
committerPeng Wu <alexepico@gmail.com>2022-09-23 16:19:10 +0800
commit98f7e43b3bfe69f6cbcd2e7c2479c8cac503f580 (patch)
tree0773179ab356895ec05bd8e71b48af3069d1be4b
parent38e61f5b2164996244280a92d40b84ad6f54a457 (diff)
downloadibus-libpinyin-98f7e43b3bfe69f6cbcd2e7c2479c8cac503f580.tar.gz
Support longer candidates
-rw-r--r--src/PYPEnhancedCandidates.h2
-rw-r--r--src/PYPLibPinyinCandidates.cc23
-rw-r--r--src/PYPPhoneticEditor.cc4
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);