Package org.eclipse.jst.jsp.core.internal.parser.internal

Source Code of org.eclipse.jst.jsp.core.internal.parser.internal.JSPTokenizer

/* The following code was generated by JFlex 1.2.2 on 5/2/11 2:19 PM */

/*******************************************************************************
* Copyright (c) 2004, 2011 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     IBM Corporation - initial API and implementation
*     Frits Jalvingh - contributions for bug 150794
*******************************************************************************/

package org.eclipse.jst.jsp.core.internal.parser.internal;

import java.io.CharArrayReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.eclipse.jst.jsp.core.internal.Logger;
import org.eclipse.jst.jsp.core.internal.contenttype.IntStack;
import org.eclipse.jst.jsp.core.internal.regions.DOMJSPRegionContexts;
import org.eclipse.wst.sse.core.internal.ltk.parser.BlockMarker;
import org.eclipse.wst.sse.core.internal.ltk.parser.BlockTokenizer;
import org.eclipse.wst.sse.core.internal.ltk.parser.TagMarker;
import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion;
import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionList;
import org.eclipse.wst.sse.core.internal.util.Debug;
import org.eclipse.wst.sse.core.utils.StringUtils;
import org.eclipse.wst.xml.core.internal.parser.ContextRegionContainer;


/**
* This class is a scanner generated by
* <a href="http://www.informatik.tu-muenchen.de/~kleing/jflex/">JFlex</a> 1.2.2
* on 5/2/11 2:19 PM from the specification file
* <tt>file:/C:/dev/workspaces/indigo/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/HTMLTokenizer/devel/JSPTokenizer.jflex</tt>
*/
public class JSPTokenizer implements BlockTokenizer, DOMJSPRegionContexts {

  /** this character denotes the end of file */
  final public static int YYEOF = -1;

  /** lexical states */
  final public static int ST_JSP_VBL_DQUOTES = 52;
  final public static int ST_JSP_VBL_SQUOTES = 51;
  final public static int ST_JSP_VBL_SQUOTES_END = 53;
  final public static int ST_XML_COMMENT_END = 4;
  final public static int ST_JSP_DIRECTIVE_ATTRIBUTE_VALUE = 21;
  final public static int ST_JSP_EL_SQUOTES_END = 46;
  final public static int ST_JSP_EL_DQUOTES = 45;
  final public static int ST_JSP_EL = 43;
  final public static int ST_BLOCK_TAG_SCAN = 36;
  final public static int ST_JSP_EL_SQUOTES = 44;
  final public static int ST_DHTML_ATTRIBUTE_VALUE = 14;
  final public static int ST_XML_PI_ATTRIBUTE_NAME = 8;
  final public static int ST_DHTML_TAG_CLOSE = 15;
  final public static int ST_XML_ATTRIBUTE_VALUE_DQUOTED = 42;
  final public static int ST_DHTML_EQUALS = 13;
  final public static int ST_XML_PI_ATTRIBUTE_VALUE = 10;
  final public static int ST_XML_ATTRIBUTE_VALUE = 25;
  final public static int ST_JSP_VBL = 50;
  final public static int ST_JSP_SQUOTED_VBL = 56;
  final public static int ST_XML_ATTRIBUTE_VALUE_SQUOTED = 41;
  final public static int ST_XML_ATTRIBUTE_NAME = 23;
  final public static int ST_XML_EQUALS = 24;
  final public static int YYINITIAL = 0;
  final public static int ST_JSP_DIRECTIVE_ATTRIBUTE_NAME = 19;
  final public static int ST_JSP_CONTENT = 16;
  final public static int ST_XML_DOCTYPE_ID_SYSTEM = 31;
  final public static int ST_XML_ELEMENT_DECLARATION = 32;
  final public static int ST_XML_DECLARATION_CLOSE = 27;
  final public static int ST_JSP_DIRECTIVE_EQUALS = 20;
  final public static int ST_JSP_VBL_DQUOTES_END = 54;
  final public static int ST_JSP_DQUOTED_EL = 48;
  final public static int ST_XML_DOCTYPE_DECLARATION = 28;
  final public static int ST_CDATA_END = 2;
  final public static int ST_PI_WS = 6;
  final public static int ST_CDATA_TEXT = 1;
  final public static int ST_JSP_DIRECTIVE_NAME_WHITESPACE = 18;
  final public static int ST_XML_ELEMENT_DECLARATION_CONTENT = 33;
  final public static int ST_XML_ATTLIST_DECLARATION = 34;
  final public static int ST_JSP_EL_DQUOTES_END = 47;
  final public static int ST_JSP_SQUOTED_EL = 49;
  final public static int ST_JSP_COMMENT_END = 39;
  final public static int ST_XML_PI_EQUALS = 9;
  final public static int ST_XML_ATTLIST_DECLARATION_CONTENT = 35;
  final public static int ST_XML_DOCTYPE_ID_PUBLIC = 30;
  final public static int ST_JSP_DQUOTED_VBL = 55;
  final public static int ST_DHTML_ATTRIBUTE_NAME = 12;
  final public static int ST_ABORT_EMBEDDED = 37;
  final public static int ST_XML_DOCTYPE_EXTERNAL_ID = 29;
  final public static int ST_JSP_COMMENT = 38;
  final public static int ST_PI_CONTENT = 7;
  final public static int ST_BLOCK_TAG_INTERNAL_SCAN = 37;
  final public static int ST_PI = 5;
  final public static int ST_XML_DECLARATION = 26;
  final public static int ST_JSP_DIRECTIVE_NAME = 17;
  final public static int ST_XML_TAG_NAME = 22;
  final public static int ST_XML_PI_TAG_CLOSE = 11;
  final public static int ST_XML_COMMENT = 3;
  final public static int ST_JSP_ATTRIBUTE_VALUE = 40;

  /**
   * Translates characters to character classes
   */
  final private static String yycmap_packed =
    "\11\0\1\5\1\27\2\0\1\20\22\0\1\20\1\26\1\12\1\66"+
    "\1\15\1\23\1\13\1\14\1\25\1\25\1\25\1\25\1\25\1\7"+
    "\1\6\1\3\12\21\1\11\1\73\1\1\1\52\1\2\1\4\1\22"+
    "\1\41\1\74\1\37\1\40\1\56\1\71\1\63\1\63\1\64\1\63"+
    "\1\63\1\34\1\32\1\65\1\53\1\55\1\63\1\70\1\67\1\42"+
    "\1\72\2\63\1\30\1\54\1\63\1\36\1\17\1\24\1\0\1\10"+
    "\1\0\1\60\1\104\1\75\1\61\1\44\1\71\1\76\1\106\1\47"+
    "\1\101\1\63\1\35\1\33\1\51\1\50\1\102\1\63\1\45\1\46"+
    "\1\57\1\103\1\43\1\63\1\31\1\62\1\63\1\16\1\0\1\105"+
    "\71\0\1\100\10\0\27\77\1\0\37\77\1\0\72\77\2\0\13\77"+
    "\2\0\10\77\1\0\65\77\1\0\104\77\11\0\44\77\3\0\2\77"+
    "\4\0\36\77\70\0\131\77\22\0\7\77\16\0\2\100\56\0\106\100"+
    "\32\0\2\100\44\0\1\77\1\100\3\77\1\0\1\77\1\0\24\77"+
    "\1\0\54\77\1\0\7\77\3\0\1\77\1\0\1\77\1\0\1\77"+
    "\1\0\1\77\1\0\22\77\15\0\14\77\1\0\102\77\1\0\14\77"+
    "\1\0\44\77\1\0\4\100\11\0\65\77\2\0\2\77\2\0\2\77"+
    "\3\0\34\77\2\0\10\77\2\0\2\77\67\0\46\77\2\0\1\77"+
    "\7\0\46\77\12\0\21\100\1\0\27\100\1\0\3\100\1\0\1\100"+
    "\1\0\2\100\1\0\1\100\13\0\33\77\5\0\3\77\56\0\32\77"+
    "\5\0\1\100\12\77\10\100\15\0\12\100\6\0\1\100\107\77\2\0"+
    "\5\77\1\0\17\77\1\0\4\77\1\0\1\77\17\100\2\77\2\100"+
    "\1\0\4\100\2\0\12\100\u0207\0\3\100\1\0\65\77\2\0\1\100"+
    "\1\77\20\100\3\0\4\100\3\0\12\77\2\100\2\0\12\100\21\0"+
    "\3\100\1\0\10\77\2\0\2\77\2\0\26\77\1\0\7\77\1\0"+
    "\1\77\3\0\4\77\2\0\1\100\1\0\7\100\2\0\2\100\2\0"+
    "\3\100\11\0\1\100\4\0\2\77\1\0\3\77\2\100\2\0\12\100"+
    "\2\77\20\0\1\100\2\0\6\77\4\0\2\77\2\0\26\77\1\0"+
    "\7\77\1\0\2\77\1\0\2\77\1\0\2\77\2\0\1\100\1\0"+
    "\5\100\4\0\2\100\2\0\3\100\13\0\4\77\1\0\1\77\7\0"+
    "\12\100\2\100\3\77\14\0\3\100\1\0\7\77\1\0\1\77\1\0"+
    "\3\77\1\0\26\77\1\0\7\77\1\0\2\77\1\0\5\77\2\0"+
    "\1\100\1\77\10\100\1\0\3\100\1\0\3\100\22\0\1\77\5\0"+
    "\12\100\21\0\3\100\1\0\10\77\2\0\2\77\2\0\26\77\1\0"+
    "\7\77\1\0\2\77\2\0\4\77\2\0\1\100\1\77\6\100\3\0"+
    "\2\100\2\0\3\100\10\0\2\100\4\0\2\77\1\0\3\77\4\0"+
    "\12\100\22\0\2\100\1\0\6\77\3\0\3\77\1\0\4\77\3\0"+
    "\2\77\1\0\1\77\1\0\2\77\3\0\2\77\3\0\3\77\3\0"+
    "\10\77\1\0\3\77\4\0\5\100\3\0\3\100\1\0\4\100\11\0"+
    "\1\100\17\0\11\100\21\0\3\100\1\0\10\77\1\0\3\77\1\0"+
    "\27\77\1\0\12\77\1\0\5\77\4\0\7\100\1\0\3\100\1\0"+
    "\4\100\7\0\2\100\11\0\2\77\4\0\12\100\22\0\2\100\1\0"+
    "\10\77\1\0\3\77\1\0\27\77\1\0\12\77\1\0\5\77\4\0"+
    "\7\100\1\0\3\100\1\0\4\100\7\0\2\100\7\0\1\77\1\0"+
    "\2\77\4\0\12\100\22\0\2\100\1\0\10\77\1\0\3\77\1\0"+
    "\27\77\1\0\20\77\4\0\6\100\2\0\3\100\1\0\4\100\11\0"+
    "\1\100\10\0\2\77\4\0\12\100\221\0\56\77\1\0\1\77\1\100"+
    "\2\77\7\100\5\0\6\77\1\100\10\100\1\0\12\100\47\0\2\77"+
    "\1\0\1\77\2\0\2\77\1\0\1\77\2\0\1\77\6\0\4\77"+
    "\1\0\7\77\1\0\3\77\1\0\1\77\1\0\1\77\2\0\2\77"+
    "\1\0\2\77\1\0\1\77\1\100\2\77\6\100\1\0\2\100\1\77"+
    "\2\0\5\77\1\0\1\100\1\0\6\100\2\0\12\100\76\0\2\100"+
    "\6\0\12\100\13\0\1\100\1\0\1\100\1\0\1\100\4\0\2\100"+
    "\10\77\1\0\41\77\7\0\24\100\1\0\6\100\4\0\6\100\1\0"+
    "\1\100\1\0\25\100\3\0\7\100\1\0\1\100\346\0\46\77\12\0"+
    "\47\77\11\0\1\77\1\0\2\77\1\0\3\77\1\0\1\77\1\0"+
    "\2\77\1\0\5\77\51\0\1\77\1\0\1\77\1\0\1\77\13\0"+
    "\1\77\1\0\1\77\1\0\1\77\3\0\2\77\3\0\1\77\5\0"+
    "\3\77\1\0\1\77\1\0\1\77\1\0\1\77\1\0\1\77\3\0"+
    "\2\77\3\0\2\77\1\0\1\77\50\0\1\77\11\0\1\77\2\0"+
    "\1\77\2\0\2\77\7\0\2\77\1\0\1\77\1\0\7\77\50\0"+
    "\1\77\4\0\1\77\10\0\1\77\u0c06\0\234\77\4\0\132\77\6\0"+
    "\26\77\2\0\6\77\2\0\46\77\2\0\6\77\2\0\10\77\1\0"+
    "\1\77\1\0\1\77\1\0\1\77\1\0\37\77\2\0\65\77\1\0"+
    "\7\77\1\0\1\77\3\0\3\77\1\0\7\77\3\0\4\77\2\0"+
    "\6\77\4\0\15\77\5\0\3\77\1\0\7\77\323\0\15\100\4\0"+
    "\1\100\104\0\1\77\3\0\2\77\2\0\1\77\121\0\3\77\u0e82\0"+
    "\1\100\1\0\1\77\31\0\11\77\6\100\1\0\5\100\13\0\124\77"+
    "\4\0\2\100\2\0\2\100\2\0\132\77\1\0\3\100\6\0\50\77"+
    "\u1cd3\0\u51a6\77\u0c5a\0\u2ba4\77\134\0\u0800\0\u1ffe\0\2\0";

  /**
   * Translates characters to character classes
   */
  final private static char [] yycmap = yy_unpack_cmap(yycmap_packed);

  /**
   * Translates a state to a row index in the transition table
   */
  final private static int yy_rowMap [] = {
        0,    71,   142,   213,   284,   355,   426,   497,   568,   639,
      710,   781,   852,   923,   99410651136120712781349,
     1420149115621633170417751846191719882059,
     2130220122722343241424852556262726982769,
     2840291129823053312431953266333734083479,
     3550362136923763383439053976404741184189,
     4260433144024473454446154544461546864544,
     4544461547574828489949705041511251835254,
     4544461553255396546745445538553856095680,
     5751532545445822589345445964603561066177,
     4544461562486319639064616532660345446674,
     6674674568166887695870294544710071717242,
     7313738474554544752675977668773978107881,
     7952802345448094816582368307837884498520,
     8591859186628733880488758875894690179088,
     9159915992309301937294434544951495149585,
     9656972797984544454446154544461598699940,
     7597, 10011, 10082, 10153, 10224, 10295, 10366, 10437, 105084544,
    10579, 10650, 10721, 107924544, 10863, 10934, 11005, 110764544,
     4544, 111474544, 11218, 112894544, 11218, 11360, 114314544,
    11360, 11502, 115734544, 116444544, 11715, 11786, 11857, 11928,
    1199945444544, 120704544, 12141, 122124544, 12141, 12283,
    123544544, 12283, 12425, 12496, 125674544, 12638, 12709, 12780,
     45444544, 12851, 12922, 12993, 13064, 13135, 13206, 13277, 13348,
    13419, 13490, 13561, 13632, 13703, 13774, 138454544, 13916, 13987,
    1405845444544553856804544, 14129, 142005751, 14271,
    14342582259646035, 1441361064544, 14484, 14555, 14626,
     6177, 14697, 147684544, 129224544667467454544, 14839,
    149106816, 14981, 150524544, 15123, 151947526, 152657739,
     4544, 15336, 154077810, 15478, 15549, 15620, 15691, 15762, 15833,
    1590483074544, 15975, 16046859186624544, 16117, 16188,
    16259, 16330, 16401, 16472, 1654388048591887589464544,
     901790888875915992304544, 16614, 16685, 16756, 16827,
    16898, 16969, 17040, 17111, 17182951495854544, 17253, 17324,
    17395, 17466, 17537, 17608, 17679, 17750, 17821, 178929940, 10082,
     4544, 17963, 18034, 10153, 18105, 18176, 18247, 183184544, 18389,
     4544454445444544, 18460, 18531, 18602, 18673, 112184544,
    18744, 18815, 113604544, 18886, 18957, 19028, 19099, 19170, 19241,
    19312, 19383, 19454, 11928, 121414544, 19525, 19596, 122834544,
    19667, 19738, 19809, 19880, 19951, 20022, 20093, 20164, 202354544,
     45444544, 20306, 20377, 20448, 20519, 205904544, 20661, 20732,
    208034544454445444544, 20874454445444970, 20945,
    21016, 21087, 21158, 21229, 21300, 21371, 21442, 21513, 21584, 21655,
    21726, 21797, 21868, 21939, 22010, 22081, 22010, 22152, 22223, 22152,
    22294, 22365, 22436, 22507, 22578, 22649, 22720, 22791, 22791, 22862,
    22933, 23004, 23075, 23075, 23146, 23217937293729372, 23288,
    23359, 23430, 23501, 23501, 23572, 23643972797279727, 23714,
    23785, 10082, 23856, 10153, 23927, 23998, 23998, 24069, 24069, 18602,
    24140, 11005, 11005, 11005, 24211, 24282, 11218, 11218, 11218, 24353,
    24424, 11360, 11360, 11360, 24495, 24566, 11502, 11502, 11502, 19170,
    24637, 24708, 11715, 11715, 11715, 19383, 24779, 24850, 11928, 11928,
    11928, 24921, 12141, 12141, 12141, 24992, 25063, 12283, 12283, 12283,
    25134, 25205, 12425, 12425, 12425, 19951, 25276, 25347, 12638, 12638,
    12638, 20164, 2541845444544, 25489, 255604544, 25631, 25702,
    25773, 25844, 25915, 25986752645444544, 26057, 26128, 26199,
    26270, 26341, 16401, 168989372, 26412, 175379727, 264834544,
     9940, 11005, 11218, 26554, 11360, 26625, 11502, 266964544, 11715,
    26767, 11928, 12141, 26838, 12283, 26909, 12425, 269804544, 12638,
    27051, 27122, 27193, 27264, 27335, 27406, 27477, 27548, 27619, 27690,
    27761, 27832, 27903, 27974, 28045, 28116, 28187, 28258, 28329, 28400,
    28471, 28542, 286134970, 28684, 28755, 28826, 28897, 289684544,
     4544, 29039, 29110, 29181, 29252, 19170, 19383, 29323, 29394, 19951,
    20164, 29465, 29536, 29607, 29678454445444544, 29749, 29820,
    29891, 29962, 30033, 30104, 30175, 302467242, 30317, 30388, 30459,
    30530, 30601, 30672, 307434544, 30814, 3088593729727, 11218,
    11360, 12141, 12283, 30956, 31027, 31098, 31169, 31240, 31311, 31382,
    314534970, 31524, 31595, 31666, 31737, 31808, 31879, 31950, 32021,
    32092, 32163, 32234, 32305, 32376, 32447, 32518, 32589, 32660, 32731,
    32802, 32873, 32944, 33015, 33086, 33157, 33228, 33299, 33370, 33441,
    33512, 33583, 33654, 33725, 33796, 33867, 33938, 340094544, 34080,
    34151, 34222, 342937242, 34364, 34435, 34506, 34577, 34648, 34719,
    34790, 34861, 34932, 35003, 35074, 35145, 35216, 35287
  };

