From 9917a69dc53bd99c43aa79b8b6f16be7a8f3a727 Mon Sep 17 00:00:00 2001 From: Zed Date: Thu, 19 Sep 2019 05:22:45 +0200 Subject: [PATCH] Linkify hashtags Fixes #34 --- src/formatters.nim | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/formatters.nim b/src/formatters.nim index 42ce2dd..74c4e51 100644 --- a/src/formatters.nim +++ b/src/formatters.nim @@ -1,4 +1,4 @@ -import strutils, strformat, htmlgen, xmltree, times +import strutils, strformat, sequtils, htmlgen, xmltree, times, uri import regex import types, utils @@ -11,6 +11,7 @@ const usernameRegex = re"(^|[^A-z0-9_?])@([A-z0-9_]+)" picRegex = re"pic.twitter.com/[^ ]+" ellipsisRegex = re" ?…" + hashtagRegex = re"([^\S])?([#$][A-z0-9]+)" ytRegex = re"(www.|m.)?youtu(be.com|.be)" twRegex = re"(www.|mobile.)?twitter.com" nbsp = $Rune(0x000A0) @@ -40,6 +41,15 @@ proc reEmailToLink*(m: RegexMatch; s: string): string = let url = s[m.group(0)[0]] toLink("mailto://" & url, url) +proc reHashtagToLink*(m: RegexMatch; s: string): string = + result = if m.group(0).len > 0: s[m.group(0)[0]] else: "" + let hash = s[m.group(1)[0]] + let link = toLink("/search?text=" & encodeUrl(hash), hash) + if hash.any(isAlphaAscii): + result &= link + else: + result &= hash + proc reUsernameToLink*(m: RegexMatch; s: string): string = var username = "" var pretext = "" @@ -69,6 +79,7 @@ proc linkifyText*(text: string; prefs: Prefs; rss=false): string = result = xmltree.escape(stripText(text)) result = result.replace(ellipsisRegex, "") result = result.replace(emailRegex, reEmailToLink) + result = result.replace(hashtagRegex, reHashtagToLink) if rss: result = result.replace(urlRegex, reUrlToLink) result = result.replace(usernameRegex, reUsernameToFullLink)