-
Notifications
You must be signed in to change notification settings - Fork 38
/
Copy pathmk_params.py
90 lines (72 loc) · 2.28 KB
/
mk_params.py
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
78
79
80
81
82
83
84
85
86
87
88
89
#!/usr/bin/env python3
import re
braces = re.compile(r'{([^}]*)}')
math = re.compile(r'\$([^$]*)\$')
value = re.compile(r'{\\it\s+[dD]efault:\s*}\s*')
descr = re.compile(r'{\\it\s+[dD]escription:\s*}\s*')
types = re.compile(r'{\\it\s+[pP]ossible\s*[vV]alues:\s*}\s*')
# split on braces : str -> [str]
def get_args(line):
return braces.findall(line)
def fix_math(line):
m = math.search(line)
if m is None:
return line
line = line[:m.start()] + ":math:`%s`"%m[0][1:-1] + fix_math( line[m.end():] )
return line
class Prm:
def __init__(self, name):
self.desc = []
self.state = "clear"
with open(name) as f:
for line in f:
self.parse( line.replace(r"\_", "_") )
self.clear()
def clear(self):
if self.state == "desc":
for line in self.desc:
line = line.strip()
if line != "":
print(" " + line)
print("")
self.desc = []
self.state = "clear"
def parse(self, line):
if r"\subsection" in line:
name = get_args(line)[0]
if r'\tt' in name:
name = name[name.index(r'\tt')+4:]
print(name)
print('-'*len(name))
print('')
return self.clear()
if '[prmindexfull]' in line:
name = get_args(line)[0]
print(".. data:: %s\n"%name.replace('!', '::'))
return self.clear()
d = value.search(line)
if d is not None:
print(" :value: %s"%line[d.end():].strip())
return self.clear()
d = types.search(line)
if d is not None:
line = line[d.end():].strip()
if "boolean" in line:
line = "true | false"
else:
line = fix_math(line)
print(" :type: %s\n"%line)
return self.clear()
d = descr.search(line)
if d is not None:
self.state = "desc"
line = line[d.end():]
if self.state == "desc":
self.desc.append(line)
# Print out the file header.
print(""".. default-domain:: py
.. _parameters:
DFT-FE Input Parameter File Reference
=====================================
""")
p = Prm("parameters.tex")