  /**
   * The packed transition table of the DFA
   */
  final private static String yy_packed =
    "\1\72\1\73\11\72\1\74\1\72\1\75\1\72\1\76"+
    "\3\72\1\77\42\72\1\100\20\72\1\101\1\102\105\101"+
    "\1\103\1\104\22\103\1\105\2\103\1\106\57\103\1\107"+
    "\1\110\105\107\1\103\1\104\5\103\1\111\17\103\1\106"+
    "\60\103\1\104\2\103\1\112\1\113\2\103\2\114\6\103"+
    "\1\113\6\103\1\113\1\115\1\116\4\114\1\103\10\114"+
    "\1\117\2\114\1\103\11\114\1\117\1\114\1\103\4\114"+
    "\1\103\4\114\1\103\4\114\1\103\1\114\1\103\1\104"+
    "\2\103\1\112\1\120\12\103\1\120\6\103\1\120\57\103"+
    "\1\121\1\122\2\121\1\123\22\121\1\106\57\121\1\103"+
    "\1\104\2\103\1\124\1\113\2\103\2\125\6\103\1\113"+
    "\6\103\1\113\6\125\1\103\13\125\1\103\13\125\1\103"+
    "\4\125\1\103\4\125\1\103\4\125\1\103\1\125\1\103"+
    "\1\104\2\103\1\124\1\113\2\103\2\125\6\103\1\113"+
    "\6\103\1\113\6\125\1\103\13\125\1\126\13\125\1\103"+
    "\4\125\1\103\4\125\1\103\4\125\1\103\1\125\1\127"+
    "\1\104\1\103\1\130\1\131\1\113\4\127\1\132\1\127"+
    "\1\133\3\127\1\113\6\127\1\113\57\127\1\103\1\104"+
    "\2\103\1\134\22\103\1\106\60\103\1\104\1\135\1\136"+
    "\1\103\1\113\2\103\2\137\6\103\1\113\6\103\1\113"+
    "\6\137\1\103\13\137\1\103\13\137\1\103\4\137\1\103"+
    "\4\137\1\103\4\137\1\103\1\137\1\103\1\104\1\135"+
    "\1\136\1\103\1\113\2\103\2\137\6\103\1\113\6\103"+
    "\1\113\6\137\1\103\13\137\1\140\13\137\1\103\4\137"+
    "\1\103\4\137\1\103\4\137\1\103\1\137\1\141\1\104"+
    "\1\135\1\142\1\141\1\113\4\141\1\143\1\141\1\144"+
    "\3\141\1\113\6\141\1\113\57\141\1\103\1\104\3\103"+
    "\1\113\12\103\1\113\6\103\1\113\57\103\1\145\1\146"+
    "\21\145\1\147\63\145\1\103\1\150\3\103\1\113\2\103"+
    "\2\151\6\103\1\113\2\103\1\152\3\103\1\113\6\151"+
    "\1\103\13\151\1\103\13\151\1\103\4\151\1\103\4\151"+
    "\1\103\4\151\1\103\1\151\1\103\1\150\3\103\1\153"+
    "\12\103\1\153\2\103\1\152\3\103\1\153\60\103\1\150"+
    "\3\103\1\113\2\103\2\154\6\103\1\113\2\103\1\152"+
    "\3\103\1\113\6\154\1\103\13\154\1\103\13\154\1\103"+
    "\4\154\1\103\4\154\1\103\4\154\1\103\1\154\1\103"+
    "\1\150\3\103\1\113\2\103\2\154\6\103\1\113\2\103"+
    "\1\152\3\103\1\113\6\154\1\103\13\154\1\155\13\154"+
    "\1\103\4\154\1\103\4\154\1\103\4\154\1\103\1\154"+
    "\1\156\1\150\1\103\1\157\1\156\1\113\4\156\1\160"+
    "\1\156\1\161\3\156\1\113\2\156\1\162\3\156\1\113"+
    "\57\156\1\163\1\164\1\165\1\166\4\163\2\167\16\163"+
    "\6\170\1\163\13\170\1\163\13\170\1\163\4\170\1\163"+
    "\4\170\1\163\1\171\3\170\1\163\1\170\1\103\1\172"+
    "\1\165\1\166\1\103\1\113\2\103\2\173\6\103\1\113"+
    "\6\103\1\113\6\173\1\103\13\173\1\103\13\173\1\103"+
    "\4\173\1\103\4\173\1\103\4\173\1\103\1\173\1\103"+
    "\1\172\1\165\1\166\1\103\1\113\2\103\2\173\6\103"+
    "\1\113\6\103\1\113\6\173\1\103\13\173\1\174\13\173"+
    "\1\103\4\173\1\103\4\173\1\103\4\173\1\103\1\173"+
    "\1\175\1\176\1\165\1\177\1\175\1\113\4\175\1\200"+
    "\1\175\1\201\1\202\2\175\1\113\6\175\1\113\36\175"+
    "\1\203\20\175\1\103\1\204\1\205\2\103\1\113\12\103"+
    "\1\113\6\103\1\113\10\103\1\206\1\207\2\103\1\210"+
    "\11\103\1\210\1\103\1\207\1\206\26\103\1\104\1\205"+
    "\2\103\1\113\12\103\1\113\6\103\1\113\6\103\1\211"+
    "\51\103\1\104\1\205\2\103\1\113\2\103\2\212\6\103"+
    "\1\113\6\103\1\113\6\212\1\211\13\212\1\103\13\212"+
    "\1\103\4\212\1\103\4\212\1\103\4\212\1\103\1\212"+
    "\1\103\1\104\1\205\2\103\1\113\12\103\1\113\6\103"+
    "\1\113\6\103\1\211\7\103\1\213\6\103\1\214\11\103"+
    "\1\213\12\103\1\214\4\103\1\215\1\104\1\205\1\216"+
    "\1\215\1\113\4\215\1\217\1\215\1\220\3\215\1\113"+
    "\6\215\1\113\6\215\1\221\50\215\1\222\1\104\1\205"+
    "\1\223\1\222\1\113\4\222\1\224\1\222\1\225\3\222"+
    "\1\113\6\222\1\113\6\222\1\226\50\222\1\227\1\104"+
    "\1\205\1\230\1\227\1\113\4\227\1\231\1\227\1\232"+
    "\3\227\1\113\6\227\1\113\57\227\1\233\1\234\1\235"+
    "\104\233\1\236\1\104\1\205\1\237\1\236\1\113\4\236"+
    "\1\240\1\236\1\241\3\236\1\113\6\236\1\113\57\236"+
    "\1\242\1\243\1\244\104\242\1\245\1\246\105\245\1\103"+
    "\1\104\25\103\1\106\57\103\1\247\1\250\105\247\1\103"+
    "\1\104\5\103\1\251\17\103\1\106\57\103\1\252\1\253"+
    "\1\165\1\254\1\252\1\113\4\252\1\255\1\252\1\256"+
    "\1\257\2\252\1\113\6\252\1\113\36\252\1\260\20\252"+
    "\1\261\1\262\3\261\1\263\6\261\1\264\1\265\2\261"+
    "\1\263\6\261\1\263\36\261\1\266\20\261\1\267\1\262"+
    "\3\267\1\270\4\267\1\271\2\267\1\272\2\267\1\270"+
    "\6\267\1\270\36\267\1\273\20\267\1\274\1\275\10\274"+
    "\1\276\1\274\1\277\1\300\67\274\1\301\1\274\1\302"+
    "\1\303\12\302\1\304\12\302\1\305\57\302\1\306\1\307"+
    "\10\306\1\310\14\306\1\311\57\306\1\103\1\104\12\103"+
    "\1\304\12\103\1\106\60\103\1\104\10\103\1\310\14\103"+
    "\1\106\57\103\1\312\1\313\10\312\1\314\4\312\1\315"+
    "\65\312\1\316\1\312\1\317\1\320\12\317\1\264\2\317"+
    "\1\321\65\317\1\316\1\317\1\322\1\323\10\322\1\324"+
    "\1\322\1\325\51\322\1\326\16\322\1\327\1\322\1\330"+
    "\1\331\12\330\1\332\12\330\1\333\57\330\1\334\1\335"+
    "\10\334\1\336\14\334\1\337\57\334\1\103\1\104\12\103"+
    "\1\332\12\103\1\106\60\103\1\104\10\103\1\336\14\103"+
    "\1\106\57\103\1\340\1\341\10\340\1\314\4\340\1\342"+
    "\65\340\1\343\1\340\1\344\1\345\12\344\1\264\2\344"+
    "\1\346\65\344\1\343\1\344\1\72\1\0\11\72\1\0"+
    "\1\72\1\0\5\72\1\0\42\72\1\0\20\72\3\0"+
    "\1\347\1\350\16\0\1\351\2\0\1\352\65\0\1\353"+
    "\2\0\2\354\6\0\1\353\6\0\1\353\6\354\1\0"+
    "\13\354\1\0\13\354\1\355\4\354\1\0\4\354\1\0"+
    "\4\354\1\0\1\354\1\72\1\0\11\72\1\0\1\72"+
    "\1\356\1\357\4\72\1\0\64\72\1\0\11\72\1\0"+
    "\1\72\1\360\5\72\1\0\42\72\1\360\20\72\5\0"+
    "\1\353\2\0\2\361\6\0\1\353\2\0\1\362\3\0"+
    "\1\353\6\361\1\0\13\361\1\0\13\361\1\0\4\361"+
    "\1\0\4\361\1\0\4\361\1\0\1\361\1\72\1\0"+
    "\11\72\1\0\2\72\1\363\4\72\1\0\42\72\1\364"+
    "\20\72\132\0\1\351\2\0\1\365\104\0\1\366\71\0"+
    "\1\367\101\0\1\370\111\0\1\113\12\0\1\113\6\0"+
    "\1\113\65\0\4\114\7\0\1\114\6\0\6\114\1\0"+
    "\13\114\1\0\13\114\1\0\4\114\1\0\11\114\1\0"+
    "\1\114\6\0\4\114\7\0\1\114\6\0\2\114\2\371"+
    "\2\114\1\0\13\114\1\0\13\114\1\0\4\114\1\0"+
    "\11\114\1\0\1\114\6\0\4\114\7\0\1\114\6\0"+
    "\2\114\1\371\1\372\2\114\1\0\13\114\1\0\13\114"+
    "\1\0\4\114\1\0\11\114\1\0\1\114\6\0\4\114"+
    "\7\0\1\114\6\0\2\114\2\373\2\114\1\0\13\114"+
    "\1\0\13\114\1\0\4\114\1\0\11\114\1\0\1\114"+
    "\5\0\1\120\12\0\1\120\6\0\1\120\61\0\1\374"+
    "\106\0\1\375\112\0\4\125\7\0\1\125\6\0\6\125"+
    "\1\0\13\125\1\0\13\125\1\0\4\125\1\0\11\125"+
    "\1\0\1\125\1\127\2\0\1\376\1\127\1\0\4\127"+
    "\1\0\1\127\1\0\3\127\1\0\6\127\1\0\60\127"+
    "\1\0\1\375\1\376\1\127\1\0\4\127\1\0\1\127"+
    "\1\0\3\127\1\0\6\127\1\0\57\127\1\377\1\0"+
    "\10\377\1\u0100\2\377\1\u0101\1\377\1\u0102\46\377\1\u0101"+
    "\20\377\1\u0103\1\0\12\u0103\1\u0100\1\u0104\1\u0103\1\u0105"+
    "\46\u0103\1\u0104\20\u0103\2\0\1\135\1\u0106\111\0\4\137"+
    "\7\0\1\137\6\0\6\137\1\0\13\137\1\0\13\137"+
    "\1\0\4\137\1\0\11\137\1\0\1\137\1\141\2\0"+
    "\1\u0107\1\141\1\0\4\141\1\0\1\141\1\0\3\141"+
    "\1\0\6\141\1\0\60\141\1\0\1\135\1\u0108\1\141"+
    "\1\0\4\141\1\0\1\141\1\0\3\141\1\0\6\141"+
    "\1\0\57\141\1\143\1\0\1\u0109\1\u010a\1\143\1\u0109"+
    "\4\143\1\u010b\1\143\1\u0109\1\u010c\1\143\1\u010d\1\u0109"+
    "\6\143\1\u0109\36\143\1\u010c\20\143\1\144\1\0\1\u010e"+
    "\1\u010f\1\144\1\u010e\4\144\1\u010e\1\144\1\u010b\1\u0110"+
    "\1\144\1\u0111\1\u010e\6\144\1\u010e\36\144\1\u0110\20\144"+
    "\2\0\1\u0112\127\0\1\351\2\0\1\u0113\66\0\4\151"+
    "\7\0\1\151\6\0\6\151\1\0\13\151\1\0\13\151"+
    "\1\0\4\151\1\0\11\151\1\0\1\151\2\0\1\u0114"+
    "\111\0\1\153\12\0\1\153\6\0\1\153\65\0\4\154"+
    "\7\0\1\154\6\0\6\154\1\0\13\154\1\0\13\154"+
    "\1\0\4\154\1\0\11\154\1\0\1\154\1\156\2\0"+
    "\1\u0115\1\156\1\0\4\156\1\0\1\156\1\0\3\156"+
    "\1\0\6\156\1\0\57\156\1\u0116\1\0\10\u0116\1\u0117"+
    "\2\u0116\1\u0118\1\u0116\1\u0119\46\u0116\1\u0118\20\u0116\1\u011a"+
    "\1\0\12\u011a\1\u0117\1\u011b\1\u011a\1\u011c\46\u011a\1\u011b"+
    "\20\u011a\1\156\1\0\1\u0114\1\u0115\1\156\1\0\4\156"+
    "\1\0\1\156\1\0\3\156\1\0\6\156\1\0\57\156"+
    "\1\163\3\0\24\163\6\0\1\163\13\0\1\163\13\0"+
    "\1\163\4\0\1\163\4\0\1\163\4\0\1\163\4\0"+
    "\1\347\17\0\1\351\2\0\1\352\62\0\1\u011d\104\0"+
    "\1\163\3\0\2\163\4\167\7\163\1\167\6\163\6\170"+
    "\1\163\13\170\1\163\13\170\1\163\4\170\1\163\4\170"+
    "\1\167\4\170\1\163\1\170\6\0\4\170\7\0\1\170"+
    "\6\0\6\170\1\0\13\170\1\0\13\170\1\0\4\170"+
    "\1\0\11\170\1\0\1\170\6\0\4\170\7\0\1\170"+
    "\6\0\6\170\1\0\7\170\1\u011e\3\170\1\0\13\170"+
    "\1\0\4\170\1\0\11\170\1\0\1\170\3\0\1\347"+
    "\4\0\2\u011f\11\0\1\351\2\0\1\352\1\0\6\u011f"+
    "\1\0\13\u011f\1\0\13\u011f\1\0\4\u011f\1\0\4\u011f"+
    "\1\0\4\u011f\1\0\1\u011f\6\0\4\173\7\0\1\173"+
    "\6\0\6\173\1\0\13\173\1\0\13\173\1\0\4\173"+
    "\1\0\11\173\1\0\1\173\1\175\2\0\1\u0120\1\175"+
    "\1\0\4\175\1\0\1\175\1\0\3\175\1\0\6\175"+
    "\1\0\57\175\3\0\1\347\4\0\2\u0121\11\0\1\351"+
    "\2\0\1\352\1\0\6\u0121\1\0\13\u0121\1\0\13\u0121"+
    "\1\0\4\u0121\1\0\4\u0121\1\0\4\u0121\1\0\1\u0121"+
    "\1\175\1\0\1\u011d\1\u0120\1\175\1\0\4\175\1\0"+
    "\1\175\1\0\3\175\1\0\6\175\1\0\57\175\1\u0122"+
    "\1\0\10\u0122\1\u0123\2\u0122\1\u0124\1\u0122\1\u0125\46\u0122"+
    "\1\u0124\20\u0122\1\u0126\1\0\12\u0126\1\u0123\1\u0127\1\u0126"+
    "\1\u0128\46\u0126\1\u0127\20\u0126\1\175\2\0\1\u0120\1\175"+
    "\1\0\4\175\1\0\1\175\1\0\1\175\1\u0129\1\175"+
    "\1\0\6\175\1\0\60\175\2\0\1\u0120\1\175\1\0"+
    "\4\175\1\0\1\175\1\0\1\175\1\u012a\1\175\1\0"+
    "\6\175\1\0\57\175\3\0\1\347\17\0\1\351\2\0"+
    "\1\u0113\130\0\1\u012b\2\0\1\u012b\75\0\1\u012c\14\0"+
    "\1\u012c\63\0\2\u012d\51\0\24\u012e\1\u012f\62\u012e\6\0"+
    "\4\212\7\0\1\212\6\0\6\212\1\0\13\212\1\0"+
    "\13\212\1\0\4\212\1\0\11\212\1\0\1\212\54\0"+
    "\1\u0130\5\0\1\u0130\116\0\1\u0131\10\0\1\u0131\3\0"+
    "\1\215\2\0\1\u0132\1\215\1\0\4\215\1\0\1\215"+
    "\1\0\3\215\1\0\6\215\1\0\57\215\1\u0133\1\0"+
    "\10\u0133\1\u0134\2\u0133\1\u0135\1\u0133\1\u0136\46\u0133\1\u0135"+
    "\20\u0133\1\u0137\1\0\1\u0137\2\u0138\1\u0137\4\u0138\2\u0137"+
    "\1\u0139\1\u013a\1\u0137\1\u013b\4\u0138\1\u0137\11\u0138\1\u0137"+
    "\27\u0138\1\u013a\10\u0138\2\u0137\4\u0138\1\u0137\1\u0138\1\221"+
    "\2\u012e\1\u013c\1\221\1\u012e\4\221\1\u012e\1\221\1\u012e"+
    "\3\221\1\u012e\3\221\1\u013d\2\221\1\u012e\57\221\1\222"+
    "\2\0\1\u013e\1\222\1\0\4\222\1\0\1\222\1\0"+
    "\3\222\1\0\6\222\1\0\57\222\12\u013f\1\u0140\74\u013f"+
    "\14\u0141\1\u0140\72\u0141\1\226\2\u012e\1\u0142\1\226\1\u012e"+
    "\4\226\1\u012e\1\226\1\u012e\3\226\1\u012e\3\226\1\u0143"+
    "\2\226\1\u012e\57\226\1\227\2\0\1\u0144\1\227\1\0"+
    "\4\227\1\0\1\227\1\0\3\227\1\0\6\227\1\0"+
    "\57\227\1\u0145\1\0\10\u0145\1\u0146\2\u0145\1\u0147\1\u0145"+
    "\1\u0148\46\u0145\1\u0147\20\u0145\1\u0149\1\0\1\u0149\2\u014a"+
    "\1\u0149\4\u014a\2\u0149\1\u014b\1\u014c\1\u0149\1\u014d\4\u014a"+
    "\1\u0149\11\u014a\1\u0149\27\u014a\1\u014c\10\u014a\2\u0149\4\u014a"+
    "\1\u0149\1\u014a\2\233\1\0\106\233\1\0\20\233\1\u014e"+
    "\2\233\1\u014f\60\233\1\236\2\0\1\u0150\1\236\1\0"+
    "\4\236\1\0\1\236\1\0\3\236\1\0\6\236\1\0"+
    "\57\236\1\u0151\1\0\10\u0151\1\u0152\2\u0151\1\u0153\1\u0151"+
    "\1\u0154\46\u0151\1\u0153\20\u0151\1\u0155\1\0\1\u0155\2\u0156"+
    "\1\u0155\4\u0156\2\u0155\1\u0157\1\u0158\1\u0155\1\u0159\4\u0156"+
    "\1\u0155\11\u0156\1\u0155\27\u0156\1\u0158\10\u0156\2\u0155\4\u0156"+
    "\1\u0155\1\u0156\2\242\1\0\106\242\1\0\20\242\1\u015a"+
    "\2\242\1\u015b\60\242\7\0\1\u015c\77\0\1\252\2\0"+
    "\1\u015d\1\252\1\0\4\252\1\0\1\252\1\0\3\252"+
    "\1\0\6\252\1\0\60\252\1\0\1\u011d\1\u015d\1\252"+
    "\1\0\4\252\1\0\1\252\1\0\3\252\1\0\6\252"+
    "\1\0\57\252\1\u015e\1\0\10\u015e\1\u015f\2\u015e\1\u0160"+
    "\1\u015e\1\u0161\46\u015e\1\u0160\20\u015e\1\u0162\1\0\12\u0162"+
    "\1\u015f\1\u0163\1\u0162\1\u0164\46\u0162\1\u0163\20\u0162\1\252"+
    "\2\0\1\u015d\1\252\1\0\4\252\1\0\1\252\1\0"+
    "\1\252\1\u0165\1\252\1\0\6\252\1\0\60\252\2\0"+
    "\1\u015d\1\252\1\0\4\252\1\0\1\252\1\0\1\252"+
    "\1\u0166\1\252\1\0\6\252\1\0\57\252\1\261\1\0"+
    "\12\261\2\0\50\261\1\0\20\261\3\0\1\u0167\17\0"+
    "\1\351\2\0\1\365\60\0\1\261\1\0\3\261\1\263"+
    "\6\261\2\0\2\261\1\263\6\261\1\263\36\261\1\0"+
    "\20\261\5\0\1\u0168\10\0\1\u0169\1\0\1\u0168\6\0"+
    "\1\u0168\64\0\1\u0168\10\0\1\u016a\1\0\1\u0168\6\0"+
    "\1\u0168\57\0\1\267\1\0\10\267\1\0\2\267\1\0"+
    "\50\267\1\0\21\267\1\0\3\267\1\270\4\267\1\0"+
    "\2\267\1\0\2\267\1\270\6\267\1\270\36\267\1\0"+
    "\20\267\5\0\1\u0168\10\0\1\u016b\1\0\1\u0168\6\0"+
    "\1\u0168\64\0\1\u0168\10\0\1\u016c\1\0\1\u0168\6\0"+
    "\1\u0168\57\0\12\274\1\0\1\274\1\0\1\u016d\67\274"+
    "\1\0\13\274\1\0\1\274\1\0\1\u016d\5\274\1\u016e"+
    "\61\274\1\0\13\274\1\0\1\274\1\0\1\274\1\u016f"+
    "\66\274\1\u0170\1\274\14\u0171\1\u0172\106\u0171\1\u0172\6\u0171"+
    "\1\u0173\2\u0171\1\u0174\60\u0171\12\u0175\1\u0176\106\u0175\1\u0176"+
    "\10\u0175\1\u0177\2\u0175\1\u0178\60\u0175\12\312\1\0\4\312"+
    "\1\u0179\65\312\1\0\13\312\1\0\4\312\1\u0179\3\312"+
    "\1\u017a\61\312\1\0\13\312\1\u017b\74\312\14\317\1\0"+
    "\2\317\1\u017c\65\317\1\0\15\317\1\0\2\317\1\u017c"+
    "\3\317\1\u017d\61\317\1\0\15\317\1\u017e\72\317\12\322"+
    "\1\0\1\322\1\0\70\322\1\0\13\322\1\0\1\322"+
    "\1\0\6\322\1\u017f\61\322\1\0\13\322\1\0\1\322"+
    "\1\0\1\322\1\u0180\66\322\1\0\1\322\14\u0181\1\u0182"+
    "\106\u0181\1\u0182\6\u0181\1\u0183\2\u0181\1\u0184\60\u0181\12\u0185"+
    "\1\u0186\106\u0185\1\u0186\10\u0185\1\u0187\2\u0185\1\u0188\60\u0185"+
    "\12\340\1\0\4\340\1\u0189\65\340\1\0\13\340\1\0"+
    "\4\340\1\u0189\3\340\1\u018a\61\340\1\0\13\340\1\u018b"+
    "\74\340\14\344\1\0\2\344\1\u018c\65\344\1\0\15\344"+
    "\1\0\2\344\1\u018c\3\344\1\u018d\61\344\1\0\15\344"+
    "\1\u018e\72\344\7\0\1\u018f\12\0\1\u0190\3\0\1\u0191"+
    "\23\0\1\u0192\43\0\1\u0193\26\0\1\u0194\55\0\1\353"+
    "\2\0\2\u0195\6\0\1\353\6\0\1\353\6\u0195\1\0"+
    "\13\u0195\1\0\13\u0195\1\0\4\u0195\1\0\4\u0195\1\0"+
    "\4\u0195\1\0\1\u0195\1\u0196\1\0\3\u0196\1\u0197\4\354"+
    "\1\u0196\1\0\4\u0196\1\u0197\1\354\1\u0196\1\0\3\u0196"+
    "\1\u0197\6\354\1\u0196\13\354\1\u0196\13\354\1\u0196\4\354"+
    "\1\u0198\11\354\1\u0196\1\354\21\0\1\u0199\7\0\1\u019a"+
    "\55\0\1\72\1\0\11\72\1\0\1\72\1\u019b\5\72"+
    "\1\0\42\72\1\0\20\72\105\357\1\u019c\1\357\16\0"+
    "\1\u019d\70\0\1\u0196\1\0\3\u0196\1\u0197\4\361\1\u0196"+
    "\1\0\4\u0196\1\u0197\1\361\1\u0196\1\0\3\u0196\1\u0197"+
    "\6\361\1\u0196\13\361\1\u0196\13\361\1\u0196\4\361\1\u019e"+
    "\11\361\1\u0196\1\361\23\0\1\362\63\0\105\363\1\u019f"+
    "\1\363\1\72\1\0\11\72\1\0\1\72\1\0\5\72"+
    "\1\0\42\72\1\u01a0\20\72\36\0\1\u0194\52\0\1\u01a1"+
    "\106\0\1\u01a2\112\0\4\114\7\0\1\114\6\0\4\114"+
    "\2\u01a3\1\0\13\114\1\0\13\114\1\0\4\114\1\0"+
    "\11\114\1\0\1\114\6\0\4\114\7\0\1\114\6\0"+
    "\4\114\1\u01a3\1\u01a4\1\0\13\114\1\0\13\114\1\0"+
    "\4\114\1\0\11\114\1\0\1\114\6\0\4\114\7\0"+
    "\1\114\6\0\6\114\1\0\13\114\1\0\2\114\1\u01a5"+
    "\10\114\1\0\4\114\1\0\6\114\1\u01a5\2\114\1\0"+
    "\1\114\1\377\1\0\10\377\1\u0100\3\377\1\0\71\377"+
    "\1\0\10\377\1\u0100\2\377\1\u01a6\1\377\1\u0102\46\377"+
    "\1\u01a6\20\377\1\u0103\1\0\12\u0103\1\u0100\1\u0103\1\0"+
    "\71\u0103\1\0\12\u0103\1\u0100\1\u01a7\1\u0103\1\u0105\46\u0103"+
    "\1\u01a7\20\u0103\1\u0109\1\0\10\u0109\1\u010b\2\u0109\1\u01a8"+
    "\1\u0109\1\u01a9\46\u0109\1\u01a8\20\u0109\1\143\1\0\1\u0109"+
    "\1\u010a\1\143\1\u0109\4\143\1\u010b\1\143\1\u0109\1\143"+
    "\1\141\1\143\1\u0109\6\143\1\u0109\60\143\1\0\1\u0109"+
    "\1\u010a\1\143\1\u0109\4\143\1\u010b\1\143\1\u0109\1\u01aa"+
    "\1\143\1\u010d\1\u0109\6\143\1\u0109\36\143\1\u01aa\20\143"+
    "\1\u010e\1\0\12\u010e\1\u010b\1\u01ab\1\u010e\1\u01ac\46\u010e"+
    "\1\u01ab\20\u010e\1\144\1\0\1\u010e\1\u010f\1\144\1\u010e"+
    "\4\144\1\u010e\1\144\1\u010b\1\144\1\141\1\144\1\u010e"+
    "\6\144\1\u010e\60\144\1\0\1\u010e\1\u010f\1\144\1\u010e"+
    "\4\144\1\u010e\1\144\1\u010b\1\u01ad\1\144\1\u0111\1\u010e"+
    "\6\144\1\u010e\36\144\1\u01ad\20\144\1\u0116\1\0\10\u0116"+
    "\1\u0117\3\u0116\1\0\71\u0116\1\0\10\u0116\1\u0117\2\u0116"+
    "\1\u01ae\1\u0116\1\u0119\46\u0116\1\u01ae\20\u0116\1\u011a\1\0"+
    "\12\u011a\1\u0117\1\u011a\1\0\71\u011a\1\0\12\u011a\1\u0117"+
    "\1\u01af\1\u011a\1\u011c\46\u011a\1\u01af\20\u011a\6\0\4\170"+
    "\7\0\1\170\6\0\6\170\1\0\13\170\1\0\13\170"+
    "\1\0\4\170\1\0\6\170\1\u01b0\2\170\1\0\1\170"+
    "\6\0\4\u011f\7\0\1\u011f\6\0\6\u011f\1\0\13\u011f"+
    "\1\0\13\u011f\1\0\4\u011f\1\0\11\u011f\1\0\1\u011f"+
    "\6\0\4\u0121\7\0\1\u0121\6\0\6\u0121\1\0\13\u0121"+
    "\1\0\13\u0121\1\0\4\u0121\1\0\11\u0121\1\0\1\u0121"+
    "\1\u0122\1\0\10\u0122\1\u0123\3\u0122\1\0\71\u0122\1\0"+
    "\10\u0122\1\u0123\2\u0122\1\u01b1\1\u0122\1\u0125\46\u0122\1\u01b1"+
    "\20\u0122\1\u0126\1\0\12\u0126\1\u0123\1\u0126\1\0\71\u0126"+
    "\1\0\12\u0126\1\u0123\1\u01b2\1\u0126\1\u0128\46\u0126\1\u01b2"+
    "\20\u0126\1\u01b3\2\u01b4\1\u01b5\1\u01b3\1\u01b4\4\u01b3\1\u01b4"+
    "\1\u01b3\1\u01b4\3\u01b3\1\u01b4\6\u01b3\1\u01b4\55\u01b3\1\175"+
    "\1\u01b3\1\u01b6\2\u01b7\1\u01b8\1\u01b6\1\u01b7\4\u01b6\1\u01b7"+
    "\1\u01b6\1\u01b7\3\u01b6\1\u01b7\6\u01b6\1\u01b7\55\u01b6\1\175"+
    "\1\u01b6\37\0\1\u01b9\35\0\1\u01b9\53\0\1\u01ba\14\0"+
    "\1\u01ba\73\0\1\u01bb\11\0\1\u01bb\76\0\1\u01bc\20\0"+
    "\1\u01bc\113\0\1\u01bd\7\0\1\u01bd\2\0\1\u0133\1\0"+
    "\10\u0133\1\u0134\3\u0133\1\0\71\u0133\1\0\10\u0133\1\u0134"+
    "\2\u0133\1\u01be\1\u0133\1\u0136\46\u0133\1\u01be\20\u0133\1\u0137"+
    "\1\0\12\u0137\1\u0134\1\u01bf\1\u0137\1\u013b\46\u0137\1\u01bf"+
    "\21\u0137\1\0\12\u0137\1\u01c0\1\u01bf\1\u0137\1\u013b\46\u0137"+
    "\1\u01bf\20\u0137\14\0\1\u01c1\72\0\1\u0137\1\0\12\u0137"+
    "\1\u01c0\1\u0137\1\0\71\u0137\1\0\12\u0137\1\u0134\1\u01c2"+
    "\1\u0137\1\u013b\46\u0137\1\u01c2\20\u0137\1\u0145\1\0\10\u0145"+
    "\1\u0146\3\u0145\1\0\71\u0145\1\0\10\u0145\1\u0146\2\u0145"+
    "\1\u01c3\1\u0145\1\u0148\46\u0145\1\u01c3\20\u0145\1\u0149\1\0"+
    "\12\u0149\1\u0146\1\u01c4\1\u0149\1\u014d\46\u0149\1\u01c4\21\u0149"+
    "\1\0\12\u0149\1\u01c5\1\u01c4\1\u0149\1\u014d\46\u0149\1\u01c4"+
    "\20\u0149\14\0\1\u01c6\72\0\1\u0149\1\0\12\u0149\1\u01c5"+
    "\1\u0149\1\0\71\u0149\1\0\12\u0149\1\u0146\1\u01c7\1\u0149"+
    "\1\u014d\46\u0149\1\u01c7\20\u0149\2\233\1\0\4\233\1\u01c8"+
    "\12\233\1\u01c9\3\233\1\u01ca\23\233\1\u01cb\36\233\1\0"+
    "\33\233\1\u01cc\50\233\1\u0151\1\0\10\u0151\1\u0152\3\u0151"+
    "\1\0\71\u0151\1\0\10\u0151\1\u0152\2\u0151\1\u01cd\1\u0151"+
    "\1\u0154\46\u0151\1\u01cd\20\u0151\1\u0155\1\0\12\u0155\1\u0152"+
    "\1\u01ce\1\u0155\1\u0159\46\u0155\1\u01ce\21\u0155\1\0\12\u0155"+
    "\1\u01cf\1\u01ce\1\u0155\1\u0159\46\u0155\1\u01ce\20\u0155\14\0"+
    "\1\u01d0\72\0\1\u0155\1\0\12\u0155\1\u01cf\1\u0155\1\0"+
    "\71\u0155\1\0\12\u0155\1\u0152\1\u01d1\1\u0155\1\u0159\46\u0155"+
    "\1\u01d1\20\u0155\2\242\1\0\4\242\1\u01d2\12\242\1\u01d3"+
    "\3\242\1\u01d4\23\242\1\u01d5\36\242\1\0\33\242\1\u01d6"+
    "\50\242\23\0\1\u01d7\63\0\12\u015e\1\u015f\3\u015e\1\0"+
    "\71\u015e\1\0\10\u015e\1\u01d8\2\u015e\1\u01d9\1\u015e\1\u0161"+
    "\46\u015e\1\u01d9\20\u015e\14\u0162\1\u015f\1\u0162\1\0\71\u0162"+
    "\1\0\12\u0162\1\u01da\1\u01db\1\u0162\1\u0164\46\u0162\1\u01db"+
    "\20\u0162\1\u01dc\2\u01b4\1\u01dd\1\u01dc\1\u01b4\4\u01dc\1\u01b4"+
    "\1\u01dc\1\u01b4\3\u01dc\1\u01b4\6\u01dc\1\u01b4\55\u01dc\1\252"+
    "\1\u01dc\1\u01de\2\u01b7\1\u01df\1\u01de\1\u01b7\4\u01de\1\u01b7"+
    "\1\u01de\1\u01b7\3\u01de\1\u01b7\6\u01de\1\u01b7\55\u01de\1\252"+
    "\1\u01de\5\0\1\u0168\12\0\1\u0168\6\0\1\u0168\57\0"+
    "\12\274\1\0\1\274\1\0\1\274\1\u01e0\66\274\1\u0170"+
    "\10\274\1\u01e1\2\274\1\0\1\274\1\0\1\u016d\4\274"+
    "\1\u01e2\3\274\1\u01e3\23\274\1\u01e4\32\274\1\0\1\274"+
    "\12\u01e0\1\0\1\u01e0\1\0\70\u01e0\1\0\1\u01e0\12\u0170"+
    "\1\0\1\u0170\1\0\1\u01e5\67\u0170\1\0\1\u0170\7\u0171"+
    "\1\u01e6\4\u0171\1\u0172\5\u0171\1\u01e7\3\u0171\1\u01e8\23\u0171"+
    "\1\u01e9\50\u0171\1\u0172\21\u0171\1\u01ea\50\u0171\7\u0175\1\u01eb"+
    "\2\u0175\1\u0176\7\u0175\1\u01ec\3\u0175\1\u01ed\23\u0175\1\u01ee"+
    "\46\u0175\1\u0176\23\u0175\1\u01ef\50\u0175\12\312\1\0\103\312"+
    "\1\u01f0\2\312\1\0\4\312\1\u0179\2\312\1\u01f1\3\312"+
    "\1\u01f2\23\312\1\u01f3\32\312\1\0\1\312\17\u01f4\1\u01f5"+
    "\67\u01f4\14\317\1\0\101\317\1\u01f6\4\317\1\0\2\317"+
    "\1\u017c\2\317\1\u01f7\3\317\1\u01f8\23\317\1\u01f9\32\317"+
    "\1\0\1\317\17\u01fa\1\u01fb\67\u01fa\7\322\1\u01fc\2\322"+
    "\1\0\1\322\1\0\5\322\1\u01fd\3\322\1\u01fe\23\322"+
    "\1\u01ff\32\322\1\0\1\322\7\u0181\1\u0200\4\u0181\1\u0182"+
    "\5\u0181\1\u0201\3\u0181\1\u0202\23\u0181\1\u0203\50\u0181\1\u0182"+
    "\21\u0181\1\u0204\50\u0181\7\u0185\1\u0205\2\u0185\1\u0186\7\u0185"+
    "\1\u0206\3\u0185\1\u0207\23\u0185\1\u0208\46\u0185\1\u0186\23\u0185"+
    "\1\u0209\50\u0185\12\340\1\0\103\340\1\u020a\2\340\1\0"+
    "\4\340\1\u0189\2\340\1\u020b\3\340\1\u020c\23\340\1\u020d"+
    "\32\340\1\0\1\340\17\u020e\1\u020f\67\u020e\14\344\1\0"+
    "\101\344\1\u0210\4\344\1\0\2\344\1\u018c\2\344\1\u0211"+
    "\3\344\1\u0212\23\344\1\u0213\32\344\1\0\1\344\17\u0214"+
    "\1\u0215\67\u0214\7\0\1\u0216\106\0\1\u0217\136\0\1\u0218"+
    "\47\0\1\u0195\1\0\11\u0195\1\0\7\u0195\1\0\63\u0195"+
    "\1\u0196\1\0\11\u0196\1\0\7\u0196\1\0\47\u0196\1\0"+
    "\14\u0196\1\0\3\u0196\1\u0197\5\u0196\1\0\4\u0196\1\u0197"+
    "\2\u0196\1\0\3\u0196\1\u0197\43\u0196\1\u0219\13\u0196\21\0"+
    "\1\u0199\51\0\1\u021a\34\0\1\u021b\15\0\3\u021b\2\0"+
    "\1\u021b\11\0\1\u021b\1\0\2\u021b\7\0\1\u021b\2\0"+
    "\2\u021b\6\0\1\u021b\17\0\1\u019b\157\0\1\u01a0\26\0"+
    "\1\114\1\u021c\2\114\7\0\1\114\6\0\6\114\1\0"+
    "\13\114\1\0\13\114\1\0\4\114\1\0\11\114\1\0"+
    "\1\114\6\0\4\114\7\0\1\114\6\0\6\114\1\0"+
    "\11\114\1\u021d\1\114\1\0\1\u021d\12\114\1\0\4\114"+
    "\1\0\11\114\1\0\1\114\1\377\1\0\10\377\1\u0100"+
    "\74\377\1\u0103\1\0\12\u0103\1\u0100\72\u0103\1\u0109\1\0"+
    "\10\u0109\1\u010b\3\u0109\1\0\71\u0109\1\0\10\u0109\1\u010b"+
    "\2\u0109\1\u021e\1\u0109\1\u01a9\46\u0109\1\u021e\20\u0109\1\143"+
    "\1\0\1\u0109\1\u010a\1\143\1\u0109\4\143\1\u010b\1\143"+
    "\1\u0109\3\143\1\u0109\6\143\1\u0109\57\143\1\u010e\1\0"+
    "\12\u010e\1\u010b\1\u010e\1\0\71\u010e\1\0\12\u010e\1\u010b"+
    "\1\u021f\1\u010e\1\u01ac\46\u010e\1\u021f\20\u010e\1\144\1\0"+
    "\1\u010e\1\u010f\1\144\1\u010e\4\144\1\u010e\1\144\1\u010b"+
    "\3\144\1\u010e\6\144\1\u010e\57\144\1\u0116\1\0\10\u0116"+
    "\1\u0117\74\u0116\1\u011a\1\0\12\u011a\1\u0117\72\u011a\6\0"+
    "\3\170\1\u0220\7\0\1\170\6\0\6\170\1\0\13\170"+
    "\1\0\13\170\1\0\4\170\1\0\11\170\1\0\1\170"+
    "\1\u0122\1\0\10\u0122\1\u0123\74\u0122\1\u0126\1\0\12\u0126"+
    "\1\u0123\72\u0126\1\u01b3\2\u01b4\1\u01b5\1\u01b3\1\u01b4\4\u01b3"+
    "\1\u01b4\1\u01b3\1\u01b4\3\u01b3\1\u01b4\6\u01b3\1\u01b4\55\u01b3"+
    "\1\u0221\1\u01b3\105\u01b4\1\u0222\1\u01b4\1\u01b6\2\u01b7\1\u01b8"+
    "\1\u01b6\1\u01b7\4\u01b6\1\u01b7\1\u01b6\1\u01b7\3\u01b6\1\u01b7"+
    "\6\u01b6\1\u01b7\55\u01b6\1\u0221\1\u01b6\105\u01b7\1\u0223\1\u01b7"+
    "\42\0\1\u0224\14\0\1\u0224\63\0\2\u0225\103\0\2\u0226"+
    "\115\0\1\u0227\14\0\1\u0227\63\0\2\u0228\51\0\1\u0133"+
    "\1\0\10\u0133\1\u0134\74\u0133\1\u0137\1\0\12\u0137\1\u0134"+
    "\1\u0137\1\0\70\u0137\3\0\2\u0229\1\0\4\u0229\2\0"+
    "\1\u0139\1\u0229\2\0\4\u0229\1\0\11\u0229\1\0\40\u0229"+
    "\2\0\4\u0229\1\0\1\u0229\1\u0137\1\0\12\u0137\1\u0134"+
    "\72\u0137\1\u0145\1\0\10\u0145\1\u0146\74\u0145\1\u0149\1\0"+
    "\12\u0149\1\u0146\1\u0149\1\0\70\u0149\3\0\2\u022a\1\0"+
    "\4\u022a\2\0\1\u014b\1\u022a\2\0\4\u022a\1\0\11\u022a"+
    "\1\0\40\u022a\2\0\4\u022a\1\0\1\u022a\1\u0149\1\0"+
    "\12\u0149\1\u0146\72\u0149\2\233\1\0\4\233\1\u022b\101\233"+
    "\1\0\34\233\1\u022c\47\233\1\u0151\1\0\10\u0151\1\u0152"+
    "\74\u0151\1\u0155\1\0\12\u0155\1\u0152\1\u0155\1\0\70\u0155"+
    "\3\0\2\u022d\1\0\4\u022d\2\0\1\u0157\1\u022d\2\0"+
    "\4\u022d\1\0\11\u022d\1\0\40\u022d\2\0\4\u022d\1\0"+
    "\1\u022d\1\u0155\1\0\12\u0155\1\u0152\72\u0155\2\242\1\0"+
    "\4\242\1\u022e\101\242\1\0\34\242\1\u022f\47\242\2\0"+
    "\1\u0230\104\0\12\u015e\1\u015f\74\u015e\14\u0162\1\u015f\72\u0162"+
    "\1\u01dc\2\u01b4\1\u01dd\1\u01dc\1\u01b4\4\u01dc\1\u01b4\1\u01dc"+
    "\1\u01b4\3\u01dc\1\u01b4\6\u01dc\1\u01b4\55\u01dc\1\u0231\1\u01dc"+
    "\1\u01de\2\u01b7\1\u01df\1\u01de\1\u01b7\4\u01de\1\u01b7\1\u01de"+
    "\1\u01b7\3\u01de\1\u01b7\6\u01de\1\u01b7\55\u01de\1\u0231\1\u01de"+
    "\7\274\1\u0232\2\274\1\0\1\274\1\0\1\u016d\67\274"+
    "\1\0\1\274\12\u0170\1\0\1\u0170\1\0\1\u0170\1\0"+
    "\70\u0170\7\u0171\1\u0233\4\u0171\1\u0172\106\u0171\1\u0172\22\u0171"+
    "\1\u0234\47\u0171\7\u0175\1\u0235\2\u0175\1\u0176\106\u0175\1\u0176"+
    "\24\u0175\1\u0236\47\u0175\7\312\1\u0237\2\312\1\0\4\312"+
    "\1\u0179\65\312\1\0\1\312\12\u0238\1\u0239\72\u0238\1\0"+
    "\1\u0238\7\317\1\u023a\4\317\1\0\2\317\1\u017c\65\317"+
    "\1\0\1\317\14\u023b\1\u0239\70\u023b\1\0\1\u023b\7\322"+
    "\1\u023c\2\322\1\0\1\322\1\0\70\322\1\0\1\322"+
    "\7\u0181\1\u023d\4\u0181\1\u0182\106\u0181\1\u0182\22\u0181\1\u023e"+
    "\47\u0181\7\u0185\1\u023f\2\u0185\1\u0186\106\u0185\1\u0186\24\u0185"+
    "\1\u0240\47\u0185\7\340\1\u0241\2\340\1\0\4\340\1\u0189"+
    "\65\340\1\0\1\340\12\u0242\1\u0243\72\u0242\1\0\1\u0242"+
    "\7\344\1\u0244\4\344\1\0\2\344\1\u018c\65\344\1\0"+
    "\1\344\14\u0245\1\u0243\70\u0245\1\0\1\u0245\40\0\1\u0246"+
    "\141\0\1\u0219\34\0\1\u021b\15\0\3\u021b\2\0\1\u021b"+
    "\11\0\1\u021b\1\0\2\u021b\7\0\1\u021b\1\0\1\u021a"+
    "\2\u021b\6\0\1\u021b\10\0\4\114\7\0\1\114\6\0"+
    "\6\114\1\0\7\114\1\u0247\3\114\1\0\13\114\1\0"+
    "\4\114\1\0\11\114\1\0\1\114\6\0\4\114\7\0"+
    "\1\114\6\0\6\114\1\0\6\114\1\u0248\4\114\1\0"+
    "\13\114\1\0\1\114\1\u0248\2\114\1\0\11\114\1\0"+
    "\1\114\1\u0109\1\0\10\u0109\1\u010b\74\u0109\1\u010e\1\0"+
    "\12\u010e\1\u010b\72\u010e\6\0\4\170\7\0\1\170\6\0"+
    "\6\170\1\0\6\170\1\u0249\4\170\1\0\6\170\1\u024a"+
    "\4\170\1\0\4\170\1\0\11\170\1\0\1\170\54\0"+
    "\1\u024b\5\0\1\u024b\73\0\1\u024c\14\0\1\u024c\66\0"+
    "\1\u024d\11\0\1\u024d\74\0\1\u024e\11\0\1\u024e\77\0"+
    "\1\u024f\14\0\1\u024f\22\0\2\233\1\0\35\233\1\u0250"+
    "\46\233\2\242\1\0\35\242\1\u0251\46\242\14\u0171\1\u0172"+
    "\23\u0171\1\u0252\46\u0171\12\u0175\1\u0176\25\u0175\1\u0253\46\u0175"+
    "\12\u0238\1\u01f4\4\u0238\1\u0254\65\u0238\1\u01f4\1\u0238\14\u023b"+
    "\1\u01fa\2\u023b\1\u0255\65\u023b\1\u01fa\1\u023b\14\u0181\1\u0182"+
    "\23\u0181\1\u0256\46\u0181\12\u0185\1\u0186\25\u0185\1\u0257\46\u0185"+
    "\12\u0242\1\u020e\4\u0242\1\u0258\65\u0242\1\u020e\1\u0242\14\u0245"+
    "\1\u0214\2\u0245\1\u0259\65\u0245\1\u0214\1\u0245\41\0\1\u025a"+
    "\53\0\4\114\7\0\1\114\6\0\6\114\1\0\13\114"+
    "\1\0\4\114\1\u025b\6\114\1\0\4\114\1\0\11\114"+
    "\1\0\1\114\6\0\4\114\7\0\1\114\6\0\6\114"+
    "\1\0\3\114\1\u025c\7\114\1\0\4\114\1\u025c\6\114"+
    "\1\0\4\114\1\0\11\114\1\0\1\114\6\0\4\170"+
    "\7\0\1\170\6\0\6\170\1\0\11\170\1\u025d\1\170"+
    "\1\0\13\170\1\0\4\170\1\0\11\170\1\0\1\170"+
    "\6\0\4\170\7\0\1\170\6\0\6\170\1\0\10\170"+
    "\1\u025e\2\170\1\0\13\170\1\0\4\170\1\0\11\170"+
    "\1\0\1\170\55\0\1\u025f\24\0\1\u025f\52\0\1\u0260"+
    "\20\0\1\u0260\70\0\1\u0261\13\0\1\u0261\53\0\2\u0262"+
    "\112\0\1\u0263\35\0\1\u0263\11\0\2\233\1\0\36\233"+
    "\1\u0264\45\233\2\242\1\0\36\242\1\u0265\45\242\14\u0171"+
    "\1\u0172\24\u0171\1\u0266\45\u0171\12\u0175\1\u0176\26\u0175\1\u0267"+
    "\45\u0175\12\u0238\1\u0268\4\u0238\1\u0254\65\u0238\1\u01f4\1\u0238"+
    "\14\u023b\1\u0269\2\u023b\1\u0255\65\u023b\1\u01fa\1\u023b\14\u0181"+
    "\1\u0182\24\u0181\1\u026a\45\u0181\12\u0185\1\u0186\26\u0185\1\u026b"+
    "\45\u0185\12\u0242\1\u026c\4\u0242\1\u0258\65\u0242\1\u020e\1\u0242"+
    "\14\u0245\1\u026d\2\u0245\1\u0259\65\u0245\1\u0214\1\u0245\42\0"+
    "\1\u026e\52\0\4\114\7\0\1\114\6\0\6\114\1\0"+
    "\13\114\1\0\7\114\1\u026f\3\114\1\0\4\114\1\0"+
    "\11\114\1\0\1\114\6\0\4\170\7\0\1\170\6\0"+
    "\6\170\1\0\11\170\1\u0270\1\170\1\0\13\170\1\0"+
    "\4\170\1\0\11\170\1\0\1\170\6\0\4\170\7\0"+
    "\1\170\6\0\6\170\1\0\6\170\1\u0271\4\170\1\0"+
    "\13\170\1\0\4\170\1\0\11\170\1\0\1\170\44\0"+
    "\1\u0272\11\0\1\u0272\72\0\1\u0273\14\0\1\u0273\71\0"+
    "\1\u0274\14\0\1\u0274\27\0\2\233\1\0\37\233\1\u0275"+
    "\44\233\2\242\1\0\37\242\1\u0276\44\242\14\u0171\1\u0172"+
    "\25\u0171\1\u0277\44\u0171\12\u0175\1\u0176\27\u0175\1\u0278\44\u0175"+
    "\14\u0181\1\u0182\25\u0181\1\u0279\44\u0181\12\u0185\1\u0186\27\u0185"+
    "\1\u027a\44\u0185\41\0\1\u027b\53\0\4\114\7\0\1\114"+
    "\6\0\5\114\1\u027c\1\0\13\114\1\0\13\114\1\0"+
    "\4\114\1\0\11\114\1\0\1\114\6\0\4\170\7\0"+
    "\1\170\6\0\6\170\1\0\13\170\1\0\4\170\1\u027d"+
    "\6\170\1\0\4\170\1\0\11\170\1\0\1\170\6\0"+
    "\4\170\7\0\1\170\6\0\6\170\1\0\5\170\1\u027e"+
    "\5\170\1\0\13\170\1\0\4\170\1\0\11\170\1\0"+
    "\1\170\2\233\1\0\36\233\1\u027f\45\233\2\242\1\0"+
    "\36\242\1\u0280\45\242\14\u0171\1\u0172\24\u0171\1\u0281\45\u0171"+
    "\12\u0175\1\u0176\26\u0175\1\u0282\45\u0175\14\u0181\1\u0182\24\u0181"+
    "\1\u0283\45\u0181\12\u0185\1\u0186\26\u0185\1\u0284\45\u0185\36\0"+
    "\1\u0285\56\0\4\114\7\0\1\114\6\0\6\114\1\0"+
    "\5\114\1\u0286\5\114\1\0\13\114\1\0\4\114\1\0"+
    "\11\114\1\0\1\114\6\0\4\170\7\0\1\170\6\0"+
    "\6\170\1\0\13\170\1\0\13\170\1\0\4\170\1\0"+
    "\1\170\1\u0287\7\170\1\0\1\170\2\233\1\0\33\233"+
    "\1\u0288\50\233\2\242\1\0\33\242\1\u0289\50\242\14\u0171"+
    "\1\u0172\21\u0171\1\u028a\50\u0171\12\u0175\1\u0176\23\u0175\1\u028b"+
    "\50\u0175\14\u0181\1\u0182\21\u0181\1\u028c\50\u0181\12\u0185\1\u0186"+
    "\23\u0185\1\u028d\50\u0185\6\0\4\114\7\0\1\114\6\0"+
    "\6\114\1\0\7\114\1\u028e\3\114\1\0\13\114\1\0"+
    "\4\114\1\0\11\114\1\0\1\114\6\0\4\170\7\0"+
    "\1\170\6\0\6\170\1\0\13\170\1\0\4\170\1\u028f"+
    "\6\170\1\0\4\170\1\0\11\170\1\0\1\170\6\0"+
    "\4\114\7\0\1\114\6\0\6\114\1\0\13\114\1\0"+
    "\13\114\1\0\4\114\1\0\11\114\1\0\1\u0290\6\0"+
    "\4\170\7\0\1\170\6\0\6\170\1\0\10\170\1\u0291"+
    "\2\170\1\0\13\170\1\0\4\170\1\0\11\170\1\0"+
    "\1\170\6\0\4\114\7\0\1\114\6\0\6\114\1\0"+
    "\5\114\1\u0292\5\114\1\0\13\114\1\0\4\114\1\0"+
    "\11\114\1\0\1\114\6\0\4\170\7\0\1\170\6\0"+
    "\6\170\1\0\4\170\1\u0293\6\170\1\0\13\170\1\0"+
    "\4\170\1\0\11\170\1\0\1\170\6\0\4\114\7\0"+
    "\1\114\6\0\6\114\1\0\5\114\1\u0294\5\114\1\0"+
    "\13\114\1\0\4\114\1\0\11\114\1\0\1\114\6\0"+
    "\4\170\7\0\1\170\6\0\6\170\1\0\5\170\1\u0295"+
    "\5\170\1\0\13\170\1\0\4\170\1\0\11\170\1\0"+
    "\1\170\6\0\4\114\7\0\1\114\6\0\6\114\1\0"+
    "\13\114\1\0\4\114\1\u0296\6\114\1\0\4\114\1\0"+
    "\11\114\1\0\1\114\6\u0297\4\u0298\7\u0297\1\u0298\5\u0297"+
    "\1\0\6\u0298\1\u0297\13\u0298\1\u0297\13\u0298\1\u0297\4\u0298"+
    "\1\u0297\11\u0298\1\u0297\1\u0298\43\0\1\u0299\3\0\1\u029a"+
    "\7\0\1\u029b\1\u029c\21\0\1\u029d\12\0\4\170\7\0"+
    "\1\170\6\0\6\170\1\0\4\170\1\u029e\3\170\1\u029f"+
    "\2\170\1\0\4\170\1\u02a0\1\u02a1\5\170\1\0\4\170"+
    "\1\0\6\170\1\u02a2\2\170\1\0\1\170\60\0\1\u02a3"+
    "\77\0\1\u02a4\115\0\1\u02a5\105\0\1\u02a6\107\0\1\u02a7"+
    "\34\0\4\170\7\0\1\170\6\0\6\170\1\0\13\170"+
    "\1\0\5\170\1\u02a8\5\170\1\0\4\170\1\0\11\170"+
    "\1\0\1\170\6\0\4\170\7\0\1\170\6\0\6\170"+
    "\1\0\12\170\1\u02a9\1\0\13\170\1\0\4\170\1\0"+
    "\11\170\1\0\1\170\6\0\4\170\7\0\1\170\6\0"+
    "\6\170\1\0\13\170\1\0\5\170\1\u02aa\5\170\1\0"+
    "\4\170\1\0\11\170\1\0\1\170\6\0\4\170\7\0"+
    "\1\170\6\0\6\170\1\0\13\170\1\0\4\170\1\u02ab"+
    "\6\170\1\0\4\170\1\0\11\170\1\0\1\170\6\0"+
    "\4\170\7\0\1\170\6\0\6\170\1\0\13\170\1\0"+
    "\5\170\1\u02ac\5\170\1\0\4\170\1\0\11\170\1\0"+
    "\1\170\45\0\1\u02ad\136\0\1\u02ae\107\0\1\u02af\67\0"+
    "\1\u02b0\125\0\1\u02b1\16\0\4\170\7\0\1\170\6\0"+
    "\6\170\1\0\6\170\1\u02b2\4\170\1\0\13\170\1\0"+
    "\4\170\1\0\11\170\1\0\1\170\6\0\4\170\7\0"+
    "\1\170\6\0\6\170\1\0\13\170\1\0\13\170\1\0"+
    "\4\170\1\0\1\170\1\u02b3\7\170\1\0\1\170\6\0"+
    "\4\170\7\0\1\170\6\0\6\170\1\0\13\170\1\0"+
    "\13\170\1\0\4\170\1\0\2\170\1\u02b4\6\170\1\0"+
    "\1\170\6\0\4\170\7\0\1\170\6\0\6\170\1\0"+
    "\13\170\1\0\4\170\1\u02b5\6\170\1\0\4\170\1\0"+
    "\11\170\1\0\1\170\6\0\4\170\7\0\1\170\6\0"+
    "\6\170\1\0\13\170\1\0\13\170\1\0\4\170\1\0"+
    "\2\170\1\u02b6\6\170\1\0\1\170\47\0\1\u02b7\74\0"+
    "\1\u02b8\106\0\1\u02b9\116\0\1\u02ba\105\0\1\u02bb\50\0"+
    "\4\170\7\0\1\170\6\0\6\170\1\0\10\170\1\u02bc"+
    "\2\170\1\0\13\170\1\0\4\170\1\0\11\170\1\0"+
    "\1\170\6\0\4\170\7\0\1\170\6\0\5\170\1\u02bd"+
    "\1\0\13\170\1\0\13\170\1\0\4\170\1\0\11\170"+
    "\1\0\1\170\6\0\4\170\7\0\1\170\6\0\5\170"+
    "\1\u02be\1\0\13\170\1\0\13\170\1\0\4\170\1\0"+
    "\11\170\1\0\1\170\6\0\4\170\7\0\1\170\6\0"+
    "\6\170\1\0\6\170\1\u02bf\4\170\1\0\13\170\1\0"+
    "\4\170\1\0\11\170\1\0\1\170\6\0\4\170\7\0"+
    "\1\170\6\0\6\170\1\0\5\170\1\u02c0\5\170\1\0"+
    "\13\170\1\0\4\170\1\0\11\170\1\0\1\170\60\0"+
    "\1\u02c1\131\0\1\u02c2\52\0\1\u02c3\106\0\1\u02c4\45\0"+
    "\4\170\7\0\1\170\6\0\6\170\1\0\13\170\1\0"+
    "\5\170\1\u02c5\5\170\1\0\4\170\1\0\11\170\1\0"+
    "\1\170\6\0\4\170\7\0\1\170\6\0\6\170\1\0"+
    "\13\170\1\0\13\170\1\0\4\170\1\0\7\170\1\u02c6"+
    "\1\170\1\0\1\170\6\0\4\170\7\0\1\170\6\0"+
    "\6\170\1\0\10\170\1\u02c7\2\170\1\0\13\170\1\0"+
    "\4\170\1\0\11\170\1\0\1\170\6\0\4\170\7\0"+
    "\1\170\6\0\6\170\1\0\10\170\1\u02c8\2\170\1\0"+
    "\13\170\1\0\4\170\1\0\11\170\1\0\1\170\104\0"+
    "\1\u02c9\63\0\1\u02b1\131\0\1\u02bb\106\0\1\u02ca\10\0"+
    "\4\170\7\0\1\170\6\0\6\170\1\0\13\170\1\0"+
    "\13\170\1\0\4\170\1\0\10\170\1\u02cb\1\0\1\170"+
    "\6\0\4\170\7\0\1\170\6\0\6\170\1\0\13\170"+
    "\1\0\6\170\1\u02b6\4\170\1\0\4\170\1\0\11\170"+
    "\1\0\1\170\6\0\4\170\7\0\1\170\6\0\6\170"+
    "\1\0\13\170\1\0\13\170\1\0\4\170\1\0\10\170"+
    "\1\u02c0\1\0\1\170\6\0\4\170\7\0\1\170\6\0"+
    "\6\170\1\0\13\170\1\0\13\170\1\0\4\170\1\0"+
    "\10\170\1\u02cc\1\0\1\170\35\0\1\u02b1\154\0\1\u02cd"+
    "\11\0\4\170\7\0\1\170\6\0\5\170\1\u02b6\1\0"+
    "\13\170\1\0\13\170\1\0\4\170\1\0\11\170\1\0"+
    "\1\170\6\0\4\170\7\0\1\170\6\0\6\170\1\0"+
    "\13\170\1\0\13\170\1\0\4\170\1\0\7\170\1\u02ce"+
    "\1\170\1\0\1\170\57\0\1\u02b1\35\0\4\170\7\0"+
    "\1\170\6\0\6\170\1\0\13\170\1\0\4\170\1\u02b6"+
    "\6\170\1\0\4\170\1\0\11\170\1\0\1\170";

