Fix username linkification bug

This commit is contained in:
Zed 2019-09-20 01:46:20 +02:00
parent 7a7c4d68e4
commit 3ea926550b

View file

@ -8,7 +8,7 @@ from unicode import Rune, `$`
const const
urlRegex = re"((https?|ftp)://(-\.)?([^\s/?\.#]+\.?)+([/\?][^\s\)]*)?)" urlRegex = re"((https?|ftp)://(-\.)?([^\s/?\.#]+\.?)+([/\?][^\s\)]*)?)"
emailRegex = re"([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)" emailRegex = re"([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)"
usernameRegex = re"(^|[^A-z0-9_?])@([A-z0-9_]+)" usernameRegex = re"(^|[^A-z0-9_?\/])@([A-z0-9_]+)"
picRegex = re"pic.twitter.com/[^ ]+" picRegex = re"pic.twitter.com/[^ ]+"
ellipsisRegex = re" ?…" ellipsisRegex = re" ?…"
hashtagRegex = re"([^\S])?([#$][A-z0-9]+)" hashtagRegex = re"([^\S])?([#$][A-z0-9]+)"
@ -77,15 +77,15 @@ proc replaceUrl*(url: string; prefs: Prefs): string =
proc linkifyText*(text: string; prefs: Prefs; rss=false): string = proc linkifyText*(text: string; prefs: Prefs; rss=false): string =
result = xmltree.escape(stripText(text)) result = xmltree.escape(stripText(text))
result = result.replace(ellipsisRegex, "") result = result.replace(ellipsisRegex, " ")
result = result.replace(emailRegex, reEmailToLink) result = result.replace(emailRegex, reEmailToLink)
result = result.replace(hashtagRegex, reHashtagToLink)
if rss: if rss:
result = result.replace(urlRegex, reUrlToLink) result = result.replace(urlRegex, reUrlToLink)
result = result.replace(usernameRegex, reUsernameToFullLink) result = result.replace(usernameRegex, reUsernameToFullLink)
else: else:
result = result.replace(urlRegex, reUrlToShortLink) result = result.replace(urlRegex, reUrlToShortLink)
result = result.replace(usernameRegex, reUsernameToLink) result = result.replace(usernameRegex, reUsernameToLink)
result = result.replace(hashtagRegex, reHashtagToLink)
result = result.replace(re"([^\s\(\n%])<a", "$1 <a") result = result.replace(re"([^\s\(\n%])<a", "$1 <a")
result = result.replace(re"</a>\s+([;.,!\)'%]|&apos;)", "</a>$1") result = result.replace(re"</a>\s+([;.,!\)'%]|&apos;)", "</a>$1")
result = result.replace(re"^\. <a", ".<a") result = result.replace(re"^\. <a", ".<a")