Perl 模块输出

自 1.2.18 版本以来,Doxygen 可以生成一种新的输出格式,我们称之为“Perl 模块输出格式”。它被设计为一种中间格式,无需修改 Doxygen 源代码即可用于生成新的定制输出。因此,它的目的类似于 Doxygen 也能生成的 XML 输出格式。XML 输出格式更标准,但 Perl 模块输出格式可能更简单易用。

Perl 模块输出格式目前仍处于实验阶段,将来版本中可能会以不兼容的方式更改,尽管这种情况不太可能发生。它也缺乏其他 Doxygen 后端的一些功能。但是,它已经可以用于生成有用的输出,如基于 Perl 模块的 {\LaTeX} 生成器所示。

请将您在 Perl 模块后端或基于 Perl 模块的 {\LaTeX} 生成器中发现的任何 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 模块的 {\LaTeX} 生成器,参见下方)或编写您自己的定制生成器。如果您具备一些 Perl 知识,这应该不太难,这也是在 Doxygen 中包含 Perl 模块后端的主要目的。有关如何执行此操作的详情,请参阅下方

使用 LaTeX 生成器。

基于 Perl 模块的 {\LaTeX} 生成器目前尚处于实验阶段且不完整,但您可能仍会觉得它有用。它可以生成文件中函数、typedef 和变量以及类中的文档,并且可以通过重新定义 {\TeX} 宏进行大量定制。但是,目前还没有关于如何执行此操作的文档。

Doxyfile 中将 PERLMOD_LATEX 标签设置为 YES 会在您的输出目录的 perlmod/ 子目录中启用创建一些额外文件。这些文件包含生成 Perl 模块输出的 PDF 和 DVI 输出所需的 Perl 脚本和 {\LaTeX} 代码,分别使用 pdflatexlatex。用于自动化这些文件使用的规则也已添加到 doxyrules.makeMakefile 中。

生成的额外文件如下所示

  • doxylatex.pl: 此 Perl 脚本使用 DoxyDocs.pmDoxyModel.pm 生成 doxydocs.tex,这是一个包含文档的 {\TeX} 文件,其格式可由 {\LaTeX} 代码访问。此文件不能直接进行 LaTeX 编译。

  • doxyformat.tex: 此文件包含 {\LaTeX} 代码,用于将来自 doxydocs.tex 的文档转换为适合通过 {\LaTeX} 处理并呈现给用户的 {\LaTeX} 文本。

  • doxylatex-template.pl: 此 Perl 脚本使用 DoxyModel.pm 生成 doxytemplate.tex,这是一个定义某些宏默认值的 {\TeX} 文件。doxytemplate.tex 被 doxyformat.tex 包含,以避免需要显式定义某些宏。

  • doxylatex.tex: 这是一个非常简单的 {\LaTeX} 文档,它加载一些包并包含 doxyformat.texdoxydocs.tex。此文档通过添加到 doxyrules.make 的规则进行 {\LaTeX} 编译,以生成 PDF 和 DVI 文档。

生成 PDF 和 DVI 输出

要尝试此功能,您需要安装 latexpdflatex 以及 doxylatex.tex 使用的包。

  1. 使用以下命令将您的 Doxyfile 更新到最新版本

    doxygen -u Doxyfile

  2. 在您的 Doxyfile 中,将 GENERATE_PERLMODPERLMOD_LATEX 两个标签都设置为 YES

  3. 在您的 Doxyfile 上运行 Doxygen

    doxygen Doxyfile

  4. 您的输出目录中应该会出现一个 perlmod/ 子目录。进入 perlmod/ 子目录并运行

    make pdf

    这将生成一个 doxylatex.pdf 文件,其中包含 PDF 格式的文档。

  5. 运行

    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.pldoxytemplate-latex.pl),以了解如何使用 DoxyModel.pm

Perl 模块树节点

Perl 模块输出格式的文档树中的节点。

这是 DoxyDocs.pm 中文档树结构的描述。下方列表中的每个项目描述了树中的一个节点,描述格式如下

  • [ 键 => ] 名称 (类型). 内容解释。

其中

  • 只有当父节点是哈希时,才会出现 "key =>" 部分。"key" 是此节点的键。

  • "Name" 是节点的唯一名称,在 DoxyModel.pm 中定义。

  • "(type)" 是节点的类型:"string" 用于字符串节点,"hash" 用于哈希节点,"list" 用于列表节点,以及 "doc" 用于文档子树。文档子树的结构尚未在任何地方描述,但你可以例如查看 doxylatex.pl 来了解如何处理它。

