forked from enlightenment/enventor
Edc parser: improve cur_state_thread_blocking function.
Added recognize "parts" block. This make easyest to understand cases like this: keyword "image" is part type name or it is image description. @fix T2964
This commit is contained in:
parent
47134c410d
commit
ec8e664873
|
@ -145,6 +145,8 @@ cur_state_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
|
||||||
char *p = utf8;
|
char *p = utf8;
|
||||||
char *end = utf8 + cur_pos;
|
char *end = utf8 + cur_pos;
|
||||||
int i;
|
int i;
|
||||||
|
Eina_Bool inside_parts = EINA_FALSE;
|
||||||
|
|
||||||
|
|
||||||
int bracket = 0;
|
int bracket = 0;
|
||||||
const char *group_name = NULL;
|
const char *group_name = NULL;
|
||||||
|
@ -201,47 +203,56 @@ cur_state_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
|
||||||
p++;
|
p++;
|
||||||
|
|
||||||
if (bracket == 1) group_name = NULL;
|
if (bracket == 1) group_name = NULL;
|
||||||
|
else if (bracket == 2 && inside_parts == EINA_TRUE) inside_parts = EINA_FALSE;
|
||||||
else if (bracket == 3) part_name = NULL;
|
else if (bracket == 3) part_name = NULL;
|
||||||
else if (bracket == 4) desc_name = NULL;
|
else if (bracket == 4) desc_name = NULL;
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
//Check Part in
|
//check block "Parts" in
|
||||||
if (bracket == 3)
|
if (bracket == 2)
|
||||||
{
|
{
|
||||||
if (strncmp(p, PARTS, strlen(PARTS)))
|
if (!strncmp(p, PARTS, strlen(PARTS)))
|
||||||
{
|
{
|
||||||
int part_idx = -1;
|
inside_parts = EINA_TRUE;
|
||||||
int part_len;
|
p = strstr(p, "{");
|
||||||
|
if (!p) goto end;
|
||||||
//part ? image ? swallow ? text ? rect ?
|
continue;
|
||||||
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 Part in
|
||||||
|
if (bracket == 3 && inside_parts == EINA_TRUE)
|
||||||
|
{
|
||||||
|
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
|
//Check Description in
|
||||||
if (bracket == 4)
|
if (bracket == 4)
|
||||||
|
|
Loading…
Reference in New Issue