From: David ‘Bombe’ Roden Date: Fri, 7 Sep 2012 07:27:11 +0000 (+0200) Subject: Create links to posts using an excerpt from the parsed post, not the raw text. X-Git-Tag: 0.8.3^2~53 X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=commitdiff_plain;h=efb1006429e52a74f41fb6e1d7736736156bb13a;hp=b95f0d80fa0ac4f9f6f8b51b2fecf796a1f72801 Create links to posts using an excerpt from the parsed post, not the raw text. This resolves #282. --- diff --git a/src/main/java/net/pterodactylus/sone/template/ParserFilter.java b/src/main/java/net/pterodactylus/sone/template/ParserFilter.java index 8302369..5f156f1 100644 --- a/src/main/java/net/pterodactylus/sone/template/ParserFilter.java +++ b/src/main/java/net/pterodactylus/sone/template/ParserFilter.java @@ -60,10 +60,10 @@ public class ParserFilter implements Filter { private final TemplateContextFactory templateContextFactory; /** The template for {@link PlainTextPart}s. */ - private final Template plainTextTemplate = TemplateParser.parse(new StringReader("<%text|html>")); + private static final Template plainTextTemplate = TemplateParser.parse(new StringReader("<%text|html>")); /** The template for {@link FreenetLinkPart}s. */ - private final Template linkTemplate = TemplateParser.parse(new StringReader("\" href=\"<%link|html>\" title=\"<%title|html>\"><%text|html>")); + private static final Template linkTemplate = TemplateParser.parse(new StringReader("\" href=\"<%link|html>\" title=\"<%title|html>\"><%text|html>")); /** * Creates a new filter that runs its input through a {@link SoneTextParser} @@ -241,7 +241,22 @@ public class ParserFilter implements Filter { * The part to render */ private void render(Writer writer, PostPart postPart) { - renderLink(writer, "viewPost.html?post=" + postPart.getPost().getId(), getExcerpt(postPart.getPost().getText(), 20), SoneAccessor.getNiceName(postPart.getPost().getSone()), "in-sone"); + SoneTextParser parser = new SoneTextParser(core, core); + SoneTextParserContext parserContext = new SoneTextParserContext(null, postPart.getPost().getSone()); + try { + Iterable parts = parser.parse(parserContext, new StringReader(postPart.getPost().getText())); + StringBuilder excerpt = new StringBuilder(); + for (Part part : parts) { + excerpt.append(part.getText()); + if (excerpt.length() > 20) { + excerpt.setLength(20); + break; + } + } + renderLink(writer, "viewPost.html?post=" + postPart.getPost().getId(), excerpt.toString(), SoneAccessor.getNiceName(postPart.getPost().getSone()), "in-sone"); + } catch (IOException ioe1) { + /* StringReader shouldn’t throw. */ + } } /** diff --git a/src/main/java/net/pterodactylus/sone/text/LinkPart.java b/src/main/java/net/pterodactylus/sone/text/LinkPart.java index 1b47080..202b9db 100644 --- a/src/main/java/net/pterodactylus/sone/text/LinkPart.java +++ b/src/main/java/net/pterodactylus/sone/text/LinkPart.java @@ -77,21 +77,26 @@ public class LinkPart implements Part { } /** - * Returns the text of this part. + * Returns the title of this part. * - * @return The text of this part + * @return The title of this part */ - public String getText() { - return text; + public String getTitle() { + return title; } + // + // PART METHODS + // + /** - * Returns the title of this part. + * Returns the text of this part. * - * @return The title of this part + * @return The text of this part */ - public String getTitle() { - return title; + @Override + public String getText() { + return text; } } diff --git a/src/main/java/net/pterodactylus/sone/text/Part.java b/src/main/java/net/pterodactylus/sone/text/Part.java index 76e80ef..79c59dc 100644 --- a/src/main/java/net/pterodactylus/sone/text/Part.java +++ b/src/main/java/net/pterodactylus/sone/text/Part.java @@ -26,6 +26,12 @@ package net.pterodactylus.sone.text; */ public interface Part { - /* no methods. */ + /** + * Returns the text contained in this part. This should return plain text + * without any format information. + * + * @return The plain text of this part + */ + public String getText(); } diff --git a/src/main/java/net/pterodactylus/sone/text/PartContainer.java b/src/main/java/net/pterodactylus/sone/text/PartContainer.java index e456cd9..a8a7e85 100644 --- a/src/main/java/net/pterodactylus/sone/text/PartContainer.java +++ b/src/main/java/net/pterodactylus/sone/text/PartContainer.java @@ -81,6 +81,22 @@ public class PartContainer implements Part, Iterable { } // + // PART METHODS + // + + /** + * {@inheritDoc} + */ + @Override + public String getText() { + StringBuilder partText = new StringBuilder(); + for (Part part : parts) { + partText.append(part.getText()); + } + return partText.toString(); + } + + // // ITERABLE METHODS // diff --git a/src/main/java/net/pterodactylus/sone/text/PlainTextPart.java b/src/main/java/net/pterodactylus/sone/text/PlainTextPart.java index 09c1fba..2c29ee2 100644 --- a/src/main/java/net/pterodactylus/sone/text/PlainTextPart.java +++ b/src/main/java/net/pterodactylus/sone/text/PlainTextPart.java @@ -38,7 +38,7 @@ public class PlainTextPart implements Part { } // - // ACCESSORS + // PART METHODS // /** @@ -46,6 +46,7 @@ public class PlainTextPart implements Part { * * @return The text of this part */ + @Override public String getText() { return text; } diff --git a/src/main/java/net/pterodactylus/sone/text/PostPart.java b/src/main/java/net/pterodactylus/sone/text/PostPart.java index c416c57..6241b7a 100644 --- a/src/main/java/net/pterodactylus/sone/text/PostPart.java +++ b/src/main/java/net/pterodactylus/sone/text/PostPart.java @@ -52,4 +52,16 @@ public class PostPart implements Part { return post; } + // + // PART METHODS + // + + /** + * {@inheritDoc} + */ + @Override + public String getText() { + return post.getText(); + } + } diff --git a/src/main/java/net/pterodactylus/sone/text/SonePart.java b/src/main/java/net/pterodactylus/sone/text/SonePart.java index 475c091..37f098b 100644 --- a/src/main/java/net/pterodactylus/sone/text/SonePart.java +++ b/src/main/java/net/pterodactylus/sone/text/SonePart.java @@ -18,6 +18,7 @@ package net.pterodactylus.sone.text; import net.pterodactylus.sone.data.Sone; +import net.pterodactylus.sone.template.SoneAccessor; /** * {@link Part} implementation that stores a reference to a {@link Sone}. @@ -52,4 +53,16 @@ public class SonePart implements Part { return sone; } + // + // PART METHODS + // + + /** + * {@inheritDoc} + */ + @Override + public String getText() { + return SoneAccessor.getNiceName(sone); + } + }