1 package be
.nikiroo
.gofetch
.output
;
3 import be
.nikiroo
.gofetch
.data
.Comment
;
4 import be
.nikiroo
.gofetch
.data
.Story
;
5 import be
.nikiroo
.gofetch
.support
.BasicSupport
;
6 import be
.nikiroo
.gofetch
.support
.Type
;
7 import be
.nikiroo
.utils
.StringUtils
;
8 import be
.nikiroo
.utils
.StringUtils
.Alignment
;
10 public class Gopher
extends Output
{
11 static private final int LINE_SIZE
= 67;
13 public Gopher(Type type
, String hostname
, String preselector
, int port
) {
14 super(type
, hostname
, preselector
, port
);
18 public String
getMainIndexHeader() {
19 StringBuilder builder
= new StringBuilder();
21 appendCenter(builder
, true, "NEWS", "", true);
22 appendLeft(builder
, true, "", "");
23 appendLeft(builder
, true,
24 "You will find here a few pages full of news.", "");
25 appendLeft(builder
, true, "", "");
29 "They are simply scrapped from their associated webpage and converted into a gopher friendly format, updated a few times a day.",
31 appendLeft(builder
, true, "", "");
33 return builder
.toString();
37 public String
getMainIndexFooter() {
42 public String
getIndexHeader(BasicSupport support
) {
43 StringBuilder builder
= new StringBuilder();
44 appendCenter(builder
, true, support
.getDescription(), "", true);
45 builder
.append("\r\n");
46 builder
.append("\r\n");
47 builder
.append("\r\n");
48 return builder
.toString();
52 public String
getIndexFooter(BasicSupport support
) {
57 public String
exportHeader(Story story
) {
58 return append(new StringBuilder(), story
, true).toString();
62 public String
export(Story story
) {
63 StringBuilder builder
= new StringBuilder();
64 append(builder
, story
, false);
66 builder
.append("\r\n");
68 if (story
.getComments() != null) {
69 for (Comment comment
: story
.getComments()) {
70 append(builder
, false, comment
, " ");
74 builder
.append("\r\n");
76 return builder
.toString();
79 private StringBuilder
append(StringBuilder builder
, boolean menu
,
80 Comment comment
, String space
) {
82 if (space
.length() > LINE_SIZE
- 20) {
83 space
= space
.substring(0, LINE_SIZE
- 20);
86 appendLeft(builder
, menu
, comment
.getTitle(), "** ", " ", space
);
88 if (comment
.getAuthor() != null
89 && !comment
.getAuthor().trim().isEmpty()) {
90 appendLeft(builder
, menu
, "(" + comment
.getAuthor() + ")", " ",
92 builder
.append((menu ?
"i" : "") + "\r\n");
95 for (String line
: comment
.getContentLines()) {
97 while (line
.length() > depth
&& line
.charAt(depth
) == '>') {
100 line
= line
.substring(depth
).trim();
103 for (int i
= 0; i
< depth
; i
++) {
111 appendLeft(builder
, menu
, line
, prep
, prep
, space
);
114 builder
.append((menu ?
"i" : "") + "\r\n");
115 for (Comment subComment
: comment
) {
116 append(builder
, menu
, subComment
, space
+ " ");
117 builder
.append((menu ?
"i" : "") + "\r\n");
123 private StringBuilder
append(StringBuilder builder
, Story story
,
126 appendCenter(builder
, false, story
.getTitle(), " ", true);
127 builder
.append("\r\n");
128 appendJustified(builder
, false, story
.getDetails(), " ");
129 builder
.append("\r\n");
131 builder
.append(" o Reference: ").append(story
.getId())
133 builder
.append(" o News link: ").append(story
.getUrlInternal())
135 builder
.append(" o Source link: ").append(story
.getUrlExternal())
137 builder
.append("\r\n");
139 builder
.append("\r\n");
141 appendJustified(builder
, false, story
.getFullContent(), " ");
142 builder
.append("\r\n");
144 builder
.append('0').append(story
.getTitle()) //
145 .append('\t').append(story
.getSelector()) //
146 .append('\t').append(hostname
) //
147 .append('\t').append(port
) //
149 appendJustified(builder
, true, story
.getDetails(), " ");
150 builder
.append("i\r\n");
152 String content
= story
.getContent();
153 if (!content
.isEmpty()) {
154 appendJustified(builder
, true, content
, " ");
155 builder
.append("i\r\n");
163 private static void appendCenter(StringBuilder builder
, boolean menu
,
164 String text
, String space
, boolean allCaps
) {
166 text
= text
.toUpperCase();
169 int size
= LINE_SIZE
- space
.length();
170 for (String line
: StringUtils
171 .justifyText(text
, size
, Alignment
.CENTER
)) {
172 builder
.append(menu ?
"i" : "") //
179 private static void appendJustified(StringBuilder builder
, boolean menu
,
180 String text
, String space
) {
181 for (String line
: text
.split("\n")) {
182 int size
= LINE_SIZE
- space
.length();
183 for (String subline
: StringUtils
.justifyText(line
, size
,
184 Alignment
.JUSTIFY
)) {
185 builder
.append(menu ?
"i" : "") //
193 private static void appendLeft(StringBuilder builder
, boolean menu
,
194 String text
, String space
) {
195 appendLeft(builder
, menu
, text
, "", "", space
);
198 private static void appendLeft(StringBuilder builder
, boolean menu
,
199 String text
, String prependFirst
, String prependOthers
, String space
) {
200 String prepend
= prependFirst
;
201 for (String line
: text
.split("\n")) {
202 for (String subline
: StringUtils
.justifyText(line
, LINE_SIZE
203 - space
.length(), Alignment
.LEFT
)) {
204 builder
.append(menu ?
"i" : "") //
209 prepend
= prependOthers
;