/**
  * A filter function for shortcode filters
  *
  * @param  string $name         The name of the shortcode filter to be
  *                              applied.
  * @param  string $content      The content to be filtered.
  * @param  mixed  $context      The Twig context
  * @param  mixed  $environment  The Twig environment
  *
  * @return string               The filtered content (here a hash); use
  *                              $this->normalize() to replace the hash
  *                              with the filtered content.
  */
 protected function filterShortcode($name, $content, $context = null, $environment = null)
 {
     $output = $content;
     $extra = [$name, $this];
     $filters = $this->twig->getShortcodeFilter($name);
     foreach ($filters as $filter) {
         $arguments = [$output];
         if ($filter->needsEnvironment()) {
             $arguments[] = $environment;
         }
         if ($filter->needsContext()) {
             $arguments[] = $context;
         }
         $arguments = array_merge($arguments, $filter->getArguments(), $extra);
         $output = call_user_func_array($filter->getCallable(), $arguments);
         if (!$output) {
             break;
         }
     }
     // Replace shortcode with a hash to be replaced later
     return $this->hash($output);
 }