2017-11-29 2 views
0

Ist das möglich?Manipulieren von Funktionsvariablen in Doxygen

Nehmen Sie zum Beispiel diesen Code

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: 
}; 

Wie Sie sehen, ich bin mit Lua, so möchte ich die Lua-Nutzung dokumentieren. Anstatt int setRotation(lua_State* L) in der Doxygen-Ausgabe zu erhalten, möchte ich void setRotation(int x, int y, int z) sehen. Ebenso möchte ich, dass die Klasse Camera in der Ausgabe anstelle von LuaCamera benannt wird.

Ich weiß, dass ich die Klasse umbenennen und ungenutzte Funktionen erstellen könnte, um dies zu tun, aber mein Programm hat eine umfangreiche Menge von Lua-Funktionen und das wäre ein schlechter Ansatz.

Irgendwelche Ideen?

+0

nicht sicher, ob ich die Frage verstehen. Ich verstehe, dass Sie die "erweiterte" Form der Methoden dokumentieren und eine Lua-Referenz aus den Namen entfernen möchten. – BobMorane

+0

Ja. Ich muss die Lua-Verwendung im C++ Code –

+0

dokumentieren Wäre es nicht klarer, diese Lua-Verwendung zu umhüllen und dann den Wrapper zu kommentieren? Es sei denn, Sie können den Code nicht ändern ... – BobMorane

Antwort

0

Ich entschied mich, nur ein sehr einfaches Skript zu erstellen, das die Aufgabe erfüllt, die ich brauche.

Für alle, die für eine ähnliche Lösung suchen können, hier ist die Quelle auf die Python-Datei:

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();