All Downloads are FREE. Search and download functionalities are using the official Maven repository.

gherkin.lexer.Sk Maven / Gradle / Ivy

There is a newer version: 2.12.2
Show newest version

// line 1 "ragel/i18n/sk.java.rl"
package gherkin.lexer;

import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.ArrayList;
import java.util.regex.Pattern;
import gherkin.lexer.Lexer;
import gherkin.lexer.Listener;
import gherkin.lexer.LexingError;

public class Sk implements Lexer {
  
// line 150 "ragel/i18n/sk.java.rl"


  private final Listener listener;

  public Sk(Listener listener) {
    this.listener = listener;
  }

  
// line 26 "java/src/main/java/gherkin/lexer/Sk.java"
private static byte[] init__lexer_actions_0()
{
	return new byte [] {
	    0,    1,    0,    1,    1,    1,    2,    1,    3,    1,    4,    1,
	    5,    1,    6,    1,    7,    1,    8,    1,    9,    1,   10,    1,
	   11,    1,   12,    1,   13,    1,   16,    1,   17,    1,   18,    1,
	   19,    1,   20,    1,   21,    1,   22,    1,   23,    2,    2,   18,
	    2,    3,    4,    2,   13,    0,    2,   14,   15,    2,   17,    0,
	    2,   17,    1,    2,   17,   16,    2,   17,   19,    2,   18,    6,
	    2,   18,    7,    2,   18,    8,    2,   18,    9,    2,   18,   10,
	    2,   18,   16,    2,   20,   21,    2,   22,    0,    2,   22,    1,
	    2,   22,   16,    2,   22,   19,    3,    4,   14,   15,    3,    5,
	   14,   15,    3,   11,   14,   15,    3,   12,   14,   15,    3,   13,
	   14,   15,    3,   14,   15,   18,    3,   17,    0,   11,    3,   17,
	   14,   15,    4,    2,   14,   15,   18,    4,    3,    4,   14,   15,
	    4,   17,    0,   14,   15,    5,   17,    0,   11,   14,   15
	};
}

private static final byte _lexer_actions[] = init__lexer_actions_0();


private static short[] init__lexer_key_offsets_0()
{
	return new short [] {
	    0,    0,   21,   22,   23,   43,   44,   45,   47,   49,   54,   59,
	   64,   69,   73,   77,   79,   80,   81,   82,   83,   84,   85,   86,
	   87,   88,   89,   90,   91,   92,   93,   94,   95,   97,   99,  104,
	  111,  116,  119,  123,  127,  130,  133,  136,  139,  142,  145,  148,
	  151,  154,  157,  160,  163,  166,  169,  172,  173,  174,  175,  176,
	  177,  178,  179,  180,  181,  182,  195,  197,  199,  201,  203,  205,
	  207,  209,  211,  213,  215,  217,  219,  221,  223,  225,  227,  229,
	  231,  233,  235,  237,  257,  258,  259,  260,  261,  262,  263,  264,
	  265,  266,  267,  268,  269,  270,  271,  272,  273,  274,  276,  277,
	  278,  279,  295,  297,  299,  301,  303,  305,  307,  309,  311,  313,
	  315,  317,  319,  321,  323,  325,  329,  351,  352,  353,  354,  355,
	  356,  357,  358,  359,  360,  361,  362,  363,  364,  365,  367,  371,
	  372,  373,  374,  375,  376,  377,  378,  379,  380,  381,  382,  383,
	  384,  385,  386,  387,  388,  389,  390,  391,  409,  411,  413,  415,
	  417,  419,  421,  423,  425,  427,  429,  431,  433,  435,  437,  439,
	  443,  465,  466,  467,  468,  469,  470,  471,  472,  473,  474,  492,
	  494,  496,  498,  500,  502,  504,  506,  508,  510,  512,  514,  516,
	  518,  520,  522,  526,  548,  549,  550,  551,  552,  553,  554,  555,
	  556,  557,  558,  559,  560,  561,  562,  563,  564,  565,  566,  567,
	  568,  569,  570,  571,  572,  574,  575,  576,  577,  578,  579,  580,
	  581,  582,  583,  584,  585,  586,  587,  588,  589,  593,  599,  602,
	  604,  610,  630,  632,  634,  636,  638,  640,  642,  644,  646,  648,
	  650,  652,  654,  656,  658,  660,  662,  664,  666,  668,  670,  672,
	  674,  676,  678,  680,  683,  685,  687,  689,  691,  693,  695,  697,
	  699,  701,  703,  705,  707,  709,  711,  716,  718,  720,  722,  724,
	  726,  728,  730,  732,  734,  736,  738,  740,  742,  744,  746,  748,
	  750,  752,  754,  756,  758,  760,  762,  764,  766,  768,  770,  772,
	  774,  776,  778,  780,  782,  784,  786,  788,  790,  792,  794,  796,
	  798,  800,  802,  804,  806,  808,  810,  812,  813,  814,  815,  816,
	  817,  818,  819,  820,  821,  822,  823,  824,  825,  826,  827,  829,
	  831,  833,  835,  837,  839,  841,  843,  845,  847,  849,  851,  853,
	  855,  857,  859,  861,  863,  865,  867,  869,  871,  873,  875,  877,
	  880,  882,  884,  886,  888,  890,  892,  894,  896,  898,  900,  902,
	  904,  906,  908,  912,  914,  916,  918,  920,  922,  924,  926,  928,
	  930,  932,  934,  936,  938,  940,  942,  944,  946,  948,  950,  952,
	  954,  956,  958,  960,  962,  964,  966,  968,  970,  972,  974,  976,
	  978,  980,  982,  984,  986,  988,  990,  992,  994,  996,  998,  999,
	 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1017, 1019, 1021,
	 1023, 1025, 1027, 1029, 1031, 1033, 1035, 1037, 1039, 1041, 1043, 1045,
	 1047, 1049, 1051, 1053, 1055, 1057, 1059, 1061, 1063, 1065, 1067, 1069,
	 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081,
	 1082, 1083, 1084, 1086, 1088, 1090, 1092, 1094, 1096, 1098, 1100, 1102,
	 1104, 1106, 1108, 1112, 1114, 1116, 1118, 1120, 1122, 1124, 1126, 1128,
	 1130, 1132, 1134, 1136, 1138, 1140, 1142, 1144, 1146, 1148, 1150, 1152,
	 1154, 1156, 1158, 1160, 1162, 1164, 1166, 1168, 1170, 1172, 1174, 1176,
	 1178, 1180, 1182, 1184, 1186, 1188, 1190, 1192, 1194, 1196, 1198, 1200,
	 1202, 1204, 1206, 1208, 1210, 1212, 1214, 1216, 1218, 1220, 1222, 1224,
	 1226, 1229, 1231, 1233, 1235, 1237, 1239, 1241, 1243, 1245, 1247, 1249,
	 1251, 1253, 1255, 1258, 1261, 1263, 1265, 1267, 1269, 1271, 1273, 1275,
	 1277, 1279, 1281, 1283, 1285, 1287, 1289, 1291, 1293, 1295, 1297, 1299,
	 1301, 1303, 1305, 1307, 1309, 1311, 1313, 1315, 1317, 1319, 1321, 1323,
	 1325, 1327
	};
}

private static final short _lexer_key_offsets[] = init__lexer_key_offsets_0();


private static byte[] init__lexer_trans_keys_0()
{
	return new byte [] {
	  -17,   10,   32,   34,   35,   37,   42,   64,   65,   70,   75,   78,
	   79,   80,   83,   84,   86,   90,  124,    9,   13,  -69,  -65,   10,
	   32,   34,   35,   37,   42,   64,   65,   70,   75,   78,   79,   80,
	   83,   84,   86,   90,  124,    9,   13,   34,   34,   10,   13,   10,
	   13,   10,   32,   34,    9,   13,   10,   32,   34,    9,   13,   10,
	   32,   34,    9,   13,   10,   32,   34,    9,   13,   10,   32,    9,
	   13,   10,   32,    9,   13,   10,   13,   10,   95,   70,   69,   65,
	   84,   85,   82,   69,   95,   69,   78,   68,   95,   37,   32,   10,
	   13,   10,   13,   13,   32,   64,    9,   10,    9,   10,   13,   32,
	   64,   11,   12,   10,   32,   64,    9,   13,   32,  107,  108,   10,
	   13,  116,  122,   10,   13,   97,  105,   10,   13,  107,   10,   13,
	  116,   10,   13,  105,   10,   13,  101,  -59,   10,   13,  -66,   10,
	   13,   10,   13,   32,  -61,   10,   13,  -95,   10,   13,   10,   13,
	  114,   10,   13,  111,   10,   13,  118,   10,   13,  101,  -59,   10,
	   13, -120,   10,   13,  101,  117,  110,  107,   99,  105,   97,   58,
	   10,   10,   10,   32,   35,   37,   64,   70,   78,   79,   80,   83,
	   86,    9,   13,   10,   95,   10,   70,   10,   69,   10,   65,   10,
	   84,   10,   85,   10,   82,   10,   69,   10,   95,   10,   69,   10,
	   78,   10,   68,   10,   95,   10,   37,   10,  117,   10,  110,   10,
	  107,   10,   99,   10,  105,   10,   97,   10,   58,   10,   32,   34,
	   35,   37,   42,   64,   65,   70,   75,   78,   79,   80,   83,   84,
	   86,   90,  124,    9,   13,  101,  -60, -113,  -61,  -95,  -60, -115,
	  114,  116,   32,   83,   99,  101,  110,  -61,  -95,  114,   97,  117,
	   58,   10,   10,   10,   32,   35,   37,   42,   64,   65,   70,   75,
	   80,   83,   84,   86,   90,    9,   13,   10,   95,   10,   70,   10,
	   69,   10,   65,   10,   84,   10,   85,   10,   82,   10,   69,   10,
	   95,   10,   69,   10,   78,   10,   68,   10,   95,   10,   37,   10,
	   32,   10,   32,  107,  108,   10,   32,   34,   35,   37,   42,   64,
	   65,   70,   75,   78,   79,   80,   83,   84,   86,   90,  116,  122,
	  124,    9,   13,  115,  110,  111,  118,   97,   32,   83,   99,  101,
	  110,  -61,  -95,  114,   97,  111,  114,  -59,  107,  116,  122,  -66,
	  105,   97,  100,   97,  118,  107,  105,   97,  -60,  -66,  111,  109,
	   97,  100,  105,  101,   58,   10,   10,   10,   32,   35,   37,   42,
	   64,   65,   70,   75,   78,   79,   80,   83,   84,   86,   90,    9,
	   13,   10,   95,   10,   70,   10,   69,   10,   65,   10,   84,   10,
	   85,   10,   82,   10,   69,   10,   95,   10,   69,   10,   78,   10,
	   68,   10,   95,   10,   37,   10,   32,   10,   32,  107,  108,   10,
	   32,   34,   35,   37,   42,   64,   65,   70,   75,   78,   79,   80,
	   83,   84,   86,   90,  116,  122,  124,    9,   13,   99,  101,  110,
	  -61,  -95,  114,   58,   10,   10,   10,   32,   35,   37,   42,   64,
	   65,   70,   75,   78,   79,   80,   83,   84,   86,   90,    9,   13,
	   10,   95,   10,   70,   10,   69,   10,   65,   10,   84,   10,   85,
	   10,   82,   10,   69,   10,   95,   10,   69,   10,   78,   10,   68,
	   10,   95,   10,   37,   10,   32,   10,   32,  107,  108,   10,   32,
	   34,   35,   37,   42,   64,   65,   70,   75,   78,   79,   80,   83,
	   84,   86,   90,  116,  122,  124,    9,   13,   97,  107,  108,   97,
	  115,  116,  110,  111,  115,  -59,  -91,   97,   32,  112,  114,  101,
	  100,  112,  111,  107,  108,   97,  100,  117,   97,  105,  107,  116,
	  105,  101,  -59,  -66,   32,  -61,  -95,  114,  111,  118,  101,  -59,
	 -120,   32,  124,    9,   13,   10,   32,   92,  124,    9,   13,   10,
	   92,  124,   10,   92,   10,   32,   92,  124,    9,   13,   10,   32,
	   34,   35,   37,   42,   64,   65,   70,   75,   78,   79,   80,   83,
	   84,   86,   90,  124,    9,   13,   10,  101,   10,  117,   10,  110,
	   10,  107,   10,   99,   10,  105,   10,   97,   10,   58,   10,  101,
	  -60,   10, -113,   10,  -61,   10,  -95,   10,  -60,   10, -115,   10,
	   10,  114,   10,  116,   10,   32,   10,   83,   10,   99,   10,  101,
	   10,  110,  -61,   10,  -95,   10,   10,  114,   10,   97,  117,   10,
	  115,   10,  110,   10,  111,   10,  118,   10,   97,   10,   32,   10,
	   83,   10,   99,   10,  101,   10,  110,  -61,   10,  -95,   10,   10,
	  114,   10,  111,  -59,   10,  107,  116,  122,  -66,   10,   10,  105,
	   10,   97,   10,  100,   10,   97,   10,  118,   10,  107,   10,  105,
	   10,   97,  -60,   10,  -66,   10,   10,  111,   10,  109,   10,   97,
	   10,  100,   10,  105,   10,  101,   10,   99,   10,  101,   10,  110,
	  -61,   10,  -95,   10,   10,  114,   10,   97,   10,  107,   10,  108,
	   10,   97,   10,  115,   10,  116,   10,  110,   10,  111,   10,  115,
	  -59,   10,  -91,   10,   10,   97,   10,   32,   10,  112,   10,  114,
	   10,  101,   10,  100,   10,  112,   10,  111,   10,  107,   10,  108,
	   10,   97,   10,  100,   10,  117,   97,  105,  107,  116,  105,  101,
	  -59,  -66,   32,  -61,  -95,  114,  111,  118,  101,  -59, -120,   10,
	  101,   10,  117,   10,  110,   10,  107,   10,   99,   10,  105,   10,
	   97,   10,   58,   10,  101,  -60,   10, -113,   10,  -61,   10,  -95,
	   10,  -60,   10, -115,   10,   10,  114,   10,  116,   10,   32,   10,
	   83,   10,   99,   10,  101,   10,  110,  -61,   10,  -95,   10,   10,
	  114,   10,   97,  117,   10,  115,   10,  110,   10,  111,   10,  118,
	   10,   97,   10,   32,   10,   83,   10,   99,   10,  101,   10,  110,
	  -61,   10,  -95,   10,   10,  114,   10,  111,  -59,   10,  107,  116,
	  -66,   10,   10,  105,   10,   97,   10,  100,   10,   97,   10,  118,
	   10,  107,   10,  105,   10,   97,  -60,   10,  -66,   10,   10,  111,
	   10,  109,   10,   99,   10,  101,   10,  110,  -61,   10,  -95,   10,
	   10,  114,   10,   97,   10,  107,   10,  108,   10,   97,   10,  115,
	   10,  116,   10,  110,   10,  111,   10,  115,  -59,   10,  -91,   10,
	   10,   97,   10,   32,   10,  112,   10,  114,   10,  101,   10,  100,
	   10,  112,   10,  111,   10,  107,   10,  108,   10,   97,   10,  100,
	   10,  117,  -61,  -83,  107,  108,   97,  100,  121,   58,   10,   10,
	   10,   32,   35,   70,   80,   86,  124,    9,   13,   10,  117,   10,
	  110,   10,  107,   10,   99,   10,  105,   10,   97,   10,   58,   10,
	  111,  -59,   10,  -66,   10,   10,  105,   10,   97,   10,  100,   10,
	   97,   10,  118,   10,  107,   10,  108,   10,   97,   10,  115,   10,
	  116,   10,  110,   10,  111,   10,  115,  -59,   10,  -91,   10,   97,
	  105,  107,  116,  105,  101,  -59,  -66,   32,  -61,  -95,  114,  111,
	  118,  101,  -59, -120,   10,  101,   10,  117,   10,  110,   10,  107,
	   10,   99,   10,  105,   10,   97,   10,   58,   10,  101,  -60,   10,
	 -113,   10,   10,  111,  -59,   10,  107,  116,  -66,   10,   10,  105,
	   10,   97,   10,  100,   10,   97,   10,  118,   10,  107,   10,  105,
	   10,   97,  -60,   10,  -66,   10,   10,  111,   10,  109,   10,   99,
	   10,  101,   10,  110,  -61,   10,  -95,   10,   10,  114,   10,   97,
	   10,  107,   10,  108,   10,   97,   10,  115,   10,  116,   10,  110,
	   10,  111,   10,  115,  -59,   10,  -91,   10,   10,   97,   10,   32,
	   10,  112,   10,  114,   10,  101,   10,  100,   10,  112,   10,  111,
	   10,  107,   10,  108,   10,   97,   10,  100,   10,  117,  -61,   10,
	  -95,   10,  -60,   10, -115,   10,   10,  114,   10,  116,   10,   32,
	   10,   83,   10,   99,   10,  101,   10,  110,  -61,   10,  -95,   10,
	   10,  114,   10,   97,  117,   10,  115,   10,  110,   10,  111,   10,
	  118,   10,   97,   10,   32,   10,   83,   10,   99,   10,  101,   10,
	  110,  -61,   10,  -95,   10,   10,  114,   10,  111,  114,  -59,   10,
	  122,  -66,   10,   10,  105,   10,   97,   10,  100,   10,   97,   10,
	  118,   10,  107,   10,   97,   10,  100,   10,  105,   10,  101,  -61,
	   10,  -83,   10,   10,  107,   10,  108,   10,   97,   10,  100,   10,
	  121,   10,   99,   10,  101,   10,  110,  -61,   10,  -95,   10,   10,
	  114,   10,  108,   10,   97,   10,  115,   10,  116,   10,  110,   10,
	  111,   10,  115,  -59,   10,  -91,   10,    0
	};
}

private static final byte _lexer_trans_keys[] = init__lexer_trans_keys_0();


private static byte[] init__lexer_single_lengths_0()
{
	return new byte [] {
	    0,   19,    1,    1,   18,    1,    1,    2,    2,    3,    3,    3,
	    3,    2,    2,    2,    1,    1,    1,    1,    1,    1,    1,    1,
	    1,    1,    1,    1,    1,    1,    1,    1,    2,    2,    3,    5,
	    3,    3,    4,    4,    3,    3,    3,    3,    3,    3,    3,    3,
	    3,    3,    3,    3,    3,    3,    3,    1,    1,    1,    1,    1,
	    1,    1,    1,    1,    1,   11,    2,    2,    2,    2,    2,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    2,   18,    1,    1,    1,    1,    1,    1,    1,    1,
	    1,    1,    1,    1,    1,    1,    1,    1,    1,    2,    1,    1,
	    1,   14,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    2,    2,    2,    4,   20,    1,    1,    1,    1,    1,
	    1,    1,    1,    1,    1,    1,    1,    1,    1,    2,    4,    1,
	    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
	    1,    1,    1,    1,    1,    1,    1,   16,    2,    2,    2,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    4,
	   20,    1,    1,    1,    1,    1,    1,    1,    1,    1,   16,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    4,   20,    1,    1,    1,    1,    1,    1,    1,    1,
	    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
	    1,    1,    1,    1,    2,    1,    1,    1,    1,    1,    1,    1,
	    1,    1,    1,    1,    1,    1,    1,    1,    2,    4,    3,    2,
	    4,   18,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    2,    3,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    2,    2,    2,    2,    5,    2,    2,    2,    2,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    2,    2,    2,    2,    2,    1,    1,    1,    1,    1,
	    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    2,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    3,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    4,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    1,    1,
	    1,    1,    1,    1,    1,    1,    1,    1,    7,    2,    2,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    1,
	    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
	    1,    1,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    4,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    3,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    3,    3,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    0
	};
}

private static final byte _lexer_single_lengths[] = init__lexer_single_lengths_0();


private static byte[] init__lexer_range_lengths_0()
{
	return new byte [] {
	    0,    1,    0,    0,    1,    0,    0,    0,    0,    1,    1,    1,
	    1,    1,    1,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    1,    1,
	    1,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    1,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    1,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    1,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    1,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    1,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    1,    0,    0,    0,    0,    0,    0,    0,    0,    0,    1,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    1,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    1,    1,    0,    0,
	    1,    1,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    1,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0
	};
}

private static final byte _lexer_range_lengths[] = init__lexer_range_lengths_0();


private static short[] init__lexer_index_offsets_0()
{
	return new short [] {
	    0,    0,   21,   23,   25,   45,   47,   49,   52,   55,   60,   65,
	   70,   75,   79,   83,   86,   88,   90,   92,   94,   96,   98,  100,
	  102,  104,  106,  108,  110,  112,  114,  116,  118,  121,  124,  129,
	  136,  141,  145,  150,  155,  159,  163,  167,  171,  175,  179,  183,
	  187,  191,  195,  199,  203,  207,  211,  215,  217,  219,  221,  223,
	  225,  227,  229,  231,  233,  235,  248,  251,  254,  257,  260,  263,
	  266,  269,  272,  275,  278,  281,  284,  287,  290,  293,  296,  299,
	  302,  305,  308,  311,  331,  333,  335,  337,  339,  341,  343,  345,
	  347,  349,  351,  353,  355,  357,  359,  361,  363,  365,  368,  370,
	  372,  374,  390,  393,  396,  399,  402,  405,  408,  411,  414,  417,
	  420,  423,  426,  429,  432,  435,  440,  462,  464,  466,  468,  470,
	  472,  474,  476,  478,  480,  482,  484,  486,  488,  490,  493,  498,
	  500,  502,  504,  506,  508,  510,  512,  514,  516,  518,  520,  522,
	  524,  526,  528,  530,  532,  534,  536,  538,  556,  559,  562,  565,
	  568,  571,  574,  577,  580,  583,  586,  589,  592,  595,  598,  601,
	  606,  628,  630,  632,  634,  636,  638,  640,  642,  644,  646,  664,
	  667,  670,  673,  676,  679,  682,  685,  688,  691,  694,  697,  700,
	  703,  706,  709,  714,  736,  738,  740,  742,  744,  746,  748,  750,
	  752,  754,  756,  758,  760,  762,  764,  766,  768,  770,  772,  774,
	  776,  778,  780,  782,  784,  787,  789,  791,  793,  795,  797,  799,
	  801,  803,  805,  807,  809,  811,  813,  815,  817,  821,  827,  831,
	  834,  840,  860,  863,  866,  869,  872,  875,  878,  881,  884,  887,
	  890,  893,  896,  899,  902,  905,  908,  911,  914,  917,  920,  923,
	  926,  929,  932,  935,  939,  942,  945,  948,  951,  954,  957,  960,
	  963,  966,  969,  972,  975,  978,  981,  987,  990,  993,  996,  999,
	 1002, 1005, 1008, 1011, 1014, 1017, 1020, 1023, 1026, 1029, 1032, 1035,
	 1038, 1041, 1044, 1047, 1050, 1053, 1056, 1059, 1062, 1065, 1068, 1071,
	 1074, 1077, 1080, 1083, 1086, 1089, 1092, 1095, 1098, 1101, 1104, 1107,
	 1110, 1113, 1116, 1119, 1122, 1125, 1128, 1131, 1133, 1135, 1137, 1139,
	 1141, 1143, 1145, 1147, 1149, 1151, 1153, 1155, 1157, 1159, 1161, 1164,
	 1167, 1170, 1173, 1176, 1179, 1182, 1185, 1188, 1191, 1194, 1197, 1200,
	 1203, 1206, 1209, 1212, 1215, 1218, 1221, 1224, 1227, 1230, 1233, 1236,
	 1240, 1243, 1246, 1249, 1252, 1255, 1258, 1261, 1264, 1267, 1270, 1273,
	 1276, 1279, 1282, 1287, 1290, 1293, 1296, 1299, 1302, 1305, 1308, 1311,
	 1314, 1317, 1320, 1323, 1326, 1329, 1332, 1335, 1338, 1341, 1344, 1347,
	 1350, 1353, 1356, 1359, 1362, 1365, 1368, 1371, 1374, 1377, 1380, 1383,
	 1386, 1389, 1392, 1395, 1398, 1401, 1404, 1407, 1410, 1413, 1416, 1418,
	 1420, 1422, 1424, 1426, 1428, 1430, 1432, 1434, 1436, 1445, 1448, 1451,
	 1454, 1457, 1460, 1463, 1466, 1469, 1472, 1475, 1478, 1481, 1484, 1487,
	 1490, 1493, 1496, 1499, 1502, 1505, 1508, 1511, 1514, 1517, 1520, 1523,
	 1525, 1527, 1529, 1531, 1533, 1535, 1537, 1539, 1541, 1543, 1545, 1547,
	 1549, 1551, 1553, 1556, 1559, 1562, 1565, 1568, 1571, 1574, 1577, 1580,
	 1583, 1586, 1589, 1594, 1597, 1600, 1603, 1606, 1609, 1612, 1615, 1618,
	 1621, 1624, 1627, 1630, 1633, 1636, 1639, 1642, 1645, 1648, 1651, 1654,
	 1657, 1660, 1663, 1666, 1669, 1672, 1675, 1678, 1681, 1684, 1687, 1690,
	 1693, 1696, 1699, 1702, 1705, 1708, 1711, 1714, 1717, 1720, 1723, 1726,
	 1729, 1732, 1735, 1738, 1741, 1744, 1747, 1750, 1753, 1756, 1759, 1762,
	 1765, 1769, 1772, 1775, 1778, 1781, 1784, 1787, 1790, 1793, 1796, 1799,
	 1802, 1805, 1808, 1812, 1816, 1819, 1822, 1825, 1828, 1831, 1834, 1837,
	 1840, 1843, 1846, 1849, 1852, 1855, 1858, 1861, 1864, 1867, 1870, 1873,
	 1876, 1879, 1882, 1885, 1888, 1891, 1894, 1897, 1900, 1903, 1906, 1909,
	 1912, 1915
	};
}

private static final short _lexer_index_offsets[] = init__lexer_index_offsets_0();


private static short[] init__lexer_indicies_0()
{
	return new short [] {
	    1,    3,    2,    4,    5,    6,    7,    8,    9,   10,   11,   12,
	   13,   14,   15,   16,   17,   18,   19,    2,    0,   20,    0,    2,
	    0,    3,    2,    4,    5,    6,    7,    8,    9,   10,   11,   12,
	   13,   14,   15,   16,   17,   18,   19,    2,    0,   21,    0,   22,
	    0,   24,   25,   23,   27,   28,   26,   31,   30,   32,   30,   29,
	   35,   34,   36,   34,   33,   35,   34,   37,   34,   33,   35,   34,
	   38,   34,   33,   40,   39,   39,    0,    3,   41,   41,    0,   43,
	   44,   42,    3,    0,   45,    0,   46,    0,   47,    0,   48,    0,
	   49,    0,   50,    0,   51,    0,   52,    0,   53,    0,   54,    0,
	   55,    0,   56,    0,   57,    0,   58,    0,   59,    0,   61,   62,
	   60,   64,   65,   63,    0,    0,    0,    0,   66,   67,   68,   67,
	   67,   70,   69,   66,    3,   71,    8,   71,    0,   72,   73,   74,
	    0,   61,   62,   75,   76,   60,   64,   65,   77,   78,   63,   64,
	   65,   79,   63,   64,   65,   80,   63,   64,   65,   78,   63,   64,
	   65,   81,   63,   82,   64,   65,   63,   83,   64,   65,   63,   64,
	   65,   59,   63,   84,   64,   65,   63,   85,   64,   65,   63,   64,
	   65,   86,   63,   64,   65,   87,   63,   64,   65,   88,   63,   64,
	   65,   89,   63,   90,   64,   65,   63,   83,   64,   65,   63,   73,
	    0,   91,    0,   92,    0,   93,    0,   94,    0,   95,    0,   96,
	    0,   97,    0,   99,   98,  101,  100,  101,  102,  103,  104,  103,
	  105,  106,  107,  108,  109,  110,  102,  100,  101,  111,  100,  101,
	  112,  100,  101,  113,  100,  101,  114,  100,  101,  115,  100,  101,
	  116,  100,  101,  117,  100,  101,  118,  100,  101,  119,  100,  101,
	  120,  100,  101,  121,  100,  101,  122,  100,  101,  123,  100,  101,
	  124,  100,  101,  125,  100,  101,  126,  100,  101,  127,  100,  101,
	  128,  100,  101,  129,  100,  101,  130,  100,  101,  131,  100,  133,
	  132,  134,  135,  136,  137,  138,  139,  140,  141,  142,  143,  144,
	  145,  146,  147,  148,  149,  132,    0,  150,    0,  151,    0,   73,
	    0,  152,    0,  153,    0,  154,    0,  155,    0,  156,    0,  157,
	    0,  158,    0,  159,    0,  160,    0,  161,    0,  162,    0,  163,
	    0,  164,    0,  165,    0,  166,  166,    0,  167,    0,  169,  168,
	  171,  170,  171,  172,  173,  174,  175,  173,  176,  177,  178,  179,
	  180,  181,  182,  183,  172,  170,  171,  184,  170,  171,  185,  170,
	  171,  186,  170,  171,  187,  170,  171,  188,  170,  171,  189,  170,
	  171,  190,  170,  171,  191,  170,  171,  192,  170,  171,  193,  170,
	  171,  194,  170,  171,  195,  170,  171,  196,  170,  171,  197,  170,
	  171,  198,  170,  171,  199,  200,  201,  170,  133,  132,  134,  135,
	  136,  137,  138,  139,  140,  141,  142,  143,  144,  145,  146,  147,
	  148,  202,  203,  149,  132,    0,  204,    0,  205,    0,  206,    0,
	  207,    0,  208,    0,  209,    0,  210,    0,  211,    0,  212,    0,
	  213,    0,  214,    0,  215,    0,  216,    0,  166,    0,  217,  218,
	    0,  219,  220,  221,  222,    0,  223,    0,  224,    0,  225,    0,
	  226,    0,  227,    0,  228,    0,   95,    0,  229,    0,  230,    0,
	  231,    0,   73,    0,  232,    0,   73,    0,  233,    0,  234,    0,
	  235,    0,  236,    0,  237,    0,  239,  238,  241,  240,  241,  242,
	  243,  244,  245,  243,  246,  247,  248,  249,  250,  251,  252,  253,
	  254,  255,  242,  240,  241,  256,  240,  241,  257,  240,  241,  258,
	  240,  241,  259,  240,  241,  260,  240,  241,  261,  240,  241,  262,
	  240,  241,  263,  240,  241,  264,  240,  241,  265,  240,  241,  266,
	  240,  241,  267,  240,  241,  268,  240,  241,  269,  240,  241,  270,
	  240,  241,  271,  272,  273,  240,  133,  132,  134,  135,  136,  137,
	  138,  139,  140,  141,  142,  143,  144,  145,  146,  147,  148,  274,
	  275,  149,  132,    0,  276,    0,  277,    0,  278,    0,  279,    0,
	  280,    0,  281,    0,  282,    0,  284,  283,  286,  285,  286,  287,
	  288,  289,  290,  288,  291,  292,  293,  294,  295,  296,  297,  298,
	  299,  300,  287,  285,  286,  301,  285,  286,  302,  285,  286,  303,
	  285,  286,  304,  285,  286,  305,  285,  286,  306,  285,  286,  307,
	  285,  286,  308,  285,  286,  309,  285,  286,  310,  285,  286,  311,
	  285,  286,  312,  285,  286,  313,  285,  286,  314,  285,  286,  315,
	  285,  286,  316,  317,  318,  285,  133,  132,  134,  135,  136,  137,
	  138,  139,  140,  141,  142,  143,  144,  145,  146,  147,  148,  319,
	  320,  149,  132,    0,  321,    0,   73,    0,  322,    0,  323,    0,
	  324,    0,  325,    0,  326,    0,  327,    0,  328,    0,  329,    0,
	   96,    0,  330,    0,  331,    0,  332,    0,  333,    0,  334,    0,
	  335,    0,  336,    0,  337,    0,  338,    0,  339,    0,  340,    0,
	  341,    0,   73,    0,  342,  343,    0,  344,    0,  345,    0,  343,
	    0,  346,    0,  347,    0,  348,    0,  315,    0,  349,    0,  350,
	    0,  351,    0,  352,    0,  353,    0,  354,    0,  355,    0,  348,
	    0,  356,  357,  356,    0,  360,  359,  361,  362,  359,  358,    0,
	  364,  365,  363,    0,  364,  363,  360,  366,  364,  365,  366,  363,
	  360,  367,  368,  369,  370,  371,  372,  373,  374,  375,  376,  377,
	  378,  379,  380,  381,  382,  383,  367,    0,  286,  317,  285,  286,
	  384,  285,  286,  385,  285,  286,  386,  285,  286,  387,  285,  286,
	  388,  285,  286,  389,  285,  286,  315,  285,  286,  390,  285,  391,
	  286,  285,  317,  286,  285,  392,  286,  285,  393,  286,  285,  394,
	  286,  285,  395,  286,  285,  286,  396,  285,  286,  397,  285,  286,
	  398,  285,  286,  399,  285,  286,  400,  285,  286,  401,  285,  286,
	  402,  285,  403,  286,  285,  404,  286,  285,  286,  405,  285,  286,
	  389,  389,  285,  286,  406,  285,  286,  407,  285,  286,  408,  285,
	  286,  409,  285,  286,  410,  285,  286,  411,  285,  286,  412,  285,
	  286,  413,  285,  286,  414,  285,  286,  415,  285,  416,  286,  285,
	  417,  286,  285,  286,  388,  285,  286,  418,  285,  419,  286,  420,
	  421,  422,  285,  423,  286,  285,  286,  424,  285,  286,  425,  285,
	  286,  426,  285,  286,  427,  285,  286,  428,  285,  286,  388,  285,
	  286,  429,  285,  286,  430,  285,  431,  286,  285,  317,  286,  285,
	  286,  432,  285,  286,  317,  285,  286,  433,  285,  286,  434,  285,
	  286,  435,  285,  286,  389,  285,  286,  436,  285,  286,  437,  285,
	  286,  438,  285,  439,  286,  285,  440,  286,  285,  286,  389,  285,
	  286,  441,  285,  286,  317,  285,  286,  442,  285,  286,  443,  285,
	  286,  444,  285,  286,  445,  285,  286,  446,  285,  286,  447,  285,
	  286,  448,  285,  449,  286,  285,  389,  286,  285,  286,  450,  285,
	  286,  451,  285,  286,  452,  285,  286,  453,  285,  286,  454,  285,
	  286,  455,  285,  286,  456,  285,  286,  457,  285,  286,  458,  285,
	  286,  459,  285,  286,  460,  285,  286,  461,  285,  286,  317,  285,
	  462,  463,    0,  464,    0,  465,    0,  463,    0,  466,    0,  467,
	    0,  468,    0,  270,    0,  469,    0,  470,    0,  471,    0,  472,
	    0,  473,    0,  474,    0,  475,    0,  468,    0,  241,  272,  240,
	  241,  476,  240,  241,  477,  240,  241,  478,  240,  241,  479,  240,
	  241,  480,  240,  241,  481,  240,  241,  270,  240,  241,  482,  240,
	  483,  241,  240,  272,  241,  240,  484,  241,  240,  485,  241,  240,
	  486,  241,  240,  487,  241,  240,  241,  488,  240,  241,  489,  240,
	  241,  490,  240,  241,  491,  240,  241,  492,  240,  241,  493,  240,
	  241,  494,  240,  495,  241,  240,  496,  241,  240,  241,  497,  240,
	  241,  481,  481,  240,  241,  498,  240,  241,  499,  240,  241,  500,
	  240,  241,  501,  240,  241,  502,  240,  241,  503,  240,  241,  504,
	  240,  241,  505,  240,  241,  506,  240,  241,  507,  240,  508,  241,
	  240,  509,  241,  240,  241,  480,  240,  241,  510,  240,  511,  241,
	  512,  513,  240,  514,  241,  240,  241,  515,  240,  241,  516,  240,
	  241,  517,  240,  241,  518,  240,  241,  519,  240,  241,  480,  240,
	  241,  520,  240,  241,  521,  240,  522,  241,  240,  272,  241,  240,
	  241,  523,  240,  241,  272,  240,  241,  524,  240,  241,  525,  240,
	  241,  526,  240,  527,  241,  240,  528,  241,  240,  241,  481,  240,
	  241,  529,  240,  241,  272,  240,  241,  530,  240,  241,  531,  240,
	  241,  532,  240,  241,  533,  240,  241,  534,  240,  241,  535,  240,
	  241,  536,  240,  537,  241,  240,  481,  241,  240,  241,  538,  240,
	  241,  539,  240,  241,  540,  240,  241,  541,  240,  241,  542,  240,
	  241,  543,  240,  241,  544,  240,  241,  545,  240,  241,  546,  240,
	  241,  547,  240,  241,  548,  240,  241,  549,  240,  241,  272,  240,
	  550,    0,  551,    0,  552,    0,  553,    0,  554,    0,  555,    0,
	  556,    0,  557,    0,  559,  558,  561,  560,  561,  562,  563,  564,
	  565,  566,  563,  562,  560,  561,  567,  560,  561,  568,  560,  561,
	  569,  560,  561,  570,  560,  561,  571,  560,  561,  572,  560,  561,
	  573,  560,  561,  574,  560,  575,  561,  560,  576,  561,  560,  561,
	  577,  560,  561,  578,  560,  561,  579,  560,  561,  580,  560,  561,
	  581,  560,  561,  571,  560,  561,  582,  560,  561,  583,  560,  561,
	  584,  560,  561,  585,  560,  561,  586,  560,  561,  587,  560,  561,
	  588,  560,  589,  561,  560,  572,  561,  560,  590,  591,    0,  592,
	    0,  593,    0,  591,    0,  594,    0,  595,    0,  596,    0,  198,
	    0,  597,    0,  598,    0,  599,    0,  600,    0,  601,    0,  602,
	    0,  603,    0,  596,    0,  171,  200,  170,  171,  604,  170,  171,
	  605,  170,  171,  606,  170,  171,  607,  170,  171,  608,  170,  171,
	  609,  170,  171,  198,  170,  171,  610,  170,  611,  171,  170,  200,
	  171,  170,  171,  612,  170,  613,  171,  614,  615,  170,  616,  171,
	  170,  171,  617,  170,  171,  618,  170,  171,  619,  170,  171,  620,
	  170,  171,  621,  170,  171,  608,  170,  171,  622,  170,  171,  623,
	  170,  624,  171,  170,  200,  171,  170,  171,  625,  170,  171,  200,
	  170,  171,  626,  170,  171,  627,  170,  171,  628,  170,  629,  171,
	  170,  630,  171,  170,  171,  609,  170,  171,  631,  170,  171,  200,
	  170,  171,  632,  170,  171,  633,  170,  171,  634,  170,  171,  635,
	  170,  171,  636,  170,  171,  637,  170,  171,  638,  170,  639,  171,
	  170,  609,  171,  170,  171,  640,  170,  171,  641,  170,  171,  642,
	  170,  171,  643,  170,  171,  644,  170,  171,  645,  170,  171,  646,
	  170,  171,  647,  170,  171,  648,  170,  171,  649,  170,  171,  650,
	  170,  171,  651,  170,  171,  200,  170,  652,  101,  100,  653,  101,
	  100,  654,  101,  100,  655,  101,  100,  101,  656,  100,  101,  657,
	  100,  101,  658,  100,  101,  659,  100,  101,  660,  100,  101,  661,
	  100,  101,  662,  100,  663,  101,  100,  664,  101,  100,  101,  665,
	  100,  101,  130,  130,  100,  101,  666,  100,  101,  667,  100,  101,
	  668,  100,  101,  669,  100,  101,  670,  100,  101,  671,  100,  101,
	  672,  100,  101,  673,  100,  101,  674,  100,  101,  675,  100,  676,
	  101,  100,  677,  101,  100,  101,  129,  100,  101,  678,  679,  100,
	  680,  101,  681,  100,  682,  101,  100,  101,  683,  100,  101,  684,
	  100,  101,  685,  100,  101,  686,  100,  101,  687,  100,  101,  129,
	  100,  101,  688,  100,  101,  689,  100,  101,  690,  100,  101,  130,
	  100,  691,  101,  100,  692,  101,  100,  101,  693,  100,  101,  694,
	  100,  101,  695,  100,  101,  696,  100,  101,  130,  100,  101,  697,
	  100,  101,  698,  100,  101,  699,  100,  700,  101,  100,  701,  101,
	  100,  101,  130,  100,  101,  702,  100,  101,  703,  100,  101,  704,
	  100,  101,  705,  100,  101,  706,  100,  101,  707,  100,  101,  708,
	  100,  709,  101,  100,  130,  101,  100,  710,    0
	};
}

private static final short _lexer_indicies[] = init__lexer_indicies_0();


private static short[] init__lexer_trans_targs_0()
{
	return new short [] {
	    0,    2,    4,    4,    5,   15,   17,   31,   34,   37,   56,   88,
	   91,  127,  141,  181,  208,  210,  219,  248,    3,    6,    7,    8,
	    9,    8,    8,    9,    8,   10,   10,   10,   11,   10,   10,   10,
	   11,   12,   13,   14,    4,   14,   15,    4,   16,   18,   19,   20,
	   21,   22,   23,   24,   25,   26,   27,   28,   29,   30,  613,   32,
	   33,    4,   16,   33,    4,   16,   35,   36,    4,   35,   34,   36,
	   38,   31,   55,   39,   47,   40,   43,   41,   42,   44,   45,   46,
	   48,   49,   50,   51,   52,   53,   54,   57,   58,   59,   60,   61,
	   62,   63,   64,   65,   64,   65,   65,    4,   66,   80,  550,  565,
	  578,  598,  604,   67,   68,   69,   70,   71,   72,   73,   74,   75,
	   76,   77,   78,   79,    4,   81,   82,   83,   84,   85,   86,   87,
	    4,    4,    5,   15,   17,   31,   34,   37,   56,   88,   91,  127,
	  141,  181,  208,  210,  219,  248,   89,   90,   92,   93,   94,   95,
	   96,   97,   98,   99,  100,  101,  102,  103,  104,  105,  106,  107,
	  108,  109,  108,  109,  109,    4,  110,  124,  125,  495,  502,  505,
	  520,  526,  528,  537,  111,  112,  113,  114,  115,  116,  117,  118,
	  119,  120,  121,  122,  123,    4,   87,  126,  124,  494,  478,  486,
	  128,  129,  130,  131,  132,  133,  134,  135,  136,  137,  138,  139,
	  140,  142,  442,  143,  150,  154,  156,  144,  145,  146,  147,  148,
	  149,  151,  152,  153,  155,  157,  158,  159,  160,  161,  162,  163,
	  162,  163,  163,    4,  164,  178,  179,  359,  366,  369,  384,  397,
	  412,  418,  420,  429,  165,  166,  167,  168,  169,  170,  171,  172,
	  173,  174,  175,  176,  177,    4,   87,  180,  178,  358,  342,  350,
	  182,  183,  184,  185,  186,  187,  188,  189,  190,  189,  190,  190,
	    4,  191,  205,  206,  255,  262,  265,  280,  293,  312,  318,  320,
	  329,  192,  193,  194,  195,  196,  197,  198,  199,  200,  201,  202,
	  203,  204,    4,   87,  207,  205,  254,  232,  240,  209,  211,  212,
	  213,  214,  215,  216,  217,  218,  220,  221,  222,  223,  224,  225,
	  226,  227,  228,  229,  230,  231,  233,  236,  234,  235,  237,  238,
	  239,  241,  242,  243,  244,  245,  246,  247,  248,  249,  250,  252,
	  253,  251,  249,  250,  251,  249,  252,  253,    5,   15,   17,   31,
	   34,   37,   56,   88,   91,  127,  141,  181,  208,  210,  219,  248,
	  256,  257,  258,  259,  260,  261,  263,  264,  266,  267,  268,  269,
	  270,  271,  272,  273,  274,  275,  276,  277,  278,  279,  281,  282,
	  283,  284,  285,  286,  287,  288,  289,  290,  291,  292,  294,  295,
	  302,  306,  308,  296,  297,  298,  299,  300,  301,  303,  304,  305,
	  307,  309,  310,  311,  313,  314,  315,  316,  317,  319,  321,  322,
	  323,  324,  325,  326,  327,  328,  330,  331,  332,  333,  334,  335,
	  336,  337,  338,  339,  340,  341,  343,  346,  344,  345,  347,  348,
	  349,  351,  352,  353,  354,  355,  356,  357,  360,  361,  362,  363,
	  364,  365,  367,  368,  370,  371,  372,  373,  374,  375,  376,  377,
	  378,  379,  380,  381,  382,  383,  385,  386,  387,  388,  389,  390,
	  391,  392,  393,  394,  395,  396,  398,  399,  406,  410,  400,  401,
	  402,  403,  404,  405,  407,  408,  409,  411,  413,  414,  415,  416,
	  417,  419,  421,  422,  423,  424,  425,  426,  427,  428,  430,  431,
	  432,  433,  434,  435,  436,  437,  438,  439,  440,  441,  443,  444,
	  445,  446,  447,  448,  449,  450,  451,  452,  451,  452,  452,    4,
	  453,  460,  469,  454,  455,  456,  457,  458,  459,   87,  461,  462,
	  463,  464,  465,  466,  467,  468,  470,  471,  472,  473,  474,  475,
	  476,  477,  479,  482,  480,  481,  483,  484,  485,  487,  488,  489,
	  490,  491,  492,  493,  496,  497,  498,  499,  500,  501,  503,  504,
	  506,  507,  514,  518,  508,  509,  510,  511,  512,  513,  515,  516,
	  517,  519,  521,  522,  523,  524,  525,  527,  529,  530,  531,  532,
	  533,  534,  535,  536,  538,  539,  540,  541,  542,  543,  544,  545,
	  546,  547,  548,  549,  551,  552,  553,  554,  555,  556,  557,  558,
	  559,  560,  561,  562,  563,  564,  566,  567,  568,  569,  570,  571,
	  572,  573,  574,  575,  576,  577,  579,  591,  580,  587,  581,  582,
	  583,  584,  585,  586,  588,  589,  590,  592,  593,  594,  595,  596,
	  597,  599,  600,  601,  602,  603,  605,  606,  607,  608,  609,  610,
	  611,  612,    0
	};
}

private static final short _lexer_trans_targs[] = init__lexer_trans_targs_0();


private static short[] init__lexer_trans_actions_0()
{
	return new short [] {
	   43,    0,    0,   54,    3,    1,    0,   29,    1,   29,   29,   29,
	   29,   29,   29,   29,   29,   29,   29,   35,    0,    0,    0,    7,
	  139,   48,    0,  102,    9,    5,   45,  134,   45,    0,   33,  122,
	   33,   33,    0,   11,  106,    0,    0,  114,   25,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	   57,  149,  126,    0,  110,   23,    0,   27,  118,   27,   51,    0,
	    0,    0,    0,   57,   57,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,   57,  144,    0,   54,    0,   69,   33,   84,   84,   84,
	   84,   84,   84,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,   13,    0,    0,    0,    0,    0,    0,   13,
	   31,  130,   60,   57,   31,   63,   57,   63,   63,   63,   63,   63,
	   63,   63,   63,   63,   63,   66,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	   57,  144,    0,   54,    0,   78,   33,   84,   84,   84,   84,   84,
	   84,   84,   84,   84,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,   19,   19,   19,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,   57,  144,
	    0,   54,    0,   72,   33,   84,   84,   84,   84,   84,   84,   84,
	   84,   84,   84,   84,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,   15,   15,   15,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,   57,  144,    0,   54,    0,
	   75,   33,   84,   84,   84,   84,   84,   84,   84,   84,   84,   84,
	   84,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,   17,   17,   17,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,   37,   37,
	   54,   37,   87,    0,    0,   39,    0,    0,   93,   90,   41,   96,
	   90,   96,   96,   96,   96,   96,   96,   96,   96,   96,   96,   99,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,   57,  144,    0,   54,    0,   81,
	   84,   84,   84,    0,    0,    0,    0,    0,    0,   21,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
	    0,    0,    0
	};
}

private static final short _lexer_trans_actions[] = init__lexer_trans_actions_0();


private static short[] init__lexer_eof_actions_0()
{
	return new short [] {
	    0,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,   43,
	   43,   43
	};
}

private static final short _lexer_eof_actions[] = init__lexer_eof_actions_0();


static final int lexer_start = 1;
static final int lexer_first_final = 613;

static final int lexer_en_main = 1;


// line 159 "ragel/i18n/sk.java.rl"

