prime8dev

prime8dev
git clone https://git.prime8.dev/prime8dev.git
Log | Files | Refs | README | LICENSE

markdown.go (1100B)


      1 package utils
      2 
      3 import (
      4 	"bytes"
      5 	"strings"
      6 
      7 	"github.com/yuin/goldmark"
      8 	"github.com/yuin/goldmark/extension"
      9 	"github.com/yuin/goldmark/parser"
     10 	"github.com/yuin/goldmark/renderer/html"
     11 )
     12 
     13 var markdownRenderer = goldmark.New(
     14 	goldmark.WithExtensions(
     15 		extension.GFM,
     16 		extension.Typographer,
     17 	),
     18 	goldmark.WithParserOptions(
     19 		parser.WithAutoHeadingID(),
     20 	),
     21 	goldmark.WithRendererOptions(
     22 		html.WithHardWraps(),
     23 		html.WithXHTML(),
     24 	),
     25 )
     26 
     27 func MarkdownToHTML(markdown string) (string, error) {
     28 	markdown = strings.TrimSpace(markdown)
     29 	if markdown == "" {
     30 		return "", nil
     31 	}
     32 
     33 	var buf bytes.Buffer
     34 	if err := markdownRenderer.Convert([]byte(markdown), &buf); err != nil {
     35 		return "", err
     36 	}
     37 
     38 	return buf.String(), nil
     39 }
     40 
     41 func RemoveFirstH1(markdown string) string {
     42 	lines := strings.Split(markdown, "\n")
     43 	var result []string
     44 	skippedFirstH1 := false
     45 
     46 	for _, line := range lines {
     47 		trimmed := strings.TrimSpace(line)
     48 		if !skippedFirstH1 && strings.HasPrefix(trimmed, "# ") {
     49 			skippedFirstH1 = true
     50 			continue
     51 		}
     52 		result = append(result, line)
     53 	}
     54 
     55 	return strings.Join(result, "\n")
     56 }