<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -7,7 +7,7 @@ module KeywordSearch
       
   class &lt;&lt; self
   
-    # line 54 &quot;lib/keyword_search.rl&quot;
+    # line 63 &quot;lib/keyword_search.rl&quot;
 
     
     def search(input_string, definition=nil, &amp;block)
@@ -32,9 +32,12 @@ class &lt;&lt; self
 	private :_parser_actions, :_parser_actions=
 end
 self._parser_actions = [
-	0, 1, 3, 1, 5, 1, 6, 2, 
-	0, 2, 2, 1, 0, 3, 0, 2, 
-	4, 3, 1, 0, 4
+	0, 1, 0, 1, 4, 1, 5, 1, 
+	7, 2, 0, 2, 2, 2, 5, 2, 
+	3, 1, 2, 3, 4, 2, 3, 6, 
+	2, 4, 6, 3, 0, 3, 4, 3, 
+	0, 3, 6, 3, 3, 4, 0, 3, 
+	3, 4, 6, 3, 3, 6, 0
 ]
 
 class &lt;&lt; self
@@ -42,8 +45,45 @@ class &lt;&lt; self
 	private :_parser_key_offsets, :_parser_key_offsets=
 end
 self._parser_key_offsets = [
-	0, 0, 6, 10, 15, 19, 20, 21, 
-	22, 23
+	0, 0, 6, 11, 17, 22, 27, 32, 
+	33, 34, 36, 37, 38, 43, 49, 56, 
+	62, 64, 72, 73, 74, 78, 83, 84, 
+	85, 92, 99, 106, 108, 110, 115, 120, 
+	125, 132, 138, 146, 153, 160, 167, 175, 
+	182, 190, 198, 200, 205, 213, 220, 228, 
+	236, 242, 250, 257, 264, 272, 279, 286, 
+	293, 300, 308, 310, 312, 317, 322, 327, 
+	334, 340, 348, 355, 362, 369, 377, 384, 
+	392, 394, 399, 407, 414, 422, 429, 437, 
+	445, 453, 460, 465, 471, 478, 484, 492, 
+	493, 494, 498, 503, 504, 505, 512, 519, 
+	526, 528, 530, 535, 540, 545, 552, 558, 
+	566, 573, 580, 587, 595, 602, 610, 612, 
+	617, 625, 632, 640, 648, 654, 662, 669, 
+	676, 684, 691, 698, 705, 712, 720, 722, 
+	724, 729, 734, 739, 746, 752, 760, 767, 
+	774, 781, 789, 796, 804, 806, 811, 819, 
+	826, 834, 841, 849, 857, 865, 872, 877, 
+	882, 888, 895, 901, 909, 910, 911, 915, 
+	920, 921, 922, 929, 936, 943, 945, 947, 
+	952, 957, 962, 969, 975, 983, 990, 997, 
+	1004, 1012, 1019, 1027, 1035, 1037, 1042, 1050, 
+	1057, 1065, 1073, 1079, 1087, 1094, 1102, 1109, 
+	1116, 1123, 1125, 1127, 1132, 1137, 1142, 1149, 
+	1155, 1163, 1170, 1177, 1184, 1189, 1196, 1202, 
+	1210, 1217, 1224, 1231, 1233, 1238, 1245, 1252, 
+	1258, 1266, 1273, 1280, 1287, 1289, 1291, 1296, 
+	1301, 1306, 1313, 1319, 1327, 1334, 1341, 1348, 
+	1356, 1363, 1371, 1379, 1381, 1386, 1394, 1401, 
+	1409, 1417, 1419, 1424, 1432, 1439, 1447, 1449, 
+	1454, 1462, 1469, 1477, 1485, 1487, 1492, 1500, 
+	1507, 1515, 1522, 1529, 1536, 1543, 1551, 1558, 
+	1560, 1562, 1567, 1572, 1577, 1584, 1590, 1598, 
+	1605, 1612, 1619, 1627, 1634, 1642, 1650, 1652, 
+	1657, 1665, 1673, 1680, 1687, 1695, 1702, 1710, 
+	1717, 1725, 1733, 1741, 1748, 1753, 1759, 1767, 
+	1774, 1781, 1789, 1796, 1804, 1812, 1820, 1827, 
+	1832, 1837, 1842
 ]
 
 class &lt;&lt; self
@@ -51,10 +91,237 @@ class &lt;&lt; self
 	private :_parser_trans_keys, :_parser_trans_keys=
 end
 self._parser_trans_keys = [
-	0, 32, 34, 39, 40, 58, 32, 34, 
-	41, 58, 32, 34, 39, 40, 58, 32, 
-	34, 41, 58, 34, 32, 39, 41, 32, 
-	34, 41, 58, 0
+	0, 32, 34, 39, 40, 58, 0, 32, 
+	34, 41, 58, 0, 32, 34, 39, 40, 
+	58, 0, 32, 34, 41, 58, 32, 34, 
+	39, 40, 58, 0, 32, 34, 41, 58, 
+	34, 34, 0, 32, 39, 39, 32, 34, 
+	39, 40, 58, 32, 34, 41, 44, 58, 
+	124, 32, 34, 39, 40, 44, 58, 124, 
+	32, 34, 41, 44, 58, 124, 0, 32, 
+	32, 34, 39, 40, 41, 44, 58, 124, 
+	34, 34, 32, 41, 44, 124, 32, 34, 
+	39, 40, 58, 39, 39, 32, 34, 39, 
+	41, 44, 58, 124, 32, 34, 39, 41, 
+	44, 58, 124, 32, 34, 39, 40, 44, 
+	58, 124, 34, 39, 34, 39, 32, 39, 
+	41, 44, 124, 32, 34, 39, 40, 58, 
+	32, 34, 41, 44, 124, 32, 34, 39, 
+	40, 44, 58, 124, 32, 34, 41, 44, 
+	58, 124, 32, 34, 39, 40, 41, 44, 
+	58, 124, 32, 34, 39, 41, 44, 58, 
+	124, 32, 34, 39, 41, 44, 58, 124, 
+	32, 34, 39, 40, 44, 58, 124, 32, 
+	34, 39, 40, 41, 44, 58, 124, 32, 
+	34, 39, 40, 44, 58, 124, 32, 34, 
+	39, 40, 41, 44, 58, 124, 32, 34, 
+	39, 40, 41, 44, 58, 124, 34, 39, 
+	32, 34, 39, 40, 58, 32, 34, 39, 
+	40, 41, 44, 58, 124, 32, 34, 39, 
+	40, 44, 58, 124, 32, 34, 39, 40, 
+	41, 44, 58, 124, 32, 34, 39, 40, 
+	41, 44, 58, 124, 32, 34, 41, 44, 
+	58, 124, 32, 34, 39, 40, 41, 44, 
+	58, 124, 32, 34, 39, 41, 44, 58, 
+	124, 32, 34, 39, 41, 44, 58, 124, 
+	32, 34, 39, 40, 41, 44, 58, 124, 
+	32, 34, 39, 41, 44, 58, 124, 32, 
+	34, 39, 41, 44, 58, 124, 32, 34, 
+	39, 40, 44, 58, 124, 32, 34, 39, 
+	41, 44, 58, 124, 32, 34, 39, 40, 
+	41, 44, 58, 124, 34, 39, 34, 39, 
+	32, 39, 41, 44, 124, 32, 34, 39, 
+	40, 58, 32, 34, 41, 44, 124, 32, 
+	34, 39, 40, 44, 58, 124, 32, 34, 
+	41, 44, 58, 124, 32, 34, 39, 40, 
+	41, 44, 58, 124, 32, 34, 39, 41, 
+	44, 58, 124, 32, 34, 39, 41, 44, 
+	58, 124, 32, 34, 39, 40, 44, 58, 
+	124, 32, 34, 39, 40, 41, 44, 58, 
+	124, 32, 34, 39, 40, 44, 58, 124, 
+	32, 34, 39, 40, 41, 44, 58, 124, 
+	34, 39, 32, 34, 39, 40, 58, 32, 
+	34, 39, 40, 41, 44, 58, 124, 32, 
+	34, 39, 41, 44, 58, 124, 32, 34, 
+	39, 40, 41, 44, 58, 124, 32, 34, 
+	39, 40, 44, 58, 124, 32, 34, 39, 
+	40, 41, 44, 58, 124, 32, 34, 39, 
+	40, 41, 44, 58, 124, 32, 34, 39, 
+	40, 41, 44, 58, 124, 32, 34, 39, 
+	41, 44, 58, 124, 32, 34, 39, 40, 
+	58, 32, 34, 41, 44, 58, 124, 32, 
+	34, 39, 40, 44, 58, 124, 32, 34, 
+	41, 44, 58, 124, 32, 34, 39, 40, 
+	41, 44, 58, 124, 34, 34, 32, 41, 
+	44, 124, 32, 34, 39, 40, 58, 39, 
+	39, 32, 34, 39, 41, 44, 58, 124, 
+	32, 34, 39, 41, 44, 58, 124, 32, 
+	34, 39, 40, 44, 58, 124, 34, 39, 
+	34, 39, 32, 39, 41, 44, 124, 32, 
+	34, 39, 40, 58, 32, 34, 41, 44, 
+	124, 32, 34, 39, 40, 44, 58, 124, 
+	32, 34, 41, 44, 58, 124, 32, 34, 
+	39, 40, 41, 44, 58, 124, 32, 34, 
+	39, 41, 44, 58, 124, 32, 34, 39, 
+	41, 44, 58, 124, 32, 34, 39, 40, 
+	44, 58, 124, 32, 34, 39, 40, 41, 
+	44, 58, 124, 32, 34, 39, 40, 44, 
+	58, 124, 32, 34, 39, 40, 41, 44, 
+	58, 124, 34, 39, 32, 34, 39, 40, 
+	58, 32, 34, 39, 40, 41, 44, 58, 
+	124, 32, 34, 39, 40, 44, 58, 124, 
+	32, 34, 39, 40, 41, 44, 58, 124, 
+	32, 34, 39, 40, 41, 44, 58, 124, 
+	32, 34, 41, 44, 58, 124, 32, 34, 
+	39, 40, 41, 44, 58, 124, 32, 34, 
+	39, 41, 44, 58, 124, 32, 34, 39, 
+	41, 44, 58, 124, 32, 34, 39, 40, 
+	41, 44, 58, 124, 32, 34, 39, 41, 
+	44, 58, 124, 32, 34, 39, 41, 44, 
+	58, 124, 32, 34, 39, 40, 44, 58, 
+	124, 32, 34, 39, 41, 44, 58, 124, 
+	32, 34, 39, 40, 41, 44, 58, 124, 
+	34, 39, 34, 39, 32, 39, 41, 44, 
+	124, 32, 34, 39, 40, 58, 32, 34, 
+	41, 44, 124, 32, 34, 39, 40, 44, 
+	58, 124, 32, 34, 41, 44, 58, 124, 
+	32, 34, 39, 40, 41, 44, 58, 124, 
+	32, 34, 39, 41, 44, 58, 124, 32, 
+	34, 39, 41, 44, 58, 124, 32, 34, 
+	39, 40, 44, 58, 124, 32, 34, 39, 
+	40, 41, 44, 58, 124, 32, 34, 39, 
+	40, 44, 58, 124, 32, 34, 39, 40, 
+	41, 44, 58, 124, 34, 39, 32, 34, 
+	39, 40, 58, 32, 34, 39, 40, 41, 
+	44, 58, 124, 32, 34, 39, 41, 44, 
+	58, 124, 32, 34, 39, 40, 41, 44, 
+	58, 124, 32, 34, 39, 40, 44, 58, 
+	124, 32, 34, 39, 40, 41, 44, 58, 
+	124, 32, 34, 39, 40, 41, 44, 58, 
+	124, 32, 34, 39, 40, 41, 44, 58, 
+	124, 32, 34, 39, 41, 44, 58, 124, 
+	32, 34, 39, 40, 58, 32, 34, 39, 
+	40, 58, 32, 34, 41, 44, 58, 124, 
+	32, 34, 39, 40, 44, 58, 124, 32, 
+	34, 41, 44, 58, 124, 32, 34, 39, 
+	40, 41, 44, 58, 124, 34, 34, 32, 
+	41, 44, 124, 32, 34, 39, 40, 58, 
+	39, 39, 32, 34, 39, 41, 44, 58, 
+	124, 32, 34, 39, 41, 44, 58, 124, 
+	32, 34, 39, 40, 44, 58, 124, 34, 
+	39, 34, 39, 32, 39, 41, 44, 124, 
+	32, 34, 39, 40, 58, 32, 34, 41, 
+	44, 124, 32, 34, 39, 40, 44, 58, 
+	124, 32, 34, 41, 44, 58, 124, 32, 
+	34, 39, 40, 41, 44, 58, 124, 32, 
+	34, 39, 41, 44, 58, 124, 32, 34, 
+	39, 41, 44, 58, 124, 32, 34, 39, 
+	40, 44, 58, 124, 32, 34, 39, 40, 
+	41, 44, 58, 124, 32, 34, 39, 40, 
+	44, 58, 124, 32, 34, 39, 40, 41, 
+	44, 58, 124, 32, 34, 39, 40, 41, 
+	44, 58, 124, 34, 39, 32, 34, 39, 
+	40, 58, 32, 34, 39, 40, 41, 44, 
+	58, 124, 32, 34, 39, 40, 44, 58, 
+	124, 32, 34, 39, 40, 41, 44, 58, 
+	124, 32, 34, 39, 40, 41, 44, 58, 
+	124, 32, 34, 41, 44, 58, 124, 32, 
+	34, 39, 40, 41, 44, 58, 124, 32, 
+	34, 39, 40, 44, 58, 124, 32, 34, 
+	39, 40, 41, 44, 58, 124, 32, 34, 
+	39, 41, 44, 58, 124, 32, 34, 39, 
+	41, 44, 58, 124, 32, 34, 39, 40, 
+	44, 58, 124, 34, 39, 34, 39, 32, 
+	39, 41, 44, 124, 32, 34, 39, 40, 
+	58, 32, 34, 41, 44, 124, 32, 34, 
+	39, 40, 44, 58, 124, 32, 34, 41, 
+	44, 58, 124, 32, 34, 39, 40, 41, 
+	44, 58, 124, 32, 34, 39, 41, 44, 
+	58, 124, 32, 34, 39, 41, 44, 58, 
+	124, 32, 34, 39, 40, 44, 58, 124, 
+	32, 34, 41, 44, 124, 32, 34, 39, 
+	40, 44, 58, 124, 32, 34, 41, 44, 
+	58, 124, 32, 34, 39, 40, 41, 44, 
+	58, 124, 32, 34, 39, 41, 44, 58, 
+	124, 32, 34, 39, 41, 44, 58, 124, 
+	32, 34, 39, 40, 44, 58, 124, 34, 
+	39, 32, 39, 41, 44, 124, 32, 34, 
+	39, 40, 44, 58, 124, 32, 34, 39, 
+	41, 44, 58, 124, 32, 34, 41, 44, 
+	58, 124, 32, 34, 39, 40, 41, 44, 
+	58, 124, 32, 34, 39, 41, 44, 58, 
+	124, 32, 34, 39, 41, 44, 58, 124, 
+	32, 34, 39, 40, 44, 58, 124, 34, 
+	39, 34, 39, 32, 39, 41, 44, 124, 
+	32, 34, 39, 40, 58, 32, 34, 41, 
+	44, 124, 32, 34, 39, 40, 44, 58, 
+	124, 32, 34, 41, 44, 58, 124, 32, 
+	34, 39, 40, 41, 44, 58, 124, 32, 
+	34, 39, 41, 44, 58, 124, 32, 34, 
+	39, 41, 44, 58, 124, 32, 34, 39, 
+	40, 44, 58, 124, 32, 34, 39, 40, 
+	41, 44, 58, 124, 32, 34, 39, 40, 
+	44, 58, 124, 32, 34, 39, 40, 41, 
+	44, 58, 124, 32, 34, 39, 40, 41, 
+	44, 58, 124, 34, 39, 32, 34, 39, 
+	40, 58, 32, 34, 39, 40, 41, 44, 
+	58, 124, 32, 34, 39, 40, 44, 58, 
+	124, 32, 34, 39, 40, 41, 44, 58, 
+	124, 32, 34, 39, 40, 41, 44, 58, 
+	124, 34, 39, 32, 34, 39, 40, 58, 
+	32, 34, 39, 40, 41, 44, 58, 124, 
+	32, 34, 39, 40, 44, 58, 124, 32, 
+	34, 39, 40, 41, 44, 58, 124, 34, 
+	39, 32, 34, 39, 40, 58, 32, 34, 
+	39, 40, 41, 44, 58, 124, 32, 34, 
+	39, 40, 44, 58, 124, 32, 34, 39, 
+	40, 41, 44, 58, 124, 32, 34, 39, 
+	40, 41, 44, 58, 124, 34, 39, 32, 
+	34, 39, 40, 58, 32, 34, 39, 40, 
+	41, 44, 58, 124, 32, 34, 39, 40, 
+	44, 58, 124, 32, 34, 39, 40, 41, 
+	44, 58, 124, 32, 34, 39, 41, 44, 
+	58, 124, 32, 34, 39, 41, 44, 58, 
+	124, 32, 34, 39, 40, 44, 58, 124, 
+	32, 34, 39, 41, 44, 58, 124, 32, 
+	34, 39, 40, 41, 44, 58, 124, 32, 
+	34, 39, 40, 44, 58, 124, 34, 39, 
+	34, 39, 32, 39, 41, 44, 124, 32, 
+	34, 39, 40, 58, 32, 34, 41, 44, 
+	124, 32, 34, 39, 40, 44, 58, 124, 
+	32, 34, 41, 44, 58, 124, 32, 34, 
+	39, 40, 41, 44, 58, 124, 32, 34, 
+	39, 41, 44, 58, 124, 32, 34, 39, 
+	41, 44, 58, 124, 32, 34, 39, 40, 
+	44, 58, 124, 32, 34, 39, 40, 41, 
+	44, 58, 124, 32, 34, 39, 40, 44, 
+	58, 124, 32, 34, 39, 40, 41, 44, 
+	58, 124, 32, 34, 39, 40, 41, 44, 
+	58, 124, 34, 39, 32, 34, 39, 40, 
+	58, 32, 34, 39, 40, 41, 44, 58, 
+	124, 32, 34, 39, 40, 41, 44, 58, 
+	124, 32, 34, 39, 41, 44, 58, 124, 
+	32, 34, 39, 41, 44, 58, 124, 32, 
+	34, 39, 40, 41, 44, 58, 124, 32, 
+	34, 39, 41, 44, 58, 124, 32, 34, 
+	39, 40, 41, 44, 58, 124, 32, 34, 
+	39, 40, 44, 58, 124, 32, 34, 39, 
+	40, 41, 44, 58, 124, 32, 34, 39, 
+	40, 41, 44, 58, 124, 32, 34, 39, 
+	40, 41, 44, 58, 124, 32, 34, 39, 
+	41, 44, 58, 124, 32, 34, 39, 40, 
+	58, 32, 34, 41, 44, 58, 124, 32, 
+	34, 39, 40, 41, 44, 58, 124, 32, 
+	34, 39, 41, 44, 58, 124, 32, 34, 
+	39, 41, 44, 58, 124, 32, 34, 39, 
+	40, 41, 44, 58, 124, 32, 34, 39, 
+	41, 44, 58, 124, 32, 34, 39, 40, 
+	41, 44, 58, 124, 32, 34, 39, 40, 
+	41, 44, 58, 124, 32, 34, 39, 40, 
+	41, 44, 58, 124, 32, 34, 39, 41, 
+	44, 58, 124, 0, 32, 34, 41, 58, 
+	0, 32, 34, 41, 58, 0, 32, 34, 
+	41, 58, 0
 ]
 
 class &lt;&lt; self
@@ -62,8 +329,45 @@ class &lt;&lt; self
 	private :_parser_single_lengths, :_parser_single_lengths=
 end
 self._parser_single_lengths = [
-	0, 6, 4, 5, 4, 1, 1, 1, 
-	1, 4
+	0, 6, 5, 6, 5, 5, 5, 1, 
+	1, 2, 1, 1, 5, 6, 7, 6, 
+	2, 8, 1, 1, 4, 5, 1, 1, 
+	7, 7, 7, 2, 2, 5, 5, 5, 
+	7, 6, 8, 7, 7, 7, 8, 7, 
+	8, 8, 2, 5, 8, 7, 8, 8, 
+	6, 8, 7, 7, 8, 7, 7, 7, 
+	7, 8, 2, 2, 5, 5, 5, 7, 
+	6, 8, 7, 7, 7, 8, 7, 8, 
+	2, 5, 8, 7, 8, 7, 8, 8, 
+	8, 7, 5, 6, 7, 6, 8, 1, 
+	1, 4, 5, 1, 1, 7, 7, 7, 
+	2, 2, 5, 5, 5, 7, 6, 8, 
+	7, 7, 7, 8, 7, 8, 2, 5, 
+	8, 7, 8, 8, 6, 8, 7, 7, 
+	8, 7, 7, 7, 7, 8, 2, 2, 
+	5, 5, 5, 7, 6, 8, 7, 7, 
+	7, 8, 7, 8, 2, 5, 8, 7, 
+	8, 7, 8, 8, 8, 7, 5, 5, 
+	6, 7, 6, 8, 1, 1, 4, 5, 
+	1, 1, 7, 7, 7, 2, 2, 5, 
+	5, 5, 7, 6, 8, 7, 7, 7, 
+	8, 7, 8, 8, 2, 5, 8, 7, 
+	8, 8, 6, 8, 7, 8, 7, 7, 
+	7, 2, 2, 5, 5, 5, 7, 6, 
+	8, 7, 7, 7, 5, 7, 6, 8, 
+	7, 7, 7, 2, 5, 7, 7, 6, 
+	8, 7, 7, 7, 2, 2, 5, 5, 
+	5, 7, 6, 8, 7, 7, 7, 8, 
+	7, 8, 8, 2, 5, 8, 7, 8, 
+	8, 2, 5, 8, 7, 8, 2, 5, 
+	8, 7, 8, 8, 2, 5, 8, 7, 
+	8, 7, 7, 7, 7, 8, 7, 2, 
+	2, 5, 5, 5, 7, 6, 8, 7, 
+	7, 7, 8, 7, 8, 8, 2, 5, 
+	8, 8, 7, 7, 8, 7, 8, 7, 
+	8, 8, 8, 7, 5, 6, 8, 7, 
+	7, 8, 7, 8, 8, 8, 7, 5, 
+	5, 5, 0
 ]
 
 class &lt;&lt; self
@@ -72,7 +376,44 @@ class &lt;&lt; self
 end
 self._parser_range_lengths = [
 	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, 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, 
+	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, 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, 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, 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, 0, 0, 0, 0, 
+	0, 0, 0, 0, 0, 0, 0, 0, 
+	0, 0, 0
 ]
 
 class &lt;&lt; self
@@ -80,8 +421,45 @@ class &lt;&lt; self
 	private :_parser_index_offsets, :_parser_index_offsets=
 end
 self._parser_index_offsets = [
-	0, 0, 7, 12, 18, 23, 25, 27, 
-	29, 31
+	0, 0, 7, 13, 20, 26, 32, 38, 
+	40, 42, 45, 47, 49, 55, 62, 70, 
+	77, 80, 89, 91, 93, 98, 104, 106, 
+	108, 116, 124, 132, 135, 138, 144, 150, 
+	156, 164, 171, 180, 188, 196, 204, 213, 
+	221, 230, 239, 242, 248, 257, 265, 274, 
+	283, 290, 299, 307, 315, 324, 332, 340, 
+	348, 356, 365, 368, 371, 377, 383, 389, 
+	397, 404, 413, 421, 429, 437, 446, 454, 
+	463, 466, 472, 481, 489, 498, 506, 515, 
+	524, 533, 541, 547, 554, 562, 569, 578, 
+	580, 582, 587, 593, 595, 597, 605, 613, 
+	621, 624, 627, 633, 639, 645, 653, 660, 
+	669, 677, 685, 693, 702, 710, 719, 722, 
+	728, 737, 745, 754, 763, 770, 779, 787, 
+	795, 804, 812, 820, 828, 836, 845, 848, 
+	851, 857, 863, 869, 877, 884, 893, 901, 
+	909, 917, 926, 934, 943, 946, 952, 961, 
+	969, 978, 986, 995, 1004, 1013, 1021, 1027, 
+	1033, 1040, 1048, 1055, 1064, 1066, 1068, 1073, 
+	1079, 1081, 1083, 1091, 1099, 1107, 1110, 1113, 
+	1119, 1125, 1131, 1139, 1146, 1155, 1163, 1171, 
+	1179, 1188, 1196, 1205, 1214, 1217, 1223, 1232, 
+	1240, 1249, 1258, 1265, 1274, 1282, 1291, 1299, 
+	1307, 1315, 1318, 1321, 1327, 1333, 1339, 1347, 
+	1354, 1363, 1371, 1379, 1387, 1393, 1401, 1408, 
+	1417, 1425, 1433, 1441, 1444, 1450, 1458, 1466, 
+	1473, 1482, 1490, 1498, 1506, 1509, 1512, 1518, 
+	1524, 1530, 1538, 1545, 1554, 1562, 1570, 1578, 
+	1587, 1595, 1604, 1613, 1616, 1622, 1631, 1639, 
+	1648, 1657, 1660, 1666, 1675, 1683, 1692, 1695, 
+	1701, 1710, 1718, 1727, 1736, 1739, 1745, 1754, 
+	1762, 1771, 1779, 1787, 1795, 1803, 1812, 1820, 
+	1823, 1826, 1832, 1838, 1844, 1852, 1859, 1868, 
+	1876, 1884, 1892, 1901, 1909, 1918, 1927, 1930, 
+	1936, 1945, 1954, 1962, 1970, 1979, 1987, 1996, 
+	2004, 2013, 2022, 2031, 2039, 2045, 2052, 2061, 
+	2069, 2077, 2086, 2094, 2103, 2112, 2121, 2129, 
+	2135, 2141, 2147
 ]
 
 class &lt;&lt; self
@@ -89,11 +467,275 @@ class &lt;&lt; self
 	private :_parser_trans_targs, :_parser_trans_targs=
 end
 self._parser_trans_targs = [
-	9, 0, 5, 7, 8, 0, 2, 1, 
-	0, 0, 3, 2, 0, 5, 7, 8, 
-	0, 4, 1, 0, 0, 0, 4, 6, 
-	5, 1, 0, 6, 7, 6, 8, 1, 
-	0, 0, 3, 2, 0
+	303, 1, 7, 10, 292, 0, 2, 303, 
+	3, 0, 0, 150, 2, 304, 3, 7, 
+	10, 82, 0, 4, 304, 3, 0, 0, 
+	5, 4, 0, 7, 10, 12, 0, 6, 
+	305, 3, 0, 0, 0, 6, 9, 8, 
+	9, 8, 306, 3, 0, 9, 11, 9, 
+	11, 0, 18, 22, 0, 0, 13, 14, 
+	0, 16, 47, 0, 47, 13, 14, 18, 
+	22, 0, 17, 0, 17, 15, 14, 0, 
+	16, 17, 0, 17, 15, 306, 3, 0, 
+	14, 18, 24, 15, 16, 17, 0, 17, 
+	15, 20, 19, 20, 19, 14, 16, 21, 
+	21, 0, 21, 18, 22, 0, 0, 15, 
+	20, 23, 20, 23, 26, 23, 15, 16, 
+	46, 23, 46, 25, 26, 23, 15, 16, 
+	46, 23, 46, 25, 26, 27, 20, 23, 
+	44, 23, 44, 25, 29, 31, 28, 29, 
+	31, 28, 26, 20, 16, 30, 30, 23, 
+	30, 27, 20, 23, 23, 25, 32, 20, 
+	16, 43, 43, 19, 32, 20, 42, 19, 
+	34, 19, 34, 33, 32, 20, 16, 34, 
+	19, 34, 33, 32, 20, 35, 33, 16, 
+	34, 19, 34, 33, 37, 29, 33, 16, 
+	41, 28, 41, 36, 37, 29, 33, 16, 
+	41, 28, 41, 36, 37, 29, 31, 28, 
+	38, 28, 38, 36, 39, 20, 31, 36, 
+	16, 41, 28, 41, 36, 39, 29, 31, 
+	28, 40, 28, 40, 36, 39, 20, 33, 
+	36, 16, 41, 28, 41, 36, 39, 29, 
+	33, 36, 16, 41, 28, 41, 36, 29, 
+	31, 28, 43, 20, 42, 19, 19, 33, 
+	45, 27, 20, 25, 16, 46, 23, 46, 
+	25, 45, 27, 20, 23, 46, 23, 46, 
+	25, 45, 27, 15, 25, 16, 46, 23, 
+	46, 25, 14, 18, 53, 13, 16, 80, 
+	0, 80, 48, 14, 0, 16, 49, 0, 
+	49, 48, 14, 18, 50, 48, 16, 49, 
+	0, 49, 48, 26, 23, 48, 16, 52, 
+	23, 52, 51, 26, 23, 48, 16, 52, 
+	23, 52, 51, 45, 27, 48, 51, 16, 
+	52, 23, 52, 51, 55, 23, 13, 16, 
+	74, 23, 74, 54, 55, 23, 13, 16, 
+	74, 23, 74, 54, 55, 58, 20, 23, 
+	57, 23, 57, 56, 55, 23, 15, 16, 
+	57, 23, 57, 56, 55, 58, 20, 56, 
+	16, 57, 23, 57, 56, 60, 62, 59, 
+	60, 62, 59, 55, 20, 16, 61, 61, 
+	23, 61, 58, 20, 23, 23, 56, 63, 
+	20, 16, 73, 73, 19, 63, 20, 72, 
+	19, 65, 19, 65, 64, 63, 20, 16, 
+	65, 19, 65, 64, 63, 20, 66, 64, 
+	16, 65, 19, 65, 64, 68, 60, 64, 
+	16, 71, 59, 71, 67, 68, 60, 64, 
+	16, 71, 59, 71, 67, 68, 20, 62, 
+	59, 69, 59, 69, 67, 70, 20, 62, 
+	67, 16, 71, 59, 71, 67, 70, 20, 
+	62, 59, 71, 59, 71, 67, 70, 20, 
+	64, 67, 16, 71, 59, 71, 67, 60, 
+	62, 59, 73, 20, 72, 19, 19, 64, 
+	77, 58, 13, 54, 16, 79, 23, 79, 
+	75, 55, 23, 48, 16, 76, 23, 76, 
+	75, 77, 58, 13, 75, 16, 76, 23, 
+	76, 75, 77, 58, 20, 23, 78, 23, 
+	78, 56, 55, 58, 15, 56, 16, 57, 
+	23, 57, 56, 77, 58, 48, 75, 16, 
+	76, 23, 76, 75, 14, 18, 81, 48, 
+	16, 49, 0, 49, 48, 55, 23, 48, 
+	16, 76, 23, 76, 75, 0, 87, 91, 
+	0, 0, 83, 84, 0, 16, 115, 0, 
+	115, 83, 84, 87, 91, 0, 86, 0, 
+	86, 85, 84, 0, 16, 86, 0, 86, 
+	85, 84, 87, 93, 85, 16, 86, 0, 
+	86, 85, 89, 88, 89, 88, 84, 16, 
+	90, 90, 0, 90, 87, 91, 0, 0, 
+	85, 89, 92, 89, 92, 95, 92, 85, 
+	16, 114, 92, 114, 94, 95, 92, 85, 
+	16, 114, 92, 114, 94, 95, 96, 89, 
+	92, 112, 92, 112, 94, 98, 100, 97, 
+	98, 100, 97, 95, 89, 16, 99, 99, 
+	92, 99, 96, 89, 92, 92, 94, 101, 
+	89, 16, 111, 111, 88, 101, 89, 110, 
+	88, 103, 88, 103, 102, 101, 89, 16, 
+	103, 88, 103, 102, 101, 89, 104, 102, 
+	16, 103, 88, 103, 102, 106, 98, 102, 
+	16, 109, 97, 109, 105, 106, 98, 102, 
+	16, 109, 97, 109, 105, 106, 98, 100, 
+	97, 107, 97, 107, 105, 108, 98, 100, 
+	105, 16, 109, 97, 109, 105, 108, 98, 
+	100, 97, 109, 97, 109, 105, 108, 98, 
+	102, 105, 16, 109, 97, 109, 105, 98, 
+	100, 97, 111, 89, 110, 88, 88, 102, 
+	113, 96, 89, 94, 16, 114, 92, 114, 
+	94, 113, 96, 89, 92, 114, 92, 114, 
+	94, 113, 96, 85, 94, 16, 114, 92, 
+	114, 94, 84, 87, 121, 83, 16, 148, 
+	0, 148, 116, 84, 0, 16, 117, 0, 
+	117, 116, 84, 87, 118, 116, 16, 117, 
+	0, 117, 116, 95, 92, 116, 16, 120, 
+	92, 120, 119, 95, 92, 116, 16, 120, 
+	92, 120, 119, 113, 96, 116, 119, 16, 
+	120, 92, 120, 119, 123, 92, 83, 16, 
+	142, 92, 142, 122, 123, 92, 83, 16, 
+	142, 92, 142, 122, 123, 126, 89, 92, 
+	125, 92, 125, 124, 123, 92, 85, 16, 
+	125, 92, 125, 124, 123, 126, 89, 124, 
+	16, 125, 92, 125, 124, 128, 130, 127, 
+	128, 130, 127, 123, 89, 16, 129, 129, 
+	92, 129, 126, 89, 92, 92, 124, 131, 
+	89, 16, 141, 141, 88, 131, 89, 140, 
+	88, 133, 88, 133, 132, 131, 89, 16, 
+	133, 88, 133, 132, 131, 89, 134, 132, 
+	16, 133, 88, 133, 132, 136, 128, 132, 
+	16, 139, 127, 139, 135, 136, 128, 132, 
+	16, 139, 127, 139, 135, 136, 89, 130, 
+	127, 137, 127, 137, 135, 138, 89, 130, 
+	135, 16, 139, 127, 139, 135, 138, 89, 
+	130, 127, 139, 127, 139, 135, 138, 89, 
+	132, 135, 16, 139, 127, 139, 135, 128, 
+	130, 127, 141, 89, 140, 88, 88, 132, 
+	145, 126, 83, 122, 16, 147, 92, 147, 
+	143, 123, 92, 116, 16, 144, 92, 144, 
+	143, 123, 126, 83, 143, 16, 144, 92, 
+	144, 143, 145, 126, 89, 92, 146, 92, 
+	146, 124, 123, 126, 85, 124, 16, 125, 
+	92, 125, 124, 145, 126, 116, 143, 16, 
+	144, 92, 144, 143, 84, 87, 149, 116, 
+	16, 117, 0, 117, 116, 123, 92, 116, 
+	16, 144, 92, 144, 143, 0, 7, 10, 
+	151, 0, 6, 0, 156, 160, 0, 0, 
+	152, 153, 0, 16, 185, 0, 185, 152, 
+	153, 156, 160, 0, 155, 0, 155, 154, 
+	153, 0, 16, 155, 0, 155, 154, 153, 
+	156, 162, 154, 16, 155, 0, 155, 154, 
+	158, 157, 158, 157, 153, 16, 159, 159, 
+	0, 159, 156, 160, 0, 0, 154, 158, 
+	161, 158, 161, 164, 161, 154, 16, 184, 
+	161, 184, 163, 164, 161, 154, 16, 184, 
+	161, 184, 163, 164, 165, 158, 161, 182, 
+	161, 182, 163, 167, 169, 166, 167, 169, 
+	166, 164, 158, 16, 168, 168, 161, 168, 
+	165, 158, 161, 161, 163, 170, 158, 16, 
+	181, 181, 157, 170, 158, 180, 157, 172, 
+	157, 172, 171, 170, 158, 16, 172, 157, 
+	172, 171, 170, 158, 173, 171, 16, 172, 
+	157, 172, 171, 175, 167, 171, 16, 179, 
+	166, 179, 174, 175, 167, 171, 16, 179, 
+	166, 179, 174, 175, 167, 158, 166, 176, 
+	166, 176, 174, 177, 167, 169, 174, 16, 
+	179, 166, 179, 174, 177, 167, 158, 166, 
+	178, 166, 178, 174, 177, 167, 171, 174, 
+	16, 179, 166, 179, 174, 177, 167, 154, 
+	174, 16, 179, 166, 179, 174, 167, 169, 
+	166, 181, 158, 180, 157, 157, 171, 183, 
+	165, 158, 163, 16, 184, 161, 184, 163, 
+	183, 165, 158, 161, 184, 161, 184, 163, 
+	183, 165, 154, 163, 16, 184, 161, 184, 
+	163, 188, 156, 282, 152, 16, 290, 0, 
+	290, 186, 153, 0, 16, 187, 0, 187, 
+	186, 188, 156, 257, 186, 16, 187, 0, 
+	187, 186, 188, 156, 160, 0, 189, 0, 
+	189, 154, 153, 156, 190, 154, 16, 155, 
+	0, 155, 154, 192, 161, 154, 16, 256, 
+	161, 256, 191, 192, 161, 154, 16, 256, 
+	161, 256, 191, 192, 193, 158, 161, 254, 
+	161, 254, 191, 195, 197, 194, 195, 197, 
+	194, 192, 158, 16, 196, 196, 161, 196, 
+	193, 158, 161, 161, 191, 198, 158, 16, 
+	253, 253, 157, 198, 158, 252, 157, 200, 
+	157, 200, 199, 198, 158, 16, 200, 157, 
+	200, 199, 198, 158, 201, 199, 16, 200, 
+	157, 200, 199, 203, 195, 199, 16, 251, 
+	194, 251, 202, 203, 195, 199, 16, 251, 
+	194, 251, 202, 203, 195, 204, 194, 248, 
+	194, 248, 202, 205, 158, 16, 247, 247, 
+	157, 205, 158, 246, 157, 207, 157, 207, 
+	206, 205, 158, 16, 207, 157, 207, 206, 
+	205, 158, 208, 206, 16, 207, 157, 207, 
+	206, 210, 212, 206, 16, 245, 211, 245, 
+	209, 210, 212, 206, 16, 245, 211, 245, 
+	209, 210, 158, 204, 211, 243, 211, 243, 
+	209, 212, 204, 211, 213, 158, 16, 242, 
+	242, 161, 213, 241, 158, 161, 240, 161, 
+	240, 214, 213, 161, 215, 16, 240, 161, 
+	240, 214, 153, 0, 16, 216, 0, 216, 
+	154, 188, 156, 217, 154, 16, 189, 0, 
+	189, 154, 219, 161, 215, 16, 239, 161, 
+	239, 218, 219, 161, 215, 16, 239, 161, 
+	239, 218, 219, 220, 158, 161, 237, 161, 
+	237, 218, 222, 224, 221, 222, 224, 221, 
+	219, 158, 16, 223, 223, 161, 223, 220, 
+	158, 161, 161, 218, 225, 158, 16, 236, 
+	236, 157, 225, 158, 235, 157, 227, 157, 
+	227, 226, 225, 158, 16, 227, 157, 227, 
+	226, 225, 158, 228, 226, 16, 227, 157, 
+	227, 226, 230, 222, 226, 16, 234, 221, 
+	234, 229, 230, 222, 226, 16, 234, 221, 
+	234, 229, 230, 167, 158, 221, 231, 221, 
+	231, 229, 232, 167, 224, 229, 16, 234, 
+	221, 234, 229, 232, 167, 158, 221, 233, 
+	221, 233, 229, 232, 167, 226, 229, 16, 
+	234, 221, 234, 229, 232, 167, 154, 229, 
+	16, 234, 221, 234, 229, 222, 224, 221, 
+	236, 158, 235, 157, 157, 226, 238, 220, 
+	158, 218, 16, 239, 161, 239, 218, 238, 
+	220, 158, 161, 239, 161, 239, 218, 238, 
+	220, 215, 218, 16, 239, 161, 239, 218, 
+	213, 241, 158, 214, 16, 240, 161, 240, 
+	214, 212, 204, 211, 242, 241, 158, 161, 
+	161, 214, 244, 158, 204, 209, 16, 245, 
+	211, 245, 209, 244, 158, 204, 211, 245, 
+	211, 245, 209, 244, 158, 206, 209, 16, 
+	245, 211, 245, 209, 212, 204, 211, 247, 
+	158, 246, 157, 157, 206, 249, 195, 197, 
+	202, 16, 251, 194, 251, 202, 249, 195, 
+	204, 194, 250, 194, 250, 202, 249, 195, 
+	199, 202, 16, 251, 194, 251, 202, 249, 
+	195, 206, 202, 16, 251, 194, 251, 202, 
+	195, 197, 194, 253, 158, 252, 157, 157, 
+	199, 255, 193, 158, 191, 16, 256, 161, 
+	256, 191, 255, 193, 158, 161, 256, 161, 
+	256, 191, 255, 193, 154, 191, 16, 256, 
+	161, 256, 191, 259, 161, 186, 16, 281, 
+	161, 281, 258, 259, 161, 186, 16, 281, 
+	161, 281, 258, 259, 263, 158, 161, 280, 
+	161, 280, 260, 259, 161, 215, 16, 261, 
+	161, 261, 260, 262, 263, 215, 260, 16, 
+	261, 161, 261, 260, 262, 263, 158, 161, 
+	261, 161, 261, 260, 265, 267, 264, 265, 
+	267, 264, 259, 158, 16, 266, 266, 161, 
+	266, 263, 158, 161, 161, 260, 268, 158, 
+	16, 279, 279, 157, 268, 158, 278, 157, 
+	270, 157, 270, 269, 268, 158, 16, 270, 
+	157, 270, 269, 268, 158, 271, 269, 16, 
+	270, 157, 270, 269, 273, 265, 269, 16, 
+	277, 264, 277, 272, 273, 265, 269, 16, 
+	277, 264, 277, 272, 273, 195, 204, 264, 
+	274, 264, 274, 272, 275, 195, 267, 272, 
+	16, 277, 264, 277, 272, 275, 195, 204, 
+	264, 276, 264, 276, 272, 275, 195, 269, 
+	272, 16, 277, 264, 277, 272, 275, 195, 
+	206, 272, 16, 277, 264, 277, 272, 265, 
+	267, 264, 279, 158, 278, 157, 157, 269, 
+	262, 263, 158, 260, 16, 261, 161, 261, 
+	260, 262, 263, 215, 258, 16, 281, 161, 
+	281, 258, 213, 161, 152, 16, 284, 161, 
+	284, 283, 213, 161, 152, 16, 284, 161, 
+	284, 283, 287, 241, 158, 283, 16, 289, 
+	161, 289, 285, 213, 161, 186, 16, 286, 
+	161, 286, 285, 287, 241, 158, 285, 16, 
+	289, 161, 289, 285, 287, 241, 158, 161, 
+	288, 161, 288, 214, 213, 241, 215, 214, 
+	16, 240, 161, 240, 214, 287, 241, 215, 
+	285, 16, 289, 161, 289, 285, 188, 156, 
+	291, 186, 16, 187, 0, 187, 186, 213, 
+	161, 186, 16, 286, 161, 286, 285, 0, 
+	18, 22, 0, 0, 293, 14, 0, 16, 
+	294, 0, 294, 293, 14, 18, 295, 293, 
+	16, 301, 0, 301, 48, 55, 23, 293, 
+	16, 297, 23, 297, 296, 55, 23, 293, 
+	16, 297, 23, 297, 296, 77, 58, 293, 
+	296, 16, 300, 23, 300, 298, 55, 23, 
+	48, 16, 299, 23, 299, 298, 55, 58, 
+	293, 298, 16, 299, 23, 299, 298, 77, 
+	58, 48, 298, 16, 299, 23, 299, 298, 
+	14, 18, 302, 48, 16, 49, 0, 49, 
+	48, 55, 23, 48, 16, 299, 23, 299, 
+	298, 303, 3, 0, 0, 150, 2, 304, 
+	3, 0, 0, 5, 4, 305, 3, 0, 
+	0, 0, 6, 0, 0
 ]
 
 class &lt;&lt; self
@@ -101,11 +743,275 @@ class &lt;&lt; self
 	private :_parser_trans_actions, :_parser_trans_actions=
 end
 self._parser_trans_actions = [
-	7, 5, 13, 13, 13, 5, 7, 1, 
-	0, 0, 0, 0, 0, 17, 17, 17, 
-	0, 10, 1, 0, 0, 0, 0, 3, 
-	0, 1, 0, 3, 0, 3, 0, 1, 
-	0, 0, 0, 0, 0
+	9, 0, 12, 12, 12, 7, 9, 18, 
+	18, 7, 7, 15, 0, 9, 0, 12, 
+	12, 12, 7, 9, 18, 18, 7, 7, 
+	15, 0, 0, 5, 5, 5, 0, 1, 
+	18, 18, 7, 7, 7, 0, 31, 1, 
+	21, 0, 3, 3, 7, 31, 1, 21, 
+	0, 0, 5, 5, 0, 0, 1, 18, 
+	0, 39, 18, 0, 18, 0, 0, 5, 
+	5, 0, 1, 0, 1, 1, 18, 0, 
+	39, 18, 0, 18, 0, 0, 0, 7, 
+	18, 5, 5, 0, 39, 27, 0, 27, 
+	1, 31, 1, 21, 0, 3, 24, 3, 
+	3, 0, 0, 5, 5, 0, 0, 1, 
+	31, 1, 21, 0, 27, 1, 31, 39, 
+	27, 1, 27, 1, 18, 0, 21, 39, 
+	18, 0, 18, 0, 0, 5, 21, 0, 
+	1, 0, 1, 1, 31, 31, 1, 21, 
+	21, 0, 3, 21, 24, 3, 3, 0, 
+	0, 5, 21, 0, 0, 1, 3, 21, 
+	24, 3, 3, 0, 0, 21, 5, 0, 
+	1, 0, 1, 1, 18, 21, 39, 18, 
+	0, 18, 0, 18, 21, 5, 0, 39, 
+	27, 0, 27, 1, 27, 43, 31, 39, 
+	27, 1, 27, 1, 18, 21, 21, 39, 
+	18, 0, 18, 0, 0, 21, 21, 0, 
+	1, 0, 1, 1, 18, 21, 21, 0, 
+	39, 27, 0, 27, 1, 0, 21, 21, 
+	0, 1, 0, 1, 1, 18, 21, 21, 
+	0, 39, 27, 0, 27, 1, 18, 21, 
+	21, 0, 39, 27, 0, 27, 1, 43, 
+	31, 1, 0, 21, 5, 0, 0, 1, 
+	18, 5, 21, 0, 39, 27, 0, 27, 
+	1, 0, 5, 21, 0, 1, 0, 1, 
+	1, 18, 5, 21, 0, 39, 27, 0, 
+	27, 1, 18, 5, 5, 0, 39, 35, 
+	0, 35, 1, 18, 0, 39, 18, 0, 
+	18, 0, 18, 5, 5, 0, 39, 35, 
+	0, 35, 1, 35, 1, 31, 39, 35, 
+	1, 35, 1, 18, 0, 21, 39, 18, 
+	0, 18, 0, 18, 5, 21, 0, 39, 
+	35, 0, 35, 1, 35, 1, 31, 39, 
+	35, 1, 35, 1, 18, 0, 21, 39, 
+	18, 0, 18, 0, 0, 5, 21, 0, 
+	1, 0, 1, 1, 18, 0, 21, 39, 
+	18, 0, 18, 0, 18, 5, 21, 0, 
+	39, 27, 0, 27, 1, 31, 31, 1, 
+	21, 21, 0, 3, 21, 24, 3, 3, 
+	0, 0, 5, 21, 0, 0, 1, 3, 
+	21, 24, 3, 3, 0, 0, 21, 5, 
+	0, 1, 0, 1, 1, 18, 21, 39, 
+	18, 0, 18, 0, 18, 21, 5, 0, 
+	39, 27, 0, 27, 1, 27, 43, 31, 
+	39, 27, 1, 27, 1, 18, 21, 21, 
+	39, 18, 0, 18, 0, 0, 21, 21, 
+	0, 1, 0, 1, 1, 18, 21, 21, 
+	0, 39, 27, 0, 27, 1, 0, 21, 
+	21, 0, 1, 0, 1, 1, 18, 21, 
+	21, 0, 39, 27, 0, 27, 1, 43, 
+	31, 1, 0, 21, 5, 0, 0, 1, 
+	18, 5, 21, 0, 39, 35, 0, 35, 
+	1, 18, 0, 21, 39, 18, 0, 18, 
+	0, 18, 5, 21, 0, 39, 35, 0, 
+	35, 1, 0, 5, 21, 0, 1, 0, 
+	1, 1, 18, 5, 21, 0, 39, 27, 
+	0, 27, 1, 18, 5, 21, 0, 39, 
+	35, 0, 35, 1, 18, 5, 5, 0, 
+	39, 35, 0, 35, 1, 35, 1, 31, 
+	39, 35, 1, 35, 1, 0, 5, 5, 
+	0, 0, 1, 18, 0, 39, 18, 0, 
+	18, 0, 0, 5, 5, 0, 1, 0, 
+	1, 1, 18, 0, 39, 18, 0, 18, 
+	0, 18, 5, 5, 0, 39, 27, 0, 
+	27, 1, 31, 1, 21, 0, 3, 24, 
+	3, 3, 0, 0, 5, 5, 0, 0, 
+	1, 31, 1, 21, 0, 27, 1, 31, 
+	39, 27, 1, 27, 1, 18, 0, 21, 
+	39, 18, 0, 18, 0, 0, 5, 21, 
+	0, 1, 0, 1, 1, 31, 31, 1, 
+	21, 21, 0, 3, 21, 24, 3, 3, 
+	0, 0, 5, 21, 0, 0, 1, 3, 
+	21, 24, 3, 3, 0, 0, 21, 5, 
+	0, 1, 0, 1, 1, 18, 21, 39, 
+	18, 0, 18, 0, 18, 21, 5, 0, 
+	39, 27, 0, 27, 1, 27, 43, 31, 
+	39, 27, 1, 27, 1, 18, 21, 21, 
+	39, 18, 0, 18, 0, 0, 21, 21, 
+	0, 1, 0, 1, 1, 18, 21, 21, 
+	0, 39, 27, 0, 27, 1, 0, 21, 
+	21, 0, 1, 0, 1, 1, 18, 21, 
+	21, 0, 39, 27, 0, 27, 1, 43, 
+	31, 1, 0, 21, 5, 0, 0, 1, 
+	18, 5, 21, 0, 39, 27, 0, 27, 
+	1, 0, 5, 21, 0, 1, 0, 1, 
+	1, 18, 5, 21, 0, 39, 27, 0, 
+	27, 1, 18, 5, 5, 0, 39, 35, 
+	0, 35, 1, 18, 0, 39, 18, 0, 
+	18, 0, 18, 5, 5, 0, 39, 35, 
+	0, 35, 1, 35, 1, 31, 39, 35, 
+	1, 35, 1, 18, 0, 21, 39, 18, 
+	0, 18, 0, 18, 5, 21, 0, 39, 
+	35, 0, 35, 1, 35, 1, 31, 39, 
+	35, 1, 35, 1, 18, 0, 21, 39, 
+	18, 0, 18, 0, 0, 5, 21, 0, 
+	1, 0, 1, 1, 18, 0, 21, 39, 
+	18, 0, 18, 0, 18, 5, 21, 0, 
+	39, 27, 0, 27, 1, 31, 31, 1, 
+	21, 21, 0, 3, 21, 24, 3, 3, 
+	0, 0, 5, 21, 0, 0, 1, 3, 
+	21, 24, 3, 3, 0, 0, 21, 5, 
+	0, 1, 0, 1, 1, 18, 21, 39, 
+	18, 0, 18, 0, 18, 21, 5, 0, 
+	39, 27, 0, 27, 1, 27, 43, 31, 
+	39, 27, 1, 27, 1, 18, 21, 21, 
+	39, 18, 0, 18, 0, 0, 21, 21, 
+	0, 1, 0, 1, 1, 18, 21, 21, 
+	0, 39, 27, 0, 27, 1, 0, 21, 
+	21, 0, 1, 0, 1, 1, 18, 21, 
+	21, 0, 39, 27, 0, 27, 1, 43, 
+	31, 1, 0, 21, 5, 0, 0, 1, 
+	18, 5, 21, 0, 39, 35, 0, 35, 
+	1, 18, 0, 21, 39, 18, 0, 18, 
+	0, 18, 5, 21, 0, 39, 35, 0, 
+	35, 1, 0, 5, 21, 0, 1, 0, 
+	1, 1, 18, 5, 21, 0, 39, 27, 
+	0, 27, 1, 18, 5, 21, 0, 39, 
+	35, 0, 35, 1, 18, 5, 5, 0, 
+	39, 35, 0, 35, 1, 35, 1, 31, 
+	39, 35, 1, 35, 1, 0, 5, 5, 
+	5, 0, 1, 0, 5, 5, 0, 0, 
+	1, 18, 0, 39, 18, 0, 18, 0, 
+	0, 5, 5, 0, 1, 0, 1, 1, 
+	18, 0, 39, 18, 0, 18, 0, 18, 
+	5, 5, 0, 39, 27, 0, 27, 1, 
+	31, 1, 21, 0, 3, 24, 3, 3, 
+	0, 0, 5, 5, 0, 0, 1, 31, 
+	1, 21, 0, 27, 1, 31, 39, 27, 
+	1, 27, 1, 18, 0, 21, 39, 18, 
+	0, 18, 0, 0, 5, 21, 0, 1, 
+	0, 1, 1, 31, 31, 1, 21, 21, 
+	0, 3, 21, 24, 3, 3, 0, 0, 
+	5, 21, 0, 0, 1, 3, 21, 24, 
+	3, 3, 0, 0, 21, 5, 0, 1, 
+	0, 1, 1, 18, 21, 39, 18, 0, 
+	18, 0, 18, 21, 5, 0, 39, 27, 
+	0, 27, 1, 27, 43, 31, 39, 27, 
+	1, 27, 1, 18, 21, 21, 39, 18, 
+	0, 18, 0, 0, 21, 21, 0, 1, 
+	0, 1, 1, 18, 21, 21, 0, 39, 
+	27, 0, 27, 1, 0, 21, 21, 0, 
+	1, 0, 1, 1, 18, 21, 21, 0, 
+	39, 27, 0, 27, 1, 18, 21, 21, 
+	0, 39, 27, 0, 27, 1, 43, 31, 
+	1, 0, 21, 5, 0, 0, 1, 18, 
+	5, 21, 0, 39, 27, 0, 27, 1, 
+	0, 5, 21, 0, 1, 0, 1, 1, 
+	18, 5, 21, 0, 39, 27, 0, 27, 
+	1, 18, 5, 5, 0, 39, 35, 0, 
+	35, 1, 18, 0, 39, 18, 0, 18, 
+	0, 18, 5, 5, 0, 39, 35, 0, 
+	35, 1, 0, 5, 5, 0, 1, 0, 
+	1, 1, 18, 5, 5, 0, 39, 27, 
+	0, 27, 1, 27, 1, 31, 39, 27, 
+	1, 27, 1, 18, 0, 21, 39, 18, 
+	0, 18, 0, 0, 5, 21, 0, 1, 
+	0, 1, 1, 31, 31, 1, 21, 21, 
+	0, 3, 21, 24, 3, 3, 0, 0, 
+	5, 21, 0, 0, 1, 3, 21, 24, 
+	3, 3, 0, 0, 21, 5, 0, 1, 
+	0, 1, 1, 18, 21, 39, 18, 0, 
+	18, 0, 18, 21, 5, 0, 39, 27, 
+	0, 27, 1, 27, 43, 31, 39, 27, 
+	1, 27, 1, 18, 21, 21, 39, 18, 
+	0, 18, 0, 0, 21, 21, 0, 1, 
+	0, 1, 1, 3, 21, 24, 3, 3, 
+	0, 0, 21, 5, 0, 1, 0, 1, 
+	1, 18, 21, 39, 18, 0, 18, 0, 
+	18, 21, 5, 0, 39, 27, 0, 27, 
+	1, 27, 43, 31, 39, 27, 1, 27, 
+	1, 18, 21, 21, 39, 18, 0, 18, 
+	0, 0, 21, 21, 0, 1, 0, 1, 
+	1, 21, 21, 0, 3, 21, 24, 3, 
+	3, 0, 0, 5, 21, 0, 1, 0, 
+	1, 1, 18, 0, 21, 39, 18, 0, 
+	18, 0, 18, 0, 39, 18, 0, 18, 
+	0, 18, 5, 5, 0, 39, 27, 0, 
+	27, 1, 27, 1, 31, 39, 27, 1, 
+	27, 1, 18, 0, 21, 39, 18, 0, 
+	18, 0, 0, 5, 21, 0, 1, 0, 
+	1, 1, 31, 31, 1, 21, 21, 0, 
+	3, 21, 24, 3, 3, 0, 0, 5, 
+	21, 0, 0, 1, 3, 21, 24, 3, 
+	3, 0, 0, 21, 5, 0, 1, 0, 
+	1, 1, 18, 21, 39, 18, 0, 18, 
+	0, 18, 21, 5, 0, 39, 27, 0, 
+	27, 1, 27, 43, 31, 39, 27, 1, 
+	27, 1, 18, 21, 21, 39, 18, 0, 
+	18, 0, 0, 21, 21, 0, 1, 0, 
+	1, 1, 18, 21, 21, 0, 39, 27, 
+	0, 27, 1, 0, 21, 21, 0, 1, 
+	0, 1, 1, 18, 21, 21, 0, 39, 
+	27, 0, 27, 1, 18, 21, 21, 0, 
+	39, 27, 0, 27, 1, 43, 31, 1, 
+	0, 21, 5, 0, 0, 1, 18, 5, 
+	21, 0, 39, 27, 0, 27, 1, 0, 
+	5, 21, 0, 1, 0, 1, 1, 18, 
+	5, 21, 0, 39, 27, 0, 27, 1, 
+	18, 5, 21, 0, 39, 27, 0, 27, 
+	1, 31, 31, 1, 0, 5, 21, 0, 
+	0, 1, 18, 21, 21, 0, 39, 27, 
+	0, 27, 1, 0, 21, 21, 0, 1, 
+	0, 1, 1, 18, 21, 21, 0, 39, 
+	27, 0, 27, 1, 43, 31, 1, 0, 
+	21, 5, 0, 0, 1, 18, 21, 21, 
+	0, 39, 27, 0, 27, 1, 0, 21, 
+	21, 0, 1, 0, 1, 1, 18, 21, 
+	21, 0, 39, 27, 0, 27, 1, 18, 
+	21, 21, 0, 39, 27, 0, 27, 1, 
+	43, 31, 1, 0, 21, 5, 0, 0, 
+	1, 18, 5, 21, 0, 39, 27, 0, 
+	27, 1, 0, 5, 21, 0, 1, 0, 
+	1, 1, 18, 5, 21, 0, 39, 27, 
+	0, 27, 1, 35, 1, 31, 39, 35, 
+	1, 35, 1, 18, 0, 21, 39, 18, 
+	0, 18, 0, 0, 5, 21, 0, 1, 
+	0, 1, 1, 18, 0, 21, 39, 18, 
+	0, 18, 0, 18, 5, 21, 0, 39, 
+	27, 0, 27, 1, 0, 5, 21, 0, 
+	1, 0, 1, 1, 31, 31, 1, 21, 
+	21, 0, 3, 21, 24, 3, 3, 0, 
+	0, 5, 21, 0, 0, 1, 3, 21, 
+	24, 3, 3, 0, 0, 21, 5, 0, 
+	1, 0, 1, 1, 18, 21, 39, 18, 
+	0, 18, 0, 18, 21, 5, 0, 39, 
+	27, 0, 27, 1, 27, 43, 31, 39, 
+	27, 1, 27, 1, 18, 21, 21, 39, 
+	18, 0, 18, 0, 0, 21, 21, 0, 
+	1, 0, 1, 1, 18, 21, 21, 0, 
+	39, 27, 0, 27, 1, 0, 21, 21, 
+	0, 1, 0, 1, 1, 18, 21, 21, 
+	0, 39, 27, 0, 27, 1, 18, 21, 
+	21, 0, 39, 27, 0, 27, 1, 43, 
+	31, 1, 0, 21, 5, 0, 0, 1, 
+	18, 5, 21, 0, 39, 27, 0, 27, 
+	1, 18, 5, 21, 0, 39, 35, 0, 
+	35, 1, 35, 1, 31, 39, 35, 1, 
+	35, 1, 18, 0, 21, 39, 18, 0, 
+	18, 0, 18, 5, 21, 0, 39, 35, 
+	0, 35, 1, 18, 0, 21, 39, 18, 
+	0, 18, 0, 18, 5, 21, 0, 39, 
+	35, 0, 35, 1, 0, 5, 21, 0, 
+	1, 0, 1, 1, 18, 5, 21, 0, 
+	39, 27, 0, 27, 1, 18, 5, 21, 
+	0, 39, 35, 0, 35, 1, 18, 5, 
+	5, 0, 39, 35, 0, 35, 1, 35, 
+	1, 31, 39, 35, 1, 35, 1, 0, 
+	5, 5, 0, 0, 1, 18, 0, 39, 
+	18, 0, 18, 0, 18, 5, 5, 0, 
+	39, 35, 0, 35, 1, 35, 1, 31, 
+	39, 35, 1, 35, 1, 18, 0, 21, 
+	39, 18, 0, 18, 0, 18, 5, 21, 
+	0, 39, 35, 0, 35, 1, 18, 0, 
+	21, 39, 18, 0, 18, 0, 18, 5, 
+	21, 0, 39, 35, 0, 35, 1, 18, 
+	5, 21, 0, 39, 35, 0, 35, 1, 
+	18, 5, 5, 0, 39, 35, 0, 35, 
+	1, 35, 1, 31, 39, 35, 1, 35, 
+	1, 18, 18, 7, 7, 15, 0, 18, 
+	18, 7, 7, 15, 0, 18, 18, 7, 
+	7, 7, 0, 0, 0
 ]
 
 class &lt;&lt; self
@@ -113,8 +1019,45 @@ class &lt;&lt; self
 	private :_parser_eof_actions, :_parser_eof_actions=
 end
 self._parser_eof_actions = [
-	0, 5, 0, 0, 0, 0, 0, 0, 
-	0, 0
+	0, 7, 7, 7, 7, 0, 7, 0, 
+	0, 7, 0, 0, 0, 0, 0, 0, 
+	7, 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, 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, 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, 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, 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, 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
 ]
 
 class &lt;&lt; self
@@ -124,7 +1067,7 @@ self.parser_start = 1;
 class &lt;&lt; self
 	attr_accessor :parser_first_final
 end
-self.parser_first_final = 9;
+self.parser_first_final = 303;
 class &lt;&lt; self
 	attr_accessor :parser_error
 end
@@ -135,24 +1078,25 @@ class &lt;&lt; self
 end
 self.parser_en_main = 1;
 
-# line 72 &quot;lib/keyword_search.rl&quot;
+# line 81 &quot;lib/keyword_search.rl&quot;
     	p = 0
-    	eof = nil
+      eof = nil
+      word = nil
     	pe = data.length
     	key = nil
     	tokstart = nil
     	results = {}
     	quotes = 0
       
-# line 148 &quot;lib/keyword_search.rb&quot;
+# line 1092 &quot;lib/keyword_search.rb&quot;
 begin
 	p ||= 0
 	pe ||= data.length
 	cs = parser_start
 end
-# line 80 &quot;lib/keyword_search.rl&quot;
+# line 90 &quot;lib/keyword_search.rl&quot;
       
-# line 156 &quot;lib/keyword_search.rb&quot;
+# line 1100 &quot;lib/keyword_search.rb&quot;
 begin
 	_klen, _trans, _keys, _acts, _nacts = nil
 	_goto_level = 0
@@ -243,7 +1187,7 @@ when 1 then
 # line 17 &quot;lib/keyword_search.rl&quot;
 		begin
 
-        key = data[tokstart...p-1]
+        key = word
         results[key] ||= []
       		end
 # line 17 &quot;lib/keyword_search.rl&quot;
@@ -258,31 +1202,32 @@ when 3 then
 # line 26 &quot;lib/keyword_search.rl&quot;
 		begin
 
-        value = data[tokstart..p-1]
-        if [&quot;(&quot;].include?(value[0,1])
-          value = parse(value[1..-2])[:default]
-        elsif [&quot;'&quot;, '&quot;'].include?(value[0,1])
-          value = value[1..-2]
-        end
-        (results[key || :default] ||= []) &lt;&lt; value
+        word = data[tokstart..p-1]
       		end
 # line 26 &quot;lib/keyword_search.rl&quot;
 when 4 then
-# line 36 &quot;lib/keyword_search.rl&quot;
+# line 30 &quot;lib/keyword_search.rl&quot;
+		begin
+
+        (results[key || :default] ||= []) &lt;&lt; word
+      		end
+# line 30 &quot;lib/keyword_search.rl&quot;
+when 5 then
+# line 34 &quot;lib/keyword_search.rl&quot;
 		begin
  quotes += 1 		end
+# line 34 &quot;lib/keyword_search.rl&quot;
+when 6 then
 # line 36 &quot;lib/keyword_search.rl&quot;
-when 5 then
-# line 38 &quot;lib/keyword_search.rl&quot;
 		begin
  quotes -= 1 		end
-# line 38 &quot;lib/keyword_search.rl&quot;
-when 6 then
-# line 52 &quot;lib/keyword_search.rl&quot;
+# line 36 &quot;lib/keyword_search.rl&quot;
+when 7 then
+# line 61 &quot;lib/keyword_search.rl&quot;
 		begin
  raise ParseError, &quot;At offset #{p}, near: '#{data[p,10]}'&quot; 		end
-# line 52 &quot;lib/keyword_search.rl&quot;
-# line 286 &quot;lib/keyword_search.rb&quot;
+# line 61 &quot;lib/keyword_search.rl&quot;
+# line 1231 &quot;lib/keyword_search.rb&quot;
 			end # action switch
 		end
 	end
@@ -310,12 +1255,12 @@ when 6 then
 		__nacts -= 1
 		__acts += 1
 		case _parser_actions[__acts - 1]
-when 6 then
-# line 52 &quot;lib/keyword_search.rl&quot;
+when 7 then
+# line 61 &quot;lib/keyword_search.rl&quot;
 		begin
  raise ParseError, &quot;At offset #{p}, near: '#{data[p,10]}'&quot; 		end
-# line 52 &quot;lib/keyword_search.rl&quot;
-# line 319 &quot;lib/keyword_search.rb&quot;
+# line 61 &quot;lib/keyword_search.rl&quot;
+# line 1264 &quot;lib/keyword_search.rb&quot;
 		end # eof action switch
 	end
 	if _trigger_goto
@@ -328,7 +1273,7 @@ end
 	end
 	end
 	end
-# line 81 &quot;lib/keyword_search.rl&quot;
+# line 91 &quot;lib/keyword_search.rl&quot;
     	unless quotes.zero?
     	  raise ParseError, &quot;Unclosed quotes&quot;
     	end</diff>
      <filename>lib/keyword_search.rb</filename>
    </modified>
    <modified>
      <diff>@@ -15,7 +15,7 @@ module KeywordSearch
       }
       
       action key {
-        key = data[tokstart...p-1]
+        key = word
         results[key] ||= []
       }
       
@@ -23,34 +23,43 @@ module KeywordSearch
         key = nil
       }
       
