View | Details | Raw Unified
Collapse All | Expand All

(-) gnome-spell-1.0.7.orig/README (-8 / +7 lines)
 Lines 3-9    Link Here 
Gnome Spell is GNOME/Bonobo component for spell checking. In current 0.1 version
Gnome Spell is GNOME/Bonobo component for spell checking. In current 0.1 version
it contains GNOME::Spell::Dictionary object, which provides spell checking dictionary
it contains GNOME::Spell::Dictionary object, which provides spell checking dictionary
(see Spell.idl for exact API definition). It's based on pspell package, which is required
(see Spell.idl for exact API definition). It's based on Enchant package, which is required
to build gnome-spell.
to build gnome-spell.
Dictionary object could be used for live spell checking. Look in test-spell.c or
Dictionary object could be used for live spell checking. Look in test-spell.c or
 Lines 12-30    Link Here 
In future it will be expanded by implementation of GNOME::Spell::Checker object (see
In future it will be expanded by implementation of GNOME::Spell::Checker object (see
also Spell.idl) and also by spell checking dialog control with appropriate interface.
also Spell.idl) and also by spell checking dialog control with appropriate interface.
Pspell build
Enchant build
------------
------------
From my experience with pspell I recommend you to build pspell/aspell this way:
From my experience with Enchant I recommend you to build it this way:
	1) build and install pspell
	1) build and install Pspell, Aspell
	2) build and install aspell
	2) build and install Enchant
	4) build and install GNOME Spell
	4) build and install GNOME Spell
You could get Pspell and Aspell from:
You could get Enchant from:
	http://pspell.sourceforge.net/
	http://www.abisource.com/enchant/
	http://aspell.sourceforge.net/
End
End
---
---
(-) gnome-spell-1.0.7.orig/configure.in (-29 / +1 lines)
 Lines 68-101    Link Here 
AC_SUBST(API_VERSION)
AC_SUBST(API_VERSION)
dnl
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 flags
dnl
dnl
 Lines 104-110    Link Here 
AC_SUBST(CPPFLAGS)
AC_SUBST(CPPFLAGS)
AC_SUBST(LDFLAGS)
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.2"
PKG_CHECK_MODULES(GNOME_SPELL, $GNOME_SPELL_MODULES)
PKG_CHECK_MODULES(GNOME_SPELL, $GNOME_SPELL_MODULES)
AC_SUBST(GNOME_SPELL_CFLAGS)
AC_SUBST(GNOME_SPELL_CFLAGS)
AC_SUBST(GNOME_SPELL_LIBS)
AC_SUBST(GNOME_SPELL_LIBS)
(-) gnome-spell-1.0.7.orig/gnome-spell/Makefile.am (-4 lines)
 Lines 7-19    Link Here 
INCLUDES =                                              \
INCLUDES =                                              \
        -I$(srcdir)                                     \
        -I$(srcdir)                                     \
	$(ASPELL_INC)					\
	-DPREFIX=\""$(prefix)"\"			\
	-DPREFIX=\""$(prefix)"\"			\
        -DGNOMEDATADIR=\""$(datadir)"\"         	\
        -DGNOMEDATADIR=\""$(datadir)"\"         	\
        -DGNOMELOCALEDIR=\""$(datadir)/locale"\"        \
        -DGNOMELOCALEDIR=\""$(datadir)/locale"\"        \
	-DGLADE_DATADIR=\"$(gladedir)\"			\
	-DGLADE_DATADIR=\"$(gladedir)\"			\
	-DPLUGIN_DIR=\""$(PLUGIN_DIR)"\"		\
	-DPLUGIN_DIR=\""$(PLUGIN_DIR)"\"		\
	-DASPELL_DICT=\""$(ASPELL_DICT)"\"		\
	$(GNOME_SPELL_CFLAGS)				\
	$(GNOME_SPELL_CFLAGS)				\
	$(END)
	$(END)
 Lines 55-61    Link Here 
