parser - initialize on a different thread.

since the parser initialization task is getting bigger and bigger,
do it with a separated thread to reduce enventor launching time.
This commit is contained in:
ChunEon Park 2014-03-16 18:29:58 +09:00
parent 1e43635a9b
commit 07e824bb79
5 changed files with 314 additions and 274 deletions

View File

@ -5,6 +5,7 @@ struct parser_s
{
Eina_Inlist *attrs;
Ecore_Thread *thread;
Ecore_Thread *init_thread;
};
typedef struct parser_attr_s
@ -27,253 +28,20 @@ typedef struct cur_name_thread_data_s
void *cb_data;
} cur_name_td;
typedef struct type_init_thread_data_s
{
Eina_Inlist *attrs;
parser_data *pd;
} type_init_td;
void
parser_cancel(parser_data *pd)
{
if (pd->thread) ecore_thread_cancel(pd->thread);
}
static void
parser_type_init(parser_data *pd)
{
parser_attr *attr;
//FIXME: construct from the configuration file.
//Type: Constant
Eina_List *types = NULL;
types = eina_list_append(types, eina_stringshare_add("RECT"));
types = eina_list_append(types, eina_stringshare_add("TEXT"));
types = eina_list_append(types, eina_stringshare_add("IMAGE"));
types = eina_list_append(types, eina_stringshare_add("SWALLOW"));
types = eina_list_append(types, eina_stringshare_add("TEXTBLOCK"));
types = eina_list_append(types, eina_stringshare_add("GRADIENT"));
types = eina_list_append(types, eina_stringshare_add("GROUP"));
types = eina_list_append(types, eina_stringshare_add("BOX"));
types = eina_list_append(types, eina_stringshare_add("TABLE"));
types = eina_list_append(types, eina_stringshare_add("EXTERNAL"));
types = eina_list_append(types, eina_stringshare_add("PROXY"));
types = eina_list_append(types, eina_stringshare_add("SPACER"));
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("type:");
attr->value.strs = types;
attr->value.type = ATTR_VALUE_CONSTANT;
pd->attrs = eina_inlist_append(pd->attrs, (Eina_Inlist *) attr);
Eina_List *comps = NULL;
comps = eina_list_append(comps, eina_stringshare_add("RAW"));
comps = eina_list_append(comps, eina_stringshare_add("USER"));
comps = eina_list_append(comps, eina_stringshare_add("COMP"));
comps = eina_list_append(comps, eina_stringshare_add("LOSSY"));
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("image:");
attr->value.strs = comps;
attr->value.type = ATTR_VALUE_CONSTANT;
pd->attrs = eina_inlist_append(pd->attrs, (Eina_Inlist *) attr);
Eina_List *trans = NULL;
trans = eina_list_append(trans, eina_stringshare_add("LINEAR"));
trans = eina_list_append(trans, eina_stringshare_add("ACCELERATE"));
trans = eina_list_append(trans, eina_stringshare_add("DECELERATE"));
trans = eina_list_append(trans, eina_stringshare_add("SINUSOIDAL"));
trans = eina_list_append(trans, eina_stringshare_add("ACCELERATE_FACTOR"));
trans = eina_list_append(trans, eina_stringshare_add("DECELERATE_FACTOR"));
trans = eina_list_append(trans, eina_stringshare_add("SINUSOIDAL_FACTOR"));
trans = eina_list_append(trans, eina_stringshare_add("DIVISOR_INTERP"));
trans = eina_list_append(trans, eina_stringshare_add("BOUNCE"));
trans = eina_list_append(trans, eina_stringshare_add("SPRING"));
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("transition:");
attr->value.strs = trans;
attr->value.type = ATTR_VALUE_CONSTANT;
pd->attrs = eina_inlist_append(pd->attrs, (Eina_Inlist *) attr);
Eina_List *aspect = NULL;
aspect = eina_list_append(aspect, eina_stringshare_add("NONE"));
aspect = eina_list_append(aspect, eina_stringshare_add("VERTICAL"));
aspect = eina_list_append(aspect, eina_stringshare_add("HORIZONTAL"));
aspect = eina_list_append(aspect, eina_stringshare_add("BOTH"));
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("aspect_preference:");
attr->value.strs = aspect;
attr->value.type = ATTR_VALUE_CONSTANT;
pd->attrs = eina_inlist_append(pd->attrs, (Eina_Inlist *) attr);
Eina_List *effect = NULL;
effect = eina_list_append(effect, eina_stringshare_add("NONE"));
effect = eina_list_append(effect, eina_stringshare_add("PLAIN"));
effect = eina_list_append(effect, eina_stringshare_add("OUTLINE"));
effect = eina_list_append(effect, eina_stringshare_add("SOFT_OUTLINE"));
effect = eina_list_append(effect, eina_stringshare_add("SHADOW"));
effect = eina_list_append(effect, eina_stringshare_add("SOFT_SHADOW"));
effect = eina_list_append(effect, eina_stringshare_add("OUTLINE_SHADOW"));
effect = eina_list_append(effect, eina_stringshare_add("OUTLINE_SOFT_SHADOW"));
effect = eina_list_append(effect, eina_stringshare_add("FAR_SHADOW"));
effect = eina_list_append(effect, eina_stringshare_add("FAR_SOFT_SHADOW"));
effect = eina_list_append(effect, eina_stringshare_add("GLOW"));
/*
Eina_List *action = NULL;
action = eina_list_append(action, eina_stringshare_add("NONE"));
action = eina_list_append(action, eina_stringshare_add("STATE_SET"));
action = eina_list_append(action, eina_stringshare_add("ACTION_STOP"));
action = eina_list_append(action, eina_stringshare_add("SIGNAL_EMIT"));
action = eina_list_append(action, eina_stringshare_add("DRAG_VAL_SET"));
action = eina_list_append(action, eina_stringshare_add("DRAG_VAL_STEP"));
action = eina_list_append(action, eina_stringshare_add("DRAG_VAL_PAGE"));
action = eina_list_append(action, eina_stringshare_add("SCRIPT"));
action = eina_list_append(action, eina_stringshare_add("FOCUS_SET"));
action = eina_list_append(action, eina_stringshare_add("FOCUS_OBJECT"));
action = eina_list_append(action, eina_stringshare_add("PARAM_COPY"));
action = eina_list_append(action, eina_stringshare_add("PARAM_SET"));
action = eina_list_append(action, eina_stringshare_add("PLAY_SAMPLE"));
action = eina_list_append(action, eina_stringshare_add("PLAY_TONE"));
action = eina_list_append(action, eina_stringshare_add("PHYSICS_IMPULSE"));
action = eina_list_append(action, eina_stringshare_add("PHYSICS_TORQUE_IMPULSE"));
action = eina_list_append(action, eina_stringshare_add("PHYSICS_FORCE"));
action = eina_list_append(action, eina_stringshare_add("PHYSICS_TORQUE"));
action = eina_list_append(action, eina_stringshare_add("PHYSICS_FORCES_CLEAR"));
action = eina_list_append(action, eina_stringshare_add("PHYSICS_VEL_SET"));
action = eina_list_append(action, eina_stringshare_add("PHYSICS_ANG_VEL_SET"));
action = eina_list_append(action, eina_stringshare_add("PHYSICS_STOP"));
action = eina_list_append(action, eina_stringshare_add("PHYSICS_ROT_SET"));
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("action:");
attr->value.strs = action;
attr->value.type = ATTR_VALUE_CONSTANT;
pd->attrs = eina_inlist_append(pd->attrs, (Eina_Inlist *) attr);
*/
//Type: Integer
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("color:");
attr->value.min = 0;
attr->value.max = 255;
attr->value.type = ATTR_VALUE_INTEGER;
pd->attrs = eina_inlist_append(pd->attrs, (Eina_Inlist *) attr);
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("scale:");
attr->value.min = 0;
attr->value.max = 1;
attr->value.type = ATTR_VALUE_INTEGER;
pd->attrs = eina_inlist_append(pd->attrs, (Eina_Inlist *) attr);
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("fixed:");
attr->value.min = 0;
attr->value.max = 1;
attr->value.type = ATTR_VALUE_INTEGER;
pd->attrs = eina_inlist_append(pd->attrs, (Eina_Inlist *) attr);
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("size:");
attr->value.min = 1;
attr->value.max = 255;
attr->value.type = ATTR_VALUE_INTEGER;
pd->attrs = eina_inlist_append(pd->attrs, (Eina_Inlist *) attr);
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("min:");
attr->value.min = 0;
attr->value.max = 1000;
attr->value.type = ATTR_VALUE_INTEGER;
pd->attrs = eina_inlist_append(pd->attrs, (Eina_Inlist *) attr);
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("max:");
attr->value.min = 0;
attr->value.max = 1000;
attr->value.type = ATTR_VALUE_INTEGER;
pd->attrs = eina_inlist_append(pd->attrs, (Eina_Inlist *) attr);
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("mouse_events:");
attr->value.min = 0;
attr->value.max = 1000;
attr->value.type = ATTR_VALUE_INTEGER;
pd->attrs = eina_inlist_append(pd->attrs, (Eina_Inlist *) attr);
//Type: Float
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("relative:");
attr->value.min = 0.0;
attr->value.max = 1;
attr->value.type = ATTR_VALUE_FLOAT;
pd->attrs = eina_inlist_append(pd->attrs, (Eina_Inlist *) attr);
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("aspect:");
attr->value.min = 0.0;
attr->value.max = 1.0;
attr->value.type = ATTR_VALUE_FLOAT;
pd->attrs = eina_inlist_append(pd->attrs, (Eina_Inlist *) attr);
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("align");
attr->value.min = 0.0;
attr->value.max = 1.0;
attr->value.type = ATTR_VALUE_FLOAT;
pd->attrs = eina_inlist_append(pd->attrs, (Eina_Inlist *) attr);
//Type: Part
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("target:");
attr->instring = EINA_TRUE;
attr->value.type = ATTR_VALUE_PART;
pd->attrs = eina_inlist_append(pd->attrs, (Eina_Inlist *) attr);
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("to:");
attr->instring = EINA_TRUE;
attr->value.type = ATTR_VALUE_PART;
pd->attrs = eina_inlist_append(pd->attrs, (Eina_Inlist *) attr);
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("source:");
attr->instring = EINA_TRUE;
attr->value.type = ATTR_VALUE_PART;
pd->attrs = eina_inlist_append(pd->attrs, (Eina_Inlist *) attr);
//Type: State
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("STATE_SET");
attr->instring = EINA_TRUE;
attr->value.type = ATTR_VALUE_STATE;
attr->value.program = EINA_TRUE;
pd->attrs = eina_inlist_append(pd->attrs, (Eina_Inlist *) attr);
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("inherit:");
attr->instring = EINA_TRUE;
attr->value.type = ATTR_VALUE_STATE;
pd->attrs = eina_inlist_append(pd->attrs, (Eina_Inlist *) attr);
//Type: Image
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("normal:");
attr->instring = EINA_TRUE;
attr->value.type = ATTR_VALUE_IMAGE;
pd->attrs = eina_inlist_append(pd->attrs, (Eina_Inlist *) attr);
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("tween:");
attr->instring = EINA_TRUE;
attr->value.type = ATTR_VALUE_IMAGE;
pd->attrs = eina_inlist_append(pd->attrs, (Eina_Inlist *) attr);
//Type: Program
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("after:");
attr->instring = EINA_TRUE;
attr->value.type = ATTR_VALUE_PROGRAM;
pd->attrs = eina_inlist_append(pd->attrs, (Eina_Inlist *) attr);
}
char *parser_name_get(parser_data *pd EINA_UNUSED, const char *cur)
char *
parser_name_get(parser_data *pd EINA_UNUSED, const char *cur)
{
if (!cur) return NULL;
@ -329,35 +97,6 @@ parser_attribute_get(parser_data *pd, const char *text, const char *cur)
return NULL;
}
parser_data *
parser_init()
{
parser_data *pd = calloc(1, sizeof(parser_data));
parser_type_init(pd);
return pd;
}
void
parser_term(parser_data *pd)
{
if (pd->thread) ecore_thread_cancel(pd->thread);
parser_attr *attr;
Eina_Stringshare *str;
while(pd->attrs)
{
attr = EINA_INLIST_CONTAINER_GET(pd->attrs, parser_attr);
pd->attrs = eina_inlist_remove(pd->attrs, pd->attrs);
eina_stringshare_del(attr->keyword);
EINA_LIST_FREE(attr->value.strs, str) eina_stringshare_del(str);
free(attr);
}
free(pd);
}
const char *
parser_markup_escape(parser_data *pd EINA_UNUSED, const char *str)
{
@ -561,6 +300,264 @@ cur_name_thread_cancel(void *data, Ecore_Thread *thread EINA_UNUSED)
free(td);
}
static void
type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
{
type_init_td *td = data;
parser_attr *attr;
//FIXME: construct from the configuration file.
//Type: Constant
Eina_List *types = NULL;
types = eina_list_append(types, eina_stringshare_add("RECT"));
types = eina_list_append(types, eina_stringshare_add("TEXT"));
types = eina_list_append(types, eina_stringshare_add("IMAGE"));
types = eina_list_append(types, eina_stringshare_add("SWALLOW"));
types = eina_list_append(types, eina_stringshare_add("TEXTBLOCK"));
types = eina_list_append(types, eina_stringshare_add("GRADIENT"));
types = eina_list_append(types, eina_stringshare_add("GROUP"));
types = eina_list_append(types, eina_stringshare_add("BOX"));
types = eina_list_append(types, eina_stringshare_add("TABLE"));
types = eina_list_append(types, eina_stringshare_add("EXTERNAL"));
types = eina_list_append(types, eina_stringshare_add("PROXY"));
types = eina_list_append(types, eina_stringshare_add("SPACER"));
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("type:");
attr->value.strs = types;
attr->value.type = ATTR_VALUE_CONSTANT;
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
Eina_List *comps = NULL;
comps = eina_list_append(comps, eina_stringshare_add("RAW"));
comps = eina_list_append(comps, eina_stringshare_add("USER"));
comps = eina_list_append(comps, eina_stringshare_add("COMP"));
comps = eina_list_append(comps, eina_stringshare_add("LOSSY"));
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("image:");
attr->value.strs = comps;
attr->value.type = ATTR_VALUE_CONSTANT;
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
Eina_List *trans = NULL;
trans = eina_list_append(trans, eina_stringshare_add("LINEAR"));
trans = eina_list_append(trans, eina_stringshare_add("ACCELERATE"));
trans = eina_list_append(trans, eina_stringshare_add("DECELERATE"));
trans = eina_list_append(trans, eina_stringshare_add("SINUSOIDAL"));
trans = eina_list_append(trans, eina_stringshare_add("ACCELERATE_FACTOR"));
trans = eina_list_append(trans, eina_stringshare_add("DECELERATE_FACTOR"));
trans = eina_list_append(trans, eina_stringshare_add("SINUSOIDAL_FACTOR"));
trans = eina_list_append(trans, eina_stringshare_add("DIVISOR_INTERP"));
trans = eina_list_append(trans, eina_stringshare_add("BOUNCE"));
trans = eina_list_append(trans, eina_stringshare_add("SPRING"));
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("transition:");
attr->value.strs = trans;
attr->value.type = ATTR_VALUE_CONSTANT;
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
Eina_List *aspect = NULL;
aspect = eina_list_append(aspect, eina_stringshare_add("NONE"));
aspect = eina_list_append(aspect, eina_stringshare_add("VERTICAL"));
aspect = eina_list_append(aspect, eina_stringshare_add("HORIZONTAL"));
aspect = eina_list_append(aspect, eina_stringshare_add("BOTH"));
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("aspect_preference:");
attr->value.strs = aspect;
attr->value.type = ATTR_VALUE_CONSTANT;
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
Eina_List *effect = NULL;
effect = eina_list_append(effect, eina_stringshare_add("NONE"));
effect = eina_list_append(effect, eina_stringshare_add("PLAIN"));
effect = eina_list_append(effect, eina_stringshare_add("OUTLINE"));
effect = eina_list_append(effect, eina_stringshare_add("SOFT_OUTLINE"));
effect = eina_list_append(effect, eina_stringshare_add("SHADOW"));
effect = eina_list_append(effect, eina_stringshare_add("SOFT_SHADOW"));
effect = eina_list_append(effect, eina_stringshare_add("OUTLINE_SHADOW"));
effect = eina_list_append(effect, eina_stringshare_add("OUTLINE_SOFT_SHADOW"));
effect = eina_list_append(effect, eina_stringshare_add("FAR_SHADOW"));
effect = eina_list_append(effect, eina_stringshare_add("FAR_SOFT_SHADOW"));
effect = eina_list_append(effect, eina_stringshare_add("GLOW"));
/*
Eina_List *action = NULL;
action = eina_list_append(action, eina_stringshare_add("NONE"));
action = eina_list_append(action, eina_stringshare_add("STATE_SET"));
action = eina_list_append(action, eina_stringshare_add("ACTION_STOP"));
action = eina_list_append(action, eina_stringshare_add("SIGNAL_EMIT"));
action = eina_list_append(action, eina_stringshare_add("DRAG_VAL_SET"));
action = eina_list_append(action, eina_stringshare_add("DRAG_VAL_STEP"));
action = eina_list_append(action, eina_stringshare_add("DRAG_VAL_PAGE"));
action = eina_list_append(action, eina_stringshare_add("SCRIPT"));
action = eina_list_append(action, eina_stringshare_add("FOCUS_SET"));
action = eina_list_append(action, eina_stringshare_add("FOCUS_OBJECT"));
action = eina_list_append(action, eina_stringshare_add("PARAM_COPY"));
action = eina_list_append(action, eina_stringshare_add("PARAM_SET"));
action = eina_list_append(action, eina_stringshare_add("PLAY_SAMPLE"));
action = eina_list_append(action, eina_stringshare_add("PLAY_TONE"));
action = eina_list_append(action, eina_stringshare_add("PHYSICS_IMPULSE"));
action = eina_list_append(action, eina_stringshare_add("PHYSICS_TORQUE_IMPULSE"));
action = eina_list_append(action, eina_stringshare_add("PHYSICS_FORCE"));
action = eina_list_append(action, eina_stringshare_add("PHYSICS_TORQUE"));
action = eina_list_append(action, eina_stringshare_add("PHYSICS_FORCES_CLEAR"));
action = eina_list_append(action, eina_stringshare_add("PHYSICS_VEL_SET"));
action = eina_list_append(action, eina_stringshare_add("PHYSICS_ANG_VEL_SET"));
action = eina_list_append(action, eina_stringshare_add("PHYSICS_STOP"));
action = eina_list_append(action, eina_stringshare_add("PHYSICS_ROT_SET"));
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("action:");
attr->value.strs = action;
attr->value.type = ATTR_VALUE_CONSTANT;
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
*/
//Type: Integer
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("color:");
attr->value.min = 0;
attr->value.max = 255;
attr->value.type = ATTR_VALUE_INTEGER;
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("scale:");
attr->value.min = 0;
attr->value.max = 1;
attr->value.type = ATTR_VALUE_INTEGER;
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("fixed:");
attr->value.min = 0;
attr->value.max = 1;
attr->value.type = ATTR_VALUE_INTEGER;
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("size:");
attr->value.min = 1;
attr->value.max = 255;
attr->value.type = ATTR_VALUE_INTEGER;
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("min:");
attr->value.min = 0;
attr->value.max = 1000;
attr->value.type = ATTR_VALUE_INTEGER;
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("max:");
attr->value.min = 0;
attr->value.max = 1000;
attr->value.type = ATTR_VALUE_INTEGER;
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("mouse_events:");
attr->value.min = 0;
attr->value.max = 1000;
attr->value.type = ATTR_VALUE_INTEGER;
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
//Type: Float
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("relative:");
attr->value.min = 0.0;
attr->value.max = 1;
attr->value.type = ATTR_VALUE_FLOAT;
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("aspect:");
attr->value.min = 0.0;
attr->value.max = 1.0;
attr->value.type = ATTR_VALUE_FLOAT;
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("align");
attr->value.min = 0.0;
attr->value.max = 1.0;
attr->value.type = ATTR_VALUE_FLOAT;
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
//Type: Part
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("target:");
attr->instring = EINA_TRUE;
attr->value.type = ATTR_VALUE_PART;
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("to:");
attr->instring = EINA_TRUE;
attr->value.type = ATTR_VALUE_PART;
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("source:");
attr->instring = EINA_TRUE;
attr->value.type = ATTR_VALUE_PART;
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
//Type: State
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("STATE_SET");
attr->instring = EINA_TRUE;
attr->value.type = ATTR_VALUE_STATE;
attr->value.program = EINA_TRUE;
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("inherit:");
attr->instring = EINA_TRUE;
attr->value.type = ATTR_VALUE_STATE;
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
//Type: Image
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("normal:");
attr->instring = EINA_TRUE;
attr->value.type = ATTR_VALUE_IMAGE;
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("tween:");
attr->instring = EINA_TRUE;
attr->value.type = ATTR_VALUE_IMAGE;
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
//Type: Program
attr = calloc(1, sizeof(parser_attr));
attr->keyword = eina_stringshare_add("after:");
attr->instring = EINA_TRUE;
attr->value.type = ATTR_VALUE_PROGRAM;
td->attrs = eina_inlist_append(td->attrs, (Eina_Inlist *) attr);
}
static void
type_init_thread_end(void *data, Ecore_Thread *thread EINA_UNUSED)
{
type_init_td *td = data;
td->pd->init_thread = NULL;
td->pd->attrs = td->attrs;
free(td);
}
static void
type_init_thread_cancel(void *data, Ecore_Thread *thread EINA_UNUSED)
{
type_init_td *td = data;
td->pd->init_thread = NULL;
free(td);
}
const char *
parser_paragh_name_get(parser_data *pd EINA_UNUSED, Evas_Object *entry)
{
@ -854,3 +851,38 @@ parser_states_filtered_name_get(Eina_List *states)
}
return ret;
}
parser_data *
parser_init()
{
parser_data *pd = calloc(1, sizeof(parser_data));
type_init_td *td = calloc(1, sizeof(type_init_td));
td->pd = pd;
pd->init_thread = ecore_thread_run(type_init_thread_blocking,
type_init_thread_end,
type_init_thread_cancel, td);
return pd;
}
void
parser_term(parser_data *pd)
{
ecore_thread_cancel(pd->thread);
ecore_thread_cancel(pd->init_thread);
parser_attr *attr;
Eina_Stringshare *str;
while(pd->attrs)
{
attr = EINA_INLIST_CONTAINER_GET(pd->attrs, parser_attr);
pd->attrs = eina_inlist_remove(pd->attrs, pd->attrs);
eina_stringshare_del(attr->keyword);
EINA_LIST_FREE(attr->value.strs, str) eina_stringshare_del(str);
free(attr);
}
free(pd);
}

