justify: distinguish between tabs and spaces when comparing indentation
That is: two consecutive lines are considered to belong to separate
paragraphs when the smallest indentation of those two lines is not
character-by-character identical with the corresponding piece of
indentation of the other line.
In other words: if one line is indented with spaces, and a consecutive
line is indented by the same distance but with tabs, they are taken to
belong to different paragraphs: a justification will not merge them.
This fixes https://savannah.gnu.org/bugs/?57404.
Bug existed since version 2.9.8, commit 432a7d77
.
master
parent
9631e858f2
commit
594ef2225f
12
src/text.c
12
src/text.c
|
@ -1751,10 +1751,18 @@ 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
|
||||||
|
* from the indentation of this line, this IS a BOP. */
|
||||||
|
if (prev_dent_len > 0 && indent_len > 0) {
|
||||||
|
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
|
/* If the indentation of the preceding line equals the indentation
|
||||||
* of this line, this is not a BOP. */
|
* of this line, this is not a BOP. */
|
||||||
if (prev_dent_len == indent_len && strncmp(line->prev->data + quote_len,
|
if (prev_dent_len == indent_len)
|
||||||
line->data + quote_len, indent_len) == 0)
|
|
||||||
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. */
|
||||||
|
|
Loading…
Reference in New Issue