Eolian: Format changes
authorDaniel Zaoui <daniel.zaoui@samsung.com>
Wed, 26 Feb 2014 18:02:10 +0000 (20:02 +0200)
committerDaniel Zaoui <daniel.zaoui@samsung.com>
Mon, 3 Mar 2014 12:09:55 +0000 (14:09 +0200)
- Support keys/values for properties instead of params
- Direction for parameters syntax changed from in to @in...
- obj:const changed to const in .eo

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

index 60f12af..b686fc6 100644 (file)
@@ -158,6 +158,20 @@ eo1_fundef_generate(const char *classname, Eolian_Function func, Eolian_Function
         eina_strbuf_append_printf(str_typecheck, ", EO_TYPECHECK(%s*, ret)", rettype);
      }
 
+   EINA_LIST_FOREACH(eolian_property_keys_list_get(func), l, data)
+     {
+        const char *pname;
+        const char *ptype;
+        eolian_parameter_information_get((Eolian_Function_Parameter)data, NULL, &ptype, &pname, NULL);
+
+        eina_strbuf_append_printf(str_pardesc, tmpl_eo_pardesc, "in", pname);
+
+        if (eina_strbuf_length_get(str_par)) eina_strbuf_append(str_par, ", ");
+        eina_strbuf_append(str_par, pname);
+
+        eina_strbuf_append_printf(str_typecheck, ", EO_TYPECHECK(%s, %s)", ptype, pname);
+     }
+
    EINA_LIST_FOREACH(eolian_parameters_list_get(func), l, data)
      {
         const char *pname;
@@ -329,6 +343,20 @@ eo1_bind_func_generate(const char *classname, Eolian_Function funcid, Eolian_Fun
    const Eina_List *l;
    void *data;
 
+   EINA_LIST_FOREACH(eolian_property_keys_list_get(funcid), l, data)
+     {
+        const char *pname;
+        const char *ptype;
+        eolian_parameter_information_get((Eolian_Function_Parameter)data, NULL, &ptype, &pname, NULL);
+        Eina_Bool is_const = eolian_parameter_get_const_attribute_get(data);
+        eina_strbuf_append_printf(va_args, "   %s%s %s = va_arg(*list, %s%s);\n",
+              ftype == GET && is_const?"const ":"", ptype, pname,
+              ftype == GET && is_const?"const ":"", _varg_upgr(ptype));
+        eina_strbuf_append_printf(params, ", %s", pname);
+        eina_strbuf_append_printf(full_params, ", %s%s %s",
+              ftype == GET && eolian_parameter_get_const_attribute_get(data)?"const ":"",
+              ptype, pname);
+     }
    if (!var_as_ret)
      {
         EINA_LIST_FOREACH(eolian_parameters_list_get(funcid), l, data)
@@ -369,7 +397,8 @@ eo1_bind_func_generate(const char *classname, Eolian_Function funcid, Eolian_Fun
         eina_strbuf_replace_all(fbody, "@#ret_type", "void");
      }
 
-   if (eina_list_count(eolian_parameters_list_get(funcid)) == 0)
+   if (eina_list_count(eolian_parameters_list_get(funcid)) == 0 &&
+         (eina_list_count(eolian_property_keys_list_get(funcid)) == 0))
      {
         eina_strbuf_replace_all(fbody, "@#list_unused", " EINA_UNUSED");
      }
index 84fe51e..ad9aa7e 100644 (file)
@@ -96,6 +96,17 @@ _eapi_decl_func_generate(const char *classname, Eolian_Function funcid, Eolian_F
    const Eina_List *l;
    void *data;
 
+   EINA_LIST_FOREACH(eolian_property_keys_list_get(funcid), l, data)
+     {
+        const char *pname;
+        const char *pdesc;
+        const char *ptype;
+        eolian_parameter_information_get((Eolian_Function_Parameter)data, NULL, &ptype, &pname, &pdesc);
+        eina_strbuf_append_printf(fparam, ", %s%s %s",
+              eolian_parameter_get_const_attribute_get(data)?"const":"",
+              ptype, pname);
+        eina_strbuf_append_printf(descparam, " * @param %s\n", pname);
+     }
    if (!var_as_ret)
      {
        EINA_LIST_FOREACH(eolian_parameters_list_get(funcid), l, data)
@@ -187,6 +198,17 @@ _eapi_func_generate(const char *classname, Eolian_Function funcid, Eolian_Functi
 
    tmpstr[0] = '\0';
 
+   EINA_LIST_FOREACH(eolian_property_keys_list_get(funcid), l, data)
+     {
+        const char *pname;
+        const char *ptype;
+        eolian_parameter_information_get((Eolian_Function_Parameter)data, NULL, &ptype, &pname, NULL);
+        eina_strbuf_append_printf(fparam, ", %s%s %s",
+              ftype == GET && eolian_parameter_get_const_attribute_get(data)?"const ":"",
+              ptype, pname);
+        if (eina_strbuf_length_get(eoparam)) eina_strbuf_append(eoparam, ", ");
+        eina_strbuf_append_printf(eoparam, "%s", pname);
+     }
    if (!var_as_ret)
    {
        EINA_LIST_FOREACH(eolian_parameters_list_get(funcid), l, data)
index 43d1d8d..e48ed29 100644 (file)
@@ -296,10 +296,30 @@ EAPI const char *eolian_function_data_get(Eolian_Function function_id, const cha
 EAPI Eolian_Function_Parameter eolian_function_parameter_get(const Eolian_Function function_id, const char *param_name);
 
 /*
- * @brief Returns a list of parameter handles for a function pointed by its id.
+ * @brief Returns a list of keys params of a given function.
  *
  * @param[in] function_id Id of the function
- * @return a handle to this parameter.
+ * @return list of Eolian_Function_Parameter
+ *
+ * @ingroup Eolian
+ */
+EAPI const Eina_List *eolian_property_keys_list_get(Eolian_Function foo_id);
+
+/*
+ * @brief Returns a list of values params of a given function.
+ *
+ * @param[in] function_id Id of the function
+ * @return list of Eolian_Function_Parameter
+ *
+ * @ingroup Eolian
+ */
+EAPI const Eina_List *eolian_property_values_list_get(Eolian_Function foo_id);
+
+/*
+ * @brief Returns a list of parameter handles for a method/ctor/dtor.
+ *
+ * @param[in] function_id Id of the function
+ * @return list of Eolian_Function_Parameter
  *
  * @ingroup Eolian
  */
index 48a0507..88b78f2 100644 (file)
@@ -43,7 +43,10 @@ eo_definitions_property_def_free(Eo_Property_Def *prop)
    if (prop->name)
      eina_stringshare_del(prop->name);
 
-   EINA_LIST_FREE(prop->params, param)
+   EINA_LIST_FREE(prop->keys, param)
+      eo_definitions_param_free(param);
+
+   EINA_LIST_FREE(prop->values, param)
       eo_definitions_param_free(param);
 
    EINA_LIST_FREE(prop->accessors, accessor)
index 055fa28..579fa83 100644 (file)
@@ -59,7 +59,8 @@ typedef struct _eo_accessor_def
 typedef struct _eo_property_def
 {
    const char *name;
-   Eina_List *params;
+   Eina_List *keys;
+   Eina_List *values;
    Eina_List *accessors;
 } Eo_Property_Def;
 
index 8a53001..22d20b5 100644 (file)
@@ -196,17 +196,17 @@ _eo_tokenizer_param_get(Eo_Tokenizer *toknz, char *p)
    s++;
 
    param->way = PARAM_IN;
-   if (strncmp(toknz->saved.tok, "in ", 3) == 0)
+   if (strncmp(toknz->saved.tok, "@in ", 3) == 0)
      {
         toknz->saved.tok += 3;
         param->way = PARAM_IN;
      }
-   else if (strncmp(toknz->saved.tok, "out ", 4) == 0)
+   else if (strncmp(toknz->saved.tok, "@out ", 4) == 0)
      {
         toknz->saved.tok += 4;
         param->way = PARAM_OUT;
      }
-   else if (strncmp(toknz->saved.tok, "inout ", 6) == 0)
+   else if (strncmp(toknz->saved.tok, "@inout ", 6) == 0)
      {
         toknz->saved.tok += 6;
         param->way = PARAM_INOUT;
@@ -290,7 +290,7 @@ static const char _eo_tokenizer_actions[] = {
        64, 1, 65, 1, 66, 1, 67, 1, 
        68, 1, 69, 1, 70, 1, 71, 1, 
        72, 1, 73, 1, 74, 1, 75, 1, 
-       76, 1, 77, 1, 78, 1, 81, 1, 
+       76, 1, 77, 1, 78, 1, 79, 1, 
        82, 1, 83, 1, 84, 1, 85, 1, 
        86, 1, 87, 1, 88, 1, 89, 1, 
        90, 1, 91, 1, 92, 1, 93, 1, 
@@ -300,22 +300,22 @@ static const char _eo_tokenizer_actions[] = {
        106, 1, 107, 1, 108, 1, 109, 1, 
        110, 1, 111, 1, 112, 1, 113, 1, 
        114, 1, 115, 1, 116, 1, 117, 1, 
-       118, 1, 119, 2, 0, 38, 2, 0
-       49, 2, 0, 58, 2, 0, 68, 2
-       0, 77, 2, 0, 89, 2, 0, 98
-       2, 0, 114, 2, 4, 44, 2, 5
-       39, 2, 6, 2, 2, 7, 40, 2
-       8, 53, 2, 10, 0, 2, 10, 69
-       2, 12, 84, 2, 13, 79, 2, 14
-       80, 2, 15, 0, 2, 15, 90, 2
-       16, 0, 2, 17, 0, 2, 17, 115
-       2, 18, 0, 2, 19, 0, 2, 19
-       2, 2, 21, 0, 2, 22, 0, 2, 
-       22, 2, 2, 23, 0, 2, 25, 0
-       2, 26, 0, 2, 26, 2, 2, 33
-       0, 2, 33, 115, 2, 36, 1, 2
-       36, 2, 2, 36, 3, 2, 36, 9
-       2, 36, 11
+       118, 1, 119, 1, 120, 2, 0, 38
+       2, 0, 49, 2, 0, 58, 2, 0
+       69, 2, 0, 78, 2, 0, 90, 2
+       0, 99, 2, 0, 115, 2, 4, 44
+       2, 5, 39, 2, 6, 2, 2, 7
+       40, 2, 8, 53, 2, 10, 0, 2
+       10, 70, 2, 12, 85, 2, 13, 80
+       2, 14, 81, 2, 15, 0, 2, 15
+       91, 2, 16, 0, 2, 17, 0, 2
+       17, 116, 2, 18, 0, 2, 19, 0
+       2, 19, 2, 2, 21, 0, 2, 22, 
+       0, 2, 22, 2, 2, 23, 0, 2
+       25, 0, 2, 26, 0, 2, 26, 2
+       2, 33, 0, 2, 33, 116, 2, 36
+       1, 2, 36, 2, 2, 36, 3, 2
+       36, 9, 2, 36, 11
 };
 
 static const short _eo_tokenizer_key_offsets[] = {
@@ -330,40 +330,39 @@ static const short _eo_tokenizer_key_offsets[] = {
        344, 356, 360, 361, 362, 372, 374, 377, 
        379, 382, 383, 395, 399, 400, 401, 411, 
        413, 416, 418, 421, 422, 423, 427, 428, 
-       429, 430, 431, 435, 436, 440, 442, 445, 
-       446, 457, 461, 464, 466, 469, 480, 482, 
-       485, 486, 487, 488, 489, 490, 493, 500, 
-       507, 515, 516, 517, 518, 519, 523, 527, 
-       528, 529, 530, 531, 532, 533, 534, 535, 
-       536, 540, 541, 542, 543, 544, 547, 554, 
-       565, 577, 581, 582, 583, 593, 595, 598, 
-       600, 603, 604, 615, 619, 622, 624, 627, 
-       638, 640, 643, 644, 645, 646, 647, 648, 
-       649, 650, 651, 652, 653, 654, 658, 659, 
-       660, 661, 662, 663, 664, 665, 666, 667, 
-       671, 672, 673, 674, 675, 679, 687, 695, 
-       707, 711, 723, 724, 725, 735, 737, 740, 
-       748, 749, 750, 751, 752, 753, 754, 755, 
-       756, 760, 768, 776, 789, 794, 798, 799, 
-       800, 801, 802, 803, 815, 820, 824, 833, 
-       837, 838, 839, 840, 841, 842, 846, 855, 
-       862, 869, 880, 884, 898, 908, 915, 927, 
-       932, 938, 943, 944, 945, 946, 947, 948, 
-       951, 958, 965, 973, 974, 978, 985, 993, 
-       997, 1002, 1003, 1004, 1014, 1016, 1019, 1029, 
-       1041, 1048, 1060, 1061, 1062, 1063, 1064, 1065, 
-       1066, 1067, 1068, 1069, 1070, 1071, 1072, 1076, 
-       1083, 1090, 1098, 1099, 1100, 1101, 1102, 1103, 
-       1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 
-       1115, 1119, 1127, 1130, 1132, 1133, 1134, 1135, 
-       1136, 1147, 1150, 1152, 1159, 1167, 1175, 1179, 
-       1179, 1180, 1189, 1192, 1194, 1205, 1209, 1209, 
-       1210, 1218, 1221, 1223, 1224, 1225, 1226, 1227, 
-       1236, 1239, 1241, 1248, 1249, 1258, 1261, 1263, 
-       1264, 1265, 1266, 1267, 1271, 1271, 1272, 1281, 
-       1284, 1286, 1293, 1294, 1306, 1309, 1311, 1312, 
-       1313, 1314, 1315, 1316, 1317, 1318, 1321, 1322, 
-       1323
+       429, 433, 434, 438, 439, 440, 441, 442, 
+       446, 448, 451, 452, 463, 467, 470, 472, 
+       475, 486, 488, 491, 492, 493, 494, 495, 
+       496, 497, 498, 499, 500, 503, 510, 517, 
+       525, 526, 527, 528, 529, 533, 534, 535, 
+       536, 537, 540, 547, 558, 570, 574, 575, 
+       576, 586, 588, 591, 593, 596, 597, 608, 
+       612, 615, 617, 620, 631, 633, 636, 637, 
+       638, 639, 640, 641, 642, 643, 644, 645, 
+       646, 647, 651, 652, 653, 654, 655, 656, 
+       657, 658, 659, 660, 664, 665, 666, 667, 
+       668, 672, 680, 688, 700, 704, 716, 717, 
+       718, 728, 730, 733, 741, 742, 743, 744, 
+       745, 746, 747, 748, 749, 753, 761, 769, 
+       782, 787, 791, 792, 793, 794, 795, 796, 
+       808, 813, 817, 826, 830, 831, 832, 833, 
+       834, 835, 839, 848, 855, 862, 873, 877, 
+       891, 901, 908, 920, 925, 931, 936, 937, 
+       938, 939, 940, 941, 944, 951, 958, 966, 
+       967, 971, 978, 986, 990, 995, 996, 997, 
+       1007, 1009, 1012, 1022, 1034, 1041, 1053, 1054, 
+       1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 
+       1063, 1064, 1065, 1069, 1076, 1083, 1091, 1092, 
+       1093, 1094, 1095, 1096, 1100, 1101, 1102, 1103, 
+       1104, 1105, 1106, 1107, 1108, 1112, 1120, 1123, 
+       1125, 1126, 1127, 1128, 1129, 1140, 1143, 1145, 
+       1152, 1160, 1168, 1172, 1172, 1173, 1182, 1185, 
+       1187, 1198, 1202, 1202, 1203, 1212, 1215, 1217, 
+       1218, 1219, 1220, 1221, 1222, 1231, 1234, 1236, 
+       1243, 1244, 1253, 1256, 1258, 1259, 1260, 1261, 
+       1262, 1266, 1266, 1267, 1276, 1279, 1281, 1288, 
+       1289, 1301, 1304, 1306, 1307, 1308, 1309, 1310, 
+       1311, 1312, 1313, 1316, 1317, 1318
 };
 
 static const char _eo_tokenizer_trans_keys[] = {
@@ -420,119 +419,118 @@ static const char _eo_tokenizer_trans_keys[] = {
        64, 10, 95, 0, 32, 48, 57, 65, 
        90, 97, 122, 10, 42, 10, 42, 47, 
        10, 42, 10, 42, 47, 10, 116, 10, 
-       123, 0, 32, 114, 97, 109, 115, 10, 
-       123, 0, 32, 116, 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, 65, 90, 97, 122, 
-       10, 42, 10, 42, 47, 10, 103, 97, 
-       99, 121, 9, 13, 32, 9, 13, 32, 
-       65, 90, 97, 122, 95, 48, 57, 65, 
-       90, 97, 122, 59, 95, 48, 57, 65, 
-       90, 97, 122, 106, 101, 99, 116, 9, 
-       13, 32, 58, 9, 13, 32, 99, 111, 
-       110, 115, 116, 59, 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, 42, 95, 48, 
-       57, 65, 90, 97, 122, 9, 13, 32, 
-       42, 59, 95, 48, 57, 65, 90, 97, 
-       122, 9, 13, 32, 47, 42, 64, 10, 
-       95, 0, 32, 48, 57, 65, 90, 97, 
-       122, 10, 42, 10, 42, 47, 10, 42, 
+       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, 65, 90, 97, 122, 10, 42, 
-       10, 42, 47, 10, 110, 115, 116, 114, 
-       117, 99, 116, 111, 114, 115, 10, 123, 
-       0, 32, 115, 116, 114, 117, 99, 116, 
-       111, 114, 115, 10, 123, 0, 32, 101, 
-       110, 116, 115, 10, 123, 0, 32, 10, 
-       125, 0, 32, 65, 90, 97, 122, 44, 
-       95, 48, 57, 65, 90, 97, 122, 10, 
-       44, 59, 95, 0, 32, 48, 57, 65, 
-       90, 97, 122, 10, 59, 0, 32, 9, 
-       10, 13, 32, 47, 125, 0, 31, 65, 
-       90, 97, 122, 42, 64, 10, 95, 0, 
+       10, 42, 47, 10, 110, 115, 116, 59, 
+       103, 97, 99, 121, 9, 13, 32, 9, 
+       13, 32, 65, 90, 97, 122, 95, 48, 
+       57, 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, 42, 95, 
+       48, 57, 65, 90, 97, 122, 9, 13, 
+       32, 42, 59, 95, 48, 57, 65, 90, 
+       97, 122, 9, 13, 32, 47, 42, 64, 
+       10, 95, 0, 32, 48, 57, 65, 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, 65, 90, 97, 122, 10, 
-       42, 10, 42, 47, 10, 125, 0, 32, 
-       65, 90, 97, 122, 112, 108, 101, 109, 
+       42, 10, 42, 47, 10, 110, 115, 116, 
+       114, 117, 99, 116, 111, 114, 115, 10, 
+       123, 0, 32, 115, 116, 114, 117, 99, 
+       116, 111, 114, 115, 10, 123, 0, 32, 
        101, 110, 116, 115, 10, 123, 0, 32, 
        10, 125, 0, 32, 65, 90, 97, 122, 
-       58, 95, 48, 57, 65, 90, 97, 122, 
-       10, 58, 59, 95, 123, 0, 32, 48, 
-       57, 65, 90, 97, 122, 10, 59, 123, 
-       0, 32, 10, 108, 0, 32, 101, 103, 
-       97, 99, 121, 9, 10, 13, 32, 59, 
-       123, 0, 31, 65, 90, 97, 122, 10, 
-       59, 123, 0, 32, 10, 125, 0, 32, 
-       10, 59, 125, 0, 32, 65, 90, 97, 
-       122, 10, 112, 0, 32, 97, 114, 97, 
-       109, 115, 10, 123, 0, 32, 10, 58, 
-       59, 0, 32, 65, 90, 97, 122, 9, 
-       13, 32, 65, 90, 97, 122, 95, 48, 
-       57, 65, 90, 97, 122, 10, 59, 95, 
+       44, 95, 48, 57, 65, 90, 97, 122, 
+       10, 44, 59, 95, 0, 32, 48, 57, 
+       65, 90, 97, 122, 10, 59, 0, 32, 
+       9, 10, 13, 32, 47, 125, 0, 31, 
+       65, 90, 97, 122, 42, 64, 10, 95, 
        0, 32, 48, 57, 65, 90, 97, 122, 
-       10, 59, 0, 32, 9, 10, 13, 32, 
-       47, 58, 59, 125, 0, 31, 65, 90, 
-       97, 122, 10, 58, 59, 125, 0, 32, 
-       65, 90, 97, 122, 95, 48, 57, 65, 
-       90, 97, 122, 9, 13, 32, 58, 59, 
-       95, 48, 57, 65, 90, 97, 122, 9, 
-       13, 32, 58, 59, 10, 59, 114, 125, 
-       0, 32, 10, 114, 125, 0, 32, 101, 
-       116, 117, 114, 110, 9, 13, 32, 9, 
-       13, 32, 65, 90, 97, 122, 95, 48, 
-       57, 65, 90, 97, 122, 58, 95, 48, 
-       57, 65, 90, 97, 122, 58, 65, 90, 
-       97, 122, 95, 48, 57, 65, 90, 97, 
-       122, 59, 95, 48, 57, 65, 90, 97, 
-       122, 10, 125, 0, 32, 10, 59, 125, 
-       0, 32, 42, 64, 10, 95, 0, 32, 
-       48, 57, 65, 90, 97, 122, 10, 42, 
-       10, 42, 47, 10, 58, 59, 125, 0, 
-       32, 65, 90, 97, 122, 9, 10, 13, 
-       32, 59, 123, 0, 31, 65, 90, 97, 
-       122, 95, 48, 57, 65, 90, 97, 122, 
-       10, 59, 95, 123, 0, 32, 48, 57, 
-       65, 90, 97, 122, 58, 103, 97, 99, 
-       121, 95, 112, 114, 101, 102, 105, 120, 
-       10, 58, 0, 32, 10, 0, 32, 65, 
+       10, 42, 10, 42, 47, 10, 125, 0, 
+       32, 65, 90, 97, 122, 112, 108, 101, 
+       109, 101, 110, 116, 115, 10, 123, 0, 
+       32, 10, 125, 0, 32, 65, 90, 97, 
+       122, 58, 95, 48, 57, 65, 90, 97, 
+       122, 10, 58, 59, 95, 123, 0, 32, 
+       48, 57, 65, 90, 97, 122, 10, 59, 
+       123, 0, 32, 10, 108, 0, 32, 101, 
+       103, 97, 99, 121, 9, 10, 13, 32, 
+       59, 123, 0, 31, 65, 90, 97, 122, 
+       10, 59, 123, 0, 32, 10, 125, 0, 
+       32, 10, 59, 125, 0, 32, 65, 90, 
+       97, 122, 10, 112, 0, 32, 97, 114, 
+       97, 109, 115, 10, 123, 0, 32, 10, 
+       58, 59, 0, 32, 65, 90, 97, 122, 
+       9, 13, 32, 65, 90, 97, 122, 95, 
+       48, 57, 65, 90, 97, 122, 10, 59, 
+       95, 0, 32, 48, 57, 65, 90, 97, 
+       122, 10, 59, 0, 32, 9, 10, 13, 
+       32, 47, 58, 59, 125, 0, 31, 65, 
+       90, 97, 122, 10, 58, 59, 125, 0, 
+       32, 65, 90, 97, 122, 95, 48, 57, 
+       65, 90, 97, 122, 9, 13, 32, 58, 
+       59, 95, 48, 57, 65, 90, 97, 122, 
+       9, 13, 32, 58, 59, 10, 59, 114, 
+       125, 0, 32, 10, 114, 125, 0, 32, 
+       101, 116, 117, 114, 110, 9, 13, 32, 
+       9, 13, 32, 65, 90, 97, 122, 95, 
+       48, 57, 65, 90, 97, 122, 58, 95, 
+       48, 57, 65, 90, 97, 122, 58, 65, 
        90, 97, 122, 95, 48, 57, 65, 90, 
        97, 122, 59, 95, 48, 57, 65, 90, 
-       97, 122, 116, 104, 111, 100, 115, 10, 
-       123, 0, 32, 111, 112, 101, 114, 116, 
-       105, 101, 115, 10, 123, 0, 32, 10, 
-       47, 97, 99, 105, 109, 0, 32, 10, 
-       0, 32, 42, 47, 98, 108, 110, 105, 
-       10, 47, 108, 114, 125, 0, 32, 65, 
-       90, 97, 122, 10, 0, 32, 42, 47, 
-       95, 48, 57, 65, 90, 97, 122, 95, 
-       101, 48, 57, 65, 90, 97, 122, 95, 
-       101, 48, 57, 65, 90, 97, 122, 9, 
-       13, 32, 47, 59, 10, 47, 125, 0, 
-       32, 65, 90, 97, 122, 10, 0, 32, 
-       42, 47, 9, 13, 32, 42, 95, 48, 
-       57, 65, 90, 97, 122, 9, 13, 32, 
-       47, 59, 10, 47, 103, 112, 115, 125, 
-       0, 32, 10, 0, 32, 42, 47, 101, 
-       97, 101, 59, 10, 47, 125, 0, 32, 
+       97, 122, 10, 125, 0, 32, 10, 59, 
+       125, 0, 32, 42, 64, 10, 95, 0, 
+       32, 48, 57, 65, 90, 97, 122, 10, 
+       42, 10, 42, 47, 10, 58, 59, 125, 
+       0, 32, 65, 90, 97, 122, 9, 10, 
+       13, 32, 59, 123, 0, 31, 65, 90, 
+       97, 122, 95, 48, 57, 65, 90, 97, 
+       122, 10, 59, 95, 123, 0, 32, 48, 
+       57, 65, 90, 97, 122, 58, 103, 97, 
+       99, 121, 95, 112, 114, 101, 102, 105, 
+       120, 10, 58, 0, 32, 10, 0, 32, 
+       65, 90, 97, 122, 95, 48, 57, 65, 
+       90, 97, 122, 59, 95, 48, 57, 65, 
+       90, 97, 122, 116, 104, 111, 100, 115, 
+       10, 123, 0, 32, 111, 112, 101, 114, 
+       116, 105, 101, 115, 10, 123, 0, 32, 
+       10, 47, 97, 99, 105, 109, 0, 32, 
+       10, 0, 32, 42, 47, 98, 108, 110, 
+       105, 10, 47, 108, 114, 125, 0, 32, 
+       65, 90, 97, 122, 10, 0, 32, 42, 
+       47, 95, 48, 57, 65, 90, 97, 122, 
+       95, 101, 48, 57, 65, 90, 97, 122, 
+       95, 101, 48, 57, 65, 90, 97, 122, 
+       9, 13, 32, 47, 59, 10, 47, 125, 
+       0, 32, 64, 90, 97, 122, 10, 0, 
+       32, 42, 47, 9, 13, 32, 42, 95, 
+       48, 57, 65, 90, 97, 122, 9, 13, 
+       32, 47, 59, 10, 47, 103, 107, 115, 
+       118, 125, 0, 32, 10, 0, 32, 42, 
+       47, 101, 101, 101, 97, 59, 10, 47, 
+       125, 0, 32, 65, 90, 97, 122, 10, 
+       0, 32, 42, 47, 95, 48, 57, 65, 
+       90, 97, 122, 59, 10, 47, 99, 108, 
+       112, 114, 125, 0, 32, 10, 0, 32, 
+       42, 47, 111, 101, 97, 101, 9, 13, 
+       32, 47, 59, 10, 47, 125, 0, 32, 
        65, 90, 97, 122, 10, 0, 32, 42, 
        47, 95, 48, 57, 65, 90, 97, 122, 
-       59, 10, 47, 108, 111, 112, 114, 125, 
-       0, 32, 10, 0, 32, 42, 47, 101, 
-       98, 97, 101, 9, 13, 32, 47, 59, 
-       10, 47, 125, 0, 32, 65, 90, 97, 
-       122, 10, 0, 32, 42, 47, 95, 48, 
-       57, 65, 90, 97, 122, 59, 10, 47, 
-       99, 100, 101, 105, 108, 109, 112, 125, 
-       0, 32, 10, 0, 32, 42, 47, 111, 
-       101, 118, 59, 109, 59, 101, 10, 0, 
-       32, 101, 114, 59, 0
+       59, 10, 47, 99, 100, 101, 105, 108, 
+       109, 112, 125, 0, 32, 10, 0, 32, 
+       42, 47, 111, 101, 118, 59, 109, 59, 
+       101, 10, 0, 32, 101, 114, 59, 0
 };
 
 static const char _eo_tokenizer_single_lengths[] = {
@@ -547,40 +545,39 @@ static const char _eo_tokenizer_single_lengths[] = {
        6, 4, 1, 1, 2, 2, 3, 2, 
        3, 1, 6, 4, 1, 1, 2, 2, 
        3, 2, 3, 1, 1, 2, 1, 1, 
-       1, 1, 2, 1, 2, 2, 3, 1, 
-       3, 2, 3, 2, 3, 3, 2, 3, 
-       1, 1, 1, 1, 1, 3, 3, 1, 
-       2, 1, 1, 1, 1, 4, 4, 1, 
-       1, 1, 1, 1, 1, 1, 1, 1, 
-       2, 1, 1, 1, 1, 3, 3, 5, 
-       6, 4, 1, 1, 2, 2, 3, 2, 
-       3, 1, 3, 2, 3, 2, 3, 3, 
-       2, 3, 1, 1, 1, 1, 1, 1, 
-       1, 1, 1, 1, 1, 2, 1, 1, 
-       1, 1, 1, 1, 1, 1, 1, 2, 
-       1, 1, 1, 1, 2, 2, 2, 4, 
-       2, 6, 1, 1, 2, 2, 3, 2, 
+       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, 1, 2, 
+       1, 1, 1, 1, 2, 1, 1, 1, 
+       1, 3, 3, 5, 6, 4, 1, 1, 
+       2, 2, 3, 2, 3, 1, 3, 2, 
+       3, 2, 3, 3, 2, 3, 1, 1, 
        1, 1, 1, 1, 1, 1, 1, 1, 
-       2, 2, 2, 5, 3, 2, 1, 1, 
-       1, 1, 1, 6, 3, 2, 3, 2, 
-       1, 1, 1, 1, 1, 2, 3, 3, 
-       1, 3, 2, 8, 4, 1, 6, 5, 
-       4, 3, 1, 1, 1, 1, 1, 3, 
-       3, 1, 2, 1, 0, 1, 2, 2, 
-       3, 1, 1, 2, 2, 3, 4, 6, 
-       1, 4, 1, 1, 1, 1, 1, 1, 
-       1, 1, 1, 1, 1, 1, 2, 1, 
-       1, 2, 1, 1, 1, 1, 1, 2, 
+       1, 2, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 2, 1, 1, 1, 1, 
+       2, 2, 2, 4, 2, 6, 1, 1, 
+       2, 2, 3, 2, 1, 1, 1, 1, 
+       1, 1, 1, 1, 2, 2, 2, 5, 
+       3, 2, 1, 1, 1, 1, 1, 6, 
+       3, 2, 3, 2, 1, 1, 1, 1, 
+       1, 2, 3, 3, 1, 3, 2, 8, 
+       4, 1, 6, 5, 4, 3, 1, 1, 
+       1, 1, 1, 3, 3, 1, 2, 1, 
+       0, 1, 2, 2, 3, 1, 1, 2, 
+       2, 3, 4, 6, 1, 4, 1, 1, 
        1, 1, 1, 1, 1, 1, 1, 1, 
-       2, 6, 1, 2, 1, 1, 1, 1, 
-       5, 1, 2, 1, 2, 2, 4, 0, 
-       1, 3, 1, 2, 5, 4, 0, 1, 
-       6, 1, 2, 1, 1, 1, 1, 3, 
-       1, 2, 1, 1, 7, 1, 2, 1, 
-       1, 1, 1, 4, 0, 1, 3, 1, 
-       2, 1, 1, 10, 1, 2, 1, 1, 
-       1, 1, 1, 1, 1, 1, 1, 1, 
-       1
+       1, 1, 2, 1, 1, 2, 1, 1, 
+       1, 1, 1, 2, 1, 1, 1, 1, 
+       1, 1, 1, 1, 2, 6, 1, 2, 
+       1, 1, 1, 1, 5, 1, 2, 1, 
+       2, 2, 4, 0, 1, 3, 1, 2, 
+       5, 4, 0, 1, 7, 1, 2, 1, 
+       1, 1, 1, 1, 3, 1, 2, 1, 
+       1, 7, 1, 2, 1, 1, 1, 1, 
+       4, 0, 1, 3, 1, 2, 1, 1, 
+       10, 1, 2, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 1, 1
 };
 
 static const char _eo_tokenizer_range_lengths[] = {
@@ -595,40 +592,39 @@ static const char _eo_tokenizer_range_lengths[] = {
        3, 0, 0, 0, 4, 0, 0, 0, 
        0, 0, 3, 0, 0, 0, 4, 0, 
        0, 0, 0, 0, 0, 1, 0, 0, 
-       0, 0, 1, 0, 1, 0, 0, 0, 
-       4, 1, 0, 0, 0, 4, 0, 0, 
-       0, 0, 0, 0, 0, 0, 2, 3, 
-       3, 0, 0, 0, 0, 0, 0, 0, 
+       1, 0, 1, 0, 0, 0, 0, 1, 
+       0, 0, 0, 4, 1, 0, 0, 0, 
+       4, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 2, 3, 3, 
+       0, 0, 0, 0, 1, 0, 0, 0, 
+       0, 0, 2, 3, 3, 0, 0, 0, 
+       4, 0, 0, 0, 0, 0, 4, 1, 
+       0, 0, 0, 4, 0, 0, 0, 0, 
        0, 0, 0, 0, 0, 0, 0, 0, 
-       1, 0, 0, 0, 0, 0, 2, 3, 
-       3, 0, 0, 0, 4, 0, 0, 0, 
-       0, 0, 4, 1, 0, 0, 0, 4, 
-       0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 1, 0, 0, 
-       0, 0, 0, 0, 0, 0, 0, 1, 
+       0, 1, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 1, 0, 0, 0, 0, 
+       1, 3, 3, 4, 1, 3, 0, 0, 
+       4, 0, 0, 3, 0, 0, 0, 0, 
        0, 0, 0, 0, 1, 3, 3, 4, 
-       1, 3, 0, 0, 4, 0, 0, 3, 
-       0, 0, 0, 0, 0, 0, 0, 0, 
-       1, 3, 3, 4, 1, 1, 0, 0, 
-       0, 0, 0, 3, 1, 1, 3, 1, 
-       0, 0, 0, 0, 0, 1, 3, 2, 
-       3, 4, 1, 3, 3, 3, 3, 0, 
-       1, 1, 0, 0, 0, 0, 0, 0, 
-       2, 3, 3, 0, 2, 3, 3, 1, 
-       1, 0, 0, 4, 0, 0, 3, 3, 
-       3, 4, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 1, 3, 
-       3, 3, 0, 0, 0, 0, 0, 1, 
-       0, 0, 0, 0, 0, 0, 0, 0, 
-       1, 1, 1, 0, 0, 0, 0, 0, 
-       3, 1, 0, 3, 3, 3, 0, 0, 
-       0, 3, 1, 0, 3, 0, 0, 0, 
        1, 1, 0, 0, 0, 0, 0, 3, 
-       1, 0, 3, 0, 1, 1, 0, 0, 
-       0, 0, 0, 0, 0, 0, 3, 1, 
-       0, 3, 0, 1, 1, 0, 0, 0, 
-       0, 0, 0, 0, 0, 1, 0, 0, 
-       0
+       1, 1, 3, 1, 0, 0, 0, 0, 
+       0, 1, 3, 2, 3, 4, 1, 3, 
+       3, 3, 3, 0, 1, 1, 0, 0, 
+       0, 0, 0, 0, 2, 3, 3, 0, 
+       2, 3, 3, 1, 1, 0, 0, 4, 
+       0, 0, 3, 3, 3, 4, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 1, 3, 3, 3, 0, 0, 
+       0, 0, 0, 1, 0, 0, 0, 0, 
+       0, 0, 0, 0, 1, 1, 1, 0, 
+       0, 0, 0, 0, 3, 1, 0, 3, 
+       3, 3, 0, 0, 0, 3, 1, 0, 
+       3, 0, 0, 0, 1, 1, 0, 0, 
+       0, 0, 0, 0, 3, 1, 0, 3, 
+       0, 1, 1, 0, 0, 0, 0, 0, 
+       0, 0, 0, 3, 1, 0, 3, 0, 
+       1, 1, 0, 0, 0, 0, 0, 0, 
+       0, 0, 1, 0, 0, 0
 };
 
 static const short _eo_tokenizer_index_offsets[] = {
@@ -643,40 +639,39 @@ static const short _eo_tokenizer_index_offsets[] = {
        326, 336, 341, 343, 345, 352, 355, 359, 
        362, 366, 368, 378, 383, 385, 387, 394, 
        397, 401, 404, 408, 410, 412, 416, 418, 
-       420, 422, 424, 428, 430, 434, 437, 441, 
-       443, 451, 455, 459, 462, 466, 474, 477, 
-       481, 483, 485, 487, 489, 491, 495, 501, 
-       506, 512, 514, 516, 518, 520, 525, 530, 
-       532, 534, 536, 538, 540, 542, 544, 546, 
-       548, 552, 554, 556, 558, 560, 564, 570, 
-       579, 589, 594, 596, 598, 605, 608, 612, 
-       615, 619, 621, 629, 633, 637, 640, 644, 
-       652, 655, 659, 661, 663, 665, 667, 669, 
-       671, 673, 675, 677, 679, 681, 685, 687, 
-       689, 691, 693, 695, 697, 699, 701, 703, 
-       707, 709, 711, 713, 715, 719, 725, 731, 
-       740, 744, 754, 756, 758, 765, 768, 772, 
-       778, 780, 782, 784, 786, 788, 790, 792, 
-       794, 798, 804, 810, 820, 825, 829, 831, 
-       833, 835, 837, 839, 849, 854, 858, 865, 
-       869, 871, 873, 875, 877, 879, 883, 890, 
-       896, 901, 909, 913, 925, 933, 938, 948, 
-       954, 960, 965, 967, 969, 971, 973, 975, 
-       979, 985, 990, 996, 998, 1001, 1006, 1012, 
-       1016, 1021, 1023, 1025, 1032, 1035, 1039, 1047, 
-       1057, 1062, 1071, 1073, 1075, 1077, 1079, 1081, 
-       1083, 1085, 1087, 1089, 1091, 1093, 1095, 1099, 
-       1104, 1109, 1115, 1117, 1119, 1121, 1123, 1125, 
-       1129, 1131, 1133, 1135, 1137, 1139, 1141, 1143, 
-       1145, 1149, 1157, 1160, 1163, 1165, 1167, 1169, 
-       1171, 1180, 1183, 1186, 1191, 1197, 1203, 1208, 
-       1209, 1211, 1218, 1221, 1224, 1233, 1238, 1239, 
-       1241, 1249, 1252, 1255, 1257, 1259, 1261, 1263, 
-       1270, 1273, 1276, 1281, 1283, 1292, 1295, 1298, 
-       1300, 1302, 1304, 1306, 1311, 1312, 1314, 1321, 
-       1324, 1327, 1332, 1334, 1346, 1349, 1352, 1354, 
-       1356, 1358, 1360, 1362, 1364, 1366, 1369, 1371, 
-       1373
+       420, 424, 426, 430, 432, 434, 436, 438, 
+       442, 445, 449, 451, 459, 463, 467, 470, 
+       474, 482, 485, 489, 491, 493, 495, 497, 
+       499, 501, 503, 505, 507, 511, 517, 522, 
+       528, 530, 532, 534, 536, 540, 542, 544, 
+       546, 548, 552, 558, 567, 577, 582, 584, 
+       586, 593, 596, 600, 603, 607, 609, 617, 
+       621, 625, 628, 632, 640, 643, 647, 649, 
+       651, 653, 655, 657, 659, 661, 663, 665, 
+       667, 669, 673, 675, 677, 679, 681, 683, 
+       685, 687, 689, 691, 695, 697, 699, 701, 
+       703, 707, 713, 719, 728, 732, 742, 744, 
+       746, 753, 756, 760, 766, 768, 770, 772, 
+       774, 776, 778, 780, 782, 786, 792, 798, 
+       808, 813, 817, 819, 821, 823, 825, 827, 
+       837, 842, 846, 853, 857, 859, 861, 863, 
+       865, 867, 871, 878, 884, 889, 897, 901, 
+       913, 921, 926, 936, 942, 948, 953, 955, 
+       957, 959, 961, 963, 967, 973, 978, 984, 
+       986, 989, 994, 1000, 1004, 1009, 1011, 1013, 
+       1020, 1023, 1027, 1035, 1045, 1050, 1059, 1061, 
+       1063, 1065, 1067, 1069, 1071, 1073, 1075, 1077, 
+       1079, 1081, 1083, 1087, 1092, 1097, 1103, 1105, 
+       1107, 1109, 1111, 1113, 1117, 1119, 1121, 1123, 
+       1125, 1127, 1129, 1131, 1133, 1137, 1145, 1148, 
+       1151, 1153, 1155, 1157, 1159, 1168, 1171, 1174, 
+       1179, 1185, 1191, 1196, 1197, 1199, 1206, 1209, 
+       1212, 1221, 1226, 1227, 1229, 1238, 1241, 1244, 
+       1246, 1248, 1250, 1252, 1254, 1261, 1264, 1267, 
+       1272, 1274, 1283, 1286, 1289, 1291, 1293, 1295, 
+       1297, 1302, 1303, 1305, 1312, 1315, 1318, 1323, 
+       1325, 1337, 1340, 1343, 1345, 1347, 1349, 1351, 
+       1353, 1355, 1357, 1360, 1362, 1364
 };
 
 static const short _eo_tokenizer_indicies[] = {
@@ -732,276 +727,275 @@ static const short _eo_tokenizer_indicies[] = {
        122, 116, 124, 125, 123, 124, 125, 126, 
        123, 129, 130, 128, 129, 130, 131, 128, 
        133, 132, 134, 127, 135, 136, 134, 127, 
-       137, 127, 138, 127, 139, 127, 140, 127, 
-       141, 142, 140, 127, 143, 127, 144, 145, 
-       143, 127, 148, 149, 147, 148, 149, 150, 
-       147, 152, 151, 154, 155, 156, 153, 155, 
-       155, 155, 146, 158, 159, 157, 146, 162, 
-       163, 164, 161, 162, 163, 161, 162, 163, 
-       165, 161, 166, 163, 167, 164, 167, 167, 
-       167, 161, 169, 170, 168, 169, 170, 171, 
-       168, 173, 172, 174, 160, 175, 160, 176, 
-       160, 177, 160, 178, 178, 178, 160, 178, 
-       178, 178, 179, 179, 160, 180, 180, 180, 
-       180, 160, 181, 180, 180, 180, 180, 160, 
-       182, 160, 183, 160, 184, 160, 185, 160, 
-       185, 185, 185, 186, 160, 186, 186, 186, 
-       187, 160, 188, 160, 189, 160, 190, 160, 
-       191, 160, 192, 160, 193, 160, 194, 160, 
-       195, 160, 196, 160, 197, 198, 196, 160, 
-       199, 160, 200, 160, 201, 160, 202, 160, 
-       203, 203, 203, 160, 203, 203, 203, 204, 
-       204, 160, 205, 205, 205, 205, 205, 205, 
-       205, 205, 160, 205, 205, 205, 205, 206, 
-       205, 205, 205, 205, 160, 208, 208, 208, 
-       209, 207, 210, 207, 211, 207, 212, 213, 
-       211, 213, 213, 213, 207, 215, 216, 214, 
-       215, 216, 217, 214, 220, 221, 219, 220, 
-       221, 222, 219, 224, 223, 226, 227, 228, 
-       225, 227, 227, 227, 218, 230, 231, 229, 
-       218, 234, 235, 236, 233, 234, 235, 233, 
-       234, 235, 237, 233, 238, 235, 239, 236, 
-       239, 239, 239, 233, 241, 242, 240, 241, 
-       242, 243, 240, 245, 244, 246, 232, 247, 
-       232, 248, 232, 249, 232, 250, 232, 251, 
-       232, 252, 232, 253, 232, 254, 232, 255, 
-       232, 256, 257, 255, 232, 258, 232, 259, 
-       232, 260, 232, 261, 232, 262, 232, 263, 
-       232, 264, 232, 265, 232, 266, 232, 267, 
-       268, 266, 232, 269, 232, 270, 232, 271, 
-       232, 272, 232, 273, 274, 272, 232, 275, 
-       277, 274, 276, 276, 232, 278, 278, 278, 
-       278, 278, 232, 280, 278, 281, 278, 279, 
-       278, 278, 278, 232, 283, 284, 282, 232, 
-       284, 275, 284, 284, 285, 277, 274, 276, 
-       276, 232, 286, 232, 287, 232, 288, 289, 
-       287, 289, 289, 289, 232, 291, 292, 290, 
-       291, 292, 293, 290, 295, 297, 294, 296, 
-       296, 232, 298, 232, 299, 232, 300, 232, 
-       301, 232, 302, 232, 303, 232, 304, 232, 
-       305, 232, 306, 307, 305, 232, 308, 310, 
-       307, 309, 309, 232, 312, 311, 311, 311, 
-       311, 232, 314, 312, 315, 311, 316, 313, 
-       311, 311, 311, 232, 318, 307, 319, 317, 
-       232, 320, 321, 319, 232, 322, 232, 323, 
-       232, 324, 232, 325, 232, 326, 232, 328, 
-       329, 328, 328, 330, 332, 327, 331, 331, 
-       232, 334, 335, 336, 333, 232, 337, 338, 
-       335, 232, 308, 307, 310, 307, 309, 309, 
-       232, 339, 340, 336, 232, 341, 232, 342, 
-       232, 343, 232, 344, 232, 345, 232, 346, 
-       347, 345, 232, 348, 349, 350, 347, 351, 
-       351, 232, 349, 349, 349, 352, 352, 232, 
-       353, 353, 353, 353, 232, 355, 356, 353, 
-       354, 353, 353, 353, 232, 358, 350, 357, 
-       232, 350, 360, 350, 350, 361, 349, 350, 
-       362, 359, 351, 351, 232, 360, 349, 350, 
-       362, 359, 351, 351, 232, 363, 363, 363, 
-       363, 232, 364, 364, 364, 365, 366, 363, 
-       363, 363, 363, 232, 367, 367, 367, 349, 
-       350, 232, 369, 368, 370, 371, 368, 232, 
-       369, 370, 371, 368, 232, 372, 232, 373, 
-       232, 374, 232, 375, 232, 376, 232, 377, 
-       377, 377, 232, 377, 377, 377, 378, 378, 
-       232, 379, 379, 379, 379, 232, 380, 379, 
-       379, 379, 379, 232, 381, 232, 382, 382, 
-       232, 383, 383, 383, 383, 232, 384, 383, 
-       383, 383, 383, 232, 386, 371, 385, 232, 
-       337, 335, 338, 335, 232, 387, 232, 388, 
-       232, 389, 390, 388, 390, 390, 390, 232, 
-       392, 393, 391, 392, 393, 394, 391, 396, 
-       397, 398, 400, 395, 399, 399, 232, 401, 
-       334, 401, 401, 335, 336, 333, 402, 402, 
-       232, 403, 403, 403, 403, 232, 405, 406, 
-       403, 407, 404, 403, 403, 403, 232, 311, 
-       232, 408, 232, 409, 232, 410, 232, 411, 
-       232, 412, 232, 413, 232, 414, 232, 415, 
-       232, 416, 232, 417, 232, 418, 232, 419, 
-       420, 418, 232, 421, 420, 422, 422, 232, 
-       423, 423, 423, 423, 232, 424, 423, 423, 
-       423, 423, 232, 425, 232, 426, 232, 427, 
-       232, 428, 232, 429, 232, 430, 431, 429, 
-       232, 432, 232, 433, 232, 434, 232, 435, 
-       232, 436, 232, 437, 232, 438, 232, 439, 
-       232, 440, 441, 439, 232, 444, 445, 446, 
-       447, 448, 449, 443, 442, 444, 443, 450, 
-       1, 5, 451, 452, 451, 453, 451, 454, 
-       451, 455, 451, 458, 459, 461, 462, 463, 
-       457, 460, 460, 456, 458, 457, 464, 466, 
-       69, 465, 72, 72, 72, 72, 465, 72, 
-       467, 72, 72, 72, 465, 72, 468, 72, 
-       72, 72, 465, 97, 97, 97, 98, 469, 
-       470, 472, 471, 475, 476, 478, 474, 477, 
-       477, 473, 475, 474, 479, 108, 112, 480, 
-       114, 114, 114, 114, 114, 114, 114, 114, 
-       480, 117, 117, 117, 118, 481, 482, 484, 
-       483, 487, 488, 489, 490, 491, 492, 486, 
-       485, 487, 486, 493, 128, 132, 494, 495, 
-       494, 496, 494, 497, 494, 499, 498, 502, 
-       503, 505, 501, 504, 504, 500, 502, 501, 
-       506, 147, 151, 507, 155, 155, 155, 155, 
-       507, 509, 508, 512, 513, 514, 515, 516, 
-       517, 518, 511, 510, 512, 511, 519, 521, 
-       172, 520, 522, 520, 523, 520, 524, 520, 
-       525, 520, 208, 208, 208, 209, 526, 527, 
-       529, 528, 532, 533, 535, 531, 534, 534, 
-       530, 532, 531, 536, 219, 223, 537, 227, 
-       227, 227, 227, 537, 539, 538, 542, 543, 
-       544, 545, 546, 547, 548, 549, 550, 551, 
-       541, 540, 542, 541, 552, 554, 244, 553, 
-       555, 553, 556, 553, 557, 553, 559, 558, 
-       560, 553, 562, 561, 563, 553, 566, 565, 
-       564, 567, 553, 568, 553, 570, 569, 0
+       137, 127, 138, 127, 139, 140, 138, 127, 
+       141, 127, 142, 143, 141, 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, 188, 188, 188, 
+       188, 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, 164, 202, 
+       202, 202, 202, 203, 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, 229, 258, 
+       229, 259, 229, 260, 229, 261, 229, 262, 
+       229, 263, 229, 264, 265, 263, 229, 266, 
+       229, 267, 229, 268, 229, 269, 229, 270, 
+       271, 269, 229, 272, 274, 271, 273, 273, 
+       229, 275, 275, 275, 275, 275, 229, 277, 
+       275, 278, 275, 276, 275, 275, 275, 229, 
+       280, 281, 279, 229, 281, 272, 281, 281, 
+       282, 274, 271, 273, 273, 229, 283, 229, 
+       284, 229, 285, 286, 284, 286, 286, 286, 
+       229, 288, 289, 287, 288, 289, 290, 287, 
+       292, 294, 291, 293, 293, 229, 295, 229, 
+       296, 229, 297, 229, 298, 229, 299, 229, 
+       300, 229, 301, 229, 302, 229, 303, 304, 
+       302, 229, 305, 307, 304, 306, 306, 229, 
+       309, 308, 308, 308, 308, 229, 311, 309, 
+       312, 308, 313, 310, 308, 308, 308, 229, 
+       315, 304, 316, 314, 229, 317, 318, 316, 
+       229, 319, 229, 320, 229, 321, 229, 322, 
+       229, 323, 229, 325, 326, 325, 325, 327, 
+       329, 324, 328, 328, 229, 331, 332, 333, 
+       330, 229, 334, 335, 332, 229, 305, 304, 
+       307, 304, 306, 306, 229, 336, 337, 333, 
+       229, 338, 229, 339, 229, 340, 229, 341, 
+       229, 342, 229, 343, 344, 342, 229, 345, 
+       346, 347, 344, 348, 348, 229, 346, 346, 
+       346, 349, 349, 229, 350, 350, 350, 350, 
+       229, 352, 353, 350, 351, 350, 350, 350, 
+       229, 355, 347, 354, 229, 347, 357, 347, 
+       347, 358, 346, 347, 359, 356, 348, 348, 
+       229, 357, 346, 347, 359, 356, 348, 348, 
+       229, 360, 360, 360, 360, 229, 361, 361, 
+       361, 362, 363, 360, 360, 360, 360, 229, 
+       364, 364, 364, 346, 347, 229, 366, 365, 
+       367, 368, 365, 229, 366, 367, 368, 365, 
+       229, 369, 229, 370, 229, 371, 229, 372, 
+       229, 373, 229, 374, 374, 374, 229, 374, 
+       374, 374, 375, 375, 229, 376, 376, 376, 
+       376, 229, 377, 376, 376, 376, 376, 229, 
+       378, 229, 379, 379, 229, 380, 380, 380, 
+       380, 229, 381, 380, 380, 380, 380, 229, 
+       383, 368, 382, 229, 334, 332, 335, 332, 
+       229, 384, 229, 385, 229, 386, 387, 385, 
+       387, 387, 387, 229, 389, 390, 388, 389, 
+       390, 391, 388, 393, 394, 395, 397, 392, 
+       396, 396, 229, 398, 331, 398, 398, 332, 
+       333, 330, 399, 399, 229, 400, 400, 400, 
+       400, 229, 402, 403, 400, 404, 401, 400, 
+       400, 400, 229, 308, 229, 405, 229, 406, 
+       229, 407, 229, 408, 229, 409, 229, 410, 
+       229, 411, 229, 412, 229, 413, 229, 414, 
+       229, 415, 229, 416, 417, 415, 229, 418, 
+       417, 419, 419, 229, 420, 420, 420, 420, 
+       229, 421, 420, 420, 420, 420, 229, 422, 
+       229, 423, 229, 424, 229, 425, 229, 426, 
+       229, 427, 428, 426, 229, 429, 229, 430, 
+       229, 431, 229, 432, 229, 433, 229, 434, 
+       229, 435, 229, 436, 229, 437, 438, 436, 
+       229, 441, 442, 443, 444, 445, 446, 440, 
+       439, 441, 440, 447, 1, 5, 448, 449, 
+       448, 450, 448, 451, 448, 452, 448, 455, 
+       456, 458, 459, 460, 454, 457, 457, 453, 
+       455, 454, 461, 463, 69, 462, 72, 72, 
+       72, 72, 462, 72, 464, 72, 72, 72, 
+       462, 72, 465, 72, 72, 72, 462, 97, 
+       97, 97, 98, 466, 467, 469, 468, 472, 
+       473, 475, 471, 474, 474, 470, 472, 471, 
+       476, 108, 112, 477, 114, 114, 114, 114, 
+       114, 114, 114, 114, 477, 117, 117, 117, 
+       118, 478, 479, 481, 480, 484, 485, 486, 
+       487, 488, 489, 490, 483, 482, 484, 483, 
+       491, 128, 132, 492, 493, 492, 494, 492, 
+       495, 492, 496, 492, 498, 497, 501, 502, 
+       504, 500, 503, 503, 499, 501, 500, 505, 
+       151, 155, 506, 159, 159, 159, 159, 506, 
+       508, 507, 511, 512, 513, 514, 515, 516, 
+       517, 510, 509, 511, 510, 518, 520, 176, 
+       519, 521, 519, 522, 519, 523, 519, 524, 
+       519, 205, 205, 205, 206, 525, 526, 528, 
+       527, 531, 532, 534, 530, 533, 533, 529, 
+       531, 530, 535, 216, 220, 536, 224, 224, 
+       224, 224, 536, 538, 537, 541, 542, 543, 
+       544, 545, 546, 547, 548, 549, 550, 540, 
+       539, 541, 540, 551, 553, 241, 552, 554, 
+       552, 555, 552, 556, 552, 558, 557, 559, 
+       552, 561, 560, 562, 552, 565, 564, 563, 
+       566, 552, 567, 552, 569, 568, 0
 };
 
 static const short _eo_tokenizer_trans_targs[] = {
-       289, 0, 0, 1, 289, 2, 289, 4, 
+       285, 0, 0, 1, 285, 2, 285, 4, 
        5, 6, 7, 8, 9, 10, 10, 11, 
-       12, 13, 14, 13, 15, 289, 13, 13, 
-       289, 14, 15, 16, 17, 13, 13, 289
+       12, 13, 14, 13, 15, 285, 13, 13, 
+       285, 14, 15, 16, 17, 13, 13, 285
        18, 19, 19, 16, 20, 19, 19, 20, 
        20, 22, 23, 24, 10, 26, 27, 28, 
        29, 30, 31, 32, 10, 34, 35, 36, 
-       10, 296, 38, 38, 39, 40, 296, 40, 
-       41, 41, 41, 42, 296, 43, 296, 45, 
-       44, 46, 47, 48, 47, 48, 48, 296
-       50, 51, 52, 53, 54, 55, 56, 296
-       58, 59, 60, 61, 62, 63, 64, 302
-       296, 65, 66, 67, 68, 68, 69, 69, 
-       69, 70, 303, 305, 71, 71, 72, 305
-       73, 305, 74, 309, 305, 75, 76, 77, 
-       78, 78, 79, 79, 79, 80, 310, 312
-       81, 81, 82, 312, 83, 312, 85, 85, 
-       312, 87, 88, 89, 90, 90, 312, 92
-       92, 312, 319, 93, 93, 94, 319, 95
-       319, 97, 97, 96, 319, 97, 97, 319, 
-       324, 99, 99, 100, 101, 324, 101, 102
-       102, 102, 103, 324, 104, 324, 106, 107
-       108, 109, 110, 111, 112, 324, 114, 115
-       116, 117, 118, 119, 120, 121, 122, 123
-       324, 125, 126, 127, 128, 128, 324, 130
-       131, 132, 133, 134, 135, 136, 331, 324
-       137, 138, 139, 140, 140, 141, 141, 141, 
-       142, 332, 334, 143, 143, 144, 334, 145
-       334, 147, 147, 146, 334, 147, 147, 334
-       339, 149, 149, 150, 151, 339, 151, 152
-       152, 152, 153, 339, 154, 339, 156, 157
-       158, 159, 160, 161, 162, 163, 164, 165
-       165, 339, 167, 168, 169, 170, 171, 172
-       173, 174, 175, 175, 339, 177, 178, 179
-       180, 180, 181, 181, 182, 345, 183, 184
-       184, 185, 184, 184, 185, 186, 187, 188
-       188, 189, 189, 189, 190, 191, 181, 181
-       182, 345, 193, 194, 195, 196, 197, 198
-       199, 200, 200, 201, 201, 202, 347, 203
-       258, 204, 204, 201, 205, 204, 204, 205
-       205, 206, 207, 208, 209, 210, 211, 212
-       255, 212, 213, 256, 215, 212, 212, 213
-       215, 213, 214, 215, 216, 217, 218, 219
-       220, 221, 221, 222, 222, 223, 227, 229
-       224, 225, 226, 226, 227, 226, 226, 228, 
-       228, 249, 232, 230, 231, 223, 227, 231
-       233, 233, 234, 248, 235, 236, 237, 238
-       239, 240, 241, 242, 243, 244, 245, 246
-       247, 247, 247, 250, 251, 251, 252, 252
-       252, 253, 254, 228, 228, 223, 227, 229
-       232, 255, 256, 257, 212, 212, 213, 215
-       260, 261, 262, 263, 264, 265, 266, 267
-       268, 269, 270, 270, 271, 271, 272, 273
-       349, 275, 276, 277, 278, 279, 279, 339, 
-       281, 282, 283, 284, 285, 286, 287, 288
-       288, 339, 289, 290, 290, 291, 292, 293
-       294, 295, 289, 289, 3, 21, 25, 33, 
-       296, 297, 297, 298, 299, 300, 301, 304
-       296, 296, 37, 49, 57, 296, 296, 296
-       296, 305, 306, 306, 307, 308, 311, 305
-       305, 305, 305, 305, 305, 312, 313, 313
-       314, 315, 316, 317, 318, 312, 312, 84
-       86, 91, 312, 312, 319, 320, 320, 321
-       322, 323, 319, 319, 319, 319, 324, 325
-       325, 326, 327, 328, 329, 330, 333, 324
-       324, 98, 105, 113, 124, 129, 324, 324
-       324, 324, 334, 335, 335, 336, 337, 338
-       334, 334, 334, 334, 339, 340, 340, 341
-       342, 343, 344, 346, 348, 350, 351, 352
-       339, 339, 148, 155, 166, 176, 339, 339
-       192, 339, 339, 259, 339, 349, 349, 274
-       280, 339, 339
+       10, 292, 38, 38, 39, 40, 292, 40, 
+       41, 41, 41, 42, 292, 43, 292, 45, 
+       44, 46, 47, 48, 47, 48, 48, 292
+       50, 51, 52, 53, 54, 55, 56, 292
+       58, 59, 60, 61, 62, 63, 64, 298
+       292, 65, 66, 67, 68, 68, 69, 69, 
+       69, 70, 299, 301, 71, 71, 72, 301
+       73, 301, 74, 305, 301, 75, 76, 77, 
+       78, 78, 79, 79, 79, 80, 306, 308
+       81, 81, 82, 308, 83, 308, 85, 85, 
+       308, 87, 88, 88, 308, 90, 90, 308
+       92, 93, 94, 95, 95, 308, 316, 96
+       96, 97, 316, 98, 316, 100, 100, 99, 
+       316, 100, 100, 316, 321, 102, 102, 103
+       104, 321, 104, 105, 105, 105, 106, 321
+       107, 321, 109, 110, 111, 321, 113, 114
+       115, 116, 117, 118, 119, 321, 121, 122
+       123, 124, 124, 321, 126, 127, 128, 129
+       130, 131, 132, 328, 321, 133, 134, 135
+       136, 136, 137, 137, 137, 138, 329, 331, 
+       139, 139, 140, 331, 141, 331, 143, 143
+       142, 331, 143, 143, 331, 336, 145, 145
+       146, 147, 336, 147, 148, 148, 148, 149
+       336, 150, 336, 152, 153, 154, 155, 156
+       157, 158, 159, 160, 161, 161, 336, 163
+       164, 165, 166, 167, 168, 169, 170, 171
+       171, 336, 173, 174, 175, 176, 176, 177
+       177, 178, 342, 179, 180, 180, 181, 180
+       180, 181, 182, 183, 184, 184, 185, 185
+       185, 186, 187, 177, 177, 178, 342, 189
+       190, 191, 192, 193, 194, 195, 196, 196
+       197, 197, 198, 344, 199, 254, 200, 200
+       197, 201, 200, 200, 201, 201, 202, 203
+       204, 205, 206, 207, 208, 251, 208, 209
+       252, 211, 208, 208, 209, 211, 209, 210
+       211, 212, 213, 214, 215, 216, 217, 217
+       218, 218, 219, 223, 225, 220, 221, 222
+       222, 223, 222, 222, 224, 224, 245, 228, 
+       226, 227, 219, 223, 227, 229, 229, 230
+       244, 231, 232, 233, 234, 235, 236, 237
+       238, 239, 240, 241, 242, 243, 243, 243
+       246, 247, 247, 248, 248, 248, 249, 250
+       224, 224, 219, 223, 225, 228, 251, 252
+       253, 208, 208, 209, 211, 256, 257, 258
+       259, 260, 261, 262, 263, 264, 265, 266
+       266, 267, 267, 268, 269, 346, 271, 272
+       273, 274, 275, 275, 336, 277, 278, 279, 
+       280, 281, 282, 283, 284, 284, 336, 285
+       286, 286, 287, 288, 289, 290, 291, 285
+       285, 3, 21, 25, 33, 292, 293, 293, 
+       294, 295, 296, 297, 300, 292, 292, 37
+       49, 57, 292, 292, 292, 292, 301, 302
+       302, 303, 304, 307, 301, 301, 301, 301
+       301, 301, 308, 309, 309, 310, 311, 312
+       313, 314, 315, 308, 308, 84, 86, 89
+       91, 308, 308, 316, 317, 317, 318, 319
+       320, 316, 316, 316, 316, 321, 322, 322
+       323, 324, 325, 326, 327, 330, 321, 321
+       101, 108, 112, 120, 125, 321, 321, 321
+       321, 331, 332, 332, 333, 334, 335, 331
+       331, 331, 331, 336, 337, 337, 338, 339
+       340, 341, 343, 345, 347, 348, 349, 336
+       336, 144, 151, 162, 172, 336, 336, 188
+       336, 336, 255, 336, 346, 346, 270, 276
+       336, 336
 };
 
 static const short _eo_tokenizer_trans_actions[] = {
-       209, 0, 1, 0, 199, 0, 232, 0, 
+       211, 0, 1, 0, 201, 0, 234, 0, 
        0, 0, 0, 0, 0, 39, 0, 3, 
-       0, 45, 45, 310, 45, 313, 0, 1, 
-       201, 0, 0, 0, 3, 13, 274, 277
-       0, 11, 271, 11, 11, 0, 1, 0, 
+       0, 45, 45, 312, 45, 315, 0, 1, 
+       203, 0, 0, 0, 3, 13, 276, 279
+       0, 11, 273, 11, 11, 0, 1, 0, 
        1, 0, 0, 0, 37, 0, 0, 0, 
        0, 0, 0, 0, 43, 0, 0, 0, 
        41, 71, 0, 1, 0, 0, 55, 1, 
-       3, 0, 1, 0, 53, 0, 211, 0, 
-       0, 0, 5, 241, 0, 3, 0, 244
-       0, 0, 0, 0, 0, 3, 0, 238
-       0, 0, 0, 0, 0, 3, 0, 322
+       3, 0, 1, 0, 53, 0, 213, 0, 
+       0, 0, 5, 243, 0, 3, 0, 246
+       0, 0, 0, 0, 0, 3, 0, 240
+       0, 0, 0, 0, 0, 3, 0, 324
        69, 0, 0, 0, 0, 1, 3, 0, 
        1, 0, 0, 89, 0, 1, 0, 73, 
-       0, 214, 0, 325, 87, 0, 0, 0, 
-       0, 1, 3, 0, 1, 0, 0, 109
-       0, 1, 0, 91, 0, 217, 0, 1, 
-       93, 0, 0, 0, 0, 1, 97, 0
-       1, 95, 125, 0, 1, 0, 111, 0, 
-       220, 7, 250, 0, 253, 0, 1, 113
-       147, 0, 1, 0, 0, 129, 1, 3
-       0, 1, 0, 127, 0, 223, 0, 0
-       0, 0, 0, 3, 0, 259, 0, 0, 
-       0, 0, 0, 0, 0, 0, 0, 0, 
-       262, 0, 0, 0, 0, 1, 131, 0, 
-       0, 0, 0, 0, 3, 0, 328, 145
-       0, 0, 0, 0, 1, 3, 0, 1
-       0, 0, 163, 0, 1, 0, 149, 0
-       226, 9, 265, 0, 268, 0, 1, 151, 
-       197, 0, 1, 0, 0, 167, 1, 3
-       0, 1, 0, 165, 0, 229, 0, 0, 
-       0, 0, 0, 0, 0, 0, 0, 0, 
-       1, 173, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 1, 175, 0, 0, 0, 
-       0, 1, 0, 1, 3, 0, 0, 15
-       280, 15, 0, 1, 0, 0, 0, 0, 
-       1, 3, 0, 1, 0, 0, 17, 283
-       286, 17, 0, 0, 0, 0, 0, 0
-       0, 0, 1, 0, 1, 3, 0, 0
-       0, 21, 289, 21, 21, 0, 1, 0, 
-       1, 0, 0, 0, 0, 0, 0, 23, 
-       23, 292, 23, 295, 23, 0, 1, 0, 
-       0, 1, 0, 1, 0, 0, 0, 0
-       0, 0, 1, 0, 1, 0, 0, 3
-       3, 0, 29, 301, 29, 0, 1, 0, 
-       1, 0, 0, 0, 27, 27, 27, 0, 
-       0, 1, 0, 0, 0, 0, 0, 0
-       0, 0, 3, 0, 33, 0, 3, 0
-       35, 0, 1, 0, 0, 1, 3, 0, 
-       1, 0, 0, 31, 304, 31, 31, 307
-       31, 0, 3, 0, 25, 298, 25, 25
-       0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 1, 0, 1, 3, 0, 
-       19, 0, 0, 0, 0, 0, 1, 179
-       0, 0, 0, 0, 0, 0, 0, 0
-       1, 177, 203, 0, 1, 316, 51, 51
-       51, 51, 205, 207, 0, 0, 0, 0
-       59, 0, 1, 316, 319, 319, 319, 0, 
-       61, 67, 0, 0, 0, 63, 235, 65
-       57, 77, 0, 1, 316, 319, 0, 79, 
-       85, 81, 247, 83, 75, 101, 0, 1, 
-       316, 51, 51, 51, 0, 103, 107, 0, 
-       0, 0, 105, 99, 117, 0, 1, 316
-       319, 0, 119, 123, 121, 115, 135, 0
-       1, 316, 51, 51, 51, 51, 0, 137
-       143, 0, 0, 0, 0, 0, 139, 256
-       141, 133, 155, 0, 1, 316, 319, 0
-       157, 161, 159, 153, 183, 0, 1, 316
-       51, 51, 51, 51, 51, 51, 51, 0
-       185, 195, 0, 0, 0, 0, 191, 171
-       0, 189, 169, 0, 187, 0, 1, 0, 
-       0, 193, 181
+       0, 216, 0, 327, 87, 0, 0, 0, 
+       0, 1, 3, 0, 1, 0, 0, 111
+       0, 1, 0, 91, 0, 219, 0, 1, 
+       93, 0, 0, 1, 97, 0, 1, 95
+       0, 0, 0, 0, 1, 99, 127, 0, 
+       1, 0, 113, 0, 222, 7, 252, 0
+       255, 0, 1, 115, 149, 0, 1, 0
+       0, 131, 1, 3, 0, 1, 0, 129
+       0, 225, 0, 0, 0, 264, 0, 0, 
+       0, 0, 0, 3, 0, 261, 0, 0, 
+       0, 0, 1, 133, 0, 0, 0, 0, 
+       0, 3, 0, 330, 147, 0, 0, 0
+       0, 1, 3, 0, 1, 0, 0, 165
+       0, 1, 0, 151, 0, 228, 9, 267
+       0, 270, 0, 1, 153, 199, 0, 1, 
+       0, 0, 169, 1, 3, 0, 1, 0
+       167, 0, 231, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 1, 175, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       1, 177, 0, 0, 0, 0, 1, 0, 
+       1, 3, 0, 0, 15, 282, 15, 0
+       1, 0, 0, 0, 0, 1, 3, 0, 
+       1, 0, 0, 17, 285, 288, 17, 0
+       0, 0, 0, 0, 0, 0, 0, 1
+       0, 1, 3, 0, 0, 0, 21, 291
+       21, 21, 0, 1, 0, 1, 0, 0, 
+       0, 0, 0, 0, 23, 23, 294, 23, 
+       297, 23, 0, 1, 0, 0, 1, 0, 
+       1, 0, 0, 0, 0, 0, 0, 1
+       0, 1, 0, 0, 3, 3, 0, 29
+       303, 29, 0, 1, 0, 1, 0, 0, 
+       0, 27, 27, 27, 0, 0, 1, 0, 
+       0, 0, 0, 0, 0, 0, 0, 3
+       0, 33, 0, 3, 0, 35, 0, 1
+       0, 0, 1, 3, 0, 1, 0, 0, 
+       31, 306, 31, 31, 309, 31, 0, 3
+       0, 25, 300, 25, 25, 0, 0, 0
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       1, 0, 1, 3, 0, 19, 0, 0, 
+       0, 0, 0, 1, 181, 0, 0, 0
+       0, 0, 0, 0, 0, 1, 179, 205
+       0, 1, 318, 51, 51, 51, 51, 207
+       209, 0, 0, 0, 0, 59, 0, 1
+       318, 321, 321, 321, 0, 61, 67, 0, 
+       0, 0, 63, 237, 65, 57, 77, 0
+       1, 318, 321, 0, 79, 85, 81, 249, 
+       83, 75, 103, 0, 1, 318, 51, 51, 
+       51, 51, 0, 105, 109, 0, 0, 0, 
+       0, 107, 101, 119, 0, 1, 318, 321
+       0, 121, 125, 123, 117, 137, 0, 1
+       318, 51, 51, 51, 51, 0, 139, 145
+       0, 0, 0, 0, 0, 141, 258, 143
+       135, 157, 0, 1, 318, 321, 0, 159
+       163, 161, 155, 185, 0, 1, 318, 51
+       51, 51, 51, 51, 51, 51, 0, 187
+       197, 0, 0, 0, 0, 193, 173, 0
+       191, 171, 0, 189, 0, 1, 0, 0, 
+       195, 183
 };
 
 static const short _eo_tokenizer_to_state_actions[] = {
@@ -1040,16 +1034,15 @@ 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, 
-       0, 47, 0, 0, 0, 0, 0, 0, 
-       47, 0, 0, 0, 0, 0, 0, 0, 
-       0, 47, 0, 0, 0, 0, 0, 0, 
-       47, 0, 0, 0, 0, 0, 0, 47, 
+       0, 0, 0, 0, 0, 47, 0, 0, 
+       0, 0, 0, 0, 47, 0, 0, 0, 
+       0, 0, 0, 0, 0, 47, 0, 0, 
        0, 0, 0, 0, 47, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 47, 0, 
+       0, 0, 0, 0, 47, 0, 0, 0, 
+       0, 47, 0, 0, 0, 0, 0, 0, 
        0, 0, 0, 47, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 0, 0, 
-       0
+       47, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0
 };
 
 static const short _eo_tokenizer_from_state_actions[] = {
@@ -1088,16 +1081,15 @@ 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, 
-       0, 49, 0, 0, 0, 0, 0, 0, 
-       49, 0, 0, 0, 0, 0, 0, 0, 
-       0, 49, 0, 0, 0, 0, 0, 0, 
-       49, 0, 0, 0, 0, 0, 0, 49, 
+       0, 0, 0, 0, 0, 49, 0, 0, 
+       0, 0, 0, 0, 49, 0, 0, 0, 
+       0, 0, 0, 0, 0, 49, 0, 0, 
+       0, 0, 0, 0, 49, 0, 0, 0, 
        0, 0, 0, 0, 49, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 49, 0, 
+       0, 49, 0, 0, 0, 0, 0, 0, 
        0, 0, 0, 49, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 0, 0, 
-       0
+       49, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0
 };
 
 static const short _eo_tokenizer_eof_trans[] = {
@@ -1112,57 +1104,56 @@ static const short _eo_tokenizer_eof_trans[] = {
        58, 97, 97, 97, 97, 97, 97, 108, 
        108, 108, 108, 117, 117, 117, 117, 117, 
        117, 128, 128, 128, 128, 128, 128, 128, 
-       128, 128, 128, 128, 128, 147, 147, 147, 
-       147, 147, 161, 161, 161, 161, 161, 161, 
-       161, 161, 161, 161, 161, 161, 161, 161, 
-       161, 161, 161, 161, 161, 161, 161, 161, 
-       161, 161, 161, 161, 161, 161, 161, 161, 
-       161, 161, 161, 161, 161, 161, 161, 161, 
-       161, 208, 208, 208, 208, 208, 208, 219, 
-       219, 219, 219, 219, 233, 233, 233, 233, 
-       233, 233, 233, 233, 233, 233, 233, 233, 
-       233, 233, 233, 233, 233, 233, 233, 233, 
-       233, 233, 233, 233, 233, 233, 233, 233, 
-       233, 233, 233, 233, 233, 233, 233, 233, 
-       233, 233, 233, 233, 233, 233, 233, 233, 
-       233, 233, 233, 233, 233, 233, 233, 233, 
-       233, 233, 233, 233, 233, 233, 233, 233, 
-       233, 233, 233, 233, 233, 233, 233, 233, 
-       233, 233, 233, 233, 233, 233, 233, 233, 
-       233, 233, 233, 233, 233, 233, 233, 233, 
-       233, 233, 233, 233, 233, 233, 233, 233, 
-       233, 233, 233, 233, 233, 233, 233, 233, 
-       233, 233, 233, 233, 233, 233, 233, 233, 
-       233, 233, 233, 233, 233, 233, 233, 233, 
-       233, 233, 233, 233, 233, 233, 233, 233, 
-       233, 233, 233, 233, 233, 233, 233, 233, 
-       233, 233, 233, 233, 233, 233, 233, 233, 
-       233, 0, 451, 452, 452, 452, 452, 452, 
-       0, 465, 466, 466, 466, 466, 470, 471, 
-       472, 0, 480, 481, 481, 482, 483, 484, 
-       0, 494, 495, 495, 495, 495, 499, 0, 
-       507, 508, 508, 509, 0, 520, 521, 521, 
-       521, 521, 521, 527, 528, 529, 0, 537, 
-       538, 538, 539, 0, 553, 554, 554, 554, 
-       554, 559, 554, 562, 554, 565, 554, 554, 
-       570
+       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, 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, 0, 448, 449, 
+       449, 449, 449, 449, 0, 462, 463, 463, 
+       463, 463, 467, 468, 469, 0, 477, 478, 
+       478, 479, 480, 481, 0, 492, 493, 493, 
+       493, 493, 493, 498, 0, 506, 507, 507, 
+       508, 0, 519, 520, 520, 520, 520, 520, 
+       526, 527, 528, 0, 536, 537, 537, 538, 
+       0, 552, 553, 553, 553, 553, 558, 553, 
+       561, 553, 564, 553, 553, 569
 };
 
-static const int eo_tokenizer_start = 289;
-static const int eo_tokenizer_first_final = 289;
+static const int eo_tokenizer_start = 285;
+static const int eo_tokenizer_first_final = 285;
 static const int eo_tokenizer_error = -1;
 
-static const int eo_tokenizer_en_tokenize_accessor = 296;
-static const int eo_tokenizer_en_tokenize_params = 305;
-static const int eo_tokenizer_en_tokenize_property = 312;
-static const int eo_tokenizer_en_tokenize_properties = 319;
-static const int eo_tokenizer_en_tokenize_method = 324;
-static const int eo_tokenizer_en_tokenize_methods = 334;
-static const int eo_tokenizer_en_tokenize_class = 339;
-static const int eo_tokenizer_en_main = 289;
+static const int eo_tokenizer_en_tokenize_accessor = 292;
+static const int eo_tokenizer_en_tokenize_params = 301;
+static const int eo_tokenizer_en_tokenize_property = 308;
+static const int eo_tokenizer_en_tokenize_properties = 316;
+static const int eo_tokenizer_en_tokenize_method = 321;
+static const int eo_tokenizer_en_tokenize_methods = 331;
+static const int eo_tokenizer_en_tokenize_class = 336;
+static const int eo_tokenizer_en_main = 285;
 
 
-#line 870 "eo_lexer.rl"
+#line 879 "eo_lexer.rl"
 
 
 Eina_Bool
@@ -1185,7 +1176,7 @@ eo_tokenizer_walk(Eo_Tokenizer *toknz, const char *source)
      }
 
    
-#line 1189 "eo_lexer.c"
+#line 1180 "eo_lexer.c"
        {
         toknz->cs = eo_tokenizer_start;
         toknz->ts = 0;
@@ -1193,7 +1184,7 @@ eo_tokenizer_walk(Eo_Tokenizer *toknz, const char *source)
         toknz->act = 0;
        }
 
-#line 892 "eo_lexer.rl"
+#line 901 "eo_lexer.rl"
 
    while (!done)
      {
@@ -1220,7 +1211,7 @@ eo_tokenizer_walk(Eo_Tokenizer *toknz, const char *source)
           }
 
         
-#line 1224 "eo_lexer.c"
+#line 1215 "eo_lexer.c"
        {
        int _klen;
        unsigned int _trans;
@@ -1239,7 +1230,7 @@ _resume:
 #line 1 "NONE"
        { toknz->ts = ( toknz->p);}
        break;
-#line 1243 "eo_lexer.c"
+#line 1234 "eo_lexer.c"
                }
        }
 
@@ -1379,17 +1370,15 @@ _eof_trans:
 #line 424 "eo_lexer.rl"
        {
       toknz->tmp.param = _eo_tokenizer_param_get(toknz, ( toknz->p));
-      if (toknz->tmp.prop)
-        toknz->tmp.prop->params = eina_list_append(toknz->tmp.prop->params, toknz->tmp.param);
-      else if (toknz->tmp.meth)
-        toknz->tmp.meth->params = eina_list_append(toknz->tmp.meth->params, toknz->tmp.param);
+      if (toknz->tmp.params)
+         *(toknz->tmp.params) = eina_list_append(*(toknz->tmp.params), toknz->tmp.param);
       else
-        ABORT(toknz, "got a param but there is no property nor method waiting for it");
+         ABORT(toknz, "got a param but there is no property nor method waiting for it");
       INF("        %s : %s", toknz->tmp.param->name, toknz->tmp.param->type);
    }
        break;
        case 10:
-#line 514 "eo_lexer.rl"
+#line 522 "eo_lexer.rl"
        {
       if (toknz->tmp.prop != NULL)
         ABORT(toknz, "there is a pending property definition %s", toknz->tmp.prop->name);
@@ -1397,7 +1386,7 @@ _eof_trans:
    }
        break;
        case 11:
-#line 551 "eo_lexer.rl"
+#line 560 "eo_lexer.rl"
        {
       if (toknz->tmp.meth->ret.type != NULL)
         ABORT(toknz, "method '%s' has already a return type", toknz->tmp.meth->name);
@@ -1406,7 +1395,7 @@ _eof_trans:
    }
        break;
        case 12:
-#line 558 "eo_lexer.rl"
+#line 567 "eo_lexer.rl"
        {
       if (toknz->tmp.meth->ret.comment != NULL)
         ABORT(toknz, "method '%s' return type has already a comment", toknz->tmp.meth->name);
@@ -1415,20 +1404,20 @@ _eof_trans:
    }
        break;
        case 13:
-#line 565 "eo_lexer.rl"
+#line 574 "eo_lexer.rl"
        {
       toknz->tmp.meth->legacy = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
        case 14:
-#line 569 "eo_lexer.rl"
+#line 578 "eo_lexer.rl"
        {
       toknz->tmp.meth->obj_const = EINA_TRUE;
       INF("        obj const");
    }
        break;
        case 15:
-#line 625 "eo_lexer.rl"
+#line 634 "eo_lexer.rl"
        {
       if (toknz->tmp.meth != NULL)
         ABORT(toknz, "there is a pending method definition %s", toknz->tmp.meth->name);
@@ -1436,28 +1425,28 @@ _eof_trans:
    }
        break;
        case 16:
-#line 656 "eo_lexer.rl"
+#line 665 "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 661 "eo_lexer.rl"
+#line 670 "eo_lexer.rl"
        {
       toknz->tmp.kls->inherits = toknz->tmp.str_items;
       toknz->tmp.str_items = NULL;
    }
        break;
        case 18:
-#line 707 "eo_lexer.rl"
+#line 716 "eo_lexer.rl"
        {
       toknz->tmp.event = _eo_tokenizer_event_get(toknz, ( toknz->p));
       toknz->tmp.kls->events = eina_list_append(toknz->tmp.kls->events, toknz->tmp.event);
    }
        break;
        case 19:
-#line 712 "eo_lexer.rl"
+#line 721 "eo_lexer.rl"
        {
       if (toknz->tmp.event->comment != NULL)
         ABORT(toknz, "event %s has already a comment", toknz->tmp.event->name);
@@ -1466,7 +1455,7 @@ _eof_trans:
    }
        break;
        case 20:
-#line 719 "eo_lexer.rl"
+#line 728 "eo_lexer.rl"
        {
       if (toknz->tmp.kls->legacy_prefix != NULL)
         ABORT(toknz, "A legacy prefix has already been given");
@@ -1474,14 +1463,14 @@ _eof_trans:
    }
        break;
        case 21:
-#line 731 "eo_lexer.rl"
+#line 740 "eo_lexer.rl"
        {
         toknz->tmp.impl = _eo_tokenizer_implement_get(toknz, ( toknz->p));
         toknz->tmp.kls->implements = eina_list_append(toknz->tmp.kls->implements, toknz->tmp.impl);
    }
        break;
        case 22:
-#line 736 "eo_lexer.rl"
+#line 745 "eo_lexer.rl"
        {
         if (toknz->tmp.impl->legacy)
            ABORT(toknz, "Legacy section already allocated for implement item");
@@ -1489,7 +1478,7 @@ _eof_trans:
    }
        break;
        case 23:
-#line 742 "eo_lexer.rl"
+#line 751 "eo_lexer.rl"
        {
         if (!toknz->tmp.impl->legacy)
            ABORT(toknz, "No legacy section");
@@ -1497,7 +1486,7 @@ _eof_trans:
    }
        break;
        case 24:
-#line 748 "eo_lexer.rl"
+#line 757 "eo_lexer.rl"
        {
         toknz->tmp.impl_leg_param = calloc(1, sizeof(Eo_Implement_Legacy_Param_Def));
         toknz->tmp.impl->legacy->params = eina_list_append(
@@ -1507,19 +1496,19 @@ _eof_trans:
    }
        break;
        case 25:
-#line 756 "eo_lexer.rl"
+#line 765 "eo_lexer.rl"
        {
         toknz->tmp.impl_leg_param->legacy_name = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
        case 26:
-#line 760 "eo_lexer.rl"
+#line 769 "eo_lexer.rl"
        {
         toknz->tmp.impl_leg_param->comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-2);
    }
        break;
        case 27:
-#line 764 "eo_lexer.rl"
+#line 773 "eo_lexer.rl"
        {
         if (!toknz->tmp.impl->legacy)
            ABORT(toknz, "No legacy section");
@@ -1527,7 +1516,7 @@ _eof_trans:
    }
        break;
        case 28:
-#line 770 "eo_lexer.rl"
+#line 779 "eo_lexer.rl"
        {
         if (!toknz->tmp.impl->legacy)
            ABORT(toknz, "No legacy section");
@@ -1535,31 +1524,31 @@ _eof_trans:
    }
        break;
        case 29:
-#line 836 "eo_lexer.rl"
+#line 845 "eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_REGULAR;
    }
        break;
        case 30:
-#line 839 "eo_lexer.rl"
+#line 848 "eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_ABSTRACT;
    }
        break;
        case 31:
-#line 842 "eo_lexer.rl"
+#line 851 "eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_MIXIN;
    }
        break;
        case 32:
-#line 845 "eo_lexer.rl"
+#line 854 "eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_INTERFACE;
    }
        break;
        case 33:
-#line 849 "eo_lexer.rl"
+#line 858 "eo_lexer.rl"
        {
       if (toknz->tmp.kls != NULL)
         ABORT(toknz, "there is a pending class definition %s", toknz->tmp.kls->name);
@@ -1602,7 +1591,7 @@ _eof_trans:
       toknz->tmp.prop->accessors = eina_list_append(toknz->tmp.prop->accessors, toknz->tmp.accessor);
       toknz->tmp.accessor = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 312; goto _again;}
+      { toknz->cs = 308; goto _again;}
    }}
        break;
        case 42:
@@ -1639,7 +1628,7 @@ _eof_trans:
       toknz->tmp.prop->accessors = eina_list_append(toknz->tmp.prop->accessors, toknz->tmp.accessor);
       toknz->tmp.accessor = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 312; goto _again;}
+      { toknz->cs = 308; goto _again;}
    }}
        break;
        case 46:
@@ -1692,15 +1681,15 @@ _eof_trans:
    }}
        break;
        case 50:
-#line 435 "eo_lexer.rl"
+#line 433 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      }");
       toknz->tmp.param = NULL;
       toknz->current_nesting--;
       if (toknz->tmp.prop)
-        { toknz->cs = 312; goto _again;}
+         { toknz->cs = 308; goto _again;}
       else if (toknz->tmp.meth)
-        { toknz->cs = 324; goto _again;}
+        { toknz->cs = 321; goto _again;}
       else
         ABORT(toknz, "leaving tokenize_params but there is no property nor method pending");
    }}
@@ -1725,23 +1714,23 @@ _eof_trans:
    }}
        break;
        case 52:
-#line 451 "eo_lexer.rl"
+#line 449 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 53:
-#line 453 "eo_lexer.rl"
+#line 451 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 54:
-#line 435 "eo_lexer.rl"
+#line 433 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("      }");
       toknz->tmp.param = NULL;
       toknz->current_nesting--;
       if (toknz->tmp.prop)
-        { toknz->cs = 312; goto _again;}
+         { toknz->cs = 308; goto _again;}
       else if (toknz->tmp.meth)
-        { toknz->cs = 324; goto _again;}
+        { toknz->cs = 321; goto _again;}
       else
         ABORT(toknz, "leaving tokenize_params but there is no property nor method pending");
    }}
@@ -1766,7 +1755,7 @@ _eof_trans:
    }}
        break;
        case 56:
-#line 453 "eo_lexer.rl"
+#line 451 "eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}}
        break;
        case 57:
@@ -1796,46 +1785,56 @@ _eof_trans:
    }}
        break;
        case 59:
-#line 460 "eo_lexer.rl"
+#line 458 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      get {");
       toknz->tmp.accessor = _eo_tokenizer_accessor_get(toknz, GETTER);
       toknz->current_nesting++;
-      { toknz->cs = 296; goto _again;}
+      { toknz->cs = 292; goto _again;}
    }}
        break;
        case 60:
-#line 467 "eo_lexer.rl"
+#line 465 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      set {");
       toknz->tmp.accessor = _eo_tokenizer_accessor_get(toknz, SETTER);
       toknz->current_nesting++;
-      { toknz->cs = 296; goto _again;}
+      { toknz->cs = 292; goto _again;}
    }}
        break;
        case 61:
-#line 474 "eo_lexer.rl"
+#line 472 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
-      INF("      params {");
+      INF("      keys {");
       toknz->current_nesting++;
-      { toknz->cs = 305; goto _again;}
+      toknz->tmp.params = &(toknz->tmp.prop->keys);
+      { toknz->cs = 301; goto _again;}
    }}
        break;
        case 62:
