1 module bio.maf.parser; 2 #line 1 "maf_block.rl" 3 /* 4 This file is part of BioD. 5 Copyright (C) 2013 Artem Tarasov <lomereiter@gmail.com> 6 7 Permission is hereby granted, free of charge, to any person obtaining a 8 copy of this software and associated documentation files (the "Software"), 9 to deal in the Software without restriction, including without limitation 10 the rights to use, copy, modify, merge, publish, distribute, sublicense, 11 and/or sell copies of the Software, and to permit persons to whom the 12 Software is furnished to do so, subject to the following conditions: 13 14 The above copyright notice and this permission notice shall be included in 15 all copies or substantial portions of the Software. 16 17 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 23 DEALINGS IN THE SOFTWARE. 24 25 */ 26 import std.conv, std.array; 27 import bio.maf.block; 28 29 30 #line 27 "maf_block.d" 31 static byte[] _maf_block_actions = [ 32 0, 1, 1, 1, 2, 1, 5, 1, 33 6, 1, 7, 1, 8, 1, 9, 1, 34 10, 1, 11, 1, 12, 1, 14, 1, 35 16, 1, 17, 1, 18, 1, 19, 1, 36 20, 1, 21, 1, 22, 2, 0, 1, 37 2, 3, 4, 2, 7, 13, 2, 15, 38 12 39 ]; 40 41 static short[] _maf_block_key_offsets = [ 42 0, 0, 1, 5, 11, 20, 23, 26, 43 29, 34, 39, 44, 49, 54, 57, 62, 44 67, 74, 77, 80, 83, 92, 95, 100, 45 105, 114, 117, 122, 127, 132, 137, 142, 46 147, 152, 157, 162, 167, 172, 177, 182, 47 187, 192, 197, 202, 205, 208, 211, 214, 48 221, 224, 227, 230, 235, 240, 245, 250, 49 255, 258, 263, 268, 271, 276, 281, 286, 50 291, 296, 301, 306, 311, 316, 321, 326, 51 331, 336, 341, 346, 351, 354, 359, 364, 52 369, 374, 379, 384, 389, 394, 399, 404, 53 409, 414, 419, 424, 429, 434, 437, 442, 54 447, 452, 457, 462, 467, 472, 477, 482, 55 487, 492, 497, 502, 507, 512, 517, 520, 56 525, 530, 535, 540, 545, 550, 555, 560, 57 565, 570, 575, 580, 585, 590, 595, 600, 58 603, 608, 613, 618, 623, 628, 633, 638, 59 643, 648, 653, 658, 663, 668, 673, 678, 60 683, 686, 691, 696, 701, 706, 711, 716, 61 721, 726, 731, 736, 741, 746, 751, 756, 62 761, 766, 769, 770, 771, 772, 773, 775, 63 781, 787, 793, 799, 805, 811, 817, 823, 64 829, 835, 841, 847, 853, 859, 865, 871, 65 877, 881, 885, 886, 887, 888, 889, 896, 66 900, 902, 910, 914, 916, 922, 931, 932, 67 933, 937, 938, 939, 940, 944, 948, 956, 68 962, 968, 974, 980, 986, 992, 998, 1004, 69 1010, 1016, 1022, 1028, 1034, 1040, 1046, 1052, 70 1058, 1062, 1070 71 ]; 72 73 static char[] _maf_block_trans_keys = [ 74 97u, 10u, 32u, 9u, 13u, 10u, 32u, 112u, 75 115u, 9u, 13u, 10u, 32u, 101u, 105u, 112u, 76 113u, 115u, 9u, 13u, 32u, 9u, 13u, 32u, 77 9u, 13u, 32u, 9u, 13u, 32u, 9u, 13u, 78 48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 79 9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 80 57u, 32u, 43u, 45u, 9u, 13u, 32u, 9u, 81 13u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 82 13u, 48u, 57u, 32u, 67u, 73u, 77u, 110u, 83 9u, 13u, 32u, 9u, 13u, 32u, 9u, 13u, 84 32u, 9u, 13u, 32u, 67u, 73u, 84u, 110u, 85 9u, 13u, 77u, 78u, 32u, 9u, 13u, 32u, 86 9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 87 57u, 32u, 67u, 73u, 84u, 110u, 9u, 13u, 88 77u, 78u, 32u, 9u, 13u, 32u, 9u, 13u, 89 48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 90 9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 91 57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 92 13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 93 32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 94 48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 95 9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 96 57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 97 13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 98 32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 99 48u, 57u, 32u, 9u, 13u, 32u, 9u, 13u, 100 32u, 9u, 13u, 32u, 9u, 13u, 32u, 45u, 101 70u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 102 32u, 9u, 13u, 32u, 9u, 13u, 32u, 9u, 103 13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 104 32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 105 48u, 57u, 32u, 43u, 45u, 9u, 13u, 32u, 106 9u, 13u, 32u, 9u, 13u, 48u, 57u, 32u, 107 9u, 13u, 48u, 57u, 32u, 9u, 13u, 32u, 108 9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 109 57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 110 13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 111 32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 112 48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 113 9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 114 57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 115 13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 116 32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 117 48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 118 9u, 13u, 32u, 9u, 13u, 48u, 57u, 32u, 119 9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 120 57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 121 13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 122 32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 123 48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 124 9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 125 57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 126 13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 127 32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 128 48u, 57u, 32u, 9u, 13u, 32u, 9u, 13u, 129 48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 130 9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 131 57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 132 13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 133 32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 134 48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 135 9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 136 57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 137 13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 138 32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 139 32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 140 48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 141 9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 142 57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 143 13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 144 32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 145 48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 146 9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 147 57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 148 13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 149 32u, 9u, 13u, 32u, 9u, 13u, 48u, 57u, 150 32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 151 48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 152 9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 153 57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 154 13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 155 32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 156 48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 157 9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 158 57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 159 13u, 48u, 57u, 32u, 9u, 13u, 32u, 9u, 160 13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 161 32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 162 48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 163 9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 164 57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 165 13u, 48u, 57u, 32u, 9u, 13u, 48u, 57u, 166 32u, 9u, 13u, 48u, 57u, 32u, 9u, 13u, 167 48u, 57u, 32u, 9u, 13u, 48u, 57u, 32u, 168 9u, 13u, 48u, 57u, 32u, 9u, 13u, 48u, 169 57u, 32u, 9u, 13u, 48u, 57u, 32u, 9u, 170 13u, 97u, 115u, 115u, 61u, 48u, 57u, 10u, 171 32u, 9u, 13u, 48u, 57u, 10u, 32u, 9u, 172 13u, 48u, 57u, 10u, 32u, 9u, 13u, 48u, 173 57u, 10u, 32u, 9u, 13u, 48u, 57u, 10u, 174 32u, 9u, 13u, 48u, 57u, 10u, 32u, 9u, 175 13u, 48u, 57u, 10u, 32u, 9u, 13u, 48u, 176 57u, 10u, 32u, 9u, 13u, 48u, 57u, 10u, 177 32u, 9u, 13u, 48u, 57u, 10u, 32u, 9u, 178 13u, 48u, 57u, 10u, 32u, 9u, 13u, 48u, 179 57u, 10u, 32u, 9u, 13u, 48u, 57u, 10u, 180 32u, 9u, 13u, 48u, 57u, 10u, 32u, 9u, 181 13u, 48u, 57u, 10u, 32u, 9u, 13u, 48u, 182 57u, 10u, 32u, 9u, 13u, 48u, 57u, 10u, 183 32u, 9u, 13u, 48u, 57u, 10u, 32u, 9u, 184 13u, 32u, 99u, 9u, 13u, 111u, 114u, 101u, 185 61u, 43u, 45u, 46u, 105u, 110u, 48u, 57u, 186 46u, 105u, 48u, 57u, 48u, 57u, 10u, 32u, 187 69u, 101u, 9u, 13u, 48u, 57u, 43u, 45u, 188 48u, 57u, 48u, 57u, 10u, 32u, 9u, 13u, 189 48u, 57u, 10u, 32u, 46u, 69u, 101u, 9u, 190 13u, 48u, 57u, 110u, 102u, 10u, 32u, 9u, 191 13u, 97u, 110u, 99u, 10u, 32u, 9u, 13u, 192 10u, 32u, 9u, 13u, 10u, 32u, 101u, 105u, 193 113u, 115u, 9u, 13u, 10u, 32u, 9u, 13u, 194 48u, 57u, 10u, 32u, 9u, 13u, 48u, 57u, 195 10u, 32u, 9u, 13u, 48u, 57u, 10u, 32u, 196 9u, 13u, 48u, 57u, 10u, 32u, 9u, 13u, 197 48u, 57u, 10u, 32u, 9u, 13u, 48u, 57u, 198 10u, 32u, 9u, 13u, 48u, 57u, 10u, 32u, 199 9u, 13u, 48u, 57u, 10u, 32u, 9u, 13u, 200 48u, 57u, 10u, 32u, 9u, 13u, 48u, 57u, 201 10u, 32u, 9u, 13u, 48u, 57u, 10u, 32u, 202 9u, 13u, 48u, 57u, 10u, 32u, 9u, 13u, 203 48u, 57u, 10u, 32u, 9u, 13u, 48u, 57u, 204 10u, 32u, 9u, 13u, 48u, 57u, 10u, 32u, 205 9u, 13u, 48u, 57u, 10u, 32u, 9u, 13u, 206 48u, 57u, 10u, 32u, 9u, 13u, 10u, 32u, 207 45u, 70u, 9u, 13u, 48u, 57u, 10u, 32u, 208 9u, 13u, 0 209 ]; 210 211 static byte[] _maf_block_single_lengths = [ 212 0, 1, 2, 4, 7, 1, 1, 1, 213 1, 1, 1, 1, 3, 1, 1, 1, 214 5, 1, 1, 1, 5, 1, 1, 1, 215 5, 1, 1, 1, 1, 1, 1, 1, 216 1, 1, 1, 1, 1, 1, 1, 1, 217 1, 1, 1, 1, 1, 1, 1, 3, 218 1, 1, 1, 1, 1, 1, 1, 3, 219 1, 1, 1, 1, 1, 1, 1, 1, 220 1, 1, 1, 1, 1, 1, 1, 1, 221 1, 1, 1, 1, 1, 1, 1, 1, 222 1, 1, 1, 1, 1, 1, 1, 1, 223 1, 1, 1, 1, 1, 1, 1, 1, 224 1, 1, 1, 1, 1, 1, 1, 1, 225 1, 1, 1, 1, 1, 1, 1, 1, 226 1, 1, 1, 1, 1, 1, 1, 1, 227 1, 1, 1, 1, 1, 1, 1, 1, 228 1, 1, 1, 1, 1, 1, 1, 1, 229 1, 1, 1, 1, 1, 1, 1, 1, 230 1, 1, 1, 1, 1, 1, 1, 1, 231 1, 1, 1, 1, 1, 1, 1, 1, 232 1, 1, 1, 1, 1, 1, 0, 2, 233 2, 2, 2, 2, 2, 2, 2, 2, 234 2, 2, 2, 2, 2, 2, 2, 2, 235 2, 2, 1, 1, 1, 1, 5, 2, 236 0, 4, 2, 0, 2, 5, 1, 1, 237 2, 1, 1, 1, 2, 2, 6, 2, 238 2, 2, 2, 2, 2, 2, 2, 2, 239 2, 2, 2, 2, 2, 2, 2, 2, 240 2, 4, 2 241 ]; 242 243 static byte[] _maf_block_range_lengths = [ 244 0, 0, 1, 1, 1, 1, 1, 1, 245 2, 2, 2, 2, 1, 1, 2, 2, 246 1, 1, 1, 1, 2, 1, 2, 2, 247 2, 1, 2, 2, 2, 2, 2, 2, 248 2, 2, 2, 2, 2, 2, 2, 2, 249 2, 2, 2, 1, 1, 1, 1, 2, 250 1, 1, 1, 2, 2, 2, 2, 1, 251 1, 2, 2, 1, 2, 2, 2, 2, 252 2, 2, 2, 2, 2, 2, 2, 2, 253 2, 2, 2, 2, 1, 2, 2, 2, 254 2, 2, 2, 2, 2, 2, 2, 2, 255 2, 2, 2, 2, 2, 1, 2, 2, 256 2, 2, 2, 2, 2, 2, 2, 2, 257 2, 2, 2, 2, 2, 2, 1, 2, 258 2, 2, 2, 2, 2, 2, 2, 2, 259 2, 2, 2, 2, 2, 2, 2, 1, 260 2, 2, 2, 2, 2, 2, 2, 2, 261 2, 2, 2, 2, 2, 2, 2, 2, 262 1, 2, 2, 2, 2, 2, 2, 2, 263 2, 2, 2, 2, 2, 2, 2, 2, 264 2, 1, 0, 0, 0, 0, 1, 2, 265 2, 2, 2, 2, 2, 2, 2, 2, 266 2, 2, 2, 2, 2, 2, 2, 2, 267 1, 1, 0, 0, 0, 0, 1, 1, 268 1, 2, 1, 1, 2, 2, 0, 0, 269 1, 0, 0, 0, 1, 1, 1, 2, 270 2, 2, 2, 2, 2, 2, 2, 2, 271 2, 2, 2, 2, 2, 2, 2, 2, 272 1, 2, 1 273 ]; 274 275 static short[] _maf_block_index_offsets = [ 276 0, 0, 2, 6, 12, 21, 24, 27, 277 30, 34, 38, 42, 46, 51, 54, 58, 278 62, 69, 72, 75, 78, 86, 89, 93, 279 97, 105, 108, 112, 116, 120, 124, 128, 280 132, 136, 140, 144, 148, 152, 156, 160, 281 164, 168, 172, 176, 179, 182, 185, 188, 282 194, 197, 200, 203, 207, 211, 215, 219, 283 224, 227, 231, 235, 238, 242, 246, 250, 284 254, 258, 262, 266, 270, 274, 278, 282, 285 286, 290, 294, 298, 302, 305, 309, 313, 286 317, 321, 325, 329, 333, 337, 341, 345, 287 349, 353, 357, 361, 365, 369, 372, 376, 288 380, 384, 388, 392, 396, 400, 404, 408, 289 412, 416, 420, 424, 428, 432, 436, 439, 290 443, 447, 451, 455, 459, 463, 467, 471, 291 475, 479, 483, 487, 491, 495, 499, 503, 292 506, 510, 514, 518, 522, 526, 530, 534, 293 538, 542, 546, 550, 554, 558, 562, 566, 294 570, 573, 577, 581, 585, 589, 593, 597, 295 601, 605, 609, 613, 617, 621, 625, 629, 296 633, 637, 640, 642, 644, 646, 648, 650, 297 655, 660, 665, 670, 675, 680, 685, 690, 298 695, 700, 705, 710, 715, 720, 725, 730, 299 735, 739, 743, 745, 747, 749, 751, 758, 300 762, 764, 771, 775, 777, 782, 790, 792, 301 794, 798, 800, 802, 804, 808, 812, 820, 302 825, 830, 835, 840, 845, 850, 855, 860, 303 865, 870, 875, 880, 885, 890, 895, 900, 304 905, 909, 916 305 ]; 306 307 static ubyte[] _maf_block_trans_targs = [ 308 2, 0, 4, 3, 3, 0, 4, 3, 309 162, 203, 3, 0, 4, 3, 5, 17, 310 162, 44, 185, 3, 0, 6, 6, 0, 311 6, 6, 7, 8, 8, 7, 8, 8, 312 9, 0, 10, 10, 145, 0, 10, 10, 313 11, 0, 12, 12, 128, 0, 12, 13, 314 13, 12, 0, 14, 14, 0, 14, 14, 315 15, 0, 16, 16, 111, 0, 16, 204, 316 204, 204, 204, 16, 0, 18, 18, 0, 317 18, 18, 19, 20, 20, 19, 20, 21, 318 21, 21, 21, 20, 21, 0, 22, 22, 319 0, 22, 22, 23, 0, 24, 24, 27, 320 0, 24, 25, 25, 25, 25, 24, 25, 321 0, 26, 26, 0, 26, 26, 207, 0, 322 24, 24, 28, 0, 24, 24, 29, 0, 323 24, 24, 30, 0, 24, 24, 31, 0, 324 24, 24, 32, 0, 24, 24, 33, 0, 325 24, 24, 34, 0, 24, 24, 35, 0, 326 24, 24, 36, 0, 24, 24, 37, 0, 327 24, 24, 38, 0, 24, 24, 39, 0, 328 24, 24, 40, 0, 24, 24, 41, 0, 329 24, 24, 42, 0, 24, 24, 43, 0, 330 24, 24, 0, 45, 45, 0, 45, 45, 331 46, 47, 47, 46, 47, 225, 225, 47, 332 225, 0, 49, 49, 0, 49, 49, 50, 333 51, 51, 50, 51, 51, 52, 0, 53, 334 53, 94, 0, 53, 53, 54, 0, 55, 335 55, 77, 0, 55, 56, 56, 55, 0, 336 57, 57, 0, 57, 57, 58, 0, 59, 337 59, 60, 0, 59, 59, 226, 59, 59, 338 61, 0, 59, 59, 62, 0, 59, 59, 339 63, 0, 59, 59, 64, 0, 59, 59, 340 65, 0, 59, 59, 66, 0, 59, 59, 341 67, 0, 59, 59, 68, 0, 59, 59, 342 69, 0, 59, 59, 70, 0, 59, 59, 343 71, 0, 59, 59, 72, 0, 59, 59, 344 73, 0, 59, 59, 74, 0, 59, 59, 345 75, 0, 59, 59, 76, 0, 59, 59, 346 0, 55, 55, 78, 0, 55, 55, 79, 347 0, 55, 55, 80, 0, 55, 55, 81, 348 0, 55, 55, 82, 0, 55, 55, 83, 349 0, 55, 55, 84, 0, 55, 55, 85, 350 0, 55, 55, 86, 0, 55, 55, 87, 351 0, 55, 55, 88, 0, 55, 55, 89, 352 0, 55, 55, 90, 0, 55, 55, 91, 353 0, 55, 55, 92, 0, 55, 55, 93, 354 0, 55, 55, 0, 53, 53, 95, 0, 355 53, 53, 96, 0, 53, 53, 97, 0, 356 53, 53, 98, 0, 53, 53, 99, 0, 357 53, 53, 100, 0, 53, 53, 101, 0, 358 53, 53, 102, 0, 53, 53, 103, 0, 359 53, 53, 104, 0, 53, 53, 105, 0, 360 53, 53, 106, 0, 53, 53, 107, 0, 361 53, 53, 108, 0, 53, 53, 109, 0, 362 53, 53, 110, 0, 53, 53, 0, 16, 363 16, 112, 0, 16, 16, 113, 0, 16, 364 16, 114, 0, 16, 16, 115, 0, 16, 365 16, 116, 0, 16, 16, 117, 0, 16, 366 16, 118, 0, 16, 16, 119, 0, 16, 367 16, 120, 0, 16, 16, 121, 0, 16, 368 16, 122, 0, 16, 16, 123, 0, 16, 369 16, 124, 0, 16, 16, 125, 0, 16, 370 16, 126, 0, 16, 16, 127, 0, 16, 371 16, 0, 12, 12, 129, 0, 12, 12, 372 130, 0, 12, 12, 131, 0, 12, 12, 373 132, 0, 12, 12, 133, 0, 12, 12, 374 134, 0, 12, 12, 135, 0, 12, 12, 375 136, 0, 12, 12, 137, 0, 12, 12, 376 138, 0, 12, 12, 139, 0, 12, 12, 377 140, 0, 12, 12, 141, 0, 12, 12, 378 142, 0, 12, 12, 143, 0, 12, 12, 379 144, 0, 12, 12, 0, 10, 10, 146, 380 0, 10, 10, 147, 0, 10, 10, 148, 381 0, 10, 10, 149, 0, 10, 10, 150, 382 0, 10, 10, 151, 0, 10, 10, 152, 383 0, 10, 10, 153, 0, 10, 10, 154, 384 0, 10, 10, 155, 0, 10, 10, 156, 385 0, 10, 10, 157, 0, 10, 10, 158, 386 0, 10, 10, 159, 0, 10, 10, 160, 387 0, 10, 10, 161, 0, 10, 10, 0, 388 163, 0, 164, 0, 165, 0, 166, 0, 389 167, 0, 4, 3, 3, 168, 0, 4, 390 3, 3, 169, 0, 4, 3, 3, 170, 391 0, 4, 3, 3, 171, 0, 4, 3, 392 3, 172, 0, 4, 3, 3, 173, 0, 393 4, 3, 3, 174, 0, 4, 3, 3, 394 175, 0, 4, 3, 3, 176, 0, 4, 395 3, 3, 177, 0, 4, 3, 3, 178, 396 0, 4, 3, 3, 179, 0, 4, 3, 397 3, 180, 0, 4, 3, 3, 181, 0, 398 4, 3, 3, 182, 0, 4, 3, 3, 399 183, 0, 4, 3, 3, 184, 0, 4, 400 3, 3, 0, 49, 186, 49, 0, 187, 401 0, 188, 0, 189, 0, 190, 0, 191, 402 191, 192, 198, 201, 197, 0, 192, 198, 403 197, 0, 193, 0, 4, 3, 194, 194, 404 3, 193, 0, 195, 195, 196, 0, 196, 405 0, 4, 3, 3, 196, 0, 4, 3, 406 192, 194, 194, 3, 197, 0, 199, 0, 407 200, 0, 4, 3, 3, 0, 202, 0, 408 200, 0, 186, 0, 206, 205, 205, 0, 409 206, 205, 205, 0, 206, 205, 5, 17, 410 44, 48, 205, 0, 206, 205, 205, 208, 411 0, 206, 205, 205, 209, 0, 206, 205, 412 205, 210, 0, 206, 205, 205, 211, 0, 413 206, 205, 205, 212, 0, 206, 205, 205, 414 213, 0, 206, 205, 205, 214, 0, 206, 415 205, 205, 215, 0, 206, 205, 205, 216, 416 0, 206, 205, 205, 217, 0, 206, 205, 417 205, 218, 0, 206, 205, 205, 219, 0, 418 206, 205, 205, 220, 0, 206, 205, 205, 419 221, 0, 206, 205, 205, 222, 0, 206, 420 205, 205, 223, 0, 206, 205, 205, 224, 421 0, 206, 205, 205, 0, 206, 205, 225, 422 225, 205, 225, 0, 206, 205, 205, 226, 423 0 424 ]; 425 426 static byte[] _maf_block_trans_actions = [ 427 0, 0, 0, 0, 0, 0, 0, 0, 428 0, 0, 0, 0, 0, 0, 0, 0, 429 0, 0, 0, 0, 0, 0, 0, 0, 430 0, 0, 7, 9, 9, 0, 0, 0, 431 37, 0, 11, 11, 1, 0, 0, 0, 432 37, 0, 13, 13, 1, 0, 0, 15, 433 15, 0, 0, 0, 0, 0, 0, 0, 434 37, 0, 17, 17, 1, 0, 0, 31, 435 31, 31, 31, 0, 0, 0, 0, 0, 436 0, 0, 7, 43, 43, 0, 0, 23, 437 23, 23, 23, 0, 23, 0, 0, 0, 438 0, 0, 0, 37, 0, 25, 25, 1, 439 0, 0, 27, 27, 27, 27, 0, 27, 440 0, 0, 0, 0, 0, 0, 37, 0, 441 25, 25, 1, 0, 25, 25, 1, 0, 442 25, 25, 1, 0, 25, 25, 1, 0, 443 25, 25, 1, 0, 25, 25, 1, 0, 444 25, 25, 1, 0, 25, 25, 1, 0, 445 25, 25, 1, 0, 25, 25, 1, 0, 446 25, 25, 1, 0, 25, 25, 1, 0, 447 25, 25, 1, 0, 25, 25, 1, 0, 448 25, 25, 1, 0, 25, 25, 1, 0, 449 25, 25, 0, 0, 0, 0, 0, 0, 450 7, 43, 43, 0, 0, 33, 33, 0, 451 33, 0, 0, 0, 0, 0, 0, 7, 452 9, 9, 0, 0, 0, 37, 0, 11, 453 11, 1, 0, 0, 0, 37, 0, 13, 454 13, 1, 0, 0, 15, 15, 0, 0, 455 0, 0, 0, 0, 0, 37, 0, 17, 456 17, 1, 0, 0, 0, 21, 17, 17, 457 1, 0, 17, 17, 1, 0, 17, 17, 458 1, 0, 17, 17, 1, 0, 17, 17, 459 1, 0, 17, 17, 1, 0, 17, 17, 460 1, 0, 17, 17, 1, 0, 17, 17, 461 1, 0, 17, 17, 1, 0, 17, 17, 462 1, 0, 17, 17, 1, 0, 17, 17, 463 1, 0, 17, 17, 1, 0, 17, 17, 464 1, 0, 17, 17, 1, 0, 17, 17, 465 0, 13, 13, 1, 0, 13, 13, 1, 466 0, 13, 13, 1, 0, 13, 13, 1, 467 0, 13, 13, 1, 0, 13, 13, 1, 468 0, 13, 13, 1, 0, 13, 13, 1, 469 0, 13, 13, 1, 0, 13, 13, 1, 470 0, 13, 13, 1, 0, 13, 13, 1, 471 0, 13, 13, 1, 0, 13, 13, 1, 472 0, 13, 13, 1, 0, 13, 13, 1, 473 0, 13, 13, 0, 11, 11, 1, 0, 474 11, 11, 1, 0, 11, 11, 1, 0, 475 11, 11, 1, 0, 11, 11, 1, 0, 476 11, 11, 1, 0, 11, 11, 1, 0, 477 11, 11, 1, 0, 11, 11, 1, 0, 478 11, 11, 1, 0, 11, 11, 1, 0, 479 11, 11, 1, 0, 11, 11, 1, 0, 480 11, 11, 1, 0, 11, 11, 1, 0, 481 11, 11, 1, 0, 11, 11, 0, 17, 482 17, 1, 0, 17, 17, 1, 0, 17, 483 17, 1, 0, 17, 17, 1, 0, 17, 484 17, 1, 0, 17, 17, 1, 0, 17, 485 17, 1, 0, 17, 17, 1, 0, 17, 486 17, 1, 0, 17, 17, 1, 0, 17, 487 17, 1, 0, 17, 17, 1, 0, 17, 488 17, 1, 0, 17, 17, 1, 0, 17, 489 17, 1, 0, 17, 17, 1, 0, 17, 490 17, 0, 13, 13, 1, 0, 13, 13, 491 1, 0, 13, 13, 1, 0, 13, 13, 492 1, 0, 13, 13, 1, 0, 13, 13, 493 1, 0, 13, 13, 1, 0, 13, 13, 494 1, 0, 13, 13, 1, 0, 13, 13, 495 1, 0, 13, 13, 1, 0, 13, 13, 496 1, 0, 13, 13, 1, 0, 13, 13, 497 1, 0, 13, 13, 1, 0, 13, 13, 498 1, 0, 13, 13, 0, 11, 11, 1, 499 0, 11, 11, 1, 0, 11, 11, 1, 500 0, 11, 11, 1, 0, 11, 11, 1, 501 0, 11, 11, 1, 0, 11, 11, 1, 502 0, 11, 11, 1, 0, 11, 11, 1, 503 0, 11, 11, 1, 0, 11, 11, 1, 504 0, 11, 11, 1, 0, 11, 11, 1, 505 0, 11, 11, 1, 0, 11, 11, 1, 506 0, 11, 11, 1, 0, 11, 11, 0, 507 0, 0, 0, 0, 0, 0, 0, 0, 508 37, 0, 5, 5, 5, 1, 0, 5, 509 5, 5, 1, 0, 5, 5, 5, 1, 510 0, 5, 5, 5, 1, 0, 5, 5, 511 5, 1, 0, 5, 5, 5, 1, 0, 512 5, 5, 5, 1, 0, 5, 5, 5, 513 1, 0, 5, 5, 5, 1, 0, 5, 514 5, 5, 1, 0, 5, 5, 5, 1, 515 0, 5, 5, 5, 1, 0, 5, 5, 516 5, 1, 0, 5, 5, 5, 1, 0, 517 5, 5, 5, 1, 0, 5, 5, 5, 518 1, 0, 5, 5, 5, 1, 0, 5, 519 5, 5, 0, 0, 0, 0, 0, 0, 520 0, 0, 0, 0, 0, 0, 0, 3, 521 3, 3, 3, 3, 3, 0, 0, 0, 522 0, 0, 0, 0, 40, 40, 0, 0, 523 40, 0, 0, 0, 0, 0, 0, 0, 524 0, 40, 40, 40, 0, 0, 40, 40, 525 0, 0, 0, 40, 0, 0, 0, 0, 526 0, 0, 40, 40, 40, 0, 0, 0, 527 0, 0, 0, 0, 19, 19, 19, 0, 528 0, 0, 0, 0, 0, 0, 0, 0, 529 0, 0, 0, 0, 29, 29, 29, 1, 530 0, 29, 29, 29, 1, 0, 29, 29, 531 29, 1, 0, 29, 29, 29, 1, 0, 532 29, 29, 29, 1, 0, 29, 29, 29, 533 1, 0, 29, 29, 29, 1, 0, 29, 534 29, 29, 1, 0, 29, 29, 29, 1, 535 0, 29, 29, 29, 1, 0, 29, 29, 536 29, 1, 0, 29, 29, 29, 1, 0, 537 29, 29, 29, 1, 0, 29, 29, 29, 538 1, 0, 29, 29, 29, 1, 0, 29, 539 29, 29, 1, 0, 29, 29, 29, 1, 540 0, 29, 29, 29, 0, 35, 35, 0, 541 0, 35, 0, 0, 46, 46, 46, 0, 542 0 543 ]; 544 545 static byte[] _maf_block_eof_actions = [ 546 0, 0, 0, 0, 0, 0, 0, 0, 547 0, 0, 0, 0, 0, 0, 0, 0, 548 0, 0, 0, 0, 0, 0, 0, 0, 549 0, 0, 0, 0, 0, 0, 0, 0, 550 0, 0, 0, 0, 0, 0, 0, 0, 551 0, 0, 0, 0, 0, 0, 0, 0, 552 0, 0, 0, 0, 0, 0, 0, 0, 553 0, 0, 0, 0, 0, 0, 0, 0, 554 0, 0, 0, 0, 0, 0, 0, 0, 555 0, 0, 0, 0, 0, 0, 0, 0, 556 0, 0, 0, 0, 0, 0, 0, 0, 557 0, 0, 0, 0, 0, 0, 0, 0, 558 0, 0, 0, 0, 0, 0, 0, 0, 559 0, 0, 0, 0, 0, 0, 0, 0, 560 0, 0, 0, 0, 0, 0, 0, 0, 561 0, 0, 0, 0, 0, 0, 0, 0, 562 0, 0, 0, 0, 0, 0, 0, 0, 563 0, 0, 0, 0, 0, 0, 0, 0, 564 0, 0, 0, 0, 0, 0, 0, 0, 565 0, 0, 0, 0, 0, 0, 0, 0, 566 0, 0, 0, 0, 0, 0, 0, 0, 567 0, 0, 0, 0, 0, 0, 0, 0, 568 0, 0, 0, 0, 0, 0, 0, 0, 569 0, 0, 0, 0, 0, 0, 0, 0, 570 0, 0, 0, 0, 0, 0, 0, 0, 571 0, 0, 0, 0, 19, 0, 0, 29, 572 29, 29, 29, 29, 29, 29, 29, 29, 573 29, 29, 29, 29, 29, 29, 29, 29, 574 29, 35, 46 575 ]; 576 577 static int maf_block_start = 1; 578 static int maf_block_first_final = 204; 579 static int maf_block_error = 0; 580 581 static int maf_block_en_block = 1; 582 583 584 #line 122 "maf_block.rl" 585 586 587 MafBlock parseMafBlock(string line) { 588 char* p = cast(char*)line.ptr; 589 char* pe = p + line.length; 590 char* eof = pe; 591 int cs; 592 593 int current_sign; 594 int int_value; 595 double float_value; 596 size_t float_beg; 597 598 MafBlock block; 599 MafSequence sequence; 600 auto sequences = Appender!(MafSequence[])(); 601 602 size_t src_beg; 603 size_t text_beg; 604 size_t qual_beg; 605 606 607 #line 604 "maf_block.d" 608 { 609 cs = maf_block_start; 610 } 611 612 #line 144 "maf_block.rl" 613 614 #line 611 "maf_block.d" 615 { 616 int _klen; 617 uint _trans; 618 byte* _acts; 619 uint _nacts; 620 char* _keys; 621 622 if ( p == pe ) 623 goto _test_eof; 624 if ( cs == 0 ) 625 goto _out; 626 _resume: 627 _keys = &_maf_block_trans_keys[_maf_block_key_offsets[cs]]; 628 _trans = _maf_block_index_offsets[cs]; 629 630 _klen = _maf_block_single_lengths[cs]; 631 if ( _klen > 0 ) { 632 char* _lower = _keys; 633 char* _mid; 634 char* _upper = _keys + _klen - 1; 635 while (1) { 636 if ( _upper < _lower ) 637 break; 638 639 _mid = _lower + ((_upper-_lower) >> 1); 640 if ( (*p) < *_mid ) 641 _upper = _mid - 1; 642 else if ( (*p) > *_mid ) 643 _lower = _mid + 1; 644 else { 645 _trans += cast(uint)(_mid - _keys); 646 goto _match; 647 } 648 } 649 _keys += _klen; 650 _trans += _klen; 651 } 652 653 _klen = _maf_block_range_lengths[cs]; 654 if ( _klen > 0 ) { 655 char* _lower = _keys; 656 char* _mid; 657 char* _upper = _keys + (_klen<<1) - 2; 658 while (1) { 659 if ( _upper < _lower ) 660 break; 661 662 _mid = _lower + (((_upper-_lower) >> 1) & ~1); 663 if ( (*p) < _mid[0] ) 664 _upper = _mid - 2; 665 else if ( (*p) > _mid[1] ) 666 _lower = _mid + 2; 667 else { 668 _trans += cast(uint)((_mid - _keys)>>1); 669 goto _match; 670 } 671 } 672 _trans += _klen; 673 } 674 675 _match: 676 cs = _maf_block_trans_targs[_trans]; 677 678 if ( _maf_block_trans_actions[_trans] == 0 ) 679 goto _again; 680 681 _acts = &_maf_block_actions[_maf_block_trans_actions[_trans]]; 682 _nacts = cast(uint) *_acts++; 683 while ( _nacts-- > 0 ) 684 { 685 switch ( *_acts++ ) 686 { 687 case 0: 688 #line 28 "maf_block.rl" 689 { int_value = 0; } 690 break; 691 case 1: 692 #line 29 "maf_block.rl" 693 { int_value *= 10; int_value += (*p) - '0'; } 694 break; 695 case 2: 696 #line 37 "maf_block.rl" 697 { float_beg = p - line.ptr; } 698 break; 699 case 3: 700 #line 38 "maf_block.rl" 701 { 702 float_value = to!float(line[float_beg .. p - line.ptr]); 703 } 704 break; 705 case 4: 706 #line 46 "maf_block.rl" 707 { block.score = float_value; } 708 break; 709 case 5: 710 #line 47 "maf_block.rl" 711 { block.pass = int_value; } 712 break; 713 case 6: 714 #line 55 "maf_block.rl" 715 { src_beg = p - line.ptr; } 716 break; 717 case 7: 718 #line 56 "maf_block.rl" 719 { sequence.source = line[src_beg .. p - line.ptr]; } 720 break; 721 case 8: 722 #line 57 "maf_block.rl" 723 { sequence.start = int_value; } 724 break; 725 case 9: 726 #line 58 "maf_block.rl" 727 { sequence.size = int_value; } 728 break; 729 case 10: 730 #line 59 "maf_block.rl" 731 { sequence.strand = (*p); } 732 break; 733 case 11: 734 #line 60 "maf_block.rl" 735 { sequence.source_size = int_value; } 736 break; 737 case 12: 738 #line 61 "maf_block.rl" 739 { sequences.put(sequence); sequence = MafSequence.init; } 740 break; 741 case 13: 742 #line 62 "maf_block.rl" 743 { assert(line[src_beg .. p - line.ptr] == sequences.data.back.source); } 744 break; 745 case 14: 746 #line 70 "maf_block.rl" 747 { text_beg = p - line.ptr; } 748 break; 749 case 15: 750 #line 71 "maf_block.rl" 751 { sequence.text = line[text_beg .. p - line.ptr]; } 752 break; 753 case 16: 754 #line 82 "maf_block.rl" 755 { sequences.data.back.left_status = (*p); } 756 break; 757 case 17: 758 #line 83 "maf_block.rl" 759 { sequences.data.back.left_count = int_value; } 760 break; 761 case 18: 762 #line 84 "maf_block.rl" 763 { sequences.data.back.right_status = (*p); } 764 break; 765 case 19: 766 #line 85 "maf_block.rl" 767 { sequences.data.back.right_count = int_value; } 768 break; 769 case 20: 770 #line 99 "maf_block.rl" 771 { sequence.empty_status = *p; } 772 break; 773 case 21: 774 #line 110 "maf_block.rl" 775 { qual_beg = p - line.ptr; } 776 break; 777 case 22: 778 #line 111 "maf_block.rl" 779 { sequences.data.back.quality = line[qual_beg .. p - line.ptr]; } 780 break; 781 #line 778 "maf_block.d" 782 default: break; 783 } 784 } 785 786 _again: 787 if ( cs == 0 ) 788 goto _out; 789 if ( ++p != pe ) 790 goto _resume; 791 _test_eof: {} 792 if ( p == eof ) 793 { 794 byte* __acts = &_maf_block_actions[_maf_block_eof_actions[cs]]; 795 uint __nacts = cast(uint) *__acts++; 796 while ( __nacts-- > 0 ) { 797 switch ( *__acts++ ) { 798 case 12: 799 #line 61 "maf_block.rl" 800 { sequences.put(sequence); sequence = MafSequence.init; } 801 break; 802 case 15: 803 #line 71 "maf_block.rl" 804 { sequence.text = line[text_beg .. p - line.ptr]; } 805 break; 806 case 19: 807 #line 85 "maf_block.rl" 808 { sequences.data.back.right_count = int_value; } 809 break; 810 case 22: 811 #line 111 "maf_block.rl" 812 { sequences.data.back.quality = line[qual_beg .. p - line.ptr]; } 813 break; 814 #line 811 "maf_block.d" 815 default: break; 816 } 817 } 818 } 819 820 _out: {} 821 } 822 823 #line 145 "maf_block.rl" 824 825 block.sequences = sequences.data; 826 return block; 827 }