1 package be
.nikiroo
.gofetch
.output
;
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
;
10 public class Gopher
extends Output
{
11 static private final int LINE_SIZE
= 70;
13 public Gopher(Type type
, String hostname
, String preselector
, int port
) {
14 super(type
, hostname
, preselector
, port
);
18 public String
getIndexHeader() {
19 StringBuilder builder
= new StringBuilder();
21 appendCenter(builder
, "NEWS", true);
22 appendLeft(builder
, "", "");
23 appendLeft(builder
, "You will find here a few pages full of news.", "");
24 appendLeft(builder
, "", "");
27 "They are simply scrapped from their associated webpage and converted into a gopher friendly format, updated a few times a day.",
29 appendLeft(builder
, "", "");
31 return builder
.toString();
35 public String
getIndexFooter() {
40 public String
export(Story story
) {
41 return append(new StringBuilder(), story
, false).append("i\r\ni\r\n")
46 public String
export(Story story
, List
<Comment
> comments
) {
47 StringBuilder builder
= new StringBuilder();
48 append(builder
, story
, true);
50 builder
.append("i\r\n");
52 if (comments
!= null) {
53 for (Comment comment
: comments
) {
54 append(builder
, comment
, "");
58 builder
.append("i\r\n");
60 return builder
.toString();
63 private StringBuilder
append(StringBuilder builder
, Comment comment
,
66 if (space
.length() > LINE_SIZE
- 20) {
67 space
= space
.substring(0, LINE_SIZE
- 20);
70 appendLeft(builder
, comment
.getTitle(), ">> ", " ", space
);
71 appendLeft(builder
, "(" + comment
.getAuthor() + ")", " ", " ",
74 builder
.append("i\r\n");
76 appendLeft(builder
, comment
.getContent(), " ", " ", space
);
78 builder
.append("i\r\n");
79 for (Comment subComment
: comment
) {
80 append(builder
, subComment
, space
+ " ");
81 builder
.append("i\r\n");
87 private StringBuilder
append(StringBuilder builder
, Story story
,
90 appendCenter(builder
, story
.getTitle(), true);
91 builder
.append("i\r\n");
92 appendLeft(builder
, story
.getDetails(), " ");
93 builder
.append("i\r\n");
94 builder
.append("i o News link: ").append(story
.getUrlInternal())
96 builder
.append("i o Source link: ").append(story
.getUrlExternal())
98 builder
.append("i\r\n");
100 builder
.append('1').append(story
.getTitle()) //
101 .append('\t').append("0").append(story
.getSelector()) //
102 .append('\t').append(hostname
) //
103 .append('\t').append(port
) //
105 appendLeft(builder
, story
.getDetails(), " ");
108 builder
.append("i\r\n");
110 appendLeft(builder
, story
.getContent(), " ");
112 builder
.append("i\r\n");
118 private static void appendCenter(StringBuilder builder
, String text
,
121 text
= text
.toUpperCase();
124 for (String line
: StringJustifier
.center(text
, LINE_SIZE
)) {
125 builder
.append("i").append(line
).append("\r\n");
130 private static void appendLeft(StringBuilder builder
, String text
,
132 appendLeft(builder
, text
, "", "", space
);
136 private static void appendLeft(StringBuilder builder
, String text
,
137 String prependFirst
, String prependOthers
, String space
) {
138 String prepend
= prependFirst
;
139 for (String line
: StringJustifier
.left(text
,
140 LINE_SIZE
- space
.length())) {
141 builder
.append("i").append(space
).append(prepend
).append(line
)
143 prepend
= prependOthers
;