libgnome_spell_component_la_LDFLAGS = -release $(API_VERSION) $(NO_UNDEFINED)
libgnome_spell_component_la_LDFLAGS = -release $(API_VERSION) $(NO_UNDEFINED)
libgnome_spell_component_la_LIBADD = 		\
libgnome_spell_component_la_LIBADD = 		\
	libgnome-spell-idl.la		\
	libgnome-spell-idl.la		\
	$(ASPELL_LIBS)		\
	$(GNOME_SPELL_LIBS)			\
	$(GNOME_SPELL_LIBS)			\
	$(END)
	$(END)
 Lines 69-75    Link Here 
test_gnome_spell_component_LDADD =		\
test_gnome_spell_component_LDADD =		\
	libgnome-spell-idl.la		\
	libgnome-spell-idl.la		\
	$(ASPELL_LIBS)				\
	$(GNOME_SPELL_LIBS)			\
	$(GNOME_SPELL_LIBS)			\
	$(END)
	$(END)
(-) gnome-spell-1.0.7.orig/gnome-spell/dictionary.c (-86 / +60 lines)
 Lines 36-41    Link Here 
#include "Spell.h"
#include "Spell.h"
#include "dictionary.h"
#include "dictionary.h"
#include <enchant.h>
typedef struct {
	EnchantBroker * config;
	EnchantDict   * speller;
} SpellEngine;
static BonoboObjectClass                  *dictionary_parent_class;
static BonoboObjectClass                  *dictionary_parent_class;
#define DICT_DEBUG(x)
#define DICT_DEBUG(x)
 Lines 72-83    Link Here 
{
{
	GNOMESpellDictionary *dict = GNOME_SPELL_DICTIONARY (object);
	GNOMESpellDictionary *dict = GNOME_SPELL_DICTIONARY (object);
	dict->changed = TRUE;
	dict->engines = NULL;
	dict->engines = NULL;
	dict->languages = g_hash_table_new (g_str_hash, g_str_equal);
	dict->languages = g_hash_table_new (g_str_hash, g_str_equal);
	dict->engines_ht = g_hash_table_new (NULL, NULL);
	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
static void
dictionary_finalize (GObject *object)
dictionary_finalize (GObject *object)
{
{
 Lines 93-107    Link Here 
}
}
static SpellEngine *
static SpellEngine *
new_engine (const gchar *language)
new_engine (const gchar *language, CORBA_Environment *ev)
{
{
	SpellEngine *se;
	SpellEngine *se;
	se = g_new0 (SpellEngine, 1);
	se = g_new0 (SpellEngine, 1);
	se->config = new_aspell_config ();
	se->config = enchant_broker_init ();
	aspell_config_replace (se->config, "language-tag", language);
	se->speller = enchant_broker_request_dict (se->config, language);
	aspell_config_replace (se->config, "encoding", "utf-8");
	se->changed = TRUE;
	if(se->speller == NULL)
		raise_error (ev, enchant_broker_get_error (se->config));
	return se;
	return se;
}
}
 Lines 129-137    Link Here 
		SpellEngine *se = dict->engines->data;
		SpellEngine *se = dict->engines->data;
		if (se->speller)
		if (se->speller)
			delete_aspell_speller (se->speller);
			enchant_broker_free_dict (se->config, se->speller);
		if (se->config)
		if (se->config)
			delete_aspell_config (se->config);
			enchant_broker_free (se->config);
		g_free (se);
		g_free (se);
		dict->engines = g_slist_remove (dict->engines, se);
		dict->engines = g_slist_remove (dict->engines, se);
	}
	}
 Lines 140-146    Link Here 
	g_hash_table_foreach_remove (dict->languages, remove_engine_ht, NULL);
	g_hash_table_foreach_remove (dict->languages, remove_engine_ht, NULL);
	dict->engines = NULL;
	dict->engines = NULL;
	dict->changed = TRUE;
}
}
static LangInfo known_languages [] = {
static LangInfo known_languages [] = {
 Lines 355-382    Link Here 
get_languages_real (gint *ln)
get_languages_real (gint *ln)
{
{
	GSList *langs;
	GSList *langs;
	AspellCanHaveError *err;
	EnchantBroker *broker;
	AspellConfig  *config;
	AspellSpeller *speller;
	gint i;
	gint i;
	DICT_DEBUG (printf ("get_languages_real\n"));
	DICT_DEBUG (printf ("get_languages_real\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;
	langs = NULL;
	*ln = 0;
	*ln = 0;
	for (i=0; i < G_N_ELEMENTS (known_languages); i++) {
	for (i=0; i < G_N_ELEMENTS (known_languages); i++) {
		config = new_aspell_config ();
		if (enchant_broker_dict_exists (broker, known_languages [i].abbreviation)) {
		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);
			DICT_DEBUG (printf ("Language: %s\n", known_languages [i].name));
			DICT_DEBUG (printf ("Language: %s\n", known_languages [i].name));
			delete_aspell_speller (speller);
			langs = g_slist_prepend (langs, GINT_TO_POINTER (i));
			langs = g_slist_prepend (langs, GINT_TO_POINTER (i));
			(*ln) ++;
			(*ln) ++;
		}
		}
	}
	}
	enchant_broker_free (broker);
	return langs;
	return langs;
}
}
 Lines 405-420    Link Here 
{
{
	GSList *langs, *l;
	GSList *langs, *l;
	GConfClient *gc;
	GConfClient *gc;
	time_t mtime;
	struct stat buf;
	gint i, kl;
	gint i, kl;
	gc = gconf_client_get_default ();
	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);
	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)) {
	if (kl != G_N_ELEMENTS(known_languages)) {
		GString *str;
		GString *str;
		langs = get_languages_real (ln);
		langs = get_languages_real (ln);
 Lines 425-431    Link Here 
			gconf_client_set_int (gc, str->str, GPOINTER_TO_INT (l->data), NULL);
			gconf_client_set_int (gc, str->str, GPOINTER_TO_INT (l->data), NULL);
			l = l->next;
			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);
		gconf_client_set_int (gc, GNOME_SPELL_GCONF_DIR "/known_languages", G_N_ELEMENTS(known_languages), NULL);
		g_string_free (str, TRUE);
		g_string_free (str, TRUE);
		gnome_config_sync ();
		gnome_config_sync ();
 Lines 504-554    Link Here 
			SpellEngine *se;
			SpellEngine *se;
			
			
			one_language = g_strndup (begin, len);
			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);
			dict->engines = g_slist_prepend (dict->engines, se);
			g_hash_table_insert (dict->languages, one_language, se);
			g_hash_table_insert (dict->languages, one_language, se);
			g_hash_table_insert (dict->engines_ht, se, g_strdup (one_language));
			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;
	}
	}
}
}
 Lines 556-562    Link Here 
