mirror of
				https://github.com/go-gitea/gitea
				synced 2025-10-31 11:28:24 +00:00 
			
		
		
		
	Avoid emoji mismatch and allow to only enable chosen emojis (#35692)
Fix #23635
This commit is contained in:
		| @@ -5,6 +5,7 @@ package markup | ||||
|  | ||||
| import ( | ||||
| 	"strings" | ||||
| 	"unicode" | ||||
|  | ||||
| 	"code.gitea.io/gitea/modules/emoji" | ||||
| 	"code.gitea.io/gitea/modules/setting" | ||||
| @@ -66,26 +67,31 @@ func emojiShortCodeProcessor(ctx *RenderContext, node *html.Node) { | ||||
| 		} | ||||
| 		m[0] += start | ||||
| 		m[1] += start | ||||
|  | ||||
| 		start = m[1] | ||||
|  | ||||
| 		alias := node.Data[m[0]:m[1]] | ||||
| 		alias = strings.ReplaceAll(alias, ":", "") | ||||
| 		converted := emoji.FromAlias(alias) | ||||
| 		if converted == nil { | ||||
| 			// check if this is a custom reaction | ||||
| 			if _, exist := setting.UI.CustomEmojisMap[alias]; exist { | ||||
| 				replaceContent(node, m[0], m[1], createCustomEmoji(ctx, alias)) | ||||
| 				node = node.NextSibling.NextSibling | ||||
| 				start = 0 | ||||
| 				continue | ||||
| 			} | ||||
|  | ||||
| 		var nextChar byte | ||||
| 		if m[1] < len(node.Data) { | ||||
| 			nextChar = node.Data[m[1]] | ||||
| 		} | ||||
| 		if nextChar == ':' || unicode.IsLetter(rune(nextChar)) || unicode.IsDigit(rune(nextChar)) { | ||||
| 			continue | ||||
| 		} | ||||
|  | ||||
| 		replaceContent(node, m[0], m[1], createEmoji(ctx, converted.Emoji, converted.Description)) | ||||
| 		node = node.NextSibling.NextSibling | ||||
| 		start = 0 | ||||
| 		alias = strings.Trim(alias, ":") | ||||
| 		converted := emoji.FromAlias(alias) | ||||
| 		if converted != nil { | ||||
| 			// standard emoji | ||||
| 			replaceContent(node, m[0], m[1], createEmoji(ctx, converted.Emoji, converted.Description)) | ||||
| 			node = node.NextSibling.NextSibling | ||||
| 			start = 0 // restart searching start since node has changed | ||||
| 		} else if _, exist := setting.UI.CustomEmojisMap[alias]; exist { | ||||
| 			// custom reaction | ||||
| 			replaceContent(node, m[0], m[1], createCustomEmoji(ctx, alias)) | ||||
| 			node = node.NextSibling.NextSibling | ||||
| 			start = 0 // restart searching start since node has changed | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user