###
4 `Babyl`

クラス `Babyl`( | path[, factory=None[, create=True]])

  Babyl 形式のメールボックスのための `Mailbox` のサブクラス。 パラメータ factory は呼び出し可能オブジェクトで (バイナリモードで開かれているかのように振る舞う)ファイル風メッセージ表現を 受け付けて好みの表現を返すものです。factory が `None`ならば、 `BabylMessage` がデフォルトのメッセージ表現として使われます。 create が `True` ならばメールボックスが存在しないときには 作成します。

Babyl は単一ファイルのメールボックス形式で Emacs に付属している Rmail メールユーザエージェントで使われているものです。メッセージの開始は Control-Underscore ("`\037`") および Control-L ("`\014`") の二文字を含む行で示されます。 メッセージの終了は次のメッセージの開始または最後のメッセージの場合には Control-Underscore を含む行で示されます。

Babyl メールボックス中のメッセージには二つのヘッダのセット、オリジナル ヘッダといわゆる可視ヘッダ、があります。可視ヘッダは典型的にはオリジナ ルヘッダの一部を分り易いように再整形したり短くしたりしたもので す。Babyl メールボックス中のそれぞれのメッセージには ラベル とい うそのメッセージについての追加情報を記録する短い文字列のリストを伴い、 メールボックス中に見出されるユーザが定義した全てのラベルのリスト は Babyl オプションセクションに保持されます。

`Babyl` インスタンスには `Mailbox` の全てのメソッドの他に次のメソッドが あります。

`get_labels`( | )

  メールボックスで使われているユーザが定義した全てのラベルのリストを返します。 注意: メールボックスにどのようなラベルが存在するかを決めるのに、 Babyl オプションセクション のリストを参考にせず、 実際のメッセージを捜索しますが、 Babyl セクションもメールボックスが変更されたときにはいつでも更新されます。

`Babyl` で実装された `Mailbox` のいくつかのメソッドには特別な注意が 必要です。

`get_file`( | key)

  Babyl メールボックスにおいて、メッセージのヘッダはボディと繋がって格納されていません。 ファイル風の表現を生成するために、ヘッダとボディが (`StringIO` モジュールの) ファイルと同じ API を持つ `StringIO` インスタンスに一緒にコピーされます。 その結果、ファイル風オブジェクトは本当に元にしているメールボックスとは独立していますが、 文字列表現と比べてメモリーを節約することにもなりません。

`lock`( | )

`unlock`( | )

  3種類のロック機構が使われます -- ドットロッキングと、もし使用可能ならば `flock()` と `lockf()` システムコールです。

参考:

Format of Version 5 Babyl Files
  Babyl 形式の仕様

Reading Mail with Rmail
  Rmail のマニュアルで Babyl のセマンティクスについての情報も少しある