Methods Summary |
---|
public final char | BeginToken()
tokenStart = bufferPosition;
return readChar();
|
public final void | Done()
try {
input.close();
} catch (IOException e) {
System.err.println("Caught: " + e + "; ignoring.");
}
|
public final java.lang.String | GetImage()
return new String(buffer, tokenStart, bufferPosition - tokenStart);
|
public final char[] | GetSuffix(int len)
char[] value = new char[len];
System.arraycopy(buffer, bufferPosition - len, value, 0, len);
return value;
|
public final void | backup(int amount)
bufferPosition -= amount;
|
public final int | getBeginColumn()
return bufferStart + tokenStart;
|
public final int | getBeginLine()
return 1;
|
public final int | getColumn()
return bufferStart + bufferPosition;
|
public final int | getEndColumn()
return bufferStart + bufferPosition;
|
public final int | getEndLine()
return 1;
|
public final int | getLine()
return 1;
|
public final char | readChar()
if (bufferPosition >= bufferLength)
refill();
return buffer[bufferPosition++];
|
private final void | refill()
int newPosition = bufferLength - tokenStart;
if (tokenStart == 0) { // token won't fit in buffer
if (buffer == null) { // first time: alloc buffer
buffer = new char[2048];
} else if (bufferLength == buffer.length) { // grow buffer
char[] newBuffer = new char[buffer.length*2];
System.arraycopy(buffer, 0, newBuffer, 0, bufferLength);
buffer = newBuffer;
}
} else { // shift token to front
System.arraycopy(buffer, tokenStart, buffer, 0, newPosition);
}
bufferLength = newPosition; // update state
bufferPosition = newPosition;
bufferStart += tokenStart;
tokenStart = 0;
int charsRead = // fill space in buffer
input.read(buffer, newPosition, buffer.length-newPosition);
if (charsRead == -1)
throw new IOException("read past eof");
else
bufferLength += charsRead;
|