summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2013-03-21 15:39:45 +0800
committerPeng Wu <alexepico@gmail.com>2013-03-21 16:01:53 +0800
commit9a0fa3e39b7efb2e965243cf81a1ed86f6cb12b6 (patch)
tree6d91a78fa5507ff1bbea63f900be6f40098aaa30 /src
parentffe1467bae65ee5dbf863070f3765559a8bb8a12 (diff)
downloadlibpinyin-9a0fa3e39b7efb2e965243cf81a1ed86f6cb12b6.tar.gz
libpinyin-9a0fa3e39b7efb2e965243cf81a1ed86f6cb12b6.tar.xz
libpinyin-9a0fa3e39b7efb2e965243cf81a1ed86f6cb12b6.zip
write candidates methods
Diffstat (limited to 'src')
-rw-r--r--src/pinyin.cpp50
-rw-r--r--src/pinyin.h21
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;