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 知识,这应该不会太难,这也是在 Doxygen 中包含 Perl 模块后端的主要目的。有关如何执行此操作的详细信息,请参阅 下文

使用 LaTeX 生成器。

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

Doxyfile 中将 PERLMOD_LATEX 标签设置为 YES,可以在输出目录的 perlmod/ 子目录中创建一些额外的文件。这些文件包含必要的 Perl 脚本和 {\LaTeX} 代码,以便分别使用 pdflatexlatex 从 Perl 模块输出生成 PDF 和 DVI 输出。自动化使用这些文件的规则也会添加到 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 输出

要尝试此操作,您需要安装 latexpdflatexdoxylatex.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 以了解如何处理它。

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

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

前往 下一节 或返回 索引