]> granicus.if.org Git - postgresql/blob - src/include/mb/pg_wchar.h
Support SET/SHOW/RESET client_encoding and server_encoding even when
[postgresql] / src / include / mb / pg_wchar.h
1 /* $Id: pg_wchar.h,v 1.20 2000/10/25 19:44:43 tgl Exp $ */
2
3 #ifndef PG_WCHAR_H
4 #define PG_WCHAR_H
5
6 #include "postgres.h"
7 #include <sys/types.h>
8
9 #ifdef FRONTEND
10 #define elog(X...)
11 #undef palloc
12 #define palloc malloc
13 #define pfree free
14 #endif
15
16 #define SQL_ASCII 0                             /* SQL/ASCII */
17 #define EUC_JP 1                                /* EUC for Japanese */
18 #define EUC_CN 2                                /* EUC for Chinese */
19 #define EUC_KR 3                                /* EUC for Korean */
20 #define EUC_TW 4                                /* EUC for Taiwan */
21 #define UNICODE 5                               /* Unicode UTF-8 */
22 #define MULE_INTERNAL 6                 /* Mule internal code */
23 #define LATIN1 7                                /* ISO-8859 Latin 1 */
24 #define LATIN2 8                                /* ISO-8859 Latin 2 */
25 #define LATIN3 9                                /* ISO-8859 Latin 3 */
26 #define LATIN4 10                               /* ISO-8859 Latin 4 */
27 #define LATIN5 11                               /* ISO-8859 Latin 5 */
28 #define LATIN6 12                               /* ISO-8859 Latin 6 */
29 #define LATIN7 13                               /* ISO-8859 Latin 7 */
30 #define LATIN8 14                               /* ISO-8859 Latin 8 */
31 #define LATIN9 15                               /* ISO-8859 Latin 9 */
32 #define KOI8   16                               /* KOI8-R */
33 #define WIN    17                               /* windows-1251 */
34 #define ALT    18                               /* Alternativny Variant (MS-DOS CP866) */
35 /* followings are for client encoding only */
36 #define SJIS 32                                 /* Shift JIS */
37 #define BIG5 33                                 /* Big5 */
38 #define WIN1250  34                             /* windows-1250 */
39
40 #ifdef MULTIBYTE
41 typedef unsigned int pg_wchar;
42 #else
43 #define pg_wchar char
44 #endif
45
46 /*
47  * various definitions for EUC
48  */
49 #define SS2 0x8e                                /* single shift 2 */
50 #define SS3 0x8f                                /* single shift 3 */
51
52 /*
53  * various definitions for mule internal code
54  */
55 #define IS_LC1(c)       ((unsigned char)(c) >= 0x81 && (unsigned char)(c) <= 0x8f)
56 #define IS_LCPRV1(c)    ((unsigned char)(c) == 0x9a || (unsigned char)(c) == 0x9b)
57 #define IS_LC2(c)       ((unsigned char)(c) >= 0x90 && (unsigned char)(c) <= 0x99)
58 #define IS_LCPRV2(c)    ((unsigned char)(c) == 0x9c || (unsigned char)(c) == 0x9d)
59
60 /*
61  * leading characters
62  */
63 #define LC_ISO8859_1    0x81    /* ISO8859 Latin 1 */
64 #define LC_ISO8859_2    0x82    /* ISO8859 Latin 2 */
65 #define LC_ISO8859_3    0x83    /* ISO8859 Latin 3 */
66 #define LC_ISO8859_4    0x84    /* ISO8859 Latin 4 */
67 #define LC_ISO8859_5    0x8d    /* ISO8859 Latin 5 */
68 #define LC_JISX0201K    0x89    /* Japanese 1 byte kana */
69 #define LC_JISX0201R    0x8a    /* Japanese 1 byte Roman */
70 #define LC_KOI8_R       0x8c            /* Cyrillic KOI8-R */
71 #define LC_GB2312_80    0x91    /* Chinese */
72 #define LC_JISX0208 0x92                /* Japanese Kanji */
73 #define LC_KS5601       0x93            /* Korean */
74 #define LC_JISX0212 0x94                /* Japanese Kanji (JISX0212) */
75 #define LC_CNS11643_1   0x95    /* CNS 11643-1992 Plane 1 */
76 #define LC_CNS11643_2   0x96    /* CNS 11643-1992 Plane 2 */
77 #define LC_CNS11643_3   0xf6    /* CNS 11643-1992 Plane 3 */
78 #define LC_CNS11643_4   0xf7    /* CNS 11643-1992 Plane 4 */
79 #define LC_CNS11643_5   0xf8    /* CNS 11643-1992 Plane 5 */
80 #define LC_CNS11643_6   0xf9    /* CNS 11643-1992 Plane 6 */
81 #define LC_CNS11643_7   0xfa    /* CNS 11643-1992 Plane 7 */
82
83 #ifdef MULTIBYTE
84 typedef struct
85 {
86         int                     encoding;               /* encoding symbol value */
87         char       *name;                       /* encoding name */
88         int                     is_client_only; /* 0: server/client both supported 1:
89                                                                  * client only */
90         void            (*to_mic) ();   /* client encoding to MIC */
91         void            (*from_mic) (); /* MIC to client encoding */
92         void            (*to_unicode) ();       /* client encoding to UTF-8 */
93         void            (*from_unicode) (); /* UTF-8 to client encoding */
94 }                       pg_encoding_conv_tbl;
95
96 extern pg_encoding_conv_tbl pg_conv_tbl[];
97
98 typedef struct
99 {
100         int             (*mb2wchar_with_len) ();                /* convert a multi-byte
101                                                                                                  * string to a wchar */
102         int                     (*mblen) ();    /* returns the length of a multi-byte word */
103 }                       pg_wchar_tbl;
104
105 extern pg_wchar_tbl pg_wchar_table[];
106
107 typedef struct
108 {
109         unsigned int utf;               /* UTF-8 */
110         unsigned int code;              /* local code */
111         unsigned char encoding;         /* encoding */
112 } pg_utf_to_local;
113
114 typedef struct
115 {
116         unsigned int code;      /* local code */
117         unsigned int utf;               /* UTF-8 */
118 } pg_local_to_utf;
119
120 extern int pg_mb2wchar(const unsigned char *, pg_wchar *);
121 extern int pg_mb2wchar_with_len(const unsigned char *, pg_wchar *, int);
122 extern int      pg_char_and_wchar_strcmp(const char *, const pg_wchar *);
123 extern int      pg_wchar_strncmp(const pg_wchar *, const pg_wchar *, size_t);
124 extern int      pg_char_and_wchar_strncmp(const char *, const pg_wchar *, size_t);
125 extern size_t pg_wchar_strlen(const pg_wchar *);
126 extern int      pg_mblen(const unsigned char *);
127 extern int      pg_mblen_with_encoding(const unsigned char *, int);
128 extern int      pg_encoding_mblen(int, const unsigned char *);
129 extern int      pg_mule_mblen(const unsigned char *);
130 extern int      pg_mic_mblen(const unsigned char *);
131 extern int      pg_mbstrlen(const unsigned char *);
132 extern int      pg_mbstrlen_with_len(const unsigned char *, int);
133 extern int      pg_mbcliplen(const unsigned char *, int, int);
134 extern pg_encoding_conv_tbl *pg_get_encent_by_encoding(int);
135 extern int      pg_set_client_encoding(int);
136 extern int      pg_get_client_encoding(void);
137 extern unsigned char *pg_client_to_server(unsigned char *, int);
138 extern unsigned char *pg_server_to_client(unsigned char *, int);
139 extern int      pg_valid_client_encoding(const char *);
140 extern pg_encoding_conv_tbl *pg_get_enc_ent(int);
141 extern int pg_utf_mblen(const unsigned char *);
142
143 /* internally-used versions of functions.  The PG_xxx forms of these
144  * functions have fmgr-compatible interfaves.
145  */
146 extern const char *pg_encoding_to_char(int);
147 extern int      pg_char_to_encoding(const char *);
148
149 extern int      GetDatabaseEncoding(void);
150 extern void SetDatabaseEncoding(int);
151 extern void SetTemplateEncoding(int);
152 extern int      GetTemplateEncoding(void);
153 extern unsigned short BIG5toCNS(unsigned short, unsigned char *);
154 extern unsigned short CNStoBIG5(unsigned short, unsigned char);
155
156 #endif   /* MULTIBYTE */
157
158 #endif   /* PG_WCHAR_H */