No-template

From unkrig.de
Revision as of 16:08, 21 May 2015 by Aunkrig (talk | contribs) (Created page with "A super-small Java library for templating, i.e. generating text files (HTML, XML, whatever) from a "template" text file. Working with the common templating frameworks (Freema...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

A super-small Java library for templating, i.e. generating text files (HTML, XML, whatever) from a "template" text file.

Working with the common templating frameworks (Freemarker, JSP, PHP, ...), you probably agree on the following inconveniences and problems:

  • Each framework has its own syntax and semantics for implementing the dynamic part of a document (variables, control structures, in-source documentation, ...).
  • Because the nesting of control structures and the indentation of the static content are generally not identical, it is very hard to write easily-readable code.
  • Most templating frameworks have no static typing, i.e. you must always be careful when using (or worse: re-using) variables, because there is no "compile-time checking" of types.
  • Powerful debuggers are not available in many cases, so you typcially revert to looking at log files.
  • Because there are so many different templating engines, you favorite IDE possibly offers no advanced editor with code completion, refactoring, and the like.
  • If the templating engine involves some kind of an "translation" step, then that must be executed on each and every code change - at worst manually.

The approach of no-template is as simple as it could be:

package com.acme.notemplatedemo;

import de.unkrig.notemplate.*;

public
class MyTemplate extends NoTemplate {

    public
    MyTemplate(Writer out) {
        super(writer);
    }

    public void
    render(String firstName, String lastName, int age) {

        l(
"<!DOCTYPE html>",
"",
 "  ",
 "    My first template",
 "  ",
 "  ",
 "    This is my very first template.",
 "    
", " Hello " + firstName + " " + lastName + ",", " you must be " + age + " years old!", " ", "" ); } public static void main(String[] args) { new MyTemplate(new OutputStreamWriter(System.out)).render("John", "Doe", 99); } }

And that would be it!