Eolian: fix properties and methods scope support
authorJérémy Zurcher <jeremy@asynk.ch>
Tue, 22 Apr 2014 18:24:27 +0000 (20:24 +0200)
committerJérémy Zurcher <jeremy@asynk.ch>
Tue, 22 Apr 2014 18:24:27 +0000 (20:24 +0200)
define scope keywords 'protected' and 'public'
disallow scope keywords as property or method name
use move_ts action to move token start after scope modifier if found
use end_property_scope and end_method_scope actions to handle it

src/lib/eolian/eo_lexer.c
src/lib/eolian/eo_lexer.rl

index 739fc0f..c2963ce 100644 (file)
@@ -159,21 +159,12 @@ _eo_tokenizer_class_get(Eo_Tokenizer *toknz, char *p)
 static Eo_Property_Def*
 _eo_tokenizer_property_get(Eo_Tokenizer *toknz, char *p)
 {
-   Eo_Property_Def *prop = NULL;
-   if (!strncmp(toknz->saved.tok, "protected ", 10))
-     {
-        toknz->saved.tok += 10;
-        toknz->tmp.fscope = FUNC_PROTECTED;
-     }
-   else
-     {
-        prop = calloc(1, sizeof(Eo_Property_Def));
-        if (prop == NULL) ABORT(toknz, "calloc Eo_Property_Def failure");
+   Eo_Property_Def *prop = calloc(1, sizeof(Eo_Property_Def));
+   if (prop == NULL) ABORT(toknz, "calloc Eo_Property_Def failure");
 
-        prop->name = _eo_tokenizer_token_get(toknz, p);
-        prop->scope = toknz->tmp.fscope;
-        toknz->tmp.fscope = FUNC_PUBLIC;
-     }
+   prop->name = _eo_tokenizer_token_get(toknz, p);
+   prop->scope = toknz->tmp.fscope;
+   toknz->tmp.fscope = FUNC_PUBLIC;
 
    return prop;
 }
@@ -181,25 +172,25 @@ _eo_tokenizer_property_get(Eo_Tokenizer *toknz, char *p)
 static Eo_Method_Def*
 _eo_tokenizer_method_get(Eo_Tokenizer *toknz, char *p)
 {
-   Eo_Method_Def *meth = NULL;
-   if (!strncmp(toknz->saved.tok, "protected ", 10))
-     {
-        toknz->saved.tok += 10;
-        toknz->tmp.fscope = FUNC_PROTECTED;
-     }
-   else
-     {
-        meth = calloc(1, sizeof(Eo_Method_Def));
-        if (meth == NULL) ABORT(toknz, "calloc Eo_Method_Def failure");
+   Eo_Method_Def *meth = calloc(1, sizeof(Eo_Method_Def));
+   if (meth == NULL) ABORT(toknz, "calloc Eo_Method_Def failure");
 
-        meth->name = _eo_tokenizer_token_get(toknz, p);
-        meth->scope = toknz->tmp.fscope;
-        toknz->tmp.fscope = FUNC_PUBLIC;
-     }
+   meth->name = _eo_tokenizer_token_get(toknz, p);
+   meth->scope = toknz->tmp.fscope;
+   toknz->tmp.fscope = FUNC_PUBLIC;
 
    return meth;
 }
 
+static int
+_eo_tokenizer_scope_get(Eo_Tokenizer *toknz, EINA_UNUSED char *p)
+{
+   if (!strncmp(toknz->saved.tok, "protected ", 10))
+     return FUNC_PROTECTED;
+
+   return FUNC_PUBLIC;
+}
+
 static Eo_Param_Def*
 _eo_tokenizer_param_get(Eo_Tokenizer *toknz, char *p)
 {
@@ -366,56 +357,57 @@ _eo_tokenizer_implement_get(Eo_Tokenizer *toknz, char *p)
 }
 
 
