_edje_match_states_alloc(Edje_Patterns *ppat, int n)
{
Edje_States *l;
-
+
const size_t patterns_size = ppat->patterns_size;
const size_t patterns_max_length = ppat->max_length;
size_t pos)
{
size_t i;
-
+
i = (idx * (patterns_max_length + 1)) + pos;
if (i < list->size)
const char *cl_tok,
char c)
{
- if (! *cl_tok)
- {
- *status = patterns_syntax_error;
- return 0;
- }
- else if (cl_tok[1] == '-' && cl_tok[2] != ']')
- {
- if (*cl_tok <= c && c <= cl_tok[2])
- *status = patterns_found;
- return 3;
- }
- else
- {
- if (c == *cl_tok)
- *status = patterns_found;
- return 1;
- }
+ if (! *cl_tok)
+ {
+ *status = patterns_syntax_error;
+ return 0;
+ }
+ else if (cl_tok[1] == '-' && cl_tok[2] != ']')
+ {
+ if (*cl_tok <= c && c <= cl_tok[2])
+ *status = patterns_found;
+ return 3;
+ }
+ else
+ {
+ if (c == *cl_tok)
+ *status = patterns_found;
+ return 1;
+ }
}
static Edje_Match_Error
_edje_match_patterns_exec_class_complement(const char *cl_tok, size_t *ret)
{
- switch (*cl_tok)
- {
+ switch (*cl_tok)
+ {
case 0:
return EDJE_MATCH_SYNTAX_ERROR;
-
+
case '!':
*ret = 1;
return EDJE_MATCH_OK;
-
- default:
- *ret = 0;
- return EDJE_MATCH_OK;
- }
+
+ default:
+ *ret = 0;
+ return EDJE_MATCH_OK;
+ }
}
static Edje_Match_Error
enum status status = patterns_not_found;
int pos = 1;
size_t neg;
-
+
if (_edje_match_patterns_exec_class_complement(cl + 1, &neg) != EDJE_MATCH_OK)
- return EDJE_MATCH_SYNTAX_ERROR;
-
+ return EDJE_MATCH_SYNTAX_ERROR;
+
pos += neg;
-
+
do
- pos += _edje_match_patterns_exec_class_token(&status, cl + pos, c);
+ {
+ pos += _edje_match_patterns_exec_class_token(&status, cl + pos, c);
+ }
while (cl[pos] && cl[pos] != ']');
-
+
if (status == patterns_syntax_error || ! cl[pos])
- return EDJE_MATCH_SYNTAX_ERROR;
-
+ return EDJE_MATCH_SYNTAX_ERROR;
+
if (status == patterns_found)
- *ret = neg ? 0 : pos + 1;
+ *ret = neg ? 0 : pos + 1;
else
- *ret = neg ? pos + 1 : 0;
-
+ *ret = neg ? pos + 1 : 0;
+
return EDJE_MATCH_OK;
}
size_t i;
for (i = 0; i < states->size; ++i)
- if (states->states[i].pos >= finals[states->states[i].idx])
- return EINA_TRUE;
+ {
+ if (states->states[i].pos >= finals[states->states[i].idx])
+ return EINA_TRUE;
+ }
return EINA_FALSE;
}
size_t j;
for (i = 0; i < signal_states->size; ++i)
- if (signal_states->states[i].pos >= signal_finals[signal_states->states[i].idx])
- for (j = 0; j < source_states->size; ++j)
- if (signal_states->states[i].idx == source_states->states[j].idx
- && source_states->states[j].pos >= source_finals[source_states->states[j].idx])
- {
- Edje_Program *pr;
-
- pr = programs[signal_states->states[i].idx];
- if (pr)
- {
- if (func(pr, data))
- return EINA_FALSE;
- }
- }
+ {
+ if (signal_states->states[i].pos >= signal_finals[signal_states->states[i].idx])
+ {
+ for (j = 0; j < source_states->size; ++j)
+ {
+ if (signal_states->states[i].idx == source_states->states[j].idx
+ && source_states->states[j].pos >= source_finals[source_states->states[j].idx])
+ {
+ Edje_Program *pr;
+
+ pr = programs[signal_states->states[i].idx];
+ if (pr)
+ {
+ if (func(pr, data))
+ return EINA_FALSE;
+ }
+ }
+ }
+ }
+ }
return EINA_TRUE;
}
int r = 1;
for (i = 0; i < signal_states->size; ++i)
- if (signal_states->states[i].pos >= signal_finals[signal_states->states[i].idx])
- for (j = 0; j < source_states->size; ++j)
- if (signal_states->states[i].idx == source_states->states[j].idx
- && source_states->states[j].pos >= source_finals[source_states->states[j].idx])
- {
- Edje_Signal_Callback *escb;
-
- escb = eina_list_nth(callbacks, signal_states->states[i].idx);
- if (escb)
- {
- if ((!escb->just_added)
- && (!escb->delete_me))
- {
- escb->func(escb->data, ed->obj, signal, source);
- r = 2;
- }
- if (_edje_block_break(ed))
- return 0;
- if ((singal_ppat->delete_me) || (source_ppat->delete_me))
- return 0;
- }
- }
+ {
+ if (signal_states->states[i].pos >= signal_finals[signal_states->states[i].idx])
+ {
+ for (j = 0; j < source_states->size; ++j)
+ {
+ if (signal_states->states[i].idx == source_states->states[j].idx
+ && source_states->states[j].pos >= source_finals[source_states->states[j].idx])
+ {
+ Edje_Signal_Callback *escb;
+
+ escb = eina_list_nth(callbacks, signal_states->states[i].idx);
+ if (escb)
+ {
+ if ((!escb->just_added)
+ && (!escb->delete_me))
+ {
+ escb->func(escb->data, ed->obj, signal, source);
+ r = 2;
+ }
+ if (_edje_block_break(ed))
+ return 0;
+ if ((singal_ppat->delete_me) || (source_ppat->delete_me))
+ return 0;
+ }
+ }
+ }
+ }
+ }
return r;
}
for (c = string; *c && states->size; ++c)
{
size_t i;
-
+
_edje_match_states_clear(new_states, ppat->patterns_size, ppat->max_length);
-
+
for (i = 0; i < states->size; ++i)
{
const size_t idx = states->states[i].idx;
const size_t pos = states->states[i].pos;
-
+
if (!ppat->patterns[idx][pos])
- continue;
+ continue;
else if (ppat->patterns[idx][pos] == '*')
{
_edje_match_states_insert(states, ppat->max_length, idx, pos + 1);
else
{
size_t m;
-
+
if (_edje_match_patterns_exec_token(ppat->patterns[idx] + pos,
*c,
&m) != EDJE_MATCH_OK)
- return NULL;
-
+ return NULL;
+
if (m)
- _edje_match_states_insert(new_states, ppat->max_length, idx, pos + m);
+ _edje_match_states_insert(new_states, ppat->max_length, idx, pos + m);
}
}
- {
- Edje_States *tmp = states;
-
- states = new_states;
- new_states = tmp;
- }
+ {
+ Edje_States *tmp = states;
+
+ states = new_states;
+ new_states = tmp;
+ }
}
return states;
_edje_match_patterns_exec_init_states(ppat->states, ppat->patterns_size, ppat->max_length);
result = _edje_match_fn(ppat, string, ppat->states);
-
+
if (result)
- r = _edje_match_collection_dir_exec_finals(ppat->finals, result);
+ r = _edje_match_collection_dir_exec_finals(ppat->finals, result);
return r;
}
source_result = _edje_match_fn(ppat_source, source, ppat_source->states);
if (signal_result && source_result)
- r = edje_match_programs_exec_check_finals(ppat_signal->finals,
- ppat_source->finals,
- signal_result,
- source_result,
- programs,
- func,
- data);
+ r = edje_match_programs_exec_check_finals(ppat_signal->finals,
+ ppat_source->finals,
+ signal_result,
+ source_result,
+ programs,
+ func,
+ data);
return r;
}
source_result = _edje_match_fn(ppat_source, source, ppat_source->states);
if (signal_result && source_result)
- r = edje_match_callback_exec_check_finals(ppat_signal,
- ppat_source,
- ppat_signal->finals,
- ppat_source->finals,
- signal_result,
- source_result,
- signal,
- source,
- callbacks,
- ed);
+ r = edje_match_callback_exec_check_finals(ppat_signal,
+ ppat_source,
+ ppat_signal->finals,
+ ppat_source->finals,
+ signal_result,
+ source_result,
+ signal,
+ source,
+ callbacks,
+ ed);
ppat_signal->ref--;
ppat_source->ref--;
if (ppat_signal->ref <= 0) edje_match_patterns_free(ppat_signal);
Eina_List *result = NULL;
Eina_Rbtree *new = NULL;
unsigned int i;
-
+
for (i = 0; i < count; ++i)
{
if (programs[i]->signal && !strpbrk(programs[i]->signal, "*?[\\")
&& programs[i]->source && !strpbrk(programs[i]->source, "*?[\\"))
{
Edje_Signal_Source_Char *item;
-
+
item = (Edje_Signal_Source_Char*) eina_rbtree_inline_lookup(new, programs[i]->signal, 0,
EINA_RBTREE_CMP_KEY_CB(_edje_signal_source_key_cmp), programs[i]->source);
if (!item)
{
item = malloc(sizeof (Edje_Signal_Source_Char));
if (!item) continue;
-
+
item->signal = programs[i]->signal;
item->source = programs[i]->source;
item->list = NULL;
-
+
new = eina_rbtree_inline_insert(new, EINA_RBTREE_GET(item),
EINA_RBTREE_CMP_NODE_CB(_edje_signal_source_node_cmp), NULL);
}
-
+
item->list = eina_list_prepend(item->list, programs[i]);
}
else
- result = eina_list_prepend(result, programs[i]);
+ result = eina_list_prepend(result, programs[i]);
}
-
+
*tree = new;
return result;
}
&& callback->source && !strpbrk(callback->source, "*?[\\"))
{
Edje_Signal_Source_Char *item;
-
+
item = (Edje_Signal_Source_Char*) eina_rbtree_inline_lookup(new, callback->signal, 0,
EINA_RBTREE_CMP_KEY_CB(_edje_signal_source_key_cmp), callback->source);
if (!item)
{
item = malloc(sizeof (Edje_Signal_Source_Char));
if (!item) continue;
-
+
item->signal = callback->signal;
item->source = callback->source;
item->list = NULL;
-
+
new = eina_rbtree_inline_insert(new, EINA_RBTREE_GET(item),
EINA_RBTREE_CMP_NODE_CB(_edje_signal_source_node_cmp), NULL);
}
-
+
item->list = eina_list_prepend(item->list, callback);
}
else
- result = eina_list_prepend(result, callback);
+ result = eina_list_prepend(result, callback);
}
*tree = new;