浏览代码

Don't escape markdown inside code blocks

Closes #45
Tulir Asokan 2 年之前
父节点
当前提交
fa646cdc84
共有 3 个文件被更改,包括 15 次插入11 次删除
  1. 12 8
      formatter.go
  2. 1 1
      go.mod
  3. 2 2
      go.sum

+ 12 - 8
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)
 	}

+ 1 - 1
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 (

+ 2 - 2
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=