  public void scan(String source)  {
    String input = source + "\n%_FEATURE_END_%";
    byte[] data = null;
    try {
      data = input.getBytes("UTF-8");
    } catch(UnsupportedEncodingException e) {
      throw new RuntimeException(e);
    }
    int cs, p = 0, pe = data.length;
    int eof = pe;

    int lineNumber = 1;
    int lastNewline = 0;

    int contentStart = -1;
    int currentLine = -1;
    int docstringContentTypeStart = -1;
    int docstringContentTypeEnd = -1;
    int startCol = -1;
    int nextKeywordStart = -1;
    int keywordStart = -1;
    String keyword = null;
    List currentRow = null;

    
// line 814 "java/src/main/java/gherkin/lexer/Sk.java"
	{
	cs = lexer_start;
	}

// line 185 "ragel/i18n/sk.java.rl"
    
// line 821 "java/src/main/java/gherkin/lexer/Sk.java"
	{
	int _klen;
	int _trans = 0;
	int _acts;
	int _nacts;
	int _keys;
	int _goto_targ = 0;

	_goto: while (true) {
	switch ( _goto_targ ) {
	case 0:
	if ( p == pe ) {
		_goto_targ = 4;
		continue _goto;
	}
	if ( cs == 0 ) {
		_goto_targ = 5;
		continue _goto;
	}
case 1:
	_match: do {
	_keys = _lexer_key_offsets[cs];
	_trans = _lexer_index_offsets[cs];
	_klen = _lexer_single_lengths[cs];
	if ( _klen > 0 ) {
		int _lower = _keys;
		int _mid;
		int _upper = _keys + _klen - 1;
		while (true) {
			if ( _upper < _lower )
				break;

			_mid = _lower + ((_upper-_lower) >> 1);
			if ( data[p] < _lexer_trans_keys[_mid] )
				_upper = _mid - 1;
			else if ( data[p] > _lexer_trans_keys[_mid] )
				_lower = _mid + 1;
			else {
				_trans += (_mid - _keys);
				break _match;
			}
		}
		_keys += _klen;
		_trans += _klen;
	}

	_klen = _lexer_range_lengths[cs];
	if ( _klen > 0 ) {
		int _lower = _keys;
		int _mid;
		int _upper = _keys + (_klen<<1) - 2;
		while (true) {
			if ( _upper < _lower )
				break;

			_mid = _lower + (((_upper-_lower) >> 1) & ~1);
			if ( data[p] < _lexer_trans_keys[_mid] )
				_upper = _mid - 2;
			else if ( data[p] > _lexer_trans_keys[_mid+1] )
				_lower = _mid + 2;
			else {
				_trans += ((_mid - _keys)>>1);
				break _match;
			}
		}
		_trans += _klen;
	}
	} while (false);

	_trans = _lexer_indicies[_trans];
	cs = _lexer_trans_targs[_trans];

	if ( _lexer_trans_actions[_trans] != 0 ) {
		_acts = _lexer_trans_actions[_trans];
		_nacts = (int) _lexer_actions[_acts++];
		while ( _nacts-- > 0 )
	{
			switch ( _lexer_actions[_acts++] )
			{
	case 0:
// line 16 "ragel/i18n/sk.java.rl"
	{
      contentStart = p;
      currentLine = lineNumber;
      if(keyword != null) {
        startCol = p - lastNewline - (keyword.length() + 1);
      }
    }
	break;
	case 1:
// line 24 "ragel/i18n/sk.java.rl"
	{
      currentLine = lineNumber;
      startCol = p - lastNewline;
    }
	break;
	case 2:
// line 29 "ragel/i18n/sk.java.rl"
	{
      contentStart = p;
    }
	break;
	case 3:
// line 33 "ragel/i18n/sk.java.rl"
	{
      docstringContentTypeStart = p;
    }
	break;
	case 4:
// line 37 "ragel/i18n/sk.java.rl"
	{
      docstringContentTypeEnd = p;
    }
	break;
	case 5:
// line 41 "ragel/i18n/sk.java.rl"
	{
      String con = unindent(startCol, substring(data, contentStart, nextKeywordStart-1).replaceFirst("(\\r?\\n)?([\\t ])*\\Z", "").replace("\\\"\\\"\\\"", "\"\"\""));
      String conType = substring(data, docstringContentTypeStart, docstringContentTypeEnd).trim();
      listener.docString(conType, con, currentLine);
    }
	break;
	case 6:
// line 47 "ragel/i18n/sk.java.rl"
	{
      String[] nameDescription = nameAndUnindentedDescription(startCol, keywordContent(data, p, eof, nextKeywordStart, contentStart));
      listener.feature(keyword, nameDescription[0], nameDescription[1], currentLine);
      if(nextKeywordStart != -1) p = nextKeywordStart - 1;
      nextKeywordStart = -1;
    }
	break;
	case 7:
// line 54 "ragel/i18n/sk.java.rl"
	{
      String[] nameDescription = nameAndUnindentedDescription(startCol, keywordContent(data, p, eof, nextKeywordStart, contentStart));
      listener.background(keyword, nameDescription[0], nameDescription[1], currentLine);
      if(nextKeywordStart != -1) p = nextKeywordStart - 1;
      nextKeywordStart = -1;
    }
	break;
	case 8:
// line 61 "ragel/i18n/sk.java.rl"
	{
      String[] nameDescription = nameAndUnindentedDescription(startCol, keywordContent(data, p, eof, nextKeywordStart, contentStart));
      listener.scenario(keyword, nameDescription[0], nameDescription[1], currentLine);
      if(nextKeywordStart != -1) p = nextKeywordStart - 1;
      nextKeywordStart = -1;
    }
	break;
	case 9:
// line 68 "ragel/i18n/sk.java.rl"
	{
      String[] nameDescription = nameAndUnindentedDescription(startCol, keywordContent(data, p, eof, nextKeywordStart, contentStart));
      listener.scenarioOutline(keyword, nameDescription[0], nameDescription[1], currentLine);
      if(nextKeywordStart != -1) p = nextKeywordStart - 1;
      nextKeywordStart = -1;
    }
	break;
	case 10:
// line 75 "ragel/i18n/sk.java.rl"
	{
      String[] nameDescription = nameAndUnindentedDescription(startCol, keywordContent(data, p, eof, nextKeywordStart, contentStart));
      listener.examples(keyword, nameDescription[0], nameDescription[1], currentLine);
      if(nextKeywordStart != -1) p = nextKeywordStart - 1;
      nextKeywordStart = -1;
    }
	break;
	case 11:
// line 82 "ragel/i18n/sk.java.rl"
	{
      listener.step(keyword, substring(data, contentStart, p).trim(), currentLine);
    }
	break;
	case 12:
// line 86 "ragel/i18n/sk.java.rl"
	{
      listener.comment(substring(data, contentStart, p).trim(), lineNumber);
      keywordStart = -1;
    }
	break;
	case 13:
// line 91 "ragel/i18n/sk.java.rl"
	{
      listener.tag(substring(data, contentStart, p).trim(), currentLine);
      keywordStart = -1;
    }
	break;
	case 14:
// line 96 "ragel/i18n/sk.java.rl"
	{
      lineNumber++;
    }
	break;
	case 15:
// line 100 "ragel/i18n/sk.java.rl"
	{
      lastNewline = p + 1;
    }
	break;
	case 16:
// line 104 "ragel/i18n/sk.java.rl"
	{
      if(keywordStart == -1) keywordStart = p;
    }
	break;
	case 17:
// line 108 "ragel/i18n/sk.java.rl"
	{
      keyword = substring(data, keywordStart, p).replaceFirst(":$","");
      keywordStart = -1;
    }
	break;
	case 18:
// line 113 "ragel/i18n/sk.java.rl"
	{
      nextKeywordStart = p;
    }
	break;
	case 19:
// line 117 "ragel/i18n/sk.java.rl"
	{
      p = p - 1;
      currentRow = new ArrayList();
      currentLine = lineNumber;
    }
	break;
	case 20:
// line 123 "ragel/i18n/sk.java.rl"
	{
      contentStart = p;
    }
	break;
	case 21:
// line 127 "ragel/i18n/sk.java.rl"
	{
      String con = substring(data, contentStart, p).trim();
      currentRow.add(con
        .replace("\\|", "|")
        .replace("\\n", "\n")
        .replace("\\\\", "\\")
      );
    }
	break;
	case 22:
// line 136 "ragel/i18n/sk.java.rl"
	{
      listener.row(currentRow, currentLine);
    }
	break;
	case 23:
// line 140 "ragel/i18n/sk.java.rl"
	{
      if(cs < lexer_first_final) {
        String content = currentLineContent(data, lastNewline);
        throw new LexingError("Lexing error on line " + lineNumber + ": '" + content + "'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.");
      } else {
        listener.eof();
      }
    }
	break;
// line 1082 "java/src/main/java/gherkin/lexer/Sk.java"
			}
		}
	}

case 2:
	if ( cs == 0 ) {
		_goto_targ = 5;
		continue _goto;
	}
	if ( ++p != pe ) {
		_goto_targ = 1;
		continue _goto;
	}
case 4:
	if ( p == eof )
	{
	int __acts = _lexer_eof_actions[cs];
	int __nacts = (int) _lexer_actions[__acts++];
	while ( __nacts-- > 0 ) {
		switch ( _lexer_actions[__acts++] ) {
	case 23:
// line 140 "ragel/i18n/sk.java.rl"
	{
      if(cs < lexer_first_final) {
        String content = currentLineContent(data, lastNewline);
        throw new LexingError("Lexing error on line " + lineNumber + ": '" + content + "'. See http://wiki.github.com/cucumber/gherkin/lexingerror for more information.");
      } else {
        listener.eof();
      }
    }
	break;
// line 1114 "java/src/main/java/gherkin/lexer/Sk.java"
		}
	}
	}

case 5:
	}
	break; }
	}

// line 186 "ragel/i18n/sk.java.rl"
  }

  private String keywordContent(byte[] data, int p, int eof, int nextKeywordStart, int contentStart) {
    int endPoint = (nextKeywordStart == -1 || (p == eof)) ? p : nextKeywordStart;
    return substring(data, contentStart, endPoint);
  }

  private String[] nameAndUnindentedDescription(int startCol, String text) {
    String[] lines = text.split("\n");
    String name = lines.length > 0 ? lines[0].trim() : "";
    StringBuffer description = new StringBuffer();
    for(int i = 1; i < lines.length; i++) {
      description.append(lines[i]);
      description.append("\n");
    }
    return new String[]{name, unindent(startCol+2, description.toString()).replaceAll("\\s+$", "")};
  }

  private String unindent(int startCol, String text) {
    return Pattern.compile("^[\t ]{0," + startCol + "}", Pattern.MULTILINE).matcher(text).replaceAll("");
  }

  private String currentLineContent(byte[] data, int lastNewline) {
    return substring(data, lastNewline, data.length).trim();
  }

  private String substring(byte[] data, int start, int end) {
    try {
      return new String(data, start, end-start, "utf-8");
    } catch(java.io.UnsupportedEncodingException e) {
      throw new RuntimeException("Internal error", e);
    }
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy