Template Compiler tplc предназначен для генерации perl-ового кода включающего в себя скомпилированные шаблоны.
В командной строке, или на STDIN подаются один или несколько perl-файлов. На STDOUT выдается обработанный код.
Почему очередной велосипед, ведь шаблонизаторов много разных? Моей задачей было получить на выходе cgi-скрипт, который не зависит от посторонних файлов, при этом исходный perl-овый файл должен быть корректным с точки зрения perl-а, а исходный код шаблона - должен быть корректным HTML. В качестве управления шаблоном используется опять же perl, чтобы не плодить новых языков.
Исходный perl-овый код анализируется на предмет одной единственной директивы: #parseHtml './template.html'
Директива может стоять в произвольном месте строки, имя файла заключено в ''. Вся строка целиком будет заменена на содержимое указанного шаблона. Это, в частности, позволяет отлаживать код без шаблонов.
print "This is a debug info"; #parseHtml './template.html'
И до, и после компиляции шаблонов, код остается корректным.
Шаблоны: В качестве основного языка шаблонов предполагался HTML, но никаких особых предположений на этот счет не делается. Внутри текста допустимо использование переменных perl, в рамках обычных соглашений синтаксиса:
$perlVariable
Разделители по умолчанию: '<!---' и '--->' Конкретные значения хранятся в переменных $quoteIn и $quoteOut соответственно, и могут быть модифицированы при необходимости. Пример:
-
<!--- foreach $a (keys(%names)) { --->
- $names{$a} <!--- } --->
После компиляции мы получим:
print "
- \n";
foreach $a (keys(%names)) {
print "
- <a href="#tabs-$a">$names{$a} \n"; } print "\n
Допустимо использование команд perl POD, например, для того, чтобы определенные фрагменты HTML-кода не преобразовывать в perl-код.
Пример:
-
<!--- foreach $a (keys(%names)) { --->
- $names{$a} <!--- } ---> <!---=pod --->
- А тут у нас заглушка, которая видна в только HTML <!---=cut --->
Немедленное выполнение: Если за открывающим разделителем стоит '!' то, соотвествующий блок кода исполняется tplc немедленно, т.е. на этапе компиляции. Основное предназначение - вложенные шаблоны.
допустимы и другие варианты использования, на свой страх и риск :-)
Ну и пример Makefile для генерации cgi
TPLC=tplc
TARGET=dest.cgi
all: ${TARGET}
clean: rm ${TARGET} *~ .*~