Как заставить tidy игнорировать код TT в html.tt шаблоны?
У меня есть несколько шаблонов 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%]" >
Какие были бы необходимые параметры, чтобы заставить tidy игнорировать все между "[%" и "%]"? Тот же вопрос справедлив для начала и конца PHP теги.
Спасибо.
2 answers
Каким-то образом расширяя идеи здесь, почему бы не заменить фрагменты 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;
Что, если вы временно скроете свои теги 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-комментарии, последняя команда изменяет их обратно.