diff options
author | Daniel Kolesa <d.kolesa@samsung.com> | 2014-06-20 16:53:51 +0100 |
---|---|---|
committer | Daniel Kolesa <d.kolesa@samsung.com> | 2014-06-20 17:09:03 +0100 |
commit | 43e23492033614096dda88aedc482d0d7c2d0546 (patch) | |
tree | f14750252106483f6b697c4931a8002135c90bfd | |
parent | 4dcd45b010c956046e073ca39a45637ecf7eb447 (diff) | |
download | efl-43e23492033614096dda88aedc482d0d7c2d0546.tar.gz |
eolian/generator: public api func name deduplication, spank tasn if it breaks
-rw-r--r-- | src/bin/eolian/common_funcs.c | 42 | ||||
-rw-r--r-- | src/bin/eolian/common_funcs.h | 2 | ||||
-rw-r--r-- | src/bin/eolian/eo_generator.c | 15 | ||||
-rw-r--r-- | src/lib/edje/edje_calc.c | 2 | ||||
-rw-r--r-- | src/lib/edje/edje_text.c | 8 | ||||
-rw-r--r-- | src/lib/evas/canvas/evas_object_text.c | 2 |
6 files changed, 56 insertions, 15 deletions
diff --git a/src/bin/eolian/common_funcs.c b/src/bin/eolian/common_funcs.c index de58280928..5dd20f2805 100644 --- a/src/bin/eolian/common_funcs.c +++ b/src/bin/eolian/common_funcs.c @@ -50,7 +50,7 @@ _class_env_create(const Eolian_Class class, const char *over_classname, _eolian_ void _class_func_env_create(const Eolian_Class class, const char *funcname, Eolian_Function_Type ftype, _eolian_class_func_vars *env) { - char *p; + char *p, *ret; const char *suffix = ""; const char *legacy = NULL; Eolian_Function funcid = eolian_class_function_find_by_name(class, funcname, ftype); @@ -72,11 +72,15 @@ _class_func_env_create(const Eolian_Class class, const char *funcname, Eolian_Fu p = strncpy(env->upper_func, funcname, PATH_MAX - 1); eina_str_toupper(&p); - sprintf(p = env->upper_eo_func, "%s_%s%s", tmp_env.upper_eo_prefix, funcname, suffix); + ret = _func_name_dedup(tmp_env.upper_eo_prefix, funcname); + sprintf(p = env->upper_eo_func, "%s%s", ret, suffix); eina_str_toupper(&p); + free(ret); - sprintf(p = env->lower_eo_func, "%s_%s%s", tmp_env.lower_eo_prefix, funcname, suffix); + ret = _func_name_dedup(tmp_env.lower_eo_prefix, funcname); + sprintf(p = env->lower_eo_func, "%s%s", ret, suffix); eina_str_tolower(&p); + free(ret); env->legacy_func[0] = '\0'; if (legacy && !strcmp(legacy, "null")) goto end; @@ -161,3 +165,35 @@ _source_desc_get(const char *str) return ret; } +char * +_func_name_dedup(const char *classn, const char *funcn) +{ + const char *last_p = strrchr(classn, '_'); + const char *func_p = strchr(funcn, '_'); + Eina_Strbuf *buf = eina_strbuf_new(); + int len; + char *ret; + + if (!last_p) last_p = classn; + else last_p++; + if (!func_p) len = strlen(funcn); + else len = func_p - funcn; + + if ((int)strlen(last_p) != len || strncmp(last_p, funcn, len)) + { + eina_strbuf_append(buf, classn); + eina_strbuf_append_char(buf, '_'); + eina_strbuf_append(buf, funcn); + ret = eina_strbuf_string_steal(buf); + eina_strbuf_free(buf); + return ret; + } + + if (last_p != classn) + eina_strbuf_append_n(buf, classn, last_p - classn); /* includes _ */ + + eina_strbuf_append(buf, funcn); + ret = eina_strbuf_string_steal(buf); + eina_strbuf_free(buf); + return ret; +} diff --git a/src/bin/eolian/common_funcs.h b/src/bin/eolian/common_funcs.h index ff98d7d508..ca510efb1f 100644 --- a/src/bin/eolian/common_funcs.h +++ b/src/bin/eolian/common_funcs.h @@ -66,4 +66,6 @@ void _class_env_create(const Eolian_Class class, const char *over_classname, _eo void _class_func_env_create(const Eolian_Class class, const char *funcname, Eolian_Function_Type ftype EINA_UNUSED, _eolian_class_func_vars *env); +char *_func_name_dedup(const char *classn, const char *funcn); + #endif diff --git a/src/bin/eolian/eo_generator.c b/src/bin/eolian/eo_generator.c index 30e11bc3c1..1eb4fbd50f 100644 --- a/src/bin/eolian/eo_generator.c +++ b/src/bin/eolian/eo_generator.c @@ -598,6 +598,7 @@ eo_source_end_generate(const Eolian_Class class, Eina_Strbuf *buf) Eolian_Function fnid = NULL; const char *funcname = NULL; char *tp = implname; + char *ret; if (eolian_implement_information_get(impl_desc, &impl_class, &fnid, &ftype)) { @@ -615,29 +616,31 @@ eo_source_end_generate(const Eolian_Class class, Eina_Strbuf *buf) goto end; } + ret = _func_name_dedup(impl_env.lower_eo_prefix, funcname); switch (ftype) { case EOLIAN_PROP_SET: case EOLIAN_PROP_GET: case EOLIAN_PROPERTY: if (ftype != EOLIAN_PROP_GET) { - eina_strbuf_append_printf(str_op, "\n EO_OP_FUNC_OVERRIDE(%s_%s_set, _%s_%s_set),", - impl_env.lower_eo_prefix, funcname, implname, funcname); + eina_strbuf_append_printf(str_op, "\n EO_OP_FUNC_OVERRIDE(%s_set, _%s_%s_set),", + ret, implname, funcname); eo_bind_func_generate(class, fnid, EOLIAN_PROP_SET, str_bodyf, &impl_env); } if (ftype != EOLIAN_PROP_SET) { - eina_strbuf_append_printf(str_op, "\n EO_OP_FUNC_OVERRIDE(%s_%s_get, _%s_%s_get),", - impl_env.lower_eo_prefix, funcname, implname, funcname); + eina_strbuf_append_printf(str_op, "\n EO_OP_FUNC_OVERRIDE(%s_get, _%s_%s_get),", + ret, implname, funcname); eo_bind_func_generate(class, fnid, EOLIAN_PROP_GET, str_bodyf, &impl_env); } break; default: - eina_strbuf_append_printf(str_op, "\n EO_OP_FUNC_OVERRIDE(%s_%s, _%s_%s),", - impl_env.lower_eo_prefix, funcname, implname, funcname); + eina_strbuf_append_printf(str_op, "\n EO_OP_FUNC_OVERRIDE(%s, _%s_%s),", + ret, implname, funcname); eo_bind_func_generate(class, fnid, ftype, str_bodyf, &impl_env); break; } + free(ret); } //Constructors diff --git a/src/lib/edje/edje_calc.c b/src/lib/edje/edje_calc.c index 3c252b863a..66d5ee2f31 100644 --- a/src/lib/edje/edje_calc.c +++ b/src/lib/edje/edje_calc.c @@ -1652,7 +1652,7 @@ _edje_part_recalc_single_text(FLOAT_T sc EINA_UNUSED, eo_do(ep->object, evas_obj_text_style_set(style), - evas_obj_text_text_set(text), + evas_obj_text_set(text), evas_obj_size_get(&tw, &th)); if (chosen_desc->text.max_x) { diff --git a/src/lib/edje/edje_text.c b/src/lib/edje/edje_text.c index ba75b8beac..d791c8ffe1 100644 --- a/src/lib/edje/edje_text.c +++ b/src/lib/edje/edje_text.c @@ -99,7 +99,7 @@ _edje_text_fit_x(Edje *ed, Edje_Real_Part *ep, eo_do(ep->object, evas_obj_text_ellipsis_set(params->type.text.ellipsis), evas_obj_text_font_set(font, size), - evas_obj_text_text_set(text), + evas_obj_text_set(text), evas_obj_size_set(sw, sh)); return text; @@ -292,7 +292,7 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep, if (ep->part->scale) evas_object_scale_set(ep->object, TO_DOUBLE(sc)); eo_do(ep->object, evas_obj_text_font_set(font, size), - evas_obj_text_text_set(text)); + evas_obj_text_set(text)); part_get_geometry(ep, &tw, &th); /* Find the wanted font size */ if ((tw != sw) && (size > 0) && (tw != 0)) @@ -325,7 +325,7 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep, if (ep->part->scale) evas_object_scale_set(ep->object, TO_DOUBLE(sc)); eo_do(ep->object, evas_obj_text_font_set(font, size), - evas_obj_text_text_set(text)); + evas_obj_text_set(text)); part_get_geometry(ep, &tw, &th); /* only grow the font size if we didn't already reach the max size @@ -457,7 +457,7 @@ arrange_text: if (ep->part->scale) evas_object_scale_set(ep->object, TO_DOUBLE(sc)); eo_do(ep->object, evas_obj_text_font_set(font, size), - evas_obj_text_text_set(text)); + evas_obj_text_set(text)); part_get_geometry(ep, &tw, &th); /* filters */ diff --git a/src/lib/evas/canvas/evas_object_text.c b/src/lib/evas/canvas/evas_object_text.c index a45d3e841d..27e8d46a9c 100644 --- a/src/lib/evas/canvas/evas_object_text.c +++ b/src/lib/evas/canvas/evas_object_text.c @@ -962,7 +962,7 @@ _evas_text_eo_base_dbg_info_get(Eo *eo_obj, Evas_Text_Data *o EINA_UNUSED, Eo_Db eo_do(eo_obj, text = evas_obj_text_font_source_get()); EO_DBG_INFO_APPEND(group, "Font source", EINA_VALUE_TYPE_STRING, text); - eo_do(eo_obj, text = evas_obj_text_text_get()); + eo_do(eo_obj, text = evas_obj_text_get()); EO_DBG_INFO_APPEND(group, "Text", EINA_VALUE_TYPE_STRING, text); } |