---
 src/gtk-helpers/hyperlinks.c |   17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/src/gtk-helpers/hyperlinks.c b/src/gtk-helpers/hyperlinks.c
index 72fab15..a58bb3a 100644
--- a/src/gtk-helpers/hyperlinks.c
+++ b/src/gtk-helpers/hyperlinks.c
@@ -6,9 +6,24 @@
 char *tag_url(const char* line, const char* prefix)
 {
     static const char *const known_url_prefixes[] = {"http://";, "https://";, 
"ftp://";, "file://", NULL};
+    static const char *known_url_ends = ",'\"\t\n ";
 
     char *result = xstrdup(line);
 
+
+    char *find_end(const char* url_start)
+    {
+        char *url_end = strchrnul(url_start, *known_url_ends);
+        const char *curr_end = known_url_ends;
+        while(*(++curr_end) != '\0')
+        {
+            char *tmp = strchrnul(url_start, *curr_end);
+            if (tmp < url_end)
+                url_end = tmp;
+        }
+        return url_end;
+    }
+
     const char *const *pfx = known_url_prefixes;
     while (*pfx != NULL)
     {
@@ -16,7 +31,7 @@ char *tag_url(const char* line, const char* prefix)
         char *url_start;
         while ((url_start = strstr(cur_pos, *pfx)) != NULL)
         {
-            char *url_end = strchrnul(url_start, ' '); //TODO: also '.', ',', 
'\t', '\n'...
+            char *url_end = find_end(url_start);
             int len = url_end - url_start;
             char *hyperlink = xasprintf("%s<a href=\"%.*s\">%.*s</a>",
                             prefix,
-- 
1.7.10.2

Reply via email to