+      action word {
+        word = data[tokstart..p-1]
+      }
+      
       action value {
-        value = data[tokstart..p-1]
-        if [&quot;(&quot;].include?(value[0,1])
-          value = parse(value[1..-2])[:default]
-        elsif [&quot;'&quot;, '&quot;'].include?(value[0,1])
-          value = value[1..-2]
-        end
-        (results[key || :default] ||= []) &lt;&lt; value
+        (results[key || :default] ||= []) &lt;&lt; word
       }
       
       action quote { quotes += 1 }
       
       action unquote { quotes -= 1 }
+
+      seperators = ' '+ | / *[,|] */ ;
+
+      bareword = ( [^ '&quot;(:] . [^ &quot;):]* ) &gt; start % word ; # allow apostrophes
+      dquoted = '&quot;' @ quote ( [^&quot;]* &gt; start % word ) :&gt;&gt; '&quot;' @ unquote;
+      squoted = '\'' @ quote ( [^']* &gt; start % word ) :&gt;&gt; '\'' @ unquote;
+
+      anyword = dquoted | squoted | bareword ;      
+
+      anyvalue = anyword % value ;
+      multivalues = anyvalue ( seperators anyvalue )* ;
+      groupedvalues = '(' @ quote multivalues :&gt;&gt; ')' @ unquote;
+
+      value = groupedvalues | anyvalue ;
+
+      pair = bareword % key ':' value ;
+
+      value_only = value &gt; default ;
+
+      definition = ( pair | value_only );
       
-      bareword = [^ '&quot;(:] [^ &quot;):]*; # allow apostrophes
-      grouped = '(' @ quote any* :&gt;&gt; ')' @ unquote;
-      dquoted = '&quot;' @ quote any* :&gt;&gt; '&quot;' @ unquote;
-      squoted = '\'' @ quote any* :&gt;&gt; '\'' @ unquote;
-      
-      
-      value = ( grouped | dquoted | squoted | bareword );
-      
-      pair = (bareword &gt; start ':') % key value &gt; start % value ;
-      
-      definition = ( pair | value &gt; start &gt; default % value) ' ';        
-      main := definition** 0
+      definitions = definition ( ' '+ definition )*;
+
+      main := ' '* definitions? ' '* 0
               @!{ raise ParseError, &quot;At offset #{p}, near: '#{data[p,10]}'&quot; };        
-    	    
+
     }%%
     
     def search(input_string, definition=nil, &amp;block)
@@ -71,6 +80,7 @@ module KeywordSearch
       %% write data;
     	p = 0
       eof = nil
+      word = nil
     	pe = data.length
     	key = nil
     	tokstart = nil</diff>
      <filename>lib/keyword_search.rl</filename>
    </modified>
    <modified>
      <diff>@@ -33,11 +33,11 @@ module KeywordSearch
       @default_keyword = name
     end
       
-    def handle(key, values)
+    def handle(key, values, sign = nil)
       key = @default_keyword if key == :default
       return false unless key
       if k = keywords.detect { |kw| kw.name == key.to_sym}
-        k.handle(values) 
+        k.handle(values)
       end
     end
     </diff>
      <filename>lib/keyword_search/definition.rb</filename>
    </modified>
    <modified>
      <diff>@@ -34,7 +34,7 @@ context &quot;KeywordSearch&quot; do
     KeywordSearch.search(GROUPED_NAMES_AND_AGE) do |with|
       with.default_keyword :name
       with.keyword :name do |values|
-        result = values.first
+        result = values
       end
     end
     assert_equal ['coda', 'bruce', 'hale', 'williams'], result
@@ -54,7 +54,7 @@ context &quot;KeywordSearch&quot; do
     result = nil
     KeywordSearch.search(NAME_AND_GROUPED_AGE) do |with|
       with.keyword :age do |values|
-        result = Integer(values.first.first)
+        result = Integer(values.first)
       end
     end
     assert_equal 27, result    
@@ -64,7 +64,7 @@ context &quot;KeywordSearch&quot; do
     result = nil
     KeywordSearch.search(NAME_AND_GROUPED_QUOTED_AGE) do |with|
       with.keyword :age do |values|
-        result = Integer(values.first.first)
+        result = Integer(values.first)
       end
     end
     assert_equal 27, result    
@@ -74,7 +74,7 @@ context &quot;KeywordSearch&quot; do
     result = nil
     KeywordSearch.search(NAME_AND_GROUPED_QUOTED_AGES) do |with|
       with.keyword :age do |values|
-        result = values.first.map { |v| v.to_i }
+        result = values.map { |v| v.to_i }
       end
     end
     assert_equal [27, 34, 48], result
@@ -245,6 +245,27 @@ context &quot;KeywordSearch&quot; do
     assert_equal 'Big', result
   end
   
+  specify &quot;spaces are condensed&quot; do
+    result = nil
+    KeywordSearch.search(%&lt;   this   is    some    text   &gt;) do |with|
+      with.default_keyword :text
+      with.keyword :text do |values|
+        result = values
+      end
+    end
+    assert_equal [], result.select { |v| v.match(/ /) }
+  end
+  
+  specify &quot;an empty search is successful&quot; do
+    result = nil
+    KeywordSearch.search(%&lt;&gt;) do |with|
+      with.default_keyword :text
+      with.keyword :text do |values|
+        result = values
+      end
+    end
+    assert_nil result
+  end
 end
 
 </diff>
      <filename>test/test_keyword_search.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>859789b58519ec8ffa51dbb2ff745c64b1293f9e</id>
    </parent>
  </parents>
  <author>
    <name>Eric Lindvall</name>
    <email>eric@5stops.com</email>
  </author>
  <url>http://github.com/bruce/keyword_search/commit/ab6980b29b7d52f208c5381aabec8378759a0fe8</url>
  <id>ab6980b29b7d52f208c5381aabec8378759a0fe8</id>
  <committed-date>2009-01-28T21:26:38-08:00</committed-date>
  <authored-date>2009-01-27T23:49:10-08:00</authored-date>
  <message>Improve parser to not be recursive.

Also improves handling of extra spaces.

These changes are preparation for adding negation.

NOTE! This changes the interface for grouped values; they are no longer
provided as nested arrays. Instead the array is flattened.

Signed-off-by: Bruce Williams &lt;bruce@codefluency.com&gt;</message>
  <tree>f904e8cc7b0ea8531d38ef0154132e70d95e7c11</tree>
  <committer>
    <name>Bruce Williams</name>
    <email>bruce@codefluency.com</email>
  </committer>
</commit>
