summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDom Lachowicz <domlachowicz@gmail.com>2008-08-06 18:00:13 +0000
committerDom Lachowicz <domlachowicz@gmail.com>2008-08-06 18:00:13 +0000
commit19e2f4ad59e0e68c0f60488517778c29a94a2a1d (patch)
tree3af720870d6fa01db590ab1970c0985be74b6c5a
parent846577d3c4a677d736c22d155954faf895491e8a (diff)
downloadenchant-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.cpp51
-rw-r--r--src/zemberek/zemberek.h6
-rw-r--r--src/zemberek/zemberek_provider.cpp75
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;
}
-}
+}