Eolian: add support for functions scope.
authorDaniel Zaoui <daniel.zaoui@samsung.com>
Thu, 3 Apr 2014 13:20:58 +0000 (16:20 +0300)
committerDaniel Zaoui <daniel.zaoui@samsung.com>
Thu, 10 Apr 2014 02:55:16 +0000 (05:55 +0300)
This patch adds support for protected functions.

In the .eo file, the scope (public by default) has to be added before
the function name e.g:
protected foo ...

To access the protected APIs, #define (CLASS)_PROTECTED is needed e.g:
 #define ELM_BUTTON_PROTECTED

src/bin/eolian/eo1_generator.c
src/lib/eolian/Eolian.h
src/lib/eolian/eo_definitions.h
src/lib/eolian/eo_lexer.c
src/lib/eolian/eo_lexer.h
src/lib/eolian/eo_lexer.rl
src/lib/eolian/eolian_database.c
src/lib/eolian/eolian_database.h

index a4d9568..669125b 100644 (file)
@@ -113,7 +113,7 @@ static const char
 tmpl_eo_subid_apnd[] = "   @#EOPREFIX_SUB_ID_@#FUNC,\n";
 
 static const char
-tmpl_eo_funcdef_doxygen[] = "\n\
+tmpl_eo_funcdef_doxygen[] = "\
 /**\n\
  * @def @#eoprefix_@#func\n\
  *\n\
@@ -163,6 +163,7 @@ eo1_fundef_generate(const char *classname, Eolian_Function func, Eolian_Function
    Eina_Bool var_as_ret = EINA_FALSE;
    const char *rettype = NULL;
    Eina_Bool ret_const = EINA_FALSE;
+   Eolian_Function_Scope scope = eolian_function_scope_get(func);
 
    char *fsuffix = "";
    rettype = eolian_function_return_type_get(func, ftype);
@@ -189,12 +190,17 @@ eo1_fundef_generate(const char *classname, Eolian_Function func, Eolian_Function
    const char *funcdesc = eolian_function_description_get(func, descname);
 
    Eina_Strbuf *str_func = eina_strbuf_new();
-   _template_fill(str_func, tmpl_eo_funcdef_doxygen, classname, funcname, EINA_TRUE);
+   if (scope == EOLIAN_SCOPE_PROTECTED)
+      eina_strbuf_append_printf(str_func, "#ifdef %s_PROTECTED\n", capclass);
+   _template_fill(str_func, tmpl_eo_funcdef_doxygen, classname, funcname, EINA_FALSE);
 #ifndef EO
    _template_fill(str_func, tmpl_eo1_funcdef, classname, funcname, EINA_FALSE);
 #else
    _template_fill(str_func, tmpl_eo_funcdef, classname, funcname, EINA_FALSE);
+   if (scope == EOLIAN_SCOPE_PROTECTED)
+      eina_strbuf_append_printf(str_func, "#endif\n");
 #endif
+   eina_strbuf_append_printf(str_func, "\n");
 
    eina_strbuf_replace_all(str_func, "@#EOPREFIX", current_eo_prefix_upper);
    eina_strbuf_replace_all(str_func, "@#eoprefix", current_eo_prefix_lower);
index 45bdd25..180e9a4 100644 (file)
@@ -110,6 +110,12 @@ typedef enum
    EOLIAN_CLASS_INTERFACE
 } Eolian_Class_Type;
 
+typedef enum
+{
+   EOLIAN_SCOPE_PUBLIC,
+   EOLIAN_SCOPE_PROTECTED
+} Eolian_Function_Scope;
+
 /*
  * @brief Parse a given .eo file and fill the database.
  *
@@ -282,6 +288,16 @@ EAPI Eolian_Function eolian_class_default_destructor_get(const char *class_name)
 EAPI Eolian_Function_Type eolian_function_type_get(Eolian_Function function_id);
 
 /*
+ * @brief Returns the scope of a function
+ *
+ * @param[in] function_id Id of the function
+ * @return the function scope
+ *
+ * @ingroup Eolian
+ */
+EAPI Eolian_Function_Scope eolian_function_scope_get(Eolian_Function function_id);
+
+/*
  * @brief Returns the name of a function
  *
  * @param[in] function_id Id of the function
index 76f4a7d..d5a8a94 100644 (file)
@@ -67,6 +67,7 @@ typedef struct _eo_property_def
    Eina_List *keys;
    Eina_List *values;
    Eina_List *accessors;
+   int scope;
 } Eo_Property_Def;
 
 /* METHOD */
@@ -87,6 +88,7 @@ typedef struct _eo_method_def
    Eina_List *params;
    const char* legacy;
    Eina_Bool obj_const;
+   int scope;
 } Eo_Method_Def;
 
 /* SIGNAL */
index 0acce19..66fb0d1 100644 (file)
@@ -35,6 +35,9 @@ static int _eo_tokenizer_log_dom = -1;
 #endif
 #define DBG(...) EINA_LOG_DOM_DBG(_eo_tokenizer_log_dom, __VA_ARGS__)
 
+#define FUNC_PUBLIC 0
+#define FUNC_PROTECTED 1
+
 static int _init_counter = 0;
 
 int
@@ -154,10 +157,21 @@ _eo_tokenizer_class_get(Eo_Tokenizer *toknz, char *p)
 static Eo_Property_Def*
 _eo_tokenizer_property_get(Eo_Tokenizer *toknz, char *p)
 {
-   Eo_Property_Def *prop = calloc(1, sizeof(Eo_Property_Def));
-   if (prop == NULL) ABORT(toknz, "calloc Eo_Property_Def failure");
+   Eo_Property_Def *prop = NULL;
+   if (!strncmp(toknz->saved.tok, "protected ", 10))
+     {
+        toknz->saved.tok += 10;
+        toknz->tmp.fscope = FUNC_PROTECTED;
+     }
+   else
+     {
+        prop = calloc(1, sizeof(Eo_Property_Def));
+        if (prop == NULL) ABORT(toknz, "calloc Eo_Property_Def failure");
 
-   prop->name = _eo_tokenizer_token_get(toknz, p);
+        prop->name = _eo_tokenizer_token_get(toknz, p);
+        prop->scope = toknz->tmp.fscope;
+        toknz->tmp.fscope = FUNC_PUBLIC;
+     }
 
    return prop;
 }
@@ -165,10 +179,21 @@ _eo_tokenizer_property_get(Eo_Tokenizer *toknz, char *p)
 static Eo_Method_Def*
 _eo_tokenizer_method_get(Eo_Tokenizer *toknz, char *p)
 {
-   Eo_Method_Def *meth = calloc(1, sizeof(Eo_Method_Def));
-   if (meth == NULL) ABORT(toknz, "calloc Eo_Method_Def failure");
+   Eo_Method_Def *meth = NULL;
+   if (!strncmp(toknz->saved.tok, "protected ", 10))
+     {
+        toknz->saved.tok += 10;
+        toknz->tmp.fscope = FUNC_PROTECTED;
+     }
+   else
+     {
+        meth = calloc(1, sizeof(Eo_Method_Def));
+        if (meth == NULL) ABORT(toknz, "calloc Eo_Method_Def failure");
 
-   meth->name = _eo_tokenizer_token_get(toknz, p);
+        meth->name = _eo_tokenizer_token_get(toknz, p);
+        meth->scope = toknz->tmp.fscope;
+        toknz->tmp.fscope = FUNC_PUBLIC;
+     }
 
    return meth;
 }
@@ -351,11 +376,11 @@ _eo_tokenizer_implement_get(Eo_Tokenizer *toknz, char *p)
 }
 
 
-#line 428 "lib/eolian/eo_lexer.rl"
+#line 453 "lib/eolian/eo_lexer.rl"
 
 
 
