| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
rfc.822 - RFC822メッセージ形式
このモジュールを使うためには、(use rfc.822) として下さい。
((name body) ...) |
デフォルトでは、パーザの動作は寛容です。ヘッダをパーズ中に EOF に 出会うとそれをメッセージの終端とみなします。継続(畳み込み)行でもなく、 新しいヘッダフィールドの始端でもない行は無視します。このふるまいは キーワード引数 strict? に真の値を渡すことで変更することができます。 真を渡すと、このような不正な形式のヘッダに対してエラーを発生させるように なります。
キーワード引数 reader は iport から一行読み込む手続きを
とります。デフォルトは read-line です。ほとんどの場合これで
十分のはずです。
rfc822-header->list が返すパーズ済みのヘッダリストから
特定のフィールドを得るためのユーティリティ手続きです。
Field-name は小文字の文字列でフィールド名を指定します。
与えられた名前をもつフィールドが header-list 中にあれば、
その値を文字列で返します。そうでない場合、もし default が
与えられていればそれが返り、与えられていなければ #f が返されます。
RFC2822メッセージの「構造化」されたヘッダフィールドをパーズするために、
いくつかの手続きが提供されています。これらの手続きはヘッダフィールドの
本体部を処理します。たとえば、ヘッダフィールドが、
"To: Wandering Schemer <schemer@example.com>" であれば、これらの
手続きは "Wandering Schemer <schemer@example.com>" をパーズします。
ほとんどの手続きは入力ポートを引数にとります。通常は最初に、ヘッダフィールド
全部を rfc822-header->list でパーズし、ヘッダの本体を
rfc822-header-ref で取得してから、その本体用に入力文字列ポートを
オープンして、それをこれらの手続きを用いてパーズします。
このように複雑になっているのは、フィールドのタイプによって別々の トークン化スキームが必要になるからです。RFC2822 では多くの場合 トークン間にコメントがあらわれことを許しているので、初心な正規表現では うまくいきません。RFC2822 のコメントはネスト可能で、正規表現では表現 しきれないからです。 そういうわけで、このレイヤの手続きは、いろいろな構文に対応できるよう 十分な柔軟性があるように設計されています。標準的なタイプのヘッダについては 高水準のパーザも提供されています。後述の「特定フィールド用パーザ」を 参照してください。
CFWS) を iport から読み飛ばします。それから、
tokenizer-specs にしたがってトークンをひとつ読み込みます。
トークンを読み込む前に、iport が EOF に到達したら、EOF が
返されます。
tokenizer-specs はトークナイザ仕様のリストです。 トークナイザ仕様は、文字集合または文字集合と手続きのペアのどちらかです。
CFWS を読み飛ばしたあと、この手続きは iport の先頭の一文字
を見て、tokenizer-specs のひとつひとつに対してチェックします。
その文字が含まれている文字集合がみつかれば、トークンを次のようにして
引き出します。トークナイザ仕様が文字集合だけの場合、その文字集合に
属している文字の並びがトークンを構成します。トークナイザ仕様が文字集合と
手続きのペアだったら、その手続きを iport とともに呼びだし、
トークンを読み込みます。
もし、先頭も文字がどの文字集合ともマッチしなければ、そも文字が iport から取り出され、それが返されます。
デフォルトの tokenizer-specs は以下のようになっています。
(list (cons #["] rfc822-quoted-string)
(cons *rfc822-atext-chars* rfc822-dot-atom))
|
rfc822-quoted-string および rfc822-dot-atom は
後述するトークナイザ手続きで、*rfc822-atext-chars* は RFC2822 で
規定された atext の文字集合に束縛されています。
つまり、rfc822-next-token はデフォルトでは RFC2822 で規定された
quoted-string あるいは dot-atom のトークンを引き出します。
tokenizer-specs をつかって、ヘッダフィールドのパーズ方法を
カスタマイズすることができます。たとえば、(1) 英字で構成された単語、または
(2) クウォート文字列、のトークンを取り出したいときには、
rfc822-next-token をこんなふうに呼べます。
(rfc822-next-token iport `(#[[:alpha:]] (#["] . ,rfc822-quoted-string))) |
rfc822-next-token を全入力を消費するまで、
繰り返しよび、トークンのリストを返します。Tokenizer-specs は、
rfc822-next-token に渡されます。
atom を構成する有効な文字集合に束縛されています。
atom、dot-atom および quoted-string に
対応するトークナイザです。quoted-string 中の二重引用符および
エスケープのためのバックスラッシュは rfc822-quoted-string に
よって取り除かれます。
year, month, day-of-month, hour, minutes, seconds, timezone, day-of-week. |
timezone は UT(グリニッジ標準時)からの分単位のオフセットです。 day-of-week は日曜日から数えた曜日で、情報が不足している場合は #f です。 monthは1から12までの整数です。 文字列がパーズ不可能ならば、全ての要素が #f になります。
<date> オブジェクト
(10.11.4 日付 参照) を返します。string がパーズできないときは
かわりに #f を返します。
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |