diff --git a/internal/text/markdown.go b/internal/text/markdown.go index 8952b99d6..13fb93378 100644 --- a/internal/text/markdown.go +++ b/internal/text/markdown.go @@ -28,7 +28,10 @@ "github.com/tdewolff/minify/v2/html" ) -var m *minify.M +var ( + bfExtensions = blackfriday.CommonExtensions | blackfriday.HardLineBreak | blackfriday.Footnotes + m *minify.M +) func (f *formatter) FromMarkdown(ctx context.Context, md string, mentions []*gtsmodel.Mention, tags []*gtsmodel.Tag) string { // format tags nicely @@ -38,7 +41,7 @@ func (f *formatter) FromMarkdown(ctx context.Context, md string, mentions []*gts content = f.ReplaceMentions(ctx, content, mentions) // parse markdown - contentBytes := blackfriday.Run([]byte(content)) + contentBytes := blackfriday.Run([]byte(content), blackfriday.WithExtensions(bfExtensions)) // clean anything dangerous out of it content = SanitizeHTML(string(contentBytes)) @@ -46,9 +49,8 @@ func (f *formatter) FromMarkdown(ctx context.Context, md string, mentions []*gts if m == nil { m = minify.New() m.Add("text/html", &html.Minifier{ - KeepEndTags: true, - KeepQuotes: true, - KeepWhitespace: true, + KeepEndTags: true, + KeepQuotes: true, }) } diff --git a/internal/text/markdown_test.go b/internal/text/markdown_test.go index af4a4fef6..3e156f43e 100644 --- a/internal/text/markdown_test.go +++ b/internal/text/markdown_test.go @@ -56,11 +56,15 @@ mdWithHTML = "# Title\n\nHere's a simple text in markdown.\n\nHere's a link.\n\nHere's an image: \"The" mdWithHTMLExpected = "

Title

Here’s a simple text in markdown.

Here’s a link.

Here’s an image: \"The

" mdWithCheekyHTML = "# Title\n\nHere's a simple text in markdown.\n\nHere's a cheeky little script: " - mdWithCheekyHTMLExpected = "

Title

Here’s a simple text in markdown.

Here’s a cheeky little script:

" + mdWithCheekyHTMLExpected = "

Title

Here’s a simple text in markdown.

Here’s a cheeky little script:

" mdWithHashtagInitial = "#welcome #Hashtag" mdWithHashtagInitialExpected = "

#welcome #Hashtag

" mdCodeBlockWithNewlines = "some code coming up\n\n```\n\n\n\n```\nthat was some code" mdCodeBlockWithNewlinesExpected = "

some code coming up

\n\n\n

that was some code

" + mdWithFootnote = "fox mulder,fbi.[^1]\n\n[^1]: federated bureau of investigation" + mdWithFootnoteExpected = "

fox mulder,fbi.1


  1. federated bureau of investigation
" + mdWithBlockQuote = "get ready, there's a block quote coming:\n\n>line1\n>line2\n>\n>line3\n\n" + mdWithBlockQuoteExpected = "

get ready, there’s a block quote coming:

line1
line2

line3

" ) type MarkdownTestSuite struct { @@ -119,6 +123,16 @@ func (suite *MarkdownTestSuite) TestParseCodeBlockWithNewlines() { suite.Equal(mdCodeBlockWithNewlinesExpected, s) } +func (suite *MarkdownTestSuite) TestParseWithFootnote() { + s := suite.formatter.FromMarkdown(context.Background(), mdWithFootnote, nil, nil) + suite.Equal(mdWithFootnoteExpected, s) +} + +func (suite *MarkdownTestSuite) TestParseWithBlockquote() { + s := suite.formatter.FromMarkdown(context.Background(), mdWithBlockQuote, nil, nil) + suite.Equal(mdWithBlockQuoteExpected, s) +} + func TestMarkdownTestSuite(t *testing.T) { suite.Run(t, new(MarkdownTestSuite)) }