HTML-TEMPLATE is a portable library for Common Lisp written by Edi Weitz. It is used to fill templates with arbitrary values at runtime. (Actually, it does not matter whether the result is HTML but this the library is mostly used for it.) It is loosely modeled after the Perl module HTML::Template and partially compatible with a its syntax, though both libraries contain some extensions that the other does not support.

The detail information about HTML-TEMPLATE, source code, and documentation can be downloaded from http://weitz.de/html-template/.

YHTML-Template is a futher development of the above library in a more "lispy" direction.

YHTML-Template distinctive features

  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.
  2. 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.
  3. 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:
  4. The TMPL_EVAL tag and create-eval-printer were introduced; the former should be used instead of the TMPL_VAR tag.
  5. 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.
  6. 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 -->
  7. 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 -->


YHTML-Template requires

YHTML-Template is required by YstokHelp and YstokHTML.

Download and installation

YHTML-Template source code is available from
html-template-0-10-3.zip or html-template-0-10-3.tgz.