? 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 #include #include -#include #include #include "Spell.h" #include "dictionary.h" +#include + +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 -#include #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",