enventor - implementing group switching feature.
This commit is contained in:
parent
bb6f0cd5e8
commit
83504f88e5
|
@ -19,8 +19,8 @@ typedef struct cur_name_thread_data_s
|
||||||
parser_data *pd;
|
parser_data *pd;
|
||||||
char *utf8;
|
char *utf8;
|
||||||
int cur_pos;
|
int cur_pos;
|
||||||
const char *part_name;
|
|
||||||
const char *group_name;
|
const char *group_name;
|
||||||
|
const char *part_name;
|
||||||
void (*cb)(void *data, Eina_Stringshare *part_name,
|
void (*cb)(void *data, Eina_Stringshare *part_name,
|
||||||
Eina_Stringshare *group_name);
|
Eina_Stringshare *group_name);
|
||||||
void *cb_data;
|
void *cb_data;
|
||||||
|
@ -278,24 +278,27 @@ parser_markup_escape(parser_data *pd EINA_UNUSED, const char *str)
|
||||||
static void
|
static void
|
||||||
part_name_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
|
part_name_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
|
||||||
{
|
{
|
||||||
cur_name_td *td = data;
|
const char *quot = QUOT;
|
||||||
|
const char *part = "part";
|
||||||
|
const char *parts = "parts";
|
||||||
|
const char *group = "group";
|
||||||
|
const int quot_len = QUOT_LEN;
|
||||||
|
const int part_len = 4; //strlen("part");
|
||||||
|
const int parts_len = 5; //strlen("parts");
|
||||||
|
const int group_len = 5; //strlen("group");
|
||||||
|
|
||||||
|
cur_name_td *td = data;
|
||||||
char *utf8 = td->utf8;
|
char *utf8 = td->utf8;
|
||||||
int cur_pos = td->cur_pos;
|
int cur_pos = td->cur_pos;
|
||||||
|
|
||||||
char *p = utf8;
|
char *p = utf8;
|
||||||
char *end = utf8 + cur_pos;
|
char *end = utf8 + cur_pos;
|
||||||
|
|
||||||
const char *quot = QUOT;
|
|
||||||
int quot_len = QUOT_LEN;
|
|
||||||
const char *part = "part";
|
|
||||||
int part_len = 4; //strlen("part");
|
|
||||||
const char *parts = "parts";
|
|
||||||
int parts_len = 5; //strlen("parts");
|
|
||||||
|
|
||||||
int bracket = 0;
|
int bracket = 0;
|
||||||
|
const char *group_name = NULL;
|
||||||
const char *part_name = NULL;
|
const char *part_name = NULL;
|
||||||
|
int group_name_len = 0;
|
||||||
int part_name_len = 0;
|
int part_name_len = 0;
|
||||||
|
Eina_Bool group_in = EINA_FALSE;
|
||||||
Eina_Bool part_in = EINA_FALSE;
|
Eina_Bool part_in = EINA_FALSE;
|
||||||
|
|
||||||
while (p <= end)
|
while (p <= end)
|
||||||
|
@ -309,20 +312,33 @@ part_name_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
|
||||||
p += quot_len;
|
p += quot_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (part_in && (*p == '{'))
|
if (*p == '{')
|
||||||
{
|
{
|
||||||
bracket++;
|
bracket++;
|
||||||
p++;
|
p++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (part_in && (*p == '}') && (p < end))
|
//Check whether outside of part or group
|
||||||
|
if ((*p == '}') && (p < end))
|
||||||
{
|
{
|
||||||
bracket--;
|
bracket--;
|
||||||
p++;
|
p++;
|
||||||
if (bracket == 0) part_in = EINA_FALSE;
|
|
||||||
|
if (bracket == 1)
|
||||||
|
{
|
||||||
|
group_name = NULL;
|
||||||
|
group_in = EINA_FALSE;
|
||||||
|
}
|
||||||
|
else if (bracket == 3)
|
||||||
|
{
|
||||||
|
part_name = NULL;
|
||||||
|
part_in = EINA_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
//Check Part in
|
||||||
if (strncmp(p, parts, parts_len))
|
if (strncmp(p, parts, parts_len))
|
||||||
{
|
{
|
||||||
if (!strncmp(p, part, part_len))
|
if (!strncmp(p, part, part_len))
|
||||||
|
@ -337,23 +353,34 @@ part_name_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
|
||||||
part_name = name_begin;
|
part_name = name_begin;
|
||||||
part_name_len = name_end - name_begin;
|
part_name_len = name_end - name_begin;
|
||||||
p = name_end + quot_len;
|
p = name_end + quot_len;
|
||||||
bracket = 1;
|
|
||||||
part_in = EINA_TRUE;
|
part_in = EINA_TRUE;
|
||||||
|
bracket++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//Check Group in
|
||||||
|
if (!strncmp(p, group, group_len))
|
||||||
|
{
|
||||||
|
p += group_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;
|
||||||
|
group_name = name_begin;
|
||||||
|
group_name_len = name_end - name_begin;
|
||||||
|
p = name_end + quot_len;
|
||||||
|
group_in = EINA_TRUE;
|
||||||
|
bracket++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
p++;
|
p++;
|
||||||
}
|
}
|
||||||
if (part_name)
|
if (part_name)
|
||||||
{
|
|
||||||
if (bracket == 0)
|
|
||||||
{
|
|
||||||
part_name = NULL;
|
|
||||||
goto end;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
part_name = eina_stringshare_add_length(part_name, part_name_len);
|
part_name = eina_stringshare_add_length(part_name, part_name_len);
|
||||||
}
|
if (group_name)
|
||||||
|
group_name = eina_stringshare_add_length(group_name, group_name_len);
|
||||||
|
|
||||||
end:
|
end:
|
||||||
if (utf8)
|
if (utf8)
|
||||||
|
@ -362,6 +389,7 @@ end:
|
||||||
td->utf8 = NULL;
|
td->utf8 = NULL;
|
||||||
}
|
}
|
||||||
td->part_name = part_name;
|
td->part_name = part_name;
|
||||||
|
td->group_name = group_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Reference in New Issue