markdown.go 961 B

12345678910111213141516171819202122232425262728293031323334353637
  1. package format
  2. import (
  3. "gopkg.in/russross/blackfriday.v2"
  4. "maunium.net/go/gomatrix"
  5. "strings"
  6. )
  7. func RenderMarkdown(text string) gomatrix.Content {
  8. parser := blackfriday.New(
  9. blackfriday.WithExtensions(blackfriday.NoIntraEmphasis |
  10. blackfriday.Tables |
  11. blackfriday.FencedCode |
  12. blackfriday.Strikethrough |
  13. blackfriday.SpaceHeadings |
  14. blackfriday.DefinitionLists))
  15. ast := parser.Parse([]byte(text))
  16. renderer := blackfriday.NewHTMLRenderer(blackfriday.HTMLRendererParameters{
  17. Flags: blackfriday.UseXHTML,
  18. })
  19. var buf strings.Builder
  20. renderer.RenderHeader(&buf, ast)
  21. ast.Walk(func(node *blackfriday.Node, entering bool) blackfriday.WalkStatus {
  22. return renderer.RenderNode(&buf, node, entering)
  23. })
  24. renderer.RenderFooter(&buf, ast)
  25. htmlBody := buf.String()
  26. return gomatrix.Content{
  27. FormattedBody: htmlBody,
  28. Format: gomatrix.FormatHTML,
  29. MsgType: gomatrix.MsgText,
  30. Body: HTMLToText(htmlBody),
  31. }
  32. }