diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-03-27 00:40:42 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-03-27 00:40:42 +0000 |
commit | ca4a1fdac5f6348d8b06644e40a678883220057c (patch) | |
tree | cf4e5f6cf082f22ba8a5eb111919d01d0cea13c6 /lib/mako/codegen.py | |
parent | 273621284508cba20dbb08e94bafa68779fe5c9f (diff) | |
download | external_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.py | 30 |
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) |