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

gherkin.lexer.Pl Maven / Gradle / Ivy

There is a newer version: 2.12.2
Show newest version

// line 1 "ragel/i18n/pl.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 Pl implements Lexer {
  
// line 150 "ragel/i18n/pl.java.rl"


  private final Listener listener;

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

  
// line 26 "java/src/main/java/gherkin/lexer/Pl.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,   23,   24,   25,   47,   48,   49,   51,   53,   58,   63,
	   68,   73,   77,   81,   83,   84,   85,   86,   87,   88,   89,   90,
	   91,   92,   93,   94,   95,   96,   97,   98,   99,  101,  103,  108,
	  115,  120,  122,  123,  124,  125,  126,  127,  128,  129,  130,  143,
	  145,  147,  149,  151,  153,  155,  157,  159,  161,  163,  165,  167,
	  169,  171,  173,  175,  177,  179,  181,  183,  205,  206,  207,  208,
	  209,  210,  211,  212,  213,  214,  215,  217,  218,  219,  220,  221,
	  222,  223,  224,  225,  226,  227,  228,  229,  230,  232,  233,  234,
	  235,  236,  237,  238,  239,  240,  241,  242,  243,  244,  245,  246,
	  247,  248,  249,  250,  251,  252,  253,  254,  255,  256,  257,  258,
	  268,  270,  272,  274,  276,  278,  280,  282,  284,  286,  288,  290,
	  292,  294,  296,  298,  300,  302,  304,  306,  308,  310,  312,  314,
	  316,  318,  320,  322,  324,  326,  328,  330,  332,  334,  336,  338,
	  340,  342,  344,  346,  348,  350,  352,  353,  354,  355,  356,  357,
	  358,  359,  360,  361,  362,  363,  383,  385,  387,  389,  391,  393,
	  395,  397,  399,  401,  403,  405,  407,  409,  411,  413,  416,  418,
	  420,  422,  424,  426,  428,  430,  432,  434,  436,  438,  440,  442,
	  444,  446,  448,  451,  453,  455,  457,  459,  461,  463,  465,  467,
	  469,  471,  473,  475,  477,  479,  481,  483,  485,  487,  489,  491,
	  493,  495,  497,  499,  501,  503,  505,  507,  509,  512,  514,  516,
	  518,  520,  522,  524,  526,  528,  530,  532,  534,  536,  538,  540,
	  542,  544,  546,  548,  550,  552,  554,  556,  558,  560,  563,  565,
	  567,  569,  571,  573,  575,  577,  579,  581,  583,  585,  587,  589,
	  592,  594,  596,  598,  600,  602,  604,  606,  608,  610,  612,  614,
	  615,  616,  617,  618,  619,  620,  621,  622,  623,  624,  625,  626,
	  627,  628,  629,  630,  631,  632,  633,  634,  654,  656,  658,  660,
	  662,  664,  666,  668,  670,  672,  674,  676,  678,  680,  682,  684,
	  687,  689,  691,  693,  695,  697,  699,  701,  703,  705,  707,  709,
	  711,  713,  715,  717,  719,  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,  801,  803,  805,  807,
	  809,  811,  813,  815,  817,  819,  821,  823,  825,  827,  829,  831,
	  833,  835,  837,  839,  840,  841,  842,  843,  844,  845,  846,  847,
	  848,  849,  850,  851,  852,  854,  855,  856,  857,  858,  859,  860,
	  861,  862,  863,  864,  865,  885,  887,  889,  891,  893,  895,  897,
	  899,  901,  903,  905,  907,  909,  911,  913,  915,  918,  920,  922,
	  924,  926,  928,  930,  932,  934,  936,  938,  940,  942,  944,  946,
	  948,  950,  953,  955,  957,  959,  961,  963,  965,  967,  969,  971,
	  973,  975,  977,  979,  981,  983,  985,  987,  989,  991,  993,  995,
	  997,  999, 1001, 1003, 1005, 1007, 1009, 1011, 1014, 1016, 1018, 1020,
	 1022, 1024, 1026, 1028, 1030, 1032, 1034, 1036, 1038, 1040, 1042, 1044,
	 1046, 1048, 1050, 1052, 1054, 1056, 1058, 1060, 1062, 1065, 1067, 1069,
	 1071, 1073, 1075, 1077, 1079, 1081, 1083, 1085, 1087, 1089, 1091, 1093,
	 1095, 1097, 1099, 1101, 1102, 1103, 1104, 1105, 1109, 1115, 1118, 1120,
	 1126, 1148, 1150, 1152, 1154, 1156, 1158, 1160, 1163, 1165, 1167, 1169,
	 1171, 1173, 1175, 1177, 1179, 1181, 1183, 1185, 1187, 1189, 1191, 1193,
	 1195, 1197, 1199, 1201, 1203, 1205, 1207, 1209, 1212, 1214, 1216, 1218,
	 1220, 1222, 1224, 1226, 1228, 1230, 1232, 1234, 1236, 1238, 1240, 1242,
	 1244, 1246, 1248, 1250, 1252, 1254, 1256, 1258, 1260, 1262, 1264, 1266,
	 1268, 1270, 1272, 1274, 1276, 1278, 1280, 1282, 1284, 1286, 1288, 1290,
	 1292, 1294, 1296, 1298, 1300, 1302, 1304
	};
}

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,   71,   73,
	   74,   75,   77,   79,   80,   83,   87,   90,  124,    9,   13,  -69,
	  -65,   10,   32,   34,   35,   37,   42,   64,   65,   70,   71,   73,
	   74,   75,   77,   79,   80,   83,   87,   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,
	  108,  115,  101,  112,  101,  107,  116,   58,   10,   10,   10,   32,
	   35,   37,   64,   65,   70,   80,   83,   87,   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,  115,   10,  112,   10,  101,   10,  107,   10,
	  116,   10,   58,   10,   32,   34,   35,   37,   42,   64,   65,   70,
	   71,   73,   74,   75,   77,   79,   80,   83,   87,   90,  124,    9,
	   13,  117,  110,  107,   99,  106,   97,  100,  121,  101,  -59, -101,
	  -68,  108,  105,  101,  105,  101,   97,  106,  -60, -123,   99,  114,
	   97,  122,  111,  114,  116,  114,  122,  101,   98,   97,   32,   98,
	  105,  122,  110,  101,  115,  111,  119,  122,  121,  107,  -59, -126,
	   97,  100,  121,   58,   10,   10,   10,   32,   35,   65,   70,   80,
	   87,  124,    9,   13,   10,  115,   10,  112,   10,  101,   10,  107,
	   10,  116,   10,   58,   10,  117,   10,  110,   10,  107,   10,   99,
	   10,  106,   10,   97,   10,  111,   10,  116,   10,  114,   10,  122,
	   10,  101,   10,   98,   10,   97,   10,   32,   10,   98,   10,  105,
	   10,  122,   10,  110,   10,  101,   10,  115,   10,  111,   10,  119,
	  -59,   10, -126,   10,   10,   97,  -59,   10, -101,   10,   10,   99,
	   10,  105,   10,  119,   10,  111,  -59,   10, -101,   10,  -60,   10,
	 -121,   10,   99,  122,  101,  110,   97,  114,  105,  117,  115,  122,
	   58,   10,   10,   10,   32,   35,   37,   42,   64,   65,   70,   71,
	   73,   74,   75,   77,   79,   80,   83,   87,   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,  108,  115,   10,  101,   10,  112,
	   10,  101,   10,  107,   10,  116,   10,   58,   10,  117,   10,  110,
	   10,  107,   10,   99,   10,  106,   10,   97,   10,  100,   10,  121,
	   10,  101,  -59,   10, -101,  -68,   10,   10,  108,   10,  105,   10,
	  101,   10,  105,   10,  101,   10,   97,   10,  106,  -60,   10, -123,
	   10,   10,   99,   10,  114,   10,   97,   10,  122,   10,  111,   10,
	  116,   10,  114,   10,  122,   10,  101,   10,   98,   10,   97,   10,
	   32,   10,   98,   10,  105,   10,  122,   10,  110,   10,  101,   10,
	  115,   10,  111,   10,  119,   10,   99,  122,   10,  101,   10,  110,
	   10,   97,   10,  114,   10,  105,   10,  117,   10,  115,   10,  122,
	   10,   97,   10,   98,   10,  108,   10,  111,   10,  110,   10,   32,
	   10,  115,   10,   99,   10,  101,   10,  110,   10,   97,   10,  114,
	   10,  105,   10,  117,   10,  115,   10,  122,  -59,   10,  116, -126,
	   10,   10,   97,  -59,   10, -101,   10,   10,   99,   10,  105,   10,
	  119,   10,  111,  -59,   10, -101,   10,  -60,   10, -121,   10,   10,
	   97,  -59,   10,  107, -126,   10,   10,  111,  -59,   10,  -68,   10,
	   10,  101,   10,  110,   10,  105,  -59,   10, -126,   10,   10,   97,
	   10,  100,   97,   98,  108,  111,  110,   32,  115,   99,  101,  110,
	   97,  114,  105,  117,  115,  122,   97,   58,   10,   10,   10,   32,
	   35,   37,   42,   64,   65,   70,   71,   73,   74,   75,   77,   79,
	   80,   83,   87,   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,  108,  115,   10,  101,   10,  112,   10,  101,   10,  107,   10,
	  116,   10,   58,   10,  117,   10,  110,   10,  107,   10,   99,   10,
	  106,   10,   97,   10,  100,   10,  121,   10,  101,  -59,   10, -101,
	  -68,   10,   10,  108,   10,  105,   10,  101,   10,  105,   10,  101,
	   10,   97,   10,  106,  -60,   10, -123,   10,   10,   99,   10,  114,
	   10,   97,   10,  122,   10,  111,   10,  116,   10,  114,   10,  122,
	   10,  101,   10,   98,   10,   97,   10,   32,   10,   98,   10,  105,
	   10,  122,   10,  110,   10,  101,   10,  115,   10,  111,   10,  119,
	   10,   99,   10,  101,   10,  110,   10,   97,   10,  114,   10,  105,
	   10,  117,   10,  115,   10,  122,  -59,   10,  116, -126,   10,   10,
	   97,  -59,   10, -101,   10,   10,   99,   10,  105,   10,  119,   10,
	  111,  -59,   10, -101,   10,  -60,   10, -121,   10,   10,   97,   10,
	  107,  -59,   10, -126,   10,   10,   97,   10,  100,  -59,  116, -126,
	   97,  -59, -101,   99,  105,  119,  111,  -59, -101,  -60, -121,   97,
	  -59,  107, -126,  111,  -59,  -68,  101,  110,  105,   97,   58,   10,
	   10,   10,   32,   35,   37,   42,   64,   65,   70,   71,   73,   74,
	   75,   77,   79,   80,   83,   87,   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,  108,  115,   10,  101,   10,  112,   10,  101,
	   10,  107,   10,  116,   10,   58,   10,  117,   10,  110,   10,  107,
	   10,   99,   10,  106,   10,   97,   10,  100,   10,  121,   10,  101,
	  -59,   10, -101,  -68,   10,   10,  108,   10,  105,   10,  101,   10,
	  105,   10,  101,   10,   97,   10,  106,  -60,   10, -123,   10,   10,
	   99,   10,  114,   10,   97,   10,  122,   10,  111,   10,  116,   10,
	  114,   10,  122,   10,  101,   10,   98,   10,   97,   10,   32,   10,
	   98,   10,  105,   10,  122,   10,  110,   10,  101,   10,  115,   10,
	  111,   10,  119,   10,   99,  122,   10,  101,   10,  110,   10,   97,
	   10,  114,   10,  105,   10,  117,   10,  115,   10,  122,   10,   97,
	   10,   98,   10,  108,   10,  111,   10,  110,   10,   32,   10,  115,
	   10,   99,   10,  101,   10,  110,   10,   97,   10,  114,   10,  105,
	   10,  117,   10,  115,   10,  122,  -59,   10,  116, -126,   10,   10,
	   97,  -59,   10, -101,   10,   10,   99,   10,  105,   10,  119,   10,
	  111,  -59,   10, -101,   10,  -60,   10, -121,   10,   10,   97,   10,
	  107,  -59,   10, -126,   10,   10,   97,   10,  100,  -59, -126,   97,
	  100,   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,   71,   73,   74,   75,   77,
	   79,   80,   83,   87,   90,  124,    9,   13,   10,  117,   10,  110,
	   10,  107,   10,   99,   10,  106,   10,   97,   10,  111,  114,   10,
	  116,   10,  114,   10,  122,   10,  101,   10,   98,   10,   97,   10,
	   32,   10,   98,   10,  105,   10,  122,   10,  110,   10,  101,   10,
	  115,   10,  111,   10,  119,   10,  122,   10,  121,   10,  107,  -59,
	   10, -126,   10,   10,   97,   10,  100,   10,  121,   10,   99,  122,
	   10,  101,   10,  110,   10,   97,   10,  114,   10,  105,   10,  117,
	   10,  115,   10,  122,   10,   97,   10,   98,   10,  108,   10,  111,
	   10,  110,   10,   32,   10,  115,   10,   99,   10,  101,   10,  110,
	   10,   97,   10,  114,   10,  105,   10,  117,   10,  115,   10,  122,
	  -59,   10, -126,   10,   10,   97,  -59,   10, -101,   10,   10,   99,
	   10,  105,   10,  119,   10,  111,  -59,   10, -101,   10,  -60,   10,
	 -121,   10,   10,   97,  -59,   10, -126,   10,   10,  111,  -59,   10,
	  -68,   10,   10,  101,   10,  110,   10,  105,    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,   21,    1,    1,   20,    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,    2,    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,   20,    1,    1,    1,    1,
	    1,    1,    1,    1,    1,    1,    2,    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,
	    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    8,
	    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,   18,    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,
	    2,    2,    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,    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,    3,    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,    1,
	    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
	    1,    1,    1,    1,    1,    1,    1,   18,    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,    2,    2,    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,    2,    2,    2,    2,    2,    3,    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,    2,    1,    1,    1,    1,    1,    1,    1,
	    1,    1,    1,    1,   18,    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,    2,
	    2,    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,    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,    3,    2,    2,    2,
	    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
	    2,    2,    2,    1,    1,    1,    1,    2,    4,    3,    2,    4,
	   20,    2,    2,    2,    2,    2,    2,    3,    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,    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,    1,    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,    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,    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,    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,    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,    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
	};
}

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,   23,   25,   27,   49,   51,   53,   56,   59,   64,   69,
	   74,   79,   83,   87,   90,   92,   94,   96,   98,  100,  102,  104,
	  106,  108,  110,  112,  114,  116,  118,  120,  122,  125,  128,  133,
	  140,  145,  148,  150,  152,  154,  156,  158,  160,  162,  164,  177,
	  180,  183,  186,  189,  192,  195,  198,  201,  204,  207,  210,  213,
	  216,  219,  222,  225,  228,  231,  234,  237,  259,  261,  263,  265,
	  267,  269,  271,  273,  275,  277,  279,  282,  284,  286,  288,  290,
	  292,  294,  296,  298,  300,  302,  304,  306,  308,  311,  313,  315,
	  317,  319,  321,  323,  325,  327,  329,  331,  333,  335,  337,  339,
	  341,  343,  345,  347,  349,  351,  353,  355,  357,  359,  361,  363,
	  373,  376,  379,  382,  385,  388,  391,  394,  397,  400,  403,  406,
	  409,  412,  415,  418,  421,  424,  427,  430,  433,  436,  439,  442,
	  445,  448,  451,  454,  457,  460,  463,  466,  469,  472,  475,  478,
	  481,  484,  487,  490,  493,  496,  499,  501,  503,  505,  507,  509,
	  511,  513,  515,  517,  519,  521,  541,  544,  547,  550,  553,  556,
	  559,  562,  565,  568,  571,  574,  577,  580,  583,  586,  590,  593,
	  596,  599,  602,  605,  608,  611,  614,  617,  620,  623,  626,  629,
	  632,  635,  638,  642,  645,  648,  651,  654,  657,  660,  663,  666,
	  669,  672,  675,  678,  681,  684,  687,  690,  693,  696,  699,  702,
	  705,  708,  711,  714,  717,  720,  723,  726,  729,  733,  736,  739,
	  742,  745,  748,  751,  754,  757,  760,  763,  766,  769,  772,  775,
	  778,  781,  784,  787,  790,  793,  796,  799,  802,  805,  809,  812,
	  815,  818,  821,  824,  827,  830,  833,  836,  839,  842,  845,  848,
	  852,  855,  858,  861,  864,  867,  870,  873,  876,  879,  882,  885,
	  887,  889,  891,  893,  895,  897,  899,  901,  903,  905,  907,  909,
	  911,  913,  915,  917,  919,  921,  923,  925,  945,  948,  951,  954,
	  957,  960,  963,  966,  969,  972,  975,  978,  981,  984,  987,  990,
	  994,  997, 1000, 1003, 1006, 1009, 1012, 1015, 1018, 1021, 1024, 1027,
	 1030, 1033, 1036, 1039, 1042, 1046, 1049, 1052, 1055, 1058, 1061, 1064,
	 1067, 1070, 1073, 1076, 1079, 1082, 1085, 1088, 1091, 1094, 1097, 1100,
	 1103, 1106, 1109, 1112, 1115, 1118, 1121, 1124, 1127, 1130, 1133, 1136,
	 1139, 1142, 1145, 1148, 1151, 1154, 1157, 1160, 1164, 1167, 1170, 1173,
	 1176, 1179, 1182, 1185, 1188, 1191, 1194, 1197, 1200, 1203, 1206, 1209,
	 1212, 1215, 1218, 1221, 1223, 1225, 1227, 1229, 1231, 1233, 1235, 1237,
	 1239, 1241, 1243, 1245, 1247, 1250, 1252, 1254, 1256, 1258, 1260, 1262,
	 1264, 1266, 1268, 1270, 1272, 1292, 1295, 1298, 1301, 1304, 1307, 1310,
	 1313, 1316, 1319, 1322, 1325, 1328, 1331, 1334, 1337, 1341, 1344, 1347,
	 1350, 1353, 1356, 1359, 1362, 1365, 1368, 1371, 1374, 1377, 1380, 1383,
	 1386, 1389, 1393, 1396, 1399, 1402, 1405, 1408, 1411, 1414, 1417, 1420,
	 1423, 1426, 1429, 1432, 1435, 1438, 1441, 1444, 1447, 1450, 1453, 1456,
	 1459, 1462, 1465, 1468, 1471, 1474, 1477, 1480, 1484, 1487, 1490, 1493,
	 1496, 1499, 1502, 1505, 1508, 1511, 1514, 1517, 1520, 1523, 1526, 1529,
	 1532, 1535, 1538, 1541, 1544, 1547, 1550, 1553, 1556, 1560, 1563, 1566,
	 1569, 1572, 1575, 1578, 1581, 1584, 1587, 1590, 1593, 1596, 1599, 1602,
	 1605, 1608, 1611, 1614, 1616, 1618, 1620, 1622, 1626, 1632, 1636, 1639,
	 1645, 1667, 1670, 1673, 1676, 1679, 1682, 1685, 1689, 1692, 1695, 1698,
	 1701, 1704, 1707, 1710, 1713, 1716, 1719, 1722, 1725, 1728, 1731, 1734,
	 1737, 1740, 1743, 1746, 1749, 1752, 1755, 1758, 1762, 1765, 1768, 1771,
	 1774, 1777, 1780, 1783, 1786, 1789, 1792, 1795, 1798, 1801, 1804, 1807,
	 1810, 1813, 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
	};
}

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

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,   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 = 618;

