forked from enlightenment/enventor
Parser: recognize keyword with context.
Uses the autocomplete context parser for recognizing keywords with the same names in different contexts. For example: the attributes "min" and "max" for a description context should be integer values in range from 0 to 1000; but for a "text" context those attributes should be boolean. Curently add recognition for a "min" and "max" attributes in the "text" content. @fix T2712
This commit is contained in:
parent
5ec2cb8599
commit
01431db641
|
@ -922,3 +922,14 @@ autocomp_enabled_get(void)
|
|||
autocomp_data *ad = g_ad;
|
||||
return ad->enabled;
|
||||
}
|
||||
|
||||
const char **
|
||||
autocomp_current_context_get(void)
|
||||
{
|
||||
autocomp_data *ad = g_ad;
|
||||
|
||||
if (!ad->lexem_ptr || !ad->lexem_ptr->name)
|
||||
return NULL;
|
||||
|
||||
return (const char **)ad->lexem_ptr->name;
|
||||
}
|
||||
|
|
|
@ -27,6 +27,7 @@ typedef struct defined_macro_s
|
|||
typedef struct parser_attr_s
|
||||
{
|
||||
Eina_Stringshare *keyword;
|
||||
const char *context;
|
||||
attr_value value;
|
||||
} parser_attr;
|
||||
|
||||
|
@ -633,6 +634,49 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
|
|||
|
||||
//FIXME: construct from the configuration file.
|
||||
|
||||
|
||||
//Context depended attributes
|
||||
Eina_Array *wh = eina_array_new(2);
|
||||
eina_array_push(wh, eina_stringshare_add("W:"));
|
||||
eina_array_push(wh, eina_stringshare_add("H:"));
|
||||
|
||||
memset(&attr, 0x00, sizeof(parser_attr));
|
||||
attr.keyword = eina_stringshare_add("min");
|
||||
attr.value.strs = wh;
|
||||
attr.value.cnt = 2;
|
||||
attr.value.min = 0;
|
||||
attr.value.max = 1;
|
||||
attr.value.type = ATTR_VALUE_BOOLEAN;
|
||||
attr.value.prepend_str = ATTR_PREPEND_COLON;
|
||||
attr.value.append_str = ATTR_APPEND_SEMICOLON;
|
||||
attr.context = eina_stringshare_add("text");
|
||||
eina_inarray_push(td->attrs, &attr);
|
||||
|
||||
wh = eina_array_new(2);
|
||||
eina_array_push(wh, eina_stringshare_add("W:"));
|
||||
eina_array_push(wh, eina_stringshare_add("H:"));
|
||||
|
||||
wh = eina_array_new(2);
|
||||
eina_array_push(wh, eina_stringshare_add("W:"));
|
||||
eina_array_push(wh, eina_stringshare_add("H:"));
|
||||
|
||||
memset(&attr, 0x00, sizeof(parser_attr));
|
||||
attr.keyword = eina_stringshare_add("max");
|
||||
attr.value.strs = wh;
|
||||
attr.value.cnt = 2;
|
||||
attr.value.min = 0;
|
||||
attr.value.max = 1;
|
||||
attr.value.type = ATTR_VALUE_BOOLEAN;
|
||||
attr.value.prepend_str = ATTR_PREPEND_COLON;
|
||||
attr.value.append_str = ATTR_APPEND_SEMICOLON;
|
||||
attr.context = eina_stringshare_add("text");
|
||||
eina_inarray_push(td->attrs, &attr);
|
||||
|
||||
wh = eina_array_new(2);
|
||||
eina_array_push(wh, eina_stringshare_add("W:"));
|
||||
eina_array_push(wh, eina_stringshare_add("H:"));
|
||||
|
||||
// Context independed attributes
|
||||
Eina_Array *trans = eina_array_new(11);
|
||||
eina_array_push(trans, eina_stringshare_add("LINEAR"));
|
||||
eina_array_push(trans, eina_stringshare_add("ACCELERATE"));
|
||||
|
@ -899,7 +943,7 @@ type_init_thread_blocking(void *data, Ecore_Thread *thread EINA_UNUSED)
|
|||
attr.value.append_str = ATTR_APPEND_SEMICOLON;
|
||||
eina_inarray_push(td->attrs, &attr);
|
||||
|
||||
Eina_Array *wh = eina_array_new(2);
|
||||
wh = eina_array_new(2);
|
||||
eina_array_push(wh, eina_stringshare_add("W:"));
|
||||
eina_array_push(wh, eina_stringshare_add("H:"));
|
||||
|
||||
|
@ -1510,10 +1554,23 @@ parser_attribute_get(parser_data *pd, const char *text, const char *cur,
|
|||
}
|
||||
if (instring) return NULL;
|
||||
|
||||
const char **cur_context = autocomp_current_context_get();
|
||||
int i = 0;
|
||||
|
||||
EINA_INARRAY_FOREACH(pd->attrs, attr)
|
||||
{
|
||||
if (!strcmp(selected, attr->keyword))
|
||||
return &attr->value;
|
||||
{
|
||||
if (!attr->context)
|
||||
return &attr->value;
|
||||
|
||||
while (cur_context && (cur_context[i] != NULL))
|
||||
{
|
||||
if (!strcmp(cur_context[i], attr->context))
|
||||
return &attr->value;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
|
|
@ -109,6 +109,7 @@ Eina_Bool autocomp_enabled_get(void);
|
|||
Eina_Bool autocomp_event_dispatch(const char *key);
|
||||
void autocomp_list_show(void);
|
||||
void autocomp_reset(void);
|
||||
const char **autocomp_current_context_get(void);
|
||||
|
||||
|
||||
/* syntax color */
|
||||
|
|
Loading…
Reference in New Issue