  /**
   * The transition table of the DFA
   */
  final private static int yytrans [] = yy_unpack(yy_packed);


  /* error codes */
  final private static int YY_UNKNOWN_ERROR = 0;
  // final private static int YY_ILLEGAL_STATE = 1;
  final private static int YY_NO_MATCH = 2;
  final private static int YY_PUSHBACK_2BIG = 3;

  /* error messages for the codes above */
  final private static String YY_ERROR_MSG[] = {
    "Unkown internal scanner error",    //$NON-NLS-1$
    "Internal error: unknown state",    //$NON-NLS-1$
    "Error: could not match input",    //$NON-NLS-1$
    "Error: pushback value was too large"  //$NON-NLS-1$
  };

  /**
   * YY_ATTRIBUTE[aState] contains the attributes of state <code>aState</code>
   */
  private final static byte YY_ATTRIBUTE[] = {
     1000010011101111,
     0111111111111111,
     1111000011110000,
     0010000001111111,
     9191199111111111,
     9111191111119119,
     1111911111119111,
     1111911111191111,
     1111911111111111,
     1111111111119111,
     1119919111111111,
     1119111191111991,
     9339333931191911,
     1119919339333931,
     1191119911010120,
     1121000911199009,
     0000000000911001,
     1909009000009110,
     1090000011000090,
     0009000010001009,
     0010090000100110,
     0900001001100090,
     0000119199991111,
     2, 13322, 133201101111,
     2, 13322, 133201101109,
     99001119001, 1399, 131,
     9911100001001001,
     0032232200000001,
     0000100111110010,
     0111110101032321,
     1111023332233321,
     1110011110011112,
     3332233321111001,
     1110099019011001,
     5, 13, 130000000110119,
     5132321091013232,
     1091001111000001,
     1220022000111100,
     0991122112211011,
     1999112222011111,
     2222911113333111,
     1111110100000111,
     1100000111110010,
     0111110000911111,
     00001111001101
  };

