-
Notifications
You must be signed in to change notification settings - Fork 1
/
md2html.go
44 lines (37 loc) · 827 Bytes
/
md2html.go
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
39
40
41
42
43
44
package md2html
import (
"bytes"
"fmt"
"html"
"github.com/yuin/goldmark"
emoji "github.com/yuin/goldmark-emoji"
meta "github.com/yuin/goldmark-meta"
"github.com/yuin/goldmark/extension"
"github.com/yuin/goldmark/parser"
)
type HTML struct {
Content string
Meta map[string]interface{}
}
func Convert(source []byte) (*HTML, error) {
gm := goldmark.New(
goldmark.WithExtensions(
extension.GFM,
meta.Meta,
emoji.Emoji,
),
)
var (
buf = bytes.NewBuffer(nil)
context = parser.NewContext()
)
err := gm.Convert(source, buf, parser.WithContext(context))
if err != nil {
return nil, err
}
buf.WriteString(fmt.Sprintf("<details hidden id=\"blogger-raw\">%s</details>\n", html.EscapeString(string(source))))
return &HTML{
Content: buf.String(),
Meta: meta.Get(context),
}, nil
}