home *** CD-ROM | disk | FTP | other *** search
- package webeq3.parser.mathml;
-
- import java.io.IOException;
- import java.io.StringReader;
- import java.util.Vector;
- import webeq3.util.ErrorHandler;
- import webeq3.util.OutputHandler;
-
- public class Tokenizer {
- Vector tokens = null;
- int token_ptr = 0;
- private StringReader input;
- private int peekc = 32;
- private byte[] ctype = new byte[256];
- private static final byte CT_ALPHA = 4;
- private static final byte CT_WHITE = 8;
- public int ttype;
- public String sval;
- public static final int TT_EOF = -1;
- public static final int TT_WHITE = -2;
- public static final int TT_WORD = -3;
-
- public Tokenizer(StringReader var1) {
- this.input = var1;
- this.tokens = new Vector();
- this.setChars(97, 122, 4);
- this.setChars(65, 90, 4);
- byte[] var10000 = this.ctype;
- var10000[45] = (byte)(var10000[45] | 4);
- this.setChars(0, 20, 8);
- this.setChars(32, 32, 8);
- this.lex();
- }
-
- private void setChars(int var1, int var2, int var3) {
- if (var1 < 0) {
- var1 = 0;
- }
-
- if (var2 > this.ctype.length) {
- var2 = this.ctype.length;
- }
-
- while(var1 <= var2) {
- byte[] var10000 = this.ctype;
- int var10001 = var1++;
- var10000[var10001] = (byte)(var10000[var10001] | var3);
- }
-
- }
-
- private void lex() {
- try {
- this.peekc = this.input.read();
- } catch (IOException var4) {
- this.peekc = -1;
- }
-
- Token var1;
- do {
- try {
- var1 = this.makeToken();
- this.tokens.addElement(var1);
- } catch (IOException var3) {
- var1 = new Token(-1, (String)null);
- }
- } while(var1.ttype != -1);
-
- }
-
- public Token nextTokenOrSep() {
- return this.token_ptr < this.tokens.size() ? (Token)this.tokens.elementAt(this.token_ptr++) : null;
- }
-
- public Token nextToken() {
- Token var1 = this.nextTokenOrSep();
- if (this.token_ptr < this.tokens.size() && var1.ttype == -2) {
- var1 = this.nextTokenOrSep();
- }
-
- return var1;
- }
-
- public void pushBack() {
- --this.token_ptr;
- }
-
- private Token makeToken() throws IOException {
- StringReader var1 = this.input;
- byte[] var2 = this.ctype;
- int var3 = this.peekc;
- char[] var4 = new char[10];
- if (var3 < 0) {
- return new Token(-1, (String)null);
- } else {
- byte var5 = var3 < 256 ? var2[var3] : 4;
- if ((var5 & 4) != 0) {
- int var13 = 0;
-
- do {
- if (var13 >= var4.length) {
- char[] var7 = new char[var4.length * 2];
- System.arraycopy(var4, 0, var7, 0, var4.length);
- var4 = var7;
- }
-
- var4[var13++] = (char)var3;
- var3 = var1.read();
- var5 = var3 < 0 ? -1 : (var3 < 256 ? var2[var3] : 4);
- } while(var5 == 4);
-
- this.peekc = var3;
- return new Token(-3, String.copyValueOf(var4, 0, var13));
- } else if ((var5 & 8) != 0) {
- boolean var12 = false;
-
- do {
- var3 = var1.read();
- var5 = var3 < 0 ? -1 : (var3 < 256 ? var2[var3] : 4);
- } while(var5 == 8);
-
- this.peekc = var3;
- return new Token(-2, " ");
- } else {
- int var8 = var1.read();
- this.peekc = var8;
- return new Token(var3, "" + (char)var3);
- }
- }
- }
-
- public void print() {
- while(this.token_ptr < this.tokens.size()) {
- System.out.println(this.nextTokenOrSep());
- }
-
- this.token_ptr = 0;
- }
-
- public void printError(ErrorHandler var1) {
- this.token_ptr = this.token_ptr < this.tokens.size() ? this.token_ptr : this.tokens.size() - 1;
- int var2 = this.token_ptr - 30 > 0 ? this.token_ptr - 30 : 0;
- int var3 = this.token_ptr + 20 < this.tokens.size() - 1 ? this.token_ptr + 20 : this.tokens.size() - 1;
- int var4 = 0;
- var1.print(">> ");
-
- for(int var5 = var2; var5 < this.token_ptr; ++var5) {
- String var6 = ((Token)this.tokens.elementAt(var5)).sval;
- var1.print(var6);
- var4 += var6.length();
- }
-
- ((OutputHandler)var1).println();
- var1.print(">> ");
-
- for(int var8 = 0; var8 < var4; ++var8) {
- var1.print(" ");
- }
-
- for(int var7 = this.token_ptr; var7 < var3; ++var7) {
- var1.print(((Token)this.tokens.elementAt(var7)).sval);
- }
-
- ((OutputHandler)var1).println("\n");
- this.token_ptr = 0;
- }
- }
-