  /** the input device */
  private java.io.Reader yy_reader;

  /** the current state of the DFA */
  private int yy_state;

  /** the current lexical state */
  private int yy_lexical_state = YYINITIAL;

  /** this buffer contains the current text to be matched and is
      the source of the yytext() string */
  private char yy_buffer[] = new char[16384];

  /** the textposition at the last accepting state */
  private int yy_markedPos;

  /** the textposition at the last state to be included in yytext */
  private int yy_pushbackPos;

  /** the current text position in the buffer */
  private int yy_currentPos;

  /** startRead marks the beginning of the yytext() string in the buffer */
  private int yy_startRead;

  /** endRead marks the last character in the buffer, that has been read
      from input */
  private int yy_endRead;

  /** number of newlines encountered up to the start of the matched text */
  // private int yyline;

  /** the number of characters up to the start of the matched text */
  private int yychar;

  /**
   * the number of characters from the last newline up to the start of the
   * matched text
   */
  // private int yycolumn;

  /**
   * yy_atBOL == true <=> the scanner is currently at the beginning of a line
   */
  // private boolean yy_atBOL;

  /** yy_atEOF == true <=> the scanner has returned a value for EOF */
  private boolean yy_atEOF;

  /** denotes if the user-EOF-code has already been executed */
  private boolean yy_eof_done;

  /* user code: */
  private int fTokenCount = 0;
  // required holders for white-space compacting
  private boolean fShouldLoadBuffered = false;
  private String fBufferedContext = null;
  private int fBufferedStart = 1;
  private int fBufferedLength = 0;
  private ITextRegion fBufferedEmbeddedContainer = null;
  private ITextRegion fProxyUnknownRegion = null;
  private String f_context = null;

  // state stack for handling embedded regions
  private IntStack fStateStack = new IntStack();
  // a "hint" as to what an embedded region should be evaluated
  private String fEmbeddedHint = UNDEFINED;
  // a "hint" as to what state to enter once an embedded region has
  //   been completed
  private int fEmbeddedPostState = YYINITIAL;
 
  // the container used to create embedded regions
  private ContextRegionContainer fEmbeddedContainer = null;
  private static final String PROXY_CONTEXT = "PROXY_CONTEXT";
  private static final String PROXY_UNKNOWN_CONTEXT = "PROXY_UNKNOWN_CONTEXT";

  private String context = null;
  private int start = 0;
  private int textLength = 0;
  private int length = 0;

  // offset for tracking position specific block tags
  private int fOffset = 0;
 
  // the name of the current tag being opened
  private String fCurrentTagName = null;

  // the name of the current tag inside of an embedded region
  private String internalTagName = null;
  private String internalContext = null;

  // the list of tag name BlockMarkers
  private List fBlockMarkers = new ArrayList(0);
  private List fNestablePrefixes = new ArrayList(1);
 
  // where the last internal container block was found
  private int fLastInternalBlockStart = -1;

  // required to not seek text blocks on an end tag
  private boolean fIsBlockingEnabled = false;
  private boolean fIsCaseSensitiveBlocking = true;

  private static final boolean fForbidJSP = false;
 
  private int fELlevel = 0;

  private JSPParserRegionFactory fRegionFactory = new JSPParserRegionFactory();

  // Is the embedded tag a JSP tag
  private boolean fEmbeddedTag = false;
  // Is the non-embedded tag a JSP tag
  private boolean fContainerTag = false;
  // Is the tokenizer in a non-embedded tag (between < and >)
  private boolean fInTagContainer = false;
  // Is the tokenizer in an embedded tag (between < and >)
  private boolean fInTagEmbedded = false;

