196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project/* Generated By:JavaCC: Do not edit this line. SimpleCharStream.java Version 4.0 */
296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project/*
396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *  Copyright 2004 the mime4j project
496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *
596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *  Licensed under the Apache License, Version 2.0 (the "License");
696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *  you may not use this file except in compliance with the License.
796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *  You may obtain a copy of the License at
896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *
996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
1096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *
1196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
1296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
1396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *  See the License for the specific language governing permissions and
1596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project *  limitations under the License.
1696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */
1796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectpackage org.apache.james.mime4j.field.datetime.parser;
1896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
1996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project/**
2096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * An implementation of interface CharStream, where the stream is assumed to
2196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project * contain only ASCII characters (without unicode processing).
2296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project */
2396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
2496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Projectpublic class SimpleCharStream
2596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project{
2696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  public static final boolean staticFlag = false;
2796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  int bufsize;
2896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  int available;
2996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  int tokenBegin;
3096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  public int bufpos = -1;
3196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  protected int bufline[];
3296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  protected int bufcolumn[];
3396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
3496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  protected int column = 0;
3596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  protected int line = 1;
3696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
3796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  protected boolean prevCharIsCR = false;
3896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  protected boolean prevCharIsLF = false;
3996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
4096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  protected java.io.Reader inputStream;
4196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
4296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  protected char[] buffer;
4396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  protected int maxNextCharInd = 0;
4496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  protected int inBuf = 0;
4596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  protected int tabSize = 8;
4696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
4796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  protected void setTabSize(int i) { tabSize = i; }
4896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  protected int getTabSize(int i) { return tabSize; }
4996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
5096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
5196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  protected void ExpandBuff(boolean wrapAround)
5296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  {
5396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     char[] newbuffer = new char[bufsize + 2048];
5496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     int newbufline[] = new int[bufsize + 2048];
5596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     int newbufcolumn[] = new int[bufsize + 2048];
5696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
5796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     try
5896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     {
5996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (wrapAround)
6096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        {
6196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
6296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           System.arraycopy(buffer, 0, newbuffer,
6396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                                             bufsize - tokenBegin, bufpos);
6496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           buffer = newbuffer;
6596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
6696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
6796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos);
6896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           bufline = newbufline;
6996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
7096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
7196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos);
7296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           bufcolumn = newbufcolumn;
7396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
7496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           maxNextCharInd = (bufpos += (bufsize - tokenBegin));
7596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
7696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        else
7796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        {
7896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
7996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           buffer = newbuffer;
8096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
8196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
8296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           bufline = newbufline;
8396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
8496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
8596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           bufcolumn = newbufcolumn;
8696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
8796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           maxNextCharInd = (bufpos -= tokenBegin);
8896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
8996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     }
9096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     catch (Throwable t)
9196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     {
9296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        throw new Error(t.getMessage());
9396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     }
9496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
9596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
9696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     bufsize += 2048;
9796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     available = bufsize;
9896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     tokenBegin = 0;
9996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  }
10096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
10196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  protected void FillBuff() throws java.io.IOException
10296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  {
10396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     if (maxNextCharInd == available)
10496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     {
10596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (available == bufsize)
10696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        {
10796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           if (tokenBegin > 2048)
10896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           {
10996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project              bufpos = maxNextCharInd = 0;
11096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project              available = tokenBegin;
11196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           }
11296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           else if (tokenBegin < 0)
11396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project              bufpos = maxNextCharInd = 0;
11496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           else
11596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project              ExpandBuff(false);
11696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
11796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        else if (available > tokenBegin)
11896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           available = bufsize;
11996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        else if ((tokenBegin - available) < 2048)
12096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           ExpandBuff(true);
12196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        else
12296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           available = tokenBegin;
12396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     }
12496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
12596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     int i;
12696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     try {
12796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if ((i = inputStream.read(buffer, maxNextCharInd,
12896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                                    available - maxNextCharInd)) == -1)
12996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        {
13096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           inputStream.close();
13196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           throw new java.io.IOException();
13296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
13396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        else
13496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           maxNextCharInd += i;
13596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return;
13696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     }
13796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     catch(java.io.IOException e) {
13896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        --bufpos;
13996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        backup(0);
14096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (tokenBegin == -1)
14196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           tokenBegin = bufpos;
14296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        throw e;
14396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     }
14496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  }
14596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
14696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  public char BeginToken() throws java.io.IOException
14796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  {
14896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     tokenBegin = -1;
14996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     char c = readChar();
15096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     tokenBegin = bufpos;
15196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
15296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     return c;
15396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  }
15496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
15596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  protected void UpdateLineColumn(char c)
15696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  {
15796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     column++;
15896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
15996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     if (prevCharIsLF)
16096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     {
16196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        prevCharIsLF = false;
16296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        line += (column = 1);
16396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     }
16496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     else if (prevCharIsCR)
16596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     {
16696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        prevCharIsCR = false;
16796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (c == '\n')
16896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        {
16996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           prevCharIsLF = true;
17096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
17196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        else
17296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           line += (column = 1);
17396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     }
17496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
17596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     switch (c)
17696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     {
17796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        case '\r' :
17896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           prevCharIsCR = true;
17996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           break;
18096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        case '\n' :
18196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           prevCharIsLF = true;
18296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           break;
18396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        case '\t' :
18496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           column--;
18596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           column += (tabSize - (column % tabSize));
18696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           break;
18796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        default :
18896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           break;
18996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     }
19096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
19196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     bufline[bufpos] = line;
19296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     bufcolumn[bufpos] = column;
19396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  }
19496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
19596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  public char readChar() throws java.io.IOException
19696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  {
19796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     if (inBuf > 0)
19896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     {
19996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        --inBuf;
20096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
20196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        if (++bufpos == bufsize)
20296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           bufpos = 0;
20396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
20496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return buffer[bufpos];
20596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     }
20696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
20796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     if (++bufpos >= maxNextCharInd)
20896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        FillBuff();
20996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
21096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     char c = buffer[bufpos];
21196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
21296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     UpdateLineColumn(c);
21396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     return (c);
21496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  }
21596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
21696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  /**
21796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project   * @deprecated
21896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project   * @see #getEndColumn
21996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project   */
22096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
22196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  public int getColumn() {
22296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     return bufcolumn[bufpos];
22396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  }
22496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
22596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  /**
22696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project   * @deprecated
22796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project   * @see #getEndLine
22896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project   */
22996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
23096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  public int getLine() {
23196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     return bufline[bufpos];
23296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  }
23396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
23496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  public int getEndColumn() {
23596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     return bufcolumn[bufpos];
23696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  }
23796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
23896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  public int getEndLine() {
23996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     return bufline[bufpos];
24096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  }
24196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
24296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  public int getBeginColumn() {
24396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     return bufcolumn[tokenBegin];
24496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  }
24596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
24696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  public int getBeginLine() {
24796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     return bufline[tokenBegin];
24896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  }
24996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
25096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  public void backup(int amount) {
25196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
25296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    inBuf += amount;
25396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    if ((bufpos -= amount) < 0)
25496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project       bufpos += bufsize;
25596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  }
25696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
25796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  public SimpleCharStream(java.io.Reader dstream, int startline,
25896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  int startcolumn, int buffersize)
25996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  {
26096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    inputStream = dstream;
26196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    line = startline;
26296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    column = startcolumn - 1;
26396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
26496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    available = bufsize = buffersize;
26596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    buffer = new char[buffersize];
26696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    bufline = new int[buffersize];
26796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    bufcolumn = new int[buffersize];
26896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  }
26996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
27096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  public SimpleCharStream(java.io.Reader dstream, int startline,
27196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                          int startcolumn)
27296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  {
27396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     this(dstream, startline, startcolumn, 4096);
27496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  }
27596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
27696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  public SimpleCharStream(java.io.Reader dstream)
27796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  {
27896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     this(dstream, 1, 1, 4096);
27996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  }
28096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  public void ReInit(java.io.Reader dstream, int startline,
28196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  int startcolumn, int buffersize)
28296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  {
28396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    inputStream = dstream;
28496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    line = startline;
28596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    column = startcolumn - 1;
28696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
28796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    if (buffer == null || buffersize != buffer.length)
28896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    {
28996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project      available = bufsize = buffersize;
29096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project      buffer = new char[buffersize];
29196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project      bufline = new int[buffersize];
29296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project      bufcolumn = new int[buffersize];
29396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    }
29496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    prevCharIsLF = prevCharIsCR = false;
29596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    tokenBegin = inBuf = maxNextCharInd = 0;
29696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project    bufpos = -1;
29796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  }
29896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
29996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  public void ReInit(java.io.Reader dstream, int startline,
30096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                     int startcolumn)
30196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  {
30296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     ReInit(dstream, startline, startcolumn, 4096);
30396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  }
30496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
30596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  public void ReInit(java.io.Reader dstream)
30696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  {
30796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     ReInit(dstream, 1, 1, 4096);
30896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  }
30996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline,
31096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
31196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  {
31296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     this(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);
31396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  }
31496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
31596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  public SimpleCharStream(java.io.InputStream dstream, int startline,
31696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  int startcolumn, int buffersize)
31796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  {
31896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     this(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);
31996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  }
32096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
32196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline,
32296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                          int startcolumn) throws java.io.UnsupportedEncodingException
32396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  {
32496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     this(dstream, encoding, startline, startcolumn, 4096);
32596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  }
32696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
32796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  public SimpleCharStream(java.io.InputStream dstream, int startline,
32896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                          int startcolumn)
32996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  {
33096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     this(dstream, startline, startcolumn, 4096);
33196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  }
33296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
33396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  public SimpleCharStream(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
33496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  {
33596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     this(dstream, encoding, 1, 1, 4096);
33696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  }
33796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
33896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  public SimpleCharStream(java.io.InputStream dstream)
33996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  {
34096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     this(dstream, 1, 1, 4096);
34196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  }
34296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
34396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  public void ReInit(java.io.InputStream dstream, String encoding, int startline,
34496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                          int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
34596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  {
34696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     ReInit(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);
34796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  }
34896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
34996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  public void ReInit(java.io.InputStream dstream, int startline,
35096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                          int startcolumn, int buffersize)
35196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  {
35296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);
35396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  }
35496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
35596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  public void ReInit(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
35696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  {
35796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     ReInit(dstream, encoding, 1, 1, 4096);
35896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  }
35996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
36096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  public void ReInit(java.io.InputStream dstream)
36196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  {
36296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     ReInit(dstream, 1, 1, 4096);
36396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  }
36496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  public void ReInit(java.io.InputStream dstream, String encoding, int startline,
36596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                     int startcolumn) throws java.io.UnsupportedEncodingException
36696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  {
36796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     ReInit(dstream, encoding, startline, startcolumn, 4096);
36896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  }
36996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  public void ReInit(java.io.InputStream dstream, int startline,
37096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                     int startcolumn)
37196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  {
37296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     ReInit(dstream, startline, startcolumn, 4096);
37396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  }
37496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  public String GetImage()
37596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  {
37696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     if (bufpos >= tokenBegin)
37796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return new String(buffer, tokenBegin, bufpos - tokenBegin + 1);
37896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     else
37996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        return new String(buffer, tokenBegin, bufsize - tokenBegin) +
38096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                              new String(buffer, 0, bufpos + 1);
38196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  }
38296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
38396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  public char[] GetSuffix(int len)
38496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  {
38596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     char[] ret = new char[len];
38696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
38796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     if ((bufpos + 1) >= len)
38896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        System.arraycopy(buffer, bufpos - len + 1, ret, 0, len);
38996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     else
39096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     {
39196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0,
39296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project                                                          len - bufpos - 1);
39396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1);
39496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     }
39596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
39696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     return ret;
39796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  }
39896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
39996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  public void Done()
40096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  {
40196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     buffer = null;
40296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     bufline = null;
40396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     bufcolumn = null;
40496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  }
40596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
40696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  /**
40796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project   * Method to adjust line and column numbers for the start of a token.
40896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project   */
40996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  public void adjustBeginLineColumn(int newLine, int newCol)
41096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  {
41196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     int start = tokenBegin;
41296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     int len;
41396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
41496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     if (bufpos >= tokenBegin)
41596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     {
41696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        len = bufpos - tokenBegin + inBuf + 1;
41796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     }
41896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     else
41996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     {
42096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        len = bufsize - tokenBegin + bufpos + 1 + inBuf;
42196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     }
42296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
42396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     int i = 0, j = 0, k = 0;
42496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     int nextColDiff = 0, columnDiff = 0;
42596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
42696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     while (i < len &&
42796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project            bufline[j = start % bufsize] == bufline[k = ++start % bufsize])
42896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     {
42996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        bufline[j] = newLine;
43096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j];
43196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        bufcolumn[j] = newCol + columnDiff;
43296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        columnDiff = nextColDiff;
43396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        i++;
43496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     }
43596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
43696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     if (i < len)
43796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     {
43896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        bufline[j] = newLine++;
43996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        bufcolumn[j] = newCol + columnDiff;
44096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
44196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        while (i++ < len)
44296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        {
44396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           if (bufline[j = start % bufsize] != bufline[++start % bufsize])
44496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project              bufline[j] = newLine++;
44596c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project           else
44696c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project              bufline[j] = newLine;
44796c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project        }
44896c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     }
44996c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
45096c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     line = bufline[j];
45196c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project     column = bufcolumn[j];
45296c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project  }
45396c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project
45496c5af40d639d629267794f4f0338a267ff94ce5The Android Open Source Project}
455