| 406 | } |
| 407 | |
| 408 | size_t countUTF8Chars(std::string_view utf8) |
| 409 | { |
| 410 | int count = 0; |
| 411 | |
| 412 | if (!utf8.empty()) |
| 413 | { |
| 414 | const UTF8* source = (const UTF8*)utf8.data(); |
| 415 | const UTF8* sourceEnd = (const UTF8*)utf8.data() + utf8.length(); |
| 416 | while (source != sourceEnd) |
| 417 | { |
| 418 | auto size = getUTF8SequenceSize(source, sourceEnd); |
| 419 | if (size == 0) |
| 420 | { |
| 421 | // Invalid UTF-8 sequence found |
| 422 | return 0; |
| 423 | } |
| 424 | source += size; |
| 425 | ++count; |
| 426 | } |
| 427 | } |
| 428 | |
| 429 | return count; |
| 430 | } |
| 431 | |
| 432 | size_t getUTF8ByteOffset(std::string_view utf8, size_t utf8CharOffset) |
| 433 | { |