diff options
author | Peng Wu <alexepico@gmail.com> | 2013-10-15 14:23:22 +0800 |
---|---|---|
committer | Peng Wu <alexepico@gmail.com> | 2013-10-15 14:23:22 +0800 |
commit | 01ba02f1a8037f46b5c34fa1d95d23f05e3fa298 (patch) | |
tree | e960e0ee80f7b1f50653ba8b697026fee157de93 | |
parent | 8af8e2036ec59a0eb590b7e8be3fc9b2c021bb1a (diff) | |
download | libzhuyin-01ba02f1a8037f46b5c34fa1d95d23f05e3fa298.tar.gz libzhuyin-01ba02f1a8037f46b5c34fa1d95d23f05e3fa298.tar.xz libzhuyin-01ba02f1a8037f46b5c34fa1d95d23f05e3fa298.zip |
write pinyin_set_full_pinyin_scheme
-rw-r--r-- | src/libpinyin.ver | 1 | ||||
-rw-r--r-- | src/pinyin.cpp | 37 | ||||
-rw-r--r-- | src/pinyin.h | 12 |
3 files changed, 47 insertions, 3 deletions
diff --git a/src/libpinyin.ver b/src/libpinyin.ver index a05b81c..b7287f7 100644 --- a/src/libpinyin.ver +++ b/src/libpinyin.ver @@ -3,6 +3,7 @@ LIBPINYIN { pinyin_init; pinyin_save; pinyin_set_chewing_scheme; + pinyin_set_full_pinyin_scheme; pinyin_load_phrase_library; pinyin_unload_phrase_library; pinyin_begin_add_phrases; diff --git a/src/pinyin.cpp b/src/pinyin.cpp index 7cb57a7..a389637 100644 --- a/src/pinyin.cpp +++ b/src/pinyin.cpp @@ -36,8 +36,9 @@ typedef GArray * CandidateVector; /* GArray of lookup_candidate_t */ struct _pinyin_context_t{ pinyin_option_t m_options; + FullPinyinScheme m_full_pinyin_scheme; FullPinyinParser2 * m_full_pinyin_parser; - ChewingDiscreteParser2 * m_chewing_parser; + ChewingParser2 * m_chewing_parser; FacadeChewingTable * m_pinyin_table; FacadePhraseTable2 * m_phrase_table; @@ -177,6 +178,7 @@ pinyin_context_t * pinyin_init(const char * systemdir, const char * userdir){ check_format(context); + context->m_full_pinyin_scheme = FULL_PINYIN_DEFAULT; context->m_full_pinyin_parser = new FullPinyinParser2; context->m_chewing_parser = new ChewingDiscreteParser2; @@ -637,7 +639,34 @@ bool pinyin_save(pinyin_context_t * context){ bool pinyin_set_chewing_scheme(pinyin_context_t * context, ChewingScheme scheme){ - context->m_chewing_parser->set_scheme(scheme); + delete context->m_chewing_parser; + context->m_chewing_parser = NULL; + + switch(scheme) { + case CHEWING_STANDARD: + case CHEWING_HSU: + case CHEWING_IBM: + case CHEWING_GINYIEH: + case CHEWING_ETEN: + case CHEWING_ETEN26: + case CHEWING_STANDARD_DVORAK: + case CHEWING_HSU_DVORAK: { + ChewingDiscreteParser2 * parser = new ChewingDiscreteParser2(); + parser->set_scheme(scheme); + context->m_chewing_parser = parser; + break; + } + case CHEWING_DACHEN_CP26: + context->m_chewing_parser = new ChewingDaChenCP26Parser2(); + break; + } + return true; +} + +bool pinyin_set_full_pinyin_scheme(pinyin_context_t * context, + FullPinyinScheme scheme){ + context->m_full_pinyin_scheme = scheme; + context->m_full_pinyin_parser->set_scheme(scheme); return true; } @@ -1433,11 +1462,13 @@ bool pinyin_get_bopomofo_string(pinyin_instance_t * instance, bool pinyin_get_pinyin_string(pinyin_instance_t * instance, ChewingKey * key, gchar ** utf8_str) { + pinyin_context_t * context = instance->m_context; + *utf8_str = NULL; if (0 == key->get_table_index()) return false; - *utf8_str = key->get_pinyin_string(); + *utf8_str = key->get_pinyin_string(context->m_full_pinyin_scheme); return true; } diff --git a/src/pinyin.h b/src/pinyin.h index 243b81c..699ea0c 100644 --- a/src/pinyin.h +++ b/src/pinyin.h @@ -140,6 +140,18 @@ bool pinyin_set_chewing_scheme(pinyin_context_t * context, ChewingScheme scheme); /** + * pinyin_set_full_pinyin_scheme: + * @context: the pinyin context. + * @scheme: the full pinyin scheme. + * @returns: whether the set full pinyin scheme succeeded. + * + * Change the full pinyin scheme of the pinyin context. + * + */ +bool pinyin_set_full_pinyin_scheme(pinyin_context_t * context, + FullPinyinScheme scheme); + +/** * pinyin_fini: * @context: the pinyin context. * |