[w3m-dev 04279] charset
[email protected] (Hironori SAKAMOTO) Wed, 6 Jun 2007 21:28:56 +0900
| Newsgroups | gmane.comp.web.w3m.devel |
|---|---|
| Message-ID | <[email protected]> |
$B:dK\$G$9!#(B w3m $BO"MmD"$G(B($B?tG/A0$K(B)$B;XE&$,$"$C$?(B charset $B$,$i$_$N=$@5$G$9!#(B locale $B$,(B japanese, jp_JP.PCK, ja_JP.IBM-932, ja_JP.IBM-943 $B$^$?$O(B charset $B$,(B windows-31j $B$N;~$K(B Shift_JIS $B$K$J$k$h$&$K$7$^$7$?!#(B (japanese, windows-31j $B$K$D$$$F$O%P%0=$@5(B) # $B$^$"LdBj$K$J$k$3$H$O$[$H$s$I$J$$$H;W$&$s$G$9$1$l$I$M!#(B ----------------------------------- $B:dK\(B $B9@B'(B <[email protected]> --- libwc/ces.h.orig Wed Sep 24 10:52:50 2003 +++ libwc/ces.h Wed Jun 6 16:37:24 2007 @@ -176,6 +176,7 @@ #define WC_CES_SHIFT_JIS (WC_CES_E_PRIV2|WC_CES_N_SHIFT_JIS) #define WC_CES_CP932 WC_CES_SHIFT_JIS +#define WC_CES_CP943 WC_CES_SHIFT_JIS #define WC_CES_SHIFT_JISX0213 (WC_CES_E_PRIV2|WC_CES_N_SHIFT_JISX0213) #define WC_CES_GBK (WC_CES_E_PRIV2|WC_CES_N_GBK) #define WC_CES_CP936 WC_CES_GBK --- libwc/charset.c.orig Thu May 24 13:37:01 2007 +++ libwc/charset.c Wed Jun 6 16:58:22 2007 @@ -32,6 +32,46 @@ { NULL, 0 } }; +static wc_ces +wc_codepage(int n) +{ + switch (n) { + case 437: return WC_CES_CP437; + case 737: return WC_CES_CP737; + case 775: return WC_CES_CP775; + case 850: return WC_CES_CP850; + case 852: return WC_CES_CP852; + case 855: return WC_CES_CP855; + case 856: return WC_CES_CP856; + case 857: return WC_CES_CP857; + case 860: return WC_CES_CP860; + case 861: return WC_CES_CP861; + case 862: return WC_CES_CP862; + case 863: return WC_CES_CP863; + case 864: return WC_CES_CP864; + case 865: return WC_CES_CP865; + case 866: return WC_CES_CP866; + case 869: return WC_CES_CP869; + case 874: return WC_CES_CP874; + case 932: return WC_CES_CP932; /* CP932 = Shift_JIS */ + case 936: return WC_CES_CP936; /* CP936 = GBK > EUC_CN */ + case 943: return WC_CES_CP943; /* CP943 = Shift_JIS */ + case 949: return WC_CES_CP949; /* CP949 = UHC > EUC_KR */ + case 950: return WC_CES_CP950; /* CP950 = Big5 */ + case 1006: return WC_CES_CP1006; + case 1250: return WC_CES_CP1250; + case 1251: return WC_CES_CP1251; + case 1252: return WC_CES_CP1252; + case 1253: return WC_CES_CP1253; + case 1254: return WC_CES_CP1254; + case 1255: return WC_CES_CP1255; + case 1256: return WC_CES_CP1256; + case 1257: return WC_CES_CP1257; + case 1258: return WC_CES_CP1258; + } + return 0; +} + wc_ces wc_guess_charset(char *charset, wc_ces orig) { @@ -119,6 +159,11 @@ 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': @@ -135,6 +180,10 @@ ! 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)) @@ -210,58 +259,18 @@ return WC_CES_EUC_CN; if (*(p+1) != 'p') break; - n = atoi(p + 2); - switch (n) { - case 437: return WC_CES_CP437; - case 737: return WC_CES_CP737; - case 775: return WC_CES_CP775; - case 850: return WC_CES_CP850; - case 852: return WC_CES_CP852; - case 855: return WC_CES_CP855; - case 856: return WC_CES_CP856; - case 857: return WC_CES_CP857; - case 860: return WC_CES_CP860; - case 861: return WC_CES_CP861; - case 862: return WC_CES_CP862; - case 863: return WC_CES_CP863; - case 864: return WC_CES_CP864; - case 865: return WC_CES_CP865; - case 866: return WC_CES_CP866; - case 869: return WC_CES_CP869; - case 874: return WC_CES_CP874; - case 932: return WC_CES_CP932; /* CP932 = Shift_JIS */ - case 936: return WC_CES_CP936; /* CP936 = GBK > EUC_CN */ - case 949: return WC_CES_CP949; /* CP949 = UHC > EUC_KR */ - case 950: return WC_CES_CP950; /* CP950 = Big5 */ - case 1006: return WC_CES_CP1006; - case 1250: return WC_CES_CP1250; - case 1251: return WC_CES_CP1251; - case 1252: return WC_CES_CP1252; - case 1253: return WC_CES_CP1253; - case 1254: return WC_CES_CP1254; - case 1255: return WC_CES_CP1255; - case 1256: return WC_CES_CP1256; - case 1257: return WC_CES_CP1257; - case 1258: return WC_CES_CP1258; - } + 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; - n = atoi(p + 7); - switch (n) { - case 1250: return WC_CES_CP1250; - case 1251: return WC_CES_CP1251; - case 1252: return WC_CES_CP1252; - case 1253: return WC_CES_CP1253; - case 1254: return WC_CES_CP1254; - case 1255: return WC_CES_CP1255; - case 1256: return WC_CES_CP1256; - case 1257: return WC_CES_CP1257; - case 1258: return WC_CES_CP1258; - } + if (*p >= '1' && *p <= '9') + return wc_codepage(atoi(p)); break; } return 0; @@ -345,18 +354,9 @@ case 'c': return WC_CES_ISO_2022_CN; case 'w': - n = atoi(p + 1); - switch (n) { - case 1250: return WC_CES_CP1250; - case 1251: return WC_CES_CP1251; - case 1252: return WC_CES_CP1252; - case 1253: return WC_CES_CP1253; - case 1254: return WC_CES_CP1254; - case 1255: return WC_CES_CP1255; - case 1256: return WC_CES_CP1256; - case 1257: return WC_CES_CP1257; - case 1258: return WC_CES_CP1258; - } + p++; + if (*p >= '1' && *p <= '9') + return wc_codepage(atoi(p)); break; case 'r': return WC_CES_RAW; @@ -368,7 +368,7 @@ wc_locale_to_ces(char *locale) { char *p = locale; - char buf[6]; + char buf[8]; int n; if (*p == 'C' && *(p+1) == '\0') @@ -380,7 +380,7 @@ return wc_charset_to_ces(cs); } #endif - for (n = 0; *p && *p != '.' && n < 5; p++) { + for (n = 0; *p && *p != '.' && n < 7; p++) { if ((unsigned char)*p > 0x20) buf[n++] = tolower(*p); }