1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
from ..util import strip_end
def render_list(renderer, token, state) -> str:
attrs = token['attrs']
if attrs['ordered']:
children = _render_ordered_list(renderer, token, state)
else:
children = _render_unordered_list(renderer, token, state)
text = ''.join(children)
parent = token.get('parent')
if parent:
if parent['tight']:
return text
return text + '\n'
return strip_end(text) + '\n'
def _render_list_item(renderer, parent, item, state):
leading = parent['leading']
text = ''
for tok in item['children']:
if tok['type'] == 'list':
tok['parent'] = parent
elif tok['type'] == 'blank_line':
continue
text += renderer.render_token(tok, state)
lines = text.splitlines()
text = lines[0] + '\n'
prefix = ' ' * len(leading)
for line in lines[1:]:
if line:
text += prefix + line + '\n'
else:
text += '\n'
return leading + text
def _render_ordered_list(renderer, token, state):
attrs = token['attrs']
start = attrs.get('start', 1)
for item in token['children']:
leading = str(start) + token['bullet'] + ' '
parent = {
'leading': leading,
'tight': token['tight'],
}
yield _render_list_item(renderer, parent, item, state)
start += 1
def _render_unordered_list(renderer, token, state):
parent = {
'leading': token['bullet'] + ' ',
'tight': token['tight'],
}
for item in token['children']:
yield _render_list_item(renderer, parent, item, state)
|