##// END OF EJS Templates
templater: sort functions alphabetically, as filters are
Alexander Plavin -
r19390:3af3a165 default
parent child Browse files
Show More
@@ -58,11 +58,11 b' In addition to filters, there are some b'
58 58
59 59 - label(label, expr)
60 60
61 - sub(pat, repl, expr)
62
63 61 - rstdoc(text, style)
64 62
65 - strip(text, chars)
63 - strip(text[, chars])
64
65 - sub(pat, repl, expr)
66 66
67 67 Also, for any expression that returns a list, there is a list operator:
68 68
@@ -205,6 +205,41 b' def buildfunc(exp, context):'
205 205 f = context._filters[n]
206 206 return (runfilter, (args[0][0], args[0][1], f))
207 207
208 def date(context, mapping, args):
209 if not (1 <= len(args) <= 2):
210 raise error.ParseError(_("date expects one or two arguments"))
211
212 date = args[0][0](context, mapping, args[0][1])
213 if len(args) == 2:
214 fmt = stringify(args[1][0](context, mapping, args[1][1]))
215 return util.datestr(date, fmt)
216 return util.datestr(date)
217
218 def fill(context, mapping, args):
219 if not (1 <= len(args) <= 4):
220 raise error.ParseError(_("fill expects one to four arguments"))
221
222 text = stringify(args[0][0](context, mapping, args[0][1]))
223 width = 76
224 initindent = ''
225 hangindent = ''
226 if 2 <= len(args) <= 4:
227 try:
228 width = int(stringify(args[1][0](context, mapping, args[1][1])))
229 except ValueError:
230 raise error.ParseError(_("fill expects an integer width"))
231 try:
232 initindent = stringify(args[2][0](context, mapping, args[2][1]))
233 initindent = stringify(runtemplate(context, mapping,
234 compiletemplate(initindent, context)))
235 hangindent = stringify(args[3][0](context, mapping, args[3][1]))
236 hangindent = stringify(runtemplate(context, mapping,
237 compiletemplate(hangindent, context)))
238 except IndexError:
239 pass
240
241 return templatefilters.fill(text, width, initindent, hangindent)
242
208 243 def get(context, mapping, args):
209 244 if len(args) != 2:
210 245 # i18n: "get" is a keyword
@@ -218,40 +253,6 b' def get(context, mapping, args):'
218 253 key = args[1][0](context, mapping, args[1][1])
219 254 yield dictarg.get(key)
220 255
221 def join(context, mapping, args):
222 if not (1 <= len(args) <= 2):
223 # i18n: "join" is a keyword
224 raise error.ParseError(_("join expects one or two arguments"))
225
226 joinset = args[0][0](context, mapping, args[0][1])
227 if util.safehasattr(joinset, '__call__'):
228 jf = joinset.joinfmt
229 joinset = [jf(x) for x in joinset()]
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 256 def if_(context, mapping, args):
256 257 if not (2 <= len(args) <= 3):
257 258 # i18n: "if" is a keyword
@@ -279,6 +280,28 b' def ifeq(context, mapping, args):'
279 280 t = stringify(args[3][0](context, mapping, args[3][1]))
280 281 yield runtemplate(context, mapping, compiletemplate(t, context))
281 282
283 def join(context, mapping, args):
284 if not (1 <= len(args) <= 2):
285 # i18n: "join" is a keyword
286 raise error.ParseError(_("join expects one or two arguments"))
287
288 joinset = args[0][0](context, mapping, args[0][1])
289 if util.safehasattr(joinset, '__call__'):
290 jf = joinset.joinfmt
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
282 305 def label(context, mapping, args):
283 306 if len(args) != 2:
284 307 # i18n: "label" is a keyword
@@ -298,41 +321,6 b' def rstdoc(context, mapping, args):'
298 321
299 322 return minirst.format(text, style=style, keep=['verbose'])
300 323
301 def fill(context, mapping, args):
302 if not (1 <= len(args) <= 4):
303 raise error.ParseError(_("fill expects one to four arguments"))
304
305 text = stringify(args[0][0](context, mapping, args[0][1]))
306 width = 76
307 initindent = ''
308 hangindent = ''
309 if 2 <= len(args) <= 4:
310 try:
311 width = int(stringify(args[1][0](context, mapping, args[1][1])))
312 except ValueError:
313 raise error.ParseError(_("fill expects an integer width"))
314 try:
315 initindent = stringify(args[2][0](context, mapping, args[2][1]))
316 initindent = stringify(runtemplate(context, mapping,
317 compiletemplate(initindent, context)))
318 hangindent = stringify(args[3][0](context, mapping, args[3][1]))
319 hangindent = stringify(runtemplate(context, mapping,
320 compiletemplate(hangindent, context)))
321 except IndexError:
322 pass
323
324 return templatefilters.fill(text, width, initindent, hangindent)
325
326 def date(context, mapping, args):
327 if not (1 <= len(args) <= 2):
328 raise error.ParseError(_("date expects one or two arguments"))
329
330 date = args[0][0](context, mapping, args[0][1])
331 if len(args) == 2:
332 fmt = stringify(args[1][0](context, mapping, args[1][1]))
333 return util.datestr(date, fmt)
334 return util.datestr(date)
335
336 324 def strip(context, mapping, args):
337 325 if not (1 <= len(args) <= 2):
338 326 raise error.ParseError(_("strip expects one or two arguments"))
@@ -343,6 +331,18 b' def strip(context, mapping, args):'
343 331 return text.strip(chars)
344 332 return text.strip()
345 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
346 346 methods = {
347 347 "string": lambda e, c: (runstring, e[1]),
348 348 "symbol": lambda e, c: (runsymbol, e[1]),
@@ -354,16 +354,16 b' methods = {'
354 354 }
355 355
356 356 funcs = {
357 "date": date,
358 "fill": fill,
357 359 "get": get,
358 360 "if": if_,
359 361 "ifeq": ifeq,
360 362 "join": join,
361 363 "label": label,
362 364 "rstdoc": rstdoc,
365 "strip": strip,
363 366 "sub": sub,
364 "fill": fill,
365 "date": date,
366 "strip": strip,
367 367 }
368 368
369 369 # template engine
General Comments 0
You need to be logged in to leave comments. Login now