Exemplo n.º 1
0
 /**
  * Parse next code token.
  *
  * @return  CodeNode
  */
 protected function parseCode()
 {
     $token = $this->expectTokenType('code');
     $node = new CodeNode($token->value, $token->buffer, $this->lexer->getCurrentLine());
     // Skip newlines
     while ($this->lexer->predictToken()->type === 'newline') {
         $this->lexer->getAdvancedToken();
     }
     if ($this->lexer->predictToken()->type === 'indent') {
         $node->setBlock($this->parseBlock());
     }
     return $node;
 }
Exemplo n.º 2
0
 /**
  * Dump code node.
  *
  * @param   CodeNode    $node   code node
  * @param   integer     $level  indentation level
  *
  * @return  string
  */
 protected function dumpCode(CodeNode $node, $level = 0)
 {
     $html = str_repeat('  ', $level);
     if ($node->getBlock()) {
         if ($node->isBuffered()) {
             $begin = '<?php echo ' . preg_replace('/^ +/', '', $node->getCode()) . " { ?>\n";
         } else {
             $begin = '<?php ' . preg_replace('/^ +/', '', $node->getCode()) . " { ?>\n";
         }
         $end = "\n" . str_repeat('  ', $level) . '<?php } ?>';
         foreach ($this->codes as $regex => $ending) {
             if (preg_match($regex, $node->getCode())) {
                 $begin = '<?php ' . preg_replace('/^ +| +$/', '', $node->getCode()) . " ?>\n";
                 $end = "\n" . str_repeat('  ', $level) . '<?php ' . $ending . '; ?>';
                 if ($ending === 'endif' && isset($this->nextIsIf[$level]) && $this->nextIsIf[$level]) {
                     $end = '';
                 }
                 break;
             }
         }
         $html .= $begin;
         $html .= $this->dumpNode($node->getBlock(), $level + 1);
         $html .= $end;
     } else {
         if ($node->isBuffered()) {
             $html .= '<?php echo ' . preg_replace('/^ +/', '', $node->getCode()) . ' ?>';
         } else {
             $html .= '<?php ' . preg_replace('/^ +/', '', $node->getCode()) . ' ?>';
         }
     }
     return $html;
 }