Mercurial > hg
comparison mercurial/templater.py @ 19390:3af3a165db18
templater: sort functions alphabetically, as filters are
author | Alexander Plavin <me@aplavin.ru> |
---|---|
date | Sat, 29 Jun 2013 14:27:53 +0400 |
parents | 867b9957d895 |
children | 0361163efbaf |
comparison
equal
deleted
inserted
replaced
19389:41c4bdd1d585 | 19390:3af3a165db18 |
---|---|
203 if len(args) != 1: | 203 if len(args) != 1: |
204 raise error.ParseError(_("filter %s expects one argument") % n) | 204 raise error.ParseError(_("filter %s expects one argument") % n) |
205 f = context._filters[n] | 205 f = context._filters[n] |
206 return (runfilter, (args[0][0], args[0][1], f)) | 206 return (runfilter, (args[0][0], args[0][1], f)) |
207 | 207 |
208 def get(context, mapping, args): | 208 def date(context, mapping, args): |
209 if len(args) != 2: | |
210 # i18n: "get" is a keyword | |
211 raise error.ParseError(_("get() expects two arguments")) | |
212 | |
213 dictarg = args[0][0](context, mapping, args[0][1]) | |
214 if not util.safehasattr(dictarg, 'get'): | |
215 # i18n: "get" is a keyword | |
216 raise error.ParseError(_("get() expects a dict as first argument")) | |
217 | |
218 key = args[1][0](context, mapping, args[1][1]) | |
219 yield dictarg.get(key) | |
220 | |
221 def join(context, mapping, args): | |
222 if not (1 <= len(args) <= 2): | 209 if not (1 <= len(args) <= 2): |
223 # i18n: "join" is a keyword | 210 raise error.ParseError(_("date expects one or two arguments")) |
224 raise error.ParseError(_("join expects one or two arguments")) | 211 |
225 | 212 date = args[0][0](context, mapping, args[0][1]) |
226 joinset = args[0][0](context, mapping, args[0][1]) | 213 if len(args) == 2: |
227 if util.safehasattr(joinset, '__call__'): | 214 fmt = stringify(args[1][0](context, mapping, args[1][1])) |
228 jf = joinset.joinfmt | 215 return util.datestr(date, fmt) |
229 joinset = [jf(x) for x in joinset()] | 216 return util.datestr(date) |
230 | |
231 joiner = " " | |
232 if len(args) > 1: | |
233 joiner = args[1][0](context, mapping, args[1][1]) | |
234 | |
235 first = True | |
236 for x in joinset: | |
237 if first: | |
238 first = False | |
239 else: | |
240 yield joiner | |
241 yield x | |
242 | |
243 def sub(context, mapping, args): | |
244 if len(args) != 3: | |
245 # i18n: "sub" is a keyword | |
246 raise error.ParseError(_("sub expects three arguments")) | |
247 | |
248 pat = stringify(args[0][0](context, mapping, args[0][1])) | |
249 rpl = stringify(args[1][0](context, mapping, args[1][1])) | |
250 src = stringify(args[2][0](context, mapping, args[2][1])) | |
251 src = stringify(runtemplate(context, mapping, | |
252 compiletemplate(src, context))) | |
253 yield re.sub(pat, rpl, src) | |
254 | |
255 def if_(context, mapping, args): | |
256 if not (2 <= len(args) <= 3): | |
257 # i18n: "if" is a keyword | |
258 raise error.ParseError(_("if expects two or three arguments")) | |
259 | |
260 test = stringify(args[0][0](context, mapping, args[0][1])) | |
261 if test: | |
262 t = stringify(args[1][0](context, mapping, args[1][1])) | |
263 yield runtemplate(context, mapping, compiletemplate(t, context)) | |
264 elif len(args) == 3: | |
265 t = stringify(args[2][0](context, mapping, args[2][1])) | |
266 yield runtemplate(context, mapping, compiletemplate(t, context)) | |
267 | |
268 def ifeq(context, mapping, args): | |
269 if not (3 <= len(args) <= 4): | |
270 # i18n: "ifeq" is a keyword | |
271 raise error.ParseError(_("ifeq expects three or four arguments")) | |
272 | |
273 test = stringify(args[0][0](context, mapping, args[0][1])) | |
274 match = stringify(args[1][0](context, mapping, args[1][1])) | |
275 if test == match: | |
276 t = stringify(args[2][0](context, mapping, args[2][1])) | |
277 yield runtemplate(context, mapping, compiletemplate(t, context)) | |
278 elif len(args) == 4: | |
279 t = stringify(args[3][0](context, mapping, args[3][1])) | |
280 yield runtemplate(context, mapping, compiletemplate(t, context)) | |
281 | |
282 def label(context, mapping, args): | |
283 if len(args) != 2: | |
284 # i18n: "label" is a keyword | |
285 raise error.ParseError(_("label expects two arguments")) | |
286 | |
287 # ignore args[0] (the label string) since this is supposed to be a a no-op | |
288 t = stringify(args[1][0](context, mapping, args[1][1])) | |
289 yield runtemplate(context, mapping, compiletemplate(t, context)) | |
290 | |
291 def rstdoc(context, mapping, args): | |
292 if len(args) != 2: | |
293 # i18n: "rstdoc" is a keyword | |
294 raise error.ParseError(_("rstdoc expects two arguments")) | |
295 | |
296 text = stringify(args[0][0](context, mapping, args[0][1])) | |
297 style = stringify(args[1][0](context, mapping, args[1][1])) | |
298 | |
299 return minirst.format(text, style=style, keep=['verbose']) | |
300 | 217 |
301 def fill(context, mapping, args): | 218 def fill(context, mapping, args): |
302 if not (1 <= len(args) <= 4): | 219 if not (1 <= len(args) <= 4): |
303 raise error.ParseError(_("fill expects one to four arguments")) | 220 raise error.ParseError(_("fill expects one to four arguments")) |
304 | 221 |
321 except IndexError: | 238 except IndexError: |
322 pass | 239 pass |
323 | 240 |
324 return templatefilters.fill(text, width, initindent, hangindent) | 241 return templatefilters.fill(text, width, initindent, hangindent) |
325 | 242 |
326 def date(context, mapping, args): | 243 def get(context, mapping, args): |
244 if len(args) != 2: | |
245 # i18n: "get" is a keyword | |
246 raise error.ParseError(_("get() expects two arguments")) | |
247 | |
248 dictarg = args[0][0](context, mapping, args[0][1]) | |
249 if not util.safehasattr(dictarg, 'get'): | |
250 # i18n: "get" is a keyword | |
251 raise error.ParseError(_("get() expects a dict as first argument")) | |
252 | |
253 key = args[1][0](context, mapping, args[1][1]) | |
254 yield dictarg.get(key) | |
255 | |
256 def if_(context, mapping, args): | |
257 if not (2 <= len(args) <= 3): | |
258 # i18n: "if" is a keyword | |
259 raise error.ParseError(_("if expects two or three arguments")) | |
260 | |
261 test = stringify(args[0][0](context, mapping, args[0][1])) | |
262 if test: | |
263 t = stringify(args[1][0](context, mapping, args[1][1])) | |
264 yield runtemplate(context, mapping, compiletemplate(t, context)) | |
265 elif len(args) == 3: | |
266 t = stringify(args[2][0](context, mapping, args[2][1])) | |
267 yield runtemplate(context, mapping, compiletemplate(t, context)) | |
268 | |
269 def ifeq(context, mapping, args): | |
270 if not (3 <= len(args) <= 4): | |
271 # i18n: "ifeq" is a keyword | |
272 raise error.ParseError(_("ifeq expects three or four arguments")) | |
273 | |
274 test = stringify(args[0][0](context, mapping, args[0][1])) | |
275 match = stringify(args[1][0](context, mapping, args[1][1])) | |
276 if test == match: | |
277 t = stringify(args[2][0](context, mapping, args[2][1])) | |
278 yield runtemplate(context, mapping, compiletemplate(t, context)) | |
279 elif len(args) == 4: | |
280 t = stringify(args[3][0](context, mapping, args[3][1])) | |
281 yield runtemplate(context, mapping, compiletemplate(t, context)) | |
282 | |
283 def join(context, mapping, args): | |
327 if not (1 <= len(args) <= 2): | 284 if not (1 <= len(args) <= 2): |
328 raise error.ParseError(_("date expects one or two arguments")) | 285 # i18n: "join" is a keyword |
329 | 286 raise error.ParseError(_("join expects one or two arguments")) |
330 date = args[0][0](context, mapping, args[0][1]) | 287 |
331 if len(args) == 2: | 288 joinset = args[0][0](context, mapping, args[0][1]) |
332 fmt = stringify(args[1][0](context, mapping, args[1][1])) | 289 if util.safehasattr(joinset, '__call__'): |
333 return util.datestr(date, fmt) | 290 jf = joinset.joinfmt |
334 return util.datestr(date) | 291 joinset = [jf(x) for x in joinset()] |
292 | |
293 joiner = " " | |
294 if len(args) > 1: | |
295 joiner = args[1][0](context, mapping, args[1][1]) | |
296 | |
297 first = True | |
298 for x in joinset: | |
299 if first: | |
300 first = False | |
301 else: | |
302 yield joiner | |
303 yield x | |
304 | |
305 def label(context, mapping, args): | |
306 if len(args) != 2: | |
307 # i18n: "label" is a keyword | |
308 raise error.ParseError(_("label expects two arguments")) | |
309 | |
310 # ignore args[0] (the label string) since this is supposed to be a a no-op | |
311 t = stringify(args[1][0](context, mapping, args[1][1])) | |
312 yield runtemplate(context, mapping, compiletemplate(t, context)) | |
313 | |
314 def rstdoc(context, mapping, args): | |
315 if len(args) != 2: | |
316 # i18n: "rstdoc" is a keyword | |
317 raise error.ParseError(_("rstdoc expects two arguments")) | |
318 | |
319 text = stringify(args[0][0](context, mapping, args[0][1])) | |
320 style = stringify(args[1][0](context, mapping, args[1][1])) | |
321 | |
322 return minirst.format(text, style=style, keep=['verbose']) | |
335 | 323 |
336 def strip(context, mapping, args): | 324 def strip(context, mapping, args): |
337 if not (1 <= len(args) <= 2): | 325 if not (1 <= len(args) <= 2): |
338 raise error.ParseError(_("strip expects one or two arguments")) | 326 raise error.ParseError(_("strip expects one or two arguments")) |
339 | 327 |
340 text = args[0][0](context, mapping, args[0][1]) | 328 text = args[0][0](context, mapping, args[0][1]) |
341 if len(args) == 2: | 329 if len(args) == 2: |
342 chars = args[1][0](context, mapping, args[1][1]) | 330 chars = args[1][0](context, mapping, args[1][1]) |
343 return text.strip(chars) | 331 return text.strip(chars) |
344 return text.strip() | 332 return text.strip() |
333 | |
334 def sub(context, mapping, args): | |
335 if len(args) != 3: | |
336 # i18n: "sub" is a keyword | |
337 raise error.ParseError(_("sub expects three arguments")) | |
338 | |
339 pat = stringify(args[0][0](context, mapping, args[0][1])) | |
340 rpl = stringify(args[1][0](context, mapping, args[1][1])) | |
341 src = stringify(args[2][0](context, mapping, args[2][1])) | |
342 src = stringify(runtemplate(context, mapping, | |
343 compiletemplate(src, context))) | |
344 yield re.sub(pat, rpl, src) | |
345 | 345 |
346 methods = { | 346 methods = { |
347 "string": lambda e, c: (runstring, e[1]), | 347 "string": lambda e, c: (runstring, e[1]), |
348 "symbol": lambda e, c: (runsymbol, e[1]), | 348 "symbol": lambda e, c: (runsymbol, e[1]), |
349 "group": lambda e, c: compileexp(e[1], c), | 349 "group": lambda e, c: compileexp(e[1], c), |
352 "%": buildmap, | 352 "%": buildmap, |
353 "func": buildfunc, | 353 "func": buildfunc, |
354 } | 354 } |
355 | 355 |
356 funcs = { | 356 funcs = { |
357 "date": date, | |
358 "fill": fill, | |
357 "get": get, | 359 "get": get, |
358 "if": if_, | 360 "if": if_, |
359 "ifeq": ifeq, | 361 "ifeq": ifeq, |
360 "join": join, | 362 "join": join, |
361 "label": label, | 363 "label": label, |
362 "rstdoc": rstdoc, | 364 "rstdoc": rstdoc, |
365 "strip": strip, | |
363 "sub": sub, | 366 "sub": sub, |
364 "fill": fill, | |
365 "date": date, | |
366 "strip": strip, | |
367 } | 367 } |
368 | 368 |
369 # template engine | 369 # template engine |
370 | 370 |
371 path = ['templates', '../templates'] | 371 path = ['templates', '../templates'] |