mercurial/templater.py
changeset 31922 0f41f1e3c75c
parent 31921 2156934b7917
child 31926 932241b8c644
equal deleted inserted replaced
31921:2156934b7917 31922:0f41f1e3c75c
   472     >>> context = engine(lambda t: (runsymbol, t))
   472     >>> context = engine(lambda t: (runsymbol, t))
   473     >>> def fargs(expr, argspec):
   473     >>> def fargs(expr, argspec):
   474     ...     x = _parseexpr(expr)
   474     ...     x = _parseexpr(expr)
   475     ...     n = getsymbol(x[1])
   475     ...     n = getsymbol(x[1])
   476     ...     return _buildfuncargs(x[2], context, exprmethods, n, argspec)
   476     ...     return _buildfuncargs(x[2], context, exprmethods, n, argspec)
   477     >>> sorted(fargs('a(l=1, k=2)', 'k l m').keys())
   477     >>> fargs('a(l=1, k=2)', 'k l m').keys()
   478     ['k', 'l']
   478     ['l', 'k']
   479     >>> args = fargs('a(opts=1, k=2)', '**opts')
   479     >>> args = fargs('a(opts=1, k=2)', '**opts')
   480     >>> args.keys(), sorted(args['opts'].keys())
   480     >>> args.keys(), args['opts'].keys()
   481     (['opts'], ['k', 'opts'])
   481     (['opts'], ['opts', 'k'])
   482     """
   482     """
   483     def compiledict(xs):
   483     def compiledict(xs):
   484         return dict((k, compileexp(x, context, curmethods))
   484         return util.sortdict((k, compileexp(x, context, curmethods))
   485                     for k, x in xs.iteritems())
   485                              for k, x in xs.iteritems())
   486     def compilelist(xs):
   486     def compilelist(xs):
   487         return [compileexp(x, context, curmethods) for x in xs]
   487         return [compileexp(x, context, curmethods) for x in xs]
   488 
   488 
   489     if not argspec:
   489     if not argspec:
   490         # filter or function with no argspec: return list of positional args
   490         # filter or function with no argspec: return list of positional args
   492 
   492 
   493     # function with argspec: return dict of named args
   493     # function with argspec: return dict of named args
   494     _poskeys, varkey, _keys, optkey = argspec = parser.splitargspec(argspec)
   494     _poskeys, varkey, _keys, optkey = argspec = parser.splitargspec(argspec)
   495     treeargs = parser.buildargsdict(getlist(exp), funcname, argspec,
   495     treeargs = parser.buildargsdict(getlist(exp), funcname, argspec,
   496                                     keyvaluenode='keyvalue', keynode='symbol')
   496                                     keyvaluenode='keyvalue', keynode='symbol')
   497     compargs = {}
   497     compargs = util.sortdict()
   498     if varkey:
   498     if varkey:
   499         compargs[varkey] = compilelist(treeargs.pop(varkey))
   499         compargs[varkey] = compilelist(treeargs.pop(varkey))
   500     if optkey:
   500     if optkey:
   501         compargs[optkey] = compiledict(treeargs.pop(optkey))
   501         compargs[optkey] = compiledict(treeargs.pop(optkey))
   502     compargs.update(compiledict(treeargs))
   502     compargs.update(compiledict(treeargs))