Esempio n. 1
0
 /**
  * Compiles the node to PHP.
  *
  * @param IfwPsn_Vendor_Twig_Compiler A IfwPsn_Vendor_Twig_Compiler instance
  */
 public function compile(IfwPsn_Vendor_Twig_Compiler $compiler)
 {
     $compiler->addDebugInfo($this);
     for ($i = 0, $count = count($this->getNode('tests')); $i < $count; $i += 2) {
         if ($i > 0) {
             $compiler->outdent()->write("} elseif (");
         } else {
             $compiler->write('if (');
         }
         $compiler->subcompile($this->getNode('tests')->getNode($i))->raw(") {\n")->indent()->subcompile($this->getNode('tests')->getNode($i + 1));
     }
     if ($this->hasNode('else') && null !== $this->getNode('else')) {
         $compiler->outdent()->write("} else {\n")->indent()->subcompile($this->getNode('else'));
     }
     $compiler->outdent()->write("}\n");
 }
Esempio n. 2
0
 /**
  * Compiles the node to PHP.
  *
  * @param IfwPsn_Vendor_Twig_Compiler A IfwPsn_Vendor_Twig_Compiler instance
  */
 public function compile(IfwPsn_Vendor_Twig_Compiler $compiler)
 {
     $compiler->addDebugInfo($this)->write(sprintf("public function get%s(", $this->getAttribute('name')));
     $count = count($this->getNode('arguments'));
     $pos = 0;
     foreach ($this->getNode('arguments') as $name => $default) {
         $compiler->raw('$_' . $name . ' = ')->subcompile($default);
         if (++$pos < $count) {
             $compiler->raw(', ');
         }
     }
     $compiler->raw(")\n")->write("{\n")->indent();
     if (!count($this->getNode('arguments'))) {
         $compiler->write("\$context = \$this->env->getGlobals();\n\n");
     } else {
         $compiler->write("\$context = \$this->env->mergeGlobals(array(\n")->indent();
         foreach ($this->getNode('arguments') as $name => $default) {
             $compiler->write('')->string($name)->raw(' => $_' . $name)->raw(",\n");
         }
         $compiler->outdent()->write("));\n\n");
     }
     $compiler->write("\$blocks = array();\n\n")->write("ob_start();\n")->write("try {\n")->indent()->subcompile($this->getNode('body'))->outdent()->write("} catch (Exception \$e) {\n")->indent()->write("ob_end_clean();\n\n")->write("throw \$e;\n")->outdent()->write("}\n\n")->write("return ('' === \$tmp = ob_get_clean()) ? '' : new IfwPsn_Vendor_Twig_Markup(\$tmp, \$this->env->getCharset());\n")->outdent()->write("}\n\n");
 }
Esempio n. 3
0
 protected function compileClassFooter(IfwPsn_Vendor_Twig_Compiler $compiler)
 {
     $compiler->outdent()->write("}\n");
 }