diff options
Diffstat (limited to 'html/html.go')
| -rw-r--r-- | html/html.go | 61 |
1 files changed, 55 insertions, 6 deletions
diff --git a/html/html.go b/html/html.go index 40a6ad5..bd3139e 100644 --- a/html/html.go +++ b/html/html.go @@ -1,14 +1,63 @@ package html import ( - "github.com/gomarkdown/markdown" - "github.com/gomarkdown/markdown/parser" + "bytes" + + "github.com/yuin/goldmark" + "github.com/yuin/goldmark/extension" + "github.com/yuin/goldmark/parser" + "github.com/yuin/goldmark/renderer/html" + "go.abhg.dev/goldmark/toc" + + "github.com/alecthomas/chroma/v2" + chromahtml "github.com/alecthomas/chroma/v2/formatters/html" + chromastyles "github.com/alecthomas/chroma/v2/styles" + highlighting "github.com/yuin/goldmark-highlighting/v2" ) func MDToHTML(md []byte, hasToc bool) []byte { - extensions := parser.CommonExtensions | parser.AutoHeadingIDs | parser.NoEmptyLineBeforeBlock | parser.Footnotes - p := parser.NewWithExtensions(extensions) + style := chromastyles.Get("autumn") + style, err := style.Builder().Add(chroma.Background, "bg:#f0f0f0").Build() + if err != nil { + return nil + } + + extensions := []goldmark.Extender{ + extension.GFM, + extension.Footnote, + highlighting.NewHighlighting( + highlighting.WithCustomStyle(style), + highlighting.WithFormatOptions( + chromahtml.WrapLongLines(true), + chromahtml.InlineCode(true), + chromahtml.TabWidth(4), + chromahtml.PreventSurroundingPre(false), + ), + ), + } + + if hasToc { + extensions = append(extensions, &toc.Extender{ + Compact: true, + }) + } + + converter := goldmark.New( + goldmark.WithExtensions(extensions...), + goldmark.WithParserOptions( + parser.WithAutoHeadingID(), + ), + goldmark.WithRendererOptions( + html.WithHardWraps(), + html.WithXHTML(), + ), + ) + + var buf bytes.Buffer + err = converter.Convert(md, &buf) + if err != nil { + return nil + } - renderer := newRenderer(hasToc) - return markdown.ToHTML(md, p, renderer) + return buf.Bytes() } |
