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 回答