Skip to content

Commit

Permalink
print_wrapped_text(): allow hard newlines
Browse files Browse the repository at this point in the history
print_wrapped_text() will insert its own newlines. Up until now, if the
text passed to it contained newlines, they would not be handled properly
(the wrapping got confused after that).

The strategy is to replace a single new-line with a space, but keep double
new-lines so that already-wrapped text with empty lines between paragraphs
will be handled properly.

However, single new-line characters are only handled this way if the
character after it is an alphanumeric character, as per Linus' suggestion.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
  • Loading branch information
Johannes Schindelin authored and Junio C Hamano committed Oct 19, 2009
1 parent e79999b commit ae0b270
Showing 1 changed file with 16 additions and 2 deletions.
18 changes: 16 additions & 2 deletions utf8.c
Original file line number Diff line number Diff line change
Expand Up @@ -310,20 +310,34 @@ int print_wrapped_text(const char *text, int indent, int indent2, int width)
if (!c || isspace(c)) {
if (w < width || !space) {
const char *start = bol;
if (!c && text == start)
return w;
if (space)
start = space;
else
print_spaces(indent);
fwrite(start, text - start, 1, stdout);
if (!c)
return w;
else if (c == '\t')
w |= 0x07;
space = text;
if (c == '\t')
w |= 0x07;
else if (c == '\n') {
space++;
if (*space == '\n') {
putchar('\n');
goto new_line;
}
else if (!isalnum(*space))
goto new_line;
else
putchar(' ');
}
w++;
text++;
}
else {
new_line:
putchar('\n');
text = bol = space + isspace(*space);
space = NULL;
Expand Down

0 comments on commit ae0b270

Please sign in to comment.