From: David Lawrence Ramsey Date: Sat, 30 Jul 2005 21:24:56 +0000 (+0000) Subject: port over more of Brand Huntsman's old patch: a color syntax specified X-Git-Tag: v1.3.9~95 X-Git-Url: https://git.wh0rd.org/?a=commitdiff_plain;h=6135bf3f6b598582af4f69af716da39b7aaed940;p=nano.git 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 --- 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; + } + } } }