後藤@太陽計測です

>>>>> at Sat, 14 Nov 1998 17:24:34 +0900
>>>>> 出沢 <dezawa / miya.fujifilm.co.jp> said,
出沢> ruby前提で考えていたので、こんな感じで行けるのではと思って
出沢> たのですが。まだ良く吟味はしていませんが、

出沢>     /(^|\s)(\w+?\e\$B.*?\e\(B)(\s|$)/ して、
出沢>     ascii = $` ; encode = $2, right =$' して
出沢>     right を再帰でやっつける

「こんな感じ」ということなので、深く突っ込んでもしょーがないですが、
\w+? がまずいよーな。
以下はどーなります?(あまりいい例ではないですが)

1. "漢字 や ひらがな"
2. "漢字 and ひらがな"
3. "漢字andひらがな"

以下のようになって欲しいのですが(foldingは省略)
1. "=?ISO-2022-JP?B?GyRCNEE7ehsoQiAbJEIkZBsoQiAbJEIkUiRpJCwkShsoQg==?="
2. "=?ISO-2022-JP?B?GyRCNEE7ehsoQg==?= and =?ISO-2022-JP?B?GyRCJFIkaSQsJEobKEI=?="
3. "=?ISO-2022-JP?B?GyRCNEE7ehsoQmFuZBskQiRSJGkkLCRKGyhC?="


上記コードはエンコードすべき部分を探す観点かと思いますが、
たぶん、ASCIIで良い部分を探すほうが確実だと思います。
#さきに紹介したアルゴリズムもそうなのですが

「こんな感じ」ではありますが、エンコードすべき文字列はESC$Bで始まるも
のばかりじゃないのもちょっと気になる。


特に1が(略記してますが)
"=?JP?B?漢字?= =?JP?B?や?= =?JP?B?ひらがな?="
となってしまうとデコード時に空白がなくなっちゃいますけど、
どーでしょー

あと、ASCIIを探す、とすると漢字バイト列が障害になるのですが、
漢字をEUCなりに変換してからなら、うまくいかないかしらん?
/(^|\s+)\w+(\s+|$)/
 ecncode=$`; right=$'; 

ちなみに上記は Mewのやりかたとほぼ等価です
Mewでは更に\wではなく[\t -~]としている点が違いますが
(mew-header-split-string (in mew-bq.el)参照)。

#Emacs(mule)上のregexpでは漢字1文字が確実に . でマッチする
#(1文字として扱える)からこそできる方法ではありますが。


先の3例をmew-header-split-stringにかけると
1. ("漢字 や ひらがな")        ... 1つ
2. ("漢字" " and " "ひらがな") ... 3つ
3. ("漢字andひらがな")         ... 1つ

となり、結果、2以外は「まとめてエンコード」とするわけです。

--- Regards,
 Shun-ichi Goto  <gotoh / taiyo.co.jp>
   R&D Group, TAIYO Corp., Tokyo, JAPAN