Update nikiroo-utils, bugfixes:
[nikiroo-utils.git] / src / be / nikiroo / fanfix / output / Text.java
CommitLineData
08fe2e33
NR
1package be.nikiroo.fanfix.output;
2
3d247bc3 3import java.io.BufferedWriter;
08fe2e33 4import java.io.File;
3d247bc3 5import java.io.FileOutputStream;
08fe2e33 6import java.io.IOException;
3d247bc3 7import java.io.OutputStreamWriter;
08fe2e33
NR
8
9import be.nikiroo.fanfix.Instance;
10import be.nikiroo.fanfix.bundles.StringId;
11import be.nikiroo.fanfix.data.Chapter;
12import be.nikiroo.fanfix.data.MetaData;
13import be.nikiroo.fanfix.data.Paragraph;
08fe2e33 14import be.nikiroo.fanfix.data.Paragraph.ParagraphType;
3d247bc3 15import be.nikiroo.fanfix.data.Story;
08fe2e33
NR
16
17class Text extends BasicOutput {
3d247bc3 18 protected BufferedWriter writer;
08fe2e33
NR
19 protected File targetDir;
20
21 @Override
22 public File process(Story story, File targetDir, String targetName)
23 throws IOException {
24 String targetNameOrig = targetName;
10d558d2 25 targetName += getDefaultExtension(false);
08fe2e33
NR
26
27 this.targetDir = targetDir;
28
29 File target = new File(targetDir, targetName);
30
3d247bc3
NR
31 writer = new BufferedWriter(new OutputStreamWriter(
32 new FileOutputStream(target), "UTF-8"));
08fe2e33
NR
33 try {
34 super.process(story, targetDir, targetNameOrig);
35 } finally {
36 writer.close();
37 writer = null;
38 }
39
40 return target;
41 }
42
43 @Override
10d558d2 44 public String getDefaultExtension(boolean readerTarget) {
08fe2e33
NR
45 return ".txt";
46 }
47
48 @Override
49 protected void writeStoryHeader(Story story) throws IOException {
50 String title = "";
51 String author = null;
52 String date = null;
53
54 MetaData meta = story.getMeta();
55 if (meta != null) {
56 title = meta.getTitle() == null ? "" : meta.getTitle();
57 author = meta.getAuthor();
58 date = meta.getDate();
59 }
60
61 writer.write(title);
62 writer.write("\n");
63 if (author != null && !author.isEmpty()) {
a7d266e6
NR
64 writer.write(Instance.getTrans().getString(StringId.BY) + " "
65 + author);
08fe2e33
NR
66 }
67 if (date != null && !date.isEmpty()) {
68 writer.write(" (");
69 writer.write(date);
70 writer.write(")");
71 }
72 writer.write("\n");
73
74 // resume:
75 if (meta != null && meta.getResume() != null) {
76 writeChapter(meta.getResume());
77 }
78 }
79
80 @Override
81 protected void writeChapterHeader(Chapter chap) throws IOException {
82 String txt;
83 if (chap.getName() != null && !chap.getName().isEmpty()) {
84 txt = Instance.getTrans().getString(StringId.CHAPTER_NAMED,
85 chap.getNumber(), chap.getName());
86 } else {
87 txt = Instance.getTrans().getString(StringId.CHAPTER_UNNAMED,
88 chap.getNumber());
89 }
90
91 writer.write("\n" + txt + "\n");
92 for (int i = 0; i < txt.length(); i++) {
93 writer.write("—");
94 }
95 writer.write("\n\n");
96 }
97
98 @Override
99 protected void writeParagraphFooter(Paragraph para) throws IOException {
100 writer.write("\n");
101 }
102
103 @Override
104 protected void writeParagraphHeader(Paragraph para) throws IOException {
105 if (para.getType() == ParagraphType.IMAGE) {
106 File file = new File(targetDir, getCurrentImageBestName(true));
2a25f781 107 Instance.getCache().saveAsImage(para.getContentImage(), file);
08fe2e33
NR
108 }
109 }
110
111 @Override
112 protected void writeTextLine(ParagraphType type, String line)
113 throws IOException {
114 switch (type) {
115 case BLANK:
116 break;
117 case BREAK:
118 writer.write("\n* * *\n");
119 break;
120 case NORMAL:
121 case QUOTE:
122 writer.write(line);
123 break;
124 case IMAGE:
125 writer.write("[" + getCurrentImageBestName(true) + "]");
126 break;
127 }
128 }
129}