diff options
author | Junio C Hamano <gitster@pobox.com> | 2008-01-06 19:02:22 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2008-01-06 20:27:35 -0800 |
commit | 396ccf1fcb91f31d5060555cbffc35bf24172a35 (patch) | |
tree | 8fb86e72df7bb26569f81f6c0a1dd12c41be060c | |
parent | 40f162b04b3d5155a7e41d27c9f52383a5fa5a9f (diff) | |
download | git-396ccf1fcb91f31d5060555cbffc35bf24172a35.tar.gz git-396ccf1fcb91f31d5060555cbffc35bf24172a35.tar.xz |
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 <gitster@pobox.com>
-rw-r--r-- | utf8.c | 27 | ||||
-rw-r--r-- | utf8.h | 3 |
2 files changed, 24 insertions, 6 deletions
@@ -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); } @@ -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); |