mercurial/templater.py
changeset 26124 604a7c941103
parent 26106 c568c4db036f
child 26125 c990afab2243
equal deleted inserted replaced
26123:bdac264e5ed4 26124:604a7c941103
   213         # even if it exists in mapping. this allows us to override mapping
   213         # even if it exists in mapping. this allows us to override mapping
   214         # by web templates, e.g. 'changelogtag' is redefined in map file.
   214         # by web templates, e.g. 'changelogtag' is redefined in map file.
   215         return context._load(exp[1])
   215         return context._load(exp[1])
   216     raise error.ParseError(_("expected template specifier"))
   216     raise error.ParseError(_("expected template specifier"))
   217 
   217 
       
   218 def evalfuncarg(context, mapping, arg):
       
   219     func, data = arg
       
   220     # func() may return string, generator of strings or arbitrary object such
       
   221     # as date tuple, but filter does not want generator.
       
   222     thing = func(context, mapping, data)
       
   223     if isinstance(thing, types.GeneratorType):
       
   224         thing = stringify(thing)
       
   225     return thing
       
   226 
   218 def runinteger(context, mapping, data):
   227 def runinteger(context, mapping, data):
   219     return int(data)
   228     return int(data)
   220 
   229 
   221 def runstring(context, mapping, data):
   230 def runstring(context, mapping, data):
   222     return data
   231     return data
   257         return (f, [(func, data)])
   266         return (f, [(func, data)])
   258     raise error.ParseError(_("unknown function '%s'") % n)
   267     raise error.ParseError(_("unknown function '%s'") % n)
   259 
   268 
   260 def runfilter(context, mapping, data):
   269 def runfilter(context, mapping, data):
   261     func, data, filt = data
   270     func, data, filt = data
   262     # func() may return string, generator of strings or arbitrary object such
   271     thing = evalfuncarg(context, mapping, (func, data))
   263     # as date tuple, but filter does not want generator.
       
   264     thing = func(context, mapping, data)
       
   265     if isinstance(thing, types.GeneratorType):
       
   266         thing = stringify(thing)
       
   267     try:
   272     try:
   268         return filt(thing)
   273         return filt(thing)
   269     except (ValueError, AttributeError, TypeError):
   274     except (ValueError, AttributeError, TypeError):
   270         if isinstance(data, tuple):
   275         if isinstance(data, tuple):
   271             dt = data[1]
   276             dt = data[1]