Don't escape markdown inside code blocks

Closes #45
This commit is contained in:
Tulir Asokan
2023-01-27 22:47:54 +02:00
parent 09a94010d8
commit fa646cdc84
3 changed files with 15 additions and 11 deletions

View File

@@ -50,7 +50,7 @@ func pillConverter(displayname, mxid, eventID string, ctx format.Context) string
if len(mxid) == 0 { if len(mxid) == 0 {
return displayname return displayname
} }
user := ctx[formatterContextUserKey].(*User) user := ctx.ReturnData[formatterContextUserKey].(*User)
if mxid[0] == '#' { if mxid[0] == '#' {
alias, err := user.bridge.Bot.ResolveAlias(id.RoomAlias(mxid)) alias, err := user.bridge.Bot.ResolveAlias(id.RoomAlias(mxid))
if err != nil { if err != nil {
@@ -129,13 +129,17 @@ var matrixHTMLParser = &format.HTMLParser{
TabsToSpaces: 4, TabsToSpaces: 4,
Newline: "\n", Newline: "\n",
HorizontalLine: "\n---\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) 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) 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) return escapeDiscordMarkdown(s)
}, },
SpoilerConverter: func(text, reason string, ctx format.Context) string { 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 { func (portal *Portal) parseMatrixHTML(user *User, content *event.MessageEventContent) string {
if content.Format == event.FormatHTML && len(content.FormattedBody) > 0 { if content.Format == event.FormatHTML && len(content.FormattedBody) > 0 {
return matrixHTMLParser.Parse(content.FormattedBody, format.Context{ ctx := format.NewContext()
formatterContextUserKey: user, ctx.ReturnData[formatterContextUserKey] = user
formatterContextPortalKey: portal, ctx.ReturnData[formatterContextPortalKey] = portal
}) return matrixHTMLParser.Parse(content.FormattedBody, ctx)
} else { } else {
return escapeDiscordMarkdown(content.Body) return escapeDiscordMarkdown(content.Body)
} }

2
go.mod
View File

@@ -12,7 +12,7 @@ require (
github.com/stretchr/testify v1.8.1 github.com/stretchr/testify v1.8.1
github.com/yuin/goldmark v1.5.3 github.com/yuin/goldmark v1.5.3
maunium.net/go/maulogger/v2 v2.3.2 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 ( require (

4
go.sum
View File

@@ -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/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 h1:1XmIYmMd3PoQfp9J+PaHhpt80zpfmMqaShzUTC7FwY0=
maunium.net/go/maulogger/v2 v2.3.2/go.mod h1:TYWy7wKwz/tIXTpsx8G3mZseIRiC5DoMxSZazOHy68A= 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.1-0.20230127204719-4c4238b61f20 h1:D2Z0tjf0za/rg9WxRJdV9M5BENK6d3LJaRtAfLpGfkk=
maunium.net/go/mautrix v0.13.0/go.mod h1:gYMQPsZ9lQpyKlVp+DGwOuc9LIcE/c8GZW2CvKHISgM= maunium.net/go/mautrix v0.13.1-0.20230127204719-4c4238b61f20/go.mod h1:gYMQPsZ9lQpyKlVp+DGwOuc9LIcE/c8GZW2CvKHISgM=