diff --git a/modules/base/markdown.go b/modules/base/markdown.go
index 057e1b0477..0825decb44 100644
--- a/modules/base/markdown.go
+++ b/modules/base/markdown.go
@@ -97,12 +97,31 @@ var (
)
func RenderSpecialLink(rawBytes []byte, urlPrefix string) []byte {
- ms := MentionPattern.FindAll(rawBytes, -1)
- for _, m := range ms {
- rawBytes = bytes.Replace(rawBytes, m,
- []byte(fmt.Sprintf(`%s`, m[1:], m)), -1)
+ buf := bytes.NewBufferString("")
+ inCodeBlock := false
+ codeBlockPrefix := []byte("```")
+ lineBreak := []byte("\n")
+ tab := []byte("\t")
+ lines := bytes.Split(rawBytes, lineBreak)
+ for _, line := range lines {
+ if bytes.HasPrefix(line, codeBlockPrefix) {
+ inCodeBlock = !inCodeBlock
+ }
+
+ if !inCodeBlock && !bytes.HasPrefix(line, tab) {
+ ms := MentionPattern.FindAll(line, -1)
+ for _, m := range ms {
+ line = bytes.Replace(line, m,
+ []byte(fmt.Sprintf(`%s`, m[1:], m)), -1)
+ }
+ }
+
+ buf.Write(line)
+ buf.Write(lineBreak)
}
- ms = commitPattern.FindAll(rawBytes, -1)
+
+ rawBytes = buf.Bytes()
+ ms := commitPattern.FindAll(rawBytes, -1)
for _, m := range ms {
m = bytes.TrimSpace(m)
i := strings.Index(string(m), "commit/")