зеркало из https://github.com/microsoft/git.git
utf8.c: add utf8_strnwidth() with the ability to skip ansi sequences
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
4247fe7956
Коммит
2bc1e7ecba
20
utf8.c
20
utf8.c
|
@ -266,18 +266,26 @@ int utf8_width(const char **start, size_t *remainder_p)
|
|||
* 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 utf8_strnwidth(const char *string, int len, int skip_ansi)
|
||||
{
|
||||
int width = 0;
|
||||
const char *orig = string;
|
||||
|
||||
while (1) {
|
||||
if (!string)
|
||||
return strlen(orig);
|
||||
if (!*string)
|
||||
return width;
|
||||
if (len == -1)
|
||||
len = strlen(string);
|
||||
while (string && string < orig + len) {
|
||||
int skip;
|
||||
while (skip_ansi &&
|
||||
(skip = display_mode_esc_sequence_len(string)) != 0)
|
||||
string += skip;
|
||||
width += utf8_width(&string, NULL);
|
||||
}
|
||||
return string ? width : len;
|
||||
}
|
||||
|
||||
int utf8_strwidth(const char *string)
|
||||
{
|
||||
return utf8_strnwidth(string, -1, 0);
|
||||
}
|
||||
|
||||
int is_utf8(const char *text)
|
||||
|
|
1
utf8.h
1
utf8.h
|
@ -4,6 +4,7 @@
|
|||
typedef unsigned int ucs_char_t; /* assuming 32bit int */
|
||||
|
||||
int utf8_width(const char **start, size_t *remainder_p);
|
||||
int utf8_strnwidth(const char *string, int len, int skip_ansi);
|
||||
int utf8_strwidth(const char *string);
|
||||
int is_utf8(const char *text);
|
||||
int is_encoding_utf8(const char *name);
|
||||
|
|
Загрузка…
Ссылка в новой задаче