0

ある種の Alias コマンドを使用して、グループ階層を自動的に作成しようとしています。例:グループが欲しい

  • 拡張方法
    • 文字列拡張
    • ストリーム拡張機能
    • ...

次のような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で何かを達成できることは知っていますが、もっと簡単なことを達成できることを願っています。

4

1 に答える 1

0

inputfilters を使用して、最初に想定したよりも優れた答えを見つけました。ファイル全体を解析して を探し\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}
于 2013-03-19T09:52:44.063 に答える