package freemarker.core;
import java.io.IOException;
import java.io.Writer;
import freemarker.template.TemplateModelException;
public abstract class CommonMarkupOutputFormat<MO extends CommonTemplateMarkupOutputModel>
extends MarkupOutputFormat<MO> {
protected CommonMarkupOutputFormat() {
}
@Override
public final MO fromPlainTextByEscaping(String textToEsc) throws TemplateModelException {
return newTemplateMarkupOutputModel(textToEsc, null);
}
@Override
public final MO fromMarkup(String markupText) throws TemplateModelException {
return newTemplateMarkupOutputModel(null, markupText);
}
@Override
public final void output(MO mo, Writer out) throws IOException, TemplateModelException {
String mc = mo.getMarkupContent();
if (mc != null) {
out.write(mc);
} else {
output(mo.getPlainTextContent(), out);
}
}
@Override
public abstract void output(String textToEsc, Writer out) throws IOException, TemplateModelException;
@Override
public final String getSourcePlainText(MO mo) throws TemplateModelException {
return mo.getPlainTextContent();
}
@Override
public final String getMarkupString(MO mo) throws TemplateModelException {
String mc = mo.getMarkupContent();
if (mc != null) {
return mc;
}
mc = escapePlainText(mo.getPlainTextContent());
mo.setMarkupContet(mc);
return mc;
}
@Override
public final MO concat(MO mo1, MO mo2) throws TemplateModelException {
String pc1 = mo1.getPlainTextContent();
String mc1 = mo1.getMarkupContent();
String pc2 = mo2.getPlainTextContent();
String mc2 = mo2.getMarkupContent();
String pc3 = pc1 != null && pc2 != null ? pc1 + pc2 : null;
String mc3 = mc1 != null && mc2 != null ? mc1 + mc2 : null;
if (pc3 != null || mc3 != null) {
return newTemplateMarkupOutputModel(pc3, mc3);
}
if (pc1 != null) {
return newTemplateMarkupOutputModel(null, getMarkupString(mo1) + mc2);
} else {
return newTemplateMarkupOutputModel(null, mc1 + getMarkupString(mo2));
}
}
@Override
public boolean isEmpty(MO mo) throws TemplateModelException {
String s = mo.getPlainTextContent();
if (s != null) {
return s.length() == 0;
}
return mo.getMarkupContent().length() == 0;
}
@Override
public boolean isOutputFormatMixingAllowed() {
return false;
}
@Override
public boolean isAutoEscapedByDefault() {
return true;
}
protected abstract MO newTemplateMarkupOutputModel(String plainTextContent, String markupContent)
throws TemplateModelException;
}