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
parent
88cf22f804
commit
6103c47f1c
60
src/winio.c
60
src/winio.c
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue