refactor url handling.
there are still some left to be done, will come to it later. SVN revision: 77653
This commit is contained in:
parent
5bfed09e13
commit
2a0e0fd2b4
|
@ -112,19 +112,17 @@ _activate_link(Evas_Object *obj)
|
|||
if (!config) return;
|
||||
if (!sd->link.string) return;
|
||||
if (link_is_url(sd->link.string))
|
||||
url = EINA_TRUE;
|
||||
else if ((!strncasecmp(sd->link.string, "file://", 7)) ||
|
||||
(!strncasecmp(sd->link.string, "/", 1)))
|
||||
{
|
||||
path = sd->link.string;
|
||||
if (!strncasecmp(sd->link.string, "file://", 7)) path = path + 7;
|
||||
}
|
||||
if (!strncasecmp(sd->link.string, "file://", 7))
|
||||
// TODO: decode string: %XX -> char
|
||||
path = sd->link.string + sizeof("file://") - 1;
|
||||
else
|
||||
{
|
||||
const char *at = strchr(sd->link.string, '@');
|
||||
if (at && (strchr(at + 1, '.')))
|
||||
email = EINA_TRUE;
|
||||
url = EINA_TRUE;
|
||||
}
|
||||
else if (sd->link.string[0] == '/')
|
||||
path = sd->link.string;
|
||||
else if (link_is_email(sd->link.string))
|
||||
email = EINA_TRUE;
|
||||
|
||||
s = eina_str_escape(sd->link.string);
|
||||
if (!s) return;
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#include "private.h"
|
||||
#include <Elementary.h>
|
||||
#include "termio.h"
|
||||
#include "utils.h"
|
||||
|
||||
static Eina_Bool
|
||||
coord_back(int *x, int *y, int w, int h __UNUSED__)
|
||||
|
@ -56,10 +57,7 @@ _termio_link_find(Evas_Object *obj, int cx, int cy, int *x1r, int *y1r, int *x2r
|
|||
if (!s) break;
|
||||
if (goback)
|
||||
{
|
||||
if ((!strncasecmp(s, "http://", 7))||
|
||||
(!strncasecmp(s, "https://", 8)) ||
|
||||
(!strncasecmp(s, "file://", 7)) ||
|
||||
(!strncasecmp(s, "ftp://", 6)))
|
||||
if (link_is_protocol(s))
|
||||
{
|
||||
goback = EINA_FALSE;
|
||||
coord_back(&x1, &y1, w, h);
|
||||
|
@ -87,7 +85,7 @@ _termio_link_find(Evas_Object *obj, int cx, int cy, int *x1r, int *y1r, int *x2r
|
|||
else if (s[0] == '<') endmatch = '>';
|
||||
if ((!strncasecmp((s + 1), "www.", 4)) ||
|
||||
(!strncasecmp((s + 1), "ftp.", 4)) ||
|
||||
(!strncasecmp((s + 1), "/", 1)))
|
||||
(s[1] == '/'))
|
||||
{
|
||||
goback = EINA_FALSE;
|
||||
coord_forward(&x1, &y1, w, h);
|
||||
|
@ -160,17 +158,9 @@ _termio_link_find(Evas_Object *obj, int cx, int cy, int *x1r, int *y1r, int *x2r
|
|||
}
|
||||
if ((!isspace(s[0])) && (len > 1))
|
||||
{
|
||||
const char *at = strchr(s, '@');
|
||||
|
||||
if ((at && (strchr(at + 1, '.'))) ||
|
||||
(!strncasecmp(s, "http://", 7))||
|
||||
(!strncasecmp(s, "https://", 8)) ||
|
||||
(!strncasecmp(s, "ftp://", 6)) ||
|
||||
(!strncasecmp(s, "file://", 7)) ||
|
||||
(!strncasecmp(s, "www.", 4)) ||
|
||||
(!strncasecmp(s, "ftp.", 4)) ||
|
||||
(!strncasecmp(s, "/", 1))
|
||||
)
|
||||
if (link_is_email(s) ||
|
||||
link_is_url(s) ||
|
||||
(s[0] == '/'))
|
||||
{
|
||||
if (x1r) *x1r = x1;
|
||||
if (y1r) *y1r = y1;
|
||||
|
|
|
@ -52,13 +52,31 @@ theme_auto_reload_enable(Evas_Object *edje)
|
|||
}
|
||||
|
||||
Eina_Bool
|
||||
link_is_url(const char *str)
|
||||
link_is_protocol(const char *str)
|
||||
{
|
||||
if ((!strncasecmp(str, "http://", 7))||
|
||||
(!strncasecmp(str, "https://", 8)) ||
|
||||
(!strncasecmp(str, "ftp://", 6)) ||
|
||||
(!strncasecmp(str, "file://", 7)))
|
||||
return EINA_TRUE;
|
||||
return EINA_FALSE;
|
||||
}
|
||||
|
||||
Eina_Bool
|
||||
link_is_url(const char *str)
|
||||
{
|
||||
if (link_is_protocol(str) ||
|
||||
(!strncasecmp(str, "www.", 4)) ||
|
||||
(!strncasecmp(str, "ftp.", 4)))
|
||||
return EINA_TRUE;
|
||||
return EINA_FALSE;
|
||||
}
|
||||
|
||||
Eina_Bool
|
||||
link_is_email(const char *str)
|
||||
{
|
||||
const char *at = strchr(str, '@');
|
||||
if (at && strchr(at + 1, '.'))
|
||||
return EINA_TRUE;
|
||||
return EINA_FALSE;
|
||||
}
|
||||
|
|
|
@ -7,6 +7,9 @@
|
|||
Eina_Bool theme_apply(Evas_Object *edje, const Config *config, const char *group);
|
||||
void theme_reload(Evas_Object *edje);
|
||||
void theme_auto_reload_enable(Evas_Object *edje);
|
||||
|
||||
Eina_Bool link_is_protocol(const char *str);
|
||||
Eina_Bool link_is_url(const char *str);
|
||||
Eina_Bool link_is_email(const char *str);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue