2

少し整理したい TT テンプレートがいくつかあります。コマンドラインで tidy を使用します。

私のコマンドは次のようになります:

$ tidy -utf8  --preserve-entities y -indent -wrap 120 file.html.tt

残念ながら、次のようなコードがある場合:

[% aoh.unshift({ label => '', value => 'All types' }); %]

結果のファイルは次のようになります。

[% aoh.unshift({ label => '', value => 'All types' }); %]

タグ属性のテンプレート ツールキット コードでも同じことが起こります。

<a href="[%%20%20c.url_for('/content/edit').query('data_type'%20=%3Edata_type%20)%20%]" >

「[%」と「%]」の間のすべてをきちんと無視するために必要なオプションは何ですか? 同じ質問が PHP の開始タグと終了タグにも当てはまります。

ありがとう。

4

2 に答える 2

3

TT タグを一時的に偽装するとどうなりますか?

$ perl -pie 's/\[%/<!--\[ %/g; s/%\]/% \]-->/g' file.html.tt
$ tidy -utf8  --preserve-entities y -indent -wrap 120 file.html.tt
$ perl -pie 's/<!--\[ %/\[%/g; s/% \]-->/%\]/g' file.html.tt

最初のコマンドはすべての TT 要素を HTML コメントに変換し、最後のコマンドは元に戻します。

于 2011-07-26T00:31:43.583 に答える
2

どういうわけかここでアイデアを拡張します。TT スニペットを完全に無害なものに置き換えて、きちんと元のものに戻してみてはいかがでしょうか。以下のコードでは、次のようなコメントを置き換えています<!-- sn20 -->

use File::Slurp;
my $template = read_file(shift);

# replace TT snippets with <!-- snNN -->
my %snip = ();
my $id   = 0;
$template =~ s/ \[% (.*?) %\] / $snip{++$id} = $1; "<!-- sn$id -->" /gxse;

# run tidy
open my $tidy_fh, '|-', 'tidy -utf8  --preserve-entities y -indent -wrap 120 >tidy_out'
    or die;
print $tidy_fh $template;
close $tidy_fh;

# fix code back
my $template_tidied = read_file('tidy_out');
$template_tidied =~ s/<!-- sn(\d+) -->/ "[%$snip{$1}%]" /ge;

# print the result
print $template_tidied;
于 2011-07-26T11:33:13.553 に答える