Модуль HTML-TEMPLATE

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).

"Лиспобразное" расширение синтаксиса псевдотегов в YstokHTML

  1. Вместо "обычного атрибута" допустима произвольная форма Лисп. Эта форма считывается стандартной функцией read. Чтобы перейти в режим совместимости, установите *attributes-are-lisp-forms* в NIL (новая специальная переменная).
  2. Символы внутри форм шаблона подчиняются стандартному синтаксису Лисп: перед печатным именем символа допустимо имя пакета. По умочанию символы включается в пакет *template-package* (новая специальная переменная).
  3. Формы шаблона интерпретируется во время исполнения программы посредством новой функции template-eval. Она оценивает выражения, аналогично стандартной функции eval, но в упрощённом варианте:
    html-template-0.10.1.zip
    (48кБ)
  4. Новый псевдотег TMPL_EVAL рекомендуется к использованию вместо TMPL_VAR, для него реализована новая функция подстановки create-eval-printer.
  5. Расширено множество возможных значений переменной *format-non-strings*. Если оно есть T, подставляемый текст формируется из объекта, как и прежде, с помощью princ-to-string, т.е. (format nil "~A" ...).
    Если значение есть истина, но не равно T, оно должно быть функцией с единственным параметром и двумя возвращаемыми значенияими:
    (1) строка, полученная из аргумента и представляющая окончательный или промежуточный текст,
    (2) признак "не-модифицировать", указывающий, применять ли к первому значению функцию *string-modifier*.
    Истинное второе значение "защищает" первое значение от дальнейшего конвертирования, например, замену литер на escape-последовательности. Первое значение в этом случае выступает как окончательный результат (полезно, когда внутри программы это значение вычисляется из определённого формата, например, из LHTML).
  6. Тег TMPL_ELSE и все закрывающие теги /TMPL_... могут содержать произвольный текст между именем тега и маркером "-->". Это текст служит для улучшения читабельности шаблона и игнорируется анализатором. Пример: <!-- /TMPL_LOOP rows -->

Исходный текст расширения сосредоточен в файле template-eval.lisp, который помещен в дистрибутив html-template-0.10.1.zip. Остальные файлы пакета - суть оригинальные исходники HTML-TEMPLATE. Добавочный файл переопределяет некоторые функции и должен компилироваться и загружаться после остальных.