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