Merge remote-tracking branch 'hernic/patch-1' into next
[Sone.git] / src / main / java / net / pterodactylus / sone / template / ParserFilter.java
index 5f156f1..b8af831 100644 (file)
@@ -20,7 +20,9 @@ package net.pterodactylus.sone.template;
 import java.io.IOException;
 import java.io.StringReader;
 import java.io.StringWriter;
+import java.io.UnsupportedEncodingException;
 import java.io.Writer;
+import java.net.URLEncoder;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -213,7 +215,12 @@ public class ParserFilter implements Filter {
         *            The part to render
         */
        private void render(Writer writer, LinkPart linkPart) {
-               renderLink(writer, "/?_CHECKED_HTTP_=" + linkPart.getLink(), linkPart.getText(), linkPart.getTitle(), "internet");
+               try {
+                       renderLink(writer, "/external-link/?_CHECKED_HTTP_=" + URLEncoder.encode(linkPart.getLink(), "UTF-8"), linkPart.getText(), linkPart.getTitle(), "internet");
+               } catch (UnsupportedEncodingException uee1) {
+                       /* not possible for UTF-8. */
+                       throw new RuntimeException("The JVM does not support UTF-8 encoding!", uee1);
+               }
        }
 
        /**
@@ -249,7 +256,13 @@ public class ParserFilter implements Filter {
                        for (Part part : parts) {
                                excerpt.append(part.getText());
                                if (excerpt.length() > 20) {
-                                       excerpt.setLength(20);
+                                       int lastSpace = excerpt.lastIndexOf(" ", 20);
+                                       if (lastSpace > -1) {
+                                               excerpt.setLength(lastSpace);
+                                       } else {
+                                               excerpt.setLength(20);
+                                       }
+                                       excerpt.append("…");
                                        break;
                                }
                        }
@@ -282,26 +295,4 @@ public class ParserFilter implements Filter {
                linkTemplate.render(templateContext, writer);
        }
 
-       //
-       // STATIC METHODS
-       //
-
-       /**
-        * Returns up to {@code length} characters from the given text, appending
-        * “…” if the text is longer.
-        *
-        * @param text
-        *            The text to get an excerpt from
-        * @param length
-        *            The maximum length of the excerpt (without the ellipsis)
-        * @return The excerpt of the text
-        */
-       private static String getExcerpt(String text, int length) {
-               String filteredText = text.replaceAll("(\r\n)+", "\r\n").replaceAll("\n+", "\n").replace("\r\n", " ").replace('\n', ' ');
-               if (filteredText.length() > length) {
-                       return filteredText.substring(0, length) + "…";
-               }
-               return filteredText;
-       }
-
 }