Skip to content

Commit

Permalink
Apply pull request suggestions
Browse files Browse the repository at this point in the history
  • Loading branch information
mcruzdev committed Jul 3, 2024
1 parent 71173ac commit 44fbb3e
Show file tree
Hide file tree
Showing 10 changed files with 70 additions and 115 deletions.
21 changes: 2 additions & 19 deletions docs/modules/ROOT/pages/markdown.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -24,18 +24,7 @@ This extension can be used to render Markdown templates inside a Qute template o

=== Standalone Usage

Add the `quarkus-qute-web-markdown` extension to your project:

[source,xml,subs=attributes+]
----
<dependency>
<groupId>io.quarkiverse.qute.web</groupId>
<artifactId>quarkus-qute-web-markdown</artifactId>
<version>${project.version}</version>
</dependency>
----

Then, create a new Qute template with `foo.txt` name.
Create a new Qute template with `foo.txt` name.

[source,html]
----
Expand Down Expand Up @@ -83,21 +72,15 @@ The output should be the following:
=== Integration with Qute Web

This extension can be combined with the `quarkus-qute-web` extension to render Markdown templates in a web application.
Add the `quarkus-qute-web` and `quarkus-qute-web-markdown` extensions to your project, inside the `pom.xml` file:
Add the `quarkus-qute-web` extension to your project, inside the `pom.xml` file:

[source,xml,subs=attributes+]
----
<!-- inside <dependencies> -->
<dependency>
<groupId>io.quarkiverse.qute.web</groupId>
<artifactId>quarkus-qute-web</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.quarkiverse.qute.web</groupId>
<artifactId>quarkus-qute-web-markdown</artifactId>
<version>${project.version}</version>
</dependency>
----

Then, create a new Qute template with the `.txt` or `.html` extension.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.quarkiverse.qute.web.markdown.deployment;

import io.quarkiverse.qute.web.markdown.runtime.QuteMarkdownConfigurator;
import io.quarkiverse.qute.web.markdown.runtime.MarkdownSectionHelperFactory;
import io.quarkus.arc.deployment.AdditionalBeanBuildItem;
import io.quarkus.deployment.annotations.BuildProducer;
import io.quarkus.deployment.annotations.BuildStep;
Expand All @@ -16,7 +16,7 @@ FeatureBuildItem feature() {
}

