aboutsummaryrefslogtreecommitdiffstats
path: root/lib/mako/codegen.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2007-01-29 08:24:45 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2007-01-29 08:24:45 +0000
commitc6849da7906431c3f161ba0a8be088a8866cbf7a (patch)
treeb767418d1e987cdcdce8a27346b62e47e4875e06 /lib/mako/codegen.py
parent9e5ec11514e0dccfc34a5c14ad671c06ad38fbc1 (diff)
downloadexternal_python_mako-c6849da7906431c3f161ba0a8be088a8866cbf7a.tar.gz
external_python_mako-c6849da7906431c3f161ba0a8be088a8866cbf7a.tar.bz2
external_python_mako-c6849da7906431c3f161ba0a8be088a8866cbf7a.zip
changed around filtering so you can just say "decode.utf8" or "decode.<whatever>" for generic expression decoding
Diffstat (limited to 'lib/mako/codegen.py')
-rw-r--r--lib/mako/codegen.py23
1 files changed, 19 insertions, 4 deletions
diff --git a/lib/mako/codegen.py b/lib/mako/codegen.py
index d17ae64..477ccad 100644
--- a/lib/mako/codegen.py
+++ b/lib/mako/codegen.py
@@ -391,8 +391,20 @@ class _GenerateRenderMethod(object):
def create_filter_callable(self, args, target, is_expression):
"""write a filter-applying expression based on the filters present in the given
filter names, adjusting for the global 'default' filter aliases as needed."""
- d = dict([(k, (v is unicode and 'unicode' or "filters." + v.func_name)) for k, v in filters.DEFAULT_ESCAPES.iteritems()])
-
+ def locate_encode(name):
+ if re.match(r'decode\..+', name):
+ return "filters." + name
+ 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:
@@ -402,10 +414,13 @@ class _GenerateRenderMethod(object):
m = re.match(r'(.+?)(\(.*\))', e)
if m:
(ident, fargs) = m.group(1,2)
- f = d.get(ident, ident)
+ f = locate_encode(ident)
e = f + fargs
else:
- e = d.get(e, e)
+ x = e
+ e = locate_encode(e)
+ if e is None:
+ raise "der its none " + x
target = "%s(%s)" % (e, target)
return target