  /**
   * user method
   */
  public final void addBlockMarker(BlockMarker marker) {
    if(containsTagName(marker.getTagName()))
      return;
    fBlockMarkers.add(marker);
  }
  /**
   * user method
   */
  public final void addNestablePrefix(TagMarker marker) {
    fNestablePrefixes.add(marker);
  }
  /* user method */
  public List getNestablePrefixes() {
    return fNestablePrefixes;
  }
  /**
   * user method
   */
  private boolean isNestable(String tagName) {
    //Iterator blocks = fNestablePrefixes.iterator();
    //while(blocks.hasNext()) {
    //  TagMarker marker = (TagMarker)blocks.next();
    //  String markerName = marker.getTagName();
    //  if(tagName.length() > markerName.length() + 1 && tagName.startsWith(markerName) && tagName.charAt(markerName.length()) == ':') {
    //    return marker.isGlobal() || getOffset() >= marker.getMarker().getStart();
    //  }
    //}
    //return false;
    return true;
  }
  /**
   * user method
   */
  public final void removeNestablePrefix(String name) {
    if (fNestablePrefixes != null) {
      Iterator nestables = fNestablePrefixes.iterator();
      while (nestables.hasNext()) {
        if (((TagMarker) nestables.next()).getTagName().equalsIgnoreCase(name))
          nestables.remove();
      }
    }
  }
  /**
   * user method
   */
  public final void removeBlockMarker(BlockMarker marker) {
    fBlockMarkers.remove(marker);
  }
  /**
   * user method
   */
  public final void removeBlockMarker(String tagname) {
    if (fBlockMarkers != null) {
      Iterator blocks = fBlockMarkers.iterator();
      while (blocks.hasNext()) {
        if (((BlockMarker) blocks.next()).getTagName().equals(tagname))
          blocks.remove();
      }
    }
  }
  /* user method */
  private final void assembleEmbeddedTagSequence(String startType, String endTagName) {
    assembleEmbeddedContainer(startType, null, endTagName);
  }
  /* user method */
  private final void assembleEmbeddedContainer(String startType, String[] endTypes) {
    assembleEmbeddedContainer(startType, endTypes, null);
  }
  /* user method */
  private final void assembleEmbeddedContainer(String startType, String endType) {
    assembleEmbeddedContainer(startType, new String[]{endType}, null);
  }
  /**
   *  user method
   *
   * Assembles an embedded container beginning with the given startType as
   * the first ContextRegion within it and of the type fEmbeddedHint.  The
   * endTypes[] array contains the context types that will cause a successful
   * exit.  Use of the endTagName parameter alters this behavior to force an
   * exit on an XML_TAG_CLOSE after seeing an XML_TAG_NAME whose significant
   * text matches the endTagName String.  All contents in between are
   * insignificant, and yes, this means comments are allowed inside.
   **/
  private final void assembleEmbeddedContainer(String startType, String[] endTypes, String endTagName) {
    // the context of the region being added to the embedded container
    internalContext = startType;
    // keep track of where this container began; to provide relative indeces for the regions
    int containerStart = yychar;
    boolean notFinished = true;
    // keep track of where we seem to be so that the endTagName can be checked
    boolean isInEndTag = false;
    boolean isInFirstTag = true;
    // create the embedded container and setup its "type"
    if (fEmbeddedContainer == null) {
      fEmbeddedContainer = new ContextRegionContainer();
      fEmbeddedContainer.setType(fEmbeddedHint);
      fEmbeddedContainer.setStart(containerStart);
      // TODO: parent region needs to be set .... but not sure where to get it from
      //    fEmbeddedContainer.setParent(parentRegion);
    }
    int initialLength = fEmbeddedContainer.getRegions().size();
    containerStart = fEmbeddedContainer.getStart();
    while (notFinished) {
      // add the region to the container
      if (internalContext != null && internalContext != PROXY_CONTEXT) {
        ITextRegion newToken = fRegionFactory.createToken(internalContext, yychar - containerStart, yylength(), yylength());
        fEmbeddedContainer.getRegions().add(newToken);
        fEmbeddedContainer.setLength(fEmbeddedContainer.getLength() + yylength());
        fEmbeddedContainer.setTextLength(fEmbeddedContainer.getTextLength() + yylength());
        // DW, 4/16/2003 token regions no longer have parents
        //newToken.setParent(fEmbeddedContainer);
      }
      try {
        // longscan determines whether to attempt a blockTagScan within the embedded container
        boolean longscan = false;
        // save the tokenizer state in case of a block tag scan
        int previousState = yystate();
        String previousCurrentTagName = fCurrentTagName;
        int previousPostState = fEmbeddedPostState;
        String previousEmbeddedHint = fEmbeddedHint;
        // determine if a block tag scan is necessary
        if (internalContext == XML_TAG_NAME) {
          internalTagName = yytext();
          if (endTagName != null && endTagName.length() == 0){
            endTagName = internalTagName;
          }
          if(!isNestable(internalTagName)) {
            internalTagName = null;
            // snagged a tag name we shouldn't have
            fEmbeddedPostState = ST_ABORT_EMBEDDED;
            notFinished = false;
          }
        }
        else if (internalContext == XML_TAG_OPEN || internalContext == XML_END_TAG_OPEN) {
          internalTagName = null;
        }
        // do upkeep for endTagName usage; must be here since the next token could be the close
        if (internalContext == XML_END_TAG_OPEN) {
          isInEndTag = true;
        } else if (internalContext == XML_TAG_CLOSE) {
          isInFirstTag = isInEndTag = false;
        } else {
           ITextRegionList embeddedRegions = fEmbeddedContainer.getRegions();
          if (embeddedRegions.size() > 2 && (embeddedRegions.get(embeddedRegions.size()-1)).getType() == XML_TAG_CLOSE && (embeddedRegions.get(embeddedRegions.size() - 3)).getType() == XML_TAG_OPEN && internalTagName != null) {
            if (containsTagName(internalTagName)) {
              longscan = true;
              yybegin(ST_BLOCK_TAG_SCAN);
            }
          }
        }
        if (longscan)
          fCurrentTagName = internalTagName;
        // read the next region and context
        internalContext = primGetNextToken();
        if (longscan) {
          // Returning from a block tag scan requires restoring some state variables
          // as well as handling the block region and setting up for normal scanning
          // inside the embedded container
          ITextRegion newToken = fRegionFactory.createToken(internalContext, yychar - containerStart, yylength(), yylength());
          fEmbeddedContainer.getRegions().add(newToken);
          fEmbeddedContainer.setLength(fEmbeddedContainer.getLength() + yylength());
          fEmbeddedContainer.setTextLength(fEmbeddedContainer.getTextLength() + yylength());
          // DW, 4/16/2003 token regions no longer have parents
          // newToken.setParent(fEmbeddedContainer);
          longscan = false;
          fEmbeddedPostState = previousPostState;
          fEmbeddedHint = previousEmbeddedHint;
          fCurrentTagName = previousCurrentTagName;
          yybegin(previousState);
          internalContext = primGetNextToken();
        }
      } catch (IOException e) {
        // primGetNextToken() calls may throw an IOException
        // catch and do nothing since the isEOF check below
        // will properly exit if the input was too short
      } catch (Exception f) {
        // some other exception happened; never should
        Logger.logException(f);
      }
      boolean isEndingType = yystate() == ST_ABORT_EMBEDDED;
      ITextRegionList embeddedList = fEmbeddedContainer.getRegions();
      if(!isEndingType) {
        // check for ending context
        if (endTagName == null) {
          for (int i = 0; i < endTypes.length; i++) {
            isEndingType = isEndingType || (internalContext == endTypes[i]) || (embeddedList.size() - initialLength) >= 2 && (embeddedList.get(embeddedList.size()-1)).getType() == endTypes[i];
          }
        }
        else {
          isEndingType = ((isInEndTag && internalContext == XML_TAG_CLOSE) || (isInFirstTag && internalContext == XML_EMPTY_TAG_CLOSE)) && internalTagName != null && internalTagName.equals(endTagName);
        }
      }
      notFinished = notFinished && ((!isEndingType) && !isEOF() && (endTagName != null || internalContext != UNDEFINED) && !(internalContext == PROXY_CONTEXT && (embeddedList.get(embeddedList.size()-1)).getType() == UNDEFINED));
    }
    // finish adding the last context
    if (internalContext != null && internalContext != PROXY_CONTEXT) {
      ITextRegion newToken = fRegionFactory.createToken(internalContext, yychar - containerStart, yylength(), yylength());
      fEmbeddedContainer.getRegions().add(newToken);
      // DW, 4/16/2003 token regions no longer have parents
      //newToken.setParent(fEmbeddedContainer);
      fEmbeddedContainer.setLength(yychar - containerStart + yylength());
      fEmbeddedContainer.setTextLength(yychar - containerStart + yylength());
    }
    yybegin(fEmbeddedPostState);
  }
  /* user method */
  public final boolean isCaseSensitiveBlocking() {
    return fIsCaseSensitiveBlocking;
  }
  /* user method */
  public final void setCaseSensitiveBlocking(boolean newValue) {
    fIsCaseSensitiveBlocking = newValue;
  }
  /* user method */
  public boolean getBlockMarkerAllowsJSP() {
    return getBlockMarkerAllowsJSP(fCurrentTagName);
  }
  /* user method */
  public boolean getBlockMarkerAllowsJSP(String name) {
    Iterator iterator = fBlockMarkers.iterator();
    while(iterator.hasNext()) {
      BlockMarker marker = (BlockMarker)iterator.next();
      boolean casesensitive = marker.isCaseSensitive();
      if(casesensitive && marker.getTagName().equals(name))
        return marker.allowsJSP();
      else if(!casesensitive && marker.getTagName().equalsIgnoreCase(name))
        return marker.allowsJSP();
    }
    return true;
  }
  /* user method */
  public boolean getBlockMarkerCaseSensitivity() {
    return getBlockMarkerCaseSensitivity(fCurrentTagName);
  }
  public boolean getBlockMarkerCaseSensitivity(String name) {
    Iterator iterator = fBlockMarkers.iterator();
    while(iterator.hasNext()) {
      BlockMarker marker = (BlockMarker)iterator.next();
      boolean casesensitive = marker.isCaseSensitive();
      if(casesensitive && marker.getTagName().equals(name))
        return casesensitive;
      else if(!casesensitive && marker.getTagName().equalsIgnoreCase(name))
        return casesensitive;
    }
    return true;
  }
  /* user method */
  public String getBlockMarkerContext() {
    return getBlockMarkerContext(fCurrentTagName);
  }
  /* user method */
  public String getBlockMarkerContext(String name) {
    Iterator iterator = fBlockMarkers.iterator();
    while(iterator.hasNext()) {
      BlockMarker marker = (BlockMarker)iterator.next();
      if(marker.getTagName().equals(name))
        return marker.getContext();
    }
    return BLOCK_TEXT;
  }
  /* user method */
  public List getBlockMarkers() {
    return fBlockMarkers;
  }
  /* user method */
  public final int getOffset() {
    return fOffset + yychar;
  }
  private final boolean isBlockMarker() {
    return isBlockMarker(fCurrentTagName);
  }
  private final boolean isBlockMarker(String tagName) {
    if (!fIsBlockingEnabled)
      return false;
    return containsTagName(tagName);
  }
  /**
   * user method
   */
  public final void beginBlockTagScan(String newTagName) {
    beginBlockMarkerScan(newTagName, BLOCK_TEXT);
  }
  /**
   * user method
   *
   * Special tokenizer setup.  Allows tokenization to be initiated at the
   * start of a text block within a "newTagName" tag.
   *
   * Example:
   *  Tokenizer toker = new Tokenizer();
   *  toker.setCaseSensitiveBlocking(false);
   *  toker.reset(new java.io.StringReader("afiuhqwkejhtasihgalkwhtq</scripter></scr></script>asgdasga"));
   *  toker.beginBlockMarkerScan("script", BLOCK_TEXT);
   *  toker.getRegions();
   *
   * Returns:
   *  BLOCK_TEXT: 0-40
   *  XML_END_TAG_OPEN: 41-42
   *  XML_TAG_NAME: 43-48
   *  XML_TAG_CLOSE: 49-49
   *  XML_CONTENT: 50-57
   *
   */
  public final void beginBlockMarkerScan(String newTagName, String blockcontext) {
    yybegin(ST_BLOCK_TAG_SCAN);
    fCurrentTagName = newTagName;
  }

/**
* Method doScan.
*
* Returns a context region for all of the text from the current position upto the end of input or
* to right *before* the first occurence of searchString
*
* @param searchString - target string to search for ex.: "-->", "</tagname"
* @param requireTailSeparator - whether the target must be immediately followed by whitespace or '>'
* @param allowJSP - check for and allow for JSP markup <%%>
* @param context - the context of the scanned region if non-zero length
* @param exitState - the state to go to if the region was of non-zero length
* @param abortState - the state to go to if the searchString was found immediately
* @return String - the context found: the desired context on a non-zero length match, the abortContext on immediate success
* @throws IOException
*/
private final String doScan(String searchString, boolean requireTailSeparator, boolean allowJSP, boolean allowCDATA, String searchContext, int exitState, int immediateFallbackState) throws IOException {
  boolean stillSearching = true;
  boolean wasBlockingEnabled = fIsBlockingEnabled;
  try {
    // Disable further block (probably)
    fIsBlockingEnabled = false;
    int searchStringLength = searchString.length();
    int n = 0;
    char lastCheckChar;
    int i;
    boolean same = false;
    // Check for JSP starts ("<%") if the tag is global like SCRIPT or STYLE
    boolean checkJSPs = allowJSP && !fForbidJSP;
    boolean checkedForJSPsOnce = !checkJSPs;
    boolean checkedJSPsAtStartOnce = false;
   
    while (stillSearching) {
      n = 0;
      // Ensure that enough data from the input exists to compare against the search String.
      n = yy_advance();
      while(n != YYEOF && yy_currentPos < searchStringLength)
        n = yy_advance();
  //    c = (char) n;
      // If the input was too short or we've exhausted the input, stop immediately.
      if (n == YYEOF && checkedForJSPsOnce) {
        stillSearching = false;
      }
      else {
        /**
         * Look for starting JSPs "<%"
         */
        checkedForJSPsOnce = true;
        // 1) yy_currentPos - searchStringLength : There's at least searchStringLength of input available; once that's read, check for JSPs
        // ---
        // Look for a JSP beginning at current-searchStringLength; if so, backup and switch scanner states to handle it.
        // Ensure that we've not encountered a complete block (<%%>) that was *shorter* than the closeTagString and
        // thus found twice at current-targetLength [since the first scan would have come out this far anyway].
        if(checkJSPs && yy_currentPos > searchStringLength && yy_currentPos - searchStringLength != fLastInternalBlockStart &&
          yy_buffer[yy_currentPos - searchStringLength] == '<' && yy_buffer[yy_currentPos - searchStringLength + 1] == '%') {
          fLastInternalBlockStart = yy_markedPos = yy_currentPos - searchStringLength;
          yy_currentPos = yy_markedPos + 1;
          int resumeState = yystate();
          yybegin(ST_BLOCK_TAG_INTERNAL_SCAN);
          if(yy_markedPos == yy_startRead) {
            String jspContext = primGetNextToken();
            yybegin(resumeState);
            return jspContext;
          }
          return searchContext;
        }
        // 2) yy_currentPos - jspstarter.length : There's not searchStringLength of input available; check for a JSP 2 spots back in what we could read
        // ---
        // Look for a JSP beginning at the current position; this case wouldn't be handled by the preceding section
        // since it relies upon *having* closeTagStringLength amount of input to work as designed.  Must be sure we don't
        // spill over the end of the buffer while checking.
        else if(checkJSPs && yy_startRead != fLastInternalBlockStart && yy_currentPos > 0 && yy_currentPos < yy_buffer.length - 1 &&
            yy_buffer[yy_currentPos - 1] == '<' && yy_buffer[yy_currentPos] == '%') {
          fLastInternalBlockStart = yy_markedPos = yy_currentPos - 1;
          yy_currentPos = yy_markedPos + 1;
          int resumeState = yystate();
          yybegin(ST_BLOCK_TAG_INTERNAL_SCAN);
          if(yy_markedPos == yy_startRead) {
            String jspContext = primGetNextToken();
            yybegin(resumeState);
            return jspContext;
          }
          return searchContext;
        }
        // 3) yy_currentPos..(yy_currentPos+jspStartlength-1) : Check at the start of the block one time
        // ---
        // Look for a JSP beginning immediately in the block area; this case wouldn't be handled by the preceding section
        // since it relies upon yy_currentPos equaling exactly the previous end +1 to work as designed.
        else if(checkJSPs && !checkedJSPsAtStartOnce && yy_startRead != fLastInternalBlockStart && yy_startRead > 0 &&
            yy_startRead < yy_buffer.length - 1 && yy_buffer[yy_startRead] == '<' && yy_buffer[yy_startRead + 1] == '%') {
          checkedJSPsAtStartOnce = true;
          fLastInternalBlockStart = yy_markedPos = yy_startRead;
          yy_currentPos = yy_markedPos + 1;
          int resumeState = yystate();
          yybegin(ST_BLOCK_TAG_INTERNAL_SCAN);
          if(yy_markedPos == yy_startRead) {
            String jspContext = primGetNextToken();
            yybegin(resumeState);
            return jspContext;
          }
          return searchContext;
        }
 
 
        /**
         * Look for starting CDATA "<![CDATA["
         */
        // 1) yy_currentPos - searchStringLength: There's at least searchStringLength of input available; once that's read, check for CDATA
        // ---
        // Look for a CDATA beginning at current-searchStringLength; if so, backup and switch scanner states to handle it.
        // Ensure that we've not encountered a complete block (<[!CDATA[]]>) that was *shorter* than the closeTagString and
        // thus found twice at current-targetLength [since the first scan would have come out this far anyway].
  /*      if(checkCDATA && yy_currentPos > searchStringLength && yy_currentPos + searchStringLength < yy_buffer.length && yy_currentPos - searchStringLength != fLastInternalBlockStart &&
          charsMatch(cdataStarter, yy_buffer, 0, yy_currentPos - searchStringLength)) {
          fLastInternalBlockStart = yy_markedPos = yy_currentPos - searchStringLength;
          yy_currentPos = yy_markedPos + 1;
          int resumeState = yystate();
          // go to a state where CDATA can be found
          if (fEmbeddedContainer == null) {
            fEmbeddedContainer = new ContextRegionContainer();
            fEmbeddedContainer.setType(searchContext);
            fEmbeddedContainer.setStart(yychar);
          }
          ITextRegion newToken = fRegionFactory.createToken(searchContext, yychar, yylength(), yylength());
          fEmbeddedContainer.getRegions().add(newToken);
          fEmbeddedContainer.setLength(fEmbeddedContainer.getLength() + yylength());
          fEmbeddedContainer.setTextLength(fEmbeddedContainer.getTextLength() + yylength());
          yybegin(YYINITIAL);
          String context = primGetNextToken();
          if(context.equals(XMLRegionContexts.XML_CDATA_OPEN)) {
            assembleEmbeddedContainer(XMLRegionContexts.XML_CDATA_OPEN, XMLRegionContexts.XML_CDATA_CLOSE);
          }
          yybegin(resumeState);
          return searchContext;
        }
  *//*
        // 2) yy_currentPos - cdataStarter.length: There's not searchStringLength of input available; check for a CDATA right here spots back in what we could read
        // ---
        // Look for a JSP beginning at the current position; this case wouldn't be handled by the preceding section
        // since it relies upon *having* closeTagStringLength amount of input to work as designed.  Must be sure we don't
        // spill over the end of the buffer while checking.
        else if(checkCDATA && yy_startRead != fLastInternalBlockStart && yy_currentPos > 0 && yy_currentPos < yy_buffer.length - 1 &&
            yy_buffer[yy_currentPos - 1] == '<' && yy_buffer[yy_currentPos] == '%') {
          fLastInternalBlockStart = yy_markedPos = yy_currentPos - 1;
          yy_currentPos = yy_markedPos + 1;
          int resumeState = yystate();
          yybegin(ST_BLOCK_TAG_INTERNAL_SCAN);
          if(yy_markedPos == yy_startRead) {
            String jspContext = primGetNextToken();
            yybegin(resumeState);
            return jspContext;
          }
          return searchContext;
        }
        // 3) yy_currentPos : Check at the start of the block one time
        // ---
        // Look for a JSP beginning immediately in the block area; this case wouldn't be handled by the preceding section
        // since it relies upon yy_currentPos equaling exactly the previous end +1 to work as designed.
        else if(checkCDATA && !checkedForCDATAOnce && yy_startRead != fLastInternalBlockStart && yy_startRead > 0 &&
            yy_startRead < yy_buffer.length - 1 && yy_buffer[yy_startRead] == '<' && yy_buffer[yy_startRead + 1] == '%') {
          checkedForCDATAOnce = true;
          fLastInternalBlockStart = yy_markedPos = yy_startRead;
          yy_currentPos = yy_markedPos + 1;
          int resumeState = yystate();
          yybegin(ST_BLOCK_TAG_INTERNAL_SCAN);
          if(yy_markedPos == yy_startRead) {
            String jspContext = primGetNextToken();
            yybegin(resumeState);
            return jspContext;
          }
          return searchContext;
        }
  */
        // Check the characters in the target versus the last targetLength characters read from the buffer
        // and see if it matches
        if (n == YYEOF) {
          stillSearching = false;
        }
        else {
          same = true;
          // safety check for array accesses
          if(yy_currentPos >= searchStringLength && yy_currentPos <= yy_buffer.length) {
            for(i = 0; i < searchStringLength && same; i++) {
              if(fIsCaseSensitiveBlocking)
                same = yy_buffer[i + yy_currentPos - searchStringLength] == searchString.charAt(i);
              else
                same = Character.toLowerCase(yy_buffer[i + yy_currentPos - searchStringLength]) == Character.toLowerCase(searchString.charAt(i));
            }
          }
          // safety check failed; no match is possible right now
          else {
            same = false;
          }
        }
        if (same && requireTailSeparator && yy_currentPos < yy_buffer.length) {
          // Additional check for close tags to ensure that targetString="</script" doesn't match
          // "</scriptS"
          lastCheckChar = yy_buffer[yy_currentPos];
          // Succeed on "</script>" and "</script "
          if(lastCheckChar == '>' || Character.isWhitespace(lastCheckChar))
            stillSearching = false;
        }
        else {
          stillSearching = !same || (yy_currentPos < yy_startRead + searchStringLength);
        }
      }
    }
    if (n != YYEOF || same) {
      // We've stopped short of the end or definitely found a match
      yy_markedPos = yy_currentPos - searchStringLength;
      yy_currentPos = yy_markedPos + 1;
      // If the searchString occurs at the very beginning of what would have
      // been a Block, resume scanning normally immediately
      if (yy_markedPos == yy_startRead) {
        yybegin(immediateFallbackState);
        return primGetNextToken();
      }
    }
    else {
      // We ran through the rest of the input
      yy_markedPos = yy_currentPos;
      yy_currentPos++;
    }
    yybegin(exitState);
    // If the ending occurs at the very beginning of what would have
    // been a Block, resume scanning normally immediately
    if(yy_markedPos == yy_startRead)
      return primGetNextToken();
    return searchContext;
  }
  finally {
    fIsBlockingEnabled = wasBlockingEnabled;
  }
}
/**
* user method
* does a lookahead for the current tag name
*/
private final String doBlockTagScan() throws IOException {
  fIsCaseSensitiveBlocking = getBlockMarkerCaseSensitivity();
  return doScan("</" + fCurrentTagName, true, getBlockMarkerAllowsJSP(), true, getBlockMarkerContext(fCurrentTagName), YYINITIAL, YYINITIAL);
}
  /**
   * user method
   *
   * Converts the raw context String returned by the primGetNextToken()
   * method into a full ITextRegion by pulling in values for the
   * current offset within the scanning text.
   *
   * Returns null when EOF is encountered and attaches intermittently
   * discovered whitespace onto the end of useful regions.
   *
   * Note that this algorithm caches the token following the one being returned
   * so that whitespace can be collapsed.
   */
  public final ITextRegion getNextToken() throws IOException {
    fEmbeddedContainer = null;
    // load the starting non-whitespace token (assume that it is so)
    if (fShouldLoadBuffered) {
      if (fBufferedEmbeddedContainer != null) {
        ITextRegion container = fBufferedEmbeddedContainer;
        fBufferedEmbeddedContainer = null;
        fShouldLoadBuffered = false;
        return container;
      }
      context = fBufferedContext;
      start = fBufferedStart;
      textLength = length = fBufferedLength;
      fShouldLoadBuffered = false;
    } else {
      context = primGetNextToken();
      if (context == PROXY_CONTEXT) {
        return fEmbeddedContainer;
      } else if (context == XML_TAG_NAME || f_context == JSP_ROOT_TAG_NAME || f_context == JSP_DIRECTIVE_NAME) {
        if(containsTagName(yy_buffer, yy_startRead, yy_markedPos-yy_startRead))
          fCurrentTagName = yytext();
        else
          fCurrentTagName = null;
      } else if (context == XML_TAG_OPEN) {
        fIsBlockingEnabled = true;
      } else if (context == XML_END_TAG_OPEN) {
        fIsBlockingEnabled = false;
      }
      start = yychar;
      textLength = length = yylength();
      if (yy_atEOF) {
        fTokenCount++;
        return null;
      }
    }
    // store the next token
    f_context = primGetNextToken();
    if (f_context == PROXY_CONTEXT) {
      fBufferedEmbeddedContainer = fEmbeddedContainer;
      fShouldLoadBuffered = true;
    } else if (f_context == XML_TAG_NAME || f_context == JSP_ROOT_TAG_NAME || f_context == JSP_DIRECTIVE_NAME) {
      if(containsTagName(yy_buffer, yy_startRead, yy_markedPos-yy_startRead))
        fCurrentTagName = yytext();
      else
        fCurrentTagName = null;
    } else if (f_context == XML_TAG_OPEN) {
      fIsBlockingEnabled = true;
    } else if (f_context == XML_END_TAG_OPEN) {
      fIsBlockingEnabled = false;
    } else if (f_context == PROXY_UNKNOWN_CONTEXT) {
      fBufferedEmbeddedContainer = fProxyUnknownRegion;
    }
    fBufferedContext = f_context;
    fBufferedStart = yychar;
    fBufferedLength = yylength();
    fShouldLoadBuffered = true;
    if (fBufferedContext == WHITE_SPACE) {
      fShouldLoadBuffered = false;
      length += fBufferedLength;
    }
    if (context == null) {
      // EOF
      if (Debug.debugTokenizer) {
        System.out.println(getClass().getName() + " discovered " + fTokenCount + " tokens."); //$NON-NLS-2$//$NON-NLS-1$
      }
      return null;
    }
    fTokenCount++;
    return fRegionFactory.createToken(context, start, textLength, length, null, fCurrentTagName);
  }
  /* user method */
  public JSPTokenizer(){
    super();
  }
  /* user method */
  public JSPTokenizer(char[] charArray){
      this(new CharArrayReader(charArray));
  }
  /* user method */
  public void reset(char[] charArray) {
    reset(new CharArrayReader(charArray), 0);
  }
  /* user method */
  public void reset(char[] charArray, int newOffset) {
    reset(new CharArrayReader(charArray), newOffset);
  }
  /* user method */
  public void reset(java.io.InputStream in) {
    reset(new java.io.InputStreamReader(in), 0);
  }
  /* user method */
  public void reset(java.io.InputStream in, int newOffset) {
    reset(new java.io.InputStreamReader(in), newOffset);
  }
  /* user method */
  public void reset(java.io.Reader in) {
    reset(in, 0);
  }
  /**
   * user method *
   *
   * Reset internal counters and vars to "newly created" values, in the hopes
   * that resetting a pre-existing tokenizer is faster than creating a new one.
   *
   * This method contains code blocks that were essentially duplicated from the
   * <em>generated</em> output of this specification before this method was
   * added.  Those code blocks were under the above copyright.
   */
  public void reset(java.io.Reader in, int newOffset) {
    if (Debug.debugTokenizer) {
      System.out.println("resetting tokenizer");//$NON-NLS-1$
    }
    fOffset = newOffset;
 
    /* the input device */
    yy_reader = in;
 
    /* the current state of the DFA */
    yy_state = 0;
 
    /* the current lexical state */
    yy_lexical_state = YYINITIAL;
 
    /* this buffer contains the current text to be matched and is
    the source of the yytext() string */
    java.util.Arrays.fill(yy_buffer, (char)0);
 
    /* the textposition at the last accepting state */
    yy_markedPos = 0;
 
    /* the textposition at the last state to be included in yytext */
    yy_pushbackPos = 0;
 
    /* the current text position in the buffer */
    yy_currentPos = 0;
 
    /* startRead marks the beginning of the yytext() string in the buffer */
    yy_startRead = 0;
 
    /**
     * endRead marks the last character in the buffer, that has been read
     * from input
     */
    yy_endRead = 0;
 
    /* number of newlines encountered up to the start of the matched text */
    //yyline = 0;
 
    /* the number of characters up to the start of the matched text */
    yychar = 0;
 
    /* yy_atEOF == true <=> the scanner has returned a value for EOF */
    yy_atEOF = false;
 
    /* denotes if the user-EOF-code has already been executed */
    yy_eof_done = false;
 
 
    /* user vars: */
    fTokenCount = 0;
  
    fShouldLoadBuffered = false;
    fBufferedContext = null;
    fBufferedStart = 1;
    fBufferedLength = 0;
    fStateStack = new IntStack();
 
    fLastInternalBlockStart = -1;
 
    context = null;
    start = 0;
    textLength = 0;
    length = 0;
 
    fEmbeddedContainer = null;
   
    fELlevel = 0;
  }
  /**
   * user method
   *
   */
  public BlockTokenizer newInstance() {
    JSPTokenizer newInstance = new JSPTokenizer();
    // global tagmarkers can be shared; they have no state and
    // are never destroyed (e.g. 'release')
    for(int i = 0; i < fBlockMarkers.size(); i++) {
      BlockMarker blockMarker = (BlockMarker) fBlockMarkers.get(i);
      if(blockMarker.isGlobal())
        newInstance.addBlockMarker(blockMarker);
    }
    for(int i = 0; i < fNestablePrefixes.size(); i++) {
      TagMarker marker = (TagMarker) fNestablePrefixes.get(i);
      if(marker.isGlobal())
        newInstance.addNestablePrefix(marker);
    }
    return newInstance;
  }
  /* user method */
  private final String scanXMLCommentText() throws IOException {
    // Scan for '-->' and return the text up to that point as
    //   XML_COMMENT_TEXT unless the string occurs IMMEDIATELY, in which
    //  case change to the ST_XML_COMMENT_END state and return the next
    //  context as usual.
    return doScan("-->", false, true, true, XML_COMMENT_TEXT, ST_XML_COMMENT_END, ST_XML_COMMENT_END);
  }
  /* user method */
  private final String scanJSPCommentText() throws IOException {
    // Scan for '--%>' and return the text up to that point as
    //   JSP_COMMENT_TEXT unless the string occurs IMMEDIATELY, in which
    //  case change to the ST_JSP_COMMENT_END state and return the next
    //  context as usual.
    return doScan("--%>", false, false, true, JSP_COMMENT_TEXT, ST_JSP_COMMENT_END, ST_JSP_COMMENT_END);
  }
 
