mirror of
https://github.com/getgrav/grav.git
synced 2026-05-06 09:57:49 +02:00
Twig tags: use namespaced classes
This commit is contained in:
@@ -9,24 +9,28 @@
|
||||
|
||||
namespace Grav\Common\Twig\Node;
|
||||
|
||||
class TwigNodeMarkdown extends \Twig_Node implements \Twig_NodeOutputInterface
|
||||
use Twig\Compiler;
|
||||
use Twig\Node\Node;
|
||||
use Twig\Node\NodeOutputInterface;
|
||||
|
||||
class TwigNodeMarkdown extends Node implements NodeOutputInterface
|
||||
{
|
||||
/**
|
||||
* TwigNodeMarkdown constructor.
|
||||
* @param \Twig_Node $body
|
||||
* @param $lineno
|
||||
* @param Node $body
|
||||
* @param int $lineno
|
||||
* @param string $tag
|
||||
*/
|
||||
public function __construct(\Twig_Node $body, $lineno, $tag = 'markdown')
|
||||
public function __construct(Node $body, $lineno, $tag = 'markdown')
|
||||
{
|
||||
parent::__construct(['body' => $body], [], $lineno, $tag);
|
||||
}
|
||||
/**
|
||||
* Compiles the node to PHP.
|
||||
*
|
||||
* @param \Twig_Compiler A Twig_Compiler instance
|
||||
* @param Compiler $compiler A Twig_Compiler instance
|
||||
*/
|
||||
public function compile(\Twig_Compiler $compiler)
|
||||
public function compile(Compiler $compiler)
|
||||
{
|
||||
$compiler
|
||||
->addDebugInfo($this)
|
||||
|
||||
@@ -9,21 +9,26 @@
|
||||
|
||||
namespace Grav\Common\Twig\Node;
|
||||
|
||||
class TwigNodeRender extends \Twig_Node implements \Twig_NodeCaptureInterface
|
||||
use Twig\Compiler;
|
||||
use Twig\Node\Expression\AbstractExpression;
|
||||
use Twig\Node\Node;
|
||||
use Twig\Node\NodeCaptureInterface;
|
||||
|
||||
class TwigNodeRender extends Node implements NodeCaptureInterface
|
||||
{
|
||||
protected $tagName = 'render';
|
||||
|
||||
/**
|
||||
* @param \Twig_Node_Expression $object
|
||||
* @param \Twig_Node_Expression|null $layout
|
||||
* @param \Twig_Node_Expression|null $context
|
||||
* @param AbstractExpression $object
|
||||
* @param AbstractExpression|null $layout
|
||||
* @param AbstractExpression|null $context
|
||||
* @param int $lineno
|
||||
* @param string|null $tag
|
||||
*/
|
||||
public function __construct(
|
||||
\Twig_Node_Expression $object,
|
||||
?\Twig_Node_Expression $layout,
|
||||
?\Twig_Node_Expression $context,
|
||||
AbstractExpression $object,
|
||||
?AbstractExpression $layout,
|
||||
?AbstractExpression $context,
|
||||
$lineno,
|
||||
$tag = null
|
||||
)
|
||||
@@ -33,10 +38,10 @@ class TwigNodeRender extends \Twig_Node implements \Twig_NodeCaptureInterface
|
||||
/**
|
||||
* Compiles the node to PHP.
|
||||
*
|
||||
* @param \Twig_Compiler $compiler A Twig_Compiler instance
|
||||
* @param Compiler $compiler A Twig_Compiler instance
|
||||
* @throws \LogicException
|
||||
*/
|
||||
public function compile(\Twig_Compiler $compiler)
|
||||
public function compile(Compiler $compiler)
|
||||
{
|
||||
$compiler->addDebugInfo($this);
|
||||
$compiler->write('$object = ')->subcompile($this->getNode('object'))->raw(';' . PHP_EOL);
|
||||
|
||||
@@ -9,26 +9,31 @@
|
||||
|
||||
namespace Grav\Common\Twig\Node;
|
||||
|
||||
class TwigNodeScript extends \Twig_Node implements \Twig_NodeCaptureInterface
|
||||
use Twig\Compiler;
|
||||
use Twig\Node\Expression\AbstractExpression;
|
||||
use Twig\Node\Node;
|
||||
use Twig\Node\NodeCaptureInterface;
|
||||
|
||||
class TwigNodeScript extends Node implements NodeCaptureInterface
|
||||
{
|
||||
protected $tagName = 'script';
|
||||
|
||||
/**
|
||||
* TwigNodeScript constructor.
|
||||
* @param \Twig_Node|null $body
|
||||
* @param \Twig_Node_Expression|null $file
|
||||
* @param \Twig_Node_Expression|null $group
|
||||
* @param \Twig_Node_Expression|null $priority
|
||||
* @param \Twig_Node_Expression|null $attributes
|
||||
* @param Node|null $body
|
||||
* @param AbstractExpression|null $file
|
||||
* @param AbstractExpression|null $group
|
||||
* @param AbstractExpression|null $priority
|
||||
* @param AbstractExpression|null $attributes
|
||||
* @param int $lineno
|
||||
* @param string|null $tag
|
||||
*/
|
||||
public function __construct(
|
||||
\Twig_Node $body = null,
|
||||
\Twig_Node_Expression $file = null,
|
||||
\Twig_Node_Expression $group = null,
|
||||
\Twig_Node_Expression $priority = null,
|
||||
\Twig_Node_Expression $attributes = null,
|
||||
Node $body = null,
|
||||
AbstractExpression $file = null,
|
||||
AbstractExpression $group = null,
|
||||
AbstractExpression $priority = null,
|
||||
AbstractExpression $attributes = null,
|
||||
$lineno = 0,
|
||||
$tag = null
|
||||
)
|
||||
@@ -38,10 +43,10 @@ class TwigNodeScript extends \Twig_Node implements \Twig_NodeCaptureInterface
|
||||
/**
|
||||
* Compiles the node to PHP.
|
||||
*
|
||||
* @param \Twig_Compiler $compiler A Twig_Compiler instance
|
||||
* @param Compiler $compiler A Twig_Compiler instance
|
||||
* @throws \LogicException
|
||||
*/
|
||||
public function compile(\Twig_Compiler $compiler)
|
||||
public function compile(Compiler $compiler)
|
||||
{
|
||||
$compiler->addDebugInfo($this);
|
||||
|
||||
|
||||
@@ -9,26 +9,31 @@
|
||||
|
||||
namespace Grav\Common\Twig\Node;
|
||||
|
||||
class TwigNodeStyle extends \Twig_Node implements \Twig_NodeCaptureInterface
|
||||
use Twig\Compiler;
|
||||
use Twig\Node\Expression\AbstractExpression;
|
||||
use Twig\Node\Node;
|
||||
use Twig\Node\NodeCaptureInterface;
|
||||
|
||||
class TwigNodeStyle extends Node implements NodeCaptureInterface
|
||||
{
|
||||
protected $tagName = 'style';
|
||||
|
||||
/**
|
||||
* TwigNodeAssets constructor.
|
||||
* @param \Twig_Node|null $body
|
||||
* @param \Twig_Node_Expression|null $file
|
||||
* @param \Twig_Node_Expression|null $group
|
||||
* @param \Twig_Node_Expression|null $priority
|
||||
* @param \Twig_Node_Expression|null $attributes
|
||||
* @param Node|null $body
|
||||
* @param AbstractExpression|null $file
|
||||
* @param AbstractExpression|null $group
|
||||
* @param AbstractExpression|null $priority
|
||||
* @param AbstractExpression|null $attributes
|
||||
* @param int $lineno
|
||||
* @param string|null $tag
|
||||
*/
|
||||
public function __construct(
|
||||
\Twig_Node $body = null,
|
||||
\Twig_Node_Expression $file = null,
|
||||
\Twig_Node_Expression $group = null,
|
||||
\Twig_Node_Expression $priority = null,
|
||||
\Twig_Node_Expression $attributes = null,
|
||||
Node $body = null,
|
||||
AbstractExpression $file = null,
|
||||
AbstractExpression $group = null,
|
||||
AbstractExpression $priority = null,
|
||||
AbstractExpression $attributes = null,
|
||||
$lineno = 0,
|
||||
$tag = null
|
||||
)
|
||||
@@ -38,10 +43,10 @@ class TwigNodeStyle extends \Twig_Node implements \Twig_NodeCaptureInterface
|
||||
/**
|
||||
* Compiles the node to PHP.
|
||||
*
|
||||
* @param \Twig_Compiler $compiler A Twig_Compiler instance
|
||||
* @param Compiler $compiler A Twig_Compiler instance
|
||||
* @throws \LogicException
|
||||
*/
|
||||
public function compile(\Twig_Compiler $compiler)
|
||||
public function compile(Compiler $compiler)
|
||||
{
|
||||
$compiler->addDebugInfo($this);
|
||||
|
||||
|
||||
@@ -9,20 +9,23 @@
|
||||
|
||||
namespace Grav\Common\Twig\Node;
|
||||
|
||||
class TwigNodeSwitch extends \Twig_Node
|
||||
use Twig\Compiler;
|
||||
use Twig\Node\Node;
|
||||
|
||||
class TwigNodeSwitch extends Node
|
||||
{
|
||||
/**
|
||||
* TwigNodeSwitch constructor.
|
||||
* @param \Twig_Node $value
|
||||
* @param \Twig_Node $cases
|
||||
* @param \Twig_Node|null $default
|
||||
* @param Node $value
|
||||
* @param Node $cases
|
||||
* @param Node|null $default
|
||||
* @param int $lineno
|
||||
* @param string|null $tag
|
||||
*/
|
||||
public function __construct(
|
||||
\Twig_Node $value,
|
||||
\Twig_Node $cases,
|
||||
\Twig_Node $default = null,
|
||||
Node $value,
|
||||
Node $cases,
|
||||
Node $default = null,
|
||||
$lineno = 0,
|
||||
$tag = null
|
||||
)
|
||||
@@ -33,9 +36,9 @@ class TwigNodeSwitch extends \Twig_Node
|
||||
/**
|
||||
* Compiles the node to PHP.
|
||||
*
|
||||
* @param \Twig_Compiler A Twig_Compiler instance
|
||||
* @param Compiler $compiler A Twig_Compiler instance
|
||||
*/
|
||||
public function compile(\Twig_Compiler $compiler)
|
||||
public function compile(Compiler $compiler)
|
||||
{
|
||||
$compiler
|
||||
->addDebugInfo($this)
|
||||
|
||||
@@ -9,18 +9,21 @@
|
||||
|
||||
namespace Grav\Common\Twig\Node;
|
||||
|
||||
class TwigNodeThrow extends \Twig_Node
|
||||
use Twig\Compiler;
|
||||
use Twig\Node\Node;
|
||||
|
||||
class TwigNodeThrow extends Node
|
||||
{
|
||||
/**
|
||||
* TwigNodeThrow constructor.
|
||||
* @param $code
|
||||
* @param \Twig_Node $message
|
||||
* @param int $code
|
||||
* @param Node $message
|
||||
* @param int $lineno
|
||||
* @param string|null $tag
|
||||
*/
|
||||
public function __construct(
|
||||
$code,
|
||||
\Twig_Node $message,
|
||||
Node $message,
|
||||
$lineno = 0,
|
||||
$tag = null
|
||||
)
|
||||
@@ -31,10 +34,10 @@ class TwigNodeThrow extends \Twig_Node
|
||||
/**
|
||||
* Compiles the node to PHP.
|
||||
*
|
||||
* @param \Twig_Compiler $compiler A Twig_Compiler instance
|
||||
* @param Compiler $compiler A Twig_Compiler instance
|
||||
* @throws \LogicException
|
||||
*/
|
||||
public function compile(\Twig_Compiler $compiler)
|
||||
public function compile(Compiler $compiler)
|
||||
{
|
||||
$compiler->addDebugInfo($this);
|
||||
|
||||
|
||||
@@ -9,18 +9,21 @@
|
||||
|
||||
namespace Grav\Common\Twig\Node;
|
||||
|
||||
class TwigNodeTryCatch extends \Twig_Node
|
||||
use Twig\Compiler;
|
||||
use Twig\Node\Node;
|
||||
|
||||
class TwigNodeTryCatch extends Node
|
||||
{
|
||||
/**
|
||||
* TwigNodeTryCatch constructor.
|
||||
* @param \Twig_Node $try
|
||||
* @param \Twig_Node|null $catch
|
||||
* @param Node $try
|
||||
* @param Node|null $catch
|
||||
* @param int $lineno
|
||||
* @param string|null $tag
|
||||
*/
|
||||
public function __construct(
|
||||
\Twig_Node $try,
|
||||
\Twig_Node $catch = null,
|
||||
Node $try,
|
||||
Node $catch = null,
|
||||
$lineno = 0,
|
||||
$tag = null
|
||||
)
|
||||
@@ -31,10 +34,10 @@ class TwigNodeTryCatch extends \Twig_Node
|
||||
/**
|
||||
* Compiles the node to PHP.
|
||||
*
|
||||
* @param \Twig_Compiler $compiler A Twig_Compiler instance
|
||||
* @param Compiler $compiler A Twig_Compiler instance
|
||||
* @throws \LogicException
|
||||
*/
|
||||
public function compile(\Twig_Compiler $compiler)
|
||||
public function compile(Compiler $compiler)
|
||||
{
|
||||
$compiler->addDebugInfo($this);
|
||||
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
namespace Grav\Common\Twig\TokenParser;
|
||||
|
||||
use Grav\Common\Twig\Node\TwigNodeMarkdown;
|
||||
use Twig\Token;
|
||||
use Twig\TokenParser\AbstractTokenParser;
|
||||
|
||||
/**
|
||||
* Adds ability to inline markdown between tags.
|
||||
@@ -21,26 +23,26 @@ use Grav\Common\Twig\Node\TwigNodeMarkdown;
|
||||
* 2. This is another item in that same list
|
||||
* {% endmarkdown %}
|
||||
*/
|
||||
class TwigTokenParserMarkdown extends \Twig_TokenParser
|
||||
class TwigTokenParserMarkdown extends AbstractTokenParser
|
||||
{
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function parse(\Twig_Token $token)
|
||||
public function parse(Token $token)
|
||||
{
|
||||
$lineno = $token->getLine();
|
||||
$this->parser->getStream()->expect(\Twig_Token::BLOCK_END_TYPE);
|
||||
$this->parser->getStream()->expect(Token::BLOCK_END_TYPE);
|
||||
$body = $this->parser->subparse(array($this, 'decideMarkdownEnd'), true);
|
||||
$this->parser->getStream()->expect(\Twig_Token::BLOCK_END_TYPE);
|
||||
$this->parser->getStream()->expect(Token::BLOCK_END_TYPE);
|
||||
return new TwigNodeMarkdown($body, $lineno, $this->getTag());
|
||||
}
|
||||
/**
|
||||
* Decide if current token marks end of Markdown block.
|
||||
*
|
||||
* @param \Twig_Token $token
|
||||
* @param Token $token
|
||||
* @return bool
|
||||
*/
|
||||
public function decideMarkdownEnd(\Twig_Token $token)
|
||||
public function decideMarkdownEnd(Token $token)
|
||||
{
|
||||
return $token->test('endmarkdown');
|
||||
}
|
||||
|
||||
@@ -10,22 +10,25 @@
|
||||
namespace Grav\Common\Twig\TokenParser;
|
||||
|
||||
use Grav\Common\Twig\Node\TwigNodeRender;
|
||||
use Twig\Node\Node;
|
||||
use Twig\Token;
|
||||
use Twig\TokenParser\AbstractTokenParser;
|
||||
|
||||
/**
|
||||
* Renders an object.
|
||||
*
|
||||
* {% render object layout: 'default' with { variable: true } %}
|
||||
*/
|
||||
class TwigTokenParserRender extends \Twig_TokenParser
|
||||
class TwigTokenParserRender extends AbstractTokenParser
|
||||
{
|
||||
/**
|
||||
* Parses a token and returns a node.
|
||||
*
|
||||
* @param \Twig_Token $token A Twig_Token instance
|
||||
* @param Token $token A Twig_Token instance
|
||||
*
|
||||
* @return \Twig_Node A Twig_Node instance
|
||||
* @return Node A Twig_Node instance
|
||||
*/
|
||||
public function parse(\Twig_Token $token)
|
||||
public function parse(Token $token)
|
||||
{
|
||||
$lineno = $token->getLine();
|
||||
|
||||
@@ -35,27 +38,27 @@ class TwigTokenParserRender extends \Twig_TokenParser
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \Twig_Token $token
|
||||
* @param Token $token
|
||||
* @return array
|
||||
*/
|
||||
protected function parseArguments(\Twig_Token $token)
|
||||
protected function parseArguments(Token $token)
|
||||
{
|
||||
$stream = $this->parser->getStream();
|
||||
|
||||
$object = $this->parser->getExpressionParser()->parseExpression();
|
||||
|
||||
$layout = null;
|
||||
if ($stream->nextIf(\Twig_Token::NAME_TYPE, 'layout')) {
|
||||
$stream->expect(\Twig_Token::PUNCTUATION_TYPE, ':');
|
||||
if ($stream->nextIf(Token::NAME_TYPE, 'layout')) {
|
||||
$stream->expect(Token::PUNCTUATION_TYPE, ':');
|
||||
$layout = $this->parser->getExpressionParser()->parseExpression();
|
||||
}
|
||||
|
||||
$context = null;
|
||||
if ($stream->nextIf(\Twig_Token::NAME_TYPE, 'with')) {
|
||||
if ($stream->nextIf(Token::NAME_TYPE, 'with')) {
|
||||
$context = $this->parser->getExpressionParser()->parseExpression();
|
||||
}
|
||||
|
||||
$stream->expect(\Twig_Token::BLOCK_END_TYPE);
|
||||
$stream->expect(Token::BLOCK_END_TYPE);
|
||||
|
||||
return [$object, $layout, $context];
|
||||
}
|
||||
|
||||
@@ -10,6 +10,9 @@
|
||||
namespace Grav\Common\Twig\TokenParser;
|
||||
|
||||
use Grav\Common\Twig\Node\TwigNodeScript;
|
||||
use Twig\Node\Node;
|
||||
use Twig\Token;
|
||||
use Twig\TokenParser\AbstractTokenParser;
|
||||
|
||||
/**
|
||||
* Adds a script to head/bottom/custom location in the document.
|
||||
@@ -21,16 +24,16 @@ use Grav\Common\Twig\Node\TwigNodeScript;
|
||||
* {% endscript %}
|
||||
|
||||
*/
|
||||
class TwigTokenParserScript extends \Twig_TokenParser
|
||||
class TwigTokenParserScript extends AbstractTokenParser
|
||||
{
|
||||
/**
|
||||
* Parses a token and returns a node.
|
||||
*
|
||||
* @param \Twig_Token $token A Twig_Token instance
|
||||
* @param Token $token A Twig_Token instance
|
||||
*
|
||||
* @return \Twig_Node A Twig_Node instance
|
||||
* @return Node A Twig_Node instance
|
||||
*/
|
||||
public function parse(\Twig_Token $token)
|
||||
public function parse(Token $token)
|
||||
{
|
||||
$lineno = $token->getLine();
|
||||
$stream = $this->parser->getStream();
|
||||
@@ -40,51 +43,51 @@ class TwigTokenParserScript extends \Twig_TokenParser
|
||||
$content = null;
|
||||
if ($file === null) {
|
||||
$content = $this->parser->subparse([$this, 'decideBlockEnd'], true);
|
||||
$stream->expect(\Twig_Token::BLOCK_END_TYPE);
|
||||
$stream->expect(Token::BLOCK_END_TYPE);
|
||||
}
|
||||
|
||||
return new TwigNodeScript($content, $file, $group, $priority, $attributes, $lineno, $this->getTag());
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \Twig_Token $token
|
||||
* @param Token $token
|
||||
* @return array
|
||||
*/
|
||||
protected function parseArguments(\Twig_Token $token)
|
||||
protected function parseArguments(Token $token)
|
||||
{
|
||||
$stream = $this->parser->getStream();
|
||||
|
||||
$file = null;
|
||||
if (!$stream->test(\Twig_Token::NAME_TYPE) && !$stream->test(\Twig_Token::OPERATOR_TYPE) && !$stream->test(\Twig_Token::BLOCK_END_TYPE)) {
|
||||
if (!$stream->test(Token::NAME_TYPE) && !$stream->test(Token::OPERATOR_TYPE) && !$stream->test(Token::BLOCK_END_TYPE)) {
|
||||
$file = $this->parser->getExpressionParser()->parseExpression();
|
||||
}
|
||||
|
||||
$group = null;
|
||||
if ($stream->nextIf(\Twig_Token::OPERATOR_TYPE, 'in')) {
|
||||
if ($stream->nextIf(Token::OPERATOR_TYPE, 'in')) {
|
||||
$group = $this->parser->getExpressionParser()->parseExpression();
|
||||
}
|
||||
|
||||
$priority = null;
|
||||
if ($stream->nextIf(\Twig_Token::NAME_TYPE, 'priority')) {
|
||||
$stream->expect(\Twig_Token::PUNCTUATION_TYPE, ':');
|
||||
if ($stream->nextIf(Token::NAME_TYPE, 'priority')) {
|
||||
$stream->expect(Token::PUNCTUATION_TYPE, ':');
|
||||
$priority = $this->parser->getExpressionParser()->parseExpression();
|
||||
}
|
||||
|
||||
$attributes = null;
|
||||
if ($stream->nextIf(\Twig_Token::NAME_TYPE, 'with')) {
|
||||
if ($stream->nextIf(Token::NAME_TYPE, 'with')) {
|
||||
$attributes = $this->parser->getExpressionParser()->parseExpression();
|
||||
}
|
||||
|
||||
$stream->expect(\Twig_Token::BLOCK_END_TYPE);
|
||||
$stream->expect(Token::BLOCK_END_TYPE);
|
||||
|
||||
return [$file, $group, $priority, $attributes];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \Twig_Token $token
|
||||
* @param Token $token
|
||||
* @return bool
|
||||
*/
|
||||
public function decideBlockEnd(\Twig_Token $token)
|
||||
public function decideBlockEnd(Token $token)
|
||||
{
|
||||
return $token->test('endscript');
|
||||
}
|
||||
|
||||
@@ -10,6 +10,9 @@
|
||||
namespace Grav\Common\Twig\TokenParser;
|
||||
|
||||
use Grav\Common\Twig\Node\TwigNodeStyle;
|
||||
use Twig\Node\Node;
|
||||
use Twig\Token;
|
||||
use Twig\TokenParser\AbstractTokenParser;
|
||||
|
||||
/**
|
||||
* Adds a style to the document.
|
||||
@@ -20,16 +23,16 @@ use Grav\Common\Twig\Node\TwigNodeStyle;
|
||||
* a { color: red; }
|
||||
* {% endstyle %}
|
||||
*/
|
||||
class TwigTokenParserStyle extends \Twig_TokenParser
|
||||
class TwigTokenParserStyle extends AbstractTokenParser
|
||||
{
|
||||
/**
|
||||
* Parses a token and returns a node.
|
||||
*
|
||||
* @param \Twig_Token $token A Twig_Token instance
|
||||
* @param Token $token A Twig_Token instance
|
||||
*
|
||||
* @return \Twig_Node A Twig_Node instance
|
||||
* @return Node A Twig_Node instance
|
||||
*/
|
||||
public function parse(\Twig_Token $token)
|
||||
public function parse(Token $token)
|
||||
{
|
||||
$lineno = $token->getLine();
|
||||
$stream = $this->parser->getStream();
|
||||
@@ -39,51 +42,51 @@ class TwigTokenParserStyle extends \Twig_TokenParser
|
||||
$content = null;
|
||||
if (!$file) {
|
||||
$content = $this->parser->subparse([$this, 'decideBlockEnd'], true);
|
||||
$stream->expect(\Twig_Token::BLOCK_END_TYPE);
|
||||
$stream->expect(Token::BLOCK_END_TYPE);
|
||||
}
|
||||
|
||||
return new TwigNodeStyle($content, $file, $group, $priority, $attributes, $lineno, $this->getTag());
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \Twig_Token $token
|
||||
* @param Token $token
|
||||
* @return array
|
||||
*/
|
||||
protected function parseArguments(\Twig_Token $token)
|
||||
protected function parseArguments(Token $token)
|
||||
{
|
||||
$stream = $this->parser->getStream();
|
||||
|
||||
$file = null;
|
||||
if (!$stream->test(\Twig_Token::NAME_TYPE) && !$stream->test(\Twig_Token::OPERATOR_TYPE) && !$stream->test(\Twig_Token::BLOCK_END_TYPE)) {
|
||||
if (!$stream->test(Token::NAME_TYPE) && !$stream->test(Token::OPERATOR_TYPE) && !$stream->test(Token::BLOCK_END_TYPE)) {
|
||||
$file = $this->parser->getExpressionParser()->parseExpression();
|
||||
}
|
||||
|
||||
$group = null;
|
||||
if ($stream->nextIf(\Twig_Token::OPERATOR_TYPE, 'in')) {
|
||||
if ($stream->nextIf(Token::OPERATOR_TYPE, 'in')) {
|
||||
$group = $this->parser->getExpressionParser()->parseExpression();
|
||||
}
|
||||
|
||||
$priority = null;
|
||||
if ($stream->nextIf(\Twig_Token::NAME_TYPE, 'priority')) {
|
||||
$stream->expect(\Twig_Token::PUNCTUATION_TYPE, ':');
|
||||
if ($stream->nextIf(Token::NAME_TYPE, 'priority')) {
|
||||
$stream->expect(Token::PUNCTUATION_TYPE, ':');
|
||||
$priority = $this->parser->getExpressionParser()->parseExpression();
|
||||
}
|
||||
|
||||
$attributes = null;
|
||||
if ($stream->nextIf(\Twig_Token::NAME_TYPE, 'with')) {
|
||||
if ($stream->nextIf(Token::NAME_TYPE, 'with')) {
|
||||
$attributes = $this->parser->getExpressionParser()->parseExpression();
|
||||
}
|
||||
|
||||
$stream->expect(\Twig_Token::BLOCK_END_TYPE);
|
||||
$stream->expect(Token::BLOCK_END_TYPE);
|
||||
|
||||
return [$file, $group, $priority, $attributes];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \Twig_Token $token
|
||||
* @param Token $token
|
||||
* @return bool
|
||||
*/
|
||||
public function decideBlockEnd(\Twig_Token $token)
|
||||
public function decideBlockEnd(Token $token)
|
||||
{
|
||||
return $token->test('endstyle');
|
||||
}
|
||||
|
||||
@@ -11,6 +11,10 @@
|
||||
namespace Grav\Common\Twig\TokenParser;
|
||||
|
||||
use Grav\Common\Twig\Node\TwigNodeSwitch;
|
||||
use Twig\Error\SyntaxError;
|
||||
use Twig\Node\Node;
|
||||
use Twig\Token;
|
||||
use Twig\TokenParser\AbstractTokenParser;
|
||||
|
||||
/**
|
||||
* Adds ability use elegant switch instead of ungainly if statements
|
||||
@@ -24,25 +28,25 @@ use Grav\Common\Twig\Node\TwigNodeSwitch;
|
||||
* {{ my_data.default }}
|
||||
* {% endswitch %}
|
||||
*/
|
||||
class TwigTokenParserSwitch extends \Twig_TokenParser
|
||||
class TwigTokenParserSwitch extends AbstractTokenParser
|
||||
{
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function parse(\Twig_Token $token)
|
||||
public function parse(Token $token)
|
||||
{
|
||||
$lineno = $token->getLine();
|
||||
$stream = $this->parser->getStream();
|
||||
|
||||
$name = $this->parser->getExpressionParser()->parseExpression();
|
||||
$stream->expect(\Twig_Token::BLOCK_END_TYPE);
|
||||
$stream->expect(Token::BLOCK_END_TYPE);
|
||||
|
||||
// There can be some whitespace between the {% switch %} and first {% case %} tag.
|
||||
while ($stream->getCurrent()->getType() === \Twig_Token::TEXT_TYPE && trim($stream->getCurrent()->getValue()) === '') {
|
||||
while ($stream->getCurrent()->getType() === Token::TEXT_TYPE && trim($stream->getCurrent()->getValue()) === '') {
|
||||
$stream->next();
|
||||
}
|
||||
|
||||
$stream->expect(\Twig_Token::BLOCK_START_TYPE);
|
||||
$stream->expect(Token::BLOCK_START_TYPE);
|
||||
|
||||
$expressionParser = $this->parser->getExpressionParser();
|
||||
|
||||
@@ -60,23 +64,23 @@ class TwigTokenParserSwitch extends \Twig_TokenParser
|
||||
while (true) {
|
||||
$values[] = $expressionParser->parsePrimaryExpression();
|
||||
// Multiple allowed values?
|
||||
if ($stream->test(\Twig_Token::OPERATOR_TYPE, 'or')) {
|
||||
if ($stream->test(Token::OPERATOR_TYPE, 'or')) {
|
||||
$stream->next();
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$stream->expect(\Twig_Token::BLOCK_END_TYPE);
|
||||
$stream->expect(Token::BLOCK_END_TYPE);
|
||||
$body = $this->parser->subparse(array($this, 'decideIfFork'));
|
||||
$cases[] = new \Twig_Node([
|
||||
'values' => new \Twig_Node($values),
|
||||
$cases[] = new Node([
|
||||
'values' => new Node($values),
|
||||
'body' => $body
|
||||
]);
|
||||
break;
|
||||
|
||||
case 'default':
|
||||
$stream->expect(\Twig_Token::BLOCK_END_TYPE);
|
||||
$stream->expect(Token::BLOCK_END_TYPE);
|
||||
$default = $this->parser->subparse(array($this, 'decideIfEnd'));
|
||||
break;
|
||||
|
||||
@@ -85,22 +89,22 @@ class TwigTokenParserSwitch extends \Twig_TokenParser
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new \Twig_Error_Syntax(sprintf('Unexpected end of template. Twig was looking for the following tags "case", "default", or "endswitch" to close the "switch" block started at line %d)', $lineno), -1);
|
||||
throw new SyntaxError(sprintf('Unexpected end of template. Twig was looking for the following tags "case", "default", or "endswitch" to close the "switch" block started at line %d)', $lineno), -1);
|
||||
}
|
||||
}
|
||||
|
||||
$stream->expect(\Twig_Token::BLOCK_END_TYPE);
|
||||
$stream->expect(Token::BLOCK_END_TYPE);
|
||||
|
||||
return new TwigNodeSwitch($name, new \Twig_Node($cases), $default, $lineno, $this->getTag());
|
||||
return new TwigNodeSwitch($name, new Node($cases), $default, $lineno, $this->getTag());
|
||||
}
|
||||
|
||||
/**
|
||||
* Decide if current token marks switch logic.
|
||||
*
|
||||
* @param \Twig_Token $token
|
||||
* @param Token $token
|
||||
* @return bool
|
||||
*/
|
||||
public function decideIfFork(\Twig_Token $token)
|
||||
public function decideIfFork(Token $token)
|
||||
{
|
||||
return $token->test(array('case', 'default', 'endswitch'));
|
||||
}
|
||||
@@ -108,10 +112,10 @@ class TwigTokenParserSwitch extends \Twig_TokenParser
|
||||
/**
|
||||
* Decide if current token marks end of swtich block.
|
||||
*
|
||||
* @param \Twig_Token $token
|
||||
* @param Token $token
|
||||
* @return bool
|
||||
*/
|
||||
public function decideIfEnd(\Twig_Token $token)
|
||||
public function decideIfEnd(Token $token)
|
||||
{
|
||||
return $token->test(array('endswitch'));
|
||||
}
|
||||
|
||||
@@ -10,6 +10,9 @@
|
||||
namespace Grav\Common\Twig\TokenParser;
|
||||
|
||||
use Grav\Common\Twig\Node\TwigNodeThrow;
|
||||
use Twig\Node\Node;
|
||||
use Twig\Token;
|
||||
use Twig\TokenParser\AbstractTokenParser;
|
||||
|
||||
/**
|
||||
* Handles try/catch in template file.
|
||||
@@ -18,23 +21,23 @@ use Grav\Common\Twig\Node\TwigNodeThrow;
|
||||
* {% throw 404 'Not Found' %}
|
||||
* </pre>
|
||||
*/
|
||||
class TwigTokenParserThrow extends \Twig_TokenParser
|
||||
class TwigTokenParserThrow extends AbstractTokenParser
|
||||
{
|
||||
/**
|
||||
* Parses a token and returns a node.
|
||||
*
|
||||
* @param \Twig_Token $token A Twig_Token instance
|
||||
* @param Token $token A Twig_Token instance
|
||||
*
|
||||
* @return \Twig_Node A Twig_Node instance
|
||||
* @return Node A Twig_Node instance
|
||||
*/
|
||||
public function parse(\Twig_Token $token)
|
||||
public function parse(Token $token)
|
||||
{
|
||||
$lineno = $token->getLine();
|
||||
$stream = $this->parser->getStream();
|
||||
|
||||
$code = $stream->expect(\Twig_Token::NUMBER_TYPE)->getValue();
|
||||
$code = $stream->expect(Token::NUMBER_TYPE)->getValue();
|
||||
$message = $this->parser->getExpressionParser()->parseExpression();
|
||||
$stream->expect(\Twig_Token::BLOCK_END_TYPE);
|
||||
$stream->expect(Token::BLOCK_END_TYPE);
|
||||
|
||||
return new TwigNodeThrow($code, $message, $lineno, $this->getTag());
|
||||
}
|
||||
|
||||
@@ -10,6 +10,9 @@
|
||||
namespace Grav\Common\Twig\TokenParser;
|
||||
|
||||
use Grav\Common\Twig\Node\TwigNodeTryCatch;
|
||||
use Twig\Node\Node;
|
||||
use Twig\Token;
|
||||
use Twig\TokenParser\AbstractTokenParser;
|
||||
|
||||
/**
|
||||
* Handles try/catch in template file.
|
||||
@@ -22,37 +25,37 @@ use Grav\Common\Twig\Node\TwigNodeTryCatch;
|
||||
* {% endcatch %}
|
||||
* </pre>
|
||||
*/
|
||||
class TwigTokenParserTryCatch extends \Twig_TokenParser
|
||||
class TwigTokenParserTryCatch extends AbstractTokenParser
|
||||
{
|
||||
/**
|
||||
* Parses a token and returns a node.
|
||||
*
|
||||
* @param \Twig_Token $token A Twig_Token instance
|
||||
* @param Token $token A Twig_Token instance
|
||||
*
|
||||
* @return \Twig_Node A Twig_Node instance
|
||||
* @return Node A Twig_Node instance
|
||||
*/
|
||||
public function parse(\Twig_Token $token)
|
||||
public function parse(Token $token)
|
||||
{
|
||||
$lineno = $token->getLine();
|
||||
$stream = $this->parser->getStream();
|
||||
|
||||
$stream->expect(\Twig_Token::BLOCK_END_TYPE);
|
||||
$stream->expect(Token::BLOCK_END_TYPE);
|
||||
$try = $this->parser->subparse([$this, 'decideCatch']);
|
||||
$stream->next();
|
||||
$stream->expect(\Twig_Token::BLOCK_END_TYPE);
|
||||
$stream->expect(Token::BLOCK_END_TYPE);
|
||||
$catch = $this->parser->subparse([$this, 'decideEnd']);
|
||||
$stream->next();
|
||||
$stream->expect(\Twig_Token::BLOCK_END_TYPE);
|
||||
$stream->expect(Token::BLOCK_END_TYPE);
|
||||
|
||||
return new TwigNodeTryCatch($try, $catch, $lineno, $this->getTag());
|
||||
}
|
||||
|
||||
public function decideCatch(\Twig_Token $token)
|
||||
public function decideCatch(Token $token)
|
||||
{
|
||||
return $token->test(array('catch'));
|
||||
}
|
||||
|
||||
public function decideEnd(\Twig_Token $token)
|
||||
public function decideEnd(Token $token)
|
||||
{
|
||||
return $token->test(array('endtry')) || $token->test(array('endcatch'));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user