gedit r6707 - in branches/win32: . gedit plugin-loaders/python/bindings



Author: pborelli
Date: Wed Dec 24 09:18:00 2008
New Revision: 6707
URL: http://svn.gnome.org/viewvc/gedit?rev=6707&view=rev

Log:
2008-12-24  Paolo Borelli  <pborelli katamail com>

	* gedit-language-manager.[ch]:
	* gedit-documemt.c:
	Use gtk_source_language_manager_guess_language instead of
	scanning mime types manually.



Modified:
   branches/win32/ChangeLog
   branches/win32/gedit/gedit-document.c
   branches/win32/gedit/gedit-language-manager.c
   branches/win32/gedit/gedit-language-manager.h
   branches/win32/plugin-loaders/python/bindings/gedit.defs

Modified: branches/win32/gedit/gedit-document.c
==============================================================================
--- branches/win32/gedit/gedit-document.c	(original)
+++ branches/win32/gedit/gedit-document.c	Wed Dec 24 09:18:00 2008
@@ -739,6 +739,54 @@
 	return GEDIT_DOCUMENT (g_object_new (GEDIT_TYPE_DOCUMENT, NULL));
 }
 
+static GtkSourceLanguage *
+guess_language (const gchar *uri,
+		const gchar *mime_type)
+
+{
+	gchar *data;
+	GtkSourceLanguage *language = NULL;
+
+	data = gedit_metadata_manager_get (uri, "language");
+
+	if (data != NULL)
+	{
+		gedit_debug_message (DEBUG_DOCUMENT, "Language from metadata: %s", data);
+
+		if (strcmp (data, "_NORMAL_") != 0)
+		{
+			language = gtk_source_language_manager_get_language (
+						gedit_get_language_manager (),
+						data);
+		}
+
+		g_free (data);
+	}
+	else
+	{
+		gedit_debug_message (DEBUG_DOCUMENT, "Sniffing Language");
+
+		if (strcmp (mime_type, "text/plain") != 0)
+		{
+			GFile *file;
+			gchar *basename;
+
+			file = g_file_new_for_uri (uri);
+			basename = g_file_get_basename (file);
+
+			language = gtk_source_language_manager_guess_language (
+						gedit_get_language_manager (),
+						basename,
+						mime_type);
+
+			g_free (basename);
+			g_object_unref (file);
+		}
+	}
+
+	return language;
+}
+
 /* If mime type is null, we guess from the filename */
 /* If uri is null, we only set the mime-type */
 static void
@@ -796,35 +844,12 @@
 
 	if (!doc->priv->language_set_by_user)
 	{
-		gchar *data;
-		GtkSourceLanguage *language = NULL;
+		GtkSourceLanguage *language;
 
-		data = gedit_metadata_manager_get (doc->priv->uri, "language");
+		language = guess_language (doc->priv->uri, doc->priv->mime_type);
 
-		if (data != NULL)
-		{
-			gedit_debug_message (DEBUG_DOCUMENT, "Language: %s", data);
-
-			if (strcmp (data, "_NORMAL_") != 0)
-			{
-				language = gtk_source_language_manager_get_language (
-							gedit_get_language_manager (),
-							data);
-			}
-
-			g_free (data);
-		}
-		else
-		{
-			gedit_debug_message (DEBUG_DOCUMENT, "Language Normal");
-
-			if (strcmp (doc->priv->mime_type, "text/plain") != 0)
-			{
-				language = gedit_language_manager_get_language_from_mime_type (
-							gedit_get_language_manager (),
-							doc->priv->mime_type);
-			}
-		}
+		gedit_debug_message (DEBUG_DOCUMENT, "Language: %s",
+				     language != NULL ? gtk_source_language_get_name (language) : "None");
 
 		set_language (doc, language, FALSE);
 	}
@@ -1226,7 +1251,7 @@
 		size = gedit_document_saver_get_file_size (saver);
 		written = gedit_document_saver_get_bytes_written (saver);
 
-		gedit_debug_message (DEBUG_DOCUMENT, "save progress: %Lu of %Lu", written, size);
+		gedit_debug_message (DEBUG_DOCUMENT, "save progress: %" G_GINT64_FORMAT " of %" G_GINT64_FORMAT, written, size);
 
 		g_signal_emit (doc,
 			       document_signals[SAVING],

Modified: branches/win32/gedit/gedit-language-manager.c
==============================================================================
--- branches/win32/gedit/gedit-language-manager.c	(original)
+++ branches/win32/gedit/gedit-language-manager.c	Wed Dec 24 09:18:00 2008
@@ -88,135 +88,3 @@
 	return g_slist_sort (languages, (GCompareFunc)language_compare);
 }
 
