PluginProbe
Elementor Website Builder – more than just a page builder / 3.28.0-dev1
Elementor Website Builder – more than just a page builder v3.28.0-dev1
4.3.0-beta3 4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 4.1.0-dev2 4.0.8 4.1.0-beta1 4.1.0-dev1 All 452 releases
elementor / vendor_prefixed / twig / src / TokenParser / ForTokenParser.php

ForTokenParser.php in Elementor Website Builder – more than just a page builder 3.28.0-dev1, at vendor_prefixed/twig/src/TokenParser/ForTokenParser.php

84 lines 2.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /*
4 * This file is part of Twig.
5 *
6 * (c) Fabien Potencier
7 * (c) Armin Ronacher
8 *
9 * For the full copyright and license information, please view the LICENSE
10 * file that was distributed with this source code.
11 */
12 namespace ElementorDeps\Twig\TokenParser;
13
14 use ElementorDeps\Twig\Node\Expression\AssignNameExpression;
15 use ElementorDeps\Twig\Node\ForNode;
16 use ElementorDeps\Twig\Node\Node;
17 use ElementorDeps\Twig\Token;
18 /**
19 * Loops over each item of a sequence.
20 *
21 * <ul>
22 * {% for user in users %}
23 * <li>{{ user.username|e }}</li>
24 * {% endfor %}
25 * </ul>
26 *
27 * @internal
28 */
29 final class ForTokenParser extends AbstractTokenParser
30 {
31 public function parse(Token $token) : Node
32 {
33 $lineno = $token->getLine();
34 $stream = $this->parser->getStream();
35 $targets = $this->parser->getExpressionParser()->parseAssignmentExpression();
36 $stream->expect(
37 /* Token::OPERATOR_TYPE */
38 8,
39 'in'
40 );
41 $seq = $this->parser->getExpressionParser()->parseExpression();
42 $stream->expect(
43 /* Token::BLOCK_END_TYPE */
44 3
45 );
46 $body = $this->parser->subparse([$this, 'decideForFork']);
47 if ('else' == $stream->next()->getValue()) {
48 $stream->expect(
49 /* Token::BLOCK_END_TYPE */
50 3
51 );
52 $else = $this->parser->subparse([$this, 'decideForEnd'], \true);
53 } else {
54 $else = null;
55 }
56 $stream->expect(
57 /* Token::BLOCK_END_TYPE */
58 3
59 );
60 if (\count($targets) > 1) {
61 $keyTarget = $targets->getNode('0');
62 $keyTarget = new AssignNameExpression($keyTarget->getAttribute('name'), $keyTarget->getTemplateLine());
63 $valueTarget = $targets->getNode('1');
64 } else {
65 $keyTarget = new AssignNameExpression('_key', $lineno);
66 $valueTarget = $targets->getNode('0');
67 }
68 $valueTarget = new AssignNameExpression($valueTarget->getAttribute('name'), $valueTarget->getTemplateLine());
69 return new ForNode($keyTarget, $valueTarget, $seq, null, $body, $else, $lineno, $this->getTag());
70 }
71 public function decideForFork(Token $token) : bool
72 {
73 return $token->test(['else', 'endfor']);
74 }
75 public function decideForEnd(Token $token) : bool
76 {
77 return $token->test('endfor');
78 }
79 public function getTag() : string
80 {
81 return 'for';
82 }
83 }
84