1 /* Generated By:JavaCC: Do not edit this line. SimpleCharStream.java Version 5.0 */
\r
2 /* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
\r
3 package org.simantics.graphviz.internal.parser;
\r
6 * An implementation of interface CharStream, where the stream is assumed to
\r
7 * contain only ASCII characters (without unicode processing).
\r
10 public class SimpleCharStream
\r
12 /** Whether parser is static. */
\r
13 public static final boolean staticFlag = false;
\r
17 /** Position in buffer. */
\r
18 public int bufpos = -1;
\r
19 protected int bufline[];
\r
20 protected int bufcolumn[];
\r
22 protected int column = 0;
\r
23 protected int line = 1;
\r
25 protected boolean prevCharIsCR = false;
\r
26 protected boolean prevCharIsLF = false;
\r
28 protected java.io.Reader inputStream;
\r
30 protected char[] buffer;
\r
31 protected int maxNextCharInd = 0;
\r
32 protected int inBuf = 0;
\r
33 protected int tabSize = 8;
\r
35 protected void setTabSize(int i) { tabSize = i; }
\r
36 protected int getTabSize(int i) { return tabSize; }
\r
39 protected void ExpandBuff(boolean wrapAround)
\r
41 char[] newbuffer = new char[bufsize + 2048];
\r
42 int newbufline[] = new int[bufsize + 2048];
\r
43 int newbufcolumn[] = new int[bufsize + 2048];
\r
49 System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
\r
50 System.arraycopy(buffer, 0, newbuffer, bufsize - tokenBegin, bufpos);
\r
53 System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
\r
54 System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos);
\r
55 bufline = newbufline;
\r
57 System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
\r
58 System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos);
\r
59 bufcolumn = newbufcolumn;
\r
61 maxNextCharInd = (bufpos += (bufsize - tokenBegin));
\r
65 System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
\r
68 System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
\r
69 bufline = newbufline;
\r
71 System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
\r
72 bufcolumn = newbufcolumn;
\r
74 maxNextCharInd = (bufpos -= tokenBegin);
\r
79 throw new Error(t.getMessage());
\r
84 available = bufsize;
\r
88 protected void FillBuff() throws java.io.IOException
\r
90 if (maxNextCharInd == available)
\r
92 if (available == bufsize)
\r
94 if (tokenBegin > 2048)
\r
96 bufpos = maxNextCharInd = 0;
\r
97 available = tokenBegin;
\r
99 else if (tokenBegin < 0)
\r
100 bufpos = maxNextCharInd = 0;
\r
104 else if (available > tokenBegin)
\r
105 available = bufsize;
\r
106 else if ((tokenBegin - available) < 2048)
\r
109 available = tokenBegin;
\r
114 if ((i = inputStream.read(buffer, maxNextCharInd, available - maxNextCharInd)) == -1)
\r
116 inputStream.close();
\r
117 throw new java.io.IOException();
\r
120 maxNextCharInd += i;
\r
123 catch(java.io.IOException e) {
\r
126 if (tokenBegin == -1)
\r
127 tokenBegin = bufpos;
\r
133 public char BeginToken() throws java.io.IOException
\r
136 char c = readChar();
\r
137 tokenBegin = bufpos;
\r
142 protected void UpdateLineColumn(char c)
\r
148 prevCharIsLF = false;
\r
149 line += (column = 1);
\r
151 else if (prevCharIsCR)
\r
153 prevCharIsCR = false;
\r
156 prevCharIsLF = true;
\r
159 line += (column = 1);
\r
165 prevCharIsCR = true;
\r
168 prevCharIsLF = true;
\r
172 column += (tabSize - (column % tabSize));
\r
178 bufline[bufpos] = line;
\r
179 bufcolumn[bufpos] = column;
\r
182 /** Read a character. */
\r
183 public char readChar() throws java.io.IOException
\r
189 if (++bufpos == bufsize)
\r
192 return buffer[bufpos];
\r
195 if (++bufpos >= maxNextCharInd)
\r
198 char c = buffer[bufpos];
\r
200 UpdateLineColumn(c);
\r
207 * @see #getEndColumn
\r
210 public int getColumn() {
\r
211 return bufcolumn[bufpos];
\r
220 public int getLine() {
\r
221 return bufline[bufpos];
\r
224 /** Get token end column number. */
\r
225 public int getEndColumn() {
\r
226 return bufcolumn[bufpos];
\r
229 /** Get token end line number. */
\r
230 public int getEndLine() {
\r
231 return bufline[bufpos];
\r
234 /** Get token beginning column number. */
\r
235 public int getBeginColumn() {
\r
236 return bufcolumn[tokenBegin];
\r
239 /** Get token beginning line number. */
\r
240 public int getBeginLine() {
\r
241 return bufline[tokenBegin];
\r
244 /** Backup a number of characters. */
\r
245 public void backup(int amount) {
\r
248 if ((bufpos -= amount) < 0)
\r
252 /** Constructor. */
\r
253 public SimpleCharStream(java.io.Reader dstream, int startline,
\r
254 int startcolumn, int buffersize)
\r
256 inputStream = dstream;
\r
258 column = startcolumn - 1;
\r
260 available = bufsize = buffersize;
\r
261 buffer = new char[buffersize];
\r
262 bufline = new int[buffersize];
\r
263 bufcolumn = new int[buffersize];
\r
266 /** Constructor. */
\r
267 public SimpleCharStream(java.io.Reader dstream, int startline,
\r
270 this(dstream, startline, startcolumn, 4096);
\r
273 /** Constructor. */
\r
274 public SimpleCharStream(java.io.Reader dstream)
\r
276 this(dstream, 1, 1, 4096);
\r
279 /** Reinitialise. */
\r
280 public void ReInit(java.io.Reader dstream, int startline,
\r
281 int startcolumn, int buffersize)
\r
283 inputStream = dstream;
\r
285 column = startcolumn - 1;
\r
287 if (buffer == null || buffersize != buffer.length)
\r
289 available = bufsize = buffersize;
\r
290 buffer = new char[buffersize];
\r
291 bufline = new int[buffersize];
\r
292 bufcolumn = new int[buffersize];
\r
294 prevCharIsLF = prevCharIsCR = false;
\r
295 tokenBegin = inBuf = maxNextCharInd = 0;
\r
299 /** Reinitialise. */
\r
300 public void ReInit(java.io.Reader dstream, int startline,
\r
303 ReInit(dstream, startline, startcolumn, 4096);
\r
306 /** Reinitialise. */
\r
307 public void ReInit(java.io.Reader dstream)
\r
309 ReInit(dstream, 1, 1, 4096);
\r
311 /** Constructor. */
\r
312 public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline,
\r
313 int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
\r
315 this(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);
\r
318 /** Constructor. */
\r
319 public SimpleCharStream(java.io.InputStream dstream, int startline,
\r
320 int startcolumn, int buffersize)
\r
322 this(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);
\r
325 /** Constructor. */
\r
326 public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline,
\r
327 int startcolumn) throws java.io.UnsupportedEncodingException
\r
329 this(dstream, encoding, startline, startcolumn, 4096);
\r
332 /** Constructor. */
\r
333 public SimpleCharStream(java.io.InputStream dstream, int startline,
\r
336 this(dstream, startline, startcolumn, 4096);
\r
339 /** Constructor. */
\r
340 public SimpleCharStream(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
\r
342 this(dstream, encoding, 1, 1, 4096);
\r
345 /** Constructor. */
\r
346 public SimpleCharStream(java.io.InputStream dstream)
\r
348 this(dstream, 1, 1, 4096);
\r
351 /** Reinitialise. */
\r
352 public void ReInit(java.io.InputStream dstream, String encoding, int startline,
\r
353 int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
\r
355 ReInit(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);
\r
358 /** Reinitialise. */
\r
359 public void ReInit(java.io.InputStream dstream, int startline,
\r
360 int startcolumn, int buffersize)
\r
362 ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);
\r
365 /** Reinitialise. */
\r
366 public void ReInit(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
\r
368 ReInit(dstream, encoding, 1, 1, 4096);
\r
371 /** Reinitialise. */
\r
372 public void ReInit(java.io.InputStream dstream)
\r
374 ReInit(dstream, 1, 1, 4096);
\r
376 /** Reinitialise. */
\r
377 public void ReInit(java.io.InputStream dstream, String encoding, int startline,
\r
378 int startcolumn) throws java.io.UnsupportedEncodingException
\r
380 ReInit(dstream, encoding, startline, startcolumn, 4096);
\r
382 /** Reinitialise. */
\r
383 public void ReInit(java.io.InputStream dstream, int startline,
\r
386 ReInit(dstream, startline, startcolumn, 4096);
\r
388 /** Get token literal value. */
\r
389 public String GetImage()
\r
391 if (bufpos >= tokenBegin)
\r
392 return new String(buffer, tokenBegin, bufpos - tokenBegin + 1);
\r
394 return new String(buffer, tokenBegin, bufsize - tokenBegin) +
\r
395 new String(buffer, 0, bufpos + 1);
\r
398 /** Get the suffix. */
\r
399 public char[] GetSuffix(int len)
\r
401 char[] ret = new char[len];
\r
403 if ((bufpos + 1) >= len)
\r
404 System.arraycopy(buffer, bufpos - len + 1, ret, 0, len);
\r
407 System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0,
\r
409 System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1);
\r
415 /** Reset buffer when finished. */
\r
424 * Method to adjust line and column numbers for the start of a token.
\r
426 public void adjustBeginLineColumn(int newLine, int newCol)
\r
428 int start = tokenBegin;
\r
431 if (bufpos >= tokenBegin)
\r
433 len = bufpos - tokenBegin + inBuf + 1;
\r
437 len = bufsize - tokenBegin + bufpos + 1 + inBuf;
\r
440 int i = 0, j = 0, k = 0;
\r
441 int nextColDiff = 0, columnDiff = 0;
\r
443 while (i < len && bufline[j = start % bufsize] == bufline[k = ++start % bufsize])
\r
445 bufline[j] = newLine;
\r
446 nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j];
\r
447 bufcolumn[j] = newCol + columnDiff;
\r
448 columnDiff = nextColDiff;
\r
454 bufline[j] = newLine++;
\r
455 bufcolumn[j] = newCol + columnDiff;
\r
459 if (bufline[j = start % bufsize] != bufline[++start % bufsize])
\r
460 bufline[j] = newLine++;
\r
462 bufline[j] = newLine;
\r
467 column = bufcolumn[j];
\r
471 /* JavaCC - OriginalChecksum=2ebb0dd14a7b91f73d64828e19480e88 (do not edit this line) */
\r