Как заставить tidy игнорировать код TT в шаблонах html.tt? - PullRequest
2 голосов
/ 26 июля 2011

У меня есть несколько шаблонов 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' }); %]

То же самое происходит с кодом Template Toolkit в атрибутах тега, например:

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

Какие бы опции были необходимы, чтобы tidy игнорировал все между "" а также "%]"?Тот же вопрос относится и к начальным и конечным тегам PHP.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 26 июля 2011

Что если вы временно замаскируете свои теги 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, последняя команда возвращает их обратно.

2 голосов
/ 26 июля 2011

Как-то расширяя идеи здесь, почему бы не заменить фрагменты 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...