mirror of
https://github.com/thomiceli/opengist.git
synced 2024-12-23 04:52:40 +00:00
48 lines
1.1 KiB
Go
48 lines
1.1 KiB
Go
|
package render
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"github.com/alecthomas/chroma/v2/formatters/html"
|
||
|
"github.com/thomiceli/opengist/internal/db"
|
||
|
"github.com/thomiceli/opengist/internal/git"
|
||
|
"github.com/yuin/goldmark"
|
||
|
emoji "github.com/yuin/goldmark-emoji"
|
||
|
highlighting "github.com/yuin/goldmark-highlighting/v2"
|
||
|
"github.com/yuin/goldmark/extension"
|
||
|
"go.abhg.dev/goldmark/mermaid"
|
||
|
)
|
||
|
|
||
|
func MarkdownGistPreview(gist *db.Gist) (RenderedGist, error) {
|
||
|
var buf bytes.Buffer
|
||
|
err := newMarkdown().Convert([]byte(gist.Preview), &buf)
|
||
|
|
||
|
return RenderedGist{
|
||
|
Gist: gist,
|
||
|
HTML: buf.String(),
|
||
|
}, err
|
||
|
}
|
||
|
|
||
|
func MarkdownFile(file *git.File) (RenderedFile, error) {
|
||
|
var buf bytes.Buffer
|
||
|
err := newMarkdown().Convert([]byte(file.Content), &buf)
|
||
|
|
||
|
return RenderedFile{
|
||
|
File: file,
|
||
|
HTML: buf.String(),
|
||
|
Type: "Markdown",
|
||
|
}, err
|
||
|
}
|
||
|
|
||
|
func newMarkdown() goldmark.Markdown {
|
||
|
return goldmark.New(
|
||
|
goldmark.WithExtensions(
|
||
|
extension.GFM,
|
||
|
highlighting.NewHighlighting(
|
||
|
highlighting.WithStyle("catppuccin-latte"),
|
||
|
highlighting.WithFormatOptions(html.WithClasses(true))),
|
||
|
emoji.Emoji,
|
||
|
&mermaid.Extender{},
|
||
|
),
|
||
|
)
|
||
|
}
|