-#line 443 "lib/eolian/eo_lexer.rl"
-
-
-
-#line 374 "lib/eolian/eo_lexer.c"
-static const char _eo_tokenizer_actions[] = {
-       0, 1, 0, 1, 2, 1, 6, 1, 
-       10, 1, 15, 1, 16, 1, 17, 1, 
-       18, 1, 19, 1, 20, 1, 21, 1, 
-       22, 1, 23, 1, 24, 1, 25, 1, 
-       26, 1, 27, 1, 28, 1, 29, 1, 
-       30, 1, 31, 1, 32, 1, 33, 1, 
-       34, 1, 35, 1, 36, 1, 37, 1, 
-       38, 1, 39, 1, 40, 1, 41, 1, 
-       44, 1, 45, 1, 46, 1, 47, 1, 
-       48, 1, 49, 1, 50, 1, 51, 1, 
-       52, 1, 53, 1, 54, 1, 55, 1, 
-       56, 1, 57, 1, 58, 1, 59, 1, 
-       60, 1, 61, 1, 62, 1, 63, 1, 
-       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, 79, 1, 
-       80, 1, 81, 1, 82, 1, 85, 1, 
-       86, 1, 87, 1, 88, 1, 89, 1, 
-       90, 1, 91, 1, 92, 1, 93, 1, 
-       94, 1, 95, 1, 96, 1, 97, 1, 
-       98, 1, 99, 1, 100, 1, 101, 1, 
-       102, 1, 103, 1, 104, 1, 105, 1, 
-       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, 1, 120, 1, 121, 1, 
-       122, 1, 123, 1, 124, 1, 125, 2, 
-       0, 41, 2, 0, 52, 2, 0, 61, 
-       2, 0, 72, 2, 0, 81, 2, 0, 
-       93, 2, 0, 102, 2, 0, 120, 2, 
-       4, 47, 2, 5, 42, 2, 6, 2, 
-       2, 7, 43, 2, 8, 56, 2, 10, 
-       0, 2, 10, 73, 2, 12, 88, 2, 
-       13, 83, 2, 14, 84, 2, 15, 0, 
-       2, 15, 94, 2, 16, 0, 2, 17, 
-       0, 2, 17, 121, 2, 18, 0, 2, 
-       19, 0, 2, 20, 0, 2, 20, 2, 
-       2, 24, 0, 2, 25, 0, 2, 25, 
-       2, 2, 26, 0, 2, 28, 0, 2, 
-       29, 0, 2, 29, 2, 2, 36, 0, 
-       2, 36, 121, 2, 39, 1, 2, 39, 
-       2, 2, 39, 3, 2, 39, 9, 2, 
-       39, 11
+#line 441 "lib/eolian/eo_lexer.rl"
+
+
+
+#line 365 "lib/eolian/eo_lexer.c"
+static const unsigned char _eo_tokenizer_actions[] = {
+       0, 1, 0, 1, 2, 1, 7, 1, 
+       11, 1, 17, 1, 19, 1, 20, 1, 
+       21, 1, 22, 1, 23, 1, 24, 1, 
+       25, 1, 26, 1, 27, 1, 28, 1, 
+       29, 1, 30, 1, 31, 1, 32, 1, 
+       33, 1, 34, 1, 35, 1, 36, 1, 
+       37, 1, 38, 1, 39, 1, 40, 1, 
+       41, 1, 42, 1, 43, 1, 44, 1, 
+       47, 1, 48, 1, 49, 1, 50, 1, 
+       51, 1, 52, 1, 53, 1, 54, 1, 
+       55, 1, 56, 1, 57, 1, 58, 1, 
+       59, 1, 60, 1, 61, 1, 62, 1, 
+       63, 1, 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, 
+       79, 1, 80, 1, 81, 1, 82, 1, 
+       83, 1, 84, 1, 85, 1, 88, 1, 
+       89, 1, 90, 1, 91, 1, 92, 1, 
+       93, 1, 94, 1, 95, 1, 96, 1, 
+       97, 1, 98, 1, 99, 1, 100, 1, 
+       101, 1, 102, 1, 103, 1, 104, 1, 
+       105, 1, 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, 1, 120, 1, 
+       121, 1, 122, 1, 123, 1, 124, 1, 
+       125, 1, 126, 1, 127, 1, 128, 2, 
+       0, 44, 2, 0, 55, 2, 0, 64, 
+       2, 0, 75, 2, 0, 84, 2, 0, 
+       96, 2, 0, 105, 2, 0, 123, 2, 
+       5, 50, 2, 6, 45, 2, 7, 2, 
+       2, 8, 46, 2, 9, 59, 2, 11, 
+       0, 2, 11, 76, 2, 14, 91, 2, 
+       15, 86, 2, 16, 87, 2, 17, 0, 
+       2, 17, 97, 2, 19, 0, 2, 20, 
+       0, 2, 20, 124, 2, 21, 0, 2, 
+       22, 0, 2, 23, 0, 2, 23, 2, 
+       2, 27, 0, 2, 28, 0, 2, 28, 
+       2, 2, 29, 0, 2, 31, 0, 2, 
+       32, 0, 2, 32, 2, 2, 39, 0, 
+       2, 39, 124, 2, 42, 1, 2, 42, 
+       2, 2, 42, 4, 2, 42, 10, 2, 
+       42, 13, 3, 3, 12, 2, 3, 3, 
+       18, 2
 };
 
 static const short _eo_tokenizer_key_offsets[] = {
@@ -431,40 +423,46 @@ static const short _eo_tokenizer_key_offsets[] = {
        386, 390, 391, 392, 402, 404, 407, 409, 
        412, 413, 414, 418, 419, 420, 424, 425, 
        429, 430, 431, 432, 433, 437, 439, 442, 
-       443, 447, 458, 469, 483, 486, 488, 491, 
-       502, 504, 507, 508, 509, 510, 511, 512, 
-       513, 514, 515, 516, 519, 526, 534, 535, 
-       536, 537, 538, 542, 543, 544, 545, 546, 
-       549, 556, 572, 589, 593, 594, 595, 605, 
-       607, 610, 612, 615, 616, 620, 631, 642, 
-       656, 659, 661, 664, 675, 677, 680, 681, 
-       682, 683, 684, 685, 686, 687, 688, 689, 
-       690, 691, 695, 696, 697, 701, 708, 716, 
-       717, 718, 719, 720, 721, 722, 723, 724, 
-       725, 729, 730, 731, 732, 733, 734, 735, 
-       736, 740, 747, 755, 756, 757, 758, 759, 
-       763, 771, 787, 791, 803, 804, 805, 815, 
-       817, 820, 828, 836, 844, 856, 860, 861, 
-       862, 863, 864, 865, 866, 867, 868, 872, 
-       880, 893, 898, 902, 903, 904, 905, 906, 
-       907, 919, 924, 928, 937, 941, 942, 943, 
-       944, 945, 946, 950, 959, 966, 977, 981, 
-       995, 1005, 1017, 1022, 1028, 1033, 1034, 1035, 
-       1036, 1037, 1038, 1041, 1048, 1056, 1057, 1061, 
-       1069, 1073, 1078, 1079, 1080, 1090, 1092, 1095, 
-       1105, 1117, 1129, 1130, 1131, 1132, 1133, 1134, 
-       1135, 1136, 1137, 1138, 1139, 1140, 1141, 1145, 
-       1152, 1160, 1161, 1162, 1163, 1164, 1165, 1169, 
-       1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 
-       1181, 1189, 1192, 1194, 1195, 1196, 1197, 1198, 
-       1209, 1212, 1214, 1225, 1237, 1249, 1253, 1253, 
-       1254, 1263, 1266, 1268, 1281, 1285, 1285, 1286, 
-       1295, 1298, 1300, 1301, 1302, 1303, 1304, 1305, 
-       1316, 1319, 1321, 1335, 1336, 1345, 1348, 1350, 
-       1351, 1352, 1353, 1354, 1358, 1358, 1359, 1370, 
-       1373, 1375, 1389, 1390, 1402, 1405, 1407, 1408, 
-       1410, 1413, 1415, 1418, 1419, 1420, 1421, 1422, 
-       1425, 1426, 1427
+       443, 447, 458, 468, 480, 492, 504, 516, 
+       528, 540, 552, 562, 572, 585, 597, 609, 
+       621, 633, 645, 657, 669, 676, 688, 700, 
+       712, 724, 736, 748, 760, 772, 775, 777, 
+       780, 791, 793, 796, 797, 798, 799, 800, 
+       801, 802, 803, 804, 805, 808, 815, 823, 
+       824, 825, 826, 827, 831, 832, 833, 834, 
+       835, 838, 845, 861, 878, 882, 883, 884, 
+       894, 896, 899, 901, 904, 905, 909, 920, 
+       930, 942, 954, 966, 978, 990, 1002, 1014, 
+       1024, 1034, 1047, 1059, 1071, 1083, 1095, 1107, 
+       1119, 1131, 1138, 1150, 1162, 1174, 1186, 1198, 
+       1210, 1222, 1234, 1237, 1239, 1242, 1253, 1255, 
+       1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 
+       1266, 1267, 1268, 1269, 1273, 1274, 1275, 1279, 
+       1286, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 
+       1301, 1302, 1303, 1307, 1308, 1309, 1310, 1311, 
+       1312, 1313, 1314, 1318, 1325, 1333, 1334, 1335, 
+       1336, 1337, 1341, 1349, 1365, 1369, 1381, 1382, 
+       1383, 1393, 1395, 1398, 1406, 1414, 1422, 1434, 
+       1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 
+       1446, 1450, 1458, 1471, 1476, 1480, 1481, 1482, 
+       1483, 1484, 1485, 1497, 1502, 1506, 1515, 1519, 
+       1520, 1521, 1522, 1523, 1524, 1528, 1537, 1544, 
+       1555, 1559, 1573, 1583, 1595, 1600, 1606, 1611, 
+       1612, 1613, 1614, 1615, 1616, 1619, 1626, 1634, 
+       1635, 1639, 1647, 1651, 1656, 1657, 1658, 1668, 
+       1670, 1673, 1683, 1695, 1707, 1708, 1709, 1710, 
+       1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, 
+       1719, 1723, 1730, 1738, 1739, 1740, 1741, 1742, 
+       1743, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 
+       1754, 1755, 1759, 1767, 1770, 1772, 1773, 1774, 
+       1775, 1776, 1787, 1790, 1792, 1803, 1815, 1827, 
+       1831, 1831, 1832, 1841, 1844, 1846, 1859, 1863, 
+       1863, 1864, 1873, 1876, 1878, 1879, 1880, 1881, 
+       1882, 1883, 1895, 1898, 1900, 1911, 1924, 1925, 
+       1934, 1937, 1939, 1940, 1941, 1942, 1943, 1947, 
+       1947, 1948, 1960, 1963, 1965, 1976, 1989, 1990, 
+       2002, 2005, 2007, 2008, 2010, 2013, 2015, 2018, 
+       2019, 2020, 2021, 2022, 2025, 2026, 2027
 };
 
 static const char _eo_tokenizer_trans_keys[] = {
@@ -525,122 +523,197 @@ static const char _eo_tokenizer_trans_keys[] = {
        115, 10, 123, 0, 32, 10, 42, 10, 
        42, 47, 10, 10, 123, 0, 32, 10, 
        95, 123, 0, 32, 48, 57, 65, 90, 
-       97, 122, 10, 95, 123, 0, 32, 48, 
-       57, 65, 90, 97, 122, 9, 10, 13, 
-       32, 95, 123, 0, 31, 48, 57, 65, 
-       90, 97, 122, 10, 42, 64, 10, 42, 
-       10, 42, 47, 10, 42, 95, 0, 32, 
-       48, 57, 64, 90, 97, 122, 10, 42, 
-       10, 42, 47, 10, 110, 115, 116, 59, 
-       103, 97, 99, 121, 9, 13, 32, 9, 
-       13, 32, 65, 90, 97, 122, 59, 95, 
-       48, 57, 65, 90, 97, 122, 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, 60, 
-       62, 95, 40, 42, 45, 46, 48, 57, 
-       64, 90, 97, 122, 9, 13, 32, 59, 
+       97, 122, 10, 123, 0, 32, 48, 57, 
+       65, 90, 97, 122, 10, 95, 111, 123, 
+       0, 32, 48, 57, 65, 90, 97, 122, 
+       10, 95, 116, 123, 0, 32, 48, 57, 
+       65, 90, 97, 122, 10, 95, 101, 123, 
+       0, 32, 48, 57, 65, 90, 97, 122, 
+       10, 95, 99, 123, 0, 32, 48, 57, 
+       65, 90, 97, 122, 10, 95, 116, 123, 
+       0, 32, 48, 57, 65, 90, 97, 122, 
+       10, 95, 101, 123, 0, 32, 48, 57, 
+       65, 90, 97, 122, 10, 95, 100, 123, 
+       0, 32, 48, 57, 65, 90, 97, 122, 
+       9, 13, 32, 95, 48, 57, 65, 90, 
+       97, 122, 9, 13, 32, 112, 48, 57, 
+       65, 90, 97, 122, 10, 95, 114, 117, 
+       123, 0, 32, 48, 57, 65, 90, 97, 
+       122, 10, 95, 111, 123, 0, 32, 48, 
+       57, 65, 90, 97, 122, 10, 95, 116, 
+       123, 0, 32, 48, 57, 65, 90, 97, 
+       122, 10, 95, 101, 123, 0, 32, 48, 
+       57, 65, 90, 97, 122, 10, 95, 99, 
+       123, 0, 32, 48, 57, 65, 90, 97, 
+       122, 10, 95, 116, 123, 0, 32, 48, 
+       57, 65, 90, 97, 122, 10, 95, 101, 
+       123, 0, 32, 48, 57, 65, 90, 97, 
+       122, 10, 95, 100, 123, 0, 32, 48, 
+       57, 65, 90, 97, 122, 95, 48, 57, 
+       65, 90, 97, 122, 10, 95, 98, 123, 
+       0, 32, 48, 57, 65, 90, 97, 122, 
+       10, 95, 108, 123, 0, 32, 48, 57, 
+       65, 90, 97, 122, 10, 95, 105, 123, 
+       0, 32, 48, 57, 65, 90, 97, 122, 
+       10, 95, 99, 123, 0, 32, 48, 57, 
+       65, 90, 97, 122, 10, 95, 98, 123, 
+       0, 32, 48, 57, 65, 90, 97, 122, 
+       10, 95, 108, 123, 0, 32, 48, 57, 
+       65, 90, 97, 122, 10, 95, 105, 123, 
+       0, 32, 48, 57, 65, 90, 97, 122, 
+       10, 95, 99, 123, 0, 32, 48, 57, 
+       65, 90, 97, 122, 10, 42, 64, 10, 
+       42, 10, 42, 47, 10, 42, 95, 0, 
+       32, 48, 57, 64, 90, 97, 122, 10, 
+       42, 10, 42, 47, 10, 110, 115, 116, 
+       59, 103, 97, 99, 121, 9, 13, 32, 
+       9, 13, 32, 65, 90, 97, 122, 59, 
+       95, 48, 57, 65, 90, 97, 122, 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, 
        60, 62, 95, 40, 42, 45, 46, 48, 
        57, 64, 90, 97, 122, 9, 13, 32, 
-       47, 42, 64, 10, 95, 0, 32, 48, 
-       57, 64, 90, 97, 122, 10, 42, 10, 
-       42, 47, 10, 42, 10, 42, 47, 10, 
-       10, 123, 0, 32, 10, 95, 123, 0, 
+       59, 60, 62, 95, 40, 42, 45, 46, 
+       48, 57, 64, 90, 97, 122, 9, 13, 
+       32, 47, 42, 64, 10, 95, 0, 32, 
+       48, 57, 64, 90, 97, 122, 10, 42, 
+       10, 42, 47, 10, 42, 10, 42, 47, 
+       10, 10, 123, 0, 32, 10, 95, 123, 
+       0, 32, 48, 57, 65, 90, 97, 122, 
+       10, 123, 0, 32, 48, 57, 65, 90, 
+       97, 122, 10, 95, 111, 123, 0, 32, 
+       48, 57, 65, 90, 97, 122, 10, 95, 
+       116, 123, 0, 32, 48, 57, 65, 90, 
+       97, 122, 10, 95, 101, 123, 0, 32, 
+       48, 57, 65, 90, 97, 122, 10, 95, 
+       99, 123, 0, 32, 48, 57, 65, 90, 
+       97, 122, 10, 95, 116, 123, 0, 32, 
+       48, 57, 65, 90, 97, 122, 10, 95, 
+       101, 123, 0, 32, 48, 57, 65, 90, 
+       97, 122, 10, 95, 100, 123, 0, 32, 
+       48, 57, 65, 90, 97, 122, 9, 13, 
+       32, 95, 48, 57, 65, 90, 97, 122, 
+       9, 13, 32, 112, 48, 57, 65, 90, 
+       97, 122, 10, 95, 114, 117, 123, 0, 
        32, 48, 57, 65, 90, 97, 122, 10, 
-       95, 123, 0, 32, 48, 57, 65, 90, 
-       97, 122, 9, 10, 13, 32, 95, 123, 
-       0, 31, 48, 57, 65, 90, 97, 122, 
-       10, 42, 64, 10, 42, 10, 42, 47, 
-       10, 42, 95, 0, 32, 48, 57, 64, 
-       90, 97, 122, 10, 42, 10, 42, 47, 
-       10, 110, 115, 116, 114, 117, 99, 116, 
-       111, 114, 115, 10, 123, 0, 32, 116, 
-       97, 10, 58, 0, 32, 10, 0, 32, 
-       65, 90, 97, 122, 59, 95, 48, 57, 
-       65, 90, 97, 122, 115, 116, 114, 117, 
+       95, 111, 123, 0, 32, 48, 57, 65, 
+       90, 97, 122, 10, 95, 116, 123, 0, 
+       32, 48, 57, 65, 90, 97, 122, 10, 
+       95, 101, 123, 0, 32, 48, 57, 65, 
+       90, 97, 122, 10, 95, 99, 123, 0, 
+       32, 48, 57, 65, 90, 97, 122, 10, 
+       95, 116, 123, 0, 32, 48, 57, 65, 
+       90, 97, 122, 10, 95, 101, 123, 0, 
+       32, 48, 57, 65, 90, 97, 122, 10, 
+       95, 100, 123, 0, 32, 48, 57, 65, 
+       90, 97, 122, 95, 48, 57, 65, 90, 
+       97, 122, 10, 95, 98, 123, 0, 32, 
+       48, 57, 65, 90, 97, 122, 10, 95, 
+       108, 123, 0, 32, 48, 57, 65, 90, 
+       97, 122, 10, 95, 105, 123, 0, 32, 
+       48, 57, 65, 90, 97, 122, 10, 95, 
+       99, 123, 0, 32, 48, 57, 65, 90, 
+       97, 122, 10, 95, 98, 123, 0, 32, 
+       48, 57, 65, 90, 97, 122, 10, 95, 
+       108, 123, 0, 32, 48, 57, 65, 90, 
+       97, 122, 10, 95, 105, 123, 0, 32, 
+       48, 57, 65, 90, 97, 122, 10, 95, 
+       99, 123, 0, 32, 48, 57, 65, 90, 
+       97, 122, 10, 42, 64, 10, 42, 10, 
+       42, 47, 10, 42, 95, 0, 32, 48, 
+       57, 64, 90, 97, 122, 10, 42, 10, 
+       42, 47, 10, 110, 115, 116, 114, 117, 
        99, 116, 111, 114, 115, 10, 123, 0, 
-       32, 95, 112, 114, 101, 102, 105, 120, 
-       10, 58, 0, 32, 10, 0, 32, 65, 
-       90, 97, 122, 59, 95, 48, 57, 65, 
-       90, 97, 122, 101, 110, 116, 115, 10, 
-       123, 0, 32, 10, 125, 0, 32, 65, 
-       90, 97, 122, 9, 10, 13, 32, 40, 
-       44, 59, 95, 0, 31, 48, 57, 65, 
+       32, 116, 97, 10, 58, 0, 32, 10, 
+       0, 32, 65, 90, 97, 122, 59, 95, 
+       48, 57, 65, 90, 97, 122, 115, 116, 
+       114, 117, 99, 116, 111, 114, 115, 10, 
+       123, 0, 32, 95, 112, 114, 101, 102, 
+       105, 120, 10, 58, 0, 32, 10, 0, 
+       32, 65, 90, 97, 122, 59, 95, 48, 
+       57, 65, 90, 97, 122, 101, 110, 116, 
+       115, 10, 123, 0, 32, 10, 125, 0, 
+       32, 65, 90, 97, 122, 9, 10, 13, 
+       32, 40, 44, 59, 95, 0, 31, 48, 
+       57, 65, 90, 97, 122, 10, 59, 0, 
+       32, 9, 10, 13, 32, 47, 125, 0, 
+       31, 65, 90, 97, 122, 42, 64, 10, 
+       95, 0, 32, 48, 57, 64, 90, 97, 
+       122, 10, 42, 10, 42, 47, 10, 125, 
+       0, 32, 65, 90, 97, 122, 9, 10, 
+       13, 32, 40, 59, 0, 31, 9, 13, 
+       32, 95, 65, 90, 97, 122, 9, 13, 
+       32, 41, 42, 95, 48, 57, 65, 90, 
+       97, 122, 10, 59, 0, 32, 112, 108, 
+       101, 109, 101, 110, 116, 115, 10, 123, 
+       0, 32, 10, 125, 0, 32, 65, 90, 
+       97, 122, 10, 58, 59, 95, 123, 0, 
+       32, 48, 57, 65, 90, 97, 122, 10, 
+       59, 123, 0, 32, 10, 108, 0, 32, 
+       101, 103, 97, 99, 121, 9, 10, 13, 
+       32, 59, 123, 0, 31, 65, 90, 97, 
+       122, 10, 59, 123, 0, 32, 10, 125, 
+       0, 32, 10, 59, 125, 0, 32, 65, 
+       90, 97, 122, 10, 112, 0, 32, 97, 
+       114, 97, 109, 115, 10, 123, 0, 32, 
+       10, 58, 59, 0, 32, 65, 90, 97, 
+       122, 9, 13, 32, 65, 90, 97, 122, 
+       10, 59, 95, 0, 32, 48, 57, 65, 
        90, 97, 122, 10, 59, 0, 32, 9, 
-       10, 13, 32, 47, 125, 0, 31, 65, 
-       90, 97, 122, 42, 64, 10, 95, 0, 
-       32, 48, 57, 64, 90, 97, 122, 10, 
-       42, 10, 42, 47, 10, 125, 0, 32, 
-       65, 90, 97, 122, 9, 10, 13, 32, 
-       40, 59, 0, 31, 9, 13, 32, 95, 
-       65, 90, 97, 122, 9, 13, 32, 41, 
-       42, 95, 48, 57, 65, 90, 97, 122, 
-       10, 59, 0, 32, 112, 108, 101, 109, 
-       101, 110, 116, 115, 10, 123, 0, 32, 
-       10, 125, 0, 32, 65, 90, 97, 122, 
-       10, 58, 59, 95, 123, 0, 32, 48, 
-       57, 65, 90, 97, 122, 10, 59, 123, 
-       0, 32, 10, 108, 0, 32, 101, 103, 
-       97, 99, 121, 9, 10, 13, 32, 59, 
+       10, 13, 32, 47, 58, 59, 125, 0, 
+       31, 65, 90, 97, 122, 10, 58, 59, 
+       125, 0, 32, 65, 90, 97, 122, 9, 
+       13, 32, 58, 59, 95, 48, 57, 65, 
+       90, 97, 122, 9, 13, 32, 58, 59, 
+       10, 59, 114, 125, 0, 32, 10, 114, 
+       125, 0, 32, 101, 116, 117, 114, 110, 
+       9, 13, 32, 9, 13, 32, 65, 90, 
+       97, 122, 58, 95, 48, 57, 65, 90, 
+       97, 122, 58, 65, 90, 97, 122, 59, 
+       95, 48, 57, 65, 90, 97, 122, 10, 
+       125, 0, 32, 10, 59, 125, 0, 32, 
+       42, 64, 10, 95, 0, 32, 48, 57, 
+       64, 90, 97, 122, 10, 42, 10, 42, 
+       47, 10, 58, 59, 125, 0, 32, 65, 
+       90, 97, 122, 9, 10, 13, 32, 59, 
        123, 0, 31, 65, 90, 97, 122, 10, 
-       59, 123, 0, 32, 10, 125, 0, 32, 
-       10, 59, 125, 0, 32, 65, 90, 97, 
-       122, 10, 112, 0, 32, 97, 114, 97, 
-       109, 115, 10, 123, 0, 32, 10, 58, 
-       59, 0, 32, 65, 90, 97, 122, 9, 
-       13, 32, 65, 90, 97, 122, 10, 59, 
-       95, 0, 32, 48, 57, 65, 90, 97, 
-       122, 10, 59, 0, 32, 9, 10, 13, 
-       32, 47, 58, 59, 125, 0, 31, 65, 
-       90, 97, 122, 10, 58, 59, 125, 0, 
-       32, 65, 90, 97, 122, 9, 13, 32, 
-       58, 59, 95, 48, 57, 65, 90, 97, 
-       122, 9, 13, 32, 58, 59, 10, 59, 
-       114, 125, 0, 32, 10, 114, 125, 0, 
-       32, 101, 116, 117, 114, 110, 9, 13, 
-       32, 9, 13, 32, 65, 90, 97, 122, 
-       58, 95, 48, 57, 65, 90, 97, 122, 
-       58, 65, 90, 97, 122, 59, 95, 48, 
-       57, 65, 90, 97, 122, 10, 125, 0, 
-       32, 10, 59, 125, 0, 32, 42, 64, 
-       10, 95, 0, 32, 48, 57, 64, 90, 
-       97, 122, 10, 42, 10, 42, 47, 10, 
-       58, 59, 125, 0, 32, 65, 90, 97, 
-       122, 9, 10, 13, 32, 59, 123, 0, 
-       31, 65, 90, 97, 122, 10, 59, 95, 
-       123, 0, 32, 48, 57, 65, 90, 97, 
-       122, 58, 103, 97, 99, 121, 95, 112, 
-       114, 101, 102, 105, 120, 10, 58, 0, 
-       32, 10, 0, 32, 65, 90, 97, 122, 
-       59, 95, 48, 57, 65, 90, 97, 122, 
-       116, 104, 111, 100, 115, 10, 123, 0, 
-       32, 111, 112, 101, 114, 116, 105, 101, 
-       115, 10, 123, 0, 32, 10, 47, 97, 
-       99, 105, 109, 0, 32, 10, 0, 32, 
-       42, 47, 98, 108, 110, 105, 10, 47, 
-       108, 114, 125, 0, 32, 65, 90, 97, 
+       59, 95, 123, 0, 32, 48, 57, 65, 
+       90, 97, 122, 58, 103, 97, 99, 121, 
+       95, 112, 114, 101, 102, 105, 120, 10, 
+       58, 0, 32, 10, 0, 32, 65, 90, 
+       97, 122, 59, 95, 48, 57, 65, 90, 
+       97, 122, 116, 104, 111, 100, 115, 10, 
+       123, 0, 32, 111, 112, 101, 114, 116, 
+       105, 101, 115, 10, 123, 0, 32, 10, 
+       47, 97, 99, 105, 109, 0, 32, 10, 
+       0, 32, 42, 47, 98, 108, 110, 105, 
+       10, 47, 108, 114, 125, 0, 32, 65, 
+       90, 97, 122, 10, 0, 32, 42, 47, 
+       9, 13, 32, 58, 95, 48, 57, 65, 
+       90, 97, 122, 9, 13, 32, 58, 95, 
+       101, 48, 57, 65, 90, 97, 122, 9, 
+       13, 32, 58, 95, 101, 48, 57, 65, 
+       90, 97, 122, 9, 13, 32, 47, 59, 
+       10, 47, 125, 0, 32, 64, 90, 97, 
        122, 10, 0, 32, 42, 47, 9, 13, 
-       32, 58, 95, 48, 57, 65, 90, 97, 
-       122, 9, 13, 32, 58, 95, 101, 48, 
-       57, 65, 90, 97, 122, 9, 13, 32, 
-       58, 95, 101, 48, 57, 65, 90, 97, 
-       122, 9, 13, 32, 47, 59, 10, 47, 
-       125, 0, 32, 64, 90, 97, 122, 10, 
-       0, 32, 42, 47, 9, 13, 32, 42, 
-       60, 62, 95, 48, 57, 64, 90, 97, 
-       122, 9, 13, 32, 47, 59, 10, 47, 
-       103, 107, 115, 118, 125, 0, 32, 10, 
-       0, 32, 42, 47, 101, 101, 101, 97, 
-       59, 10, 47, 125, 0, 32, 48, 57, 
-       65, 90, 97, 122, 10, 0, 32, 42, 
-       47, 9, 10, 13, 32, 95, 123, 0, 
-       31, 48, 57, 65, 90, 97, 122, 59, 
-       10, 47, 99, 108, 112, 114, 125, 0, 
-       32, 10, 0, 32, 42, 47, 111, 101, 
-       97, 101, 9, 13, 32, 47, 59, 10, 
-       47, 125, 0, 32, 48, 57, 65, 90, 
-       97, 122, 10, 0, 32, 42, 47, 9, 
-       10, 13, 32, 95, 123, 0, 31, 48, 
+       32, 42, 60, 62, 95, 48, 57, 64, 
+       90, 97, 122, 9, 13, 32, 47, 59, 
+       10, 47, 103, 107, 115, 118, 125, 0, 
+       32, 10, 0, 32, 42, 47, 101, 101, 
+       101, 97, 59, 10, 47, 112, 125, 0, 
+       32, 48, 57, 65, 90, 97, 122, 10, 
+       0, 32, 42, 47, 10, 95, 123, 0, 
+       32, 48, 57, 65, 90, 97, 122, 10, 
+       95, 114, 117, 123, 0, 32, 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, 112, 125, 
+       0, 32, 48, 57, 65, 90, 97, 122, 
+       10, 0, 32, 42, 47, 10, 95, 123, 
+       0, 32, 48, 57, 65, 90, 97, 122, 
+       10, 95, 114, 117, 123, 0, 32, 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, 
@@ -662,40 +735,46 @@ static const char _eo_tokenizer_single_lengths[] = {
        4, 1, 1, 2, 2, 3, 2, 3, 
        1, 1, 2, 1, 1, 2, 1, 2, 
        1, 1, 1, 1, 2, 2, 3, 1, 
-       2, 3, 3, 6, 3, 2, 3, 3, 
-       2, 3, 1, 1, 1, 1, 1, 1, 
-       1, 1, 1, 3, 3, 2, 1, 1, 
-       1, 1, 2, 1, 1, 1, 1, 3, 
-       3, 6, 7, 4, 1, 1, 2, 2, 
-       3, 2, 3, 1, 2, 3, 3, 6, 
-       3, 2, 3, 3, 2, 3, 1, 1, 
+       2, 3, 2, 4, 4, 4, 4, 4, 
+       4, 4, 4, 4, 5, 4, 4, 4, 
+       4, 4, 4, 4, 1, 4, 4, 4, 
+       4, 4, 4, 4, 4, 3, 2, 3, 
+       3, 2, 3, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 3, 3, 2, 1, 
+       1, 1, 1, 2, 1, 1, 1, 1, 
+       3, 3, 6, 7, 4, 1, 1, 2, 
+       2, 3, 2, 3, 1, 2, 3, 2, 
+       4, 4, 4, 4, 4, 4, 4, 4, 
+       4, 5, 4, 4, 4, 4, 4, 4, 
+       4, 1, 4, 4, 4, 4, 4, 4, 
+       4, 4, 3, 2, 3, 3, 2, 3, 
+       1, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 1, 2, 1, 1, 2, 1, 
+       2, 1, 1, 1, 1, 1, 1, 1, 
+       1, 1, 2, 1, 1, 1, 1, 1, 
+       1, 1, 2, 1, 2, 1, 1, 1, 
+       1, 2, 2, 8, 2, 6, 1, 1, 
+       2, 2, 3, 2, 6, 4, 6, 2, 
        1, 1, 1, 1, 1, 1, 1, 1, 
-       1, 2, 1, 1, 2, 1, 2, 1, 
+       2, 2, 5, 3, 2, 1, 1, 1, 
+       1, 1, 6, 3, 2, 3, 2, 1, 
+       1, 1, 1, 1, 2, 3, 3, 3, 
+       2, 8, 4, 6, 5, 4, 3, 1, 
+       1, 1, 1, 1, 3, 3, 2, 1, 
+       0, 2, 2, 3, 1, 1, 2, 2, 
+       3, 4, 6, 4, 1, 1, 1, 1, 
        1, 1, 1, 1, 1, 1, 1, 1, 
+       2, 1, 2, 1, 1, 1, 1, 1, 
        2, 1, 1, 1, 1, 1, 1, 1, 
-       2, 1, 2, 1, 1, 1, 1, 2, 
-       2, 8, 2, 6, 1, 1, 2, 2, 
-       3, 2, 6, 4, 6, 2, 1, 1, 
-       1, 1, 1, 1, 1, 1, 2, 2, 
-       5, 3, 2, 1, 1, 1, 1, 1, 
-       6, 3, 2, 3, 2, 1, 1, 1, 
-       1, 1, 2, 3, 3, 3, 2, 8, 
-       4, 6, 5, 4, 3, 1, 1, 1, 
-       1, 1, 3, 3, 2, 1, 0, 2, 
-       2, 3, 1, 1, 2, 2, 3, 4, 
-       6, 4, 1, 1, 1, 1, 1, 1, 
-       1, 1, 1, 1, 1, 1, 2, 1, 
-       2, 1, 1, 1, 1, 1, 2, 1, 
-       1, 1, 1, 1, 1, 1, 1, 2, 
-       6, 1, 2, 1, 1, 1, 1, 5, 
-       1, 2, 5, 6, 6, 4, 0, 1, 
-       3, 1, 2, 7, 4, 0, 1, 7, 
-       1, 2, 1, 1, 1, 1, 1, 3, 
-       1, 2, 6, 1, 7, 1, 2, 1, 
-       1, 1, 1, 4, 0, 1, 3, 1, 
-       2, 6, 1, 10, 1, 2, 1, 2, 
-       1, 2, 1, 1, 1, 1, 1, 1, 
-       1, 1, 1
+       1, 2, 6, 1, 2, 1, 1, 1, 
+       1, 5, 1, 2, 5, 6, 6, 4, 
+       0, 1, 3, 1, 2, 7, 4, 0, 
+       1, 7, 1, 2, 1, 1, 1, 1, 
+       1, 4, 1, 2, 3, 5, 1, 7, 
+       1, 2, 1, 1, 1, 1, 4, 0, 
+       1, 4, 1, 2, 3, 5, 1, 10, 
+       1, 2, 1, 2, 1, 2, 1, 1, 
+       1, 1, 1, 1, 1, 1, 1
 };
 
 static const char _eo_tokenizer_range_lengths[] = {
@@ -711,40 +790,46 @@ static const char _eo_tokenizer_range_lengths[] = {
        0, 0, 0, 4, 0, 0, 0, 0, 
        0, 0, 1, 0, 0, 1, 0, 1, 
        0, 0, 0, 0, 1, 0, 0, 0, 
-       1, 4, 4, 4, 0, 0, 0, 4, 
+       1, 4, 4, 4, 4, 4, 4, 4, 
+       4, 4, 3, 3, 4, 4, 4, 4, 
+       4, 4, 4, 4, 3, 4, 4, 4, 
+       4, 4, 4, 4, 4, 0, 0, 0, 
+       4, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 2, 3, 0, 
+       0, 0, 0, 1, 0, 0, 0, 0, 
+       0, 2, 5, 5, 0, 0, 0, 4, 
+       0, 0, 0, 0, 0, 1, 4, 4, 
+       4, 4, 4, 4, 4, 4, 4, 3, 
+       3, 4, 4, 4, 4, 4, 4, 4, 
+       4, 3, 4, 4, 4, 4, 4, 4, 
+       4, 4, 0, 0, 0, 4, 0, 0, 
        0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 2, 3, 0, 0, 
+       0, 0, 0, 1, 0, 0, 1, 3, 
+       3, 0, 0, 0, 0, 0, 0, 0, 
        0, 0, 1, 0, 0, 0, 0, 0, 
-       2, 5, 5, 0, 0, 0, 4, 0, 
-       0, 0, 0, 0, 1, 4, 4, 4
-       0, 0, 0, 4, 0, 0, 0, 0
+       0, 0, 1, 3, 3, 0, 0, 0, 
+       0, 1, 3, 4, 1, 3, 0, 0
+       4, 0, 0, 3, 1, 2, 3, 1
        0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 1, 0, 0, 1, 3, 3, 0, 
+       1, 3, 4, 1, 1, 0, 0, 0, 
+       0, 0, 3, 1, 1, 3, 1, 0, 
+       0, 0, 0, 0, 1, 3, 2, 4, 
+       1, 3, 3, 3, 0, 1, 1, 0, 
+       0, 0, 0, 0, 0, 2, 3, 0, 
+       2, 3, 1, 1, 0, 0, 4, 0, 
+       0, 3, 3, 4, 0, 0, 0, 0, 
        0, 0, 0, 0, 0, 0, 0, 0, 
+       1, 3, 3, 0, 0, 0, 0, 0, 
+       1, 0, 0, 0, 0, 0, 0, 0, 
+       0, 1, 1, 1, 0, 0, 0, 0, 
+       0, 3, 1, 0, 3, 3, 3, 0, 
+       0, 0, 3, 1, 0, 3, 0, 0, 
+       0, 1, 1, 0, 0, 0, 0, 0, 
+       0, 4, 1, 0, 4, 4, 0, 1, 
        1, 0, 0, 0, 0, 0, 0, 0, 
-       1, 3, 3, 0, 0, 0, 0, 1, 
-       3, 4, 1, 3, 0, 0, 4, 0, 
-       0, 3, 1, 2, 3, 1, 0, 0, 
-       0, 0, 0, 0, 0, 0, 1, 3, 
-       4, 1, 1, 0, 0, 0, 0, 0, 
-       3, 1, 1, 3, 1, 0, 0, 0, 
-       0, 0, 1, 3, 2, 4, 1, 3, 
-       3, 3, 0, 1, 1, 0, 0, 0, 
-       0, 0, 0, 2, 3, 0, 2, 3, 
-       1, 1, 0, 0, 4, 0, 0, 3, 
-       3, 4, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 1, 3, 
-       3, 0, 0, 0, 0, 0, 1, 0, 
-       0, 0, 0, 0, 0, 0, 0, 1, 
-       1, 1, 0, 0, 0, 0, 0, 3, 
-       1, 0, 3, 3, 3, 0, 0, 0, 
-       3, 1, 0, 3, 0, 0, 0, 1, 
-       1, 0, 0, 0, 0, 0, 0, 4, 
-       1, 0, 4, 0, 1, 1, 0, 0, 
-       0, 0, 0, 0, 0, 0, 4, 1, 
-       0, 4, 0, 1, 1, 0, 0, 0, 
-       1, 0, 1, 0, 0, 0, 0, 1, 
-       0, 0, 0
+       0, 4, 1, 0, 4, 4, 0, 1, 
+       1, 0, 0, 0, 1, 0, 1, 0, 
+       0, 0, 0, 1, 0, 0, 0
 };
 
 static const short _eo_tokenizer_index_offsets[] = {
@@ -760,40 +845,46 @@ static const short _eo_tokenizer_index_offsets[] = {
        371, 376, 378, 380, 387, 390, 394, 397, 
        401, 403, 405, 409, 411, 413, 417, 419, 
        423, 425, 427, 429, 431, 435, 438, 442, 
-       444, 448, 456, 464, 475, 479, 482, 486, 
-       494, 497, 501, 503, 505, 507, 509, 511, 
-       513, 515, 517, 519, 523, 529, 535, 537, 
-       539, 541, 543, 547, 549, 551, 553, 555, 
-       559, 565, 577, 590, 595, 597, 599, 606, 
-       609, 613, 616, 620, 622, 626, 634, 642, 
-       653, 657, 660, 664, 672, 675, 679, 681, 
-       683, 685, 687, 689, 691, 693, 695, 697, 
-       699, 701, 705, 707, 709, 713, 718, 724, 
-       726, 728, 730, 732, 734, 736, 738, 740, 
-       742, 746, 748, 750, 752, 754, 756, 758, 
-       760, 764, 769, 775, 777, 779, 781, 783, 
-       787, 793, 806, 810, 820, 822, 824, 831, 
-       834, 838, 844, 852, 859, 869, 873, 875, 
-       877, 879, 881, 883, 885, 887, 889, 893, 
-       899, 909, 914, 918, 920, 922, 924, 926, 
-       928, 938, 943, 947, 954, 958, 960, 962, 
-       964, 966, 968, 972, 979, 985, 993, 997, 
-       1009, 1017, 1027, 1033, 1039, 1044, 1046, 1048, 
-       1050, 1052, 1054, 1058, 1064, 1070, 1072, 1075, 
-       1081, 1085, 1090, 1092, 1094, 1101, 1104, 1108, 
-       1116, 1126, 1135, 1137, 1139, 1141, 1143, 1145, 
-       1147, 1149, 1151, 1153, 1155, 1157, 1159, 1163, 
-       1168, 1174, 1176, 1178, 1180, 1182, 1184, 1188, 
-       1190, 1192, 1194, 1196, 1198, 1200, 1202, 1204, 
-       1208, 1216, 1219, 1222, 1224, 1226, 1228, 1230, 
-       1239, 1242, 1245, 1254, 1264, 1274, 1279, 1280, 
-       1282, 1289, 1292, 1295, 1306, 1311, 1312, 1314, 
-       1323, 1326, 1329, 1331, 1333, 1335, 1337, 1339, 
-       1347, 1350, 1353, 1364, 1366, 1375, 1378, 1381, 
-       1383, 1385, 1387, 1389, 1394, 1395, 1397, 1405, 
-       1408, 1411, 1422, 1424, 1436, 1439, 1442, 1444, 
-       1447, 1450, 1453, 1456, 1458, 1460, 1462, 1464, 
-       1467, 1469, 1471
+       444, 448, 456, 463, 472, 481, 490, 499, 
+       508, 517, 526, 534, 542, 552, 561, 570, 
+       579, 588, 597, 606, 615, 620, 629, 638, 
+       647, 656, 665, 674, 683, 692, 696, 699, 
+       703, 711, 714, 718, 720, 722, 724, 726, 
+       728, 730, 732, 734, 736, 740, 746, 752, 
+       754, 756, 758, 760, 764, 766, 768, 770, 
+       772, 776, 782, 794, 807, 812, 814, 816, 
+       823, 826, 830, 833, 837, 839, 843, 851, 
+       858, 867, 876, 885, 894, 903, 912, 921, 
+       929, 937, 947, 956, 965, 974, 983, 992, 
+       1001, 1010, 1015, 1024, 1033, 1042, 1051, 1060, 
+       1069, 1078, 1087, 1091, 1094, 1098, 1106, 1109, 
+       1113, 1115, 1117, 1119, 1121, 1123, 1125, 1127, 
+       1129, 1131, 1133, 1135, 1139, 1141, 1143, 1147, 
+       1152, 1158, 1160, 1162, 1164, 1166, 1168, 1170, 
+       1172, 1174, 1176, 1180, 1182, 1184, 1186, 1188, 
+       1190, 1192, 1194, 1198, 1203, 1209, 1211, 1213, 
+       1215, 1217, 1221, 1227, 1240, 1244, 1254, 1256, 
+       1258, 1265, 1268, 1272, 1278, 1286, 1293, 1303, 
+       1307, 1309, 1311, 1313, 1315, 1317, 1319, 1321, 
+       1323, 1327, 1333, 1343, 1348, 1352, 1354, 1356, 
+       1358, 1360, 1362, 1372, 1377, 1381, 1388, 1392, 
+       1394, 1396, 1398, 1400, 1402, 1406, 1413, 1419, 
+       1427, 1431, 1443, 1451, 1461, 1467, 1473, 1478, 
+       1480, 1482, 1484, 1486, 1488, 1492, 1498, 1504, 
+       1506, 1509, 1515, 1519, 1524, 1526, 1528, 1535, 
+       1538, 1542, 1550, 1560, 1569, 1571, 1573, 1575, 
+       1577, 1579, 1581, 1583, 1585, 1587, 1589, 1591, 
+       1593, 1597, 1602, 1608, 1610, 1612, 1614, 1616, 
+       1618, 1622, 1624, 1626, 1628, 1630, 1632, 1634, 
+       1636, 1638, 1642, 1650, 1653, 1656, 1658, 1660, 
+       1662, 1664, 1673, 1676, 1679, 1688, 1698, 1708, 
+       1713, 1714, 1716, 1723, 1726, 1729, 1740, 1745, 
+       1746, 1748, 1757, 1760, 1763, 1765, 1767, 1769, 
+       1771, 1773, 1782, 1785, 1788, 1796, 1806, 1808, 
+       1817, 1820, 1823, 1825, 1827, 1829, 1831, 1836, 
+       1837, 1839, 1848, 1851, 1854, 1862, 1872, 1874, 
+       1886, 1889, 1892, 1894, 1897, 1900, 1903, 1906, 
+       1908, 1910, 1912, 1914, 1917, 1919, 1921
 };
 
 static const short _eo_tokenizer_indicies[] = {
@@ -853,215 +944,278 @@ static const short _eo_tokenizer_indicies[] = {
        127, 145, 127, 146, 127, 147, 127, 148, 
        149, 147, 127, 152, 153, 151, 152, 153, 
        154, 151, 156, 155, 158, 159, 157, 150, 
-       158, 160, 159, 157, 160, 160, 160, 150, 
-       162, 160, 163, 161, 160, 160, 160, 150, 
-       164, 162, 164, 164, 165, 163, 161, 165, 
-       165, 165, 150, 168, 169, 170, 167, 168, 
-       169, 167, 168, 169, 171, 167, 172, 169, 
-       173, 170, 173, 173, 173, 167, 175, 176, 
-       174, 175, 176, 177, 174, 179, 178, 180, 
-       166, 181, 166, 182, 166, 183, 166, 184, 
-       166, 185, 166, 186, 166, 187, 166, 188, 
-       188, 188, 166, 188, 188, 188, 189, 189, 
-       166, 191, 190, 190, 190, 190, 166, 192, 
-       166, 193, 166, 194, 166, 195, 166, 196, 
-       197, 195, 166, 198, 166, 199, 166, 200, 
-       166, 201, 166, 202, 202, 202, 166, 202, 
-       202, 202, 203, 203, 166, 204, 204, 204, 
-       204, 204, 204, 204, 204, 204, 204, 204, 
-       166, 204, 204, 204, 205, 204, 204, 204, 
-       204, 204, 204, 204, 204, 166, 207, 207, 
-       207, 208, 206, 209, 206, 210, 206, 211, 
-       212, 210, 212, 212, 212, 206, 214, 215, 
-       213, 214, 215, 216, 213, 219, 220, 218, 
-       219, 220, 221, 218, 223, 222, 225, 226, 
-       224, 217, 225, 227, 226, 224, 227, 227, 
-       227, 217, 229, 227, 230, 228, 227, 227, 
-       227, 217, 231, 229, 231, 231, 232, 230, 
-       228, 232, 232, 232, 217, 235, 236, 237, 
-       234, 235, 236, 234, 235, 236, 238, 234, 
-       239, 236, 240, 237, 240, 240, 240, 234, 
-       242, 243, 241, 242, 243, 244, 241, 246, 
-       245, 247, 233, 248, 233, 249, 233, 250, 
-       233, 251, 233, 252, 233, 253, 233, 254, 
-       233, 255, 233, 256, 233, 257, 258, 256, 
-       233, 259, 233, 260, 233, 261, 262, 260, 
-       233, 263, 262, 264, 264, 233, 266, 265, 
-       265, 265, 265, 233, 267, 233, 268, 233, 
-       269, 233, 270, 233, 271, 233, 272, 233, 
-       273, 233, 274, 233, 275, 233, 276, 277, 
-       275, 233, 278, 233, 279, 233, 280, 233, 
-       281, 233, 282, 233, 283, 233, 284, 233, 
-       285, 286, 284, 233, 287, 286, 288, 288, 
-       233, 290, 289, 289, 289, 289, 233, 291, 
-       233, 292, 233, 293, 233, 294, 233, 295, 
-       296, 294, 233, 297, 299, 296, 298, 298, 
-       233, 301, 302, 301, 301, 303, 304, 305, 
-       304, 300, 304, 304, 304, 233, 307, 308, 
-       306, 233, 308, 297, 308, 308, 309, 299, 
-       296, 298, 298, 233, 310, 233, 311, 233, 
-       312, 313, 311, 313, 313, 313, 233, 315, 
-       316, 314, 315, 316, 317, 314, 319, 321, 
-       318, 320, 320, 233, 322, 307, 322, 322, 
-       323, 308, 306, 233, 323, 323, 323, 324, 
-       324, 324, 233, 325, 325, 325, 326, 325, 
-       325, 325, 325, 325, 233, 328, 329, 327, 
-       233, 330, 233, 331, 233, 332, 233, 333, 
-       233, 334, 233, 335, 233, 336, 233, 337, 
-       233, 338, 339, 337, 233, 340, 342, 339, 
-       341, 341, 233, 344, 346, 347, 345, 348, 
-       343, 345, 345, 345, 233, 350, 339, 351, 
-       349, 233, 352, 353, 351, 233, 354, 233, 
-       355, 233, 356, 233, 357, 233, 358, 233, 
-       360, 361, 360, 360, 362, 364, 359, 363, 
-       363, 233, 366, 367, 368, 365, 233, 369, 
-       370, 367, 233, 340, 339, 342, 339, 341, 
-       341, 233, 371, 372, 368, 233, 373, 233, 
-       374, 233, 375, 233, 376, 233, 377, 233, 
-       378, 379, 377, 233, 380, 381, 382, 379, 
-       383, 383, 233, 381, 381, 381, 384, 384, 
-       233, 386, 388, 387, 385, 387, 387, 387, 
-       233, 390, 382, 389, 233, 382, 392, 382, 
-       382, 393, 381, 382, 394, 391, 383, 383, 
-       233, 392, 381, 382, 394, 391, 383, 383, 
-       233, 395, 395, 395, 397, 398, 396, 396, 
-       396, 396, 233, 399, 399, 399, 381, 382, 
-       233, 401, 400, 402, 403, 400, 233, 401, 
-       402, 403, 400, 233, 404, 233, 405, 233, 
-       406, 233, 407, 233, 408, 233, 409, 409, 
-       409, 233, 409, 409, 409, 410, 410, 233, 
-       412, 411, 411, 411, 411, 233, 413, 233, 
-       414, 414, 233, 416, 415, 415, 415, 415, 
-       233, 418, 403, 417, 233, 369, 367, 370, 
-       367, 233, 419, 233, 420, 233, 421, 422, 
-       420, 422, 422, 422, 233, 424, 425, 423, 
-       424, 425, 426, 423, 428, 429, 430, 432, 
-       427, 431, 431, 233, 433, 366, 433, 433, 
-       367, 368, 365, 434, 434, 233, 436, 438, 
-       437, 439, 435, 437, 437, 437, 233, 345, 
-       233, 440, 233, 441, 233, 442, 233, 443, 
-       233, 444, 233, 445, 233, 446, 233, 447, 
-       233, 448, 233, 449, 233, 450, 233, 451, 
-       452, 450, 233, 453, 452, 454, 454, 233, 
-       456, 455, 455, 455, 455, 233, 457, 233, 
-       458, 233, 459, 233, 460, 233, 461, 233, 
-       462, 463, 461, 233, 464, 233, 465, 233, 
-       466, 233, 467, 233, 468, 233, 469, 233, 
-       470, 233, 471, 233, 472, 473, 471, 233, 
-       476, 477, 478, 479, 480, 481, 475, 474, 
-       476, 475, 482, 1, 5, 483, 484, 483, 
-       485, 483, 486, 483, 487, 483, 490, 491, 
-       493, 494, 495, 489, 492, 492, 488, 490, 
-       489, 496, 498, 69, 497, 71, 71, 71, 
-       72, 79, 79, 79, 79, 497, 71, 71, 
-       71, 72, 79, 499, 79, 79, 79, 497, 
-       71, 71, 71, 72, 79, 500, 79, 79, 
-       79, 497, 97, 97, 97, 98, 501, 502, 
-       504, 503, 507, 508, 510, 506, 509, 509, 
-       505, 507, 506, 511, 108, 112, 512, 114, 
-       114, 114, 114, 114, 114, 114, 114, 114, 
-       114, 512, 117, 117, 117, 118, 513, 514, 
-       516, 515, 519, 520, 521, 522, 523, 524, 
-       525, 518, 517, 519, 518, 526, 128, 132, 
-       527, 528, 527, 529, 527, 530, 527, 531, 
-       527, 533, 532, 536, 537, 539, 535, 538, 
-       538, 538, 534, 536, 535, 540, 151, 155, 
-       541, 164, 162, 164, 164, 165, 163, 161, 
-       165, 165, 165, 541, 543, 542, 546, 547, 
-       548, 549, 550, 551, 552, 545, 544, 546, 
-       545, 553, 555, 178, 554, 556, 554, 557, 
-       554, 558, 554, 559, 554, 207, 207, 207, 
-       208, 560, 561, 563, 562, 566, 567, 569, 
-       565, 568, 568, 568, 564, 566, 565, 570, 
-       218, 222, 571, 231, 229, 231, 231, 232, 
-       230, 228, 232, 232, 232, 571, 573, 572, 
-       576, 577, 578, 579, 580, 581, 582, 583, 
-       584, 585, 575, 574, 576, 575, 586, 588, 
-       245, 587, 589, 587, 590, 591, 587, 594, 
-       593, 592, 595, 596, 587, 599, 598, 597, 
-       601, 600, 602, 587, 604, 603, 605, 587, 
-       608, 607, 606, 609, 587, 610, 587, 612, 
-       611, 0
+       161, 163, 164, 160, 162, 162, 162, 150, 
+       161, 164, 160, 162, 162, 162, 150, 161, 
+       163, 165, 164, 160, 162, 162, 162, 150, 
+       161, 163, 166, 164, 160, 162, 162, 162, 
+       150, 161, 163, 167, 164, 160, 162, 162, 
+       162, 150, 161, 163, 168, 164, 160, 162, 
+       162, 162, 150, 161, 163, 169, 164, 160, 
+       162, 162, 162, 150, 161, 163, 170, 164, 
+       160, 162, 162, 162, 150, 161, 163, 171, 
+       164, 160, 162, 162, 162, 150, 172, 172, 
+       172, 163, 162, 162, 162, 150, 172, 172, 
+       172, 174, 173, 173, 173, 150, 161, 163, 
+       175, 176, 164, 160, 162, 162, 162, 150, 
+       161, 163, 177, 164, 160, 162, 162, 162, 
+       150, 161, 163, 178, 164, 160, 162, 162, 
+       162, 150, 161, 163, 179, 164, 160, 162, 
+       162, 162, 150, 161, 163, 180, 164, 160, 
+       162, 162, 162, 150, 161, 163, 181, 164, 
+       160, 162, 162, 162, 150, 161, 163, 182, 
+       164, 160, 162, 162, 162, 150, 161, 163, 
+       183, 164, 160, 162, 162, 162, 150, 163, 
+       162, 162, 162, 150, 161, 163, 184, 164, 
+       160, 162, 162, 162, 150, 161, 163, 185, 
+       164, 160, 162, 162, 162, 150, 161, 163, 
+       186, 164, 160, 162, 162, 162, 150, 161, 
+       163, 183, 164, 160, 162, 162, 162, 150, 
+       161, 163, 187, 164, 160, 162, 162, 162, 
+       150, 161, 163, 188, 164, 160, 162, 162, 
+       162, 150, 161, 163, 189, 164, 160, 162, 
+       162, 162, 150, 161, 163, 171, 164, 160, 
+       162, 162, 162, 150, 192, 193, 194, 191, 
+       192, 193, 191, 192, 193, 195, 191, 196, 
+       193, 197, 194, 197, 197, 197, 191, 199, 
+       200, 198, 199, 200, 201, 198, 203, 202, 
+       204, 190, 205, 190, 206, 190, 207, 190, 
+       208, 190, 209, 190, 210, 190, 211, 190, 
+       212, 212, 212, 190, 212, 212, 212, 213, 
+       213, 190, 215, 214, 214, 214, 214, 190, 
+       216, 190, 217, 190, 218, 190, 219, 190, 
+       220, 221, 219, 190, 222, 190, 223, 190, 
+       224, 190, 225, 190, 226, 226, 226, 190, 
+       226, 226, 226, 227, 227, 190, 228, 228, 
+       228, 228, 228, 228, 228, 228, 228, 228, 
+       228, 190, 228, 228, 228, 229, 228, 228, 
+       228, 228, 228, 228, 228, 228, 190, 231, 
+       231, 231, 232, 230, 233, 230, 234, 230, 
+       235, 236, 234, 236, 236, 236, 230, 238, 
+       239, 237, 238, 239, 240, 237, 243, 244, 
+       242, 243, 244, 245, 242, 247, 246, 249, 
+       250, 248, 241, 252, 254, 255, 251, 253, 
+       253, 253, 241, 252, 255, 251, 253, 253, 
+       253, 241, 252, 254, 256, 255, 251, 253, 
+       253, 253, 241, 252, 254, 257, 255, 251, 
+       253, 253, 253, 241, 252, 254, 258, 255, 
+       251, 253, 253, 253, 241, 252, 254, 259, 
+       255, 251, 253, 253, 253, 241, 252, 254, 
+       260, 255, 251, 253, 253, 253, 241, 252, 
+       254, 261, 255, 251, 253, 253, 253, 241, 
+       252, 254, 262, 255, 251, 253, 253, 253, 
+       241, 263, 263, 263, 254, 253, 253, 253, 
+       241, 263, 263, 263, 265, 264, 264, 264, 
+       241, 252, 254, 266, 267, 255, 251, 253, 
+       253, 253, 241, 252, 254, 268, 255, 251, 
+       253, 253, 253, 241, 252, 254, 269, 255, 
+       251, 253, 253, 253, 241, 252, 254, 270, 
+       255, 251, 253, 253, 253, 241, 252, 254, 
+       271, 255, 251, 253, 253, 253, 241, 252, 
+       254, 272, 255, 251, 253, 253, 253, 241, 
+       252, 254, 273, 255, 251, 253, 253, 253, 
+       241, 252, 254, 274, 255, 251, 253, 253, 
+       253, 241, 254, 253, 253, 253, 241, 252, 
+       254, 275, 255, 251, 253, 253, 253, 241, 
+       252, 254, 276, 255, 251, 253, 253, 253, 
+       241, 252, 254, 277, 255, 251, 253, 253, 
+       253, 241, 252, 254, 274, 255, 251, 253, 
+       253, 253, 241, 252, 254, 278, 255, 251, 
+       253, 253, 253, 241, 252, 254, 279, 255, 
+       251, 253, 253, 253, 241, 252, 254, 280, 
+       255, 251, 253, 253, 253, 241, 252, 254, 
+       262, 255, 251, 253, 253, 253, 241, 283, 
+       284, 285, 282, 283, 284, 282, 283, 284, 
+       286, 282, 287, 284, 288, 285, 288, 288, 
+       288, 282, 290, 291, 289, 290, 291, 292, 
+       289, 294, 293, 295, 281, 296, 281, 297, 
+       281, 298, 281, 299, 281, 300, 281, 301, 
+       281, 302, 281, 303, 281, 304, 281, 305, 
+       306, 304, 281, 307, 281, 308, 281, 309, 
+       310, 308, 281, 311, 310, 312, 312, 281, 
+       314, 313, 313, 313, 313, 281, 315, 281, 
+       316, 281, 317, 281, 318, 281, 319, 281, 
+       320, 281, 321, 281, 322, 281, 323, 281, 
+       324, 325, 323, 281, 326, 281, 327, 281, 
+       328, 281, 329, 281, 330, 281, 331, 281, 
+       332, 281, 333, 334, 332, 281, 335, 334, 
+       336, 336, 281, 338, 337, 337, 337, 337, 
+       281, 339, 281, 340, 281, 341, 281, 342, 
+       281, 343, 344, 342, 281, 345, 347, 344, 
+       346, 346, 281, 349, 350, 349, 349, 351, 
+       352, 353, 352, 348, 352, 352, 352, 281, 
+       355, 356, 354, 281, 356, 345, 356, 356, 
+       357, 347, 344, 346, 346, 281, 358, 281, 
+       359, 281, 360, 361, 359, 361, 361, 361, 
+       281, 363, 364, 362, 363, 364, 365, 362, 
+       367, 369, 366, 368, 368, 281, 370, 355, 
+       370, 370, 371, 356, 354, 281, 371, 371, 
+       371, 372, 372, 372, 281, 373, 373, 373, 
+       374, 373, 373, 373, 373, 373, 281, 376, 
+       377, 375, 281, 378, 281, 379, 281, 380, 
+       281, 381, 281, 382, 281, 383, 281, 384, 
+       281, 385, 281, 386, 387, 385, 281, 388, 
+       390, 387, 389, 389, 281, 392, 394, 395, 
+       393, 396, 391, 393, 393, 393, 281, 398, 
+       387, 399, 397, 281, 400, 401, 399, 281, 
+       402, 281, 403, 281, 404, 281, 405, 281, 
+       406, 281, 408, 409, 408, 408, 410, 412, 
+       407, 411, 411, 281, 414, 415, 416, 413, 
+       281, 417, 418, 415, 281, 388, 387, 390, 
+       387, 389, 389, 281, 419, 420, 416, 281, 
+       421, 281, 422, 281, 423, 281, 424, 281, 
+       425, 281, 426, 427, 425, 281, 428, 429, 
+       430, 427, 431, 431, 281, 429, 429, 429, 
+       432, 432, 281, 434, 436, 435, 433, 435, 
+       435, 435, 281, 438, 430, 437, 281, 430, 
+       440, 430, 430, 441, 429, 430, 442, 439, 
+       431, 431, 281, 440, 429, 430, 442, 439, 
+       431, 431, 281, 443, 443, 443, 445, 446, 
+       444, 444, 444, 444, 281, 447, 447, 447, 
+       429, 430, 281, 449, 448, 450, 451, 448, 
+       281, 449, 450, 451, 448, 281, 452, 281, 
+       453, 281, 454, 281, 455, 281, 456, 281, 
+       457, 457, 457, 281, 457, 457, 457, 458, 
+       458, 281, 460, 459, 459, 459, 459, 281, 
+       461, 281, 462, 462, 281, 464, 463, 463, 
+       463, 463, 281, 466, 451, 465, 281, 417, 
+       415, 418, 415, 281, 467, 281, 468, 281, 
+       469, 470, 468, 470, 470, 470, 281, 472, 
+       473, 471, 472, 473, 474, 471, 476, 477, 
+       478, 480, 475, 479, 479, 281, 481, 414, 
+       481, 481, 415, 416, 413, 482, 482, 281, 
+       484, 486, 485, 487, 483, 485, 485, 485, 
+       281, 393, 281, 488, 281, 489, 281, 490, 
+       281, 491, 281, 492, 281, 493, 281, 494, 
+       281, 495, 281, 496, 281, 497, 281, 498, 
+       281, 499, 500, 498, 281, 501, 500, 502, 
+       502, 281, 504, 503, 503, 503, 503, 281, 
+       505, 281, 506, 281, 507, 281, 508, 281, 
+       509, 281, 510, 511, 509, 281, 512, 281, 
+       513, 281, 514, 281, 515, 281, 516, 281, 
+       517, 281, 518, 281, 519, 281, 520, 521, 
+       519, 281, 524, 525, 526, 527, 528, 529, 
+       523, 522, 524, 523, 530, 1, 5, 531, 
+       532, 531, 533, 531, 534, 531, 535, 531, 
+       538, 539, 541, 542, 543, 537, 540, 540, 
+       536, 538, 537, 544, 546, 69, 545, 71, 
+       71, 71, 72, 79, 79, 79, 79, 545, 
+       71, 71, 71, 72, 79, 547, 79, 79, 
+       79, 545, 71, 71, 71, 72, 79, 548, 
+       79, 79, 79, 545, 97, 97, 97, 98, 
+       549, 550, 552, 551, 555, 556, 558, 554, 
+       557, 557, 553, 555, 554, 559, 108, 112, 
+       560, 114, 114, 114, 114, 114, 114, 114, 
+       114, 114, 114, 560, 117, 117, 117, 118, 
+       561, 562, 564, 563, 567, 568, 569, 570, 
+       571, 572, 573, 566, 565, 567, 566, 574, 
+       128, 132, 575, 576, 575, 577, 575, 578, 
+       575, 579, 575, 581, 580, 584, 585, 587, 
+       588, 583, 586, 586, 586, 582, 584, 583, 
+       589, 151, 155, 590, 161, 163, 164, 160, 
+       162, 162, 162, 590, 161, 163, 591, 592, 
+       164, 160, 162, 162, 162, 590, 594, 593, 
+       597, 598, 599, 600, 601, 602, 603, 596, 
+       595, 597, 596, 604, 606, 202, 605, 607, 
+       605, 608, 605, 609, 605, 610, 605, 231, 
+       231, 231, 232, 611, 612, 614, 613, 617, 
+       618, 620, 621, 616, 619, 619, 619, 615, 
+       617, 616, 622, 242, 246, 623, 252, 254, 
+       255, 251, 253, 253, 253, 623, 252, 254, 
+       624, 625, 255, 251, 253, 253, 253, 623, 
+       627, 626, 630, 631, 632, 633, 634, 635, 
+       636, 637, 638, 639, 629, 628, 630, 629, 
+       640, 642, 293, 641, 643, 641, 644, 645, 
+       641, 648, 647, 646, 649, 650, 641, 653, 
+       652, 651, 655, 654, 656, 641, 658, 657, 
+       659, 641, 662, 661, 660, 663, 641, 664, 
+       641, 666, 665, 0
 };
 
 static const short _eo_tokenizer_trans_targs[] = {
-       296, 0, 0, 1, 296, 2, 296, 4, 
+       346, 0, 0, 1, 346, 2, 346, 4, 
        5, 6, 7, 8, 9, 10, 10, 11, 
-       12, 13, 12, 14, 11, 296, 12, 12, 
-       296, 13, 14, 15, 16, 12, 12, 296, 
+       12, 13, 12, 14, 11, 346, 12, 12, 
+       346, 13, 14, 15, 16, 12, 12, 346, 
        17, 17, 15, 18, 16, 17, 17, 18, 
        18, 20, 21, 22, 10, 24, 25, 26, 
        27, 28, 29, 30, 10, 32, 33, 34, 
-       10, 303, 36, 36, 37, 38, 303, 38, 
-       39, 39, 39, 40, 303, 41, 303, 42, 
-       43, 44, 45, 44, 45, 45, 303, 46, 
-       48, 49, 50, 51, 52, 53, 53, 303, 
-       55, 56, 57, 58, 59, 60, 61, 309, 
-       303, 62, 63, 64, 65, 65, 66, 66, 
-       66, 67, 310, 312, 68, 68, 69, 312, 
-       70, 312, 71, 316, 312, 72, 73, 74, 
-       75, 75, 76, 76, 76, 77, 317, 319, 
-       78, 78, 79, 319, 80, 319, 82, 82, 
-       319, 84, 85, 85, 319, 87, 87, 319, 
-       89, 90, 91, 92, 92, 319, 327, 93, 
-       93, 94, 327, 95, 327, 96, 96, 327, 
-       98, 96, 96, 327, 97, 99, 332, 101, 
-       101, 102, 103, 332, 103, 104, 104, 104, 
-       105, 332, 106, 332, 108, 109, 110, 332, 
-       112, 113, 114, 115, 116, 117, 117, 332, 
-       119, 120, 121, 122, 122, 332, 124, 125, 
-       126, 127, 128, 129, 130, 339, 332, 131, 
-       132, 133, 134, 134, 135, 135, 135, 136, 
-       340, 342, 137, 137, 138, 342, 139, 342, 
-       140, 140, 342, 142, 140, 140, 342, 141, 
-       143, 347, 145, 145, 146, 147, 347, 147, 
-       148, 148, 148, 149, 347, 150, 347, 152, 
-       153, 154, 155, 156, 157, 158, 159, 160, 
-       161, 161, 347, 163, 164, 164, 165, 165, 
-       166, 166, 352, 168, 169, 170, 171, 172, 
-       173, 174, 175, 176, 176, 347, 178, 179, 
-       180, 181, 182, 183, 184, 184, 185, 185, 
-       186, 186, 354, 188, 189, 190, 191, 191, 
-       192, 192, 193, 355, 194, 202, 194, 203, 
-       193, 195, 194, 194, 195, 196, 197, 198, 
-       198, 199, 199, 199, 200, 201, 192, 192, 
-       193, 355, 202, 203, 204, 204, 205, 194, 
-       194, 195, 207, 208, 209, 210, 211, 212, 
-       213, 214, 214, 215, 215, 216, 357, 217, 
-       217, 216, 266, 215, 218, 217, 217, 218, 
-       218, 219, 220, 221, 222, 223, 224, 225, 
-       264, 225, 226, 265, 228, 225, 225, 226, 
-       228, 226, 227, 228, 229, 230, 231, 232, 
-       233, 234, 234, 235, 235, 236, 239, 241, 
-       237, 238, 238, 237, 239, 238, 238, 240, 
-       240, 258, 243, 242, 241, 236, 239, 242, 
-       244, 244, 245, 257, 246, 247, 248, 249, 
-       250, 251, 252, 252, 253, 254, 255, 255, 
-       256, 256, 256, 259, 260, 260, 261, 261, 
-       261, 262, 263, 240, 240, 236, 239, 241, 
-       243, 264, 265, 225, 225, 265, 226, 228, 
+       10, 353, 36, 36, 37, 38, 353, 38, 
+       39, 39, 39, 40, 353, 41, 353, 42, 
+       43, 44, 45, 44, 45, 45, 353, 46, 
+       48, 49, 50, 51, 52, 53, 53, 353, 
+       55, 56, 57, 58, 59, 60, 61, 359, 
+       353, 62, 63, 64, 65, 65, 66, 66, 
+       66, 67, 360, 362, 68, 68, 69, 362, 
+       70, 362, 71, 366, 362, 72, 73, 74, 
+       75, 75, 76, 76, 76, 77, 367, 369, 
+       78, 78, 79, 369, 80, 369, 82, 82, 
+       369, 84, 85, 85, 369, 87, 87, 369, 
+       89, 90, 91, 92, 92, 369, 377, 93, 
+       93, 94, 377, 95, 377, 96, 96, 377, 
+       96, 96, 97, 98, 377, 100, 101, 102, 
+       103, 104, 105, 106, 107, 97, 108, 109, 
+       117, 110, 111, 112, 113, 114, 115, 116, 
+       118, 119, 120, 122, 123, 124, 383, 126, 
+       126, 127, 128, 383, 128, 129, 129, 129, 
+       130, 383, 131, 383, 133, 134, 135, 383, 
+       137, 138, 139, 140, 141, 142, 142, 383, 
+       144, 145, 146, 147, 147, 383, 149, 150, 
+       151, 152, 153, 154, 155, 390, 383, 156, 
+       157, 158, 159, 159, 160, 160, 160, 161, 
+       391, 393, 162, 162, 163, 393, 164, 393, 
+       165, 165, 393, 165, 165, 166, 167, 393, 
+       169, 170, 171, 172, 173, 174, 175, 176, 
+       166, 177, 178, 186, 179, 180, 181, 182, 
+       183, 184, 185, 187, 188, 189, 191, 192, 
+       193, 399, 195, 195, 196, 197, 399, 197, 
+       198, 198, 198, 199, 399, 200, 399, 202, 
+       203, 204, 205, 206, 207, 208, 209, 210, 
+       211, 211, 399, 213, 214, 214, 215, 215, 
+       216, 216, 404, 218, 219, 220, 221, 222, 
+       223, 224, 225, 226, 226, 399, 228, 229, 
+       230, 231, 232, 233, 234, 234, 235, 235, 
+       236, 236, 406, 238, 239, 240, 241, 241, 
+       242, 242, 243, 407, 244, 252, 244, 253, 
+       243, 245, 244, 244, 245, 246, 247, 248, 
+       248, 249, 249, 249, 250, 251, 242, 242, 
+       243, 407, 252, 253, 254, 254, 255, 244, 
+       244, 245, 257, 258, 259, 260, 261, 262, 
+       263, 264, 264, 265, 265, 266, 409, 267, 
+       267, 266, 316, 265, 268, 267, 267, 268, 
        268, 269, 270, 271, 272, 273, 274, 275, 
-       276, 277, 278, 278, 279, 279, 280, 280, 
-       359, 282, 283, 284, 285, 286, 286, 347, 
-       288, 289, 290, 291, 292, 293, 294, 295, 
-       295, 347, 296, 297, 297, 298, 299, 300, 
-       301, 302, 296, 296, 3, 19, 23, 31, 
-       303, 304, 304, 305, 306, 307, 308, 311, 
-       303, 303, 35, 47, 54, 303, 303, 303, 
-       303, 312, 313, 313, 314, 315, 318, 312, 
-       312, 312, 312, 312, 312, 319, 320, 320, 
-       321, 322, 323, 324, 325, 326, 319, 319, 
-       81, 83, 86, 88, 319, 319, 327, 328, 
-       328, 329, 330, 331, 327, 327, 327, 327, 
-       332, 333, 333, 334, 335, 336, 337, 338, 
-       341, 332, 332, 100, 107, 111, 118, 123, 
-       332, 332, 332, 332, 342, 343, 343, 344, 
-       345, 346, 342, 342, 342, 342, 347, 348, 
-       348, 349, 350, 351, 353, 356, 358, 360, 
-       361, 362, 347, 347, 144, 151, 162, 167, 
-       347, 352, 352, 177, 187, 347, 354, 354, 
-       347, 347, 206, 347, 347, 267, 347, 359, 
-       359, 281, 287, 347, 347
+       314, 275, 276, 315, 278, 275, 275, 276, 
+       278, 276, 277, 278, 279, 280, 281, 282, 
+       283, 284, 284, 285, 285, 286, 289, 291, 
+       287, 288, 288, 287, 289, 288, 288, 290, 
+       290, 308, 293, 292, 291, 286, 289, 292, 
+       294, 294, 295, 307, 296, 297, 298, 299, 
+       300, 301, 302, 302, 303, 304, 305, 305, 
+       306, 306, 306, 309, 310, 310, 311, 311, 
+       311, 312, 313, 290, 290, 286, 289, 291, 
+       293, 314, 315, 275, 275, 315, 276, 278, 
+       318, 319, 320, 321, 322, 323, 324, 325, 
+       326, 327, 328, 328, 329, 329, 330, 330, 
+       411, 332, 333, 334, 335, 336, 336, 399, 
+       338, 339, 340, 341, 342, 343, 344, 345, 
+       345, 399, 346, 347, 347, 348, 349, 350, 
+       351, 352, 346, 346, 3, 19, 23, 31, 
+       353, 354, 354, 355, 356, 357, 358, 361, 
+       353, 353, 35, 47, 54, 353, 353, 353, 
+       353, 362, 363, 363, 364, 365, 368, 362, 
+       362, 362, 362, 362, 362, 369, 370, 370, 
+       371, 372, 373, 374, 375, 376, 369, 369, 
+       81, 83, 86, 88, 369, 369, 377, 378, 
+       378, 379, 380, 381, 382, 377, 377, 99, 
+       121, 377, 377, 383, 384, 384, 385, 386, 
+       387, 388, 389, 392, 383, 383, 125, 132, 
+       136, 143, 148, 383, 383, 383, 383, 393, 
+       394, 394, 395, 396, 397, 398, 393, 393, 
+       168, 190, 393, 393, 399, 400, 400, 401, 
+       402, 403, 405, 408, 410, 412, 413, 414, 
+       399, 399, 194, 201, 212, 217, 399, 404, 
+       404, 227, 237, 399, 406, 406, 399, 399, 
+       256, 399, 399, 317, 399, 411, 411, 331, 
+       337, 399, 399
 };
 
 static const short _eo_tokenizer_trans_actions[] = {
@@ -1085,7 +1239,10 @@ static const short _eo_tokenizer_trans_actions[] = {
        99, 0, 0, 1, 103, 0, 1, 101, 
        0, 0, 0, 0, 1, 105, 133, 0, 
        1, 0, 119, 0, 232, 0, 1, 121, 
-       0, 7, 262, 265, 7, 0, 155, 0, 
+       7, 262, 0, 0, 265, 0, 0, 0, 
+       0, 0, 0, 0, 0, 346, 346, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 155, 0, 
        1, 0, 0, 137, 1, 3, 0, 1, 
        0, 135, 0, 235, 0, 0, 0, 274, 
        0, 0, 0, 0, 0, 3, 0, 271, 
@@ -1093,7 +1250,10 @@ static const short _eo_tokenizer_trans_actions[] = {
        0, 0, 0, 3, 0, 343, 153, 0, 
        0, 0, 0, 1, 3, 0, 1, 0, 
        0, 171, 0, 1, 0, 157, 0, 238, 
-       0, 1, 159, 0, 9, 277, 280, 9, 
+       0, 1, 159, 9, 277, 0, 0, 280, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       350, 350, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
        0, 209, 0, 1, 0, 0, 175, 1, 
        3, 0, 1, 0, 173, 0, 241, 0, 
        0, 0, 0, 0, 0, 0, 0, 0, 
@@ -1132,16 +1292,17 @@ static const short _eo_tokenizer_trans_actions[] = {
        91, 87, 259, 89, 81, 109, 0, 1, 
        331, 57, 57, 57, 57, 0, 111, 115, 
        0, 0, 0, 0, 113, 107, 125, 0, 
-       1, 331, 334, 0, 127, 131, 129, 123, 
-       143, 0, 1, 331, 57, 57, 57, 57, 
-       0, 145, 151, 0, 0, 0, 0, 0, 
-       147, 268, 149, 141, 163, 0, 1, 331, 
-       334, 0, 165, 169, 167, 161, 191, 0, 
-       1, 331, 57, 57, 57, 57, 57, 57, 
-       57, 0, 193, 207, 0, 0, 0, 0, 
-       199, 0, 1, 0, 0, 197, 0, 1, 
-       203, 179, 0, 201, 177, 0, 195, 0, 
-       1, 0, 0, 205, 189
+       1, 331, 334, 334, 0, 127, 131, 0, 
+       0, 129, 123, 143, 0, 1, 331, 57, 
+       57, 57, 57, 0, 145, 151, 0, 0, 
+       0, 0, 0, 147, 268, 149, 141, 163, 
+       0, 1, 331, 334, 334, 0, 165, 169, 
+       0, 0, 167, 161, 191, 0, 1, 331, 
+       57, 57, 57, 57, 57, 57, 57, 0, 
+       193, 207, 0, 0, 0, 0, 199, 0, 
+       1, 0, 0, 197, 0, 1, 203, 179, 
+       0, 201, 177, 0, 195, 0, 1, 0, 
+       0, 205, 189
 };
 
 static const short _eo_tokenizer_to_state_actions[] = {
@@ -1182,15 +1343,21 @@ 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, 
-       53, 0, 0, 0, 0, 0, 0, 53, 
        0, 0, 0, 0, 0, 0, 0, 0, 
-       53, 0, 0, 0, 0, 0, 0, 53, 
-       0, 0, 0, 0, 0, 0, 0, 53, 
-       0, 0, 0, 0, 53, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 53, 0, 
-       0, 0, 0, 53, 0, 0, 0, 0, 
        0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 53, 0, 0, 0, 0, 0, 
+       0, 53, 0, 0, 0, 0, 0, 0, 
+       0, 0, 53, 0, 0, 0, 0, 0, 
+       0, 53, 0, 0, 0, 0, 0, 0, 
+       0, 53, 0, 0, 0, 0, 0, 53, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 53, 0, 0, 0, 0, 0, 53, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0
 };
 
 static const short _eo_tokenizer_from_state_actions[] = {
@@ -1231,15 +1398,21 @@ 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, 
-       55, 0, 0, 0, 0, 0, 0, 55, 
        0, 0, 0, 0, 0, 0, 0, 0, 
-       55, 0, 0, 0, 0, 0, 0, 55, 
-       0, 0, 0, 0, 0, 0, 0, 55, 
-       0, 0, 0, 0, 55, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 55, 0, 
-       0, 0, 0, 55, 0, 0, 0, 0, 
        0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 55, 0, 0, 0, 0, 0, 
+       0, 55, 0, 0, 0, 0, 0, 0, 
+       0, 0, 55, 0, 0, 0, 0, 0, 
+       0, 55, 0, 0, 0, 0, 0, 0, 
+       0, 55, 0, 0, 0, 0, 0, 55, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 55, 0, 0, 0, 0, 0, 55, 
+       0, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 0
 };
 
 static const short _eo_tokenizer_eof_trans[] = {
@@ -1255,57 +1428,63 @@ static const short _eo_tokenizer_eof_trans[] = {
        117, 117, 117, 117, 117, 117, 128, 128, 
        128, 128, 128, 128, 128, 128, 128, 128, 
        128, 128, 128, 128, 128, 151, 151, 151, 
-       151, 151, 151, 151, 167, 167, 167, 167, 
-       167, 167, 167, 167, 167, 167, 167, 167, 
-       167, 167, 167, 167, 167, 167, 167, 167, 
-       167, 167, 167, 167, 167, 167, 167, 167, 
-       167, 167, 167, 207, 207, 207, 207, 207, 
-       207, 218, 218, 218, 218, 218, 218, 218, 
-       234, 234, 234, 234, 234, 234, 234, 234, 
-       234, 234, 234, 234, 234, 234, 234, 234, 
-       234, 234, 234, 234, 234, 234, 234, 234, 
-       234, 234, 234, 234, 234, 234, 234, 234, 
-       234, 234, 234, 234, 234, 234, 234, 234, 
-       234, 234, 234, 234, 234, 234, 234, 234, 
-       234, 234, 234, 234, 234, 234, 234, 234, 
-       234, 234, 234, 234, 234, 234, 234, 234, 
-       234, 234, 234, 234, 234, 234, 234, 234, 
-       234, 234, 234, 234, 234, 234, 234, 234, 
-       234, 234, 234, 234, 234, 234, 234, 234, 
-       234, 234, 234, 234, 234, 234, 234, 234, 
-       234, 234, 234, 234, 234, 234, 234, 234, 
-       234, 234, 234, 234, 234, 234, 234, 234, 
-       234, 234, 234, 234, 234, 234, 234, 234, 
-       234, 234, 234, 234, 234, 234, 234, 234, 
-       234, 234, 234, 234, 234, 234, 234, 234, 
-       234, 234, 234, 234, 234, 234, 234, 234, 
-       234, 234, 234, 234, 234, 234, 234, 234, 
-       0, 483, 484, 484, 484, 484, 484, 0, 
-       497, 498, 498, 498, 498, 502, 503, 504, 
-       0, 512, 513, 513, 514, 515, 516, 0, 
-       527, 528, 528, 528, 528, 528, 533, 0, 
-       541, 542, 542, 543, 0, 554, 555, 555, 
-       555, 555, 555, 561, 562, 563, 0, 571, 
-       572, 572, 573, 0, 587, 588, 588, 588, 
-       593, 588, 598, 601, 588, 604, 588, 607, 
-       588, 588, 612
+       151, 151, 151, 151, 151, 151, 151, 151, 
+       151, 151, 151, 151, 151, 151, 151, 151, 
+       151, 151, 151, 151, 151, 151, 151, 151, 
+       151, 151, 151, 151, 151, 191, 191, 191, 
+       191, 191, 191, 191, 191, 191, 191, 191, 
+       191, 191, 191, 191, 191, 191, 191, 191, 
+       191, 191, 191, 191, 191, 191, 191, 191, 
+       191, 191, 191, 191, 231, 231, 231, 231, 
+       231, 231, 242, 242, 242, 242, 242, 242, 
+       242, 242, 242, 242, 242, 242, 242, 242, 
+       242, 242, 242, 242, 242, 242, 242, 242, 
+       242, 242, 242, 242, 242, 242, 242, 242, 
+       242, 242, 282, 282, 282, 282, 282, 282, 
+       282, 282, 282, 282, 282, 282, 282, 282, 
+       282, 282, 282, 282, 282, 282, 282, 282, 
+       282, 282, 282, 282, 282, 282, 282, 282, 
+       282, 282, 282, 282, 282, 282, 282, 282, 
+       282, 282, 282, 282, 282, 282, 282, 282, 
+       282, 282, 282, 282, 282, 282, 282, 282, 
+       282, 282, 282, 282, 282, 282, 282, 282, 
+       282, 282, 282, 282, 282, 282, 282, 282, 
+       282, 282, 282, 282, 282, 282, 282, 282, 
+       282, 282, 282, 282, 282, 282, 282, 282, 
+       282, 282, 282, 282, 282, 282, 282, 282, 
+       282, 282, 282, 282, 282, 282, 282, 282, 
+       282, 282, 282, 282, 282, 282, 282, 282, 
+       282, 282, 282, 282, 282, 282, 282, 282, 
+       282, 282, 282, 282, 282, 282, 282, 282, 
+       282, 282, 282, 282, 282, 282, 282, 282, 
+       282, 282, 282, 282, 282, 282, 282, 282, 
+       282, 282, 282, 282, 282, 282, 282, 282, 
+       282, 282, 0, 531, 532, 532, 532, 532, 
+       532, 0, 545, 546, 546, 546, 546, 550, 
+       551, 552, 0, 560, 561, 561, 562, 563, 
+       564, 0, 575, 576, 576, 576, 576, 576, 
+       581, 0, 590, 591, 591, 591, 594, 0, 
+       605, 606, 606, 606, 606, 606, 612, 613, 
+       614, 0, 623, 624, 624, 624, 627, 0, 
+       641, 642, 642, 642, 647, 642, 652, 655, 
+       642, 658, 642, 661, 642, 642, 666
 };
 
-static const int eo_tokenizer_start = 296;
-static const int eo_tokenizer_first_final = 296;
+static const int eo_tokenizer_start = 346;
+static const int eo_tokenizer_first_final = 346;
 static const int eo_tokenizer_error = -1;
 
-static const int eo_tokenizer_en_tokenize_accessor = 303;
-static const int eo_tokenizer_en_tokenize_params = 312;
-static const int eo_tokenizer_en_tokenize_property = 319;
-static const int eo_tokenizer_en_tokenize_properties = 327;
-static const int eo_tokenizer_en_tokenize_method = 332;
-static const int eo_tokenizer_en_tokenize_methods = 342;
-static const int eo_tokenizer_en_tokenize_class = 347;
-static const int eo_tokenizer_en_main = 296;
+static const int eo_tokenizer_en_tokenize_accessor = 353;
+static const int eo_tokenizer_en_tokenize_params = 362;
+static const int eo_tokenizer_en_tokenize_property = 369;
+static const int eo_tokenizer_en_tokenize_properties = 377;
+static const int eo_tokenizer_en_tokenize_method = 383;
+static const int eo_tokenizer_en_tokenize_methods = 393;
+static const int eo_tokenizer_en_tokenize_class = 399;
+static const int eo_tokenizer_en_main = 346;
 
 
-#line 1041 "lib/eolian/eo_lexer.rl"
+#line 1053 "lib/eolian/eo_lexer.rl"
 
 
 Eina_Bool
@@ -1329,7 +1508,7 @@ eo_tokenizer_walk(Eo_Tokenizer *toknz, const char *source)
      }
 
    
-#line 1333 "lib/eolian/eo_lexer.c"
+#line 1512 "lib/eolian/eo_lexer.c"
        {
         toknz->cs = eo_tokenizer_start;
         toknz->ts = 0;
@@ -1337,7 +1516,7 @@ eo_tokenizer_walk(Eo_Tokenizer *toknz, const char *source)
         toknz->act = 0;
        }
 
-#line 1064 "lib/eolian/eo_lexer.rl"
+#line 1076 "lib/eolian/eo_lexer.rl"
 
    while (!done)
      {
@@ -1364,11 +1543,11 @@ eo_tokenizer_walk(Eo_Tokenizer *toknz, const char *source)
           }
 
         
-#line 1368 "lib/eolian/eo_lexer.c"
+#line 1547 "lib/eolian/eo_lexer.c"
        {
        int _klen;
        unsigned int _trans;
-       const char *_acts;
+       const unsigned char *_acts;
        unsigned int _nacts;
        const char *_keys;
 
@@ -1379,11 +1558,11 @@ _resume:
        _nacts = (unsigned int) *_acts++;
        while ( _nacts-- > 0 ) {
                switch ( *_acts++ ) {
-       case 38:
+       case 41:
 #line 1 "NONE"
        { toknz->ts = ( toknz->p);}
        break;
-#line 1387 "lib/eolian/eo_lexer.c"
+#line 1566 "lib/eolian/eo_lexer.c"
                }
        }
 
@@ -1450,28 +1629,35 @@ _eof_trans:
                switch ( *_acts++ )
                {
        case 0:
-#line 374 "lib/eolian/eo_lexer.rl"
+#line 365 "lib/eolian/eo_lexer.rl"
        {
       toknz->current_line += 1;
       DBG("inc[%d] %d", toknz->cs, toknz->current_line);
    }
        break;
        case 1:
-#line 379 "lib/eolian/eo_lexer.rl"
+#line 370 "lib/eolian/eo_lexer.rl"
        {
       toknz->saved.line = toknz->current_line;
       DBG("save line[%d] %d", toknz->cs, toknz->current_line);
    }
        break;
        case 2:
-#line 384 "lib/eolian/eo_lexer.rl"
+#line 375 "lib/eolian/eo_lexer.rl"
        {
       toknz->saved.tok = ( toknz->p);
       DBG("save token[%d] %p %c", toknz->cs, ( toknz->p), *( toknz->p));
    }
        break;
        case 3:
-#line 461 "lib/eolian/eo_lexer.rl"
+#line 380 "lib/eolian/eo_lexer.rl"
+       {
+      DBG("move ts %d chars forward", (int)(( toknz->p) - toknz->ts));
+      toknz->ts = ( toknz->p);
+   }
+       break;
+       case 4:
+#line 459 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
       if (toknz->tmp.accessor->ret != NULL)
@@ -1479,8 +1665,8 @@ _eof_trans:
       toknz->tmp.accessor->ret = _eo_tokenizer_return_get(toknz, ( toknz->p));
    }
        break;
-       case 4:
-#line 468 "lib/eolian/eo_lexer.rl"
+       case 5:
+#line 466 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
       if (!toknz->tmp.accessor->ret) ABORT(toknz, "No ret!!!");
@@ -1490,21 +1676,21 @@ _eof_trans:
       INF("        %s", toknz->tmp.accessor->ret->comment);
    }
        break;
-       case 5:
-#line 477 "lib/eolian/eo_lexer.rl"
+       case 6:
+#line 475 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
       toknz->tmp.accessor->legacy = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 6:
-#line 491 "lib/eolian/eo_lexer.rl"
+       case 7:
+#line 489 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.accessor_param = _eo_tokenizer_accessor_param_get(toknz, ( toknz->p));
    }
        break;
-       case 7:
-#line 495 "lib/eolian/eo_lexer.rl"
+       case 8:
+#line 493 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.accessor_param)
          ABORT(toknz, "No accessor param!!!");
@@ -1514,8 +1700,8 @@ _eof_trans:
       toknz->tmp.accessor_param = NULL;
    }
        break;
-       case 8:
-#line 524 "lib/eolian/eo_lexer.rl"
+       case 9:
+#line 522 "lib/eolian/eo_lexer.rl"
        {
       const char *c = _eo_tokenizer_token_get(toknz, ( toknz->p)-2);
       if (toknz->tmp.param == NULL)
@@ -1524,8 +1710,8 @@ _eof_trans:
       toknz->tmp.param = NULL;
    }
        break;
-       case 9:
-#line 532 "lib/eolian/eo_lexer.rl"
+       case 10:
+#line 530 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.param = _eo_tokenizer_param_get(toknz, ( toknz->p));
       if (toknz->tmp.params)
@@ -1535,16 +1721,22 @@ _eof_trans:
       INF("        %s : %s", toknz->tmp.param->name, toknz->tmp.param->type);
    }
        break;
-       case 10:
-#line 630 "lib/eolian/eo_lexer.rl"
+       case 11:
+#line 629 "lib/eolian/eo_lexer.rl"
        {
       if (toknz->tmp.prop != NULL)
         ABORT(toknz, "there is a pending property definition %s", toknz->tmp.prop->name);
       toknz->tmp.prop = _eo_tokenizer_property_get(toknz, ( toknz->p));
    }
        break;
-       case 11:
-#line 670 "lib/eolian/eo_lexer.rl"
+       case 12:
+#line 635 "lib/eolian/eo_lexer.rl"
+       {
+      toknz->tmp.fscope = _eo_tokenizer_scope_get(toknz, ( toknz->p));
+   }
+       break;
+       case 13:
+#line 673 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       if (toknz->tmp.meth->ret != NULL)
@@ -1552,8 +1744,8 @@ _eof_trans:
       toknz->tmp.meth->ret = _eo_tokenizer_return_get(toknz, ( toknz->p));
    }
        break;
-       case 12:
-#line 677 "lib/eolian/eo_lexer.rl"
+       case 14:
+#line 680 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       if (toknz->tmp.meth->ret != NULL) ABORT(toknz, "No ret!!!");
@@ -1563,54 +1755,60 @@ _eof_trans:
       INF("        %s", toknz->tmp.meth->ret->comment);
    }
        break;
-       case 13:
-#line 686 "lib/eolian/eo_lexer.rl"
+       case 15:
+#line 689 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       toknz->tmp.meth->legacy = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 14:
-#line 691 "lib/eolian/eo_lexer.rl"
+       case 16:
+#line 694 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       toknz->tmp.meth->obj_const = EINA_TRUE;
       INF("        obj const");
    }
        break;
-       case 15:
-#line 751 "lib/eolian/eo_lexer.rl"
+       case 17:
+#line 755 "lib/eolian/eo_lexer.rl"
        {
       if (toknz->tmp.meth != NULL)
         ABORT(toknz, "there is a pending method definition %s", toknz->tmp.meth->name);
       toknz->tmp.meth = _eo_tokenizer_method_get(toknz, ( toknz->p));
    }
        break;
-       case 16:
-#line 783 "lib/eolian/eo_lexer.rl"
+       case 18:
+#line 761 "lib/eolian/eo_lexer.rl"
+       {
+      toknz->tmp.fscope = _eo_tokenizer_scope_get(toknz, ( toknz->p));
+   }
+       break;
+       case 19:
+#line 791 "lib/eolian/eo_lexer.rl"
        {
       const char *base = _eo_tokenizer_token_get(toknz, ( toknz->p));
       toknz->tmp.str_items = eina_list_append(toknz->tmp.str_items, base);
    }
        break;
-       case 17:
-#line 788 "lib/eolian/eo_lexer.rl"
+       case 20:
+#line 796 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       toknz->tmp.kls->inherits = toknz->tmp.str_items;
       toknz->tmp.str_items = NULL;
    }
        break;
-       case 18:
-#line 836 "lib/eolian/eo_lexer.rl"
+       case 21:
+#line 848 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       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 842 "lib/eolian/eo_lexer.rl"
+       case 22:
+#line 854 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.event) ABORT(toknz, "No event!!!");
       if (toknz->tmp.event->type != NULL)
@@ -1618,8 +1816,8 @@ _eof_trans:
       toknz->tmp.event->type = _eo_tokenizer_token_get(toknz, ( toknz->p)-1);
    }
        break;
-       case 20:
-#line 849 "lib/eolian/eo_lexer.rl"
+       case 23:
+#line 861 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.event) ABORT(toknz, "No event!!!");
       if (toknz->tmp.event->comment != NULL)
@@ -1628,8 +1826,8 @@ _eof_trans:
       toknz->tmp.event = NULL;
    }
        break;
-       case 21:
-#line 857 "lib/eolian/eo_lexer.rl"
+       case 24:
+#line 869 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       if (toknz->tmp.kls->legacy_prefix != NULL)
@@ -1637,8 +1835,8 @@ _eof_trans:
       toknz->tmp.kls->legacy_prefix = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 22:
-#line 866 "lib/eolian/eo_lexer.rl"
+       case 25:
+#line 878 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       if (toknz->tmp.kls->eo_prefix != NULL)
@@ -1646,8 +1844,8 @@ _eof_trans:
       toknz->tmp.kls->eo_prefix = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 23:
-#line 875 "lib/eolian/eo_lexer.rl"
+       case 26:
+#line 887 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       if (toknz->tmp.kls->data_type != NULL)
@@ -1655,16 +1853,16 @@ _eof_trans:
       toknz->tmp.kls->data_type = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 24:
-#line 888 "lib/eolian/eo_lexer.rl"
+       case 27:
+#line 900 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
         toknz->tmp.impl = _eo_tokenizer_implement_get(toknz, ( toknz->p));
         toknz->tmp.kls->implements = eina_list_append(toknz->tmp.kls->implements, toknz->tmp.impl);
    }
        break;
