#ifndef _PIUMA_LIB_TEXT_H_
#define _PIUMA_LIB_TEXT_H_

#include "types.h"

typedef u32 utf8_codepoint;

u64  utf8_codepoint_count(const char *s);
bool utf8_is_codepoint_start(const char *s);
u32  utf8_codepoint_bytes(const char *s);
/* If bytes_read returns 0, we either reached the end of the string or there was a decoding error */
utf8_codepoint utf8_extract_codepoint(const char *s, u64 current_index, u32 *bytes_read);
u32 utf8_bytes_to_next_valid_codepoint(const char *s, u64 current_index);
u32 utf8_bytes_to_prev_valid_codepoint(const char *s, u64 current_index);


/* Returns the number of codepoints read. If bytes_read returns 0, there was a decoding error */
u64 utf8_from_string(const char *s, u64 *bytes_read, utf8_codepoint *result, u64 result_size);
/* Returns the number of codepoints written. */
u64 utf8_to_string(utf8_codepoint *codepoints, u64 count, char *result, u64 result_size);

#endif
