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
.Type
;
6 import be
.nikiroo
.utils
.StringUtils
;
7 import be
.nikiroo
.utils
.StringUtils
.Alignment
;
9 public class Gopher
extends Output
{
10 static private final int LINE_SIZE
= 67;
12 public Gopher(Type type
, String hostname
, String preselector
, int port
) {
13 super(type
, hostname
, preselector
, port
);
17 public String
getIndexHeader() {
18 StringBuilder builder
= new StringBuilder();
20 appendCenter(builder
, true, "NEWS", "", true);
21 appendLeft(builder
, true, "", "");
22 appendLeft(builder
, true,
23 "You will find here a few pages full of news.", "");
24 appendLeft(builder
, true, "", "");
28 "They are simply scrapped from their associated webpage and converted into a gopher friendly format, updated a few times a day.",
30 appendLeft(builder
, true, "", "");
32 return builder
.toString();
36 public String
getIndexFooter() {
41 public String
exportHeader(Story story
) {
42 return append(new StringBuilder(), story
, true).toString();
46 public String
export(Story story
) {
47 StringBuilder builder
= new StringBuilder();
48 append(builder
, story
, false);
50 builder
.append("\r\n");
52 if (story
.getComments() != null) {
53 for (Comment comment
: story
.getComments()) {
54 append(builder
, false, comment
, " ");
58 builder
.append("\r\n");
60 return builder
.toString();
63 private StringBuilder
append(StringBuilder builder
, boolean menu
,
64 Comment comment
, String space
) {
66 if (space
.length() > LINE_SIZE
- 20) {
67 space
= space
.substring(0, LINE_SIZE
- 20);
70 appendLeft(builder
, menu
, comment
.getTitle(), "** ", " ", space
);
71 appendLeft(builder
, menu
, "(" + comment
.getAuthor() + ")", " ",
74 builder
.append((menu ?
"i" : "") + "\r\n");
76 for (String line
: comment
.getContentLines()) {
78 while (line
.length() > depth
&& line
.charAt(depth
) == '>') {
81 line
= line
.substring(depth
).trim();
84 for (int i
= 0; i
< depth
; i
++) {
92 appendLeft(builder
, menu
, line
, prep
, prep
, space
);
95 builder
.append((menu ?
"i" : "") + "\r\n");
96 for (Comment subComment
: comment
) {
97 append(builder
, menu
, subComment
, space
+ " ");
98 builder
.append((menu ?
"i" : "") + "\r\n");
104 private StringBuilder
append(StringBuilder builder
, Story story
,
107 appendCenter(builder
, false, story
.getTitle(), " ", true);
108 builder
.append("\r\n");
109 appendJustified(builder
, false, story
.getDetails(), " ");
110 builder
.append("\r\n");
112 builder
.append(" o News link: ").append(story
.getUrlInternal())
114 builder
.append(" o Source link: ").append(story
.getUrlExternal())
116 builder
.append("\r\n");
118 builder
.append("\r\n");
120 appendJustified(builder
, false, story
.getFullContent(), " ");
122 builder
.append('0').append(story
.getTitle()) //
123 .append('\t').append(story
.getSelector()) //
124 .append('\t').append(hostname
) //
125 .append('\t').append(port
) //
127 appendJustified(builder
, true, story
.getDetails(), " ");
128 builder
.append("i\r\n");
130 appendJustified(builder
, true, story
.getContent(), " ");
133 builder
.append(resume ?
"i" : "").append("\r\n");
139 private static void appendCenter(StringBuilder builder
, boolean menu
,
140 String text
, String space
, boolean allCaps
) {
142 text
= text
.toUpperCase();
145 int size
= LINE_SIZE
- space
.length();
146 for (String line
: StringUtils
147 .justifyText(text
, size
, Alignment
.CENTER
)) {
148 builder
.append(menu ?
"i" : "") //
155 private static void appendJustified(StringBuilder builder
, boolean menu
,
156 String text
, String space
) {
157 for (String line
: text
.split("\n")) {
158 int size
= LINE_SIZE
- space
.length();
159 for (String subline
: StringUtils
.justifyText(line
, size
,
160 Alignment
.JUSTIFY
)) {
161 builder
.append(menu ?
"i" : "") //
169 private static void appendLeft(StringBuilder builder
, boolean menu
,
170 String text
, String space
) {
171 appendLeft(builder
, menu
, text
, "", "", space
);
174 private static void appendLeft(StringBuilder builder
, boolean menu
,
175 String text
, String prependFirst
, String prependOthers
, String space
) {
176 String prepend
= prependFirst
;
177 for (String line
: text
.split("\n")) {
178 for (String subline
: StringUtils
.justifyText(line
, LINE_SIZE
179 - space
.length(), Alignment
.LEFT
)) {
180 builder
.append(menu ?
"i" : "") //
185 prepend
= prependOthers
;