2006-05-10 [長年日記]

[Q3] 表示用テンプレート

表示用テンプレートを処理したときに以下のような動作ができると面白そうかもと思っています。

  • 表示用テンプレートを使わないことにする

    メッセージによって表示用テンプレートを使うか使わないかをテンプレート内のマクロでコントロールできるようにする

  • HTML表示を使う

    今はテンプレートを使うと常にテキスト表示になりますが、HTML表示もできるようにする。

たとえば、以下のような使い方が考えられます。

前者は今でもできないことはありません。テンプレートがない状態は、

{@Body('', 1)}

とほぼ同じなので、条件にマッチしない場合にはこの結果を返すようにすれば良いだけです。HTML表示をできるようにすると、たとえば定型でフォーマットされたメールをHTMLにフォーマットしてHTML表示するとか、RSSをメールで配信するようなときにコンテンツをHTML表示するなどのことができそうです。テンプレートをちゃんと作らないとセキュリティ的に問題があるかもしれませんけど*1

で、どうやって実現するのが良いかなと考えたのですが、色々考えるとマクロ内で特定の名前の変数に値を代入すると動作が変わるというのはどうかなと思っています。たとえば、

{@If(@Contain(%From, 'foo'),
     @Set('t:NoTemplate', @True(), @True()),      # テンプレートを使わない
     @Contain(%From, 'bar'),
     @Progn(@Set('t:HtmlView', @True(), @True()), # HTML表示を使う
            @Concat('<pre'>, @HtmlEscape(@Body()), '</pre>')),
     @Body('', 1))}

のようなイメージです。

*1  デフォルトではスクリプトなどは全て禁止しているのですぐに危険というわけではないと思います

[]