/**
* Copyright (C) 2013-2016 The Rythm Engine project
* for LICENSE and other details see:
* https://github.com/rythmengine/rythmengine
*/
package org.rythmengine.internal;
import org.rythmengine.utils.Escape;
import org.rythmengine.utils.S;
import org.rythmengine.utils.TextBuilder;
import org.rythmengine.utils.RawData;
/**
* A special TextBuilder provides additional print utilities for expressions
*/
public class TemplateBuilder extends TextBuilder {
/**
* Return the default {@link org.rythmengine.utils.Escape escape method}.
* <p/>
* <p>This implementation returns {@link org.rythmengine.utils.Escape#RAW}.
* But the sub class could override this method to return different escape method</p>
*
* @return {@link org.rythmengine.utils.Escape escape}
*/
protected Escape __defaultEscape() {
return Escape.RAW;
}
// --- print expression interface
/**
* Print a char expression. same effect as {@link #p(char)}
*
* @param c
* @return the current builder
*/
public final TextBuilder pe(char c) {
return p(c);
}
/**
* Print a byte expression. same effect as {@link #p(byte)}
*
* @param b
* @return the current builder
*/
public final TextBuilder pe(byte b) {
return p(b);
}
/**
* Print an integer expression. same effect as {@link #p(int)}
*
* @param i
* @return the current builder
*/
public final TextBuilder pe(int i) {
return p(i);
}
/**
* Print a long expression. same effect as {@link #p(long)}
*
* @param l
* @return the current builder
*/
public final TextBuilder pe(long l) {
return p(l);
}
/**
* Print a float expression. same effect as {@link #p(float)}
*
* @param f
* @return the current builder
*/
public final TextBuilder pe(float f) {
return p(f);
}
/**
* Print a double. same effect as {@link #p(double)}
*
* @param d
* @return the current builder
*/
public final TextBuilder pe(double d) {
return p(d);
}
/**
* Print a boolean expression. same effect as {@link #p(boolean)}
*
* @param b
* @return the current builder
*/
public final TextBuilder pe(boolean b) {
return p(b);
}
/**
* Print a general expression with {@link #__defaultEscape() default escape} method
*
* @param o
* @return the current builder
*/
public TemplateBuilder pe(Object o) {
return pe(o, null);
}
/**
* Print a general expression, using specified
* {@link org.rythmengine.utils.Escape escape method}
*
* @param o
* @param escape
* @return the current builder
*/
public TemplateBuilder pe(Object o, Escape escape) {
if (null != o) {
if (o instanceof RawData) {
return (TemplateBuilder) p(o);
}
if (null == escape) {
escape = __defaultEscape();
}
switch (escape) {
case RAW:
return (TemplateBuilder) p(S.raw(o));
case HTML:
return (TemplateBuilder) p(S.escapeHtml(o));
case JSON:
return (TemplateBuilder) p(S.escapeJson(o));
case JS:
return (TemplateBuilder) p(S.escapeJavaScript(o));
case CSV:
return (TemplateBuilder) p(S.escapeCsv(o));
case XML:
return (TemplateBuilder) p(S.escapeXml(o));
}
}
return this;
}
/**
* See {@link #p(char)}
*/
public final TextBuilder pe(char c, Escape escape) {
return p(c);
}
/**
* See {@link #p(int)}
*/
public final TextBuilder pe(int i, Escape escape) {
return p(i);
}
/**
* See {@link #p(long)}
*/
public final TextBuilder pe(long l, Escape escape) {
return p(l);
}
/**
* See {@link #p(float)}
*/
public final TextBuilder pe(float f, Escape escape) {
return p(f);
}
/**
* See {@link #p(double)}
*/
public final TextBuilder pe(double d, Escape escape) {
return p(d);
}
/**
* See {@link #p(boolean)}
*/
public final TextBuilder pe(boolean b, Escape escape) {
return p(b);
}
}