diff --git a/.gitignore b/.gitignore
index a19c3c0c..feeb4770 100644
--- a/.gitignore
+++ b/.gitignore
@@ -62,3 +62,7 @@ pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
release.properties
+
+
+# Asciidoctor
+.asciidoctor
\ No newline at end of file
diff --git a/asciidoc/asciidoc-light/deployment/pom.xml b/asciidoc/asciidoc-light/deployment/pom.xml
new file mode 100644
index 00000000..3e863747
--- /dev/null
+++ b/asciidoc/asciidoc-light/deployment/pom.xml
@@ -0,0 +1,52 @@
+
+
+ 4.0.0
+
+
+ io.quarkiverse.qute.web
+ quarkus-qute-web-asciidoc-light-parent
+ 999-SNAPSHOT
+
+ quarkus-qute-web-asciidoc-light-deployment
+ Quarkus Qute Web - Asciidoc - Light - Deployment
+
+
+
+ io.quarkiverse.qute.web
+ quarkus-qute-web-asciidoc-light
+ ${project.version}
+
+
+ io.quarkus
+ quarkus-junit5-internal
+ test
+
+
+ io.quarkus
+ quarkus-qute-deployment
+
+
+ org.assertj
+ assertj-core
+ ${assertj.version}
+ test
+
+
+
+
+
+
+ maven-compiler-plugin
+
+
+
+ io.quarkus
+ quarkus-extension-processor
+ ${quarkus.version}
+
+
+
+
+
+
+
diff --git a/asciidoc/deployment/src/main/java/io/quarkiverse/qute/web/asciidoc/deployment/QuteWebAsciidocProcessor.java b/asciidoc/asciidoc-light/deployment/src/main/java/io/quarkiverse/qute/web/asciidoclight/deployment/QuteWebAsciidocProcessor.java
similarity index 82%
rename from asciidoc/deployment/src/main/java/io/quarkiverse/qute/web/asciidoc/deployment/QuteWebAsciidocProcessor.java
rename to asciidoc/asciidoc-light/deployment/src/main/java/io/quarkiverse/qute/web/asciidoclight/deployment/QuteWebAsciidocProcessor.java
index 7b84cf17..5699e872 100644
--- a/asciidoc/deployment/src/main/java/io/quarkiverse/qute/web/asciidoc/deployment/QuteWebAsciidocProcessor.java
+++ b/asciidoc/asciidoc-light/deployment/src/main/java/io/quarkiverse/qute/web/asciidoclight/deployment/QuteWebAsciidocProcessor.java
@@ -1,9 +1,9 @@
-package io.quarkiverse.qute.web.asciidoc.deployment;
+package io.quarkiverse.qute.web.asciidoclight.deployment;
import java.util.ArrayList;
import java.util.List;
-import io.quarkiverse.qute.web.asciidoc.runtime.AsciidocSectionHelperFactory;
+import io.quarkiverse.qute.web.asciidoclight.runtime.AsciidocLightSectionHelperFactory;
import io.quarkus.arc.deployment.AdditionalBeanBuildItem;
import io.quarkus.deployment.annotations.BuildProducer;
import io.quarkus.deployment.annotations.BuildStep;
@@ -13,7 +13,7 @@
class QuteWebAsciidocProcessor {
- private static final String FEATURE = "qute-web-asciidoc";
+ private static final String FEATURE = "qute-web-asciidoc-light";
@BuildStep
FeatureBuildItem feature() {
@@ -22,7 +22,7 @@ FeatureBuildItem feature() {
@BuildStep
void process(BuildProducer additionalBeans) {
- additionalBeans.produce(new AdditionalBeanBuildItem(AsciidocSectionHelperFactory.class));
+ additionalBeans.produce(new AdditionalBeanBuildItem(AsciidocLightSectionHelperFactory.class));
}
@BuildStep
diff --git a/asciidoc/deployment/src/test/java/io/quarkiverse/qute/web/asciidoc/test/QuarkusAsciidocTest.java b/asciidoc/asciidoc-light/deployment/src/test/java/io/quarkiverse/qute/web/asciidoclight/test/QuarkusAsciidocLightTest.java
similarity index 78%
rename from asciidoc/deployment/src/test/java/io/quarkiverse/qute/web/asciidoc/test/QuarkusAsciidocTest.java
rename to asciidoc/asciidoc-light/deployment/src/test/java/io/quarkiverse/qute/web/asciidoclight/test/QuarkusAsciidocLightTest.java
index 28cb1332..546e2bda 100644
--- a/asciidoc/deployment/src/test/java/io/quarkiverse/qute/web/asciidoc/test/QuarkusAsciidocTest.java
+++ b/asciidoc/asciidoc-light/deployment/src/test/java/io/quarkiverse/qute/web/asciidoclight/test/QuarkusAsciidocLightTest.java
@@ -1,4 +1,4 @@
-package io.quarkiverse.qute.web.asciidoc.test;
+package io.quarkiverse.qute.web.asciidoclight.test;
import static org.assertj.core.api.Assertions.assertThat;
@@ -7,15 +7,15 @@
import org.assertj.core.api.SoftAssertions;
import org.junit.jupiter.api.Test;
-import io.quarkiverse.qute.web.asciidoc.runtime.AsciidocSectionHelperFactory;
+import io.quarkiverse.qute.web.asciidoclight.runtime.AsciidocLightSectionHelperFactory;
import io.quarkus.qute.Engine;
-public class QuarkusAsciidocTest {
+public class QuarkusAsciidocLightTest {
@Test
public void shouldConvertUsingAsciiTag() {
Engine engine = Engine.builder().addDefaults()
- .addSectionHelper(new AsciidocSectionHelperFactory()).build();
+ .addSectionHelper(new AsciidocLightSectionHelperFactory()).build();
String result = engine.parse("{#ascii}...{/ascii}").render();
@@ -29,7 +29,7 @@ public void shouldConvertUsingAsciiTag() {
@Test
public void shouldConvertUsingAsciidocTag() {
Engine engine = Engine.builder().addDefaults()
- .addSectionHelper(new AsciidocSectionHelperFactory()).build();
+ .addSectionHelper(new AsciidocLightSectionHelperFactory()).build();
String result = engine.parse("{#asciidoc}...{/asciidoc}").render();
@@ -43,7 +43,7 @@ public void shouldConvertUsingAsciidocTag() {
@Test
public void testH1() {
Engine engine = Engine.builder().addDefaults()
- .addSectionHelper(new AsciidocSectionHelperFactory()).build();
+ .addSectionHelper(new AsciidocLightSectionHelperFactory()).build();
String result = engine.parse("{#ascii}= Quarkus and Roq{/ascii}").render();
@@ -54,7 +54,7 @@ public void testH1() {
void shouldConvertWithForTagInsideAsciiTag() {
Engine engine = Engine.builder().addDefaults()
- .addSectionHelper(new AsciidocSectionHelperFactory()).build();
+ .addSectionHelper(new AsciidocLightSectionHelperFactory()).build();
String result = engine.parse("""
Quarkus and Qute
diff --git a/asciidoc/deployment/src/test/java/io/quarkiverse/qute/web/asciidoc/test/QuteAsciidocSectionHelperTest.java b/asciidoc/asciidoc-light/deployment/src/test/java/io/quarkiverse/qute/web/asciidoclight/test/QuteAsciidocSectionHelperTest.java
similarity index 95%
rename from asciidoc/deployment/src/test/java/io/quarkiverse/qute/web/asciidoc/test/QuteAsciidocSectionHelperTest.java
rename to asciidoc/asciidoc-light/deployment/src/test/java/io/quarkiverse/qute/web/asciidoclight/test/QuteAsciidocSectionHelperTest.java
index af7d1071..002f1847 100644
--- a/asciidoc/deployment/src/test/java/io/quarkiverse/qute/web/asciidoc/test/QuteAsciidocSectionHelperTest.java
+++ b/asciidoc/asciidoc-light/deployment/src/test/java/io/quarkiverse/qute/web/asciidoclight/test/QuteAsciidocSectionHelperTest.java
@@ -1,4 +1,4 @@
-package io.quarkiverse.qute.web.asciidoc.test;
+package io.quarkiverse.qute.web.asciidoclight.test;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/asciidoc/deployment/src/test/java/io/quarkiverse/qute/web/asciidoc/test/QuteAsciidocSectionWithInnerSectionTest.java b/asciidoc/asciidoc-light/deployment/src/test/java/io/quarkiverse/qute/web/asciidoclight/test/QuteAsciidocSectionWithInnerSectionTest.java
similarity index 97%
rename from asciidoc/deployment/src/test/java/io/quarkiverse/qute/web/asciidoc/test/QuteAsciidocSectionWithInnerSectionTest.java
rename to asciidoc/asciidoc-light/deployment/src/test/java/io/quarkiverse/qute/web/asciidoclight/test/QuteAsciidocSectionWithInnerSectionTest.java
index eaa7e57a..b808de8b 100644
--- a/asciidoc/deployment/src/test/java/io/quarkiverse/qute/web/asciidoc/test/QuteAsciidocSectionWithInnerSectionTest.java
+++ b/asciidoc/asciidoc-light/deployment/src/test/java/io/quarkiverse/qute/web/asciidoclight/test/QuteAsciidocSectionWithInnerSectionTest.java
@@ -1,4 +1,4 @@
-package io.quarkiverse.qute.web.asciidoc.test;
+package io.quarkiverse.qute.web.asciidoclight.test;
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
diff --git a/asciidoc/deployment/src/test/java/io/quarkiverse/qute/web/asciidoc/test/QuteWebAsciidocExtensionsTest.java b/asciidoc/asciidoc-light/deployment/src/test/java/io/quarkiverse/qute/web/asciidoclight/test/QuteWebAsciidocExtensionsTest.java
similarity index 95%
rename from asciidoc/deployment/src/test/java/io/quarkiverse/qute/web/asciidoc/test/QuteWebAsciidocExtensionsTest.java
rename to asciidoc/asciidoc-light/deployment/src/test/java/io/quarkiverse/qute/web/asciidoclight/test/QuteWebAsciidocExtensionsTest.java
index a6871396..d9a9ea97 100644
--- a/asciidoc/deployment/src/test/java/io/quarkiverse/qute/web/asciidoc/test/QuteWebAsciidocExtensionsTest.java
+++ b/asciidoc/asciidoc-light/deployment/src/test/java/io/quarkiverse/qute/web/asciidoclight/test/QuteWebAsciidocExtensionsTest.java
@@ -1,4 +1,4 @@
-package io.quarkiverse.qute.web.asciidoc.test;
+package io.quarkiverse.qute.web.asciidoclight.test;
import jakarta.inject.Inject;
diff --git a/asciidoc/integration-tests/pom.xml b/asciidoc/asciidoc-light/integration-tests/pom.xml
similarity index 91%
rename from asciidoc/integration-tests/pom.xml
rename to asciidoc/asciidoc-light/integration-tests/pom.xml
index 3a17954a..25feb0fb 100644
--- a/asciidoc/integration-tests/pom.xml
+++ b/asciidoc/asciidoc-light/integration-tests/pom.xml
@@ -3,11 +3,11 @@
4.0.0
io.quarkiverse.qute.web
- quarkus-qute-web-asciidoc-parent
+ quarkus-qute-web-asciidoc-light-parent
999-SNAPSHOT
- quarkus-qute-web-asciidoc-integration-tests
- Quarkus Qute Web - AsciiDoc - Integration Tests
+ quarkus-qute-web-asciidoc-light-integration-tests
+ Quarkus Qute Web - AsciiDoc - Light - Integration Tests
true
@@ -19,7 +19,7 @@
io.quarkiverse.qute.web
- quarkus-qute-web-asciidoc
+ quarkus-qute-web-asciidoc-light
${project.version}
diff --git a/asciidoc/integration-tests/src/main/java/io/quarkiverse/qute/web/it/MyBean.java b/asciidoc/asciidoc-light/integration-tests/src/main/java/io/quarkiverse/qute/web/it/MyBean.java
similarity index 100%
rename from asciidoc/integration-tests/src/main/java/io/quarkiverse/qute/web/it/MyBean.java
rename to asciidoc/asciidoc-light/integration-tests/src/main/java/io/quarkiverse/qute/web/it/MyBean.java
diff --git a/asciidoc/integration-tests/src/main/resources/application.properties b/asciidoc/asciidoc-light/integration-tests/src/main/resources/application.properties
similarity index 100%
rename from asciidoc/integration-tests/src/main/resources/application.properties
rename to asciidoc/asciidoc-light/integration-tests/src/main/resources/application.properties
diff --git a/asciidoc/integration-tests/src/main/resources/templates/pub/hello.html b/asciidoc/asciidoc-light/integration-tests/src/main/resources/templates/pub/hello.html
similarity index 100%
rename from asciidoc/integration-tests/src/main/resources/templates/pub/hello.html
rename to asciidoc/asciidoc-light/integration-tests/src/main/resources/templates/pub/hello.html
diff --git a/asciidoc/asciidoc-light/integration-tests/src/test/java/io/quarkiverse/qute/web/it/QuteWebAsciidocLightIT.java b/asciidoc/asciidoc-light/integration-tests/src/test/java/io/quarkiverse/qute/web/it/QuteWebAsciidocLightIT.java
new file mode 100644
index 00000000..5b1b767c
--- /dev/null
+++ b/asciidoc/asciidoc-light/integration-tests/src/test/java/io/quarkiverse/qute/web/it/QuteWebAsciidocLightIT.java
@@ -0,0 +1,7 @@
+package io.quarkiverse.qute.web.it;
+
+import io.quarkus.test.junit.QuarkusIntegrationTest;
+
+@QuarkusIntegrationTest
+public class QuteWebAsciidocLightIT extends QuteWebAsciidocLightTest {
+}
diff --git a/asciidoc/integration-tests/src/test/java/io/quarkiverse/qute/web/it/QuteWebAsciiDocTest.java b/asciidoc/asciidoc-light/integration-tests/src/test/java/io/quarkiverse/qute/web/it/QuteWebAsciidocLightTest.java
similarity index 96%
rename from asciidoc/integration-tests/src/test/java/io/quarkiverse/qute/web/it/QuteWebAsciiDocTest.java
rename to asciidoc/asciidoc-light/integration-tests/src/test/java/io/quarkiverse/qute/web/it/QuteWebAsciidocLightTest.java
index 6a5fb595..5c21eaaf 100644
--- a/asciidoc/integration-tests/src/test/java/io/quarkiverse/qute/web/it/QuteWebAsciiDocTest.java
+++ b/asciidoc/asciidoc-light/integration-tests/src/test/java/io/quarkiverse/qute/web/it/QuteWebAsciidocLightTest.java
@@ -10,7 +10,7 @@
import io.quarkus.test.junit.QuarkusTest;
@QuarkusTest
-public class QuteWebAsciiDocTest {
+public class QuteWebAsciidocLightTest {
@Test
public void testTemplates() {
diff --git a/asciidoc/asciidoc-light/pom.xml b/asciidoc/asciidoc-light/pom.xml
new file mode 100644
index 00000000..aca45531
--- /dev/null
+++ b/asciidoc/asciidoc-light/pom.xml
@@ -0,0 +1,35 @@
+
+
+ 4.0.0
+
+
+ io.quarkiverse.qute.web
+ quarkus-qute-web-asciidoc-parent
+ 999-SNAPSHOT
+ ../pom.xml
+
+ quarkus-qute-web-asciidoc-light-parent
+ 999-SNAPSHOT
+ pom
+ Quarkus Qute Web - Asciidoc - Light - Parent
+
+
+ deployment
+ runtime
+
+
+
+ it
+
+
+ performRelease
+ !true
+
+
+
+ integration-tests
+
+
+
+
+
diff --git a/asciidoc/runtime/pom.xml b/asciidoc/asciidoc-light/runtime/pom.xml
similarity index 87%
rename from asciidoc/runtime/pom.xml
rename to asciidoc/asciidoc-light/runtime/pom.xml
index 39b2f0f2..baf6cfce 100644
--- a/asciidoc/runtime/pom.xml
+++ b/asciidoc/asciidoc-light/runtime/pom.xml
@@ -4,11 +4,11 @@
io.quarkiverse.qute.web
- quarkus-qute-web-asciidoc-parent
+ quarkus-qute-web-asciidoc-light-parent
999-SNAPSHOT
- quarkus-qute-web-asciidoc
- Quarkus Qute - Asciidoc - Runtime
+ quarkus-qute-web-asciidoc-light
+ Quarkus Qute - Asciidoc - Light - Runtime
@@ -18,12 +18,12 @@
io.yupiik.maven
asciidoc-java
- ${asciidoc.java.version}
+ ${asciidoc.light.version}
io.yupiik.maven
ascii2svg
- ${asciidoc.java.version}
+ ${asciidoc.light.version}
diff --git a/asciidoc/runtime/src/main/java/io/quarkiverse/qute/web/asciidoc/runtime/AsciidocConverter.java b/asciidoc/asciidoc-light/runtime/src/main/java/io/quarkiverse/qute/web/asciidoclight/runtime/AsciidocLightConverter.java
similarity index 96%
rename from asciidoc/runtime/src/main/java/io/quarkiverse/qute/web/asciidoc/runtime/AsciidocConverter.java
rename to asciidoc/asciidoc-light/runtime/src/main/java/io/quarkiverse/qute/web/asciidoclight/runtime/AsciidocLightConverter.java
index 7994dcab..91279e5c 100644
--- a/asciidoc/runtime/src/main/java/io/quarkiverse/qute/web/asciidoc/runtime/AsciidocConverter.java
+++ b/asciidoc/asciidoc-light/runtime/src/main/java/io/quarkiverse/qute/web/asciidoclight/runtime/AsciidocLightConverter.java
@@ -1,4 +1,4 @@
-package io.quarkiverse.qute.web.asciidoc.runtime;
+package io.quarkiverse.qute.web.asciidoclight.runtime;
import java.nio.file.Path;
import java.util.Map;
@@ -8,7 +8,7 @@
import io.yupiik.asciidoc.parser.resolver.ContentResolver;
import io.yupiik.asciidoc.renderer.html.AsciidoctorLikeHtmlRenderer;
-public class AsciidocConverter {
+public class AsciidocLightConverter {
private final Parser parser = new Parser();
private final AsciidoctorLikeHtmlRenderer.Configuration config = new AsciidoctorLikeHtmlRenderer.Configuration()
diff --git a/asciidoc/runtime/src/main/java/io/quarkiverse/qute/web/asciidoc/runtime/AsciidocSectionHelperFactory.java b/asciidoc/asciidoc-light/runtime/src/main/java/io/quarkiverse/qute/web/asciidoclight/runtime/AsciidocLightSectionHelperFactory.java
similarity index 73%
rename from asciidoc/runtime/src/main/java/io/quarkiverse/qute/web/asciidoc/runtime/AsciidocSectionHelperFactory.java
rename to asciidoc/asciidoc-light/runtime/src/main/java/io/quarkiverse/qute/web/asciidoclight/runtime/AsciidocLightSectionHelperFactory.java
index 9509f129..881f825d 100644
--- a/asciidoc/runtime/src/main/java/io/quarkiverse/qute/web/asciidoc/runtime/AsciidocSectionHelperFactory.java
+++ b/asciidoc/asciidoc-light/runtime/src/main/java/io/quarkiverse/qute/web/asciidoclight/runtime/AsciidocLightSectionHelperFactory.java
@@ -1,10 +1,11 @@
-package io.quarkiverse.qute.web.asciidoc.runtime;
+package io.quarkiverse.qute.web.asciidoclight.runtime;
import java.util.List;
import java.util.concurrent.CompletionStage;
import io.quarkus.qute.CompletedStage;
import io.quarkus.qute.EngineConfiguration;
+import io.quarkus.qute.RawString;
import io.quarkus.qute.ResultNode;
import io.quarkus.qute.SectionHelper;
import io.quarkus.qute.SectionHelperFactory;
@@ -12,10 +13,10 @@
import io.quarkus.qute.TemplateExtension;
@EngineConfiguration
-public class AsciidocSectionHelperFactory
- implements SectionHelperFactory {
+public class AsciidocLightSectionHelperFactory
+ implements SectionHelperFactory {
- private static final AsciidocConverter CONVERTER = new AsciidocConverter();
+ private static final AsciidocLightConverter CONVERTER = new AsciidocLightConverter();
private static final AsciidocSectionHelper HELPER = new AsciidocSectionHelper();
@Override
@@ -29,8 +30,8 @@ public AsciidocSectionHelper initialize(SectionInitContext context) {
}
@TemplateExtension(matchNames = { "asciidocify", "asciidocToHtml" })
- static String convertToAsciidoc(String text, String ignoredName) {
- return CONVERTER.apply(text);
+ static RawString convertToAsciidoc(String text, String ignoredName) {
+ return new RawString(CONVERTER.apply(text));
}
public static class AsciidocSectionHelper implements SectionHelper {
diff --git a/asciidoc/runtime/src/main/resources/META-INF/quarkus-extension.yaml b/asciidoc/asciidoc-light/runtime/src/main/resources/META-INF/quarkus-extension.yaml
similarity index 65%
rename from asciidoc/runtime/src/main/resources/META-INF/quarkus-extension.yaml
rename to asciidoc/asciidoc-light/runtime/src/main/resources/META-INF/quarkus-extension.yaml
index 87f1b47b..03e1a4a7 100644
--- a/asciidoc/runtime/src/main/resources/META-INF/quarkus-extension.yaml
+++ b/asciidoc/asciidoc-light/runtime/src/main/resources/META-INF/quarkus-extension.yaml
@@ -1,5 +1,5 @@
-name: Qute Web Asciidoc
-description: A Qute Web extension designed to simplify the conversion of AsciiDoc to HTML by providing a set of AsciiDoc tags.
+name: Qute Web Asciidoc Light
+description: A Qute Web extension designed to simplify the conversion of AsciiDoc to HTML by providing a set of AsciiDoc tags using a light pure Java converter. It's faster but it is not feature complete.
metadata:
keywords:
- qute-web-asciidoc
diff --git a/asciidoc/deployment/pom.xml b/asciidoc/asciidoctorj/deployment/pom.xml
similarity index 86%
rename from asciidoc/deployment/pom.xml
rename to asciidoc/asciidoctorj/deployment/pom.xml
index 792aeb75..9c61a76b 100644
--- a/asciidoc/deployment/pom.xml
+++ b/asciidoc/asciidoctorj/deployment/pom.xml
@@ -4,16 +4,16 @@
io.quarkiverse.qute.web
- quarkus-qute-web-asciidoc-parent
+ quarkus-qute-web-asciidoctorj-parent
999-SNAPSHOT
- quarkus-qute-web-asciidoc-deployment
- Quarkus Qute Web - Asciidoc - Deployment
+ quarkus-qute-web-asciidoctorj-deployment
+ Quarkus Qute Web - AsciidoctorJ - Deployment
io.quarkiverse.qute.web
- quarkus-qute-web-asciidoc
+ quarkus-qute-web-asciidoctorj
${project.version}
diff --git a/asciidoc/asciidoctorj/deployment/src/main/java/io/quarkiverse/qute/web/asciidoctorj/deployment/QuteWebAsciidoctorJProcessor.java b/asciidoc/asciidoctorj/deployment/src/main/java/io/quarkiverse/qute/web/asciidoctorj/deployment/QuteWebAsciidoctorJProcessor.java
new file mode 100644
index 00000000..75a236f6
--- /dev/null
+++ b/asciidoc/asciidoctorj/deployment/src/main/java/io/quarkiverse/qute/web/asciidoctorj/deployment/QuteWebAsciidoctorJProcessor.java
@@ -0,0 +1,26 @@
+package io.quarkiverse.qute.web.asciidoctorj.deployment;
+
+import io.quarkiverse.qute.web.asciidoctorj.runtime.AsciidoctorJConfig;
+import io.quarkiverse.qute.web.asciidoctorj.runtime.AsciidoctorJConverter;
+import io.quarkiverse.qute.web.asciidoctorj.runtime.AsciidoctorJSectionHelperFactory;
+import io.quarkus.arc.deployment.AdditionalBeanBuildItem;
+import io.quarkus.deployment.annotations.BuildProducer;
+import io.quarkus.deployment.annotations.BuildStep;
+import io.quarkus.deployment.builditem.FeatureBuildItem;
+
+class QuteWebAsciidoctorJProcessor {
+
+ private static final String FEATURE = "qute-web-asciidoctorj";
+
+ @BuildStep
+ FeatureBuildItem feature() {
+ return new FeatureBuildItem(FEATURE);
+ }
+
+ @BuildStep
+ void process(BuildProducer additionalBeans, AsciidoctorJConfig config) {
+ additionalBeans.produce(new AdditionalBeanBuildItem(AsciidoctorJSectionHelperFactory.class));
+ additionalBeans.produce(AdditionalBeanBuildItem.unremovableOf(AsciidoctorJConverter.class));
+ }
+
+}
diff --git a/asciidoc/asciidoctorj/deployment/src/test/java/io/quarkiverse/qute/web/asciidoctorj/test/QuarkusAsciidoctorJTest.java b/asciidoc/asciidoctorj/deployment/src/test/java/io/quarkiverse/qute/web/asciidoctorj/test/QuarkusAsciidoctorJTest.java
new file mode 100644
index 00000000..e3a452ad
--- /dev/null
+++ b/asciidoc/asciidoctorj/deployment/src/test/java/io/quarkiverse/qute/web/asciidoctorj/test/QuarkusAsciidoctorJTest.java
@@ -0,0 +1,106 @@
+package io.quarkiverse.qute.web.asciidoctorj.test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.util.List;
+import java.util.Optional;
+
+import org.assertj.core.api.SoftAssertions;
+import org.junit.jupiter.api.Test;
+
+import io.quarkiverse.qute.web.asciidoctorj.runtime.AsciidoctorJConfig;
+import io.quarkiverse.qute.web.asciidoctorj.runtime.AsciidoctorJConverter;
+import io.quarkiverse.qute.web.asciidoctorj.runtime.AsciidoctorJSectionHelperFactory;
+import io.quarkus.qute.Engine;
+
+public class QuarkusAsciidoctorJTest {
+
+ public static final AsciidoctorJSectionHelperFactory FACTORY = new AsciidoctorJSectionHelperFactory(
+ new AsciidoctorJConverter(new AsciidoctorJConfig() {
+ @Override
+ public Optional icons() {
+ return Optional.empty();
+ }
+
+ @Override
+ public Optional sourceHighlighter() {
+ return Optional.empty();
+ }
+
+ @Override
+ public Optional outputImageDir() {
+ return Optional.empty();
+ }
+
+ @Override
+ public Optional imageDir() {
+ return Optional.empty();
+ }
+
+ }));
+
+ @Test
+ public void shouldConvertUsingAsciiTag() {
+ Engine engine = Engine.builder().addDefaults()
+ .addSectionHelper(FACTORY).build();
+
+ String result = engine.parse("{#ascii}...{/ascii}").render();
+
+ assertThat(result).containsIgnoringWhitespaces("""
+
+ """);
+ }
+
+ @Test
+ public void shouldConvertUsingAsciidocTag() {
+ Engine engine = Engine.builder().addDefaults()
+ .addSectionHelper(FACTORY).build();
+
+ String result = engine.parse("{#asciidoc}...{/asciidoc}").render();
+
+ assertThat(result).containsIgnoringWhitespaces("""
+
+ """);
+ }
+
+ @Test
+ public void testH1() {
+ Engine engine = Engine.builder().addDefaults()
+ .addSectionHelper(FACTORY).build();
+
+ String result = engine.parse("{#ascii}= Quarkus and Roq{/ascii}").render();
+
+ assertThat(result).contains("Quarkus and Roq
");
+ }
+
+ @Test
+ void shouldConvertWithForTagInsideAsciiTag() {
+
+ Engine engine = Engine.builder().addDefaults()
+ .addSectionHelper(FACTORY).build();
+
+ String result = engine.parse("""
+ Quarkus and Qute
+ {#ascii}
+ == Qute and Roq
+ Here is a list:
+
+ {#for item in items}
+ * an {item} as a list item
+ {/for}
+ {/ascii}
+ """).data("items", List.of("apple", "banana", "cherry"))
+ .render();
+
+ SoftAssertions.assertSoftly(softly -> {
+ softly.assertThat(result).contains("Quarkus and Qute
");
+ softly.assertThat(result).contains("Qute and Roq
");
+ softly.assertThat(result).contains("");
+ softly.assertThat(result).contains("- ");
+ });
+ }
+}
diff --git a/asciidoc/asciidoctorj/deployment/src/test/java/io/quarkiverse/qute/web/asciidoctorj/test/QuteAsciidoctorJDiagramTest.java b/asciidoc/asciidoctorj/deployment/src/test/java/io/quarkiverse/qute/web/asciidoctorj/test/QuteAsciidoctorJDiagramTest.java
new file mode 100644
index 00000000..fc14995b
--- /dev/null
+++ b/asciidoc/asciidoctorj/deployment/src/test/java/io/quarkiverse/qute/web/asciidoctorj/test/QuteAsciidoctorJDiagramTest.java
@@ -0,0 +1,47 @@
+package io.quarkiverse.qute.web.asciidoctorj.test;
+
+import jakarta.inject.Inject;
+
+import org.assertj.core.api.SoftAssertions;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+import io.quarkus.qute.Engine;
+import io.quarkus.test.QuarkusUnitTest;
+
+public class QuteAsciidoctorJDiagramTest {
+
+ @RegisterExtension
+ static final QuarkusUnitTest quarkusApp = new QuarkusUnitTest();
+
+ @Inject
+ Engine engine;
+
+ @Test
+ void shouldRenderDiagram() {
+
+ String result = engine.parse("""
+
Quarkus and Qute
+ {#ascii}
+ == Qute and Diagram
+
+ Here is a diagram:
+
+ [plantuml,target="wunderbar",format=svg]
+ ----
+ @startuml
+ Test -> Test2
+ @enduml
+ ----
+
+ {/ascii}
+ """).render();
+
+ SoftAssertions.assertSoftly(softly -> {
+ softly.assertThat(result).contains("Quarkus and Qute
");
+ softly.assertThat(result).contains("Qute and Diagram
");
+ softly.assertThat(result).containsPattern(" app.addAsResource(new StringAsset(
+ """
+ {#ascii}
+ = Qute and Roq
+
+ Hello
+ {/ascii}
+ """),
+ "templates/foo.txt"));
+
+ @Inject
+ Template foo;
+
+ @Test
+ void shouldConvertUsingAsciiTag() {
+ String result = foo.render();
+
+ assertThat(result).containsIgnoringWhitespaces("""
+ Qute and Roq
+
+ """, result);
+ }
+}
diff --git a/asciidoc/asciidoctorj/deployment/src/test/java/io/quarkiverse/qute/web/asciidoctorj/test/QuteAsciidoctorJSectionWithInnerSectionTest.java b/asciidoc/asciidoctorj/deployment/src/test/java/io/quarkiverse/qute/web/asciidoctorj/test/QuteAsciidoctorJSectionWithInnerSectionTest.java
new file mode 100644
index 00000000..0b5c0009
--- /dev/null
+++ b/asciidoc/asciidoctorj/deployment/src/test/java/io/quarkiverse/qute/web/asciidoctorj/test/QuteAsciidoctorJSectionWithInnerSectionTest.java
@@ -0,0 +1,69 @@
+package io.quarkiverse.qute.web.asciidoctorj.test;
+
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
+
+import java.util.List;
+
+import jakarta.inject.Inject;
+
+import org.jboss.shrinkwrap.api.asset.StringAsset;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+import io.quarkus.qute.Template;
+import io.quarkus.test.QuarkusUnitTest;
+
+public class QuteAsciidoctorJSectionWithInnerSectionTest {
+
+ @RegisterExtension
+ static final QuarkusUnitTest quarkusApp = new QuarkusUnitTest()
+ .withApplicationRoot(
+ app -> app.addAsResource(new StringAsset(
+ """
+ Quarkus and Qute
+ {#asciidoc}
+ == Qute and Roq
+
+ Here is a list:
+
+ {#for item in items}
+ * an {item} as a list item
+ {/for}
+ {/asciidoc}
+ """),
+ "templates/foo.txt"));
+
+ @Inject
+ Template foo;
+
+ @Test
+ void shouldConvertWithInnerSection() {
+ String result = foo.data("items", List.of("apple", "banana", "cherry"))
+ .render();
+
+ assertThat(result).containsIgnoringWhitespaces("""
+ Quarkus and Qute
+
+
Qute and Roq
+
+
+
+
+ -
+
an apple as a list item
+
+ -
+
an banana as a list item
+
+ -
+
an cherry as a list item
+
+
+
+
+
+ """, result);
+ }
+}
diff --git a/asciidoc/asciidoctorj/deployment/src/test/java/io/quarkiverse/qute/web/asciidoctorj/test/QuteWebAsciidoctorJExtensionsTest.java b/asciidoc/asciidoctorj/deployment/src/test/java/io/quarkiverse/qute/web/asciidoctorj/test/QuteWebAsciidoctorJExtensionsTest.java
new file mode 100644
index 00000000..0c02b88b
--- /dev/null
+++ b/asciidoc/asciidoctorj/deployment/src/test/java/io/quarkiverse/qute/web/asciidoctorj/test/QuteWebAsciidoctorJExtensionsTest.java
@@ -0,0 +1,31 @@
+package io.quarkiverse.qute.web.asciidoctorj.test;
+
+import jakarta.inject.Inject;
+
+import org.assertj.core.api.Assertions;
+import org.jboss.shrinkwrap.api.asset.StringAsset;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+import io.quarkus.qute.Engine;
+import io.quarkus.test.QuarkusUnitTest;
+
+public class QuteWebAsciidoctorJExtensionsTest {
+
+ @RegisterExtension
+ static final QuarkusUnitTest quarkusApp = new QuarkusUnitTest()
+ .withApplicationRoot(
+ app -> app
+ .addAsResource(new StringAsset("{data.asciidocify}"), "templates/foo.txt")
+ .addAsResource(new StringAsset("{data.asciidocToHtml}"), "templates/bar.txt"));
+
+ @Inject
+ Engine engine;
+
+ @Test
+ void shouldUseAsciidocify() {
+ String asciidoc = "= Qute and Roq";
+ Assertions.assertThat(engine.getTemplate("foo").data("data", asciidoc).render()).contains("Qute and Roq
");
+ Assertions.assertThat(engine.getTemplate("bar").data("data", asciidoc).render()).contains("Qute and Roq
");
+ }
+}
diff --git a/asciidoc/asciidoctorj/integration-tests/pom.xml b/asciidoc/asciidoctorj/integration-tests/pom.xml
new file mode 100644
index 00000000..8ad394cd
--- /dev/null
+++ b/asciidoc/asciidoctorj/integration-tests/pom.xml
@@ -0,0 +1,74 @@
+
+
+ 4.0.0
+
+ io.quarkiverse.qute.web
+ quarkus-qute-web-asciidoctorj-parent
+ 999-SNAPSHOT
+
+ quarkus-qute-web-asciidoctorj-integration-tests
+ Quarkus Qute Web - AsciiDocJ - Integration Tests
+
+ true
+
+
+
+ io.quarkiverse.qute.web
+ quarkus-qute-web
+ ${project.version}
+
+
+ io.quarkiverse.qute.web
+ quarkus-qute-web-asciidoctorj
+ ${project.version}
+
+
+ io.quarkus
+ quarkus-junit5
+ test
+
+
+ io.rest-assured
+ rest-assured
+ test
+
+
+ io.quarkus
+ quarkus-devtools-testing
+ test
+
+
+
+
+
+ io.quarkus
+ quarkus-maven-plugin
+
+
+
+ build
+
+
+
+
+
+ maven-failsafe-plugin
+
+
+
+ integration-test
+ verify
+
+
+
+ ${project.build.directory}/${project.build.finalName}-runner
+ org.jboss.logmanager.LogManager
+ ${maven.home}
+
+
+
+
+
+
+
+
diff --git a/asciidoc/asciidoctorj/integration-tests/src/main/java/io/quarkiverse/qute/web/it/MyBean.java b/asciidoc/asciidoctorj/integration-tests/src/main/java/io/quarkiverse/qute/web/it/MyBean.java
new file mode 100644
index 00000000..25b33f8c
--- /dev/null
+++ b/asciidoc/asciidoctorj/integration-tests/src/main/java/io/quarkiverse/qute/web/it/MyBean.java
@@ -0,0 +1,16 @@
+package io.quarkiverse.qute.web.it;
+
+import java.util.List;
+
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Named;
+
+@Named("foo")
+@ApplicationScoped
+public class MyBean {
+
+ public List names() {
+ return List.of("Joe", "Violet", "Omaha");
+ }
+
+}
diff --git a/asciidoc/asciidoctorj/integration-tests/src/main/resources/application.properties b/asciidoc/asciidoctorj/integration-tests/src/main/resources/application.properties
new file mode 100644
index 00000000..e69de29b
diff --git a/asciidoc/asciidoctorj/integration-tests/src/main/resources/templates/pub/hello.html b/asciidoc/asciidoctorj/integration-tests/src/main/resources/templates/pub/hello.html
new file mode 100644
index 00000000..654897b3
--- /dev/null
+++ b/asciidoc/asciidoctorj/integration-tests/src/main/resources/templates/pub/hello.html
@@ -0,0 +1,71 @@
+
+
+
+
+Hello
+
+
+ Hello {name ?: "world"}!
+ {#asciidoc}
+ The goal of this extension is to expose https://quarkus.io/guides/qute-reference[Qute] templates located in the `src/main/resource/templates/pub` directory via HTTP.
+ Automatically, no controllers needed.
+ For example, the template `src/main/resource/templates/pub/foo.html` will be served from the paths `/foo` and `/foo.html` by default.
+
+ NOTE: The `index.html` and `index.qute.html` pages are handled specifically, i.e. they are also served as a "default page" of the containing directory. For example, the template `src/main/resource/templates/pub/index.html` will be served from the paths `/index`, `/index.html` and `/` by default.
+
+ == Installation
+
+ If you want to use this extension, you need to add the `io.quarkiverse.qute.web:quarkus-qute-web` extension first to your build file.
+
+ For instance, with Maven, add the following dependency to your POM file:
+
+ {#for name in cdi:foo.names}
+ * {name}
+ {/}
+
+ [source,xml,subs=attributes+]
+ ----
+
+ io.quarkiverse.qute.web
+ quarkus-qute-web
+ \{project-version}
+
+ ----
+
+ [%collapsible]
+ ====
+ You can do that using several ways :
+
+ [qanda]
+ Manually::
+ [source,xml]
+ .pom.xml
+ ----
+
+ io.quarkiverse.roq
+ quarkus-roq-plugin-asciidoc
+ $\{quarkus-roq.version\}
+
+ ----
+
+ Using the Quarkus cli::
+ [source,shell]
+ ----
+ quarkus extension add io.quarkiverse.roq:quarkus-roq-plugin-asciidoc
+ ----
+
+ Using the Maven::
+ [source,shell]
+ ----
+ ./mvnw quarkus:add-extension -Dextensions="io.quarkiverse.roq:quarkus-roq-plugin-asciidoc"
+ ----
+
+ Using the Gradle::
+ [source,shell]
+ ----
+ ./gradlew addExtension --extensions="io.quarkiverse.roq:quarkus-roq-plugin-asciidoc"
+ ----
+ ====
+ {/}
+
+
\ No newline at end of file
diff --git a/asciidoc/integration-tests/src/test/java/io/quarkiverse/qute/web/it/QuteWebAsciiDocIT.java b/asciidoc/asciidoctorj/integration-tests/src/test/java/io/quarkiverse/qute/web/it/QuteWebAsciidoctorJIT.java
similarity index 62%
rename from asciidoc/integration-tests/src/test/java/io/quarkiverse/qute/web/it/QuteWebAsciiDocIT.java
rename to asciidoc/asciidoctorj/integration-tests/src/test/java/io/quarkiverse/qute/web/it/QuteWebAsciidoctorJIT.java
index 5272c8b4..d6e8d2ba 100644
--- a/asciidoc/integration-tests/src/test/java/io/quarkiverse/qute/web/it/QuteWebAsciiDocIT.java
+++ b/asciidoc/asciidoctorj/integration-tests/src/test/java/io/quarkiverse/qute/web/it/QuteWebAsciidoctorJIT.java
@@ -3,5 +3,5 @@
import io.quarkus.test.junit.QuarkusIntegrationTest;
@QuarkusIntegrationTest
-public class QuteWebAsciiDocIT extends QuteWebAsciiDocTest {
+public class QuteWebAsciidoctorJIT extends QuteWebAsciidoctorJTest {
}
diff --git a/asciidoc/asciidoctorj/integration-tests/src/test/java/io/quarkiverse/qute/web/it/QuteWebAsciidoctorJTest.java b/asciidoc/asciidoctorj/integration-tests/src/test/java/io/quarkiverse/qute/web/it/QuteWebAsciidoctorJTest.java
new file mode 100644
index 00000000..2ae1bf3e
--- /dev/null
+++ b/asciidoc/asciidoctorj/integration-tests/src/test/java/io/quarkiverse/qute/web/it/QuteWebAsciidoctorJTest.java
@@ -0,0 +1,29 @@
+package io.quarkiverse.qute.web.it;
+
+import static io.restassured.RestAssured.given;
+import static org.hamcrest.Matchers.containsString;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.equalToCompressingWhiteSpace;
+
+import org.junit.jupiter.api.Test;
+
+import io.quarkus.test.junit.QuarkusTest;
+
+@QuarkusTest
+public class QuteWebAsciidoctorJTest {
+
+ @Test
+ public void testTemplates() {
+ given()
+ .when().get("/hello")
+ .then()
+ .statusCode(200)
+ .log().ifValidationFails()
+ .body("html.body.p[0]", equalTo("Hello world!"))
+ .body("html.body.div.div.div.ul.li[0].p", equalToCompressingWhiteSpace("Joe"))
+ .body("html.body.div.h2", equalTo("Installation"))
+ .body("html.body.div.div.div.div.pre.code.@class", equalTo("language-xml"))
+ .body(containsString(" <groupId>io.quarkiverse.qute.web</groupId>"));
+
+ }
+}
diff --git a/asciidoc/asciidoctorj/pom.xml b/asciidoc/asciidoctorj/pom.xml
new file mode 100644
index 00000000..64b44bb1
--- /dev/null
+++ b/asciidoc/asciidoctorj/pom.xml
@@ -0,0 +1,35 @@
+
+
+ 4.0.0
+
+
+ io.quarkiverse.qute.web
+ quarkus-qute-web-asciidoc-parent
+ 999-SNAPSHOT
+ ../pom.xml
+
+ quarkus-qute-web-asciidoctorj-parent
+ 999-SNAPSHOT
+ pom
+ Quarkus Qute Web - AsciidoctorJ - Parent
+
+
+ deployment
+ runtime
+
+
+
+ it
+
+
+ performRelease
+ !true
+
+
+
+ integration-tests
+
+
+
+
+
diff --git a/asciidoc/asciidoctorj/runtime/pom.xml b/asciidoc/asciidoctorj/runtime/pom.xml
new file mode 100644
index 00000000..38d9b405
--- /dev/null
+++ b/asciidoc/asciidoctorj/runtime/pom.xml
@@ -0,0 +1,62 @@
+
+
+ 4.0.0
+
+
+ io.quarkiverse.qute.web
+ quarkus-qute-web-asciidoctorj-parent
+ 999-SNAPSHOT
+
+ quarkus-qute-web-asciidoctorj
+ Quarkus Qute - AsciidoctorJ - Runtime
+
+
+
+ io.quarkus
+ quarkus-qute
+
+
+ org.asciidoctor
+ asciidoctorj
+ ${asciidoctorj.version}
+
+
+ org.asciidoctor
+ asciidoctorj-diagram
+ ${asciidoctorj-diagram.version}
+
+
+
+
+
+
+ io.quarkus
+ quarkus-extension-maven-plugin
+ ${quarkus.version}
+
+
+ compile
+
+ extension-descriptor
+
+
+ ${project.groupId}:${project.artifactId}-deployment:${project.version}
+
+
+
+
+
+ maven-compiler-plugin
+
+
+
+ io.quarkus
+ quarkus-extension-processor
+ ${quarkus.version}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/asciidoc/asciidoctorj/runtime/src/main/java/io/quarkiverse/qute/web/asciidoctorj/runtime/AsciidoctorJConfig.java b/asciidoc/asciidoctorj/runtime/src/main/java/io/quarkiverse/qute/web/asciidoctorj/runtime/AsciidoctorJConfig.java
new file mode 100644
index 00000000..db368e39
--- /dev/null
+++ b/asciidoc/asciidoctorj/runtime/src/main/java/io/quarkiverse/qute/web/asciidoctorj/runtime/AsciidoctorJConfig.java
@@ -0,0 +1,38 @@
+package io.quarkiverse.qute.web.asciidoctorj.runtime;
+
+import java.util.Optional;
+
+import io.quarkus.runtime.annotations.ConfigPhase;
+import io.quarkus.runtime.annotations.ConfigRoot;
+import io.smallrye.config.ConfigMapping;
+import io.smallrye.config.WithDefault;
+
+@ConfigMapping(prefix = "quarkus.qute.asciidoctorj")
+@ConfigRoot(phase = ConfigPhase.BUILD_AND_RUN_TIME_FIXED)
+public interface AsciidoctorJConfig {
+
+ /**
+ * To enable image-based icons, you set this config to the value font.
+ */
+ Optional icons();
+
+ /**
+ * Source highlighting is applied to text that’s assigned the source block style (either explicitly or implicitly) and a
+ * source language.
+ */
+ Optional sourceHighlighter();
+
+ /**
+ * Where images will be rendered
+ */
+ @WithDefault("target/images/")
+ Optional outputImageDir();
+
+ /**
+ * Where images will linked to.oq
+ *
+ */
+ @WithDefault("/public")
+ Optional imageDir();
+
+}
diff --git a/asciidoc/asciidoctorj/runtime/src/main/java/io/quarkiverse/qute/web/asciidoctorj/runtime/AsciidoctorJConverter.java b/asciidoc/asciidoctorj/runtime/src/main/java/io/quarkiverse/qute/web/asciidoctorj/runtime/AsciidoctorJConverter.java
new file mode 100644
index 00000000..418b3514
--- /dev/null
+++ b/asciidoc/asciidoctorj/runtime/src/main/java/io/quarkiverse/qute/web/asciidoctorj/runtime/AsciidoctorJConverter.java
@@ -0,0 +1,90 @@
+package io.quarkiverse.qute.web.asciidoctorj.runtime;
+
+import java.time.Duration;
+import java.time.Instant;
+
+import jakarta.inject.Inject;
+import jakarta.inject.Singleton;
+
+import org.asciidoctor.*;
+import org.jboss.logging.Logger;
+
+@Singleton
+public class AsciidoctorJConverter {
+
+ private static final Logger LOG = Logger.getLogger(AsciidoctorJConverter.class);
+
+ private final Asciidoctor asciidoctor;
+
+ private final AsciidoctorJConfig config;
+ private final Attributes options;
+
+ @Inject
+ public AsciidoctorJConverter(AsciidoctorJConfig config) {
+ LOG.info("Starting Asciidoctorj...");
+ final Instant start = Instant.now();
+ this.asciidoctor = Asciidoctor.Factory.create();
+ this.config = config;
+ asciidoctor.requireLibrary("asciidoctor-diagram");
+ final AttributesBuilder builder = Attributes.builder().showTitle(true).attribute("noheader", true);
+ if (config.icons().isPresent()) {
+ builder.icons(config.icons().get());
+ }
+ if (config.sourceHighlighter().isPresent()) {
+ builder.sourceHighlighter(config.sourceHighlighter().get());
+ }
+ if (config.imageDir().isPresent()) {
+ builder.imagesDir(config.imageDir().get());
+ }
+ if (config.outputImageDir().isPresent()) {
+ builder.attribute("imagesoutdir", config.outputImageDir().get());
+ }
+ options = builder.build();
+ LOG.infof("Asciidoctorj started in %sms", Duration.between(start, Instant.now()).toMillis());
+ }
+
+ public String apply(String asciidoc) {
+ // Cleaning the content from global indentation is necessary because
+ // AsciiDoc content is not supposed to be indented globally
+ // In Qute context it might often be indented
+ return asciidoctor.convert(trimIndent(asciidoc), Options.builder()
+ .safe(SafeMode.UNSAFE)
+ .backend("html5")
+ .attributes(options)
+ .build());
+ }
+
+ public static String trimIndent(String content) {
+ int minIndent = Integer.MAX_VALUE;
+ boolean foundNonEmptyLine = false;
+
+ // Calculate minimum indentation in a single pass
+ final String[] lines = content.split("\\v");
+ for (String line : lines) {
+ if (!line.trim().isEmpty()) {
+ int leadingSpaces = line.indexOf(line.trim());
+ minIndent = Math.min(minIndent, leadingSpaces);
+ foundNonEmptyLine = true;
+ }
+ }
+
+ // If no indentation needs removal, or all lines are empty, return original content
+ if (!foundNonEmptyLine || minIndent == 0) {
+ return content;
+ }
+
+ // Build the output with trimmed indent
+ StringBuilder result = new StringBuilder();
+ for (String line : lines) {
+ if (line.length() >= minIndent) {
+ result.append(line.substring(minIndent));
+ } else {
+ result.append(line); // Preserve empty lines as-is
+ }
+ result.append("\n");
+ }
+
+ return result.toString();
+ }
+
+}
diff --git a/asciidoc/asciidoctorj/runtime/src/main/java/io/quarkiverse/qute/web/asciidoctorj/runtime/AsciidoctorJSectionHelperFactory.java b/asciidoc/asciidoctorj/runtime/src/main/java/io/quarkiverse/qute/web/asciidoctorj/runtime/AsciidoctorJSectionHelperFactory.java
new file mode 100644
index 00000000..1b090db2
--- /dev/null
+++ b/asciidoc/asciidoctorj/runtime/src/main/java/io/quarkiverse/qute/web/asciidoctorj/runtime/AsciidoctorJSectionHelperFactory.java
@@ -0,0 +1,71 @@
+package io.quarkiverse.qute.web.asciidoctorj.runtime;
+
+import java.util.List;
+import java.util.concurrent.CompletionStage;
+
+import jakarta.inject.Inject;
+
+import io.quarkus.arc.Arc;
+import io.quarkus.arc.impl.LazyValue;
+import io.quarkus.qute.CompletedStage;
+import io.quarkus.qute.EngineConfiguration;
+import io.quarkus.qute.RawString;
+import io.quarkus.qute.ResultNode;
+import io.quarkus.qute.SectionHelper;
+import io.quarkus.qute.SectionHelperFactory;
+import io.quarkus.qute.SingleResultNode;
+import io.quarkus.qute.TemplateExtension;
+
+@EngineConfiguration
+public class AsciidoctorJSectionHelperFactory
+ implements SectionHelperFactory {
+
+ private static final LazyValue CONVERTER = new LazyValue<>(
+ () -> Arc.container().instance(AsciidoctorJConverter.class).get());
+
+ private final AsciidoctorJConverter converter;
+
+ public AsciidoctorJSectionHelperFactory() {
+ // This constructor is only used during build
+ // where the converter is not used at all
+ this.converter = null;
+ }
+
+ @Inject
+ public AsciidoctorJSectionHelperFactory(AsciidoctorJConverter converter) {
+ this.converter = converter;
+ }
+
+ @Override
+ public List getDefaultAliases() {
+ return List.of("asciidoc", "ascii");
+ }
+
+ @Override
+ public AsciidocSectionHelper initialize(SectionInitContext context) {
+ return new AsciidocSectionHelper(converter);
+ }
+
+ @TemplateExtension(matchNames = { "asciidocify", "asciidocToHtml" })
+ static RawString convertToAsciidoc(String text, String ignoredName) {
+ return new RawString(CONVERTER.get().apply(text));
+ }
+
+ public static class AsciidocSectionHelper implements SectionHelper {
+
+ private final AsciidoctorJConverter converter;
+
+ public AsciidocSectionHelper(AsciidoctorJConverter converter) {
+ this.converter = converter;
+ }
+
+ @Override
+ public CompletionStage resolve(SectionResolutionContext context) {
+ return context.execute().thenCompose(rn -> {
+ StringBuilder sb = new StringBuilder();
+ rn.process(sb::append);
+ return CompletedStage.of(new SingleResultNode(converter.apply(sb.toString())));
+ });
+ }
+ }
+}
diff --git a/asciidoc/asciidoctorj/runtime/src/main/resources/META-INF/quarkus-extension.yaml b/asciidoc/asciidoctorj/runtime/src/main/resources/META-INF/quarkus-extension.yaml
new file mode 100644
index 00000000..0fa26128
--- /dev/null
+++ b/asciidoc/asciidoctorj/runtime/src/main/resources/META-INF/quarkus-extension.yaml
@@ -0,0 +1,15 @@
+name: Qute Web AsciidoctorJ
+description: A Qute Web extension designed to provide full Asciidoctor integration by leveraging AsciidoctorJ. Since it is using JRuby, it is not made for native compilation (use qute-web-asciidoc-light instead).
+metadata:
+ keywords:
+ - qute-web-asciidoc
+ - asciidoctorj
+ - roq
+ - qute
+ - website
+ - templates
+ - asciidoc
+ guide: https://quarkiverse.github.io/quarkiverse-docs/quarkus-qute-web/dev/index.html
+ categories:
+ - "miscellaneous"
+ status: "preview"
diff --git a/asciidoc/pom.xml b/asciidoc/pom.xml
index 0625ee25..8ead171f 100644
--- a/asciidoc/pom.xml
+++ b/asciidoc/pom.xml
@@ -12,22 +12,8 @@
Quarkus Qute Web - Asciidoc - Parent
- deployment
- runtime
+ asciidoc-light
+ asciidoctorj
-
-
- it
-
-
- performRelease
- !true
-
-
-
- integration-tests
-
-
-
diff --git a/markdown/runtime/src/main/java/io/quarkiverse/qute/web/markdown/runtime/MarkdownSectionHelperFactory.java b/markdown/runtime/src/main/java/io/quarkiverse/qute/web/markdown/runtime/MarkdownSectionHelperFactory.java
index 4b2461b5..8751b9bf 100644
--- a/markdown/runtime/src/main/java/io/quarkiverse/qute/web/markdown/runtime/MarkdownSectionHelperFactory.java
+++ b/markdown/runtime/src/main/java/io/quarkiverse/qute/web/markdown/runtime/MarkdownSectionHelperFactory.java
@@ -9,6 +9,7 @@
import io.quarkus.arc.impl.LazyValue;
import io.quarkus.qute.CompletedStage;
import io.quarkus.qute.EngineConfiguration;
+import io.quarkus.qute.RawString;
import io.quarkus.qute.ResultNode;
import io.quarkus.qute.SectionHelper;
import io.quarkus.qute.SectionHelperFactory;
@@ -47,8 +48,8 @@ public MarkdownSectionHelper initialize(SectionInitContext context) {
() -> Arc.container().instance(MdConverter.class).get());
@TemplateExtension(matchNames = { "markdownify", "mdToHtml" })
- static String convertToMarkdown(String text, String ignoredName) {
- return CONVERTER.get().html(text);
+ static RawString convertToMarkdown(String text, String ignoredName) {
+ return new RawString(CONVERTER.get().html(text));
}
public static class MarkdownSectionHelper implements SectionHelper {
diff --git a/pom.xml b/pom.xml
index 2ccdda7e..48a24f3a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -30,8 +30,10 @@
UTF-8
3.15.1
0.24.0
- 1.2.5
+ 1.2.5
+ 3.0.0
3.26.3
+ 2.3.1