-       case 25:
-#line 894 "lib/eolian/eo_lexer.rl"
+       case 28:
+#line 906 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (toknz->tmp.impl->legacy)
@@ -1672,8 +1870,8 @@ _eof_trans:
         toknz->tmp.impl->legacy = calloc(1, sizeof(Eo_Implement_Legacy_Def));
    }
        break;
-       case 26:
-#line 901 "lib/eolian/eo_lexer.rl"
+       case 29:
+#line 913 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (!toknz->tmp.impl->legacy)
@@ -1681,8 +1879,8 @@ _eof_trans:
         toknz->tmp.impl->legacy->function_name = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 27:
-#line 908 "lib/eolian/eo_lexer.rl"
+       case 30:
+#line 920 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         toknz->tmp.impl_leg_param = calloc(1, sizeof(Eo_Implement_Legacy_Param_Def));
@@ -1692,24 +1890,24 @@ _eof_trans:
         toknz->tmp.impl_leg_param->eo_name = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 28:
-#line 917 "lib/eolian/eo_lexer.rl"
+       case 31:
+#line 929 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl_leg_param)
            ABORT(toknz, "No implement legacy param!!!");
         toknz->tmp.impl_leg_param->legacy_name = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 29:
-#line 923 "lib/eolian/eo_lexer.rl"
+       case 32:
+#line 935 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl_leg_param)
            ABORT(toknz, "No implement legacy param!!!");
         toknz->tmp.impl_leg_param->comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-2);
    }
        break;
