edje/edje_cc_parser - support [] markers for indexing values

This commit is contained in:
ChunEon Park 2013-06-04 14:30:07 +09:00
parent 5384b78110
commit 86f37578fa
1 changed files with 37 additions and 4 deletions

View 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);