summaryrefslogtreecommitdiff
path: root/html/html.go
diff options
context:
space:
mode:
Diffstat (limited to 'html/html.go')
-rw-r--r--html/html.go61
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()
}