Dynamic Doxygen-使用带有参数的Alias命令生成动态组

Dynamic Doxygen-使用带有参数的Alias命令生成动态组,dynamic,grouping,doxygen,Dynamic,Grouping,Doxygen,我希望通过使用某种别名命令自动创建组层次结构。我要分组 扩展方法 字符串扩展名 流扩展 要使用doxygen注释创建,例如 /** Documentation for the method * \extension{string} */ public void ExtensionMethod(this string str){ ... } 其中\extension{string}将映射到 \addtogroup stringExtensions string Exte

我希望通过使用某种别名命令自动创建组层次结构。我要分组

  • 扩展方法
    • 字符串扩展名
    • 流扩展
要使用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){
   ... 
}
不幸的是,这意味着为该方法编写的所有文档都与该组关联

最接近我的是如果你有

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

/** \ingroup stringExtensions
 *  Documentation for the method
 */ 
public void ExtensionMethod(this string str){
   ... 
}
它可以工作,但这需要两个单独的注释块,我找不到任何方法使用别名来实现这一点


我知道使用inputfilter可能可以实现某些功能,但我希望可以实现更简单的功能。

我发现使用inputfilter的答案比我最初设想的更简洁-解析整个文件,查找
\extension{…}
,并用适当的
\ingroup
命令替换它,然后在文件底部附加所需的
\addgroup
命令

然后可以将其作为inputfilter运行

下面是一个执行此操作的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}