move link_is_* to termiolink.c
This commit is contained in:
parent
7bfef215b0
commit
259722a3f3
|
@ -9,6 +9,7 @@
|
||||||
#include "media.h"
|
#include "media.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
#include "termiolink.h"
|
||||||
|
|
||||||
typedef struct _Media Media;
|
typedef struct _Media Media;
|
||||||
|
|
||||||
|
|
|
@ -42,8 +42,55 @@ _local_path_get(const Evas_Object *obj, const char *relpath)
|
||||||
return _cwd_path_get(obj, relpath);
|
return _cwd_path_get(obj, relpath);
|
||||||
}
|
}
|
||||||
|
|
||||||
static Eina_Bool
|
Eina_Bool
|
||||||
_is_file(const char *str)
|
link_is_protocol(const char *str)
|
||||||
|
{
|
||||||
|
const char *p = str;
|
||||||
|
int c = *p;
|
||||||
|
|
||||||
|
if (!isalpha(c))
|
||||||
|
return EINA_FALSE;
|
||||||
|
|
||||||
|
/* Try to follow RFC3986 a bit
|
||||||
|
* URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
|
||||||
|
* hier-part = "//" authority path-abempty
|
||||||
|
* [...] other stuff not taken into account
|
||||||
|
* scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
|
||||||
|
*/
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
p++;
|
||||||
|
c = *p;
|
||||||
|
}
|
||||||
|
while (isalpha(c) || (c == '.') || (c == '-') || (c == '+'));
|
||||||
|
|
||||||
|
return (p[0] == ':') && (p[1] == '/') && (p[2] == '/');
|
||||||
|
}
|
||||||
|
|
||||||
|
Eina_Bool
|
||||||
|
link_is_url(const char *str)
|
||||||
|
{
|
||||||
|
if (link_is_protocol(str) ||
|
||||||
|
casestartswith(str, "www.") ||
|
||||||
|
casestartswith(str, "ftp."))
|
||||||
|
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;
|
||||||
|
if (casestartswith(str, "mailto:"))
|
||||||
|
return EINA_TRUE;
|
||||||
|
return EINA_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
Eina_Bool
|
||||||
|
link_is_file(const char *str)
|
||||||
{
|
{
|
||||||
switch (str[0])
|
switch (str[0])
|
||||||
{
|
{
|
||||||
|
@ -402,7 +449,7 @@ termio_link_find(const Evas_Object *obj, int cx, int cy,
|
||||||
out:
|
out:
|
||||||
if (sb.len)
|
if (sb.len)
|
||||||
{
|
{
|
||||||
Eina_Bool is_file = _is_file(sb.buf);
|
Eina_Bool is_file = link_is_file(sb.buf);
|
||||||
|
|
||||||
if (is_file ||
|
if (is_file ||
|
||||||
link_is_email(sb.buf) ||
|
link_is_email(sb.buf) ||
|
||||||
|
|
|
@ -2,5 +2,10 @@
|
||||||
#define _TERMIO_LINK_H__ 1
|
#define _TERMIO_LINK_H__ 1
|
||||||
|
|
||||||
char *termio_link_find(const Evas_Object *obj, int cx, int cy, int *x1r, int *y1r, int *x2r, int *y2r);
|
char *termio_link_find(const Evas_Object *obj, int cx, int cy, int *x1r, int *y1r, int *x2r, int *y2r);
|
||||||
|
Eina_Bool link_is_protocol(const char *str);
|
||||||
|
Eina_Bool link_is_file(const char *str);
|
||||||
|
Eina_Bool link_is_url(const char *str);
|
||||||
|
Eina_Bool link_is_email(const char *str);
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -180,50 +180,3 @@ utils_need_scale_wizard(void)
|
||||||
|
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
Eina_Bool
|
|
||||||
link_is_protocol(const char *str)
|
|
||||||
{
|
|
||||||
const char *p = str;
|
|
||||||
int c = *p;
|
|
||||||
|
|
||||||
if (!isalpha(c))
|
|
||||||
return EINA_FALSE;
|
|
||||||
|
|
||||||
/* Try to follow RFC3986 a bit
|
|
||||||
* URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
|
|
||||||
* hier-part = "//" authority path-abempty
|
|
||||||
* [...] other stuff not taken into account
|
|
||||||
* scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
|
|
||||||
*/
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
p++;
|
|
||||||
c = *p;
|
|
||||||
}
|
|
||||||
while (isalpha(c) || (c == '.') || (c == '-') || (c == '+'));
|
|
||||||
|
|
||||||
return (p[0] == ':') && (p[1] == '/') && (p[2] == '/');
|
|
||||||
}
|
|
||||||
|
|
||||||
Eina_Bool
|
|
||||||
link_is_url(const char *str)
|
|
||||||
{
|
|
||||||
if (link_is_protocol(str) ||
|
|
||||||
casestartswith(str, "www.") ||
|
|
||||||
casestartswith(str, "ftp."))
|
|
||||||
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;
|
|
||||||
if (casestartswith(str, "mailto:"))
|
|
||||||
return EINA_TRUE;
|
|
||||||
return EINA_FALSE;
|
|
||||||
}
|
|
||||||
|
|
|
@ -14,10 +14,6 @@ const char *theme_path_get(const char *name);
|
||||||
Eina_Bool homedir_get(char *buf, size_t size);
|
Eina_Bool homedir_get(char *buf, size_t size);
|
||||||
Eina_Bool utils_need_scale_wizard(void);
|
Eina_Bool utils_need_scale_wizard(void);
|
||||||
|
|
||||||
Eina_Bool link_is_protocol(const char *str);
|
|
||||||
Eina_Bool link_is_url(const char *str);
|
|
||||||
Eina_Bool link_is_email(const char *str);
|
|
||||||
|
|
||||||
#define casestartswith(str, constref) \
|
#define casestartswith(str, constref) \
|
||||||
(!strncasecmp(str, constref, sizeof(constref) - 1))
|
(!strncasecmp(str, constref, sizeof(constref) - 1))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue