[Date Prev][Date Next][Thread Prev][][Date Index][Thread Index]

Re: User specified content type / w3mmee support



坂本(浩)です。

 >> From: TSUCHIYA Masatoshi <tsuchiya@pine.kuee.kyoto-u.ac.jp>
 >> 白井> P.S.
 >> 白井> 最近、w3m-m17n も使うようになりました。-dump だと大丈夫なのです
 >> 白井> が、-halfdump 時に x0213 が化けるのがちょっとだけ悲しいです。
 >> w3m-m17n だとまた違うコード系で出力されるのでしょうか?

はい。1〜6bytes の可変長コードです。
一応、日本語環境だと EUC-JP (US-ASCII/JISX0208 のみ)の上位互換なのですが、
他の文字集合は 0x80-0x9F を先頭byte として 3〜6bytes で表しています。

例えば、ISO-2022 は (F を終端文字として)
 94文字セット:    0x80 0x80|F 0xA1-0xFE
 96文字セット:    0x81 0x80|F 0xA1-0xFE
 94x94文字セット: 0x82 0x80|F 0xA1-0xFE 0xA1-0xFE
です。
Unicode や Big5,GBK などは少々面倒な持ち方をしています。

とりあえず、-halfdump 時にも -dump と同じ文字コード(-O で指定)で
出力するオプション(ext_halfdump)を追加した w3m-m17n-0.19 への
patch を出しておきますね。
  w3m-m17n -halfdump -o ext_halfdump=1 -O euc-jp
といった感じで使ってください。
# -o pre_conv=1 も追加した方がベターかも。
----------------------------------- 
坂本 浩則 <hsaka@mth.biglobe.ne.jp> 
 http://www2u.biglobe.ne.jp/~hsaka/

--- libwc/wtf.c.orig	Thu Mar 29 01:17:15 2001
+++ libwc/wtf.c	Tue May 22 12:16:46 2001
@@ -436,7 +436,6 @@
 	/* case 0: */
 	    cc.ccs = WC_CCS_US_ASCII;
 	    cc.code = (wc_uint32)' ';
-	    q++;
 	    break;
 	}
     }
--- fm.h.orig	Wed May 16 21:05:18 2001
+++ fm.h	Tue May 22 12:21:10 2001
@@ -729,6 +729,7 @@
 global wc_ces DisplayCharset init(DISPLAY_CHARSET);
 global wc_ces DocumentCharset init(DOCUMENT_CHARSET);
 global wc_ces SystemCharset init(SYSTEM_CHARSET);
+global char ExtHalfdump init(FALSE);
 global char FollowLocale init(TRUE);
 global char UseContentCharset init(TRUE);
 global char SearchConv init(TRUE);
@@ -737,12 +738,14 @@
 #define conv_from_system(x) wc_conv((x), SystemCharset, InnerCharset)->ptr
 #define conv_to_system(x) wc_conv_strict((x), InnerCharset, SystemCharset)->ptr
 #define url_quote_conv(x,c) url_quote(wc_conv_strict((x), InnerCharset, (c))->ptr)
+#define Str_conv_to_halfdump(x) (ExtHalfdump ? wc_Str_conv((x), InnerCharset, DisplayCharset) : (x))
 #else
 #define Str_conv_from_system(x) (x)
 #define Str_conv_to_system(x) (x)
 #define conv_from_system(x) (x)
 #define conv_to_system(x) (x)
 #define url_quote_conv(x,c) url_quote(x)
+#define Str_conv_to_halfdump(x) (x)
 #endif
 global char UseAltEntity init(TRUE);
 global char UseGraphicChar init(FALSE);
--- rc.c.orig	Wed Apr 25 10:09:40 2001
+++ rc.c	Tue May 22 12:20:45 2001
@@ -143,6 +143,7 @@
 #define CMT_DOCUMENT_CHARSET "文書の標準の文字コード"
 #define CMT_AUTO_DETECT      "文書の読み込み時に文字コードの自動判定を行う"
 #define CMT_SYSTEM_CHARSET   "システムの文字コード"
+#define CMT_EXT_HALFDUMP     "表示用文字コードで halfdump の出力を行う"
 #define CMT_FOLLOW_LOCALE    "Locale($LANG) に従ってシステムの文字コードを設定"
 #define CMT_SEARCH_CONV      "検索文字列を文書の文字コードに変換する"
 #define CMT_USE_COMBINING    "結合文字を使う"
@@ -252,6 +253,7 @@
 #define CMT_DOCUMENT_CHARSET "Default document charset"
 #define CMT_AUTO_DETECT      "Automatic charset detect when loading"
 #define CMT_SYSTEM_CHARSET   "System charset"
+#define CMT_EXT_HALFDUMP     "Output halfdump with display charset"
 #define CMT_FOLLOW_LOCALE    "System charset follows locale($LANG)"
 #define CMT_SEARCH_CONV      "Adjust search string for document charset"
 #define CMT_USE_COMBINING    "Use combining characters"
@@ -486,6 +488,7 @@
     {"document_charset", P_CODE, PI_SEL_C, (void *) &DocumentCharset, CMT_DOCUMENT_CHARSET, &document_charset_str},
     {"auto_detect", P_CHARINT, PI_SEL_C, (void *) &WcOption.auto_detect, CMT_AUTO_DETECT, &auto_detect_str},
     {"system_charset", P_CODE, PI_SEL_C, (void *) &SystemCharset, CMT_SYSTEM_CHARSET, &system_charset_str},
+    {"ext_halfdump", P_CHARINT, PI_ONOFF, (void *) &ExtHalfdump, CMT_EXT_HALFDUMP, NULL},
     {"follow_locale", P_CHARINT, PI_ONOFF, (void *) &FollowLocale, CMT_FOLLOW_LOCALE, NULL},
     {"use_combining", P_CHARINT, PI_ONOFF, (void *) &WcOption.use_combining, CMT_USE_COMBINING, NULL},
 #ifdef USE_UNICODE
--- file.c.orig	Wed May 16 21:06:51 2001
+++ file.c	Tue May 22 12:07:43 2001
@@ -1853,12 +1853,12 @@
 	if (buf) {
 	    pushTextLine(buf, lbuf);
 	    if (w3m_backend) {
-		Strcat(backend_halfdump_str, lbuf->line);
+		Strcat(backend_halfdump_str, Str_conv_to_halfdump(lbuf->line));
 		Strcat_char(backend_halfdump_str, '\n');
 	    }
 	}
 	else {
-	    Strfputs(lbuf->line, f);
+	    Strfputs(Str_conv_to_halfdump(lbuf->line), f);
 	    fputc('\n', f);
 	}
 	if (obuf->flag & RB_SPECIAL || obuf->flag & RB_NFLUSHED)
@@ -1874,9 +1874,9 @@
 	if (buf) { \
 	    appendTextLine(buf,(str),0); \
 	    if (w3m_backend) \
-		Strcat(backend_halfdump_str, (str)); \
+		Strcat(backend_halfdump_str, Str_conv_to_halfdump(str)); \
 	} else \
-	    Strfputs((str),f)
+	    Strfputs(Str_conv_to_halfdump(str),f)
 
 	while (*p) {
 	    q = p;