30 #define MAX_MULTIBYTE_CHAR_LEN 4 41 #define ISSJISHEAD(c) (((c) >= 0x81 && (c) <= 0x9f) || ((c) >= 0xe0 && (c) <= 0xfc)) 42 #define ISSJISTAIL(c) (((c) >= 0x40 && (c) <= 0x7e) || ((c) >= 0x80 && (c) <= 0xfc)) 102 #define LC_ISO8859_1 0x81 103 #define LC_ISO8859_2 0x82 104 #define LC_ISO8859_3 0x83 105 #define LC_ISO8859_4 0x84 106 #define LC_TIS620 0x85 107 #define LC_ISO8859_7 0x86 108 #define LC_ISO8859_6 0x87 109 #define LC_ISO8859_8 0x88 110 #define LC_JISX0201K 0x89 111 #define LC_JISX0201R 0x8a 116 #define LC_KOI8_R 0x8b 117 #define LC_ISO8859_5 0x8c 118 #define LC_ISO8859_9 0x8d 119 #define LC_ISO8859_15 0x8e 123 #define IS_LC1(c) ((unsigned char)(c) >= 0x81 && (unsigned char)(c) <= 0x8d) 129 #define LC_JISX0208_1978 0x90 130 #define LC_GB2312_80 0x91 131 #define LC_JISX0208 0x92 132 #define LC_KS5601 0x93 133 #define LC_JISX0212 0x94 134 #define LC_CNS11643_1 0x95 135 #define LC_CNS11643_2 0x96 136 #define LC_JISX0213_1 0x97 138 #define LC_BIG5_1 0x98 140 #define LC_BIG5_2 0x99 144 #define IS_LC2(c) ((unsigned char)(c) >= 0x90 && (unsigned char)(c) <= 0x99) 150 #define LCPRV1_A 0x9a 151 #define LCPRV1_B 0x9b 152 #define IS_LCPRV1(c) ((unsigned char)(c) == LCPRV1_A || (unsigned char)(c) == LCPRV1_B) 153 #define IS_LCPRV1_A_RANGE(c) \ 154 ((unsigned char)(c) >= 0xa0 && (unsigned char)(c) <= 0xdf) 155 #define IS_LCPRV1_B_RANGE(c) \ 156 ((unsigned char)(c) >= 0xe0 && (unsigned char)(c) <= 0xef) 162 #define LCPRV2_A 0x9c 163 #define LCPRV2_B 0x9d 164 #define IS_LCPRV2(c) ((unsigned char)(c) == LCPRV2_A || (unsigned char)(c) == LCPRV2_B) 165 #define IS_LCPRV2_A_RANGE(c) \ 166 ((unsigned char)(c) >= 0xf0 && (unsigned char)(c) <= 0xf4) 167 #define IS_LCPRV2_B_RANGE(c) \ 168 ((unsigned char)(c) >= 0xf5 && (unsigned char)(c) <= 0xfe) 173 #define LC_SISHENG 0xa0 177 #define LC_VISCII_LOWER 0xa2 179 #define LC_VISCII_UPPER 0xa3 181 #define LC_ARABIC_DIGIT 0xa4 182 #define LC_ARABIC_1_COLUMN 0xa5 183 #define LC_ASCII_RIGHT_TO_LEFT 0xa6 188 #define LC_ARABIC_2_COLUMN 0xa8 193 #define LC_INDIAN_1_COLUMN 0xf0 195 #define LC_TIBETAN_1_COLUMN 0xf1 197 #define LC_UNICODE_SUBSET_2 0xf2 199 #define LC_UNICODE_SUBSET_3 0xf3 201 #define LC_UNICODE_SUBSET 0xf4 203 #define LC_ETHIOPIC 0xf5 204 #define LC_CNS11643_3 0xf6 205 #define LC_CNS11643_4 0xf7 206 #define LC_CNS11643_5 0xf8 207 #define LC_CNS11643_6 0xf9 208 #define LC_CNS11643_7 0xfa 209 #define LC_INDIAN_2_COLUMN 0xfb 211 #define LC_TIBETAN 0xfc 289 #define PG_ENCODING_BE_LAST PG_KOI8U 295 #define PG_VALID_BE_ENCODING(_enc) \ 296 ((_enc) >= 0 && (_enc) <= PG_ENCODING_BE_LAST) 298 #define PG_ENCODING_IS_CLIENT_ONLY(_enc) \ 299 ((_enc) > PG_ENCODING_BE_LAST && (_enc) < _PG_LAST_ENCODING_) 301 #define PG_VALID_ENCODING(_enc) \ 302 ((_enc) >= 0 && (_enc) < _PG_LAST_ENCODING_) 305 #define PG_VALID_FE_ENCODING(_enc) PG_VALID_ENCODING(_enc) 316 #define MAX_CONVERSION_GROWTH 4 325 #define MAX_UNICODE_EQUIVALENT_STRING 16 374 typedef int (*
mbverifier) (
const unsigned char *mbstr,
int len);
506 #define CHECK_ENCODING_CONVERSION_ARGS(srcencoding,destencoding) \ 507 check_encoding_conversion_args(PG_GETARG_INT32(0), \ 508 PG_GETARG_INT32(1), \ 509 PG_GETARG_INT32(4), \ 520 return (c > 0 && c <= 0x10FFFF);
526 return (c >= 0xD800 && c <= 0xDBFF);
532 return (c >= 0xDC00 && c <= 0xDFFF);
538 return ((first & 0x3FF) << 10) + 0x10000 + (second & 0x3FF);
576 const char *from,
pg_wchar *to,
int len);
580 const pg_wchar *from,
char *to,
int len);
585 extern int pg_mblen(
const char *mbstr);
589 extern int pg_mbcliplen(
const char *mbstr,
int len,
int limit);
609 extern int pg_bind_textdomain_codeset(
const char *domainname);
623 extern unsigned short BIG5toCNS(
unsigned short big5,
unsigned char *lc);
624 extern unsigned short CNStoBIG5(
unsigned short cns,
unsigned char lc);
626 extern void UtfToLocal(
const unsigned char *utf,
int len,
632 extern void LocalToUtf(
const unsigned char *iso,
int len,
639 extern bool pg_verifymbstr(
const char *mbstr,
int len,
bool noError);
648 int expected_src_encoding,
649 int expected_dest_encoding);
655 extern void local2local(
const unsigned char *l,
unsigned char *p,
int len,
656 int src_encoding,
int dest_encoding,
const unsigned char *tab);
657 extern void latin2mic(
const unsigned char *l,
unsigned char *p,
int len,
659 extern void mic2latin(
const unsigned char *mic,
unsigned char *p,
int len,
663 const unsigned char *tab);
666 const unsigned char *tab);
669 extern WCHAR *pgwin32_message_to_UTF16(
const char *
str,
int len,
int *utf16len);
int pg_mb2wchar(const char *from, pg_wchar *to)
char * pg_any_to_server(const char *s, int len, int encoding)
#define pg_attribute_noreturn()
void latin2mic_with_table(const unsigned char *l, unsigned char *p, int len, int lc, int encoding, const unsigned char *tab)
int(* mblen_converter)(const unsigned char *mbstr)
int pg_char_to_encoding(const char *name)
const pg_enc2gettext pg_enc2gettext_tbl[]
const pg_wchar_tbl pg_wchar_table[]
void latin2mic(const unsigned char *l, unsigned char *p, int len, int lc, int encoding)
void InitializeClientEncoding(void)
bool pg_utf8_islegal(const unsigned char *source, int length)
const char * GetDatabaseEncodingName(void)
int pg_encoding_mb2wchar_with_len(int encoding, const char *from, pg_wchar *to, int len)
static bool is_valid_unicode_codepoint(pg_wchar c)
unsigned short CNStoBIG5(unsigned short cns, unsigned char lc)
void LocalToUtf(const unsigned char *iso, int len, unsigned char *utf, const pg_mb_radix_tree *map, const pg_local_to_utf_combined *cmap, int cmapsize, utf_local_conversion_func conv_func, int encoding)
static bool is_utf16_surrogate_second(pg_wchar c)
int pg_mb2wchar_with_len(const char *from, pg_wchar *to, int len)
size_t pg_wchar_strlen(const pg_wchar *wstr)
int pg_valid_server_encoding_id(int encoding)
const char * pg_encoding_to_char(int encoding)
int pg_mbcliplen(const char *mbstr, int len, int limit)
int pg_encoding_mblen(int encoding, const char *mbstr)
int pg_database_encoding_max_length(void)
int pg_encoding_dsplen(int encoding, const char *mbstr)
int(* wchar2mb_with_len_converter)(const pg_wchar *from, unsigned char *to, int len)
int pg_valid_server_encoding(const char *name)
char * pg_server_to_client(const char *s, int len)
int pg_char_and_wchar_strncmp(const char *s1, const pg_wchar *s2, size_t n)
mbdisplaylen_converter dsplen
void report_untranslatable_char(int src_encoding, int dest_encoding, const char *mbstr, int len) pg_attribute_noreturn()
mbcharacter_incrementer pg_database_encoding_character_incrementer(void)
void report_invalid_encoding(int encoding, const char *mbstr, int len) pg_attribute_noreturn()
uint32(* utf_local_conversion_func)(uint32 code)
unsigned short BIG5toCNS(unsigned short big5, unsigned char *lc)
struct pg_enc2name pg_enc2name
int(* mb2wchar_with_len_converter)(const unsigned char *from, pg_wchar *to, int len)
void local2local(const unsigned char *l, unsigned char *p, int len, int src_encoding, int dest_encoding, const unsigned char *tab)
int(* mbverifier)(const unsigned char *mbstr, int len)
struct pg_enc2gettext pg_enc2gettext
void SetDatabaseEncoding(int encoding)
int pg_encoding_mbcliplen(int encoding, const char *mbstr, int len, int limit)
int pg_utf_mblen(const unsigned char *s)
int SetClientEncoding(int encoding)
bool pg_verifymbstr(const char *mbstr, int len, bool noError)
void mic2latin_with_table(const unsigned char *mic, unsigned char *p, int len, int lc, int encoding, const unsigned char *tab)
static pg_wchar surrogate_pair_to_codepoint(pg_wchar first, pg_wchar second)
void UtfToLocal(const unsigned char *utf, int len, unsigned char *iso, const pg_mb_radix_tree *map, const pg_utf_to_local_combined *cmap, int cmapsize, utf_local_conversion_func conv_func, int encoding)
int pg_mbstrlen_with_len(const char *mbstr, int len)
int pg_char_and_wchar_strcmp(const char *s1, const pg_wchar *s2)
int pg_verify_mbstr_len(int encoding, const char *mbstr, int len, bool noError)
int PrepareClientEncoding(int encoding)
const char * pg_get_client_encoding_name(void)
int GetMessageEncoding(void)
int pg_wchar_strncmp(const pg_wchar *s1, const pg_wchar *s2, size_t n)
void SetMessageEncoding(int encoding)
char * pg_client_to_server(const char *s, int len)
wchar2mb_with_len_converter wchar2mb_with_len
const pg_enc2name pg_enc2name_tbl[]
static rewind_source * source
int pg_wchar2mb(const pg_wchar *from, char *to)
int pg_mule_mblen(const unsigned char *s)
int GetDatabaseEncoding(void)
int pg_wchar2mb_with_len(const pg_wchar *from, char *to, int len)
int pg_mblen(const char *mbstr)
void mic2latin(const unsigned char *mic, unsigned char *p, int len, int lc, int encoding)
int pg_dsplen(const char *mbstr)
pg_wchar utf8_to_unicode(const unsigned char *c)
int pg_encoding_verifymb(int encoding, const char *mbstr, int len)
int pg_get_client_encoding(void)
bool pg_verify_mbstr(int encoding, const char *mbstr, int len, bool noError)
unsigned char * unicode_to_utf8(pg_wchar c, unsigned char *utf8string)
bool(* mbcharacter_incrementer)(unsigned char *mbstr, int len)
char * pg_server_to_any(const char *s, int len, int encoding)
int pg_valid_client_encoding(const char *name)
void pg_unicode_to_server(pg_wchar c, unsigned char *s)
const char * get_encoding_name_for_icu(int encoding)
void check_encoding_conversion_args(int src_encoding, int dest_encoding, int len, int expected_src_encoding, int expected_dest_encoding)
int pg_encoding_max_length(int encoding)
mb2wchar_with_len_converter mb2wchar_with_len
static bool is_utf16_surrogate_first(pg_wchar c)
bool is_encoding_supported_by_icu(int encoding)
int pg_mbstrlen(const char *mbstr)
int pg_mbcharcliplen(const char *mbstr, int len, int limit)
int(* mbdisplaylen_converter)(const unsigned char *mbstr)
unsigned char * pg_do_encoding_conversion(unsigned char *src, int len, int src_encoding, int dest_encoding)
int pg_encoding_wchar2mb_with_len(int encoding, const pg_wchar *from, char *to, int len)