utf8: add utf8_n_codepoints() for counting complete utf8 codepoints in a string
This commit is contained in:
parent
7b91264852
commit
65ee8660df
|
@ -408,3 +408,22 @@ int utf8_encoded_valid_unichar(const char *str) {
|
|||
|
||||
return len;
|
||||
}
|
||||
|
||||
size_t utf8_n_codepoints(const char *str) {
|
||||
size_t n = 0;
|
||||
|
||||
/* Returns the number of UTF-8 codepoints in this string, or (size_t) -1 if the string is not valid UTF-8. */
|
||||
|
||||
while (*str != 0) {
|
||||
int k;
|
||||
|
||||
k = utf8_encoded_valid_unichar(str);
|
||||
if (k < 0)
|
||||
return (size_t) -1;
|
||||
|
||||
str += k;
|
||||
n++;
|
||||
}
|
||||
|
||||
return n;
|
||||
}
|
||||
|
|
|
@ -59,3 +59,5 @@ static inline bool utf16_is_trailing_surrogate(char16_t c) {
|
|||
static inline char32_t utf16_surrogate_pair_to_unichar(char16_t lead, char16_t trail) {
|
||||
return ((lead - 0xd800) << 10) + (trail - 0xdc00) + 0x10000;
|
||||
}
|
||||
|
||||
size_t utf8_n_codepoints(const char *str);
|
||||
|
|
Loading…
Reference in a new issue