Perl 模块输出

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

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

请将您在 Perl 模块后端或基于 Perl 模块的 {\LaTeX} 生成器中发现的任何错误或问题报告给 Doxygen 问题跟踪器。也欢迎提出建议(另请参阅:如何报告错误)。

用法

Doxyfile 中启用 GENERATE_PERLMOD 标签时,运行 Doxygen 会在您的输出目录的 perlmod/ 子目录中生成一些文件。这些文件如下:

  • DoxyDocs.pm:这是实际包含文档的 Perl 模块,其格式为 下文 所述的 Perl 模块格式。

  • DoxyModel.pm:此 Perl 模块描述了 DoxyDocs.pm 的结构,与实际文档无关。有关详细信息,请参阅 下文

  • doxyrules.make:此文件包含用于构建和清理从 Doxyfile 生成的文件的 make 规则。还包含这些文件的路径和其他相关信息。此文件旨在由您自己的 Makefile 包含。

  • Makefile:这是一个简单的 Makefile,包含 doxyrules.make

要使用存储在 DoxyDocs.pm 中的文档,您可以使用 Doxygen 提供的默认基于 Perl 模块的生成器之一(目前包括基于 Perl 模块的 {\LaTeX} 生成器,请参阅 下文),或者编写您自己的定制生成器。如果您对 Perl 有一定的了解,这应该不会太难,这也是将 Perl 模块后端包含在 Doxygen 中的主要目的。有关如何执行此操作的详细信息,请参阅 下文

使用 LaTeX 生成器。

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

Doxyfile 中的 PERLMOD_LATEX 标签设置为 YES 会在您的输出目录的 perlmod/ 子目录中创建一些附加文件。这些文件包含生成 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 中,然后可以通过使用 DoxyDocs.pm 的 Perl 脚本访问。

$doxydocs 包含一个由三种类型的节点组成的树状结构:字符串、哈希和列表。

  • 字符串:这些是普通的 Perl 字符串。它们可以是任何长度,可以包含任何字符。它们的语义取决于它们在树中的位置。这种类型的节点没有子节点。

  • 哈希:这些是对匿名 Perl 哈希的引用。一个哈希可以有多个字段,每个字段都有一个不同的键。哈希字段的值可以是字符串、哈希或列表,其语义取决于哈希字段的键和哈希在树中的位置。哈希字段的值是节点的子节点。

  • 列表:这些是对匿名 Perl 列表的引用。一个列表具有未定义数量的元素,这些元素是节点的子节点。每个元素具有相同的类型(字符串、哈希或列表)和相同的语义,具体取决于列表在树中的位置。

如您所见,$doxydocs 中包含的文档对简单的 Perl 脚本进行处理没有任何特殊障碍。

数据结构

您可能对处理 DoxyDocs.pm 中包含的文档感兴趣,而无需考虑文档树中每个节点的语义。为此,Doxygen 生成了一个 DoxyModel.pm 文件,其中包含一个数据结构,描述了文档树中每个节点的类型和子节点。

本节的其余部分尚未编写,但在此期间,您可以查看 Doxygen 生成的 Perl 脚本(例如 doxylatex.pldoxytemplate-latex.pl)以了解如何使用 DoxyModel.pm

Perl 模块树节点

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

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

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

其中

  • “key =>” 部分仅在父节点为哈希时出现。“key”是此节点的键。

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

  • “(类型)” 是节点的类型:“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 的数据类型。

转到 下一 部分或返回 索引