  /* user method */
  private boolean isJspTag() {
    return (fContainerTag && fEmbeddedContainer != null) || (fContainerTag && fInTagContainer) || (fEmbeddedTag && fInTagEmbedded);
  }


  /**
   * Creates a new scanner
   * There is also a java.io.InputStream version of this constructor.
   *
   * @param   in  the java.io.Reader to read input from.
   */
  public JSPTokenizer(java.io.Reader in) {
    this.yy_reader = in;
  }

  /**
   * Creates a new scanner.
   * There is also java.io.Reader version of this constructor.
   *
   * @param   in  the java.io.Inputstream to read input from.
   */
  public JSPTokenizer(java.io.InputStream in) {
    this(new java.io.InputStreamReader(in));
  }

  /**
   * Unpacks the compressed DFA transition table.
   *
   * @param packed   the packed transition table
   * @return         the unpacked transition table
   */
  private static int [] yy_unpack(String packed) {
    int [] trans = new int[35358];
    int i = 0/* index in packed string  */
    int j = 0/* index in unpacked array */
    while (i < 9486) {
      int count = packed.charAt(i++);
      int value = packed.charAt(i++);
      value--;
      do trans[j++] = value; while (--count > 0);
    }
    return trans;
  }

  /**
   * Unpacks the compressed character translation table.
   *
   * @param packed   the packed character translation table
   * @return         the unpacked character translation table
   */
  private static char [] yy_unpack_cmap(String packed) {
    char [] map = new char[0x10000];
    int i = 0/* index in packed string  */
    int j = 0/* index in unpacked array */
    while (i < 1376) {
      int  count = packed.charAt(i++);
      char value = packed.charAt(i++);
      do map[j++] = value; while (--count > 0);
    }
    return map;
  }


  /**
   * Gets the next input character.
   *
   * @return      the next character of the input stream, EOF if the
   *              end of the stream is reached.
   * @exception   IOException  if any I/O-Error occurs
   */
  private int yy_advance() throws java.io.IOException {

    /* standard case */
    if (yy_currentPos < yy_endRead) return yy_buffer[yy_currentPos++];

    /* if the eof is reached, we don't need to work hard */
    if (yy_atEOF) return YYEOF;

    /* otherwise: need to refill the buffer */

    /* first: make room (if you can) */
    if (yy_startRead > 0) {
      System.arraycopy(yy_buffer, yy_startRead,
                       yy_buffer, 0,
                       yy_endRead-yy_startRead);

      /* translate stored positions */
      yy_endRead-= yy_startRead;
      yy_currentPos-= yy_startRead;
      yy_markedPos-= yy_startRead;
      yy_pushbackPos-= yy_startRead;
      yy_startRead = 0;
    }

    /* is the buffer big enough? */
    if (yy_currentPos >= yy_buffer.length) {
      /* if not: blow it up */
      char newBuffer[] = new char[yy_currentPos*2];
      System.arraycopy(yy_buffer, 0, newBuffer, 0, yy_buffer.length);
      yy_buffer = newBuffer;
    }

    /* finally: fill the buffer with new input */
    int numRead = yy_reader.read(yy_buffer, yy_endRead,
                                            yy_buffer.length-yy_endRead);

    if ( numRead == -1 ) return YYEOF;

    yy_endRead+= numRead;

    return yy_buffer[yy_currentPos++];
  }

   
  /**
   * Closes the input stream.
   */
  final public void yyclose() throws java.io.IOException {
    yy_atEOF = true;            /* indicate end of file */
    yy_endRead = yy_startRead;  /* invalidate buffer    */
    yy_reader.close();
  }


  /**
   * Returns the current lexical state.
   */
  final public int yystate() {
    return yy_lexical_state;
  }

  /**
   * Enters a new lexical state
   *
   * @param newState the new lexical state
   */
  final public void yybegin(int newState) {
    yy_lexical_state = newState;
  }


  /**
   * Returns the text matched by the current regular expression.
   */
  final public String yytext() {
    return new String( yy_buffer, yy_startRead, yy_markedPos-yy_startRead );
  }

  /**
   * Returns the length of the matched text region.
   */
  final public int yylength() {
    return yy_markedPos-yy_startRead;
  }


  /**
   * Reports an error that occured while scanning - from the SED JFlex skeleton
   *
   * @param   errorCode  the code of the errormessage to display
   */
  private void yy_ScanError(int errorCode) {
    try {
      Logger.log(Logger.ERROR, YY_ERROR_MSG[errorCode]);
    }
    catch (ArrayIndexOutOfBoundsException e) {
      Logger.log(Logger.ERROR, YY_ERROR_MSG[YY_UNKNOWN_ERROR]);
    }
    // DO NOT EXIT the VM on an error
    // System.exit(1);
  }


  /**
   * Pushes the specified amount of characters back into the input stream.
   *
   * They will be read again by then next call of the scanning method
   *
   * @param number  the number of characters to be read again.
   *                This number must not be greater than yylength()!
   */
  void yypushback(int number) {
    if ( number > yylength() )
      yy_ScanError(YY_PUSHBACK_2BIG);

    yy_markedPos -= number;
  }

  /**
   * user method - skeleton.sed
   */
  protected final boolean containsTagName(char[] markerTagName, int offset, int tagnameLength) {
    for(int j = 0; j < fBlockMarkers.size(); j++) {
      BlockMarker marker = (BlockMarker)fBlockMarkers.get(j);
      if(marker.getTagName().length() == tagnameLength) {
        boolean matchesSoFar = true;
        for(int i = 0; i < tagnameLength && matchesSoFar; i++) {
          if(marker.isCaseSensitive()) {
            if(marker.getTagName().charAt(i) != markerTagName[i + offset])
              matchesSoFar = false;
          }
          else {
            if(Character.toLowerCase(marker.getTagName().charAt(i)) != Character.toLowerCase(markerTagName[i + offset]))
              matchesSoFar = false;
          }
        }
        if(matchesSoFar)
          return true;
      }
    }
    return false;
  }

  /**
   * user method - skeleton.sed
   *
   * Return ALL of the regions scannable within the remaining text
   * Note: for verification use
   */
  public final List getRegions() {
    List tokens = new ArrayList();
    ITextRegion region = null;
    try {
      region = getNextToken();
      while(region != null) {
        if (region != null) {
          tokens.add(region);
        }
        region = getNextToken();
      }
    }
    catch (StackOverflowError e) {
      Logger.logException(getClass().getName()+": input could not be tokenized correctly at position " + getOffset(), e);//$NON-NLS-1$
      throw e;
    }
    catch (Exception e) {
      // Since this is convenience method and NOT the recommended
      // way of getting tokens, many errors are simply hidden
      Logger.logException("Exception not handled retrieving regions: " + e.getLocalizedMessage(), e);//$NON-NLS-1$
    }
    return tokens;
  }
  /**
   * user method - skeleton.sed
   */
  private final void dump(String s) {
    if (Debug.debugTokenizer) {
      System.out.println(s + " (" + yychar + "-" + //$NON-NLS-2$//$NON-NLS-1$
        (yylength() + yychar) + "):\'" +//$NON-NLS-1$
          StringUtils.escape(yytext()) + "\'");//$NON-NLS-1$
    }
  }
  /* user method  - skeleton.sed */
  public final boolean isEOF() {
    return yy_atEOF;
  }
/* user method - skeleton.sed */
protected final boolean containsTagName(String markerTagName) {
  Iterator blocks = fBlockMarkers.iterator();
  while(blocks.hasNext()) {
    BlockMarker marker = (BlockMarker)blocks.next();
    if(marker.isCaseSensitive()) {
      if(marker.getTagName().equals(markerTagName))
        return true;
    }
    else {
      if(marker.getTagName().equalsIgnoreCase(markerTagName))
        return true;
    }
  }
  return false;
}

  /**
   * Contains user EOF-code, which will be executed exactly once,
   * when the end of file is reached
   */
  private void yy_do_eof() {
    if (!yy_eof_done) {
      yy_eof_done = true;
    // do nothing, this is the downstream parser's job

    }
  }


