diff options
Diffstat (limited to 'debian/patches/190_codepage.patch')
-rw-r--r-- | debian/patches/190_codepage.patch | 196 |
1 files changed, 196 insertions, 0 deletions
diff --git a/debian/patches/190_codepage.patch b/debian/patches/190_codepage.patch new file mode 100644 index 0000000..8e30d05 --- /dev/null +++ b/debian/patches/190_codepage.patch @@ -0,0 +1,196 @@ +Description: Handling of codepage with wc_codepage + * [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. +Origin: upstream, http://w3m.cvs.sourceforge.net/viewvc/w3m/w3m/ +Author: Hironori Sakamoto <hsaka@mth.biglobe.ne.jp> + +diff -urN w3m-0.5.2.orig/libwc/ces.h w3m/libwc/ces.h +--- w3m-0.5.2.orig/libwc/ces.h 2003-09-23 06:02:23.000000000 +0900 ++++ w3m/libwc/ces.h 2007-06-07 19:59:52.000000000 +0900 +@@ -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 +diff -urN w3m-0.5.2.orig/libwc/charset.c w3m/libwc/charset.c +--- w3m-0.5.2.orig/libwc/charset.c 2007-05-23 21:34:20.000000000 +0900 ++++ w3m/libwc/charset.c 2007-06-07 19:59:52.000000000 +0900 +@@ -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); + } |