docs: public String scanName() throws IOException {
  	
  	// load more characters, if needed
  	if (fCurrentEntity.position == fCurrentEntity.count) {
  	    load(0, true);
  	}
  	
  	// scan name
  	int offset = fCurrentEntity.position;
  	if (XMLChar.isNameStart(fCurrentEntity.ch[offset])) {
  	    if (++fCurrentEntity.position == fCurrentEntity.count) {
  		fCurrentEntity.ch[0] = fCurrentEntity.ch[offset];
  		offset = 0;
  		if (load(1, false)) {
  		    fCurrentEntity.columnNumber++;
  		    String symbol = fSymbolTable.addSymbol(fCurrentEntity.ch,
  							   0, 1);
  		    return symbol;
  		}
  	    }
  	    while (XMLChar.isName(fCurrentEntity.ch[fCurrentEntity.position])) {
  		if (++fCurrentEntity.position == fCurrentEntity.count) {
  		    int length = fCurrentEntity.position - offset;
  		    if (length == fBufferSize) {
  			// bad luck we have to resize our buffer
  			char[] tmp = new char[fBufferSize * 2];
  			System.arraycopy(fCurrentEntity.ch, offset,
  					 tmp, 0, length);
  			fCurrentEntity.ch = tmp;
  			fBufferSize *= 2;
  		    } else {
  			System.arraycopy(fCurrentEntity.ch, offset,
  					 fCurrentEntity.ch, 0, length);
  		    }
  		    offset = 0;
  		    if (load(length, false)) {
  			break;
  		    }
  		}
  	    }
  	}
  	int length = fCurrentEntity.position - offset;
  	fCurrentEntity.columnNumber += length;
  
  	// return name
  	String symbol = null;
  	if (length > 0) {
  	    symbol = fSymbolTable.addSymbol(fCurrentEntity.ch, offset, length);
  	}
  	return symbol;
  	
      }