diff --git a/flexmark-html2md-converter/src/main/java/com/vladsch/flexmark/html2md/converter/FlexmarkHtmlConverter.java b/flexmark-html2md-converter/src/main/java/com/vladsch/flexmark/html2md/converter/FlexmarkHtmlConverter.java index f0b413368c..4baef6cec7 100644 --- a/flexmark-html2md-converter/src/main/java/com/vladsch/flexmark/html2md/converter/FlexmarkHtmlConverter.java +++ b/flexmark-html2md-converter/src/main/java/com/vladsch/flexmark/html2md/converter/FlexmarkHtmlConverter.java @@ -590,7 +590,7 @@ public HtmlConverterState getState() { for (int i = nodeRendererFactories.size() - 1; i >= 0; i--) { HtmlNodeRendererFactory htmlNodeRendererFactory = nodeRendererFactories.get(i); HtmlNodeRenderer htmlNodeRenderer = htmlNodeRendererFactory.apply(this.myOptions); - Set> formattingHandlers = htmlNodeRenderer.getHtmlNodeRendererHandlers(); + List> formattingHandlers = htmlNodeRenderer.getHtmlNodeRendererHandlers(); if (formattingHandlers == null) continue; for (HtmlNodeRendererHandler nodeType : formattingHandlers) { diff --git a/flexmark-html2md-converter/src/main/java/com/vladsch/flexmark/html2md/converter/HtmlNodeRenderer.java b/flexmark-html2md-converter/src/main/java/com/vladsch/flexmark/html2md/converter/HtmlNodeRenderer.java index 33ddfd134c..2c048e4f9a 100644 --- a/flexmark-html2md-converter/src/main/java/com/vladsch/flexmark/html2md/converter/HtmlNodeRenderer.java +++ b/flexmark-html2md-converter/src/main/java/com/vladsch/flexmark/html2md/converter/HtmlNodeRenderer.java @@ -1,6 +1,6 @@ package com.vladsch.flexmark.html2md.converter; -import java.util.Set; +import java.util.List; /** * A renderer for a set of node types. @@ -9,5 +9,5 @@ public interface HtmlNodeRenderer { /** * @return the mapping of nodes this renderer handles to rendering function */ - Set> getHtmlNodeRendererHandlers(); + List> getHtmlNodeRendererHandlers(); } diff --git a/flexmark-html2md-converter/src/main/java/com/vladsch/flexmark/html2md/converter/internal/HtmlConverterCoreNodeRenderer.java b/flexmark-html2md-converter/src/main/java/com/vladsch/flexmark/html2md/converter/internal/HtmlConverterCoreNodeRenderer.java index 238274bea8..58dbbbb012 100644 --- a/flexmark-html2md-converter/src/main/java/com/vladsch/flexmark/html2md/converter/internal/HtmlConverterCoreNodeRenderer.java +++ b/flexmark-html2md-converter/src/main/java/com/vladsch/flexmark/html2md/converter/internal/HtmlConverterCoreNodeRenderer.java @@ -62,8 +62,8 @@ public Set getHtmlConverterPhases() { } @Override - public Set> getHtmlNodeRendererHandlers() { - HashSet> result = new HashSet<>(Arrays.asList( + public List> getHtmlNodeRendererHandlers() { + List> result = new ArrayList<>(Arrays.asList( // Generic unknown node formatter new HtmlNodeRendererHandler<>(FlexmarkHtmlConverter.COMMENT_NODE, Comment.class, this::processComment), new HtmlNodeRendererHandler<>(FlexmarkHtmlConverter.A_NODE, Element.class, this::processA), diff --git a/flexmark-html2md-converter/src/test/java/com/vladsch/flexmark/html2md/converter/HtmlNodeRendererHandlerTest.java b/flexmark-html2md-converter/src/test/java/com/vladsch/flexmark/html2md/converter/HtmlNodeRendererHandlerTest.java new file mode 100644 index 0000000000..a999b4b13c --- /dev/null +++ b/flexmark-html2md-converter/src/test/java/com/vladsch/flexmark/html2md/converter/HtmlNodeRendererHandlerTest.java @@ -0,0 +1,44 @@ +package com.vladsch.flexmark.html2md.converter; + +import com.vladsch.flexmark.util.data.DataHolder; + +import com.vladsch.flexmark.util.data.MutableDataSet; + +import org.junit.Test; + +import static com.vladsch.flexmark.html2md.converter.FlexmarkHtmlConverter.UNWRAPPED_TAGS; +import static org.junit.Assert.assertEquals; + +public class HtmlNodeRendererHandlerTest { + @Test + public void overrideDefinitionListRendererHandler() { + String markdown; + int incorrect = 0; + + DataHolder flexmarkOptions = new MutableDataSet() + .set(UNWRAPPED_TAGS, new String[]{"article", "address", "frameset", "section", "small", "iframe", + "dl", "dt", "dd",}) + .toImmutable(); + FlexmarkHtmlConverter converter = FlexmarkHtmlConverter.builder(flexmarkOptions).build(); + + for (int i = 0; i < 10000; i++) { + String html = "
\n" + + "
\n" + + "
\n" + + "
Data 1
\n" + + "\n" + + "
Data 2
\n" + + "
\n" + + "
\n" + + "
"; + + markdown = converter.convert(html); + + if (!markdown.contains("Data 2")) { + incorrect++; + } + } + + assertEquals(0, incorrect); + } +} diff --git a/flexmark-java-samples/src/com/vladsch/flexmark/java/samples/HtmlToMarkdownCustomizedSample.java b/flexmark-java-samples/src/com/vladsch/flexmark/java/samples/HtmlToMarkdownCustomizedSample.java index d123e5cbba..bf4db802f3 100644 --- a/flexmark-java-samples/src/com/vladsch/flexmark/java/samples/HtmlToMarkdownCustomizedSample.java +++ b/flexmark-java-samples/src/com/vladsch/flexmark/java/samples/HtmlToMarkdownCustomizedSample.java @@ -11,8 +11,9 @@ import org.jsoup.nodes.Element; import org.jsoup.nodes.Node; +import java.util.ArrayList; import java.util.Collections; -import java.util.HashSet; +import java.util.List; import java.util.Set; public class HtmlToMarkdownCustomizedSample { @@ -77,8 +78,8 @@ public CustomHtmlNodeConverter(DataHolder options) { } @Override - public Set> getHtmlNodeRendererHandlers() { - return new HashSet<>(Collections.singletonList( + public List> getHtmlNodeRendererHandlers() { + return new ArrayList<>(Collections.singletonList( new HtmlNodeRendererHandler<>("kbd", Element.class, this::processKbd) )); }