make-ccl-coding-system の、バージョン依存の動作について (Re: Quoted-Printable なエンティティの保存に失敗する)

Kazuhiro Ito kzhr @ d1.dion.ne.jp
2008年 2月 8日 (金) 23:49:26 JST


apel-ja の皆様、はじめまして、伊藤と申します。

Windows 上の Emacs 22.1 (Meadow 3) で Wanderlust を使用しているのですが、
Quoted-Printable でエンコードされたエンティティをディスクに保存すると
正しくデコードされないという現象が生じます。

以前に emacs-mime-ja に投稿したメール ([emacs-mime-ja: 02196]) では
取り敢えず動作する、FLIM に対するパッチを投稿しましたが、
もう少し調べたところ、APEL も絡んだ話のように思いましたので
apel-ja にも投稿します。

前回のメールに書いたように直接の原因は

> 保存時にcoding-system-for-write に設定している
> mel-ccl-quoted-printable-lf-lf-rev の EOL type は undecided であり、
> Windows 上の Emacs 22 では EOL type に CRLF が
> 選択されてしまう (結果、EOL が CRLF なデータがデコーダに渡り、
> デコーダはそのデータを EOL が LF としてデコードしている) 為のようです。

だと思われます。
さて、この mel-ccl-quoted-printable-lf-lf-rev という coding system は
APEL で提供される make-ccl-coding-system を用いて作られています。

ところが、make-ccl-coding-system を用いて coding system を作った場合、
Emacs 21以降とそれより前では動作が異なります。
(以下はソースからの推測もまじります。
 Meadow (Emacs 20.7.1) と Meadow2 (Emacs 21.4.1) 以降で異なる事は
 確認しました。)
Emacs 20.7 までは EOL type が LF に設定されますが、
Emacs 21.1 以降 では EOL type が undecided に設定され、
-unix, -dos, -mac が末尾についた coding system も同時に作成されます。

これは、make-ccl-coding-system から呼び出される make-coding-system の
動作が変わった事によります。
Emacs 21 以降の make-coding-system は、オプションの引数 eol-type が
増え、指定しない場合は EOL type が undecided な coding system を
作成するようになりました。
Emacs 20.7 以前は CCL based な coding system の場合、常に EOL type は
LF になっていたようです。

取り敢えず Emacs 21 以降でも EOL type が LF な coding system のみが
作られるようにするパッチを添付します。
APEL の仕様が分からないので FLIM とどちらで対策すべきかも
分かりませんが、仕様と対策をご検討いただければ幸いです。

-- 
伊藤 和博(Kazuhiro Ito)
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: apel.diff
型:         application/octet-stream
サイズ:     789 バイト
説明:       無し
URL:        <http://lists.chise.org/pipermail/emacs-mime-ja/attachments/20080208/c06ba6c4/attachment.obj>


More information about the Emacs-mime-ja mailing list