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