From: Junio C Hamano Date: Mon, 7 Jan 2008 03:02:22 +0000 (-0800) Subject: utf8: pick_one_utf8_char() X-Git-Tag: v1.5.4-rc3~24 X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=396ccf1fcb91f31d5060555cbffc35bf24172a35;p=git.git utf8: pick_one_utf8_char() utf8_width() function was doing two different things. To pick a valid character from UTF-8 stream, and compute the display width of that character. This splits the former to a separate function pick_one_utf8_char(). Signed-off-by: Junio C Hamano --- diff --git a/utf8.c b/utf8.c index 9efcdb9c0..24d2ec696 100644 --- a/utf8.c +++ b/utf8.c @@ -3,8 +3,6 @@ /* This code is originally from http://www.cl.cam.ac.uk/~mgk25/ucs/ */ -typedef unsigned int ucs_char_t; /* assuming 32bit int */ - struct interval { int first; int last; @@ -153,11 +151,14 @@ static int git_wcwidth(ucs_char_t ch) } /* - * This function returns the number of columns occupied by the character - * pointed to by the variable start. The pointer is updated to point at - * the next character. If it was not valid UTF-8, the pointer is set to NULL. + * Pick one ucs character starting from the location *start points at, + * and return it, while updating the *start pointer to point at the + * end of that character. + * + * If the string was not a valid UTF-8, *start pointer is set to NULL + * and the return value is undefined. */ -int utf8_width(const char **start) +ucs_char_t pick_one_utf8_char(const char **start) { unsigned char *s = (unsigned char *)*start; ucs_char_t ch; @@ -208,6 +209,20 @@ invalid: return 0; } + return ch; +} + +/* + * This function returns the number of columns occupied by the character + * pointed to by the variable start. The pointer is updated to point at + * the next character. If it was not valid UTF-8, the pointer is set to + * NULL. + */ +int utf8_width(const char **start) +{ + ucs_char_t ch = pick_one_utf8_char(start); + if (!*start) + return 0; return git_wcwidth(ch); } diff --git a/utf8.h b/utf8.h index 15db6f1f2..4a7f0464c 100644 --- a/utf8.h +++ b/utf8.h @@ -1,6 +1,9 @@ #ifndef GIT_UTF8_H #define GIT_UTF8_H +typedef unsigned int ucs_char_t; /* assuming 32bit int */ + +ucs_char_t pick_one_utf8_char(const char **start); int utf8_width(const char **start); int is_utf8(const char *text); int is_encoding_utf8(const char *name);