PKGBUILDs/extra/gnome-spell/gnome-spell-enchant.diff
2009-10-09 21:23:22 -05:00

551 lines
17 KiB
Diff
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

? 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",