X-Git-Url: http://git.nikiroo.be/?p=fanfix.git;a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2Foutput%2FText.java;fp=src%2Fbe%2Fnikiroo%2Ffanfix%2Foutput%2FText.java;h=22056ed3cf0185ab5407903ce42b4036a7b91590;hp=0000000000000000000000000000000000000000;hb=08fe2e33007063e30fe22dc1d290f8afaa18eb1d;hpb=ed48062ebfb0d611b74834e313bfb0a2b81416e6 diff --git a/src/be/nikiroo/fanfix/output/Text.java b/src/be/nikiroo/fanfix/output/Text.java new file mode 100644 index 0000000..22056ed --- /dev/null +++ b/src/be/nikiroo/fanfix/output/Text.java @@ -0,0 +1,126 @@ +package be.nikiroo.fanfix.output; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.net.URL; + +import be.nikiroo.fanfix.Instance; +import be.nikiroo.fanfix.bundles.StringId; +import be.nikiroo.fanfix.data.Chapter; +import be.nikiroo.fanfix.data.MetaData; +import be.nikiroo.fanfix.data.Paragraph; +import be.nikiroo.fanfix.data.Story; +import be.nikiroo.fanfix.data.Paragraph.ParagraphType; + +class Text extends BasicOutput { + protected FileWriter writer; + protected File targetDir; + + @Override + public File process(Story story, File targetDir, String targetName) + throws IOException { + String targetNameOrig = targetName; + targetName += getDefaultExtension(); + + this.targetDir = targetDir; + + File target = new File(targetDir, targetName); + + writer = new FileWriter(target); + try { + super.process(story, targetDir, targetNameOrig); + } finally { + writer.close(); + writer = null; + } + + return target; + } + + @Override + protected String getDefaultExtension() { + return ".txt"; + } + + @Override + protected void writeStoryHeader(Story story) throws IOException { + String title = ""; + String author = null; + String date = null; + + MetaData meta = story.getMeta(); + if (meta != null) { + title = meta.getTitle() == null ? "" : meta.getTitle(); + author = meta.getAuthor(); + date = meta.getDate(); + } + + writer.write(title); + writer.write("\n"); + if (author != null && !author.isEmpty()) { + writer.write("©" + author); + } + if (date != null && !date.isEmpty()) { + writer.write(" ("); + writer.write(date); + writer.write(")"); + } + writer.write("\n"); + + // resume: + if (meta != null && meta.getResume() != null) { + writeChapter(meta.getResume()); + } + } + + @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("\n" + txt + "\n"); + for (int i = 0; i < txt.length(); i++) { + writer.write("—"); + } + writer.write("\n\n"); + } + + @Override + protected void writeParagraphFooter(Paragraph para) throws IOException { + writer.write("\n"); + } + + @Override + protected void writeParagraphHeader(Paragraph para) throws IOException { + if (para.getType() == ParagraphType.IMAGE) { + File file = new File(targetDir, getCurrentImageBestName(true)); + Instance.getCache().saveAsImage(new URL(para.getContent()), file); + } + } + + @Override + protected void writeTextLine(ParagraphType type, String line) + throws IOException { + switch (type) { + case BLANK: + break; + case BREAK: + writer.write("\n* * *\n"); + break; + case NORMAL: + case QUOTE: + writer.write(line); + break; + case IMAGE: + writer.write("[" + getCurrentImageBestName(true) + "]"); + break; + } + } +}