Исходный модуль HTML-TEMPLATE — это переносимая Коммон Лисп библиотека, написанная Эдмундом Вайцем (Edi Weitz). С её помощью работающая программа "наполняет" текстовые шаблоны конкретным содержанием. Является ли фактический результат текстом в формате HTML или нет, неважно. Хотя в основном, библиотека используется именно для генерации HTML.
Поскольку прототипом послужил модуль Перл HTML::Template (см. также в Википедии), в части синтаксиса шаблонов обе библиотеки имеют немало общего. Похожий синтаксис шаблонов применяются и в phpBB — популярном пакете для создания форумов.
Оригинальный исходный код HTML-TEMPLATE и документацию на английском находятся здесь http://weitz.de/html-template/. В YHTML-TEMPLATE в этот код с доработан с целью придать синтаксису больший "Лисп-оттенок". Внесены также новые констукции, см. ниже.
Стандартный синтаксис открывающих псевдотегов шаблона следующий:
<!-- TMPL_tag attribute -->
Для всех псевдотегов, кроме TMPL_INCLUDE, attribute должен быть символом, которому при вызове функции подстановки нужно
приписать значение как псевдопеременной. Внутри программы в качестве псевдопеременных
используются ключи, т.е. символы пакета keyword.
В качестве значения псевдопеременной может выступать либо произвольный
объекта Лисп, либо список (для псевдотегов TMPL_LOOP и
TMPL_CALL).
<html>
<head><title><!-- TMPL_VAR title --></title></head>
<body>
<p>Вывод списка:</p>
<ul>
<!-- TMPL_LOOP items -->
<li><!-- TMPL_EVAL item --></li>
<!-- /TMPL_LOOP -->
</ul>
</body>
</html>
| Возможность | HTML::Template | HTML-TEMPLATE | YHTML-TEMPLATE |
|---|---|---|---|
| Получение значения переменной | да | да | да |
| Присваивание значения переменной | нет | нет | нет |
| Обращение напрямую к структурам, вызов функций и методов | нет | нет | да |
| Цикл по списку foreach/dolist | да | да | да |
| Цикл счётчику repeat/dotimes | нет | да | да |
| Вложение шаблонов | да | да | да |
read. Чтобы перейти в
режим совместимости, установите *attributes-are-lisp-forms* в NIL
(новая специальная переменная).
*template-package* (новая специальная переменная).
template-eval.
Она оценивает выражения, аналогично стандартной функции eval, но
в упрощённом варианте:
IF WHEN UNLESS AND OR NOT QUOTE;
*var*, т.е.
начинающимся и заканчивающимся звёздочкой, трактуется как динамическая
переменная, значение которой вычисляется с помощью symbol-value;
*value-access-function*.
TMPL_EVAL рекомендуется к использованию вместо
TMPL_VAR, для него реализована новая функция подстановки
create-eval-printer.
*format-non-strings*.
Если оно есть T, подставляемый текст формируется из объекта, как и прежде, с
помощью princ-to-string,
т.е. (format nil "~A" ...).*string-modifier*.TMPL_ELSE и все закрывающие теги /TMPL_... могут содержать произвольный текст
между именем тега и маркером "-->". Это текст служит для улучшения
читабельности шаблона и игнорируется анализатором.
Пример: <!-- /TMPL_LOOP rows -->
TMPL_ELIF позволяет писать более короткие
шаблоны. Полный синтаксис "условного оператора" теперь такой:
<!-- TMPL_IF condition_1 --> text_1 <!-- TMPL_ELIF condition_2 --> text_2 ... <!-- TMPL_ELSE --> text_else <!-- /TMPL_IF -->
YHTML-TEMPLATE сочетает возможности двух типов шаблонов.
Все оригинальные и обновлённые исходные файлы помещены в дистрибутив html-template-0-10-2.zip. Инструкции по развёртыванию находятся в файле INSTALLATION (на английском языке).