View File

@ -4,8 +4,9 @@ typedef enum attr_value_type
ATTR_VALUE_FLOAT = 2,
ATTR_VALUE_CONSTANT = 4,
ATTR_VALUE_PART = 8,
ATTR_VALUE_IMAGE = 16,
ATTR_VALUE_PROGRAM = 32
ATTR_VALUE_STATE = 16,
ATTR_VALUE_IMAGE = 32,
ATTR_VALUE_PROGRAM = 64
} attr_value_type;
struct attr_value_s
@ -14,10 +15,11 @@ struct attr_value_s
float min;
float max;
attr_value_type type;
Eina_Bool program : 1;
};
Evas_Object * ctxpopup_candidate_list_create(Evas_Object *parent, attr_value *attr, double slider_val, Evas_Smart_Cb ctxpopup_dismiss_cb, Evas_Smart_Cb ctxpopup_selected_cb, void *data);
Evas_Object * ctxpopup_img_preview_create(Evas_Object *parent, const char *imgpath, Evas_Smart_Cb ctxpopup_dismiss_cb, Evas_Smart_Cb ctxpopup_relay_cb, void *data);
Evas_Object * ctxpopup_candidate_list_create(edit_data *ed, attr_value *attr, double slider_val, Evas_Smart_Cb ctxpopup_dismiss_cb, Evas_Smart_Cb ctxpopup_selected_cb);
Evas_Object * ctxpopup_img_preview_create(edit_data *ed, const char *imgpath, Evas_Smart_Cb ctxpopup_dismiss_cb, Evas_Smart_Cb ctxpopup_relay_cb);