-       case 30:
-#line 929 "lib/eolian/eo_lexer.rl"
+       case 33:
+#line 941 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (!toknz->tmp.impl->legacy)
@@ -1717,8 +1915,8 @@ _eof_trans:
         toknz->tmp.impl->legacy->ret_type= _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 31:
-#line 936 "lib/eolian/eo_lexer.rl"
+       case 34:
+#line 948 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (!toknz->tmp.impl->legacy)
@@ -1726,32 +1924,32 @@ _eof_trans:
         toknz->tmp.impl->legacy->ret_value = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 32:
-#line 1007 "lib/eolian/eo_lexer.rl"
+       case 35:
+#line 1019 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_REGULAR;
    }
        break;
-       case 33:
-#line 1010 "lib/eolian/eo_lexer.rl"
+       case 36:
+#line 1022 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_ABSTRACT;
    }
        break;
-       case 34:
-#line 1013 "lib/eolian/eo_lexer.rl"
+       case 37:
+#line 1025 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_MIXIN;
    }
        break;
-       case 35:
-#line 1016 "lib/eolian/eo_lexer.rl"
+       case 38:
+#line 1028 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_INTERFACE;
    }
        break;
-       case 36:
-#line 1020 "lib/eolian/eo_lexer.rl"
+       case 39:
+#line 1032 "lib/eolian/eo_lexer.rl"
        {
       if (toknz->tmp.kls != NULL)
         ABORT(toknz, "there is a pending class definition %s", toknz->tmp.kls->name);
@@ -1759,12 +1957,12 @@ _eof_trans:
       toknz->tmp.kls->type = toknz->tmp.kls_type;
    }
        break;
