q66 pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=a1552fe6a9f8fc07929a68dafc0413c5338bcd61

commit a1552fe6a9f8fc07929a68dafc0413c5338bcd61
Author: Daniel Kolesa <[email protected]>
Date:   Thu Sep 25 14:58:53 2014 +0100

    eolian: new API: eolian_event_c_name_get
---
 src/bin/eolian/eo_generator.c       | 17 ++++++++++-------
 src/lib/eolian/Eolian.h             | 12 ++++++++++++
 src/lib/eolian/database_event_api.c | 12 ++++++++++++
 src/lib/eolian/eo_parser.c          |  1 +
 src/lib/eolian/eolian_database.h    |  1 +
 5 files changed, 36 insertions(+), 7 deletions(-)

diff --git a/src/bin/eolian/eo_generator.c b/src/bin/eolian/eo_generator.c
index 84ae94f..e1a7bfe 100644
--- a/src/bin/eolian/eo_generator.c
+++ b/src/bin/eolian/eo_generator.c
@@ -265,7 +265,7 @@ eo_header_generate(const Eolian_Class *class, Eina_Strbuf 
*buf)
    itr = eolian_class_events_get(class);
    EINA_ITERATOR_FOREACH(itr, event)
      {
-        const char *evname = eolian_event_name_get(event);
+        const char *evname = eolian_event_c_name_get(event);
         const char *evdesc = eolian_event_description_get(event);
         Eolian_Object_Scope scope = eolian_event_scope_get(event);
 
@@ -288,7 +288,8 @@ eo_header_generate(const Eolian_Class *class, Eina_Strbuf 
*buf)
         eina_strbuf_append_printf(str_ev, "/**\n%s\n */\n", 
eina_strbuf_string_get(tmpbuf));
 
         eina_strbuf_reset(tmpbuf);
-        eina_strbuf_append_printf(tmpbuf, "%s_EVENT_%s", 
class_env.upper_classname, evname);
+        eina_strbuf_append(tmpbuf, evname);
+        eina_stringshare_del(evname);
         eina_strbuf_replace_all(tmpbuf, ",", "_");
         char* s = (char *)eina_strbuf_string_get(tmpbuf);
         eina_str_toupper(&s);
@@ -667,21 +668,22 @@ eo_source_beginning_generate(const Eolian_Class *class, 
Eina_Strbuf *buf)
    itr = eolian_class_events_get(class);
    EINA_ITERATOR_FOREACH(itr, event)
      {
-        const char *evname = eolian_event_name_get(event);
+        const char *evname = eolian_event_c_name_get(event);
         const char *evdesc = eolian_event_description_get(event);
         char *evdesc_line1;
         char *p;
 
         eina_strbuf_reset(str_ev);
         evdesc_line1 = _source_desc_get(evdesc);
-        eina_strbuf_append_printf(str_ev, "%s_EVENT_%s", 
class_env.upper_classname, evname);
+        eina_strbuf_append(str_ev, evname);
+        eina_stringshare_del(evname);
         p = (char *)eina_strbuf_string_get(str_ev);
         eina_str_toupper(&p);
         eina_strbuf_replace_all(str_ev, ",", "_");
 
         eina_strbuf_append_printf(tmpbuf,
                                   "EOAPI const Eo_Event_Description _%s =\n   
EO_EVENT_DESCRIPTION(\"%s\", \"%s\");\n",
-                                  eina_strbuf_string_get(str_ev), evname, 
evdesc_line1);
+                                  eina_strbuf_string_get(str_ev), 
eolian_event_name_get(event), evdesc_line1);
         free(evdesc_line1);
      }
    eina_iterator_free(itr);
@@ -878,11 +880,12 @@ eo_source_end_generate(const Eolian_Class *class, 
Eina_Strbuf *buf)
    itr = eolian_class_events_get(class);
    EINA_ITERATOR_FOREACH(itr, event)
      {
-        const char *evname = eolian_event_name_get(event);
+        const char *evname = eolian_event_c_name_get(event);
         char *p;
 
         eina_strbuf_reset(tmpbuf);
-        eina_strbuf_append_printf(tmpbuf, "%s_EVENT_%s", 
class_env.upper_classname, evname);
+        eina_strbuf_append(tmpbuf, evname);
+        eina_stringshare_del(evname);
         p = (char *)eina_strbuf_string_get(tmpbuf);
         eina_str_toupper(&p);
         eina_strbuf_replace_all(tmpbuf, ",", "_");
diff --git a/src/lib/eolian/Eolian.h b/src/lib/eolian/Eolian.h
index b9ce307..3331071 100644
--- a/src/lib/eolian/Eolian.h
+++ b/src/lib/eolian/Eolian.h
@@ -1211,6 +1211,18 @@ EAPI Eina_Stringshare 
*eolian_event_description_get(const Eolian_Event *event);
 EAPI Eolian_Object_Scope eolian_event_scope_get(const Eolian_Event *event);
 
 /*
+ * @brief Returns the C name of an event
+ *
+ * @param[in] event the event handle
+ * @return the event C name
+ *
+ * You're responsible for deleting the stringshare.
+ *
+ * @ingroup Eolian
+ */
+EAPI Eina_Stringshare *eolian_event_c_name_get(const Eolian_Event *event);
+
+/*
  * @brief Indicates if the class constructor has to invoke
  * a non-generated class constructor function.
  *
diff --git a/src/lib/eolian/database_event_api.c 
b/src/lib/eolian/database_event_api.c
index 71a44ff..9aa597a 100644
--- a/src/lib/eolian/database_event_api.c
+++ b/src/lib/eolian/database_event_api.c
@@ -32,3 +32,15 @@ eolian_event_scope_get(const Eolian_Event *event)
    EINA_SAFETY_ON_NULL_RETURN_VAL(event, EOLIAN_SCOPE_PUBLIC);
    return event->scope;
 }
+
+EAPI Eina_Stringshare *
+eolian_event_c_name_get(const Eolian_Event *event)
+{
+    char  buf[512];
+    char *tmp = buf;
+    snprintf(buf, sizeof(buf), "%s_EVENT_%s", event->klass->full_name,
+             event->name);
+    eina_str_toupper(&tmp);
+    while ((tmp = strchr(tmp, '.'))) *tmp = '_';
+    return eina_stringshare_add(buf);
+}
diff --git a/src/lib/eolian/eo_parser.c b/src/lib/eolian/eo_parser.c
index 0fc9457..70f7dc1 100644
--- a/src/lib/eolian/eo_parser.c
+++ b/src/lib/eolian/eo_parser.c
@@ -1699,6 +1699,7 @@ parse_event(Eo_Lexer *ls)
         ev->comment = eina_stringshare_ref(ls->t.value.s);
         eo_lexer_get(ls);
      }
+   ev->klass = ls->tmp.kls;
 }
 
 static void
diff --git a/src/lib/eolian/eolian_database.h b/src/lib/eolian/eolian_database.h
index c9433b8..393fee6 100644
--- a/src/lib/eolian/eolian_database.h
+++ b/src/lib/eolian/eolian_database.h
@@ -188,6 +188,7 @@ struct _Eolian_Event
    Eina_Stringshare *name;
    Eina_Stringshare *comment;
    Eolian_Type *type;
+   Eolian_Class *klass;
    int scope;
 };
 

-- 


Reply via email to