SF.net SVN: geany:[4071] branches/custom-filetypes

ntrel at users.sourceforge.net ntrel at xxxxx
Wed Aug 12 14:47:45 UTC 2009


Revision: 4071
          http://geany.svn.sourceforge.net/geany/?rev=4071&view=rev
Author:   ntrel
Date:     2009-08-12 14:47:44 +0000 (Wed, 12 Aug 2009)

Log Message:
-----------
Change custom filetype filename format to filetypes.Foo.conf for
consistency with built-in filetype files.
Fix loading custom filetype settings (e.g. default extension).
Add note about using GeanyFiletype pointer instead of filetype_id
for function arguments.

Modified Paths:
--------------
    branches/custom-filetypes/ChangeLog
    branches/custom-filetypes/src/filetypes.c

Modified: branches/custom-filetypes/ChangeLog
===================================================================
--- branches/custom-filetypes/ChangeLog	2009-08-12 11:19:54 UTC (rev 4070)
+++ branches/custom-filetypes/ChangeLog	2009-08-12 14:47:44 UTC (rev 4071)
@@ -5,6 +5,12 @@
    Support adding custom filetype files e.g. filetype.Foo.conf. (Only
    tested with empty file so far).
    Allow GeanyFiletype::extension to be NULL.
+ * src/filetypes.c:
+   Change custom filetype filename format to filetypes.Foo.conf for
+   consistency with built-in filetype files.
+   Fix loading custom filetype settings (e.g. default extension).
+   Add note about using GeanyFiletype pointer instead of filetype_id
+   for function arguments.
 
 
 2009-08-11  Nick Treleaven  <nick(dot)treleaven(at)btinternet(dot)com>

Modified: branches/custom-filetypes/src/filetypes.c
===================================================================
--- branches/custom-filetypes/src/filetypes.c	2009-08-12 11:19:54 UTC (rev 4070)
+++ branches/custom-filetypes/src/filetypes.c	2009-08-12 14:47:44 UTC (rev 4071)
@@ -26,6 +26,9 @@
  * Filetype detection, file extensions and filetype menu items.
  */
 
+/* Note: we use filetype_id for some function arguments, but GeanyFiletype is better; we should
+ * only use GeanyFiletype for API functions. */
+
 #include <string.h>
 #include <glib/gstdio.h>
 
@@ -61,6 +64,7 @@
 	regex_t		error_regex;
 	gboolean	error_regex_compiled;
 #endif
+	gboolean	custom;
 }
 GeanyFiletypePrivate;
 
@@ -671,6 +675,7 @@
 	ft->name = g_strdup(fn);
 	filetype_make_title(ft, TITLE_FILE);
 	ft->pattern = g_new0(gchar*, 1);
+	ft->priv->custom = TRUE;
 	filetype_add(ft);
 }
 
@@ -687,12 +692,14 @@
 
 	while (1)
 	{
+		const gchar prefix[] = "filetypes.";
 		const gchar *filename = g_dir_read_name(dir);
 
 		if (filename == NULL)
 			break;
 
-		if (g_str_has_prefix(filename, "filetype.") && g_str_has_suffix(filename + 9, ".conf"))
+		if (g_str_has_prefix(filename, prefix) &&
+			g_str_has_suffix(filename + strlen(prefix), ".conf"))
 		{
 			add_custom_filetype(filename);
 		}
@@ -1253,13 +1260,16 @@
 
 /* simple wrapper function to print file errors in DEBUG mode */
 static void load_system_keyfile(GKeyFile *key_file, const gchar *file, GKeyFileFlags flags,
-								G_GNUC_UNUSED GError **just_for_compatibility)
+		GeanyFiletype *ft)
 {
 	GError *error = NULL;
 	gboolean done = g_key_file_load_from_file(key_file, file, flags, &error);
-	if (G_UNLIKELY(! done) && G_UNLIKELY(error != NULL))
+
+	if (error != NULL)
 	{
-		geany_debug("Failed to open %s (%s)", file, error->message);
+		if (!done && !ft->priv->custom)
+			geany_debug("Failed to open %s (%s)", file, error->message);
+
 		g_error_free(error);
 		error = NULL;
 	}
@@ -1273,10 +1283,12 @@
 {
 	GKeyFile *config, *config_home;
 	GeanyFiletypePrivate *pft;
+	GeanyFiletype *ft;
 
 	g_return_if_fail(ft_id >= 0 && ft_id < (gint) filetypes_array->len);
 
-	pft = filetypes[ft_id]->priv;
+	ft = filetypes[ft_id];
+	pft = ft->priv;
 
 	/* when reloading, proceed only if the settings were already loaded */
 	if (reload && G_UNLIKELY(! pft->keyfile_loaded))
@@ -1297,7 +1309,7 @@
 		gchar *f = g_strconcat(app->configdir,
 			G_DIR_SEPARATOR_S GEANY_FILEDEFS_SUBDIR G_DIR_SEPARATOR_S "filetypes.", ext, NULL);
 
-		load_system_keyfile(config, f0, G_KEY_FILE_KEEP_COMMENTS, NULL);
+		load_system_keyfile(config, f0, G_KEY_FILE_KEEP_COMMENTS, ft);
 		g_key_file_load_from_file(config_home, f, G_KEY_FILE_KEEP_COMMENTS, NULL);
 
 		g_free(ext);
@@ -1316,14 +1328,18 @@
 gchar *filetypes_get_conf_extension(gint filetype_idx)
 {
 	gchar *result;
+	GeanyFiletype *ft = filetypes[filetype_idx];
 
+	if (ft->priv->custom)
+		return g_strconcat(ft->name, ".conf", NULL);
+
 	/* Handle any special extensions different from lowercase filetype->name */
 	switch (filetype_idx)
 	{
 		case GEANY_FILETYPES_CPP: result = g_strdup("cpp"); break;
 		case GEANY_FILETYPES_CS: result = g_strdup("cs"); break;
 		case GEANY_FILETYPES_MAKE: result = g_strdup("makefile"); break;
-		default: result = g_ascii_strdown(filetypes[filetype_idx]->name, -1); break;
+		default: result = g_ascii_strdown(ft->name, -1); break;
 	}
 	return result;
 }


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



More information about the Commits mailing list