From fa646cdc84c1cc003e2924e96ef7c91d209e6e21 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Fri, 27 Jan 2023 22:47:54 +0200 Subject: [PATCH] Don't escape markdown inside code blocks Closes #45 --- formatter.go | 20 ++++++++++++-------- go.mod | 2 +- go.sum | 4 ++-- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/formatter.go b/formatter.go index d94f35d..c213131 100644 --- a/formatter.go +++ b/formatter.go @@ -50,7 +50,7 @@ func pillConverter(displayname, mxid, eventID string, ctx format.Context) string if len(mxid) == 0 { return displayname } - user := ctx[formatterContextUserKey].(*User) + user := ctx.ReturnData[formatterContextUserKey].(*User) if mxid[0] == '#' { alias, err := user.bridge.Bot.ResolveAlias(id.RoomAlias(mxid)) if err != nil { @@ -129,13 +129,17 @@ var matrixHTMLParser = &format.HTMLParser{ TabsToSpaces: 4, Newline: "\n", HorizontalLine: "\n---\n", - ItalicConverter: func(s string, context format.Context) string { + ItalicConverter: func(s string, ctx format.Context) string { return fmt.Sprintf("*%s*", s) }, - UnderlineConverter: func(s string, context format.Context) string { + UnderlineConverter: func(s string, ctx format.Context) string { return fmt.Sprintf("__%s__", s) }, - TextConverter: func(s string, context format.Context) string { + TextConverter: func(s string, ctx format.Context) string { + if ctx.TagStack.Has("pre") || ctx.TagStack.Has("code") { + // If we're in a code block, don't escape markdown + return s + } return escapeDiscordMarkdown(s) }, SpoilerConverter: func(text, reason string, ctx format.Context) string { @@ -152,10 +156,10 @@ func init() { func (portal *Portal) parseMatrixHTML(user *User, content *event.MessageEventContent) string { if content.Format == event.FormatHTML && len(content.FormattedBody) > 0 { - return matrixHTMLParser.Parse(content.FormattedBody, format.Context{ - formatterContextUserKey: user, - formatterContextPortalKey: portal, - }) + ctx := format.NewContext() + ctx.ReturnData[formatterContextUserKey] = user + ctx.ReturnData[formatterContextPortalKey] = portal + return matrixHTMLParser.Parse(content.FormattedBody, ctx) } else { return escapeDiscordMarkdown(content.Body) } diff --git a/go.mod b/go.mod index f464337..e6080f8 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( github.com/stretchr/testify v1.8.1 github.com/yuin/goldmark v1.5.3 maunium.net/go/maulogger/v2 v2.3.2 - maunium.net/go/mautrix v0.13.0 + maunium.net/go/mautrix v0.13.1-0.20230127204719-4c4238b61f20 ) require ( diff --git a/go.sum b/go.sum index 7846bbb..7e9394c 100644 --- a/go.sum +++ b/go.sum @@ -68,5 +68,5 @@ maunium.net/go/mauflag v1.0.0 h1:YiaRc0tEI3toYtJMRIfjP+jklH45uDHtT80nUamyD4M= maunium.net/go/mauflag v1.0.0/go.mod h1:nLivPOpTpHnpzEh8jEdSL9UqO9+/KBJFmNRlwKfkPeA= maunium.net/go/maulogger/v2 v2.3.2 h1:1XmIYmMd3PoQfp9J+PaHhpt80zpfmMqaShzUTC7FwY0= maunium.net/go/maulogger/v2 v2.3.2/go.mod h1:TYWy7wKwz/tIXTpsx8G3mZseIRiC5DoMxSZazOHy68A= -maunium.net/go/mautrix v0.13.0 h1:CRdpMFc1kDSNnCZMcqahR9/pkDy/vgRbd+fHnSCl6Yg= -maunium.net/go/mautrix v0.13.0/go.mod h1:gYMQPsZ9lQpyKlVp+DGwOuc9LIcE/c8GZW2CvKHISgM= +maunium.net/go/mautrix v0.13.1-0.20230127204719-4c4238b61f20 h1:D2Z0tjf0za/rg9WxRJdV9M5BENK6d3LJaRtAfLpGfkk= +maunium.net/go/mautrix v0.13.1-0.20230127204719-4c4238b61f20/go.mod h1:gYMQPsZ9lQpyKlVp+DGwOuc9LIcE/c8GZW2CvKHISgM=