blob: af0375cab65f47808aa84491537e0fb708e22d7b [file] [log] [blame]
/*******************************************************************************
* 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 = 8000;
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);
}
}
}
}