Doxygen и добавить значение атрибута в выходную документацию

ServiceStack помечает оставшиеся пути для веб-служб, используя атрибуты C#.

Например

[RestService("/hello1")]
[RestService("/hello2")]
public class Hello

Я хотел бы, чтобы Doxygen включал значения атрибута RestService в вывод doxygen для класса Hello. Меня не слишком заботит красивое форматирование, если в выходной документ включена полная строка со скобками.

Какие-либо предложения?

Быстрый и грязный трюк был бы предпочтительнее написания расширения Doxygen ;)

Ваше здоровье

Тимек

==== РЕДАКТИРОВАТЬ

Версия Python (поэтому будет легко работать в Windows) ответа пользователя doxygen будет выглядеть так:

#!/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"

person tymtam    schedule 15.02.2012    source источник


Ответы (2)


Вы можете сделать входной фильтр, который преобразует строку с

[RestService("/hello1")]

to

/** \b RestService: "/hello1"\n */

например, поместив следующую часть магии perl в файл с именем filter.pl:

open(F, "<", $ARGV[0]);
while(<F>) { /^\s*\[RestService\((.*)\)\]\s*$/ ? 
             print "/** \\b RestService: $1\\n */\n" : print $_; }

и используйте это с тегом INPUT_FILTER в Doxyfile:

INPUT_FILTER           = "perl filter.pl"
person doxygen    schedule 15.02.2012

Вместо того, чтобы использовать скрипт Python или Perl, мне было логичнее сделать это на C#.

В качестве дополнительного бонуса к документации также будет добавлена ​​встроенная XML-документация для атрибутов. Пример:

[FromForm(Name = "e_mail")]
[Required] /// <div>Specifies that a data field value is required.</div><p>More info...</p>

Назовите консольный проект C# AttributesDocumenter и используйте полученный двоичный файл с тегом INPUT_FILTER в Doxyfile: 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);
                }
            }
        }
    }
}
person sunnyhighway    schedule 13.11.2020