@BuildStep
void initMarkdown(BuildProducer<AdditionalBeanBuildItem> beans) {
beans.produce(new AdditionalBeanBuildItem(QuteMarkdownConfigurator.class));
void process(BuildProducer<AdditionalBeanBuildItem> additionalBeans) {
additionalBeans.produce(new AdditionalBeanBuildItem(MarkdownSectionHelperFactory.class));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,38 +7,37 @@
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

import io.quarkiverse.qute.web.markdown.runtime.MarkdownSectionHelper;
import io.quarkiverse.qute.web.markdown.runtime.commonmark.CommonMarkConverter;
import io.quarkiverse.qute.web.markdown.runtime.MarkdownSectionHelperFactory;
import io.quarkus.qute.Engine;

public class QuarkusMarkdownTest {

@Test
public void testMd() {
Engine engine = Engine.builder().addDefaults()
.addSectionHelper(new MarkdownSectionHelper.Factory(new CommonMarkConverter())).build();
.addSectionHelper(new MarkdownSectionHelperFactory()).build();
assertEquals("<p>...</p>\n", engine.parse("{#md}...{/md}").render());
}

@Test
public void testMarkdown() {
Engine engine = Engine.builder().addDefaults()
.addSectionHelper(new MarkdownSectionHelper.Factory(new CommonMarkConverter())).build();
.addSectionHelper(new MarkdownSectionHelperFactory()).build();
assertEquals("<p>...</p>\n", engine.parse("{#markdown}...{/markdown}").render());
}

@Test
public void testH1() {
Engine engine = Engine.builder().addDefaults()
.addSectionHelper(new MarkdownSectionHelper.Factory(new CommonMarkConverter())).build();
.addSectionHelper(new MarkdownSectionHelperFactory()).build();
assertEquals("<h1>Quarkus and Roq</h1>\n", engine.parse("{#md}# Quarkus and Roq{/md}").render());
}

@Test
void testJsonObjectValueResolver() {

Engine engine = Engine.builder().addDefaults()
.addSectionHelper(new MarkdownSectionHelper.Factory(new CommonMarkConverter())).build();
.addSectionHelper(new MarkdownSectionHelperFactory()).build();

String result = engine.parse("""
<h1>Quarkus and Qute</h1>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import io.quarkiverse.qute.web.markdown.runtime.MarkdownSectionHelperFactory;
import io.quarkus.qute.Template;
import io.quarkus.test.QuarkusUnitTest;

Expand All @@ -15,9 +16,10 @@ public class QuteMarkdownSectionHelperTest {
@RegisterExtension
static final QuarkusUnitTest quarkusApp = new QuarkusUnitTest()
.withApplicationRoot(
app -> app.addAsResource(new StringAsset(
"{#markdown}# Qute and Roq{/markdown}"),
"templates/foo.txt"));
app -> app.addClass(MarkdownSectionHelperFactory.class)
.addAsResource(new StringAsset(
"{#markdown}# Qute and Roq{/markdown}"),
"templates/foo.txt"));

@Inject
Template foo;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import io.quarkiverse.qute.web.markdown.runtime.MarkdownSectionHelperFactory;
import io.quarkus.qute.Template;
import io.quarkus.test.QuarkusUnitTest;

Expand All @@ -17,18 +18,19 @@ public class QuteMarkdownSectionWithInnerSectionTest {
@RegisterExtension
static final QuarkusUnitTest quarkusApp = new QuarkusUnitTest()
.withApplicationRoot(
app -> app.addAsResource(new StringAsset(
"""
<h1>Quarkus and Qute</h1>
{#md}
# Qute and Roq
Here is a list:
{#for item in items}
- an {item} as a list item
{/for}
{/md}
"""),
"templates/foo.txt"));
app -> app.addClass(MarkdownSectionHelperFactory.class)
.addAsResource(new StringAsset(
"""
<h1>Quarkus and Qute</h1>
{#md}
# Qute and Roq
Here is a list:
{#for item in items}
- an {item} as a list item
{/for}
{/md}
"""),
"templates/foo.txt"));

@Inject
Template foo;
Expand Down
4 changes: 0 additions & 4 deletions markdown/runtime/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,6 @@
<artifactId>quarkus-qute-web-markdown</artifactId>
<name>Quarkus Qute - Markdown - Runtime</name>

<properties>
<commonmark.version>0.22.0</commonmark.version>
</properties>

<dependencies>
<dependency>
<groupId>io.quarkus</groupId>
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package io.quarkiverse.qute.web.markdown.runtime;

import java.util.List;
import java.util.concurrent.CompletionStage;

import io.quarkiverse.qute.web.markdown.runtime.commonmark.CommonMarkConverter;
import io.quarkus.qute.CompletedStage;
import io.quarkus.qute.EngineConfiguration;
import io.quarkus.qute.ResultNode;
import io.quarkus.qute.SectionHelper;
import io.quarkus.qute.SectionHelperFactory;
import io.quarkus.qute.SingleResultNode;

@EngineConfiguration
public class MarkdownSectionHelperFactory implements SectionHelperFactory<MarkdownSectionHelperFactory.MarkdownSectionHelper> {
private static final List<String> MARKDOWN_SECTIONS = List.of("markdown", "md");

@Override
public List<String> getDefaultAliases() {
return MARKDOWN_SECTIONS;
}

@Override
public MarkdownSectionHelper initialize(SectionInitContext context) {
return new MarkdownSectionHelper();
}

static class MarkdownSectionHelper implements SectionHelper {
private final CommonMarkConverter converter = new CommonMarkConverter();

@Override
public CompletionStage<ResultNode> 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())));
});
}
}
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,17 +1,14 @@
package io.quarkiverse.qute.web.markdown.runtime.commonmark;

import java.util.function.Function;

import org.commonmark.node.Node;
import org.commonmark.parser.Parser;
import org.commonmark.renderer.html.HtmlRenderer;

public class CommonMarkConverter implements Function<String, String> {
public class CommonMarkConverter {

private final Parser parser = Parser.builder().build();
private final HtmlRenderer htmlRenderer = HtmlRenderer.builder().build();

@Override
public String apply(String markdown) {
Node node = parser.parse(markdown);
return htmlRenderer.render(node);
Expand Down

0 comments on commit 44fbb3e

Please sign in to comment.