On Thursday 14 of June 2012 10:03:20 Jiri Moskovcak wrote:
> ---
>  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;
> +    }
> +

Please, don't use nested functions. It is a little bit confusing.
(Note: consider usage of strtok() function)

>      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,

The rest is OK.


Regards,
Jakub

Reply via email to