Ejemplo n.º 1
0
 /**
  * Parses a token and returns a node.
  *
  * @param IfwPsn_Vendor_Twig_Token $token A IfwPsn_Vendor_Twig_Token instance
  *
  * @return IfwPsn_Vendor_Twig_NodeInterface A IfwPsn_Vendor_Twig_NodeInterface instance
  */
 public function parse(IfwPsn_Vendor_Twig_Token $token)
 {
     $macro = $this->parser->getExpressionParser()->parseExpression();
     $this->parser->getStream()->expect('as');
     $var = new IfwPsn_Vendor_Twig_Node_Expression_AssignName($this->parser->getStream()->expect(IfwPsn_Vendor_Twig_Token::NAME_TYPE)->getValue(), $token->getLine());
     $this->parser->getStream()->expect(IfwPsn_Vendor_Twig_Token::BLOCK_END_TYPE);
     $this->parser->addImportedSymbol('template', $var->getAttribute('name'));
     return new IfwPsn_Vendor_Twig_Node_Import($macro, $var, $token->getLine(), $this->getTag());
 }
Ejemplo n.º 2
0
 /**
  * Parses a token and returns a node.
  *
  * @param IfwPsn_Vendor_Twig_Token $token A IfwPsn_Vendor_Twig_Token instance
  *
  * @return IfwPsn_Vendor_Twig_NodeInterface A IfwPsn_Vendor_Twig_NodeInterface instance
  */
 public function parse(IfwPsn_Vendor_Twig_Token $token)
 {
     $lineno = $token->getLine();
     $stream = $this->parser->getStream();
     $targets = $this->parser->getExpressionParser()->parseAssignmentExpression();
     $stream->expect(IfwPsn_Vendor_Twig_Token::OPERATOR_TYPE, 'in');
     $seq = $this->parser->getExpressionParser()->parseExpression();
     $ifexpr = null;
     if ($stream->nextIf(IfwPsn_Vendor_Twig_Token::NAME_TYPE, 'if')) {
         $ifexpr = $this->parser->getExpressionParser()->parseExpression();
     }
     $stream->expect(IfwPsn_Vendor_Twig_Token::BLOCK_END_TYPE);
     $body = $this->parser->subparse(array($this, 'decideForFork'));
     if ($stream->next()->getValue() == 'else') {
         $stream->expect(IfwPsn_Vendor_Twig_Token::BLOCK_END_TYPE);
         $else = $this->parser->subparse(array($this, 'decideForEnd'), true);
     } else {
         $else = null;
     }
     $stream->expect(IfwPsn_Vendor_Twig_Token::BLOCK_END_TYPE);
     if (count($targets) > 1) {
         $keyTarget = $targets->getNode(0);
         $keyTarget = new IfwPsn_Vendor_Twig_Node_Expression_AssignName($keyTarget->getAttribute('name'), $keyTarget->getLine());
         $valueTarget = $targets->getNode(1);
         $valueTarget = new IfwPsn_Vendor_Twig_Node_Expression_AssignName($valueTarget->getAttribute('name'), $valueTarget->getLine());
     } else {
         $keyTarget = new IfwPsn_Vendor_Twig_Node_Expression_AssignName('_key', $lineno);
         $valueTarget = $targets->getNode(0);
         $valueTarget = new IfwPsn_Vendor_Twig_Node_Expression_AssignName($valueTarget->getAttribute('name'), $valueTarget->getLine());
     }
     if ($ifexpr) {
         $this->checkLoopUsageCondition($stream, $ifexpr);
         $this->checkLoopUsageBody($stream, $body);
     }
     return new IfwPsn_Vendor_Twig_Node_For($keyTarget, $valueTarget, $seq, $ifexpr, $body, $else, $lineno, $this->getTag());
 }