original_string: protected function getAbsoluteUri($uri)
      {
          // already absolute?
          if (0 === strpos($uri, 'http://') || 0 === strpos($uri, 'https://')) {
              return $uri;
          }
  
          if (!$this->history->isEmpty()) {
              $currentUri = $this->history->current()->getUri();
          } else {
              $currentUri = sprintf('http%s://%s/',
                  isset($this->server['HTTPS']) ? 's' : '',
                  isset($this->server['HTTP_HOST']) ? $this->server['HTTP_HOST'] : 'localhost'
              );
          }
  
          // protocol relative URL
          if (0 === strpos($uri, '//')) {
              return parse_url($currentUri, PHP_URL_SCHEME).':'.$uri;
          }
  
          // anchor or query string parameters?
          if (!$uri || '#' == $uri[0] || '?' == $uri[0]) {
              return preg_replace('/[#?].*?$/', '', $currentUri).$uri;
          }
  
          if ('/' !== $uri[0]) {
              $path = parse_url($currentUri, PHP_URL_PATH);
  
              if ('/' !== substr($path, -1)) {
                  $path = substr($path, 0, strrpos($path, '/') + 1);
              }
  
              $uri = $path.$uri;
          }
  
          return preg_replace('#^(.*?//[^/]+)\/.*$#', '$1', $currentUri).$uri;
      }
code: protected function getAbsoluteUri($uri)
      {
          // already absolute?
          if (0 === strpos($uri, 'http://') || 0 === strpos($uri, 'https://')) {
              return $uri;
          }
  
          if (!$this->history->isEmpty()) {
              $currentUri = $this->history->current()->getUri();
          } else {
              $currentUri = sprintf('http%s://%s/',
                  isset($this->server['HTTPS']) ? 's' : '',
                  isset($this->server['HTTP_HOST']) ? $this->server['HTTP_HOST'] : 'localhost'
              );
          }
  
          // protocol relative URL
          if (0 === strpos($uri, '//')) {
              return parse_url($currentUri, PHP_URL_SCHEME).':'.$uri;
          }
  
          // anchor or query string parameters?
          if (!$uri || '#' == $uri[0] || '?' == $uri[0]) {
              return preg_replace('/[#?].*?$/', '', $currentUri).$uri;
          }
  
          if ('/' !== $uri[0]) {
              $path = parse_url($currentUri, PHP_URL_PATH);
  
              if ('/' !== substr($path, -1)) {
                  $path = substr($path, 0, strrpos($path, '/') + 1);
              }
  
              $uri = $path.$uri;
          }
  
          return preg_replace('#^(.*?//[^/]+)\/.*$#', '$1', $currentUri).$uri;
      }
code_tokens: protected function getAbsoluteUri ( $ uri ) { // already absolute? if ( 0 === strpos ( $ uri , 'http://' ) || 0 === strpos ( $ uri , 'https://' ) ) { return $ uri ; } if ( ! $ this -> history -> isEmpty ( ) ) { $ currentUri = $ this -> history -> current ( ) -> getUri ( ) ; } else { $ currentUri = sprintf ( 'http%s://%s/' , isset ( $ this -> server [ 'HTTPS' ] ) ? 's' : '' , isset ( $ this -> server [ 'HTTP_HOST' ] ) ? $ this -> server [ 'HTTP_HOST' ] : 'localhost' ) ; } // protocol relative URL if ( 0 === strpos ( $ uri , '//' ) ) { return parse_url ( $ currentUri , PHP_URL_SCHEME ) . ':' . $ uri ; } // anchor or query string parameters? if ( ! $ uri || '#' == $ uri [ 0 ] || '?' == $ uri [ 0 ] ) { return preg_replace ( '/[#?].*?$/' , '' , $ currentUri ) . $ uri ; } if ( '/' !== $ uri [ 0 ] ) { $ path = parse_url ( $ currentUri , PHP_URL_PATH ) ; if ( '/' !== substr ( $ path , - 1 ) ) { $ path = substr ( $ path , 0 , strrpos ( $ path , '/' ) + 1 ) ; } $ uri = $ path . $ uri ; } return preg_replace ( '#^(.*?//[^/]+)\/.*$#' , '$1' , $ currentUri ) . $ uri ; }
docstring: Takes a URI and converts it to absolute if it is not already absolute.
  
  @param string $uri A URI
  
  @return string An absolute URI
docstring_tokens: Takes a URI and converts it to absolute if it is not already absolute .