-#line 359 "lib/eolian/eo_lexer.c"
+#line 384 "lib/eolian/eo_lexer.c"
 static const char _eo_tokenizer_actions[] = {
        0, 1, 0, 1, 2, 1, 6, 1, 
        10, 1, 15, 1, 16, 1, 17, 1, 
@@ -416,39 +441,40 @@ static const short _eo_tokenizer_key_offsets[] = {
        380, 384, 385, 386, 396, 398, 401, 403, 
        406, 407, 408, 412, 413, 414, 418, 419, 
        423, 424, 425, 426, 427, 431, 433, 436, 
-       437, 448, 452, 455, 457, 460, 471, 473, 
-       476, 477, 478, 479, 480, 481, 482, 483, 
-       484, 485, 488, 495, 503, 504, 505, 506, 
-       507, 511, 512, 513, 514, 515, 518, 525, 
-       539, 554, 558, 559, 560, 570, 572, 575, 
-       577, 580, 581, 592, 596, 599, 601, 604, 
-       615, 617, 620, 621, 622, 623, 624, 625, 
-       626, 627, 628, 629, 630, 631, 635, 636, 
-       637, 641, 648, 656, 657, 658, 659, 660, 
-       661, 662, 663, 664, 665, 669, 670, 671, 
-       672, 673, 674, 675, 676, 680, 687, 695, 
-       696, 697, 698, 699, 703, 711, 727, 731, 
-       743, 744, 745, 755, 757, 760, 768, 776, 
-       784, 796, 800, 801, 802, 803, 804, 805, 
-       806, 807, 808, 812, 820, 833, 838, 842, 
-       843, 844, 845, 846, 847, 859, 864, 868, 
-       877, 881, 882, 883, 884, 885, 886, 890, 
-       899, 906, 917, 921, 935, 945, 957, 962, 
-       968, 973, 974, 975, 976, 977, 978, 981, 
-       988, 996, 997, 1001, 1009, 1013, 1018, 1019, 
-       1020, 1030, 1032, 1035, 1045, 1057, 1069, 1070, 
-       1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 
-       1079, 1080, 1081, 1085, 1092, 1100, 1101, 1102, 
-       1103, 1104, 1105, 1109, 1110, 1111, 1112, 1113, 
-       1114, 1115, 1116, 1117, 1121, 1129, 1132, 1134, 
-       1135, 1136, 1137, 1138, 1149, 1152, 1154, 1165, 
-       1177, 1189, 1193, 1193, 1194, 1203, 1206, 1208, 
-       1219, 1223, 1223, 1224, 1233, 1236, 1238, 1239, 
-       1240, 1241, 1242, 1243, 1254, 1257, 1259, 1266, 
-       1267, 1276, 1279, 1281, 1282, 1283, 1284, 1285, 
-       1289, 1289, 1290, 1301, 1304, 1306, 1313, 1314, 
-       1326, 1329, 1331, 1332, 1334, 1337, 1339, 1342, 
-       1343, 1344, 1345, 1346, 1349, 1350, 1351
+       437, 451, 455, 466, 477, 480, 482, 485, 
+       496, 498, 501, 502, 503, 504, 505, 506, 
+       507, 508, 509, 510, 513, 520, 528, 529, 
+       530, 531, 532, 536, 537, 538, 539, 540, 
+       543, 550, 564, 579, 583, 584, 585, 595, 
+       597, 600, 602, 605, 606, 620, 624, 635, 
+       646, 649, 651, 654, 665, 667, 670, 671, 
+       672, 673, 674, 675, 676, 677, 678, 679, 
+       680, 681, 685, 686, 687, 691, 698, 706, 
+       707, 708, 709, 710, 711, 712, 713, 714, 
+       715, 719, 720, 721, 722, 723, 724, 725, 
+       726, 730, 737, 745, 746, 747, 748, 749, 
+       753, 761, 777, 781, 793, 794, 795, 805, 
+       807, 810, 818, 826, 834, 846, 850, 851, 
+       852, 853, 854, 855, 856, 857, 858, 862, 
+       870, 883, 888, 892, 893, 894, 895, 896, 
+       897, 909, 914, 918, 927, 931, 932, 933, 
+       934, 935, 936, 940, 949, 956, 967, 971, 
+       985, 995, 1007, 1012, 1018, 1023, 1024, 1025, 
+       1026, 1027, 1028, 1031, 1038, 1046, 1047, 1051, 
+       1059, 1063, 1068, 1069, 1070, 1080, 1082, 1085, 
+       1095, 1107, 1119, 1120, 1121, 1122, 1123, 1124, 
+       1125, 1126, 1127, 1128, 1129, 1130, 1131, 1135, 
+       1142, 1150, 1151, 1152, 1153, 1154, 1155, 1159, 
+       1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 
+       1171, 1179, 1182, 1184, 1185, 1186, 1187, 1188, 
+       1199, 1202, 1204, 1215, 1227, 1239, 1243, 1243, 
+       1244, 1253, 1256, 1258, 1269, 1273, 1273, 1274, 
+       1283, 1286, 1288, 1289, 1290, 1291, 1292, 1293, 
+       1304, 1307, 1309, 1316, 1317, 1326, 1329, 1331, 
+       1332, 1333, 1334, 1335, 1339, 1339, 1340, 1351, 
+       1354, 1356, 1363, 1364, 1376, 1379, 1381, 1382, 
+       1384, 1387, 1389, 1392, 1393, 1394, 1395, 1396, 
+       1399, 1400, 1401
 };
 
 static const char _eo_tokenizer_trans_keys[] = {
@@ -506,122 +532,128 @@ static const char _eo_tokenizer_trans_keys[] = {
        10, 123, 0, 32, 121, 115, 10, 123, 
        0, 32, 116, 10, 123, 0, 32, 108, 
        117, 101, 115, 10, 123, 0, 32, 10, 
-       42, 10, 42, 47, 10, 10, 95, 123, 
-       0, 32, 48, 57, 65, 90, 97, 122, 
-       10, 123, 0, 32, 10, 42, 64, 10, 
-       42, 10, 42, 47, 10, 42, 95, 0, 
-       32, 48, 57, 64, 90, 97, 122, 10, 
-       42, 10, 42, 47, 10, 110, 115, 116, 
-       59, 103, 97, 99, 121, 9, 13, 32, 
-       9, 13, 32, 65, 90, 97, 122, 59, 
-       95, 48, 57, 65, 90, 97, 122, 114, 
-       97, 109, 115, 10, 123, 0, 32, 116, 
-       117, 114, 110, 9, 13, 32, 9, 13, 
-       32, 65, 90, 97, 122, 9, 13, 32, 
-       95, 40, 42, 45, 46, 48, 57, 64, 
-       90, 97, 122, 9, 13, 32, 59, 95, 
-       40, 42, 45, 46, 48, 57, 64, 90, 
-       97, 122, 9, 13, 32, 47, 42, 64, 
-       10, 95, 0, 32, 48, 57, 64, 90, 
-       97, 122, 10, 42, 10, 42, 47, 10, 
-       42, 10, 42, 47, 10, 10, 95, 123, 
-       0, 32, 48, 57, 65, 90, 97, 122, 
-       10, 123, 0, 32, 10, 42, 64, 10, 
-       42, 10, 42, 47, 10, 42, 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, 116, 97, 10, 58, 0, 
-       32, 10, 0, 32, 65, 90, 97, 122, 
+       42, 10, 42, 47, 10, 9, 10, 13, 
+       32, 95, 123, 0, 31, 48, 57, 65, 
+       90, 97, 122, 10, 123, 0, 32, 10, 
+       95, 123, 0, 32, 48, 57, 65, 90, 
+       97, 122, 10, 95, 123, 0, 32, 48, 
+       57, 65, 90, 97, 122, 10, 42, 64, 
+       10, 42, 10, 42, 47, 10, 42, 95, 
+       0, 32, 48, 57, 64, 90, 97, 122, 
+       10, 42, 10, 42, 47, 10, 110, 115, 
+       116, 59, 103, 97, 99, 121, 9, 13, 
+       32, 9, 13, 32, 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, 59, 
-       95, 48, 57, 65, 90, 97, 122, 101, 
-       110, 116, 115, 10, 123, 0, 32, 10, 
-       125, 0, 32, 65, 90, 97, 122, 9, 
-       10, 13, 32, 40, 44, 59, 95, 0, 
-       31, 48, 57, 65, 90, 97, 122, 10, 
-       59, 0, 32, 9, 10, 13, 32, 47, 
-       125, 0, 31, 65, 90, 97, 122, 42, 
+       114, 97, 109, 115, 10, 123, 0, 32, 
+       116, 117, 114, 110, 9, 13, 32, 9, 
+       13, 32, 65, 90, 97, 122, 9, 13, 
+       32, 95, 40, 42, 45, 46, 48, 57, 
+       64, 90, 97, 122, 9, 13, 32, 59, 
+       95, 40, 42, 45, 46, 48, 57, 64, 
+       90, 97, 122, 9, 13, 32, 47, 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, 
-       9, 10, 13, 32, 40, 59, 0, 31, 
-       9, 13, 32, 95, 65, 90, 97, 122, 
-       9, 13, 32, 41, 42, 95, 48, 57, 
-       65, 90, 97, 122, 10, 59, 0, 32, 
-       112, 108, 101, 109, 101, 110, 116, 115, 
-       10, 123, 0, 32, 10, 125, 0, 32, 
-       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, 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, 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, 58, 95, 48, 57, 
-       65, 90, 97, 122, 58, 65, 90, 97, 
+       10, 42, 10, 42, 47, 10, 9, 10, 
+       13, 32, 95, 123, 0, 31, 48, 57, 
+       65, 90, 97, 122, 10, 123, 0, 32, 
+       10, 95, 123, 0, 32, 48, 57, 65, 
+       90, 97, 122, 10, 95, 123, 0, 32, 
+       48, 57, 65, 90, 97, 122, 10, 42, 
+       64, 10, 42, 10, 42, 47, 10, 42, 
+       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, 116, 97, 10, 
+       58, 0, 32, 10, 0, 32, 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, 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, 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, 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, 9, 13, 32, 58, 95, 48, 
-       57, 65, 90, 97, 122, 9, 13, 32, 
-       58, 95, 101, 48, 57, 65, 90, 97, 
-       122, 9, 13, 32, 58, 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, 
-       48, 57, 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, 0, 32, 48, 
-       57, 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
+       122, 101, 110, 116, 115, 10, 123, 0, 
+       32, 10, 125, 0, 32, 65, 90, 97, 
+       122, 9, 10, 13, 32, 40, 44, 59, 
+       95, 0, 31, 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, 9, 10, 13, 32, 40, 59, 
+       0, 31, 9, 13, 32, 95, 65, 90, 
+       97, 122, 9, 13, 32, 41, 42, 95, 
+       48, 57, 65, 90, 97, 122, 10, 59, 
+       0, 32, 112, 108, 101, 109, 101, 110, 
+       116, 115, 10, 123, 0, 32, 10, 125, 
+       0, 32, 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, 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, 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, 58, 95, 
+       48, 57, 65, 90, 97, 122, 58, 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, 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, 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, 9, 13, 32, 58, 
+       95, 48, 57, 65, 90, 97, 122, 9, 
+       13, 32, 58, 95, 101, 48, 57, 65, 
+       90, 97, 122, 9, 13, 32, 58, 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, 48, 57, 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, 0, 
+       32, 48, 57, 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[] = {
@@ -637,39 +669,40 @@ static const char _eo_tokenizer_single_lengths[] = {
        4, 1, 1, 2, 2, 3, 2, 3, 
        1, 1, 2, 1, 1, 2, 1, 2, 
        1, 1, 1, 1, 2, 2, 3, 1, 
-       3, 2, 3, 2, 3, 3, 2, 3, 
-       1, 1, 1, 1, 1, 1, 1, 1, 
-       1, 3, 3, 2, 1, 1, 1, 1, 
-       2, 1, 1, 1, 1, 3, 3, 4, 
-       5, 4, 1, 1, 2, 2, 3, 2, 
-       3, 1, 3, 2, 3, 2, 3, 3, 
+       6, 2, 3, 3, 3, 2, 3, 3, 
        2, 3, 1, 1, 1, 1, 1, 1, 
-       1, 1, 1, 1, 1, 2, 1, 1, 
-       2, 1, 2, 1, 1, 1, 1, 1, 
-       1, 1, 1, 1, 2, 1, 1, 1, 
-       1, 1, 1, 1, 2, 1, 2, 1, 
-       1, 1, 1, 2, 2, 8, 2, 6, 
-       1, 1, 2, 2, 3, 2, 6, 4, 
-       6, 2, 1, 1, 1, 1, 1, 1, 
-       1, 1, 2, 2, 5, 3, 2, 1, 
-       1, 1, 1, 1, 6, 3, 2, 3, 
-       2, 1, 1, 1, 1, 1, 2, 3, 
-       3, 3, 2, 8, 4, 6, 5, 4, 
-       3, 1, 1, 1, 1, 1, 3, 3, 
-       2, 1, 0, 2, 2, 3, 1, 1, 
-       2, 2, 3, 4, 6, 4, 1, 1, 
+       1, 1, 1, 3, 3, 2, 1, 1, 
+       1, 1, 2, 1, 1, 1, 1, 3, 
+       3, 4, 5, 4, 1, 1, 2, 2, 
+       3, 2, 3, 1, 6, 2, 3, 3, 
+       3, 2, 3, 3, 2, 3, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 2, 1, 1, 2, 1, 2, 1, 
        1, 1, 1, 1, 1, 1, 1, 1, 
-       1, 1, 2, 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, 5, 6, 
-       6, 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
+       2, 1, 1, 1, 1, 1, 1, 1, 
+       2, 1, 2, 1, 1, 1, 1, 2, 
+       2, 8, 2, 6, 1, 1, 2, 2, 
+       3, 2, 6, 4, 6, 2, 1, 1, 
+       1, 1, 1, 1, 1, 1, 2, 2, 
+       5, 3, 2, 1, 1, 1, 1, 1, 
+       6, 3, 2, 3, 2, 1, 1, 1, 
+       1, 1, 2, 3, 3, 3, 2, 8, 
+       4, 6, 5, 4, 3, 1, 1, 1, 
+       1, 1, 3, 3, 2, 1, 0, 2, 
+       2, 3, 1, 1, 2, 2, 3, 4, 
+       6, 4, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1, 2, 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, 5, 6, 6, 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[] = {
@@ -685,39 +718,40 @@ static const char _eo_tokenizer_range_lengths[] = {
        0, 0, 0, 4, 0, 0, 0, 0, 
        0, 0, 1, 0, 0, 1, 0, 1, 
        0, 0, 0, 0, 1, 0, 0, 0, 
-       4, 1, 0, 0, 0, 4, 0, 0
+       4, 1, 4, 4, 0, 0, 0, 4
        0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 2, 3, 0, 0, 0, 0, 
-       1, 0, 0, 0, 0, 0, 2, 5, 
-       5, 0, 0, 0, 4, 0, 0, 0, 
-       0, 0, 4, 1, 0, 0, 0, 4, 
+       0, 0, 0, 0, 2, 3, 0, 0, 
+       0, 0, 1, 0, 0, 0, 0, 0, 
+       2, 5, 5, 0, 0, 0, 4, 0, 
+       0, 0, 0, 0, 4, 1, 4, 4, 
+       0, 0, 0, 4, 0, 0, 0, 0, 
        0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 1, 0, 0, 
-       1, 3, 3, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 1, 0, 0, 0, 
-       0, 0, 0, 0, 1, 3, 3, 0, 
-       0, 0, 0, 1, 3, 4, 1, 3, 
-       0, 0, 4, 0, 0, 3, 1, 2, 
-       3, 1, 0, 0, 0, 0, 0, 0, 
-       0, 0, 1, 3, 4, 1, 1, 0, 
-       0, 0, 0, 0, 3, 1, 1, 3, 
-       1, 0, 0, 0, 0, 0, 1, 3, 
-       2, 4, 1, 3, 3, 3, 0, 1, 
-       1, 0, 0, 0, 0, 0, 0, 2, 
-       3, 0, 2, 3, 1, 1, 0, 0, 
-       4, 0, 0, 3, 3, 4, 0, 0, 
+       0, 1, 0, 0, 1, 3, 3, 0, 
        0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 1, 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, 4, 1, 0, 3, 0, 
-       1, 1, 0, 0, 0, 0, 0, 0, 
-       0, 0, 4, 1, 0, 3, 0, 1, 
-       1, 0, 0, 0, 1, 0, 1, 0, 
-       0, 0, 0, 1, 0, 0, 0
+       1, 0, 0, 0, 0, 0, 0, 0, 
+       1, 3, 3, 0, 0, 0, 0, 1, 
+       3, 4, 1, 3, 0, 0, 4, 0, 
+       0, 3, 1, 2, 3, 1, 0, 0, 
+       0, 0, 0, 0, 0, 0, 1, 3, 
+       4, 1, 1, 0, 0, 0, 0, 0, 
+       3, 1, 1, 3, 1, 0, 0, 0, 
+       0, 0, 1, 3, 2, 4, 1, 3, 
+       3, 3, 0, 1, 1, 0, 0, 0, 
+       0, 0, 0, 2, 3, 0, 2, 3, 
+       1, 1, 0, 0, 4, 0, 0, 3, 
+       3, 4, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 1, 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, 4, 
+       1, 0, 3, 0, 1, 1, 0, 0, 
+       0, 0, 0, 0, 0, 0, 4, 1, 
+       0, 3, 0, 1, 1, 0, 0, 0, 
+       1, 0, 1, 0, 0, 0, 0, 1, 
+       0, 0, 0
 };
 
 static const short _eo_tokenizer_index_offsets[] = {
@@ -733,39 +767,40 @@ static const short _eo_tokenizer_index_offsets[] = {
        365, 370, 372, 374, 381, 384, 388, 391, 
        395, 397, 399, 403, 405, 407, 411, 413, 
        417, 419, 421, 423, 425, 429, 432, 436, 
-       438, 446, 450, 454, 457, 461, 469, 472, 
-       476, 478, 480, 482, 484, 486, 488, 490, 
-       492, 494, 498, 504, 510, 512, 514, 516, 
-       518, 522, 524, 526, 528, 530, 534, 540, 
-       550, 561, 566, 568, 570, 577, 580, 584, 
-       587, 591, 593, 601, 605, 609, 612, 616, 
-       624, 627, 631, 633, 635, 637, 639, 641, 
-       643, 645, 647, 649, 651, 653, 657, 659, 
-       661, 665, 670, 676, 678, 680, 682, 684, 
-       686, 688, 690, 692, 694, 698, 700, 702, 
-       704, 706, 708, 710, 712, 716, 721, 727, 
-       729, 731, 733, 735, 739, 745, 758, 762, 
-       772, 774, 776, 783, 786, 790, 796, 804, 
-       811, 821, 825, 827, 829, 831, 833, 835, 
-       837, 839, 841, 845, 851, 861, 866, 870, 
-       872, 874, 876, 878, 880, 890, 895, 899, 
-       906, 910, 912, 914, 916, 918, 920, 924, 
-       931, 937, 945, 949, 961, 969, 979, 985, 
-       991, 996, 998, 1000, 1002, 1004, 1006, 1010, 
-       1016, 1022, 1024, 1027, 1033, 1037, 1042, 1044, 
-       1046, 1053, 1056, 1060, 1068, 1078, 1087, 1089, 
-       1091, 1093, 1095, 1097, 1099, 1101, 1103, 1105, 
-       1107, 1109, 1111, 1115, 1120, 1126, 1128, 1130, 
-       1132, 1134, 1136, 1140, 1142, 1144, 1146, 1148, 
-       1150, 1152, 1154, 1156, 1160, 1168, 1171, 1174, 
-       1176, 1178, 1180, 1182, 1191, 1194, 1197, 1206, 
-       1216, 1226, 1231, 1232, 1234, 1241, 1244, 1247, 
-       1256, 1261, 1262, 1264, 1273, 1276, 1279, 1281, 
-       1283, 1285, 1287, 1289, 1297, 1300, 1303, 1308, 
-       1310, 1319, 1322, 1325, 1327, 1329, 1331, 1333, 
-       1338, 1339, 1341, 1349, 1352, 1355, 1360, 1362, 
-       1374, 1377, 1380, 1382, 1385, 1388, 1391, 1394, 
-       1396, 1398, 1400, 1402, 1405, 1407, 1409
+       438, 449, 453, 461, 469, 473, 476, 480, 
+       488, 491, 495, 497, 499, 501, 503, 505, 
+       507, 509, 511, 513, 517, 523, 529, 531, 
+       533, 535, 537, 541, 543, 545, 547, 549, 
+       553, 559, 569, 580, 585, 587, 589, 596, 
+       599, 603, 606, 610, 612, 623, 627, 635, 
+       643, 647, 650, 654, 662, 665, 669, 671, 
+       673, 675, 677, 679, 681, 683, 685, 687, 
+       689, 691, 695, 697, 699, 703, 708, 714, 
+       716, 718, 720, 722, 724, 726, 728, 730, 
+       732, 736, 738, 740, 742, 744, 746, 748, 
+       750, 754, 759, 765, 767, 769, 771, 773, 
+       777, 783, 796, 800, 810, 812, 814, 821, 
+       824, 828, 834, 842, 849, 859, 863, 865, 
+       867, 869, 871, 873, 875, 877, 879, 883, 
+       889, 899, 904, 908, 910, 912, 914, 916, 
+       918, 928, 933, 937, 944, 948, 950, 952, 
+       954, 956, 958, 962, 969, 975, 983, 987, 
+       999, 1007, 1017, 1023, 1029, 1034, 1036, 1038, 
+       1040, 1042, 1044, 1048, 1054, 1060, 1062, 1065, 
+       1071, 1075, 1080, 1082, 1084, 1091, 1094, 1098, 
+       1106, 1116, 1125, 1127, 1129, 1131, 1133, 1135, 
+       1137, 1139, 1141, 1143, 1145, 1147, 1149, 1153, 
+       1158, 1164, 1166, 1168, 1170, 1172, 1174, 1178, 
+       1180, 1182, 1184, 1186, 1188, 1190, 1192, 1194, 
+       1198, 1206, 1209, 1212, 1214, 1216, 1218, 1220, 
+       1229, 1232, 1235, 1244, 1254, 1264, 1269, 1270, 
+       1272, 1279, 1282, 1285, 1294, 1299, 1300, 1302, 
+       1311, 1314, 1317, 1319, 1321, 1323, 1325, 1327, 
+       1335, 1338, 1341, 1346, 1348, 1357, 1360, 1363, 
+       1365, 1367, 1369, 1371, 1376, 1377, 1379, 1387, 
+       1390, 1393, 1398, 1400, 1412, 1415, 1418, 1420, 
+       1423, 1426, 1429, 1432, 1434, 1436, 1438, 1440, 
+       1443, 1445, 1447
 };
 
 static const short _eo_tokenizer_indicies[] = {
@@ -824,208 +859,213 @@ static const short _eo_tokenizer_indicies[] = {
        127, 144, 127, 145, 127, 146, 127, 147, 
        127, 148, 149, 147, 127, 152, 153, 151, 
        152, 153, 154, 151, 156, 155, 158, 159, 
-       160, 157, 159, 159, 159, 150, 162, 163, 
-       161, 150, 166, 167, 168, 165, 166, 167, 
-       165, 166, 167, 169, 165, 170, 167, 171, 
-       168, 171, 171, 171, 165, 173, 174, 172, 
-       173, 174, 175, 172, 177, 176, 178, 164, 
-       179, 164, 180, 164, 181, 164, 182, 164, 
-       183, 164, 184, 164, 185, 164, 186, 186, 
-       186, 164, 186, 186, 186, 187, 187, 164, 
-       189, 188, 188, 188, 188, 164, 190, 164, 
-       191, 164, 192, 164, 193, 164, 194, 195, 
-       193, 164, 196, 164, 197, 164, 198, 164, 
-       199, 164, 200, 200, 200, 164, 200, 200, 
-       200, 201, 201, 164, 202, 202, 202, 202, 
-       202, 202, 202, 202, 202, 164, 202, 202, 
-       202, 203, 202, 202, 202, 202, 202, 202, 
-       164, 205, 205, 205, 206, 204, 207, 204, 
-       208, 204, 209, 210, 208, 210, 210, 210, 
-       204, 212, 213, 211, 212, 213, 214, 211, 
-       217, 218, 216, 217, 218, 219, 216, 221, 
-       220, 223, 224, 225, 222, 224, 224, 224, 
-       215, 227, 228, 226, 215, 231, 232, 233, 
-       230, 231, 232, 230, 231, 232, 234, 230, 
-       235, 232, 236, 233, 236, 236, 236, 230, 
-       238, 239, 237, 238, 239, 240, 237, 242, 
-       241, 243, 229, 244, 229, 245, 229, 246, 
-       229, 247, 229, 248, 229, 249, 229, 250, 
-       229, 251, 229, 252, 229, 253, 254, 252, 
-       229, 255, 229, 256, 229, 257, 258, 256, 
-       229, 259, 258, 260, 260, 229, 262, 261, 
-       261, 261, 261, 229, 263, 229, 264, 229, 
-       265, 229, 266, 229, 267, 229, 268, 229, 
-       269, 229, 270, 229, 271, 229, 272, 273, 
-       271, 229, 274, 229, 275, 229, 276, 229, 
-       277, 229, 278, 229, 279, 229, 280, 229, 
-       281, 282, 280, 229, 283, 282, 284, 284, 
-       229, 286, 285, 285, 285, 285, 229, 287, 
-       229, 288, 229, 289, 229, 290, 229, 291, 
-       292, 290, 229, 293, 295, 292, 294, 294, 
-       229, 297, 298, 297, 297, 299, 300, 301, 
-       300, 296, 300, 300, 300, 229, 303, 304, 
-       302, 229, 304, 293, 304, 304, 305, 295, 
-       292, 294, 294, 229, 306, 229, 307, 229, 
-       308, 309, 307, 309, 309, 309, 229, 311, 
-       312, 310, 311, 312, 313, 310, 315, 317, 
-       314, 316, 316, 229, 318, 303, 318, 318, 
-       319, 304, 302, 229, 319, 319, 319, 320, 
-       320, 320, 229, 321, 321, 321, 322, 321, 
-       321, 321, 321, 321, 229, 324, 325, 323, 
-       229, 326, 229, 327, 229, 328, 229, 329, 
-       229, 330, 229, 331, 229, 332, 229, 333, 
-       229, 334, 335, 333, 229, 336, 338, 335, 
-       337, 337, 229, 340, 342, 343, 341, 344, 
-       339, 341, 341, 341, 229, 346, 335, 347, 
-       345, 229, 348, 349, 347, 229, 350, 229, 
-       351, 229, 352, 229, 353, 229, 354, 229, 
-       356, 357, 356, 356, 358, 360, 355, 359, 
-       359, 229, 362, 363, 364, 361, 229, 365, 
-       366, 363, 229, 336, 335, 338, 335, 337, 
-       337, 229, 367, 368, 364, 229, 369, 229, 
-       370, 229, 371, 229, 372, 229, 373, 229, 
-       374, 375, 373, 229, 376, 377, 378, 375, 
-       379, 379, 229, 377, 377, 377, 380, 380, 
-       229, 382, 384, 383, 381, 383, 383, 383, 
-       229, 386, 378, 385, 229, 378, 388, 378, 
-       378, 389, 377, 378, 390, 387, 379, 379, 
-       229, 388, 377, 378, 390, 387, 379, 379, 
-       229, 391, 391, 391, 393, 394, 392, 392, 
-       392, 392, 229, 395, 395, 395, 377, 378, 
-       229, 397, 396, 398, 399, 396, 229, 397, 
-       398, 399, 396, 229, 400, 229, 401, 229, 
-       402, 229, 403, 229, 404, 229, 405, 405, 
-       405, 229, 405, 405, 405, 406, 406, 229, 
-       408, 407, 407, 407, 407, 229, 409, 229, 
-       410, 410, 229, 412, 411, 411, 411, 411, 
-       229, 414, 399, 413, 229, 365, 363, 366, 
-       363, 229, 415, 229, 416, 229, 417, 418, 
-       416, 418, 418, 418, 229, 420, 421, 419, 
-       420, 421, 422, 419, 424, 425, 426, 428, 
-       423, 427, 427, 229, 429, 362, 429, 429, 
-       363, 364, 361, 430, 430, 229, 432, 434, 
-       433, 435, 431, 433, 433, 433, 229, 341, 
-       229, 436, 229, 437, 229, 438, 229, 439, 
-       229, 440, 229, 441, 229, 442, 229, 443, 
-       229, 444, 229, 445, 229, 446, 229, 447, 
-       448, 446, 229, 449, 448, 450, 450, 229, 
-       452, 451, 451, 451, 451, 229, 453, 229, 
-       454, 229, 455, 229, 456, 229, 457, 229, 
-       458, 459, 457, 229, 460, 229, 461, 229, 
-       462, 229, 463, 229, 464, 229, 465, 229, 
-       466, 229, 467, 229, 468, 469, 467, 229, 
-       472, 473, 474, 475, 476, 477, 471, 470, 
-       472, 471, 478, 1, 5, 479, 480, 479, 
-       481, 479, 482, 479, 483, 479, 486, 487, 
-       489, 490, 491, 485, 488, 488, 484, 486, 
-       485, 492, 494, 69, 493, 71, 71, 71, 
-       72, 79, 79, 79, 79, 493, 71, 71, 
-       71, 72, 79, 495, 79, 79, 79, 493, 
-       71, 71, 71, 72, 79, 496, 79, 79, 
-       79, 493, 97, 97, 97, 98, 497, 498, 
-       500, 499, 503, 504, 506, 502, 505, 505, 
-       501, 503, 502, 507, 108, 112, 508, 114, 
-       114, 114, 114, 114, 114, 114, 114, 508, 
-       117, 117, 117, 118, 509, 510, 512, 511, 
-       515, 516, 517, 518, 519, 520, 521, 514, 
-       513, 515, 514, 522, 128, 132, 523, 524, 
-       523, 525, 523, 526, 523, 527, 523, 529, 
-       528, 532, 533, 535, 531, 534, 534, 534, 
-       530, 532, 531, 536, 151, 155, 537, 159, 
-       159, 159, 159, 537, 539, 538, 542, 543, 
-       544, 545, 546, 547, 548, 541, 540, 542, 
-       541, 549, 551, 176, 550, 552, 550, 553, 
-       550, 554, 550, 555, 550, 205, 205, 205, 
-       206, 556, 557, 559, 558, 562, 563, 565, 
-       561, 564, 564, 564, 560, 562, 561, 566, 
-       216, 220, 567, 224, 224, 224, 224, 567, 
-       569, 568, 572, 573, 574, 575, 576, 577, 
-       578, 579, 580, 581, 571, 570, 572, 571, 
-       582, 584, 241, 583, 585, 583, 586, 587, 
-       583, 590, 589, 588, 591, 592, 583, 595, 
-       594, 593, 597, 596, 598, 583, 600, 599, 
-       601, 583, 604, 603, 602, 605, 583, 606, 
-       583, 608, 607, 0
+       158, 158, 160, 161, 157, 160, 160, 160, 
+       150, 163, 164, 162, 150, 163, 165, 164, 
+       162, 165, 165, 165, 150, 159, 165, 161, 
+       157, 165, 165, 165, 150, 168, 169, 170, 
+       167, 168, 169, 167, 168, 169, 171, 167, 
+       172, 169, 173, 170, 173, 173, 173, 167, 
+       175, 176, 174, 175, 176, 177, 174, 179, 
+       178, 180, 166, 181, 166, 182, 166, 183, 
+       166, 184, 166, 185, 166, 186, 166, 187, 
+       166, 188, 188, 188, 166, 188, 188, 188, 
+       189, 189, 166, 191, 190, 190, 190, 190, 
+       166, 192, 166, 193, 166, 194, 166, 195, 
+       166, 196, 197, 195, 166, 198, 166, 199, 
+       166, 200, 166, 201, 166, 202, 202, 202, 
+       166, 202, 202, 202, 203, 203, 166, 204, 
+       204, 204, 204, 204, 204, 204, 204, 204, 
+       166, 204, 204, 204, 205, 204, 204, 204, 
+       204, 204, 204, 166, 207, 207, 207, 208, 
+       206, 209, 206, 210, 206, 211, 212, 210, 
+       212, 212, 212, 206, 214, 215, 213, 214, 
+       215, 216, 213, 219, 220, 218, 219, 220, 
+       221, 218, 223, 222, 225, 226, 225, 225, 
+       227, 228, 224, 227, 227, 227, 217, 230, 
+       231, 229, 217, 230, 232, 231, 229, 232, 
+       232, 232, 217, 226, 232, 228, 224, 232, 
+       232, 232, 217, 235, 236, 237, 234, 235, 
+       236, 234, 235, 236, 238, 234, 239, 236, 
+       240, 237, 240, 240, 240, 234, 242, 243, 
+       241, 242, 243, 244, 241, 246, 245, 247, 
+       233, 248, 233, 249, 233, 250, 233, 251, 
+       233, 252, 233, 253, 233, 254, 233, 255, 
+       233, 256, 233, 257, 258, 256, 233, 259, 
+       233, 260, 233, 261, 262, 260, 233, 263, 
+       262, 264, 264, 233, 266, 265, 265, 265, 
+       265, 233, 267, 233, 268, 233, 269, 233, 
+       270, 233, 271, 233, 272, 233, 273, 233, 
+       274, 233, 275, 233, 276, 277, 275, 233, 
+       278, 233, 279, 233, 280, 233, 281, 233, 
+       282, 233, 283, 233, 284, 233, 285, 286, 
+       284, 233, 287, 286, 288, 288, 233, 290, 
+       289, 289, 289, 289, 233, 291, 233, 292, 
+       233, 293, 233, 294, 233, 295, 296, 294, 
+       233, 297, 299, 296, 298, 298, 233, 301, 
+       302, 301, 301, 303, 304, 305, 304, 300, 
+       304, 304, 304, 233, 307, 308, 306, 233, 
+       308, 297, 308, 308, 309, 299, 296, 298, 
+       298, 233, 310, 233, 311, 233, 312, 313, 
+       311, 313, 313, 313, 233, 315, 316, 314, 
+       315, 316, 317, 314, 319, 321, 318, 320, 
+       320, 233, 322, 307, 322, 322, 323, 308, 
+       306, 233, 323, 323, 323, 324, 324, 324, 
+       233, 325, 325, 325, 326, 325, 325, 325, 
+       325, 325, 233, 328, 329, 327, 233, 330, 
+       233, 331, 233, 332, 233, 333, 233, 334, 
+       233, 335, 233, 336, 233, 337, 233, 338, 
+       339, 337, 233, 340, 342, 339, 341, 341, 
+       233, 344, 346, 347, 345, 348, 343, 345, 
+       345, 345, 233, 350, 339, 351, 349, 233, 
+       352, 353, 351, 233, 354, 233, 355, 233, 
+       356, 233, 357, 233, 358, 233, 360, 361, 
+       360, 360, 362, 364, 359, 363, 363, 233, 
+       366, 367, 368, 365, 233, 369, 370, 367, 
+       233, 340, 339, 342, 339, 341, 341, 233, 
+       371, 372, 368, 233, 373, 233, 374, 233, 
+       375, 233, 376, 233, 377, 233, 378, 379, 
+       377, 233, 380, 381, 382, 379, 383, 383, 
+       233, 381, 381, 381, 384, 384, 233, 386, 
+       388, 387, 385, 387, 387, 387, 233, 390, 
+       382, 389, 233, 382, 392, 382, 382, 393, 
+       381, 382, 394, 391, 383, 383, 233, 392, 
+       381, 382, 394, 391, 383, 383, 233, 395, 
+       395, 395, 397, 398, 396, 396, 396, 396, 
+       233, 399, 399, 399, 381, 382, 233, 401, 
+       400, 402, 403, 400, 233, 401, 402, 403, 
+       400, 233, 404, 233, 405, 233, 406, 233, 
+       407, 233, 408, 233, 409, 409, 409, 233, 
+       409, 409, 409, 410, 410, 233, 412, 411, 
+       411, 411, 411, 233, 413, 233, 414, 414, 
+       233, 416, 415, 415, 415, 415, 233, 418, 
+       403, 417, 233, 369, 367, 370, 367, 233, 
+       419, 233, 420, 233, 421, 422, 420, 422, 
+       422, 422, 233, 424, 425, 423, 424, 425, 
+       426, 423, 428, 429, 430, 432, 427, 431, 
+       431, 233, 433, 366, 433, 433, 367, 368, 
+       365, 434, 434, 233, 436, 438, 437, 439, 
+       435, 437, 437, 437, 233, 345, 233, 440, 
+       233, 441, 233, 442, 233, 443, 233, 444, 
+       233, 445, 233, 446, 233, 447, 233, 448, 
+       233, 449, 233, 450, 233, 451, 452, 450, 
+       233, 453, 452, 454, 454, 233, 456, 455, 
+       455, 455, 455, 233, 457, 233, 458, 233, 
+       459, 233, 460, 233, 461, 233, 462, 463, 
+       461, 233, 464, 233, 465, 233, 466, 233, 
+       467, 233, 468, 233, 469, 233, 470, 233, 
+       471, 233, 472, 473, 471, 233, 476, 477, 
+       478, 479, 480, 481, 475, 474, 476, 475, 
+       482, 1, 5, 483, 484, 483, 485, 483, 
+       486, 483, 487, 483, 490, 491, 493, 494, 
+       495, 489, 492, 492, 488, 490, 489, 496, 
+       498, 69, 497, 71, 71, 71, 72, 79, 
+       79, 79, 79, 497, 71, 71, 71, 72, 
+       79, 499, 79, 79, 79, 497, 71, 71, 
+       71, 72, 79, 500, 79, 79, 79, 497, 
+       97, 97, 97, 98, 501, 502, 504, 503, 
+       507, 508, 510, 506, 509, 509, 505, 507, 
+       506, 511, 108, 112, 512, 114, 114, 114, 
+       114, 114, 114, 114, 114, 512, 117, 117, 
+       117, 118, 513, 514, 516, 515, 519, 520, 
+       521, 522, 523, 524, 525, 518, 517, 519, 
+       518, 526, 128, 132, 527, 528, 527, 529, 
+       527, 530, 527, 531, 527, 533, 532, 536, 
+       537, 539, 535, 538, 538, 538, 534, 536, 
+       535, 540, 151, 155, 541, 160, 160, 160, 
+       160, 541, 543, 542, 546, 547, 548, 549, 
+       550, 551, 552, 545, 544, 546, 545, 553, 
+       555, 178, 554, 556, 554, 557, 554, 558, 
+       554, 559, 554, 207, 207, 207, 208, 560, 
+       561, 563, 562, 566, 567, 569, 565, 568, 
+       568, 568, 564, 566, 565, 570, 218, 222, 
+       571, 227, 227, 227, 227, 571, 573, 572, 
+       576, 577, 578, 579, 580, 581, 582, 583, 
+       584, 585, 575, 574, 576, 575, 586, 588, 
+       245, 587, 589, 587, 590, 591, 587, 594, 
+       593, 592, 595, 596, 587, 599, 598, 597, 
+       601, 600, 602, 587, 604, 603, 605, 587, 
+       608, 607, 606, 609, 587, 610, 587, 612, 
+       611, 0
 };
 
 static const short _eo_tokenizer_trans_targs[] = {
-       292, 0, 0, 1, 292, 2, 292, 4, 
+       296, 0, 0, 1, 296, 2, 296, 4, 
        5, 6, 7, 8, 9, 10, 10, 11, 
-       12, 13, 12, 14, 11, 292, 12, 12, 
-       292, 13, 14, 15, 16, 12, 12, 292
+       12, 13, 12, 14, 11, 296, 12, 12, 
+       296, 13, 14, 15, 16, 12, 12, 296
        17, 17, 15, 18, 16, 17, 17, 18, 
        18, 20, 21, 22, 10, 24, 25, 26, 
        27, 28, 29, 30, 10, 32, 33, 34, 
-       10, 299, 36, 36, 37, 38, 299, 38, 
-       39, 39, 39, 40, 299, 41, 299, 42, 
-       43, 44, 45, 44, 45, 45, 299, 46, 
-       48, 49, 50, 51, 52, 53, 53, 299
-       55, 56, 57, 58, 59, 60, 61, 305
-       299, 62, 63, 64, 65, 65, 66, 66, 
-       66, 67, 306, 308, 68, 68, 69, 308
-       70, 308, 71, 312, 308, 72, 73, 74, 
-       75, 75, 76, 76, 76, 77, 313, 315
-       78, 78, 79, 315, 80, 315, 82, 82, 
-       315, 84, 85, 85, 315, 87, 87, 315
-       89, 90, 91, 92, 92, 315, 323, 93, 
-       93, 94, 323, 95, 323, 97, 97, 96
-       323, 97, 97, 323, 328, 99, 99, 100
-       101, 328, 101, 102, 102, 102, 103, 328
-       104, 328, 106, 107, 108, 328, 110, 111
-       112, 113, 114, 115, 115, 328, 117, 118
-       119, 120, 120, 328, 122, 123, 124, 125, 
-       126, 127, 128, 335, 328, 129, 130, 131, 
-       132, 132, 133, 133, 133, 134, 336, 338
-       135, 135, 136, 338, 137, 338, 139, 139
-       138, 338, 139, 139, 338, 343, 141, 141
-       142, 143, 343, 143, 144, 144, 144, 145
-       343, 146, 343, 148, 149, 150, 151, 152, 
-       153, 154, 155, 156, 157, 157, 343, 159
-       160, 160, 161, 161, 162, 162, 348, 164
-       165, 166, 167, 168, 169, 170, 171, 172, 
-       172, 343, 174, 175, 176, 177, 178, 179, 
-       180, 180, 181, 181, 182, 182, 350, 184
-       185, 186, 187, 187, 188, 188, 189, 351, 
-       190, 198, 190, 199, 189, 191, 190, 190
-       191, 192, 193, 194, 194, 195, 195, 195
-       196, 197, 188, 188, 189, 351, 198, 199
-       200, 200, 201, 190, 190, 191, 203, 204, 
-       205, 206, 207, 208, 209, 210, 210, 211
-       211, 212, 353, 213, 213, 212, 262, 211
-       214, 213, 213, 214, 214, 215, 216, 217
-       218, 219, 220, 221, 260, 221, 222, 261
-       224, 221, 221, 222, 224, 222, 223, 224
-       225, 226, 227, 228, 229, 230, 230, 231
-       231, 232, 235, 237, 233, 234, 234, 233
-       235, 234, 234, 236, 236, 254, 239, 238
-       237, 232, 235, 238, 240, 240, 241, 253
-       242, 243, 244, 245, 246, 247, 248, 248
-       249, 250, 251, 251, 252, 252, 252, 255, 
-       256, 256, 257, 257, 257, 258, 259, 236
-       236, 232, 235, 237, 239, 260, 261, 221, 
-       221, 261, 222, 224, 264, 265, 266, 267
-       268, 269, 270, 271, 272, 273, 274, 274
-       275, 275, 276, 276, 355, 278, 279, 280, 
-       281, 282, 282, 343, 284, 285, 286, 287, 
-       288, 289, 290, 291, 291, 343, 292, 293
-       293, 294, 295, 296, 297, 298, 292, 292
-       3, 19, 23, 31, 299, 300, 300, 301, 
-       302, 303, 304, 307, 299, 299, 35, 47
-       54, 299, 299, 299, 299, 308, 309, 309
-       310, 311, 314, 308, 308, 308, 308, 308
-       308, 315, 316, 316, 317, 318, 319, 320, 
-       321, 322, 315, 315, 81, 83, 86, 88
-       315, 315, 323, 324, 324, 325, 326, 327
-       323, 323, 323, 323, 328, 329, 329, 330
-       331, 332, 333, 334, 337, 328, 328, 98, 
-       105, 109, 116, 121, 328, 328, 328, 328
-       338, 339, 339, 340, 341, 342, 338, 338
-       338, 338, 343, 344, 344, 345, 346, 347
-       349, 352, 354, 356, 357, 358, 343, 343
-       140, 147, 158, 163, 343, 348, 348, 173
-       183, 343, 350, 350, 343, 343, 202, 343
-       343, 263, 343, 355, 355, 277, 283, 343
-       343
+       10, 303, 36, 36, 37, 38, 303, 38, 
+       39, 39, 39, 40, 303, 41, 303, 42, 
+       43, 44, 45, 44, 45, 45, 303, 46, 
+       48, 49, 50, 51, 52, 53, 53, 303
+       55, 56, 57, 58, 59, 60, 61, 309
+       303, 62, 63, 64, 65, 65, 66, 66, 
+       66, 67, 310, 312, 68, 68, 69, 312
+       70, 312, 71, 316, 312, 72, 73, 74, 
+       75, 75, 76, 76, 76, 77, 317, 319
+       78, 78, 79, 319, 80, 319, 82, 82, 
+       319, 84, 85, 85, 319, 87, 87, 319
+       89, 90, 91, 92, 92, 319, 327, 93, 
+       93, 94, 327, 95, 327, 97, 98, 97
+       96, 327, 97, 97, 327, 99, 332, 101
+       101, 102, 103, 332, 103, 104, 104, 104
+       105, 332, 106, 332, 108, 109, 110, 332
+       112, 113, 114, 115, 116, 117, 117, 332
+       119, 120, 121, 122, 122, 332, 124, 125, 
+       126, 127, 128, 129, 130, 339, 332, 131, 
+       132, 133, 134, 134, 135, 135, 135, 136
+       340, 342, 137, 137, 138, 342, 139, 342
+       141, 142, 141, 140, 342, 141, 141, 342
+       143, 347, 145, 145, 146, 147, 347, 147
+       148, 148, 148, 149, 347, 150, 347, 152, 
+       153, 154, 155, 156, 157, 158, 159, 160
+       161, 161, 347, 163, 164, 164, 165, 165
+       166, 166, 352, 168, 169, 170, 171, 172, 
+       173, 174, 175, 176, 176, 347, 178, 179, 
+       180, 181, 182, 183, 184, 184, 185, 185
+       186, 186, 354, 188, 189, 190, 191, 191, 
+       192, 192, 193, 355, 194, 202, 194, 203
+       193, 195, 194, 194, 195, 196, 197, 198
+       198, 199, 199, 199, 200, 201, 192, 192
+       193, 355, 202, 203, 204, 204, 205, 194, 
+       194, 195, 207, 208, 209, 210, 211, 212
+       213, 214, 214, 215, 215, 216, 357, 217
+       217, 216, 266, 215, 218, 217, 217, 218
+       218, 219, 220, 221, 222, 223, 224, 225
+       264, 225, 226, 265, 228, 225, 225, 226
+       228, 226, 227, 228, 229, 230, 231, 232
+       233, 234, 234, 235, 235, 236, 239, 241
+       237, 238, 238, 237, 239, 238, 238, 240
+       240, 258, 243, 242, 241, 236, 239, 242
+       244, 244, 245, 257, 246, 247, 248, 249
+       250, 251, 252, 252, 253, 254, 255, 255, 
+       256, 256, 256, 259, 260, 260, 261, 261
+       261, 262, 263, 240, 240, 236, 239, 241, 
+       243, 264, 265, 225, 225, 265, 226, 228
+       268, 269, 270, 271, 272, 273, 274, 275
+       276, 277, 278, 278, 279, 279, 280, 280, 
+       359, 282, 283, 284, 285, 286, 286, 347, 
+       288, 289, 290, 291, 292, 293, 294, 295
+       295, 347, 296, 297, 297, 298, 299, 300
+       301, 302, 296, 296, 3, 19, 23, 31, 
+       303, 304, 304, 305, 306, 307, 308, 311
+       303, 303, 35, 47, 54, 303, 303, 303
+       303, 312, 313, 313, 314, 315, 318, 312
+       312, 312, 312, 312, 312, 319, 320, 320, 
+       321, 322, 323, 324, 325, 326, 319, 319
+       81, 83, 86, 88, 319, 319, 327, 328
+       328, 329, 330, 331, 327, 327, 327, 327
+       332, 333, 333, 334, 335, 336, 337, 338, 
+       341, 332, 332, 100, 107, 111, 118, 123
+       332, 332, 332, 332, 342, 343, 343, 344
+       345, 346, 342, 342, 342, 342, 347, 348
+       348, 349, 350, 351, 353, 356, 358, 360
+       361, 362, 347, 347, 144, 151, 162, 167
+       347, 352, 352, 177, 187, 347, 354, 354
+       347, 347, 206, 347, 347, 267, 347, 359
+       359, 281, 287, 347, 347
 };
 
 static const short _eo_tokenizer_trans_actions[] = {
@@ -1048,64 +1088,64 @@ static const short _eo_tokenizer_trans_actions[] = {
        0, 1, 0, 97, 0, 229, 0, 1, 
        99, 0, 0, 1, 103, 0, 1, 101, 
        0, 0, 0, 0, 1, 105, 133, 0, 
-       1, 0, 119, 0, 232, 7, 262, 0, 
-       265, 0, 1, 121, 155, 0, 1, 0, 
-       0, 137, 1, 3, 0, 1, 0, 135, 
-       0, 235, 0, 0, 0, 274, 0, 0, 
-       0, 0, 0, 3, 0, 271, 0, 0, 
-       0, 0, 1, 139, 0, 0, 0, 0, 
-       0, 3, 0, 343, 153, 0, 0, 0, 
-       0, 1, 3, 0, 1, 0, 0, 171, 
-       0, 1, 0, 157, 0, 238, 9, 277, 
-       0, 280, 0, 1, 159, 209, 0, 1, 
-       0, 0, 175, 1, 3, 0, 1, 0, 
-       173, 0, 241, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 1, 181, 0, 
-       0, 1, 0, 1, 3, 0, 25, 0, 
+       1, 0, 119, 0, 232, 7, 7, 262, 
+       0, 265, 0, 1, 121, 0, 155, 0, 
+       1, 0, 0, 137, 1, 3, 0, 1, 
+       0, 135, 0, 235, 0, 0, 0, 274, 
+       0, 0, 0, 0, 0, 3, 0, 271, 
+       0, 0, 0, 0, 1, 139, 0, 0, 
+       0, 0, 0, 3, 0, 343, 153, 0, 
+       0, 0, 0, 1, 3, 0, 1, 0, 
+       0, 171, 0, 1, 0, 157, 0, 238, 
+       9, 9, 277, 0, 280, 0, 1, 159, 
+       0, 209, 0, 1, 0, 0, 175, 1, 
+       3, 0, 1, 0, 173, 0, 241, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 1, 181, 0, 0, 1, 0, 1, 
+       3, 0, 25, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 1, 183, 0, 0, 
+       0, 0, 0, 0, 0, 1, 0, 1, 
+       3, 0, 23, 0, 0, 0, 0, 1, 
+       0, 1, 3, 0, 15, 15, 292, 15, 
+       0, 15, 0, 1, 0, 0, 0, 0, 
+       1, 3, 0, 1, 0, 0, 19, 298, 
+       301, 19, 0, 0, 3, 0, 0, 17, 
+       295, 17, 0, 0, 0, 0, 0, 0, 
+       0, 0, 1, 0, 1, 3, 0, 27, 
+       304, 0, 0, 27, 27, 0, 1, 0, 
+       1, 0, 0, 0, 0, 0, 0, 29, 
+       29, 307, 29, 310, 29, 0, 1, 0, 
+       0, 1, 0, 1, 0, 0, 0, 0, 
+       0, 0, 1, 0, 1, 0, 0, 3, 
+       3, 35, 316, 0, 35, 0, 1, 0, 
+       1, 0, 0, 33, 0, 33, 33, 0, 
+       0, 1, 0, 0, 0, 0, 0, 0, 
+       0, 0, 3, 0, 39, 0, 3, 0, 
+       41, 0, 1, 0, 0, 1, 3, 0, 
+       1, 0, 0, 37, 319, 37, 37, 322, 
+       37, 0, 3, 31, 313, 0, 31, 31, 
        0, 0, 0, 0, 0, 0, 0, 0, 
-       1, 183, 0, 0, 0, 0, 0, 0, 
-       0, 1, 0, 1, 3, 0, 23, 0, 
        0, 0, 0, 1, 0, 1, 3, 0, 
-       15, 15, 292, 15, 0, 15, 0, 1, 
-       0, 0, 0, 0, 1, 3, 0, 1, 
-       0, 0, 19, 298, 301, 19, 0, 0, 
-       3, 0, 0, 17, 295, 17, 0, 0, 
-       0, 0, 0, 0, 0, 0, 1, 0, 
-       1, 3, 0, 27, 304, 0, 0, 27, 
-       27, 0, 1, 0, 1, 0, 0, 0, 
-       0, 0, 0, 29, 29, 307, 29, 310, 
-       29, 0, 1, 0, 0, 1, 0, 1, 
-       0, 0, 0, 0, 0, 0, 1, 0, 
-       1, 0, 0, 3, 3, 35, 316, 0, 
-       35, 0, 1, 0, 1, 0, 0, 33, 
-       0, 33, 33, 0, 0, 1, 0, 0, 
-       0, 0, 0, 0, 0, 0, 3, 0, 
-       39, 0, 3, 0, 41, 0, 1, 0, 
-       0, 1, 3, 0, 1, 0, 0, 37, 
-       319, 37, 37, 322, 37, 0, 3, 31, 
-       313, 0, 31, 31, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 0, 1, 
-       0, 1, 3, 0, 21, 0, 0, 0, 
-       0, 0, 1, 187, 0, 0, 0, 0, 
-       0, 0, 0, 0, 1, 185, 215, 0, 
-       1, 331, 57, 57, 57, 57, 217, 219, 
-       0, 0, 0, 0, 65, 0, 1, 331, 
-       334, 334, 334, 0, 67, 73, 0, 0, 
-       0, 69, 247, 71, 63, 83, 0, 1, 
-       331, 334, 0, 85, 91, 87, 259, 89, 
-       81, 109, 0, 1, 331, 57, 57, 57, 
-       57, 0, 111, 115, 0, 0, 0, 0, 
-       113, 107, 125, 0, 1, 331, 334, 0, 
-       127, 131, 129, 123, 143, 0, 1, 331, 
-       57, 57, 57, 57, 0, 145, 151, 0, 
-       0, 0, 0, 0, 147, 268, 149, 141, 
-       163, 0, 1, 331, 334, 0, 165, 169, 
-       167, 161, 191, 0, 1, 331, 57, 57, 
-       57, 57, 57, 57, 57, 0, 193, 207, 
-       0, 0, 0, 0, 199, 0, 1, 0, 
-       0, 197, 0, 1, 203, 179, 0, 201, 
-       177, 0, 195, 0, 1, 0, 0, 205, 
-       189
+       21, 0, 0, 0, 0, 0, 1, 187, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       1, 185, 215, 0, 1, 331, 57, 57, 
+       57, 57, 217, 219, 0, 0, 0, 0, 
+       65, 0, 1, 331, 334, 334, 334, 0, 
+       67, 73, 0, 0, 0, 69, 247, 71, 
+       63, 83, 0, 1, 331, 334, 0, 85, 
+       91, 87, 259, 89, 81, 109, 0, 1, 
+       331, 57, 57, 57, 57, 0, 111, 115, 
+       0, 0, 0, 0, 113, 107, 125, 0, 
+       1, 331, 334, 0, 127, 131, 129, 123, 
+       143, 0, 1, 331, 57, 57, 57, 57, 
+       0, 145, 151, 0, 0, 0, 0, 0, 
+       147, 268, 149, 141, 163, 0, 1, 331, 
+       334, 0, 165, 169, 167, 161, 191, 0, 
+       1, 331, 57, 57, 57, 57, 57, 57, 
+       57, 0, 193, 207, 0, 0, 0, 0, 
+       199, 0, 1, 0, 0, 197, 0, 1, 
+       203, 179, 0, 201, 177, 0, 195, 0, 
+       1, 0, 0, 205, 189
 };
 
 static const short _eo_tokenizer_to_state_actions[] = {
@@ -1145,15 +1185,16 @@ 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, 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, 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
 };
 
 static const short _eo_tokenizer_from_state_actions[] = {
@@ -1193,15 +1234,16 @@ 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, 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, 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
+       0, 0, 0
 };
 
 static const short _eo_tokenizer_eof_trans[] = {
@@ -1217,56 +1259,57 @@ static const short _eo_tokenizer_eof_trans[] = {
        117, 117, 117, 117, 117, 117, 128, 128, 
        128, 128, 128, 128, 128, 128, 128, 128, 
        128, 128, 128, 128, 128, 151, 151, 151, 
-       151, 151, 165, 165, 165, 165, 165, 165, 
-       165, 165, 165, 165, 165, 165, 165, 165, 
-       165, 165, 165, 165, 165, 165, 165, 165, 
-       165, 165, 165, 165, 165, 165, 165, 165, 
-       165, 205, 205, 205, 205, 205, 205, 216, 
-       216, 216, 216, 216, 230, 230, 230, 230, 
-       230, 230, 230, 230, 230, 230, 230, 230, 
-       230, 230, 230, 230, 230, 230, 230, 230, 
-       230, 230, 230, 230, 230, 230, 230, 230, 
-       230, 230, 230, 230, 230, 230, 230, 230, 
-       230, 230, 230, 230, 230, 230, 230, 230, 
-       230, 230, 230, 230, 230, 230, 230, 230, 
-       230, 230, 230, 230, 230, 230, 230, 230, 
-       230, 230, 230, 230, 230, 230, 230, 230, 
-       230, 230, 230, 230, 230, 230, 230, 230, 
-       230, 230, 230, 230, 230, 230, 230, 230, 
-       230, 230, 230, 230, 230, 230, 230, 230, 
-       230, 230, 230, 230, 230, 230, 230, 230, 
-       230, 230, 230, 230, 230, 230, 230, 230, 
-       230, 230, 230, 230, 230, 230, 230, 230, 
-       230, 230, 230, 230, 230, 230, 230, 230, 
-       230, 230, 230, 230, 230, 230, 230, 230, 
-       230, 230, 230, 230, 230, 230, 230, 230, 
-       230, 230, 230, 230, 230, 230, 230, 230, 
-       230, 230, 230, 230, 0, 479, 480, 480, 
-       480, 480, 480, 0, 493, 494, 494, 494, 
-       494, 498, 499, 500, 0, 508, 509, 509, 
-       510, 511, 512, 0, 523, 524, 524, 524, 
-       524, 524, 529, 0, 537, 538, 538, 539, 
-       0, 550, 551, 551, 551, 551, 551, 557, 
-       558, 559, 0, 567, 568, 568, 569, 0, 
-       583, 584, 584, 584, 589, 584, 594, 597, 
-       584, 600, 584, 603, 584, 584, 608
+       151, 151, 151, 151, 167, 167, 167, 167, 
+       167, 167, 167, 167, 167, 167, 167, 167, 
+       167, 167, 167, 167, 167, 167, 167, 167, 
+       167, 167, 167, 167, 167, 167, 167, 167, 
+       167, 167, 167, 207, 207, 207, 207, 207, 
+       207, 218, 218, 218, 218, 218, 218, 218, 
+       234, 234, 234, 234, 234, 234, 234, 234, 
+       234, 234, 234, 234, 234, 234, 234, 234, 
+       234, 234, 234, 234, 234, 234, 234, 234, 
+       234, 234, 234, 234, 234, 234, 234, 234, 
+       234, 234, 234, 234, 234, 234, 234, 234, 
+       234, 234, 234, 234, 234, 234, 234, 234, 
+       234, 234, 234, 234, 234, 234, 234, 234, 
+       234, 234, 234, 234, 234, 234, 234, 234, 
+       234, 234, 234, 234, 234, 234, 234, 234, 
+       234, 234, 234, 234, 234, 234, 234, 234, 
+       234, 234, 234, 234, 234, 234, 234, 234, 
+       234, 234, 234, 234, 234, 234, 234, 234, 
+       234, 234, 234, 234, 234, 234, 234, 234, 
+       234, 234, 234, 234, 234, 234, 234, 234, 
+       234, 234, 234, 234, 234, 234, 234, 234, 
+       234, 234, 234, 234, 234, 234, 234, 234, 
+       234, 234, 234, 234, 234, 234, 234, 234, 
+       234, 234, 234, 234, 234, 234, 234, 234, 
+       234, 234, 234, 234, 234, 234, 234, 234, 
+       0, 483, 484, 484, 484, 484, 484, 0, 
+       497, 498, 498, 498, 498, 502, 503, 504, 
+       0, 512, 513, 513, 514, 515, 516, 0, 
+       527, 528, 528, 528, 528, 528, 533, 0, 
+       541, 542, 542, 543, 0, 554, 555, 555, 
+       555, 555, 555, 561, 562, 563, 0, 571, 
+       572, 572, 573, 0, 587, 588, 588, 588, 
+       593, 588, 598, 601, 588, 604, 588, 607, 
+       588, 588, 612
 };
 
-static const int eo_tokenizer_start = 292;
-static const int eo_tokenizer_first_final = 292;
+static const int eo_tokenizer_start = 296;
+static const int eo_tokenizer_first_final = 296;
 static const int eo_tokenizer_error = -1;
 
-static const int eo_tokenizer_en_tokenize_accessor = 299;
-static const int eo_tokenizer_en_tokenize_params = 308;
-static const int eo_tokenizer_en_tokenize_property = 315;
-static const int eo_tokenizer_en_tokenize_properties = 323;
-static const int eo_tokenizer_en_tokenize_method = 328;
-static const int eo_tokenizer_en_tokenize_methods = 338;
-static const int eo_tokenizer_en_tokenize_class = 343;
-static const int eo_tokenizer_en_main = 292;
+static const int eo_tokenizer_en_tokenize_accessor = 303;
+static const int eo_tokenizer_en_tokenize_params = 312;
+static const int eo_tokenizer_en_tokenize_property = 319;
+static const int eo_tokenizer_en_tokenize_properties = 327;
+static const int eo_tokenizer_en_tokenize_method = 332;
+static const int eo_tokenizer_en_tokenize_methods = 342;
+static const int eo_tokenizer_en_tokenize_class = 347;
+static const int eo_tokenizer_en_main = 296;
 
 
-#line 1030 "lib/eolian/eo_lexer.rl"
+#line 1055 "lib/eolian/eo_lexer.rl"
 
 
 Eina_Bool
@@ -1290,7 +1333,7 @@ eo_tokenizer_walk(Eo_Tokenizer *toknz, const char *source)
      }
 
    
-#line 1294 "lib/eolian/eo_lexer.c"
+#line 1337 "lib/eolian/eo_lexer.c"
        {
         toknz->cs = eo_tokenizer_start;
         toknz->ts = 0;
@@ -1298,7 +1341,7 @@ eo_tokenizer_walk(Eo_Tokenizer *toknz, const char *source)
         toknz->act = 0;
        }
 
-#line 1053 "lib/eolian/eo_lexer.rl"
+#line 1078 "lib/eolian/eo_lexer.rl"
 
    while (!done)
      {
@@ -1325,7 +1368,7 @@ eo_tokenizer_walk(Eo_Tokenizer *toknz, const char *source)
           }
 
         
-#line 1329 "lib/eolian/eo_lexer.c"
+#line 1372 "lib/eolian/eo_lexer.c"
        {
        int _klen;
        unsigned int _trans;
@@ -1344,7 +1387,7 @@ _resume:
 #line 1 "NONE"
        { toknz->ts = ( toknz->p);}
        break;
-#line 1348 "lib/eolian/eo_lexer.c"
+#line 1391 "lib/eolian/eo_lexer.c"
                }
        }
 
@@ -1411,28 +1454,28 @@ _eof_trans:
                switch ( *_acts++ )
                {
        case 0:
-#line 359 "lib/eolian/eo_lexer.rl"
+#line 384 "lib/eolian/eo_lexer.rl"
        {
       toknz->current_line += 1;
       DBG("inc[%d] %d", toknz->cs, toknz->current_line);
    }
        break;
        case 1:
-#line 364 "lib/eolian/eo_lexer.rl"
+#line 389 "lib/eolian/eo_lexer.rl"
        {
       toknz->saved.line = toknz->current_line;
       DBG("save line[%d] %d", toknz->cs, toknz->current_line);
    }
        break;
        case 2:
-#line 369 "lib/eolian/eo_lexer.rl"
+#line 394 "lib/eolian/eo_lexer.rl"
        {
       toknz->saved.tok = ( toknz->p);
       DBG("save token[%d] %p %c", toknz->cs, ( toknz->p), *( toknz->p));
    }
        break;
        case 3:
-#line 446 "lib/eolian/eo_lexer.rl"
+#line 471 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
       if (toknz->tmp.accessor->ret != NULL)
@@ -1441,7 +1484,7 @@ _eof_trans:
    }
        break;
        case 4:
-#line 453 "lib/eolian/eo_lexer.rl"
+#line 478 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
       if (!toknz->tmp.accessor->ret) ABORT(toknz, "No ret!!!");
@@ -1452,20 +1495,20 @@ _eof_trans:
    }
        break;
        case 5:
-#line 462 "lib/eolian/eo_lexer.rl"
+#line 487 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
       toknz->tmp.accessor->legacy = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
        case 6:
-#line 476 "lib/eolian/eo_lexer.rl"
+#line 501 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.accessor_param = _eo_tokenizer_accessor_param_get(toknz, ( toknz->p));
    }
        break;
        case 7:
-#line 480 "lib/eolian/eo_lexer.rl"
+#line 505 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.accessor_param)
          ABORT(toknz, "No accessor param!!!");
@@ -1476,7 +1519,7 @@ _eof_trans:
    }
        break;
        case 8:
-#line 509 "lib/eolian/eo_lexer.rl"
+#line 534 "lib/eolian/eo_lexer.rl"
        {
       const char *c = _eo_tokenizer_token_get(toknz, ( toknz->p)-2);
       if (toknz->tmp.param == NULL)
@@ -1486,7 +1529,7 @@ _eof_trans:
    }
        break;
        case 9:
-#line 517 "lib/eolian/eo_lexer.rl"
+#line 542 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.param = _eo_tokenizer_param_get(toknz, ( toknz->p));
       if (toknz->tmp.params)
@@ -1497,7 +1540,7 @@ _eof_trans:
    }
        break;
        case 10:
-#line 617 "lib/eolian/eo_lexer.rl"
+#line 642 "lib/eolian/eo_lexer.rl"
        {
       if (toknz->tmp.prop != NULL)
         ABORT(toknz, "there is a pending property definition %s", toknz->tmp.prop->name);
@@ -1505,7 +1548,7 @@ _eof_trans:
    }
        break;
        case 11:
-#line 657 "lib/eolian/eo_lexer.rl"
+#line 682 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       if (toknz->tmp.meth->ret != NULL)
@@ -1514,7 +1557,7 @@ _eof_trans:
    }
        break;
        case 12:
-#line 664 "lib/eolian/eo_lexer.rl"
+#line 689 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       if (toknz->tmp.meth->ret != NULL) ABORT(toknz, "No ret!!!");
@@ -1525,14 +1568,14 @@ _eof_trans:
    }
        break;
        case 13:
-#line 673 "lib/eolian/eo_lexer.rl"
+#line 698 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       toknz->tmp.meth->legacy = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
        case 14:
-#line 678 "lib/eolian/eo_lexer.rl"
+#line 703 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       toknz->tmp.meth->obj_const = EINA_TRUE;
@@ -1540,7 +1583,7 @@ _eof_trans:
    }
        break;
        case 15:
-#line 740 "lib/eolian/eo_lexer.rl"
+#line 765 "lib/eolian/eo_lexer.rl"
        {
       if (toknz->tmp.meth != NULL)
         ABORT(toknz, "there is a pending method definition %s", toknz->tmp.meth->name);
@@ -1548,14 +1591,14 @@ _eof_trans:
    }
        break;
        case 16:
-#line 772 "lib/eolian/eo_lexer.rl"
+#line 797 "lib/eolian/eo_lexer.rl"
        {
       const char *base = _eo_tokenizer_token_get(toknz, ( toknz->p));
       toknz->tmp.str_items = eina_list_append(toknz->tmp.str_items, base);
    }
        break;
        case 17:
-#line 777 "lib/eolian/eo_lexer.rl"
+#line 802 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       toknz->tmp.kls->inherits = toknz->tmp.str_items;
@@ -1563,7 +1606,7 @@ _eof_trans:
    }
        break;
        case 18:
-#line 825 "lib/eolian/eo_lexer.rl"
+#line 850 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       toknz->tmp.event = _eo_tokenizer_event_get(toknz, ( toknz->p));
@@ -1571,7 +1614,7 @@ _eof_trans:
    }
        break;
        case 19:
-#line 831 "lib/eolian/eo_lexer.rl"
+#line 856 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.event) ABORT(toknz, "No event!!!");
       if (toknz->tmp.event->type != NULL)
@@ -1580,7 +1623,7 @@ _eof_trans:
    }
        break;
        case 20:
-#line 838 "lib/eolian/eo_lexer.rl"
+#line 863 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.event) ABORT(toknz, "No event!!!");
       if (toknz->tmp.event->comment != NULL)
@@ -1590,7 +1633,7 @@ _eof_trans:
    }
        break;
        case 21:
-#line 846 "lib/eolian/eo_lexer.rl"
+#line 871 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       if (toknz->tmp.kls->legacy_prefix != NULL)
@@ -1599,7 +1642,7 @@ _eof_trans:
    }
        break;
        case 22:
-#line 855 "lib/eolian/eo_lexer.rl"
+#line 880 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       if (toknz->tmp.kls->eo_prefix != NULL)
@@ -1608,7 +1651,7 @@ _eof_trans:
    }
        break;
        case 23:
-#line 864 "lib/eolian/eo_lexer.rl"
+#line 889 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       if (toknz->tmp.kls->data_type != NULL)
@@ -1617,7 +1660,7 @@ _eof_trans:
    }
        break;
        case 24:
-#line 877 "lib/eolian/eo_lexer.rl"
+#line 902 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
         toknz->tmp.impl = _eo_tokenizer_implement_get(toknz, ( toknz->p));
@@ -1625,7 +1668,7 @@ _eof_trans:
    }
        break;
        case 25:
-#line 883 "lib/eolian/eo_lexer.rl"
+#line 908 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (toknz->tmp.impl->legacy)
@@ -1634,7 +1677,7 @@ _eof_trans:
    }
        break;
        case 26:
-#line 890 "lib/eolian/eo_lexer.rl"
+#line 915 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (!toknz->tmp.impl->legacy)
@@ -1643,7 +1686,7 @@ _eof_trans:
    }
        break;
        case 27:
-#line 897 "lib/eolian/eo_lexer.rl"
+#line 922 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         toknz->tmp.impl_leg_param = calloc(1, sizeof(Eo_Implement_Legacy_Param_Def));
@@ -1654,7 +1697,7 @@ _eof_trans:
    }
        break;
        case 28:
-#line 906 "lib/eolian/eo_lexer.rl"
+#line 931 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl_leg_param)
            ABORT(toknz, "No implement legacy param!!!");
@@ -1662,7 +1705,7 @@ _eof_trans:
    }
        break;
        case 29:
-#line 912 "lib/eolian/eo_lexer.rl"
+#line 937 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl_leg_param)
            ABORT(toknz, "No implement legacy param!!!");
@@ -1670,7 +1713,7 @@ _eof_trans:
    }
        break;
        case 30:
-#line 918 "lib/eolian/eo_lexer.rl"
+#line 943 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (!toknz->tmp.impl->legacy)
@@ -1679,7 +1722,7 @@ _eof_trans:
    }
        break;
        case 31:
-#line 925 "lib/eolian/eo_lexer.rl"
+#line 950 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (!toknz->tmp.impl->legacy)
@@ -1688,31 +1731,31 @@ _eof_trans:
    }
        break;
        case 32:
-#line 996 "lib/eolian/eo_lexer.rl"
+#line 1021 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_REGULAR;
    }
        break;
        case 33:
-#line 999 "lib/eolian/eo_lexer.rl"
+#line 1024 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_ABSTRACT;
    }
        break;
        case 34:
-#line 1002 "lib/eolian/eo_lexer.rl"
+#line 1027 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_MIXIN;
    }
        break;
        case 35:
-#line 1005 "lib/eolian/eo_lexer.rl"
+#line 1030 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_INTERFACE;
    }
        break;
        case 36:
-#line 1009 "lib/eolian/eo_lexer.rl"
+#line 1034 "lib/eolian/eo_lexer.rl"
        {
       if (toknz->tmp.kls != NULL)
         ABORT(toknz, "there is a pending class definition %s", toknz->tmp.kls->name);
@@ -1725,7 +1768,7 @@ _eof_trans:
        { toknz->te = ( toknz->p)+1;}
        break;
        case 40:
-#line 438 "lib/eolian/eo_lexer.rl"
+#line 463 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
       if (toknz->tmp.accessor->comment != NULL)
@@ -1735,33 +1778,33 @@ _eof_trans:
    }}
        break;
        case 41:
-#line 374 "lib/eolian/eo_lexer.rl"
+#line 399 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
        case 42:
