#ifndef HUSH_UTF8_H
#define HUSH_UTF8_H
/* Byte length of the UTF-8 codepoint starting at text[pos], clamped so it never runs past `len`. */
static inline int utf8_next_len(const char *text, int pos, int len) {
unsigned char c = (unsigned char)text[pos];
int n;
if ((c & 0x80) == 0x00) n = 1;
else if ((c & 0xE0) == 0xC0) n = 2;
else if ((c & 0xF0) == 0xE0) n = 3;
else if ((c & 0xF8) == 0xF0) n = 4;
else n = 1;
if (pos + n > len) n = len - pos;
return n;
}
/* Byte offset of the start of the codepoint immediately before `pos`. */
static inline int utf8_prev_start(const char *text, int pos) {
int p = pos - 1;
while (p > 0 && ((unsigned char)text[p] & 0xC0) == 0x80) p--;
return p;
}
#endif