PKGBUILDs/extra/gnome-spell/gnome-spell-enchant.diff

552 lines
17 KiB
Diff
Raw Normal View History

2009-10-10 02:23:22 +00:00
? INSTALL
? autom4te.cache
? depcomp
? gnome-spell-enchant.diff
? gnome-spell-zip
? intltool-extract
? intltool-extract.in
? intltool-merge
? intltool-merge.in
? intltool-update
? intltool-update.in
? missing
? mkinstalldirs
? stamp-h1
? gnome-spell/GNOME_Spell.server
? gnome-spell/GNOME_Spell.server.in
? gnome-spell/
Index: configure.in
===================================================================
RCS file: /cvs/gnome/gnome-spell/configure.in,v
retrieving revision 1.86
diff -u -p -u -p -r1.86 configure.in
--- configure.in 10 Feb 2006 12:08:11 -0000 1.86
+++ configure.in 2 Apr 2006 14:31:45 -0000
@@ -68,34 +68,6 @@ AC_DEFINE_UNQUOTED(API_VERSION, "${API_V
AC_SUBST(API_VERSION)
dnl
-dnl aspell
-dnl
-
-AC_ARG_WITH(aspell-prefix, [ --with-aspell-prefix=DIR
- specify under which prefix aspell is installed.], with_aspell_prefix="$withval", )
-
-if test "x$with_aspell_prefix" != "x"; then
- saved_LDFLAGS=$LDFLAGS
- LDFLAGS="-L$with_aspell_prefix/lib "$LDFLAGS
- ASPELL_INC="-I$with_aspell_prefix/include"
- ASPELL_LIBS="-L$with_aspell_prefix/lib -laspell"
- ASPELL_DATA="$with_aspell_prefix/lib/aspell"
-else
- LDFLAGS="-L`aspell config prefix`/lib "$LDFLAGS
- ASPELL_INC="-I`aspell config prefix`/include"
- ASPELL_LIBS="-L`aspell config prefix`/lib -laspell"
- ASPELL_DICT="`aspell config dict-dir`"
-fi
-AC_CHECK_LIB(aspell,new_aspell_config,,AC_MSG_ERROR([gnome-spell cannot be built without aspell library]),)
-if test "x$with_aspell_prefix" != "x"; then
- LDFLAGS=$saved_LDFLAGS
-fi
-
-AC_SUBST(ASPELL_DICT)
-AC_SUBST(ASPELL_INC)
-AC_SUBST(ASPELL_LIBS)
-
-dnl
dnl flags
dnl
@@ -104,7 +76,7 @@ AC_SUBST(CFLAGS)
AC_SUBST(CPPFLAGS)
AC_SUBST(LDFLAGS)
-GNOME_SPELL_MODULES="libgnomeui-2.0 >= 1.112.1 libbonoboui-2.0 >= 1.112.1 libglade-2.0 >= 1.99.9"
+GNOME_SPELL_MODULES="libgnomeui-2.0 >= 1.112.1 libbonoboui-2.0 >= 1.112.1 libglade-2.0 >= 1.99.9 enchant >= 1.2.5"
PKG_CHECK_MODULES(GNOME_SPELL, $GNOME_SPELL_MODULES)
AC_SUBST(GNOME_SPELL_CFLAGS)
AC_SUBST(GNOME_SPELL_LIBS)
Index: gnome-spell/Makefile.am
===================================================================
RCS file: /cvs/gnome/gnome-spell/gnome-spell/Makefile.am,v
retrieving revision 1.34
diff -u -p -u -p -r1.34 Makefile.am
--- gnome-spell/Makefile.am 19 Jan 2006 23:37:50 -0000 1.34
+++ gnome-spell/Makefile.am 2 Apr 2006 14:31:46 -0000
@@ -7,13 +7,11 @@ END =
INCLUDES = \
-I$(srcdir) \
- $(ASPELL_INC) \
-DPREFIX=\""$(prefix)"\" \
-DGNOMEDATADIR=\""$(datadir)"\" \
-DGNOMELOCALEDIR=\""$(datadir)/locale"\" \
-DGLADE_DATADIR=\"$(gladedir)\" \
-DPLUGIN_DIR=\""$(PLUGIN_DIR)"\" \
- -DASPELL_DICT=\""$(ASPELL_DICT)"\" \
$(GNOME_SPELL_CFLAGS) \
$(END)
@@ -55,7 +53,6 @@ libgnome_spell_idl_la_SOURCES = \
libgnome_spell_component_la_LDFLAGS = -release $(API_VERSION) $(NO_UNDEFINED)
libgnome_spell_component_la_LIBADD = \
libgnome-spell-idl.la \
- $(ASPELL_LIBS) \
$(GNOME_SPELL_LIBS) \
$(END)
@@ -69,7 +66,6 @@ libgnome_spell_component_la_SOURCES = \
test_gnome_spell_component_LDADD = \
libgnome-spell-idl.la \
- $(ASPELL_LIBS) \
$(GNOME_SPELL_LIBS) \
$(END)
Index: gnome-spell/dictionary.c
===================================================================
RCS file: /cvs/gnome/gnome-spell/gnome-spell/dictionary.c,v
retrieving revision 1.39
diff -u -p -u -p -r1.39 dictionary.c
--- gnome-spell/dictionary.c 5 Feb 2006 21:31:09 -0000 1.39
+++ gnome-spell/dictionary.c 2 Apr 2006 14:31:46 -0000
@@ -30,16 +30,21 @@
#include <glib.h>
#include <libgnome/gnome-i18n.h>
#include <libgnome/gnome-config.h>
-#include <gconf/gconf-client.h>
#include <bonobo.h>
#include "Spell.h"
#include "dictionary.h"
+#include <enchant.h>
+
+typedef struct {
+ EnchantBroker * config;
+ EnchantDict * speller;
+} SpellEngine;
+
static BonoboObjectClass *dictionary_parent_class;
#define DICT_DEBUG(x)
-#define GNOME_SPELL_GCONF_DIR "/GNOME/Spell"
static void release_engines (GNOMESpellDictionary *dict);
@@ -72,12 +77,24 @@ gnome_spell_dictionary_init (GObject *ob
{
GNOMESpellDictionary *dict = GNOME_SPELL_DICTIONARY (object);
- dict->changed = TRUE;
dict->engines = NULL;
dict->languages = g_hash_table_new (g_str_hash, g_str_equal);
dict->engines_ht = g_hash_table_new (NULL, NULL);
}
+static char **
+dup_string_list (char ** str_list, size_t list_len)
+{
+ char ** new_str_list;
+ size_t i;
+
+ new_str_list = g_new0 (char *, list_len + 1);
+ for (i = 0; i < list_len; i++)
+ new_str_list [i] = g_strdup (str_list [i]);
+
+ return new_str_list;
+}
+
static void
dictionary_finalize (GObject *object)
{
@@ -93,15 +110,16 @@ dictionary_finalize (GObject *object)
}
static SpellEngine *
-new_engine (const gchar *language)
+new_engine (const gchar *language, CORBA_Environment *ev)
{
SpellEngine *se;
se = g_new0 (SpellEngine, 1);
- se->config = new_aspell_config ();
- aspell_config_replace (se->config, "language-tag", language);
- aspell_config_replace (se->config, "encoding", "utf-8");
- se->changed = TRUE;
+ se->config = enchant_broker_init ();
+ se->speller = enchant_broker_request_dict (se->config, language);
+
+ if(se->speller == NULL)
+ raise_error (ev, enchant_broker_get_error (se->config));
return se;
}
@@ -129,9 +147,9 @@ release_engines (GNOMESpellDictionary *d
SpellEngine *se = dict->engines->data;
if (se->speller)
- delete_aspell_speller (se->speller);
+ enchant_broker_free_dict (se->config, se->speller);
if (se->config)
- delete_aspell_config (se->config);
+ enchant_broker_free (se->config);
g_free (se);
dict->engines = g_slist_remove (dict->engines, se);
}
@@ -140,7 +158,6 @@ release_engines (GNOMESpellDictionary *d
g_hash_table_foreach_remove (dict->languages, remove_engine_ht, NULL);
dict->engines = NULL;
- dict->changed = TRUE;
}
static LangInfo known_languages [] = {
@@ -352,88 +369,31 @@ static LangInfo known_languages [] = {
};
static GSList *
-get_languages_real (gint *ln)
+get_languages (gint *ln)
{
GSList *langs;
- AspellCanHaveError *err;
- AspellConfig *config;
- AspellSpeller *speller;
- gint i;
+ EnchantBroker *broker;
+ gint i, nb_langs;
- DICT_DEBUG (printf ("get_languages_real\n"));
+ DICT_DEBUG (printf ("get_languages\n"));
+ /* todo: this could probably be better done by enchant_broker_list_dicts(), but let's keep
+ the initial code change to a minimum */
+
+ broker = enchant_broker_init ();
langs = NULL;
- *ln = 0;
+ nb_langs = 0;
for (i=0; i < G_N_ELEMENTS (known_languages); i++) {
- config = new_aspell_config ();
- aspell_config_replace (config, "language-tag", known_languages [i].abbreviation);
- err = new_aspell_speller (config);
- if (aspell_error_number (err) == 0) {
- speller = to_aspell_speller (err);
+ if (enchant_broker_dict_exists (broker, known_languages [i].abbreviation)) {
DICT_DEBUG (printf ("Language: %s\n", known_languages [i].name));
- delete_aspell_speller (speller);
langs = g_slist_prepend (langs, GINT_TO_POINTER (i));
- (*ln) ++;
+ nb_langs++;
}
}
- return langs;
-}
-
-static GSList *
-get_languages_load (GConfClient *gc, gint *ln)
-{
- GString *str;
- GSList *langs = NULL;
- gint i, lang_num;
-
- /* printf ("get_languages_load\n"); */
-
- str = g_string_new (NULL);
- *ln = gconf_client_get_int (gc, GNOME_SPELL_GCONF_DIR "/languages", NULL);
- for (i = 0; i < *ln; i++) {
- g_string_sprintf (str, GNOME_SPELL_GCONF_DIR "/language%d", i);
- lang_num = gconf_client_get_int (gc, str->str, NULL);
- langs = g_slist_prepend (langs, GINT_TO_POINTER (lang_num));
- }
-
- return langs;
-}
-
-static GSList *
-get_languages (gint *ln)
-{
- GSList *langs, *l;
- GConfClient *gc;
- time_t mtime;
- struct stat buf;
- gint i, kl;
-
- gc = gconf_client_get_default ();
-
- mtime = gconf_client_get_int (gc, GNOME_SPELL_GCONF_DIR "/mtime", NULL);
- kl = gconf_client_get_int (gc, GNOME_SPELL_GCONF_DIR "/known_languages", NULL);
-
- if (stat (ASPELL_DICT, &buf) || buf.st_mtime != mtime || kl != G_N_ELEMENTS(known_languages)) {
- GString *str;
- langs = get_languages_real (ln);
-
- str = g_string_new (NULL);
- gconf_client_set_int (gc, GNOME_SPELL_GCONF_DIR "/languages", *ln, NULL);
- for (l = langs, i = 0; i < *ln; i ++) {
- g_string_sprintf (str, GNOME_SPELL_GCONF_DIR "/language%d", *ln - i - 1);
- gconf_client_set_int (gc, str->str, GPOINTER_TO_INT (l->data), NULL);
- l = l->next;
- }
- gconf_client_set_int (gc, GNOME_SPELL_GCONF_DIR "/mtime", buf.st_mtime, NULL);
- gconf_client_set_int (gc, GNOME_SPELL_GCONF_DIR "/known_languages", G_N_ELEMENTS(known_languages), NULL);
- g_string_free (str, TRUE);
- gnome_config_sync ();
- } else
- langs = get_languages_load (gc, ln);
+ *ln = nb_langs;
- gconf_client_suggest_sync (gc, NULL);
- g_object_unref (gc);
+ enchant_broker_free (broker);
return langs;
}
@@ -504,59 +464,19 @@ impl_gnome_spell_dictionary_set_language
SpellEngine *se;
one_language = g_strndup (begin, len);
- se = new_engine (one_language);
+ se = new_engine (one_language, ev);
dict->engines = g_slist_prepend (dict->engines, se);
g_hash_table_insert (dict->languages, one_language, se);
g_hash_table_insert (dict->engines_ht, se, g_strdup (one_language));
-
- dict->changed = TRUE;
- }
- }
-}
-
-static void
-update_engine (SpellEngine *se, CORBA_Environment * ev)
-{
- AspellCanHaveError *err;
-
- DICT_DEBUG (printf ("Dictionary: creating new aspell speller\n"));
-
- if (se->changed) {
- if (se->speller)
- delete_aspell_speller (se->speller);
- err = new_aspell_speller (se->config);
- if (aspell_error_number (err) != 0) {
- g_warning ("aspell error: %s\n", aspell_error_message (err));
- se->speller = NULL;
- raise_error (ev, aspell_error_message (err));
- } else {
- se->speller = to_aspell_speller (err);
- se->changed = FALSE;
}
}
}
-static void
-update_engines (GNOMESpellDictionary *dict, CORBA_Environment * ev)
-{
- g_return_if_fail (IS_GNOME_SPELL_DICTIONARY (dict));
-
- if (dict->changed) {
- GSList *l;
-
- for (l = dict->engines; l; l = l->next) {
- update_engine ((SpellEngine *) l->data, ev);
- }
-
- dict->changed = FALSE;
- }
-}
-
static CORBA_boolean
engine_check_word (SpellEngine *se, const gchar *word, CORBA_Environment *ev)
{
- CORBA_boolean result = CORBA_TRUE;
- gint aspell_result;
+ CORBA_boolean result = CORBA_FALSE;
+ gint enchant_result;
#ifndef G_DISABLE_CHECKS
g_return_val_if_fail (se->speller, CORBA_TRUE);
@@ -564,12 +484,12 @@ engine_check_word (SpellEngine *se, cons
if (!se->speller)
return CORBA_TRUE;
#endif
- aspell_result = aspell_speller_check (se->speller, word, strlen (word));
- if (aspell_result == 0)
- result = CORBA_FALSE;
- if (aspell_result == -1) {
- g_warning ("aspell error: %s\n", aspell_speller_error_message (se->speller));
- raise_error (ev, aspell_speller_error_message (se->speller));
+ enchant_result = enchant_dict_check (se->speller, word, strlen (word));
+ if (enchant_result == 0)
+ result = CORBA_TRUE;
+ if (enchant_result == -1) {
+ g_warning ("enchant error: %s\n", enchant_dict_get_error (se->speller));
+ raise_error (ev, enchant_dict_get_error (se->speller));
}
return result;
@@ -592,7 +512,6 @@ impl_gnome_spell_dictionary_check_word (
if (!strcmp (word, "Ximian"))
return CORBA_TRUE;
- update_engines (dict, ev);
for (l = dict->engines; l; l = l->next) {
if (((SpellEngine *) l->data)->speller) {
valid_speller = TRUE;
@@ -621,11 +540,10 @@ impl_gnome_spell_dictionary_add_word_to_
if (!word)
return;
#endif
- update_engines (dict, ev);
DICT_DEBUG (printf ("Dictionary add_word_to_session: %s\n", word));
for (l = dict->engines; l; l = l->next) {
if (((SpellEngine *) l->data)->speller)
- aspell_speller_add_to_session (((SpellEngine *) l->data)->speller, word, strlen (word));
+ enchant_dict_add_to_session (((SpellEngine *) l->data)->speller, word, strlen (word));
}
}
@@ -642,13 +560,11 @@ impl_gnome_spell_dictionary_add_word_to_
if (!word || !language)
return;
#endif
- update_engines (dict, ev);
DICT_DEBUG (printf ("Dictionary add_word_to_personal: %s (%s)\n", word, language));
se = (SpellEngine *) g_hash_table_lookup (dict->languages, language);
if (se && se->speller) {
- aspell_speller_add_to_personal (se->speller, word, strlen (word));
- aspell_speller_save_all_word_lists (se->speller);
+ enchant_dict_add_to_pwl (se->speller, word, strlen (word));
DICT_DEBUG (printf ("Added and saved.\n"));
}
}
@@ -666,14 +582,12 @@ impl_gnome_spell_dictionary_set_correcti
if (!word || !replacement)
return;
#endif
- update_engines (dict, ev);
DICT_DEBUG (printf ("Dictionary correction: %s <-- %s\n", word, replacement));
se = (SpellEngine *) g_hash_table_lookup (dict->languages, language);
if (se && se->speller) {
- aspell_speller_store_replacement (se->speller, word, strlen (word),
- replacement, strlen (replacement));
- aspell_speller_save_all_word_lists (se->speller);
+ enchant_dict_store_replacement (se->speller, word, strlen (word),
+ replacement, strlen (replacement));
DICT_DEBUG (printf ("Set and saved.\n"));
}
}
@@ -683,8 +597,8 @@ impl_gnome_spell_dictionary_get_suggesti
const CORBA_char *word, CORBA_Environment *ev)
{
GNOMESpellDictionary *dict = GNOME_SPELL_DICTIONARY (bonobo_object_from_servant (servant));
- const AspellWordList *suggestions;
- AspellStringEnumeration *elements;
+ char **suggestions;
+ size_t number_of_suggestions;
GNOME_Spell_StringSeq *seq = NULL;
GSList *l, *suggestion_list = NULL;
gint i, len, pos;
@@ -696,17 +610,19 @@ impl_gnome_spell_dictionary_get_suggesti
return NULL;
#endif
DICT_DEBUG (printf ("Dictionary correction: %s\n", word));
- update_engines (dict, ev);
len = 0;
for (l = dict->engines; l; l = l->next) {
SpellEngine *se = (SpellEngine *) l->data;
if (se->speller) {
- suggestions = aspell_speller_suggest (se->speller, word, strlen (word));
- suggestion_list = g_slist_prepend (suggestion_list, (gpointer) suggestions);
- len += 2*aspell_word_list_size (suggestions);
+ suggestions = enchant_dict_suggest (se->speller, word, strlen (word), &number_of_suggestions);
+ suggestion_list = g_slist_prepend (suggestion_list,
+ (gpointer) dup_string_list (suggestions, number_of_suggestions));
+ len += 2*number_of_suggestions;
suggestion_list = g_slist_prepend (suggestion_list, engine_to_language (dict, se));
+ suggestion_list = g_slist_prepend (suggestion_list, GINT_TO_POINTER (number_of_suggestions));
+ enchant_dict_free_string_list (se->speller, suggestions);
}
}
@@ -723,17 +639,18 @@ impl_gnome_spell_dictionary_get_suggesti
gint list_len;
gchar *language;
+ list_len = GPOINTER_TO_INT (l->data);
+ l = l->next;
language = (gchar *) l->data;
l = l->next;
- suggestions = (const AspellWordList *) l->data;
- elements = aspell_word_list_elements (suggestions);
- list_len = aspell_word_list_size (suggestions);
+ suggestions = (char **) l->data;
for (i = 0; i < list_len; i ++, pos ++) {
- seq->_buffer [pos] = CORBA_string_dup (aspell_string_enumeration_next (elements));
+ seq->_buffer [pos] = CORBA_string_dup (suggestions [i]);
pos ++;
seq->_buffer [pos] = CORBA_string_dup (language);
}
- delete_aspell_string_enumeration (elements);
+
+ g_strfreev (suggestions);
}
CORBA_sequence_set_release (seq, CORBA_TRUE);
g_slist_free (suggestion_list);
Index: gnome-spell/dictionary.h
===================================================================
RCS file: /cvs/gnome/gnome-spell/gnome-spell/dictionary.h,v
retrieving revision 1.8
diff -u -p -u -p -r1.8 dictionary.h
--- gnome-spell/dictionary.h 5 Feb 2006 21:31:09 -0000 1.8
+++ gnome-spell/dictionary.h 2 Apr 2006 14:31:46 -0000
@@ -26,7 +26,6 @@
G_BEGIN_DECLS
#include <bonobo/bonobo-object.h>
-#include <aspell.h>
#define GNOME_SPELL_DICTIONARY_TYPE (gnome_spell_dictionary_get_type ())
#define GNOME_SPELL_DICTIONARY(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), \
@@ -37,12 +36,6 @@ G_BEGIN_DECLS
#define IS_GNOME_SPELL_DICTIONARY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GNOME_SPELL_DICTIONARY_TYPE))
typedef struct {
- AspellConfig *config;
- AspellSpeller *speller;
- gboolean changed;
-} SpellEngine;
-
-typedef struct {
gchar *abbreviation;
gchar *name;
} LangInfo;
@@ -50,7 +43,6 @@ typedef struct {
typedef struct {
BonoboObject parent;
- gboolean changed;
GSList *engines;
GHashTable *languages;
GHashTable *engines_ht;
Index: gnome-spell/test-spell.c
===================================================================
RCS file: /cvs/gnome/gnome-spell/gnome-spell/test-spell.c,v
retrieving revision 1.12
diff -u -p -u -p -r1.12 test-spell.c
--- gnome-spell/test-spell.c 6 Mar 2003 16:37:36 -0000 1.12
+++ gnome-spell/test-spell.c 2 Apr 2006 14:31:46 -0000
@@ -52,7 +52,6 @@ main (int argc, char *argv [])
* test dictionary
*/
- GNOME_Spell_Dictionary_getLanguages (en, &ev);
GNOME_Spell_Dictionary_setLanguage (en, "en", &ev);
printf ("check: %s --> %d\n",