| // Copyright 2020 The Go Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style | 
 | // license that can be found in the LICENSE file. | 
 |  | 
 | package godoc | 
 |  | 
 | import ( | 
 | 	"bytes" | 
 |  | 
 | 	"github.com/yuin/goldmark" | 
 | 	"github.com/yuin/goldmark/parser" | 
 | 	"github.com/yuin/goldmark/renderer/html" | 
 | ) | 
 |  | 
 | // renderMarkdown converts a limited and opinionated flavor of Markdown (compliant with | 
 | // CommonMark 0.29) to HTML for the purposes of Go websites. | 
 | // | 
 | // The Markdown source may contain raw HTML, | 
 | // but Go templates have already been processed. | 
 | func renderMarkdown(src []byte) ([]byte, error) { | 
 | 	// parser.WithHeadingAttribute allows custom ids on headings. | 
 | 	// html.WithUnsafe allows use of raw HTML, which we need for tables. | 
 | 	md := goldmark.New( | 
 | 		goldmark.WithParserOptions(parser.WithHeadingAttribute()), | 
 | 		goldmark.WithRendererOptions(html.WithUnsafe())) | 
 | 	var buf bytes.Buffer | 
 | 	if err := md.Convert(src, &buf); err != nil { | 
 | 		return nil, err | 
 | 	} | 
 | 	return buf.Bytes(), nil | 
 | } |