HTML-TEMPLATE — это переносимая Коммон Лисп библиотека, написанная Эдмундом Вайцем (Edi Weitz). С её помощью работающая программа "наполняет" текстовые шаблоны конкретным содержанием. Является ли фактический результат текстом в формате HTML или нет, неважно. Хотя в основном, библиотека используется именно для генерации HTML. Поскольку прототипом послужил модуль Перл HTML::Template, по части синтаксиса шаблонов обе библиотеки имеют немало общего, но содержат и уникальные расширения.
Оригинальный исходный код HTML-TEMPLATE и документацию на английском можно загрузить отсюда http://weitz.de/html-template/.
Стандартный синтаксис открывающих псевдотегов шаблона следующий:
<!-- TMPL_tag attribute -->
Для всех псевдотегов, кроме TMPL_INCLUDE, attribute должен быть символом, которому при вызове функции подстановки нужно
приписать значение как псевдопеременной. Внутри программы в качестве псевдопеременных
используются ключи, т.е. символы пакета keyword.
В качестве значения псевдопеременной может выступать либо произвольный
объекта Лисп, либо список (для псевдотегов TMPL_LOOP и
TMPL_CALL).
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 -->
Исходный текст расширения сосредоточен в файле template-eval.lisp, который помещен в дистрибутив html-template-0.10.1.zip. Остальные файлы пакета - суть оригинальные исходники HTML-TEMPLATE. Добавочный файл переопределяет некоторые функции и должен компилироваться и загружаться после остальных.