Because that's a nice feature to have in your markdown renderer.
Sometimes I wonder how to do things. And then I remember there is a documentation. In that case I wanted to render the table of contents (TOC) using Blackfriday so that articles written and served with smallblog can have a nicer structure.
Fact is, Blackfriday (the markdown renderer smallblog is using) can already do such a task for you, but there is no actual example of using this feature unless you start looking at the source code.
Blackfriday has a lot of flags you can customize your render with. Let’s create a new simple package.
package renderer import . "github.com/russross/blackfriday" var flags = 0 | HTML_USE_XHTML | HTML_USE_SMARTYPANTS | HTML_SMARTYPANTS_FRACTIONS | HTML_SMARTYPANTS_DASHES | HTML_SMARTYPANTS_LATEX_DASHES | HTML_TOC var extensions = 0 | EXTENSION_NO_INTRA_EMPHASIS | EXTENSION_TABLES | EXTENSION_FENCED_CODE | EXTENSION_AUTOLINK | EXTENSION_STRIKETHROUGH | EXTENSION_SPACE_HEADERS | EXTENSION_HEADER_IDS | EXTENSION_BACKSLASH_LINE_BREAK | EXTENSION_DEFINITION_LISTS func HTML(input []byte) []byte { r := HtmlRenderer(flags, "", "") return MarkdownOptions(input, r, Options{Extensions: extensions}) }
Here we’re simply re-using the flags and extensions used for the
blackfriday.MarkdownCommon
function, with the exception we added the
HTML_TOC
flag. Also note that we used the dot import mecanism to simplify our
code.
You can then use import your package and do something like this :
package main import ( "fmt" "github.com/user/project/renderer" ) func main() { fmt.Println(renderer.HTML([]byte(`your markdown`))) }
You will notice that now you have a nice table of contents matching your titles on top of your rendered HTML.