Skip to content

Commit

Permalink
Add asciidoc converter to core (#1555)
Browse files Browse the repository at this point in the history
  • Loading branch information
AndreaLaGrotteria authored Nov 18, 2024
1 parent cb8d70a commit 6ee347c
Show file tree
Hide file tree
Showing 43 changed files with 3,314 additions and 41 deletions.
1 change: 1 addition & 0 deletions buildSrc/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ dependencies {
}
implementation("com.networknt:json-schema-validator")
implementation("io.micronaut.rss:micronaut-rss")
implementation("org.asciidoctor:asciidoctorj:3.0.0")
testImplementation("org.skyscreamer:jsonassert:1.5.3")
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package io.micronaut.guides.core;

import jakarta.inject.Singleton;

@Singleton
public class CalloutMacroSubstitution extends LineMacroSubstitution {
@Override
protected String getMacroName() {
return "callout";
}

@Override
protected String getBaseDirectory() {
return "{calloutsDir}";
}

@Override
protected String getPrefix() {
return "callout-";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package io.micronaut.guides.core;

import jakarta.inject.Singleton;

@Singleton
public class CommonMacroSubstitution extends LineMacroSubstitution {

@Override
protected String getMacroName() {
return "common";
}

@Override
protected String getBaseDirectory() {
return "{commonsDir}";
}

@Override
protected String getPrefix() {
return "common-";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package io.micronaut.guides.core;

import jakarta.inject.Singleton;

@Singleton
public class ExternalMacroSubstitution extends LineMacroSubstitution {

@Override
protected String getMacroName() {
return "external";
}

@Override
protected String getBaseDirectory() {
return "{guidesDir}";
}

@Override
protected String getPrefix() {
return "";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package io.micronaut.guides.core;

import jakarta.inject.Singleton;

@Singleton
public class ExternalTemplateMacroSubstitution extends LineMacroSubstitution {
@Override
protected String getMacroName() {
return "external-template";
}

@Override
protected String getBaseDirectory() {
return "{guidesDir}";
}

@Override
protected String getPrefix() {
return "";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package io.micronaut.guides.core;

import jakarta.inject.Singleton;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import static io.micronaut.guides.core.MacroUtils.findMacroInstances;

@Singleton
public class GuideLinkMacroSubstitution implements MacroSubstitution {
private static final Pattern GUIDE_LINK_REGEX = Pattern.compile("guideLink:(.*?)\\[(.*?)]");

private static String processGuideLink(String line) {
Matcher matcher = GUIDE_LINK_REGEX.matcher(line);
if (matcher.find()) {
String slug = matcher.group(1).trim();
String text = matcher.group(2);
return "link:" + slug + ".html[" + text + "]";
}
return line;
}

@Override
public String substitute(String str, Guide guide, GuidesOption option) {
for (String instance : findMacroInstances(str, GUIDE_LINK_REGEX)) {
String res = processGuideLink(instance);
str = str.replace(instance, res);
}

return str;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package io.micronaut.guides.core;

import io.micronaut.guides.core.asciidoc.Argument;
import io.micronaut.guides.core.asciidoc.AsciidocMacro;
import io.micronaut.guides.core.asciidoc.Attribute;
import io.micronaut.guides.core.asciidoc.IncludeDirective;

import java.nio.file.Path;
import java.util.Optional;

import static io.micronaut.guides.core.MacroUtils.findMacroLines;

abstract class LineMacroSubstitution implements MacroSubstitution {
protected abstract String getMacroName();

protected abstract String getBaseDirectory();

protected abstract String getPrefix();

@Override
public String substitute(String str, Guide guide, GuidesOption option) {
for (String line : findMacroLines(str, getMacroName())) {
Optional<AsciidocMacro> asciidocMacroOptional = AsciidocMacro.of(getMacroName(), line);
if (asciidocMacroOptional.isEmpty()) {
continue;
}

AsciidocMacro macro = asciidocMacroOptional.get();
StringBuilder builder = new StringBuilder();

for (Attribute attribute : macro.attributes()) {
Argument argument = new Argument(attribute.key(), attribute.values().get(0));
builder.append(argument).append("\n");
}

Path target = Path.of(getBaseDirectory(), getPrefix() + macro.target());

IncludeDirective.Builder includeDirectiveBuilder = IncludeDirective.builder().target(target.toString());
builder.append(includeDirectiveBuilder.build());

str = str.replace(line, builder.toString());
}
return str;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,8 @@ static List<String> findMacroLines(@NonNull String str, @NonNull String macro) {
.toList();
}

static List<String> findMacroInstances(@NonNull String str, @NonNull String macro) {
static List<String> findMacroInstances(@NonNull String str, @NonNull Pattern pattern) {
List<String> matches = new ArrayList<>();
Pattern pattern = Pattern.compile("@(?:([\\w-]*):)?" + macro + "@");
Matcher matcher = pattern.matcher(str);

while (matcher.find()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import io.micronaut.guides.core.asciidoc.PlacheholderMacro;

import java.util.Optional;
import java.util.regex.Pattern;

abstract class PlaceholderWithTargetMacroSubstitution implements MacroSubstitution {

Expand All @@ -12,7 +13,8 @@ abstract class PlaceholderWithTargetMacroSubstitution implements MacroSubstituti
protected abstract String getSubstitution(Guide guide, GuidesOption option, String app);

public String substitute(String str, Guide guide, GuidesOption option) {
for (String instance : MacroUtils.findMacroInstances(str, getMacroName())) {
Pattern pattern = Pattern.compile("@(?:([\\w-]*):)?" + getMacroName() + "@");
for (String instance : MacroUtils.findMacroInstances(str, pattern)) {
Optional<PlacheholderMacro> macroOptional = PlacheholderMacro.of(getMacroName(), instance);
if (macroOptional.isEmpty()) {
continue;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package io.micronaut.guides.core.asciidoc;

import io.micronaut.core.annotation.NonNull;
import io.micronaut.core.util.StringUtils;

import java.util.Optional;

public record Argument(String key, String value) {
private static final String ARGUMENT_DELIMITATOR = ":";

@NonNull
public static Optional<Argument> of(@NonNull String str) {
if (StringUtils.isEmpty(str)) {
return Optional.empty();
}

String[] parts = str.split("=", 2);
if (parts.length == 2 && !parts[0].isBlank() && !parts[1].isBlank()) {
return Optional.of(new Argument(parts[0], parts[1]));
}

return Optional.empty();
}

@Override
public String toString() {
return ARGUMENT_DELIMITATOR + key + ARGUMENT_DELIMITATOR + " " + value;
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package io.micronaut.guides.core.asciidoc;

import org.asciidoctor.Placement;

import java.io.File;

public interface AsciidocConfiguration {
String getSourceDir();

String getSourceHighlighter();

Placement getToc();

int getToclevels();

boolean getSectnums();

String getIdprefix();

String getIdseparator();

String getIcons();

String getImagesdir();

boolean isNofooter();

String getDocType();

String getRuby();

File getTemplateDirs();

String getCommonsDir();

String getBaseDir();

String getGuidesDir();

String getCalloutsDir();
}
Loading

0 comments on commit 6ee347c

Please sign in to comment.