package de.neuland.jade4j.template;
import java.io.Writer;
import de.neuland.jade4j.Jade4J;
import de.neuland.jade4j.Jade4J.Mode;
import de.neuland.jade4j.compiler.Compiler;
import de.neuland.jade4j.exceptions.JadeCompilerException;
import de.neuland.jade4j.expression.ExpressionHandler;
import de.neuland.jade4j.lexer.token.Doctypes;
import de.neuland.jade4j.model.JadeModel;
import de.neuland.jade4j.parser.node.Node;
public class JadeTemplate {
private boolean prettyPrint = false;
private Node rootNode;
private boolean terse = false;
private boolean xml = false;
private TemplateLoader templateLoader;
private ExpressionHandler expressionHandler;
private String doctypeLine;
public void process(JadeModel model, Writer writer) throws JadeCompilerException {
Compiler compiler = new Compiler(rootNode);
compiler.setPrettyPrint(prettyPrint);
compiler.setTemplate(this);
compiler.setExpressionHandler(expressionHandler);
compiler.compile(model, writer);
}
public boolean isPrettyPrint() {
return prettyPrint;
}
public void setPrettyPrint(boolean prettyPrint) {
this.prettyPrint = prettyPrint;
}
public Node getRootNode() {
return rootNode;
}
public void setRootNode(Node rootNode) {
this.rootNode = rootNode;
}
public boolean isTerse() {
return terse;
}
public boolean isXml() {
return xml;
}
public void setTemplateLoader(TemplateLoader templateLoader) {
this.templateLoader = templateLoader;
}
public TemplateLoader getTemplateLoader() {
return templateLoader;
}
public void setDoctype(String name){
if (name == null) {
name = "default";
}
doctypeLine = Doctypes.get(name);
if (doctypeLine == null) {
doctypeLine = "<!DOCTYPE " + name + ">";
}
this.terse = "<!doctype html>".equals(this.doctypeLine.toLowerCase());
this.xml = doctypeLine.startsWith("<?xml");
}
public String getDoctypeLine() {
return doctypeLine;
}
public void setMode(Mode mode) {
xml = false;
terse = false;
switch (mode) {
case HTML:
terse = true;
break;
case XML:
xml = true;
break;
}
}
public void setExpressionHandler(ExpressionHandler expressionHandler) {
this.expressionHandler = expressionHandler;
}
public ExpressionHandler getExpressionHandler() {
return expressionHandler;
}
}