autoescaping is separate from finalize now and Markup is completely ignored if the environment is not in autoescape mode
--HG--
branch : trunk
diff --git a/jinja2/compiler.py b/jinja2/compiler.py
index 8c699f5..2631c45 100644
--- a/jinja2/compiler.py
+++ b/jinja2/compiler.py
@@ -843,7 +843,10 @@
self.pull_locals(macro_frame)
self.writeline('%s = []' % buf)
self.blockvisit(node.body, macro_frame)
- self.writeline("return Markup(concat(%s))" % buf)
+ if self.environment.autoescape:
+ self.writeline('return Markup(concat(%s))' % buf)
+ else:
+ self.writeline("return concat(%s)" % buf)
self.outdent()
self.newline()
if frame.toplevel:
@@ -874,7 +877,10 @@
self.pull_locals(call_frame)
self.writeline('%s = []' % buf)
self.blockvisit(node.body, call_frame)
- self.writeline("return Markup(concat(%s))" % buf)
+ if self.environment.autoescape:
+ self.writeline("return Markup(concat(%s))" % buf)
+ else:
+ self.writeline('return concat(%s)' % buf)
self.outdent()
arg_tuple = ', '.join(repr(x.name) for x in node.args)
if len(node.args) == 1:
@@ -927,12 +933,6 @@
return
self.newline(node)
- if self.environment.finalize is unicode:
- finalizer = 'unicode'
- have_finalizer = False
- else:
- finalizer = 'environment.finalize'
- have_finalizer = True
# if we are in the toplevel scope and there was already an extends
# statement we have to add a check that disables our yield(s) here
@@ -972,9 +972,16 @@
else:
if frame.buffer is None:
self.writeline('yield ')
- self.write(finalizer + '(')
+ close = 1
+ if self.environment.autoescape:
+ self.write('escape(')
+ else:
+ self.write('unicode(')
+ if self.environment.finalize is not None:
+ self.write('environment.finalize(')
+ close += 1
self.visit(item, frame)
- self.write(')')
+ self.write(')' * close)
if frame.buffer is not None:
self.write(', ')
if frame.buffer is not None:
@@ -999,12 +1006,15 @@
self.indent()
for argument in arguments:
self.newline(argument)
- if have_finalizer:
- self.write(finalizer + '(')
+ close = 0
+ if self.environment.autoescape:
+ self.write('escape(')
+ close += 1
+ if self.environment.finalize is not None:
+ self.write('environment.finalize(')
+ close += 1
self.visit(argument, frame)
- if have_finalizer:
- self.write(')')
- self.write(',')
+ self.write(')' * close + ',')
self.outdent()
self.writeline(')')
if frame.buffer is not None:
@@ -1105,6 +1115,13 @@
visit_Not = uaop('not ')
del binop, uaop
+ def visit_Concat(self, node, frame):
+ self.write('join((')
+ for arg in node.nodes:
+ self.visit(arg, frame)
+ self.write(', ')
+ self.write('))')
+
def visit_Compare(self, node, frame):
self.visit(node.expr, frame)
for op in node.ops: