[Mew-dist 05563] Re: b47

Kazu Yamamoto ( 山本和彦 ) kazu at example.com
1998年 7月 16日 (木) 23:34:59 JST


From: Shun-ichi GOTO <gotoh at example.com>
Subject: [Mew-dist 05561] Re: b47
Date: Thu, 16 Jul 1998 23:01:44 +0900

> 問答無用でエンコードしているようですが、これはちょっと。。。(^^;

問答無用といわれると誤解する人もいると思います。一応メーリングリストの
ラベル(?)は飛ばすように努力していますよね。

> [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するのではまずいのでしょうか?

あああ、説明を書く前に聞かれちゃった。なるべく簡単に説明すると、
encoded-word は atom として認識できないといけません。(なぜ構造のない 
text で atom じゃないといけないのか理解できませんが。)

	コメント ()
も
	quote "..."
も認識されない text では、結局 encoded-word は white-space (正確には
linear-white-space) で区切らないといけません。

よって、
	Subject: ASCII 日本語
は
	Subject: ASCII =?....?=
と符号化できますが、
	Subject: ASCII日本語
は
	Subject: =?....?=
とするしかありません。

encoded-word と encoded-word の間の white-space は無視されるという仕様
などと照らし合わせると、結局 Subject: は全体を符号化しろ(white-space 
が無視されるのは分割のため)と言っているように読めます。

全体を符号化すると、"Re: " などがうまく取り扱えなくなりますから、ここ
だけスキップするようにしました。正規表現で、[ \t]+ と white-space を必
ず要求しているのは、encoded-word の前に white-space が来るよう保証する
ためです。

だんだん話が長くなりますが、実はもっと深くまで突き詰めています。

たとえば、
	Subject: motley crue が好き
の motley がウムラウトの場合はどう符号化すればよいかなどです。
(ウムラウトも入力できますが、jp-2 になるので止めます。)

	Subject: =?iso-8859-1?Q?mo... e_= =?iso-2022-jp?B?....?=

と最小の charset で区切るのがいいような気がしますが、

	(1) そもそも latin1 と日本語を同時に扱えるメーラは少ない
		→だったら全体を符号化して jp-2 でいいじゃん
	(2) crue と「が好き」の間に white-space がないと泣きそうだよ
		→やっぱり全体を符号化だ!

となり、結局全体を符号化するのが現実的で実装も綺麗なのです。難しくやる
と 2 パスの処理になりますが、Mew では単純に全体を符号化することにした
ので、1 パスで処理できています。

さて、まだあるんです。To: などの構造のあるフィールドでは (...) はコメ
ントで、token の区切りですが、text では (...) はコメントではありません。

すると、
	X-Mailer: Mew version 1.93b46 on Emacs 20.2 / Mule 3.0 (紅葉賀)
を
	X-Mailer: Mew version 1.93b46 on Emacs 20.2 / Mule 3.0 (=?...?=)
と符号化するのは間違いです。white-space で区切られてないから。

でも X-Mailer: の値全体を符号化するとちっとも嬉しくありません。だから、
Mew では、
	X-Mailer: Mew version 1.93b46 on Emacs 20.2 / Mule 3.0 =?...?=
のように ( ) まで符号化するようになっています。

このように、Mew ではヘッダの符号化といっても
	Subject:、Content-Description: はできるだけ全体を符号化
	その他のテキストフィールドは出来るだけ最小の部分を符号化
	構造を持つフィールドは構造を考えてを符号化
という 3 つを用意しています。

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

encorded-word が 76 を越えるなと言っているだけですよね? Mew では、70 
文字以下になるようにしています。

--かず



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