diff options
-rw-r--r-- | src/PYPEnhancedCandidates.h | 6 | ||||
-rw-r--r-- | src/PYPLibPinyinCandidates.cc | 32 | ||||
-rw-r--r-- | src/PYPPhoneticEditor.cc | 35 | ||||
-rw-r--r-- | src/PYPPhoneticEditor.h | 4 |
4 files changed, 69 insertions, 8 deletions
diff --git a/src/PYPEnhancedCandidates.h b/src/PYPEnhancedCandidates.h index f1c9144..ba5211c 100644 --- a/src/PYPEnhancedCandidates.h +++ b/src/PYPEnhancedCandidates.h @@ -32,7 +32,11 @@ class PhoneticEditor; enum CandidateType { CANDIDATE_USER_RAW_INPUT = 1, - CANDIDATE_LIBPINYIN, + CANDIDATE_NBEST_MATCH, + /* not included with user candidate */ + CANDIDATE_NORMAL, + /* both normal candidate and user candidate */ + CANDIDATE_USER, CANDIDATE_TRADITIONAL_CHINESE, CANDIDATE_LUA_EXTENSION, CANDIDATE_CLOUD_INPUT, diff --git a/src/PYPLibPinyinCandidates.cc b/src/PYPLibPinyinCandidates.cc index 2b3d745..91865be 100644 --- a/src/PYPLibPinyinCandidates.cc +++ b/src/PYPLibPinyinCandidates.cc @@ -38,11 +38,32 @@ LibPinyinCandidates::processCandidates (std::vector<EnhancedCandidate> & candida lookup_candidate_t * candidate = NULL; pinyin_get_candidate (instance, i, &candidate); + lookup_candidate_type_t type; + pinyin_get_candidate_type (instance, candidate, &type); + const gchar * phrase_string = NULL; pinyin_get_candidate_string (instance, candidate, &phrase_string); EnhancedCandidate enhanced; - enhanced.m_candidate_type = CANDIDATE_LIBPINYIN; + + switch (type) { + case NBEST_MATCH_CANDIDATE: + enhanced.m_candidate_type = CANDIDATE_NBEST_MATCH; + break; + + case NORMAL_CANDIDATE: + case ADDON_CANDIDATE: + enhanced.m_candidate_type = CANDIDATE_NORMAL; + + if (pinyin_is_user_candidate (instance, candidate)) + enhanced.m_candidate_type = CANDIDATE_USER; + + break; + + default: + assert (FALSE); + } + enhanced.m_candidate_id = i; enhanced.m_display_string = phrase_string; @@ -56,7 +77,9 @@ SelectCandidateAction LibPinyinCandidates::selectCandidate (EnhancedCandidate & enhanced) { pinyin_instance_t * instance = m_editor->m_instance; - assert (CANDIDATE_LIBPINYIN == enhanced.m_candidate_type); + assert (CANDIDATE_NBEST_MATCH == enhanced.m_candidate_type || + CANDIDATE_NORMAL == enhanced.m_candidate_type || + CANDIDATE_USER == enhanced.m_candidate_type); guint len = 0; pinyin_get_n_candidate (instance, &len); @@ -69,10 +92,7 @@ LibPinyinCandidates::selectCandidate (EnhancedCandidate & enhanced) lookup_candidate_t * candidate = NULL; pinyin_get_candidate (instance, enhanced.m_candidate_id, &candidate); - lookup_candidate_type_t type; - pinyin_get_candidate_type (instance, candidate, &type); - - if (NBEST_MATCH_CANDIDATE == type) { + if (CANDIDATE_NBEST_MATCH == enhanced.m_candidate_type) { /* because nbest match candidate starts from the beginning of user input. */ pinyin_choose_candidate (instance, 0, candidate); diff --git a/src/PYPPhoneticEditor.cc b/src/PYPPhoneticEditor.cc index 481a06f..5e58854 100644 --- a/src/PYPPhoneticEditor.cc +++ b/src/PYPPhoneticEditor.cc @@ -18,7 +18,9 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + #include "PYPPhoneticEditor.h" +#include <assert.h> #include "PYConfig.h" #include "PYPinyinProperties.h" #include "PYSimpTradConverter.h" @@ -30,7 +32,9 @@ PhoneticEditor::PhoneticEditor (PinyinProperties &props, Config &config): Editor (props, config), m_pinyin_len (0), - m_lookup_table (m_config.pageSize ()) + m_lookup_table (m_config.pageSize ()), + m_libpinyin_candidates (this), + m_traditional_candidates (this) { } @@ -192,6 +196,7 @@ PhoneticEditor::updateLookupTable (void) { m_lookup_table.clear (); + updateCandidates (); fillLookupTable (); if (m_lookup_table.size()) { Editor::updateLookupTable (m_lookup_table, TRUE); @@ -200,6 +205,17 @@ PhoneticEditor::updateLookupTable (void) } } +gboolean +PhoneticEditor::updateCandidates (void) +{ + m_libpinyin_candidates.processCandidates (m_candidates); + + if (!m_props.modeSimp ()) + m_traditional_candidates.processCandidates (m_candidates); + + return TRUE; +} + #if 0 gboolean PhoneticEditor::fillLookupTableByPage (void) @@ -372,6 +388,23 @@ PhoneticEditor::getLookupCursor (void) return lookup_cursor; } +SelectCandidateAction +PhoneticEditor::selectCandidateInternal (EnhancedCandidate & candidate) +{ + switch (candidate.m_candidate_type) { + case CANDIDATE_NBEST_MATCH: + case CANDIDATE_NORMAL: + case CANDIDATE_USER: + return m_libpinyin_candidates.selectCandidate (candidate); + + case CANDIDATE_TRADITIONAL_CHINESE: + return m_traditional_candidates.selectCandidate (candidate); + + default: + assert (FALSE); + } +} + gboolean PhoneticEditor::selectCandidate (guint i) { diff --git a/src/PYPPhoneticEditor.h b/src/PYPPhoneticEditor.h index 640c1a5..77b9fbd 100644 --- a/src/PYPPhoneticEditor.h +++ b/src/PYPPhoneticEditor.h @@ -26,6 +26,8 @@ #include "PYLookupTable.h" #include "PYEditor.h" #include "PYPEnhancedCandidates.h" +#include "PYPLibPinyinCandidates.h" +#include "PYPTradCandidates.h" namespace PY { @@ -101,6 +103,8 @@ protected: std::vector<EnhancedCandidate> m_candidates; /* several EnhancedCandidates providers. */ + LibPinyinCandidates m_libpinyin_candidates; + TraditionalCandidates m_traditional_candidates; }; }; |