Eolian: add support of eo_prefix and data.
authorDaniel Zaoui <daniel.zaoui@samsung.com>
Mon, 10 Mar 2014 09:52:46 +0000 (11:52 +0200)
committerDaniel Zaoui <daniel.zaoui@samsung.com>
Mon, 10 Mar 2014 13:07:05 +0000 (15:07 +0200)
You can add in the .eo file the eo_prefix:... and data:... in case
you want to override respectively the Eo prefix and the data type.
If "data: null" is used, no data type will be added.

18 files changed:
src/bin/eolian/common_funcs.c
src/bin/eolian/common_funcs.h
src/bin/eolian/eo1_generator.c
src/bin/eolian/legacy_generator.c
src/lib/eolian/Eolian.h
src/lib/eolian/eo_definitions.c
src/lib/eolian/eo_definitions.h
src/lib/eolian/eo_lexer.c
src/lib/eolian/eo_lexer.rl
src/lib/eolian/eolian_database.c
src/lib/eolian/eolian_database.h
src/lib/evas/canvas/evas_line.eo
src/lib/evas/canvas/evas_object.eo
src/lib/evas/canvas/evas_polygon.eo
src/lib/evas/canvas/evas_rectangle.eo
src/lib/evas/canvas/evas_text.eo
src/lib/evas/canvas/evas_textblock.eo
src/lib/evas/canvas/evas_textgrid.eo

index e98a02b009e2586c362520a28ca97cba076a9549..b3e9703bd888a434d18a8740c5b6455fe8814584 100644 (file)
@@ -1,7 +1,28 @@
 #include "common_funcs.h"
+#include "Eolian.h"
 
 int _eolian_gen_log_dom = -1;
 
