private int processColon(int length){
  if (_hasScheme) {
    if (!readUserPass(length) && _buffer.length() > 0) {
      _reader.goBack();
      _buffer.delete(_buffer.length() - 1,_buffer.length());
      int backtrackOnFail=_reader.getPosition() - _buffer.length() + length;
      if (!readDomainName(_buffer.substring(length))) {
        _reader.seek(backtrackOnFail);
        readEnd(ReadEndState.InvalidUrl);
      }
      length=0;
    }
  }
 else   if (readScheme() && _buffer.length() > 0) {
    _hasScheme=true;
    length=_buffer.length();
  }
 else   if (_buffer.length() > 0 && _options.hasFlag(UrlDetectorOptions.ALLOW_SINGLE_LEVEL_DOMAIN) && _reader.canReadChars(1)) {
    _reader.goBack();
    _buffer.delete(_buffer.length() - 1,_buffer.length());
    readDomainName(_buffer.toString());
  }
 else {
    readEnd(ReadEndState.InvalidUrl);
    length=0;
  }
  return length;
}

private int processColon ( int length ) { if ( _hasScheme ) { if ( ! readUserPass ( length ) && _buffer . length ( ) > 0 ) { _reader . goBack ( ) ; _buffer . delete ( _buffer . length ( ) - 1 , _buffer . length ( ) ) ; int backtrackOnFail = _reader . getPosition ( ) - _buffer . length ( ) + length ; if ( ! readDomainName ( _buffer . substring ( length ) ) ) { _reader . seek ( backtrackOnFail ) ; readEnd ( ReadEndState . InvalidUrl ) ; } length = 0 ; } } else if ( readScheme ( ) && _buffer . length ( ) > 0 ) { _hasScheme = true ; length = _buffer . length ( ) ; } else if ( _buffer . length ( ) > 0 && _options . hasFlag ( UrlDetectorOptions . ALLOW_SINGLE_LEVEL_DOMAIN ) && _reader . canReadChars ( 1 ) ) { _reader . goBack ( ) ; _buffer . delete ( _buffer . length ( ) - 1 , _buffer . length ( ) ) ; readDomainName ( _buffer . toString ( ) ) ; } else { readEnd ( ReadEndState . InvalidUrl ) ; length = 0 ; } return length ; }
we found a " : " and is now trying to read either scheme , username / password
