From db95802a1842fdf6d130316888ebf474ba3acb9f Mon Sep 17 00:00:00 2001 From: David Lawrence Ramsey Date: Wed, 13 Jul 2005 20:18:46 +0000 Subject: [PATCH] add breakage fixes, type fixes, and as-needed color regex compilation git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@2854 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- ChangeLog | 26 ++++++++++++++++----- src/color.c | 57 ++++++++++++++++++++++++++++++++++----------- src/files.c | 28 +++++++++++++++------- src/global.c | 17 ++++++++++---- src/nano.c | 21 ++++++++--------- src/nano.h | 65 ++++++++++++++++++++++++++++++---------------------- src/proto.h | 11 ++++----- src/rcfile.c | 54 ++++++++++++++++++++++++++++--------------- src/search.c | 5 +++- src/winio.c | 44 ++++++++++++++++++----------------- 10 files changed, 210 insertions(+), 118 deletions(-) diff --git a/ChangeLog b/ChangeLog index c035bb96..416edcf6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -21,8 +21,9 @@ CVS code - open_nextfile_void() switch_to_next_buffer(), rename write_marked() write_marked_file(), remove load_file(), rename cancel_fork() cancel_command(), rename open_pipe() - execute_command(), remove execute_command(), and remove - resize_variables(). (DLR) + execute_command(), remove execute_command(), remove + resize_variables(), rename get_buffer() get_key_buffer(), and + rename get_buffer_len() get_key_buffer_len(). (DLR) - Replace all mvwaddstr(hblank) calls with a new function that does the same thing without the need for hblank. New function blank_line(); changes to do_browser(), blank_titlebar(), @@ -31,6 +32,19 @@ CVS code - - Make the static pid variable used by execute_command() and cancel_command() a pid_t instead of an int, for consistency. (DLR) + - Consistently make the flags global and any variables used to + hold it longs. (DLR) + - Consistently make the fg and bg colortype struct entries and + any variables used to hold them shorts. Changes to + do_colorinit() (renamed color_init()), color_to_int() (renamed + color_to_short()), and parse_colors(). (DLR) + - Change color handling to save only the regex strings + constantly, and to actually compile them on an as-needed + basis. Also, don't bother doing complete refreshes of the + screen when color support is enabled if there's no regex + associated with the current file. Changes to update_color() + (renamed color_update()), thanks_for_all_the_fish(), + do_input(), and do_output(), (DLR) - files.c: open_file() - Assert that filename isn't NULL, and don't do anything special @@ -64,13 +78,13 @@ CVS code - allow_pending_sigwinch() - Simplify by using the "?" operator instead of an if clause. (DLR) - main() - - When constant cursor position display is on, only display the - cursor position if there are no keys waiting in the buffer. - (DLR) - nano.h: - Since we only use vsnprintf() now, remove the #ifdef block for HAVE_SNPRINTF. (DLR) +- rcfile.c: + nregcomp() + - Return TRUE when the compilation succeeds and FALSE otherwise, + instead of the other way around. (DLR) - search.c: search_init() - Don't blank out last_replace anymore when we get a new string, diff --git a/src/color.c b/src/color.c index 88c854d5..ccd5c9e6 100644 --- a/src/color.c +++ b/src/color.c @@ -29,6 +29,7 @@ #include #include #include +#include #include "proto.h" #ifdef ENABLE_COLOR @@ -63,35 +64,38 @@ void set_colorpairs(void) } } -void do_colorinit(void) +void color_init(void) { + assert(openfile != NULL); + if (has_colors()) { - const colortype *tmpcolor = NULL; + const colortype *tmpcolor; #ifdef HAVE_USE_DEFAULT_COLORS bool defok; #endif start_color(); - /* Add in colors, if available. */ #ifdef HAVE_USE_DEFAULT_COLORS + /* Add in colors, if available. */ defok = (use_default_colors() != ERR); #endif - for (tmpcolor = colorstrings; tmpcolor != NULL; + for (tmpcolor = openfile->colorstrings; tmpcolor != NULL; tmpcolor = tmpcolor->next) { short background = tmpcolor->bg; - if (background == -1) + if (background == -1) { #ifdef HAVE_USE_DEFAULT_COLORS if (!defok) #endif background = COLOR_BLACK; + } init_pair(tmpcolor->pairnum, tmpcolor->fg, background); #ifdef DEBUG - fprintf(stderr, "init_pair(): fg = %d, bg = %d\n", + fprintf(stderr, "init_pair(): fg = %hd, bg = %hd\n", tmpcolor->fg, tmpcolor->bg); #endif } @@ -99,11 +103,14 @@ void do_colorinit(void) } /* Update the color information based on the current filename. */ -void update_color(void) +void color_update(void) { const syntaxtype *tmpsyntax; + colortype *tmpcolor; + + assert(openfile != NULL); - colorstrings = NULL; + openfile->colorstrings = NULL; for (tmpsyntax = syntaxes; tmpsyntax != NULL; tmpsyntax = tmpsyntax->next) { const exttype *e; @@ -111,22 +118,44 @@ void update_color(void) for (e = tmpsyntax->extensions; e != NULL; e = e->next) { /* Set colorstrings if we matched the extension regex. */ if (regexec(&e->val, openfile->filename, 0, NULL, 0) == 0) - colorstrings = tmpsyntax->color; + openfile->colorstrings = tmpsyntax->color; - if (colorstrings != NULL) + if (openfile->colorstrings != NULL) break; } } /* If we haven't found a match, use the override string. */ - if (colorstrings == NULL && syntaxstr != NULL) { + if (openfile->colorstrings == NULL && syntaxstr != NULL) { for (tmpsyntax = syntaxes; tmpsyntax != NULL; tmpsyntax = tmpsyntax->next) { - if (mbstrcasecmp(tmpsyntax->desc, syntaxstr) == 0) - colorstrings = tmpsyntax->color; + if (mbstrcasecmp(tmpsyntax->desc, syntaxstr) == 0) { + openfile->colorstrings = tmpsyntax->color; + + if (openfile->colorstrings != NULL) + break; + } + } + } + + /* tmpcolor->startstr and tmpcolor->endstr have already been checked + * for validity elsewhere. Compile their associated regexes if we + * haven't already. */ + for (tmpcolor = openfile->colorstrings; tmpcolor != NULL; + tmpcolor = tmpcolor->next) { + if (tmpcolor->startstr != NULL) { + tmpcolor->start = (regex_t *)nmalloc(sizeof(regex_t)); + nregcomp(tmpcolor->start, tmpcolor->startstr, + tmpcolor->icase ? REG_ICASE : 0); + } + if (tmpcolor->endstr != NULL) { + tmpcolor->end = (regex_t *)nmalloc(sizeof(regex_t)); + nregcomp(tmpcolor->end, tmpcolor->endstr, + tmpcolor->icase ? REG_ICASE : 0); } } - do_colorinit(); + + color_init(); } #endif /* ENABLE_COLOR */ diff --git a/src/files.c b/src/files.c index 98550957..02f2d56a 100644 --- a/src/files.c +++ b/src/files.c @@ -147,6 +147,9 @@ void initialize_buffer(void) memset(&openfile->originalfilestat, 0, sizeof(struct stat)); #endif +#ifndef ENABLE_COLOR + openfile->colorstrings = NULL; +#endif } #ifndef DISABLE_SPELLER @@ -163,8 +166,8 @@ void reinitialize_buffer(void) } #endif -/* filename is a file to open. We make a new buffer, if necessary, and - * then open and read the file. */ +/* If it's not "", filename is a file to open. We make a new buffer, if + * necessary, and then open and read the file, if applicable. */ void open_buffer(const char *filename) { bool new_buffer = (openfile == NULL @@ -215,16 +218,19 @@ void open_buffer(const char *filename) * to the first line of the buffer. */ if (rc != -1 && new_buffer) openfile->current = openfile->fileage; + +#ifdef ENABLE_COLOR + /* If we're loading into a new buffer, update the buffer's + * associated colors, if applicable. */ + if (new_buffer) + color_update(); +#endif } /* Update the screen to account for the current buffer. */ void display_buffer(void) { titlebar(NULL); -#ifdef ENABLE_COLOR - /* Update the buffer's associated colors, if applicable. */ - update_color(); -#endif edit_refresh(); } @@ -1559,8 +1565,14 @@ int write_file(const char *name, FILE *f_open, bool tmp, int append, openfile->filename = mallocstrcpy(openfile->filename, realname); #ifdef ENABLE_COLOR - update_color(); - if (!ISSET(NO_COLOR_SYNTAX)) + /* We might have changed the filename, so update the + * buffer's associated colors, if applicable. */ + color_update(); + + /* If color syntaxes are available and turned on, we need to + * call edit_refresh(). */ + if (openfile->colorstrings != NULL && + !ISSET(NO_COLOR_SYNTAX)) edit_refresh(); #endif } diff --git a/src/global.c b/src/global.c index bd4b4db4..f3c2b6e7 100644 --- a/src/global.c +++ b/src/global.c @@ -39,7 +39,7 @@ ssize_t wrap_at = -CHARS_FROM_EOL; /* Right justified fill value, char *last_search = NULL; /* Last string we searched for */ char *last_replace = NULL; /* Last replacement string */ -unsigned long flags = 0; /* Our flag containing many options */ +long flags = 0; /* Our flag containing many options */ WINDOW *topwin; /* Top buffer */ WINDOW *edit; /* The file portion of the editor */ WINDOW *bottomwin; /* Bottom buffer */ @@ -124,7 +124,6 @@ shortcut *gotodir_list = NULL; #endif #ifdef ENABLE_COLOR -const colortype *colorstrings = NULL; syntaxtype *syntaxes = NULL; char *syntaxstr = NULL; #endif @@ -1226,10 +1225,18 @@ void thanks_for_all_the_fish(void) colortype *bob = syntaxes->color; syntaxes->color = bob->next; - regfree(&bob->start); - if (bob->end != NULL) + if (bob->startstr != NULL) + free(bob->startstr); + if (bob->start != NULL) { + regfree(bob->start); + free(bob->start); + } + if (bob->endstr != NULL) + free(bob->endstr); + if (bob->end != NULL) { regfree(bob->end); - free(bob->end); + free(bob->end); + } free(bob); } syntaxes = syntaxes->next; diff --git a/src/nano.c b/src/nano.c index 3bb685c5..2d7338e8 100644 --- a/src/nano.c +++ b/src/nano.c @@ -1359,9 +1359,9 @@ void do_delete(void) set_modified(); #ifdef ENABLE_COLOR - /* If color syntaxes are turned on, we need to call + /* If color syntaxes are available and turned on, we need to call * edit_refresh(). */ - if (!ISSET(NO_COLOR_SYNTAX)) + if (openfile->colorstrings != NULL && !ISSET(NO_COLOR_SYNTAX)) do_refresh = TRUE; #endif @@ -3932,7 +3932,7 @@ int do_input(bool *meta_key, bool *func_key, bool *s_or_t, bool * display all the characters in the input buffer if it isn't * empty. Note that it should be empty if we're in view * mode. */ - if (*s_or_t == TRUE || get_buffer_len() == 0) { + if (*s_or_t == TRUE || get_key_buffer_len() == 0) { if (kbinput != NULL) { /* Display all the characters in the input buffer at * once, filtering out control characters. */ @@ -4159,9 +4159,9 @@ void do_output(char *output, size_t output_len, bool allow_cntrls) #endif #ifdef ENABLE_COLOR - /* If color syntaxes are turned on, we need to call - * edit_refresh(). */ - if (!ISSET(NO_COLOR_SYNTAX)) + /* If color syntaxes are available and turned on, we need to + * call edit_refresh(). */ + if (openfile->colorstrings != NULL && !ISSET(NO_COLOR_SYNTAX)) do_refresh = TRUE; #endif } @@ -4475,7 +4475,7 @@ int main(int argc, char **argv) char *alt_speller_cpy = alt_speller; #endif ssize_t tabsize_cpy = tabsize; - unsigned long flags_cpy = flags; + long flags_cpy = flags; #ifndef DISABLE_OPERATINGDIR operating_dir = NULL; @@ -4727,10 +4727,9 @@ int main(int argc, char **argv) /* Make sure the cursor is in the edit window. */ reset_cursor(); - /* If constant cursor position display is on, and there are no - * keys waiting in the buffer, display the current cursor - * position on the statusbar. */ - if (ISSET(CONST_UPDATE) && get_buffer_len() == 0) + /* If constant cursor position display is on, display the + * current cursor position on the statusbar. */ + if (ISSET(CONST_UPDATE)) do_cursorpos(TRUE); currshortcut = main_list; diff --git a/src/nano.h b/src/nano.h index 705726a6..32341347 100644 --- a/src/nano.h +++ b/src/nano.h @@ -160,6 +160,40 @@ typedef struct filestruct { ssize_t lineno; /* The line number. */ } filestruct; +#ifdef ENABLE_COLOR +typedef struct colortype { + short fg; /* Foreground color. */ + short bg; /* Background color. */ + bool bright; /* Is this color A_BOLD? */ + bool icase; /* Is this regex string case + * insensitive? */ + int pairnum; /* Color pair number used for this + * foreground/background. */ + char *startstr; /* Start (or all) of the regex + * string. */ + regex_t *start; /* Compiled start (or all) of the regex + * string. */ + char *endstr; /* End (if any) of the regex string. */ + regex_t *end; /* Compiled end (if any) of the regex + * string. */ + struct colortype *next; +} colortype; + +typedef struct exttype { + regex_t val; /* The extensions that match this + * syntax. */ + struct exttype *next; +} exttype; + +typedef struct syntaxtype { + char *desc; /* Name of this syntax type. */ + exttype *extensions; /* List of extensions that this syntax + * applies to. */ + colortype *color; /* Color struct for this syntax. */ + struct syntaxtype *next; +} syntaxtype; +#endif /* ENABLE_COLOR */ + typedef struct openfilestruct { char *filename; /* Current file's name. */ filestruct *fileage; /* Current file's first line. */ @@ -185,6 +219,9 @@ typedef struct openfilestruct { file_format fmt; /* Current file's format. */ struct stat originalfilestat; /* Current file's stat. */ +#endif +#ifdef ENABLE_COLOR + colortype *colorstrings; /* Current file's associated colors. */ #endif struct openfilestruct *next; /* Next node. */ @@ -236,34 +273,6 @@ typedef struct rcoption { } rcoption; #endif -#ifdef ENABLE_COLOR -typedef struct colortype { - int fg; /* Foreground color. */ - int bg; /* Background color. */ - bool bright; /* Is this color A_BOLD? */ - int pairnum; /* Color pair number used for this - * foreground/background. */ - regex_t start; /* Start (or all) of the regex - * string. */ - regex_t *end; /* End (if any) of the regex string. */ - struct colortype *next; -} colortype; - -typedef struct exttype { - regex_t val; /* The extensions that match this - * syntax. */ - struct exttype *next; -} exttype; - -typedef struct syntaxtype { - char *desc; /* Name of this syntax type. */ - exttype *extensions; /* List of extensions that this syntax - * applies to. */ - colortype *color; /* Color struct for this syntax. */ - struct syntaxtype *next; -} syntaxtype; -#endif - /* Bitwise flags so that we can save space (or, more correctly, not * waste it). */ #define CASE_SENSITIVE (1<<0) diff --git a/src/proto.h b/src/proto.h index 2262f1ad..a8e4f005 100644 --- a/src/proto.h +++ b/src/proto.h @@ -37,7 +37,7 @@ extern ssize_t wrap_at; #endif extern int editwinrows; -extern unsigned long flags; +extern long flags; extern ssize_t tabsize; extern int currslen; @@ -88,7 +88,6 @@ extern partition *filepart; extern openfilestruct *openfile; #ifdef ENABLE_COLOR -extern const colortype *colorstrings; extern syntaxtype *syntaxes; extern char *syntaxstr; #endif @@ -211,7 +210,7 @@ bool is_valid_mbstring(const char *s); /* Public functions in color.c. */ #ifdef ENABLE_COLOR void set_colorpairs(void); -void do_colorinit(void); +void color_init(void); void update_color(void); #endif /* ENABLE_COLOR */ @@ -466,7 +465,7 @@ void rcfile_error(const char *msg, ...); char *parse_next_word(char *ptr); char *parse_argument(char *ptr); #ifdef ENABLE_COLOR -int color_to_int(const char *colorname, bool *bright); +int color_to_short(const char *colorname, bool *bright); char *parse_next_regex(char *ptr); bool nregcomp(regex_t *preg, const char *regex, int eflags); void parse_syntax(char *ptr); @@ -573,8 +572,8 @@ void get_totals(const filestruct *begin, const filestruct *end, size_t #ifndef NANO_SMALL void reset_kbinput(void); #endif -void get_buffer(WINDOW *win); -size_t get_buffer_len(void); +void get_key_buffer(WINDOW *win); +size_t get_key_buffer_len(void); void unget_input(int *input, size_t input_len); void unget_kbinput(int kbinput, bool meta_key, bool func_key); int *get_input(WINDOW *win, size_t input_len); diff --git a/src/rcfile.c b/src/rcfile.c index 8fed47b1..347d346f 100644 --- a/src/rcfile.c +++ b/src/rcfile.c @@ -182,9 +182,9 @@ char *parse_argument(char *ptr) } #ifdef ENABLE_COLOR -int color_to_int(const char *colorname, bool *bright) +int color_to_short(const char *colorname, bool *bright) { - int mcolor = -1; + short mcolor = -1; assert(colorname != NULL && bright != NULL); @@ -246,8 +246,8 @@ char *parse_next_regex(char *ptr) return ptr; } -/* Compile the regular expression regex to preg. Return FALSE on - * success, or TRUE if the expression is invalid. */ +/* Compile the regular expression regex to preg. Return TRUE on + * success, or FALSE if the expression is invalid. */ bool nregcomp(regex_t *preg, const char *regex, int eflags) { int rc = regcomp(preg, regex, REG_EXTENDED | eflags); @@ -261,7 +261,7 @@ bool nregcomp(regex_t *preg, const char *regex, int eflags) free(str); } - return (rc != 0); + return (rc == 0); } void parse_syntax(char *ptr) @@ -329,7 +329,7 @@ void parse_syntax(char *ptr) break; newext = (exttype *)nmalloc(sizeof(exttype)); - if (nregcomp(&newext->val, fileregptr, REG_NOSUB)) + if (!nregcomp(&newext->val, fileregptr, REG_NOSUB)) free(newext); else { if (endext == NULL) @@ -346,7 +346,7 @@ void parse_syntax(char *ptr) * treat the color stuff as case insensitive. */ void parse_colors(char *ptr, bool icase) { - int fg, bg; + short fg, bg; bool bright = FALSE, no_fgcolor = FALSE; char *fgstr; @@ -377,12 +377,12 @@ void parse_colors(char *ptr, bool icase) bgcolorname); return; } - bg = color_to_int(bgcolorname, &bright); + bg = color_to_short(bgcolorname, &bright); } else bg = -1; if (!no_fgcolor) { - fg = color_to_int(fgstr, &bright); + fg = color_to_short(fgstr, &bright); /* Don't try to parse screwed-up foreground colors. */ if (fg == -1) @@ -431,28 +431,40 @@ void parse_colors(char *ptr, bool icase) if (ptr == NULL) break; - if (nregcomp(&newcolor->start, fgstr, icase ? REG_ICASE : 0)) { - free(newcolor); - cancelled = TRUE; - } else { + newcolor->start = (regex_t *)nmalloc(sizeof(regex_t)); + if (nregcomp(newcolor->start, fgstr, icase ? REG_ICASE : 0)) { + /* Free this regex, now that we know it's valid, and save + * the original string, so that we can recompile this regex + * later as needed. */ + newcolor->startstr = mallocstrcpy(NULL, fgstr); + regfree(newcolor->start); + free(newcolor->start); + newcolor->start = NULL; + newcolor->fg = fg; newcolor->bg = bg; newcolor->bright = bright; - newcolor->next = NULL; + newcolor->icase = icase; + newcolor->endstr = NULL; newcolor->end = NULL; + newcolor->next = NULL; if (endcolor == NULL) { endsyntax->color = newcolor; #ifdef DEBUG - fprintf(stderr, "Starting a new colorstring for fg %d, bg %d\n", fg, bg); + fprintf(stderr, "Starting a new colorstring for fg %hd, bg %hd\n", fg, bg); #endif } else { #ifdef DEBUG - fprintf(stderr, "Adding new entry for fg %d, bg %d\n", fg, bg); + fprintf(stderr, "Adding new entry for fg %hd, bg %hd\n", fg, bg); #endif endcolor->next = newcolor; } endcolor = newcolor; + } else { + free(newcolor->start); + free(newcolor); + cancelled = TRUE; } if (expectend) { @@ -482,9 +494,15 @@ void parse_colors(char *ptr, bool icase) newcolor->end = (regex_t *)nmalloc(sizeof(regex_t)); if (nregcomp(newcolor->end, fgstr, icase ? REG_ICASE : 0)) { - free(newcolor->end); - newcolor->end = NULL; + /* Free this regex, now that we know it's valid, and + * save the original string, so that we can recompile + * this regex later as needed. */ + newcolor->endstr = mallocstrcpy(NULL, fgstr); + regfree(newcolor->end); } + + free(newcolor->end); + newcolor->end = NULL; } } } diff --git a/src/search.c b/src/search.c index 11f6f8c5..c169c18f 100644 --- a/src/search.c +++ b/src/search.c @@ -842,7 +842,10 @@ ssize_t do_replace_loop(const char *needle, const filestruct if (!replaceall) { #ifdef ENABLE_COLOR - if (!ISSET(NO_COLOR_SYNTAX)) + /* If color syntaxes are available and turned on, we + * need to call edit_refresh(). */ + if (openfile->colorstrings != NULL && + !ISSET(NO_COLOR_SYNTAX)) edit_refresh(); else #endif diff --git a/src/winio.c b/src/winio.c index 01d96dcd..3ee48fbf 100644 --- a/src/winio.c +++ b/src/winio.c @@ -127,7 +127,7 @@ void reset_kbinput(void) /* Read in a sequence of keystrokes from win and save them in the * default keystroke buffer. This should only be called when the * default keystroke buffer is empty. */ -void get_buffer(WINDOW *win) +void get_key_buffer(WINDOW *win) { int input; @@ -190,12 +190,12 @@ void get_buffer(WINDOW *win) nodelay(win, FALSE); #ifdef DEBUG - fprintf(stderr, "get_buffer(): key_buffer_len = %lu\n", (unsigned long)key_buffer_len); + fprintf(stderr, "get_key_buffer(): key_buffer_len = %lu\n", (unsigned long)key_buffer_len); #endif } /* Return the length of the default keystroke buffer. */ -size_t get_buffer_len(void) +size_t get_key_buffer_len(void) { return key_buffer_len; } @@ -270,7 +270,7 @@ int *get_input(WINDOW *win, size_t input_len) if (key_buffer_len == 0) { if (win != NULL) - get_buffer(win); + get_key_buffer(win); if (key_buffer_len == 0) return NULL; @@ -504,7 +504,7 @@ int parse_kbinput(WINDOW *win, bool *meta_key, bool *func_key * waiting, we have a true escape sequence, so * interpret it. */ escapes = 0; - if (get_buffer_len() == 0) { + if (get_key_buffer_len() == 0) { *meta_key = TRUE; retval = tolower(*kbinput); } else { @@ -517,7 +517,7 @@ int parse_kbinput(WINDOW *win, bool *meta_key, bool *func_key * sequence into its corresponding key value, * and save that as the result. */ unget_input(kbinput, 1); - seq_len = get_buffer_len(); + seq_len = get_key_buffer_len(); seq = get_input(NULL, seq_len); retval = get_escape_seq_kbinput(seq, seq_len, &ignore_seq); @@ -1460,7 +1460,7 @@ int *parse_verbatim_kbinput(WINDOW *win, size_t *kbinput_len) /* Get the complete sequence, and save the characters in it as the * result. */ - *kbinput_len = get_buffer_len(); + *kbinput_len = get_key_buffer_len(); retval = get_input(NULL, *kbinput_len); return retval; @@ -1700,7 +1700,7 @@ int do_statusbar_input(bool *meta_key, bool *func_key, bool *s_or_t, /* If we got a shortcut, or if there aren't any other characters * waiting after the one we read in, we need to display all the * characters in the input buffer if it isn't empty. */ - if (*s_or_t == TRUE || get_buffer_len() == 0) { + if (*s_or_t == TRUE || get_key_buffer_len() == 0) { if (kbinput != NULL) { /* Display all the characters in the input buffer at @@ -3113,7 +3113,7 @@ void edit_add(const filestruct *fileptr, const char *converted, int * string. */ #endif - assert(fileptr != NULL && converted != NULL); + assert(openfile != NULL && fileptr != NULL && converted != NULL); assert(strlenpt(converted) <= COLS); /* Just paint the string in any case (we'll add color or reverse on @@ -3121,8 +3121,10 @@ void edit_add(const filestruct *fileptr, const char *converted, int mvwaddstr(edit, yval, 0, converted); #ifdef ENABLE_COLOR - if (colorstrings != NULL && !ISSET(NO_COLOR_SYNTAX)) { - const colortype *tmpcolor = colorstrings; + /* If color syntaxes are available and turned on, we need to display + * them. */ + if (openfile->colorstrings != NULL && !ISSET(NO_COLOR_SYNTAX)) { + const colortype *tmpcolor = openfile->colorstrings; for (; tmpcolor != NULL; tmpcolor = tmpcolor->next) { int x_start; @@ -3157,7 +3159,7 @@ void edit_add(const filestruct *fileptr, const char *converted, int * not to match the beginning-of-line character * unless k is 0. If regexec() returns REG_NOMATCH, * there are no more matches in the line. */ - if (regexec(&tmpcolor->start, &fileptr->data[k], 1, + if (regexec(tmpcolor->start, &fileptr->data[k], 1, &startmatch, (k == 0) ? 0 : REG_NOTBOL) == REG_NOMATCH) break; @@ -3208,9 +3210,9 @@ void edit_add(const filestruct *fileptr, const char *converted, int /* Where it starts in that line. */ const filestruct *end_line; - while (start_line != NULL && - regexec(&tmpcolor->start, start_line->data, 1, - &startmatch, 0) == REG_NOMATCH) { + while (start_line != NULL && regexec(tmpcolor->start, + start_line->data, 1, &startmatch, + 0) == REG_NOMATCH) { /* If there is an end on this line, there is no need * to look for starts on earlier lines. */ if (regexec(tmpcolor->end, start_line->data, 0, @@ -3235,7 +3237,7 @@ void edit_add(const filestruct *fileptr, const char *converted, int /* No end found after this start. */ break; start_col++; - if (regexec(&tmpcolor->start, start_line->data + + if (regexec(tmpcolor->start, start_line->data + start_col, 1, &startmatch, REG_NOTBOL) == REG_NOMATCH) /* No later start on this line. */ @@ -3280,11 +3282,10 @@ void edit_add(const filestruct *fileptr, const char *converted, int start_col = 0; while (start_col < endpos) { - if (regexec(&tmpcolor->start, - fileptr->data + start_col, 1, &startmatch, - (start_col == 0) ? 0 : - REG_NOTBOL) == REG_NOMATCH || - start_col + startmatch.rm_so >= endpos) + if (regexec(tmpcolor->start, fileptr->data + + start_col, 1, &startmatch, (start_col == 0) ? + 0 : REG_NOTBOL) == REG_NOMATCH || start_col + + startmatch.rm_so >= endpos) /* No more starts on this line. */ break; /* Translate the match to be relative to the @@ -3353,6 +3354,7 @@ void edit_add(const filestruct *fileptr, const char *converted, int #endif /* ENABLE_COLOR */ #ifndef NANO_SMALL + /* If the mark is on, we need to display it. */ if (openfile->mark_set && (fileptr->lineno <= openfile->mark_begin->lineno || fileptr->lineno <= openfile->current->lineno) && (fileptr->lineno >= -- 2.39.5