hermet pushed a commit to branch master. http://git.enlightenment.org/tools/enventor.git/commit/?id=7521f45a1e039afb69b0932e41e320200e973ca0
commit 7521f45a1e039afb69b0932e41e320200e973ca0 Author: ChunEon Park <her...@hermet.pe.kr> Date: Tue Jun 30 15:50:25 2015 +0900 edc_parser: support new syntax keywords. desc, swallow, group, spacer, text, image, rect.. --- src/lib/edc_parser.c | 173 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 103 insertions(+), 70 deletions(-) diff --git a/src/lib/edc_parser.c b/src/lib/edc_parser.c index b4d96db..cc864ea 100644 --- a/src/lib/edc_parser.c +++ b/src/lib/edc_parser.c @@ -125,19 +125,21 @@ end: static void cur_state_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED) { - const char *quot = QUOT_UTF8; - const char *description = "description"; - const char *part = "part"; - const char *parts = "parts"; - const char *group = "group"; - const int quot_len = QUOT_UTF8_LEN; - const int description_len = 11; //strlen("description"); +#define PART_SYNTAX_CNT 7 + + const char *GROUP = "group"; + const char *PARTS = "parts"; + const char *PART[PART_SYNTAX_CNT] = + { "part", "image", "text", "swallow", "rect", "group", "spacer" }; + const char *DESC[2] = { "desc", "description" }; + const int DESC_LEN[2] = { 4, 11 }; cur_name_td *td = data; char *utf8 = td->utf8; int cur_pos = td->cur_pos; char *p = utf8; char *end = utf8 + cur_pos; + int i; int bracket = 0; const char *group_name = NULL; @@ -158,14 +160,15 @@ cur_state_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED) while (p && p <= end) { //Skip "" range - if (!strncmp(p, quot, quot_len)) + if (!strncmp(p, QUOT_UTF8, QUOT_UTF8_LEN)) { - p += quot_len; - p = strstr(p, quot); + p += QUOT_UTF8_LEN; + p = strstr(p, QUOT_UTF8); if (!p) goto end; - p += quot_len; + p += QUOT_UTF8_LEN; } + //Enter one depth into Bracket. if (*p == '{') { bracket++; @@ -186,7 +189,6 @@ cur_state_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED) continue; } } - //Check whether outside of description or part or group if ((*p == '}') && (p < end)) { @@ -200,74 +202,105 @@ cur_state_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED) continue; } //Check Part in - if (strncmp(p, parts, strlen(parts))) + if (bracket == 3) { - if (!strncmp(p, part, strlen(part))) + if (strncmp(p, PARTS, strlen(PARTS))) { - p += strlen(part); - char *name_begin = strstr(p, quot); + int part_idx = -1; + int part_len; + + //part ? image ? swallow ? text ? rect ? + for (i = 0; i < PART_SYNTAX_CNT; i++) + { + part_len = strlen(PART[i]); + if (!strncmp(p, PART[i], part_len)) + { + part_idx = i; + break; + } + } + + //we got a part! + if (part_idx != -1) + { + p += part_len; + char *name_begin = strstr(p, QUOT_UTF8); + if (!name_begin) goto end; + name_begin += QUOT_UTF8_LEN; + p = name_begin; + char *name_end = strstr(p, QUOT_UTF8); + if (!name_end) goto end; + part_name = name_begin; + part_name_len = name_end - name_begin; + p = name_end + QUOT_UTF8_LEN; + bracket++; + continue; + } + } + } + //Check Description in + if (bracket == 4) + { + //description? or desc? + int desc_idx = -1; + if (!strncmp(p, DESC[0], DESC_LEN[0])) desc_idx = 0; + else if (!strncmp(p, DESC[1], DESC_LEN[1])) desc_idx = 1; + + //we got a description! + if (desc_idx != -1) + { + p += DESC_LEN[desc_idx]; + char *name_begin = strstr(p, QUOT_UTF8); if (!name_begin) goto end; - name_begin += quot_len; + name_begin += QUOT_UTF8_LEN; p = name_begin; - char *name_end = strstr(p, quot); + char *name_end = strstr(p, QUOT_UTF8); if (!name_end) goto end; - part_name = name_begin; - part_name_len = name_end - name_begin; - p = name_end + quot_len; + desc_name = name_begin; + desc_name_len = name_end - name_begin; + p = name_end + QUOT_UTF8_LEN; + value = p; bracket++; + + char *value_end = strchr(value, ';'); + char *value_buf = NULL; + while (value < value_end) + { + if (isdigit(*value) || *value == '.') + { + value_len = value_end - value; + value_buf = (char *)calloc(1, value_len); + memcpy(value_buf, value, value_len); + break; + } + value++; + } + if (value_buf) + { + value_convert = atof(value_buf); + free(value_buf); + } continue; } - } - if (!strncmp(p, description, description_len)) - { - p += description_len; - char *name_begin = strstr(p, quot); - if (!name_begin) goto end; - name_begin += quot_len; - p = name_begin; - char *name_end = strstr(p, quot); - if (!name_end) goto end; - desc_name = name_begin; - desc_name_len = name_end - name_begin; - p = name_end + quot_len; - value = p; - bracket++; - - char *value_end = strchr(value, ';'); - char *value_buf = NULL; - while (value < value_end) - { - if (isdigit(*value) || *value == '.') - { - value_len = value_end - value; - value_buf = (char *)calloc(1, value_len); - memcpy(value_buf, value, value_len); - break; - } - value++; - } - if (value_buf) - { - value_convert = atof(value_buf); - free(value_buf); - } - continue; - } + } //Check Group in - if (!strncmp(p, group, strlen(group))) + if (bracket == 1) { - p += strlen(group); - char *name_begin = strstr(p, quot); - if (!name_begin) goto end; - name_begin += quot_len; - p = name_begin; - char *name_end = strstr(p, quot); - if (!name_end) goto end; - group_name = name_begin; - group_name_len = name_end - name_begin; - p = name_end + quot_len; - bracket++; - continue; + if (!strncmp(p, GROUP, strlen(GROUP))) + { + p += strlen(GROUP); + char *name_begin = strstr(p, QUOT_UTF8); + if (!name_begin) goto end; + name_begin += QUOT_UTF8_LEN; + p = name_begin; + char *name_end = strstr(p, QUOT_UTF8); + if (!name_end) goto end; + group_name = name_begin; + group_name_len = name_end - name_begin; + p = name_end + QUOT_UTF8_LEN; + bracket++; + continue; + } } p++; } --