diff options
Diffstat (limited to 'src/include/mb/pg_wchar.h')
| -rw-r--r-- | src/include/mb/pg_wchar.h | 215 |
1 files changed, 148 insertions, 67 deletions
diff --git a/src/include/mb/pg_wchar.h b/src/include/mb/pg_wchar.h index 6df58708f6..ed1a6e1909 100644 --- a/src/include/mb/pg_wchar.h +++ b/src/include/mb/pg_wchar.h @@ -1,4 +1,4 @@ -/* $Id: pg_wchar.h,v 1.28 2001/08/15 07:07:40 ishii Exp $ */ +/* $Id: pg_wchar.h,v 1.29 2001/09/06 04:57:29 ishii Exp $ */ #ifndef PG_WCHAR_H #define PG_WCHAR_H @@ -12,30 +12,9 @@ #define pfree free #endif -#define SQL_ASCII 0 /* SQL/ASCII */ -#define EUC_JP 1 /* EUC for Japanese */ -#define EUC_CN 2 /* EUC for Chinese */ -#define EUC_KR 3 /* EUC for Korean */ -#define EUC_TW 4 /* EUC for Taiwan */ -#define UNICODE 5 /* Unicode UTF-8 */ -#define MULE_INTERNAL 6 /* Mule internal code */ -#define LATIN1 7 /* ISO-8859 Latin 1 */ -#define LATIN2 8 /* ISO-8859 Latin 2 */ -#define LATIN3 9 /* ISO-8859 Latin 3 */ -#define LATIN4 10 /* ISO-8859 Latin 4 */ -#define LATIN5 11 /* ISO-8859 Latin 5 */ -#define LATIN6 12 /* ISO-8859 Latin 6 */ -#define LATIN7 13 /* ISO-8859 Latin 7 */ -#define LATIN8 14 /* ISO-8859 Latin 8 */ -#define LATIN9 15 /* ISO-8859 Latin 9 */ -#define KOI8 16 /* KOI8-R/U */ -#define WIN 17 /* windows-1251 */ -#define ALT 18 /* Alternativny Variant (MS-DOS CP866) */ -/* followings are for client encoding only */ -#define SJIS 32 /* Shift JIS */ -#define BIG5 33 /* Big5 */ -#define WIN1250 34 /* windows-1250 */ - +/* + * The pg_wchar + */ #ifdef MULTIBYTE typedef unsigned int pg_wchar; @@ -67,12 +46,12 @@ typedef unsigned int pg_wchar; #define LC_ISO8859_5 0x8d /* ISO8859 Latin 5 */ #define LC_JISX0201K 0x89 /* Japanese 1 byte kana */ #define LC_JISX0201R 0x8a /* Japanese 1 byte Roman */ -#define LC_KOI8_R 0x8c /* Cyrillic KOI8-R */ -#define LC_KOI8_U 0x8c /* Cyrillic KOI8-U */ +#define LC_KOI8_R 0x8c /* Cyrillic KOI8-R */ +#define LC_KOI8_U 0x8c /* Cyrillic KOI8-U */ #define LC_GB2312_80 0x91 /* Chinese */ -#define LC_JISX0208 0x92 /* Japanese Kanji */ -#define LC_KS5601 0x93 /* Korean */ -#define LC_JISX0212 0x94 /* Japanese Kanji (JISX0212) */ +#define LC_JISX0208 0x92 /* Japanese Kanji */ +#define LC_KS5601 0x93 /* Korean */ +#define LC_JISX0212 0x94 /* Japanese Kanji (JISX0212) */ #define LC_CNS11643_1 0x95 /* CNS 11643-1992 Plane 1 */ #define LC_CNS11643_2 0x96 /* CNS 11643-1992 Plane 2 */ #define LC_CNS11643_3 0xf6 /* CNS 11643-1992 Plane 3 */ @@ -81,27 +60,129 @@ typedef unsigned int pg_wchar; #define LC_CNS11643_6 0xf9 /* CNS 11643-1992 Plane 6 */ #define LC_CNS11643_7 0xfa /* CNS 11643-1992 Plane 7 */ +/* + * Encoding numeral identificators + * + * WARNING: the order of this table must be same as order + * in the pg_enconv[] (mb/conv.c) and pg_enc2name[] (mb/names.c) array! + * + * If you add some encoding don'y forget check + * PG_ENCODING_[BE|FE]_LAST macros. + * + * The PG_SQL_ASCII is default encoding and must be = 0. + */ +typedef enum pg_enc +{ + PG_SQL_ASCII = 0, /* SQL/ASCII */ + PG_EUC_JP, /* EUC for Japanese */ + PG_EUC_CN, /* EUC for Chinese */ + PG_EUC_KR, /* EUC for Korean */ + PG_EUC_TW, /* EUC for Taiwan */ + PG_UTF8, /* Unicode UTF-8 */ + PG_MULE_INTERNAL, /* Mule internal code */ + PG_LATIN1, /* ISO-8859 Latin 1 */ + PG_LATIN2, /* ISO-8859 Latin 2 */ + PG_LATIN3, /* ISO-8859 Latin 3 */ + PG_LATIN4, /* ISO-8859 Latin 4 */ + PG_LATIN5, /* ISO-8859 Latin 5 */ + PG_KOI8R, /* KOI8-R */ + PG_WIN1251, /* windows-1251 (was: WIN) */ + PG_ALT, /* (MS-DOS CP866) */ + + /* followings are for client encoding only */ + PG_SJIS, /* Shift JIS */ + PG_BIG5, /* Big5 */ + PG_WIN1250, /* windows-1250 */ + + _PG_LAST_ENCODING_ /* mark only */ + +} pg_enc; + +#define PG_ENCODING_BE_LAST PG_ALT +#define PG_ENCODING_FE_LAST PG_WIN1250 + + #ifdef MULTIBYTE -typedef struct + +/* + * Please use these tests before access to pg_encconv_tbl[] + * or to other places... + */ +#define PG_VALID_BE_ENCODING(_enc) \ + ((_enc) >= 0 && (_enc) <= PG_ENCODING_BE_LAST) + +#define PG_ENCODING_IS_CLIEN_ONLY(_enc) \ + (((_enc) > PG_ENCODING_BE_LAST && (_enc) <= PG_ENCODING_FE_LAST) + +#define PG_VALID_ENCODING(_enc) \ + ((_enc) >= 0 && (_enc) < _PG_LAST_ENCODING_) + +/* On FE are possible all encodings + */ +#define PG_VALID_FE_ENCODING(_enc) PG_VALID_ENCODING(_enc) + +/* + * Encoding names with all aliases + */ +typedef struct pg_encname +{ + char *name; + pg_enc encoding; +} pg_encname; + +extern pg_encname pg_encname_tbl[]; +extern unsigned int pg_encname_tbl_sz; + +/* + * Careful: + * + * if (PG_VALID_ENCODING(encoding)) + * pg_enc2name_tbl[ encoding ]; + */ +typedef struct pg_enc2name { - int encoding; /* encoding symbol value */ - char *name; /* encoding name */ - int is_client_only; /* 0: server/client both supported 1: - * client only */ - void (*to_mic) (); /* client encoding to MIC */ - void (*from_mic) (); /* MIC to client encoding */ - void (*to_unicode) (); /* client encoding to UTF-8 */ - void (*from_unicode) (); /* UTF-8 to client encoding */ -} pg_encoding_conv_tbl; - -extern pg_encoding_conv_tbl pg_conv_tbl[]; + char *name; + pg_enc encoding; +} pg_enc2name; + +extern pg_enc2name pg_enc2name_tbl[]; + +extern pg_encname *pg_char_to_encname_struct(const char *name); +extern int pg_char_to_encoding(const char *s); +extern const char *pg_encoding_to_char(int encoding); + +/* + * The backend encoding conversion routines + * Careful: + * + * if (PG_VALID_ENCODING(enc)) + * pg_encconv_tbl[ enc ]->foo + */ +#ifndef FRONTEND +typedef struct pg_enconv +{ + pg_enc encoding; /* encoding identificator */ + void (*to_mic) (); /* client encoding to MIC */ + void (*from_mic) (); /* MIC to client encoding */ + void (*to_unicode) (); /* client encoding to UTF-8 */ + void (*from_unicode) (); /* UTF-8 to client encoding */ +} pg_enconv; + +extern pg_enconv pg_enconv_tbl[]; +extern pg_enconv *pg_get_enconv_by_encoding(int encoding); + +#endif /* FRONTEND */ + +/* + * pg_wchar stuff + */ typedef struct { - int (*mb2wchar_with_len) (); /* convert a multi-byte - * string to a wchar */ - int (*mblen) (); /* returns the length of a multi-byte word */ -} pg_wchar_tbl; + int (*mb2wchar_with_len) (); /* convert a multi-byte + * string to a wchar */ + int (*mblen) (); /* returns the length of a multi-byte word */ +} pg_wchar_tbl; extern pg_wchar_tbl pg_wchar_table[]; @@ -110,25 +191,25 @@ extern pg_wchar_tbl pg_wchar_table[]; */ typedef struct { - unsigned int utf; /* UTF-8 */ - unsigned int code; /* local code */ -} pg_utf_to_local; + unsigned int utf; /* UTF-8 */ + unsigned int code; /* local code */ +} pg_utf_to_local; /* * local code to UTF-8 conversion map */ typedef struct { - unsigned int code; /* local code */ - unsigned int utf; /* UTF-8 */ -} pg_local_to_utf; + unsigned int code; /* local code */ + unsigned int utf; /* UTF-8 */ +} pg_local_to_utf; extern int pg_mb2wchar(const unsigned char *, pg_wchar *); extern int pg_mb2wchar_with_len(const unsigned char *, pg_wchar *, int); extern int pg_char_and_wchar_strcmp(const char *, const pg_wchar *); extern int pg_wchar_strncmp(const pg_wchar *, const pg_wchar *, size_t); extern int pg_char_and_wchar_strncmp(const char *, const pg_wchar *, size_t); -extern size_t pg_wchar_strlen(const pg_wchar *); +extern size_t pg_wchar_strlen(const pg_wchar *); extern int pg_mblen(const unsigned char *); extern int pg_encoding_mblen(int, const unsigned char *); extern int pg_mule_mblen(const unsigned char *); @@ -137,25 +218,25 @@ extern int pg_mbstrlen(const unsigned char *); extern int pg_mbstrlen_with_len(const unsigned char *, int); extern int pg_mbcliplen(const unsigned char *, int, int); extern int pg_mbcharcliplen(const unsigned char *, int, int); -extern pg_encoding_conv_tbl *pg_get_encent_by_encoding(int); -extern int pg_set_client_encoding(int); -extern int pg_get_client_encoding(void); -extern unsigned char *pg_client_to_server(unsigned char *, int); -extern unsigned char *pg_server_to_client(unsigned char *, int); -extern int pg_valid_client_encoding(const char *); -extern pg_encoding_conv_tbl *pg_get_enc_ent(int); + +extern int pg_set_client_encoding(int); +extern int pg_get_client_encoding(void); +extern const char *pg_get_client_encoding_name(void); + +extern void SetDatabaseEncoding(int); +extern int GetDatabaseEncoding(void); +extern const char *GetDatabaseEncodingName(void); + +extern int pg_valid_client_encoding(const char *name); +extern int pg_valid_server_encoding(const char *name); + extern int pg_utf_mblen(const unsigned char *); extern int pg_find_encoding_converters(int, int, void (**)(), void (**)()); extern unsigned char *pg_do_encoding_conversion(unsigned char *, int, void (*)(), void (*)()); -/* internally-used versions of functions. The PG_xxx forms of these - * functions have fmgr-compatible interfaves. - */ -extern const char *pg_encoding_to_char(int); -extern int pg_char_to_encoding(const char *); +extern unsigned char *pg_client_to_server(unsigned char *, int); +extern unsigned char *pg_server_to_client(unsigned char *, int); -extern int GetDatabaseEncoding(void); -extern void SetDatabaseEncoding(int); extern unsigned short BIG5toCNS(unsigned short, unsigned char *); extern unsigned short CNStoBIG5(unsigned short, unsigned char); |
