@vituum/vite-plugin-latte 2.0.0-next.4 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/index.js +4 -2
- package/package.json +11 -9
- package/types/index.d.ts +1 -1
- package/vendor/autoload.php +1 -4
- package/vendor/composer/InstalledVersions.php +36 -2
- package/vendor/composer/autoload_classmap.php +14 -15
- package/vendor/composer/autoload_psr4.php +2 -0
- package/vendor/composer/autoload_static.php +38 -15
- package/vendor/composer/installed.json +32 -22
- package/vendor/composer/installed.php +12 -12
- package/vendor/composer/platform_check.php +4 -5
- package/vendor/latte/latte/bin/latte-lint +10 -3
- package/vendor/latte/latte/composer.json +16 -6
- package/vendor/latte/latte/src/Bridges/Tracy/BlueScreenPanel.php +13 -38
- package/vendor/latte/latte/src/Bridges/Tracy/LattePanel.php +9 -7
- package/vendor/latte/latte/src/Bridges/Tracy/TracyExtension.php +2 -4
- package/vendor/latte/latte/src/Bridges/Tracy/dist/panel.phtml +94 -0
- package/vendor/latte/latte/src/Bridges/Tracy/dist/tab.phtml +10 -0
- package/vendor/latte/latte/src/Latte/Compiler/Block.php +4 -6
- package/vendor/latte/latte/src/Latte/Compiler/Escaper.php +67 -86
- package/vendor/latte/latte/src/Latte/Compiler/Node.php +6 -3
- package/vendor/latte/latte/src/Latte/Compiler/NodeHelpers.php +16 -6
- package/vendor/latte/latte/src/Latte/Compiler/NodeTraverser.php +25 -12
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/AreaNode.php +7 -3
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/AuxiliaryNode.php +5 -4
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/FragmentNode.php +8 -4
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Html/AttributeNode.php +7 -15
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Html/BogusTagNode.php +4 -6
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Html/CommentNode.php +4 -3
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Html/ElementNode.php +37 -67
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Html/ExpressionAttributeNode.php +60 -0
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Html/TagNode.php +70 -0
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/NopNode.php +4 -3
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/ArgumentNode.php +4 -3
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/ArrayItemNode.php +4 -15
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/ClosureUseNode.php +4 -3
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/ComplexTypeNode.php +4 -3
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/ArrayAccessNode.php +4 -3
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/ArrayNode.php +6 -22
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/AssignNode.php +18 -5
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/AssignOpNode.php +18 -7
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/AuxiliaryNode.php +5 -4
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/BinaryOpNode.php +38 -9
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/CastNode.php +14 -6
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/ClassConstantFetchNode.php +4 -3
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/CloneNode.php +12 -4
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/ClosureNode.php +10 -6
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/ConstantFetchNode.php +7 -6
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/EmptyNode.php +4 -3
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/FilterCallNode.php +10 -4
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/FunctionCallNode.php +14 -5
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/InNode.php +4 -3
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/InstanceofNode.php +14 -5
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/IssetNode.php +6 -3
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/MatchNode.php +6 -3
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/MethodCallNode.php +18 -5
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/NewNode.php +14 -4
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/PostOpNode.php +14 -6
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/PreOpNode.php +14 -6
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/PropertyFetchNode.php +4 -3
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/StaticMethodCallNode.php +14 -15
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/StaticPropertyFetchNode.php +4 -3
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/TemporaryNode.php +7 -6
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/TernaryNode.php +16 -11
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/UnaryOpNode.php +19 -9
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/VariableNode.php +4 -3
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/ExpressionNode.php +4 -3
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/FilterNode.php +33 -8
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/IdentifierNode.php +4 -3
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/InterpolatedStringPartNode.php +4 -3
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/IntersectionTypeNode.php +6 -3
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/ListItemNode.php +4 -3
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/ListNode.php +4 -3
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/MatchArmNode.php +6 -3
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/ModifierNode.php +29 -41
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/NameNode.php +9 -4
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/NullableTypeNode.php +4 -3
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/OperatorNode.php +27 -0
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/ParameterNode.php +4 -3
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Scalar/BooleanNode.php +4 -3
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Scalar/FloatNode.php +9 -6
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Scalar/IntegerNode.php +8 -6
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Scalar/InterpolatedStringNode.php +9 -5
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Scalar/NullNode.php +4 -3
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Scalar/StringNode.php +6 -4
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/ScalarNode.php +4 -3
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/SuperiorTypeNode.php +4 -3
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/UnionTypeNode.php +6 -3
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/VarLikeIdentifierNode.php +4 -3
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/{Expression/NotNode.php → VariadicPlaceholderNode.php} +9 -9
- package/vendor/latte/latte/src/Latte/{Essential → Compiler}/Nodes/PrintNode.php +9 -15
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/StatementNode.php +7 -3
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/TemplateNode.php +4 -3
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/TextNode.php +6 -4
- package/vendor/latte/latte/src/Latte/Compiler/PhpHelpers.php +32 -18
- package/vendor/latte/latte/src/Latte/Compiler/Position.php +7 -7
- package/vendor/latte/latte/src/Latte/Compiler/PrintContext.php +72 -104
- package/vendor/latte/latte/src/Latte/Compiler/Tag.php +17 -16
- package/vendor/latte/latte/src/Latte/Compiler/TagLexer.php +11 -8
- package/vendor/latte/latte/src/Latte/Compiler/TagParser.php +28 -23
- package/vendor/latte/latte/src/Latte/Compiler/TagParserData.php +360 -336
- package/vendor/latte/latte/src/Latte/Compiler/TemplateGenerator.php +49 -38
- package/vendor/latte/latte/src/Latte/Compiler/TemplateLexer.php +37 -12
- package/vendor/latte/latte/src/Latte/Compiler/TemplateParser.php +35 -21
- package/vendor/latte/latte/src/Latte/Compiler/TemplateParserHtml.php +121 -71
- package/vendor/latte/latte/src/Latte/Compiler/Token.php +79 -70
- package/vendor/latte/latte/src/Latte/Compiler/TokenStream.php +21 -14
- package/vendor/latte/latte/src/Latte/ContentType.php +4 -3
- package/vendor/latte/latte/src/Latte/Engine.php +147 -188
- package/vendor/latte/latte/src/Latte/Essential/AuxiliaryIterator.php +5 -7
- package/vendor/latte/latte/src/Latte/Essential/Blueprint.php +5 -5
- package/vendor/latte/latte/src/Latte/Essential/CachingIterator.php +5 -4
- package/vendor/latte/latte/src/Latte/Essential/CoreExtension.php +155 -127
- package/vendor/latte/latte/src/Latte/Essential/Filters.php +99 -44
- package/vendor/latte/latte/src/Latte/Essential/Nodes/BlockNode.php +14 -13
- package/vendor/latte/latte/src/Latte/Essential/Nodes/CaptureNode.php +5 -6
- package/vendor/latte/latte/src/Latte/Essential/Nodes/ContentTypeNode.php +3 -4
- package/vendor/latte/latte/src/Latte/Essential/Nodes/CustomFunctionCallNode.php +46 -0
- package/vendor/latte/latte/src/Latte/Essential/Nodes/DebugbreakNode.php +2 -3
- package/vendor/latte/latte/src/Latte/Essential/Nodes/DefineNode.php +10 -7
- package/vendor/latte/latte/src/Latte/Essential/Nodes/DoNode.php +3 -4
- package/vendor/latte/latte/src/Latte/Essential/Nodes/DumpNode.php +2 -3
- package/vendor/latte/latte/src/Latte/Essential/Nodes/EmbedNode.php +8 -9
- package/vendor/latte/latte/src/Latte/Essential/Nodes/ExtendsNode.php +3 -5
- package/vendor/latte/latte/src/Latte/Essential/Nodes/FirstLastSepNode.php +4 -7
- package/vendor/latte/latte/src/Latte/Essential/Nodes/ForNode.php +6 -5
- package/vendor/latte/latte/src/Latte/Essential/Nodes/ForeachNode.php +7 -7
- package/vendor/latte/latte/src/Latte/Essential/Nodes/IfChangedNode.php +4 -5
- package/vendor/latte/latte/src/Latte/Essential/Nodes/IfContentNode.php +7 -6
- package/vendor/latte/latte/src/Latte/Essential/Nodes/IfNode.php +11 -11
- package/vendor/latte/latte/src/Latte/Essential/Nodes/ImportNode.php +5 -6
- package/vendor/latte/latte/src/Latte/Essential/Nodes/IncludeBlockNode.php +26 -27
- package/vendor/latte/latte/src/Latte/Essential/Nodes/IncludeFileNode.php +7 -10
- package/vendor/latte/latte/src/Latte/Essential/Nodes/IterateWhileNode.php +6 -6
- package/vendor/latte/latte/src/Latte/Essential/Nodes/JumpNode.php +4 -8
- package/vendor/latte/latte/src/Latte/Essential/Nodes/NAttrNode.php +35 -47
- package/vendor/latte/latte/src/Latte/Essential/Nodes/NClassNode.php +4 -5
- package/vendor/latte/latte/src/Latte/Essential/Nodes/NElseNode.php +69 -34
- package/vendor/latte/latte/src/Latte/Essential/Nodes/NTagNode.php +9 -33
- package/vendor/latte/latte/src/Latte/Essential/Nodes/ParametersNode.php +7 -4
- package/vendor/latte/latte/src/Latte/Essential/Nodes/RawPhpNode.php +3 -4
- package/vendor/latte/latte/src/Latte/Essential/Nodes/RollbackNode.php +2 -3
- package/vendor/latte/latte/src/Latte/Essential/Nodes/SpacelessNode.php +4 -5
- package/vendor/latte/latte/src/Latte/Essential/Nodes/SwitchNode.php +9 -7
- package/vendor/latte/latte/src/Latte/Essential/Nodes/TemplatePrintNode.php +4 -4
- package/vendor/latte/latte/src/Latte/Essential/Nodes/TemplateTypeNode.php +3 -4
- package/vendor/latte/latte/src/Latte/Essential/Nodes/TraceNode.php +2 -3
- package/vendor/latte/latte/src/Latte/Essential/Nodes/TranslateNode.php +5 -5
- package/vendor/latte/latte/src/Latte/Essential/Nodes/TryNode.php +4 -5
- package/vendor/latte/latte/src/Latte/Essential/Nodes/VarNode.php +10 -6
- package/vendor/latte/latte/src/Latte/Essential/Nodes/VarPrintNode.php +2 -3
- package/vendor/latte/latte/src/Latte/Essential/Nodes/VarTypeNode.php +3 -4
- package/vendor/latte/latte/src/Latte/Essential/Nodes/WhileNode.php +5 -5
- package/vendor/latte/latte/src/Latte/Essential/Passes.php +82 -21
- package/vendor/latte/latte/src/Latte/Essential/RawPhpExtension.php +2 -4
- package/vendor/latte/latte/src/Latte/Essential/RollbackException.php +1 -3
- package/vendor/latte/latte/src/Latte/Essential/Tracer.php +24 -28
- package/vendor/latte/latte/src/Latte/Essential/TranslatorExtension.php +14 -14
- package/vendor/latte/latte/src/Latte/Extension.php +12 -6
- package/vendor/latte/latte/src/Latte/Feature.php +24 -0
- package/vendor/latte/latte/src/Latte/Helpers.php +65 -15
- package/vendor/latte/latte/src/Latte/Loader.php +1 -9
- package/vendor/latte/latte/src/Latte/Loaders/FileLoader.php +11 -17
- package/vendor/latte/latte/src/Latte/Loaders/StringLoader.php +7 -21
- package/vendor/latte/latte/src/Latte/Policy.php +4 -3
- package/vendor/latte/latte/src/Latte/Runtime/Block.php +2 -4
- package/vendor/latte/latte/src/Latte/Runtime/Cache.php +143 -0
- package/vendor/latte/latte/src/Latte/Runtime/FilterExecutor.php +5 -6
- package/vendor/latte/latte/src/Latte/Runtime/FilterInfo.php +11 -11
- package/vendor/latte/latte/src/Latte/Runtime/FunctionExecutor.php +5 -6
- package/vendor/latte/latte/src/Latte/Runtime/Helpers.php +91 -0
- package/vendor/latte/latte/src/Latte/Runtime/Html.php +3 -5
- package/vendor/latte/latte/src/Latte/Runtime/HtmlHelpers.php +374 -0
- package/vendor/latte/latte/src/Latte/Runtime/HtmlStringable.php +1 -3
- package/vendor/latte/latte/src/Latte/Runtime/Template.php +162 -182
- package/vendor/latte/latte/src/Latte/Runtime/XmlHelpers.php +108 -0
- package/vendor/latte/latte/src/Latte/Sandbox/Nodes/FunctionCallNode.php +12 -4
- package/vendor/latte/latte/src/Latte/Sandbox/Nodes/MethodCallNode.php +15 -5
- package/vendor/latte/latte/src/Latte/Sandbox/Nodes/PropertyFetchNode.php +4 -3
- package/vendor/latte/latte/src/Latte/Sandbox/Nodes/SandboxNode.php +5 -6
- package/vendor/latte/latte/src/Latte/Sandbox/Nodes/StaticMethodCallNode.php +14 -4
- package/vendor/latte/latte/src/Latte/Sandbox/Nodes/StaticPropertyFetchNode.php +4 -3
- package/vendor/latte/latte/src/Latte/Sandbox/RuntimeChecker.php +8 -6
- package/vendor/latte/latte/src/Latte/Sandbox/SandboxExtension.php +16 -12
- package/vendor/latte/latte/src/Latte/Sandbox/SecurityPolicy.php +18 -16
- package/vendor/latte/latte/src/Latte/attributes.php +7 -3
- package/vendor/latte/latte/src/Latte/exceptions.php +52 -6
- package/vendor/latte/latte/src/Tools/Linter.php +74 -28
- package/vendor/latte/latte/src/Tools/LinterExtension.php +176 -0
- package/vendor/nette/utils/composer.json +15 -5
- package/vendor/nette/utils/readme.md +1 -1
- package/vendor/nette/utils/src/HtmlStringable.php +4 -1
- package/vendor/nette/utils/src/Iterators/CachingIterator.php +10 -25
- package/vendor/nette/utils/src/Iterators/Mapper.php +2 -3
- package/vendor/nette/utils/src/SmartObject.php +3 -0
- package/vendor/nette/utils/src/StaticClass.php +1 -11
- package/vendor/nette/utils/src/Translator.php +1 -1
- package/vendor/nette/utils/src/Utils/ArrayHash.php +6 -10
- package/vendor/nette/utils/src/Utils/ArrayList.php +8 -12
- package/vendor/nette/utils/src/Utils/Arrays.php +38 -18
- package/vendor/nette/utils/src/Utils/Callback.php +13 -8
- package/vendor/nette/utils/src/Utils/DateTime.php +95 -26
- package/vendor/nette/utils/src/Utils/FileInfo.php +6 -7
- package/vendor/nette/utils/src/Utils/FileSystem.php +10 -5
- package/vendor/nette/utils/src/Utils/Finder.php +31 -12
- package/vendor/nette/utils/src/Utils/Floats.php +1 -0
- package/vendor/nette/utils/src/Utils/Helpers.php +22 -2
- package/vendor/nette/utils/src/Utils/Html.php +130 -127
- package/vendor/nette/utils/src/Utils/Image.php +80 -60
- package/vendor/nette/utils/src/Utils/ImageColor.php +5 -0
- package/vendor/nette/utils/src/Utils/ImageType.php +2 -0
- package/vendor/nette/utils/src/Utils/Iterables.php +41 -7
- package/vendor/nette/utils/src/Utils/Json.php +2 -0
- package/vendor/nette/utils/src/Utils/ObjectHelpers.php +2 -0
- package/vendor/nette/utils/src/Utils/Paginator.php +10 -43
- package/vendor/nette/utils/src/Utils/Random.php +2 -0
- package/vendor/nette/utils/src/Utils/Reflection.php +22 -15
- package/vendor/nette/utils/src/Utils/ReflectionMethod.php +6 -1
- package/vendor/nette/utils/src/Utils/Strings.php +62 -57
- package/vendor/nette/utils/src/Utils/Type.php +91 -42
- package/vendor/nette/utils/src/Utils/Validators.php +9 -7
- package/vendor/latte/latte/src/Bridges/Tracy/templates/LattePanel.panel.phtml +0 -101
- package/vendor/latte/latte/src/Bridges/Tracy/templates/LattePanel.tab.phtml +0 -15
- package/vendor/latte/latte/src/Latte/Compiler/ExpressionBuilder.php +0 -129
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/ErrorSuppressNode.php +0 -36
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/FunctionCallableNode.php +0 -39
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/MethodCallableNode.php +0 -42
- package/vendor/latte/latte/src/Latte/Compiler/Nodes/Php/Expression/StaticMethodCallableNode.php +0 -57
- package/vendor/latte/latte/src/Latte/PositionAwareException.php +0 -47
- package/vendor/latte/latte/src/Latte/Runtime/Filters.php +0 -283
- package/vendor/latte/latte/src/Latte/Sandbox/Nodes/FunctionCallableNode.php +0 -29
- package/vendor/latte/latte/src/Latte/Sandbox/Nodes/MethodCallableNode.php +0 -30
- package/vendor/latte/latte/src/Latte/Sandbox/Nodes/StaticMethodCallableNode.php +0 -30
|
@@ -1,19 +1,16 @@
|
|
|
1
|
-
<?php
|
|
1
|
+
<?php declare(strict_types=1);
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* This file is part of the Latte (https://latte.nette.org)
|
|
5
5
|
* Copyright (c) 2008 David Grudl (https://davidgrudl.com)
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
declare(strict_types=1);
|
|
9
|
-
|
|
10
8
|
namespace Latte\Compiler\Nodes\Html;
|
|
11
9
|
|
|
12
10
|
use Latte\Compiler\Node;
|
|
13
11
|
use Latte\Compiler\NodeHelpers;
|
|
14
12
|
use Latte\Compiler\Nodes;
|
|
15
13
|
use Latte\Compiler\Nodes\AreaNode;
|
|
16
|
-
use Latte\Compiler\Nodes\AuxiliaryNode;
|
|
17
14
|
use Latte\Compiler\Nodes\FragmentNode;
|
|
18
15
|
use Latte\Compiler\Position;
|
|
19
16
|
use Latte\Compiler\PrintContext;
|
|
@@ -22,45 +19,42 @@ use Latte\ContentType;
|
|
|
22
19
|
|
|
23
20
|
|
|
24
21
|
/**
|
|
25
|
-
* HTML element
|
|
22
|
+
* HTML/XML element with attributes, content, and n:attribute support.
|
|
26
23
|
*/
|
|
27
24
|
class ElementNode extends AreaNode
|
|
28
25
|
{
|
|
29
|
-
public
|
|
30
|
-
public ?FragmentNode $attributes = null;
|
|
26
|
+
public FragmentNode $attributes;
|
|
31
27
|
public bool $selfClosing = false;
|
|
32
28
|
public ?AreaNode $content = null;
|
|
33
29
|
|
|
34
30
|
/** @var Tag[] */
|
|
35
31
|
public array $nAttributes = [];
|
|
36
|
-
|
|
37
|
-
/** n:tag & n:tag- support */
|
|
38
|
-
public AreaNode $tagNode;
|
|
39
|
-
public bool $captureTagName = false;
|
|
32
|
+
public ?AreaNode $dynamicTag = null;
|
|
40
33
|
public bool $breakable = false;
|
|
41
|
-
private ?string $endTagVar;
|
|
42
34
|
|
|
43
35
|
|
|
44
36
|
public function __construct(
|
|
45
|
-
public
|
|
37
|
+
public readonly string $name,
|
|
46
38
|
public ?Position $position = null,
|
|
47
|
-
public
|
|
48
|
-
public ?\stdClass $data = null,
|
|
39
|
+
public readonly ?self $parent = null,
|
|
49
40
|
public string $contentType = ContentType::Html,
|
|
50
41
|
) {
|
|
51
|
-
$this->
|
|
52
|
-
$this->tagNode = new AuxiliaryNode(\Closure::fromCallable([$this, 'printStartTag']));
|
|
42
|
+
$this->attributes = new FragmentNode;
|
|
53
43
|
}
|
|
54
44
|
|
|
55
45
|
|
|
56
46
|
public function getAttribute(string $name): string|Node|bool|null
|
|
57
47
|
{
|
|
58
|
-
foreach ($this->attributes
|
|
48
|
+
foreach ($this->attributes->children as $child) {
|
|
59
49
|
if ($child instanceof AttributeNode
|
|
60
50
|
&& $child->name instanceof Nodes\TextNode
|
|
61
|
-
&&
|
|
51
|
+
&& $this->matchesIdentifier($name, $child->name->content)
|
|
62
52
|
) {
|
|
63
53
|
return NodeHelpers::toText($child->value) ?? $child->value ?? true;
|
|
54
|
+
} elseif ($child instanceof ExpressionAttributeNode
|
|
55
|
+
&& $this->matchesIdentifier($name, $child->name)
|
|
56
|
+
) {
|
|
57
|
+
return true;
|
|
64
58
|
}
|
|
65
59
|
}
|
|
66
60
|
|
|
@@ -69,10 +63,16 @@ class ElementNode extends AreaNode
|
|
|
69
63
|
|
|
70
64
|
|
|
71
65
|
public function is(string $name): bool
|
|
66
|
+
{
|
|
67
|
+
return $this->matchesIdentifier($this->name, $name);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
private function matchesIdentifier(string $a, string $b): bool
|
|
72
72
|
{
|
|
73
73
|
return $this->contentType === ContentType::Html
|
|
74
|
-
? strcasecmp($
|
|
75
|
-
: $
|
|
74
|
+
? strcasecmp($a, $b) === 0
|
|
75
|
+
: $a === $b;
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
|
|
@@ -85,66 +85,36 @@ class ElementNode extends AreaNode
|
|
|
85
85
|
|
|
86
86
|
public function print(PrintContext $context): string
|
|
87
87
|
{
|
|
88
|
-
$res = $this->
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
88
|
+
$res = $this->dynamicTag
|
|
89
|
+
? $this->dynamicTag->print($context)
|
|
90
|
+
: (new TagNode($this))->print($context, captureEnd: false);
|
|
91
|
+
|
|
92
|
+
if ($innerContent = $this->content) {
|
|
93
|
+
if ($this->dynamicTag) {
|
|
94
|
+
$endTag = '$ʟ_tags[' . ($context->generateId()) . ']';
|
|
95
|
+
$res = "\$ʟ_tag = ''; $res $endTag = \$ʟ_tag;";
|
|
96
|
+
} else {
|
|
97
|
+
$endTag = var_export('</' . $this->name . '>', return: true);
|
|
98
|
+
}
|
|
97
99
|
|
|
98
|
-
if ($this->content) {
|
|
99
100
|
$context->beginEscape()->enterHtmlText($this);
|
|
100
|
-
$content = $
|
|
101
|
+
$content = $innerContent->print($context);
|
|
101
102
|
$context->restoreEscape();
|
|
102
103
|
$res .= $this->breakable
|
|
103
104
|
? 'try { ' . $content . ' } finally { echo ' . $endTag . '; } '
|
|
104
|
-
: $content . 'echo ' . $endTag . ';';
|
|
105
|
+
: $content . ' echo ' . $endTag . ';';
|
|
105
106
|
}
|
|
106
107
|
|
|
107
108
|
return $res;
|
|
108
109
|
}
|
|
109
110
|
|
|
110
111
|
|
|
111
|
-
private function printStartTag(PrintContext $context): string
|
|
112
|
-
{
|
|
113
|
-
$context->beginEscape()->enterHtmlTag($this->name);
|
|
114
|
-
$res = "echo '<';";
|
|
115
|
-
|
|
116
|
-
if ($this->endTagVar) {
|
|
117
|
-
$expr = $this->variableName
|
|
118
|
-
? 'LR\Filters::safeTag('
|
|
119
|
-
. $this->variableName->print($context)
|
|
120
|
-
. ($this->contentType === ContentType::Xml ? ', true' : '')
|
|
121
|
-
. ')'
|
|
122
|
-
: var_export($this->name, true);
|
|
123
|
-
$res .= "echo \$ʟ_tmp = $expr /* line {$this->position->line} */;"
|
|
124
|
-
. "{$this->endTagVar} = '</' . \$ʟ_tmp . '>' . {$this->endTagVar};";
|
|
125
|
-
} else {
|
|
126
|
-
$res .= 'echo ' . var_export($this->name, true) . ';';
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
foreach ($this->attributes?->children ?? [] as $attr) {
|
|
130
|
-
$res .= $attr->print($context);
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
$res .= "echo '" . ($this->selfClosing ? '/>' : '>') . "';";
|
|
134
|
-
$context->restoreEscape();
|
|
135
|
-
return $res;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
|
|
139
112
|
public function &getIterator(): \Generator
|
|
140
113
|
{
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
yield $this->variableName;
|
|
144
|
-
}
|
|
145
|
-
if ($this->attributes) {
|
|
146
|
-
yield $this->attributes;
|
|
114
|
+
if ($this->dynamicTag) {
|
|
115
|
+
yield $this->dynamicTag;
|
|
147
116
|
}
|
|
117
|
+
yield $this->attributes;
|
|
148
118
|
if ($this->content) {
|
|
149
119
|
yield $this->content;
|
|
150
120
|
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
<?php declare(strict_types=1);
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* This file is part of the Latte (https://latte.nette.org)
|
|
5
|
+
* Copyright (c) 2008 David Grudl (https://davidgrudl.com)
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
namespace Latte\Compiler\Nodes\Html;
|
|
9
|
+
|
|
10
|
+
use Latte\Compiler\Nodes\AreaNode;
|
|
11
|
+
use Latte\Compiler\Nodes\Php\ExpressionNode;
|
|
12
|
+
use Latte\Compiler\Nodes\Php\ModifierNode;
|
|
13
|
+
use Latte\Compiler\Position;
|
|
14
|
+
use Latte\Compiler\PrintContext;
|
|
15
|
+
use Latte\ContentType;
|
|
16
|
+
use Latte\Feature;
|
|
17
|
+
use Latte\Runtime as LR;
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Dynamic HTML attribute generated from expression.
|
|
22
|
+
*/
|
|
23
|
+
class ExpressionAttributeNode extends AreaNode
|
|
24
|
+
{
|
|
25
|
+
public function __construct(
|
|
26
|
+
public string $name,
|
|
27
|
+
public ExpressionNode $value,
|
|
28
|
+
public ModifierNode $modifier,
|
|
29
|
+
public ?string $indentation = null,
|
|
30
|
+
public ?Position $position = null,
|
|
31
|
+
) {
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
public function print(PrintContext $context): string
|
|
36
|
+
{
|
|
37
|
+
if ($context->getEscaper()->getContentType() === ContentType::Html) {
|
|
38
|
+
$type = $this->modifier->removeFilter('toggle') ? 'bool' : LR\HtmlHelpers::classifyAttributeType($this->name);
|
|
39
|
+
$method = 'LR\HtmlHelpers::format' . ucfirst($type) . 'Attribute';
|
|
40
|
+
} else {
|
|
41
|
+
$method = 'LR\XmlHelpers::formatAttribute';
|
|
42
|
+
}
|
|
43
|
+
return $context->format(
|
|
44
|
+
'echo %raw(%dump, %modify(%node), %dump?) %line;',
|
|
45
|
+
$method,
|
|
46
|
+
$this->indentation . $this->name,
|
|
47
|
+
$this->modifier,
|
|
48
|
+
$this->value,
|
|
49
|
+
(!$this->modifier->removeFilter('accept') && $context->hasFeature(Feature::MigrationWarnings)) ?: null,
|
|
50
|
+
$this->value->position,
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
public function &getIterator(): \Generator
|
|
56
|
+
{
|
|
57
|
+
yield $this->value;
|
|
58
|
+
yield $this->modifier;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
<?php declare(strict_types=1);
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* This file is part of the Latte (https://latte.nette.org)
|
|
5
|
+
* Copyright (c) 2008 David Grudl (https://davidgrudl.com)
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
namespace Latte\Compiler\Nodes\Html;
|
|
9
|
+
|
|
10
|
+
use Latte\Compiler\Nodes;
|
|
11
|
+
use Latte\Compiler\Nodes\AreaNode;
|
|
12
|
+
use Latte\Compiler\PrintContext;
|
|
13
|
+
use Latte\ContentType;
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Helper node for rendering HTML tags with n:tag and n:tag* support.
|
|
18
|
+
* Writes end tag to $ʟ_tag.
|
|
19
|
+
*/
|
|
20
|
+
class TagNode extends AreaNode
|
|
21
|
+
{
|
|
22
|
+
public function __construct(
|
|
23
|
+
public readonly ElementNode $element,
|
|
24
|
+
public ?Nodes\Php\ExpressionNode $name = null,
|
|
25
|
+
) {
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
public function print(PrintContext $context, ?bool $captureEnd = null): string
|
|
30
|
+
{
|
|
31
|
+
$captureEnd ??= (bool) $this->element->content;
|
|
32
|
+
$context->beginEscape()->enterHtmlTag($this->element->name);
|
|
33
|
+
|
|
34
|
+
$res = $this->name
|
|
35
|
+
? $context->format(
|
|
36
|
+
<<<'XX'
|
|
37
|
+
$ʟ_tmp = LR\%raw::validateTagChange(%node, %dump);
|
|
38
|
+
%raw
|
|
39
|
+
echo '<', $ʟ_tmp %line;
|
|
40
|
+
%node
|
|
41
|
+
echo %dump;
|
|
42
|
+
XX,
|
|
43
|
+
$this->element->contentType === ContentType::Html ? 'HtmlHelpers' : 'XmlHelpers',
|
|
44
|
+
$this->name,
|
|
45
|
+
$this->element->name,
|
|
46
|
+
$captureEnd ? '$ʟ_tag = \'</\' . $ʟ_tmp . \'>\' . $ʟ_tag;' : '',
|
|
47
|
+
$this->element->position,
|
|
48
|
+
$this->element->attributes,
|
|
49
|
+
$this->element->selfClosing ? '/>' : '>',
|
|
50
|
+
)
|
|
51
|
+
: $context->format(
|
|
52
|
+
'%raw echo %dump; %node echo %dump;',
|
|
53
|
+
$captureEnd ? '$ʟ_tag = ' . $context->encodeString("</{$this->element->name}>") . ' . $ʟ_tag;' : '',
|
|
54
|
+
'<' . $this->element->name,
|
|
55
|
+
$this->element->attributes,
|
|
56
|
+
$this->element->selfClosing ? '/>' : '>',
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
$context->restoreEscape();
|
|
60
|
+
return $res;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
public function &getIterator(): \Generator
|
|
65
|
+
{
|
|
66
|
+
if ($this->name) {
|
|
67
|
+
yield $this->name;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
<?php
|
|
1
|
+
<?php declare(strict_types=1);
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* This file is part of the Latte (https://latte.nette.org)
|
|
5
5
|
* Copyright (c) 2008 David Grudl (https://davidgrudl.com)
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
declare(strict_types=1);
|
|
9
|
-
|
|
10
8
|
namespace Latte\Compiler\Nodes;
|
|
11
9
|
|
|
12
10
|
use Latte\Compiler\PrintContext;
|
|
13
11
|
|
|
14
12
|
|
|
13
|
+
/**
|
|
14
|
+
* Placeholder for removed or filtered-out content.
|
|
15
|
+
*/
|
|
15
16
|
class NopNode extends AreaNode
|
|
16
17
|
{
|
|
17
18
|
public function print(PrintContext $context): string
|
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
<?php
|
|
1
|
+
<?php declare(strict_types=1);
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* This file is part of the Latte (https://latte.nette.org)
|
|
5
5
|
* Copyright (c) 2008 David Grudl (https://davidgrudl.com)
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
declare(strict_types=1);
|
|
9
|
-
|
|
10
8
|
namespace Latte\Compiler\Nodes\Php;
|
|
11
9
|
|
|
12
10
|
use Latte\Compiler\Node;
|
|
@@ -14,6 +12,9 @@ use Latte\Compiler\Position;
|
|
|
14
12
|
use Latte\Compiler\PrintContext;
|
|
15
13
|
|
|
16
14
|
|
|
15
|
+
/**
|
|
16
|
+
* Function/method argument with optional name, reference, and unpacking.
|
|
17
|
+
*/
|
|
17
18
|
class ArgumentNode extends Node
|
|
18
19
|
{
|
|
19
20
|
public function __construct(
|
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
<?php
|
|
1
|
+
<?php declare(strict_types=1);
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* This file is part of the Latte (https://latte.nette.org)
|
|
5
5
|
* Copyright (c) 2008 David Grudl (https://davidgrudl.com)
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
declare(strict_types=1);
|
|
9
|
-
|
|
10
8
|
namespace Latte\Compiler\Nodes\Php;
|
|
11
9
|
|
|
12
10
|
use Latte\Compiler\Node;
|
|
@@ -14,6 +12,9 @@ use Latte\Compiler\Position;
|
|
|
14
12
|
use Latte\Compiler\PrintContext;
|
|
15
13
|
|
|
16
14
|
|
|
15
|
+
/**
|
|
16
|
+
* Array item with optional key, reference, and spread operator.
|
|
17
|
+
*/
|
|
17
18
|
class ArrayItemNode extends Node
|
|
18
19
|
{
|
|
19
20
|
public function __construct(
|
|
@@ -60,15 +61,3 @@ class ArrayItemNode extends Node
|
|
|
60
61
|
yield $this->value;
|
|
61
62
|
}
|
|
62
63
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
class_alias(ArrayItemNode::class, Expression\ArrayItemNode::class);
|
|
66
|
-
|
|
67
|
-
namespace Latte\Compiler\Nodes\Php\Expression;
|
|
68
|
-
|
|
69
|
-
if (false) {
|
|
70
|
-
/** @deprecated use Latte\Compiler\Nodes\Php\ArrayItemNode */
|
|
71
|
-
class ArrayItemNode
|
|
72
|
-
{
|
|
73
|
-
}
|
|
74
|
-
}
|
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
<?php
|
|
1
|
+
<?php declare(strict_types=1);
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* This file is part of the Latte (https://latte.nette.org)
|
|
5
5
|
* Copyright (c) 2008 David Grudl (https://davidgrudl.com)
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
declare(strict_types=1);
|
|
9
|
-
|
|
10
8
|
namespace Latte\Compiler\Nodes\Php;
|
|
11
9
|
|
|
12
10
|
use Latte\Compiler\Node;
|
|
@@ -15,6 +13,9 @@ use Latte\Compiler\Position;
|
|
|
15
13
|
use Latte\Compiler\PrintContext;
|
|
16
14
|
|
|
17
15
|
|
|
16
|
+
/**
|
|
17
|
+
* Closure use variable ($var or &$var).
|
|
18
|
+
*/
|
|
18
19
|
class ClosureUseNode extends Node
|
|
19
20
|
{
|
|
20
21
|
public function __construct(
|
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
<?php
|
|
1
|
+
<?php declare(strict_types=1);
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* This file is part of the Latte (https://latte.nette.org)
|
|
5
5
|
* Copyright (c) 2008 David Grudl (https://davidgrudl.com)
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
declare(strict_types=1);
|
|
9
|
-
|
|
10
8
|
namespace Latte\Compiler\Nodes\Php;
|
|
11
9
|
|
|
12
10
|
use Latte\Compiler\Node;
|
|
13
11
|
|
|
14
12
|
|
|
13
|
+
/**
|
|
14
|
+
* Base for complex type declarations (nullable, union, intersection).
|
|
15
|
+
*/
|
|
15
16
|
abstract class ComplexTypeNode extends Node
|
|
16
17
|
{
|
|
17
18
|
}
|
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
<?php
|
|
1
|
+
<?php declare(strict_types=1);
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* This file is part of the Latte (https://latte.nette.org)
|
|
5
5
|
* Copyright (c) 2008 David Grudl (https://davidgrudl.com)
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
declare(strict_types=1);
|
|
9
|
-
|
|
10
8
|
namespace Latte\Compiler\Nodes\Php\Expression;
|
|
11
9
|
|
|
12
10
|
use Latte\Compiler\Nodes\Php\ExpressionNode;
|
|
@@ -14,6 +12,9 @@ use Latte\Compiler\Position;
|
|
|
14
12
|
use Latte\Compiler\PrintContext;
|
|
15
13
|
|
|
16
14
|
|
|
15
|
+
/**
|
|
16
|
+
* Array or string element access ($arr[$key]).
|
|
17
|
+
*/
|
|
17
18
|
class ArrayAccessNode extends ExpressionNode
|
|
18
19
|
{
|
|
19
20
|
public function __construct(
|
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
<?php
|
|
1
|
+
<?php declare(strict_types=1);
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* This file is part of the Latte (https://latte.nette.org)
|
|
5
5
|
* Copyright (c) 2008 David Grudl (https://davidgrudl.com)
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
declare(strict_types=1);
|
|
9
|
-
|
|
10
8
|
namespace Latte\Compiler\Nodes\Php\Expression;
|
|
11
9
|
|
|
12
10
|
use Latte\Compiler\Nodes\Php\ArgumentNode;
|
|
@@ -14,8 +12,12 @@ use Latte\Compiler\Nodes\Php\ArrayItemNode;
|
|
|
14
12
|
use Latte\Compiler\Nodes\Php\ExpressionNode;
|
|
15
13
|
use Latte\Compiler\Position;
|
|
16
14
|
use Latte\Compiler\PrintContext;
|
|
15
|
+
use Latte\Helpers;
|
|
17
16
|
|
|
18
17
|
|
|
18
|
+
/**
|
|
19
|
+
* Array literal.
|
|
20
|
+
*/
|
|
19
21
|
class ArrayNode extends ExpressionNode
|
|
20
22
|
{
|
|
21
23
|
public function __construct(
|
|
@@ -36,25 +38,6 @@ class ArrayNode extends ExpressionNode
|
|
|
36
38
|
|
|
37
39
|
public function print(PrintContext $context): string
|
|
38
40
|
{
|
|
39
|
-
// Converts [...$var] -> $var, because PHP 8.0 doesn't support unpacking with string keys
|
|
40
|
-
if (PHP_VERSION_ID < 80100) {
|
|
41
|
-
$res = '[';
|
|
42
|
-
$merge = false;
|
|
43
|
-
foreach ($this->items as $item) {
|
|
44
|
-
if ($item === null) {
|
|
45
|
-
$res .= ', ';
|
|
46
|
-
} elseif ($item->unpack) {
|
|
47
|
-
$res .= '], ' . $item->value->print($context) . ', [';
|
|
48
|
-
$merge = true;
|
|
49
|
-
} else {
|
|
50
|
-
$res .= $item->print($context) . ', ';
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
$res = str_ends_with($res, ', ') ? substr($res, 0, -2) : $res;
|
|
55
|
-
return $merge ? "array_merge($res])" : $res . ']';
|
|
56
|
-
}
|
|
57
|
-
|
|
58
41
|
return '[' . $context->implode($this->items) . ']';
|
|
59
42
|
}
|
|
60
43
|
|
|
@@ -64,5 +47,6 @@ class ArrayNode extends ExpressionNode
|
|
|
64
47
|
foreach ($this->items as &$item) {
|
|
65
48
|
yield $item;
|
|
66
49
|
}
|
|
50
|
+
Helpers::removeNulls($this->items);
|
|
67
51
|
}
|
|
68
52
|
}
|
|
@@ -1,23 +1,28 @@
|
|
|
1
|
-
<?php
|
|
1
|
+
<?php declare(strict_types=1);
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* This file is part of the Latte (https://latte.nette.org)
|
|
5
5
|
* Copyright (c) 2008 David Grudl (https://davidgrudl.com)
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
declare(strict_types=1);
|
|
9
|
-
|
|
10
8
|
namespace Latte\Compiler\Nodes\Php\Expression;
|
|
11
9
|
|
|
12
10
|
use Latte\CompileException;
|
|
13
11
|
use Latte\Compiler\Nodes\Php\ExpressionNode;
|
|
14
12
|
use Latte\Compiler\Nodes\Php\ListNode;
|
|
13
|
+
use Latte\Compiler\Nodes\Php\OperatorNode;
|
|
15
14
|
use Latte\Compiler\Position;
|
|
16
15
|
use Latte\Compiler\PrintContext;
|
|
17
16
|
|
|
18
17
|
|
|
19
|
-
|
|
18
|
+
/**
|
|
19
|
+
* Assignment ($var = expr or $var = &$ref).
|
|
20
|
+
*/
|
|
21
|
+
class AssignNode extends ExpressionNode implements OperatorNode
|
|
20
22
|
{
|
|
23
|
+
public const Precedence = [90, self::AssocRight];
|
|
24
|
+
|
|
25
|
+
|
|
21
26
|
public function __construct(
|
|
22
27
|
public ExpressionNode|ListNode $var,
|
|
23
28
|
public ExpressionNode $expr,
|
|
@@ -31,7 +36,15 @@ class AssignNode extends ExpressionNode
|
|
|
31
36
|
public function print(PrintContext $context): string
|
|
32
37
|
{
|
|
33
38
|
$this->validate();
|
|
34
|
-
return $context->
|
|
39
|
+
return $context->parenthesize($this, $this->var, self::AssocLeft)
|
|
40
|
+
. ($this->byRef ? ' = &' : ' = ')
|
|
41
|
+
. $context->parenthesize($this, $this->expr, self::AssocRight);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
public function getOperatorPrecedence(): array
|
|
46
|
+
{
|
|
47
|
+
return self::Precedence;
|
|
35
48
|
}
|
|
36
49
|
|
|
37
50
|
|
|
@@ -1,32 +1,35 @@
|
|
|
1
|
-
<?php
|
|
1
|
+
<?php declare(strict_types=1);
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* This file is part of the Latte (https://latte.nette.org)
|
|
5
5
|
* Copyright (c) 2008 David Grudl (https://davidgrudl.com)
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
declare(strict_types=1);
|
|
9
|
-
|
|
10
8
|
namespace Latte\Compiler\Nodes\Php\Expression;
|
|
11
9
|
|
|
12
10
|
use Latte\CompileException;
|
|
13
11
|
use Latte\Compiler\Nodes\Php\ExpressionNode;
|
|
12
|
+
use Latte\Compiler\Nodes\Php\OperatorNode;
|
|
14
13
|
use Latte\Compiler\Position;
|
|
15
14
|
use Latte\Compiler\PrintContext;
|
|
15
|
+
use function in_array;
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
/**
|
|
19
|
+
* Compound assignment ($var += expr, $var .= expr, etc.).
|
|
20
|
+
*/
|
|
21
|
+
class AssignOpNode extends ExpressionNode implements OperatorNode
|
|
19
22
|
{
|
|
20
23
|
private const Ops = ['+', '-', '*', '/', '.', '%', '&', '|', '^', '<<', '>>', '**', '??'];
|
|
21
24
|
|
|
22
25
|
|
|
23
26
|
public function __construct(
|
|
24
27
|
public ExpressionNode $var,
|
|
25
|
-
public
|
|
28
|
+
public string $operator,
|
|
26
29
|
public ExpressionNode $expr,
|
|
27
30
|
public ?Position $position = null,
|
|
28
31
|
) {
|
|
29
|
-
if (!in_array($this->operator, self::Ops, true)) {
|
|
32
|
+
if (!in_array($this->operator, self::Ops, strict: true)) {
|
|
30
33
|
throw new \InvalidArgumentException("Unexpected operator '$this->operator'");
|
|
31
34
|
}
|
|
32
35
|
$this->validate();
|
|
@@ -36,7 +39,15 @@ class AssignOpNode extends ExpressionNode
|
|
|
36
39
|
public function print(PrintContext $context): string
|
|
37
40
|
{
|
|
38
41
|
$this->validate();
|
|
39
|
-
return $context->
|
|
42
|
+
return $context->parenthesize($this, $this->var, self::AssocLeft)
|
|
43
|
+
. ' ' . $this->operator . '= '
|
|
44
|
+
. $context->parenthesize($this, $this->expr, self::AssocRight);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
public function getOperatorPrecedence(): array
|
|
49
|
+
{
|
|
50
|
+
return AssignNode::Precedence;
|
|
40
51
|
}
|
|
41
52
|
|
|
42
53
|
|
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
<?php
|
|
1
|
+
<?php declare(strict_types=1);
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* This file is part of the Latte (https://latte.nette.org)
|
|
5
5
|
* Copyright (c) 2008 David Grudl (https://davidgrudl.com)
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
declare(strict_types=1);
|
|
9
|
-
|
|
10
8
|
namespace Latte\Compiler\Nodes\Php\Expression;
|
|
11
9
|
|
|
12
10
|
use Latte\Compiler\Node;
|
|
@@ -14,10 +12,13 @@ use Latte\Compiler\Nodes\Php\ExpressionNode;
|
|
|
14
12
|
use Latte\Compiler\PrintContext;
|
|
15
13
|
|
|
16
14
|
|
|
15
|
+
/**
|
|
16
|
+
* Code generator hidden from compiler passes. Pass child nodes for traversal.
|
|
17
|
+
*/
|
|
17
18
|
class AuxiliaryNode extends ExpressionNode
|
|
18
19
|
{
|
|
19
20
|
public function __construct(
|
|
20
|
-
public
|
|
21
|
+
public readonly \Closure $print,
|
|
21
22
|
/** @var (?Node)[] */
|
|
22
23
|
public array $nodes = [],
|
|
23
24
|
) {
|