X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Fgofetch%2Foutput%2FGopher.java;h=aab03f67d19127145735189abd41adc79fbc41a4;hb=c715ea028a2b9865b1b5a619b7cf7553a89aa90d;hp=1ad9731ccf1308fbf9f4c650783dd10e6da5044e;hpb=2527107526aea628df09c3ad53432e9a5480fcd7;p=gofetch.git diff --git a/src/be/nikiroo/gofetch/output/Gopher.java b/src/be/nikiroo/gofetch/output/Gopher.java index 1ad9731..aab03f6 100644 --- a/src/be/nikiroo/gofetch/output/Gopher.java +++ b/src/be/nikiroo/gofetch/output/Gopher.java @@ -1,11 +1,11 @@ package be.nikiroo.gofetch.output; -import java.util.List; - -import be.nikiroo.gofetch.StringJustifier; import be.nikiroo.gofetch.data.Comment; import be.nikiroo.gofetch.data.Story; -import be.nikiroo.gofetch.support.BasicSupport.Type; +import be.nikiroo.gofetch.support.BasicSupport; +import be.nikiroo.gofetch.support.Type; +import be.nikiroo.utils.StringUtils; +import be.nikiroo.utils.StringUtils.Alignment; public class Gopher extends Output { static private final int LINE_SIZE = 67; @@ -15,132 +15,199 @@ public class Gopher extends Output { } @Override - public String getIndexHeader() { + public String getMainIndexHeader() { StringBuilder builder = new StringBuilder(); - appendCenter(builder, "NEWS", true); - appendLeft(builder, "", ""); - appendLeft(builder, "You will find here a few pages full of news.", ""); - appendLeft(builder, "", ""); + appendCenter(builder, true, "NEWS", "", true); + appendLeft(builder, true, "", ""); + appendLeft(builder, true, + "You will find here a few pages full of news.", ""); + appendLeft(builder, true, "", ""); appendLeft( builder, + true, "They are simply scrapped from their associated webpage and converted into a gopher friendly format, updated a few times a day.", ""); - appendLeft(builder, "", ""); + appendLeft(builder, true, "", ""); return builder.toString(); } @Override - public String getIndexFooter() { + public String getMainIndexFooter() { return ""; } @Override - public String export(Story story) { - return append(new StringBuilder(), story, false).append("i\r\ni\r\n") - .toString(); + public String getIndexHeader(BasicSupport support) { + StringBuilder builder = new StringBuilder(); + appendCenter(builder, true, support.getDescription(), "", true); + builder.append("\r\n"); + builder.append("\r\n"); + builder.append("\r\n"); + return builder.toString(); + } + + @Override + public String getIndexFooter(BasicSupport support) { + return ""; + } + + @Override + public String exportHeader(Story story) { + return append(new StringBuilder(), story, true).toString(); } @Override - public String export(Story story, List comments) { + public String export(Story story) { StringBuilder builder = new StringBuilder(); - append(builder, story, true); + append(builder, story, false); - builder.append("i\r\n"); + builder.append("\r\n"); - if (comments != null) { - for (Comment comment : comments) { - append(builder, comment, ""); + if (story.getComments() != null) { + for (Comment comment : story.getComments()) { + append(builder, false, comment, " "); } } - builder.append("i\r\n"); + builder.append("\r\n"); return builder.toString(); } - private StringBuilder append(StringBuilder builder, Comment comment, - String space) { + private StringBuilder append(StringBuilder builder, boolean menu, + Comment comment, String space) { if (space.length() > LINE_SIZE - 20) { space = space.substring(0, LINE_SIZE - 20); } - appendLeft(builder, comment.getTitle(), ">> ", " ", space); - appendLeft(builder, "(" + comment.getAuthor() + ")", " ", " ", - space); + appendLeft(builder, menu, comment.getTitle(), "** ", " ", space); + + if (comment.getAuthor() != null + && !comment.getAuthor().trim().isEmpty()) { + appendLeft(builder, menu, "(" + comment.getAuthor() + ")", " ", + " ", space); + builder.append((menu ? "i" : "") + "\r\n"); + } + + for (String line : comment.getContentLines()) { + int depth = 0; + while (line.length() > depth && line.charAt(depth) == '>') { + depth++; + } + line = line.substring(depth).trim(); + + String prep = " "; + for (int i = 0; i < depth; i++) { + prep += ">"; + } - builder.append("i\r\n"); + if (depth > 0) { + prep += " "; + } - appendLeft(builder, comment.getContent(), " ", " ", space); + appendLeft(builder, menu, line, prep, prep, space); + } - builder.append("i\r\n"); + builder.append((menu ? "i" : "") + "\r\n"); for (Comment subComment : comment) { - append(builder, subComment, space + " "); - builder.append("i\r\n"); + append(builder, menu, subComment, space + " "); + builder.append((menu ? "i" : "") + "\r\n"); } return builder; } private StringBuilder append(StringBuilder builder, Story story, - boolean links) { - if (links) { - appendCenter(builder, story.getTitle(), true); - builder.append("i\r\n"); - appendLeft(builder, story.getDetails(), " "); - builder.append("i\r\n"); - builder.append("i o News link: ").append(story.getUrlInternal()) + boolean resume) { + if (!resume) { + appendCenter(builder, false, story.getTitle(), " ", true); + builder.append("\r\n"); + appendJustified(builder, false, story.getDetails(), " "); + builder.append("\r\n"); + + builder.append(" o Reference: ").append(story.getId()) .append("\r\n"); - builder.append("i o Source link: ").append(story.getUrlExternal()) + builder.append(" o News link: ").append(story.getUrlInternal()) .append("\r\n"); - builder.append("i\r\n"); + builder.append(" o Source link: ").append(story.getUrlExternal()) + .append("\r\n"); + builder.append("\r\n"); + + builder.append("\r\n"); + + appendJustified(builder, false, story.getFullContent(), " "); + builder.append("\r\n"); } else { - builder.append('1').append(story.getTitle()) // - .append('\t').append("0").append(story.getSelector()) // + builder.append('0').append(story.getTitle()) // + .append('\t').append(story.getSelector()) // .append('\t').append(hostname) // .append('\t').append(port) // .append("\r\n"); - appendLeft(builder, story.getDetails(), " "); - } - - builder.append("i\r\n"); - - appendLeft(builder, story.getContent(), " "); + appendJustified(builder, true, story.getDetails(), " "); + builder.append("i\r\n"); - builder.append("i\r\n"); + String content = story.getContent(); + if (!content.isEmpty()) { + appendJustified(builder, true, content, " "); + builder.append("i\r\n"); + } + } return builder; } // note: adds "i" - private static void appendCenter(StringBuilder builder, String text, - boolean allCaps) { + private static void appendCenter(StringBuilder builder, boolean menu, + String text, String space, boolean allCaps) { if (allCaps) { text = text.toUpperCase(); } - for (String line : StringJustifier.center(text, LINE_SIZE)) { - builder.append("i").append(line).append("\r\n"); + int size = LINE_SIZE - space.length(); + for (String line : StringUtils + .justifyText(text, size, Alignment.CENTER)) { + builder.append(menu ? "i" : "") // + .append(space) // + .append(line) // + .append("\r\n"); } } - // note: adds "i" - private static void appendLeft(StringBuilder builder, String text, - String space) { - appendLeft(builder, text, "", "", space); + private static void appendJustified(StringBuilder builder, boolean menu, + String text, String space) { + for (String line : text.split("\n")) { + int size = LINE_SIZE - space.length(); + for (String subline : StringUtils.justifyText(line, size, + Alignment.JUSTIFY)) { + builder.append(menu ? "i" : "") // + .append(space) // + .append(subline) // + .append("\r\n"); + } + } } - // note: adds "i" - private static void appendLeft(StringBuilder builder, String text, - String prependFirst, String prependOthers, String space) { + private static void appendLeft(StringBuilder builder, boolean menu, + String text, String space) { + appendLeft(builder, menu, text, "", "", space); + } + + private static void appendLeft(StringBuilder builder, boolean menu, + String text, String prependFirst, String prependOthers, String space) { String prepend = prependFirst; - for (String line : StringJustifier.left(text, - LINE_SIZE - space.length())) { - builder.append("i").append(space).append(prepend).append(line) - .append("\r\n"); - prepend = prependOthers; + for (String line : text.split("\n")) { + for (String subline : StringUtils.justifyText(line, LINE_SIZE + - space.length(), Alignment.LEFT)) { + builder.append(menu ? "i" : "") // + .append(space) // + .append(prepend) // + .append(subline) // + .append("\r\n"); + prepend = prependOthers; + } } } }