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,   78,   82,   86,   88,   89,   90,   91,   92,   93,   94,
	   95,   96,   97,   98,   99,  100,  101,  102,  103,  104,  106,  108,
	  113,  120,  125,  127,  128,  129,  130,  131,  132,  133,  134,  135,
	  148,  150,  152,  154,  156,  158,  160,  162,  164,  166,  168,  170,
	  172,  174,  176,  178,  180,  182,  184,  186,  188,  210,  211,  212,
	  213,  214,  215,  216,  217,  218,  219,  220,  222,  223,  224,  225,
	  226,  227,  228,  229,  230,  231,  232,  233,  234,  235,  237,  238,
	  239,  240,  241,  242,  243,  244,  245,  246,  247,  248,  249,  250,
	  251,  252,  253,  254,  255,  256,  257,  258,  259,  260,  261,  262,
	  263,  273,  275,  277,  279,  281,  283,  285,  287,  289,  291,  293,
	  295,  297,  299,  301,  303,  305,  307,  309,  311,  313,  315,  317,
	  319,  321,  323,  325,  327,  329,  331,  333,  335,  337,  339,  341,
	  343,  345,  347,  349,  351,  353,  355,  357,  358,  359,  360,  361,
	  362,  363,  364,  365,  366,  367,  368,  388,  390,  392,  394,  396,
	  398,  400,  402,  404,  406,  408,  410,  412,  414,  416,  418,  421,
	  423,  425,  427,  429,  431,  433,  435,  437,  439,  441,  443,  445,
	  447,  449,  451,  453,  456,  458,  460,  462,  464,  466,  468,  470,
	  472,  474,  476,  478,  480,  482,  484,  486,  488,  490,  492,  494,
	  496,  498,  500,  502,  504,  506,  508,  510,  512,  514,  517,  519,
	  521,  523,  525,  527,  529,  531,  533,  535,  537,  539,  541,  543,
	  545,  547,  549,  551,  553,  555,  557,  559,  561,  563,  565,  568,
	  570,  572,  574,  576,  578,  580,  582,  584,  586,  588,  590,  592,
	  594,  597,  599,  601,  603,  605,  607,  609,  611,  613,  615,  617,
	  619,  620,  621,  622,  623,  624,  625,  626,  627,  628,  629,  630,
	  631,  632,  633,  634,  635,  636,  637,  638,  639,  659,  661,  663,
	  665,  667,  669,  671,  673,  675,  677,  679,  681,  683,  685,  687,
	  689,  692,  694,  696,  698,  700,  702,  704,  706,  708,  710,  712,
	  714,  716,  718,  720,  722,  724,  727,  729,  731,  733,  735,  737,
	  739,  741,  743,  745,  747,  749,  751,  753,  755,  757,  759,  761,
	  763,  765,  767,  769,  771,  773,  775,  777,  779,  781,  783,  785,
	  787,  789,  791,  793,  795,  797,  799,  801,  803,  806,  808,  810,
	  812,  814,  816,  818,  820,  822,  824,  826,  828,  830,  832,  834,
	  836,  838,  840,  842,  844,  845,  846,  847,  848,  849,  850,  851,
	  852,  853,  854,  855,  856,  857,  859,  860,  861,  862,  863,  864,
	  865,  866,  867,  868,  869,  870,  890,  892,  894,  896,  898,  900,
	  902,  904,  906,  908,  910,  912,  914,  916,  918,  920,  923,  925,
	  927,  929,  931,  933,  935,  937,  939,  941,  943,  945,  947,  949,
	  951,  953,  955,  958,  960,  962,  964,  966,  968,  970,  972,  974,
	  976,  978,  980,  982,  984,  986,  988,  990,  992,  994,  996,  998,
	 1000, 1002, 1004, 1006, 1008, 1010, 1012, 1014, 1016, 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, 1070, 1072,
	 1074, 1076, 1078, 1080, 1082, 1084, 1086, 1088, 1090, 1092, 1094, 1096,
	 1098, 1100, 1102, 1104, 1106, 1107, 1108, 1109, 1110, 1114, 1120, 1123,
	 1125, 1131, 1153, 1155, 1157, 1159, 1161, 1163, 1165, 1168, 1170, 1172,
	 1174, 1176, 1178, 1180, 1182, 1184, 1186, 1188, 1190, 1192, 1194, 1196,
	 1198, 1200, 1202, 1204, 1206, 1208, 1210, 1212, 1214, 1217, 1219, 1221,
	 1223, 1225, 1227, 1229, 1231, 1233, 1235, 1237, 1239, 1241, 1243, 1245,
	 1247, 1249, 1251, 1253, 1255, 1257, 1259, 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
	};
}

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,   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,    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,    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,   84,   88,   92,   95,   97,   99,  101,  103,  105,  107,
	  109,  111,  113,  115,  117,  119,  121,  123,  125,  127,  130,  133,
	  138,  145,  150,  153,  155,  157,  159,  161,  163,  165,  167,  169,
	  182,  185,  188,  191,  194,  197,  200,  203,  206,  209,  212,  215,
	  218,  221,  224,  227,  230,  233,  236,  239,  242,  264,  266,  268,
	  270,  272,  274,  276,  278,  280,  282,  284,  287,  289,  291,  293,
	  295,  297,  299,  301,  303,  305,  307,  309,  311,  313,  316,  318,
	  320,  322,  324,  326,  328,  330,  332,  334,  336,  338,  340,  342,
	  344,  346,  348,  350,  352,  354,  356,  358,  360,  362,  364,  366,
	  368,  378,  381,  384,  387,  390,  393,  396,  399,  402,  405,  408,
	  411,  414,  417,  420,  423,  426,  429,  432,  435,  438,  441,  444,
	  447,  450,  453,  456,  459,  462,  465,  468,  471,  474,  477,  480,
	  483,  486,  489,  492,  495,  498,  501,  504,  506,  508,  510,  512,
	  514,  516,  518,  520,  522,  524,  526,  546,  549,  552,  555,  558,
	  561,  564,  567,  570,  573,  576,  579,  582,  585,  588,  591,  595,
	  598,  601,  604,  607,  610,  613,  616,  619,  622,  625,  628,  631,
	  634,  637,  640,  643,  647,  650,  653,  656,  659,  662,  665,  668,
	  671,  674,  677,  680,  683,  686,  689,  692,  695,  698,  701,  704,
	  707,  710,  713,  716,  719,  722,  725,  728,  731,  734,  738,  741,
	  744,  747,  750,  753,  756,  759,  762,  765,  768,  771,  774,  777,
	  780,  783,  786,  789,  792,  795,  798,  801,  804,  807,  810,  814,
	  817,  820,  823,  826,  829,  832,  835,  838,  841,  844,  847,  850,
	  853,  857,  860,  863,  866,  869,  872,  875,  878,  881,  884,  887,
	  890,  892,  894,  896,  898,  900,  902,  904,  906,  908,  910,  912,
	  914,  916,  918,  920,  922,  924,  926,  928,  930,  950,  953,  956,
	  959,  962,  965,  968,  971,  974,  977,  980,  983,  986,  989,  992,
	  995,  999, 1002, 1005, 1008, 1011, 1014, 1017, 1020, 1023, 1026, 1029,
	 1032, 1035, 1038, 1041, 1044, 1047, 1051, 1054, 1057, 1060, 1063, 1066,
	 1069, 1072, 1075, 1078, 1081, 1084, 1087, 1090, 1093, 1096, 1099, 1102,
	 1105, 1108, 1111, 1114, 1117, 1120, 1123, 1126, 1129, 1132, 1135, 1138,
	 1141, 1144, 1147, 1150, 1153, 1156, 1159, 1162, 1165, 1169, 1172, 1175,
	 1178, 1181, 1184, 1187, 1190, 1193, 1196, 1199, 1202, 1205, 1208, 1211,
	 1214, 1217, 1220, 1223, 1226, 1228, 1230, 1232, 1234, 1236, 1238, 1240,
	 1242, 1244, 1246, 1248, 1250, 1252, 1255, 1257, 1259, 1261, 1263, 1265,
	 1267, 1269, 1271, 1273, 1275, 1277, 1297, 1300, 1303, 1306, 1309, 1312,
	 1315, 1318, 1321, 1324, 1327, 1330, 1333, 1336, 1339, 1342, 1346, 1349,
	 1352, 1355, 1358, 1361, 1364, 1367, 1370, 1373, 1376, 1379, 1382, 1385,
	 1388, 1391, 1394, 1398, 1401, 1404, 1407, 1410, 1413, 1416, 1419, 1422,
	 1425, 1428, 1431, 1434, 1437, 1440, 1443, 1446, 1449, 1452, 1455, 1458,
	 1461, 1464, 1467, 1470, 1473, 1476, 1479, 1482, 1485, 1489, 1492, 1495,
	 1498, 1501, 1504, 1507, 1510, 1513, 1516, 1519, 1522, 1525, 1528, 1531,
	 1534, 1537, 1540, 1543, 1546, 1549, 1552, 1555, 1558, 1561, 1565, 1568,
	 1571, 1574, 1577, 1580, 1583, 1586, 1589, 1592, 1595, 1598, 1601, 1604,
	 1607, 1610, 1613, 1616, 1619, 1621, 1623, 1625, 1627, 1631, 1637, 1641,
	 1644, 1650, 1672, 1675, 1678, 1681, 1684, 1687, 1690, 1694, 1697, 1700,
	 1703, 1706, 1709, 1712, 1715, 1718, 1721, 1724, 1727, 1730, 1733, 1736,
	 1739, 1742, 1745, 1748, 1751, 1754, 1757, 1760, 1763, 1767, 1770, 1773,
	 1776, 1779, 1782, 1785, 1788, 1791, 1794, 1797, 1800, 1803, 1806, 1809,
	 1812, 1815, 1818, 1821, 1824, 1827, 1830, 1833, 1836, 1839, 1842, 1845,
	 1848, 1851, 1854, 1857, 1860, 1863, 1866, 1869, 1872, 1875, 1878, 1881,
	 1884, 1887, 1890, 1893, 1896, 1899, 1902, 1905
	};
}

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

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 814 "java/src/main/java/gherkin/lexer/Pl.java"
	{
	cs = lexer_start;
	}

// line 185 "ragel/i18n/pl.java.rl"
    
// line 821 "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 1082 "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 1114 "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