Some improvements

This commit is contained in:
Josh Yelon 2005-11-30 19:40:29 +00:00
parent 109bad2b78
commit ca8bd2496f
1 changed files with 83 additions and 54 deletions

View File

@ -1,13 +1,47 @@
########################################################################
#
# Documentation generator for panda. There are three
# major subsystems:
# Documentation generator for panda.
#
# * The module that reads interrogate databases.
# How to use this module:
#
# * The module that reads python source-files.
# from direct.directscripts import gendocs
# gendocs.generate(version, indir, directdir, docdir, header, footer, urlprefix, urlsuffix)
#
# *
# - version is the panda version number
#
# - indir is the name of a directory containing the "xxx.in"
# files that interrogate generates. No slash at end.
#
# - directdir is the name of a directory containing the
# source code for "direct." No slash at end.
#
# - docdir is the name of a directory into which HTML files
# will be emitted. No slash at end.
#
# - header is a string that will be placed at the front of
# every HTML page.
#
# - footer is a string that will be placed at the end of
# every HTML page.
#
# - urlprefix is a string that will be appended to the front of
# every URL.
#
# - urlsuffix is a string that will be appended to the end of
# every URL.
#
########################################################################
#
# The major subsystems are:
#
# * The module that loads interrogate databases.
#
# * The module that loads python parse-trees.
#
# * The "code database", which provides a single access point
# for both interrogate databases and python parse trees.
#
# * The HTML generator.
#
########################################################################
@ -75,8 +109,8 @@ def textToHTML(comment,sep,delsection=None):
total = total + sec + "<br>\n"
return total
def linkToPage(page, text):
return '<a href="/apiref.php?page=' + page + '">' + text + '</a>'
def linkTo(link, text):
return '<a href="' + link + '">' + text + '</a>'
def convertToPythonFn(fn):
result = ""
@ -90,19 +124,6 @@ def convertToPythonFn(fn):
lastc = c
return result
def getPandaVersion():
try:
f = file("dtool/PandaVersion.pp","r")
pattern = re.compile('^[ \t]*[#][ \t]*define[ \t]+PANDA_VERSION[ \t]+([0-9]+)[ \t]+([0-9]+)[ \t]+([0-9]+)')
for line in f:
match = pattern.match(line,0)
if (match):
version = match.group(1)+"."+match.group(2)+"."+match.group(3)
break
f.close()
except: sys.exit("Cannot read version number from dtool/PandaVersion.pp")
return version
########################################################################
#
# Interrogate Database Tokenizer
@ -611,24 +632,10 @@ CLASS_RENAME_DICT = {
########################################################################
#
# Main Program
# HTML generation
#
########################################################################
def getCodeDatabase():
ignore = {}
ignore["__init__.py"] = 1
ignore["direct/src/directscripts"] = 1
ignore["direct/src/extensions"] = 1
ignore["direct/src/extensions_native"] = 1
ignore["direct/src/ffi"] = 1
cxxfiles = []
pyfiles = []
findFiles("built/pandac/input", ".in", ignore, cxxfiles)
findFiles("direct", ".py", ignore, pyfiles)
return CodeDatabase(cxxfiles, pyfiles)
def generateFunctionDocs(code, method):
name = code.getFunctionName(method)
proto = code.getFunctionPrototype(method)
@ -641,8 +648,33 @@ def generateFunctionDocs(code, method):
chunk = chunk + "</td></tr></table>\n"
return chunk
def generateDocs(code):
dir = "built/pandac/docs"
def generateLinkTable(table, cols, urlprefix, urlsuffix):
table = table[:]
column = (len(table)+cols-1)/cols
percent = 100 / cols
for i in range(cols): table.append("")
result = '<table width="100%">\n'
for i in range(column):
line = ""
for j in range(cols):
slot = table[i + column*j]
line = line + '<td width="' + str(percent) + '%">' + linkTo(urlprefix+slot+urlsuffix,slot) + "</td>"
result = result + "<tr>" + line + "</tr>\n"
result = result + "</table>\n"
return result
def generate(pversion, indir, directdir, docdir, header, footer, urlprefix, urlsuffix):
ignore = {}
ignore["__init__.py"] = 1
ignore[directdir + "/src/directscripts"] = 1
ignore[directdir + "/src/extensions"] = 1
ignore[directdir + "/src/extensions_native"] = 1
ignore[directdir + "/src/ffi"] = 1
cxxfiles = []
pyfiles = []
findFiles(indir, ".in", ignore, cxxfiles)
findFiles(directdir, ".py", ignore, pyfiles)
code = CodeDatabase(cxxfiles, pyfiles)
classes = code.getClassList()[:]
classes.sort()
xclasses = classes[:]
@ -654,9 +686,9 @@ def generateDocs(code):
inheritance = code.getInheritance(type)
body = body + "<h2>Inheritance:</h2>\n<ul>\n"
for inh in inheritance:
line = " " + linkToPage(inh,inh) + " : "
line = " " + linkTo(urlprefix+inh+urlsuffix,inh) + " : "
for parent in code.getClassParents(inh):
line = line + linkToPage(parent,parent) + " "
line = line + linkTo(urlprefix+parent+urlsuffix,parent) + " "
body = body + line + "<br>\n"
body = body + "</ul>\n"
for sclass in inheritance:
@ -674,28 +706,25 @@ def generateDocs(code):
methods.sort()
for method in methods:
body = body + generateFunctionDocs(code, method)
writeFile(dir + "/" + type + ".html", body)
body = header + body + footer
writeFile(docdir + "/" + type + ".html", body)
if (CLASS_RENAME_DICT.has_key(type)):
modtype = CLASS_RENAME_DICT[type]
writeFile(dir + "/" + modtype + ".html", body)
writeFile(docdir + "/" + modtype + ".html", body)
xclasses.append(modtype)
xclasses.sort()
pversion = getPandaVersion()
index = "<h1>List of Classes - Panda " + pversion + "</h1>\n<ul>\n"
for type in xclasses:
index = index + linkToPage(type,type) + "<br>\n"
index = index + "</ul>\n"
index = index + "<h1>List of Global Functions - Panda " + pversion + "</h1>\n<ul>\n"
index = "<h1>List of Classes - Panda " + pversion + "</h1>\n"
index = index + generateLinkTable(xclasses,3,urlprefix,urlsuffix)
fnlist = code.getGlobalFunctionList()[:]
fnlist.sort()
for func in fnlist:
fn = code.getFunctionName(func)
index = index + '<a href="#' + fn + '">' + fn + "</a><br>\n"
index = index + "</ul>\n"
fnnames = []
for i in range(len(fnlist)):
fnnames.append(code.getFunctionName(fnlist[i]))
index = index + "<h1>List of Global Functions - Panda " + pversion + "</h1>\n"
index = index + generateLinkTable(fnnames,3,"#","")
for func in fnlist:
index = index + generateFunctionDocs(code, func)
writeFile(dir + "/index.html", index)
index = header + index + footer
writeFile(docdir + "/index.html", index)
generateDocs(getCodeDatabase())