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

    +
    +

    Hello

    +
    + """, 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

    +
    +
    +

    Here is a list:

    +
    +
    +
      +
    • +

      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