[DEV] start generating docs

This commit is contained in:
Edouard DUPIN 2013-11-29 21:52:13 +01:00
parent bb6e701bd8
commit e13bf9da44
3 changed files with 172 additions and 0 deletions

146
lutinDoc.py Normal file
View File

@ -0,0 +1,146 @@
#!/usr/bin/python
import lutinDebug as debug
import sys
import CppHeaderParser
import lutinTools
def writeExpendSize(data, size) :
ret = data
for iii in range(len(ret), size):
ret += " "
return ret
def displayReductFunction(className, function, file, classement, sizeReturn, sizefunction) :
lineData = "\t" + classement + " "
if function['destructor'] :
lineData += writeExpendSize("", sizeReturn+1)
elif function['constructor'] :
lineData += writeExpendSize("", sizeReturn)
lineData += "~"
else :
lineData += writeExpendSize(function["rtnType"], sizeReturn+1)
lineData += writeExpendSize(function["name"], sizefunction+1)
lineData += "("
file.write(lineData);
parameterPos = len(lineData);
isFirst = True
for param in function["parameters"]:
if isFirst == False:
file.write(",\n")
file.write(writeExpendSize("",parameterPos))
file.write(param['type'])
if param['name'] != "":
file.write(" ")
file.write(param['name'])
isFirst = False
file.write(");")
file.write("\n")
def calsulateSizeFunction(function, size) :
if len(function["name"]) > size:
return len(function["name"])+1
return size
def calsulateSizeReturn(function, size) :
if len(function["rtnType"]) > size:
return len(function["rtnType"])+1
return size
def GenerateDocFile(filename, outFolder) :
try:
metaData = CppHeaderParser.CppHeader(filename)
except CppHeaderParser.CppParseError, e:
debug.error(" can not parse the file: '" + filename + "' error : " + e)
return False
lutinTools.CreateDirectoryOfFile(outFolder+"/");
for element in metaData.classes:
classFileName = outFolder + "/";
localClass = metaData.classes[element]
if localClass['namespace'] == "":
className = localClass['name']
else:
className = localClass['namespace'] + "::" + localClass['name']
debug.debug(" class: " + className)
classFileName += className
# Replace all :: with __
classFileName = classFileName.replace(":", "_")
classFileName = classFileName.replace(" ", "")
classFileName += ".md"
file = open(classFileName, "w")
file.write(className + "\n")
for iii in range(0,len(className)):
file.write("=");
file.write("\n")
file.write("\n")
# calculate function max size return & function name size:
sizeReturn=0
sizefunction=0
for function in localClass["methods"]["public"]:
sizefunction = calsulateSizeFunction(function, sizefunction)
sizeReturn = calsulateSizeReturn(function, sizeReturn)
for function in localClass["methods"]["protected"]:
sizefunction = calsulateSizeFunction(function, sizefunction)
sizeReturn = calsulateSizeReturn(function, sizeReturn)
for function in localClass["methods"]["private"]:
sizefunction = calsulateSizeFunction(function, sizefunction)
sizeReturn = calsulateSizeReturn(function, sizeReturn)
file.write("Synopsis:\n")
file.write("---------\n")
file.write("\n")
# display all functions :
# TODO: ...
for function in localClass["methods"]["public"]:
displayReductFunction(localClass['name'], function, file, "public: ", sizeReturn, sizefunction)
for function in localClass["methods"]["protected"]:
displayReductFunction(localClass['name'], function, file, "protected:", sizeReturn, sizefunction)
for function in localClass["methods"]["private"]:
displayReductFunction(localClass['name'], function, file, "private: ", sizeReturn, sizefunction)
file.write("\n")
file.write("\n")
file.write("Signals:\n")
file.write("--------\n")
file.write("\n")
# display all signals :
# TODO: ...
file.write("Configuration:\n")
file.write("--------------\n")
file.write("\n")
# display all configuration :
# TODO: ...
file.write("Description:\n")
file.write("------------\n")
file.write("\n")
# display Class description :
# TODO: ...
file.write("Detail:\n")
file.write("-------\n")
file.write("\n")
# display all the class internal functions :
# TODO: ...
if len(localClass['inherits']) != 0:
for heritedClass in localClass['inherits']:
debug.debug(" heritage : " + str(heritedClass['class']))
file.close()
"""
"""

View File

@ -11,6 +11,7 @@ import lutinHeritage as heritage
import lutinDepend as dependency
import lutinMultiprocess
import lutinEnv
import lutinDoc
"""
@ -35,6 +36,8 @@ class module:
self.name=''
# Dependency list:
self.depends=[]
# Dependency list:
self.docPath=lutinTools.GetCurrentPath(file)
# export PATH
self.export_path=[]
self.local_path=[]
@ -375,6 +378,22 @@ class module:
debug.verbose("Might copy folder : " + element[0] + "==>" + element[1])
lutinTools.CopyAnythingTarget(target, self.originFolder+"/"+element[0],element[1])
###############################################################################
## Create the module documentation:
###############################################################################
def CreateDoc(self, target) :
if self.docPath == "":
return False
lutinTools.RemoveFolderAndSubFolder(target.GetDocFolder(self.name));
for root, dirnames, filenames in os.walk(self.docPath):
tmpList = fnmatch.filter(filenames, "*.h")
# Import the module :
for filename in tmpList:
fileCompleteName = os.path.join(root, filename)
debug.debug(" Find a file : '" + fileCompleteName + "'")
lutinDoc.GenerateDocFile(fileCompleteName, target.GetDocFolder(self.name));
# call here to build the module
def Build(self, target, packageName):
# ckeck if not previously build

View File

@ -67,6 +67,7 @@ class Target:
self.folder_final="/final/" + typeCompilator
self.folder_staging="/staging/" + typeCompilator
self.folder_build="/build/" + typeCompilator
self.folder_doc="/doc/"
self.folder_bin="/usr/bin"
self.folder_lib="/usr/lib"
self.folder_data="/usr/share"
@ -149,6 +150,9 @@ class Target:
def GetBuildFolder(self, moduleName):
return lutinTools.GetRunFolder() + self.folder_out + self.folder_build + "/" + moduleName
def GetDocFolder(self, moduleName):
return lutinTools.GetRunFolder() + self.folder_out + self.folder_doc + "/" + moduleName
def IsModuleBuild(self,module):
for mod in self.buildDone:
if mod == module:
@ -255,6 +259,9 @@ class Target:
elif actionName == "build":
debug.debug("build module '" + moduleName + "'")
return mod.Build(self, None)
elif actionName == "doc":
debug.debug("Create doc module '" + moduleName + "'")
return mod.CreateDoc(self)
debug.error("not know module name : '" + moduleName + "' to '" + actionName + "' it")