自 1.2.18 版本以来,Doxygen 可以生成一种新的输出格式,我们称之为“Perl 模块输出格式”。它被设计为一种中间格式,无需修改 Doxygen 源代码即可用于生成新的定制输出。因此,它的目的类似于 Doxygen 也能生成的 XML 输出格式。XML 输出格式更标准,但 Perl 模块输出格式可能更简单易用。
Perl 模块输出格式目前仍处于实验阶段,将来版本中可能会以不兼容的方式更改,尽管这种情况不太可能发生。它也缺乏其他 Doxygen 后端的一些功能。但是,它已经可以用于生成有用的输出,如基于 Perl 模块的 生成器所示。
请将您在 Perl 模块后端或基于 Perl 模块的 生成器中发现的任何 bug 或问题报告到 Doxygen 问题追踪器。也欢迎提供建议(另见:如何报告 Bug)。
在 Doxyfile 中启用 GENERATE_PERLMOD 标签后,运行 Doxygen 会在您的输出目录的 perlmod/ 子目录中生成一些文件。这些文件如下所示
DoxyDocs.pm: 这是实际包含文档的 Perl 模块,采用 下方描述的 Perl 模块格式。
DoxyModel.pm: 此 Perl 模块描述了 DoxyDocs.pm 的结构,与实际文档无关。有关详情,请参阅下方。
doxyrules.make: 此文件包含用于构建和清理从 Doxyfile 生成的文件的 make 规则。还包含这些文件的路径及其他相关信息。此文件旨在由您自己的 Makefile 包含。
Makefile: 这是一个包含 doxyrules.make 的简单 Makefile。
要使用存储在 DoxyDocs.pm 中的文档,您可以使用 Doxygen 提供的默认基于 Perl 模块的生成器之一(目前包括基于 Perl 模块的 生成器,参见下方)或编写您自己的定制生成器。如果您具备一些 Perl 知识,这应该不太难,这也是在 Doxygen 中包含 Perl 模块后端的主要目的。有关如何执行此操作的详情,请参阅下方。
基于 Perl 模块的 生成器目前尚处于实验阶段且不完整,但您可能仍会觉得它有用。它可以生成文件中函数、typedef 和变量以及类中的文档,并且可以通过重新定义
宏进行大量定制。但是,目前还没有关于如何执行此操作的文档。
在 Doxyfile
中将 PERLMOD_LATEX 标签设置为 YES
会在您的输出目录的 perlmod/ 子目录中启用创建一些额外文件。这些文件包含生成 Perl 模块输出的 PDF 和 DVI 输出所需的 Perl 脚本和 代码,分别使用 pdflatex 和 latex。用于自动化这些文件使用的规则也已添加到 doxyrules.make 和 Makefile 中。
生成的额外文件如下所示
doxylatex.pl: 此 Perl 脚本使用 DoxyDocs.pm 和 DoxyModel.pm 生成 doxydocs.tex,这是一个包含文档的 文件,其格式可由
代码访问。此文件不能直接进行 LaTeX 编译。
doxyformat.tex: 此文件包含 代码,用于将来自 doxydocs.tex 的文档转换为适合通过
处理并呈现给用户的
文本。
doxylatex-template.pl: 此 Perl 脚本使用 DoxyModel.pm 生成 doxytemplate.tex,这是一个定义某些宏默认值的 文件。doxytemplate.tex 被 doxyformat.tex 包含,以避免需要显式定义某些宏。
doxylatex.tex: 这是一个非常简单的 文档,它加载一些包并包含 doxyformat.tex 和 doxydocs.tex。此文档通过添加到 doxyrules.make 的规则进行
编译,以生成 PDF 和 DVI 文档。
要尝试此功能,您需要安装 latex、pdflatex 以及 doxylatex.tex 使用的包。
使用以下命令将您的 Doxyfile 更新到最新版本
doxygen -u Doxyfile
在您的 Doxyfile 中,将 GENERATE_PERLMOD 和 PERLMOD_LATEX 两个标签都设置为 YES
。
在您的 Doxyfile 上运行 Doxygen
doxygen Doxyfile
您的输出目录中应该会出现一个 perlmod/ 子目录。进入 perlmod/ 子目录并运行
make pdf
这将生成一个 doxylatex.pdf 文件,其中包含 PDF 格式的文档。
运行
make dvi
这将生成一个 doxylatex.dvi 文件,其中包含 DVI 格式的文档。
Doxygen 生成的 Perl 模块文档存储在 DoxyDocs.pm 中。这是一个非常简单的 Perl 模块,仅包含两个语句:一个对变量 $doxydocs 的赋值,以及通常结束 Perl 模块的习惯性语句 1;。
文档存储在变量 $doxydocs 中,Perl 脚本可以使用 DoxyDocs.pm 访问该变量。
$doxydocs 包含一个树状结构,由三种类型的节点组成:字符串 (strings)、哈希 (hashes) 和列表 (lists)。
Strings: 这些是普通的 Perl 字符串。它们的长度可以是任意的,可以包含任何字符。它们的语义取决于它们在树中的位置。这种类型的节点没有子节点。
Hashes: 这些是对匿名 Perl 哈希的引用。一个哈希可以有多个字段,每个字段都有不同的键。哈希字段的值可以是字符串、哈希或列表,其语义取决于哈希字段的键以及哈希在树中的位置。哈希字段的值是节点的子节点。
Lists: 这些是对匿名 Perl 列表的引用。一个列表包含不确定数量的元素,这些元素是节点的子节点。每个元素具有相同的类型(字符串、哈希或列表)和相同的语义,具体取决于列表在树中的位置。
如您所见,存储在 $doxydocs 中的文档不会给简单的 Perl 脚本处理带来任何特殊障碍。
您可能有兴趣在不考虑文档树中每个节点的语义的情况下处理 DoxyDocs.pm 中包含的文档。为此,Doxygen 会生成一个 DoxyModel.pm 文件,该文件包含一个数据结构,描述文档树中每个节点的类型和子节点。
本节的其余部分尚未编写,但与此同时,您可以查看 Doxygen 生成的 Perl 脚本(例如 doxylatex.pl 或 doxytemplate-latex.pl),以了解如何使用 DoxyModel.pm。
这是 DoxyDocs.pm 中文档树结构的描述。下方列表中的每个项目描述了树中的一个节点,描述格式如下
其中
只有当父节点是哈希时,才会出现 "key =>" 部分。"key" 是此节点的键。
"Name" 是节点的唯一名称,在 DoxyModel.pm 中定义。
"(type)" 是节点的类型:"string" 用于字符串节点,"hash" 用于哈希节点,"list" 用于列表节点,以及 "doc" 用于文档子树。文档子树的结构尚未在任何地方描述,但你可以例如查看 doxylatex.pl 来了解如何处理它。
文档树中每个节点的含义如下