discomfitor pushed a commit to branch master.

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

commit a84f19beb7b2382c77030292c2022f67bab7095a
Author: Mike Blumenkrantz <[email protected]>
Date:   Fri May 9 15:54:57 2014 -0400

    redo lazEDC parsing a bit to fix desc.state omission
---
 src/bin/edje/edje_cc.h          |  2 ++
 src/bin/edje/edje_cc_handlers.c | 60 +++++++++++++++++++++++++++++++++++++----
 src/bin/edje/edje_cc_parse.c    |  5 ++--
 3 files changed, 59 insertions(+), 8 deletions(-)

diff --git a/src/bin/edje/edje_cc.h b/src/bin/edje/edje_cc.h
index 7c56d7d..4c03ffb 100644
--- a/src/bin/edje/edje_cc.h
+++ b/src/bin/edje/edje_cc.h
@@ -288,4 +288,6 @@ extern int                    threads;
 extern int                   anotate;
 extern Eina_Bool current_group_inherit;
 
+extern int had_quote;
+
 #endif
diff --git a/src/bin/edje/edje_cc_handlers.c b/src/bin/edje/edje_cc_handlers.c
index 82783a2..8c8dd52 100644
--- a/src/bin/edje/edje_cc_handlers.c
+++ b/src/bin/edje/edje_cc_handlers.c
@@ -34,6 +34,7 @@
 #include <fcntl.h>
 #include <sys/mman.h>
 #include <unistd.h>
+#include <ctype.h>
 
 #include "edje_cc.h"
 
@@ -11341,6 +11342,7 @@ edje_cc_handlers_wildcard(void)
           {
              Eina_Bool ret;
 
+             if (!had_quote) return EINA_FALSE;
              free((void*)current_part->name);
              current_part->name = token;
              ret = _part_name_check();
@@ -11350,18 +11352,64 @@ edje_cc_handlers_wildcard(void)
           }
         if (current_desc && ((!strcmp(last, "desc")) || (!strcmp(last, 
"description"))))
           {
-             if ((!current_desc->state.name) || 
strcmp(current_desc->state.name, token))
+             double st;
+             char *end;
+
+             if (had_quote)
+               {
+                  if ((!current_desc->state.name) || 
strcmp(current_desc->state.name, token))
+                    {
+                       free((char*)current_desc->state.name);
+                       current_desc->state.name = token;
+                       _part_description_state_update(current_desc);
+                    }
+                    stack_pop_quick(EINA_FALSE, current_desc->state.name != 
token);
+                    return EINA_TRUE;
+               }
+
+             if (!isdigit(token[0])) return EINA_FALSE;
+             st = strtod(token, &end);
+             if ((end && end[0]) || (fabs(current_desc->state.value) > 
DBL_EPSILON))
+               return EINA_FALSE;
+             if (current_desc == current_part->default_desc)
+               {
+                  ob_collections_group_parts_part_description();
+                  current_desc->state.name = strdup("default");
+               }
+             else
                {
-                  free((char*)current_desc->state.name);
-                  current_desc->state.name = token;
-                  _part_description_state_update(current_desc);
+                  unsigned int j;
+
+                  for (j = 0; j < current_part->other.desc_count; j++)
+                    {
+                       /* check for inherited descriptions */
+                       Edje_Part_Description_Common *ed = 
current_part->other.desc[j];
+
+                       if (((!!ed->state.name) != 
(!!current_desc->state.name)) ||
+                           (ed->state.name && strcmp(ed->state.name, 
current_desc->state.name)) ||
+                           (fabs(ed->state.value - st) > DBL_EPSILON)) 
continue;
+                       current_desc = ed;
+                       break;
+                    }
+                  /* not found */
+                  if (j == current_part->other.desc_count)
+                    {
+                       void *name = NULL;
+
+                       if (current_desc->state.name)
+                         name = strdup(current_desc->state.name);
+                       ob_collections_group_parts_part_description();
+                       current_desc->state.name = name;
+                    }
                }
-             stack_pop_quick(EINA_FALSE, current_desc->state.name != token);
+             current_desc->state.value = st;
+             stack_pop_quick(EINA_FALSE, EINA_TRUE);
              return EINA_TRUE;
           }
      }
    if (current_program && ((!strcmp(last, "program")) || (!strcmp(last, 
"sequence"))))
      {
+        if (!had_quote) return EINA_FALSE;
         _program_sequence_check();
         _program_name(token);
         stack_pop_quick(EINA_FALSE, EINA_FALSE);
@@ -11369,12 +11417,14 @@ edje_cc_handlers_wildcard(void)
      }
    if (current_de && (!strcmp(last, "group")))
      {
+        if (!had_quote) return EINA_FALSE;
         _group_name(token);
         stack_pop_quick(EINA_FALSE, EINA_FALSE);
         return EINA_TRUE;
      }
    if (edje_file->styles && (!strcmp(last, "style")))
      {
+        if (!had_quote) return EINA_FALSE;
          _style_name(token);
          stack_pop_quick(EINA_FALSE, EINA_FALSE);
          return EINA_TRUE;
diff --git a/src/bin/edje/edje_cc_parse.c b/src/bin/edje/edje_cc_parse.c
index 6c66530..af45a18 100644
--- a/src/bin/edje/edje_cc_parse.c
+++ b/src/bin/edje/edje_cc_parse.c
@@ -58,7 +58,7 @@ static int strstrip(const char *in, char *out, size_t size);
 int        line = 0;
 Eina_List *stack = NULL;
 Eina_Array params;
-static int had_quote = 0;
+int had_quote = 0;
 
 static char  file_buf[4096];
 static int   did_wildcard = 0;
@@ -193,8 +193,7 @@ new_object(void)
      }
    else
      {
-        if (had_quote)
-          did_wildcard = edje_cc_handlers_wildcard();
+        did_wildcard = edje_cc_handlers_wildcard();
         if (!did_wildcard)
           {
              sh = eina_hash_find(_new_statement_hash, id);

-- 


Reply via email to