Ddoc 是一个宏系统。它只是用别的东西代替一件事。编译器为您定义了某些宏(您可以重新定义),并且为了使用 ddoc 实际生成文档页面,编译器从模块中获取文档注释、其文档符号列表等,并且基本上生成一个 .dd 页面,如您在创建 dlang.org 网站之类的东西时会遇到这种情况。这是一堆带有 ddoc 标记的文本。然后,该 ddoc 标记将替换为定义为要替换的任何这些 ddoc 宏。默认情况下,这是一堆用于创建网页的 html,但是可以重新定义这些宏以生成与默认值不同的 html 或生成完全不同的东西,例如乳胶。
但是,最终,您得到的只是 .dd 页面,您可以通过重新定义宏来影响结果,从而重新定义如何将一段文本转换为另一段文本。您对符号列表进行迭代或做任何特别完整的事情的能力为零。你得到的只是宏扩展。
这就是 dlang.org 使用 javascript 生成链接跳转的原因,这就是为什么 dlang.org 的构建过程实际上有一个小 D 程序,它运行它来生成带有模块列表的导航栏的 ddoc。ddoc 无法做到这一点。这就是为什么像 ddox 这样的工具使用编译器的 json 输出来获取符号列表和文档信息并生成自己的东西的原因。
所以,不,你不能做任何你试图用标准 ddoc 做的事情。实际上,唯一的选择是使用 javascript,以便浏览器可以在查看文档时操作结果,使用外部程序操作和/或生成 ddoc,或者使用完全不同的工具(例如 ddox)生成文档。
ddoc 是一个很棒的宏系统,并且功能相当强大,但是如果您尝试做的事情比影响生成的文档的外观更有趣,ddoc 确实无法让您到达那里 - 至少在没有其他工具的帮助的情况下生成或操纵已处理的 ddoc 或处理 ddoc 的结果。
Ddoc 文档:https ://dlang.org/spec/ddoc.html
这里列出了一些替代文档生成器(可能使用也可能不使用 ddoc):https ://wiki.dlang.org/Open_Source_Projects#Documentation_Generators