diff options
Diffstat (limited to 'Build/source/libs/zziplib/zziplib-src/docs/zzipdoc/functionheader.py')
-rw-r--r-- | Build/source/libs/zziplib/zziplib-src/docs/zzipdoc/functionheader.py | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/Build/source/libs/zziplib/zziplib-src/docs/zzipdoc/functionheader.py b/Build/source/libs/zziplib/zziplib-src/docs/zzipdoc/functionheader.py new file mode 100644 index 00000000000..81bb385c408 --- /dev/null +++ b/Build/source/libs/zziplib/zziplib-src/docs/zzipdoc/functionheader.py @@ -0,0 +1,96 @@ +from match import Match + +class FunctionHeader: + """ parsing the comment block that is usually presented before + a function prototype - the prototype part is passed along + for further parsing through => FunctionPrototype """ + def __init__(self, functionheaderlist, comment, prototype): + self.parent = functionheaderlist + self.comment = comment + self.prototype = prototype + self.firstline = None + self.otherlines = None + self.titleline = None + self.alsolist = [] + def get_filename(self): + return self.parent.get_filename() + def parse_firstline(self): + if not self.comment: return False + x = self.comment.find("\n") + if x > 0: + self.firstline = self.comment[:x] + self.otherlines = self.comment[x:] + elif x == 0: + self.firstline = "..." + self.otherlines = self.comment[1:x] + else: + self.firstline = self.comment + self.otherlines = "" + return True + def get_firstline(self): + if self.firstline is None: + if not self.parse_firstline(): return "" + return self.firstline + def get_otherlines(self): + if self.firstline is None: + if not self.parse_firstline(): return "" + return self.otherlines + def parse_titleline(self): + """ split extra-notes from the firstline - keep only titleline """ + line = self.get_firstline() + if line is None: return False + self.titleline = line + self.alsolist = [] + x = line.find("also:") + if x > 0: + self.titleline = line[:x] + for also in line[x+5:].split(","): + self.alsolist += [ also.strip() ] + self._alsolist = self.alsolist + return True + def get_alsolist(self): + """ gets the see-also notes from the firstline """ + if self.titleline is None: + if not self.parse_titleline(): return None + return self.alsolist + def get_titleline(self): + """ gets firstline with see-also notes removed """ + if self.titleline is None: + if not self.parse_titleline(): return False + return self.titleline + def get_title(self): + """ gets titleline unless that is a redirect """ + titleline = self.get_titleline() + if titleline & Match(r"^\s*=>"): return "" + if titleline & Match(r"^\s*<link>"): return "" + return titleline + def get_prototype(self): + return self.prototype + +class FunctionHeaderList: + """ scan for comment blocks in the source file that are followed by + something quite like a C definition (probably a function definition). + Unpack the occurrences and fill self.comment and self.prototype. """ + def __init__(self, textfile = None): + self.textfile = textfile # TextFile + self.children = None # src'style + def parse(self, textfile = None): + if textfile is not None: + self.textfile = textfile + if self.textfile is None: + return False + text = self.textfile.get_src_text() + m = Match(r"(?s)\/\*[*]+(?=\s)" + r"((?:.(?!\*\/))*.)\*\/" + r"([^/\{\}\;\#]+)[\{\;]") + self.children = [] + for found in m.finditer(text): + child = FunctionHeader(self, found.group(1), found.group(2)) + self.children += [ child ] + return len(self.children) > 0 + def get_filename(self): + return self.textfile.get_filename() + def get_children(self): + if self.children is None: + if not self.parse(): return [] + return self.children |