From 98ce0b7076bdb60859dd888d0575e113c71f1e98 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Fri, 2 Nov 2012 12:27:39 +0000 Subject: [PATCH] fix tb style value parsing issue with escapes. SVN revision: 78859 --- legacy/evas/ChangeLog | 4 +++ legacy/evas/NEWS | 6 ++++ .../src/lib/canvas/evas_object_textblock.c | 32 +++++++++++++++++-- 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/legacy/evas/ChangeLog b/legacy/evas/ChangeLog index 2ea9935c1d..3bc62e3d22 100644 --- a/legacy/evas/ChangeLog +++ b/legacy/evas/ChangeLog @@ -1141,3 +1141,7 @@ * Fix clip bug while computing coordinates for Evas GL direct rendering optimization. +2012-11-02 Carsten Haitzler (The Rasterman) + + * Fix evas textblock tag parser to respect escaped spaces and + escaped single quotes. This fixes an edje text class restyling bug. diff --git a/legacy/evas/NEWS b/legacy/evas/NEWS index f5428a6ae3..3271bbe905 100644 --- a/legacy/evas/NEWS +++ b/legacy/evas/NEWS @@ -1,5 +1,11 @@ Evas 1.8.0 +Changes since Evas 1.7.1 +------------------------- + +Fixes: + * Fix evas textblock tag parser to respect escaped spaces and escaped single quotes + Changes since Evas 1.7.0: ------------------------- diff --git a/legacy/evas/src/lib/canvas/evas_object_textblock.c b/legacy/evas/src/lib/canvas/evas_object_textblock.c index 2775e75cf3..a9c0acc221 100644 --- a/legacy/evas/src/lib/canvas/evas_object_textblock.c +++ b/legacy/evas/src/lib/canvas/evas_object_textblock.c @@ -1684,20 +1684,48 @@ _format_param_parse(const char *item, const char **key, const char **val) { start = quote + 1; end = strchr(start, '\''); + while ((end) && (end > start) && (end[-1] == '\\')) + end = strchr(end + 1, '\''); } else { end = strchr(start, ' '); + while ((end) && (end > start) && (end[-1] == '\\')) + end = strchr(end + 1, ' '); } /* Null terminate before the spaces */ if (end) { - *val = eina_stringshare_add_length(start, end - start); + char *tmp = alloca(end - start + 1); + char *s, *d; + + for (d = tmp, s = (char *)start; s < end; s++) + { + if (*s != '\\') + { + *d = *s; + d++; + } + } + *d = 0; + *val = eina_stringshare_add(tmp); } else { - *val = eina_stringshare_add(start); + char *tmp = alloca(strlen(start) + 1); + char *s, *d; + + for (d = tmp, s = (char *)start; *s; s++) + { + if (*s != '\\') + { + *d = *s; + d++; + } + } + *d = 0; + *val = eina_stringshare_add(tmp); } }