SF.net SVN: geany-plugins:[210] trunk/spellcheck

eht16 at users.sourceforge.net eht16 at xxxxx
Thu Oct 16 16:14:22 UTC 2008


Revision: 210
          http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=210&view=rev
Author:   eht16
Date:     2008-10-16 16:14:21 +0000 (Thu, 16 Oct 2008)

Log Message:
-----------
Test whether stored language is (still) available in enchant and fall back to the first supported language if not.

Modified Paths:
--------------
    trunk/spellcheck/ChangeLog
    trunk/spellcheck/src/spellcheck.c

Modified: trunk/spellcheck/ChangeLog
===================================================================
--- trunk/spellcheck/ChangeLog	2008-10-15 18:32:51 UTC (rev 209)
+++ trunk/spellcheck/ChangeLog	2008-10-16 16:14:21 UTC (rev 210)
@@ -1,3 +1,10 @@
+2008-10-16  Enrico Tröger  <enrico(dot)troeger(at)uvena(dot)de>
+
+ * src/spellcheck.c:
+   Test whether stored language is (still) available in enchant and fall
+   back to the first supported language if not.
+
+
 2008-10-15  Enrico Tröger  <enrico(dot)troeger(at)uvena(dot)de>
 
  * src/spellcheck.c:

Modified: trunk/spellcheck/src/spellcheck.c
===================================================================
--- trunk/spellcheck/src/spellcheck.c	2008-10-15 18:32:51 UTC (rev 209)
+++ trunk/spellcheck/src/spellcheck.c	2008-10-16 16:14:21 UTC (rev 210)
@@ -93,7 +93,7 @@
 static SpellClickInfo clickinfo;
 
 
-/* Flag to indicate that a callback function will be triggered by generating the appropiate event
+/* Flag to indicate that a callback function will be triggered by generating the appropriate event
  * but the callback should be ignored. */
 static gboolean ignore_sc_callback = FALSE;
 
@@ -537,7 +537,7 @@
 }
 
 
-static void broker_init_failed()
+static void broker_init_failed(void)
 {
 	const gchar *err = enchant_broker_get_error(sc->broker);
 	p_dialogs->show_msgbox(GTK_MESSAGE_ERROR,
@@ -546,14 +546,44 @@
 }
 
 
-static void init_enchant_dict()
+static void dict_compare(gpointer data, gpointer user_data)
 {
+	gboolean *supported = user_data;
+
+	if (p_utils->str_equal(sc->default_language, data))
+		*supported = TRUE;
+}
+
+
+static gboolean check_default_lang(void)
+{
+	gboolean supported = FALSE;
+
+	g_ptr_array_foreach(sc->dicts, dict_compare, &supported);
+
+	return supported;
+}
+
+
+static void init_enchant_dict(void)
+{
+	gchar *lang = sc->default_language;
+
 	/* Release a previous dict object */
 	if (sc->dict != NULL)
 		enchant_broker_free_dict(sc->broker, sc->dict);
 
+	/* Check if the stored default dictionary is (still) avaiable, fall back to the first
+	 * one in the list if not */
+	if (! check_default_lang())
+	{
+		lang = g_ptr_array_index(sc->dicts, 0);
+		g_warning("Stored language ('%s') could not be loaded. Falling back to '%s'",
+			sc->default_language, lang);
+	}
+
 	/* Request new dict object */
-	sc->dict = enchant_broker_request_dict(sc->broker, sc->default_language);
+	sc->dict = enchant_broker_request_dict(sc->broker, lang);
 	if (sc->dict == NULL)
 	{
 		broker_init_failed();
@@ -620,10 +650,6 @@
 static const gchar *get_default_lang(void)
 {
 	const gchar *lang = g_getenv("LANG");
-	/** TODO check whether the returned lang is actually provided by enchant and
-	 *  choose something else if not
-	 *  N.B. this is not really possible/reasonable with enchant < 1.4.3 because of a
-	 *  bug in the Zemberek provider which always reports it has the requested dict */
 	if (NZV(lang))
 	{
 		if (g_ascii_strncasecmp(lang, "C", 1) == 0)
@@ -716,7 +742,7 @@
 }
 
 
-static void create_dicts_array()
+static void create_dicts_array(void)
 {
 	sc->dicts = g_ptr_array_new();
 
@@ -726,7 +752,7 @@
 }
 
 
-static void create_edit_menu()
+static void create_edit_menu(void)
 {
 	sc->edit_menu = gtk_image_menu_item_new_from_stock(GTK_STOCK_SPELL_CHECK, NULL);
 	gtk_container_add(GTK_CONTAINER(geany->main_widgets->editor_menu), sc->edit_menu);
@@ -800,6 +826,7 @@
 	toolbar_update();
 
 	sc->broker = enchant_broker_init();
+	create_dicts_array();
 	init_enchant_dict();
 
 	for (i = 0; i < MAX_MENU_SUGGESTIONS; i++)
@@ -808,8 +835,6 @@
 	}
 	clickinfo.word = NULL;
 
-	create_dicts_array();
-
 	create_edit_menu();
 	sp_item = create_menu(sc->menu_item);
 	gtk_widget_show_all(sp_item);


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the Plugins-Commits mailing list