YHTML-TEMPLATE

Исходный модуль 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::TemplateHTML-TEMPLATEYHTML-TEMPLATE
Получение значения переменной дадада
Присваивание значения переменной нетнетнет
Обращение напрямую к структурам, вызов функций и методов нетнетда
Цикл по списку foreach/dolist дадада
Цикл счётчику repeat/dotimes нетдада
Вложение шаблонов дадада

Особености YHTML-TEMPLATE

  1. "Лиспобразное" расширение синтаксиса псевдотегов — вместо "обычного атрибута" допустима произвольная форма Лисп. Эта форма считывается стандартной функцией read. Чтобы перейти в режим совместимости, установите *attributes-are-lisp-forms* в NIL (новая специальная переменная).
  2. Символы внутри форм шаблона подчиняются стандартному синтаксису Лисп: перед печатным именем символа допустимо имя пакета. По умочанию символы включается в пакет *template-package* (новая специальная переменная).
  3. Формы шаблона интерпретируется во время исполнения программы посредством новой функции template-eval. Она оценивает выражения, аналогично стандартной функции eval, но в упрощённом варианте:
  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 -->
  7. Новый тег TMPL_ELIF позволяет писать более короткие шаблоны. Полный синтаксис "условного оператора" теперь такой:
    <!-- TMPL_IF condition_1 -->
    text_1
    <!-- TMPL_ELIF condition_2 -->
    text_2
     ...
    <!-- TMPL_ELSE -->
    text_else
    <!-- /TMPL_IF -->
    

YHTML-TEMPLATE сочетает возможности двух типов шаблонов.

Активный (pull) шаблон
Внутри шаблона может быть код, извлекающий данные нетривиальным путем.
Пассивный (push) шаблон
Файл шаблона можно открывать в браузере.

Загрузка исходных текстов

Все оригинальные и обновлённые исходные файлы помещены в дистрибутив html-template-0-10-2.zip. Инструкции по развёртыванию находятся в файле INSTALLATION (на английском языке).

Рейтинг@Mail.ru
Rambler's Top100
Яндекс.Метрика