kwin commented on code in PR #141:
URL: https://github.com/apache/maven-doxia/pull/141#discussion_r1090522065


##########
doxia-modules/doxia-module-markdown/src/main/java/org/apache/maven/doxia/module/markdown/MarkdownParser.java:
##########
@@ -156,6 +178,86 @@ public void parse(Reader source, Sink sink, String 
reference) throws ParseExcept
         }
     }
 
+    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) + '\n';
+                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);
+    }
+
+    static String normalizeMultilineValue(String value) {
+        return value.trim().replaceAll("[ \\t]*[\\r\\n]+[ \\t]*", " ");
+    }
+
+    private boolean writeHtmlMetadata(StringBuilder html, Map<String, 
List<String>> data) {
+        boolean containsTitle = false;
+        for (Entry<String, List<String>> entry : data.entrySet()) {
+            if (writeHtmlMetadata(html, entry.getKey(), entry.getValue())) {
+                containsTitle = true;
+            }
+        }
+        return containsTitle;
+    }
+
+    private boolean writeHtmlMetadata(StringBuilder html, String key, 
List<String> values) {
+        if ("title".equalsIgnoreCase(key)) {
+            html.append("<title>");
+            
html.append(HtmlTools.escapeHTML(values.stream().collect(Collectors.joining(", 
")), false));
+            html.append("</title>");
+            return true;
+        } else {
+            if (key.equalsIgnoreCase("author") && values.size() > 1) {
+                // for multiple authors emit multiple meta tags
+                for (String value : values) {
+                    writeHtmlMetadata(html, key, 
Collections.singletonList(value));
+                }
+            } else {
+                // every other multivalue should just be concatenated and 
emitted in a single meta tag
+                final String separator;
+                if (key.equalsIgnoreCase("keywords")) {
+                    separator = ",";
+                } else {
+                    separator = "\n";

Review Comment:
   Fixed in 
https://github.com/apache/maven-doxia/pull/141/commits/168071b3d8e0434ce73d668746e6c78f5f2051f2.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@maven.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to