-#line 480 "eo_lexer.rl"
+#line 479 "eo_lexer.rl"
+       { toknz->te = ( toknz->p)+1;{
+      INF("      values {");
+      toknz->current_nesting++;
+      toknz->tmp.params = &(toknz->tmp.prop->values);
+      { toknz->cs = 301; goto _again;}
+   }}
+       break;
+       case 63:
+#line 486 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
-      if (eina_list_count(toknz->tmp.prop->params) == 0)
-        WRN("property '%s' has no parameters.", toknz->tmp.prop->name);
+      if (eina_list_count(toknz->tmp.prop->values) == 0)
+        WRN("property '%s' has no values.", toknz->tmp.prop->name);
       if (eina_list_count(toknz->tmp.prop->accessors) == 0)
         WRN("property '%s' has no accessors.", toknz->tmp.prop->name);
       INF("    }");
       toknz->tmp.kls->properties = eina_list_append(toknz->tmp.kls->properties, toknz->tmp.prop);
       toknz->tmp.prop = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 319; goto _again;}
+      { toknz->cs = 316; goto _again;}
    }}
        break;
-       case 63:
+       case 64:
 #line 300 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
@@ -1854,25 +1853,25 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 64:
-#line 497 "eo_lexer.rl"
+       case 65:
+#line 504 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 65:
-#line 480 "eo_lexer.rl"
+       case 66:
+#line 486 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
-      if (eina_list_count(toknz->tmp.prop->params) == 0)
-        WRN("property '%s' has no parameters.", toknz->tmp.prop->name);
+      if (eina_list_count(toknz->tmp.prop->values) == 0)
+        WRN("property '%s' has no values.", toknz->tmp.prop->name);
       if (eina_list_count(toknz->tmp.prop->accessors) == 0)
         WRN("property '%s' has no accessors.", toknz->tmp.prop->name);
       INF("    }");
       toknz->tmp.kls->properties = eina_list_append(toknz->tmp.kls->properties, toknz->tmp.prop);
       toknz->tmp.prop = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 319; goto _again;}