-/* Returns a hash table that is used as a cache of already matched mime-types */
-static GHashTable *
-get_languages_cache (GtkSourceLanguageManager *lm)
-{
-	static GQuark id = 0;
-	GHashTable *res;
-
-	if (id == 0)
-		id = g_quark_from_static_string ("gedit_languages_manager_cache");
-
-	res = (GHashTable *)g_object_get_qdata (G_OBJECT (lm), id);
-	if (res == NULL)
-	{
-		res = g_hash_table_new_full (g_str_hash,
-					     g_str_equal,
-					     g_free,
-					     NULL);
-
-		g_object_set_qdata_full (G_OBJECT (lm), 
-					 id,
-					 res,
-					 (GDestroyNotify)g_hash_table_unref);
-	}
-
-	return res;
-}
-
-static GtkSourceLanguage *
-get_language_from_cache (GtkSourceLanguageManager *lm,
-			 const gchar              *mime_type)
-{
-	GHashTable *cache;
-
-	cache = get_languages_cache (lm);
-
-	return g_hash_table_lookup (cache, mime_type);
-}
-
-static void
-add_language_to_cache (GtkSourceLanguageManager *lm,
-		       const gchar              *mime_type,
-		       GtkSourceLanguage        *lang)
-{
-	GHashTable *cache;
-
-	cache = get_languages_cache (lm);
-	g_hash_table_replace (cache, g_strdup (mime_type), lang);
-}
-
-GtkSourceLanguage *
-gedit_language_manager_get_language_from_mime_type (GtkSourceLanguageManager *lm,
-						    const gchar              *mime_type)
-{
-	const gchar* const *languages;
-	GtkSourceLanguage *lang;
-	GtkSourceLanguage *parent = NULL;
-
-	g_return_val_if_fail (mime_type != NULL, NULL);
-
-	lang = get_language_from_cache (lm, mime_type);
-	if (lang != NULL)
-	{
-		gedit_debug_message (DEBUG_DOCUMENT,
-				     "Cache hit for %s", mime_type);
-		return lang;
-	}
-	gedit_debug_message (DEBUG_DOCUMENT,
-			     "Cache miss for %s", mime_type);
-
-	languages = gtk_source_language_manager_get_language_ids (lm);
-	if (languages == NULL)
-		return NULL;
-
-	while (*languages != NULL)
-	{
-		gchar **mime_types;
-		gchar *found = NULL;
-		gint i;
-
-		lang = gtk_source_language_manager_get_language (lm, *languages);
-		g_return_val_if_fail (GTK_IS_SOURCE_LANGUAGE (lang), NULL);
-		++languages;
-
-		mime_types = gtk_source_language_get_mime_types (lang);
-		if (mime_types == NULL)
-			continue;
-
-		for (i = 0; mime_types[i] != NULL; ++i)
-		{
-			if (g_content_type_equals(mime_type, mime_types[i]))
-			{
-				/* If the mime-type of lang is identical to "mime-type" then
-				   return lang */
-				gedit_debug_message (DEBUG_DOCUMENT,
-						     "%s is indentical to %s\n",
-						     mime_types[i], mime_type);
-
-				found = mime_types[i];
-
-				break;
-			}
-			else if (parent == NULL && g_content_type_is_a (mime_type, mime_types[i]))
-			{
-				/* If the mime-type of lang is a parent of "mime-type" then
-				   remember it. We will return it if we don't find
-				   an exact match. The first "parent" wins */
-				parent = lang;
-
-				gedit_debug_message (DEBUG_DOCUMENT,
-						     "%s is a parent of %s\n",
-						     mime_types[i], mime_type);
-			}
-		}
-
-		if (found != NULL)
-		{
-			add_language_to_cache (lm, mime_type, lang);
-
-			g_strfreev (mime_types);
-
-			return lang;
-		}
-
-		g_strfreev (mime_types);
-	}
-
-	if (parent != NULL)
-		add_language_to_cache (lm, mime_type, parent);
-	
-	return parent;
-}
-

Modified: branches/win32/gedit/gedit-language-manager.h
==============================================================================
--- branches/win32/gedit/gedit-language-manager.h	(original)
+++ branches/win32/gedit/gedit-language-manager.h	Wed Dec 24 09:18:00 2008
@@ -42,10 +42,6 @@
 								(GtkSourceLanguageManager	*lm,
 								 gboolean			 include_hidden);
 
-GtkSourceLanguage		*gedit_language_manager_get_language_from_mime_type 
-								(GtkSourceLanguageManager	*lm,
-								 const gchar			*mime_type);
-
 G_END_DECLS
 
 #endif /* __GEDIT_LANGUAGES_MANAGER_H__ */

Modified: branches/win32/plugin-loaders/python/bindings/gedit.defs
==============================================================================
--- branches/win32/plugin-loaders/python/bindings/gedit.defs	(original)
+++ branches/win32/plugin-loaders/python/bindings/gedit.defs	Wed Dec 24 09:18:00 2008
@@ -988,15 +988,6 @@
   )
 )
 
-(define-function language_manager_get_language_from_mime_type
-  (c-name "gedit_language_manager_get_language_from_mime_type")
-  (return-type "GtkSourceLanguage*")
-  (parameters
-    '("GtkSourceLanguageManager*" "lm")
-    '("const-gchar*" "mime_type")
-  )
-)
-
 ;; From ../../gedit/gedit-debug.h
 
 (define-function debug



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]