Summary
In the course of rewriting my website software, I've written a Common Lisp implementation of (most of) JSON Template.
JSON Template is a minimalistic, declarative template language.
Downloading
You can fetch the Mercurial repository using the following command:
hg clone http://matthias.benkard.de/code/cl-json-template/
(Mind the trailing slash. My web server is overly picky there.)
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> "
Comments
Submit a comment
Note: This website uses a JavaScript-based spam prevention system. Please enable JavaScript in your browser to post comments. Comment format is plain text. Use blank lines to separate paragraphs.