package be.nikiroo.fanfix.output;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import be.nikiroo.fanfix.Instance;
import be.nikiroo.fanfix.bundles.StringId;
import be.nikiroo.fanfix.data.Chapter;
import be.nikiroo.fanfix.data.Paragraph;
import be.nikiroo.fanfix.data.Paragraph.ParagraphType;
import be.nikiroo.fanfix.data.Story;
import be.nikiroo.utils.StringUtils;
class Html extends BasicOutput {
protected FileWriter writer;
private boolean inDialogue = false;
private boolean inNormal = false;
@Override
public File process(Story story, File targetDir, String targetName)
throws IOException {
File target = new File(targetDir, targetName);
target.mkdir();
targetName = new File(targetName, "index").getPath();
String targetNameOrig = targetName;
targetName += getDefaultExtension();
target = new File(targetDir, targetName);
writer = new FileWriter(target);
try {
super.process(story, targetDir, targetNameOrig);
} finally {
writer.close();
writer = null;
}
return target;
}
@Override
public String getDefaultExtension() {
return ".html";
}
@Override
protected void writeStoryHeader(Story story) throws IOException {
String title = "";
if (story.getMeta() != null) {
title = story.getMeta().getTitle();
}
writer.write("");
writer.write("\n");
writer.write("\n
");
writer.write("\n ");
writer.write("\n ");
writer.write("\n " + StringUtils.xmlEscape(title) + "");
writer.write("\n");
writer.write("\n\n");
writer.write("" + StringUtils.xmlEscape(title) + "
\n\n");
}
@Override
protected void writeStoryFooter(Story story) throws IOException {
writer.write("\n");
}
@Override
protected void writeChapterHeader(Chapter chap) throws IOException {
String txt;
if (chap.getName() != null && !chap.getName().isEmpty()) {
txt = Instance.getTrans().getString(StringId.CHAPTER_NAMED,
chap.getNumber(), chap.getName());
} else {
txt = Instance.getTrans().getString(StringId.CHAPTER_UNNAMED,
chap.getNumber());
}
writer.write("" + StringUtils.xmlEscape(txt) + "
\n\n");
inDialogue = false;
inNormal = false;
}
@Override
protected void writeParagraphHeader(Paragraph para) throws IOException {
if (para.getType() == ParagraphType.QUOTE && !inDialogue) {
writer.write(" \n");
inDialogue = true;
} else if (para.getType() != ParagraphType.QUOTE && inDialogue) {
writer.write("
\n");
inDialogue = false;
}
if (para.getType() == ParagraphType.NORMAL && !inNormal) {
writer.write(" \n");
inNormal = true;
} else if (para.getType() != ParagraphType.NORMAL && inNormal) {
writer.write("
\n");
inNormal = false;
}
switch (para.getType()) {
case BLANK:
writer.write(" ");
break;
case BREAK:
writer.write("
");
break;
case NORMAL:
writer.write(" ");
break;
case QUOTE:
writer.write(" — ");
break;
case IMAGE:
// TODO
writer.write("
"
+ StringUtils.xmlEscape(para.getContent()) + "");
break;
}
}
@Override
protected void writeParagraphFooter(Paragraph para) throws IOException {
switch (para.getType()) {
case NORMAL:
writer.write("\n");
break;
case QUOTE:
writer.write("
\n");
break;
default:
writer.write("\n");
break;
}
}
@Override
protected void writeTextLine(ParagraphType type, String line)
throws IOException {
switch (type) {
case QUOTE:
case NORMAL:
writer.write(decorateText(StringUtils.xmlEscape(line)));
break;
default:
break;
}
}
@Override
protected String enbold(String word) {
return "" + word + "";
}
@Override
protected String italize(String word) {
return "" + word + "";
}
}