mime-parameters API (Re: FLIM 1.14 API (Re: flim-1_13-rfc2231 vs flim-1_14-rfc2231))

Shuhei KOBAYASHI shuhei @ aqua.ocn.ne.jp
2001年 5月 26日 (土) 17:54:17 JST


>>>>> In <htxvgnl1z3z.fsf @ urania.kanji.zinbun.kyoto-u.ac.jp>,
>>>>> tomo @ kanji.zinbun.kyoto-u.ac.jp (守岡 知彦 / MORIOKA Tomohiko) wrote:
> `mime-parameters' 型が満たすべき条件と `mime-parameters' 型に関する
> API を追加するのが良いと思っています。

>>>>> In <htxsnihpcr5.fsf @ urania.kanji.zinbun.kyoto-u.ac.jp>,
>>>>> tomo @ kanji.zinbun.kyoto-u.ac.jp (守岡 知彦 / MORIOKA Tomohiko) wrote:
> ただ、alist としての実装を容認する形で mime-parameter 型に関する規定を
> FLIM 1.14 API に追加するのが望ましいと思います。

必要な API はまず,

  * ある parameter の値を取得する.

それと, mmedit(?) が導入された時に必要になりそうなのが,

  * ある parameter の値を設定する.

さらに, `mime-content-type-parameters' の使われ方を調べてみると,

  * 全ての parameter に対して何らかの処理をする.

というのが必要になるでしょうか.


まずは parameter を取得 / 設定する関数の方から.

案 A: TYPE-SLOT / TYPE-set-SLOT に合わせると,

  * (mime-parameters-parameter PARAMETERS ATTRIBUTE) => VALUE
  * (mime-parameters-set-parameter PARAMETERS ATTRIBUTE NEW-VALUE) => ?

"parameters-parameter" というのが気持ち悪いですね.
;; `parameter' という SLOT があるわけではないという話もありますし...


案 B: それでは, plist-get / plist-put みたいに,

  * (mime-parameters-get PARAMETERS ATTRIBUTE) => VALUE
  * (mime-parameters-put PARAMETERS ATTRIBUTE NEW-VALUE) => ?

おっと, 案 A, B では parameter の削除ができませんね.
;; NEW-VALUE に nil を与えた場合を削除とみなすという手もありますが...


案 C: では, add-text-properties / remove-text-properties のように,

  * (mime-parameters-get-parameter PARAMETERS ATTRIBUTE) => VALUE
  * (mime-parameters-add-parameter PARAMETERS ATTRIBUTE NEW-VALUE) => ?
  * (mime-parameters-remove-parameter PARAMETERS ATTRIBUTE) => ?

ん, これでもまだ mime-parameters 型が alist(や plist) の場合には先頭の
parameter を削除できないという問題がありますね. parameter を設定する関
数の返り値は更新された mime-parameters であると定義し, mime-parameters
を設定する場合には

    (setq parameters (mime-parameters-add-parameter
                      PARAMETERS ATTRIBUTE NEW-VALUE))

や

    (mime-content-type-set-parameters
     CONTENT-TYPE
     (mime-parameters-remove-parameter PARAMETERS ATTRIBUTE))

のようにしなければ変更が反映されない(かもしれない)と定めるのが良いかな?


全ての parameter に対して何らかの処理をする関数の方は,

  * (mime-parameters-for-each-parameter FUNC PARAMETERS) => <unspecified>
    (FUNC ATTRIBUTE VALUE) => <unspecified>

でどうでしょうか?


結論として, mime-parameters API として,

  * (mime-parameters-get-parameter PARAMETERS ATTRIBUTE) => VALUE
  * (mime-parameters-add-parameter PARAMETERS ATTRIBUTE NEW-VALUE)
     => NEW-PARAMETERS
  * (mime-parameters-remove-parameter PARAMETERS ATTRIBUTE)
     => NEW-PARAMETERS
  * (mime-parameters-for-each-parameter FUNC PARAMETERS) => <unspecified>
    (FUNC ATTRIBUTE VALUE) => <unspecified>

を提案します.
;; s/add/set/ や s/remove/delete/ という variant も可.
;;;; Lisp community での remove と delete の使い分けはどうなっていたっけ?

また, `mime-content-type-parameters' や `mime-content-disposition-parameters'
に対応する (mime-content-type-set-parameters CONTENT-TYPE NEW-PARAMETERS) や
(mime-content-disposition-set-parameters CONTENT-DISPOSITION NEW-PARAMETERS)
も追加する必要がありますね.

-- 
Shuhei KOBAYASHI





More information about the Emacs-mime-ja mailing list