Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
CRAP | |
100.00% |
1 / 1 |
| TwigTransTokenParser | |
100.00% |
1 / 1 |
|
100.00% |
5 / 5 |
19 | |
100.00% |
1 / 1 |
| parse | |
100.00% |
1 / 1 |
7 | |
100.00% |
0 / 0 |
|||
| decideForFork | |
100.00% |
1 / 1 |
1 | |
100.00% |
0 / 0 |
|||
| decideForEnd | |
100.00% |
1 / 1 |
1 | |
100.00% |
0 / 0 |
|||
| getTag | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| checkTransString | |
100.00% |
1 / 1 |
9 | |
100.00% |
0 / 0 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\Core\Template\TwigTransTokenParser. | |
| * | |
| * @see http://twig.sensiolabs.org/doc/extensions/i18n.html | |
| * @see https://github.com/fabpot/Twig-extensions | |
| */ | |
| namespace Drupal\Core\Template; | |
| /** | |
| * A class that defines the Twig 'trans' token parser for Drupal. | |
| * | |
| * The token parser converts a token stream created from template source | |
| * code into an Abstract Syntax Tree (AST). The AST will later be compiled | |
| * into PHP code usable for runtime execution of the template. | |
| * | |
| * @see \Twig_TokenParser | |
| */ | |
| class TwigTransTokenParser extends \Twig_TokenParser { | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function parse(\Twig_Token $token) { | |
| $lineno = $token->getLine(); | |
| $stream = $this->parser->getStream(); | |
| $body = NULL; | |
| $options = NULL; | |
| $count = NULL; | |
| $plural = NULL; | |
| if (!$stream->test(\Twig_Token::BLOCK_END_TYPE) && $stream->test(\Twig_Token::STRING_TYPE)) { | |
| $body = $this->parser->getExpressionParser()->parseExpression(); | |
| } | |
| if (!$stream->test(\Twig_Token::BLOCK_END_TYPE) && $stream->test(\Twig_Token::NAME_TYPE, 'with')) { | |
| $stream->next(); | |
| $options = $this->parser->getExpressionParser()->parseExpression(); | |
| } | |
| if (!$body) { | |
| $stream->expect(\Twig_Token::BLOCK_END_TYPE); | |
| $body = $this->parser->subparse(array($this, 'decideForFork')); | |
| if ('plural' === $stream->next()->getValue()) { | |
| $count = $this->parser->getExpressionParser()->parseExpression(); | |
| $stream->expect(\Twig_Token::BLOCK_END_TYPE); | |
| $plural = $this->parser->subparse(array($this, 'decideForEnd'), TRUE); | |
| } | |
| } | |
| $stream->expect(\Twig_Token::BLOCK_END_TYPE); | |
| $this->checkTransString($body, $lineno); | |
| $node = new TwigNodeTrans($body, $plural, $count, $options, $lineno, $this->getTag()); | |
| return $node; | |
| } | |
| /** | |
| * Detect a 'plural' switch or the end of a 'trans' tag. | |
| */ | |
| public function decideForFork($token) { | |
| return $token->test(array('plural', 'endtrans')); | |
| } | |
| /** | |
| * Detect the end of a 'trans' tag. | |
| */ | |
| public function decideForEnd($token) { | |
| return $token->test('endtrans'); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getTag() { | |
| return 'trans'; | |
| } | |
| /** | |
| * Ensure that any nodes that are parsed are only of allowed types. | |
| * | |
| * @param \Twig_Node $body | |
| * The expression to check. | |
| * @param int $lineno | |
| * The source line. | |
| * | |
| * @throws \Twig_Error_Syntax | |
| */ | |
| protected function checkTransString(\Twig_Node $body, $lineno) { | |
| foreach ($body as $node) { | |
| if ( | |
| $node instanceof \Twig_Node_Text | |
| || | |
| ($node instanceof \Twig_Node_Print && $node->getNode('expr') instanceof \Twig_Node_Expression_Name) | |
| || | |
| ($node instanceof \Twig_Node_Print && $node->getNode('expr') instanceof \Twig_Node_Expression_GetAttr) | |
| || | |
| ($node instanceof \Twig_Node_Print && $node->getNode('expr') instanceof \Twig_Node_Expression_Filter) | |
| ) { | |
| continue; | |
| } | |
| throw new \Twig_Error_Syntax(sprintf('The text to be translated with "trans" can only contain references to simple variables'), $lineno); | |
| } | |
| } | |
| } |