public function parseTestExpression(Twig_Parser $parser, $node) { $stream = $parser->getStream(); $name = $stream->expect(Twig_Token::NAME_TYPE)->getValue(); $arguments = null; if ($stream->test(Twig_Token::PUNCTUATION_TYPE, '(')) { $arguments = $parser->getExpressionParser()->parseArguments(); } $class = $this->getTestNodeClass($parser->getEnvironment(), $name); return new $class($node, $name, $arguments, $parser->getCurrentToken()->getLine()); }
public function __construct(Twig_Parser $parser, Twig_Environment $env = null) { $this->parser = $parser; if ($env instanceof Twig_Environment) { $this->env = $env; $this->unaryOperators = $env->getUnaryOperators(); $this->binaryOperators = $env->getBinaryOperators(); } else { @trigger_error('Passing the operators as constructor arguments to ' . __METHOD__ . ' is deprecated since version 1.27. Pass the environment instead.', E_USER_DEPRECATED); $this->env = $parser->getEnvironment(); $this->unaryOperators = func_get_arg(1); $this->binaryOperators = func_get_arg(2); } }
private function parseInline(\Twig_TokenStream $stream, $lineno) { $stream->expect(\Twig_Token::BLOCK_END_TYPE); $this->parser->subparse(function ($token) { return $token->test(['end' . $this->getTag()]); }, true); $stream->expect(\Twig_Token::BLOCK_END_TYPE); $file = $this->parser->getEnvironment()->getLoader()->getCacheKey($stream->getFilename()); if (!isset($this->inline_blocks[$file])) { $this->inline_blocks[$file] = 0; } $file_name = md5($file . $this->inline_blocks[$file]) . ".js"; $assets = $this->extension->webpackAsset('cache.' . $file_name); $this->inline_blocks[$file]++; return new WebpackInlineNode(['js_file' => $assets['js'], 'css_file' => $assets['css']], $lineno, $this->getTag()); }
protected function getTestNodeClass(Twig_Parser $parser, $name) { $env = $parser->getEnvironment(); $testMap = $env->getTests(); if ($testMap[$name] instanceof Twig_SimpleTest) { return $testMap[$name]->getNodeClass(); } return $testMap[$name] instanceof Twig_Test_Node ? $testMap[$name]->getClass() : 'Twig_Node_Expression_Test'; }
protected function getTestNodeClass(Twig_Parser $parser, $name, $line) { $env = $parser->getEnvironment(); $testMap = $env->getTests(); $testName = null; if (isset($testMap[$name])) { $testName = $name; } elseif ($parser->getStream()->test(Twig_Token::NAME_TYPE)) { // try 2-words tests $name = $name . ' ' . $parser->getCurrentToken()->getValue(); if (isset($testMap[$name])) { $parser->getStream()->next(); $testName = $name; } } if (null === $testName) { $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()); } if ($testMap[$name] instanceof Twig_SimpleTest) { return $testMap[$name]->getNodeClass(); } return $testMap[$name] instanceof Twig_Test_Node ? $testMap[$name]->getClass() : 'Twig_Node_Expression_Test'; }
protected function getTestNodeClass(Twig_Parser $parser, $name, $line) { $env = $parser->getEnvironment(); $testMap = $env->getTests(); if (!isset($testMap[$name])) { $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()); } if ($testMap[$name] instanceof Twig_SimpleTest) { return $testMap[$name]->getNodeClass(); } return $testMap[$name] instanceof Twig_Test_Node ? $testMap[$name]->getClass() : 'Twig_Node_Expression_Test'; }
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); } } $e = new Twig_Error_Syntax(sprintf('Unknown "%s" test.', $name), $line, $parser->getFilename()); $e->addSuggestions($name, array_keys($env->getTests())); throw $e; }
protected function getTestName(Twig_Parser $parser, $line) { $stream = $parser->getStream(); $name = $stream->expect(Twig_Token::NAME_TYPE)->getValue(); $env = $parser->getEnvironment(); $testMap = $env->getTests(); if (isset($testMap[$name])) { return $name; } if ($stream->test(Twig_Token::NAME_TYPE)) { // try 2-words tests $name = $name . ' ' . $parser->getCurrentToken()->getValue(); if (isset($testMap[$name])) { $parser->getStream()->next(); return $name; } } $message = sprintf('The test "%s" does not exist', $name); if ($alternatives = $env->computeAlternatives($name, array_keys($testMap))) { $message = sprintf('%s. Did you mean "%s"', $message, implode('", "', $alternatives)); } throw new Twig_Error_Syntax($message, $line, $parser->getFilename()); }