hermet pushed a commit to branch master.
commit 86f37578faf74be6748ac1eb40ea5bd0da57ba1c
Author: ChunEon Park <[email protected]>
Date: Tue Jun 4 14:30:07 2013 +0900
edje/edje_cc_parser - support [] markers for indexing values
---
src/bin/edje/edje_cc_parse.c | 41 +++++++++++++++++++++++++++++++++++++----
1 file changed, 37 insertions(+), 4 deletions(-)
diff --git a/src/bin/edje/edje_cc_parse.c b/src/bin/edje/edje_cc_parse.c
index 59ce962..625e506 100644
--- a/src/bin/edje/edje_cc_parse.c
+++ b/src/bin/edje/edje_cc_parse.c
@@ -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(¶ms, token);
}
+ else if (do_indexes)
+ {
+ do_indexes++;
+ eina_array_push(¶ms, token);
+ }
else
{
stack_push(token);
--
------------------------------------------------------------------------------
How ServiceNow helps IT people transform IT departments:
1. A cloud service to automate IT design, transition and operations
2. Dashboards that offer high-level views of enterprise services
3. A single system of record for all IT processes
http://p.sf.net/sfu/servicenow-d2d-j