Jeff:

With this change, shouldn't we remove aspell from JDS since we don't use
it anymore?   Should we make this Obsolete in our GNOME 2.18 case?

Brian


> These patches aims to make gedit and evolution to use more languages 
> dictionaries.
> In gnome2.17, gedit uses enchant and evolution still uses gnome-spell 
> which depends on aspell.
> Since we have delivered many languages of dictionaries in myspell 
> format, these patches can
> do:
> 1. Make gnome-spell use enchant.
> 2. Make enchant use myspell instead of aspell.
> 3. Modify spec files to make gnome-spell can be built without enchant 
> installed.
> 
> For the patch (gnome-spell-01-enchant) which makes gnome use enchant, it 
> comes from
> http://uyarer.com/doc/gnome-spell-enchant.diff
> 
> Jeff
> 
> 
> ------------------------------------------------------------------------
> 
> Index: gnome-spell.spec
> ===================================================================
> --- gnome-spell.spec  (revision 10393)
> +++ gnome-spell.spec  (working copy)
> @@ -22,6 +22,7 @@
>  URL:         http://www.sun.com/software/javadesktopsystem/
>  Source:              
> http://ftp.gnome.org/pub/gnome/sources/gnome-spell/1.0/%{name}-%{version}.tar.bz2
>  Source1:     mkinstalldirs
> +Patch1:          gnome-spell-01-enchant.diff
>  Summary:     GNOME spell checking component
>  Group:               Applications/Text
>  
> @@ -51,6 +52,7 @@
>  
>  %prep
>  %setup  -q -n %{name}-%{version}
> +%patch1 -p0
>  cp %SOURCE1 .
>  
>  
> Index: enchant.spec
> ===================================================================
> --- enchant.spec      (revision 10393)
> +++ enchant.spec      (working copy)
> @@ -22,6 +22,7 @@
>  Source:              
> http://www.abisource.com/downloads/%{name}/%{version}/%{name}-%{version}.tar.gz
>  # date:2006-12-08 bugzilla:10667 owner:dcarbery type:bug
>  Patch1:         enchant-01-define_FILE.diff
> +Patch2:         enchant-02-uninstalled-pc.diff
>  Summary:     Generic spell checking library
>  Group:               Applications/Text
>  
> @@ -35,6 +36,7 @@
>  %prep
>  %setup  -q -n %{name}-%{version}
>  %patch1 -p1
> +%patch2 -p1
>  
>  
>  %build
> @@ -57,6 +59,8 @@
>      --mandir=%{_mandir} \
>      --infodir=%{_datadir}/info \
>      --localstatedir=/var \
> +     --with-myspell-dir=/usr/lib/thunderbird/dictionaries \
> +     --disable-aspell \
>      --disable-static
>  
>  make -j $CPUS
> Index: Solaris/SUNWgnome-spell.spec
> ===================================================================
> --- Solaris/SUNWgnome-spell.spec      (revision 10500)
> +++ Solaris/SUNWgnome-spell.spec      (working copy)
> @@ -47,27 +47,27 @@
>  %prep
>  rm -rf %name-%version
>  mkdir -p %name-%version
> +%enchant.prep -d %name-%version
>  %gspell.prep -d %name-%version
> -%enchant.prep -d %name-%version
>  
>  %build
> +# See http://bugzilla.abisource.com/show_bug.cgi?id=10668 for why LD is set 
> +# to $CXX.
> +export LD=$CXX
> +%enchant.build -d %name-%version
>  export PATH=%{_libdir}/aspell:$PATH
>  export PERL5LIB=%{_prefix}/perl5/site_perl/5.6.1/sun4-solaris-64int
>  export ACLOCAL_FLAGS="-I %{_datadir}/aclocal"
>  export CFLAGS="%optflags"
>  export CXXFLAGS="%cxx_optflags"
> -export PKG_CONFIG_PATH=%{_pkg_config_path}
> +export PKG_CONFIG_PATH=../enchant-%{enchant.version}:%{_pkg_config_path}
>  export MSGFMT="/usr/bin/msgfmt"
>  export LDFLAGS="%_ldflags"
>  %gspell.build -d %name-%version
> -# See http://bugzilla.abisource.com/show_bug.cgi?id=10668 for why LD is set 
> -# to $CXX.
> -export LD=$CXX
> -%enchant.build -d %name-%version
>  
>  %install
> +%enchant.install -d %name-%version
>  %gspell.install -d %name-%version
> -%enchant.install -d %name-%version
>  
>  %if %build_l10n
>  %else
> 
> 
> 
> ------------------------------------------------------------------------
> 
> diff -r -u enchant-1.3.0/configure.in enchant-1.3.0-new/configure.in
> --- enchant-1.3.0/configure.in        2006-07-23 01:34:46.000000000 +0800
> +++ enchant-1.3.0-new/configure.in    2007-02-09 14:52:22.315224000 +0800
> @@ -258,6 +258,7 @@
>  AC_OUTPUT([
>  Makefile
>  enchant.pc
> +enchant-uninstalled.pc
>  enchant.spec
>  src/Makefile
>  src/aspell/Makefile
> diff -r -u enchant-1.3.0/enchant-uninstall.pc.in 
> enchant-1.3.0-new/enchant-uninstall.pc.in
> --- enchant-1.3.0/enchant-uninstalled.pc.in   2007-02-09 14:57:57.887773000 
> +0800
> +++ enchant-1.3.0-new/enchant-uninstalled.pc.in       2007-02-09 
> 16:08:11.944733000 +0800
> @@ -0,0 +1,11 @@
> +pref...@prefix@
> +exec_pref...@exec_prefix@
> +libd...@libdir@
> +included...@includedir@
> +
> +Name: libenchant
> +Description: A spell checking library
> +Version: @VERSION@
> +Requires: glib-2.0 gmodule-2.0
> +Libs: ${pc_top_builddir}/${pcfiledir}/src/libenchant.la
> +Cflags: -I${pc_top_builddir}/${pcfiledir}/src
> 
> 
> ------------------------------------------------------------------------
> 
> 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",


Reply via email to