Go to the documentation of this file.00001
00002 #ifndef UTF8XX_H
00003 #define UTF8XX_H
00004
00005
00023 #include <stdint.h>
00024 #include <string.h>
00025 #include <assert.h>
00026
00027 #ifndef u_int32_t
00028 # define u_int32_t uint32_t
00029 #endif
00030
00031 #ifndef ucs4
00032 typedef u_int32_t ucs4;
00033 #endif
00034
00035 #ifndef uchar
00036 typedef unsigned char uchar;
00037 #endif
00038
00039 #define UTF8_MAXBYTES 4
00040 #define UTF8_MAXBYTES1 5
00041
00042
00043 #include <stdarg.h>
00044
00045 #include <string>
00046 #include <vector>
00047
00049 #define isutf(c) (((c)&0xC0)!=0x80)
00050
00052 typedef std::vector<ucs4> ucs4str;
00053
00055 typedef std::string utf8str;
00056
00058 int u8_seqlen(const utf8str &s, size_t i);
00059
00067 size_t u8_toucs(ucs4str &dst, const utf8str &src);
00068
00070 ucs4str u8_toucs(const utf8str &src);
00071
00077 size_t u8_toutf8(utf8str &dst, const ucs4str &src);
00078
00080 utf8str u8_toutf8(const ucs4str &src);
00081
00085 size_t u8_wc_len(ucs4 ch);
00086
00088 size_t u8_ws_len(const ucs4str &src);
00089
00095 size_t u8_wc_toutf8(utf8str &dst, ucs4 ch);
00096
00098 utf8str u8_wc_toutf8(ucs4 ch);
00099
00100
00102 size_t u8_offset(const utf8str &s, int charnum);
00103
00105 size_t u8_charnum(const utf8str &s, int offset);
00106
00107
00109 ucs4 u8_nextchar(const utf8str &s, size_t *i);
00110
00112 ucs4 u8_nextcharn(const utf8str &s, size_t slen, size_t *i);
00113
00115 size_t u8_strlen(const utf8str &s);
00116
00118 void u8_inc(const utf8str &s, size_t *i);
00119
00121 void u8_dec(const utf8str &s, size_t *i);
00122
00123 #ifdef UTF8XX_C_API
00124
00125
00129 int u8_read_escape_sequence(char *src, u_int32_t *dest);
00130
00133 int u8_escape_wchar(char *buf, int sz, u_int32_t ch);
00134
00136 int u8_unescape(char *buf, int sz, char *src);
00137
00141 int u8_escape(char *buf, int sz, char *src, int escape_quotes);
00142
00144 int octal_digit(char c);
00145 int hex_digit(char c);
00146
00149 char *u8_strchr(char *s, u_int32_t ch, int *charn);
00150
00153 char *u8_memchr(char *s, u_int32_t ch, size_t sz, int *charn);
00154
00155 int u8_is_locale_utf8(char *locale);
00156
00160 int u8_vprintf(char *fmt, va_list ap);
00161 int u8_printf(char *fmt, ...);
00162
00163 #endif
00164
00165 #endif
00166