1bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook/* Generated By:JavaCC: Do not edit this line. SimpleCharStream.java Version 4.0 */
2bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook/*
3bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook *  Copyright 2004 the mime4j project
4bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook *
5bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook *  Licensed under the Apache License, Version 2.0 (the "License");
6bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook *  you may not use this file except in compliance with the License.
7bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook *  You may obtain a copy of the License at
8bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook *
9bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook *      http://www.apache.org/licenses/LICENSE-2.0
10bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook *
11bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook *  Unless required by applicable law or agreed to in writing, software
12bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook *  distributed under the License is distributed on an "AS IS" BASIS,
13bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook *  See the License for the specific language governing permissions and
15bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook *  limitations under the License.
16bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */
17bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookpackage org.apache.james.mime4j.field.address.parser;
18bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
19bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook/**
20bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * An implementation of interface CharStream, where the stream is assumed to
21bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * contain only ASCII characters (without unicode processing).
22bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */
23bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
24bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookpublic class SimpleCharStream
25bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook{
26bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  public static final boolean staticFlag = false;
27bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  int bufsize;
28bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  int available;
29bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  int tokenBegin;
30bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  public int bufpos = -1;
31bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  protected int bufline[];
32bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  protected int bufcolumn[];
33bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
34bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  protected int column = 0;
35bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  protected int line = 1;
36bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
37bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  protected boolean prevCharIsCR = false;
38bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  protected boolean prevCharIsLF = false;
39bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
40bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  protected java.io.Reader inputStream;
41bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
42bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  protected char[] buffer;
43bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  protected int maxNextCharInd = 0;
44bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  protected int inBuf = 0;
45bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  protected int tabSize = 8;
46bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
47bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  protected void setTabSize(int i) { tabSize = i; }
48bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  protected int getTabSize(int i) { return tabSize; }
49bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
50bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
51bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  protected void ExpandBuff(boolean wrapAround)
52bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  {
53bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     char[] newbuffer = new char[bufsize + 2048];
54bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     int newbufline[] = new int[bufsize + 2048];
55bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     int newbufcolumn[] = new int[bufsize + 2048];
56bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
57bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     try
58bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     {
59bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        if (wrapAround)
60bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        {
61bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
62bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           System.arraycopy(buffer, 0, newbuffer,
63bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                                             bufsize - tokenBegin, bufpos);
64bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           buffer = newbuffer;
65bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
66bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
67bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos);
68bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           bufline = newbufline;
69bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
70bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
71bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos);
72bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           bufcolumn = newbufcolumn;
73bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
74bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           maxNextCharInd = (bufpos += (bufsize - tokenBegin));
75bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        }
76bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        else
77bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        {
78bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
79bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           buffer = newbuffer;
80bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
81bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
82bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           bufline = newbufline;
83bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
84bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
85bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           bufcolumn = newbufcolumn;
86bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
87bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           maxNextCharInd = (bufpos -= tokenBegin);
88bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        }
89bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     }
90bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     catch (Throwable t)
91bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     {
92bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        throw new Error(t.getMessage());
93bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     }
94bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
95bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
96bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     bufsize += 2048;
97bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     available = bufsize;
98bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     tokenBegin = 0;
99bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  }
100bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
101bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  protected void FillBuff() throws java.io.IOException
102bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  {
103bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     if (maxNextCharInd == available)
104bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     {
105bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        if (available == bufsize)
106bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        {
107bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           if (tokenBegin > 2048)
108bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           {
109bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook              bufpos = maxNextCharInd = 0;
110bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook              available = tokenBegin;
111bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           }
112bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           else if (tokenBegin < 0)
113bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook              bufpos = maxNextCharInd = 0;
114bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           else
115bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook              ExpandBuff(false);
116bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        }
117bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        else if (available > tokenBegin)
118bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           available = bufsize;
119bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        else if ((tokenBegin - available) < 2048)
120bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           ExpandBuff(true);
121bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        else
122bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           available = tokenBegin;
123bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     }
124bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
125bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     int i;
126bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     try {
127bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        if ((i = inputStream.read(buffer, maxNextCharInd,
128bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                                    available - maxNextCharInd)) == -1)
129bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        {
130bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           inputStream.close();
131bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           throw new java.io.IOException();
132bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        }
133bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        else
134bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           maxNextCharInd += i;
135bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        return;
136bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     }
137bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     catch(java.io.IOException e) {
138bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        --bufpos;
139bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        backup(0);
140bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        if (tokenBegin == -1)
141bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           tokenBegin = bufpos;
142bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        throw e;
143bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     }
144bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  }
145bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
146bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  public char BeginToken() throws java.io.IOException
147bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  {
148bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     tokenBegin = -1;
149bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     char c = readChar();
150bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     tokenBegin = bufpos;
151bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
152bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     return c;
153bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  }
154bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
155bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  protected void UpdateLineColumn(char c)
156bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  {
157bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     column++;
158bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
159bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     if (prevCharIsLF)
160bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     {
161bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        prevCharIsLF = false;
162bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        line += (column = 1);
163bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     }
164bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     else if (prevCharIsCR)
165bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     {
166bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        prevCharIsCR = false;
167bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        if (c == '\n')
168bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        {
169bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           prevCharIsLF = true;
170bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        }
171bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        else
172bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           line += (column = 1);
173bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     }
174bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
175bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     switch (c)
176bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     {
177bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        case '\r' :
178bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           prevCharIsCR = true;
179bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           break;
180bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        case '\n' :
181bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           prevCharIsLF = true;
182bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           break;
183bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        case '\t' :
184bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           column--;
185bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           column += (tabSize - (column % tabSize));
186bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           break;
187bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        default :
188bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           break;
189bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     }
190bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
191bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     bufline[bufpos] = line;
192bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     bufcolumn[bufpos] = column;
193bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  }
194bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
195bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  public char readChar() throws java.io.IOException
196bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  {
197bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     if (inBuf > 0)
198bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     {
199bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        --inBuf;
200bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
201bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        if (++bufpos == bufsize)
202bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           bufpos = 0;
203bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
204bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        return buffer[bufpos];
205bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     }
206bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
207bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     if (++bufpos >= maxNextCharInd)
208bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        FillBuff();
209bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
210bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     char c = buffer[bufpos];
211bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
212bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     UpdateLineColumn(c);
213bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     return (c);
214bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  }
215bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
216bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  /**
217bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook   * @deprecated
218bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook   * @see #getEndColumn
219bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook   */
220bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
221bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  public int getColumn() {
222bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     return bufcolumn[bufpos];
223bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  }
224bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
225bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  /**
226bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook   * @deprecated
227bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook   * @see #getEndLine
228bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook   */
229bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
230bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  public int getLine() {
231bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     return bufline[bufpos];
232bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  }
233bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
234bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  public int getEndColumn() {
235bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     return bufcolumn[bufpos];
236bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  }
237bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
238bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  public int getEndLine() {
239bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     return bufline[bufpos];
240bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  }
241bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
242bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  public int getBeginColumn() {
243bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     return bufcolumn[tokenBegin];
244bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  }
245bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
246bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  public int getBeginLine() {
247bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     return bufline[tokenBegin];
248bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  }
249bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
250bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  public void backup(int amount) {
251bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
252bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    inBuf += amount;
253bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    if ((bufpos -= amount) < 0)
254bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook       bufpos += bufsize;
255bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  }
256bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
257bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  public SimpleCharStream(java.io.Reader dstream, int startline,
258bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  int startcolumn, int buffersize)
259bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  {
260bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    inputStream = dstream;
261bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    line = startline;
262bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    column = startcolumn - 1;
263bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
264bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    available = bufsize = buffersize;
265bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    buffer = new char[buffersize];
266bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    bufline = new int[buffersize];
267bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    bufcolumn = new int[buffersize];
268bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  }
269bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
270bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  public SimpleCharStream(java.io.Reader dstream, int startline,
271bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                          int startcolumn)
272bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  {
273bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     this(dstream, startline, startcolumn, 4096);
274bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  }
275bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
276bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  public SimpleCharStream(java.io.Reader dstream)
277bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  {
278bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     this(dstream, 1, 1, 4096);
279bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  }
280bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  public void ReInit(java.io.Reader dstream, int startline,
281bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  int startcolumn, int buffersize)
282bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  {
283bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    inputStream = dstream;
284bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    line = startline;
285bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    column = startcolumn - 1;
286bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
287bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    if (buffer == null || buffersize != buffer.length)
288bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    {
289bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook      available = bufsize = buffersize;
290bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook      buffer = new char[buffersize];
291bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook      bufline = new int[buffersize];
292bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook      bufcolumn = new int[buffersize];
293bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    }
294bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    prevCharIsLF = prevCharIsCR = false;
295bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    tokenBegin = inBuf = maxNextCharInd = 0;
296bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    bufpos = -1;
297bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  }
298bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
299bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  public void ReInit(java.io.Reader dstream, int startline,
300bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                     int startcolumn)
301bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  {
302bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     ReInit(dstream, startline, startcolumn, 4096);
303bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  }
304bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
305bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  public void ReInit(java.io.Reader dstream)
306bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  {
307bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     ReInit(dstream, 1, 1, 4096);
308bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  }
309bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline,
310bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
311bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  {
312bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     this(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);
313bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  }
314bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
315bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  public SimpleCharStream(java.io.InputStream dstream, int startline,
316bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  int startcolumn, int buffersize)
317bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  {
318bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     this(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);
319bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  }
320bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
321bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline,
322bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                          int startcolumn) throws java.io.UnsupportedEncodingException
323bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  {
324bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     this(dstream, encoding, startline, startcolumn, 4096);
325bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  }
326bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
327bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  public SimpleCharStream(java.io.InputStream dstream, int startline,
328bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                          int startcolumn)
329bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  {
330bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     this(dstream, startline, startcolumn, 4096);
331bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  }
332bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
333bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  public SimpleCharStream(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
334bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  {
335bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     this(dstream, encoding, 1, 1, 4096);
336bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  }
337bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
338bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  public SimpleCharStream(java.io.InputStream dstream)
339bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  {
340bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     this(dstream, 1, 1, 4096);
341bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  }
342bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
343bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  public void ReInit(java.io.InputStream dstream, String encoding, int startline,
344bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                          int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
345bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  {
346bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     ReInit(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);
347bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  }
348bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
349bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  public void ReInit(java.io.InputStream dstream, int startline,
350bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                          int startcolumn, int buffersize)
351bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  {
352bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);
353bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  }
354bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
355bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  public void ReInit(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
356bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  {
357bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     ReInit(dstream, encoding, 1, 1, 4096);
358bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  }
359bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
360bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  public void ReInit(java.io.InputStream dstream)
361bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  {
362bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     ReInit(dstream, 1, 1, 4096);
363bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  }
364bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  public void ReInit(java.io.InputStream dstream, String encoding, int startline,
365bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                     int startcolumn) throws java.io.UnsupportedEncodingException
366bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  {
367bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     ReInit(dstream, encoding, startline, startcolumn, 4096);
368bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  }
369bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  public void ReInit(java.io.InputStream dstream, int startline,
370bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                     int startcolumn)
371bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  {
372bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     ReInit(dstream, startline, startcolumn, 4096);
373bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  }
374bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  public String GetImage()
375bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  {
376bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     if (bufpos >= tokenBegin)
377bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        return new String(buffer, tokenBegin, bufpos - tokenBegin + 1);
378bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     else
379bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        return new String(buffer, tokenBegin, bufsize - tokenBegin) +
380bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                              new String(buffer, 0, bufpos + 1);
381bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  }
382bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
383bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  public char[] GetSuffix(int len)
384bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  {
385bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     char[] ret = new char[len];
386bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
387bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     if ((bufpos + 1) >= len)
388bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        System.arraycopy(buffer, bufpos - len + 1, ret, 0, len);
389bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     else
390bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     {
391bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0,
392bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                                                          len - bufpos - 1);
393bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1);
394bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     }
395bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
396bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     return ret;
397bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  }
398bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
399bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  public void Done()
400bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  {
401bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     buffer = null;
402bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     bufline = null;
403bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     bufcolumn = null;
404bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  }
405bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
406bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  /**
407bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook   * Method to adjust line and column numbers for the start of a token.
408bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook   */
409bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  public void adjustBeginLineColumn(int newLine, int newCol)
410bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  {
411bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     int start = tokenBegin;
412bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     int len;
413bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
414bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     if (bufpos >= tokenBegin)
415bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     {
416bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        len = bufpos - tokenBegin + inBuf + 1;
417bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     }
418bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     else
419bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     {
420bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        len = bufsize - tokenBegin + bufpos + 1 + inBuf;
421bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     }
422bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
423bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     int i = 0, j = 0, k = 0;
424bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     int nextColDiff = 0, columnDiff = 0;
425bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
426bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     while (i < len &&
427bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            bufline[j = start % bufsize] == bufline[k = ++start % bufsize])
428bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     {
429bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        bufline[j] = newLine;
430bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j];
431bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        bufcolumn[j] = newCol + columnDiff;
432bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        columnDiff = nextColDiff;
433bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        i++;
434bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     }
435bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
436bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     if (i < len)
437bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     {
438bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        bufline[j] = newLine++;
439bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        bufcolumn[j] = newCol + columnDiff;
440bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
441bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        while (i++ < len)
442bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        {
443bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           if (bufline[j = start % bufsize] != bufline[++start % bufsize])
444bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook              bufline[j] = newLine++;
445bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook           else
446bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook              bufline[j] = newLine;
447bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        }
448bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     }
449bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
450bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     line = bufline[j];
451bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     column = bufcolumn[j];
452bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook  }
453bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
454bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook}
455