From 4e829b1653e347bc171904c0f2c1e487403e3985 Mon Sep 17 00:00:00 2001 From: Peng Wu Date: Thu, 28 May 2015 13:19:20 +0800 Subject: update pinyin_guess_candidates function --- src/pinyin.cpp | 22 ++++++++++++++++------ src/pinyin.h | 3 ++- src/storage/table_info.cpp | 6 +++++- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/pinyin.cpp b/src/pinyin.cpp index 34169fb..0e641a1 100644 --- a/src/pinyin.cpp +++ b/src/pinyin.cpp @@ -1379,8 +1379,7 @@ static phrase_token_t _get_previous_token(pinyin_instance_t * instance, return prev_token; } -static void _append_items(pinyin_context_t * context, - PhraseIndexRanges ranges, +static void _append_items(PhraseIndexRanges ranges, lookup_candidate_t * template_item, CandidateVector items) { /* reduce and append to a single GArray. */ @@ -1656,6 +1655,10 @@ bool pinyin_guess_candidates(pinyin_instance_t * instance, memset(ranges, 0, sizeof(ranges)); context->m_phrase_index->prepare_ranges(ranges); + PhraseIndexRanges addon_ranges; + memset(addon_ranges, 0, sizeof(addon_ranges)); + context->m_addon_phrase_index->prepare_ranges(ranges); + GArray * items = g_array_new(FALSE, FALSE, sizeof(lookup_candidate_t)); for (i = pinyin_len; i >= 1; --i) { @@ -1668,11 +1671,18 @@ bool pinyin_guess_candidates(pinyin_instance_t * instance, int retval = context->m_pinyin_table->search (i, keys, ranges); + retval = context->m_addon_pinyin_table->search + (i, keys, addon_ranges) || retval; + if ( !(retval & SEARCH_OK) ) continue; lookup_candidate_t template_item; - _append_items(context, ranges, &template_item, items); + _append_items(ranges, &template_item, items); + + lookup_candidate_t addon_template_item; + addon_template_item.m_candidate_type = ADDON_CANDIDATE; + _append_items(addon_ranges, &addon_template_item, items); #if 0 g_array_sort(items, compare_item_with_token); @@ -1794,7 +1804,7 @@ static bool _try_divided_table(pinyin_instance_t * instance, template_item.m_orig_rest = orig_rest; template_item.m_new_pinyins = new_pinyins; - _append_items(context, ranges, &template_item, items); + _append_items(ranges, &template_item, items); found = true; } g_free(new_pinyins); @@ -1932,7 +1942,7 @@ static bool _try_resplit_table(pinyin_instance_t * instance, template_item.m_orig_rest = orig_rest; template_item.m_new_pinyins = new_pinyins; - _append_items(context, ranges, &template_item, items); + _append_items(ranges, &template_item, items); found = true; } g_free(new_pinyins); @@ -2049,7 +2059,7 @@ bool pinyin_guess_full_pinyin_candidates(pinyin_instance_t * instance, continue; lookup_candidate_t template_item; - _append_items(context, ranges, &template_item, items); + _append_items(ranges, &template_item, items); #if 0 g_array_sort(items, compare_item_with_token); diff --git a/src/pinyin.h b/src/pinyin.h index 019aea9..12915ee 100644 --- a/src/pinyin.h +++ b/src/pinyin.h @@ -46,7 +46,8 @@ typedef enum _lookup_candidate_type_t{ DIVIDED_CANDIDATE, RESPLIT_CANDIDATE, ZOMBIE_CANDIDATE, - PREDICTED_CANDIDATE + PREDICTED_CANDIDATE, + ADDON_CANDIDATE, } lookup_candidate_type_t; /** diff --git a/src/storage/table_info.cpp b/src/storage/table_info.cpp index 3d57e15..ff499b3 100644 --- a/src/storage/table_info.cpp +++ b/src/storage/table_info.cpp @@ -139,6 +139,10 @@ static guint8 to_index_of_default_tables(const char * str) { assert(FALSE); } +static guint8 to_index_of_addon_tables(const char * str) { + return atoi(str); +} + static gchar * to_string(const char * str) { HANDLE(NULL); @@ -230,7 +234,7 @@ bool SystemTableInfo2::load(const char * filename) { if (ADDON_TABLE == target) { tables = m_addon_tables; - index = atoi(dictstr); + index = to_index_of_addon_tables(dictstr); } assert(0 <= index && index < PHRASE_INDEX_LIBRARY_COUNT); -- cgit