View File

@ -17,3 +17,5 @@ void edit_template_part_insert(edit_data *ed, Edje_Part_Type type);
void edit_part_highlight_toggle(edit_data *ed, Eina_Bool msg);
void edit_line_delete(edit_data *ed);
void edit_edc_reload(edit_data *ed, const char *edc_path);
Eina_Stringshare *edit_cur_prog_name_get(edit_data *ed);
Eina_Stringshare *edit_cur_part_name_get(edit_data *ed);

View File

@ -9,6 +9,7 @@ void parser_term(parser_data *pd);
Eina_Stringshare *parser_first_group_name_get(parser_data *pd, Evas_Object *entry);
void parser_cur_name_get(parser_data *pd, Evas_Object *entry, void (*cb)(void *data, Eina_Stringshare *part_name, Eina_Stringshare *group_name), void *data);
void parser_cur_group_name_get(parser_data *pd, Evas_Object *entry, void (*cb)(void *data, Eina_Stringshare *part_name, Eina_Stringshare *group_name), void *data);
Eina_Stringshare *parser_cur_name_fast_get(Evas_Object *entry, const char *scope);
Eina_Bool parser_type_name_compare(parser_data *pd, const char *str);
const char *parser_markup_escape(parser_data *pd EINA_UNUSED, const char *str);
attr_value *parser_attribute_get(parser_data *pd, const char *text, const char *cur);
@ -16,4 +17,5 @@ const char * parser_paragh_name_get(parser_data *pd, Evas_Object *entry);
char *parser_name_get(parser_data *pd, const char *cur);
void parser_cancel(parser_data *pd);
int parser_line_cnt_get(parser_data *pd EINA_UNUSED, const char *src);
Eina_List *parser_states_filtered_name_get(Eina_List *states);

View File

@ -12,4 +12,6 @@ void view_scale_set(view_data *vd, double scale);
Eina_List *view_parts_list_get(view_data *vd);
Eina_List *view_images_list_get(view_data *vd);
Eina_List *view_programs_list_get(view_data *vd);
Eina_List *view_part_states_list_get(view_data *vd, const char *part);
Eina_List *view_program_targets_get(view_data *vd, const char *prog);
void view_string_list_free(Eina_List *list);