Merge branch 'release-0.9.6'
[Sone.git] / src / main / java / net / pterodactylus / sone / template / ParserFilter.java
index ec35e2e..7cf8c70 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Sone - ParserFilter.java - Copyright © 2011–2013 David Roden
+ * Sone - ParserFilter.java - Copyright © 2011–2016 David Roden
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -20,7 +20,6 @@ package net.pterodactylus.sone.template;
 import static java.lang.String.valueOf;
 import static net.pterodactylus.sone.utils.NumberParsers.parseInt;
 
-import java.io.IOException;
 import java.io.StringReader;
 import java.io.StringWriter;
 import java.io.UnsupportedEncodingException;
@@ -40,7 +39,6 @@ import net.pterodactylus.sone.text.PostPart;
 import net.pterodactylus.sone.text.SonePart;
 import net.pterodactylus.sone.text.SoneTextParser;
 import net.pterodactylus.sone.text.SoneTextParserContext;
-import net.pterodactylus.sone.web.page.FreenetRequest;
 import net.pterodactylus.util.template.Filter;
 import net.pterodactylus.util.template.Template;
 import net.pterodactylus.util.template.TemplateContext;
@@ -98,44 +96,39 @@ public class ParserFilter implements Filter {
                if (sone instanceof String) {
                        sone = core.getSone((String) sone).orNull();
                }
-               FreenetRequest request = (FreenetRequest) templateContext.get("request");
-               SoneTextParserContext context = new SoneTextParserContext(request, (Sone) sone);
+               SoneTextParserContext context = new SoneTextParserContext((Sone) sone);
                StringWriter parsedTextWriter = new StringWriter();
-               try {
-                       Iterable<Part> parts = soneTextParser.parse(context, new StringReader(text));
-                       if (length > -1) {
-                               int allPartsLength = 0;
-                               List<Part> shortenedParts = new ArrayList<Part>();
-                               for (Part part : parts) {
-                                       if (part instanceof PlainTextPart) {
-                                               String longText = ((PlainTextPart) part).getText();
-                                               if (allPartsLength < cutOffLength) {
-                                                       if ((allPartsLength + longText.length()) > cutOffLength) {
-                                                               shortenedParts.add(new PlainTextPart(longText.substring(0, cutOffLength - allPartsLength) + "…"));
-                                                       } else {
-                                                               shortenedParts.add(part);
-                                                       }
-                                               }
-                                               allPartsLength += longText.length();
-                                       } else if (part instanceof LinkPart) {
-                                               if (allPartsLength < cutOffLength) {
-                                                       shortenedParts.add(part);
-                                               }
-                                               allPartsLength += ((LinkPart) part).getText().length();
-                                       } else {
-                                               if (allPartsLength < cutOffLength) {
+               Iterable<Part> parts = soneTextParser.parse(text, context);
+               if (length > -1) {
+                       int allPartsLength = 0;
+                       List<Part> shortenedParts = new ArrayList<Part>();
+                       for (Part part : parts) {
+                               if (part instanceof PlainTextPart) {
+                                       String longText = part.getText();
+                                       if (allPartsLength < cutOffLength) {
+                                               if ((allPartsLength + longText.length()) > cutOffLength) {
+                                                       shortenedParts.add(new PlainTextPart(longText.substring(0, cutOffLength - allPartsLength) + "…"));
+                                               } else {
                                                        shortenedParts.add(part);
                                                }
                                        }
+                                       allPartsLength += longText.length();
+                               } else if (part instanceof LinkPart) {
+                                       if (allPartsLength < cutOffLength) {
+                                               shortenedParts.add(part);
+                                       }
+                                       allPartsLength += part.getText().length();
+                               } else {
+                                       if (allPartsLength < cutOffLength) {
+                                               shortenedParts.add(part);
+                                       }
                                }
-                               if (allPartsLength >= length) {
-                                       parts = shortenedParts;
-                               }
                        }
-                       render(parsedTextWriter, parts);
-               } catch (IOException ioe1) {
-                       /* no exceptions in a StringReader or StringWriter, ignore. */
+                       if (allPartsLength >= length) {
+                               parts = shortenedParts;
+                       }
                }
+               render(parsedTextWriter, parts);
                return parsedTextWriter.toString();
        }
 
@@ -251,27 +244,23 @@ public class ParserFilter implements Filter {
         */
        private void render(Writer writer, PostPart postPart) {
                SoneTextParser parser = new SoneTextParser(core, core);
-               SoneTextParserContext parserContext = new SoneTextParserContext(null, postPart.getPost().getSone());
-               try {
-                       Iterable<Part> 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) {
-                                       int lastSpace = excerpt.lastIndexOf(" ", 20);
-                                       if (lastSpace > -1) {
-                                               excerpt.setLength(lastSpace);
-                                       } else {
-                                               excerpt.setLength(20);
-                                       }
-                                       excerpt.append("…");
-                                       break;
+               SoneTextParserContext parserContext = new SoneTextParserContext(postPart.getPost().getSone());
+               Iterable<Part> parts = parser.parse(postPart.getPost().getText(), parserContext);
+               StringBuilder excerpt = new StringBuilder();
+               for (Part part : parts) {
+                       excerpt.append(part.getText());
+                       if (excerpt.length() > 20) {
+                               int lastSpace = excerpt.lastIndexOf(" ", 20);
+                               if (lastSpace > -1) {
+                                       excerpt.setLength(lastSpace);
+                               } else {
+                                       excerpt.setLength(20);
                                }
+                               excerpt.append("…");
+                               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. */
                }
+               renderLink(writer, "viewPost.html?post=" + postPart.getPost().getId(), excerpt.toString(), SoneAccessor.getNiceName(postPart.getPost().getSone()), "in-sone");
        }
 
        /**