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.library.BasicLibrary;
private JLabel chapterLabel;
private GuiReaderPropertiesPane descPane;
private int currentChapter = -42; // cover = -1
+ private GuiReaderTextViewerOutput htmlOutput = new GuiReaderTextViewerOutput();
public GuiReaderTextViewer(BasicLibrary lib, Story story) {
super(story.getMeta().getLuid() + ": " + story.getMeta().getTitle());
chapterLabel.setText("<HTML> <B>Chapter "
+ chap.getNumber() + "</B>: " + chap.getName() + "</HTML>");
- StringBuilder builder = new StringBuilder();
- addChapter(builder, chap);
- text.setText(builder.toString());
+ text.setText(htmlOutput.convert(chap));
}
}
private void setCoverPage() {
descPane.setVisible(true);
}
-
- // htmlInsert = no need to add HTML tags
- private void addChapter(StringBuilder builder, Chapter chap) {
- builder.append("<HTML>");
-
- builder.append("<H1>");
- builder.append("Chapter ");
- builder.append(chap.getNumber());
- builder.append(": ");
- builder.append(chap.getName());
- builder.append("</H1>");
-
- builder.append("<JUSTIFY>");
- for (Paragraph para : chap) {
- addPara(builder, para);
- }
-
- if (paraInQuote) {
- builder.append("</DIV>");
- }
- paraInQuote = false;
-
- builder.append("</JUSTIFY>");
-
- builder.append("</HTML>");
- }
-
- private boolean paraInQuote;
-
- private void addPara(StringBuilder builder, Paragraph para) {
- switch (para.getType()) {
- case NORMAL:
- builder.append(para.getContent());
- builder.append("<BR>");
- break;
- case BLANK:
- builder.append("<BR>");
- break;
- case BREAK:
- builder.append("<BR>* * *<BR><BR>");
- break;
- case QUOTE:
- if (!paraInQuote) {
- builder.append("<DIV>");
- } else {
- builder.append("</DIV>");
- }
- paraInQuote = !paraInQuote;
-
- builder.append("<DIV>");
- builder.append("– ");
- builder.append(para.getContent());
- builder.append("</DIV>");
-
- break;
- case IMAGE:
- }
- }
}
--- /dev/null
+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.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 GuiReaderTextViewerOutput {
+ private StringBuilder builder;
+ private BasicOutput output;
+ private Story fakeStory;
+
+ /**
+ * Create a new {@link GuiReaderTextViewerOutput} that will convert a
+ * {@link Chapter} into HTML3 suited for Java Swing.
+ */
+ public GuiReaderTextViewerOutput() {
+ builder = new StringBuilder();
+ fakeStory = new Story();
+
+ output = new BasicOutput() {
+ private boolean paraInQuote;
+
+ @Override
+ protected void writeChapterHeader(Chapter chap) throws IOException {
+ builder.append("<HTML>");
+
+ builder.append("<H1>");
+ builder.append("Chapter ");
+ builder.append(chap.getNumber());
+ builder.append(": ");
+ builder.append(chap.getName());
+ builder.append("</H1>");
+
+ builder.append("<JUSTIFY>");
+ for (Paragraph para : chap) {
+ writeParagraph(para);
+ }
+ }
+
+ @Override
+ protected void writeChapterFooter(Chapter chap) throws IOException {
+ if (paraInQuote) {
+ builder.append("</DIV>");
+ }
+ paraInQuote = false;
+
+ builder.append("</JUSTIFY>");
+ builder.append("</HTML>");
+ }
+
+ @Override
+ protected void writeParagraph(Paragraph para) throws IOException {
+ switch (para.getType()) {
+ case NORMAL:
+ builder.append(decorateText(para.getContent()));
+ builder.append("<BR>");
+ break;
+ case BLANK:
+ builder.append("<BR>");
+ break;
+ case BREAK:
+ builder.append("<BR>* * *<BR><BR>");
+ break;
+ case QUOTE:
+ if (!paraInQuote) {
+ builder.append("<DIV>");
+ } else {
+ builder.append("</DIV>");
+ }
+ paraInQuote = !paraInQuote;
+
+ builder.append("<DIV>");
+ builder.append("– ");
+ builder.append(decorateText(para.getContent()));
+ builder.append("</DIV>");
+
+ break;
+ case IMAGE:
+ }
+ }
+
+ @Override
+ protected String enbold(String word) {
+ return "<B COLOR='BLUE'>" + word + "</B>";
+ }
+
+ @Override
+ protected String italize(String word) {
+ return "<I COLOR='GRAY'>" + word + "</I>";
+ }
+ };
+ }
+
+ /**
+ * 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.getTraceHandler().error(e);
+ }
+ return builder.toString();
+ }
+}