如何在Doxygen HTML中链接到类方法

4

我有一个设置,使用doxygen描述一组单元测试(我使用QtTest运行测试)。测试的输出由一个小的Python代码片段解析,生成一个漂亮整洁的报告。现在,我想从报告中链接到每个测试用例,即doxygen材料中的私有槽成员方法。然而,doxygen定义的锚点看起来像这样:

<a class="anchor" id="a2a0e066d4dad8e0dff6c9231bf65fd65"></a>
<!-- doxytag: member="PRadioTunerTst::scanFM" ref="a2a0e066d4dad8e0dff6c9231bf65fd65" args="()" --> 

当然,我可以解析Doxygen html并将所有方法与参考键匹配,但我更想要可读的链接。我不会重载任何单元测试用例方法,因此枚举它们不是问题 - 我只需要选择第一个和唯一的方法即可。我甚至很乐意自己计算ID哈希值。我只需要知道如何做。
所以,基本上问题是:
  • 有人知道如何调整Doxygen以生成可读的锚点吗?
  • 如果不知道,我该如何计算哈希值?
2个回答

4

不要试图重建哈希值(这是对方法定义进行md5校验和的结果,由doxygen解析,请参见代码中的MemberDef::setAnchor())。我建议让doxygen生成一个标签文件(GENERATE_TAGFILE),然后解析该文件。标签文件是一个简单的XML文件,其中包含每个成员的名称和锚点。


我正在尝试从单独生成的LaTeX PDF中链接到doxygen生成的HTML文件。我不希望我的LaTeX文件每次编译时都要解析一个XML文件。这似乎是过度设计了。难道doxy不能输出可读的锚点吗? - frank
让我澄清一下。我想能够轻松地引用被覆盖的类方法集的顶部。如果在我的类中声明了getFoo(int)、getFoo(float)等方法,那么一个#getFoo锚点简单地指向HTML中第一个方法的描述将是很好的。如果标签文件的顺序与方法在HTML页面上的布局不同,则它无法解决我的问题。我将不知道哪个锚点指向HTML中出现的第一个覆盖。 - frank
锚点只能包含ASCII字符和下划线,不区分大小写,因此不能用于可读名称(参考http://www.w3.org/TR/html401/struct/links.html#h-12.2.1) - doxygen
我知道如果getFoo和getfoo在同一个类中声明,那么#getFoo锚点会变得不太有用。然而,doxygen按字母顺序排序方法,因此在HTML文件中会有一个get[Ff]oo开始和结束的位置。如果有一个锚点可以让我将用户直接引导到该部分的开头,那对我的目的也同样有效。从语义上讲,您希望以某种形式命名为getFoo的所有方法彼此相关,因此应该有一种方式将它们作为一组引用。 - frank
方法的排序是一种配置选项(SORT_MEMBER_DOCS),因此不能依靠它。因此,您的请求非常具体,并且通常不可靠。 - doxygen
你建议我如何完成我想做的事情?我觉得我的请求没有你想象的那么具体,因为这个问题的原始发布者也在尝试做同样的事情。我需要在我的LaTeX文件中使用XML解析器吗?我应该引用doxygen输出的原始哈希锚点吗?如果开发人员更改参数类型并无意中更改了哈希值,导致我的锚点链接断裂会怎样? - frank

0
我也需要链接目标,我的情况是为了将rst文档指向breathe/doxygen创建的html。这是我所做的:
为了更好地理解doxygen如何创建锚点,我重新编译了doxygen,并在setAnchor()的末尾加上了以下内容: printf("memAnchor=%s sigStr=%s\n", memAnchor.data(), sigStr.data());
它会创建像这样的输出:
memAnchor=const int SomeNamespace::GetStateGetState(SomeNamespace::State *state) sigStr=f2c41a8a6a152602c92fefb80bd0862a

我已经有了我的函数签名,所以我创建了类似于上面的memAnchor字符串,并通过md5sum管道获取哈希值,然后将其附加到所有锚点共同的字符串中。在我的rst文档中,我然后放置了如下定义:

.. _GetState: `project0class_SomeNamespace_1f2c41a8a6a152602c92fefb80bd0862a`_

对于关于可读锚点的第一个问题,我不确定。


具体需要做什么不是很清楚。你能否用更简洁的方式重新表述答案? - Sergiu Dumitriu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接