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 / MacroTokenParser.php

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

70 lines 2.1 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 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11 namespace ElementorDeps\Twig\TokenParser;
12
13 use ElementorDeps\Twig\Error\SyntaxError;
14 use ElementorDeps\Twig\Node\BodyNode;
15 use ElementorDeps\Twig\Node\MacroNode;
16 use ElementorDeps\Twig\Node\Node;
17 use ElementorDeps\Twig\Token;
18 /**
19 * Defines a macro.
20 *
21 * {% macro input(name, value, type, size) %}
22 * <input type="{{ type|default('text') }}" name="{{ name }}" value="{{ value|e }}" size="{{ size|default(20) }}" />
23 * {% endmacro %}
24 *
25 * @internal
26 */
27 final class MacroTokenParser extends AbstractTokenParser
28 {
29 public function parse(Token $token) : Node
30 {
31 $lineno = $token->getLine();
32 $stream = $this->parser->getStream();
33 $name = $stream->expect(
34 /* Token::NAME_TYPE */
35 5
36 )->getValue();
37 $arguments = $this->parser->getExpressionParser()->parseArguments(\true, \true);
38 $stream->expect(
39 /* Token::BLOCK_END_TYPE */
40 3
41 );
42 $this->parser->pushLocalScope();
43 $body = $this->parser->subparse([$this, 'decideBlockEnd'], \true);
44 if ($token = $stream->nextIf(
45 /* Token::NAME_TYPE */
46 5
47 )) {
48 $value = $token->getValue();
49 if ($value != $name) {
50 throw new SyntaxError(\sprintf('Expected endmacro for macro "%s" (but "%s" given).', $name, $value), $stream->getCurrent()->getLine(), $stream->getSourceContext());
51 }
52 }
53 $this->parser->popLocalScope();
54 $stream->expect(
55 /* Token::BLOCK_END_TYPE */
56 3
57 );
58 $this->parser->setMacro($name, new MacroNode($name, new BodyNode([$body]), $arguments, $lineno, $this->getTag()));
59 return new Node();
60 }
61 public function decideBlockEnd(Token $token) : bool
62 {
63 return $token->test('endmacro');
64 }
65 public function getTag() : string
66 {
67 return 'macro';
68 }
69 }
70