nano

nano with my custom patches
git clone git://bsandro.tech/nano
Log | Files | Refs | README | LICENSE

commit 311a7138b28638286693554cb8dac5b50175dd76
parent 0ac04347d58818174757ce2bc182564adb9ea017
Author: David Lawrence Ramsey <pooka109@gmail.com>
Date:   Wed, 26 Dec 2018 12:55:39 -0600

tweaks: adapt find_paragraph()/justify_paragraph() for multiple quotes

Instead of passing 'quote_len' to these functions, calculate it directly
in them.

This will be needed when the justifying of marked text is added.  When
unmarked text is justified, it is a single paragraph and by definition
has a uniform quoting part.  But marked text may be a jumble of lines
that have different quoting parts.

Diffstat:
Msrc/text.c | 38+++++++++++++++++++-------------------
1 file changed, 19 insertions(+), 19 deletions(-)

diff --git a/src/text.c b/src/text.c @@ -1849,10 +1849,9 @@ bool inpar(const filestruct *const line) /* 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 *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) + * return in firstline the first line of the paragraph, + * and in *parlen the length of the paragraph. */ +bool find_paragraph(filestruct **firstline, size_t *const parlen) { filestruct *line = *firstline; /* The line of the current paragraph we're searching in. */ @@ -1870,21 +1869,22 @@ bool find_paragraph(filestruct **firstline, if (!inpar(line)) return FALSE; - /* We found a paragraph; determine length of quoting and number of lines. */ - *quotelen = quote_length((*firstline)->data); + /* We found a paragraph; determine number of lines. */ *parlen = line->lineno - (*firstline)->lineno + 1; return TRUE; } -/* Wrap all lines of the paragraph (that starts at *line, consists of - * par_len lines, and has quote_len bytes of quoting) so they all fit +/* Wrap all lines of the paragraph (that starts at *line, and consists of + * par_len lines) so they all fit * within the wrap_at target width. */ -void justify_paragraph(filestruct **line, size_t quote_len, size_t par_len) +void justify_paragraph(filestruct **line, size_t par_len) { filestruct *sampleline; /* The line from which the indentation is copied -- either * the first and only or the second line of the paragraph. */ + size_t quote_len; + /* Length of the quote part. */ size_t lead_len; /* Length of the quote part plus the indentation part. */ ssize_t break_pos; @@ -1896,6 +1896,7 @@ void justify_paragraph(filestruct **line, size_t quote_len, size_t par_len) sampleline = (par_len == 1 ? *line : (*line)->next); /* Copy the leading part (quoting + indentation) of the sample line. */ + quote_len = quote_length(sampleline->data); lead_len = quote_len + indent_length(sampleline->data + quote_len); lead_string = mallocstrncpy(NULL, sampleline->data, lead_len + 1); lead_string[lead_len] = '\0'; @@ -1906,8 +1907,9 @@ void justify_paragraph(filestruct **line, size_t quote_len, size_t par_len) filestruct *next_line = (*line)->next; size_t line_len = strlen((*line)->data); size_t next_line_len = strlen(next_line->data); - - lead_len = quote_len + indent_length(next_line->data + quote_len); + size_t next_quote_len = quote_length(next_line->data); + size_t next_lead_len = next_quote_len + + indent_length(next_line->data + next_quote_len); /* We're just about to tack the next line onto this one. If * this line isn't empty, make sure it ends in a space. */ @@ -1918,8 +1920,8 @@ void justify_paragraph(filestruct **line, size_t quote_len, size_t par_len) } (*line)->data = charealloc((*line)->data, - line_len + next_line_len - lead_len + 1); - strcat((*line)->data, next_line->data + lead_len); + line_len + next_line_len - next_lead_len + 1); + strcat((*line)->data, next_line->data + next_lead_len); unlink_node(next_line); par_len--; @@ -1974,8 +1976,6 @@ void justify_paragraph(filestruct **line, size_t quote_len, size_t par_len) * full_justify is TRUE. */ void do_justify(bool full_justify) { - size_t quote_len; - /* Length of the quote part of the current paragraph. */ size_t par_len; /* Number of lines in the current paragraph. */ filestruct *first_par_line; @@ -2011,7 +2011,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, &quote_len, &par_len)) { + if (!find_paragraph(&openfile->current, &par_len)) { openfile->current_x = strlen(openfile->filebot->data); refresh_needed = TRUE; return; @@ -2066,12 +2066,12 @@ void do_justify(bool full_justify) jusline = cutbuffer; /* Justify the current paragraph. */ - justify_paragraph(&jusline, quote_len, par_len); + justify_paragraph(&jusline, par_len); /* When justifying the entire buffer, find and justify all paragraphs. */ if (full_justify) { - while (find_paragraph(&jusline, &quote_len, &par_len)) { - justify_paragraph(&jusline, quote_len, par_len); + while (find_paragraph(&jusline, &par_len)) { + justify_paragraph(&jusline, par_len); if (jusline->next == NULL) break;