devtools/hackdoc: render TOC
Change-Id: I03c224675c0d142d630d872994658faa2ac70691
diff --git a/devtools/hackdoc/markdown.go b/devtools/hackdoc/markdown.go
index fb46c5d..06e2c6e 100644
--- a/devtools/hackdoc/markdown.go
+++ b/devtools/hackdoc/markdown.go
@@ -16,13 +16,16 @@
// renderMarkdown renders markdown to HTML, replacing all relative (intra-hackdoc) links with version that have ref set.
func renderMarkdown(input []byte, ref string) []byte {
r := blackfriday.NewHTMLRenderer(blackfriday.HTMLRendererParameters{
- Flags: blackfriday.CommonHTMLFlags,
+ Flags: blackfriday.CommonHTMLFlags | blackfriday.TOC,
})
parser := blackfriday.New(blackfriday.WithRenderer(r), blackfriday.WithExtensions(blackfriday.CommonExtensions))
ast := parser.Parse(input)
var buf bytes.Buffer
+ buf.Write([]byte(`<div class="toc"><h1>Page Contents</h1>`))
+ r.RenderHeader(&buf, ast)
+ buf.Write([]byte(`</div><div class="content">`))
ast.Walk(func(node *blackfriday.Node, entering bool) blackfriday.WalkStatus {
if ref != "" && entering && node.Type == blackfriday.Link {
dest := string(node.Destination)
@@ -37,6 +40,8 @@
}
return r.RenderNode(&buf, node, entering)
})
+ buf.Write([]byte(`</div>`))
+ r.RenderFooter(&buf, ast)
return buf.Bytes()
}