summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2018-06-04 17:20:12 +0800
committerPeng Wu <alexepico@gmail.com>2018-06-04 17:20:12 +0800
commite0d134cb400b563f65bd9de36b5391a34b9e308c (patch)
tree411289e5be3f7ec5569fe8750a62e36e99239061 /src
parent2720cbc52c5e31d4b4a0ad193c6ae369fcd0c5b2 (diff)
downloadibus-libpinyin-e0d134cb400b563f65bd9de36b5391a34b9e308c.tar.gz
ibus-libpinyin-e0d134cb400b563f65bd9de36b5391a34b9e308c.tar.xz
ibus-libpinyin-e0d134cb400b563f65bd9de36b5391a34b9e308c.zip
re-factor LibPinyinCandidates
Diffstat (limited to 'src')
-rw-r--r--src/PYPEnhancedCandidates.h6
-rw-r--r--src/PYPLibPinyinCandidates.cc32
-rw-r--r--src/PYPPhoneticEditor.cc35
-rw-r--r--src/PYPPhoneticEditor.h4
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;
};
};