aboutsummaryrefslogtreecommitdiff
path: root/vendor/maunium.net/go/mautrix/format/markdown.go
blob: 65abf569a65671bbe23f3bac1052cbdb51062bcf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// Copyright 2018 Tulir Asokan
package format

import (
	"gopkg.in/russross/blackfriday.v2"
	"maunium.net/go/mautrix"
	"strings"
)

func RenderMarkdown(text string) mautrix.Content {
	parser := blackfriday.New(
		blackfriday.WithExtensions(blackfriday.NoIntraEmphasis |
			blackfriday.Tables |
			blackfriday.FencedCode |
			blackfriday.Strikethrough |
			blackfriday.SpaceHeadings |
			blackfriday.DefinitionLists))
	ast := parser.Parse([]byte(text))

	renderer := blackfriday.NewHTMLRenderer(blackfriday.HTMLRendererParameters{
		Flags: blackfriday.UseXHTML,
	})

	var buf strings.Builder
	renderer.RenderHeader(&buf, ast)
	ast.Walk(func(node *blackfriday.Node, entering bool) blackfriday.WalkStatus {
		return renderer.RenderNode(&buf, node, entering)
	})
	renderer.RenderFooter(&buf, ast)
	htmlBody := buf.String()

	return mautrix.Content{
		FormattedBody: htmlBody,
		Format:        mautrix.FormatHTML,
		MsgType:       mautrix.MsgText,
		Body:          HTMLToText(htmlBody),
	}
}