Skip to content

filonov-a/tplc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

tplc

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
\n";

Допустимо использование команд perl POD, например, для того, чтобы определенные фрагменты HTML-кода не преобразовывать в perl-код.

Пример:

    <!--- foreach $a (keys(%names)) { --->
  • $names{$a}
  • <!--- } ---> <!---=pod --->
  • А тут у нас заглушка, которая видна в только HTML
  • <!---=cut --->

Немедленное выполнение: Если за открывающим разделителем стоит '!' то, соотвествующий блок кода исполняется tplc немедленно, т.е. на этапе компиляции. Основное предназначение - вложенные шаблоны.

допустимы и другие варианты использования, на свой страх и риск :-)

Ну и пример Makefile для генерации cgi

Makefile begin

TPLC=tplc

TARGET=dest.cgi

all: ${TARGET}

${TARGET}: source.pl template.tpl ${TPLC} source.pl >$@ chmod a+x $@ perl -c $@

clean: rm ${TARGET} *~ .*~

Makefile end

About

Template Compiler

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages