equal
deleted
inserted
replaced
182 for each value, expand 'foo'. if 'last_foo' in template |
182 for each value, expand 'foo'. if 'last_foo' in template |
183 map, expand it instead of 'foo' for last key. |
183 map, expand it instead of 'foo' for last key. |
184 |
184 |
185 expand 'end_foos'. |
185 expand 'end_foos'. |
186 ''' |
186 ''' |
187 strmapping = pycompat.strkwargs(mapping) |
|
188 if not plural: |
187 if not plural: |
189 plural = name + 's' |
188 plural = name + 's' |
190 if not values: |
189 if not values: |
191 noname = 'no_' + plural |
190 noname = 'no_' + plural |
192 if noname in templ: |
191 if noname in templ: |
193 yield templ(noname, **strmapping) |
192 yield templ.generate(noname, mapping) |
194 return |
193 return |
195 if name not in templ: |
194 if name not in templ: |
196 if isinstance(values[0], bytes): |
195 if isinstance(values[0], bytes): |
197 yield separator.join(values) |
196 yield separator.join(values) |
198 else: |
197 else: |
201 r.update(mapping) |
200 r.update(mapping) |
202 yield r |
201 yield r |
203 return |
202 return |
204 startname = 'start_' + plural |
203 startname = 'start_' + plural |
205 if startname in templ: |
204 if startname in templ: |
206 yield templ(startname, **strmapping) |
205 yield templ.generate(startname, mapping) |
207 vmapping = mapping.copy() |
206 vmapping = mapping.copy() |
208 def one(v, tag=name): |
207 def one(v, tag=name): |
209 try: |
208 try: |
210 vmapping.update(v) |
209 vmapping.update(v) |
211 # Python 2 raises ValueError if the type of v is wrong. Python |
210 # Python 2 raises ValueError if the type of v is wrong. Python |
216 # bytes. Python 3 raises TypeError. |
215 # bytes. Python 3 raises TypeError. |
217 for a, b in v: |
216 for a, b in v: |
218 vmapping[a] = b |
217 vmapping[a] = b |
219 except (TypeError, ValueError): |
218 except (TypeError, ValueError): |
220 vmapping[name] = v |
219 vmapping[name] = v |
221 return templ(tag, **pycompat.strkwargs(vmapping)) |
220 return templ.generate(tag, vmapping) |
222 lastname = 'last_' + name |
221 lastname = 'last_' + name |
223 if lastname in templ: |
222 if lastname in templ: |
224 last = values.pop() |
223 last = values.pop() |
225 else: |
224 else: |
226 last = None |
225 last = None |
228 yield one(v) |
227 yield one(v) |
229 if last is not None: |
228 if last is not None: |
230 yield one(last, tag=lastname) |
229 yield one(last, tag=lastname) |
231 endname = 'end_' + plural |
230 endname = 'end_' + plural |
232 if endname in templ: |
231 if endname in templ: |
233 yield templ(endname, **strmapping) |
232 yield templ.generate(endname, mapping) |
234 |
233 |
235 def stringify(thing): |
234 def stringify(thing): |
236 """Turn values into bytes by converting into text and concatenating them""" |
235 """Turn values into bytes by converting into text and concatenating them""" |
237 thing = unwraphybrid(thing) |
236 thing = unwraphybrid(thing) |
238 if util.safehasattr(thing, '__iter__') and not isinstance(thing, bytes): |
237 if util.safehasattr(thing, '__iter__') and not isinstance(thing, bytes): |