Nguyễn Thái Ngọc Duy <[email protected]> writes:
> Signed-off-by: Nguyễn Thái Ngọc Duy <[email protected]>
> ---
> utf8.c | 20 ++++++++++++++------
> utf8.h | 1 +
> 2 files changed, 15 insertions(+), 6 deletions(-)
>
> diff --git a/utf8.c b/utf8.c
> index 82c2ddf..38322a1 100644
> --- a/utf8.c
> +++ b/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)))
We prefer to avoid assignment in conditionals; please write the
second as something like:
((var = func(...)) != 0)
to clarify that it is not a misspelled comparison.
> + 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)
> diff --git a/utf8.h b/utf8.h
> index 501b2bd..a556932 100644
> --- a/utf8.h
> +++ b/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);
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html