X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Ffanfix%2Freader%2FTextOutput.java;fp=src%2Fbe%2Fnikiroo%2Ffanfix%2Freader%2FTextOutput.java;h=60b3a7f7c1db5d5ae40b3ebe4e5cde9754817869;hb=f433d15308b70e23280a65cef8c54002a7a971ce;hp=0000000000000000000000000000000000000000;hpb=5ddc36eacad78641be59db473f9bae9bad47eb20;p=fanfix.git diff --git a/src/be/nikiroo/fanfix/reader/TextOutput.java b/src/be/nikiroo/fanfix/reader/TextOutput.java new file mode 100644 index 0000000..60b3a7f --- /dev/null +++ b/src/be/nikiroo/fanfix/reader/TextOutput.java @@ -0,0 +1,148 @@ +package be.nikiroo.fanfix.reader; + +import java.io.IOException; +import java.util.Arrays; + +import be.nikiroo.fanfix.Instance; +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.fanfix.output.BasicOutput; + +/** + * This class can export a chapter into HTML3 code ready for Java Swing support. + * + * @author niki + */ +public class TextOutput { + private StringBuilder builder; + private BasicOutput output; + private Story fakeStory; + private boolean chapterName; + + /** + * Create a new {@link TextOutput} that will convert a {@link Chapter} into + * HTML3 suited for Java Swing. + * + * @param standalone + * TRUE if you want a standalone document (with an tag) + */ + public TextOutput(final boolean standalone) { + builder = new StringBuilder(); + fakeStory = new Story(); + + output = new BasicOutput() { + private boolean paraInQuote; + + @Override + protected void writeChapterHeader(Chapter chap) throws IOException { + if (standalone) { + builder.append(""); + } + + if (chapterName) { + builder.append("

"); + builder.append("Chapter "); + builder.append(chap.getNumber()); + if (chap.getName() != null + && !chap.getName().trim().isEmpty()) { + builder.append(": "); + builder.append(chap.getName()); + } + builder.append("

"); + } + + builder.append("
"); + } + + @Override + protected void writeChapterFooter(Chapter chap) throws IOException { + if (paraInQuote) { + builder.append("
"); + } + paraInQuote = false; + + builder.append(""); + + if (standalone) { + builder.append(""); + } + } + + @Override + protected void writeParagraph(Paragraph para) throws IOException { + if ((para.getType() == ParagraphType.QUOTE) == !paraInQuote) { + paraInQuote = !paraInQuote; + if (paraInQuote) { + builder.append("
"); + builder.append("
"); + } else { + builder.append("
"); + builder.append("
"); + } + } + + switch (para.getType()) { + case NORMAL: + builder.append("    "); + builder.append(decorateText(para.getContent())); + builder.append("
"); + break; + case BLANK: + builder.append("
"); + break; + case BREAK: + // Used to be 7777DD + builder.append("

"); + builder.append("* * *"); + builder.append("

"); + builder.append("
"); + break; + case QUOTE: + builder.append("
"); + builder.append("    "); + builder.append("— "); + builder.append(decorateText(para.getContent())); + builder.append("
"); + + break; + case IMAGE: + } + } + + @Override + protected String enbold(String word) { + // Used to be COLOR='#7777DD' + return "" + word + ""; + } + + @Override + protected String italize(String word) { + return "" + word + ""; + } + }; + } + + /** + * Convert the chapter into HTML3 code. + * + * @param chap + * the {@link Chapter} to convert + * @param chapterName + * display the chapter name + * + * @return HTML3 code tested with Java Swing + */ + public String convert(Chapter chap, boolean chapterName) { + this.chapterName = chapterName; + builder.setLength(0); + try { + fakeStory.setChapters(Arrays.asList(chap)); + output.process(fakeStory, null, null); + } catch (IOException e) { + Instance.getInstance().getTraceHandler().error(e); + } + return builder.toString(); + } +}