Now url_check_word() returns WORD_HOST6 when a ipv6 address is matched.

This commit is contained in:
Diogo Sousa 2013-06-18 12:01:39 +01:00
parent 55734baed8
commit 8ce8a359c1
2 changed files with 32 additions and 8 deletions

View File

@ -35,6 +35,7 @@ GTree *url_btree = NULL;
static int do_an_re (const char *word, int *start, int *end, int *type); static int do_an_re (const char *word, int *start, int *end, int *type);
static GRegex *re_url (void); static GRegex *re_url (void);
static GRegex *re_host (void); static GRegex *re_host (void);
static GRegex *re_host6 (void);
static GRegex *re_email (void); static GRegex *re_email (void);
static GRegex *re_nick (void); static GRegex *re_nick (void);
static GRegex *re_channel (void); static GRegex *re_channel (void);
@ -222,6 +223,7 @@ url_check_word (const char *word)
/* Fall through */ /* Fall through */
case WORD_URL: case WORD_URL:
case WORD_HOST: case WORD_HOST:
case WORD_HOST6:
case WORD_CHANNEL: case WORD_CHANNEL:
case WORD_PATH: case WORD_PATH:
return lasttype; return lasttype;
@ -317,6 +319,7 @@ do_an_re(const char *word, int *start, int *end, int *type)
{ re_url, WORD_URL }, { re_url, WORD_URL },
{ re_email, WORD_EMAIL }, { re_email, WORD_EMAIL },
{ re_channel, WORD_CHANNEL }, { re_channel, WORD_CHANNEL },
{ re_host6, WORD_HOST6 },
{ re_host, WORD_HOST }, { re_host, WORD_HOST },
{ re_path, WORD_PATH }, { re_path, WORD_PATH },
{ re_nick, WORD_NICK } { re_nick, WORD_NICK }
@ -356,7 +359,8 @@ do_an_re(const char *word, int *start, int *end, int *type)
#define HOST "(" DOMAIN TLD "|" IPADDR "|" IPV6ADDR ")" #define HOST "(" DOMAIN TLD "|" IPADDR "|" IPV6ADDR ")"
/* In urls the IPv6 must be enclosed in square brackets */ /* In urls the IPv6 must be enclosed in square brackets */
#define HOST_URL "(" DOMAIN TLD "|" IPADDR "|" "\\[" IPV6ADDR "\\]" ")" #define HOST_URL "(" DOMAIN TLD "|" IPADDR "|" "\\[" IPV6ADDR "\\]" ")"
#define OPT_PORT "(:[1-9][0-9]{0,4})?" #define PORT "(:[1-9][0-9]{0,4})"
#define OPT_PORT "(" PORT ")?"
GRegex * GRegex *
make_re(char *grist, char *type) make_re(char *grist, char *type)
@ -380,14 +384,33 @@ re_host (void)
if (host_ret) return host_ret; if (host_ret) return host_ret;
grist = g_strdup_printf ( grist = g_strdup_printf (
"(" /* HOST */ "("
HOST OPT_PORT "(" HOST_URL PORT ")|(" HOST ")"
")" ")"
); );
host_ret = make_re (grist, "re_host"); host_ret = make_re (grist, "re_host");
return host_ret; return host_ret;
} }
static GRegex *
re_host6 (void)
{
static GRegex *host6_ret;
char *grist;
if (host6_ret) return host6_ret;
grist = g_strdup_printf (
"("
"(" IPV6ADDR ")|(" "\\[" IPV6ADDR "\\]" PORT ")"
")"
);
host6_ret = make_re (grist, "re_host6");
return host6_ret;
}
/* URL description --- */ /* URL description --- */
#define SCHEME "(%s)" #define SCHEME "(%s)"
#define LPAR "\\(" #define LPAR "\\("
@ -524,7 +547,7 @@ re_email (void)
if (email_ret) return email_ret; if (email_ret) return email_ret;
grist = g_strdup_printf ( grist = g_strdup_printf (
"(" /* EMAIL */ "("
EMAIL EMAIL
")" ")"
); );
@ -560,7 +583,7 @@ re_nick (void)
if (nick_ret) return nick_ret; if (nick_ret) return nick_ret;
grist = g_strdup_printf ( grist = g_strdup_printf (
"(" /* NICK */ "("
NICK NICK
")" ")"
); );
@ -580,7 +603,7 @@ re_channel (void)
if (channel_ret) return channel_ret; if (channel_ret) return channel_ret;
grist = g_strdup_printf ( grist = g_strdup_printf (
"(" /* CHANNEL */ "("
CHANNEL CHANNEL
")" ")"
); );
@ -606,7 +629,7 @@ re_path (void)
if (path_ret) return path_ret; if (path_ret) return path_ret;
grist = g_strdup_printf ( grist = g_strdup_printf (
"(" /* FS_PATH */ "("
FS_PATH FS_PATH
")" ")"
); );

View File

@ -26,7 +26,8 @@ extern void *url_tree;
#define WORD_NICK 2 #define WORD_NICK 2
#define WORD_CHANNEL 3 #define WORD_CHANNEL 3
#define WORD_HOST 4 #define WORD_HOST 4
#define WORD_EMAIL 5 #define WORD_HOST6 5
#define WORD_EMAIL 6
/* anything >0 will be displayed as a link by gtk_xtext_motion_notify() */ /* anything >0 will be displayed as a link by gtk_xtext_motion_notify() */
#define WORD_DIALOG -1 #define WORD_DIALOG -1
#define WORD_PATH -2 #define WORD_PATH -2