1 package be
.nikiroo
.gofetch
.output
;
3 import be
.nikiroo
.gofetch
.StringJustifier
;
4 import be
.nikiroo
.gofetch
.data
.Comment
;
5 import be
.nikiroo
.gofetch
.data
.Story
;
6 import be
.nikiroo
.gofetch
.support
.BasicSupport
.Type
;
8 public class Gopher
extends Output
{
9 static private final int LINE_SIZE
= 67;
11 public Gopher(Type type
, String hostname
, String preselector
, int port
) {
12 super(type
, hostname
, preselector
, port
);
16 public String
getIndexHeader() {
17 StringBuilder builder
= new StringBuilder();
19 appendCenter(builder
, "NEWS", true);
20 appendLeft(builder
, "", "");
21 appendLeft(builder
, "You will find here a few pages full of news.", "");
22 appendLeft(builder
, "", "");
25 "They are simply scrapped from their associated webpage and converted into a gopher friendly format, updated a few times a day.",
27 appendLeft(builder
, "", "");
29 return builder
.toString();
33 public String
getIndexFooter() {
38 public String
exportHeader(Story story
) {
39 return append(new StringBuilder(), story
, true).append("i\r\ni\r\n")
44 public String
export(Story story
) {
45 StringBuilder builder
= new StringBuilder();
46 append(builder
, story
, false);
48 builder
.append("i\r\n");
50 if (story
.getComments() != null) {
51 for (Comment comment
: story
.getComments()) {
52 append(builder
, comment
, "");
56 builder
.append("i\r\n");
58 return builder
.toString();
61 private StringBuilder
append(StringBuilder builder
, Comment comment
,
64 if (space
.length() > LINE_SIZE
- 20) {
65 space
= space
.substring(0, LINE_SIZE
- 20);
68 appendLeft(builder
, comment
.getTitle(), "** ", " ", space
);
69 appendLeft(builder
, "(" + comment
.getAuthor() + ")", " ", " ",
72 builder
.append("i\r\n");
74 for (String line
: comment
.getContentLines()) {
76 while (line
.length() > depth
&& line
.charAt(depth
) == '>') {
79 line
= line
.substring(depth
).trim();
82 for (int i
= 0; i
< depth
; i
++) {
90 appendLeft(builder
, line
, prep
, prep
, space
);
93 builder
.append("i\r\n");
94 for (Comment subComment
: comment
) {
95 append(builder
, subComment
, space
+ " ");
96 builder
.append("i\r\n");
102 private StringBuilder
append(StringBuilder builder
, Story story
,
105 appendCenter(builder
, story
.getTitle(), true);
106 builder
.append("i\r\n");
107 appendJustified(builder
, story
.getDetails(), " ");
108 builder
.append("i\r\n");
110 builder
.append("i o News link: ").append(story
.getUrlInternal())
112 builder
.append("i o Source link: ").append(story
.getUrlExternal())
114 builder
.append("i\r\n");
116 builder
.append("i\r\n");
118 appendJustified(builder
, story
.getFullContent(), " ");
120 builder
.append('1').append(story
.getTitle()) //
121 .append('\t').append(story
.getSelector()) //
122 .append('\t').append(hostname
) //
123 .append('\t').append(port
) //
125 appendJustified(builder
, story
.getDetails(), " ");
126 builder
.append("i\r\n");
128 appendJustified(builder
, story
.getContent(), " ");
131 builder
.append("i\r\n");
137 private static void appendCenter(StringBuilder builder
, String text
,
140 text
= text
.toUpperCase();
143 for (String line
: StringJustifier
.center(text
, LINE_SIZE
)) {
144 builder
.append("i").append(line
).append("\r\n");
149 private static void appendJustified(StringBuilder builder
, String text
,
151 for (String line
: StringJustifier
.full(text
,
152 LINE_SIZE
- space
.length())) {
153 builder
.append("i").append(line
).append("\r\n");
158 private static void appendLeft(StringBuilder builder
, String text
,
160 appendLeft(builder
, text
, "", "", space
);
164 private static void appendLeft(StringBuilder builder
, String text
,
165 String prependFirst
, String prependOthers
, String space
) {
166 String prepend
= prependFirst
;
167 for (String line
: StringJustifier
.left(text
,
168 LINE_SIZE
- space
.length())) {
169 builder
.append("i").append(space
).append(prepend
).append(line
)
171 prepend
= prependOthers
;