From ec07ce432703c190d9c0d187dd3bb6afbb5e06fb Mon Sep 17 00:00:00 2001 From: Peng Wu Date: Tue, 4 Aug 2015 12:08:03 +0800 Subject: fixes _compute_phrase_strings_of_items function --- src/libzhuyin.ver | 1 + src/zhuyin.cpp | 16 ++++++++++++---- tests/test_pinyin.cpp | 2 +- 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); -- cgit