文档树中每个节点的含义如下

  • Root (hash). 根节点。
    • classes => Classes (list). 已文档化的类。
      • Class (hash). 一个已文档化的类。
        • protected_members => ClassProtectedMembers (hash). 关于类中保护成员的信息。
          • members => ClassProtectedMemberList (list). 保护成员列表。
            • ClassProtectedMember (hash). 一个保护成员。
              • protection => ClassProtectedMemberProtection (string). 保护成员的保护级别。
              • detailed => ClassProtectedMemberDetailed (hash). 关于保护成员的详细信息。
                • doc => ClassProtectedMemberDetailedDoc (doc). 保护成员的详细文档。
                • see => ClassProtectedMemberSee (doc). 保护成员的“另请参阅”文档。
              • kind => ClassProtectedMemberKind (string). 保护成员的类型(通常为“variable”)。
              • name => ClassProtectedMemberName (string). 保护成员的名称。
              • type => ClassProtectedMemberType (string). 保护成员的数据类型。
        • detailed => ClassDetailed (hash). 关于类的详细信息。
          • doc => ClassDetailedDoc (doc). 类的详细文档块。
        • protected_typedefs => ClassProtectedTypedefs (hash). 关于类中保护 typedef 的信息。
          • members => ClassProtectedTypedefList (list). 保护 typedef 列表。
            • ClassProtectedTypedef (hash). 一个保护 typedef。
              • protection => ClassProtectedTypedefProtection (string). 保护 typedef 的保护级别。
              • detailed => ClassProtectedTypedefDetailed (hash). 关于保护 typedef 的详细信息。
                • doc => ClassProtectedTypedefDetailedDoc (doc). 保护 typedef 的详细文档。
                • see => ClassProtectedTypedefSee (doc). 保护 typedef 的“另请参阅”文档。
              • kind => ClassProtectedTypedefKind (string). 保护 typedef 的类型(通常为“typedef”)。
              • name => ClassProtectedTypedefName (string). 保护 typedef 的名称。
              • type => ClassProtectedTypedefType (string). 保护 typedef 的数据类型。
        • name => ClassName (string). 类的名称。
        • private_members => ClassPrivateMembers (hash). 关于类中私有成员的信息。
          • members => ClassPrivateMemberList (list). 私有成员列表。
            • ClassPrivateMember (hash). 一个私有成员。
              • protection => ClassPrivateMemberProtection (string). 私有成员的保护级别。
              • detailed => ClassPrivateMemberDetailed (hash). 关于私有成员的详细信息。
                • doc => ClassPrivateMemberDetailedDoc (doc). 私有成员的详细文档。
                • see => ClassPrivateMemberSee (doc). 私有成员的“另请参阅”文档。
              • kind => ClassPrivateMemberKind (string). 私有成员的类型(通常为“variable”)。
              • name => ClassPrivateMemberName (string). 私有成员的名称。
              • type => ClassPrivateMemberType (string). 私有成员的数据类型。
        • private_typedefs => ClassPrivateTypedefs (hash). 关于类中私有 typedef 的信息。
          • members => ClassPrivateTypedefList (list). 私有 typedef 列表。
            • ClassPrivateTypedef (hash). 一个私有 typedef。
              • protection => ClassPrivateTypedefProtection (string). 私有 typedef 的保护级别。
              • detailed => ClassPrivateTypedefDetailed (hash). 关于私有 typedef 的详细信息。
                • doc => ClassPrivateTypedefDetailedDoc (doc). 私有 typedef 的详细文档。
                • see => ClassPrivateTypedefSee (doc). 私有 typedef 的“另请参阅”文档。
              • kind => ClassPrivateTypedefKind (string). 私有 typedef 的类型(通常为“typedef”)。
              • name => ClassPrivateTypedefName (string). 私有 typedef 的名称。
              • type => ClassPrivateTypedefType (string). 私有 typedef 的数据类型。
        • protected_methods => ClassProtectedMethods (hash). 关于类中保护方法的信息。
          • members => ClassProtectedMethodList (list). 保护方法列表。
            • ClassProtectedMethod (hash). 一个保护方法。
              • parameters => ClassProtectedMethodParams (list). 保护方法的参数列表。
                • ClassProtectedMethodParam (hash). 保护方法的一个参数。
                  • declaration_name => ClassProtectedMethodParamName (string). 参数的名称。
                  • type => ClassProtectedMethodParamType (string). 参数的数据类型。
              • protection => ClassProtectedMethodProtection (string). 保护方法的保护级别。
              • virtualness => ClassProtectedMethodVirtualness (string). 保护方法的虚属性。
              • detailed => ClassProtectedMethodDetailed (hash). 关于保护方法的详细信息。
                • params => ClassProtectedMethodPDBlocks (list). 保护方法的参数文档块列表。
                  • ClassProtectedMethodPDBlock (hash). 保护方法的一个参数文档块。
                    • parameters => ClassProtectedMethodPDParams (list). 此参数文档块的参数列表。
                      • ClassProtectedMethodPDParam (hash). 此文档块记录的一个参数。
                        • name => ClassProtectedMethodPDParamName (string). 参数的名称。
                    • doc => ClassProtectedMethodPDDoc (doc). 此参数文档块的文档。
                • doc => ClassProtectedMethodDetailedDoc (doc). 保护方法的详细文档。
                • see => ClassProtectedMethodSee (doc). 保护方法的“另请参阅”文档。
                • return => ClassProtectedMethodReturn (doc). 关于保护方法返回值的文档。
              • kind => ClassProtectedMethodKind (string). 保护方法的类型(通常为“function”)。
              • name => ClassProtectedMethodName (string). 保护方法的名称。
              • type => ClassProtectedMethodType (string). 保护方法返回的数据类型。
              • static => ClassProtectedMethodStatic (string). 保护方法是否为静态。
        • public_typedefs => ClassPublicTypedefs (hash). 关于类中公共 typedef 的信息。
          • members => ClassPublicTypedefList (list). 公共 typedef 列表。
            • ClassPublicTypedef (hash). 一个公共 typedef。
              • protection => ClassPublicTypedefProtection (string). 公共 typedef 的保护级别。
              • detailed => ClassPublicTypedefDetailed (hash). 关于公共 typedef 的详细信息。
                • doc => ClassPublicTypedefDetailedDoc (doc). 公共 typedef 的详细文档。
                • see => ClassPublicTypedefSee (doc). 公共 typedef 的“另请参阅”文档。
              • kind => ClassPublicTypedefKind (string). 公共 typedef 的类型(通常为“typedef”)。
              • name => ClassPublicTypedefName (string). 公共 typedef 的名称。
              • type => ClassPublicTypedefType (string). 公共 typedef 的数据类型。
        • public_members => ClassPublicMembers (hash). 关于类中公共成员的信息。
          • members => ClassPublicMemberList (list). 公共成员列表。
            • ClassPublicMember (hash). 一个公共成员。
              • protection => ClassPublicMemberProtection (string). 公共成员的保护级别。
              • detailed => ClassPublicMemberDetailed (hash). 关于公共成员的详细信息。
                • doc => ClassPublicMemberDetailedDoc (doc). 公共成员的详细文档。
                • see => ClassPublicMemberSee (doc). 公共成员的“另请参阅”文档。
              • kind => ClassPublicMemberKind (string). 公共成员的类型(通常为“variable”)。
              • name => ClassPublicMemberName (string). 公共成员的名称。
              • type => ClassPublicMemberType (string). 公共成员的数据类型。
        • private_methods => ClassPrivateMethods (hash). 关于类中私有方法的信息。
          • members => ClassPrivateMethodList (list). 私有方法列表。
            • ClassPrivateMethod (hash). 一个私有方法。
              • parameters => ClassPrivateMethodParams (list). 私有方法的参数列表。
                • ClassPrivateMethodParam (hash). 私有方法的一个参数。
                  • declaration_name => ClassPrivateMethodParamName (string). 参数的名称。
                  • type => ClassPrivateMethodParamType (string). 参数的数据类型。
              • protection => ClassPrivateMethodProtection (string). 私有方法的保护级别。
              • virtualness => ClassPrivateMethodVirtualness (string). 私有方法的虚属性。
              • detailed => ClassPrivateMethodDetailed (hash). 关于私有方法的详细信息。
                • params => ClassPrivateMethodPDBlocks (list). 私有方法的参数文档块列表。
                  • ClassPrivateMethodPDBlock (hash). 私有方法的一个参数文档块。
                    • parameters => ClassPrivateMethodPDParams (list). 此参数文档块的参数列表。
                      • ClassPrivateMethodPDParam (hash). 此文档块记录的一个参数。
                        • name => ClassPrivateMethodPDParamName (string). 参数的名称。
                    • doc => ClassPrivateMethodPDDoc (doc). 此参数文档块的文档。
                • doc => ClassPrivateMethodDetailedDoc (doc). 私有方法的详细文档。
                • see => ClassPrivateMethodSee (doc). 私有方法的“另请参阅”文档。
                • return => ClassPrivateMethodReturn (doc). 关于私有方法返回值的文档。
              • kind => ClassPrivateMethodKind (string). 私有方法的类型(通常为“function”)。
              • name => ClassPrivateMethodName (string). 私有方法的名称。
              • type => ClassPrivateMethodType (string). 私有方法返回的数据类型。
              • static => ClassPrivateMethodStatic (string). 私有方法是否为静态。
        • public_methods => ClassPublicMethods (hash). 关于类中公共方法的信息。
          • members => ClassPublicMethodList (list). 公共方法列表。
            • ClassPublicMethod (hash). 一个公共方法。
              • parameters => ClassPublicMethodParams (list). 公共方法的参数列表。
                • ClassPublicMethodParam (hash). 公共方法的一个参数。
                  • declaration_name => ClassPublicMethodParamName (string). 参数的名称。
                  • type => ClassPublicMethodParamType (string). 参数的数据类型。
              • protection => ClassPublicMethodProtection (string). 公共方法的保护级别。
              • virtualness => ClassPublicMethodVirtualness (string). 公共方法的虚属性。
              • detailed => ClassPublicMethodDetailed (hash). 关于公共方法的详细信息。
                • params => ClassPublicMethodPDBlocks (list). 公共方法的参数文档块列表。
                  • ClassPublicMethodPDBlock (hash). 公共方法的一个参数文档块。
                    • parameters => ClassPublicMethodPDParams (list). 此参数文档块的参数列表。
                      • ClassPublicMethodPDParam (hash). 此文档块记录的一个参数。
                        • name => ClassPublicMethodPDParamName (string). 参数的名称。
                    • doc => ClassPublicMethodPDDoc (doc). 此参数文档块的文档。
                • doc => ClassPublicMethodDetailedDoc (doc). 公共方法的详细文档。
                • see => ClassPublicMethodSee (doc). 公共方法的“另请参阅”文档。
                • return => ClassPublicMethodReturn (doc). 关于公共方法返回值的文档。
              • kind => ClassPublicMethodKind (string). 公共方法的类型(通常为“function”)。
              • name => ClassPublicMethodName (string). 公共方法的名称。
              • type => ClassPublicMethodType (string). 公共方法返回的数据类型。
              • static => ClassPublicMethodStatic (string). 公共方法是否为静态。
    • files => Files (list). 已文档化的文件。
      • File (hash). 一个已文档化的文件。
        • detailed => FileDetailed (hash). 关于文件的详细信息。
          • doc => FileDetailedDoc (doc). 文件的详细文档块。
        • functions => FileFunctions (hash). 关于文件中函数的信息。
          • members => FileFunctionList (list). 函数列表。
            • FileFunction (hash). 一个函数。
              • parameters => FileFunctionParams (list). 函数的参数列表。
                • FileFunctionParam (hash). 函数的一个参数。
                  • declaration_name => FileFunctionParamName (string). 参数的名称。
                  • type => FileFunctionParamType (string). 参数的数据类型。
              • protection => FileFunctionProtection (string). 函数的保护级别。
              • virtualness => FileFunctionVirtualness (string). 函数的虚属性。
              • detailed => FileFunctionDetailed (hash). 关于函数的详细信息。
                • params => FileFunctionPDBlocks (list). 函数的参数文档块列表。
                  • FileFunctionPDBlock (hash). 函数的一个参数文档块。
                    • parameters => FileFunctionPDParams (list). 此参数文档块的参数列表。
                      • FileFunctionPDParam (hash). 此文档块记录的一个参数。
                        • name => FileFunctionPDParamName (string). 参数的名称。
                    • doc => FileFunctionPDDoc (doc). 此参数文档块的文档。
                • doc => FileFunctionDetailedDoc (doc). 函数的详细文档。
                • see => FileFunctionSee (doc). 函数的“另请参阅”文档。
                • return => FileFunctionReturn (doc). 关于函数返回值的文档。
              • kind => FileFunctionKind (string). 函数的类型(通常为“function”)。
              • name => FileFunctionName (string). 函数的名称。
              • type => FileFunctionType (string). 函数返回的数据类型。
              • static => FileFunctionStatic (string). 函数是否为静态。
        • name => FileName (string). 文件的名称。
        • variables => FileVariables (hash). 关于文件中变量的信息。
          • members => FileVariableList (list). 变量列表。
            • FileVariable (hash). 一个变量。
              • protection => FileVariableProtection (string). 变量的保护级别。
              • detailed => FileVariableDetailed (hash). 关于变量的详细信息。
                • doc => FileVariableDetailedDoc (doc). 变量的详细文档。
                • see => FileVariableSee (doc). 变量的“另请参阅”文档。
              • kind => FileVariableKind (string). 变量的类型(通常为“variable”)。
              • name => FileVariableName (string). 变量的名称。
              • type => FileVariableType (string). 变量的数据类型。
        • typedefs => FileTypedefs (hash). 关于文件中 typedef 的信息。
          • members => FileTypedefList (list). typedef 列表。
            • FileTypedef (hash). 一个 typedef。
              • protection => FileTypedefProtection (string). typedef 的保护级别。
              • detailed => FileTypedefDetailed (hash). 关于 typedef 的详细信息。
                • doc => FileTypedefDetailedDoc (doc). typedef 的详细文档。
                • see => FileTypedefSee (doc). typedef 的“另请参阅”文档。
              • kind => FileTypedefKind (string). typedef 的类型(通常为“typedef”)。
              • name => FileTypedefName (string). typedef 的名称。
              • type => FileTypedefType (string). typedef 的数据类型。

转到下一节或返回索引