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"
|
2020-09-18 10:34:52 +00:00
|
|
|
"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,
|
2020-09-18 10:34:52 +00:00
|
|
|
// Emojis
|
|
|
|
emoji.New(
|
2020-09-18 11:11:25 +00:00
|
|
|
emoji.WithEmojis(EmojiGoLib()),
|
2020-09-18 10:34:52 +00:00
|
|
|
),
|
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
|
2020-09-18 10:34:52 +00:00
|
|
|
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
|
|
|
|
}
|