From 79fb8bad04662bfb5aa8990afeba4c134eb06201 Mon Sep 17 00:00:00 2001
From: tobi <31960611+tsmethurst@users.noreply.github.com>
Date: Fri, 26 Aug 2022 13:28:06 +0200
Subject: [PATCH] [feature] Allow footnotes in markdown, use `
` instead of
`\n` (#767)
* allow markdown footnotes + hard line breaks
* don't keep whitespace w/minify (unnecessary now)
* test markdown a bit more
---
internal/text/markdown.go | 12 +++++++-----
internal/text/markdown_test.go | 16 +++++++++++++++-
2 files changed, 22 insertions(+), 6 deletions(-)
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: "
mdWithHTMLExpected = "
Here’s a simple text in markdown.
Here’s a link.
Here’s an image:
Here’s a simple text in markdown.
Here’s a cheeky little script:
" + mdWithCheekyHTMLExpected = "Here’s a simple text in markdown.
Here’s a cheeky little script:
" mdWithHashtagInitial = "#welcome #Hashtag" mdWithHashtagInitialExpected = "" 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
get ready, there’s a block quote coming:
" ) 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)) }line1
line2line3