original_string: public static function processImageExcerpt(array $excerpt, PageInterface $page)
      {
          $url = htmlspecialchars_decode(urldecode($excerpt['element']['attributes']['src']));
          $url_parts = static::parseUrl($url);
  
          $media = null;
          $filename = null;
  
          if (!empty($url_parts['stream'])) {
              $filename = $url_parts['scheme'] . '://' . ($url_parts['path'] ?? '');
  
              $media = $page->getMedia();
  
          } else {
              $grav = Grav::instance();
  
              // File is also local if scheme is http(s) and host matches.
              $local_file = isset($url_parts['path'])
                  && (empty($url_parts['scheme']) || in_array($url_parts['scheme'], ['http', 'https'], true))
                  && (empty($url_parts['host']) || $url_parts['host'] === $grav['uri']->host());
  
              if ($local_file) {
                  $filename = basename($url_parts['path']);
                  $folder = dirname($url_parts['path']);
  
                  // Get the local path to page media if possible.
                  if ($folder === $page->url(false, false, false)) {
                      // Get the media objects for this page.
                      $media = $page->getMedia();
                  } else {
                      // see if this is an external page to this one
                      $base_url = rtrim($grav['base_url_relative'] . $grav['pages']->base(), '/');
                      $page_route = '/' . ltrim(str_replace($base_url, '', $folder), '/');
  
                      /** @var PageInterface $ext_page */
                      $ext_page = $grav['pages']->dispatch($page_route, true);
                      if ($ext_page) {
                          $media = $ext_page->getMedia();
                      } else {
                          $grav->fireEvent('onMediaLocate', new Event(['route' => $page_route, 'media' => &$media]));
                      }
                  }
              }
          }
  
          // If there is a media file that matches the path referenced..
          if ($media && $filename && isset($media[$filename])) {
              // Get the medium object.
              /** @var Medium $medium */
              $medium = $media[$filename];
  
              // Process operations
              $medium = static::processMediaActions($medium, $url_parts);
              $element_excerpt = $excerpt['element']['attributes'];
  
              $alt = $element_excerpt['alt'] ?? '';
              $title = $element_excerpt['title'] ?? '';
              $class = $element_excerpt['class'] ?? '';
              $id = $element_excerpt['id'] ?? '';
  
              $excerpt['element'] = $medium->parsedownElement($title, $alt, $class, $id, true);
  
          } else {
              // Not a current page media file, see if it needs converting to relative.
              $excerpt['element']['attributes']['src'] = Uri::buildUrl($url_parts);
          }
  
          return $excerpt;
      }
code: public static function processImageExcerpt(array $excerpt, PageInterface $page)
      {
          $url = htmlspecialchars_decode(urldecode($excerpt['element']['attributes']['src']));
          $url_parts = static::parseUrl($url);
  
          $media = null;
          $filename = null;
  
          if (!empty($url_parts['stream'])) {
              $filename = $url_parts['scheme'] . '://' . ($url_parts['path'] ?? '');
  
              $media = $page->getMedia();
  
          } else {
              $grav = Grav::instance();
  
              // File is also local if scheme is http(s) and host matches.
              $local_file = isset($url_parts['path'])
                  && (empty($url_parts['scheme']) || in_array($url_parts['scheme'], ['http', 'https'], true))
                  && (empty($url_parts['host']) || $url_parts['host'] === $grav['uri']->host());
  
              if ($local_file) {
                  $filename = basename($url_parts['path']);
                  $folder = dirname($url_parts['path']);
  
                  // Get the local path to page media if possible.
                  if ($folder === $page->url(false, false, false)) {
                      // Get the media objects for this page.
                      $media = $page->getMedia();
                  } else {
                      // see if this is an external page to this one
                      $base_url = rtrim($grav['base_url_relative'] . $grav['pages']->base(), '/');
                      $page_route = '/' . ltrim(str_replace($base_url, '', $folder), '/');
  
                      /** @var PageInterface $ext_page */
                      $ext_page = $grav['pages']->dispatch($page_route, true);
                      if ($ext_page) {
                          $media = $ext_page->getMedia();
                      } else {
                          $grav->fireEvent('onMediaLocate', new Event(['route' => $page_route, 'media' => &$media]));
                      }
                  }
              }
          }
  
          // If there is a media file that matches the path referenced..
          if ($media && $filename && isset($media[$filename])) {
              // Get the medium object.
              /** @var Medium $medium */
              $medium = $media[$filename];
  
              // Process operations
              $medium = static::processMediaActions($medium, $url_parts);
              $element_excerpt = $excerpt['element']['attributes'];
  
              $alt = $element_excerpt['alt'] ?? '';
              $title = $element_excerpt['title'] ?? '';
              $class = $element_excerpt['class'] ?? '';
              $id = $element_excerpt['id'] ?? '';
  
              $excerpt['element'] = $medium->parsedownElement($title, $alt, $class, $id, true);
  
          } else {
              // Not a current page media file, see if it needs converting to relative.
              $excerpt['element']['attributes']['src'] = Uri::buildUrl($url_parts);
          }
  
          return $excerpt;
      }
