commit ac8bd2a227c400204333e6bf668b750ace5530e1
parent 0d96df7a91d51fd89dac241b78c9c22ddb612305
Author: Benno Schulenberg <bensberg@telfort.nl>
Date: Mon, 26 Nov 2018 10:24:01 +0100
tweaks: elide a parameter -- do the NULL checks in the caller
Determine more directly: the length of the last paragraph line,
and the exit condition for a full justify.
Diffstat:
M | src/text.c | | | 46 | +++++++++++++++++++++++----------------------- |
1 file changed, 23 insertions(+), 23 deletions(-)
diff --git a/src/text.c b/src/text.c
@@ -2028,13 +2028,11 @@ bool inpar(const filestruct *const line)
return (line->data[quote_len + indent_len] != '\0');
}
-/* Determine the beginning, length, and quoting of either the current
- * paragraph (when we're in one) or the next paragraph (when we're not).
+/* Determine the beginning, length, and quoting of the first found paragraph.
* Return TRUE if we found a paragraph, and FALSE otherwise. Furthermore,
- * return in firstline the first line of the paragraph, in touched_eof whether
- * the last line of the buffer is part of the paragraph, and in *quotelen
- * the length of the quoting and in *parlen the length of the paragraph. */
-bool find_paragraph(filestruct **firstline, bool *touched_eof,
+ * return in firstline the first line of the paragraph, in *quotelen the
+ * length of the quoting, and in *parlen the length of the paragraph. */
+bool find_paragraph(filestruct **firstline,
size_t *const quotelen, size_t *const parlen)
{
filestruct *line = *firstline;
@@ -2061,7 +2059,6 @@ bool find_paragraph(filestruct **firstline, bool *touched_eof,
/* We found a paragraph; determine length of quoting and number of lines. */
*quotelen = quote_length((*firstline)->data);
*parlen = line->lineno - (*firstline)->lineno + 1;
- *touched_eof = (line->next == NULL);
return TRUE;
}
@@ -2198,10 +2195,8 @@ void do_justify(bool full_justify)
filestruct *last_par_line = NULL;
/* Will be the line after the last line of the justified
* paragraph(s), if any. */
- bool filebot_inpar;
- /* Whether the text at filebot is part of the current paragraph. */
- bool text_on_last_line = FALSE;
- /* Whether the last line of the buffer contains text. */
+ size_t x_for_last;
+ /* The x position until where to extract the last paragraph line. */
filestruct *was_cutbuffer = cutbuffer;
/* The old cutbuffer, so we can justify in the current cutbuffer. */
@@ -2228,8 +2223,7 @@ void do_justify(bool full_justify)
/* Find the first line of the paragraph(s) to be justified. If the
* search fails, there is nothing to justify, and we will be on the
* last line of the file, so put the cursor at the end of it. */
- if (!find_paragraph(&openfile->current, &filebot_inpar, "e_len,
- &par_len)) {
+ if (!find_paragraph(&openfile->current, "e_len, &par_len)) {
openfile->current_x = strlen(openfile->filebot->data);
refresh_needed = TRUE;
return;
@@ -2248,17 +2242,20 @@ void do_justify(bool full_justify)
/* Set the number of lines to be pulled into the cutbuffer. */
if (full_justify) {
- text_on_last_line = (openfile->filebot->data[0] != '\0');
- jus_len = openfile->filebot->lineno - first_par_line->lineno +
- (text_on_last_line ? 1 : 0);
+ jus_len = openfile->filebot->lineno;
} else
jus_len = par_len;
- /* Move down to just beyond the last line to be extracted. */
- while (jus_len > 0 && last_par_line->next != NULL) {
+ /* Move down to the last line to be extracted. */
+ for (; jus_len > 1; jus_len--)
last_par_line = last_par_line->next;
- jus_len--;
- }
+
+ /* When possible, step one line further; otherwise, to line's end. */
+ if (last_par_line->next != NULL) {
+ last_par_line = last_par_line->next;
+ x_for_last = 0;
+ } else
+ x_for_last = strlen(last_par_line->data);
#ifndef NANO_TINY
add_undo(COUPLE_BEGIN);
@@ -2272,7 +2269,7 @@ void do_justify(bool full_justify)
#endif
/* Do the equivalent of a marked cut. */
extract_buffer(&cutbuffer, &cutbottom, first_par_line, 0, last_par_line,
- filebot_inpar || text_on_last_line ? strlen(last_par_line->data) : 0);
+ x_for_last);
#ifndef NANO_TINY
update_undo(CUT);
#endif
@@ -2285,9 +2282,12 @@ void do_justify(bool full_justify)
/* When justifying the entire buffer, find and justify all paragraphs. */
if (full_justify) {
- while (!filebot_inpar &&
- find_paragraph(&jusline, &filebot_inpar, "e_len, &par_len))
+ while (find_paragraph(&jusline, "e_len, &par_len)) {
justify_paragraph(&jusline, quote_len, par_len);
+
+ if (jusline->next == NULL)
+ break;
+ }
}
#ifndef NANO_TINY