-#line 501 "lib/eolian/eo_lexer.rl"
+#line 526 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
        case 43:
-#line 502 "lib/eolian/eo_lexer.rl"
+#line 527 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
        case 44:
-#line 467 "lib/eolian/eo_lexer.rl"
+#line 492 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      }");
       if (!toknz->tmp.prop) ABORT(toknz, "No prop!!!");
       toknz->tmp.prop->accessors = eina_list_append(toknz->tmp.prop->accessors, toknz->tmp.accessor);
       toknz->tmp.accessor = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 315; goto _again;}
+      { toknz->cs = 319; goto _again;}
    }}
        break;
        case 45:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -1780,26 +1823,26 @@ _eof_trans:
    }}
        break;
        case 46:
-#line 497 "lib/eolian/eo_lexer.rl"
+#line 522 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 47:
-#line 500 "lib/eolian/eo_lexer.rl"
+#line 525 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 48:
-#line 467 "lib/eolian/eo_lexer.rl"
+#line 492 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("      }");
       if (!toknz->tmp.prop) ABORT(toknz, "No prop!!!");
       toknz->tmp.prop->accessors = eina_list_append(toknz->tmp.prop->accessors, toknz->tmp.accessor);
       toknz->tmp.accessor = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 315; goto _again;}
+      { toknz->cs = 319; goto _again;}
    }}
        break;
        case 49:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -1818,11 +1861,11 @@ _eof_trans:
    }}
        break;
        case 50:
-#line 500 "lib/eolian/eo_lexer.rl"
+#line 525 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}}
        break;
        case 51:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -1841,28 +1884,28 @@ _eof_trans:
    }}
        break;
        case 52:
-#line 374 "lib/eolian/eo_lexer.rl"
+#line 399 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
        case 53:
-#line 526 "lib/eolian/eo_lexer.rl"
+#line 551 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      }");
       toknz->tmp.param = NULL;
       toknz->current_nesting--;
       if (toknz->tmp.prop)
-        { toknz->cs = 315; goto _again;}
+        { toknz->cs = 319; goto _again;}
       else if (toknz->tmp.meth)
-        { toknz->cs = 328; goto _again;}
+        { toknz->cs = 332; goto _again;}
       else
         ABORT(toknz, "leaving tokenize_params but there is no property nor method pending");
    }}
        break;
        case 54:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -1881,29 +1924,29 @@ _eof_trans:
    }}
        break;
        case 55:
-#line 542 "lib/eolian/eo_lexer.rl"
+#line 567 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 56:
-#line 544 "lib/eolian/eo_lexer.rl"
+#line 569 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 57:
-#line 526 "lib/eolian/eo_lexer.rl"
+#line 551 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("      }");
       toknz->tmp.param = NULL;
       toknz->current_nesting--;
       if (toknz->tmp.prop)
-        { toknz->cs = 315; goto _again;}
+        { toknz->cs = 319; goto _again;}
       else if (toknz->tmp.meth)
-        { toknz->cs = 328; goto _again;}
+        { toknz->cs = 332; goto _again;}
       else
         ABORT(toknz, "leaving tokenize_params but there is no property nor method pending");
    }}
        break;
        case 58:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -1922,11 +1965,11 @@ _eof_trans:
    }}
        break;
        case 59:
-#line 544 "lib/eolian/eo_lexer.rl"
+#line 569 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}}
        break;
        case 60:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -1945,50 +1988,50 @@ _eof_trans:
    }}
        break;
        case 61:
-#line 374 "lib/eolian/eo_lexer.rl"
+#line 399 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
        case 62:
-#line 551 "lib/eolian/eo_lexer.rl"
+#line 576 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      get {");
       toknz->tmp.accessor = _eo_tokenizer_accessor_get(toknz, GETTER);
       toknz->current_nesting++;
-      { toknz->cs = 299; goto _again;}
+      { toknz->cs = 303; goto _again;}
    }}
        break;
        case 63:
-#line 558 "lib/eolian/eo_lexer.rl"
+#line 583 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      set {");
       toknz->tmp.accessor = _eo_tokenizer_accessor_get(toknz, SETTER);
       toknz->current_nesting++;
-      { toknz->cs = 299; goto _again;}
+      { toknz->cs = 303; goto _again;}
    }}
        break;
        case 64:
-#line 565 "lib/eolian/eo_lexer.rl"
+#line 590 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      keys {");
       toknz->current_nesting++;
       toknz->tmp.params = &(toknz->tmp.prop->keys);
-      { toknz->cs = 308; goto _again;}
+      { toknz->cs = 312; goto _again;}
    }}
        break;
        case 65:
-#line 572 "lib/eolian/eo_lexer.rl"
+#line 597 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      values {");
       toknz->current_nesting++;
       toknz->tmp.params = &(toknz->tmp.prop->values);
-      { toknz->cs = 308; goto _again;}
+      { toknz->cs = 312; goto _again;}
    }}
        break;
        case 66:
-#line 579 "lib/eolian/eo_lexer.rl"
+#line 604 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.prop) ABORT(toknz, "No property!!!");
       if (eina_list_count(toknz->tmp.prop->values) == 0)
@@ -1999,11 +2042,11 @@ _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 = 323; goto _again;}
+      { toknz->cs = 327; goto _again;}
    }}
        break;
        case 67:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2022,11 +2065,11 @@ _eof_trans:
    }}
        break;
        case 68:
-#line 598 "lib/eolian/eo_lexer.rl"
+#line 623 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 69:
-#line 579 "lib/eolian/eo_lexer.rl"
+#line 604 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       if (!toknz->tmp.prop) ABORT(toknz, "No property!!!");
       if (eina_list_count(toknz->tmp.prop->values) == 0)
@@ -2037,11 +2080,11 @@ _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 = 323; goto _again;}
+      { toknz->cs = 327; goto _again;}
    }}
        break;
        case 70:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2060,7 +2103,7 @@ _eof_trans:
    }}
        break;
        case 71:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2079,31 +2122,31 @@ _eof_trans:
    }}
        break;
        case 72:
-#line 374 "lib/eolian/eo_lexer.rl"
+#line 399 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
        case 73:
-#line 610 "lib/eolian/eo_lexer.rl"
+#line 635 "lib/eolian/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 = 315; goto _again;}
+      { toknz->cs = 319; goto _again;}
    }}
        break;
        case 74:
-#line 623 "lib/eolian/eo_lexer.rl"
+#line 648 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  }");
       toknz->current_nesting--;
-      { toknz->cs = 343; goto _again;}
+      { toknz->cs = 347; goto _again;}
    }}
        break;
        case 75:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2122,19 +2165,19 @@ _eof_trans:
    }}
        break;
        case 76:
-#line 632 "lib/eolian/eo_lexer.rl"
+#line 657 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 77:
-#line 623 "lib/eolian/eo_lexer.rl"
+#line 648 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("  }");
       toknz->current_nesting--;
-      { toknz->cs = 343; goto _again;}
+      { toknz->cs = 347; goto _again;}
    }}
        break;
        case 78:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2153,7 +2196,7 @@ _eof_trans:
    }}
        break;
        case 79:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2172,7 +2215,7 @@ _eof_trans:
    }}
        break;
        case 80:
-#line 641 "lib/eolian/eo_lexer.rl"
+#line 666 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       if (toknz->tmp.meth->comment != NULL)
@@ -2182,32 +2225,32 @@ _eof_trans:
    }}
        break;
        case 81:
-#line 374 "lib/eolian/eo_lexer.rl"
+#line 399 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
        case 82:
-#line 649 "lib/eolian/eo_lexer.rl"
+#line 674 "lib/eolian/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 = 308; goto _again;}
+      { toknz->cs = 312; goto _again;}
    }}
        break;
        case 83:
-#line 725 "lib/eolian/eo_lexer.rl"
+#line 750 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
        case 84:
-#line 726 "lib/eolian/eo_lexer.rl"
+#line 751 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
        case 85:
-#line 684 "lib/eolian/eo_lexer.rl"
+#line 709 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       Eina_List **l = NULL;
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
@@ -2231,11 +2274,11 @@ _eof_trans:
       *l = eina_list_append(*l, toknz->tmp.meth);
       toknz->tmp.meth = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 338; goto _again;}
+      { toknz->cs = 342; goto _again;}
    }}
        break;
        case 86:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2254,15 +2297,15 @@ _eof_trans:
    }}
        break;
        case 87:
-#line 720 "lib/eolian/eo_lexer.rl"
+#line 745 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 88:
-#line 724 "lib/eolian/eo_lexer.rl"
+#line 749 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 89:
-#line 684 "lib/eolian/eo_lexer.rl"
+#line 709 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       Eina_List **l = NULL;
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
@@ -2286,11 +2329,11 @@ _eof_trans:
       *l = eina_list_append(*l, toknz->tmp.meth);
       toknz->tmp.meth = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 338; goto _again;}
+      { toknz->cs = 342; goto _again;}
    }}
        break;
        case 90:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2309,11 +2352,11 @@ _eof_trans:
    }}
        break;
        case 91:
-#line 724 "lib/eolian/eo_lexer.rl"
+#line 749 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}}
        break;
        case 92:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2332,32 +2375,32 @@ _eof_trans:
    }}
        break;
        case 93:
-#line 374 "lib/eolian/eo_lexer.rl"
+#line 399 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
        case 94:
-#line 733 "lib/eolian/eo_lexer.rl"
+#line 758 "lib/eolian/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 = 328; goto _again;}
+      { toknz->cs = 332; goto _again;}
    }}
        break;
        case 95:
-#line 746 "lib/eolian/eo_lexer.rl"
+#line 771 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  }");
       toknz->current_methods_type = METH_TYPE_LAST;
       toknz->current_nesting--;
-      { toknz->cs = 343; goto _again;}
+      { toknz->cs = 347; goto _again;}
    }}
        break;
        case 96:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2376,20 +2419,20 @@ _eof_trans:
    }}
        break;
        case 97:
-#line 756 "lib/eolian/eo_lexer.rl"
+#line 781 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 98:
-#line 746 "lib/eolian/eo_lexer.rl"
+#line 771 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("  }");
       toknz->current_methods_type = METH_TYPE_LAST;
       toknz->current_nesting--;
-      { toknz->cs = 343; goto _again;}
+      { toknz->cs = 347; goto _again;}
    }}
        break;
        case 99:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2408,7 +2451,7 @@ _eof_trans:
    }}
        break;
        case 100:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2427,7 +2470,7 @@ _eof_trans:
    }}
        break;
        case 101:
-#line 765 "lib/eolian/eo_lexer.rl"
+#line 790 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       if (toknz->tmp.kls->comment != NULL)
@@ -2436,70 +2479,70 @@ _eof_trans:
    }}
        break;
        case 102:
-#line 374 "lib/eolian/eo_lexer.rl"
+#line 399 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
        case 103:
-#line 783 "lib/eolian/eo_lexer.rl"
+#line 808 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
    }}
        break;
        case 104:
-#line 786 "lib/eolian/eo_lexer.rl"
+#line 811 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
    }}
        break;
        case 105:
-#line 789 "lib/eolian/eo_lexer.rl"
+#line 814 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  constructors {");
       toknz->current_methods_type = METH_CONSTRUCTOR;
       toknz->current_nesting++;
-      { toknz->cs = 338; goto _again;}
+      { toknz->cs = 342; goto _again;}
    }}
        break;
        case 106:
-#line 796 "lib/eolian/eo_lexer.rl"
+#line 821 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  destructors {");
       toknz->current_methods_type = METH_DESTRUCTOR;
       toknz->current_nesting++;
-      { toknz->cs = 338; goto _again;}
+      { toknz->cs = 342; goto _again;}
    }}
        break;
        case 107:
-#line 803 "lib/eolian/eo_lexer.rl"
+#line 828 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  properties {");
       toknz->current_nesting++;
-      { toknz->cs = 323; goto _again;}
+      { toknz->cs = 327; goto _again;}
    }}
        break;
        case 108:
-#line 809 "lib/eolian/eo_lexer.rl"
+#line 834 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  begin methods");
       toknz->current_methods_type = METH_REGULAR;
       toknz->current_nesting++;
-      { toknz->cs = 338; goto _again;}
+      { toknz->cs = 342; goto _again;}
    }}
        break;
        case 109:
-#line 816 "lib/eolian/eo_lexer.rl"
+#line 841 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       INF("end class: %s", toknz->tmp.kls->name);
       toknz->classes = eina_list_append(toknz->classes, toknz->tmp.kls);
       toknz->tmp.kls = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 292; goto _again;}
+      { toknz->cs = 296; goto _again;}
    }}
        break;
        case 110:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2518,44 +2561,44 @@ _eof_trans:
    }}
        break;
        case 111:
-#line 971 "lib/eolian/eo_lexer.rl"
+#line 996 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 112:
-#line 974 "lib/eolian/eo_lexer.rl"
+#line 999 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 113:
-#line 975 "lib/eolian/eo_lexer.rl"
+#line 1000 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 114:
-#line 976 "lib/eolian/eo_lexer.rl"
+#line 1001 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 115:
-#line 783 "lib/eolian/eo_lexer.rl"
+#line 808 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
    }}
        break;
        case 116:
-#line 786 "lib/eolian/eo_lexer.rl"
+#line 811 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
    }}
        break;
        case 117:
-#line 816 "lib/eolian/eo_lexer.rl"
+#line 841 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       INF("end class: %s", toknz->tmp.kls->name);
       toknz->classes = eina_list_append(toknz->classes, toknz->tmp.kls);
       toknz->tmp.kls = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 292; goto _again;}
+      { toknz->cs = 296; goto _again;}
    }}
        break;
        case 118:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2574,7 +2617,7 @@ _eof_trans:
    }}
        break;
        case 119:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2593,23 +2636,23 @@ _eof_trans:
    }}
        break;
        case 120:
-#line 374 "lib/eolian/eo_lexer.rl"
+#line 399 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
        case 121:
-#line 989 "lib/eolian/eo_lexer.rl"
+#line 1014 "lib/eolian/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 = 343; goto _again;}
+      { toknz->cs = 347; goto _again;}
    }}
        break;
        case 122:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2628,11 +2671,11 @@ _eof_trans:
    }}
        break;
        case 123:
-#line 1024 "lib/eolian/eo_lexer.rl"
+#line 1049 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 124:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2651,7 +2694,7 @@ _eof_trans:
    }}
        break;
        case 125:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2669,7 +2712,7 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-#line 2673 "lib/eolian/eo_lexer.c"
+#line 2716 "lib/eolian/eo_lexer.c"
                }
        }
 
@@ -2682,7 +2725,7 @@ _again:
 #line 1 "NONE"
        { toknz->ts = 0;}
        break;
-#line 2686 "lib/eolian/eo_lexer.c"
+#line 2729 "lib/eolian/eo_lexer.c"
                }
        }
 
@@ -2700,12 +2743,12 @@ _again:
        _out: {}
        }
 
