package main import ( "io" "strings" "github.com/gomarkdown/markdown" "github.com/gomarkdown/markdown/ast" "github.com/gomarkdown/markdown/html" "github.com/gomarkdown/markdown/parser" ) var mdparser = parser.NewWithExtensions( parser.CommonExtensions | parser.AutoHeadingIDs | parser.NoEmptyLineBeforeBlock | parser.Footnotes, ) var mdrenderer = html.NewRenderer(html.RendererOptions{ Flags: html.CommonFlags | html.HrefTargetBlank, }) var tgivmdrenderer = html.NewRenderer(html.RendererOptions{ Flags: html.CommonFlags | html.HrefTargetBlank, RenderNodeHook: func(w io.Writer, node ast.Node, entering bool) (ast.WalkStatus, bool) { // telegram instant view really doesn't like when there is an image inside a paragraph (like
`)) } return ast.GoToNext, true } return ast.GoToNext, false }, }) func mdToHTML(md string, usingTelegramInstantView bool) string { md = strings.ReplaceAll(md, "\u00A0", " ") md = replaceNostrURLsWithTags(nostrEveryMatcher, md) // create markdown parser with extensions doc := mdparser.Parse([]byte(md)) renderer := mdrenderer if usingTelegramInstantView { renderer = tgivmdrenderer } // create HTML renderer with extensions output := string(markdown.Render(doc, renderer)) // sanitize content output = sanitizeXSS(output) return output }