如何生成 rdoc 风格的可折叠代码段?
-
05-07-2019 - |
题
我正在使用 Doxygen 为 C++ 项目创建内部文档。我让 Doxygen 包含方法的源代码等,但这使得页面难以扫描。我希望它的行为像 rdoc 一样,并将源代码隐藏在默认折叠的块中。
我以为 HTML_DYNAMIC_SECTIONS
可能会让我这样做,但可惜的是,更改日志说该选项仅影响图表和图形。
也许我可以通过编辑来做到这一点 LAYOUT_FILE
?
不管怎样,聪明的人,我怎样才能强制 Doxygen 生成可折叠的代码段?
解决方案
如果 包括方法的来源等,[...]使得页面难以扫描, ,你为什么不直接 关联 对它(SOURCE_BROWSER = YES
) 代替 包括 它 (INLINE_SOURCES = YES
)?这将使页面更容易扫描并更快地加载,并且源代码仍然可以访问(以多加载一个源页面为代价)。我猜取决于您实际需要访问源代码的频率。
话虽这么说,有 是 一种生成可折叠代码段的方法(不过,您必须修改源代码并重新编译 Doxygen):
- Doxygen 的 HTML 输出中的可折叠部分 标记有两个嵌套
<div>
s 像这样:
<div class="dynheader"><div class="dynsection">
[collapsible section]
</div></div>
- 包含的代码部分标记如下:
<div class="fragment"><pre class="fragment">...</pre></div>
因此,要使包含的代码部分可折叠,您必须
- 调整 生成的代码 这
<div class="fragment"><pre class="fragment">...</pre></div>
生成<div class="dynheader"><div class="dynsection">...</div></div>
(并且可能调整一些CSS),或者 - 改变 javascript
initDynSections()
功能 扫描并折叠可折叠部分以识别<div class="fragment"><pre class="fragment">
作为其中之一。
- 调整 生成的代码 这
实施(或去 SOURCE_BROWSER
路线:))留给读者作为练习。祝你好运!
哦,如果你能通过补丁获得成功,那就太好了 提交 给迪米特里,以便他可以将其包含在未来的版本中。谢谢!
其他提示
使用我选择的搜索引擎来到这里我只想在这里留下一个注释,不一定要修改任何doxygen源。
当问到这个问题时,可能无法使用htmlonly
标签嵌入纯HTML ,但考虑到这一点,可以创建滥用名为toggleVisibility
function toggleVisibility(linkObj)
{
var base = $(linkObj).attr('id');
var summary = $('#'+base+'-summary');
var content = $('#'+base+'-content');
var trigger = $('#'+base+'-trigger');
var src=$(trigger).attr('src');
if (content.is(':visible')===true) {
content.hide();
summary.show();
$(linkObj).addClass('closed').removeClass('opened');
$(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');
} else {
content.show();
summary.hide();
$(linkObj).removeClass('closed').addClass('opened');
$(trigger).attr('src',src.substring(0,src.length-10)+'open.png');
}
return false;
}
每次在文档根目录中名为dynsections.js的文件中生成文档时,目前都可用。
关于此代码,我们可以了解能够使用Javascript从他/她自己的文档创建可折叠代码的条件,避免此函数中的内部执行错误,并防止进一步解释javascript代码。
- 具有唯一标识符的
id - 另一个封装的dom元素,带有唯一标识符
src
- summary - 另一个封装的dom元素,具有唯一标识符
class
- content - 另一个封装的dom元素,带有唯一标识符
example-div
- 触发器 - <=> - trigger元素必须包含<=>属性,且至少包含1个字符
- 主容器的<=>属性无关紧要 醇>
考虑到theese条件,可以创建以下代码。
## <a href="javascript:toggleVisibility($('#example-div'))">Fold me</a>
## <div id="example-div">
## <div id="example-div-summary"></div>
## <div id="example-div-content">
## <pre>
## foo
## bar
## </pre>
## </div>
## <div id="example-div-trigger" src="-"></div>
## </div>
## @htmlonly <script type="text/javascript">$("#example-div").ready(function() { toggleVisibility($("#example-div")); });</script> @endhtmlonly
上面的doxygen代码用于使用 bash-doxygen 来记录bash代码,因此可能看起来与纯doxygen代码有点不同。涉及div容器的第一部分已经描述了提及适合函数源的条件<=>并使其可执行而没有任何错误根据我们的需要调整doxygen注释。
此处使用的唯一ID前缀是<=>。在第一行中,有一个hyperref链接设置,可以直接使用javascript和一些 jQuery 代码展开一个部分。
剩下的是最后一个班轮。它包含 jQuery 脚本,需要运行以初始折叠特定段。对于bash-doxygen(可能还有其他语言),由于脚本的块范围,块需要是一个单行程序
通常,\ htmlonly和\ endhtmlonly之间的内容按原样插入。如果要插入一个具有块范围的HTML片段,如表格或列表,应该出现在<!> lt; p <!> gt; .. <!> lt; / p <!> gt;之外,这可能导致无效的HTML。您可以使用\ htmlonly [block]使doxygen结束当前段落并在\ endhtmlonly之后重新启动它。
在 doxygen文档中注意到并在右侧标记下方发表评论 stackoverflow答案的解决方案包括doxygen文档中的脚本标记。
感谢您的阅读。 希望这有助于一些人来到这里。