18#define isutf( c ) ( ( ( c ) & 0xC0 ) != 0x80 )
20#define UEOF ( ( uint32_t ) - 1 )
23size_t u8_toucs( uint32_t *dest,
size_t sz,
const char *src,
size_t srcsz );
26size_t u8_toutf8(
char *dest,
size_t sz,
const uint32_t *src,
size_t srcsz );
29size_t u8_wc_toutf8(
char *dest, uint32_t ch );
32size_t u8_offset(
const char *str,
size_t charnum );
35size_t u8_charnum(
const char *s,
size_t offset );
38uint32_t u8_nextchar(
const char *s,
size_t *i );
41uint32_t u8_nextmemchar(
const char *s,
size_t *i );
44void u8_inc(
const char *s,
size_t *i );
47void u8_dec(
const char *s,
size_t *i );
50size_t u8_seqlen(
const char *s );
53size_t u8_charlen( uint32_t ch );
56size_t u8_codingsize( uint32_t *wcstr,
size_t n );
58char read_escape_control_char(
char c );
63size_t u8_read_escape_sequence(
const char *src,
size_t ssz, uint32_t *dest );
66size_t u8_unescape(
char *buf,
size_t sz,
const char *src );
69int octal_digit(
char c );
70int hex_digit(
char c );
74char *u8_strchr(
const char *s, uint32_t ch,
size_t *charn );
78char *u8_memchr(
const char *s, uint32_t ch,
size_t sz,
size_t *charn );
80char *u8_memrchr(
const char *s, uint32_t ch,
size_t sz );
83size_t u8_strlen(
const char *s );
86int u8_isvalid(
const char *str,
size_t length );
90int u8_reverse(
char *dest,
char *src,
size_t len );