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

w3m-m17n support (was Re: User specified content type / w3mmee support)



有沢です。
文字に関しては詳しくないので、誤りなどありましたら申し分けないです。

>>>>> In [emacs-w3m : No.00849] 
>>>>>	Hironori Sakamoto <h-saka@lsi.nec.co.jp> wrote:

> とりあえず、-halfdump 時にも -dump と同じ文字コード(-O で指定)で
> 出力するオプション(ext_halfdump)を追加した w3m-m17n-0.19 への
> patch を出しておきますね。

この patch をあてた w3m-m17n を使って、文字コードの変換を Emacs で行わ
ず、w3m-m17n にまかせるようにしてみました。

w3m.el に以下の patch をあてて、(setq w3m-type 'w3m-m17n) としてくださ
い。


問題としては、w3m-m17n の出力コードをどうしようかというのがあります。
w3m-m17n で出力できて、多くの文字集合を表現できて、Emacs が理解できる
などという都合の良い coding-system が見当たらなかったため、デフォルト
では Emacs が utf-8 が使えればそれを、ダメなら iso-2022-jp-2 で出力さ
せています。

utf-8 は良く知らないので置いておきますが(^^;、iso-2022-jp-2 ではかな
り表現できる文字集合が制限されます。特に半角カナが出せないあたり、結構
気になります。

ということで、html の文字コードに応じて w3m-m17n の出力コードを変えら
れるような仕組があると良いかなと思いながらも、個人的には utf-8 で満足
してしまってます(^^;


なお、サンプルの html を http://www.nijino.com/ari/tmp/m17n/ にいくつ
か置いてありますので試用の際にご利用ください。
Index: w3m.el
===================================================================
RCS file: /storage/cvsroot/emacs-w3m/w3m.el,v
retrieving revision 1.299
diff -u -r1.299 w3m.el
--- w3m.el	2001/06/07 01:18:25	1.299
+++ w3m.el	2001/06/07 15:50:35
@@ -129,10 +129,13 @@
   :type '(choice (const :tag "w3m" 'w3m)
 		 (const :tag "w3m with MNC patch" 'w3m-mnc)
 		 (const :tag "w3mmee" 'w3mmee)
+		 (const :tag "w3m-m17n" 'w3m-m17n)
 		 (symbol :tag "other" nil)))
 
 (defcustom w3m-command
-  (if (eq w3m-type 'w3mmee) "w3mmee" "w3m")
+  (cond ((eq w3m-type 'w3mmee) "w3mmee")
+	((eq w3m-type 'w3m-m17n) "w3m-m17n")
+	(t "w3m"))
   "*Name of the executable file of w3m."
   :group 'w3m
   :type 'string)
@@ -182,13 +185,17 @@
   :type 'coding-system)
 
 (defcustom w3m-input-coding-system
-  (if (eq w3m-type 'w3mmee) 'binary 'iso-2022-7bit)
+  (if (memq w3m-type '(w3mmee w3m-m17n)) 'binary 'iso-2022-7bit)
   "*Coding system for write operations to `w3m'."
   :group 'w3m
   :type 'coding-system)
 
 (defcustom w3m-output-coding-system
-  (if (eq w3m-type 'w3mmee) 'ctext 'w3m-euc-japan)
+  (cond ((eq w3m-type 'w3mmee) 'ctext)
+	((eq w3m-type 'w3m-m17n)
+	 (cond ((w3m-find-coding-system 'utf-8) 'utf-8)
+	       (t 'iso-2022-jp-2)))
+	(t 'w3m-euc-japan))
   "*Coding system for read operations of `w3m'."
   :group 'w3m
   :type 'coding-system)
@@ -805,12 +812,17 @@
   "Name of the executable file of w3m. If nil use 'w3m-command'.")
 
 (defconst w3m-halfdump-command-arguments
-  (if (eq w3m-type 'w3mmee)
-      (list "-dump=half-buffer"
-	    '(if charset "-I")
-	    'charset
-	    "-o" "concurrent=0")
-    (list "-halfdump"))
+  (cond ((eq w3m-type 'w3mmee)
+	 (list "-dump=half-buffer"
+	       '(if charset "-I")
+	       'charset
+	       "-o" "concurrent=0"))
+	((eq w3m-type 'w3m-m17n)
+	 (list "-halfdump"
+	       "-o" "ext_halfdump=1"
+	       '(if charset "-I") 'charset
+	       "-O" '(symbol-name w3m-output-coding-system)))
+	(t (list "-halfdump")))
   "Arguments for 'halfdump' execution of w3m.")
 
 (defconst w3m-halfdump-command-common-arguments
@@ -2299,7 +2311,7 @@
 		      (w3m-with-work-buffer
 			(if (string= "text/html" type)
 			    (progn
-			      (unless (eq w3m-type 'w3mmee)
+			      (unless (memq w3m-type '(w3mmee w3m-m17n))
 				(w3m-decode-buffer url content-charset type))
 			      (w3m-rendering-region (point-min) (point-max)
 						    content-charset))
@@ -3198,7 +3210,7 @@
   (interactive "r")
   (save-restriction
     (narrow-to-region start end)
-    (when (eq w3m-type 'w3mmee)
+    (when (memq w3m-type '(w3mmee w3m-m17n))
       (encode-coding-region (point-min) (point-max) w3m-coding-system))
     (setq w3m-current-title
 	  (w3m-rendering-region (point-min) (point-max)))
-- 
有沢 明宏