Doxygen,并在输出文档中添加一个属性值
本文关键字:一个 属性 添加 输出 文档 Doxygen | 更新日期: 2023-09-27 18:24:33
ServiceStack使用c#属性标记web服务的其余路径。
例如
[RestService("/hello1")]
[RestService("/hello2")]
public class Hello
我想让Doxygen在Hello类的Doxygen输出中包含RestService属性的值。如果带括号的整行包含在输出文档中,我不太关心漂亮的formattin。
有什么建议吗?
一个快速而肮脏的技巧比编写Doxygen扩展更可取;)
干杯
Tymek
===编辑
doxygen的Python版本(因此可以很容易地在Windows上运行)用户的答案是:
#!/usr/bin/env python
import sys
import re
if (len(sys.argv) < 2):
print "No input file"
else:
f = open(sys.argv[1])
line = f.readline()
while line:
re1 = re.compile("'[RestService'('"(.*)'",.*'"(.*)'"')]")
re1.search(line)
sys.stdout.write(re1.sub(r"/** ''b RestService: '2 '1''n */'n", line))
#sys.stdout.write(line)
line = f.readline()
f.close()
DOXYFILE会有:
INPUT_FILTER = "doxygenFilter.py"
您可以制作一个输入过滤器,用转换一行
[RestService("/hello1")]
至
/** 'b RestService: "/hello1"'n */
例如,将以下perl魔术放入一个名为filter.pl
:的文件中
open(F, "<", $ARGV[0]);
while(<F>) { /^'s*'[RestService'((.*)')']'s*$/ ?
print "/** ''b RestService: $1''n */'n" : print $_; }
并将其与Doxyfile:中的INPUT_FILTER
标签一起使用
INPUT_FILTER = "perl filter.pl"
与其使用python或perl-scrip,不如使用C#
作为额外的奖励,inline属性的xml文档也将添加到文档中。示例:
[FromForm(Name = "e_mail")]
[Required] /// <div>Specifies that a data field value is required.</div><p>More info...</p>
将C#控制台项目命名为";属性文档"并将生成的二进制文件与Doxyfile中的INPUT_FILTER标记一起使用:INPUT_FILTER = "AttributesDocumenter.exe"
using System;
using System.IO;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace AttributesDocumenter
{
class Program
{
static async Task Main(string[] args)
{
if (args.Length < 1)
{
await Console.Out.WriteLineAsync("No input file");
return;
}
var f = File.OpenText(args[0]);
while (!f.EndOfStream)
{
var line = await f.ReadLineAsync();
var match = Regex.Match(line, @"'s*'[(.*)]'s*");
if (match.Success)
{
var inlineXmlComment = Regex.Match(line, @".*'/'/'/");
if (inlineXmlComment.Success)
{
var inlineXmlCommentList = new Regex(@"'s*(</?([^>/]*)/?>).*").Matches(line);
var inlineXmlCommentCombined = string.Join("", inlineXmlCommentList);
await Console.Out.WriteLineAsync($"{inlineXmlComment.Value} <para><b>Attribute:</b> {match.Value}</para> {inlineXmlCommentCombined}");
}
else
{
await Console.Out.WriteLineAsync($"{line} /// <para><b>Attribute:</b> {match.Value}</para>");
}
}
else
{
await Console.Out.WriteLineAsync(line);
}
}
}
}
}