You are here

public function Twig_TokenParser_Sandbox::parse in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/twig/twig/lib/Twig/TokenParser/Sandbox.php \Twig_TokenParser_Sandbox::parse()

Parses a token and returns a node.

Parameters

Twig_Token $token A Twig_Token instance:

Return value

Twig_NodeInterface A Twig_NodeInterface instance

Throws

Twig_Error_Syntax

Overrides Twig_TokenParserInterface::parse

File

vendor/twig/twig/lib/Twig/TokenParser/Sandbox.php, line 25

Class

Twig_TokenParser_Sandbox
Marks a section of a template as untrusted code that must be evaluated in the sandbox mode.

Code

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());
}