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 + ""; } }