diff options
Diffstat (limited to 'extra/gnome-spell')
-rw-r--r-- | extra/gnome-spell/PKGBUILD | 30 | ||||
-rw-r--r-- | extra/gnome-spell/gnome-spell-enchant.diff | 551 |
2 files changed, 581 insertions, 0 deletions
diff --git a/extra/gnome-spell/PKGBUILD b/extra/gnome-spell/PKGBUILD new file mode 100644 index 000000000..020398658 --- /dev/null +++ b/extra/gnome-spell/PKGBUILD @@ -0,0 +1,30 @@ +# $Id: PKGBUILD 49931 2009-08-16 21:48:16Z jgc $ +# Maintainer: Jan de Groot <jgc@archlinux.org> + +pkgname=gnome-spell +pkgver=1.0.8 +pkgrel=2 +pkgdesc="Spell Checking Support for Gnome" +arch=(i686 x86_64) +license=('GPL') +depends=('libgnomeui>=2.24.1' 'enchant>=1.4.2') +makedepends=('pkgconfig' 'intltool') +options=('!libtool') +url="http://www.gnome.org" +source=(http://ftp.gnome.org/pub/gnome/sources/${pkgname}/1.0/${pkgname}-${pkgver}.tar.bz2 + gnome-spell-enchant.diff) +md5sums=('6ccc46b4e3dc7cb1c6d413358e35d445' '12a357212809e0f0aba8c08d1372e60a') + +build() { + cd "${srcdir}/${pkgname}-${pkgver}" + patch -Np0 -i "${srcdir}/gnome-spell-enchant.diff" || return 1 + libtoolize --force || return 1 + aclocal || return 1 + autoconf || return 1 + automake || return 1 + + ./configure --prefix=/usr --sysconfdir=/etc \ + --localstatedir=/var --disable-static || return 1 + make || return 1 + make DESTDIR="${pkgdir}" install || return 1 +} diff --git a/extra/gnome-spell/gnome-spell-enchant.diff b/extra/gnome-spell/gnome-spell-enchant.diff new file mode 100644 index 000000000..7c0493813 --- /dev/null +++ b/extra/gnome-spell/gnome-spell-enchant.diff @@ -0,0 +1,551 @@ +? 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", |