diff options
author | Peng Wu <alexepico@gmail.com> | 2013-03-21 15:39:45 +0800 |
---|---|---|
committer | Peng Wu <alexepico@gmail.com> | 2013-03-21 16:01:53 +0800 |
commit | 9a0fa3e39b7efb2e965243cf81a1ed86f6cb12b6 (patch) | |
tree | 6d91a78fa5507ff1bbea63f900be6f40098aaa30 /src | |
parent | ffe1467bae65ee5dbf863070f3765559a8bb8a12 (diff) | |
download | libpinyin-9a0fa3e39b7efb2e965243cf81a1ed86f6cb12b6.tar.gz libpinyin-9a0fa3e39b7efb2e965243cf81a1ed86f6cb12b6.tar.xz libpinyin-9a0fa3e39b7efb2e965243cf81a1ed86f6cb12b6.zip |
write candidates methods
Diffstat (limited to 'src')
-rw-r--r-- | src/pinyin.cpp | 50 | ||||
-rw-r--r-- | src/pinyin.h | 21 |
2 files changed, 60 insertions, 11 deletions
diff --git a/src/pinyin.cpp b/src/pinyin.cpp index 7c8116b..21ea69c 100644 --- a/src/pinyin.cpp +++ b/src/pinyin.cpp @@ -65,7 +65,7 @@ struct _pinyin_instance_t{ }; struct _lookup_candidate_t{ - enum lookup_candidate_type_t m_candidate_type; + lookup_candidate_type_t m_candidate_type; gchar * m_phrase_string; phrase_token_t m_token; ChewingKeyRest m_orig_rest; @@ -1907,16 +1907,52 @@ bool pinyin_token_add_unigram_frequency(pinyin_instance_t * instance, return ERROR_OK == retval; } -size_t pinyin_get_n_candidate(pinyin_instance_t * instance){ - return instance->m_candidates->len; +bool pinyin_get_n_candidate(pinyin_instance_t * instance, + guint * num) { + *num = instance->m_candidates->len; + return true; +} + +bool pinyin_get_candidate(pinyin_instance_t * instance, + guint index, + lookup_candidate_t ** candidate) { + CandidateVector & candidates = instance->m_candidates; + + *candidate = NULL; + + if (index >= candidates->len) + return false; + + *candidate = &g_array_index(candidates, lookup_candidate_t, index); + + return true; } -size_t pinyin_get_n_pinyin(pinyin_instance_t * instance){ - assert (instance->m_pinyin_keys->len == - instance->m_pinyin_key_rests->len); - return instance->m_pinyin_keys->len; +bool pinyin_get_candidate_type(pinyin_instance_t * instance, + lookup_candidate_t * candidate, + lookup_candidate_type_t * type) { + *type = candidate->m_candidate_type; + return true; } +bool pinyin_get_candidate_string(pinyin_instance_t * instance, + lookup_candidate_t * candidate, + const gchar ** utf8_str) { + *utf8_str = candidate->m_phrase_string; + return true; +} + +bool pinyin_get_n_pinyin(pinyin_instance_t * instance, + guint * num) { + *num = 0; + + if (instance->m_pinyin_keys->len != + instance->m_pinyin_key_rests->len) + return false; + + *num = instance->m_pinyin_keys->len; + return true; +} /** * Note: prefix is the text before the pre-edit string. diff --git a/src/pinyin.h b/src/pinyin.h index 354aca3..ce49517 100644 --- a/src/pinyin.h +++ b/src/pinyin.h @@ -52,13 +52,13 @@ typedef struct _lookup_candidate_t lookup_candidate_t; typedef struct _import_iterator_t import_iterator_t; -enum lookup_candidate_type_t{ +typedef enum _lookup_candidate_type_t{ BEST_MATCH_CANDIDATE = 1, NORMAL_CANDIDATE, DIVIDED_CANDIDATE, RESPLIT_CANDIDATE, ZOMBIE_CANDIDATE -}; +} lookup_candidate_type_t; /** * pinyin_init: @@ -563,10 +563,23 @@ bool pinyin_token_add_unigram_frequency(pinyin_instance_t * instance, guint delta); -size_t pinyin_get_n_candidate(pinyin_instance_t * instance); +bool pinyin_get_n_candidate(pinyin_instance_t * instance, + guint * num); + +bool pinyin_get_candidate(pinyin_instance_t * instance, + guint index, + lookup_candidate_t ** candidate); + +bool pinyin_get_candidate_type(pinyin_instance_t * instance, + lookup_candidate_t * candidate, + lookup_candidate_type_t * type); -size_t pinyin_get_n_pinyin(pinyin_instance_t * instance); +bool pinyin_get_candidate_string(pinyin_instance_t * instance, + lookup_candidate_t * candidate, + const gchar ** utf8_str); +bool pinyin_get_n_pinyin(pinyin_instance_t * instance, + guint * num); /* hack here. */ typedef ChewingKey PinyinKey; |