From 094e03b039aeaad759227540491c235b3a83b83a Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Tue, 27 Feb 2007 16:20:31 +0100 Subject: [PATCH] Actually make print_wrapped_text() useful Now, it returns the current column, does not add a newline, and you can pass a negative indent, to indicate that the indent was already printed. With this, you can actually continue in the middle of a paragraph, not having to print everything into a buffer first. Signed-off-by: Johannes Schindelin Signed-off-by: Junio C Hamano --- utf8.c | 17 ++++++++++++----- utf8.h | 2 +- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/utf8.c b/utf8.c index 7c80eeccb4..ea23a6e5dc 100644 --- a/utf8.c +++ b/utf8.c @@ -235,12 +235,19 @@ static void print_spaces(int count) /* * Wrap the text, if necessary. The variable indent is the indent for the * first line, indent2 is the indent for all other lines. + * If indent is negative, assume that already -indent columns have been + * consumed (and no extra indent is necessary for the first line). */ -void print_wrapped_text(const char *text, int indent, int indent2, int width) +int print_wrapped_text(const char *text, int indent, int indent2, int width) { int w = indent, assume_utf8 = is_utf8(text); const char *bol = text, *space = NULL; + if (indent < 0) { + w = -indent; + space = text; + } + for (;;) { char c = *text; if (!c || isspace(c)) { @@ -251,10 +258,9 @@ void print_wrapped_text(const char *text, int indent, int indent2, int width) else print_spaces(indent); fwrite(start, text - start, 1, stdout); - if (!c) { - putchar('\n'); - return; - } else if (c == '\t') + if (!c) + return w; + else if (c == '\t') w |= 0x07; space = text; w++; @@ -275,6 +281,7 @@ void print_wrapped_text(const char *text, int indent, int indent2, int width) text++; } } + return w; } int is_encoding_utf8(const char *name) diff --git a/utf8.h b/utf8.h index a07c5a88af..15db6f1f27 100644 --- a/utf8.h +++ b/utf8.h @@ -5,7 +5,7 @@ int utf8_width(const char **start); int is_utf8(const char *text); int is_encoding_utf8(const char *name); -void print_wrapped_text(const char *text, int indent, int indent2, int len); +int print_wrapped_text(const char *text, int indent, int indent2, int len); #ifndef NO_ICONV char *reencode_string(const char *in, const char *out_encoding, const char *in_encoding); -- 2.11.4.GIT