001/* Generated By:JavaCC: Do not edit this line. SimpleCharStream.java Version 5.0 */ 002/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */ 003package org.apache.commons.configuration2.plist; 004 005/** 006 * An implementation of interface CharStream, where the stream is assumed to 007 * contain only ASCII characters (without unicode processing). 008 */ 009 010public class SimpleCharStream 011{ 012/** Whether parser is static. */ 013 public static final boolean staticFlag = false; 014 int bufsize; 015 int available; 016 int tokenBegin; 017/** Position in buffer. */ 018 public int bufpos = -1; 019 protected int bufline[]; 020 protected int bufcolumn[]; 021 022 protected int column = 0; 023 protected int line = 1; 024 025 protected boolean prevCharIsCR = false; 026 protected boolean prevCharIsLF = false; 027 028 protected java.io.Reader inputStream; 029 030 protected char[] buffer; 031 protected int maxNextCharInd = 0; 032 protected int inBuf = 0; 033 protected int tabSize = 8; 034 035 protected void setTabSize(int i) { tabSize = i; } 036 protected int getTabSize(int i) { return tabSize; } 037 038 039 protected void ExpandBuff(boolean wrapAround) 040 { 041 char[] newbuffer = new char[bufsize + 2048]; 042 int newbufline[] = new int[bufsize + 2048]; 043 int newbufcolumn[] = new int[bufsize + 2048]; 044 045 try 046 { 047 if (wrapAround) 048 { 049 System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin); 050 System.arraycopy(buffer, 0, newbuffer, bufsize - tokenBegin, bufpos); 051 buffer = newbuffer; 052 053 System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin); 054 System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos); 055 bufline = newbufline; 056 057 System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin); 058 System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos); 059 bufcolumn = newbufcolumn; 060 061 maxNextCharInd = (bufpos += (bufsize - tokenBegin)); 062 } 063 else 064 { 065 System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin); 066 buffer = newbuffer; 067 068 System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin); 069 bufline = newbufline; 070 071 System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin); 072 bufcolumn = newbufcolumn; 073 074 maxNextCharInd = (bufpos -= tokenBegin); 075 } 076 } 077 catch (Throwable t) 078 { 079 throw new Error(t.getMessage()); 080 } 081 082 083 bufsize += 2048; 084 available = bufsize; 085 tokenBegin = 0; 086 } 087 088 protected void FillBuff() throws java.io.IOException 089 { 090 if (maxNextCharInd == available) 091 { 092 if (available == bufsize) 093 { 094 if (tokenBegin > 2048) 095 { 096 bufpos = maxNextCharInd = 0; 097 available = tokenBegin; 098 } 099 else if (tokenBegin < 0) 100 bufpos = maxNextCharInd = 0; 101 else 102 ExpandBuff(false); 103 } 104 else if (available > tokenBegin) 105 available = bufsize; 106 else if ((tokenBegin - available) < 2048) 107 ExpandBuff(true); 108 else 109 available = tokenBegin; 110 } 111 112 int i; 113 try { 114 if ((i = inputStream.read(buffer, maxNextCharInd, available - maxNextCharInd)) == -1) 115 { 116 inputStream.close(); 117 throw new java.io.IOException(); 118 } 119 else 120 maxNextCharInd += i; 121 return; 122 } 123 catch(java.io.IOException e) { 124 --bufpos; 125 backup(0); 126 if (tokenBegin == -1) 127 tokenBegin = bufpos; 128 throw e; 129 } 130 } 131 132/** Start. */ 133 public char BeginToken() throws java.io.IOException 134 { 135 tokenBegin = -1; 136 char c = readChar(); 137 tokenBegin = bufpos; 138 139 return c; 140 } 141 142 protected void UpdateLineColumn(char c) 143 { 144 column++; 145 146 if (prevCharIsLF) 147 { 148 prevCharIsLF = false; 149 line += (column = 1); 150 } 151 else if (prevCharIsCR) 152 { 153 prevCharIsCR = false; 154 if (c == '\n') 155 { 156 prevCharIsLF = true; 157 } 158 else 159 line += (column = 1); 160 } 161 162 switch (c) 163 { 164 case '\r' : 165 prevCharIsCR = true; 166 break; 167 case '\n' : 168 prevCharIsLF = true; 169 break; 170 case '\t' : 171 column--; 172 column += (tabSize - (column % tabSize)); 173 break; 174 default : 175 break; 176 } 177 178 bufline[bufpos] = line; 179 bufcolumn[bufpos] = column; 180 } 181 182/** Read a character. */ 183 public char readChar() throws java.io.IOException 184 { 185 if (inBuf > 0) 186 { 187 --inBuf; 188 189 if (++bufpos == bufsize) 190 bufpos = 0; 191 192 return buffer[bufpos]; 193 } 194 195 if (++bufpos >= maxNextCharInd) 196 FillBuff(); 197 198 char c = buffer[bufpos]; 199 200 UpdateLineColumn(c); 201 return c; 202 } 203 204 @Deprecated 205 /** 206 * @deprecated 207 * @see #getEndColumn 208 */ 209 210 public int getColumn() { 211 return bufcolumn[bufpos]; 212 } 213 214 @Deprecated 215 /** 216 * @deprecated 217 * @see #getEndLine 218 */ 219 220 public int getLine() { 221 return bufline[bufpos]; 222 } 223 224 /** Get token end column number. */ 225 public int getEndColumn() { 226 return bufcolumn[bufpos]; 227 } 228 229 /** Get token end line number. */ 230 public int getEndLine() { 231 return bufline[bufpos]; 232 } 233 234 /** Get token beginning column number. */ 235 public int getBeginColumn() { 236 return bufcolumn[tokenBegin]; 237 } 238 239 /** Get token beginning line number. */ 240 public int getBeginLine() { 241 return bufline[tokenBegin]; 242 } 243 244/** Backup a number of characters. */ 245 public void backup(int amount) { 246 247 inBuf += amount; 248 if ((bufpos -= amount) < 0) 249 bufpos += bufsize; 250 } 251 252 /** Constructor. */ 253 public SimpleCharStream(java.io.Reader dstream, int startline, 254 int startcolumn, int buffersize) 255 { 256 inputStream = dstream; 257 line = startline; 258 column = startcolumn - 1; 259 260 available = bufsize = buffersize; 261 buffer = new char[buffersize]; 262 bufline = new int[buffersize]; 263 bufcolumn = new int[buffersize]; 264 } 265 266 /** Constructor. */ 267 public SimpleCharStream(java.io.Reader dstream, int startline, 268 int startcolumn) 269 { 270 this(dstream, startline, startcolumn, 4096); 271 } 272 273 /** Constructor. */ 274 public SimpleCharStream(java.io.Reader dstream) 275 { 276 this(dstream, 1, 1, 4096); 277 } 278 279 /** Reinitialise. */ 280 public void ReInit(java.io.Reader dstream, int startline, 281 int startcolumn, int buffersize) 282 { 283 inputStream = dstream; 284 line = startline; 285 column = startcolumn - 1; 286 287 if (buffer == null || buffersize != buffer.length) 288 { 289 available = bufsize = buffersize; 290 buffer = new char[buffersize]; 291 bufline = new int[buffersize]; 292 bufcolumn = new int[buffersize]; 293 } 294 prevCharIsLF = prevCharIsCR = false; 295 tokenBegin = inBuf = maxNextCharInd = 0; 296 bufpos = -1; 297 } 298 299 /** Reinitialise. */ 300 public void ReInit(java.io.Reader dstream, int startline, 301 int startcolumn) 302 { 303 ReInit(dstream, startline, startcolumn, 4096); 304 } 305 306 /** Reinitialise. */ 307 public void ReInit(java.io.Reader dstream) 308 { 309 ReInit(dstream, 1, 1, 4096); 310 } 311 /** Constructor. */ 312 public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline, 313 int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException 314 { 315 this(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize); 316 } 317 318 /** Constructor. */ 319 public SimpleCharStream(java.io.InputStream dstream, int startline, 320 int startcolumn, int buffersize) 321 { 322 this(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize); 323 } 324 325 /** Constructor. */ 326 public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline, 327 int startcolumn) throws java.io.UnsupportedEncodingException 328 { 329 this(dstream, encoding, startline, startcolumn, 4096); 330 } 331 332 /** Constructor. */ 333 public SimpleCharStream(java.io.InputStream dstream, int startline, 334 int startcolumn) 335 { 336 this(dstream, startline, startcolumn, 4096); 337 } 338 339 /** Constructor. */ 340 public SimpleCharStream(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException 341 { 342 this(dstream, encoding, 1, 1, 4096); 343 } 344 345 /** Constructor. */ 346 public SimpleCharStream(java.io.InputStream dstream) 347 { 348 this(dstream, 1, 1, 4096); 349 } 350 351 /** Reinitialise. */ 352 public void ReInit(java.io.InputStream dstream, String encoding, int startline, 353 int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException 354 { 355 ReInit(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize); 356 } 357 358 /** Reinitialise. */ 359 public void ReInit(java.io.InputStream dstream, int startline, 360 int startcolumn, int buffersize) 361 { 362 ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize); 363 } 364 365 /** Reinitialise. */ 366 public void ReInit(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException 367 { 368 ReInit(dstream, encoding, 1, 1, 4096); 369 } 370 371 /** Reinitialise. */ 372 public void ReInit(java.io.InputStream dstream) 373 { 374 ReInit(dstream, 1, 1, 4096); 375 } 376 /** Reinitialise. */ 377 public void ReInit(java.io.InputStream dstream, String encoding, int startline, 378 int startcolumn) throws java.io.UnsupportedEncodingException 379 { 380 ReInit(dstream, encoding, startline, startcolumn, 4096); 381 } 382 /** Reinitialise. */ 383 public void ReInit(java.io.InputStream dstream, int startline, 384 int startcolumn) 385 { 386 ReInit(dstream, startline, startcolumn, 4096); 387 } 388 /** Get token literal value. */ 389 public String GetImage() 390 { 391 if (bufpos >= tokenBegin) 392 return new String(buffer, tokenBegin, bufpos - tokenBegin + 1); 393 else 394 return new String(buffer, tokenBegin, bufsize - tokenBegin) + 395 new String(buffer, 0, bufpos + 1); 396 } 397 398 /** Get the suffix. */ 399 public char[] GetSuffix(int len) 400 { 401 char[] ret = new char[len]; 402 403 if ((bufpos + 1) >= len) 404 System.arraycopy(buffer, bufpos - len + 1, ret, 0, len); 405 else 406 { 407 System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0, 408 len - bufpos - 1); 409 System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1); 410 } 411 412 return ret; 413 } 414 415 /** Reset buffer when finished. */ 416 public void Done() 417 { 418 buffer = null; 419 bufline = null; 420 bufcolumn = null; 421 } 422 423 /** 424 * Method to adjust line and column numbers for the start of a token. 425 */ 426 public void adjustBeginLineColumn(int newLine, int newCol) 427 { 428 int start = tokenBegin; 429 int len; 430 431 if (bufpos >= tokenBegin) 432 { 433 len = bufpos - tokenBegin + inBuf + 1; 434 } 435 else 436 { 437 len = bufsize - tokenBegin + bufpos + 1 + inBuf; 438 } 439 440 int i = 0, j = 0, k = 0; 441 int nextColDiff = 0, columnDiff = 0; 442 443 while (i < len && bufline[j = start % bufsize] == bufline[k = ++start % bufsize]) 444 { 445 bufline[j] = newLine; 446 nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j]; 447 bufcolumn[j] = newCol + columnDiff; 448 columnDiff = nextColDiff; 449 i++; 450 } 451 452 if (i < len) 453 { 454 bufline[j] = newLine++; 455 bufcolumn[j] = newCol + columnDiff; 456 457 while (i++ < len) 458 { 459 if (bufline[j = start % bufsize] != bufline[++start % bufsize]) 460 bufline[j] = newLine++; 461 else 462 bufline[j] = newLine; 463 } 464 } 465 466 line = bufline[j]; 467 column = bufcolumn[j]; 468 } 469 470} 471/* JavaCC - OriginalChecksum=4957ec397195460f62908ce38a9ec1e1 (do not edit this line) */