mirror of
git://git.sv.gnu.org/nano.git
synced 2024-11-26 06:39:43 +03:00
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:
parent
b23d14460e
commit
3533a348fc
@ -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).
|
||||
|
5
global.c
5
global.c
@ -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)
|
||||
|
5
proto.h
5
proto.h
@ -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
48
winio.c
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user