1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 """
22 Miscellanous formatting helpers.
23 """
24
25 from Pyblio.Format.DSL import lazy
26
27 -def plural(record, sequence, zero=None, one=None, two=None, more=''):
28 """
29 Generate different outputs depending on the number of items in a sequence.
30
31 >>> editor = initialsLast(all('editor')) + plural('editor',
32 one=', editor',
33 more=', editors')
34
35 @param sequence:
36 The sequence whose item count will be used to generate the output.
37 @type sequence:
38 list
39
40 @param zero:
41 value returned when the sequence is empty
42 @param one:
43 value returned when the sequence has one item
44 @param two:
45 value returned when the sequence has two items
46 @param more:
47 value returned when the sequence has more than two items
48
49 @note when a given parameter is not provided but should be returned,
50 then the default is to use the value of the L{more} parameter.
51 """
52
53 l = len (sequence(record))
54
55 if l == 0 and zero is not None:
56 return zero(record)
57 elif l == 1 and one is not None:
58 return one(record)
59 elif l == 2 and two is not None:
60 return two(record)
61 else:
62 return more(record)
63
64 plural = lazy (plural)
65