summaryrefslogtreecommitdiffstats
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
parent59fe2160a265ebecce051645bba78b1fe3ddf8eb (diff)
downloadlibpinyin-4e829b1653e347bc171904c0f2c1e487403e3985.tar.gz
libpinyin-4e829b1653e347bc171904c0f2c1e487403e3985.tar.xz
libpinyin-4e829b1653e347bc171904c0f2c1e487403e3985.zip
update pinyin_guess_candidates function
-rw-r--r--src/pinyin.cpp22
-rw-r--r--src/pinyin.h3
-rw-r--r--src/storage/table_info.cpp6
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);