GoBlog/markdown.go

58 lines
1.2 KiB
Go
Raw Normal View History

2020-07-28 19:38:12 +00:00
package main
import (
"bytes"
2020-09-18 11:11:25 +00:00
kemoji "github.com/kyokomi/emoji"
2020-07-28 19:38:12 +00:00
"github.com/yuin/goldmark"
"github.com/yuin/goldmark-emoji"
"github.com/yuin/goldmark-emoji/definition"
2020-07-28 19:38:12 +00:00
"github.com/yuin/goldmark/extension"
"github.com/yuin/goldmark/parser"
"github.com/yuin/goldmark/renderer/html"
2020-09-18 11:11:25 +00:00
"strings"
"sync"
2020-07-28 19:38:12 +00:00
)
2020-09-18 11:11:25 +00:00
var emojilib definition.Emojis
var emojiOnce sync.Once
2020-07-28 19:38:12 +00:00
var markdown goldmark.Markdown
2020-08-24 19:09:30 +00:00
func initMarkdown() {
2020-07-28 19:38:12 +00:00
markdown = goldmark.New(
goldmark.WithRendererOptions(
html.WithUnsafe(),
),
goldmark.WithParserOptions(
parser.WithAutoHeadingID(),
),
goldmark.WithExtensions(
extension.GFM,
extension.Footnote,
extension.Typographer,
// Emojis
emoji.New(
2020-09-18 11:11:25 +00:00
emoji.WithEmojis(EmojiGoLib()),
),
2020-07-28 19:38:12 +00:00
),
)
}
2020-07-29 14:41:36 +00:00
func renderMarkdown(source string) (content []byte, err error) {
2020-07-28 19:38:12 +00:00
var buffer bytes.Buffer
err = markdown.Convert([]byte(source), &buffer)
2020-08-24 19:09:30 +00:00
content = buffer.Bytes()
2020-07-28 19:38:12 +00:00
return
}
2020-09-18 11:11:25 +00:00
func EmojiGoLib() definition.Emojis {
emojiOnce.Do(func() {
var emojis []definition.Emoji
for shotcode, e := range kemoji.CodeMap() {
emojis = append(emojis, definition.NewEmoji(e, []rune(e), strings.ReplaceAll(shotcode, ":", "")))
}
emojilib = definition.NewEmojis(emojis...)
})
return emojilib
}