code_tokens: public static function processImageExcerpt ( array $ excerpt , PageInterface $ page ) { $ url = htmlspecialchars_decode ( urldecode ( $ excerpt [ 'element' ] [ 'attributes' ] [ 'src' ] ) ) ; $ url_parts = static :: parseUrl ( $ url ) ; $ media = null ; $ filename = null ; if ( ! empty ( $ url_parts [ 'stream' ] ) ) { $ filename = $ url_parts [ 'scheme' ] . '://' . ( $ url_parts [ 'path' ] ?? '' ) ; $ media = $ page -> getMedia ( ) ; } else { $ grav = Grav :: instance ( ) ; // File is also local if scheme is http(s) and host matches. $ local_file = isset ( $ url_parts [ 'path' ] ) && ( empty ( $ url_parts [ 'scheme' ] ) || in_array ( $ url_parts [ 'scheme' ] , [ 'http' , 'https' ] , true ) ) && ( empty ( $ url_parts [ 'host' ] ) || $ url_parts [ 'host' ] === $ grav [ 'uri' ] -> host ( ) ) ; if ( $ local_file ) { $ filename = basename ( $ url_parts [ 'path' ] ) ; $ folder = dirname ( $ url_parts [ 'path' ] ) ; // Get the local path to page media if possible. if ( $ folder === $ page -> url ( false , false , false ) ) { // Get the media objects for this page. $ media = $ page -> getMedia ( ) ; } else { // see if this is an external page to this one $ base_url = rtrim ( $ grav [ 'base_url_relative' ] . $ grav [ 'pages' ] -> base ( ) , '/' ) ; $ page_route = '/' . ltrim ( str_replace ( $ base_url , '' , $ folder ) , '/' ) ; /** @var PageInterface $ext_page */ $ ext_page = $ grav [ 'pages' ] -> dispatch ( $ page_route , true ) ; if ( $ ext_page ) { $ media = $ ext_page -> getMedia ( ) ; } else { $ grav -> fireEvent ( 'onMediaLocate' , new Event ( [ 'route' => $ page_route , 'media' => & $ media ] ) ) ; } } } } // If there is a media file that matches the path referenced.. if ( $ media && $ filename && isset ( $ media [ $ filename ] ) ) { // Get the medium object. /** @var Medium $medium */ $ medium = $ media [ $ filename ] ; // Process operations $ medium = static :: processMediaActions ( $ medium , $ url_parts ) ; $ element_excerpt = $ excerpt [ 'element' ] [ 'attributes' ] ; $ alt = $ element_excerpt [ 'alt' ] ?? '' ; $ title = $ element_excerpt [ 'title' ] ?? '' ; $ class = $ element_excerpt [ 'class' ] ?? '' ; $ id = $ element_excerpt [ 'id' ] ?? '' ; $ excerpt [ 'element' ] = $ medium -> parsedownElement ( $ title , $ alt , $ class , $ id , true ) ; } else { // Not a current page media file, see if it needs converting to relative. $ excerpt [ 'element' ] [ 'attributes' ] [ 'src' ] = Uri :: buildUrl ( $ url_parts ) ; } return $ excerpt ; }
docstring: Process an image excerpt
  
  @param array $excerpt
  @param PageInterface $page
  @return array
docstring_tokens: Process an image excerpt