diff -r cc682329886b -r b0610cd08440 src/share/jaxws_classes/com/sun/xml/internal/rngom/parse/compact/UCode_UCodeESC_CharStream.java --- a/src/share/jaxws_classes/com/sun/xml/internal/rngom/parse/compact/UCode_UCodeESC_CharStream.java Thu Sep 26 10:43:28 2013 -0700 +++ b/src/share/jaxws_classes/com/sun/xml/internal/rngom/parse/compact/UCode_UCodeESC_CharStream.java Fri Oct 04 16:21:34 2013 +0100 @@ -23,7 +23,7 @@ * questions. */ /* - * Copyright (C) 2004-2011 + * Copyright (C) 2004-2012 * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -45,7 +45,7 @@ */ /* Generated By:JavaCC: Do not edit this line. UCode_UCodeESC_CharStream.java Version 0.7pre6 */ /* The previous line keeps JavaCC quiet. In fact, the JavaCC generated file - has been edited to fix some bugs. */ + has been edited to fix some bugs. */ package com.sun.xml.internal.rngom.parse.compact; import com.sun.xml.internal.rngom.util.Utf16; @@ -58,537 +58,537 @@ * contain 16-bit unicode characters. */ public final class UCode_UCodeESC_CharStream { - public static final boolean staticFlag = false; - static final int hexval(char c) { - switch (c) { - case '0': - return 0; - case '1': - return 1; - case '2': - return 2; - case '3': - return 3; - case '4': - return 4; - case '5': - return 5; - case '6': - return 6; - case '7': - return 7; - case '8': - return 8; - case '9': - return 9; + public static final boolean staticFlag = false; - case 'a': - case 'A': - return 10; - case 'b': - case 'B': - return 11; - case 'c': - case 'C': - return 12; - case 'd': - case 'D': - return 13; - case 'e': - case 'E': - return 14; - case 'f': - case 'F': - return 15; + static final int hexval(char c) { + switch (c) { + case '0': + return 0; + case '1': + return 1; + case '2': + return 2; + case '3': + return 3; + case '4': + return 4; + case '5': + return 5; + case '6': + return 6; + case '7': + return 7; + case '8': + return 8; + case '9': + return 9; + + case 'a': + case 'A': + return 10; + case 'b': + case 'B': + return 11; + case 'c': + case 'C': + return 12; + case 'd': + case 'D': + return 13; + case 'e': + case 'E': + return 14; + case 'f': + case 'F': + return 15; + } + return -1; } - return -1; - } + public int bufpos = -1; + int bufsize; + int available; + int tokenBegin; + private int bufline[]; + private int bufcolumn[]; + private int column = 0; + private int line = 1; + private java.io.Reader inputStream; + private boolean closed = false; + private boolean prevCharIsLF = false; + private char[] nextCharBuf; + private char[] buffer; + private int maxNextCharInd = 0; + private int nextCharInd = -1; + private int inBuf = 0; - public int bufpos = -1; - int bufsize; - int available; - int tokenBegin; - private int bufline[]; - private int bufcolumn[]; + private final void ExpandBuff(boolean wrapAround) { + char[] newbuffer = new char[bufsize + 2048]; + int newbufline[] = new int[bufsize + 2048]; + int newbufcolumn[] = new int[bufsize + 2048]; - private int column = 0; - private int line = 1; + if (wrapAround) { + System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin); + System.arraycopy(buffer, 0, newbuffer, + bufsize - tokenBegin, bufpos); + buffer = newbuffer; - private java.io.Reader inputStream; - private boolean closed = false; + System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin); + System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos); + bufline = newbufline; - private boolean prevCharIsLF = false; + System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin); + System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos); + bufcolumn = newbufcolumn; - private char[] nextCharBuf; - private char[] buffer; - private int maxNextCharInd = 0; - private int nextCharInd = -1; - private int inBuf = 0; + bufpos += (bufsize - tokenBegin); + } else { + System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin); + buffer = newbuffer; - private final void ExpandBuff(boolean wrapAround) { - char[] newbuffer = new char[bufsize + 2048]; - int newbufline[] = new int[bufsize + 2048]; - int newbufcolumn[] = new int[bufsize + 2048]; + System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin); + bufline = newbufline; - if (wrapAround) { - System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin); - System.arraycopy(buffer, 0, newbuffer, - bufsize - tokenBegin, bufpos); - buffer = newbuffer; + System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin); + bufcolumn = newbufcolumn; - System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin); - System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos); - bufline = newbufline; + bufpos -= tokenBegin; + } - System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin); - System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos); - bufcolumn = newbufcolumn; - - bufpos += (bufsize - tokenBegin); - } - else { - System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin); - buffer = newbuffer; - - System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin); - bufline = newbufline; - - System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin); - bufcolumn = newbufcolumn; - - bufpos -= tokenBegin; + available = (bufsize += 2048); + tokenBegin = 0; } - available = (bufsize += 2048); - tokenBegin = 0; - } + private final void FillBuff() throws EOFException { + int i; + if (maxNextCharInd == 4096) { + maxNextCharInd = nextCharInd = 0; + } - private final void FillBuff() throws EOFException { - int i; - if (maxNextCharInd == 4096) - maxNextCharInd = nextCharInd = 0; - - if (closed) - throw new EOFException(); - try { - if ((i = inputStream.read(nextCharBuf, maxNextCharInd, 4096 - maxNextCharInd)) == -1) { - closed = true; - inputStream.close(); - throw new EOFException(); - } - else - maxNextCharInd += i; - } - catch (IOException e) { - throw new BuildException(e); - } - } - - private final char ReadChar() throws EOFException { - if (++nextCharInd >= maxNextCharInd) - FillBuff(); - - return nextCharBuf[nextCharInd]; - } - - private final char PeekChar() throws EOFException { - char c = ReadChar(); - --nextCharInd; - return c; - } - - public final char BeginToken() throws EOFException { - if (inBuf > 0) { - --inBuf; - return buffer[tokenBegin = (bufpos == bufsize - 1) ? (bufpos = 0) - : ++bufpos]; + if (closed) { + throw new EOFException(); + } + try { + if ((i = inputStream.read(nextCharBuf, maxNextCharInd, 4096 - maxNextCharInd)) == -1) { + closed = true; + inputStream.close(); + throw new EOFException(); + } else { + maxNextCharInd += i; + } + } catch (IOException e) { + throw new BuildException(e); + } } - tokenBegin = 0; - bufpos = -1; + private final char ReadChar() throws EOFException { + if (++nextCharInd >= maxNextCharInd) { + FillBuff(); + } - return readChar(); - } - - private final void AdjustBuffSize() { - if (available == bufsize) { - if (tokenBegin > 2048) { - bufpos = 0; - available = tokenBegin; - } - else - ExpandBuff(false); - } - else if (available > tokenBegin) - available = bufsize; - else if ((tokenBegin - available) < 2048) - ExpandBuff(true); - else - available = tokenBegin; - } - - private final void UpdateLineColumn(char c) { - column++; - - if (prevCharIsLF) { - prevCharIsLF = false; - line += (column = 1); + return nextCharBuf[nextCharInd]; } - switch (c) { - case NEWLINE_MARKER: - prevCharIsLF = true; - break; - case '\t': - column--; - column += (8 - (column & 07)); - break; - default : - break; + private final char PeekChar() throws EOFException { + char c = ReadChar(); + --nextCharInd; + return c; } - bufline[bufpos] = line; - bufcolumn[bufpos] = column; - } + public final char BeginToken() throws EOFException { + if (inBuf > 0) { + --inBuf; + return buffer[tokenBegin = (bufpos == bufsize - 1) ? (bufpos = 0) + : ++bufpos]; + } - private final char NEWLINE_MARKER = '\u0000'; + tokenBegin = 0; + bufpos = -1; - public final char readChar() throws EOFException { - if (inBuf > 0) { - --inBuf; - return buffer[(bufpos == bufsize - 1) ? (bufpos = 0) : ++bufpos]; + return readChar(); } - char c; - try { - c = ReadChar(); - switch (c) { - case '\r': - c = NEWLINE_MARKER; - try { - if (PeekChar() == '\n') - ReadChar(); + private final void AdjustBuffSize() { + if (available == bufsize) { + if (tokenBegin > 2048) { + bufpos = 0; + available = tokenBegin; + } else { + ExpandBuff(false); + } + } else if (available > tokenBegin) { + available = bufsize; + } else if ((tokenBegin - available) < 2048) { + ExpandBuff(true); + } else { + available = tokenBegin; } - catch (EOFException e) { + } + + private final void UpdateLineColumn(char c) { + column++; + + if (prevCharIsLF) { + prevCharIsLF = false; + line += (column = 1); } - break; - case '\n': - c = NEWLINE_MARKER; - break; - case '\t': - break; - default: - if (c >= 0x20) { - if (Utf16.isSurrogate(c)) { - if (Utf16.isSurrogate2(c)) - throw new EscapeSyntaxException("illegal_surrogate_pair", line, column + 1); - if (++bufpos == available) - AdjustBuffSize(); - buffer[bufpos] = c; - // UpdateLineColumn(c); - try { - c = ReadChar(); - } - catch (EOFException e) { - throw new EscapeSyntaxException("illegal_surrogate_pair", line, column + 1); - } - if (!Utf16.isSurrogate2(c)) - throw new EscapeSyntaxException("illegal_surrogate_pair", line, column + 2); - } - break; + + switch (c) { + case NEWLINE_MARKER: + prevCharIsLF = true; + break; + case '\t': + column--; + column += (8 - (column & 07)); + break; + default: + break; } - // fall through - case '\uFFFE': - case '\uFFFF': - throw new EscapeSyntaxException("illegal_char_code", line, column + 1); - } - } - catch (EOFException e) { - if (bufpos == -1) { - if (++bufpos == available) - AdjustBuffSize(); + bufline[bufpos] = line; bufcolumn[bufpos] = column; - } - throw e; } - if (++bufpos == available) - AdjustBuffSize(); - buffer[bufpos] = c; - UpdateLineColumn(c); - try { - if (c != '\\' || PeekChar() != 'x') - return c; - } - catch (EOFException e) { - return c; + private static final char NEWLINE_MARKER = '\u0000'; + + public final char readChar() throws EOFException { + if (inBuf > 0) { + --inBuf; + return buffer[(bufpos == bufsize - 1) ? (bufpos = 0) : ++bufpos]; + } + + char c; + try { + c = ReadChar(); + switch (c) { + case '\r': + c = NEWLINE_MARKER; + try { + if (PeekChar() == '\n') { + ReadChar(); + } + } catch (EOFException e) { + } + break; + case '\n': + c = NEWLINE_MARKER; + break; + case '\t': + break; + default: + if (c >= 0x20) { + if (Utf16.isSurrogate(c)) { + if (Utf16.isSurrogate2(c)) { + throw new EscapeSyntaxException("illegal_surrogate_pair", line, column + 1); + } + if (++bufpos == available) { + AdjustBuffSize(); + } + buffer[bufpos] = c; + // UpdateLineColumn(c); + try { + c = ReadChar(); + } catch (EOFException e) { + throw new EscapeSyntaxException("illegal_surrogate_pair", line, column + 1); + } + if (!Utf16.isSurrogate2(c)) { + throw new EscapeSyntaxException("illegal_surrogate_pair", line, column + 2); + } + } + break; + } + // fall through + case '\uFFFE': + case '\uFFFF': + throw new EscapeSyntaxException("illegal_char_code", line, column + 1); + } + } catch (EOFException e) { + if (bufpos == -1) { + if (++bufpos == available) { + AdjustBuffSize(); + } + bufline[bufpos] = line; + bufcolumn[bufpos] = column; + } + throw e; + } + if (++bufpos == available) { + AdjustBuffSize(); + } + buffer[bufpos] = c; + UpdateLineColumn(c); + try { + if (c != '\\' || PeekChar() != 'x') { + return c; + } + } catch (EOFException e) { + return c; + } + + int xCnt = 1; + for (;;) { + ReadChar(); + if (++bufpos == available) { + AdjustBuffSize(); + } + buffer[bufpos] = 'x'; + UpdateLineColumn('x'); + try { + c = PeekChar(); + } catch (EOFException e) { + backup(xCnt); + return '\\'; + } + if (c == '{') { + ReadChar(); + column++; + // backup past the 'x's + bufpos -= xCnt; + if (bufpos < 0) { + bufpos += bufsize; + } + break; + } + if (c != 'x') { + backup(xCnt); + return '\\'; + } + xCnt++; + } + try { + int scalarValue = hexval(ReadChar()); + column++; + if (scalarValue < 0) { + throw new EscapeSyntaxException("illegal_hex_digit", line, column); + } + while ((c = ReadChar()) != '}') { + column++; + int n = hexval(c); + if (n < 0) { + throw new EscapeSyntaxException("illegal_hex_digit", line, column); + } + scalarValue <<= 4; + scalarValue |= n; + if (scalarValue >= 0x110000) { + throw new EscapeSyntaxException("char_code_too_big", line, column); + } + } + column++; // for the '}' + if (scalarValue <= 0xFFFF) { + c = (char) scalarValue; + switch (c) { + case '\n': + case '\r': + case '\t': + break; + default: + if (c >= 0x20 && !Utf16.isSurrogate(c)) { + break; + } + // fall through + case '\uFFFE': + case '\uFFFF': + throw new EscapeSyntaxException("illegal_char_code_ref", line, column); + } + buffer[bufpos] = c; + return c; + } + c = Utf16.surrogate1(scalarValue); + buffer[bufpos] = c; + int bufpos1 = bufpos; + if (++bufpos == bufsize) { + bufpos = 0; + } + buffer[bufpos] = Utf16.surrogate2(scalarValue); + bufline[bufpos] = bufline[bufpos1]; + bufcolumn[bufpos] = bufcolumn[bufpos1]; + backup(1); + return c; + } catch (EOFException e) { + throw new EscapeSyntaxException("incomplete_escape", line, column); + } } - int xCnt = 1; - for (;;) { - ReadChar(); - if (++bufpos == available) - AdjustBuffSize(); - buffer[bufpos] = 'x'; - UpdateLineColumn('x'); - try { - c = PeekChar(); - } - catch (EOFException e) { - backup(xCnt); - return '\\'; - } - if (c == '{') { - ReadChar(); - column++; - // backup past the 'x's - bufpos -= xCnt; - if (bufpos < 0) - bufpos += bufsize; - break; - } - if (c != 'x') { - backup(xCnt); - return '\\'; - } - xCnt++; - } - try { - int scalarValue = hexval(ReadChar()); - column++; - if (scalarValue < 0) - throw new EscapeSyntaxException("illegal_hex_digit", line, column); - while ((c = ReadChar()) != '}') { - column++; - int n = hexval(c); - if (n < 0) - throw new EscapeSyntaxException("illegal_hex_digit", line, column); - scalarValue <<= 4; - scalarValue |= n; - if (scalarValue >= 0x110000) - throw new EscapeSyntaxException("char_code_too_big", line, column); - } - column++; // for the '}' - if (scalarValue <= 0xFFFF) { - c = (char)scalarValue; - switch (c) { - case '\n': - case '\r': - case '\t': - break; - default: - if (c >= 0x20 && !Utf16.isSurrogate(c)) - break; - // fall through - case '\uFFFE': - case '\uFFFF': - throw new EscapeSyntaxException("illegal_char_code_ref", line, column); - } - buffer[bufpos] = c; - return c; - } - c = Utf16.surrogate1(scalarValue); - buffer[bufpos] = c; - int bufpos1 = bufpos; - if (++bufpos == bufsize) - bufpos = 0; - buffer[bufpos] = Utf16.surrogate2(scalarValue); - bufline[bufpos] = bufline[bufpos1]; - bufcolumn[bufpos] = bufcolumn[bufpos1]; - backup(1); - return c; - } - catch (EOFException e) { - throw new EscapeSyntaxException("incomplete_escape", line, column); - } - } - - /** - * @deprecated - * @see #getEndColumn - */ - - public final int getColumn() { - return bufcolumn[bufpos]; - } - - /** - * @deprecated - * @see #getEndLine - */ - - public final int getLine() { - return bufline[bufpos]; - } - - public final int getEndColumn() { - return bufcolumn[bufpos]; - } - - public final int getEndLine() { - return bufline[bufpos]; - } - - public final int getBeginColumn() { - return bufcolumn[tokenBegin]; - } - - public final int getBeginLine() { - return bufline[tokenBegin]; - } - - public final void backup(int amount) { - - inBuf += amount; - if ((bufpos -= amount) < 0) - bufpos += bufsize; - } - - public UCode_UCodeESC_CharStream(java.io.Reader dstream, - int startline, int startcolumn, int buffersize) { - inputStream = dstream; - line = startline; - column = startcolumn - 1; - - available = bufsize = buffersize; - buffer = new char[buffersize]; - bufline = new int[buffersize]; - bufcolumn = new int[buffersize]; - nextCharBuf = new char[4096]; - skipBOM(); - } - - public UCode_UCodeESC_CharStream(java.io.Reader dstream, - int startline, int startcolumn) { - this(dstream, startline, startcolumn, 4096); - } - - public void ReInit(java.io.Reader dstream, - int startline, int startcolumn, int buffersize) { - inputStream = dstream; - closed = false; - line = startline; - column = startcolumn - 1; - - if (buffer == null || buffersize != buffer.length) { - available = bufsize = buffersize; - buffer = new char[buffersize]; - bufline = new int[buffersize]; - bufcolumn = new int[buffersize]; - nextCharBuf = new char[4096]; - } - prevCharIsLF = false; - tokenBegin = inBuf = maxNextCharInd = 0; - nextCharInd = bufpos = -1; - skipBOM(); - } - - public void ReInit(java.io.Reader dstream, - int startline, int startcolumn) { - ReInit(dstream, startline, startcolumn, 4096); - } - - public UCode_UCodeESC_CharStream(java.io.InputStream dstream, int startline, - int startcolumn, int buffersize) { - this(new java.io.InputStreamReader(dstream), startline, startcolumn, 4096); - } - - public UCode_UCodeESC_CharStream(java.io.InputStream dstream, int startline, - int startcolumn) { - this(dstream, startline, startcolumn, 4096); - } - - public void ReInit(java.io.InputStream dstream, int startline, - int startcolumn, int buffersize) { - ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, 4096); - } - - public void ReInit(java.io.InputStream dstream, int startline, - int startcolumn) { - ReInit(dstream, startline, startcolumn, 4096); - } - - static private final char BOM = '\ufeff'; - - private void skipBOM() { - try { - if (PeekChar() == BOM) - ReadChar(); - } - catch (EOFException e) { - } - } - - public final String GetImage() { - if (bufpos >= tokenBegin) - return new String(buffer, tokenBegin, bufpos - tokenBegin + 1); - else - return new String(buffer, tokenBegin, bufsize - tokenBegin) + - new String(buffer, 0, bufpos + 1); - } - - public final char[] GetSuffix(int len) { - char[] ret = new char[len]; - - if ((bufpos + 1) >= len) - System.arraycopy(buffer, bufpos - len + 1, ret, 0, len); - else { - System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0, - len - bufpos - 1); - System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1); + /** + * @deprecated @see #getEndColumn + */ + public final int getColumn() { + return bufcolumn[bufpos]; } - return ret; - } - - public void Done() { - nextCharBuf = null; - buffer = null; - bufline = null; - bufcolumn = null; - } - - /** - * Method to adjust line and column numbers for the start of a token.
- */ - public void adjustBeginLineColumn(int newLine, int newCol) { - int start = tokenBegin; - int len; - - if (bufpos >= tokenBegin) { - len = bufpos - tokenBegin + inBuf + 1; - } - else { - len = bufsize - tokenBegin + bufpos + 1 + inBuf; + /** + * @deprecated @see #getEndLine + */ + public final int getLine() { + return bufline[bufpos]; } - int i = 0, j = 0, k = 0; - int nextColDiff = 0, columnDiff = 0; - - while (i < len && - bufline[j = start % bufsize] == bufline[k = ++start % bufsize]) { - bufline[j] = newLine; - nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j]; - bufcolumn[j] = newCol + columnDiff; - columnDiff = nextColDiff; - i++; + public final int getEndColumn() { + return bufcolumn[bufpos]; } - if (i < len) { - bufline[j] = newLine++; - bufcolumn[j] = newCol + columnDiff; - - while (i++ < len) { - if (bufline[j = start % bufsize] != bufline[++start % bufsize]) - bufline[j] = newLine++; - else - bufline[j] = newLine; - } + public final int getEndLine() { + return bufline[bufpos]; } - line = bufline[j]; - column = bufcolumn[j]; - } + public final int getBeginColumn() { + return bufcolumn[tokenBegin]; + } + public final int getBeginLine() { + return bufline[tokenBegin]; + } + + public final void backup(int amount) { + + inBuf += amount; + if ((bufpos -= amount) < 0) { + bufpos += bufsize; + } + } + + public UCode_UCodeESC_CharStream(java.io.Reader dstream, + int startline, int startcolumn, int buffersize) { + inputStream = dstream; + line = startline; + column = startcolumn - 1; + + available = bufsize = buffersize; + buffer = new char[buffersize]; + bufline = new int[buffersize]; + bufcolumn = new int[buffersize]; + nextCharBuf = new char[4096]; + skipBOM(); + } + + public UCode_UCodeESC_CharStream(java.io.Reader dstream, + int startline, int startcolumn) { + this(dstream, startline, startcolumn, 4096); + } + + public void ReInit(java.io.Reader dstream, + int startline, int startcolumn, int buffersize) { + inputStream = dstream; + closed = false; + line = startline; + column = startcolumn - 1; + + if (buffer == null || buffersize != buffer.length) { + available = bufsize = buffersize; + buffer = new char[buffersize]; + bufline = new int[buffersize]; + bufcolumn = new int[buffersize]; + nextCharBuf = new char[4096]; + } + prevCharIsLF = false; + tokenBegin = inBuf = maxNextCharInd = 0; + nextCharInd = bufpos = -1; + skipBOM(); + } + + public void ReInit(java.io.Reader dstream, + int startline, int startcolumn) { + ReInit(dstream, startline, startcolumn, 4096); + } + + public UCode_UCodeESC_CharStream(java.io.InputStream dstream, int startline, + int startcolumn, int buffersize) { + this(new java.io.InputStreamReader(dstream), startline, startcolumn, 4096); + } + + public UCode_UCodeESC_CharStream(java.io.InputStream dstream, int startline, + int startcolumn) { + this(dstream, startline, startcolumn, 4096); + } + + public void ReInit(java.io.InputStream dstream, int startline, + int startcolumn, int buffersize) { + ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, 4096); + } + + public void ReInit(java.io.InputStream dstream, int startline, + int startcolumn) { + ReInit(dstream, startline, startcolumn, 4096); + } + static private final char BOM = '\ufeff'; + + private void skipBOM() { + try { + if (PeekChar() == BOM) { + ReadChar(); + } + } catch (EOFException e) { + } + } + + public final String GetImage() { + if (bufpos >= tokenBegin) { + return new String(buffer, tokenBegin, bufpos - tokenBegin + 1); + } else { + return new String(buffer, tokenBegin, bufsize - tokenBegin) + + new String(buffer, 0, bufpos + 1); + } + } + + public final char[] GetSuffix(int len) { + char[] ret = new char[len]; + + if ((bufpos + 1) >= len) { + System.arraycopy(buffer, bufpos - len + 1, ret, 0, len); + } else { + System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0, + len - bufpos - 1); + System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1); + } + + return ret; + } + + public void Done() { + nextCharBuf = null; + buffer = null; + bufline = null; + bufcolumn = null; + } + + /** + * Method to adjust line and column numbers for the start of a token.
+ */ + public void adjustBeginLineColumn(int newLine, int newCol) { + int start = tokenBegin; + int len; + + if (bufpos >= tokenBegin) { + len = bufpos - tokenBegin + inBuf + 1; + } else { + len = bufsize - tokenBegin + bufpos + 1 + inBuf; + } + + int i = 0, j = 0, k = 0; + int nextColDiff, columnDiff = 0; + + while (i < len + && bufline[j = start % bufsize] == bufline[k = ++start % bufsize]) { + bufline[j] = newLine; + nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j]; + bufcolumn[j] = newCol + columnDiff; + columnDiff = nextColDiff; + i++; + } + + if (i < len) { + bufline[j] = newLine++; + bufcolumn[j] = newCol + columnDiff; + + while (i++ < len) { + if (bufline[j = start % bufsize] != bufline[++start % bufsize]) { + bufline[j] = newLine++; + } else { + bufline[j] = newLine; + } + } + } + + line = bufline[j]; + column = bufcolumn[j]; + } }