blob: 39589928e95cd6181d9b53a311b961465b159027 (
plain)
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
import re
import parser
# Detect examples blocks
class Parser(parser.Parser):
def __init__(self, pctxt):
parser.Parser.__init__(self, pctxt)
template = pctxt.templates.get_template("parser/example/comment.tpl")
self.comment = template.render(pctxt=pctxt).strip()
def parse(self, line):
pctxt = self.pctxt
result = re.search(r'^ *(Examples? *:)(.*)', line)
if result:
label = result.group(1)
desc_indent = False
desc = result.group(2).strip()
# Some examples have a description
if desc:
desc_indent = len(line) - len(desc)
indent = parser.get_indent(line)
if desc:
# And some description are on multiple lines
while pctxt.get_line(1) and parser.get_indent(pctxt.get_line(1)) == desc_indent:
desc += " " + pctxt.get_line(1).strip()
pctxt.next()
pctxt.next()
add_empty_line = pctxt.eat_empty_lines()
content = []
if parser.get_indent(pctxt.get_line()) > indent:
if desc:
desc = desc[0].upper() + desc[1:]
add_empty_line = 0
while pctxt.has_more_lines() and ((not pctxt.get_line()) or (parser.get_indent(pctxt.get_line()) > indent)):
if pctxt.get_line():
for j in range(0, add_empty_line):
content.append("")
content.append(re.sub(r'(#.*)$', self.comment, pctxt.get_line()))
add_empty_line = 0
else:
add_empty_line += 1
pctxt.next()
elif parser.get_indent(pctxt.get_line()) == indent:
# Simple example that can't have empty lines
if add_empty_line and desc:
# This means that the example was on the same line as the 'Example' tag
# and was not a description
content.append(" " * indent + desc)
desc = False
else:
while pctxt.has_more_lines() and (parser.get_indent(pctxt.get_line()) >= indent):
content.append(pctxt.get_line())
pctxt.next()
pctxt.eat_empty_lines() # Skip empty remaining lines
pctxt.stop = True
parser.remove_indent(content)
template = pctxt.templates.get_template("parser/example.tpl")
return template.render(
pctxt=pctxt,
label=label,
desc=desc,
content=content
)
return line
|