# 12.1 `formatter` -- 汎用の出力書式化機構

このモジュールでは、二つのインタフェース定義を提供しており、 それらの各インタフェースについて複数の実装を提供しています。 formatter インタフェースは `htmllib` モジュールの `HTMLParser` クラスで使われており、writer インタフェースは formatter インタフェースを使う上で必要です。

formatter オブジェクトはある抽象化された書式イベントの流れを writer オブジェクト上の特定の出力イベントに変換します。 formatter はいくつかのスタック構造を管理することで、writer オブジェクトの様々な属性を変更したり復元したりできるように しています; このため、writer は相対的な変更や ``元に戻す'' 操作 を処理できなくてもかまいません。writer の特定のプロパティのうち、 formatter オブジェクトを介して制御できるのは、水平方向の字揃え、 フォント、そして左マージンの字下げです。 任意の、非排他的なスタイル設定を writer に提供するための メカニズムも提供されています。さらに、段落分割のように、 可逆でない書式化イベントの機能を提供するインタフェース もあります。

writer オブジェクトはデバイスインタフェースをカプセル化します。 ファイル形式のような抽象デバイスも物理デバイス同様にサポートされて います。ここで提供されている実装内容はすべて抽象デバイス上で 動作します。デバイスインタフェースは formatter オブジェクトが 管理しているプロパティを設定し、データを出力端に書き込める ようにします。