Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/templateutil.py @ 37325:41a5d815d2c1
templater: factor out generator of join()-ed items
Prepares for defining join() behavior per wrapped types and getting rid
of the public joinfmt attribute.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sat, 17 Mar 2018 21:42:27 +0900 |
parents | c2f74b8f6b7f |
children | 9cd88dd3bf64 |
comparison
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 |