X-Git-Url: http://git.nikiroo.be/?p=fanfix.git;a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2Foutput%2FHtml.java;h=29a0f32b6404e6b1c0822e6e45d11b6783601905;hp=4226bf84b75dfa6ea97d3770c93a44416f04e38d;hb=a6395bef99a8e917f67341ef1906917b87df24a4;hpb=73ce17ef4569e43d24f8413ad6b59bc2906aec07 diff --git a/src/be/nikiroo/fanfix/output/Html.java b/src/be/nikiroo/fanfix/output/Html.java index 4226bf8..29a0f32 100644 --- a/src/be/nikiroo/fanfix/output/Html.java +++ b/src/be/nikiroo/fanfix/output/Html.java @@ -1,6 +1,167 @@ package be.nikiroo.fanfix.output; -//TODO: implement it for LocalReader -class Html extends Text { +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 + ""; + } }