From 3738967d9caeac4c69fb4e6fec275e6367cef7b4 Mon Sep 17 00:00:00 2001 From: Jeff Shipley Date: Tue, 23 Jul 2013 08:50:19 +0200 Subject: [PATCH] Improve URL matching - Add support for matching IPv6 addresses - Fix URL parsing (bug #7959 and bug #9800) - Add some characters for email address parsing Acked-by: Natanael Copa --- terminal/terminal-widget.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/terminal/terminal-widget.c b/terminal/terminal-widget.c index d490994..29dc382 100644 --- a/terminal/terminal-widget.c +++ b/terminal/terminal-widget.c @@ -41,16 +41,19 @@ #define USERCHARS "-_+[:alnum:]" +#define USERCHARS "-[:alnum:]\\Q_.+\\E" #define USERCHARS_CLASS "[" USERCHARS "]" #define PASSCHARS_CLASS "[-[:alnum:]\\Q,?;.:/!%$^*&~\"#'\\E]" #define HOSTCHARS_CLASS "[-[:alnum:]]" -#define HOST HOSTCHARS_CLASS "+(\\." HOSTCHARS_CLASS "+)*" +#define HOSTNAME HOSTCHARS_CLASS "+(?:\\." HOSTCHARS_CLASS "+)*" +#define IPV6ADDRESS "\\[(?:[[:xdigit:]]{0,4}:){2,7}[[:xdigit:]]{0,4}\\]" +#define HOST "(?:" HOSTNAME "|" IPV6ADDRESS ")" #define PORT "(?:\\:[[:digit:]]{1,5})?" #define PATHCHARS_CLASS "[-[:alnum:]\\Q_$.+!*,;@&=?/:~#'%\\E]" -#define PATHTERM_CLASS "[^\\Q]'.}>) \t\r\n,\"\\E]" +#define PATHTERM_CLASS "[[:alnum:]\\Q_$+*@&=/~#%\\E]" #define SCHEME "(?:news:|telnet:|nntp:|file:\\/|https?:|ftps?:|sftp:|webcal:|magnet:)" #define USERPASS USERCHARS_CLASS "+(?:" PASSCHARS_CLASS "+)?" -#define URLPATH "(?:(/"PATHCHARS_CLASS"+(?:[(]"PATHCHARS_CLASS"*[)])*"PATHCHARS_CLASS"*)*"PATHTERM_CLASS")?" +#define URLPATH "(?:(?:\\(" PATHCHARS_CLASS "*\\)|" PATHCHARS_CLASS ")*(?:\\(" PATHCHARS_CLASS "*\\)|" PATHTERM_CLASS "))?" @@ -78,7 +81,7 @@ TerminalRegexPattern; static const TerminalRegexPattern regex_patterns[] = { { SCHEME "//(?:" USERPASS "\\@)?" HOST PORT URLPATH, PATTERN_TYPE_FULL_HTTP }, - { "(?:www|ftp)" HOSTCHARS_CLASS "*\\." HOST PORT URLPATH, PATTERN_TYPE_HTTP }, + { "(?:www[[:digit:]]{0,3}|ftp)" HOSTCHARS_CLASS "*\\." HOST PORT URLPATH, PATTERN_TYPE_HTTP }, { "(?:mailto:)?" USERCHARS_CLASS "[" USERCHARS ".]*\\@" HOSTCHARS_CLASS "+\\." HOST, PATTERN_TYPE_EMAIL }, { "news:[[:alnum:]\\Q^_{|}~!\"#$%&'()*+,./;:=?`\\E]+", PATTERN_TYPE_FULL_HTTP } }; -- 1.8.3.3