| /* The following code was generated by JFlex 1.2.2 on 1/8/10 3:12 PM */ |
| |
| /******************************************************************************* |
| * Copyright (c) 2004, 2009 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.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; |
| import org.eclipse.wst.xml.core.internal.parser.IntStack; |
| |
| |
| /** |
| * This class is a scanner generated by |
| * <a href="http://www.informatik.tu-muenchen.de/~kleing/jflex/">JFlex</a> 1.2.2 |
| * on 1/8/10 3:12 PM from the specification file |
| * <tt>file:/D:/dev/workspaces/wtp/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, 994, 1065, 1136, 1207, 1278, 1349, |
| 1420, 1491, 1562, 1633, 1704, 1775, 1846, 1917, 1988, 2059, |
| 2130, 2201, 2272, 2343, 2414, 2485, 2556, 2627, 2698, 2769, |
| 2840, 2911, 2982, 3053, 3124, 3195, 3266, 3337, 3408, 3479, |
| 3550, 3621, 3692, 3763, 3834, 3905, 3976, 4047, 4118, 4189, |
| 4260, 4331, 4402, 4473, 4544, 4615, 4544, 4615, 4686, 4544, |
| 4544, 4615, 4757, 4828, 4899, 4970, 5041, 5112, 5183, 5254, |
| 4544, 4615, 5325, 5396, 5467, 4544, 5538, 5538, 5609, 5680, |
| 5751, 5325, 4544, 5822, 5893, 4544, 5964, 6035, 6106, 6177, |
| 4544, 4615, 6248, 6319, 6390, 6461, 6532, 6603, 4544, 6674, |
| 6674, 6745, 6816, 6887, 6958, 7029, 4544, 7100, 7171, 7242, |
| 7313, 7384, 7455, 4544, 7526, 7597, 7668, 7739, 7810, 7881, |
| 7952, 8023, 4544, 8094, 8165, 8236, 8307, 8378, 8449, 8520, |
| 8591, 8591, 8662, 8733, 8804, 8875, 8875, 8946, 9017, 9088, |
| 9159, 9159, 9230, 9301, 9372, 9443, 4544, 9514, 9514, 9585, |
| 9656, 9727, 9798, 4544, 4544, 4615, 4544, 4615, 9869, 9940, |
| 7597, 10011, 10082, 10153, 10224, 10295, 10366, 10437, 10508, 4544, |
| 10579, 10650, 10721, 10792, 4544, 10863, 10934, 11005, 11076, 4544, |
| 4544, 11147, 4544, 11218, 11289, 4544, 11218, 11360, 11431, 4544, |
| 11360, 11502, 11573, 4544, 11644, 4544, 11715, 11786, 11857, 11928, |
| 11999, 4544, 4544, 12070, 4544, 12141, 12212, 4544, 12141, 12283, |
| 12354, 4544, 12283, 12425, 12496, 12567, 4544, 12638, 12709, 12780, |
| 4544, 4544, 12851, 12922, 12993, 13064, 13135, 13206, 13277, 13348, |
| 13419, 13490, 13561, 13632, 13703, 13774, 4544, 13845, 13916, 13987, |
| 4544, 4544, 5538, 5680, 4544, 14058, 14129, 5751, 14200, 14271, |
| 5822, 5964, 6035, 14342, 6106, 4544, 14413, 14484, 14555, 6177, |
| 14626, 14697, 4544, 12922, 4544, 6674, 6745, 4544, 14768, 14839, |
| 6816, 14910, 14981, 4544, 15052, 15123, 7526, 15194, 7739, 4544, |
| 15265, 15336, 7810, 15407, 15478, 15549, 15620, 15691, 15762, 15833, |
| 8307, 4544, 15904, 15975, 8591, 8662, 4544, 16046, 16117, 16188, |
| 16259, 16330, 16401, 16472, 8804, 8591, 8875, 8946, 4544, 9017, |
| 9088, 8875, 9159, 9230, 4544, 16543, 16614, 16685, 16756, 16827, |
| 16898, 16969, 17040, 17111, 9514, 9585, 4544, 17182, 17253, 17324, |
| 17395, 17466, 17537, 17608, 17679, 17750, 17821, 9940, 10082, 4544, |
| 17892, 17963, 10153, 18034, 18105, 18176, 18247, 4544, 18318, 4544, |
| 4544, 4544, 4544, 18389, 18460, 18531, 18602, 11218, 4544, 18673, |
| 18744, 11360, 4544, 18815, 18886, 18957, 19028, 19099, 19170, 19241, |
| 19312, 19383, 11928, 12141, 4544, 19454, 19525, 12283, 4544, 19596, |
| 19667, 19738, 19809, 19880, 19951, 20022, 20093, 20164, 4544, 4544, |
| 4544, 20235, 20306, 20377, 20448, 20519, 4544, 20590, 20661, 20732, |
| 4544, 4544, 4544, 4544, 20803, 4544, 4544, 4970, 20874, 20945, |
| 21016, 21087, 21158, 21229, 21300, 21371, 21442, 21513, 21584, 21655, |
| 21726, 21797, 21868, 21939, 22010, 21939, 22081, 22152, 22081, 22223, |
| 22294, 22365, 22436, 22507, 22578, 22649, 22720, 22720, 22791, 22862, |
| 22933, 23004, 23004, 23075, 23146, 9372, 9372, 9372, 23217, 23288, |
| 23359, 23430, 23430, 23501, 23572, 9727, 9727, 9727, 23643, 23714, |
| 10082, 23785, 10153, 23856, 23927, 23927, 23998, 23998, 18531, 24069, |
| 11005, 11005, 11005, 24140, 24211, 11218, 11218, 11218, 24282, 24353, |
| 11360, 11360, 11360, 24424, 24495, 11502, 11502, 11502, 19099, 24566, |
| 24637, 11715, 11715, 11715, 19312, 24708, 24779, 11928, 11928, 11928, |
| 24850, 12141, 12141, 12141, 24921, 24992, 12283, 12283, 12283, 25063, |
| 25134, 12425, 12425, 12425, 19880, 25205, 25276, 12638, 12638, 12638, |
| 20093, 25347, 4544, 4544, 25418, 25489, 4544, 25560, 25631, 25702, |
| 25773, 25844, 25915, 7526, 4544, 4544, 25986, 26057, 26128, 26199, |
| 26270, 16330, 16827, 9372, 26341, 17466, 9727, 26412, 4544, 9940, |
| 11005, 11218, 26483, 11360, 26554, 11502, 26625, 4544, 11715, 26696, |
| 11928, 12141, 26767, 12283, 26838, 12425, 26909, 4544, 12638, 26980, |
| 27051, 27122, 27193, 27264, 27335, 27406, 27477, 27548, 27619, 27690, |
| 27761, 27832, 27903, 27974, 28045, 28116, 28187, 28258, 28329, 28400, |
| 28471, 28542, 4970, 28613, 28684, 28755, 28826, 28897, 4544, 4544, |
| 28968, 29039, 29110, 29181, 19099, 19312, 29252, 29323, 19880, 20093, |
| 29394, 29465, 29536, 29607, 4544, 4544, 4544, 29678, 29749, 29820, |
| 29891, 29962, 30033, 30104, 30175, 7242, 30246, 30317, 30388, 30459, |
| 30530, 30601, 30672, 4544, 30743, 30814, 9372, 9727, 11218, 11360, |
| 12141, 12283, 30885, 30956, 31027, 31098, 31169, 31240, 31311, 31382, |
| 4970, 31453, 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, 4544, 34009, 34080, |
| 34151, 34222, 7242, 34293, 34364, 34435, 34506, 34577, 34648, 34719, |
| 34790, 34861, 34932, 35003, 35074, 35145, 35216 |
| }; |
| |
| /** |
| * 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\6\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\362\4\72\1\0\42\72\1\363\20\72\132\0"+ |
| "\1\351\2\0\1\364\104\0\1\365\71\0\1\366\101\0"+ |
| "\1\367\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\370\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\370"+ |
| "\1\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\2\372\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\373\106\0\1\374"+ |
| "\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\375\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\374"+ |
| "\1\375\1\127\1\0\4\127\1\0\1\127\1\0\3\127"+ |
| "\1\0\6\127\1\0\57\127\1\376\1\0\10\376\1\377"+ |
| "\2\376\1\u0100\1\376\1\u0101\46\376\1\u0100\20\376\1\u0102"+ |
| "\1\0\12\u0102\1\377\1\u0103\1\u0102\1\u0104\46\u0102\1\u0103"+ |
| "\20\u0102\2\0\1\135\1\u0105\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\u0106\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\u0107\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\u0108\1\u0109\1\143\1\u0108\4\143\1\u010a"+ |
| "\1\143\1\u0108\1\u010b\1\143\1\u010c\1\u0108\6\143\1\u0108"+ |
| "\36\143\1\u010b\20\143\1\144\1\0\1\u010d\1\u010e\1\144"+ |
| "\1\u010d\4\144\1\u010d\1\144\1\u010a\1\u010f\1\144\1\u0110"+ |
| "\1\u010d\6\144\1\u010d\36\144\1\u010f\20\144\2\0\1\u0111"+ |
| "\127\0\1\351\2\0\1\u0112\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\u0113\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\u0114\1\156"+ |
| "\1\0\4\156\1\0\1\156\1\0\3\156\1\0\6\156"+ |
| "\1\0\57\156\1\u0115\1\0\10\u0115\1\u0116\2\u0115\1\u0117"+ |
| "\1\u0115\1\u0118\46\u0115\1\u0117\20\u0115\1\u0119\1\0\12\u0119"+ |
| "\1\u0116\1\u011a\1\u0119\1\u011b\46\u0119\1\u011a\20\u0119\1\156"+ |
| "\1\0\1\u0113\1\u0114\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\u011c\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\u011d\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\u011e"+ |
| "\11\0\1\351\2\0\1\352\1\0\6\u011e\1\0\13\u011e"+ |
| "\1\0\13\u011e\1\0\4\u011e\1\0\4\u011e\1\0\4\u011e"+ |
| "\1\0\1\u011e\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\u011f\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\u0120\11\0\1\351\2\0\1\352"+ |
| "\1\0\6\u0120\1\0\13\u0120\1\0\13\u0120\1\0\4\u0120"+ |
| "\1\0\4\u0120\1\0\4\u0120\1\0\1\u0120\1\175\1\0"+ |
| "\1\u011c\1\u011f\1\175\1\0\4\175\1\0\1\175\1\0"+ |
| "\3\175\1\0\6\175\1\0\57\175\1\u0121\1\0\10\u0121"+ |
| "\1\u0122\2\u0121\1\u0123\1\u0121\1\u0124\46\u0121\1\u0123\20\u0121"+ |
| "\1\u0125\1\0\12\u0125\1\u0122\1\u0126\1\u0125\1\u0127\46\u0125"+ |
| "\1\u0126\20\u0125\1\175\2\0\1\u011f\1\175\1\0\4\175"+ |
| "\1\0\1\175\1\0\1\175\1\u0128\1\175\1\0\6\175"+ |
| "\1\0\60\175\2\0\1\u011f\1\175\1\0\4\175\1\0"+ |
| "\1\175\1\0\1\175\1\u0129\1\175\1\0\6\175\1\0"+ |
| "\57\175\3\0\1\347\17\0\1\351\2\0\1\u0112\130\0"+ |
| "\1\u012a\2\0\1\u012a\75\0\1\u012b\14\0\1\u012b\63\0"+ |
| "\2\u012c\51\0\24\u012d\1\u012e\62\u012d\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\u012f\5\0"+ |
| "\1\u012f\116\0\1\u0130\10\0\1\u0130\3\0\1\215\2\0"+ |
| "\1\u0131\1\215\1\0\4\215\1\0\1\215\1\0\3\215"+ |
| "\1\0\6\215\1\0\57\215\1\u0132\1\0\10\u0132\1\u0133"+ |
| "\2\u0132\1\u0134\1\u0132\1\u0135\46\u0132\1\u0134\20\u0132\1\u0136"+ |
| "\1\0\1\u0136\2\u0137\1\u0136\4\u0137\2\u0136\1\u0138\1\u0139"+ |
| "\1\u0136\1\u013a\4\u0137\1\u0136\11\u0137\1\u0136\27\u0137\1\u0139"+ |
| "\10\u0137\2\u0136\4\u0137\1\u0136\1\u0137\1\221\2\u012d\1\u013b"+ |
| "\1\221\1\u012d\4\221\1\u012d\1\221\1\u012d\3\221\1\u012d"+ |
| "\3\221\1\u013c\2\221\1\u012d\57\221\1\222\2\0\1\u013d"+ |
| "\1\222\1\0\4\222\1\0\1\222\1\0\3\222\1\0"+ |
| "\6\222\1\0\57\222\12\u013e\1\u013f\74\u013e\14\u0140\1\u013f"+ |
| "\72\u0140\1\226\2\u012d\1\u0141\1\226\1\u012d\4\226\1\u012d"+ |
| "\1\226\1\u012d\3\226\1\u012d\3\226\1\u0142\2\226\1\u012d"+ |
| "\57\226\1\227\2\0\1\u0143\1\227\1\0\4\227\1\0"+ |
| "\1\227\1\0\3\227\1\0\6\227\1\0\57\227\1\u0144"+ |
| "\1\0\10\u0144\1\u0145\2\u0144\1\u0146\1\u0144\1\u0147\46\u0144"+ |
| "\1\u0146\20\u0144\1\u0148\1\0\1\u0148\2\u0149\1\u0148\4\u0149"+ |
| "\2\u0148\1\u014a\1\u014b\1\u0148\1\u014c\4\u0149\1\u0148\11\u0149"+ |
| "\1\u0148\27\u0149\1\u014b\10\u0149\2\u0148\4\u0149\1\u0148\1\u0149"+ |
| "\2\233\1\0\106\233\1\0\20\233\1\u014d\2\233\1\u014e"+ |
| "\60\233\1\236\2\0\1\u014f\1\236\1\0\4\236\1\0"+ |
| "\1\236\1\0\3\236\1\0\6\236\1\0\57\236\1\u0150"+ |
| "\1\0\10\u0150\1\u0151\2\u0150\1\u0152\1\u0150\1\u0153\46\u0150"+ |
| "\1\u0152\20\u0150\1\u0154\1\0\1\u0154\2\u0155\1\u0154\4\u0155"+ |
| "\2\u0154\1\u0156\1\u0157\1\u0154\1\u0158\4\u0155\1\u0154\11\u0155"+ |
| "\1\u0154\27\u0155\1\u0157\10\u0155\2\u0154\4\u0155\1\u0154\1\u0155"+ |
| "\2\242\1\0\106\242\1\0\20\242\1\u0159\2\242\1\u015a"+ |
| "\60\242\7\0\1\u015b\77\0\1\252\2\0\1\u015c\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\u011c\1\u015c\1\252\1\0\4\252"+ |
| "\1\0\1\252\1\0\3\252\1\0\6\252\1\0\57\252"+ |
| "\1\u015d\1\0\10\u015d\1\u015e\2\u015d\1\u015f\1\u015d\1\u0160"+ |
| "\46\u015d\1\u015f\20\u015d\1\u0161\1\0\12\u0161\1\u015e\1\u0162"+ |
| "\1\u0161\1\u0163\46\u0161\1\u0162\20\u0161\1\252\2\0\1\u015c"+ |
| "\1\252\1\0\4\252\1\0\1\252\1\0\1\252\1\u0164"+ |
| "\1\252\1\0\6\252\1\0\60\252\2\0\1\u015c\1\252"+ |
| "\1\0\4\252\1\0\1\252\1\0\1\252\1\u0165\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\u0166\17\0\1\351\2\0"+ |
| "\1\364\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\u0167\10\0\1\u0168\1\0\1\u0167\6\0\1\u0167\64\0"+ |
| "\1\u0167\10\0\1\u0169\1\0\1\u0167\6\0\1\u0167\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\u0167\10\0\1\u016a\1\0\1\u0167\6\0\1\u0167\64\0"+ |
| "\1\u0167\10\0\1\u016b\1\0\1\u0167\6\0\1\u0167\57\0"+ |
| "\12\274\1\0\1\274\1\0\1\u016c\67\274\1\0\13\274"+ |
| "\1\0\1\274\1\0\1\u016c\5\274\1\u016d\61\274\1\0"+ |
| "\13\274\1\0\1\274\1\0\1\274\1\u016e\66\274\1\u016f"+ |
| "\1\274\14\u0170\1\u0171\106\u0170\1\u0171\6\u0170\1\u0172\2\u0170"+ |
| "\1\u0173\60\u0170\12\u0174\1\u0175\106\u0174\1\u0175\10\u0174\1\u0176"+ |
| "\2\u0174\1\u0177\60\u0174\12\312\1\0\4\312\1\u0178\65\312"+ |
| "\1\0\13\312\1\0\4\312\1\u0178\3\312\1\u0179\61\312"+ |
| "\1\0\13\312\1\u017a\74\312\14\317\1\0\2\317\1\u017b"+ |
| "\65\317\1\0\15\317\1\0\2\317\1\u017b\3\317\1\u017c"+ |
| "\61\317\1\0\15\317\1\u017d\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\u017e\61\322\1\0\13\322\1\0\1\322\1\0\1\322"+ |
| "\1\u017f\66\322\1\0\1\322\14\u0180\1\u0181\106\u0180\1\u0181"+ |
| "\6\u0180\1\u0182\2\u0180\1\u0183\60\u0180\12\u0184\1\u0185\106\u0184"+ |
| "\1\u0185\10\u0184\1\u0186\2\u0184\1\u0187\60\u0184\12\340\1\0"+ |
| "\4\340\1\u0188\65\340\1\0\13\340\1\0\4\340\1\u0188"+ |
| "\3\340\1\u0189\61\340\1\0\13\340\1\u018a\74\340\14\344"+ |
| "\1\0\2\344\1\u018b\65\344\1\0\15\344\1\0\2\344"+ |
| "\1\u018b\3\344\1\u018c\61\344\1\0\15\344\1\u018d\72\344"+ |
| "\7\0\1\u018e\12\0\1\u018f\3\0\1\u0190\23\0\1\u0191"+ |
| "\43\0\1\u0192\26\0\1\u0193\55\0\1\353\2\0\2\u0194"+ |
| "\6\0\1\353\6\0\1\353\6\u0194\1\0\13\u0194\1\0"+ |
| "\13\u0194\1\0\4\u0194\1\0\4\u0194\1\0\4\u0194\1\0"+ |
| "\1\u0194\1\u0195\1\0\3\u0195\1\u0196\4\354\1\u0195\1\0"+ |
| "\4\u0195\1\u0196\1\354\1\u0195\1\0\3\u0195\1\u0196\6\354"+ |
| "\1\u0195\13\354\1\u0195\13\354\1\u0195\4\354\1\u0197\11\354"+ |
| "\1\u0195\1\354\21\0\1\u0198\7\0\1\u0199\55\0\1\72"+ |
| "\1\0\11\72\1\0\1\72\1\u019a\5\72\1\0\42\72"+ |
| "\1\0\20\72\105\357\1\u019b\1\357\16\0\1\u019c\70\0"+ |
| "\1\u0195\1\0\3\u0195\1\u0196\4\361\1\u0195\1\0\4\u0195"+ |
| "\1\u0196\1\361\1\u0195\1\0\3\u0195\1\u0196\6\361\1\u0195"+ |
| "\13\361\1\u0195\13\361\1\u0195\4\361\1\u019d\11\361\1\u0195"+ |
| "\1\361\105\362\1\u019e\1\362\1\72\1\0\11\72\1\0"+ |
| "\1\72\1\0\5\72\1\0\42\72\1\u019f\20\72\36\0"+ |
| "\1\u0193\52\0\1\u01a0\106\0\1\u01a1\112\0\4\114\7\0"+ |
| "\1\114\6\0\4\114\2\u01a2\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\u01a2\1\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\6\114\1\0\13\114"+ |
| "\1\0\2\114\1\u01a4\10\114\1\0\4\114\1\0\6\114"+ |
| "\1\u01a4\2\114\1\0\1\114\12\376\1\377\3\376\1\0"+ |
| "\71\376\1\0\10\376\1\377\2\376\1\u01a5\1\376\1\u0101"+ |
| "\46\376\1\u01a5\20\376\14\u0102\1\377\1\u0102\1\0\71\u0102"+ |
| "\1\0\12\u0102\1\377\1\u01a6\1\u0102\1\u0104\46\u0102\1\u01a6"+ |
| "\20\u0102\1\u0108\1\0\10\u0108\1\u010a\2\u0108\1\u01a7\1\u0108"+ |
| "\1\u01a8\46\u0108\1\u01a7\20\u0108\1\143\2\u0108\1\u0109\1\143"+ |
| "\1\u0108\4\143\1\u010a\1\143\1\u0108\1\143\1\141\1\143"+ |
| "\1\u0108\6\143\1\u0108\60\143\1\0\1\u0108\1\u0109\1\143"+ |
| "\1\u0108\4\143\1\u010a\1\143\1\u0108\1\u01a9\1\143\1\u010c"+ |
| "\1\u0108\6\143\1\u0108\36\143\1\u01a9\20\143\1\u010d\1\0"+ |
| "\12\u010d\1\u010a\1\u01aa\1\u010d\1\u01ab\46\u010d\1\u01aa\20\u010d"+ |
| "\1\144\2\u010d\1\u010e\1\144\1\u010d\4\144\1\u010d\1\144"+ |
| "\1\u010a\1\144\1\141\1\144\1\u010d\6\144\1\u010d\60\144"+ |
| "\1\0\1\u010d\1\u010e\1\144\1\u010d\4\144\1\u010d\1\144"+ |
| "\1\u010a\1\u01ac\1\144\1\u0110\1\u010d\6\144\1\u010d\36\144"+ |
| "\1\u01ac\20\144\12\u0115\1\u0116\3\u0115\1\0\71\u0115\1\0"+ |
| "\10\u0115\1\u0116\2\u0115\1\u01ad\1\u0115\1\u0118\46\u0115\1\u01ad"+ |
| "\20\u0115\14\u0119\1\u0116\1\u0119\1\0\71\u0119\1\0\12\u0119"+ |
| "\1\u0116\1\u01ae\1\u0119\1\u011b\46\u0119\1\u01ae\20\u0119\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\u01af\2\170\1\0"+ |
| "\1\170\6\0\4\u011e\7\0\1\u011e\6\0\6\u011e\1\0"+ |
| "\13\u011e\1\0\13\u011e\1\0\4\u011e\1\0\11\u011e\1\0"+ |
| "\1\u011e\6\0\4\u0120\7\0\1\u0120\6\0\6\u0120\1\0"+ |
| "\13\u0120\1\0\13\u0120\1\0\4\u0120\1\0\11\u0120\1\0"+ |
| "\1\u0120\12\u0121\1\u0122\3\u0121\1\0\71\u0121\1\0\10\u0121"+ |
| "\1\u0122\2\u0121\1\u01b0\1\u0121\1\u0124\46\u0121\1\u01b0\20\u0121"+ |
| "\14\u0125\1\u0122\1\u0125\1\0\71\u0125\1\0\12\u0125\1\u0122"+ |
| "\1\u01b1\1\u0125\1\u0127\46\u0125\1\u01b1\20\u0125\1\u01b2\2\u01b3"+ |
| "\1\u01b4\1\u01b2\1\u01b3\4\u01b2\1\u01b3\1\u01b2\1\u01b3\3\u01b2"+ |
| "\1\u01b3\6\u01b2\1\u01b3\55\u01b2\1\175\1\u01b2\1\u01b5\2\u01b6"+ |
| "\1\u01b7\1\u01b5\1\u01b6\4\u01b5\1\u01b6\1\u01b5\1\u01b6\3\u01b5"+ |
| "\1\u01b6\6\u01b5\1\u01b6\55\u01b5\1\175\1\u01b5\37\0\1\u01b8"+ |
| "\35\0\1\u01b8\53\0\1\u01b9\14\0\1\u01b9\73\0\1\u01ba"+ |
| "\11\0\1\u01ba\76\0\1\u01bb\20\0\1\u01bb\113\0\1\u01bc"+ |
| "\7\0\1\u01bc\2\0\12\u0132\1\u0133\3\u0132\1\0\71\u0132"+ |
| "\1\0\10\u0132\1\u0133\2\u0132\1\u01bd\1\u0132\1\u0135\46\u0132"+ |
| "\1\u01bd\20\u0132\1\u0136\1\0\12\u0136\1\u0133\1\u01be\1\u0136"+ |
| "\1\u013a\46\u0136\1\u01be\21\u0136\1\0\12\u0136\1\u01bf\1\u01be"+ |
| "\1\u0136\1\u013a\46\u0136\1\u01be\20\u0136\14\0\1\u01c0\72\0"+ |
| "\14\u0136\1\u01bf\1\u0136\1\0\71\u0136\1\0\12\u0136\1\u0133"+ |
| "\1\u01c1\1\u0136\1\u013a\46\u0136\1\u01c1\20\u0136\12\u0144\1\u0145"+ |
| "\3\u0144\1\0\71\u0144\1\0\10\u0144\1\u0145\2\u0144\1\u01c2"+ |
| "\1\u0144\1\u0147\46\u0144\1\u01c2\20\u0144\1\u0148\1\0\12\u0148"+ |
| "\1\u0145\1\u01c3\1\u0148\1\u014c\46\u0148\1\u01c3\21\u0148\1\0"+ |
| "\12\u0148\1\u01c4\1\u01c3\1\u0148\1\u014c\46\u0148\1\u01c3\20\u0148"+ |
| "\14\0\1\u01c5\72\0\14\u0148\1\u01c4\1\u0148\1\0\71\u0148"+ |
| "\1\0\12\u0148\1\u0145\1\u01c6\1\u0148\1\u014c\46\u0148\1\u01c6"+ |
| "\20\u0148\2\233\1\0\4\233\1\u01c7\12\233\1\u01c8\3\233"+ |
| "\1\u01c9\23\233\1\u01ca\36\233\1\0\33\233\1\u01cb\50\233"+ |
| "\12\u0150\1\u0151\3\u0150\1\0\71\u0150\1\0\10\u0150\1\u0151"+ |
| "\2\u0150\1\u01cc\1\u0150\1\u0153\46\u0150\1\u01cc\20\u0150\1\u0154"+ |
| "\1\0\12\u0154\1\u0151\1\u01cd\1\u0154\1\u0158\46\u0154\1\u01cd"+ |
| "\21\u0154\1\0\12\u0154\1\u01ce\1\u01cd\1\u0154\1\u0158\46\u0154"+ |
| "\1\u01cd\20\u0154\14\0\1\u01cf\72\0\14\u0154\1\u01ce\1\u0154"+ |
| "\1\0\71\u0154\1\0\12\u0154\1\u0151\1\u01d0\1\u0154\1\u0158"+ |
| "\46\u0154\1\u01d0\20\u0154\2\242\1\0\4\242\1\u01d1\12\242"+ |
| "\1\u01d2\3\242\1\u01d3\23\242\1\u01d4\36\242\1\0\33\242"+ |
| "\1\u01d5\50\242\23\0\1\u01d6\63\0\12\u015d\1\u015e\3\u015d"+ |
| "\1\0\71\u015d\1\0\10\u015d\1\u01d7\2\u015d\1\u01d8\1\u015d"+ |
| "\1\u0160\46\u015d\1\u01d8\20\u015d\14\u0161\1\u015e\1\u0161\1\0"+ |
| "\71\u0161\1\0\12\u0161\1\u01d9\1\u01da\1\u0161\1\u0163\46\u0161"+ |
| "\1\u01da\20\u0161\1\u01db\2\u01b3\1\u01dc\1\u01db\1\u01b3\4\u01db"+ |
| "\1\u01b3\1\u01db\1\u01b3\3\u01db\1\u01b3\6\u01db\1\u01b3\55\u01db"+ |
| "\1\252\1\u01db\1\u01dd\2\u01b6\1\u01de\1\u01dd\1\u01b6\4\u01dd"+ |
| "\1\u01b6\1\u01dd\1\u01b6\3\u01dd\1\u01b6\6\u01dd\1\u01b6\55\u01dd"+ |
| "\1\252\1\u01dd\5\0\1\u0167\12\0\1\u0167\6\0\1\u0167"+ |
| "\57\0\12\274\1\0\1\274\1\0\1\274\1\u01df\66\274"+ |
| "\1\u016f\10\274\1\u01e0\2\274\1\0\1\274\1\0\1\u016c"+ |
| "\4\274\1\u01e1\3\274\1\u01e2\23\274\1\u01e3\32\274\1\0"+ |
| "\1\274\12\u01df\1\0\1\u01df\1\0\70\u01df\1\0\1\u01df"+ |
| "\12\u016f\1\0\1\u016f\1\0\1\u01e4\67\u016f\1\0\1\u016f"+ |
| "\7\u0170\1\u01e5\4\u0170\1\u0171\5\u0170\1\u01e6\3\u0170\1\u01e7"+ |
| "\23\u0170\1\u01e8\50\u0170\1\u0171\21\u0170\1\u01e9\50\u0170\7\u0174"+ |
| "\1\u01ea\2\u0174\1\u0175\7\u0174\1\u01eb\3\u0174\1\u01ec\23\u0174"+ |
| "\1\u01ed\46\u0174\1\u0175\23\u0174\1\u01ee\50\u0174\12\312\1\0"+ |
| "\103\312\1\u01ef\2\312\1\0\4\312\1\u0178\2\312\1\u01f0"+ |
| "\3\312\1\u01f1\23\312\1\u01f2\32\312\1\0\1\312\17\u01f3"+ |
| "\1\u01f4\67\u01f3\14\317\1\0\101\317\1\u01f5\4\317\1\0"+ |
| "\2\317\1\u017b\2\317\1\u01f6\3\317\1\u01f7\23\317\1\u01f8"+ |
| "\32\317\1\0\1\317\17\u01f9\1\u01fa\67\u01f9\7\322\1\u01fb"+ |
| "\2\322\1\0\1\322\1\0\5\322\1\u01fc\3\322\1\u01fd"+ |
| "\23\322\1\u01fe\32\322\1\0\1\322\7\u0180\1\u01ff\4\u0180"+ |
| "\1\u0181\5\u0180\1\u0200\3\u0180\1\u0201\23\u0180\1\u0202\50\u0180"+ |
| "\1\u0181\21\u0180\1\u0203\50\u0180\7\u0184\1\u0204\2\u0184\1\u0185"+ |
| "\7\u0184\1\u0205\3\u0184\1\u0206\23\u0184\1\u0207\46\u0184\1\u0185"+ |
| "\23\u0184\1\u0208\50\u0184\12\340\1\0\103\340\1\u0209\2\340"+ |
| "\1\0\4\340\1\u0188\2\340\1\u020a\3\340\1\u020b\23\340"+ |
| "\1\u020c\32\340\1\0\1\340\17\u020d\1\u020e\67\u020d\14\344"+ |
| "\1\0\101\344\1\u020f\4\344\1\0\2\344\1\u018b\2\344"+ |
| "\1\u0210\3\344\1\u0211\23\344\1\u0212\32\344\1\0\1\344"+ |
| "\17\u0213\1\u0214\67\u0213\7\0\1\u0215\106\0\1\u0216\136\0"+ |
| "\1\u0217\47\0\1\u0194\1\0\11\u0194\1\0\7\u0194\1\0"+ |
| "\63\u0194\1\u0195\1\0\11\u0195\1\0\7\u0195\1\0\47\u0195"+ |
| "\1\0\14\u0195\1\0\3\u0195\1\u0196\5\u0195\1\0\4\u0195"+ |
| "\1\u0196\2\u0195\1\0\3\u0195\1\u0196\43\u0195\1\u0218\13\u0195"+ |
| "\21\0\1\u0198\51\0\1\u0219\34\0\1\u021a\15\0\3\u021a"+ |
| "\2\0\1\u021a\11\0\1\u021a\1\0\2\u021a\7\0\1\u021a"+ |
| "\2\0\2\u021a\6\0\1\u021a\17\0\1\u019a\157\0\1\u019f"+ |
| "\26\0\1\114\1\u021b\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\u021c\1\114\1\0\1\u021c\12\114\1\0"+ |
| "\4\114\1\0\11\114\1\0\1\114\12\376\1\377\74\376"+ |
| "\14\u0102\1\377\72\u0102\12\u0108\1\u010a\3\u0108\1\0\71\u0108"+ |
| "\1\0\10\u0108\1\u010a\2\u0108\1\u021d\1\u0108\1\u01a8\46\u0108"+ |
| "\1\u021d\20\u0108\1\143\2\u0108\1\u0109\1\143\1\u0108\4\143"+ |
| "\1\u010a\1\143\1\u0108\3\143\1\u0108\6\143\1\u0108\57\143"+ |
| "\14\u010d\1\u010a\1\u010d\1\0\71\u010d\1\0\12\u010d\1\u010a"+ |
| "\1\u021e\1\u010d\1\u01ab\46\u010d\1\u021e\20\u010d\1\144\2\u010d"+ |
| "\1\u010e\1\144\1\u010d\4\144\1\u010d\1\144\1\u010a\3\144"+ |
| "\1\u010d\6\144\1\u010d\57\144\12\u0115\1\u0116\74\u0115\14\u0119"+ |
| "\1\u0116\72\u0119\6\0\3\170\1\u021f\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\12\u0121\1\u0122\74\u0121\14\u0125\1\u0122"+ |
| "\72\u0125\1\u01b2\2\u01b3\1\u01b4\1\u01b2\1\u01b3\4\u01b2\1\u01b3"+ |
| "\1\u01b2\1\u01b3\3\u01b2\1\u01b3\6\u01b2\1\u01b3\55\u01b2\1\u0220"+ |
| "\1\u01b2\105\u01b3\1\u0221\1\u01b3\1\u01b5\2\u01b6\1\u01b7\1\u01b5"+ |
| "\1\u01b6\4\u01b5\1\u01b6\1\u01b5\1\u01b6\3\u01b5\1\u01b6\6\u01b5"+ |
| "\1\u01b6\55\u01b5\1\u0220\1\u01b5\105\u01b6\1\u0222\1\u01b6\42\0"+ |
| "\1\u0223\14\0\1\u0223\63\0\2\u0224\103\0\2\u0225\115\0"+ |
| "\1\u0226\14\0\1\u0226\63\0\2\u0227\51\0\12\u0132\1\u0133"+ |
| "\74\u0132\14\u0136\1\u0133\1\u0136\1\0\70\u0136\3\0\2\u0228"+ |
| "\1\0\4\u0228\2\0\1\u0138\1\u0228\2\0\4\u0228\1\0"+ |
| "\11\u0228\1\0\40\u0228\2\0\4\u0228\1\0\1\u0228\14\u0136"+ |
| "\1\u0133\72\u0136\12\u0144\1\u0145\74\u0144\14\u0148\1\u0145\1\u0148"+ |
| "\1\0\70\u0148\3\0\2\u0229\1\0\4\u0229\2\0\1\u014a"+ |
| "\1\u0229\2\0\4\u0229\1\0\11\u0229\1\0\40\u0229\2\0"+ |
| "\4\u0229\1\0\1\u0229\14\u0148\1\u0145\72\u0148\2\233\1\0"+ |
| "\4\233\1\u022a\101\233\1\0\34\233\1\u022b\47\233\12\u0150"+ |
| "\1\u0151\74\u0150\14\u0154\1\u0151\1\u0154\1\0\70\u0154\3\0"+ |
| "\2\u022c\1\0\4\u022c\2\0\1\u0156\1\u022c\2\0\4\u022c"+ |
| "\1\0\11\u022c\1\0\40\u022c\2\0\4\u022c\1\0\1\u022c"+ |
| "\14\u0154\1\u0151\72\u0154\2\242\1\0\4\242\1\u022d\101\242"+ |
| "\1\0\34\242\1\u022e\47\242\2\0\1\u022f\104\0\12\u015d"+ |
| "\1\u015e\74\u015d\14\u0161\1\u015e\72\u0161\1\u01db\2\u01b3\1\u01dc"+ |
| "\1\u01db\1\u01b3\4\u01db\1\u01b3\1\u01db\1\u01b3\3\u01db\1\u01b3"+ |
| "\6\u01db\1\u01b3\55\u01db\1\u0230\1\u01db\1\u01dd\2\u01b6\1\u01de"+ |
| "\1\u01dd\1\u01b6\4\u01dd\1\u01b6\1\u01dd\1\u01b6\3\u01dd\1\u01b6"+ |
| "\6\u01dd\1\u01b6\55\u01dd\1\u0230\1\u01dd\7\274\1\u0231\2\274"+ |
| "\1\0\1\274\1\0\1\u016c\67\274\1\0\1\274\12\u016f"+ |
| "\1\0\1\u016f\1\0\1\u016f\1\0\70\u016f\7\u0170\1\u0232"+ |
| "\4\u0170\1\u0171\106\u0170\1\u0171\22\u0170\1\u0233\47\u0170\7\u0174"+ |
| "\1\u0234\2\u0174\1\u0175\106\u0174\1\u0175\24\u0174\1\u0235\47\u0174"+ |
| "\7\312\1\u0236\2\312\1\0\4\312\1\u0178\65\312\1\0"+ |
| "\1\312\12\u0237\1\u0238\72\u0237\1\0\1\u0237\7\317\1\u0239"+ |
| "\4\317\1\0\2\317\1\u017b\65\317\1\0\1\317\14\u023a"+ |
| "\1\u0238\70\u023a\1\0\1\u023a\7\322\1\u023b\2\322\1\0"+ |
| "\1\322\1\0\70\322\1\0\1\322\7\u0180\1\u023c\4\u0180"+ |
| "\1\u0181\106\u0180\1\u0181\22\u0180\1\u023d\47\u0180\7\u0184\1\u023e"+ |
| "\2\u0184\1\u0185\106\u0184\1\u0185\24\u0184\1\u023f\47\u0184\7\340"+ |
| "\1\u0240\2\340\1\0\4\340\1\u0188\65\340\1\0\1\340"+ |
| "\12\u0241\1\u0242\72\u0241\1\0\1\u0241\7\344\1\u0243\4\344"+ |
| "\1\0\2\344\1\u018b\65\344\1\0\1\344\14\u0244\1\u0242"+ |
| "\70\u0244\1\0\1\u0244\40\0\1\u0245\141\0\1\u0218\34\0"+ |
| "\1\u021a\15\0\3\u021a\2\0\1\u021a\11\0\1\u021a\1\0"+ |
| "\2\u021a\7\0\1\u021a\1\0\1\u0219\2\u021a\6\0\1\u021a"+ |
| "\10\0\4\114\7\0\1\114\6\0\6\114\1\0\7\114"+ |
| "\1\u0246\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\u0247\4\114\1\0\13\114\1\0\1\114"+ |
| "\1\u0247\2\114\1\0\11\114\1\0\1\114\12\u0108\1\u010a"+ |
| "\74\u0108\14\u010d\1\u010a\72\u010d\6\0\4\170\7\0\1\170"+ |
| "\6\0\6\170\1\0\6\170\1\u0248\4\170\1\0\6\170"+ |
| "\1\u0249\4\170\1\0\4\170\1\0\11\170\1\0\1\170"+ |
| "\54\0\1\u024a\5\0\1\u024a\73\0\1\u024b\14\0\1\u024b"+ |
| "\66\0\1\u024c\11\0\1\u024c\74\0\1\u024d\11\0\1\u024d"+ |
| "\77\0\1\u024e\14\0\1\u024e\22\0\2\233\1\0\35\233"+ |
| "\1\u024f\46\233\2\242\1\0\35\242\1\u0250\46\242\14\u0170"+ |
| "\1\u0171\23\u0170\1\u0251\46\u0170\12\u0174\1\u0175\25\u0174\1\u0252"+ |
| "\46\u0174\12\u0237\1\u01f3\4\u0237\1\u0253\65\u0237\1\u01f3\1\u0237"+ |
| "\14\u023a\1\u01f9\2\u023a\1\u0254\65\u023a\1\u01f9\1\u023a\14\u0180"+ |
| "\1\u0181\23\u0180\1\u0255\46\u0180\12\u0184\1\u0185\25\u0184\1\u0256"+ |
| "\46\u0184\12\u0241\1\u020d\4\u0241\1\u0257\65\u0241\1\u020d\1\u0241"+ |
| "\14\u0244\1\u0213\2\u0244\1\u0258\65\u0244\1\u0213\1\u0244\41\0"+ |
| "\1\u0259\53\0\4\114\7\0\1\114\6\0\6\114\1\0"+ |
| "\13\114\1\0\4\114\1\u025a\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\u025b\7\114\1\0\4\114\1\u025b"+ |
| "\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\u025c"+ |
| "\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\u025d\2\170\1\0\13\170\1\0\4\170\1\0"+ |
| "\11\170\1\0\1\170\55\0\1\u025e\24\0\1\u025e\52\0"+ |
| "\1\u025f\20\0\1\u025f\70\0\1\u0260\13\0\1\u0260\53\0"+ |
| "\2\u0261\112\0\1\u0262\35\0\1\u0262\11\0\2\233\1\0"+ |
| "\36\233\1\u0263\45\233\2\242\1\0\36\242\1\u0264\45\242"+ |
| "\14\u0170\1\u0171\24\u0170\1\u0265\45\u0170\12\u0174\1\u0175\26\u0174"+ |
| "\1\u0266\45\u0174\12\u0237\1\u0267\4\u0237\1\u0253\65\u0237\1\u01f3"+ |
| "\1\u0237\14\u023a\1\u0268\2\u023a\1\u0254\65\u023a\1\u01f9\1\u023a"+ |
| "\14\u0180\1\u0181\24\u0180\1\u0269\45\u0180\12\u0184\1\u0185\26\u0184"+ |
| "\1\u026a\45\u0184\12\u0241\1\u026b\4\u0241\1\u0257\65\u0241\1\u020d"+ |
| "\1\u0241\14\u0244\1\u026c\2\u0244\1\u0258\65\u0244\1\u0213\1\u0244"+ |
| "\42\0\1\u026d\52\0\4\114\7\0\1\114\6\0\6\114"+ |
| "\1\0\13\114\1\0\7\114\1\u026e\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\u026f\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\u0270\4\170"+ |
| "\1\0\13\170\1\0\4\170\1\0\11\170\1\0\1\170"+ |
| "\44\0\1\u0271\11\0\1\u0271\72\0\1\u0272\14\0\1\u0272"+ |
| "\71\0\1\u0273\14\0\1\u0273\27\0\2\233\1\0\37\233"+ |
| "\1\u0274\44\233\2\242\1\0\37\242\1\u0275\44\242\14\u0170"+ |
| "\1\u0171\25\u0170\1\u0276\44\u0170\12\u0174\1\u0175\27\u0174\1\u0277"+ |
| "\44\u0174\14\u0180\1\u0181\25\u0180\1\u0278\44\u0180\12\u0184\1\u0185"+ |
| "\27\u0184\1\u0279\44\u0184\41\0\1\u027a\53\0\4\114\7\0"+ |
| "\1\114\6\0\5\114\1\u027b\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\u027c\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\u027d\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\u027e\45\233\2\242"+ |
| "\1\0\36\242\1\u027f\45\242\14\u0170\1\u0171\24\u0170\1\u0280"+ |
| "\45\u0170\12\u0174\1\u0175\26\u0174\1\u0281\45\u0174\14\u0180\1\u0181"+ |
| "\24\u0180\1\u0282\45\u0180\12\u0184\1\u0185\26\u0184\1\u0283\45\u0184"+ |
| "\36\0\1\u0284\56\0\4\114\7\0\1\114\6\0\6\114"+ |
| "\1\0\5\114\1\u0285\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\u0286\7\170\1\0\1\170\2\233\1\0"+ |
| "\33\233\1\u0287\50\233\2\242\1\0\33\242\1\u0288\50\242"+ |
| "\14\u0170\1\u0171\21\u0170\1\u0289\50\u0170\12\u0174\1\u0175\23\u0174"+ |
| "\1\u028a\50\u0174\14\u0180\1\u0181\21\u0180\1\u028b\50\u0180\12\u0184"+ |
| "\1\u0185\23\u0184\1\u028c\50\u0184\6\0\4\114\7\0\1\114"+ |
| "\6\0\6\114\1\0\7\114\1\u028d\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\u028e\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\u028f"+ |
| "\6\0\4\170\7\0\1\170\6\0\6\170\1\0\10\170"+ |
| "\1\u0290\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\u0291\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\u0292\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\u0293\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\u0294\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\u0295\6\114\1\0\4\114"+ |
| "\1\0\11\114\1\0\1\114\6\u0296\4\u0297\7\u0296\1\u0297"+ |
| "\5\u0296\1\0\6\u0297\1\u0296\13\u0297\1\u0296\13\u0297\1\u0296"+ |
| "\4\u0297\1\u0296\11\u0297\1\u0296\1\u0297\43\0\1\u0298\3\0"+ |
| "\1\u0299\7\0\1\u029a\1\u029b\21\0\1\u029c\12\0\4\170"+ |
| "\7\0\1\170\6\0\6\170\1\0\4\170\1\u029d\3\170"+ |
| "\1\u029e\2\170\1\0\4\170\1\u029f\1\u02a0\5\170\1\0"+ |
| "\4\170\1\0\6\170\1\u02a1\2\170\1\0\1\170\60\0"+ |
| "\1\u02a2\77\0\1\u02a3\115\0\1\u02a4\105\0\1\u02a5\107\0"+ |
| "\1\u02a6\34\0\4\170\7\0\1\170\6\0\6\170\1\0"+ |
| "\13\170\1\0\5\170\1\u02a7\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\u02a8\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\u02a9\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\u02aa\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\u02ab\5\170\1\0\4\170\1\0\11\170"+ |
| "\1\0\1\170\45\0\1\u02ac\136\0\1\u02ad\107\0\1\u02ae"+ |
| "\67\0\1\u02af\125\0\1\u02b0\16\0\4\170\7\0\1\170"+ |
| "\6\0\6\170\1\0\6\170\1\u02b1\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\u02b2\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\u02b3\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\u02b4\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\u02b5\6\170\1\0\1\170\47\0\1\u02b6"+ |
| "\74\0\1\u02b7\106\0\1\u02b8\116\0\1\u02b9\105\0\1\u02ba"+ |
| "\50\0\4\170\7\0\1\170\6\0\6\170\1\0\10\170"+ |
| "\1\u02bb\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\u02bc\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\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\6\170\1\0\6\170\1\u02be\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\u02bf\5\170"+ |
| "\1\0\13\170\1\0\4\170\1\0\11\170\1\0\1\170"+ |
| "\60\0\1\u02c0\131\0\1\u02c1\52\0\1\u02c2\106\0\1\u02c3"+ |
| "\45\0\4\170\7\0\1\170\6\0\6\170\1\0\13\170"+ |
| "\1\0\5\170\1\u02c4\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\u02c5\1\170\1\0\1\170\6\0\4\170\7\0\1\170"+ |
| "\6\0\6\170\1\0\10\170\1\u02c6\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\u02c7\2\170"+ |
| "\1\0\13\170\1\0\4\170\1\0\11\170\1\0\1\170"+ |
| "\104\0\1\u02c8\63\0\1\u02b0\131\0\1\u02ba\106\0\1\u02c9"+ |
| "\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\u02ca\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\u02b5\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\u02bf\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\u02cb\1\0\1\170\35\0\1\u02b0\154\0"+ |
| "\1\u02cc\11\0\4\170\7\0\1\170\6\0\5\170\1\u02b5"+ |
| "\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\u02cd\1\170\1\0\1\170\57\0\1\u02b0\35\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"; |
| |
| /** |
| * 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[] = { |
| 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, |
| 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
| 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, |
| 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, |
| 9, 1, 9, 1, 1, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
| 9, 1, 1, 1, 1, 9, 1, 1, 1, 1, 1, 1, 9, 1, 1, 9, |
| 1, 1, 1, 1, 9, 1, 1, 1, 1, 1, 1, 1, 9, 1, 1, 1, |
| 1, 1, 1, 1, 9, 1, 1, 1, 1, 1, 1, 9, 1, 1, 1, 1, |
| 1, 1, 1, 1, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
| 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 1, 1, 1, |
| 1, 1, 1, 9, 9, 1, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
| 1, 1, 1, 9, 1, 1, 1, 1, 9, 1, 1, 1, 1, 9, 9, 1, |
| 9, 3, 3, 9, 3, 3, 3, 9, 3, 1, 1, 9, 1, 9, 1, 1, |
| 1, 1, 1, 9, 9, 1, 9, 3, 3, 9, 3, 3, 3, 9, 3, 1, |
| 1, 1, 9, 1, 1, 1, 9, 9, 1, 1, 0, 1, 0, 1, 2, 0, |
| 1, 2, 1, 0, 0, 0, 9, 1, 1, 1, 9, 9, 0, 0, 9, 0, |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 1, 1, 0, 0, 1, 1, |
| 9, 0, 9, 0, 0, 9, 0, 0, 0, 0, 0, 9, 1, 1, 0, 1, |
| 0, 9, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 9, 0, 0, |
| 0, 0, 9, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 9, 0, |
| 0, 1, 0, 0, 9, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, |
| 9, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 9, 0, 0, |
| 0, 0, 0, 1, 1, 9, 1, 9, 9, 9, 9, 1, 1, 1, 1, 2, |
| 13, 3, 2, 2, 13, 3, 2, 0, 1, 1, 0, 1, 1, 1, 1, 2, |
| 13, 3, 2, 2, 13, 3, 2, 0, 1, 1, 0, 1, 1, 0, 9, 9, |
| 9, 0, 0, 1, 1, 1, 9, 0, 0, 1, 13, 9, 9, 13, 1, 9, |
| 9, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, |
| 0, 3, 2, 2, 3, 2, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0, |
| 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, |
| 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 3, 2, 3, 2, 1, 1, |
| 1, 1, 1, 0, 2, 3, 3, 3, 2, 2, 3, 3, 3, 2, 1, 1, |
| 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 2, 3, |
| 3, 3, 2, 2, 3, 3, 3, 2, 1, 1, 1, 1, 0, 0, 1, 1, |
| 1, 1, 0, 0, 9, 9, 0, 1, 9, 0, 1, 1, 0, 0, 1, 5, |
| 13, 13, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 9, 5, |
| 1, 3, 2, 3, 2, 1, 0, 9, 1, 0, 1, 3, 2, 3, 2, 1, |
| 0, 9, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, |
| 2, 2, 0, 0, 2, 2, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, |
| 9, 9, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 0, 1, 1, 1, |
| 9, 9, 9, 1, 1, 2, 2, 2, 2, 0, 1, 1, 1, 1, 1, 2, |
| 2, 2, 2, 9, 1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, |
| 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, |
| 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, |
| 1, 1, 1, 1, 1, 0, 0, 0, 0, 9, 1, 1, 1, 1, 1, 0, |
| 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1 |
| }; |
| |
| /** 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 ContextRegionContainer fBufferedEmbeddedContainer = 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 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); |
| } |
| 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(!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; |
| if(!isEndingType) { |
| // check for ending context |
| if (endTagName == null) { |
| for (int i = 0; i < endTypes.length; i++) { |
| isEndingType = isEndingType || (internalContext == endTypes[i]); |
| } |
| } |
| else { |
| isEndingType = ((isInEndTag && internalContext == XML_TAG_CLOSE) || (isInFirstTag && internalContext == XML_EMPTY_TAG_CLOSE)) && internalTagName != null && internalTagName.equals(endTagName); |
| } |
| } |
| ITextRegionList embeddedList = fEmbeddedContainer.getRegions(); |
| 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; |
| } |
| 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[35287]; |
| int i = 0; /* index in packed string */ |
| int j = 0; /* index in unpacked array */ |
| while (i < 9344) { |
| 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(); |
| |
| boolean yy_counted = false; |
| for (yy_currentPos = yy_startRead; yy_currentPos < yy_markedPos; |
| yy_currentPos++) { |
| switch (yy_buffer[yy_currentPos]) { |
| case '\r': |
| yyline++; |
| yy_counted = true; |
| break; |
| case '\n': |
| if (yy_counted) |
| yy_counted = false; |
| else { |
| yyline++; |
| } |
| break; |
| default: |
| yy_counted = false; |
| } |
| } |
| |
| if (yy_counted) { |
| if ( yy_advance() == '\n' ) yyline--; |
| if ( !yy_atEOF ) yy_currentPos--; |
| } |
| |
| 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 289: |
| case 295: |
| case 296: |
| case 433: |
| case 436: |
| case 543: |
| { /* 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 718: break; |
| case 169: |
| case 174: |
| case 175: |
| case 349: |
| case 355: |
| case 356: |
| case 470: |
| case 472: |
| case 474: |
| case 476: |
| case 559: |
| { /* 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 719: break; |
| case 685: |
| case 690: |
| case 697: |
| case 702: |
| { |
| 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 720: break; |
| case 660: |
| { |
| 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 721: break; |
| case 643: |
| case 646: |
| case 647: |
| case 648: |
| case 649: |
| case 650: |
| case 651: |
| { |
| if(Debug.debugTokenizer) |
| dump("\nCDATA start");//$NON-NLS-1$ |
| fStateStack.push(yystate()); |
| yybegin(ST_CDATA_TEXT); |
| return XML_CDATA_OPEN; |
| } |
| case 722: break; |
| case 635: |
| { |
| 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 723: break; |
| case 626: |
| { |
| if(Debug.debugTokenizer) |
| dump("element");//$NON-NLS-1$ |
| yybegin(ST_XML_ELEMENT_DECLARATION); |
| return XML_ELEMENT_DECLARATION; |
| } |
| case 724: break; |
| case 625: |
| { |
| if(Debug.debugTokenizer) |
| dump("attlist");//$NON-NLS-1$ |
| yybegin(ST_XML_ATTLIST_DECLARATION); |
| return XML_ATTLIST_DECLARATION; |
| } |
| case 725: break; |
| case 624: |
| { |
| if(Debug.debugTokenizer) |
| dump("doctype");//$NON-NLS-1$ |
| yybegin(ST_XML_DOCTYPE_DECLARATION); |
| return XML_DOCTYPE_DECLARATION; |
| } |
| case 726: break; |
| case 609: |
| { |
| 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 727: break; |
| case 608: |
| { |
| 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 728: break; |
| case 602: |
| { |
| 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 729: break; |
| case 577: |
| case 618: |
| case 619: |
| { |
| return JSP_VBL_QUOTED_CONTENT; |
| } |
| case 730: break; |
| case 567: |
| case 614: |
| case 615: |
| { |
| return JSP_EL_QUOTED_CONTENT; |
| } |
| case 731: break; |
| case 558: |
| { |
| if(Debug.debugTokenizer) |
| dump("\nJSP comment close");//$NON-NLS-1$ |
| yybegin(YYINITIAL); |
| return JSP_COMMENT_CLOSE; |
| } |
| case 732: 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("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 733: break; |
| case 544: |
| { |
| 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 734: break; |
| case 536: |
| { |
| if(Debug.debugTokenizer) |
| dump("\nCharRef");//$NON-NLS-1$ |
| return XML_CHAR_REFERENCE; |
| } |
| case 735: break; |
| case 533: |
| { |
| 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 736: break; |
| case 532: |
| case 553: |
| case 556: |
| case 560: |
| case 561: |
| case 563: |
| case 565: |
| case 568: |
| case 570: |
| case 571: |
| case 573: |
| case 575: |
| case 578: |
| { |
| /* 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 737: break; |
| case 417: |
| case 418: |
| { |
| 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 738: break; |
| case 416: |
| { |
| if(Debug.debugTokenizer) |
| dump("comment end");//$NON-NLS-1$ |
| fEmbeddedHint = UNDEFINED; |
| yybegin(YYINITIAL); |
| return XML_COMMENT_CLOSE; |
| } |
| case 739: break; |
| case 415: |
| { |
| if(Debug.debugTokenizer) |
| dump("CDATA end");//$NON-NLS-1$ |
| yybegin(fStateStack.pop()); |
| return XML_CDATA_CLOSE; |
| } |
| case 740: break; |
| case 413: |
| { |
| 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 741: break; |
| case 412: |
| { |
| if(Debug.debugTokenizer) |
| dump("\nPEReference");//$NON-NLS-1$ |
| return XML_PE_REFERENCE; |
| } |
| case 742: break; |
| case 410: |
| { |
| 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 743: break; |
| case 406: |
| { |
| if(Debug.debugTokenizer) |
| dump("\nEntityRef");//$NON-NLS-1$ |
| return XML_ENTITY_REFERENCE; |
| } |
| case 744: 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 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 745: 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 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 746: break; |
| case 398: |
| case 455: |
| case 465: |
| case 480: |
| case 485: |
| case 490: |
| case 495: |
| case 501: |
| case 507: |
| case 511: |
| case 516: |
| case 521: |
| case 527: |
| { |
| /* 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 747: break; |
| case 388: |
| { |
| yybegin(ST_JSP_VBL_DQUOTES_END); |
| return JSP_VBL_QUOTED_CONTENT; |
| } |
| case 748: break; |
| case 384: |
| { |
| yybegin(ST_JSP_VBL_SQUOTES_END); |
| return JSP_VBL_QUOTED_CONTENT; |
| } |
| case 749: break; |
| case 382: |
| { |
| fELlevel++; |
| if(fELlevel == 1) { |
| return JSP_VBL_OPEN; |
| } |
| } |
| case 750: break; |
| case 372: |
| { |
| yybegin(ST_JSP_EL_DQUOTES_END); |
| return JSP_EL_QUOTED_CONTENT; |
| } |
| case 751: break; |
| case 368: |
| { |
| yybegin(ST_JSP_EL_SQUOTES_END); |
| return JSP_EL_QUOTED_CONTENT; |
| } |
| case 752: break; |
| case 366: |
| { |
| //System.out.println(JSP_EL_CONTENT+ ":[" + yytext() + "]"); |
| return JSP_EL_CONTENT; |
| } |
| case 753: break; |
| case 365: |
| { |
| fELlevel++; |
| if(fELlevel == 1) { |
| return JSP_EL_OPEN; |
| } |
| } |
| case 754: break; |
| case 362: |
| { |
| 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 755: break; |
| case 361: |
| { |
| 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 756: break; |
| case 360: |
| { |
| 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 757: break; |
| case 359: |
| { |
| 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 758: break; |
| case 357: |
| { |
| 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 759: break; |
| case 301: |
| case 315: |
| case 321: |
| { |
| return XML_DOCTYPE_INTERNAL_SUBSET; |
| } |
| case 760: break; |
| case 287: |
| { |
| 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 761: break; |
| case 285: |
| { |
| 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 762: break; |
| case 283: |
| { |
| 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 763: break; |
| case 274: |
| { |
| 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 764: break; |
| case 272: |
| { |
| 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 765: 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); |
| return PROXY_CONTEXT; |
| } |
| case 766: 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 767: 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 768: 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 769: break; |
| case 118: |
| case 119: |
| case 120: |
| case 284: |
| case 430: |
| case 542: |
| case 583: |
| case 584: |
| case 603: |
| case 604: |
| case 622: |
| case 623: |
| case 636: |
| case 645: |
| case 653: |
| case 655: |
| case 657: |
| case 659: |
| case 662: |
| case 668: |
| case 669: |
| case 670: |
| case 671: |
| case 672: |
| case 678: |
| case 679: |
| case 680: |
| case 681: |
| case 682: |
| case 688: |
| case 689: |
| case 691: |
| case 692: |
| case 698: |
| case 699: |
| case 700: |
| case 701: |
| case 707: |
| case 708: |
| case 709: |
| case 710: |
| case 713: |
| case 714: |
| case 716: |
| { |
| 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 770: 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 771: break; |
| case 109: |
| case 113: |
| case 277: |
| { |
| if(Debug.debugTokenizer) |
| dump("attr value");//$NON-NLS-1$ |
| yybegin(ST_JSP_DIRECTIVE_ATTRIBUTE_NAME); |
| return XML_TAG_ATTRIBUTE_VALUE; |
| } |
| case 772: break; |
| case 108: |
| { |
| if(Debug.debugTokenizer) |
| dump("equals");//$NON-NLS-1$ |
| yybegin(ST_JSP_DIRECTIVE_ATTRIBUTE_VALUE); |
| return XML_TAG_ATTRIBUTE_EQUALS; |
| } |
| case 773: break; |
| case 107: |
| { |
| if(Debug.debugTokenizer) |
| dump("attr name");//$NON-NLS-1$ |
| yybegin(ST_JSP_DIRECTIVE_EQUALS); |
| return XML_TAG_ATTRIBUTE_NAME; |
| } |
| case 774: break; |
| case 104: |
| { |
| if(Debug.debugTokenizer) |
| dump("JSP directive name");//$NON-NLS-1$ |
| yybegin(ST_JSP_DIRECTIVE_NAME_WHITESPACE); |
| return JSP_DIRECTIVE_NAME; |
| } |
| case 775: 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 776: break; |
| case 96: |
| case 98: |
| case 99: |
| case 265: |
| case 266: |
| case 267: |
| case 270: |
| case 271: |
| case 424: |
| case 427: |
| { |
| 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 777: 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 778: 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 779: break; |
| case 92: |
| { |
| if(Debug.debugTokenizer) |
| dump("DHTML processing instruction end");//$NON-NLS-1$ |
| fEmbeddedHint = UNDEFINED; |
| yybegin(YYINITIAL); |
| return XML_PI_CLOSE; |
| } |
| case 780: break; |
| case 86: |
| case 88: |
| case 254: |
| { |
| 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 781: 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 782: break; |
| case 50: |
| case 209: |
| case 210: |
| case 213: |
| case 223: |
| case 224: |
| case 227: |
| case 228: |
| case 393: |
| case 396: |
| case 506: |
| case 520: |
| case 526: |
| { |
| return JSP_VBL_CONTENT; |
| } |
| case 783: break; |
| case 43: |
| case 187: |
| case 188: |
| case 191: |
| case 201: |
| case 202: |
| case 206: |
| case 207: |
| case 363: |
| case 377: |
| case 380: |
| case 478: |
| case 479: |
| case 494: |
| case 500: |
| { |
| return JSP_EL_CONTENT; |
| } |
| case 784: break; |
| case 35: |
| case 161: |
| case 162: |
| case 345: |
| case 464: |
| case 468: |
| case 557: |
| case 591: |
| case 611: |
| case 628: |
| case 638: |
| { |
| if(Debug.debugTokenizer) |
| dump("attlist contentspec");//$NON-NLS-1$ |
| return XML_ATTLIST_DECL_CONTENT; |
| } |
| case 785: break; |
| case 33: |
| case 154: |
| case 155: |
| case 333: |
| case 454: |
| case 458: |
| case 554: |
| case 590: |
| case 610: |
| case 627: |
| case 637: |
| { |
| if(Debug.debugTokenizer) |
| dump("elementdecl contentspec");//$NON-NLS-1$ |
| return XML_ELEMENT_DECL_CONTENT; |
| } |
| case 786: 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); |
| yypushback(yylength()-1); |
| return XML_TAG_ATTRIBUTE_VALUE; |
| } |
| yybegin(YYINITIAL); |
| return XML_CONTENT; |
| } |
| case 787: break; |
| case 18: |
| case 106: |
| { |
| if(Debug.debugTokenizer) |
| dump("white space");//$NON-NLS-1$ |
| yybegin(ST_JSP_DIRECTIVE_ATTRIBUTE_NAME); |
| return WHITE_SPACE; |
| } |
| case 788: 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 789: break; |
| case 0: |
| case 57: |
| case 60: |
| case 61: |
| case 63: |
| case 235: |
| case 237: |
| case 240: |
| case 242: |
| case 403: |
| case 404: |
| case 405: |
| case 409: |
| case 411: |
| case 414: |
| case 535: |
| { |
| if(Debug.debugTokenizer) |
| dump("\nXML content");//$NON-NLS-1$ |
| return XML_CONTENT; |
| } |
| case 790: break; |
| case 58: |
| case 103: |
| case 115: |
| case 121: |
| case 131: |
| { |
| if(Debug.debugTokenizer) |
| dump("\nstart tag open");//$NON-NLS-1$ |
| fEmbeddedHint = XML_TAG_NAME; |
| fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME; |
| yybegin(ST_XML_TAG_NAME); |
| return XML_TAG_OPEN; |
| } |
| case 791: break; |
| case 59: |
| case 62: |
| 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 792: 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 793: break; |
| case 69: |
| case 196: |
| case 200: |
| case 218: |
| case 222: |
| { |
| if(Debug.debugTokenizer) |
| dump("LINE FEED");//$NON-NLS-1$ |
| return WHITE_SPACE; |
| } |
| case 794: break; |
| case 70: |
| case 71: |
| { |
| if(Debug.debugTokenizer) |
| dump("comment content");//$NON-NLS-1$ |
| return scanXMLCommentText(); |
| } |
| case 795: break; |
| case 75: |
| case 76: |
| case 77: |
| case 78: |
| case 247: |
| case 248: |
| case 249: |
| case 419: |
| case 538: |
| case 539: |
| case 581: |
| case 582: |
| case 601: |
| case 621: |
| case 634: |
| case 644: |
| case 652: |
| case 654: |
| case 656: |
| case 658: |
| { |
| if(Debug.debugTokenizer) |
| dump("processing instruction target");//$NON-NLS-1$ |
| fEmbeddedHint = XML_CONTENT; |
| yybegin(ST_PI_WS); |
| return XML_TAG_NAME; |
| } |
| case 796: break; |
| case 79: |
| { |
| yybegin(ST_PI_CONTENT); |
| return WHITE_SPACE; |
| } |
| case 797: 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 798: 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 799: 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); |
| return PROXY_CONTEXT; |
| } |
| case 800: 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 801: break; |
| case 137: |
| { |
| if(Debug.debugTokenizer) |
| dump("doctype type");//$NON-NLS-1$ |
| yybegin(ST_XML_DOCTYPE_EXTERNAL_ID); |
| return XML_DOCTYPE_NAME; |
| } |
| case 802: break; |
| case 140: |
| case 144: |
| case 306: |
| case 311: |
| case 446: |
| { |
| 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 803: break; |
| case 145: |
| case 149: |
| case 318: |
| { |
| 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 804: break; |
| case 150: |
| case 324: |
| case 329: |
| case 451: |
| { |
| 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 805: 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 806: break; |
| case 157: |
| case 336: |
| case 341: |
| case 461: |
| { |
| 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 807: 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 808: break; |
| case 166: |
| case 167: |
| { |
| if(Debug.debugTokenizer) |
| dump("\nJSP comment text");//$NON-NLS-1$ |
| return scanJSPCommentText(); |
| } |
| case 809: break; |
| case 176: |
| case 180: |
| case 181: |
| case 182: |
| case 185: |
| case 186: |
| case 358: |
| { |
| return XML_TAG_ATTRIBUTE_VALUE; |
| } |
| case 810: 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 811: break; |
| case 179: |
| { |
| return isJspTag() ? JSP_TAG_ATTRIBUTE_VALUE_SQUOTE : XML_TAG_ATTRIBUTE_VALUE_SQUOTE; |
| } |
| case 812: break; |
| case 184: |
| { |
| return isJspTag()? JSP_TAG_ATTRIBUTE_VALUE_DQUOTE : XML_TAG_ATTRIBUTE_VALUE_DQUOTE; |
| } |
| case 813: break; |
| case 189: |
| { |
| yybegin(ST_JSP_EL_DQUOTES); |
| return JSP_EL_DQUOTE; |
| } |
| case 814: break; |
| case 190: |
| { |
| yybegin(ST_JSP_EL_SQUOTES); |
| return JSP_EL_SQUOTE; |
| } |
| case 815: break; |
| case 192: |
| { |
| fELlevel--; |
| if(fELlevel == 0) { |
| yybegin(YYINITIAL); |
| return JSP_EL_CLOSE; |
| } |
| return JSP_EL_CONTENT; |
| } |
| case 816: break; |
| case 195: |
| { |
| yybegin(ST_JSP_EL); |
| return JSP_EL_SQUOTE; |
| } |
| case 817: break; |
| case 199: |
| { |
| yybegin(ST_JSP_EL); |
| return JSP_EL_DQUOTE; |
| } |
| case 818: break; |
| case 203: |
| { |
| return isJspTag() ? JSP_TAG_ATTRIBUTE_VALUE_DQUOTE: XML_TAG_ATTRIBUTE_VALUE_DQUOTE; |
| } |
| case 819: break; |
| case 205: |
| { |
| return JSP_EL_CLOSE; |
| } |
| case 820: break; |
| case 211: |
| { |
| yybegin(ST_JSP_VBL_DQUOTES); |
| return JSP_VBL_DQUOTE; |
| } |
| case 821: break; |
| case 212: |
| { |
| yybegin(ST_JSP_VBL_SQUOTES); |
| return JSP_VBL_SQUOTE; |
| } |
| case 822: break; |
| case 214: |
| { |
| fELlevel--; |
| if(fELlevel == 0) { |
| yybegin(YYINITIAL); |
| return JSP_VBL_CLOSE; |
| } |
| return JSP_VBL_CONTENT; |
| } |
| case 823: break; |
| case 217: |
| { |
| yybegin(ST_JSP_VBL); |
| return JSP_VBL_SQUOTE; |
| } |
| case 824: break; |
| case 221: |
| { |
| yybegin(ST_JSP_VBL); |
| return JSP_VBL_DQUOTE; |
| } |
| case 825: break; |
| case 226: |
| { |
| return JSP_VBL_CLOSE; |
| } |
| case 826: 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 827: break; |
| case 231: |
| { |
| if(Debug.debugTokenizer) |
| dump("\nprocessing instruction start");//$NON-NLS-1$ |
| yybegin(ST_PI); |
| return XML_PI_OPEN; |
| } |
| case 828: break; |
| case 232: |
| case 332: |
| case 344: |
| case 364: |
| case 369: |
| case 373: |
| case 376: |
| case 379: |
| case 381: |
| case 385: |
| case 389: |
| case 392: |
| case 395: |
| { |
| /* 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 829: break; |
| case 233: |
| { |
| fStateStack.push(yystate()); |
| if(Debug.debugTokenizer) |
| dump("\ndeclaration start");//$NON-NLS-1$ |
| yybegin(ST_XML_DECLARATION); |
| return XML_DECLARATION_OPEN; |
| } |
| case 830: break; |
| case 246: |
| { |
| if(Debug.debugTokenizer) |
| dump("processing instruction end");//$NON-NLS-1$ |
| fEmbeddedHint = UNDEFINED; |
| yybegin(YYINITIAL); |
| return XML_PI_CLOSE; |
| } |
| case 831: break; |
| case 250: |
| { |
| // ended with nothing inside |
| fEmbeddedHint = UNDEFINED; |
| yybegin(YYINITIAL); |
| return XML_PI_CLOSE; |
| } |
| case 832: break; |
| case 251: |
| { |
| if(Debug.debugTokenizer) |
| dump("XML processing instruction end");//$NON-NLS-1$ |
| fEmbeddedHint = UNDEFINED; |
| yybegin(YYINITIAL); |
| return XML_PI_CLOSE; |
| } |
| case 833: break; |
| case 164: |
| case 165: |
| { |
| return doBlockTagScan(); |
| } |
| case 834: break; |
| default: |
| if (yy_input == YYEOF && yy_startRead == yy_currentPos) { |
| yy_atEOF = true; |
| yy_do_eof(); |
| return null; |
| } |
| else { |
| yy_ScanError(YY_NO_MATCH); |
| } |
| } |
| } |
| } |
| |
| |
| } |