JSON Template for Common Lisp
Summary
An implementation of JSON Template in Common Lisp.
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
Missing Things
- Literals (like
{.space}
and{.meta-left}
/{.meta-right}
) - Multiple-argument formatters
- Options (like changing the meta character or the default formatter)
- Some kind of compilation for efficiency
Examples
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*
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>
"
JSON-TEMPLATE> (expand-template *tmpl*
'(:title "<Registered People>"
:people ()))
"
<h1><Registered People></h1>
<p>No one's registered.</p>
"