diff options
-rw-r--r-- | utf8.c | 17 | ||||
-rw-r--r-- | utf8.h | 2 |
2 files changed, 13 insertions, 6 deletions
@@ -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) @@ -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); |