engine_check_word (SpellEngine *se, const gchar *word, CORBA_Environment *ev)
engine_check_word (SpellEngine *se, const gchar *word, CORBA_Environment *ev)
{
{
	CORBA_boolean result = CORBA_TRUE;
	CORBA_boolean result = CORBA_TRUE;
	gint aspell_result;
	gint enchant_result;
#ifndef G_DISABLE_CHECKS
#ifndef G_DISABLE_CHECKS
	g_return_val_if_fail (se->speller, CORBA_TRUE);
	g_return_val_if_fail (se->speller, CORBA_TRUE);
 Lines 564-575    Link Here 
	if (!se->speller)
	if (!se->speller)
		return CORBA_TRUE;
		return CORBA_TRUE;
#endif
#endif
	aspell_result = aspell_speller_check (se->speller, word, strlen (word));
	enchant_result = enchant_dict_check (se->speller, word, strlen (word));
	if (aspell_result == 0)
	if (enchant_result == 0)
		result = CORBA_FALSE;
		result = CORBA_FALSE;
	if (aspell_result == -1) {
	if (enchant_result == -1) {
		g_warning ("aspell error: %s\n", aspell_speller_error_message (se->speller));
		g_warning ("enchant error: %s\n", enchant_dict_get_error (se->speller));
		raise_error (ev, aspell_speller_error_message (se->speller));
		raise_error (ev, enchant_dict_get_error (se->speller));
	}
	}
	return result;
	return result;
 Lines 592-598    Link Here 
	if (!strcmp (word, "Ximian"))
	if (!strcmp (word, "Ximian"))
		return CORBA_TRUE;
		return CORBA_TRUE;
	update_engines (dict, ev);
	for (l = dict->engines; l; l = l->next) {
	for (l = dict->engines; l; l = l->next) {
		if (((SpellEngine *) l->data)->speller) {
		if (((SpellEngine *) l->data)->speller) {
			valid_speller = TRUE;
			valid_speller = TRUE;
 Lines 621-631    Link Here 
	if (!word)
	if (!word)
		return;
		return;
#endif
#endif
	update_engines (dict, ev);
	DICT_DEBUG (printf ("Dictionary add_word_to_session: %s\n", word));
	DICT_DEBUG (printf ("Dictionary add_word_to_session: %s\n", word));
	for (l = dict->engines; l; l = l->next) {
	for (l = dict->engines; l; l = l->next) {
		if (((SpellEngine *) l->data)->speller)
		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));
	}
	}
}
}
 Lines 642-648    Link Here 
	if (!word || !language)
	if (!word || !language)
		return;
		return;
#endif
#endif
	update_engines (dict, ev);
	DICT_DEBUG (printf ("Dictionary add_word_to_personal: %s (%s)\n", word, language));
	DICT_DEBUG (printf ("Dictionary add_word_to_personal: %s (%s)\n", word, language));
	se = (SpellEngine *) g_hash_table_lookup (dict->languages, language);
	se = (SpellEngine *) g_hash_table_lookup (dict->languages, language);
 Lines 666-672    Link Here 
	if (!word || !replacement)
	if (!word || !replacement)
		return;
		return;
#endif
#endif
	update_engines (dict, ev);
	DICT_DEBUG (printf ("Dictionary correction: %s <-- %s\n", word, replacement));
	DICT_DEBUG (printf ("Dictionary correction: %s <-- %s\n", word, replacement));
	se = (SpellEngine *) g_hash_table_lookup (dict->languages, language);
	se = (SpellEngine *) g_hash_table_lookup (dict->languages, language);
 Lines 683-690    Link Here 
					     const CORBA_char *word, CORBA_Environment *ev)
					     const CORBA_char *word, CORBA_Environment *ev)
{
{
	GNOMESpellDictionary  *dict = GNOME_SPELL_DICTIONARY (bonobo_object_from_servant (servant));
	GNOMESpellDictionary  *dict = GNOME_SPELL_DICTIONARY (bonobo_object_from_servant (servant));
	const AspellWordList  *suggestions;
	char **suggestions;
	AspellStringEnumeration *elements;
	size_t number_of_suggestions;
	GNOME_Spell_StringSeq *seq = NULL;
	GNOME_Spell_StringSeq *seq = NULL;
	GSList *l, *suggestion_list = NULL;
	GSList *l, *suggestion_list = NULL;
	gint i, len, pos;
	gint i, len, pos;
 Lines 696-712    Link Here 
		return NULL;
		return NULL;
#endif
#endif
	DICT_DEBUG (printf ("Dictionary correction: %s\n", word));
	DICT_DEBUG (printf ("Dictionary correction: %s\n", word));
	update_engines (dict, ev);
	len = 0;
	len = 0;
	for (l = dict->engines; l; l = l->next) {
	for (l = dict->engines; l; l = l->next) {
		SpellEngine *se = (SpellEngine *) l->data;
		SpellEngine *se = (SpellEngine *) l->data;
		if (se->speller) {
		if (se->speller) {
			suggestions  = aspell_speller_suggest (se->speller, word, strlen (word));
			suggestions = enchant_dict_suggest (se->speller, word, strlen (word), &number_of_suggestions);
			suggestion_list = g_slist_prepend (suggestion_list, (gpointer) suggestions);
			suggestion_list = g_slist_prepend (suggestion_list, 
			len += 2*aspell_word_list_size (suggestions);
							   (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, 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);
		}
		}
	}
	}
 Lines 723-739    Link Here 
		gint list_len;
		gint list_len;
		gchar *language;
		gchar *language;
		list_len = GPOINTER_TO_INT (l->data);
		l = l->next;
		language = (gchar *) l->data;
		language = (gchar *) l->data;
		l = l->next;
		l = l->next;
		suggestions = (const AspellWordList  *) l->data;
		suggestions = (char **) l->data;
		elements = aspell_word_list_elements (suggestions);
		list_len = aspell_word_list_size (suggestions);
		for (i = 0; i < list_len; i ++, pos ++) {
		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 ++;
			pos ++;
			seq->_buffer [pos] = CORBA_string_dup (language);
			seq->_buffer [pos] = CORBA_string_dup (language);
		}
		}
		delete_aspell_string_enumeration (elements);
		g_strfreev (suggestions);
	}
	}
	CORBA_sequence_set_release (seq, CORBA_TRUE);
	CORBA_sequence_set_release (seq, CORBA_TRUE);
	g_slist_free (suggestion_list);
	g_slist_free (suggestion_list);
