summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2015-08-04 12:08:03 +0800
committerPeng Wu <alexepico@gmail.com>2015-08-04 12:08:03 +0800
commitec07ce432703c190d9c0d187dd3bb6afbb5e06fb (patch)
tree8a219fc3617cc9c599d246df25bdfc01a172cab1
parentc82d249461e86e8d83881528fe7ade1f5f63ce2a (diff)
downloadlibzhuyin-ec07ce432703c190d9c0d187dd3bb6afbb5e06fb.tar.gz
libzhuyin-ec07ce432703c190d9c0d187dd3bb6afbb5e06fb.tar.xz
libzhuyin-ec07ce432703c190d9c0d187dd3bb6afbb5e06fb.zip
fixes _compute_phrase_strings_of_items function
-rw-r--r--src/libzhuyin.ver1
-rw-r--r--src/zhuyin.cpp16
-rw-r--r--tests/test_pinyin.cpp2
3 files changed, 14 insertions, 5 deletions
diff --git a/src/libzhuyin.ver b/src/libzhuyin.ver
index be217df..0421a4a 100644
--- a/src/libzhuyin.ver
+++ b/src/libzhuyin.ver
@@ -25,6 +25,7 @@ LIBZHUYIN {
zhuyin_get_parsed_input_length;
zhuyin_in_chewing_keyboard;
zhuyin_guess_candidates_after_cursor;
+ zhuyin_guess_candidates_before_cursor;
zhuyin_choose_candidate;
zhuyin_clear_constraint;
zhuyin_lookup_tokens;
diff --git a/src/zhuyin.cpp b/src/zhuyin.cpp
index d754908..251e6c8 100644
--- a/src/zhuyin.cpp
+++ b/src/zhuyin.cpp
@@ -1159,6 +1159,7 @@ static bool _prepend_sentence_candidate(zhuyin_instance_t * instance,
static bool _compute_phrase_strings_of_items(zhuyin_instance_t * instance,
size_t offset,
+ bool is_after_cursor,
CandidateVector candidates) {
/* populate m_phrase_string in lookup_candidate_t. */
@@ -1170,8 +1171,13 @@ static bool _compute_phrase_strings_of_items(zhuyin_instance_t * instance,
case BEST_MATCH_CANDIDATE: {
gchar * sentence = NULL;
zhuyin_get_sentence(instance, &sentence);
- candidate->m_phrase_string = g_strdup
- (g_utf8_offset_to_pointer(sentence, offset));
+ if (is_after_cursor) {
+ candidate->m_phrase_string = g_strdup
+ (g_utf8_offset_to_pointer(sentence, offset));
+ } else {
+ candidate->m_phrase_string = g_utf8_substring
+ (sentence, 0, offset);
+ }
g_free(sentence);
break;
}
@@ -1382,7 +1388,8 @@ bool zhuyin_guess_candidates_after_cursor(zhuyin_instance_t * instance,
_prepend_sentence_candidate(instance, instance->m_candidates);
- _compute_phrase_strings_of_items(instance, offset, instance->m_candidates);
+ _compute_phrase_strings_of_items(instance, offset,
+ true, instance->m_candidates);
_remove_duplicated_items_by_phrase_string(instance, instance->m_candidates);
@@ -1478,7 +1485,8 @@ bool zhuyin_guess_candidates_before_cursor(zhuyin_instance_t * instance,
_prepend_sentence_candidate(instance, instance->m_candidates);
- _compute_phrase_strings_of_items(instance, offset, instance->m_candidates);
+ _compute_phrase_strings_of_items(instance, offset,
+ false, instance->m_candidates);
_remove_duplicated_items_by_phrase_string(instance, instance->m_candidates);
diff --git a/tests/test_pinyin.cpp b/tests/test_pinyin.cpp
index 2d9d300..6442dcb 100644
--- a/tests/test_pinyin.cpp
+++ b/tests/test_pinyin.cpp
@@ -64,7 +64,7 @@ int main(int argc, char * argv[]){
zhuyin_parse_more_full_pinyins(instance, linebuf);
zhuyin_guess_sentence_with_prefix(instance, prefixbuf);
- zhuyin_guess_candidates(instance, 0);
+ zhuyin_guess_candidates_after_cursor(instance, 0);
guint len = 0;
zhuyin_get_n_candidate(instance, &len);