This is an automated email from the ASF dual-hosted git repository.

kwin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-doxia.git


The following commit(s) were added to refs/heads/master by this push:
     new 6fd45daa [DOXIA-692] Fix escaping of special characters (#143)
6fd45daa is described below

commit 6fd45daa78aaf31842defccb9c8958007f91b159
Author: Konrad Windszus <k...@apache.org>
AuthorDate: Sun Feb 12 10:31:23 2023 +0100

    [DOXIA-692] Fix escaping of special characters (#143)
---
 .../maven/doxia/module/markdown/MarkdownSink.java  | 25 ++++++++------
 .../doxia/module/markdown/MarkdownSinkTest.java    | 40 ++++++++--------------
 2 files changed, 30 insertions(+), 35 deletions(-)

diff --git 
a/doxia-modules/doxia-module-markdown/src/main/java/org/apache/maven/doxia/module/markdown/MarkdownSink.java
 
b/doxia-modules/doxia-module-markdown/src/main/java/org/apache/maven/doxia/module/markdown/MarkdownSink.java
index c5c7dcb1..b205eef8 100644
--- 
a/doxia-modules/doxia-module-markdown/src/main/java/org/apache/maven/doxia/module/markdown/MarkdownSink.java
+++ 
b/doxia-modules/doxia-module-markdown/src/main/java/org/apache/maven/doxia/module/markdown/MarkdownSink.java
@@ -933,7 +933,7 @@ public class MarkdownSink extends AbstractTextSink 
implements MarkdownMarkup {
     }
 
     /**
-     * Write Apt escaped text to output.
+     * Write Markdown escaped text to output.
      *
      * @param text The text to write.
      */
@@ -974,11 +974,12 @@ public class MarkdownSink extends AbstractTextSink 
implements MarkdownMarkup {
      * Escape special characters in a text in Markdown:
      *
      * <pre>
-     * \~, \=, \-, \+, \*, \[, \], \<, \>, \{, \}, \\
+     * \, `, *, _, {, }, [, ], (, ), #, +, -, ., !
      * </pre>
      *
      * @param text the String to escape, may be null
      * @return the text escaped, "" if null String input
+     * @see <a 
href="https://daringfireball.net/projects/markdown/syntax#backslash";>Backslash 
Escapes</a>
      */
     private static String escapeMarkdown(String text) {
         if (text == null) {
@@ -990,18 +991,22 @@ public class MarkdownSink extends AbstractTextSink 
implements MarkdownMarkup {
 
         for (int i = 0; i < length; ++i) {
             char c = text.charAt(i);
-            switch (c) { // 0080
+            switch (c) {
                 case '\\':
-                case '~':
-                case '=':
-                case '+':
+                case '`':
                 case '*':
-                case '[':
-                case ']':
-                case '<':
-                case '>':
+                case '_':
                 case '{':
                 case '}':
+                case '[':
+                case ']':
+                case '(':
+                case ')':
+                case '#':
+                case '+':
+                case '-':
+                case '.':
+                case '!':
                     buffer.append('\\');
                     buffer.append(c);
                     break;
diff --git 
a/doxia-modules/doxia-module-markdown/src/test/java/org/apache/maven/doxia/module/markdown/MarkdownSinkTest.java
 
b/doxia-modules/doxia-module-markdown/src/test/java/org/apache/maven/doxia/module/markdown/MarkdownSinkTest.java
index cac89ac5..faee074d 100644
--- 
a/doxia-modules/doxia-module-markdown/src/test/java/org/apache/maven/doxia/module/markdown/MarkdownSinkTest.java
+++ 
b/doxia-modules/doxia-module-markdown/src/test/java/org/apache/maven/doxia/module/markdown/MarkdownSinkTest.java
@@ -54,7 +54,7 @@ public class MarkdownSinkTest extends AbstractSinkTest {
 
     /** {@inheritDoc} */
     protected String getAuthorBlock(String author) {
-        return author;
+        return getEscapedText(author);
     }
 
     /** {@inheritDoc} */
@@ -144,14 +144,15 @@ public class MarkdownSinkTest extends AbstractSinkTest {
 
     /** {@inheritDoc} */
     protected String getListBlock(String item) {
-        return EOL + EOL + Markup.SPACE + "" + 
MarkdownMarkup.LIST_START_MARKUP + "" + Markup.SPACE + item + EOL + EOL;
+        return EOL + EOL + Markup.SPACE + "" + 
MarkdownMarkup.LIST_START_MARKUP + "" + Markup.SPACE
+                + getEscapedText(item) + EOL + EOL;
     }
 
     /** {@inheritDoc} */
     protected String getNumberedListBlock(String item) {
         return EOL + EOL + Markup.SPACE + ""
                 + MarkdownMarkup.NUMBERING_LOWER_ROMAN_CHAR + ""
-                + Markup.SPACE + item + EOL + EOL;
+                + Markup.SPACE + getEscapedText(item) + EOL + EOL;
     }
 
     /** {@inheritDoc} */
@@ -164,7 +165,7 @@ public class MarkdownSinkTest extends AbstractSinkTest {
     protected String getFigureBlock(String source, String caption) {
         String figureBlock = "<img src=\"" + source + "\" />";
         if (caption != null) {
-            figureBlock += caption + EOL;
+            figureBlock += getEscapedText(caption) + EOL;
         }
         return figureBlock;
     }
@@ -298,27 +299,7 @@ public class MarkdownSinkTest extends AbstractSinkTest {
 
     /** {@inheritDoc} */
     protected String getTextBlock(String text) {
-        // "\\~, \\=, \\-, \\+, \\*, \\[, \\], \\<, \\>, \\{, \\}, \\\\"
-        StringBuilder sb = new StringBuilder();
-        sb.append(getSpecialCharacters('~')).append(",_");
-        sb.append(getSpecialCharacters(Markup.EQUAL)).append(",_");
-        sb.append(getSpecialCharacters(Markup.MINUS)).append(",_");
-        sb.append(getSpecialCharacters(Markup.PLUS)).append(",_");
-        sb.append(getSpecialCharacters(Markup.STAR)).append(",_");
-        
sb.append(getSpecialCharacters(Markup.LEFT_SQUARE_BRACKET)).append(",_");
-        
sb.append(getSpecialCharacters(Markup.RIGHT_SQUARE_BRACKET)).append(",_");
-        sb.append(getSpecialCharacters(Markup.LESS_THAN)).append(",_");
-        sb.append(getSpecialCharacters(Markup.GREATER_THAN)).append(",_");
-        
sb.append(getSpecialCharacters(Markup.LEFT_CURLY_BRACKET)).append(",_");
-        
sb.append(getSpecialCharacters(Markup.RIGHT_CURLY_BRACKET)).append(",_");
-        sb.append(getSpecialCharacters(MarkdownMarkup.BACKSLASH));
-
-        return sb.toString();
-    }
-
-    @Override
-    public void testText() {
-        // TODO re-enable this test as inherited from parent
+        return getEscapedText(text);
     }
 
     /** {@inheritDoc} */
@@ -326,6 +307,15 @@ public class MarkdownSinkTest extends AbstractSinkTest {
         return text;
     }
 
+    /**
+     * Escapes special characters outlined in <a 
href="https://daringfireball.net/projects/markdown/syntax#backslash";>Markdown 
Spec</a>
+     * @param text
+     * @return the text with all special characters escaped
+     */
+    private String getEscapedText(String text) {
+        return 
text.replaceAll("\\\\|\\`|\\*|_|\\{|\\}|\\[|\\]|\\(|\\)|#|\\+|\\-|\\.|\\!", 
"\\\\$0");
+    }
+
     /**
      * Add a backslash for a special markup character
      *

Reply via email to