aboutsummaryrefslogtreecommitdiffstats
path: root/lib/mako/codegen.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2007-03-27 00:40:42 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2007-03-27 00:40:42 +0000
commitca4a1fdac5f6348d8b06644e40a678883220057c (patch)
treecf4e5f6cf082f22ba8a5eb111919d01d0cea13c6 /lib/mako/codegen.py
parent273621284508cba20dbb08e94bafa68779fe5c9f (diff)
downloadexternal_python_mako-ca4a1fdac5f6348d8b06644e40a678883220057c.tar.gz
external_python_mako-ca4a1fdac5f6348d8b06644e40a678883220057c.tar.bz2
external_python_mako-ca4a1fdac5f6348d8b06644e40a678883220057c.zip
- added "n" filter, disables *all* filters normally applied to an expression
via <%page> or default_filters (but not those within the filter) - added buffer_filters argument, defines filters applied to the return value of buffered/cached/filtered %defs, after all filters defined with the %def itself have been applied. allows the creation of default expression filters that let the output of return-valued %defs "opt out" of that filtering via passing special attributes or objects. - added support for "class" structures in ast parsing (i.e. class-level data members wont get added to the "declared" list)
Diffstat (limited to 'lib/mako/codegen.py')
-rw-r--r--lib/mako/codegen.py30
1 files changed, 15 insertions, 15 deletions
diff --git a/lib/mako/codegen.py b/lib/mako/codegen.py
index efdd301..c2a10d3 100644
--- a/lib/mako/codegen.py
+++ b/lib/mako/codegen.py
@@ -14,18 +14,19 @@ from mako import util, ast, parsetree, filters
MAGIC_NUMBER = 1
-def compile(node, uri, filename=None, default_filters=None, imports=None):
+def compile(node, uri, filename=None, default_filters=None, buffer_filters=None, imports=None):
"""generate module source code given a parsetree node, uri, and optional source filename"""
buf = util.FastEncodingBuffer()
printer = PythonPrinter(buf)
- _GenerateRenderMethod(printer, _CompileContext(uri, filename, default_filters, imports), node)
+ _GenerateRenderMethod(printer, _CompileContext(uri, filename, default_filters, buffer_filters, imports), node)
return buf.getvalue()
class _CompileContext(object):
- def __init__(self, uri, filename, default_filters, imports):
+ def __init__(self, uri, filename, default_filters, buffer_filters, imports):
self.uri = uri
self.filename = filename
self.default_filters = default_filters
+ self.buffer_filters = buffer_filters
self.imports = imports
class _GenerateRenderMethod(object):
@@ -345,6 +346,7 @@ class _GenerateRenderMethod(object):
s = "_buf.getvalue()"
if filtered:
s = self.create_filter_callable(node.filter_args.args, s, False)
+ s = self.create_filter_callable(self.compiler.buffer_filters, s, False)
self.printer.writeline(None)
if buffered or cached:
self.printer.writeline("return %s" % s)
@@ -402,20 +404,18 @@ class _GenerateRenderMethod(object):
elif name == 'unicode':
return 'unicode'
else:
- return \
- {'x':'filters.xml_escape',
- 'h':'filters.html_escape',
- 'u':'filters.url_escape',
- 'trim':'filters.trim',
- 'entity':'filters.html_entities_escape',
- }.get(name, name)
-
- if is_expression and self.compiler.pagetag:
- args = self.compiler.pagetag.filter_args.args + args
- if is_expression and self.compiler.default_filters:
- args = self.compiler.default_filters + args
+ return filters.DEFAULT_ESCAPES.get(name, name)
+
+ if 'n' not in args:
+ if is_expression:
+ if self.compiler.pagetag:
+ args = self.compiler.pagetag.filter_args.args + args
+ if self.compiler.default_filters:
+ args = self.compiler.default_filters + args
for e in args:
# if filter given as a function, get just the identifier portion
+ if e == 'n':
+ continue
m = re.match(r'(.+?)(\(.*\))', e)
if m:
(ident, fargs) = m.group(1,2)