package be.nikiroo.fanfix.reader.ui; 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 GuiReaderViewerTextOutput { private StringBuilder builder; private BasicOutput output; private Story fakeStory; /** * Create a new {@link GuiReaderViewerTextOutput} that will convert a * {@link Chapter} into HTML3 suited for Java Swing. */ public GuiReaderViewerTextOutput() { builder = new StringBuilder(); fakeStory = new Story(); output = new BasicOutput() { private boolean paraInQuote; @Override protected void writeChapterHeader(Chapter chap) throws IOException { builder.append(""); builder.append("

"); builder.append("Chapter "); builder.append(chap.getNumber()); 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(""); 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: 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) { return "" + word + ""; } @Override protected String italize(String word) { return "" + word + ""; } }; } /** * Convert the chapter into HTML3 code. * * @param chap * the {@link Chapter} to convert. * * @return HTML3 code tested with Java Swing */ public String convert(Chapter chap) { 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(); } }