예제 #1
0
 protected function initExtension(Twig_ExtensionInterface $extension)
 {
     // filters
     foreach ($extension->getFilters() as $name => $filter) {
         if ($name instanceof Twig_SimpleFilter) {
             $filter = $name;
             $name = $filter->getName();
         } elseif ($filter instanceof Twig_SimpleFilter) {
             $name = $filter->getName();
         }
         $this->filters[$name] = $filter;
     }
     // functions
     foreach ($extension->getFunctions() as $name => $function) {
         if ($name instanceof Twig_SimpleFunction) {
             $function = $name;
             $name = $function->getName();
         } elseif ($function instanceof Twig_SimpleFunction) {
             $name = $function->getName();
         }
         $this->functions[$name] = $function;
     }
     // tests
     foreach ($extension->getTests() as $name => $test) {
         if ($name instanceof Twig_SimpleTest) {
             $test = $name;
             $name = $test->getName();
         } elseif ($test instanceof Twig_SimpleTest) {
             $name = $test->getName();
         }
         $this->tests[$name] = $test;
     }
     // globals
     $this->globals = array_merge($this->globals, $extension->getGlobals());
     // token parsers
     foreach ($extension->getTokenParsers() as $parser) {
         if ($parser instanceof Twig_TokenParserInterface) {
             $this->parsers->addTokenParser($parser);
         } elseif ($parser instanceof Twig_TokenParserBrokerInterface) {
             $this->parsers->addTokenParserBroker($parser);
         } else {
             throw new LogicException('getTokenParsers() must return an array of Twig_TokenParserInterface or Twig_TokenParserBrokerInterface instances');
         }
     }
     // node visitors
     foreach ($extension->getNodeVisitors() as $visitor) {
         $this->visitors[] = $visitor;
     }
     // operators
     if ($operators = $extension->getOperators()) {
         if (2 !== count($operators)) {
             throw new InvalidArgumentException(sprintf('"%s::getOperators()" does not return a valid operators array.', get_class($extension)));
         }
         $this->unaryOperators = array_merge($this->unaryOperators, $operators[0]);
         $this->binaryOperators = array_merge($this->binaryOperators, $operators[1]);
     }
 }