From abadd5bc3851883a6628a1644136b27380358226 Mon Sep 17 00:00:00 2001 From: mattbk Date: Wed, 28 Oct 2015 22:04:20 -0500 Subject: [PATCH] Start working Modified some paths to be more generic and not require rewrite. Some instances of phase names have been changed, others are still in process. --- .gitignore | 4 + .htaccess | 4 +- Twig/Autoloader.php | 54 + Twig/BaseNodeVisitor.php | 62 + Twig/Cache/Filesystem.php | 96 + Twig/Cache/Null.php | 48 + Twig/CacheInterface.php | 56 + Twig/Compiler.php | 277 +++ Twig/CompilerInterface.php | 36 + Twig/Environment.php | 1355 ++++++++++++++ Twig/Error.php | 250 +++ Twig/Error/Loader.php | 31 + Twig/Error/Runtime.php | 20 + Twig/Error/Syntax.php | 20 + Twig/ExistsLoaderInterface.php | 29 + Twig/ExpressionParser.php | 645 +++++++ Twig/Extension.php | 75 + Twig/Extension/Core.php | 1574 +++++++++++++++++ Twig/Extension/Debug.php | 71 + Twig/Extension/Escaper.php | 122 ++ Twig/Extension/Optimizer.php | 35 + Twig/Extension/Profiler.php | 52 + Twig/Extension/Sandbox.php | 112 ++ Twig/Extension/Staging.php | 115 ++ Twig/Extension/StringLoader.php | 47 + Twig/ExtensionInterface.php | 83 + Twig/FileExtensionEscapingStrategy.php | 58 + Twig/Filter.php | 84 + Twig/Filter/Function.php | 40 + Twig/Filter/Method.php | 42 + Twig/Filter/Node.php | 42 + Twig/FilterCallableInterface.php | 24 + Twig/FilterInterface.php | 43 + Twig/Function.php | 74 + Twig/Function/Function.php | 41 + Twig/Function/Method.php | 43 + Twig/Function/Node.php | 42 + Twig/FunctionCallableInterface.php | 24 + Twig/FunctionInterface.php | 40 + Twig/Lexer.php | 411 +++++ Twig/LexerInterface.php | 32 + Twig/Loader/Array.php | 95 + Twig/Loader/Chain.php | 138 ++ Twig/Loader/Filesystem.php | 260 +++ Twig/Loader/String.php | 63 + Twig/LoaderInterface.php | 53 + Twig/Markup.php | 37 + Twig/Node.php | 231 +++ Twig/Node/AutoEscape.php | 39 + Twig/Node/Block.php | 44 + Twig/Node/BlockReference.php | 37 + Twig/Node/Body.php | 19 + Twig/Node/CheckSecurity.php | 78 + Twig/Node/Do.php | 38 + Twig/Node/Embed.php | 42 + Twig/Node/Expression.php | 20 + Twig/Node/Expression/Array.php | 86 + Twig/Node/Expression/AssignName.php | 28 + Twig/Node/Expression/Binary.php | 40 + Twig/Node/Expression/Binary/Add.php | 18 + Twig/Node/Expression/Binary/And.php | 18 + Twig/Node/Expression/Binary/BitwiseAnd.php | 18 + Twig/Node/Expression/Binary/BitwiseOr.php | 18 + Twig/Node/Expression/Binary/BitwiseXor.php | 18 + Twig/Node/Expression/Binary/Concat.php | 18 + Twig/Node/Expression/Binary/Div.php | 18 + Twig/Node/Expression/Binary/EndsWith.php | 30 + Twig/Node/Expression/Binary/Equal.php | 17 + Twig/Node/Expression/Binary/FloorDiv.php | 29 + Twig/Node/Expression/Binary/Greater.php | 17 + Twig/Node/Expression/Binary/GreaterEqual.php | 17 + Twig/Node/Expression/Binary/In.php | 33 + Twig/Node/Expression/Binary/Less.php | 17 + Twig/Node/Expression/Binary/LessEqual.php | 17 + Twig/Node/Expression/Binary/Matches.php | 28 + Twig/Node/Expression/Binary/Mod.php | 18 + Twig/Node/Expression/Binary/Mul.php | 18 + Twig/Node/Expression/Binary/NotEqual.php | 17 + Twig/Node/Expression/Binary/NotIn.php | 33 + Twig/Node/Expression/Binary/Or.php | 18 + Twig/Node/Expression/Binary/Power.php | 33 + Twig/Node/Expression/Binary/Range.php | 33 + Twig/Node/Expression/Binary/StartsWith.php | 30 + Twig/Node/Expression/Binary/Sub.php | 18 + Twig/Node/Expression/BlockReference.php | 51 + Twig/Node/Expression/Call.php | 247 +++ Twig/Node/Expression/Conditional.php | 31 + Twig/Node/Expression/Constant.php | 23 + Twig/Node/Expression/ExtensionReference.php | 33 + Twig/Node/Expression/Filter.php | 39 + Twig/Node/Expression/Filter/Default.php | 43 + Twig/Node/Expression/Function.php | 38 + Twig/Node/Expression/GetAttr.php | 63 + Twig/Node/Expression/MethodCall.php | 41 + Twig/Node/Expression/Name.php | 98 + Twig/Node/Expression/Parent.php | 47 + Twig/Node/Expression/TempName.php | 26 + Twig/Node/Expression/Test.php | 35 + Twig/Node/Expression/Test/Constant.php | 46 + Twig/Node/Expression/Test/Defined.php | 54 + Twig/Node/Expression/Test/Divisibleby.php | 33 + Twig/Node/Expression/Test/Even.php | 32 + Twig/Node/Expression/Test/Null.php | 31 + Twig/Node/Expression/Test/Odd.php | 32 + Twig/Node/Expression/Test/Sameas.php | 29 + Twig/Node/Expression/Unary.php | 27 + Twig/Node/Expression/Unary/Neg.php | 18 + Twig/Node/Expression/Unary/Not.php | 18 + Twig/Node/Expression/Unary/Pos.php | 18 + Twig/Node/Flush.php | 36 + Twig/Node/For.php | 111 ++ Twig/Node/ForLoop.php | 55 + Twig/Node/If.php | 66 + Twig/Node/Import.php | 54 + Twig/Node/Include.php | 88 + Twig/Node/Macro.php | 123 ++ Twig/Node/Module.php | 408 +++++ Twig/Node/Print.php | 39 + Twig/Node/Sandbox.php | 47 + Twig/Node/SandboxedPrint.php | 61 + Twig/Node/Set.php | 101 ++ Twig/Node/SetTemp.php | 35 + Twig/Node/Spaceless.php | 40 + Twig/Node/Text.php | 39 + Twig/NodeInterface.php | 31 + Twig/NodeOutputInterface.php | 19 + Twig/NodeTraverser.php | 89 + Twig/NodeVisitor/Escaper.php | 157 ++ Twig/NodeVisitor/Optimizer.php | 271 +++ Twig/NodeVisitor/SafeAnalysis.php | 154 ++ Twig/NodeVisitor/Sandbox.php | 82 + Twig/NodeVisitorInterface.php | 47 + Twig/Parser.php | 399 +++++ Twig/ParserInterface.php | 31 + Twig/Profiler/Dumper/Blackfire.php | 68 + Twig/Profiler/Dumper/Html.php | 43 + Twig/Profiler/Dumper/Text.php | 68 + Twig/Profiler/Node/EnterProfile.php | 40 + Twig/Profiler/Node/LeaveProfile.php | 34 + Twig/Profiler/NodeVisitor/Profiler.php | 72 + Twig/Profiler/Profile.php | 160 ++ Twig/Sandbox/SecurityError.php | 19 + .../Sandbox/SecurityNotAllowedFilterError.php | 31 + .../SecurityNotAllowedFunctionError.php | 31 + Twig/Sandbox/SecurityNotAllowedTagError.php | 31 + Twig/Sandbox/SecurityPolicy.php | 119 ++ Twig/Sandbox/SecurityPolicyInterface.php | 24 + Twig/SimpleFilter.php | 112 ++ Twig/SimpleFunction.php | 102 ++ Twig/SimpleTest.php | 64 + Twig/Template.php | 614 +++++++ Twig/TemplateInterface.php | 48 + Twig/Test.php | 37 + Twig/Test/Function.php | 38 + Twig/Test/IntegrationTestCase.php | 230 +++ Twig/Test/Method.php | 40 + Twig/Test/Node.php | 40 + Twig/Test/NodeTestCase.php | 60 + Twig/TestCallableInterface.php | 22 + Twig/TestInterface.php | 27 + Twig/Token.php | 216 +++ Twig/TokenParser.php | 33 + Twig/TokenParser/AutoEscape.php | 91 + Twig/TokenParser/Block.php | 81 + Twig/TokenParser/Do.php | 42 + Twig/TokenParser/Embed.php | 66 + Twig/TokenParser/Extends.php | 52 + Twig/TokenParser/Filter.php | 61 + Twig/TokenParser/Flush.php | 42 + Twig/TokenParser/For.php | 135 ++ Twig/TokenParser/From.php | 74 + Twig/TokenParser/If.php | 94 + Twig/TokenParser/Import.php | 49 + Twig/TokenParser/Include.php | 75 + Twig/TokenParser/Macro.php | 68 + Twig/TokenParser/Sandbox.php | 68 + Twig/TokenParser/Set.php | 83 + Twig/TokenParser/Spaceless.php | 59 + Twig/TokenParser/Use.php | 76 + Twig/TokenParserBroker.php | 141 ++ Twig/TokenParserBrokerInterface.php | 46 + Twig/TokenParserInterface.php | 43 + Twig/TokenStream.php | 155 ++ Twig/Util/DeprecationCollector.php | 82 + Twig/Util/TemplateDirIterator.php | 26 + img/scene1-with.png | Bin 0 -> 195683 bytes img/scene1-without.png | Bin 0 -> 158024 bytes img/scene2-with.png | Bin 0 -> 195683 bytes img/scene2-without.png | Bin 0 -> 158024 bytes index.php | 5 +- js/change.js | 4 +- views/index.html.twig | 5 +- 192 files changed, 16085 insertions(+), 7 deletions(-) create mode 100644 .gitignore mode change 100644 => 100755 .htaccess create mode 100644 Twig/Autoloader.php create mode 100644 Twig/BaseNodeVisitor.php create mode 100644 Twig/Cache/Filesystem.php create mode 100644 Twig/Cache/Null.php create mode 100644 Twig/CacheInterface.php create mode 100644 Twig/Compiler.php create mode 100644 Twig/CompilerInterface.php create mode 100644 Twig/Environment.php create mode 100644 Twig/Error.php create mode 100644 Twig/Error/Loader.php create mode 100644 Twig/Error/Runtime.php create mode 100644 Twig/Error/Syntax.php create mode 100644 Twig/ExistsLoaderInterface.php create mode 100644 Twig/ExpressionParser.php create mode 100644 Twig/Extension.php create mode 100644 Twig/Extension/Core.php create mode 100644 Twig/Extension/Debug.php create mode 100644 Twig/Extension/Escaper.php create mode 100644 Twig/Extension/Optimizer.php create mode 100644 Twig/Extension/Profiler.php create mode 100644 Twig/Extension/Sandbox.php create mode 100644 Twig/Extension/Staging.php create mode 100644 Twig/Extension/StringLoader.php create mode 100644 Twig/ExtensionInterface.php create mode 100644 Twig/FileExtensionEscapingStrategy.php create mode 100644 Twig/Filter.php create mode 100644 Twig/Filter/Function.php create mode 100644 Twig/Filter/Method.php create mode 100644 Twig/Filter/Node.php create mode 100644 Twig/FilterCallableInterface.php create mode 100644 Twig/FilterInterface.php create mode 100644 Twig/Function.php create mode 100644 Twig/Function/Function.php create mode 100644 Twig/Function/Method.php create mode 100644 Twig/Function/Node.php create mode 100644 Twig/FunctionCallableInterface.php create mode 100644 Twig/FunctionInterface.php create mode 100644 Twig/Lexer.php create mode 100644 Twig/LexerInterface.php create mode 100644 Twig/Loader/Array.php create mode 100644 Twig/Loader/Chain.php create mode 100644 Twig/Loader/Filesystem.php create mode 100644 Twig/Loader/String.php create mode 100644 Twig/LoaderInterface.php create mode 100644 Twig/Markup.php create mode 100644 Twig/Node.php create mode 100644 Twig/Node/AutoEscape.php create mode 100644 Twig/Node/Block.php create mode 100644 Twig/Node/BlockReference.php create mode 100644 Twig/Node/Body.php create mode 100644 Twig/Node/CheckSecurity.php create mode 100644 Twig/Node/Do.php create mode 100644 Twig/Node/Embed.php create mode 100644 Twig/Node/Expression.php create mode 100644 Twig/Node/Expression/Array.php create mode 100644 Twig/Node/Expression/AssignName.php create mode 100644 Twig/Node/Expression/Binary.php create mode 100644 Twig/Node/Expression/Binary/Add.php create mode 100644 Twig/Node/Expression/Binary/And.php create mode 100644 Twig/Node/Expression/Binary/BitwiseAnd.php create mode 100644 Twig/Node/Expression/Binary/BitwiseOr.php create mode 100644 Twig/Node/Expression/Binary/BitwiseXor.php create mode 100644 Twig/Node/Expression/Binary/Concat.php create mode 100644 Twig/Node/Expression/Binary/Div.php create mode 100644 Twig/Node/Expression/Binary/EndsWith.php create mode 100644 Twig/Node/Expression/Binary/Equal.php create mode 100644 Twig/Node/Expression/Binary/FloorDiv.php create mode 100644 Twig/Node/Expression/Binary/Greater.php create mode 100644 Twig/Node/Expression/Binary/GreaterEqual.php create mode 100644 Twig/Node/Expression/Binary/In.php create mode 100644 Twig/Node/Expression/Binary/Less.php create mode 100644 Twig/Node/Expression/Binary/LessEqual.php create mode 100644 Twig/Node/Expression/Binary/Matches.php create mode 100644 Twig/Node/Expression/Binary/Mod.php create mode 100644 Twig/Node/Expression/Binary/Mul.php create mode 100644 Twig/Node/Expression/Binary/NotEqual.php create mode 100644 Twig/Node/Expression/Binary/NotIn.php create mode 100644 Twig/Node/Expression/Binary/Or.php create mode 100644 Twig/Node/Expression/Binary/Power.php create mode 100644 Twig/Node/Expression/Binary/Range.php create mode 100644 Twig/Node/Expression/Binary/StartsWith.php create mode 100644 Twig/Node/Expression/Binary/Sub.php create mode 100644 Twig/Node/Expression/BlockReference.php create mode 100644 Twig/Node/Expression/Call.php create mode 100644 Twig/Node/Expression/Conditional.php create mode 100644 Twig/Node/Expression/Constant.php create mode 100644 Twig/Node/Expression/ExtensionReference.php create mode 100644 Twig/Node/Expression/Filter.php create mode 100644 Twig/Node/Expression/Filter/Default.php create mode 100644 Twig/Node/Expression/Function.php create mode 100644 Twig/Node/Expression/GetAttr.php create mode 100644 Twig/Node/Expression/MethodCall.php create mode 100644 Twig/Node/Expression/Name.php create mode 100644 Twig/Node/Expression/Parent.php create mode 100644 Twig/Node/Expression/TempName.php create mode 100644 Twig/Node/Expression/Test.php create mode 100644 Twig/Node/Expression/Test/Constant.php create mode 100644 Twig/Node/Expression/Test/Defined.php create mode 100644 Twig/Node/Expression/Test/Divisibleby.php create mode 100644 Twig/Node/Expression/Test/Even.php create mode 100644 Twig/Node/Expression/Test/Null.php create mode 100644 Twig/Node/Expression/Test/Odd.php create mode 100644 Twig/Node/Expression/Test/Sameas.php create mode 100644 Twig/Node/Expression/Unary.php create mode 100644 Twig/Node/Expression/Unary/Neg.php create mode 100644 Twig/Node/Expression/Unary/Not.php create mode 100644 Twig/Node/Expression/Unary/Pos.php create mode 100644 Twig/Node/Flush.php create mode 100644 Twig/Node/For.php create mode 100644 Twig/Node/ForLoop.php create mode 100644 Twig/Node/If.php create mode 100644 Twig/Node/Import.php create mode 100644 Twig/Node/Include.php create mode 100644 Twig/Node/Macro.php create mode 100644 Twig/Node/Module.php create mode 100644 Twig/Node/Print.php create mode 100644 Twig/Node/Sandbox.php create mode 100644 Twig/Node/SandboxedPrint.php create mode 100644 Twig/Node/Set.php create mode 100644 Twig/Node/SetTemp.php create mode 100644 Twig/Node/Spaceless.php create mode 100644 Twig/Node/Text.php create mode 100644 Twig/NodeInterface.php create mode 100644 Twig/NodeOutputInterface.php create mode 100644 Twig/NodeTraverser.php create mode 100644 Twig/NodeVisitor/Escaper.php create mode 100644 Twig/NodeVisitor/Optimizer.php create mode 100644 Twig/NodeVisitor/SafeAnalysis.php create mode 100644 Twig/NodeVisitor/Sandbox.php create mode 100644 Twig/NodeVisitorInterface.php create mode 100644 Twig/Parser.php create mode 100644 Twig/ParserInterface.php create mode 100644 Twig/Profiler/Dumper/Blackfire.php create mode 100644 Twig/Profiler/Dumper/Html.php create mode 100644 Twig/Profiler/Dumper/Text.php create mode 100644 Twig/Profiler/Node/EnterProfile.php create mode 100644 Twig/Profiler/Node/LeaveProfile.php create mode 100644 Twig/Profiler/NodeVisitor/Profiler.php create mode 100644 Twig/Profiler/Profile.php create mode 100644 Twig/Sandbox/SecurityError.php create mode 100644 Twig/Sandbox/SecurityNotAllowedFilterError.php create mode 100644 Twig/Sandbox/SecurityNotAllowedFunctionError.php create mode 100644 Twig/Sandbox/SecurityNotAllowedTagError.php create mode 100644 Twig/Sandbox/SecurityPolicy.php create mode 100644 Twig/Sandbox/SecurityPolicyInterface.php create mode 100644 Twig/SimpleFilter.php create mode 100644 Twig/SimpleFunction.php create mode 100644 Twig/SimpleTest.php create mode 100644 Twig/Template.php create mode 100644 Twig/TemplateInterface.php create mode 100644 Twig/Test.php create mode 100644 Twig/Test/Function.php create mode 100644 Twig/Test/IntegrationTestCase.php create mode 100644 Twig/Test/Method.php create mode 100644 Twig/Test/Node.php create mode 100644 Twig/Test/NodeTestCase.php create mode 100644 Twig/TestCallableInterface.php create mode 100644 Twig/TestInterface.php create mode 100644 Twig/Token.php create mode 100644 Twig/TokenParser.php create mode 100644 Twig/TokenParser/AutoEscape.php create mode 100644 Twig/TokenParser/Block.php create mode 100644 Twig/TokenParser/Do.php create mode 100644 Twig/TokenParser/Embed.php create mode 100644 Twig/TokenParser/Extends.php create mode 100644 Twig/TokenParser/Filter.php create mode 100644 Twig/TokenParser/Flush.php create mode 100644 Twig/TokenParser/For.php create mode 100644 Twig/TokenParser/From.php create mode 100644 Twig/TokenParser/If.php create mode 100644 Twig/TokenParser/Import.php create mode 100644 Twig/TokenParser/Include.php create mode 100644 Twig/TokenParser/Macro.php create mode 100644 Twig/TokenParser/Sandbox.php create mode 100644 Twig/TokenParser/Set.php create mode 100644 Twig/TokenParser/Spaceless.php create mode 100644 Twig/TokenParser/Use.php create mode 100644 Twig/TokenParserBroker.php create mode 100644 Twig/TokenParserBrokerInterface.php create mode 100644 Twig/TokenParserInterface.php create mode 100644 Twig/TokenStream.php create mode 100644 Twig/Util/DeprecationCollector.php create mode 100644 Twig/Util/TemplateDirIterator.php create mode 100644 img/scene1-with.png create mode 100644 img/scene1-without.png create mode 100644 img/scene2-with.png create mode 100644 img/scene2-without.png mode change 100644 => 100755 index.php diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e43da88 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ + +settings.json + +error_log diff --git a/.htaccess b/.htaccess old mode 100644 new mode 100755 index 7fd4e97..61c79b6 --- a/.htaccess +++ b/.htaccess @@ -1,9 +1,11 @@ +DirectoryIndex index.php index.shtml index.html + RewriteEngine On RewriteBase / RewriteRule ^(start|finish|results)/?$ index.php?mode=$1 [L] - RewriteRule ^phase/(notable|unnoted|renoted)/?$ index.php?mode=phase&phase=$1 [L] + # RewriteRule ^phase/(notable|unnoted|renoted)/?$ index.php?mode=phase&phase=$1 [L] RewriteRule ^results/(download|filtered)/? index.php?mode=results&$1=1 [L] diff --git a/Twig/Autoloader.php b/Twig/Autoloader.php new file mode 100644 index 0000000..d47583f --- /dev/null +++ b/Twig/Autoloader.php @@ -0,0 +1,54 @@ + + * + * @deprecated Use Composer instead. Will be removed in Twig 2.0. + */ +class Twig_Autoloader +{ + /** + * Registers Twig_Autoloader as an SPL autoloader. + * + * @param bool $prepend Whether to prepend the autoloader or not. + */ + public static function register($prepend = false) + { + @trigger_error('Using Twig_Autoloader is deprecated. Use Composer instead.', E_USER_DEPRECATED); + + if (PHP_VERSION_ID < 50300) { + spl_autoload_register(array(__CLASS__, 'autoload')); + } else { + spl_autoload_register(array(__CLASS__, 'autoload'), true, $prepend); + } + } + + /** + * Handles autoloading of classes. + * + * @param string $class A class name. + */ + public static function autoload($class) + { + if (0 !== strpos($class, 'Twig')) { + return; + } + + if (is_file($file = dirname(__FILE__).'/../'.str_replace(array('_', "\0"), array('/', ''), $class).'.php')) { + require $file; + } + } +} diff --git a/Twig/BaseNodeVisitor.php b/Twig/BaseNodeVisitor.php new file mode 100644 index 0000000..3c6ef66 --- /dev/null +++ b/Twig/BaseNodeVisitor.php @@ -0,0 +1,62 @@ + + */ +abstract class Twig_BaseNodeVisitor implements Twig_NodeVisitorInterface +{ + /** + * {@inheritdoc} + */ + final public function enterNode(Twig_NodeInterface $node, Twig_Environment $env) + { + if (!$node instanceof Twig_Node) { + throw new LogicException('Twig_BaseNodeVisitor only supports Twig_Node instances.'); + } + + return $this->doEnterNode($node, $env); + } + + /** + * {@inheritdoc} + */ + final public function leaveNode(Twig_NodeInterface $node, Twig_Environment $env) + { + if (!$node instanceof Twig_Node) { + throw new LogicException('Twig_BaseNodeVisitor only supports Twig_Node instances.'); + } + + return $this->doLeaveNode($node, $env); + } + + /** + * Called before child nodes are visited. + * + * @param Twig_Node $node The node to visit + * @param Twig_Environment $env The Twig environment instance + * + * @return Twig_Node The modified node + */ + abstract protected function doEnterNode(Twig_Node $node, Twig_Environment $env); + + /** + * Called after child nodes are visited. + * + * @param Twig_Node $node The node to visit + * @param Twig_Environment $env The Twig environment instance + * + * @return Twig_Node|false The modified node or false if the node must be removed + */ + abstract protected function doLeaveNode(Twig_Node $node, Twig_Environment $env); +} diff --git a/Twig/Cache/Filesystem.php b/Twig/Cache/Filesystem.php new file mode 100644 index 0000000..2c2182a --- /dev/null +++ b/Twig/Cache/Filesystem.php @@ -0,0 +1,96 @@ + + */ +class Twig_Cache_Filesystem implements Twig_CacheInterface +{ + const FORCE_BYTECODE_INVALIDATION = 1; + + private $directory; + private $options; + + /** + * @param $directory string The root cache directory + * @param $options int A set of options + */ + public function __construct($directory, $options = 0) + { + $this->directory = $directory; + $this->options = $options; + } + + /** + * {@inheritdoc} + */ + public function generateKey($name, $className) + { + $hash = hash('sha256', $className); + + return $this->directory.'/'.$hash[0].$hash[1].'/'.$hash.'.php'; + } + + /** + * {@inheritdoc} + */ + public function load($key) + { + @include_once $key; + } + + /** + * {@inheritdoc} + */ + public function write($key, $content) + { + $dir = dirname($key); + if (!is_dir($dir)) { + if (false === @mkdir($dir, 0777, true) && !is_dir($dir)) { + throw new RuntimeException(sprintf('Unable to create the cache directory (%s).', $dir)); + } + } elseif (!is_writable($dir)) { + throw new RuntimeException(sprintf('Unable to write in the cache directory (%s).', $dir)); + } + + $tmpFile = tempnam($dir, basename($key)); + if (false !== @file_put_contents($tmpFile, $content) && @rename($tmpFile, $key)) { + @chmod($key, 0666 & ~umask()); + + if (self::FORCE_BYTECODE_INVALIDATION == ($this->options & self::FORCE_BYTECODE_INVALIDATION)) { + // Compile cached file into bytecode cache + if (function_exists('opcache_invalidate')) { + opcache_invalidate($key, true); + } elseif (function_exists('apc_compile_file')) { + apc_compile_file($key); + } + } + + return; + } + + throw new RuntimeException(sprintf('Failed to write cache file "%s".', $key)); + } + + /** + * {@inheritdoc} + */ + public function getTimestamp($key) + { + if (!file_exists($key)) { + return 0; + } + + return (int) @filemtime($key); + } +} diff --git a/Twig/Cache/Null.php b/Twig/Cache/Null.php new file mode 100644 index 0000000..fde8c80 --- /dev/null +++ b/Twig/Cache/Null.php @@ -0,0 +1,48 @@ + + */ +class Twig_Cache_Null implements Twig_CacheInterface +{ + /** + * {@inheritdoc} + */ + public function generateKey($name, $className) + { + return ''; + } + + /** + * {@inheritdoc} + */ + public function write($key, $content) + { + } + + /** + * {@inheritdoc} + */ + public function load($key) + { + } + + /** + * {@inheritdoc} + */ + public function getTimestamp($key) + { + return 0; + } +} diff --git a/Twig/CacheInterface.php b/Twig/CacheInterface.php new file mode 100644 index 0000000..9b17e0f --- /dev/null +++ b/Twig/CacheInterface.php @@ -0,0 +1,56 @@ + + */ +interface Twig_CacheInterface +{ + /** + * Generates a cache key for the given template class name. + * + * @param string $name The template name + * @param string $className The template class name + * + * @return string + */ + public function generateKey($name, $className); + + /** + * Writes the compiled template to cache. + * + * @param string $key The cache key + * @param string $content The template representation as a PHP class + */ + public function write($key, $content); + + /** + * Loads a template from the cache. + * + * @param string $key The cache key + */ + public function load($key); + + /** + * Returns the modification timestamp of a key. + * + * @param string $key The cache key + * + * @return int + */ + public function getTimestamp($key); +} diff --git a/Twig/Compiler.php b/Twig/Compiler.php new file mode 100644 index 0000000..abea3aa --- /dev/null +++ b/Twig/Compiler.php @@ -0,0 +1,277 @@ + + */ +class Twig_Compiler implements Twig_CompilerInterface +{ + protected $lastLine; + protected $source; + protected $indentation; + protected $env; + protected $debugInfo = array(); + protected $sourceOffset; + protected $sourceLine; + protected $filename; + + /** + * Constructor. + * + * @param Twig_Environment $env The twig environment instance + */ + public function __construct(Twig_Environment $env) + { + $this->env = $env; + } + + public function getFilename() + { + return $this->filename; + } + + /** + * Returns the environment instance related to this compiler. + * + * @return Twig_Environment The environment instance + */ + public function getEnvironment() + { + return $this->env; + } + + /** + * Gets the current PHP code after compilation. + * + * @return string The PHP code + */ + public function getSource() + { + return $this->source; + } + + /** + * Compiles a node. + * + * @param Twig_NodeInterface $node The node to compile + * @param int $indentation The current indentation + * + * @return Twig_Compiler The current compiler instance + */ + public function compile(Twig_NodeInterface $node, $indentation = 0) + { + $this->lastLine = null; + $this->source = ''; + $this->debugInfo = array(); + $this->sourceOffset = 0; + // source code starts at 1 (as we then increment it when we encounter new lines) + $this->sourceLine = 1; + $this->indentation = $indentation; + + if ($node instanceof Twig_Node_Module) { + $this->filename = $node->getAttribute('filename'); + } + + $node->compile($this); + + return $this; + } + + public function subcompile(Twig_NodeInterface $node, $raw = true) + { + if (false === $raw) { + $this->addIndentation(); + } + + $node->compile($this); + + return $this; + } + + /** + * Adds a raw string to the compiled code. + * + * @param string $string The string + * + * @return Twig_Compiler The current compiler instance + */ + public function raw($string) + { + $this->source .= $string; + + return $this; + } + + /** + * Writes a string to the compiled code by adding indentation. + * + * @return Twig_Compiler The current compiler instance + */ + public function write() + { + $strings = func_get_args(); + foreach ($strings as $string) { + $this->addIndentation(); + $this->source .= $string; + } + + return $this; + } + + /** + * Appends an indentation to the current PHP code after compilation. + * + * @return Twig_Compiler The current compiler instance + */ + public function addIndentation() + { + $this->source .= str_repeat(' ', $this->indentation * 4); + + return $this; + } + + /** + * Adds a quoted string to the compiled code. + * + * @param string $value The string + * + * @return Twig_Compiler The current compiler instance + */ + public function string($value) + { + $this->source .= sprintf('"%s"', addcslashes($value, "\0\t\"\$\\")); + + return $this; + } + + /** + * Returns a PHP representation of a given value. + * + * @param mixed $value The value to convert + * + * @return Twig_Compiler The current compiler instance + */ + public function repr($value) + { + if (is_int($value) || is_float($value)) { + if (false !== $locale = setlocale(LC_NUMERIC, 0)) { + setlocale(LC_NUMERIC, 'C'); + } + + $this->raw($value); + + if (false !== $locale) { + setlocale(LC_NUMERIC, $locale); + } + } elseif (null === $value) { + $this->raw('null'); + } elseif (is_bool($value)) { + $this->raw($value ? 'true' : 'false'); + } elseif (is_array($value)) { + $this->raw('array('); + $first = true; + foreach ($value as $key => $v) { + if (!$first) { + $this->raw(', '); + } + $first = false; + $this->repr($key); + $this->raw(' => '); + $this->repr($v); + } + $this->raw(')'); + } else { + $this->string($value); + } + + return $this; + } + + /** + * Adds debugging information. + * + * @param Twig_NodeInterface $node The related twig node + * + * @return Twig_Compiler The current compiler instance + */ + public function addDebugInfo(Twig_NodeInterface $node) + { + if ($node->getLine() != $this->lastLine) { + $this->write(sprintf("// line %d\n", $node->getLine())); + + // when mbstring.func_overload is set to 2 + // mb_substr_count() replaces substr_count() + // but they have different signatures! + if (((int) ini_get('mbstring.func_overload')) & 2) { + // this is much slower than the "right" version + $this->sourceLine += mb_substr_count(mb_substr($this->source, $this->sourceOffset), "\n"); + } else { + $this->sourceLine += substr_count($this->source, "\n", $this->sourceOffset); + } + $this->sourceOffset = strlen($this->source); + $this->debugInfo[$this->sourceLine] = $node->getLine(); + + $this->lastLine = $node->getLine(); + } + + return $this; + } + + public function getDebugInfo() + { + ksort($this->debugInfo); + + return $this->debugInfo; + } + + /** + * Indents the generated code. + * + * @param int $step The number of indentation to add + * + * @return Twig_Compiler The current compiler instance + */ + public function indent($step = 1) + { + $this->indentation += $step; + + return $this; + } + + /** + * Outdents the generated code. + * + * @param int $step The number of indentation to remove + * + * @return Twig_Compiler The current compiler instance + * + * @throws LogicException When trying to outdent too much so the indentation would become negative + */ + public function outdent($step = 1) + { + // can't outdent by more steps than the current indentation level + if ($this->indentation < $step) { + throw new LogicException('Unable to call outdent() as the indentation would become negative'); + } + + $this->indentation -= $step; + + return $this; + } + + public function getVarName() + { + return sprintf('__internal_%s', hash('sha256', uniqid(mt_rand(), true), false)); + } +} diff --git a/Twig/CompilerInterface.php b/Twig/CompilerInterface.php new file mode 100644 index 0000000..272c767 --- /dev/null +++ b/Twig/CompilerInterface.php @@ -0,0 +1,36 @@ + + * + * @deprecated since 1.12 (to be removed in 3.0) + */ +interface Twig_CompilerInterface +{ + /** + * Compiles a node. + * + * @param Twig_NodeInterface $node The node to compile + * + * @return Twig_CompilerInterface The current compiler instance + */ + public function compile(Twig_NodeInterface $node); + + /** + * Gets the current PHP code after compilation. + * + * @return string The PHP code + */ + public function getSource(); +} diff --git a/Twig/Environment.php b/Twig/Environment.php new file mode 100644 index 0000000..04a656a --- /dev/null +++ b/Twig/Environment.php @@ -0,0 +1,1355 @@ + + */ +class Twig_Environment +{ + const VERSION = '1.22.3'; + + protected $charset; + protected $loader; + protected $debug; + protected $autoReload; + protected $cache; + protected $lexer; + protected $parser; + protected $compiler; + protected $baseTemplateClass; + protected $extensions; + protected $parsers; + protected $visitors; + protected $filters; + protected $tests; + protected $functions; + protected $globals; + protected $runtimeInitialized = false; + protected $extensionInitialized = false; + protected $loadedTemplates; + protected $strictVariables; + protected $unaryOperators; + protected $binaryOperators; + protected $templateClassPrefix = '__TwigTemplate_'; + protected $functionCallbacks = array(); + protected $filterCallbacks = array(); + protected $staging; + + private $originalCache; + private $bcWriteCacheFile = false; + private $bcGetCacheFilename = false; + private $lastModifiedExtension = 0; + + /** + * Constructor. + * + * Available options: + * + * * debug: When set to true, it automatically set "auto_reload" to true as + * well (default to false). + * + * * charset: The charset used by the templates (default to UTF-8). + * + * * base_template_class: The base template class to use for generated + * templates (default to Twig_Template). + * + * * cache: An absolute path where to store the compiled templates, + * a Twig_Cache_Interface implementation, + * or false to disable compilation cache (default). + * + * * auto_reload: Whether to reload the template if the original source changed. + * If you don't provide the auto_reload option, it will be + * determined automatically based on the debug value. + * + * * strict_variables: Whether to ignore invalid variables in templates + * (default to false). + * + * * autoescape: Whether to enable auto-escaping (default to html): + * * false: disable auto-escaping + * * true: equivalent to html + * * html, js: set the autoescaping to one of the supported strategies + * * filename: set the autoescaping strategy based on the template filename extension + * * PHP callback: a PHP callback that returns an escaping strategy based on the template "filename" + * + * * optimizations: A flag that indicates which optimizations to apply + * (default to -1 which means that all optimizations are enabled; + * set it to 0 to disable). + * + * @param Twig_LoaderInterface $loader A Twig_LoaderInterface instance + * @param array $options An array of options + */ + public function __construct(Twig_LoaderInterface $loader = null, $options = array()) + { + if (null !== $loader) { + $this->setLoader($loader); + } else { + @trigger_error('Not passing a Twig_LoaderInterface as the first constructor argument of Twig_Environment is deprecated.', E_USER_DEPRECATED); + } + + $options = array_merge(array( + 'debug' => false, + 'charset' => 'UTF-8', + 'base_template_class' => 'Twig_Template', + 'strict_variables' => false, + 'autoescape' => 'html', + 'cache' => false, + 'auto_reload' => null, + 'optimizations' => -1, + ), $options); + + $this->debug = (bool) $options['debug']; + $this->charset = strtoupper($options['charset']); + $this->baseTemplateClass = $options['base_template_class']; + $this->autoReload = null === $options['auto_reload'] ? $this->debug : (bool) $options['auto_reload']; + $this->strictVariables = (bool) $options['strict_variables']; + $this->setCache($options['cache']); + + $this->addExtension(new Twig_Extension_Core()); + $this->addExtension(new Twig_Extension_Escaper($options['autoescape'])); + $this->addExtension(new Twig_Extension_Optimizer($options['optimizations'])); + $this->staging = new Twig_Extension_Staging(); + + // For BC + if (is_string($this->originalCache)) { + $r = new ReflectionMethod($this, 'writeCacheFile'); + if ($r->getDeclaringClass()->getName() !== __CLASS__) { + @trigger_error('The Twig_Environment::writeCacheFile method is deprecated and will be removed in Twig 2.0.', E_USER_DEPRECATED); + + $this->bcWriteCacheFile = true; + } + + $r = new ReflectionMethod($this, 'getCacheFilename'); + if ($r->getDeclaringClass()->getName() !== __CLASS__) { + @trigger_error('The Twig_Environment::getCacheFilename method is deprecated and will be removed in Twig 2.0.', E_USER_DEPRECATED); + + $this->bcGetCacheFilename = true; + } + } + } + + /** + * Gets the base template class for compiled templates. + * + * @return string The base template class name + */ + public function getBaseTemplateClass() + { + return $this->baseTemplateClass; + } + + /** + * Sets the base template class for compiled templates. + * + * @param string $class The base template class name + */ + public function setBaseTemplateClass($class) + { + $this->baseTemplateClass = $class; + } + + /** + * Enables debugging mode. + */ + public function enableDebug() + { + $this->debug = true; + } + + /** + * Disables debugging mode. + */ + public function disableDebug() + { + $this->debug = false; + } + + /** + * Checks if debug mode is enabled. + * + * @return bool true if debug mode is enabled, false otherwise + */ + public function isDebug() + { + return $this->debug; + } + + /** + * Enables the auto_reload option. + */ + public function enableAutoReload() + { + $this->autoReload = true; + } + + /** + * Disables the auto_reload option. + */ + public function disableAutoReload() + { + $this->autoReload = false; + } + + /** + * Checks if the auto_reload option is enabled. + * + * @return bool true if auto_reload is enabled, false otherwise + */ + public function isAutoReload() + { + return $this->autoReload; + } + + /** + * Enables the strict_variables option. + */ + public function enableStrictVariables() + { + $this->strictVariables = true; + } + + /** + * Disables the strict_variables option. + */ + public function disableStrictVariables() + { + $this->strictVariables = false; + } + + /** + * Checks if the strict_variables option is enabled. + * + * @return bool true if strict_variables is enabled, false otherwise + */ + public function isStrictVariables() + { + return $this->strictVariables; + } + + /** + * Gets the current cache implementation. + * + * @param bool $original Whether to return the original cache option or the real cache instance + * + * @return Twig_CacheInterface|string|false A Twig_CacheInterface implementation, + * an absolute path to the compiled templates, + * or false to disable cache + */ + public function getCache($original = true) + { + return $original ? $this->originalCache : $this->cache; + } + + /** + * Sets the current cache implementation. + * + * @param Twig_CacheInterface|string|false $cache A Twig_CacheInterface implementation, + * an absolute path to the compiled templates, + * or false to disable cache + */ + public function setCache($cache) + { + if (is_string($cache)) { + $this->originalCache = $cache; + $this->cache = new Twig_Cache_Filesystem($cache); + } elseif (false === $cache) { + $this->originalCache = $cache; + $this->cache = new Twig_Cache_Null(); + } elseif (null === $cache) { + @trigger_error('Using "null" as the cache strategy is deprecated and will be removed in Twig 2.0.', E_USER_DEPRECATED); + $this->originalCache = false; + $this->cache = new Twig_Cache_Null(); + } elseif ($cache instanceof Twig_CacheInterface) { + $this->originalCache = $this->cache = $cache; + } else { + throw new LogicException(sprintf('Cache can only be a string, false, or a Twig_CacheInterface implementation.')); + } + } + + /** + * Gets the cache filename for a given template. + * + * @param string $name The template name + * + * @return string|false The cache file name or false when caching is disabled + * + * @deprecated since 1.22 (to be removed in 2.0) + */ + public function getCacheFilename($name) + { + @trigger_error(sprintf('The %s method is deprecated and will be removed in Twig 2.0.', __METHOD__), E_USER_DEPRECATED); + + $key = $this->cache->generateKey($name, $this->getTemplateClass($name)); + + return !$key ? false : $key; + } + + /** + * Gets the template class associated with the given string. + * + * The generated template class is based on the following parameters: + * + * * The cache key for the given template; + * * The currently enabled extensions; + * * Whether the Twig C extension is available or not. + * + * @param string $name The name for which to calculate the template class name + * @param int|null $index The index if it is an embedded template + * + * @return string The template class name + */ + public function getTemplateClass($name, $index = null) + { + $key = $this->getLoader()->getCacheKey($name); + $key .= json_encode(array_keys($this->extensions)); + $key .= function_exists('twig_template_get_attributes'); + + return $this->templateClassPrefix.hash('sha256', $key).(null === $index ? '' : '_'.$index); + } + + /** + * Gets the template class prefix. + * + * @return string The template class prefix + * + * @deprecated since 1.22 (to be removed in 2.0) + */ + public function getTemplateClassPrefix() + { + @trigger_error(sprintf('The %s method is deprecated and will be removed in Twig 2.0.', __METHOD__), E_USER_DEPRECATED); + + return $this->templateClassPrefix; + } + + /** + * Renders a template. + * + * @param string $name The template name + * @param array $context An array of parameters to pass to the template + * + * @return string The rendered template + * + * @throws Twig_Error_Loader When the template cannot be found + * @throws Twig_Error_Syntax When an error occurred during compilation + * @throws Twig_Error_Runtime When an error occurred during rendering + */ + public function render($name, array $context = array()) + { + return $this->loadTemplate($name)->render($context); + } + + /** + * Displays a template. + * + * @param string $name The template name + * @param array $context An array of parameters to pass to the template + * + * @throws Twig_Error_Loader When the template cannot be found + * @throws Twig_Error_Syntax When an error occurred during compilation + * @throws Twig_Error_Runtime When an error occurred during rendering + */ + public function display($name, array $context = array()) + { + $this->loadTemplate($name)->display($context); + } + + /** + * Loads a template by name. + * + * @param string $name The template name + * @param int $index The index if it is an embedded template + * + * @return Twig_TemplateInterface A template instance representing the given template name + * + * @throws Twig_Error_Loader When the template cannot be found + * @throws Twig_Error_Syntax When an error occurred during compilation + */ + public function loadTemplate($name, $index = null) + { + $cls = $this->getTemplateClass($name, $index); + + if (isset($this->loadedTemplates[$cls])) { + return $this->loadedTemplates[$cls]; + } + + if (!class_exists($cls, false)) { + if ($this->bcGetCacheFilename) { + $key = $this->getCacheFilename($name); + } else { + $key = $this->cache->generateKey($name, $cls); + } + + if (!$this->isAutoReload() || $this->isTemplateFresh($name, $this->cache->getTimestamp($key))) { + $this->cache->load($key); + } + + if (!class_exists($cls, false)) { + $content = $this->compileSource($this->getLoader()->getSource($name), $name); + if ($this->bcWriteCacheFile) { + $this->writeCacheFile($key, $content); + } else { + $this->cache->write($key, $content); + } + + eval('?>'.$content); + } + } + + if (!$this->runtimeInitialized) { + $this->initRuntime(); + } + + return $this->loadedTemplates[$cls] = new $cls($this); + } + + /** + * Creates a template from source. + * + * This method should not be used as a generic way to load templates. + * + * @param string $template The template name + * + * @return Twig_Template A template instance representing the given template name + * + * @throws Twig_Error_Loader When the template cannot be found + * @throws Twig_Error_Syntax When an error occurred during compilation + */ + public function createTemplate($template) + { + $name = sprintf('__string_template__%s', hash('sha256', uniqid(mt_rand(), true), false)); + + $loader = new Twig_Loader_Chain(array( + new Twig_Loader_Array(array($name => $template)), + $current = $this->getLoader(), + )); + + $this->setLoader($loader); + try { + $template = $this->loadTemplate($name); + } catch (Exception $e) { + $this->setLoader($current); + + throw $e; + } + $this->setLoader($current); + + return $template; + } + + /** + * Returns true if the template is still fresh. + * + * Besides checking the loader for freshness information, + * this method also checks if the enabled extensions have + * not changed. + * + * @param string $name The template name + * @param int $time The last modification time of the cached template + * + * @return bool true if the template is fresh, false otherwise + */ + public function isTemplateFresh($name, $time) + { + return $this->lastModifiedExtension <= $time && $this->getLoader()->isFresh($name, $time); + } + + /** + * Tries to load a template consecutively from an array. + * + * Similar to loadTemplate() but it also accepts Twig_TemplateInterface instances and an array + * of templates where each is tried to be loaded. + * + * @param string|Twig_Template|array $names A template or an array of templates to try consecutively + * + * @return Twig_Template + * + * @throws Twig_Error_Loader When none of the templates can be found + * @throws Twig_Error_Syntax When an error occurred during compilation + */ + public function resolveTemplate($names) + { + if (!is_array($names)) { + $names = array($names); + } + + foreach ($names as $name) { + if ($name instanceof Twig_Template) { + return $name; + } + + try { + return $this->loadTemplate($name); + } catch (Twig_Error_Loader $e) { + } + } + + if (1 === count($names)) { + throw $e; + } + + throw new Twig_Error_Loader(sprintf('Unable to find one of the following templates: "%s".', implode('", "', $names))); + } + + /** + * Clears the internal template cache. + * + * @deprecated since 1.18.3 (to be removed in 2.0) + */ + public function clearTemplateCache() + { + @trigger_error(sprintf('The %s method is deprecated and will be removed in Twig 2.0.', __METHOD__), E_USER_DEPRECATED); + + $this->loadedTemplates = array(); + } + + /** + * Clears the template cache files on the filesystem. + * + * @deprecated since 1.22 (to be removed in 2.0) + */ + public function clearCacheFiles() + { + @trigger_error(sprintf('The %s method is deprecated and will be removed in Twig 2.0.', __METHOD__), E_USER_DEPRECATED); + + if (is_string($this->originalCache)) { + foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($this->originalCache), RecursiveIteratorIterator::LEAVES_ONLY) as $file) { + if ($file->isFile()) { + @unlink($file->getPathname()); + } + } + } + } + + /** + * Gets the Lexer instance. + * + * @return Twig_LexerInterface A Twig_LexerInterface instance + */ + public function getLexer() + { + if (null === $this->lexer) { + $this->lexer = new Twig_Lexer($this); + } + + return $this->lexer; + } + + /** + * Sets the Lexer instance. + * + * @param Twig_LexerInterface $lexer A Twig_LexerInterface instance + */ + public function setLexer(Twig_LexerInterface $lexer) + { + $this->lexer = $lexer; + } + + /** + * Tokenizes a source code. + * + * @param string $source The template source code + * @param string $name The template name + * + * @return Twig_TokenStream A Twig_TokenStream instance + * + * @throws Twig_Error_Syntax When the code is syntactically wrong + */ + public function tokenize($source, $name = null) + { + return $this->getLexer()->tokenize($source, $name); + } + + /** + * Gets the Parser instance. + * + * @return Twig_ParserInterface A Twig_ParserInterface instance + */ + public function getParser() + { + if (null === $this->parser) { + $this->parser = new Twig_Parser($this); + } + + return $this->parser; + } + + /** + * Sets the Parser instance. + * + * @param Twig_ParserInterface $parser A Twig_ParserInterface instance + */ + public function setParser(Twig_ParserInterface $parser) + { + $this->parser = $parser; + } + + /** + * Converts a token stream to a node tree. + * + * @param Twig_TokenStream $stream A token stream instance + * + * @return Twig_Node_Module A node tree + * + * @throws Twig_Error_Syntax When the token stream is syntactically or semantically wrong + */ + public function parse(Twig_TokenStream $stream) + { + return $this->getParser()->parse($stream); + } + + /** + * Gets the Compiler instance. + * + * @return Twig_CompilerInterface A Twig_CompilerInterface instance + */ + public function getCompiler() + { + if (null === $this->compiler) { + $this->compiler = new Twig_Compiler($this); + } + + return $this->compiler; + } + + /** + * Sets the Compiler instance. + * + * @param Twig_CompilerInterface $compiler A Twig_CompilerInterface instance + */ + public function setCompiler(Twig_CompilerInterface $compiler) + { + $this->compiler = $compiler; + } + + /** + * Compiles a node and returns the PHP code. + * + * @param Twig_NodeInterface $node A Twig_NodeInterface instance + * + * @return string The compiled PHP source code + */ + public function compile(Twig_NodeInterface $node) + { + return $this->getCompiler()->compile($node)->getSource(); + } + + /** + * Compiles a template source code. + * + * @param string $source The template source code + * @param string $name The template name + * + * @return string The compiled PHP source code + * + * @throws Twig_Error_Syntax When there was an error during tokenizing, parsing or compiling + */ + public function compileSource($source, $name = null) + { + try { + $compiled = $this->compile($this->parse($this->tokenize($source, $name)), $source); + + if (isset($source[0])) { + $compiled .= '/* '.str_replace(array('*/', "\r\n", "\r", "\n"), array('*//* ', "\n", "\n", "*/\n/* "), $source)."*/\n"; + } + + return $compiled; + } catch (Twig_Error $e) { + $e->setTemplateFile($name); + throw $e; + } catch (Exception $e) { + throw new Twig_Error_Syntax(sprintf('An exception has been thrown during the compilation of a template ("%s").', $e->getMessage()), -1, $name, $e); + } + } + + /** + * Sets the Loader instance. + * + * @param Twig_LoaderInterface $loader A Twig_LoaderInterface instance + */ + public function setLoader(Twig_LoaderInterface $loader) + { + $this->loader = $loader; + } + + /** + * Gets the Loader instance. + * + * @return Twig_LoaderInterface A Twig_LoaderInterface instance + */ + public function getLoader() + { + if (null === $this->loader) { + throw new LogicException('You must set a loader first.'); + } + + return $this->loader; + } + + /** + * Sets the default template charset. + * + * @param string $charset The default charset + */ + public function setCharset($charset) + { + $this->charset = strtoupper($charset); + } + + /** + * Gets the default template charset. + * + * @return string The default charset + */ + public function getCharset() + { + return $this->charset; + } + + /** + * Initializes the runtime environment. + */ + public function initRuntime() + { + $this->runtimeInitialized = true; + + foreach ($this->getExtensions() as $extension) { + $extension->initRuntime($this); + } + } + + /** + * Returns true if the given extension is registered. + * + * @param string $name The extension name + * + * @return bool Whether the extension is registered or not + */ + public function hasExtension($name) + { + return isset($this->extensions[$name]); + } + + /** + * Gets an extension by name. + * + * @param string $name The extension name + * + * @return Twig_ExtensionInterface A Twig_ExtensionInterface instance + */ + public function getExtension($name) + { + if (!isset($this->extensions[$name])) { + throw new Twig_Error_Runtime(sprintf('The "%s" extension is not enabled.', $name)); + } + + return $this->extensions[$name]; + } + + /** + * Registers an extension. + * + * @param Twig_ExtensionInterface $extension A Twig_ExtensionInterface instance + */ + public function addExtension(Twig_ExtensionInterface $extension) + { + if ($this->extensionInitialized) { + throw new LogicException(sprintf('Unable to register extension "%s" as extensions have already been initialized.', $extension->getName())); + } + + $r = new ReflectionObject($extension); + if (($extensionTime = filemtime($r->getFileName())) > $this->lastModifiedExtension) { + $this->lastModifiedExtension = $extensionTime; + } + + $this->extensions[$extension->getName()] = $extension; + } + + /** + * Removes an extension by name. + * + * This method is deprecated and you should not use it. + * + * @param string $name The extension name + * + * @deprecated since 1.12 (to be removed in 2.0) + */ + public function removeExtension($name) + { + @trigger_error(sprintf('The %s method is deprecated and will be removed in Twig 2.0.', __METHOD__), E_USER_DEPRECATED); + + if ($this->extensionInitialized) { + throw new LogicException(sprintf('Unable to remove extension "%s" as extensions have already been initialized.', $name)); + } + + unset($this->extensions[$name]); + } + + /** + * Registers an array of extensions. + * + * @param array $extensions An array of extensions + */ + public function setExtensions(array $extensions) + { + foreach ($extensions as $extension) { + $this->addExtension($extension); + } + } + + /** + * Returns all registered extensions. + * + * @return array An array of extensions + */ + public function getExtensions() + { + return $this->extensions; + } + + /** + * Registers a Token Parser. + * + * @param Twig_TokenParserInterface $parser A Twig_TokenParserInterface instance + */ + public function addTokenParser(Twig_TokenParserInterface $parser) + { + if ($this->extensionInitialized) { + throw new LogicException('Unable to add a token parser as extensions have already been initialized.'); + } + + $this->staging->addTokenParser($parser); + } + + /** + * Gets the registered Token Parsers. + * + * @return Twig_TokenParserBrokerInterface A broker containing token parsers + */ + public function getTokenParsers() + { + if (!$this->extensionInitialized) { + $this->initExtensions(); + } + + return $this->parsers; + } + + /** + * Gets registered tags. + * + * Be warned that this method cannot return tags defined by Twig_TokenParserBrokerInterface classes. + * + * @return Twig_TokenParserInterface[] An array of Twig_TokenParserInterface instances + */ + public function getTags() + { + $tags = array(); + foreach ($this->getTokenParsers()->getParsers() as $parser) { + if ($parser instanceof Twig_TokenParserInterface) { + $tags[$parser->getTag()] = $parser; + } + } + + return $tags; + } + + /** + * Registers a Node Visitor. + * + * @param Twig_NodeVisitorInterface $visitor A Twig_NodeVisitorInterface instance + */ + public function addNodeVisitor(Twig_NodeVisitorInterface $visitor) + { + if ($this->extensionInitialized) { + throw new LogicException('Unable to add a node visitor as extensions have already been initialized.'); + } + + $this->staging->addNodeVisitor($visitor); + } + + /** + * Gets the registered Node Visitors. + * + * @return Twig_NodeVisitorInterface[] An array of Twig_NodeVisitorInterface instances + */ + public function getNodeVisitors() + { + if (!$this->extensionInitialized) { + $this->initExtensions(); + } + + return $this->visitors; + } + + /** + * Registers a Filter. + * + * @param string|Twig_SimpleFilter $name The filter name or a Twig_SimpleFilter instance + * @param Twig_FilterInterface|Twig_SimpleFilter $filter A Twig_FilterInterface instance or a Twig_SimpleFilter instance + */ + public function addFilter($name, $filter = null) + { + if (!$name instanceof Twig_SimpleFilter && !($filter instanceof Twig_SimpleFilter || $filter instanceof Twig_FilterInterface)) { + throw new LogicException('A filter must be an instance of Twig_FilterInterface or Twig_SimpleFilter'); + } + + if ($name instanceof Twig_SimpleFilter) { + $filter = $name; + $name = $filter->getName(); + } else { + @trigger_error(sprintf('Passing a name as a first argument to the %s method is deprecated. Pass an instance of "Twig_SimpleFilter" instead when defining filter "%s".', __METHOD__, $name), E_USER_DEPRECATED); + } + + if ($this->extensionInitialized) { + throw new LogicException(sprintf('Unable to add filter "%s" as extensions have already been initialized.', $name)); + } + + $this->staging->addFilter($name, $filter); + } + + /** + * Get a filter by name. + * + * Subclasses may override this method and load filters differently; + * so no list of filters is available. + * + * @param string $name The filter name + * + * @return Twig_Filter|false A Twig_Filter instance or false if the filter does not exist + */ + public function getFilter($name) + { + if (!$this->extensionInitialized) { + $this->initExtensions(); + } + + if (isset($this->filters[$name])) { + return $this->filters[$name]; + } + + foreach ($this->filters as $pattern => $filter) { + $pattern = str_replace('\\*', '(.*?)', preg_quote($pattern, '#'), $count); + + if ($count) { + if (preg_match('#^'.$pattern.'$#', $name, $matches)) { + array_shift($matches); + $filter->setArguments($matches); + + return $filter; + } + } + } + + foreach ($this->filterCallbacks as $callback) { + if (false !== $filter = call_user_func($callback, $name)) { + return $filter; + } + } + + return false; + } + + public function registerUndefinedFilterCallback($callable) + { + $this->filterCallbacks[] = $callable; + } + + /** + * Gets the registered Filters. + * + * Be warned that this method cannot return filters defined with registerUndefinedFunctionCallback. + * + * @return Twig_FilterInterface[] An array of Twig_FilterInterface instances + * + * @see registerUndefinedFilterCallback + */ + public function getFilters() + { + if (!$this->extensionInitialized) { + $this->initExtensions(); + } + + return $this->filters; + } + + /** + * Registers a Test. + * + * @param string|Twig_SimpleTest $name The test name or a Twig_SimpleTest instance + * @param Twig_TestInterface|Twig_SimpleTest $test A Twig_TestInterface instance or a Twig_SimpleTest instance + */ + public function addTest($name, $test = null) + { + if (!$name instanceof Twig_SimpleTest && !($test instanceof Twig_SimpleTest || $test instanceof Twig_TestInterface)) { + throw new LogicException('A test must be an instance of Twig_TestInterface or Twig_SimpleTest'); + } + + if ($name instanceof Twig_SimpleTest) { + $test = $name; + $name = $test->getName(); + } else { + @trigger_error(sprintf('Passing a name as a first argument to the %s method is deprecated. Pass an instance of "Twig_SimpleTest" instead when defining test "%s".', __METHOD__, $name), E_USER_DEPRECATED); + } + + if ($this->extensionInitialized) { + throw new LogicException(sprintf('Unable to add test "%s" as extensions have already been initialized.', $name)); + } + + $this->staging->addTest($name, $test); + } + + /** + * Gets the registered Tests. + * + * @return Twig_TestInterface[] An array of Twig_TestInterface instances + */ + public function getTests() + { + if (!$this->extensionInitialized) { + $this->initExtensions(); + } + + return $this->tests; + } + + /** + * Gets a test by name. + * + * @param string $name The test name + * + * @return Twig_Test|false A Twig_Test instance or false if the test does not exist + */ + public function getTest($name) + { + if (!$this->extensionInitialized) { + $this->initExtensions(); + } + + if (isset($this->tests[$name])) { + return $this->tests[$name]; + } + + return false; + } + + /** + * Registers a Function. + * + * @param string|Twig_SimpleFunction $name The function name or a Twig_SimpleFunction instance + * @param Twig_FunctionInterface|Twig_SimpleFunction $function A Twig_FunctionInterface instance or a Twig_SimpleFunction instance + */ + public function addFunction($name, $function = null) + { + if (!$name instanceof Twig_SimpleFunction && !($function instanceof Twig_SimpleFunction || $function instanceof Twig_FunctionInterface)) { + throw new LogicException('A function must be an instance of Twig_FunctionInterface or Twig_SimpleFunction'); + } + + if ($name instanceof Twig_SimpleFunction) { + $function = $name; + $name = $function->getName(); + } else { + @trigger_error(sprintf('Passing a name as a first argument to the %s method is deprecated. Pass an instance of "Twig_SimpleFunction" instead when defining function "%s".', __METHOD__, $name), E_USER_DEPRECATED); + } + + if ($this->extensionInitialized) { + throw new LogicException(sprintf('Unable to add function "%s" as extensions have already been initialized.', $name)); + } + + $this->staging->addFunction($name, $function); + } + + /** + * Get a function by name. + * + * Subclasses may override this method and load functions differently; + * so no list of functions is available. + * + * @param string $name function name + * + * @return Twig_Function|false A Twig_Function instance or false if the function does not exist + */ + public function getFunction($name) + { + if (!$this->extensionInitialized) { + $this->initExtensions(); + } + + if (isset($this->functions[$name])) { + return $this->functions[$name]; + } + + foreach ($this->functions as $pattern => $function) { + $pattern = str_replace('\\*', '(.*?)', preg_quote($pattern, '#'), $count); + + if ($count) { + if (preg_match('#^'.$pattern.'$#', $name, $matches)) { + array_shift($matches); + $function->setArguments($matches); + + return $function; + } + } + } + + foreach ($this->functionCallbacks as $callback) { + if (false !== $function = call_user_func($callback, $name)) { + return $function; + } + } + + return false; + } + + public function registerUndefinedFunctionCallback($callable) + { + $this->functionCallbacks[] = $callable; + } + + /** + * Gets registered functions. + * + * Be warned that this method cannot return functions defined with registerUndefinedFunctionCallback. + * + * @return Twig_FunctionInterface[] An array of Twig_FunctionInterface instances + * + * @see registerUndefinedFunctionCallback + */ + public function getFunctions() + { + if (!$this->extensionInitialized) { + $this->initExtensions(); + } + + return $this->functions; + } + + /** + * Registers a Global. + * + * New globals can be added before compiling or rendering a template; + * but after, you can only update existing globals. + * + * @param string $name The global name + * @param mixed $value The global value + */ + public function addGlobal($name, $value) + { + if ($this->extensionInitialized || $this->runtimeInitialized) { + if (null === $this->globals) { + $this->globals = $this->initGlobals(); + } + + if (!array_key_exists($name, $this->globals)) { + // The deprecation notice must be turned into the following exception in Twig 2.0 + @trigger_error(sprintf('Registering global variable "%s" at runtime or when the extensions have already been initialized is deprecated.', $name), E_USER_DEPRECATED); + //throw new LogicException(sprintf('Unable to add global "%s" as the runtime or the extensions have already been initialized.', $name)); + } + } + + if ($this->extensionInitialized || $this->runtimeInitialized) { + // update the value + $this->globals[$name] = $value; + } else { + $this->staging->addGlobal($name, $value); + } + } + + /** + * Gets the registered Globals. + * + * @return array An array of globals + */ + public function getGlobals() + { + if (!$this->runtimeInitialized && !$this->extensionInitialized) { + return $this->initGlobals(); + } + + if (null === $this->globals) { + $this->globals = $this->initGlobals(); + } + + return $this->globals; + } + + /** + * Merges a context with the defined globals. + * + * @param array $context An array representing the context + * + * @return array The context merged with the globals + */ + public function mergeGlobals(array $context) + { + // we don't use array_merge as the context being generally + // bigger than globals, this code is faster. + foreach ($this->getGlobals() as $key => $value) { + if (!array_key_exists($key, $context)) { + $context[$key] = $value; + } + } + + return $context; + } + + /** + * Gets the registered unary Operators. + * + * @return array An array of unary operators + */ + public function getUnaryOperators() + { + if (!$this->extensionInitialized) { + $this->initExtensions(); + } + + return $this->unaryOperators; + } + + /** + * Gets the registered binary Operators. + * + * @return array An array of binary operators + */ + public function getBinaryOperators() + { + if (!$this->extensionInitialized) { + $this->initExtensions(); + } + + return $this->binaryOperators; + } + + public function computeAlternatives($name, $items) + { + $alternatives = array(); + foreach ($items as $item) { + $lev = levenshtein($name, $item); + if ($lev <= strlen($name) / 3 || false !== strpos($item, $name)) { + $alternatives[$item] = $lev; + } + } + asort($alternatives); + + return array_keys($alternatives); + } + + protected function initGlobals() + { + $globals = array(); + foreach ($this->extensions as $extension) { + $extGlob = $extension->getGlobals(); + if (!is_array($extGlob)) { + throw new UnexpectedValueException(sprintf('"%s::getGlobals()" must return an array of globals.', get_class($extension))); + } + + $globals[] = $extGlob; + } + + $globals[] = $this->staging->getGlobals(); + + return call_user_func_array('array_merge', $globals); + } + + protected function initExtensions() + { + if ($this->extensionInitialized) { + return; + } + + $this->extensionInitialized = true; + $this->parsers = new Twig_TokenParserBroker(array(), array(), false); + $this->filters = array(); + $this->functions = array(); + $this->tests = array(); + $this->visitors = array(); + $this->unaryOperators = array(); + $this->binaryOperators = array(); + + foreach ($this->extensions as $extension) { + $this->initExtension($extension); + } + $this->initExtension($this->staging); + } + + protected function initExtension(Twig_ExtensionInterface $extension) + { + // filters + foreach ($extension->getFilters() as $name => $filter) { + if ($filter instanceof Twig_SimpleFilter) { + $name = $filter->getName(); + } else { + @trigger_error(sprintf('Using an instance of "%s" for filter "%s" is deprecated. Use Twig_SimpleFilter instead.', get_class($filter), $name), E_USER_DEPRECATED); + } + + $this->filters[$name] = $filter; + } + + // functions + foreach ($extension->getFunctions() as $name => $function) { + if ($function instanceof Twig_SimpleFunction) { + $name = $function->getName(); + } else { + @trigger_error(sprintf('Using an instance of "%s" for function "%s" is deprecated. Use Twig_SimpleFunction instead.', get_class($function), $name), E_USER_DEPRECATED); + } + + $this->functions[$name] = $function; + } + + // tests + foreach ($extension->getTests() as $name => $test) { + if ($test instanceof Twig_SimpleTest) { + $name = $test->getName(); + } else { + @trigger_error(sprintf('Using an instance of "%s" for test "%s" is deprecated. Use Twig_SimpleTest instead.', get_class($test), $name), E_USER_DEPRECATED); + } + + $this->tests[$name] = $test; + } + + // token parsers + foreach ($extension->getTokenParsers() as $parser) { + if ($parser instanceof Twig_TokenParserInterface) { + $this->parsers->addTokenParser($parser); + } elseif ($parser instanceof Twig_TokenParserBrokerInterface) { + @trigger_error('Registering a Twig_TokenParserBrokerInterface instance is deprecated.', E_USER_DEPRECATED); + + $this->parsers->addTokenParserBroker($parser); + } else { + throw new LogicException('getTokenParsers() must return an array of Twig_TokenParserInterface or Twig_TokenParserBrokerInterface instances'); + } + } + + // node visitors + foreach ($extension->getNodeVisitors() as $visitor) { + $this->visitors[] = $visitor; + } + + // operators + if ($operators = $extension->getOperators()) { + if (2 !== count($operators)) { + throw new InvalidArgumentException(sprintf('"%s::getOperators()" does not return a valid operators array.', get_class($extension))); + } + + $this->unaryOperators = array_merge($this->unaryOperators, $operators[0]); + $this->binaryOperators = array_merge($this->binaryOperators, $operators[1]); + } + } + + /** + * @deprecated since 1.22 (to be removed in 2.0) + */ + protected function writeCacheFile($file, $content) + { + $this->cache->write($file, $content); + } +} diff --git a/Twig/Error.php b/Twig/Error.php new file mode 100644 index 0000000..90650c5 --- /dev/null +++ b/Twig/Error.php @@ -0,0 +1,250 @@ + + */ +class Twig_Error extends Exception +{ + protected $lineno; + protected $filename; + protected $rawMessage; + protected $previous; + + /** + * Constructor. + * + * Set both the line number and the filename to false to + * disable automatic guessing of the original template name + * and line number. + * + * Set the line number to -1 to enable its automatic guessing. + * Set the filename to null to enable its automatic guessing. + * + * By default, automatic guessing is enabled. + * + * @param string $message The error message + * @param int $lineno The template line where the error occurred + * @param string $filename The template file name where the error occurred + * @param Exception $previous The previous exception + */ + public function __construct($message, $lineno = -1, $filename = null, Exception $previous = null) + { + if (PHP_VERSION_ID < 50300) { + $this->previous = $previous; + parent::__construct(''); + } else { + parent::__construct('', 0, $previous); + } + + $this->lineno = $lineno; + $this->filename = $filename; + + if (-1 === $this->lineno || null === $this->filename) { + $this->guessTemplateInfo(); + } + + $this->rawMessage = $message; + + $this->updateRepr(); + } + + /** + * Gets the raw message. + * + * @return string The raw message + */ + public function getRawMessage() + { + return $this->rawMessage; + } + + /** + * Gets the filename where the error occurred. + * + * @return string The filename + */ + public function getTemplateFile() + { + return $this->filename; + } + + /** + * Sets the filename where the error occurred. + * + * @param string $filename The filename + */ + public function setTemplateFile($filename) + { + $this->filename = $filename; + + $this->updateRepr(); + } + + /** + * Gets the template line where the error occurred. + * + * @return int The template line + */ + public function getTemplateLine() + { + return $this->lineno; + } + + /** + * Sets the template line where the error occurred. + * + * @param int $lineno The template line + */ + public function setTemplateLine($lineno) + { + $this->lineno = $lineno; + + $this->updateRepr(); + } + + public function guess() + { + $this->guessTemplateInfo(); + $this->updateRepr(); + } + + /** + * For PHP < 5.3.0, provides access to the getPrevious() method. + * + * @param string $method The method name + * @param array $arguments The parameters to be passed to the method + * + * @return Exception The previous exception or null + * + * @throws BadMethodCallException + */ + public function __call($method, $arguments) + { + if ('getprevious' == strtolower($method)) { + return $this->previous; + } + + throw new BadMethodCallException(sprintf('Method "Twig_Error::%s()" does not exist.', $method)); + } + + protected function updateRepr() + { + $this->message = $this->rawMessage; + + $dot = false; + if ('.' === substr($this->message, -1)) { + $this->message = substr($this->message, 0, -1); + $dot = true; + } + + if ($this->filename) { + if (is_string($this->filename) || (is_object($this->filename) && method_exists($this->filename, '__toString'))) { + $filename = sprintf('"%s"', $this->filename); + } else { + $filename = json_encode($this->filename); + } + $this->message .= sprintf(' in %s', $filename); + } + + if ($this->lineno && $this->lineno >= 0) { + $this->message .= sprintf(' at line %d', $this->lineno); + } + + if ($dot) { + $this->message .= '.'; + } + } + + protected function guessTemplateInfo() + { + $template = null; + $templateClass = null; + + if (PHP_VERSION_ID >= 50306) { + $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS | DEBUG_BACKTRACE_PROVIDE_OBJECT); + } else { + $backtrace = debug_backtrace(); + } + + foreach ($backtrace as $trace) { + if (isset($trace['object']) && $trace['object'] instanceof Twig_Template && 'Twig_Template' !== get_class($trace['object'])) { + $currentClass = get_class($trace['object']); + $isEmbedContainer = 0 === strpos($templateClass, $currentClass); + if (null === $this->filename || ($this->filename == $trace['object']->getTemplateName() && !$isEmbedContainer)) { + $template = $trace['object']; + $templateClass = get_class($trace['object']); + } + } + } + + // update template filename + if (null !== $template && null === $this->filename) { + $this->filename = $template->getTemplateName(); + } + + if (null === $template || $this->lineno > -1) { + return; + } + + $r = new ReflectionObject($template); + $file = $r->getFileName(); + + // hhvm has a bug where eval'ed files comes out as the current directory + if (is_dir($file)) { + $file = ''; + } + + $exceptions = array($e = $this); + while (($e instanceof self || method_exists($e, 'getPrevious')) && $e = $e->getPrevious()) { + $exceptions[] = $e; + } + + while ($e = array_pop($exceptions)) { + $traces = $e->getTrace(); + array_unshift($traces, array('file' => $e->getFile(), 'line' => $e->getLine())); + + while ($trace = array_shift($traces)) { + if (!isset($trace['file']) || !isset($trace['line']) || $file != $trace['file']) { + continue; + } + + foreach ($template->getDebugInfo() as $codeLine => $templateLine) { + if ($codeLine <= $trace['line']) { + // update template line + $this->lineno = $templateLine; + + return; + } + } + } + } + } +} diff --git a/Twig/Error/Loader.php b/Twig/Error/Loader.php new file mode 100644 index 0000000..68efb57 --- /dev/null +++ b/Twig/Error/Loader.php @@ -0,0 +1,31 @@ + + */ +class Twig_Error_Loader extends Twig_Error +{ + public function __construct($message, $lineno = -1, $filename = null, Exception $previous = null) + { + parent::__construct($message, false, false, $previous); + } +} diff --git a/Twig/Error/Runtime.php b/Twig/Error/Runtime.php new file mode 100644 index 0000000..8b6cedd --- /dev/null +++ b/Twig/Error/Runtime.php @@ -0,0 +1,20 @@ + + */ +class Twig_Error_Runtime extends Twig_Error +{ +} diff --git a/Twig/Error/Syntax.php b/Twig/Error/Syntax.php new file mode 100644 index 0000000..0f5c579 --- /dev/null +++ b/Twig/Error/Syntax.php @@ -0,0 +1,20 @@ + + */ +class Twig_Error_Syntax extends Twig_Error +{ +} diff --git a/Twig/ExistsLoaderInterface.php b/Twig/ExistsLoaderInterface.php new file mode 100644 index 0000000..b168c3c --- /dev/null +++ b/Twig/ExistsLoaderInterface.php @@ -0,0 +1,29 @@ + + * + * @deprecated since 1.12 (to be removed in 3.0) + */ +interface Twig_ExistsLoaderInterface +{ + /** + * Check if we have the source code of a template, given its name. + * + * @param string $name The name of the template to check if we can load + * + * @return bool If the template source code is handled by this loader or not + */ + public function exists($name); +} diff --git a/Twig/ExpressionParser.php b/Twig/ExpressionParser.php new file mode 100644 index 0000000..322976c --- /dev/null +++ b/Twig/ExpressionParser.php @@ -0,0 +1,645 @@ + + */ +class Twig_ExpressionParser +{ + const OPERATOR_LEFT = 1; + const OPERATOR_RIGHT = 2; + + protected $parser; + protected $unaryOperators; + protected $binaryOperators; + + public function __construct(Twig_Parser $parser, array $unaryOperators, array $binaryOperators) + { + $this->parser = $parser; + $this->unaryOperators = $unaryOperators; + $this->binaryOperators = $binaryOperators; + } + + public function parseExpression($precedence = 0) + { + $expr = $this->getPrimary(); + $token = $this->parser->getCurrentToken(); + while ($this->isBinary($token) && $this->binaryOperators[$token->getValue()]['precedence'] >= $precedence) { + $op = $this->binaryOperators[$token->getValue()]; + $this->parser->getStream()->next(); + + if (isset($op['callable'])) { + $expr = call_user_func($op['callable'], $this->parser, $expr); + } else { + $expr1 = $this->parseExpression(self::OPERATOR_LEFT === $op['associativity'] ? $op['precedence'] + 1 : $op['precedence']); + $class = $op['class']; + $expr = new $class($expr, $expr1, $token->getLine()); + } + + $token = $this->parser->getCurrentToken(); + } + + if (0 === $precedence) { + return $this->parseConditionalExpression($expr); + } + + return $expr; + } + + protected function getPrimary() + { + $token = $this->parser->getCurrentToken(); + + if ($this->isUnary($token)) { + $operator = $this->unaryOperators[$token->getValue()]; + $this->parser->getStream()->next(); + $expr = $this->parseExpression($operator['precedence']); + $class = $operator['class']; + + return $this->parsePostfixExpression(new $class($expr, $token->getLine())); + } elseif ($token->test(Twig_Token::PUNCTUATION_TYPE, '(')) { + $this->parser->getStream()->next(); + $expr = $this->parseExpression(); + $this->parser->getStream()->expect(Twig_Token::PUNCTUATION_TYPE, ')', 'An opened parenthesis is not properly closed'); + + return $this->parsePostfixExpression($expr); + } + + return $this->parsePrimaryExpression(); + } + + protected function parseConditionalExpression($expr) + { + while ($this->parser->getStream()->nextIf(Twig_Token::PUNCTUATION_TYPE, '?')) { + if (!$this->parser->getStream()->nextIf(Twig_Token::PUNCTUATION_TYPE, ':')) { + $expr2 = $this->parseExpression(); + if ($this->parser->getStream()->nextIf(Twig_Token::PUNCTUATION_TYPE, ':')) { + $expr3 = $this->parseExpression(); + } else { + $expr3 = new Twig_Node_Expression_Constant('', $this->parser->getCurrentToken()->getLine()); + } + } else { + $expr2 = $expr; + $expr3 = $this->parseExpression(); + } + + $expr = new Twig_Node_Expression_Conditional($expr, $expr2, $expr3, $this->parser->getCurrentToken()->getLine()); + } + + return $expr; + } + + protected function isUnary(Twig_Token $token) + { + return $token->test(Twig_Token::OPERATOR_TYPE) && isset($this->unaryOperators[$token->getValue()]); + } + + protected function isBinary(Twig_Token $token) + { + return $token->test(Twig_Token::OPERATOR_TYPE) && isset($this->binaryOperators[$token->getValue()]); + } + + public function parsePrimaryExpression() + { + $token = $this->parser->getCurrentToken(); + switch ($token->getType()) { + case Twig_Token::NAME_TYPE: + $this->parser->getStream()->next(); + switch ($token->getValue()) { + case 'true': + case 'TRUE': + $node = new Twig_Node_Expression_Constant(true, $token->getLine()); + break; + + case 'false': + case 'FALSE': + $node = new Twig_Node_Expression_Constant(false, $token->getLine()); + break; + + case 'none': + case 'NONE': + case 'null': + case 'NULL': + $node = new Twig_Node_Expression_Constant(null, $token->getLine()); + break; + + default: + if ('(' === $this->parser->getCurrentToken()->getValue()) { + $node = $this->getFunctionNode($token->getValue(), $token->getLine()); + } else { + $node = new Twig_Node_Expression_Name($token->getValue(), $token->getLine()); + } + } + break; + + case Twig_Token::NUMBER_TYPE: + $this->parser->getStream()->next(); + $node = new Twig_Node_Expression_Constant($token->getValue(), $token->getLine()); + break; + + case Twig_Token::STRING_TYPE: + case Twig_Token::INTERPOLATION_START_TYPE: + $node = $this->parseStringExpression(); + break; + + case Twig_Token::OPERATOR_TYPE: + if (preg_match(Twig_Lexer::REGEX_NAME, $token->getValue(), $matches) && $matches[0] == $token->getValue()) { + // in this context, string operators are variable names + $this->parser->getStream()->next(); + $node = new Twig_Node_Expression_Name($token->getValue(), $token->getLine()); + break; + } elseif (isset($this->unaryOperators[$token->getValue()])) { + $class = $this->unaryOperators[$token->getValue()]['class']; + + $ref = new ReflectionClass($class); + $negClass = 'Twig_Node_Expression_Unary_Neg'; + $posClass = 'Twig_Node_Expression_Unary_Pos'; + if (!(in_array($ref->getName(), array($negClass, $posClass)) || $ref->isSubclassOf($negClass) || $ref->isSubclassOf($posClass))) { + throw new Twig_Error_Syntax(sprintf('Unexpected unary operator "%s"', $token->getValue()), $token->getLine(), $this->parser->getFilename()); + } + + $this->parser->getStream()->next(); + $expr = $this->parsePrimaryExpression(); + + $node = new $class($expr, $token->getLine()); + break; + } + + default: + if ($token->test(Twig_Token::PUNCTUATION_TYPE, '[')) { + $node = $this->parseArrayExpression(); + } elseif ($token->test(Twig_Token::PUNCTUATION_TYPE, '{')) { + $node = $this->parseHashExpression(); + } else { + throw new Twig_Error_Syntax(sprintf('Unexpected token "%s" of value "%s"', Twig_Token::typeToEnglish($token->getType()), $token->getValue()), $token->getLine(), $this->parser->getFilename()); + } + } + + return $this->parsePostfixExpression($node); + } + + public function parseStringExpression() + { + $stream = $this->parser->getStream(); + + $nodes = array(); + // a string cannot be followed by another string in a single expression + $nextCanBeString = true; + while (true) { + if ($nextCanBeString && $token = $stream->nextIf(Twig_Token::STRING_TYPE)) { + $nodes[] = new Twig_Node_Expression_Constant($token->getValue(), $token->getLine()); + $nextCanBeString = false; + } elseif ($stream->nextIf(Twig_Token::INTERPOLATION_START_TYPE)) { + $nodes[] = $this->parseExpression(); + $stream->expect(Twig_Token::INTERPOLATION_END_TYPE); + $nextCanBeString = true; + } else { + break; + } + } + + $expr = array_shift($nodes); + foreach ($nodes as $node) { + $expr = new Twig_Node_Expression_Binary_Concat($expr, $node, $node->getLine()); + } + + return $expr; + } + + public function parseArrayExpression() + { + $stream = $this->parser->getStream(); + $stream->expect(Twig_Token::PUNCTUATION_TYPE, '[', 'An array element was expected'); + + $node = new Twig_Node_Expression_Array(array(), $stream->getCurrent()->getLine()); + $first = true; + while (!$stream->test(Twig_Token::PUNCTUATION_TYPE, ']')) { + if (!$first) { + $stream->expect(Twig_Token::PUNCTUATION_TYPE, ',', 'An array element must be followed by a comma'); + + // trailing ,? + if ($stream->test(Twig_Token::PUNCTUATION_TYPE, ']')) { + break; + } + } + $first = false; + + $node->addElement($this->parseExpression()); + } + $stream->expect(Twig_Token::PUNCTUATION_TYPE, ']', 'An opened array is not properly closed'); + + return $node; + } + + public function parseHashExpression() + { + $stream = $this->parser->getStream(); + $stream->expect(Twig_Token::PUNCTUATION_TYPE, '{', 'A hash element was expected'); + + $node = new Twig_Node_Expression_Array(array(), $stream->getCurrent()->getLine()); + $first = true; + while (!$stream->test(Twig_Token::PUNCTUATION_TYPE, '}')) { + if (!$first) { + $stream->expect(Twig_Token::PUNCTUATION_TYPE, ',', 'A hash value must be followed by a comma'); + + // trailing ,? + if ($stream->test(Twig_Token::PUNCTUATION_TYPE, '}')) { + break; + } + } + $first = false; + + // a hash key can be: + // + // * a number -- 12 + // * a string -- 'a' + // * a name, which is equivalent to a string -- a + // * an expression, which must be enclosed in parentheses -- (1 + 2) + if (($token = $stream->nextIf(Twig_Token::STRING_TYPE)) || ($token = $stream->nextIf(Twig_Token::NAME_TYPE)) || $token = $stream->nextIf(Twig_Token::NUMBER_TYPE)) { + $key = new Twig_Node_Expression_Constant($token->getValue(), $token->getLine()); + } elseif ($stream->test(Twig_Token::PUNCTUATION_TYPE, '(')) { + $key = $this->parseExpression(); + } else { + $current = $stream->getCurrent(); + + throw new Twig_Error_Syntax(sprintf('A hash key must be a quoted string, a number, a name, or an expression enclosed in parentheses (unexpected token "%s" of value "%s"', Twig_Token::typeToEnglish($current->getType()), $current->getValue()), $current->getLine(), $this->parser->getFilename()); + } + + $stream->expect(Twig_Token::PUNCTUATION_TYPE, ':', 'A hash key must be followed by a colon (:)'); + $value = $this->parseExpression(); + + $node->addElement($value, $key); + } + $stream->expect(Twig_Token::PUNCTUATION_TYPE, '}', 'An opened hash is not properly closed'); + + return $node; + } + + public function parsePostfixExpression($node) + { + while (true) { + $token = $this->parser->getCurrentToken(); + if ($token->getType() == Twig_Token::PUNCTUATION_TYPE) { + if ('.' == $token->getValue() || '[' == $token->getValue()) { + $node = $this->parseSubscriptExpression($node); + } elseif ('|' == $token->getValue()) { + $node = $this->parseFilterExpression($node); + } else { + break; + } + } else { + break; + } + } + + return $node; + } + + public function getFunctionNode($name, $line) + { + switch ($name) { + case 'parent': + $this->parseArguments(); + if (!count($this->parser->getBlockStack())) { + throw new Twig_Error_Syntax('Calling "parent" outside a block is forbidden', $line, $this->parser->getFilename()); + } + + if (!$this->parser->getParent() && !$this->parser->hasTraits()) { + throw new Twig_Error_Syntax('Calling "parent" on a template that does not extend nor "use" another template is forbidden', $line, $this->parser->getFilename()); + } + + return new Twig_Node_Expression_Parent($this->parser->peekBlockStack(), $line); + case 'block': + return new Twig_Node_Expression_BlockReference($this->parseArguments()->getNode(0), false, $line); + case 'attribute': + $args = $this->parseArguments(); + if (count($args) < 2) { + throw new Twig_Error_Syntax('The "attribute" function takes at least two arguments (the variable and the attributes)', $line, $this->parser->getFilename()); + } + + return new Twig_Node_Expression_GetAttr($args->getNode(0), $args->getNode(1), count($args) > 2 ? $args->getNode(2) : null, Twig_Template::ANY_CALL, $line); + default: + if (null !== $alias = $this->parser->getImportedSymbol('function', $name)) { + $arguments = new Twig_Node_Expression_Array(array(), $line); + foreach ($this->parseArguments() as $n) { + $arguments->addElement($n); + } + + $node = new Twig_Node_Expression_MethodCall($alias['node'], $alias['name'], $arguments, $line); + $node->setAttribute('safe', true); + + return $node; + } + + $args = $this->parseArguments(true); + $class = $this->getFunctionNodeClass($name, $line); + + return new $class($name, $args, $line); + } + } + + public function parseSubscriptExpression($node) + { + $stream = $this->parser->getStream(); + $token = $stream->next(); + $lineno = $token->getLine(); + $arguments = new Twig_Node_Expression_Array(array(), $lineno); + $type = Twig_Template::ANY_CALL; + if ($token->getValue() == '.') { + $token = $stream->next(); + if ( + $token->getType() == Twig_Token::NAME_TYPE + || + $token->getType() == Twig_Token::NUMBER_TYPE + || + ($token->getType() == Twig_Token::OPERATOR_TYPE && preg_match(Twig_Lexer::REGEX_NAME, $token->getValue())) + ) { + $arg = new Twig_Node_Expression_Constant($token->getValue(), $lineno); + + if ($stream->test(Twig_Token::PUNCTUATION_TYPE, '(')) { + $type = Twig_TemplateInterface::METHOD_CALL; + foreach ($this->parseArguments() as $n) { + $arguments->addElement($n); + } + } + } else { + throw new Twig_Error_Syntax('Expected name or number', $lineno, $this->parser->getFilename()); + } + + if ($node instanceof Twig_Node_Expression_Name && null !== $this->parser->getImportedSymbol('template', $node->getAttribute('name'))) { + if (!$arg instanceof Twig_Node_Expression_Constant) { + throw new Twig_Error_Syntax(sprintf('Dynamic macro names are not supported (called on "%s")', $node->getAttribute('name')), $token->getLine(), $this->parser->getFilename()); + } + + $name = $arg->getAttribute('value'); + + if ($this->parser->isReservedMacroName($name)) { + throw new Twig_Error_Syntax(sprintf('"%s" cannot be called as macro as it is a reserved keyword', $name), $token->getLine(), $this->parser->getFilename()); + } + + $node = new Twig_Node_Expression_MethodCall($node, 'get'.$name, $arguments, $lineno); + $node->setAttribute('safe', true); + + return $node; + } + } else { + $type = Twig_Template::ARRAY_CALL; + + // slice? + $slice = false; + if ($stream->test(Twig_Token::PUNCTUATION_TYPE, ':')) { + $slice = true; + $arg = new Twig_Node_Expression_Constant(0, $token->getLine()); + } else { + $arg = $this->parseExpression(); + } + + if ($stream->nextIf(Twig_Token::PUNCTUATION_TYPE, ':')) { + $slice = true; + } + + if ($slice) { + if ($stream->test(Twig_Token::PUNCTUATION_TYPE, ']')) { + $length = new Twig_Node_Expression_Constant(null, $token->getLine()); + } else { + $length = $this->parseExpression(); + } + + $class = $this->getFilterNodeClass('slice', $token->getLine()); + $arguments = new Twig_Node(array($arg, $length)); + $filter = new $class($node, new Twig_Node_Expression_Constant('slice', $token->getLine()), $arguments, $token->getLine()); + + $stream->expect(Twig_Token::PUNCTUATION_TYPE, ']'); + + return $filter; + } + + $stream->expect(Twig_Token::PUNCTUATION_TYPE, ']'); + } + + return new Twig_Node_Expression_GetAttr($node, $arg, $arguments, $type, $lineno); + } + + public function parseFilterExpression($node) + { + $this->parser->getStream()->next(); + + return $this->parseFilterExpressionRaw($node); + } + + public function parseFilterExpressionRaw($node, $tag = null) + { + while (true) { + $token = $this->parser->getStream()->expect(Twig_Token::NAME_TYPE); + + $name = new Twig_Node_Expression_Constant($token->getValue(), $token->getLine()); + if (!$this->parser->getStream()->test(Twig_Token::PUNCTUATION_TYPE, '(')) { + $arguments = new Twig_Node(); + } else { + $arguments = $this->parseArguments(true); + } + + $class = $this->getFilterNodeClass($name->getAttribute('value'), $token->getLine()); + + $node = new $class($node, $name, $arguments, $token->getLine(), $tag); + + if (!$this->parser->getStream()->test(Twig_Token::PUNCTUATION_TYPE, '|')) { + break; + } + + $this->parser->getStream()->next(); + } + + return $node; + } + + /** + * Parses arguments. + * + * @param bool $namedArguments Whether to allow named arguments or not + * @param bool $definition Whether we are parsing arguments for a function definition + * + * @return Twig_Node + * + * @throws Twig_Error_Syntax + */ + public function parseArguments($namedArguments = false, $definition = false) + { + $args = array(); + $stream = $this->parser->getStream(); + + $stream->expect(Twig_Token::PUNCTUATION_TYPE, '(', 'A list of arguments must begin with an opening parenthesis'); + while (!$stream->test(Twig_Token::PUNCTUATION_TYPE, ')')) { + if (!empty($args)) { + $stream->expect(Twig_Token::PUNCTUATION_TYPE, ',', 'Arguments must be separated by a comma'); + } + + if ($definition) { + $token = $stream->expect(Twig_Token::NAME_TYPE, null, 'An argument must be a name'); + $value = new Twig_Node_Expression_Name($token->getValue(), $this->parser->getCurrentToken()->getLine()); + } else { + $value = $this->parseExpression(); + } + + $name = null; + if ($namedArguments && $token = $stream->nextIf(Twig_Token::OPERATOR_TYPE, '=')) { + if (!$value instanceof Twig_Node_Expression_Name) { + throw new Twig_Error_Syntax(sprintf('A parameter name must be a string, "%s" given', get_class($value)), $token->getLine(), $this->parser->getFilename()); + } + $name = $value->getAttribute('name'); + + if ($definition) { + $value = $this->parsePrimaryExpression(); + + if (!$this->checkConstantExpression($value)) { + throw new Twig_Error_Syntax(sprintf('A default value for an argument must be a constant (a boolean, a string, a number, or an array).'), $token->getLine(), $this->parser->getFilename()); + } + } else { + $value = $this->parseExpression(); + } + } + + if ($definition) { + if (null === $name) { + $name = $value->getAttribute('name'); + $value = new Twig_Node_Expression_Constant(null, $this->parser->getCurrentToken()->getLine()); + } + $args[$name] = $value; + } else { + if (null === $name) { + $args[] = $value; + } else { + $args[$name] = $value; + } + } + } + $stream->expect(Twig_Token::PUNCTUATION_TYPE, ')', 'A list of arguments must be closed by a parenthesis'); + + return new Twig_Node($args); + } + + public function parseAssignmentExpression() + { + $targets = array(); + while (true) { + $token = $this->parser->getStream()->expect(Twig_Token::NAME_TYPE, null, 'Only variables can be assigned to'); + if (in_array($token->getValue(), array('true', 'false', 'none'))) { + throw new Twig_Error_Syntax(sprintf('You cannot assign a value to "%s"', $token->getValue()), $token->getLine(), $this->parser->getFilename()); + } + $targets[] = new Twig_Node_Expression_AssignName($token->getValue(), $token->getLine()); + + if (!$this->parser->getStream()->nextIf(Twig_Token::PUNCTUATION_TYPE, ',')) { + break; + } + } + + return new Twig_Node($targets); + } + + public function parseMultitargetExpression() + { + $targets = array(); + while (true) { + $targets[] = $this->parseExpression(); + if (!$this->parser->getStream()->nextIf(Twig_Token::PUNCTUATION_TYPE, ',')) { + break; + } + } + + return new Twig_Node($targets); + } + + protected function getFunctionNodeClass($name, $line) + { + $env = $this->parser->getEnvironment(); + + if (false === $function = $env->getFunction($name)) { + $message = sprintf('The function "%s" does not exist', $name); + if ($alternatives = $env->computeAlternatives($name, array_keys($env->getFunctions()))) { + $message = sprintf('%s. Did you mean "%s"', $message, implode('", "', $alternatives)); + } + + throw new Twig_Error_Syntax($message, $line, $this->parser->getFilename()); + } + + if ($function instanceof Twig_SimpleFunction && $function->isDeprecated()) { + $message = sprintf('Twig Function "%s" is deprecated', $function->getName()); + if ($function->getAlternative()) { + $message .= sprintf('. Use "%s" instead', $function->getAlternative()); + } + $message .= sprintf(' in %s at line %d.', $this->parser->getFilename(), $line); + + @trigger_error($message, E_USER_DEPRECATED); + } + + if ($function instanceof Twig_SimpleFunction) { + return $function->getNodeClass(); + } + + return $function instanceof Twig_Function_Node ? $function->getClass() : 'Twig_Node_Expression_Function'; + } + + protected function getFilterNodeClass($name, $line) + { + $env = $this->parser->getEnvironment(); + + if (false === $filter = $env->getFilter($name)) { + $message = sprintf('The filter "%s" does not exist', $name); + if ($alternatives = $env->computeAlternatives($name, array_keys($env->getFilters()))) { + $message = sprintf('%s. Did you mean "%s"', $message, implode('", "', $alternatives)); + } + + throw new Twig_Error_Syntax($message, $line, $this->parser->getFilename()); + } + + if ($filter instanceof Twig_SimpleFilter && $filter->isDeprecated()) { + $message = sprintf('Twig Filter "%s" is deprecated', $filter->getName()); + if ($filter->getAlternative()) { + $message .= sprintf('. Use "%s" instead', $filter->getAlternative()); + } + $message .= sprintf(' in %s at line %d.', $this->parser->getFilename(), $line); + + @trigger_error($message, E_USER_DEPRECATED); + } + + if ($filter instanceof Twig_SimpleFilter) { + return $filter->getNodeClass(); + } + + return $filter instanceof Twig_Filter_Node ? $filter->getClass() : 'Twig_Node_Expression_Filter'; + } + + // checks that the node only contains "constant" elements + protected function checkConstantExpression(Twig_NodeInterface $node) + { + if (!($node instanceof Twig_Node_Expression_Constant || $node instanceof Twig_Node_Expression_Array + || $node instanceof Twig_Node_Expression_Unary_Neg || $node instanceof Twig_Node_Expression_Unary_Pos + )) { + return false; + } + + foreach ($node as $n) { + if (!$this->checkConstantExpression($n)) { + return false; + } + } + + return true; + } +} diff --git a/Twig/Extension.php b/Twig/Extension.php new file mode 100644 index 0000000..7a3c859 --- /dev/null +++ b/Twig/Extension.php @@ -0,0 +1,75 @@ +escapers[$strategy] = $callable; + } + + /** + * Gets all defined escapers. + * + * @return array An array of escapers + */ + public function getEscapers() + { + return $this->escapers; + } + + /** + * Sets the default format to be used by the date filter. + * + * @param string $format The default date format string + * @param string $dateIntervalFormat The default date interval format string + */ + public function setDateFormat($format = null, $dateIntervalFormat = null) + { + if (null !== $format) { + $this->dateFormats[0] = $format; + } + + if (null !== $dateIntervalFormat) { + $this->dateFormats[1] = $dateIntervalFormat; + } + } + + /** + * Gets the default format to be used by the date filter. + * + * @return array The default date format string and the default date interval format string + */ + public function getDateFormat() + { + return $this->dateFormats; + } + + /** + * Sets the default timezone to be used by the date filter. + * + * @param DateTimeZone|string $timezone The default timezone string or a DateTimeZone object + */ + public function setTimezone($timezone) + { + $this->timezone = $timezone instanceof DateTimeZone ? $timezone : new DateTimeZone($timezone); + } + + /** + * Gets the default timezone to be used by the date filter. + * + * @return DateTimeZone The default timezone currently in use + */ + public function getTimezone() + { + if (null === $this->timezone) { + $this->timezone = new DateTimeZone(date_default_timezone_get()); + } + + return $this->timezone; + } + + /** + * Sets the default format to be used by the number_format filter. + * + * @param int $decimal The number of decimal places to use. + * @param string $decimalPoint The character(s) to use for the decimal point. + * @param string $thousandSep The character(s) to use for the thousands separator. + */ + public function setNumberFormat($decimal, $decimalPoint, $thousandSep) + { + $this->numberFormat = array($decimal, $decimalPoint, $thousandSep); + } + + /** + * Get the default format used by the number_format filter. + * + * @return array The arguments for number_format() + */ + public function getNumberFormat() + { + return $this->numberFormat; + } + + /** + * Returns the token parser instance to add to the existing list. + * + * @return Twig_TokenParser[] An array of Twig_TokenParser instances + */ + public function getTokenParsers() + { + return array( + new Twig_TokenParser_For(), + new Twig_TokenParser_If(), + new Twig_TokenParser_Extends(), + new Twig_TokenParser_Include(), + new Twig_TokenParser_Block(), + new Twig_TokenParser_Use(), + new Twig_TokenParser_Filter(), + new Twig_TokenParser_Macro(), + new Twig_TokenParser_Import(), + new Twig_TokenParser_From(), + new Twig_TokenParser_Set(), + new Twig_TokenParser_Spaceless(), + new Twig_TokenParser_Flush(), + new Twig_TokenParser_Do(), + new Twig_TokenParser_Embed(), + ); + } + + /** + * Returns a list of filters to add to the existing list. + * + * @return array An array of filters + */ + public function getFilters() + { + $filters = array( + // formatting filters + new Twig_SimpleFilter('date', 'twig_date_format_filter', array('needs_environment' => true)), + new Twig_SimpleFilter('date_modify', 'twig_date_modify_filter', array('needs_environment' => true)), + new Twig_SimpleFilter('format', 'sprintf'), + new Twig_SimpleFilter('replace', 'twig_replace_filter'), + new Twig_SimpleFilter('number_format', 'twig_number_format_filter', array('needs_environment' => true)), + new Twig_SimpleFilter('abs', 'abs'), + new Twig_SimpleFilter('round', 'twig_round'), + + // encoding + new Twig_SimpleFilter('url_encode', 'twig_urlencode_filter'), + new Twig_SimpleFilter('json_encode', 'twig_jsonencode_filter'), + new Twig_SimpleFilter('convert_encoding', 'twig_convert_encoding'), + + // string filters + new Twig_SimpleFilter('title', 'twig_title_string_filter', array('needs_environment' => true)), + new Twig_SimpleFilter('capitalize', 'twig_capitalize_string_filter', array('needs_environment' => true)), + new Twig_SimpleFilter('upper', 'strtoupper'), + new Twig_SimpleFilter('lower', 'strtolower'), + new Twig_SimpleFilter('striptags', 'strip_tags'), + new Twig_SimpleFilter('trim', 'trim'), + new Twig_SimpleFilter('nl2br', 'nl2br', array('pre_escape' => 'html', 'is_safe' => array('html'))), + + // array helpers + new Twig_SimpleFilter('join', 'twig_join_filter'), + new Twig_SimpleFilter('split', 'twig_split_filter', array('needs_environment' => true)), + new Twig_SimpleFilter('sort', 'twig_sort_filter'), + new Twig_SimpleFilter('merge', 'twig_array_merge'), + new Twig_SimpleFilter('batch', 'twig_array_batch'), + + // string/array filters + new Twig_SimpleFilter('reverse', 'twig_reverse_filter', array('needs_environment' => true)), + new Twig_SimpleFilter('length', 'twig_length_filter', array('needs_environment' => true)), + new Twig_SimpleFilter('slice', 'twig_slice', array('needs_environment' => true)), + new Twig_SimpleFilter('first', 'twig_first', array('needs_environment' => true)), + new Twig_SimpleFilter('last', 'twig_last', array('needs_environment' => true)), + + // iteration and runtime + new Twig_SimpleFilter('default', '_twig_default_filter', array('node_class' => 'Twig_Node_Expression_Filter_Default')), + new Twig_SimpleFilter('keys', 'twig_get_array_keys_filter'), + + // escaping + new Twig_SimpleFilter('escape', 'twig_escape_filter', array('needs_environment' => true, 'is_safe_callback' => 'twig_escape_filter_is_safe')), + new Twig_SimpleFilter('e', 'twig_escape_filter', array('needs_environment' => true, 'is_safe_callback' => 'twig_escape_filter_is_safe')), + ); + + if (function_exists('mb_get_info')) { + $filters[] = new Twig_SimpleFilter('upper', 'twig_upper_filter', array('needs_environment' => true)); + $filters[] = new Twig_SimpleFilter('lower', 'twig_lower_filter', array('needs_environment' => true)); + } + + return $filters; + } + + /** + * Returns a list of global functions to add to the existing list. + * + * @return array An array of global functions + */ + public function getFunctions() + { + return array( + new Twig_SimpleFunction('max', 'max'), + new Twig_SimpleFunction('min', 'min'), + new Twig_SimpleFunction('range', 'range'), + new Twig_SimpleFunction('constant', 'twig_constant'), + new Twig_SimpleFunction('cycle', 'twig_cycle'), + new Twig_SimpleFunction('random', 'twig_random', array('needs_environment' => true)), + new Twig_SimpleFunction('date', 'twig_date_converter', array('needs_environment' => true)), + new Twig_SimpleFunction('include', 'twig_include', array('needs_environment' => true, 'needs_context' => true, 'is_safe' => array('all'))), + new Twig_SimpleFunction('source', 'twig_source', array('needs_environment' => true, 'is_safe' => array('all'))), + ); + } + + /** + * Returns a list of tests to add to the existing list. + * + * @return array An array of tests + */ + public function getTests() + { + return array( + new Twig_SimpleTest('even', null, array('node_class' => 'Twig_Node_Expression_Test_Even')), + new Twig_SimpleTest('odd', null, array('node_class' => 'Twig_Node_Expression_Test_Odd')), + new Twig_SimpleTest('defined', null, array('node_class' => 'Twig_Node_Expression_Test_Defined')), + new Twig_SimpleTest('sameas', null, array('node_class' => 'Twig_Node_Expression_Test_Sameas', 'deprecated' => true, 'alternative' => 'same as')), + new Twig_SimpleTest('same as', null, array('node_class' => 'Twig_Node_Expression_Test_Sameas')), + new Twig_SimpleTest('none', null, array('node_class' => 'Twig_Node_Expression_Test_Null')), + new Twig_SimpleTest('null', null, array('node_class' => 'Twig_Node_Expression_Test_Null')), + new Twig_SimpleTest('divisibleby', null, array('node_class' => 'Twig_Node_Expression_Test_Divisibleby', 'deprecated' => true, 'alternative' => 'divisible by')), + new Twig_SimpleTest('divisible by', null, array('node_class' => 'Twig_Node_Expression_Test_Divisibleby')), + new Twig_SimpleTest('constant', null, array('node_class' => 'Twig_Node_Expression_Test_Constant')), + new Twig_SimpleTest('empty', 'twig_test_empty'), + new Twig_SimpleTest('iterable', 'twig_test_iterable'), + ); + } + + /** + * Returns a list of operators to add to the existing list. + * + * @return array An array of operators + */ + public function getOperators() + { + return array( + array( + 'not' => array('precedence' => 50, 'class' => 'Twig_Node_Expression_Unary_Not'), + '-' => array('precedence' => 500, 'class' => 'Twig_Node_Expression_Unary_Neg'), + '+' => array('precedence' => 500, 'class' => 'Twig_Node_Expression_Unary_Pos'), + ), + array( + 'or' => array('precedence' => 10, 'class' => 'Twig_Node_Expression_Binary_Or', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), + 'and' => array('precedence' => 15, 'class' => 'Twig_Node_Expression_Binary_And', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), + 'b-or' => array('precedence' => 16, 'class' => 'Twig_Node_Expression_Binary_BitwiseOr', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), + 'b-xor' => array('precedence' => 17, 'class' => 'Twig_Node_Expression_Binary_BitwiseXor', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), + 'b-and' => array('precedence' => 18, 'class' => 'Twig_Node_Expression_Binary_BitwiseAnd', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), + '==' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_Equal', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), + '!=' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_NotEqual', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), + '<' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_Less', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), + '>' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_Greater', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), + '>=' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_GreaterEqual', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), + '<=' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_LessEqual', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), + 'not in' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_NotIn', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), + 'in' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_In', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), + 'matches' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_Matches', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), + 'starts with' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_StartsWith', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), + 'ends with' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_EndsWith', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), + '..' => array('precedence' => 25, 'class' => 'Twig_Node_Expression_Binary_Range', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), + '+' => array('precedence' => 30, 'class' => 'Twig_Node_Expression_Binary_Add', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), + '-' => array('precedence' => 30, 'class' => 'Twig_Node_Expression_Binary_Sub', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), + '~' => array('precedence' => 40, 'class' => 'Twig_Node_Expression_Binary_Concat', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), + '*' => array('precedence' => 60, 'class' => 'Twig_Node_Expression_Binary_Mul', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), + '/' => array('precedence' => 60, 'class' => 'Twig_Node_Expression_Binary_Div', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), + '//' => array('precedence' => 60, 'class' => 'Twig_Node_Expression_Binary_FloorDiv', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), + '%' => array('precedence' => 60, 'class' => 'Twig_Node_Expression_Binary_Mod', 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), + 'is' => array('precedence' => 100, 'callable' => array($this, 'parseTestExpression'), 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), + 'is not' => array('precedence' => 100, 'callable' => array($this, 'parseNotTestExpression'), 'associativity' => Twig_ExpressionParser::OPERATOR_LEFT), + '**' => array('precedence' => 200, 'class' => 'Twig_Node_Expression_Binary_Power', 'associativity' => Twig_ExpressionParser::OPERATOR_RIGHT), + ), + ); + } + + public function parseNotTestExpression(Twig_Parser $parser, Twig_NodeInterface $node) + { + return new Twig_Node_Expression_Unary_Not($this->parseTestExpression($parser, $node), $parser->getCurrentToken()->getLine()); + } + + public function parseTestExpression(Twig_Parser $parser, Twig_NodeInterface $node) + { + $stream = $parser->getStream(); + list($name, $test) = $this->getTest($parser, $node->getLine()); + + if ($test instanceof Twig_SimpleTest && $test->isDeprecated()) { + $message = sprintf('Twig Test "%s" is deprecated', $name); + if ($test->getAlternative()) { + $message .= sprintf('. Use "%s" instead', $test->getAlternative()); + } + $message .= sprintf(' in %s at line %d.', $stream->getFilename(), $stream->getCurrent()->getLine()); + + @trigger_error($message, E_USER_DEPRECATED); + } + + $class = $this->getTestNodeClass($parser, $test); + $arguments = null; + if ($stream->test(Twig_Token::PUNCTUATION_TYPE, '(')) { + $arguments = $parser->getExpressionParser()->parseArguments(true); + } + + return new $class($node, $name, $arguments, $parser->getCurrentToken()->getLine()); + } + + protected function getTest(Twig_Parser $parser, $line) + { + $stream = $parser->getStream(); + $name = $stream->expect(Twig_Token::NAME_TYPE)->getValue(); + $env = $parser->getEnvironment(); + + if ($test = $env->getTest($name)) { + return array($name, $test); + } + + if ($stream->test(Twig_Token::NAME_TYPE)) { + // try 2-words tests + $name = $name.' '.$parser->getCurrentToken()->getValue(); + + if ($test = $env->getTest($name)) { + $parser->getStream()->next(); + + return array($name, $test); + } + } + + $message = sprintf('The test "%s" does not exist', $name); + if ($alternatives = $env->computeAlternatives($name, array_keys($env->getTests()))) { + $message = sprintf('%s. Did you mean "%s"', $message, implode('", "', $alternatives)); + } + + throw new Twig_Error_Syntax($message, $line, $parser->getFilename()); + } + + protected function getTestNodeClass(Twig_Parser $parser, $test) + { + if ($test instanceof Twig_SimpleTest) { + return $test->getNodeClass(); + } + + return $test instanceof Twig_Test_Node ? $test->getClass() : 'Twig_Node_Expression_Test'; + } + + /** + * Returns the name of the extension. + * + * @return string The extension name + */ + public function getName() + { + return 'core'; + } +} + +/** + * Cycles over a value. + * + * @param ArrayAccess|array $values An array or an ArrayAccess instance + * @param int $position The cycle position + * + * @return string The next value in the cycle + */ +function twig_cycle($values, $position) +{ + if (!is_array($values) && !$values instanceof ArrayAccess) { + return $values; + } + + return $values[$position % count($values)]; +} + +/** + * Returns a random value depending on the supplied parameter type: + * - a random item from a Traversable or array + * - a random character from a string + * - a random integer between 0 and the integer parameter. + * + * @param Twig_Environment $env A Twig_Environment instance + * @param Traversable|array|int|string $values The values to pick a random item from + * + * @throws Twig_Error_Runtime When $values is an empty array (does not apply to an empty string which is returned as is). + * + * @return mixed A random value from the given sequence + */ +function twig_random(Twig_Environment $env, $values = null) +{ + if (null === $values) { + return mt_rand(); + } + + if (is_int($values) || is_float($values)) { + return $values < 0 ? mt_rand($values, 0) : mt_rand(0, $values); + } + + if ($values instanceof Traversable) { + $values = iterator_to_array($values); + } elseif (is_string($values)) { + if ('' === $values) { + return ''; + } + if (null !== $charset = $env->getCharset()) { + if ('UTF-8' != $charset) { + $values = twig_convert_encoding($values, 'UTF-8', $charset); + } + + // unicode version of str_split() + // split at all positions, but not after the start and not before the end + $values = preg_split('/(? $value) { + $values[$i] = twig_convert_encoding($value, $charset, 'UTF-8'); + } + } + } else { + return $values[mt_rand(0, strlen($values) - 1)]; + } + } + + if (!is_array($values)) { + return $values; + } + + if (0 === count($values)) { + throw new Twig_Error_Runtime('The random function cannot pick from an empty array.'); + } + + return $values[array_rand($values, 1)]; +} + +/** + * Converts a date to the given format. + * + *
+ *   {{ post.published_at|date("m/d/Y") }}
+ * 
+ * + * @param Twig_Environment $env A Twig_Environment instance + * @param DateTime|DateTimeInterface|DateInterval|string $date A date + * @param string|null $format The target format, null to use the default + * @param DateTimeZone|string|null|false $timezone The target timezone, null to use the default, false to leave unchanged + * + * @return string The formatted date + */ +function twig_date_format_filter(Twig_Environment $env, $date, $format = null, $timezone = null) +{ + if (null === $format) { + $formats = $env->getExtension('core')->getDateFormat(); + $format = $date instanceof DateInterval ? $formats[1] : $formats[0]; + } + + if ($date instanceof DateInterval) { + return $date->format($format); + } + + return twig_date_converter($env, $date, $timezone)->format($format); +} + +/** + * Returns a new date object modified. + * + *
+ *   {{ post.published_at|date_modify("-1day")|date("m/d/Y") }}
+ * 
+ * + * @param Twig_Environment $env A Twig_Environment instance + * @param DateTime|string $date A date + * @param string $modifier A modifier string + * + * @return DateTime A new date object + */ +function twig_date_modify_filter(Twig_Environment $env, $date, $modifier) +{ + $date = twig_date_converter($env, $date, false); + $resultDate = $date->modify($modifier); + + // This is a hack to ensure PHP 5.2 support and support for DateTimeImmutable + // DateTime::modify does not return the modified DateTime object < 5.3.0 + // and DateTimeImmutable does not modify $date. + return null === $resultDate ? $date : $resultDate; +} + +/** + * Converts an input to a DateTime instance. + * + *
+ *    {% if date(user.created_at) < date('+2days') %}
+ *      {# do something #}
+ *    {% endif %}
+ * 
+ * + * @param Twig_Environment $env A Twig_Environment instance + * @param DateTime|DateTimeInterface|string|null $date A date + * @param DateTimeZone|string|null|false $timezone The target timezone, null to use the default, false to leave unchanged + * + * @return DateTime A DateTime instance + */ +function twig_date_converter(Twig_Environment $env, $date = null, $timezone = null) +{ + // determine the timezone + if (false !== $timezone) { + if (null === $timezone) { + $timezone = $env->getExtension('core')->getTimezone(); + } elseif (!$timezone instanceof DateTimeZone) { + $timezone = new DateTimeZone($timezone); + } + } + + // immutable dates + if ($date instanceof DateTimeImmutable) { + return false !== $timezone ? $date->setTimezone($timezone) : $date; + } + + if ($date instanceof DateTime || $date instanceof DateTimeInterface) { + $date = clone $date; + if (false !== $timezone) { + $date->setTimezone($timezone); + } + + return $date; + } + + if (null === $date || 'now' === $date) { + return new DateTime($date, false !== $timezone ? $timezone : $env->getExtension('core')->getTimezone()); + } + + $asString = (string) $date; + if (ctype_digit($asString) || (!empty($asString) && '-' === $asString[0] && ctype_digit(substr($asString, 1)))) { + $date = new DateTime('@'.$date); + } else { + $date = new DateTime($date, $env->getExtension('core')->getTimezone()); + } + + if (false !== $timezone) { + $date->setTimezone($timezone); + } + + return $date; +} + +/** + * Replaces strings within a string. + * + * @param string $str String to replace in + * @param array|Traversable $from Replace values + * @param string|null $to Replace to, deprecated (@see http://php.net/manual/en/function.strtr.php) + * + * @return string + */ +function twig_replace_filter($str, $from, $to = null) +{ + if ($from instanceof Traversable) { + $from = iterator_to_array($from); + } elseif (is_string($from) && is_string($to)) { + @trigger_error('Using "replace" with character by character replacement is deprecated and will be removed in Twig 2.0', E_USER_DEPRECATED); + + return strtr($str, $from, $to); + } elseif (!is_array($from)) { + throw new Twig_Error_Runtime(sprintf('The "replace" filter expects an array or "Traversable" as replace values, got "%s".',is_object($from) ? get_class($from) : gettype($from))); + } + + return strtr($str, $from); +} + +/** + * Rounds a number. + * + * @param int|float $value The value to round + * @param int|float $precision The rounding precision + * @param string $method The method to use for rounding + * + * @return int|float The rounded number + */ +function twig_round($value, $precision = 0, $method = 'common') +{ + if ('common' == $method) { + return round($value, $precision); + } + + if ('ceil' != $method && 'floor' != $method) { + throw new Twig_Error_Runtime('The round filter only supports the "common", "ceil", and "floor" methods.'); + } + + return $method($value * pow(10, $precision)) / pow(10, $precision); +} + +/** + * Number format filter. + * + * All of the formatting options can be left null, in that case the defaults will + * be used. Supplying any of the parameters will override the defaults set in the + * environment object. + * + * @param Twig_Environment $env A Twig_Environment instance + * @param mixed $number A float/int/string of the number to format + * @param int $decimal The number of decimal points to display. + * @param string $decimalPoint The character(s) to use for the decimal point. + * @param string $thousandSep The character(s) to use for the thousands separator. + * + * @return string The formatted number + */ +function twig_number_format_filter(Twig_Environment $env, $number, $decimal = null, $decimalPoint = null, $thousandSep = null) +{ + $defaults = $env->getExtension('core')->getNumberFormat(); + if (null === $decimal) { + $decimal = $defaults[0]; + } + + if (null === $decimalPoint) { + $decimalPoint = $defaults[1]; + } + + if (null === $thousandSep) { + $thousandSep = $defaults[2]; + } + + return number_format((float) $number, $decimal, $decimalPoint, $thousandSep); +} + +/** + * URL encodes (RFC 3986) a string as a path segment or an array as a query string. + * + * @param string|array $url A URL or an array of query parameters + * + * @return string The URL encoded value + */ +function twig_urlencode_filter($url) +{ + if (is_array($url)) { + if (defined('PHP_QUERY_RFC3986')) { + return http_build_query($url, '', '&', PHP_QUERY_RFC3986); + } + + return http_build_query($url, '', '&'); + } + + return rawurlencode($url); +} + +if (PHP_VERSION_ID < 50300) { + /** + * JSON encodes a variable. + * + * @param mixed $value The value to encode. + * @param int $options Not used on PHP 5.2.x + * + * @return mixed The JSON encoded value + */ + function twig_jsonencode_filter($value, $options = 0) + { + if ($value instanceof Twig_Markup) { + $value = (string) $value; + } elseif (is_array($value)) { + array_walk_recursive($value, '_twig_markup2string'); + } + + return json_encode($value); + } +} else { + /** + * JSON encodes a variable. + * + * @param mixed $value The value to encode. + * @param int $options Bitmask consisting of JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT + * + * @return mixed The JSON encoded value + */ + function twig_jsonencode_filter($value, $options = 0) + { + if ($value instanceof Twig_Markup) { + $value = (string) $value; + } elseif (is_array($value)) { + array_walk_recursive($value, '_twig_markup2string'); + } + + return json_encode($value, $options); + } +} + +function _twig_markup2string(&$value) +{ + if ($value instanceof Twig_Markup) { + $value = (string) $value; + } +} + +/** + * Merges an array with another one. + * + *
+ *  {% set items = { 'apple': 'fruit', 'orange': 'fruit' } %}
+ *
+ *  {% set items = items|merge({ 'peugeot': 'car' }) %}
+ *
+ *  {# items now contains { 'apple': 'fruit', 'orange': 'fruit', 'peugeot': 'car' } #}
+ * 
+ * + * @param array|Traversable $arr1 An array + * @param array|Traversable $arr2 An array + * + * @return array The merged array + */ +function twig_array_merge($arr1, $arr2) +{ + if ($arr1 instanceof Traversable) { + $arr1 = iterator_to_array($arr1); + } elseif (!is_array($arr1)) { + throw new Twig_Error_Runtime(sprintf('The merge filter only works with arrays or "Traversable", got "%s" as first argument.', gettype($arr1))); + } + + if ($arr2 instanceof Traversable) { + $arr2 = iterator_to_array($arr2); + } elseif (!is_array($arr2)) { + throw new Twig_Error_Runtime(sprintf('The merge filter only works with arrays or "Traversable", got "%s" as second argument.', gettype($arr2))); + } + + return array_merge($arr1, $arr2); +} + +/** + * Slices a variable. + * + * @param Twig_Environment $env A Twig_Environment instance + * @param mixed $item A variable + * @param int $start Start of the slice + * @param int $length Size of the slice + * @param bool $preserveKeys Whether to preserve key or not (when the input is an array) + * + * @return mixed The sliced variable + */ +function twig_slice(Twig_Environment $env, $item, $start, $length = null, $preserveKeys = false) +{ + if ($item instanceof Traversable) { + if ($item instanceof IteratorAggregate) { + $item = $item->getIterator(); + } + + if ($start >= 0 && $length >= 0 && $item instanceof Iterator) { + try { + return iterator_to_array(new LimitIterator($item, $start, $length === null ? -1 : $length), $preserveKeys); + } catch (OutOfBoundsException $exception) { + return array(); + } + } + + $item = iterator_to_array($item, $preserveKeys); + } + + if (is_array($item)) { + return array_slice($item, $start, $length, $preserveKeys); + } + + $item = (string) $item; + + if (function_exists('mb_get_info') && null !== $charset = $env->getCharset()) { + return (string) mb_substr($item, $start, null === $length ? mb_strlen($item, $charset) - $start : $length, $charset); + } + + return (string) (null === $length ? substr($item, $start) : substr($item, $start, $length)); +} + +/** + * Returns the first element of the item. + * + * @param Twig_Environment $env A Twig_Environment instance + * @param mixed $item A variable + * + * @return mixed The first element of the item + */ +function twig_first(Twig_Environment $env, $item) +{ + $elements = twig_slice($env, $item, 0, 1, false); + + return is_string($elements) ? $elements : current($elements); +} + +/** + * Returns the last element of the item. + * + * @param Twig_Environment $env A Twig_Environment instance + * @param mixed $item A variable + * + * @return mixed The last element of the item + */ +function twig_last(Twig_Environment $env, $item) +{ + $elements = twig_slice($env, $item, -1, 1, false); + + return is_string($elements) ? $elements : current($elements); +} + +/** + * Joins the values to a string. + * + * The separator between elements is an empty string per default, you can define it with the optional parameter. + * + *
+ *  {{ [1, 2, 3]|join('|') }}
+ *  {# returns 1|2|3 #}
+ *
+ *  {{ [1, 2, 3]|join }}
+ *  {# returns 123 #}
+ * 
+ * + * @param array $value An array + * @param string $glue The separator + * + * @return string The concatenated string + */ +function twig_join_filter($value, $glue = '') +{ + if ($value instanceof Traversable) { + $value = iterator_to_array($value, false); + } + + return implode($glue, (array) $value); +} + +/** + * Splits the string into an array. + * + *
+ *  {{ "one,two,three"|split(',') }}
+ *  {# returns [one, two, three] #}
+ *
+ *  {{ "one,two,three,four,five"|split(',', 3) }}
+ *  {# returns [one, two, "three,four,five"] #}
+ *
+ *  {{ "123"|split('') }}
+ *  {# returns [1, 2, 3] #}
+ *
+ *  {{ "aabbcc"|split('', 2) }}
+ *  {# returns [aa, bb, cc] #}
+ * 
+ * + * @param string $value A string + * @param string $delimiter The delimiter + * @param int $limit The limit + * + * @return array The split string as an array + */ +function twig_split_filter(Twig_Environment $env, $value, $delimiter, $limit = null) +{ + if (!empty($delimiter)) { + return null === $limit ? explode($delimiter, $value) : explode($delimiter, $value, $limit); + } + + if (!function_exists('mb_get_info') || null === $charset = $env->getCharset()) { + return str_split($value, null === $limit ? 1 : $limit); + } + + if ($limit <= 1) { + return preg_split('/(? + * {% for key in array|keys %} + * {# ... #} + * {% endfor %} + * + * + * @param array $array An array + * + * @return array The keys + */ +function twig_get_array_keys_filter($array) +{ + if ($array instanceof Traversable) { + return array_keys(iterator_to_array($array)); + } + + if (!is_array($array)) { + return array(); + } + + return array_keys($array); +} + +/** + * Reverses a variable. + * + * @param Twig_Environment $env A Twig_Environment instance + * @param array|Traversable|string $item An array, a Traversable instance, or a string + * @param bool $preserveKeys Whether to preserve key or not + * + * @return mixed The reversed input + */ +function twig_reverse_filter(Twig_Environment $env, $item, $preserveKeys = false) +{ + if ($item instanceof Traversable) { + return array_reverse(iterator_to_array($item), $preserveKeys); + } + + if (is_array($item)) { + return array_reverse($item, $preserveKeys); + } + + if (null !== $charset = $env->getCharset()) { + $string = (string) $item; + + if ('UTF-8' != $charset) { + $item = twig_convert_encoding($string, 'UTF-8', $charset); + } + + preg_match_all('/./us', $item, $matches); + + $string = implode('', array_reverse($matches[0])); + + if ('UTF-8' != $charset) { + $string = twig_convert_encoding($string, $charset, 'UTF-8'); + } + + return $string; + } + + return strrev((string) $item); +} + +/** + * Sorts an array. + * + * @param array|Traversable $array + * + * @return array + */ +function twig_sort_filter($array) +{ + if ($array instanceof Traversable) { + $array = iterator_to_array($array); + } elseif (!is_array($array)) { + throw new Twig_Error_Runtime(sprintf('The sort filter only works with arrays or "Traversable", got "%s".', gettype($array))); + } + + asort($array); + + return $array; +} + +/** + * @internal + */ +function twig_in_filter($value, $compare) +{ + if (is_array($compare)) { + return in_array($value, $compare, is_object($value) || is_resource($value)); + } elseif (is_string($compare) && (is_string($value) || is_int($value) || is_float($value))) { + return '' === $value || false !== strpos($compare, (string) $value); + } elseif ($compare instanceof Traversable) { + return in_array($value, iterator_to_array($compare, false), is_object($value) || is_resource($value)); + } + + return false; +} + +/** + * Escapes a string. + * + * @param Twig_Environment $env A Twig_Environment instance + * @param string $string The value to be escaped + * @param string $strategy The escaping strategy + * @param string $charset The charset + * @param bool $autoescape Whether the function is called by the auto-escaping feature (true) or by the developer (false) + * + * @return string + */ +function twig_escape_filter(Twig_Environment $env, $string, $strategy = 'html', $charset = null, $autoescape = false) +{ + if ($autoescape && $string instanceof Twig_Markup) { + return $string; + } + + if (!is_string($string)) { + if (is_object($string) && method_exists($string, '__toString')) { + $string = (string) $string; + } elseif (in_array($strategy, array('html', 'js', 'css', 'html_attr', 'url'))) { + return $string; + } + } + + if (null === $charset) { + $charset = $env->getCharset(); + } + + switch ($strategy) { + case 'html': + // see http://php.net/htmlspecialchars + + // Using a static variable to avoid initializing the array + // each time the function is called. Moving the declaration on the + // top of the function slow downs other escaping strategies. + static $htmlspecialcharsCharsets; + + if (null === $htmlspecialcharsCharsets) { + if (defined('HHVM_VERSION')) { + $htmlspecialcharsCharsets = array('utf-8' => true, 'UTF-8' => true); + } else { + $htmlspecialcharsCharsets = array( + 'ISO-8859-1' => true, 'ISO8859-1' => true, + 'ISO-8859-15' => true, 'ISO8859-15' => true, + 'utf-8' => true, 'UTF-8' => true, + 'CP866' => true, 'IBM866' => true, '866' => true, + 'CP1251' => true, 'WINDOWS-1251' => true, 'WIN-1251' => true, + '1251' => true, + 'CP1252' => true, 'WINDOWS-1252' => true, '1252' => true, + 'KOI8-R' => true, 'KOI8-RU' => true, 'KOI8R' => true, + 'BIG5' => true, '950' => true, + 'GB2312' => true, '936' => true, + 'BIG5-HKSCS' => true, + 'SHIFT_JIS' => true, 'SJIS' => true, '932' => true, + 'EUC-JP' => true, 'EUCJP' => true, + 'ISO8859-5' => true, 'ISO-8859-5' => true, 'MACROMAN' => true, + ); + } + } + + if (isset($htmlspecialcharsCharsets[$charset])) { + return htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE, $charset); + } + + if (isset($htmlspecialcharsCharsets[strtoupper($charset)])) { + // cache the lowercase variant for future iterations + $htmlspecialcharsCharsets[$charset] = true; + + return htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE, $charset); + } + + $string = twig_convert_encoding($string, 'UTF-8', $charset); + $string = htmlspecialchars($string, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); + + return twig_convert_encoding($string, $charset, 'UTF-8'); + + case 'js': + // escape all non-alphanumeric characters + // into their \xHH or \uHHHH representations + if ('UTF-8' != $charset) { + $string = twig_convert_encoding($string, 'UTF-8', $charset); + } + + if (0 == strlen($string) ? false : (1 == preg_match('/^./su', $string) ? false : true)) { + throw new Twig_Error_Runtime('The string to escape is not a valid UTF-8 string.'); + } + + $string = preg_replace_callback('#[^a-zA-Z0-9,\._]#Su', '_twig_escape_js_callback', $string); + + if ('UTF-8' != $charset) { + $string = twig_convert_encoding($string, $charset, 'UTF-8'); + } + + return $string; + + case 'css': + if ('UTF-8' != $charset) { + $string = twig_convert_encoding($string, 'UTF-8', $charset); + } + + if (0 == strlen($string) ? false : (1 == preg_match('/^./su', $string) ? false : true)) { + throw new Twig_Error_Runtime('The string to escape is not a valid UTF-8 string.'); + } + + $string = preg_replace_callback('#[^a-zA-Z0-9]#Su', '_twig_escape_css_callback', $string); + + if ('UTF-8' != $charset) { + $string = twig_convert_encoding($string, $charset, 'UTF-8'); + } + + return $string; + + case 'html_attr': + if ('UTF-8' != $charset) { + $string = twig_convert_encoding($string, 'UTF-8', $charset); + } + + if (0 == strlen($string) ? false : (1 == preg_match('/^./su', $string) ? false : true)) { + throw new Twig_Error_Runtime('The string to escape is not a valid UTF-8 string.'); + } + + $string = preg_replace_callback('#[^a-zA-Z0-9,\.\-_]#Su', '_twig_escape_html_attr_callback', $string); + + if ('UTF-8' != $charset) { + $string = twig_convert_encoding($string, $charset, 'UTF-8'); + } + + return $string; + + case 'url': + if (PHP_VERSION_ID < 50300) { + return str_replace('%7E', '~', rawurlencode($string)); + } + + return rawurlencode($string); + + default: + static $escapers; + + if (null === $escapers) { + $escapers = $env->getExtension('core')->getEscapers(); + } + + if (isset($escapers[$strategy])) { + return call_user_func($escapers[$strategy], $env, $string, $charset); + } + + $validStrategies = implode(', ', array_merge(array('html', 'js', 'url', 'css', 'html_attr'), array_keys($escapers))); + + throw new Twig_Error_Runtime(sprintf('Invalid escaping strategy "%s" (valid ones: %s).', $strategy, $validStrategies)); + } +} + +/** + * @internal + */ +function twig_escape_filter_is_safe(Twig_Node $filterArgs) +{ + foreach ($filterArgs as $arg) { + if ($arg instanceof Twig_Node_Expression_Constant) { + return array($arg->getAttribute('value')); + } + + return array(); + } + + return array('html'); +} + +if (function_exists('mb_convert_encoding')) { + function twig_convert_encoding($string, $to, $from) + { + return mb_convert_encoding($string, $to, $from); + } +} elseif (function_exists('iconv')) { + function twig_convert_encoding($string, $to, $from) + { + return iconv($from, $to, $string); + } +} else { + function twig_convert_encoding($string, $to, $from) + { + throw new Twig_Error_Runtime('No suitable convert encoding function (use UTF-8 as your encoding or install the iconv or mbstring extension).'); + } +} + +function _twig_escape_js_callback($matches) +{ + $char = $matches[0]; + + // \xHH + if (!isset($char[1])) { + return '\\x'.strtoupper(substr('00'.bin2hex($char), -2)); + } + + // \uHHHH + $char = twig_convert_encoding($char, 'UTF-16BE', 'UTF-8'); + + return '\\u'.strtoupper(substr('0000'.bin2hex($char), -4)); +} + +function _twig_escape_css_callback($matches) +{ + $char = $matches[0]; + + // \xHH + if (!isset($char[1])) { + $hex = ltrim(strtoupper(bin2hex($char)), '0'); + if (0 === strlen($hex)) { + $hex = '0'; + } + + return '\\'.$hex.' '; + } + + // \uHHHH + $char = twig_convert_encoding($char, 'UTF-16BE', 'UTF-8'); + + return '\\'.ltrim(strtoupper(bin2hex($char)), '0').' '; +} + +/** + * This function is adapted from code coming from Zend Framework. + * + * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com) + * @license http://framework.zend.com/license/new-bsd New BSD License + */ +function _twig_escape_html_attr_callback($matches) +{ + /* + * While HTML supports far more named entities, the lowest common denominator + * has become HTML5's XML Serialisation which is restricted to the those named + * entities that XML supports. Using HTML entities would result in this error: + * XML Parsing Error: undefined entity + */ + static $entityMap = array( + 34 => 'quot', /* quotation mark */ + 38 => 'amp', /* ampersand */ + 60 => 'lt', /* less-than sign */ + 62 => 'gt', /* greater-than sign */ + ); + + $chr = $matches[0]; + $ord = ord($chr); + + /* + * The following replaces characters undefined in HTML with the + * hex entity for the Unicode replacement character. + */ + if (($ord <= 0x1f && $chr != "\t" && $chr != "\n" && $chr != "\r") || ($ord >= 0x7f && $ord <= 0x9f)) { + return '�'; + } + + /* + * Check if the current character to escape has a name entity we should + * replace it with while grabbing the hex value of the character. + */ + if (strlen($chr) == 1) { + $hex = strtoupper(substr('00'.bin2hex($chr), -2)); + } else { + $chr = twig_convert_encoding($chr, 'UTF-16BE', 'UTF-8'); + $hex = strtoupper(substr('0000'.bin2hex($chr), -4)); + } + + $int = hexdec($hex); + if (array_key_exists($int, $entityMap)) { + return sprintf('&%s;', $entityMap[$int]); + } + + /* + * Per OWASP recommendations, we'll use hex entities for any other + * characters where a named entity does not exist. + */ + return sprintf('&#x%s;', $hex); +} + +// add multibyte extensions if possible +if (function_exists('mb_get_info')) { + /** + * Returns the length of a variable. + * + * @param Twig_Environment $env A Twig_Environment instance + * @param mixed $thing A variable + * + * @return int The length of the value + */ + function twig_length_filter(Twig_Environment $env, $thing) + { + return is_scalar($thing) ? mb_strlen($thing, $env->getCharset()) : count($thing); + } + + /** + * Converts a string to uppercase. + * + * @param Twig_Environment $env A Twig_Environment instance + * @param string $string A string + * + * @return string The uppercased string + */ + function twig_upper_filter(Twig_Environment $env, $string) + { + if (null !== ($charset = $env->getCharset())) { + return mb_strtoupper($string, $charset); + } + + return strtoupper($string); + } + + /** + * Converts a string to lowercase. + * + * @param Twig_Environment $env A Twig_Environment instance + * @param string $string A string + * + * @return string The lowercased string + */ + function twig_lower_filter(Twig_Environment $env, $string) + { + if (null !== ($charset = $env->getCharset())) { + return mb_strtolower($string, $charset); + } + + return strtolower($string); + } + + /** + * Returns a titlecased string. + * + * @param Twig_Environment $env A Twig_Environment instance + * @param string $string A string + * + * @return string The titlecased string + */ + function twig_title_string_filter(Twig_Environment $env, $string) + { + if (null !== ($charset = $env->getCharset())) { + return mb_convert_case($string, MB_CASE_TITLE, $charset); + } + + return ucwords(strtolower($string)); + } + + /** + * Returns a capitalized string. + * + * @param Twig_Environment $env A Twig_Environment instance + * @param string $string A string + * + * @return string The capitalized string + */ + function twig_capitalize_string_filter(Twig_Environment $env, $string) + { + if (null !== $charset = $env->getCharset()) { + return mb_strtoupper(mb_substr($string, 0, 1, $charset), $charset).mb_strtolower(mb_substr($string, 1, mb_strlen($string, $charset), $charset), $charset); + } + + return ucfirst(strtolower($string)); + } +} +// and byte fallback +else { + /** + * Returns the length of a variable. + * + * @param Twig_Environment $env A Twig_Environment instance + * @param mixed $thing A variable + * + * @return int The length of the value + */ + function twig_length_filter(Twig_Environment $env, $thing) + { + return is_scalar($thing) ? strlen($thing) : count($thing); + } + + /** + * Returns a titlecased string. + * + * @param Twig_Environment $env A Twig_Environment instance + * @param string $string A string + * + * @return string The titlecased string + */ + function twig_title_string_filter(Twig_Environment $env, $string) + { + return ucwords(strtolower($string)); + } + + /** + * Returns a capitalized string. + * + * @param Twig_Environment $env A Twig_Environment instance + * @param string $string A string + * + * @return string The capitalized string + */ + function twig_capitalize_string_filter(Twig_Environment $env, $string) + { + return ucfirst(strtolower($string)); + } +} + +/** + * @internal + */ +function twig_ensure_traversable($seq) +{ + if ($seq instanceof Traversable || is_array($seq)) { + return $seq; + } + + return array(); +} + +/** + * Checks if a variable is empty. + * + *
+ * {# evaluates to true if the foo variable is null, false, or the empty string #}
+ * {% if foo is empty %}
+ *     {# ... #}
+ * {% endif %}
+ * 
+ * + * @param mixed $value A variable + * + * @return bool true if the value is empty, false otherwise + */ +function twig_test_empty($value) +{ + if ($value instanceof Countable) { + return 0 == count($value); + } + + return '' === $value || false === $value || null === $value || array() === $value; +} + +/** + * Checks if a variable is traversable. + * + *
+ * {# evaluates to true if the foo variable is an array or a traversable object #}
+ * {% if foo is traversable %}
+ *     {# ... #}
+ * {% endif %}
+ * 
+ * + * @param mixed $value A variable + * + * @return bool true if the value is traversable + */ +function twig_test_iterable($value) +{ + return $value instanceof Traversable || is_array($value); +} + +/** + * Renders a template. + * + * @param Twig_Environment $env + * @param array $context + * @param string|array $template The template to render or an array of templates to try consecutively + * @param array $variables The variables to pass to the template + * @param bool $withContext + * @param bool $ignoreMissing Whether to ignore missing templates or not + * @param bool $sandboxed Whether to sandbox the template or not + * + * @return string The rendered template + */ +function twig_include(Twig_Environment $env, $context, $template, $variables = array(), $withContext = true, $ignoreMissing = false, $sandboxed = false) +{ + $alreadySandboxed = false; + $sandbox = null; + if ($withContext) { + $variables = array_merge($context, $variables); + } + + if ($isSandboxed = $sandboxed && $env->hasExtension('sandbox')) { + $sandbox = $env->getExtension('sandbox'); + if (!$alreadySandboxed = $sandbox->isSandboxed()) { + $sandbox->enableSandbox(); + } + } + + $result = null; + try { + $result = $env->resolveTemplate($template)->render($variables); + } catch (Twig_Error_Loader $e) { + if (!$ignoreMissing) { + if ($isSandboxed && !$alreadySandboxed) { + $sandbox->disableSandbox(); + } + + throw $e; + } + } + + if ($isSandboxed && !$alreadySandboxed) { + $sandbox->disableSandbox(); + } + + return $result; +} + +/** + * Returns a template content without rendering it. + * + * @param string $name The template name + * @param bool $ignoreMissing Whether to ignore missing templates or not + * + * @return string The template source + */ +function twig_source(Twig_Environment $env, $name, $ignoreMissing = false) +{ + try { + return $env->getLoader()->getSource($name); + } catch (Twig_Error_Loader $e) { + if (!$ignoreMissing) { + throw $e; + } + } +} + +/** + * Provides the ability to get constants from instances as well as class/global constants. + * + * @param string $constant The name of the constant + * @param null|object $object The object to get the constant from + * + * @return string + */ +function twig_constant($constant, $object = null) +{ + if (null !== $object) { + $constant = get_class($object).'::'.$constant; + } + + return constant($constant); +} + +/** + * Batches item. + * + * @param array $items An array of items + * @param int $size The size of the batch + * @param mixed $fill A value used to fill missing items + * + * @return array + */ +function twig_array_batch($items, $size, $fill = null) +{ + if ($items instanceof Traversable) { + $items = iterator_to_array($items, false); + } + + $size = ceil($size); + + $result = array_chunk($items, $size, true); + + if (null !== $fill && !empty($result)) { + $last = count($result) - 1; + if ($fillCount = $size - count($result[$last])) { + $result[$last] = array_merge( + $result[$last], + array_fill(0, $fillCount, $fill) + ); + } + } + + return $result; +} diff --git a/Twig/Extension/Debug.php b/Twig/Extension/Debug.php new file mode 100644 index 0000000..86d07c2 --- /dev/null +++ b/Twig/Extension/Debug.php @@ -0,0 +1,71 @@ + $isDumpOutputHtmlSafe ? array('html') : array(), 'needs_context' => true, 'needs_environment' => true)), + ); + } + + /** + * Returns the name of the extension. + * + * @return string The extension name + */ + public function getName() + { + return 'debug'; + } +} + +function twig_var_dump(Twig_Environment $env, $context) +{ + if (!$env->isDebug()) { + return; + } + + ob_start(); + + $count = func_num_args(); + if (2 === $count) { + $vars = array(); + foreach ($context as $key => $value) { + if (!$value instanceof Twig_Template) { + $vars[$key] = $value; + } + } + + var_dump($vars); + } else { + for ($i = 2; $i < $count; ++$i) { + var_dump(func_get_arg($i)); + } + } + + return ob_get_clean(); +} diff --git a/Twig/Extension/Escaper.php b/Twig/Extension/Escaper.php new file mode 100644 index 0000000..053a895 --- /dev/null +++ b/Twig/Extension/Escaper.php @@ -0,0 +1,122 @@ +setDefaultStrategy($defaultStrategy); + } + + /** + * Returns the token parser instances to add to the existing list. + * + * @return array An array of Twig_TokenParserInterface or Twig_TokenParserBrokerInterface instances + */ + public function getTokenParsers() + { + return array(new Twig_TokenParser_AutoEscape()); + } + + /** + * Returns the node visitor instances to add to the existing list. + * + * @return Twig_NodeVisitorInterface[] An array of Twig_NodeVisitorInterface instances + */ + public function getNodeVisitors() + { + return array(new Twig_NodeVisitor_Escaper()); + } + + /** + * Returns a list of filters to add to the existing list. + * + * @return array An array of filters + */ + public function getFilters() + { + return array( + new Twig_SimpleFilter('raw', 'twig_raw_filter', array('is_safe' => array('all'))), + ); + } + + /** + * Sets the default strategy to use when not defined by the user. + * + * The strategy can be a valid PHP callback that takes the template + * "filename" as an argument and returns the strategy to use. + * + * @param string|false|callable $defaultStrategy An escaping strategy + */ + public function setDefaultStrategy($defaultStrategy) + { + // for BC + if (true === $defaultStrategy) { + @trigger_error('Using "true" as the default strategy is deprecated. Use "html" instead.', E_USER_DEPRECATED); + + $defaultStrategy = 'html'; + } + + if ('filename' === $defaultStrategy) { + $defaultStrategy = array('Twig_FileExtensionEscapingStrategy', 'guess'); + } + + $this->defaultStrategy = $defaultStrategy; + } + + /** + * Gets the default strategy to use when not defined by the user. + * + * @param string $filename The template "filename" + * + * @return string|false The default strategy to use for the template + */ + public function getDefaultStrategy($filename) + { + // disable string callables to avoid calling a function named html or js, + // or any other upcoming escaping strategy + if (!is_string($this->defaultStrategy) && false !== $this->defaultStrategy) { + return call_user_func($this->defaultStrategy, $filename); + } + + return $this->defaultStrategy; + } + + /** + * Returns the name of the extension. + * + * @return string The extension name + */ + public function getName() + { + return 'escaper'; + } +} + +/** + * Marks a variable as being safe. + * + * @param string $string A PHP variable + * + * @return string + */ +function twig_raw_filter($string) +{ + return $string; +} diff --git a/Twig/Extension/Optimizer.php b/Twig/Extension/Optimizer.php new file mode 100644 index 0000000..013fcb6 --- /dev/null +++ b/Twig/Extension/Optimizer.php @@ -0,0 +1,35 @@ +optimizers = $optimizers; + } + + /** + * {@inheritdoc} + */ + public function getNodeVisitors() + { + return array(new Twig_NodeVisitor_Optimizer($this->optimizers)); + } + + /** + * {@inheritdoc} + */ + public function getName() + { + return 'optimizer'; + } +} diff --git a/Twig/Extension/Profiler.php b/Twig/Extension/Profiler.php new file mode 100644 index 0000000..e21fdb6 --- /dev/null +++ b/Twig/Extension/Profiler.php @@ -0,0 +1,52 @@ +actives[] = $profile; + } + + public function enter(Twig_Profiler_Profile $profile) + { + $this->actives[0]->addProfile($profile); + array_unshift($this->actives, $profile); + } + + public function leave(Twig_Profiler_Profile $profile) + { + $profile->leave(); + array_shift($this->actives); + + if (1 === count($this->actives)) { + $this->actives[0]->leave(); + } + } + + /** + * {@inheritdoc} + */ + public function getNodeVisitors() + { + return array(new Twig_Profiler_NodeVisitor_Profiler($this->getName())); + } + + /** + * {@inheritdoc} + */ + public function getName() + { + return 'profiler'; + } +} diff --git a/Twig/Extension/Sandbox.php b/Twig/Extension/Sandbox.php new file mode 100644 index 0000000..3593e9e --- /dev/null +++ b/Twig/Extension/Sandbox.php @@ -0,0 +1,112 @@ +policy = $policy; + $this->sandboxedGlobally = $sandboxed; + } + + /** + * Returns the token parser instances to add to the existing list. + * + * @return array An array of Twig_TokenParserInterface or Twig_TokenParserBrokerInterface instances + */ + public function getTokenParsers() + { + return array(new Twig_TokenParser_Sandbox()); + } + + /** + * Returns the node visitor instances to add to the existing list. + * + * @return Twig_NodeVisitorInterface[] An array of Twig_NodeVisitorInterface instances + */ + public function getNodeVisitors() + { + return array(new Twig_NodeVisitor_Sandbox()); + } + + public function enableSandbox() + { + $this->sandboxed = true; + } + + public function disableSandbox() + { + $this->sandboxed = false; + } + + public function isSandboxed() + { + return $this->sandboxedGlobally || $this->sandboxed; + } + + public function isSandboxedGlobally() + { + return $this->sandboxedGlobally; + } + + public function setSecurityPolicy(Twig_Sandbox_SecurityPolicyInterface $policy) + { + $this->policy = $policy; + } + + public function getSecurityPolicy() + { + return $this->policy; + } + + public function checkSecurity($tags, $filters, $functions) + { + if ($this->isSandboxed()) { + $this->policy->checkSecurity($tags, $filters, $functions); + } + } + + public function checkMethodAllowed($obj, $method) + { + if ($this->isSandboxed()) { + $this->policy->checkMethodAllowed($obj, $method); + } + } + + public function checkPropertyAllowed($obj, $method) + { + if ($this->isSandboxed()) { + $this->policy->checkPropertyAllowed($obj, $method); + } + } + + public function ensureToStringAllowed($obj) + { + if ($this->isSandboxed() && is_object($obj)) { + $this->policy->checkMethodAllowed($obj, '__toString'); + } + + return $obj; + } + + /** + * Returns the name of the extension. + * + * @return string The extension name + */ + public function getName() + { + return 'sandbox'; + } +} diff --git a/Twig/Extension/Staging.php b/Twig/Extension/Staging.php new file mode 100644 index 0000000..583e6a9 --- /dev/null +++ b/Twig/Extension/Staging.php @@ -0,0 +1,115 @@ + + * + * @internal + */ +class Twig_Extension_Staging extends Twig_Extension +{ + protected $functions = array(); + protected $filters = array(); + protected $visitors = array(); + protected $tokenParsers = array(); + protected $globals = array(); + protected $tests = array(); + + public function addFunction($name, $function) + { + $this->functions[$name] = $function; + } + + /** + * {@inheritdoc} + */ + public function getFunctions() + { + return $this->functions; + } + + public function addFilter($name, $filter) + { + $this->filters[$name] = $filter; + } + + /** + * {@inheritdoc} + */ + public function getFilters() + { + return $this->filters; + } + + public function addNodeVisitor(Twig_NodeVisitorInterface $visitor) + { + $this->visitors[] = $visitor; + } + + /** + * {@inheritdoc} + */ + public function getNodeVisitors() + { + return $this->visitors; + } + + public function addTokenParser(Twig_TokenParserInterface $parser) + { + $this->tokenParsers[] = $parser; + } + + /** + * {@inheritdoc} + */ + public function getTokenParsers() + { + return $this->tokenParsers; + } + + public function addGlobal($name, $value) + { + $this->globals[$name] = $value; + } + + /** + * {@inheritdoc} + */ + public function getGlobals() + { + return $this->globals; + } + + public function addTest($name, $test) + { + $this->tests[$name] = $test; + } + + /** + * {@inheritdoc} + */ + public function getTests() + { + return $this->tests; + } + + /** + * {@inheritdoc} + */ + public function getName() + { + return 'staging'; + } +} diff --git a/Twig/Extension/StringLoader.php b/Twig/Extension/StringLoader.php new file mode 100644 index 0000000..d96673c --- /dev/null +++ b/Twig/Extension/StringLoader.php @@ -0,0 +1,47 @@ + true)), + ); + } + + /** + * {@inheritdoc} + */ + public function getName() + { + return 'string_loader'; + } +} + +/** + * Loads a template from a string. + * + *
+ * {{ include(template_from_string("Hello {{ name }}")) }}
+ * 
+ * + * @param Twig_Environment $env A Twig_Environment instance + * @param string $template A template as a string or object implementing __toString() + * + * @return Twig_Template A Twig_Template instance + */ +function twig_template_from_string(Twig_Environment $env, $template) +{ + return $env->createTemplate((string) $template); +} diff --git a/Twig/ExtensionInterface.php b/Twig/ExtensionInterface.php new file mode 100644 index 0000000..92abf7d --- /dev/null +++ b/Twig/ExtensionInterface.php @@ -0,0 +1,83 @@ + + */ +interface Twig_ExtensionInterface +{ + /** + * Initializes the runtime environment. + * + * This is where you can load some file that contains filter functions for instance. + * + * @param Twig_Environment $environment The current Twig_Environment instance + */ + public function initRuntime(Twig_Environment $environment); + + /** + * Returns the token parser instances to add to the existing list. + * + * @return Twig_TokenParserInterface[] + */ + public function getTokenParsers(); + + /** + * Returns the node visitor instances to add to the existing list. + * + * @return Twig_NodeVisitorInterface[] An array of Twig_NodeVisitorInterface instances + */ + public function getNodeVisitors(); + + /** + * Returns a list of filters to add to the existing list. + * + * @return Twig_SimpleFilter[] + */ + public function getFilters(); + + /** + * Returns a list of tests to add to the existing list. + * + * @return Twig_SimpleTest[] + */ + public function getTests(); + + /** + * Returns a list of functions to add to the existing list. + * + * @return Twig_SimpleFunction[] + */ + public function getFunctions(); + + /** + * Returns a list of operators to add to the existing list. + * + * @return array An array of operators + */ + public function getOperators(); + + /** + * Returns a list of global variables to add to the existing list. + * + * @return array An array of global variables + */ + public function getGlobals(); + + /** + * Returns the name of the extension. + * + * @return string The extension name + */ + public function getName(); +} diff --git a/Twig/FileExtensionEscapingStrategy.php b/Twig/FileExtensionEscapingStrategy.php new file mode 100644 index 0000000..9bda0b4 --- /dev/null +++ b/Twig/FileExtensionEscapingStrategy.php @@ -0,0 +1,58 @@ + + */ +class Twig_FileExtensionEscapingStrategy +{ + /** + * Guesses the best autoescaping strategy based on the file name. + * + * @param string $filename The template file name + * + * @return string|false The escaping strategy name to use or false to disable + */ + public static function guess($filename) + { + if (in_array(substr($filename, -1), array('/', '\\'))) { + return 'html'; // return html for directories + } + + if ('.twig' === substr($filename, -5)) { + $filename = substr($filename, 0, -5); + } + + $extension = pathinfo($filename, PATHINFO_EXTENSION); + + switch ($extension) { + case 'js': + return 'js'; + + case 'css': + return 'css'; + + case 'txt': + return false; + + default: + return 'html'; + } + } +} diff --git a/Twig/Filter.php b/Twig/Filter.php new file mode 100644 index 0000000..101d2e7 --- /dev/null +++ b/Twig/Filter.php @@ -0,0 +1,84 @@ + + * + * @deprecated since 1.12 (to be removed in 2.0) + */ +abstract class Twig_Filter implements Twig_FilterInterface, Twig_FilterCallableInterface +{ + protected $options; + protected $arguments = array(); + + public function __construct(array $options = array()) + { + $this->options = array_merge(array( + 'needs_environment' => false, + 'needs_context' => false, + 'pre_escape' => null, + 'preserves_safety' => null, + 'callable' => null, + ), $options); + } + + public function setArguments($arguments) + { + $this->arguments = $arguments; + } + + public function getArguments() + { + return $this->arguments; + } + + public function needsEnvironment() + { + return $this->options['needs_environment']; + } + + public function needsContext() + { + return $this->options['needs_context']; + } + + public function getSafe(Twig_Node $filterArgs) + { + if (isset($this->options['is_safe'])) { + return $this->options['is_safe']; + } + + if (isset($this->options['is_safe_callback'])) { + return call_user_func($this->options['is_safe_callback'], $filterArgs); + } + } + + public function getPreservesSafety() + { + return $this->options['preserves_safety']; + } + + public function getPreEscape() + { + return $this->options['pre_escape']; + } + + public function getCallable() + { + return $this->options['callable']; + } +} diff --git a/Twig/Filter/Function.php b/Twig/Filter/Function.php new file mode 100644 index 0000000..d679cab --- /dev/null +++ b/Twig/Filter/Function.php @@ -0,0 +1,40 @@ + + * + * @deprecated since 1.12 (to be removed in 2.0) + */ +class Twig_Filter_Function extends Twig_Filter +{ + protected $function; + + public function __construct($function, array $options = array()) + { + $options['callable'] = $function; + + parent::__construct($options); + + $this->function = $function; + } + + public function compile() + { + return $this->function; + } +} diff --git a/Twig/Filter/Method.php b/Twig/Filter/Method.php new file mode 100644 index 0000000..655aab4 --- /dev/null +++ b/Twig/Filter/Method.php @@ -0,0 +1,42 @@ + + * + * @deprecated since 1.12 (to be removed in 2.0) + */ +class Twig_Filter_Method extends Twig_Filter +{ + protected $extension; + protected $method; + + public function __construct(Twig_ExtensionInterface $extension, $method, array $options = array()) + { + $options['callable'] = array($extension, $method); + + parent::__construct($options); + + $this->extension = $extension; + $this->method = $method; + } + + public function compile() + { + return sprintf('$this->env->getExtension(\'%s\')->%s', $this->extension->getName(), $this->method); + } +} diff --git a/Twig/Filter/Node.php b/Twig/Filter/Node.php new file mode 100644 index 0000000..a922f50 --- /dev/null +++ b/Twig/Filter/Node.php @@ -0,0 +1,42 @@ + + * + * @deprecated since 1.12 (to be removed in 2.0) + */ +class Twig_Filter_Node extends Twig_Filter +{ + protected $class; + + public function __construct($class, array $options = array()) + { + parent::__construct($options); + + $this->class = $class; + } + + public function getClass() + { + return $this->class; + } + + public function compile() + { + } +} diff --git a/Twig/FilterCallableInterface.php b/Twig/FilterCallableInterface.php new file mode 100644 index 0000000..5679861 --- /dev/null +++ b/Twig/FilterCallableInterface.php @@ -0,0 +1,24 @@ + + * + * @deprecated since 1.12 (to be removed in 2.0) + */ +interface Twig_FilterCallableInterface +{ + public function getCallable(); +} diff --git a/Twig/FilterInterface.php b/Twig/FilterInterface.php new file mode 100644 index 0000000..6b0be0e --- /dev/null +++ b/Twig/FilterInterface.php @@ -0,0 +1,43 @@ + + * + * @deprecated since 1.12 (to be removed in 2.0) + */ +interface Twig_FilterInterface +{ + /** + * Compiles a filter. + * + * @return string The PHP code for the filter + */ + public function compile(); + + public function needsEnvironment(); + + public function needsContext(); + + public function getSafe(Twig_Node $filterArgs); + + public function getPreservesSafety(); + + public function getPreEscape(); + + public function setArguments($arguments); + + public function getArguments(); +} diff --git a/Twig/Function.php b/Twig/Function.php new file mode 100644 index 0000000..9fc76a8 --- /dev/null +++ b/Twig/Function.php @@ -0,0 +1,74 @@ + + * + * @deprecated since 1.12 (to be removed in 2.0) + */ +abstract class Twig_Function implements Twig_FunctionInterface, Twig_FunctionCallableInterface +{ + protected $options; + protected $arguments = array(); + + public function __construct(array $options = array()) + { + $this->options = array_merge(array( + 'needs_environment' => false, + 'needs_context' => false, + 'callable' => null, + ), $options); + } + + public function setArguments($arguments) + { + $this->arguments = $arguments; + } + + public function getArguments() + { + return $this->arguments; + } + + public function needsEnvironment() + { + return $this->options['needs_environment']; + } + + public function needsContext() + { + return $this->options['needs_context']; + } + + public function getSafe(Twig_Node $functionArgs) + { + if (isset($this->options['is_safe'])) { + return $this->options['is_safe']; + } + + if (isset($this->options['is_safe_callback'])) { + return call_user_func($this->options['is_safe_callback'], $functionArgs); + } + + return array(); + } + + public function getCallable() + { + return $this->options['callable']; + } +} diff --git a/Twig/Function/Function.php b/Twig/Function/Function.php new file mode 100644 index 0000000..ae83e15 --- /dev/null +++ b/Twig/Function/Function.php @@ -0,0 +1,41 @@ + + * + * @deprecated since 1.12 (to be removed in 2.0) + */ +class Twig_Function_Function extends Twig_Function +{ + protected $function; + + public function __construct($function, array $options = array()) + { + $options['callable'] = $function; + + parent::__construct($options); + + $this->function = $function; + } + + public function compile() + { + return $this->function; + } +} diff --git a/Twig/Function/Method.php b/Twig/Function/Method.php new file mode 100644 index 0000000..ba9945e --- /dev/null +++ b/Twig/Function/Method.php @@ -0,0 +1,43 @@ + + * + * @deprecated since 1.12 (to be removed in 2.0) + */ +class Twig_Function_Method extends Twig_Function +{ + protected $extension; + protected $method; + + public function __construct(Twig_ExtensionInterface $extension, $method, array $options = array()) + { + $options['callable'] = array($extension, $method); + + parent::__construct($options); + + $this->extension = $extension; + $this->method = $method; + } + + public function compile() + { + return sprintf('$this->env->getExtension(\'%s\')->%s', $this->extension->getName(), $this->method); + } +} diff --git a/Twig/Function/Node.php b/Twig/Function/Node.php new file mode 100644 index 0000000..118b0ba --- /dev/null +++ b/Twig/Function/Node.php @@ -0,0 +1,42 @@ + + * + * @deprecated since 1.12 (to be removed in 2.0) + */ +class Twig_Function_Node extends Twig_Function +{ + protected $class; + + public function __construct($class, array $options = array()) + { + parent::__construct($options); + + $this->class = $class; + } + + public function getClass() + { + return $this->class; + } + + public function compile() + { + } +} diff --git a/Twig/FunctionCallableInterface.php b/Twig/FunctionCallableInterface.php new file mode 100644 index 0000000..87d795e --- /dev/null +++ b/Twig/FunctionCallableInterface.php @@ -0,0 +1,24 @@ + + * + * @deprecated since 1.12 (to be removed in 2.0) + */ +interface Twig_FunctionCallableInterface +{ + public function getCallable(); +} diff --git a/Twig/FunctionInterface.php b/Twig/FunctionInterface.php new file mode 100644 index 0000000..f449234 --- /dev/null +++ b/Twig/FunctionInterface.php @@ -0,0 +1,40 @@ + + * + * @deprecated since 1.12 (to be removed in 2.0) + */ +interface Twig_FunctionInterface +{ + /** + * Compiles a function. + * + * @return string The PHP code for the function + */ + public function compile(); + + public function needsEnvironment(); + + public function needsContext(); + + public function getSafe(Twig_Node $filterArgs); + + public function setArguments($arguments); + + public function getArguments(); +} diff --git a/Twig/Lexer.php b/Twig/Lexer.php new file mode 100644 index 0000000..75f763f --- /dev/null +++ b/Twig/Lexer.php @@ -0,0 +1,411 @@ + + */ +class Twig_Lexer implements Twig_LexerInterface +{ + protected $tokens; + protected $code; + protected $cursor; + protected $lineno; + protected $end; + protected $state; + protected $states; + protected $brackets; + protected $env; + protected $filename; + protected $options; + protected $regexes; + protected $position; + protected $positions; + protected $currentVarBlockLine; + + const STATE_DATA = 0; + const STATE_BLOCK = 1; + const STATE_VAR = 2; + const STATE_STRING = 3; + const STATE_INTERPOLATION = 4; + + const REGEX_NAME = '/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/A'; + const REGEX_NUMBER = '/[0-9]+(?:\.[0-9]+)?/A'; + const REGEX_STRING = '/"([^#"\\\\]*(?:\\\\.[^#"\\\\]*)*)"|\'([^\'\\\\]*(?:\\\\.[^\'\\\\]*)*)\'/As'; + const REGEX_DQ_STRING_DELIM = '/"/A'; + const REGEX_DQ_STRING_PART = '/[^#"\\\\]*(?:(?:\\\\.|#(?!\{))[^#"\\\\]*)*/As'; + const PUNCTUATION = '()[]{}?:.,|'; + + public function __construct(Twig_Environment $env, array $options = array()) + { + $this->env = $env; + + $this->options = array_merge(array( + 'tag_comment' => array('{#', '#}'), + 'tag_block' => array('{%', '%}'), + 'tag_variable' => array('{{', '}}'), + 'whitespace_trim' => '-', + 'interpolation' => array('#{', '}'), + ), $options); + + $this->regexes = array( + 'lex_var' => '/\s*'.preg_quote($this->options['whitespace_trim'].$this->options['tag_variable'][1], '/').'\s*|\s*'.preg_quote($this->options['tag_variable'][1], '/').'/A', + 'lex_block' => '/\s*(?:'.preg_quote($this->options['whitespace_trim'].$this->options['tag_block'][1], '/').'\s*|\s*'.preg_quote($this->options['tag_block'][1], '/').')\n?/A', + 'lex_raw_data' => '/('.preg_quote($this->options['tag_block'][0].$this->options['whitespace_trim'], '/').'|'.preg_quote($this->options['tag_block'][0], '/').')\s*(?:end%s)\s*(?:'.preg_quote($this->options['whitespace_trim'].$this->options['tag_block'][1], '/').'\s*|\s*'.preg_quote($this->options['tag_block'][1], '/').')/s', + 'operator' => $this->getOperatorRegex(), + 'lex_comment' => '/(?:'.preg_quote($this->options['whitespace_trim'], '/').preg_quote($this->options['tag_comment'][1], '/').'\s*|'.preg_quote($this->options['tag_comment'][1], '/').')\n?/s', + 'lex_block_raw' => '/\s*(raw|verbatim)\s*(?:'.preg_quote($this->options['whitespace_trim'].$this->options['tag_block'][1], '/').'\s*|\s*'.preg_quote($this->options['tag_block'][1], '/').')/As', + 'lex_block_line' => '/\s*line\s+(\d+)\s*'.preg_quote($this->options['tag_block'][1], '/').'/As', + 'lex_tokens_start' => '/('.preg_quote($this->options['tag_variable'][0], '/').'|'.preg_quote($this->options['tag_block'][0], '/').'|'.preg_quote($this->options['tag_comment'][0], '/').')('.preg_quote($this->options['whitespace_trim'], '/').')?/s', + 'interpolation_start' => '/'.preg_quote($this->options['interpolation'][0], '/').'\s*/A', + 'interpolation_end' => '/\s*'.preg_quote($this->options['interpolation'][1], '/').'/A', + ); + } + + /** + * {@inheritdoc} + */ + public function tokenize($code, $filename = null) + { + if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2) { + $mbEncoding = mb_internal_encoding(); + mb_internal_encoding('ASCII'); + } else { + $mbEncoding = null; + } + + $this->code = str_replace(array("\r\n", "\r"), "\n", $code); + $this->filename = $filename; + $this->cursor = 0; + $this->lineno = 1; + $this->end = strlen($this->code); + $this->tokens = array(); + $this->state = self::STATE_DATA; + $this->states = array(); + $this->brackets = array(); + $this->position = -1; + + // find all token starts in one go + preg_match_all($this->regexes['lex_tokens_start'], $this->code, $matches, PREG_OFFSET_CAPTURE); + $this->positions = $matches; + + while ($this->cursor < $this->end) { + // dispatch to the lexing functions depending + // on the current state + switch ($this->state) { + case self::STATE_DATA: + $this->lexData(); + break; + + case self::STATE_BLOCK: + $this->lexBlock(); + break; + + case self::STATE_VAR: + $this->lexVar(); + break; + + case self::STATE_STRING: + $this->lexString(); + break; + + case self::STATE_INTERPOLATION: + $this->lexInterpolation(); + break; + } + } + + $this->pushToken(Twig_Token::EOF_TYPE); + + if (!empty($this->brackets)) { + list($expect, $lineno) = array_pop($this->brackets); + throw new Twig_Error_Syntax(sprintf('Unclosed "%s"', $expect), $lineno, $this->filename); + } + + if ($mbEncoding) { + mb_internal_encoding($mbEncoding); + } + + return new Twig_TokenStream($this->tokens, $this->filename); + } + + protected function lexData() + { + // if no matches are left we return the rest of the template as simple text token + if ($this->position == count($this->positions[0]) - 1) { + $this->pushToken(Twig_Token::TEXT_TYPE, substr($this->code, $this->cursor)); + $this->cursor = $this->end; + + return; + } + + // Find the first token after the current cursor + $position = $this->positions[0][++$this->position]; + while ($position[1] < $this->cursor) { + if ($this->position == count($this->positions[0]) - 1) { + return; + } + $position = $this->positions[0][++$this->position]; + } + + // push the template text first + $text = $textContent = substr($this->code, $this->cursor, $position[1] - $this->cursor); + if (isset($this->positions[2][$this->position][0])) { + $text = rtrim($text); + } + $this->pushToken(Twig_Token::TEXT_TYPE, $text); + $this->moveCursor($textContent.$position[0]); + + switch ($this->positions[1][$this->position][0]) { + case $this->options['tag_comment'][0]: + $this->lexComment(); + break; + + case $this->options['tag_block'][0]: + // raw data? + if (preg_match($this->regexes['lex_block_raw'], $this->code, $match, null, $this->cursor)) { + $this->moveCursor($match[0]); + $this->lexRawData($match[1]); + // {% line \d+ %} + } elseif (preg_match($this->regexes['lex_block_line'], $this->code, $match, null, $this->cursor)) { + $this->moveCursor($match[0]); + $this->lineno = (int) $match[1]; + } else { + $this->pushToken(Twig_Token::BLOCK_START_TYPE); + $this->pushState(self::STATE_BLOCK); + $this->currentVarBlockLine = $this->lineno; + } + break; + + case $this->options['tag_variable'][0]: + $this->pushToken(Twig_Token::VAR_START_TYPE); + $this->pushState(self::STATE_VAR); + $this->currentVarBlockLine = $this->lineno; + break; + } + } + + protected function lexBlock() + { + if (empty($this->brackets) && preg_match($this->regexes['lex_block'], $this->code, $match, null, $this->cursor)) { + $this->pushToken(Twig_Token::BLOCK_END_TYPE); + $this->moveCursor($match[0]); + $this->popState(); + } else { + $this->lexExpression(); + } + } + + protected function lexVar() + { + if (empty($this->brackets) && preg_match($this->regexes['lex_var'], $this->code, $match, null, $this->cursor)) { + $this->pushToken(Twig_Token::VAR_END_TYPE); + $this->moveCursor($match[0]); + $this->popState(); + } else { + $this->lexExpression(); + } + } + + protected function lexExpression() + { + // whitespace + if (preg_match('/\s+/A', $this->code, $match, null, $this->cursor)) { + $this->moveCursor($match[0]); + + if ($this->cursor >= $this->end) { + throw new Twig_Error_Syntax(sprintf('Unclosed "%s"', $this->state === self::STATE_BLOCK ? 'block' : 'variable'), $this->currentVarBlockLine, $this->filename); + } + } + + // operators + if (preg_match($this->regexes['operator'], $this->code, $match, null, $this->cursor)) { + $this->pushToken(Twig_Token::OPERATOR_TYPE, preg_replace('/\s+/', ' ', $match[0])); + $this->moveCursor($match[0]); + } + // names + elseif (preg_match(self::REGEX_NAME, $this->code, $match, null, $this->cursor)) { + $this->pushToken(Twig_Token::NAME_TYPE, $match[0]); + $this->moveCursor($match[0]); + } + // numbers + elseif (preg_match(self::REGEX_NUMBER, $this->code, $match, null, $this->cursor)) { + $number = (float) $match[0]; // floats + if (ctype_digit($match[0]) && $number <= PHP_INT_MAX) { + $number = (int) $match[0]; // integers lower than the maximum + } + $this->pushToken(Twig_Token::NUMBER_TYPE, $number); + $this->moveCursor($match[0]); + } + // punctuation + elseif (false !== strpos(self::PUNCTUATION, $this->code[$this->cursor])) { + // opening bracket + if (false !== strpos('([{', $this->code[$this->cursor])) { + $this->brackets[] = array($this->code[$this->cursor], $this->lineno); + } + // closing bracket + elseif (false !== strpos(')]}', $this->code[$this->cursor])) { + if (empty($this->brackets)) { + throw new Twig_Error_Syntax(sprintf('Unexpected "%s"', $this->code[$this->cursor]), $this->lineno, $this->filename); + } + + list($expect, $lineno) = array_pop($this->brackets); + if ($this->code[$this->cursor] != strtr($expect, '([{', ')]}')) { + throw new Twig_Error_Syntax(sprintf('Unclosed "%s"', $expect), $lineno, $this->filename); + } + } + + $this->pushToken(Twig_Token::PUNCTUATION_TYPE, $this->code[$this->cursor]); + ++$this->cursor; + } + // strings + elseif (preg_match(self::REGEX_STRING, $this->code, $match, null, $this->cursor)) { + $this->pushToken(Twig_Token::STRING_TYPE, stripcslashes(substr($match[0], 1, -1))); + $this->moveCursor($match[0]); + } + // opening double quoted string + elseif (preg_match(self::REGEX_DQ_STRING_DELIM, $this->code, $match, null, $this->cursor)) { + $this->brackets[] = array('"', $this->lineno); + $this->pushState(self::STATE_STRING); + $this->moveCursor($match[0]); + } + // unlexable + else { + throw new Twig_Error_Syntax(sprintf('Unexpected character "%s"', $this->code[$this->cursor]), $this->lineno, $this->filename); + } + } + + protected function lexRawData($tag) + { + if ('raw' === $tag) { + @trigger_error(sprintf('Twig Tag "raw" is deprecated. Use "verbatim" instead in %s at line %d.', $this->filename, $this->lineno), E_USER_DEPRECATED); + } + + if (!preg_match(str_replace('%s', $tag, $this->regexes['lex_raw_data']), $this->code, $match, PREG_OFFSET_CAPTURE, $this->cursor)) { + throw new Twig_Error_Syntax(sprintf('Unexpected end of file: Unclosed "%s" block', $tag), $this->lineno, $this->filename); + } + + $text = substr($this->code, $this->cursor, $match[0][1] - $this->cursor); + $this->moveCursor($text.$match[0][0]); + + if (false !== strpos($match[1][0], $this->options['whitespace_trim'])) { + $text = rtrim($text); + } + + $this->pushToken(Twig_Token::TEXT_TYPE, $text); + } + + protected function lexComment() + { + if (!preg_match($this->regexes['lex_comment'], $this->code, $match, PREG_OFFSET_CAPTURE, $this->cursor)) { + throw new Twig_Error_Syntax('Unclosed comment', $this->lineno, $this->filename); + } + + $this->moveCursor(substr($this->code, $this->cursor, $match[0][1] - $this->cursor).$match[0][0]); + } + + protected function lexString() + { + if (preg_match($this->regexes['interpolation_start'], $this->code, $match, null, $this->cursor)) { + $this->brackets[] = array($this->options['interpolation'][0], $this->lineno); + $this->pushToken(Twig_Token::INTERPOLATION_START_TYPE); + $this->moveCursor($match[0]); + $this->pushState(self::STATE_INTERPOLATION); + } elseif (preg_match(self::REGEX_DQ_STRING_PART, $this->code, $match, null, $this->cursor) && strlen($match[0]) > 0) { + $this->pushToken(Twig_Token::STRING_TYPE, stripcslashes($match[0])); + $this->moveCursor($match[0]); + } elseif (preg_match(self::REGEX_DQ_STRING_DELIM, $this->code, $match, null, $this->cursor)) { + list($expect, $lineno) = array_pop($this->brackets); + if ($this->code[$this->cursor] != '"') { + throw new Twig_Error_Syntax(sprintf('Unclosed "%s"', $expect), $lineno, $this->filename); + } + + $this->popState(); + ++$this->cursor; + } + } + + protected function lexInterpolation() + { + $bracket = end($this->brackets); + if ($this->options['interpolation'][0] === $bracket[0] && preg_match($this->regexes['interpolation_end'], $this->code, $match, null, $this->cursor)) { + array_pop($this->brackets); + $this->pushToken(Twig_Token::INTERPOLATION_END_TYPE); + $this->moveCursor($match[0]); + $this->popState(); + } else { + $this->lexExpression(); + } + } + + protected function pushToken($type, $value = '') + { + // do not push empty text tokens + if (Twig_Token::TEXT_TYPE === $type && '' === $value) { + return; + } + + $this->tokens[] = new Twig_Token($type, $value, $this->lineno); + } + + protected function moveCursor($text) + { + $this->cursor += strlen($text); + $this->lineno += substr_count($text, "\n"); + } + + protected function getOperatorRegex() + { + $operators = array_merge( + array('='), + array_keys($this->env->getUnaryOperators()), + array_keys($this->env->getBinaryOperators()) + ); + + $operators = array_combine($operators, array_map('strlen', $operators)); + arsort($operators); + + $regex = array(); + foreach ($operators as $operator => $length) { + // an operator that ends with a character must be followed by + // a whitespace or a parenthesis + if (ctype_alpha($operator[$length - 1])) { + $r = preg_quote($operator, '/').'(?=[\s()])'; + } else { + $r = preg_quote($operator, '/'); + } + + // an operator with a space can be any amount of whitespaces + $r = preg_replace('/\s+/', '\s+', $r); + + $regex[] = $r; + } + + return '/'.implode('|', $regex).'/A'; + } + + protected function pushState($state) + { + $this->states[] = $this->state; + $this->state = $state; + } + + protected function popState() + { + if (0 === count($this->states)) { + throw new Exception('Cannot pop state without a previous state'); + } + + $this->state = array_pop($this->states); + } +} diff --git a/Twig/LexerInterface.php b/Twig/LexerInterface.php new file mode 100644 index 0000000..24a9478 --- /dev/null +++ b/Twig/LexerInterface.php @@ -0,0 +1,32 @@ + + * + * @deprecated since 1.12 (to be removed in 3.0) + */ +interface Twig_LexerInterface +{ + /** + * Tokenizes a source code. + * + * @param string $code The source code + * @param string $filename A unique identifier for the source code + * + * @return Twig_TokenStream A token stream instance + * + * @throws Twig_Error_Syntax When the code is syntactically wrong + */ + public function tokenize($code, $filename = null); +} diff --git a/Twig/Loader/Array.php b/Twig/Loader/Array.php new file mode 100644 index 0000000..90221d5 --- /dev/null +++ b/Twig/Loader/Array.php @@ -0,0 +1,95 @@ + + */ +class Twig_Loader_Array implements Twig_LoaderInterface, Twig_ExistsLoaderInterface +{ + protected $templates = array(); + + /** + * Constructor. + * + * @param array $templates An array of templates (keys are the names, and values are the source code) + */ + public function __construct(array $templates) + { + $this->templates = $templates; + } + + /** + * Adds or overrides a template. + * + * @param string $name The template name + * @param string $template The template source + */ + public function setTemplate($name, $template) + { + $this->templates[(string) $name] = $template; + } + + /** + * {@inheritdoc} + */ + public function getSource($name) + { + $name = (string) $name; + if (!isset($this->templates[$name])) { + throw new Twig_Error_Loader(sprintf('Template "%s" is not defined.', $name)); + } + + return $this->templates[$name]; + } + + /** + * {@inheritdoc} + */ + public function exists($name) + { + return isset($this->templates[(string) $name]); + } + + /** + * {@inheritdoc} + */ + public function getCacheKey($name) + { + $name = (string) $name; + if (!isset($this->templates[$name])) { + throw new Twig_Error_Loader(sprintf('Template "%s" is not defined.', $name)); + } + + return $this->templates[$name]; + } + + /** + * {@inheritdoc} + */ + public function isFresh($name, $time) + { + $name = (string) $name; + if (!isset($this->templates[$name])) { + throw new Twig_Error_Loader(sprintf('Template "%s" is not defined.', $name)); + } + + return true; + } +} diff --git a/Twig/Loader/Chain.php b/Twig/Loader/Chain.php new file mode 100644 index 0000000..81d57ad --- /dev/null +++ b/Twig/Loader/Chain.php @@ -0,0 +1,138 @@ + + */ +class Twig_Loader_Chain implements Twig_LoaderInterface, Twig_ExistsLoaderInterface +{ + private $hasSourceCache = array(); + protected $loaders = array(); + + /** + * Constructor. + * + * @param Twig_LoaderInterface[] $loaders An array of loader instances + */ + public function __construct(array $loaders = array()) + { + foreach ($loaders as $loader) { + $this->addLoader($loader); + } + } + + /** + * Adds a loader instance. + * + * @param Twig_LoaderInterface $loader A Loader instance + */ + public function addLoader(Twig_LoaderInterface $loader) + { + $this->loaders[] = $loader; + $this->hasSourceCache = array(); + } + + /** + * {@inheritdoc} + */ + public function getSource($name) + { + $exceptions = array(); + foreach ($this->loaders as $loader) { + if ($loader instanceof Twig_ExistsLoaderInterface && !$loader->exists($name)) { + continue; + } + + try { + return $loader->getSource($name); + } catch (Twig_Error_Loader $e) { + $exceptions[] = $e->getMessage(); + } + } + + throw new Twig_Error_Loader(sprintf('Template "%s" is not defined%s.', $name, $exceptions ? ' ('.implode(', ', $exceptions).')' : '')); + } + + /** + * {@inheritdoc} + */ + public function exists($name) + { + $name = (string) $name; + + if (isset($this->hasSourceCache[$name])) { + return $this->hasSourceCache[$name]; + } + + foreach ($this->loaders as $loader) { + if ($loader instanceof Twig_ExistsLoaderInterface) { + if ($loader->exists($name)) { + return $this->hasSourceCache[$name] = true; + } + + continue; + } + + try { + $loader->getSource($name); + + return $this->hasSourceCache[$name] = true; + } catch (Twig_Error_Loader $e) { + } + } + + return $this->hasSourceCache[$name] = false; + } + + /** + * {@inheritdoc} + */ + public function getCacheKey($name) + { + $exceptions = array(); + foreach ($this->loaders as $loader) { + if ($loader instanceof Twig_ExistsLoaderInterface && !$loader->exists($name)) { + continue; + } + + try { + return $loader->getCacheKey($name); + } catch (Twig_Error_Loader $e) { + $exceptions[] = get_class($loader).': '.$e->getMessage(); + } + } + + throw new Twig_Error_Loader(sprintf('Template "%s" is not defined%s.', $name, $exceptions ? ' ('.implode(', ', $exceptions).')' : '')); + } + + /** + * {@inheritdoc} + */ + public function isFresh($name, $time) + { + $exceptions = array(); + foreach ($this->loaders as $loader) { + if ($loader instanceof Twig_ExistsLoaderInterface && !$loader->exists($name)) { + continue; + } + + try { + return $loader->isFresh($name, $time); + } catch (Twig_Error_Loader $e) { + $exceptions[] = get_class($loader).': '.$e->getMessage(); + } + } + + throw new Twig_Error_Loader(sprintf('Template "%s" is not defined%s.', $name, $exceptions ? ' ('.implode(', ', $exceptions).')' : '')); + } +} diff --git a/Twig/Loader/Filesystem.php b/Twig/Loader/Filesystem.php new file mode 100644 index 0000000..1bc75a1 --- /dev/null +++ b/Twig/Loader/Filesystem.php @@ -0,0 +1,260 @@ + + */ +class Twig_Loader_Filesystem implements Twig_LoaderInterface, Twig_ExistsLoaderInterface +{ + /** Identifier of the main namespace. */ + const MAIN_NAMESPACE = '__main__'; + + protected $paths = array(); + protected $cache = array(); + protected $errorCache = array(); + + /** + * Constructor. + * + * @param string|array $paths A path or an array of paths where to look for templates + */ + public function __construct($paths = array()) + { + if ($paths) { + $this->setPaths($paths); + } + } + + /** + * Returns the paths to the templates. + * + * @param string $namespace A path namespace + * + * @return array The array of paths where to look for templates + */ + public function getPaths($namespace = self::MAIN_NAMESPACE) + { + return isset($this->paths[$namespace]) ? $this->paths[$namespace] : array(); + } + + /** + * Returns the path namespaces. + * + * The main namespace is always defined. + * + * @return array The array of defined namespaces + */ + public function getNamespaces() + { + return array_keys($this->paths); + } + + /** + * Sets the paths where templates are stored. + * + * @param string|array $paths A path or an array of paths where to look for templates + * @param string $namespace A path namespace + */ + public function setPaths($paths, $namespace = self::MAIN_NAMESPACE) + { + if (!is_array($paths)) { + $paths = array($paths); + } + + $this->paths[$namespace] = array(); + foreach ($paths as $path) { + $this->addPath($path, $namespace); + } + } + + /** + * Adds a path where templates are stored. + * + * @param string $path A path where to look for templates + * @param string $namespace A path name + * + * @throws Twig_Error_Loader + */ + public function addPath($path, $namespace = self::MAIN_NAMESPACE) + { + // invalidate the cache + $this->cache = $this->errorCache = array(); + + if (!is_dir($path)) { + throw new Twig_Error_Loader(sprintf('The "%s" directory does not exist.', $path)); + } + + $this->paths[$namespace][] = rtrim($path, '/\\'); + } + + /** + * Prepends a path where templates are stored. + * + * @param string $path A path where to look for templates + * @param string $namespace A path name + * + * @throws Twig_Error_Loader + */ + public function prependPath($path, $namespace = self::MAIN_NAMESPACE) + { + // invalidate the cache + $this->cache = $this->errorCache = array(); + + if (!is_dir($path)) { + throw new Twig_Error_Loader(sprintf('The "%s" directory does not exist.', $path)); + } + + $path = rtrim($path, '/\\'); + + if (!isset($this->paths[$namespace])) { + $this->paths[$namespace][] = $path; + } else { + array_unshift($this->paths[$namespace], $path); + } + } + + /** + * {@inheritdoc} + */ + public function getSource($name) + { + return file_get_contents($this->findTemplate($name)); + } + + /** + * {@inheritdoc} + */ + public function getCacheKey($name) + { + return $this->findTemplate($name); + } + + /** + * {@inheritdoc} + */ + public function exists($name) + { + $name = $this->normalizeName($name); + + if (isset($this->cache[$name])) { + return true; + } + + try { + return false !== $this->findTemplate($name, false); + } catch (Twig_Error_Loader $exception) { + return false; + } + } + + /** + * {@inheritdoc} + */ + public function isFresh($name, $time) + { + return filemtime($this->findTemplate($name)) <= $time; + } + + protected function findTemplate($name) + { + $throw = func_num_args() > 1 ? func_get_arg(1) : true; + $name = $this->normalizeName($name); + + if (isset($this->cache[$name])) { + return $this->cache[$name]; + } + + if (isset($this->errorCache[$name])) { + if (!$throw) { + return false; + } + + throw new Twig_Error_Loader($this->errorCache[$name]); + } + + $this->validateName($name); + + list($namespace, $shortname) = $this->parseName($name); + + if (!isset($this->paths[$namespace])) { + $this->errorCache[$name] = sprintf('There are no registered paths for namespace "%s".', $namespace); + + if (!$throw) { + return false; + } + + throw new Twig_Error_Loader($this->errorCache[$name]); + } + + foreach ($this->paths[$namespace] as $path) { + if (is_file($path.'/'.$shortname)) { + if (false !== $realpath = realpath($path.'/'.$shortname)) { + return $this->cache[$name] = $realpath; + } + + return $this->cache[$name] = $path.'/'.$shortname; + } + } + + $this->errorCache[$name] = sprintf('Unable to find template "%s" (looked into: %s).', $name, implode(', ', $this->paths[$namespace])); + + if (!$throw) { + return false; + } + + throw new Twig_Error_Loader($this->errorCache[$name]); + } + + protected function parseName($name, $default = self::MAIN_NAMESPACE) + { + if (isset($name[0]) && '@' == $name[0]) { + if (false === $pos = strpos($name, '/')) { + throw new Twig_Error_Loader(sprintf('Malformed namespaced template name "%s" (expecting "@namespace/template_name").', $name)); + } + + $namespace = substr($name, 1, $pos - 1); + $shortname = substr($name, $pos + 1); + + return array($namespace, $shortname); + } + + return array($default, $name); + } + + protected function normalizeName($name) + { + return preg_replace('#/{2,}#', '/', str_replace('\\', '/', (string) $name)); + } + + protected function validateName($name) + { + if (false !== strpos($name, "\0")) { + throw new Twig_Error_Loader('A template name cannot contain NUL bytes.'); + } + + $name = ltrim($name, '/'); + $parts = explode('/', $name); + $level = 0; + foreach ($parts as $part) { + if ('..' === $part) { + --$level; + } elseif ('.' !== $part) { + ++$level; + } + + if ($level < 0) { + throw new Twig_Error_Loader(sprintf('Looks like you try to load a template outside configured directories (%s).', $name)); + } + } + } +} diff --git a/Twig/Loader/String.php b/Twig/Loader/String.php new file mode 100644 index 0000000..00f507a --- /dev/null +++ b/Twig/Loader/String.php @@ -0,0 +1,63 @@ + + */ +class Twig_Loader_String implements Twig_LoaderInterface, Twig_ExistsLoaderInterface +{ + /** + * {@inheritdoc} + */ + public function getSource($name) + { + return $name; + } + + /** + * {@inheritdoc} + */ + public function exists($name) + { + return true; + } + + /** + * {@inheritdoc} + */ + public function getCacheKey($name) + { + return $name; + } + + /** + * {@inheritdoc} + */ + public function isFresh($name, $time) + { + return true; + } +} diff --git a/Twig/LoaderInterface.php b/Twig/LoaderInterface.php new file mode 100644 index 0000000..544ea4e --- /dev/null +++ b/Twig/LoaderInterface.php @@ -0,0 +1,53 @@ + + */ +interface Twig_LoaderInterface +{ + /** + * Gets the source code of a template, given its name. + * + * @param string $name The name of the template to load + * + * @return string The template source code + * + * @throws Twig_Error_Loader When $name is not found + */ + public function getSource($name); + + /** + * Gets the cache key to use for the cache for a given template name. + * + * @param string $name The name of the template to load + * + * @return string The cache key + * + * @throws Twig_Error_Loader When $name is not found + */ + public function getCacheKey($name); + + /** + * Returns true if the template is still fresh. + * + * @param string $name The template name + * @param int $time Timestamp of the last modification time of the + * cached template + * + * @return bool true if the template is fresh, false otherwise + * + * @throws Twig_Error_Loader When $name is not found + */ + public function isFresh($name, $time); +} diff --git a/Twig/Markup.php b/Twig/Markup.php new file mode 100644 index 0000000..69871fc --- /dev/null +++ b/Twig/Markup.php @@ -0,0 +1,37 @@ + + */ +class Twig_Markup implements Countable +{ + protected $content; + protected $charset; + + public function __construct($content, $charset) + { + $this->content = (string) $content; + $this->charset = $charset; + } + + public function __toString() + { + return $this->content; + } + + public function count() + { + return function_exists('mb_get_info') ? mb_strlen($this->content, $this->charset) : strlen($this->content); + } +} diff --git a/Twig/Node.php b/Twig/Node.php new file mode 100644 index 0000000..40d67fe --- /dev/null +++ b/Twig/Node.php @@ -0,0 +1,231 @@ + + */ +class Twig_Node implements Twig_NodeInterface +{ + protected $nodes; + protected $attributes; + protected $lineno; + protected $tag; + + /** + * Constructor. + * + * The nodes are automatically made available as properties ($this->node). + * The attributes are automatically made available as array items ($this['name']). + * + * @param array $nodes An array of named nodes + * @param array $attributes An array of attributes (should not be nodes) + * @param int $lineno The line number + * @param string $tag The tag name associated with the Node + */ + public function __construct(array $nodes = array(), array $attributes = array(), $lineno = 0, $tag = null) + { + $this->nodes = $nodes; + $this->attributes = $attributes; + $this->lineno = $lineno; + $this->tag = $tag; + } + + public function __toString() + { + $attributes = array(); + foreach ($this->attributes as $name => $value) { + $attributes[] = sprintf('%s: %s', $name, str_replace("\n", '', var_export($value, true))); + } + + $repr = array(get_class($this).'('.implode(', ', $attributes)); + + if (count($this->nodes)) { + foreach ($this->nodes as $name => $node) { + $len = strlen($name) + 4; + $noderepr = array(); + foreach (explode("\n", (string) $node) as $line) { + $noderepr[] = str_repeat(' ', $len).$line; + } + + $repr[] = sprintf(' %s: %s', $name, ltrim(implode("\n", $noderepr))); + } + + $repr[] = ')'; + } else { + $repr[0] .= ')'; + } + + return implode("\n", $repr); + } + + /** + * @deprecated since 1.16.1 (to be removed in 2.0) + */ + public function toXml($asDom = false) + { + @trigger_error(sprintf('%s is deprecated.', __METHOD__), E_USER_DEPRECATED); + + $dom = new DOMDocument('1.0', 'UTF-8'); + $dom->formatOutput = true; + $dom->appendChild($xml = $dom->createElement('twig')); + + $xml->appendChild($node = $dom->createElement('node')); + $node->setAttribute('class', get_class($this)); + + foreach ($this->attributes as $name => $value) { + $node->appendChild($attribute = $dom->createElement('attribute')); + $attribute->setAttribute('name', $name); + $attribute->appendChild($dom->createTextNode($value)); + } + + foreach ($this->nodes as $name => $n) { + if (null === $n) { + continue; + } + + $child = $n->toXml(true)->getElementsByTagName('node')->item(0); + $child = $dom->importNode($child, true); + $child->setAttribute('name', $name); + + $node->appendChild($child); + } + + return $asDom ? $dom : $dom->saveXml(); + } + + public function compile(Twig_Compiler $compiler) + { + foreach ($this->nodes as $node) { + $node->compile($compiler); + } + } + + public function getLine() + { + return $this->lineno; + } + + public function getNodeTag() + { + return $this->tag; + } + + /** + * Returns true if the attribute is defined. + * + * @param string $name The attribute name + * + * @return bool true if the attribute is defined, false otherwise + */ + public function hasAttribute($name) + { + return array_key_exists($name, $this->attributes); + } + + /** + * Gets an attribute value by name. + * + * @param string $name + * + * @return mixed + */ + public function getAttribute($name) + { + if (!array_key_exists($name, $this->attributes)) { + throw new LogicException(sprintf('Attribute "%s" does not exist for Node "%s".', $name, get_class($this))); + } + + return $this->attributes[$name]; + } + + /** + * Sets an attribute by name to a value. + * + * @param string $name + * @param mixed $value + */ + public function setAttribute($name, $value) + { + $this->attributes[$name] = $value; + } + + /** + * Removes an attribute by name. + * + * @param string $name + */ + public function removeAttribute($name) + { + unset($this->attributes[$name]); + } + + /** + * Returns true if the node with the given name exists. + * + * @param string $name + * + * @return bool + */ + public function hasNode($name) + { + return array_key_exists($name, $this->nodes); + } + + /** + * Gets a node by name. + * + * @param string $name + * + * @return Twig_Node + */ + public function getNode($name) + { + if (!array_key_exists($name, $this->nodes)) { + throw new LogicException(sprintf('Node "%s" does not exist for Node "%s".', $name, get_class($this))); + } + + return $this->nodes[$name]; + } + + /** + * Sets a node. + * + * @param string $name + * @param Twig_Node $node + */ + public function setNode($name, $node = null) + { + $this->nodes[$name] = $node; + } + + /** + * Removes a node by name. + * + * @param string $name + */ + public function removeNode($name) + { + unset($this->nodes[$name]); + } + + public function count() + { + return count($this->nodes); + } + + public function getIterator() + { + return new ArrayIterator($this->nodes); + } +} diff --git a/Twig/Node/AutoEscape.php b/Twig/Node/AutoEscape.php new file mode 100644 index 0000000..fcabf90 --- /dev/null +++ b/Twig/Node/AutoEscape.php @@ -0,0 +1,39 @@ + + */ +class Twig_Node_AutoEscape extends Twig_Node +{ + public function __construct($value, Twig_NodeInterface $body, $lineno, $tag = 'autoescape') + { + parent::__construct(array('body' => $body), array('value' => $value), $lineno, $tag); + } + + /** + * Compiles the node to PHP. + * + * @param Twig_Compiler $compiler A Twig_Compiler instance + */ + public function compile(Twig_Compiler $compiler) + { + $compiler->subcompile($this->getNode('body')); + } +} diff --git a/Twig/Node/Block.php b/Twig/Node/Block.php new file mode 100644 index 0000000..989e4a0 --- /dev/null +++ b/Twig/Node/Block.php @@ -0,0 +1,44 @@ + + */ +class Twig_Node_Block extends Twig_Node +{ + public function __construct($name, Twig_NodeInterface $body, $lineno, $tag = null) + { + parent::__construct(array('body' => $body), array('name' => $name), $lineno, $tag); + } + + /** + * Compiles the node to PHP. + * + * @param Twig_Compiler $compiler A Twig_Compiler instance + */ + public function compile(Twig_Compiler $compiler) + { + $compiler + ->addDebugInfo($this) + ->write(sprintf("public function block_%s(\$context, array \$blocks = array())\n", $this->getAttribute('name')), "{\n") + ->indent() + ; + + $compiler + ->subcompile($this->getNode('body')) + ->outdent() + ->write("}\n\n") + ; + } +} diff --git a/Twig/Node/BlockReference.php b/Twig/Node/BlockReference.php new file mode 100644 index 0000000..a05ea04 --- /dev/null +++ b/Twig/Node/BlockReference.php @@ -0,0 +1,37 @@ + + */ +class Twig_Node_BlockReference extends Twig_Node implements Twig_NodeOutputInterface +{ + public function __construct($name, $lineno, $tag = null) + { + parent::__construct(array(), array('name' => $name), $lineno, $tag); + } + + /** + * Compiles the node to PHP. + * + * @param Twig_Compiler $compiler A Twig_Compiler instance + */ + public function compile(Twig_Compiler $compiler) + { + $compiler + ->addDebugInfo($this) + ->write(sprintf("\$this->displayBlock('%s', \$context, \$blocks);\n", $this->getAttribute('name'))) + ; + } +} diff --git a/Twig/Node/Body.php b/Twig/Node/Body.php new file mode 100644 index 0000000..3ffb134 --- /dev/null +++ b/Twig/Node/Body.php @@ -0,0 +1,19 @@ + + */ +class Twig_Node_Body extends Twig_Node +{ +} diff --git a/Twig/Node/CheckSecurity.php b/Twig/Node/CheckSecurity.php new file mode 100644 index 0000000..b4a436a --- /dev/null +++ b/Twig/Node/CheckSecurity.php @@ -0,0 +1,78 @@ + + */ +class Twig_Node_CheckSecurity extends Twig_Node +{ + protected $usedFilters; + protected $usedTags; + protected $usedFunctions; + + public function __construct(array $usedFilters, array $usedTags, array $usedFunctions) + { + $this->usedFilters = $usedFilters; + $this->usedTags = $usedTags; + $this->usedFunctions = $usedFunctions; + + parent::__construct(); + } + + public function compile(Twig_Compiler $compiler) + { + $tags = $filters = $functions = array(); + foreach (array('tags', 'filters', 'functions') as $type) { + foreach ($this->{'used'.ucfirst($type)} as $name => $node) { + if ($node instanceof Twig_Node) { + ${$type}[$name] = $node->getLine(); + } else { + ${$type}[$node] = null; + } + } + } + + $compiler + ->write('$tags = ')->repr(array_filter($tags))->raw(";\n") + ->write('$filters = ')->repr(array_filter($filters))->raw(";\n") + ->write('$functions = ')->repr(array_filter($functions))->raw(";\n\n") + ->write("try {\n") + ->indent() + ->write("\$this->env->getExtension('sandbox')->checkSecurity(\n") + ->indent() + ->write(!$tags ? "array(),\n" : "array('".implode("', '", array_keys($tags))."'),\n") + ->write(!$filters ? "array(),\n" : "array('".implode("', '", array_keys($filters))."'),\n") + ->write(!$functions ? "array()\n" : "array('".implode("', '", array_keys($functions))."')\n") + ->outdent() + ->write(");\n") + ->outdent() + ->write("} catch (Twig_Sandbox_SecurityError \$e) {\n") + ->indent() + ->write("\$e->setTemplateFile(\$this->getTemplateName());\n\n") + ->write("if (\$e instanceof Twig_Sandbox_SecurityNotAllowedTagError && isset(\$tags[\$e->getTagName()])) {\n") + ->indent() + ->write("\$e->setTemplateLine(\$tags[\$e->getTagName()]);\n") + ->outdent() + ->write("} elseif (\$e instanceof Twig_Sandbox_SecurityNotAllowedFilterError && isset(\$filters[\$e->getFilterName()])) {\n") + ->indent() + ->write("\$e->setTemplateLine(\$filters[\$e->getFilterName()]);\n") + ->outdent() + ->write("} elseif (\$e instanceof Twig_Sandbox_SecurityNotAllowedFunctionError && isset(\$functions[\$e->getFunctionName()])) {\n") + ->indent() + ->write("\$e->setTemplateLine(\$functions[\$e->getFunctionName()]);\n") + ->outdent() + ->write("}\n\n") + ->write("throw \$e;\n") + ->outdent() + ->write("}\n\n") + ; + } +} diff --git a/Twig/Node/Do.php b/Twig/Node/Do.php new file mode 100644 index 0000000..9981bc1 --- /dev/null +++ b/Twig/Node/Do.php @@ -0,0 +1,38 @@ + + */ +class Twig_Node_Do extends Twig_Node +{ + public function __construct(Twig_Node_Expression $expr, $lineno, $tag = null) + { + parent::__construct(array('expr' => $expr), array(), $lineno, $tag); + } + + /** + * Compiles the node to PHP. + * + * @param Twig_Compiler $compiler A Twig_Compiler instance + */ + public function compile(Twig_Compiler $compiler) + { + $compiler + ->addDebugInfo($this) + ->write('') + ->subcompile($this->getNode('expr')) + ->raw(";\n") + ; + } +} diff --git a/Twig/Node/Embed.php b/Twig/Node/Embed.php new file mode 100644 index 0000000..a213040 --- /dev/null +++ b/Twig/Node/Embed.php @@ -0,0 +1,42 @@ + + */ +class Twig_Node_Embed extends Twig_Node_Include +{ + // we don't inject the module to avoid node visitors to traverse it twice (as it will be already visited in the main module) + public function __construct($filename, $index, Twig_Node_Expression $variables = null, $only = false, $ignoreMissing = false, $lineno, $tag = null) + { + parent::__construct(new Twig_Node_Expression_Constant('not_used', $lineno), $variables, $only, $ignoreMissing, $lineno, $tag); + + $this->setAttribute('filename', $filename); + $this->setAttribute('index', $index); + } + + protected function addGetTemplate(Twig_Compiler $compiler) + { + $compiler + ->write('$this->loadTemplate(') + ->string($this->getAttribute('filename')) + ->raw(', ') + ->repr($compiler->getFilename()) + ->raw(', ') + ->repr($this->getLine()) + ->raw(', ') + ->string($this->getAttribute('index')) + ->raw(')') + ; + } +} diff --git a/Twig/Node/Expression.php b/Twig/Node/Expression.php new file mode 100644 index 0000000..a7382e7 --- /dev/null +++ b/Twig/Node/Expression.php @@ -0,0 +1,20 @@ + + */ +abstract class Twig_Node_Expression extends Twig_Node +{ +} diff --git a/Twig/Node/Expression/Array.php b/Twig/Node/Expression/Array.php new file mode 100644 index 0000000..6cf7ca1 --- /dev/null +++ b/Twig/Node/Expression/Array.php @@ -0,0 +1,86 @@ +index = -1; + foreach ($this->getKeyValuePairs() as $pair) { + if ($pair['key'] instanceof Twig_Node_Expression_Constant && ctype_digit((string) $pair['key']->getAttribute('value')) && $pair['key']->getAttribute('value') > $this->index) { + $this->index = $pair['key']->getAttribute('value'); + } + } + } + + public function getKeyValuePairs() + { + $pairs = array(); + + foreach (array_chunk($this->nodes, 2) as $pair) { + $pairs[] = array( + 'key' => $pair[0], + 'value' => $pair[1], + ); + } + + return $pairs; + } + + public function hasElement(Twig_Node_Expression $key) + { + foreach ($this->getKeyValuePairs() as $pair) { + // we compare the string representation of the keys + // to avoid comparing the line numbers which are not relevant here. + if ((string) $key == (string) $pair['key']) { + return true; + } + } + + return false; + } + + public function addElement(Twig_Node_Expression $value, Twig_Node_Expression $key = null) + { + if (null === $key) { + $key = new Twig_Node_Expression_Constant(++$this->index, $value->getLine()); + } + + array_push($this->nodes, $key, $value); + } + + /** + * Compiles the node to PHP. + * + * @param Twig_Compiler $compiler A Twig_Compiler instance + */ + public function compile(Twig_Compiler $compiler) + { + $compiler->raw('array('); + $first = true; + foreach ($this->getKeyValuePairs() as $pair) { + if (!$first) { + $compiler->raw(', '); + } + $first = false; + + $compiler + ->subcompile($pair['key']) + ->raw(' => ') + ->subcompile($pair['value']) + ; + } + $compiler->raw(')'); + } +} diff --git a/Twig/Node/Expression/AssignName.php b/Twig/Node/Expression/AssignName.php new file mode 100644 index 0000000..4d5dbdb --- /dev/null +++ b/Twig/Node/Expression/AssignName.php @@ -0,0 +1,28 @@ +raw('$context[') + ->string($this->getAttribute('name')) + ->raw(']') + ; + } +} diff --git a/Twig/Node/Expression/Binary.php b/Twig/Node/Expression/Binary.php new file mode 100644 index 0000000..5c383d1 --- /dev/null +++ b/Twig/Node/Expression/Binary.php @@ -0,0 +1,40 @@ + $left, 'right' => $right), array(), $lineno); + } + + /** + * Compiles the node to PHP. + * + * @param Twig_Compiler $compiler A Twig_Compiler instance + */ + public function compile(Twig_Compiler $compiler) + { + $compiler + ->raw('(') + ->subcompile($this->getNode('left')) + ->raw(' ') + ; + $this->operator($compiler); + $compiler + ->raw(' ') + ->subcompile($this->getNode('right')) + ->raw(')') + ; + } + + abstract public function operator(Twig_Compiler $compiler); +} diff --git a/Twig/Node/Expression/Binary/Add.php b/Twig/Node/Expression/Binary/Add.php new file mode 100644 index 0000000..0ef8e11 --- /dev/null +++ b/Twig/Node/Expression/Binary/Add.php @@ -0,0 +1,18 @@ +raw('+'); + } +} diff --git a/Twig/Node/Expression/Binary/And.php b/Twig/Node/Expression/Binary/And.php new file mode 100644 index 0000000..d5752eb --- /dev/null +++ b/Twig/Node/Expression/Binary/And.php @@ -0,0 +1,18 @@ +raw('&&'); + } +} diff --git a/Twig/Node/Expression/Binary/BitwiseAnd.php b/Twig/Node/Expression/Binary/BitwiseAnd.php new file mode 100644 index 0000000..9a46d84 --- /dev/null +++ b/Twig/Node/Expression/Binary/BitwiseAnd.php @@ -0,0 +1,18 @@ +raw('&'); + } +} diff --git a/Twig/Node/Expression/Binary/BitwiseOr.php b/Twig/Node/Expression/Binary/BitwiseOr.php new file mode 100644 index 0000000..058a20b --- /dev/null +++ b/Twig/Node/Expression/Binary/BitwiseOr.php @@ -0,0 +1,18 @@ +raw('|'); + } +} diff --git a/Twig/Node/Expression/Binary/BitwiseXor.php b/Twig/Node/Expression/Binary/BitwiseXor.php new file mode 100644 index 0000000..f4da73d --- /dev/null +++ b/Twig/Node/Expression/Binary/BitwiseXor.php @@ -0,0 +1,18 @@ +raw('^'); + } +} diff --git a/Twig/Node/Expression/Binary/Concat.php b/Twig/Node/Expression/Binary/Concat.php new file mode 100644 index 0000000..f9a6462 --- /dev/null +++ b/Twig/Node/Expression/Binary/Concat.php @@ -0,0 +1,18 @@ +raw('.'); + } +} diff --git a/Twig/Node/Expression/Binary/Div.php b/Twig/Node/Expression/Binary/Div.php new file mode 100644 index 0000000..e0797a6 --- /dev/null +++ b/Twig/Node/Expression/Binary/Div.php @@ -0,0 +1,18 @@ +raw('/'); + } +} diff --git a/Twig/Node/Expression/Binary/EndsWith.php b/Twig/Node/Expression/Binary/EndsWith.php new file mode 100644 index 0000000..93b3b96 --- /dev/null +++ b/Twig/Node/Expression/Binary/EndsWith.php @@ -0,0 +1,30 @@ +getVarName(); + $right = $compiler->getVarName(); + $compiler + ->raw(sprintf('(is_string($%s = ', $left)) + ->subcompile($this->getNode('left')) + ->raw(sprintf(') && is_string($%s = ', $right)) + ->subcompile($this->getNode('right')) + ->raw(sprintf(') && (\'\' === $%2$s || $%2$s === substr($%1$s, -strlen($%2$s))))', $left, $right)) + ; + } + + public function operator(Twig_Compiler $compiler) + { + return $compiler->raw(''); + } +} diff --git a/Twig/Node/Expression/Binary/Equal.php b/Twig/Node/Expression/Binary/Equal.php new file mode 100644 index 0000000..7b1236d --- /dev/null +++ b/Twig/Node/Expression/Binary/Equal.php @@ -0,0 +1,17 @@ +raw('=='); + } +} diff --git a/Twig/Node/Expression/Binary/FloorDiv.php b/Twig/Node/Expression/Binary/FloorDiv.php new file mode 100644 index 0000000..d3518b5 --- /dev/null +++ b/Twig/Node/Expression/Binary/FloorDiv.php @@ -0,0 +1,29 @@ +raw('intval(floor('); + parent::compile($compiler); + $compiler->raw('))'); + } + + public function operator(Twig_Compiler $compiler) + { + return $compiler->raw('/'); + } +} diff --git a/Twig/Node/Expression/Binary/Greater.php b/Twig/Node/Expression/Binary/Greater.php new file mode 100644 index 0000000..a110bd9 --- /dev/null +++ b/Twig/Node/Expression/Binary/Greater.php @@ -0,0 +1,17 @@ +raw('>'); + } +} diff --git a/Twig/Node/Expression/Binary/GreaterEqual.php b/Twig/Node/Expression/Binary/GreaterEqual.php new file mode 100644 index 0000000..3754fed --- /dev/null +++ b/Twig/Node/Expression/Binary/GreaterEqual.php @@ -0,0 +1,17 @@ +raw('>='); + } +} diff --git a/Twig/Node/Expression/Binary/In.php b/Twig/Node/Expression/Binary/In.php new file mode 100644 index 0000000..1d485b6 --- /dev/null +++ b/Twig/Node/Expression/Binary/In.php @@ -0,0 +1,33 @@ +raw('twig_in_filter(') + ->subcompile($this->getNode('left')) + ->raw(', ') + ->subcompile($this->getNode('right')) + ->raw(')') + ; + } + + public function operator(Twig_Compiler $compiler) + { + return $compiler->raw('in'); + } +} diff --git a/Twig/Node/Expression/Binary/Less.php b/Twig/Node/Expression/Binary/Less.php new file mode 100644 index 0000000..45fd300 --- /dev/null +++ b/Twig/Node/Expression/Binary/Less.php @@ -0,0 +1,17 @@ +raw('<'); + } +} diff --git a/Twig/Node/Expression/Binary/LessEqual.php b/Twig/Node/Expression/Binary/LessEqual.php new file mode 100644 index 0000000..e38e257 --- /dev/null +++ b/Twig/Node/Expression/Binary/LessEqual.php @@ -0,0 +1,17 @@ +raw('<='); + } +} diff --git a/Twig/Node/Expression/Binary/Matches.php b/Twig/Node/Expression/Binary/Matches.php new file mode 100644 index 0000000..93bb292 --- /dev/null +++ b/Twig/Node/Expression/Binary/Matches.php @@ -0,0 +1,28 @@ +raw('preg_match(') + ->subcompile($this->getNode('right')) + ->raw(', ') + ->subcompile($this->getNode('left')) + ->raw(')') + ; + } + + public function operator(Twig_Compiler $compiler) + { + return $compiler->raw(''); + } +} diff --git a/Twig/Node/Expression/Binary/Mod.php b/Twig/Node/Expression/Binary/Mod.php new file mode 100644 index 0000000..9924114 --- /dev/null +++ b/Twig/Node/Expression/Binary/Mod.php @@ -0,0 +1,18 @@ +raw('%'); + } +} diff --git a/Twig/Node/Expression/Binary/Mul.php b/Twig/Node/Expression/Binary/Mul.php new file mode 100644 index 0000000..c91529c --- /dev/null +++ b/Twig/Node/Expression/Binary/Mul.php @@ -0,0 +1,18 @@ +raw('*'); + } +} diff --git a/Twig/Node/Expression/Binary/NotEqual.php b/Twig/Node/Expression/Binary/NotEqual.php new file mode 100644 index 0000000..26867ba --- /dev/null +++ b/Twig/Node/Expression/Binary/NotEqual.php @@ -0,0 +1,17 @@ +raw('!='); + } +} diff --git a/Twig/Node/Expression/Binary/NotIn.php b/Twig/Node/Expression/Binary/NotIn.php new file mode 100644 index 0000000..8f215f1 --- /dev/null +++ b/Twig/Node/Expression/Binary/NotIn.php @@ -0,0 +1,33 @@ +raw('!twig_in_filter(') + ->subcompile($this->getNode('left')) + ->raw(', ') + ->subcompile($this->getNode('right')) + ->raw(')') + ; + } + + public function operator(Twig_Compiler $compiler) + { + return $compiler->raw('not in'); + } +} diff --git a/Twig/Node/Expression/Binary/Or.php b/Twig/Node/Expression/Binary/Or.php new file mode 100644 index 0000000..adba49c --- /dev/null +++ b/Twig/Node/Expression/Binary/Or.php @@ -0,0 +1,18 @@ +raw('||'); + } +} diff --git a/Twig/Node/Expression/Binary/Power.php b/Twig/Node/Expression/Binary/Power.php new file mode 100644 index 0000000..6cd3a21 --- /dev/null +++ b/Twig/Node/Expression/Binary/Power.php @@ -0,0 +1,33 @@ +raw('pow(') + ->subcompile($this->getNode('left')) + ->raw(', ') + ->subcompile($this->getNode('right')) + ->raw(')') + ; + } + + public function operator(Twig_Compiler $compiler) + { + return $compiler->raw('**'); + } +} diff --git a/Twig/Node/Expression/Binary/Range.php b/Twig/Node/Expression/Binary/Range.php new file mode 100644 index 0000000..fc102fe --- /dev/null +++ b/Twig/Node/Expression/Binary/Range.php @@ -0,0 +1,33 @@ +raw('range(') + ->subcompile($this->getNode('left')) + ->raw(', ') + ->subcompile($this->getNode('right')) + ->raw(')') + ; + } + + public function operator(Twig_Compiler $compiler) + { + return $compiler->raw('..'); + } +} diff --git a/Twig/Node/Expression/Binary/StartsWith.php b/Twig/Node/Expression/Binary/StartsWith.php new file mode 100644 index 0000000..d2e30d6 --- /dev/null +++ b/Twig/Node/Expression/Binary/StartsWith.php @@ -0,0 +1,30 @@ +getVarName(); + $right = $compiler->getVarName(); + $compiler + ->raw(sprintf('(is_string($%s = ', $left)) + ->subcompile($this->getNode('left')) + ->raw(sprintf(') && is_string($%s = ', $right)) + ->subcompile($this->getNode('right')) + ->raw(sprintf(') && (\'\' === $%2$s || 0 === strpos($%1$s, $%2$s)))', $left, $right)) + ; + } + + public function operator(Twig_Compiler $compiler) + { + return $compiler->raw(''); + } +} diff --git a/Twig/Node/Expression/Binary/Sub.php b/Twig/Node/Expression/Binary/Sub.php new file mode 100644 index 0000000..d446399 --- /dev/null +++ b/Twig/Node/Expression/Binary/Sub.php @@ -0,0 +1,18 @@ +raw('-'); + } +} diff --git a/Twig/Node/Expression/BlockReference.php b/Twig/Node/Expression/BlockReference.php new file mode 100644 index 0000000..c25aadd --- /dev/null +++ b/Twig/Node/Expression/BlockReference.php @@ -0,0 +1,51 @@ + + */ +class Twig_Node_Expression_BlockReference extends Twig_Node_Expression +{ + public function __construct(Twig_NodeInterface $name, $asString = false, $lineno, $tag = null) + { + parent::__construct(array('name' => $name), array('as_string' => $asString, 'output' => false), $lineno, $tag); + } + + /** + * Compiles the node to PHP. + * + * @param Twig_Compiler $compiler A Twig_Compiler instance + */ + public function compile(Twig_Compiler $compiler) + { + if ($this->getAttribute('as_string')) { + $compiler->raw('(string) '); + } + + if ($this->getAttribute('output')) { + $compiler + ->addDebugInfo($this) + ->write('$this->displayBlock(') + ->subcompile($this->getNode('name')) + ->raw(", \$context, \$blocks);\n") + ; + } else { + $compiler + ->raw('$this->renderBlock(') + ->subcompile($this->getNode('name')) + ->raw(', $context, $blocks)') + ; + } + } +} diff --git a/Twig/Node/Expression/Call.php b/Twig/Node/Expression/Call.php new file mode 100644 index 0000000..51e2cac --- /dev/null +++ b/Twig/Node/Expression/Call.php @@ -0,0 +1,247 @@ +hasAttribute('callable') && $callable = $this->getAttribute('callable')) { + if (is_string($callable)) { + $compiler->raw($callable); + } elseif (is_array($callable) && $callable[0] instanceof Twig_ExtensionInterface) { + $compiler->raw(sprintf('$this->env->getExtension(\'%s\')->%s', $callable[0]->getName(), $callable[1])); + } else { + $type = ucfirst($this->getAttribute('type')); + $compiler->raw(sprintf('call_user_func_array($this->env->get%s(\'%s\')->getCallable(), array', $type, $this->getAttribute('name'))); + $closingParenthesis = true; + } + } else { + $compiler->raw($this->getAttribute('thing')->compile()); + } + + $this->compileArguments($compiler); + + if ($closingParenthesis) { + $compiler->raw(')'); + } + } + + protected function compileArguments(Twig_Compiler $compiler) + { + $compiler->raw('('); + + $first = true; + + if ($this->hasAttribute('needs_environment') && $this->getAttribute('needs_environment')) { + $compiler->raw('$this->env'); + $first = false; + } + + if ($this->hasAttribute('needs_context') && $this->getAttribute('needs_context')) { + if (!$first) { + $compiler->raw(', '); + } + $compiler->raw('$context'); + $first = false; + } + + if ($this->hasAttribute('arguments')) { + foreach ($this->getAttribute('arguments') as $argument) { + if (!$first) { + $compiler->raw(', '); + } + $compiler->string($argument); + $first = false; + } + } + + if ($this->hasNode('node')) { + if (!$first) { + $compiler->raw(', '); + } + $compiler->subcompile($this->getNode('node')); + $first = false; + } + + if ($this->hasNode('arguments') && null !== $this->getNode('arguments')) { + $callable = $this->hasAttribute('callable') ? $this->getAttribute('callable') : null; + + $arguments = $this->getArguments($callable, $this->getNode('arguments')); + + foreach ($arguments as $node) { + if (!$first) { + $compiler->raw(', '); + } + $compiler->subcompile($node); + $first = false; + } + } + + $compiler->raw(')'); + } + + protected function getArguments($callable, $arguments) + { + $callType = $this->getAttribute('type'); + $callName = $this->getAttribute('name'); + + $parameters = array(); + $named = false; + foreach ($arguments as $name => $node) { + if (!is_int($name)) { + $named = true; + $name = $this->normalizeName($name); + } elseif ($named) { + throw new Twig_Error_Syntax(sprintf('Positional arguments cannot be used after named arguments for %s "%s".', $callType, $callName)); + } + + $parameters[$name] = $node; + } + + $isVariadic = $this->hasAttribute('is_variadic') && $this->getAttribute('is_variadic'); + if (!$named && !$isVariadic) { + return $parameters; + } + + if (!$callable) { + if ($named) { + $message = sprintf('Named arguments are not supported for %s "%s".', $callType, $callName); + } else { + $message = sprintf('Arbitrary positional arguments are not supported for %s "%s".', $callType, $callName); + } + + throw new LogicException($message); + } + + // manage named arguments + if (is_array($callable)) { + $r = new ReflectionMethod($callable[0], $callable[1]); + } elseif (is_object($callable) && !$callable instanceof Closure) { + $r = new ReflectionObject($callable); + $r = $r->getMethod('__invoke'); + } elseif (is_string($callable) && false !== strpos($callable, '::')) { + $r = new ReflectionMethod($callable); + } else { + $r = new ReflectionFunction($callable); + } + + $definition = $r->getParameters(); + if ($this->hasNode('node')) { + array_shift($definition); + } + if ($this->hasAttribute('needs_environment') && $this->getAttribute('needs_environment')) { + array_shift($definition); + } + if ($this->hasAttribute('needs_context') && $this->getAttribute('needs_context')) { + array_shift($definition); + } + if ($this->hasAttribute('arguments') && null !== $this->getAttribute('arguments')) { + foreach ($this->getAttribute('arguments') as $argument) { + array_shift($definition); + } + } + if ($isVariadic) { + $argument = end($definition); + if ($argument && $argument->isArray() && $argument->isDefaultValueAvailable() && array() === $argument->getDefaultValue()) { + array_pop($definition); + } else { + $callableName = $r->name; + if ($r->getDeclaringClass()) { + $callableName = $r->getDeclaringClass()->name.'::'.$callableName; + } + + throw new LogicException(sprintf('The last parameter of "%s" for %s "%s" must be an array with default value, eg. "array $arg = array()".', $callableName, $callType, $callName)); + } + } + + $arguments = array(); + $names = array(); + $missingArguments = array(); + $optionalArguments = array(); + $pos = 0; + foreach ($definition as $param) { + $names[] = $name = $this->normalizeName($param->name); + + if (array_key_exists($name, $parameters)) { + if (array_key_exists($pos, $parameters)) { + throw new Twig_Error_Syntax(sprintf('Argument "%s" is defined twice for %s "%s".', $name, $callType, $callName)); + } + + if (!empty($missingArguments)) { + throw new Twig_Error_Syntax(sprintf( + 'Argument "%s" could not be assigned for %s "%s(%s)" because it is mapped to an internal PHP function which cannot determine default value for optional argument%s "%s".', + $name, $callType, $callName, implode(', ', $names), count($missingArguments) > 1 ? 's' : '', implode('", "', $missingArguments)) + ); + } + + $arguments = array_merge($arguments, $optionalArguments); + $arguments[] = $parameters[$name]; + unset($parameters[$name]); + $optionalArguments = array(); + } elseif (array_key_exists($pos, $parameters)) { + $arguments = array_merge($arguments, $optionalArguments); + $arguments[] = $parameters[$pos]; + unset($parameters[$pos]); + $optionalArguments = array(); + ++$pos; + } elseif ($param->isDefaultValueAvailable()) { + $optionalArguments[] = new Twig_Node_Expression_Constant($param->getDefaultValue(), -1); + } elseif ($param->isOptional()) { + if (empty($parameters)) { + break; + } else { + $missingArguments[] = $name; + } + } else { + throw new Twig_Error_Syntax(sprintf('Value for argument "%s" is required for %s "%s".', $name, $callType, $callName)); + } + } + + if ($isVariadic) { + $arbitraryArguments = new Twig_Node_Expression_Array(array(), -1); + foreach ($parameters as $key => $value) { + if (is_int($key)) { + $arbitraryArguments->addElement($value); + } else { + $arbitraryArguments->addElement($value, new Twig_Node_Expression_Constant($key, -1)); + } + unset($parameters[$key]); + } + + if ($arbitraryArguments->count()) { + $arguments = array_merge($arguments, $optionalArguments); + $arguments[] = $arbitraryArguments; + } + } + + if (!empty($parameters)) { + $unknownParameter = null; + foreach ($parameters as $parameter) { + if ($parameter instanceof Twig_Node) { + $unknownParameter = $parameter; + break; + } + } + + throw new Twig_Error_Syntax(sprintf( + 'Unknown argument%s "%s" for %s "%s(%s)".', + count($parameters) > 1 ? 's' : '', implode('", "', array_keys($parameters)), $callType, $callName, implode(', ', $names) + ), $unknownParameter ? $unknownParameter->getLine() : -1); + } + + return $arguments; + } + + protected function normalizeName($name) + { + return strtolower(preg_replace(array('/([A-Z]+)([A-Z][a-z])/', '/([a-z\d])([A-Z])/'), array('\\1_\\2', '\\1_\\2'), $name)); + } +} diff --git a/Twig/Node/Expression/Conditional.php b/Twig/Node/Expression/Conditional.php new file mode 100644 index 0000000..edcb1e2 --- /dev/null +++ b/Twig/Node/Expression/Conditional.php @@ -0,0 +1,31 @@ + $expr1, 'expr2' => $expr2, 'expr3' => $expr3), array(), $lineno); + } + + public function compile(Twig_Compiler $compiler) + { + $compiler + ->raw('((') + ->subcompile($this->getNode('expr1')) + ->raw(') ? (') + ->subcompile($this->getNode('expr2')) + ->raw(') : (') + ->subcompile($this->getNode('expr3')) + ->raw('))') + ; + } +} diff --git a/Twig/Node/Expression/Constant.php b/Twig/Node/Expression/Constant.php new file mode 100644 index 0000000..a91dc69 --- /dev/null +++ b/Twig/Node/Expression/Constant.php @@ -0,0 +1,23 @@ + $value), $lineno); + } + + public function compile(Twig_Compiler $compiler) + { + $compiler->repr($this->getAttribute('value')); + } +} diff --git a/Twig/Node/Expression/ExtensionReference.php b/Twig/Node/Expression/ExtensionReference.php new file mode 100644 index 0000000..db06abb --- /dev/null +++ b/Twig/Node/Expression/ExtensionReference.php @@ -0,0 +1,33 @@ + + */ +class Twig_Node_Expression_ExtensionReference extends Twig_Node_Expression +{ + public function __construct($name, $lineno, $tag = null) + { + parent::__construct(array(), array('name' => $name), $lineno, $tag); + } + + /** + * Compiles the node to PHP. + * + * @param Twig_Compiler $compiler A Twig_Compiler instance + */ + public function compile(Twig_Compiler $compiler) + { + $compiler->raw(sprintf("\$this->env->getExtension('%s')", $this->getAttribute('name'))); + } +} diff --git a/Twig/Node/Expression/Filter.php b/Twig/Node/Expression/Filter.php new file mode 100644 index 0000000..a906232 --- /dev/null +++ b/Twig/Node/Expression/Filter.php @@ -0,0 +1,39 @@ + $node, 'filter' => $filterName, 'arguments' => $arguments), array(), $lineno, $tag); + } + + public function compile(Twig_Compiler $compiler) + { + $name = $this->getNode('filter')->getAttribute('value'); + $filter = $compiler->getEnvironment()->getFilter($name); + + $this->setAttribute('name', $name); + $this->setAttribute('type', 'filter'); + $this->setAttribute('thing', $filter); + $this->setAttribute('needs_environment', $filter->needsEnvironment()); + $this->setAttribute('needs_context', $filter->needsContext()); + $this->setAttribute('arguments', $filter->getArguments()); + if ($filter instanceof Twig_FilterCallableInterface || $filter instanceof Twig_SimpleFilter) { + $this->setAttribute('callable', $filter->getCallable()); + } + if ($filter instanceof Twig_SimpleFilter) { + $this->setAttribute('is_variadic', $filter->isVariadic()); + } + + $this->compileCallable($compiler); + } +} diff --git a/Twig/Node/Expression/Filter/Default.php b/Twig/Node/Expression/Filter/Default.php new file mode 100644 index 0000000..1827c88 --- /dev/null +++ b/Twig/Node/Expression/Filter/Default.php @@ -0,0 +1,43 @@ + + * {{ var.foo|default('foo item on var is not defined') }} + * + * + * @author Fabien Potencier + */ +class Twig_Node_Expression_Filter_Default extends Twig_Node_Expression_Filter +{ + public function __construct(Twig_NodeInterface $node, Twig_Node_Expression_Constant $filterName, Twig_NodeInterface $arguments, $lineno, $tag = null) + { + $default = new Twig_Node_Expression_Filter($node, new Twig_Node_Expression_Constant('default', $node->getLine()), $arguments, $node->getLine()); + + if ('default' === $filterName->getAttribute('value') && ($node instanceof Twig_Node_Expression_Name || $node instanceof Twig_Node_Expression_GetAttr)) { + $test = new Twig_Node_Expression_Test_Defined(clone $node, 'defined', new Twig_Node(), $node->getLine()); + $false = count($arguments) ? $arguments->getNode(0) : new Twig_Node_Expression_Constant('', $node->getLine()); + + $node = new Twig_Node_Expression_Conditional($test, $default, $false, $node->getLine()); + } else { + $node = $default; + } + + parent::__construct($node, $filterName, $arguments, $lineno, $tag); + } + + public function compile(Twig_Compiler $compiler) + { + $compiler->subcompile($this->getNode('node')); + } +} diff --git a/Twig/Node/Expression/Function.php b/Twig/Node/Expression/Function.php new file mode 100644 index 0000000..7326ede --- /dev/null +++ b/Twig/Node/Expression/Function.php @@ -0,0 +1,38 @@ + $arguments), array('name' => $name), $lineno); + } + + public function compile(Twig_Compiler $compiler) + { + $name = $this->getAttribute('name'); + $function = $compiler->getEnvironment()->getFunction($name); + + $this->setAttribute('name', $name); + $this->setAttribute('type', 'function'); + $this->setAttribute('thing', $function); + $this->setAttribute('needs_environment', $function->needsEnvironment()); + $this->setAttribute('needs_context', $function->needsContext()); + $this->setAttribute('arguments', $function->getArguments()); + if ($function instanceof Twig_FunctionCallableInterface || $function instanceof Twig_SimpleFunction) { + $this->setAttribute('callable', $function->getCallable()); + } + if ($function instanceof Twig_SimpleFunction) { + $this->setAttribute('is_variadic', $function->isVariadic()); + } + + $this->compileCallable($compiler); + } +} diff --git a/Twig/Node/Expression/GetAttr.php b/Twig/Node/Expression/GetAttr.php new file mode 100644 index 0000000..6ce6111 --- /dev/null +++ b/Twig/Node/Expression/GetAttr.php @@ -0,0 +1,63 @@ + $node, 'attribute' => $attribute, 'arguments' => $arguments), array('type' => $type, 'is_defined_test' => false, 'ignore_strict_check' => false, 'disable_c_ext' => false), $lineno); + } + + public function compile(Twig_Compiler $compiler) + { + if (function_exists('twig_template_get_attributes') && !$this->getAttribute('disable_c_ext')) { + $compiler->raw('twig_template_get_attributes($this, '); + } else { + $compiler->raw('$this->getAttribute('); + } + + if ($this->getAttribute('ignore_strict_check')) { + $this->getNode('node')->setAttribute('ignore_strict_check', true); + } + + $compiler->subcompile($this->getNode('node')); + + $compiler->raw(', ')->subcompile($this->getNode('attribute')); + + // only generate optional arguments when needed (to make generated code more readable) + $needFourth = $this->getAttribute('ignore_strict_check'); + $needThird = $needFourth || $this->getAttribute('is_defined_test'); + $needSecond = $needThird || Twig_Template::ANY_CALL !== $this->getAttribute('type'); + $needFirst = $needSecond || null !== $this->getNode('arguments'); + + if ($needFirst) { + if (null !== $this->getNode('arguments')) { + $compiler->raw(', ')->subcompile($this->getNode('arguments')); + } else { + $compiler->raw(', array()'); + } + } + + if ($needSecond) { + $compiler->raw(', ')->repr($this->getAttribute('type')); + } + + if ($needThird) { + $compiler->raw(', ')->repr($this->getAttribute('is_defined_test')); + } + + if ($needFourth) { + $compiler->raw(', ')->repr($this->getAttribute('ignore_strict_check')); + } + + $compiler->raw(')'); + } +} diff --git a/Twig/Node/Expression/MethodCall.php b/Twig/Node/Expression/MethodCall.php new file mode 100644 index 0000000..620b02b --- /dev/null +++ b/Twig/Node/Expression/MethodCall.php @@ -0,0 +1,41 @@ + $node, 'arguments' => $arguments), array('method' => $method, 'safe' => false), $lineno); + + if ($node instanceof Twig_Node_Expression_Name) { + $node->setAttribute('always_defined', true); + } + } + + public function compile(Twig_Compiler $compiler) + { + $compiler + ->subcompile($this->getNode('node')) + ->raw('->') + ->raw($this->getAttribute('method')) + ->raw('(') + ; + $first = true; + foreach ($this->getNode('arguments')->getKeyValuePairs() as $pair) { + if (!$first) { + $compiler->raw(', '); + } + $first = false; + + $compiler->subcompile($pair['value']); + } + $compiler->raw(')'); + } +} diff --git a/Twig/Node/Expression/Name.php b/Twig/Node/Expression/Name.php new file mode 100644 index 0000000..c062a21 --- /dev/null +++ b/Twig/Node/Expression/Name.php @@ -0,0 +1,98 @@ + '$this', + '_context' => '$context', + '_charset' => '$this->env->getCharset()', + ); + + public function __construct($name, $lineno) + { + parent::__construct(array(), array('name' => $name, 'is_defined_test' => false, 'ignore_strict_check' => false, 'always_defined' => false), $lineno); + } + + public function compile(Twig_Compiler $compiler) + { + $name = $this->getAttribute('name'); + + $compiler->addDebugInfo($this); + + if ($this->getAttribute('is_defined_test')) { + if ($this->isSpecial()) { + if ('_self' === $name) { + @trigger_error(sprintf('Global variable "_self" is deprecated in %s at line %d', '?', $this->getLine()), E_USER_DEPRECATED); + } + + $compiler->repr(true); + } else { + $compiler->raw('array_key_exists(')->repr($name)->raw(', $context)'); + } + } elseif ($this->isSpecial()) { + if ('_self' === $name) { + @trigger_error(sprintf('Global variable "_self" is deprecated in %s at line %d', '?', $this->getLine()), E_USER_DEPRECATED); + } + + $compiler->raw($this->specialVars[$name]); + } elseif ($this->getAttribute('always_defined')) { + $compiler + ->raw('$context[') + ->string($name) + ->raw(']') + ; + } else { + // remove the non-PHP 5.4 version when PHP 5.3 support is dropped + // as the non-optimized version is just a workaround for slow ternary operator + // when the context has a lot of variables + if (PHP_VERSION_ID >= 50400) { + // PHP 5.4 ternary operator performance was optimized + $compiler + ->raw('(isset($context[') + ->string($name) + ->raw(']) ? $context[') + ->string($name) + ->raw('] : ') + ; + + if ($this->getAttribute('ignore_strict_check') || !$compiler->getEnvironment()->isStrictVariables()) { + $compiler->raw('null)'); + } else { + $compiler->raw('$this->getContext($context, ')->string($name)->raw('))'); + } + } else { + $compiler + ->raw('$this->getContext($context, ') + ->string($name) + ; + + if ($this->getAttribute('ignore_strict_check')) { + $compiler->raw(', true'); + } + + $compiler + ->raw(')') + ; + } + } + } + + public function isSpecial() + { + return isset($this->specialVars[$this->getAttribute('name')]); + } + + public function isSimple() + { + return !$this->isSpecial() && !$this->getAttribute('is_defined_test'); + } +} diff --git a/Twig/Node/Expression/Parent.php b/Twig/Node/Expression/Parent.php new file mode 100644 index 0000000..bd5024b --- /dev/null +++ b/Twig/Node/Expression/Parent.php @@ -0,0 +1,47 @@ + + */ +class Twig_Node_Expression_Parent extends Twig_Node_Expression +{ + public function __construct($name, $lineno, $tag = null) + { + parent::__construct(array(), array('output' => false, 'name' => $name), $lineno, $tag); + } + + /** + * Compiles the node to PHP. + * + * @param Twig_Compiler $compiler A Twig_Compiler instance + */ + public function compile(Twig_Compiler $compiler) + { + if ($this->getAttribute('output')) { + $compiler + ->addDebugInfo($this) + ->write('$this->displayParentBlock(') + ->string($this->getAttribute('name')) + ->raw(", \$context, \$blocks);\n") + ; + } else { + $compiler + ->raw('$this->renderParentBlock(') + ->string($this->getAttribute('name')) + ->raw(', $context, $blocks)') + ; + } + } +} diff --git a/Twig/Node/Expression/TempName.php b/Twig/Node/Expression/TempName.php new file mode 100644 index 0000000..e6b058e --- /dev/null +++ b/Twig/Node/Expression/TempName.php @@ -0,0 +1,26 @@ + $name), $lineno); + } + + public function compile(Twig_Compiler $compiler) + { + $compiler + ->raw('$_') + ->raw($this->getAttribute('name')) + ->raw('_') + ; + } +} diff --git a/Twig/Node/Expression/Test.php b/Twig/Node/Expression/Test.php new file mode 100644 index 0000000..c0358c8 --- /dev/null +++ b/Twig/Node/Expression/Test.php @@ -0,0 +1,35 @@ + $node, 'arguments' => $arguments), array('name' => $name), $lineno); + } + + public function compile(Twig_Compiler $compiler) + { + $name = $this->getAttribute('name'); + $test = $compiler->getEnvironment()->getTest($name); + + $this->setAttribute('name', $name); + $this->setAttribute('type', 'test'); + $this->setAttribute('thing', $test); + if ($test instanceof Twig_TestCallableInterface || $test instanceof Twig_SimpleTest) { + $this->setAttribute('callable', $test->getCallable()); + } + if ($test instanceof Twig_SimpleTest) { + $this->setAttribute('is_variadic', $test->isVariadic()); + } + + $this->compileCallable($compiler); + } +} diff --git a/Twig/Node/Expression/Test/Constant.php b/Twig/Node/Expression/Test/Constant.php new file mode 100644 index 0000000..de55f5f --- /dev/null +++ b/Twig/Node/Expression/Test/Constant.php @@ -0,0 +1,46 @@ + + * {% if post.status is constant('Post::PUBLISHED') %} + * the status attribute is exactly the same as Post::PUBLISHED + * {% endif %} + * + * + * @author Fabien Potencier + */ +class Twig_Node_Expression_Test_Constant extends Twig_Node_Expression_Test +{ + public function compile(Twig_Compiler $compiler) + { + $compiler + ->raw('(') + ->subcompile($this->getNode('node')) + ->raw(' === constant(') + ; + + if ($this->getNode('arguments')->hasNode(1)) { + $compiler + ->raw('get_class(') + ->subcompile($this->getNode('arguments')->getNode(1)) + ->raw(')."::".') + ; + } + + $compiler + ->subcompile($this->getNode('arguments')->getNode(0)) + ->raw('))') + ; + } +} diff --git a/Twig/Node/Expression/Test/Defined.php b/Twig/Node/Expression/Test/Defined.php new file mode 100644 index 0000000..247b2e2 --- /dev/null +++ b/Twig/Node/Expression/Test/Defined.php @@ -0,0 +1,54 @@ + + * {# defined works with variable names and variable attributes #} + * {% if foo is defined %} + * {# ... #} + * {% endif %} + * + * + * @author Fabien Potencier + */ +class Twig_Node_Expression_Test_Defined extends Twig_Node_Expression_Test +{ + public function __construct(Twig_NodeInterface $node, $name, Twig_NodeInterface $arguments = null, $lineno) + { + parent::__construct($node, $name, $arguments, $lineno); + + if ($node instanceof Twig_Node_Expression_Name) { + $node->setAttribute('is_defined_test', true); + } elseif ($node instanceof Twig_Node_Expression_GetAttr) { + $node->setAttribute('is_defined_test', true); + + $this->changeIgnoreStrictCheck($node); + } else { + throw new Twig_Error_Syntax('The "defined" test only works with simple variables', $this->getLine()); + } + } + + protected function changeIgnoreStrictCheck(Twig_Node_Expression_GetAttr $node) + { + $node->setAttribute('ignore_strict_check', true); + + if ($node->getNode('node') instanceof Twig_Node_Expression_GetAttr) { + $this->changeIgnoreStrictCheck($node->getNode('node')); + } + } + + public function compile(Twig_Compiler $compiler) + { + $compiler->subcompile($this->getNode('node')); + } +} diff --git a/Twig/Node/Expression/Test/Divisibleby.php b/Twig/Node/Expression/Test/Divisibleby.php new file mode 100644 index 0000000..d5bed23 --- /dev/null +++ b/Twig/Node/Expression/Test/Divisibleby.php @@ -0,0 +1,33 @@ + + * {% if loop.index is divisible by(3) %} + * + * + * @author Fabien Potencier + */ +class Twig_Node_Expression_Test_Divisibleby extends Twig_Node_Expression_Test +{ + public function compile(Twig_Compiler $compiler) + { + $compiler + ->raw('(0 == ') + ->subcompile($this->getNode('node')) + ->raw(' % ') + ->subcompile($this->getNode('arguments')->getNode(0)) + ->raw(')') + ; + } +} diff --git a/Twig/Node/Expression/Test/Even.php b/Twig/Node/Expression/Test/Even.php new file mode 100644 index 0000000..d7853e8 --- /dev/null +++ b/Twig/Node/Expression/Test/Even.php @@ -0,0 +1,32 @@ + + * {{ var is even }} + * + * + * @author Fabien Potencier + */ +class Twig_Node_Expression_Test_Even extends Twig_Node_Expression_Test +{ + public function compile(Twig_Compiler $compiler) + { + $compiler + ->raw('(') + ->subcompile($this->getNode('node')) + ->raw(' % 2 == 0') + ->raw(')') + ; + } +} diff --git a/Twig/Node/Expression/Test/Null.php b/Twig/Node/Expression/Test/Null.php new file mode 100644 index 0000000..1c83825 --- /dev/null +++ b/Twig/Node/Expression/Test/Null.php @@ -0,0 +1,31 @@ + + * {{ var is none }} + * + * + * @author Fabien Potencier + */ +class Twig_Node_Expression_Test_Null extends Twig_Node_Expression_Test +{ + public function compile(Twig_Compiler $compiler) + { + $compiler + ->raw('(null === ') + ->subcompile($this->getNode('node')) + ->raw(')') + ; + } +} diff --git a/Twig/Node/Expression/Test/Odd.php b/Twig/Node/Expression/Test/Odd.php new file mode 100644 index 0000000..421c19e --- /dev/null +++ b/Twig/Node/Expression/Test/Odd.php @@ -0,0 +1,32 @@ + + * {{ var is odd }} + * + * + * @author Fabien Potencier + */ +class Twig_Node_Expression_Test_Odd extends Twig_Node_Expression_Test +{ + public function compile(Twig_Compiler $compiler) + { + $compiler + ->raw('(') + ->subcompile($this->getNode('node')) + ->raw(' % 2 == 1') + ->raw(')') + ; + } +} diff --git a/Twig/Node/Expression/Test/Sameas.php b/Twig/Node/Expression/Test/Sameas.php new file mode 100644 index 0000000..b48905e --- /dev/null +++ b/Twig/Node/Expression/Test/Sameas.php @@ -0,0 +1,29 @@ + + */ +class Twig_Node_Expression_Test_Sameas extends Twig_Node_Expression_Test +{ + public function compile(Twig_Compiler $compiler) + { + $compiler + ->raw('(') + ->subcompile($this->getNode('node')) + ->raw(' === ') + ->subcompile($this->getNode('arguments')->getNode(0)) + ->raw(')') + ; + } +} diff --git a/Twig/Node/Expression/Unary.php b/Twig/Node/Expression/Unary.php new file mode 100644 index 0000000..1cf54c3 --- /dev/null +++ b/Twig/Node/Expression/Unary.php @@ -0,0 +1,27 @@ + $node), array(), $lineno); + } + + public function compile(Twig_Compiler $compiler) + { + $compiler->raw(' '); + $this->operator($compiler); + $compiler->subcompile($this->getNode('node')); + } + + abstract public function operator(Twig_Compiler $compiler); +} diff --git a/Twig/Node/Expression/Unary/Neg.php b/Twig/Node/Expression/Unary/Neg.php new file mode 100644 index 0000000..2a3937e --- /dev/null +++ b/Twig/Node/Expression/Unary/Neg.php @@ -0,0 +1,18 @@ +raw('-'); + } +} diff --git a/Twig/Node/Expression/Unary/Not.php b/Twig/Node/Expression/Unary/Not.php new file mode 100644 index 0000000..f94073c --- /dev/null +++ b/Twig/Node/Expression/Unary/Not.php @@ -0,0 +1,18 @@ +raw('!'); + } +} diff --git a/Twig/Node/Expression/Unary/Pos.php b/Twig/Node/Expression/Unary/Pos.php new file mode 100644 index 0000000..04edb52 --- /dev/null +++ b/Twig/Node/Expression/Unary/Pos.php @@ -0,0 +1,18 @@ +raw('+'); + } +} diff --git a/Twig/Node/Flush.php b/Twig/Node/Flush.php new file mode 100644 index 0000000..20d6aab --- /dev/null +++ b/Twig/Node/Flush.php @@ -0,0 +1,36 @@ + + */ +class Twig_Node_Flush extends Twig_Node +{ + public function __construct($lineno, $tag) + { + parent::__construct(array(), array(), $lineno, $tag); + } + + /** + * Compiles the node to PHP. + * + * @param Twig_Compiler $compiler A Twig_Compiler instance + */ + public function compile(Twig_Compiler $compiler) + { + $compiler + ->addDebugInfo($this) + ->write("flush();\n") + ; + } +} diff --git a/Twig/Node/For.php b/Twig/Node/For.php new file mode 100644 index 0000000..a8d199a --- /dev/null +++ b/Twig/Node/For.php @@ -0,0 +1,111 @@ + + */ +class Twig_Node_For extends Twig_Node +{ + protected $loop; + + public function __construct(Twig_Node_Expression_AssignName $keyTarget, Twig_Node_Expression_AssignName $valueTarget, Twig_Node_Expression $seq, Twig_Node_Expression $ifexpr = null, Twig_NodeInterface $body, Twig_NodeInterface $else = null, $lineno, $tag = null) + { + $body = new Twig_Node(array($body, $this->loop = new Twig_Node_ForLoop($lineno, $tag))); + + if (null !== $ifexpr) { + $body = new Twig_Node_If(new Twig_Node(array($ifexpr, $body)), null, $lineno, $tag); + } + + parent::__construct(array('key_target' => $keyTarget, 'value_target' => $valueTarget, 'seq' => $seq, 'body' => $body, 'else' => $else), array('with_loop' => true, 'ifexpr' => null !== $ifexpr), $lineno, $tag); + } + + /** + * Compiles the node to PHP. + * + * @param Twig_Compiler $compiler A Twig_Compiler instance + */ + public function compile(Twig_Compiler $compiler) + { + $compiler + ->addDebugInfo($this) + ->write("\$context['_parent'] = \$context;\n") + ->write("\$context['_seq'] = twig_ensure_traversable(") + ->subcompile($this->getNode('seq')) + ->raw(");\n") + ; + + if (null !== $this->getNode('else')) { + $compiler->write("\$context['_iterated'] = false;\n"); + } + + if ($this->getAttribute('with_loop')) { + $compiler + ->write("\$context['loop'] = array(\n") + ->write(" 'parent' => \$context['_parent'],\n") + ->write(" 'index0' => 0,\n") + ->write(" 'index' => 1,\n") + ->write(" 'first' => true,\n") + ->write(");\n") + ; + + if (!$this->getAttribute('ifexpr')) { + $compiler + ->write("if (is_array(\$context['_seq']) || (is_object(\$context['_seq']) && \$context['_seq'] instanceof Countable)) {\n") + ->indent() + ->write("\$length = count(\$context['_seq']);\n") + ->write("\$context['loop']['revindex0'] = \$length - 1;\n") + ->write("\$context['loop']['revindex'] = \$length;\n") + ->write("\$context['loop']['length'] = \$length;\n") + ->write("\$context['loop']['last'] = 1 === \$length;\n") + ->outdent() + ->write("}\n") + ; + } + } + + $this->loop->setAttribute('else', null !== $this->getNode('else')); + $this->loop->setAttribute('with_loop', $this->getAttribute('with_loop')); + $this->loop->setAttribute('ifexpr', $this->getAttribute('ifexpr')); + + $compiler + ->write("foreach (\$context['_seq'] as ") + ->subcompile($this->getNode('key_target')) + ->raw(' => ') + ->subcompile($this->getNode('value_target')) + ->raw(") {\n") + ->indent() + ->subcompile($this->getNode('body')) + ->outdent() + ->write("}\n") + ; + + if (null !== $this->getNode('else')) { + $compiler + ->write("if (!\$context['_iterated']) {\n") + ->indent() + ->subcompile($this->getNode('else')) + ->outdent() + ->write("}\n") + ; + } + + $compiler->write("\$_parent = \$context['_parent'];\n"); + + // remove some "private" loop variables (needed for nested loops) + $compiler->write('unset($context[\'_seq\'], $context[\'_iterated\'], $context[\''.$this->getNode('key_target')->getAttribute('name').'\'], $context[\''.$this->getNode('value_target')->getAttribute('name').'\'], $context[\'_parent\'], $context[\'loop\']);'."\n"); + + // keep the values set in the inner context for variables defined in the outer context + $compiler->write("\$context = array_intersect_key(\$context, \$_parent) + \$_parent;\n"); + } +} diff --git a/Twig/Node/ForLoop.php b/Twig/Node/ForLoop.php new file mode 100644 index 0000000..d330283 --- /dev/null +++ b/Twig/Node/ForLoop.php @@ -0,0 +1,55 @@ + + */ +class Twig_Node_ForLoop extends Twig_Node +{ + public function __construct($lineno, $tag = null) + { + parent::__construct(array(), array('with_loop' => false, 'ifexpr' => false, 'else' => false), $lineno, $tag); + } + + /** + * Compiles the node to PHP. + * + * @param Twig_Compiler $compiler A Twig_Compiler instance + */ + public function compile(Twig_Compiler $compiler) + { + if ($this->getAttribute('else')) { + $compiler->write("\$context['_iterated'] = true;\n"); + } + + if ($this->getAttribute('with_loop')) { + $compiler + ->write("++\$context['loop']['index0'];\n") + ->write("++\$context['loop']['index'];\n") + ->write("\$context['loop']['first'] = false;\n") + ; + + if (!$this->getAttribute('ifexpr')) { + $compiler + ->write("if (isset(\$context['loop']['length'])) {\n") + ->indent() + ->write("--\$context['loop']['revindex0'];\n") + ->write("--\$context['loop']['revindex'];\n") + ->write("\$context['loop']['last'] = 0 === \$context['loop']['revindex0'];\n") + ->outdent() + ->write("}\n") + ; + } + } + } +} diff --git a/Twig/Node/If.php b/Twig/Node/If.php new file mode 100644 index 0000000..1b6104d --- /dev/null +++ b/Twig/Node/If.php @@ -0,0 +1,66 @@ + + */ +class Twig_Node_If extends Twig_Node +{ + public function __construct(Twig_NodeInterface $tests, Twig_NodeInterface $else = null, $lineno, $tag = null) + { + parent::__construct(array('tests' => $tests, 'else' => $else), array(), $lineno, $tag); + } + + /** + * Compiles the node to PHP. + * + * @param Twig_Compiler $compiler A Twig_Compiler instance + */ + public function compile(Twig_Compiler $compiler) + { + $compiler->addDebugInfo($this); + for ($i = 0, $count = count($this->getNode('tests')); $i < $count; $i += 2) { + if ($i > 0) { + $compiler + ->outdent() + ->write('} elseif (') + ; + } else { + $compiler + ->write('if (') + ; + } + + $compiler + ->subcompile($this->getNode('tests')->getNode($i)) + ->raw(") {\n") + ->indent() + ->subcompile($this->getNode('tests')->getNode($i + 1)) + ; + } + + if ($this->hasNode('else') && null !== $this->getNode('else')) { + $compiler + ->outdent() + ->write("} else {\n") + ->indent() + ->subcompile($this->getNode('else')) + ; + } + + $compiler + ->outdent() + ->write("}\n"); + } +} diff --git a/Twig/Node/Import.php b/Twig/Node/Import.php new file mode 100644 index 0000000..515ff2a --- /dev/null +++ b/Twig/Node/Import.php @@ -0,0 +1,54 @@ + + */ +class Twig_Node_Import extends Twig_Node +{ + public function __construct(Twig_Node_Expression $expr, Twig_Node_Expression $var, $lineno, $tag = null) + { + parent::__construct(array('expr' => $expr, 'var' => $var), array(), $lineno, $tag); + } + + /** + * Compiles the node to PHP. + * + * @param Twig_Compiler $compiler A Twig_Compiler instance + */ + public function compile(Twig_Compiler $compiler) + { + $compiler + ->addDebugInfo($this) + ->write('') + ->subcompile($this->getNode('var')) + ->raw(' = ') + ; + + if ($this->getNode('expr') instanceof Twig_Node_Expression_Name && '_self' === $this->getNode('expr')->getAttribute('name')) { + $compiler->raw('$this'); + } else { + $compiler + ->raw('$this->loadTemplate(') + ->subcompile($this->getNode('expr')) + ->raw(', ') + ->repr($compiler->getFilename()) + ->raw(', ') + ->repr($this->getLine()) + ->raw(')') + ; + } + + $compiler->raw(";\n"); + } +} diff --git a/Twig/Node/Include.php b/Twig/Node/Include.php new file mode 100644 index 0000000..fecaa82 --- /dev/null +++ b/Twig/Node/Include.php @@ -0,0 +1,88 @@ + + */ +class Twig_Node_Include extends Twig_Node implements Twig_NodeOutputInterface +{ + public function __construct(Twig_Node_Expression $expr, Twig_Node_Expression $variables = null, $only = false, $ignoreMissing = false, $lineno, $tag = null) + { + parent::__construct(array('expr' => $expr, 'variables' => $variables), array('only' => (bool) $only, 'ignore_missing' => (bool) $ignoreMissing), $lineno, $tag); + } + + /** + * Compiles the node to PHP. + * + * @param Twig_Compiler $compiler A Twig_Compiler instance + */ + public function compile(Twig_Compiler $compiler) + { + $compiler->addDebugInfo($this); + + if ($this->getAttribute('ignore_missing')) { + $compiler + ->write("try {\n") + ->indent() + ; + } + + $this->addGetTemplate($compiler); + + $compiler->raw('->display('); + + $this->addTemplateArguments($compiler); + + $compiler->raw(");\n"); + + if ($this->getAttribute('ignore_missing')) { + $compiler + ->outdent() + ->write("} catch (Twig_Error_Loader \$e) {\n") + ->indent() + ->write("// ignore missing template\n") + ->outdent() + ->write("}\n\n") + ; + } + } + + protected function addGetTemplate(Twig_Compiler $compiler) + { + $compiler + ->write('$this->loadTemplate(') + ->subcompile($this->getNode('expr')) + ->raw(', ') + ->repr($compiler->getFilename()) + ->raw(', ') + ->repr($this->getLine()) + ->raw(')') + ; + } + + protected function addTemplateArguments(Twig_Compiler $compiler) + { + if (null === $this->getNode('variables')) { + $compiler->raw(false === $this->getAttribute('only') ? '$context' : 'array()'); + } elseif (false === $this->getAttribute('only')) { + $compiler + ->raw('array_merge($context, ') + ->subcompile($this->getNode('variables')) + ->raw(')') + ; + } else { + $compiler->subcompile($this->getNode('variables')); + } + } +} diff --git a/Twig/Node/Macro.php b/Twig/Node/Macro.php new file mode 100644 index 0000000..03cf4dd --- /dev/null +++ b/Twig/Node/Macro.php @@ -0,0 +1,123 @@ + + */ +class Twig_Node_Macro extends Twig_Node +{ + const VARARGS_NAME = 'varargs'; + + public function __construct($name, Twig_NodeInterface $body, Twig_NodeInterface $arguments, $lineno, $tag = null) + { + foreach ($arguments as $argumentName => $argument) { + if (self::VARARGS_NAME === $argumentName) { + throw new Twig_Error_Syntax(sprintf('The argument "%s" in macro "%s" cannot be defined because the variable "%s" is reserved for arbitrary arguments', self::VARARGS_NAME, $name, self::VARARGS_NAME), $argument->getLine()); + } + } + + parent::__construct(array('body' => $body, 'arguments' => $arguments), array('name' => $name), $lineno, $tag); + } + + /** + * Compiles the node to PHP. + * + * @param Twig_Compiler $compiler A Twig_Compiler instance + */ + public function compile(Twig_Compiler $compiler) + { + $compiler + ->addDebugInfo($this) + ->write(sprintf('public function get%s(', $this->getAttribute('name'))) + ; + + $count = count($this->getNode('arguments')); + $pos = 0; + foreach ($this->getNode('arguments') as $name => $default) { + $compiler + ->raw('$__'.$name.'__ = ') + ->subcompile($default) + ; + + if (++$pos < $count) { + $compiler->raw(', '); + } + } + + if (PHP_VERSION_ID >= 50600) { + if ($count) { + $compiler->raw(', '); + } + + $compiler->raw('...$__varargs__'); + } + + $compiler + ->raw(")\n") + ->write("{\n") + ->indent() + ; + + $compiler + ->write("\$context = \$this->env->mergeGlobals(array(\n") + ->indent() + ; + + foreach ($this->getNode('arguments') as $name => $default) { + $compiler + ->addIndentation() + ->string($name) + ->raw(' => $__'.$name.'__') + ->raw(",\n") + ; + } + + $compiler + ->addIndentation() + ->string(self::VARARGS_NAME) + ->raw(' => ') + ; + + if (PHP_VERSION_ID >= 50600) { + $compiler->raw("\$__varargs__,\n"); + } else { + $compiler + ->raw('func_num_args() > ') + ->repr($count) + ->raw(' ? array_slice(func_get_args(), ') + ->repr($count) + ->raw(") : array(),\n") + ; + } + + $compiler + ->outdent() + ->write("));\n\n") + ->write("\$blocks = array();\n\n") + ->write("ob_start();\n") + ->write("try {\n") + ->indent() + ->subcompile($this->getNode('body')) + ->outdent() + ->write("} catch (Exception \$e) {\n") + ->indent() + ->write("ob_end_clean();\n\n") + ->write("throw \$e;\n") + ->outdent() + ->write("}\n\n") + ->write("return ('' === \$tmp = ob_get_clean()) ? '' : new Twig_Markup(\$tmp, \$this->env->getCharset());\n") + ->outdent() + ->write("}\n\n") + ; + } +} diff --git a/Twig/Node/Module.php b/Twig/Node/Module.php new file mode 100644 index 0000000..1bc4fea --- /dev/null +++ b/Twig/Node/Module.php @@ -0,0 +1,408 @@ + + */ +class Twig_Node_Module extends Twig_Node +{ + public function __construct(Twig_NodeInterface $body, Twig_Node_Expression $parent = null, Twig_NodeInterface $blocks, Twig_NodeInterface $macros, Twig_NodeInterface $traits, $embeddedTemplates, $filename) + { + // embedded templates are set as attributes so that they are only visited once by the visitors + parent::__construct(array( + 'parent' => $parent, + 'body' => $body, + 'blocks' => $blocks, + 'macros' => $macros, + 'traits' => $traits, + 'display_start' => new Twig_Node(), + 'display_end' => new Twig_Node(), + 'constructor_start' => new Twig_Node(), + 'constructor_end' => new Twig_Node(), + 'class_end' => new Twig_Node(), + ), array( + 'filename' => $filename, + 'index' => null, + 'embedded_templates' => $embeddedTemplates, + ), 1); + } + + public function setIndex($index) + { + $this->setAttribute('index', $index); + } + + /** + * Compiles the node to PHP. + * + * @param Twig_Compiler $compiler A Twig_Compiler instance + */ + public function compile(Twig_Compiler $compiler) + { + $this->compileTemplate($compiler); + + foreach ($this->getAttribute('embedded_templates') as $template) { + $compiler->subcompile($template); + } + } + + protected function compileTemplate(Twig_Compiler $compiler) + { + if (!$this->getAttribute('index')) { + $compiler->write('compileClassHeader($compiler); + + if ( + count($this->getNode('blocks')) + || count($this->getNode('traits')) + || null === $this->getNode('parent') + || $this->getNode('parent') instanceof Twig_Node_Expression_Constant + || count($this->getNode('constructor_start')) + || count($this->getNode('constructor_end')) + ) { + $this->compileConstructor($compiler); + } + + $this->compileGetParent($compiler); + + $this->compileDisplay($compiler); + + $compiler->subcompile($this->getNode('blocks')); + + $this->compileMacros($compiler); + + $this->compileGetTemplateName($compiler); + + $this->compileIsTraitable($compiler); + + $this->compileDebugInfo($compiler); + + $this->compileClassFooter($compiler); + } + + protected function compileGetParent(Twig_Compiler $compiler) + { + if (null === $parent = $this->getNode('parent')) { + return; + } + + $compiler + ->write("protected function doGetParent(array \$context)\n", "{\n") + ->indent() + ->addDebugInfo($parent) + ->write('return ') + ; + + if ($parent instanceof Twig_Node_Expression_Constant) { + $compiler->subcompile($parent); + } else { + $compiler + ->raw('$this->loadTemplate(') + ->subcompile($parent) + ->raw(', ') + ->repr($compiler->getFilename()) + ->raw(', ') + ->repr($this->getNode('parent')->getLine()) + ->raw(')') + ; + } + + $compiler + ->raw(";\n") + ->outdent() + ->write("}\n\n") + ; + } + + protected function compileClassHeader(Twig_Compiler $compiler) + { + $compiler + ->write("\n\n") + // if the filename contains */, add a blank to avoid a PHP parse error + ->write('/* '.str_replace('*/', '* /', $this->getAttribute('filename'))." */\n") + ->write('class '.$compiler->getEnvironment()->getTemplateClass($this->getAttribute('filename'), $this->getAttribute('index'))) + ->raw(sprintf(" extends %s\n", $compiler->getEnvironment()->getBaseTemplateClass())) + ->write("{\n") + ->indent() + ; + } + + protected function compileConstructor(Twig_Compiler $compiler) + { + $compiler + ->write("public function __construct(Twig_Environment \$env)\n", "{\n") + ->indent() + ->subcompile($this->getNode('constructor_start')) + ->write("parent::__construct(\$env);\n\n") + ; + + // parent + if (null === $parent = $this->getNode('parent')) { + $compiler->write("\$this->parent = false;\n\n"); + } elseif ($parent instanceof Twig_Node_Expression_Constant) { + $compiler + ->addDebugInfo($parent) + ->write('$this->parent = $this->loadTemplate(') + ->subcompile($parent) + ->raw(', ') + ->repr($compiler->getFilename()) + ->raw(', ') + ->repr($this->getNode('parent')->getLine()) + ->raw(");\n") + ; + } + + $countTraits = count($this->getNode('traits')); + if ($countTraits) { + // traits + foreach ($this->getNode('traits') as $i => $trait) { + $this->compileLoadTemplate($compiler, $trait->getNode('template'), sprintf('$_trait_%s', $i)); + + $compiler + ->addDebugInfo($trait->getNode('template')) + ->write(sprintf("if (!\$_trait_%s->isTraitable()) {\n", $i)) + ->indent() + ->write("throw new Twig_Error_Runtime('Template \"'.") + ->subcompile($trait->getNode('template')) + ->raw(".'\" cannot be used as a trait.');\n") + ->outdent() + ->write("}\n") + ->write(sprintf("\$_trait_%s_blocks = \$_trait_%s->getBlocks();\n\n", $i, $i)) + ; + + foreach ($trait->getNode('targets') as $key => $value) { + $compiler + ->write(sprintf('if (!isset($_trait_%s_blocks[', $i)) + ->string($key) + ->raw("])) {\n") + ->indent() + ->write("throw new Twig_Error_Runtime(sprintf('Block ") + ->string($key) + ->raw(' is not defined in trait ') + ->subcompile($trait->getNode('template')) + ->raw(".'));\n") + ->outdent() + ->write("}\n\n") + + ->write(sprintf('$_trait_%s_blocks[', $i)) + ->subcompile($value) + ->raw(sprintf('] = $_trait_%s_blocks[', $i)) + ->string($key) + ->raw(sprintf(']; unset($_trait_%s_blocks[', $i)) + ->string($key) + ->raw("]);\n\n") + ; + } + } + + if ($countTraits > 1) { + $compiler + ->write("\$this->traits = array_merge(\n") + ->indent() + ; + + for ($i = 0; $i < $countTraits; ++$i) { + $compiler + ->write(sprintf('$_trait_%s_blocks'.($i == $countTraits - 1 ? '' : ',')."\n", $i)) + ; + } + + $compiler + ->outdent() + ->write(");\n\n") + ; + } else { + $compiler + ->write("\$this->traits = \$_trait_0_blocks;\n\n") + ; + } + + $compiler + ->write("\$this->blocks = array_merge(\n") + ->indent() + ->write("\$this->traits,\n") + ->write("array(\n") + ; + } else { + $compiler + ->write("\$this->blocks = array(\n") + ; + } + + // blocks + $compiler + ->indent() + ; + + foreach ($this->getNode('blocks') as $name => $node) { + $compiler + ->write(sprintf("'%s' => array(\$this, 'block_%s'),\n", $name, $name)) + ; + } + + if ($countTraits) { + $compiler + ->outdent() + ->write(")\n") + ; + } + + $compiler + ->outdent() + ->write(");\n") + ->outdent() + ->subcompile($this->getNode('constructor_end')) + ->write("}\n\n") + ; + } + + protected function compileDisplay(Twig_Compiler $compiler) + { + $compiler + ->write("protected function doDisplay(array \$context, array \$blocks = array())\n", "{\n") + ->indent() + ->subcompile($this->getNode('display_start')) + ->subcompile($this->getNode('body')) + ; + + if (null !== $parent = $this->getNode('parent')) { + $compiler->addDebugInfo($parent); + if ($parent instanceof Twig_Node_Expression_Constant) { + $compiler->write('$this->parent'); + } else { + $compiler->write('$this->getParent($context)'); + } + $compiler->raw("->display(\$context, array_merge(\$this->blocks, \$blocks));\n"); + } + + $compiler + ->subcompile($this->getNode('display_end')) + ->outdent() + ->write("}\n\n") + ; + } + + protected function compileClassFooter(Twig_Compiler $compiler) + { + $compiler + ->subcompile($this->getNode('class_end')) + ->outdent() + ->write("}\n") + ; + } + + protected function compileMacros(Twig_Compiler $compiler) + { + $compiler->subcompile($this->getNode('macros')); + } + + protected function compileGetTemplateName(Twig_Compiler $compiler) + { + $compiler + ->write("public function getTemplateName()\n", "{\n") + ->indent() + ->write('return ') + ->repr($this->getAttribute('filename')) + ->raw(";\n") + ->outdent() + ->write("}\n\n") + ; + } + + protected function compileIsTraitable(Twig_Compiler $compiler) + { + // A template can be used as a trait if: + // * it has no parent + // * it has no macros + // * it has no body + // + // Put another way, a template can be used as a trait if it + // only contains blocks and use statements. + $traitable = null === $this->getNode('parent') && 0 === count($this->getNode('macros')); + if ($traitable) { + if ($this->getNode('body') instanceof Twig_Node_Body) { + $nodes = $this->getNode('body')->getNode(0); + } else { + $nodes = $this->getNode('body'); + } + + if (!count($nodes)) { + $nodes = new Twig_Node(array($nodes)); + } + + foreach ($nodes as $node) { + if (!count($node)) { + continue; + } + + if ($node instanceof Twig_Node_Text && ctype_space($node->getAttribute('data'))) { + continue; + } + + if ($node instanceof Twig_Node_BlockReference) { + continue; + } + + $traitable = false; + break; + } + } + + if ($traitable) { + return; + } + + $compiler + ->write("public function isTraitable()\n", "{\n") + ->indent() + ->write(sprintf("return %s;\n", $traitable ? 'true' : 'false')) + ->outdent() + ->write("}\n\n") + ; + } + + protected function compileDebugInfo(Twig_Compiler $compiler) + { + $compiler + ->write("public function getDebugInfo()\n", "{\n") + ->indent() + ->write(sprintf("return %s;\n", str_replace("\n", '', var_export(array_reverse($compiler->getDebugInfo(), true), true)))) + ->outdent() + ->write("}\n") + ; + } + + protected function compileLoadTemplate(Twig_Compiler $compiler, $node, $var) + { + if ($node instanceof Twig_Node_Expression_Constant) { + $compiler + ->write(sprintf('%s = $this->loadTemplate(', $var)) + ->subcompile($node) + ->raw(', ') + ->repr($compiler->getFilename()) + ->raw(', ') + ->repr($node->getLine()) + ->raw(");\n") + ; + } else { + throw new LogicException('Trait templates can only be constant nodes'); + } + } +} diff --git a/Twig/Node/Print.php b/Twig/Node/Print.php new file mode 100644 index 0000000..4263536 --- /dev/null +++ b/Twig/Node/Print.php @@ -0,0 +1,39 @@ + + */ +class Twig_Node_Print extends Twig_Node implements Twig_NodeOutputInterface +{ + public function __construct(Twig_Node_Expression $expr, $lineno, $tag = null) + { + parent::__construct(array('expr' => $expr), array(), $lineno, $tag); + } + + /** + * Compiles the node to PHP. + * + * @param Twig_Compiler $compiler A Twig_Compiler instance + */ + public function compile(Twig_Compiler $compiler) + { + $compiler + ->addDebugInfo($this) + ->write('echo ') + ->subcompile($this->getNode('expr')) + ->raw(";\n") + ; + } +} diff --git a/Twig/Node/Sandbox.php b/Twig/Node/Sandbox.php new file mode 100644 index 0000000..8ca772b --- /dev/null +++ b/Twig/Node/Sandbox.php @@ -0,0 +1,47 @@ + + */ +class Twig_Node_Sandbox extends Twig_Node +{ + public function __construct(Twig_NodeInterface $body, $lineno, $tag = null) + { + parent::__construct(array('body' => $body), array(), $lineno, $tag); + } + + /** + * Compiles the node to PHP. + * + * @param Twig_Compiler $compiler A Twig_Compiler instance + */ + public function compile(Twig_Compiler $compiler) + { + $compiler + ->addDebugInfo($this) + ->write("\$sandbox = \$this->env->getExtension('sandbox');\n") + ->write("if (!\$alreadySandboxed = \$sandbox->isSandboxed()) {\n") + ->indent() + ->write("\$sandbox->enableSandbox();\n") + ->outdent() + ->write("}\n") + ->subcompile($this->getNode('body')) + ->write("if (!\$alreadySandboxed) {\n") + ->indent() + ->write("\$sandbox->disableSandbox();\n") + ->outdent() + ->write("}\n") + ; + } +} diff --git a/Twig/Node/SandboxedPrint.php b/Twig/Node/SandboxedPrint.php new file mode 100644 index 0000000..823e7ac --- /dev/null +++ b/Twig/Node/SandboxedPrint.php @@ -0,0 +1,61 @@ + + */ +class Twig_Node_SandboxedPrint extends Twig_Node_Print +{ + public function __construct(Twig_Node_Expression $expr, $lineno, $tag = null) + { + parent::__construct($expr, $lineno, $tag); + } + + /** + * Compiles the node to PHP. + * + * @param Twig_Compiler $compiler A Twig_Compiler instance + */ + public function compile(Twig_Compiler $compiler) + { + $compiler + ->addDebugInfo($this) + ->write('echo $this->env->getExtension(\'sandbox\')->ensureToStringAllowed(') + ->subcompile($this->getNode('expr')) + ->raw(");\n") + ; + } + + /** + * Removes node filters. + * + * This is mostly needed when another visitor adds filters (like the escaper one). + * + * @param Twig_Node $node A Node + * + * @return Twig_Node + */ + protected function removeNodeFilter($node) + { + if ($node instanceof Twig_Node_Expression_Filter) { + return $this->removeNodeFilter($node->getNode('node')); + } + + return $node; + } +} diff --git a/Twig/Node/Set.php b/Twig/Node/Set.php new file mode 100644 index 0000000..407d147 --- /dev/null +++ b/Twig/Node/Set.php @@ -0,0 +1,101 @@ + + */ +class Twig_Node_Set extends Twig_Node +{ + public function __construct($capture, Twig_NodeInterface $names, Twig_NodeInterface $values, $lineno, $tag = null) + { + parent::__construct(array('names' => $names, 'values' => $values), array('capture' => $capture, 'safe' => false), $lineno, $tag); + + /* + * Optimizes the node when capture is used for a large block of text. + * + * {% set foo %}foo{% endset %} is compiled to $context['foo'] = new Twig_Markup("foo"); + */ + if ($this->getAttribute('capture')) { + $this->setAttribute('safe', true); + + $values = $this->getNode('values'); + if ($values instanceof Twig_Node_Text) { + $this->setNode('values', new Twig_Node_Expression_Constant($values->getAttribute('data'), $values->getLine())); + $this->setAttribute('capture', false); + } + } + } + + /** + * Compiles the node to PHP. + * + * @param Twig_Compiler $compiler A Twig_Compiler instance + */ + public function compile(Twig_Compiler $compiler) + { + $compiler->addDebugInfo($this); + + if (count($this->getNode('names')) > 1) { + $compiler->write('list('); + foreach ($this->getNode('names') as $idx => $node) { + if ($idx) { + $compiler->raw(', '); + } + + $compiler->subcompile($node); + } + $compiler->raw(')'); + } else { + if ($this->getAttribute('capture')) { + $compiler + ->write("ob_start();\n") + ->subcompile($this->getNode('values')) + ; + } + + $compiler->subcompile($this->getNode('names'), false); + + if ($this->getAttribute('capture')) { + $compiler->raw(" = ('' === \$tmp = ob_get_clean()) ? '' : new Twig_Markup(\$tmp, \$this->env->getCharset())"); + } + } + + if (!$this->getAttribute('capture')) { + $compiler->raw(' = '); + + if (count($this->getNode('names')) > 1) { + $compiler->write('array('); + foreach ($this->getNode('values') as $idx => $value) { + if ($idx) { + $compiler->raw(', '); + } + + $compiler->subcompile($value); + } + $compiler->raw(')'); + } else { + if ($this->getAttribute('safe')) { + $compiler + ->raw("('' === \$tmp = ") + ->subcompile($this->getNode('values')) + ->raw(") ? '' : new Twig_Markup(\$tmp, \$this->env->getCharset())") + ; + } else { + $compiler->subcompile($this->getNode('values')); + } + } + } + + $compiler->raw(";\n"); + } +} diff --git a/Twig/Node/SetTemp.php b/Twig/Node/SetTemp.php new file mode 100644 index 0000000..3bdd1cb --- /dev/null +++ b/Twig/Node/SetTemp.php @@ -0,0 +1,35 @@ + $name), $lineno); + } + + public function compile(Twig_Compiler $compiler) + { + $name = $this->getAttribute('name'); + $compiler + ->addDebugInfo($this) + ->write('if (isset($context[') + ->string($name) + ->raw('])) { $_') + ->raw($name) + ->raw('_ = $context[') + ->repr($name) + ->raw(']; } else { $_') + ->raw($name) + ->raw("_ = null; }\n") + ; + } +} diff --git a/Twig/Node/Spaceless.php b/Twig/Node/Spaceless.php new file mode 100644 index 0000000..1478c59 --- /dev/null +++ b/Twig/Node/Spaceless.php @@ -0,0 +1,40 @@ + + */ +class Twig_Node_Spaceless extends Twig_Node +{ + public function __construct(Twig_NodeInterface $body, $lineno, $tag = 'spaceless') + { + parent::__construct(array('body' => $body), array(), $lineno, $tag); + } + + /** + * Compiles the node to PHP. + * + * @param Twig_Compiler $compiler A Twig_Compiler instance + */ + public function compile(Twig_Compiler $compiler) + { + $compiler + ->addDebugInfo($this) + ->write("ob_start();\n") + ->subcompile($this->getNode('body')) + ->write("echo trim(preg_replace('/>\s+<', ob_get_clean()));\n") + ; + } +} diff --git a/Twig/Node/Text.php b/Twig/Node/Text.php new file mode 100644 index 0000000..6863604 --- /dev/null +++ b/Twig/Node/Text.php @@ -0,0 +1,39 @@ + + */ +class Twig_Node_Text extends Twig_Node implements Twig_NodeOutputInterface +{ + public function __construct($data, $lineno) + { + parent::__construct(array(), array('data' => $data), $lineno); + } + + /** + * Compiles the node to PHP. + * + * @param Twig_Compiler $compiler A Twig_Compiler instance + */ + public function compile(Twig_Compiler $compiler) + { + $compiler + ->addDebugInfo($this) + ->write('echo ') + ->string($this->getAttribute('data')) + ->raw(";\n") + ; + } +} diff --git a/Twig/NodeInterface.php b/Twig/NodeInterface.php new file mode 100644 index 0000000..8077349 --- /dev/null +++ b/Twig/NodeInterface.php @@ -0,0 +1,31 @@ + + * + * @deprecated since 1.12 (to be removed in 3.0) + */ +interface Twig_NodeInterface extends Countable, IteratorAggregate +{ + /** + * Compiles the node to PHP. + * + * @param Twig_Compiler $compiler A Twig_Compiler instance + */ + public function compile(Twig_Compiler $compiler); + + public function getLine(); + + public function getNodeTag(); +} diff --git a/Twig/NodeOutputInterface.php b/Twig/NodeOutputInterface.php new file mode 100644 index 0000000..22172c0 --- /dev/null +++ b/Twig/NodeOutputInterface.php @@ -0,0 +1,19 @@ + + */ +interface Twig_NodeOutputInterface +{ +} diff --git a/Twig/NodeTraverser.php b/Twig/NodeTraverser.php new file mode 100644 index 0000000..00f7b54 --- /dev/null +++ b/Twig/NodeTraverser.php @@ -0,0 +1,89 @@ + + */ +class Twig_NodeTraverser +{ + protected $env; + protected $visitors = array(); + + /** + * Constructor. + * + * @param Twig_Environment $env A Twig_Environment instance + * @param Twig_NodeVisitorInterface[] $visitors An array of Twig_NodeVisitorInterface instances + */ + public function __construct(Twig_Environment $env, array $visitors = array()) + { + $this->env = $env; + foreach ($visitors as $visitor) { + $this->addVisitor($visitor); + } + } + + /** + * Adds a visitor. + * + * @param Twig_NodeVisitorInterface $visitor A Twig_NodeVisitorInterface instance + */ + public function addVisitor(Twig_NodeVisitorInterface $visitor) + { + if (!isset($this->visitors[$visitor->getPriority()])) { + $this->visitors[$visitor->getPriority()] = array(); + } + + $this->visitors[$visitor->getPriority()][] = $visitor; + } + + /** + * Traverses a node and calls the registered visitors. + * + * @param Twig_NodeInterface $node A Twig_NodeInterface instance + * + * @return Twig_NodeInterface + */ + public function traverse(Twig_NodeInterface $node) + { + ksort($this->visitors); + foreach ($this->visitors as $visitors) { + foreach ($visitors as $visitor) { + $node = $this->traverseForVisitor($visitor, $node); + } + } + + return $node; + } + + protected function traverseForVisitor(Twig_NodeVisitorInterface $visitor, Twig_NodeInterface $node = null) + { + if (null === $node) { + return; + } + + $node = $visitor->enterNode($node, $this->env); + + foreach ($node as $k => $n) { + if (false !== $n = $this->traverseForVisitor($visitor, $n)) { + $node->setNode($k, $n); + } else { + $node->removeNode($k); + } + } + + return $visitor->leaveNode($node, $this->env); + } +} diff --git a/Twig/NodeVisitor/Escaper.php b/Twig/NodeVisitor/Escaper.php new file mode 100644 index 0000000..5c94977 --- /dev/null +++ b/Twig/NodeVisitor/Escaper.php @@ -0,0 +1,157 @@ + + */ +class Twig_NodeVisitor_Escaper extends Twig_BaseNodeVisitor +{ + protected $statusStack = array(); + protected $blocks = array(); + protected $safeAnalysis; + protected $traverser; + protected $defaultStrategy = false; + protected $safeVars = array(); + + public function __construct() + { + $this->safeAnalysis = new Twig_NodeVisitor_SafeAnalysis(); + } + + /** + * {@inheritdoc} + */ + protected function doEnterNode(Twig_Node $node, Twig_Environment $env) + { + if ($node instanceof Twig_Node_Module) { + if ($env->hasExtension('escaper') && $defaultStrategy = $env->getExtension('escaper')->getDefaultStrategy($node->getAttribute('filename'))) { + $this->defaultStrategy = $defaultStrategy; + } + $this->safeVars = array(); + } elseif ($node instanceof Twig_Node_AutoEscape) { + $this->statusStack[] = $node->getAttribute('value'); + } elseif ($node instanceof Twig_Node_Block) { + $this->statusStack[] = isset($this->blocks[$node->getAttribute('name')]) ? $this->blocks[$node->getAttribute('name')] : $this->needEscaping($env); + } elseif ($node instanceof Twig_Node_Import) { + $this->safeVars[] = $node->getNode('var')->getAttribute('name'); + } + + return $node; + } + + /** + * {@inheritdoc} + */ + protected function doLeaveNode(Twig_Node $node, Twig_Environment $env) + { + if ($node instanceof Twig_Node_Module) { + $this->defaultStrategy = false; + $this->safeVars = array(); + } elseif ($node instanceof Twig_Node_Expression_Filter) { + return $this->preEscapeFilterNode($node, $env); + } elseif ($node instanceof Twig_Node_Print) { + return $this->escapePrintNode($node, $env, $this->needEscaping($env)); + } + + if ($node instanceof Twig_Node_AutoEscape || $node instanceof Twig_Node_Block) { + array_pop($this->statusStack); + } elseif ($node instanceof Twig_Node_BlockReference) { + $this->blocks[$node->getAttribute('name')] = $this->needEscaping($env); + } + + return $node; + } + + protected function escapePrintNode(Twig_Node_Print $node, Twig_Environment $env, $type) + { + if (false === $type) { + return $node; + } + + $expression = $node->getNode('expr'); + + if ($this->isSafeFor($type, $expression, $env)) { + return $node; + } + + $class = get_class($node); + + return new $class( + $this->getEscaperFilter($type, $expression), + $node->getLine() + ); + } + + protected function preEscapeFilterNode(Twig_Node_Expression_Filter $filter, Twig_Environment $env) + { + $name = $filter->getNode('filter')->getAttribute('value'); + + $type = $env->getFilter($name)->getPreEscape(); + if (null === $type) { + return $filter; + } + + $node = $filter->getNode('node'); + if ($this->isSafeFor($type, $node, $env)) { + return $filter; + } + + $filter->setNode('node', $this->getEscaperFilter($type, $node)); + + return $filter; + } + + protected function isSafeFor($type, Twig_NodeInterface $expression, $env) + { + $safe = $this->safeAnalysis->getSafe($expression); + + if (null === $safe) { + if (null === $this->traverser) { + $this->traverser = new Twig_NodeTraverser($env, array($this->safeAnalysis)); + } + + $this->safeAnalysis->setSafeVars($this->safeVars); + + $this->traverser->traverse($expression); + $safe = $this->safeAnalysis->getSafe($expression); + } + + return in_array($type, $safe) || in_array('all', $safe); + } + + protected function needEscaping(Twig_Environment $env) + { + if (count($this->statusStack)) { + return $this->statusStack[count($this->statusStack) - 1]; + } + + return $this->defaultStrategy ? $this->defaultStrategy : false; + } + + protected function getEscaperFilter($type, Twig_NodeInterface $node) + { + $line = $node->getLine(); + $name = new Twig_Node_Expression_Constant('escape', $line); + $args = new Twig_Node(array(new Twig_Node_Expression_Constant((string) $type, $line), new Twig_Node_Expression_Constant(null, $line), new Twig_Node_Expression_Constant(true, $line))); + + return new Twig_Node_Expression_Filter($node, $name, $args, $line); + } + + /** + * {@inheritdoc} + */ + public function getPriority() + { + return 0; + } +} diff --git a/Twig/NodeVisitor/Optimizer.php b/Twig/NodeVisitor/Optimizer.php new file mode 100644 index 0000000..872b7fe --- /dev/null +++ b/Twig/NodeVisitor/Optimizer.php @@ -0,0 +1,271 @@ + + */ +class Twig_NodeVisitor_Optimizer extends Twig_BaseNodeVisitor +{ + const OPTIMIZE_ALL = -1; + const OPTIMIZE_NONE = 0; + const OPTIMIZE_FOR = 2; + const OPTIMIZE_RAW_FILTER = 4; + const OPTIMIZE_VAR_ACCESS = 8; + + protected $loops = array(); + protected $loopsTargets = array(); + protected $optimizers; + protected $prependedNodes = array(); + protected $inABody = false; + + /** + * Constructor. + * + * @param int $optimizers The optimizer mode + */ + public function __construct($optimizers = -1) + { + if (!is_int($optimizers) || $optimizers > (self::OPTIMIZE_FOR | self::OPTIMIZE_RAW_FILTER | self::OPTIMIZE_VAR_ACCESS)) { + throw new InvalidArgumentException(sprintf('Optimizer mode "%s" is not valid.', $optimizers)); + } + + $this->optimizers = $optimizers; + } + + /** + * {@inheritdoc} + */ + protected function doEnterNode(Twig_Node $node, Twig_Environment $env) + { + if (self::OPTIMIZE_FOR === (self::OPTIMIZE_FOR & $this->optimizers)) { + $this->enterOptimizeFor($node, $env); + } + + if (PHP_VERSION_ID < 50400 && self::OPTIMIZE_VAR_ACCESS === (self::OPTIMIZE_VAR_ACCESS & $this->optimizers) && !$env->isStrictVariables() && !$env->hasExtension('sandbox')) { + if ($this->inABody) { + if (!$node instanceof Twig_Node_Expression) { + if (get_class($node) !== 'Twig_Node') { + array_unshift($this->prependedNodes, array()); + } + } else { + $node = $this->optimizeVariables($node, $env); + } + } elseif ($node instanceof Twig_Node_Body) { + $this->inABody = true; + } + } + + return $node; + } + + /** + * {@inheritdoc} + */ + protected function doLeaveNode(Twig_Node $node, Twig_Environment $env) + { + $expression = $node instanceof Twig_Node_Expression; + + if (self::OPTIMIZE_FOR === (self::OPTIMIZE_FOR & $this->optimizers)) { + $this->leaveOptimizeFor($node, $env); + } + + if (self::OPTIMIZE_RAW_FILTER === (self::OPTIMIZE_RAW_FILTER & $this->optimizers)) { + $node = $this->optimizeRawFilter($node, $env); + } + + $node = $this->optimizePrintNode($node, $env); + + if (self::OPTIMIZE_VAR_ACCESS === (self::OPTIMIZE_VAR_ACCESS & $this->optimizers) && !$env->isStrictVariables() && !$env->hasExtension('sandbox')) { + if ($node instanceof Twig_Node_Body) { + $this->inABody = false; + } elseif ($this->inABody) { + if (!$expression && get_class($node) !== 'Twig_Node' && $prependedNodes = array_shift($this->prependedNodes)) { + $nodes = array(); + foreach (array_unique($prependedNodes) as $name) { + $nodes[] = new Twig_Node_SetTemp($name, $node->getLine()); + } + + $nodes[] = $node; + $node = new Twig_Node($nodes); + } + } + } + + return $node; + } + + protected function optimizeVariables(Twig_NodeInterface $node, Twig_Environment $env) + { + if ('Twig_Node_Expression_Name' === get_class($node) && $node->isSimple()) { + $this->prependedNodes[0][] = $node->getAttribute('name'); + + return new Twig_Node_Expression_TempName($node->getAttribute('name'), $node->getLine()); + } + + return $node; + } + + /** + * Optimizes print nodes. + * + * It replaces: + * + * * "echo $this->render(Parent)Block()" with "$this->display(Parent)Block()" + * + * @param Twig_NodeInterface $node A Node + * @param Twig_Environment $env The current Twig environment + * + * @return Twig_NodeInterface + */ + protected function optimizePrintNode(Twig_NodeInterface $node, Twig_Environment $env) + { + if (!$node instanceof Twig_Node_Print) { + return $node; + } + + if ( + $node->getNode('expr') instanceof Twig_Node_Expression_BlockReference || + $node->getNode('expr') instanceof Twig_Node_Expression_Parent + ) { + $node->getNode('expr')->setAttribute('output', true); + + return $node->getNode('expr'); + } + + return $node; + } + + /** + * Removes "raw" filters. + * + * @param Twig_NodeInterface $node A Node + * @param Twig_Environment $env The current Twig environment + * + * @return Twig_NodeInterface + */ + protected function optimizeRawFilter(Twig_NodeInterface $node, Twig_Environment $env) + { + if ($node instanceof Twig_Node_Expression_Filter && 'raw' == $node->getNode('filter')->getAttribute('value')) { + return $node->getNode('node'); + } + + return $node; + } + + /** + * Optimizes "for" tag by removing the "loop" variable creation whenever possible. + * + * @param Twig_NodeInterface $node A Node + * @param Twig_Environment $env The current Twig environment + */ + protected function enterOptimizeFor(Twig_NodeInterface $node, Twig_Environment $env) + { + if ($node instanceof Twig_Node_For) { + // disable the loop variable by default + $node->setAttribute('with_loop', false); + array_unshift($this->loops, $node); + array_unshift($this->loopsTargets, $node->getNode('value_target')->getAttribute('name')); + array_unshift($this->loopsTargets, $node->getNode('key_target')->getAttribute('name')); + } elseif (!$this->loops) { + // we are outside a loop + return; + } + + // when do we need to add the loop variable back? + + // the loop variable is referenced for the current loop + elseif ($node instanceof Twig_Node_Expression_Name && 'loop' === $node->getAttribute('name')) { + $node->setAttribute('always_defined', true); + $this->addLoopToCurrent(); + } + + // optimize access to loop targets + elseif ($node instanceof Twig_Node_Expression_Name && in_array($node->getAttribute('name'), $this->loopsTargets)) { + $node->setAttribute('always_defined', true); + } + + // block reference + elseif ($node instanceof Twig_Node_BlockReference || $node instanceof Twig_Node_Expression_BlockReference) { + $this->addLoopToCurrent(); + } + + // include without the only attribute + elseif ($node instanceof Twig_Node_Include && !$node->getAttribute('only')) { + $this->addLoopToAll(); + } + + // include function without the with_context=false parameter + elseif ($node instanceof Twig_Node_Expression_Function + && 'include' === $node->getAttribute('name') + && (!$node->getNode('arguments')->hasNode('with_context') + || false !== $node->getNode('arguments')->getNode('with_context')->getAttribute('value') + ) + ) { + $this->addLoopToAll(); + } + + // the loop variable is referenced via an attribute + elseif ($node instanceof Twig_Node_Expression_GetAttr + && (!$node->getNode('attribute') instanceof Twig_Node_Expression_Constant + || 'parent' === $node->getNode('attribute')->getAttribute('value') + ) + && (true === $this->loops[0]->getAttribute('with_loop') + || ($node->getNode('node') instanceof Twig_Node_Expression_Name + && 'loop' === $node->getNode('node')->getAttribute('name') + ) + ) + ) { + $this->addLoopToAll(); + } + } + + /** + * Optimizes "for" tag by removing the "loop" variable creation whenever possible. + * + * @param Twig_NodeInterface $node A Node + * @param Twig_Environment $env The current Twig environment + */ + protected function leaveOptimizeFor(Twig_NodeInterface $node, Twig_Environment $env) + { + if ($node instanceof Twig_Node_For) { + array_shift($this->loops); + array_shift($this->loopsTargets); + array_shift($this->loopsTargets); + } + } + + protected function addLoopToCurrent() + { + $this->loops[0]->setAttribute('with_loop', true); + } + + protected function addLoopToAll() + { + foreach ($this->loops as $loop) { + $loop->setAttribute('with_loop', true); + } + } + + /** + * {@inheritdoc} + */ + public function getPriority() + { + return 255; + } +} diff --git a/Twig/NodeVisitor/SafeAnalysis.php b/Twig/NodeVisitor/SafeAnalysis.php new file mode 100644 index 0000000..439f5bf --- /dev/null +++ b/Twig/NodeVisitor/SafeAnalysis.php @@ -0,0 +1,154 @@ +safeVars = $safeVars; + } + + public function getSafe(Twig_NodeInterface $node) + { + $hash = spl_object_hash($node); + if (!isset($this->data[$hash])) { + return; + } + + foreach ($this->data[$hash] as $bucket) { + if ($bucket['key'] !== $node) { + continue; + } + + if (in_array('html_attr', $bucket['value'])) { + $bucket['value'][] = 'html'; + } + + return $bucket['value']; + } + } + + protected function setSafe(Twig_NodeInterface $node, array $safe) + { + $hash = spl_object_hash($node); + if (isset($this->data[$hash])) { + foreach ($this->data[$hash] as &$bucket) { + if ($bucket['key'] === $node) { + $bucket['value'] = $safe; + + return; + } + } + } + $this->data[$hash][] = array( + 'key' => $node, + 'value' => $safe, + ); + } + + /** + * {@inheritdoc} + */ + protected function doEnterNode(Twig_Node $node, Twig_Environment $env) + { + return $node; + } + + /** + * {@inheritdoc} + */ + protected function doLeaveNode(Twig_Node $node, Twig_Environment $env) + { + if ($node instanceof Twig_Node_Expression_Constant) { + // constants are marked safe for all + $this->setSafe($node, array('all')); + } elseif ($node instanceof Twig_Node_Expression_BlockReference) { + // blocks are safe by definition + $this->setSafe($node, array('all')); + } elseif ($node instanceof Twig_Node_Expression_Parent) { + // parent block is safe by definition + $this->setSafe($node, array('all')); + } elseif ($node instanceof Twig_Node_Expression_Conditional) { + // intersect safeness of both operands + $safe = $this->intersectSafe($this->getSafe($node->getNode('expr2')), $this->getSafe($node->getNode('expr3'))); + $this->setSafe($node, $safe); + } elseif ($node instanceof Twig_Node_Expression_Filter) { + // filter expression is safe when the filter is safe + $name = $node->getNode('filter')->getAttribute('value'); + $args = $node->getNode('arguments'); + if (false !== $filter = $env->getFilter($name)) { + $safe = $filter->getSafe($args); + if (null === $safe) { + $safe = $this->intersectSafe($this->getSafe($node->getNode('node')), $filter->getPreservesSafety()); + } + $this->setSafe($node, $safe); + } else { + $this->setSafe($node, array()); + } + } elseif ($node instanceof Twig_Node_Expression_Function) { + // function expression is safe when the function is safe + $name = $node->getAttribute('name'); + $args = $node->getNode('arguments'); + $function = $env->getFunction($name); + if (false !== $function) { + $this->setSafe($node, $function->getSafe($args)); + } else { + $this->setSafe($node, array()); + } + } elseif ($node instanceof Twig_Node_Expression_MethodCall) { + if ($node->getAttribute('safe')) { + $this->setSafe($node, array('all')); + } else { + $this->setSafe($node, array()); + } + } elseif ($node instanceof Twig_Node_Expression_GetAttr && $node->getNode('node') instanceof Twig_Node_Expression_Name) { + $name = $node->getNode('node')->getAttribute('name'); + // attributes on template instances are safe + if ('_self' == $name || in_array($name, $this->safeVars)) { + $this->setSafe($node, array('all')); + } else { + $this->setSafe($node, array()); + } + } else { + $this->setSafe($node, array()); + } + + return $node; + } + + protected function intersectSafe(array $a = null, array $b = null) + { + if (null === $a || null === $b) { + return array(); + } + + if (in_array('all', $a)) { + return $b; + } + + if (in_array('all', $b)) { + return $a; + } + + return array_intersect($a, $b); + } + + /** + * {@inheritdoc} + */ + public function getPriority() + { + return 0; + } +} diff --git a/Twig/NodeVisitor/Sandbox.php b/Twig/NodeVisitor/Sandbox.php new file mode 100644 index 0000000..7f1b913 --- /dev/null +++ b/Twig/NodeVisitor/Sandbox.php @@ -0,0 +1,82 @@ + + */ +class Twig_NodeVisitor_Sandbox extends Twig_BaseNodeVisitor +{ + protected $inAModule = false; + protected $tags; + protected $filters; + protected $functions; + + /** + * {@inheritdoc} + */ + protected function doEnterNode(Twig_Node $node, Twig_Environment $env) + { + if ($node instanceof Twig_Node_Module) { + $this->inAModule = true; + $this->tags = array(); + $this->filters = array(); + $this->functions = array(); + + return $node; + } elseif ($this->inAModule) { + // look for tags + if ($node->getNodeTag() && !isset($this->tags[$node->getNodeTag()])) { + $this->tags[$node->getNodeTag()] = $node; + } + + // look for filters + if ($node instanceof Twig_Node_Expression_Filter && !isset($this->filters[$node->getNode('filter')->getAttribute('value')])) { + $this->filters[$node->getNode('filter')->getAttribute('value')] = $node; + } + + // look for functions + if ($node instanceof Twig_Node_Expression_Function && !isset($this->functions[$node->getAttribute('name')])) { + $this->functions[$node->getAttribute('name')] = $node; + } + + // wrap print to check __toString() calls + if ($node instanceof Twig_Node_Print) { + return new Twig_Node_SandboxedPrint($node->getNode('expr'), $node->getLine(), $node->getNodeTag()); + } + } + + return $node; + } + + /** + * {@inheritdoc} + */ + protected function doLeaveNode(Twig_Node $node, Twig_Environment $env) + { + if ($node instanceof Twig_Node_Module) { + $this->inAModule = false; + + $node->setNode('display_start', new Twig_Node(array(new Twig_Node_CheckSecurity($this->filters, $this->tags, $this->functions), $node->getNode('display_start')))); + } + + return $node; + } + + /** + * {@inheritdoc} + */ + public function getPriority() + { + return 0; + } +} diff --git a/Twig/NodeVisitorInterface.php b/Twig/NodeVisitorInterface.php new file mode 100644 index 0000000..f276163 --- /dev/null +++ b/Twig/NodeVisitorInterface.php @@ -0,0 +1,47 @@ + + */ +interface Twig_NodeVisitorInterface +{ + /** + * Called before child nodes are visited. + * + * @param Twig_NodeInterface $node The node to visit + * @param Twig_Environment $env The Twig environment instance + * + * @return Twig_NodeInterface The modified node + */ + public function enterNode(Twig_NodeInterface $node, Twig_Environment $env); + + /** + * Called after child nodes are visited. + * + * @param Twig_NodeInterface $node The node to visit + * @param Twig_Environment $env The Twig environment instance + * + * @return Twig_NodeInterface|false The modified node or false if the node must be removed + */ + public function leaveNode(Twig_NodeInterface $node, Twig_Environment $env); + + /** + * Returns the priority for this visitor. + * + * Priority should be between -10 and 10 (0 is the default). + * + * @return int The priority level + */ + public function getPriority(); +} diff --git a/Twig/Parser.php b/Twig/Parser.php new file mode 100644 index 0000000..6f24ee6 --- /dev/null +++ b/Twig/Parser.php @@ -0,0 +1,399 @@ + + */ +class Twig_Parser implements Twig_ParserInterface +{ + protected $stack = array(); + protected $stream; + protected $parent; + protected $handlers; + protected $visitors; + protected $expressionParser; + protected $blocks; + protected $blockStack; + protected $macros; + protected $env; + protected $reservedMacroNames; + protected $importedSymbols; + protected $traits; + protected $embeddedTemplates = array(); + + /** + * Constructor. + * + * @param Twig_Environment $env A Twig_Environment instance + */ + public function __construct(Twig_Environment $env) + { + $this->env = $env; + } + + public function getEnvironment() + { + return $this->env; + } + + public function getVarName() + { + return sprintf('__internal_%s', hash('sha256', uniqid(mt_rand(), true), false)); + } + + public function getFilename() + { + return $this->stream->getFilename(); + } + + /** + * {@inheritdoc} + */ + public function parse(Twig_TokenStream $stream, $test = null, $dropNeedle = false) + { + // push all variables into the stack to keep the current state of the parser + $vars = get_object_vars($this); + unset($vars['stack'], $vars['env'], $vars['handlers'], $vars['visitors'], $vars['expressionParser'], $vars['reservedMacroNames']); + $this->stack[] = $vars; + + // tag handlers + if (null === $this->handlers) { + $this->handlers = $this->env->getTokenParsers(); + $this->handlers->setParser($this); + } + + // node visitors + if (null === $this->visitors) { + $this->visitors = $this->env->getNodeVisitors(); + } + + if (null === $this->expressionParser) { + $this->expressionParser = new Twig_ExpressionParser($this, $this->env->getUnaryOperators(), $this->env->getBinaryOperators()); + } + + $this->stream = $stream; + $this->parent = null; + $this->blocks = array(); + $this->macros = array(); + $this->traits = array(); + $this->blockStack = array(); + $this->importedSymbols = array(array()); + $this->embeddedTemplates = array(); + + try { + $body = $this->subparse($test, $dropNeedle); + + if (null !== $this->parent) { + if (null === $body = $this->filterBodyNodes($body)) { + $body = new Twig_Node(); + } + } + } catch (Twig_Error_Syntax $e) { + if (!$e->getTemplateFile()) { + $e->setTemplateFile($this->getFilename()); + } + + if (!$e->getTemplateLine()) { + $e->setTemplateLine($this->stream->getCurrent()->getLine()); + } + + throw $e; + } + + $node = new Twig_Node_Module(new Twig_Node_Body(array($body)), $this->parent, new Twig_Node($this->blocks), new Twig_Node($this->macros), new Twig_Node($this->traits), $this->embeddedTemplates, $this->getFilename()); + + $traverser = new Twig_NodeTraverser($this->env, $this->visitors); + + $node = $traverser->traverse($node); + + // restore previous stack so previous parse() call can resume working + foreach (array_pop($this->stack) as $key => $val) { + $this->$key = $val; + } + + return $node; + } + + public function subparse($test, $dropNeedle = false) + { + $lineno = $this->getCurrentToken()->getLine(); + $rv = array(); + while (!$this->stream->isEOF()) { + switch ($this->getCurrentToken()->getType()) { + case Twig_Token::TEXT_TYPE: + $token = $this->stream->next(); + $rv[] = new Twig_Node_Text($token->getValue(), $token->getLine()); + break; + + case Twig_Token::VAR_START_TYPE: + $token = $this->stream->next(); + $expr = $this->expressionParser->parseExpression(); + $this->stream->expect(Twig_Token::VAR_END_TYPE); + $rv[] = new Twig_Node_Print($expr, $token->getLine()); + break; + + case Twig_Token::BLOCK_START_TYPE: + $this->stream->next(); + $token = $this->getCurrentToken(); + + if ($token->getType() !== Twig_Token::NAME_TYPE) { + throw new Twig_Error_Syntax('A block must start with a tag name', $token->getLine(), $this->getFilename()); + } + + if (null !== $test && call_user_func($test, $token)) { + if ($dropNeedle) { + $this->stream->next(); + } + + if (1 === count($rv)) { + return $rv[0]; + } + + return new Twig_Node($rv, array(), $lineno); + } + + $subparser = $this->handlers->getTokenParser($token->getValue()); + if (null === $subparser) { + if (null !== $test) { + $error = sprintf('Unexpected tag name "%s"', $token->getValue()); + if (is_array($test) && isset($test[0]) && $test[0] instanceof Twig_TokenParserInterface) { + $error .= sprintf(' (expecting closing tag for the "%s" tag defined near line %s)', $test[0]->getTag(), $lineno); + } + + throw new Twig_Error_Syntax($error, $token->getLine(), $this->getFilename()); + } + + $message = sprintf('Unknown tag name "%s"', $token->getValue()); + if ($alternatives = $this->env->computeAlternatives($token->getValue(), array_keys($this->env->getTags()))) { + $message = sprintf('%s. Did you mean "%s"', $message, implode('", "', $alternatives)); + } + + throw new Twig_Error_Syntax($message, $token->getLine(), $this->getFilename()); + } + + $this->stream->next(); + + $node = $subparser->parse($token); + if (null !== $node) { + $rv[] = $node; + } + break; + + default: + throw new Twig_Error_Syntax('Lexer or parser ended up in unsupported state.', 0, $this->getFilename()); + } + } + + if (1 === count($rv)) { + return $rv[0]; + } + + return new Twig_Node($rv, array(), $lineno); + } + + public function addHandler($name, $class) + { + $this->handlers[$name] = $class; + } + + public function addNodeVisitor(Twig_NodeVisitorInterface $visitor) + { + $this->visitors[] = $visitor; + } + + public function getBlockStack() + { + return $this->blockStack; + } + + public function peekBlockStack() + { + return $this->blockStack[count($this->blockStack) - 1]; + } + + public function popBlockStack() + { + array_pop($this->blockStack); + } + + public function pushBlockStack($name) + { + $this->blockStack[] = $name; + } + + public function hasBlock($name) + { + return isset($this->blocks[$name]); + } + + public function getBlock($name) + { + return $this->blocks[$name]; + } + + public function setBlock($name, Twig_Node_Block $value) + { + $this->blocks[$name] = new Twig_Node_Body(array($value), array(), $value->getLine()); + } + + public function hasMacro($name) + { + return isset($this->macros[$name]); + } + + public function setMacro($name, Twig_Node_Macro $node) + { + if ($this->isReservedMacroName($name)) { + throw new Twig_Error_Syntax(sprintf('"%s" cannot be used as a macro name as it is a reserved keyword', $name), $node->getLine(), $this->getFilename()); + } + + $this->macros[$name] = $node; + } + + public function isReservedMacroName($name) + { + if (null === $this->reservedMacroNames) { + $this->reservedMacroNames = array(); + $r = new ReflectionClass($this->env->getBaseTemplateClass()); + foreach ($r->getMethods() as $method) { + $methodName = strtolower($method->getName()); + + if ('get' === substr($methodName, 0, 3) && isset($methodName[3])) { + $this->reservedMacroNames[] = substr($methodName, 3); + } + } + } + + return in_array(strtolower($name), $this->reservedMacroNames); + } + + public function addTrait($trait) + { + $this->traits[] = $trait; + } + + public function hasTraits() + { + return count($this->traits) > 0; + } + + public function embedTemplate(Twig_Node_Module $template) + { + $template->setIndex(mt_rand()); + + $this->embeddedTemplates[] = $template; + } + + public function addImportedSymbol($type, $alias, $name = null, Twig_Node_Expression $node = null) + { + $this->importedSymbols[0][$type][$alias] = array('name' => $name, 'node' => $node); + } + + public function getImportedSymbol($type, $alias) + { + foreach ($this->importedSymbols as $functions) { + if (isset($functions[$type][$alias])) { + return $functions[$type][$alias]; + } + } + } + + public function isMainScope() + { + return 1 === count($this->importedSymbols); + } + + public function pushLocalScope() + { + array_unshift($this->importedSymbols, array()); + } + + public function popLocalScope() + { + array_shift($this->importedSymbols); + } + + /** + * Gets the expression parser. + * + * @return Twig_ExpressionParser The expression parser + */ + public function getExpressionParser() + { + return $this->expressionParser; + } + + public function getParent() + { + return $this->parent; + } + + public function setParent($parent) + { + $this->parent = $parent; + } + + /** + * Gets the token stream. + * + * @return Twig_TokenStream The token stream + */ + public function getStream() + { + return $this->stream; + } + + /** + * Gets the current token. + * + * @return Twig_Token The current token + */ + public function getCurrentToken() + { + return $this->stream->getCurrent(); + } + + protected function filterBodyNodes(Twig_NodeInterface $node) + { + // check that the body does not contain non-empty output nodes + if ( + ($node instanceof Twig_Node_Text && !ctype_space($node->getAttribute('data'))) + || + (!$node instanceof Twig_Node_Text && !$node instanceof Twig_Node_BlockReference && $node instanceof Twig_NodeOutputInterface) + ) { + if (false !== strpos((string) $node, chr(0xEF).chr(0xBB).chr(0xBF))) { + throw new Twig_Error_Syntax('A template that extends another one cannot have a body but a byte order mark (BOM) has been detected; it must be removed.', $node->getLine(), $this->getFilename()); + } + + throw new Twig_Error_Syntax('A template that extends another one cannot have a body.', $node->getLine(), $this->getFilename()); + } + + // bypass "set" nodes as they "capture" the output + if ($node instanceof Twig_Node_Set) { + return $node; + } + + if ($node instanceof Twig_NodeOutputInterface) { + return; + } + + foreach ($node as $k => $n) { + if (null !== $n && null === $this->filterBodyNodes($n)) { + $node->removeNode($k); + } + } + + return $node; + } +} diff --git a/Twig/ParserInterface.php b/Twig/ParserInterface.php new file mode 100644 index 0000000..8e7cc0a --- /dev/null +++ b/Twig/ParserInterface.php @@ -0,0 +1,31 @@ + + * + * @deprecated since 1.12 (to be removed in 3.0) + */ +interface Twig_ParserInterface +{ + /** + * Converts a token stream to a node tree. + * + * @param Twig_TokenStream $stream A token stream instance + * + * @return Twig_Node_Module A node tree + * + * @throws Twig_Error_Syntax When the token stream is syntactically or semantically wrong + */ + public function parse(Twig_TokenStream $stream); +} diff --git a/Twig/Profiler/Dumper/Blackfire.php b/Twig/Profiler/Dumper/Blackfire.php new file mode 100644 index 0000000..b82747a --- /dev/null +++ b/Twig/Profiler/Dumper/Blackfire.php @@ -0,0 +1,68 @@ + + */ +class Twig_Profiler_Dumper_Blackfire +{ + public function dump(Twig_Profiler_Profile $profile) + { + $data = array(); + $this->dumpProfile('main()', $profile, $data); + $this->dumpChildren('main()', $profile, $data); + + $start = microtime(true); + $str = << $values) { + $str .= "{$name}//{$values['ct']} {$values['wt']} {$values['mu']} {$values['pmu']}\n"; + } + + return $str; + } + + private function dumpChildren($parent, Twig_Profiler_Profile $profile, &$data) + { + foreach ($profile as $p) { + if ($p->isTemplate()) { + $name = $p->getTemplate(); + } else { + $name = sprintf('%s::%s(%s)', $p->getTemplate(), $p->getType(), $p->getName()); + } + $this->dumpProfile(sprintf('%s==>%s', $parent, $name), $p, $data); + $this->dumpChildren($name, $p, $data); + } + } + + private function dumpProfile($edge, Twig_Profiler_Profile $profile, &$data) + { + if (isset($data[$edge])) { + $data[$edge]['ct'] += 1; + $data[$edge]['wt'] += floor($profile->getDuration() * 1000000); + $data[$edge]['mu'] += $profile->getMemoryUsage(); + $data[$edge]['pmu'] += $profile->getPeakMemoryUsage(); + } else { + $data[$edge] = array( + 'ct' => 1, + 'wt' => floor($profile->getDuration() * 1000000), + 'mu' => $profile->getMemoryUsage(), + 'pmu' => $profile->getPeakMemoryUsage(), + ); + } + } +} diff --git a/Twig/Profiler/Dumper/Html.php b/Twig/Profiler/Dumper/Html.php new file mode 100644 index 0000000..f066da7 --- /dev/null +++ b/Twig/Profiler/Dumper/Html.php @@ -0,0 +1,43 @@ + + */ +class Twig_Profiler_Dumper_Html extends Twig_Profiler_Dumper_Text +{ + private static $colors = array( + 'block' => '#dfd', + 'macro' => '#ddf', + 'template' => '#ffd', + 'big' => '#d44', + ); + + public function dump(Twig_Profiler_Profile $profile) + { + return '
'.parent::dump($profile).'
'; + } + + protected function formatTemplate(Twig_Profiler_Profile $profile, $prefix) + { + return sprintf('%s└ %s', $prefix, self::$colors['template'], $profile->getTemplate()); + } + + protected function formatNonTemplate(Twig_Profiler_Profile $profile, $prefix) + { + return sprintf('%s└ %s::%s(%s)', $prefix, $profile->getTemplate(), $profile->getType(), isset(self::$colors[$profile->getType()]) ? self::$colors[$profile->getType()] : 'auto', $profile->getName()); + } + + protected function formatTime(Twig_Profiler_Profile $profile, $percent) + { + return sprintf('%.2fms/%.0f%%', $percent > 20 ? self::$colors['big'] : 'auto', $profile->getDuration() * 1000, $percent); + } +} diff --git a/Twig/Profiler/Dumper/Text.php b/Twig/Profiler/Dumper/Text.php new file mode 100644 index 0000000..998e210 --- /dev/null +++ b/Twig/Profiler/Dumper/Text.php @@ -0,0 +1,68 @@ + + */ +class Twig_Profiler_Dumper_Text +{ + private $root; + + public function dump(Twig_Profiler_Profile $profile) + { + return $this->dumpProfile($profile); + } + + protected function formatTemplate(Twig_Profiler_Profile $profile, $prefix) + { + return sprintf('%s└ %s', $prefix, $profile->getTemplate()); + } + + protected function formatNonTemplate(Twig_Profiler_Profile $profile, $prefix) + { + return sprintf('%s└ %s::%s(%s)', $prefix, $profile->getTemplate(), $profile->getType(), $profile->getName()); + } + + protected function formatTime(Twig_Profiler_Profile $profile, $percent) + { + return sprintf('%.2fms/%.0f%%', $profile->getDuration() * 1000, $percent); + } + + private function dumpProfile(Twig_Profiler_Profile $profile, $prefix = '', $sibling = false) + { + if ($profile->isRoot()) { + $this->root = $profile->getDuration(); + $start = $profile->getName(); + } else { + if ($profile->isTemplate()) { + $start = $this->formatTemplate($profile, $prefix); + } else { + $start = $this->formatNonTemplate($profile, $prefix); + } + $prefix .= $sibling ? '│ ' : ' '; + } + + $percent = $this->root ? $profile->getDuration() / $this->root * 100 : 0; + + if ($profile->getDuration() * 1000 < 1) { + $str = $start."\n"; + } else { + $str = sprintf("%s %s\n", $start, $this->formatTime($profile, $percent)); + } + + $nCount = count($profile->getProfiles()); + foreach ($profile as $i => $p) { + $str .= $this->dumpProfile($p, $prefix, $i + 1 !== $nCount); + } + + return $str; + } +} diff --git a/Twig/Profiler/Node/EnterProfile.php b/Twig/Profiler/Node/EnterProfile.php new file mode 100644 index 0000000..2f97214 --- /dev/null +++ b/Twig/Profiler/Node/EnterProfile.php @@ -0,0 +1,40 @@ + + */ +class Twig_Profiler_Node_EnterProfile extends Twig_Node +{ + public function __construct($extensionName, $type, $name, $varName) + { + parent::__construct(array(), array('extension_name' => $extensionName, 'name' => $name, 'type' => $type, 'var_name' => $varName)); + } + + /** + * {@inheritdoc} + */ + public function compile(Twig_Compiler $compiler) + { + $compiler + ->write(sprintf('$%s = $this->env->getExtension(', $this->getAttribute('var_name'))) + ->repr($this->getAttribute('extension_name')) + ->raw(");\n") + ->write(sprintf('$%s->enter($%s = new Twig_Profiler_Profile($this->getTemplateName(), ', $this->getAttribute('var_name'), $this->getAttribute('var_name').'_prof')) + ->repr($this->getAttribute('type')) + ->raw(', ') + ->repr($this->getAttribute('name')) + ->raw("));\n\n") + ; + } +} diff --git a/Twig/Profiler/Node/LeaveProfile.php b/Twig/Profiler/Node/LeaveProfile.php new file mode 100644 index 0000000..88074c2 --- /dev/null +++ b/Twig/Profiler/Node/LeaveProfile.php @@ -0,0 +1,34 @@ + + */ +class Twig_Profiler_Node_LeaveProfile extends Twig_Node +{ + public function __construct($varName) + { + parent::__construct(array(), array('var_name' => $varName)); + } + + /** + * {@inheritdoc} + */ + public function compile(Twig_Compiler $compiler) + { + $compiler + ->write("\n") + ->write(sprintf("\$%s->leave(\$%s);\n\n", $this->getAttribute('var_name'), $this->getAttribute('var_name').'_prof')) + ; + } +} diff --git a/Twig/Profiler/NodeVisitor/Profiler.php b/Twig/Profiler/NodeVisitor/Profiler.php new file mode 100644 index 0000000..4b0baa8 --- /dev/null +++ b/Twig/Profiler/NodeVisitor/Profiler.php @@ -0,0 +1,72 @@ + + */ +class Twig_Profiler_NodeVisitor_Profiler extends Twig_BaseNodeVisitor +{ + private $extensionName; + + public function __construct($extensionName) + { + $this->extensionName = $extensionName; + } + + /** + * {@inheritdoc} + */ + protected function doEnterNode(Twig_Node $node, Twig_Environment $env) + { + return $node; + } + + /** + * {@inheritdoc} + */ + protected function doLeaveNode(Twig_Node $node, Twig_Environment $env) + { + if ($node instanceof Twig_Node_Module) { + $varName = $this->getVarName(); + $node->setNode('display_start', new Twig_Node(array(new Twig_Profiler_Node_EnterProfile($this->extensionName, Twig_Profiler_Profile::TEMPLATE, $node->getAttribute('filename'), $varName), $node->getNode('display_start')))); + $node->setNode('display_end', new Twig_Node(array(new Twig_Profiler_Node_LeaveProfile($varName), $node->getNode('display_end')))); + } elseif ($node instanceof Twig_Node_Block) { + $varName = $this->getVarName(); + $node->setNode('body', new Twig_Node_Body(array( + new Twig_Profiler_Node_EnterProfile($this->extensionName, Twig_Profiler_Profile::BLOCK, $node->getAttribute('name'), $varName), + $node->getNode('body'), + new Twig_Profiler_Node_LeaveProfile($varName), + ))); + } elseif ($node instanceof Twig_Node_Macro) { + $varName = $this->getVarName(); + $node->setNode('body', new Twig_Node_Body(array( + new Twig_Profiler_Node_EnterProfile($this->extensionName, Twig_Profiler_Profile::MACRO, $node->getAttribute('name'), $varName), + $node->getNode('body'), + new Twig_Profiler_Node_LeaveProfile($varName), + ))); + } + + return $node; + } + + private function getVarName() + { + return sprintf('__internal_%s', hash('sha256', uniqid(mt_rand(), true), false)); + } + + /** + * {@inheritdoc} + */ + public function getPriority() + { + return 0; + } +} diff --git a/Twig/Profiler/Profile.php b/Twig/Profiler/Profile.php new file mode 100644 index 0000000..104bc05 --- /dev/null +++ b/Twig/Profiler/Profile.php @@ -0,0 +1,160 @@ + + */ +class Twig_Profiler_Profile implements IteratorAggregate, Serializable +{ + const ROOT = 'ROOT'; + const BLOCK = 'block'; + const TEMPLATE = 'template'; + const MACRO = 'macro'; + + private $template; + private $name; + private $type; + private $starts = array(); + private $ends = array(); + private $profiles = array(); + + public function __construct($template = 'main', $type = self::ROOT, $name = 'main') + { + $this->template = $template; + $this->type = $type; + $this->name = 0 === strpos($name, '__internal_') ? 'INTERNAL' : $name; + $this->enter(); + } + + public function getTemplate() + { + return $this->template; + } + + public function getType() + { + return $this->type; + } + + public function getName() + { + return $this->name; + } + + public function isRoot() + { + return self::ROOT === $this->type; + } + + public function isTemplate() + { + return self::TEMPLATE === $this->type; + } + + public function isBlock() + { + return self::BLOCK === $this->type; + } + + public function isMacro() + { + return self::MACRO === $this->type; + } + + public function getProfiles() + { + return $this->profiles; + } + + public function addProfile(Twig_Profiler_Profile $profile) + { + $this->profiles[] = $profile; + } + + /** + * Returns the duration in microseconds. + * + * @return int + */ + public function getDuration() + { + if ($this->isRoot() && $this->profiles) { + // for the root node with children, duration is the sum of all child durations + $duration = 0; + foreach ($this->profiles as $profile) { + $duration += $profile->getDuration(); + } + + return $duration; + } + + return isset($this->ends['wt']) && isset($this->starts['wt']) ? $this->ends['wt'] - $this->starts['wt'] : 0; + } + + /** + * Returns the memory usage in bytes. + * + * @return int + */ + public function getMemoryUsage() + { + return isset($this->ends['mu']) && isset($this->starts['mu']) ? $this->ends['mu'] - $this->starts['mu'] : 0; + } + + /** + * Returns the peak memory usage in bytes. + * + * @return int + */ + public function getPeakMemoryUsage() + { + return isset($this->ends['pmu']) && isset($this->starts['pmu']) ? $this->ends['pmu'] - $this->starts['pmu'] : 0; + } + + /** + * Starts the profiling. + */ + public function enter() + { + $this->starts = array( + 'wt' => microtime(true), + 'mu' => memory_get_usage(), + 'pmu' => memory_get_peak_usage(), + ); + } + + /** + * Stops the profiling. + */ + public function leave() + { + $this->ends = array( + 'wt' => microtime(true), + 'mu' => memory_get_usage(), + 'pmu' => memory_get_peak_usage(), + ); + } + + public function getIterator() + { + return new ArrayIterator($this->profiles); + } + + public function serialize() + { + return serialize(array($this->template, $this->name, $this->type, $this->starts, $this->ends, $this->profiles)); + } + + public function unserialize($data) + { + list($this->template, $this->name, $this->type, $this->starts, $this->ends, $this->profiles) = unserialize($data); + } +} diff --git a/Twig/Sandbox/SecurityError.php b/Twig/Sandbox/SecurityError.php new file mode 100644 index 0000000..015bfae --- /dev/null +++ b/Twig/Sandbox/SecurityError.php @@ -0,0 +1,19 @@ + + */ +class Twig_Sandbox_SecurityError extends Twig_Error +{ +} diff --git a/Twig/Sandbox/SecurityNotAllowedFilterError.php b/Twig/Sandbox/SecurityNotAllowedFilterError.php new file mode 100644 index 0000000..99faba9 --- /dev/null +++ b/Twig/Sandbox/SecurityNotAllowedFilterError.php @@ -0,0 +1,31 @@ + + */ +class Twig_Sandbox_SecurityNotAllowedFilterError extends Twig_Sandbox_SecurityError +{ + private $filterName; + + public function __construct($message, $functionName, $lineno = -1, $filename = null, Exception $previous = null) + { + parent::__construct($message, $lineno, $filename, $previous); + $this->filterName = $functionName; + } + + public function getFilterName() + { + return $this->filterName; + } +} diff --git a/Twig/Sandbox/SecurityNotAllowedFunctionError.php b/Twig/Sandbox/SecurityNotAllowedFunctionError.php new file mode 100644 index 0000000..05cf488 --- /dev/null +++ b/Twig/Sandbox/SecurityNotAllowedFunctionError.php @@ -0,0 +1,31 @@ + + */ +class Twig_Sandbox_SecurityNotAllowedFunctionError extends Twig_Sandbox_SecurityError +{ + private $functionName; + + public function __construct($message, $functionName, $lineno = -1, $filename = null, Exception $previous = null) + { + parent::__construct($message, $lineno, $filename, $previous); + $this->functionName = $functionName; + } + + public function getFunctionName() + { + return $this->functionName; + } +} diff --git a/Twig/Sandbox/SecurityNotAllowedTagError.php b/Twig/Sandbox/SecurityNotAllowedTagError.php new file mode 100644 index 0000000..b3bb5e8 --- /dev/null +++ b/Twig/Sandbox/SecurityNotAllowedTagError.php @@ -0,0 +1,31 @@ + + */ +class Twig_Sandbox_SecurityNotAllowedTagError extends Twig_Sandbox_SecurityError +{ + private $tagName; + + public function __construct($message, $tagName, $lineno = -1, $filename = null, Exception $previous = null) + { + parent::__construct($message, $lineno, $filename, $previous); + $this->tagName = $tagName; + } + + public function getTagName() + { + return $this->tagName; + } +} diff --git a/Twig/Sandbox/SecurityPolicy.php b/Twig/Sandbox/SecurityPolicy.php new file mode 100644 index 0000000..c4dd03d --- /dev/null +++ b/Twig/Sandbox/SecurityPolicy.php @@ -0,0 +1,119 @@ + + */ +class Twig_Sandbox_SecurityPolicy implements Twig_Sandbox_SecurityPolicyInterface +{ + protected $allowedTags; + protected $allowedFilters; + protected $allowedMethods; + protected $allowedProperties; + protected $allowedFunctions; + + public function __construct(array $allowedTags = array(), array $allowedFilters = array(), array $allowedMethods = array(), array $allowedProperties = array(), array $allowedFunctions = array()) + { + $this->allowedTags = $allowedTags; + $this->allowedFilters = $allowedFilters; + $this->setAllowedMethods($allowedMethods); + $this->allowedProperties = $allowedProperties; + $this->allowedFunctions = $allowedFunctions; + } + + public function setAllowedTags(array $tags) + { + $this->allowedTags = $tags; + } + + public function setAllowedFilters(array $filters) + { + $this->allowedFilters = $filters; + } + + public function setAllowedMethods(array $methods) + { + $this->allowedMethods = array(); + foreach ($methods as $class => $m) { + $this->allowedMethods[$class] = array_map('strtolower', is_array($m) ? $m : array($m)); + } + } + + public function setAllowedProperties(array $properties) + { + $this->allowedProperties = $properties; + } + + public function setAllowedFunctions(array $functions) + { + $this->allowedFunctions = $functions; + } + + public function checkSecurity($tags, $filters, $functions) + { + foreach ($tags as $tag) { + if (!in_array($tag, $this->allowedTags)) { + throw new Twig_Sandbox_SecurityNotAllowedTagError(sprintf('Tag "%s" is not allowed.', $tag), $tag); + } + } + + foreach ($filters as $filter) { + if (!in_array($filter, $this->allowedFilters)) { + throw new Twig_Sandbox_SecurityNotAllowedFilterError(sprintf('Filter "%s" is not allowed.', $filter), $filter); + } + } + + foreach ($functions as $function) { + if (!in_array($function, $this->allowedFunctions)) { + throw new Twig_Sandbox_SecurityNotAllowedFunctionError(sprintf('Function "%s" is not allowed.', $function), $function); + } + } + } + + public function checkMethodAllowed($obj, $method) + { + if ($obj instanceof Twig_TemplateInterface || $obj instanceof Twig_Markup) { + return true; + } + + $allowed = false; + $method = strtolower($method); + foreach ($this->allowedMethods as $class => $methods) { + if ($obj instanceof $class) { + $allowed = in_array($method, $methods); + + break; + } + } + + if (!$allowed) { + throw new Twig_Sandbox_SecurityError(sprintf('Calling "%s" method on a "%s" object is not allowed.', $method, get_class($obj))); + } + } + + public function checkPropertyAllowed($obj, $property) + { + $allowed = false; + foreach ($this->allowedProperties as $class => $properties) { + if ($obj instanceof $class) { + $allowed = in_array($property, is_array($properties) ? $properties : array($properties)); + + break; + } + } + + if (!$allowed) { + throw new Twig_Sandbox_SecurityError(sprintf('Calling "%s" property on a "%s" object is not allowed.', $property, get_class($obj))); + } + } +} diff --git a/Twig/Sandbox/SecurityPolicyInterface.php b/Twig/Sandbox/SecurityPolicyInterface.php new file mode 100644 index 0000000..6ab48e3 --- /dev/null +++ b/Twig/Sandbox/SecurityPolicyInterface.php @@ -0,0 +1,24 @@ + + */ +interface Twig_Sandbox_SecurityPolicyInterface +{ + public function checkSecurity($tags, $filters, $functions); + + public function checkMethodAllowed($obj, $method); + + public function checkPropertyAllowed($obj, $method); +} diff --git a/Twig/SimpleFilter.php b/Twig/SimpleFilter.php new file mode 100644 index 0000000..cefc4f5 --- /dev/null +++ b/Twig/SimpleFilter.php @@ -0,0 +1,112 @@ + + */ +class Twig_SimpleFilter +{ + protected $name; + protected $callable; + protected $options; + protected $arguments = array(); + + public function __construct($name, $callable, array $options = array()) + { + $this->name = $name; + $this->callable = $callable; + $this->options = array_merge(array( + 'needs_environment' => false, + 'needs_context' => false, + 'is_variadic' => false, + 'is_safe' => null, + 'is_safe_callback' => null, + 'pre_escape' => null, + 'preserves_safety' => null, + 'node_class' => 'Twig_Node_Expression_Filter', + 'deprecated' => false, + 'alternative' => null, + ), $options); + } + + public function getName() + { + return $this->name; + } + + public function getCallable() + { + return $this->callable; + } + + public function getNodeClass() + { + return $this->options['node_class']; + } + + public function setArguments($arguments) + { + $this->arguments = $arguments; + } + + public function getArguments() + { + return $this->arguments; + } + + public function needsEnvironment() + { + return $this->options['needs_environment']; + } + + public function needsContext() + { + return $this->options['needs_context']; + } + + public function getSafe(Twig_Node $filterArgs) + { + if (null !== $this->options['is_safe']) { + return $this->options['is_safe']; + } + + if (null !== $this->options['is_safe_callback']) { + return call_user_func($this->options['is_safe_callback'], $filterArgs); + } + } + + public function getPreservesSafety() + { + return $this->options['preserves_safety']; + } + + public function getPreEscape() + { + return $this->options['pre_escape']; + } + + public function isVariadic() + { + return $this->options['is_variadic']; + } + + public function isDeprecated() + { + return $this->options['deprecated']; + } + + public function getAlternative() + { + return $this->options['alternative']; + } +} diff --git a/Twig/SimpleFunction.php b/Twig/SimpleFunction.php new file mode 100644 index 0000000..7973540 --- /dev/null +++ b/Twig/SimpleFunction.php @@ -0,0 +1,102 @@ + + */ +class Twig_SimpleFunction +{ + protected $name; + protected $callable; + protected $options; + protected $arguments = array(); + + public function __construct($name, $callable, array $options = array()) + { + $this->name = $name; + $this->callable = $callable; + $this->options = array_merge(array( + 'needs_environment' => false, + 'needs_context' => false, + 'is_variadic' => false, + 'is_safe' => null, + 'is_safe_callback' => null, + 'node_class' => 'Twig_Node_Expression_Function', + 'deprecated' => false, + 'alternative' => null, + ), $options); + } + + public function getName() + { + return $this->name; + } + + public function getCallable() + { + return $this->callable; + } + + public function getNodeClass() + { + return $this->options['node_class']; + } + + public function setArguments($arguments) + { + $this->arguments = $arguments; + } + + public function getArguments() + { + return $this->arguments; + } + + public function needsEnvironment() + { + return $this->options['needs_environment']; + } + + public function needsContext() + { + return $this->options['needs_context']; + } + + public function getSafe(Twig_Node $functionArgs) + { + if (null !== $this->options['is_safe']) { + return $this->options['is_safe']; + } + + if (null !== $this->options['is_safe_callback']) { + return call_user_func($this->options['is_safe_callback'], $functionArgs); + } + + return array(); + } + + public function isVariadic() + { + return $this->options['is_variadic']; + } + + public function isDeprecated() + { + return $this->options['deprecated']; + } + + public function getAlternative() + { + return $this->options['alternative']; + } +} diff --git a/Twig/SimpleTest.php b/Twig/SimpleTest.php new file mode 100644 index 0000000..8ba2192 --- /dev/null +++ b/Twig/SimpleTest.php @@ -0,0 +1,64 @@ + + */ +class Twig_SimpleTest +{ + protected $name; + protected $callable; + protected $options; + + public function __construct($name, $callable, array $options = array()) + { + $this->name = $name; + $this->callable = $callable; + $this->options = array_merge(array( + 'is_variadic' => false, + 'node_class' => 'Twig_Node_Expression_Test', + 'deprecated' => false, + 'alternative' => null, + ), $options); + } + + public function getName() + { + return $this->name; + } + + public function getCallable() + { + return $this->callable; + } + + public function getNodeClass() + { + return $this->options['node_class']; + } + + public function isVariadic() + { + return $this->options['is_variadic']; + } + + public function isDeprecated() + { + return $this->options['deprecated']; + } + + public function getAlternative() + { + return $this->options['alternative']; + } +} diff --git a/Twig/Template.php b/Twig/Template.php new file mode 100644 index 0000000..a816022 --- /dev/null +++ b/Twig/Template.php @@ -0,0 +1,614 @@ + + */ +abstract class Twig_Template implements Twig_TemplateInterface +{ + protected static $cache = array(); + + protected $parent; + protected $parents = array(); + protected $env; + protected $blocks = array(); + protected $traits = array(); + + /** + * Constructor. + * + * @param Twig_Environment $env A Twig_Environment instance + */ + public function __construct(Twig_Environment $env) + { + $this->env = $env; + } + + /** + * Returns the template name. + * + * @return string The template name + */ + abstract public function getTemplateName(); + + /** + * @deprecated since 1.20 (to be removed in 2.0) + */ + public function getEnvironment() + { + @trigger_error('The '.__METHOD__.' method is deprecated since version 1.20 and will be removed in 2.0.', E_USER_DEPRECATED); + + return $this->env; + } + + /** + * Returns the parent template. + * + * This method is for internal use only and should never be called + * directly. + * + * @param array $context + * + * @return Twig_TemplateInterface|false The parent template or false if there is no parent + * + * @internal + */ + public function getParent(array $context) + { + if (null !== $this->parent) { + return $this->parent; + } + + try { + $parent = $this->doGetParent($context); + + if (false === $parent) { + return false; + } + + if ($parent instanceof self) { + return $this->parents[$parent->getTemplateName()] = $parent; + } + + if (!isset($this->parents[$parent])) { + $this->parents[$parent] = $this->loadTemplate($parent); + } + } catch (Twig_Error_Loader $e) { + $e->setTemplateFile(null); + $e->guess(); + + throw $e; + } + + return $this->parents[$parent]; + } + + protected function doGetParent(array $context) + { + return false; + } + + public function isTraitable() + { + return true; + } + + /** + * Displays a parent block. + * + * This method is for internal use only and should never be called + * directly. + * + * @param string $name The block name to display from the parent + * @param array $context The context + * @param array $blocks The current set of blocks + * + * @internal + */ + public function displayParentBlock($name, array $context, array $blocks = array()) + { + $name = (string) $name; + + if (isset($this->traits[$name])) { + $this->traits[$name][0]->displayBlock($name, $context, $blocks, false); + } elseif (false !== $parent = $this->getParent($context)) { + $parent->displayBlock($name, $context, $blocks, false); + } else { + throw new Twig_Error_Runtime(sprintf('The template has no parent and no traits defining the "%s" block', $name), -1, $this->getTemplateName()); + } + } + + /** + * Displays a block. + * + * This method is for internal use only and should never be called + * directly. + * + * @param string $name The block name to display + * @param array $context The context + * @param array $blocks The current set of blocks + * @param bool $useBlocks Whether to use the current set of blocks + * + * @internal + */ + public function displayBlock($name, array $context, array $blocks = array(), $useBlocks = true) + { + $name = (string) $name; + + if ($useBlocks && isset($blocks[$name])) { + $template = $blocks[$name][0]; + $block = $blocks[$name][1]; + } elseif (isset($this->blocks[$name])) { + $template = $this->blocks[$name][0]; + $block = $this->blocks[$name][1]; + } else { + $template = null; + $block = null; + } + + if (null !== $template) { + // avoid RCEs when sandbox is enabled + if (!$template instanceof self) { + throw new LogicException('A block must be a method on a Twig_Template instance.'); + } + + try { + $template->$block($context, $blocks); + } catch (Twig_Error $e) { + if (!$e->getTemplateFile()) { + $e->setTemplateFile($template->getTemplateName()); + } + + // this is mostly useful for Twig_Error_Loader exceptions + // see Twig_Error_Loader + if (false === $e->getTemplateLine()) { + $e->setTemplateLine(-1); + $e->guess(); + } + + throw $e; + } catch (Exception $e) { + throw new Twig_Error_Runtime(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $template->getTemplateName(), $e); + } + } elseif (false !== $parent = $this->getParent($context)) { + $parent->displayBlock($name, $context, array_merge($this->blocks, $blocks), false); + } + } + + /** + * Renders a parent block. + * + * This method is for internal use only and should never be called + * directly. + * + * @param string $name The block name to render from the parent + * @param array $context The context + * @param array $blocks The current set of blocks + * + * @return string The rendered block + * + * @internal + */ + public function renderParentBlock($name, array $context, array $blocks = array()) + { + ob_start(); + $this->displayParentBlock($name, $context, $blocks); + + return ob_get_clean(); + } + + /** + * Renders a block. + * + * This method is for internal use only and should never be called + * directly. + * + * @param string $name The block name to render + * @param array $context The context + * @param array $blocks The current set of blocks + * @param bool $useBlocks Whether to use the current set of blocks + * + * @return string The rendered block + * + * @internal + */ + public function renderBlock($name, array $context, array $blocks = array(), $useBlocks = true) + { + ob_start(); + $this->displayBlock($name, $context, $blocks, $useBlocks); + + return ob_get_clean(); + } + + /** + * Returns whether a block exists or not. + * + * This method is for internal use only and should never be called + * directly. + * + * This method does only return blocks defined in the current template + * or defined in "used" traits. + * + * It does not return blocks from parent templates as the parent + * template name can be dynamic, which is only known based on the + * current context. + * + * @param string $name The block name + * + * @return bool true if the block exists, false otherwise + * + * @internal + */ + public function hasBlock($name) + { + return isset($this->blocks[(string) $name]); + } + + /** + * Returns all block names. + * + * This method is for internal use only and should never be called + * directly. + * + * @return array An array of block names + * + * @see hasBlock + * + * @internal + */ + public function getBlockNames() + { + return array_keys($this->blocks); + } + + protected function loadTemplate($template, $templateName = null, $line = null, $index = null) + { + try { + if (is_array($template)) { + return $this->env->resolveTemplate($template); + } + + if ($template instanceof self) { + return $template; + } + + return $this->env->loadTemplate($template, $index); + } catch (Twig_Error $e) { + if (!$e->getTemplateFile()) { + $e->setTemplateFile($templateName ? $templateName : $this->getTemplateName()); + } + + if ($e->getTemplateLine()) { + throw $e; + } + + if (!$line) { + $e->guess(); + } else { + $e->setTemplateLine($line); + } + + throw $e; + } + } + + /** + * Returns all blocks. + * + * This method is for internal use only and should never be called + * directly. + * + * @return array An array of blocks + * + * @see hasBlock + * + * @internal + */ + public function getBlocks() + { + return $this->blocks; + } + + /** + * Returns the template source code. + * + * @return string|null The template source code or null if it is not available + */ + public function getSource() + { + $reflector = new ReflectionClass($this); + $file = $reflector->getFileName(); + + if (!file_exists($file)) { + return; + } + + $source = file($file, FILE_IGNORE_NEW_LINES); + array_splice($source, 0, $reflector->getEndLine()); + + $i = 0; + while (isset($source[$i]) && '/* */' === substr_replace($source[$i], '', 3, -2)) { + $source[$i] = str_replace('*//* ', '*/', substr($source[$i], 3, -2)); + ++$i; + } + array_splice($source, $i); + + return implode("\n", $source); + } + + /** + * {@inheritdoc} + */ + public function display(array $context, array $blocks = array()) + { + $this->displayWithErrorHandling($this->env->mergeGlobals($context), array_merge($this->blocks, $blocks)); + } + + /** + * {@inheritdoc} + */ + public function render(array $context) + { + $level = ob_get_level(); + ob_start(); + try { + $this->display($context); + } catch (Exception $e) { + while (ob_get_level() > $level) { + ob_end_clean(); + } + + throw $e; + } + + return ob_get_clean(); + } + + protected function displayWithErrorHandling(array $context, array $blocks = array()) + { + try { + $this->doDisplay($context, $blocks); + } catch (Twig_Error $e) { + if (!$e->getTemplateFile()) { + $e->setTemplateFile($this->getTemplateName()); + } + + // this is mostly useful for Twig_Error_Loader exceptions + // see Twig_Error_Loader + if (false === $e->getTemplateLine()) { + $e->setTemplateLine(-1); + $e->guess(); + } + + throw $e; + } catch (Exception $e) { + throw new Twig_Error_Runtime(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, $this->getTemplateName(), $e); + } + } + + /** + * Auto-generated method to display the template with the given context. + * + * @param array $context An array of parameters to pass to the template + * @param array $blocks An array of blocks to pass to the template + */ + abstract protected function doDisplay(array $context, array $blocks = array()); + + /** + * Returns a variable from the context. + * + * This method is for internal use only and should never be called + * directly. + * + * This method should not be overridden in a sub-class as this is an + * implementation detail that has been introduced to optimize variable + * access for versions of PHP before 5.4. This is not a way to override + * the way to get a variable value. + * + * @param array $context The context + * @param string $item The variable to return from the context + * @param bool $ignoreStrictCheck Whether to ignore the strict variable check or not + * + * @return mixed The content of the context variable + * + * @throws Twig_Error_Runtime if the variable does not exist and Twig is running in strict mode + * + * @internal + */ + final protected function getContext($context, $item, $ignoreStrictCheck = false) + { + if (!array_key_exists($item, $context)) { + if ($ignoreStrictCheck || !$this->env->isStrictVariables()) { + return; + } + + throw new Twig_Error_Runtime(sprintf('Variable "%s" does not exist', $item), -1, $this->getTemplateName()); + } + + return $context[$item]; + } + + /** + * Returns the attribute value for a given array/object. + * + * @param mixed $object The object or array from where to get the item + * @param mixed $item The item to get from the array or object + * @param array $arguments An array of arguments to pass if the item is an object method + * @param string $type The type of attribute (@see Twig_Template constants) + * @param bool $isDefinedTest Whether this is only a defined check + * @param bool $ignoreStrictCheck Whether to ignore the strict attribute check or not + * + * @return mixed The attribute value, or a Boolean when $isDefinedTest is true, or null when the attribute is not set and $ignoreStrictCheck is true + * + * @throws Twig_Error_Runtime if the attribute does not exist and Twig is running in strict mode and $isDefinedTest is false + */ + protected function getAttribute($object, $item, array $arguments = array(), $type = self::ANY_CALL, $isDefinedTest = false, $ignoreStrictCheck = false) + { + // array + if (self::METHOD_CALL !== $type) { + $arrayItem = is_bool($item) || is_float($item) ? (int) $item : $item; + + if ((is_array($object) && array_key_exists($arrayItem, $object)) + || ($object instanceof ArrayAccess && isset($object[$arrayItem])) + ) { + if ($isDefinedTest) { + return true; + } + + return $object[$arrayItem]; + } + + if (self::ARRAY_CALL === $type || !is_object($object)) { + if ($isDefinedTest) { + return false; + } + + if ($ignoreStrictCheck || !$this->env->isStrictVariables()) { + return; + } + + if ($object instanceof ArrayAccess) { + $message = sprintf('Key "%s" in object with ArrayAccess of class "%s" does not exist', $arrayItem, get_class($object)); + } elseif (is_object($object)) { + $message = sprintf('Impossible to access a key "%s" on an object of class "%s" that does not implement ArrayAccess interface', $item, get_class($object)); + } elseif (is_array($object)) { + if (empty($object)) { + $message = sprintf('Key "%s" does not exist as the array is empty', $arrayItem); + } else { + $message = sprintf('Key "%s" for array with keys "%s" does not exist', $arrayItem, implode(', ', array_keys($object))); + } + } elseif (self::ARRAY_CALL === $type) { + if (null === $object) { + $message = sprintf('Impossible to access a key ("%s") on a null variable', $item); + } else { + $message = sprintf('Impossible to access a key ("%s") on a %s variable ("%s")', $item, gettype($object), $object); + } + } elseif (null === $object) { + $message = sprintf('Impossible to access an attribute ("%s") on a null variable', $item); + } else { + $message = sprintf('Impossible to access an attribute ("%s") on a %s variable ("%s")', $item, gettype($object), $object); + } + + throw new Twig_Error_Runtime($message, -1, $this->getTemplateName()); + } + } + + if (!is_object($object)) { + if ($isDefinedTest) { + return false; + } + + if ($ignoreStrictCheck || !$this->env->isStrictVariables()) { + return; + } + + if (null === $object) { + $message = sprintf('Impossible to invoke a method ("%s") on a null variable', $item); + } else { + $message = sprintf('Impossible to invoke a method ("%s") on a %s variable ("%s")', $item, gettype($object), $object); + } + + throw new Twig_Error_Runtime($message, -1, $this->getTemplateName()); + } + + // object property + if (self::METHOD_CALL !== $type && !$object instanceof self) { // Twig_Template does not have public properties, and we don't want to allow access to internal ones + if (isset($object->$item) || array_key_exists((string) $item, $object)) { + if ($isDefinedTest) { + return true; + } + + if ($this->env->hasExtension('sandbox')) { + $this->env->getExtension('sandbox')->checkPropertyAllowed($object, $item); + } + + return $object->$item; + } + } + + $class = get_class($object); + + // object method + if (!isset(self::$cache[$class]['methods'])) { + // get_class_methods returns all methods accessible in the scope, but we only want public ones to be accessible in templates + if ($object instanceof self) { + $ref = new ReflectionClass($class); + $methods = array(); + + foreach ($ref->getMethods(ReflectionMethod::IS_PUBLIC) as $refMethod) { + $methodName = strtolower($refMethod->name); + + // Accessing the environment from templates is forbidden to prevent untrusted changes to the environment + if ('getenvironment' !== $methodName) { + $methods[$methodName] = true; + } + } + + self::$cache[$class]['methods'] = $methods; + } else { + self::$cache[$class]['methods'] = array_change_key_case(array_flip(get_class_methods($object))); + } + } + + $call = false; + $lcItem = strtolower($item); + if (isset(self::$cache[$class]['methods'][$lcItem])) { + $method = (string) $item; + } elseif (isset(self::$cache[$class]['methods']['get'.$lcItem])) { + $method = 'get'.$item; + } elseif (isset(self::$cache[$class]['methods']['is'.$lcItem])) { + $method = 'is'.$item; + } elseif (isset(self::$cache[$class]['methods']['__call'])) { + $method = (string) $item; + $call = true; + } else { + if ($isDefinedTest) { + return false; + } + + if ($ignoreStrictCheck || !$this->env->isStrictVariables()) { + return; + } + + throw new Twig_Error_Runtime(sprintf('Method "%s" for object "%s" does not exist', $item, get_class($object)), -1, $this->getTemplateName()); + } + + if ($isDefinedTest) { + return true; + } + + if ($this->env->hasExtension('sandbox')) { + $this->env->getExtension('sandbox')->checkMethodAllowed($object, $method); + } + + // Some objects throw exceptions when they have __call, and the method we try + // to call is not supported. If ignoreStrictCheck is true, we should return null. + try { + $ret = call_user_func_array(array($object, $method), $arguments); + } catch (BadMethodCallException $e) { + if ($call && ($ignoreStrictCheck || !$this->env->isStrictVariables())) { + return; + } + throw $e; + } + + // useful when calling a template method from a template + // this is not supported but unfortunately heavily used in the Symfony profiler + if ($object instanceof Twig_TemplateInterface) { + return $ret === '' ? '' : new Twig_Markup($ret, $this->env->getCharset()); + } + + return $ret; + } +} diff --git a/Twig/TemplateInterface.php b/Twig/TemplateInterface.php new file mode 100644 index 0000000..3274640 --- /dev/null +++ b/Twig/TemplateInterface.php @@ -0,0 +1,48 @@ + + * + * @deprecated since 1.12 (to be removed in 3.0) + */ +interface Twig_TemplateInterface +{ + const ANY_CALL = 'any'; + const ARRAY_CALL = 'array'; + const METHOD_CALL = 'method'; + + /** + * Renders the template with the given context and returns it as string. + * + * @param array $context An array of parameters to pass to the template + * + * @return string The rendered template + */ + public function render(array $context); + + /** + * Displays the template with the given context. + * + * @param array $context An array of parameters to pass to the template + * @param array $blocks An array of blocks to pass to the template + */ + public function display(array $context, array $blocks = array()); + + /** + * Returns the bound environment for this template. + * + * @return Twig_Environment The current environment + */ + public function getEnvironment(); +} diff --git a/Twig/Test.php b/Twig/Test.php new file mode 100644 index 0000000..3c2d859 --- /dev/null +++ b/Twig/Test.php @@ -0,0 +1,37 @@ + + * + * @deprecated since 1.12 (to be removed in 2.0) + */ +abstract class Twig_Test implements Twig_TestInterface, Twig_TestCallableInterface +{ + protected $options; + protected $arguments = array(); + + public function __construct(array $options = array()) + { + $this->options = array_merge(array( + 'callable' => null, + ), $options); + } + + public function getCallable() + { + return $this->options['callable']; + } +} diff --git a/Twig/Test/Function.php b/Twig/Test/Function.php new file mode 100644 index 0000000..5e76c71 --- /dev/null +++ b/Twig/Test/Function.php @@ -0,0 +1,38 @@ + + * + * @deprecated since 1.12 (to be removed in 2.0) + */ +class Twig_Test_Function extends Twig_Test +{ + protected $function; + + public function __construct($function, array $options = array()) + { + $options['callable'] = $function; + + parent::__construct($options); + + $this->function = $function; + } + + public function compile() + { + return $this->function; + } +} diff --git a/Twig/Test/IntegrationTestCase.php b/Twig/Test/IntegrationTestCase.php new file mode 100644 index 0000000..1ec575e --- /dev/null +++ b/Twig/Test/IntegrationTestCase.php @@ -0,0 +1,230 @@ + + * @author Karma Dordrak + */ +abstract class Twig_Test_IntegrationTestCase extends PHPUnit_Framework_TestCase +{ + /** + * @return string + */ + abstract protected function getFixturesDir(); + + /** + * @return Twig_ExtensionInterface[] + */ + protected function getExtensions() + { + return array(); + } + + /** + * @return Twig_SimpleFilter[] + */ + protected function getTwigFilters() + { + return array(); + } + + /** + * @return Twig_SimpleFunction[] + */ + protected function getTwigFunctions() + { + return array(); + } + + /** + * @return Twig_SimpleTest[] + */ + protected function getTwigTests() + { + return array(); + } + + /** + * @dataProvider getTests + */ + public function testIntegration($file, $message, $condition, $templates, $exception, $outputs) + { + $this->doIntegrationTest($file, $message, $condition, $templates, $exception, $outputs); + } + + /** + * @dataProvider getLegacyTests + * @group legacy + */ + public function testLegacyIntegration($file, $message, $condition, $templates, $exception, $outputs) + { + $this->doIntegrationTest($file, $message, $condition, $templates, $exception, $outputs); + } + + public function getTests($name, $legacyTests = false) + { + $fixturesDir = realpath($this->getFixturesDir()); + $tests = array(); + + foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($fixturesDir), RecursiveIteratorIterator::LEAVES_ONLY) as $file) { + if (!preg_match('/\.test$/', $file)) { + continue; + } + + if ($legacyTests xor false !== strpos($file->getRealpath(), '.legacy.test')) { + continue; + } + + $test = file_get_contents($file->getRealpath()); + + if (preg_match('/--TEST--\s*(.*?)\s*(?:--CONDITION--\s*(.*))?\s*((?:--TEMPLATE(?:\(.*?\))?--(?:.*?))+)\s*(?:--DATA--\s*(.*))?\s*--EXCEPTION--\s*(.*)/sx', $test, $match)) { + $message = $match[1]; + $condition = $match[2]; + $templates = $this->parseTemplates($match[3]); + $exception = $match[5]; + $outputs = array(array(null, $match[4], null, '')); + } elseif (preg_match('/--TEST--\s*(.*?)\s*(?:--CONDITION--\s*(.*))?\s*((?:--TEMPLATE(?:\(.*?\))?--(?:.*?))+)--DATA--.*?--EXPECT--.*/s', $test, $match)) { + $message = $match[1]; + $condition = $match[2]; + $templates = $this->parseTemplates($match[3]); + $exception = false; + preg_match_all('/--DATA--(.*?)(?:--CONFIG--(.*?))?--EXPECT--(.*?)(?=\-\-DATA\-\-|$)/s', $test, $outputs, PREG_SET_ORDER); + } else { + throw new InvalidArgumentException(sprintf('Test "%s" is not valid.', str_replace($fixturesDir.'/', '', $file))); + } + + $tests[] = array(str_replace($fixturesDir.'/', '', $file), $message, $condition, $templates, $exception, $outputs); + } + + if ($legacyTests && empty($tests)) { + // add a dummy test to avoid a PHPUnit message + return array(array('not', '-', '', array(), '', array())); + } + + return $tests; + } + + public function getLegacyTests() + { + return $this->getTests('testLegacyIntegration', true); + } + + protected function doIntegrationTest($file, $message, $condition, $templates, $exception, $outputs) + { + if ($condition) { + eval('$ret = '.$condition.';'); + if (!$ret) { + $this->markTestSkipped($condition); + } + } + + $loader = new Twig_Loader_Array($templates); + + foreach ($outputs as $i => $match) { + $config = array_merge(array( + 'cache' => false, + 'strict_variables' => true, + ), $match[2] ? eval($match[2].';') : array()); + $twig = new Twig_Environment($loader, $config); + $twig->addGlobal('global', 'global'); + foreach ($this->getExtensions() as $extension) { + $twig->addExtension($extension); + } + + foreach ($this->getTwigFilters() as $filter) { + $twig->addFilter($filter); + } + + foreach ($this->getTwigTests() as $test) { + $twig->addTest($test); + } + + foreach ($this->getTwigFunctions() as $function) { + $twig->addFunction($function); + } + + // avoid using the same PHP class name for different cases + // only for PHP 5.2+ + if (PHP_VERSION_ID >= 50300) { + $p = new ReflectionProperty($twig, 'templateClassPrefix'); + $p->setAccessible(true); + $p->setValue($twig, '__TwigTemplate_'.hash('sha256', uniqid(mt_rand(), true), false).'_'); + } + + try { + $template = $twig->loadTemplate('index.twig'); + } catch (Exception $e) { + if (false !== $exception) { + $this->assertSame(trim($exception), trim(sprintf('%s: %s', get_class($e), $e->getMessage()))); + + return; + } + + if ($e instanceof Twig_Error_Syntax) { + $e->setTemplateFile($file); + + throw $e; + } + + throw new Twig_Error(sprintf('%s: %s', get_class($e), $e->getMessage()), -1, $file, $e); + } + + try { + $output = trim($template->render(eval($match[1].';')), "\n "); + } catch (Exception $e) { + if (false !== $exception) { + $this->assertSame(trim($exception), trim(sprintf('%s: %s', get_class($e), $e->getMessage()))); + + return; + } + + if ($e instanceof Twig_Error_Syntax) { + $e->setTemplateFile($file); + } else { + $e = new Twig_Error(sprintf('%s: %s', get_class($e), $e->getMessage()), -1, $file, $e); + } + + $output = trim(sprintf('%s: %s', get_class($e), $e->getMessage())); + } + + if (false !== $exception) { + list($class) = explode(':', $exception); + $this->assertThat(null, new PHPUnit_Framework_Constraint_Exception($class)); + } + + $expected = trim($match[3], "\n "); + + if ($expected !== $output) { + printf("Compiled templates that failed on case %d:\n", $i + 1); + + foreach (array_keys($templates) as $name) { + echo "Template: $name\n"; + $source = $loader->getSource($name); + echo $twig->compile($twig->parse($twig->tokenize($source, $name))); + } + } + $this->assertEquals($expected, $output, $message.' (in '.$file.')'); + } + } + + protected static function parseTemplates($test) + { + $templates = array(); + preg_match_all('/--TEMPLATE(?:\((.*?)\))?--(.*?)(?=\-\-TEMPLATE|$)/s', $test, $matches, PREG_SET_ORDER); + foreach ($matches as $match) { + $templates[($match[1] ? $match[1] : 'index.twig')] = $match[2]; + } + + return $templates; + } +} diff --git a/Twig/Test/Method.php b/Twig/Test/Method.php new file mode 100644 index 0000000..2779986 --- /dev/null +++ b/Twig/Test/Method.php @@ -0,0 +1,40 @@ + + * + * @deprecated since 1.12 (to be removed in 2.0) + */ +class Twig_Test_Method extends Twig_Test +{ + protected $extension; + protected $method; + + public function __construct(Twig_ExtensionInterface $extension, $method, array $options = array()) + { + $options['callable'] = array($extension, $method); + + parent::__construct($options); + + $this->extension = $extension; + $this->method = $method; + } + + public function compile() + { + return sprintf('$this->env->getExtension(\'%s\')->%s', $this->extension->getName(), $this->method); + } +} diff --git a/Twig/Test/Node.php b/Twig/Test/Node.php new file mode 100644 index 0000000..baef49c --- /dev/null +++ b/Twig/Test/Node.php @@ -0,0 +1,40 @@ + + * + * @deprecated since 1.12 (to be removed in 2.0) + */ +class Twig_Test_Node extends Twig_Test +{ + protected $class; + + public function __construct($class, array $options = array()) + { + parent::__construct($options); + + $this->class = $class; + } + + public function getClass() + { + return $this->class; + } + + public function compile() + { + } +} diff --git a/Twig/Test/NodeTestCase.php b/Twig/Test/NodeTestCase.php new file mode 100644 index 0000000..6fe1b5f --- /dev/null +++ b/Twig/Test/NodeTestCase.php @@ -0,0 +1,60 @@ +assertNodeCompilation($source, $node, $environment); + } + + public function assertNodeCompilation($source, Twig_Node $node, Twig_Environment $environment = null) + { + $compiler = $this->getCompiler($environment); + $compiler->compile($node); + + $this->assertStringMatchesFormat($source, trim($compiler->getSource())); + } + + protected function getCompiler(Twig_Environment $environment = null) + { + return new Twig_Compiler(null === $environment ? $this->getEnvironment() : $environment); + } + + protected function getEnvironment() + { + return new Twig_Environment(new Twig_Loader_Array(array())); + } + + protected function getVariableGetter($name, $line = false) + { + $line = $line > 0 ? "// line {$line}\n" : ''; + + if (PHP_VERSION_ID >= 50400) { + return sprintf('%s(isset($context["%s"]) ? $context["%s"] : null)', $line, $name, $name); + } + + return sprintf('%s$this->getContext($context, "%s")', $line, $name); + } + + protected function getAttributeGetter() + { + if (function_exists('twig_template_get_attributes')) { + return 'twig_template_get_attributes($this, '; + } + + return '$this->getAttribute('; + } +} diff --git a/Twig/TestCallableInterface.php b/Twig/TestCallableInterface.php new file mode 100644 index 0000000..98d3457 --- /dev/null +++ b/Twig/TestCallableInterface.php @@ -0,0 +1,22 @@ + + * + * @deprecated since 1.12 (to be removed in 2.0) + */ +interface Twig_TestCallableInterface +{ + public function getCallable(); +} diff --git a/Twig/TestInterface.php b/Twig/TestInterface.php new file mode 100644 index 0000000..2fa821c --- /dev/null +++ b/Twig/TestInterface.php @@ -0,0 +1,27 @@ + + * + * @deprecated since 1.12 (to be removed in 2.0) + */ +interface Twig_TestInterface +{ + /** + * Compiles a test. + * + * @return string The PHP code for the test + */ + public function compile(); +} diff --git a/Twig/Token.php b/Twig/Token.php new file mode 100644 index 0000000..a0a029b --- /dev/null +++ b/Twig/Token.php @@ -0,0 +1,216 @@ + + */ +class Twig_Token +{ + protected $value; + protected $type; + protected $lineno; + + const EOF_TYPE = -1; + const TEXT_TYPE = 0; + const BLOCK_START_TYPE = 1; + const VAR_START_TYPE = 2; + const BLOCK_END_TYPE = 3; + const VAR_END_TYPE = 4; + const NAME_TYPE = 5; + const NUMBER_TYPE = 6; + const STRING_TYPE = 7; + const OPERATOR_TYPE = 8; + const PUNCTUATION_TYPE = 9; + const INTERPOLATION_START_TYPE = 10; + const INTERPOLATION_END_TYPE = 11; + + /** + * Constructor. + * + * @param int $type The type of the token + * @param string $value The token value + * @param int $lineno The line position in the source + */ + public function __construct($type, $value, $lineno) + { + $this->type = $type; + $this->value = $value; + $this->lineno = $lineno; + } + + /** + * Returns a string representation of the token. + * + * @return string A string representation of the token + */ + public function __toString() + { + return sprintf('%s(%s)', self::typeToString($this->type, true), $this->value); + } + + /** + * Tests the current token for a type and/or a value. + * + * Parameters may be: + * * just type + * * type and value (or array of possible values) + * * just value (or array of possible values) (NAME_TYPE is used as type) + * + * @param array|int $type The type to test + * @param array|string|null $values The token value + * + * @return bool + */ + public function test($type, $values = null) + { + if (null === $values && !is_int($type)) { + $values = $type; + $type = self::NAME_TYPE; + } + + return ($this->type === $type) && ( + null === $values || + (is_array($values) && in_array($this->value, $values)) || + $this->value == $values + ); + } + + /** + * Gets the line. + * + * @return int The source line + */ + public function getLine() + { + return $this->lineno; + } + + /** + * Gets the token type. + * + * @return int The token type + */ + public function getType() + { + return $this->type; + } + + /** + * Gets the token value. + * + * @return string The token value + */ + public function getValue() + { + return $this->value; + } + + /** + * Returns the constant representation (internal) of a given type. + * + * @param int $type The type as an integer + * @param bool $short Whether to return a short representation or not + * + * @return string The string representation + */ + public static function typeToString($type, $short = false) + { + switch ($type) { + case self::EOF_TYPE: + $name = 'EOF_TYPE'; + break; + case self::TEXT_TYPE: + $name = 'TEXT_TYPE'; + break; + case self::BLOCK_START_TYPE: + $name = 'BLOCK_START_TYPE'; + break; + case self::VAR_START_TYPE: + $name = 'VAR_START_TYPE'; + break; + case self::BLOCK_END_TYPE: + $name = 'BLOCK_END_TYPE'; + break; + case self::VAR_END_TYPE: + $name = 'VAR_END_TYPE'; + break; + case self::NAME_TYPE: + $name = 'NAME_TYPE'; + break; + case self::NUMBER_TYPE: + $name = 'NUMBER_TYPE'; + break; + case self::STRING_TYPE: + $name = 'STRING_TYPE'; + break; + case self::OPERATOR_TYPE: + $name = 'OPERATOR_TYPE'; + break; + case self::PUNCTUATION_TYPE: + $name = 'PUNCTUATION_TYPE'; + break; + case self::INTERPOLATION_START_TYPE: + $name = 'INTERPOLATION_START_TYPE'; + break; + case self::INTERPOLATION_END_TYPE: + $name = 'INTERPOLATION_END_TYPE'; + break; + default: + throw new LogicException(sprintf('Token of type "%s" does not exist.', $type)); + } + + return $short ? $name : 'Twig_Token::'.$name; + } + + /** + * Returns the english representation of a given type. + * + * @param int $type The type as an integer + * + * @return string The string representation + */ + public static function typeToEnglish($type) + { + switch ($type) { + case self::EOF_TYPE: + return 'end of template'; + case self::TEXT_TYPE: + return 'text'; + case self::BLOCK_START_TYPE: + return 'begin of statement block'; + case self::VAR_START_TYPE: + return 'begin of print statement'; + case self::BLOCK_END_TYPE: + return 'end of statement block'; + case self::VAR_END_TYPE: + return 'end of print statement'; + case self::NAME_TYPE: + return 'name'; + case self::NUMBER_TYPE: + return 'number'; + case self::STRING_TYPE: + return 'string'; + case self::OPERATOR_TYPE: + return 'operator'; + case self::PUNCTUATION_TYPE: + return 'punctuation'; + case self::INTERPOLATION_START_TYPE: + return 'begin of string interpolation'; + case self::INTERPOLATION_END_TYPE: + return 'end of string interpolation'; + default: + throw new LogicException(sprintf('Token of type "%s" does not exist.', $type)); + } + } +} diff --git a/Twig/TokenParser.php b/Twig/TokenParser.php new file mode 100644 index 0000000..fa9b6d8 --- /dev/null +++ b/Twig/TokenParser.php @@ -0,0 +1,33 @@ + + */ +abstract class Twig_TokenParser implements Twig_TokenParserInterface +{ + /** + * @var Twig_Parser + */ + protected $parser; + + /** + * Sets the parser associated with this token parser. + * + * @param Twig_Parser $parser A Twig_Parser instance + */ + public function setParser(Twig_Parser $parser) + { + $this->parser = $parser; + } +} diff --git a/Twig/TokenParser/AutoEscape.php b/Twig/TokenParser/AutoEscape.php new file mode 100644 index 0000000..a8a3d7a --- /dev/null +++ b/Twig/TokenParser/AutoEscape.php @@ -0,0 +1,91 @@ + + * {% autoescape true %} + * Everything will be automatically escaped in this block + * {% endautoescape %} + * + * {% autoescape false %} + * Everything will be outputed as is in this block + * {% endautoescape %} + * + * {% autoescape true js %} + * Everything will be automatically escaped in this block + * using the js escaping strategy + * {% endautoescape %} + * + */ +class Twig_TokenParser_AutoEscape extends Twig_TokenParser +{ + /** + * Parses a token and returns a node. + * + * @param Twig_Token $token A Twig_Token instance + * + * @return Twig_NodeInterface A Twig_NodeInterface instance + */ + public function parse(Twig_Token $token) + { + $lineno = $token->getLine(); + $stream = $this->parser->getStream(); + + if ($stream->test(Twig_Token::BLOCK_END_TYPE)) { + $value = 'html'; + } else { + $expr = $this->parser->getExpressionParser()->parseExpression(); + if (!$expr instanceof Twig_Node_Expression_Constant) { + throw new Twig_Error_Syntax('An escaping strategy must be a string or a Boolean.', $stream->getCurrent()->getLine(), $stream->getFilename()); + } + $value = $expr->getAttribute('value'); + + $compat = true === $value || false === $value; + + if (true === $value) { + $value = 'html'; + } + + if ($compat && $stream->test(Twig_Token::NAME_TYPE)) { + @trigger_error('Using the autoescape tag with "true" or "false" before the strategy name is deprecated.', E_USER_DEPRECATED); + + if (false === $value) { + throw new Twig_Error_Syntax('Unexpected escaping strategy as you set autoescaping to false.', $stream->getCurrent()->getLine(), $stream->getFilename()); + } + + $value = $stream->next()->getValue(); + } + } + + $stream->expect(Twig_Token::BLOCK_END_TYPE); + $body = $this->parser->subparse(array($this, 'decideBlockEnd'), true); + $stream->expect(Twig_Token::BLOCK_END_TYPE); + + return new Twig_Node_AutoEscape($value, $body, $lineno, $this->getTag()); + } + + public function decideBlockEnd(Twig_Token $token) + { + return $token->test('endautoescape'); + } + + /** + * Gets the tag name associated with this token parser. + * + * @return string The tag name + */ + public function getTag() + { + return 'autoescape'; + } +} diff --git a/Twig/TokenParser/Block.php b/Twig/TokenParser/Block.php new file mode 100644 index 0000000..0a46200 --- /dev/null +++ b/Twig/TokenParser/Block.php @@ -0,0 +1,81 @@ + + * {% block head %} + * + * {% block title %}{% endblock %} - My Webpage + * {% endblock %} + * + */ +class Twig_TokenParser_Block extends Twig_TokenParser +{ + /** + * Parses a token and returns a node. + * + * @param Twig_Token $token A Twig_Token instance + * + * @return Twig_NodeInterface A Twig_NodeInterface instance + */ + public function parse(Twig_Token $token) + { + $lineno = $token->getLine(); + $stream = $this->parser->getStream(); + $name = $stream->expect(Twig_Token::NAME_TYPE)->getValue(); + if ($this->parser->hasBlock($name)) { + throw new Twig_Error_Syntax(sprintf("The block '$name' has already been defined line %d", $this->parser->getBlock($name)->getLine()), $stream->getCurrent()->getLine(), $stream->getFilename()); + } + $this->parser->setBlock($name, $block = new Twig_Node_Block($name, new Twig_Node(array()), $lineno)); + $this->parser->pushLocalScope(); + $this->parser->pushBlockStack($name); + + if ($stream->nextIf(Twig_Token::BLOCK_END_TYPE)) { + $body = $this->parser->subparse(array($this, 'decideBlockEnd'), true); + if ($token = $stream->nextIf(Twig_Token::NAME_TYPE)) { + $value = $token->getValue(); + + if ($value != $name) { + throw new Twig_Error_Syntax(sprintf('Expected endblock for block "%s" (but "%s" given)', $name, $value), $stream->getCurrent()->getLine(), $stream->getFilename()); + } + } + } else { + $body = new Twig_Node(array( + new Twig_Node_Print($this->parser->getExpressionParser()->parseExpression(), $lineno), + )); + } + $stream->expect(Twig_Token::BLOCK_END_TYPE); + + $block->setNode('body', $body); + $this->parser->popBlockStack(); + $this->parser->popLocalScope(); + + return new Twig_Node_BlockReference($name, $lineno, $this->getTag()); + } + + public function decideBlockEnd(Twig_Token $token) + { + return $token->test('endblock'); + } + + /** + * Gets the tag name associated with this token parser. + * + * @return string The tag name + */ + public function getTag() + { + return 'block'; + } +} diff --git a/Twig/TokenParser/Do.php b/Twig/TokenParser/Do.php new file mode 100644 index 0000000..f50939d --- /dev/null +++ b/Twig/TokenParser/Do.php @@ -0,0 +1,42 @@ +parser->getExpressionParser()->parseExpression(); + + $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE); + + return new Twig_Node_Do($expr, $token->getLine(), $this->getTag()); + } + + /** + * Gets the tag name associated with this token parser. + * + * @return string The tag name + */ + public function getTag() + { + return 'do'; + } +} diff --git a/Twig/TokenParser/Embed.php b/Twig/TokenParser/Embed.php new file mode 100644 index 0000000..69cb5f3 --- /dev/null +++ b/Twig/TokenParser/Embed.php @@ -0,0 +1,66 @@ +parser->getStream(); + + $parent = $this->parser->getExpressionParser()->parseExpression(); + + list($variables, $only, $ignoreMissing) = $this->parseArguments(); + + // inject a fake parent to make the parent() function work + $stream->injectTokens(array( + new Twig_Token(Twig_Token::BLOCK_START_TYPE, '', $token->getLine()), + new Twig_Token(Twig_Token::NAME_TYPE, 'extends', $token->getLine()), + new Twig_Token(Twig_Token::STRING_TYPE, '__parent__', $token->getLine()), + new Twig_Token(Twig_Token::BLOCK_END_TYPE, '', $token->getLine()), + )); + + $module = $this->parser->parse($stream, array($this, 'decideBlockEnd'), true); + + // override the parent with the correct one + $module->setNode('parent', $parent); + + $this->parser->embedTemplate($module); + + $stream->expect(Twig_Token::BLOCK_END_TYPE); + + return new Twig_Node_Embed($module->getAttribute('filename'), $module->getAttribute('index'), $variables, $only, $ignoreMissing, $token->getLine(), $this->getTag()); + } + + public function decideBlockEnd(Twig_Token $token) + { + return $token->test('endembed'); + } + + /** + * Gets the tag name associated with this token parser. + * + * @return string The tag name + */ + public function getTag() + { + return 'embed'; + } +} diff --git a/Twig/TokenParser/Extends.php b/Twig/TokenParser/Extends.php new file mode 100644 index 0000000..f5ecee2 --- /dev/null +++ b/Twig/TokenParser/Extends.php @@ -0,0 +1,52 @@ + + * {% extends "base.html" %} + * + */ +class Twig_TokenParser_Extends extends Twig_TokenParser +{ + /** + * Parses a token and returns a node. + * + * @param Twig_Token $token A Twig_Token instance + * + * @return Twig_NodeInterface A Twig_NodeInterface instance + */ + public function parse(Twig_Token $token) + { + if (!$this->parser->isMainScope()) { + throw new Twig_Error_Syntax('Cannot extend from a block', $token->getLine(), $this->parser->getFilename()); + } + + if (null !== $this->parser->getParent()) { + throw new Twig_Error_Syntax('Multiple extends tags are forbidden', $token->getLine(), $this->parser->getFilename()); + } + $this->parser->setParent($this->parser->getExpressionParser()->parseExpression()); + + $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE); + } + + /** + * Gets the tag name associated with this token parser. + * + * @return string The tag name + */ + public function getTag() + { + return 'extends'; + } +} diff --git a/Twig/TokenParser/Filter.php b/Twig/TokenParser/Filter.php new file mode 100644 index 0000000..2b97475 --- /dev/null +++ b/Twig/TokenParser/Filter.php @@ -0,0 +1,61 @@ + + * {% filter upper %} + * This text becomes uppercase + * {% endfilter %} + * + */ +class Twig_TokenParser_Filter extends Twig_TokenParser +{ + /** + * Parses a token and returns a node. + * + * @param Twig_Token $token A Twig_Token instance + * + * @return Twig_NodeInterface A Twig_NodeInterface instance + */ + public function parse(Twig_Token $token) + { + $name = $this->parser->getVarName(); + $ref = new Twig_Node_Expression_BlockReference(new Twig_Node_Expression_Constant($name, $token->getLine()), true, $token->getLine(), $this->getTag()); + + $filter = $this->parser->getExpressionParser()->parseFilterExpressionRaw($ref, $this->getTag()); + $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE); + + $body = $this->parser->subparse(array($this, 'decideBlockEnd'), true); + $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE); + + $block = new Twig_Node_Block($name, $body, $token->getLine()); + $this->parser->setBlock($name, $block); + + return new Twig_Node_Print($filter, $token->getLine(), $this->getTag()); + } + + public function decideBlockEnd(Twig_Token $token) + { + return $token->test('endfilter'); + } + + /** + * Gets the tag name associated with this token parser. + * + * @return string The tag name + */ + public function getTag() + { + return 'filter'; + } +} diff --git a/Twig/TokenParser/Flush.php b/Twig/TokenParser/Flush.php new file mode 100644 index 0000000..4e15e78 --- /dev/null +++ b/Twig/TokenParser/Flush.php @@ -0,0 +1,42 @@ +parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE); + + return new Twig_Node_Flush($token->getLine(), $this->getTag()); + } + + /** + * Gets the tag name associated with this token parser. + * + * @return string The tag name + */ + public function getTag() + { + return 'flush'; + } +} diff --git a/Twig/TokenParser/For.php b/Twig/TokenParser/For.php new file mode 100644 index 0000000..5c07d63 --- /dev/null +++ b/Twig/TokenParser/For.php @@ -0,0 +1,135 @@ + + *
    + * {% for user in users %} + *
  • {{ user.username|e }}
  • + * {% endfor %} + *
+ * + */ +class Twig_TokenParser_For extends Twig_TokenParser +{ + /** + * Parses a token and returns a node. + * + * @param Twig_Token $token A Twig_Token instance + * + * @return Twig_NodeInterface A Twig_NodeInterface instance + */ + public function parse(Twig_Token $token) + { + $lineno = $token->getLine(); + $stream = $this->parser->getStream(); + $targets = $this->parser->getExpressionParser()->parseAssignmentExpression(); + $stream->expect(Twig_Token::OPERATOR_TYPE, 'in'); + $seq = $this->parser->getExpressionParser()->parseExpression(); + + $ifexpr = null; + if ($stream->nextIf(Twig_Token::NAME_TYPE, 'if')) { + $ifexpr = $this->parser->getExpressionParser()->parseExpression(); + } + + $stream->expect(Twig_Token::BLOCK_END_TYPE); + $body = $this->parser->subparse(array($this, 'decideForFork')); + if ($stream->next()->getValue() == 'else') { + $stream->expect(Twig_Token::BLOCK_END_TYPE); + $else = $this->parser->subparse(array($this, 'decideForEnd'), true); + } else { + $else = null; + } + $stream->expect(Twig_Token::BLOCK_END_TYPE); + + if (count($targets) > 1) { + $keyTarget = $targets->getNode(0); + $keyTarget = new Twig_Node_Expression_AssignName($keyTarget->getAttribute('name'), $keyTarget->getLine()); + $valueTarget = $targets->getNode(1); + $valueTarget = new Twig_Node_Expression_AssignName($valueTarget->getAttribute('name'), $valueTarget->getLine()); + } else { + $keyTarget = new Twig_Node_Expression_AssignName('_key', $lineno); + $valueTarget = $targets->getNode(0); + $valueTarget = new Twig_Node_Expression_AssignName($valueTarget->getAttribute('name'), $valueTarget->getLine()); + } + + if ($ifexpr) { + $this->checkLoopUsageCondition($stream, $ifexpr); + $this->checkLoopUsageBody($stream, $body); + } + + return new Twig_Node_For($keyTarget, $valueTarget, $seq, $ifexpr, $body, $else, $lineno, $this->getTag()); + } + + public function decideForFork(Twig_Token $token) + { + return $token->test(array('else', 'endfor')); + } + + public function decideForEnd(Twig_Token $token) + { + return $token->test('endfor'); + } + + // the loop variable cannot be used in the condition + protected function checkLoopUsageCondition(Twig_TokenStream $stream, Twig_NodeInterface $node) + { + if ($node instanceof Twig_Node_Expression_GetAttr && $node->getNode('node') instanceof Twig_Node_Expression_Name && 'loop' == $node->getNode('node')->getAttribute('name')) { + throw new Twig_Error_Syntax('The "loop" variable cannot be used in a looping condition', $node->getLine(), $stream->getFilename()); + } + + foreach ($node as $n) { + if (!$n) { + continue; + } + + $this->checkLoopUsageCondition($stream, $n); + } + } + + // check usage of non-defined loop-items + // it does not catch all problems (for instance when a for is included into another or when the variable is used in an include) + protected function checkLoopUsageBody(Twig_TokenStream $stream, Twig_NodeInterface $node) + { + if ($node instanceof Twig_Node_Expression_GetAttr && $node->getNode('node') instanceof Twig_Node_Expression_Name && 'loop' == $node->getNode('node')->getAttribute('name')) { + $attribute = $node->getNode('attribute'); + if ($attribute instanceof Twig_Node_Expression_Constant && in_array($attribute->getAttribute('value'), array('length', 'revindex0', 'revindex', 'last'))) { + throw new Twig_Error_Syntax(sprintf('The "loop.%s" variable is not defined when looping with a condition', $attribute->getAttribute('value')), $node->getLine(), $stream->getFilename()); + } + } + + // should check for parent.loop.XXX usage + if ($node instanceof Twig_Node_For) { + return; + } + + foreach ($node as $n) { + if (!$n) { + continue; + } + + $this->checkLoopUsageBody($stream, $n); + } + } + + /** + * Gets the tag name associated with this token parser. + * + * @return string The tag name + */ + public function getTag() + { + return 'for'; + } +} diff --git a/Twig/TokenParser/From.php b/Twig/TokenParser/From.php new file mode 100644 index 0000000..5540efa --- /dev/null +++ b/Twig/TokenParser/From.php @@ -0,0 +1,74 @@ + + * {% from 'forms.html' import forms %} + * + */ +class Twig_TokenParser_From extends Twig_TokenParser +{ + /** + * Parses a token and returns a node. + * + * @param Twig_Token $token A Twig_Token instance + * + * @return Twig_NodeInterface A Twig_NodeInterface instance + */ + public function parse(Twig_Token $token) + { + $macro = $this->parser->getExpressionParser()->parseExpression(); + $stream = $this->parser->getStream(); + $stream->expect('import'); + + $targets = array(); + do { + $name = $stream->expect(Twig_Token::NAME_TYPE)->getValue(); + + $alias = $name; + if ($stream->nextIf('as')) { + $alias = $stream->expect(Twig_Token::NAME_TYPE)->getValue(); + } + + $targets[$name] = $alias; + + if (!$stream->nextIf(Twig_Token::PUNCTUATION_TYPE, ',')) { + break; + } + } while (true); + + $stream->expect(Twig_Token::BLOCK_END_TYPE); + + $node = new Twig_Node_Import($macro, new Twig_Node_Expression_AssignName($this->parser->getVarName(), $token->getLine()), $token->getLine(), $this->getTag()); + + foreach ($targets as $name => $alias) { + if ($this->parser->isReservedMacroName($name)) { + throw new Twig_Error_Syntax(sprintf('"%s" cannot be an imported macro as it is a reserved keyword', $name), $token->getLine(), $stream->getFilename()); + } + + $this->parser->addImportedSymbol('function', $alias, 'get'.$name, $node->getNode('var')); + } + + return $node; + } + + /** + * Gets the tag name associated with this token parser. + * + * @return string The tag name + */ + public function getTag() + { + return 'from'; + } +} diff --git a/Twig/TokenParser/If.php b/Twig/TokenParser/If.php new file mode 100644 index 0000000..3d7d1f5 --- /dev/null +++ b/Twig/TokenParser/If.php @@ -0,0 +1,94 @@ + + * {% if users %} + *
    + * {% for user in users %} + *
  • {{ user.username|e }}
  • + * {% endfor %} + *
+ * {% endif %} + * + */ +class Twig_TokenParser_If extends Twig_TokenParser +{ + /** + * Parses a token and returns a node. + * + * @param Twig_Token $token A Twig_Token instance + * + * @return Twig_NodeInterface A Twig_NodeInterface instance + */ + public function parse(Twig_Token $token) + { + $lineno = $token->getLine(); + $expr = $this->parser->getExpressionParser()->parseExpression(); + $stream = $this->parser->getStream(); + $stream->expect(Twig_Token::BLOCK_END_TYPE); + $body = $this->parser->subparse(array($this, 'decideIfFork')); + $tests = array($expr, $body); + $else = null; + + $end = false; + while (!$end) { + switch ($stream->next()->getValue()) { + case 'else': + $stream->expect(Twig_Token::BLOCK_END_TYPE); + $else = $this->parser->subparse(array($this, 'decideIfEnd')); + break; + + case 'elseif': + $expr = $this->parser->getExpressionParser()->parseExpression(); + $stream->expect(Twig_Token::BLOCK_END_TYPE); + $body = $this->parser->subparse(array($this, 'decideIfFork')); + $tests[] = $expr; + $tests[] = $body; + break; + + case 'endif': + $end = true; + break; + + default: + throw new Twig_Error_Syntax(sprintf('Unexpected end of template. Twig was looking for the following tags "else", "elseif", or "endif" to close the "if" block started at line %d)', $lineno), $stream->getCurrent()->getLine(), $stream->getFilename()); + } + } + + $stream->expect(Twig_Token::BLOCK_END_TYPE); + + return new Twig_Node_If(new Twig_Node($tests), $else, $lineno, $this->getTag()); + } + + public function decideIfFork(Twig_Token $token) + { + return $token->test(array('elseif', 'else', 'endif')); + } + + public function decideIfEnd(Twig_Token $token) + { + return $token->test(array('endif')); + } + + /** + * Gets the tag name associated with this token parser. + * + * @return string The tag name + */ + public function getTag() + { + return 'if'; + } +} diff --git a/Twig/TokenParser/Import.php b/Twig/TokenParser/Import.php new file mode 100644 index 0000000..e7050c7 --- /dev/null +++ b/Twig/TokenParser/Import.php @@ -0,0 +1,49 @@ + + * {% import 'forms.html' as forms %} + * + */ +class Twig_TokenParser_Import extends Twig_TokenParser +{ + /** + * Parses a token and returns a node. + * + * @param Twig_Token $token A Twig_Token instance + * + * @return Twig_NodeInterface A Twig_NodeInterface instance + */ + public function parse(Twig_Token $token) + { + $macro = $this->parser->getExpressionParser()->parseExpression(); + $this->parser->getStream()->expect('as'); + $var = new Twig_Node_Expression_AssignName($this->parser->getStream()->expect(Twig_Token::NAME_TYPE)->getValue(), $token->getLine()); + $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE); + + $this->parser->addImportedSymbol('template', $var->getAttribute('name')); + + return new Twig_Node_Import($macro, $var, $token->getLine(), $this->getTag()); + } + + /** + * Gets the tag name associated with this token parser. + * + * @return string The tag name + */ + public function getTag() + { + return 'import'; + } +} diff --git a/Twig/TokenParser/Include.php b/Twig/TokenParser/Include.php new file mode 100644 index 0000000..9c3099a --- /dev/null +++ b/Twig/TokenParser/Include.php @@ -0,0 +1,75 @@ + + * {% include 'header.html' %} + * Body + * {% include 'footer.html' %} + * + */ +class Twig_TokenParser_Include extends Twig_TokenParser +{ + /** + * Parses a token and returns a node. + * + * @param Twig_Token $token A Twig_Token instance + * + * @return Twig_NodeInterface A Twig_NodeInterface instance + */ + public function parse(Twig_Token $token) + { + $expr = $this->parser->getExpressionParser()->parseExpression(); + + list($variables, $only, $ignoreMissing) = $this->parseArguments(); + + return new Twig_Node_Include($expr, $variables, $only, $ignoreMissing, $token->getLine(), $this->getTag()); + } + + protected function parseArguments() + { + $stream = $this->parser->getStream(); + + $ignoreMissing = false; + if ($stream->nextIf(Twig_Token::NAME_TYPE, 'ignore')) { + $stream->expect(Twig_Token::NAME_TYPE, 'missing'); + + $ignoreMissing = true; + } + + $variables = null; + if ($stream->nextIf(Twig_Token::NAME_TYPE, 'with')) { + $variables = $this->parser->getExpressionParser()->parseExpression(); + } + + $only = false; + if ($stream->nextIf(Twig_Token::NAME_TYPE, 'only')) { + $only = true; + } + + $stream->expect(Twig_Token::BLOCK_END_TYPE); + + return array($variables, $only, $ignoreMissing); + } + + /** + * Gets the tag name associated with this token parser. + * + * @return string The tag name + */ + public function getTag() + { + return 'include'; + } +} diff --git a/Twig/TokenParser/Macro.php b/Twig/TokenParser/Macro.php new file mode 100644 index 0000000..ad910b5 --- /dev/null +++ b/Twig/TokenParser/Macro.php @@ -0,0 +1,68 @@ + + * {% macro input(name, value, type, size) %} + * + * {% endmacro %} + * + */ +class Twig_TokenParser_Macro extends Twig_TokenParser +{ + /** + * Parses a token and returns a node. + * + * @param Twig_Token $token A Twig_Token instance + * + * @return Twig_NodeInterface A Twig_NodeInterface instance + */ + public function parse(Twig_Token $token) + { + $lineno = $token->getLine(); + $stream = $this->parser->getStream(); + $name = $stream->expect(Twig_Token::NAME_TYPE)->getValue(); + + $arguments = $this->parser->getExpressionParser()->parseArguments(true, true); + + $stream->expect(Twig_Token::BLOCK_END_TYPE); + $this->parser->pushLocalScope(); + $body = $this->parser->subparse(array($this, 'decideBlockEnd'), true); + if ($token = $stream->nextIf(Twig_Token::NAME_TYPE)) { + $value = $token->getValue(); + + if ($value != $name) { + throw new Twig_Error_Syntax(sprintf('Expected endmacro for macro "%s" (but "%s" given)', $name, $value), $stream->getCurrent()->getLine(), $stream->getFilename()); + } + } + $this->parser->popLocalScope(); + $stream->expect(Twig_Token::BLOCK_END_TYPE); + + $this->parser->setMacro($name, new Twig_Node_Macro($name, new Twig_Node_Body(array($body)), $arguments, $lineno, $this->getTag())); + } + + public function decideBlockEnd(Twig_Token $token) + { + return $token->test('endmacro'); + } + + /** + * Gets the tag name associated with this token parser. + * + * @return string The tag name + */ + public function getTag() + { + return 'macro'; + } +} diff --git a/Twig/TokenParser/Sandbox.php b/Twig/TokenParser/Sandbox.php new file mode 100644 index 0000000..9457325 --- /dev/null +++ b/Twig/TokenParser/Sandbox.php @@ -0,0 +1,68 @@ + + * {% sandbox %} + * {% include 'user.html' %} + * {% endsandbox %} + * + * + * @see http://www.twig-project.org/doc/api.html#sandbox-extension for details + */ +class Twig_TokenParser_Sandbox extends Twig_TokenParser +{ + /** + * Parses a token and returns a node. + * + * @param Twig_Token $token A Twig_Token instance + * + * @return Twig_NodeInterface A Twig_NodeInterface instance + */ + public function parse(Twig_Token $token) + { + $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE); + $body = $this->parser->subparse(array($this, 'decideBlockEnd'), true); + $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE); + + // in a sandbox tag, only include tags are allowed + if (!$body instanceof Twig_Node_Include) { + foreach ($body as $node) { + if ($node instanceof Twig_Node_Text && ctype_space($node->getAttribute('data'))) { + continue; + } + + if (!$node instanceof Twig_Node_Include) { + throw new Twig_Error_Syntax('Only "include" tags are allowed within a "sandbox" section', $node->getLine(), $this->parser->getFilename()); + } + } + } + + return new Twig_Node_Sandbox($body, $token->getLine(), $this->getTag()); + } + + public function decideBlockEnd(Twig_Token $token) + { + return $token->test('endsandbox'); + } + + /** + * Gets the tag name associated with this token parser. + * + * @return string The tag name + */ + public function getTag() + { + return 'sandbox'; + } +} diff --git a/Twig/TokenParser/Set.php b/Twig/TokenParser/Set.php new file mode 100644 index 0000000..0b41909 --- /dev/null +++ b/Twig/TokenParser/Set.php @@ -0,0 +1,83 @@ + + * {% set foo = 'foo' %} + * + * {% set foo = [1, 2] %} + * + * {% set foo = {'foo': 'bar'} %} + * + * {% set foo = 'foo' ~ 'bar' %} + * + * {% set foo, bar = 'foo', 'bar' %} + * + * {% set foo %}Some content{% endset %} + * + */ +class Twig_TokenParser_Set extends Twig_TokenParser +{ + /** + * Parses a token and returns a node. + * + * @param Twig_Token $token A Twig_Token instance + * + * @return Twig_NodeInterface A Twig_NodeInterface instance + */ + public function parse(Twig_Token $token) + { + $lineno = $token->getLine(); + $stream = $this->parser->getStream(); + $names = $this->parser->getExpressionParser()->parseAssignmentExpression(); + + $capture = false; + if ($stream->nextIf(Twig_Token::OPERATOR_TYPE, '=')) { + $values = $this->parser->getExpressionParser()->parseMultitargetExpression(); + + $stream->expect(Twig_Token::BLOCK_END_TYPE); + + if (count($names) !== count($values)) { + throw new Twig_Error_Syntax('When using set, you must have the same number of variables and assignments.', $stream->getCurrent()->getLine(), $stream->getFilename()); + } + } else { + $capture = true; + + if (count($names) > 1) { + throw new Twig_Error_Syntax('When using set with a block, you cannot have a multi-target.', $stream->getCurrent()->getLine(), $stream->getFilename()); + } + + $stream->expect(Twig_Token::BLOCK_END_TYPE); + + $values = $this->parser->subparse(array($this, 'decideBlockEnd'), true); + $stream->expect(Twig_Token::BLOCK_END_TYPE); + } + + return new Twig_Node_Set($capture, $names, $values, $lineno, $this->getTag()); + } + + public function decideBlockEnd(Twig_Token $token) + { + return $token->test('endset'); + } + + /** + * Gets the tag name associated with this token parser. + * + * @return string The tag name + */ + public function getTag() + { + return 'set'; + } +} diff --git a/Twig/TokenParser/Spaceless.php b/Twig/TokenParser/Spaceless.php new file mode 100644 index 0000000..1e3fa8f --- /dev/null +++ b/Twig/TokenParser/Spaceless.php @@ -0,0 +1,59 @@ + + * {% spaceless %} + *
+ * foo + *
+ * {% endspaceless %} + * + * {# output will be
foo
#} + * + */ +class Twig_TokenParser_Spaceless extends Twig_TokenParser +{ + /** + * Parses a token and returns a node. + * + * @param Twig_Token $token A Twig_Token instance + * + * @return Twig_NodeInterface A Twig_NodeInterface instance + */ + public function parse(Twig_Token $token) + { + $lineno = $token->getLine(); + + $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE); + $body = $this->parser->subparse(array($this, 'decideSpacelessEnd'), true); + $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE); + + return new Twig_Node_Spaceless($body, $lineno, $this->getTag()); + } + + public function decideSpacelessEnd(Twig_Token $token) + { + return $token->test('endspaceless'); + } + + /** + * Gets the tag name associated with this token parser. + * + * @return string The tag name + */ + public function getTag() + { + return 'spaceless'; + } +} diff --git a/Twig/TokenParser/Use.php b/Twig/TokenParser/Use.php new file mode 100644 index 0000000..3ea68b1 --- /dev/null +++ b/Twig/TokenParser/Use.php @@ -0,0 +1,76 @@ + + * {% extends "base.html" %} + * + * {% use "blocks.html" %} + * + * {% block title %}{% endblock %} + * {% block content %}{% endblock %} + * + * + * @see http://www.twig-project.org/doc/templates.html#horizontal-reuse for details. + */ +class Twig_TokenParser_Use extends Twig_TokenParser +{ + /** + * Parses a token and returns a node. + * + * @param Twig_Token $token A Twig_Token instance + * + * @return Twig_NodeInterface A Twig_NodeInterface instance + */ + public function parse(Twig_Token $token) + { + $template = $this->parser->getExpressionParser()->parseExpression(); + $stream = $this->parser->getStream(); + + if (!$template instanceof Twig_Node_Expression_Constant) { + throw new Twig_Error_Syntax('The template references in a "use" statement must be a string.', $stream->getCurrent()->getLine(), $stream->getFilename()); + } + + $targets = array(); + if ($stream->nextIf('with')) { + do { + $name = $stream->expect(Twig_Token::NAME_TYPE)->getValue(); + + $alias = $name; + if ($stream->nextIf('as')) { + $alias = $stream->expect(Twig_Token::NAME_TYPE)->getValue(); + } + + $targets[$name] = new Twig_Node_Expression_Constant($alias, -1); + + if (!$stream->nextIf(Twig_Token::PUNCTUATION_TYPE, ',')) { + break; + } + } while (true); + } + + $stream->expect(Twig_Token::BLOCK_END_TYPE); + + $this->parser->addTrait(new Twig_Node(array('template' => $template, 'targets' => new Twig_Node($targets)))); + } + + /** + * Gets the tag name associated with this token parser. + * + * @return string The tag name + */ + public function getTag() + { + return 'use'; + } +} diff --git a/Twig/TokenParserBroker.php b/Twig/TokenParserBroker.php new file mode 100644 index 0000000..6ca73fb --- /dev/null +++ b/Twig/TokenParserBroker.php @@ -0,0 +1,141 @@ + + * + * @deprecated since 1.12 (to be removed in 2.0) + */ +class Twig_TokenParserBroker implements Twig_TokenParserBrokerInterface +{ + protected $parser; + protected $parsers = array(); + protected $brokers = array(); + + /** + * Constructor. + * + * @param array|Traversable $parsers A Traversable of Twig_TokenParserInterface instances + * @param array|Traversable $brokers A Traversable of Twig_TokenParserBrokerInterface instances + */ + public function __construct($parsers = array(), $brokers = array(), $triggerDeprecationError = true) + { + if ($triggerDeprecationError) { + @trigger_error('The '.__CLASS__.' class is deprecated since version 1.12 and will be removed in 2.0.', E_USER_DEPRECATED); + } + + foreach ($parsers as $parser) { + if (!$parser instanceof Twig_TokenParserInterface) { + throw new LogicException('$parsers must a an array of Twig_TokenParserInterface'); + } + $this->parsers[$parser->getTag()] = $parser; + } + foreach ($brokers as $broker) { + if (!$broker instanceof Twig_TokenParserBrokerInterface) { + throw new LogicException('$brokers must a an array of Twig_TokenParserBrokerInterface'); + } + $this->brokers[] = $broker; + } + } + + /** + * Adds a TokenParser. + * + * @param Twig_TokenParserInterface $parser A Twig_TokenParserInterface instance + */ + public function addTokenParser(Twig_TokenParserInterface $parser) + { + $this->parsers[$parser->getTag()] = $parser; + } + + /** + * Removes a TokenParser. + * + * @param Twig_TokenParserInterface $parser A Twig_TokenParserInterface instance + */ + public function removeTokenParser(Twig_TokenParserInterface $parser) + { + $name = $parser->getTag(); + if (isset($this->parsers[$name]) && $parser === $this->parsers[$name]) { + unset($this->parsers[$name]); + } + } + + /** + * Adds a TokenParserBroker. + * + * @param Twig_TokenParserBroker $broker A Twig_TokenParserBroker instance + */ + public function addTokenParserBroker(Twig_TokenParserBroker $broker) + { + $this->brokers[] = $broker; + } + + /** + * Removes a TokenParserBroker. + * + * @param Twig_TokenParserBroker $broker A Twig_TokenParserBroker instance + */ + public function removeTokenParserBroker(Twig_TokenParserBroker $broker) + { + if (false !== $pos = array_search($broker, $this->brokers)) { + unset($this->brokers[$pos]); + } + } + + /** + * Gets a suitable TokenParser for a tag. + * + * First looks in parsers, then in brokers. + * + * @param string $tag A tag name + * + * @return null|Twig_TokenParserInterface A Twig_TokenParserInterface or null if no suitable TokenParser was found + */ + public function getTokenParser($tag) + { + if (isset($this->parsers[$tag])) { + return $this->parsers[$tag]; + } + $broker = end($this->brokers); + while (false !== $broker) { + $parser = $broker->getTokenParser($tag); + if (null !== $parser) { + return $parser; + } + $broker = prev($this->brokers); + } + } + + public function getParsers() + { + return $this->parsers; + } + + public function getParser() + { + return $this->parser; + } + + public function setParser(Twig_ParserInterface $parser) + { + $this->parser = $parser; + foreach ($this->parsers as $tokenParser) { + $tokenParser->setParser($parser); + } + foreach ($this->brokers as $broker) { + $broker->setParser($parser); + } + } +} diff --git a/Twig/TokenParserBrokerInterface.php b/Twig/TokenParserBrokerInterface.php new file mode 100644 index 0000000..3ec2a88 --- /dev/null +++ b/Twig/TokenParserBrokerInterface.php @@ -0,0 +1,46 @@ + + * + * @deprecated since 1.12 (to be removed in 2.0) + */ +interface Twig_TokenParserBrokerInterface +{ + /** + * Gets a TokenParser suitable for a tag. + * + * @param string $tag A tag name + * + * @return null|Twig_TokenParserInterface A Twig_TokenParserInterface or null if no suitable TokenParser was found + */ + public function getTokenParser($tag); + + /** + * Calls Twig_TokenParserInterface::setParser on all parsers the implementation knows of. + * + * @param Twig_ParserInterface $parser A Twig_ParserInterface interface + */ + public function setParser(Twig_ParserInterface $parser); + + /** + * Gets the Twig_ParserInterface. + * + * @return null|Twig_ParserInterface A Twig_ParserInterface instance or null + */ + public function getParser(); +} diff --git a/Twig/TokenParserInterface.php b/Twig/TokenParserInterface.php new file mode 100644 index 0000000..12ec396 --- /dev/null +++ b/Twig/TokenParserInterface.php @@ -0,0 +1,43 @@ + + */ +interface Twig_TokenParserInterface +{ + /** + * Sets the parser associated with this token parser. + * + * @param Twig_Parser $parser A Twig_Parser instance + */ + public function setParser(Twig_Parser $parser); + + /** + * Parses a token and returns a node. + * + * @param Twig_Token $token A Twig_Token instance + * + * @return Twig_NodeInterface A Twig_NodeInterface instance + * + * @throws Twig_Error_Syntax + */ + public function parse(Twig_Token $token); + + /** + * Gets the tag name associated with this token parser. + * + * @return string The tag name + */ + public function getTag(); +} diff --git a/Twig/TokenStream.php b/Twig/TokenStream.php new file mode 100644 index 0000000..8d2e220 --- /dev/null +++ b/Twig/TokenStream.php @@ -0,0 +1,155 @@ + + */ +class Twig_TokenStream +{ + protected $tokens; + protected $current = 0; + protected $filename; + + /** + * Constructor. + * + * @param array $tokens An array of tokens + * @param string $filename The name of the filename which tokens are associated with + */ + public function __construct(array $tokens, $filename = null) + { + $this->tokens = $tokens; + $this->filename = $filename; + } + + /** + * Returns a string representation of the token stream. + * + * @return string + */ + public function __toString() + { + return implode("\n", $this->tokens); + } + + public function injectTokens(array $tokens) + { + $this->tokens = array_merge(array_slice($this->tokens, 0, $this->current), $tokens, array_slice($this->tokens, $this->current)); + } + + /** + * Sets the pointer to the next token and returns the old one. + * + * @return Twig_Token + */ + public function next() + { + if (!isset($this->tokens[++$this->current])) { + throw new Twig_Error_Syntax('Unexpected end of template', $this->tokens[$this->current - 1]->getLine(), $this->filename); + } + + return $this->tokens[$this->current - 1]; + } + + /** + * Tests a token, sets the pointer to the next one and returns it or throws a syntax error. + * + * @return Twig_Token|null The next token if the condition is true, null otherwise + */ + public function nextIf($primary, $secondary = null) + { + if ($this->tokens[$this->current]->test($primary, $secondary)) { + return $this->next(); + } + } + + /** + * Tests a token and returns it or throws a syntax error. + * + * @return Twig_Token + */ + public function expect($type, $value = null, $message = null) + { + $token = $this->tokens[$this->current]; + if (!$token->test($type, $value)) { + $line = $token->getLine(); + throw new Twig_Error_Syntax(sprintf('%sUnexpected token "%s" of value "%s" ("%s" expected%s)', + $message ? $message.'. ' : '', + Twig_Token::typeToEnglish($token->getType()), $token->getValue(), + Twig_Token::typeToEnglish($type), $value ? sprintf(' with value "%s"', $value) : ''), + $line, + $this->filename + ); + } + $this->next(); + + return $token; + } + + /** + * Looks at the next token. + * + * @param int $number + * + * @return Twig_Token + */ + public function look($number = 1) + { + if (!isset($this->tokens[$this->current + $number])) { + throw new Twig_Error_Syntax('Unexpected end of template', $this->tokens[$this->current + $number - 1]->getLine(), $this->filename); + } + + return $this->tokens[$this->current + $number]; + } + + /** + * Tests the current token. + * + * @return bool + */ + public function test($primary, $secondary = null) + { + return $this->tokens[$this->current]->test($primary, $secondary); + } + + /** + * Checks if end of stream was reached. + * + * @return bool + */ + public function isEOF() + { + return $this->tokens[$this->current]->getType() === Twig_Token::EOF_TYPE; + } + + /** + * Gets the current token. + * + * @return Twig_Token + */ + public function getCurrent() + { + return $this->tokens[$this->current]; + } + + /** + * Gets the filename associated with this stream. + * + * @return string + */ + public function getFilename() + { + return $this->filename; + } +} diff --git a/Twig/Util/DeprecationCollector.php b/Twig/Util/DeprecationCollector.php new file mode 100644 index 0000000..e406f0a --- /dev/null +++ b/Twig/Util/DeprecationCollector.php @@ -0,0 +1,82 @@ + + */ +class Twig_Util_DeprecationCollector +{ + private $twig; + private $deprecations; + + public function __construct(Twig_Environment $twig) + { + $this->twig = $twig; + } + + /** + * Returns deprecations for templates contained in a directory. + * + * @param string $dir A directory where templates are stored + * @param string $ext Limit the loaded templates by extension + * + * @return array() An array of deprecations + */ + public function collectDir($dir, $ext = '.twig') + { + $iterator = new RegexIterator( + new RecursiveIteratorIterator( + new RecursiveDirectoryIterator($dir), RecursiveIteratorIterator::LEAVES_ONLY + ), '{'.preg_quote($ext).'$}' + ); + + return $this->collect(new Twig_Util_TemplateDirIterator($iterator)); + } + + /** + * Returns deprecations for passed templates. + * + * @param Iterator $iterator An iterator of templates (where keys are template names and values the contents of the template) + * + * @return array() An array of deprecations + */ + public function collect(Iterator $iterator) + { + $this->deprecations = array(); + + set_error_handler(array($this, 'errorHandler')); + + foreach ($iterator as $name => $contents) { + try { + $this->twig->parse($this->twig->tokenize($contents, $name)); + } catch (Twig_Error_Syntax $e) { + // ignore templates containing syntax errors + } + } + + restore_error_handler(); + + $deprecations = $this->deprecations; + $this->deprecations = array(); + + return $deprecations; + } + + /** + * @internal + */ + public function errorHandler($type, $msg) + { + if (E_USER_DEPRECATED === $type) { + $this->deprecations[] = $msg; + } + } +} diff --git a/Twig/Util/TemplateDirIterator.php b/Twig/Util/TemplateDirIterator.php new file mode 100644 index 0000000..3fb8932 --- /dev/null +++ b/Twig/Util/TemplateDirIterator.php @@ -0,0 +1,26 @@ + + */ +class Twig_Util_TemplateDirIterator extends IteratorIterator +{ + public function current() + { + return file_get_contents(parent::current()); + } + + public function key() + { + return (string) parent::key(); + } +} diff --git a/img/scene1-with.png b/img/scene1-with.png new file mode 100644 index 0000000000000000000000000000000000000000..659271879aa596e623b09c8274be026994abc1fd GIT binary patch literal 195683 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

kGh$q3RArarfZ5uM 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


XRz6KLdy~uM4^jT)eALe{uU%Ap`D$b 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 tduO2X}W3 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 LX+JGju?+rS$xSG5 literal 0 HcmV?d00001 diff --git a/img/scene1-without.png b/img/scene1-without.png new file mode 100644 index 0000000000000000000000000000000000000000..be7c7fb46325f5e36da4b51d0659447769cb666c GIT binary patch literal 158024 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 z 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

P3aGR7?1DuYE_Ihlm%=&ibQ`@ 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

ua+M*uK(9ruu{BV-C z=+r^H*SjSuwRjOR$+Wd8aTwXYI{J^Cjt39!g`35>;-&t8F>dk)&%ud!s|*BIDuFajcy zsY@wXH|Ha^TLM1^=^Tp`g!=7$DiPMfS6>eBLgVhEj2~P+fk{fdCu6VTcc{|GHfD_pFNAyhjtpdZ~D??#xT-h z?S$}V(pm=t-<*I$M-E^(W2<}>Iw8a)m3B;K?A3SFR%5r$Z=HeC{TjVKE`AJA1ZJrUssUOFIfG1b@Fh=x7sA4aU zSNwgiUp)+(JpY;FH1_c&2#%u zwNQ3s&07OkB9t&Y5@G6I2A3?TQolL6v~P(_?(S$ia3cGb?$GwV+z{oTqfcU+Y4Oyc zi3^P`#6>>Af-!wjxy4I}ldj9JJ|iBGT#DZ(eXNBVorQ7z+%c@*umS5ftU>3RrO|D~ zOqQ`^`1(&v{(&!H-n7MsJZXUSJ8A3B94Ai(VB`K<#5Z9Ahk@$8AeK@bDgkHp3BSvBSffKlV@eHO6>xA+x`WyQ% z+CD20hITRKC_~+~eA1SYFQWB8=3V@5@(S{>Yvb~mP2VgZb=>DI6ev-O@%bCrx#xRK z8rl^qug(wnIihp&> zR8;kTjl`uA*dC*8p3La;?rcL;IUpIKZ^plZQr_>GpobhZj5zV_SQKyAlRvd;LnEz2 zWR{=hJv%1RiS`|}!{Ct=bPU-`H36|S0>SDOm_?*XX&k>DtgGxd4uhJN#2cS8kfty% zojL*)JAGsnPAf6Clz0qkQ4*hgy_@a(qjsT6_?Zq^G%)jBrktE*GOnFHgD1R~9xNl^ zNQB*8&9g!-RCLXHxw~fMcXznvX@gKHEpha}a}9TciLt3?H!H#}OsupDtA|8%{JdpIuc=hzs|tk#iclo-Jy}EleHy1 zLW=_KOrjUj;uBxCacRScG$exzt+f)>o&ox-mFEnvHCtb&%O^+_FZlc6wz)!HQE4On)+vCuR*n*}8owm#m}R0m(6VzDiN7I;*Wm5qPbBDGZ&wf_GS- z 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

kGh$q3RArarfZ5uM z)zm4OxfaHOiqx=?@>9DtoyXZignpYx&)G3vv8@c>)Q5vmcz%-y{u5S0!=Kr;Du{=w zQcQ)i)8hA^Du;^1wbR} z)ek?x*%chow)hX04?Ehjp7UGk{OOXX#XaZL;>^L+zFFA3eT=%3(xU+=suaZ;aLn`s zBaf4H($Cw-B)PZ85CY{%Zcd%6d!-RkM`-yP6lbu#`5)v`no`X}T_8!MuUue5GM2%OT5mDYJBz`@xQ`$MbkX?`Sq+h$7|r8l6S%u+L=@q4QvSr`W#? z5c*g~$|1Iymk;3R-6=GN#Kt9imeD}zQM>5-y7En9ip&4ayj#NCSJDX<4d1HtK3nXm z`Kq@j*(cb~{)w=miL;4nXPcuDysoq%up>qj!^w}8Y$L!NVcisBb>6!$Km4b$ELV?8 zw9wxyf$dsvN1An;{$=|j+g`EJ8wr+pL_4WwZ6X-!d#F8@Iqns@oX{Bv<+>=j0IqC! z@n}BA=W(zcX6s)s)g0WRQ8_%6km6jg;@V5Nb>AbUW@p{q zLDQBE_uEVI&8D~S1((@1>{fB3=z3=gv1Z?eN`G0by-)O<(L~RwoIzBzVCyc{H3t5u zM8@2{{g#cgA?b7}oD1m6ld6{;R&IY2d%@qh1zlpHuEg~P^ z=q0P)Ed7o4C6$gp=cVhvKqq}zz+XhMID-=U1I`o}Ro7CqmjMJiY?wynq0Q zsa3(9G;MeKWrh?1JPh^RI+?FgjPD^`5+VmR#fd2xk%iq{T#`cJ(XjZCQGVkvAwH9n9FPsXqdv*H-g9H%pxdy%GnMNLmdzt#9&1#)h~Sb zz0u-aR0*V7b(V__?UBFVL(A6^yBM;yv%Qjwqn3AbVLXZ7yXy75s@5sy-(xO(O7O4| zl&XpdFgN|(Qa3sc!6w?4d)5G;m+EeA7eI_wRjl2{uF_%U&1hYW7(e84CXVETAsVZ^ zn{=Yv?>F+I=ZCYY$bZZcI&C^i6}_^n5uvEaA*Y8?JB8M~6Rh78YqXhBE|4Z~ZrV)y{)A7uL@#Fn|t|bX|3JD;?7)1^;^D57Yl@rz2J#;ROHtYcn+pafx0=k|BuQ2KS6Hzp(9c~ zisYwFUo_uK~fbBKA1I8@L~JY1)xuO}%C) ztU$A{M5!T&z{lffi0t?y@$(Hrxn}*VY>co4;WuPXEbf6N6Ng*)e75}Is7eA8Y@BB0;kP0i?1+a;u0Y1#w;tcu^hr1_ z2^vKQuRQtt`dCm0ndd7I9rz-B51Vo!1LI`XcN3~)6@F?TO4~0zb7Bu z<{du_P55{#zrMMGC?TbaZvw?5d%pssN^qx{oKbTv-AiY5gS;2`6GUg(qSr1vVAFbSD5{B5~@=4zKdHkKf zC7Wvf&7LQ#s0T=sO%-%^<%b%)O8(tt;G&1y5@2`T#*iJ2XBZ9A=dankJ28odx72gM z6;iWh#WB^fPak@Gg;N!JanW_#!4B1KAx%)Gc_)6IMIMnHzgLLdzpGXx{Nc2xSX3;9 zM0}i`vy|snCbDm|u?3+%bDBv6cb(R3Rn`5^GNIMpJu>abvo1A7kT0A?9tPiVpKj%W z`-dusFW7pNBSd-_@6NRm+2xt6;Q#CFe|8+))(^jQS)=iQ^P4i;tQy#2p=g8M!b0(* zD|n6k9o52ySNFrb;<>5)gQ!!Uk*s@>nYL1z5g49Qage|3$s%+Hr!V+}aYVtVCz(Ct zLUj1Y&EIPt$FXDuZ~C>|993kl@sc}MmHglTz5MjQ%d;NjeB>g+#9#ehe!^uU4{>S5 z7C2T$wA4gx1}8d?*^zy2j%b;YGna#TOW$GA(#CFnBDQG!zs_RhHU>XFOhIW2R0#~h z7msn6|NIACB?xDFG`+#KhoeW2h`d_t1sd#D5dBw4qWVNrjT;xRys!EA8v=-eEnk>J zJHPRx3lvo4bjy(~Zap?W&g7v zIIL(4xfv(hyh{id0-%W*UiK^%iimE9_;OZj9k*?O_w_kM5Lvli}vA)ePr>xO4Km>lXNRtLOyIrSCtMKwNOE8Cy|kPe%f_M!D*#LqcRm_FC1aoU&o8#eSv;+1J%cFEjc*IhS+^t#%wuDCj69A5LS*7L6wtg=9;l41^+M zPYimG2g0H?YZ91|`I_HXd!7VE-JY=CYN9WKlAI6LADJNnp5SyoyHoVkS*IYiTY7X3g`oERaOiEFraogsU zi0NM}Yq6=o;fMw)Q=*8&=55}yGKGjeQuB{eINfoO%huYzSK1Uk~16xGpjqpkG~bjq2p%q{@tjz-)X@Up8$FYm;}7-9A=G42iZO@8+jN`u57U) ztQVZPDlZANv3!PFyt*u$m5b%o<(6$i#Hf;2U-30DXS`i$=kzC*I@m>5D0cPbs#@gq z1_dIkT&h8jJ>?25+#sF*hoD!S0#{2&NZL?-CxT+1Y3;Sx10>>f)Vn?$M5&7~`WIb5 zkIHj*_P)+r*1wuljLf)DN4Hxf+5*qL3`1P`7XMtJk+;}QBRd9$KtD!lJMgJ^1f)G{ z+FY^s!7+}3=bymwh{hZ}xEnmbM0dZCSyEbkSNZ-8Ve<1Qh9`?YXGC<>#?jJN#aAu` zqL=@vAjFWzPr9tPnK15FRG?4(nuj4O4rSA^a zNviJ7`VxxeYV3YW!8`@=O~vF| z22U-!w}~H5zn7=Lq@=$sme>yIhT5zBR*S@d?N!$x9Wx(Q*;QLBD->_&4$s-|>$A=O z0xkWU_xpDgHaP+O=)~P2YdMc7fAEY$>~&V?D7?=U8x~1 z37>h^Xp8*eLvJ7g()4B5CFb6dhC3O#^(s=6|#Gu1u(8it|XhEub&meop}?E#d3=%8>mBe<&Sx zTbdWOPxMP4^spY7?-ree9#_7M;43HD%mV#<$>XKAJ)XRrkYyM>B&{ zHBsI6|6mLGTy>W!7oNk0C`?z|z3+B29g_lEY-Sj_99Q+Oa#5G5k8ua0OeYH*$(AA$ z311|TiFl8qa(C{Qj6RM*7)2 zrr<&T;1Knt;J>c>zT0Q=EY8wY)*`$_!rV+&zRH+n?{C$G;Upt zh%i`7f#i6GR=rIlqb3dzlK`{1#fx~&z+BBUV$WF51P6t#>x;SHk}}Snw7@K8SBwP0 z==h8(`ZUp6=f@5gg4ejZt?%C-K!s1A5z)~yCEEf9YoA+W9=Bi)w-mF#0~UoCV^5-= zNnWiAhl{&*j&b5vf@-%0qjFq^z_2Z9(8z%Pld$AO-+=xDyjgVz^G#krLV7MC0rJ`T zysP7Ci#`5URc@N{W3jk+bn&XZ*>-pl+*SPyeMWL#pthT(o!d@pJuh=k&s_d$ku%C! z|D(BNrLS36C6sqyCH{uyx@4tmyDIWYrG#itdpoP^we{w;?dLbgLh+%B(tTHi9&LfZ$_XmDLeAlbUTw4d#7kzjEYTYRh5Tc= zIi-*ne}}TdgH!z6`ikk3*5*w5soer>iY-S!jfX7G((V6`slSYhvuV19;WHsYf(C+H zaCi6M?(V_eA^1#i2<|$#ySuv%!QI{62lyt}{k&^^|7Z1rKB}v$_paL81*3rP6Pb&N zAe+*3H@Eh>d-RF0eqtrpRJ9?z!J#__(=Doa-iIb)tA%{S;@v&0QP(dbNwAX2GXyp%&8NCz~;8BgebEoZ%Lk`dcdNXY)oTWinB1$6m%8@Lk*40oD62ztp1LL3elnPcHWHuE<|N3W5C427z##OY41~ zecluFV-{c7wf_|oTV-I^Pyjr%-KFqE{W27p_mWgP9q4XbRm`f?8)6$?zNG%si0}iW z=p^!aO=3>7DpzFzf7@PWz1}-P54<1zK|0q%DVqem991uZ*8t%P7+(c^$;^AB7wBGr4N5!R)!R zqqP!qOI3SY*6ks`Y_w87*qke=MFRk`&o9BAPvvev_zl?)&uM>O zaMOG``{>@O+ba)?BT>0fu8v4(cpT~nvoV-bV^VGZ%KHfSNJ7sqhZ&>KN=u`9AxusY z7SBG0%+rK#li~@^BYTYwH(8&1L5sR+dyb@{Q)XrnH=DM}uw-&!r+G%oPDpVSYI@%nJPCYZxG2X8d>ew87U zkZ`VIVWWE;T;1EziS(Twd&sVq%rv3lxDu9WT>L1~ge5hsX>}Y^hqL$GO{qfByP3t( z#31st-kfN%FnS8cX!c@|*k;@Q+5R5f=Ewo-hWFs_%_yx2PNTk)lO+)JB;x9Q>tKh( zpPQ%5%6pJ9ej4g|uUBuA907#|ZIpaE6~GCv0QUbp0dt=bVLnKbb6))EqY?`FdF@`4 z(oQYYCOJ6pbDPWQ5`^JTQrE}g@oScBixtxofzh53DjXILx?|4P2La%>9-TxW{QXLD zBBpZO{#AMdS(4G)2Nbf*z@CqCFPEb2LY8RD?uVh+cw7>9$CG40zmIVrNJ2$m*YwxE z8M(4W|6#@hwb17-cF zy^mO&O9k`eFr;&LA@+dj0@dA&z?gK2n7?TcyS!C2aW?WvTxUec7D(Xg^K*b<8=PBM zHPpT|B0`Cgo&H;L08{uI(%@2^h12PxG6AOh<0T1HAYRRGvD)+qz2Rk_3lZD+4f2%2 z=FMq7kr||2XI`qm)GT|D!jgA2h~F_ARjl9YDzVaNH`S_6S8u8CE~ZkrbqhmR%++0}OkpwM{dKV(l(NW8 z0q67eE$TxV@I>)e%75UGpzn*!bA;c(=%jjY7zR~_uRtwu7DTUVqKdDaxh%jMb*78# zQ-Sj*d1+bDeI?i&$5Bl=ndD@J%Hk-lUZaU<1s!=VsC6 z-j;mbRQDd@gru4;_0{LH2aX#6X&wc7`D=5@EkL(8?q+z07zlBa>_~I7oUi(4iy188 z^?T_c?RB>Ax6$H(Ky6?QbC$`k`9d<1t%fqqs_jXk_x^_sV6;(RFbzz&7?WYA&j_f~ z>Obyx&Z@ODu4riOsNP@au+fRb?U?O69&pt8_H1Lj-mcwpw$enG7riF}a|x~2N5Ah% zCP`bS8uZGsZDn9vBwrKtp_#v_CczNKUh@|S^*$}HZEtb#ZUX=+nHV&$Xo0P@{V@~GCuFp?|5HygeZV`bD(F$x{w9<1}V*!g9($I8D<5hKV*Pz8WJQ@>s&fD zEA@EPij{<04zhrPo)Viu*ak{t4LS|hLD+^qU;mjKjJ0^|+V({X2GfYB!Q~p0p#(B*WE2#IUtA9BYJ0smh}eweFDq^CRkT#W@6h5s zekYU9z0wOS%cd}33_N~YL!WA2m}N!GVjL)gXrbG(I?)1U#n_2BQm)5@iALQk^;+JF zKy|+9rsJ;rZWcoPSPVL9N55&+OUW^61|#vQn)2??R_H_qIq#oOs><%o8wDEsQrRrF z;}r#^?O*t7*J@v<3Ar7A90{N=gkv*NHu)9`v9hYP1O^7~a!M!Hg4R#c>e?1MZa)TgXqkDr8>5S7^nf}jn1rG4W0?_a4ZX0tihS#NTu{r?pGK7O8+!_yyC|3r?X zC-Acp@B7z0HVcUSlHyZD!a|1I`r7%%BoEnM!^>J%dRM|5!hv@o8?cCqyJ&KWklzE% z^JZV&EtNr+6LP=e;C?4r1T`puIxHLZ)>o;{P_ZDLT}h^)K}Wf6#4YelXp%*zoLoU{ zF|N?xjF4Tr?nmGgMk2Y)N7k7Wj2r}`@&lfaimdCi?2l(lM(Y04%QXX|{B@e2$l%#@ z)^h0!fgUWXNlxg1jKPFXb+2k%-E1>7iYbT2wAEZFXU4|pco?8MyUy42ThQ06`tr-e zMYKdD9*JZW!H83;RqoUPMRP_C^Vn3&I0ySQ#`yiDU+#i|H!?KV6qAlVz`#=bOA3Jl zRPmx=$Dfxwyqmn%`Nr#sMRtW=7p?9sS4jT0A; zQe|ECNChted;mT-SO9@s^qicWMlM*cL4)1hKR8r{hbCO4G(5p4P+b*gn_#MO7dC^N zCQqoAVEV%N&EcVC!>2_2`xq$|Gz@KPQ;LMH>i&26B6$>!Fxape~^d-R)9Ln zi;C`Sz`hjCUQckN$3B69bPtUymu!MFCL(e2r zL9C!3XD3~OF&Qa1lo^+9YplhX+6 zUet5gP!fY~seCLuDgVOt-z|ZQv(lgTh7w5r-)`WU0~68!A^&zmYJqt#RQKiK zbV-$AVMnDxBH)cX-|L!ID14y1OjZN(_E>LwB2mUUnJ$ zTH+wn^C&rsW5)k);eUeQ^Vvpbj01T)a2+jqWM)CVF9XQ z1RU1eOU_eayCepKN}>;&GZwWqI$!TsOnJ7H|1T1q{9fFg9PNYwcIr$}A8QZNy$eacToSpdAAo*q;NcPQDm zj}&zTy`&0~g3?T@|J_tDWENd`P^Ese9cVt0K~23DeH9ZhJEmt4`d==7{|4RBVdiXG zZhXzv#hr!)16j`QOy7I$)1^Aev6#VkL<^qUCEFC}J@Xv#$qmgt8giHyJ?l0TP2-J+ zN3%swOz`7yu_iB$?3f&&%E9saKRfQ=!9FN*7K!v(wenCd4=`J-Jc8`^u>)FW@IiP& zW`>)kXb=+!&q{!gd ze}7O2b_PX3UZ@X>uUqrSWoM)W#@IuP0P7ZFvryPYi!9$lB(|HkzR|qF9k}_fo3`Jx zs>pckQj`GdU?xqe)&fI+YtDAhw?P@&sX%X)c;r^5@8-E zN^kahYWIO~Y)$9>hc6+>_(}93g}{GbCv}T!SB_Ll8<*Wusg^z!z`?Epqq?C)P1)8Lb;Y5eP-yA zs<7tcDLJl@G-Rt^<2JB%1?-A#Ao}^UvV896Y8$k>-J@kU6JJ(Ejhd6-7 zd-ZfwZ(3oIx|TKy3=GVVZ3_FQgQNN;&DManS@_dMrvA(ENea z^1jSrO`TKce3a@xf=XP-ibrVWFnN074kJ7>cB-B~pY0?%2ckpB$zt& z=U*xIoEmCjLmj35CB+&T%x@dSK34L_8 zsk53XY=&Z#q9-)Sks%+<#u9|je~ez}q`|0nct1e9u-aRza&nwdW8jzLf5J%*1vFsJ zol8kc8IaRU=Tu|2+;5zCNvGz+iKH}_uL|b|atnX0xLv`PE*+rgB|Sc5kPD#O|j8qiW3TCIz( z%}8hs{&(WpE5t#9{&rRK@508?^~IYD30up;Et=UZYY^+jrIgdM})R zFX7wkBJO&t#lv>5 z3=AV=Z6={<9EaY1NrDRY`KGWqv3uS5U^?7+V+%Q~qUws!qntevmT|pBg>r`rqhK&B z-j8A9aN5F4D83M}Xao>gL+XBZ#pw_Y{O_F1XY)fV3bvM+){MB=EFp@J78XNBE{Oh5JRf4-IQ&xYAq(Dev*`h3pnzKlTMG{-=!| zQI>vpc!>yt@GMQcffCuKpBO?JM$)w_1d45lViMdY=3yv3<5qcU1OafUAyou$Vd>9P zREti3iH)2PNLBTgExrc4O~uj`Cagy8l9F2zUYlPBhNsi%bZ|_hXz!rQ(om)Iuu&X< z&nUkl9IiLBuCA_a(VW?CCC&T^bUNAwB2&&}_S10UQ{MY1U+)EY(V=9|# zcb13PyxA!8J76`pw1&HUJqR;*0Qh5OMXQ%puR@jnFUHnN?Z_!V<%!3RJGwhb-Y-{? z7*uNCHJ=Ef%z)+PiF^OQJ+7HCX!l^r^w>tAxKuMx6nd>E{R19@mG9DlC1&7WNcZG- z*+(+)*!oF&lTL&)z#_%&2~VH1X)#y7PW+QTxe#JAEDv`X?OZ~))GhFBHv|x z+kmMX+KzYch!xV*Xm0zXe7a3}cl3b^6-C4|+x1L=n-H&Py`h$Bun*4@YtnQwKf)Rv zQxicHNdB2|^e;F9wxadtOcwUQdj|rE*>I9+53!J32wWD`6%>J!AsB24Pv_Iq=Z_(K zz&K=sh^|I)nGX|T7E=WCf3aHTenLK~E3nn$zXA^ljku99DK9`hAO|H=xUIf$UI+mt z+oU6eBL8UfZyhtfc1Q}_3SrQ?Q3htv-v|X;@01J0h9w^-#6G(V-(kZ+XDgp+)Q;fw zdS#|TINpR6nKZe(9Nz13hi805#PS5u7fo5cQdxt}`nwZksGUNt>I_rJ0yRiH;%|Cu zdVh~Q91`2(>TMu(P>xh|=iN_5f>d*BYs+#vUz$}qn@+1bJB=kGEKE8{TONxDy5IPO zUBb{R=zP};Z~$_TyEwtciF`*dWMqw|Qp{9iTPQ4dhE6U$!$s;Y%Up3qk#L1&mr-4R z1AJl7;S|f!TMCM}O5@}2r_Ss=M7C^bZ$EUTo?Pjc4JqL+Z z6;@B`OAz_K4{QiyFkj|*wQC*|eGJ`r#URLei9f#uDCF2htJ>iTyxeq4ybQEnea^bNnzRsxpzBj&?b>L1P z9FoAccT}O+)I%u-s$0`&!LE0YPfL9>KhmJFI0~R3UJ>%eKNs25FVL6M!7n~$5$Ga* zYX1EyW$pP5%Cr_=Y4s(D&cvcY-d-*|?&dV-4%@9lo#48mI8CX$&*3EdVg_gs7@lw^ zY%z~v@d=tL{``AN(uw0OZ}>idmVXZ49uPza4|atmTuVx}@H_9q%Ouhk+@cX$pj;FJ z580>TniIg3Zr?ngzI)vh`z5ZRkPOCUAD>P8%?+P2ipfn_x0pap%#6|S$<1GyX1;m4 zV%HwN^ciu`<#Wo_3~c|sH{80@L*P&yUK-?**zk7zo%`Py=K$ zcQq!f+L`(4@I531jZ!)w#D=k)4qW5B3sdw*^W{tI`IOLEnB zgKf^x`ma@2NITkJbGV$I)&2wPH~XhNe!A*AAtwu~rtBZPaUh`tTho8VWJSj&3{w_t z*xCo!Tpf=>{`gfOjO=z^Jp+X|a^_%i z=a*PStbL(uFO`!h9!=hGD6^Q@5Z+PjNi4~NBPH{HnhwFk4*TLr=8`!3;sbW_-E*6D z@VvfQu~SZQ<}LP-;vQPuxft{kok5R5APA;*%kA_UW_;HY$-PssTqtPw8 zmT{3+pPNTZKah7&}eRg|%d?e>0<%9)@c|mhRXpDrgkPJyUTc0Jwo%y7@9BzK> zYG-Jw#ze9KDJ9BnxRt!;;6PID-JHQ-<+6fdgo()vIwE={p(JOCq$alJ9m-s}*~>un{wH-(K|-_689n%PCP~`7bS!3M zo3h6iz^1N8=|i2Ka)+7F(99b)`%D~q-rr&oVNAmy^A0fu5Bcr75g~EX?JI+oYv&Dd z_#D2%@r_)m0HgX9C&wMu*-EL8qqnC1ZD{eiikbs)`Um9F8d|BuV+_!y--0{rom1P+37=n2>}affty!hK0x|SC9OAhlbn{< zVXMxU6Mo_1G(Pv^1l|=vhiW|XVVyPn1;)?YiSx)5fMt3jYP~|d`%KiY&XOV$B8k7R z9O@HaDi4L+NPf|0`t`QdNohCdtaT5-vcx;{SMT%9df(H~z?ppi!y41I=z{Zdq|zUY zBeTv(sK>CkQ+nO2ZRhTp*;Y!YD3{rVJb#(zL2F@8K@3yGq;hT1v>L2Q(kXQ4H*S{x zJ$PX^wcVm_z<3XvILEd`M23-C(tf*2Bob>8!&Q8mn2PmS4IU5m^GuTbzi3W?`QO_v zBa$xDWzZ3dJy2^_W{A?@F+u^IN65|O+-pdpStJk^>^Ai9!O;7Rqkv7zu#gmr=F|T} zWyPRa_dD3gmC!n$Dy4NGK@~t%=W(??!dnc5Z$};`@+6*r>);g~GYF4+fRU7iVt2Ki zeAaweI!luIgEqhQ0!RS+NHcIuTyZBNkJlPK$aDzbUcRqmn5>%%tDNE{Jly^c522Hp zJKOhIeiu2aJN%Ddyi0^%w}VG{`zK!ip$2So{%Bk%^3I0RBw5Zis6h{Rg3q|HFSf)^Y-x_5x{Yu(nRwVG;5na?=5{mW_8`Xq|URr%J z7I80C@5(Z!9V9d%+-WO95ExVPD9yclNV?1I;`fIez@RrQfnJ`(d~2^HEEQWsic9WJ z?s3s zksxXvy>_r3q2|kC1J-~u!c(GSs#Nh~R1PgnoGfZPhgre1-bd;6S{|}*CFPLbGMt5q zoW3l6)$P3-y|wGjhq@+mgHBXS$-^LDYF*}JG!pEvbkCfdA5kKT*?K($v=ah_7eCOY z(}ySWiI}8#_3~F`xBAbx?>h5c5V67Zn4s@sv#@sKvzb)N9? z4>7U*xtGt;npp@+jOC9p@jqokhDTIj)!`7}?CNypB$3<^$eznE5SxbYOn~ zX3YC;27ubJc*zWz&hAJn%|1$p1%KMWfbt+XIDUag( z5mI_gNPoWv!OA_xwHas9n4tcF8NERlvM^N?R3EKrlV&$mEZgawX`l)j4gku#K01#@ zC1!XcjAc=V?{LQ5n0WuA`Zs$Pts5uF_Pqi{p;1i1P;N*HHNdr-f06>X5|V|_`)mfJ4VQ5 z>}+feOB@_+qlfBreBh6+*Od1Gf`m~kw0j+fg7Pj1p5gfW*CykNMfQTCgs&q&bBOcq zpEPy;yOn5(HF#y)cd%=icrB4v}BT6-T^_6pfQQSF^^m;ZM8bF_iV3 zTqB^LY6Db%v5`Ytp&p@ZrGc=^m~Wr{q0)Is%|BM^ zC^IX9j@lZK+AiFG?@IH#`VjyYB~)xi%zp;rK3TJB>o!v;6^JrSxWuR-+CG*7>BMoQ z`vsq#ezyv3?mb)27xmu|2GKA5#60eKxK^kFMarEUryxqFznn+|WIa>29hA|7s%Pi++Yi^a zG$*L$RYnvzPs!Y*jOU`1(rjTW;Z4}Zwa|yp`1*vppx!F$&P&AyDYZJ~(;K_TT%c|u z_F#)xDDqgf3(UUwHdN1Ip^!d!z?>d=?ctSKJc?hBb?0VpNNx3`D=iz+`bF92BEDkK zS@&Kt3`_2O!2lw=%9Gi%=aB~t7i^QZlMrK_yN#UeuVP{T&P9kxU$os^&vw6@H7uWcjx9aL3S8Z}e#@h7 z@A+r0d&v@=*|TxC2kY0D0qNcRRn|n`4=m0gEBWSD?59L|I_`Q& zE5G4+i)MF;V`rIFU#({za%wz#nvBXw2^bN>cViDNa9$$mafI zCiLO6CqB31Kq#nD0y4VL0Q?JN>OS`TmX-*b7XnC%fcLL!`{4v{XfSiIS%mfOy0?B2 zzENV+QRF)Hk5BIVi3yWBw$~hS)qCF}GTuBpiP!UG-+5RZ^AuKwpc{mLDt?6fr z6WTx>ei_~9f?Z@u{GiEpaqQuA4aIfoq><_14b%O=T=Aznh2{Qry8)(=M5^EkT^dh{ zD>kW>?)e4^5aX~xC+_y1&S{X4(s#C*^FKs+`*gT_MVPa}q*K_?Y6LG#c|L7z&f82E z%a?j`2VD*-g?aleIN}-SgXZJ8AeSbIv~>UCIm29CouE3g^0n?nuS}~Tps7x$b;K+) z9Kc7n5T75>lB0mGQ2r(}AgjU(C?LlFhHn47Ghz!X?U^eK>~|coCgrLk2~+5uyy(iG z9%TN5rc;^cMZy^ECf*WUMWWK7D%op2#6&z?H&B&sLs^cv8K=w#+gMc~rE$)R{57rn z+Nh&W!Oo*dRA0P1eEzh&(y8%rm}}=-kFfyK(~%;_&+c}fNid;Y%2huB?ODin3m(e$0unw?rDSBg$5R2a!BTmvmgIhXpo7JFzvY$&seN(>qT zCRzdh(Pw13!PchajrR-p^R~;BO=4x}sL7?r$*sUc=gr#1s!Ow;3{H`um{}#vpUFDN zjg-1*4k5fQM-ssM316OU-yTWTZTw-_yv1LlQ&7!e7B=%d`#2%!;IXr+#A{!OoPH5t zu=Y+UOI7T#^l_;%fp7H8h=Xhb!jqF zfkd;CTTII2NmXC>>_aDW!R&6O%{S$~3wzyvatNhxszX_f-wJ0|cQiqUaHviBQC$pl zC=P0LrMwe9Rmrw|Cvsbp+^nQZk^RZ&*#)|!+7l=v{?g&`J1-_jmS!cUvZ)Ukc2cw4 zjvhowemJSIM&ogm}X=S7FL5MoQjL`wN?rm_?tt{N8_(6*vM{7jE^YpS8makKB8Rfdu&<&xWs*|%|3j{@yHIpgX(3fhV zcn4djWh4@C@|og$B&;Fi7b9pp`?@yDT{&b*kv+HX6;h}h;j7@r;{}_fx>fDNTS$BY zRVi_kq~rFNaOI!VaD<1Mmi`$h3SmZ-ef)x!&&Rrt_I-lr#8`KBm8I}ojemi3_6HAs zeU}~IgsI`1J~XK}n%Y5Wj|$&~B1Pf`aL!4q@#$@dnmf>K-EFK=tH#)4JB&&R%3P{d z>fzoU&%MO&To9#mIaCHFoI_h(3W7mUO8=af%XApc%+t}0zl>Iw_~XZqmG(_XhKhHoD$=g<+E%ptwpCkmls-_GmF{PmI8y z&Ls86;v=wQ$SinbglY5e4*CE`m_ow&YQCP+=NFq8wvCZfpf`(xLEcep`?vOLOv=A` zH*Xd0hQpo49(B3+uuwhZwRLYCFuG?Q@T22OE* zrZeQWVmWrZZl}8`Akh$OHQYTT&&%wC^qw?|_??eVi){O>X2qGMBELWSx1?A1=WTqq z$;5%=PvD-5!IFcWdZSn=w>@PDu3lrUhwHk~f@CtvBOvN{DQ>&4 zR&e@1gl|QhRx!v&nhLo-_68@>*ZMDn`Az~_7*nMgr~~pBVKP-DLB|0%xecOx=2HUO zHhS~K3jNcb2fp9^AS<~nY0ddQ4a8_aj;b#wyLAaRFDvfR8(NqH1A|HVNk5iATHx4g zM$P7q&#S~k9bIk#J7*ABM;!YFQuxnXoPSrE&+CaP03UcAw|YNwxVm=#{%|;7k*>4u zACkan`S-uQv1CnDqOOEHxD>*y84w`jCJo@zv}RaPW$5BodEoLq*Tge6$wuFK*^78M zTN1B>5jW6iv-YL854On{-<{N|4e;u9H$?f`vNZ(<8KQm#ToU-TmrmUS<4{jrS`jj~?dcl9}*d{QY)}L6nBMUMM;lT7GZZ9zR zQS+ZF`qmg&P#o1ox7_6C1DsfFU{`wD%K`dYoE0=b@~5ZRN`>(T7pjlOz)vL^7hgLo znySYC>|v=0$+|yx8w+Q!h@Y*6wS6^~EnJiFR3>ymM{vy`fRMEpV@!UmlDWwl*4X%~ z{IHhhH@WNrmo*^Dh%RSA6A{@jK}X@N6$o%=PMdaN)Hj+GOFkGav+f;p=4lhs$G&Xo> zFJJ5fv0KgKCQ6r1tYX;vTIbHPTB7iXKdA}ls|YxHlQ|Dp8RiGIrYz6!gl@f0HE?v=hUd9dn^+^1{6EI>ga&Jf$(*X^O~Llifv(TI%C zNi9pjR1WSNTol3n_RV$9>)`ltX{y3E%lAHY`Tk<#U2$Ic7Y{?&sa9ak9(eAGE8aHI z)vcW!4k%gDfb24(5@txncSrGNqV{i)E3~lh5ximJ02z{GqPR5?xkgjSQN4*EcBeW4GjmtJ2ApQ>INlZUj4r-rS$Ojp#y;rLGT=8;8*X zK!Tx8JN&7GNXpSPD^`!~c!zoFo_0$$2OlhEYzuJ6&S>J;Vmm+DfG@i;=g(_e>%LzE zNO<{yXsDk0)i>?5Tn8uDolmreu%iKr1HmZ*7DSW)9(-wX_Op5TS=uyBgfUKHxoqB9 z`b=#1s*hDGLw9#lk@Jg}D?|iBt;BiH?y4L6S4!*0k*#Dw+toTdQ>`K&)KRKrsz`&5 z^)T`{A>8wZVGNl#mfQP?v_eVcF2yR{;nVEdjxD^8=I0+j$%B3u(Ip7K`Ft)uUp-1g zZOoL{_;@!yKkzLCZjG3${+Q2TFPhLWFEGPh*ZbaXKfL%TJp`bsJ?@naD6@x8<0Fm_ zM*VRG@jN8*$d&_X#!C4jbUGXWbjv@nZ*2I5N2`E%fU-RA^#V0M3AES?qB~scMc%GZ zq@L&wkjK(sX3$B-m3Eu*8_AmK8)5F7mh6GlUzMfx)W@jZXNBKOqvB@k#jcVawv=Z;q(Ptuhw+ zGO>|IEyY`2Y+_&_;}=i5$t{qP)#i|lST%>-MIepjkhQQEmNHQ^89jrjJawJ3RLIF| zi2|Fh!Q%9QO^xSfOVVrgi(CR*kWgRJw>$aVxd_x1&SplzM%dCYF>b-*#RG;*>R@@@ z5=!HiFF_53`eKoBg2!zgHb&atFPA-G*)MnomyVjY>J&Hpb9I)=ux!^##3!UJZy~q3`N|d>)?t!ktjj7$)@yug#Cs)+ z@eE&M`^N-Ljnoc;cSEi%=%aU>tiVQz-`=i;zfBZW1Po&_U_}~Wu8>4l7G$kwciQZb zwD+0YtC0@$icF{ZzsZ+Pc^Wib>8xw5);Kb1R3iB2ZMWc5>j_4*)2Gp_V{bgA9j}&B zmT&Rj*=URJtsE-DQlXF2Dr&UhUNqVKc=J>ts>H|YB8P-)4wYYZsJ}(5Pwv#FzUo$c zEnAc_K6#H#cD{{xy1XHUm&{f-T;_5=t?yrt7Xb@K7fmo(hN?wZK{ zJ#B9`et9~Ctx@@2i|vvadl%%^c6j#u%k^8xS7_zkDLR`Xf`raP z>)eVo&b$uq?TKv{y?zJ6>2}+{ovVTD|3rTVzc@VWV-q7bhy;b_DbHZxusV|}gbY!$ z?BWr2C3%MK=1hz!x0o6okMrG(8c%Nq9V4e1@4TtXxL&7)Iq)lo@}84Bj@EZKZfI`T zY(J^;b4{pI=N`{p8ll6dYR}? zv&zbo%kcs8R~O%i<#BnD@iVH<;VRBfzfurATlJGEx=HZQ<=}bAnjKuAQ29I-Hky+n zaG@$1`tX|Mq1zWVO=R=O{kemrhTH z{Hu(A@ChfYM;^MXM6@1G%_iC$iLQ-yL}9jX1v>dpsb&qUsBhCfShN@?$%r9bJ7MUb zrID;ii)BhcSrL<1g)^k1lrKyeHKFvD9>D#>Z1=h*h5~`hM9Ur1Jy!CVWYpMcFyClP{Jew+ zOt=yp+>rJ66Gf9@>5jknnDOoD+_1TF;c*s2lEygh9Z`Yg!*CgrNPJ267kf30_FFY0 ziZ|Z-_q1L|!h)P+LrlyAGDX)Prko4NO`1_N{v2$B+4)uGo^$2161$8_AJ4pff@Md* zLdHi^h)qFng3Ta7od5q20~nwM0;4k~QDO4p-lYl-#xdUj9P3$*2Y zmb4#Zo{DO4Al?mn(na23W3h=v50DTR4*7pe#)bDh1Q#2S7aA-|ERIickTRo)$}203 z5X-u>Yd0`V7!$S);){usX-;*!xv`olw}_~y)BdU_IeDSA6CGU!rgqJcQc8uzZ04~m zuB>qsZ%BzWHz8I8Vl2cr+x$s+1D}?q`vk_iPsKAgjxIS*Z56wZEXJWcat1z9C@>y#3QB9Lf{g7)wZ zK;)>pcx=-pdgk(wb)?Rs__nV6bHDVGPblK~y|&VQK`s_f_p4T>F`LsTK^GmPWMOBw z_4HcB;3q(9?s4?7C|xurOETFZQPAf0fTO9_6TyJwgSNaG@~peX4^RXwE|6@)}&cdJeqkdVf<_ z9j6HRm8K>v^JqmPg6hRHAlG}-T=8uvQ>}qjp+~!+S*6@rPg=~KND*1(&T<_g`<)~$^N&aJwbW-IJMI1 z#nrFx>OF8}`vZC)S&vC0A!l8k6EA*rvv>a$lG1JUjp4bacU6vobq3ROv`+NR>6)mb z;j7YL+4o%nR%}ct7!W@!cx0@CgqixKA(0zl$Khvf+gr_Z@jW+s%j-I)=17OD)F&oDlyM zUtC2LKg^TQG3}qYKet3aa!AQ1nQl7hMxGBF-b$bHduoSqZmsY4d=2dD`frlbY~vW^ zg%hS)eYInkVE1%IzS^$H7yax3k6x#ti_;1OYC|q44VJX@zr6qC(unt#^Qx}GP%At6 z?OlDc^o`XW`HabBe?>tOEf5Y-Gj_=SW`BYjI(hKyXQBD8mv^;U`N`#u37%(bV`@zo z&|Mu%#%#QbM6TmeTyST-^7Z_?Cb2X=I{0*Gc&m@awqL4z1*n4&;B$l`)OhevuA1ct zeGJ8&zkkXIlU4<0Ckg%7c;Wxy@0c|9S*>M)WVn8JZ=9AtS>q% za~#EfD)M#V?@Z+;I{9@I9uH{G*s|J*FuWPNvU0lmi*UfPOnV?E8}NF?5f$=kbyUj! zlo3vRKe$)D7


XRz6KLdy~uM4^jT)eALe{uU%Ap`D$b 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 tduO2X}W3 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 LX+JGju?+rS$xSG5 literal 0 HcmV?d00001 diff --git a/img/scene2-without.png b/img/scene2-without.png new file mode 100644 index 0000000000000000000000000000000000000000..be7c7fb46325f5e36da4b51d0659447769cb666c GIT binary patch literal 158024 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 z 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

P3aGR7?1DuYE_Ihlm%=&ibQ`@ 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

Change blindness test

We would like a few minutes of your time to help us with a test in change blindness. Your help is very much appreciated.

-

Get started »

+

Get started »

@@ -26,4 +26,5 @@
-{% endblock %} \ No newline at end of file +{% endblock %} +

ua+M*uK(9ruu{BV-C z=+r^H*SjSuwRjOR$+Wd8aTwXYI{J^Cjt39!g`35>;-&t8F>dk)&%ud!s|*BIDuFajcy zsY@wXH|Ha^TLM1^=^Tp`g!=7$DiPMfS6>eBLgVhEj2~P+fk{fdCu6VTcc{|GHfD_pFNAyhjtpdZ~D??#xT-h z?S$}V(pm=t-<*I$M-E^(W2<}>Iw8a)m3B;K?A3SFR%5r$Z=HeC{TjVKE`AJA1ZJrUssUOFIfG1b@Fh=x7sA4aU zSNwgiUp)+(JpY;FH1_c&2#%u zwNQ3s&07OkB9t&Y5@G6I2A3?TQolL6v~P(_?(S$ia3cGb?$GwV+z{oTqfcU+Y4Oyc zi3^P`#6>>Af-!wjxy4I}ldj9JJ|iBGT#DZ(eXNBVorQ7z+%c@*umS5ftU>3RrO|D~ zOqQ`^`1(&v{(&!H-n7MsJZXUSJ8A3B94Ai(VB`K<#5Z9Ahk@$8AeK@bDgkHp3BSvBSffKlV@eHO6>xA+x`WyQ% z+CD20hITRKC_~+~eA1SYFQWB8=3V@5@(S{>Yvb~mP2VgZb=>DI6ev-O@%bCrx#xRK z8rl^qug(wnIihp&> zR8;kTjl`uA*dC*8p3La;?rcL;IUpIKZ^plZQr_>GpobhZj5zV_SQKyAlRvd;LnEz2 zWR{=hJv%1RiS`|}!{Ct=bPU-`H36|S0>SDOm_?*XX&k>DtgGxd4uhJN#2cS8kfty% zojL*)JAGsnPAf6Clz0qkQ4*hgy_@a(qjsT6_?Zq^G%)jBrktE*GOnFHgD1R~9xNl^ zNQB*8&9g!-RCLXHxw~fMcXznvX@gKHEpha}a}9TciLt3?H!H#}OsupDtA|8%{JdpIuc=hzs|tk#iclo-Jy}EleHy1 zLW=_KOrjUj;uBxCacRScG$exzt+f)>o&ox-mFEnvHCtb&%O^+_FZlc6wz)!HQE4On)+vCuR*n*}8owm#m}R0m(6VzDiN7I;*Wm5qPbBDGZ&wf_GS- z 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[$index]; break; case 'phase': $template = 'change.html.twig'; @@ -69,7 +70,7 @@ switch ($mode) { break; case 'phase_next': $template = 'next.html.twig'; - $variables['next_url'] = 'phase/'.$settings->phases[$index]; + $variables['next_url'] = 'index.php?mode=phase&phase='.$settings->phases[$index]; $variables['step_count'] = $index; break; case 'finish': @@ -162,5 +163,5 @@ if (!empty ($template)) { echo $twig->render($template, $variables); } else { - header('HTTP/1.0 404 Not Found'); + //header('HTTP/1.0 404 Not Found'); } \ No newline at end of file diff --git a/js/change.js b/js/change.js index 029b84c..8d32949 100644 --- a/js/change.js +++ b/js/change.js @@ -1,6 +1,6 @@ // Script settings. -var slideDuration = 400; -var blankDuration = 100; +var slideDuration = 500; +var blankDuration = 200; // Script internals. var $currentSlide; diff --git a/views/index.html.twig b/views/index.html.twig index 1aa2db0..bd0c0ec 100644 --- a/views/index.html.twig +++ b/views/index.html.twig @@ -4,7 +4,7 @@