STR 2822: function to count bytes in a UTF-8 string

This commit is contained in:
Matthias Melcher 2023-01-20 16:13:00 +01:00
parent cd5301ac37
commit 2c595e8dde
2 changed files with 25 additions and 0 deletions

View File

@ -56,6 +56,9 @@ FL_EXPORT int fl_utf8len(char c);
/* OD: returns the byte length of the first UTF-8 char sequence (returns +1 if not valid) */
FL_EXPORT int fl_utf8len1(char c);
/* OD: returns the byte length of a UTF-8 text */
FL_EXPORT int fl_utf8strlen(const char *text, int len=-1);
/* OD: returns the number of Unicode chars in the UTF-8 string */
FL_EXPORT int fl_utf_nb_char(const unsigned char *buf, int len);

View File

@ -118,8 +118,30 @@ int fl_utf8len1(char c)
} // fl_utf8len1
/**
Return the length in bytes of a UTF-8 string.
\param[in] text encoded in UTF-8
\param[in] len number of Unicode characters, -1 to test until the end of text
\return number of bytes that make up the Unicode string
\see fl_utf_nb_char(const unsigned char *buf, int len)
*/
int fl_utf8strlen(const char *text, int len)
{
if (len == -1) return (int)strlen(text);
int i, n = 0;
for (i=len; i>0; i--) {
if (*text == 0) return n; // end of string
int nc = fl_utf8len1(*text);
n += nc;
text += nc;
}
return n;
}
/**
Returns the number of Unicode chars in the UTF-8 string.
\see fl_utf8strlen(const char *text, int len)
*/
int
fl_utf_nb_char(