|
@@ -1,4 +1,4 @@
|
|
|
-import strutils, strformat, htmlgen, xmltree, times
|
|
|
|
|
|
|
+import strutils, strformat, sequtils, htmlgen, xmltree, times, uri
|
|
|
import regex
|
|
import regex
|
|
|
|
|
|
|
|
import types, utils
|
|
import types, utils
|
|
@@ -11,6 +11,7 @@ const
|
|
|
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]+)"
|
|
|
ytRegex = re"(www.|m.)?youtu(be.com|.be)"
|
|
ytRegex = re"(www.|m.)?youtu(be.com|.be)"
|
|
|
twRegex = re"(www.|mobile.)?twitter.com"
|
|
twRegex = re"(www.|mobile.)?twitter.com"
|
|
|
nbsp = $Rune(0x000A0)
|
|
nbsp = $Rune(0x000A0)
|
|
@@ -40,6 +41,15 @@ proc reEmailToLink*(m: RegexMatch; s: string): string =
|
|
|
let url = s[m.group(0)[0]]
|
|
let url = s[m.group(0)[0]]
|
|
|
toLink("mailto://" & url, url)
|
|
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 =
|
|
proc reUsernameToLink*(m: RegexMatch; s: string): string =
|
|
|
var username = ""
|
|
var username = ""
|
|
|
var pretext = ""
|
|
var pretext = ""
|
|
@@ -69,6 +79,7 @@ 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)
|