diff --git a/serepo-markdown/src/main/java/ch/hsr/isf/serepo/markdown/MarkdownUtils.java b/serepo-markdown/src/main/java/ch/hsr/isf/serepo/markdown/MarkdownUtils.java index e486386..c4617c1 100644 --- a/serepo-markdown/src/main/java/ch/hsr/isf/serepo/markdown/MarkdownUtils.java +++ b/serepo-markdown/src/main/java/ch/hsr/isf/serepo/markdown/MarkdownUtils.java @@ -80,7 +80,11 @@ public static List getLinks(List nodes, } public static Link toLink(ExpLinkNode node) { - return new Link(getText(node).or(""), node.title, node.url); + return new Link(getText(node).or(""), node.title, decodeUrl(node.url)); + } + + private static String decodeUrl(String url) { + return url.replace("%28", "(").replace("%29", ")").replace("%5B", "[").replace("%5D", "]"); } public static Link toLink(RefLinkNode refLinkNode, ReferenceNode referenceNode) { diff --git a/serepo-markdown/src/main/java/ch/hsr/isf/serepo/markdown/MarkdownWriter.java b/serepo-markdown/src/main/java/ch/hsr/isf/serepo/markdown/MarkdownWriter.java index 1027dab..b56cfdf 100644 --- a/serepo-markdown/src/main/java/ch/hsr/isf/serepo/markdown/MarkdownWriter.java +++ b/serepo-markdown/src/main/java/ch/hsr/isf/serepo/markdown/MarkdownWriter.java @@ -81,11 +81,13 @@ private void writeLinks(OutputStreamWriter outputStreamWriter, List links) throws IOException { for (Link link : links) { String url = Strings.nullToEmpty(link.getUrl()); + // we have to escape ()[] with corresponding URL encodes! + url = urlEncode(url); String text; if (Strings.isNullOrEmpty(link.getText())) { text = url; } else { - text = link.getText(); + text = urlEncode(link.getText()); } if (Strings.isNullOrEmpty(link.getTitle())) { writeLink(outputStreamWriter, text, url); @@ -95,6 +97,10 @@ private void writeLinks(OutputStreamWriter outputStreamWriter, List links) writeNewLine(outputStreamWriter); } } + + private String urlEncode(String s) { + return s.replace("(", "%28").replace(")", "%29").replace("[", "%5B").replace("]", "%5D"); + } private void writeLink(OutputStreamWriter outputStreamWriter, String text, String url) throws IOException {