-       case 39:
+       case 42:
 #line 1 "NONE"
        { toknz->te = ( toknz->p)+1;}
        break;
-       case 40:
-#line 453 "lib/eolian/eo_lexer.rl"
+       case 43:
+#line 451 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
       if (toknz->tmp.accessor->comment != NULL)
@@ -1773,34 +1971,34 @@ _eof_trans:
       INF("        %s", toknz->tmp.accessor->comment);
    }}
        break;
-       case 41:
-#line 389 "lib/eolian/eo_lexer.rl"
+       case 44:
+#line 385 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 42:
-#line 516 "lib/eolian/eo_lexer.rl"
+       case 45:
+#line 514 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
-       case 43:
-#line 517 "lib/eolian/eo_lexer.rl"
+       case 46:
+#line 515 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
-       case 44:
-#line 482 "lib/eolian/eo_lexer.rl"
+       case 47:
+#line 480 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      }");
       if (!toknz->tmp.prop) ABORT(toknz, "No prop!!!");
       toknz->tmp.prop->accessors = eina_list_append(toknz->tmp.prop->accessors, toknz->tmp.accessor);
       toknz->tmp.accessor = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 319; goto _again;}
+      { toknz->cs = 369; goto _again;}
    }}
        break;
-       case 45:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 48:
+#line 394 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -1818,27 +2016,27 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 46:
-#line 512 "lib/eolian/eo_lexer.rl"
+       case 49:
+#line 510 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 47:
-#line 515 "lib/eolian/eo_lexer.rl"
+       case 50:
+#line 513 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 48:
-#line 482 "lib/eolian/eo_lexer.rl"
+       case 51:
+#line 480 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("      }");
       if (!toknz->tmp.prop) ABORT(toknz, "No prop!!!");
       toknz->tmp.prop->accessors = eina_list_append(toknz->tmp.prop->accessors, toknz->tmp.accessor);
       toknz->tmp.accessor = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 319; goto _again;}
+      { toknz->cs = 369; goto _again;}
    }}
        break;
-       case 49:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 52:
+#line 394 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -1856,12 +2054,12 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 50:
-#line 515 "lib/eolian/eo_lexer.rl"
+       case 53:
+#line 513 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}}
        break;
-       case 51:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 54:
+#line 394 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -1879,29 +2077,29 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 52:
-#line 389 "lib/eolian/eo_lexer.rl"
+       case 55:
+#line 385 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 53:
-#line 541 "lib/eolian/eo_lexer.rl"
+       case 56:
+#line 539 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      }");
       toknz->tmp.param = NULL;
       toknz->current_nesting--;
       if (toknz->tmp.prop)
-        { toknz->cs = 319; goto _again;}
+        { toknz->cs = 369; goto _again;}
       else if (toknz->tmp.meth)
-        { toknz->cs = 332; goto _again;}
+        { toknz->cs = 383; goto _again;}
       else
         ABORT(toknz, "leaving tokenize_params but there is no property nor method pending");
    }}
        break;
-       case 54:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 57:
+#line 394 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -1919,30 +2117,30 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 55:
-#line 557 "lib/eolian/eo_lexer.rl"
+       case 58:
+#line 555 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 56:
-#line 559 "lib/eolian/eo_lexer.rl"
+       case 59:
+#line 557 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 57:
-#line 541 "lib/eolian/eo_lexer.rl"
+       case 60:
+#line 539 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("      }");
       toknz->tmp.param = NULL;
       toknz->current_nesting--;
       if (toknz->tmp.prop)
-        { toknz->cs = 319; goto _again;}
+        { toknz->cs = 369; goto _again;}
       else if (toknz->tmp.meth)
-        { toknz->cs = 332; goto _again;}
+        { toknz->cs = 383; goto _again;}
       else
         ABORT(toknz, "leaving tokenize_params but there is no property nor method pending");
    }}
        break;
-       case 58:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 61:
+#line 394 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -1960,12 +2158,12 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 59:
-#line 559 "lib/eolian/eo_lexer.rl"
+       case 62:
+#line 557 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}}
        break;
-       case 60:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 63:
+#line 394 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -1983,51 +2181,51 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 61:
-#line 389 "lib/eolian/eo_lexer.rl"
+       case 64:
+#line 385 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 62:
-#line 566 "lib/eolian/eo_lexer.rl"
+       case 65:
+#line 564 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      get {");
       toknz->tmp.accessor = _eo_tokenizer_accessor_get(toknz, GETTER);
       toknz->current_nesting++;
-      { toknz->cs = 303; goto _again;}
+      { toknz->cs = 353; goto _again;}
    }}
        break;
-       case 63:
-#line 573 "lib/eolian/eo_lexer.rl"
+       case 66:
+#line 571 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      set {");
       toknz->tmp.accessor = _eo_tokenizer_accessor_get(toknz, SETTER);
       toknz->current_nesting++;
-      { toknz->cs = 303; goto _again;}
+      { toknz->cs = 353; goto _again;}
    }}
        break;
-       case 64:
-#line 580 "lib/eolian/eo_lexer.rl"
+       case 67:
+#line 578 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      keys {");
       toknz->current_nesting++;
       toknz->tmp.params = &(toknz->tmp.prop->keys);
-      { toknz->cs = 312; goto _again;}
+      { toknz->cs = 362; goto _again;}
    }}
        break;
-       case 65:
-#line 587 "lib/eolian/eo_lexer.rl"
+       case 68:
+#line 585 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      values {");
       toknz->current_nesting++;
       toknz->tmp.params = &(toknz->tmp.prop->values);
-      { toknz->cs = 312; goto _again;}
+      { toknz->cs = 362; goto _again;}
    }}
        break;
-       case 66:
-#line 594 "lib/eolian/eo_lexer.rl"
+       case 69:
+#line 592 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.prop) ABORT(toknz, "No property!!!");
       if (eina_list_count(toknz->tmp.prop->accessors) == 0)
@@ -2035,12 +2233,13 @@ _eof_trans:
       INF("    }");
       toknz->tmp.kls->properties = eina_list_append(toknz->tmp.kls->properties, toknz->tmp.prop);
       toknz->tmp.prop = NULL;
+      toknz->tmp.fscope = FUNC_PUBLIC;
       toknz->current_nesting--;
-      { toknz->cs = 327; goto _again;}
+      { toknz->cs = 377; goto _again;}
    }}
        break;
-       case 67:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 70:
+#line 394 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2058,12 +2257,12 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 68:
-#line 611 "lib/eolian/eo_lexer.rl"
+       case 71:
+#line 610 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 69:
-#line 594 "lib/eolian/eo_lexer.rl"
+       case 72:
+#line 592 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       if (!toknz->tmp.prop) ABORT(toknz, "No property!!!");
       if (eina_list_count(toknz->tmp.prop->accessors) == 0)
@@ -2071,12 +2270,13 @@ _eof_trans:
       INF("    }");
       toknz->tmp.kls->properties = eina_list_append(toknz->tmp.kls->properties, toknz->tmp.prop);
       toknz->tmp.prop = NULL;
+      toknz->tmp.fscope = FUNC_PUBLIC;
       toknz->current_nesting--;
-      { toknz->cs = 327; goto _again;}
+      { toknz->cs = 377; goto _again;}
    }}
        break;
-       case 70:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 73:
+#line 394 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2094,8 +2294,8 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 71:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 74:
+#line 394 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2113,32 +2313,32 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 72:
-#line 389 "lib/eolian/eo_lexer.rl"
+       case 75:
+#line 385 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 73:
-#line 623 "lib/eolian/eo_lexer.rl"
+       case 76:
+#line 622 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.prop) ABORT(toknz, "No property!!!");
       INF("    %s {", toknz->tmp.prop->name);
       toknz->current_nesting++;
-      { toknz->cs = 319; goto _again;}
+      { toknz->cs = 369; goto _again;}
    }}
        break;
-       case 74:
-#line 636 "lib/eolian/eo_lexer.rl"
+       case 77:
+#line 639 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  }");
       toknz->current_nesting--;
-      { toknz->cs = 347; goto _again;}
+      { toknz->cs = 399; goto _again;}
    }}
        break;
-       case 75:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 78:
+#line 394 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2156,20 +2356,20 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 76:
-#line 645 "lib/eolian/eo_lexer.rl"
+       case 79:
+#line 648 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 77:
-#line 636 "lib/eolian/eo_lexer.rl"
+       case 80:
+#line 639 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("  }");
       toknz->current_nesting--;
-      { toknz->cs = 347; goto _again;}
+      { toknz->cs = 399; goto _again;}
    }}
        break;
-       case 78:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 81:
+#line 394 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2187,8 +2387,8 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 79:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 82:
+#line 394 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2206,8 +2406,8 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 80:
-#line 654 "lib/eolian/eo_lexer.rl"
+       case 83:
+#line 657 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       if (toknz->tmp.meth->comment != NULL)
@@ -2216,33 +2416,33 @@ _eof_trans:
       INF("        %s", toknz->tmp.meth->comment);
    }}
        break;
-       case 81:
-#line 389 "lib/eolian/eo_lexer.rl"
+       case 84:
+#line 385 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 82:
-#line 662 "lib/eolian/eo_lexer.rl"
+       case 85:
+#line 665 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       INF("      params {");
       toknz->current_nesting++;
       toknz->tmp.params = &(toknz->tmp.meth->params);
-      { toknz->cs = 312; goto _again;}
+      { toknz->cs = 362; goto _again;}
    }}
        break;
-       case 83:
-#line 736 "lib/eolian/eo_lexer.rl"
+       case 86:
+#line 740 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
-       case 84:
-#line 737 "lib/eolian/eo_lexer.rl"
+       case 87:
+#line 741 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
-       case 85:
-#line 697 "lib/eolian/eo_lexer.rl"
+       case 88:
+#line 700 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       Eina_List **l = NULL;
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
@@ -2263,12 +2463,13 @@ _eof_trans:
       toknz->tmp.meth->type = toknz->current_methods_type;
       *l = eina_list_append(*l, toknz->tmp.meth);
       toknz->tmp.meth = NULL;
+      toknz->tmp.fscope = FUNC_PUBLIC;
       toknz->current_nesting--;
-      { toknz->cs = 342; goto _again;}
+      { toknz->cs = 393; goto _again;}
    }}
        break;
-       case 86:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 89:
+#line 394 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2286,16 +2487,16 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 87:
-#line 731 "lib/eolian/eo_lexer.rl"
+       case 90:
+#line 735 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 88:
-#line 735 "lib/eolian/eo_lexer.rl"
+       case 91:
+#line 739 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 89:
-#line 697 "lib/eolian/eo_lexer.rl"
+       case 92:
+#line 700 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       Eina_List **l = NULL;
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
@@ -2316,12 +2517,13 @@ _eof_trans:
       toknz->tmp.meth->type = toknz->current_methods_type;
       *l = eina_list_append(*l, toknz->tmp.meth);
       toknz->tmp.meth = NULL;
+      toknz->tmp.fscope = FUNC_PUBLIC;
       toknz->current_nesting--;
-      { toknz->cs = 342; goto _again;}
+      { toknz->cs = 393; goto _again;}
    }}
        break;
-       case 90:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 93:
+#line 394 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2339,12 +2541,12 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 91:
-#line 735 "lib/eolian/eo_lexer.rl"
+       case 94:
+#line 739 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}}
        break;
-       case 92:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 95:
+#line 394 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2362,33 +2564,33 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 93:
-#line 389 "lib/eolian/eo_lexer.rl"
+       case 96:
+#line 385 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 94:
-#line 744 "lib/eolian/eo_lexer.rl"
+       case 97:
+#line 748 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       INF("    %s {", toknz->tmp.meth->name);
       toknz->current_nesting++;
-      { toknz->cs = 332; goto _again;}
+      { toknz->cs = 383; goto _again;}
    }}
        break;
-       case 95:
-#line 757 "lib/eolian/eo_lexer.rl"
+       case 98:
+#line 765 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  }");
       toknz->current_methods_type = METH_TYPE_LAST;
       toknz->current_nesting--;
-      { toknz->cs = 347; goto _again;}
+      { toknz->cs = 399; goto _again;}
    }}
        break;
-       case 96:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 99:
+#line 394 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2406,21 +2608,21 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 97:
-#line 767 "lib/eolian/eo_lexer.rl"
+       case 100:
+#line 775 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 98:
-#line 757 "lib/eolian/eo_lexer.rl"
+       case 101:
+#line 765 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("  }");
       toknz->current_methods_type = METH_TYPE_LAST;
       toknz->current_nesting--;
-      { toknz->cs = 347; goto _again;}
+      { toknz->cs = 399; goto _again;}
    }}
        break;
-       case 99:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 102:
+#line 394 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2438,8 +2640,8 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 100:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 103:
+#line 394 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2457,8 +2659,8 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 101:
-#line 776 "lib/eolian/eo_lexer.rl"
+       case 104:
+#line 784 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       if (toknz->tmp.kls->comment != NULL)
@@ -2466,71 +2668,75 @@ _eof_trans:
       toknz->tmp.kls->comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-1);
    }}
        break;
-       case 102:
-#line 389 "lib/eolian/eo_lexer.rl"
+       case 105:
+#line 385 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 103:
-#line 794 "lib/eolian/eo_lexer.rl"
+       case 106:
+#line 802 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
    }}
        break;
-       case 104:
-#line 797 "lib/eolian/eo_lexer.rl"
+       case 107:
+#line 805 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
    }}
        break;
-       case 105:
-#line 800 "lib/eolian/eo_lexer.rl"
+       case 108:
+#line 808 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  constructors {");
       toknz->current_methods_type = METH_CONSTRUCTOR;
+      toknz->tmp.fscope = FUNC_PUBLIC;
       toknz->current_nesting++;
-      { toknz->cs = 342; goto _again;}
+      { toknz->cs = 393; goto _again;}
    }}
        break;
-       case 106:
-#line 807 "lib/eolian/eo_lexer.rl"
+       case 109:
+#line 816 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  destructors {");
       toknz->current_methods_type = METH_DESTRUCTOR;
+      toknz->tmp.fscope = FUNC_PUBLIC;
       toknz->current_nesting++;
-      { toknz->cs = 342; goto _again;}
+      { toknz->cs = 393; goto _again;}
    }}
        break;
-       case 107:
-#line 814 "lib/eolian/eo_lexer.rl"
+       case 110:
+#line 824 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  properties {");
+      toknz->tmp.fscope = FUNC_PUBLIC;
       toknz->current_nesting++;
-      { toknz->cs = 327; goto _again;}
+      { toknz->cs = 377; goto _again;}
    }}
        break;
-       case 108:
-#line 820 "lib/eolian/eo_lexer.rl"
+       case 111:
+#line 831 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  begin methods");
       toknz->current_methods_type = METH_REGULAR;
+      toknz->tmp.fscope = FUNC_PUBLIC;
       toknz->current_nesting++;
-      { toknz->cs = 342; goto _again;}
+      { toknz->cs = 393; goto _again;}
    }}
        break;
-       case 109:
-#line 827 "lib/eolian/eo_lexer.rl"
+       case 112:
+#line 839 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       INF("end class: %s", toknz->tmp.kls->name);
       toknz->classes = eina_list_append(toknz->classes, toknz->tmp.kls);
       toknz->tmp.kls = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 296; goto _again;}
+      { toknz->cs = 346; goto _again;}
    }}
        break;
-       case 110:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 113:
+#line 394 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2548,45 +2754,45 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 111:
-#line 982 "lib/eolian/eo_lexer.rl"
+       case 114:
+#line 994 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 112:
-#line 985 "lib/eolian/eo_lexer.rl"
+       case 115:
+#line 997 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 113:
-#line 986 "lib/eolian/eo_lexer.rl"
+       case 116:
+#line 998 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 114:
-#line 987 "lib/eolian/eo_lexer.rl"
+       case 117:
+#line 999 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 115:
-#line 794 "lib/eolian/eo_lexer.rl"
+       case 118:
+#line 802 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
    }}
        break;
-       case 116:
-#line 797 "lib/eolian/eo_lexer.rl"
+       case 119:
+#line 805 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
    }}
        break;
-       case 117:
-#line 827 "lib/eolian/eo_lexer.rl"
+       case 120:
+#line 839 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       INF("end class: %s", toknz->tmp.kls->name);
       toknz->classes = eina_list_append(toknz->classes, toknz->tmp.kls);
       toknz->tmp.kls = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 296; goto _again;}
+      { toknz->cs = 346; goto _again;}
    }}
        break;
-       case 118:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 121:
+#line 394 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2604,8 +2810,8 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 119:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 122:
+#line 394 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2623,24 +2829,24 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 120:
-#line 389 "lib/eolian/eo_lexer.rl"
+       case 123:
+#line 385 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 121:
-#line 1000 "lib/eolian/eo_lexer.rl"
+       case 124:
+#line 1012 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       INF("begin class: %s", toknz->tmp.kls->name);
       toknz->current_nesting++;
-      { toknz->cs = 347; goto _again;}
+      { toknz->cs = 399; goto _again;}
    }}
        break;
-       case 122:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 125:
+#line 394 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2658,12 +2864,12 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 123:
-#line 1035 "lib/eolian/eo_lexer.rl"
+       case 126:
+#line 1047 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 124:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 127:
+#line 394 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2681,8 +2887,8 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 125:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 128:
+#line 394 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2700,7 +2906,7 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-#line 2704 "lib/eolian/eo_lexer.c"
+#line 2910 "lib/eolian/eo_lexer.c"
                }
        }
 
@@ -2709,11 +2915,11 @@ _again:
        _nacts = (unsigned int) *_acts++;
        while ( _nacts-- > 0 ) {
                switch ( *_acts++ ) {
-       case 37:
+       case 40:
 #line 1 "NONE"
        { toknz->ts = 0;}
        break;
-#line 2717 "lib/eolian/eo_lexer.c"
+#line 2923 "lib/eolian/eo_lexer.c"
                }
        }
 
@@ -2731,12 +2937,12 @@ _again:
        _out: {}
        }
 
-#line 1090 "lib/eolian/eo_lexer.rl"
+#line 1102 "lib/eolian/eo_lexer.rl"
 
         if ( toknz->cs == 
-#line 2738 "lib/eolian/eo_lexer.c"
+#line 2944 "lib/eolian/eo_lexer.c"
 -1
-#line 1091 "lib/eolian/eo_lexer.rl"
+#line 1103 "lib/eolian/eo_lexer.rl"
  )
           {
              ERR("%s: wrong termination", source);
@@ -2782,7 +2988,7 @@ eo_tokenizer_mem_walk(Eo_Tokenizer *toknz, const char *source, char *buffer, uns
    Eina_Bool ret = EINA_TRUE;
 
    
-#line 2786 "lib/eolian/eo_lexer.c"
+#line 2992 "lib/eolian/eo_lexer.c"
        {
         toknz->cs = eo_tokenizer_start;
         toknz->ts = 0;
@@ -2790,7 +2996,7 @@ eo_tokenizer_mem_walk(Eo_Tokenizer *toknz, const char *source, char *buffer, uns
         toknz->act = 0;
        }
 
-#line 1136 "lib/eolian/eo_lexer.rl"
+#line 1148 "lib/eolian/eo_lexer.rl"
 
    toknz->p = buffer;
 
@@ -2799,11 +3005,11 @@ eo_tokenizer_mem_walk(Eo_Tokenizer *toknz, const char *source, char *buffer, uns
    toknz->eof = toknz->pe;
 
    
-#line 2803 "lib/eolian/eo_lexer.c"
+#line 3009 "lib/eolian/eo_lexer.c"
        {
        int _klen;
        unsigned int _trans;
-       const char *_acts;
+       const unsigned char *_acts;
        unsigned int _nacts;
        const char *_keys;
 
@@ -2814,11 +3020,11 @@ _resume:
        _nacts = (unsigned int) *_acts++;
        while ( _nacts-- > 0 ) {
                switch ( *_acts++ ) {
-       case 38:
+       case 41:
 #line 1 "NONE"
        { toknz->ts = ( toknz->p);}
        break;
-#line 2822 "lib/eolian/eo_lexer.c"
+#line 3028 "lib/eolian/eo_lexer.c"
                }
        }
 
@@ -2885,28 +3091,35 @@ _eof_trans:
                switch ( *_acts++ )
                {
        case 0:
-#line 374 "lib/eolian/eo_lexer.rl"
+#line 365 "lib/eolian/eo_lexer.rl"
        {
       toknz->current_line += 1;
       DBG("inc[%d] %d", toknz->cs, toknz->current_line);
    }
        break;
        case 1:
-#line 379 "lib/eolian/eo_lexer.rl"
+#line 370 "lib/eolian/eo_lexer.rl"
        {
       toknz->saved.line = toknz->current_line;
       DBG("save line[%d] %d", toknz->cs, toknz->current_line);
    }
        break;
        case 2:
-#line 384 "lib/eolian/eo_lexer.rl"
+#line 375 "lib/eolian/eo_lexer.rl"
        {
       toknz->saved.tok = ( toknz->p);
       DBG("save token[%d] %p %c", toknz->cs, ( toknz->p), *( toknz->p));
    }
        break;
        case 3:
-#line 461 "lib/eolian/eo_lexer.rl"
+#line 380 "lib/eolian/eo_lexer.rl"
+       {
+      DBG("move ts %d chars forward", (int)(( toknz->p) - toknz->ts));
+      toknz->ts = ( toknz->p);
+   }
+       break;
+       case 4:
+#line 459 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
       if (toknz->tmp.accessor->ret != NULL)
@@ -2914,8 +3127,8 @@ _eof_trans:
       toknz->tmp.accessor->ret = _eo_tokenizer_return_get(toknz, ( toknz->p));
    }
        break;
-       case 4:
-#line 468 "lib/eolian/eo_lexer.rl"
+       case 5:
+#line 466 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
       if (!toknz->tmp.accessor->ret) ABORT(toknz, "No ret!!!");
@@ -2925,21 +3138,21 @@ _eof_trans:
       INF("        %s", toknz->tmp.accessor->ret->comment);
    }
        break;
-       case 5:
-#line 477 "lib/eolian/eo_lexer.rl"
+       case 6:
+#line 475 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
       toknz->tmp.accessor->legacy = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 6:
-#line 491 "lib/eolian/eo_lexer.rl"
+       case 7:
+#line 489 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.accessor_param = _eo_tokenizer_accessor_param_get(toknz, ( toknz->p));
    }
        break;
-       case 7:
-#line 495 "lib/eolian/eo_lexer.rl"
+       case 8:
+#line 493 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.accessor_param)
          ABORT(toknz, "No accessor param!!!");
@@ -2949,8 +3162,8 @@ _eof_trans:
       toknz->tmp.accessor_param = NULL;
    }
        break;
-       case 8:
-#line 524 "lib/eolian/eo_lexer.rl"
+       case 9:
+#line 522 "lib/eolian/eo_lexer.rl"
        {
       const char *c = _eo_tokenizer_token_get(toknz, ( toknz->p)-2);
       if (toknz->tmp.param == NULL)
@@ -2959,8 +3172,8 @@ _eof_trans:
       toknz->tmp.param = NULL;
    }
        break;
-       case 9:
-#line 532 "lib/eolian/eo_lexer.rl"
+       case 10:
+#line 530 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.param = _eo_tokenizer_param_get(toknz, ( toknz->p));
       if (toknz->tmp.params)
@@ -2970,16 +3183,22 @@ _eof_trans:
       INF("        %s : %s", toknz->tmp.param->name, toknz->tmp.param->type);
    }
        break;
-       case 10:
-#line 630 "lib/eolian/eo_lexer.rl"
+       case 11:
+#line 629 "lib/eolian/eo_lexer.rl"
        {
       if (toknz->tmp.prop != NULL)
         ABORT(toknz, "there is a pending property definition %s", toknz->tmp.prop->name);
       toknz->tmp.prop = _eo_tokenizer_property_get(toknz, ( toknz->p));
    }
        break;
-       case 11:
-#line 670 "lib/eolian/eo_lexer.rl"
+       case 12:
+#line 635 "lib/eolian/eo_lexer.rl"
+       {
+      toknz->tmp.fscope = _eo_tokenizer_scope_get(toknz, ( toknz->p));
+   }
+       break;
+       case 13:
+#line 673 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       if (toknz->tmp.meth->ret != NULL)
@@ -2987,8 +3206,8 @@ _eof_trans:
       toknz->tmp.meth->ret = _eo_tokenizer_return_get(toknz, ( toknz->p));
    }
        break;
-       case 12:
-#line 677 "lib/eolian/eo_lexer.rl"
+       case 14:
+#line 680 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       if (toknz->tmp.meth->ret != NULL) ABORT(toknz, "No ret!!!");
@@ -2998,54 +3217,60 @@ _eof_trans:
       INF("        %s", toknz->tmp.meth->ret->comment);
    }
        break;
-       case 13:
-#line 686 "lib/eolian/eo_lexer.rl"
+       case 15:
+#line 689 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       toknz->tmp.meth->legacy = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 14:
-#line 691 "lib/eolian/eo_lexer.rl"
+       case 16:
+#line 694 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       toknz->tmp.meth->obj_const = EINA_TRUE;
       INF("        obj const");
    }
        break;
-       case 15:
-#line 751 "lib/eolian/eo_lexer.rl"
+       case 17:
+#line 755 "lib/eolian/eo_lexer.rl"
        {
       if (toknz->tmp.meth != NULL)
         ABORT(toknz, "there is a pending method definition %s", toknz->tmp.meth->name);
       toknz->tmp.meth = _eo_tokenizer_method_get(toknz, ( toknz->p));
    }
        break;
-       case 16:
-#line 783 "lib/eolian/eo_lexer.rl"
+       case 18:
+#line 761 "lib/eolian/eo_lexer.rl"
+       {
+      toknz->tmp.fscope = _eo_tokenizer_scope_get(toknz, ( toknz->p));
+   }
+       break;
+       case 19:
+#line 791 "lib/eolian/eo_lexer.rl"
        {
       const char *base = _eo_tokenizer_token_get(toknz, ( toknz->p));
       toknz->tmp.str_items = eina_list_append(toknz->tmp.str_items, base);
    }
        break;
-       case 17:
-#line 788 "lib/eolian/eo_lexer.rl"
+       case 20:
+#line 796 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       toknz->tmp.kls->inherits = toknz->tmp.str_items;
       toknz->tmp.str_items = NULL;
    }
        break;
-       case 18:
-#line 836 "lib/eolian/eo_lexer.rl"
+       case 21:
+#line 848 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       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 842 "lib/eolian/eo_lexer.rl"
+       case 22:
+#line 854 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.event) ABORT(toknz, "No event!!!");
       if (toknz->tmp.event->type != NULL)
@@ -3053,8 +3278,8 @@ _eof_trans:
       toknz->tmp.event->type = _eo_tokenizer_token_get(toknz, ( toknz->p)-1);
    }
        break;
-       case 20:
-#line 849 "lib/eolian/eo_lexer.rl"
+       case 23:
+#line 861 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.event) ABORT(toknz, "No event!!!");
       if (toknz->tmp.event->comment != NULL)
@@ -3063,8 +3288,8 @@ _eof_trans:
       toknz->tmp.event = NULL;
    }
        break;
-       case 21:
-#line 857 "lib/eolian/eo_lexer.rl"
+       case 24:
+#line 869 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       if (toknz->tmp.kls->legacy_prefix != NULL)
@@ -3072,8 +3297,8 @@ _eof_trans:
       toknz->tmp.kls->legacy_prefix = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 22:
-#line 866 "lib/eolian/eo_lexer.rl"
+       case 25:
+#line 878 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       if (toknz->tmp.kls->eo_prefix != NULL)
@@ -3081,8 +3306,8 @@ _eof_trans:
       toknz->tmp.kls->eo_prefix = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 23:
-#line 875 "lib/eolian/eo_lexer.rl"
+       case 26:
+#line 887 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       if (toknz->tmp.kls->data_type != NULL)
@@ -3090,16 +3315,16 @@ _eof_trans:
       toknz->tmp.kls->data_type = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 24:
-#line 888 "lib/eolian/eo_lexer.rl"
+       case 27:
+#line 900 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
         toknz->tmp.impl = _eo_tokenizer_implement_get(toknz, ( toknz->p));
         toknz->tmp.kls->implements = eina_list_append(toknz->tmp.kls->implements, toknz->tmp.impl);
    }
        break;
-       case 25:
-#line 894 "lib/eolian/eo_lexer.rl"
+       case 28:
+#line 906 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (toknz->tmp.impl->legacy)
@@ -3107,8 +3332,8 @@ _eof_trans:
         toknz->tmp.impl->legacy = calloc(1, sizeof(Eo_Implement_Legacy_Def));
    }
        break;
-       case 26:
-#line 901 "lib/eolian/eo_lexer.rl"
+       case 29:
+#line 913 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (!toknz->tmp.impl->legacy)
@@ -3116,8 +3341,8 @@ _eof_trans:
         toknz->tmp.impl->legacy->function_name = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 27:
-#line 908 "lib/eolian/eo_lexer.rl"
+       case 30:
+#line 920 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         toknz->tmp.impl_leg_param = calloc(1, sizeof(Eo_Implement_Legacy_Param_Def));
@@ -3127,24 +3352,24 @@ _eof_trans:
         toknz->tmp.impl_leg_param->eo_name = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 28:
-#line 917 "lib/eolian/eo_lexer.rl"
+       case 31:
+#line 929 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl_leg_param)
            ABORT(toknz, "No implement legacy param!!!");
         toknz->tmp.impl_leg_param->legacy_name = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 29:
-#line 923 "lib/eolian/eo_lexer.rl"
+       case 32:
+#line 935 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl_leg_param)
            ABORT(toknz, "No implement legacy param!!!");
         toknz->tmp.impl_leg_param->comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-2);
    }
        break;
-       case 30:
-#line 929 "lib/eolian/eo_lexer.rl"
+       case 33:
+#line 941 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (!toknz->tmp.impl->legacy)
@@ -3152,8 +3377,8 @@ _eof_trans:
         toknz->tmp.impl->legacy->ret_type= _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 31:
-#line 936 "lib/eolian/eo_lexer.rl"
+       case 34:
+#line 948 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (!toknz->tmp.impl->legacy)
@@ -3161,32 +3386,32 @@ _eof_trans:
         toknz->tmp.impl->legacy->ret_value = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 32:
-#line 1007 "lib/eolian/eo_lexer.rl"
+       case 35:
+#line 1019 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_REGULAR;
    }
        break;
-       case 33:
-#line 1010 "lib/eolian/eo_lexer.rl"
+       case 36:
+#line 1022 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_ABSTRACT;
    }
        break;
-       case 34:
-#line 1013 "lib/eolian/eo_lexer.rl"
+       case 37:
+#line 1025 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_MIXIN;
    }
        break;
-       case 35:
-#line 1016 "lib/eolian/eo_lexer.rl"
+       case 38:
+#line 1028 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_INTERFACE;
    }
        break;
-       case 36:
-#line 1020 "lib/eolian/eo_lexer.rl"
+       case 39:
+#line 1032 "lib/eolian/eo_lexer.rl"
        {
       if (toknz->tmp.kls != NULL)
         ABORT(toknz, "there is a pending class definition %s", toknz->tmp.kls->name);
@@ -3194,12 +3419,12 @@ _eof_trans:
       toknz->tmp.kls->type = toknz->tmp.kls_type;
    }
        break;
-       case 39:
+       case 42:
 #line 1 "NONE"
        { toknz->te = ( toknz->p)+1;}
        break;
-       case 40:
-#line 453 "lib/eolian/eo_lexer.rl"
+       case 43:
+#line 451 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
       if (toknz->tmp.accessor->comment != NULL)
@@ -3208,34 +3433,34 @@ _eof_trans:
       INF("        %s", toknz->tmp.accessor->comment);
    }}
        break;
-       case 41:
-#line 389 "lib/eolian/eo_lexer.rl"
+       case 44:
+#line 385 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 42:
-#line 516 "lib/eolian/eo_lexer.rl"
+       case 45:
+#line 514 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
-       case 43:
-#line 517 "lib/eolian/eo_lexer.rl"
+       case 46:
+#line 515 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
-       case 44:
-#line 482 "lib/eolian/eo_lexer.rl"
+       case 47:
+#line 480 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      }");
       if (!toknz->tmp.prop) ABORT(toknz, "No prop!!!");
       toknz->tmp.prop->accessors = eina_list_append(toknz->tmp.prop->accessors, toknz->tmp.accessor);
       toknz->tmp.accessor = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 319; goto _again;}
+      { toknz->cs = 369; goto _again;}
    }}
        break;
-       case 45:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 48:
+#line 394 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3253,27 +3478,27 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 46:
-#line 512 "lib/eolian/eo_lexer.rl"
+       case 49:
+#line 510 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 47:
-#line 515 "lib/eolian/eo_lexer.rl"
+       case 50:
+#line 513 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 48:
-#line 482 "lib/eolian/eo_lexer.rl"
+       case 51:
+#line 480 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("      }");
       if (!toknz->tmp.prop) ABORT(toknz, "No prop!!!");
       toknz->tmp.prop->accessors = eina_list_append(toknz->tmp.prop->accessors, toknz->tmp.accessor);
       toknz->tmp.accessor = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 319; goto _again;}
+      { toknz->cs = 369; goto _again;}
    }}
        break;
-       case 49:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 52:
+#line 394 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3291,12 +3516,12 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 50:
-#line 515 "lib/eolian/eo_lexer.rl"
+       case 53:
+#line 513 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}}
        break;
-       case 51:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 54:
+#line 394 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3314,29 +3539,29 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 52:
-#line 389 "lib/eolian/eo_lexer.rl"
+       case 55:
+#line 385 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 53:
-#line 541 "lib/eolian/eo_lexer.rl"
+       case 56:
+#line 539 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      }");
       toknz->tmp.param = NULL;
       toknz->current_nesting--;
       if (toknz->tmp.prop)
-        { toknz->cs = 319; goto _again;}
+        { toknz->cs = 369; goto _again;}
       else if (toknz->tmp.meth)
-        { toknz->cs = 332; goto _again;}
+        { toknz->cs = 383; goto _again;}
       else
         ABORT(toknz, "leaving tokenize_params but there is no property nor method pending");
    }}
        break;
-       case 54:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 57:
+#line 394 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3354,30 +3579,30 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 55:
-#line 557 "lib/eolian/eo_lexer.rl"
+       case 58:
+#line 555 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 56:
-#line 559 "lib/eolian/eo_lexer.rl"
+       case 59:
+#line 557 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 57:
-#line 541 "lib/eolian/eo_lexer.rl"
+       case 60:
+#line 539 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("      }");
       toknz->tmp.param = NULL;
       toknz->current_nesting--;
       if (toknz->tmp.prop)
-        { toknz->cs = 319; goto _again;}
+        { toknz->cs = 369; goto _again;}
       else if (toknz->tmp.meth)
-        { toknz->cs = 332; goto _again;}
+        { toknz->cs = 383; goto _again;}
       else
         ABORT(toknz, "leaving tokenize_params but there is no property nor method pending");
    }}
        break;
-       case 58:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 61:
+#line 394 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3395,12 +3620,12 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 59:
-#line 559 "lib/eolian/eo_lexer.rl"
+       case 62:
+#line 557 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}}
        break;
-       case 60:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 63:
+#line 394 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3418,51 +3643,51 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 61:
-#line 389 "lib/eolian/eo_lexer.rl"
+       case 64:
+#line 385 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 62:
-#line 566 "lib/eolian/eo_lexer.rl"
+       case 65:
+#line 564 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      get {");
       toknz->tmp.accessor = _eo_tokenizer_accessor_get(toknz, GETTER);
       toknz->current_nesting++;
-      { toknz->cs = 303; goto _again;}
+      { toknz->cs = 353; goto _again;}
    }}
        break;
-       case 63:
-#line 573 "lib/eolian/eo_lexer.rl"
+       case 66:
+#line 571 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      set {");
       toknz->tmp.accessor = _eo_tokenizer_accessor_get(toknz, SETTER);
       toknz->current_nesting++;
-      { toknz->cs = 303; goto _again;}
+      { toknz->cs = 353; goto _again;}
    }}
        break;
-       case 64:
-#line 580 "lib/eolian/eo_lexer.rl"
+       case 67:
+#line 578 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      keys {");
       toknz->current_nesting++;
       toknz->tmp.params = &(toknz->tmp.prop->keys);
-      { toknz->cs = 312; goto _again;}
+      { toknz->cs = 362; goto _again;}
    }}
        break;
-       case 65:
-#line 587 "lib/eolian/eo_lexer.rl"
+       case 68:
+#line 585 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      values {");
       toknz->current_nesting++;
       toknz->tmp.params = &(toknz->tmp.prop->values);
-      { toknz->cs = 312; goto _again;}
+      { toknz->cs = 362; goto _again;}
    }}
        break;
-       case 66:
-#line 594 "lib/eolian/eo_lexer.rl"
+       case 69:
+#line 592 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.prop) ABORT(toknz, "No property!!!");
       if (eina_list_count(toknz->tmp.prop->accessors) == 0)
@@ -3470,12 +3695,13 @@ _eof_trans:
       INF("    }");
       toknz->tmp.kls->properties = eina_list_append(toknz->tmp.kls->properties, toknz->tmp.prop);
       toknz->tmp.prop = NULL;
