aboutsummaryrefslogtreecommitdiff
path: root/core/unicode
diff options
context:
space:
mode:
authorLucas Perlind <perlindluca@gmail.com>2024-10-21 08:29:07 +1100
committerLucas Perlind <perlindluca@gmail.com>2024-10-21 08:29:07 +1100
commit66c53a11742eb974607ec20a9c293030cbf3c86e (patch)
tree6e1d205f3214d895d567cba157fe84026d087d25 /core/unicode
parent16c5c69a4079652e930d897823446b7e7a65bd2f (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.odin14
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
+}