  /**
   * Resumes scanning until the next regular expression is matched,
   * the end of input is encountered or an I/O-Error occurs.
   *
   * @return      the next token
   * @exception   IOException  if any I/O-Error occurs
   */
  public String primGetNextToken() throws java.io.IOException {
    int yy_input;
    int yy_action;

    yy_pushbackPos = -1;
    boolean yy_was_pushback;

    while (true) {

      yychar+= yylength();

      yy_action = -1;

      yy_currentPos = yy_startRead = yy_markedPos;

      yy_state = yy_lexical_state;

      yy_was_pushback = false;

      yy_forAction: {
        while (true) {
   
          yy_input = yy_advance();

          if ( yy_input == YYEOF ) break yy_forAction;

          int yy_next = yytrans[ yy_rowMap[yy_state] + yycmap[yy_input] ];
          if (yy_next == -1) break yy_forAction;
          yy_state = yy_next;

          int yy_attributes = YY_ATTRIBUTE[yy_state];
          if ( (yy_attributes & 2) > 0 )
            yy_pushbackPos = yy_currentPos;

          if ( (yy_attributes & 1) > 0 ) {
            yy_was_pushback = (yy_attributes & 4) > 0;
            yy_action = yy_state;
            yy_markedPos = yy_currentPos;
            if ( (yy_attributes & 8) > 0 ) break yy_forAction;
          }

        }
      }

      if (yy_was_pushback)
        yy_markedPos = yy_pushbackPos;

      switch (yy_action) {   

        case 124:
        case 129:
        case 130:
        case 290:
        case 296:
        case 297:
        case 434:
        case 437:
        case 544:
          /* only allow for non-JSP tags for this does not obey JSP quoting rules */
  if(Debug.debugTokenizer)
    dump("attr value");//$NON-NLS-1$
  fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
  fEmbeddedPostState = ST_XML_EQUALS;
        yybegin(ST_XML_ATTRIBUTE_NAME);
        return XML_TAG_ATTRIBUTE_VALUE;
}
        case 719: break;
        case 169:
        case 174:
        case 175:
        case 350:
        case 356:
        case 357:
        case 471:
        case 473:
        case 475:
        case 477:
        case 560:
          /* JSP attribute values have escape semantics */
  if(Debug.debugTokenizer)
    dump("jsp attr value");//$NON-NLS-1$
  fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
  fEmbeddedPostState = ST_XML_EQUALS;
  yybegin(ST_XML_ATTRIBUTE_NAME);
  return XML_TAG_ATTRIBUTE_VALUE;
}
        case 720: break;
        case 686:
        case 691:
        case 698:
        case 703:
          {
  if(Debug.debugTokenizer)
    dump("jsp directive tag name");//$NON-NLS-1$
  fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
  fEmbeddedPostState = ST_XML_EQUALS;
        yybegin(ST_XML_ATTRIBUTE_NAME);
        return JSP_DIRECTIVE_NAME;
}
        case 721: break;
        case 661:
          {
  if(Debug.debugTokenizer)
    dump("XSL processing instruction target");//$NON-NLS-1$
  fEmbeddedPostState = ST_XML_EQUALS;
        yybegin(ST_XML_PI_ATTRIBUTE_NAME);
        return XML_TAG_NAME;
}
        case 722: break;
        case 644:
        case 647:
        case 648:
        case 649:
        case 650:
        case 651:
        case 652:
          {
  if(Debug.debugTokenizer)
    dump("\nCDATA start");//$NON-NLS-1$
  fStateStack.push(yystate());
  yybegin(ST_CDATA_TEXT);
  return XML_CDATA_OPEN;
}
        case 723: break;
        case 636:
          {
  if(Debug.debugTokenizer)
    dump("jsp:root tag name");//$NON-NLS-1$
  fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
  fEmbeddedPostState = ST_XML_EQUALS;
        yybegin(ST_XML_ATTRIBUTE_NAME);
        return JSP_ROOT_TAG_NAME;
}
        case 724: break;
        case 627:
          {
  if(Debug.debugTokenizer)
    dump("element");//$NON-NLS-1$
  yybegin(ST_XML_ELEMENT_DECLARATION);
  return XML_ELEMENT_DECLARATION;
}
        case 725: break;
        case 626:
          {
  if(Debug.debugTokenizer)
    dump("attlist");//$NON-NLS-1$
  yybegin(ST_XML_ATTLIST_DECLARATION);
  return XML_ATTLIST_DECLARATION;
}
        case 726: break;
        case 625:
          {
  if(Debug.debugTokenizer)
    dump("doctype");//$NON-NLS-1$
  yybegin(ST_XML_DOCTYPE_DECLARATION);
  return XML_DOCTYPE_DECLARATION;
}
        case 727: break;
        case 610:
          {
  if(Debug.debugTokenizer)
    dump("doctype external id");//$NON-NLS-1$
  fEmbeddedHint = XML_DOCTYPE_EXTERNAL_ID_PUBREF;
  yybegin(ST_XML_DOCTYPE_ID_PUBLIC);
  return XML_DOCTYPE_EXTERNAL_ID_PUBLIC;
}
        case 728: break;
        case 609:
          {
  if(Debug.debugTokenizer)
    dump("doctype external id");//$NON-NLS-1$
  fEmbeddedHint = XML_DOCTYPE_EXTERNAL_ID_SYSREF;
  yybegin(ST_XML_DOCTYPE_ID_SYSTEM);
  return XML_DOCTYPE_EXTERNAL_ID_SYSTEM;
}
        case 729: break;
        case 603:
          {
  if(Debug.debugTokenizer)
    dump("DHTML processing instruction target");//$NON-NLS-1$
  fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
  fEmbeddedPostState = ST_XML_EQUALS;
        yybegin(ST_DHTML_ATTRIBUTE_NAME);
        return XML_TAG_NAME;
}
        case 730: break;
        case 578:
        case 619:
        case 620:
          {
  return JSP_VBL_QUOTED_CONTENT;
}
        case 731: break;
        case 568:
        case 615:
        case 616:
          {
  return JSP_EL_QUOTED_CONTENT;
}
        case 732: break;
        case 559:
          {
  if(Debug.debugTokenizer)
    dump("\nJSP comment close");//$NON-NLS-1$
  yybegin(YYINITIAL);
  return JSP_COMMENT_CLOSE;
}
        case 733: break;
        case 546:
          {
  if (Debug.debugTokenizer) {
    System.out.println("begin embedded region: " + fEmbeddedHint+", el-unquoted");//$NON-NLS-1$
  }
  fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
  fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
  fStateStack.push(yystate());
  if(yylength() > 2)
    yypushback(yylength() -2);
  if(Debug.debugTokenizer)
    dump("VBL in attr value");//$NON-NLS-1$
  yybegin(ST_JSP_VBL);
  fELlevel++;
  assembleEmbeddedContainer(JSP_VBL_OPEN, new String[]{JSP_VBL_CLOSE});
  fStateStack.pop();
  yybegin(ST_XML_ATTRIBUTE_NAME);
  fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
  fEmbeddedPostState = ST_XML_EQUALS;
  return PROXY_CONTEXT;
}
        case 734: break;
        case 545:
          {
  if (Debug.debugTokenizer) {
    System.out.println("begin embedded region: " + fEmbeddedHint+", el-unquoted");//$NON-NLS-1$
  }
  fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
  fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
  fStateStack.push(yystate());
  if(yylength() > 2)
    yypushback(yylength() -2);
  if(Debug.debugTokenizer)
    dump("EL in attr value");//$NON-NLS-1$
  yybegin(ST_JSP_EL);
  fELlevel++;
  assembleEmbeddedContainer(JSP_EL_OPEN, new String[]{JSP_EL_CLOSE});
  fStateStack.pop();
  yybegin(ST_XML_ATTRIBUTE_NAME);
  fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
  fEmbeddedPostState = ST_XML_EQUALS;
  return PROXY_CONTEXT;
}
        case 735: break;
        case 537:
          {
  if(Debug.debugTokenizer)
    dump("\nCharRef");//$NON-NLS-1$
  return XML_CHAR_REFERENCE;
}
        case 736: break;
        case 534:
          {
  if(Debug.debugTokenizer)
    dump("\ncomment start");//$NON-NLS-1$
  fEmbeddedHint = XML_COMMENT_TEXT;
  fEmbeddedPostState = ST_XML_COMMENT;
  yybegin(ST_XML_COMMENT);
  return XML_COMMENT_OPEN;
}
        case 737: break;
        case 533:
        case 554:
        case 557:
        case 561:
        case 562:
        case 564:
        case 566:
        case 569:
        case 571:
        case 572:
        case 574:
        case 576:
        case 579:
          {
  /* JSP comment begun (anywhere)
   * A consequence of the start anywhere possibility is that the
   *  incoming state must be checked to see if it's erroneous
   *  due to the order of precedence generated
   */
  // begin sanity checks
  if(yystate() == ST_JSP_CONTENT) {
    // at the beginning?!
    yypushback(3);
    return JSP_CONTENT;
  }
  else if(yystate() == ST_BLOCK_TAG_SCAN) {
    yypushback(4);
    return doBlockTagScan();
  }
  else if(yystate() == ST_XML_COMMENT) {
    yypushback(4);
    return scanXMLCommentText();
  }
  else if(yystate() == ST_JSP_COMMENT) {
    yypushback(4);
    return scanJSPCommentText();
  }
  else if(yystate() == ST_BLOCK_TAG_INTERNAL_SCAN)  {
    yybegin(ST_JSP_COMMENT);
    assembleEmbeddedContainer(JSP_COMMENT_OPEN, JSP_COMMENT_CLOSE);
    if(yystate() == ST_BLOCK_TAG_INTERNAL_SCAN)
      yybegin(ST_BLOCK_TAG_SCAN);
    return PROXY_CONTEXT;
  }
  // finished sanity checks
  if(yystate()==YYINITIAL) {
    // the simple case, just a regular scriptlet out in content
    if(Debug.debugTokenizer)
      dump("\nJSP comment start");//$NON-NLS-1$
    yybegin(ST_JSP_COMMENT);
    return JSP_COMMENT_OPEN;
  }
  else {
    if (Debug.debugTokenizer) {
      System.out.println("begin embedded region: " + fEmbeddedHint+", jspCommentStart");//$NON-NLS-1$
    }
    if(Debug.debugTokenizer)
      dump("JSP comment start");//$NON-NLS-1$
    if(yystate() == ST_XML_ATTRIBUTE_VALUE_DQUOTED)
      fEmbeddedPostState = ST_XML_ATTRIBUTE_VALUE_DQUOTED;
    else if(yystate() == ST_XML_ATTRIBUTE_VALUE_SQUOTED)
      fEmbeddedPostState = ST_XML_ATTRIBUTE_VALUE_SQUOTED;
    else if(yystate() == ST_CDATA_TEXT) {
      fEmbeddedPostState = ST_CDATA_TEXT;
      fEmbeddedHint = XML_CDATA_TEXT;
    }
    yybegin(ST_JSP_COMMENT);
    // the comment container itself will act as comment text
    fEmbeddedHint = JSP_COMMENT_TEXT;
    assembleEmbeddedContainer(JSP_COMMENT_OPEN, JSP_COMMENT_CLOSE);
    if(yystate() == ST_BLOCK_TAG_INTERNAL_SCAN) {
      yybegin(ST_BLOCK_TAG_SCAN);
      return BLOCK_TEXT;
    }
    /*
     * required help for successive embedded regions; mark this one as a
     * comment so it will be otherwise ignored but preserved (which is why
     * we can't use white-space)
     */
    if(yystate() == ST_XML_TAG_NAME) {
      fEmbeddedHint = XML_TAG_NAME;
      fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
    }
    else if((yystate() == ST_XML_ATTRIBUTE_NAME || yystate() == ST_XML_EQUALS)) {
      fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
      fEmbeddedPostState = ST_XML_EQUALS;
    }
    else if(yystate() == ST_XML_ATTRIBUTE_VALUE) {
      fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
      fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
    }
    else if(yystate() == ST_JSP_ATTRIBUTE_VALUE) {
      fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
      fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
    }
    return PROXY_CONTEXT;
  }
}
        case 738: break;
        case 418:
        case 419:
          {
  if(Debug.debugTokenizer)
    dump("XML processing instruction target");//$NON-NLS-1$
  fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
  fEmbeddedPostState = ST_XML_EQUALS;
        yybegin(ST_XML_PI_ATTRIBUTE_NAME);
        return XML_TAG_NAME;
}
        case 739: break;
        case 417:
          {
  if(Debug.debugTokenizer)
    dump("comment end");//$NON-NLS-1$
  fEmbeddedHint = UNDEFINED;
  yybegin(YYINITIAL);
  return XML_COMMENT_CLOSE;
}
        case 740: break;
        case 416:
          {
  if(Debug.debugTokenizer)
    dump("CDATA end");//$NON-NLS-1$
  yybegin(fStateStack.pop());
  return XML_CDATA_CLOSE;
}
        case 741: break;
        case 414:
          {
  yybegin(ST_JSP_VBL);
  if(yylength() > 2)
    yypushback(yylength() - 2);
  fELlevel++;
  fEmbeddedHint = XML_CONTENT;
  fEmbeddedPostState = YYINITIAL;
  assembleEmbeddedContainer(JSP_VBL_OPEN, JSP_VBL_CLOSE);
  fEmbeddedHint = XML_CONTENT;
  yybegin(YYINITIAL);
  return PROXY_CONTEXT;
}
        case 742: break;
        case 413:
          {
  if(Debug.debugTokenizer)
    dump("\nPEReference");//$NON-NLS-1$
  return XML_PE_REFERENCE;
}
        case 743: break;
        case 411:
          {
  yybegin(ST_JSP_EL);
  if(yylength() > 2)
    yypushback(yylength() - 2);
  fELlevel++;
  fEmbeddedHint = XML_CONTENT;
  fEmbeddedPostState = YYINITIAL;
  assembleEmbeddedContainer(JSP_EL_OPEN, JSP_EL_CLOSE);
  fEmbeddedHint = XML_CONTENT;
  yybegin(YYINITIAL);
  return PROXY_CONTEXT;
}
        case 744: break;
        case 407:
          {
  if(Debug.debugTokenizer)
    dump("\nEntityRef");//$NON-NLS-1$
  return XML_ENTITY_REFERENCE;
}
        case 745: break;
        case 401:
        case 458:
        case 468:
        case 483:
        case 488:
        case 493:
        case 498:
        case 504:
        case 510:
        case 514:
        case 519:
        case 524:
        case 530:
          {
  /* JSP expression begun (anywhere)
   * A consequence of the start anywhere possibility is that the
   *  incoming state must be checked to see if it's erroneous
   *  due to the order of precedence generated
   */
  // begin sanity checks
  if(yystate() == ST_JSP_CONTENT) {
    // at the beginning?!
    yypushback(2);
    return JSP_CONTENT;
  }
  else if(yystate() == ST_BLOCK_TAG_SCAN) {
    yypushback(3);
    return doBlockTagScan();
  }
  else if(yystate() == ST_XML_COMMENT) {
    yypushback(3);
    return scanXMLCommentText();
  }
  else if(yystate() == ST_JSP_COMMENT) {
    yypushback(3);
    return scanJSPCommentText();
  }
  // end sanity checks
  fStateStack.push(yystate());
  if(fStateStack.peek()==YYINITIAL) {
    // the simple case, just an expression out in content
    if(Debug.debugTokenizer)
      dump("\nJSP expression start");//$NON-NLS-1$
    yybegin(ST_JSP_CONTENT);
    return JSP_EXPRESSION_OPEN;
  }
  else {
    if (Debug.debugTokenizer) {
      System.out.println("begin embedded region: " + fEmbeddedHint+", jspExpressionStart");//$NON-NLS-1$
    }
    if(Debug.debugTokenizer)
      dump("JSP expression start");//$NON-NLS-1$
    if(yystate() == ST_XML_ATTRIBUTE_VALUE_DQUOTED)
      fEmbeddedPostState = ST_XML_ATTRIBUTE_VALUE_DQUOTED;
    else if(yystate() == ST_XML_ATTRIBUTE_VALUE_SQUOTED)
      fEmbeddedPostState = ST_XML_ATTRIBUTE_VALUE_SQUOTED;
    else if(yystate() == ST_CDATA_TEXT) {
      fEmbeddedPostState = ST_CDATA_TEXT;
      fEmbeddedHint = XML_CDATA_TEXT;
    }
    yybegin(ST_JSP_CONTENT);
    assembleEmbeddedContainer(JSP_EXPRESSION_OPEN, JSP_CLOSE);
    if(yystate() == ST_BLOCK_TAG_INTERNAL_SCAN) {
      yybegin(ST_BLOCK_TAG_SCAN);
      return BLOCK_TEXT;
    }
    // required help for successive embedded regions
    if(yystate() == ST_XML_TAG_NAME) {
      fEmbeddedHint = XML_TAG_NAME;
      fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
    }
    else if((yystate() == ST_XML_ATTRIBUTE_NAME || yystate() == ST_XML_EQUALS)) {
      fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
      fEmbeddedPostState = ST_XML_EQUALS;
    }
    else if(yystate() == ST_XML_ATTRIBUTE_VALUE) {
      fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
      fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
    }
    else if(yystate() == ST_JSP_ATTRIBUTE_VALUE) {
      fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
      fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
    }
   
    return PROXY_CONTEXT;
  }
}
        case 746: break;
        case 400:
        case 457:
        case 467:
        case 482:
        case 487:
        case 492:
        case 497:
        case 503:
        case 509:
        case 513:
        case 518:
        case 523:
        case 529:
          {
  /* JSP declaration begun (anywhere)
   * A consequence of the start anywhere possibility is that the
   *  incoming state must be checked to see if it's erroneous
   *  due to the order of precedence generated
   */
  // begin sanity checks
  if(yystate() == ST_JSP_CONTENT) {
    // at the beginning?!
    yypushback(2);
    return JSP_CONTENT;
  }
  else if(yystate() == ST_BLOCK_TAG_SCAN) {
    yypushback(3);
    return doBlockTagScan();
  }
  else if(yystate() == ST_XML_COMMENT) {
    yypushback(3);
    return scanXMLCommentText();
  }
  else if(yystate() == ST_JSP_COMMENT) {
    yypushback(3);
    return scanJSPCommentText();
  }
  // end sanity checks
  fStateStack.push(yystate());
  if(fStateStack.peek()==YYINITIAL) {
    // the simple case, just a declaration out in content
    if(Debug.debugTokenizer)
      dump("\nJSP declaration start");//$NON-NLS-1$
    yybegin(ST_JSP_CONTENT);
    return JSP_DECLARATION_OPEN;
  }
  else {
    if (Debug.debugTokenizer) {
      System.out.println("begin embedded region: " + fEmbeddedHint+", jspDeclarationStart");//$NON-NLS-1$
    }
    if(Debug.debugTokenizer)
      dump("JSP declaration start");//$NON-NLS-1$
    if(yystate() == ST_XML_ATTRIBUTE_VALUE_DQUOTED)
      fEmbeddedPostState = ST_XML_ATTRIBUTE_VALUE_DQUOTED;
    else if(yystate() == ST_XML_ATTRIBUTE_VALUE_SQUOTED)
      fEmbeddedPostState = ST_XML_ATTRIBUTE_VALUE_SQUOTED;
    else if(yystate() == ST_CDATA_TEXT) {
      fEmbeddedPostState = ST_CDATA_TEXT;
      fEmbeddedHint = XML_CDATA_TEXT;
    }
    yybegin(ST_JSP_CONTENT);
    assembleEmbeddedContainer(JSP_DECLARATION_OPEN, JSP_CLOSE);
    if(yystate() == ST_BLOCK_TAG_INTERNAL_SCAN) {
      yybegin(ST_BLOCK_TAG_SCAN);
      return BLOCK_TEXT;
    }
    // required help for successive embedded regions
    if(yystate() == ST_XML_TAG_NAME) {
      fEmbeddedHint = XML_TAG_NAME;
      fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
    }
    else if((yystate() == ST_XML_ATTRIBUTE_NAME || yystate() == ST_XML_EQUALS)) {
      fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
      fEmbeddedPostState = ST_XML_EQUALS;
    }
    else if(yystate() == ST_XML_ATTRIBUTE_VALUE) {
      fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
      fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
    }
    else if(yystate() == ST_JSP_ATTRIBUTE_VALUE) {
      fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
      fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
    }
    return PROXY_CONTEXT;
  }
}
        case 747: break;
        case 399:
        case 456:
        case 466:
        case 481:
        case 486:
        case 491:
        case 496:
        case 502:
        case 508:
        case 512:
        case 517:
        case 522:
        case 528:
          {
  /* JSP directive begun (anywhere)
   * A consequence of the start anywhere possibility is that the
   *  incoming state must be checked to see if it's erroneous
   *  due to the order of precedence generated
   */
  // begin sanity checks
  if(yystate() == ST_JSP_CONTENT) {
    // at the beginning?!
    yypushback(2);
    return JSP_CONTENT;
  }
  else if(yystate() == ST_BLOCK_TAG_SCAN) {
    yypushback(3);
    return doBlockTagScan();
  }
  else if(yystate() == ST_XML_COMMENT) {
    yypushback(3);
    return scanXMLCommentText();
  }
  else if(yystate() == ST_JSP_COMMENT) {
    yypushback(3);
    return scanJSPCommentText();
  }
  // end sanity checks
  fStateStack.push(yystate());
  if(fStateStack.peek()==YYINITIAL) {
    // the simple case, just a declaration out in content
    if(Debug.debugTokenizer)
      dump("\nJSP directive start");//$NON-NLS-1$
    yybegin(ST_JSP_DIRECTIVE_NAME);
    return JSP_DIRECTIVE_OPEN;
  }
  else {
    if (Debug.debugTokenizer) {
      System.out.println("begin embedded region: " + fEmbeddedHint+", jspDirectiveStart");//$NON-NLS-1$
    }
    if(Debug.debugTokenizer)
      dump("JSP declaration start");//$NON-NLS-1$
    if(yystate() == ST_XML_ATTRIBUTE_VALUE_DQUOTED)
      fEmbeddedPostState = ST_XML_ATTRIBUTE_VALUE_DQUOTED;
    else if(yystate() == ST_XML_ATTRIBUTE_VALUE_SQUOTED)
      fEmbeddedPostState = ST_XML_ATTRIBUTE_VALUE_SQUOTED;
    else if(yystate() == ST_CDATA_TEXT) {
      fEmbeddedPostState = ST_CDATA_TEXT;
      fEmbeddedHint = XML_CDATA_TEXT;
    }
    yybegin(ST_JSP_DIRECTIVE_NAME);
    assembleEmbeddedContainer(JSP_DIRECTIVE_OPEN, new String[]{JSP_DIRECTIVE_CLOSE, JSP_CLOSE});
    if(yystate() == ST_BLOCK_TAG_INTERNAL_SCAN) {
      yybegin(ST_BLOCK_TAG_SCAN);
      return BLOCK_TEXT;
    }
    // required help for successive embedded regions
    if(yystate() == ST_XML_TAG_NAME) {
      fEmbeddedHint = XML_TAG_NAME;
      fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
    }
    else if((yystate() == ST_XML_ATTRIBUTE_NAME || yystate() == ST_XML_EQUALS)) {
      fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
      fEmbeddedPostState = ST_XML_EQUALS;
    }
    else if(yystate() == ST_XML_ATTRIBUTE_VALUE) {
      fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
      fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
    }
    return PROXY_CONTEXT;
  }
}
        case 748: break;
        case 389:
          {
  yybegin(ST_JSP_VBL_DQUOTES_END);
  return JSP_VBL_QUOTED_CONTENT;
}
        case 749: break;
        case 385:
          {
  yybegin(ST_JSP_VBL_SQUOTES_END);
  return JSP_VBL_QUOTED_CONTENT;
}
        case 750: break;
        case 383:
          {
  fELlevel++;
  if(fELlevel == 1) {
    return JSP_VBL_OPEN;
  }
}
        case 751: break;
        case 373:
          {
  yybegin(ST_JSP_EL_DQUOTES_END);
  return JSP_EL_QUOTED_CONTENT;
}
        case 752: break;
        case 369:
          {
  yybegin(ST_JSP_EL_SQUOTES_END);
  return JSP_EL_QUOTED_CONTENT;
}
        case 753: break;
        case 367:
          {
  //System.out.println(JSP_EL_CONTENT+ ":[" + yytext() + "]");
  return JSP_EL_CONTENT;
}
        case 754: break;
        case 366:
          {
  fELlevel++;
  if(fELlevel == 1) {
    return JSP_EL_OPEN;
  }
}
        case 755: break;
        case 363:
          {
  int enterState = yystate();
  yybegin(ST_JSP_DQUOTED_VBL);
  assembleEmbeddedContainer(JSP_VBL_OPEN, new String[]{JSP_VBL_CLOSE, XML_TAG_ATTRIBUTE_VALUE_DQUOTE, JSP_TAG_ATTRIBUTE_VALUE_DQUOTE});
  // abort early when an unescaped double quote is found in the VBL
  if(fEmbeddedContainer.getLastRegion().getType().equals(XML_TAG_ATTRIBUTE_VALUE_DQUOTE) || fEmbeddedContainer.getLastRegion().getType().equals(JSP_TAG_ATTRIBUTE_VALUE_DQUOTE)) {
    yybegin(ST_ABORT_EMBEDDED);
    fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
  }
  else {
    yybegin(enterState);
  }
  return PROXY_CONTEXT;
}
        case 756: break;
        case 362:
          {
  int enterState = yystate();
  yybegin(ST_JSP_DQUOTED_EL);
  assembleEmbeddedContainer(JSP_EL_OPEN, new String[]{JSP_EL_CLOSE, XML_TAG_ATTRIBUTE_VALUE_DQUOTE, JSP_TAG_ATTRIBUTE_VALUE_DQUOTE});
  // abort early when an unescaped double quote is found in the EL
  if(fEmbeddedContainer.getLastRegion().getType().equals(XML_TAG_ATTRIBUTE_VALUE_DQUOTE) || fEmbeddedContainer.getLastRegion().getType().equals(JSP_TAG_ATTRIBUTE_VALUE_DQUOTE)) {
    yybegin(ST_ABORT_EMBEDDED);
    fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
  }
  else {
    yybegin(enterState);
  }
  return PROXY_CONTEXT;
}
        case 757: break;
        case 361:
          {
  int enterState = yystate();
  yybegin(ST_JSP_SQUOTED_VBL);
  assembleEmbeddedContainer(JSP_VBL_OPEN, new String[]{JSP_VBL_CLOSE, XML_TAG_ATTRIBUTE_VALUE_SQUOTE, JSP_TAG_ATTRIBUTE_VALUE_SQUOTE});
  // abort early when an unescaped single quote is found in the VBL
  if(fEmbeddedContainer.getLastRegion().getType().equals(XML_TAG_ATTRIBUTE_VALUE_SQUOTE) || fEmbeddedContainer.getLastRegion().getType().equals(JSP_TAG_ATTRIBUTE_VALUE_SQUOTE)) {
    yybegin(ST_ABORT_EMBEDDED);
    fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
  }
  else {
    yybegin(enterState);
  }
  return PROXY_CONTEXT;
}
        case 758: break;
        case 360:
          {
  int enterState = yystate();
  yybegin(ST_JSP_SQUOTED_EL);
  assembleEmbeddedContainer(JSP_EL_OPEN, new String[]{JSP_EL_CLOSE, XML_TAG_ATTRIBUTE_VALUE_SQUOTE, JSP_TAG_ATTRIBUTE_VALUE_SQUOTE});
  // abort early when an unescaped single quote is found in the EL
  if(fEmbeddedContainer.getLastRegion().getType().equals(XML_TAG_ATTRIBUTE_VALUE_SQUOTE) || fEmbeddedContainer.getLastRegion().getType().equals(JSP_TAG_ATTRIBUTE_VALUE_SQUOTE)) {
    yybegin(ST_ABORT_EMBEDDED);
    fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
  }
  else {
    yybegin(enterState);
  }
  return PROXY_CONTEXT;
}
        case 759: break;
        case 358:
          {
  if (Debug.debugTokenizer) {
    System.out.println("begin embedded region: " + fEmbeddedHint+", genericEndTagOpen");//$NON-NLS-1$
  }
  int incomingState = yystate();
  fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
  fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
  if(Debug.debugTokenizer)
    dump("JSP attribute value start - end tag");//$NON-NLS-1$
  yybegin(ST_XML_TAG_NAME);
  assembleEmbeddedContainer(XML_END_TAG_OPEN, new String[]{XML_TAG_CLOSE,XML_EMPTY_TAG_CLOSE});
  if(yystate() != ST_ABORT_EMBEDDED)
        yybegin(incomingState);
  return PROXY_CONTEXT;
}
        case 760: break;
        case 302:
        case 316:
        case 322:
          {
  return XML_DOCTYPE_INTERNAL_SUBSET;
}
        case 761: break;
        case 288:
          {
  String tagName = yytext().substring(1);
  // pushback to just after the opening bracket
  yypushback(yylength() - 1);
  /*
   * If this tag can not be nested or we're already searching for an
   * attribute name, equals, or value, return immediately.
   */
  if (!isNestable(tagName) || (!fStateStack.empty() && (fStateStack.peek() == ST_XML_ATTRIBUTE_NAME || fStateStack.peek() == ST_XML_EQUALS || fStateStack.peek() == ST_XML_ATTRIBUTE_VALUE || fStateStack.peek() == ST_JSP_ATTRIBUTE_VALUE))) {
    yybegin(ST_XML_TAG_NAME);
    return XML_TAG_OPEN;
  }
  if(Debug.debugTokenizer)
    dump("tag in place of attr value");//$NON-NLS-1$
  fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
  fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
  fStateStack.push(yystate());
  // embedded container should be looking for the name (again) next
  yybegin(ST_XML_TAG_NAME);
  assembleEmbeddedTagSequence(XML_TAG_OPEN, tagName); // ?
  fStateStack.pop();
  yybegin(ST_XML_ATTRIBUTE_NAME);
  return PROXY_CONTEXT;
}
        case 762: break;
        case 286:
          {
  String tagName = yytext().substring(1);
  // pushback to just after the opening bracket
  yypushback(yylength() - 1);
  /*
   * If this tag can not be nested or we're already searching for an
   * attribute name, equals, or value, return immediately.
   */
  if (!isNestable(tagName) || (!fStateStack.empty() && (fStateStack.peek() == ST_XML_ATTRIBUTE_NAME || fStateStack.peek() == ST_XML_EQUALS || fStateStack.peek() == ST_XML_ATTRIBUTE_VALUE || fStateStack.peek() == ST_JSP_ATTRIBUTE_VALUE))) {
    yybegin(ST_XML_TAG_NAME);
    return XML_TAG_OPEN;
  }
  if(Debug.debugTokenizer)
    dump("tag in place of attr name");//$NON-NLS-1$
  fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
  fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
  fStateStack.push(yystate());
  // embedded container should be looking for the name (again) next
  yybegin(ST_XML_TAG_NAME);
  assembleEmbeddedTagSequence(XML_TAG_OPEN, tagName); // ?
  fStateStack.pop();
  yybegin(ST_XML_EQUALS);
  return PROXY_CONTEXT;
}
        case 763: break;
        case 284:
          {
        yybegin(YYINITIAL);
  fEmbeddedHint = UNDEFINED;
  if(Debug.debugTokenizer)
    dump("empty tag close");//$NON-NLS-1$

  if (fEmbeddedContainer != null)
    fInTagEmbedded = false;
  else
    fInTagContainer = false;

  return XML_EMPTY_TAG_CLOSE;
}
        case 764: break;
        case 275:
          {
  if(Debug.debugTokenizer)
    dump("JSP end");//$NON-NLS-1$
  if (Debug.debugTokenizer) {
    if(fStateStack.peek()!=YYINITIAL)
      System.out.println("end embedded region");//$NON-NLS-1$
  }
  yybegin(fStateStack.pop());
  return JSP_DIRECTIVE_CLOSE;
}
        case 765: break;
        case 273:
          {
  if(Debug.debugTokenizer)
    dump("JSP end");//$NON-NLS-1$
  if (Debug.debugTokenizer) {
    if(fStateStack.peek()!=YYINITIAL)
      System.out.println("end embedded region");//$NON-NLS-1$
  }
  yybegin(fStateStack.pop());
  return JSP_CLOSE;
}
        case 766: break;
        case 252:
          {
  if(Debug.debugTokenizer)
    dump("XML processing instruction end");//$NON-NLS-1$
  fEmbeddedHint = UNDEFINED;
        yybegin(YYINITIAL);
        return XML_PI_CLOSE;
}
        case 767: break;
        case 125:
          {
  if (Debug.debugTokenizer) {
    System.out.println("begin embedded region: " + fEmbeddedHint+", unquoted genericTagOpen");//$NON-NLS-1$
  }
  fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
  fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
  fStateStack.push(yystate());
  if(Debug.debugTokenizer)
    dump("JSP tag embedded name start - start tag");//$NON-NLS-1$
  yybegin(ST_XML_TAG_NAME);
  assembleEmbeddedContainer(XML_TAG_OPEN, new String[]{XML_TAG_CLOSE,XML_EMPTY_TAG_CLOSE});
  fStateStack.pop();
        yybegin(ST_XML_ATTRIBUTE_NAME);
  fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
  fEmbeddedPostState = ST_XML_EQUALS;
  return PROXY_CONTEXT;
}
        case 768: break;
        case 123:
          {
  if(Debug.debugTokenizer)
    dump("equals");//$NON-NLS-1$
  fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
  fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
        yybegin(isJspTag() ? ST_JSP_ATTRIBUTE_VALUE : ST_XML_ATTRIBUTE_VALUE);
        return XML_TAG_ATTRIBUTE_EQUALS;
}
        case 769: break;
        case 122:
          {
  if(Debug.debugTokenizer)
    dump("attr name");//$NON-NLS-1$
  fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
  fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
        yybegin(ST_XML_EQUALS);
        return XML_TAG_ATTRIBUTE_NAME;
}
        case 770: break;
        case 118:
        case 119:
        case 120:
        case 285:
        case 431:
        case 543:
        case 584:
        case 585:
        case 604:
        case 605:
        case 623:
        case 624:
        case 637:
        case 646:
        case 654:
        case 656:
        case 658:
        case 660:
        case 663:
        case 669:
        case 670:
        case 671:
        case 672:
        case 673:
        case 679:
        case 680:
        case 681:
        case 682:
        case 683:
        case 689:
        case 690:
        case 692:
        case 693:
        case 699:
        case 700:
        case 701:
        case 702:
        case 708:
        case 709:
        case 710:
        case 711:
        case 714:
        case 715:
        case 717:
          {
  if(Debug.debugTokenizer)
    dump("tag name");//$NON-NLS-1$
    String tagname = yytext();
    boolean jspTag = tagname.indexOf(':') != -1;
  if (fEmbeddedContainer != null) {
      fEmbeddedTag = jspTag;
    fInTagEmbedded = true;
    }
  else {
    fContainerTag = jspTag;
    fInTagContainer = true;
  }
  fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
  fEmbeddedPostState = ST_XML_EQUALS;
        yybegin(ST_XML_ATTRIBUTE_NAME);
        return XML_TAG_NAME;
}
        case 771: break;
        case 116:
          {
  if(Debug.debugTokenizer)
    dump("tag close");//$NON-NLS-1$
  fEmbeddedHint = UNDEFINED;
  if(isBlockMarker()) {
    fEmbeddedHint = getBlockMarkerContext();
    fEmbeddedPostState = ST_BLOCK_TAG_SCAN;
          yybegin(ST_BLOCK_TAG_SCAN);
  }
  else
          yybegin(YYINITIAL);

  if (fEmbeddedContainer != null)
    fInTagEmbedded = false;
  else
    fInTagContainer = false;

  return XML_TAG_CLOSE;
}
        case 772: break;
        case 109:
        case 113:
        case 278:
          {
  if(Debug.debugTokenizer)
    dump("attr value");//$NON-NLS-1$
        yybegin(ST_JSP_DIRECTIVE_ATTRIBUTE_NAME);
        return XML_TAG_ATTRIBUTE_VALUE;
}
        case 773: break;
        case 108:
          {
  if(Debug.debugTokenizer)
    dump("equals");//$NON-NLS-1$
        yybegin(ST_JSP_DIRECTIVE_ATTRIBUTE_VALUE);
        return XML_TAG_ATTRIBUTE_EQUALS;
}
        case 774: break;
        case 107:
          {
  if(Debug.debugTokenizer)
    dump("attr name");//$NON-NLS-1$
        yybegin(ST_JSP_DIRECTIVE_EQUALS);
        return XML_TAG_ATTRIBUTE_NAME;
}
        case 775: break;
        case 104:
          {
  if(Debug.debugTokenizer)
    dump("JSP directive name");//$NON-NLS-1$
  yybegin(ST_JSP_DIRECTIVE_NAME_WHITESPACE);
  return JSP_DIRECTIVE_NAME;
}
        case 776: break;
        case 100:
        case 101:
        case 102:
          {
  if(Debug.debugTokenizer)
    dump("JSP code content");//$NON-NLS-1$
  return doScan("%>", false, false, false, JSP_CONTENT, ST_JSP_CONTENT, ST_JSP_CONTENT);
}
        case 777: break;
        case 96:
        case 98:
        case 99:
        case 266:
        case 267:
        case 268:
        case 271:
        case 272:
        case 425:
        case 428:
          {
  if(Debug.debugTokenizer)
    dump("DHTML processing instruction attribute value");//$NON-NLS-1$
  fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
  fEmbeddedPostState = ST_XML_EQUALS;
        yybegin(ST_DHTML_ATTRIBUTE_NAME);
        return XML_TAG_ATTRIBUTE_VALUE;
}
        case 778: break;
        case 95:
          {
  if(Debug.debugTokenizer)
    dump("DHTML processing instruction '='");//$NON-NLS-1$
  fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
  fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
        yybegin(ST_DHTML_ATTRIBUTE_VALUE);
        return XML_TAG_ATTRIBUTE_EQUALS;
}
        case 779: break;
        case 94:
          {
  if(Debug.debugTokenizer)
    dump("DHTML processing instruction attribute name");//$NON-NLS-1$
        yybegin(ST_DHTML_EQUALS);
        return XML_TAG_ATTRIBUTE_NAME;
}
        case 780: break;
        case 92:
          {
  if(Debug.debugTokenizer)
    dump("DHTML processing instruction end");//$NON-NLS-1$
  fEmbeddedHint = UNDEFINED;
        yybegin(YYINITIAL);
        return XML_PI_CLOSE;
}
        case 781: break;
        case 86:
        case 88:
        case 255:
          {
  if(Debug.debugTokenizer)
    dump("XML processing instruction attribute value");//$NON-NLS-1$
  fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
  fEmbeddedPostState = ST_XML_EQUALS;
        yybegin(ST_XML_PI_ATTRIBUTE_NAME);
        return XML_TAG_ATTRIBUTE_VALUE;
}
        case 782: break;
        case 85:
          {
  if(Debug.debugTokenizer)
    dump("XML processing instruction '='");//$NON-NLS-1$
  fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
  fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
        yybegin(ST_XML_PI_ATTRIBUTE_VALUE);
        return XML_TAG_ATTRIBUTE_EQUALS;
}
        case 783: break;
        case 84:
          {
  if(Debug.debugTokenizer)
    dump("XML processing instruction attribute name");//$NON-NLS-1$
        yybegin(ST_XML_PI_EQUALS);
        return XML_TAG_ATTRIBUTE_NAME;
}
        case 784: break;
        case 50:
        case 209:
        case 210:
        case 213:
        case 223:
        case 224:
        case 227:
        case 228:
        case 394:
        case 397:
        case 507:
        case 521:
        case 527:
          {
  return JSP_VBL_CONTENT;
}
        case 785: break;
        case 43:
        case 187:
        case 188:
        case 191:
        case 201:
        case 202:
        case 206:
        case 207:
        case 364:
        case 378:
        case 381:
        case 479:
        case 480:
        case 495:
        case 501:
          {
  return JSP_EL_CONTENT;
}
        case 786: break;
        case 35:
        case 161:
        case 162:
        case 346:
        case 465:
        case 469:
        case 558:
        case 592:
        case 612:
        case 629:
        case 639:
          {
  if(Debug.debugTokenizer)
    dump("attlist contentspec");//$NON-NLS-1$
  return XML_ATTLIST_DECL_CONTENT;
}
        case 787: break;
        case 33:
        case 154:
        case 155:
        case 334:
        case 455:
        case 459:
        case 555:
        case 591:
        case 611:
        case 628:
        case 638:
          {
  if(Debug.debugTokenizer)
    dump("elementdecl contentspec");//$NON-NLS-1$
  return XML_ELEMENT_DECL_CONTENT;
}
        case 788: break;
        case 22:
        case 114:
          {
  if(Debug.debugTokenizer)
    dump("inappropriate tag name");//$NON-NLS-1$
  if(!fStateStack.empty() && (fStateStack.peek()==ST_XML_ATTRIBUTE_VALUE_SQUOTED||fStateStack.peek()==ST_XML_ATTRIBUTE_VALUE_DQUOTED)) {
    yybegin(ST_ABORT_EMBEDDED);
    char c = yy_buffer[yy_markedPos - 1];
    if (fStateStack.peek()==ST_XML_ATTRIBUTE_VALUE_DQUOTED && c == '\"') {
      return isJspTag() ? JSP_TAG_ATTRIBUTE_VALUE_DQUOTE : XML_TAG_ATTRIBUTE_VALUE_DQUOTE;
    }   
    if (fStateStack.peek()==ST_XML_ATTRIBUTE_VALUE_SQUOTED && c == '\'') {
      return isJspTag() ? JSP_TAG_ATTRIBUTE_VALUE_SQUOTE : XML_TAG_ATTRIBUTE_VALUE_SQUOTE;
    }
    yypushback(yylength()-1);
    return XML_TAG_ATTRIBUTE_VALUE;
  }
  yybegin(YYINITIAL);
        return XML_CONTENT;
}
        case 789: break;
        case 18:
        case 106:
          {
  if(Debug.debugTokenizer)
    dump("white space");//$NON-NLS-1$
  yybegin(ST_JSP_DIRECTIVE_ATTRIBUTE_NAME);
  return WHITE_SPACE;
}
        case 790: break;
        case 5:
        case 8:
        case 9:
        case 10:
        case 12:
        case 13:
        case 14:
        case 15:
        case 17:
        case 19:
        case 20:
        case 21:
        case 23:
        case 24:
        case 25:
        case 26:
        case 27:
        case 28:
        case 29:
        case 30:
        case 31:
        case 32:
        case 34:
        case 40:
        case 41:
        case 42:
        case 74:
        case 178:
        case 183:
          {
  if(Debug.debugTokenizer)
    dump("white space");//$NON-NLS-1$
        return WHITE_SPACE;
}
        case 791: break;
        case 0:
        case 57:
        case 60:
        case 61:
        case 63:
        case 235:
        case 237:
        case 240:
        case 243:
        case 404:
        case 405:
        case 406:
        case 410:
        case 412:
        case 415:
        case 536:
          {
  if(Debug.debugTokenizer)
    dump("\nXML content");//$NON-NLS-1$
  return XML_CONTENT;
}
        case 792: break;
        case 58:
        case 103:
        case 115:
        case 121:
        case 131:
          {
  if(Debug.debugTokenizer)
    dump("\nstart tag open");//$NON-NLS-1$
  if (!fStateStack.empty() && fStateStack.peek()== ST_XML_COMMENT){
    fStateStack.pop();
    fEmbeddedHint = XML_COMMENT_TEXT;
    yybegin(ST_XML_TAG_NAME);
    String tagName = "";
    assembleEmbeddedTagSequence(XML_TAG_OPEN, tagName); // ?
    return PROXY_CONTEXT;
  }
  fEmbeddedHint = XML_TAG_NAME;
  fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
        yybegin(ST_XML_TAG_NAME);
        return XML_TAG_OPEN;
}
        case 793: break;
        case 59:
        case 66:
        case 67:
        case 68:
        case 72:
        case 73:
        case 83:
        case 87:
        case 89:
        case 90:
        case 91:
        case 93:
        case 97:
        case 105:
        case 110:
        case 111:
        case 112:
        case 117:
        case 126:
        case 133:
        case 134:
        case 135:
        case 136:
        case 138:
        case 139:
        case 141:
        case 142:
        case 143:
        case 146:
        case 147:
        case 148:
        case 151:
        case 152:
        case 153:
        case 158:
        case 159:
        case 160:
        case 168:
        case 170:
        case 171:
        case 193:
        case 194:
        case 197:
        case 198:
        case 204:
        case 208:
        case 215:
        case 216:
        case 219:
        case 220:
        case 225:
        case 229:
          {
  if (Debug.debugTokenizer)
    System.out.println("!!!unexpected!!!: \"" + yytext() + "\":" + //$NON-NLS-2$//$NON-NLS-1$
      yychar + "-" + (yychar + yylength()));//$NON-NLS-1$
  return UNDEFINED;
}
        case 794: break;
        case 62:
        case 241:
          {
  if(Debug.debugTokenizer)
    dump("non-reference %");//$NON-NLS-1$
  return XML_CONTENT;
}
        case 795: break;
        case 64:
        case 65:
          {
  if(Debug.debugTokenizer)
    dump("CDATA text");//$NON-NLS-1$
  fEmbeddedPostState = ST_CDATA_TEXT;
  fEmbeddedHint = XML_CDATA_TEXT;
  String returnedContext = doScan("]]>", false, true, true, XML_CDATA_TEXT, ST_CDATA_END,  ST_CDATA_END);//$NON-NLS-1$
  if(returnedContext == XML_CDATA_TEXT)
    yybegin(ST_CDATA_END);
  return returnedContext;
}
        case 796: break;
        case 69:
        case 196:
        case 200:
        case 218:
        case 222:
          {
  if(Debug.debugTokenizer)
    dump("LINE FEED");//$NON-NLS-1$
  return WHITE_SPACE;
}
        case 797: break;
        case 70:
        case 71:
          {
  if(Debug.debugTokenizer)
    dump("comment content");//$NON-NLS-1$
  return scanXMLCommentText();
}
        case 798: break;
        case 75:
        case 76:
        case 77:
        case 78:
        case 248:
        case 249:
        case 250:
        case 420:
        case 539:
        case 540:
        case 582:
        case 583:
        case 602:
        case 622:
        case 635:
        case 645:
        case 653:
        case 655:
        case 657:
        case 659:
          {
  if(Debug.debugTokenizer)
    dump("processing instruction target");//$NON-NLS-1$
  fEmbeddedHint = XML_CONTENT;
        yybegin(ST_PI_WS);
        return XML_TAG_NAME;
}
        case 799: break;
        case 79:
          {
        yybegin(ST_PI_CONTENT);
        return WHITE_SPACE;
}
        case 800: break;
        case 80:
        case 81:
        case 82:
          {
    // block scan until close is found
  return doScan("?>", false, false, false, XML_PI_CONTENT, ST_XML_PI_TAG_CLOSE, ST_XML_PI_TAG_CLOSE);
}
        case 801: break;
        case 127:
        case 172:
          {
  String type = yy_lexical_state == ST_XML_ATTRIBUTE_VALUE ? XML_TAG_ATTRIBUTE_VALUE_DQUOTE : JSP_TAG_ATTRIBUTE_VALUE_DQUOTE;

  if (Debug.debugTokenizer) {
    System.out.println("begin embedded region: " + fEmbeddedHint+", "+type);//$NON-NLS-1$
  }
  fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
  fEmbeddedPostState = ST_XML_ATTRIBUTE_VALUE_DQUOTED;
  yybegin(ST_XML_ATTRIBUTE_VALUE_DQUOTED);
  fStateStack.push(yystate());
  if(Debug.debugTokenizer)
    dump("JSP attribute value start - complex double quoted");//$NON-NLS-1$
  assembleEmbeddedContainer(type, type);
  fStateStack.pop();
  fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
  fEmbeddedPostState = ST_XML_EQUALS;
  yybegin(ST_XML_ATTRIBUTE_NAME);
  if (fEmbeddedContainer.getLastRegion().getType() == UNDEFINED) {
    fProxyUnknownRegion = fRegionFactory.createToken(XML_TAG_ATTRIBUTE_VALUE, fEmbeddedContainer.getStart(), fEmbeddedContainer.getTextLength(), fEmbeddedContainer.getLength());
    return PROXY_UNKNOWN_CONTEXT;
  }
  return PROXY_CONTEXT;
}
        case 802: break;
        case 128:
        case 173:
          {
  String type = yy_lexical_state == ST_XML_ATTRIBUTE_VALUE ? XML_TAG_ATTRIBUTE_VALUE_SQUOTE : JSP_TAG_ATTRIBUTE_VALUE_SQUOTE;
  if (Debug.debugTokenizer) {
    System.out.println("begin embedded region: " + fEmbeddedHint+", "+type);//$NON-NLS-1$
  }
  fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
  fEmbeddedPostState = ST_XML_ATTRIBUTE_VALUE_SQUOTED;
  yybegin(ST_XML_ATTRIBUTE_VALUE_SQUOTED);
  fStateStack.push(yystate());
  if(Debug.debugTokenizer)
    dump("JSP attribute value start - complex single quoted");//$NON-NLS-1$
  assembleEmbeddedContainer(type, type);
  fStateStack.pop();
  fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
  fEmbeddedPostState = ST_XML_EQUALS;
        yybegin(ST_XML_ATTRIBUTE_NAME);
    if (fEmbeddedContainer.getLastRegion().getType() == UNDEFINED) {
    fProxyUnknownRegion = fRegionFactory.createToken(XML_TAG_ATTRIBUTE_VALUE, fEmbeddedContainer.getStart(), fEmbeddedContainer.getTextLength(), fEmbeddedContainer.getLength());
    return PROXY_UNKNOWN_CONTEXT;
  }
  return PROXY_CONTEXT;
}
        case 803: break;
        case 132:
          {
  if(Debug.debugTokenizer)
    dump("declaration end");//$NON-NLS-1$
  if (Debug.debugTokenizer) {
    if(fStateStack.peek()!=YYINITIAL)
      System.out.println("end embedded region");//$NON-NLS-1$
  }
  yybegin(fStateStack.pop());
  return XML_DECLARATION_CLOSE;
}
        case 804: break;
        case 137:
          {
  if(Debug.debugTokenizer)
    dump("doctype type");//$NON-NLS-1$
  yybegin(ST_XML_DOCTYPE_EXTERNAL_ID);
  return XML_DOCTYPE_NAME;
}
        case 805: break;
        case 140:
        case 144:
        case 307:
        case 312:
        case 447:
          {
  if(Debug.debugTokenizer)
    dump("doctype public reference");//$NON-NLS-1$
  fEmbeddedHint = UNDEFINED;
  fEmbeddedPostState = YYINITIAL;
  yybegin(ST_XML_DOCTYPE_ID_SYSTEM);
  return XML_DOCTYPE_EXTERNAL_ID_PUBREF;
}
        case 806: break;
        case 145:
        case 149:
        case 319:
          {
  if(Debug.debugTokenizer)
    dump("doctype system reference");//$NON-NLS-1$
  fEmbeddedHint = UNDEFINED;
  fEmbeddedPostState = YYINITIAL;
  yybegin(ST_XML_DECLARATION_CLOSE);
  return XML_DOCTYPE_EXTERNAL_ID_SYSREF;
}
        case 807: break;
        case 150:
        case 325:
        case 330:
        case 452:
          {
  if(Debug.debugTokenizer)
    dump("elementdecl name");//$NON-NLS-1$
  fEmbeddedHint = UNDEFINED;
  fEmbeddedPostState = YYINITIAL;
  yybegin(ST_XML_ELEMENT_DECLARATION_CONTENT);
  return XML_ELEMENT_DECL_NAME;
}
        case 808: break;
        case 156:
          {
  if(Debug.debugTokenizer)
    dump("elementdecl close");//$NON-NLS-1$
  if (Debug.debugTokenizer) {
    if(fStateStack.peek()!=YYINITIAL)
      System.out.println("end embedded region");//$NON-NLS-1$
  }
  yybegin(fStateStack.pop());
  return XML_DECLARATION_CLOSE;
}
        case 809: break;
        case 157:
        case 337:
        case 342:
        case 462:
          {
  if(Debug.debugTokenizer)
    dump("attlist name");//$NON-NLS-1$
  fEmbeddedHint = UNDEFINED;
  fEmbeddedPostState = YYINITIAL;
  yybegin(ST_XML_ATTLIST_DECLARATION_CONTENT);
  return XML_ATTLIST_DECL_NAME;
}
        case 810: break;
        case 163:
          {
  if(Debug.debugTokenizer)
    dump("attlist close");//$NON-NLS-1$
  if (Debug.debugTokenizer) {
    if(fStateStack.peek()!=YYINITIAL)
      System.out.println("end embedded region");//$NON-NLS-1$
  }
  yybegin(fStateStack.pop());
  return XML_DECLARATION_CLOSE;
}
        case 811: break;
        case 166:
        case 167:
          {
  if(Debug.debugTokenizer)
    dump("\nJSP comment text");//$NON-NLS-1$
  return scanJSPCommentText();
}
        case 812: break;
        case 176:
        case 180:
        case 181:
        case 182:
        case 185:
        case 186:
        case 359:
          {
  return XML_TAG_ATTRIBUTE_VALUE;
}
        case 813: break;
        case 177:
          {
  if (Debug.debugTokenizer) {
    System.out.println("begin embedded region: " + fEmbeddedHint+", genericTagOpen");//$NON-NLS-1$
  }
  int incomingState = yystate();
  fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
  fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
  if(Debug.debugTokenizer)
    dump("tag inside of JSP attribute value start");//$NON-NLS-1$
  yybegin(ST_XML_TAG_NAME);
  assembleEmbeddedContainer(XML_TAG_OPEN, new String[]{XML_TAG_CLOSE,XML_EMPTY_TAG_CLOSE});
  if(yystate() != ST_ABORT_EMBEDDED)
        yybegin(incomingState);
  return PROXY_CONTEXT;
}
        case 814: break;
        case 179:
          {
  return isJspTag() ? JSP_TAG_ATTRIBUTE_VALUE_SQUOTE : XML_TAG_ATTRIBUTE_VALUE_SQUOTE;
}
        case 815: break;
        case 184:
          {
  return isJspTag()? JSP_TAG_ATTRIBUTE_VALUE_DQUOTE : XML_TAG_ATTRIBUTE_VALUE_DQUOTE;
}
        case 816: break;
        case 189:
          {
  yybegin(ST_JSP_EL_DQUOTES);
  return JSP_EL_DQUOTE;
}
        case 817: break;
        case 190:
          {
  yybegin(ST_JSP_EL_SQUOTES);
  return JSP_EL_SQUOTE;
}
        case 818: break;
        case 192:
          {
  fELlevel--;
  if(fELlevel == 0) {
    yybegin(YYINITIAL);
    return JSP_EL_CLOSE;
  }
  return JSP_EL_CONTENT;
}
        case 819: break;
        case 195:
          {
  yybegin(ST_JSP_EL);
  return JSP_EL_SQUOTE;
}
        case 820: break;
        case 199:
          {
  yybegin(ST_JSP_EL);
  return JSP_EL_DQUOTE;
}
        case 821: break;
        case 203:
          {
  return isJspTag() ? JSP_TAG_ATTRIBUTE_VALUE_DQUOTE: XML_TAG_ATTRIBUTE_VALUE_DQUOTE;
}
        case 822: break;
        case 205:
          {
  return JSP_EL_CLOSE;
}
        case 823: break;
        case 211:
          {
  yybegin(ST_JSP_VBL_DQUOTES);
  return JSP_VBL_DQUOTE;
}
        case 824: break;
        case 212:
          {
  yybegin(ST_JSP_VBL_SQUOTES);
  return JSP_VBL_SQUOTE;
}
        case 825: break;
        case 214:
          {
  fELlevel--;
  if(fELlevel == 0) {
    yybegin(YYINITIAL);
    return JSP_VBL_CLOSE;
  }
  return JSP_VBL_CONTENT;
}
        case 826: break;
        case 217:
          {
  yybegin(ST_JSP_VBL);
  return JSP_VBL_SQUOTE;
}
        case 827: break;
        case 221:
          {
  yybegin(ST_JSP_VBL);
  return JSP_VBL_DQUOTE;
}
        case 828: break;
        case 226:
          {
  return JSP_VBL_CLOSE;
}
        case 829: break;
        case 230:
          {
  if(Debug.debugTokenizer)
    dump("\nend tag open");//$NON-NLS-1$
  fEmbeddedHint = XML_TAG_NAME;
  fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
        yybegin(ST_XML_TAG_NAME);
        return XML_END_TAG_OPEN;
}
        case 830: break;
        case 231:
          {
  if(Debug.debugTokenizer)
    dump("\nprocessing instruction start");//$NON-NLS-1$
  yybegin(ST_PI);
        return XML_PI_OPEN;
}
        case 831: break;
        case 232:
        case 333:
        case 345:
        case 365:
        case 370:
        case 374:
        case 377:
        case 380:
        case 382:
        case 386:
        case 390:
        case 393:
        case 396:
          {
  /* JSP scriptlet begun (anywhere)
   * A consequence of the start anywhere possibility is that the
   *  incoming state must be checked to see if it's erroneous
   *  due to the order of precedence generated
   */
  // begin sanity checks
  if(yystate() == ST_JSP_CONTENT) {
    // at the beginning?!
    yypushback(1);
    return JSP_CONTENT;
  }
  else if(yystate() == ST_BLOCK_TAG_SCAN) {
    yypushback(2);
    return doBlockTagScan();
  }
  else if(yystate() == ST_XML_COMMENT) {
    yypushback(2);
    return scanXMLCommentText();
  }
  else if(yystate() == ST_JSP_COMMENT) {
    yypushback(2);
    return scanJSPCommentText();
  }
  // finished sanity checks
  fStateStack.push(yystate());
  if(fStateStack.peek()==YYINITIAL) {
    // the simple case, just a regular scriptlet out in content
    if(Debug.debugTokenizer)
      dump("\nJSP scriptlet start");//$NON-NLS-1$
    yybegin(ST_JSP_CONTENT);
    return JSP_SCRIPTLET_OPEN;
  }
  else {
    if (Debug.debugTokenizer) {
      System.out.println("begin embedded region: " + fEmbeddedHint+", jspScriptletStart");//$NON-NLS-1$
    }
    if(Debug.debugTokenizer)
      dump("JSP scriptlet start");//$NON-NLS-1$
    if(yystate() == ST_XML_ATTRIBUTE_VALUE_DQUOTED)
      fEmbeddedPostState = ST_XML_ATTRIBUTE_VALUE_DQUOTED;
    else if(yystate() == ST_XML_ATTRIBUTE_VALUE_SQUOTED)
      fEmbeddedPostState = ST_XML_ATTRIBUTE_VALUE_SQUOTED;
    else if(yystate() == ST_CDATA_TEXT) {
      fEmbeddedPostState = ST_CDATA_TEXT;
      fEmbeddedHint = XML_CDATA_TEXT;
    }
    yybegin(ST_JSP_CONTENT);
    assembleEmbeddedContainer(JSP_SCRIPTLET_OPEN, JSP_CLOSE);
    if(yystate() == ST_BLOCK_TAG_INTERNAL_SCAN) {
      yybegin(ST_BLOCK_TAG_SCAN);
      return BLOCK_TEXT;
    }
    // required help for successive embedded regions
    if(yystate() == ST_XML_TAG_NAME) {
      fEmbeddedHint = XML_TAG_NAME;
      fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
    }
    else if((yystate() == ST_XML_ATTRIBUTE_NAME || yystate() == ST_XML_EQUALS)) {
      fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
      fEmbeddedPostState = ST_XML_EQUALS;
    }
    else if(yystate() == ST_XML_ATTRIBUTE_VALUE) {
      fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
      fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
    }
        else if(yystate() == ST_JSP_ATTRIBUTE_VALUE) {
            fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
            fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
        }
   
    return PROXY_CONTEXT;
  }
}
        case 832: break;
        case 233:
          {
  fStateStack.push(yystate());
  if(Debug.debugTokenizer)
    dump("\ndeclaration start");//$NON-NLS-1$
        yybegin(ST_XML_DECLARATION);
  return XML_DECLARATION_OPEN;
}
        case 833: break;
        case 247:
          {
  if(Debug.debugTokenizer)
    dump("processing instruction end");//$NON-NLS-1$
  fEmbeddedHint = UNDEFINED;
        yybegin(YYINITIAL);
        return XML_PI_CLOSE;
}
        case 834: break;
        case 251:
          {
    // ended with nothing inside
    fEmbeddedHint = UNDEFINED;
        yybegin(YYINITIAL);
        return XML_PI_CLOSE;
}
        case 835: break;
        case 164:
        case 165:
          {
    return doBlockTagScan();
   }
        case 836: break;
        default:
          if (yy_input == YYEOF && yy_startRead == yy_currentPos) {
            yy_atEOF = true;
            yy_do_eof();
              return null;
          }
          else {
            yy_ScanError(YY_NO_MATCH);
          }
      }
    }
  }   


}
TOP

Related Classes of org.eclipse.jst.jsp.core.internal.parser.internal.JSPTokenizer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.