-def convertMdToHtml (FileTree mdFiles, File cssFile) {
- MutableDataSet options = new MutableDataSet()
-
- def extensions = new ArrayList<>()
- extensions.add(AnchorLinkExtension.create())
- extensions.add(AutolinkExtension.create())
- extensions.add(StrikethroughExtension.create())
- extensions.add(TaskListExtension.create())
- extensions.add(TablesExtension.create())
- extensions.add(TocExtension.create())
-
- options.set(Parser.EXTENSIONS, extensions)
-
- // set GFM table parsing options
- options.set(TablesExtension.WITH_CAPTION, false)
- options.set(TablesExtension.COLUMN_SPANS, false)
- options.set(TablesExtension.MIN_HEADER_ROWS, 1)
- options.set(TablesExtension.MAX_HEADER_ROWS, 1)
- options.set(TablesExtension.APPEND_MISSING_COLUMNS, true)
- options.set(TablesExtension.DISCARD_EXTRA_COLUMNS, true)
- options.set(TablesExtension.HEADER_SEPARATOR_COLUMN_MATCH, true)
- // GFM anchor links
- options.set(AnchorLinkExtension.ANCHORLINKS_SET_ID, false)
- options.set(AnchorLinkExtension.ANCHORLINKS_ANCHOR_CLASS, "anchor")
- options.set(AnchorLinkExtension.ANCHORLINKS_SET_NAME, true)
- options.set(AnchorLinkExtension.ANCHORLINKS_TEXT_PREFIX, "<span class=\"octicon octicon-link\"></span>")
-
- Parser parser = Parser.builder(options).build()
- HtmlRenderer renderer = HtmlRenderer.builder(options).build()
-
- mdFiles.each { mdFile ->
- // add table of contents
- def mdText = "[TOC]\n"+mdFile.text
-
- // grab the first top-level title
- def title = null
- def titleRegex = /(?m)^#(\s+|([^#]))(.*)/
- def matcher = mdText =~ titleRegex
- if (matcher.size() > 0) {
- // matcher[0][2] is the first character of the title if there wasn't any whitespace after the #
- title = (matcher[0][2] != null ? matcher[0][2] : "")+matcher[0][3]
- }
- // or use the filename if none found
- if (title == null) {
- title = mdFile.getName()
- }
-
- Node document = parser.parse(mdText)
- String htmlBody = renderer.render(document)
- def htmlText = '''<html>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <meta http-equiv="Content-Style-Type" content="text/css" />
- <meta name="generator" content="flexmark" />
-'''
- htmlText += ((title != null) ? " <title>${title}</title>" : '' )
- htmlText += '''
- <style type="text/css">code{white-space: pre;}</style>
-'''
- htmlText += ((cssFile != null) ? cssFile.text : '')
- htmlText += '''</head>
- <body>
-'''
- htmlText += htmlBody
- htmlText += '''
- </body>
-</html>
-'''
-
- def htmlFilePath = mdFile.getPath().replaceAll(/\..*?$/, ".html")
- def htmlFile = file(htmlFilePath)
- println("Creating ${htmlFilePath}")
- htmlFile.text = htmlText
- }
-}
-
-