docs: public boolean skipSpaces() throws IOException {
  
  	// load more characters, if needed
  	if (fCurrentEntity.position == fCurrentEntity.count) {
  	    load(0, true);
  	}
  
  	// skip spaces
  	int c = fCurrentEntity.ch[fCurrentEntity.position];
  	if (XMLChar.isSpace(c)) {
  	    boolean external = fCurrentEntity.isExternal();
  	    do {
  		boolean entityChanged = false;
  		// handle newlines
  		if (c == '\n' || (external && c == '\r')) {
  		    fCurrentEntity.lineNumber++;
  		    fCurrentEntity.columnNumber = 1;
  		    if (fCurrentEntity.position == fCurrentEntity.count - 1) {
  			fCurrentEntity.ch[0] = (char)c;
  			entityChanged = load(1, true);
  			if (!entityChanged)
                                  // the load change the position to be 1,
                                  // need to restore it when entity not changed
  			    fCurrentEntity.position = 0;
  		    }
  		    if (c == '\r' && external) {
  			// REVISIT: Does this need to be updated to fix the
  			//          #x0D ^#x0A newline normalization problem? -Ac
  			if (fCurrentEntity.ch[++fCurrentEntity.position] != '\n') {
  			    fCurrentEntity.position--;
  			}
  		    }
  		    /*** NEWLINE NORMALIZATION ***
  			 else {
  			 if (fCurrentEntity.ch[fCurrentEntity.position + 1] == '\r'
  			 && external) {
  			 fCurrentEntity.position++;
  			 }
  			 }
  			 /***/
  		}
  		else {
  		    fCurrentEntity.columnNumber++;
  		}
  		// load more characters, if needed
  		if (!entityChanged)
  		    fCurrentEntity.position++;
  		if (fCurrentEntity.position == fCurrentEntity.count) {
  		    load(0, true);
  		}
  	    } while (XMLChar.isSpace(c = fCurrentEntity.ch[fCurrentEntity.position]));
  	    return true;
  	}
  
  	// no spaces were found
  	return false;
  
      }