hmn/src/parsing/parsing.go

61 lines
1.2 KiB
Go
Raw Normal View History

package parsing
import (
2021-06-13 17:22:55 +00:00
"bytes"
"github.com/yuin/goldmark"
highlighting "github.com/yuin/goldmark-highlighting"
2021-06-13 17:22:55 +00:00
"github.com/yuin/goldmark/extension"
"github.com/yuin/goldmark/util"
)
var previewMarkdown = goldmark.New(
goldmark.WithExtensions(
extension.GFM,
highlightExtension,
SpoilerExtension{},
EmbedExtension{
Preview: true,
},
2021-06-20 19:06:22 +00:00
MathjaxExtension{},
2021-06-20 21:44:07 +00:00
BBCodeExtension{
Preview: true,
},
),
2021-06-13 17:22:55 +00:00
)
var realMarkdown = goldmark.New(
goldmark.WithExtensions(
extension.GFM,
highlightExtension,
SpoilerExtension{},
EmbedExtension{},
2021-06-20 19:06:22 +00:00
MathjaxExtension{},
2021-06-20 20:46:42 +00:00
BBCodeExtension{},
),
)
func ParsePostInput(source string, preview bool) string {
md := realMarkdown
if preview {
md = previewMarkdown
}
2021-06-13 17:22:55 +00:00
var buf bytes.Buffer
if err := md.Convert([]byte(source), &buf); err != nil {
panic(err)
}
return buf.String()
}
var highlightExtension = highlighting.NewHighlighting(
highlighting.WithFormatOptions(HMNChromaOptions...),
highlighting.WithWrapperRenderer(func(w util.BufWriter, context highlighting.CodeBlockContext, entering bool) {
if entering {
w.WriteString(`<pre class="hmn-code">`)
} else {
w.WriteString(`</pre>`)
}
}),
)