+      { toknz->cs = 316; goto _again;}
    }}
        break;
-       case 66:
+       case 67:
 #line 300 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
@@ -1891,7 +1890,7 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 67:
+       case 68:
 #line 300 "eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
@@ -1910,30 +1909,30 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 68:
+       case 69:
 #line 291 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 69:
-#line 508 "eo_lexer.rl"
+       case 70:
+#line 516 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("    %s {", toknz->tmp.prop->name);
       toknz->current_nesting++;
-      { toknz->cs = 312; goto _again;}
+      { toknz->cs = 308; goto _again;}
    }}
        break;
-       case 70:
-#line 520 "eo_lexer.rl"
+       case 71:
+#line 528 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  }");
       toknz->current_nesting--;
-      { toknz->cs = 339; goto _again;}
+      { toknz->cs = 336; goto _again;}
    }}
        break;
-       case 71:
+       case 72:
 #line 300 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
@@ -1952,19 +1951,19 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 72:
-#line 529 "eo_lexer.rl"
+       case 73:
+#line 537 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 73:
-#line 520 "eo_lexer.rl"
+       case 74:
+#line 528 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("  }");
       toknz->current_nesting--;
-      { toknz->cs = 339; goto _again;}
+      { toknz->cs = 336; goto _again;}
    }}
        break;
