[Mew-dist 05561] Re: b47

Shun-ichi GOTO gotoh at example.com
1998年 7月 16日 (木) 23:01:44 JST


後藤@太陽計測です

#Subject: のエンコードの話しで、もう1件

>>>>> From: Kazu Yamamoto (山本和彦) <kazu at example.com>
> 詳しくは別のメールで書きますが、このバージョンではヘッダの符号化が厳密
> に RFC 2047 に添っています。(添っているといいな。うん。^^;)


mew-header-skip-prefixというコードが追加されたようで、
"Re: " など、これに該当する部分はスキップした後、その後ろの文字列を
問答無用でエンコードしているようですが、これはちょっと。。。(^^;


たとえば以下のようなSubject: のメールを書くとちょっとイヤです。(;_;)

Subject: Re: [Mailing-List:1234] What is 漢字?

これはこのように↓[Mailing... も含めてエンコードされます

Subject: Re: =?iso-2022-jp?B?W01haWxpbmctTGlzdDoxMjM0XSBXaGF0IGlzIBskQjRBO3obKEI/?=

[Mailing...]がエンコードされてしまうのは、直接的にはmew-header-skip-prefix
にてregexpに ':' が含まれていないのが原因ですので、
せめてこんなふうにしてはいかがでしょうか。

(defun mew-header-skip-prefix ()
  (while (or (looking-at "\\(Re\\|Fw\\|Forward\\):[ \t]+")
             (looking-at "[[(}][a-zA-Z0-9-+_ :]+[])}][ \t]+"))
    (goto-char (match-end 0))))

また、skipという考え方を使用するのであれば、"Re:"や"Fw:"や"[mew-dist 1234]"
といった文字列ばかりを特別扱いする理由がわかりません。
ASCIIはみなskipするのではまずいのでしょうか?

たとえばこんなかんじで。。。
(defun mew-header-skip-prefix ()
  (if (looking-at "[ \t\040-\177]+")
      (goto-char (match-end 0))))


あ〜んど、このケースでは一行が 76 columnを超えているので RFC-2047に
そぐわないのでは?

# [RFC-2047]
#  2. Syntax of encoded-words
#   ....
#   While there is no limit to the length of a multiple-line header
#   field, each line of a header field that contains one or more
#   'encoded-word's is limited to 76 characters.


現状の実装枠内で76 columnを超えないようにするというのならば、
mew-header-encode-stringとして以下のようなコードはどうでしょうか。

#アルゴリズムもなにもなく、最長から初めて、望みの長さに収まるまで短く
#しながらエンコードし続けます。
#呼び出し時、col には (length "Subject: ")などを与えます。
#ダサイですが、一例として(^^;

(defun mew-header-encode-string (str &optional col)
  ""
  (let ((pre str)
	(post "")
	(ret nil)
	maxlen eword)
    (while (< 0 (length pre))
      (setq maxlen (- 76 (or col 1)))
      (while (and pre 
		  (< maxlen (length (setq eword (mew-header-encode pre)))))
	(if (string-match "\\(.*\\)\\(.\\)$" pre)
	    (setq post (concat (mew-match 2 pre) post)
		  pre (mew-match 1 pre))
	  (setq pre nil)))
      (if pre
	  (setq ret (cons eword ret))
	(setq ret (cons "" ret)))
      (setq pre post
	    post ""
	    col nil))
    (nreverse ret)))



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








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