public function compile(Compiler $compiler, TagNode $node) { if ($node->hasChild('else')) { //extract data to be traversed $compiler->indented('$temp = ')->compileNode($node->getChild('source'))->add(';'); //generate check and code for the 'else' branch $compiler->indented('if(empty($temp)) {')->indent()->compileNode($node->getChild('else'))->outdent()->indented('} else {')->indent(); $source = new TempVariableNode('temp'); } else { $source = $node->getChild('source'); } $compiler->indented('foreach(')->compileNode($source)->add(' as '); if ($node->hasChild('loop_key')) { $compiler->compileNode($node->getChild('loop_key'))->add(' => '); } $variables = $node->getData('variables'); if ($variables === 1) { $compiler->compileNode($node->getChild('loop_variable_0'))->add(') {')->indent(); } else { $arguments = []; for ($i = 0; $i < $variables; ++$i) { $arguments[] = $node->getChild('loop_variable_' . $i); } $compiler->add('$loopVariable) {')->indent()->indented('list')->compileArgumentList($arguments)->add(' = $loopVariable;'); } $compiler->compileNode($node->getChild('loop_body'))->outdent()->indented('}'); if ($node->hasChild('else')) { //bracket opened after if-empty check $compiler->outdent()->indented('}'); } }
public function compile(Compiler $compiler) { $compiler->add('['); for ($i = 0; $i < $this->itemCount; ++$i) { if ($i !== 0) { $compiler->add(', '); } if ($this->hasChild('key_' . $i)) { $compiler->compileNode($this->getChild('key_' . $i)); $compiler->add(' => '); } $compiler->compileNode($this->getChild('value_' . $i)); } $compiler->add(']'); }
public function compile(Compiler $compiler) { if ($this->getObject()) { $compiler->compileNode($this->getObject())->add('->' . $this->getData('name'))->compileArgumentList($this->arguments); } else { $environment = $compiler->getEnvironment(); $function = $environment->getFunction($this->getData('name')); if ($function->getOption('needs_environment')) { array_unshift($this->arguments, new TempVariableNode('environment')); } if ($function->getOption('needs_context')) { array_unshift($this->arguments, new TempVariableNode('context')); } $environment->getFunctionCompiler($function->getOption('compiler'))->compile($compiler, $function, $this->arguments); } }
public function compile(Compiler $compiler, TagNode $node) { $first = true; $else = null; foreach ($node->getChildren() as $branch) { if ($first) { $compiler->indented('if('); $first = false; } elseif (!$branch->hasChild('condition')) { $else = $branch->getChild('body'); continue; } else { $compiler->add(' elseif('); } $compiler->compileNode($branch->getChild('condition'))->add(') {')->indent()->compileNode($branch->getChild('body'))->outdent()->indented('}'); } if ($else !== null) { $compiler->add(' else {')->indent()->compileNode($else)->outdent()->indented('}'); } }
public function compile(Compiler $compiler, OperatorNode $node) { $compiler->compileNode(new FunctionNode($this->getFunctionName(), $node->getChildren())); }
public function compile(Compiler $compiler, TagNode $node) { $compiler->indented('ob_start();'); $compiler->compileNode($node->getChild('body')); $compiler->indented('')->compileNode($node->getChild('into'))->add(' = ob_get_clean();'); }
public function compile(Compiler $compiler) { $compiler->compileNode($this->getChild('identifier'))->add('[')->compileNode($this->getChild('key'))->add(']'); }
public function compile(Compiler $compiler, TagNode $node) { $compiler->compileNode($node->getChild('body')); }
public function compile(Compiler $compiler) { foreach ($this->getChildren() as $node) { $compiler->compileNode($node); } }
private function compileBlock(Compiler $compiler, $method, RootNode $body) { $compiler->indented('public function %s(Context $context)', $method); $compiler->indented('{'); $compiler->indent(); if (!$body->hasData('environment_accessed') || $body->getData('environment_accessed')) { $compiler->indented('$environment = $this->getEnvironment();'); } $compiler->compileNode($body); $compiler->outdent(); $compiler->indented("}\n"); }