From c082196575e13dd5960031f213b20e2df989ca18 Mon Sep 17 00:00:00 2001 From: Jiang Xin Date: Sat, 9 Feb 2013 14:31:09 +0800 Subject: Add utf8_fprintf helper that returns correct number of columns MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since command usages can be translated, they may include utf-8 encoded strings, and the output in console may not align well any more. This is because strlen() is different from strwidth() on utf-8 strings. A wrapper utf8_fprintf() can help to return the correct number of columns required. Signed-off-by: Jiang Xin Signed-off-by: Nguyễn Thái Ngọc Duy Reviewed-by: Torsten Bögershausen Signed-off-by: Junio C Hamano --- utf8.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'utf8.c') diff --git a/utf8.c b/utf8.c index 5c61bbe113..c7bda66e38 100644 --- a/utf8.c +++ b/utf8.c @@ -430,6 +430,27 @@ int same_encoding(const char *src, const char *dst) return !strcasecmp(src, dst); } +/* + * Wrapper for fprintf and returns the total number of columns required + * for the printed string, assuming that the string is utf8. + */ +int utf8_fprintf(FILE *stream, const char *format, ...) +{ + struct strbuf buf = STRBUF_INIT; + va_list arg; + int columns; + + va_start(arg, format); + strbuf_vaddf(&buf, format, arg); + va_end(arg); + + columns = fputs(buf.buf, stream); + if (0 <= columns) /* keep the error from the I/O */ + columns = utf8_strwidth(buf.buf); + strbuf_release(&buf); + return columns; +} + /* * Given a buffer and its encoding, return it re-encoded * with iconv. If the conversion fails, returns NULL. -- cgit v1.2.3