diff options
| author | Matthias Melcher <github@matthiasm.com> | 2023-01-20 16:13:00 +0100 |
|---|---|---|
| committer | Matthias Melcher <github@matthiasm.com> | 2023-01-20 16:13:00 +0100 |
| commit | 2c595e8ddec759fb94bf1b06d21dada3a1b70978 (patch) | |
| tree | 35aaa548a6363327492796769b5b20cca729fa47 | |
| parent | cd5301ac37cf05440ae3cff03dc3fdcea15af68d (diff) | |
STR 2822: function to count bytes in a UTF-8 string
| -rw-r--r-- | FL/fl_utf8.h | 3 | ||||
| -rw-r--r-- | src/fl_utf8.cxx | 22 |
2 files changed, 25 insertions, 0 deletions
diff --git a/FL/fl_utf8.h b/FL/fl_utf8.h index 7a7489b38..41e59c648 100644 --- a/FL/fl_utf8.h +++ b/FL/fl_utf8.h @@ -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); diff --git a/src/fl_utf8.cxx b/src/fl_utf8.cxx index 72589c8e7..2ca9d6b2f 100644 --- a/src/fl_utf8.cxx +++ b/src/fl_utf8.cxx @@ -119,7 +119,29 @@ int fl_utf8len1(char c) /** + 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( |
