14ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira/* Generated By:JavaCC: Do not edit this line. SimpleCharStream.java Version 4.0 */
24fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy/*
34fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy *  Copyright 2004 the mime4j project
44fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy *
54fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy *  Licensed under the Apache License, Version 2.0 (the "License");
64fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy *  you may not use this file except in compliance with the License.
74fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy *  You may obtain a copy of the License at
84fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy *
94fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy *      http://www.apache.org/licenses/LICENSE-2.0
104fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy *
114fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy *  Unless required by applicable law or agreed to in writing, software
124fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy *  distributed under the License is distributed on an "AS IS" BASIS,
134fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
144fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy *  See the License for the specific language governing permissions and
154fa0a3295bcacbdcd6a9e7709cf17aa5adb90356Scott Kennedy *  limitations under the License.
164ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */
174ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereirapackage org.apache.james.mime4j.field.contenttype.parser;
184ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
194ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira/**
204ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * An implementation of interface CharStream, where the stream is assumed to
214ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira * contain only ASCII characters (without unicode processing).
224ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira */
234ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
244ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereirapublic class SimpleCharStream
254ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira{
264ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  public static final boolean staticFlag = false;
274ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  int bufsize;
284ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  int available;
294ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  int tokenBegin;
304ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  public int bufpos = -1;
314ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  protected int bufline[];
324ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  protected int bufcolumn[];
334ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
344ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  protected int column = 0;
354ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  protected int line = 1;
364ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
374ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  protected boolean prevCharIsCR = false;
384ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  protected boolean prevCharIsLF = false;
394ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
404ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  protected java.io.Reader inputStream;
414ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
424ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  protected char[] buffer;
434ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  protected int maxNextCharInd = 0;
444ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  protected int inBuf = 0;
454ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  protected int tabSize = 8;
464ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
474ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  protected void setTabSize(int i) { tabSize = i; }
484ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  protected int getTabSize(int i) { return tabSize; }
494ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
504ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
514ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  protected void ExpandBuff(boolean wrapAround)
524ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  {
534ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     char[] newbuffer = new char[bufsize + 2048];
544ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     int newbufline[] = new int[bufsize + 2048];
554ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     int newbufcolumn[] = new int[bufsize + 2048];
564ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
574ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     try
584ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     {
594ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        if (wrapAround)
604ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        {
614ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
624ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           System.arraycopy(buffer, 0, newbuffer,
634ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira                                             bufsize - tokenBegin, bufpos);
644ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           buffer = newbuffer;
654ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
664ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
674ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos);
684ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           bufline = newbufline;
694ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
704ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
714ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos);
724ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           bufcolumn = newbufcolumn;
734ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
744ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           maxNextCharInd = (bufpos += (bufsize - tokenBegin));
754ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        }
764ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        else
774ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        {
784ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
794ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           buffer = newbuffer;
804ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
814ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
824ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           bufline = newbufline;
834ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
844ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
854ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           bufcolumn = newbufcolumn;
864ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
874ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           maxNextCharInd = (bufpos -= tokenBegin);
884ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        }
894ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     }
904ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     catch (Throwable t)
914ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     {
924ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        throw new Error(t.getMessage());
934ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     }
944ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
954ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
964ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     bufsize += 2048;
974ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     available = bufsize;
984ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     tokenBegin = 0;
994ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  }
1004ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
1014ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  protected void FillBuff() throws java.io.IOException
1024ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  {
1034ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     if (maxNextCharInd == available)
1044ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     {
1054ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        if (available == bufsize)
1064ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        {
1074ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           if (tokenBegin > 2048)
1084ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           {
1094ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira              bufpos = maxNextCharInd = 0;
1104ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira              available = tokenBegin;
1114ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           }
1124ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           else if (tokenBegin < 0)
1134ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira              bufpos = maxNextCharInd = 0;
1144ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           else
1154ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira              ExpandBuff(false);
1164ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        }
1174ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        else if (available > tokenBegin)
1184ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           available = bufsize;
1194ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        else if ((tokenBegin - available) < 2048)
1204ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           ExpandBuff(true);
1214ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        else
1224ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           available = tokenBegin;
1234ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     }
1244ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
1254ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     int i;
1264ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     try {
1274ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        if ((i = inputStream.read(buffer, maxNextCharInd,
1284ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira                                    available - maxNextCharInd)) == -1)
1294ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        {
1304ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           inputStream.close();
1314ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           throw new java.io.IOException();
1324ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        }
1334ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        else
1344ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           maxNextCharInd += i;
1354ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        return;
1364ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     }
1374ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     catch(java.io.IOException e) {
1384ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        --bufpos;
1394ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        backup(0);
1404ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        if (tokenBegin == -1)
1414ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           tokenBegin = bufpos;
1424ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        throw e;
1434ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     }
1444ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  }
1454ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
1464ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  public char BeginToken() throws java.io.IOException
1474ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  {
1484ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     tokenBegin = -1;
1494ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     char c = readChar();
1504ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     tokenBegin = bufpos;
1514ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
1524ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     return c;
1534ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  }
1544ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
1554ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  protected void UpdateLineColumn(char c)
1564ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  {
1574ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     column++;
1584ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
1594ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     if (prevCharIsLF)
1604ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     {
1614ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        prevCharIsLF = false;
1624ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        line += (column = 1);
1634ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     }
1644ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     else if (prevCharIsCR)
1654ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     {
1664ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        prevCharIsCR = false;
1674ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        if (c == '\n')
1684ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        {
1694ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           prevCharIsLF = true;
1704ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        }
1714ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        else
1724ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           line += (column = 1);
1734ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     }
1744ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
1754ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     switch (c)
1764ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     {
1774ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        case '\r' :
1784ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           prevCharIsCR = true;
1794ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           break;
1804ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        case '\n' :
1814ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           prevCharIsLF = true;
1824ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           break;
1834ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        case '\t' :
1844ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           column--;
1854ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           column += (tabSize - (column % tabSize));
1864ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           break;
1874ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        default :
1884ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           break;
1894ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     }
1904ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
1914ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     bufline[bufpos] = line;
1924ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     bufcolumn[bufpos] = column;
1934ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  }
1944ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
1954ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  public char readChar() throws java.io.IOException
1964ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  {
1974ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     if (inBuf > 0)
1984ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     {
1994ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        --inBuf;
2004ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
2014ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        if (++bufpos == bufsize)
2024ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           bufpos = 0;
2034ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
2044ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        return buffer[bufpos];
2054ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     }
2064ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
2074ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     if (++bufpos >= maxNextCharInd)
2084ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        FillBuff();
2094ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
2104ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     char c = buffer[bufpos];
2114ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
2124ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     UpdateLineColumn(c);
2134ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     return (c);
2144ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  }
2154ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
2164ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  /**
2174ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira   * @deprecated
2184ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira   * @see #getEndColumn
2194ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira   */
220ec8c218f2155aa692b237d13f45bb7a87c8d7116Scott Kennedy  @Deprecated
2214ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  public int getColumn() {
2224ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     return bufcolumn[bufpos];
2234ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  }
2244ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
2254ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  /**
2264ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira   * @deprecated
2274ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira   * @see #getEndLine
2284ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira   */
229ec8c218f2155aa692b237d13f45bb7a87c8d7116Scott Kennedy  @Deprecated
2304ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  public int getLine() {
2314ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     return bufline[bufpos];
2324ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  }
2334ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
2344ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  public int getEndColumn() {
2354ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     return bufcolumn[bufpos];
2364ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  }
2374ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
2384ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  public int getEndLine() {
2394ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     return bufline[bufpos];
2404ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  }
2414ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
2424ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  public int getBeginColumn() {
2434ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     return bufcolumn[tokenBegin];
2444ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  }
2454ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
2464ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  public int getBeginLine() {
2474ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     return bufline[tokenBegin];
2484ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  }
2494ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
2504ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  public void backup(int amount) {
2514ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
2524ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    inBuf += amount;
2534ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    if ((bufpos -= amount) < 0)
2544ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira       bufpos += bufsize;
2554ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  }
2564ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
2574ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  public SimpleCharStream(java.io.Reader dstream, int startline,
2584ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  int startcolumn, int buffersize)
2594ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  {
2604ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    inputStream = dstream;
2614ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    line = startline;
2624ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    column = startcolumn - 1;
2634ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
2644ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    available = bufsize = buffersize;
2654ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    buffer = new char[buffersize];
2664ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    bufline = new int[buffersize];
2674ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    bufcolumn = new int[buffersize];
2684ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  }
2694ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
2704ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  public SimpleCharStream(java.io.Reader dstream, int startline,
2714ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira                          int startcolumn)
2724ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  {
2734ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     this(dstream, startline, startcolumn, 4096);
2744ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  }
2754ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
2764ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  public SimpleCharStream(java.io.Reader dstream)
2774ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  {
2784ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     this(dstream, 1, 1, 4096);
2794ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  }
2804ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  public void ReInit(java.io.Reader dstream, int startline,
2814ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  int startcolumn, int buffersize)
2824ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  {
2834ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    inputStream = dstream;
2844ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    line = startline;
2854ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    column = startcolumn - 1;
2864ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
2874ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    if (buffer == null || buffersize != buffer.length)
2884ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    {
2894ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira      available = bufsize = buffersize;
2904ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira      buffer = new char[buffersize];
2914ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira      bufline = new int[buffersize];
2924ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira      bufcolumn = new int[buffersize];
2934ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    }
2944ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    prevCharIsLF = prevCharIsCR = false;
2954ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    tokenBegin = inBuf = maxNextCharInd = 0;
2964ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira    bufpos = -1;
2974ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  }
2984ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
2994ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  public void ReInit(java.io.Reader dstream, int startline,
3004ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira                     int startcolumn)
3014ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  {
3024ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     ReInit(dstream, startline, startcolumn, 4096);
3034ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  }
3044ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
3054ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  public void ReInit(java.io.Reader dstream)
3064ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  {
3074ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     ReInit(dstream, 1, 1, 4096);
3084ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  }
3094ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline,
3104ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
3114ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  {
3124ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     this(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);
3134ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  }
3144ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
3154ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  public SimpleCharStream(java.io.InputStream dstream, int startline,
3164ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  int startcolumn, int buffersize)
3174ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  {
3184ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     this(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);
3194ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  }
3204ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
3214ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline,
3224ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira                          int startcolumn) throws java.io.UnsupportedEncodingException
3234ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  {
3244ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     this(dstream, encoding, startline, startcolumn, 4096);
3254ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  }
3264ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
3274ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  public SimpleCharStream(java.io.InputStream dstream, int startline,
3284ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira                          int startcolumn)
3294ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  {
3304ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     this(dstream, startline, startcolumn, 4096);
3314ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  }
3324ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
3334ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  public SimpleCharStream(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
3344ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  {
3354ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     this(dstream, encoding, 1, 1, 4096);
3364ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  }
3374ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
3384ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  public SimpleCharStream(java.io.InputStream dstream)
3394ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  {
3404ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     this(dstream, 1, 1, 4096);
3414ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  }
3424ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
3434ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  public void ReInit(java.io.InputStream dstream, String encoding, int startline,
3444ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira                          int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
3454ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  {
3464ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     ReInit(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);
3474ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  }
3484ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
3494ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  public void ReInit(java.io.InputStream dstream, int startline,
3504ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira                          int startcolumn, int buffersize)
3514ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  {
3524ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);
3534ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  }
3544ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
3554ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  public void ReInit(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
3564ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  {
3574ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     ReInit(dstream, encoding, 1, 1, 4096);
3584ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  }
3594ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
3604ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  public void ReInit(java.io.InputStream dstream)
3614ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  {
3624ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     ReInit(dstream, 1, 1, 4096);
3634ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  }
3644ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  public void ReInit(java.io.InputStream dstream, String encoding, int startline,
3654ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira                     int startcolumn) throws java.io.UnsupportedEncodingException
3664ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  {
3674ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     ReInit(dstream, encoding, startline, startcolumn, 4096);
3684ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  }
3694ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  public void ReInit(java.io.InputStream dstream, int startline,
3704ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira                     int startcolumn)
3714ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  {
3724ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     ReInit(dstream, startline, startcolumn, 4096);
3734ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  }
3744ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  public String GetImage()
3754ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  {
3764ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     if (bufpos >= tokenBegin)
3774ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        return new String(buffer, tokenBegin, bufpos - tokenBegin + 1);
3784ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     else
3794ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        return new String(buffer, tokenBegin, bufsize - tokenBegin) +
3804ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira                              new String(buffer, 0, bufpos + 1);
3814ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  }
3824ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
3834ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  public char[] GetSuffix(int len)
3844ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  {
3854ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     char[] ret = new char[len];
3864ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
3874ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     if ((bufpos + 1) >= len)
3884ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        System.arraycopy(buffer, bufpos - len + 1, ret, 0, len);
3894ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     else
3904ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     {
3914ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0,
3924ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira                                                          len - bufpos - 1);
3934ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1);
3944ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     }
3954ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
3964ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     return ret;
3974ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  }
3984ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
3994ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  public void Done()
4004ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  {
4014ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     buffer = null;
4024ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     bufline = null;
4034ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     bufcolumn = null;
4044ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  }
4054ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
4064ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  /**
4074ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira   * Method to adjust line and column numbers for the start of a token.
4084ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira   */
4094ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  public void adjustBeginLineColumn(int newLine, int newCol)
4104ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  {
4114ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     int start = tokenBegin;
4124ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     int len;
4134ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
4144ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     if (bufpos >= tokenBegin)
4154ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     {
4164ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        len = bufpos - tokenBegin + inBuf + 1;
4174ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     }
4184ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     else
4194ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     {
4204ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        len = bufsize - tokenBegin + bufpos + 1 + inBuf;
4214ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     }
4224ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
4234ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     int i = 0, j = 0, k = 0;
4244ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     int nextColDiff = 0, columnDiff = 0;
4254ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
4264ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     while (i < len &&
4274ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira            bufline[j = start % bufsize] == bufline[k = ++start % bufsize])
4284ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     {
4294ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        bufline[j] = newLine;
4304ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j];
4314ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        bufcolumn[j] = newCol + columnDiff;
4324ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        columnDiff = nextColDiff;
4334ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        i++;
4344ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     }
4354ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
4364ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     if (i < len)
4374ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     {
4384ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        bufline[j] = newLine++;
4394ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        bufcolumn[j] = newCol + columnDiff;
4404ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
4414ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        while (i++ < len)
4424ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        {
4434ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           if (bufline[j = start % bufsize] != bufline[++start % bufsize])
4444ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira              bufline[j] = newLine++;
4454ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira           else
4464ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira              bufline[j] = newLine;
4474ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira        }
4484ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     }
4494ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
4504ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     line = bufline[j];
4514ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira     column = bufcolumn[j];
4524ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira  }
4534ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira
4544ebb916ddca5f59d4f854f104fca0de6e0dda706Mindy Pereira}
455