edje/edje_cc_parser - support [] markers for indexing values
authorChunEon Park <hermet@hermet.pe.kr>
Tue, 4 Jun 2013 05:30:07 +0000 (14:30 +0900)
committerChunEon Park <hermet@hermet.pe.kr>
Tue, 4 Jun 2013 05:30:07 +0000 (14:30 +0900)
src/bin/edje/edje_cc_parse.c

index 59ce962..625e506 100644 (file)
@@ -174,7 +174,6 @@ new_statement(void)
 {
    const char *id;
    New_Statement_Handler *sh;
-
    fill_object_statement_hashes();
    id = stack_id();
    sh = eina_hash_find(_new_statement_hash, id);
@@ -214,7 +213,7 @@ perform_math (char *input)
 static int
 isdelim(char c)
 {
-   const char *delims = "{},;:";
+   const char *delims = "{},;:[]";
    char *d;
 
    d = (char *)delims;
@@ -543,6 +542,7 @@ parse(char *data, off_t size)
    char *p, *end, *token;
    int delim = 0;
    int do_params = 0;
+   int do_indexes = 0;  // 0: none, 1: ready, 2: done
 
    DBG("Parsing input file");
 
@@ -565,12 +565,19 @@ parse(char *data, off_t size)
           }
         else if (delim)
           {
-             if (*token == ',' || *token == ':') do_params = 1;
+             if ((do_indexes == 2) && (*token != ']'))
+               {
+                  ERR("parse error %s:%i. %c marker before ] marker",
+                      file_in, line - 1, *token);
+                  err_show();
+                  exit(-1);
+               }
+             else if (*token == ',' || *token == ':') do_params = 1;
              else if (*token == '}')
                {
                   if (do_params)
                     {
-                       ERR("Parse error %s:%i. } marker before ; marker",
+                       ERR("parse error %s:%i. } marker before ; marker",
                            file_in, line - 1);
                        err_show();
                        exit(-1);
@@ -603,6 +610,27 @@ parse(char *data, off_t size)
                        exit(-1);
                     }
                }
+             else if (*token == '[')
+               {
+                  do_indexes = 1;
+               }
+             else if (*token == ']')
+               {
+                  if (do_indexes == 2)
+                    do_indexes = 0;
+                  else
+                    {
+                       if (do_indexes == 0)
+                         ERR("parse error %s:%i. ] marker before [ marker",
+                             file_in, line - 1);
+                       else
+                         ERR("parse error %s:%i. [?] empty bracket",
+                             file_in, line - 1);
+
+                       err_show();
+                       exit(-1);
+                    }
+               }
              free(token);
           }
         else
@@ -611,6 +639,11 @@ parse(char *data, off_t size)
                {
                   eina_array_push(&params, token);
                }
+             else if (do_indexes)
+               {
+                  do_indexes++;
+                  eina_array_push(&params, token);
+               }
              else
                {
                   stack_push(token);