-       case 74:
+       case 75:
 #line 300 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
@@ -1983,7 +1982,7 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 75:
+       case 76:
 #line 300 "eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
@@ -2002,8 +2001,8 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 76:
-#line 538 "eo_lexer.rl"
+       case 77:
+#line 546 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (toknz->tmp.meth->comment != NULL)
         ABORT(toknz, "method has already a comment");
@@ -2011,31 +2010,32 @@ _eof_trans:
       INF("        %s", toknz->tmp.meth->comment);
    }}
        break;
-       case 77:
+       case 78:
 #line 291 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 78:
-#line 545 "eo_lexer.rl"
+       case 79:
+#line 553 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      params {");
       toknz->current_nesting++;
-      { toknz->cs = 305; goto _again;}
+      toknz->tmp.params = &(toknz->tmp.meth->params);
+      { toknz->cs = 301; goto _again;}
    }}
        break;
-       case 79:
-#line 611 "eo_lexer.rl"
-       { toknz->te = ( toknz->p)+1;}
-       break;
        case 80:
-#line 612 "eo_lexer.rl"
+#line 620 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
        case 81:
-#line 574 "eo_lexer.rl"
+#line 621 "eo_lexer.rl"
+       { toknz->te = ( toknz->p)+1;}
+       break;
+       case 82:
+#line 583 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       Eina_List **l;
       if (eina_list_count(toknz->tmp.meth->params) == 0)
