Mojolicious::Plugin::TagHelperにあるtag関数をText::Xslateで使えるようにします。
ほぼそのまま置き換えただけなので問題なく使えると思います。
test.pl
use Text::Xslate qw(html_builder html_escape);
my $tx = Text::Xslate->new(
function => {
tag => sub {
my ( $name, $attrs ) = @_;
$attrs //= {};
return html_builder {
my $html = shift;
my $tag = "<$name";
for my $key ( sort keys %{$attrs} ) {
$tag .= qq{ $key="}
. html_escape( $attrs->{$key} // '' ) . '"';
}
if ($html) {
$html = ref $html ? $html : html_escape($html);
$tag .= '>' . $html . "</$name>";
}
else { $tag .= ' />' }
return $tag;
};
},
},
);
tag.tx
: my $link = 'http://yahoo.co.jp/'
:'サンプルテキスト' | tag('a',{href=>$link});
:->{
<h1>セクションを囲む</h1>
<p>aaa</p>
:}() | tag('section');
result.html
<a href="http://yahoo.co.jp/">サンプルテキスト</a>
<section>
<h1>セクションを囲む</h1>
<p>aaa</p>
</section>
だいたいこんな感じで出力されるはずです。