diff options
author | Peng Wu <alexepico@gmail.com> | 2012-03-05 16:04:25 +0800 |
---|---|---|
committer | Peng Wu <alexepico@gmail.com> | 2012-03-05 16:04:53 +0800 |
commit | da7323a57cb89ca385676b9566f5b70e4a42e1a3 (patch) | |
tree | 68ab6f84aac99a9fcd608e15f1daed8d3f56e137 /src/pinyin.cpp | |
parent | 536b587a1a5c2aa273026890cec64881e58e5cc5 (diff) | |
download | libpinyin-da7323a57cb89ca385676b9566f5b70e4a42e1a3.tar.gz libpinyin-da7323a57cb89ca385676b9566f5b70e4a42e1a3.tar.xz libpinyin-da7323a57cb89ca385676b9566f5b70e4a42e1a3.zip |
add pinyin_guess_sentence_with_prefix
Diffstat (limited to 'src/pinyin.cpp')
-rw-r--r-- | src/pinyin.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/pinyin.cpp b/src/pinyin.cpp index bf1345b..5f6ebc6 100644 --- a/src/pinyin.cpp +++ b/src/pinyin.cpp @@ -330,6 +330,41 @@ bool pinyin_guess_sentence(pinyin_instance_t * instance){ return retval; } +bool pinyin_guess_sentence_with_prefix(pinyin_instance_t * instance, + const char * prefix){ + pinyin_context_t * & context = instance->m_context; + + g_array_set_size(instance->m_prefixes, 0); + g_array_append_val(instance->m_prefixes, sentence_start); + + glong written = 0; + ucs4_t * ucs4_str = g_utf8_to_ucs4(prefix, -1, NULL, &written, NULL); + + if (ucs4_str && written) { + /* add prefixes. */ + for (ssize_t i = 1; i <= written; ++i) { + if (i > MAX_PHRASE_LENGTH) + break; + + phrase_token_t token = null_token; + ucs4_t * start = ucs4_str + written - i; + int result = context->m_phrase_table->search(i, start, token); + if (result & SEARCH_OK) + g_array_append_val(instance->m_prefixes, token); + } + } + g_free(ucs4_str); + + pinyin_update_constraints(instance); + bool retval = context->m_pinyin_lookup->get_best_match + (instance->m_prefixes, + instance->m_pinyin_keys, + instance->m_constraints, + instance->m_match_results); + + return retval; +} + bool pinyin_phrase_segment(pinyin_instance_t * instance, const char * sentence){ pinyin_context_t * & context = instance->m_context; |