diff options
| author | Lucas Perlind <perlindluca@gmail.com> | 2024-10-21 08:29:07 +1100 |
|---|---|---|
| committer | Lucas Perlind <perlindluca@gmail.com> | 2024-10-21 08:29:07 +1100 |
| commit | 66c53a11742eb974607ec20a9c293030cbf3c86e (patch) | |
| tree | 6e1d205f3214d895d567cba157fe84026d087d25 /core/unicode | |
| parent | 16c5c69a4079652e930d897823446b7e7a65bd2f (diff) | |
core/unicode/utf16: add rune_count proc
This returns the number of runes in a u16 slice
Diffstat (limited to 'core/unicode')
| -rw-r--r-- | core/unicode/utf16/utf16.odin | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/core/unicode/utf16/utf16.odin b/core/unicode/utf16/utf16.odin index 6bdd6558a..e2bcf7f68 100644 --- a/core/unicode/utf16/utf16.odin +++ b/core/unicode/utf16/utf16.odin @@ -106,6 +106,18 @@ decode :: proc(d: []rune, s: []u16) -> (n: int) { return } +rune_count :: proc(s: []u16) -> (n: int) { + for i := 0; i < len(s); i += 1 { + c := s[i] + if _surr1 <= c && c < _surr2 && i+1 < len(s) && + _surr2 <= s[i+1] && s[i+1] < _surr3 { + i += 1 + } + n += 1 + } + return +} + decode_to_utf8 :: proc(d: []byte, s: []u16) -> (n: int) { for i := 0; i < len(s); i += 1 { @@ -127,4 +139,4 @@ decode_to_utf8 :: proc(d: []byte, s: []u16) -> (n: int) { n += copy(d[n:], b[:w]) } return -}
\ No newline at end of file +} |