diff options
author | Geoffrey Thomas <geofft@mit.edu> | 2009-01-30 04:41:28 -0500 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2009-02-04 16:30:43 -0800 |
commit | 8a9391e9440028c03345afa9f21459237a529592 (patch) | |
tree | 2165cc99e28a1f0a9a828a692a5479d8caeecc5c | |
parent | b296e8fce6de6a40a41b5168dfbe735d11255256 (diff) | |
download | git-8a9391e9440028c03345afa9f21459237a529592.tar.gz git-8a9391e9440028c03345afa9f21459237a529592.tar.xz |
utf8: add utf8_strwidth()
I'm about to use this pattern more than once, so make it a common function.
Signed-off-by: Geoffrey Thomas <geofft@mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | utf8.c | 19 | ||||
-rw-r--r-- | utf8.h | 1 |
2 files changed, 20 insertions, 0 deletions
@@ -246,6 +246,25 @@ int utf8_width(const char **start, size_t *remainder_p) return git_wcwidth(ch); } +/* + * Returns the total number of columns required by a null-terminated + * string, assuming that the string is utf8. Returns strlen() instead + * if the string does not look like a valid utf8 string. + */ +int utf8_strwidth(const char *string) +{ + int width = 0; + const char *orig = string; + + while (1) { + if (!string) + return strlen(orig); + if (!*string) + return width; + width += utf8_width(&string, NULL); + } +} + int is_utf8(const char *text) { while (*text) { @@ -5,6 +5,7 @@ typedef unsigned int ucs_char_t; /* assuming 32bit int */ ucs_char_t pick_one_utf8_char(const char **start, size_t *remainder_p); int utf8_width(const char **start, size_t *remainder_p); +int utf8_strwidth(const char *string); int is_utf8(const char *text); int is_encoding_utf8(const char *name); |