forked from enlightenment/efl
Elm cnp: Use the standard text<->markup elm functions.
SVN revision: 67579
This commit is contained in:
parent
fd2da6be59
commit
1a2160bd29
|
@ -129,8 +129,6 @@ static int tmpinfo_free(Tmp_Info *tmp);
|
|||
static Eina_Bool _elm_cnp_init(void);
|
||||
static Eina_Bool selection_clear(void *udata __UNUSED__, int type, void *event);
|
||||
static Eina_Bool selection_notify(void *udata __UNUSED__, int type, void *event);
|
||||
static char *remove_tags(const char *p, int *len);
|
||||
static char *mark_up(const char *start, int inlen, int *lenp);
|
||||
|
||||
static Eina_Bool targets_converter(char *target, void *data, int size, void **data_ret, int *size_ret, Ecore_X_Atom *ttype, int *typesize);
|
||||
static Eina_Bool text_converter(char *target, void *data, int size, void **data_ret, int *size_ret, Ecore_X_Atom *ttype, int *typesize);
|
||||
|
@ -809,7 +807,7 @@ notify_handler_text(Cnp_Selection *sel, Ecore_X_Event_Selection_Notify *notify)
|
|||
}
|
||||
|
||||
cnp_debug("Notify handler text %d %d %p\n", data->format,data->length, data->data);
|
||||
str = mark_up((char *)data->data, data->length, NULL);
|
||||
str = _elm_util_text_to_mkup((const char *) data->data);
|
||||
cnp_debug("String is %s (from %s)\n", str, data->data);
|
||||
_elm_entry_entry_paste(sel->requestwidget, str);
|
||||
free(str);
|
||||
|
@ -1032,7 +1030,8 @@ text_converter(char *target __UNUSED__, void *data, int size, void **data_ret, i
|
|||
if ((sel->format & ELM_SEL_FORMAT_MARKUP) ||
|
||||
(sel->format & ELM_SEL_FORMAT_HTML))
|
||||
{
|
||||
*data_ret = remove_tags(sel->selbuf, size_ret);
|
||||
*data_ret = _elm_util_mkup_to_text(sel->selbuf);
|
||||
if (size_ret) *size_ret = strlen(*data_ret);
|
||||
}
|
||||
else if (sel->format & ELM_SEL_FORMAT_TEXT)
|
||||
{
|
||||
|
@ -1092,136 +1091,6 @@ pasteimage_append(char *file, Evas_Object *entry)
|
|||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
static char *
|
||||
remove_tags(const char *p, int *len)
|
||||
{
|
||||
char *q,*ret;
|
||||
int i;
|
||||
if (!p) return NULL;
|
||||
|
||||
q = malloc(strlen(p) + 1);
|
||||
if (!q) return NULL;
|
||||
ret = q;
|
||||
|
||||
while (*p)
|
||||
{
|
||||
Eina_Bool esc = EINA_TRUE;
|
||||
const char *x;
|
||||
switch (p[0])
|
||||
{
|
||||
case '<':
|
||||
x = strchr(p + 3, '>');
|
||||
if (!x)
|
||||
{
|
||||
strcpy(q, p);
|
||||
if (len) *len = strlen(ret);
|
||||
return ret;
|
||||
}
|
||||
if (memcmp(p + 1, "br", 2) && memcmp(p + 1, "ps", 2))
|
||||
{
|
||||
strncpy(q, p, x - p + 1);
|
||||
p = x + 1;
|
||||
break;
|
||||
}
|
||||
i = x - p - 1;
|
||||
if (p[i] == '/') i--;
|
||||
for (; i > 2; i++)
|
||||
{
|
||||
if (p[i] != ' ')
|
||||
{
|
||||
esc = EINA_FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!esc)
|
||||
{
|
||||
strncpy(q, p, x - p + 1);
|
||||
p = x + 1;
|
||||
break;
|
||||
}
|
||||
if (p[1] == 'b')
|
||||
*q++ = '\n';
|
||||
else
|
||||
{
|
||||
strcpy(q, _PARAGRAPH_SEPARATOR);
|
||||
q += sizeof(_PARAGRAPH_SEPARATOR) - 1;
|
||||
}
|
||||
p = x + 1;
|
||||
break;
|
||||
case '&':
|
||||
for (i = 3 ; i < N_ESCAPES ; i++)
|
||||
{
|
||||
if (strncmp(p, escapes[i].escape, strlen(escapes[i].escape)))
|
||||
continue;
|
||||
p += strlen(escapes[i].escape);
|
||||
strcpy(q, escapes[i].value);
|
||||
q += strlen(escapes[i].value);
|
||||
break;
|
||||
}
|
||||
if (i == N_ESCAPES) *q ++= '&';
|
||||
break;
|
||||
default:
|
||||
*q++ = *p++;
|
||||
}
|
||||
}
|
||||
*q = 0;
|
||||
if (len) *len = q - ret;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Mark up */
|
||||
static char *
|
||||
mark_up(const char *start, int inlen, int *lenp)
|
||||
{
|
||||
int l, i;
|
||||
const char *p;
|
||||
char *q, *ret;
|
||||
const char *endp = NULL;
|
||||
|
||||
if (!start) return NULL;
|
||||
if (inlen >= 0) endp = start + inlen;
|
||||
/* First pass: Count characters */
|
||||
for (l = 0, p = start; ((!endp) || (p < endp)) && (*p); p++)
|
||||
{
|
||||
for (i = 0 ; i < N_ESCAPES ; i ++)
|
||||
{
|
||||
if (*p == escapes[i].value[0])
|
||||
{
|
||||
if (!strncmp(p, escapes[i].value, strlen(escapes[i].value)))
|
||||
l += strlen(escapes[i].escape);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i == N_ESCAPES) l++;
|
||||
}
|
||||
|
||||
q = ret = malloc(l + 1);
|
||||
|
||||
/* Second pass: Change characters */
|
||||
for (p = start; ((!endp) || (p < endp)) && (*p); )
|
||||
{
|
||||
for (i = 0; i < N_ESCAPES; i++)
|
||||
{
|
||||
if (*p == escapes[i].value[0])
|
||||
{
|
||||
if (!strncmp(p, escapes[i].value, strlen(escapes[i].value)))
|
||||
{
|
||||
strcpy(q, escapes[i].escape);
|
||||
q += strlen(escapes[i].escape);
|
||||
p += strlen(escapes[i].value);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i == N_ESCAPES) *q++ = *p++;
|
||||
}
|
||||
*q = 0;
|
||||
|
||||
if (lenp) *lenp = l;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
static Eina_Bool
|
||||
_dnd_enter(void *data __UNUSED__, int etype __UNUSED__, void *ev)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue