src/share/jaxws_classes/com/sun/xml/internal/rngom/parse/compact/UCode_UCodeESC_CharStream.java

Fri, 04 Oct 2013 16:21:34 +0100

author
mkos
date
Fri, 04 Oct 2013 16:21:34 +0100
changeset 408
b0610cd08440
parent 286
f50545b5e2f1
child 637
9c07ef4934dd
permissions
-rw-r--r--

8025054: Update JAX-WS RI integration to 2.2.9-b130926.1035
Reviewed-by: chegar

ohair@286 1 /*
ohair@286 2 * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
ohair@286 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
ohair@286 4 *
ohair@286 5 * This code is free software; you can redistribute it and/or modify it
ohair@286 6 * under the terms of the GNU General Public License version 2 only, as
ohair@286 7 * published by the Free Software Foundation. Oracle designates this
ohair@286 8 * particular file as subject to the "Classpath" exception as provided
ohair@286 9 * by Oracle in the LICENSE file that accompanied this code.
ohair@286 10 *
ohair@286 11 * This code is distributed in the hope that it will be useful, but WITHOUT
ohair@286 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
ohair@286 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
ohair@286 14 * version 2 for more details (a copy is included in the LICENSE file that
ohair@286 15 * accompanied this code).
ohair@286 16 *
ohair@286 17 * You should have received a copy of the GNU General Public License version
ohair@286 18 * 2 along with this work; if not, write to the Free Software Foundation,
ohair@286 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
ohair@286 20 *
ohair@286 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
ohair@286 22 * or visit www.oracle.com if you need additional information or have any
ohair@286 23 * questions.
ohair@286 24 */
ohair@286 25 /*
mkos@408 26 * Copyright (C) 2004-2012
ohair@286 27 *
ohair@286 28 * Permission is hereby granted, free of charge, to any person obtaining a copy
ohair@286 29 * of this software and associated documentation files (the "Software"), to deal
ohair@286 30 * in the Software without restriction, including without limitation the rights
ohair@286 31 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
ohair@286 32 * copies of the Software, and to permit persons to whom the Software is
ohair@286 33 * furnished to do so, subject to the following conditions:
ohair@286 34 *
ohair@286 35 * The above copyright notice and this permission notice shall be included in
ohair@286 36 * all copies or substantial portions of the Software.
ohair@286 37 *
ohair@286 38 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
ohair@286 39 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
ohair@286 40 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
ohair@286 41 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
ohair@286 42 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
ohair@286 43 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
ohair@286 44 * THE SOFTWARE.
ohair@286 45 */
ohair@286 46 /* Generated By:JavaCC: Do not edit this line. UCode_UCodeESC_CharStream.java Version 0.7pre6 */
ohair@286 47 /* The previous line keeps JavaCC quiet. In fact, the JavaCC generated file
mkos@408 48 has been edited to fix some bugs. */
ohair@286 49 package com.sun.xml.internal.rngom.parse.compact;
ohair@286 50
ohair@286 51 import com.sun.xml.internal.rngom.util.Utf16;
ohair@286 52 import com.sun.xml.internal.rngom.ast.builder.BuildException;
ohair@286 53
ohair@286 54 import java.io.IOException;
ohair@286 55
ohair@286 56 /**
ohair@286 57 * An implementation of interface CharStream, where the stream is assumed to
ohair@286 58 * contain 16-bit unicode characters.
ohair@286 59 */
ohair@286 60 public final class UCode_UCodeESC_CharStream {
ohair@286 61
mkos@408 62 public static final boolean staticFlag = false;
ohair@286 63
mkos@408 64 static final int hexval(char c) {
mkos@408 65 switch (c) {
mkos@408 66 case '0':
mkos@408 67 return 0;
mkos@408 68 case '1':
mkos@408 69 return 1;
mkos@408 70 case '2':
mkos@408 71 return 2;
mkos@408 72 case '3':
mkos@408 73 return 3;
mkos@408 74 case '4':
mkos@408 75 return 4;
mkos@408 76 case '5':
mkos@408 77 return 5;
mkos@408 78 case '6':
mkos@408 79 return 6;
mkos@408 80 case '7':
mkos@408 81 return 7;
mkos@408 82 case '8':
mkos@408 83 return 8;
mkos@408 84 case '9':
mkos@408 85 return 9;
mkos@408 86
mkos@408 87 case 'a':
mkos@408 88 case 'A':
mkos@408 89 return 10;
mkos@408 90 case 'b':
mkos@408 91 case 'B':
mkos@408 92 return 11;
mkos@408 93 case 'c':
mkos@408 94 case 'C':
mkos@408 95 return 12;
mkos@408 96 case 'd':
mkos@408 97 case 'D':
mkos@408 98 return 13;
mkos@408 99 case 'e':
mkos@408 100 case 'E':
mkos@408 101 return 14;
mkos@408 102 case 'f':
mkos@408 103 case 'F':
mkos@408 104 return 15;
mkos@408 105 }
mkos@408 106 return -1;
ohair@286 107 }
mkos@408 108 public int bufpos = -1;
mkos@408 109 int bufsize;
mkos@408 110 int available;
mkos@408 111 int tokenBegin;
mkos@408 112 private int bufline[];
mkos@408 113 private int bufcolumn[];
mkos@408 114 private int column = 0;
mkos@408 115 private int line = 1;
mkos@408 116 private java.io.Reader inputStream;
mkos@408 117 private boolean closed = false;
mkos@408 118 private boolean prevCharIsLF = false;
mkos@408 119 private char[] nextCharBuf;
mkos@408 120 private char[] buffer;
mkos@408 121 private int maxNextCharInd = 0;
mkos@408 122 private int nextCharInd = -1;
mkos@408 123 private int inBuf = 0;
ohair@286 124
mkos@408 125 private final void ExpandBuff(boolean wrapAround) {
mkos@408 126 char[] newbuffer = new char[bufsize + 2048];
mkos@408 127 int newbufline[] = new int[bufsize + 2048];
mkos@408 128 int newbufcolumn[] = new int[bufsize + 2048];
ohair@286 129
mkos@408 130 if (wrapAround) {
mkos@408 131 System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
mkos@408 132 System.arraycopy(buffer, 0, newbuffer,
mkos@408 133 bufsize - tokenBegin, bufpos);
mkos@408 134 buffer = newbuffer;
ohair@286 135
mkos@408 136 System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
mkos@408 137 System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos);
mkos@408 138 bufline = newbufline;
ohair@286 139
mkos@408 140 System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
mkos@408 141 System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos);
mkos@408 142 bufcolumn = newbufcolumn;
ohair@286 143
mkos@408 144 bufpos += (bufsize - tokenBegin);
mkos@408 145 } else {
mkos@408 146 System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
mkos@408 147 buffer = newbuffer;
ohair@286 148
mkos@408 149 System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
mkos@408 150 bufline = newbufline;
ohair@286 151
mkos@408 152 System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
mkos@408 153 bufcolumn = newbufcolumn;
ohair@286 154
mkos@408 155 bufpos -= tokenBegin;
mkos@408 156 }
ohair@286 157
mkos@408 158 available = (bufsize += 2048);
mkos@408 159 tokenBegin = 0;
ohair@286 160 }
ohair@286 161
mkos@408 162 private final void FillBuff() throws EOFException {
mkos@408 163 int i;
mkos@408 164 if (maxNextCharInd == 4096) {
mkos@408 165 maxNextCharInd = nextCharInd = 0;
mkos@408 166 }
ohair@286 167
mkos@408 168 if (closed) {
mkos@408 169 throw new EOFException();
mkos@408 170 }
mkos@408 171 try {
mkos@408 172 if ((i = inputStream.read(nextCharBuf, maxNextCharInd, 4096 - maxNextCharInd)) == -1) {
mkos@408 173 closed = true;
mkos@408 174 inputStream.close();
mkos@408 175 throw new EOFException();
mkos@408 176 } else {
mkos@408 177 maxNextCharInd += i;
mkos@408 178 }
mkos@408 179 } catch (IOException e) {
mkos@408 180 throw new BuildException(e);
mkos@408 181 }
ohair@286 182 }
ohair@286 183
mkos@408 184 private final char ReadChar() throws EOFException {
mkos@408 185 if (++nextCharInd >= maxNextCharInd) {
mkos@408 186 FillBuff();
mkos@408 187 }
ohair@286 188
mkos@408 189 return nextCharBuf[nextCharInd];
ohair@286 190 }
ohair@286 191
mkos@408 192 private final char PeekChar() throws EOFException {
mkos@408 193 char c = ReadChar();
mkos@408 194 --nextCharInd;
mkos@408 195 return c;
ohair@286 196 }
ohair@286 197
mkos@408 198 public final char BeginToken() throws EOFException {
mkos@408 199 if (inBuf > 0) {
mkos@408 200 --inBuf;
mkos@408 201 return buffer[tokenBegin = (bufpos == bufsize - 1) ? (bufpos = 0)
mkos@408 202 : ++bufpos];
mkos@408 203 }
ohair@286 204
mkos@408 205 tokenBegin = 0;
mkos@408 206 bufpos = -1;
ohair@286 207
mkos@408 208 return readChar();
ohair@286 209 }
ohair@286 210
mkos@408 211 private final void AdjustBuffSize() {
mkos@408 212 if (available == bufsize) {
mkos@408 213 if (tokenBegin > 2048) {
mkos@408 214 bufpos = 0;
mkos@408 215 available = tokenBegin;
mkos@408 216 } else {
mkos@408 217 ExpandBuff(false);
mkos@408 218 }
mkos@408 219 } else if (available > tokenBegin) {
mkos@408 220 available = bufsize;
mkos@408 221 } else if ((tokenBegin - available) < 2048) {
mkos@408 222 ExpandBuff(true);
mkos@408 223 } else {
mkos@408 224 available = tokenBegin;
ohair@286 225 }
mkos@408 226 }
mkos@408 227
mkos@408 228 private final void UpdateLineColumn(char c) {
mkos@408 229 column++;
mkos@408 230
mkos@408 231 if (prevCharIsLF) {
mkos@408 232 prevCharIsLF = false;
mkos@408 233 line += (column = 1);
ohair@286 234 }
mkos@408 235
mkos@408 236 switch (c) {
mkos@408 237 case NEWLINE_MARKER:
mkos@408 238 prevCharIsLF = true;
mkos@408 239 break;
mkos@408 240 case '\t':
mkos@408 241 column--;
mkos@408 242 column += (8 - (column & 07));
mkos@408 243 break;
mkos@408 244 default:
mkos@408 245 break;
ohair@286 246 }
mkos@408 247
ohair@286 248 bufline[bufpos] = line;
ohair@286 249 bufcolumn[bufpos] = column;
ohair@286 250 }
mkos@408 251 private static final char NEWLINE_MARKER = '\u0000';
mkos@408 252
mkos@408 253 public final char readChar() throws EOFException {
mkos@408 254 if (inBuf > 0) {
mkos@408 255 --inBuf;
mkos@408 256 return buffer[(bufpos == bufsize - 1) ? (bufpos = 0) : ++bufpos];
mkos@408 257 }
mkos@408 258
mkos@408 259 char c;
mkos@408 260 try {
mkos@408 261 c = ReadChar();
mkos@408 262 switch (c) {
mkos@408 263 case '\r':
mkos@408 264 c = NEWLINE_MARKER;
mkos@408 265 try {
mkos@408 266 if (PeekChar() == '\n') {
mkos@408 267 ReadChar();
mkos@408 268 }
mkos@408 269 } catch (EOFException e) {
mkos@408 270 }
mkos@408 271 break;
mkos@408 272 case '\n':
mkos@408 273 c = NEWLINE_MARKER;
mkos@408 274 break;
mkos@408 275 case '\t':
mkos@408 276 break;
mkos@408 277 default:
mkos@408 278 if (c >= 0x20) {
mkos@408 279 if (Utf16.isSurrogate(c)) {
mkos@408 280 if (Utf16.isSurrogate2(c)) {
mkos@408 281 throw new EscapeSyntaxException("illegal_surrogate_pair", line, column + 1);
mkos@408 282 }
mkos@408 283 if (++bufpos == available) {
mkos@408 284 AdjustBuffSize();
mkos@408 285 }
mkos@408 286 buffer[bufpos] = c;
mkos@408 287 // UpdateLineColumn(c);
mkos@408 288 try {
mkos@408 289 c = ReadChar();
mkos@408 290 } catch (EOFException e) {
mkos@408 291 throw new EscapeSyntaxException("illegal_surrogate_pair", line, column + 1);
mkos@408 292 }
mkos@408 293 if (!Utf16.isSurrogate2(c)) {
mkos@408 294 throw new EscapeSyntaxException("illegal_surrogate_pair", line, column + 2);
mkos@408 295 }
mkos@408 296 }
mkos@408 297 break;
mkos@408 298 }
mkos@408 299 // fall through
mkos@408 300 case '\uFFFE':
mkos@408 301 case '\uFFFF':
mkos@408 302 throw new EscapeSyntaxException("illegal_char_code", line, column + 1);
mkos@408 303 }
mkos@408 304 } catch (EOFException e) {
mkos@408 305 if (bufpos == -1) {
mkos@408 306 if (++bufpos == available) {
mkos@408 307 AdjustBuffSize();
mkos@408 308 }
mkos@408 309 bufline[bufpos] = line;
mkos@408 310 bufcolumn[bufpos] = column;
mkos@408 311 }
mkos@408 312 throw e;
mkos@408 313 }
mkos@408 314 if (++bufpos == available) {
mkos@408 315 AdjustBuffSize();
mkos@408 316 }
mkos@408 317 buffer[bufpos] = c;
mkos@408 318 UpdateLineColumn(c);
mkos@408 319 try {
mkos@408 320 if (c != '\\' || PeekChar() != 'x') {
mkos@408 321 return c;
mkos@408 322 }
mkos@408 323 } catch (EOFException e) {
mkos@408 324 return c;
mkos@408 325 }
mkos@408 326
mkos@408 327 int xCnt = 1;
mkos@408 328 for (;;) {
mkos@408 329 ReadChar();
mkos@408 330 if (++bufpos == available) {
mkos@408 331 AdjustBuffSize();
mkos@408 332 }
mkos@408 333 buffer[bufpos] = 'x';
mkos@408 334 UpdateLineColumn('x');
mkos@408 335 try {
mkos@408 336 c = PeekChar();
mkos@408 337 } catch (EOFException e) {
mkos@408 338 backup(xCnt);
mkos@408 339 return '\\';
mkos@408 340 }
mkos@408 341 if (c == '{') {
mkos@408 342 ReadChar();
mkos@408 343 column++;
mkos@408 344 // backup past the 'x's
mkos@408 345 bufpos -= xCnt;
mkos@408 346 if (bufpos < 0) {
mkos@408 347 bufpos += bufsize;
mkos@408 348 }
mkos@408 349 break;
mkos@408 350 }
mkos@408 351 if (c != 'x') {
mkos@408 352 backup(xCnt);
mkos@408 353 return '\\';
mkos@408 354 }
mkos@408 355 xCnt++;
mkos@408 356 }
mkos@408 357 try {
mkos@408 358 int scalarValue = hexval(ReadChar());
mkos@408 359 column++;
mkos@408 360 if (scalarValue < 0) {
mkos@408 361 throw new EscapeSyntaxException("illegal_hex_digit", line, column);
mkos@408 362 }
mkos@408 363 while ((c = ReadChar()) != '}') {
mkos@408 364 column++;
mkos@408 365 int n = hexval(c);
mkos@408 366 if (n < 0) {
mkos@408 367 throw new EscapeSyntaxException("illegal_hex_digit", line, column);
mkos@408 368 }
mkos@408 369 scalarValue <<= 4;
mkos@408 370 scalarValue |= n;
mkos@408 371 if (scalarValue >= 0x110000) {
mkos@408 372 throw new EscapeSyntaxException("char_code_too_big", line, column);
mkos@408 373 }
mkos@408 374 }
mkos@408 375 column++; // for the '}'
mkos@408 376 if (scalarValue <= 0xFFFF) {
mkos@408 377 c = (char) scalarValue;
mkos@408 378 switch (c) {
mkos@408 379 case '\n':
mkos@408 380 case '\r':
mkos@408 381 case '\t':
mkos@408 382 break;
mkos@408 383 default:
mkos@408 384 if (c >= 0x20 && !Utf16.isSurrogate(c)) {
mkos@408 385 break;
mkos@408 386 }
mkos@408 387 // fall through
mkos@408 388 case '\uFFFE':
mkos@408 389 case '\uFFFF':
mkos@408 390 throw new EscapeSyntaxException("illegal_char_code_ref", line, column);
mkos@408 391 }
mkos@408 392 buffer[bufpos] = c;
mkos@408 393 return c;
mkos@408 394 }
mkos@408 395 c = Utf16.surrogate1(scalarValue);
mkos@408 396 buffer[bufpos] = c;
mkos@408 397 int bufpos1 = bufpos;
mkos@408 398 if (++bufpos == bufsize) {
mkos@408 399 bufpos = 0;
mkos@408 400 }
mkos@408 401 buffer[bufpos] = Utf16.surrogate2(scalarValue);
mkos@408 402 bufline[bufpos] = bufline[bufpos1];
mkos@408 403 bufcolumn[bufpos] = bufcolumn[bufpos1];
mkos@408 404 backup(1);
mkos@408 405 return c;
mkos@408 406 } catch (EOFException e) {
mkos@408 407 throw new EscapeSyntaxException("incomplete_escape", line, column);
mkos@408 408 }
ohair@286 409 }
ohair@286 410
mkos@408 411 /**
mkos@408 412 * @deprecated @see #getEndColumn
mkos@408 413 */
mkos@408 414 public final int getColumn() {
mkos@408 415 return bufcolumn[bufpos];
ohair@286 416 }
ohair@286 417
mkos@408 418 /**
mkos@408 419 * @deprecated @see #getEndLine
mkos@408 420 */
mkos@408 421 public final int getLine() {
mkos@408 422 return bufline[bufpos];
ohair@286 423 }
ohair@286 424
mkos@408 425 public final int getEndColumn() {
mkos@408 426 return bufcolumn[bufpos];
ohair@286 427 }
ohair@286 428
mkos@408 429 public final int getEndLine() {
mkos@408 430 return bufline[bufpos];
ohair@286 431 }
ohair@286 432
mkos@408 433 public final int getBeginColumn() {
mkos@408 434 return bufcolumn[tokenBegin];
mkos@408 435 }
ohair@286 436
mkos@408 437 public final int getBeginLine() {
mkos@408 438 return bufline[tokenBegin];
mkos@408 439 }
mkos@408 440
mkos@408 441 public final void backup(int amount) {
mkos@408 442
mkos@408 443 inBuf += amount;
mkos@408 444 if ((bufpos -= amount) < 0) {
mkos@408 445 bufpos += bufsize;
mkos@408 446 }
mkos@408 447 }
mkos@408 448
mkos@408 449 public UCode_UCodeESC_CharStream(java.io.Reader dstream,
mkos@408 450 int startline, int startcolumn, int buffersize) {
mkos@408 451 inputStream = dstream;
mkos@408 452 line = startline;
mkos@408 453 column = startcolumn - 1;
mkos@408 454
mkos@408 455 available = bufsize = buffersize;
mkos@408 456 buffer = new char[buffersize];
mkos@408 457 bufline = new int[buffersize];
mkos@408 458 bufcolumn = new int[buffersize];
mkos@408 459 nextCharBuf = new char[4096];
mkos@408 460 skipBOM();
mkos@408 461 }
mkos@408 462
mkos@408 463 public UCode_UCodeESC_CharStream(java.io.Reader dstream,
mkos@408 464 int startline, int startcolumn) {
mkos@408 465 this(dstream, startline, startcolumn, 4096);
mkos@408 466 }
mkos@408 467
mkos@408 468 public void ReInit(java.io.Reader dstream,
mkos@408 469 int startline, int startcolumn, int buffersize) {
mkos@408 470 inputStream = dstream;
mkos@408 471 closed = false;
mkos@408 472 line = startline;
mkos@408 473 column = startcolumn - 1;
mkos@408 474
mkos@408 475 if (buffer == null || buffersize != buffer.length) {
mkos@408 476 available = bufsize = buffersize;
mkos@408 477 buffer = new char[buffersize];
mkos@408 478 bufline = new int[buffersize];
mkos@408 479 bufcolumn = new int[buffersize];
mkos@408 480 nextCharBuf = new char[4096];
mkos@408 481 }
mkos@408 482 prevCharIsLF = false;
mkos@408 483 tokenBegin = inBuf = maxNextCharInd = 0;
mkos@408 484 nextCharInd = bufpos = -1;
mkos@408 485 skipBOM();
mkos@408 486 }
mkos@408 487
mkos@408 488 public void ReInit(java.io.Reader dstream,
mkos@408 489 int startline, int startcolumn) {
mkos@408 490 ReInit(dstream, startline, startcolumn, 4096);
mkos@408 491 }
mkos@408 492
mkos@408 493 public UCode_UCodeESC_CharStream(java.io.InputStream dstream, int startline,
mkos@408 494 int startcolumn, int buffersize) {
mkos@408 495 this(new java.io.InputStreamReader(dstream), startline, startcolumn, 4096);
mkos@408 496 }
mkos@408 497
mkos@408 498 public UCode_UCodeESC_CharStream(java.io.InputStream dstream, int startline,
mkos@408 499 int startcolumn) {
mkos@408 500 this(dstream, startline, startcolumn, 4096);
mkos@408 501 }
mkos@408 502
mkos@408 503 public void ReInit(java.io.InputStream dstream, int startline,
mkos@408 504 int startcolumn, int buffersize) {
mkos@408 505 ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, 4096);
mkos@408 506 }
mkos@408 507
mkos@408 508 public void ReInit(java.io.InputStream dstream, int startline,
mkos@408 509 int startcolumn) {
mkos@408 510 ReInit(dstream, startline, startcolumn, 4096);
mkos@408 511 }
mkos@408 512 static private final char BOM = '\ufeff';
mkos@408 513
mkos@408 514 private void skipBOM() {
mkos@408 515 try {
mkos@408 516 if (PeekChar() == BOM) {
mkos@408 517 ReadChar();
mkos@408 518 }
mkos@408 519 } catch (EOFException e) {
mkos@408 520 }
mkos@408 521 }
mkos@408 522
mkos@408 523 public final String GetImage() {
mkos@408 524 if (bufpos >= tokenBegin) {
mkos@408 525 return new String(buffer, tokenBegin, bufpos - tokenBegin + 1);
mkos@408 526 } else {
mkos@408 527 return new String(buffer, tokenBegin, bufsize - tokenBegin)
mkos@408 528 + new String(buffer, 0, bufpos + 1);
mkos@408 529 }
mkos@408 530 }
mkos@408 531
mkos@408 532 public final char[] GetSuffix(int len) {
mkos@408 533 char[] ret = new char[len];
mkos@408 534
mkos@408 535 if ((bufpos + 1) >= len) {
mkos@408 536 System.arraycopy(buffer, bufpos - len + 1, ret, 0, len);
mkos@408 537 } else {
mkos@408 538 System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0,
mkos@408 539 len - bufpos - 1);
mkos@408 540 System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1);
mkos@408 541 }
mkos@408 542
mkos@408 543 return ret;
mkos@408 544 }
mkos@408 545
mkos@408 546 public void Done() {
mkos@408 547 nextCharBuf = null;
mkos@408 548 buffer = null;
mkos@408 549 bufline = null;
mkos@408 550 bufcolumn = null;
mkos@408 551 }
mkos@408 552
mkos@408 553 /**
mkos@408 554 * Method to adjust line and column numbers for the start of a token.<BR>
mkos@408 555 */
mkos@408 556 public void adjustBeginLineColumn(int newLine, int newCol) {
mkos@408 557 int start = tokenBegin;
mkos@408 558 int len;
mkos@408 559
mkos@408 560 if (bufpos >= tokenBegin) {
mkos@408 561 len = bufpos - tokenBegin + inBuf + 1;
mkos@408 562 } else {
mkos@408 563 len = bufsize - tokenBegin + bufpos + 1 + inBuf;
mkos@408 564 }
mkos@408 565
mkos@408 566 int i = 0, j = 0, k = 0;
mkos@408 567 int nextColDiff, columnDiff = 0;
mkos@408 568
mkos@408 569 while (i < len
mkos@408 570 && bufline[j = start % bufsize] == bufline[k = ++start % bufsize]) {
mkos@408 571 bufline[j] = newLine;
mkos@408 572 nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j];
mkos@408 573 bufcolumn[j] = newCol + columnDiff;
mkos@408 574 columnDiff = nextColDiff;
mkos@408 575 i++;
mkos@408 576 }
mkos@408 577
mkos@408 578 if (i < len) {
mkos@408 579 bufline[j] = newLine++;
mkos@408 580 bufcolumn[j] = newCol + columnDiff;
mkos@408 581
mkos@408 582 while (i++ < len) {
mkos@408 583 if (bufline[j = start % bufsize] != bufline[++start % bufsize]) {
mkos@408 584 bufline[j] = newLine++;
mkos@408 585 } else {
mkos@408 586 bufline[j] = newLine;
mkos@408 587 }
mkos@408 588 }
mkos@408 589 }
mkos@408 590
mkos@408 591 line = bufline[j];
mkos@408 592 column = bufcolumn[j];
mkos@408 593 }
ohair@286 594 }

mercurial