[Mew-Win32 01017] Re: mew-fake-cdpでfilename="日本語.XLS"が落ちない

Shun-ichi GOTO gotoh at example.com
1998年 11月 10日 (火) 15:08:39 JST


後藤@太陽計測です

>>>>> From: Hideyuki SHIRAI (白井秀行) <shirai at example.com>
> こんにちは、白井です。
...snip...
> おもいっきり ad hoc + 無理やりですが、対応すると以下のパッチのよう
> になります。

JISがデコードされていないのは今の今まで気がつきませんでした。
mew-header-sanity-check-string がESCをstripしていたせいなのね。

先のメールは読んでいたのですが、どうやってsanity-checkを回避しようか
考えているうちに先にパッチを出されてしまった。(^^;

もう解決しているようですが、でもせっかくこちらでも作ったので
なげてみちゃお。


回避方法としては白井さんのように mew-header-sanity-check-stringを
削った mew-syntax-get-member でもいいですが、それじゃぁ寄生虫として
プライドが許さない(笑) ので、sanity-checkされる前にdecodeして
しまうという手に出てみました。本来ASCIIだけで構成されるはずなので
問題無いはず。

イカパッチ、もとい、以下パッチ (IMEのバカ!)


--- mew-fake-cdp.el	1998/06/01 10:02:23	1.6
+++ mew-fake-cdp.el	1998/11/09 20:51:28
@@ -29,6 +29,9 @@
 (defvar mew-fake-cdp-remove-space nil
   "*Remove space/TAB characters in filename string")
 
+(defvar mew-fake-cdp-allow-non-ascii-coding t
+  "*Decode MIME parameters to support raw-JIS filename.")
+
 (defun mew-fake-cdp-setup ()
   "Setup to use mew-fake-cdp package"
   (let (sym)
@@ -45,6 +48,22 @@
 	))))
 
 
+(defun mew-fake-cdp-decode-string-list (item)
+  "Decode ITEM which is string or list of string.
+Decode only if ITEM is string or element of list is string for each.
+Result is returned as same structure to given ITEM.
+It means, return string if ITEM is string, return list if ITEM is list
+of string, return itselft (ITEM) if anything else."
+  (cond
+   ((stringp item)			; case of siple string (not list)
+    (mew-cs-decode-string item mew-cs-autoconv))
+   ((listp item)			; list of string
+    (mapcar 
+     '(lambda (x) (if (stringp x) (mew-cs-decode-string x mew-cs-autoconv) x))
+     item))
+   (t item)))				; others (nothing to do)
+
+
 (defun mew-fake-cdp-decode-mime-header (&optional dct)
   "Altanative function of mew-mew-decode-mime-header 
 to support un-official attachment filename extraction.
@@ -65,6 +84,11 @@
 	 (cd (mew-syntax-get-cd syntax))
 	 filename
 	 )
+    ;; deocde for raw-JIS filename support.
+    (if mew-fake-cdp-allow-non-ascii-coding
+	(setq ctl  (mew-fake-cdp-decode-string-list ctl)
+	      cdpl (mew-fake-cdp-decode-string-list cdpl)
+	      cd   (mew-fake-cdp-decode-string-list cd)))
     ;; 1. use CDP: filename=
     ;; 2. use CT: name=
     ;; 3. use CD: (optional)
@@ -76,9 +100,6 @@
 			    cd)))
     (if (null filename)
 	()				;nothing to do
-      ;; Kanji conversion from B/Q-Enc. and raw-JIS
-      ;; raw JIS conversion
-      (setq filename (mew-cs-decode-string filename mew-cs-7bit))
       ;; MIME decode
       (while (string-match mew-header-decode-regex filename)
 	(setq filename (concat (substring filename 0 (match-beginning 0))

なぁんて、張り合ってパッチ出してもショーがないですけどね。(^^;

#妙な副作用として、JISでなく、Shift_JISで直接ファイル名指定されて
#いても良くなってしまった。

http://www.imasy.or.jp/~gotoh/mew.html もそのうち更新しておきます。


--- Regards,
 Shun-ichi Goto  <gotoh at example.com>
   R&D Group, TAIYO Corp., Tokyo, JAPAN







Mew-win32 メーリングリストの案内