Commit | Line | Data |
---|---|---|
73785268 NR |
1 | package be.nikiroo.gofetch.output; |
2 | ||
3 | import java.util.List; | |
4 | ||
5 | import be.nikiroo.gofetch.StringJustifier; | |
6 | import be.nikiroo.gofetch.data.Comment; | |
7 | import be.nikiroo.gofetch.data.Story; | |
8 | import be.nikiroo.gofetch.support.BasicSupport.Type; | |
9 | ||
10 | public class Gopher extends Output { | |
11 | static private final int LINE_SIZE = 70; | |
12 | ||
13 | private String hostname; | |
14 | private int port; | |
15 | ||
16 | public Gopher(Type type, String hostname, int port) { | |
17 | super(type); | |
18 | ||
19 | this.hostname = hostname; | |
20 | this.port = port; | |
21 | } | |
22 | ||
23 | @Override | |
24 | public String getIndexHeader() { | |
25 | return "iHello world!\r\niThis is my news site.\r\ni\r\n"; | |
26 | } | |
27 | ||
28 | @Override | |
29 | public String getIndexFooter() { | |
30 | return ""; | |
31 | } | |
32 | ||
33 | @Override | |
34 | public String export(Story story) { | |
35 | return append(new StringBuilder(), story, false).append("i\r\ni\r\n") | |
36 | .toString(); | |
37 | } | |
38 | ||
39 | @Override | |
40 | public String export(Story story, List<Comment> comments) { | |
41 | StringBuilder builder = new StringBuilder(); | |
42 | append(builder, story, true); | |
43 | ||
44 | builder.append("i\r\n"); | |
45 | ||
46 | for (Comment comment : comments) { | |
47 | append(builder, comment, ""); | |
48 | } | |
49 | ||
50 | builder.append("i\r\n"); | |
51 | ||
52 | return builder.toString(); | |
53 | } | |
54 | ||
55 | private StringBuilder append(StringBuilder builder, Comment comment, | |
56 | String space) { | |
57 | ||
58 | if (space.length() > LINE_SIZE - 20) { | |
59 | space = space.substring(0, LINE_SIZE - 20); | |
60 | } | |
61 | ||
62 | appendLeft(builder, comment.getTitle(), ">> ", " ", space); | |
63 | appendLeft(builder, "(" + comment.getAuthor() + ")", " ", " ", | |
64 | space); | |
65 | ||
66 | builder.append("i\r\n"); | |
67 | ||
68 | appendLeft(builder, comment.getContent(), " ", " ", space); | |
69 | ||
70 | builder.append("i\r\n"); | |
71 | for (Comment subComment : comment) { | |
72 | append(builder, subComment, space + " "); | |
73 | builder.append("i\r\n"); | |
74 | } | |
75 | ||
76 | return builder; | |
77 | } | |
78 | ||
79 | private StringBuilder append(StringBuilder builder, Story story, | |
80 | boolean links) { | |
81 | if (links) { | |
82 | appendCenter(builder, story.getTitle(), true); | |
83 | builder.append("i\r\n"); | |
84 | appendLeft(builder, story.getDetails(), "", "", " "); | |
85 | builder.append("i\r\n"); | |
86 | builder.append("i o News link: ").append(story.getUrlInternal()); | |
87 | builder.append("i\r\n"); | |
88 | builder.append("i o Source link: ").append(story.getUrlExternal()); | |
89 | builder.append("i\r\n"); | |
90 | } else { | |
91 | builder.append('1').append(story.getTitle()) // | |
92 | .append('\t').append("0").append(story.getSelector()) // | |
93 | .append('\t').append(hostname) // | |
94 | .append('\t').append(port) // | |
95 | .append("\r\n"); | |
96 | appendLeft(builder, story.getDetails(), "", "", " "); | |
97 | } | |
98 | ||
99 | builder.append("i\r\n"); | |
100 | ||
101 | appendLeft(builder, story.getContent(), "", "", " "); | |
102 | ||
103 | builder.append("i\r\n"); | |
104 | ||
105 | return builder; | |
106 | } | |
107 | ||
108 | // note: adds "i" | |
109 | private static void appendCenter(StringBuilder builder, String text, | |
110 | boolean allCaps) { | |
111 | if (allCaps) { | |
112 | text = text.toUpperCase(); | |
113 | } | |
114 | ||
115 | for (String line : StringJustifier.center(text, LINE_SIZE)) { | |
116 | builder.append("i").append(line).append("\r\n"); | |
117 | } | |
118 | } | |
119 | ||
120 | // note: adds "i" | |
121 | private static void appendLeft(StringBuilder builder, String text, | |
122 | String prependFirst, String prependOthers, String space) { | |
123 | String prepend = prependFirst; | |
124 | for (String line : StringJustifier.left(text, | |
125 | LINE_SIZE - space.length())) { | |
126 | builder.append("i").append(space).append(prepend).append(line) | |
127 | .append("\r\n"); | |
128 | prepend = prependOthers; | |
129 | } | |
130 | } | |
131 | } |