mercurial/templateutil.py
changeset 37327 ebf139cbd4a1
parent 37326 9cd88dd3bf64
child 37329 676664592313
equal deleted inserted replaced
37326:9cd88dd3bf64 37327:ebf139cbd4a1
    40     @abc.abstractmethod
    40     @abc.abstractmethod
    41     def itermaps(self, context):
    41     def itermaps(self, context):
    42         """Yield each template mapping"""
    42         """Yield each template mapping"""
    43 
    43 
    44     @abc.abstractmethod
    44     @abc.abstractmethod
       
    45     def join(self, context, mapping, sep):
       
    46         """Join items with the separator; Returns a bytes or (possibly nested)
       
    47         generator of bytes
       
    48 
       
    49         A pre-configured template may be rendered per item if this container
       
    50         holds unprintable items.
       
    51         """
       
    52 
       
    53     @abc.abstractmethod
    45     def show(self, context, mapping):
    54     def show(self, context, mapping):
    46         """Return a bytes or (possibly nested) generator of bytes representing
    55         """Return a bytes or (possibly nested) generator of bytes representing
    47         the underlying object
    56         the underlying object
    48 
    57 
    49         A pre-configured template may be rendered if the underlying object is
    58         A pre-configured template may be rendered if the underlying object is
    84     def itermaps(self, context):
    93     def itermaps(self, context):
    85         makemap = self._makemap
    94         makemap = self._makemap
    86         for x in self._values:
    95         for x in self._values:
    87             yield makemap(x)
    96             yield makemap(x)
    88 
    97 
       
    98     def join(self, context, mapping, sep):
       
    99         # TODO: switch gen to (context, mapping) API?
       
   100         return joinitems((self.joinfmt(x) for x in self._values), sep)
       
   101 
    89     def show(self, context, mapping):
   102     def show(self, context, mapping):
    90         # TODO: switch gen to (context, mapping) API?
   103         # TODO: switch gen to (context, mapping) API?
    91         gen = self._gen
   104         gen = self._gen
    92         if gen is None:
   105         if gen is None:
    93             return joinitems((self.joinfmt(x) for x in self._values), ' ')
   106             return self.join(context, mapping, ' ')
    94         if callable(gen):
   107         if callable(gen):
    95             return gen()
   108             return gen()
    96         return gen
   109         return gen
    97 
   110 
    98     def tovalue(self, context, mapping):
   111     def tovalue(self, context, mapping):
   134     def tomap(self):
   147     def tomap(self):
   135         return self._makemap(self._key)
   148         return self._makemap(self._key)
   136 
   149 
   137     def itermaps(self, context):
   150     def itermaps(self, context):
   138         yield self.tomap()
   151         yield self.tomap()
       
   152 
       
   153     def join(self, context, mapping, sep):
       
   154         # TODO: just copies the old behavior where a value was a generator
       
   155         # yielding one item, but reconsider about it. join() over a string
       
   156         # has no consistent result because a string may be a bytes, or a
       
   157         # generator yielding an item, or a generator yielding multiple items.
       
   158         # Preserving all of the current behaviors wouldn't make any sense.
       
   159         return self.show(context, mapping)
   139 
   160 
   140     def show(self, context, mapping):
   161     def show(self, context, mapping):
   141         # TODO: switch gen to (context, mapping) API?
   162         # TODO: switch gen to (context, mapping) API?
   142         gen = self._gen
   163         gen = self._gen
   143         if gen is None:
   164         if gen is None: