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

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

commit 1eb9cd4fff5979b7bbc0cd671d65f13b5bf322f2
Author: Konrad Windszus <[email protected]>
AuthorDate: Sun Feb 15 16:52:42 2026 +0100

    Support strikethrough for Markdown sink
    
    Add tests for strikethrough/del to all Sinks
    Remove unused methods from Sink tests
    Add test for strikethrough to MarkdownParserTests
    
    This closes #872
---
 .../maven/doxia/sink/impl/AbstractSinkTest.java    | 32 ++++++++++++++++++++--
 .../apache/maven/doxia/module/apt/AptSinkTest.java | 12 ++------
 .../doxia/module/markdown/MarkdownMarkup.java      |  6 ++++
 .../maven/doxia/module/markdown/MarkdownSink.java  | 11 ++++++++
 .../doxia/module/markdown/MarkdownParserTest.java  | 13 +++++++++
 .../doxia/module/markdown/MarkdownSinkTest.java    | 10 ++-----
 .../maven/doxia/module/xdoc/XdocSinkTest.java      |  4 +++
 .../maven/doxia/module/xhtml5/Xhtml5SinkTest.java  | 12 ++------
 8 files changed, 72 insertions(+), 28 deletions(-)

diff --git 
a/doxia-core/src/test/java/org/apache/maven/doxia/sink/impl/AbstractSinkTest.java
 
b/doxia-core/src/test/java/org/apache/maven/doxia/sink/impl/AbstractSinkTest.java
index 5e5cc0c2..022f80d0 100644
--- 
a/doxia-core/src/test/java/org/apache/maven/doxia/sink/impl/AbstractSinkTest.java
+++ 
b/doxia-core/src/test/java/org/apache/maven/doxia/sink/impl/AbstractSinkTest.java
@@ -1009,7 +1009,7 @@ public abstract class AbstractSinkTest extends 
AbstractModuleTest {
     /**
      * Checks that the sequence <code>[inline(italic), text(text), 
inline_()]</code>,
      * invoked on the current sink, produces the same result as
-     * {@link #getInlineBoldBlock getInlineBoldBlock}(text).
+     * {@link #getInlineItalicBlock}.
      */
     @Test
     public void inlineItalic() {
@@ -1029,7 +1029,7 @@ public abstract class AbstractSinkTest extends 
AbstractModuleTest {
     /**
      * Checks that the sequence <code>[inline(code), text(text), 
inline_()]</code>,
      * invoked on the current sink, produces the same result as
-     * {@link #getInlineBoldBlock getInlineBoldBlock}(text).
+     * {@link #getInlineCodeBlock}.
      */
     @Test
     public void inlineCode() {
@@ -1046,6 +1046,26 @@ public abstract class AbstractSinkTest extends 
AbstractModuleTest {
         assertEquals(expected, actual, "Wrong inline code!");
     }
 
+    /**
+     * Checks that the sequence <code>[inline(code), text(text), 
inline_()]</code>,
+     * invoked on the current sink, produces the same result as
+     * {@link #getInlineDeleteBlock}.
+     */
+    @Test
+    public void inlineDelete() {
+        String text = "InlineDelete";
+        sink.inline(SinkEventAttributeSet.Semantics.DELETE);
+        sink.text(text);
+        sink.inline_();
+        sink.flush();
+        sink.close();
+
+        String actual = testWriter.toString();
+        String expected = getInlineDeleteBlock(text);
+
+        assertEquals(expected, actual, "Wrong inline code!");
+    }
+
     /**
      * Checks that the sequence <code>[lineBreak()]</code>,
      * invoked on the current sink, produces the same result as
@@ -1565,6 +1585,14 @@ public abstract class AbstractSinkTest extends 
AbstractModuleTest {
      */
     protected abstract String getInlineCodeBlock(String text);
 
+    /**
+     * Returns an Inline code block generated by this sink.
+     * @param text The text to use.
+     * @return The result of invoking a Inline cdldgd block on the current 
sink.
+     * @see #inlineBold()
+     */
+    protected abstract String getInlineDeleteBlock(String text);
+
     /**
      * Returns a LineBreak block generated by this sink.
      * @return The result of invoking a LineBreak block on the current sink.
diff --git 
a/doxia-modules/doxia-module-apt/src/test/java/org/apache/maven/doxia/module/apt/AptSinkTest.java
 
b/doxia-modules/doxia-module-apt/src/test/java/org/apache/maven/doxia/module/apt/AptSinkTest.java
index 2ff3b72b..bbad9639 100644
--- 
a/doxia-modules/doxia-module-apt/src/test/java/org/apache/maven/doxia/module/apt/AptSinkTest.java
+++ 
b/doxia-modules/doxia-module-apt/src/test/java/org/apache/maven/doxia/module/apt/AptSinkTest.java
@@ -256,15 +256,9 @@ class AptSinkTest extends AbstractSinkTest {
         return AptMarkup.MONOSPACED_START_MARKUP + text + 
AptMarkup.MONOSPACED_END_MARKUP;
     }
 
-    protected String getItalicBlock(String text) {
-        return AptMarkup.ITALIC_START_MARKUP + text + 
AptMarkup.ITALIC_END_MARKUP;
-    }
-
-    protected String getBoldBlock(String text) {
-        return AptMarkup.BOLD_START_MARKUP + text + AptMarkup.BOLD_END_MARKUP;
-    }
-
-    protected String getMonospacedBlock(String text) {
+    @Override
+    protected String getInlineDeleteBlock(String text) {
+        // delete/strikethrough is not supported in APT, so we just return the 
text without any markup
         return text;
     }
 
diff --git 
a/doxia-modules/doxia-module-markdown/src/main/java/org/apache/maven/doxia/module/markdown/MarkdownMarkup.java
 
b/doxia-modules/doxia-module-markdown/src/main/java/org/apache/maven/doxia/module/markdown/MarkdownMarkup.java
index b7bbccd2..9d7b0f55 100644
--- 
a/doxia-modules/doxia-module-markdown/src/main/java/org/apache/maven/doxia/module/markdown/MarkdownMarkup.java
+++ 
b/doxia-modules/doxia-module-markdown/src/main/java/org/apache/maven/doxia/module/markdown/MarkdownMarkup.java
@@ -68,6 +68,12 @@ public interface MarkdownMarkup extends TextMarkup {
     /** Syntax for the italic style start: "_" */
     String ITALIC_START_MARKUP = "_";
 
+    /** Syntax for the strikethrough style end: "~~", 
https://github.github.com/gfm/#strikethrough-extension- */
+    String STRIKETHROUGH_END_MARKUP = "~~";
+
+    /** Syntax for the strikethrough style start: "~~", 
https://github.github.com/gfm/#strikethrough-extension- */
+    String STRIKETHROUGH_START_MARKUP = "~~";
+
     /** Syntax for the link end: ")" */
     String LINK_END_MARKUP = ")";
 
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 e40d59dd..221928c3 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
@@ -1120,6 +1120,17 @@ public class MarkdownSink extends Xhtml5BaseSink 
implements MarkdownMarkup {
                             endMarkups.add(BOLD_END_MARKUP);
                         }
                     }
+                    // <del> is supported via GFM strikethrough extension
+                    if 
(attributes.containsAttributes(SinkEventAttributeSet.Semantics.DELETE)
+                            || 
attributes.containsAttributes(SinkEventAttributeSet.LINETHROUGH)) {
+                        if (requiresHtml) {
+                            writeUnescaped("<del>");
+                            endMarkups.add("</del>");
+                        } else {
+                            writeUnescaped(STRIKETHROUGH_START_MARKUP);
+                            endMarkups.add(STRIKETHROUGH_END_MARKUP);
+                        }
+                    }
                 }
             }
             inlineStack.add(endMarkups);
diff --git 
a/doxia-modules/doxia-module-markdown/src/test/java/org/apache/maven/doxia/module/markdown/MarkdownParserTest.java
 
b/doxia-modules/doxia-module-markdown/src/test/java/org/apache/maven/doxia/module/markdown/MarkdownParserTest.java
index 1fad1a69..4b9b66e4 100644
--- 
a/doxia-modules/doxia-module-markdown/src/test/java/org/apache/maven/doxia/module/markdown/MarkdownParserTest.java
+++ 
b/doxia-modules/doxia-module-markdown/src/test/java/org/apache/maven/doxia/module/markdown/MarkdownParserTest.java
@@ -888,4 +888,17 @@ class MarkdownParserTest extends AbstractParserTest {
         assertSinkStartsWith(eventIterator, "paragraph", "anchor", "text", 
"anchor_", "paragraph_");
         assertEventSuffix(eventIterator);
     }
+
+    @Test
+    void strikeThrough() throws ParseException {
+        Iterator<SinkEventElement> eventIterator = 
parseSourceToEventTestingSink("~~strikethrough~~")
+                .getEventList()
+                .iterator();
+        assertEventPrefix(eventIterator);
+        assertSinkStartsWith(eventIterator, "paragraph");
+        // https://github.github.com/gfm/#strikethrough-extension- uses "del" 
element (not "s")
+        assertSinkEquals(eventIterator.next(), "inline", 
SinkEventAttributeSet.Semantics.DELETE);
+        assertSinkStartsWith(eventIterator, "text", "inline_", "paragraph_");
+        assertEventSuffix(eventIterator);
+    }
 }
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 81cd43dc..649d1651 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
@@ -259,14 +259,10 @@ class MarkdownSinkTest extends AbstractSinkTest {
         return MarkdownMarkup.MONOSPACED_START_MARKUP + text + 
MarkdownMarkup.MONOSPACED_END_MARKUP;
     }
 
-    protected String getItalicBlock(String text) {
-        return MarkdownMarkup.ITALIC_START_MARKUP + text + 
MarkdownMarkup.ITALIC_END_MARKUP;
+    protected String getInlineDeleteBlock(String text) {
+        return MarkdownMarkup.STRIKETHROUGH_START_MARKUP + text + 
MarkdownMarkup.STRIKETHROUGH_END_MARKUP;
     }
-
-    protected String getBoldBlock(String text) {
-        return MarkdownMarkup.BOLD_START_MARKUP + text + 
MarkdownMarkup.BOLD_END_MARKUP;
-    }
-
+    
     protected String getMonospacedBlock(String text) {
         return text;
     }
diff --git 
a/doxia-modules/doxia-module-xdoc/src/test/java/org/apache/maven/doxia/module/xdoc/XdocSinkTest.java
 
b/doxia-modules/doxia-module-xdoc/src/test/java/org/apache/maven/doxia/module/xdoc/XdocSinkTest.java
index ea39ea35..c664c872 100644
--- 
a/doxia-modules/doxia-module-xdoc/src/test/java/org/apache/maven/doxia/module/xdoc/XdocSinkTest.java
+++ 
b/doxia-modules/doxia-module-xdoc/src/test/java/org/apache/maven/doxia/module/xdoc/XdocSinkTest.java
@@ -261,6 +261,10 @@ public class XdocSinkTest extends AbstractSinkTest {
         return "<code>" + text + "</code>";
     }
 
+    protected String getInlineDeleteBlock(String text) {
+        return "<del>" + text + "</del>";
+    }
+
     protected String getLineBreakBlock() {
         return "<br />";
     }
diff --git 
a/doxia-modules/doxia-module-xhtml5/src/test/java/org/apache/maven/doxia/module/xhtml5/Xhtml5SinkTest.java
 
b/doxia-modules/doxia-module-xhtml5/src/test/java/org/apache/maven/doxia/module/xhtml5/Xhtml5SinkTest.java
index d0e0c75c..87da4b18 100644
--- 
a/doxia-modules/doxia-module-xhtml5/src/test/java/org/apache/maven/doxia/module/xhtml5/Xhtml5SinkTest.java
+++ 
b/doxia-modules/doxia-module-xhtml5/src/test/java/org/apache/maven/doxia/module/xhtml5/Xhtml5SinkTest.java
@@ -259,16 +259,8 @@ public class Xhtml5SinkTest extends AbstractSinkTest {
         return "<code>" + text + "</code>";
     }
 
-    protected String getItalicBlock(String text) {
-        return "<i>" + text + "</i>";
-    }
-
-    protected String getBoldBlock(String text) {
-        return "<b>" + text + "</b>";
-    }
-
-    protected String getMonospacedBlock(String text) {
-        return "<code>" + text + "</code>";
+    protected String getInlineDeleteBlock(String text) {
+        return "<del>" + text + "</del>";
     }
 
     protected String getLineBreakBlock() {

Reply via email to