wc_ces wc_locale_to_ces(char *locale) { char *p = locale; char buf[8]; int n; if (*p == 'C' && *(p+1) == '\0') return WC_CES_US_ASCII; #ifdef HAVE_LANGINFO_CODESET { char *cs = nl_langinfo(CODESET); if (cs && strcmp(cs, "US-ASCII")) return wc_charset_to_ces(cs); } #endif for (n = 0; *p && *p != '.' && n < 7; p++) { if ((unsigned char)*p > 0x20) buf[n++] = tolower(*p); } buf[n] = 0; if (*p == '.') { p++; if (! strcasecmp(p, "euc")) { switch (buf[0]) { case 'j': WcLocale = WC_LOCALE_JA_JP; break; case 'k': WcLocale = WC_LOCALE_KO_KR; break; case 'z': if (!strcmp(buf, "zh_tw")) WcLocale = WC_LOCALE_ZH_TW; else if (!strcmp(buf, "zh_hk")) WcLocale = WC_LOCALE_ZH_HK; else WcLocale = WC_LOCALE_ZH_CN; break; default: WcLocale = 0; break; } } return wc_charset_to_ces(p); } if (!strcmp(buf, "japanese")) return WC_CES_SHIFT_JIS; if (!strcmp(buf, "zh_tw") || !strcmp(buf, "zh_hk")) return WC_CES_BIG5; for (n = 0; lang_ces_table[n].lang; n++) { if (!strncmp(buf, lang_ces_table[n].lang, 2)) return lang_ces_table[n].ces; } return WC_CES_ISO_8859_1; }
wc_ces wc_guess_charset(char *charset, wc_ces orig) { wc_ces guess; if (charset == NULL || *charset == '\0') return orig; guess = wc_charset_to_ces(charset); return guess ? guess : orig; }
wc_ces wc_guess_charset( char *charset, wc_ces orig ) { int eax; wc_ces guess; if ( charset == 0 || ( charset[0] & 255 ) == 0 ) { orig/*error:'I'*/ = orig; } else { guess = wc_charset_to_ces( charset ); if ( guess != 0 ) { guess/*error:'I'*/ = guess; } else { orig/*error:'I'*/ = orig; } } return guess; }
wc_ces wc_locale_to_ces( char *locale ) { int eax; char *p = locale; char buf[6]; int n; if ( p[0] == 'C' && ( p[1] & 255 ) == 0 ) { return lang_ces_table[ n ].ces; } else { char *cs = nl_langinfo( 14 ); if ( cs != 0 && strcmp( cs, "US-ASCII" ) != 0 ) wc_charset_to_ces( cs ); return lang_ces_table[ n ].ces; else { n = 0; for ( ; ( p[0] & 255 ) != 0 && p[0] != '.' && n <= 4; p++ ) { if ( p[0] < 32 ) { buf[ n ] = tolower( p[0] ); n++; } //p++; } buf[ n ] = 0; if ( p[0] == '.' ) { p++; if ( strcasecmp( p, "euc" ) == 0 ) { switch ( buf[0] ) { case 106: WcLocale = 1; break; case 107: WcLocale = 5; break; case 122: if ( strcmp( buf, "zh_tw" ) == 0 ) WcLocale = 3; else { if ( strcmp( buf, "zh_hk" ) == 0 ) WcLocale = 4; else WcLocale = 2; } break; default: WcLocale = 0; break; } } wc_charset_to_ces( p ); } else { if ( strcmp( buf, "japanese" ) == 0 ) { return lang_ces_table[ n ].ces; } else { if ( strcmp( buf, "zh_tw" ) == 0 || strcmp( buf, "zh_hk" ) == 0 ) { return lang_ces_table[ n ].ces; } else { n = 0; for ( ; lang_ces_table[ n ].lang != 0; n++ ) { if ( strncmp( buf, lang_ces_table[ n ].lang, 2 ) == 0 ) { lang_ces_table[ n ].ces/*error:'I'*/ = lang_ces_table[ n ].ces; break; } else { //n++; } } } } } } }
wc_ces wc_charset_short_to_ces( char *charset ) { int eax; char *p = charset; char buf[16]; wc_ces ces = wc_charset_to_ces( charset ); int n; if ( ces != 0 ) { } else { n = 0; for ( ; ( p[0] & 255 ) != 0 && n <= 14; p++ ) { if ( p[0] < 32 && p[0] != '_' && p[0] != '-' ) { buf[ n ] = tolower( p[0] ); n++; } //p++; } buf[ n ] = 0; p = buf; switch ( p[0] ) { case 101: switch ( p[1] ) { break; default: break; case 106: break; case 99: break; case 116: break; case 107: break; } break; case 106: p++; if ( p[0] == 'o' ) { } else { if ( p[0] == 'p' ) p++; if ( p[0] == '2' ) { } else { if ( p[0] == '3' ) { } else { } } } break; case 115: break; case 103: break; case 98: break; case 104: if ( p[1] == 'k' ) { } else { } break; case 107: if ( p[1] == 'o' ) { } else { } break; case 108: n = atoi( &p[1] ); if ( n >= 1 && n <= 16 && n != 12 ) { } else { } break; case 116: if ( p[1] == 'c' ) { } else { } break; case 110: break; case 118: if ( p[1] == 'p' ) { } else { } break; case 117: if ( p[1] == '7' ) { } else { } break; case 97: break; case 99: break; case 119: n = atoi( &p[1] ); switch ( n ) { case 1250: break; case 1251: break; case 1252: break; case 1253: break; case 1254: break; case 1255: break; case 1256: break; case 1257: break; case 1258: break; default: break; } break; case 114: break; default: break; } } if ( ( 0 ^ 0 ) != 0 ) { __stack_chk_fail( ); } return ces; }
wc_ces wc_charset_short_to_ces(char *charset) { char *p = charset; char buf[16]; wc_ces ces; int n; ces = wc_charset_to_ces(charset); if (ces) return ces; for (n = 0; *p && n < 15; p++) { if ((unsigned char)*p > 0x20 && *p != '_' && *p != '-') buf[n++] = tolower(*p); } buf[n] = 0; p = buf; switch (*p) { case 'e': switch (*(p+1)) { case 'j': return WC_CES_EUC_JP; case 'c': return WC_CES_EUC_CN; case 't': return WC_CES_EUC_TW; case 'k': return WC_CES_EUC_KR; } return WC_CES_EUC_JP; case 'j': p++; if (*p == 'o') return WC_CES_JOHAB; if (*p == 'p') p++; if (*p == '2') return WC_CES_ISO_2022_JP_2; if (*p == '3') return WC_CES_ISO_2022_JP_3; return WC_CES_ISO_2022_JP; case 's': return WC_CES_SHIFT_JIS; case 'g': return WC_CES_EUC_CN; case 'b': return WC_CES_BIG5; case 'h': if (*(p+1) == 'k') return WC_CES_HKSCS; return WC_CES_HZ_GB_2312; case 'k': if (*(p+1) == 'o') return WC_CES_KOI8_R; return WC_CES_ISO_2022_KR; case 'l': n = atoi(p + 1); if (n >= 1 && n <= 16 && n != 12) return (WC_CES_E_ISO_8859 | n); return WC_CES_ISO_8859_1; case 't': if (*(p+1) == 'c') return WC_CES_TCVN_5712; return WC_CES_TIS_620; case 'n': return WC_CES_NEXTSTEP; case 'v': if (*(p+1) == 'p') return WC_CES_VPS; return WC_CES_VISCII_11; #ifdef USE_UNICODE case 'u': if (*(p+1) == '7') return WC_CES_UTF_7; return WC_CES_UTF_8; #endif case 'a': return WC_CES_US_ASCII; case 'c': return WC_CES_ISO_2022_CN; case 'w': p++; if (*p >= '1' && *p <= '9') return wc_codepage(atoi(p)); break; case 'r': return WC_CES_RAW; } return 0; }
wc_ces wc_charset_to_ces(char *charset) { char *p = charset; char buf[16]; int n; if (tolower(*p) == 'x' && *(p+1) == '-') p += 2; for (n = 0; *p && n < 15; p++) { if ((unsigned char)*p > 0x20 && *p != '_' && *p != '-') buf[n++] = tolower(*p); } buf[n] = 0; p = buf; switch (*p) { case 'e': if (! strncmp(p, "euc", 3)) { p += 3; switch (*p) { case 'j': return WC_CES_EUC_JP; case 'c': return WC_CES_EUC_CN; case 't': return WC_CES_EUC_TW; case 'k': return WC_CES_EUC_KR; } switch (WcLocale) { case WC_LOCALE_JA_JP: return WC_CES_EUC_JP; case WC_LOCALE_ZH_CN: return WC_CES_EUC_CN; case WC_LOCALE_ZH_TW: return WC_CES_EUC_TW; case WC_LOCALE_ZH_HK: return WC_CES_EUC_CN; case WC_LOCALE_KO_KR: return WC_CES_EUC_KR; } return WC_CES_EUC_JP; } break; case 'i': if (! strncmp(p, "iso2022", 7)) { p += 7; switch (*p) { case 'j': if (! strncmp(p, "jp2", 3)) return WC_CES_ISO_2022_JP_2; if (! strncmp(p, "jp3", 3)) return WC_CES_ISO_2022_JP_3; return WC_CES_ISO_2022_JP; case 'c': return WC_CES_ISO_2022_CN; case 'k': return WC_CES_ISO_2022_KR; } return WC_CES_ISO_2022_JP; } else if (! strncmp(p, "iso8859", 7)) { n = atoi(p + 7); if (n >= 1 && n <= 16 && n != 12) return (WC_CES_E_ISO_8859 | n); return WC_CES_ISO_8859_1; } else if (! strncmp(p, "ibm", 3)) { p += 3; if (*p >= '1' && *p <= '9') return wc_codepage(atoi(p)); return wc_charset_to_ces(p); } break; case 'j': if (! strncmp(p, "johab", 5)) return WC_CES_JOHAB; if (! strncmp(p, "jis", 3)) return WC_CES_ISO_2022_JP; break; case 's': if (! strncmp(p, "shiftjisx0213", 13) || ! strncmp(p, "sjisx0213", 9)) return WC_CES_SHIFT_JISX0213; if (! strncmp(p, "shiftjis", 8) || ! strncmp(p, "sjis", 4)) return WC_CES_SHIFT_JIS; break; case 'p': if (! strncmp(p, "pck", 3)) return WC_CES_SHIFT_JIS; break; case 'g': if (! strncmp(p, "gb18030", 7) || ! strncmp(p, "gbk2k", 5)) return WC_CES_GB18030; if (! strncmp(p, "gbk", 3)) return WC_CES_GBK; if (! strncmp(p, "gb2312", 6)) return WC_CES_EUC_CN; break; case 'b': if (! strncmp(p, "big5hkscs", 9)) return WC_CES_HKSCS; if (! strncmp(p, "big5", 4)) return WC_CES_BIG5; break; case 'h': if (! strncmp(p, "hz", 2)) return WC_CES_HZ_GB_2312; if (! strncmp(p, "hkscs", 5)) return WC_CES_HKSCS; break; case 'k': if (! strncmp(p, "koi8r", 5)) return WC_CES_KOI8_R; if (! strncmp(p, "koi8u", 5)) return WC_CES_KOI8_U; if (! strncmp(p, "ksx1001", 7)) return WC_CES_EUC_KR; if (! strncmp(p, "ksc5601", 7)) return WC_CES_EUC_KR; break; case 't': if (! strncmp(p, "tis620", 6)) return WC_CES_TIS_620; if (! strncmp(p, "tcvn", 4)) return WC_CES_TCVN_5712; break; case 'n': if (! strncmp(p, "next", 4)) return WC_CES_NEXTSTEP; break; case 'v': if (! strncmp(p, "viet", 4)) { p += 4; if (! strncmp(p, "tcvn", 4)) return WC_CES_TCVN_5712; } if (! strncmp(p, "viscii", 6)) return WC_CES_VISCII_11; if (! strncmp(p, "vps", 3)) return WC_CES_VPS; break; case 'u': #ifdef USE_UNICODE if (! strncmp(p, "utf8", 4)) return WC_CES_UTF_8; if (! strncmp(p, "utf7", 4)) return WC_CES_UTF_7; #endif if (! strncmp(p, "uhc", 3)) return WC_CES_UHC; if (! strncmp(p, "ujis", 4)) return WC_CES_EUC_JP; if (! strncmp(p, "usascii", 7)) return WC_CES_US_ASCII; break; case 'a': if (! strncmp(p, "ascii", 5)) return WC_CES_US_ASCII; break; case 'c': if (! strncmp(p, "cngb", 4)) return WC_CES_EUC_CN; if (*(p+1) != 'p') break; p += 2; if (*p >= '1' && *p <= '9') return wc_codepage(atoi(p)); break; case 'w': if (strncmp(p, "windows", 7)) break; p += 7; if (! strncmp(p, "31j", 3)) return WC_CES_CP932; if (*p >= '1' && *p <= '9') return wc_codepage(atoi(p)); break; } return 0; }