1#include "include/pw.h"
2#include "include/pwlib/ctype.h"
3#include "src/types/string/string_internal.h"
4
5[[nodiscard]] bool pw_string_capitalize(PwValuePtr str)
6{
7 if (pw_strlen(str) == 0) {
8 return true;
9 }
10 if (!_pw_string_copy_on_write(str)) {
11 return false;
12 }
13 uint8_t* end_ptr;
14 uint8_t* start_ptr = _pw_string_start_end(str, &end_ptr);
15 uint8_t char_size = str->str_params.char_size;
16
17 char32_t chr = _pw_get_char(start_ptr, char_size);
18 _pw_put_char(start_ptr, pw_char_upper(chr), char_size);
19 start_ptr += char_size;
20
21 while (start_ptr < end_ptr) {
22 chr = _pw_get_char(start_ptr, char_size);
23 _pw_put_char(start_ptr, pw_char_lower(chr), char_size);
24 start_ptr += char_size;
25 }
26 return true;
27}