📄 htmlrenderer.java
字号:
package com.efsol.friki;
import java.util.Map;
import java.util.HashMap;
import java.io.StringReader;
import java.io.Writer;
import java.io.StringWriter;
import java.io.IOException;
import org.stringtree.factory.CachedStringFetcher;
import org.stringtree.factory.StringFetcher;
import org.stringtree.factory.memory.MapStringRepository;
import org.stringtree.template.TemplateEngine;
import org.stringtree.util.tract.Tract;
public class HTMLRenderer implements Renderer
{
private TemplateEngine engine;
private ContentFilter filter;
private StringFetcher templates;
private String unknown;
public HTMLRenderer(ContentFilter filter, StringFetcher templates,
String unknown)
{
engine = new TemplateEngine('@');
this.filter = filter;
this.templates = new CachedStringFetcher(templates);
this.unknown = unknown;
}
private String convert(String content)
throws IOException
{
StringWriter out = new StringWriter();
filter.filter(new StringReader(content), out);
return out.toString();
}
private String splitTitle(String name)
{
StringBuffer buf = new StringBuffer();
for (int i = 0; i < name.length(); ++i)
{
char c = name.charAt(i);
if (c == '_')
{
buf.append(' ');
}
else
{
if (i > 0 && Character.isUpperCase(c))
{
buf.append(' ');
}
buf.append(c);
}
}
return buf.toString();
}
private void putDefaultValues(Map map)
{
map.put("previous.version", "old/EmptyPage");
map.put("page.name", "old/EmptyPage");
map.put("last.edit", "never");
}
public void render(Tract page, String mode, Writer out, boolean isFiltered)
throws IOException
{
String content = page.getContent();
if (isFiltered)
{
content = convert(content);
}
Map tokens = new HashMap();
putDefaultValues(tokens);
tokens.putAll(page);
tokens.put("CONTENT", content);
tokens.put("TITLE", splitTitle((String)tokens.get("page.name")));
String template = templates.get(mode);
engine.expand(new StringReader(template), out, new MapStringRepository(tokens));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -