[geany/geany] b67ec3: Let longest filename pattern win

Nick Treleaven git-noreply at xxxxx
Mon Jul 22 11:47:21 UTC 2019


Branch:      refs/heads/master
Author:      Nick Treleaven <n at trelsoft.com>
Committer:   Nick Treleaven <n at trelsoft.com>
Date:        Mon, 22 Jul 2019 11:47:21 UTC
Commit:      b67ec3dd4ed8d8eb3f3ef30abf4dd67ff56a0d06
             https://github.com/geany/geany/commit/b67ec3dd4ed8d8eb3f3ef30abf4dd67ff56a0d06

Log Message:
-----------
Let longest filename pattern win

Use g_pattern_match_simple as GPatternSpec is only used once.


Modified Paths:
--------------
    src/filetypes.c

Modified: src/filetypes.c
50 lines changed, 19 insertions(+), 31 deletions(-)
===================================================================
@@ -463,27 +463,21 @@ void filetypes_init(void)
 }
 
 
-static gboolean match_basename(const GeanyFiletype *ft, const gchar *base_filename)
+static guint match_basename(const GeanyFiletype *ft, const gchar *base_filename)
 {
-	gint j;
-	gboolean ret = FALSE;
-
 	if (G_UNLIKELY(ft->id == GEANY_FILETYPES_NONE))
-		return FALSE;
+		return 0;
 
-	for (j = 0; ft->pattern[j] != NULL; j++)
+	for (guint j = 0; ft->pattern[j] != NULL; j++)
 	{
-		GPatternSpec *pattern = g_pattern_spec_new(ft->pattern[j]);
-
-		if (g_pattern_match_string(pattern, base_filename))
+		gchar *pat = ft->pattern[j];
+		
+		if (g_pattern_match_simple(pat, base_filename))
 		{
-			ret = TRUE;
-			g_pattern_spec_free(pattern);
-			break;
+			return strlen(pat);
 		}
-		g_pattern_spec_free(pattern);
 	}
-	return ret;
+	return 0;
 }
 
 
@@ -521,7 +515,7 @@ GeanyFiletype *filetypes_detect_from_extension(const gchar *utf8_filename)
 {
 	gchar *base_filename;
 	GeanyFiletype *ft;
-	guint i;
+	guint plen = 0;
 
 	ft = detect_filetype_conf_file(utf8_filename);
 	if (ft)
@@ -534,25 +528,19 @@ GeanyFiletype *filetypes_detect_from_extension(const gchar *utf8_filename)
 	SETPTR(base_filename, g_utf8_strdown(base_filename, -1));
 #endif
 
-	for (i = 0; i < filetypes_array->len; i++)
+	for (guint i = 0; i < filetypes_array->len; i++)
 	{
-		if (match_basename(filetypes[i], base_filename))
-		{
+		guint mlen = match_basename(filetypes[i], base_filename);
+		
+		if (mlen > plen)
+		{	// longest pattern match wins
+			plen = mlen;
 			ft = filetypes[i];
-			break;
 		}
-	}
-	// check if user config overrides found ft
-	if (ft && !ft->priv->user_extensions)
-	{
-		for (i++; i < filetypes_array->len; i++)
-		{
-			if (filetypes[i]->priv->user_extensions &&
-				match_basename(filetypes[i], base_filename))
-			{
-				ft = filetypes[i];
-				break;
-			}
+		else if (mlen == plen && ft && !ft->priv->user_extensions &&
+			filetypes[i]->priv->user_extensions)
+		{	// user config overrides system if pattern len same
+			ft = filetypes[i];
 		}
 	}
 	if (ft == NULL)



--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).


More information about the Commits mailing list