find-coding-system() in pces-e20.el

Shuhei KOBAYASHI shuhei @ aqua.ocn.ne.jp
2000年 9月 29日 (金) 20:10:19 JST


守岡さんの回答(<htxog1akxqb.fsf @ urania.kanji.zinbun.kyoto-u.ac.jp>)では
全然理解できなかったので調べてみました. find-coding-system は XEmacs が
本家らしいので, XEmacs 版の doc string を確認してみると...

| Retrieve the coding system of the given name.
| 
| If CODING-SYSTEM-OR-NAME is a coding-system object, it is simply
| returned.  Otherwise, CODING-SYSTEM-OR-NAME should be a symbol.
| If there is no such coding system, nil is returned.  Otherwise the
| associated coding system object is returned.
;; ちなみに checkout してある XEmacs の version は今だに "Millenium" です.

1. 引数が coding-system object ならば, その coding-system object を返す.

2. 引数が coding-system object でない場合には symbol でなければいけない.
   (ちなみに, 引数が symbol 以外の場合には wrong-type-argument になる)

  2.1. symbol に対応する coding-system object があれば, その coding-system
       object を返す.

  2.2. symbol に対応する coding-system object がない場合には nil を返す.

;; XEmacs での (find-coding-system nil) => #<coding_system binary> という
;; 動作は undocumented なのですね.


>>>>> In <htxog1akxqb.fsf @ urania.kanji.zinbun.kyoto-u.ac.jp>,
>>>>> tomo @ kanji.zinbun.kyoto-u.ac.jp (守岡 知彦 / MORIOKA Tomohiko) wrote:
> APEL において、多分、nil の場合の挙動は未定義動作だったんだと思います。
> そういう意味では『仕様』だったのかもしれません。
[...]
> これを期に (find-coding-system nil) が binary を返すように変更する(明
> 確化する)ことには賛成します。つまり、これを『バグ』と見倣す訳です。

APEL 版の doc string ("Return OBJ if it is a coding-system.") を『仕様』
とみなせば, APEL 版の動作は『仕様』に忠実ですが, この『仕様』自体が本家
の不完全な emulation なので, これは『バグ』と呼ぶべきものだと思います.


> ;; coding-system を指定する場所の多くは nil を取りますが、
> ;; 通常の coding-system を指定した場合と挙動が異なることがあります。

nil と binary は coding-system として等価なのですか?
;; (find-coding-system nil) が binary を返すように変更することには賛成
;; したいのですが, nil が特別扱いされているのだとすると不安...


>>>>> In <htxaectkut4.fsf @ urania.kanji.zinbun.kyoto-u.ac.jp>,
>>>>> tomo @ kanji.zinbun.kyoto-u.ac.jp (守岡 知彦 / MORIOKA Tomohiko) wrote:
> (defsubst-maybe find-coding-system (obj)
>   "Return OBJ if it is a coding-system.
> If OBJ is nil, `binary' is returned."
>   (if (coding-system-p obj)
>       (or obj 'binary)))
> 
> という感じでしょうか?

(defun-maybe find-coding-system (symbol)
  "Return SYMBOL if it is a coding-system.
If there is no such coding-system, nil is returned.
If SYMBOL is nil, `binary' is returned instead."
  (if (coding-system-p symbol)
      (or symbol 'binary)
    (if (symbolp symbol)
        nil
      (signal 'wrong-type-argument (list 'symbolp symbol)))))

-- 
Shuhei KOBAYASHI




More information about the APEL-ja mailing list