package backend import ( "bytes" "fmt" "github.com/microcosm-cc/bluemonday" "github.com/yuin/goldmark" "github.com/yuin/goldmark/extension" "github.com/yuin/goldmark/parser" "github.com/yuin/goldmark/renderer/html" ) func ConvertToHTML(md string) (string, error) { var buf bytes.Buffer gm := goldmark.New( goldmark.WithExtensions( extension.GFM, ), goldmark.WithParserOptions( parser.WithAttribute(), ), goldmark.WithRendererOptions( html.WithUnsafe(), // HTML-Inhalte erlauben ), ) if err := gm.Convert([]byte(md), &buf); err != nil { return "", fmt.Errorf("error converting markdown to html: %v", err) } p := bluemonday.UGCPolicy() p.AllowAttrs("id").OnElements("h1", "h2", "h3", "h4", "h5", "h6") html := p.Sanitize(buf.String()) return html, nil } func ConvertToPlain(md string) (string, error) { var buf bytes.Buffer if err := goldmark.Convert([]byte(md), &buf); err != nil { return "", fmt.Errorf("error converting markdown to html: %v", err) } p := bluemonday.StrictPolicy() plain := p.Sanitize(buf.String()) return plain, nil }