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}