I've written an implementation of (most of) JSON Template in the course of rewriting my website.
JSON Template is a minimalistic, declarative template language.
Downloading
You can fetch the Mercurial repository using the following command:
Code: Select all
hg clone http://matthias.benkard.de/code/cl-json-template/
Implementation Features
- No dependencies
- Portable Common Lisp (tested on SBCL, Clozure CL, ECL, XCL, ABCL)
- HTML and URI escaping through the use of formatters
- Apache license
- Literals (like {.space} and {.meta-left}/{.meta-right})
- Formatters with arguments
- Options (like changing the meta character or the default formatter)
- Some kind of compilation for efficiency
Code: Select all
JSON-TEMPLATE> (defparameter *tmpl* (parse-template-string "
<h1>{title|html}</h1>
{.section people}
<ul>
{.repeated section @}
<li>{name} ({age} years)</li>
{.end}
</ul>
{.or}
<p>No one's registered.</p>
{.end}"))
*TMPL*
Code: Select all
JSON-TEMPLATE> (expand-template *tmpl*
'(:title "<Registered People>"
:people ((:name "Nathalie" :age 24)
(:name "Heinrich" :age 28)
(:name "Hans" :age 25))))
"
<h1><Registered People></h1>
<ul>
<li>Nathalie (24 years)</li>
<li>Heinrich (28 years)</li>
<li>Hans (25 years)</li>
</ul>
"
Code: Select all
JSON-TEMPLATE> (expand-template *tmpl*
'(:title "<Registered People>"
:people ()))
"
<h1><Registered People></h1>
<p>No one's registered.</p>
"
