mercurial/templater.py
changeset 8492 d72d1a97408a
parent 8476 d5dda64f5552
child 8517 110763cc3ab0
equal deleted inserted replaced
8491:bd45047afaeb 8492:d72d1a97408a
    81             yield self.process(format, lm)
    81             yield self.process(format, lm)
    82 
    82 
    83     def _filter(self, expr, get, map):
    83     def _filter(self, expr, get, map):
    84         if expr not in self.cache:
    84         if expr not in self.cache:
    85             parts = expr.split('|')
    85             parts = expr.split('|')
    86             filters = parts[1:]
    86             val = parts[0]
    87             for f in filters:
    87             try:
    88             	if f not in self.filters:
    88                 filters = [self.filters[f] for f in parts[1:]]
    89                     raise SyntaxError(_("unknown filter '%s'") % expr)
    89             except KeyError, i:
    90             calls = '('.join(i for i in reversed(filters))
    90                 raise SyntaxError(_("unknown filter '%s'") % i[0])
    91             end = ')' * len(filters)
    91             def apply(get):
    92             code = "lambda _get: %s(_get('%s')%s" % (calls, parts[0], end)
    92                     x = get(val)
    93             self.cache[expr] = eval(code, self.filters)
    93                     for f in filters:
       
    94                         x = f(x)
       
    95                     return x
       
    96             self.cache[expr] = apply
    94         return self.cache[expr](get)
    97         return self.cache[expr](get)
    95 
    98 
    96     def _process(self, tmpl, map):
    99     def _process(self, tmpl, map):
    97         '''Render a template. Returns a generator.'''
   100         '''Render a template. Returns a generator.'''
    98 
   101