这可能吗?
以此代码为例
class LuaCamera
{
public:
LuaCamera(lua_State* L);
static bool defaultControls;
bool FPSCam;
int lookAt(lua_State* L);
int getRotation(lua_State* L);
int setRotation(lua_State* L);
// ...
virtual ~LuaCamera();
static const char className[];
static const Luna<LuaCamera>::RegType Register[];
protected:
private:
};
如您所见,我正在使用Lua,所以我想记录Lua用法。
我希望看到int setRotation(lua_State* L)
,而不是在Doxygen输出中获得void setRotation(int x, int y, int z)
。同样,我希望在输出中将类命名为Camera
而不是LuaCamera
。
我意识到我可以重命名该类并创建未使用的函数来执行此操作,但我的程序具有大量的Lua函数,这将是一个糟糕的方法。
有什么想法吗?
答案 0 :(得分:0)
我决定制作一个非常简单的脚本来完成我需要的任务。
对于那些可能正在寻找类似解决方案的人来说,这里是python文件的源代码:
import os;
path = "include/";
output = "doxygen/src/";
modOutput = False;
srcFiles = os.listdir(path);
def writeFile(fileName, cont):
f = open(fileName, "w");
f.write(cont);
f.close();
def readFile(fileName):
cont = open(fileName, "r");
return cont;
def readFileLines(fileName):
return readFile(fileName).readlines();
# creates the original files without the \mod option.
def outputNormalSrc():
for srcFile in srcFiles:
fileLines = readFileLines(path + srcFile);
newFile = "";
# We want everything in the original src files except for \mod lines.
for line in fileLines:
if line.find("\mod") >= 0:
line = line[ : line.find("\mod")] + "\n";
newFile += line;
writeFile(output + srcFile, newFile);
# creates the modded files for Lua doxygen output.
def outputModdedSrc():
for srcFile in srcFiles:
fileLines = readFileLines(path + srcFile);
newFile = "";
foundClass = "";
for line in fileLines:
if foundClass == "" and line.find("class") >= 0:
foundClass = line[line.find("class")+6 : -1];
break;
if foundClass == "":
print "WARNING: couldn't find class in src file " + srcFile + ". Skipping.";
continue;
newFile = "class " + foundClass + "\n{\n";
getLines = False;
writeBeforeClass = False;
inMod = False;
whiteSpaces = "";
for line in fileLines:
# We want everything in the block quote.
# If the block quote is for the class, put it before the class definition.
if line.find("/**") >= 0:
getLines = True;
if line.find("class") >= 0:
writeBeforeClass = "";
# Store the \mod function name.
if line.find("\mod") >= 0 and getLines:
inMod = line[line.find("\mod")+5 : -1];
line = line[ : line.find("\mod")] + "\n";
# Here we start storing the necessary lines we need for the output.
if getLines or line.find("public:") >= 0 or line.find("private:") >= 0 or line.find("protected:") >= 0 or line.find("}") >= 0:
if writeBeforeClass != False:
writeBeforeClass += line;
else:
newFile += line;
# The end of the block quote.
if line.find("*/") >= 0 and getLines:
getLines = False;
# If we are writing the block quote before the class.
if writeBeforeClass != False:
newFile = writeBeforeClass + newFile;
writeBeforeClass = False;
# Add our modded function in place of the normal function.
if inMod != False:
newFile += whiteSpaces + inMod + ";\n";
inMod = False;
# Used to append whitespaces the beginning of modded functions
# based on the previous line's whitespaces.
whiteSpaces = "";
for i in range(len(line)):
if line[i].isspace() == False:
break;
whiteSpaces += line[i];
# Create the files.
writeFile(output + srcFile, newFile);
def main():
# Choice: Create the original output without the \mod command,
# or with the \mod command to overwrite function definitions.
if modOutput:
outputModdedSrc();
else:
outputNormalSrc();
main();