mercurial/templateutil.py
changeset 37325 41a5d815d2c1
parent 37324 c2f74b8f6b7f
child 37326 9cd88dd3bf64
equal deleted inserted replaced
37324:c2f74b8f6b7f 37325:41a5d815d2c1
    73     - "{get(extras, key)}"
    73     - "{get(extras, key)}"
    74     - "{files|json}"
    74     - "{files|json}"
    75     """
    75     """
    76 
    76 
    77     def __init__(self, gen, values, makemap, joinfmt, keytype=None):
    77     def __init__(self, gen, values, makemap, joinfmt, keytype=None):
    78         if gen is not None:
    78         self._gen = gen  # generator or function returning generator
    79             self._gen = gen  # generator or function returning generator
       
    80         self._values = values
    79         self._values = values
    81         self._makemap = makemap
    80         self._makemap = makemap
    82         self.joinfmt = joinfmt
    81         self.joinfmt = joinfmt
    83         self.keytype = keytype  # hint for 'x in y' where type(x) is unresolved
    82         self.keytype = keytype  # hint for 'x in y' where type(x) is unresolved
    84 
    83 
    85     def _gen(self):
       
    86         """Default generator to stringify this as {join(self, ' ')}"""
       
    87         for i, x in enumerate(self._values):
       
    88             if i > 0:
       
    89                 yield ' '
       
    90             yield self.joinfmt(x)
       
    91     def itermaps(self, context):
    84     def itermaps(self, context):
    92         makemap = self._makemap
    85         makemap = self._makemap
    93         for x in self._values:
    86         for x in self._values:
    94             yield makemap(x)
    87             yield makemap(x)
    95 
    88 
    96     def show(self, context, mapping):
    89     def show(self, context, mapping):
    97         # TODO: switch gen to (context, mapping) API?
    90         # TODO: switch gen to (context, mapping) API?
    98         gen = self._gen
    91         gen = self._gen
       
    92         if gen is None:
       
    93             return joinitems((self.joinfmt(x) for x in self._values), ' ')
    99         if callable(gen):
    94         if callable(gen):
   100             return gen()
    95             return gen()
   101         return gen
    96         return gen
   102 
    97 
   103     def tovalue(self, context, mapping):
    98     def tovalue(self, context, mapping):
   554 def getdictitem(dictarg, key):
   549 def getdictitem(dictarg, key):
   555     val = dictarg.get(key)
   550     val = dictarg.get(key)
   556     if val is None:
   551     if val is None:
   557         return
   552         return
   558     return wraphybridvalue(dictarg, key, val)
   553     return wraphybridvalue(dictarg, key, val)
       
   554 
       
   555 def joinitems(itemiter, sep):
       
   556     """Join items with the separator; Returns generator of bytes"""
       
   557     first = True
       
   558     for x in itemiter:
       
   559         if first:
       
   560             first = False
       
   561         else:
       
   562             yield sep
       
   563         yield x