X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=utf8.c;h=4efef6faf7c71f3201935f81611806af084c45d4;hb=e4cd6c7a20bfc776086817671d58e09060a8079a;hp=f381a7f137319f636955f2e4b21b8926a442c35e;hpb=eec102524fda2df7d2846e865805ca213119bf10;p=git.git diff --git a/utf8.c b/utf8.c index f381a7f13..4efef6faf 100644 --- a/utf8.c +++ b/utf8.c @@ -62,7 +62,7 @@ static int bisearch(ucs_char_t ucs, const struct interval *table, int max) { * in ISO 10646. */ -static int wcwidth(ucs_char_t ch) +static int git_wcwidth(ucs_char_t ch) { /* * Sorted list of non-overlapping intervals of non-spacing characters, @@ -207,7 +207,7 @@ invalid: return 0; } - return wcwidth(ch); + return git_wcwidth(ch); } int is_utf8(const char *text) @@ -237,12 +237,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)) { @@ -253,10 +260,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++; @@ -264,7 +270,7 @@ void print_wrapped_text(const char *text, int indent, int indent2, int width) } else { putchar('\n'); - text = bol = space + 1; + text = bol = space + isspace(*space); space = NULL; w = indent = indent2; } @@ -277,6 +283,7 @@ void print_wrapped_text(const char *text, int indent, int indent2, int width) text++; } } + return w; } int is_encoding_utf8(const char *name)