diff --git a/go.mod b/go.mod index 90cf4a68..7bb3d8a1 100644 --- a/go.mod +++ b/go.mod @@ -17,6 +17,7 @@ require ( github.com/stretchr/testify v1.6.1 // indirect github.com/tdewolff/minify/v2 v2.12.0 github.com/technoweenie/multipartstreamer v1.0.1 // indirect + github.com/yuin/goldmark v1.1.32 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 golang.org/x/net v0.0.0-20210916014120-12bc252f5db8 golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c diff --git a/go.sum b/go.sum index 2d32274d..49358c40 100644 --- a/go.sum +++ b/go.sum @@ -323,6 +323,7 @@ github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32 h1:5tjfNdR2ki3yYQ842+eX2sQHeiwpKJ0RnHO4IYOc4V8= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= diff --git a/reader/rewrite/rewrite_functions.go b/reader/rewrite/rewrite_functions.go index 20e2c5d9..9e6e3e27 100644 --- a/reader/rewrite/rewrite_functions.go +++ b/reader/rewrite/rewrite_functions.go @@ -15,6 +15,8 @@ import ( "miniflux.app/config" "github.com/PuerkitoBio/goquery" + "github.com/yuin/goldmark" + goldmarkhtml "github.com/yuin/goldmark/renderer/html" ) var ( @@ -318,3 +320,18 @@ func decodeBase64Content(entryContent string) string { return html.EscapeString(string(ret)) } } + +func parseMarkdown(entryContent string) string { + var sb strings.Builder + md := goldmark.New( + goldmark.WithRendererOptions( + goldmarkhtml.WithUnsafe(), + ), + ) + + if err := md.Convert([]byte(entryContent), &sb); err != nil { + return entryContent + } + + return sb.String() +} diff --git a/reader/rewrite/rewriter.go b/reader/rewrite/rewriter.go index b00ea1a1..aa2dacc9 100644 --- a/reader/rewrite/rewriter.go +++ b/reader/rewrite/rewriter.go @@ -108,6 +108,8 @@ func applyRule(entryURL, entryContent string, rule rule) string { } else { entryContent = applyFuncOnTextContent(entryContent, "body", decodeBase64Content) } + case "parse_markdown": + entryContent = parseMarkdown(entryContent) } return entryContent