diff --git a/ChangeLog b/ChangeLog index a8d459b90e..ac89338be6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2013-05-16 Tom Hacohen + + * Edje textblock: Fixed issue with quoted formats. + 2013-05-14 Jihoon Kim * Edje entry: return surrounding string until the start position of selection diff --git a/NEWS b/NEWS index 6d6c10894e..b2bfcb196f 100644 --- a/NEWS +++ b/NEWS @@ -270,3 +270,4 @@ Fixes: * Evas: Fix crash if app use native surface in wrong engine. * 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 + * Edje textblock: Fixed issue with quoted formats. diff --git a/src/lib/edje/edje_textblock_styles.c b/src/lib/edje/edje_textblock_styles.c index 52ea02fbaa..9b1efcdc04 100644 --- a/src/lib/edje/edje_textblock_styles.c +++ b/src/lib/edje/edje_textblock_styles.c @@ -25,44 +25,43 @@ _edje_format_param_parse(char *item, char **key, char **val) static char * _edje_format_parse(const char **s) { - char *item, *ds; - const char *p, *ss; + const char *p; const char *s1 = NULL; const char *s2 = NULL; + Eina_Bool quote = EINA_FALSE; p = *s; if ((!p) || (*p == 0)) return NULL; for (;;) { - if (!s1) - { - if (*p != ' ') s1 = p; - if (*p == 0) break; - } - else if (!s2) - { - if ((p > *s) && (p[-1] != '\\')) - { - if (*p == ' ') s2 = p; - } - if (*p == 0) s2 = p; - } - p++; - if (s1 && s2) - { - item = malloc(s2 - s1 + 1); - if (item) - { - for (ds = item, ss = s1; ss < s2; ss++, ds++) - { - if ((*ss == '\\') && (ss < (s2 - 1))) ss++; - *ds = *ss; - } - *ds = 0; - } - *s = s2; - return item; - } + if (!s1) + { + if (*p != ' ') s1 = p; + if (*p == 0) break; + } + else if (!s2) + { + if (*p == '\'') + { + quote = !quote; + } + + if ((p > *s) && (p[-1] != '\\') && (!quote)) + { + if (*p == ' ') s2 = p; + } + if (*p == 0) s2 = p; + } + p++; + if (s1 && s2 && (s2 > s1)) + { + size_t len = s2 - s1; + char *ret = malloc(len + 1); + memcpy(ret, s1, len); + ret[len] = '\0'; + *s = s2; + return ret; + } } *s = p; 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, " "); eina_strbuf_append(txt, item); } - free(item); + free(item); } if (tmp) eina_strbuf_free(tmp);