From 6135bf3f6b598582af4f69af716da39b7aaed940 Mon Sep 17 00:00:00 2001
From: David Lawrence Ramsey <pooka109@gmail.com>
Date: Sat, 30 Jul 2005 21:24:56 +0000
Subject: [PATCH] port over more of Brand Huntsman's old patch: a color syntax
 specified on the command line will now override the syntax associated with
 the current file extension

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@2951 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
---
 ChangeLog   |  4 ++-
 src/color.c | 70 +++++++++++++++++++++++++++++------------------------
 2 files changed, 42 insertions(+), 32 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 7aeca7a1..e52576c6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -51,7 +51,9 @@ CVS code -
 	  color_to_short()), and parse_colors(). (DLR)
 	- Change color handling to save only the extension and color
 	  regex strings constantly,  and to actually compile them on an
-	  as-needed basis. Changes to update_color(),
+	  as-needed basis.  Also, make a color syntax specified on the
+	  command line override the syntax associated with the current
+	  file extension.  Changes to update_color(),
 	  thanks_for_all_the_fish(), nregcomp(), parse_syntax(), and
 	  parse_colors(). (Brand Huntsman and DLR)
 	- Various other color fixes.  Handle unspecified foreground
diff --git a/src/color.c b/src/color.c
index 79073bf8..c74ee905 100644
--- a/src/color.c
+++ b/src/color.c
@@ -113,47 +113,55 @@ void color_update(void)
     assert(openfile != NULL);
 
     openfile->colorstrings = NULL;
-    for (tmpsyntax = syntaxes; tmpsyntax != NULL;
-	tmpsyntax = tmpsyntax->next) {
-	exttype *e;
-
-	for (e = tmpsyntax->extensions; e != NULL; e = e->next) {
-	    bool not_compiled = (e->ext == NULL);
-
-	    /* e->ext_regex has already been checked for validity
-	     * elsewhere.  Compile its specified regex if we haven't
-	     * already. */
-	    if (not_compiled) {
-		e->ext = (regex_t *)nmalloc(sizeof(regex_t));
-		regcomp(e->ext, e->ext_regex, REG_EXTENDED);
-	    }
 
-	    /* Set colorstrings if we matched the extension regex. */
-	    if (regexec(e->ext, openfile->filename, 0, NULL, 0) == 0)
+    /* If we specified a syntax override string, use it. */
+    if (syntaxstr != NULL) {
+	for (tmpsyntax = syntaxes; tmpsyntax != NULL;
+		tmpsyntax = tmpsyntax->next) {
+	    if (mbstrcasecmp(tmpsyntax->desc, syntaxstr) == 0)
 		openfile->colorstrings = tmpsyntax->color;
 
 	    if (openfile->colorstrings != NULL)
 		break;
-
-	    /* Decompile e->ext_regex's specified regex if we aren't
-	     * going to use it. */
-	    if (not_compiled) {
-		regfree(e->ext);
-		free(e->ext);
-		e->ext = NULL;
-	    }
 	}
     }
 
-    /* If we haven't found a match, use the override string. */
-    if (openfile->colorstrings == NULL && syntaxstr != NULL) {
+    /* If we didn't specify a syntax override string, or if we did and
+     * there was no syntax by that name, get the syntax based on the
+     * file extension. */
+    if (openfile->colorstrings == NULL) {
 	for (tmpsyntax = syntaxes; tmpsyntax != NULL;
 		tmpsyntax = tmpsyntax->next) {
-	    if (mbstrcasecmp(tmpsyntax->desc, syntaxstr) == 0)
-		openfile->colorstrings = tmpsyntax->color;
-
-	    if (openfile->colorstrings != NULL)
-		break;
+	    exttype *e;
+
+	    for (e = tmpsyntax->extensions; e != NULL; e = e->next) {
+		bool not_compiled = (e->ext == NULL);
+
+		/* e->ext_regex has already been checked for validity
+		 * elsewhere.  Compile its specified regex if we haven't
+		 * already. */
+		if (not_compiled) {
+		    e->ext = (regex_t *)nmalloc(sizeof(regex_t));
+		    regcomp(e->ext, e->ext_regex, REG_EXTENDED);
+		}
+
+		/* Set colorstrings if we matched the extension
+		 * regex. */
+		if (regexec(e->ext, openfile->filename, 0, NULL,
+			0) == 0)
+		    openfile->colorstrings = tmpsyntax->color;
+
+		if (openfile->colorstrings != NULL)
+		    break;
+
+		/* Decompile e->ext_regex's specified regex if we aren't
+		 * going to use it. */
+		if (not_compiled) {
+		    regfree(e->ext);
+		    free(e->ext);
+		    e->ext = NULL;
+		}
+	    }
 	}
     }
 
-- 
GitLab