original_string: public function icon($url, array $options = []) {
  		// The shadow image is larger in the horizontal dimension
  		// while the position and offset are the same as for the main image.
  		if (empty($options['size'])) {
  			// We will deprecate this in the future maybe as this is super slow!
  			//trigger_error('Please specify size manually [width => ..., height => ...] for performance reasons.', E_USER_DEPRECATED);
  			$path = $url;
  			if (!preg_match('#^((https?://)|//)#i', $path)) {
  				// This should also be avoided but is still way faster than the URL lookup.
  				$path = WWW_ROOT . ltrim($url, '/');
  			}
  
  			$data = getimagesize($path);
  			if ($data) {
  				$options['size']['width'] = $data[0];
  				$options['size']['height'] = $data[1];
  			} else {
  				$options['size']['width'] = $options['size']['height'] = 0;
  			}
  		}
  		if (empty($options['anchor'])) {
  			$options['anchor']['width'] = (int)($options['size']['width'] / 2);
  			$options['anchor']['height'] = $options['size']['height'];
  		}
  		if (empty($options['origin'])) {
  			$options['origin']['width'] = $options['origin']['height'] = 0;
  		}
  		if (isset($options['shadow'])) {
  			$options['anchor'] = $options['shadow'];
  		}
  
  		$icon = 'new google.maps.MarkerImage("' . $url . '",
  	new google.maps.Size(' . $options['size']['width'] . ', ' . $options['size']['height'] . '),
  	new google.maps.Point(' . $options['origin']['width'] . ', ' . $options['origin']['height'] . '),
  	new google.maps.Point(' . $options['anchor']['width'] . ', ' . $options['anchor']['height'] . ')
  )';
  		$this->icons[static::$iconCount] = $icon;
  		$this->_iconRemember[static::$iconCount] = ['url' => $url, 'options' => $options, 'id' => static::$iconCount];
  		return static::$iconCount++;
  	}
code: public function icon($url, array $options = []) {
  		// The shadow image is larger in the horizontal dimension
  		// while the position and offset are the same as for the main image.
  		if (empty($options['size'])) {
  			// We will deprecate this in the future maybe as this is super slow!
  			//trigger_error('Please specify size manually [width => ..., height => ...] for performance reasons.', E_USER_DEPRECATED);
  			$path = $url;
  			if (!preg_match('#^((https?://)|//)#i', $path)) {
  				// This should also be avoided but is still way faster than the URL lookup.
  				$path = WWW_ROOT . ltrim($url, '/');
  			}
  
  			$data = getimagesize($path);
  			if ($data) {
  				$options['size']['width'] = $data[0];
  				$options['size']['height'] = $data[1];
  			} else {
  				$options['size']['width'] = $options['size']['height'] = 0;
  			}
  		}
  		if (empty($options['anchor'])) {
  			$options['anchor']['width'] = (int)($options['size']['width'] / 2);
  			$options['anchor']['height'] = $options['size']['height'];
  		}
  		if (empty($options['origin'])) {
  			$options['origin']['width'] = $options['origin']['height'] = 0;
  		}
  		if (isset($options['shadow'])) {
  			$options['anchor'] = $options['shadow'];
  		}
  
  		$icon = 'new google.maps.MarkerImage("' . $url . '",
  	new google.maps.Size(' . $options['size']['width'] . ', ' . $options['size']['height'] . '),
  	new google.maps.Point(' . $options['origin']['width'] . ', ' . $options['origin']['height'] . '),
  	new google.maps.Point(' . $options['anchor']['width'] . ', ' . $options['anchor']['height'] . ')
  )';
  		$this->icons[static::$iconCount] = $icon;
  		$this->_iconRemember[static::$iconCount] = ['url' => $url, 'options' => $options, 'id' => static::$iconCount];
  		return static::$iconCount++;
  	}
code_tokens: public function icon ( $ url , array $ options = [ ] ) { // The shadow image is larger in the horizontal dimension // while the position and offset are the same as for the main image. if ( empty ( $ options [ 'size' ] ) ) { // We will deprecate this in the future maybe as this is super slow! //trigger_error('Please specify size manually [width => ..., height => ...] for performance reasons.', E_USER_DEPRECATED); $ path = $ url ; if ( ! preg_match ( '#^((https?://)|//)#i' , $ path ) ) { // This should also be avoided but is still way faster than the URL lookup. $ path = WWW_ROOT . ltrim ( $ url , '/' ) ; } $ data = getimagesize ( $ path ) ; if ( $ data ) { $ options [ 'size' ] [ 'width' ] = $ data [ 0 ] ; $ options [ 'size' ] [ 'height' ] = $ data [ 1 ] ; } else { $ options [ 'size' ] [ 'width' ] = $ options [ 'size' ] [ 'height' ] = 0 ; } } if ( empty ( $ options [ 'anchor' ] ) ) { $ options [ 'anchor' ] [ 'width' ] = ( int ) ( $ options [ 'size' ] [ 'width' ] / 2 ) ; $ options [ 'anchor' ] [ 'height' ] = $ options [ 'size' ] [ 'height' ] ; } if ( empty ( $ options [ 'origin' ] ) ) { $ options [ 'origin' ] [ 'width' ] = $ options [ 'origin' ] [ 'height' ] = 0 ; } if ( isset ( $ options [ 'shadow' ] ) ) { $ options [ 'anchor' ] = $ options [ 'shadow' ] ; } $ icon = 'new google.maps.MarkerImage("' . $ url . '",
  	new google.maps.Size(' . $ options [ 'size' ] [ 'width' ] . ', ' . $ options [ 'size' ] [ 'height' ] . '),
  	new google.maps.Point(' . $ options [ 'origin' ] [ 'width' ] . ', ' . $ options [ 'origin' ] [ 'height' ] . '),
  	new google.maps.Point(' . $ options [ 'anchor' ] [ 'width' ] . ', ' . $ options [ 'anchor' ] [ 'height' ] . ')
  )' ; $ this -> icons [ static :: $ iconCount ] = $ icon ; $ this -> _iconRemember [ static :: $ iconCount ] = [ 'url' => $ url , 'options' => $ options , 'id' => static :: $ iconCount ] ; return static :: $ iconCount ++ ; }
docstring: Generate icon object
  
  @param string $url (required)
  @param array $options (optional):
  - size: array(width=>x, height=>y)
  - origin: array(width=>x, height=>y)
  - anchor: array(width=>x, height=>y)
  @return int Icon count
docstring_tokens: Generate icon object