@@ -2058,10 +2058,10 @@ _eof_trans:
       *l = eina_list_append(*l, toknz->tmp.meth);
       toknz->tmp.meth = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 334; goto _again;}
+      { toknz->cs = 331; goto _again;}
    }}
        break;
-       case 82:
+       case 83:
 #line 300 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
@@ -2080,16 +2080,16 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 83:
-#line 606 "eo_lexer.rl"
-       { toknz->te = ( toknz->p);( toknz->p)--;}
-       break;
        case 84:
-#line 610 "eo_lexer.rl"
+#line 615 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 85:
-#line 574 "eo_lexer.rl"
+#line 619 "eo_lexer.rl"
+       { toknz->te = ( toknz->p);( toknz->p)--;}
+       break;
+       case 86:
+#line 583 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       Eina_List **l;
       if (eina_list_count(toknz->tmp.meth->params) == 0)
@@ -2112,10 +2112,10 @@ _eof_trans:
       *l = eina_list_append(*l, toknz->tmp.meth);
       toknz->tmp.meth = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 334; goto _again;}
+      { toknz->cs = 331; goto _again;}
    }}
        break;
-       case 86:
+       case 87:
 #line 300 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
@@ -2134,11 +2134,11 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 87:
-#line 610 "eo_lexer.rl"
+       case 88:
+#line 619 "eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}}
        break;
