[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3. Message と Entity

RFC 2045 (RFC 2045) によれば、「Entity という語は、message, もしく は、multipart entity の body 中の1つの部分の、MIME で定義された header field と内容を指す」となっています。ここでは、MIME で定義された header field 以外の全ての header と body を指す語として entityを用いる ことにします。

RFC 2045 の定義は、MIME message が entity を節とする木構造であることを示 しています。つまり、MIME は message を木構造に拡張した訳です。

FLIM は entity の情報を表現するためにmime-entity 構 造体を用います。以下では単に mime-entity と呼ぶことにします。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.1 Entity の生成

Function: mime-open-entity type location

Entity を開いて、それを返します。

type は representation-type です。(cf. Entity の表現と実現)

location は entity の位置です。指定方法は representation-type に依って変わります。

Function: mime-parse-buffer &optional buffer type

buffer を message として構文解析し、その結果の mime-entity を buffermime-message-structure に格納する。

buffer が省略された場合、現在の buffer を構文解析する。

type が指定された場合、その値を生成される mime-entity の表象型とし て用いる。省略された場合は buffer となる。(cf. Entity の表現と実現)


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.2 Entity 階層

MIME message は entity を単位とする木構造になっています。

この木において根となる節は message 全体を表す entity です。ここでは、こ れを root-entity もしくはmessage と呼びます。

root-entity 以外の entity は親を持ちます。また、entity は子供を持つかも 知れません。この親子関係を考えることで entity の相対関係を扱うことができ ます。

一方、entity の message における位置を考えることもできます。

entity はこの木における節となりますが、この木には深さと同じ深さの中の 順番に従って番号が付けることができます。即ち、

 
                              ┌───┐
                              │  nil │
                              └─┬─┘
              ┌─────────┼─────────┐
            ┌┴┐              ┌┴┐              ┌┴┐
            │0│              │1│              │2│
            └┬┘              └┬┘              └┬┘
              │        ┌────┼────┐        │
          ┌─┴─┐┌─┴─┐┌─┴─┐┌─┴─┐┌─┴─┐
          │ 0.0││ 1.0││ 1.1││ 1.2││ 2.0│
          └───┘└───┘└───┘└───┘└───┘

のように深さ n の節には長さ n の整数列の節番号が振れます。これ を entity-number と呼びます。entity-number は S 式と しては (1 2 3) のような整数のリストとして表現されます。

mime-entity では、これと同様の node-id を用います。node-id はちょ うど entity-number を逆にしたリストで、entity-number 1.2.3 に対応する node-id は (3 2 1) です。

前述のように、MIME message は entity を単位とした木構造になっているので、 この根である message 全体も mime-entity で表現することができ、buffer local 変数 mime-message-structure に格納することにします。

mime-message-structure を起点に entity-number や node-id で示される entity を取り出すことができます。

Variable: mime-message-structure

現在の buffer における message 全体の mime-entity 構造体を格納するbuffer local 変数。

Function: mime-entity-children entity

entity に含まれる entity の list を返す。

Function: mime-entity-parent entity &optional message

entity の親の entity を返す。

message が指定された場合、これを根と見倣す。

Function: mime-root-entity-p entity

entity が根(即ち、message 全体)である場合に、非-nil を返 す。

Function: mime-entity-node-id entity

entity の node-id を返す。

Function: mime-entity-number entity

entity の entity-number を返す。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.3 Entity の検索

Function: mime-find-entity-from-number entity-number &optional message

message から、enity-number の entity を返します。

message が指定されていない場合は、 mime-message-structrue が使われます。

Function: mime-find-entity-from-node-id entity-node-id &optional message

message から、entity-node-id の entity を返します。

message が指定されていない場合は、 mime-message-structure が使われます。

Function: mime-find-entity-from-content-id cid &optional message

message から、cid の entity を返します。

message が指定されていない場合は、 mime-message-structure が使われます。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.4 Entity の属性

Function: mime-entity-content-type entity

entity の content-type を返す。(cf. mime-content-type 構造体)

Function: mime-entity-content-disposition entity

entity の content-disposition を返す。 (cf. mime-content-disposition 構造体)

Function: mime-entity-filename entity

entity の file 名を返す。

Function: mime-entity-encoding entity &optional default-encoding

entity の content-transfer-encoding を返す。 (cf. 符号化法)

もし、entity に Content-Transfer-Encoding 欄が存在しない場合は、 default-encoding を返す。これが指定されない場合は、"7bit" を用いる。

Function: mime-entity-cooked-p entity

entity の内容が既にコード変換されている場合は nil で無い値 を返す。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.5 Entity header の情報

Function: mime-fetch-field field-name &optional entity

entity の header 中の field-name 欄の body を返す。

結果の文字列は network 表現のままである。

entity が省略された場合は、mime-message-structure の値を用 いる。

field-name 欄が存在しない場合は nil を返す。

Function: mime-read-field field-name &optional entity

entity の header 中の field-name 欄を構文解析した結果を返す。

結果の形式は欄毎に異なる。非構造化欄の場合は文字列を返し、構造化欄の場合 はその形式に従った list を返す。

結果中の文字列は Emacs の内部表現に変換される。

entity が省略された場合は、mime-message-structure の値を用 いる。

field-name 欄が存在しない場合は nil を返す。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.6 Entity の文字表現

Function: mime-insert-header entity &optional invisible-fields visible-fields

現在位置に entity の復号した header を挿入する。

invisible-fieldsvisible-fields は正規表現のlist で、それ ぞれ、表示したくない field 名と表示したい欄名を表現したものである。

invisible-fields の要素のどれかに match し、かつ、 visible-fields の要素のどれにも match しない欄は表示されない。

encoded-word (Header の network 表現) は復号される。『生の非 us-ascii 文字』 は default-mime-charset として解釈される。

Function: mime-insert-text-content entity

point の前に entity を text entity として挿入します。

entity の内容は MIME charset として復号化され ます。entity の Content-Type field に charset paramter が無 いと、default-mime-charset が初期値として使われます。

Variable: default-mime-charset

適切な MIME charset (MIME charset) が見つからなかった場合に用いら れるMIME charset.

本来は APEL の変数である。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.7 Entity の内容

Function: mime-entity-content entity

entity の内容の byte 列を返す。

Function: mime-insert-entity-content entity

point の位置に entity の内容を挿入します。

Function: mime-write-entity-content entity filename

entity の内容を filename に書き込みます。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.8 Entity のネットワーク表現

Function: mime-insert-entity entity

entity の header と body を point のところに挿入します。

Function: mime-write-entity entity filename

entity の表現を filename に書き込みます。

Function: mime-write-entity-body entity filename

entity の body を filename に書き込みます。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.9 Entity の buffer による表現

Function: mime-entity-buffer entity

entity が存在する buffer を返す。

Function: mime-entity-point-min entity

entity が存在する buffer における、entity が占める領域の先頭 位置を返す。

Function: mime-entity-point-max entity

entity が存在する buffer における、entity が占める領域の末尾 位置を返す。

Function: mime-entity-header-start entity

entity が存在する buffer における、header が占める領域の先頭位置を 返す。

Function: mime-entity-header-end entity

entity が存在する buffer における、header が占める領域の末尾位置を 返す。

Function: mime-entity-body-start entity

entity が存在する buffer における、body が占める領域の先頭位置を返 す。

Function: mime-entity-body-end entity

entity が存在する buffer における、body が占める領域の末尾位置を返 す。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.10 Entity の表現と実現

Entity は抽象化されたデータ表現で、実際のデータ表現としては用途に応じて さまざまなものが利用できるように設計されています。

ここで、entity がどういう種類の表現を行っているかを示すのが representation-type で、entity を生成する時にはこれを指定します。 (cf. @ref{Entity Creation})

前節までに述べて来た entity に対する処理は、entity に対してその処理を依 頼することによって実現されています。Entity は自分の representation-type を知っており、その representation-type に応じて実際の処理を行う関数を呼 び出します。このような関数を entity 処理method と呼びます。また、 representation-type 毎にこのような関数をまとめたものを mm-backend と呼びます。

mm-backend は representation-type の名前の先頭に mm という 接頭辞を付けた関数名からなる module で、その module 名は同様に representation-type の名前の先頭に mm を付けたものになって います。この module は representation-type の entity が最初に生成される 時に自動的に require されます。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.10.1 Entity への便り

Function: mime-entity-send entity message &rest args

entitymessage を送る。

argsmessage の引数である。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.10.2 mm-backend の作り方

Macro: mm-define-backend type &optional parents

type を mm-backend として定義します。

PARENTS が指定されている場合は、type は prents を継承します。それぞれの parent は representation-type である必要があ ります。

例:

 
(mm-define-backend chao (generic))
Macro: mm-define-method name args &rest body

name を (nth 1 (car args)) backend の method 関 数として定義します。

args は lambda の引数リストのようなものですが、(car args) は指定された parameter である必要があります。(car (car args)) は変数の名前で、(nth 1 (car args)) は backend の名前 (representation-type) です。

例:

 
(mm-define-method entity-cooked-p ((entity chao)) nil)

[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Yasutaka SHINDOH on May 11, 2011 using texi2html 1.82.