summaryrefslogtreecommitdiffstats
path: root/src/pinyin.cpp
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2015-05-28 13:19:20 +0800
committerPeng Wu <alexepico@gmail.com>2015-05-28 13:19:20 +0800
commit4e829b1653e347bc171904c0f2c1e487403e3985 (patch)
treed83ce0d824e49b813d9355d568ca6391e2949e28 /src/pinyin.cpp
parent59fe2160a265ebecce051645bba78b1fe3ddf8eb (diff)
downloadlibpinyin-4e829b1653e347bc171904c0f2c1e487403e3985.tar.gz
libpinyin-4e829b1653e347bc171904c0f2c1e487403e3985.tar.xz
libpinyin-4e829b1653e347bc171904c0f2c1e487403e3985.zip
update pinyin_guess_candidates function
Diffstat (limited to 'src/pinyin.cpp')
-rw-r--r--src/pinyin.cpp22
1 files changed, 16 insertions, 6 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);