refresh
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/CSSHeadTokenizer/CSSHeadTokenizer.jFlex b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/CSSHeadTokenizer/CSSHeadTokenizer.jFlex
new file mode 100644
index 0000000..00c56b7b
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/CSSHeadTokenizer/CSSHeadTokenizer.jFlex
@@ -0,0 +1,286 @@
+/*******************************************************************************
+ * Copyright (c) 2004 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
+ *******************************************************************************/
+/*nlsXXX*/
+package org.eclipse.wst.common.encoding.contentspecific.css;
+import java.io.IOException;
+import java.io.Reader;
+
+import org.eclipse.wst.common.encoding.contentspecific.EncodingParserConstants;
+import org.eclipse.wst.common.encoding.contentspecific.HeadParserToken;
+import org.eclipse.wst.common.encoding.contentspecific.IntStack;
+import org.eclipse.wst.common.encoding.contentspecific.xml.XMLHeadTokenizerConstants;
+
+
+
+%%
+
+%{
+
+
+ private boolean hasMore = true;
+ private final static int MAX_TO_SCAN = 1000;
+ StringBuffer string = new StringBuffer();
+ // state stack for easier state handling
+ private IntStack fStateStack = new IntStack();
+ private String valueText = null;
+
+
+
+ public CSSHeadTokenizer() {
+ super();
+ }
+
+ public void reset (Reader in) {
+ /* 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;
+
+ /**
+ * the number of characters from the last newline up to the start
+ * of the matched text
+ */
+ yycolumn = 0;
+
+ /**
+ * yy_atBOL == true <=> the scanner is currently at the beginning
+ * of a line
+ */
+ yy_atBOL = false;
+
+ /* 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;
+
+
+ fStateStack.clear();
+
+ hasMore = true;
+
+ // its a little wasteful to "throw away" first char array generated
+ // by class init (via auto generated code), but we really do want
+ // a small buffer for our head parsers.
+ if (yy_buffer.length != MAX_TO_SCAN) {
+ yy_buffer = new char[MAX_TO_SCAN];
+ }
+
+
+ }
+
+
+ public final HeadParserToken getNextToken() throws IOException {
+ String context = null;
+ context = primGetNextToken();
+ HeadParserToken result = null;
+ if (valueText != null) {
+ result = createToken(context, yychar, valueText);
+ valueText = null;
+ } else {
+ result = createToken(context, yychar, yytext());
+ }
+ return result;
+ }
+
+ public final boolean hasMoreTokens() {
+ return hasMore && yychar < MAX_TO_SCAN;
+ }
+ private void pushCurrentState() {
+ fStateStack.push(yystate());
+
+ }
+
+ private void popState() {
+ yybegin(fStateStack.pop());
+ }
+ private HeadParserToken createToken(String context, int start, String text) {
+ return new HeadParserToken(context, start, text);
+ }
+
+
+%}
+
+%eof{
+ hasMore=false;
+%eof}
+
+%public
+%class CSSHeadTokenizer
+%function primGetNextToken
+%type String
+%char
+%unicode
+%ignorecase
+%debug
+%switch
+
+
+UTF16BE = \xFE\xFF
+UTF16LE = \xFF\xFE
+UTF83ByteBOM = \xEF\xBB\xBF
+
+//SpaceChar = [\x20\x09]
+
+
+
+// [3] S ::= (0x20 | 0x9 | 0xD | 0xA)+
+S = [\x20\x09\x0D\x0A]
+
+BeginAttribeValue = {S}* \= {S}*
+
+LineTerminator = \r|\n
+
+
+%state ST_XMLDecl
+%state CHARSET_RULE
+%state QuotedAttributeValue
+%state DQ_STRING
+%state SQ_STRING
+%state UnDelimitedString
+
+%%
+
+
+<YYINITIAL>
+{
+ {UTF16BE} {hasMore = false; return EncodingParserConstants.UTF16BE;}
+ {UTF16LE} {hasMore = false; return EncodingParserConstants.UTF16LE;}
+ {UTF83ByteBOM} {hasMore = false; return EncodingParserConstants.UTF83ByteBOM;}
+
+ // force to be started on first line, but we do allow preceeding spaces
+ ^ {S}* "<\?xml" {S}+ {if (yychar == 0 ) {yybegin(ST_XMLDecl); return XMLHeadTokenizerConstants.XMLDeclStart;}}
+
+ ^ {S}* "@charset" {if (yychar == 0 ) {yybegin(CHARSET_RULE); return CSSHeadTokenizerConstants.CHARSET_RULE;}}
+
+
+}
+
+// I don't think there's really an XML form of CSS files ... but will leave here for consistency
+<ST_XMLDecl>
+{
+ //"version" {BeginAttribeValue} {pushCurrentState(); yybegin(QuotedAttributeValue); return XMLHeadTokenizerConstants.XMLDeclVersion;}
+ "encoding" {BeginAttribeValue} {pushCurrentState(); yybegin(QuotedAttributeValue); return XMLHeadTokenizerConstants.XMLDelEncoding;}
+ // note this "forced end" once end of XML Declaration found
+ "\?>" {yybegin(YYINITIAL); return XMLHeadTokenizerConstants.XMLDeclEnd;}
+}
+
+<CHARSET_RULE>
+{
+
+ {S}* {pushCurrentState(); yybegin(QuotedAttributeValue);}
+ ";" { yybegin(YYINITIAL); hasMore = false; return CSSHeadTokenizerConstants.RuleEnd;}
+}
+
+
+<QuotedAttributeValue>
+{
+ \" { yybegin(DQ_STRING); string.setLength(0); }
+ \' { yybegin(SQ_STRING); string.setLength(0); }
+ // in this state, anything other than a space character can start an undelimited string
+ {S}*. { yypushback(1); yybegin(UnDelimitedString); string.setLength(0);}
+
+}
+
+
+<DQ_STRING>
+{
+
+ \" { popState(); valueText = string.toString(); return EncodingParserConstants.StringValue; }
+ {LineTerminator} { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ "\?>" { yypushback(2); popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ "<" { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+
+ ">" { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ "\/>" { yypushback(2); popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ ";" { yypushback(1); popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue; }
+
+ . { string.append( yytext() ); }
+
+
+}
+
+<SQ_STRING>
+{
+
+ \' { popState(); valueText = string.toString(); return EncodingParserConstants.StringValue;}
+ {LineTerminator} { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ "%>" { yypushback(2);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ "<" { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ ">" { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ "\/>" { yypushback(2); popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ ";" { yypushback(1); popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue; }
+ . { string.append( yytext() ); }
+
+
+}
+
+<UnDelimitedString>
+{
+
+
+ {S} { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.UnDelimitedStringValue; }
+ {LineTerminator} { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ "\?>" { yypushback(2);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ "<" { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ // these are a bit special, since we started an undelimit string, but found a quote ... probably indicates a missing beginning quote
+ \' { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTermintatedUnDelimitedStringValue;}
+ \" { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTermintatedUnDelimitedStringValue;}
+
+ ">" { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ "\/>" { yypushback(2); popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ ";" { yypushback(1); popState(); valueText = string.toString(); return EncodingParserConstants.UnDelimitedStringValue; }
+ . { string.append( yytext() ); }
+
+}
+
+// The "match anything" rule should always be in effect except for when looking for end of string
+// (That is, remember to update state list if/when new states added)
+<YYINITIAL, ST_XMLDecl, QuotedAttributeValue, CHARSET_RULE>
+{
+// this is the fallback (match "anything") rule (for this scanner, input is ignored, and position advanced, if not recognized)
+.|\n {if (yychar > MAX_TO_SCAN) {hasMore=false; return EncodingParserConstants.MAX_CHARS_REACHED;}}
+}
+
+// this rule always in effect
+<<EOF>> {hasMore = false; return EncodingParserConstants.EOF;}
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/CSSHeadTokenizer/CSSHeadTokenizer.java b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/CSSHeadTokenizer/CSSHeadTokenizer.java
new file mode 100644
index 0000000..4dfc385
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/CSSHeadTokenizer/CSSHeadTokenizer.java
@@ -0,0 +1,977 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 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
+ * Jens Lukowski/Innoopract - initial renaming/restructuring
+ *
+ *******************************************************************************/
+/* The following code was generated by JFlex 1.2.2 on 1/27/04 6:42 PM */
+
+/*nlsXXX*/
+package org.eclipse.wst.common.encoding.contentspecific.css;
+import java.io.IOException;
+import java.io.Reader;
+
+import org.eclipse.wst.common.encoding.contentspecific.EncodingParserConstants;
+import org.eclipse.wst.common.encoding.contentspecific.HeadParserToken;
+import org.eclipse.wst.common.encoding.contentspecific.IntStack;
+import org.eclipse.wst.common.encoding.contentspecific.xml.XMLHeadTokenizerConstants;
+
+
+
+
+/**
+ * This class is a scanner generated by
+ * <a href="http://www.informatik.tu-muenchen.de/~kleing/jflex/">JFlex</a> 1.2.2
+ * on 1/27/04 6:42 PM from the specification file
+ * <tt>file:/D:/DevTimeSupport/HeadParsers/CSSHeadTokenizer/CSSHeadTokenizer.jflex</tt>
+ */
+public class CSSHeadTokenizer {
+
+ /** this character denotes the end of file */
+ final public static int YYEOF = -1;
+
+ /** lexical states */
+ final public static int YYINITIAL = 0;
+ final public static int UnDelimitedString = 12;
+ final public static int DQ_STRING = 8;
+ final public static int SQ_STRING = 10;
+ final public static int ST_XMLDecl = 2;
+ final public static int QuotedAttributeValue = 6;
+ final public static int CHARSET_RULE = 4;
+
+ /**
+ * YY_LEXSTATE[l] is the state in the DFA for the lexical state l
+ * YY_LEXSTATE[l+1] is the state in the DFA for the lexical state l
+ * at the beginning of a line
+ * l is of the form l = 2*k, k a non negative integer
+ */
+ private final static int YY_LEXSTATE[] = {
+ 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7
+ };
+
+ /**
+ * Translates characters to character classes
+ */
+ final private static String yycmap_packed =
+ "\11\0\1\6\1\11\2\0\1\10\22\0\1\6\1\0\1\36\2\0"+
+ "\1\41\1\0\1\37\7\0\1\40\13\0\1\35\1\12\1\7\1\34"+
+ "\1\13\1\17\1\22\1\0\1\20\1\31\1\25\1\0\1\33\1\21"+
+ "\1\32\2\0\1\16\1\15\1\27\1\30\2\0\1\23\1\24\1\26"+
+ "\3\0\1\14\10\0\1\22\1\0\1\20\1\31\1\25\1\0\1\33"+
+ "\1\21\1\32\2\0\1\16\1\15\1\27\1\30\2\0\1\23\1\24"+
+ "\1\26\3\0\1\14\102\0\1\4\3\0\1\5\17\0\1\3\16\0"+
+ "\1\1\20\0\1\3\16\0\1\1\1\2\170\0\1\2\ufe87\0";
+
+ /**
+ * Translates characters to character classes
+ */
+ final private static char [] yycmap = yy_unpack_cmap(yycmap_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",
+ "Internal error: unknown state",
+ "Error: could not match input",
+ "Error: pushback value was too large"
+ };
+
+ /** 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 boolean hasMore = true;
+ private final static int MAX_TO_SCAN = 1000;
+ StringBuffer string = new StringBuffer();
+ // state stack for easier state handling
+ private IntStack fStateStack = new IntStack();
+ private String valueText = null;
+
+
+
+ public CSSHeadTokenizer() {
+ super();
+ }
+
+ public void reset (Reader in) {
+ /* 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;
+
+ /**
+ * the number of characters from the last newline up to the start
+ * of the matched text
+ */
+ yycolumn = 0;
+
+ /**
+ * yy_atBOL == true <=> the scanner is currently at the beginning
+ * of a line
+ */
+ yy_atBOL = false;
+
+ /* 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;
+
+
+ fStateStack.clear();
+
+ hasMore = true;
+
+ // its a little wasteful to "throw away" first char array generated
+ // by class init (via auto generated code), but we really do want
+ // a small buffer for our head parsers.
+ if (yy_buffer.length != MAX_TO_SCAN) {
+ yy_buffer = new char[MAX_TO_SCAN];
+ }
+
+
+ }
+
+
+ public final HeadParserToken getNextToken() throws IOException {
+ String context = null;
+ context = primGetNextToken();
+ HeadParserToken result = null;
+ if (valueText != null) {
+ result = createToken(context, yychar, valueText);
+ valueText = null;
+ } else {
+ result = createToken(context, yychar, yytext());
+ }
+ return result;
+ }
+
+ public final boolean hasMoreTokens() {
+ return hasMore && yychar < MAX_TO_SCAN;
+ }
+ private void pushCurrentState() {
+ fStateStack.push(yystate());
+
+ }
+
+ private void popState() {
+ yybegin(fStateStack.pop());
+ }
+ private HeadParserToken createToken(String context, int start, String text) {
+ return new HeadParserToken(context, start, text);
+ }
+
+
+
+
+ /**
+ * 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 CSSHeadTokenizer(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 CSSHeadTokenizer(java.io.InputStream in) {
+ this(new java.io.InputStreamReader(in));
+ }
+
+ /**
+ * 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 < 158) {
+ 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.
+ *
+ * @param errorCode the code of the errormessage to display
+ */
+ private void yy_ScanError(int errorCode) {
+ try {
+ System.out.println(YY_ERROR_MSG[errorCode]);
+ }
+ catch (ArrayIndexOutOfBoundsException e) {
+ System.out.println(YY_ERROR_MSG[YY_UNKNOWN_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()!
+ */
+ private void yypushback(int number) {
+ if ( number > yylength() )
+ yy_ScanError(YY_PUSHBACK_2BIG);
+
+ yy_markedPos -= number;
+ }
+
+
+ /**
+ * 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;
+ hasMore=false;
+
+ }
+ }
+
+
+ /**
+ * 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;
+
+
+ while (true) {
+
+ yychar+= yylength();
+
+ yy_atBOL = yy_markedPos <= 0 || yy_buffer[yy_markedPos-1] == '\n';
+ if (!yy_atBOL && yy_buffer[yy_markedPos-1] == '\r') {
+ yy_atBOL = yy_advance() != '\n';
+ if (!yy_atEOF) yy_currentPos--;
+ }
+
+ yy_action = -1;
+
+ yy_currentPos = yy_startRead = yy_markedPos;
+
+ if (yy_atBOL)
+ yy_state = YY_LEXSTATE[yy_lexical_state+1];
+ else
+ yy_state = YY_LEXSTATE[yy_lexical_state];
+
+
+ yy_forAction: {
+ while (true) {
+
+ yy_input = yy_advance();
+
+ if ( yy_input == YYEOF ) break yy_forAction;
+
+ yy_input = yycmap[yy_input];
+
+ boolean yy_isFinal = false;
+ boolean yy_noLookAhead = false;
+
+ yy_forNext: { switch (yy_state) {
+ case 0:
+ switch (yy_input) {
+ case 1: yy_isFinal = true; yy_state = 9; break yy_forNext;
+ case 2: yy_isFinal = true; yy_state = 10; break yy_forNext;
+ case 3: yy_isFinal = true; yy_state = 11; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 8; break yy_forNext;
+ }
+
+ case 1:
+ switch (yy_input) {
+ case 1: yy_isFinal = true; yy_state = 9; break yy_forNext;
+ case 2: yy_isFinal = true; yy_state = 10; break yy_forNext;
+ case 3: yy_isFinal = true; yy_state = 11; break yy_forNext;
+ case 6:
+ case 8:
+ case 9: yy_isFinal = true; yy_state = 12; break yy_forNext;
+ case 10: yy_isFinal = true; yy_state = 13; break yy_forNext;
+ case 15: yy_isFinal = true; yy_state = 14; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 8; break yy_forNext;
+ }
+
+ case 2:
+ switch (yy_input) {
+ case 11: yy_isFinal = true; yy_state = 15; break yy_forNext;
+ case 21: yy_isFinal = true; yy_state = 16; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 8; break yy_forNext;
+ }
+
+ case 3:
+ switch (yy_input) {
+ case 6:
+ case 8:
+ case 9: yy_isFinal = true; yy_state = 17; break yy_forNext;
+ case 29: yy_isFinal = true; yy_noLookAhead = true; yy_state = 18; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 8; break yy_forNext;
+ }
+
+ case 4:
+ switch (yy_input) {
+ case 6:
+ case 8: yy_isFinal = true; yy_state = 20; break yy_forNext;
+ case 9: yy_isFinal = true; yy_state = 21; break yy_forNext;
+ case 30: yy_isFinal = true; yy_noLookAhead = true; yy_state = 22; break yy_forNext;
+ case 31: yy_isFinal = true; yy_noLookAhead = true; yy_state = 23; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 19; break yy_forNext;
+ }
+
+ case 5:
+ switch (yy_input) {
+ case 8:
+ case 9:
+ case 10:
+ case 28: yy_isFinal = true; yy_noLookAhead = true; yy_state = 25; break yy_forNext;
+ case 11:
+ case 32: yy_isFinal = true; yy_state = 26; break yy_forNext;
+ case 29: yy_isFinal = true; yy_noLookAhead = true; yy_state = 27; break yy_forNext;
+ case 30: yy_isFinal = true; yy_noLookAhead = true; yy_state = 28; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 24; break yy_forNext;
+ }
+
+ case 6:
+ switch (yy_input) {
+ case 8:
+ case 9:
+ case 10:
+ case 28: yy_isFinal = true; yy_noLookAhead = true; yy_state = 25; break yy_forNext;
+ case 32: yy_isFinal = true; yy_state = 26; break yy_forNext;
+ case 29: yy_isFinal = true; yy_noLookAhead = true; yy_state = 27; break yy_forNext;
+ case 31: yy_isFinal = true; yy_noLookAhead = true; yy_state = 28; break yy_forNext;
+ case 33: yy_isFinal = true; yy_state = 29; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 24; break yy_forNext;
+ }
+
+ case 7:
+ switch (yy_input) {
+ case 10:
+ case 28: yy_isFinal = true; yy_noLookAhead = true; yy_state = 25; break yy_forNext;
+ case 32: yy_isFinal = true; yy_state = 26; break yy_forNext;
+ case 11: yy_isFinal = true; yy_state = 29; break yy_forNext;
+ case 6:
+ case 8:
+ case 9: yy_isFinal = true; yy_noLookAhead = true; yy_state = 30; break yy_forNext;
+ case 29: yy_isFinal = true; yy_noLookAhead = true; yy_state = 31; break yy_forNext;
+ case 30:
+ case 31: yy_isFinal = true; yy_noLookAhead = true; yy_state = 32; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 24; break yy_forNext;
+ }
+
+ case 9:
+ switch (yy_input) {
+ case 2: yy_isFinal = true; yy_noLookAhead = true; yy_state = 33; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 10:
+ switch (yy_input) {
+ case 1: yy_isFinal = true; yy_noLookAhead = true; yy_state = 34; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 11:
+ switch (yy_input) {
+ case 4: yy_state = 35; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 12:
+ switch (yy_input) {
+ case 6:
+ case 8:
+ case 9: yy_state = 36; break yy_forNext;
+ case 10: yy_state = 37; break yy_forNext;
+ case 15: yy_state = 38; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 13:
+ switch (yy_input) {
+ case 11: yy_state = 39; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 14:
+ switch (yy_input) {
+ case 16: yy_state = 40; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 15:
+ switch (yy_input) {
+ case 28: yy_isFinal = true; yy_noLookAhead = true; yy_state = 41; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 16:
+ switch (yy_input) {
+ case 23: yy_state = 42; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 17:
+ switch (yy_input) {
+ case 6:
+ case 8:
+ case 9: yy_isFinal = true; yy_state = 17; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 20:
+ switch (yy_input) {
+ case 6:
+ case 8: yy_isFinal = true; yy_state = 20; break yy_forNext;
+ case 9: yy_state = 43; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 19; break yy_forNext;
+ }
+
+ case 21:
+ switch (yy_input) {
+ case 6:
+ case 8: yy_isFinal = true; yy_state = 20; break yy_forNext;
+ case 9: yy_state = 43; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 19; break yy_forNext;
+ }
+
+ case 26:
+ switch (yy_input) {
+ case 28: yy_isFinal = true; yy_noLookAhead = true; yy_state = 44; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 29:
+ switch (yy_input) {
+ case 28: yy_isFinal = true; yy_noLookAhead = true; yy_state = 45; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 35:
+ switch (yy_input) {
+ case 5: yy_isFinal = true; yy_noLookAhead = true; yy_state = 46; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 36:
+ switch (yy_input) {
+ case 6:
+ case 8:
+ case 9: yy_state = 36; break yy_forNext;
+ case 10: yy_state = 37; break yy_forNext;
+ case 15: yy_state = 38; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 37:
+ switch (yy_input) {
+ case 11: yy_state = 39; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 38:
+ switch (yy_input) {
+ case 16: yy_state = 40; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 39:
+ switch (yy_input) {
+ case 12: yy_state = 47; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 40:
+ switch (yy_input) {
+ case 17: yy_state = 48; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 42:
+ switch (yy_input) {
+ case 16: yy_state = 49; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 43:
+ switch (yy_input) {
+ case 6:
+ case 8: yy_isFinal = true; yy_state = 20; break yy_forNext;
+ case 9: yy_state = 43; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 19; break yy_forNext;
+ }
+
+ case 47:
+ switch (yy_input) {
+ case 13: yy_state = 50; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 48:
+ switch (yy_input) {
+ case 18: yy_state = 51; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 49:
+ switch (yy_input) {
+ case 24: yy_state = 52; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 50:
+ switch (yy_input) {
+ case 14: yy_state = 53; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 51:
+ switch (yy_input) {
+ case 19: yy_state = 54; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 52:
+ switch (yy_input) {
+ case 25: yy_state = 55; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 53:
+ switch (yy_input) {
+ case 6:
+ case 8:
+ case 9: yy_isFinal = true; yy_state = 56; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 54:
+ switch (yy_input) {
+ case 20: yy_state = 57; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 55:
+ switch (yy_input) {
+ case 26: yy_state = 58; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 56:
+ switch (yy_input) {
+ case 6:
+ case 8:
+ case 9: yy_isFinal = true; yy_state = 56; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 57:
+ switch (yy_input) {
+ case 21: yy_state = 59; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 58:
+ switch (yy_input) {
+ case 23: yy_state = 60; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 59:
+ switch (yy_input) {
+ case 22: yy_isFinal = true; yy_noLookAhead = true; yy_state = 61; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 60:
+ switch (yy_input) {
+ case 27: yy_state = 62; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 62:
+ switch (yy_input) {
+ case 6:
+ case 8:
+ case 9: yy_state = 62; break yy_forNext;
+ case 7: yy_isFinal = true; yy_state = 63; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 63:
+ switch (yy_input) {
+ case 6:
+ case 8:
+ case 9: yy_isFinal = true; yy_state = 63; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ default:
+ yy_ScanError(YY_ILLEGAL_STATE);
+ break;
+ } }
+
+ if ( yy_isFinal ) {
+ yy_action = yy_state;
+ yy_markedPos = yy_currentPos;
+ if ( yy_noLookAhead ) break yy_forAction;
+ }
+
+ }
+ }
+
+
+ switch (yy_action) {
+
+ case 45:
+ { yypushback(2);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue; }
+ case 65: break;
+ case 25:
+ { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue; }
+ case 66: break;
+ case 19:
+ case 20:
+ { yypushback(1); yybegin(UnDelimitedString); string.setLength(0); }
+ case 67: break;
+ case 18:
+ { yybegin(YYINITIAL); hasMore = false; return CSSHeadTokenizerConstants.RuleEnd; }
+ case 68: break;
+ case 32:
+ { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTermintatedUnDelimitedStringValue; }
+ case 69: break;
+ case 44:
+ { yypushback(2); popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue; }
+ case 70: break;
+ case 61:
+ { if (yychar == 0 ) {yybegin(CHARSET_RULE); return CSSHeadTokenizerConstants.CHARSET_RULE;} }
+ case 71: break;
+ case 56:
+ { if (yychar == 0 ) {yybegin(ST_XMLDecl); return XMLHeadTokenizerConstants.XMLDeclStart;} }
+ case 72: break;
+ case 8:
+ case 9:
+ case 10:
+ case 11:
+ case 12:
+ case 13:
+ case 14:
+ case 15:
+ case 16:
+ case 21:
+ { if (yychar > MAX_TO_SCAN) {hasMore=false; return EncodingParserConstants.MAX_CHARS_REACHED;} }
+ case 73: break;
+ case 41:
+ { yybegin(YYINITIAL); return XMLHeadTokenizerConstants.XMLDeclEnd; }
+ case 74: break;
+ case 63:
+ { pushCurrentState(); yybegin(QuotedAttributeValue); return XMLHeadTokenizerConstants.XMLDelEncoding; }
+ case 75: break;
+ case 3:
+ case 17:
+ { pushCurrentState(); yybegin(QuotedAttributeValue); }
+ case 76: break;
+ case 46:
+ { hasMore = false; return EncodingParserConstants.UTF83ByteBOM; }
+ case 77: break;
+ case 33:
+ { hasMore = false; return EncodingParserConstants.UTF16BE; }
+ case 78: break;
+ case 34:
+ { hasMore = false; return EncodingParserConstants.UTF16LE; }
+ case 79: break;
+ case 24:
+ case 26:
+ case 29:
+ { string.append( yytext() ); }
+ case 80: break;
+ case 23:
+ { yybegin(SQ_STRING); string.setLength(0); }
+ case 81: break;
+ case 22:
+ { yybegin(DQ_STRING); string.setLength(0); }
+ case 82: break;
+ case 27:
+ { yypushback(1); popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue; }
+ case 83: break;
+ case 28:
+ { popState(); valueText = string.toString(); return EncodingParserConstants.StringValue; }
+ case 84: break;
+ case 30:
+ { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.UnDelimitedStringValue; }
+ case 85: break;
+ case 31:
+ { yypushback(1); popState(); valueText = string.toString(); return EncodingParserConstants.UnDelimitedStringValue; }
+ case 86: break;
+ default:
+ if (yy_input == YYEOF && yy_startRead == yy_currentPos) {
+ yy_atEOF = true;
+ yy_do_eof();
+ { hasMore = false; return EncodingParserConstants.EOF; }
+ }
+ else {
+ yy_ScanError(YY_NO_MATCH);
+ }
+ }
+ }
+ }
+
+ /**
+ * Runs the scanner on input files.
+ *
+ * This main method is the debugging routine for the scanner.
+ * It prints each returned token to System.out until the end of
+ * file is reached, or an error occured.
+ *
+ * @param argv the command line, contains the filenames to run
+ * the scanner on.
+ */
+ public static void main(String argv[]) {
+ for (int i = 0; i < argv.length; i++) {
+ CSSHeadTokenizer scanner = null;
+ try {
+ scanner = new CSSHeadTokenizer( new java.io.FileReader(argv[i]) );
+ }
+ catch (java.io.FileNotFoundException e) {
+ System.out.println("File not found : \""+argv[i]+"\"");
+ System.exit(1);
+ }
+ catch (java.io.IOException e) {
+ System.out.println("Error opening file \""+argv[i]+"\"");
+ System.exit(1);
+ }
+ catch (ArrayIndexOutOfBoundsException e) {
+ System.out.println("Usage : java CSSHeadTokenizer <inputfile>");
+ System.exit(1);
+ }
+
+ try {
+ do {
+ System.out.println(scanner.primGetNextToken());
+ } while (!scanner.yy_atEOF);
+
+ }
+ catch (java.io.IOException e) {
+ System.out.println("An I/O error occured while scanning :");
+ System.out.println(e);
+ System.exit(1);
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ System.exit(1);
+ }
+ }
+ }
+
+
+}
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/CSSHeadTokenizer/CSSHeadTokenizerGenJava.cmd b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/CSSHeadTokenizer/CSSHeadTokenizerGenJava.cmd
new file mode 100644
index 0000000..9ef06e9
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/CSSHeadTokenizer/CSSHeadTokenizerGenJava.cmd
@@ -0,0 +1,23 @@
+@echo off
+
+rem The following variables need to be set/specified for each "development machine"
+set PATH=%PATH%;d:jdks\j2sdk1.4.1_02\bin
+set WORKSPACE_LOCATION=D:\builds\Workspaces\PureHeadWorkspace
+set JFLEX_LIB_LOCATION=D:\DevTimeSupport\JFlex\lib
+
+rem The following variables differ from project to project, but should be otherwise constant
+set MAIN_NAME=CSSHeadTokenizer
+set PROJECT_SRC=\org.eclipse.wst.common.encoding.contentspecific\src\
+set PACKAGE_DIR=com\ibm\encoding\resource\contentspecific\css\
+
+rem Given the above "framework" and the command themselves, these variables should never need to be modified
+set JAVA_FILE=%MAIN_NAME%.java
+set JFLEX_RULES=%MAIN_NAME%.jflex
+set SKELETON_FILE=%MAIN_NAME%.skeleton
+
+IF EXIST %JAVA_FILE% del %JAVA_FILE%
+rem java -Xmx470000000 -cp %JFLEX_LIB_LOCATION%\sed-jflex.jar;. JFlex.Main %JFLEX_RULES% -skel %SKELETON_FILE% 1>jflexout.txt 2>jflexerr.txt
+java -Xmx470000000 -cp %JFLEX_LIB_LOCATION%\sed-jflex.jar;. JFlex.Main %JFLEX_RULES% 1>jflexout.txt 2>jflexerr.txt
+IF EXIST %JAVA_FILE% copy %JAVA_FILE% %WORKSPACE_LOCATION%%PROJECT_SRC%%PACKAGE_DIR%%JAVA_FILE%
+
+rem pause
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/CSSHeadTokenizer/jflexerr.txt b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/CSSHeadTokenizer/jflexerr.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/CSSHeadTokenizer/jflexerr.txt
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/CSSHeadTokenizer/jflexout.txt b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/CSSHeadTokenizer/jflexout.txt
new file mode 100644
index 0000000..e0743ca
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/CSSHeadTokenizer/jflexout.txt
@@ -0,0 +1,6 @@
+Reading "CSSHeadTokenizer.jflex"
+Constructing NFA : 458 states in NFA
+Converting NFA to DFA :
+........................................................................................
+102 states before minimization, 64 states in minimized DFA
+Writing code to "CSSHeadTokenizer.java"
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/HTMLHeadTokenizer/HTMLHeadTokenizer.jFlex b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/HTMLHeadTokenizer/HTMLHeadTokenizer.jFlex
new file mode 100644
index 0000000..eb10921
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/HTMLHeadTokenizer/HTMLHeadTokenizer.jFlex
@@ -0,0 +1,285 @@
+/*******************************************************************************
+ * Copyright (c) 2004 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
+ *******************************************************************************/
+/*nlsXXX*/
+package org.eclipse.wst.common.encoding.contentspecific.html;
+import java.io.IOException;
+import java.io.Reader;
+
+import org.eclipse.wst.common.encoding.contentspecific.EncodingParserConstants;
+import org.eclipse.wst.common.encoding.contentspecific.HeadParserToken;
+import org.eclipse.wst.common.encoding.contentspecific.IntStack;
+import org.eclipse.wst.common.encoding.contentspecific.xml.XMLHeadTokenizerConstants;
+
+
+
+%%
+
+%{
+
+
+ private boolean hasMore = true;
+ private final static int MAX_TO_SCAN = 1000;
+ StringBuffer string = new StringBuffer();
+ // state stack for easier state handling
+ private IntStack fStateStack = new IntStack();
+ private String valueText = null;
+ boolean foundContentTypeValue = false;
+
+
+
+ public HTMLHeadTokenizer() {
+ super();
+ }
+
+ public void reset (Reader in) {
+ /* 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;
+
+ /**
+ * the number of characters from the last newline up to the start
+ * of the matched text
+ */
+ yycolumn = 0;
+
+ /**
+ * yy_atBOL == true <=> the scanner is currently at the beginning
+ * of a line
+ */
+ yy_atBOL = false;
+
+ /* 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;
+
+
+ fStateStack.clear();
+
+ hasMore = true;
+
+ // its a little wasteful to "throw away" first char array generated
+ // by class init (via auto generated code), but we really do want
+ // a small buffer for our head parsers.
+ if (yy_buffer.length != MAX_TO_SCAN) {
+ yy_buffer = new char[MAX_TO_SCAN];
+ }
+
+
+ }
+
+
+ public final HeadParserToken getNextToken() throws IOException {
+ String context = null;
+ context = primGetNextToken();
+ HeadParserToken result = null;
+ if (valueText != null) {
+ result = createToken(context, yychar, valueText);
+ valueText = null;
+ } else {
+ result = createToken(context, yychar, yytext());
+ }
+ return result;
+ }
+
+ public final boolean hasMoreTokens() {
+ return hasMore && yychar < MAX_TO_SCAN;
+ }
+ private void pushCurrentState() {
+ fStateStack.push(yystate());
+
+ }
+
+ private void popState() {
+ yybegin(fStateStack.pop());
+ }
+ private HeadParserToken createToken(String context, int start, String text) {
+ return new HeadParserToken(context, start, text);
+ }
+
+
+%}
+
+%eof{
+ hasMore=false;
+%eof}
+
+%public
+%class HTMLHeadTokenizer
+%function primGetNextToken
+%type String
+%char
+%unicode
+%ignorecase
+%debug
+%switch
+
+
+UTF16BE = \xFE\xFF
+UTF16LE = \xFF\xFE
+UTF83ByteBOM = \xEF\xBB\xBF
+
+SpaceChar = [\x20\x09]
+
+
+
+// [3] S ::= (0x20 | 0x9 | 0xD | 0xA)+
+S = [\x20\x09\x0D\x0A]
+
+BeginAttribeValue = {S}* \= {S}*
+
+LineTerminator = \r|\n
+
+
+%state ST_XMLDecl
+%state ST_META_TAG
+%state QuotedAttributeValue
+%state DQ_STRING
+%state SQ_STRING
+%state UnDelimitedString
+
+%%
+
+
+<YYINITIAL>
+{
+ {UTF16BE} {hasMore = false; return EncodingParserConstants.UTF16BE;}
+ {UTF16LE} {hasMore = false; return EncodingParserConstants.UTF16LE;}
+ {UTF83ByteBOM} {hasMore = false; return EncodingParserConstants.UTF83ByteBOM;}
+
+ // force to be started on first line, but we do allow preceeding spaces
+ ^ {S}* "<\?xml" {S}+ {if (yychar == 0 ) {yybegin(ST_XMLDecl); return XMLHeadTokenizerConstants.XMLDeclStart;}}
+
+ "<META " {yybegin(ST_META_TAG); return HTMLHeadTokenizerConstants.MetaTagStart;}
+
+
+}
+
+<ST_XMLDecl>
+{
+ //"version" {BeginAttribeValue} {pushCurrentState(); yybegin(QuotedAttributeValue); return XMLHeadTokenizerConstants.XMLDeclVersion;}
+ "encoding" {BeginAttribeValue} {pushCurrentState(); yybegin(QuotedAttributeValue); return XMLHeadTokenizerConstants.XMLDelEncoding;}
+ // note this "forced end" once end of XML Declaration found
+ "\?>" {yybegin(YYINITIAL); return XMLHeadTokenizerConstants.XMLDeclEnd;}
+}
+
+<ST_META_TAG>
+{
+
+ "http-equiv" {S}* \= {S}* \"? "Content-Type" \"? {S}+ "content" {BeginAttribeValue} {pushCurrentState(); yybegin(QuotedAttributeValue); foundContentTypeValue=true; return HTMLHeadTokenizerConstants.MetaTagContentType;}
+ ">" { yybegin(YYINITIAL); if (foundContentTypeValue) hasMore = false; return HTMLHeadTokenizerConstants.MetaTagEnd;}
+ "\/>" { yybegin(YYINITIAL); if (foundContentTypeValue) hasMore = false; return HTMLHeadTokenizerConstants.MetaTagEnd;}
+}
+
+
+<QuotedAttributeValue>
+{
+ \" { yybegin(DQ_STRING); string.setLength(0); }
+ \' { yybegin(SQ_STRING); string.setLength(0); }
+ // in this state, anything other than a space character can start an undelimited string
+ {S}*. { yypushback(1); yybegin(UnDelimitedString); string.setLength(0);}
+
+}
+
+
+<DQ_STRING>
+{
+
+ \" { popState(); valueText = string.toString(); return EncodingParserConstants.StringValue; }
+ {LineTerminator} { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ "\?>" { yypushback(2); popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ "<" { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+
+ ">" { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ "\/>" { yypushback(2); popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ . { string.append( yytext() ); }
+
+
+}
+
+<SQ_STRING>
+{
+
+ \' { popState(); valueText = string.toString(); return EncodingParserConstants.StringValue;}
+ {LineTerminator} { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ "%>" { yypushback(2);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ "<" { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ ">" { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ "\/>" { yypushback(2); popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ . { string.append( yytext() ); }
+
+
+}
+
+<UnDelimitedString>
+{
+
+
+ // note this initial special case for HTTP contenttype values
+ ";"{S}* { string.append( yytext() ); }
+ {S} { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.UnDelimitedStringValue; }
+ {LineTerminator} { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ "\?>" { yypushback(2);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ "<" { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ // these are a bit special, since we started an undelimit string, but found a quote ... probably indicates a missing beginning quote
+ \' { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTermintatedUnDelimitedStringValue;}
+ \" { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTermintatedUnDelimitedStringValue;}
+
+ ">" { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ "\/>" { yypushback(2); popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ . { string.append( yytext() ); }
+
+}
+
+// The "match anything" rule should always be in effect except for when looking for end of string
+// (That is, remember to update state list if/when new states added)
+<YYINITIAL, ST_XMLDecl, QuotedAttributeValue, ST_META_TAG>
+{
+// this is the fallback (match "anything") rule (for this scanner, input is ignored, and position advanced, if not recognized)
+.|\n {if (yychar > MAX_TO_SCAN) {hasMore=false; return EncodingParserConstants.MAX_CHARS_REACHED;}}
+}
+
+// this rule always in effect
+<<EOF>> {hasMore = false; return EncodingParserConstants.EOF;}
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/HTMLHeadTokenizer/HTMLHeadTokenizer.java b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/HTMLHeadTokenizer/HTMLHeadTokenizer.java
new file mode 100644
index 0000000..4a78369
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/HTMLHeadTokenizer/HTMLHeadTokenizer.java
@@ -0,0 +1,1206 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 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
+ * Jens Lukowski/Innoopract - initial renaming/restructuring
+ *
+ *******************************************************************************/
+/* The following code was generated by JFlex 1.2.2 on 1/27/04 6:41 PM */
+
+/*nlsXXX*/
+package org.eclipse.wst.common.encoding.contentspecific.html;
+import java.io.IOException;
+import java.io.Reader;
+
+import org.eclipse.wst.common.encoding.contentspecific.EncodingParserConstants;
+import org.eclipse.wst.common.encoding.contentspecific.HeadParserToken;
+import org.eclipse.wst.common.encoding.contentspecific.IntStack;
+import org.eclipse.wst.common.encoding.contentspecific.xml.XMLHeadTokenizerConstants;
+
+
+
+
+/**
+ * This class is a scanner generated by
+ * <a href="http://www.informatik.tu-muenchen.de/~kleing/jflex/">JFlex</a> 1.2.2
+ * on 1/27/04 6:41 PM from the specification file
+ * <tt>file:/D:/DevTimeSupport/HeadParsers/HTMLHeadTokenizer/HTMLHeadTokenizer.jflex</tt>
+ */
+public class HTMLHeadTokenizer {
+
+ /** this character denotes the end of file */
+ final public static int YYEOF = -1;
+
+ /** lexical states */
+ final public static int ST_META_TAG = 4;
+ final public static int YYINITIAL = 0;
+ final public static int UnDelimitedString = 12;
+ final public static int DQ_STRING = 8;
+ final public static int SQ_STRING = 10;
+ final public static int ST_XMLDecl = 2;
+ final public static int QuotedAttributeValue = 6;
+
+ /**
+ * YY_LEXSTATE[l] is the state in the DFA for the lexical state l
+ * YY_LEXSTATE[l+1] is the state in the DFA for the lexical state l
+ * at the beginning of a line
+ * l is of the form l = 2*k, k a non negative integer
+ */
+ private final static int YY_LEXSTATE[] = {
+ 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7
+ };
+
+ /**
+ * Translates characters to character classes
+ */
+ final private static String yycmap_packed =
+ "\11\0\1\6\1\7\2\0\1\11\22\0\1\22\1\0\1\40\2\0"+
+ "\1\44\1\0\1\43\5\0\1\34\1\0\1\42\13\0\1\45\1\12"+
+ "\1\10\1\31\1\13\1\0\1\21\1\0\1\24\1\26\1\17\1\0"+
+ "\1\30\1\32\1\27\2\0\1\16\1\15\1\23\1\25\1\33\1\35"+
+ "\2\0\1\20\1\36\1\37\1\0\1\14\1\41\7\0\1\21\1\0"+
+ "\1\24\1\26\1\17\1\0\1\30\1\32\1\27\2\0\1\16\1\15"+
+ "\1\23\1\25\1\33\1\35\2\0\1\20\1\36\1\37\1\0\1\14"+
+ "\1\41\101\0\1\4\3\0\1\5\17\0\1\3\16\0\1\1\20\0"+
+ "\1\3\16\0\1\1\1\2\170\0\1\2\ufe87\0";
+
+ /**
+ * Translates characters to character classes
+ */
+ final private static char [] yycmap = yy_unpack_cmap(yycmap_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",
+ "Internal error: unknown state",
+ "Error: could not match input",
+ "Error: pushback value was too large"
+ };
+
+ /** 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 boolean hasMore = true;
+ private final static int MAX_TO_SCAN = 1000;
+ StringBuffer string = new StringBuffer();
+ // state stack for easier state handling
+ private IntStack fStateStack = new IntStack();
+ private String valueText = null;
+ boolean foundContentTypeValue = false;
+
+
+
+ public HTMLHeadTokenizer() {
+ super();
+ }
+
+ public void reset (Reader in) {
+ /* 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;
+
+ /**
+ * the number of characters from the last newline up to the start
+ * of the matched text
+ */
+ yycolumn = 0;
+
+ /**
+ * yy_atBOL == true <=> the scanner is currently at the beginning
+ * of a line
+ */
+ yy_atBOL = false;
+
+ /* 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;
+
+
+ fStateStack.clear();
+
+ hasMore = true;
+
+ // its a little wasteful to "throw away" first char array generated
+ // by class init (via auto generated code), but we really do want
+ // a small buffer for our head parsers.
+ if (yy_buffer.length != MAX_TO_SCAN) {
+ yy_buffer = new char[MAX_TO_SCAN];
+ }
+
+
+ }
+
+
+ public final HeadParserToken getNextToken() throws IOException {
+ String context = null;
+ context = primGetNextToken();
+ HeadParserToken result = null;
+ if (valueText != null) {
+ result = createToken(context, yychar, valueText);
+ valueText = null;
+ } else {
+ result = createToken(context, yychar, yytext());
+ }
+ return result;
+ }
+
+ public final boolean hasMoreTokens() {
+ return hasMore && yychar < MAX_TO_SCAN;
+ }
+ private void pushCurrentState() {
+ fStateStack.push(yystate());
+
+ }
+
+ private void popState() {
+ yybegin(fStateStack.pop());
+ }
+ private HeadParserToken createToken(String context, int start, String text) {
+ return new HeadParserToken(context, start, text);
+ }
+
+
+
+
+ /**
+ * 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 HTMLHeadTokenizer(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 HTMLHeadTokenizer(java.io.InputStream in) {
+ this(new java.io.InputStreamReader(in));
+ }
+
+ /**
+ * 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 < 174) {
+ 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.
+ *
+ * @param errorCode the code of the errormessage to display
+ */
+ private void yy_ScanError(int errorCode) {
+ try {
+ System.out.println(YY_ERROR_MSG[errorCode]);
+ }
+ catch (ArrayIndexOutOfBoundsException e) {
+ System.out.println(YY_ERROR_MSG[YY_UNKNOWN_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()!
+ */
+ private void yypushback(int number) {
+ if ( number > yylength() )
+ yy_ScanError(YY_PUSHBACK_2BIG);
+
+ yy_markedPos -= number;
+ }
+
+
+ /**
+ * 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;
+ hasMore=false;
+
+ }
+ }
+
+
+ /**
+ * 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;
+
+
+ while (true) {
+
+ yychar+= yylength();
+
+ yy_atBOL = yy_markedPos <= 0 || yy_buffer[yy_markedPos-1] == '\n';
+ if (!yy_atBOL && yy_buffer[yy_markedPos-1] == '\r') {
+ yy_atBOL = yy_advance() != '\n';
+ if (!yy_atEOF) yy_currentPos--;
+ }
+
+ yy_action = -1;
+
+ yy_currentPos = yy_startRead = yy_markedPos;
+
+ if (yy_atBOL)
+ yy_state = YY_LEXSTATE[yy_lexical_state+1];
+ else
+ yy_state = YY_LEXSTATE[yy_lexical_state];
+
+
+ yy_forAction: {
+ while (true) {
+
+ yy_input = yy_advance();
+
+ if ( yy_input == YYEOF ) break yy_forAction;
+
+ yy_input = yycmap[yy_input];
+
+ boolean yy_isFinal = false;
+ boolean yy_noLookAhead = false;
+
+ yy_forNext: { switch (yy_state) {
+ case 0:
+ switch (yy_input) {
+ case 1: yy_isFinal = true; yy_state = 9; break yy_forNext;
+ case 2: yy_isFinal = true; yy_state = 10; break yy_forNext;
+ case 3: yy_isFinal = true; yy_state = 11; break yy_forNext;
+ case 10: yy_isFinal = true; yy_state = 12; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 8; break yy_forNext;
+ }
+
+ case 1:
+ switch (yy_input) {
+ case 1: yy_isFinal = true; yy_state = 9; break yy_forNext;
+ case 2: yy_isFinal = true; yy_state = 10; break yy_forNext;
+ case 3: yy_isFinal = true; yy_state = 11; break yy_forNext;
+ case 6:
+ case 7:
+ case 9:
+ case 18: yy_isFinal = true; yy_state = 13; break yy_forNext;
+ case 10: yy_isFinal = true; yy_state = 14; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 8; break yy_forNext;
+ }
+
+ case 2:
+ switch (yy_input) {
+ case 11: yy_isFinal = true; yy_state = 15; break yy_forNext;
+ case 15: yy_isFinal = true; yy_state = 16; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 8; break yy_forNext;
+ }
+
+ case 3:
+ switch (yy_input) {
+ case 25: yy_isFinal = true; yy_noLookAhead = true; yy_state = 17; break yy_forNext;
+ case 26: yy_isFinal = true; yy_state = 18; break yy_forNext;
+ case 34: yy_isFinal = true; yy_state = 19; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 8; break yy_forNext;
+ }
+
+ case 4:
+ switch (yy_input) {
+ case 6:
+ case 9:
+ case 18: yy_isFinal = true; yy_state = 21; break yy_forNext;
+ case 7: yy_isFinal = true; yy_state = 22; break yy_forNext;
+ case 32: yy_isFinal = true; yy_noLookAhead = true; yy_state = 23; break yy_forNext;
+ case 35: yy_isFinal = true; yy_noLookAhead = true; yy_state = 24; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 20; break yy_forNext;
+ }
+
+ case 5:
+ switch (yy_input) {
+ case 7:
+ case 9:
+ case 10:
+ case 25: yy_isFinal = true; yy_noLookAhead = true; yy_state = 26; break yy_forNext;
+ case 11:
+ case 34: yy_isFinal = true; yy_state = 27; break yy_forNext;
+ case 32: yy_isFinal = true; yy_noLookAhead = true; yy_state = 28; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 25; break yy_forNext;
+ }
+
+ case 6:
+ switch (yy_input) {
+ case 7:
+ case 9:
+ case 10:
+ case 25: yy_isFinal = true; yy_noLookAhead = true; yy_state = 26; break yy_forNext;
+ case 34: yy_isFinal = true; yy_state = 27; break yy_forNext;
+ case 35: yy_isFinal = true; yy_noLookAhead = true; yy_state = 28; break yy_forNext;
+ case 36: yy_isFinal = true; yy_state = 29; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 25; break yy_forNext;
+ }
+
+ case 7:
+ switch (yy_input) {
+ case 10:
+ case 25: yy_isFinal = true; yy_noLookAhead = true; yy_state = 26; break yy_forNext;
+ case 34: yy_isFinal = true; yy_state = 27; break yy_forNext;
+ case 11: yy_isFinal = true; yy_state = 29; break yy_forNext;
+ case 6:
+ case 7:
+ case 9:
+ case 18: yy_isFinal = true; yy_noLookAhead = true; yy_state = 30; break yy_forNext;
+ case 32:
+ case 35: yy_isFinal = true; yy_noLookAhead = true; yy_state = 31; break yy_forNext;
+ case 37: yy_isFinal = true; yy_state = 32; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 25; break yy_forNext;
+ }
+
+ case 9:
+ switch (yy_input) {
+ case 2: yy_isFinal = true; yy_noLookAhead = true; yy_state = 33; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 10:
+ switch (yy_input) {
+ case 1: yy_isFinal = true; yy_noLookAhead = true; yy_state = 34; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 11:
+ switch (yy_input) {
+ case 4: yy_state = 35; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 12:
+ switch (yy_input) {
+ case 13: yy_state = 36; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 13:
+ switch (yy_input) {
+ case 6:
+ case 7:
+ case 9:
+ case 18: yy_state = 37; break yy_forNext;
+ case 10: yy_state = 38; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 14:
+ switch (yy_input) {
+ case 13: yy_state = 36; break yy_forNext;
+ case 11: yy_state = 39; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 15:
+ switch (yy_input) {
+ case 25: yy_isFinal = true; yy_noLookAhead = true; yy_state = 40; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 16:
+ switch (yy_input) {
+ case 19: yy_state = 41; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 18:
+ switch (yy_input) {
+ case 16: yy_state = 42; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 19:
+ switch (yy_input) {
+ case 25: yy_isFinal = true; yy_noLookAhead = true; yy_state = 43; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 21:
+ switch (yy_input) {
+ case 6:
+ case 9:
+ case 18: yy_isFinal = true; yy_state = 21; break yy_forNext;
+ case 7: yy_state = 44; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 20; break yy_forNext;
+ }
+
+ case 22:
+ switch (yy_input) {
+ case 6:
+ case 9:
+ case 18: yy_isFinal = true; yy_state = 21; break yy_forNext;
+ case 7: yy_state = 44; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 20; break yy_forNext;
+ }
+
+ case 27:
+ switch (yy_input) {
+ case 25: yy_isFinal = true; yy_noLookAhead = true; yy_state = 45; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 29:
+ switch (yy_input) {
+ case 25: yy_isFinal = true; yy_noLookAhead = true; yy_state = 46; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 32:
+ switch (yy_input) {
+ case 6:
+ case 7:
+ case 9:
+ case 18: yy_isFinal = true; yy_state = 32; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 35:
+ switch (yy_input) {
+ case 5: yy_isFinal = true; yy_noLookAhead = true; yy_state = 47; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 36:
+ switch (yy_input) {
+ case 15: yy_state = 48; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 37:
+ switch (yy_input) {
+ case 6:
+ case 7:
+ case 9:
+ case 18: yy_state = 37; break yy_forNext;
+ case 10: yy_state = 38; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 38:
+ switch (yy_input) {
+ case 11: yy_state = 39; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 39:
+ switch (yy_input) {
+ case 12: yy_state = 49; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 41:
+ switch (yy_input) {
+ case 20: yy_state = 50; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 42:
+ switch (yy_input) {
+ case 16: yy_state = 51; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 44:
+ switch (yy_input) {
+ case 6:
+ case 9:
+ case 18: yy_isFinal = true; yy_state = 21; break yy_forNext;
+ case 7: yy_state = 44; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 20; break yy_forNext;
+ }
+
+ case 48:
+ switch (yy_input) {
+ case 16: yy_state = 52; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 49:
+ switch (yy_input) {
+ case 13: yy_state = 53; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 50:
+ switch (yy_input) {
+ case 21: yy_state = 54; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 51:
+ switch (yy_input) {
+ case 27: yy_state = 55; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 52:
+ switch (yy_input) {
+ case 17: yy_state = 56; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 53:
+ switch (yy_input) {
+ case 14: yy_state = 57; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 54:
+ switch (yy_input) {
+ case 22: yy_state = 58; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 55:
+ switch (yy_input) {
+ case 28: yy_state = 59; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 56:
+ switch (yy_input) {
+ case 18: yy_isFinal = true; yy_noLookAhead = true; yy_state = 60; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 57:
+ switch (yy_input) {
+ case 6:
+ case 7:
+ case 9:
+ case 18: yy_isFinal = true; yy_state = 61; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 58:
+ switch (yy_input) {
+ case 23: yy_state = 62; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 59:
+ switch (yy_input) {
+ case 15: yy_state = 63; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 61:
+ switch (yy_input) {
+ case 6:
+ case 7:
+ case 9:
+ case 18: yy_isFinal = true; yy_state = 61; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 62:
+ switch (yy_input) {
+ case 19: yy_state = 64; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 63:
+ switch (yy_input) {
+ case 29: yy_state = 65; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 64:
+ switch (yy_input) {
+ case 24: yy_state = 66; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 65:
+ switch (yy_input) {
+ case 30: yy_state = 67; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 66:
+ switch (yy_input) {
+ case 6:
+ case 7:
+ case 9:
+ case 18: yy_state = 66; break yy_forNext;
+ case 8: yy_isFinal = true; yy_state = 68; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 67:
+ switch (yy_input) {
+ case 23: yy_state = 69; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 68:
+ switch (yy_input) {
+ case 6:
+ case 7:
+ case 9:
+ case 18: yy_isFinal = true; yy_state = 68; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 69:
+ switch (yy_input) {
+ case 31: yy_state = 70; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 70:
+ switch (yy_input) {
+ case 6:
+ case 7:
+ case 9:
+ case 18: yy_state = 70; break yy_forNext;
+ case 8: yy_state = 71; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 71:
+ switch (yy_input) {
+ case 6:
+ case 7:
+ case 9:
+ case 18: yy_state = 71; break yy_forNext;
+ case 20: yy_state = 72; break yy_forNext;
+ case 32: yy_state = 73; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 72:
+ switch (yy_input) {
+ case 21: yy_state = 74; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 73:
+ switch (yy_input) {
+ case 20: yy_state = 72; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 74:
+ switch (yy_input) {
+ case 19: yy_state = 75; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 75:
+ switch (yy_input) {
+ case 16: yy_state = 76; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 76:
+ switch (yy_input) {
+ case 15: yy_state = 77; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 77:
+ switch (yy_input) {
+ case 19: yy_state = 78; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 78:
+ switch (yy_input) {
+ case 16: yy_state = 79; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 79:
+ switch (yy_input) {
+ case 28: yy_state = 80; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 80:
+ switch (yy_input) {
+ case 16: yy_state = 81; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 81:
+ switch (yy_input) {
+ case 33: yy_state = 82; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 82:
+ switch (yy_input) {
+ case 27: yy_state = 83; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 83:
+ switch (yy_input) {
+ case 15: yy_state = 84; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 84:
+ switch (yy_input) {
+ case 6:
+ case 7:
+ case 9:
+ case 18: yy_state = 85; break yy_forNext;
+ case 32: yy_state = 86; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 85:
+ switch (yy_input) {
+ case 6:
+ case 7:
+ case 9:
+ case 18: yy_state = 85; break yy_forNext;
+ case 20: yy_state = 87; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 86:
+ switch (yy_input) {
+ case 6:
+ case 7:
+ case 9:
+ case 18: yy_state = 85; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 87:
+ switch (yy_input) {
+ case 21: yy_state = 88; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 88:
+ switch (yy_input) {
+ case 19: yy_state = 89; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 89:
+ switch (yy_input) {
+ case 16: yy_state = 90; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 90:
+ switch (yy_input) {
+ case 15: yy_state = 91; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 91:
+ switch (yy_input) {
+ case 19: yy_state = 92; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 92:
+ switch (yy_input) {
+ case 16: yy_state = 93; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 93:
+ switch (yy_input) {
+ case 6:
+ case 7:
+ case 9:
+ case 18: yy_state = 93; break yy_forNext;
+ case 8: yy_isFinal = true; yy_state = 94; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 94:
+ switch (yy_input) {
+ case 6:
+ case 7:
+ case 9:
+ case 18: yy_isFinal = true; yy_state = 94; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ default:
+ yy_ScanError(YY_ILLEGAL_STATE);
+ break;
+ } }
+
+ if ( yy_isFinal ) {
+ yy_action = yy_state;
+ yy_markedPos = yy_currentPos;
+ if ( yy_noLookAhead ) break yy_forAction;
+ }
+
+ }
+ }
+
+
+ switch (yy_action) {
+
+ case 26:
+ { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue; }
+ case 96: break;
+ case 20:
+ case 21:
+ { yypushback(1); yybegin(UnDelimitedString); string.setLength(0); }
+ case 97: break;
+ case 17:
+ { yybegin(YYINITIAL); if (foundContentTypeValue) hasMore = false; return HTMLHeadTokenizerConstants.MetaTagEnd; }
+ case 98: break;
+ case 31:
+ { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTermintatedUnDelimitedStringValue; }
+ case 99: break;
+ case 43:
+ { yybegin(YYINITIAL); if (foundContentTypeValue) hasMore = false; return HTMLHeadTokenizerConstants.MetaTagEnd; }
+ case 100: break;
+ case 45:
+ { yypushback(2); popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue; }
+ case 101: break;
+ case 46:
+ { yypushback(2);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue; }
+ case 102: break;
+ case 61:
+ { if (yychar == 0 ) {yybegin(ST_XMLDecl); return XMLHeadTokenizerConstants.XMLDeclStart;} }
+ case 103: break;
+ case 8:
+ case 9:
+ case 10:
+ case 11:
+ case 12:
+ case 13:
+ case 14:
+ case 15:
+ case 16:
+ case 18:
+ case 19:
+ case 22:
+ { if (yychar > MAX_TO_SCAN) {hasMore=false; return EncodingParserConstants.MAX_CHARS_REACHED;} }
+ case 104: break;
+ case 60:
+ { yybegin(ST_META_TAG); return HTMLHeadTokenizerConstants.MetaTagStart; }
+ case 105: break;
+ case 40:
+ { yybegin(YYINITIAL); return XMLHeadTokenizerConstants.XMLDeclEnd; }
+ case 106: break;
+ case 94:
+ { pushCurrentState(); yybegin(QuotedAttributeValue); foundContentTypeValue=true; return HTMLHeadTokenizerConstants.MetaTagContentType; }
+ case 107: break;
+ case 68:
+ { pushCurrentState(); yybegin(QuotedAttributeValue); return XMLHeadTokenizerConstants.XMLDelEncoding; }
+ case 108: break;
+ case 33:
+ { hasMore = false; return EncodingParserConstants.UTF16BE; }
+ case 109: break;
+ case 34:
+ { hasMore = false; return EncodingParserConstants.UTF16LE; }
+ case 110: break;
+ case 47:
+ { hasMore = false; return EncodingParserConstants.UTF83ByteBOM; }
+ case 111: break;
+ case 28:
+ { popState(); valueText = string.toString(); return EncodingParserConstants.StringValue; }
+ case 112: break;
+ case 25:
+ case 27:
+ case 29:
+ case 32:
+ { string.append( yytext() ); }
+ case 113: break;
+ case 24:
+ { yybegin(SQ_STRING); string.setLength(0); }
+ case 114: break;
+ case 23:
+ { yybegin(DQ_STRING); string.setLength(0); }
+ case 115: break;
+ case 30:
+ { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.UnDelimitedStringValue; }
+ case 116: break;
+ default:
+ if (yy_input == YYEOF && yy_startRead == yy_currentPos) {
+ yy_atEOF = true;
+ yy_do_eof();
+ { hasMore = false; return EncodingParserConstants.EOF; }
+ }
+ else {
+ yy_ScanError(YY_NO_MATCH);
+ }
+ }
+ }
+ }
+
+ /**
+ * Runs the scanner on input files.
+ *
+ * This main method is the debugging routine for the scanner.
+ * It prints each returned token to System.out until the end of
+ * file is reached, or an error occured.
+ *
+ * @param argv the command line, contains the filenames to run
+ * the scanner on.
+ */
+ public static void main(String argv[]) {
+ for (int i = 0; i < argv.length; i++) {
+ HTMLHeadTokenizer scanner = null;
+ try {
+ scanner = new HTMLHeadTokenizer( new java.io.FileReader(argv[i]) );
+ }
+ catch (java.io.FileNotFoundException e) {
+ System.out.println("File not found : \""+argv[i]+"\"");
+ System.exit(1);
+ }
+ catch (java.io.IOException e) {
+ System.out.println("Error opening file \""+argv[i]+"\"");
+ System.exit(1);
+ }
+ catch (ArrayIndexOutOfBoundsException e) {
+ System.out.println("Usage : java HTMLHeadTokenizer <inputfile>");
+ System.exit(1);
+ }
+
+ try {
+ do {
+ System.out.println(scanner.primGetNextToken());
+ } while (!scanner.yy_atEOF);
+
+ }
+ catch (java.io.IOException e) {
+ System.out.println("An I/O error occured while scanning :");
+ System.out.println(e);
+ System.exit(1);
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ System.exit(1);
+ }
+ }
+ }
+
+
+}
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/HTMLHeadTokenizer/HTMLHeadTokenizerGenJava.cmd b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/HTMLHeadTokenizer/HTMLHeadTokenizerGenJava.cmd
new file mode 100644
index 0000000..96f2325
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/HTMLHeadTokenizer/HTMLHeadTokenizerGenJava.cmd
@@ -0,0 +1,23 @@
+@echo off
+
+rem The following variables need to be set/specified for each "development machine"
+set PATH=%PATH%;d:jdks\j2sdk1.4.1_02\bin
+set WORKSPACE_LOCATION=D:\builds\Workspaces\PureHeadWorkspace
+set JFLEX_LIB_LOCATION=D:\DevTimeSupport\JFlex\lib
+
+rem The following variables differ from project to project, but should be otherwise constant
+set MAIN_NAME=HTMLHeadTokenizer
+set PROJECT_SRC=\org.eclipse.wst.common.encoding.contentspecific\src\
+set PACKAGE_DIR=com\ibm\encoding\resource\contentspecific\html\
+
+rem Given the above "framework" and the command themselves, these variables should never need to be modified
+set JAVA_FILE=%MAIN_NAME%.java
+set JFLEX_RULES=%MAIN_NAME%.jflex
+set SKELETON_FILE=%MAIN_NAME%.skeleton
+
+IF EXIST %JAVA_FILE% del %JAVA_FILE%
+rem java -Xmx470000000 -cp %JFLEX_LIB_LOCATION%\sed-jflex.jar;. JFlex.Main %JFLEX_RULES% -skel %SKELETON_FILE% 1>jflexout.txt 2>jflexerr.txt
+java -Xmx470000000 -cp %JFLEX_LIB_LOCATION%\sed-jflex.jar;. JFlex.Main %JFLEX_RULES% 1>jflexout.txt 2>jflexerr.txt
+IF EXIST %JAVA_FILE% copy %JAVA_FILE% %WORKSPACE_LOCATION%%PROJECT_SRC%%PACKAGE_DIR%%JAVA_FILE%
+
+rem pause
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/HTMLHeadTokenizer/jflexerr.txt b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/HTMLHeadTokenizer/jflexerr.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/HTMLHeadTokenizer/jflexerr.txt
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/HTMLHeadTokenizer/jflexout.txt b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/HTMLHeadTokenizer/jflexout.txt
new file mode 100644
index 0000000..1469e9c
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/HTMLHeadTokenizer/jflexout.txt
@@ -0,0 +1,8 @@
+Reading "HTMLHeadTokenizer.jflex"
+
+Warning : Macro "SpaceChar" has been declared but never used.
+Constructing NFA : 660 states in NFA
+Converting NFA to DFA :
+.........................................................................................................................
+135 states before minimization, 95 states in minimized DFA
+Writing code to "HTMLHeadTokenizer.java"
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/JSPHeadTokenizer/JSPHeadTokenizer.jFlex b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/JSPHeadTokenizer/JSPHeadTokenizer.jFlex
new file mode 100644
index 0000000..cd66ce2
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/JSPHeadTokenizer/JSPHeadTokenizer.jFlex
@@ -0,0 +1,294 @@
+/*******************************************************************************
+ * Copyright (c) 2004 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
+ *******************************************************************************/
+/*nlsXXX*/
+package org.eclipse.wst.sse.core.jsp.contenttype;
+import java.io.IOException;
+import java.io.Reader;
+
+import org.eclipse.wst.common.encoding.EncodingParserConstants;
+import org.eclipse.wst.common.encoding.HeadParserToken;
+import org.eclipse.wst.common.encoding.IntStack;
+import org.eclipse.wst.sse.core.xml.contenttype.XMLHeadTokenizerConstants;
+
+
+
+
+
+%%
+
+%{
+
+
+
+ private boolean hasMore = true;
+ private final static int MAX_TO_SCAN = 1000;
+ StringBuffer string = new StringBuffer();
+ // state stack for easier state handling
+ private IntStack fStateStack = new IntStack();
+ private String valueText = null;
+
+
+ public JSPHeadTokenizer() {
+ super();
+ }
+
+ public void reset (Reader in) {
+ /* 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;
+
+ /**
+ * the number of characters from the last newline up to the start
+ * of the matched text
+ */
+ yycolumn = 0;
+
+ /**
+ * yy_atBOL == true <=> the scanner is currently at the beginning
+ * of a line
+ */
+ yy_atBOL = false;
+
+ /* 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;
+
+
+ fStateStack.clear();
+
+ hasMore = true;
+
+ // its a little wasteful to "throw away" first char array generated
+ // by class init (via auto generated code), but we really do want
+ // a small buffer for our head parsers.
+ if (yy_buffer.length != MAX_TO_SCAN) {
+ yy_buffer = new char[MAX_TO_SCAN];
+ }
+
+
+ }
+
+
+ public final HeadParserToken getNextToken() throws IOException {
+ String context = null;
+ context = primGetNextToken();
+ HeadParserToken result = null;
+ if (valueText != null) {
+ result = createToken(context, yychar, valueText);
+ valueText = null;
+ } else {
+ result = createToken(context, yychar, yytext());
+ }
+ return result;
+ }
+
+ public final boolean hasMoreTokens() {
+ return hasMore && yychar < MAX_TO_SCAN;
+ }
+ private void pushCurrentState() {
+ fStateStack.push(yystate());
+
+ }
+
+ private void popState() {
+ yybegin(fStateStack.pop());
+ }
+ private HeadParserToken createToken(String context, int start, String text) {
+ return new HeadParserToken(context, start, text);
+ }
+
+
+%}
+
+%eof{
+ hasMore=false;
+%eof}
+
+%public
+%class JSPHeadTokenizer
+%function primGetNextToken
+%type String
+%char
+%unicode
+%ignorecase
+%debug
+%switch
+
+
+UTF16BE = \xFE\xFF
+UTF16LE = \xFF\xFE
+UTF83ByteBOM = \xEF\xBB\xBF
+
+SpaceChar = [\x20\x09]
+
+
+// [3] S ::= (0x20 | 0x9 | 0xD | 0xA)+
+S = [\x20\x09\x0D\x0A]
+
+BeginAttribeValue = {S}* \= {S}*
+
+LineTerminator = \r|\n
+
+
+%state ST_XMLDecl
+%state ST_PAGE_DIRECTIVE
+%state QuotedAttributeValue
+%state DQ_STRING
+%state SQ_STRING
+%state UnDelimitedString
+
+%%
+
+
+<YYINITIAL>
+{
+ {UTF16BE} {hasMore = false; return EncodingParserConstants.UTF16BE;}
+ {UTF16LE} {hasMore = false; return EncodingParserConstants.UTF16LE;}
+ {UTF83ByteBOM} {hasMore = false; return EncodingParserConstants.UTF83ByteBOM;}
+
+
+ // force to be started on first line, but we do allow preceeding spaces
+ ^ {S}* "<\?xml" {S}+ {if (yychar == 0 ) {yybegin(ST_XMLDecl); return XMLHeadTokenizerConstants.XMLDeclStart;}}
+
+ "<%" {S}* "@" {S}* "page" {S}+ {yybegin(ST_PAGE_DIRECTIVE); return JSPHeadTokenizerConstants.PageDirectiveStart;}
+ "<jsp:directive.page" {S}+ {yybegin(ST_PAGE_DIRECTIVE); return JSPHeadTokenizerConstants.PageDirectiveStart;}
+
+
+}
+
+<ST_XMLDecl>
+{
+// commented out 'version' since we don't really use, but could add back in here if needed
+// "version" {BeginAttribeValue} {pushCurrentState(); yybegin(QuotedAttributeValue); return XMLHeadTokenizerConstants.XMLDeclVersion;}
+ "encoding" {BeginAttribeValue} {pushCurrentState(); yybegin(QuotedAttributeValue); return XMLHeadTokenizerConstants.XMLDelEncoding;}
+ // note the "forced end" (via 'hasMore=false') once the end of XML Declaration found
+ // This is since non-ascii chars may follow and may cause IOExceptions which would not occur once stream is
+ // read with incorrect encoding (such as if platform encoding is in effect until true encoding detected).
+ "\?>" {yybegin(YYINITIAL); hasMore = false; return XMLHeadTokenizerConstants.XMLDeclEnd;}
+}
+
+<ST_PAGE_DIRECTIVE>
+{
+// removed 'language' since it really can be handled seperately from encoding, but may add it back later for simple re-use.
+ "language" {BeginAttribeValue} {pushCurrentState(); yybegin(QuotedAttributeValue); return JSPHeadTokenizerConstants.PageLanguage;}
+ "contentType" {BeginAttribeValue} {pushCurrentState(); yybegin(QuotedAttributeValue); return JSPHeadTokenizerConstants.PageContentType;}
+ "pageEncoding" {BeginAttribeValue} {pushCurrentState(); yybegin(QuotedAttributeValue); return JSPHeadTokenizerConstants.PageEncoding;}
+ // note the "forced end" (via 'hasMore=false') once the end of XML Declaration found
+ // This is since non-ascii chars may follow and may cause IOExceptions which would not occur once stream is
+ // read in correct encoding.
+
+ // https://w3.opensource.ibm.com/bugzilla/show_bug.cgi?id=4205 demonstrates how we need to keep parsing,
+ // even if come to end of one page directive, so hasMore=false was removed from these rules.
+ "%>" { yybegin(YYINITIAL); return JSPHeadTokenizerConstants.PageDirectiveEnd;}
+ "\/>" { yybegin(YYINITIAL); return JSPHeadTokenizerConstants.PageDirectiveEnd;}
+}
+
+
+<QuotedAttributeValue>
+{
+ \" { yybegin(DQ_STRING); string.setLength(0); }
+ \' { yybegin(SQ_STRING); string.setLength(0); }
+ // in this state, anything other than a space character can start an undelimited string
+ {S}*. { yypushback(1); yybegin(UnDelimitedString); string.setLength(0);}
+
+}
+
+
+<DQ_STRING>
+{
+
+ \" { popState(); valueText = string.toString(); return EncodingParserConstants.StringValue; }
+ {LineTerminator} { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ "\?>" { yypushback(2); popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ '<' { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ . { string.append( yytext() ); }
+
+ "%>" { yypushback(2);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+
+
+}
+
+<SQ_STRING>
+{
+
+ \' { popState(); valueText = string.toString(); return EncodingParserConstants.StringValue;}
+ {LineTerminator} { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ "%>" { yypushback(2);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ '<' { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ . { string.append( yytext() ); }
+ "%>" { yypushback(2);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+
+
+}
+
+<UnDelimitedString>
+{
+
+
+ {S} { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.UnDelimitedStringValue; }
+ {LineTerminator} { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ "\?>" { yypushback(2);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ '<' { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ // these are a bit special, since we started an undelimit string, but found a quote ... probably indicates a missing beginning quote
+ \' { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTermintatedUnDelimitedStringValue;}
+ \" { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTermintatedUnDelimitedStringValue;}
+
+ . { string.append( yytext() ); }
+ "%>" { yypushback(2);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+
+}
+
+// The "match anything" rule should always be in effect except for when looking for end of string
+// (That is, remember to update state list if/when new states added)
+<YYINITIAL, ST_XMLDecl, QuotedAttributeValue, ST_PAGE_DIRECTIVE>
+{
+// this is the fallback (match "anything") rule (for this scanner, input is ignored, and position advanced, if not recognized)
+.|\n {if (yychar > MAX_TO_SCAN) {hasMore=false; return EncodingParserConstants.MAX_CHARS_REACHED;}}
+}
+
+// this rule always in effect
+<<EOF>> {hasMore = false; return EncodingParserConstants.EOF;}
+
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/JSPHeadTokenizer/JSPHeadTokenizer.java b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/JSPHeadTokenizer/JSPHeadTokenizer.java
new file mode 100644
index 0000000..27d3b07
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/JSPHeadTokenizer/JSPHeadTokenizer.java
@@ -0,0 +1,1327 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 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
+ * Jens Lukowski/Innoopract - initial renaming/restructuring
+ *
+ *******************************************************************************/
+/* The following code was generated by JFlex 1.2.2 on 9/7/04 8:12 AM */
+
+/*nlsXXX*/
+package org.eclipse.wst.sse.core.jsp.contenttype;
+import java.io.IOException;
+import java.io.Reader;
+
+import org.eclipse.wst.common.encoding.EncodingParserConstants;
+import org.eclipse.wst.common.encoding.HeadParserToken;
+import org.eclipse.wst.common.encoding.IntStack;
+import org.eclipse.wst.sse.core.xml.contenttype.XMLHeadTokenizerConstants;
+
+
+
+
+
+
+/**
+ * This class is a scanner generated by
+ * <a href="http://www.informatik.tu-muenchen.de/~kleing/jflex/">JFlex</a> 1.2.2
+ * on 9/7/04 8:12 AM from the specification file
+ * <tt>file:/D:/DevTimeSupport/HeadParsers/JSPHeadTokenizer/JSPHeadTokenizer.jflex</tt>
+ */
+public class JSPHeadTokenizer {
+
+ /** this character denotes the end of file */
+ final public static int YYEOF = -1;
+
+ /** lexical states */
+ final public static int YYINITIAL = 0;
+ final public static int UnDelimitedString = 12;
+ final public static int DQ_STRING = 8;
+ final public static int SQ_STRING = 10;
+ final public static int ST_XMLDecl = 2;
+ final public static int ST_PAGE_DIRECTIVE = 4;
+ final public static int QuotedAttributeValue = 6;
+
+ /**
+ * YY_LEXSTATE[l] is the state in the DFA for the lexical state l
+ * YY_LEXSTATE[l+1] is the state in the DFA for the lexical state l
+ * at the beginning of a line
+ * l is of the form l = 2*k, k a non negative integer
+ */
+ private final static int YY_LEXSTATE[] = {
+ 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7
+ };
+
+ /**
+ * Translates characters to character classes
+ */
+ final private static String yycmap_packed =
+ "\11\0\1\6\1\7\2\0\1\11\22\0\1\6\1\0\1\45\2\0"+
+ "\1\17\1\0\1\46\6\0\1\36\1\44\12\0\1\27\1\0\1\12"+
+ "\1\10\1\41\1\13\1\20\1\22\1\0\1\33\1\30\1\24\1\0"+
+ "\1\23\1\0\1\31\1\25\1\0\1\16\1\15\1\37\1\40\1\21"+
+ "\1\0\1\32\1\26\1\34\1\42\1\35\1\0\1\14\1\43\7\0"+
+ "\1\22\1\0\1\33\1\30\1\24\1\0\1\23\1\0\1\31\1\25"+
+ "\1\0\1\16\1\15\1\37\1\40\1\21\1\0\1\32\1\26\1\34"+
+ "\1\42\1\35\1\0\1\14\1\43\101\0\1\4\3\0\1\5\17\0"+
+ "\1\3\16\0\1\1\20\0\1\3\16\0\1\1\1\2\170\0\1\2"+
+ "\ufe87\0";
+
+ /**
+ * Translates characters to character classes
+ */
+ final private static char [] yycmap = yy_unpack_cmap(yycmap_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",
+ "Internal error: unknown state",
+ "Error: could not match input",
+ "Error: pushback value was too large"
+ };
+
+ /** 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 boolean hasMore = true;
+ private final static int MAX_TO_SCAN = 1000;
+ StringBuffer string = new StringBuffer();
+ // state stack for easier state handling
+ private IntStack fStateStack = new IntStack();
+ private String valueText = null;
+
+
+ public JSPHeadTokenizer() {
+ super();
+ }
+
+ public void reset (Reader in) {
+ /* 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;
+
+ /**
+ * the number of characters from the last newline up to the start
+ * of the matched text
+ */
+ yycolumn = 0;
+
+ /**
+ * yy_atBOL == true <=> the scanner is currently at the beginning
+ * of a line
+ */
+ yy_atBOL = false;
+
+ /* 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;
+
+
+ fStateStack.clear();
+
+ hasMore = true;
+
+ // its a little wasteful to "throw away" first char array generated
+ // by class init (via auto generated code), but we really do want
+ // a small buffer for our head parsers.
+ if (yy_buffer.length != MAX_TO_SCAN) {
+ yy_buffer = new char[MAX_TO_SCAN];
+ }
+
+
+ }
+
+
+ public final HeadParserToken getNextToken() throws IOException {
+ String context = null;
+ context = primGetNextToken();
+ HeadParserToken result = null;
+ if (valueText != null) {
+ result = createToken(context, yychar, valueText);
+ valueText = null;
+ } else {
+ result = createToken(context, yychar, yytext());
+ }
+ return result;
+ }
+
+ public final boolean hasMoreTokens() {
+ return hasMore && yychar < MAX_TO_SCAN;
+ }
+ private void pushCurrentState() {
+ fStateStack.push(yystate());
+
+ }
+
+ private void popState() {
+ yybegin(fStateStack.pop());
+ }
+ private HeadParserToken createToken(String context, int start, String text) {
+ return new HeadParserToken(context, start, text);
+ }
+
+
+
+
+ /**
+ * 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 JSPHeadTokenizer(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 JSPHeadTokenizer(java.io.InputStream in) {
+ this(new java.io.InputStreamReader(in));
+ }
+
+ /**
+ * 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 < 182) {
+ 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.
+ *
+ * @param errorCode the code of the errormessage to display
+ */
+ private void yy_ScanError(int errorCode) {
+ try {
+ System.out.println(YY_ERROR_MSG[errorCode]);
+ }
+ catch (ArrayIndexOutOfBoundsException e) {
+ System.out.println(YY_ERROR_MSG[YY_UNKNOWN_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()!
+ */
+ private void yypushback(int number) {
+ if ( number > yylength() )
+ yy_ScanError(YY_PUSHBACK_2BIG);
+
+ yy_markedPos -= number;
+ }
+
+
+ /**
+ * 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;
+ hasMore=false;
+
+ }
+ }
+
+
+ /**
+ * 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;
+
+
+ while (true) {
+
+ yychar+= yylength();
+
+ yy_atBOL = yy_markedPos <= 0 || yy_buffer[yy_markedPos-1] == '\n';
+ if (!yy_atBOL && yy_buffer[yy_markedPos-1] == '\r') {
+ yy_atBOL = yy_advance() != '\n';
+ if (!yy_atEOF) yy_currentPos--;
+ }
+
+ yy_action = -1;
+
+ yy_currentPos = yy_startRead = yy_markedPos;
+
+ if (yy_atBOL)
+ yy_state = YY_LEXSTATE[yy_lexical_state+1];
+ else
+ yy_state = YY_LEXSTATE[yy_lexical_state];
+
+
+ yy_forAction: {
+ while (true) {
+
+ yy_input = yy_advance();
+
+ if ( yy_input == YYEOF ) break yy_forAction;
+
+ yy_input = yycmap[yy_input];
+
+ boolean yy_isFinal = false;
+ boolean yy_noLookAhead = false;
+
+ yy_forNext: { switch (yy_state) {
+ case 0:
+ switch (yy_input) {
+ case 1: yy_isFinal = true; yy_state = 9; break yy_forNext;
+ case 2: yy_isFinal = true; yy_state = 10; break yy_forNext;
+ case 3: yy_isFinal = true; yy_state = 11; break yy_forNext;
+ case 10: yy_isFinal = true; yy_state = 12; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 8; break yy_forNext;
+ }
+
+ case 1:
+ switch (yy_input) {
+ case 1: yy_isFinal = true; yy_state = 9; break yy_forNext;
+ case 2: yy_isFinal = true; yy_state = 10; break yy_forNext;
+ case 3: yy_isFinal = true; yy_state = 11; break yy_forNext;
+ case 6:
+ case 7:
+ case 9: yy_isFinal = true; yy_state = 13; break yy_forNext;
+ case 10: yy_isFinal = true; yy_state = 14; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 8; break yy_forNext;
+ }
+
+ case 2:
+ switch (yy_input) {
+ case 11: yy_isFinal = true; yy_state = 15; break yy_forNext;
+ case 20: yy_isFinal = true; yy_state = 16; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 8; break yy_forNext;
+ }
+
+ case 3:
+ switch (yy_input) {
+ case 14: yy_isFinal = true; yy_state = 17; break yy_forNext;
+ case 15: yy_isFinal = true; yy_state = 18; break yy_forNext;
+ case 17: yy_isFinal = true; yy_state = 19; break yy_forNext;
+ case 27: yy_isFinal = true; yy_state = 20; break yy_forNext;
+ case 36: yy_isFinal = true; yy_state = 21; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 8; break yy_forNext;
+ }
+
+ case 4:
+ switch (yy_input) {
+ case 6:
+ case 9: yy_isFinal = true; yy_state = 23; break yy_forNext;
+ case 7: yy_isFinal = true; yy_state = 24; break yy_forNext;
+ case 37: yy_isFinal = true; yy_noLookAhead = true; yy_state = 25; break yy_forNext;
+ case 38: yy_isFinal = true; yy_noLookAhead = true; yy_state = 26; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 22; break yy_forNext;
+ }
+
+ case 5:
+ switch (yy_input) {
+ case 7:
+ case 9: yy_isFinal = true; yy_noLookAhead = true; yy_state = 28; break yy_forNext;
+ case 11: yy_isFinal = true; yy_state = 29; break yy_forNext;
+ case 15: yy_isFinal = true; yy_state = 30; break yy_forNext;
+ case 37: yy_isFinal = true; yy_noLookAhead = true; yy_state = 31; break yy_forNext;
+ case 38: yy_isFinal = true; yy_state = 32; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 27; break yy_forNext;
+ }
+
+ case 6:
+ switch (yy_input) {
+ case 7:
+ case 9: yy_isFinal = true; yy_noLookAhead = true; yy_state = 28; break yy_forNext;
+ case 15: yy_isFinal = true; yy_state = 30; break yy_forNext;
+ case 38: yy_isFinal = true; yy_state = 33; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 27; break yy_forNext;
+ }
+
+ case 7:
+ switch (yy_input) {
+ case 11:
+ case 15: yy_isFinal = true; yy_state = 30; break yy_forNext;
+ case 6:
+ case 7:
+ case 9: yy_isFinal = true; yy_noLookAhead = true; yy_state = 34; break yy_forNext;
+ case 37: yy_isFinal = true; yy_noLookAhead = true; yy_state = 35; break yy_forNext;
+ case 38: yy_isFinal = true; yy_state = 36; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 27; break yy_forNext;
+ }
+
+ case 9:
+ switch (yy_input) {
+ case 2: yy_isFinal = true; yy_noLookAhead = true; yy_state = 37; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 10:
+ switch (yy_input) {
+ case 1: yy_isFinal = true; yy_noLookAhead = true; yy_state = 38; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 11:
+ switch (yy_input) {
+ case 4: yy_state = 39; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 12:
+ switch (yy_input) {
+ case 15: yy_state = 40; break yy_forNext;
+ case 21: yy_state = 41; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 13:
+ switch (yy_input) {
+ case 6:
+ case 7:
+ case 9: yy_state = 42; break yy_forNext;
+ case 10: yy_state = 43; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 14:
+ switch (yy_input) {
+ case 15: yy_state = 40; break yy_forNext;
+ case 21: yy_state = 41; break yy_forNext;
+ case 11: yy_state = 44; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 15:
+ switch (yy_input) {
+ case 33: yy_isFinal = true; yy_noLookAhead = true; yy_state = 45; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 16:
+ switch (yy_input) {
+ case 31: yy_state = 46; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 17:
+ switch (yy_input) {
+ case 18: yy_state = 47; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 18:
+ switch (yy_input) {
+ case 33: yy_isFinal = true; yy_noLookAhead = true; yy_state = 48; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 19:
+ switch (yy_input) {
+ case 18: yy_state = 49; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 20:
+ switch (yy_input) {
+ case 32: yy_state = 50; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 21:
+ switch (yy_input) {
+ case 33: yy_isFinal = true; yy_noLookAhead = true; yy_state = 51; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 23:
+ switch (yy_input) {
+ case 6:
+ case 9: yy_isFinal = true; yy_state = 23; break yy_forNext;
+ case 7: yy_state = 52; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 22; break yy_forNext;
+ }
+
+ case 24:
+ switch (yy_input) {
+ case 6:
+ case 9: yy_isFinal = true; yy_state = 23; break yy_forNext;
+ case 7: yy_state = 52; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 22; break yy_forNext;
+ }
+
+ case 29:
+ switch (yy_input) {
+ case 33: yy_isFinal = true; yy_noLookAhead = true; yy_state = 53; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 30:
+ switch (yy_input) {
+ case 33: yy_isFinal = true; yy_noLookAhead = true; yy_state = 54; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 32:
+ switch (yy_input) {
+ case 10: yy_state = 55; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 33:
+ switch (yy_input) {
+ case 10: yy_state = 55; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 36:
+ switch (yy_input) {
+ case 10: yy_state = 55; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 39:
+ switch (yy_input) {
+ case 5: yy_isFinal = true; yy_noLookAhead = true; yy_state = 56; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 40:
+ switch (yy_input) {
+ case 6:
+ case 7:
+ case 9: yy_state = 40; break yy_forNext;
+ case 16: yy_state = 57; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 41:
+ switch (yy_input) {
+ case 22: yy_state = 58; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 42:
+ switch (yy_input) {
+ case 6:
+ case 7:
+ case 9: yy_state = 42; break yy_forNext;
+ case 10: yy_state = 43; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 43:
+ switch (yy_input) {
+ case 11: yy_state = 44; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 44:
+ switch (yy_input) {
+ case 12: yy_state = 59; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 46:
+ switch (yy_input) {
+ case 27: yy_state = 60; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 47:
+ switch (yy_input) {
+ case 31: yy_state = 61; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 49:
+ switch (yy_input) {
+ case 19: yy_state = 62; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 50:
+ switch (yy_input) {
+ case 31: yy_state = 63; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 52:
+ switch (yy_input) {
+ case 6:
+ case 9: yy_isFinal = true; yy_state = 23; break yy_forNext;
+ case 7: yy_state = 52; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 22; break yy_forNext;
+ }
+
+ case 55:
+ switch (yy_input) {
+ case 38: yy_isFinal = true; yy_noLookAhead = true; yy_state = 28; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 57:
+ switch (yy_input) {
+ case 6:
+ case 7:
+ case 9: yy_state = 57; break yy_forNext;
+ case 17: yy_state = 64; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 58:
+ switch (yy_input) {
+ case 17: yy_state = 65; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 59:
+ switch (yy_input) {
+ case 13: yy_state = 66; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 60:
+ switch (yy_input) {
+ case 32: yy_state = 67; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 61:
+ switch (yy_input) {
+ case 19: yy_state = 68; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 62:
+ switch (yy_input) {
+ case 20: yy_state = 69; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 63:
+ switch (yy_input) {
+ case 28: yy_state = 70; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 64:
+ switch (yy_input) {
+ case 18: yy_state = 71; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 65:
+ switch (yy_input) {
+ case 23: yy_state = 72; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 66:
+ switch (yy_input) {
+ case 14: yy_state = 73; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 67:
+ switch (yy_input) {
+ case 24: yy_state = 74; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 68:
+ switch (yy_input) {
+ case 34: yy_state = 75; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 69:
+ switch (yy_input) {
+ case 20: yy_state = 76; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 70:
+ switch (yy_input) {
+ case 20: yy_state = 77; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 71:
+ switch (yy_input) {
+ case 19: yy_state = 78; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 72:
+ switch (yy_input) {
+ case 24: yy_state = 79; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 73:
+ switch (yy_input) {
+ case 6:
+ case 7:
+ case 9: yy_isFinal = true; yy_state = 80; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 74:
+ switch (yy_input) {
+ case 25: yy_state = 81; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 75:
+ switch (yy_input) {
+ case 18: yy_state = 82; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 76:
+ switch (yy_input) {
+ case 31: yy_state = 83; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 77:
+ switch (yy_input) {
+ case 31: yy_state = 84; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 78:
+ switch (yy_input) {
+ case 20: yy_state = 85; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 79:
+ switch (yy_input) {
+ case 25: yy_state = 86; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 80:
+ switch (yy_input) {
+ case 6:
+ case 7:
+ case 9: yy_isFinal = true; yy_state = 80; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 81:
+ switch (yy_input) {
+ case 31: yy_state = 87; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 82:
+ switch (yy_input) {
+ case 19: yy_state = 88; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 83:
+ switch (yy_input) {
+ case 27: yy_state = 89; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 84:
+ switch (yy_input) {
+ case 28: yy_state = 90; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 85:
+ switch (yy_input) {
+ case 6:
+ case 7:
+ case 9: yy_isFinal = true; yy_state = 91; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 86:
+ switch (yy_input) {
+ case 26: yy_state = 92; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 87:
+ switch (yy_input) {
+ case 19: yy_state = 93; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 88:
+ switch (yy_input) {
+ case 20: yy_state = 94; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 89:
+ switch (yy_input) {
+ case 32: yy_state = 95; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 90:
+ switch (yy_input) {
+ case 28: yy_state = 96; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 91:
+ switch (yy_input) {
+ case 6:
+ case 7:
+ case 9: yy_isFinal = true; yy_state = 91; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 92:
+ switch (yy_input) {
+ case 20: yy_state = 97; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 93:
+ switch (yy_input) {
+ case 6:
+ case 7:
+ case 9: yy_state = 93; break yy_forNext;
+ case 8: yy_isFinal = true; yy_state = 98; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 94:
+ switch (yy_input) {
+ case 6:
+ case 7:
+ case 9: yy_state = 94; break yy_forNext;
+ case 8: yy_isFinal = true; yy_state = 99; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 95:
+ switch (yy_input) {
+ case 24: yy_state = 100; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 96:
+ switch (yy_input) {
+ case 35: yy_state = 101; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 97:
+ switch (yy_input) {
+ case 27: yy_state = 102; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 98:
+ switch (yy_input) {
+ case 6:
+ case 7:
+ case 9: yy_isFinal = true; yy_state = 98; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 99:
+ switch (yy_input) {
+ case 6:
+ case 7:
+ case 9: yy_isFinal = true; yy_state = 99; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 100:
+ switch (yy_input) {
+ case 25: yy_state = 103; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 101:
+ switch (yy_input) {
+ case 17: yy_state = 104; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 102:
+ switch (yy_input) {
+ case 28: yy_state = 105; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 103:
+ switch (yy_input) {
+ case 31: yy_state = 106; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 104:
+ switch (yy_input) {
+ case 20: yy_state = 107; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 105:
+ switch (yy_input) {
+ case 25: yy_state = 108; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 106:
+ switch (yy_input) {
+ case 19: yy_state = 109; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 107:
+ switch (yy_input) {
+ case 6:
+ case 7:
+ case 9: yy_state = 107; break yy_forNext;
+ case 8: yy_isFinal = true; yy_state = 110; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 108:
+ switch (yy_input) {
+ case 29: yy_state = 111; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 109:
+ switch (yy_input) {
+ case 6:
+ case 7:
+ case 9: yy_state = 109; break yy_forNext;
+ case 8: yy_isFinal = true; yy_state = 112; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 110:
+ switch (yy_input) {
+ case 6:
+ case 7:
+ case 9: yy_isFinal = true; yy_state = 110; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 111:
+ switch (yy_input) {
+ case 20: yy_state = 113; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 112:
+ switch (yy_input) {
+ case 6:
+ case 7:
+ case 9: yy_isFinal = true; yy_state = 112; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 113:
+ switch (yy_input) {
+ case 30: yy_state = 114; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 114:
+ switch (yy_input) {
+ case 17: yy_state = 64; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ default:
+ yy_ScanError(YY_ILLEGAL_STATE);
+ break;
+ } }
+
+ if ( yy_isFinal ) {
+ yy_action = yy_state;
+ yy_markedPos = yy_currentPos;
+ if ( yy_noLookAhead ) break yy_forAction;
+ }
+
+ }
+ }
+
+
+ switch (yy_action) {
+
+ case 33:
+ { popState(); valueText = string.toString(); return EncodingParserConstants.StringValue; }
+ case 116: break;
+ case 28:
+ { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue; }
+ case 117: break;
+ case 22:
+ case 23:
+ { yypushback(1); yybegin(UnDelimitedString); string.setLength(0); }
+ case 118: break;
+ case 35:
+ case 36:
+ { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTermintatedUnDelimitedStringValue; }
+ case 119: break;
+ case 48:
+ { yybegin(YYINITIAL); return JSPHeadTokenizerConstants.PageDirectiveEnd; }
+ case 120: break;
+ case 51:
+ { yybegin(YYINITIAL); return JSPHeadTokenizerConstants.PageDirectiveEnd; }
+ case 121: break;
+ case 53:
+ { yypushback(2); popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue; }
+ case 122: break;
+ case 54:
+ { yypushback(2);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue; }
+ case 123: break;
+ case 80:
+ { if (yychar == 0 ) {yybegin(ST_XMLDecl); return XMLHeadTokenizerConstants.XMLDeclStart;} }
+ case 124: break;
+ case 8:
+ case 9:
+ case 10:
+ case 11:
+ case 12:
+ case 13:
+ case 14:
+ case 15:
+ case 16:
+ case 17:
+ case 18:
+ case 19:
+ case 20:
+ case 21:
+ case 24:
+ { if (yychar > MAX_TO_SCAN) {hasMore=false; return EncodingParserConstants.MAX_CHARS_REACHED;} }
+ case 125: break;
+ case 91:
+ { yybegin(ST_PAGE_DIRECTIVE); return JSPHeadTokenizerConstants.PageDirectiveStart; }
+ case 126: break;
+ case 45:
+ { yybegin(YYINITIAL); hasMore = false; return XMLHeadTokenizerConstants.XMLDeclEnd; }
+ case 127: break;
+ case 112:
+ { pushCurrentState(); yybegin(QuotedAttributeValue); return JSPHeadTokenizerConstants.PageEncoding; }
+ case 128: break;
+ case 110:
+ { pushCurrentState(); yybegin(QuotedAttributeValue); return JSPHeadTokenizerConstants.PageContentType; }
+ case 129: break;
+ case 99:
+ { pushCurrentState(); yybegin(QuotedAttributeValue); return JSPHeadTokenizerConstants.PageLanguage; }
+ case 130: break;
+ case 98:
+ { pushCurrentState(); yybegin(QuotedAttributeValue); return XMLHeadTokenizerConstants.XMLDelEncoding; }
+ case 131: break;
+ case 56:
+ { hasMore = false; return EncodingParserConstants.UTF83ByteBOM; }
+ case 132: break;
+ case 37:
+ { hasMore = false; return EncodingParserConstants.UTF16BE; }
+ case 133: break;
+ case 38:
+ { hasMore = false; return EncodingParserConstants.UTF16LE; }
+ case 134: break;
+ case 31:
+ { popState(); valueText = string.toString(); return EncodingParserConstants.StringValue; }
+ case 135: break;
+ case 27:
+ case 29:
+ case 30:
+ case 32:
+ { string.append( yytext() ); }
+ case 136: break;
+ case 26:
+ { yybegin(SQ_STRING); string.setLength(0); }
+ case 137: break;
+ case 25:
+ { yybegin(DQ_STRING); string.setLength(0); }
+ case 138: break;
+ case 34:
+ { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.UnDelimitedStringValue; }
+ case 139: break;
+ default:
+ if (yy_input == YYEOF && yy_startRead == yy_currentPos) {
+ yy_atEOF = true;
+ yy_do_eof();
+ { hasMore = false; return EncodingParserConstants.EOF; }
+ }
+ else {
+ yy_ScanError(YY_NO_MATCH);
+ }
+ }
+ }
+ }
+
+ /**
+ * Runs the scanner on input files.
+ *
+ * This main method is the debugging routine for the scanner.
+ * It prints each returned token to System.out until the end of
+ * file is reached, or an error occured.
+ *
+ * @param argv the command line, contains the filenames to run
+ * the scanner on.
+ */
+ public static void main(String argv[]) {
+ for (int i = 0; i < argv.length; i++) {
+ JSPHeadTokenizer scanner = null;
+ try {
+ scanner = new JSPHeadTokenizer( new java.io.FileReader(argv[i]) );
+ }
+ catch (java.io.FileNotFoundException e) {
+ System.out.println("File not found : \""+argv[i]+"\"");
+ System.exit(1);
+ }
+ catch (java.io.IOException e) {
+ System.out.println("Error opening file \""+argv[i]+"\"");
+ System.exit(1);
+ }
+ catch (ArrayIndexOutOfBoundsException e) {
+ System.out.println("Usage : java JSPHeadTokenizer <inputfile>");
+ System.exit(1);
+ }
+
+ try {
+ do {
+ System.out.println(scanner.primGetNextToken());
+ } while (!scanner.yy_atEOF);
+
+ }
+ catch (java.io.IOException e) {
+ System.out.println("An I/O error occured while scanning :");
+ System.out.println(e);
+ System.exit(1);
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ System.exit(1);
+ }
+ }
+ }
+
+
+}
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/JSPHeadTokenizer/JSPHeadTokenizerGenJava.cmd b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/JSPHeadTokenizer/JSPHeadTokenizerGenJava.cmd
new file mode 100644
index 0000000..08aa344
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/JSPHeadTokenizer/JSPHeadTokenizerGenJava.cmd
@@ -0,0 +1,25 @@
+@echo off
+
+rem The following variables need to be set/specified for each "development machine"
+set PATH=%PATH%;d:jdks\j2sdk1.4.1_02\bin
+set WORKSPACE_LOCATION=D:\builds\Workspaces\PureHead
+set JFLEX_LIB_LOCATION=D:\DevTimeSupport\JFlex\lib
+
+rem The following variables differ from project to project, but should be otherwise constant
+set MAIN_NAME=JSPHeadTokenizer
+set PROJECT_SRC=\org.eclipse.wst.sse.core.jsp\src\
+set PACKAGE_DIR=com\ibm\sse\model\jsp\contenttype\
+
+
+rem Given the above "framework" and the command themselves, these variables should never need to be modified
+set JAVA_FILE=%MAIN_NAME%.java
+set JFLEX_RULES=%MAIN_NAME%.jflex
+set SKELETON_FILE=%MAIN_NAME%.skeleton
+
+IF EXIST %JAVA_FILE% del %JAVA_FILE%
+rem java -Xmx470000000 -cp %JFLEX_LIB_LOCATION%\sed-jflex.jar;.JFlex.Main %JFLEX_RULES% -skel %SKELETON_FILE% 1>jflexout.txt 2> jflexerr.txt
+java -Xmx470000000 -cp %JFLEX_LIB_LOCATION%\sed-jflex.jar;. JFlex.Main %JFLEX_RULES% 1>jflexout.txt 2>jflexerr.txt
+IF EXIST %JAVA_FILE% copy %JAVA_FILE% %WORKSPACE_LOCATION%%PROJECT_SRC%%PACKAGE_DIR%%JAVA_FILE%
+
+rem pause
+
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/JSPHeadTokenizer/jflexerr.txt b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/JSPHeadTokenizer/jflexerr.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/JSPHeadTokenizer/jflexerr.txt
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/JSPHeadTokenizer/jflexout.txt b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/JSPHeadTokenizer/jflexout.txt
new file mode 100644
index 0000000..efb08a2
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/JSPHeadTokenizer/jflexout.txt
@@ -0,0 +1,8 @@
+Reading "JSPHeadTokenizer.jflex"
+
+Warning : Macro "SpaceChar" has been declared but never used.
+Constructing NFA : 820 states in NFA
+Converting NFA to DFA :
+................................................................................................................................................
+158 states before minimization, 115 states in minimized DFA
+Writing code to "JSPHeadTokenizer.java"
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/XML10Names/XML10Names.jFlex b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/XML10Names/XML10Names.jFlex
new file mode 100644
index 0000000..a5dd0f4
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/XML10Names/XML10Names.jFlex
@@ -0,0 +1,100 @@
+/*******************************************************************************
+ * Copyright (c) 2004 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
+ *******************************************************************************/
+/*nlsXXX*/
+package org.eclipse.wst.sse.core.xml.internal.parser;
+
+
+
+%%
+
+%table
+%public
+%final
+%class XML10Names
+%function isValidXML10Name
+%type boolean
+%unicode
+%ignorecase
+%buffer 2048
+%apiprivate
+
+S = (\x20 | \x09 | \x0D | \x0A)
+
+BaseChar = [\u0041-\u005A\u0061-\u007A\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0100-\u0131\u0134-\u013E\u0141-\u0148\u014A-\u017E\u0180-\u01C3\u01CD-\u01F0\u01F4-\u01F5\u01FA-\u0217\u0250-\u02A8\u02BB-\u02C1\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03CE\u03D0-\u03D6\u03DA\u03DC\u03DE\u03E0\u03E2-\u03F3\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E-\u0481\u0490-\u04C4\u04C7-\u04C8\u04CB-\u04CC\u04D0-\u04EB\u04EE-\u04F5\u04F8-\u04F9\u0531-\u0556\u0559\u0561-\u0586\u05D0-\u05EA\u05F0-\u05F2\u0621-\u063A\u0641-\u064A\u0671-\u06B7\u06BA-\u06BE\u06C0-\u06CE\u06D0-\u06D3\u06D5\u06E5-\u06E6\u0905-\u0939\u093D\u0958-\u0961\u0985-\u098C\u098F-\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09DC-\u09DD\u09DF-\u09E1\u09F0-\u09F1\u0A05-\u0A0A\u0A0F-\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32-\u0A33\u0A35-\u0A36\u0A38-\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8B\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2-\u0AB3\u0AB5-\u0AB9\u0ABD\u0AE0\u0B05-\u0B0C\u0B0F-\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32-\u0B33\u0B36-\u0B39\u0B3D\u0B5C-\u0B5D\u0B5F-\u0B61\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99-\u0B9A\u0B9C\u0B9E-\u0B9F\u0BA3-\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB5\u0BB7-\u0BB9\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C60-\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CDE\u0CE0-\u0CE1\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D28\u0D2A-\u0D39\u0D60-\u0D61\u0E01-\u0E2E\u0E30\u0E32-\u0E33\u0E40-\u0E45\u0E81-\u0E82\u0E84\u0E87-\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA-\u0EAB\u0EAD-\u0EAE\u0EB0\u0EB2-\u0EB3\u0EBD\u0EC0-\u0EC4\u0F40-\u0F47\u0F49-\u0F69\u10A0-\u10C5\u10D0-\u10F6\u1100\u1102-\u1103\u1105-\u1107\u1109\u110B-\u110C\u110E-\u1112\u113C\u113E\u1140\u114C\u114E\u1150\u1154-\u1155\u1159\u115F-\u1161\u1163\u1165\u1167\u1169\u116D-\u116E\u1172-\u1173\u1175\u119E\u11A8\u11AB\u11AE-\u11AF\u11B7-\u11B8\u11BA\u11BC-\u11C2\u11EB\u11F0\u11F9\u1E00-\u1E9B\u1EA0-\u1EF9\u1F00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2126\u212A-\u212B\u212E\u2180-\u2182\u3041-\u3094\u30A1-\u30FA\u3105-\u312C\uAC00-\uD7A3]
+
+Ideographic = [\u4E00-\u9FA5\u3007\u3021-\u3029]
+
+CombiningChar = [\u0300-\u0345\u0360-\u0361\u0483-\u0486\u0591-\u05A1\u05A3-\u05B9\u05BB-\u05BD\u05BF\u05C1-\u05C2\u05C4\u064B-\u0652\u0670\u06D6-\u06DC\u06DD-\u06DF\u06E0-\u06E4\u06E7-\u06E8\u06EA-\u06ED\u0901-\u0903\u093C\u093E-\u094C\u094D\u0951-\u0954\u0962-\u0963\u0981-\u0983\u09BC\u09BE\u09BF\u09C0-\u09C4\u09C7-\u09C8\u09CB-\u09CD\u09D7\u09E2-\u09E3\u0A02\u0A3C\u0A3E\u0A3F\u0A40-\u0A42\u0A47-\u0A48\u0A4B-\u0A4D\u0A70-\u0A71\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0B01-\u0B03\u0B3C\u0B3E-\u0B43\u0B47-\u0B48\u0B4B-\u0B4D\u0B56-\u0B57\u0B82-\u0B83\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C01-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55-\u0C56\u0C82-\u0C83\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5-\u0CD6\u0D02-\u0D03\u0D3E-\u0D43\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB-\u0EBC\u0EC8-\u0ECD\u0F18-\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86-\u0F8B\u0F90-\u0F95\u0F97\u0F99-\u0FAD\u0FB1-\u0FB7\u0FB9\u20D0-\u20DC\u20E1\u302A-\u302F\u3099\u309A]
+
+Digit = [\u0030-\u0039\u0660-\u0669\u06F0-\u06F9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE7-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29]
+
+Extender = [\u00B7\u02D0\u02D1\u0387\u0640\u0E46\u0EC6\u3005\u3031-\u3035\u309D-\u309E\u30FC-\u30FE]
+
+Letter = ({BaseChar} | {Ideographic})
+
+NameChar = ({Letter} | {Digit} | . | - | _ | : | {CombiningChar} | {Extender})
+
+Name = ({Letter} | _ | : ) ({NameChar})*
+
+
+
+%{
+
+ /**
+ * Creates a new scanner
+ */
+ public XML10Names() {
+ this.zzReader = null;
+ }
+
+ public boolean isValidXML10Name(String stringToCheck) {
+ boolean result = false;
+ yyreset(new java.io.StringReader(stringToCheck));
+ try {
+ result = isValidXML10Name();
+ }
+ catch (java.io.IOException e) {
+ // should be impossible with strings, but if occurs, just means
+ // "not"
+ result = false;
+ }
+ return result;
+ }
+
+%}
+
+
+
+
+%%
+
+<YYINITIAL>
+{
+
+ // don't match if contains trailing or embedded space
+ {Name} {S}+ {return false;}
+ {Name} {S}+ {Name} {return false;}
+
+ {Name} {return true;}
+
+ // match anything should come last
+ . {return false;}
+
+}
+
+
+// this rule always in effect
+<<EOF>>
+{
+ {return false;}
+}
+
+
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/XML10Names/XML10Names.java b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/XML10Names/XML10Names.java
new file mode 100644
index 0000000..07bdcf2
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/XML10Names/XML10Names.java
@@ -0,0 +1,594 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 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
+ * Jens Lukowski/Innoopract - initial renaming/restructuring
+ *
+ *******************************************************************************/
+/* The following code was generated by JFlex 1.4 on 7/17/04 3:43 AM */
+
+/*nlsXXX*/
+package org.eclipse.wst.sse.core.xml.internal.parser;
+
+
+
+
+/**
+ * This class is a scanner generated by
+ * <a href="http://www.jflex.de/">JFlex</a> 1.4
+ * on 7/17/04 3:43 AM from the specification file
+ * <tt>XML10Names.jflex</tt>
+ */
+public final class XML10Names {
+
+ /** This character denotes the end of file */
+ private static final int YYEOF = -1;
+
+ /** initial size of the lookahead buffer */
+ private static final int ZZ_BUFFERSIZE = 2048;
+
+ /** lexical states */
+ private static final int YYINITIAL = 0;
+
+ /**
+ * Translates characters to character classes
+ */
+ private static final String ZZ_CMAP_PACKED =
+ "\11\0\1\1\1\2\2\0\1\1\22\0\1\1\14\0\1\0\2\0"+
+ "\12\0\1\3\6\0\32\3\4\0\1\3\1\0\32\3\74\0\1\0"+
+ "\10\0\27\3\1\0\37\3\1\0\72\3\2\0\13\3\2\0\10\3"+
+ "\1\0\65\3\1\0\104\3\11\0\44\3\3\0\2\3\4\0\36\3"+
+ "\70\0\131\3\22\0\7\3\16\0\2\0\56\0\106\0\32\0\2\0"+
+ "\44\0\1\3\1\0\3\3\1\0\1\3\1\0\24\3\1\0\54\3"+
+ "\1\0\7\3\3\0\1\3\1\0\1\3\1\0\1\3\1\0\1\3"+
+ "\1\0\22\3\15\0\14\3\1\0\102\3\1\0\14\3\1\0\44\3"+
+ "\1\0\4\0\11\0\65\3\2\0\2\3\2\0\2\3\3\0\34\3"+
+ "\2\0\10\3\2\0\2\3\67\0\46\3\2\0\1\3\7\0\46\3"+
+ "\12\0\21\0\1\0\27\0\1\0\3\0\1\0\1\0\1\0\2\0"+
+ "\1\0\1\0\13\0\33\3\5\0\3\3\56\0\32\3\5\0\1\0"+
+ "\12\3\10\0\15\0\12\0\6\0\1\0\107\3\2\0\5\3\1\0"+
+ "\17\3\1\0\4\3\1\0\1\3\17\0\2\3\2\0\1\0\4\0"+
+ "\2\0\12\0\u0207\0\3\0\1\0\65\3\2\0\1\0\1\3\20\0"+
+ "\3\0\4\0\3\0\12\3\2\0\2\0\12\0\21\0\3\0\1\0"+
+ "\10\3\2\0\2\3\2\0\26\3\1\0\7\3\1\0\1\3\3\0"+
+ "\4\3\2\0\1\0\1\0\7\0\2\0\2\0\2\0\3\0\11\0"+
+ "\1\0\4\0\2\3\1\0\3\3\2\0\2\0\12\0\2\3\20\0"+
+ "\1\0\2\0\6\3\4\0\2\3\2\0\26\3\1\0\7\3\1\0"+
+ "\2\3\1\0\2\3\1\0\2\3\2\0\1\0\1\0\5\0\4\0"+
+ "\2\0\2\0\3\0\13\0\4\3\1\0\1\3\7\0\12\0\2\0"+
+ "\3\3\14\0\3\0\1\0\7\3\1\0\1\3\1\0\3\3\1\0"+
+ "\26\3\1\0\7\3\1\0\2\3\1\0\5\3\2\0\1\0\1\3"+
+ "\10\0\1\0\3\0\1\0\3\0\22\0\1\3\5\0\12\0\21\0"+
+ "\3\0\1\0\10\3\2\0\2\3\2\0\26\3\1\0\7\3\1\0"+
+ "\2\3\2\0\4\3\2\0\1\0\1\3\6\0\3\0\2\0\2\0"+
+ "\3\0\10\0\2\0\4\0\2\3\1\0\3\3\4\0\12\0\22\0"+
+ "\2\0\1\0\6\3\3\0\3\3\1\0\4\3\3\0\2\3\1\0"+
+ "\1\3\1\0\2\3\3\0\2\3\3\0\3\3\3\0\10\3\1\0"+
+ "\3\3\4\0\5\0\3\0\3\0\1\0\4\0\11\0\1\0\17\0"+
+ "\11\0\21\0\3\0\1\0\10\3\1\0\3\3\1\0\27\3\1\0"+
+ "\12\3\1\0\5\3\4\0\7\0\1\0\3\0\1\0\4\0\7\0"+
+ "\2\0\11\0\2\3\4\0\12\0\22\0\2\0\1\0\10\3\1\0"+
+ "\3\3\1\0\27\3\1\0\12\3\1\0\5\3\4\0\7\0\1\0"+
+ "\3\0\1\0\4\0\7\0\2\0\7\0\1\3\1\0\2\3\4\0"+
+ "\12\0\22\0\2\0\1\0\10\3\1\0\3\3\1\0\27\3\1\0"+
+ "\20\3\4\0\6\0\2\0\3\0\1\0\4\0\11\0\1\0\10\0"+
+ "\2\3\4\0\12\0\221\0\56\3\1\0\1\3\1\0\2\3\7\0"+
+ "\5\0\6\3\1\0\10\0\1\0\12\0\47\0\2\3\1\0\1\3"+
+ "\2\0\2\3\1\0\1\3\2\0\1\3\6\0\4\3\1\0\7\3"+
+ "\1\0\3\3\1\0\1\3\1\0\1\3\2\0\2\3\1\0\2\3"+
+ "\1\0\1\3\1\0\2\3\6\0\1\0\2\0\1\3\2\0\5\3"+
+ "\1\0\1\0\1\0\6\0\2\0\12\0\76\0\2\0\6\0\12\0"+
+ "\13\0\1\0\1\0\1\0\1\0\1\0\4\0\2\0\10\3\1\0"+
+ "\41\3\7\0\24\0\1\0\6\0\4\0\6\0\1\0\1\0\1\0"+
+ "\25\0\3\0\7\0\1\0\1\0\346\0\46\3\12\0\47\3\11\0"+
+ "\1\3\1\0\2\3\1\0\3\3\1\0\1\3\1\0\2\3\1\0"+
+ "\5\3\51\0\1\3\1\0\1\3\1\0\1\3\13\0\1\3\1\0"+
+ "\1\3\1\0\1\3\3\0\2\3\3\0\1\3\5\0\3\3\1\0"+
+ "\1\3\1\0\1\3\1\0\1\3\1\0\1\3\3\0\2\3\3\0"+
+ "\2\3\1\0\1\3\50\0\1\3\11\0\1\3\2\0\1\3\2\0"+
+ "\2\3\7\0\2\3\1\0\1\3\1\0\7\3\50\0\1\3\4\0"+
+ "\1\3\10\0\1\3\u0c06\0\234\3\4\0\132\3\6\0\26\3\2\0"+
+ "\6\3\2\0\46\3\2\0\6\3\2\0\10\3\1\0\1\3\1\0"+
+ "\1\3\1\0\1\3\1\0\37\3\2\0\65\3\1\0\7\3\1\0"+
+ "\1\3\3\0\3\3\1\0\7\3\3\0\4\3\2\0\6\3\4\0"+
+ "\15\3\5\0\3\3\1\0\7\3\323\0\15\0\4\0\1\0\104\0"+
+ "\1\3\3\0\2\3\2\0\1\3\121\0\3\3\u0e82\0\1\0\1\0"+
+ "\1\3\31\0\11\3\6\0\1\0\5\0\13\0\124\3\4\0\2\0"+
+ "\2\0\2\0\2\0\132\3\1\0\3\0\6\0\50\3\u1cd3\0\u51a6\3"+
+ "\u0c5a\0\u2ba4\3\u285c\0";
+
+ /**
+ * Translates characters to character classes
+ */
+ private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED);
+
+ /**
+ * Translates DFA states to action switch labels.
+ */
+ private static final int [] ZZ_ACTION = zzUnpackAction();
+
+ private static final String ZZ_ACTION_PACKED_0 =
+ "\1\0\1\1\1\2\4\1";
+
+ private static int [] zzUnpackAction() {
+ int [] result = new int[7];
+ int offset = 0;
+ offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
+ return result;
+ }
+
+ private static int zzUnpackAction(String packed, int offset, int [] result) {
+ int i = 0; /* index in packed string */
+ int j = offset; /* index in unpacked array */
+ int l = packed.length();
+ while (i < l) {
+ int count = packed.charAt(i++);
+ int value = packed.charAt(i++);
+ do result[j++] = value; while (--count > 0);
+ }
+ return j;
+ }
+
+
+ /**
+ * Translates a state to a row index in the transition table
+ */
+ private static final int [] ZZ_ROWMAP = zzUnpackRowMap();
+
+ private static final String ZZ_ROWMAP_PACKED_0 =
+ "\0\0\0\4\0\10\0\14\0\20\0\24\0\30";
+
+ private static int [] zzUnpackRowMap() {
+ int [] result = new int[7];
+ int offset = 0;
+ offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
+ return result;
+ }
+
+ private static int zzUnpackRowMap(String packed, int offset, int [] result) {
+ int i = 0; /* index in packed string */
+ int j = offset; /* index in unpacked array */
+ int l = packed.length();
+ while (i < l) {
+ int high = packed.charAt(i++) << 16;
+ result[j++] = high | packed.charAt(i++);
+ }
+ return j;
+ }
+
+ /**
+ * The transition table of the DFA
+ */
+ private static final int ZZ_TRANS [] = {
+ 1, 1, -1, 2, -1, -1, -1, -1, 2, 3,
+ 4, 2, 2, 3, 4, 5, -1, 4, 4, 6,
+ 5, 5, 4, 5, 6, 6, -1, 6,
+ };
+
+ /* error codes */
+ private static final int ZZ_UNKNOWN_ERROR = 0;
+ private static final int ZZ_NO_MATCH = 1;
+ private static final int ZZ_PUSHBACK_2BIG = 2;
+
+ /* error messages for the codes above */
+ private static final String ZZ_ERROR_MSG[] = {
+ "Unkown internal scanner error",
+ "Error: could not match input",
+ "Error: pushback value was too large"
+ };
+
+ /**
+ * ZZ_ATTRIBUTE[aState] contains the attributes of state <code>aState</code>
+ */
+ private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute();
+
+ private static final String ZZ_ATTRIBUTE_PACKED_0 =
+ "\1\0\1\11\5\1";
+
+ private static int [] zzUnpackAttribute() {
+ int [] result = new int[7];
+ int offset = 0;
+ offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
+ return result;
+ }
+
+ private static int zzUnpackAttribute(String packed, int offset, int [] result) {
+ int i = 0; /* index in packed string */
+ int j = offset; /* index in unpacked array */
+ int l = packed.length();
+ while (i < l) {
+ int count = packed.charAt(i++);
+ int value = packed.charAt(i++);
+ do result[j++] = value; while (--count > 0);
+ }
+ return j;
+ }
+
+ /** the input device */
+ private java.io.Reader zzReader;
+
+ /** the current state of the DFA */
+ private int zzState;
+
+ /** the current lexical state */
+ private int zzLexicalState = YYINITIAL;
+
+ /** this buffer contains the current text to be matched and is
+ the source of the yytext() string */
+ private char zzBuffer[] = new char[ZZ_BUFFERSIZE];
+
+ /** the textposition at the last accepting state */
+ private int zzMarkedPos;
+
+ /** the textposition at the last state to be included in yytext */
+ private int zzPushbackPos;
+
+ /** the current text position in the buffer */
+ private int zzCurrentPos;
+
+ /** startRead marks the beginning of the yytext() string in the buffer */
+ private int zzStartRead;
+
+ /** endRead marks the last character in the buffer, that has been read
+ from input */
+ private int zzEndRead;
+
+ /** 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;
+
+ /**
+ * zzAtBOL == true <=> the scanner is currently at the beginning of a line
+ */
+ private boolean zzAtBOL = true;
+
+ /** zzAtEOF == true <=> the scanner is at the EOF */
+ private boolean zzAtEOF;
+
+ /* user code: */
+
+ /**
+ * Creates a new scanner
+ */
+ public XML10Names() {
+ this.zzReader = null;
+ }
+
+ public boolean isValidXML10Name(String stringToCheck) {
+ boolean result = false;
+ yyreset(new java.io.StringReader(stringToCheck));
+ try {
+ result = isValidXML10Name();
+ }
+ catch (java.io.IOException e) {
+ // should be impossible with strings, but if occurs, just means
+ // "not"
+ result = false;
+ }
+ return result;
+ }
+
+
+
+ /**
+ * 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 XML10Names(java.io.Reader in) {
+ this.zzReader = 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 XML10Names(java.io.InputStream in) {
+ this(new java.io.InputStreamReader(in));
+ }
+
+ /**
+ * Unpacks the compressed character translation table.
+ *
+ * @param packed the packed character translation table
+ * @return the unpacked character translation table
+ */
+ private static char [] zzUnpackCMap(String packed) {
+ char [] map = new char[0x10000];
+ int i = 0; /* index in packed string */
+ int j = 0; /* index in unpacked array */
+ while (i < 1226) {
+ int count = packed.charAt(i++);
+ char value = packed.charAt(i++);
+ do map[j++] = value; while (--count > 0);
+ }
+ return map;
+ }
+
+
+ /**
+ * Refills the input buffer.
+ *
+ * @return <code>false</code>, iff there was new input.
+ *
+ * @exception java.io.IOException if any I/O-Error occurs
+ */
+ private boolean zzRefill() throws java.io.IOException {
+
+ /* first: make room (if you can) */
+ if (zzStartRead > 0) {
+ System.arraycopy(zzBuffer, zzStartRead,
+ zzBuffer, 0,
+ zzEndRead-zzStartRead);
+
+ /* translate stored positions */
+ zzEndRead-= zzStartRead;
+ zzCurrentPos-= zzStartRead;
+ zzMarkedPos-= zzStartRead;
+ zzPushbackPos-= zzStartRead;
+ zzStartRead = 0;
+ }
+
+ /* is the buffer big enough? */
+ if (zzCurrentPos >= zzBuffer.length) {
+ /* if not: blow it up */
+ char newBuffer[] = new char[zzCurrentPos*2];
+ System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length);
+ zzBuffer = newBuffer;
+ }
+
+ /* finally: fill the buffer with new input */
+ int numRead = zzReader.read(zzBuffer, zzEndRead,
+ zzBuffer.length-zzEndRead);
+
+ if (numRead < 0) {
+ return true;
+ }
+ else {
+ zzEndRead+= numRead;
+ return false;
+ }
+ }
+
+
+ /**
+ * Closes the input stream.
+ */
+ private final void yyclose() throws java.io.IOException {
+ zzAtEOF = true; /* indicate end of file */
+ zzEndRead = zzStartRead; /* invalidate buffer */
+
+ if (zzReader != null)
+ zzReader.close();
+ }
+
+
+ /**
+ * Resets the scanner to read from a new input stream.
+ * Does not close the old reader.
+ *
+ * All internal variables are reset, the old input stream
+ * <b>cannot</b> be reused (internal buffer is discarded and lost).
+ * Lexical state is set to <tt>ZZ_INITIAL</tt>.
+ *
+ * @param reader the new input stream
+ */
+ private final void yyreset(java.io.Reader reader) {
+ zzReader = reader;
+ zzAtBOL = true;
+ zzAtEOF = false;
+ zzEndRead = zzStartRead = 0;
+ zzCurrentPos = zzMarkedPos = zzPushbackPos = 0;
+ yyline = yychar = yycolumn = 0;
+ zzLexicalState = YYINITIAL;
+ }
+
+
+ /**
+ * Returns the current lexical state.
+ */
+ private final int yystate() {
+ return zzLexicalState;
+ }
+
+
+ /**
+ * Enters a new lexical state
+ *
+ * @param newState the new lexical state
+ */
+ private final void yybegin(int newState) {
+ zzLexicalState = newState;
+ }
+
+
+ /**
+ * Returns the text matched by the current regular expression.
+ */
+ private final String yytext() {
+ return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead );
+ }
+
+
+ /**
+ * Returns the character at position <tt>pos</tt> from the
+ * matched text.
+ *
+ * It is equivalent to yytext().charAt(pos), but faster
+ *
+ * @param pos the position of the character to fetch.
+ * A value from 0 to yylength()-1.
+ *
+ * @return the character at position pos
+ */
+ private final char yycharat(int pos) {
+ return zzBuffer[zzStartRead+pos];
+ }
+
+
+ /**
+ * Returns the length of the matched text region.
+ */
+ private final int yylength() {
+ return zzMarkedPos-zzStartRead;
+ }
+
+
+ /**
+ * Reports an error that occured while scanning.
+ *
+ * In a wellformed scanner (no or only correct usage of
+ * yypushback(int) and a match-all fallback rule) this method
+ * will only be called with things that "Can't Possibly Happen".
+ * If this method is called, something is seriously wrong
+ * (e.g. a JFlex bug producing a faulty scanner etc.).
+ *
+ * Usual syntax/scanner level error handling should be done
+ * in error fallback rules.
+ *
+ * @param errorCode the code of the errormessage to display
+ */
+ private void zzScanError(int errorCode) {
+ String message;
+ try {
+ message = ZZ_ERROR_MSG[errorCode];
+ }
+ catch (ArrayIndexOutOfBoundsException e) {
+ message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR];
+ }
+
+ throw new Error(message);
+ }
+
+
+ /**
+ * 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()!
+ */
+ private void yypushback(int number) {
+ if ( number > yylength() )
+ zzScanError(ZZ_PUSHBACK_2BIG);
+
+ zzMarkedPos -= number;
+ }
+
+
+ /**
+ * 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 java.io.IOException if any I/O-Error occurs
+ */
+ private boolean isValidXML10Name() throws java.io.IOException {
+ int zzInput;
+ int zzAction;
+
+ // cached fields:
+ int zzCurrentPosL;
+ int zzMarkedPosL;
+ int zzEndReadL = zzEndRead;
+ char [] zzBufferL = zzBuffer;
+ char [] zzCMapL = ZZ_CMAP;
+
+ int [] zzTransL = ZZ_TRANS;
+ int [] zzRowMapL = ZZ_ROWMAP;
+ int [] zzAttrL = ZZ_ATTRIBUTE;
+
+ while (true) {
+ zzMarkedPosL = zzMarkedPos;
+
+ zzAction = -1;
+
+ zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;
+
+ zzState = zzLexicalState;
+
+
+ zzForAction: {
+ while (true) {
+
+ if (zzCurrentPosL < zzEndReadL)
+ zzInput = zzBufferL[zzCurrentPosL++];
+ else if (zzAtEOF) {
+ zzInput = YYEOF;
+ break zzForAction;
+ }
+ else {
+ // store back cached positions
+ zzCurrentPos = zzCurrentPosL;
+ zzMarkedPos = zzMarkedPosL;
+ boolean eof = zzRefill();
+ // get translated positions and possibly new buffer
+ zzCurrentPosL = zzCurrentPos;
+ zzMarkedPosL = zzMarkedPos;
+ zzBufferL = zzBuffer;
+ zzEndReadL = zzEndRead;
+ if (eof) {
+ zzInput = YYEOF;
+ break zzForAction;
+ }
+ else {
+ zzInput = zzBufferL[zzCurrentPosL++];
+ }
+ }
+ int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ];
+ if (zzNext == -1) break zzForAction;
+ zzState = zzNext;
+
+ int zzAttributes = zzAttrL[zzState];
+ if ( (zzAttributes & 1) == 1 ) {
+ zzAction = zzState;
+ zzMarkedPosL = zzCurrentPosL;
+ if ( (zzAttributes & 8) == 8 ) break zzForAction;
+ }
+
+ }
+ }
+
+ // store back cached position
+ zzMarkedPos = zzMarkedPosL;
+
+ switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
+ case 1:
+ { return false;
+ }
+ case 3: break;
+ case 2:
+ { return true;
+ }
+ case 4: break;
+ default:
+ if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
+ zzAtEOF = true;
+ { {return false;} }
+ }
+ else {
+ zzScanError(ZZ_NO_MATCH);
+ }
+ }
+ }
+ }
+
+
+}
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/XML10Names/XML10NamesGenJava.cmd b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/XML10Names/XML10NamesGenJava.cmd
new file mode 100644
index 0000000..2477d14
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/XML10Names/XML10NamesGenJava.cmd
@@ -0,0 +1,25 @@
+@echo on
+
+rem The following variables need to be set/specified for each "development machine"
+set PATH=%PATH%;D:\JDKs\j2sdk1.4.2_03\bin
+set WORKSPACE_LOCATION=D:\builds\Workspaces\RC2
+set JFLEX_LIB_LOCATION=D:\DevTimeSupport\JFlex-1.4\lib
+
+rem The following variables differ from project to project, but should be otherwise constant
+set MAIN_NAME=XML10Names
+
+set PROJECT_SRC=\org.eclipse.wst.sse.core.xml\src\
+set PACKAGE_DIR=com\ibm\sse\model\xml\internal\parser\
+
+
+rem Given the above "framework" and the command themselves, these variables should never need to be modified
+set JAVA_FILE=%MAIN_NAME%.java
+set JFLEX_RULES=%MAIN_NAME%.jflex
+set SKELETON_FILE=%MAIN_NAME%.skeleton
+
+IF EXIST %JAVA_FILE% del %JAVA_FILE%
+rem java -Xmx470000000 -cp %JFLEX_LIB_LOCATION%\sed-jflex.jar;. JFlex.Main %JFLEX_RULES% -skel %SKELETON_FILE% 1>jflexout.txt 2>jflexerr.txt
+java -Xmx470000000 -cp %JFLEX_LIB_LOCATION%\sed-jflex.jar;. JFlex.Main %JFLEX_RULES% 1>jflexout.txt 2>jflexerr.txt
+IF EXIST %JAVA_FILE% copy %JAVA_FILE% %WORKSPACE_LOCATION%%PROJECT_SRC%%PACKAGE_DIR%%JAVA_FILE%
+
+pause
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/XML10Names/XML10NamesGenJavaJFlex14.cmd b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/XML10Names/XML10NamesGenJavaJFlex14.cmd
new file mode 100644
index 0000000..aafbf61
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/XML10Names/XML10NamesGenJavaJFlex14.cmd
@@ -0,0 +1,25 @@
+@echo on
+
+rem The following variables need to be set/specified for each "development machine"
+set PATH=%PATH%;D:\JDKs\j2sdk1.4.2_03\bin
+set WORKSPACE_LOCATION=D:\builds\Workspaces\RC2
+set JFLEX_LIB_LOCATION=D:\DevTimeSupport\JFlex-1.4\lib
+
+rem The following variables differ from project to project, but should be otherwise constant
+set MAIN_NAME=XML10Names
+
+set PROJECT_SRC=\org.eclipse.wst.sse.core.xml\src\
+set PACKAGE_DIR=com\ibm\sse\model\xml\internal\parser\
+
+
+rem Given the above "framework" and the command themselves, these variables should never need to be modified
+set JAVA_FILE=%MAIN_NAME%.java
+set JFLEX_RULES=%MAIN_NAME%.jflex
+set SKELETON_FILE=%MAIN_NAME%.skeleton
+
+IF EXIST %JAVA_FILE% del %JAVA_FILE%
+rem java -Xmx470000000 -cp %JFLEX_LIB_LOCATION%\Jflex.jar;. JFlex.Main %JFLEX_RULES% -skel %SKELETON_FILE% 1>jflexout.txt 2>jflexerr.txt
+java -Xmx470000000 -cp %JFLEX_LIB_LOCATION%\Jflex.jar;. JFlex.Main %JFLEX_RULES% 1>jflexout.txt 2>jflexerr.txt
+IF EXIST %JAVA_FILE% copy %JAVA_FILE% %WORKSPACE_LOCATION%%PROJECT_SRC%%PACKAGE_DIR%%JAVA_FILE%
+
+pause
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/XML10Names/jflexerr.txt b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/XML10Names/jflexerr.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/XML10Names/jflexerr.txt
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/XML10Names/jflexout.txt b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/XML10Names/jflexout.txt
new file mode 100644
index 0000000..6e960b5
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/XML10Names/jflexout.txt
@@ -0,0 +1,6 @@
+Reading "XML10Names.jflex"
+Constructing NFA : 36 states in NFA
+Converting NFA to DFA :
+...........
+13 states before minimization, 7 states in minimized DFA
+Writing code to "XML10Names.java"
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/XMLHeadTokenizer/XMLHeadTokenizer.jFlex b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/XMLHeadTokenizer/XMLHeadTokenizer.jFlex
new file mode 100644
index 0000000..a1944fb
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/XMLHeadTokenizer/XMLHeadTokenizer.jFlex
@@ -0,0 +1,268 @@
+/*******************************************************************************
+ * Copyright (c) 2004 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
+ *******************************************************************************/
+/*nlsXXX*/
+package org.eclipse.wst.common.encoding.contentspecific.xml;
+import java.io.IOException;
+import java.io.Reader;
+
+import org.eclipse.wst.common.encoding.contentspecific.EncodingParserConstants;
+import org.eclipse.wst.common.encoding.contentspecific.HeadParserToken;
+import org.eclipse.wst.common.encoding.contentspecific.IntStack;
+import org.eclipse.wst.common.encoding.contentspecific.xml.XMLHeadTokenizerConstants;
+
+
+
+
+%%
+
+%{
+
+
+ private boolean hasMore = true;
+ private final static int MAX_TO_SCAN = 1000;
+ StringBuffer string = new StringBuffer();
+ // state stack for easier state handling
+ private IntStack fStateStack = new IntStack();
+ private String valueText = null;
+
+
+ public XMLHeadTokenizer() {
+ super();
+ }
+
+ public void reset (Reader in) {
+ /* 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;
+
+ /**
+ * the number of characters from the last newline up to the start
+ * of the matched text
+ */
+ yycolumn = 0;
+
+ /**
+ * yy_atBOL == true <=> the scanner is currently at the beginning
+ * of a line
+ */
+ yy_atBOL = false;
+
+ /* 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;
+
+
+ fStateStack.clear();
+
+ hasMore = true;
+
+ // its a little wasteful to "throw away" first char array generated
+ // by class init (via auto generated code), but we really do want
+ // a small buffer for our head parsers.
+ if (yy_buffer.length != MAX_TO_SCAN) {
+ yy_buffer = new char[MAX_TO_SCAN];
+ }
+
+
+ }
+
+
+ public final HeadParserToken getNextToken() throws IOException {
+ String context = null;
+ context = primGetNextToken();
+ HeadParserToken result = null;
+ if (valueText != null) {
+ result = createToken(context, yychar, valueText);
+ valueText = null;
+ } else {
+ result = createToken(context, yychar, yytext());
+ }
+ return result;
+ }
+
+ public final boolean hasMoreTokens() {
+ return hasMore && yychar < MAX_TO_SCAN;
+ }
+ private void pushCurrentState() {
+ fStateStack.push(yystate());
+
+ }
+
+ private void popState() {
+ yybegin(fStateStack.pop());
+ }
+
+ private HeadParserToken createToken(String context, int start, String text) {
+ return new HeadParserToken(context, start, text);
+ }
+
+%}
+
+%eof{
+ hasMore=false;
+%eof}
+
+%public
+%class XMLHeadTokenizer
+%function primGetNextToken
+%type String
+%char
+%unicode
+%ignorecase
+%debug
+%switch
+
+UTF16BE = \xFE\xFF
+UTF16LE = \xFF\xFE
+UTF83ByteBOM = \xEF\xBB\xBF
+
+SpaceChar = [\x20\x09]
+
+// [3] S ::= (0x20 | 0x9 | 0xD | 0xA)+
+S = [\x20\x09\x0D\x0A]
+
+BeginAttribeValue = {S}* \= {S}*
+
+LineTerminator = \r|\n
+
+
+%state ST_XMLDecl
+%state QuotedAttributeValue
+%state DQ_STRING
+%state SQ_STRING
+%state UnDelimitedString
+
+%%
+
+
+<YYINITIAL>
+{
+ // force to start at beginning of line (^) and at beginning of file (yychar == 0)
+ ^{UTF16BE} {if (yychar == 0 ) {hasMore = false; return EncodingParserConstants.UTF16BE;}}
+ ^{UTF16LE} {if (yychar == 0 ) {hasMore = false; return EncodingParserConstants.UTF16LE;}}
+ ^{UTF83ByteBOM} {if (yychar == 0 ) {hasMore = false; return EncodingParserConstants.UTF83ByteBOM;}}
+
+ // force to be started on first line, but we do allow preceeding spaces
+ ^ {S}* "<\?xml" {S}+ {if (yychar == 0 ) {yybegin(ST_XMLDecl); return XMLHeadTokenizerConstants.XMLDeclStart;}}
+
+}
+
+<ST_XMLDecl>
+{
+// commented out 'version' since we don't really use, but could add back in here if needed
+// "version" {BeginAttribeValue} {pushCurrentState(); yybegin(QuotedAttributeValue); return XMLHeadTokenizerConstants.XMLDeclVersion;}
+ "encoding" {BeginAttribeValue} {pushCurrentState(); yybegin(QuotedAttributeValue); return XMLHeadTokenizerConstants.XMLDelEncoding;}
+ // note the "forced end" (via 'hasMore=false') once the end of XML Declaration found
+ // This is since non-ascii chars may follow and may cause IOExceptions which would not occur once stream is
+ // read with incorrect encoding (such as if platform encoding is in effect until true encoding detected).
+ "\?>" {yybegin(YYINITIAL); hasMore = false; return XMLHeadTokenizerConstants.XMLDeclEnd;}
+}
+
+
+
+<QuotedAttributeValue>
+{
+ \" { yybegin(DQ_STRING); string.setLength(0); }
+ \' { yybegin(SQ_STRING); string.setLength(0); }
+ // in this state, anything other than a space character can start an undelimited string
+ {S}*. { yypushback(1); yybegin(UnDelimitedString); string.setLength(0);}
+
+}
+
+
+<DQ_STRING>
+{
+
+ \" { popState(); valueText = string.toString(); return EncodingParserConstants.StringValue; }
+ {LineTerminator} { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ "\?>" { yypushback(2); popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ '<' { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ . { string.append( yytext() ); }
+
+
+}
+
+<SQ_STRING>
+{
+
+ \' { popState(); valueText = string.toString(); return EncodingParserConstants.StringValue;}
+ {LineTerminator} { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ "%>" { yypushback(2);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ '<' { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ . { string.append( yytext() ); }
+
+
+}
+
+<UnDelimitedString>
+{
+
+ {S} { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.UnDelimitedStringValue; }
+ {LineTerminator} { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ "\?>" { yypushback(2);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ '<'
+ { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue;}
+ // these are a bit special, since we started an undelimit string, but found a quote ... probably indicates a missing beginning quote
+ \' { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTermintatedUnDelimitedStringValue;}
+
+ \" { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTermintatedUnDelimitedStringValue;}
+
+ . { string.append( yytext() ); }
+
+}
+
+// The "match anything" rule should always be in effect except for when looking for end of string
+// (That is, remember to update state list if/when new states added)
+<YYINITIAL, ST_XMLDecl, QuotedAttributeValue>
+{
+// this is the fallback (match "anything") rule (for this scanner, input is ignored, and position advanced, if not recognized)
+.|\n {if (yychar > MAX_TO_SCAN) {hasMore=false; return EncodingParserConstants.MAX_CHARS_REACHED;}}
+}
+
+// this rule always in effect
+<<EOF>> {hasMore = false; return EncodingParserConstants.EOF;}
+
+
\ No newline at end of file
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/XMLHeadTokenizer/XMLHeadTokenizer.java b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/XMLHeadTokenizer/XMLHeadTokenizer.java
new file mode 100644
index 0000000..196594c
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/XMLHeadTokenizer/XMLHeadTokenizer.java
@@ -0,0 +1,905 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 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
+ * Jens Lukowski/Innoopract - initial renaming/restructuring
+ *
+ *******************************************************************************/
+/* The following code was generated by JFlex 1.2.2 on 4/6/04 11:13 PM */
+
+/*nlsXXX*/
+package org.eclipse.wst.common.encoding.contentspecific.xml;
+import java.io.IOException;
+import java.io.Reader;
+
+import org.eclipse.wst.common.encoding.contentspecific.EncodingParserConstants;
+import org.eclipse.wst.common.encoding.contentspecific.HeadParserToken;
+import org.eclipse.wst.common.encoding.contentspecific.IntStack;
+import org.eclipse.wst.common.encoding.contentspecific.xml.XMLHeadTokenizerConstants;
+
+
+
+
+
+/**
+ * This class is a scanner generated by
+ * <a href="http://www.informatik.tu-muenchen.de/~kleing/jflex/">JFlex</a> 1.2.2
+ * on 4/6/04 11:13 PM from the specification file
+ * <tt>file:/D:/DevTimeSupport/HeadParsers/XMLHeadTokenizer/XMLHeadTokenizer.jflex</tt>
+ */
+public class XMLHeadTokenizer {
+
+ /** this character denotes the end of file */
+ final public static int YYEOF = -1;
+
+ /** lexical states */
+ final public static int YYINITIAL = 0;
+ final public static int UnDelimitedString = 10;
+ final public static int DQ_STRING = 6;
+ final public static int SQ_STRING = 8;
+ final public static int ST_XMLDecl = 2;
+ final public static int QuotedAttributeValue = 4;
+
+ /**
+ * YY_LEXSTATE[l] is the state in the DFA for the lexical state l
+ * YY_LEXSTATE[l+1] is the state in the DFA for the lexical state l
+ * at the beginning of a line
+ * l is of the form l = 2*k, k a non negative integer
+ */
+ private final static int YY_LEXSTATE[] = {
+ 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6
+ };
+
+ /**
+ * Translates characters to character classes
+ */
+ final private static String yycmap_packed =
+ "\11\0\1\6\1\7\2\0\1\11\22\0\1\6\1\0\1\27\2\0"+
+ "\1\31\1\0\1\30\24\0\1\12\1\10\1\26\1\13\3\0\1\21"+
+ "\1\23\1\17\1\0\1\25\1\0\1\24\2\0\1\16\1\15\1\20"+
+ "\1\22\10\0\1\14\12\0\1\21\1\23\1\17\1\0\1\25\1\0"+
+ "\1\24\2\0\1\16\1\15\1\20\1\22\10\0\1\14\102\0\1\4"+
+ "\3\0\1\5\17\0\1\3\16\0\1\1\20\0\1\3\16\0\1\1"+
+ "\1\2\170\0\1\2\ufe87\0";
+
+ /**
+ * Translates characters to character classes
+ */
+ final private static char [] yycmap = yy_unpack_cmap(yycmap_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",
+ "Internal error: unknown state",
+ "Error: could not match input",
+ "Error: pushback value was too large"
+ };
+
+ /** 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 boolean hasMore = true;
+ private final static int MAX_TO_SCAN = 1000;
+ StringBuffer string = new StringBuffer();
+ // state stack for easier state handling
+ private IntStack fStateStack = new IntStack();
+ private String valueText = null;
+
+
+ public XMLHeadTokenizer() {
+ super();
+ }
+
+ public void reset (Reader in) {
+ /* 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;
+
+ /**
+ * the number of characters from the last newline up to the start
+ * of the matched text
+ */
+ yycolumn = 0;
+
+ /**
+ * yy_atBOL == true <=> the scanner is currently at the beginning
+ * of a line
+ */
+ yy_atBOL = false;
+
+ /* 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;
+
+
+ fStateStack.clear();
+
+ hasMore = true;
+
+ // its a little wasteful to "throw away" first char array generated
+ // by class init (via auto generated code), but we really do want
+ // a small buffer for our head parsers.
+ if (yy_buffer.length != MAX_TO_SCAN) {
+ yy_buffer = new char[MAX_TO_SCAN];
+ }
+
+
+ }
+
+
+ public final HeadParserToken getNextToken() throws IOException {
+ String context = null;
+ context = primGetNextToken();
+ HeadParserToken result = null;
+ if (valueText != null) {
+ result = createToken(context, yychar, valueText);
+ valueText = null;
+ } else {
+ result = createToken(context, yychar, yytext());
+ }
+ return result;
+ }
+
+ public final boolean hasMoreTokens() {
+ return hasMore && yychar < MAX_TO_SCAN;
+ }
+ private void pushCurrentState() {
+ fStateStack.push(yystate());
+
+ }
+
+ private void popState() {
+ yybegin(fStateStack.pop());
+ }
+
+ private HeadParserToken createToken(String context, int start, String text) {
+ return new HeadParserToken(context, start, text);
+ }
+
+
+
+ /**
+ * 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 XMLHeadTokenizer(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 XMLHeadTokenizer(java.io.InputStream in) {
+ this(new java.io.InputStreamReader(in));
+ }
+
+ /**
+ * 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 < 128) {
+ 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.
+ *
+ * @param errorCode the code of the errormessage to display
+ */
+ private void yy_ScanError(int errorCode) {
+ try {
+ System.out.println(YY_ERROR_MSG[errorCode]);
+ }
+ catch (ArrayIndexOutOfBoundsException e) {
+ System.out.println(YY_ERROR_MSG[YY_UNKNOWN_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()!
+ */
+ private void yypushback(int number) {
+ if ( number > yylength() )
+ yy_ScanError(YY_PUSHBACK_2BIG);
+
+ yy_markedPos -= number;
+ }
+
+
+ /**
+ * 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;
+ hasMore=false;
+
+ }
+ }
+
+
+ /**
+ * 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;
+
+
+ while (true) {
+
+ yychar+= yylength();
+
+ yy_atBOL = yy_markedPos <= 0 || yy_buffer[yy_markedPos-1] == '\n';
+ if (!yy_atBOL && yy_buffer[yy_markedPos-1] == '\r') {
+ yy_atBOL = yy_advance() != '\n';
+ if (!yy_atEOF) yy_currentPos--;
+ }
+
+ yy_action = -1;
+
+ yy_currentPos = yy_startRead = yy_markedPos;
+
+ if (yy_atBOL)
+ yy_state = YY_LEXSTATE[yy_lexical_state+1];
+ else
+ yy_state = YY_LEXSTATE[yy_lexical_state];
+
+
+ yy_forAction: {
+ while (true) {
+
+ yy_input = yy_advance();
+
+ if ( yy_input == YYEOF ) break yy_forAction;
+
+ yy_input = yycmap[yy_input];
+
+ boolean yy_isFinal = false;
+ boolean yy_noLookAhead = false;
+
+ yy_forNext: { switch (yy_state) {
+ case 0:
+ switch (yy_input) {
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 7; break yy_forNext;
+ }
+
+ case 1:
+ switch (yy_input) {
+ case 1: yy_isFinal = true; yy_state = 8; break yy_forNext;
+ case 2: yy_isFinal = true; yy_state = 9; break yy_forNext;
+ case 3: yy_isFinal = true; yy_state = 10; break yy_forNext;
+ case 6:
+ case 7:
+ case 9: yy_isFinal = true; yy_state = 11; break yy_forNext;
+ case 10: yy_isFinal = true; yy_state = 12; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 7; break yy_forNext;
+ }
+
+ case 2:
+ switch (yy_input) {
+ case 11: yy_isFinal = true; yy_state = 13; break yy_forNext;
+ case 15: yy_isFinal = true; yy_state = 14; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 7; break yy_forNext;
+ }
+
+ case 3:
+ switch (yy_input) {
+ case 6:
+ case 9: yy_isFinal = true; yy_state = 16; break yy_forNext;
+ case 7: yy_isFinal = true; yy_state = 17; break yy_forNext;
+ case 23: yy_isFinal = true; yy_noLookAhead = true; yy_state = 18; break yy_forNext;
+ case 24: yy_isFinal = true; yy_noLookAhead = true; yy_state = 19; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 15; break yy_forNext;
+ }
+
+ case 4:
+ switch (yy_input) {
+ case 7:
+ case 9: yy_isFinal = true; yy_noLookAhead = true; yy_state = 21; break yy_forNext;
+ case 11: yy_isFinal = true; yy_state = 22; break yy_forNext;
+ case 23: yy_isFinal = true; yy_noLookAhead = true; yy_state = 23; break yy_forNext;
+ case 24: yy_isFinal = true; yy_state = 24; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 20; break yy_forNext;
+ }
+
+ case 5:
+ switch (yy_input) {
+ case 7:
+ case 9: yy_isFinal = true; yy_noLookAhead = true; yy_state = 21; break yy_forNext;
+ case 24: yy_isFinal = true; yy_state = 25; break yy_forNext;
+ case 25: yy_isFinal = true; yy_state = 26; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 20; break yy_forNext;
+ }
+
+ case 6:
+ switch (yy_input) {
+ case 11: yy_isFinal = true; yy_state = 26; break yy_forNext;
+ case 6:
+ case 7:
+ case 9: yy_isFinal = true; yy_noLookAhead = true; yy_state = 27; break yy_forNext;
+ case 23: yy_isFinal = true; yy_noLookAhead = true; yy_state = 28; break yy_forNext;
+ case 24: yy_isFinal = true; yy_state = 29; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 20; break yy_forNext;
+ }
+
+ case 8:
+ switch (yy_input) {
+ case 2: yy_isFinal = true; yy_noLookAhead = true; yy_state = 30; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 9:
+ switch (yy_input) {
+ case 1: yy_isFinal = true; yy_noLookAhead = true; yy_state = 31; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 10:
+ switch (yy_input) {
+ case 4: yy_state = 32; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 11:
+ switch (yy_input) {
+ case 6:
+ case 7:
+ case 9: yy_state = 33; break yy_forNext;
+ case 10: yy_state = 34; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 12:
+ switch (yy_input) {
+ case 11: yy_state = 35; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 13:
+ switch (yy_input) {
+ case 22: yy_isFinal = true; yy_noLookAhead = true; yy_state = 36; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 14:
+ switch (yy_input) {
+ case 16: yy_state = 37; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 16:
+ switch (yy_input) {
+ case 6:
+ case 9: yy_isFinal = true; yy_state = 16; break yy_forNext;
+ case 7: yy_state = 38; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 15; break yy_forNext;
+ }
+
+ case 17:
+ switch (yy_input) {
+ case 6:
+ case 9: yy_isFinal = true; yy_state = 16; break yy_forNext;
+ case 7: yy_state = 38; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 15; break yy_forNext;
+ }
+
+ case 22:
+ switch (yy_input) {
+ case 22: yy_isFinal = true; yy_noLookAhead = true; yy_state = 39; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 24:
+ switch (yy_input) {
+ case 10: yy_state = 40; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 25:
+ switch (yy_input) {
+ case 10: yy_state = 40; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 26:
+ switch (yy_input) {
+ case 22: yy_isFinal = true; yy_noLookAhead = true; yy_state = 41; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 29:
+ switch (yy_input) {
+ case 10: yy_state = 40; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 32:
+ switch (yy_input) {
+ case 5: yy_isFinal = true; yy_noLookAhead = true; yy_state = 42; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 33:
+ switch (yy_input) {
+ case 6:
+ case 7:
+ case 9: yy_state = 33; break yy_forNext;
+ case 10: yy_state = 34; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 34:
+ switch (yy_input) {
+ case 11: yy_state = 35; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 35:
+ switch (yy_input) {
+ case 12: yy_state = 43; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 37:
+ switch (yy_input) {
+ case 17: yy_state = 44; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 38:
+ switch (yy_input) {
+ case 6:
+ case 9: yy_isFinal = true; yy_state = 16; break yy_forNext;
+ case 7: yy_state = 38; break yy_forNext;
+ default: yy_isFinal = true; yy_noLookAhead = true; yy_state = 15; break yy_forNext;
+ }
+
+ case 40:
+ switch (yy_input) {
+ case 24: yy_isFinal = true; yy_noLookAhead = true; yy_state = 21; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 43:
+ switch (yy_input) {
+ case 13: yy_state = 45; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 44:
+ switch (yy_input) {
+ case 18: yy_state = 46; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 45:
+ switch (yy_input) {
+ case 14: yy_state = 47; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 46:
+ switch (yy_input) {
+ case 19: yy_state = 48; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 47:
+ switch (yy_input) {
+ case 6:
+ case 7:
+ case 9: yy_isFinal = true; yy_state = 49; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 48:
+ switch (yy_input) {
+ case 20: yy_state = 50; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 49:
+ switch (yy_input) {
+ case 6:
+ case 7:
+ case 9: yy_isFinal = true; yy_state = 49; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 50:
+ switch (yy_input) {
+ case 16: yy_state = 51; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 51:
+ switch (yy_input) {
+ case 21: yy_state = 52; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 52:
+ switch (yy_input) {
+ case 6:
+ case 7:
+ case 9: yy_state = 52; break yy_forNext;
+ case 8: yy_isFinal = true; yy_state = 53; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ case 53:
+ switch (yy_input) {
+ case 6:
+ case 7:
+ case 9: yy_isFinal = true; yy_state = 53; break yy_forNext;
+ default: break yy_forAction;
+ }
+
+ default:
+ yy_ScanError(YY_ILLEGAL_STATE);
+ break;
+ } }
+
+ if ( yy_isFinal ) {
+ yy_action = yy_state;
+ yy_markedPos = yy_currentPos;
+ if ( yy_noLookAhead ) break yy_forAction;
+ }
+
+ }
+ }
+
+
+ switch (yy_action) {
+
+ case 25:
+ { popState(); valueText = string.toString(); return EncodingParserConstants.StringValue; }
+ case 55: break;
+ case 21:
+ { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue; }
+ case 56: break;
+ case 15:
+ case 16:
+ { yypushback(1); yybegin(UnDelimitedString); string.setLength(0); }
+ case 57: break;
+ case 28:
+ case 29:
+ { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTermintatedUnDelimitedStringValue; }
+ case 58: break;
+ case 39:
+ { yypushback(2); popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue; }
+ case 59: break;
+ case 41:
+ { yypushback(2);popState(); valueText = string.toString(); return EncodingParserConstants.InvalidTerminatedStringValue; }
+ case 60: break;
+ case 7:
+ case 8:
+ case 9:
+ case 10:
+ case 11:
+ case 12:
+ case 13:
+ case 14:
+ case 17:
+ { if (yychar > MAX_TO_SCAN) {hasMore=false; return EncodingParserConstants.MAX_CHARS_REACHED;} }
+ case 61: break;
+ case 30:
+ { if (yychar == 0 ) {hasMore = false; return EncodingParserConstants.UTF16BE;} }
+ case 62: break;
+ case 31:
+ { if (yychar == 0 ) {hasMore = false; return EncodingParserConstants.UTF16LE;} }
+ case 63: break;
+ case 42:
+ { if (yychar == 0 ) {hasMore = false; return EncodingParserConstants.UTF83ByteBOM;} }
+ case 64: break;
+ case 49:
+ { if (yychar == 0 ) {yybegin(ST_XMLDecl); return XMLHeadTokenizerConstants.XMLDeclStart;} }
+ case 65: break;
+ case 36:
+ { yybegin(YYINITIAL); hasMore = false; return XMLHeadTokenizerConstants.XMLDeclEnd; }
+ case 66: break;
+ case 53:
+ { pushCurrentState(); yybegin(QuotedAttributeValue); return XMLHeadTokenizerConstants.XMLDelEncoding; }
+ case 67: break;
+ case 23:
+ { popState(); valueText = string.toString(); return EncodingParserConstants.StringValue; }
+ case 68: break;
+ case 20:
+ case 22:
+ case 24:
+ case 26:
+ { string.append( yytext() ); }
+ case 69: break;
+ case 19:
+ { yybegin(SQ_STRING); string.setLength(0); }
+ case 70: break;
+ case 18:
+ { yybegin(DQ_STRING); string.setLength(0); }
+ case 71: break;
+ case 27:
+ { yypushback(1);popState(); valueText = string.toString(); return EncodingParserConstants.UnDelimitedStringValue; }
+ case 72: break;
+ default:
+ if (yy_input == YYEOF && yy_startRead == yy_currentPos) {
+ yy_atEOF = true;
+ yy_do_eof();
+ { hasMore = false; return EncodingParserConstants.EOF; }
+ }
+ else {
+ yy_ScanError(YY_NO_MATCH);
+ }
+ }
+ }
+ }
+
+ /**
+ * Runs the scanner on input files.
+ *
+ * This main method is the debugging routine for the scanner.
+ * It prints each returned token to System.out until the end of
+ * file is reached, or an error occured.
+ *
+ * @param argv the command line, contains the filenames to run
+ * the scanner on.
+ */
+ public static void main(String argv[]) {
+ for (int i = 0; i < argv.length; i++) {
+ XMLHeadTokenizer scanner = null;
+ try {
+ scanner = new XMLHeadTokenizer( new java.io.FileReader(argv[i]) );
+ }
+ catch (java.io.FileNotFoundException e) {
+ System.out.println("File not found : \""+argv[i]+"\"");
+ System.exit(1);
+ }
+ catch (java.io.IOException e) {
+ System.out.println("Error opening file \""+argv[i]+"\"");
+ System.exit(1);
+ }
+ catch (ArrayIndexOutOfBoundsException e) {
+ System.out.println("Usage : java XMLHeadTokenizer <inputfile>");
+ System.exit(1);
+ }
+
+ try {
+ do {
+ System.out.println(scanner.primGetNextToken());
+ } while (!scanner.yy_atEOF);
+
+ }
+ catch (java.io.IOException e) {
+ System.out.println("An I/O error occured while scanning :");
+ System.out.println(e);
+ System.exit(1);
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ System.exit(1);
+ }
+ }
+ }
+
+
+}
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/XMLHeadTokenizer/XMLHeadTokenizerGenJava.cmd b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/XMLHeadTokenizer/XMLHeadTokenizerGenJava.cmd
new file mode 100644
index 0000000..7ec1c7b
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/XMLHeadTokenizer/XMLHeadTokenizerGenJava.cmd
@@ -0,0 +1,28 @@
+@echo on
+
+rem The following variables need to be set/specified for each "development machine"
+set PATH=%PATH%;D:\JDKs\j2sdk1.4.2_03\bin
+set WORKSPACE_LOCATION=D:\builds\Workspaces\WSWBM8
+set JFLEX_LIB_LOCATION=D:\DevTimeSupport\JFlex\lib
+
+rem The following variables differ from project to project, but should be otherwise constant
+set MAIN_NAME=XMLHeadTokenizer
+
+rem set PROJECT_SRC=\org.eclipse.wst.sse.core.xml\src\
+rem set PACKAGE_DIR=com\ibm\sse\model\xml\encoding\
+
+set PROJECT_SRC=\org.eclipse.wst.common.encoding.contentspecific\src\
+set PACKAGE_DIR=com\ibm\encoding\resource\contentspecific\xml\
+
+
+rem Given the above "framework" and the command themselves, these variables should never need to be modified
+set JAVA_FILE=%MAIN_NAME%.java
+set JFLEX_RULES=%MAIN_NAME%.jflex
+set SKELETON_FILE=%MAIN_NAME%.skeleton
+
+IF EXIST %JAVA_FILE% del %JAVA_FILE%
+rem java -Xmx470000000 -cp %JFLEX_LIB_LOCATION%\sed-jflex.jar;. JFlex.Main %JFLEX_RULES% -skel %SKELETON_FILE% 1>jflexout.txt 2>jflexerr.txt
+java -Xmx470000000 -cp %JFLEX_LIB_LOCATION%\sed-jflex.jar;. JFlex.Main %JFLEX_RULES% 1>jflexout.txt 2>jflexerr.txt
+IF EXIST %JAVA_FILE% copy %JAVA_FILE% %WORKSPACE_LOCATION%%PROJECT_SRC%%PACKAGE_DIR%%JAVA_FILE%
+
+pause
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/XMLHeadTokenizer/jflexerr.txt b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/XMLHeadTokenizer/jflexerr.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/XMLHeadTokenizer/jflexerr.txt
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/XMLHeadTokenizer/jflexout.txt b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/XMLHeadTokenizer/jflexout.txt
new file mode 100644
index 0000000..316c32e
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/HeadParsers/XMLHeadTokenizer/jflexout.txt
@@ -0,0 +1,8 @@
+Reading "XMLHeadTokenizer.jflex"
+
+Warning : Macro "SpaceChar" has been declared but never used.
+Constructing NFA : 358 states in NFA
+Converting NFA to DFA :
+...................................................................
+79 states before minimization, 54 states in minimized DFA
+Writing code to "XMLHeadTokenizer.java"
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/JSModel/build.txt b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/JSModel/build.txt
new file mode 100644
index 0000000..789cf67
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/JSModel/build.txt
@@ -0,0 +1,3 @@
+Do not check in classes generated by sablecc. The classes already checked in are enhanced by hand in several ways and rebuilding from the grammar will cause the those hand made changes to be lost. If you need to rebuild from the grammar, you'll need to *merge* the generated classes with the classes we already have checked in. I suggest you build first without any grammar changes so that you can see what was generated before we made our changes. This will allow you to do a three way merge.
+
+I've included the sablecc build that I used here.
\ No newline at end of file
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/JSModel/ecmalexeronly.sablegrammar b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/JSModel/ecmalexeronly.sablegrammar
new file mode 100644
index 0000000..bf0b685
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/JSModel/ecmalexeronly.sablegrammar
@@ -0,0 +1,676 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * This file is part of Scriptonite. *
+ * See the file "Scriptonite-LICENSE" for Copyright information *
+ * and the terms and conditions for copying, distribution and *
+ * modification of Scriptonite. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/**
+ * Throughout this file reference is made to [ECMA-262]. This is the Standard
+ * ECMA-262, ECMAScript Language Specification, 3rd Edition dated December 99.
+ * A Portable Document Format (PDF) version is included in the Scriptonite
+ * distribution (in scriptonite/docs/).
+ *
+ * [ECMA-262] refers to the UNICODE character chart. This implementation uses
+ * the UNICODE 3.0 Character Chart, available from www.unicode.org at
+ * <ftp://ftp.unicode.org/Public/UNIDATA/UnicodeData-Latest.txt>.
+ */
+Package com.ibm.sed.jsparser;
+
+Helpers
+ /**
+ * 6. Source Text. [ECMA-262] p. 10.
+ */
+ source_character = [0x0000..0xFFFF];
+
+ /**
+ * 7.2. White Space. [ECMA-262] pp. 11-12.
+ */
+ tab = 0x0009;
+ vt = 0x000B;
+ ff = 0x000C;
+ sp = 0x0020;
+ nbsp = 0x00A0;
+ usp = 0x1680 // OGHAM SPACE MARK
+ | 0x2000 // EN QUAD
+ | 0x2001 // EM QUAD
+ | 0x2002 // EN SPACE
+ | 0x2003 // EM SPACE
+ | 0x2004 // THREE-PER-EM SPACE
+ | 0x2005 // FOUR-PER-EM SPACE
+ | 0x2006 // SIX-PER-EM SPACE
+ | 0x2007 // FIGURE SPACE
+ | 0x2008 // PUNCTUATION SPACE
+ | 0x2009 // THIN SPACE
+ | 0x200A // HAIR SPACE
+ | 0x200B // ZERO WIDTH SPACE
+ | 0x202F // NARROW NO-BREAK SPACE
+ | 0x3000 // IDEOGRAPHIC SPACE
+ ;
+
+ simple_white_space = tab | vt | ff | sp | nbsp | usp;
+
+ /**
+ * 7.3. Line Terminators. [ECMA-262] p. 12.
+ */
+ lf = 0x000A; // Line Feed
+ cr = 0x000D; // Carriage Return
+ ls = 0x2028; // Line separator
+ ps = 0x2029; // Paragraph separator
+
+ line_terminator = [lf + [cr + [ls + ps]]];
+
+ non_terminator = [source_character - line_terminator];
+
+ /**
+ * 7.2. Comments. [ECMA-262] pp. 12-13.
+ */
+/**
+redone below by jlc
+ multi_line_comment =
+ '/*' '*'* ([source_character - ['/' + '*']] [source_character - '*']* '*'*)* '*' '/';
+
+ multi_line_comment_no_lt =
+ '/*' '*'* ([non_terminator - ['/' + '*']] [non_terminator - '*']* '*'*)* '*' '/';
+*/
+ multi_line_comment =
+ '/*' '*'* ([source_character - ['/' + '*']] [source_character - '*']* '*'*)* '*' '/'
+ | '/**' '/'
+ ;
+
+ multi_line_comment_no_lt =
+ '/*' '*'* ([non_terminator - ['/' + '*']] [non_terminator - '*']* '*'*)* '*/'
+ | '/**' '/'
+ ;
+
+ multi_line_comment_unterminated =
+ '/*' '*'* ([source_character - ['/' + '*']] [source_character - '*']* '*'*)*
+ ;
+
+ single_line_comment = '//' non_terminator*;
+
+ comment =
+ multi_line_comment_no_lt
+ | multi_line_comment
+ | single_line_comment
+ ;
+
+ /**
+ * UnicodeLetter. [ECMA-262] p. 15.
+ * any character in the Unicode categories "Uppercase letter (Lu)",
+ * "Lowercase letter (Ll)", "Titlecase letter (Lt)", "Modifier letter
+ * (Lm)", "Other letter (Lo)", or "Letter number (Nl)".
+ */
+ unicode_letter =
+ [0x0041..0x005A] | [0x0061..0x007A] | 0x00AA | 0x00B5
+ | 0x00BA | [0x00C0..0x00D6] | [0x00D8..0x00F6] | [0x00F8..0x021F]
+ | [0x0222..0x0233] | [0x0250..0x02AD] | [0x02B0..0x02B8] | [0x02BB..0x02C1]
+ | [0x02D0..0x02D1] | [0x02E0..0x02E4] | 0x02EE | 0x037A
+ | 0x0386 | [0x0388..0x038A] | 0x038C | [0x038E..0x03A1]
+ | [0x03A3..0x03CE] | [0x03D0..0x03D7] | [0x03DA..0x03F3] | [0x0400..0x0481]
+ | [0x048C..0x04C4] | [0x04C7..0x04C8] | [0x04CB..0x04CC] | [0x04D0..0x04F5]
+ | [0x04F8..0x04F9] | [0x0531..0x0556] | 0x0559 | [0x0561..0x0587]
+ | [0x05D0..0x05EA] | [0x05F0..0x05F2] | [0x0621..0x063A] | [0x0640..0x064A]
+ | [0x0671..0x06D3] | 0x06D5 | [0x06E5..0x06E6] | [0x06FA..0x06FC]
+ | 0x0710 | [0x0712..0x072C] | [0x0780..0x07A5] | [0x0905..0x0939]
+ | 0x093D | 0x0950 | [0x0958..0x0961] | [0x0985..0x098C]
+ | [0x098F..0x0990] | [0x0993..0x09A8] | [0x09AA..0x09B0] | 0x09B2
+ | [0x09B6..0x09B9] | [0x09DC..0x09DD] | [0x09DF..0x09E1] | [0x09F0..0x09F1]
+ | [0x0A05..0x0A0A] | [0x0A0F..0x0A10] | [0x0A13..0x0A28] | [0x0A2A..0x0A30]
+ | [0x0A32..0x0A33] | [0x0A35..0x0A36] | [0x0A38..0x0A39] | [0x0A59..0x0A5C]
+ | 0x0A5E | [0x0A72..0x0A74] | [0x0A85..0x0A8B] | 0x0A8D
+ | [0x0A8F..0x0A91] | [0x0A93..0x0AA8] | [0x0AAA..0x0AB0] | [0x0AB2..0x0AB3]
+ | [0x0AB5..0x0AB9] | 0x0ABD | 0x0AD0 | 0x0AE0
+ | [0x0B05..0x0B0C] | [0x0B0F..0x0B10] | [0x0B13..0x0B28] | [0x0B2A..0x0B30]
+ | [0x0B32..0x0B33] | [0x0B36..0x0B39] | 0x0B3D | [0x0B5C..0x0B5D]
+ | [0x0B5F..0x0B61] | [0x0B85..0x0B8A] | [0x0B8E..0x0B90] | [0x0B92..0x0B95]
+ | [0x0B99..0x0B9A] | 0x0B9C | [0x0B9E..0x0B9F] | [0x0BA3..0x0BA4]
+ | [0x0BA8..0x0BAA] | [0x0BAE..0x0BB5] | [0x0BB7..0x0BB9] | [0x0C05..0x0C0C]
+ | [0x0C0E..0x0C10] | [0x0C12..0x0C28] | [0x0C2A..0x0C33] | [0x0C35..0x0C39]
+ | [0x0C60..0x0C61] | [0x0C85..0x0C8C] | [0x0C8E..0x0C90] | [0x0C92..0x0CA8]
+ | [0x0CAA..0x0CB3] | [0x0CB5..0x0CB9] | 0x0CDE | [0x0CE0..0x0CE1]
+ | [0x0D05..0x0D0C] | [0x0D0E..0x0D10] | [0x0D12..0x0D28] | [0x0D2A..0x0D39]
+ | [0x0D60..0x0D61] | [0x0D85..0x0D96] | [0x0D9A..0x0DB1] | [0x0DB3..0x0DBB]
+ | 0x0DBD | [0x0DC0..0x0DC6] | [0x0E01..0x0E30] | [0x0E32..0x0E33]
+ | [0x0E40..0x0E46] | [0x0E81..0x0E82] | 0x0E84 | [0x0E87..0x0E88]
+ | 0x0E8A | 0x0E8D | [0x0E94..0x0E97] | [0x0E99..0x0E9F]
+ | [0x0EA1..0x0EA3] | 0x0EA5 | 0x0EA7 | [0x0EAA..0x0EAB]
+ | [0x0EAD..0x0EB0] | [0x0EB2..0x0EB3] | [0x0EBD..0x0EC4] | 0x0EC6
+ | [0x0EDC..0x0EDD] | 0x0F00 | [0x0F40..0x0F6A] | [0x0F88..0x0F8B]
+ | [0x1000..0x1021] | [0x1023..0x1027] | [0x1029..0x102A] | [0x1050..0x1055]
+ | [0x10A0..0x10C5] | [0x10D0..0x10F6] | [0x1100..0x1159] | [0x115F..0x11A2]
+ | [0x11A8..0x11F9] | [0x1200..0x1206] | [0x1208..0x1246] | 0x1248
+ | [0x124A..0x124D] | [0x1250..0x1256] | 0x1258 | [0x125A..0x125D]
+ | [0x1260..0x1286] | 0x1288 | [0x128A..0x128D] | [0x1290..0x12AE]
+ | 0x12B0 | [0x12B2..0x12B5] | [0x12B8..0x12BE] | 0x12C0
+ | [0x12C2..0x12C5] | [0x12C8..0x12CE] | [0x12D0..0x12D6] | [0x12D8..0x12EE]
+ | [0x12F0..0x130E] | 0x1310 | [0x1312..0x1315] | [0x1318..0x131E]
+ | [0x1320..0x1346] | [0x1348..0x135A] | [0x13A0..0x13B0] | [0x13B1..0x13F4]
+ | [0x1401..0x1676] | [0x1681..0x169A] | [0x16A0..0x16EA] | [0x1780..0x17B3]
+ | [0x1820..0x1877] | [0x1880..0x18A8] | [0x1E00..0x1E9B] | [0x1EA0..0x1EE0]
+ | [0x1EE1..0x1EF9] | [0x1F00..0x1F15] | [0x1F18..0x1F1D] | [0x1F20..0x1F39]
+ | [0x1F3A..0x1F45] | [0x1F48..0x1F4D] | [0x1F50..0x1F57] | 0x1F59
+ | 0x1F5B | 0x1F5D | [0x1F5F..0x1F7D] | [0x1F80..0x1FB4]
+ | [0x1FB6..0x1FBC] | 0x1FBE | [0x1FC2..0x1FC4] | [0x1FC6..0x1FCC]
+ | [0x1FD0..0x1FD3] | [0x1FD6..0x1FDB] | [0x1FE0..0x1FEC] | [0x1FF2..0x1FF4]
+ | [0x1FF6..0x1FFC] | 0x207F | 0x2102 | 0x2107
+ | [0x210A..0x2113] | 0x2115 | [0x2119..0x211D] | 0x2124
+ | 0x2126 | 0x2128 | [0x212A..0x212D] | [0x212F..0x2131]
+ | [0x2133..0x2139] | [0x2160..0x2183] | [0x3005..0x3007] | [0x3021..0x3029]
+ | [0x3031..0x3035] | [0x3038..0x303A] | [0x3041..0x3094] | [0x309D..0x309E]
+ | [0x30A1..0x30FA] | [0x30FC..0x30FE] | [0x3105..0x312C] | [0x3131..0x318E]
+ | [0x31A0..0x31B7] | 0x3400 | 0x4DB5 | 0x4E00
+ | 0x9FA5 | [0xA000..0xA48C] | 0xAC00 | 0xD7A3
+ | [0xF900..0xFA2D] | [0xFB00..0xFB06] | [0xFB13..0xFB17] | 0xFB1D
+ | [0xFB1F..0xFB28] | [0xFB2A..0xFB36] | [0xFB38..0xFB3C] | 0xFB3E
+ | [0xFB40..0xFB41] | [0xFB43..0xFB44] | [0xFB46..0xFBB1] | [0xFBD3..0xFD3D]
+ | [0xFD50..0xFD8F] | [0xFD92..0xFDC7] | [0xFDF0..0xFDFB] | [0xFE70..0xFE72]
+ | 0xFE74 | [0xFE76..0xFEFC] | [0xFF21..0xFF3A] | [0xFF41..0xFF5A]
+ | [0xFF66..0xFFBE] | [0xFFC2..0xFFC7] | [0xFFCA..0xFFCF] | [0xFFD2..0xFFD7]
+ | [0xFFDA..0xFFDC]
+ ;
+
+ /**
+ * UnicodeCombiningMark. [ECMA-262] p. 15.
+ * any character in the Unicode categories "Non-spacing mark (Mn)" or
+ * "Combining spacing mark (Mc)".
+ */
+ unicode_combining_mark =
+ [0x0300..0x034E] | [0x0360..0x0362] | [0x0483..0x0486] | [0x0591..0x05A1]
+ | [0x05A3..0x05B9] | [0x05BB..0x05BD] | 0x05BF | [0x05C1..0x05C2]
+ | 0x05C4 | [0x064B..0x0655] | 0x0670 | [0x06D6..0x06DC]
+ | [0x06DF..0x06E4] | [0x06E7..0x06E8] | [0x06EA..0x06ED] | 0x0711
+ | [0x0730..0x074A] | [0x07A6..0x07B0] | [0x0901..0x0903] | 0x093C
+ | [0x093E..0x094D] | [0x0951..0x0954] | [0x0962..0x0963] | [0x0981..0x0983]
+ | [0x09BC..0x09C4] | [0x09C7..0x09C8] | [0x09CB..0x09CD] | 0x09D7
+ | [0x09E2..0x09E3] | 0x0A02 | 0x0A3C | [0x0A3E..0x0A42]
+ | [0x0A47..0x0A48] | [0x0A4B..0x0A4D] | [0x0A70..0x0A71] | [0x0A81..0x0A83]
+ | 0x0ABC | [0x0ABE..0x0AC5] | [0x0AC7..0x0AC9] | [0x0ACB..0x0ACD]
+ | [0x0B01..0x0B03] | 0x0B3C | [0x0B3E..0x0B43] | [0x0B47..0x0B48]
+ | [0x0B4B..0x0B4D] | [0x0B56..0x0B57] | [0x0B82..0x0B83] | [0x0BBE..0x0BC2]
+ | [0x0BC6..0x0BC8] | [0x0BCA..0x0BCD] | 0x0BD7 | [0x0C01..0x0C03]
+ | [0x0C3E..0x0C44] | [0x0C46..0x0C48] | [0x0C4A..0x0C4D] | [0x0C55..0x0C56]
+ | [0x0C82..0x0C83] | [0x0CBE..0x0CC4] | [0x0CC6..0x0CC8] | [0x0CCA..0x0CCD]
+ | [0x0CD5..0x0CD6] | [0x0D02..0x0D03] | [0x0D3E..0x0D43] | [0x0D46..0x0D48]
+ | [0x0D4A..0x0D4D] | 0x0D57 | [0x0D82..0x0D83] | 0x0DCA
+ | [0x0DCF..0x0DD4] | 0x0DD6 | [0x0DD8..0x0DDF] | [0x0DF2..0x0DF3]
+ | 0x0E31 | [0x0E34..0x0E3A] | [0x0E47..0x0E4E] | 0x0EB1
+ | [0x0EB4..0x0EB9] | [0x0EBB..0x0EBC] | [0x0EC8..0x0ECD] | [0x0F18..0x0F19]
+ | 0x0F35 | 0x0F37 | 0x0F39 | [0x0F3E..0x0F3F]
+ | [0x0F71..0x0F84] | [0x0F86..0x0F87] | [0x0F90..0x0F97] | [0x0F99..0x0FBC]
+ | 0x0FC6 | [0x102C..0x1032] | [0x1036..0x1039] | [0x1056..0x1059]
+ | [0x17B4..0x17D3] | 0x18A9 | [0x20D0..0x20DC] | 0x20E1
+ | [0x302A..0x302F] | [0x3099..0x309A] | 0xFB1E | [0xFE20..0xFE23]
+ ;
+
+ /**
+ * UnicodeDigit. [ECMA-262] p. 15.
+ * any character in the Unicode category "Decimal number (Nd)".
+ */
+ unicode_digit =
+ [0x0030..0x0039] | [0x0660..0x0669] | [0x06F0..0x06F9] | [0x0966..0x096F]
+ | [0x09E6..0x09EF] | [0x0A66..0x0A6F] | [0x0AE6..0x0AEF] | [0x0B66..0x0B6F]
+ | [0x0BE7..0x0BEF] | [0x0C66..0x0C6F] | [0x0CE6..0x0CEF] | [0x0D66..0x0D6F]
+ | [0x0E50..0x0E59] | [0x0ED0..0x0ED9] | [0x0F20..0x0F29] | [0x1040..0x1049]
+ | [0x1369..0x1371] | [0x17E0..0x17E9] | [0x1810..0x1819] | [0xFF10..0xFF19]
+ ;
+
+ /**
+ * UnicodeConnectorPunctuation. [ECMA-262] p. 15.
+ * any character in the Unicode category "Connector punctuation (Pc)"
+ */
+ unicode_connector_punctuation =
+ 0x005F | [0x203F..0x2040] | 0x30FB | [0xFE33..0xFE34]
+ | [0xFE4D..0xFE4F] | 0xFF3F | 0xFF65
+ ;
+
+ /**
+ * UnicodeEscapeSequence. [ECMA-262] p. 19.
+ */
+ hex_digit = [['0'..'9'] + [['a'..'f'] + ['A'..'F']]];
+
+ unicode_escape_sequence = 'u' hex_digit hex_digit hex_digit hex_digit;
+
+ /**
+ * 7.6. Identifier. [ECMA-262] pp. 14-15.
+ */
+ identifier_start =
+ unicode_letter
+ | '$'
+ | '_'
+ | '\' unicode_escape_sequence
+ ;
+
+ identifier_part =
+ identifier_start
+ | unicode_combining_mark
+ | unicode_digit
+ | unicode_connector_punctuation
+ | '\' unicode_escape_sequence
+ ;
+
+ /**
+ * 7.8.3. Numeric Literals. [ECMA-262] pp. 16-17.
+ */
+ decimal_digit = ['0'..'9'];
+
+ non_zero_digit = ['1'..'9'];
+
+ exponent_part = ('e' | 'E') ('+' | '-')? ['0'..'9']+;
+
+ decimal_integer_literal = '0' | ['1'..'9'] ['0'..'9']*;
+
+ /**
+ * String Literals. [ECMA-262] pp. 18-19.
+ */
+ single_escape_character =
+ [''' + ['"' + ['\' + ['b' + ['f' + ['n' + ['r' + ['t' + 'v']]]]]]]];
+
+ escape_character =
+ [single_escape_character + [decimal_digit + ['x' + 'u']]];
+
+ non_escape_character =
+ [source_character - [escape_character + line_terminator]];
+
+ character_escape_sequence =
+ single_escape_character
+ | non_escape_character
+ ;
+
+ escape_sequence =
+ character_escape_sequence
+ | '0' // TODO: [lookahead not a DecimalDigit]
+ | 'x' hex_digit hex_digit
+ | unicode_escape_sequence
+ ;
+
+ double_string_character =
+ [source_character - ['"' + ['\' + line_terminator]]]
+ | '\' escape_sequence
+ ;
+
+ single_string_character =
+ [source_character - [''' + ['\' + line_terminator]]]
+ | '\' escape_sequence
+ ;
+
+ /**
+ * 7.8.5. Regular Expression Literals. [ECMA-262] pp. 20-21.
+ */
+ regular_expression_char =
+ [non_terminator - ['\' + '/']]
+ | '\' non_terminator
+ ;
+
+ regular_expression_first_char =
+ [non_terminator - ['*' + ['\' + '/']]]
+ | '\' non_terminator
+ ;
+
+ regular_expression_body =
+ regular_expression_first_char regular_expression_char*;
+
+
+// white_space_no_lt = (simple_white_space | single_line_comment | multi_line_comment_no_lt)+;
+// white_space = (simple_white_space | comment | line_terminator)+;
+ white_space = (simple_white_space | line_terminator)+;
+
+
+//States
+// normal,
+// nolt;
+
+
+Tokens
+// blank_no_lt = (simple_white_space | single_line_comment | multi_line_comment_no_lt)+;
+// blank = (simple_white_space | comment | line_terminator)+;
+
+ blank = (simple_white_space | line_terminator)+;
+ commenttok = comment;
+
+/* infinitecomment must appear after commmenttok to insure that actual comments are recognized
+in preferentially.
+*/
+ unterminated_comment = multi_line_comment_unterminated;
+
+ /**
+ * 7.5.2. Keywords. [ECMA-262] p.12-13.
+ *
+ * The tokens "continue", "break", "return" and "throw" should trigger
+ * a state change. In this new state, a line terminator shouldn't be
+ * considered a white space. All other tokens are parsed as usual.
+ *
+ * A custom lexer should change the state back to normal as soon as a
+ * non white space token is matched.
+ */
+ /**
+ * 7.5.3. Future Reserved Words. [ECMA-262] p. 14.
+ */
+/**
+ abstract = 'abstract';
+ enum = 'enum';
+ int = 'int';
+ short = 'short';
+ boolean = 'boolean';
+ export = 'export';
+ interface = 'interface';
+ static = 'static';
+ byte = 'byte';
+ extends = 'extends';
+ long = 'long';
+ super = 'super';
+ char = 'char';
+ final = 'final';
+ native = 'native';
+ synchronized = 'synchronized';
+ clazz = 'class';
+ float = 'float';
+ package = 'package';
+ throws = 'throws';
+ const = 'const';
+ goto = 'goto';
+ private = 'private';
+ transient = 'transient';
+ debugger = 'debugger';
+ implements = 'implements';
+ protected = 'protected';
+ volatile = 'volatile';
+ double = 'double';
+ import = 'import';
+ public = 'public';
+*/
+
+ /**
+ * 7.8.3. Numeric Literals. [ECMA-262] pp. 16-17.
+ */
+ decimal_literal =
+ ('0' | ['1'..'9'] ['0'..'9']*) '.' ['0'..'9']* exponent_part?
+ | '.' ['0'..'9']+ exponent_part?
+ | ('0' | ['1'..'9'] ['0'..'9']*) exponent_part?
+ ;
+
+ hex_integer_literal = ('0x' | '0X') hex_digit+;
+
+ /**
+ * 7.7. Punctuators. [ECMA-262] p. 15.
+ *
+ * Punctuator.
+ */
+
+ punctuator1 =
+ '{' |
+ '}' |
+ '(' |
+ ')' |
+ '[' |
+ ']' |
+ '.' |
+ ';' |
+ ',' |
+ '<' |
+ '>' |
+ '<=' |
+ '>=' |
+ '==' |
+ '!=' |
+ '===' |
+ '!==' |
+ '+' |
+ '-' |
+ '*' |
+ '%' |
+ '++' |
+ '--' |
+ '<<' |
+ '>>' |
+ '>>>' |
+ '&' |
+ '|' |
+ '^' |
+ '!' |
+ '~' |
+ '&&' |
+ '||' |
+ '?' |
+ ':' |
+ '=' |
+ '+=' |
+ '-=' |
+ '*=' |
+ '%=' |
+ '<<=' |
+ '>>=' |
+ '>>>=' |
+ '&=' |
+ '|=' |
+ '^=' |
+ '/=' |
+ '/';
+
+/* Trick to handle the special grammar case where incr and decr shouldn't
+be preceeded by a line terminator.
+
+As blanks are normally ignored, we write a regular expression that will
+contain the preceeding blanks as part of the token. Remember that
+the lexer returns the longest match; a blank followed by ++ or -- is
+longer than a strait blank.
+
+incr_no_lt is listed first so that it gets precedence over incr, when the
+preceeding whitespace does not contain a line terminator.
+
+a custom lexer will break these tokens in two:
+blank and [incr/decr][/_no_lt]
+
+*/
+/*
+ incr_no_lt = white_space_no_lt '++';
+ decr_no_lt = white_space_no_lt '--';
+
+ incr = white_space '++';
+ decr = white_space '--';
+*/
+
+/*
+ lshift = '<<';
+ rsignedshift = '>>';
+ runsignedshift = '>>>';
+ bit_and = '&';
+ bit_or = '|';
+ xor = '^';
+ bang = '!';
+ tilde = '~';
+ sc_and = '&&';
+ sc_or = '||';
+ hook = '?';
+ colon = ':';
+ assign = '=';
+ plusassign = '+=';
+ minusassign = '-=';
+ starassign = '*=';
+ remassign = '%=';
+ lshiftassign = '<<=';
+ rsignedshiftassign = '>>=';
+ runsignedshiftassign = '>>>=';
+ andassign = '&=';
+ orassign = '|=';
+ xorassign = '^=';
+
+ //
+ // DivPunctuator.
+ //
+ slashassign = '/=';
+ slash = '/';
+*/
+
+ /**
+ * 7.8.4. String Literals. [ECMA-262] pp. 18-19.
+ */
+ string_literal =
+ '"' double_string_character* '"'
+ | ''' single_string_character* '''
+ ;
+
+ unterminated_string_literal =
+ '"' double_string_character*
+ | ''' single_string_character*
+ ;
+
+ /**
+ * 7.8.5. Regular Expression Literals. [ECMA-262] pp. 20-21.
+ */
+ regular_expression_literal =
+ '/' regular_expression_body '/' identifier_part*;
+
+ /**
+ * 7.6. Identifier. [ECMA-262] pp. 14-15.
+ */
+ identifier = identifier_start identifier_part*;
+
+ error_char = source_character;
+
+
+Ignored Tokens
+// blank_no_lt,
+ blank;
+
+
+/*
+ // -----------------------------------------------------------------------
+ // for testing the Lexer only.
+ // -----------------------------------------------------------------------
+
+ script = script_token*;
+
+ script_token =
+ {res} reserved_word
+ | {id} identifier
+ | {op} punctuator
+ | {num} numeric_literal
+ | {str} string_literal
+ ;
+
+ reserved_word =
+ {keyword} keyword
+ | {future} future_reserved_word
+ | {null} null
+ | {boolean} boolean_literal
+ ;
+
+ keyword =
+ {break} break
+ | {else} else
+ | {new} new
+ | {var} var
+ | {case} case
+ | {finally} finally
+ | {return} return
+ | {void} void
+ | {catch} catch
+ | {for} for
+ | {switch} switch
+ | {while} while
+ | {continue} continue
+ | {function} function
+ | {this} this
+ | {with} with
+ | {default} default
+ | {if} if
+ | {throw} throw
+ | {delete} delete
+ | {in} in
+ | {try} try
+ | {do} do
+ | {instanceof} instanceof
+ | {typeof} typeof
+ ;
+
+ future_reserved_word =
+ {abstract} abstract
+ | {enum} enum
+ | {int} int
+ | {short} short
+ | {boolean} boolean
+ | {export} export
+ | {interface} interface
+ | {static} static
+ | {byte} byte
+ | {extends} extends
+ | {long} long
+ | {super} super
+ | {char} char
+ | {final} final
+ | {native} native
+ | {synchronized} synchronized
+ | {class} clazz
+ | {float} float
+ | {package} package
+ | {throws} throws
+ | {const} const
+ | {goto} goto
+ | {private} private
+ | {transient} transient
+ | {debugger} debugger
+ | {implements} implements
+ | {protected} protected
+ | {volatile} volatile
+ | {double} double
+ | {import} import
+ | {public} public
+ ;
+
+ punctuator =
+ {lbrace} lbrace
+ | {rbrace} rbrace
+ | {lparen} lparen
+ | {rparen} rparen
+ | {lbracket} lbracket
+ | {rbracket} rbracket
+ | {dot} dot
+ | {semicolon} semicolon
+ | {comma} comma
+ | {lt} lt
+ | {gt} gt
+ | {le} le
+ | {ge} ge
+ | {eq} eq
+ | {ne} ne
+ | {eqq} eqq
+ | {neq} neq
+ | {plus} plus
+ | {minus} minus
+ | {star} star
+ | {rem} rem
+ |
+ {incr1} incr_no_lt
+ | {decr1} decr_no_lt
+ | {incr2} incr
+ | {decr2} decr
+ |
+ {lshift} lshift
+ | {rsshift} rsignedshift
+ | {rushift} runsignedshift
+ | {band} bit_and
+ | {bor} bit_or
+ | {xor} xor
+ | {bang} bang
+ | {bno} tilde
+ | {sand} sc_and
+ | {sor} sc_or
+ | {hook} hook
+ | {colon} colon
+ | {assign} assign
+ | {passign} plusassign
+ | {massign} minusassign
+ | {aasign} starassign
+ | {rassign} remassign
+ | {lsassign} lshiftassign
+ | {rssassign} rsignedshiftassign
+ | {rusassign} runsignedshiftassign
+ | {andassign} andassign
+ | {orassign} orassign
+ | {xorassign} xorassign
+ |
+ {slashassign} slashassign
+ | {slash} slash
+ ;
+*/
\ No newline at end of file
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/JSModel/sablecc-2.16.2.zip b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/JSModel/sablecc-2.16.2.zip
new file mode 100644
index 0000000..ebaa26d
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/JSModel/sablecc-2.16.2.zip
Binary files differ
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/JSModel/sableccgrammars-1.2.1.jar b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/JSModel/sableccgrammars-1.2.1.jar
new file mode 100644
index 0000000..1cd8fa4
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/JSModel/sableccgrammars-1.2.1.jar
Binary files differ
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/CSSTokenizer/devel/CSSTokenizer.java b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/CSSTokenizer/devel/CSSTokenizer.java
new file mode 100644
index 0000000..b30ce69
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/CSSTokenizer/devel/CSSTokenizer.java
@@ -0,0 +1,1948 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004 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
+ * Jens Lukowski/Innoopract - initial renaming/restructuring
+ *
+ *******************************************************************************/
+/* The following code was generated by JFlex 1.2.2 on 04/10/01 22:53 */
+
+/*nlsXXX*/
+package org.eclipse.wst.sse.core.css.internal.parser;
+
+import java.io.CharArrayReader;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.wst.sse.core.css.internal.parser.regions.CSSTextRegionFactory;
+import org.eclipse.wst.sse.core.css.parser.CSSRegionContexts;
+import org.eclipse.wst.sse.core.css.parser.CSSTextToken;
+import org.eclipse.wst.sse.core.text.ITextRegion;
+
+
+/**
+ * This class is a scanner generated by
+ * <a href="http://www.informatik.tu-muenchen.de/~kleing/jflex/">JFlex</a> 1.2.2
+ */
+public class CSSTokenizer implements CSSRegionContexts {
+
+ /** this character denotes the end of file */
+ final public static int YYEOF = -1;
+
+ /** lexical states */
+ final public static int ST_SELECTOR_ATTRIBUTE_NAME = 11;
+ final public static int ST_IMPORT_DELIMITER = 5;
+ final public static int ST_DECLARATION_PRE_VALUE = 17;
+ final public static int ST_SELECTOR = 0;
+ final public static int ST_CHARSET_DELIMITER = 2;
+ final public static int ST_DECLARATION_VALUE = 18;
+ final public static int ST_PAGE_PSEUDO_PAGE = 8;
+ final public static int ST_IMPORT_URI = 3;
+ final public static int ST_SELECTOR_ATTRIBUTE_END = 14;
+ final public static int ST_SELECTOR_ATTRIBUTE_OPERATOR = 12;
+ final public static int ST_DECLARATION = 15;
+ final public static int ST_PAGE_DELIMITER = 9;
+ final public static int ST_SELECTOR_ATTRIBUTE_VALUE = 13;
+ final public static int ST_MEDIA_MEDIUM = 6;
+ final public static int ST_CHARSET_NAME = 1;
+ final public static int ST_IMPORT_MEDIUM = 4;
+ final public static int ST_DECLARATION_SEPARATOR = 16;
+ final public static int ST_FONT_FACE_DELIMITER = 9;
+ final public static int ST_MEDIA_DELIMITER = 7;
+ final public static int ST_SELECTOR_MODIFIER = 10;
+ final public static int YYINITIAL = 0;
+
+ /**
+ * Translates characters to character classes
+ */
+ final private static String yycmap_packed =
+ "\11\0\1\11\1\17\1\0\1\4\1\20\22\0\1\6\1\31\1\10"+
+ "\1\22\1\16\1\72\1\16\1\5\1\26\1\12\1\35\1\14\1\55"+
+ "\1\13\1\15\1\34\12\1\1\62\1\50\1\30\1\67\1\32\1\21"+
+ "\1\36\1\43\1\27\1\40\1\57\1\46\1\64\1\61\1\41\1\51"+
+ "\2\2\1\25\1\52\1\65\1\54\1\53\1\2\1\24\1\44\1\47"+
+ "\1\23\5\2\1\66\1\3\1\71\1\16\1\2\1\16\1\42\1\7"+
+ "\1\37\1\56\1\45\1\63\1\61\1\41\1\51\2\2\1\25\1\52"+
+ "\1\65\1\54\1\53\1\2\1\24\1\44\1\47\1\23\5\2\1\60"+
+ "\1\70\1\33\1\70\1\0\uff80\2";
+
+ /**
+ * 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, 59, 118, 177, 236, 295, 354, 413, 472, 531,
+ 590, 649, 708, 767, 826, 885, 944, 1003, 1062, 1121,
+ 1180, 1239, 1298, 1357, 1416, 1475, 1534, 1121, 1593, 1121,
+ 1652, 1711, 1121, 1770, 1829, 1888, 1121, 1947, 2006, 2065,
+ 2124, 2183, 2242, 1121, 2301, 2360, 2419, 1121, 1121, 2478,
+ 2537, 2596, 1121, 2655, 2714, 1121, 1121, 2773, 2832, 2891,
+ 1121, 2950, 1121, 3009, 3068, 3127, 3186, 3245, 3304, 3363,
+ 3422, 1121, 1121, 3481, 3540, 3599, 3658, 3717, 1121, 3776,
+ 3835, 3894, 3953, 4012, 4071, 1593, 1121, 4130, 1239, 4189,
+ 4248, 1416, 4307, 1475, 4366, 4425, 4484, 4543, 4602, 4661,
+ 4720, 4779, 4838, 4897, 1770, 4956, 1121, 1829, 5015, 5074,
+ 1947, 5133, 1121, 2006, 5192, 5251, 2183, 5310, 5369, 2360,
+ 5428, 5487, 2537, 5546, 5605, 1121, 2714, 2832, 5664, 5723,
+ 3068, 5782, 3127, 5841, 1121, 3186, 5900, 5959, 3363, 6018,
+ 6077, 6136, 6195, 3894, 1121, 3599, 1121, 6254, 3658, 6313,
+ 1121, 3717, 6372, 6431, 6490, 6549, 3953, 6608, 6667, 6726,
+ 4071, 6785, 1121, 4130, 6844, 1121, 6903, 6962, 7021, 7080,
+ 7139, 7198, 7257, 7316, 7375, 7434, 7493, 7552, 1770, 7611,
+ 7670, 1829, 7729, 7788, 1947, 7847, 7906, 2006, 7965, 8024,
+ 8083, 8142, 8201, 8260, 8319, 8378, 3127, 8437, 8496, 3186,
+ 8555, 8614, 8673, 8732, 8791, 3658, 8850, 8909, 3717, 8968,
+ 9027, 9086, 9145, 9204, 9263, 9322, 9381, 1121, 1121, 9440,
+ 9499, 9558, 9617, 9676, 9735, 9794, 9853, 9912, 9971, 10030,
+ 10089, 10148, 10207, 10266, 10325, 10384, 10443, 10502, 10561, 10620,
+ 10679, 10738, 10797, 10856, 10915, 10974, 11033, 11092, 11151, 11210,
+ 11269, 11328, 11387, 11446, 11505, 1121, 11564, 11623, 1121, 11682,
+ 11741, 11800, 11859, 11918, 11977, 12036, 12095, 12154, 12213, 1121,
+ 12272, 12331, 12390, 12449, 12508, 12567, 12626, 12685, 12744, 12803,
+ 12862, 12921, 12980, 13039, 13098, 13157, 13216, 11092, 13275, 13334,
+ 1121, 13393, 13452, 13511, 13570, 13629, 13688, 1121, 13747, 13806,
+ 13865, 13924, 13983, 14042, 14101, 14160, 14219, 12036, 14278, 14337,
+ 14396, 14455, 14514, 14573, 14632, 14691, 14750, 14809, 14868, 14927,
+ 14986, 15045, 15104, 15163, 15222, 15281, 15340, 13157, 15399, 15458,
+ 15517, 15576, 15635, 15694, 15753, 1121, 15812, 15871, 15930, 15989,
+ 16048, 16107, 16166, 16225, 16284, 16343, 16402, 16461, 16520, 16579,
+ 16638, 16697, 16756, 16815, 16874, 16933, 16992, 17051, 17110, 17169,
+ 17228, 17287, 17346, 17405, 17464, 17523, 17582, 17641, 17700, 17759,
+ 17818, 17877, 17936, 17995, 18054, 1121, 18113, 18172, 18231, 18290,
+ 18349, 18408, 18467, 18526, 18585, 12154, 18644, 12213, 18703, 18762,
+ 18821, 18880, 18939, 18998, 19057, 19116, 19175, 19234, 13275, 19293,
+ 13334, 19352, 19411, 19470, 19529, 19588, 19647, 19706, 19765, 19824,
+ 19883, 19942, 1121, 20001, 20060, 20119, 20178, 1121, 20237, 20296,
+ 20355, 1121, 20414, 20473, 20532, 20591, 20650, 20709, 20768, 20827,
+ 20886, 20945
+ };
+
+ /**
+ * The packed transition table of the DFA
+ */
+ final private static String yy_packed =
+ "\2\24\1\25\1\26\1\27\1\24\1\27\1\25\1\24"+
+ "\1\27\1\24\1\30\1\24\1\31\1\24\2\27\1\24"+
+ "\1\32\3\25\1\24\1\25\1\33\2\24\1\34\1\35"+
+ "\1\36\1\37\11\25\1\24\4\25\1\24\2\25\1\24"+
+ "\1\25\1\40\3\25\1\41\10\24\1\27\1\42\1\27"+
+ "\1\24\1\43\1\27\1\24\1\44\3\24\2\27\7\24"+
+ "\1\33\2\24\1\34\1\35\1\24\1\37\40\24\1\27"+
+ "\1\24\1\27\2\24\1\27\1\24\1\44\3\24\2\27"+
+ "\7\24\1\33\2\24\1\34\1\35\1\24\1\37\11\24"+
+ "\1\45\26\24\1\27\1\46\1\27\1\24\1\47\1\27"+
+ "\1\24\1\44\3\24\2\27\2\24\1\50\4\24\1\33"+
+ "\2\24\1\34\1\35\1\24\1\37\11\24\1\45\24\24"+
+ "\1\51\1\52\1\27\1\24\1\27\1\51\1\24\1\27"+
+ "\1\24\1\53\3\24\2\27\2\24\3\51\1\24\1\51"+
+ "\1\33\2\24\1\34\1\35\1\24\1\37\11\51\1\45"+
+ "\4\51\1\24\2\51\1\24\1\51\1\24\3\51\11\24"+
+ "\1\27\1\24\1\27\2\24\1\27\1\24\1\44\3\24"+
+ "\2\27\7\24\1\33\2\24\1\34\1\35\1\24\1\37"+
+ "\11\24\1\45\4\24\1\54\17\24\1\55\1\56\1\27"+
+ "\1\24\1\27\1\55\1\24\1\27\1\24\1\57\3\24"+
+ "\2\27\2\24\3\55\1\24\1\55\1\33\2\24\1\34"+
+ "\1\35\1\24\1\37\11\55\1\24\4\55\1\24\2\55"+
+ "\1\24\1\55\1\24\3\55\11\24\1\27\1\24\1\27"+
+ "\2\24\1\27\1\24\1\44\3\24\2\27\7\24\1\33"+
+ "\2\24\1\34\1\35\1\24\1\37\16\24\1\60\2\24"+
+ "\1\61\14\24\1\62\1\63\1\27\1\24\1\27\1\62"+
+ "\1\24\1\27\1\24\1\64\3\24\2\27\2\24\3\62"+
+ "\1\24\1\62\1\33\2\24\1\34\1\35\1\24\1\37"+
+ "\11\62\1\24\4\62\1\24\2\62\1\65\1\62\1\66"+
+ "\3\62\11\24\1\27\1\24\1\27\2\24\1\27\1\24"+
+ "\1\44\3\24\2\27\7\24\1\33\2\24\1\34\1\35"+
+ "\1\24\1\37\21\24\1\65\16\24\1\67\1\24\1\67"+
+ "\2\24\1\67\1\24\1\44\1\70\1\31\1\24\2\67"+
+ "\1\24\1\32\5\24\1\33\1\24\1\70\1\34\1\35"+
+ "\1\36\1\37\16\24\1\71\2\24\1\65\1\24\1\40"+
+ "\3\24\1\41\6\24\1\72\1\73\1\27\1\24\1\27"+
+ "\1\72\1\24\1\27\1\24\1\74\3\24\2\27\2\24"+
+ "\3\72\1\24\1\72\1\33\2\24\1\34\1\35\1\24"+
+ "\1\37\11\72\1\24\4\72\1\24\2\72\1\24\1\72"+
+ "\1\24\3\72\11\24\1\27\1\24\1\27\2\24\1\27"+
+ "\1\24\1\44\3\24\2\27\7\24\1\33\2\24\1\34"+
+ "\1\35\1\24\1\37\30\24\1\75\1\76\1\77\3\24"+
+ "\1\100\1\101\1\27\1\102\1\27\1\100\1\103\1\27"+
+ "\1\24\1\104\3\24\2\27\2\24\3\100\1\24\1\100"+
+ "\1\33\2\24\1\34\1\35\1\24\1\37\11\100\1\24"+
+ "\4\100\1\24\2\100\1\24\1\100\1\24\3\100\11\24"+
+ "\1\27\1\24\1\27\2\24\1\27\1\24\1\44\3\24"+
+ "\2\27\7\24\1\33\2\24\1\34\1\35\1\24\1\37"+
+ "\32\24\1\77\3\24\1\105\1\106\1\27\1\24\1\27"+
+ "\1\105\1\24\1\27\1\24\1\107\3\24\2\27\2\24"+
+ "\3\105\1\24\1\105\1\33\2\24\1\34\1\35\1\24"+
+ "\1\37\11\105\1\110\4\105\1\24\2\105\1\24\1\105"+
+ "\1\24\3\105\11\24\1\27\1\24\1\27\2\24\1\27"+
+ "\1\24\1\44\3\24\2\27\7\24\1\33\2\24\1\34"+
+ "\1\35\1\24\1\37\11\24\1\110\11\24\1\111\11\24"+
+ "\1\112\1\113\1\114\1\27\1\115\1\27\1\113\1\116"+
+ "\1\27\1\117\1\120\1\121\1\122\1\24\2\27\1\24"+
+ "\1\123\1\124\2\113\1\24\1\113\1\33\1\125\1\24"+
+ "\1\34\1\126\1\24\1\37\11\113\1\110\4\113\1\127"+
+ "\2\113\1\24\1\113\1\24\3\113\6\24\1\112\1\113"+
+ "\1\114\1\130\1\115\1\130\1\113\1\116\1\130\1\117"+
+ "\1\120\1\121\1\122\1\24\2\130\1\24\1\123\1\124"+
+ "\2\113\1\24\1\113\1\33\1\125\1\24\1\34\1\126"+
+ "\1\24\1\37\11\113\1\110\4\113\1\127\2\113\1\24"+
+ "\1\113\1\24\3\113\5\24\74\0\2\25\1\131\3\0"+
+ "\1\25\3\0\1\25\7\0\3\25\1\0\1\25\7\0"+
+ "\11\25\1\0\4\25\1\0\2\25\1\0\1\25\1\0"+
+ "\3\25\6\0\1\132\2\25\1\0\2\25\1\132\1\25"+
+ "\1\0\5\25\2\0\16\25\1\132\2\25\1\132\2\25"+
+ "\1\132\10\25\1\132\4\25\1\132\7\25\4\0\1\27"+
+ "\1\0\1\27\2\0\1\27\5\0\2\27\53\0\2\25"+
+ "\1\131\3\0\1\25\3\0\1\133\7\0\3\25\1\0"+
+ "\1\25\7\0\11\25\1\0\4\25\1\0\2\25\1\0"+
+ "\1\25\1\0\3\25\6\0\2\134\1\135\3\0\1\134"+
+ "\3\0\1\134\7\0\3\134\1\0\1\134\7\0\11\134"+
+ "\1\0\4\134\1\0\2\134\1\0\1\134\1\0\3\134"+
+ "\6\0\2\136\1\137\3\0\1\136\3\0\1\136\7\0"+
+ "\3\136\1\0\1\136\7\0\11\136\1\0\4\136\1\0"+
+ "\2\136\1\0\1\136\1\0\3\136\36\0\1\140\76\0"+
+ "\1\141\74\0\2\142\10\0\1\143\1\144\1\145\7\0"+
+ "\2\146\10\0\1\147\1\150\3\0\1\147\3\0\1\147"+
+ "\7\0\3\147\1\0\1\147\7\0\11\147\1\0\4\147"+
+ "\1\0\2\147\1\0\1\147\1\0\3\147\6\0\2\151"+
+ "\1\152\1\0\1\153\11\151\2\0\52\151\1\0\2\154"+
+ "\1\155\1\0\3\154\1\153\6\154\2\0\52\154\13\0"+
+ "\1\156\60\0\2\157\1\160\1\0\1\161\11\157\2\0"+
+ "\52\157\1\0\2\162\1\163\1\0\3\162\1\161\6\162"+
+ "\2\0\52\162\24\0\1\164\47\0\2\51\1\165\3\0"+
+ "\1\51\3\0\1\51\7\0\3\51\1\0\1\51\7\0"+
+ "\11\51\1\0\4\51\1\0\2\51\1\0\1\51\1\0"+
+ "\3\51\6\0\1\166\2\51\1\0\2\51\1\166\1\51"+
+ "\1\0\5\51\2\0\16\51\1\166\2\51\1\166\2\51"+
+ "\1\166\10\51\1\166\4\51\1\166\7\51\1\0\2\51"+
+ "\1\165\3\0\1\51\3\0\1\167\7\0\3\51\1\0"+
+ "\1\51\7\0\11\51\1\0\4\51\1\0\2\51\1\0"+
+ "\1\51\1\0\3\51\6\0\2\55\1\170\3\0\1\55"+
+ "\3\0\1\55\7\0\3\55\1\0\1\55\7\0\11\55"+
+ "\1\0\4\55\1\0\2\55\1\0\1\55\1\0\3\55"+
+ "\6\0\1\171\2\55\1\0\2\55\1\171\1\55\1\0"+
+ "\5\55\2\0\16\55\1\171\2\55\1\171\2\55\1\171"+
+ "\10\55\1\171\4\55\1\171\7\55\1\0\2\55\1\170"+
+ "\3\0\1\55\3\0\1\172\7\0\3\55\1\0\1\55"+
+ "\7\0\11\55\1\0\4\55\1\0\2\55\1\0\1\55"+
+ "\1\0\3\55\6\0\2\62\1\173\3\0\1\62\3\0"+
+ "\1\62\7\0\3\62\1\0\1\62\7\0\11\62\1\0"+
+ "\4\62\1\0\2\62\1\0\1\62\1\0\3\62\6\0"+
+ "\1\174\2\62\1\0\2\62\1\174\1\62\1\0\5\62"+
+ "\2\0\16\62\1\174\2\62\1\174\2\62\1\174\10\62"+
+ "\1\174\4\62\1\174\7\62\1\0\2\62\1\173\3\0"+
+ "\1\62\3\0\1\175\7\0\3\62\1\0\1\62\7\0"+
+ "\11\62\1\0\4\62\1\0\2\62\1\0\1\62\1\0"+
+ "\3\62\7\0\1\62\1\173\3\0\1\62\3\0\1\62"+
+ "\7\0\3\62\1\0\1\62\7\0\11\62\1\0\4\62"+
+ "\1\0\2\62\1\0\1\62\1\0\3\62\5\0\4\176"+
+ "\1\177\1\176\1\177\2\176\1\177\2\176\1\0\2\176"+
+ "\2\177\11\176\1\0\25\176\1\0\12\176\1\0\2\72"+
+ "\1\200\3\0\1\72\3\0\1\72\7\0\3\72\1\0"+
+ "\1\72\7\0\11\72\1\0\4\72\1\0\2\72\1\0"+
+ "\1\72\1\0\3\72\6\0\1\201\2\72\1\0\2\72"+
+ "\1\201\1\72\1\0\5\72\2\0\16\72\1\201\2\72"+
+ "\1\201\2\72\1\201\10\72\1\201\4\72\1\201\7\72"+
+ "\1\0\2\72\1\200\3\0\1\72\3\0\1\202\7\0"+
+ "\3\72\1\0\1\72\7\0\11\72\1\0\4\72\1\0"+
+ "\2\72\1\0\1\72\1\0\3\72\74\0\1\75\4\0"+
+ "\2\100\1\203\3\0\1\100\3\0\1\100\7\0\3\100"+
+ "\1\0\1\100\7\0\11\100\1\0\4\100\1\0\2\100"+
+ "\1\0\1\100\1\0\3\100\6\0\1\204\2\100\1\0"+
+ "\2\100\1\204\1\100\1\0\5\100\2\0\16\100\1\204"+
+ "\2\100\1\204\2\100\1\204\10\100\1\204\4\100\1\204"+
+ "\7\100\1\0\2\205\1\206\1\0\1\207\11\205\2\0"+
+ "\52\205\1\0\2\210\1\211\1\0\3\210\1\207\6\210"+
+ "\2\0\52\210\1\0\2\100\1\203\3\0\1\100\3\0"+
+ "\1\212\7\0\3\100\1\0\1\100\7\0\11\100\1\0"+
+ "\4\100\1\0\2\100\1\0\1\100\1\0\3\100\6\0"+
+ "\2\105\1\213\3\0\1\105\3\0\1\105\7\0\3\105"+
+ "\1\0\1\105\7\0\11\105\1\0\4\105\1\0\2\105"+
+ "\1\0\1\105\1\0\3\105\6\0\1\214\2\105\1\0"+
+ "\2\105\1\214\1\105\1\0\5\105\2\0\16\105\1\214"+
+ "\2\105\1\214\2\105\1\214\10\105\1\214\4\105\1\214"+
+ "\7\105\1\0\2\105\1\213\3\0\1\105\3\0\1\215"+
+ "\7\0\3\105\1\0\1\105\7\0\11\105\1\0\4\105"+
+ "\1\0\2\105\1\0\1\105\1\0\3\105\6\0\1\112"+
+ "\1\216\1\217\3\0\1\216\3\0\1\216\1\0\1\220"+
+ "\5\0\3\216\1\0\1\216\7\0\11\216\1\0\4\216"+
+ "\1\0\2\216\1\0\1\216\1\0\3\216\4\0\1\221"+
+ "\1\0\2\113\1\222\3\0\1\113\3\0\1\113\7\0"+
+ "\3\113\1\223\1\113\7\0\11\113\1\0\4\113\1\0"+
+ "\2\113\1\0\1\113\1\0\3\113\6\0\1\224\2\113"+
+ "\1\0\2\113\1\224\1\113\1\0\5\113\2\0\16\113"+
+ "\1\224\2\113\1\224\2\113\1\224\10\113\1\224\4\113"+
+ "\1\224\7\113\1\0\2\225\1\226\1\0\1\227\11\225"+
+ "\2\0\52\225\1\0\2\230\1\231\1\0\3\230\1\227"+
+ "\6\230\2\0\52\230\1\0\1\232\1\113\1\222\3\0"+
+ "\1\113\3\0\1\233\1\0\1\220\5\0\3\113\1\223"+
+ "\1\113\7\0\11\113\1\0\4\113\1\0\2\113\1\0"+
+ "\1\113\1\0\3\113\6\0\1\112\13\0\1\220\56\0"+
+ "\1\234\72\0\2\235\1\236\3\0\1\235\3\0\1\235"+
+ "\7\0\3\235\1\0\1\235\7\0\11\235\1\0\4\235"+
+ "\1\0\2\235\1\0\1\235\1\0\3\235\6\0\2\113"+
+ "\1\222\3\0\1\113\3\0\1\113\1\237\6\0\1\113"+
+ "\1\240\1\113\1\223\1\113\7\0\11\113\1\0\4\113"+
+ "\1\0\2\113\1\0\1\113\1\0\3\113\11\0\1\241"+
+ "\1\0\1\241\2\0\1\241\5\0\2\241\30\0\1\242"+
+ "\21\0\4\243\1\244\1\243\1\244\2\243\1\244\5\243"+
+ "\2\244\12\243\1\0\14\243\1\0\22\243\1\0\1\245"+
+ "\1\25\1\131\1\25\1\0\1\25\1\245\1\0\1\25"+
+ "\1\0\1\25\3\0\2\25\2\0\3\25\1\0\1\25"+
+ "\7\0\1\245\2\25\1\245\2\25\1\245\2\25\1\0"+
+ "\4\25\1\0\1\245\1\25\1\0\1\25\1\0\1\245"+
+ "\2\25\6\0\2\25\1\131\3\0\1\25\3\0\1\25"+
+ "\7\0\3\25\1\0\1\25\2\0\1\246\4\0\11\25"+
+ "\1\0\4\25\1\0\2\25\1\0\1\25\1\0\3\25"+
+ "\6\0\1\247\2\134\1\0\2\134\1\247\1\134\1\0"+
+ "\5\134\2\0\16\134\1\247\2\134\1\247\2\134\1\247"+
+ "\10\134\1\247\4\134\1\247\7\134\1\0\1\250\2\136"+
+ "\1\0\2\136\1\250\1\136\1\0\5\136\2\0\16\136"+
+ "\1\250\2\136\1\250\2\136\1\250\10\136\1\250\4\136"+
+ "\1\250\7\136\13\0\1\251\57\0\35\141\1\252\35\141"+
+ "\41\0\1\253\103\0\1\254\65\0\2\255\66\0\2\256"+
+ "\103\0\1\257\17\0\2\147\1\150\3\0\1\147\3\0"+
+ "\1\147\7\0\3\147\1\260\1\147\7\0\11\147\1\0"+
+ "\4\147\1\0\2\147\1\0\1\147\1\0\3\147\6\0"+
+ "\1\261\2\147\1\0\2\147\1\261\1\147\1\0\5\147"+
+ "\2\0\16\147\1\261\2\147\1\261\2\147\1\261\10\147"+
+ "\1\261\4\147\1\261\7\147\1\0\1\262\1\151\1\152"+
+ "\1\151\1\263\1\151\1\262\10\151\1\264\16\151\1\262"+
+ "\2\151\1\262\2\151\1\262\10\151\1\262\4\151\1\262"+
+ "\7\151\1\0\1\265\1\154\1\155\3\154\1\265\1\266"+
+ "\7\154\1\267\16\154\1\265\2\154\1\265\2\154\1\265"+
+ "\10\154\1\265\4\154\1\265\7\154\32\0\1\246\41\0"+
+ "\1\270\1\157\1\160\1\157\1\271\1\157\1\270\10\157"+
+ "\1\272\16\157\1\270\2\157\1\270\2\157\1\270\10\157"+
+ "\1\270\4\157\1\270\7\157\1\0\1\273\1\162\1\163"+
+ "\3\162\1\273\1\274\7\162\1\275\16\162\1\273\2\162"+
+ "\1\273\2\162\1\273\10\162\1\273\4\162\1\273\7\162"+
+ "\25\0\1\276\46\0\1\277\1\51\1\165\1\51\1\0"+
+ "\1\51\1\277\1\0\1\51\1\0\1\51\3\0\2\51"+
+ "\2\0\3\51\1\0\1\51\7\0\1\277\2\51\1\277"+
+ "\2\51\1\277\2\51\1\0\4\51\1\0\1\277\1\51"+
+ "\1\0\1\51\1\0\1\277\2\51\6\0\2\51\1\165"+
+ "\3\0\1\51\3\0\1\51\7\0\3\51\1\0\1\51"+
+ "\2\0\1\246\4\0\11\51\1\0\4\51\1\0\2\51"+
+ "\1\0\1\51\1\0\3\51\6\0\1\300\1\55\1\170"+
+ "\1\55\1\0\1\55\1\300\1\0\1\55\1\0\1\55"+
+ "\3\0\2\55\2\0\3\55\1\0\1\55\7\0\1\300"+
+ "\2\55\1\300\2\55\1\300\2\55\1\0\4\55\1\0"+
+ "\1\300\1\55\1\0\1\55\1\0\1\300\2\55\6\0"+
+ "\2\55\1\170\3\0\1\55\3\0\1\55\7\0\3\55"+
+ "\1\0\1\55\2\0\1\246\4\0\11\55\1\0\4\55"+
+ "\1\0\2\55\1\0\1\55\1\0\3\55\6\0\1\301"+
+ "\1\62\1\173\1\62\1\0\1\62\1\301\1\0\1\62"+
+ "\1\0\1\62\3\0\2\62\2\0\3\62\1\0\1\62"+
+ "\7\0\1\301\2\62\1\301\2\62\1\301\2\62\1\0"+
+ "\4\62\1\0\1\301\1\62\1\0\1\62\1\0\1\301"+
+ "\2\62\6\0\2\62\1\173\3\0\1\62\3\0\1\62"+
+ "\7\0\3\62\1\0\1\62\2\0\1\246\4\0\11\62"+
+ "\1\0\4\62\1\0\2\62\1\0\1\62\1\0\3\62"+
+ "\6\0\1\302\1\72\1\200\1\72\1\0\1\72\1\302"+
+ "\1\0\1\72\1\0\1\72\3\0\2\72\2\0\3\72"+
+ "\1\0\1\72\7\0\1\302\2\72\1\302\2\72\1\302"+
+ "\2\72\1\0\4\72\1\0\1\302\1\72\1\0\1\72"+
+ "\1\0\1\302\2\72\6\0\2\72\1\200\3\0\1\72"+
+ "\3\0\1\72\7\0\3\72\1\0\1\72\2\0\1\246"+
+ "\4\0\11\72\1\0\4\72\1\0\2\72\1\0\1\72"+
+ "\1\0\3\72\6\0\1\303\1\100\1\203\1\100\1\0"+
+ "\1\100\1\303\1\0\1\100\1\0\1\100\3\0\2\100"+
+ "\2\0\3\100\1\0\1\100\7\0\1\303\2\100\1\303"+
+ "\2\100\1\303\2\100\1\0\4\100\1\0\1\303\1\100"+
+ "\1\0\1\100\1\0\1\303\2\100\6\0\1\304\1\205"+
+ "\1\206\1\205\1\305\1\205\1\304\10\205\1\306\16\205"+
+ "\1\304\2\205\1\304\2\205\1\304\10\205\1\304\4\205"+
+ "\1\304\7\205\1\0\1\307\1\210\1\211\3\210\1\307"+
+ "\1\310\7\210\1\311\16\210\1\307\2\210\1\307\2\210"+
+ "\1\307\10\210\1\307\4\210\1\307\7\210\1\0\2\100"+
+ "\1\203\3\0\1\100\3\0\1\100\7\0\3\100\1\0"+
+ "\1\100\2\0\1\246\4\0\11\100\1\0\4\100\1\0"+
+ "\2\100\1\0\1\100\1\0\3\100\6\0\1\312\1\105"+
+ "\1\213\1\105\1\0\1\105\1\312\1\0\1\105\1\0"+
+ "\1\105\3\0\2\105\2\0\3\105\1\0\1\105\7\0"+
+ "\1\312\2\105\1\312\2\105\1\312\2\105\1\0\4\105"+
+ "\1\0\1\312\1\105\1\0\1\105\1\0\1\312\2\105"+
+ "\6\0\2\105\1\213\3\0\1\105\3\0\1\105\7\0"+
+ "\3\105\1\0\1\105\2\0\1\246\4\0\11\105\1\0"+
+ "\4\105\1\0\2\105\1\0\1\105\1\0\3\105\6\0"+
+ "\2\216\1\217\3\0\1\216\3\0\1\216\7\0\3\216"+
+ "\1\0\1\216\7\0\11\216\1\0\4\216\1\0\2\216"+
+ "\1\0\1\216\1\0\3\216\6\0\1\313\2\216\1\0"+
+ "\2\216\1\313\1\216\1\0\5\216\2\0\16\216\1\313"+
+ "\2\216\1\313\2\216\1\313\10\216\1\313\4\216\1\313"+
+ "\7\216\1\0\1\314\1\113\1\222\1\113\1\0\1\113"+
+ "\1\314\1\0\1\113\1\0\1\113\3\0\2\113\2\0"+
+ "\3\113\1\223\1\113\7\0\1\314\2\113\1\314\2\113"+
+ "\1\314\2\113\1\0\4\113\1\0\1\314\1\113\1\0"+
+ "\1\113\1\0\1\314\2\113\6\0\1\315\1\225\1\226"+
+ "\1\225\1\316\1\225\1\315\10\225\1\317\16\225\1\315"+
+ "\2\225\1\315\2\225\1\315\10\225\1\315\4\225\1\315"+
+ "\7\225\1\0\1\320\1\230\1\231\3\230\1\320\1\321"+
+ "\7\230\1\322\16\230\1\320\2\230\1\320\2\230\1\320"+
+ "\10\230\1\320\4\230\1\320\7\230\1\0\1\232\1\113"+
+ "\1\222\3\0\1\113\3\0\1\113\1\0\1\220\5\0"+
+ "\3\113\1\223\1\113\7\0\11\113\1\0\4\113\1\0"+
+ "\2\113\1\0\1\113\1\0\3\113\4\0\1\221\1\0"+
+ "\2\113\1\222\3\0\1\113\3\0\1\113\7\0\3\113"+
+ "\1\223\1\113\2\0\1\246\4\0\11\113\1\0\4\113"+
+ "\1\0\2\113\1\0\1\113\1\0\3\113\6\0\1\234"+
+ "\1\216\1\217\3\0\1\216\3\0\1\216\7\0\3\216"+
+ "\1\0\1\216\7\0\11\216\1\0\4\216\1\0\2\216"+
+ "\1\0\1\216\1\0\3\216\4\0\1\221\1\0\1\323"+
+ "\2\235\1\0\2\235\1\323\1\235\1\0\5\235\2\0"+
+ "\16\235\1\323\2\235\1\323\2\235\1\323\10\235\1\323"+
+ "\4\235\1\323\7\235\1\0\1\324\5\0\1\324\11\0"+
+ "\1\324\5\0\1\324\7\0\2\324\1\0\2\324\1\0"+
+ "\2\324\7\0\2\324\3\0\2\324\7\0\2\113\1\222"+
+ "\3\0\1\113\3\0\1\113\7\0\2\113\1\325\1\223"+
+ "\1\113\7\0\11\113\1\0\4\113\1\0\2\113\1\0"+
+ "\1\113\1\0\3\113\57\0\1\326\21\0\1\327\1\25"+
+ "\1\131\1\25\1\0\1\25\1\327\1\0\1\25\1\0"+
+ "\1\25\3\0\2\25\2\0\3\25\1\0\1\25\7\0"+
+ "\1\327\2\25\1\327\2\25\1\327\2\25\1\0\4\25"+
+ "\1\0\1\327\1\25\1\0\1\25\1\0\1\327\2\25"+
+ "\6\0\1\330\1\134\1\135\1\134\1\0\1\134\1\330"+
+ "\1\0\1\134\1\0\1\134\3\0\2\134\2\0\3\134"+
+ "\1\0\1\134\7\0\1\330\2\134\1\330\2\134\1\330"+
+ "\2\134\1\0\4\134\1\0\1\330\1\134\1\0\1\134"+
+ "\1\0\1\330\2\134\6\0\1\331\1\136\1\137\1\136"+
+ "\1\0\1\136\1\331\1\0\1\136\1\0\1\136\3\0"+
+ "\2\136\2\0\3\136\1\0\1\136\7\0\1\331\2\136"+
+ "\1\331\2\136\1\331\2\136\1\0\4\136\1\0\1\331"+
+ "\1\136\1\0\1\136\1\0\1\331\2\136\20\0\1\332"+
+ "\57\0\34\141\1\333\1\252\35\141\42\0\2\334\102\0"+
+ "\1\335\75\0\2\336\74\0\1\337\76\0\1\340\7\0"+
+ "\1\341\1\342\1\260\1\0\1\260\1\341\1\0\1\260"+
+ "\1\0\1\341\3\0\2\260\2\0\3\341\1\0\1\341"+
+ "\7\0\11\341\1\0\4\341\1\0\2\341\1\0\1\341"+
+ "\1\0\3\341\6\0\1\343\1\147\1\150\1\147\1\0"+
+ "\1\147\1\343\1\0\1\147\1\0\1\147\3\0\2\147"+
+ "\2\0\3\147\1\260\1\147\7\0\1\343\2\147\1\343"+
+ "\2\147\1\343\2\147\1\0\4\147\1\0\1\343\1\147"+
+ "\1\0\1\147\1\0\1\343\2\147\6\0\1\344\1\151"+
+ "\1\152\1\151\1\153\1\151\1\344\27\151\1\344\2\151"+
+ "\1\344\2\151\1\344\10\151\1\344\4\151\1\344\7\151"+
+ "\1\0\2\151\1\152\1\0\1\153\12\151\1\0\52\151"+
+ "\1\0\1\345\1\154\1\155\3\154\1\345\1\153\26\154"+
+ "\1\345\2\154\1\345\2\154\1\345\10\154\1\345\4\154"+
+ "\1\345\7\154\1\0\2\154\1\155\1\0\3\154\1\153"+
+ "\7\154\1\0\52\154\1\0\1\346\1\157\1\160\1\157"+
+ "\1\161\1\157\1\346\27\157\1\346\2\157\1\346\2\157"+
+ "\1\346\10\157\1\346\4\157\1\346\7\157\1\0\2\157"+
+ "\1\160\1\0\1\161\12\157\1\0\52\157\1\0\1\347"+
+ "\1\162\1\163\3\162\1\347\1\161\26\162\1\347\2\162"+
+ "\1\347\2\162\1\347\10\162\1\347\4\162\1\347\7\162"+
+ "\1\0\2\162\1\163\1\0\3\162\1\161\7\162\1\0"+
+ "\52\162\26\0\1\350\45\0\1\351\1\51\1\165\1\51"+
+ "\1\0\1\51\1\351\1\0\1\51\1\0\1\51\3\0"+
+ "\2\51\2\0\3\51\1\0\1\51\7\0\1\351\2\51"+
+ "\1\351\2\51\1\351\2\51\1\0\4\51\1\0\1\351"+
+ "\1\51\1\0\1\51\1\0\1\351\2\51\6\0\1\352"+
+ "\1\55\1\170\1\55\1\0\1\55\1\352\1\0\1\55"+
+ "\1\0\1\55\3\0\2\55\2\0\3\55\1\0\1\55"+
+ "\7\0\1\352\2\55\1\352\2\55\1\352\2\55\1\0"+
+ "\4\55\1\0\1\352\1\55\1\0\1\55\1\0\1\352"+
+ "\2\55\6\0\1\353\1\62\1\173\1\62\1\0\1\62"+
+ "\1\353\1\0\1\62\1\0\1\62\3\0\2\62\2\0"+
+ "\3\62\1\0\1\62\7\0\1\353\2\62\1\353\2\62"+
+ "\1\353\2\62\1\0\4\62\1\0\1\353\1\62\1\0"+
+ "\1\62\1\0\1\353\2\62\6\0\1\354\1\72\1\200"+
+ "\1\72\1\0\1\72\1\354\1\0\1\72\1\0\1\72"+
+ "\3\0\2\72\2\0\3\72\1\0\1\72\7\0\1\354"+
+ "\2\72\1\354\2\72\1\354\2\72\1\0\4\72\1\0"+
+ "\1\354\1\72\1\0\1\72\1\0\1\354\2\72\6\0"+
+ "\1\355\1\100\1\203\1\100\1\0\1\100\1\355\1\0"+
+ "\1\100\1\0\1\100\3\0\2\100\2\0\3\100\1\0"+
+ "\1\100\7\0\1\355\2\100\1\355\2\100\1\355\2\100"+
+ "\1\0\4\100\1\0\1\355\1\100\1\0\1\100\1\0"+
+ "\1\355\2\100\6\0\1\356\1\205\1\206\1\205\1\207"+
+ "\1\205\1\356\27\205\1\356\2\205\1\356\2\205\1\356"+
+ "\10\205\1\356\4\205\1\356\7\205\1\0\2\205\1\206"+
+ "\1\0\1\207\12\205\1\0\52\205\1\0\1\357\1\210"+
+ "\1\211\3\210\1\357\1\207\26\210\1\357\2\210\1\357"+
+ "\2\210\1\357\10\210\1\357\4\210\1\357\7\210\1\0"+
+ "\2\210\1\211\1\0\3\210\1\207\7\210\1\0\52\210"+
+ "\1\0\1\360\1\105\1\213\1\105\1\0\1\105\1\360"+
+ "\1\0\1\105\1\0\1\105\3\0\2\105\2\0\3\105"+
+ "\1\0\1\105\7\0\1\360\2\105\1\360\2\105\1\360"+
+ "\2\105\1\0\4\105\1\0\1\360\1\105\1\0\1\105"+
+ "\1\0\1\360\2\105\6\0\1\361\1\216\1\217\1\216"+
+ "\1\0\1\216\1\361\1\0\1\216\1\0\1\216\3\0"+
+ "\2\216\2\0\3\216\1\0\1\216\7\0\1\361\2\216"+
+ "\1\361\2\216\1\361\2\216\1\0\4\216\1\0\1\361"+
+ "\1\216\1\0\1\216\1\0\1\361\2\216\6\0\1\362"+
+ "\1\113\1\222\1\113\1\0\1\113\1\362\1\0\1\113"+
+ "\1\0\1\113\3\0\2\113\2\0\3\113\1\223\1\113"+
+ "\7\0\1\362\2\113\1\362\2\113\1\362\2\113\1\0"+
+ "\4\113\1\0\1\362\1\113\1\0\1\113\1\0\1\362"+
+ "\2\113\6\0\1\363\1\225\1\226\1\225\1\227\1\225"+
+ "\1\363\27\225\1\363\2\225\1\363\2\225\1\363\10\225"+
+ "\1\363\4\225\1\363\7\225\1\0\2\225\1\226\1\0"+
+ "\1\227\12\225\1\0\52\225\1\0\1\364\1\230\1\231"+
+ "\3\230\1\364\1\227\26\230\1\364\2\230\1\364\2\230"+
+ "\1\364\10\230\1\364\4\230\1\364\7\230\1\0\2\230"+
+ "\1\231\1\0\3\230\1\227\7\230\1\0\52\230\1\0"+
+ "\1\365\1\235\1\236\1\235\1\0\1\235\1\365\1\0"+
+ "\1\235\1\0\1\235\3\0\2\235\2\0\3\235\1\0"+
+ "\1\235\7\0\1\365\2\235\1\365\2\235\1\365\2\235"+
+ "\1\0\4\235\1\0\1\365\1\235\1\0\1\235\1\0"+
+ "\1\365\2\235\6\0\1\366\5\0\1\366\3\0\1\367"+
+ "\5\0\1\366\5\0\1\366\7\0\2\366\1\0\2\366"+
+ "\1\0\2\366\7\0\2\366\3\0\2\366\7\0\2\113"+
+ "\1\222\3\0\1\113\3\0\1\113\7\0\3\113\1\370"+
+ "\1\113\7\0\11\113\1\0\4\113\1\0\2\113\1\0"+
+ "\1\113\1\0\3\113\60\0\1\371\20\0\1\372\1\25"+
+ "\1\131\1\25\1\0\1\25\1\372\1\0\1\25\1\0"+
+ "\1\25\3\0\2\25\2\0\3\25\1\0\1\25\7\0"+
+ "\1\372\2\25\1\372\2\25\1\372\2\25\1\0\4\25"+
+ "\1\0\1\372\1\25\1\0\1\25\1\0\1\372\2\25"+
+ "\6\0\1\373\1\134\1\135\1\134\1\0\1\134\1\373"+
+ "\1\0\1\134\1\0\1\134\3\0\2\134\2\0\3\134"+
+ "\1\0\1\134\7\0\1\373\2\134\1\373\2\134\1\373"+
+ "\2\134\1\0\4\134\1\0\1\373\1\134\1\0\1\134"+
+ "\1\0\1\373\2\134\6\0\1\374\1\136\1\137\1\136"+
+ "\1\0\1\136\1\374\1\0\1\136\1\0\1\136\3\0"+
+ "\2\136\2\0\3\136\1\0\1\136\7\0\1\374\2\136"+
+ "\1\374\2\136\1\374\2\136\1\0\4\136\1\0\1\374"+
+ "\1\136\1\0\1\136\1\0\1\374\2\136\31\0\1\375"+
+ "\122\0\1\376\67\0\1\377\66\0\2\u0100\73\0\1\u0101"+
+ "\24\0\2\341\1\342\1\u0102\1\0\1\u0102\1\341\1\0"+
+ "\1\u0102\1\u0103\1\341\3\0\2\u0102\2\0\3\341\1\0"+
+ "\1\341\7\0\11\341\1\0\4\341\1\0\2\341\1\0"+
+ "\1\341\1\0\3\341\6\0\1\u0104\2\341\1\0\2\341"+
+ "\1\u0104\1\341\1\0\5\341\2\0\16\341\1\u0104\2\341"+
+ "\1\u0104\2\341\1\u0104\10\341\1\u0104\4\341\1\u0104\7\341"+
+ "\1\0\1\u0105\1\147\1\150\1\147\1\0\1\147\1\u0105"+
+ "\1\0\1\147\1\0\1\147\3\0\2\147\2\0\3\147"+
+ "\1\260\1\147\7\0\1\u0105\2\147\1\u0105\2\147\1\u0105"+
+ "\2\147\1\0\4\147\1\0\1\u0105\1\147\1\0\1\147"+
+ "\1\0\1\u0105\2\147\6\0\1\u0106\1\151\1\152\1\151"+
+ "\1\153\1\151\1\u0106\27\151\1\u0106\2\151\1\u0106\2\151"+
+ "\1\u0106\10\151\1\u0106\4\151\1\u0106\7\151\1\0\1\u0107"+
+ "\1\154\1\155\3\154\1\u0107\1\153\26\154\1\u0107\2\154"+
+ "\1\u0107\2\154\1\u0107\10\154\1\u0107\4\154\1\u0107\7\154"+
+ "\1\0\1\u0108\1\157\1\160\1\157\1\161\1\157\1\u0108"+
+ "\27\157\1\u0108\2\157\1\u0108\2\157\1\u0108\10\157\1\u0108"+
+ "\4\157\1\u0108\7\157\1\0\1\u0109\1\162\1\163\3\162"+
+ "\1\u0109\1\161\26\162\1\u0109\2\162\1\u0109\2\162\1\u0109"+
+ "\10\162\1\u0109\4\162\1\u0109\7\162\1\0\2\u010a\1\u010b"+
+ "\1\350\1\u010c\1\350\1\u010a\1\u010d\1\350\1\u010e\4\u010a"+
+ "\2\350\5\u010a\1\0\44\u010a\1\0\1\u010f\1\51\1\165"+
+ "\1\51\1\0\1\51\1\u010f\1\0\1\51\1\0\1\51"+
+ "\3\0\2\51\2\0\3\51\1\0\1\51\7\0\1\u010f"+
+ "\2\51\1\u010f\2\51\1\u010f\2\51\1\0\4\51\1\0"+
+ "\1\u010f\1\51\1\0\1\51\1\0\1\u010f\2\51\6\0"+
+ "\1\u0110\1\55\1\170\1\55\1\0\1\55\1\u0110\1\0"+
+ "\1\55\1\0\1\55\3\0\2\55\2\0\3\55\1\0"+
+ "\1\55\7\0\1\u0110\2\55\1\u0110\2\55\1\u0110\2\55"+
+ "\1\0\4\55\1\0\1\u0110\1\55\1\0\1\55\1\0"+
+ "\1\u0110\2\55\6\0\1\u0111\1\62\1\173\1\62\1\0"+
+ "\1\62\1\u0111\1\0\1\62\1\0\1\62\3\0\2\62"+
+ "\2\0\3\62\1\0\1\62\7\0\1\u0111\2\62\1\u0111"+
+ "\2\62\1\u0111\2\62\1\0\4\62\1\0\1\u0111\1\62"+
+ "\1\0\1\62\1\0\1\u0111\2\62\6\0\1\u0112\1\72"+
+ "\1\200\1\72\1\0\1\72\1\u0112\1\0\1\72\1\0"+
+ "\1\72\3\0\2\72\2\0\3\72\1\0\1\72\7\0"+
+ "\1\u0112\2\72\1\u0112\2\72\1\u0112\2\72\1\0\4\72"+
+ "\1\0\1\u0112\1\72\1\0\1\72\1\0\1\u0112\2\72"+
+ "\6\0\1\u0113\1\100\1\203\1\100\1\0\1\100\1\u0113"+
+ "\1\0\1\100\1\0\1\100\3\0\2\100\2\0\3\100"+
+ "\1\0\1\100\7\0\1\u0113\2\100\1\u0113\2\100\1\u0113"+
+ "\2\100\1\0\4\100\1\0\1\u0113\1\100\1\0\1\100"+
+ "\1\0\1\u0113\2\100\6\0\1\u0114\1\205\1\206\1\205"+
+ "\1\207\1\205\1\u0114\27\205\1\u0114\2\205\1\u0114\2\205"+
+ "\1\u0114\10\205\1\u0114\4\205\1\u0114\7\205\1\0\1\u0115"+
+ "\1\210\1\211\3\210\1\u0115\1\207\26\210\1\u0115\2\210"+
+ "\1\u0115\2\210\1\u0115\10\210\1\u0115\4\210\1\u0115\7\210"+
+ "\1\0\1\u0116\1\105\1\213\1\105\1\0\1\105\1\u0116"+
+ "\1\0\1\105\1\0\1\105\3\0\2\105\2\0\3\105"+
+ "\1\0\1\105\7\0\1\u0116\2\105\1\u0116\2\105\1\u0116"+
+ "\2\105\1\0\4\105\1\0\1\u0116\1\105\1\0\1\105"+
+ "\1\0\1\u0116\2\105\6\0\1\u0117\1\216\1\217\1\216"+
+ "\1\0\1\216\1\u0117\1\0\1\216\1\0\1\216\3\0"+
+ "\2\216\2\0\3\216\1\0\1\216\7\0\1\u0117\2\216"+
+ "\1\u0117\2\216\1\u0117\2\216\1\0\4\216\1\0\1\u0117"+
+ "\1\216\1\0\1\216\1\0\1\u0117\2\216\6\0\1\u0118"+
+ "\1\113\1\222\1\113\1\0\1\113\1\u0118\1\0\1\113"+
+ "\1\0\1\113\3\0\2\113\2\0\3\113\1\223\1\113"+
+ "\7\0\1\u0118\2\113\1\u0118\2\113\1\u0118\2\113\1\0"+
+ "\4\113\1\0\1\u0118\1\113\1\0\1\113\1\0\1\u0118"+
+ "\2\113\6\0\1\u0119\1\225\1\226\1\225\1\227\1\225"+
+ "\1\u0119\27\225\1\u0119\2\225\1\u0119\2\225\1\u0119\10\225"+
+ "\1\u0119\4\225\1\u0119\7\225\1\0\1\u011a\1\230\1\231"+
+ "\3\230\1\u011a\1\227\26\230\1\u011a\2\230\1\u011a\2\230"+
+ "\1\u011a\10\230\1\u011a\4\230\1\u011a\7\230\1\0\1\u011b"+
+ "\1\235\1\236\1\235\1\0\1\235\1\u011b\1\0\1\235"+
+ "\1\0\1\235\3\0\2\235\2\0\3\235\1\0\1\235"+
+ "\7\0\1\u011b\2\235\1\u011b\2\235\1\u011b\2\235\1\0"+
+ "\4\235\1\0\1\u011b\1\235\1\0\1\235\1\0\1\u011b"+
+ "\2\235\6\0\1\u011c\5\0\1\u011c\3\0\1\367\5\0"+
+ "\1\u011c\5\0\1\u011c\7\0\2\u011c\1\0\2\u011c\1\0"+
+ "\2\u011c\7\0\2\u011c\3\0\2\u011c\7\0\1\u011d\5\0"+
+ "\1\u011d\11\0\1\u011d\5\0\1\u011d\7\0\2\u011d\1\0"+
+ "\2\u011d\1\0\2\u011d\7\0\2\u011d\3\0\2\u011d\7\0"+
+ "\2\u011e\1\u011f\1\u0120\1\u0121\1\u0120\1\u011e\1\u0122\1\u0120"+
+ "\1\u0123\4\u011e\2\u0120\5\u011e\1\0\44\u011e\54\0\1\u0124"+
+ "\17\0\1\u0125\1\25\1\131\1\25\1\0\1\25\1\u0125"+
+ "\1\0\1\25\1\0\1\25\3\0\2\25\2\0\3\25"+
+ "\1\0\1\25\7\0\1\u0125\2\25\1\u0125\2\25\1\u0125"+
+ "\2\25\1\0\4\25\1\0\1\u0125\1\25\1\0\1\25"+
+ "\1\0\1\u0125\2\25\6\0\1\u0126\1\134\1\135\1\134"+
+ "\1\0\1\134\1\u0126\1\0\1\134\1\0\1\134\3\0"+
+ "\2\134\2\0\3\134\1\0\1\134\7\0\1\u0126\2\134"+
+ "\1\u0126\2\134\1\u0126\2\134\1\0\4\134\1\0\1\u0126"+
+ "\1\134\1\0\1\134\1\0\1\u0126\2\134\6\0\1\u0127"+
+ "\1\136\1\137\1\136\1\0\1\136\1\u0127\1\0\1\136"+
+ "\1\0\1\136\3\0\2\136\2\0\3\136\1\0\1\136"+
+ "\7\0\1\u0127\2\136\1\u0127\2\136\1\u0127\2\136\1\0"+
+ "\4\136\1\0\1\u0127\1\136\1\0\1\136\1\0\1\u0127"+
+ "\2\136\51\0\1\u0128\52\0\1\u0129\110\0\2\u012a\42\0"+
+ "\1\u012b\63\0\1\u0102\1\0\1\u0102\2\0\1\u0102\1\u0103"+
+ "\4\0\2\u0102\53\0\1\u012c\1\341\1\342\1\341\1\0"+
+ "\1\341\1\u012c\1\0\1\341\1\u0103\1\341\3\0\2\341"+
+ "\2\0\3\341\1\0\1\341\7\0\1\u012c\2\341\1\u012c"+
+ "\2\341\1\u012c\2\341\1\0\4\341\1\0\1\u012c\1\341"+
+ "\1\0\1\341\1\0\1\u012c\2\341\6\0\1\u012d\1\147"+
+ "\1\150\1\147\1\0\1\147\1\u012d\1\0\1\147\1\0"+
+ "\1\147\3\0\2\147\2\0\3\147\1\260\1\147\7\0"+
+ "\1\u012d\2\147\1\u012d\2\147\1\u012d\2\147\1\0\4\147"+
+ "\1\0\1\u012d\1\147\1\0\1\147\1\0\1\u012d\2\147"+
+ "\6\0\1\u012e\1\151\1\152\1\151\1\153\1\151\1\u012e"+
+ "\27\151\1\u012e\2\151\1\u012e\2\151\1\u012e\10\151\1\u012e"+
+ "\4\151\1\u012e\7\151\1\0\1\u012f\1\154\1\155\3\154"+
+ "\1\u012f\1\153\26\154\1\u012f\2\154\1\u012f\2\154\1\u012f"+
+ "\10\154\1\u012f\4\154\1\u012f\7\154\1\0\1\u0130\1\157"+
+ "\1\160\1\157\1\161\1\157\1\u0130\27\157\1\u0130\2\157"+
+ "\1\u0130\2\157\1\u0130\10\157\1\u0130\4\157\1\u0130\7\157"+
+ "\1\0\1\u0131\1\162\1\163\3\162\1\u0131\1\161\26\162"+
+ "\1\u0131\2\162\1\u0131\2\162\1\u0131\10\162\1\u0131\4\162"+
+ "\1\u0131\7\162\1\0\2\u010a\1\u010b\1\u0132\1\0\2\u010a"+
+ "\1\0\1\u0132\1\u010e\4\u010a\2\u0132\5\u010a\1\0\44\u010a"+
+ "\1\0\1\u0133\1\u010a\1\u010b\1\u0132\2\u010a\1\u0133\1\u010a"+
+ "\1\u0132\1\u0134\4\u010a\2\u0132\16\u010a\1\u0133\2\u010a\1\u0133"+
+ "\2\u010a\1\u0133\10\u010a\1\u0133\4\u010a\1\u0133\7\u010a\1\0"+
+ "\2\u010c\1\u0135\1\0\1\u0132\11\u010c\2\0\52\u010c\1\0"+
+ "\2\u010d\1\u0136\1\0\3\u010d\1\u0132\6\u010d\2\0\52\u010d"+
+ "\1\0\1\u0137\1\51\1\165\1\51\1\0\1\51\1\u0137"+
+ "\1\0\1\51\1\0\1\51\3\0\2\51\2\0\3\51"+
+ "\1\0\1\51\7\0\1\u0137\2\51\1\u0137\2\51\1\u0137"+
+ "\2\51\1\0\4\51\1\0\1\u0137\1\51\1\0\1\51"+
+ "\1\0\1\u0137\2\51\6\0\1\u0138\1\55\1\170\1\55"+
+ "\1\0\1\55\1\u0138\1\0\1\55\1\0\1\55\3\0"+
+ "\2\55\2\0\3\55\1\0\1\55\7\0\1\u0138\2\55"+
+ "\1\u0138\2\55\1\u0138\2\55\1\0\4\55\1\0\1\u0138"+
+ "\1\55\1\0\1\55\1\0\1\u0138\2\55\6\0\1\u0139"+
+ "\1\62\1\173\1\62\1\0\1\62\1\u0139\1\0\1\62"+
+ "\1\0\1\62\3\0\2\62\2\0\3\62\1\0\1\62"+
+ "\7\0\1\u0139\2\62\1\u0139\2\62\1\u0139\2\62\1\0"+
+ "\4\62\1\0\1\u0139\1\62\1\0\1\62\1\0\1\u0139"+
+ "\2\62\6\0\1\u013a\1\72\1\200\1\72\1\0\1\72"+
+ "\1\u013a\1\0\1\72\1\0\1\72\3\0\2\72\2\0"+
+ "\3\72\1\0\1\72\7\0\1\u013a\2\72\1\u013a\2\72"+
+ "\1\u013a\2\72\1\0\4\72\1\0\1\u013a\1\72\1\0"+
+ "\1\72\1\0\1\u013a\2\72\6\0\1\u013b\1\100\1\203"+
+ "\1\100\1\0\1\100\1\u013b\1\0\1\100\1\0\1\100"+
+ "\3\0\2\100\2\0\3\100\1\0\1\100\7\0\1\u013b"+
+ "\2\100\1\u013b\2\100\1\u013b\2\100\1\0\4\100\1\0"+
+ "\1\u013b\1\100\1\0\1\100\1\0\1\u013b\2\100\6\0"+
+ "\1\u013c\1\205\1\206\1\205\1\207\1\205\1\u013c\27\205"+
+ "\1\u013c\2\205\1\u013c\2\205\1\u013c\10\205\1\u013c\4\205"+
+ "\1\u013c\7\205\1\0\1\u013d\1\210\1\211\3\210\1\u013d"+
+ "\1\207\26\210\1\u013d\2\210\1\u013d\2\210\1\u013d\10\210"+
+ "\1\u013d\4\210\1\u013d\7\210\1\0\1\u013e\1\105\1\213"+
+ "\1\105\1\0\1\105\1\u013e\1\0\1\105\1\0\1\105"+
+ "\3\0\2\105\2\0\3\105\1\0\1\105\7\0\1\u013e"+
+ "\2\105\1\u013e\2\105\1\u013e\2\105\1\0\4\105\1\0"+
+ "\1\u013e\1\105\1\0\1\105\1\0\1\u013e\2\105\6\0"+
+ "\1\u013f\1\216\1\217\1\216\1\0\1\216\1\u013f\1\0"+
+ "\1\216\1\0\1\216\3\0\2\216\2\0\3\216\1\0"+
+ "\1\216\7\0\1\u013f\2\216\1\u013f\2\216\1\u013f\2\216"+
+ "\1\0\4\216\1\0\1\u013f\1\216\1\0\1\216\1\0"+
+ "\1\u013f\2\216\6\0\1\u0140\1\113\1\222\1\113\1\0"+
+ "\1\113\1\u0140\1\0\1\113\1\0\1\113\3\0\2\113"+
+ "\2\0\3\113\1\223\1\113\7\0\1\u0140\2\113\1\u0140"+
+ "\2\113\1\u0140\2\113\1\0\4\113\1\0\1\u0140\1\113"+
+ "\1\0\1\113\1\0\1\u0140\2\113\6\0\1\u0141\1\225"+
+ "\1\226\1\225\1\227\1\225\1\u0141\27\225\1\u0141\2\225"+
+ "\1\u0141\2\225\1\u0141\10\225\1\u0141\4\225\1\u0141\7\225"+
+ "\1\0\1\u0142\1\230\1\231\3\230\1\u0142\1\227\26\230"+
+ "\1\u0142\2\230\1\u0142\2\230\1\u0142\10\230\1\u0142\4\230"+
+ "\1\u0142\7\230\1\0\1\u0143\1\235\1\236\1\235\1\0"+
+ "\1\235\1\u0143\1\0\1\235\1\0\1\235\3\0\2\235"+
+ "\2\0\3\235\1\0\1\235\7\0\1\u0143\2\235\1\u0143"+
+ "\2\235\1\u0143\2\235\1\0\4\235\1\0\1\u0143\1\235"+
+ "\1\0\1\235\1\0\1\u0143\2\235\6\0\1\u0144\5\0"+
+ "\1\u0144\3\0\1\367\5\0\1\u0144\5\0\1\u0144\7\0"+
+ "\2\u0144\1\0\2\u0144\1\0\2\u0144\7\0\2\u0144\3\0"+
+ "\2\u0144\7\0\1\u0145\5\0\1\u0145\11\0\1\u0145\5\0"+
+ "\1\u0145\7\0\2\u0145\1\0\2\u0145\1\0\2\u0145\7\0"+
+ "\2\u0145\3\0\2\u0145\7\0\2\u011e\1\u011f\1\u0146\1\0"+
+ "\2\u011e\1\0\1\u0146\1\u0123\4\u011e\2\u0146\5\u011e\1\0"+
+ "\44\u011e\1\0\1\u0147\1\u011e\1\u011f\1\u0146\2\u011e\1\u0147"+
+ "\1\u011e\1\u0146\1\u0148\4\u011e\2\u0146\16\u011e\1\u0147\2\u011e"+
+ "\1\u0147\2\u011e\1\u0147\10\u011e\1\u0147\4\u011e\1\u0147\7\u011e"+
+ "\1\0\2\u0121\1\u0149\1\0\1\u0146\11\u0121\2\0\52\u0121"+
+ "\1\0\2\u0122\1\u014a\1\0\3\u0122\1\u0146\6\u0122\2\0"+
+ "\52\u0122\24\0\1\u014b\47\0\1\u014c\1\25\1\131\1\25"+
+ "\1\0\1\25\1\u014c\1\0\1\25\1\0\1\25\3\0"+
+ "\2\25\2\0\3\25\1\0\1\25\7\0\1\u014c\2\25"+
+ "\1\u014c\2\25\1\u014c\2\25\1\0\4\25\1\0\1\u014c"+
+ "\1\25\1\0\1\25\1\0\1\u014c\2\25\6\0\1\u014d"+
+ "\1\134\1\135\1\134\1\0\1\134\1\u014d\1\0\1\134"+
+ "\1\0\1\134\3\0\2\134\2\0\3\134\1\0\1\134"+
+ "\7\0\1\u014d\2\134\1\u014d\2\134\1\u014d\2\134\1\0"+
+ "\4\134\1\0\1\u014d\1\134\1\0\1\134\1\0\1\u014d"+
+ "\2\134\6\0\1\u014e\1\136\1\137\1\136\1\0\1\136"+
+ "\1\u014e\1\0\1\136\1\0\1\136\3\0\2\136\2\0"+
+ "\3\136\1\0\1\136\7\0\1\u014e\2\136\1\u014e\2\136"+
+ "\1\u014e\2\136\1\0\4\136\1\0\1\u014e\1\136\1\0"+
+ "\1\136\1\0\1\u014e\2\136\52\0\2\u014f\73\0\1\u0150"+
+ "\106\0\2\u0151\7\0\1\u0152\1\341\1\342\1\341\1\0"+
+ "\1\341\1\u0152\1\0\1\341\1\u0103\1\341\3\0\2\341"+
+ "\2\0\3\341\1\0\1\341\7\0\1\u0152\2\341\1\u0152"+
+ "\2\341\1\u0152\2\341\1\0\4\341\1\0\1\u0152\1\341"+
+ "\1\0\1\341\1\0\1\u0152\2\341\6\0\1\u0153\1\147"+
+ "\1\150\1\147\1\0\1\147\1\u0153\1\0\1\147\1\0"+
+ "\1\147\3\0\2\147\2\0\3\147\1\260\1\147\7\0"+
+ "\1\u0153\2\147\1\u0153\2\147\1\u0153\2\147\1\0\4\147"+
+ "\1\0\1\u0153\1\147\1\0\1\147\1\0\1\u0153\2\147"+
+ "\6\0\1\u0154\1\151\1\152\1\151\1\153\1\151\1\u0154"+
+ "\27\151\1\u0154\2\151\1\u0154\2\151\1\u0154\10\151\1\u0154"+
+ "\4\151\1\u0154\7\151\1\0\1\u0155\1\154\1\155\3\154"+
+ "\1\u0155\1\153\26\154\1\u0155\2\154\1\u0155\2\154\1\u0155"+
+ "\10\154\1\u0155\4\154\1\u0155\7\154\1\0\1\u0156\1\157"+
+ "\1\160\1\157\1\161\1\157\1\u0156\27\157\1\u0156\2\157"+
+ "\1\u0156\2\157\1\u0156\10\157\1\u0156\4\157\1\u0156\7\157"+
+ "\1\0\1\u0157\1\162\1\163\3\162\1\u0157\1\161\26\162"+
+ "\1\u0157\2\162\1\u0157\2\162\1\u0157\10\162\1\u0157\4\162"+
+ "\1\u0157\7\162\4\0\1\u0132\1\0\1\u0132\2\0\1\u0132"+
+ "\1\u010e\4\0\2\u0132\53\0\1\u0158\1\u010a\1\u010b\1\u010a"+
+ "\1\0\1\u010a\1\u0158\1\0\1\u010a\1\u010e\13\u010a\1\0"+
+ "\10\u010a\1\u0158\2\u010a\1\u0158\2\u010a\1\u0158\10\u010a\1\u0158"+
+ "\4\u010a\1\u0158\7\u010a\1\0\1\u0159\1\u010c\1\u0135\1\u010c"+
+ "\1\u015a\1\u010c\1\u0159\10\u010c\1\u015b\16\u010c\1\u0159\2\u010c"+
+ "\1\u0159\2\u010c\1\u0159\10\u010c\1\u0159\4\u010c\1\u0159\7\u010c"+
+ "\1\0\1\u015c\1\u010d\1\u0136\3\u010d\1\u015c\1\u015d\7\u010d"+
+ "\1\u015e\16\u010d\1\u015c\2\u010d\1\u015c\2\u010d\1\u015c\10\u010d"+
+ "\1\u015c\4\u010d\1\u015c\7\u010d\1\0\1\u015f\1\51\1\165"+
+ "\1\51\1\0\1\51\1\u015f\1\0\1\51\1\0\1\51"+
+ "\3\0\2\51\2\0\3\51\1\0\1\51\7\0\1\u015f"+
+ "\2\51\1\u015f\2\51\1\u015f\2\51\1\0\4\51\1\0"+
+ "\1\u015f\1\51\1\0\1\51\1\0\1\u015f\2\51\6\0"+
+ "\1\u0160\1\55\1\170\1\55\1\0\1\55\1\u0160\1\0"+
+ "\1\55\1\0\1\55\3\0\2\55\2\0\3\55\1\0"+
+ "\1\55\7\0\1\u0160\2\55\1\u0160\2\55\1\u0160\2\55"+
+ "\1\0\4\55\1\0\1\u0160\1\55\1\0\1\55\1\0"+
+ "\1\u0160\2\55\6\0\1\u0161\1\62\1\173\1\62\1\0"+
+ "\1\62\1\u0161\1\0\1\62\1\0\1\62\3\0\2\62"+
+ "\2\0\3\62\1\0\1\62\7\0\1\u0161\2\62\1\u0161"+
+ "\2\62\1\u0161\2\62\1\0\4\62\1\0\1\u0161\1\62"+
+ "\1\0\1\62\1\0\1\u0161\2\62\6\0\1\u0162\1\72"+
+ "\1\200\1\72\1\0\1\72\1\u0162\1\0\1\72\1\0"+
+ "\1\72\3\0\2\72\2\0\3\72\1\0\1\72\7\0"+
+ "\1\u0162\2\72\1\u0162\2\72\1\u0162\2\72\1\0\4\72"+
+ "\1\0\1\u0162\1\72\1\0\1\72\1\0\1\u0162\2\72"+
+ "\6\0\1\u0163\1\100\1\203\1\100\1\0\1\100\1\u0163"+
+ "\1\0\1\100\1\0\1\100\3\0\2\100\2\0\3\100"+
+ "\1\0\1\100\7\0\1\u0163\2\100\1\u0163\2\100\1\u0163"+
+ "\2\100\1\0\4\100\1\0\1\u0163\1\100\1\0\1\100"+
+ "\1\0\1\u0163\2\100\6\0\1\u0164\1\205\1\206\1\205"+
+ "\1\207\1\205\1\u0164\27\205\1\u0164\2\205\1\u0164\2\205"+
+ "\1\u0164\10\205\1\u0164\4\205\1\u0164\7\205\1\0\1\u0165"+
+ "\1\210\1\211\3\210\1\u0165\1\207\26\210\1\u0165\2\210"+
+ "\1\u0165\2\210\1\u0165\10\210\1\u0165\4\210\1\u0165\7\210"+
+ "\1\0\1\u0166\1\105\1\213\1\105\1\0\1\105\1\u0166"+
+ "\1\0\1\105\1\0\1\105\3\0\2\105\2\0\3\105"+
+ "\1\0\1\105\7\0\1\u0166\2\105\1\u0166\2\105\1\u0166"+
+ "\2\105\1\0\4\105\1\0\1\u0166\1\105\1\0\1\105"+
+ "\1\0\1\u0166\2\105\6\0\1\u0167\1\216\1\217\1\216"+
+ "\1\0\1\216\1\u0167\1\0\1\216\1\0\1\216\3\0"+
+ "\2\216\2\0\3\216\1\0\1\216\7\0\1\u0167\2\216"+
+ "\1\u0167\2\216\1\u0167\2\216\1\0\4\216\1\0\1\u0167"+
+ "\1\216\1\0\1\216\1\0\1\u0167\2\216\6\0\1\u0168"+
+ "\1\113\1\222\1\113\1\0\1\113\1\u0168\1\0\1\113"+
+ "\1\0\1\113\3\0\2\113\2\0\3\113\1\223\1\113"+
+ "\7\0\1\u0168\2\113\1\u0168\2\113\1\u0168\2\113\1\0"+
+ "\4\113\1\0\1\u0168\1\113\1\0\1\113\1\0\1\u0168"+
+ "\2\113\6\0\1\u0169\1\225\1\226\1\225\1\227\1\225"+
+ "\1\u0169\27\225\1\u0169\2\225\1\u0169\2\225\1\u0169\10\225"+
+ "\1\u0169\4\225\1\u0169\7\225\1\0\1\u016a\1\230\1\231"+
+ "\3\230\1\u016a\1\227\26\230\1\u016a\2\230\1\u016a\2\230"+
+ "\1\u016a\10\230\1\u016a\4\230\1\u016a\7\230\1\0\1\u016b"+
+ "\1\235\1\236\1\235\1\0\1\235\1\u016b\1\0\1\235"+
+ "\1\0\1\235\3\0\2\235\2\0\3\235\1\0\1\235"+
+ "\7\0\1\u016b\2\235\1\u016b\2\235\1\u016b\2\235\1\0"+
+ "\4\235\1\0\1\u016b\1\235\1\0\1\235\1\0\1\u016b"+
+ "\2\235\6\0\1\u016c\5\0\1\u016c\3\0\1\367\5\0"+
+ "\1\u016c\5\0\1\u016c\7\0\2\u016c\1\0\2\u016c\1\0"+
+ "\2\u016c\7\0\2\u016c\3\0\2\u016c\7\0\1\u016d\5\0"+
+ "\1\u016d\11\0\1\u016d\5\0\1\u016d\7\0\2\u016d\1\0"+
+ "\2\u016d\1\0\2\u016d\7\0\2\u016d\3\0\2\u016d\12\0"+
+ "\1\u0146\1\0\1\u0146\2\0\1\u0146\1\u0123\4\0\2\u0146"+
+ "\53\0\1\u016e\1\u011e\1\u011f\1\u011e\1\0\1\u011e\1\u016e"+
+ "\1\0\1\u011e\1\u0123\13\u011e\1\0\10\u011e\1\u016e\2\u011e"+
+ "\1\u016e\2\u011e\1\u016e\10\u011e\1\u016e\4\u011e\1\u016e\7\u011e"+
+ "\1\0\1\u016f\1\u0121\1\u0149\1\u0121\1\u0170\1\u0121\1\u016f"+
+ "\10\u0121\1\u0171\16\u0121\1\u016f\2\u0121\1\u016f\2\u0121\1\u016f"+
+ "\10\u0121\1\u016f\4\u0121\1\u016f\7\u0121\1\0\1\u0172\1\u0122"+
+ "\1\u014a\3\u0122\1\u0172\1\u0173\7\u0122\1\u0174\16\u0122\1\u0172"+
+ "\2\u0122\1\u0172\2\u0122\1\u0172\10\u0122\1\u0172\4\u0122\1\u0172"+
+ "\7\u0122\47\0\1\u0175\24\0\2\25\1\131\1\25\1\0"+
+ "\2\25\1\0\1\25\1\0\1\25\3\0\2\25\2\0"+
+ "\3\25\1\0\1\25\7\0\11\25\1\0\4\25\1\0"+
+ "\2\25\1\0\1\25\1\0\3\25\6\0\1\u0176\1\134"+
+ "\1\135\1\134\1\0\1\134\1\u0176\1\0\1\134\1\0"+
+ "\1\134\3\0\2\134\2\0\3\134\1\0\1\134\7\0"+
+ "\1\u0176\2\134\1\u0176\2\134\1\u0176\2\134\1\0\4\134"+
+ "\1\0\1\u0176\1\134\1\0\1\134\1\0\1\u0176\2\134"+
+ "\6\0\1\u0177\1\136\1\137\1\136\1\0\1\136\1\u0177"+
+ "\1\0\1\136\1\0\1\136\3\0\2\136\2\0\3\136"+
+ "\1\0\1\136\7\0\1\u0177\2\136\1\u0177\2\136\1\u0177"+
+ "\2\136\1\0\4\136\1\0\1\u0177\1\136\1\0\1\136"+
+ "\1\0\1\u0177\2\136\54\0\1\u0178\65\0\2\u0179\30\0"+
+ "\1\u017a\1\341\1\342\1\341\1\0\1\341\1\u017a\1\0"+
+ "\1\341\1\u0103\1\341\3\0\2\341\2\0\3\341\1\0"+
+ "\1\341\7\0\1\u017a\2\341\1\u017a\2\341\1\u017a\2\341"+
+ "\1\0\4\341\1\0\1\u017a\1\341\1\0\1\341\1\0"+
+ "\1\u017a\2\341\6\0\1\u017b\1\147\1\150\1\147\1\0"+
+ "\1\147\1\u017b\1\0\1\147\1\0\1\147\3\0\2\147"+
+ "\2\0\3\147\1\260\1\147\7\0\1\u017b\2\147\1\u017b"+
+ "\2\147\1\u017b\2\147\1\0\4\147\1\0\1\u017b\1\147"+
+ "\1\0\1\147\1\0\1\u017b\2\147\6\0\1\u017c\1\151"+
+ "\1\152\1\151\1\153\1\151\1\u017c\27\151\1\u017c\2\151"+
+ "\1\u017c\2\151\1\u017c\10\151\1\u017c\4\151\1\u017c\7\151"+
+ "\1\0\1\u017d\1\154\1\155\3\154\1\u017d\1\153\26\154"+
+ "\1\u017d\2\154\1\u017d\2\154\1\u017d\10\154\1\u017d\4\154"+
+ "\1\u017d\7\154\1\0\1\u017e\1\157\1\160\1\157\1\161"+
+ "\1\157\1\u017e\27\157\1\u017e\2\157\1\u017e\2\157\1\u017e"+
+ "\10\157\1\u017e\4\157\1\u017e\7\157\1\0\1\u017f\1\162"+
+ "\1\163\3\162\1\u017f\1\161\26\162\1\u017f\2\162\1\u017f"+
+ "\2\162\1\u017f\10\162\1\u017f\4\162\1\u017f\7\162\1\0"+
+ "\1\u0180\1\u010a\1\u010b\1\u010a\1\0\1\u010a\1\u0180\1\0"+
+ "\1\u010a\1\u010e\13\u010a\1\0\10\u010a\1\u0180\2\u010a\1\u0180"+
+ "\2\u010a\1\u0180\10\u010a\1\u0180\4\u010a\1\u0180\7\u010a\1\0"+
+ "\1\u0181\1\u010c\1\u0135\1\u010c\1\u0132\1\u010c\1\u0181\27\u010c"+
+ "\1\u0181\2\u010c\1\u0181\2\u010c\1\u0181\10\u010c\1\u0181\4\u010c"+
+ "\1\u0181\7\u010c\1\0\2\u010c\1\u0135\2\u0132\1\u015a\2\u010c"+
+ "\1\u015a\1\u0182\4\u010c\2\u0132\52\u010c\1\0\2\u010c\1\u0135"+
+ "\1\0\1\u0132\12\u010c\1\0\52\u010c\1\0\1\u0183\1\u010d"+
+ "\1\u0136\3\u010d\1\u0183\1\u0132\26\u010d\1\u0183\2\u010d\1\u0183"+
+ "\2\u010d\1\u0183\10\u010d\1\u0183\4\u010d\1\u0183\7\u010d\1\0"+
+ "\2\u010d\1\u0136\1\u0132\1\u010d\1\u015d\1\u010d\1\u0132\1\u015d"+
+ "\1\u0184\4\u010d\2\u0132\52\u010d\1\0\2\u010d\1\u0136\1\0"+
+ "\3\u010d\1\u0132\7\u010d\1\0\52\u010d\1\0\2\51\1\165"+
+ "\1\51\1\0\2\51\1\0\1\51\1\0\1\51\3\0"+
+ "\2\51\2\0\3\51\1\0\1\51\7\0\11\51\1\0"+
+ "\4\51\1\0\2\51\1\0\1\51\1\0\3\51\6\0"+
+ "\2\55\1\170\1\55\1\0\2\55\1\0\1\55\1\0"+
+ "\1\55\3\0\2\55\2\0\3\55\1\0\1\55\7\0"+
+ "\11\55\1\0\4\55\1\0\2\55\1\0\1\55\1\0"+
+ "\3\55\6\0\2\62\1\173\1\62\1\0\2\62\1\0"+
+ "\1\62\1\0\1\62\3\0\2\62\2\0\3\62\1\0"+
+ "\1\62\7\0\11\62\1\0\4\62\1\0\2\62\1\0"+
+ "\1\62\1\0\3\62\6\0\2\72\1\200\1\72\1\0"+
+ "\2\72\1\0\1\72\1\0\1\72\3\0\2\72\2\0"+
+ "\3\72\1\0\1\72\7\0\11\72\1\0\4\72\1\0"+
+ "\2\72\1\0\1\72\1\0\3\72\6\0\2\100\1\203"+
+ "\1\100\1\0\2\100\1\0\1\100\1\0\1\100\3\0"+
+ "\2\100\2\0\3\100\1\0\1\100\7\0\11\100\1\0"+
+ "\4\100\1\0\2\100\1\0\1\100\1\0\3\100\6\0"+
+ "\1\u0185\1\205\1\206\1\205\1\207\1\205\1\u0185\27\205"+
+ "\1\u0185\2\205\1\u0185\2\205\1\u0185\10\205\1\u0185\4\205"+
+ "\1\u0185\7\205\1\0\1\u0186\1\210\1\211\3\210\1\u0186"+
+ "\1\207\26\210\1\u0186\2\210\1\u0186\2\210\1\u0186\10\210"+
+ "\1\u0186\4\210\1\u0186\7\210\1\0\2\105\1\213\1\105"+
+ "\1\0\2\105\1\0\1\105\1\0\1\105\3\0\2\105"+
+ "\2\0\3\105\1\0\1\105\7\0\11\105\1\0\4\105"+
+ "\1\0\2\105\1\0\1\105\1\0\3\105\6\0\1\u0187"+
+ "\1\216\1\217\1\216\1\0\1\216\1\u0187\1\0\1\216"+
+ "\1\0\1\216\3\0\2\216\2\0\3\216\1\0\1\216"+
+ "\7\0\1\u0187\2\216\1\u0187\2\216\1\u0187\2\216\1\0"+
+ "\4\216\1\0\1\u0187\1\216\1\0\1\216\1\0\1\u0187"+
+ "\2\216\6\0\2\113\1\222\1\113\1\0\2\113\1\0"+
+ "\1\113\1\0\1\113\3\0\2\113\2\0\3\113\1\223"+
+ "\1\113\7\0\11\113\1\0\4\113\1\0\2\113\1\0"+
+ "\1\113\1\0\3\113\6\0\1\u0188\1\225\1\226\1\225"+
+ "\1\227\1\225\1\u0188\27\225\1\u0188\2\225\1\u0188\2\225"+
+ "\1\u0188\10\225\1\u0188\4\225\1\u0188\7\225\1\0\1\u0189"+
+ "\1\230\1\231\3\230\1\u0189\1\227\26\230\1\u0189\2\230"+
+ "\1\u0189\2\230\1\u0189\10\230\1\u0189\4\230\1\u0189\7\230"+
+ "\1\0\1\u018a\1\235\1\236\1\235\1\0\1\235\1\u018a"+
+ "\1\0\1\235\1\0\1\235\3\0\2\235\2\0\3\235"+
+ "\1\0\1\235\7\0\1\u018a\2\235\1\u018a\2\235\1\u018a"+
+ "\2\235\1\0\4\235\1\0\1\u018a\1\235\1\0\1\235"+
+ "\1\0\1\u018a\2\235\6\0\1\u018b\5\0\1\u018b\3\0"+
+ "\1\367\5\0\1\u018b\5\0\1\u018b\7\0\2\u018b\1\0"+
+ "\2\u018b\1\0\2\u018b\7\0\2\u018b\3\0\2\u018b\7\0"+
+ "\1\u018c\5\0\1\u018c\11\0\1\u018c\5\0\1\u018c\7\0"+
+ "\2\u018c\1\0\2\u018c\1\0\2\u018c\7\0\2\u018c\3\0"+
+ "\2\u018c\7\0\1\u018d\1\u011e\1\u011f\1\u011e\1\0\1\u011e"+
+ "\1\u018d\1\0\1\u011e\1\u0123\13\u011e\1\0\10\u011e\1\u018d"+
+ "\2\u011e\1\u018d\2\u011e\1\u018d\10\u011e\1\u018d\4\u011e\1\u018d"+
+ "\7\u011e\1\0\1\u018e\1\u0121\1\u0149\1\u0121\1\u0146\1\u0121"+
+ "\1\u018e\27\u0121\1\u018e\2\u0121\1\u018e\2\u0121\1\u018e\10\u0121"+
+ "\1\u018e\4\u0121\1\u018e\7\u0121\1\0\2\u0121\1\u0149\2\u0146"+
+ "\1\u0170\2\u0121\1\u0170\1\u018f\4\u0121\2\u0146\52\u0121\1\0"+
+ "\2\u0121\1\u0149\1\0\1\u0146\12\u0121\1\0\52\u0121\1\0"+
+ "\1\u0190\1\u0122\1\u014a\3\u0122\1\u0190\1\u0146\26\u0122\1\u0190"+
+ "\2\u0122\1\u0190\2\u0122\1\u0190\10\u0122\1\u0190\4\u0122\1\u0190"+
+ "\7\u0122\1\0\2\u0122\1\u014a\1\u0146\1\u0122\1\u0173\1\u0122"+
+ "\1\u0146\1\u0173\1\u0191\4\u0122\2\u0146\52\u0122\1\0\2\u0122"+
+ "\1\u014a\1\0\3\u0122\1\u0146\7\u0122\1\0\52\u0122\42\0"+
+ "\2\u0192\30\0\2\134\1\135\1\134\1\0\2\134\1\0"+
+ "\1\134\1\0\1\134\3\0\2\134\2\0\3\134\1\0"+
+ "\1\134\7\0\11\134\1\0\4\134\1\0\2\134\1\0"+
+ "\1\134\1\0\3\134\6\0\2\136\1\137\1\136\1\0"+
+ "\2\136\1\0\1\136\1\0\1\136\3\0\2\136\2\0"+
+ "\3\136\1\0\1\136\7\0\11\136\1\0\4\136\1\0"+
+ "\2\136\1\0\1\136\1\0\3\136\44\0\2\u0193\33\0"+
+ "\1\u0194\1\341\1\342\1\341\1\0\1\341\1\u0194\1\0"+
+ "\1\341\1\u0103\1\341\3\0\2\341\2\0\3\341\1\0"+
+ "\1\341\7\0\1\u0194\2\341\1\u0194\2\341\1\u0194\2\341"+
+ "\1\0\4\341\1\0\1\u0194\1\341\1\0\1\341\1\0"+
+ "\1\u0194\2\341\6\0\2\147\1\150\1\147\1\0\2\147"+
+ "\1\0\1\147\1\0\1\147\3\0\2\147\2\0\3\147"+
+ "\1\260\1\147\7\0\11\147\1\0\4\147\1\0\2\147"+
+ "\1\0\1\147\1\0\3\147\6\0\2\151\1\152\1\151"+
+ "\1\153\65\151\1\0\2\154\1\155\4\154\1\153\62\154"+
+ "\1\0\2\157\1\160\1\157\1\161\65\157\1\0\2\162"+
+ "\1\163\4\162\1\161\62\162\1\0\1\u0195\1\u010a\1\u010b"+
+ "\1\u010a\1\0\1\u010a\1\u0195\1\0\1\u010a\1\u010e\13\u010a"+
+ "\1\0\10\u010a\1\u0195\2\u010a\1\u0195\2\u010a\1\u0195\10\u010a"+
+ "\1\u0195\4\u010a\1\u0195\7\u010a\1\0\1\u0196\1\u010c\1\u0135"+
+ "\1\u010c\1\u0132\1\u010c\1\u0196\27\u010c\1\u0196\2\u010c\1\u0196"+
+ "\2\u010c\1\u0196\10\u010c\1\u0196\4\u010c\1\u0196\7\u010c\1\0"+
+ "\1\u0197\1\u010d\1\u0136\3\u010d\1\u0197\1\u0132\26\u010d\1\u0197"+
+ "\2\u010d\1\u0197\2\u010d\1\u0197\10\u010d\1\u0197\4\u010d\1\u0197"+
+ "\7\u010d\1\0\2\205\1\206\1\205\1\207\65\205\1\0"+
+ "\2\210\1\211\4\210\1\207\62\210\1\0\2\216\1\217"+
+ "\1\216\1\0\2\216\1\0\1\216\1\0\1\216\3\0"+
+ "\2\216\2\0\3\216\1\0\1\216\7\0\11\216\1\0"+
+ "\4\216\1\0\2\216\1\0\1\216\1\0\3\216\6\0"+
+ "\2\225\1\226\1\225\1\227\65\225\1\0\2\230\1\231"+
+ "\4\230\1\227\62\230\1\0\2\235\1\236\1\235\1\0"+
+ "\2\235\1\0\1\235\1\0\1\235\3\0\2\235\2\0"+
+ "\3\235\1\0\1\235\7\0\11\235\1\0\4\235\1\0"+
+ "\2\235\1\0\1\235\1\0\3\235\20\0\1\367\60\0"+
+ "\1\u0198\5\0\1\u0198\11\0\1\u0198\5\0\1\u0198\7\0"+
+ "\2\u0198\1\0\2\u0198\1\0\2\u0198\7\0\2\u0198\3\0"+
+ "\2\u0198\7\0\1\u0199\1\u011e\1\u011f\1\u011e\1\0\1\u011e"+
+ "\1\u0199\1\0\1\u011e\1\u0123\13\u011e\1\0\10\u011e\1\u0199"+
+ "\2\u011e\1\u0199\2\u011e\1\u0199\10\u011e\1\u0199\4\u011e\1\u0199"+
+ "\7\u011e\1\0\1\u019a\1\u0121\1\u0149\1\u0121\1\u0146\1\u0121"+
+ "\1\u019a\27\u0121\1\u019a\2\u0121\1\u019a\2\u0121\1\u019a\10\u0121"+
+ "\1\u019a\4\u0121\1\u019a\7\u0121\1\0\1\u019b\1\u0122\1\u014a"+
+ "\3\u0122\1\u019b\1\u0146\26\u0122\1\u019b\2\u0122\1\u019b\2\u0122"+
+ "\1\u019b\10\u0122\1\u019b\4\u0122\1\u019b\7\u0122\65\0\1\u019c"+
+ "\52\0\2\u019d\25\0\1\u019e\1\341\1\342\1\341\1\0"+
+ "\1\341\1\u019e\1\0\1\341\1\u0103\1\341\3\0\2\341"+
+ "\2\0\3\341\1\0\1\341\7\0\1\u019e\2\341\1\u019e"+
+ "\2\341\1\u019e\2\341\1\0\4\341\1\0\1\u019e\1\341"+
+ "\1\0\1\341\1\0\1\u019e\2\341\6\0\1\u019f\1\u010a"+
+ "\1\u010b\1\u010a\1\0\1\u010a\1\u019f\1\0\1\u010a\1\u010e"+
+ "\13\u010a\1\0\10\u010a\1\u019f\2\u010a\1\u019f\2\u010a\1\u019f"+
+ "\10\u010a\1\u019f\4\u010a\1\u019f\7\u010a\1\0\1\u01a0\1\u010c"+
+ "\1\u0135\1\u010c\1\u0132\1\u010c\1\u01a0\27\u010c\1\u01a0\2\u010c"+
+ "\1\u01a0\2\u010c\1\u01a0\10\u010c\1\u01a0\4\u010c\1\u01a0\7\u010c"+
+ "\1\0\1\u01a1\1\u010d\1\u0136\3\u010d\1\u01a1\1\u0132\26\u010d"+
+ "\1\u01a1\2\u010d\1\u01a1\2\u010d\1\u01a1\10\u010d\1\u01a1\4\u010d"+
+ "\1\u01a1\7\u010d\1\0\1\u01a2\5\0\1\u01a2\11\0\1\u01a2"+
+ "\5\0\1\u01a2\7\0\2\u01a2\1\0\2\u01a2\1\0\2\u01a2"+
+ "\7\0\2\u01a2\3\0\2\u01a2\7\0\1\u01a3\1\u011e\1\u011f"+
+ "\1\u011e\1\0\1\u011e\1\u01a3\1\0\1\u011e\1\u0123\13\u011e"+
+ "\1\0\10\u011e\1\u01a3\2\u011e\1\u01a3\2\u011e\1\u01a3\10\u011e"+
+ "\1\u01a3\4\u011e\1\u01a3\7\u011e\1\0\1\u01a4\1\u0121\1\u0149"+
+ "\1\u0121\1\u0146\1\u0121\1\u01a4\27\u0121\1\u01a4\2\u0121\1\u01a4"+
+ "\2\u0121\1\u01a4\10\u0121\1\u01a4\4\u0121\1\u01a4\7\u0121\1\0"+
+ "\1\u01a5\1\u0122\1\u014a\3\u0122\1\u01a5\1\u0146\26\u0122\1\u01a5"+
+ "\2\u0122\1\u01a5\2\u0122\1\u01a5\10\u0122\1\u01a5\4\u0122\1\u01a5"+
+ "\7\u0122\47\0\1\u01a6\24\0\2\341\1\342\1\341\1\0"+
+ "\2\341\1\0\1\341\1\u0103\1\341\3\0\2\341\2\0"+
+ "\3\341\1\0\1\341\7\0\11\341\1\0\4\341\1\0"+
+ "\2\341\1\0\1\341\1\0\3\341\6\0\1\u01a7\1\u010a"+
+ "\1\u010b\1\u010a\1\0\1\u010a\1\u01a7\1\0\1\u010a\1\u010e"+
+ "\13\u010a\1\0\10\u010a\1\u01a7\2\u010a\1\u01a7\2\u010a\1\u01a7"+
+ "\10\u010a\1\u01a7\4\u010a\1\u01a7\7\u010a\1\0\1\u01a8\1\u010c"+
+ "\1\u0135\1\u010c\1\u0132\1\u010c\1\u01a8\27\u010c\1\u01a8\2\u010c"+
+ "\1\u01a8\2\u010c\1\u01a8\10\u010c\1\u01a8\4\u010c\1\u01a8\7\u010c"+
+ "\1\0\1\u01a9\1\u010d\1\u0136\3\u010d\1\u01a9\1\u0132\26\u010d"+
+ "\1\u01a9\2\u010d\1\u01a9\2\u010d\1\u01a9\10\u010d\1\u01a9\4\u010d"+
+ "\1\u01a9\7\u010d\1\0\1\u01aa\1\u011e\1\u011f\1\u011e\1\0"+
+ "\1\u011e\1\u01aa\1\0\1\u011e\1\u0123\13\u011e\1\0\10\u011e"+
+ "\1\u01aa\2\u011e\1\u01aa\2\u011e\1\u01aa\10\u011e\1\u01aa\4\u011e"+
+ "\1\u01aa\7\u011e\1\0\1\u01ab\1\u0121\1\u0149\1\u0121\1\u0146"+
+ "\1\u0121\1\u01ab\27\u0121\1\u01ab\2\u0121\1\u01ab\2\u0121\1\u01ab"+
+ "\10\u0121\1\u01ab\4\u0121\1\u01ab\7\u0121\1\0\1\u01ac\1\u0122"+
+ "\1\u014a\3\u0122\1\u01ac\1\u0146\26\u0122\1\u01ac\2\u0122\1\u01ac"+
+ "\2\u0122\1\u01ac\10\u0122\1\u01ac\4\u0122\1\u01ac\7\u0122\1\0"+
+ "\2\u010a\1\u010b\1\u010a\1\0\2\u010a\1\0\1\u010a\1\u010e"+
+ "\13\u010a\1\0\44\u010a\1\0\1\u01ad\1\u010c\1\u0135\1\u010c"+
+ "\1\u0132\1\u010c\1\u01ad\27\u010c\1\u01ad\2\u010c\1\u01ad\2\u010c"+
+ "\1\u01ad\10\u010c\1\u01ad\4\u010c\1\u01ad\7\u010c\1\0\1\u01ae"+
+ "\1\u010d\1\u0136\3\u010d\1\u01ae\1\u0132\26\u010d\1\u01ae\2\u010d"+
+ "\1\u01ae\2\u010d\1\u01ae\10\u010d\1\u01ae\4\u010d\1\u01ae\7\u010d"+
+ "\1\0\2\u011e\1\u011f\1\u011e\1\0\2\u011e\1\0\1\u011e"+
+ "\1\u0123\13\u011e\1\0\44\u011e\1\0\1\u01af\1\u0121\1\u0149"+
+ "\1\u0121\1\u0146\1\u0121\1\u01af\27\u0121\1\u01af\2\u0121\1\u01af"+
+ "\2\u0121\1\u01af\10\u0121\1\u01af\4\u0121\1\u01af\7\u0121\1\0"+
+ "\1\u01b0\1\u0122\1\u014a\3\u0122\1\u01b0\1\u0146\26\u0122\1\u01b0"+
+ "\2\u0122\1\u01b0\2\u0122\1\u01b0\10\u0122\1\u01b0\4\u0122\1\u01b0"+
+ "\7\u0122\1\0\2\u010c\1\u0135\1\u010c\1\u0132\65\u010c\1\0"+
+ "\2\u010d\1\u0136\4\u010d\1\u0132\62\u010d\1\0\2\u0121\1\u0149"+
+ "\1\u0121\1\u0146\65\u0121\1\0\2\u0122\1\u014a\4\u0122\1\u0146"+
+ "\62\u0122";
+
+ /**
+ * 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",
+ "Internal error: unknown state",
+ "Error: could not match input",
+ "Error: pushback value was too large"
+ };
+
+ /**
+ * YY_ATTRIBUTE[aState] contains the attributes of state <code>aState</code>
+ */
+ private final static byte YY_ATTRIBUTE[] = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 9, 1, 1, 1, 1, 1, 1, 1, 9, 1, 9, 1, 1,
+ 9, 1, 1, 1, 9, 1, 1, 1, 1, 1, 1, 9, 1, 1, 1, 9,
+ 9, 1, 1, 1, 9, 1, 3, 9, 9, 1, 1, 1, 9, 1, 9, 1,
+ 1, 1, 1, 1, 1, 1, 1, 9, 9, 1, 1, 1, 1, 1, 9, 1,
+ 1, 1, 1, 1, 1, 1, 9, 3, 0, 1, 1, 1, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 9, 0, 0, 0, 0, 0,
+ 9, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 13, 7, 0,
+ 1, 1, 0, 1, 0, 0, 9, 0, 0, 1, 0, 1, 1, 1, 0, 0,
+ 9, 0, 9, 1, 0, 0, 9, 0, 0, 1, 1, 1, 1, 0, 0, 1,
+ 0, 0, 13, 7, 1, 9, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1,
+ 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0,
+ 1, 0, 1, 1, 1, 0, 1, 1, 1, 9, 9, 0, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1,
+ 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 9,
+ 0, 0, 9, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 9, 1, 1,
+ 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0,
+ 0, 0, 9, 0, 1, 1, 1, 0, 0, 9, 0, 0, 1, 0, 0, 0,
+ 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1,
+ 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 9,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
+ 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 1, 9, 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0,
+ 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 9, 0, 0, 0,
+ 0, 9, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ };
+
+ /** 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;
+
+ /* user code: */
+ private final static String UNDEFINED = "undefined";
+ private String fBufferedContext = null;
+ private int fBufferedStart;
+// private int fBufferedTextLength;
+ private int fBufferedLength;
+// private StringBuffer fBufferedText = null;
+ private CSSTextRegionFactory fRegionFactory = CSSTextRegionFactory.getInstance();
+ private int fInitialState = YYINITIAL;
+ public final static int BUFFER_SIZE_NORMAL = 16384;
+ public final static int BUFFER_SIZE_SMALL = 256;
+ private int fInitialBufferSize = BUFFER_SIZE_NORMAL;
+
+ public void setInitialState(int state) {
+ fInitialState = state;
+ }
+
+ public void setInitialBufferSize(int size) {
+ fInitialBufferSize = size;
+ }
+
+ /* user method */
+ public final ITextRegion getNextToken() throws IOException {
+ String context;
+ String nextTokenType;
+ boolean spaceFollows;
+// StringBuffer text;
+ int start;
+ int textLength;
+ int length;
+ if (fBufferedContext != null) {
+ context = fBufferedContext;
+// text = fBufferedText;
+ start = fBufferedStart;
+ textLength = length = fBufferedLength;
+
+ fBufferedContext = null;
+ } else {
+ context = primGetNextToken();
+// text = new StringBuffer(yytext());
+ start = yychar;
+ textLength = length = yylength();
+ }
+
+ if (context != null) {
+ if (context == UNDEFINED) {
+ // undef -> concatenate undef's
+ nextTokenType = primGetNextToken();
+ while (nextTokenType == UNDEFINED) {
+// text.append(yytext());
+ textLength += yylength();
+ length = textLength;
+ nextTokenType = primGetNextToken();
+ }
+ fBufferedContext = nextTokenType;
+// fBufferedText = new StringBuffer(yytext());
+ fBufferedStart = yychar;
+ fBufferedLength = yylength();
+ } else {
+ nextTokenType = null;
+ spaceFollows = false;
+ if (CSSRegionUtil.isDeclarationValueType(context)) { // declaration value can contain VALUE_S
+ nextTokenType = primGetNextToken();
+ spaceFollows = (nextTokenType == CSS_DECLARATION_VALUE_S);
+ } else if (canContainSpace(context)) {
+ nextTokenType = primGetNextToken();
+ spaceFollows = (nextTokenType == CSS_S);
+ }
+ if (nextTokenType != null) { // nextToken is retrieved
+ if (spaceFollows) {
+ // next is space -> append
+// text.append(yytext());
+ length += yylength();
+ } else {
+ // next is NOT space -> push this for next time, return itself
+ fBufferedContext = nextTokenType;
+// fBufferedText = new StringBuffer(yytext());
+ fBufferedStart = yychar;
+ fBufferedLength = yylength();
+ }
+ }
+ }
+ }
+
+ if (context != null) {
+ if (context == UNDEFINED) {
+ context = CSS_UNKNOWN;
+ }
+ return fRegionFactory.createRegion(context, start, textLength, length);
+ } else {
+ return null;
+ }
+ }
+
+ /* user method */
+ /* for standalone use */
+ public final List parseText() throws IOException {
+ List tokens = new ArrayList();
+
+ CSSTextToken token;
+ for (String kind = primGetNextToken(); kind != null; kind = primGetNextToken()) {
+ token = new CSSTextToken();
+ token.kind = kind;
+ token.start = yychar;
+ token.length = yylength();
+ token.image = yytext();
+ tokens.add(token);
+ }
+
+ return tokens;
+ }
+
+ /* user method */
+ private boolean canContainSpace(String type) {
+ if (type == CSS_DELIMITER || type == CSS_RBRACE || type == CSS_DECLARATION_DELIMITER) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ /* user method */
+ public final int getOffset() {
+ return yychar;
+ }
+
+ /* user method */
+ public final boolean isEOF() {
+ return yy_atEOF;
+ }
+
+ /* user method */
+ public void reset(char[] charArray) {
+ reset(new CharArrayReader(charArray), 0);
+ }
+
+ /* user method */
+ public final void reset(java.io.Reader in, int newOffset) {
+ /** the input device */
+ yy_reader = in;
+
+ /** the current state of the DFA */
+ yy_state = 0;
+
+ /** the current lexical state */
+ yy_lexical_state = fInitialState; //YYINITIAL;
+
+ /** this buffer contains the current text to be matched and is
+ the source of the yytext() string */
+ if (yy_buffer.length != fInitialBufferSize) {
+ yy_buffer = new char[fInitialBufferSize];
+ }
+ 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;
+
+ /**
+ * the number of characters from the last newline up to the start of the
+ * matched text
+ */
+ yycolumn = 0;
+
+ /**
+ * yy_atBOL == true <=> the scanner is currently at the beginning of a line
+ */
+ yy_atBOL = false;
+
+ /** yy_atEOF == true <=> the scanner has returned a value for EOF */
+ yy_atEOF = false;
+
+ /* user variables */
+ // fUndefined.delete(0, fUndefined.length());
+ }
+
+ /* user method */
+ public CSSTokenizer() {
+ super();
+ }
+
+
+
+ /**
+ * 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 CSSTokenizer(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 CSSTokenizer(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[21004];
+ int i = 0; /* index in packed string */
+ int j = 0; /* index in unpacked array */
+ while (i < 13906) {
+ 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 < 170) {
+ 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.
+ *
+ * @param errorCode the code of the errormessage to display
+ */
+ private void yy_ScanError(int errorCode) {
+ try {
+ System.out.println(YY_ERROR_MSG[errorCode]);
+ }
+ catch (ArrayIndexOutOfBoundsException e) {
+ System.out.println(YY_ERROR_MSG[YY_UNKNOWN_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()!
+ */
+ private void yypushback(int number) {
+ if ( number > yylength() )
+ yy_ScanError(YY_PUSHBACK_2BIG);
+
+ yy_markedPos -= number;
+ }
+
+
+ /**
+ * 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 421:
+ { yybegin(ST_DECLARATION_VALUE); return CSS_DECLARATION_VALUE_IMPORTANT; }
+ case 433: break;
+ case 412:
+ { yybegin(ST_FONT_FACE_DELIMITER); return CSS_FONT_FACE; }
+ case 434: break;
+ case 375:
+ { yybegin(ST_CHARSET_NAME); return CSS_CHARSET; }
+ case 435: break;
+ case 335:
+ { yybegin(ST_IMPORT_URI); return CSS_IMPORT; }
+ case 436: break;
+ case 297:
+ { yybegin(ST_MEDIA_MEDIUM); return CSS_MEDIA; }
+ case 437: break;
+ case 290:
+ case 327:
+ case 398:
+ case 400:
+ { yybegin(ST_DECLARATION_VALUE); return CSS_DECLARATION_VALUE_URI; }
+ case 438: break;
+ case 269:
+ case 307:
+ case 385:
+ case 387:
+ { yybegin(ST_IMPORT_MEDIUM); return CSS_URI; }
+ case 439: break;
+ case 255:
+ { yybegin(ST_PAGE_PSEUDO_PAGE); return CSS_PAGE; }
+ case 440: break;
+ case 218:
+ { return CSS_COMMENT; }
+ case 441: break;
+ case 217:
+ { return CSS_CDO; }
+ case 442: break;
+ case 211:
+ case 245:
+ case 283:
+ case 284:
+ case 323:
+ case 324:
+ case 363:
+ case 364:
+ case 394:
+ case 395:
+ case 407:
+ case 417:
+ { yybegin(ST_DECLARATION_VALUE); return CSS_DECLARATION_VALUE_UNICODE_RANGE; }
+ case 443: break;
+ case 165:
+ { return CSS_CDC; }
+ case 444: break;
+ case 162:
+ { return CSS_DECLARATION_VALUE_S; }
+ case 445: break;
+ case 156:
+ case 210:
+ case 244:
+ case 282:
+ case 322:
+ case 362:
+ case 393:
+ { yybegin(ST_DECLARATION_VALUE); return CSS_DECLARATION_VALUE_HASH; }
+ case 446: break;
+ case 150:
+ case 205:
+ case 208:
+ { yybegin(ST_DECLARATION_VALUE); return CSS_DECLARATION_VALUE_STRING; }
+ case 447: break;
+ case 57:
+ case 59:
+ case 128:
+ case 129:
+ case 193:
+ case 235:
+ case 273:
+ case 313:
+ case 353:
+ { yybegin(ST_SELECTOR_ATTRIBUTE_OPERATOR); return CSS_SELECTOR_ATTRIBUTE_NAME; }
+ case 448: break;
+ case 56:
+ { yybegin(ST_SELECTOR); return CSS_SELECTOR_SEPARATOR; }
+ case 449: break;
+ case 55:
+ case 125:
+ { yybegin(ST_SELECTOR); return CSS_SELECTOR_COMBINATOR; }
+ case 450: break;
+ case 52:
+ { yybegin(ST_DECLARATION); return CSS_LBRACE; }
+ case 451: break;
+ case 49:
+ case 51:
+ case 123:
+ case 124:
+ case 192:
+ case 234:
+ case 272:
+ case 312:
+ case 352:
+ { yybegin(ST_PAGE_DELIMITER); return CSS_PAGE_SELECTOR; }
+ case 452: break;
+ case 48:
+ { yybegin(YYINITIAL); return CSS_LBRACE; }
+ case 453: break;
+ case 47:
+ { yybegin(ST_MEDIA_MEDIUM); return CSS_MEDIA_SEPARATOR; }
+ case 454: break;
+ case 44:
+ case 46:
+ case 120:
+ case 121:
+ case 191:
+ case 233:
+ case 271:
+ case 311:
+ case 351:
+ { yybegin(ST_MEDIA_DELIMITER); return CSS_MEDIUM; }
+ case 455: break;
+ case 43:
+ { yybegin(ST_IMPORT_MEDIUM); return CSS_MEDIA_SEPARATOR; }
+ case 456: break;
+ case 20:
+ case 23:
+ case 89:
+ case 90:
+ case 164:
+ case 214:
+ case 249:
+ case 292:
+ case 331:
+ { yybegin(ST_SELECTOR_MODIFIER); return CSS_SELECTOR_ELEMENT_NAME; }
+ case 457: break;
+ case 22:
+ case 54:
+ case 87:
+ case 126:
+ case 163:
+ { return CSS_S; }
+ case 458: break;
+ case 27:
+ { yybegin(YYINITIAL); return CSS_RBRACE; }
+ case 459: break;
+ case 29:
+ { yybegin(ST_SELECTOR_MODIFIER); return CSS_SELECTOR_UNIVERSAL; }
+ case 460: break;
+ case 32:
+ { yybegin(ST_SELECTOR_ATTRIBUTE_NAME); return CSS_SELECTOR_ATTRIBUTE_START; }
+ case 461: break;
+ case 36:
+ { yybegin(YYINITIAL); return CSS_DELIMITER; }
+ case 462: break;
+ case 40:
+ case 42:
+ case 117:
+ case 118:
+ case 190:
+ case 232:
+ case 270:
+ case 310:
+ case 350:
+ { yybegin(ST_IMPORT_DELIMITER); return CSS_MEDIUM; }
+ case 463: break;
+ case 60:
+ { yybegin(ST_SELECTOR_ATTRIBUTE_VALUE); return CSS_SELECTOR_ATTRIBUTE_OPERATOR; }
+ case 464: break;
+ case 62:
+ { yybegin(ST_SELECTOR_MODIFIER); return CSS_SELECTOR_ATTRIBUTE_END; }
+ case 465: break;
+ case 63:
+ case 67:
+ case 131:
+ case 134:
+ case 137:
+ case 194:
+ case 196:
+ case 199:
+ case 236:
+ case 274:
+ case 314:
+ case 354:
+ { yybegin(ST_SELECTOR_ATTRIBUTE_END); return CSS_SELECTOR_ATTRIBUTE_VALUE; }
+ case 466: break;
+ case 68:
+ case 70:
+ case 139:
+ case 140:
+ case 201:
+ case 239:
+ case 277:
+ case 317:
+ case 357:
+ { yybegin(ST_DECLARATION_SEPARATOR); return CSS_DECLARATION_PROPERTY; }
+ case 467: break;
+ case 71:
+ { yybegin(ST_DECLARATION); return CSS_DECLARATION_DELIMITER; }
+ case 468: break;
+ case 72:
+ { yybegin(ST_DECLARATION_PRE_VALUE); return CSS_DECLARATION_SEPARATOR; }
+ case 469: break;
+ case 73:
+ case 155:
+ { yybegin(ST_DECLARATION_VALUE); return CSS_DECLARATION_VALUE_NUMBER; }
+ case 470: break;
+ case 74:
+ case 79:
+ case 83:
+ case 147:
+ case 153:
+ case 154:
+ case 159:
+ case 203:
+ case 212:
+ case 241:
+ case 279:
+ case 319:
+ case 359:
+ { yybegin(ST_DECLARATION_VALUE); return CSS_DECLARATION_VALUE_IDENT; }
+ case 471: break;
+ case 78:
+ { yybegin(ST_DECLARATION_VALUE); return CSS_DECLARATION_VALUE_PARENTHESIS_CLOSE; }
+ case 472: break;
+ case 85:
+ case 86:
+ { yybegin(ST_DECLARATION_VALUE); return CSS_DECLARATION_VALUE_OPERATOR; }
+ case 473: break;
+ case 91:
+ case 166:
+ case 215:
+ case 250:
+ case 293:
+ case 332:
+ case 373:
+ { yybegin(ST_SELECTOR_MODIFIER); return CSS_SELECTOR_CLASS; }
+ case 474: break;
+ case 93:
+ case 167:
+ case 216:
+ case 251:
+ case 294:
+ case 333:
+ case 374:
+ { yybegin(ST_SELECTOR_MODIFIER); return CSS_SELECTOR_ID; }
+ case 475: break;
+ case 102:
+ case 176:
+ case 226:
+ case 258:
+ case 260:
+ case 300:
+ case 338:
+ case 378:
+ { yybegin(ST_SELECTOR_MODIFIER); return CSS_SELECTOR_PSEUDO; }
+ case 476: break;
+ case 106:
+ case 178:
+ case 181:
+ { yybegin(ST_CHARSET_DELIMITER); return CSS_STRING; }
+ case 477: break;
+ case 112:
+ case 184:
+ case 187:
+ { yybegin(ST_IMPORT_MEDIUM); return CSS_STRING; }
+ case 478: break;
+ case 141:
+ case 202:
+ case 240:
+ case 278:
+ case 318:
+ case 358:
+ case 390:
+ { yybegin(ST_DECLARATION_VALUE); return CSS_DECLARATION_VALUE_DIMENSION; }
+ case 479: break;
+ case 144:
+ { yybegin(ST_DECLARATION_VALUE); return CSS_DECLARATION_VALUE_PERCENTAGE; }
+ case 480: break;
+ case 146:
+ case 247:
+ { yybegin(ST_DECLARATION_VALUE); return CSS_DECLARATION_VALUE_FUNCTION; }
+ case 481: break;
+ case 19:
+ case 21:
+ case 24:
+ case 25:
+ case 26:
+ case 28:
+ case 30:
+ case 31:
+ case 33:
+ case 34:
+ case 35:
+ case 37:
+ case 38:
+ case 39:
+ case 41:
+ case 45:
+ case 50:
+ case 53:
+ case 58:
+ case 61:
+ case 64:
+ case 65:
+ case 66:
+ case 69:
+ case 75:
+ case 76:
+ case 77:
+ case 80:
+ case 81:
+ case 82:
+ case 84:
+ {
+ return UNDEFINED;
+ }
+ case 482: break;
+ default:
+ if (yy_input == YYEOF && yy_startRead == yy_currentPos) {
+ yy_atEOF = true;
+ return null;
+ }
+ else {
+ yy_ScanError(YY_NO_MATCH);
+ }
+ }
+ }
+ }
+
+ /**
+ * Runs the scanner on input files.
+ *
+ * This main method is the debugging routine for the scanner.
+ * It prints each returned token to System.out until the end of
+ * file is reached, or an error occured.
+ *
+ * @param argv the command line, contains the filenames to run
+ * the scanner on.
+ */
+ public static void main(String argv[]) {
+ for (int i = 0; i < argv.length; i++) {
+ CSSTokenizer scanner = null;
+ try {
+ scanner = new CSSTokenizer( new java.io.FileReader(argv[i]) );
+ }
+ catch (java.io.FileNotFoundException e) {
+ System.out.println("File not found : \""+argv[i]+"\"");
+ System.exit(1);
+ }
+ catch (java.io.IOException e) {
+ System.out.println("Error opening file \""+argv[i]+"\"");
+ System.exit(1);
+ }
+ catch (ArrayIndexOutOfBoundsException e) {
+ System.out.println("Usage : java CSSTokenizer <inputfile>");
+ System.exit(1);
+ }
+
+ try {
+ do {
+ System.out.println(scanner.primGetNextToken());
+ } while (!scanner.yy_atEOF);
+
+ }
+ catch (java.io.IOException e) {
+ System.out.println("An I/O error occured while scanning :");
+ System.out.println(e);
+ System.exit(1);
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ System.exit(1);
+ }
+ }
+ }
+
+
+}
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/CSSTokenizer/devel/CSSTokenizer.jflex b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/CSSTokenizer/devel/CSSTokenizer.jflex
new file mode 100644
index 0000000..f6cac38
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/CSSTokenizer/devel/CSSTokenizer.jflex
@@ -0,0 +1,495 @@
+/*******************************************************************************
+ * Copyright (c) 2004 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
+ *******************************************************************************/
+/*nlsXXX*/
+package org.eclipse.wst.sse.core.css.internal.parser;
+
+import java.io.CharArrayReader;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.wst.sse.core.css.internal.parser.regions.CSSTextRegionFactory;
+import org.eclipse.wst.sse.core.css.parser.CSSRegionContexts;
+import org.eclipse.wst.sse.core.css.parser.CSSTextToken;
+import org.eclipse.wst.sse.core.text.ITextRegion;
+
+%%
+
+%public
+%class CSSTokenizer
+%implements CSSRegionContexts
+%function primGetNextToken
+%type String
+%char
+%line
+%unicode
+%caseless
+%debug
+%pack
+
+%{
+ private final static String UNDEFINED = "undefined";
+ private String fBufferedContext = null;
+ private int fBufferedStart;
+// private int fBufferedTextLength;
+ private int fBufferedLength;
+// private StringBuffer fBufferedText = null;
+ private CSSTextRegionFactory fRegionFactory = CSSTextRegionFactory.getInstance();
+ private int fInitialState = YYINITIAL;
+ public final static int BUFFER_SIZE_NORMAL = 16384;
+ public final static int BUFFER_SIZE_SMALL = 256;
+ private int fInitialBufferSize = BUFFER_SIZE_NORMAL;
+
+ public void setInitialState(int state) {
+ fInitialState = state;
+ }
+
+ public void setInitialBufferSize(int size) {
+ fInitialBufferSize = size;
+ }
+
+ /* user method */
+ public final ITextRegion getNextToken() throws IOException {
+ String context;
+ String nextTokenType;
+ boolean spaceFollows;
+// StringBuffer text;
+ int start;
+ int textLength;
+ int length;
+ if (fBufferedContext != null) {
+ context = fBufferedContext;
+// text = fBufferedText;
+ start = fBufferedStart;
+ textLength = length = fBufferedLength;
+
+ fBufferedContext = null;
+ } else {
+ context = primGetNextToken();
+// text = new StringBuffer(yytext());
+ start = yychar;
+ textLength = length = yylength();
+ }
+
+ if (context != null) {
+ if (context == UNDEFINED) {
+ // undef -> concatenate undef's
+ nextTokenType = primGetNextToken();
+ while (nextTokenType == UNDEFINED) {
+// text.append(yytext());
+ textLength += yylength();
+ length = textLength;
+ nextTokenType = primGetNextToken();
+ }
+ fBufferedContext = nextTokenType;
+// fBufferedText = new StringBuffer(yytext());
+ fBufferedStart = yychar;
+ fBufferedLength = yylength();
+ } else {
+ nextTokenType = null;
+ spaceFollows = false;
+ if (CSSRegionUtil.isDeclarationValueType(context)) { // declaration value can contain VALUE_S
+ nextTokenType = primGetNextToken();
+ spaceFollows = (nextTokenType == CSS_DECLARATION_VALUE_S);
+ } else if (canContainSpace(context)) {
+ nextTokenType = primGetNextToken();
+ spaceFollows = (nextTokenType == CSS_S);
+ }
+ if (nextTokenType != null) { // nextToken is retrieved
+ if (spaceFollows) {
+ // next is space -> append
+// text.append(yytext());
+ length += yylength();
+ } else {
+ // next is NOT space -> push this for next time, return itself
+ fBufferedContext = nextTokenType;
+// fBufferedText = new StringBuffer(yytext());
+ fBufferedStart = yychar;
+ fBufferedLength = yylength();
+ }
+ }
+ }
+ }
+
+ if (context != null) {
+ if (context == UNDEFINED) {
+ context = CSS_UNKNOWN;
+ }
+ return fRegionFactory.createRegion(context, start, textLength, length);
+ } else {
+ return null;
+ }
+ }
+
+ /* user method */
+ /* for standalone use */
+ public final List parseText() throws IOException {
+ List tokens = new ArrayList();
+
+ CSSTextToken token;
+ for (String kind = primGetNextToken(); kind != null; kind = primGetNextToken()) {
+ token = new CSSTextToken();
+ token.kind = kind;
+ token.start = yychar;
+ token.length = yylength();
+ token.image = yytext();
+ tokens.add(token);
+ }
+
+ return tokens;
+ }
+
+ /* user method */
+ private boolean canContainSpace(String type) {
+ if (type == CSS_DELIMITER || type == CSS_RBRACE || type == CSS_DECLARATION_DELIMITER) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ /* user method */
+ public final int getOffset() {
+ return yychar;
+ }
+
+ /* user method */
+ public final boolean isEOF() {
+ return yy_atEOF;
+ }
+
+ /* user method */
+ public void reset(char[] charArray) {
+ reset(new CharArrayReader(charArray), 0);
+ }
+
+ /* user method */
+ public final void reset(java.io.Reader in, int newOffset) {
+ /** the input device */
+ yy_reader = in;
+
+ /** the current state of the DFA */
+ yy_state = 0;
+
+ /** the current lexical state */
+ yy_lexical_state = fInitialState; //YYINITIAL;
+
+ /** this buffer contains the current text to be matched and is
+ the source of the yytext() string */
+ if (yy_buffer.length != fInitialBufferSize) {
+ yy_buffer = new char[fInitialBufferSize];
+ }
+ 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;
+
+ /**
+ * the number of characters from the last newline up to the start of the
+ * matched text
+ */
+ yycolumn = 0;
+
+ /**
+ * yy_atBOL == true <=> the scanner is currently at the beginning of a line
+ */
+ yy_atBOL = false;
+
+ /** yy_atEOF == true <=> the scanner has returned a value for EOF */
+ yy_atEOF = false;
+
+ /* user variables */
+ // fUndefined.delete(0, fUndefined.length());
+ }
+
+ /* user method */
+ public CSSTokenizer() {
+ super();
+ }
+
+%}
+
+%state ST_CHARSET_NAME
+%state ST_CHARSET_DELIMITER
+%state ST_IMPORT_URI
+%state ST_IMPORT_MEDIUM
+%state ST_IMPORT_DELIMITER
+%state ST_MEDIA_MEDIUM
+%state ST_MEDIA_DELIMITER
+%state ST_PAGE_PSEUDO_PAGE
+%state ST_PAGE_DELIMITER
+%state ST_FONT_FACE_DELIMITER
+%state ST_SELECTOR
+%state ST_SELECTOR_MODIFIER
+%state ST_SELECTOR_ATTRIBUTE_NAME
+%state ST_SELECTOR_ATTRIBUTE_OPERATOR
+%state ST_SELECTOR_ATTRIBUTE_VALUE
+%state ST_SELECTOR_ATTRIBUTE_END
+%state ST_DECLARATION
+%state ST_DECLARATION_SEPARATOR
+%state ST_DECLARATION_PRE_VALUE
+%state ST_DECLARATION_VALUE
+
+h = [0-9a-f]
+nonascii = [\u0080-\uffff]
+unicode = \\{h}{1,6}[ \t\r\n\f]?
+escape = {unicode}|\\[ -~\u0080-\uffff]
+nmstart = [_a-zA-Z-]|{nonascii}|{escape}
+nmchar = [_a-zA-Z0-9-]|{nonascii}|{escape}
+string1 = \"([\t !#$%&(-~]|\\{nl}|\'|{nonascii}|{escape})*\"
+string2 = \'([\t !#$%&(-~]|\\{nl}|\"|{nonascii}|{escape})*\'
+
+ident = {nmstart}{nmchar}*
+name = {nmchar}+
+num = [+-]?([0-9]+|[0-9]*"."[0-9]+)
+string = {string1}|{string2}
+url = ([ !#$%&*-~]|{nonascii}|{escape})*
+s = [ \t\r\n\f]
+w = {s}*
+nl = \n|\r\n|\r|\f
+range = \?{1,6}|{h}(\?{0,5}|{h}(\?{0,4}|{h}(\?{0,3}|{h}(\?{0,2}|{h}(\??|{h})))))
+
+hash = "#"{name}
+uri = ("url("{w}{string}{w}")"|"url("{w}{url}{w}")")
+function = {ident}"("
+unicode_range = "U"\+[0-9a-fA-F?]{1,6}("-"[0-9a-fA-F?]{1,6})?
+
+%%
+
+/*
+ * *** global ***
+ */
+
+{s}+ { return CSS_S; }
+"<!--" { return CSS_CDO; }
+"-->" { return CSS_CDC; }
+"}" { yybegin(YYINITIAL); return CSS_RBRACE; }
+\/\*[^*]*\*+([^/*][^*]*\*+)*\/ { return CSS_COMMENT; }
+
+//<YYINITIAL> {
+// "@import" { yybegin(ST_IMPORT_URI); return CSS_IMPORT; }
+//}
+
+/*
+ * *** charset rule ***
+ * CHARSET_SYM S* STRING S* ';'
+ */
+
+"@charset" { yybegin(ST_CHARSET_NAME); return CSS_CHARSET; }
+
+<ST_CHARSET_NAME> {
+ {string} { yybegin(ST_CHARSET_DELIMITER); return CSS_STRING; }
+}
+
+<ST_CHARSET_DELIMITER> {
+ ";" { yybegin(YYINITIAL); return CSS_DELIMITER; }
+}
+
+/*
+ * *** import rule ***
+ * IMPORT_SYM S* [STRING|URI] S* [ medium [ COMMA S* medium]* ]? ';' S*
+ */
+
+"@import" { yybegin(ST_IMPORT_URI); return CSS_IMPORT; }
+
+<ST_IMPORT_URI> {
+ {string} { yybegin(ST_IMPORT_MEDIUM); return CSS_STRING; }
+ // "url("{w}{string}{w}")" { yybegin(ST_IMPORT_MEDIUM); return CSS_URI; }
+ // "url("{w}{url}{w}")" { yybegin(ST_IMPORT_MEDIUM); return CSS_URI; }
+ {uri} { yybegin(ST_IMPORT_MEDIUM); return CSS_URI; }
+ ";" { yybegin(YYINITIAL); return CSS_DELIMITER; }
+}
+
+<ST_IMPORT_MEDIUM> {
+ {ident} { yybegin(ST_IMPORT_DELIMITER); return CSS_MEDIUM; }
+ ";" { yybegin(YYINITIAL); return CSS_DELIMITER; }
+}
+
+<ST_IMPORT_DELIMITER> {
+ ";" { yybegin(YYINITIAL); return CSS_DELIMITER; }
+ "," { yybegin(ST_IMPORT_MEDIUM); return CSS_MEDIA_SEPARATOR; }
+}
+
+/*
+ * *** media rule ***
+ * MEDIA_SYM S* medium [ COMMA S* medium ]* LBRACE S* ruleset* '}' S*
+ */
+
+"@media" { yybegin(ST_MEDIA_MEDIUM); return CSS_MEDIA; }
+
+/*
+ * medium
+ * IDENT S*
+ */
+<ST_MEDIA_MEDIUM> {
+ {ident} { yybegin(ST_MEDIA_DELIMITER); return CSS_MEDIUM; }
+}
+
+<ST_MEDIA_DELIMITER> {
+ "{" { yybegin(YYINITIAL); return CSS_LBRACE; }
+ "," { yybegin(ST_MEDIA_MEDIUM); return CSS_MEDIA_SEPARATOR; }
+}
+
+/*
+ * *** page rule **
+ * PAGE_SYM S* pseudo_page? S* LBRACE S* declaration [ ';' S* declaration ]* '}' S*
+ */
+
+"@page" { yybegin(ST_PAGE_PSEUDO_PAGE); return CSS_PAGE; }
+
+/*
+ * pseudo_page
+ * ':' IDENT
+ */
+
+<ST_PAGE_PSEUDO_PAGE> {
+ ":"?{ident} { yybegin(ST_PAGE_DELIMITER); return CSS_PAGE_SELECTOR; }
+ "{" { yybegin(ST_DECLARATION); return CSS_LBRACE; }
+}
+
+<ST_PAGE_DELIMITER> {
+ "{" { yybegin(ST_DECLARATION); return CSS_LBRACE; }
+}
+
+/*
+ * font-face
+ * FONT_FACE_SYM S* '{' S* declaration [ ';' S* declaration '* '}' S*
+ */
+
+"@font-face" { yybegin(ST_FONT_FACE_DELIMITER); return CSS_FONT_FACE; }
+
+<ST_FONT_FACE_DELIMITER> {
+ "{" { yybegin(ST_DECLARATION); return CSS_LBRACE; }
+}
+
+/*
+ * selector
+ * simple_selector [ combinator simple_selector ]*
+ */
+
+/*
+ * simple_selector
+ * element_name [ HASH | class | attrib | pseudo ]* | [ HASH | class | attrib | pseudo ]+
+ */
+
+<YYINITIAL, ST_SELECTOR_MODIFIER, ST_SELECTOR> {
+ "*" { yybegin(ST_SELECTOR_MODIFIER); return CSS_SELECTOR_UNIVERSAL; }
+ {hash} { yybegin(ST_SELECTOR_MODIFIER); return CSS_SELECTOR_ID; }
+// ":"{ident} { yybegin(ST_SELECTOR_MODIFIER); return CSS_SELECTOR_PSEUDO; }
+ ":"{ident}("("{s}*{ident}{s}*")")? { yybegin(ST_SELECTOR_MODIFIER); return CSS_SELECTOR_PSEUDO; }
+ "."{name} { yybegin(ST_SELECTOR_MODIFIER); return CSS_SELECTOR_CLASS; }
+ "[" { yybegin(ST_SELECTOR_ATTRIBUTE_NAME); return CSS_SELECTOR_ATTRIBUTE_START; }
+}
+
+<YYINITIAL, ST_SELECTOR> {
+ {ident} { yybegin(ST_SELECTOR_MODIFIER); return CSS_SELECTOR_ELEMENT_NAME; }
+}
+
+<ST_SELECTOR_MODIFIER> {
+ "," { yybegin(ST_SELECTOR); return CSS_SELECTOR_SEPARATOR; }
+ // using LOOKAHEAD
+ {s}+/[^+>\{] { yybegin(ST_SELECTOR); return CSS_SELECTOR_COMBINATOR; }
+ "+"|">" { yybegin(ST_SELECTOR); return CSS_SELECTOR_COMBINATOR; }
+ "{" { yybegin(ST_DECLARATION); return CSS_LBRACE; }
+}
+
+/*
+ * attrib
+ * '[' S* IDENT S* [ [ '=' | INCLUDES | DASHMATCH ] S* [ IDENT | STRING ] S* ]? ']'
+ */
+
+<ST_SELECTOR_ATTRIBUTE_NAME> {
+ {ident} { yybegin(ST_SELECTOR_ATTRIBUTE_OPERATOR); return CSS_SELECTOR_ATTRIBUTE_NAME; }
+}
+
+<ST_SELECTOR_ATTRIBUTE_OPERATOR> {
+ "="|"~="|"|=" { yybegin(ST_SELECTOR_ATTRIBUTE_VALUE); return CSS_SELECTOR_ATTRIBUTE_OPERATOR; }
+ "]" { yybegin(ST_SELECTOR_MODIFIER); return CSS_SELECTOR_ATTRIBUTE_END; }
+}
+
+<ST_SELECTOR_ATTRIBUTE_VALUE> {
+ {ident}|{string} { yybegin(ST_SELECTOR_ATTRIBUTE_END); return CSS_SELECTOR_ATTRIBUTE_VALUE; }
+}
+
+<ST_SELECTOR_ATTRIBUTE_END> {
+ "]" { yybegin(ST_SELECTOR_MODIFIER); return CSS_SELECTOR_ATTRIBUTE_END; }
+}
+
+/*
+ * declaration
+ * property ':' S* expr prio? | // empty //
+ */
+
+<ST_DECLARATION> {
+ {ident} { yybegin(ST_DECLARATION_SEPARATOR); return CSS_DECLARATION_PROPERTY; }
+}
+
+<ST_DECLARATION_SEPARATOR> {
+ ":" { yybegin(ST_DECLARATION_PRE_VALUE); return CSS_DECLARATION_SEPARATOR; }
+}
+
+<ST_DECLARATION_PRE_VALUE, ST_DECLARATION_VALUE> {
+ "!"{s}*"important" { yybegin(ST_DECLARATION_VALUE); return CSS_DECLARATION_VALUE_IMPORTANT; }
+ {ident} { yybegin(ST_DECLARATION_VALUE); return CSS_DECLARATION_VALUE_IDENT; }
+ ")" { yybegin(ST_DECLARATION_VALUE); return CSS_DECLARATION_VALUE_PARENTHESIS_CLOSE; }
+ {num}{ident} { yybegin(ST_DECLARATION_VALUE); return CSS_DECLARATION_VALUE_DIMENSION; }
+ {num}"%" { yybegin(ST_DECLARATION_VALUE); return CSS_DECLARATION_VALUE_PERCENTAGE; }
+ {num} { yybegin(ST_DECLARATION_VALUE); return CSS_DECLARATION_VALUE_NUMBER; }
+ {function} { yybegin(ST_DECLARATION_VALUE); return CSS_DECLARATION_VALUE_FUNCTION; }
+ {string} { yybegin(ST_DECLARATION_VALUE); return CSS_DECLARATION_VALUE_STRING; }
+ {uri} { yybegin(ST_DECLARATION_VALUE); return CSS_DECLARATION_VALUE_URI; }
+ "#"{name} { yybegin(ST_DECLARATION_VALUE); return CSS_DECLARATION_VALUE_HASH; }
+ {unicode_range} { yybegin(ST_DECLARATION_VALUE); return CSS_DECLARATION_VALUE_UNICODE_RANGE; }
+ [,/] { yybegin(ST_DECLARATION_VALUE); return CSS_DECLARATION_VALUE_OPERATOR; }
+}
+
+<ST_DECLARATION_VALUE> {
+ {s}+/[^;}] { return CSS_DECLARATION_VALUE_S; }
+}
+
+<ST_DECLARATION, ST_DECLARATION_SEPARATOR, ST_DECLARATION_PRE_VALUE, ST_DECLARATION_VALUE> {
+ ";" { yybegin(ST_DECLARATION); return CSS_DECLARATION_DELIMITER; }
+ // "}" { yybegin(YYINITIAL); return CSS_RBRACE; }
+}
+
+
+//<YYINITIAL, ST_IMPORT_URI, ST_IMPORT_MEDIUM, ST_IMPORT_DELIMITER> {
+// \/\*[^*]*\*+([^/*][^*]*\*+)*\/ { return CSS_COMMENT; }
+// {s}+ { return CSS_S; }
+// . { return UNDEFINED; }
+//}
+
+//<YYINITIAL, ST_IMPORT_URI, ST_IMPORT_MEDIUM, ST_IMPORT_DELIMITER> {
+// [^ \t\r\n\f]+ { return CSS_UNKNOWN; }
+//}
+
+. {
+ return UNDEFINED;
+}
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/CSSTokenizer/devel/flex.cmd b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/CSSTokenizer/devel/flex.cmd
new file mode 100644
index 0000000..30fce78
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/CSSTokenizer/devel/flex.cmd
@@ -0,0 +1,7 @@
+@echo off
+set PATH=%PATH%;c:\jdk1.4\bin
+java -Xmx470000000 -cp JFlex\lib\sed-jflex.jar;. JFlex.Main JSPTokenizer -skel skeleton.sed
+java -Xmx470000000 -cp JFlex\lib\sed-jflex.jar;. JFlex.Main XMLTokenizer -skel skeleton.sed
+rm -f JSPTokenizer.java~ JSPTokenizer~ XMLTokenizer.java~ XMLTokenizer~
+copy XMLTokenizer.java ..\..\..\..\sedmodel\com\ibm\sed\parser\internal
+copy JSPTokenizer.java ..\..\..\..\sedmodel\com\ibm\sed\parser\internal
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/CSSTokenizer/devel/flex.sh b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/CSSTokenizer/devel/flex.sh
new file mode 100644
index 0000000..f7872f3
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/CSSTokenizer/devel/flex.sh
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+JAVADIR=C:/App/IBM/Java141/bin
+JAVAOPT=-Xmx470000000
+CLASSPATH=../../HTMLTokenizer/devel/JFlex/lib/sed-jflex.jar\;.
+DESTDIR=../../../../../org.eclipse.wst.sse.core.css/src/com/ibm/sse/model/css/internal/parser
+
+#export PATH=$PATH:/opt/IBMJava2-131/bin/:/opt/IBMJava2-13/bin/:/opt/jdk1.4
+#java -Xmx470000000 -cp JFlex/lib/sed-jflex.jar;. JFlex.Main CSSTokenizer -skel skeleton.sse
+
+$JAVADIR/java $JAVAOPT -cp $CLASSPATH JFlex.Main CSSTokenizer.jflex
+
+rm -f CSSTokenizer.java~ CSSTokenizer.jflex~
+cp -v CSSTokenizer.java $DESTDIR
+#$JAVADIR/javac $DESTDIR/*.java
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/HTMLTokenizer/README b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/HTMLTokenizer/README
new file mode 100644
index 0000000..8bbbc73
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/HTMLTokenizer/README
@@ -0,0 +1,11 @@
+devel - the active development environment (sans JDK)
+ - latest version of HTMLTokenizer specification and generated code
+ - slightly updated JAR file to avoid any possible as-shipped
+ compilation errors
+ - modified skeleton to prevent VM exits on unmatched input
+ - "flex" scripts to run JFlex with modified skeleton and updated JAR
+ - active RCS archive
+resources - backup/pristine resources
+ - Unmodified JFlex 1.2.2 download
+ - Separate modifications to the JFlex skeleton
+ - W3C XML recommendation used for several of the HTMLTokenizer rules
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/HTMLTokenizer/devel/JFlex/COPYRIGHT b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/HTMLTokenizer/devel/JFlex/COPYRIGHT
new file mode 100644
index 0000000..aad1dec
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/HTMLTokenizer/devel/JFlex/COPYRIGHT
@@ -0,0 +1,303 @@
+JFlex - Copying, Warranty & License
+
+
+
+JFlex is free software, published under the terms of the GNU General Public License.
+
+There is absolutely NO WARRANTY for JFlex, its code and its documentation.
+
+The code generated by JFlex inherits the copyright of the specification it
+was produced from. If it was your specification, you may use the generated
+code without restriction.
+
+
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+
+
+0.
+ This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+
+
+1.
+ You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+
+2.
+ You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+
+
+ a)
+ You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+
+ b)
+ You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+
+ c)
+ If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+
+
+3.
+ You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+
+
+ a)
+ Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+
+ b)
+ Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+
+ c)
+ Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+
+4.
+ You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+
+
+5.
+ You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+
+
+6.
+ Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+
+
+7.
+ If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+
+
+8.
+ If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+
+
+9.
+ The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+
+
+
+10.
+ If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+
+
+NO WARRANTY
+
+
+
+11.
+ BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+
+
+12.
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+
+
+
+END OF TERMS AND CONDITIONS
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/HTMLTokenizer/devel/JFlex/README.sed b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/HTMLTokenizer/devel/JFlex/README.sed
new file mode 100644
index 0000000..0a58bc9
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/HTMLTokenizer/devel/JFlex/README.sed
@@ -0,0 +1,5 @@
+This directory contains the contents of jflex-2.2.zip
+
+MINUS the JFlex/lib/JFlex.jar file and JFlex/bin, JFlex/doc, and
+ JFlex/examples directories
+PLUS: sources rebuilt under a v1.3 JDK into JFlex/lib/sed-jflex.jar
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/HTMLTokenizer/devel/JSPTokenizer.java b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/HTMLTokenizer/devel/JSPTokenizer.java
new file mode 100644
index 0000000..a7d578f
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/HTMLTokenizer/devel/JSPTokenizer.java
@@ -0,0 +1,3599 @@
+/*******************************************************************************
+ * Copyright (c) 2004 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
+ *******************************************************************************/
+/* The following code was generated by JFlex 1.2.2 on 9/27/04 1:09 AM */
+
+/*nlsXXX*/
+package org.eclipse.wst.sse.core.jsp.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.wst.sse.core.jsp.Logger;
+import org.eclipse.wst.sse.core.parser.BlockMarker;
+import org.eclipse.wst.sse.core.parser.BlockTokenizer;
+import org.eclipse.wst.sse.core.parser.TagMarker;
+import org.eclipse.wst.sse.core.text.ITextRegion;
+import org.eclipse.wst.sse.core.text.ITextRegionList;
+import org.eclipse.wst.sse.core.util.Debug;
+import org.eclipse.wst.sse.core.util.StringUtils;
+import org.eclipse.wst.sse.core.xml.internal.parser.ContextRegionContainer;
+import org.eclipse.wst.sse.core.xml.internal.parser.IntStack;
+import org.eclipse.wst.sse.core.xml.jsp.model.parser.temp.XMLJSPRegionContexts;
+
+
+/**
+ * This class is a scanner generated by
+ * <a href="http://www.informatik.tu-muenchen.de/~kleing/jflex/">JFlex</a> 1.2.2
+ * on 9/27/04 1:09 AM from the specification file
+ * <tt>file:/D:/eclipse.rad/workspace.rad/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/HTMLTokenizer/devel/JSPTokenizer.jflex</tt>
+ */
+public class JSPTokenizer implements BlockTokenizer, XMLJSPRegionContexts {
+
+ /** 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 = 41;
+ 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 = 40;
+ 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 = 42;
+ 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;
+
+ /**
+ * Translates characters to character classes
+ */
+ final private static String yycmap_packed =
+ "\11\0\1\5\1\26\2\0\1\17\22\0\1\17\1\25\1\12\1\63"+
+ "\1\15\1\22\1\13\1\14\1\24\1\24\1\24\1\24\1\24\1\7"+
+ "\1\6\1\3\12\20\1\11\1\70\1\1\1\50\1\2\1\4\1\21"+
+ "\1\37\1\71\1\35\1\36\1\54\1\66\1\60\1\60\1\61\1\60"+
+ "\1\60\1\32\1\31\1\62\1\51\1\53\1\60\1\65\1\64\1\40"+
+ "\1\67\2\60\1\27\1\52\1\60\1\34\1\102\1\23\1\0\1\10"+
+ "\1\0\1\56\1\101\1\72\1\57\1\42\1\66\1\73\1\60\1\45"+
+ "\1\76\1\60\1\33\1\31\1\47\1\46\1\77\1\60\1\43\1\44"+
+ "\1\55\1\100\1\41\1\60\1\30\1\52\1\60\1\16\1\0\1\103"+
+ "\71\0\1\75\10\0\27\74\1\0\37\74\1\0\72\74\2\0\13\74"+
+ "\2\0\10\74\1\0\65\74\1\0\104\74\11\0\44\74\3\0\2\74"+
+ "\4\0\36\74\70\0\131\74\22\0\7\74\16\0\2\75\56\0\106\75"+
+ "\32\0\2\75\44\0\1\74\1\75\3\74\1\0\1\74\1\0\24\74"+
+ "\1\0\54\74\1\0\7\74\3\0\1\74\1\0\1\74\1\0\1\74"+
+ "\1\0\1\74\1\0\22\74\15\0\14\74\1\0\102\74\1\0\14\74"+
+ "\1\0\44\74\1\0\4\75\11\0\65\74\2\0\2\74\2\0\2\74"+
+ "\3\0\34\74\2\0\10\74\2\0\2\74\67\0\46\74\2\0\1\74"+
+ "\7\0\46\74\12\0\21\75\1\0\27\75\1\0\3\75\1\0\1\75"+
+ "\1\0\2\75\1\0\1\75\13\0\33\74\5\0\3\74\56\0\32\74"+
+ "\5\0\1\75\12\74\10\75\15\0\12\75\6\0\1\75\107\74\2\0"+
+ "\5\74\1\0\17\74\1\0\4\74\1\0\1\74\17\75\2\74\2\75"+
+ "\1\0\4\75\2\0\12\75\u0207\0\3\75\1\0\65\74\2\0\1\75"+
+ "\1\74\20\75\3\0\4\75\3\0\12\74\2\75\2\0\12\75\21\0"+
+ "\3\75\1\0\10\74\2\0\2\74\2\0\26\74\1\0\7\74\1\0"+
+ "\1\74\3\0\4\74\2\0\1\75\1\0\7\75\2\0\2\75\2\0"+
+ "\3\75\11\0\1\75\4\0\2\74\1\0\3\74\2\75\2\0\12\75"+
+ "\2\74\20\0\1\75\2\0\6\74\4\0\2\74\2\0\26\74\1\0"+
+ "\7\74\1\0\2\74\1\0\2\74\1\0\2\74\2\0\1\75\1\0"+
+ "\5\75\4\0\2\75\2\0\3\75\13\0\4\74\1\0\1\74\7\0"+
+ "\12\75\2\75\3\74\14\0\3\75\1\0\7\74\1\0\1\74\1\0"+
+ "\3\74\1\0\26\74\1\0\7\74\1\0\2\74\1\0\5\74\2\0"+
+ "\1\75\1\74\10\75\1\0\3\75\1\0\3\75\22\0\1\74\5\0"+
+ "\12\75\21\0\3\75\1\0\10\74\2\0\2\74\2\0\26\74\1\0"+
+ "\7\74\1\0\2\74\2\0\4\74\2\0\1\75\1\74\6\75\3\0"+
+ "\2\75\2\0\3\75\10\0\2\75\4\0\2\74\1\0\3\74\4\0"+
+ "\12\75\22\0\2\75\1\0\6\74\3\0\3\74\1\0\4\74\3\0"+
+ "\2\74\1\0\1\74\1\0\2\74\3\0\2\74\3\0\3\74\3\0"+
+ "\10\74\1\0\3\74\4\0\5\75\3\0\3\75\1\0\4\75\11\0"+
+ "\1\75\17\0\11\75\21\0\3\75\1\0\10\74\1\0\3\74\1\0"+
+ "\27\74\1\0\12\74\1\0\5\74\4\0\7\75\1\0\3\75\1\0"+
+ "\4\75\7\0\2\75\11\0\2\74\4\0\12\75\22\0\2\75\1\0"+
+ "\10\74\1\0\3\74\1\0\27\74\1\0\12\74\1\0\5\74\4\0"+
+ "\7\75\1\0\3\75\1\0\4\75\7\0\2\75\7\0\1\74\1\0"+
+ "\2\74\4\0\12\75\22\0\2\75\1\0\10\74\1\0\3\74\1\0"+
+ "\27\74\1\0\20\74\4\0\6\75\2\0\3\75\1\0\4\75\11\0"+
+ "\1\75\10\0\2\74\4\0\12\75\221\0\56\74\1\0\1\74\1\75"+
+ "\2\74\7\75\5\0\6\74\1\75\10\75\1\0\12\75\47\0\2\74"+
+ "\1\0\1\74\2\0\2\74\1\0\1\74\2\0\1\74\6\0\4\74"+
+ "\1\0\7\74\1\0\3\74\1\0\1\74\1\0\1\74\2\0\2\74"+
+ "\1\0\2\74\1\0\1\74\1\75\2\74\6\75\1\0\2\75\1\74"+
+ "\2\0\5\74\1\0\1\75\1\0\6\75\2\0\12\75\76\0\2\75"+
+ "\6\0\12\75\13\0\1\75\1\0\1\75\1\0\1\75\4\0\2\75"+
+ "\10\74\1\0\41\74\7\0\24\75\1\0\6\75\4\0\6\75\1\0"+
+ "\1\75\1\0\25\75\3\0\7\75\1\0\1\75\346\0\46\74\12\0"+
+ "\47\74\11\0\1\74\1\0\2\74\1\0\3\74\1\0\1\74\1\0"+
+ "\2\74\1\0\5\74\51\0\1\74\1\0\1\74\1\0\1\74\13\0"+
+ "\1\74\1\0\1\74\1\0\1\74\3\0\2\74\3\0\1\74\5\0"+
+ "\3\74\1\0\1\74\1\0\1\74\1\0\1\74\1\0\1\74\3\0"+
+ "\2\74\3\0\2\74\1\0\1\74\50\0\1\74\11\0\1\74\2\0"+
+ "\1\74\2\0\2\74\7\0\2\74\1\0\1\74\1\0\7\74\50\0"+
+ "\1\74\4\0\1\74\10\0\1\74\u0c06\0\234\74\4\0\132\74\6\0"+
+ "\26\74\2\0\6\74\2\0\46\74\2\0\6\74\2\0\10\74\1\0"+
+ "\1\74\1\0\1\74\1\0\1\74\1\0\37\74\2\0\65\74\1\0"+
+ "\7\74\1\0\1\74\3\0\3\74\1\0\7\74\3\0\4\74\2\0"+
+ "\6\74\4\0\15\74\5\0\3\74\1\0\7\74\323\0\15\75\4\0"+
+ "\1\75\104\0\1\74\3\0\2\74\2\0\1\74\121\0\3\74\u0e82\0"+
+ "\1\75\1\0\1\74\31\0\11\74\6\75\1\0\5\75\13\0\124\74"+
+ "\4\0\2\75\2\0\2\75\2\0\132\74\1\0\3\75\6\0\50\74"+
+ "\u1cd3\0\u51a6\74\u0c5a\0\u2ba4\74\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, 68, 136, 204, 272, 340, 408, 476, 544, 612,
+ 680, 748, 816, 884, 952, 1020, 1088, 1156, 1224, 1292,
+ 1360, 1428, 1496, 1564, 1632, 1700, 1768, 1836, 1904, 1972,
+ 2040, 2108, 2176, 2244, 2312, 2380, 2448, 2516, 2584, 2652,
+ 2720, 2788, 2856, 2924, 2992, 3060, 3128, 3196, 3264, 3332,
+ 3400, 3468, 3536, 3604, 3672, 3740, 3808, 3876, 3944, 4012,
+ 4080, 4148, 4216, 4284, 4352, 4284, 4352, 4420, 4284, 4284,
+ 4352, 4488, 4556, 4624, 4692, 4760, 4828, 4896, 4284, 4352,
+ 4964, 5032, 5100, 4284, 5168, 5168, 5236, 5304, 5372, 4964,
+ 4284, 5440, 5508, 4284, 5576, 5644, 5712, 5780, 4284, 4352,
+ 5848, 5916, 5984, 6052, 6120, 6188, 4284, 6256, 6256, 6324,
+ 6392, 6460, 6528, 6596, 4284, 6664, 6732, 6800, 6868, 6936,
+ 7004, 4284, 7072, 7140, 7208, 7276, 7344, 7412, 7480, 7548,
+ 4284, 7616, 7684, 7752, 7820, 7888, 7956, 8024, 8092, 8092,
+ 8160, 8228, 8296, 8364, 8364, 8432, 8500, 8568, 8636, 8636,
+ 8704, 8772, 8840, 8908, 4284, 8976, 8976, 9044, 9112, 9180,
+ 9248, 4284, 4284, 4352, 9316, 4284, 4352, 9384, 9452, 9520,
+ 9588, 4284, 9656, 9724, 9792, 9860, 4284, 9928, 9996, 10064,
+ 10132, 4284, 4284, 10200, 4284, 10268, 10336, 10268, 10404, 10472,
+ 10404, 4284, 4284, 10540, 10608, 10676, 4284, 10744, 10812, 10880,
+ 10948, 11016, 4284, 4284, 11084, 4284, 11152, 11220, 11152, 11288,
+ 11356, 11288, 4284, 4284, 11424, 11492, 11560, 4284, 11628, 11696,
+ 11764, 4284, 4284, 11832, 11900, 11968, 12036, 12104, 4284, 12172,
+ 12240, 12308, 12376, 12444, 12512, 12580, 12648, 12716, 4284, 12784,
+ 12852, 4284, 4284, 5168, 5304, 4284, 12920, 5372, 12988, 5440,
+ 5576, 5644, 13056, 5712, 4284, 13124, 13192, 5780, 13260, 4284,
+ 11900, 4284, 6256, 6324, 4284, 13328, 6392, 13396, 4284, 13464,
+ 13532, 7072, 13600, 7276, 4284, 13668, 7344, 13736, 13804, 13872,
+ 13940, 14008, 14076, 7820, 4284, 14144, 14212, 8092, 8160, 4284,
+ 14280, 14348, 14416, 14484, 14552, 8296, 8092, 8364, 8432, 4284,
+ 8500, 8568, 8364, 8636, 8704, 4284, 14620, 14688, 14756, 14824,
+ 14892, 14960, 15028, 8976, 9044, 4284, 15096, 15164, 15232, 15300,
+ 15368, 15436, 15504, 15572, 15640, 15708, 4284, 4284, 4284, 15776,
+ 4284, 4284, 15844, 15912, 15980, 16048, 10268, 4284, 16116, 16184,
+ 10404, 4284, 16252, 16320, 16388, 16456, 16524, 16592, 16660, 16728,
+ 16796, 10948, 11152, 4284, 16864, 16932, 11288, 4284, 17000, 17068,
+ 17136, 17204, 17272, 17340, 17408, 17476, 17544, 4284, 4284, 4284,
+ 17612, 17680, 17748, 17816, 17884, 4284, 17952, 18020, 4284, 4284,
+ 4284, 4284, 4284, 4692, 18088, 18156, 18224, 18292, 18360, 18428,
+ 18360, 18496, 18564, 18496, 18632, 18700, 18768, 18836, 18904, 18972,
+ 19040, 19040, 19108, 19176, 19176, 8840, 8840, 19244, 19312, 19380,
+ 19380, 9180, 9180, 19448, 19516, 19584, 15980, 10064, 10064, 19652,
+ 10268, 10268, 19720, 10404, 10404, 19788, 10540, 10540, 16524, 19856,
+ 10744, 10744, 16728, 19924, 10948, 10948, 11152, 11152, 19992, 11288,
+ 11288, 20060, 11424, 11424, 17272, 20128, 11628, 11628, 17476, 20196,
+ 4284, 4284, 20264, 20332, 4284, 20400, 20468, 20536, 7072, 4284,
+ 4284, 20604, 20672, 20740, 20808, 20876, 14484, 14824, 20944, 15300,
+ 21012, 4284, 4284, 21080, 21148, 21216, 4284, 21284, 21352, 21420,
+ 21488, 4284, 21556, 21624, 21692, 21760, 21828, 21896, 21964, 22032,
+ 22100, 22168, 22236, 22304, 22372, 22440, 22508, 22576, 22644, 22712,
+ 22780, 22848, 22916, 4692, 22984, 23052, 23120, 23188, 23256, 4284,
+ 4284, 23324, 23392, 23460, 23528, 16524, 16728, 23596, 23664, 17272,
+ 17476, 23732, 23800, 23868, 4284, 4284, 4284, 23936, 24004, 24072,
+ 24140, 24208, 24276, 24344, 6800, 24412, 24480, 24548, 24616, 24684,
+ 24752, 24820, 4284, 24888, 8840, 9180, 10268, 10404, 11152, 11288,
+ 24956, 25024, 25092, 25160, 25228, 25296, 25364, 25432, 25500, 25568,
+ 25636, 25704, 25772, 25840, 25908, 25976, 26044, 26112, 26180, 26248,
+ 26316, 26384, 26452, 26520, 26588, 26656, 26724, 26792, 26860, 26928,
+ 26996, 27064, 27132, 27200, 27268, 27336, 27404, 27472, 27540, 27608,
+ 4284, 27676, 27744, 27812, 27880, 6800, 27948, 28016, 28084, 28152,
+ 28220, 28288, 28356, 28424, 28492, 28560, 28628, 28696, 28764, 28832
+ };
+
+ /**
+ * 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\4\72\1\76"+
+ "\40\72\1\77\20\72\1\100\1\101\102\100\1\102\1\103"+
+ "\21\102\1\104\2\102\1\105\55\102\1\106\1\107\102\106"+
+ "\1\102\1\103\5\102\1\110\16\102\1\105\56\102\1\103"+
+ "\2\102\1\111\1\112\2\102\2\113\5\102\1\112\6\102"+
+ "\1\112\2\114\3\113\1\102\10\113\1\115\2\113\1\102"+
+ "\10\113\1\115\1\113\1\102\4\113\1\102\4\113\1\102"+
+ "\4\113\3\102\1\103\2\102\1\111\1\116\11\102\1\116"+
+ "\6\102\1\116\55\102\1\117\1\120\2\117\1\121\21\117"+
+ "\1\105\55\117\1\102\1\103\2\102\1\122\1\112\2\102"+
+ "\2\123\5\102\1\112\6\102\1\112\5\123\1\102\13\123"+
+ "\1\102\12\123\1\102\4\123\1\102\4\123\1\102\4\123"+
+ "\3\102\1\103\2\102\1\122\1\112\2\102\2\123\5\102"+
+ "\1\112\6\102\1\112\5\123\1\102\13\123\1\124\12\123"+
+ "\1\102\4\123\1\102\4\123\1\102\4\123\2\102\1\125"+
+ "\1\103\1\102\1\126\1\127\1\112\4\125\1\130\1\125"+
+ "\1\131\2\125\1\112\6\125\1\112\55\125\1\102\1\103"+
+ "\2\102\1\132\21\102\1\105\56\102\1\103\1\133\1\134"+
+ "\1\102\1\112\2\102\2\135\5\102\1\112\6\102\1\112"+
+ "\5\135\1\102\13\135\1\102\12\135\1\102\4\135\1\102"+
+ "\4\135\1\102\4\135\3\102\1\103\1\133\1\134\1\102"+
+ "\1\112\2\102\2\135\5\102\1\112\6\102\1\112\5\135"+
+ "\1\102\13\135\1\136\12\135\1\102\4\135\1\102\4\135"+
+ "\1\102\4\135\2\102\1\137\1\103\1\133\1\140\1\137"+
+ "\1\112\4\137\1\141\1\137\1\142\2\137\1\112\6\137"+
+ "\1\112\55\137\1\102\1\103\3\102\1\112\11\102\1\112"+
+ "\6\102\1\112\55\102\1\143\1\144\20\143\1\145\3\143"+
+ "\1\105\55\143\1\102\1\146\3\102\1\112\2\102\2\147"+
+ "\5\102\1\112\2\102\1\150\3\102\1\112\5\147\1\102"+
+ "\13\147\1\102\12\147\1\102\4\147\1\102\4\147\1\102"+
+ "\4\147\3\102\1\146\3\102\1\151\11\102\1\151\2\102"+
+ "\1\150\3\102\1\151\56\102\1\146\3\102\1\112\2\102"+
+ "\2\152\5\102\1\112\2\102\1\150\3\102\1\112\5\152"+
+ "\1\102\13\152\1\102\12\152\1\102\4\152\1\102\4\152"+
+ "\1\102\4\152\3\102\1\146\3\102\1\112\2\102\2\152"+
+ "\5\102\1\112\2\102\1\150\3\102\1\112\5\152\1\102"+
+ "\13\152\1\153\12\152\1\102\4\152\1\102\4\152\1\102"+
+ "\4\152\2\102\1\154\1\146\1\102\1\155\1\154\1\112"+
+ "\4\154\1\156\1\154\1\157\2\154\1\112\2\154\1\160"+
+ "\3\154\1\112\55\154\1\161\1\162\1\163\1\164\4\161"+
+ "\2\165\15\161\5\166\1\161\13\166\1\161\12\166\1\161"+
+ "\4\166\1\161\4\166\1\161\1\167\3\166\2\161\1\102"+
+ "\1\170\1\163\1\164\1\102\1\112\2\102\2\171\5\102"+
+ "\1\112\6\102\1\112\5\171\1\102\13\171\1\102\12\171"+
+ "\1\102\4\171\1\102\4\171\1\102\4\171\3\102\1\170"+
+ "\1\163\1\164\1\102\1\112\2\102\2\171\5\102\1\112"+
+ "\6\102\1\112\5\171\1\102\13\171\1\172\12\171\1\102"+
+ "\4\171\1\102\4\171\1\102\4\171\2\102\1\173\1\174"+
+ "\1\163\1\175\1\173\1\112\4\173\1\176\1\173\1\177"+
+ "\1\200\1\173\1\112\6\173\1\112\34\173\1\201\20\173"+
+ "\1\102\1\202\1\203\2\102\1\112\11\102\1\112\6\102"+
+ "\1\112\7\102\1\204\1\205\2\102\1\206\11\102\1\206"+
+ "\1\102\1\205\1\204\25\102\1\103\1\203\2\102\1\112"+
+ "\11\102\1\112\6\102\1\112\5\102\1\207\50\102\1\103"+
+ "\1\203\2\102\1\112\2\102\2\210\5\102\1\112\6\102"+
+ "\1\112\5\210\1\207\13\210\1\102\12\210\1\102\4\210"+
+ "\1\102\4\210\1\102\4\210\3\102\1\103\1\203\2\102"+
+ "\1\112\11\102\1\112\6\102\1\112\5\102\1\207\7\102"+
+ "\1\211\6\102\1\212\10\102\1\211\12\102\1\212\4\102"+
+ "\1\213\1\103\1\203\1\214\1\213\1\112\4\213\1\215"+
+ "\1\213\1\216\2\213\1\112\6\213\1\112\5\213\1\217"+
+ "\47\213\1\220\1\103\1\203\1\221\1\220\1\112\4\220"+
+ "\1\222\1\220\1\223\2\220\1\112\6\220\1\112\5\220"+
+ "\1\224\47\220\1\225\1\103\1\203\1\226\1\225\1\112"+
+ "\4\225\1\227\1\225\1\230\2\225\1\112\6\225\1\112"+
+ "\55\225\1\231\1\232\1\233\101\231\1\234\1\103\1\203"+
+ "\1\235\1\234\1\112\4\234\1\236\1\234\1\237\2\234"+
+ "\1\112\6\234\1\112\55\234\1\240\1\241\1\242\101\240"+
+ "\1\243\1\244\102\243\1\102\1\245\24\102\1\105\55\102"+
+ "\1\246\1\247\102\246\1\102\1\103\5\102\1\250\16\102"+
+ "\1\105\55\102\1\251\1\252\3\251\1\253\6\251\1\254"+
+ "\1\255\1\251\1\253\6\251\1\253\34\251\1\256\20\251"+
+ "\1\257\1\252\3\257\1\260\4\257\1\261\2\257\1\262"+
+ "\1\257\1\260\6\257\1\260\34\257\1\263\20\257\1\102"+
+ "\1\103\24\102\1\105\55\102\1\264\1\265\10\264\1\266"+
+ "\1\264\1\267\1\270\65\264\1\271\1\272\1\273\12\272"+
+ "\1\102\11\272\1\274\55\272\1\275\1\276\10\275\1\102"+
+ "\13\275\1\277\55\275\1\102\1\103\12\102\1\300\11\102"+
+ "\1\105\56\102\1\103\10\102\1\301\13\102\1\105\55\102"+
+ "\1\302\1\303\10\302\1\261\67\302\1\304\1\305\1\306"+
+ "\1\307\12\306\1\254\65\306\1\310\1\305\1\311\1\312"+
+ "\10\311\1\313\1\311\1\314\46\311\1\315\17\311\1\316"+
+ "\1\317\1\320\12\317\1\102\11\317\1\321\55\317\1\322"+
+ "\1\323\10\322\1\102\13\322\1\324\55\322\1\102\1\103"+
+ "\12\102\1\325\11\102\1\105\56\102\1\103\10\102\1\326"+
+ "\13\102\1\105\55\102\1\327\1\330\10\327\1\261\67\327"+
+ "\1\331\1\332\1\333\1\334\12\333\1\254\65\333\1\335"+
+ "\1\332\1\72\1\0\11\72\1\0\1\72\1\0\4\72"+
+ "\1\0\40\72\1\0\20\72\3\0\1\336\1\337\15\0"+
+ "\1\340\2\0\1\341\63\0\1\342\2\0\2\343\5\0"+
+ "\1\342\6\0\1\342\5\343\1\0\13\343\1\0\12\343"+
+ "\1\344\4\343\1\0\4\343\1\0\4\343\2\0\1\345"+
+ "\1\0\11\345\1\0\1\345\1\346\1\347\3\345\1\0"+
+ "\61\345\5\0\1\342\2\0\2\350\5\0\1\342\6\0"+
+ "\1\342\5\350\1\0\13\350\1\0\12\350\1\0\4\350"+
+ "\1\0\4\350\1\0\4\350\2\0\1\345\1\0\11\345"+
+ "\1\0\2\345\1\351\3\345\1\0\40\345\1\352\20\345"+
+ "\126\0\1\353\2\0\1\354\101\0\1\355\67\0\1\356"+
+ "\76\0\1\357\106\0\1\112\11\0\1\112\6\0\1\112"+
+ "\63\0\4\113\6\0\1\113\6\0\5\113\1\0\13\113"+
+ "\1\0\12\113\1\0\4\113\1\0\11\113\10\0\4\113"+
+ "\6\0\1\113\6\0\2\113\1\360\2\113\1\0\13\113"+
+ "\1\0\12\113\1\0\4\113\1\0\11\113\10\0\4\113"+
+ "\6\0\1\113\6\0\2\113\1\361\2\113\1\0\13\113"+
+ "\1\0\12\113\1\0\4\113\1\0\11\113\7\0\1\116"+
+ "\11\0\1\116\6\0\1\116\57\0\1\362\103\0\1\363"+
+ "\107\0\4\123\6\0\1\123\6\0\5\123\1\0\13\123"+
+ "\1\0\12\123\1\0\4\123\1\0\11\123\2\0\1\125"+
+ "\2\0\1\364\1\125\1\0\4\125\1\0\1\125\1\0"+
+ "\2\125\1\0\6\125\1\0\56\125\1\0\1\363\1\364"+
+ "\1\125\1\0\4\125\1\0\1\125\1\0\2\125\1\0"+
+ "\6\125\1\0\55\125\1\365\1\0\10\365\1\366\2\365"+
+ "\1\367\45\365\1\367\20\365\1\370\1\0\12\370\1\366"+
+ "\1\371\45\370\1\371\20\370\2\0\1\133\1\372\106\0"+
+ "\4\135\6\0\1\135\6\0\5\135\1\0\13\135\1\0"+
+ "\12\135\1\0\4\135\1\0\11\135\2\0\1\137\2\0"+
+ "\1\373\1\137\1\0\4\137\1\0\1\137\1\0\2\137"+
+ "\1\0\6\137\1\0\56\137\1\0\1\133\1\374\1\137"+
+ "\1\0\4\137\1\0\1\137\1\0\2\137\1\0\6\137"+
+ "\1\0\55\137\1\141\1\0\1\375\1\376\1\141\1\375"+
+ "\4\141\1\377\1\141\1\375\1\u0100\1\141\1\375\6\141"+
+ "\1\375\34\141\1\u0100\20\141\1\142\1\0\1\u0101\1\u0102"+
+ "\1\142\1\u0101\4\142\1\u0101\1\142\1\377\1\u0103\1\142"+
+ "\1\u0101\6\142\1\u0101\34\142\1\u0103\20\142\2\0\1\u0104"+
+ "\123\0\1\353\2\0\1\u0105\64\0\4\147\6\0\1\147"+
+ "\6\0\5\147\1\0\13\147\1\0\12\147\1\0\4\147"+
+ "\1\0\11\147\4\0\1\u0106\106\0\1\151\11\0\1\151"+
+ "\6\0\1\151\63\0\4\152\6\0\1\152\6\0\5\152"+
+ "\1\0\13\152\1\0\12\152\1\0\4\152\1\0\11\152"+
+ "\2\0\1\154\2\0\1\u0107\1\154\1\0\4\154\1\0"+
+ "\1\154\1\0\2\154\1\0\6\154\1\0\55\154\1\u0108"+
+ "\1\0\10\u0108\1\u0109\2\u0108\1\u010a\45\u0108\1\u010a\20\u0108"+
+ "\1\u010b\1\0\12\u010b\1\u0109\1\u010c\45\u010b\1\u010c\20\u010b"+
+ "\1\154\1\0\1\u0106\1\u0107\1\154\1\0\4\154\1\0"+
+ "\1\154\1\0\2\154\1\0\6\154\1\0\55\154\1\161"+
+ "\3\0\23\161\5\0\1\161\13\0\1\161\12\0\1\161"+
+ "\4\0\1\161\4\0\1\161\4\0\2\161\3\0\1\336"+
+ "\16\0\1\353\2\0\1\341\60\0\1\u010d\101\0\1\161"+
+ "\3\0\2\161\4\165\6\161\1\165\6\161\5\166\1\161"+
+ "\13\166\1\161\12\166\1\161\4\166\1\161\4\166\1\165"+
+ "\4\166\2\161\6\0\4\166\6\0\1\166\6\0\5\166"+
+ "\1\0\13\166\1\0\12\166\1\0\4\166\1\0\11\166"+
+ "\10\0\4\166\6\0\1\166\6\0\5\166\1\0\7\166"+
+ "\1\u010e\3\166\1\0\12\166\1\0\4\166\1\0\11\166"+
+ "\5\0\1\336\4\0\2\u010f\10\0\1\353\2\0\1\341"+
+ "\1\0\5\u010f\1\0\13\u010f\1\0\12\u010f\1\0\4\u010f"+
+ "\1\0\4\u010f\1\0\4\u010f\10\0\4\171\6\0\1\171"+
+ "\6\0\5\171\1\0\13\171\1\0\12\171\1\0\4\171"+
+ "\1\0\11\171\2\0\1\173\2\0\1\u0110\1\173\1\0"+
+ "\4\173\1\0\1\173\1\0\2\173\1\0\6\173\1\0"+
+ "\55\173\3\0\1\336\4\0\2\u0111\10\0\1\353\2\0"+
+ "\1\341\1\0\5\u0111\1\0\13\u0111\1\0\12\u0111\1\0"+
+ "\4\u0111\1\0\4\u0111\1\0\4\u0111\2\0\1\173\1\0"+
+ "\1\u010d\1\u0110\1\173\1\0\4\173\1\0\1\173\1\0"+
+ "\2\173\1\0\6\173\1\0\55\173\1\u0112\1\0\10\u0112"+
+ "\1\u0113\2\u0112\1\u0114\45\u0112\1\u0114\20\u0112\1\u0115\1\0"+
+ "\12\u0115\1\u0113\1\u0116\45\u0115\1\u0116\20\u0115\1\173\2\0"+
+ "\1\u0110\1\173\1\0\4\173\1\0\1\173\1\0\1\173"+
+ "\1\u0117\1\0\6\173\1\0\56\173\2\0\1\u0110\1\173"+
+ "\1\0\4\173\1\0\1\173\1\0\1\173\1\u0118\1\0"+
+ "\6\173\1\0\55\173\3\0\1\336\16\0\1\353\2\0"+
+ "\1\u0105\124\0\1\u0119\2\0\1\u0119\72\0\1\u011a\14\0"+
+ "\1\u011a\60\0\2\u011b\50\0\23\u011c\1\u011d\60\u011c\6\0"+
+ "\4\210\6\0\1\210\6\0\5\210\1\0\13\210\1\0"+
+ "\12\210\1\0\4\210\1\0\11\210\54\0\1\u011e\120\0"+
+ "\1\u011f\10\0\1\u011f\3\0\1\213\2\0\1\u0120\1\213"+
+ "\1\0\4\213\1\0\1\213\1\0\2\213\1\0\6\213"+
+ "\1\0\55\213\1\u0121\1\0\10\u0121\1\u0122\2\u0121\1\u0123"+
+ "\45\u0121\1\u0123\20\u0121\1\u0124\1\0\1\u0124\2\u0125\1\u0124"+
+ "\4\u0125\2\u0124\1\u0126\1\u0127\1\u0124\4\u0125\1\u0124\10\u0125"+
+ "\1\u0124\26\u0125\1\u0127\10\u0125\2\u0124\4\u0125\2\u0124\1\217"+
+ "\2\u011c\1\u0128\1\217\1\u011c\4\217\1\u011c\1\217\1\u011c"+
+ "\2\217\1\u011c\3\217\1\u0129\2\217\1\u011c\55\217\1\220"+
+ "\2\0\1\u012a\1\220\1\0\4\220\1\0\1\220\1\0"+
+ "\2\220\1\0\6\220\1\0\55\220\12\u012b\1\u012c\71\u012b"+
+ "\14\u012d\1\u012c\67\u012d\1\224\2\u011c\1\u012e\1\224\1\u011c"+
+ "\4\224\1\u011c\1\224\1\u011c\2\224\1\u011c\3\224\1\u012f"+
+ "\2\224\1\u011c\55\224\1\225\2\0\1\u0130\1\225\1\0"+
+ "\4\225\1\0\1\225\1\0\2\225\1\0\6\225\1\0"+
+ "\55\225\1\u0131\1\0\10\u0131\1\u0132\2\u0131\1\u0133\45\u0131"+
+ "\1\u0133\20\u0131\1\u0134\1\0\1\u0134\2\u0135\1\u0134\4\u0135"+
+ "\2\u0134\1\u0136\1\u0137\1\u0134\4\u0135\1\u0134\10\u0135\1\u0134"+
+ "\26\u0135\1\u0137\10\u0135\2\u0134\4\u0135\2\u0134\2\231\1\0"+
+ "\103\231\1\0\17\231\1\u0138\2\231\1\u0139\56\231\1\234"+
+ "\2\0\1\u013a\1\234\1\0\4\234\1\0\1\234\1\0"+
+ "\2\234\1\0\6\234\1\0\55\234\1\u013b\1\0\10\u013b"+
+ "\1\u013c\2\u013b\1\u013d\45\u013b\1\u013d\20\u013b\1\u013e\1\0"+
+ "\1\u013e\2\u013f\1\u013e\4\u013f\2\u013e\1\u0140\1\u0141\1\u013e"+
+ "\4\u013f\1\u013e\10\u013f\1\u013e\26\u013f\1\u0141\10\u013f\2\u013e"+
+ "\4\u013f\2\u013e\2\240\1\0\103\240\1\0\17\240\1\u0142"+
+ "\2\240\1\u0143\56\240\22\0\1\u0144\2\0\1\354\65\0"+
+ "\1\u0145\74\0\1\251\1\0\12\251\1\0\1\u0146\45\251"+
+ "\1\u0146\20\251\3\0\1\u0147\16\0\1\353\2\0\1\354"+
+ "\56\0\1\251\1\0\3\251\1\253\6\251\1\0\1\u0146"+
+ "\1\251\1\253\6\251\1\253\34\251\1\u0146\36\251\1\u0148"+
+ "\103\251\1\u0149\65\251\1\257\1\0\10\257\1\0\2\257"+
+ "\1\u014a\45\257\1\u014a\21\257\1\0\3\257\1\260\4\257"+
+ "\1\0\2\257\1\u014a\1\257\1\260\6\257\1\260\34\257"+
+ "\1\u014a\36\257\1\u014b\103\257\1\u014c\65\257\12\264\1\0"+
+ "\1\264\1\0\1\u014d\65\264\1\0\12\264\1\0\1\264"+
+ "\1\0\1\u014d\4\264\1\u014e\60\264\1\0\12\264\1\0"+
+ "\1\264\1\0\1\264\1\u014f\64\264\1\u0150\14\u0151\1\u0152"+
+ "\103\u0151\1\u0152\5\u0151\1\u0153\2\u0151\1\u0154\56\u0151\12\u0155"+
+ "\1\u0156\103\u0155\1\u0156\7\u0155\1\u0157\2\u0155\1\u0158\56\u0155"+
+ "\12\302\1\0\67\302\1\u0159\1\0\12\302\1\0\7\302"+
+ "\1\u015a\57\302\1\u0159\1\0\12\302\1\u015b\71\302\14\306"+
+ "\1\0\65\306\1\u015c\1\0\14\306\1\0\5\306\1\u015d"+
+ "\57\306\1\u015c\1\0\14\306\1\u015e\67\306\12\311\1\0"+
+ "\1\311\1\0\66\311\1\0\12\311\1\0\1\311\1\0"+
+ "\5\311\1\u015f\60\311\1\0\12\311\1\0\1\311\1\0"+
+ "\1\311\1\u0160\64\311\1\0\14\u0161\1\u0162\103\u0161\1\u0162"+
+ "\5\u0161\1\u0163\2\u0161\1\u0164\56\u0161\12\u0165\1\u0166\103\u0165"+
+ "\1\u0166\7\u0165\1\u0167\2\u0165\1\u0168\56\u0165\12\327\1\0"+
+ "\67\327\1\u0169\1\0\12\327\1\0\7\327\1\u016a\57\327"+
+ "\1\u0169\1\0\12\327\1\u016b\71\327\14\333\1\0\65\333"+
+ "\1\u016c\1\0\14\333\1\0\5\333\1\u016d\57\333\1\u016c"+
+ "\1\0\14\333\1\u016e\67\333\7\0\1\u016f\11\0\1\u0170"+
+ "\3\0\1\u0171\22\0\1\u0172\42\0\1\u0173\24\0\1\u0174"+
+ "\54\0\1\342\2\0\2\u0175\5\0\1\342\6\0\1\342"+
+ "\5\u0175\1\0\13\u0175\1\0\12\u0175\1\0\4\u0175\1\0"+
+ "\4\u0175\1\0\4\u0175\2\0\1\u0176\1\0\3\u0176\1\u0177"+
+ "\4\343\1\u0176\1\0\3\u0176\1\u0177\1\343\1\u0176\1\0"+
+ "\3\u0176\1\u0177\5\343\1\u0176\13\343\1\u0176\12\343\1\u0176"+
+ "\4\343\1\u0178\11\343\2\u0176\20\0\1\u0179\7\0\1\u017a"+
+ "\70\0\1\346\66\0\103\347\1\u017b\1\u0176\1\0\3\u0176"+
+ "\1\u0177\4\350\1\u0176\1\0\3\u0176\1\u0177\1\350\1\u0176"+
+ "\1\0\3\u0176\1\u0177\5\350\1\u0176\13\350\1\u0176\12\350"+
+ "\1\u0176\4\350\1\u017c\11\350\2\u0176\103\351\1\u017d\63\0"+
+ "\1\352\45\0\1\u0171\22\0\1\u0172\67\0\1\u0174\51\0"+
+ "\1\u017e\103\0\1\u017f\107\0\4\113\6\0\1\113\6\0"+
+ "\3\113\2\u0180\1\0\13\113\1\0\12\113\1\0\4\113"+
+ "\1\0\11\113\10\0\4\113\6\0\1\113\6\0\5\113"+
+ "\1\0\13\113\1\0\2\113\1\u0181\7\113\1\0\4\113"+
+ "\1\0\6\113\1\u0181\2\113\2\0\12\365\1\366\3\365"+
+ "\1\0\65\365\14\370\1\366\1\370\1\0\65\370\1\375"+
+ "\1\0\10\375\1\377\2\375\1\u0182\45\375\1\u0182\20\375"+
+ "\1\141\2\375\1\376\1\141\1\375\4\141\1\377\1\141"+
+ "\1\375\1\141\1\137\1\375\6\141\1\375\55\141\1\u0101"+
+ "\1\0\12\u0101\1\377\1\u0183\45\u0101\1\u0183\20\u0101\1\142"+
+ "\2\u0101\1\u0102\1\142\1\u0101\4\142\1\u0101\1\142\1\377"+
+ "\1\142\1\137\1\u0101\6\142\1\u0101\55\142\12\u0108\1\u0109"+
+ "\3\u0108\1\0\65\u0108\14\u010b\1\u0109\1\u010b\1\0\65\u010b"+
+ "\6\0\4\166\6\0\1\166\6\0\5\166\1\0\13\166"+
+ "\1\0\12\166\1\0\4\166\1\0\6\166\1\u0184\2\166"+
+ "\10\0\4\u010f\6\0\1\u010f\6\0\5\u010f\1\0\13\u010f"+
+ "\1\0\12\u010f\1\0\4\u010f\1\0\11\u010f\10\0\4\u0111"+
+ "\6\0\1\u0111\6\0\5\u0111\1\0\13\u0111\1\0\12\u0111"+
+ "\1\0\4\u0111\1\0\11\u0111\2\0\12\u0112\1\u0113\3\u0112"+
+ "\1\0\65\u0112\14\u0115\1\u0113\1\u0115\1\0\65\u0115\1\u0185"+
+ "\2\u0186\1\u0187\1\u0185\1\u0186\4\u0185\1\u0186\1\u0185\1\u0186"+
+ "\2\u0185\1\u0186\6\u0185\1\u0186\54\u0185\1\173\1\u0188\2\u0189"+
+ "\1\u018a\1\u0188\1\u0189\4\u0188\1\u0189\1\u0188\1\u0189\2\u0188"+
+ "\1\u0189\6\u0188\1\u0189\54\u0188\1\173\35\0\1\u018b\34\0"+
+ "\1\u018b\51\0\1\u018c\14\0\1\u018c\70\0\1\u018d\11\0"+
+ "\1\u018d\73\0\1\u018e\17\0\1\u018e\110\0\1\u018f\7\0"+
+ "\1\u018f\2\0\12\u0121\1\u0122\3\u0121\1\0\65\u0121\1\u0124"+
+ "\1\0\12\u0124\1\u0122\1\u0190\45\u0124\1\u0190\21\u0124\1\0"+
+ "\12\u0124\1\u0191\1\u0190\45\u0124\1\u0190\20\u0124\14\0\1\u0192"+
+ "\67\0\14\u0124\1\u0191\1\u0124\1\0\65\u0124\12\u0131\1\u0132"+
+ "\3\u0131\1\0\65\u0131\1\u0134\1\0\12\u0134\1\u0132\1\u0193"+
+ "\45\u0134\1\u0193\21\u0134\1\0\12\u0134\1\u0194\1\u0193\45\u0134"+
+ "\1\u0193\20\u0134\14\0\1\u0195\67\0\14\u0134\1\u0194\1\u0134"+
+ "\1\0\65\u0134\2\231\1\0\22\231\1\u0196\22\231\1\u0197"+
+ "\35\231\1\0\31\231\1\u0198\47\231\12\u013b\1\u013c\3\u013b"+
+ "\1\0\65\u013b\1\u013e\1\0\12\u013e\1\u013c\1\u0199\45\u013e"+
+ "\1\u0199\21\u013e\1\0\12\u013e\1\u019a\1\u0199\45\u013e\1\u0199"+
+ "\20\u013e\14\0\1\u019b\67\0\14\u013e\1\u019a\1\u013e\1\0"+
+ "\65\u013e\2\240\1\0\22\240\1\u019c\22\240\1\u019d\35\240"+
+ "\1\0\31\240\1\u019e\47\240\7\0\1\u019f\11\0\1\u0170"+
+ "\3\0\1\u0171\22\0\1\u0172\55\0\1\u01a0\61\0\16\251"+
+ "\1\0\65\251\16\257\1\0\65\257\12\264\1\0\1\264"+
+ "\1\0\1\264\1\u01a1\64\264\1\u0150\12\264\1\0\1\264"+
+ "\1\0\1\u014d\7\264\1\u01a2\22\264\1\u01a3\32\264\1\0"+
+ "\12\u01a1\1\0\1\u01a1\1\0\66\u01a1\1\0\12\u0150\1\0"+
+ "\1\u0150\1\0\1\u01a4\65\u0150\1\0\14\u0151\1\u0152\10\u0151"+
+ "\1\u01a5\22\u0151\1\u01a6\47\u0151\1\u0152\17\u0151\1\u01a7\47\u0151"+
+ "\12\u0155\1\u0156\12\u0155\1\u01a8\22\u0155\1\u01a9\45\u0155\1\u0156"+
+ "\21\u0155\1\u01aa\47\u0155\12\302\1\0\103\302\1\0\12\302"+
+ "\1\u01ab\22\302\1\u01ac\31\302\1\u0159\1\0\102\u01ad\1\u01ae"+
+ "\1\u01ad\14\306\1\0\103\306\1\0\10\306\1\u01af\22\306"+
+ "\1\u01b0\31\306\1\u015c\1\0\102\u01b1\1\u01b2\1\u01b1\12\311"+
+ "\1\0\1\311\1\0\10\311\1\u01b3\22\311\1\u01b4\32\311"+
+ "\1\0\14\u0161\1\u0162\10\u0161\1\u01b5\22\u0161\1\u01b6\47\u0161"+
+ "\1\u0162\17\u0161\1\u01b7\47\u0161\12\u0165\1\u0166\12\u0165\1\u01b8"+
+ "\22\u0165\1\u01b9\45\u0165\1\u0166\21\u0165\1\u01ba\47\u0165\12\327"+
+ "\1\0\103\327\1\0\12\327\1\u01bb\22\327\1\u01bc\31\327"+
+ "\1\u0169\1\0\102\u01bd\1\u01be\1\u01bd\14\333\1\0\103\333"+
+ "\1\0\10\333\1\u01bf\22\333\1\u01c0\31\333\1\u016c\1\0"+
+ "\102\u01c1\1\u01c2\1\u01c1\7\0\1\u01c3\103\0\1\u01c4\131\0"+
+ "\1\u01c5\46\0\1\u0175\1\0\11\u0175\1\0\6\u0175\1\0"+
+ "\61\u0175\1\u0176\1\0\11\u0176\1\0\6\u0176\1\0\45\u0176"+
+ "\1\0\14\u0176\1\0\3\u0176\1\u0177\5\u0176\1\0\3\u0176"+
+ "\1\u0177\2\u0176\1\0\3\u0176\1\u0177\41\u0176\1\u01c6\13\u0176"+
+ "\20\0\1\u0179\47\0\1\u01c7\33\0\1\u01c8\14\0\3\u01c8"+
+ "\2\0\1\u01c8\11\0\1\u01c8\1\0\2\u01c8\6\0\1\u01c8"+
+ "\2\0\2\u01c8\6\0\1\u01c8\10\0\4\113\6\0\1\113"+
+ "\6\0\5\113\1\0\11\113\1\u01c9\1\113\1\0\1\u01c9"+
+ "\11\113\1\0\4\113\1\0\11\113\2\0\12\375\1\377"+
+ "\3\375\1\0\65\375\14\u0101\1\377\1\u0101\1\0\65\u0101"+
+ "\6\0\3\166\1\u01ca\6\0\1\166\6\0\5\166\1\0"+
+ "\13\166\1\0\12\166\1\0\4\166\1\0\11\166\2\0"+
+ "\1\u0185\2\u0186\1\u0187\1\u0185\1\u0186\4\u0185\1\u0186\1\u0185"+
+ "\1\u0186\2\u0185\1\u0186\6\u0185\1\u0186\54\u0185\1\u01cb\103\u0186"+
+ "\1\u01cc\1\u0188\2\u0189\1\u018a\1\u0188\1\u0189\4\u0188\1\u0189"+
+ "\1\u0188\1\u0189\2\u0188\1\u0189\6\u0188\1\u0189\54\u0188\1\u01cb"+
+ "\103\u0189\1\u01cd\40\0\1\u01ce\14\0\1\u01ce\60\0\2\u01cf"+
+ "\101\0\1\u01d0\112\0\1\u01d1\14\0\1\u01d1\60\0\2\u01d2"+
+ "\50\0\14\u0124\1\u0122\1\u0124\1\0\65\u0124\3\0\2\u01d3"+
+ "\1\0\4\u01d3\2\0\1\u0126\1\u01d3\1\0\4\u01d3\1\0"+
+ "\10\u01d3\1\0\37\u01d3\2\0\4\u01d3\2\0\14\u0134\1\u0132"+
+ "\1\u0134\1\0\65\u0134\3\0\2\u01d4\1\0\4\u01d4\2\0"+
+ "\1\u0136\1\u01d4\1\0\4\u01d4\1\0\10\u01d4\1\0\37\u01d4"+
+ "\2\0\4\u01d4\2\0\2\231\1\0\32\231\1\u01d5\46\231"+
+ "\14\u013e\1\u013c\1\u013e\1\0\65\u013e\3\0\2\u01d6\1\0"+
+ "\4\u01d6\2\0\1\u0140\1\u01d6\1\0\4\u01d6\1\0\10\u01d6"+
+ "\1\0\37\u01d6\2\0\4\u01d6\2\0\2\240\1\0\32\240"+
+ "\1\u01d7\46\240\7\0\1\u01d8\76\0\1\u01d9\101\0\12\u0150"+
+ "\1\0\1\u0150\1\0\1\u0150\1\0\65\u0150\14\u0151\1\u0152"+
+ "\20\u0151\1\u01da\46\u0151\12\u0155\1\u0156\22\u0155\1\u01db\46\u0155"+
+ "\12\u01dc\1\u01dd\70\u01dc\1\0\14\u01de\1\u01dd\66\u01de\1\0"+
+ "\14\u0161\1\u0162\20\u0161\1\u01df\46\u0161\12\u0165\1\u0166\22\u0165"+
+ "\1\u01e0\46\u0165\12\u01e1\1\u01e2\70\u01e1\1\0\14\u01e3\1\u01e2"+
+ "\66\u01e3\37\0\1\u01e4\135\0\1\u01c6\33\0\1\u01c8\14\0"+
+ "\3\u01c8\2\0\1\u01c8\11\0\1\u01c8\1\0\2\u01c8\6\0"+
+ "\1\u01c8\1\0\1\u01c7\2\u01c8\6\0\1\u01c8\10\0\4\113"+
+ "\6\0\1\113\6\0\5\113\1\0\6\113\1\u01e5\4\113"+
+ "\1\0\12\113\1\0\1\113\1\u01e5\2\113\1\0\11\113"+
+ "\10\0\4\166\6\0\1\166\6\0\5\166\1\0\6\166"+
+ "\1\u01e6\4\166\1\0\6\166\1\u01e7\3\166\1\0\4\166"+
+ "\1\0\11\166\54\0\1\u01e8\76\0\1\u01e9\13\0\1\u01e9"+
+ "\64\0\1\u01ea\11\0\1\u01ea\71\0\1\u01eb\11\0\1\u01eb"+
+ "\74\0\1\u01ec\13\0\1\u01ec\22\0\2\231\1\0\33\231"+
+ "\1\u01ed\45\231\2\240\1\0\33\240\1\u01ee\45\240\14\u0151"+
+ "\1\u0152\21\u0151\1\u01ef\45\u0151\12\u0155\1\u0156\23\u0155\1\u01f0"+
+ "\45\u0155\12\u01dc\1\u01ad\67\u01dc\1\u01f1\1\u01ad\14\u01de\1\u01b1"+
+ "\65\u01de\1\u01f2\1\u01b1\14\u0161\1\u0162\21\u0161\1\u01f3\45\u0161"+
+ "\12\u0165\1\u0166\23\u0165\1\u01f4\45\u0165\12\u01e1\1\u01bd\67\u01e1"+
+ "\1\u01f5\1\u01bd\14\u01e3\1\u01c1\65\u01e3\1\u01f6\1\u01c1\37\0"+
+ "\1\u01f7\52\0\4\113\6\0\1\113\6\0\5\113\1\0"+
+ "\3\113\1\u01f8\7\113\1\0\4\113\1\u01f8\5\113\1\0"+
+ "\4\113\1\0\11\113\10\0\4\166\6\0\1\166\6\0"+
+ "\5\166\1\0\11\166\1\u01f9\1\166\1\0\12\166\1\0"+
+ "\4\166\1\0\11\166\10\0\4\166\6\0\1\166\6\0"+
+ "\5\166\1\0\10\166\1\u01fa\2\166\1\0\12\166\1\0"+
+ "\4\166\1\0\11\166\55\0\1\u01fb\23\0\1\u01fb\50\0"+
+ "\1\u01fc\17\0\1\u01fc\66\0\1\u01fd\12\0\1\u01fd\52\0"+
+ "\1\u01fe\107\0\1\u01ff\34\0\1\u01ff\11\0\2\231\1\0"+
+ "\34\231\1\u0200\44\231\2\240\1\0\34\240\1\u0201\44\240"+
+ "\14\u0151\1\u0152\22\u0151\1\u0202\44\u0151\12\u0155\1\u0156\24\u0155"+
+ "\1\u0203\44\u0155\12\u01dc\1\u0204\67\u01dc\1\u01f1\1\u01ad\14\u01de"+
+ "\1\u0205\65\u01de\1\u01f2\1\u01b1\14\u0161\1\u0162\22\u0161\1\u0206"+
+ "\44\u0161\12\u0165\1\u0166\24\u0165\1\u0207\44\u0165\12\u01e1\1\u0208"+
+ "\67\u01e1\1\u01f5\1\u01bd\14\u01e3\1\u0209\65\u01e3\1\u01f6\1\u01c1"+
+ "\40\0\1\u020a\51\0\4\166\6\0\1\166\6\0\5\166"+
+ "\1\0\11\166\1\u020b\1\166\1\0\12\166\1\0\4\166"+
+ "\1\0\11\166\10\0\4\166\6\0\1\166\6\0\5\166"+
+ "\1\0\6\166\1\u020c\4\166\1\0\12\166\1\0\4\166"+
+ "\1\0\11\166\44\0\1\u020d\11\0\1\u020d\67\0\1\u020e"+
+ "\14\0\1\u020e\66\0\1\u020f\14\0\1\u020f\26\0\2\231"+
+ "\1\0\35\231\1\u0210\43\231\2\240\1\0\35\240\1\u0211"+
+ "\43\240\14\u0151\1\u0152\23\u0151\1\u0212\43\u0151\12\u0155\1\u0156"+
+ "\25\u0155\1\u0213\43\u0155\14\u0161\1\u0162\23\u0161\1\u0214\43\u0161"+
+ "\12\u0165\1\u0166\25\u0165\1\u0215\43\u0165\37\0\1\u0216\52\0"+
+ "\4\166\6\0\1\166\6\0\5\166\1\0\13\166\1\0"+
+ "\4\166\1\u0217\5\166\1\0\4\166\1\0\11\166\10\0"+
+ "\4\166\6\0\1\166\6\0\5\166\1\0\5\166\1\u0218"+
+ "\5\166\1\0\12\166\1\0\4\166\1\0\11\166\2\0"+
+ "\2\231\1\0\34\231\1\u0219\44\231\2\240\1\0\34\240"+
+ "\1\u021a\44\240\14\u0151\1\u0152\22\u0151\1\u021b\44\u0151\12\u0155"+
+ "\1\u0156\24\u0155\1\u021c\44\u0155\14\u0161\1\u0162\22\u0161\1\u021d"+
+ "\44\u0161\12\u0165\1\u0166\24\u0165\1\u021e\44\u0165\34\0\1\u021f"+
+ "\55\0\4\166\6\0\1\166\6\0\5\166\1\0\13\166"+
+ "\1\0\12\166\1\0\4\166\1\0\1\166\1\u0220\7\166"+
+ "\2\0\2\231\1\0\31\231\1\u0221\47\231\2\240\1\0"+
+ "\31\240\1\u0222\47\240\14\u0151\1\u0152\17\u0151\1\u0223\47\u0151"+
+ "\12\u0155\1\u0156\21\u0155\1\u0224\47\u0155\14\u0161\1\u0162\17\u0161"+
+ "\1\u0225\47\u0161\12\u0165\1\u0166\21\u0165\1\u0226\47\u0165\6\0"+
+ "\4\166\6\0\1\166\6\0\5\166\1\0\13\166\1\0"+
+ "\4\166\1\u0227\5\166\1\0\4\166\1\0\11\166\10\0"+
+ "\4\166\6\0\1\166\6\0\5\166\1\0\10\166\1\u0228"+
+ "\2\166\1\0\12\166\1\0\4\166\1\0\11\166\10\0"+
+ "\4\166\6\0\1\166\6\0\5\166\1\0\4\166\1\u0229"+
+ "\6\166\1\0\12\166\1\0\4\166\1\0\11\166\10\0"+
+ "\4\166\6\0\1\166\6\0\5\166\1\0\5\166\1\u022a"+
+ "\5\166\1\0\12\166\1\0\4\166\1\0\11\166\2\0"+
+ "\6\u022b\4\u022c\6\u022b\1\u022c\5\u022b\1\0\5\u022c\1\u022b"+
+ "\13\u022c\1\u022b\12\u022c\1\u022b\4\u022c\1\u022b\11\u022c\2\u022b"+
+ "\41\0\1\u022d\3\0\1\u022e\7\0\1\u022f\1\u0230\20\0"+
+ "\1\u0231\12\0\4\166\6\0\1\166\6\0\5\166\1\0"+
+ "\4\166\1\u0232\3\166\1\u0233\2\166\1\0\4\166\1\u0234"+
+ "\1\u0235\4\166\1\0\4\166\1\0\6\166\1\u0236\2\166"+
+ "\60\0\1\u0237\74\0\1\u0238\112\0\1\u0239\102\0\1\u023a"+
+ "\104\0\1\u023b\33\0\4\166\6\0\1\166\6\0\5\166"+
+ "\1\0\13\166\1\0\5\166\1\u023c\4\166\1\0\4\166"+
+ "\1\0\11\166\10\0\4\166\6\0\1\166\6\0\5\166"+
+ "\1\0\12\166\1\u023d\1\0\12\166\1\0\4\166\1\0"+
+ "\11\166\10\0\4\166\6\0\1\166\6\0\5\166\1\0"+
+ "\13\166\1\0\5\166\1\u023e\4\166\1\0\4\166\1\0"+
+ "\11\166\10\0\4\166\6\0\1\166\6\0\5\166\1\0"+
+ "\13\166\1\0\4\166\1\u023f\5\166\1\0\4\166\1\0"+
+ "\11\166\10\0\4\166\6\0\1\166\6\0\5\166\1\0"+
+ "\13\166\1\0\5\166\1\u0240\4\166\1\0\4\166\1\0"+
+ "\11\166\45\0\1\u0241\132\0\1\u0242\104\0\1\u0243\65\0"+
+ "\1\u0244\121\0\1\u0245\16\0\4\166\6\0\1\166\6\0"+
+ "\5\166\1\0\6\166\1\u0246\4\166\1\0\12\166\1\0"+
+ "\4\166\1\0\11\166\10\0\4\166\6\0\1\166\6\0"+
+ "\5\166\1\0\13\166\1\0\12\166\1\0\4\166\1\0"+
+ "\1\166\1\u0247\7\166\10\0\4\166\6\0\1\166\6\0"+
+ "\5\166\1\0\13\166\1\0\12\166\1\0\4\166\1\0"+
+ "\2\166\1\u0248\6\166\10\0\4\166\6\0\1\166\6\0"+
+ "\5\166\1\0\13\166\1\0\4\166\1\u0249\5\166\1\0"+
+ "\4\166\1\0\11\166\10\0\4\166\6\0\1\166\6\0"+
+ "\5\166\1\0\13\166\1\0\12\166\1\0\4\166\1\0"+
+ "\2\166\1\u024a\6\166\47\0\1\u024b\71\0\1\u024c\103\0"+
+ "\1\u024d\113\0\1\u024e\102\0\1\u024f\47\0\4\166\6\0"+
+ "\1\166\6\0\5\166\1\0\10\166\1\u0250\2\166\1\0"+
+ "\12\166\1\0\4\166\1\0\11\166\10\0\4\166\6\0"+
+ "\1\166\6\0\4\166\1\u0251\1\0\13\166\1\0\12\166"+
+ "\1\0\4\166\1\0\11\166\10\0\4\166\6\0\1\166"+
+ "\6\0\4\166\1\u0252\1\0\13\166\1\0\12\166\1\0"+
+ "\4\166\1\0\11\166\10\0\4\166\6\0\1\166\6\0"+
+ "\5\166\1\0\6\166\1\u0253\4\166\1\0\12\166\1\0"+
+ "\4\166\1\0\11\166\10\0\4\166\6\0\1\166\6\0"+
+ "\5\166\1\0\5\166\1\u0254\5\166\1\0\12\166\1\0"+
+ "\4\166\1\0\11\166\60\0\1\u0255\125\0\1\u0256\50\0"+
+ "\1\u0257\103\0\1\u0258\44\0\4\166\6\0\1\166\6\0"+
+ "\5\166\1\0\13\166\1\0\5\166\1\u0259\4\166\1\0"+
+ "\4\166\1\0\11\166\10\0\4\166\6\0\1\166\6\0"+
+ "\5\166\1\0\13\166\1\0\12\166\1\0\4\166\1\0"+
+ "\7\166\1\u025a\1\166\10\0\4\166\6\0\1\166\6\0"+
+ "\5\166\1\0\10\166\1\u025b\2\166\1\0\12\166\1\0"+
+ "\4\166\1\0\11\166\10\0\4\166\6\0\1\166\6\0"+
+ "\5\166\1\0\10\166\1\u025c\2\166\1\0\12\166\1\0"+
+ "\4\166\1\0\11\166\103\0\1\u025d\61\0\1\u0245\125\0"+
+ "\1\u024f\103\0\1\u025e\10\0\4\166\6\0\1\166\6\0"+
+ "\5\166\1\0\13\166\1\0\12\166\1\0\4\166\1\0"+
+ "\10\166\1\u025f\10\0\4\166\6\0\1\166\6\0\5\166"+
+ "\1\0\13\166\1\0\6\166\1\u024a\3\166\1\0\4\166"+
+ "\1\0\11\166\10\0\4\166\6\0\1\166\6\0\5\166"+
+ "\1\0\13\166\1\0\12\166\1\0\4\166\1\0\10\166"+
+ "\1\u0254\10\0\4\166\6\0\1\166\6\0\5\166\1\0"+
+ "\13\166\1\0\12\166\1\0\4\166\1\0\10\166\1\u0260"+
+ "\35\0\1\u0245\150\0\1\u0261\11\0\4\166\6\0\1\166"+
+ "\6\0\4\166\1\u024a\1\0\13\166\1\0\12\166\1\0"+
+ "\4\166\1\0\11\166\10\0\4\166\6\0\1\166\6\0"+
+ "\5\166\1\0\13\166\1\0\12\166\1\0\4\166\1\0"+
+ "\7\166\1\u0262\1\166\57\0\1\u0245\34\0\4\166\6\0"+
+ "\1\166\6\0\5\166\1\0\13\166\1\0\4\166\1\u024a"+
+ "\5\166\1\0\4\166\1\0\11\166\2\0";
+
+ /**
+ * 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, 0, 1, 0, 0, 0, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 9,
+ 1, 9, 1, 1, 9, 9, 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, 1, 9, 1, 1, 1, 1, 1, 9, 1, 1, 1, 1,
+ 9, 1, 1, 1, 1, 9, 9, 1, 9, 3, 3, 3, 3, 3, 3, 9,
+ 9, 1, 1, 1, 9, 1, 1, 1, 1, 1, 9, 9, 1, 9, 3, 3,
+ 3, 3, 3, 3, 9, 9, 1, 1, 1, 9, 1, 1, 1, 9, 9, 1,
+ 1, 0, 1, 0, 9, 1, 2, 1, 2, 1, 1, 0, 0, 0, 9, 1,
+ 1, 9, 9, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 9, 1,
+ 0, 0, 1, 9, 0, 9, 0, 0, 9, 0, 0, 0, 9, 1, 1, 0,
+ 1, 0, 9, 0, 0, 0, 1, 1, 0, 0, 0, 0, 9, 0, 0, 0,
+ 0, 9, 0, 0, 0, 1, 0, 0, 1, 0, 0, 9, 0, 0, 1, 0,
+ 0, 9, 0, 0, 0, 1, 0, 1, 1, 0, 0, 9, 0, 0, 0, 1,
+ 0, 1, 1, 1, 0, 0, 9, 9, 9, 0, 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, 13, 9, 13, 9, 9, 1,
+ 1, 0, 0, 1, 3, 2, 2, 3, 2, 2, 0, 0, 0, 0, 0, 0,
+ 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0,
+ 1, 1, 1, 0, 3, 3, 2, 3, 3, 2, 1, 1, 0, 0, 1, 1,
+ 0, 0, 1, 1, 3, 3, 2, 3, 3, 2, 1, 1, 0, 0, 1, 1,
+ 0, 0, 9, 9, 0, 1, 9, 0, 1, 1, 5, 13, 13, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 1, 9, 9, 2, 2, 0, 9, 0, 2, 2,
+ 0, 9, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 2, 2,
+ 0, 0, 2, 2, 0, 0, 0, 1, 1, 1, 0, 0, 0, 9, 9, 1,
+ 1, 2, 2, 1, 1, 2, 2, 1, 1, 0, 1, 1, 9, 9, 9, 1,
+ 1, 2, 2, 2, 2, 0, 1, 1, 1, 1, 2, 2, 2, 2, 9, 1,
+ 1, 1, 3, 3, 3, 3, 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();
+
+ private static final String rcsver = "$Id: JSPTokenizer.java,v 1.1 2004/11/11 08:35:28 david_williams Exp $";//$NON-NLS-1$
+
+ /**
+ * 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;
+ // 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; i++) {
+ if(same && fIsCaseSensitiveBlocking)
+ same = yy_buffer[i + yy_currentPos - searchStringLength] == searchString.charAt(i);
+ else if(same && !fIsCaseSensitiveBlocking)
+ 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;
+}
+/**
+ * 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
+ *
+ * @see com.ibm.sed.parser.BlockTokenizer#newInstance()
+ */
+ 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);
+ }
+
+
+ /**
+ * 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[28900];
+ int i = 0; /* index in packed string */
+ int j = 0; /* index in unpacked array */
+ while (i < 7180) {
+ 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()!
+ */
+ private 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 578:
+ case 583:
+ case 590:
+ case 595:
+ {
+ 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 611: break;
+ case 542:
+ case 544:
+ case 545:
+ case 546:
+ case 547:
+ case 548:
+ case 549:
+ {
+ if(Debug.debugTokenizer)
+ dump("\nCDATA start");//$NON-NLS-1$
+ fStateStack.push(yystate());
+ yybegin(ST_CDATA_TEXT);
+ return XML_CDATA_OPEN;
+ }
+ case 612: break;
+ case 534:
+ {
+ 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 613: break;
+ case 526:
+ {
+ if(Debug.debugTokenizer)
+ dump("element");//$NON-NLS-1$
+ yybegin(ST_XML_ELEMENT_DECLARATION);
+ return XML_ELEMENT_DECLARATION;
+ }
+ case 614: break;
+ case 525:
+ {
+ if(Debug.debugTokenizer)
+ dump("attlist");//$NON-NLS-1$
+ yybegin(ST_XML_ATTLIST_DECLARATION);
+ return XML_ATTLIST_DECLARATION;
+ }
+ case 615: break;
+ case 524:
+ {
+ if(Debug.debugTokenizer)
+ dump("doctype");//$NON-NLS-1$
+ yybegin(ST_XML_DOCTYPE_DECLARATION);
+ return XML_DOCTYPE_DECLARATION;
+ }
+ case 616: break;
+ case 510:
+ {
+ 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 617: break;
+ case 509:
+ {
+ 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 618: break;
+ case 503:
+ {
+ 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 619: break;
+ case 481:
+ case 519:
+ case 520:
+ {
+ return JSP_VBL_QUOTED_CONTENT;
+ }
+ case 620: break;
+ case 476:
+ case 515:
+ case 516:
+ {
+ return JSP_EL_QUOTED_CONTENT;
+ }
+ case 621: break;
+ case 472:
+ {
+ if(Debug.debugTokenizer)
+ dump("\nJSP comment close");//$NON-NLS-1$
+ yybegin(YYINITIAL);
+ return JSP_COMMENT_CLOSE;
+ }
+ case 622: break;
+ case 471:
+ {
+ 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;
+ }
+ case 623: break;
+ case 460:
+ {
+ if (Debug.debugTokenizer) {
+ System.out.println("begin embedded region: " + fEmbeddedHint);//$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 624: break;
+ case 459:
+ {
+ if (Debug.debugTokenizer) {
+ System.out.println("begin embedded region: " + fEmbeddedHint);//$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 625: break;
+ case 454:
+ {
+ if(Debug.debugTokenizer)
+ dump("\nCharRef");//$NON-NLS-1$
+ return XML_CHAR_REFERENCE;
+ }
+ case 626: break;
+ case 451:
+ {
+ 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 627: break;
+ case 450:
+ {
+ if(Debug.debugTokenizer)
+ dump("\nJSP comment start");//$NON-NLS-1$
+ yybegin(ST_JSP_COMMENT);
+ return JSP_COMMENT_OPEN;
+ }
+ case 628: break;
+ case 383:
+ {
+ 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 629: break;
+ case 382:
+ {
+ if(Debug.debugTokenizer)
+ dump("comment end");//$NON-NLS-1$
+ fEmbeddedHint = UNDEFINED;
+ yybegin(YYINITIAL);
+ return XML_COMMENT_CLOSE;
+ }
+ case 630: break;
+ case 381:
+ {
+ if(Debug.debugTokenizer)
+ dump("CDATA end");//$NON-NLS-1$
+ yybegin(fStateStack.pop());
+ return XML_CDATA_CLOSE;
+ }
+ case 631: break;
+ case 380:
+ {
+ 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 632: break;
+ case 379:
+ {
+ if(Debug.debugTokenizer)
+ dump("\nPEReference");//$NON-NLS-1$
+ return XML_PE_REFERENCE;
+ }
+ case 633: break;
+ case 378:
+ {
+ 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 634: break;
+ case 375:
+ {
+ if(Debug.debugTokenizer)
+ dump("\nEntityRef");//$NON-NLS-1$
+ return XML_ENTITY_REFERENCE;
+ }
+ case 635: break;
+ case 369:
+ case 406:
+ case 412:
+ case 418:
+ case 421:
+ case 424:
+ case 427:
+ case 431:
+ case 435:
+ case 437:
+ case 440:
+ case 443:
+ case 447:
+ {
+ /* 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);//$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;
+ }
+ return PROXY_CONTEXT;
+ }
+ }
+ case 636: break;
+ case 368:
+ case 405:
+ case 411:
+ case 417:
+ case 420:
+ case 423:
+ case 426:
+ case 430:
+ case 434:
+ case 436:
+ case 439:
+ case 442:
+ case 446:
+ {
+ /* 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);//$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;
+ }
+ return PROXY_CONTEXT;
+ }
+ }
+ case 637: break;
+ case 367:
+ {
+ fStateStack.push(yystate());
+ if(fStateStack.peek()==YYINITIAL) {
+ 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);//$NON-NLS-1$
+ }
+ if(Debug.debugTokenizer)
+ dump("JSP directive start");//$NON-NLS-1$
+ 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;
+ }
+ return PROXY_CONTEXT;
+ }
+ }
+ case 638: break;
+ case 357:
+ {
+ yybegin(ST_JSP_VBL_DQUOTES_END);
+ return JSP_VBL_QUOTED_CONTENT;
+ }
+ case 639: break;
+ case 353:
+ {
+ yybegin(ST_JSP_VBL_SQUOTES_END);
+ return JSP_VBL_QUOTED_CONTENT;
+ }
+ case 640: break;
+ case 351:
+ {
+ fELlevel++;
+ if(fELlevel == 1) {
+ return JSP_VBL_OPEN;
+ }
+ }
+ case 641: break;
+ case 341:
+ {
+ yybegin(ST_JSP_EL_DQUOTES_END);
+ return JSP_EL_QUOTED_CONTENT;
+ }
+ case 642: break;
+ case 337:
+ {
+ yybegin(ST_JSP_EL_SQUOTES_END);
+ return JSP_EL_QUOTED_CONTENT;
+ }
+ case 643: break;
+ case 335:
+ {
+ //System.out.println(JSP_EL_CONTENT+ ":[" + yytext() + "]");
+ return JSP_EL_CONTENT;
+ }
+ case 644: break;
+ case 334:
+ {
+ fELlevel++;
+ if(fELlevel == 1) {
+ return JSP_EL_OPEN;
+ }
+ }
+ case 645: break;
+ case 331:
+ {
+ int enterState = yystate();
+ yybegin(ST_JSP_DQUOTED_VBL);
+ assembleEmbeddedContainer(JSP_VBL_OPEN, new String[]{JSP_VBL_CLOSE, XML_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)) {
+ yybegin(ST_ABORT_EMBEDDED);
+ fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
+ }
+ else {
+ yybegin(enterState);
+ }
+ return PROXY_CONTEXT;
+ }
+ case 646: break;
+ case 330:
+ {
+ int enterState = yystate();
+ yybegin(ST_JSP_DQUOTED_EL);
+ assembleEmbeddedContainer(JSP_EL_OPEN, new String[]{JSP_EL_CLOSE, XML_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)) {
+ yybegin(ST_ABORT_EMBEDDED);
+ fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
+ }
+ else {
+ yybegin(enterState);
+ }
+ return PROXY_CONTEXT;
+ }
+ case 647: break;
+ case 328:
+ {
+ int enterState = yystate();
+ yybegin(ST_JSP_SQUOTED_VBL);
+ assembleEmbeddedContainer(JSP_VBL_OPEN, new String[]{JSP_VBL_CLOSE, XML_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)) {
+ yybegin(ST_ABORT_EMBEDDED);
+ fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
+ }
+ else {
+ yybegin(enterState);
+ }
+ return PROXY_CONTEXT;
+ }
+ case 648: break;
+ case 327:
+ {
+ int enterState = yystate();
+ yybegin(ST_JSP_SQUOTED_EL);
+ assembleEmbeddedContainer(JSP_EL_OPEN, new String[]{JSP_EL_CLOSE, XML_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)) {
+ yybegin(ST_ABORT_EMBEDDED);
+ fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
+ }
+ else {
+ yybegin(enterState);
+ }
+ return PROXY_CONTEXT;
+ }
+ case 649: break;
+ case 326:
+ {
+ if (Debug.debugTokenizer) {
+ System.out.println("begin embedded region: " + fEmbeddedHint);//$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 650: break;
+ case 284:
+ case 296:
+ case 302:
+ {
+ return XML_DOCTYPE_INTERNAL_SUBSET;
+ }
+ case 651: break;
+ case 272:
+ {
+ String tagName = yytext().substring(1);
+ // pushback to just after the opening bracket
+ yypushback(yylength() - 1);
+ if(!isNestable(tagName)) {
+ 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 652: break;
+ case 270:
+ {
+ String tagName = yytext().substring(1);
+ // pushback to just after the opening bracket
+ yypushback(yylength() - 1);
+ if(!isNestable(tagName)) {
+ 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 653: break;
+ case 268:
+ {
+ yybegin(YYINITIAL);
+ fEmbeddedHint = UNDEFINED;
+ if(Debug.debugTokenizer)
+ dump("empty tag close");//$NON-NLS-1$
+ return XML_EMPTY_TAG_CLOSE;
+ }
+ case 654: break;
+ case 125:
+ {
+ if (Debug.debugTokenizer) {
+ System.out.println("begin embedded region: " + fEmbeddedHint);//$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(XML_TAG_ATTRIBUTE_VALUE_DQUOTE, XML_TAG_ATTRIBUTE_VALUE_DQUOTE);
+ fStateStack.pop();
+ fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
+ fEmbeddedPostState = ST_XML_EQUALS;
+ yybegin(ST_XML_ATTRIBUTE_NAME);
+ return PROXY_CONTEXT;
+ }
+ case 655: break;
+ case 123:
+ {
+ if (Debug.debugTokenizer) {
+ System.out.println("begin embedded region: " + fEmbeddedHint);//$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 656: break;
+ case 122:
+ case 127:
+ case 128:
+ case 274:
+ case 278:
+ case 279:
+ case 388:
+ case 391:
+ case 458:
+ {
+ 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 657: break;
+ case 121:
+ {
+ if(Debug.debugTokenizer)
+ dump("equals");//$NON-NLS-1$
+ fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
+ fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
+ yybegin(ST_XML_ATTRIBUTE_VALUE);
+ return XML_TAG_ATTRIBUTE_EQUALS;
+ }
+ case 658: break;
+ case 120:
+ {
+ 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 659: break;
+ case 116:
+ case 117:
+ case 118:
+ case 269:
+ case 387:
+ case 457:
+ case 485:
+ case 486:
+ case 504:
+ case 505:
+ case 522:
+ case 523:
+ case 535:
+ case 543:
+ case 550:
+ case 551:
+ case 552:
+ case 553:
+ case 555:
+ case 561:
+ case 562:
+ case 563:
+ case 564:
+ case 565:
+ case 571:
+ case 572:
+ case 573:
+ case 574:
+ case 575:
+ case 581:
+ case 582:
+ case 584:
+ case 585:
+ case 591:
+ case 592:
+ case 593:
+ case 594:
+ case 600:
+ case 601:
+ case 602:
+ case 603:
+ case 606:
+ case 607:
+ case 609:
+ {
+ if(Debug.debugTokenizer)
+ dump("tag name");//$NON-NLS-1$
+ fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
+ fEmbeddedPostState = ST_XML_EQUALS;
+ yybegin(ST_XML_ATTRIBUTE_NAME);
+ return XML_TAG_NAME;
+ }
+ case 660: break;
+ case 114:
+ {
+ 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);
+ return XML_TAG_CLOSE;
+ }
+ case 661: break;
+ case 107:
+ case 111:
+ case 264:
+ {
+ if(Debug.debugTokenizer)
+ dump("attr value");//$NON-NLS-1$
+ yybegin(ST_JSP_DIRECTIVE_ATTRIBUTE_NAME);
+ return XML_TAG_ATTRIBUTE_VALUE;
+ }
+ case 662: break;
+ case 106:
+ {
+ if(Debug.debugTokenizer)
+ dump("equals");//$NON-NLS-1$
+ yybegin(ST_JSP_DIRECTIVE_ATTRIBUTE_VALUE);
+ return XML_TAG_ATTRIBUTE_EQUALS;
+ }
+ case 663: break;
+ case 105:
+ {
+ if(Debug.debugTokenizer)
+ dump("attr name");//$NON-NLS-1$
+ yybegin(ST_JSP_DIRECTIVE_EQUALS);
+ return XML_TAG_ATTRIBUTE_NAME;
+ }
+ case 664: break;
+ case 102:
+ {
+ if(Debug.debugTokenizer)
+ dump("JSP directive name");//$NON-NLS-1$
+ yybegin(ST_JSP_DIRECTIVE_NAME_WHITESPACE);
+ return JSP_DIRECTIVE_NAME;
+ }
+ case 665: break;
+ case 98:
+ case 99:
+ case 100:
+ {
+ if(Debug.debugTokenizer)
+ dump("JSP code content");//$NON-NLS-1$
+ return doScan("%>", false, false, false, JSP_CONTENT, ST_JSP_CONTENT, ST_JSP_CONTENT);
+ }
+ case 666: break;
+ case 94:
+ case 96:
+ case 97:
+ case 254:
+ case 255:
+ case 258:
+ {
+ 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 667: break;
+ case 93:
+ {
+ 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 668: break;
+ case 92:
+ {
+ if(Debug.debugTokenizer)
+ dump("DHTML processing instruction attribute name");//$NON-NLS-1$
+ yybegin(ST_DHTML_EQUALS);
+ return XML_TAG_ATTRIBUTE_NAME;
+ }
+ case 669: break;
+ case 90:
+ {
+ if(Debug.debugTokenizer)
+ dump("DHTML processing instruction end");//$NON-NLS-1$
+ fEmbeddedHint = UNDEFINED;
+ yybegin(YYINITIAL);
+ return XML_PI_CLOSE;
+ }
+ case 670: break;
+ case 84:
+ case 86:
+ case 245:
+ {
+ 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 671: break;
+ case 83:
+ {
+ 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 672: break;
+ case 50:
+ case 200:
+ case 201:
+ case 204:
+ case 214:
+ case 215:
+ case 218:
+ case 219:
+ case 362:
+ case 365:
+ {
+ return JSP_VBL_CONTENT;
+ }
+ case 673: break;
+ case 43:
+ case 179:
+ case 180:
+ case 183:
+ case 193:
+ case 194:
+ case 197:
+ case 198:
+ case 332:
+ case 346:
+ case 349:
+ case 416:
+ {
+ return JSP_EL_CONTENT;
+ }
+ case 674: break;
+ case 35:
+ case 159:
+ case 160:
+ case 322:
+ case 413:
+ case 470:
+ case 493:
+ case 512:
+ case 528:
+ case 537:
+ {
+ if(Debug.debugTokenizer)
+ dump("attlist contentspec");//$NON-NLS-1$
+ return XML_ATTLIST_DECL_CONTENT;
+ }
+ case 675: break;
+ case 33:
+ case 152:
+ case 153:
+ case 312:
+ case 407:
+ case 468:
+ case 492:
+ case 511:
+ case 527:
+ case 536:
+ {
+ if(Debug.debugTokenizer)
+ dump("elementdecl contentspec");//$NON-NLS-1$
+ return XML_ELEMENT_DECL_CONTENT;
+ }
+ case 676: break;
+ case 22:
+ case 112:
+ {
+ 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 677: break;
+ case 18:
+ case 104:
+ {
+ if(Debug.debugTokenizer)
+ dump("white space");//$NON-NLS-1$
+ yybegin(ST_JSP_DIRECTIVE_ATTRIBUTE_NAME);
+ return WHITE_SPACE;
+ }
+ case 678: 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 73:
+ case 170:
+ case 175:
+ {
+ if(Debug.debugTokenizer)
+ dump("white space");//$NON-NLS-1$
+ return WHITE_SPACE;
+ }
+ case 679: break;
+ case 0:
+ case 57:
+ case 60:
+ case 62:
+ case 226:
+ case 228:
+ case 229:
+ case 231:
+ case 233:
+ case 372:
+ case 373:
+ case 374:
+ case 453:
+ {
+ if(Debug.debugTokenizer)
+ dump("\nXML content");//$NON-NLS-1$
+ return XML_CONTENT;
+ }
+ case 680: break;
+ case 58:
+ case 101:
+ case 113:
+ case 119:
+ case 129:
+ {
+ 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 681: break;
+ case 59:
+ case 61:
+ case 65:
+ case 66:
+ case 67:
+ case 71:
+ case 72:
+ case 81:
+ case 85:
+ case 87:
+ case 88:
+ case 89:
+ case 91:
+ case 95:
+ case 103:
+ case 108:
+ case 109:
+ case 110:
+ case 115:
+ case 124:
+ case 131:
+ case 132:
+ case 133:
+ case 134:
+ case 136:
+ case 137:
+ case 139:
+ case 140:
+ case 141:
+ case 144:
+ case 145:
+ case 146:
+ case 149:
+ case 150:
+ case 151:
+ case 156:
+ case 157:
+ case 158:
+ case 164:
+ case 167:
+ case 172:
+ case 173:
+ case 177:
+ case 178:
+ case 185:
+ case 186:
+ case 188:
+ case 189:
+ case 195:
+ case 199:
+ case 206:
+ case 207:
+ case 209:
+ case 210:
+ case 216:
+ case 220:
+ {
+ if (Debug.debugTokenizer)
+ System.out.println("!!!unexpected!!!: \"" + yytext() + "\":" + //$NON-NLS-2$//$NON-NLS-1$
+ yychar + "-" + (yychar + yylength()));//$NON-NLS-1$
+ return UNDEFINED;
+ }
+ case 682: break;
+ case 63:
+ case 64:
+ {
+ 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 683: break;
+ case 68:
+ case 187:
+ case 190:
+ case 208:
+ case 211:
+ {
+ if(Debug.debugTokenizer)
+ dump("LINE FEED");//$NON-NLS-1$
+ return WHITE_SPACE;
+ }
+ case 684: break;
+ case 69:
+ case 70:
+ {
+ if(Debug.debugTokenizer)
+ dump("comment content");//$NON-NLS-1$
+ return scanXMLCommentText();
+ }
+ case 685: break;
+ case 74:
+ case 75:
+ case 76:
+ case 239:
+ case 240:
+ case 384:
+ case 456:
+ case 484:
+ {
+ if(Debug.debugTokenizer)
+ dump("processing instruction target");//$NON-NLS-1$
+ fEmbeddedHint = XML_CONTENT;
+ yybegin(ST_PI_WS);
+ return XML_TAG_NAME;
+ }
+ case 686: break;
+ case 77:
+ {
+ yybegin(ST_PI_CONTENT);
+ return WHITE_SPACE;
+ }
+ case 687: break;
+ case 78:
+ case 79:
+ case 80:
+ {
+ // 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 688: break;
+ case 82:
+ {
+ if(Debug.debugTokenizer)
+ dump("XML processing instruction attribute name");//$NON-NLS-1$
+ yybegin(ST_XML_PI_EQUALS);
+ return XML_TAG_ATTRIBUTE_NAME;
+ }
+ case 689: break;
+ case 126:
+ {
+ if (Debug.debugTokenizer) {
+ System.out.println("begin embedded region: " + fEmbeddedHint);//$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(XML_TAG_ATTRIBUTE_VALUE_SQUOTE, XML_TAG_ATTRIBUTE_VALUE_SQUOTE);
+ fStateStack.pop();
+ fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
+ fEmbeddedPostState = ST_XML_EQUALS;
+ yybegin(ST_XML_ATTRIBUTE_NAME);
+ return PROXY_CONTEXT;
+ }
+ case 690: break;
+ case 130:
+ {
+ 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 691: break;
+ case 135:
+ {
+ if(Debug.debugTokenizer)
+ dump("doctype type");//$NON-NLS-1$
+ yybegin(ST_XML_DOCTYPE_EXTERNAL_ID);
+ return XML_DOCTYPE_NAME;
+ }
+ case 692: break;
+ case 138:
+ case 142:
+ case 289:
+ case 293:
+ case 400:
+ {
+ 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 693: break;
+ case 143:
+ case 147:
+ case 299:
+ {
+ 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 694: break;
+ case 148:
+ case 305:
+ case 309:
+ case 403:
+ {
+ 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 695: break;
+ case 154:
+ {
+ 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 696: break;
+ case 155:
+ case 315:
+ case 319:
+ case 409:
+ {
+ 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 697: break;
+ case 161:
+ {
+ 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 698: break;
+ case 165:
+ case 166:
+ {
+ if(Debug.debugTokenizer)
+ dump("\nJSP comment text");//$NON-NLS-1$
+ return scanJSPCommentText();
+ }
+ case 699: break;
+ case 168:
+ case 174:
+ {
+ return XML_TAG_ATTRIBUTE_VALUE;
+ }
+ case 700: break;
+ case 169:
+ {
+ if (Debug.debugTokenizer) {
+ System.out.println("begin embedded region: " + fEmbeddedHint);//$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 701: break;
+ case 171:
+ {
+ return XML_TAG_ATTRIBUTE_VALUE_SQUOTE;
+ }
+ case 702: break;
+ case 176:
+ {
+ return XML_TAG_ATTRIBUTE_VALUE_DQUOTE;
+ }
+ case 703: break;
+ case 181:
+ {
+ yybegin(ST_JSP_EL_DQUOTES);
+ return JSP_EL_DQUOTE;
+ }
+ case 704: break;
+ case 182:
+ {
+ yybegin(ST_JSP_EL_SQUOTES);
+ return JSP_EL_SQUOTE;
+ }
+ case 705: break;
+ case 184:
+ {
+ fELlevel--;
+ if(fELlevel == 0) {
+ yybegin(YYINITIAL);
+ return JSP_EL_CLOSE;
+ }
+ return JSP_EL_CONTENT;
+ }
+ case 706: break;
+ case 191:
+ {
+ yybegin(ST_JSP_EL);
+ return JSP_EL_SQUOTE;
+ }
+ case 707: break;
+ case 192:
+ {
+ yybegin(ST_JSP_EL);
+ return JSP_EL_DQUOTE;
+ }
+ case 708: break;
+ case 196:
+ {
+ return JSP_EL_CLOSE;
+ }
+ case 709: break;
+ case 202:
+ {
+ yybegin(ST_JSP_VBL_DQUOTES);
+ return JSP_VBL_DQUOTE;
+ }
+ case 710: break;
+ case 203:
+ {
+ yybegin(ST_JSP_VBL_SQUOTES);
+ return JSP_VBL_SQUOTE;
+ }
+ case 711: break;
+ case 205:
+ {
+ fELlevel--;
+ if(fELlevel == 0) {
+ yybegin(YYINITIAL);
+ return JSP_VBL_CLOSE;
+ }
+ return JSP_VBL_CONTENT;
+ }
+ case 712: break;
+ case 212:
+ {
+ yybegin(ST_JSP_VBL);
+ return JSP_VBL_SQUOTE;
+ }
+ case 713: break;
+ case 213:
+ {
+ yybegin(ST_JSP_VBL);
+ return JSP_VBL_DQUOTE;
+ }
+ case 714: break;
+ case 217:
+ {
+ return JSP_VBL_CLOSE;
+ }
+ case 715: break;
+ case 221:
+ {
+ 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 716: break;
+ case 222:
+ {
+ if(Debug.debugTokenizer)
+ dump("\nprocessing instruction start");//$NON-NLS-1$
+ yybegin(ST_PI);
+ return XML_PI_OPEN;
+ }
+ case 717: break;
+ case 223:
+ case 234:
+ case 311:
+ case 321:
+ case 323:
+ case 333:
+ case 338:
+ case 342:
+ case 345:
+ case 348:
+ case 350:
+ case 354:
+ case 358:
+ case 361:
+ case 364:
+ {
+ /* 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);//$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;
+ }
+ return PROXY_CONTEXT;
+ }
+ }
+ case 718: break;
+ case 224:
+ {
+ fStateStack.push(yystate());
+ if(Debug.debugTokenizer)
+ dump("\ndeclaration start");//$NON-NLS-1$
+ yybegin(ST_XML_DECLARATION);
+ return XML_DECLARATION_OPEN;
+ }
+ case 719: break;
+ case 238:
+ {
+ if(Debug.debugTokenizer)
+ dump("processing instruction end");//$NON-NLS-1$
+ fEmbeddedHint = UNDEFINED;
+ yybegin(YYINITIAL);
+ return XML_PI_CLOSE;
+ }
+ case 720: break;
+ case 241:
+ {
+ // ended with nothing inside
+ fEmbeddedHint = UNDEFINED;
+ yybegin(YYINITIAL);
+ return XML_PI_CLOSE;
+ }
+ case 721: break;
+ case 242:
+ {
+ if(Debug.debugTokenizer)
+ dump("XML processing instruction end");//$NON-NLS-1$
+ fEmbeddedHint = UNDEFINED;
+ yybegin(YYINITIAL);
+ return XML_PI_CLOSE;
+ }
+ case 722: break;
+ case 259:
+ {
+ 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 723: break;
+ case 261:
+ {
+ 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 724: break;
+ case 162:
+ case 163:
+ {
+ return doBlockTagScan();
+ }
+ case 725: break;
+ default:
+ if (yy_input == YYEOF && yy_startRead == yy_currentPos) {
+ yy_atEOF = true;
+ yy_do_eof();
+ return null;
+ }
+ else {
+ yy_ScanError(YY_NO_MATCH);
+ }
+ }
+ }
+ }
+
+
+}
diff --git a/bundles/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/HTMLTokenizer/devel/JSPTokenizer.jflex b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/HTMLTokenizer/devel/JSPTokenizer.jflex
new file mode 100644
index 0000000..862e714
--- /dev/null
+++ b/bundles/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/HTMLTokenizer/devel/JSPTokenizer.jflex
@@ -0,0 +1,2558 @@
+/*******************************************************************************
+ * Copyright (c) 2004 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
+ *******************************************************************************/
+/*nlsXXX*/
+package org.eclipse.wst.sse.core.jsp.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.wst.sse.core.jsp.Logger;
+import org.eclipse.wst.sse.core.parser.BlockMarker;
+import org.eclipse.wst.sse.core.parser.BlockTokenizer;
+import org.eclipse.wst.sse.core.parser.TagMarker;
+import org.eclipse.wst.sse.core.text.ITextRegion;
+import org.eclipse.wst.sse.core.text.ITextRegionList;
+import org.eclipse.wst.sse.core.util.Debug;
+import org.eclipse.wst.sse.core.util.StringUtils;
+import org.eclipse.wst.sse.core.xml.internal.parser.ContextRegionContainer;
+import org.eclipse.wst.sse.core.xml.internal.parser.IntStack;
+import org.eclipse.wst.sse.core.xml.jsp.model.parser.temp.XMLJSPRegionContexts;
+
+%%
+
+%{
+ 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();
+
+ private static final String rcsver = "$Id: JSPTokenizer.jflex,v 1.4.2.1 2004/10/20 15:21:33 kitlo Exp $";//$NON-NLS-1$
+
+ /**
+ * 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;
+ // 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; i++) {
+ if(same && fIsCaseSensitiveBlocking)
+ same = yy_buffer[i + yy_currentPos - searchStringLength] == searchString.charAt(i);
+ else if(same && !fIsCaseSensitiveBlocking)
+ 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;
+}
+/**
+ * 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
+ *
+ * @see com.ibm.sed.parser.BlockTokenizer#newInstance()
+ */
+ 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);
+ }
+%}
+
+%eof{
+// do nothing, this is the downstream parser's job
+%eof}
+
+%public
+%class JSPTokenizer
+%implements BlockTokenizer, XMLJSPRegionContexts
+%function primGetNextToken
+%type String
+%char
+%line
+%unicode
+%pack
+
+%state ST_CDATA_TEXT
+%state ST_CDATA_END
+%state ST_XML_COMMENT
+%state ST_XML_COMMENT_END
+%state ST_PI
+%state ST_PI_WS
+%state ST_PI_CONTENT
+%state ST_XML_PI_ATTRIBUTE_NAME
+%state ST_XML_PI_EQUALS
+%state ST_XML_PI_ATTRIBUTE_VALUE
+%state ST_XML_PI_TAG_CLOSE
+%state ST_DHTML_ATTRIBUTE_NAME
+%state ST_DHTML_EQUALS
+%state ST_DHTML_ATTRIBUTE_VALUE
+%state ST_DHTML_TAG_CLOSE
+
+// scriptlet state(s)
+%state ST_JSP_CONTENT
+%state ST_JSP_DIRECTIVE_NAME
+%state ST_JSP_DIRECTIVE_NAME_WHITESPACE
+%state ST_JSP_DIRECTIVE_ATTRIBUTE_NAME
+%state ST_JSP_DIRECTIVE_EQUALS
+%state ST_JSP_DIRECTIVE_ATTRIBUTE_VALUE
+
+// normal tag states
+%state ST_XML_TAG_NAME
+%state ST_XML_ATTRIBUTE_NAME
+%state ST_XML_EQUALS
+%state ST_XML_ATTRIBUTE_VALUE
+
+// declaration (DTD) states
+%state ST_XML_DECLARATION
+%state ST_XML_DECLARATION_CLOSE
+
+%state ST_XML_DOCTYPE_DECLARATION
+%state ST_XML_DOCTYPE_EXTERNAL_ID
+%state ST_XML_DOCTYPE_ID_PUBLIC
+%state ST_XML_DOCTYPE_ID_SYSTEM
+
+%state ST_XML_ELEMENT_DECLARATION
+%state ST_XML_ELEMENT_DECLARATION_CONTENT
+
+%state ST_XML_ATTLIST_DECLARATION
+%state ST_XML_ATTLIST_DECLARATION_CONTENT
+
+
+%state ST_BLOCK_TAG_SCAN
+%state ST_BLOCK_TAG_INTERNAL_SCAN
+
+%state ST_JSP_COMMENT
+%state ST_JSP_COMMENT_END
+
+%state ST_XML_ATTRIBUTE_VALUE_SQUOTED
+%state ST_XML_ATTRIBUTE_VALUE_DQUOTED
+
+%state ST_ABORT_EMBEDDED
+
+%state ST_JSP_EL
+%state ST_JSP_EL_SQUOTES
+%state ST_JSP_EL_