> set = new HashSet<>();
+ set.add(new NodeRenderingHandler<>(D2Node.class, this::render));
+ return set;
+ }
+
+ private void render(D2Node node, NodeRendererContext context, HtmlWriter html) {
+ html.tag("p");
+ html.text("rendering d2 node");
+ html.tag("/p");
+ }
+
+ public static class Factory implements NodeRendererFactory {
+ @NotNull
+ @Override
+ public NodeRenderer apply(@NotNull DataHolder options) {
+ return new D2NodeRenderer(options);
+ }
+ }
+}
diff --git a/flexmark-ext-d2-diagrams/src/main/java/com/vladsch/flexmark/ext/d2/internal/package-info.java b/flexmark-ext-d2-diagrams/src/main/java/com/vladsch/flexmark/ext/d2/internal/package-info.java
new file mode 100644
index 000000000..37aa02744
--- /dev/null
+++ b/flexmark-ext-d2-diagrams/src/main/java/com/vladsch/flexmark/ext/d2/internal/package-info.java
@@ -0,0 +1 @@
+package com.vladsch.flexmark.ext.d2.internal;
diff --git a/flexmark-ext-d2-diagrams/src/main/java/com/vladsch/flexmark/ext/d2/package-info.java b/flexmark-ext-d2-diagrams/src/main/java/com/vladsch/flexmark/ext/d2/package-info.java
new file mode 100644
index 000000000..4d3df0552
--- /dev/null
+++ b/flexmark-ext-d2-diagrams/src/main/java/com/vladsch/flexmark/ext/d2/package-info.java
@@ -0,0 +1 @@
+package com.vladsch.flexmark.ext.d2;
diff --git a/flexmark-ext-d2-diagrams/src/main/javadoc/overview.html b/flexmark-ext-d2-diagrams/src/main/javadoc/overview.html
new file mode 100644
index 000000000..ffa4eeda6
--- /dev/null
+++ b/flexmark-ext-d2-diagrams/src/main/javadoc/overview.html
@@ -0,0 +1,8 @@
+
+
+
+
+
+flexmark-java extension for d2 diagrams
+
+
diff --git a/flexmark-ext-d2-diagrams/src/main/javadoc/overview.md b/flexmark-ext-d2-diagrams/src/main/javadoc/overview.md
new file mode 100644
index 000000000..28a211ee2
--- /dev/null
+++ b/flexmark-ext-d2-diagrams/src/main/javadoc/overview.md
@@ -0,0 +1 @@
+**flexmark-java extension for d2 diagrams**
diff --git a/flexmark-ext-d2-diagrams/src/test/java/com/vladsch/flexmark/ext/d2/D2RendererSpecTest.java b/flexmark-ext-d2-diagrams/src/test/java/com/vladsch/flexmark/ext/d2/D2RendererSpecTest.java
new file mode 100644
index 000000000..df407a00f
--- /dev/null
+++ b/flexmark-ext-d2-diagrams/src/test/java/com/vladsch/flexmark/ext/d2/D2RendererSpecTest.java
@@ -0,0 +1,31 @@
+package com.vladsch.flexmark.ext.d2;
+
+import com.vladsch.flexmark.core.test.util.RendererSpecTest;
+import com.vladsch.flexmark.parser.Parser;
+import com.vladsch.flexmark.test.util.spec.ResourceLocation;
+import com.vladsch.flexmark.test.util.spec.SpecExample;
+import com.vladsch.flexmark.util.data.DataHolder;
+import com.vladsch.flexmark.util.data.MutableDataSet;
+import org.jetbrains.annotations.NotNull;
+import org.junit.runners.Parameterized;
+
+import java.util.Collections;
+import java.util.List;
+
+public class D2RendererSpecTest extends RendererSpecTest {
+ final private static String SPEC_RESOURCE = "/d2_formatter_spec.md";
+ final public static @NotNull ResourceLocation RESOURCE_LOCATION = ResourceLocation.of(SPEC_RESOURCE);
+ final private static DataHolder OPTIONS = new MutableDataSet()
+ .set(Parser.EXTENSIONS, Collections.singleton(D2Extension.create()))
+ .toImmutable();
+
+ public D2RendererSpecTest(@NotNull SpecExample example) {
+ super(example, null, OPTIONS);
+ }
+
+ @Parameterized.Parameters(name = "{0}")
+ public static List