diff --git a/direct/src/directscripts/gendocs.py b/direct/src/directscripts/gendocs.py index 94f06173ae..9928501cab 100644 --- a/direct/src/directscripts/gendocs.py +++ b/direct/src/directscripts/gendocs.py @@ -512,8 +512,14 @@ class ParseTreeInfo: cstmt = vars['compound'] if cstmt[0] == symbol.funcdef: name = cstmt[2][1] - self.function_info[name] = ParseTreeInfo(cstmt and cstmt[-1] or None, name, self.file) - self.function_info[name].prototype = self.extract_tokens("", cstmt[3]) + # Workaround for a weird issue with static and classmethods + if name == "def": + name = cstmt[3][1] + self.function_info[name] = ParseTreeInfo(cstmt and cstmt[-1] or None, name, self.file) + self.function_info[name].prototype = self.extract_tokens("", cstmt[4]) + else: + self.function_info[name] = ParseTreeInfo(cstmt and cstmt[-1] or None, name, self.file) + self.function_info[name].prototype = self.extract_tokens("", cstmt[3]) elif cstmt[0] == symbol.classdef: name = cstmt[2][1] self.class_info[name] = ParseTreeInfo(cstmt and cstmt[-1] or None, name, self.file) @@ -557,6 +563,7 @@ class CodeDatabase: self.typeExports = {} self.varExports = {} self.globalfn = [] + self.formattedprotos = {} print "Reading C++ source files" for cxx in cxxlist: tokzr = InterrogateTokenizer(cxx) @@ -696,14 +703,23 @@ class CodeDatabase: else: return pathToModule(func.file) - def getFunctionPrototype(self, fn): + def getFunctionPrototype(self, fn, urlprefix, urlsuffix): func = self.funcs.get(fn) if (isinstance(func, InterrogateFunction)): - proto = func.prototype - proto = proto.replace(" inline "," ") - if (proto.startswith("inline ")): proto = proto[7:] - proto = proto.replace("basic_string< char >", "string") - return textToHTML(proto,"") + if self.formattedprotos.has_key(fn): + proto = self.formattedprotos[fn] + else: + proto = func.prototype + proto = proto.replace(" inline "," ") + if (proto.startswith("inline ")): proto = proto[7:] + proto = proto.replace("basic_string< char >", "string") + proto = textToHTML(proto,"") + if "." in fn: + for c in self.goodtypes.keys(): + if c != fn.split(".")[0] and (c in proto): + proto = re.sub("\\b%s\\b" % c, linkTo(urlprefix+c+urlsuffix, c), proto) + self.formattedprotos[fn] = proto + return proto elif (isinstance(func, ParseTreeInfo)): return textToHTML("def "+func.name+func.prototype,"") return fn @@ -716,6 +732,14 @@ class CodeDatabase: return textToHTML(func.docstring, "#") return fn + def isFunctionPython(self, fn): + func = self.funcs.get(fn) + if (isinstance(func, InterrogateFunction)): + return False + elif (isinstance(func, ParseTreeInfo)): + return True + return False + def getFuncExports(self, mod): return self.funcExports.get(mod, []) @@ -790,9 +814,9 @@ def makeCodeDatabase(indirlist, directdirlist): findFiles(directdirlist, ".py", ignore, pyfiles) return CodeDatabase(cxxfiles, pyfiles) -def generateFunctionDocs(code, method): +def generateFunctionDocs(code, method, urlprefix, urlsuffix): name = code.getFunctionName(method) - proto = code.getFunctionPrototype(method) + proto = code.getFunctionPrototype(method, urlprefix, urlsuffix) comment = code.getFunctionComment(method) if (comment == ""): comment = "Undocumented function.
\n" chunk = '
' + "\n" @@ -864,11 +888,11 @@ def generate(pversion, indirlist, directdirlist, docdir, header, footer, urlpref for sclass in inheritance: constructors = code.getClassConstructors(sclass) for constructor in constructors: - body = body + generateFunctionDocs(code, constructor) + body = body + generateFunctionDocs(code, constructor, urlprefix, urlsuffix) methods = code.getClassMethods(sclass)[:] methods.sort(None, str.lower) for method in methods: - body = body + generateFunctionDocs(code, method) + body = body + generateFunctionDocs(code, method, urlprefix, urlsuffix) body = header + body + footer writeFile(docdir + "/" + type + ".html", body) if (CLASS_RENAME_DICT.has_key(type)): @@ -890,7 +914,7 @@ def generate(pversion, indirlist, directdirlist, docdir, header, footer, urlpref index = "

List of Global Functions - Panda " + pversion + "

\n" index = index + generateLinkTable(fnnames, fnnames, 3,"#","") for func in fnlist: - index = index + generateFunctionDocs(code, func) + index = index + generateFunctionDocs(code, func, urlprefix, urlsuffix) index = header + index + footer writeFile(docdir + "/functions.html", index)