X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Fgofetch%2Foutput%2FGopher.java;h=2fa0c913b31d9951a1007b0269acd50324b2416a;hb=100a839503d23e324d2db3f6d3e47892def3bf81;hp=10714b171235332ac30f88a8ffbd14932e176504;hpb=70b18499defd9bd4c32f1d60ac44b971678308c2;p=gofetch.git diff --git a/src/be/nikiroo/gofetch/output/Gopher.java b/src/be/nikiroo/gofetch/output/Gopher.java index 10714b1..2fa0c91 100644 --- a/src/be/nikiroo/gofetch/output/Gopher.java +++ b/src/be/nikiroo/gofetch/output/Gopher.java @@ -1,14 +1,12 @@ 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; public class Gopher extends Output { - static private final int LINE_SIZE = 70; + static private final int LINE_SIZE = 67; public Gopher(Type type, String hostname, String preselector, int port) { super(type, hostname, preselector, port); @@ -37,20 +35,20 @@ public class Gopher extends Output { } @Override - public String export(Story story) { - return append(new StringBuilder(), story, false).append("i\r\ni\r\n") + public String exportHeader(Story story) { + return append(new StringBuilder(), story, true).append("i\r\ni\r\n") .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"); - if (comments != null) { - for (Comment comment : comments) { + if (story.getComments() != null) { + for (Comment comment : story.getComments()) { append(builder, comment, ""); } } @@ -67,13 +65,30 @@ public class Gopher extends Output { space = space.substring(0, LINE_SIZE - 20); } - appendLeft(builder, comment.getTitle(), ">> ", " ", space); + appendLeft(builder, comment.getTitle(), "** ", " ", space); appendLeft(builder, "(" + comment.getAuthor() + ")", " ", " ", space); builder.append("i\r\n"); - appendLeft(builder, comment.getContent(), " ", " ", space); + 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 += ">"; + } + + if (depth > 0) { + prep += " "; + } + + appendLeft(builder, line, prep, prep, space); + } builder.append("i\r\n"); for (Comment subComment : comment) { @@ -85,29 +100,33 @@ public class Gopher extends Output { } private StringBuilder append(StringBuilder builder, Story story, - boolean links) { - if (links) { + boolean resume) { + if (!resume) { appendCenter(builder, story.getTitle(), true); builder.append("i\r\n"); - appendLeft(builder, story.getDetails(), " "); + appendJustified(builder, story.getDetails(), " "); builder.append("i\r\n"); + builder.append("i o News link: ").append(story.getUrlInternal()) .append("\r\n"); builder.append("i o Source link: ").append(story.getUrlExternal()) .append("\r\n"); builder.append("i\r\n"); + + builder.append("i\r\n"); + + appendJustified(builder, story.getFullContent(), " "); } else { builder.append('1').append(story.getTitle()) // - .append('\t').append("0").append(story.getSelector()) // + .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"); + appendJustified(builder, story.getDetails(), " "); + builder.append("i\r\n"); - appendLeft(builder, story.getContent(), " "); + appendJustified(builder, story.getContent(), " "); + } builder.append("i\r\n"); @@ -126,6 +145,17 @@ public class Gopher extends Output { } } + // note: adds "i" + private static void appendJustified(StringBuilder builder, String text, + String space) { + for (String line : text.split("\n")) { + for (String subline : StringJustifier.full(line, + LINE_SIZE - space.length())) { + builder.append("i").append(subline).append("\r\n"); + } + } + } + // note: adds "i" private static void appendLeft(StringBuilder builder, String text, String space) { @@ -136,11 +166,13 @@ public class Gopher extends Output { private static void appendLeft(StringBuilder builder, 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 : StringJustifier.left(line, + LINE_SIZE - space.length())) { + builder.append("i").append(space).append(prepend) + .append(subline).append("\r\n"); + prepend = prependOthers; + } } } }