Selaa lähdekoodia

Linkify hashtags

Fixes #34
Zed 7 vuotta sitten
vanhempi
commit
9917a69dc5
1 muutettua tiedostoa jossa 12 lisäystä ja 1 poistoa
  1. 12 1
      src/formatters.nim

+ 12 - 1
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)