-#line 1079 "lib/eolian/eo_lexer.rl"
+#line 1104 "lib/eolian/eo_lexer.rl"
 
         if ( toknz->cs == 
-#line 2707 "lib/eolian/eo_lexer.c"
+#line 2750 "lib/eolian/eo_lexer.c"
 -1
-#line 1080 "lib/eolian/eo_lexer.rl"
+#line 1105 "lib/eolian/eo_lexer.rl"
  )
           {
              ERR("%s: wrong termination", source);
@@ -2751,7 +2794,7 @@ eo_tokenizer_mem_walk(Eo_Tokenizer *toknz, const char *source, char *buffer, uns
    Eina_Bool ret = EINA_TRUE;
 
    
-#line 2755 "lib/eolian/eo_lexer.c"
+#line 2798 "lib/eolian/eo_lexer.c"
        {
         toknz->cs = eo_tokenizer_start;
         toknz->ts = 0;
@@ -2759,7 +2802,7 @@ eo_tokenizer_mem_walk(Eo_Tokenizer *toknz, const char *source, char *buffer, uns
         toknz->act = 0;
        }
 
-#line 1125 "lib/eolian/eo_lexer.rl"
+#line 1150 "lib/eolian/eo_lexer.rl"
 
    toknz->p = buffer;
 
@@ -2768,7 +2811,7 @@ eo_tokenizer_mem_walk(Eo_Tokenizer *toknz, const char *source, char *buffer, uns
    toknz->eof = toknz->pe;
 
    
-#line 2772 "lib/eolian/eo_lexer.c"
+#line 2815 "lib/eolian/eo_lexer.c"
        {
        int _klen;
        unsigned int _trans;
@@ -2787,7 +2830,7 @@ _resume:
 #line 1 "NONE"
        { toknz->ts = ( toknz->p);}
        break;
-#line 2791 "lib/eolian/eo_lexer.c"
+#line 2834 "lib/eolian/eo_lexer.c"
                }
        }
 
@@ -2854,28 +2897,28 @@ _eof_trans:
                switch ( *_acts++ )
                {
        case 0:
-#line 359 "lib/eolian/eo_lexer.rl"
+#line 384 "lib/eolian/eo_lexer.rl"
        {
       toknz->current_line += 1;
       DBG("inc[%d] %d", toknz->cs, toknz->current_line);
    }
        break;
        case 1:
-#line 364 "lib/eolian/eo_lexer.rl"
+#line 389 "lib/eolian/eo_lexer.rl"
        {
       toknz->saved.line = toknz->current_line;
       DBG("save line[%d] %d", toknz->cs, toknz->current_line);
    }
        break;
        case 2:
-#line 369 "lib/eolian/eo_lexer.rl"
+#line 394 "lib/eolian/eo_lexer.rl"
        {
       toknz->saved.tok = ( toknz->p);
       DBG("save token[%d] %p %c", toknz->cs, ( toknz->p), *( toknz->p));
    }
        break;
        case 3:
-#line 446 "lib/eolian/eo_lexer.rl"
+#line 471 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
       if (toknz->tmp.accessor->ret != NULL)
@@ -2884,7 +2927,7 @@ _eof_trans:
    }
        break;
        case 4:
-#line 453 "lib/eolian/eo_lexer.rl"
+#line 478 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
       if (!toknz->tmp.accessor->ret) ABORT(toknz, "No ret!!!");
@@ -2895,20 +2938,20 @@ _eof_trans:
    }
        break;
        case 5:
-#line 462 "lib/eolian/eo_lexer.rl"
+#line 487 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
       toknz->tmp.accessor->legacy = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
        case 6:
-#line 476 "lib/eolian/eo_lexer.rl"
+#line 501 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.accessor_param = _eo_tokenizer_accessor_param_get(toknz, ( toknz->p));
    }
        break;
        case 7:
-#line 480 "lib/eolian/eo_lexer.rl"
+#line 505 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.accessor_param)
          ABORT(toknz, "No accessor param!!!");
@@ -2919,7 +2962,7 @@ _eof_trans:
    }
        break;
        case 8:
-#line 509 "lib/eolian/eo_lexer.rl"
+#line 534 "lib/eolian/eo_lexer.rl"
        {
       const char *c = _eo_tokenizer_token_get(toknz, ( toknz->p)-2);
       if (toknz->tmp.param == NULL)
@@ -2929,7 +2972,7 @@ _eof_trans:
    }
        break;
        case 9:
-#line 517 "lib/eolian/eo_lexer.rl"
+#line 542 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.param = _eo_tokenizer_param_get(toknz, ( toknz->p));
       if (toknz->tmp.params)
@@ -2940,7 +2983,7 @@ _eof_trans:
    }
        break;
        case 10:
-#line 617 "lib/eolian/eo_lexer.rl"
+#line 642 "lib/eolian/eo_lexer.rl"
        {
       if (toknz->tmp.prop != NULL)
         ABORT(toknz, "there is a pending property definition %s", toknz->tmp.prop->name);
@@ -2948,7 +2991,7 @@ _eof_trans:
    }
        break;
        case 11:
-#line 657 "lib/eolian/eo_lexer.rl"
+#line 682 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       if (toknz->tmp.meth->ret != NULL)
@@ -2957,7 +3000,7 @@ _eof_trans:
    }
        break;
        case 12:
-#line 664 "lib/eolian/eo_lexer.rl"
+#line 689 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       if (toknz->tmp.meth->ret != NULL) ABORT(toknz, "No ret!!!");
@@ -2968,14 +3011,14 @@ _eof_trans:
    }
        break;
        case 13:
-#line 673 "lib/eolian/eo_lexer.rl"
+#line 698 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       toknz->tmp.meth->legacy = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
        case 14:
-#line 678 "lib/eolian/eo_lexer.rl"
+#line 703 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       toknz->tmp.meth->obj_const = EINA_TRUE;
@@ -2983,7 +3026,7 @@ _eof_trans:
    }
        break;
        case 15:
-#line 740 "lib/eolian/eo_lexer.rl"
+#line 765 "lib/eolian/eo_lexer.rl"
        {
       if (toknz->tmp.meth != NULL)
         ABORT(toknz, "there is a pending method definition %s", toknz->tmp.meth->name);
@@ -2991,14 +3034,14 @@ _eof_trans:
    }
        break;
        case 16:
-#line 772 "lib/eolian/eo_lexer.rl"
+#line 797 "lib/eolian/eo_lexer.rl"
        {
       const char *base = _eo_tokenizer_token_get(toknz, ( toknz->p));
       toknz->tmp.str_items = eina_list_append(toknz->tmp.str_items, base);
    }
        break;
        case 17:
-#line 777 "lib/eolian/eo_lexer.rl"
+#line 802 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       toknz->tmp.kls->inherits = toknz->tmp.str_items;
@@ -3006,7 +3049,7 @@ _eof_trans:
    }
        break;
        case 18:
-#line 825 "lib/eolian/eo_lexer.rl"
+#line 850 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       toknz->tmp.event = _eo_tokenizer_event_get(toknz, ( toknz->p));
@@ -3014,7 +3057,7 @@ _eof_trans:
    }
        break;
        case 19:
-#line 831 "lib/eolian/eo_lexer.rl"
+#line 856 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.event) ABORT(toknz, "No event!!!");
       if (toknz->tmp.event->type != NULL)
@@ -3023,7 +3066,7 @@ _eof_trans:
    }
        break;
        case 20:
-#line 838 "lib/eolian/eo_lexer.rl"
+#line 863 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.event) ABORT(toknz, "No event!!!");
       if (toknz->tmp.event->comment != NULL)
@@ -3033,7 +3076,7 @@ _eof_trans:
    }
        break;
        case 21:
-#line 846 "lib/eolian/eo_lexer.rl"
+#line 871 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       if (toknz->tmp.kls->legacy_prefix != NULL)
@@ -3042,7 +3085,7 @@ _eof_trans:
    }
        break;
        case 22:
-#line 855 "lib/eolian/eo_lexer.rl"
+#line 880 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       if (toknz->tmp.kls->eo_prefix != NULL)
@@ -3051,7 +3094,7 @@ _eof_trans:
    }
        break;
        case 23:
-#line 864 "lib/eolian/eo_lexer.rl"
+#line 889 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       if (toknz->tmp.kls->data_type != NULL)
@@ -3060,7 +3103,7 @@ _eof_trans:
    }
        break;
        case 24:
-#line 877 "lib/eolian/eo_lexer.rl"
+#line 902 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
         toknz->tmp.impl = _eo_tokenizer_implement_get(toknz, ( toknz->p));
@@ -3068,7 +3111,7 @@ _eof_trans:
    }
        break;
        case 25:
-#line 883 "lib/eolian/eo_lexer.rl"
+#line 908 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (toknz->tmp.impl->legacy)
@@ -3077,7 +3120,7 @@ _eof_trans:
    }
        break;
        case 26:
-#line 890 "lib/eolian/eo_lexer.rl"
+#line 915 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (!toknz->tmp.impl->legacy)
@@ -3086,7 +3129,7 @@ _eof_trans:
    }
        break;
        case 27:
-#line 897 "lib/eolian/eo_lexer.rl"
+#line 922 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         toknz->tmp.impl_leg_param = calloc(1, sizeof(Eo_Implement_Legacy_Param_Def));
@@ -3097,7 +3140,7 @@ _eof_trans:
    }
        break;
        case 28:
-#line 906 "lib/eolian/eo_lexer.rl"
+#line 931 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl_leg_param)
            ABORT(toknz, "No implement legacy param!!!");
@@ -3105,7 +3148,7 @@ _eof_trans:
    }
        break;
        case 29:
-#line 912 "lib/eolian/eo_lexer.rl"
+#line 937 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl_leg_param)
            ABORT(toknz, "No implement legacy param!!!");
@@ -3113,7 +3156,7 @@ _eof_trans:
    }
        break;
        case 30:
-#line 918 "lib/eolian/eo_lexer.rl"
+#line 943 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (!toknz->tmp.impl->legacy)
@@ -3122,7 +3165,7 @@ _eof_trans:
    }
        break;
        case 31:
-#line 925 "lib/eolian/eo_lexer.rl"
+#line 950 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (!toknz->tmp.impl->legacy)
@@ -3131,31 +3174,31 @@ _eof_trans:
    }
        break;
        case 32:
-#line 996 "lib/eolian/eo_lexer.rl"
+#line 1021 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_REGULAR;
    }
        break;
        case 33:
-#line 999 "lib/eolian/eo_lexer.rl"
+#line 1024 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_ABSTRACT;
    }
        break;
        case 34:
-#line 1002 "lib/eolian/eo_lexer.rl"
+#line 1027 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_MIXIN;
    }
        break;
        case 35:
-#line 1005 "lib/eolian/eo_lexer.rl"
+#line 1030 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_INTERFACE;
    }
        break;
        case 36:
-#line 1009 "lib/eolian/eo_lexer.rl"
+#line 1034 "lib/eolian/eo_lexer.rl"
        {
       if (toknz->tmp.kls != NULL)
         ABORT(toknz, "there is a pending class definition %s", toknz->tmp.kls->name);
@@ -3168,7 +3211,7 @@ _eof_trans:
        { toknz->te = ( toknz->p)+1;}
        break;
        case 40:
-#line 438 "lib/eolian/eo_lexer.rl"
+#line 463 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
       if (toknz->tmp.accessor->comment != NULL)
@@ -3178,33 +3221,33 @@ _eof_trans:
    }}
        break;
        case 41:
-#line 374 "lib/eolian/eo_lexer.rl"
+#line 399 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
        case 42:
-#line 501 "lib/eolian/eo_lexer.rl"
+#line 526 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
        case 43:
-#line 502 "lib/eolian/eo_lexer.rl"
+#line 527 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
        case 44:
-#line 467 "lib/eolian/eo_lexer.rl"
+#line 492 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      }");
       if (!toknz->tmp.prop) ABORT(toknz, "No prop!!!");
       toknz->tmp.prop->accessors = eina_list_append(toknz->tmp.prop->accessors, toknz->tmp.accessor);
       toknz->tmp.accessor = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 315; goto _again;}
+      { toknz->cs = 319; goto _again;}
    }}
        break;
        case 45:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3223,26 +3266,26 @@ _eof_trans:
    }}
        break;
        case 46:
-#line 497 "lib/eolian/eo_lexer.rl"
+#line 522 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 47:
-#line 500 "lib/eolian/eo_lexer.rl"
+#line 525 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 48:
-#line 467 "lib/eolian/eo_lexer.rl"
+#line 492 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("      }");
       if (!toknz->tmp.prop) ABORT(toknz, "No prop!!!");
       toknz->tmp.prop->accessors = eina_list_append(toknz->tmp.prop->accessors, toknz->tmp.accessor);
       toknz->tmp.accessor = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 315; goto _again;}
+      { toknz->cs = 319; goto _again;}
    }}
        break;
        case 49:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3261,11 +3304,11 @@ _eof_trans:
    }}
        break;
        case 50:
-#line 500 "lib/eolian/eo_lexer.rl"
+#line 525 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}}
        break;
        case 51:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3284,28 +3327,28 @@ _eof_trans:
    }}
        break;
        case 52:
-#line 374 "lib/eolian/eo_lexer.rl"
+#line 399 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
        case 53:
-#line 526 "lib/eolian/eo_lexer.rl"
+#line 551 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      }");
       toknz->tmp.param = NULL;
       toknz->current_nesting--;
       if (toknz->tmp.prop)
-        { toknz->cs = 315; goto _again;}
+        { toknz->cs = 319; goto _again;}
       else if (toknz->tmp.meth)
-        { toknz->cs = 328; goto _again;}
+        { toknz->cs = 332; goto _again;}
       else
         ABORT(toknz, "leaving tokenize_params but there is no property nor method pending");
    }}
        break;
        case 54:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3324,29 +3367,29 @@ _eof_trans:
    }}
        break;
        case 55:
-#line 542 "lib/eolian/eo_lexer.rl"
+#line 567 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 56:
-#line 544 "lib/eolian/eo_lexer.rl"
+#line 569 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 57:
-#line 526 "lib/eolian/eo_lexer.rl"
+#line 551 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("      }");
       toknz->tmp.param = NULL;
       toknz->current_nesting--;
       if (toknz->tmp.prop)
-        { toknz->cs = 315; goto _again;}
+        { toknz->cs = 319; goto _again;}
       else if (toknz->tmp.meth)
-        { toknz->cs = 328; goto _again;}
+        { toknz->cs = 332; goto _again;}
       else
         ABORT(toknz, "leaving tokenize_params but there is no property nor method pending");
    }}
        break;
        case 58:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3365,11 +3408,11 @@ _eof_trans:
    }}
        break;
        case 59:
-#line 544 "lib/eolian/eo_lexer.rl"
+#line 569 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}}
        break;
        case 60:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3388,50 +3431,50 @@ _eof_trans:
    }}
        break;
        case 61:
-#line 374 "lib/eolian/eo_lexer.rl"
+#line 399 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
        case 62:
-#line 551 "lib/eolian/eo_lexer.rl"
+#line 576 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      get {");
       toknz->tmp.accessor = _eo_tokenizer_accessor_get(toknz, GETTER);
       toknz->current_nesting++;
-      { toknz->cs = 299; goto _again;}
+      { toknz->cs = 303; goto _again;}
    }}
        break;
        case 63:
-#line 558 "lib/eolian/eo_lexer.rl"
+#line 583 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      set {");
       toknz->tmp.accessor = _eo_tokenizer_accessor_get(toknz, SETTER);
       toknz->current_nesting++;
-      { toknz->cs = 299; goto _again;}
+      { toknz->cs = 303; goto _again;}
    }}
        break;
        case 64:
-#line 565 "lib/eolian/eo_lexer.rl"
+#line 590 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      keys {");
       toknz->current_nesting++;
       toknz->tmp.params = &(toknz->tmp.prop->keys);
-      { toknz->cs = 308; goto _again;}
+      { toknz->cs = 312; goto _again;}
    }}
        break;
        case 65:
-#line 572 "lib/eolian/eo_lexer.rl"
+#line 597 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      values {");
       toknz->current_nesting++;
       toknz->tmp.params = &(toknz->tmp.prop->values);
-      { toknz->cs = 308; goto _again;}
+      { toknz->cs = 312; goto _again;}
    }}
        break;
        case 66:
-#line 579 "lib/eolian/eo_lexer.rl"
+#line 604 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.prop) ABORT(toknz, "No property!!!");
       if (eina_list_count(toknz->tmp.prop->values) == 0)
@@ -3442,11 +3485,11 @@ _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 = 323; goto _again;}
+      { toknz->cs = 327; goto _again;}
    }}
        break;
        case 67:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3465,11 +3508,11 @@ _eof_trans:
    }}
        break;
        case 68:
-#line 598 "lib/eolian/eo_lexer.rl"
+#line 623 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 69:
-#line 579 "lib/eolian/eo_lexer.rl"
+#line 604 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       if (!toknz->tmp.prop) ABORT(toknz, "No property!!!");
       if (eina_list_count(toknz->tmp.prop->values) == 0)
@@ -3480,11 +3523,11 @@ _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 = 323; goto _again;}
+      { toknz->cs = 327; goto _again;}
    }}
        break;
        case 70:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3503,7 +3546,7 @@ _eof_trans:
    }}
        break;
        case 71:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3522,31 +3565,31 @@ _eof_trans:
    }}
        break;
        case 72:
-#line 374 "lib/eolian/eo_lexer.rl"
+#line 399 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
        case 73:
-#line 610 "lib/eolian/eo_lexer.rl"
+#line 635 "lib/eolian/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 = 315; goto _again;}
+      { toknz->cs = 319; goto _again;}
    }}
        break;
        case 74:
-#line 623 "lib/eolian/eo_lexer.rl"
+#line 648 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  }");
       toknz->current_nesting--;
-      { toknz->cs = 343; goto _again;}
+      { toknz->cs = 347; goto _again;}
    }}
        break;
        case 75:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3565,19 +3608,19 @@ _eof_trans:
    }}
        break;
        case 76:
-#line 632 "lib/eolian/eo_lexer.rl"
+#line 657 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 77:
-#line 623 "lib/eolian/eo_lexer.rl"
+#line 648 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("  }");
       toknz->current_nesting--;
-      { toknz->cs = 343; goto _again;}
+      { toknz->cs = 347; goto _again;}
    }}
        break;
        case 78:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3596,7 +3639,7 @@ _eof_trans:
    }}
        break;
        case 79:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3615,7 +3658,7 @@ _eof_trans:
    }}
        break;
        case 80:
-#line 641 "lib/eolian/eo_lexer.rl"
+#line 666 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       if (toknz->tmp.meth->comment != NULL)
@@ -3625,32 +3668,32 @@ _eof_trans:
    }}
        break;
        case 81:
-#line 374 "lib/eolian/eo_lexer.rl"
+#line 399 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
        case 82:
-#line 649 "lib/eolian/eo_lexer.rl"
+#line 674 "lib/eolian/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 = 308; goto _again;}
+      { toknz->cs = 312; goto _again;}
    }}
        break;
        case 83:
-#line 725 "lib/eolian/eo_lexer.rl"
+#line 750 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
        case 84:
-#line 726 "lib/eolian/eo_lexer.rl"
+#line 751 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
        case 85:
-#line 684 "lib/eolian/eo_lexer.rl"
+#line 709 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       Eina_List **l = NULL;
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
@@ -3674,11 +3717,11 @@ _eof_trans:
       *l = eina_list_append(*l, toknz->tmp.meth);
       toknz->tmp.meth = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 338; goto _again;}
+      { toknz->cs = 342; goto _again;}
    }}
        break;
        case 86:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3697,15 +3740,15 @@ _eof_trans:
    }}
        break;
        case 87:
-#line 720 "lib/eolian/eo_lexer.rl"
+#line 745 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 88:
-#line 724 "lib/eolian/eo_lexer.rl"
+#line 749 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 89:
-#line 684 "lib/eolian/eo_lexer.rl"
+#line 709 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       Eina_List **l = NULL;
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
@@ -3729,11 +3772,11 @@ _eof_trans:
       *l = eina_list_append(*l, toknz->tmp.meth);
       toknz->tmp.meth = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 338; goto _again;}
+      { toknz->cs = 342; goto _again;}
    }}
        break;
        case 90:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3752,11 +3795,11 @@ _eof_trans:
    }}
        break;
        case 91:
-#line 724 "lib/eolian/eo_lexer.rl"
+#line 749 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}}
        break;
        case 92:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3775,32 +3818,32 @@ _eof_trans:
    }}
        break;
        case 93:
-#line 374 "lib/eolian/eo_lexer.rl"
+#line 399 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
        case 94:
-#line 733 "lib/eolian/eo_lexer.rl"
+#line 758 "lib/eolian/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 = 328; goto _again;}
+      { toknz->cs = 332; goto _again;}
    }}
        break;
        case 95:
-#line 746 "lib/eolian/eo_lexer.rl"
+#line 771 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  }");
       toknz->current_methods_type = METH_TYPE_LAST;
       toknz->current_nesting--;
-      { toknz->cs = 343; goto _again;}
+      { toknz->cs = 347; goto _again;}
    }}
        break;
        case 96:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3819,20 +3862,20 @@ _eof_trans:
    }}
        break;
        case 97:
-#line 756 "lib/eolian/eo_lexer.rl"
+#line 781 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 98:
-#line 746 "lib/eolian/eo_lexer.rl"
+#line 771 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("  }");
       toknz->current_methods_type = METH_TYPE_LAST;
       toknz->current_nesting--;
-      { toknz->cs = 343; goto _again;}
+      { toknz->cs = 347; goto _again;}
    }}
        break;
        case 99:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3851,7 +3894,7 @@ _eof_trans:
    }}
        break;
        case 100:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3870,7 +3913,7 @@ _eof_trans:
    }}
        break;
        case 101:
-#line 765 "lib/eolian/eo_lexer.rl"
+#line 790 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       if (toknz->tmp.kls->comment != NULL)
@@ -3879,70 +3922,70 @@ _eof_trans:
    }}
        break;
        case 102:
-#line 374 "lib/eolian/eo_lexer.rl"
+#line 399 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
        case 103:
-#line 783 "lib/eolian/eo_lexer.rl"
+#line 808 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
    }}
        break;
        case 104:
-#line 786 "lib/eolian/eo_lexer.rl"
+#line 811 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
    }}
        break;
        case 105:
-#line 789 "lib/eolian/eo_lexer.rl"
+#line 814 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  constructors {");
       toknz->current_methods_type = METH_CONSTRUCTOR;
       toknz->current_nesting++;
-      { toknz->cs = 338; goto _again;}
+      { toknz->cs = 342; goto _again;}
    }}
        break;
        case 106:
-#line 796 "lib/eolian/eo_lexer.rl"
+#line 821 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  destructors {");
       toknz->current_methods_type = METH_DESTRUCTOR;
       toknz->current_nesting++;
-      { toknz->cs = 338; goto _again;}
+      { toknz->cs = 342; goto _again;}
    }}
        break;
        case 107:
-#line 803 "lib/eolian/eo_lexer.rl"
+#line 828 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  properties {");
       toknz->current_nesting++;
-      { toknz->cs = 323; goto _again;}
+      { toknz->cs = 327; goto _again;}
    }}
        break;
        case 108:
-#line 809 "lib/eolian/eo_lexer.rl"
+#line 834 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  begin methods");
       toknz->current_methods_type = METH_REGULAR;
       toknz->current_nesting++;
-      { toknz->cs = 338; goto _again;}
+      { toknz->cs = 342; goto _again;}
    }}
        break;
        case 109:
-#line 816 "lib/eolian/eo_lexer.rl"
+#line 841 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       INF("end class: %s", toknz->tmp.kls->name);
       toknz->classes = eina_list_append(toknz->classes, toknz->tmp.kls);
       toknz->tmp.kls = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 292; goto _again;}
+      { toknz->cs = 296; goto _again;}
    }}
        break;
        case 110:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3961,44 +4004,44 @@ _eof_trans:
    }}
        break;
        case 111:
-#line 971 "lib/eolian/eo_lexer.rl"
+#line 996 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 112:
-#line 974 "lib/eolian/eo_lexer.rl"
+#line 999 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 113:
-#line 975 "lib/eolian/eo_lexer.rl"
+#line 1000 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 114:
-#line 976 "lib/eolian/eo_lexer.rl"
+#line 1001 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 115:
-#line 783 "lib/eolian/eo_lexer.rl"
+#line 808 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
    }}
        break;
        case 116:
-#line 786 "lib/eolian/eo_lexer.rl"
+#line 811 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
    }}
        break;
        case 117:
-#line 816 "lib/eolian/eo_lexer.rl"
+#line 841 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       INF("end class: %s", toknz->tmp.kls->name);
       toknz->classes = eina_list_append(toknz->classes, toknz->tmp.kls);
       toknz->tmp.kls = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 292; goto _again;}
+      { toknz->cs = 296; goto _again;}
    }}
        break;
        case 118:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -4017,7 +4060,7 @@ _eof_trans:
    }}
        break;
        case 119:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -4036,23 +4079,23 @@ _eof_trans:
    }}
        break;
        case 120:
-#line 374 "lib/eolian/eo_lexer.rl"
+#line 399 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
        case 121:
-#line 989 "lib/eolian/eo_lexer.rl"
+#line 1014 "lib/eolian/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 = 343; goto _again;}
+      { toknz->cs = 347; goto _again;}
    }}
        break;
        case 122:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -4071,11 +4114,11 @@ _eof_trans:
    }}
        break;
        case 123:
-#line 1024 "lib/eolian/eo_lexer.rl"
+#line 1049 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 124:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -4094,7 +4137,7 @@ _eof_trans:
    }}
        break;
        case 125:
-#line 383 "lib/eolian/eo_lexer.rl"
+#line 408 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -4112,7 +4155,7 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-#line 4116 "lib/eolian/eo_lexer.c"
+#line 4159 "lib/eolian/eo_lexer.c"
                }
        }
 
@@ -4125,7 +4168,7 @@ _again:
 #line 1 "NONE"
        { toknz->ts = 0;}
        break;
-#line 4129 "lib/eolian/eo_lexer.c"
+#line 4172 "lib/eolian/eo_lexer.c"
                }
        }
 
@@ -4143,12 +4186,12 @@ _again:
        _out: {}
        }
 
-#line 1133 "lib/eolian/eo_lexer.rl"
+#line 1158 "lib/eolian/eo_lexer.rl"
 
    if ( toknz->cs == 
-#line 4150 "lib/eolian/eo_lexer.c"
+#line 4193 "lib/eolian/eo_lexer.c"
 -1
-#line 1134 "lib/eolian/eo_lexer.rl"
+#line 1159 "lib/eolian/eo_lexer.rl"
  )
      {
         ERR("%s: wrong termination", source);
@@ -4392,6 +4435,7 @@ eo_tokenizer_database_fill(const char *filename)
         EINA_LIST_FOREACH(kls->properties, l, prop)
           {
              Eolian_Function foo_id = database_function_new(prop->name, EOLIAN_UNRESOLVED);
+             database_function_scope_set(foo_id, prop->scope);
              EINA_LIST_FOREACH(prop->keys, m, param)
                {
                   Eolian_Function_Parameter p = database_property_key_add(
@@ -4455,6 +4499,7 @@ eo_tokenizer_database_fill(const char *filename)
         EINA_LIST_FOREACH(kls->methods, l, meth)
           {
              Eolian_Function foo_id = database_function_new(meth->name, EOLIAN_METHOD);
+             database_function_scope_set(foo_id, meth->scope);
              database_class_function_add(kls->name, foo_id);
              if (meth->ret)
                {
index 5ad182a..debd86e 100644 (file)
@@ -47,6 +47,7 @@ typedef struct _eo_tokenizer
       Eo_Event_Def *event;
       Eo_Implement_Def *impl;
       Eo_Implement_Legacy_Param_Def *impl_leg_param;
+      int fscope;
    } tmp;
 
 } Eo_Tokenizer;
index a4f6c36..d3caa27 100644 (file)
@@ -33,6 +33,9 @@ static int _eo_tokenizer_log_dom = -1;
 #endif
 #define DBG(...) EINA_LOG_DOM_DBG(_eo_tokenizer_log_dom, __VA_ARGS__)
 
+#define FUNC_PUBLIC 0
+#define FUNC_PROTECTED 1
+
 static int _init_counter = 0;
 
 int
@@ -152,10 +155,21 @@ _eo_tokenizer_class_get(Eo_Tokenizer *toknz, char *p)
 static Eo_Property_Def*
 _eo_tokenizer_property_get(Eo_Tokenizer *toknz, char *p)
 {
-   Eo_Property_Def *prop = calloc(1, sizeof(Eo_Property_Def));
-   if (prop == NULL) ABORT(toknz, "calloc Eo_Property_Def failure");
+   Eo_Property_Def *prop = NULL;
+   if (!strncmp(toknz->saved.tok, "protected ", 10))
+     {
+        toknz->saved.tok += 10;
+        toknz->tmp.fscope = FUNC_PROTECTED;
+     }
+   else
+     {
+        prop = calloc(1, sizeof(Eo_Property_Def));
+        if (prop == NULL) ABORT(toknz, "calloc Eo_Property_Def failure");
 
-   prop->name = _eo_tokenizer_token_get(toknz, p);
+        prop->name = _eo_tokenizer_token_get(toknz, p);
+        prop->scope = toknz->tmp.fscope;
+        toknz->tmp.fscope = FUNC_PUBLIC;
+     }
 
    return prop;
 }
@@ -163,10 +177,21 @@ _eo_tokenizer_property_get(Eo_Tokenizer *toknz, char *p)
 static Eo_Method_Def*
 _eo_tokenizer_method_get(Eo_Tokenizer *toknz, char *p)
 {
-   Eo_Method_Def *meth = calloc(1, sizeof(Eo_Method_Def));
-   if (meth == NULL) ABORT(toknz, "calloc Eo_Method_Def failure");
+   Eo_Method_Def *meth = NULL;
+   if (!strncmp(toknz->saved.tok, "protected ", 10))
+     {
+        toknz->saved.tok += 10;
+        toknz->tmp.fscope = FUNC_PROTECTED;
+     }
+   else
+     {
+        meth = calloc(1, sizeof(Eo_Method_Def));
+        if (meth == NULL) ABORT(toknz, "calloc Eo_Method_Def failure");
 
-   meth->name = _eo_tokenizer_token_get(toknz, p);
+        meth->name = _eo_tokenizer_token_get(toknz, p);
+        meth->scope = toknz->tmp.fscope;
+        toknz->tmp.fscope = FUNC_PUBLIC;
+     }
 
    return meth;
 }
@@ -424,7 +449,7 @@ _eo_tokenizer_implement_get(Eo_Tokenizer *toknz, char *p)
 
    # chars allowed on the return line.
    return_char       = (alnum_u | '*' | ws | '@' | '(' | ')' | '.' | '-');
-   func_name         = alnum+ >save_fpc (alnum | '_' )+;
+   func_name         = (alnum >save_fpc (alnum | '_')+ (ws (alnum | '_')+)?);
 }%%
 
 %%{
@@ -1374,6 +1399,7 @@ eo_tokenizer_database_fill(const char *filename)
         EINA_LIST_FOREACH(kls->properties, l, prop)
           {
              Eolian_Function foo_id = database_function_new(prop->name, EOLIAN_UNRESOLVED);
+             database_function_scope_set(foo_id, prop->scope);
              EINA_LIST_FOREACH(prop->keys, m, param)
                {
                   Eolian_Function_Parameter p = database_property_key_add(
@@ -1437,6 +1463,7 @@ eo_tokenizer_database_fill(const char *filename)
         EINA_LIST_FOREACH(kls->methods, l, meth)
           {
              Eolian_Function foo_id = database_function_new(meth->name, EOLIAN_METHOD);
+             database_function_scope_set(foo_id, meth->scope);
              database_class_function_add(kls->name, foo_id);
              if (meth->ret)
                {
index 1dcebcb..92ca668 100644 (file)
@@ -44,6 +44,7 @@ typedef struct
    Eina_List *keys; /* list of _Parameter_Desc */
    Eina_List *params; /* list of _Parameter_Desc */
    Eolian_Function_Type type;
+   Eolian_Function_Scope scope;
    Eina_Hash *data;
    Eina_Bool obj_is_const :1; /* True if the object has to be const. Useful for a few methods. */
    Eina_Bool get_virtual_pure :1;
@@ -379,6 +380,22 @@ database_function_new(const char *function_name, Eolian_Function_Type foo_type)
    return (Eolian_Function) fid;
 }
 
+EAPI Eolian_Function_Scope
+eolian_function_scope_get(Eolian_Function function_id)
+{
+   _Function_Id *fid = (_Function_Id *)function_id;
+   EINA_SAFETY_ON_NULL_RETURN_VAL(fid, EOLIAN_SCOPE_PUBLIC);
+   return fid->scope;
+}
+
+void
+database_function_scope_set(Eolian_Function function_id, Eolian_Function_Scope scope)
+{
+   _Function_Id *fid = (_Function_Id *)function_id;
+   EINA_SAFETY_ON_NULL_RETURN(fid);
+   fid->scope = scope;
+}
+
 void
 database_function_type_set(Eolian_Function function_id, Eolian_Function_Type foo_type)
 {
index 30e15b4..450ba21 100644 (file)
@@ -109,6 +109,9 @@ void database_function_object_set_as_const(Eolian_Function foo_id, Eina_Bool is_
 Eina_Bool
 database_function_set_as_virtual_pure(Eolian_Function function_id, Eolian_Function_Type type);
 
+void
+database_function_scope_set(Eolian_Function function_id, Eolian_Function_Scope scope);
+
 /* Need to add API for callbacks and implements */
 
 Eolian_Implement