text: <?php
  
  /*
   * This file is part of Twig.
   *
   * (c) Fabien Potencier
   *
   * For the full copyright and license information, please view the LICENSE
   * file that was distributed with this source code.
   */
  
  namespace Twig;
  
  use Twig\Node\Node;
  
  /**
   * Represents a template filter.
   *
   * @final
   *
   * @author Fabien Potencier <fabien@symfony.com>
   */
  class TwigFilter
  {
      protected $name;
      protected $callable;
      protected $options;
      protected $arguments = [];
  
      public function __construct($name, $callable, array $options = [])
      {
          $this->name = $name;
          $this->callable = $callable;
          $this->options = array_merge([
              'needs_environment' => false,
              'needs_context' => false,
              'is_variadic' => false,
              'is_safe' => null,
              'is_safe_callback' => null,
              'pre_escape' => null,
              'preserves_safety' => null,
              'node_class' => '\Twig\Node\Expression\FilterExpression',
              'deprecated' => false,
              'alternative' => null,
          ], $options);
      }
  
      public function getName()
      {
          return $this->name;
      }
  
      public function getCallable()
      {
          return $this->callable;
      }
  
      public function getNodeClass()
      {
          return $this->options['node_class'];
      }
  
      public function setArguments($arguments)
      {
          $this->arguments = $arguments;
      }
  
      public function getArguments()
      {
          return $this->arguments;
      }
  
      public function needsEnvironment()
      {
          return $this->options['needs_environment'];
      }
  
      public function needsContext()
      {
          return $this->options['needs_context'];
      }
  
      public function getSafe(Node $filterArgs)
      {
          if (null !== $this->options['is_safe']) {
              return $this->options['is_safe'];
          }
  
          if (null !== $this->options['is_safe_callback']) {
              return \call_user_func($this->options['is_safe_callback'], $filterArgs);
          }
      }
  
      public function getPreservesSafety()
      {
          return $this->options['preserves_safety'];
      }
  
      public function getPreEscape()
      {
          return $this->options['pre_escape'];
      }
  
      public function isVariadic()
      {
          return $this->options['is_variadic'];
      }
  
      public function isDeprecated()
      {
          return (bool) $this->options['deprecated'];
      }
  
      public function getDeprecatedVersion()
      {
          return $this->options['deprecated'];
      }
  
      public function getAlternative()
      {
          return $this->options['alternative'];
      }
  }
  
  class_alias('Twig\TwigFilter', 'Twig_SimpleFilter');
  
  // Ensure that the aliased name is loaded to keep BC for classes implementing the typehint with the old aliased name.
  class_exists('Twig\Node\Node');
  