diff options
author | Dom Lachowicz <domlachowicz@gmail.com> | 2008-08-06 18:00:13 +0000 |
---|---|---|
committer | Dom Lachowicz <domlachowicz@gmail.com> | 2008-08-06 18:00:13 +0000 |
commit | 19e2f4ad59e0e68c0f60488517778c29a94a2a1d (patch) | |
tree | 3af720870d6fa01db590ab1970c0985be74b6c5a | |
parent | 846577d3c4a677d736c22d155954faf895491e8a (diff) | |
download | enchant-19e2f4ad59e0e68c0f60488517778c29a94a2a1d.tar.gz |
Various changes to the zemberek backend. Unsure if this compiles, even.
*) Don't return a Turkish dictionary for nonsense language tags
*) If we can't connect to the system bus or if the zemberek service isn't installed/running, don't return a dictionary or claim to support the Turkish language.
*) Remove dead code
git-svn-id: svn+ssh://svn.abisource.com/svnroot/enchant/trunk@24576 bcba8976-2d24-0410-9c9c-aab3bd5fdfd6
-rw-r--r-- | src/zemberek/zemberek.cpp | 51 | ||||
-rw-r--r-- | src/zemberek/zemberek.h | 6 | ||||
-rw-r--r-- | src/zemberek/zemberek_provider.cpp | 75 |
3 files changed, 81 insertions, 51 deletions
diff --git a/src/zemberek/zemberek.cpp b/src/zemberek/zemberek.cpp index d679de7..47ee32f 100644 --- a/src/zemberek/zemberek.cpp +++ b/src/zemberek/zemberek.cpp @@ -19,23 +19,54 @@ #include "zemberek.h" -Zemberek::Zemberek() +bool zemberek_service_is_running () { + DBusGConnection *connection; + DBusGProxy *proxy; - GError *Error; + GError *Error = NULL; g_type_init (); - Error = NULL; connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &Error); if (connection == NULL) { - //g_stpcpy(error,Error->message); g_error_free (Error); + return false; } proxy = dbus_g_proxy_new_for_name (connection, "net.zemberekserver.server.dbus", "/net/zemberekserver/server/dbus/ZemberekDbus", "net.zemberekserver.server.dbus.ZemberekDbusInterface"); + + dbus_g_connection_unref (connection); + if (proxy == NULL) { + return false; + } + + g_object_unref (proxy); + return true; +} + +Zemberek::Zemberek() + : connection(NULL), proxy(NULL) +{ + GError *Error = NULL; + g_type_init (); + + connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, + &Error); + if (connection == NULL) { + g_error_free (Error); + throw "couldn't connect to the system bus"; + } + proxy = dbus_g_proxy_new_for_name (connection, + "net.zemberekserver.server.dbus", + "/net/zemberekserver/server/dbus/ZemberekDbus", + "net.zemberekserver.server.dbus.ZemberekDbusInterface"); + + if (proxy == NULL) { + throw "couldn't connect to the Zemberek service"; + } } @@ -43,18 +74,18 @@ Zemberek::~Zemberek() { if(proxy) g_object_unref (proxy); + if(connection) + dbus_g_connection_unref (connection); } -int Zemberek::checkWord(const char* word ) const +int Zemberek::checkWord(const char* word) const { gboolean result; - GError *Error; - Error=NULL; + GError *Error = NULL; if (!dbus_g_proxy_call (proxy, "kelimeDenetle", &Error, G_TYPE_STRING,word,G_TYPE_INVALID, G_TYPE_BOOLEAN, &result, G_TYPE_INVALID)) { - //g_stpcpy(error,Error->message); g_error_free (Error); return -1; } @@ -70,12 +101,10 @@ int Zemberek::checkWord(const char* word ) const char** Zemberek::suggestWord(const char* word, size_t *out_n_suggs) { char** suggs; - GError *Error; - Error=NULL; + GError *Error = NULL; if (!dbus_g_proxy_call (proxy, "oner", &Error, G_TYPE_STRING,word,G_TYPE_INVALID, G_TYPE_STRV, &suggs,G_TYPE_INVALID)) { - //g_stpcpy(error,Error->message); g_error_free (Error); return NULL; } diff --git a/src/zemberek/zemberek.h b/src/zemberek/zemberek.h index 51b71bb..530c418 100644 --- a/src/zemberek/zemberek.h +++ b/src/zemberek/zemberek.h @@ -23,8 +23,6 @@ #include <dbus/dbus-glib.h> #include <glib.h> -using namespace std; - class Zemberek { public: @@ -33,9 +31,11 @@ public: int checkWord(const char* word) const; char** suggestWord(const char* word, size_t *out_n_suggs); - //char *error; + private: DBusGConnection *connection; DBusGProxy *proxy; }; + +bool zemberek_service_is_running (); #endif diff --git a/src/zemberek/zemberek_provider.cpp b/src/zemberek/zemberek_provider.cpp index 3c2d1eb..ea51b4e 100644 --- a/src/zemberek/zemberek_provider.cpp +++ b/src/zemberek/zemberek_provider.cpp @@ -1,19 +1,19 @@ /* Copyright (C) 2006 Barış Metin <baris@pardus.org.tr> * Copyright (C) 2007 Serkan Kaba <serkan_kaba@yahoo.com> - * + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. */ @@ -26,20 +26,12 @@ ENCHANT_PLUGIN_DECLARE("Zemberek") - static int zemberek_dict_check (EnchantDict * me, const char *const word, size_t len) { Zemberek *checker; checker = (Zemberek *) me->user_data; - int result = checker->checkWord(word); - /* - if(result == -1) { - enchant_dict_set_error(me,checker->error); - g_free(checker->error); - } - */ - return result; + return checker->checkWord(word); } static char** @@ -48,14 +40,7 @@ zemberek_dict_suggest (EnchantDict * me, const char *const word, { Zemberek *checker; checker = (Zemberek *) me->user_data; - char **result = checker->suggestWord (word, out_n_suggs); - /* - if(!result) { - enchant_dict_set_error(me,checker->error); - g_free(checker->error); - } - */ - return result; + return checker->suggestWord (word, out_n_suggs); } static void @@ -67,17 +52,25 @@ zemberek_provider_dispose(EnchantProvider *me) static EnchantDict* zemberek_provider_request_dict(EnchantProvider *me, const char *tag) { - Zemberek* checker = new Zemberek(); - - if (!checker) + if (!((strcmp(tag, "tr") == 0) || (strncmp(tag, "tr_", 3) == 0))) + return NULL; // only handle turkish + + try + { + Zemberek* checker = new Zemberek(); + + EnchantDict* dict = g_new0(EnchantDict, 1); + dict->user_data = (void *) checker; + dict->check = zemberek_dict_check; + dict->suggest = zemberek_dict_suggest; + + return dict; + } + catch(...) + { + // will fail if zemberek service isn't running return NULL; - - EnchantDict* dict = g_new0(EnchantDict, 1); - dict->user_data = (void *) checker; - dict->check = zemberek_dict_check; - dict->suggest = zemberek_dict_suggest; - - return dict; + } } static void @@ -107,28 +100,36 @@ zemberek_provider_free_string_list (EnchantProvider * me, char **str_list) g_strfreev (str_list); } -static char ** -zemberek_provider_list_dicts (EnchantProvider * me, +static char ** +zemberek_provider_list_dicts (EnchantProvider * me, size_t * out_n_dicts) { + if (!zemberek_service_is_running ()) + { + *out_n_dicts = 0; + return NULL; + } + else + { char ** out_list = NULL; *out_n_dicts = 1; out_list = g_new0 (char *, 2); out_list[0] = g_strdup ("tr"); - + return out_list; + } } extern "C" { -ENCHANT_MODULE_EXPORT(EnchantProvider *) +ENCHANT_MODULE_EXPORT(EnchantProvider *) init_enchant_provider(void); EnchantProvider * init_enchant_provider(void) { EnchantProvider *provider; - + provider = g_new0(EnchantProvider, 1); provider->dispose = zemberek_provider_dispose; provider->request_dict = zemberek_provider_request_dict; @@ -141,4 +142,4 @@ init_enchant_provider(void) return provider; } -} +} |