tweaks: adjust some comments, reshuffle a line, and use a while loop
Этот коммит содержится в:
родитель
76d83070c4
Коммит
96f50b8d55
20
src/color.c
20
src/color.c
@ -420,31 +420,35 @@ void precalc_multicolorinfo(void)
|
|||||||
/* Assume nothing applies until proven otherwise below. */
|
/* Assume nothing applies until proven otherwise below. */
|
||||||
fileptr->multidata[ink->id] = CNONE;
|
fileptr->multidata[ink->id] = CNONE;
|
||||||
|
|
||||||
|
/* When the line contains a start match, look for an end, and if
|
||||||
|
* found, mark all the lines that are affected. */
|
||||||
while (regexec(ink->start, &fileptr->data[startx], 1,
|
while (regexec(ink->start, &fileptr->data[startx], 1,
|
||||||
&startmatch, (startx == 0) ? 0 : REG_NOTBOL) == 0) {
|
&startmatch, (startx == 0) ? 0 : REG_NOTBOL) == 0) {
|
||||||
/* Look for an end, and start marking how many lines are
|
|
||||||
* encompassed, which should speed up rendering later. */
|
|
||||||
startx += startmatch.rm_eo;
|
startx += startmatch.rm_eo;
|
||||||
|
|
||||||
if (startx > linelen)
|
if (startx > linelen)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* Look first on this line for an end. */
|
/* If there is an end match on this line, mark the line, but
|
||||||
|
* continue looking for other starts after it. */
|
||||||
if (regexec(ink->end, &fileptr->data[startx], 1,
|
if (regexec(ink->end, &fileptr->data[startx], 1,
|
||||||
&endmatch, (startx == 0) ? 0 : REG_NOTBOL) == 0) {
|
&endmatch, (startx == 0) ? 0 : REG_NOTBOL) == 0) {
|
||||||
|
fileptr->multidata[ink->id] = CSTARTENDHERE;
|
||||||
startx += endmatch.rm_eo;
|
startx += endmatch.rm_eo;
|
||||||
/* Step ahead when both start and end are mere anchors. */
|
/* If both start and end are mere anchors, step ahead. */
|
||||||
if (startmatch.rm_so == startmatch.rm_eo &&
|
if (startmatch.rm_so == startmatch.rm_eo &&
|
||||||
endmatch.rm_so == endmatch.rm_eo)
|
endmatch.rm_so == endmatch.rm_eo)
|
||||||
startx += 1;
|
startx += 1;
|
||||||
fileptr->multidata[ink->id] = CSTARTENDHERE;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Nice, we didn't find the end regex on this line. Let's start looking for it. */
|
/* Look for an end match on later lines. */
|
||||||
for (endptr = fileptr->next; endptr != NULL; endptr = endptr->next) {
|
endptr = fileptr->next;
|
||||||
|
|
||||||
|
while (endptr != NULL) {
|
||||||
if (regexec(ink->end, endptr->data, 1, &endmatch, 0) == 0)
|
if (regexec(ink->end, endptr->data, 1, &endmatch, 0) == 0)
|
||||||
break;
|
break;
|
||||||
|
endptr = endptr->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (endptr == NULL)
|
if (endptr == NULL)
|
||||||
@ -462,7 +466,7 @@ void precalc_multicolorinfo(void)
|
|||||||
alloc_multidata_if_needed(endptr);
|
alloc_multidata_if_needed(endptr);
|
||||||
fileptr->multidata[ink->id] = CBEGINBEFORE;
|
fileptr->multidata[ink->id] = CBEGINBEFORE;
|
||||||
|
|
||||||
/* Skip to the end point of the match. */
|
/* Begin looking for a new start after the end match. */
|
||||||
startx = endmatch.rm_eo;
|
startx = endmatch.rm_eo;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user