diff options
author | Jeeyong Um <conr2d@gmail.com> | 2018-05-01 01:02:05 +0900 |
---|---|---|
committer | Jeeyong Um <conr2d@gmail.com> | 2018-05-01 04:46:47 +0900 |
commit | 31ec772c555a37405289ce8290008eab88648fc7 (patch) | |
tree | c630cb6f25b046de13ae4548c4d5028589e9a523 | |
parent | c469fb03799cd76c779a7270e5ae0c2a116bbb61 (diff) | |
download | efl-31ec772c555a37405289ce8290008eab88648fc7.tar.gz |
edje_cc: Copy text classes and styles from imported group
-rw-r--r-- | src/bin/edje/edje_cc.h | 12 | ||||
-rw-r--r-- | src/bin/edje/edje_cc_handlers.c | 115 |
2 files changed, 117 insertions, 10 deletions
diff --git a/src/bin/edje/edje_cc.h b/src/bin/edje/edje_cc.h index 06abf92f5d..90e640b39a 100644 --- a/src/bin/edje/edje_cc.h +++ b/src/bin/edje/edje_cc.h @@ -221,6 +221,18 @@ typedef struct Eina_Bool imported; } Edje_Size_Class_Parser; +typedef struct +{ + Edje_Text_Class tc; + Eina_Bool imported; +} Edje_Text_Class_Parser; + +typedef struct +{ + Edje_Style style; + Eina_Bool imported; +} Edje_Style_Parser; + /* global fn calls */ void data_setup(void); void data_write(void); diff --git a/src/bin/edje/edje_cc_handlers.c b/src/bin/edje/edje_cc_handlers.c index 5d2bdbe2f6..78cadd0a6f 100644 --- a/src/bin/edje/edje_cc_handlers.c +++ b/src/bin/edje/edje_cc_handlers.c @@ -3636,7 +3636,7 @@ ob_styles_style(void) { Edje_Style *stl; - stl = mem_alloc(SZ(Edje_Style)); + stl = mem_alloc(SZ(Edje_Style_Parser)); edje_file->styles = eina_list_append(edje_file->styles, stl); } @@ -3644,6 +3644,7 @@ static void _style_name(char *name) { Edje_Style *stl, *tstl; + Edje_Style_Parser *stlp; Eina_List *l; stl = eina_list_last_data_get(edje_file->styles); @@ -3653,9 +3654,20 @@ _style_name(char *name) { if (stl->name && tstl->name && (stl != tstl) && (!strcmp(stl->name, tstl->name))) { - ERR("parse error %s:%i. There is already a style named \"%s\"", - file_in, line - 1, stl->name); - exit(-1); + stlp = (Edje_Style_Parser *)tstl; + + if (stlp->imported) + { + edje_file->styles = eina_list_remove(edje_file->styles, tstl); + free(tstl); + break; + } + else + { + ERR("parse error %s:%i. There is already a style named \"%s\"", + file_in, line - 1, stl->name); + exit(-1); + } } } } @@ -3771,6 +3783,7 @@ static void _text_class_name(char *name) { Edje_Text_Class *tc, *ttc; + Edje_Text_Class_Parser *tcp; Eina_List *l; tc = eina_list_data_get(eina_list_last(edje_file->text_classes)); @@ -3779,9 +3792,20 @@ _text_class_name(char *name) { if ((tc != ttc) && (!strcmp(tc->name, ttc->name))) { - ERR("parse error %s:%i. There is already a text class named \"%s\"", - file_in, line - 1, tc->name); - exit(-1); + tcp = (Edje_Text_Class_Parser *)ttc; + + if (tcp->imported) + { + edje_file->text_classes = eina_list_remove(edje_file->text_classes, ttc); + free(ttc); + break; + } + else + { + ERR("parse error %s:%i. There is already a text class named \"%s\"", + file_in, line - 1, tc->name); + exit(-1); + } } } } @@ -3802,6 +3826,7 @@ static void st_text_class_name(void) { Edje_Text_Class *tc, *ttc; + Edje_Text_Class_Parser *tcp; Eina_List *l; tc = eina_list_data_get(eina_list_last(edje_file->text_classes)); @@ -3810,9 +3835,20 @@ st_text_class_name(void) { if ((tc != ttc) && (!strcmp(tc->name, ttc->name))) { - ERR("parse error %s:%i. There is already a text class named \"%s\"", - file_in, line - 1, tc->name); - exit(-1); + tcp = (Edje_Text_Class_Parser *)ttc; + + if (tcp->imported) + { + edje_file->text_classes = eina_list_remove(edje_file->text_classes, ttc); + free(ttc); + break; + } + else + { + ERR("parse error %s:%i. There is already a text class named \"%s\"", + file_in, line - 1, tc->name); + exit(-1); + } } } } @@ -9124,8 +9160,67 @@ st_collections_group_parts_part_description_inherit(void) ted->text.text.str = STRDUP(ted->text.text.str); ted->text.domain = STRDUP(ted->text.domain); ted->text.text_class = STRDUP(ted->text.text_class); + if ((ted->text.text_class) && (pcp->import)) + { + Edje_Text_Class *tc; + Edje_Text_Class_Parser *tcp; + Eina_List *l; + Eina_Bool overriden = EINA_FALSE; + + EINA_LIST_FOREACH(edje_file->text_classes, l, tc) + { + if (!strcmp(ted->text.text_class, tc->name)) + { + overriden = EINA_TRUE; + break; + } + } + + if (!overriden) + { + EINA_LIST_FOREACH(edje_file_import->text_classes, l, tc) + { + tcp = mem_alloc(SZ(Edje_Text_Class_Parser)); + memcpy(tcp, tc, sizeof(Edje_Text_Class)); + tcp->imported = EINA_TRUE; + + edje_file->text_classes = eina_list_append(edje_file->text_classes, tcp); + break; + } + } + } ted->text.font.str = STRDUP(ted->text.font.str); + if ((ted->text.style.str) && (pcp->import)) + { + Edje_Style *stl; + Edje_Style_Parser *stlp; + Eina_List *l; + Eina_Bool overriden = EINA_FALSE; + + EINA_LIST_FOREACH(edje_file->styles, l, stl) + { + if (!strcmp(ted->text.style.str, stl->name)) + { + overriden = EINA_TRUE; + break; + } + } + + if (!overriden) + { + EINA_LIST_FOREACH(edje_file_import->styles, l, stl) + { + stlp = mem_alloc(SZ(Edje_Style_Parser)); + memcpy(stlp, stl, sizeof(Edje_Style)); + stlp->imported = EINA_TRUE; + + edje_file->styles = eina_list_append(edje_file->styles, stlp); + break; + } + } + } + _filter_copy(&ted->filter, &tparent->filter); data_queue_copied_part_nest_lookup(pc, &(tparent->text.id_source), &(ted->text.id_source), &ted->text.id_source_part); data_queue_copied_part_nest_lookup(pc, &(tparent->text.id_text_source), &(ted->text.id_text_source), &ted->text.id_text_source_part); |