(-) gnome-spell-1.0.7.orig/gnome-spell/dictionary.h (-8 lines)
 Lines 26-32    Link Here 
G_BEGIN_DECLS
G_BEGIN_DECLS
#include <bonobo/bonobo-object.h>
#include <bonobo/bonobo-object.h>
#include <aspell.h>
#define GNOME_SPELL_DICTIONARY_TYPE        (gnome_spell_dictionary_get_type ())
#define GNOME_SPELL_DICTIONARY_TYPE        (gnome_spell_dictionary_get_type ())
#define GNOME_SPELL_DICTIONARY(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), \
#define GNOME_SPELL_DICTIONARY(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), \
 Lines 37-48    Link Here 
#define IS_GNOME_SPELL_DICTIONARY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GNOME_SPELL_DICTIONARY_TYPE))
#define IS_GNOME_SPELL_DICTIONARY_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GNOME_SPELL_DICTIONARY_TYPE))
typedef struct {
typedef struct {
	AspellConfig  *config;
	AspellSpeller *speller;
	gboolean       changed;
} SpellEngine;
typedef struct {
	gchar *abbreviation;
	gchar *abbreviation;
	gchar *name;
	gchar *name;
} LangInfo;
} LangInfo;
 Lines 50-56    Link Here 
typedef struct {
typedef struct {
	BonoboObject parent;
	BonoboObject parent;
	gboolean changed;
	GSList *engines;
	GSList *engines;
	GHashTable *languages;
	GHashTable *languages;
	GHashTable *engines_ht;
	GHashTable *engines_ht;
(-) gnome-spell-1.0.7.orig/gnome-spell.spec.in (-4 / +2 lines)
 Lines 7-18    Link Here 
Source:		ftp://ftp.gnome.org/pub/GNOME/unstable/sources/%{name}/%{name}-%{version}.tar.gz
Source:		ftp://ftp.gnome.org/pub/GNOME/unstable/sources/%{name}/%{name}-%{version}.tar.gz
Summary:	The spelling component for bonobo
Summary:	The spelling component for bonobo
Group:		System Environment/Libraries
Group:		System Environment/Libraries
Requires:	aspell >= 0.28
Requires:	enchant >= 0.3.0
Requires:	pspell >= 0.12
Requires:	bonobo >= 0.28
Requires:	bonobo >= 0.28
Requires:	gal >= 0.7.99.5
Requires:	gal >= 0.7.99.5
BuildRequires:  aspell-devel >= 0.28
BuildRequires:  enchant-devel >= 0.3.0
BuildRequires:  pspell-devel >= 0.12
BuildRequires:  bonobo-devel >= 0.28
BuildRequires:  bonobo-devel >= 0.28
BuildRequires:  libglade-devel
BuildRequires:  libglade-devel
BuildRequires:	gal-devel >= 0.7.99.5
BuildRequires:	gal-devel >= 0.7.99.5