in doxia-modules/doxia-module-markdown/src/main/java/org/apache/maven/doxia/module/markdown/MarkdownParser.java [181:215]
private boolean processMetadataForHtml(StringBuilder html, StringBuilder source) {
final Map<String, List<String>> metadata;
final int endOffset; // end of metadata within source
// support two types of metadata:
if (source.toString().startsWith("---")) {
// 1. YAML front matter (https://github.com/vsch/flexmark-java/wiki/Extensions#yaml-front-matter)
Node documentRoot = FLEXMARK_METADATA_PARSER.parse(source.toString());
YamlFrontMatterVisitor visitor = new YamlFrontMatterVisitor();
visitor.visit(documentRoot);
metadata = visitor.getData();
endOffset = visitor.getEndOffset();
} else {
// 2. Multimarkdown metadata (https://fletcher.github.io/MultiMarkdown-5/metadata.html), not yet supported
// by Flexmark (https://github.com/vsch/flexmark-java/issues/550)
metadata = new LinkedHashMap<>();
Matcher metadataMatcher = METADATA_SECTION_PATTERN.matcher(source);
if (metadataMatcher.find()) {
String entry = metadataMatcher.group(0) + EOL;
Matcher entryMatcher = METADATA_ENTRY_PATTERN.matcher(entry);
while (entryMatcher.find()) {
String key = entryMatcher.group(1);
String value = normalizeMultilineValue(entryMatcher.group(2));
metadata.put(key, Collections.singletonList(value));
}
endOffset = metadataMatcher.end(0);
} else {
endOffset = 0;
}
}
if (endOffset > 0) {
// Trim the metadata from the source
source.delete(0, endOffset);
}
return writeHtmlMetadata(html, metadata);
}