General - Added separate regex variable (color_regex and colormatches) so that color syntax and regex search/replace can coexist

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@1140 35c25a1d-7b9e-4130-9fde-d3aeb78583b8
This commit is contained in:
Chris Allegretta 2002-03-24 23:19:32 +00:00
parent b23d14460e
commit 3533a348fc
4 changed files with 36 additions and 24 deletions

View File

@ -5,6 +5,8 @@ CVS code -
- New "External Command" code, originally by Dwayne Rightler.
New function files.c:open_pipe(), changes to do_insertfile(),
new list extcmd_list, cmd is ^X after ^R by default.
- Added separate regex variable (color_regex and colormatches)
so that color syntax and regex search/replace can coexist.
- files.c:
check_writable_directory()
- Stat full_path, not path (Steven Kneizys).

View File

@ -123,6 +123,11 @@ toggle *toggles = NULL;
regex_t search_regexp; /* Global to store compiled search regexp */
regmatch_t regmatches[10]; /* Match positions for parenthetical
subexpressions, max of 10 */
#ifdef ENABLE_COLOR
regex_t color_regexp; /* Global to store compiled search regexp */
regmatch_t colormatches; /* Match positions for parenthetical */
#endif /* ENABLE_COLOR */
#endif
int length_of_list(shortcut *s)

View File

@ -83,6 +83,11 @@ extern shortcut *currshortcut;
extern int use_regexp, regexp_compiled;
extern regex_t search_regexp;
extern regmatch_t regmatches[10];
#ifdef ENABLE_COLOR
extern regex_t color_regexp;
extern regmatch_t colormatches[1];
#endif /* HJAVE_COLOR */
#endif
extern toggle *toggles;

48
winio.c
View File

@ -798,32 +798,32 @@ void edit_add(filestruct * fileptr, int yval, int start, int virt_cur_x,
/* First, highlight all single-line regexes */
k = start;
regcomp(&search_regexp, tmpcolor->start, 0);
while (!regexec(&search_regexp, &fileptr->data[k], 1,
regmatches, 0)) {
regcomp(&color_regexp, tmpcolor->start, 0);
while (!regexec(&color_regexp, &fileptr->data[k], 1,
colormatches, 0)) {
if (regmatches[0].rm_eo - regmatches[0].rm_so < 1) {
if (colormatches[0].rm_eo - colormatches[0].rm_so < 1) {
statusbar("Refusing 0 length regex match");
break;
}
#ifdef DEBUG
fprintf(stderr, "Match! (%d chars) \"%s\"\n",
regmatches[0].rm_eo - regmatches[0].rm_so,
&fileptr->data[k + regmatches[0].rm_so]);
colormatches[0].rm_eo - colormatches[0].rm_so,
&fileptr->data[k + colormatches[0].rm_so]);
#endif
if (regmatches[0].rm_so < COLS - 1) {
if (colormatches[0].rm_so < COLS - 1) {
if (tmpcolor->bright)
wattron(edit, A_BOLD);
wattron(edit, COLOR_PAIR(tmpcolor->pairnum));
if (regmatches[0].rm_eo + k <= COLS)
if (colormatches[0].rm_eo + k <= COLS)
paintlen =
regmatches[0].rm_eo - regmatches[0].rm_so;
colormatches[0].rm_eo - colormatches[0].rm_so;
else
paintlen = COLS - k - regmatches[0].rm_so - 1;
paintlen = COLS - k - colormatches[0].rm_so - 1;
mvwaddnstr(edit, yval, regmatches[0].rm_so + k,
&fileptr->data[k + regmatches[0].rm_so],
mvwaddnstr(edit, yval, colormatches[0].rm_so + k,
&fileptr->data[k + colormatches[0].rm_so],
paintlen);
}
@ -832,7 +832,7 @@ void edit_add(filestruct * fileptr, int yval, int start, int virt_cur_x,
wattroff(edit, A_BOLD);
wattroff(edit, COLOR_PAIR(tmpcolor->pairnum));
k += regmatches[0].rm_eo;
k += colormatches[0].rm_eo;
}
}
@ -845,22 +845,22 @@ void edit_add(filestruct * fileptr, int yval, int start, int virt_cur_x,
s = fileptr;
while (s != NULL) {
regcomp(&search_regexp, tmpcolor->start, 0);
regcomp(&color_regexp, tmpcolor->start, 0);
if (!regexec
(&search_regexp, s->data, 1, regmatches, 0))
(&color_regexp, s->data, 1, colormatches, 0))
break;
s = s->prev;
}
if (s != NULL) {
/* We found a start, mark it */
smatch = regmatches[0].rm_so;
smatch = colormatches[0].rm_so;
e = s;
while (e != NULL && e != fileptr) {
regcomp(&search_regexp, tmpcolor->end, 0);
regcomp(&color_regexp, tmpcolor->end, 0);
if (!regexec
(&search_regexp, e->data, 1, regmatches, 0))
(&color_regexp, e->data, 1, colormatches, 0))
break;
e = e->next;
}
@ -869,9 +869,9 @@ void edit_add(filestruct * fileptr, int yval, int start, int virt_cur_x,
continue; /* There's an end before us */
else { /* Keep looking for an end */
while (e != NULL) {
regcomp(&search_regexp, tmpcolor->end, 0);
regcomp(&color_regexp, tmpcolor->end, 0);
if (!regexec
(&search_regexp, e->data, 1, regmatches,
(&color_regexp, e->data, 1, colormatches,
0))
break;
e = e->next;
@ -880,13 +880,13 @@ void edit_add(filestruct * fileptr, int yval, int start, int virt_cur_x,
if (e == NULL)
continue; /* There's no start before the end :) */
else { /* Okay, we found an end, mark it! */
ematch = regmatches[0].rm_eo;
ematch = colormatches[0].rm_eo;
while (e != NULL) {
regcomp(&search_regexp, tmpcolor->end, 0);
regcomp(&color_regexp, tmpcolor->end, 0);
if (!regexec
(&search_regexp, e->data, 1,
regmatches, 0))
(&color_regexp, e->data, 1,
colormatches, 0))
break;
e = e->next;
}