Browse Source

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 <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
maint
Johannes Schindelin 18 years ago committed by Junio C Hamano
parent
commit
094e03b039
  1. 17
      utf8.c
  2. 2
      utf8.h

17
utf8.c

@ -235,12 +235,19 @@ static void print_spaces(int count) @@ -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) @@ -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) @@ -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)

2
utf8.h

@ -5,7 +5,7 @@ int utf8_width(const char **start); @@ -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);

Loading…
Cancel
Save