зеркало из https://github.com/microsoft/git.git
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>
This commit is contained in:
Родитель
b296e8fce6
Коммит
8a9391e944
19
utf8.c
19
utf8.c
|
@ -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) {
|
||||
|
|
1
utf8.h
1
utf8.h
|
@ -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);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче