From ded602de20c8ae78eee9e292747c15e5847fa9ef Mon Sep 17 00:00:00 2001 From: Hugo de Paix de Coeur Date: Wed, 3 Feb 2016 19:15:33 +0100 Subject: [PATCH] Fixed anchor normalization --- .../robwin/markup/builder/asciidoc/AsciiDocBuilder.java | 4 +--- .../robwin/markup/builder/markdown/MarkdownBuilder.java | 7 ++++--- .../robwin/markup/builder/MarkupDocBuilderTest.java | 8 ++++---- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/main/java/io/github/robwin/markup/builder/asciidoc/AsciiDocBuilder.java b/src/main/java/io/github/robwin/markup/builder/asciidoc/AsciiDocBuilder.java index 68b0be27..cf9d9990 100644 --- a/src/main/java/io/github/robwin/markup/builder/asciidoc/AsciiDocBuilder.java +++ b/src/main/java/io/github/robwin/markup/builder/asciidoc/AsciiDocBuilder.java @@ -29,7 +29,6 @@ import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Collection; import java.util.List; -import java.util.regex.Pattern; import static org.apache.commons.lang3.StringUtils.*; @@ -39,7 +38,6 @@ import static org.apache.commons.lang3.StringUtils.*; public class AsciiDocBuilder extends AbstractMarkupDocBuilder { private static final String ASCIIDOC_FILE_EXTENSION = "adoc"; - private static final Pattern ANCHOR_ESCAPE_PATTERN = Pattern.compile("[^0-9a-zA-Z]+"); @Override public MarkupDocBuilder documentTitle(String title){ @@ -127,7 +125,7 @@ public class AsciiDocBuilder extends AbstractMarkupDocBuilder { } private static String normalizeReferenceAnchor(String anchor) { - return ANCHOR_ESCAPE_PATTERN.matcher(anchor).replaceAll("_"); + return anchor.trim(); } @Override diff --git a/src/main/java/io/github/robwin/markup/builder/markdown/MarkdownBuilder.java b/src/main/java/io/github/robwin/markup/builder/markdown/MarkdownBuilder.java index e960cdd7..221ac1eb 100644 --- a/src/main/java/io/github/robwin/markup/builder/markdown/MarkdownBuilder.java +++ b/src/main/java/io/github/robwin/markup/builder/markdown/MarkdownBuilder.java @@ -41,7 +41,8 @@ import static org.apache.commons.lang3.StringUtils.join; public class MarkdownBuilder extends AbstractMarkupDocBuilder { private static final String MARKDOWN_FILE_EXTENSION = "md"; - private static final Pattern ANCHOR_ESCAPE_PATTERN = Pattern.compile("[^0-9a-zA-Z]+"); + private static final Pattern ANCHOR_FORBIDDEN_PATTERN = Pattern.compile("[^0-9a-zA-Z-_\\s]+"); + private static final Pattern ANCHOR_SPACE_PATTERN = Pattern.compile("[\\s]+"); @Override public MarkupDocBuilder documentTitle(String title){ @@ -151,7 +152,7 @@ public class MarkdownBuilder extends AbstractMarkupDocBuilder } private static String normalizeReferenceAnchor(String anchor) { - return ANCHOR_ESCAPE_PATTERN.matcher(anchor).replaceAll("-"); + return ANCHOR_SPACE_PATTERN.matcher(ANCHOR_FORBIDDEN_PATTERN.matcher(anchor.trim().toLowerCase()).replaceAll("")).replaceAll("-"); } @Override @@ -177,7 +178,7 @@ public class MarkdownBuilder extends AbstractMarkupDocBuilder public String crossReferenceAsString(String anchor, String text) { StringBuilder stringBuilder = new StringBuilder(); if (text == null) - text = anchor; + text = anchor.trim(); stringBuilder.append("[").append(text).append("](#").append(normalizeReferenceAnchor(anchor)).append(")"); return stringBuilder.toString(); } diff --git a/src/test/java/io/github/robwin/markup/builder/MarkupDocBuilderTest.java b/src/test/java/io/github/robwin/markup/builder/MarkupDocBuilderTest.java index 7acdc9ea..8dd79357 100644 --- a/src/test/java/io/github/robwin/markup/builder/MarkupDocBuilderTest.java +++ b/src/test/java/io/github/robwin/markup/builder/MarkupDocBuilderTest.java @@ -75,10 +75,10 @@ public class MarkupDocBuilderTest { .italicTextLine("Italic text line b") .unorderedList(Arrays.asList("Entry1", "Entry2", "Entry 2")) .anchor("anchor").newLine() - .anchor("\u0240 & this | there").newLine() + .anchor(" \u0240 & This | There ").newLine() .crossReference("anchor").newLine() .crossReference("anchor", "text").newLine() - .crossReference("\u0240 & this | there").newLine() + .crossReference(" \u0240 & This | There ").newLine() .writeToFile("build/tmp", "test", StandardCharsets.UTF_8); } @@ -103,10 +103,10 @@ public class MarkupDocBuilderTest { .italicTextLine("Italic text line b") .unorderedList(Arrays.asList("Entry1", "Entry2", "Entry 2")) .anchor("anchor").newLine() - .anchor("\u0240 & this | there").newLine() + .anchor(" \u0240 & This | There ").newLine() .crossReference("anchor").newLine() .crossReference("anchor", "text").newLine() - .crossReference("\u0240 & this | there").newLine() + .crossReference(" \u0240 & This | There ").newLine() .writeToFile("build/tmp", "test", StandardCharsets.UTF_8); }