-       case 88:
+       case 89:
 #line 300 "eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
@@ -2157,31 +2157,31 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 89:
+       case 90:
 #line 291 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 90:
-#line 619 "eo_lexer.rl"
+       case 91:
+#line 628 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("    %s {", toknz->tmp.meth->name);
       toknz->current_nesting++;
-      { toknz->cs = 324; goto _again;}
+      { toknz->cs = 321; goto _again;}
    }}
        break;
-       case 91:
-#line 631 "eo_lexer.rl"
+       case 92:
+#line 640 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  }");
       toknz->current_methods_type = METH_TYPE_LAST;
       toknz->current_nesting--;
-      { toknz->cs = 339; goto _again;}
+      { toknz->cs = 336; goto _again;}
    }}
        break;
-       case 92:
+       case 93:
 #line 300 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
@@ -2200,20 +2200,20 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 93:
-#line 641 "eo_lexer.rl"
+       case 94:
+#line 650 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 94:
-#line 631 "eo_lexer.rl"
+       case 95:
+#line 640 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("  }");
       toknz->current_methods_type = METH_TYPE_LAST;
       toknz->current_nesting--;
-      { toknz->cs = 339; goto _again;}
+      { toknz->cs = 336; goto _again;}
    }}
        break;
-       case 95:
+       case 96:
 #line 300 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
@@ -2232,7 +2232,7 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 96:
+       case 97:
 #line 300 "eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
@@ -2251,77 +2251,77 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 97:
-#line 650 "eo_lexer.rl"
+       case 98:
+#line 659 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (toknz->tmp.kls->comment != NULL)
         ABORT(toknz, "class %s has already a comment", toknz->tmp.kls->name);
       toknz->tmp.kls->comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-1);
    }}
        break;
-       case 98:
+       case 99:
 #line 291 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 99:
-#line 666 "eo_lexer.rl"
+       case 100:
+#line 675 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
    }}
        break;
-       case 100:
-#line 669 "eo_lexer.rl"
+       case 101:
+#line 678 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
    }}
        break;
-       case 101:
-#line 672 "eo_lexer.rl"
+       case 102:
+#line 681 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  constructors {");
       toknz->current_methods_type = METH_CONSTRUCTOR;
       toknz->current_nesting++;
-      { toknz->cs = 334; goto _again;}
+      { toknz->cs = 331; goto _again;}
    }}
        break;
-       case 102:
-#line 679 "eo_lexer.rl"
+       case 103:
+#line 688 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  destructors {");
       toknz->current_methods_type = METH_DESTRUCTOR;
       toknz->current_nesting++;
-      { toknz->cs = 334; goto _again;}
+      { toknz->cs = 331; goto _again;}
    }}
        break;
-       case 103:
-#line 686 "eo_lexer.rl"
+       case 104:
+#line 695 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  properties {");
       toknz->current_nesting++;
-      { toknz->cs = 319; goto _again;}
+      { toknz->cs = 316; goto _again;}
    }}
        break;
-       case 104:
-#line 692 "eo_lexer.rl"
+       case 105:
+#line 701 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  begin methods");
       toknz->current_methods_type = METH_REGULAR;
       toknz->current_nesting++;
-      { toknz->cs = 334; goto _again;}
+      { toknz->cs = 331; goto _again;}
    }}
        break;
-       case 105:
-#line 699 "eo_lexer.rl"
+       case 106:
+#line 708 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       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 = 289; goto _again;}
+      { toknz->cs = 285; goto _again;}
    }}
        break;
-       case 106:
+       case 107:
 #line 300 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
@@ -2340,35 +2340,35 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 107:
-#line 814 "eo_lexer.rl"
-       { toknz->te = ( toknz->p);( toknz->p)--;}
-       break;
        case 108:
-#line 817 "eo_lexer.rl"
+#line 823 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 109:
-#line 666 "eo_lexer.rl"
-       { toknz->te = ( toknz->p);( toknz->p)--;{
-   }}
+#line 826 "eo_lexer.rl"
+       { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 110:
-#line 669 "eo_lexer.rl"
+#line 675 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
    }}
        break;
        case 111:
-#line 699 "eo_lexer.rl"
+#line 678 "eo_lexer.rl"
+       { toknz->te = ( toknz->p);( toknz->p)--;{
+   }}
+       break;
+       case 112:
+#line 708 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       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 = 289; goto _again;}
+      { toknz->cs = 285; goto _again;}
    }}
        break;
-       case 112:
+       case 113:
 #line 300 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
@@ -2387,7 +2387,7 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 113:
+       case 114:
 #line 300 "eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
@@ -2406,22 +2406,22 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 114:
+       case 115:
 #line 291 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 115:
-#line 830 "eo_lexer.rl"
+       case 116:
+#line 839 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("begin class: %s", toknz->tmp.kls->name);
       toknz->current_nesting++;
-      { toknz->cs = 339; goto _again;}
+      { toknz->cs = 336; goto _again;}
    }}
        break;
-       case 116:
+       case 117:
 #line 300 "eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
@@ -2440,11 +2440,11 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 117:
-#line 864 "eo_lexer.rl"
+       case 118:
+#line 873 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 118:
+       case 119:
 #line 300 "eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
@@ -2463,7 +2463,7 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 119:
+       case 120:
 #line 300 "eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
@@ -2513,12 +2513,12 @@ _again:
        _out: {}
        }
 
