fix charset handling. [w3m-dev 04279]
This commit is contained in:
@@ -1,3 +1,9 @@
|
|||||||
|
2007-06-07 Hironori Sakamoto <hsaka@mth.biglobe.ne.jp>
|
||||||
|
|
||||||
|
* [w3m-dev 04279] charset
|
||||||
|
* libwc/ces.h, libwc/charset.c: set charset to Shift_JIS, when locale
|
||||||
|
is japanese, jp_JP.PCK, ja_JP.IBM-932, ja_JP.IBM-943, or windows-31j.
|
||||||
|
|
||||||
2007-06-07 Hironori Sakamoto <hsaka@mth.biglobe.ne.jp>
|
2007-06-07 Hironori Sakamoto <hsaka@mth.biglobe.ne.jp>
|
||||||
|
|
||||||
* [w3m-dev 04278] Re: segfault on CentOS4.5/libgc6.8
|
* [w3m-dev 04278] Re: segfault on CentOS4.5/libgc6.8
|
||||||
@@ -8927,4 +8933,4 @@ a * [w3m-dev 03276] compile error on EWS4800
|
|||||||
* release-0-2-1
|
* release-0-2-1
|
||||||
* import w3m-0.2.1
|
* import w3m-0.2.1
|
||||||
|
|
||||||
$Id: ChangeLog,v 1.1000 2007/06/07 10:54:10 inu Exp $
|
$Id: ChangeLog,v 1.1001 2007/06/07 10:59:51 inu Exp $
|
||||||
|
@@ -176,6 +176,7 @@ enum {
|
|||||||
|
|
||||||
#define WC_CES_SHIFT_JIS (WC_CES_E_PRIV2|WC_CES_N_SHIFT_JIS)
|
#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_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_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_GBK (WC_CES_E_PRIV2|WC_CES_N_GBK)
|
||||||
#define WC_CES_CP936 WC_CES_GBK
|
#define WC_CES_CP936 WC_CES_GBK
|
||||||
|
120
libwc/charset.c
120
libwc/charset.c
@@ -32,6 +32,46 @@ static struct {
|
|||||||
{ NULL, 0 }
|
{ 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_ces
|
||||||
wc_guess_charset(char *charset, wc_ces orig)
|
wc_guess_charset(char *charset, wc_ces orig)
|
||||||
{
|
{
|
||||||
@@ -119,6 +159,11 @@ wc_charset_to_ces(char *charset)
|
|||||||
if (n >= 1 && n <= 16 && n != 12)
|
if (n >= 1 && n <= 16 && n != 12)
|
||||||
return (WC_CES_E_ISO_8859 | n);
|
return (WC_CES_E_ISO_8859 | n);
|
||||||
return WC_CES_ISO_8859_1;
|
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;
|
break;
|
||||||
case 'j':
|
case 'j':
|
||||||
@@ -135,6 +180,10 @@ wc_charset_to_ces(char *charset)
|
|||||||
! strncmp(p, "sjis", 4))
|
! strncmp(p, "sjis", 4))
|
||||||
return WC_CES_SHIFT_JIS;
|
return WC_CES_SHIFT_JIS;
|
||||||
break;
|
break;
|
||||||
|
case 'p':
|
||||||
|
if (! strncmp(p, "pck", 3))
|
||||||
|
return WC_CES_SHIFT_JIS;
|
||||||
|
break;
|
||||||
case 'g':
|
case 'g':
|
||||||
if (! strncmp(p, "gb18030", 7) ||
|
if (! strncmp(p, "gb18030", 7) ||
|
||||||
! strncmp(p, "gbk2k", 5))
|
! strncmp(p, "gbk2k", 5))
|
||||||
@@ -210,58 +259,18 @@ wc_charset_to_ces(char *charset)
|
|||||||
return WC_CES_EUC_CN;
|
return WC_CES_EUC_CN;
|
||||||
if (*(p+1) != 'p')
|
if (*(p+1) != 'p')
|
||||||
break;
|
break;
|
||||||
n = atoi(p + 2);
|
p += 2;
|
||||||
switch (n) {
|
if (*p >= '1' && *p <= '9')
|
||||||
case 437: return WC_CES_CP437;
|
return wc_codepage(atoi(p));
|
||||||
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;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case 'w':
|
case 'w':
|
||||||
if (strncmp(p, "windows", 7))
|
if (strncmp(p, "windows", 7))
|
||||||
break;
|
break;
|
||||||
|
p += 7;
|
||||||
if (! strncmp(p, "31j", 3))
|
if (! strncmp(p, "31j", 3))
|
||||||
return WC_CES_CP932;
|
return WC_CES_CP932;
|
||||||
n = atoi(p + 7);
|
if (*p >= '1' && *p <= '9')
|
||||||
switch (n) {
|
return wc_codepage(atoi(p));
|
||||||
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;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@@ -345,18 +354,9 @@ wc_charset_short_to_ces(char *charset)
|
|||||||
case 'c':
|
case 'c':
|
||||||
return WC_CES_ISO_2022_CN;
|
return WC_CES_ISO_2022_CN;
|
||||||
case 'w':
|
case 'w':
|
||||||
n = atoi(p + 1);
|
p++;
|
||||||
switch (n) {
|
if (*p >= '1' && *p <= '9')
|
||||||
case 1250: return WC_CES_CP1250;
|
return wc_codepage(atoi(p));
|
||||||
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;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case 'r':
|
case 'r':
|
||||||
return WC_CES_RAW;
|
return WC_CES_RAW;
|
||||||
@@ -368,7 +368,7 @@ wc_ces
|
|||||||
wc_locale_to_ces(char *locale)
|
wc_locale_to_ces(char *locale)
|
||||||
{
|
{
|
||||||
char *p = locale;
|
char *p = locale;
|
||||||
char buf[6];
|
char buf[8];
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
if (*p == 'C' && *(p+1) == '\0')
|
if (*p == 'C' && *(p+1) == '\0')
|
||||||
@@ -380,7 +380,7 @@ wc_locale_to_ces(char *locale)
|
|||||||
return wc_charset_to_ces(cs);
|
return wc_charset_to_ces(cs);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
for (n = 0; *p && *p != '.' && n < 5; p++) {
|
for (n = 0; *p && *p != '.' && n < 7; p++) {
|
||||||
if ((unsigned char)*p > 0x20)
|
if ((unsigned char)*p > 0x20)
|
||||||
buf[n++] = tolower(*p);
|
buf[n++] = tolower(*p);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user