added the possibility to have tags in the global scope (outside blocks) in a child...
authorFabien Potencier <fabien.potencier@gmail.com>
Tue, 28 Dec 2010 18:30:49 +0000 (19:30 +0100)
committerFabien Potencier <fabien.potencier@gmail.com>
Thu, 30 Dec 2010 10:20:20 +0000 (11:20 +0100)
lib/Twig/Node/BlockReference.php
lib/Twig/Node/Include.php
lib/Twig/Node/Module.php
lib/Twig/Node/Print.php
lib/Twig/Node/Text.php
lib/Twig/NodeOutputInterface.php [new file with mode: 0644]
lib/Twig/Parser.php

index e195c7f..23097f5 100644 (file)
@@ -16,7 +16,7 @@
  * @package    twig
  * @author     Fabien Potencier <fabien.potencier@symfony-project.com>
  */
-class Twig_Node_BlockReference extends Twig_Node
+class Twig_Node_BlockReference extends Twig_Node implements Twig_NodeOutputInterface
 {
     public function __construct($name, $lineno, $tag = null)
     {
index cfc8599..3be3832 100644 (file)
@@ -16,7 +16,7 @@
  * @package    twig
  * @author     Fabien Potencier <fabien.potencier@symfony-project.com>
  */
-class Twig_Node_Include extends Twig_Node
+class Twig_Node_Include extends Twig_Node implements Twig_NodeOutputInterface
 {
     public function __construct(Twig_Node_Expression $expr, Twig_Node_Expression $variables = null, $only = false, $lineno, $tag = null)
     {
index d8c3641..2355d7c 100644 (file)
@@ -105,9 +105,9 @@ class Twig_Node_Module extends Twig_Node
         $compiler->write("\$context = array_merge(\$this->env->getGlobals(), \$context);\n\n");
 
         if (null !== $this->getNode('parent')) {
-            // remove all but import nodes
+            // remove all output nodes
             foreach ($this->getNode('body') as $node) {
-                if ($node instanceof Twig_Node_Import) {
+                if (!$node instanceof Twig_NodeOutputInterface) {
                     $compiler->subcompile($node);
                 }
             }
index 0927a8d..0746c4d 100644 (file)
@@ -16,7 +16,7 @@
  * @package    twig
  * @author     Fabien Potencier <fabien.potencier@symfony-project.com>
  */
-class Twig_Node_Print extends Twig_Node
+class Twig_Node_Print extends Twig_Node implements Twig_NodeOutputInterface
 {
     public function __construct(Twig_Node_Expression $expr, $lineno, $tag = null)
     {
index 7353380..f664e33 100644 (file)
@@ -16,7 +16,7 @@
  * @package    twig
  * @author     Fabien Potencier <fabien.potencier@symfony-project.com>
  */
-class Twig_Node_Text extends Twig_Node
+class Twig_Node_Text extends Twig_Node implements Twig_NodeOutputInterface
 {
     public function __construct($data, $lineno)
     {
diff --git a/lib/Twig/NodeOutputInterface.php b/lib/Twig/NodeOutputInterface.php
new file mode 100644 (file)
index 0000000..a75154c
--- /dev/null
@@ -0,0 +1,20 @@
+<?php
+
+/*
+ * This file is part of Twig.
+ *
+ * (c) 2010 Fabien Potencier
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Represents a displayable node in the AST.
+ *
+ * @package    twig
+ * @author     Fabien Potencier <fabien.potencier@symfony-project.com>
+ */
+interface Twig_NodeOutputInterface
+{
+}
index 06830e2..7307386 100644 (file)
@@ -244,13 +244,13 @@ class Twig_Parser implements Twig_ParserInterface
 
     protected function checkBodyNodes($body)
     {
-        // check that the body only contains block references and empty text nodes
+        // check that the body does not contain non-empty output nodes
         foreach ($body as $node)
         {
             if (
                 ($node instanceof Twig_Node_Text && !ctype_space($node->getAttribute('data')))
                 ||
-                (!$node instanceof Twig_Node_Text && !$node instanceof Twig_Node_BlockReference && !$node instanceof Twig_Node_Import)
+                (!$node instanceof Twig_Node_Text && !$node instanceof Twig_Node_BlockReference && $node instanceof Twig_NodeOutputInterface)
             ) {
                 throw new Twig_Error_Syntax(sprintf('A template that extends another one cannot have a body (%s).', $node), $node->getLine());
             }