2013-03-18 57 views
0

我正在尋找通過使用某種Alias命令自動創建組層次結構。例如。我想組Doxygen - 用參數生成具有別名命令的動態組命令

  • 擴展方法
    • 字符串擴展
    • 流擴展
    • ...

要與Doxygen註釋如

/** Documentation for the method 
* \extension{string} 
*/ 
public void ExtensionMethod(this string str){ 
    ... 
} 
創建

\extension{string}將映射到像

\addtogroup stringExtensions string Extensions 
\ingroup ExtnMethods 

不幸的是,這意味着所有的方法寫的文檔獲取與組,而不是相關的。

我得到的最接近的是,如果您有類似

/** \addtogroup stringExtensions string Extensions 
* \ingroup ExtnMethods 
* \@{ 
* \@} 
*/ 

/** \ingroup stringExtensions 
* Documentation for the method 
*/ 
public void ExtensionMethod(this string str){ 
    ... 
} 

這是可行的,但是這需要2個獨立的註釋塊,我無法找到任何方式做到這一點使用別名。

我知道使用inputfilter可能會實現某些功能 - 但我希望可以實現更簡單的事情。

回答

0

我發現使用了整潔比我先應該inputfilters一個答案 - 解析尋找\extension{...}整個文件,用適當的\ingroup命令替換它,然後在文件的底部添加所需\addgroup命令。

這可以再爲輸入過濾

下面是一個Python腳本,這是否運行。請注意,它並不檢查它所取代的內容實際上是否在一個doxygen評論中,但對我的目的來說已經足夠了。

#!python 

import sys, re 


if(len(sys.argv) != 2): 
    print "Need exactly one argument, the file to filter" 
    exit(1) 

extnFinder = re.compile("\\\\extension{(\w+)}") 
extnTypes = set(); 

filename = sys.argv[1] 

fileIn = open(filename, "r") 

line = fileIn.readline() 


def extnSub(matchobj): 
    extnTypes.add(matchobj.group(1)) 
    return "\ingroup %(extn)sExtensions" % {'extn':matchobj.group(1)} 


while line:  
    matches = extnFinder.findall(line) 
    sys.stdout.write(re.sub(extnFinder,extnSub,line)) 
    line = fileIn.readline() 

for extn in extnTypes: 
    print "\n\n/**\\addtogroup %(extn)sExtensions %(extn)s Extensions\n\\ingroup ExtnMethods\n */\n" % {'extn':extn}