nikawhite pushed a commit to branch master. http://git.enlightenment.org/tools/enventor.git/commit/?id=01431db641179b9dbc2954ae5f8d379b45b45bed
commit 01431db641179b9dbc2954ae5f8d379b45b45bed Author: Mykyta Biliavskyi <m.biliavs...@samsung.com> Date: Mon Feb 29 18:03:32 2016 +0900 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 --- src/lib/auto_comp.c | 11 +++++++++ src/lib/edc_parser.c | 61 ++++++++++++++++++++++++++++++++++++++++++++-- src/lib/enventor_private.h | 1 + 3 files changed, 71 insertions(+), 2 deletions(-) diff --git a/src/lib/auto_comp.c b/src/lib/auto_comp.c index 12d0654..664db9e 100644 --- a/src/lib/auto_comp.c +++ b/src/lib/auto_comp.c @@ -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; +} diff --git a/src/lib/edc_parser.c b/src/lib/edc_parser.c index a38998e..868ccb3 100644 --- a/src/lib/edc_parser.c +++ b/src/lib/edc_parser.c @@ -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; diff --git a/src/lib/enventor_private.h b/src/lib/enventor_private.h index a4898ca..c16e5e9 100644 --- a/src/lib/enventor_private.h +++ b/src/lib/enventor_private.h @@ -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 */ --