Re: [PATCH v2 04/12] utf8.c: add utf8_strnwidth() with the ability to skip ansi sequences

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Nguyễn Thái Ngọc Duy  <pclouds@xxxxxxxxx> writes:

> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx>
> ---
>  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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]