+const char *current_classname = NULL;
+
+static void
+_class_names_fill(const char *classname)
+{
+   char *p;
+   const char *eo_prefix = NULL;
+   if (classname == current_classname) return;
+   current_classname = classname;
+   if (eolian_class_exists(classname))
+      eo_prefix = eolian_class_eo_prefix_get(classname);
+   if (!eo_prefix) eo_prefix = classname;
+   strncpy(current_eo_prefix_lower, eo_prefix, sizeof(current_eo_prefix_lower) - 1);
+   p = current_eo_prefix_lower;
+   eina_str_tolower(&p);
+   strncpy(current_eo_prefix_upper, eo_prefix, sizeof(current_eo_prefix_lower) - 1);
+   p = current_eo_prefix_upper;
+   eina_str_toupper(&p);
+}
+
 void
 _template_fill(Eina_Strbuf *buf, const char* templ, const char* classname, const char *funcname, Eina_Bool reset)
 {
@@ -11,12 +32,15 @@ _template_fill(Eina_Strbuf *buf, const char* templ, const char* classname, const
    static char lowclass[0xFF];
    static char normclass[0xFF];
    static char capfunc[0xFF];
-   static char eoprefix[0xFF];
 
    char *p;
 
-   if (reset) eina_strbuf_reset(buf);
-   if (templ) eina_strbuf_append(buf, templ);
+   _class_names_fill(classname);
+   if (buf)
+     {
+        if (reset) eina_strbuf_reset(buf);
+        if (templ) eina_strbuf_append(buf, templ);
+     }
 
    if (strcmp(classname, normclass))
      {
@@ -54,25 +78,22 @@ _template_fill(Eina_Strbuf *buf, const char* templ, const char* classname, const
         p = lowobjclass;
         eina_str_tolower(&p);
 
-        strncpy(eoprefix, lowobjclass, sizeof(eoprefix) - 1);
-
-        if (!strcmp(classname, "Elm_Widget"))
-          strncpy(eoprefix, "elm_wdg", sizeof(eoprefix) - 1);
-
         eina_strbuf_free(classobj);
      }
 
    if (funcname) strncpy(capfunc, funcname, sizeof(capfunc) - 1);
    p = capfunc; eina_str_toupper(&p);
 
-   if (funcname) eina_strbuf_replace_all(buf, "@#func", funcname);
-   eina_strbuf_replace_all(buf, "@#FUNC", capfunc);
-   eina_strbuf_replace_all(buf, "@#Class", classname);
-   eina_strbuf_replace_all(buf, "@#class", lowclass);
-   eina_strbuf_replace_all(buf, "@#CLASS", capclass);
-   eina_strbuf_replace_all(buf, "@#OBJCLASS", capobjclass);
-   eina_strbuf_replace_all(buf, "@#objclass", lowobjclass);
-   eina_strbuf_replace_all(buf, "@#eoprefix", eoprefix);
+   if (buf)
+     {
+        if (funcname) eina_strbuf_replace_all(buf, "@#func", funcname);
+        eina_strbuf_replace_all(buf, "@#FUNC", capfunc);
+        eina_strbuf_replace_all(buf, "@#Class", classname);
+        eina_strbuf_replace_all(buf, "@#class", lowclass);
+        eina_strbuf_replace_all(buf, "@#CLASS", capclass);
+        eina_strbuf_replace_all(buf, "@#OBJCLASS", capobjclass);
+        eina_strbuf_replace_all(buf, "@#objclass", lowobjclass);
+     }
 }
 
 char*
index 092533079df33f19ea53e0f5fb22cbe4027a7667..922cb2ab0bd97f0c726cb919a30513f5f18f3f58 100644 (file)
@@ -38,4 +38,7 @@ char *_startline(char *str, char *pos);
 
 char *_source_desc_get(const char *str);
 
+char current_eo_prefix_lower[256];
+
+char current_eo_prefix_upper[256];
 #endif
index 6938ee294dacd5f08f9623e234721d512b2a2091..f0075b615dcd6e145dffb9939e4b6ed186810660 100644 (file)
@@ -8,7 +8,7 @@
 static const char
 tmpl_eo_src_begin[] = "\
 \n\
-EAPI Eo_Op @#OBJCLASS_BASE_ID = EO_NOOP;\n\
+EAPI Eo_Op @#EOPREFIX_BASE_ID = EO_NOOP;\n\
 \n\
 @#list_events\n\
 \n\
@@ -51,58 +51,58 @@ static const Eo_Class_Description _@#class_class_desc = {\n\
      EO_VERSION,\n\
      \"@#Class\",\n\
      @#type_class,\n\
-     EO_CLASS_DESCRIPTION_OPS(&@#OBJCLASS_BASE_ID, _@#class_op_desc, @#OBJCLASS_SUB_ID_LAST),\n\
+     EO_CLASS_DESCRIPTION_OPS(&@#EOPREFIX_BASE_ID, _@#class_op_desc, @#EOPREFIX_SUB_ID_LAST),\n\
      _@#class_event_desc,\n\
-     sizeof(@#Class_Data),\n\
+     @#SizeOfData,\n\
      _gen_@#class_class_constructor,\n\
      @#dtor_name\n\
 };\n\
 \n\
-EO_DEFINE_CLASS(@#objclass_class_get, &_@#class_class_desc, @#list_inheritNULL);\
+EO_DEFINE_CLASS(@#eoprefix_class_get, &_@#class_class_desc, @#list_inheritNULL);\
 ";
 
 static const char
-tmpl_eo_op_desc[] = "\n     EO_OP_DESCRIPTION(@#OBJCLASS_SUB_ID_@#FUNC, \"@#desc\"),";
+tmpl_eo_op_desc[] = "\n     EO_OP_DESCRIPTION(@#EOPREFIX_SUB_ID_@#FUNC, \"@#desc\"),";
 
 static const char
-tmpl_eo_func_desc[] = "\n        EO_OP_FUNC(@#OBJCLASS_ID(@#OBJCLASS_SUB_ID_@#FUNC), _eo_obj_@#class_@#func),";
+tmpl_eo_func_desc[] = "\n        EO_OP_FUNC(@#EOPREFIX_ID(@#EOPREFIX_SUB_ID_@#FUNC), _eo_obj_@#class_@#func),";
 
 static const char
 tmpl_eobase_func_desc[] = "\n        EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_@#FUNC), _eo_obj_@#class_@#func),";
 
 static const char
-tmpl_eo_header[] = "\
-#define @#OBJCLASS_CLASS @#objclass_class_get()\n\
+tmpl_eo_obj_header[] = "\
+#define @#EOPREFIX_CLASS @#eoprefix_class_get()\n\
 \n\
-const Eo_Class *@#objclass_class_get(void) EINA_CONST;\n\
+const Eo_Class *@#eoprefix_class_get(void) EINA_CONST;\n\
 \n\
-extern EAPI Eo_Op @#OBJCLASS_BASE_ID;\n\
+extern EAPI Eo_Op @#EOPREFIX_BASE_ID;\n\
 \n\
 enum\n\
 {@#list_subid\n\
-   @#OBJCLASS_SUB_ID_LAST\n\
+   @#EOPREFIX_SUB_ID_LAST\n\
 };\n\
 \n\
-#define @#OBJCLASS_ID(sub_id) (@#OBJCLASS_BASE_ID + sub_id)\n\
+#define @#EOPREFIX_ID(sub_id) (@#EOPREFIX_BASE_ID + sub_id)\n\
 ";
 
 static const char
-tmpl_eo_subid[] = "\n   @#OBJCLASS_SUB_ID_@#FUNC,";
+tmpl_eo_subid[] = "\n   @#EOPREFIX_SUB_ID_@#FUNC,";
 
 static const char
-tmpl_eo_subid_apnd[] = "   @#OBJCLASS_SUB_ID_@#FUNC,\n";
+tmpl_eo_subid_apnd[] = "   @#EOPREFIX_SUB_ID_@#FUNC,\n";
 
 static const char
 tmpl_eo_funcdef[] = "\n\
 /**\n\
- * @def @#objclass_@#func\n\
+ * @def @#eoprefix_@#func\n\
  *\n\
 @#desc\n\
  *\n\
 @#list_desc_param\
  *\n\
  */\n\
-#define @#eoprefix_@#func(@#list_param) @#OBJCLASS_ID(@#OBJCLASS_SUB_ID_@#FUNC)@#list_typecheck\n\
+#define @#eoprefix_@#func(@#list_param) @#EOPREFIX_ID(@#EOPREFIX_SUB_ID_@#FUNC)@#list_typecheck\n\
 ";
 
 static const char
@@ -135,6 +135,7 @@ eo1_fundef_generate(const char *classname, Eolian_Function func, Eolian_Function
    void *data;
    char funcname[0xFF];
    char descname[0xFF];
+   char *tmpstr = malloc(0x1FF);
 
    char *fsuffix = "";
    if (ftype == GET) fsuffix = "_get";
@@ -147,6 +148,9 @@ eo1_fundef_generate(const char *classname, Eolian_Function func, Eolian_Function
    Eina_Strbuf *str_func = eina_strbuf_new();
    _template_fill(str_func, tmpl_eo_funcdef, classname, funcname, EINA_TRUE);
 
+   eina_strbuf_replace_all(str_func, "@#EOPREFIX", current_eo_prefix_upper);
+   eina_strbuf_replace_all(str_func, "@#eoprefix", current_eo_prefix_lower);
+
    Eina_Strbuf *linedesc = eina_strbuf_new();
    eina_strbuf_append(linedesc, funcdesc ? funcdesc : "No description supplied.");
    if (eina_strbuf_length_get(linedesc))
@@ -223,6 +227,7 @@ eo1_fundef_generate(const char *classname, Eolian_Function func, Eolian_Function
    eina_strbuf_replace_all(str_func, "@#list_desc_param", eina_strbuf_string_get(str_pardesc));
    eina_strbuf_replace_all(str_func, "@#list_typecheck", eina_strbuf_string_get(str_typecheck));
 
+   free(tmpstr);
    eina_strbuf_free(str_par);
    eina_strbuf_free(str_pardesc);
    eina_strbuf_free(str_typecheck);
@@ -239,7 +244,7 @@ eo1_header_generate(const char *classname, Eina_Strbuf *buf)
    const Eolian_Function_Type ftype_order[] = {CONSTRUCTOR, PROPERTY_FUNC, METHOD_FUNC};
    const Eina_List *l;
    void *data;
-   char tmpstr[0x1FF];
+   char *tmpstr = malloc(0x1FF);
 
    if (!eolian_class_exists(classname))
      {
@@ -248,7 +253,10 @@ eo1_header_generate(const char *classname, Eina_Strbuf *buf)
      }
 
    Eina_Strbuf * str_hdr = eina_strbuf_new();
-   _template_fill(str_hdr, tmpl_eo_header, classname, "", EINA_TRUE);
+   _template_fill(str_hdr, tmpl_eo_obj_header, classname, "", EINA_TRUE);
+
+   eina_strbuf_replace_all(str_hdr, "@#EOPREFIX", current_eo_prefix_upper);
+   eina_strbuf_replace_all(str_hdr, "@#eoprefix", current_eo_prefix_lower);
 
    Eina_Strbuf *str_subid = eina_strbuf_new();
    Eina_Strbuf *str_ev = eina_strbuf_new();
@@ -300,6 +308,7 @@ eo1_header_generate(const char *classname, Eina_Strbuf *buf)
                 _template_fill(str_subid, tmpl_eo_subid, classname, tmpstr, EINA_FALSE);
                 eo1_fundef_generate(classname, (Eolian_Function)data, GET, str_hdr);
              }
+           eina_strbuf_replace_all(str_subid, "@#EOPREFIX", current_eo_prefix_upper);
         }
 
    eina_strbuf_replace_all(str_hdr, "@#list_subid", eina_strbuf_string_get(str_subid));
@@ -307,6 +316,7 @@ eo1_header_generate(const char *classname, Eina_Strbuf *buf)
 
    eina_strbuf_append(buf, eina_strbuf_string_get(str_hdr));
 
+   free(tmpstr);
    eina_strbuf_free(str_subid);
    eina_strbuf_free(str_ev);
    eina_strbuf_free(tmpbuf);
@@ -442,7 +452,19 @@ eo1_bind_func_generate(const char *classname, Eolian_Function funcid, Eolian_Fun
    eina_strbuf_replace_all(fbody, "@#list_vars", eina_strbuf_string_get(va_args));
    eina_strbuf_replace_all(fbody, "@#full_params", eina_strbuf_string_get(full_params));
    eina_strbuf_replace_all(fbody, "@#list_params", eina_strbuf_string_get(params));
-   eina_strbuf_replace_all(fbody, "@#Datatype", classname);
+   const char *data_type = eolian_class_data_type_get(classname);
+   if (data_type && !strcmp(data_type, "null"))
+      eina_strbuf_replace_all(fbody, "@#Datatype_Data", "void *");
+   else
+     {
+        if (data_type) eina_strbuf_replace_all(fbody, "@#Datatype_Data", data_type);
+        else eina_strbuf_replace_all(fbody, "@#Datatype", classname);
+     }
+
+   if (!data_type || !strcmp(data_type, "null"))
+      eina_strbuf_replace_all(fbody, "@#Datatype", classname);
+   else
+      eina_strbuf_replace_all(fbody, "@#Datatype_Data", data_type);
    eina_strbuf_append(buf, eina_strbuf_string_get(fbody));
 
    eina_strbuf_free(va_args);
@@ -456,6 +478,7 @@ Eina_Bool
 eo1_eo_func_desc_generate(const char *classname, const char *funcname, Eina_Strbuf *buf)
 {
    _template_fill(buf, tmpl_eo_func_desc, classname, funcname, EINA_TRUE);
+   eina_strbuf_replace_all(buf, "@#EOPREFIX", current_eo_prefix_upper);
    return EINA_TRUE;
 }
 
@@ -463,6 +486,8 @@ Eina_Bool
 eo1_eo_op_desc_generate(const char *classname, const char *funcname, Eina_Strbuf *buf)
 {
    _template_fill(buf, tmpl_eo_op_desc, classname, funcname, EINA_TRUE);
+   eina_strbuf_replace_all(buf, "@#EOPREFIX", current_eo_prefix_upper);
+
    return EINA_TRUE;
 }
 
@@ -476,6 +501,7 @@ eo1_source_beginning_generate(const char *classname, Eina_Strbuf *buf)
    Eina_Strbuf *str_ev = eina_strbuf_new();
 
    _template_fill(str_begin, tmpl_eo_src_begin, classname, "", EINA_TRUE);
+   eina_strbuf_replace_all(str_begin, "@#EOPREFIX", current_eo_prefix_upper);
 
    Eolian_Event event;
    EINA_LIST_FOREACH(eolian_class_events_list_get(classname), itr, event)
@@ -547,6 +573,8 @@ eo1_source_end_generate(const char *classname, Eina_Strbuf *buf)
    _template_fill(str_end, tmpl_eo_src_end, classname, "", EINA_TRUE);
 
    eina_strbuf_replace_all(str_end, "@#type_class", str_classtype);
+   eina_strbuf_replace_all(str_end, "@#EOPREFIX", current_eo_prefix_upper);
+   eina_strbuf_replace_all(str_end, "@#eoprefix", current_eo_prefix_lower);
 
    if (eolian_class_dtor_enable_get(classname))
      {
@@ -592,7 +620,9 @@ eo1_source_end_generate(const char *classname, Eina_Strbuf *buf)
         eolian_implement_information_get(impl_desc, &impl_class, &funcname, &ftype);
 
         eina_strbuf_reset(tmpl_impl);
+        _template_fill(str_func, NULL, impl_class, NULL, EINA_FALSE); /* Invoked to set the variables */
         eina_strbuf_append(tmpl_impl, tmpl_eo_func_desc);
+        eina_strbuf_replace_all(tmpl_impl, "@#EOPREFIX", current_eo_prefix_upper);
 
         char implname[0xFF];
         char *tp = implname;
@@ -657,12 +687,15 @@ eo1_source_end_generate(const char *classname, Eina_Strbuf *buf)
         char *desc = _source_desc_get(eolian_function_description_get(fn, "comment"));
 
         _template_fill(tmpbuf, tmpl_eo_op_desc, classname, funcname, EINA_TRUE);
+        eina_strbuf_replace_all(tmpbuf, "@#EOPREFIX", current_eo_prefix_upper);
+
         eina_strbuf_replace_all(tmpbuf, "@#desc", desc);
         free(desc);
 
         eina_strbuf_append(str_op, eina_strbuf_string_get(tmpbuf));
 
         _template_fill(str_func, tmpl_eo_func_desc, classname, funcname, EINA_FALSE);
+        eina_strbuf_replace_all(str_func, "@#EOPREFIX", current_eo_prefix_upper);
         eo1_bind_func_generate(classname, fn, UNRESOLVED, str_bodyf, NULL);
      }
 
@@ -744,21 +777,29 @@ eo1_source_end_generate(const char *classname, Eina_Strbuf *buf)
    eina_strbuf_reset(tmpbuf);
    EINA_LIST_FOREACH(eolian_class_inherits_list_get(classname), itr, inherit_name)
      {
-        if (!strcmp(inherit_name, "Elm_Widget"))
-          eina_strbuf_append(tmpbuf, "ELM_OBJ_WIDGET_CLASS, ");
-        else if (!strcmp(inherit_name, "Elm_Interface_Scrollable"))
-          eina_strbuf_append(tmpbuf, "ELM_SCROLLABLE_INTERFACE, ");
-        else
-          _template_fill(tmpbuf, "@#OBJCLASS_CLASS, ", inherit_name, "", EINA_FALSE);
+        _template_fill(tmpbuf, "@#EOPREFIX_CLASS, ", inherit_name, "", EINA_FALSE);
+        eina_strbuf_replace_all(tmpbuf, "@#EOPREFIX", current_eo_prefix_upper);
      }
 
-   if (eina_strbuf_length_get(tmpbuf) == 0) eina_strbuf_append(tmpbuf,"EO_BASE_CLASS, ");
+   if (eina_strbuf_length_get(tmpbuf) == 0) eina_strbuf_append(tmpbuf, "NULL, ");
    eina_strbuf_replace_all(str_end, "@#list_inherit", eina_strbuf_string_get(tmpbuf));
 
    eina_strbuf_replace_all(str_end, "@#list_func", eina_strbuf_string_get(str_func));
    eina_strbuf_replace_all(str_end, "@#list_op", eina_strbuf_string_get(str_op));
    eina_strbuf_replace_all(str_end, "@#list_ctors_body", eina_strbuf_string_get(str_bodyf));
 
+   const char *data_type = eolian_class_data_type_get(classname);
+   if (data_type && !strcmp(data_type, "null"))
+      eina_strbuf_replace_all(str_end, "@#SizeOfData", "0");
+   else
+     {
+        Eina_Strbuf *sizeofbuf = eina_strbuf_new();
+        eina_strbuf_append_printf(sizeofbuf, "sizeof(%s%s)",
+              data_type?data_type:classname,
+              data_type?"":"_Data");
+        eina_strbuf_replace_all(str_end, "@#SizeOfData", eina_strbuf_string_get(sizeofbuf));
+        eina_strbuf_free(sizeofbuf);
+     }
    eina_strbuf_append(buf, eina_strbuf_string_get(str_end));
 
    ret = EINA_TRUE;
index d219ab1f3b0ab393b54d2f284eac01208e526527..f7b236333e881fd94a760831c4de800eb51b8d09 100644 (file)
@@ -234,18 +234,25 @@ _eapi_func_generate(const char *classname, Eolian_Function funcid, Eolian_Functi
      }
 
    func_lpref = (func_lpref) ? func_lpref : eolian_function_data_get(funcid, EOLIAN_LEGACY);
+   if (func_lpref && !strcmp(func_lpref, "null")) goto end;
+
    _template_fill(fbody, tmpl_eapi_body, classname, NULL, EINA_FALSE);
+   eina_strbuf_replace_all(fbody, "@#eoprefix", current_eo_prefix_lower);
 
    if (func_lpref)
       eina_strbuf_replace_all(fbody, "@#eapi_prefix_@#func", func_lpref);
    else
      {
         func_lpref = eolian_class_legacy_prefix_get(classname);
-        eina_strbuf_replace_all(fbody, "@#eapi_prefix", func_lpref);
 
-        strncpy(tmpstr, classname, sizeof(tmpstr) - 1);
-        char *p = tmpstr;
-        eina_str_tolower(&p);
+        if (func_lpref) eina_strbuf_replace_all(fbody, "@#eapi_prefix", func_lpref);
+        else
+          {
+             strncpy(tmpstr, classname, sizeof(tmpstr) - 1);
+             char *p = tmpstr;
+             eina_str_tolower(&p);
+             eina_strbuf_replace_all(fbody, "@#eapi_prefix", tmpstr);
+          }
      }
 
    sprintf (tmpstr, "%s%s", eolian_function_name_get(funcid), suffix);
@@ -308,6 +315,7 @@ _eapi_func_generate(const char *classname, Eolian_Function funcid, Eolian_Functi
 
    eina_strbuf_append(buf, eina_strbuf_string_get(fbody));
 
+end:
    eina_strbuf_free(fbody);
    eina_strbuf_free(fparam);
    eina_strbuf_free(eoparam);
index 215203885554ea9f25b3f96123339efe32cefbc4..b98c340f84143499f0abd665321659f8982af33f 100644 (file)
@@ -217,6 +217,27 @@ EAPI const char *eolian_class_description_get(const char *class_name);
  */
 EAPI const char *eolian_class_legacy_prefix_get(const char *class_name);
 
+/*
+ * @brief Returns the eo prefix of a class
+ *
+ * @param[in] class_name name of the class
+ * @return the eo prefix
+ *
+ * @ingroup Eolian
+ */
+EAPI const char* eolian_class_eo_prefix_get(const char *class_name);
+
+/*
+ * @brief Returns the data type of a class
+ *
+ * @param[in] class_name name of the class
+ * @return the data type
+ *
+ * @ingroup Eolian
+ */
+EAPI const char*
+eolian_class_data_type_get(const char *class_name);
+
 /*
  * @brief Returns the names list of the inherit classes of a class
  *
index db55b87935969438dc4bb9cb81fdfd387180e80f..6d1996a31ec33f54528f12e10f08d319d63347b1 100644 (file)
@@ -125,6 +125,10 @@ eo_definitions_class_def_free(Eo_Class_Def *kls)
      eina_stringshare_del(kls->comment);
    if (kls->legacy_prefix)
      eina_stringshare_del(kls->legacy_prefix);
+   if (kls->eo_prefix)
+     eina_stringshare_del(kls->eo_prefix);
+   if (kls->data_type)
+     eina_stringshare_del(kls->data_type);
 
    EINA_LIST_FOREACH(kls->inherits, l, s)
       if (s) eina_stringshare_del(s);
index 022fdfcbc672e81e32338e0a3cad20878132dfc9..f101679e03d9062e321b6fb43ccc9576b5815b63 100644 (file)
@@ -125,6 +125,8 @@ typedef struct _eo_class_def
    Eolian_Class_Type type;
    const char *comment;
    const char *legacy_prefix;
+   const char *eo_prefix;
+   const char *data_type;
    Eina_List *inherits;
    Eina_List *implements;
    Eina_List *events;
index d7fce74bb283d773e3f97092772a4440fb20b38b..5e5b2564ec5d23e523e9adae3697f9cc50f1f129 100644 (file)
@@ -297,8 +297,8 @@ static const char _eo_tokenizer_actions[] = {
        26, 1, 27, 1, 28, 1, 29, 1, 
        30, 1, 31, 1, 32, 1, 33, 1, 
        34, 1, 35, 1, 36, 1, 37, 1, 
-       38, 1, 39, 1, 40, 1, 43, 1, 
-       44, 1, 45, 1, 46, 1, 47, 1, 
+       38, 1, 39, 1, 40, 1, 41, 1, 
+       42, 1, 45, 1, 46, 1, 47, 1, 
        48, 1, 49, 1, 50, 1, 51, 1, 
        52, 1, 53, 1, 54, 1, 55, 1, 
        56, 1, 57, 1, 58, 1, 59, 1, 
@@ -307,7 +307,7 @@ static const char _eo_tokenizer_actions[] = {
        68, 1, 69, 1, 70, 1, 71, 1, 
        72, 1, 73, 1, 74, 1, 75, 1, 
        76, 1, 77, 1, 78, 1, 79, 1, 
-       80, 1, 81, 1, 84, 1, 85, 1, 
+       80, 1, 81, 1, 82, 1, 83, 1, 
        86, 1, 87, 1, 88, 1, 89, 1, 
        90, 1, 91, 1, 92, 1, 93, 1, 
        94, 1, 95, 1, 96, 1, 97, 1, 
@@ -317,22 +317,23 @@ static const char _eo_tokenizer_actions[] = {
        110, 1, 111, 1, 112, 1, 113, 1, 
        114, 1, 115, 1, 116, 1, 117, 1, 
        118, 1, 119, 1, 120, 1, 121, 1, 
-       122, 2, 0, 40, 2, 0, 51, 2, 
-       0, 60, 2, 0, 71, 2, 0, 80, 
-       2, 0, 92, 2, 0, 101, 2, 0, 
-       117, 2, 4, 46, 2, 6, 41, 2, 
-       7, 2, 2, 8, 42, 2, 9, 55, 
-       2, 11, 0, 2, 11, 72, 2, 13, 
-       87, 2, 15, 82, 2, 16, 83, 2, 
-       17, 0, 2, 17, 93, 2, 18, 0, 
-       2, 19, 0, 2, 19, 118, 2, 20, 
+       122, 1, 123, 1, 124, 1, 125, 1, 
+       126, 2, 0, 42, 2, 0, 53, 2, 
+       0, 62, 2, 0, 73, 2, 0, 82, 
+       2, 0, 94, 2, 0, 103, 2, 0, 
+       121, 2, 4, 48, 2, 6, 43, 2, 
+       7, 2, 2, 8, 44, 2, 9, 57, 
+       2, 11, 0, 2, 11, 74, 2, 13, 
+       89, 2, 15, 84, 2, 16, 85, 2, 
+       17, 0, 2, 17, 95, 2, 18, 0, 
+       2, 19, 0, 2, 19, 122, 2, 20, 
        0, 2, 21, 0, 2, 21, 2, 2, 
-       23, 0, 2, 24, 0, 2, 24, 2, 
-       2, 25, 0, 2, 27, 0, 2, 28
-       0, 2, 28, 2, 2, 35, 0, 2, 
-       35, 118, 2, 38, 1, 2, 38, 2, 
-       2, 38, 3, 2, 38, 5, 2, 38
-       10, 2, 38, 12, 2, 38, 14
+       25, 0, 2, 26, 0, 2, 26, 2, 
+       2, 27, 0, 2, 29, 0, 2, 30
+       0, 2, 30, 2, 2, 37, 0, 2, 
+       37, 122, 2, 40, 1, 2, 40, 2, 
+       2, 40, 3, 2, 40, 5, 2, 40
+       10, 2, 40, 12, 2, 40, 14
 };
 
 static const short _eo_tokenizer_key_offsets[] = {
@@ -359,30 +360,33 @@ static const short _eo_tokenizer_key_offsets[] = {
        614, 615, 616, 617, 619, 622, 623, 634, 
        638, 641, 643, 646, 657, 659, 662, 663, 
        664, 665, 666, 667, 668, 669, 670, 671, 
-       672, 673, 677, 678, 679, 680, 681, 682, 
-       683, 684, 685, 686, 690, 691, 692, 693, 
-       694, 698, 706, 714, 726, 730, 742, 743, 
-       744, 754, 756, 759, 767, 768, 769, 770, 
-       771, 772, 773, 774, 775, 779, 787, 795, 
-       808, 813, 817, 818, 819, 820, 821, 822, 
-       834, 839, 843, 852, 856, 857, 858, 859, 
-       860, 861, 865, 874, 881, 888, 899, 903, 
-       917, 927, 934, 946, 951, 957, 962, 963, 
-       964, 965, 966, 967, 970, 977, 984, 992, 
-       993, 997, 1004, 1012, 1016, 1021, 1022, 1023, 
-       1033, 1035, 1038, 1048, 1060, 1067, 1079, 1080, 
-       1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 
-       1089, 1090, 1091, 1095, 1102, 1109, 1117, 1118, 
-       1119, 1120, 1121, 1122, 1126, 1127, 1128, 1129, 
-       1130, 1131, 1132, 1133, 1134, 1138, 1146, 1149, 
-       1151, 1152, 1153, 1154, 1155, 1166, 1169, 1171, 
-       1178, 1186, 1194, 1198, 1198, 1199, 1208, 1211, 
-       1213, 1224, 1228, 1228, 1229, 1238, 1241, 1243, 
-       1244, 1245, 1246, 1247, 1248, 1257, 1260, 1262, 
-       1269, 1270, 1279, 1282, 1284, 1285, 1286, 1287, 
-       1288, 1292, 1292, 1293, 1302, 1305, 1307, 1314, 
-       1315, 1327, 1330, 1332, 1333, 1334, 1335, 1336, 
-       1337, 1338, 1339, 1342, 1343, 1344
+       672, 673, 677, 678, 679, 683, 690, 697, 
+       705, 706, 707, 708, 709, 710, 711, 712, 
+       713, 714, 718, 719, 720, 721, 722, 723, 
+       724, 725, 729, 736, 743, 751, 752, 753, 
+       754, 755, 759, 767, 775, 787, 791, 803, 
+       804, 805, 815, 817, 820, 828, 829, 830, 
+       831, 832, 833, 834, 835, 836, 840, 848, 
+       856, 869, 874, 878, 879, 880, 881, 882, 
+       883, 895, 900, 904, 913, 917, 918, 919, 
+       920, 921, 922, 926, 935, 942, 949, 960, 
+       964, 978, 988, 995, 1007, 1012, 1018, 1023, 
+       1024, 1025, 1026, 1027, 1028, 1031, 1038, 1045, 
+       1053, 1054, 1058, 1065, 1073, 1077, 1082, 1083, 
+       1084, 1094, 1096, 1099, 1109, 1121, 1128, 1140, 
+       1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 
+       1149, 1150, 1151, 1152, 1156, 1163, 1170, 1178, 
+       1179, 1180, 1181, 1182, 1183, 1187, 1188, 1189, 
+       1190, 1191, 1192, 1193, 1194, 1195, 1199, 1207, 
+       1210, 1212, 1213, 1214, 1215, 1216, 1227, 1230, 
+       1232, 1239, 1247, 1255, 1259, 1259, 1260, 1269, 
+       1272, 1274, 1285, 1289, 1289, 1290, 1299, 1302, 
+       1304, 1305, 1306, 1307, 1308, 1309, 1318, 1321, 
+       1323, 1330, 1331, 1340, 1343, 1345, 1346, 1347, 
+       1348, 1349, 1353, 1353, 1354, 1363, 1366, 1368, 
+       1375, 1376, 1388, 1391, 1393, 1394, 1396, 1399, 
+       1401, 1404, 1405, 1406, 1407, 1408, 1411, 1412, 
+       1413
 };
 
 static const char _eo_tokenizer_trans_keys[] = {
@@ -470,91 +474,99 @@ static const char _eo_tokenizer_trans_keys[] = {
        95, 0, 32, 48, 57, 64, 90, 97, 
        122, 10, 42, 10, 42, 47, 10, 110, 
        115, 116, 114, 117, 99, 116, 111, 114, 
-       115, 10, 123, 0, 32, 115, 116, 114, 
-       117, 99, 116, 111, 114, 115, 10, 123, 
-       0, 32, 101, 110, 116, 115, 10, 123, 
-       0, 32, 10, 125, 0, 32, 65, 90, 
-       97, 122, 44, 95, 48, 57, 65, 90, 
-       97, 122, 10, 44, 59, 95, 0, 32, 
-       48, 57, 65, 90, 97, 122, 10, 59, 
-       0, 32, 9, 10, 13, 32, 47, 125, 
-       0, 31, 65, 90, 97, 122, 42, 64, 
-       10, 95, 0, 32, 48, 57, 64, 90, 
-       97, 122, 10, 42, 10, 42, 47, 10, 
-       125, 0, 32, 65, 90, 97, 122, 112, 
-       108, 101, 109, 101, 110, 116, 115, 10, 
-       123, 0, 32, 10, 125, 0, 32, 65, 
-       90, 97, 122, 58, 95, 48, 57, 65, 
-       90, 97, 122, 10, 58, 59, 95, 123, 
-       0, 32, 48, 57, 65, 90, 97, 122, 
-       10, 59, 123, 0, 32, 10, 108, 0, 
-       32, 101, 103, 97, 99, 121, 9, 10, 
-       13, 32, 59, 123, 0, 31, 65, 90, 
-       97, 122, 10, 59, 123, 0, 32, 10, 
-       125, 0, 32, 10, 59, 125, 0, 32, 
-       65, 90, 97, 122, 10, 112, 0, 32, 
-       97, 114, 97, 109, 115, 10, 123, 0, 
-       32, 10, 58, 59, 0, 32, 65, 90, 
-       97, 122, 9, 13, 32, 65, 90, 97, 
-       122, 95, 48, 57, 65, 90, 97, 122, 
-       10, 59, 95, 0, 32, 48, 57, 65, 
+       115, 10, 123, 0, 32, 116, 97, 10, 
+       58, 0, 32, 10, 0, 32, 65, 90, 
+       97, 122, 95, 48, 57, 65, 90, 97, 
+       122, 59, 95, 48, 57, 65, 90, 97, 
+       122, 115, 116, 114, 117, 99, 116, 111, 
+       114, 115, 10, 123, 0, 32, 95, 112, 
+       114, 101, 102, 105, 120, 10, 58, 0, 
+       32, 10, 0, 32, 65, 90, 97, 122, 
+       95, 48, 57, 65, 90, 97, 122, 59, 
+       95, 48, 57, 65, 90, 97, 122, 101, 
+       110, 116, 115, 10, 123, 0, 32, 10, 
+       125, 0, 32, 65, 90, 97, 122, 44, 
+       95, 48, 57, 65, 90, 97, 122, 10, 
+       44, 59, 95, 0, 32, 48, 57, 65, 
        90, 97, 122, 10, 59, 0, 32, 9, 
-       10, 13, 32, 47, 58, 59, 125, 0, 
-       31, 65, 90, 97, 122, 10, 58, 59, 
-       125, 0, 32, 65, 90, 97, 122, 95, 
-       48, 57, 65, 90, 97, 122, 9, 13, 
-       32, 58, 59, 95, 48, 57, 65, 90, 
-       97, 122, 9, 13, 32, 58, 59, 10, 
-       59, 114, 125, 0, 32, 10, 114, 125, 
-       0, 32, 101, 116, 117, 114, 110, 9, 
-       13, 32, 9, 13, 32, 65, 90, 97, 
-       122, 95, 48, 57, 65, 90, 97, 122, 
+       10, 13, 32, 47, 125, 0, 31, 65, 
+       90, 97, 122, 42, 64, 10, 95, 0, 
+       32, 48, 57, 64, 90, 97, 122, 10, 
+       42, 10, 42, 47, 10, 125, 0, 32, 
+       65, 90, 97, 122, 112, 108, 101, 109, 
+       101, 110, 116, 115, 10, 123, 0, 32, 
+       10, 125, 0, 32, 65, 90, 97, 122, 
        58, 95, 48, 57, 65, 90, 97, 122, 
-       58, 65, 90, 97, 122, 95, 48, 57, 
-       65, 90, 97, 122, 59, 95, 48, 57, 
-       65, 90, 97, 122, 10, 125, 0, 32, 
-       10, 59, 125, 0, 32, 42, 64, 10, 
-       95, 0, 32, 48, 57, 64, 90, 97, 
-       122, 10, 42, 10, 42, 47, 10, 58, 
-       59, 125, 0, 32, 65, 90, 97, 122, 
-       9, 10, 13, 32, 59, 123, 0, 31, 
+       10, 58, 59, 95, 123, 0, 32, 48, 
+       57, 65, 90, 97, 122, 10, 59, 123, 
+       0, 32, 10, 108, 0, 32, 101, 103, 
+       97, 99, 121, 9, 10, 13, 32, 59, 
+       123, 0, 31, 65, 90, 97, 122, 10, 
+       59, 123, 0, 32, 10, 125, 0, 32, 
+       10, 59, 125, 0, 32, 65, 90, 97, 
+       122, 10, 112, 0, 32, 97, 114, 97, 
+       109, 115, 10, 123, 0, 32, 10, 58, 
+       59, 0, 32, 65, 90, 97, 122, 9, 
+       13, 32, 65, 90, 97, 122, 95, 48, 
+       57, 65, 90, 97, 122, 10, 59, 95, 
+       0, 32, 48, 57, 65, 90, 97, 122, 
+       10, 59, 0, 32, 9, 10, 13, 32, 
+       47, 58, 59, 125, 0, 31, 65, 90, 
+       97, 122, 10, 58, 59, 125, 0, 32, 
        65, 90, 97, 122, 95, 48, 57, 65, 
-       90, 97, 122, 10, 59, 95, 123, 0, 
-       32, 48, 57, 65, 90, 97, 122, 58, 
-       103, 97, 99, 121, 95, 112, 114, 101, 
-       102, 105, 120, 10, 58, 0, 32, 10, 
-       0, 32, 65, 90, 97, 122, 95, 48, 
-       57, 65, 90, 97, 122, 59, 95, 48, 
-       57, 65, 90, 97, 122, 116, 104, 111, 
-       100, 115, 10, 123, 0, 32, 111, 112, 
-       101, 114, 116, 105, 101, 115, 10, 123, 
-       0, 32, 10, 47, 97, 99, 105, 109, 
-       0, 32, 10, 0, 32, 42, 47, 98, 
-       108, 110, 105, 10, 47, 108, 114, 125, 
-       0, 32, 65, 90, 97, 122, 10, 0, 
-       32, 42, 47, 95, 48, 57, 65, 90, 
-       97, 122, 95, 101, 48, 57, 65, 90, 
-       97, 122, 95, 101, 48, 57, 65, 90, 
-       97, 122, 9, 13, 32, 47, 59, 10, 
-       47, 125, 0, 32, 64, 90, 97, 122, 
-       10, 0, 32, 42, 47, 9, 13, 32, 
-       42, 95, 48, 57, 64, 90, 97, 122, 
-       9, 13, 32, 47, 59, 10, 47, 103, 
-       107, 115, 118, 125, 0, 32, 10, 0, 
-       32, 42, 47, 101, 101, 101, 97, 59, 
-       10, 47, 125, 0, 32, 65, 90, 97, 
-       122, 10, 0, 32, 42, 47, 95, 48, 
-       57, 65, 90, 97, 122, 59, 10, 47, 
-       99, 108, 112, 114, 125, 0, 32, 10, 
-       0, 32, 42, 47, 111, 101, 97, 101, 
-       9, 13, 32, 47, 59, 10, 47, 125, 
+       90, 97, 122, 9, 13, 32, 58, 59, 
+       95, 48, 57, 65, 90, 97, 122, 9, 
+       13, 32, 58, 59, 10, 59, 114, 125, 
+       0, 32, 10, 114, 125, 0, 32, 101, 
+       116, 117, 114, 110, 9, 13, 32, 9, 
+       13, 32, 65, 90, 97, 122, 95, 48, 
+       57, 65, 90, 97, 122, 58, 95, 48, 
+       57, 65, 90, 97, 122, 58, 65, 90, 
+       97, 122, 95, 48, 57, 65, 90, 97, 
+       122, 59, 95, 48, 57, 65, 90, 97, 
+       122, 10, 125, 0, 32, 10, 59, 125, 
+       0, 32, 42, 64, 10, 95, 0, 32, 
+       48, 57, 64, 90, 97, 122, 10, 42, 
+       10, 42, 47, 10, 58, 59, 125, 0, 
+       32, 65, 90, 97, 122, 9, 10, 13, 
+       32, 59, 123, 0, 31, 65, 90, 97, 
+       122, 95, 48, 57, 65, 90, 97, 122, 
+       10, 59, 95, 123, 0, 32, 48, 57, 
+       65, 90, 97, 122, 58, 103, 97, 99, 
+       121, 95, 112, 114, 101, 102, 105, 120, 
+       10, 58, 0, 32, 10, 0, 32, 65, 
+       90, 97, 122, 95, 48, 57, 65, 90, 
+       97, 122, 59, 95, 48, 57, 65, 90, 
+       97, 122, 116, 104, 111, 100, 115, 10, 
+       123, 0, 32, 111, 112, 101, 114, 116, 
+       105, 101, 115, 10, 123, 0, 32, 10, 
+       47, 97, 99, 105, 109, 0, 32, 10, 
+       0, 32, 42, 47, 98, 108, 110, 105, 
+       10, 47, 108, 114, 125, 0, 32, 65, 
+       90, 97, 122, 10, 0, 32, 42, 47, 
+       95, 48, 57, 65, 90, 97, 122, 95, 
+       101, 48, 57, 65, 90, 97, 122, 95, 
+       101, 48, 57, 65, 90, 97, 122, 9, 
+       13, 32, 47, 59, 10, 47, 125, 0, 
+       32, 64, 90, 97, 122, 10, 0, 32, 
+       42, 47, 9, 13, 32, 42, 95, 48, 
+       57, 64, 90, 97, 122, 9, 13, 32, 
+       47, 59, 10, 47, 103, 107, 115, 118, 
+       125, 0, 32, 10, 0, 32, 42, 47, 
+       101, 101, 101, 97, 59, 10, 47, 125, 
        0, 32, 65, 90, 97, 122, 10, 0, 
        32, 42, 47, 95, 48, 57, 65, 90, 
-       97, 122, 59, 10, 47, 99, 100, 101, 
-       105, 108, 109, 112, 125, 0, 32, 10, 
-       0, 32, 42, 47, 111, 101, 118, 59, 
-       109, 59, 101, 10, 0, 32, 101, 114, 
-       59, 0
+       97, 122, 59, 10, 47, 99, 108, 112, 
+       114, 125, 0, 32, 10, 0, 32, 42, 
+       47, 111, 101, 97, 101, 9, 13, 32, 
+       47, 59, 10, 47, 125, 0, 32, 65, 
+       90, 97, 122, 10, 0, 32, 42, 47, 
+       95, 48, 57, 65, 90, 97, 122, 59, 
+       10, 47, 99, 100, 101, 105, 108, 109, 
+       112, 125, 0, 32, 10, 0, 32, 42, 
+       47, 111, 97, 101, 10, 0, 32, 111, 
+       118, 10, 0, 32, 59, 109, 59, 101, 
+       10, 0, 32, 101, 114, 59, 0
 };
 
 static const char _eo_tokenizer_single_lengths[] = {
@@ -581,30 +593,33 @@ static const char _eo_tokenizer_single_lengths[] = {
        1, 1, 1, 2, 3, 1, 3, 2, 
        3, 2, 3, 3, 2, 3, 1, 1, 
        1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 2, 1, 1, 2, 1, 1, 2, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
        1, 2, 1, 1, 1, 1, 1, 1, 
-       1, 1, 1, 2, 1, 1, 1, 1, 
-       2, 2, 2, 4, 2, 6, 1, 1, 
-       2, 2, 3, 2, 1, 1, 1, 1, 
-       1, 1, 1, 1, 2, 2, 2, 5
-       3, 2, 1, 1, 1, 1, 1, 6
-       3, 2, 3, 2, 1, 1, 1, 1, 
-       1, 2, 3, 3, 1, 3, 2, 8
-       4, 1, 6, 5, 4, 3, 1, 1, 
-       1, 1, 1, 3, 3, 1, 2, 1
-       0, 1, 2, 2, 3, 1, 1, 2
-       2, 3, 4, 6, 1, 4, 1, 1, 
+       1, 2, 1, 1, 2, 1, 1, 1, 
+       1, 2, 2, 2, 4, 2, 6, 1, 
+       1, 2, 2, 3, 2, 1, 1, 1, 
+       1, 1, 1, 1, 1, 2, 2, 2
+       5, 3, 2, 1, 1, 1, 1, 1
+       6, 3, 2, 3, 2, 1, 1, 1, 
+       1, 1, 2, 3, 3, 1, 3, 2
+       8, 4, 1, 6, 5, 4, 3, 1, 
+       1, 1, 1, 1, 3, 3, 1, 2
+       1, 0, 1, 2, 2, 3, 1, 1
+       2, 2, 3, 4, 6, 1, 4, 1, 
        1, 1, 1, 1, 1, 1, 1, 1, 
-       1, 1, 2, 1, 1, 2, 1, 1, 
-       1, 1, 1, 2, 1, 1, 1, 1, 
-       1, 1, 1, 1, 2, 6, 1, 2, 
-       1, 1, 1, 1, 5, 1, 2, 1, 
-       2, 2, 4, 0, 1, 3, 1, 2, 
-       5, 4, 0, 1, 7, 1, 2, 1, 
-       1, 1, 1, 1, 3, 1, 2, 1, 
-       1, 7, 1, 2, 1, 1, 1, 1, 
-       4, 0, 1, 3, 1, 2, 1, 1, 
-       10, 1, 2, 1, 1, 1, 1, 1, 
-       1, 1, 1, 1, 1, 1
+       1, 1, 1, 2, 1, 1, 2, 1, 
+       1, 1, 1, 1, 2, 1, 1, 1, 
+       1, 1, 1, 1, 1, 2, 6, 1, 
+       2, 1, 1, 1, 1, 5, 1, 2, 
+       1, 2, 2, 4, 0, 1, 3, 1, 
+       2, 5, 4, 0, 1, 7, 1, 2, 
+       1, 1, 1, 1, 1, 3, 1, 2, 
+       1, 1, 7, 1, 2, 1, 1, 1, 
+       1, 4, 0, 1, 3, 1, 2, 1, 
+       1, 10, 1, 2, 1, 2, 1, 2, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1
 };
 
 static const char _eo_tokenizer_range_lengths[] = {
@@ -631,30 +646,33 @@ static const char _eo_tokenizer_range_lengths[] = {
        0, 0, 0, 0, 0, 0, 4, 1, 
        0, 0, 0, 4, 0, 0, 0, 0, 
        0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 1, 0, 0, 1, 3, 3, 3, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
        0, 1, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 1, 0, 0, 0, 0, 
-       1, 3, 3, 4, 1, 3, 0, 0, 
-       4, 0, 0, 3, 0, 0, 0, 0, 
-       0, 0, 0, 0, 1, 3, 3, 4
-       1, 1, 0, 0, 0, 0, 0, 3
-       1, 1, 3, 1, 0, 0, 0, 0, 
-       0, 1, 3, 2, 3, 4, 1, 3
-       3, 3, 3, 0, 1, 1, 0, 0, 
-       0, 0, 0, 0, 2, 3, 3, 0
-       2, 3, 3, 1, 1, 0, 0, 4
-       0, 0, 3, 3, 3, 4, 0, 0, 
+       0, 1, 3, 3, 3, 0, 0, 0, 
+       0, 1, 3, 3, 4, 1, 3, 0, 
+       0, 4, 0, 0, 3, 0, 0, 0, 
+       0, 0, 0, 0, 0, 1, 3, 3
+       4, 1, 1, 0, 0, 0, 0, 0
+       3, 1, 1, 3, 1, 0, 0, 0, 
+       0, 0, 1, 3, 2, 3, 4, 1
+       3, 3, 3, 3, 0, 1, 1, 0, 
+       0, 0, 0, 0, 0, 2, 3, 3
+       0, 2, 3, 3, 1, 1, 0, 0
+       4, 0, 0, 3, 3, 3, 4, 0, 
        0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 1, 3, 3, 3, 0, 0, 
-       0, 0, 0, 1, 0, 0, 0, 0, 
-       0, 0, 0, 0, 1, 1, 1, 0, 
+       0, 0, 0, 1, 3, 3, 3, 0, 
+       0, 0, 0, 0, 1, 0, 0, 0, 
+       0, 0, 0, 0, 0, 1, 1, 1, 
+       0, 0, 0, 0, 0, 3, 1, 0, 
+       3, 3, 3, 0, 0, 0, 3, 1, 
+       0, 3, 0, 0, 0, 1, 1, 0, 
+       0, 0, 0, 0, 0, 3, 1, 0, 
+       3, 0, 1, 1, 0, 0, 0, 0, 
        0, 0, 0, 0, 3, 1, 0, 3, 
-       3, 3, 0, 0, 0, 3, 1, 0, 
-       3, 0, 0, 0, 1, 1, 0, 0, 
-       0, 0, 0, 0, 3, 1, 0, 3, 
-       0, 1, 1, 0, 0, 0, 0, 0, 
-       0, 0, 0, 3, 1, 0, 3, 0, 
-       1, 1, 0, 0, 0, 0, 0, 0, 
-       0, 0, 1, 0, 0, 0
+       0, 1, 1, 0, 0, 0, 1, 0, 
+       1, 0, 0, 0, 0, 1, 0, 0, 
+       0
 };
 
 static const short _eo_tokenizer_index_offsets[] = {
@@ -681,30 +699,33 @@ static const short _eo_tokenizer_index_offsets[] = {
        644, 646, 648, 650, 653, 657, 659, 667, 
        671, 675, 678, 682, 690, 693, 697, 699, 
        701, 703, 705, 707, 709, 711, 713, 715, 
-       717, 719, 723, 725, 727, 729, 731, 733, 
-       735, 737, 739, 741, 745, 747, 749, 751, 
-       753, 757, 763, 769, 778, 782, 792, 794, 
-       796, 803, 806, 810, 816, 818, 820, 822, 
-       824, 826, 828, 830, 832, 836, 842, 848, 
-       858, 863, 867, 869, 871, 873, 875, 877, 
-       887, 892, 896, 903, 907, 909, 911, 913, 
-       915, 917, 921, 928, 934, 939, 947, 951, 
-       963, 971, 976, 986, 992, 998, 1003, 1005, 
-       1007, 1009, 1011, 1013, 1017, 1023, 1028, 1034, 
-       1036, 1039, 1044, 1050, 1054, 1059, 1061, 1063, 
-       1070, 1073, 1077, 1085, 1095, 1100, 1109, 1111, 
-       1113, 1115, 1117, 1119, 1121, 1123, 1125, 1127, 
-       1129, 1131, 1133, 1137, 1142, 1147, 1153, 1155, 
-       1157, 1159, 1161, 1163, 1167, 1169, 1171, 1173, 
-       1175, 1177, 1179, 1181, 1183, 1187, 1195, 1198, 
-       1201, 1203, 1205, 1207, 1209, 1218, 1221, 1224, 
-       1229, 1235, 1241, 1246, 1247, 1249, 1256, 1259, 
-       1262, 1271, 1276, 1277, 1279, 1288, 1291, 1294, 
-       1296, 1298, 1300, 1302, 1304, 1311, 1314, 1317, 
-       1322, 1324, 1333, 1336, 1339, 1341, 1343, 1345, 
-       1347, 1352, 1353, 1355, 1362, 1365, 1368, 1373, 
-       1375, 1387, 1390, 1393, 1395, 1397, 1399, 1401, 
-       1403, 1405, 1407, 1410, 1412, 1414
+       717, 719, 723, 725, 727, 731, 736, 741, 
+       747, 749, 751, 753, 755, 757, 759, 761, 
+       763, 765, 769, 771, 773, 775, 777, 779, 
+       781, 783, 787, 792, 797, 803, 805, 807, 
+       809, 811, 815, 821, 827, 836, 840, 850, 
+       852, 854, 861, 864, 868, 874, 876, 878, 
+       880, 882, 884, 886, 888, 890, 894, 900, 
+       906, 916, 921, 925, 927, 929, 931, 933, 
+       935, 945, 950, 954, 961, 965, 967, 969, 
+       971, 973, 975, 979, 986, 992, 997, 1005, 
+       1009, 1021, 1029, 1034, 1044, 1050, 1056, 1061, 
+       1063, 1065, 1067, 1069, 1071, 1075, 1081, 1086, 
+       1092, 1094, 1097, 1102, 1108, 1112, 1117, 1119, 
+       1121, 1128, 1131, 1135, 1143, 1153, 1158, 1167, 
+       1169, 1171, 1173, 1175, 1177, 1179, 1181, 1183, 
+       1185, 1187, 1189, 1191, 1195, 1200, 1205, 1211, 
+       1213, 1215, 1217, 1219, 1221, 1225, 1227, 1229, 
+       1231, 1233, 1235, 1237, 1239, 1241, 1245, 1253, 
+       1256, 1259, 1261, 1263, 1265, 1267, 1276, 1279, 
+       1282, 1287, 1293, 1299, 1304, 1305, 1307, 1314, 
+       1317, 1320, 1329, 1334, 1335, 1337, 1346, 1349, 
+       1352, 1354, 1356, 1358, 1360, 1362, 1369, 1372, 
+       1375, 1380, 1382, 1391, 1394, 1397, 1399, 1401, 
+       1403, 1405, 1410, 1411, 1413, 1420, 1423, 1426, 
+       1431, 1433, 1445, 1448, 1451, 1453, 1456, 1459, 
+       1462, 1465, 1467, 1469, 1471, 1473, 1476, 1478, 
+       1480
 };
 
 static const short _eo_tokenizer_indicies[] = {
@@ -799,249 +820,265 @@ static const short _eo_tokenizer_indicies[] = {
        255, 272, 255, 273, 255, 274, 255, 275, 
        255, 276, 255, 277, 255, 278, 255, 279, 
        280, 278, 255, 281, 255, 282, 255, 283, 
-       255, 284, 255, 285, 255, 286, 255, 287, 
-       255, 288, 255, 289, 255, 290, 291, 289, 
+       284, 282, 255, 285, 284, 286, 286, 255, 
+       287, 287, 287, 287, 255, 288, 287, 287, 
+       287, 287, 255, 289, 255, 290, 255, 291, 
        255, 292, 255, 293, 255, 294, 255, 295, 
-       255, 296, 297, 295, 255, 298, 300, 297, 
-       299, 299, 255, 301, 301, 301, 301, 301
-       255, 303, 301, 304, 301, 302, 301, 301
-       301, 255, 306, 307, 305, 255, 307, 298
-       307, 307, 308, 300, 297, 299, 299, 255
-       309, 255, 310, 255, 311, 312, 310, 312
-       312, 312, 255, 314, 315, 313, 314, 315
-       316, 313, 318, 320, 317, 319, 319, 255
-       321, 255, 322, 255, 323, 255, 324, 255
-       325, 255, 326, 255, 327, 255, 328, 255, 
-       329, 330, 328, 255, 331, 333, 330, 332
-       332, 255, 335, 334, 334, 334, 334, 255
-       337, 335, 338, 334, 339, 336, 334, 334, 
-       334, 255, 341, 330, 342, 340, 255, 343
-       344, 342, 255, 345, 255, 346, 255, 347
-       255, 348, 255, 349, 255, 351, 352, 351
-       351, 353, 355, 350, 354, 354, 255, 357
-       358, 359, 356, 255, 360, 361, 358, 255, 
-       331, 330, 333, 330, 332, 332, 255, 362
-       363, 359, 255, 364, 255, 365, 255, 366
-       255, 367, 255, 368, 255, 369, 370, 368
-       255, 371, 372, 373, 370, 374, 374, 255
-       372, 372, 372, 375, 375, 255, 376, 376
-       376, 376, 255, 378, 379, 376, 377, 376
-       376, 376, 255, 381, 373, 380, 255, 373, 
-       383, 373, 373, 384, 372, 373, 385, 382
-       374, 374, 255, 383, 372, 373, 385, 382
-       374, 374, 255, 386, 386, 386, 386, 255, 
-       387, 387, 387, 388, 389, 386, 386, 386
-       386, 255, 390, 390, 390, 372, 373, 255
-       392, 391, 393, 394, 391, 255, 392, 393
-       394, 391, 255, 395, 255, 396, 255, 397
-       255, 398, 255, 399, 255, 400, 400, 400
-       255, 400, 400, 400, 401, 401, 255, 402
-       402, 402, 402, 255, 403, 402, 402, 402
-       402, 255, 404, 255, 405, 405, 255, 406
-       406, 406, 406, 255, 407, 406, 406, 406
-       406, 255, 409, 394, 408, 255, 360, 358
-       361, 358, 255, 410, 255, 411, 255, 412
-       413, 411, 413, 413, 413, 255, 415, 416
-       414, 415, 416, 417, 414, 419, 420, 421
-       423, 418, 422, 422, 255, 424, 357, 424
-       424, 358, 359, 356, 425, 425, 255, 426
-       426, 426, 426, 255, 428, 429, 426, 430
-       427, 426, 426, 426, 255, 334, 255, 431
-       255, 432, 255, 433, 255, 434, 255, 435, 
-       255, 436, 255, 437, 255, 438, 255, 439
-       255, 440, 255, 441, 255, 442, 443, 441
-       255, 444, 443, 445, 445, 255, 446, 446, 
-       446, 446, 255, 447, 446, 446, 446, 446
-       255, 448, 255, 449, 255, 450, 255, 451
-       255, 452, 255, 453, 454, 452, 255, 455, 
+       255, 296, 255, 297, 255, 298, 299, 297, 
+       255, 300, 255, 301, 255, 302, 255, 303
+       255, 304, 255, 305, 255, 306, 255, 307
+       308, 306, 255, 309, 308, 310, 310, 255
+       311, 311, 311, 311, 255, 312, 311, 311
+       311, 311, 255, 313, 255, 314, 255, 315
+       255, 316, 255, 317, 318, 316, 255, 319
+       321, 318, 320, 320, 255, 322, 322, 322
+       322, 322, 255, 324, 322, 325, 322, 323
+       322, 322, 322, 255, 327, 328, 326, 255, 
+       328, 319, 328, 328, 329, 321, 318, 320
+       320, 255, 330, 255, 331, 255, 332, 333
+       331, 333, 333, 333, 255, 335, 336, 334, 
+       335, 336, 337, 334, 339, 341, 338, 340
+       340, 255, 342, 255, 343, 255, 344, 255
+       345, 255, 346, 255, 347, 255, 348, 255
+       349, 255, 350, 351, 349, 255, 352, 354
+       351, 353, 353, 255, 356, 355, 355, 355, 
+       355, 255, 358, 356, 359, 355, 360, 357
+       355, 355, 355, 255, 362, 351, 363, 361
+       255, 364, 365, 363, 255, 366, 255, 367
+       255, 368, 255, 369, 255, 370, 255, 372
+       373, 372, 372, 374, 376, 371, 375, 375
+       255, 378, 379, 380, 377, 255, 381, 382
+       379, 255, 352, 351, 354, 351, 353, 353, 
+       255, 383, 384, 380, 255, 385, 255, 386
+       255, 387, 255, 388, 255, 389, 255, 390
+       391, 389, 255, 392, 393, 394, 391, 395, 
+       395, 255, 393, 393, 393, 396, 396, 255
+       397, 397, 397, 397, 255, 399, 400, 397
+       398, 397, 397, 397, 255, 402, 394, 401
+       255, 394, 404, 394, 394, 405, 393, 394
+       406, 403, 395, 395, 255, 404, 393, 394
+       406, 403, 395, 395, 255, 407, 407, 407
+       407, 255, 408, 408, 408, 409, 410, 407
+       407, 407, 407, 255, 411, 411, 411, 393
+       394, 255, 413, 412, 414, 415, 412, 255
+       413, 414, 415, 412, 255, 416, 255, 417
+       255, 418, 255, 419, 255, 420, 255, 421
+       421, 421, 255, 421, 421, 421, 422, 422
+       255, 423, 423, 423, 423, 255, 424, 423
+       423, 423, 423, 255, 425, 255, 426, 426
+       255, 427, 427, 427, 427, 255, 428, 427
+       427, 427, 427, 255, 430, 415, 429, 255
+       381, 379, 382, 379, 255, 431, 255, 432
+       255, 433, 434, 432, 434, 434, 434, 255, 
+       436, 437, 435, 436, 437, 438, 435, 440
+       441, 442, 444, 439, 443, 443, 255, 445
+       378, 445, 445, 379, 380, 377, 446, 446, 
+       255, 447, 447, 447, 447, 255, 449, 450
+       447, 451, 448, 447, 447, 447, 255, 355
+       255, 452, 255, 453, 255, 454, 255, 455, 
        255, 456, 255, 457, 255, 458, 255, 459, 
        255, 460, 255, 461, 255, 462, 255, 463, 
-       464, 462, 255, 467, 468, 469, 470, 471, 
-       472, 466, 465, 467, 466, 473, 1, 5, 
-       474, 475, 474, 476, 474, 477, 474, 478, 
-       474, 481, 482, 484, 485, 486, 480, 483, 
-       483, 479, 481, 480, 487, 489, 69, 488, 
-       72, 72, 72, 72, 488, 72, 490, 72, 
-       72, 72, 488, 72, 491, 72, 72, 72, 
-       488, 98, 98, 98, 99, 492, 493, 495, 
-       494, 498, 499, 501, 497, 500, 500, 496, 
-       498, 497, 502, 121, 125, 503, 127, 127, 
-       127, 127, 127, 127, 127, 127, 503, 130, 
-       130, 130, 131, 504, 505, 507, 506, 510, 
-       511, 512, 513, 514, 515, 516, 509, 508, 
-       510, 509, 517, 141, 145, 518, 519, 518, 
-       520, 518, 521, 518, 522, 518, 524, 523, 
-       527, 528, 530, 526, 529, 529, 525, 527, 
-       526, 531, 164, 168, 532, 172, 172, 172, 
-       172, 532, 534, 533, 537, 538, 539, 540, 
-       541, 542, 543, 536, 535, 537, 536, 544, 
-       546, 189, 545, 547, 545, 548, 545, 549, 
-       545, 550, 545, 219, 219, 219, 220, 551, 
-       552, 554, 553, 557, 558, 560, 556, 559, 
-       559, 555, 557, 556, 561, 242, 246, 562, 
-       250, 250, 250, 250, 562, 564, 563, 567, 
-       568, 569, 570, 571, 572, 573, 574, 575, 
-       576, 566, 565, 567, 566, 577, 579, 267, 
-       578, 580, 578, 581, 578, 582, 578, 584, 
-       583, 585, 578, 587, 586, 588, 578, 591, 
-       590, 589, 592, 578, 593, 578, 595, 594, 
-       0
+       464, 462, 255, 465, 464, 466, 466, 255, 
+       467, 467, 467, 467, 255, 468, 467, 467, 
+       467, 467, 255, 469, 255, 470, 255, 471, 
+       255, 472, 255, 473, 255, 474, 475, 473, 
+       255, 476, 255, 477, 255, 478, 255, 479, 
+       255, 480, 255, 481, 255, 482, 255, 483, 
+       255, 484, 485, 483, 255, 488, 489, 490, 
+       491, 492, 493, 487, 486, 488, 487, 494, 
+       1, 5, 495, 496, 495, 497, 495, 498, 
+       495, 499, 495, 502, 503, 505, 506, 507, 
+       501, 504, 504, 500, 502, 501, 508, 510, 
+       69, 509, 72, 72, 72, 72, 509, 72, 
+       511, 72, 72, 72, 509, 72, 512, 72, 
+       72, 72, 509, 98, 98, 98, 99, 513, 
+       514, 516, 515, 519, 520, 522, 518, 521, 
+       521, 517, 519, 518, 523, 121, 125, 524, 
+       127, 127, 127, 127, 127, 127, 127, 127, 
+       524, 130, 130, 130, 131, 525, 526, 528, 
+       527, 531, 532, 533, 534, 535, 536, 537, 
+       530, 529, 531, 530, 538, 141, 145, 539, 
+       540, 539, 541, 539, 542, 539, 543, 539, 
+       545, 544, 548, 549, 551, 547, 550, 550, 
+       546, 548, 547, 552, 164, 168, 553, 172, 
+       172, 172, 172, 553, 555, 554, 558, 559, 
+       560, 561, 562, 563, 564, 557, 556, 558, 
+       557, 565, 567, 189, 566, 568, 566, 569, 
+       566, 570, 566, 571, 566, 219, 219, 219, 
+       220, 572, 573, 575, 574, 578, 579, 581, 
+       577, 580, 580, 576, 578, 577, 582, 242, 
+       246, 583, 250, 250, 250, 250, 583, 585, 
+       584, 588, 589, 590, 591, 592, 593, 594, 
+       595, 596, 597, 587, 586, 588, 587, 598, 
+       600, 267, 599, 601, 599, 602, 603, 599, 
+       606, 605, 604, 607, 608, 599, 611, 610, 
+       609, 613, 612, 614, 599, 616, 615, 617, 
+       599, 620, 619, 618, 621, 599, 622, 599, 
+       624, 623, 0
 };
 
 static const short _eo_tokenizer_trans_targs[] = {
-       309, 0, 0, 1, 309, 2, 309, 4, 
+       326, 0, 0, 1, 326, 2, 326, 4, 
        5, 6, 7, 8, 9, 10, 10, 11, 
-       12, 13, 14, 13, 15, 309, 13, 13, 
-       309, 14, 15, 16, 17, 13, 13, 309
+       12, 13, 14, 13, 15, 326, 13, 13, 
+       326, 14, 15, 16, 17, 13, 13, 326
        18, 19, 19, 16, 20, 19, 19, 20, 
        20, 22, 23, 24, 10, 26, 27, 28, 
        29, 30, 31, 32, 10, 34, 35, 36, 
-       10, 316, 38, 38, 39, 40, 316, 40, 
-       41, 41, 41, 42, 316, 43, 316, 45, 
-       44, 46, 47, 48, 47, 48, 48, 316
-       50, 51, 52, 53, 54, 55, 56, 316
-       58, 59, 60, 61, 62, 63, 64, 322
-       71, 316, 65, 66, 67, 68, 68, 69, 
-       69, 69, 70, 323, 72, 73, 74, 75, 
-       76, 77, 78, 79, 80, 81, 82, 322
-       325, 83, 83, 84, 325, 85, 325, 86, 
-       329, 325, 87, 88, 89, 90, 90, 91, 
-       91, 91, 92, 330, 332, 93, 93, 94, 
-       332, 95, 332, 97, 97, 332, 99, 100, 
-       100, 332, 102, 102, 332, 104, 105, 106, 
-       107, 107, 332, 340, 108, 108, 109, 340
-       110, 340, 112, 112, 111, 340, 112, 112, 
-       340, 345, 114, 114, 115, 116, 345, 116, 
-       117, 117, 117, 118, 345, 119, 345, 121, 
-       122, 123, 345, 125, 126, 127, 128, 129, 
-       130, 131, 345, 133, 134, 135, 136, 136, 
-       345, 138, 139, 140, 141, 142, 143, 144, 
-       352, 151, 345, 145, 146, 147, 148, 148, 
-       149, 149, 149, 150, 353, 152, 153, 154, 
+       10, 333, 38, 38, 39, 40, 333, 40, 
+       41, 41, 41, 42, 333, 43, 333, 45, 
+       44, 46, 47, 48, 47, 48, 48, 333
+       50, 51, 52, 53, 54, 55, 56, 333
+       58, 59, 60, 61, 62, 63, 64, 339
+       71, 333, 65, 66, 67, 68, 68, 69, 
+       69, 69, 70, 340, 72, 73, 74, 75, 
+       76, 77, 78, 79, 80, 81, 82, 339
+       342, 83, 83, 84, 342, 85, 342, 86, 
+       346, 342, 87, 88, 89, 90, 90, 91, 
+       91, 91, 92, 347, 349, 93, 93, 94, 
+       349, 95, 349, 97, 97, 349, 99, 100, 
+       100, 349, 102, 102, 349, 104, 105, 106, 
+       107, 107, 349, 357, 108, 108, 109, 357
+       110, 357, 112, 112, 111, 357, 112, 112, 
+       357, 362, 114, 114, 115, 116, 362, 116, 
+       117, 117, 117, 118, 362, 119, 362, 121, 
+       122, 123, 362, 125, 126, 127, 128, 129, 
+       130, 131, 362, 133, 134, 135, 136, 136, 
+       362, 138, 139, 140, 141, 142, 143, 144, 
+       369, 151, 362, 145, 146, 147, 148, 148, 
+       149, 149, 149, 150, 370, 152, 153, 154, 
        155, 156, 157, 158, 159, 160, 161, 162, 
-       352, 355, 163, 163, 164, 355, 165, 355
-       167, 167, 166, 355, 167, 167, 355, 360
-       169, 169, 170, 171, 360, 171, 172, 172, 
-       172, 173, 360, 174, 360, 176, 177, 178, 
+       369, 372, 163, 163, 164, 372, 165, 372
+       167, 167, 166, 372, 167, 167, 372, 377
+       169, 169, 170, 171, 377, 171, 172, 172, 
+       172, 173, 377, 174, 377, 176, 177, 178, 
        179, 180, 181, 182, 183, 184, 185, 185, 
-       360, 187, 188, 189, 190, 191, 192, 193, 
-       194, 195, 195, 360, 197, 198, 199, 200, 
-       200, 201, 201, 202, 366, 203, 204, 204, 
-       205, 204, 204, 205, 206, 207, 208, 208, 
-       209, 209, 209, 210, 211, 201, 201, 202, 
-       366, 213, 214, 215, 216, 217, 218, 219, 
-       220, 220, 221, 221, 222, 368, 223, 278, 
-       224, 224, 221, 225, 224, 224, 225, 225, 
-       226, 227, 228, 229, 230, 231, 232, 275, 
-       232, 233, 276, 235, 232, 232, 233, 235, 
-       233, 234, 235, 236, 237, 238, 239, 240, 
-       241, 241, 242, 242, 243, 247, 249, 244, 
-       245, 246, 246, 247, 246, 246, 248, 248, 
-       269, 252, 250, 251, 243, 247, 251, 253, 
-       253, 254, 268, 255, 256, 257, 258, 259, 
-       260, 261, 262, 263, 264, 265, 266, 267, 
-       267, 267, 270, 271, 271, 272, 272, 272, 
-       273, 274, 248, 248, 243, 247, 249, 252, 
-       275, 276, 277, 232, 232, 233, 235, 280, 
-       281, 282, 283, 284, 285, 286, 287, 288, 
-       289, 290, 290, 291, 291, 292, 293, 370, 
-       295, 296, 297, 298, 299, 299, 360, 301, 
-       302, 303, 304, 305, 306, 307, 308, 308, 
-       360, 309, 310, 310, 311, 312, 313, 314, 
-       315, 309, 309, 3, 21, 25, 33, 316, 
-       317, 317, 318, 319, 320, 321, 324, 316, 
-       316, 37, 49, 57, 316, 316, 316, 316, 
-       325, 326, 326, 327, 328, 331, 325, 325, 
-       325, 325, 325, 325, 332, 333, 333, 334, 
-       335, 336, 337, 338, 339, 332, 332, 96, 
-       98, 101, 103, 332, 332, 340, 341, 341, 
-       342, 343, 344, 340, 340, 340, 340, 345, 
-       346, 346, 347, 348, 349, 350, 351, 354, 
-       345, 345, 113, 120, 124, 132, 137, 345, 
-       345, 345, 345, 355, 356, 356, 357, 358, 
-       359, 355, 355, 355, 355, 360, 361, 361, 
-       362, 363, 364, 365, 367, 369, 371, 372, 
-       373, 360, 360, 168, 175, 186, 196, 360, 
-       360, 212, 360, 360, 279, 360, 370, 370, 
-       294, 300, 360, 360
+       377, 187, 188, 188, 189, 189, 190, 191, 
+       382, 193, 194, 195, 196, 197, 198, 199, 
+       200, 201, 201, 377, 203, 204, 205, 206, 
+       207, 208, 209, 209, 210, 210, 211, 212, 
+       384, 214, 215, 216, 217, 217, 218, 218, 
+       219, 385, 220, 221, 221, 222, 221, 221, 
+       222, 223, 224, 225, 225, 226, 226, 226, 
+       227, 228, 218, 218, 219, 385, 230, 231, 
+       232, 233, 234, 235, 236, 237, 237, 238, 
+       238, 239, 387, 240, 295, 241, 241, 238, 
+       242, 241, 241, 242, 242, 243, 244, 245, 
+       246, 247, 248, 249, 292, 249, 250, 293, 
+       252, 249, 249, 250, 252, 250, 251, 252, 
+       253, 254, 255, 256, 257, 258, 258, 259, 
+       259, 260, 264, 266, 261, 262, 263, 263, 
+       264, 263, 263, 265, 265, 286, 269, 267, 
+       268, 260, 264, 268, 270, 270, 271, 285, 
+       272, 273, 274, 275, 276, 277, 278, 279, 
+       280, 281, 282, 283, 284, 284, 284, 287, 
+       288, 288, 289, 289, 289, 290, 291, 265, 
+       265, 260, 264, 266, 269, 292, 293, 294, 
+       249, 249, 250, 252, 297, 298, 299, 300, 
+       301, 302, 303, 304, 305, 306, 307, 307, 
+       308, 308, 309, 310, 389, 312, 313, 314, 
+       315, 316, 316, 377, 318, 319, 320, 321, 
+       322, 323, 324, 325, 325, 377, 326, 327, 
+       327, 328, 329, 330, 331, 332, 326, 326, 
+       3, 21, 25, 33, 333, 334, 334, 335, 
+       336, 337, 338, 341, 333, 333, 37, 49, 
+       57, 333, 333, 333, 333, 342, 343, 343, 
+       344, 345, 348, 342, 342, 342, 342, 342, 
+       342, 349, 350, 350, 351, 352, 353, 354, 
+       355, 356, 349, 349, 96, 98, 101, 103, 
+       349, 349, 357, 358, 358, 359, 360, 361, 
+       357, 357, 357, 357, 362, 363, 363, 364, 
+       365, 366, 367, 368, 371, 362, 362, 113, 
+       120, 124, 132, 137, 362, 362, 362, 362, 
+       372, 373, 373, 374, 375, 376, 372, 372, 
+       372, 372, 377, 378, 378, 379, 380, 381, 
+       383, 386, 388, 390, 391, 392, 377, 377, 
+       168, 175, 186, 192, 377, 382, 382, 202, 
+       213, 377, 384, 384, 377, 377, 229, 377, 
+       377, 296, 377, 389, 389, 311, 317, 377, 
+       377
 };
 
 static const short _eo_tokenizer_trans_actions[] = {
-       215, 0, 1, 0, 205, 0, 238, 0, 
-       0, 0, 0, 0, 0, 43, 0, 3, 
-       0, 49, 49, 316, 49, 319, 0, 1, 
-       207, 0, 0, 0, 3, 17, 280, 283
-       0, 15, 277, 15, 15, 0, 1, 0, 
-       1, 0, 0, 0, 41, 0, 0, 0, 
-       0, 0, 0, 0, 47, 0, 0, 0, 
-       45, 75, 0, 1, 0, 0, 59, 1, 
-       3, 0, 1, 0, 57, 0, 217, 0, 
-       0, 0, 7, 247, 0, 3, 0, 250
-       0, 0, 0, 0, 0, 3, 0, 244
-       0, 0, 0, 0, 0, 3, 0, 328
-       5, 73, 0, 0, 0, 0, 1, 3, 
+       223, 0, 1, 0, 213, 0, 246, 0, 
+       0, 0, 0, 0, 0, 47, 0, 3, 
+       0, 53, 53, 324, 53, 327, 0, 1, 
+       215, 0, 0, 0, 3, 17, 288, 291
+       0, 15, 285, 15, 15, 0, 1, 0, 
+       1, 0, 0, 0, 45, 0, 0, 0, 
+       0, 0, 0, 0, 51, 0, 0, 0, 
+       49, 79, 0, 1, 0, 0, 63, 1, 
+       3, 0, 1, 0, 61, 0, 225, 0, 
+       0, 0, 7, 255, 0, 3, 0, 258
+       0, 0, 0, 0, 0, 3, 0, 252
+       0, 0, 0, 0, 0, 3, 0, 336
+       5, 77, 0, 0, 0, 0, 1, 3, 
        0, 1, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 0, 331
-       93, 0, 1, 0, 77, 0, 220, 0, 
-       334, 91, 0, 0, 0, 0, 1, 3, 
-       0, 1, 0, 0, 115, 0, 1, 0, 
-       95, 0, 223, 0, 1, 97, 0, 0, 
-       1, 101, 0, 1, 99, 0, 0, 0, 
-       0, 1, 103, 131, 0, 1, 0, 117
-       0, 226, 9, 256, 0, 259, 0, 1, 
-       119, 153, 0, 1, 0, 0, 135, 1, 
-       3, 0, 1, 0, 133, 0, 229, 0, 
-       0, 0, 268, 0, 0, 0, 0, 0, 
-       3, 0, 265, 0, 0, 0, 0, 1, 
-       137, 0, 0, 0, 0, 0, 3, 0, 
-       337, 11, 151, 0, 0, 0, 0, 1, 
+       0, 0, 0, 0, 0, 0, 0, 339
+       97, 0, 1, 0, 81, 0, 228, 0, 
+       342, 95, 0, 0, 0, 0, 1, 3, 
+       0, 1, 0, 0, 119, 0, 1, 0, 
+       99, 0, 231, 0, 1, 101, 0, 0, 
+       1, 105, 0, 1, 103, 0, 0, 0, 
+       0, 1, 107, 135, 0, 1, 0, 121
+       0, 234, 9, 264, 0, 267, 0, 1, 
+       123, 157, 0, 1, 0, 0, 139, 1, 
+       3, 0, 1, 0, 137, 0, 237, 0, 
+       0, 0, 276, 0, 0, 0, 0, 0, 
+       3, 0, 273, 0, 0, 0, 0, 1, 
+       141, 0, 0, 0, 0, 0, 3, 0, 
+       345, 11, 155, 0, 0, 0, 0, 1, 
        3, 0, 1, 0, 0, 0, 0, 0, 
        0, 0, 0, 0, 0, 0, 0, 0, 
-       340, 169, 0, 1, 0, 155, 0, 232
-       13, 271, 0, 274, 0, 1, 157, 203
-       0, 1, 0, 0, 173, 1, 3, 0, 
-       1, 0, 171, 0, 235, 0, 0, 0, 
+       348, 173, 0, 1, 0, 159, 0, 240
+       13, 279, 0, 282, 0, 1, 161, 211
+       0, 1, 0, 0, 177, 1, 3, 0, 
+       1, 0, 175, 0, 243, 0, 0, 0, 
        0, 0, 0, 0, 0, 0, 0, 1, 
-       179, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 1, 181, 0, 0, 0, 0, 
-       1, 0, 1, 3, 0, 0, 19, 286
-       19, 0, 1, 0, 0, 0, 0, 1
-       3, 0, 1, 0, 0, 21, 289, 292
-       21, 0, 0, 0, 0, 0, 0, 0
-       0, 1, 0, 1, 3, 0, 0, 0
-       25, 295, 25, 25, 0, 1, 0, 1
-       0, 0, 0, 0, 0, 0, 27, 27
-       298, 27, 301, 27, 0, 1, 0, 0
-       1, 0, 1, 0, 0, 0, 0, 0, 
-       0, 1, 0, 1, 0, 0, 3, 3
-       0, 33, 307, 33, 0, 1, 0, 1, 
-       0, 0, 0, 31, 31, 31, 0, 0, 
-       1, 0, 0, 0, 0, 0, 0, 0
-       0, 3, 0, 37, 0, 3, 0, 39
-       0, 1, 0, 0, 1, 3, 0, 1
-       0, 0, 35, 310, 35, 35, 313, 35
-       0, 3, 0, 29, 304, 29, 29, 0, 
-       0, 0, 0, 0, 0, 0, 0, 0
-       0, 0, 1, 0, 1, 3, 0, 23
-       0, 0, 0, 0, 0, 1, 185, 0, 
+       183, 0, 0, 1, 0, 1, 3, 0, 
+       27, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 1, 185, 0, 0, 0, 0
+       0, 0, 0, 1, 0, 1, 3, 0
+       25, 0, 0, 0, 0, 1, 0, 1
+       3, 0, 0, 19, 294, 19, 0, 1
+       0, 0, 0, 0, 1, 3, 0, 1
+       0, 0, 21, 297, 300, 21, 0, 0
+       0, 0, 0, 0, 0, 0, 1, 0
+       1, 3, 0, 0, 0, 29, 303, 29
+       29, 0, 1, 0, 1, 0, 0, 0, 
+       0, 0, 0, 31, 31, 306, 31, 309
+       31, 0, 1, 0, 0, 1, 0, 1, 
+       0, 0, 0, 0, 0, 0, 1, 0, 
+       1, 0, 0, 3, 3, 0, 37, 315
+       37, 0, 1, 0, 1, 0, 0, 0
+       35, 35, 35, 0, 0, 1, 0, 0
+       0, 0, 0, 0, 0, 0, 3, 0
+       41, 0, 3, 0, 43, 0, 1, 0, 
+       0, 1, 3, 0, 1, 0, 0, 39
+       318, 39, 39, 321, 39, 0, 3, 0
+       33, 312, 33, 33, 0, 0, 0, 0, 
        0, 0, 0, 0, 0, 0, 0, 1, 
-       183, 209, 0, 1, 322, 55, 55, 55, 
-       55, 211, 213, 0, 0, 0, 0, 63, 
-       0, 1, 322, 325, 325, 325, 0, 65, 
-       71, 0, 0, 0, 67, 241, 69, 61, 
-       81, 0, 1, 322, 325, 0, 83, 89, 
-       85, 253, 87, 79, 107, 0, 1, 322, 
-       55, 55, 55, 55, 0, 109, 113, 0, 
-       0, 0, 0, 111, 105, 123, 0, 1, 
-       322, 325, 0, 125, 129, 127, 121, 141, 
-       0, 1, 322, 55, 55, 55, 55, 0, 
-       143, 149, 0, 0, 0, 0, 0, 145, 
-       262, 147, 139, 161, 0, 1, 322, 325, 
-       0, 163, 167, 165, 159, 189, 0, 1, 
-       322, 55, 55, 55, 55, 55, 55, 55, 
-       0, 191, 201, 0, 0, 0, 0, 197, 
-       177, 0, 195, 175, 0, 193, 0, 1, 
-       0, 0, 199, 187
+       0, 1, 3, 0, 23, 0, 0, 0, 
+       0, 0, 1, 189, 0, 0, 0, 0, 
+       0, 0, 0, 0, 1, 187, 217, 0, 
+       1, 330, 59, 59, 59, 59, 219, 221, 
+       0, 0, 0, 0, 67, 0, 1, 330, 
+       333, 333, 333, 0, 69, 75, 0, 0, 
+       0, 71, 249, 73, 65, 85, 0, 1, 
+       330, 333, 0, 87, 93, 89, 261, 91, 
+       83, 111, 0, 1, 330, 59, 59, 59, 
+       59, 0, 113, 117, 0, 0, 0, 0, 
+       115, 109, 127, 0, 1, 330, 333, 0, 
+       129, 133, 131, 125, 145, 0, 1, 330, 
+       59, 59, 59, 59, 0, 147, 153, 0, 
+       0, 0, 0, 0, 149, 270, 151, 143, 
+       165, 0, 1, 330, 333, 0, 167, 171, 
+       169, 163, 193, 0, 1, 330, 59, 59, 
+       59, 59, 59, 59, 59, 0, 195, 209, 
+       0, 0, 0, 0, 201, 0, 1, 0, 
+       0, 199, 0, 1, 205, 181, 0, 203, 
+       179, 0, 197, 0, 1, 0, 0, 207, 
+       191
 };
 
 static const short _eo_tokenizer_to_state_actions[] = {
@@ -1083,15 +1120,18 @@ static const short _eo_tokenizer_to_state_actions[] = {
        0, 0, 0, 0, 0, 0, 0, 0, 
        0, 0, 0, 0, 0, 0, 0, 0, 
        0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 51, 0, 0, 
-       0, 0, 0, 0, 51, 0, 0, 0, 
-       0, 0, 0, 0, 0, 51, 0, 0, 
-       0, 0, 0, 0, 51, 0, 0, 0, 
-       0, 0, 0, 0, 51, 0, 0, 0, 
-       0, 51, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 51, 0, 0, 0, 0, 
-       51, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 55, 0, 
+       0, 0, 0, 0, 0, 55, 0, 0, 
+       0, 0, 0, 0, 0, 0, 55, 0, 
+       0, 0, 0, 0, 0, 55, 0, 0, 
+       0, 0, 0, 0, 0, 55, 0, 0, 
+       0, 0, 55, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 55, 0, 0, 0, 
+       0, 55, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0
 };
 
 static const short _eo_tokenizer_from_state_actions[] = {
@@ -1133,15 +1173,18 @@ static const short _eo_tokenizer_from_state_actions[] = {
        0, 0, 0, 0, 0, 0, 0, 0, 
        0, 0, 0, 0, 0, 0, 0, 0, 
        0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 53, 0, 0, 
-       0, 0, 0, 0, 53, 0, 0, 0, 
-       0, 0, 0, 0, 0, 53, 0, 0, 
-       0, 0, 0, 0, 53, 0, 0, 0, 
-       0, 0, 0, 0, 53, 0, 0, 0, 
-       0, 53, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 53, 0, 0, 0, 0, 
-       53, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 57, 0, 
+       0, 0, 0, 0, 0, 57, 0, 0, 
+       0, 0, 0, 0, 0, 0, 57, 0, 
+       0, 0, 0, 0, 0, 57, 0, 0, 
+       0, 0, 0, 0, 0, 57, 0, 0, 
+       0, 0, 57, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 57, 0, 0, 0, 
+       0, 57, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0
 };
 
 static const short _eo_tokenizer_eof_trans[] = {
@@ -1183,32 +1226,35 @@ static const short _eo_tokenizer_eof_trans[] = {
        256, 256, 256, 256, 256, 256, 256, 256, 
        256, 256, 256, 256, 256, 256, 256, 256, 
        256, 256, 256, 256, 256, 256, 256, 256, 
-       256, 256, 256, 256, 256, 0, 474, 475, 
-       475, 475, 475, 475, 0, 488, 489, 489, 
-       489, 489, 493, 494, 495, 0, 503, 504, 
-       504, 505, 506, 507, 0, 518, 519, 519, 
-       519, 519, 519, 524, 0, 532, 533, 533, 
-       534, 0, 545, 546, 546, 546, 546, 546, 
-       552, 553, 554, 0, 562, 563, 563, 564, 
-       0, 578, 579, 579, 579, 579, 584, 579, 
-       587, 579, 590, 579, 579, 595
+       256, 256, 256, 256, 256, 256, 256, 256, 
+       256, 256, 256, 256, 256, 256, 256, 256, 
+       256, 256, 256, 256, 256, 256, 0, 495, 
+       496, 496, 496, 496, 496, 0, 509, 510, 
+       510, 510, 510, 514, 515, 516, 0, 524, 
+       525, 525, 526, 527, 528, 0, 539, 540, 
+       540, 540, 540, 540, 545, 0, 553, 554, 
+       554, 555, 0, 566, 567, 567, 567, 567, 
+       567, 573, 574, 575, 0, 583, 584, 584, 
+       585, 0, 599, 600, 600, 600, 605, 600, 
+       610, 613, 600, 616, 600, 619, 600, 600, 
+       624
 };
 
-static const int eo_tokenizer_start = 309;
-static const int eo_tokenizer_first_final = 309;
+static const int eo_tokenizer_start = 326;
+static const int eo_tokenizer_first_final = 326;
 static const int eo_tokenizer_error = -1;
 
-static const int eo_tokenizer_en_tokenize_accessor = 316;
-static const int eo_tokenizer_en_tokenize_params = 325;
-static const int eo_tokenizer_en_tokenize_property = 332;
-static const int eo_tokenizer_en_tokenize_properties = 340;
-static const int eo_tokenizer_en_tokenize_method = 345;
-static const int eo_tokenizer_en_tokenize_methods = 355;
-static const int eo_tokenizer_en_tokenize_class = 360;
-static const int eo_tokenizer_en_main = 309;
+static const int eo_tokenizer_en_tokenize_accessor = 333;
+static const int eo_tokenizer_en_tokenize_params = 342;
+static const int eo_tokenizer_en_tokenize_property = 349;
+static const int eo_tokenizer_en_tokenize_properties = 357;
+static const int eo_tokenizer_en_tokenize_method = 362;
+static const int eo_tokenizer_en_tokenize_methods = 372;
+static const int eo_tokenizer_en_tokenize_class = 377;
+static const int eo_tokenizer_en_main = 326;
 
 
-#line 946 "eo_lexer.rl"
+#line 966 "eo_lexer.rl"
 
 
 Eina_Bool
@@ -1232,7 +1278,7 @@ eo_tokenizer_walk(Eo_Tokenizer *toknz, const char *source)
      }
 
    
-#line 1236 "eo_lexer.c"
+#line 1282 "eo_lexer.c"
        {
         toknz->cs = eo_tokenizer_start;
         toknz->ts = 0;
@@ -1240,7 +1286,7 @@ eo_tokenizer_walk(Eo_Tokenizer *toknz, const char *source)
         toknz->act = 0;
        }
 
-#line 969 "eo_lexer.rl"
+#line 989 "eo_lexer.rl"
 
    while (!done)
      {
@@ -1267,7 +1313,7 @@ eo_tokenizer_walk(Eo_Tokenizer *toknz, const char *source)
           }
 
         
-#line 1271 "eo_lexer.c"
+#line 1317 "eo_lexer.c"
        {
        int _klen;
        unsigned int _trans;
@@ -1282,11 +1328,11 @@ _resume:
        _nacts = (unsigned int) *_acts++;
        while ( _nacts-- > 0 ) {
                switch ( *_acts++ ) {
-       case 37:
+       case 39:
 #line 1 "NONE"
        { toknz->ts = ( toknz->p);}
        break;
-#line 1290 "eo_lexer.c"
+#line 1336 "eo_lexer.c"
                }
        }
 
@@ -1548,15 +1594,33 @@ _eof_trans:
    }
        break;
        case 23:
-#line 796 "eo_lexer.rl"
+#line 792 "eo_lexer.rl"
+       {
+      if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
+      if (toknz->tmp.kls->eo_prefix != NULL)
+        ABORT(toknz, "An Eo prefix has already been given");
+      toknz->tmp.kls->eo_prefix = _eo_tokenizer_token_get(toknz, ( toknz->p));
+   }
+       break;
+       case 24:
+#line 801 "eo_lexer.rl"
+       {
+      if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
+      if (toknz->tmp.kls->data_type != NULL)
+        ABORT(toknz, "A data type has already been given");
+      toknz->tmp.kls->data_type = _eo_tokenizer_token_get(toknz, ( toknz->p));
+   }
+       break;
+       case 25:
+#line 814 "eo_lexer.rl"
        {
         if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
         toknz->tmp.impl = _eo_tokenizer_implement_get(toknz, ( toknz->p));
         toknz->tmp.kls->implements = eina_list_append(toknz->tmp.kls->implements, toknz->tmp.impl);
    }
        break;
-       case 24:
-#line 802 "eo_lexer.rl"
+       case 26:
+#line 820 "eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (toknz->tmp.impl->legacy)
@@ -1564,8 +1628,8 @@ _eof_trans:
         toknz->tmp.impl->legacy = calloc(1, sizeof(Eo_Implement_Legacy_Def));
    }
        break;
-       case 25:
-#line 809 "eo_lexer.rl"
+       case 27:
+#line 827 "eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (!toknz->tmp.impl->legacy)
@@ -1573,8 +1637,8 @@ _eof_trans:
         toknz->tmp.impl->legacy->function_name = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 26:
-#line 816 "eo_lexer.rl"
+       case 28:
+#line 834 "eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         toknz->tmp.impl_leg_param = calloc(1, sizeof(Eo_Implement_Legacy_Param_Def));
@@ -1584,24 +1648,24 @@ _eof_trans:
         toknz->tmp.impl_leg_param->eo_name = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 27:
-#line 825 "eo_lexer.rl"
+       case 29:
+#line 843 "eo_lexer.rl"
        {
         if (!toknz->tmp.impl_leg_param)
            ABORT(toknz, "No implement legacy param!!!");
         toknz->tmp.impl_leg_param->legacy_name = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 28:
-#line 831 "eo_lexer.rl"
+       case 30:
+#line 849 "eo_lexer.rl"
        {
         if (!toknz->tmp.impl_leg_param)
            ABORT(toknz, "No implement legacy param!!!");
         toknz->tmp.impl_leg_param->comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-2);
    }
        break;
-       case 29:
-#line 837 "eo_lexer.rl"
+       case 31:
+#line 855 "eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (!toknz->tmp.impl->legacy)
@@ -1609,8 +1673,8 @@ _eof_trans:
         toknz->tmp.impl->legacy->ret_type= _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 30:
-#line 844 "eo_lexer.rl"
+       case 32:
+#line 862 "eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (!toknz->tmp.impl->legacy)
@@ -1618,32 +1682,32 @@ _eof_trans:
         toknz->tmp.impl->legacy->ret_value = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 31:
-#line 912 "eo_lexer.rl"
+       case 33:
+#line 932 "eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_REGULAR;
    }
        break;
-       case 32:
-#line 915 "eo_lexer.rl"
+       case 34:
+#line 935 "eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_ABSTRACT;
    }
        break;
-       case 33:
-#line 918 "eo_lexer.rl"
+       case 35:
+#line 938 "eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_MIXIN;
    }
        break;
-       case 34:
-#line 921 "eo_lexer.rl"
+       case 36:
+#line 941 "eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_INTERFACE;
    }
        break;
-       case 35:
-#line 925 "eo_lexer.rl"
+       case 37:
+#line 945 "eo_lexer.rl"
        {
       if (toknz->tmp.kls != NULL)
         ABORT(toknz, "there is a pending class definition %s", toknz->tmp.kls->name);
@@ -1651,11 +1715,11 @@ _eof_trans:
       toknz->tmp.kls->type = toknz->tmp.kls_type;
    }
        break;
-       case 38:
+       case 40:
 #line 1 "NONE"
        { toknz->te = ( toknz->p)+1;}
        break;
-       case 39:
+       case 41:
 #line 368 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
@@ -1665,22 +1729,22 @@ _eof_trans:
       INF("        %s", toknz->tmp.accessor->comment);
    }}
        break;
-       case 40:
+       case 42:
 #line 307 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 41:
+       case 43:
 #line 438 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
-       case 42:
+       case 44:
 #line 439 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
-       case 43:
+       case 45:
 #line 403 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      }");
@@ -1688,10 +1752,10 @@ _eof_trans:
       toknz->tmp.prop->accessors = eina_list_append(toknz->tmp.prop->accessors, toknz->tmp.accessor);
       toknz->tmp.accessor = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 332; goto _again;}
+      { toknz->cs = 349; goto _again;}
    }}
        break;
-       case 44:
+       case 46:
 #line 316 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
@@ -1710,15 +1774,15 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 45:
+       case 47:
 #line 434 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 46:
+       case 48:
 #line 437 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 47:
+       case 49:
 #line 403 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("      }");
@@ -1726,10 +1790,10 @@ _eof_trans:
       toknz->tmp.prop->accessors = eina_list_append(toknz->tmp.prop->accessors, toknz->tmp.accessor);
       toknz->tmp.accessor = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 332; goto _again;}
+      { toknz->cs = 349; goto _again;}
    }}
        break;
-       case 48:
+       case 50:
 #line 316 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
@@ -1748,11 +1812,11 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 49:
+       case 51:
 #line 437 "eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}}
        break;
-       case 50:
+       case 52:
 #line 316 "eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
@@ -1771,28 +1835,28 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 51:
+       case 53:
 #line 307 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 52:
+       case 54:
 #line 463 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      }");
       toknz->tmp.param = NULL;
       toknz->current_nesting--;
       if (toknz->tmp.prop)
-        { toknz->cs = 332; goto _again;}
+        { toknz->cs = 349; goto _again;}
       else if (toknz->tmp.meth)
-        { toknz->cs = 345; goto _again;}
+        { toknz->cs = 362; goto _again;}
       else
         ABORT(toknz, "leaving tokenize_params but there is no property nor method pending");
    }}
        break;
-       case 53:
+       case 55:
 #line 316 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
@@ -1811,29 +1875,29 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 54:
+       case 56:
 #line 479 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 55:
+       case 57:
 #line 481 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 56:
+       case 58:
 #line 463 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("      }");
       toknz->tmp.param = NULL;
       toknz->current_nesting--;
       if (toknz->tmp.prop)
-        { toknz->cs = 332; goto _again;}
+        { toknz->cs = 349; goto _again;}
       else if (toknz->tmp.meth)
-        { toknz->cs = 345; goto _again;}
+        { toknz->cs = 362; goto _again;}
       else
         ABORT(toknz, "leaving tokenize_params but there is no property nor method pending");
    }}
        break;
-       case 57:
+       case 59:
 #line 316 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
@@ -1852,11 +1916,11 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 58:
+       case 60:
 #line 481 "eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}}
        break;
-       case 59:
+       case 61:
 #line 316 "eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
@@ -1875,50 +1939,50 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 60:
+       case 62:
 #line 307 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 61:
+       case 63:
 #line 488 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      get {");
       toknz->tmp.accessor = _eo_tokenizer_accessor_get(toknz, GETTER);
       toknz->current_nesting++;
-      { toknz->cs = 316; goto _again;}
+      { toknz->cs = 333; goto _again;}
    }}
        break;
-       case 62:
+       case 64:
 #line 495 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      set {");
       toknz->tmp.accessor = _eo_tokenizer_accessor_get(toknz, SETTER);
       toknz->current_nesting++;
-      { toknz->cs = 316; goto _again;}
+      { toknz->cs = 333; goto _again;}
    }}
        break;
-       case 63:
+       case 65:
 #line 502 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      keys {");
       toknz->current_nesting++;
       toknz->tmp.params = &(toknz->tmp.prop->keys);
-      { toknz->cs = 325; goto _again;}
+      { toknz->cs = 342; goto _again;}
    }}
        break;
-       case 64:
+       case 66:
 #line 509 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      values {");
       toknz->current_nesting++;
       toknz->tmp.params = &(toknz->tmp.prop->values);
-      { toknz->cs = 325; goto _again;}
+      { toknz->cs = 342; goto _again;}
    }}
        break;
-       case 65:
+       case 67:
 #line 516 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.prop) ABORT(toknz, "No property!!!");
@@ -1930,10 +1994,10 @@ _eof_trans:
       toknz->tmp.kls->properties = eina_list_append(toknz->tmp.kls->properties, toknz->tmp.prop);
       toknz->tmp.prop = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 340; goto _again;}
+      { toknz->cs = 357; goto _again;}
    }}
        break;
-       case 66:
+       case 68:
 #line 316 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
@@ -1952,11 +2016,11 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 67:
+       case 69:
 #line 535 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 68:
+       case 70:
 #line 516 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       if (!toknz->tmp.prop) ABORT(toknz, "No property!!!");
@@ -1968,10 +2032,10 @@ _eof_trans:
       toknz->tmp.kls->properties = eina_list_append(toknz->tmp.kls->properties, toknz->tmp.prop);
       toknz->tmp.prop = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 340; goto _again;}
+      { toknz->cs = 357; goto _again;}
    }}
        break;
-       case 69:
+       case 71:
 #line 316 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
@@ -1990,7 +2054,7 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 70:
+       case 72:
 #line 316 "eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
@@ -2009,31 +2073,31 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 71:
+       case 73:
 #line 307 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 72:
+       case 74:
 #line 547 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.prop) ABORT(toknz, "No property!!!");
       INF("    %s {", toknz->tmp.prop->name);
       toknz->current_nesting++;
-      { toknz->cs = 332; goto _again;}
+      { toknz->cs = 349; goto _again;}
    }}
        break;
-       case 73:
+       case 75:
 #line 560 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  }");
       toknz->current_nesting--;
-      { toknz->cs = 360; goto _again;}
+      { toknz->cs = 377; goto _again;}
    }}
        break;
-       case 74:
+       case 76:
 #line 316 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
@@ -2052,19 +2116,19 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 75:
+       case 77:
 #line 569 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 76:
+       case 78:
 #line 560 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("  }");
       toknz->current_nesting--;
-      { toknz->cs = 360; goto _again;}
+      { toknz->cs = 377; goto _again;}
    }}
        break;
-       case 77:
+       case 79:
 #line 316 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
@@ -2083,7 +2147,7 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 78:
+       case 80:
 #line 316 "eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
@@ -2102,7 +2166,7 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 79:
+       case 81:
 #line 578 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
@@ -2112,32 +2176,32 @@ _eof_trans:
       INF("        %s", toknz->tmp.meth->comment);
    }}
        break;
-       case 80:
+       case 82:
 #line 307 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 81:
+       case 83:
 #line 586 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       INF("      params {");
       toknz->current_nesting++;
       toknz->tmp.params = &(toknz->tmp.meth->params);
-      { toknz->cs = 325; goto _again;}
+      { toknz->cs = 342; goto _again;}
    }}
        break;
-       case 82:
+       case 84:
 #line 669 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
-       case 83:
+       case 85:
 #line 670 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
-       case 84:
+       case 86:
 #line 627 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       Eina_List **l;
@@ -2162,10 +2226,10 @@ _eof_trans:
       *l = eina_list_append(*l, toknz->tmp.meth);
       toknz->tmp.meth = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 355; goto _again;}
+      { toknz->cs = 372; goto _again;}
    }}
        break;
-       case 85:
+       case 87:
 #line 316 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
@@ -2184,15 +2248,15 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 86:
+       case 88:
 #line 664 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 87:
+       case 89:
 #line 668 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 88:
+       case 90:
 #line 627 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       Eina_List **l;
@@ -2217,10 +2281,10 @@ _eof_trans:
       *l = eina_list_append(*l, toknz->tmp.meth);
       toknz->tmp.meth = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 355; goto _again;}
+      { toknz->cs = 372; goto _again;}
    }}
        break;
-       case 89:
+       case 91:
 #line 316 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
@@ -2239,11 +2303,11 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 90:
+       case 92:
 #line 668 "eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}}
        break;
-       case 91:
+       case 93:
 #line 316 "eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
@@ -2262,32 +2326,32 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 92:
+       case 94:
 #line 307 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 93:
+       case 95:
 #line 677 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       INF("    %s {", toknz->tmp.meth->name);
       toknz->current_nesting++;
-      { toknz->cs = 345; goto _again;}
+      { toknz->cs = 362; goto _again;}
    }}
        break;
-       case 94:
+       case 96:
 #line 690 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  }");
       toknz->current_methods_type = METH_TYPE_LAST;
       toknz->current_nesting--;
-      { toknz->cs = 360; goto _again;}
+      { toknz->cs = 377; goto _again;}
    }}
        break;
-       case 95:
+       case 97:
 #line 316 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
@@ -2306,20 +2370,20 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 96:
+       case 98:
 #line 700 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 97:
+       case 99:
 #line 690 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("  }");
       toknz->current_methods_type = METH_TYPE_LAST;
       toknz->current_nesting--;
-      { toknz->cs = 360; goto _again;}
+      { toknz->cs = 377; goto _again;}
    }}
        break;
-       case 98:
+       case 100:
 #line 316 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
@@ -2338,7 +2402,7 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 99:
+       case 101:
 #line 316 "eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
@@ -2357,7 +2421,7 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 100:
+       case 102:
 #line 709 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
@@ -2366,59 +2430,59 @@ _eof_trans:
       toknz->tmp.kls->comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-1);
    }}
        break;
-       case 101:
+       case 103:
 #line 307 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 102:
+       case 104:
 #line 727 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
    }}
        break;
-       case 103:
+       case 105:
 #line 730 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
    }}
        break;
-       case 104:
+       case 106:
 #line 733 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  constructors {");
       toknz->current_methods_type = METH_CONSTRUCTOR;
       toknz->current_nesting++;
-      { toknz->cs = 355; goto _again;}
+      { toknz->cs = 372; goto _again;}
    }}
        break;
-       case 105:
+       case 107:
 #line 740 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  destructors {");
       toknz->current_methods_type = METH_DESTRUCTOR;
       toknz->current_nesting++;
-      { toknz->cs = 355; goto _again;}
+      { toknz->cs = 372; goto _again;}
    }}
        break;
-       case 106:
+       case 108:
 #line 747 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  properties {");
       toknz->current_nesting++;
-      { toknz->cs = 340; goto _again;}
+      { toknz->cs = 357; goto _again;}
    }}
        break;
-       case 107:
+       case 109:
 #line 753 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  begin methods");
       toknz->current_methods_type = METH_REGULAR;
       toknz->current_nesting++;
-      { toknz->cs = 355; goto _again;}
+      { toknz->cs = 372; goto _again;}
    }}
        break;
-       case 108:
+       case 110:
 #line 760 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
@@ -2426,10 +2490,10 @@ _eof_trans:
       toknz->classes = eina_list_append(toknz->classes, toknz->tmp.kls);
       toknz->tmp.kls = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 309; goto _again;}
+      { toknz->cs = 326; goto _again;}
    }}
        break;
-       case 109:
+       case 111:
 #line 316 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
@@ -2448,25 +2512,33 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 110:
-#line 889 "eo_lexer.rl"
+       case 112:
+#line 907 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 111:
-#line 892 "eo_lexer.rl"
+       case 113:
+#line 910 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 112:
+       case 114:
+#line 911 "eo_lexer.rl"
+       { toknz->te = ( toknz->p);( toknz->p)--;}
+       break;
+       case 115:
+#line 912 "eo_lexer.rl"
+       { toknz->te = ( toknz->p);( toknz->p)--;}
+       break;
+       case 116:
 #line 727 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
    }}
        break;
-       case 113:
+       case 117:
 #line 730 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
    }}
        break;
-       case 114:
+       case 118:
 #line 760 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
@@ -2474,10 +2546,10 @@ _eof_trans:
       toknz->classes = eina_list_append(toknz->classes, toknz->tmp.kls);
       toknz->tmp.kls = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 309; goto _again;}
+      { toknz->cs = 326; goto _again;}
    }}
        break;
-       case 115:
+       case 119:
 #line 316 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
@@ -2496,7 +2568,7 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 116:
+       case 120:
 #line 316 "eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
@@ -2515,23 +2587,23 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 117:
+       case 121:
 #line 307 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 118:
-#line 905 "eo_lexer.rl"
+       case 122:
+#line 925 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       INF("begin class: %s", toknz->tmp.kls->name);
       toknz->current_nesting++;
-      { toknz->cs = 360; goto _again;}
+      { toknz->cs = 377; goto _again;}
    }}
        break;
-       case 119:
+       case 123:
 #line 316 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
@@ -2550,11 +2622,11 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 120:
-#line 940 "eo_lexer.rl"
+       case 124:
+#line 960 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 121:
+       case 125:
 #line 316 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
@@ -2573,7 +2645,7 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 122:
+       case 126:
 #line 316 "eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
@@ -2592,7 +2664,7 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-#line 2596 "eo_lexer.c"
+#line 2668 "eo_lexer.c"
                }
        }
 
@@ -2601,11 +2673,11 @@ _again:
        _nacts = (unsigned int) *_acts++;
        while ( _nacts-- > 0 ) {
                switch ( *_acts++ ) {
-       case 36:
+       case 38:
 #line 1 "NONE"
        { toknz->ts = 0;}
        break;
-#line 2609 "eo_lexer.c"
+#line 2681 "eo_lexer.c"
                }
        }
 
@@ -2623,12 +2695,12 @@ _again:
        _out: {}
        }
 
-#line 995 "eo_lexer.rl"
+#line 1015 "eo_lexer.rl"
 
         if ( toknz->cs == 
-#line 2630 "eo_lexer.c"
+#line 2702 "eo_lexer.c"
 -1
-#line 996 "eo_lexer.rl"
+#line 1016 "eo_lexer.rl"
  )
           {
              ERR("%s: wrong termination", source);
@@ -2686,7 +2758,7 @@ eo_tokenizer_mem_walk(Eo_Tokenizer *toknz, const char *source, char *buffer, uns
      }
 
    
-#line 2690 "eo_lexer.c"
+#line 2762 "eo_lexer.c"
        {
         toknz->cs = eo_tokenizer_start;
         toknz->ts = 0;
@@ -2694,14 +2766,14 @@ eo_tokenizer_mem_walk(Eo_Tokenizer *toknz, const char *source, char *buffer, uns
         toknz->act = 0;
        }
 
-#line 1053 "eo_lexer.rl"
+#line 1073 "eo_lexer.rl"
 
    toknz->p = buffer;
 
    toknz->pe = toknz->p + len;
 
    
-#line 2705 "eo_lexer.c"
+#line 2777 "eo_lexer.c"
        {
        int _klen;
        unsigned int _trans;
@@ -2716,11 +2788,11 @@ _resume:
        _nacts = (unsigned int) *_acts++;
        while ( _nacts-- > 0 ) {
                switch ( *_acts++ ) {
-       case 37:
+       case 39:
 #line 1 "NONE"
        { toknz->ts = ( toknz->p);}
        break;
-#line 2724 "eo_lexer.c"
+#line 2796 "eo_lexer.c"
                }
        }
 
@@ -2982,15 +3054,33 @@ _eof_trans:
    }
        break;
        case 23:
-#line 796 "eo_lexer.rl"
+#line 792 "eo_lexer.rl"
+       {
+      if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
+      if (toknz->tmp.kls->eo_prefix != NULL)
+        ABORT(toknz, "An Eo prefix has already been given");
+      toknz->tmp.kls->eo_prefix = _eo_tokenizer_token_get(toknz, ( toknz->p));
+   }
+       break;
+       case 24:
+#line 801 "eo_lexer.rl"
+       {
+      if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
+      if (toknz->tmp.kls->data_type != NULL)
+        ABORT(toknz, "A data type has already been given");
+      toknz->tmp.kls->data_type = _eo_tokenizer_token_get(toknz, ( toknz->p));
+   }
+       break;
+       case 25:
+#line 814 "eo_lexer.rl"
        {
         if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
         toknz->tmp.impl = _eo_tokenizer_implement_get(toknz, ( toknz->p));
         toknz->tmp.kls->implements = eina_list_append(toknz->tmp.kls->implements, toknz->tmp.impl);
    }
        break;
-       case 24:
-#line 802 "eo_lexer.rl"
+       case 26:
+#line 820 "eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (toknz->tmp.impl->legacy)
@@ -2998,8 +3088,8 @@ _eof_trans:
         toknz->tmp.impl->legacy = calloc(1, sizeof(Eo_Implement_Legacy_Def));
    }
        break;
-       case 25:
-#line 809 "eo_lexer.rl"
+       case 27:
+#line 827 "eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (!toknz->tmp.impl->legacy)
@@ -3007,8 +3097,8 @@ _eof_trans:
         toknz->tmp.impl->legacy->function_name = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 26:
-#line 816 "eo_lexer.rl"
+       case 28:
+#line 834 "eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         toknz->tmp.impl_leg_param = calloc(1, sizeof(Eo_Implement_Legacy_Param_Def));
@@ -3018,24 +3108,24 @@ _eof_trans:
         toknz->tmp.impl_leg_param->eo_name = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 27:
-#line 825 "eo_lexer.rl"
+       case 29:
+#line 843 "eo_lexer.rl"
        {
         if (!toknz->tmp.impl_leg_param)
            ABORT(toknz, "No implement legacy param!!!");
         toknz->tmp.impl_leg_param->legacy_name = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 28:
-#line 831 "eo_lexer.rl"
+       case 30:
+#line 849 "eo_lexer.rl"
        {
         if (!toknz->tmp.impl_leg_param)
            ABORT(toknz, "No implement legacy param!!!");
         toknz->tmp.impl_leg_param->comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-2);
    }
        break;
-       case 29:
-#line 837 "eo_lexer.rl"
+       case 31:
+#line 855 "eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (!toknz->tmp.impl->legacy)
@@ -3043,8 +3133,8 @@ _eof_trans:
         toknz->tmp.impl->legacy->ret_type= _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 30:
-#line 844 "eo_lexer.rl"
+       case 32:
+#line 862 "eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (!toknz->tmp.impl->legacy)
@@ -3052,32 +3142,32 @@ _eof_trans:
         toknz->tmp.impl->legacy->ret_value = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 31:
-#line 912 "eo_lexer.rl"
+       case 33:
+#line 932 "eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_REGULAR;
    }
        break;
-       case 32:
-#line 915 "eo_lexer.rl"
+       case 34:
+#line 935 "eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_ABSTRACT;
    }
        break;
-       case 33:
-#line 918 "eo_lexer.rl"
+       case 35:
+#line 938 "eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_MIXIN;
    }
        break;
-       case 34:
-#line 921 "eo_lexer.rl"
+       case 36:
+#line 941 "eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_INTERFACE;
    }
        break;
-       case 35:
-#line 925 "eo_lexer.rl"
+       case 37:
+#line 945 "eo_lexer.rl"
        {
       if (toknz->tmp.kls != NULL)
         ABORT(toknz, "there is a pending class definition %s", toknz->tmp.kls->name);
@@ -3085,11 +3175,11 @@ _eof_trans:
       toknz->tmp.kls->type = toknz->tmp.kls_type;
    }
        break;
-       case 38:
+       case 40:
 #line 1 "NONE"
        { toknz->te = ( toknz->p)+1;}
        break;
-       case 39:
+       case 41:
 #line 368 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
@@ -3099,22 +3189,22 @@ _eof_trans:
       INF("        %s", toknz->tmp.accessor->comment);
    }}
        break;
-       case 40:
+       case 42:
 #line 307 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 41:
+       case 43:
 #line 438 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
-       case 42:
+       case 44:
 #line 439 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
-       case 43:
+       case 45:
 #line 403 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      }");
@@ -3122,10 +3212,10 @@ _eof_trans:
       toknz->tmp.prop->accessors = eina_list_append(toknz->tmp.prop->accessors, toknz->tmp.accessor);
       toknz->tmp.accessor = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 332; goto _again;}
+      { toknz->cs = 349; goto _again;}
    }}
        break;
-       case 44:
+       case 46:
 #line 316 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
@@ -3144,15 +3234,15 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 45:
+       case 47:
 #line 434 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 46:
+       case 48:
 #line 437 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 47:
+       case 49:
 #line 403 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("      }");
@@ -3160,10 +3250,10 @@ _eof_trans:
       toknz->tmp.prop->accessors = eina_list_append(toknz->tmp.prop->accessors, toknz->tmp.accessor);
       toknz->tmp.accessor = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 332; goto _again;}
+      { toknz->cs = 349; goto _again;}
    }}
        break;
-       case 48:
+       case 50:
 #line 316 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
@@ -3182,11 +3272,11 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 49:
+       case 51:
 #line 437 "eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}}
        break;
-       case 50:
+       case 52:
 #line 316 "eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
@@ -3205,28 +3295,28 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 51:
+       case 53:
 #line 307 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 52:
+       case 54:
 #line 463 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      }");
       toknz->tmp.param = NULL;
       toknz->current_nesting--;
       if (toknz->tmp.prop)
-        { toknz->cs = 332; goto _again;}
+        { toknz->cs = 349; goto _again;}
       else if (toknz->tmp.meth)
-        { toknz->cs = 345; goto _again;}
+        { toknz->cs = 362; goto _again;}
       else
         ABORT(toknz, "leaving tokenize_params but there is no property nor method pending");
    }}
        break;
-       case 53:
+       case 55:
 #line 316 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
@@ -3245,29 +3335,29 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 54:
+       case 56:
 #line 479 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 55:
+       case 57:
 #line 481 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 56:
+       case 58:
 #line 463 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("      }");
       toknz->tmp.param = NULL;
       toknz->current_nesting--;
       if (toknz->tmp.prop)
-        { toknz->cs = 332; goto _again;}
+        { toknz->cs = 349; goto _again;}
       else if (toknz->tmp.meth)
-        { toknz->cs = 345; goto _again;}
+        { toknz->cs = 362; goto _again;}
       else
         ABORT(toknz, "leaving tokenize_params but there is no property nor method pending");
    }}
        break;
-       case 57:
+       case 59:
 #line 316 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
@@ -3286,11 +3376,11 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 58:
+       case 60:
 #line 481 "eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}}
        break;
-       case 59:
+       case 61:
 #line 316 "eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
@@ -3309,50 +3399,50 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 60:
+       case 62:
 #line 307 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 61:
+       case 63:
 #line 488 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      get {");
       toknz->tmp.accessor = _eo_tokenizer_accessor_get(toknz, GETTER);
       toknz->current_nesting++;
-      { toknz->cs = 316; goto _again;}
+      { toknz->cs = 333; goto _again;}
    }}
        break;
-       case 62:
+       case 64:
 #line 495 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      set {");
       toknz->tmp.accessor = _eo_tokenizer_accessor_get(toknz, SETTER);
       toknz->current_nesting++;
-      { toknz->cs = 316; goto _again;}
+      { toknz->cs = 333; goto _again;}
    }}
        break;
-       case 63:
+       case 65:
 #line 502 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      keys {");
       toknz->current_nesting++;
       toknz->tmp.params = &(toknz->tmp.prop->keys);
-      { toknz->cs = 325; goto _again;}
+      { toknz->cs = 342; goto _again;}
    }}
        break;
-       case 64:
+       case 66:
 #line 509 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      values {");
       toknz->current_nesting++;
       toknz->tmp.params = &(toknz->tmp.prop->values);
-      { toknz->cs = 325; goto _again;}
+      { toknz->cs = 342; goto _again;}
    }}
        break;
-       case 65:
+       case 67:
 #line 516 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.prop) ABORT(toknz, "No property!!!");
@@ -3364,10 +3454,10 @@ _eof_trans:
       toknz->tmp.kls->properties = eina_list_append(toknz->tmp.kls->properties, toknz->tmp.prop);
       toknz->tmp.prop = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 340; goto _again;}
+      { toknz->cs = 357; goto _again;}
    }}
        break;
-       case 66:
+       case 68:
 #line 316 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
@@ -3386,11 +3476,11 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 67:
+       case 69:
 #line 535 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 68:
+       case 70:
 #line 516 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       if (!toknz->tmp.prop) ABORT(toknz, "No property!!!");
@@ -3402,10 +3492,10 @@ _eof_trans:
       toknz->tmp.kls->properties = eina_list_append(toknz->tmp.kls->properties, toknz->tmp.prop);
       toknz->tmp.prop = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 340; goto _again;}
+      { toknz->cs = 357; goto _again;}
    }}
        break;
-       case 69:
+       case 71:
 #line 316 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
@@ -3424,7 +3514,7 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 70:
+       case 72:
 #line 316 "eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
@@ -3443,31 +3533,31 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 71:
+       case 73:
 #line 307 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 72:
+       case 74:
 #line 547 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.prop) ABORT(toknz, "No property!!!");
       INF("    %s {", toknz->tmp.prop->name);
       toknz->current_nesting++;
-      { toknz->cs = 332; goto _again;}
+      { toknz->cs = 349; goto _again;}
    }}
        break;
-       case 73:
+       case 75:
 #line 560 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  }");
       toknz->current_nesting--;
-      { toknz->cs = 360; goto _again;}
+      { toknz->cs = 377; goto _again;}
    }}
        break;
-       case 74:
+       case 76:
 #line 316 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
@@ -3486,19 +3576,19 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 75:
+       case 77:
 #line 569 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 76:
+       case 78:
 #line 560 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("  }");
       toknz->current_nesting--;
-      { toknz->cs = 360; goto _again;}
+      { toknz->cs = 377; goto _again;}
    }}
        break;
-       case 77:
+       case 79:
 #line 316 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
@@ -3517,7 +3607,7 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 78:
+       case 80:
 #line 316 "eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
@@ -3536,7 +3626,7 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 79:
+       case 81:
 #line 578 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
@@ -3546,32 +3636,32 @@ _eof_trans:
       INF("        %s", toknz->tmp.meth->comment);
    }}
        break;
-       case 80:
+       case 82:
 #line 307 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 81:
+       case 83:
 #line 586 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       INF("      params {");
       toknz->current_nesting++;
       toknz->tmp.params = &(toknz->tmp.meth->params);
-      { toknz->cs = 325; goto _again;}
+      { toknz->cs = 342; goto _again;}
    }}
        break;
-       case 82:
+       case 84:
 #line 669 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
-       case 83:
+       case 85:
 #line 670 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
-       case 84:
+       case 86:
 #line 627 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       Eina_List **l;
@@ -3596,10 +3686,10 @@ _eof_trans:
       *l = eina_list_append(*l, toknz->tmp.meth);
       toknz->tmp.meth = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 355; goto _again;}
+      { toknz->cs = 372; goto _again;}
    }}
        break;
-       case 85:
+       case 87:
 #line 316 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
@@ -3618,15 +3708,15 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 86:
+       case 88:
 #line 664 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 87:
+       case 89:
 #line 668 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 88:
+       case 90:
 #line 627 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       Eina_List **l;
@@ -3651,10 +3741,10 @@ _eof_trans:
       *l = eina_list_append(*l, toknz->tmp.meth);
       toknz->tmp.meth = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 355; goto _again;}
+      { toknz->cs = 372; goto _again;}
    }}
        break;
-       case 89:
+       case 91:
 #line 316 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
@@ -3673,11 +3763,11 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 90:
+       case 92:
 #line 668 "eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}}
        break;
-       case 91:
+       case 93:
 #line 316 "eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
@@ -3696,32 +3786,32 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 92:
+       case 94:
 #line 307 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 93:
+       case 95:
 #line 677 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       INF("    %s {", toknz->tmp.meth->name);
       toknz->current_nesting++;
-      { toknz->cs = 345; goto _again;}
+      { toknz->cs = 362; goto _again;}
    }}
        break;
-       case 94:
+       case 96:
 #line 690 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  }");
       toknz->current_methods_type = METH_TYPE_LAST;
       toknz->current_nesting--;
-      { toknz->cs = 360; goto _again;}
+      { toknz->cs = 377; goto _again;}
    }}
        break;
-       case 95:
+       case 97:
 #line 316 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
@@ -3740,20 +3830,20 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 96:
+       case 98:
 #line 700 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 97:
+       case 99:
 #line 690 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("  }");
       toknz->current_methods_type = METH_TYPE_LAST;
       toknz->current_nesting--;
-      { toknz->cs = 360; goto _again;}
+      { toknz->cs = 377; goto _again;}
    }}
        break;
-       case 98:
+       case 100:
 #line 316 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
@@ -3772,7 +3862,7 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 99:
+       case 101:
 #line 316 "eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
@@ -3791,7 +3881,7 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 100:
+       case 102:
 #line 709 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
@@ -3800,59 +3890,59 @@ _eof_trans:
       toknz->tmp.kls->comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-1);
    }}
        break;
-       case 101:
+       case 103:
 #line 307 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 102:
+       case 104:
 #line 727 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
    }}
        break;
-       case 103:
+       case 105:
 #line 730 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
    }}
        break;
-       case 104:
+       case 106:
 #line 733 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  constructors {");
       toknz->current_methods_type = METH_CONSTRUCTOR;
       toknz->current_nesting++;
-      { toknz->cs = 355; goto _again;}
+      { toknz->cs = 372; goto _again;}
    }}
        break;
-       case 105:
+       case 107:
 #line 740 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  destructors {");
       toknz->current_methods_type = METH_DESTRUCTOR;
       toknz->current_nesting++;
-      { toknz->cs = 355; goto _again;}
+      { toknz->cs = 372; goto _again;}
    }}
        break;
-       case 106:
+       case 108:
 #line 747 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  properties {");
       toknz->current_nesting++;
-      { toknz->cs = 340; goto _again;}
+      { toknz->cs = 357; goto _again;}
    }}
        break;
-       case 107:
+       case 109:
 #line 753 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  begin methods");
       toknz->current_methods_type = METH_REGULAR;
       toknz->current_nesting++;
-      { toknz->cs = 355; goto _again;}
+      { toknz->cs = 372; goto _again;}
    }}
        break;
-       case 108:
+       case 110:
 #line 760 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
@@ -3860,10 +3950,10 @@ _eof_trans:
       toknz->classes = eina_list_append(toknz->classes, toknz->tmp.kls);
       toknz->tmp.kls = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 309; goto _again;}
+      { toknz->cs = 326; goto _again;}
    }}
        break;
-       case 109:
+       case 111:
 #line 316 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
@@ -3882,25 +3972,33 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 110:
-#line 889 "eo_lexer.rl"
+       case 112:
+#line 907 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 111:
-#line 892 "eo_lexer.rl"
+       case 113:
+#line 910 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 112:
+       case 114:
+#line 911 "eo_lexer.rl"
+       { toknz->te = ( toknz->p);( toknz->p)--;}
+       break;
+       case 115:
+#line 912 "eo_lexer.rl"
+       { toknz->te = ( toknz->p);( toknz->p)--;}
+       break;
+       case 116:
 #line 727 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
    }}
        break;
-       case 113:
+       case 117:
 #line 730 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
    }}
        break;
-       case 114:
+       case 118:
 #line 760 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
@@ -3908,10 +4006,10 @@ _eof_trans:
       toknz->classes = eina_list_append(toknz->classes, toknz->tmp.kls);
       toknz->tmp.kls = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 309; goto _again;}
+      { toknz->cs = 326; goto _again;}
    }}
        break;
-       case 115:
+       case 119:
 #line 316 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
@@ -3930,7 +4028,7 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 116:
+       case 120:
 #line 316 "eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
@@ -3949,23 +4047,23 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 117:
+       case 121:
 #line 307 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 118:
-#line 905 "eo_lexer.rl"
+       case 122:
+#line 925 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       INF("begin class: %s", toknz->tmp.kls->name);
       toknz->current_nesting++;
-      { toknz->cs = 360; goto _again;}
+      { toknz->cs = 377; goto _again;}
    }}
        break;
-       case 119:
+       case 123:
 #line 316 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
@@ -3984,11 +4082,11 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 120:
-#line 940 "eo_lexer.rl"
+       case 124:
+#line 960 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 121:
+       case 125:
 #line 316 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
@@ -4007,7 +4105,7 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 122:
+       case 126:
 #line 316 "eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
@@ -4026,7 +4124,7 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-#line 4030 "eo_lexer.c"
+#line 4128 "eo_lexer.c"
                }
        }
 
@@ -4035,11 +4133,11 @@ _again:
        _nacts = (unsigned int) *_acts++;
        while ( _nacts-- > 0 ) {
                switch ( *_acts++ ) {
-       case 36:
+       case 38:
 #line 1 "NONE"
        { toknz->ts = 0;}
        break;
-#line 4043 "eo_lexer.c"
+#line 4141 "eo_lexer.c"
                }
        }
 
@@ -4057,12 +4155,12 @@ _again:
        _out: {}
        }
 
-#line 1059 "eo_lexer.rl"
+#line 1079 "eo_lexer.rl"
 
    if ( toknz->cs == 
-#line 4064 "eo_lexer.c"
+#line 4162 "eo_lexer.c"
 -1
-#line 1060 "eo_lexer.rl"
+#line 1080 "eo_lexer.rl"
  )
      {
         ERR("%s: wrong termination", source);
@@ -4249,6 +4347,14 @@ eo_tokenizer_database_fill(const char *filename)
           {
              database_class_legacy_prefix_set(kls->name, kls->legacy_prefix);
           }
+        if (kls->eo_prefix)
+          {
+             database_class_eo_prefix_set(kls->name, kls->eo_prefix);
+          }
+        if (kls->data_type)
+          {
+             database_class_data_type_set(kls->name, kls->data_type);
+          }
         EINA_LIST_FOREACH(kls->constructors, l, meth)
           {
              Eolian_Function foo_id = database_function_new(meth->name, CONSTRUCTOR);
index 6869eaaa29f9b6437147bdfcfb3ed6cd1b14d63b..c02c55d5272516242d43045c46b902a1a459f7e5 100644 (file)
@@ -789,6 +789,24 @@ _eo_tokenizer_implement_get(Eo_Tokenizer *toknz, char *p)
 
    legacy_prefix = 'legacy_prefix' ignore* colon ignore* ident %end_legacy_prefix end_statement ignore*;
 
+   action end_eo_prefix {
+      if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
+      if (toknz->tmp.kls->eo_prefix != NULL)
+        ABORT(toknz, "An Eo prefix has already been given");
+      toknz->tmp.kls->eo_prefix = _eo_tokenizer_token_get(toknz, fpc);
+   }
+
+   eo_prefix = 'eo_prefix' ignore* colon ignore* ident %end_eo_prefix end_statement ignore*;
+
+   action end_data_type{
+      if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
+      if (toknz->tmp.kls->data_type != NULL)
+        ABORT(toknz, "A data type has already been given");
+      toknz->tmp.kls->data_type = _eo_tokenizer_token_get(toknz, fpc);
+   }
+
+   data_type = 'data' ignore* colon ignore* ident %end_data_type end_statement ignore*;
+
    class_it = ident %end_str_item ignore*;
    class_it_next = list_separator ignore* class_it;
    inherits = begin_list (class_it class_it_next*)? end_list %end_inherits;
@@ -890,6 +908,8 @@ _eo_tokenizer_implement_get(Eo_Tokenizer *toknz, char *p)
       eo_comment     => end_class_comment;
       comment        => show_comment;
       legacy_prefix;
+      eo_prefix;
+      data_type;
       implements     => end_implements;
       events        => end_events;
       constructors   => begin_constructors;
@@ -1243,6 +1263,14 @@ eo_tokenizer_database_fill(const char *filename)
           {
              database_class_legacy_prefix_set(kls->name, kls->legacy_prefix);
           }
+        if (kls->eo_prefix)
+          {
+             database_class_eo_prefix_set(kls->name, kls->eo_prefix);
+          }
+        if (kls->data_type)
+          {
+             database_class_data_type_set(kls->name, kls->data_type);
+          }
         EINA_LIST_FOREACH(kls->constructors, l, meth)
           {
              Eolian_Function foo_id = database_function_new(meth->name, CONSTRUCTOR);
index 3c060d3981d29cbd1b16b35a6e32e9b0a7a9d259..a8850de97f5d94d25ef7c35e92cab2c36cb3f418 100644 (file)
@@ -11,6 +11,8 @@ typedef struct
    Eolian_Class_Type type;
    Eina_Stringshare *description;
    Eina_Stringshare *legacy_prefix;
+   Eina_Stringshare *eo_prefix;
+   Eina_Stringshare *data_type;
    Eolian_Function dflt_ctor;
    Eolian_Function dflt_dtor;
    Eina_List *inherits; /* List Eina_Stringshare * */
@@ -128,6 +130,8 @@ _class_del(Class_desc *class)
    eina_stringshare_del(class->file);
    eina_stringshare_del(class->description);
    eina_stringshare_del(class->legacy_prefix);
+   eina_stringshare_del(class->eo_prefix);
+   eina_stringshare_del(class->data_type);
    free(class);
 }
 
@@ -299,6 +303,38 @@ database_class_legacy_prefix_set(const char *class_name, const char *legacy_pref
    desc->legacy_prefix = eina_stringshare_add(legacy_prefix);
 }
 
+EAPI const char*
+eolian_class_eo_prefix_get(const char *class_name)
+{
+   Class_desc *desc = _class_get(class_name);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(desc, NULL);
+   return desc->eo_prefix;
+}
+
+void
+database_class_eo_prefix_set(const char *class_name, const char *eo_prefix)
+{
+   Class_desc *desc = _class_get(class_name);
+   EINA_SAFETY_ON_NULL_RETURN(desc);
+   desc->eo_prefix = eina_stringshare_add(eo_prefix);
+}
+
+EAPI const char*
+eolian_class_data_type_get(const char *class_name)
+{
+   Class_desc *desc = _class_get(class_name);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(desc, NULL);
+   return desc->data_type;
+}
+
+void
+database_class_data_type_set(const char *class_name, const char *data_type)
+{
+   Class_desc *desc = _class_get(class_name);
+   EINA_SAFETY_ON_NULL_RETURN(desc);
+   desc->data_type= eina_stringshare_add(data_type);
+}
+
 EAPI const Eina_List *
 eolian_class_inherits_list_get(const char *class_name)
 {
@@ -1116,6 +1152,18 @@ static Eina_Bool _class_print(const Eina_Hash *hash EINA_UNUSED, const void *key
         printf("  legacy prefix: <%s>\n", desc->legacy_prefix);
      }
 
+   // Eo prefix
+   if (desc->eo_prefix)
+     {
+        printf("  Eo prefix: <%s>\n", desc->eo_prefix);
+     }
+
+   // Data type
+   if (desc->data_type)
+     {
+        printf("  Data type: <%s>\n", desc->data_type);
+     }
+
    // Default constructor
    if (desc->dflt_ctor)
      {
index 0817841fa59d7516595de8d86e9837d4c86a6bdf..a85851889f54a7f36f5c51f85270a2a68068dd6a 100644 (file)
@@ -51,6 +51,14 @@ database_class_description_set(const char *class_name, const char *description);
 void
 database_class_legacy_prefix_set(const char *class_name, const char *legacy_prefix);
 
+/* Set eo prefix of class. */
+void
+database_class_eo_prefix_set(const char *class_name, const char *eo_prefix);
+
+/* Set data of class. */
+void
+database_class_data_type_set(const char *class_name, const char *data_type);
+
 /* Set file of class */
 Eina_Bool
 database_class_file_set(const char *class_name, const char *file_name);
index fd53f4f3740d949c0383f1756491b27cbba199fb..aa99a09a3c269f406117750839025d7f3790d627 100644 (file)
@@ -1,6 +1,7 @@
 class Evas_Line (Evas_Object)
 {
    legacy_prefix: evas_object_line;
+   eo_prefix: evas_obj_line;
    properties {
       xy {
          set {
index 386610f8d380969d1b2d359b2d2bf6c3644026bd..8b67c06ea3ab0b6ac0bfe67c3f33395316deb0ab 100644 (file)
@@ -1,5 +1,6 @@
 abstract Evas_Object (Eo_Base, Evas_Common_Interface)
 {
+   eo_prefix: evas_obj;
    properties {
       size_hint_max {
          set {
index c4b93deeb113b688a1ada25df801e278559e18c8..4a35704cd9984e90721d78a283e077c3ee6d2465 100644 (file)
@@ -1,6 +1,7 @@
 class Evas_Polygon (Evas_Object)
 {
    legacy_prefix: evas_object_polygon;
+   eo_prefix: evas_obj_polygon;
    methods {
       point_add {
          /*@
index ab6ef3d3c39c2182f4700e7998b6d50fe478e5fe..4453686b90534940d8f94688bb45e4abaedf9c9d 100644 (file)
@@ -1,6 +1,7 @@
 class Evas_Rectangle (Evas_Object)
 {
    legacy_prefix: evas_object_rectangle;
+   eo_prefix: evas_obj_rectangle;
    implements {
       Eo_Base::constructor;
    }
index 1560a6e75d621aeb80cc6a3360c7a8115605158a..eb214edd514faad409ad316732427aa180c35046 100644 (file)
@@ -1,6 +1,7 @@
 class Evas_Text (Evas_Object)
 {
    legacy_prefix: evas_object_text;
+   eo_prefix: evas_obj_text;
    properties {
       font_source {
          set {
index f5a06bbccc84bfb0dba8cc264493381bdc6461db..dcad4d3de2bfae1e8a4496c9dac43c907028de0b 100644 (file)
@@ -1,6 +1,7 @@
 class Evas_Textblock (Evas_Object)
 {
    legacy_prefix: evas_object_textblock;
+   eo_prefix: evas_obj_textblock;
    properties {
       text_markup {
          set {
index 4927c43d75ebe3436af7e52ce90fb4aa05ece174..9a75bae455f2243c8e4e4d9c3e4efb6b1f42f24a 100644 (file)
@@ -1,6 +1,7 @@
 class Evas_Textgrid (Evas_Object)
 {
    legacy_prefix: evas_object_textgrid;
+   eo_prefix: evas_obj_textgrid;
    properties {
       font_source {
          set {