+      toknz->tmp.fscope = FUNC_PUBLIC;
       toknz->current_nesting--;
-      { toknz->cs = 327; goto _again;}
+      { toknz->cs = 377; goto _again;}
    }}
        break;
-       case 67:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 70:
+#line 394 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3493,12 +3719,12 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 68:
-#line 611 "lib/eolian/eo_lexer.rl"
+       case 71:
+#line 610 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 69:
-#line 594 "lib/eolian/eo_lexer.rl"
+       case 72:
+#line 592 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       if (!toknz->tmp.prop) ABORT(toknz, "No property!!!");
       if (eina_list_count(toknz->tmp.prop->accessors) == 0)
@@ -3506,12 +3732,13 @@ _eof_trans:
       INF("    }");
       toknz->tmp.kls->properties = eina_list_append(toknz->tmp.kls->properties, toknz->tmp.prop);
       toknz->tmp.prop = NULL;
+      toknz->tmp.fscope = FUNC_PUBLIC;
       toknz->current_nesting--;
-      { toknz->cs = 327; goto _again;}
+      { toknz->cs = 377; goto _again;}
    }}
        break;
-       case 70:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 73:
+#line 394 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3529,8 +3756,8 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 71:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 74:
+#line 394 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3548,32 +3775,32 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 72:
-#line 389 "lib/eolian/eo_lexer.rl"
+       case 75:
+#line 385 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 73:
-#line 623 "lib/eolian/eo_lexer.rl"
+       case 76:
+#line 622 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.prop) ABORT(toknz, "No property!!!");
       INF("    %s {", toknz->tmp.prop->name);
       toknz->current_nesting++;
-      { toknz->cs = 319; goto _again;}
+      { toknz->cs = 369; goto _again;}
    }}
        break;
-       case 74:
-#line 636 "lib/eolian/eo_lexer.rl"
+       case 77:
+#line 639 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  }");
       toknz->current_nesting--;
-      { toknz->cs = 347; goto _again;}
+      { toknz->cs = 399; goto _again;}
    }}
        break;
-       case 75:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 78:
+#line 394 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3591,20 +3818,20 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 76:
-#line 645 "lib/eolian/eo_lexer.rl"
+       case 79:
+#line 648 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 77:
-#line 636 "lib/eolian/eo_lexer.rl"
+       case 80:
+#line 639 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("  }");
       toknz->current_nesting--;
-      { toknz->cs = 347; goto _again;}
+      { toknz->cs = 399; goto _again;}
    }}
        break;
-       case 78:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 81:
+#line 394 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3622,8 +3849,8 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 79:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 82:
+#line 394 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3641,8 +3868,8 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 80:
-#line 654 "lib/eolian/eo_lexer.rl"
+       case 83:
+#line 657 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       if (toknz->tmp.meth->comment != NULL)
@@ -3651,33 +3878,33 @@ _eof_trans:
       INF("        %s", toknz->tmp.meth->comment);
    }}
        break;
-       case 81:
-#line 389 "lib/eolian/eo_lexer.rl"
+       case 84:
+#line 385 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 82:
-#line 662 "lib/eolian/eo_lexer.rl"
+       case 85:
+#line 665 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       INF("      params {");
       toknz->current_nesting++;
       toknz->tmp.params = &(toknz->tmp.meth->params);
-      { toknz->cs = 312; goto _again;}
+      { toknz->cs = 362; goto _again;}
    }}
        break;
-       case 83:
-#line 736 "lib/eolian/eo_lexer.rl"
+       case 86:
+#line 740 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
-       case 84:
-#line 737 "lib/eolian/eo_lexer.rl"
+       case 87:
+#line 741 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
-       case 85:
-#line 697 "lib/eolian/eo_lexer.rl"
+       case 88:
+#line 700 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       Eina_List **l = NULL;
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
@@ -3698,12 +3925,13 @@ _eof_trans:
       toknz->tmp.meth->type = toknz->current_methods_type;
       *l = eina_list_append(*l, toknz->tmp.meth);
       toknz->tmp.meth = NULL;
+      toknz->tmp.fscope = FUNC_PUBLIC;
       toknz->current_nesting--;
-      { toknz->cs = 342; goto _again;}
+      { toknz->cs = 393; goto _again;}
    }}
        break;
-       case 86:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 89:
+#line 394 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3721,16 +3949,16 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 87:
-#line 731 "lib/eolian/eo_lexer.rl"
+       case 90:
+#line 735 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 88:
-#line 735 "lib/eolian/eo_lexer.rl"
+       case 91:
+#line 739 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 89:
-#line 697 "lib/eolian/eo_lexer.rl"
+       case 92:
+#line 700 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       Eina_List **l = NULL;
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
@@ -3751,12 +3979,13 @@ _eof_trans:
       toknz->tmp.meth->type = toknz->current_methods_type;
       *l = eina_list_append(*l, toknz->tmp.meth);
       toknz->tmp.meth = NULL;
+      toknz->tmp.fscope = FUNC_PUBLIC;
       toknz->current_nesting--;
-      { toknz->cs = 342; goto _again;}
+      { toknz->cs = 393; goto _again;}
    }}
        break;
-       case 90:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 93:
+#line 394 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3774,12 +4003,12 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 91:
-#line 735 "lib/eolian/eo_lexer.rl"
+       case 94:
+#line 739 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}}
        break;
-       case 92:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 95:
+#line 394 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3797,33 +4026,33 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 93:
-#line 389 "lib/eolian/eo_lexer.rl"
+       case 96:
+#line 385 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 94:
-#line 744 "lib/eolian/eo_lexer.rl"
+       case 97:
+#line 748 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       INF("    %s {", toknz->tmp.meth->name);
       toknz->current_nesting++;
-      { toknz->cs = 332; goto _again;}
+      { toknz->cs = 383; goto _again;}
    }}
        break;
-       case 95:
-#line 757 "lib/eolian/eo_lexer.rl"
+       case 98:
+#line 765 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  }");
       toknz->current_methods_type = METH_TYPE_LAST;
       toknz->current_nesting--;
-      { toknz->cs = 347; goto _again;}
+      { toknz->cs = 399; goto _again;}
    }}
        break;
-       case 96:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 99:
+#line 394 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3841,21 +4070,21 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 97:
-#line 767 "lib/eolian/eo_lexer.rl"
+       case 100:
+#line 775 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 98:
-#line 757 "lib/eolian/eo_lexer.rl"
+       case 101:
+#line 765 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("  }");
       toknz->current_methods_type = METH_TYPE_LAST;
       toknz->current_nesting--;
-      { toknz->cs = 347; goto _again;}
+      { toknz->cs = 399; goto _again;}
    }}
        break;
-       case 99:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 102:
+#line 394 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3873,8 +4102,8 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 100:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 103:
+#line 394 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3892,8 +4121,8 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 101:
-#line 776 "lib/eolian/eo_lexer.rl"
+       case 104:
+#line 784 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       if (toknz->tmp.kls->comment != NULL)
@@ -3901,71 +4130,75 @@ _eof_trans:
       toknz->tmp.kls->comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-1);
    }}
        break;
-       case 102:
-#line 389 "lib/eolian/eo_lexer.rl"
+       case 105:
+#line 385 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 103:
-#line 794 "lib/eolian/eo_lexer.rl"
+       case 106:
+#line 802 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
    }}
        break;
-       case 104:
-#line 797 "lib/eolian/eo_lexer.rl"
+       case 107:
+#line 805 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
    }}
        break;
-       case 105:
-#line 800 "lib/eolian/eo_lexer.rl"
+       case 108:
+#line 808 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  constructors {");
       toknz->current_methods_type = METH_CONSTRUCTOR;
+      toknz->tmp.fscope = FUNC_PUBLIC;
       toknz->current_nesting++;
-      { toknz->cs = 342; goto _again;}
+      { toknz->cs = 393; goto _again;}
    }}
        break;
-       case 106:
-#line 807 "lib/eolian/eo_lexer.rl"
+       case 109:
+#line 816 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  destructors {");
       toknz->current_methods_type = METH_DESTRUCTOR;
+      toknz->tmp.fscope = FUNC_PUBLIC;
       toknz->current_nesting++;
-      { toknz->cs = 342; goto _again;}
+      { toknz->cs = 393; goto _again;}
    }}
        break;
-       case 107:
-#line 814 "lib/eolian/eo_lexer.rl"
+       case 110:
+#line 824 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  properties {");
+      toknz->tmp.fscope = FUNC_PUBLIC;
       toknz->current_nesting++;
-      { toknz->cs = 327; goto _again;}
+      { toknz->cs = 377; goto _again;}
    }}
        break;
-       case 108:
-#line 820 "lib/eolian/eo_lexer.rl"
+       case 111:
+#line 831 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  begin methods");
       toknz->current_methods_type = METH_REGULAR;
+      toknz->tmp.fscope = FUNC_PUBLIC;
       toknz->current_nesting++;
-      { toknz->cs = 342; goto _again;}
+      { toknz->cs = 393; goto _again;}
    }}
        break;
-       case 109:
-#line 827 "lib/eolian/eo_lexer.rl"
+       case 112:
+#line 839 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       INF("end class: %s", toknz->tmp.kls->name);
       toknz->classes = eina_list_append(toknz->classes, toknz->tmp.kls);
       toknz->tmp.kls = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 296; goto _again;}
+      { toknz->cs = 346; goto _again;}
    }}
        break;
-       case 110:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 113:
+#line 394 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3983,45 +4216,45 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 111:
-#line 982 "lib/eolian/eo_lexer.rl"
+       case 114:
+#line 994 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 112:
-#line 985 "lib/eolian/eo_lexer.rl"
+       case 115:
+#line 997 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 113:
-#line 986 "lib/eolian/eo_lexer.rl"
+       case 116:
+#line 998 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 114:
-#line 987 "lib/eolian/eo_lexer.rl"
+       case 117:
+#line 999 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 115:
-#line 794 "lib/eolian/eo_lexer.rl"
+       case 118:
+#line 802 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
    }}
        break;
-       case 116:
-#line 797 "lib/eolian/eo_lexer.rl"
+       case 119:
+#line 805 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
    }}
        break;
-       case 117:
-#line 827 "lib/eolian/eo_lexer.rl"
+       case 120:
+#line 839 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       INF("end class: %s", toknz->tmp.kls->name);
       toknz->classes = eina_list_append(toknz->classes, toknz->tmp.kls);
       toknz->tmp.kls = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 296; goto _again;}
+      { toknz->cs = 346; goto _again;}
    }}
        break;
-       case 118:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 121:
+#line 394 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -4039,8 +4272,8 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 119:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 122:
+#line 394 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -4058,24 +4291,24 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 120:
-#line 389 "lib/eolian/eo_lexer.rl"
+       case 123:
+#line 385 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 121:
-#line 1000 "lib/eolian/eo_lexer.rl"
+       case 124:
+#line 1012 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       INF("begin class: %s", toknz->tmp.kls->name);
       toknz->current_nesting++;
-      { toknz->cs = 347; goto _again;}
+      { toknz->cs = 399; goto _again;}
    }}
        break;
-       case 122:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 125:
+#line 394 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -4093,12 +4326,12 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 123:
-#line 1035 "lib/eolian/eo_lexer.rl"
+       case 126:
+#line 1047 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 124:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 127:
+#line 394 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -4116,8 +4349,8 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 125:
-#line 398 "lib/eolian/eo_lexer.rl"
+       case 128:
+#line 394 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -4135,7 +4368,7 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-#line 4139 "lib/eolian/eo_lexer.c"
+#line 4372 "lib/eolian/eo_lexer.c"
                }
        }
 
@@ -4144,11 +4377,11 @@ _again:
        _nacts = (unsigned int) *_acts++;
        while ( _nacts-- > 0 ) {
                switch ( *_acts++ ) {
-       case 37:
+       case 40:
 #line 1 "NONE"
        { toknz->ts = 0;}
        break;
-#line 4152 "lib/eolian/eo_lexer.c"
+#line 4385 "lib/eolian/eo_lexer.c"
                }
        }
 
@@ -4166,12 +4399,12 @@ _again:
        _out: {}
        }
 
-#line 1144 "lib/eolian/eo_lexer.rl"
+#line 1156 "lib/eolian/eo_lexer.rl"
 
    if ( toknz->cs == 
-#line 4173 "lib/eolian/eo_lexer.c"
+#line 4406 "lib/eolian/eo_lexer.c"
 -1
-#line 1145 "lib/eolian/eo_lexer.rl"
+#line 1157 "lib/eolian/eo_lexer.rl"
  )
      {
         ERR("%s: wrong termination", source);
index b36b460..8503432 100644 (file)
@@ -157,21 +157,12 @@ _eo_tokenizer_class_get(Eo_Tokenizer *toknz, char *p)
 static Eo_Property_Def*
 _eo_tokenizer_property_get(Eo_Tokenizer *toknz, char *p)
 {
-   Eo_Property_Def *prop = NULL;
-   if (!strncmp(toknz->saved.tok, "protected ", 10))
-     {
-        toknz->saved.tok += 10;
-        toknz->tmp.fscope = FUNC_PROTECTED;
-     }
-   else
-     {
-        prop = calloc(1, sizeof(Eo_Property_Def));
-        if (prop == NULL) ABORT(toknz, "calloc Eo_Property_Def failure");
+   Eo_Property_Def *prop = calloc(1, sizeof(Eo_Property_Def));
+   if (prop == NULL) ABORT(toknz, "calloc Eo_Property_Def failure");
 
-        prop->name = _eo_tokenizer_token_get(toknz, p);
-        prop->scope = toknz->tmp.fscope;
-        toknz->tmp.fscope = FUNC_PUBLIC;
-     }
+   prop->name = _eo_tokenizer_token_get(toknz, p);
+   prop->scope = toknz->tmp.fscope;
+   toknz->tmp.fscope = FUNC_PUBLIC;
 
    return prop;
 }
@@ -179,25 +170,25 @@ _eo_tokenizer_property_get(Eo_Tokenizer *toknz, char *p)
 static Eo_Method_Def*
 _eo_tokenizer_method_get(Eo_Tokenizer *toknz, char *p)
 {
-   Eo_Method_Def *meth = NULL;
-   if (!strncmp(toknz->saved.tok, "protected ", 10))
-     {
-        toknz->saved.tok += 10;
-        toknz->tmp.fscope = FUNC_PROTECTED;
-     }
-   else
-     {
-        meth = calloc(1, sizeof(Eo_Method_Def));
-        if (meth == NULL) ABORT(toknz, "calloc Eo_Method_Def failure");
+   Eo_Method_Def *meth = calloc(1, sizeof(Eo_Method_Def));
+   if (meth == NULL) ABORT(toknz, "calloc Eo_Method_Def failure");
 
-        meth->name = _eo_tokenizer_token_get(toknz, p);
-        meth->scope = toknz->tmp.fscope;
-        toknz->tmp.fscope = FUNC_PUBLIC;
-     }
+   meth->name = _eo_tokenizer_token_get(toknz, p);
+   meth->scope = toknz->tmp.fscope;
+   toknz->tmp.fscope = FUNC_PUBLIC;
 
    return meth;
 }
 
+static int
+_eo_tokenizer_scope_get(Eo_Tokenizer *toknz, EINA_UNUSED char *p)
+{
+   if (!strncmp(toknz->saved.tok, "protected ", 10))
+     return FUNC_PROTECTED;
+
+   return FUNC_PUBLIC;
+}
+
 static Eo_Param_Def*
 _eo_tokenizer_param_get(Eo_Tokenizer *toknz, char *p)
 {
@@ -386,6 +377,11 @@ _eo_tokenizer_implement_get(Eo_Tokenizer *toknz, char *p)
       DBG("save token[%d] %p %c", toknz->cs, fpc, *fpc);
    }
 
+   action move_ts {
+      DBG("move ts %d chars forward", (int)(fpc - toknz->ts));
+      toknz->ts = fpc;
+   }
+
    action show_comment {
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
@@ -439,7 +435,9 @@ _eo_tokenizer_implement_get(Eo_Tokenizer *toknz, char *p)
 
    # chars allowed on the return line.
    return_char       = (alnum_u | '*' | ws | '@' | '(' | ')' | '.' | '-' | '<' | '>');
-   func_name         = (alnum >save_fpc (alnum | '_')* (ws (alnum | '_')+)?);
+   scope             = ('public' | 'protected');
+   scope_def         = scope >save_fpc ws+ %move_ts;
+   func_name         = ((alnum (alnum | '_')?)+ - scope) >save_fpc;
 }%%
 
 %%{
@@ -598,6 +596,7 @@ _eo_tokenizer_implement_get(Eo_Tokenizer *toknz, char *p)
       INF("    }");
       toknz->tmp.kls->properties = eina_list_append(toknz->tmp.kls->properties, toknz->tmp.prop);
       toknz->tmp.prop = NULL;
+      toknz->tmp.fscope = FUNC_PUBLIC;
       toknz->current_nesting--;
       fgoto tokenize_properties;
    }
@@ -633,13 +632,17 @@ _eo_tokenizer_implement_get(Eo_Tokenizer *toknz, char *p)
       toknz->tmp.prop = _eo_tokenizer_property_get(toknz, fpc);
    }
 
+   action end_property_scope {
+      toknz->tmp.fscope = _eo_tokenizer_scope_get(toknz, fpc);
+   }
+
    action end_properties {
       INF("  }");
       toknz->current_nesting--;
       fgoto tokenize_class;
    }
 
-   begin_property = func_name %end_property_name ignore* begin_def;
+   begin_property = (scope_def %end_property_scope)? func_name %end_property_name ignore* begin_def;
 
    tokenize_properties := |*
       ignore+;       #=> show_ignore;
@@ -714,6 +717,7 @@ _eo_tokenizer_implement_get(Eo_Tokenizer *toknz, char *p)
       toknz->tmp.meth->type = toknz->current_methods_type;
       *l = eina_list_append(*l, toknz->tmp.meth);
       toknz->tmp.meth = NULL;
+      toknz->tmp.fscope = FUNC_PUBLIC;
       toknz->current_nesting--;
       fgoto tokenize_methods;
    }
@@ -754,6 +758,10 @@ _eo_tokenizer_implement_get(Eo_Tokenizer *toknz, char *p)
       toknz->tmp.meth = _eo_tokenizer_method_get(toknz, fpc);
    }
 
+   action end_method_scope {
+      toknz->tmp.fscope = _eo_tokenizer_scope_get(toknz, fpc);
+   }
+
    action end_methods {
       INF("  }");
       toknz->current_methods_type = METH_TYPE_LAST;
@@ -761,7 +769,7 @@ _eo_tokenizer_implement_get(Eo_Tokenizer *toknz, char *p)
       fgoto tokenize_class;
    }
 
-   begin_method = func_name %end_method_name ignore* begin_def;
+   begin_method = (scope_def %end_method_scope)? func_name %end_method_name ignore* begin_def;
 
    tokenize_methods := |*
       ignore+;       #=> show_ignore;
@@ -800,6 +808,7 @@ _eo_tokenizer_implement_get(Eo_Tokenizer *toknz, char *p)
    action begin_constructors {
       INF("  constructors {");
       toknz->current_methods_type = METH_CONSTRUCTOR;
+      toknz->tmp.fscope = FUNC_PUBLIC;
       toknz->current_nesting++;
       fgoto tokenize_methods;
    }
@@ -807,12 +816,14 @@ _eo_tokenizer_implement_get(Eo_Tokenizer *toknz, char *p)
    action begin_destructors {
       INF("  destructors {");
       toknz->current_methods_type = METH_DESTRUCTOR;
+      toknz->tmp.fscope = FUNC_PUBLIC;
       toknz->current_nesting++;
       fgoto tokenize_methods;
    }
 
    action begin_properties {
       INF("  properties {");
+      toknz->tmp.fscope = FUNC_PUBLIC;
       toknz->current_nesting++;
       fgoto tokenize_properties;
    }
@@ -820,6 +831,7 @@ _eo_tokenizer_implement_get(Eo_Tokenizer *toknz, char *p)
    action begin_methods {
       INF("  begin methods");
       toknz->current_methods_type = METH_REGULAR;
+      toknz->tmp.fscope = FUNC_PUBLIC;
       toknz->current_nesting++;
       fgoto tokenize_methods;
    }