Skip to content

Commit

Permalink
[minisite] enable to use asciidoctor-java (#9)
Browse files Browse the repository at this point in the history
* [minisite] enable to use asciidoctor-java

* [browser] open with browser feature is broken on recent linux version due to a bug in java desktop, adding a workaround

* converging to asciidoctor html layout and style to reuse its css by default

* [asciidoc][minisite] make the default html renderer of asciidoc module closer to asciidoctor to reuse its css

* [asciidoc] add basic stem support

* [asciidoc] enable a2s

* [minisite][mojo] ensure to properly explain how to setup asciidoc-java when it is not there

* [asciidoc] more tolerance on header parsing

* [asciidoc][html] fake preamble for pre-section part - we can revisit this later but ultimately we should drop that concept probably + insert <p> more often

* [asciidoc] converging to asciidoctor style (adding some wrapping, role handling, ...)

* [version] moving to 1.2.0-SNAPSHOT
  • Loading branch information
rmannibucau committed Dec 15, 2023
1 parent 7f3c6f5 commit 31d1fc2
Show file tree
Hide file tree
Showing 45 changed files with 1,908 additions and 832 deletions.
20 changes: 19 additions & 1 deletion _documentation/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
<parent>
<artifactId>yupiik-tools-maven-plugin-parent</artifactId>
<groupId>io.yupiik.maven</groupId>
<version>1.1.9-SNAPSHOT</version>
<version>1.2.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

Expand All @@ -42,6 +42,24 @@
<artifactId>yupiik-tools-maven-plugin</artifactId>
<version>${project.version}</version>
<scope>provided</scope>
<exclusions>
<exclusion>
<groupId>org.asciidoctor</groupId>
<artifactId>asciidoctorj</artifactId>
</exclusion>
<exclusion>
<groupId>org.asciidoctor</groupId>
<artifactId>asciidoctorj-diagram</artifactId>
</exclusion>
<exclusion>
<groupId>org.asciidoctor</groupId>
<artifactId>asciidoctorj-pdf</artifactId>
</exclusion>
<exclusion>
<groupId>org.jruby</groupId>
<artifactId>jruby-complete</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
Expand Down
152 changes: 75 additions & 77 deletions _documentation/src/main/java/io/yupiik/tools/doc/Generate.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@
import io.yupiik.tools.minisite.MiniSite;
import io.yupiik.tools.minisite.MiniSiteConfiguration;
import io.yupiik.tools.minisite.PreAction;
import io.yupiik.tools.minisite.language.YupiikAsciidoc;
import lombok.NoArgsConstructor;
import lombok.extern.java.Log;
import org.asciidoctor.Asciidoctor;

import java.nio.file.Files;
import java.nio.file.Path;
Expand All @@ -47,90 +47,88 @@ public static void main(final String... args) throws Exception {
final var username = args.length >= 7 ? args[6] : System.getProperty("user.name", "user");
final var password = args.length >= 8 && Files.exists(Path.of(args[7])) ? Files.readString(Path.of(args[7])).strip() : null;

try (final var asciidoctor = Asciidoctor.Factory.create()) {
final var mojoAction = new PreAction();
mojoAction.setType("maven-plugin");
mojoAction.setConfiguration(Map.of(
"toBase", doc.resolve("content/mojo").toString(),
"pluginXml", doc.resolve("../../../../yupiik-tools-maven-plugin/target/classes/META-INF/maven/plugin.xml").toString()));
final var mojoAction = new PreAction();
mojoAction.setType("maven-plugin");
mojoAction.setConfiguration(Map.of(
"toBase", doc.resolve("content/mojo").toString(),
"pluginXml", doc.resolve("../../../../yupiik-tools-maven-plugin/target/classes/META-INF/maven/plugin.xml").toString()));

final var configuration = new MiniSiteConfiguration();
configuration.setIndexText("Yupiik Tools");
configuration.setIndexSubTitle("adoc:" +
"A set of build utilities.\n" +
"\n" +
"IMPORTANT: 1.0.x use `javax.json` whereas 1.1.x uses `jakarta.json`, " +
"it can impact your setup and need customization for minisite generation for example.\n" +
"Last available 1.0.x release is 1.0.26.");
configuration.setTitle("Yupiik Tools Plugin");
configuration.setLogoSideText("Docs");
configuration.setLogo("//www.yupiik.io/images/favicon.png");
configuration.setLinkedInCompany("yupiik");
configuration.setUseDefaultAssets(true);
configuration.setInjectYupiikTemplateExtensionPoints(true);
configuration.setSearchIndexName("search.json");
configuration.setGenerateBlog(true);
configuration.setBlogPageSize(10);
configuration.setBlogPublicationDate("today");
configuration.setReverseBlogOrder(true);
configuration.setAddIndexRegistrationPerCategory(true);
configuration.setInjectBlogMeta(true);
configuration.setSource(doc);
configuration.setTarget(out);
configuration.setSiteBase("/tools-maven-plugin");
configuration.setPreActions(List.of(mojoAction));
configuration.setGenerateSiteMap(true);
configuration.setGenerateIndex(true);
configuration.setProjectName(projectName);
configuration.setProjectArtifactId(projectArtifact);
configuration.setProjectVersion(projectVersion);
configuration.setTemplateExtensionPoints(Map.of("point", "{{point}}"));
configuration.setTemplatePrefixes(List.of("header.html", "menu.html"));
configuration.setTemplateSuffixes(List.of("footer-top.html", "footer-end.html"));
configuration.setTemplateAddLeftMenu(true);
configuration.setActionClassLoader(() -> new ClassLoader(Thread.currentThread().getContextClassLoader()) {
// avoid it to be closed too early by wrapping it in a not URLCLassLoader
});
configuration.setAsciidoctorPool((conf, fn) -> fn.apply(asciidoctor));
configuration.setAsciidoctorConfiguration(new AsciidoctorConfiguration() {
@Override
public Path gems() {
return null;
}
final var configuration = new MiniSiteConfiguration();
configuration.setIndexText("Yupiik Tools");
configuration.setIndexSubTitle("adoc:" +
"A set of build utilities.\n" +
"\n" +
"IMPORTANT: 1.0.x use `javax.json` whereas 1.1.x uses `jakarta.json`, " +
"it can impact your setup and need customization for minisite generation for example.\n" +
"Last available 1.0.x release is 1.0.26.");
configuration.setTitle("Yupiik Tools Plugin");
configuration.setLogoSideText("Docs");
configuration.setLogo("//www.yupiik.io/images/favicon.png");
configuration.setLinkedInCompany("yupiik");
configuration.setUseDefaultAssets(true);
configuration.setInjectYupiikTemplateExtensionPoints(true);
configuration.setSearchIndexName("search.json");
configuration.setGenerateBlog(true);
configuration.setBlogPageSize(10);
configuration.setBlogPublicationDate("today");
configuration.setReverseBlogOrder(true);
configuration.setAddIndexRegistrationPerCategory(true);
configuration.setInjectBlogMeta(true);
configuration.setSource(doc);
configuration.setTarget(out);
configuration.setSiteBase("/tools-maven-plugin");
configuration.setPreActions(List.of(mojoAction));
configuration.setGenerateSiteMap(true);
configuration.setGenerateIndex(true);
configuration.setProjectName(projectName);
configuration.setProjectArtifactId(projectArtifact);
configuration.setProjectVersion(projectVersion);
configuration.setTemplateExtensionPoints(Map.of("point", "{{point}}"));
configuration.setTemplatePrefixes(List.of("header.html", "menu.html"));
configuration.setTemplateSuffixes(List.of("footer-top.html", "footer-end.html"));
configuration.setTemplateAddLeftMenu(true);
configuration.setActionClassLoader(() -> new ClassLoader(Thread.currentThread().getContextClassLoader()) {
// avoid it to be closed too early by wrapping it in a not URLCLassLoader
});
configuration.setAsciidoc(new YupiikAsciidoc());
configuration.setAsciidoctorConfiguration(new AsciidoctorConfiguration() {
@Override
public Path gems() {
return null;
}

@Override
public String customGems() {
return null;
}
@Override
public String customGems() {
return null;
}

@Override
public List<String> requires() {
return null;
}
@Override
public List<String> requires() {
return List.of();
}

@Override
public Consumer<String> info() {
return log::info;
}
@Override
public Consumer<String> info() {
return log::info;
}

@Override
public Consumer<String> debug() {
return log::finest;
}
@Override
public Consumer<String> debug() {
return log::finest;
}

@Override
public Consumer<String> warn() {
return log::warning;
}
@Override
public Consumer<String> warn() {
return log::warning;
}

@Override
public Consumer<String> error() {
return log::severe;
}
});
@Override
public Consumer<String> error() {
return log::severe;
}
});

new MiniSite(configuration).run();
}
new MiniSite(configuration).run();

if (deploy) {
final var git = new Git();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ Here is a basic example:
----
final var parser = new Parser(); <1>
final var doc = parser.parse(myDocContent, new Parser.ParserContext(ContextResolver.of(Path.of("asciidoc/content")))); <2>
final var renderer = new SimpleHtmlRenderer(); <3>
final var renderer = new AsciidoctorLikeHtmlRenderer(); <3>
renderer.visit(doc); <4>
final var html = renderer.result(); <5>
----
Expand Down
2 changes: 1 addition & 1 deletion _documentation/src/main/minisite/content/mojos.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

To learn all goals available in the maven plugin read xref:mojo/yupiik-tools-maven-plugin.adoc[Yupiik Tools Maven Plugin] dedicated page.

image::https://img.shields.io/maven-central/v/io.yupiik.maven/yupiik-tools-maven-plugin-parent?color=00b2ef&label=Last%20Release&logoColor=00b2ef&logo=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAACAAAAAqCAYAAADS4VmSAAAAAXNSR0IArs4c6QAABGdJREFUWEedmF2I3FQUx%2F9nZrYzq7ttMtuK32B90WpFEbtUW2T7UqqbjIgM%2BKQP%2BmAfBUEFP0H7oo%2BiIgg%2BqRUqk%2BwWRXTFj9UWoVIp7UN1H9QitTvJMtpOd3dydDI7k9zk3syd5C25557zO1%2F3I4S8z3xzJzp0MpweBDfioanf86iiPJPCOY7HwlzbzKUr1yQ4XgAgOZdhm4VRHcoLIHrft5ojCqMDiKF%2FGlQkcOfNgecjQowGcKS5ByX6NmUsDrXOe%2FFw9TvdVIwGEDdUNiawn%2F4NDR0%2BP4HKWCtPFPQBXP8EmO9UGonDEf0My7hLJwr6AHEDqjzryCSo9ACEtuM%2FYVevl3rneH8D2LoxptWWugBR2w2r8hGjMBxAaDt6BrbxRmZuHf81gJ%2FXLchsgEbzQRDN6SobyMWhmWdRq86roLMB4ooKVMWs4Q0Uuf4jYP4kfKfONKytxwdjR1vbsL5%2BXgdcDeD6J8G8U6vtukLJ2hDb8hdYxh2yKKgBsorJ9QJwYjMiMKzEZqRRkHKAhrcKwliPmC7ANrYN6A%2Bf2oTKtZelOW1%2FUUK93oml6RKYK%2BE7Yw01c1NyXhpggSto%2BZe0Qh%2FgMQBFFPC%2BlvykMY4Zasch0gBC4RUfx%2BzmDwYT5lem0Ql%2BTBkTWjW4HfbUqVhHvALgRRWgCDDXmkGw%2FpWWN%2BXLE9h%2FdW8z%2BtQzUETUIVkFWSjtw%2BzkQt%2BGCBD3pG2UUKcon43mCRBpbkZYhGXeF9UNj6PiX5Q5FgE4zUWAdmt5n2czEtLEP8Cu3huWeCxX6vVenHwadnWHtAsc7zcAN43iRA9gmAGNftZ05A8A18UBCQtcQstf06JmfhS16kdS7%2FsfHf9ZgA9p6Zs0xkjwngsHUNvyWeTNch0ofKxUpiIRNiO6BzXjp4Fow38OxK9HXZC8YDAfRK36dio1JaOCB0i%2BAiZBjvx1FcbKn8MyxWOZ670MxkviQuR4vwLYnnKG2QeRsfG9A9ssZYY%2Ba9BpXgRoPCVCWOwVoXvhFnDxtFLHsFOQTirS1rfDNpbSS3HD64Agv2JR8VZYm88MKcJ9AH8plWEEqJlFMQVq%2Bq8B3K8Y%2Fga2KY45XrfQ7s6Ea%2F9zBeo3RBud5IIJzPmmePJZ2QUOjuXKf6GzA0FpL8DvqjpJTIG7%2FCq48EIoTPQULOMdwXCyY%2BRU6eO4cDrCDCyzG92eGaUBWeE5%2FlsAH8yMBvMh1KrRqbgvrFhNIwDXOwfGNdJQOZ4PYMtIaWAso2b2LynJHxrHYZvTsQgwwfG7Px16T9f7bi0E3FQbDZ4ECu%2BF490lmuhDpWz%2FIiuJgmQzoiWAox1N1LoK2yyHn5zlJ2IA0dnf9dfArFq0ugeYK%2BOOSgAkfhBcWKYt1osCoC%2Fk%2BsfAvCszbbZJQwCC3bCnojNgXJsqAkmLzsoBIDgqBRkAuP5ZMN88EGqfK6N%2B22omvS5AX8nCUgUtI74IfQ%2Fb3DP8cqqiGBVAoSc%2FQFiIG%2F8K825W%2F%2Bv4D2sg4qMfRFPFAAAAAElFTkSuQmCC[]
image::https://img.shields.io/maven-central/v/io.yupiik.maven/yupiik-tools-maven-plugin-parent?color=00b2ef&label=Last%20Release&logoColor=00b2ef&logo=data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAACAAAAAqCAYAAADS4VmSAAAAAXNSR0IArs4c6QAABGdJREFUWEedmF2I3FQUx%2F9nZrYzq7ttMtuK32B90WpFEbtUW2T7UqqbjIgM%2BKQP%2BmAfBUEFP0H7oo%2BiIgg%2BqRUqk%2BwWRXTFj9UWoVIp7UN1H9QitTvJMtpOd3dydDI7k9zk3syd5C25557zO1%2F3I4S8z3xzJzp0MpweBDfioanf86iiPJPCOY7HwlzbzKUr1yQ4XgAgOZdhm4VRHcoLIHrft5ojCqMDiKF%2FGlQkcOfNgecjQowGcKS5ByX6NmUsDrXOe%2FFw9TvdVIwGEDdUNiawn%2F4NDR0%2BP4HKWCtPFPQBXP8EmO9UGonDEf0My7hLJwr6AHEDqjzryCSo9ACEtuM%2FYVevl3rneH8D2LoxptWWugBR2w2r8hGjMBxAaDt6BrbxRmZuHf81gJ%2FXLchsgEbzQRDN6SobyMWhmWdRq86roLMB4ooKVMWs4Q0Uuf4jYP4kfKfONKytxwdjR1vbsL5%2BXgdcDeD6J8G8U6vtukLJ2hDb8hdYxh2yKKgBsorJ9QJwYjMiMKzEZqRRkHKAhrcKwliPmC7ANrYN6A%2Bf2oTKtZelOW1%2FUUK93oml6RKYK%2BE7Yw01c1NyXhpggSto%2BZe0Qh%2FgMQBFFPC%2BlvykMY4Zasch0gBC4RUfx%2BzmDwYT5lem0Ql%2BTBkTWjW4HfbUqVhHvALgRRWgCDDXmkGw%2FpWWN%2BXLE9h%2FdW8z%2BtQzUETUIVkFWSjtw%2BzkQt%2BGCBD3pG2UUKcon43mCRBpbkZYhGXeF9UNj6PiX5Q5FgE4zUWAdmt5n2czEtLEP8Cu3huWeCxX6vVenHwadnWHtAsc7zcAN43iRA9gmAGNftZ05A8A18UBCQtcQstf06JmfhS16kdS7%2FsfHf9ZgA9p6Zs0xkjwngsHUNvyWeTNch0ofKxUpiIRNiO6BzXjp4Fow38OxK9HXZC8YDAfRK36dio1JaOCB0i%2BAiZBjvx1FcbKn8MyxWOZ670MxkviQuR4vwLYnnKG2QeRsfG9A9ssZYY%2Ba9BpXgRoPCVCWOwVoXvhFnDxtFLHsFOQTirS1rfDNpbSS3HD64Agv2JR8VZYm88MKcJ9AH8plWEEqJlFMQVq%2Bq8B3K8Y%2Fga2KY45XrfQ7s6Ea%2F9zBeo3RBud5IIJzPmmePJZ2QUOjuXKf6GzA0FpL8DvqjpJTIG7%2FCq48EIoTPQULOMdwXCyY%2BRU6eO4cDrCDCyzG92eGaUBWeE5%2FlsAH8yMBvMh1KrRqbgvrFhNIwDXOwfGNdJQOZ4PYMtIaWAso2b2LynJHxrHYZvTsQgwwfG7Px16T9f7bi0E3FQbDZ4ECu%2BF490lmuhDpWz%2FIiuJgmQzoiWAox1N1LoK2yyHn5zlJ2IA0dnf9dfArFq0ugeYK%2BOOSgAkfhBcWKYt1osCoC%2Fk%2BsfAvCszbbZJQwCC3bCnojNgXJsqAkmLzsoBIDgqBRkAuP5ZMN88EGqfK6N%2B22omvS5AX8nCUgUtI74IfQ%2Fb3DP8cqqiGBVAoSc%2FQFiIG%2F8K825W%2F%2Bv4D2sg4qMfRFPFAAAAAElFTkSuQmCC[skip-data-uri="true"]

== Chain plugins

Expand Down
2 changes: 1 addition & 1 deletion ascii2svg/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
<parent>
<groupId>io.yupiik.maven</groupId>
<artifactId>yupiik-tools-maven-plugin-parent</artifactId>
<version>1.1.9-SNAPSHOT</version>
<version>1.2.0-SNAPSHOT</version>
</parent>

<artifactId>ascii2svg</artifactId>
Expand Down
9 changes: 8 additions & 1 deletion asciidoc-java/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,21 @@
<parent>
<groupId>io.yupiik.maven</groupId>
<artifactId>yupiik-tools-maven-plugin-parent</artifactId>
<version>1.1.9-SNAPSHOT</version>
<version>1.2.0-SNAPSHOT</version>
</parent>

<artifactId>asciidoc-java</artifactId>
<name>Yupiik Tools :: Asciidoc</name>
<description>Simple library to convert an asciidoc content to something else (mainly html).</description>

<dependencies>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>ascii2svg</artifactId>
<version>${project.version}</version>
<optional>true</optional>
</dependency>

<!-- are you sure? probably think one more time -->
</dependencies>

Expand Down
17 changes: 0 additions & 17 deletions asciidoc-java/src/main/demo/demo-code.adoc

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
import io.yupiik.asciidoc.model.Document;
import io.yupiik.asciidoc.parser.Parser;
import io.yupiik.asciidoc.parser.resolver.ContentResolver;
import io.yupiik.asciidoc.renderer.html.SimpleHtmlRenderer;
import io.yupiik.asciidoc.renderer.html.AsciidoctorLikeHtmlRenderer;

import java.io.IOException;
import java.nio.file.Files;
Expand All @@ -38,7 +38,7 @@ public static void main(final String... args) throws IOException { // todo: comp

final var attributes = new HashMap<String, String>();
ContentResolver resolver = null;
SimpleHtmlRenderer.Configuration configuration = new SimpleHtmlRenderer.Configuration();
AsciidoctorLikeHtmlRenderer.Configuration configuration = new AsciidoctorLikeHtmlRenderer.Configuration();
Path input = null;
Path output = null;

Expand Down Expand Up @@ -72,7 +72,7 @@ public static void main(final String... args) throws IOException { // todo: comp
document = parser.parse(reader, new Parser.ParserContext(resolver));
}

final var html = new SimpleHtmlRenderer(configuration.setAttributes(attributes));
final var html = new AsciidoctorLikeHtmlRenderer(configuration.setAttributes(attributes).setAssetsBase(input.getParent()));
html.visit(document);
if (output != null) {
Files.writeString(output, html.result());
Expand All @@ -82,6 +82,6 @@ public static void main(final String... args) throws IOException { // todo: comp
}

private static String error() {
return "Usage:\n\nasciidoctor-java --input file.adoc [--base includeBasePath/] [--output output.html] [--attribute myattribute=myvalue]*";
return "Usage:\n\nasciidoc-java --input file.adoc [--base includeBasePath/] [--output output.html] [--attribute myattribute=myvalue]*";
}
}
19 changes: 19 additions & 0 deletions asciidoc-java/src/main/java/io/yupiik/asciidoc/model/CallOut.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/*
* Copyright (c) 2020 - 2023 - Yupiik SAS - https://www.yupiik.com
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package io.yupiik.asciidoc.model;

public record CallOut(int number, Element text) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,10 @@
*/
package io.yupiik.asciidoc.model;

import java.util.List;
import java.util.Map;

public record Code(String value, Map<String, String> options, boolean inline) implements Element {
public record Code(String value, List<CallOut> callOuts, Map<String, String> options, boolean inline) implements Element {
@Override
public ElementType type() {
return ElementType.CODE;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

import static io.yupiik.asciidoc.model.Element.ElementType.DESCRIPTION_LIST;

public record DescriptionList(Map<String, Element> children) implements Element {
public record DescriptionList(Map<String, Element> children, Map<String, String> options) implements Element {
@Override
public ElementType type() {
return DESCRIPTION_LIST;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ public sealed interface Element permits
Code, DescriptionList, LineBreak, Link, Macro, OrderedList,
Paragraph, Section, Text, UnOrderedList, Admonition, Anchor,
Table, Quote, OpenBlock, PassthroughBlock, ConditionalBlock,
Attribute, PageBreak {
Attribute, PageBreak, Listing {
ElementType type();

/**
Expand All @@ -41,6 +41,7 @@ enum ElementType {
DESCRIPTION_LIST,
LINK,
TEXT,
LISTING,
MACRO, // icon, image, audio, video, kbd, btn, menu, doublefootnote, footnote, stem, xref, pass
ADMONITION,
ANCHOR,
Expand Down
27 changes: 27 additions & 0 deletions asciidoc-java/src/main/java/io/yupiik/asciidoc/model/Listing.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/*
* Copyright (c) 2020 - 2023 - Yupiik SAS - https://www.yupiik.com
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package io.yupiik.asciidoc.model;

import java.util.Map;

import static io.yupiik.asciidoc.model.Element.ElementType.LISTING;

public record Listing(String value, Map<String, String> options) implements Element {
@Override
public ElementType type() {
return LISTING;
}
}

0 comments on commit 31d1fc2

Please sign in to comment.