137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti/* Generated By:JavaCC: Do not edit this line. JavaCharStream.java Version 5.0 */
237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti/*
437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti *
537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti * This file is part of Java 1.8 parser and Abstract Syntax Tree.
637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti *
737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti * Java 1.8 parser and Abstract Syntax Tree is free software: you can redistribute it and/or modify
837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti * it under the terms of the GNU Lesser General Public License as published by
937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti * the Free Software Foundation, either version 3 of the License, or
1037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti * (at your option) any later version.
1137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti *
1237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti * You should have received a copy of the GNU Lesser General Public License
1337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti * along with Java 1.8 parser and Abstract Syntax Tree.  If not, see <http://www.gnu.org/licenses/>.
1437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti */
1537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassettipackage com.github.javaparser;
1637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
1737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti/**
1837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti * An implementation of interface CharStream, where the stream is assumed to
1937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti * contain only ASCII characters (with java-like unicode escape processing).
2037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti */
2137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
2237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassettipublic
2337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetticlass JavaCharStream
2437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti{
2537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  /** Whether parser is static. */
2637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  public static final boolean staticFlag = false;
2737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
2837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  static final int hexval(char c) throws java.io.IOException {
2937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    switch(c)
3037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    {
3137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti       case '0' :
3237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti          return 0;
3337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti       case '1' :
3437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti          return 1;
3537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti       case '2' :
3637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti          return 2;
3737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti       case '3' :
3837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti          return 3;
3937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti       case '4' :
4037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti          return 4;
4137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti       case '5' :
4237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti          return 5;
4337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti       case '6' :
4437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti          return 6;
4537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti       case '7' :
4637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti          return 7;
4737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti       case '8' :
4837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti          return 8;
4937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti       case '9' :
5037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti          return 9;
5137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
5237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti       case 'a' :
5337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti       case 'A' :
5437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti          return 10;
5537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti       case 'b' :
5637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti       case 'B' :
5737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti          return 11;
5837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti       case 'c' :
5937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti       case 'C' :
6037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti          return 12;
6137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti       case 'd' :
6237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti       case 'D' :
6337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti          return 13;
6437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti       case 'e' :
6537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti       case 'E' :
6637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti          return 14;
6737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti       case 'f' :
6837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti       case 'F' :
6937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti          return 15;
7037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    }
7137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
7237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    throw new java.io.IOException(); // Should never come here
7337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  }
7437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
7537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti/** Position in buffer. */
7637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  public int bufpos = -1;
7737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  int bufsize;
7837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  int available;
7937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  int tokenBegin;
8037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  protected int bufline[];
8137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  protected int bufcolumn[];
8237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
8337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  protected int column = 0;
8437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  protected int line = 1;
8537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
8637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  protected boolean prevCharIsCR = false;
8737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  protected boolean prevCharIsLF = false;
8837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
8937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  protected java.io.Reader inputStream;
9037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
9137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  protected char[] nextCharBuf;
9237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  protected char[] buffer;
9337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  protected int maxNextCharInd = 0;
9437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  protected int nextCharInd = -1;
9537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  protected int inBuf = 0;
9637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  protected int tabSize = 8;
9737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
9837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  protected void setTabSize(int i) { tabSize = i; }
9937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  protected int getTabSize(int i) { return tabSize; }
10037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
10137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  protected void ExpandBuff(boolean wrapAround)
10237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  {
10337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    char[] newbuffer = new char[bufsize + 2048];
10437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    int newbufline[] = new int[bufsize + 2048];
10537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    int newbufcolumn[] = new int[bufsize + 2048];
10637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
10737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    try
10837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    {
10937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      if (wrapAround)
11037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      {
11137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
11237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        System.arraycopy(buffer, 0, newbuffer, bufsize - tokenBegin, bufpos);
11337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        buffer = newbuffer;
11437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
11537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
11637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos);
11737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        bufline = newbufline;
11837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
11937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
12037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos);
12137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        bufcolumn = newbufcolumn;
12237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
12337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        bufpos += (bufsize - tokenBegin);
12437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    }
12537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    else
12637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    {
12737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
12837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        buffer = newbuffer;
12937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
13037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
13137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        bufline = newbufline;
13237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
13337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
13437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        bufcolumn = newbufcolumn;
13537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
13637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        bufpos -= tokenBegin;
13737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      }
13837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    }
13937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    catch (Throwable t)
14037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    {
14137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      throw new Error(t.getMessage());
14237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    }
14337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
14437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    available = (bufsize += 2048);
14537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    tokenBegin = 0;
14637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  }
14737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
14837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  protected void FillBuff() throws java.io.IOException
14937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  {
15037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    int i;
15137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    if (maxNextCharInd == 4096)
15237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      maxNextCharInd = nextCharInd = 0;
15337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
15437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    try {
15537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      if ((i = inputStream.read(nextCharBuf, maxNextCharInd,
15637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti                                          4096 - maxNextCharInd)) == -1)
15737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      {
15837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        inputStream.close();
15937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        throw new java.io.IOException();
16037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      }
16137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      else
16237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti         maxNextCharInd += i;
16337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      return;
16437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    }
16537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    catch(java.io.IOException e) {
16637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      if (bufpos != 0)
16737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      {
16837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        --bufpos;
16937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        backup(0);
17037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      }
17137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      else
17237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      {
17337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        bufline[bufpos] = line;
17437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        bufcolumn[bufpos] = column;
17537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      }
17637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      throw e;
17737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    }
17837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  }
17937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
18037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  protected char ReadByte() throws java.io.IOException
18137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  {
18237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    if (++nextCharInd >= maxNextCharInd)
18337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      FillBuff();
18437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
18537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    return nextCharBuf[nextCharInd];
18637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  }
18737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
18837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti/** @return starting character for token. */
18937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  public char BeginToken() throws java.io.IOException
19037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  {
19137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    if (inBuf > 0)
19237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    {
19337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      --inBuf;
19437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
19537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      if (++bufpos == bufsize)
19637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        bufpos = 0;
19737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
19837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      tokenBegin = bufpos;
19937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      return buffer[bufpos];
20037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    }
20137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
20237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    tokenBegin = 0;
20337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    bufpos = -1;
20437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
20537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    return readChar();
20637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  }
20737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
20837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  protected void AdjustBuffSize()
20937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  {
21037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    if (available == bufsize)
21137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    {
21237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      if (tokenBegin > 2048)
21337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      {
21437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        bufpos = 0;
21537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        available = tokenBegin;
21637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      }
21737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      else
21837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        ExpandBuff(false);
21937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    }
22037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    else if (available > tokenBegin)
22137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      available = bufsize;
22237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    else if ((tokenBegin - available) < 2048)
22337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      ExpandBuff(true);
22437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    else
22537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      available = tokenBegin;
22637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  }
22737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
22837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  protected void UpdateLineColumn(char c)
22937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  {
23037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    column++;
23137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
23237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    if (prevCharIsLF)
23337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    {
23437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      prevCharIsLF = false;
23537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      line += (column = 1);
23637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    }
23737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    else if (prevCharIsCR)
23837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    {
23937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      prevCharIsCR = false;
24037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      if (c == '\n')
24137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      {
24237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        prevCharIsLF = true;
24337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      }
24437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      else
24537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        line += (column = 1);
24637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    }
24737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
24837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    switch (c)
24937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    {
25037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      case '\r' :
25137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        prevCharIsCR = true;
25237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        break;
25337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      case '\n' :
25437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        prevCharIsLF = true;
25537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        break;
25637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      case '\t' :
25737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        column--;
25837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        column += (tabSize - (column % tabSize));
25937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        break;
26037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      default :
26137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        break;
26237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    }
26337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
26437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    bufline[bufpos] = line;
26537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    bufcolumn[bufpos] = column;
26637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  }
26737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
26837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti/** Read a character. */
26937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  public char readChar() throws java.io.IOException
27037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  {
27137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    if (inBuf > 0)
27237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    {
27337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      --inBuf;
27437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
27537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      if (++bufpos == bufsize)
27637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        bufpos = 0;
27737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
27837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      return buffer[bufpos];
27937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    }
28037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
28137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    char c;
28237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
28337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    if (++bufpos == available)
28437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      AdjustBuffSize();
28537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
28637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    if ((buffer[bufpos] = c = ReadByte()) == '\\')
28737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    {
28837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      UpdateLineColumn(c);
28937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
29037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      int backSlashCnt = 1;
29137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
29237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      for (;;) // Read all the backslashes
29337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      {
29437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        if (++bufpos == available)
29537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti          AdjustBuffSize();
29637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
29737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        try
29837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        {
29937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti          if ((buffer[bufpos] = c = ReadByte()) != '\\')
30037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti          {
30137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti            UpdateLineColumn(c);
30237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti            // found a non-backslash char.
30337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti            if ((c == 'u') && ((backSlashCnt & 1) == 1))
30437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti            {
30537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti              if (--bufpos < 0)
30637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti                bufpos = bufsize - 1;
30737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
30837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti              break;
30937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti            }
31037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
31137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti            backup(backSlashCnt);
31237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti            return '\\';
31337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti          }
31437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        }
31537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        catch(java.io.IOException e)
31637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        {
31737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti	  // We are returning one backslash so we should only backup (count-1)
31837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti          if (backSlashCnt > 1)
31937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti            backup(backSlashCnt-1);
32037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
32137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti          return '\\';
32237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        }
32337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
32437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        UpdateLineColumn(c);
32537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        backSlashCnt++;
32637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      }
32737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
32837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      // Here, we have seen an odd number of backslash's followed by a 'u'
32937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      try
33037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      {
33137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        while ((c = ReadByte()) == 'u')
33237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti          ++column;
33337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
33437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        buffer[bufpos] = c = (char)(hexval(c) << 12 |
33537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti                                    hexval(ReadByte()) << 8 |
33637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti                                    hexval(ReadByte()) << 4 |
33737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti                                    hexval(ReadByte()));
33837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
33937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        column += 4;
34037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      }
34137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      catch(java.io.IOException e)
34237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      {
34337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        throw new Error("Invalid escape character at line " + line +
34437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti                                         " column " + column + ".");
34537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      }
34637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
34737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      if (backSlashCnt == 1)
34837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        return c;
34937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      else
35037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      {
35137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        backup(backSlashCnt - 1);
35237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        return '\\';
35337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      }
35437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    }
35537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    else
35637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    {
35737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      UpdateLineColumn(c);
35837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      return c;
35937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    }
36037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  }
36137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
36237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  @Deprecated
36337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  /**
36437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti   * @deprecated
36537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti   * @see #getEndColumn
36637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti   */
36737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  public int getColumn() {
36837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    return bufcolumn[bufpos];
36937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  }
37037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
37137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  @Deprecated
37237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  /**
37337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti   * @deprecated
37437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti   * @see #getEndLine
37537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti   */
37637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  public int getLine() {
37737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    return bufline[bufpos];
37837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  }
37937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
38037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti/** Get end column. */
38137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  public int getEndColumn() {
38237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    return bufcolumn[bufpos];
38337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  }
38437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
38537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti/** Get end line. */
38637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  public int getEndLine() {
38737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    return bufline[bufpos];
38837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  }
38937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
39037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti/** @return column of token start */
39137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  public int getBeginColumn() {
39237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    return bufcolumn[tokenBegin];
39337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  }
39437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
39537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti/** @return line number of token start */
39637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  public int getBeginLine() {
39737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    return bufline[tokenBegin];
39837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  }
39937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
40037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti/** Retreat. */
40137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  public void backup(int amount) {
40237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
40337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    inBuf += amount;
40437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    if ((bufpos -= amount) < 0)
40537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      bufpos += bufsize;
40637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  }
40737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
40837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti/** Constructor. */
40937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  public JavaCharStream(java.io.Reader dstream,
41037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti                 int startline, int startcolumn, int buffersize)
41137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  {
41237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    inputStream = dstream;
41337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    line = startline;
41437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    column = startcolumn - 1;
41537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
41637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    available = bufsize = buffersize;
41737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    buffer = new char[buffersize];
41837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    bufline = new int[buffersize];
41937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    bufcolumn = new int[buffersize];
42037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    nextCharBuf = new char[4096];
42137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  }
42237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
42337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti/** Constructor. */
42437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  public JavaCharStream(java.io.Reader dstream,
42537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti                                        int startline, int startcolumn)
42637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  {
42737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    this(dstream, startline, startcolumn, 4096);
42837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  }
42937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
43037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti/** Constructor. */
43137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  public JavaCharStream(java.io.Reader dstream)
43237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  {
43337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    this(dstream, 1, 1, 4096);
43437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  }
43537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti/** Reinitialise. */
43637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  public void ReInit(java.io.Reader dstream,
43737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti                 int startline, int startcolumn, int buffersize)
43837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  {
43937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    inputStream = dstream;
44037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    line = startline;
44137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    column = startcolumn - 1;
44237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
44337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    if (buffer == null || buffersize != buffer.length)
44437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    {
44537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      available = bufsize = buffersize;
44637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      buffer = new char[buffersize];
44737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      bufline = new int[buffersize];
44837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      bufcolumn = new int[buffersize];
44937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      nextCharBuf = new char[4096];
45037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    }
45137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    prevCharIsLF = prevCharIsCR = false;
45237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    tokenBegin = inBuf = maxNextCharInd = 0;
45337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    nextCharInd = bufpos = -1;
45437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  }
45537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
45637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti/** Reinitialise. */
45737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  public void ReInit(java.io.Reader dstream,
45837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti                                        int startline, int startcolumn)
45937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  {
46037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    ReInit(dstream, startline, startcolumn, 4096);
46137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  }
46237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
46337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti/** Reinitialise. */
46437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  public void ReInit(java.io.Reader dstream)
46537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  {
46637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    ReInit(dstream, 1, 1, 4096);
46737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  }
46837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti/** Constructor. */
46937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  public JavaCharStream(java.io.InputStream dstream, String encoding, int startline,
47037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
47137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  {
47237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    this(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);
47337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  }
47437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
47537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti/** Constructor. */
47637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  public JavaCharStream(java.io.InputStream dstream, int startline,
47737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  int startcolumn, int buffersize)
47837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  {
47937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    this(new java.io.InputStreamReader(dstream), startline, startcolumn, 4096);
48037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  }
48137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
48237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti/** Constructor. */
48337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  public JavaCharStream(java.io.InputStream dstream, String encoding, int startline,
48437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti                        int startcolumn) throws java.io.UnsupportedEncodingException
48537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  {
48637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    this(dstream, encoding, startline, startcolumn, 4096);
48737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  }
48837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
48937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti/** Constructor. */
49037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  public JavaCharStream(java.io.InputStream dstream, int startline,
49137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti                        int startcolumn)
49237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  {
49337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    this(dstream, startline, startcolumn, 4096);
49437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  }
49537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
49637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti/** Constructor. */
49737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  public JavaCharStream(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
49837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  {
49937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    this(dstream, encoding, 1, 1, 4096);
50037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  }
50137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
50237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti/** Constructor. */
50337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  public JavaCharStream(java.io.InputStream dstream)
50437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  {
50537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    this(dstream, 1, 1, 4096);
50637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  }
50737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
50837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti/** Reinitialise. */
50937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  public void ReInit(java.io.InputStream dstream, String encoding, int startline,
51037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
51137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  {
51237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    ReInit(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);
51337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  }
51437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
51537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti/** Reinitialise. */
51637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  public void ReInit(java.io.InputStream dstream, int startline,
51737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  int startcolumn, int buffersize)
51837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  {
51937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);
52037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  }
52137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti/** Reinitialise. */
52237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  public void ReInit(java.io.InputStream dstream, String encoding, int startline,
52337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti                     int startcolumn) throws java.io.UnsupportedEncodingException
52437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  {
52537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    ReInit(dstream, encoding, startline, startcolumn, 4096);
52637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  }
52737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti/** Reinitialise. */
52837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  public void ReInit(java.io.InputStream dstream, int startline,
52937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti                     int startcolumn)
53037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  {
53137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    ReInit(dstream, startline, startcolumn, 4096);
53237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  }
53337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti/** Reinitialise. */
53437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  public void ReInit(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
53537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  {
53637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    ReInit(dstream, encoding, 1, 1, 4096);
53737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  }
53837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
53937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti/** Reinitialise. */
54037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  public void ReInit(java.io.InputStream dstream)
54137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  {
54237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    ReInit(dstream, 1, 1, 4096);
54337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  }
54437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
54537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  /** @return token image as String */
54637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  public String GetImage()
54737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  {
54837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    if (bufpos >= tokenBegin)
54937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      return new String(buffer, tokenBegin, bufpos - tokenBegin + 1);
55037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    else
55137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      return new String(buffer, tokenBegin, bufsize - tokenBegin) +
55237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti                              new String(buffer, 0, bufpos + 1);
55337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  }
55437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
55537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  /** @return suffix */
55637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  public char[] GetSuffix(int len)
55737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  {
55837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    char[] ret = new char[len];
55937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
56037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    if ((bufpos + 1) >= len)
56137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      System.arraycopy(buffer, bufpos - len + 1, ret, 0, len);
56237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    else
56337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    {
56437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0,
56537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti                                                        len - bufpos - 1);
56637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1);
56737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    }
56837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
56937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    return ret;
57037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  }
57137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
57237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  /** Set buffers back to null when finished. */
57337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  public void Done()
57437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  {
57537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    nextCharBuf = null;
57637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    buffer = null;
57737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    bufline = null;
57837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    bufcolumn = null;
57937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  }
58037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
58137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  /**
58237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti   * Method to adjust line and column numbers for the start of a token.
58337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti   */
58437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  public void adjustBeginLineColumn(int newLine, int newCol)
58537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  {
58637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    int start = tokenBegin;
58737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    int len;
58837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
58937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    if (bufpos >= tokenBegin)
59037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    {
59137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      len = bufpos - tokenBegin + inBuf + 1;
59237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    }
59337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    else
59437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    {
59537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      len = bufsize - tokenBegin + bufpos + 1 + inBuf;
59637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    }
59737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
59837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    int i = 0, j = 0, k = 0;
59937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    int nextColDiff = 0, columnDiff = 0;
60037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
60137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    while (i < len && bufline[j = start % bufsize] == bufline[k = ++start % bufsize])
60237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    {
60337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      bufline[j] = newLine;
60437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j];
60537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      bufcolumn[j] = newCol + columnDiff;
60637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      columnDiff = nextColDiff;
60737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      i++;
60837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    }
60937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
61037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    if (i < len)
61137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    {
61237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      bufline[j] = newLine++;
61337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      bufcolumn[j] = newCol + columnDiff;
61437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
61537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      while (i++ < len)
61637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      {
61737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        if (bufline[j = start % bufsize] != bufline[++start % bufsize])
61837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti          bufline[j] = newLine++;
61937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti        else
62037f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti          bufline[j] = newLine;
62137f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti      }
62237f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    }
62337f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
62437f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    line = bufline[j];
62537f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti    column = bufcolumn[j];
62637f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti  }
62737f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti
62837f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti}
62937f93be6476b00be051173d0cde614fc8a3677e5Federico Tomassetti/* JavaCC - OriginalChecksum=5111a95355f2f1cc405246f828703097 (do not edit this line) */
630