re-factor libpinyin backend
authorPeng Wu <alexepico@gmail.com>
Thu, 29 Sep 2011 03:03:50 +0000 (11:03 +0800)
committerPeng Wu <alexepico@gmail.com>
Thu, 22 Dec 2011 04:23:13 +0000 (12:23 +0800)
src/PYLibPinyin.cc
src/PYLibPinyin.h
src/PYMain.cc

index 8e3d7af..e4d1b84 100644 (file)
@@ -29,15 +29,25 @@ std::unique_ptr<LibPinyinBackEnd> LibPinyinBackEnd::m_instance;
 
 static LibPinyinBackEnd libpinyin_backend;
 
-LibPinyinBackEnd::LibPinyinBackEnd(){
-    g_assert (NULL == m_instance.get ());
-    m_pinyin_context = pinyin_init("/usr/share/libpinyin/data", "../data");
-    m_instance.reset(this);
+LibPinyinBackEnd::LibPinyinBackEnd () {
+    m_pinyin_context = pinyin_init ("/usr/share/libpinyin/data", NULL);
+    m_chewing_context = pinyin_init ("/usr/share/libpinyin/data", NULL);
 }
 
-LibPinyinBackEnd::~LibPinyinBackEnd(){
+LibPinyinBackEnd::~LibPinyinBackEnd () {
     pinyin_fini(m_pinyin_context);
-    m_instance = NULL;
+    pinyin_fini(m_chewing_context);
+}
+
+void
+LibPinyinBackEnd::init (void) {
+    g_assert (NULL == m_instance.get ());
+    LibPinyinBackEnd * backend = new LibPinyinBackEnd;
+    m_instance.reset(backend);
+}
+
+void
+LibPinyinBackEnd::finalize (void) {
 }
 
 /* Here are the fuzzy pinyin options conversion table. */
index 3d40b1d..212bf53 100644 (file)
@@ -41,6 +41,9 @@ public:
     /* use static initializer in C++. */
     static LibPinyinBackEnd & instance (void) { return *m_instance; }
 
+    static void init (void);
+    static void finalize (void);
+
 protected:
     gboolean setFuzzyOptions (Config *config, pinyin_context_t *context);
 
index f786b70..d24cc3c 100644 (file)
@@ -30,6 +30,7 @@
 #include "PYBus.h"
 #include "PYConfig.h"
 #include "PYDatabase.h"
+#include "PYLibPinyin.h"
 
 using namespace PY;
 
@@ -88,6 +89,7 @@ start_component (void)
     Database::init ();
     PinyinConfig::init (bus);
     BopomofoConfig::init (bus);
+    LibPinyinBackEnd::init ();
 
     g_signal_connect ((IBusBus *)bus, "disconnected", G_CALLBACK (ibus_disconnected_cb), NULL);
 
@@ -148,6 +150,7 @@ sigterm_cb (int sig)
 static void
 atexit_cb (void)
 {
+    LibPinyinBackEnd::finalize ();
     PY::Database::finalize ();
 }