blob: 23a107680cf16a67619d895c9c0ef0c418689958 (
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
|
from zzipdoc.match import Match
class FunctionPrototype:
""" takes a single function prototype line (cut from some source file)
and parses it into the relevant portions 'prespec', 'namespec' and
'callspec'. Additionally we present 'name' from the namespec that is
usually used as the filename stem for a manual page """
def __init__(self, functionheader = None):
self.functionheader = functionheader
self.prespec = None
self.namespec = None
self.callspec = None
self.name = None
def get_functionheader(self):
return self.functionheader
def get_prototype(self):
if self.functionheader is None:
return None
return self.functionheader.get_prototype()
def get_filename(self):
if self.functionheader is None:
return None
return self.functionheader.get_filename()
def parse(self, functionheader = None):
if functionheader is not None:
self.functionheader = functionheader
if self.functionheader is None:
return False
found = Match()
prototype = self.get_prototype()
if prototype & found(r"(?s)^(.*[^.])"
r"\b(\w[\w.]*\w)\b"
r"(\s*\(.*)$"):
self.prespec = found.group(1).lstrip()
self.namespec = found.group(2)
self.callspec = found.group(3).lstrip()
self.name = self.namespec.strip()
return True
return False
def _assert_parsed(self):
if self.name is None:
return self.parse()
return True
def get_prespec(self):
if not self._assert_parsed(): return None
return self.prespec
def get_namespec(self):
if not self._assert_parsed(): return None
return self.namespec
def get_callspec(self):
if not self._assert_parsed(): return None
return self.callspec
def get_name(self):
if not self._assert_parsed(): return None
return self.name
def xml_text(self):
if not self.namespec: return self.namespec
return ("<fu:protospec><fu:prespec>"+self.prespec+"</fu:prespec>"+
"<fu:namespec>"+self.namespec+"</fu:namespec>"+
"<fu:callspec>"+self.callspec+"</fu:callspec></fu:protospec>")
|