cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=7a3cd879d2c63a76834620ead93e0b45ba196b32

commit 7a3cd879d2c63a76834620ead93e0b45ba196b32
Author: Andrii Kroitor <[email protected]>
Date:   Mon Dec 23 09:47:51 2013 +0900

    edje: edje_edit - fix .edc file generation
    
    Reviewers: cedric, seoz
    
    Reviewed By: cedric
    
    CC: reutskiy.v.v, cedric
    
    Differential Revision: https://phab.enlightenment.org/D401
    
    Signed-off-by: Cedric BAIL <[email protected]>
---
 src/bin/edje/edje_cc_parse.c |   3 ++
 src/lib/edje/edje_edit.c     | 107 ++++++++++++++++++++++++++++++-------------
 2 files changed, 78 insertions(+), 32 deletions(-)

diff --git a/src/bin/edje/edje_cc_parse.c b/src/bin/edje/edje_cc_parse.c
index f2ee699..4b58295 100644
--- a/src/bin/edje/edje_cc_parse.c
+++ b/src/bin/edje/edje_cc_parse.c
@@ -380,6 +380,9 @@ next_token(char *p, char *end, char **new_p, int *delim)
         is_escaped = 0;
         p = tok;
 
+        /* Note: if you change special chars list here make the same changes in
+         * _edje_generate_source_of_style function
+         */
         while (*p)
           {
              if ((*p == '\"') && (!is_escaped))
diff --git a/src/lib/edje/edje_edit.c b/src/lib/edje/edje_edit.c
index 1f7cddb..2bfd2e3 100644
--- a/src/lib/edje/edje_edit.c
+++ b/src/lib/edje/edje_edit.c
@@ -7015,7 +7015,7 @@ edje_edit_script_error_list_get(Evas_Object *obj)
 #define BUF_APPENDF(FMT, ...) \
    ret &= eina_strbuf_append_printf(buf, FMT, ##__VA_ARGS__)
 
-static const char *types[] = {"NONE", "RECT", "TEXT", "IMAGE", "SWALLOW", 
"TEXTBLOCK", "GRADIENT", "GROUP", "BOX", "TABLE", "EXTERNAL", "SPACER"};
+static const char *types[] = {"NONE", "RECT", "TEXT", "IMAGE", "SWALLOW", 
"TEXTBLOCK", "GRADIENT", "GROUP", "BOX", "TABLE", "EXTERNAL", "PROXY", 
"SPACER"};
 static const char *effects[] = {"NONE", "PLAIN", "OUTLINE", "SOFT_OUTLINE", 
"SHADOW", "SOFT_SHADOW", "OUTLINE_SHADOW", "OUTLINE_SOFT_SHADOW ", "FAR_SHADOW 
", "FAR_SOFT_SHADOW", "GLOW"};
 static const char *prefers[] = {"NONE", "VERTICAL", "HORIZONTAL", "BOTH"};
 
@@ -7046,21 +7046,57 @@ _edje_generate_source_of_style(Edje * ed, const char 
*name, Eina_Strbuf *buf)
    Edje_Style_Tag *t;
    Eina_Bool ret = EINA_TRUE;
 
+   int len, i;
+   #define ESCAPE_VAL(VAL) \
+   for (i = 0, len = strlen(VAL); i < len; i++) \
+      switch(VAL[i]) \
+      { \
+       case '\n': \
+         { \
+            BUF_APPENDF("%s", "\\n"); \
+            break; \
+         } \
+       case '\t': \
+         { \
+            BUF_APPENDF("%s", "\\t"); \
+            break; \
+         } \
+       case '"': \
+         { \
+            BUF_APPENDF("%s", "\\\""); \
+            break; \
+         } \
+       case '\\': \
+         { \
+            BUF_APPENDF("%s", "\\\\"); \
+            break; \
+         } \
+       default: BUF_APPENDF("%c", VAL[i]); \
+      }
+
    EINA_LIST_FOREACH(ed->file->styles, l, s)
      if (!strcmp(s->name, name))
        {
         t = s->tags ? s->tags->data : NULL;
         BUF_APPENDF(I1 "style { name:\"%s\";\n", s->name);
         if (t && t->value)
-          BUF_APPENDF(I2 "base: \"%s\";\n", t->value);
+      {
+         BUF_APPEND(I2 "base: \"");
+         ESCAPE_VAL(t->value);
+         BUF_APPEND("\";\n");
+      }
 
         EINA_LIST_FOREACH(s->tags, ll, t)
           if (ll->prev && t && t->value)
-            BUF_APPENDF(I2 "tag: \"%s\" \"%s\";\n", t->key,
-                               t->value);
+        {
+           BUF_APPENDF(I2 "tag: \"%s\" \"", t->key);
+           ESCAPE_VAL(t->value);
+           BUF_APPEND("\";\n");
+        }
         BUF_APPEND(I1 "}\n");
         return ret;
        }
+   #undef ESCAPE_VAL
    return EINA_FALSE;
 }
 
@@ -7352,34 +7388,41 @@ _edje_generate_source_of_state(Evas_Object *obj, const 
char *part, const char *s
 
        //Fill
 
-       BUF_APPEND(I5"fill {\n");
-       if (!img->image.fill.smooth)
-         BUF_APPEND(I6"smooth: 0;\n");
-        //TODO Support spread
-
-       if (img->image.fill.pos_rel_x || img->image.fill.pos_rel_y ||
-            img->image.fill.pos_abs_x || img->image.fill.pos_abs_y)
-         {
-               BUF_APPEND(I6"origin {\n");
-               if (img->image.fill.pos_rel_x || img->image.fill.pos_rel_y)
-                 BUF_APPENDF(I7"relative: %g %g;\n", 
TO_DOUBLE(img->image.fill.pos_rel_x), TO_DOUBLE(img->image.fill.pos_rel_y));
-               if (img->image.fill.pos_abs_x || img->image.fill.pos_abs_y)
-                 BUF_APPENDF(I7"offset: %d %d;\n", img->image.fill.pos_abs_x, 
img->image.fill.pos_abs_y);
-               BUF_APPEND(I6"}\n");
-          }
-
-       if (TO_DOUBLE(img->image.fill.rel_x) != 1.0 || 
TO_DOUBLE(img->image.fill.rel_y) != 1.0 ||
-            img->image.fill.abs_x || img->image.fill.abs_y)
-         {
-               BUF_APPEND(I6"size {\n");
-               if (img->image.fill.rel_x != 1.0 || img->image.fill.rel_y != 
1.0)
-                 BUF_APPENDF(I7"relative: %g %g;\n", 
TO_DOUBLE(img->image.fill.rel_x), TO_DOUBLE(img->image.fill.rel_y));
-               if (img->image.fill.abs_x || img->image.fill.abs_y)
-                 BUF_APPENDF(I7"offset: %d %d;\n", img->image.fill.abs_x, 
img->image.fill.abs_y);
-               BUF_APPEND(I6"}\n");
-          }
-
-       BUF_APPEND(I5"}\n");
+   if (!img->image.fill.smooth || img->image.fill.pos_rel_x ||
+       img->image.fill.pos_rel_y || img->image.fill.pos_abs_x ||
+       img->image.fill.pos_abs_y || TO_DOUBLE(img->image.fill.rel_x) != 1.0 ||
+       TO_DOUBLE(img->image.fill.rel_y) != 1.0 ||
+       img->image.fill.abs_x || img->image.fill.abs_y)
+      {
+         BUF_APPEND(I5"fill {\n");
+         if (!img->image.fill.smooth)
+           BUF_APPEND(I6"smooth: 0;\n");
+              //TODO Support spread
+
+         if (img->image.fill.pos_rel_x || img->image.fill.pos_rel_y ||
+                  img->image.fill.pos_abs_x || img->image.fill.pos_abs_y)
+           {
+               BUF_APPEND(I6"origin {\n");
+               if (img->image.fill.pos_rel_x || img->image.fill.pos_rel_y)
+                 BUF_APPENDF(I7"relative: %g %g;\n", 
TO_DOUBLE(img->image.fill.pos_rel_x), TO_DOUBLE(img->image.fill.pos_rel_y));
+               if (img->image.fill.pos_abs_x || img->image.fill.pos_abs_y)
+                 BUF_APPENDF(I7"offset: %d %d;\n", img->image.fill.pos_abs_x, 
img->image.fill.pos_abs_y);
+               BUF_APPEND(I6"}\n");
+           }
+
+         if (TO_DOUBLE(img->image.fill.rel_x) != 1.0 || 
TO_DOUBLE(img->image.fill.rel_y) != 1.0 ||
+                  img->image.fill.abs_x || img->image.fill.abs_y)
+           {
+               BUF_APPEND(I6"size {\n");
+               if (img->image.fill.rel_x != 1.0 || img->image.fill.rel_y != 
1.0)
+                 BUF_APPENDF(I7"relative: %g %g;\n", 
TO_DOUBLE(img->image.fill.rel_x), TO_DOUBLE(img->image.fill.rel_y));
+               if (img->image.fill.abs_x || img->image.fill.abs_y)
+                 BUF_APPENDF(I7"offset: %d %d;\n", img->image.fill.abs_x, 
img->image.fill.abs_y);
+               BUF_APPEND(I6"}\n");
+           }
+
+         BUF_APPEND(I5"}\n");
+      }
      }
 
    if (rp->part->type == EDJE_PART_TYPE_PROXY)

-- 


Reply via email to