X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Ftemplate%2FParserFilter.java;h=a53184369cdd78d493a2a1ffe89447bd34cdc411;hb=61c23dc5c1244abc3efff879ee2d3a99c1acebba;hp=75eff8bbb7bc85aa09612e0ffda21126c1da6af1;hpb=358b2cc71703c3cb12355f9a109e0b484ed8c1ba;p=Sone.git diff --git a/src/main/java/net/pterodactylus/sone/template/ParserFilter.java b/src/main/java/net/pterodactylus/sone/template/ParserFilter.java index 75eff8b..a531843 100644 --- a/src/main/java/net/pterodactylus/sone/template/ParserFilter.java +++ b/src/main/java/net/pterodactylus/sone/template/ParserFilter.java @@ -1,5 +1,5 @@ /* - * Sone - ParserFilter.java - Copyright © 2011–2012 David Roden + * Sone - ParserFilter.java - Copyright © 2011–2013 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,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; @@ -82,9 +84,6 @@ public class ParserFilter implements Filter { this.soneTextParser = soneTextParser; } - /** - * {@inheritDoc} - */ @Override public Object format(TemplateContext templateContext, Object data, Map parameters) { String text = String.valueOf(data); @@ -92,10 +91,10 @@ public class ParserFilter implements Filter { int cutOffLength = Numbers.safeParseInteger(parameters.get("cut-off-length"), Numbers.safeParseInteger(templateContext.get(String.valueOf(parameters.get("cut-off-length"))), length)); Object sone = parameters.get("sone"); if (sone instanceof String) { - sone = core.getSone((String) sone, false); + 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 parts = soneTextParser.parse(context, new StringReader(text)); @@ -213,7 +212,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); + } } /** @@ -241,8 +245,8 @@ public class ParserFilter implements Filter { * The part to render */ private void render(Writer writer, PostPart postPart) { - SoneTextParser parser = new SoneTextParser(core, core); - SoneTextParserContext parserContext = new SoneTextParserContext(null, postPart.getPost().getSone()); + SoneTextParser parser = new SoneTextParser(core.getDatabase()); + SoneTextParserContext parserContext = new SoneTextParserContext(postPart.getPost().getSone()); try { Iterable parts = parser.parse(parserContext, new StringReader(postPart.getPost().getText())); StringBuilder excerpt = new StringBuilder();