Edje textblock: Fixed issue with quoted formats. (Fixes T113).

This commit is contained in:
Tom Hacohen 2013-05-16 11:04:01 +01:00
parent 97acb71175
commit 20c0394ba2
3 changed files with 36 additions and 32 deletions

View File

@ -1,3 +1,7 @@
2013-05-16 Tom Hacohen
* Edje textblock: Fixed issue with quoted formats.
2013-05-14 Jihoon Kim 2013-05-14 Jihoon Kim
* Edje entry: return surrounding string until the start position of selection * Edje entry: return surrounding string until the start position of selection

1
NEWS
View File

@ -270,3 +270,4 @@ Fixes:
* Evas: Fix crash if app use native surface in wrong engine. * Evas: Fix crash if app use native surface in wrong engine.
* Edje entry: return surrounding string until the start position of selection * Edje entry: return surrounding string until the start position of selection
* Ecore-imf: fix crash when ecore_imf_context_del is called in ecore_imf_context_input_panel_callback_call * Ecore-imf: fix crash when ecore_imf_context_del is called in ecore_imf_context_input_panel_callback_call
* Edje textblock: Fixed issue with quoted formats.

View File

@ -25,44 +25,43 @@ _edje_format_param_parse(char *item, char **key, char **val)
static char * static char *
_edje_format_parse(const char **s) _edje_format_parse(const char **s)
{ {
char *item, *ds; const char *p;
const char *p, *ss;
const char *s1 = NULL; const char *s1 = NULL;
const char *s2 = NULL; const char *s2 = NULL;
Eina_Bool quote = EINA_FALSE;
p = *s; p = *s;
if ((!p) || (*p == 0)) return NULL; if ((!p) || (*p == 0)) return NULL;
for (;;) for (;;)
{ {
if (!s1) if (!s1)
{ {
if (*p != ' ') s1 = p; if (*p != ' ') s1 = p;
if (*p == 0) break; if (*p == 0) break;
} }
else if (!s2) else if (!s2)
{ {
if ((p > *s) && (p[-1] != '\\')) if (*p == '\'')
{ {
if (*p == ' ') s2 = p; quote = !quote;
} }
if (*p == 0) s2 = p;
} if ((p > *s) && (p[-1] != '\\') && (!quote))
p++; {
if (s1 && s2) if (*p == ' ') s2 = p;
{ }
item = malloc(s2 - s1 + 1); if (*p == 0) s2 = p;
if (item) }
{ p++;
for (ds = item, ss = s1; ss < s2; ss++, ds++) if (s1 && s2 && (s2 > s1))
{ {
if ((*ss == '\\') && (ss < (s2 - 1))) ss++; size_t len = s2 - s1;
*ds = *ss; char *ret = malloc(len + 1);
} memcpy(ret, s1, len);
*ds = 0; ret[len] = '\0';
} *s = s2;
*s = s2; return ret;
return item; }
}
} }
*s = p; *s = p;
return NULL; return NULL;
@ -142,7 +141,7 @@ _edje_format_reparse(Edje_File *edf, const char *str, Edje_Style_Tag **tag_ret)
if (eina_strbuf_length_get(txt)) eina_strbuf_append(txt, " "); if (eina_strbuf_length_get(txt)) eina_strbuf_append(txt, " ");
eina_strbuf_append(txt, item); eina_strbuf_append(txt, item);
} }
free(item); free(item);
} }
if (tmp) if (tmp)
eina_strbuf_free(tmp); eina_strbuf_free(tmp);