summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeng Wu <alexepico@gmail.com>2013-10-15 14:23:22 +0800
committerPeng Wu <alexepico@gmail.com>2013-10-15 14:23:22 +0800
commit01ba02f1a8037f46b5c34fa1d95d23f05e3fa298 (patch)
treee960e0ee80f7b1f50653ba8b697026fee157de93
parent8af8e2036ec59a0eb590b7e8be3fc9b2c021bb1a (diff)
downloadlibzhuyin-01ba02f1a8037f46b5c34fa1d95d23f05e3fa298.tar.gz
libzhuyin-01ba02f1a8037f46b5c34fa1d95d23f05e3fa298.tar.xz
libzhuyin-01ba02f1a8037f46b5c34fa1d95d23f05e3fa298.zip
write pinyin_set_full_pinyin_scheme
-rw-r--r--src/libpinyin.ver1
-rw-r--r--src/pinyin.cpp37
-rw-r--r--src/pinyin.h12
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.
*