@Override
 public char nextChar() {
   if (start >= length) {
     return reader.nextChar();
   } else {
     return lookahead[start++];
   }
 }
  public void lookahead(int numberOfCharacters) {
    numberOfCharacters += length - start;

    if (lookahead.length < numberOfCharacters) {
      lookahead = Arrays.copyOf(lookahead, numberOfCharacters);
    }

    if (start >= length) {
      start = 0;
      length = 0;
    }

    try {
      numberOfCharacters -= length;
      while (numberOfCharacters-- > 0) {
        lookahead[length] = reader.nextChar();
        length++;
      }
    } catch (EOFException ex) {
      // ignore.
    }
  }
 @Override
 public void enableNormalizeLineEndings(boolean escaping) {
   reader.enableNormalizeLineEndings(escaping);
 }
 @Override
 public void skipLines(int lineCount) {
   reader.skipLines(lineCount);
 }
 @Override
 public long lineCount() {
   return reader.lineCount();
 }
 @Override
 public long charCount() {
   return reader.charCount();
 }