« 目次

Movable Type オブジェクト・リファレンス

MT::Builder

概要

use MT::Builder;
use MT::Template::Context;

my $build = MT::Builder->new;
my $ctx = MT::Template::Context->new;

my $tokens = $build->compile($ctx, '<$MTVersion$>')
    or die $build->errstr;
defined(my $out = $build->build($ctx, $tokens))
    or die $build->errstr;

解説

MT::Builderは、テンプレート・ボディを読んで出力ページを作成するためのパーサーとインタープリターの機能を提供します。MT::Builderオブジェクトは、文字列をパーシングしてトークンにし、これらのトークンから、出力ページとなるスカラー文字列を構築する機能を持ってはいますが、テンプレート中で遭遇するタグの種類については一切関知しません。

タグの処理はMT::Template::Contextオブジェクトに任せます。タグを調べ、有効かどうかをチェックし、あるいはコンテナ・タグか変換タグかを判断は、MT::Template::Contextの仕事です。

MT::Builder自体が行うのは、Movable Typeタグの基本構造と、文字列を断片(つまりタグで分断されたプレーン・テキスト)に分割することだけです。これらのトークン/断片のリストから完成したページを構築するには、実際にMovable Typeタグに値を埋め込むMT::Template::Contextオブジェクトを利用します。

利用方法

MT::Builder->new

新規パーサー/インタープリター・オブジェクトを生成し、これを返します。

$build->compile($ctx, $string)

$ctxに指定したMT::Template::Contextオブジェクトを使って、$stringに指定したスカラー文字列をトークンに分割し、トークンのリストを配列のリファレンスの形で返します。コンパイルに失敗するとundefを返します。

$build->build($ctx, ¥@tokens [, ¥%cond ])

$ctxに指定したMT::Template::Contextオブジェクトを使って、トークンのリスト¥@tokensから出力ページを作成します。成功すると出力ページを返し、失敗するとundefを返します。空文字列('')と数値の0は、このメソッドの戻り値として有効ですので、エラーが発生したかどうかをチェックするには、undefかどうかを明示的に調べる必要があります。

オプション引数の¥%condには、トークンを解釈する条件のリストを指定します。この引数を指定する場合、MTタグ名(冒頭の"MT"を除いた部分)をキーとし、そのタグを含めるかどうかを示すブーリアン・フラグを値とするハッシュへのリファレンスを指定する必要があります。trueを指定すると最終的な出力にそのタグを含め、falseを指定すると、そのタグを含めません。これは、テンプレートに条件タグ(<MTEntryIfExtended>など)があり、こういったタグを含めるかどうかを制御したい場合に便利です。たとえば、テンプレートに次のようなコンテナ・タグがあり、

<MTEntryIfExtended>
    <$MTEntryMore$>
</MTEntryIfExtended>

これらの条件タグを除外したい場合、次の例のようにbuildを呼び出します。

my $out = $build->build($ctx, $tokens, { EntryIfExtended => 0 });

エラー処理

エラー発生時には、上記メソッドはundefを返し、そのオブジェクトのerrstrメソッドを呼び出すことによりエラー・メッセージが取得できます。たとえば次のような形です。

defined(my $out = $build->build($ctx, $tokens))
    or die $build->errstr;

Copyright © 2001-2006 Six Apart, Ltd. All Rights Reserved.