tweaks: rename three painting variables, to be more distinct

All these different "start"s and "end"s are confusing.  Use instead
'from_x and 'till_x' to remember which part of the current line is
visible now on screen and is thus represented in 'converted'.
master
Benno Schulenberg 2017-01-08 10:20:57 +01:00
parent 88cf22f804
commit 6103c47f1c
1 changed files with 30 additions and 30 deletions

View File

@ -2290,22 +2290,22 @@ void reset_cursor(void)
* the edit window. fileptr is the line to be painted, at row line of * the edit window. fileptr is the line to be painted, at row line of
* the window. converted is the actual string to be written to the * the window. converted is the actual string to be written to the
* window, with tabs and control characters replaced by strings of * window, with tabs and control characters replaced by strings of
* regular characters. start is the column number of the first * regular characters. from_col is the column number of the first
* character of this page. That is, the first character of converted * character of this page. That is, the first character of converted
* corresponds to character number actual_x(fileptr->data, start) of the * corresponds to character number actual_x(fileptr->data, from_col) of the
* line. */ * line. */
void edit_draw(filestruct *fileptr, const char *converted, int void edit_draw(filestruct *fileptr, const char *converted, int
line, size_t start) line, size_t from_col)
{ {
#if !defined(NANO_TINY) || !defined(DISABLE_COLOR) #if !defined(NANO_TINY) || !defined(DISABLE_COLOR)
size_t startpos = actual_x(fileptr->data, start); size_t from_x = actual_x(fileptr->data, from_col);
/* The position in fileptr->data of the leftmost character /* The position in fileptr->data of the leftmost character
* that displays at least partially on the window. */ * that displays at least partially on the window. */
size_t endpos = actual_x(fileptr->data, start + editwincols - 1) + 1; size_t till_x = actual_x(fileptr->data, from_col + editwincols - 1) + 1;
/* The position in fileptr->data of the first character that is /* The position in fileptr->data of the first character that is
* completely off the window to the right. * completely off the window to the right.
* *
* Note that endpos might be beyond the null terminator of the * Note that till_x might be beyond the null terminator of the
* string. */ * string. */
#endif #endif
@ -2318,7 +2318,7 @@ void edit_draw(filestruct *fileptr, const char *converted, int
if (margin > 0) { if (margin > 0) {
wattron(edit, interface_color_pair[LINE_NUMBER]); wattron(edit, interface_color_pair[LINE_NUMBER]);
#ifndef NANO_TINY #ifndef NANO_TINY
if (ISSET(SOFTWRAP) && startpos >= editwincols) if (ISSET(SOFTWRAP) && from_x >= editwincols)
mvwprintw(edit, line, 0, "%*s", margin - 1, " "); mvwprintw(edit, line, 0, "%*s", margin - 1, " ");
else else
#endif #endif
@ -2373,7 +2373,7 @@ void edit_draw(filestruct *fileptr, const char *converted, int
* last match. Even though two matches may overlap, we * last match. Even though two matches may overlap, we
* want to ignore them, so that we can highlight e.g. C * want to ignore them, so that we can highlight e.g. C
* strings correctly. */ * strings correctly. */
while (k < endpos) { while (k < till_x) {
/* Note the fifth parameter to regexec(). It says /* Note the fifth parameter to regexec(). It says
* not to match the beginning-of-line character * not to match the beginning-of-line character
* unless k is zero. If regexec() returns * unless k is zero. If regexec() returns
@ -2391,17 +2391,17 @@ void edit_draw(filestruct *fileptr, const char *converted, int
/* Skip over a zero-length regex match. */ /* Skip over a zero-length regex match. */
if (startmatch.rm_so == startmatch.rm_eo) if (startmatch.rm_so == startmatch.rm_eo)
startmatch.rm_eo++; startmatch.rm_eo++;
else if (startmatch.rm_so < endpos && else if (startmatch.rm_so < till_x &&
startmatch.rm_eo > startpos) { startmatch.rm_eo > from_x) {
x_start = (startmatch.rm_so <= startpos) ? 0 : x_start = (startmatch.rm_so <= from_x) ? 0 :
strnlenpt(fileptr->data, strnlenpt(fileptr->data,
startmatch.rm_so) - start; startmatch.rm_so) - from_col;
index = actual_x(converted, x_start); index = actual_x(converted, x_start);
paintlen = actual_x(converted + index, paintlen = actual_x(converted + index,
strnlenpt(fileptr->data, strnlenpt(fileptr->data,
startmatch.rm_eo) - start - x_start); startmatch.rm_eo) - from_col - x_start);
assert(0 <= x_start && 0 <= paintlen); assert(0 <= x_start && 0 <= paintlen);
@ -2427,10 +2427,10 @@ void edit_draw(filestruct *fileptr, const char *converted, int
} else if (fileptr->multidata[varnish->id] == CBEGINBEFORE) { } else if (fileptr->multidata[varnish->id] == CBEGINBEFORE) {
regexec(varnish->end, fileptr->data, 1, &endmatch, 0); regexec(varnish->end, fileptr->data, 1, &endmatch, 0);
/* If the coloured part is scrolled off, skip it. */ /* If the coloured part is scrolled off, skip it. */
if (endmatch.rm_eo <= startpos) if (endmatch.rm_eo <= from_x)
goto tail_of_loop; goto tail_of_loop;
paintlen = actual_x(converted, strnlenpt(fileptr->data, paintlen = actual_x(converted, strnlenpt(fileptr->data,
endmatch.rm_eo) - start); endmatch.rm_eo) - from_col);
mvwaddnstr(edit, line, margin, converted, paintlen); mvwaddnstr(edit, line, margin, converted, paintlen);
goto tail_of_loop; goto tail_of_loop;
} }
@ -2508,7 +2508,7 @@ void edit_draw(filestruct *fileptr, const char *converted, int
/* If no end was found, or it is too early, next step. */ /* If no end was found, or it is too early, next step. */
if (end_line == NULL) if (end_line == NULL)
goto step_two; goto step_two;
if (end_line == fileptr && endmatch.rm_eo <= startpos) { if (end_line == fileptr && endmatch.rm_eo <= from_x) {
fileptr->multidata[varnish->id] = CBEGINBEFORE; fileptr->multidata[varnish->id] = CBEGINBEFORE;
goto step_two; goto step_two;
} }
@ -2525,7 +2525,7 @@ void edit_draw(filestruct *fileptr, const char *converted, int
goto tail_of_loop; goto tail_of_loop;
} else { } else {
paintlen = actual_x(converted, strnlenpt(fileptr->data, paintlen = actual_x(converted, strnlenpt(fileptr->data,
endmatch.rm_eo) - start); endmatch.rm_eo) - from_col);
mvwaddnstr(edit, line, margin, converted, paintlen); mvwaddnstr(edit, line, margin, converted, paintlen);
fileptr->multidata[varnish->id] = CBEGINBEFORE; fileptr->multidata[varnish->id] = CBEGINBEFORE;
#ifdef DEBUG #ifdef DEBUG
@ -2545,9 +2545,9 @@ void edit_draw(filestruct *fileptr, const char *converted, int
startmatch.rm_so += start_col; startmatch.rm_so += start_col;
startmatch.rm_eo += start_col; startmatch.rm_eo += start_col;
x_start = (startmatch.rm_so <= startpos) ? x_start = (startmatch.rm_so <= from_x) ?
0 : strnlenpt(fileptr->data, 0 : strnlenpt(fileptr->data,
startmatch.rm_so) - start; startmatch.rm_so) - from_col;
index = actual_x(converted, x_start); index = actual_x(converted, x_start);
@ -2562,11 +2562,11 @@ void edit_draw(filestruct *fileptr, const char *converted, int
/* There is an end on this line. But does /* There is an end on this line. But does
* it appear on this page, and is the match * it appear on this page, and is the match
* more than zero characters long? */ * more than zero characters long? */
if (endmatch.rm_eo > startpos && if (endmatch.rm_eo > from_x &&
endmatch.rm_eo > startmatch.rm_so) { endmatch.rm_eo > startmatch.rm_so) {
paintlen = actual_x(converted + index, paintlen = actual_x(converted + index,
strnlenpt(fileptr->data, strnlenpt(fileptr->data,
endmatch.rm_eo) - start - x_start); endmatch.rm_eo) - from_col - x_start);
mvwaddnstr(edit, line, x_start + margin, mvwaddnstr(edit, line, x_start + margin,
converted + index, paintlen); converted + index, paintlen);
@ -2634,28 +2634,28 @@ void edit_draw(filestruct *fileptr, const char *converted, int
mark_order(&top, &top_x, &bot, &bot_x, NULL); mark_order(&top, &top_x, &bot, &bot_x, NULL);
if (top->lineno < fileptr->lineno || top_x < startpos) if (top->lineno < fileptr->lineno || top_x < from_x)
top_x = startpos; top_x = from_x;
if (bot->lineno > fileptr->lineno || bot_x > endpos) if (bot->lineno > fileptr->lineno || bot_x > till_x)
bot_x = endpos; bot_x = till_x;
/* Only paint if the marked bit of fileptr is on this page. */ /* Only paint if the marked bit of fileptr is on this page. */
if (top_x < endpos && bot_x > startpos) { if (top_x < till_x && bot_x > from_x) {
assert(startpos <= top_x); assert(from_x <= top_x);
/* x_start is the expanded location of the beginning of the /* x_start is the expanded location of the beginning of the
* mark minus the beginning of the page. */ * mark minus the beginning of the page. */
x_start = strnlenpt(fileptr->data, top_x) - start; x_start = strnlenpt(fileptr->data, top_x) - from_col;
/* If the end of the mark is off the page, paintlen is -1, /* If the end of the mark is off the page, paintlen is -1,
* meaning that everything on the line gets painted. * meaning that everything on the line gets painted.
* Otherwise, paintlen is the expanded location of the end * Otherwise, paintlen is the expanded location of the end
* of the mark minus the expanded location of the beginning * of the mark minus the expanded location of the beginning
* of the mark. */ * of the mark. */
if (bot_x >= endpos) if (bot_x >= till_x)
paintlen = -1; paintlen = -1;
else else
paintlen = strnlenpt(fileptr->data, bot_x) - (x_start + start); paintlen = strnlenpt(fileptr->data, bot_x) - (x_start + from_col);
/* If x_start is before the beginning of the page, shift /* If x_start is before the beginning of the page, shift
* paintlen x_start characters to compensate, and put * paintlen x_start characters to compensate, and put