in doxia-modules/doxia-module-markdown/src/main/java/org/apache/maven/doxia/module/markdown/MarkdownParser.java [275:318]
String toHtml(Reader source) throws IOException {
// Read the source
StringBuilder markdownText = new StringBuilder(IOUtils.toString(source));
// Now, build the HTML document
StringBuilder html = new StringBuilder(1000);
html.append("<html>");
html.append("<head>");
boolean haveTitle = processMetadataForHtml(html, markdownText);
// Now is the time to parse the Markdown document
// (after we've trimmed out the metadatas, and before we check for its headings)
Node documentRoot = FLEXMARK_PARSER.parse(markdownText.toString());
// Special trick: if there is no title specified as a metadata in the header, we will use the first
// heading as the document title
if (!haveTitle && documentRoot.hasChildren()) {
// Skip the comment nodes
Node firstNode = documentRoot.getFirstChild();
while (firstNode != null && firstNode instanceof HtmlCommentBlock) {
firstNode = firstNode.getNext();
}
// If this first non-comment node is a heading, we use it as the document title
if (firstNode != null && firstNode instanceof Heading) {
html.append("<title>");
TextCollectingVisitor collectingVisitor = new TextCollectingVisitor();
String headingText = collectingVisitor.collectAndGetText(firstNode);
html.append(HtmlTools.escapeHTML(headingText, false));
html.append("</title>");
}
}
html.append("</head>");
html.append("<body>");
// Convert our Markdown document to HTML and append it to our HTML
FLEXMARK_HTML_RENDERER.render(documentRoot, html);
html.append("</body>");
html.append("</html>");
return html.toString();
}