YHTML-Template is an HTML template library based on Edi Weitz's HTML-TEMPLATE. It was written by Dmitri Ivanov.

License: LLGPL

Homepage: http://lisp.ystok.ru/yhtml/html-template.html.

YHTML-Template is a part of YstokHTML collection. It accepts more "Lispy" expressions and provides the following extensions to the original HTML-TEMPLATE code.

  1. A Lisp form in place of "plane attribute" is allowed. Forms are read by the standard read function. All starting tags (except
TMPL_INCLUDE) accept forms instead of "old style" attributes.

The *attributes-are-lisp-forms* special variable was introduced. Bind or set it to NIL to treating those tags in the compatibility mode.

  • Symbols follow standard Lisp syntax: a package specifier is allowed in front of the name. By default, symbols are interned into the package stored in *template-package*, a new special variable.
  • To interpret the forms in run-time, the
  • template-eval was introduced. It is a simple evaluator akin to the standard eval function except for:
    • A limited number of special-forms is supported, namely:
  • The symbol with a name like *var* is treated as a dynamic variable and is retrieved via
  • symbol-value.
  • The values of other symbols are looked up via *value-access-function*.
  • The
  • TMPL_EVAL tag and create-eval-printer were introduced; the former should be used instead of the TMPL_VAR tag.

  • The value of
  • *format-non-strings* has got an additional meaning. If it equals to T, the result is produced by means of princ-to-string, i.e. (format nil "~A" ...).
    If it is true but not equals to T, the value must be a single-parameter function, which returns two values:
    (1) a string resulted from its argument, and optionally
    (2) do-not-modify flag controlling whether *string-modifier* is applied afterwards.
    The truth as second value can prevent the result of converting from predefined format, e.g. LHTML, from further escaping.

  • Tag
  • TMPL_ELSE and all ending tags /TMPL_... can embed an optional text between the tag name and the closing marker "-->". This text is intended for readability only and completely ignored by the template parser. For example: <!-- /TMPL_LOOP rows -->

  • The
  • TMPL_ELIF tag was introduced to allow a more concise code. In full, now the "if" pattern looks like:
    !-- TMPL_IF condition_1 --
    !-- TMPL_ELIF condition_2 --
    !-- TMPL_ELSE --
    !-- /TMPL_IF --