From: Hyoyoung Chang <hyoyoung.chang@samsung.com>

Subject: [E-devel] [patch] elm_cnp_helper - adding paragraph separator(<ps>) handling
Date: Fri, 05 Aug 2011 13:09:41 +0900

Dear developers.

This patch is about elm_cnp_helper.
When using elm_entry, sometimes newline isn't copied.
That's because <ps> tag. It's represent of 'paragraph separator'.
(Other case is using <br>. It works well)
I just adding <ps> handling for separated paragraph.


SVN revision: 62153
This commit is contained in:
Hyoyoung Chang 2011-08-05 23:03:55 +00:00 committed by Mike Blumenkrantz
parent 7460ae79e8
commit 79dfcb5d6a
1 changed files with 29 additions and 17 deletions

View File

@ -78,7 +78,7 @@ struct _Cnp_Selection
struct _Escape struct _Escape
{ {
const char *escape; const char *escape;
const char value; const char *value;
}; };
struct _Tmp_Info struct _Tmp_Info
@ -147,16 +147,19 @@ static int vcard_receive(Cnp_Selection *sed, Ecore_X_Event_Selection_Notify *not
static Eina_Bool pasteimage_append(char *file, Evas_Object *entry); static Eina_Bool pasteimage_append(char *file, Evas_Object *entry);
#define _PARAGRAPH_SEPARATOR "\xE2\x80\xA9"
/* Optimisation: Turn this into a 256 byte table: /* Optimisation: Turn this into a 256 byte table:
* then can lookup in one index, not N checks */ * then can lookup in one index, not N checks */
static const Escape escapes[] = { static const Escape escapes[] = {
{ "<br>", '\n' }, { "<ps>", _PARAGRAPH_SEPARATOR },
{ "<\t>", '\t' }, { "<br>", "\n" },
{ "gt;", '>' }, { "<\t>", "\t" },
{ "lt;", '<' }, { "gt;", ">" },
{ "amp;", '&' }, { "lt;", "<" },
{ "quot;", '\'' }, { "amp;", "&" },
{ "dquot;", '"' } { "quot;", "\'" },
{ "dquot;", "\"" }
}; };
#define N_ESCAPES ((int)(sizeof(escapes) / sizeof(escapes[0]))) #define N_ESCAPES ((int)(sizeof(escapes) / sizeof(escapes[0])))
@ -1035,7 +1038,7 @@ remove_tags(const char *p, int *len)
int i; int i;
if (!p) return NULL; if (!p) return NULL;
q = malloc(strlen(p) + 1); q = malloc(strlen(p)+1);
if (!q) return NULL; if (!q) return NULL;
ret = q; ret = q;
@ -1047,6 +1050,11 @@ remove_tags(const char *p, int *len)
if ((p[1] == 'b') && (p[2] == 'r') && if ((p[1] == 'b') && (p[2] == 'r') &&
((p[3] == ' ') || (p[3] == '/') || (p[3] == '>'))) ((p[3] == ' ') || (p[3] == '/') || (p[3] == '>')))
*q++ = '\n'; *q++ = '\n';
else if ((p[1] == 'p') && (p[2] == 's') && (p[3] == '>'))
{
strcpy(q, _PARAGRAPH_SEPARATOR);
q += (sizeof(_PARAGRAPH_SEPARATOR)-1);
}
while ((*p) && (*p != '>')) p++; while ((*p) && (*p != '>')) p++;
p++; p++;
} }
@ -1058,8 +1066,8 @@ remove_tags(const char *p, int *len)
if (!strncmp(p,escapes[i].escape, strlen(escapes[i].escape))) if (!strncmp(p,escapes[i].escape, strlen(escapes[i].escape)))
{ {
p += strlen(escapes[i].escape); p += strlen(escapes[i].escape);
*q = escapes[i].value; strcpy(q, escapes[i].value);
q++; q += strlen(escapes[i].value);
break; break;
} }
} }
@ -1087,9 +1095,10 @@ mark_up(const char *start, int inlen, int *lenp)
{ {
for (i = 0 ; i < N_ESCAPES ; i ++) for (i = 0 ; i < N_ESCAPES ; i ++)
{ {
if (*p == escapes[i].value) if (*p == escapes[i].value[0])
{ {
l += strlen(escapes[i].escape); if (!strncmp(p, escapes[i].value, strlen(escapes[i].value)))
l += strlen(escapes[i].escape);
break; break;
} }
} }
@ -1103,11 +1112,14 @@ mark_up(const char *start, int inlen, int *lenp)
{ {
for (i = 0; i < N_ESCAPES; i++) for (i = 0; i < N_ESCAPES; i++)
{ {
if (*p == escapes[i].value) if (*p == escapes[i].value[0])
{ {
strcpy(q, escapes[i].escape); if (!strncmp(p, escapes[i].value, strlen(escapes[i].value)))
q += strlen(escapes[i].escape); {
p ++; strcpy(q, escapes[i].escape);
q += strlen(escapes[i].escape);
p += strlen(escapes[i].value);
}
break; break;
} }
} }