static final int lexer_en_main = 1;


// line 159 "ragel/i18n/pl.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 813 "java/src/main/java/gherkin/lexer/Pl.java"
	{
	cs = lexer_start;
	}

// line 185 "ragel/i18n/pl.java.rl"
    
// line 820 "java/src/main/java/gherkin/lexer/Pl.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/pl.java.rl"
	{
      contentStart = p;
      currentLine = lineNumber;
      if(keyword != null) {
        startCol = p - lastNewline - (keyword.length() + 1);
      }
    }
	break;
	case 1:
// line 24 "ragel/i18n/pl.java.rl"
	{
      currentLine = lineNumber;
      startCol = p - lastNewline;
    }
	break;
	case 2:
// line 29 "ragel/i18n/pl.java.rl"
	{
      contentStart = p;
    }
	break;
	case 3:
// line 33 "ragel/i18n/pl.java.rl"
	{
      docstringContentTypeStart = p;
    }
	break;
	case 4:
// line 37 "ragel/i18n/pl.java.rl"
	{
      docstringContentTypeEnd = p;
    }
	break;
	case 5:
// line 41 "ragel/i18n/pl.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/pl.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/pl.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/pl.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/pl.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/pl.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/pl.java.rl"
	{
      listener.step(keyword, substring(data, contentStart, p).trim(), currentLine);
    }
	break;
	case 12:
