fixed setup.py, a type and removed the possibility to use multiple statements per...
authorArmin Ronacher <armin.ronacher@active-4.com>
Mon, 21 Apr 2008 06:23:59 +0000 (08:23 +0200)
committerArmin Ronacher <armin.ronacher@active-4.com>
Mon, 21 Apr 2008 06:23:59 +0000 (08:23 +0200)
--HG--
branch : trunk

jinja2/ext.py
jinja2/i18n.py
jinja2/lexer.py
jinja2/parser.py
setup.py

index 75952eddb1f96b557766a92b3660131302b7732a..230c022fbed6a3d3ed9b3043d5a2634ebbdc6598 100644 (file)
@@ -34,6 +34,7 @@ class Extension(object):
 
 
 class CacheExtension(Extension):
+    """An example extension that adds cacheable blocks."""
     tags = set(['cache'])
 
     def parse(self, parser):
index 3e1392c7a5ecc167d5b97b57e7672c98135f9f05..f6ec7914b793d110b6a3ec6f07c6c2eb8ce3fe48 100644 (file)
@@ -150,7 +150,6 @@ class TransExtension(Extension):
             referenced.update(plural_names)
         else:
             parser.stream.next()
-            parser.end_statement()
 
         # register free names as simple name expressions
         for var in referenced:
@@ -173,7 +172,7 @@ class TransExtension(Extension):
             variables = nodes.Dict([nodes.Pair(nodes.Const(x, lineno=lineno), y)
                                     for x, y in variables.items()])
         else:
-            vairables = None
+            variables = None
 
         node = self._make_node(singular, plural, variables, plural_expr)
         node.set_lineno(lineno)
index 364d3f5e1cc5de6f73044de9a0437d93fb44a7e5..eab6e88ad7ff5f48419c2f5be965faca2727fd32 100644 (file)
@@ -38,9 +38,8 @@ float_re = re.compile(r'\d+\.\d+')
 # set of used keywords
 keywords = set(['and', 'block', 'elif', 'else', 'endblock', 'print',
                 'endfilter', 'endfor', 'endif', 'endmacro', 'endraw',
-                'extends', 'filter', 'for', 'if', 'in',
-                'include', 'is', 'macro', 'not', 'or', 'raw',
-                'recursive', 'set', 'call', 'endcall'])
+                'extends', 'filter', 'for', 'if', 'in', 'include'
+                'is', 'macro', 'not', 'or', 'raw', 'call', 'endcall'])
 
 # bind operators to token types
 operators = {
index 27f54ef1c14397562081a7cb449c6261d72413c9..54aa06e01494339a1d8f34559bc3a017e97c999e 100644 (file)
@@ -16,9 +16,7 @@ from jinja2.exceptions import TemplateSyntaxError
 _statement_keywords = frozenset(['for', 'if', 'block', 'extends', 'print',
                                  'macro', 'include'])
 _compare_operators = frozenset(['eq', 'ne', 'lt', 'lteq', 'gt', 'gteq', 'in'])
-statement_end_tokens = set(['elif', 'else', 'endblock', 'endfilter',
-                             'endfor', 'endif', 'endmacro', 'variable_end',
-                             'in', 'recursive', 'endcall', 'block_end'])
+statement_end_tokens = set(['variable_end', 'block_end', 'in'])
 
 
 class Parser(object):
@@ -40,15 +38,6 @@ class Parser(object):
             for tag in extension.tags:
                 self.extensions[tag] = extension.parse
 
-    def end_statement(self):
-        """Make sure that the statement ends properly."""
-        if self.stream.current.type is 'semicolon':
-            self.stream.next()
-        elif self.stream.current.type not in statement_end_tokens:
-            raise TemplateSyntaxError('ambigous end of statement',
-                                      self.stream.current.lineno,
-                                      self.filename)
-
     def parse_statement(self):
         """Parse a single statement."""
         token_type = self.stream.current.type
@@ -68,7 +57,6 @@ class Parser(object):
             result = self.parse_assign(expr)
         else:
             result = nodes.ExprStmt(expr, lineno=lineno)
-        self.end_statement()
         return result
 
     def parse_assign(self, target):
@@ -79,7 +67,6 @@ class Parser(object):
                                       target, target.lineno,
                                       self.filename)
         expr = self.parse_tuple()
-        self.end_statement()
         target.set_ctx('store')
         return nodes.Assign(target, expr, lineno=lineno)
 
@@ -92,17 +79,11 @@ class Parser(object):
         if self.stream.current.type is 'colon':
             self.stream.next()
 
-        if self.stream.current.type is 'block_end':
-            self.stream.next()
-            result = self.subparse(end_tokens)
-        else:
-            result = []
-            while not self.stream.current.test_many(end_tokens):
-                if self.stream.current.type is 'block_end':
-                    self.stream.next()
-                    result.extend(self.subparse(end_tokens))
-                    break
-                result.append(self.parse_statement())
+        # in the future it would be possible to add whole code sections
+        # by adding some sort of end of statement token and parsing those here.
+        self.stream.expect('block_end')
+        result = self.subparse(end_tokens)
+
         if drop_needle:
             self.stream.next()
         return result
@@ -159,7 +140,6 @@ class Parser(object):
     def parse_extends(self):
         node = nodes.Extends(lineno=self.stream.expect('extends').lineno)
         node.template = self.parse_expression()
-        self.end_statement()
         return node
 
     def parse_include(self):
@@ -180,7 +160,6 @@ class Parser(object):
         else:
             node.target = None
             node.template = expr
-        self.end_statement()
         return node
 
     def parse_signature(self, node):
@@ -239,7 +218,6 @@ class Parser(object):
             if node.nodes:
                 self.stream.expect('comma')
             node.nodes.append(self.parse_expression())
-        self.end_statement()
         return node
 
     def parse_expression(self, no_condexpr=False):
index a12d9986f65a20c21599246a6283d65204d395ae..837de51e4c022b33838cfa5d34b2fd53bf7e97c3 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -131,7 +131,7 @@ setup(
             ]
         )
     },
-    extras_require={'i18n': ['Babel>=0.8']}
+    extras_require={'i18n': ['Babel>=0.8']},
     entry_points="""
     [babel.extractors]
     jinja2 = jinja.i18n:babel_extract[i18n]