PageRenderTime 76ms CodeModel.GetById 35ms app.highlight 36ms RepoModel.GetById 1ms app.codeStats 0ms

/bundles/plugins-trunk/XML/sidekick/html/parser/html/SimpleCharStream.java

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