// line 86 "ragel/i18n/pl.java.rl"
	{
      listener.comment(substring(data, contentStart, p).trim(), lineNumber);
      keywordStart = -1;
    }
	break;
	case 13:
// line 91 "ragel/i18n/pl.java.rl"
	{
      listener.tag(substring(data, contentStart, p).trim(), currentLine);
      keywordStart = -1;
    }
	break;
	case 14:
// line 96 "ragel/i18n/pl.java.rl"
	{
      lineNumber++;
    }
	break;
	case 15:
// line 100 "ragel/i18n/pl.java.rl"
	{
      lastNewline = p + 1;
    }
	break;
	case 16:
// line 104 "ragel/i18n/pl.java.rl"
	{
      if(keywordStart == -1) keywordStart = p;
    }
	break;
	case 17:
// line 108 "ragel/i18n/pl.java.rl"
	{
      keyword = substring(data, keywordStart, p).replaceFirst(":$","");
      keywordStart = -1;
    }
	break;
	case 18:
// line 113 "ragel/i18n/pl.java.rl"
	{
      nextKeywordStart = p;
    }
	break;
	case 19:
// line 117 "ragel/i18n/pl.java.rl"
	{
      p = p - 1;
      currentRow = new ArrayList();
      currentLine = lineNumber;
    }
	break;
	case 20:
// line 123 "ragel/i18n/pl.java.rl"
	{
      contentStart = p;
    }
	break;
	case 21:
// line 127 "ragel/i18n/pl.java.rl"
	{
      String con = substring(data, contentStart, p).trim();
      currentRow.add(con
        .replace("\\|", "|")
        .replace("\\n", "\n")
        .replace("\\\\", "\\")
      );
    }
	break;
	case 22:
// line 136 "ragel/i18n/pl.java.rl"
	{
      listener.row(currentRow, currentLine);
    }
	break;
	case 23:
// line 140 "ragel/i18n/pl.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 1081 "java/src/main/java/gherkin/lexer/Pl.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/pl.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 1113 "java/src/main/java/gherkin/lexer/Pl.java"
		}
	}
	}

case 5:
	}
	break; }
	}

// line 186 "ragel/i18n/pl.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