-#line 918 "eo_lexer.rl"
+#line 927 "eo_lexer.rl"
 
         if ( toknz->cs == 
 #line 2520 "eo_lexer.c"
 -1
-#line 919 "eo_lexer.rl"
+#line 928 "eo_lexer.rl"
  )
           {
              ERR("wrong termination");
@@ -2637,9 +2637,14 @@ eo_tokenizer_dump(Eo_Tokenizer *toknz)
         EINA_LIST_FOREACH(kls->properties, l, prop)
           {
              printf("  property: %s\n", prop->name);
-             EINA_LIST_FOREACH(prop->params, m, param)
+             EINA_LIST_FOREACH(prop->keys, m, param)
+               {
+                  printf("    key: %s : %s (%s)\n",
+                         param->name, param->type, param->comment);
+               }
+             EINA_LIST_FOREACH(prop->values, m, param)
                {
-                  printf("    param: %s : %s (%s)\n",
+                  printf("    value: %s : %s (%s)\n",
                          param->name, param->type, param->comment);
                }
              EINA_LIST_FOREACH(prop->accessors, m, accessor)
@@ -2720,7 +2725,7 @@ eo_tokenizer_database_fill(const char *filename)
              database_function_data_set(foo_id, EOLIAN_LEGACY, meth->legacy);
              EINA_LIST_FOREACH(meth->params, m, param)
                {
-                  database_function_parameter_add(foo_id, (Eolian_Parameter_Dir)param->way, param->type, param->name, param->comment);
+                  database_method_parameter_add(foo_id, (Eolian_Parameter_Dir)param->way, param->type, param->name, param->comment);
                }
           }
 
@@ -2732,18 +2737,17 @@ eo_tokenizer_database_fill(const char *filename)
              database_function_data_set(foo_id, EOLIAN_LEGACY, meth->legacy);
              EINA_LIST_FOREACH(meth->params, m, param)
                {
-                  database_function_parameter_add(foo_id, (Eolian_Parameter_Dir)param->way, param->type, param->name, param->comment);
+                  database_method_parameter_add(foo_id, (Eolian_Parameter_Dir)param->way, param->type, param->name, param->comment);
                }
           }
 
         EINA_LIST_FOREACH(kls->properties, l, prop)
           {
              Eolian_Function foo_id = database_function_new(prop->name, UNRESOLVED);
-             EINA_LIST_FOREACH(prop->params, m, param)
-               {
-                  /* IN_PARAM doesn't care */
-                  database_function_parameter_add(foo_id, EOLIAN_IN_PARAM, param->type, param->name, param->comment);
-               }
+             EINA_LIST_FOREACH(prop->keys, m, param)
+                database_property_key_add(foo_id, param->type, param->name, param->comment);
+             EINA_LIST_FOREACH(prop->values, m, param)
+                database_property_value_add(foo_id, param->type, param->name, param->comment);
              EINA_LIST_FOREACH(prop->accessors, m, accessor)
                {
                   database_function_type_set(foo_id, (accessor->type == SETTER?SET:GET));
@@ -2787,9 +2791,7 @@ eo_tokenizer_database_fill(const char *filename)
              database_function_data_set(foo_id, EOLIAN_LEGACY, meth->legacy);
              database_function_object_set_as_const(foo_id, meth->obj_const);
              EINA_LIST_FOREACH(meth->params, m, param)
-               {
-                  database_function_parameter_add(foo_id, (Eolian_Parameter_Dir)param->way, param->type, param->name, param->comment);
-               }
+                database_method_parameter_add(foo_id, (Eolian_Parameter_Dir)param->way, param->type, param->name, param->comment);
           }
 
         EINA_LIST_FOREACH(kls->implements, l, impl)
index bee452a..5308f2e 100644 (file)
@@ -35,6 +35,7 @@ typedef struct _eo_tokenizer
 
    Eina_List *classes;
    struct {
+      Eina_List **params;
       Eolian_Class_Type kls_type;
       Eo_Class_Def *kls;
       Eo_Property_Def *prop;
index 8b23fed..5dd6053 100644 (file)
@@ -194,17 +194,17 @@ _eo_tokenizer_param_get(Eo_Tokenizer *toknz, char *p)
    s++;
 
    param->way = PARAM_IN;
-   if (strncmp(toknz->saved.tok, "in ", 3) == 0)
+   if (strncmp(toknz->saved.tok, "@in ", 3) == 0)
      {
         toknz->saved.tok += 3;
         param->way = PARAM_IN;
      }
-   else if (strncmp(toknz->saved.tok, "out ", 4) == 0)
+   else if (strncmp(toknz->saved.tok, "@out ", 4) == 0)
      {
         toknz->saved.tok += 4;
         param->way = PARAM_OUT;
      }
-   else if (strncmp(toknz->saved.tok, "inout ", 6) == 0)
+   else if (strncmp(toknz->saved.tok, "@inout ", 6) == 0)
      {
         toknz->saved.tok += 6;
         param->way = PARAM_INOUT;
@@ -423,10 +423,8 @@ _eo_tokenizer_implement_get(Eo_Tokenizer *toknz, char *p)
 
    action end_param {
       toknz->tmp.param = _eo_tokenizer_param_get(toknz, fpc);
-      if (toknz->tmp.prop)
-        toknz->tmp.prop->params = eina_list_append(toknz->tmp.prop->params, toknz->tmp.param);
-      else if (toknz->tmp.meth)
-        toknz->tmp.meth->params = eina_list_append(toknz->tmp.meth->params, toknz->tmp.param);
+      if (toknz->tmp.params)
+        *(toknz->tmp.params) = eina_list_append(*(toknz->tmp.params), toknz->tmp.param);
       else
         ABORT(toknz, "got a param but there is no property nor method waiting for it");
       INF("        %s : %s", toknz->tmp.param->name, toknz->tmp.param->type);
@@ -445,7 +443,7 @@ _eo_tokenizer_implement_get(Eo_Tokenizer *toknz, char *p)
    }
 
    param_comment = ws* eo_comment %end_param_comment;
-   param = alpha+ >save_fpc (alnum_u | '*' | ws )+  %end_param end_statement param_comment?;
+   param = ('@'|alpha+) >save_fpc (alnum_u | '*' | ws )+  %end_param end_statement param_comment?;
 
    tokenize_params := |*
       ignore+;    #=> show_ignore;
@@ -471,15 +469,23 @@ _eo_tokenizer_implement_get(Eo_Tokenizer *toknz, char *p)
       fgoto tokenize_accessor;
    }
 
-   action begin_property_params {
-      INF("      params {");
+   action begin_property_keys {
+      INF("      keys {");
+      toknz->current_nesting++;
+      toknz->tmp.params = &(toknz->tmp.prop->keys);
+      fgoto tokenize_params;
+   }
+
+   action begin_property_values {
+      INF("      values {");
       toknz->current_nesting++;
+      toknz->tmp.params = &(toknz->tmp.prop->values);
       fgoto tokenize_params;
    }
 
    action end_property {
-      if (eina_list_count(toknz->tmp.prop->params) == 0)
-        WRN("property '%s' has no parameters.", toknz->tmp.prop->name);
+      if (eina_list_count(toknz->tmp.prop->values) == 0)
+        WRN("property '%s' has no values.", toknz->tmp.prop->name);
       if (eina_list_count(toknz->tmp.prop->accessors) == 0)
         WRN("property '%s' has no accessors.", toknz->tmp.prop->name);
       INF("    }");
@@ -491,14 +497,16 @@ _eo_tokenizer_implement_get(Eo_Tokenizer *toknz, char *p)
 
    prop_get = 'get' ignore* begin_def;
    prop_set = 'set' ignore* begin_def;
-   prop_params = 'params' ignore* begin_def;
+   prop_keys = 'keys' ignore* begin_def;
+   prop_values = 'values' ignore* begin_def;
 
    tokenize_property := |*
       ignore+;    #=> show_ignore;
       comment     => show_comment;
       prop_get    => begin_property_get;
       prop_set    => begin_property_set;
-      prop_params => begin_property_params;
+      prop_keys   => begin_property_keys;
+      prop_values => begin_property_values;
       end_def     => end_property;
       any         => show_error;
       *|;
@@ -545,6 +553,7 @@ _eo_tokenizer_implement_get(Eo_Tokenizer *toknz, char *p)
    action begin_method_params {
       INF("      params {");
       toknz->current_nesting++;
+      toknz->tmp.params = &(toknz->tmp.meth->params);
       fgoto tokenize_params;
    }
 
@@ -600,7 +609,7 @@ _eo_tokenizer_implement_get(Eo_Tokenizer *toknz, char *p)
    meth_legacy = 'legacy' ws+ ident %end_method_legacy end_statement;
    meth_rettype_comment = ws* eo_comment %end_method_rettype_comment;
    meth_rettype = 'return' ws+ alpha+ >save_fpc (alnum_u | '*' | ws )+  %end_method_rettype end_statement meth_rettype_comment?;
-   meth_obj_const = 'object' ws* colon ws* 'const' %end_method_obj_const end_statement;
+   meth_obj_const = 'const' %end_method_obj_const end_statement;
 
    tokenize_method := |*
       ignore+;    #=> show_ignore;
@@ -1034,9 +1043,14 @@ eo_tokenizer_dump(Eo_Tokenizer *toknz)
         EINA_LIST_FOREACH(kls->properties, l, prop)
           {
              printf("  property: %s\n", prop->name);
-             EINA_LIST_FOREACH(prop->params, m, param)
+             EINA_LIST_FOREACH(prop->keys, m, param)
                {
-                  printf("    param: %s : %s (%s)\n",
+                  printf("    key: %s : %s (%s)\n",
+                         param->name, param->type, param->comment);
+               }
+             EINA_LIST_FOREACH(prop->values, m, param)
+               {
+                  printf("    value: %s : %s (%s)\n",
                          param->name, param->type, param->comment);
                }
              EINA_LIST_FOREACH(prop->accessors, m, accessor)
@@ -1117,7 +1131,7 @@ eo_tokenizer_database_fill(const char *filename)
              database_function_data_set(foo_id, EOLIAN_LEGACY, meth->legacy);
              EINA_LIST_FOREACH(meth->params, m, param)
                {
-                  database_function_parameter_add(foo_id, (Eolian_Parameter_Dir)param->way, param->type, param->name, param->comment);
+                  database_method_parameter_add(foo_id, (Eolian_Parameter_Dir)param->way, param->type, param->name, param->comment);
                }
           }
 
@@ -1129,18 +1143,17 @@ eo_tokenizer_database_fill(const char *filename)
              database_function_data_set(foo_id, EOLIAN_LEGACY, meth->legacy);
              EINA_LIST_FOREACH(meth->params, m, param)
                {
-                  database_function_parameter_add(foo_id, (Eolian_Parameter_Dir)param->way, param->type, param->name, param->comment);
+                  database_method_parameter_add(foo_id, (Eolian_Parameter_Dir)param->way, param->type, param->name, param->comment);
                }
           }
 
         EINA_LIST_FOREACH(kls->properties, l, prop)
           {
              Eolian_Function foo_id = database_function_new(prop->name, UNRESOLVED);
-             EINA_LIST_FOREACH(prop->params, m, param)
-               {
-                  /* IN_PARAM doesn't care */
-                  database_function_parameter_add(foo_id, EOLIAN_IN_PARAM, param->type, param->name, param->comment);
-               }
+             EINA_LIST_FOREACH(prop->keys, m, param)
+                database_property_key_add(foo_id, param->type, param->name, param->comment);
+             EINA_LIST_FOREACH(prop->values, m, param)
+                database_property_value_add(foo_id, param->type, param->name, param->comment);
              EINA_LIST_FOREACH(prop->accessors, m, accessor)
                {
                   database_function_type_set(foo_id, (accessor->type == SETTER?SET:GET));
@@ -1184,9 +1197,7 @@ eo_tokenizer_database_fill(const char *filename)
              database_function_data_set(foo_id, EOLIAN_LEGACY, meth->legacy);
              database_function_object_set_as_const(foo_id, meth->obj_const);
              EINA_LIST_FOREACH(meth->params, m, param)
-               {
-                  database_function_parameter_add(foo_id, (Eolian_Parameter_Dir)param->way, param->type, param->name, param->comment);
-               }
+                database_method_parameter_add(foo_id, (Eolian_Parameter_Dir)param->way, param->type, param->name, param->comment);
           }
 
         EINA_LIST_FOREACH(kls->implements, l, impl)
index 06aa4e2..8c94526 100644 (file)
@@ -25,6 +25,7 @@ typedef struct
 typedef struct
 {
    Eina_Stringshare *name;
+   Eina_List *keys; /* list of _Parameter_Desc */
    Eina_List *params; /* list of _Parameter_Desc */
    Eolian_Function_Type type;
    Eina_Hash *data;
@@ -581,21 +582,55 @@ eolian_function_data_get(Eolian_Function function_id, const char *key)
    return (fid ? eina_hash_find(fid->data, key) : NULL);
 }
 
+static _Parameter_Desc *
+_parameter_new(const char *type, const char *name, const char *description)
+{
+   _Parameter_Desc *param = NULL;
+   param = calloc(1, sizeof(*param));
+   param->name = eina_stringshare_add(name);
+   param->type = eina_stringshare_add(type);
+   param->description = eina_stringshare_add(description);
+   return param;
+}
+
+Eolian_Function_Parameter
+database_property_key_add(Eolian_Function foo_id, const char *type, const char *name, const char *description)
+{
+   _Function_Id *fid = (_Function_Id *)foo_id;
+   _Parameter_Desc *param = NULL;
+   if (fid)
+     {
+        param = _parameter_new(type, name, description);
+        fid->keys = eina_list_append(fid->keys, param);
+     }
+   return (Eolian_Function_Parameter)param;
+}
+
 Eolian_Function_Parameter
-database_function_parameter_add(Eolian_Function foo_id, Eolian_Parameter_Dir param_dir, const char *type, const char *name, const char *description)
+database_property_value_add(Eolian_Function foo_id, const char *type, const char *name, const char *description)
 {
+   _Function_Id *fid = (_Function_Id *)foo_id;
    _Parameter_Desc *param = NULL;
+   if (fid)
+     {
+        param = _parameter_new(type, name, description);
+        fid->params= eina_list_append(fid->params, param);
+     }
+   return (Eolian_Function_Parameter)param;
+}
+
+Eolian_Function_Parameter
+database_method_parameter_add(Eolian_Function foo_id, Eolian_Parameter_Dir param_dir, const char *type, const char *name, const char *description)
+{
    _Function_Id *fid = (_Function_Id *)foo_id;
+   _Parameter_Desc *param = NULL;
    if (fid)
      {
-        param = calloc(1, sizeof(*param));
+        param = _parameter_new(type, name, description);
         param->param_dir = param_dir;
-        param->name = eina_stringshare_add(name);
-        param->type = eina_stringshare_add(type);
-        param->description = eina_stringshare_add(description);
-        fid->params = eina_list_append(fid->params, param);
+        fid->params= eina_list_append(fid->params, param);
      }
-   return (Eolian_Function_Parameter) param;
+   return (Eolian_Function_Parameter)param;
 }
 
 EAPI Eolian_Function_Parameter
@@ -606,6 +641,8 @@ eolian_function_parameter_get(const Eolian_Function foo_id, const char *param_na
      {
         Eina_List *itr;
         _Parameter_Desc *param;
+        EINA_LIST_FOREACH(fid->keys, itr, param)
+           if (!strcmp(param->name, param_name)) return (Eolian_Function_Parameter)param;
         EINA_LIST_FOREACH(fid->params, itr, param)
            if (!strcmp(param->name, param_name)) return (Eolian_Function_Parameter)param;
      }
@@ -627,6 +664,19 @@ eolian_parameter_name_get(const Eolian_Function_Parameter param)
 }
 
 EAPI const Eina_List *
+eolian_property_keys_list_get(Eolian_Function foo_id)
+{
+   _Function_Id *fid = (_Function_Id *)foo_id;
+   return (fid?fid->keys:NULL);
+}
+
+EAPI const Eina_List *
+eolian_property_values_list_get(Eolian_Function foo_id)
+{
+   return eolian_parameters_list_get(foo_id);
+}
+
+EAPI const Eina_List *
 eolian_parameters_list_get(Eolian_Function foo_id)
 {
    _Function_Id *fid = (_Function_Id *)foo_id;
index 94550ab..39d64d3 100644 (file)
@@ -42,8 +42,14 @@ void database_function_data_set(Eolian_Function function_id, const char *key, co
 /* Add a description to a function */
 #define database_function_description_set(foo_id, key, desc) database_function_data_set((foo_id), (key), (desc))
 
-/* Add a parameter to a function */
-Eolian_Function_Parameter database_function_parameter_add(Eolian_Function foo_id, Eolian_Parameter_Dir param_dir, const char *type, const char *name, const char *description);
+/* Add a key to a property */
+Eolian_Function_Parameter database_property_key_add(Eolian_Function foo_id, const char *type, const char *name, const char *description);
+
+/* Add a value to a property */
+Eolian_Function_Parameter database_property_value_add(Eolian_Function foo_id, const char *type, const char *name, const char *description);
+
+/* Add a parameter to a method */
+Eolian_Function_Parameter database_method_parameter_add(Eolian_Function foo_id, Eolian_Parameter_Dir param_dir, const char *type, const char *name, const char *description);
 
 void database_parameter_get_const_attribute_set(Eolian_Function_Parameter param_desc, Eina_Bool is_const);