fixed a bug in the compiler
authorArmin Ronacher <armin.ronacher@active-4.com>
Fri, 11 Apr 2008 15:55:05 +0000 (17:55 +0200)
committerArmin Ronacher <armin.ronacher@active-4.com>
Fri, 11 Apr 2008 15:55:05 +0000 (17:55 +0200)
--HG--
branch : trunk

bench.py [new file with mode: 0644]
jinja2/compiler.py
jinja2/environment.py
jinja2/utils.py
test.py

diff --git a/bench.py b/bench.py
new file mode 100644 (file)
index 0000000..1ead1ec
--- /dev/null
+++ b/bench.py
@@ -0,0 +1,19 @@
+from jinja import Environment as E1
+from jinja2 import Environment as E2
+from mako.template import Template as M
+
+t1, t2 = [e.from_string("""
+<ul>
+{%- for item in seq %}
+    <li>{{ item|e }}</li>
+{%- endfor %}
+</ul>
+""") for e in E1(), E2()]
+
+m = M("""
+<ul>
+% for item in seq:
+    <li>${item|h}</li>
+% endfor
+</ul>
+""")
index c9aa0ca4c8d0846f4b9e0880cef00058e28cec1c..3d4c655f3b1ecdd4a1d9c8a02438352811cf5d02 100644 (file)
@@ -165,6 +165,7 @@ class FrameIdentifierVisitor(NodeVisitor):
                 self.identifiers.undeclared.add(node.name)
 
     def visit_Filter(self, node):
+        self.generic_visit(node)
         if node.name not in self.identifiers.filters:
             self.identifiers.filters.add(node.name)
 
index 6ee6a959892540a6c1b4b5ffab9dd48e267bc3ce..417a03539e09b83a0c59f5da895a888474d300a8 100644 (file)
@@ -145,5 +145,4 @@ class Template(object):
         return u''.join(self.stream(*args, **kwargs))
 
     def stream(self, *args, **kwargs):
-        context = dict(*args, **kwargs)
-        return self.root_render_func(context)
+        return self.root_render_func(dict(*args, **kwargs))
index 23a3b152525d5842c57955f4a650cbf0b679bcb5..4ee245d6b9e164237d246dbacd9c105a2269202f 100644 (file)
@@ -14,10 +14,8 @@ def escape(obj, attribute=False):
     """HTML escape an object."""
     if hasattr(obj, '__html__'):
         return obj.__html__()
-    s = unicode(obj) \
+    return unicode(obj) \
         .replace('&', '&amp;') \
         .replace('>', '&gt;') \
-        .replace('<', '&lt;')
-    if attribute:
-        s = s.replace('"', '&quot;')
-    return s
+        .replace('<', '&lt;') \
+        .replace('"', '&quot;')
diff --git a/test.py b/test.py
index e6e7dc8f978debc9125e0d1214d8ad339f04b280..fcdf0503d3130d9e260b8042c1e686feecda6c2e 100644 (file)
--- a/test.py
+++ b/test.py
@@ -1,10 +1,27 @@
-from jinja import Environment as E1
-from jinja2 import Environment as E2
+from jinja2 import Environment
 
-t1, t2 = [e.from_string("""
-<ul>
-{%- for item in seq %}
-    <li>{{ item|e }}</li>
-{%- endfor %}
-</ul>
-""") for e in E1(), E2()]
+env = Environment()
+tmpl = env.from_string("""<!doctype html>
+<html>
+  <head>
+    <title>{{ page_title|e }}</title>
+  </head>
+  <body>
+    <ul class="navigation">
+    {%- for href, caption in [
+        ('index.html', 'Index'),
+        ('projects.html', 'Projects'),
+        ('about.html', 'About')
+    ] %}
+      <li><a href="{{ href|e }}">{{ caption|e }}</a></li>
+    {%- endfor %}
+    </ul>
+    <div class="body">
+      {{ body }}
+    </div>
+  </body>
+</html>\
+""")
+
+
+print tmpl.render(page_title='<foo>', body='<p>Hello World</p>')