41#ifndef UTF8_UNICODE_UTILITIES
42#define UTF8_UNICODE_UTILITIES
50# define BSTR_PUBLIC __attribute__ ((visibility ("default")))
60#if INT_MAX >= 0x7fffffffUL
62#elif LONG_MAX >= 0x7fffffffUL
65#error This compiler is not supported
69typedef unsigned int cpUcs2;
70#elif USHRT_MAX == 0xFFFF
71typedef unsigned short cpUcs2;
72#elif UCHAR_MAX == 0xFFFF
73typedef unsigned char cpUcs2;
75#error This compiler is not supported
78#define isLegalUnicodeCodePoint(v) \
79 ((((v) < 0xD800L) || ((v) > 0xDFFFL)) && \
80 (((unsigned long)(v)) <= 0x0010FFFFL) && \
81 (((v)|0x1F0001) != 0x1FFFFFL))
91#define utf8IteratorNoMore(it) (!(it) || (it)->next >= (it)->slen)
93BSTR_PUBLIC
void utf8IteratorInit(
struct utf8Iterator *iter,
94 unsigned char *data,
int slen);
95BSTR_PUBLIC
void utf8IteratorUninit(
struct utf8Iterator *iter);
96BSTR_PUBLIC cpUcs4 utf8IteratorGetNextCodePoint(
struct utf8Iterator *iter,
98BSTR_PUBLIC cpUcs4 utf8IteratorGetCurrCodePoint(
struct utf8Iterator *iter,
100BSTR_PUBLIC
int utf8ScanBackwardsForCodePoint(
const unsigned char *msg,
101 int len,
int pos, cpUcs4 *out);