justify: treat consecutive indentations that look the same as the same

That is: allow tabs and spaces to be mixed when comparing indentation.
When the mix of tabs and spaces pushes the text of a line to the same
column as on a consecutive line, then those two lines are considered
to have the same indentation and thus belong to the same paragraph.

This reverts the previous commit (594ef222), and improves upon how
nano has behaved since version 2.9.8.

This fixes https://savannah.gnu.org/bugs/?57404 differently.
master
Benno Schulenberg 2019-12-17 16:15:51 +01:00
parent 594ef2225f
commit b00c1d6110
1 changed files with 3 additions and 12 deletions

View File

@ -1751,18 +1751,9 @@ bool begpar(const linestruct *const line, int depth)
if (line->prev->data[quote_len + prev_dent_len] == '\0') if (line->prev->data[quote_len + prev_dent_len] == '\0')
return TRUE; return TRUE;
/* If the indentation of the preceding line differs characterwise /* If indentation of this and preceding line are equal, this is not a BOP. */
* from the indentation of this line, this IS a BOP. */ if (wideness(line->prev->data, quote_len + prev_dent_len) ==
if (prev_dent_len > 0 && indent_len > 0) { wideness(line->data, quote_len + indent_len))
size_t lowest = (prev_dent_len < indent_len ? prev_dent_len : indent_len);
if (strncmp(line->prev->data + quote_len, line->data + quote_len, lowest) != 0)
return TRUE;
}
/* If the indentation of the preceding line equals the indentation
* of this line, this is not a BOP. */
if (prev_dent_len == indent_len)
return FALSE; return FALSE;
/* Otherwise, this is a BOP if the preceding line is not. */ /* Otherwise, this is a BOP if the preceding line is not. */