Commit | Line | Data |
---|---|---|
08fe2e33 NR |
1 | package be.nikiroo.fanfix.output; |
2 | ||
3d247bc3 | 3 | import java.io.BufferedWriter; |
08fe2e33 | 4 | import java.io.File; |
3d247bc3 | 5 | import java.io.FileOutputStream; |
08fe2e33 | 6 | import java.io.IOException; |
3d247bc3 | 7 | import java.io.OutputStreamWriter; |
08fe2e33 NR |
8 | |
9 | import be.nikiroo.fanfix.Instance; | |
10 | import be.nikiroo.fanfix.bundles.StringId; | |
11 | import be.nikiroo.fanfix.data.Chapter; | |
12 | import be.nikiroo.fanfix.data.MetaData; | |
13 | import be.nikiroo.fanfix.data.Paragraph; | |
08fe2e33 | 14 | import be.nikiroo.fanfix.data.Paragraph.ParagraphType; |
3d247bc3 | 15 | import be.nikiroo.fanfix.data.Story; |
08fe2e33 NR |
16 | |
17 | class 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 | } |