aboutsummaryrefslogtreecommitdiffstats
path: root/debian/patches/190_codepage.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/190_codepage.patch')
-rw-r--r--debian/patches/190_codepage.patch196
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);
+ }