#?SuikaWiki/0.9
[1] [[manakai]] のモジュール群 [CODE(perl)[Message::Util::Formatter]]
<IW:SuikaCVS:"messaging/manakai/lib/Message/Util/Formatter/">
は、雛形と引数から結果を得るための汎用モジュールです。

たとえば、雛形 [SAMP[%year (digit => 4, zone => {+09:00});-%month (zone => {+09:00});-%date (zone => {+09:00});]]
と現在時刻から日付を得る (ように構成する) ことができます。

[5] [CODE(perl)[Message::Util::Formatter]] という名前のモジュールは既に
obsolete です。当分は互換性のために manakai の一部として配布されますが、
このモジュール自体は使わないでください。

代わりに、 [CODE(perl)[Message::Util::Formatter::[VAR[*]]]]
というモジュール群が用意されています。
- [CODE(perl)[[[Message::Util::Formatter::Base]]]]:
雛形を解釈し、処理する手続きを呼び出す処理を実装した基底級です。
通常は、このモジュールを直接扱う必要はありませんが、
このモジュールを継承して処理に特化したモジュールを作成することもできます。
- [CODE(perl)[[[Message::Util::Formatter::Text]]]]:
雛形から結果として文字列を得るためのモジュールです。
- [CODE(perl)[[[Message::Util::Formatter::Node]]]]:
雛形から結果として木構造を得るためのモジュールです。
このモジュールは、 [CODE(perl)[[[Message::Markup::XML::Node]]]]
といっしょに使うことを想定しています (たとえば、 [SAMP[append_new_node]] メソッドを使います)。
他の木構造を扱うモジュールを使うときには、 [CODE(perl)[Message::Util::Formatter::Node]] を参考に別途モジュールを作成する必要があります。
- [CODE(perl)[[[Message::Util::Formatter::Boolean]]]]:
雛形から結果として真偽値を得るためのモジュールです。
真または偽または不明 ([CODE(perl)[[[undef]]]]) を扱うことができます。

* 雛形の書式

[6] [CODE(perl)[Message::Util::Formatter::[VAR[*]]]] に与える雛形の書式を、
[DFN[[CODE(perl)[Message::Util::Formatter]] 形式]]などと呼んでいます。
[WEAK[もっと短くて分かりやすくて格好良い名前があったら教えてください!]]

詳しくは [CODE(WikiPage)[[[Message::Util::Formatter//書式]]]]を見てください。

* 結果を得る

[7] [CODE(perl)[Message::Util::Formatter]] で雛形から結果を得るには、
[PRE[
require [VAR[formatter-module]];
my $formatter = [VAR[formatter-module]]->new (%option);

$result1 = $formatter->replace ($template1, %option1);
$result2 = $formatter->replace ($template2, %option2);
]PRE]
のようにしてください。

* 書式付けモジュールの作成

@@TBD

* 歴史

[2] もともと、 [CODE(perl)[[[Message::Field::Date]]]] で任意の書式で日付を出力するために [CODE(perl)[Message:Util::Formatter]] モジュールが書かれました。

その後、 [[SuikaWiki]] (2) で [[WikiForm]] を記述するための書式として採用されました。
更に、 [[WikiView]] など、 SuikaWiki 全体に渡って
[CODE(perl)[Message::Util::Formatter]]
が使われるようになりましたが、その際に、 [[XML]]
のような木構造を扱うために、出力を単純な文字列ではなく、
Perl の物体にできるようになりました。

[3] このような建て増しの結果 [CODE(perl)[Message::Util::Formatter]]
は柔軟な扱いができなくなってしまいましたので、
新たに [CODE(perl)[Message::Util::Formatter::Base]]
とその派生級に再構成されました。
新しい構成では、文字列を得るための
[CODE(perl)[Message::Util::Formatter::Text]],
木構造を得るための [CODE(perl)[Message::Util::Formatter::Node]],
論理値を得るための [CODE(perl)[Message::Util::Formatter::Boolean]]
が用意され、必要に応じて使い分けることができます。
また、以上のいずれかのモジュールを基底としてより特化したモジュールを実装することもできます。

* メモ