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 模組輸出產生 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 輸出

若要嘗試此操作,您需要安裝 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 中,然後 Perl 腳本可以使用 DoxyDocs.pm 存取該變數。

$doxydocs 包含一個由三種類型的節點組成的樹狀結構:字串、雜湊和清單。

  • 字串:這些是一般的 Perl 字串。它們可以是任何長度,並且可以包含任何字元。它們的語意取決於它們在樹中的位置。此類型的節點沒有子節點。

  • 雜湊:這些是對匿名 Perl 雜湊的參照。雜湊可以有多個欄位,每個欄位都有不同的索引鍵。雜湊欄位的值可以是字串、雜湊或清單,其語意取決於雜湊欄位的索引鍵以及雜湊在樹中的位置。雜湊欄位的值是節點的子節點。

  • 清單:這些是對匿名 Perl 清單的參照。清單具有未定義的元素數量,這些元素是節點的子節點。每個元素的類型(字串、雜湊或清單)和語意都相同,具體取決於清單在樹中的位置。

如您所見,$doxydocs 中包含的文件在由簡單的 Perl 腳本處理時,沒有任何特殊障礙。

資料結構

您可能會有興趣處理 DoxyDocs.pm 中包含的文件,而無需考慮文件樹中每個節點的語意。為此,Doxygen 會產生一個 DoxyModel.pm 檔案,其中包含描述文件樹中每個節點類型和子節點的資料結構。

本節的其餘部分尚未撰寫完成,但在此期間,您可以查看 Doxygen 產生的 Perl 腳本(例如 doxylatex.pldoxytemplate-latex.pl),以了解如何使用 DoxyModel.pm

Perl 模組樹狀節點

Perl 模組輸出格式的文件樹中的節點。

以下說明 DoxyDocs.pm 中文件樹的結構。以下清單中的每個項目都描述了樹中的一個節點,描述格式如下:

  • [ 索引鍵 => ] 名稱 (類型)。內容說明。

其中

  • 只有在父節點是雜湊時,才會顯示「索引鍵 =>」部分。「索引鍵」是此節點的索引鍵。

  • 「名稱」是節點的唯一名稱,在 DoxyModel.pm 中定義。

  • 「(類型)」是節點的類型:「string」代表字串節點、「hash」代表雜湊節點、「list」代表清單節點,而「doc」代表文件子樹。文件子樹的結構尚未在任何地方描述,但您可以查看例如 doxylatex.pl,以了解如何處理它。

文件樹中每個節點的含義如下:

  • (雜湊)。根節點。
    • classes => 類別 (清單)。文件化的類別。
      • 類別 (雜湊)。一個文件化的類別。
        • protected_members => 類別保護成員 (雜湊)。有關類別中受保護成員的資訊。
          • members => 類別保護成員清單 (清單)。受保護成員清單。
            • 類別保護成員 (雜湊)。一個受保護的成員。
              • protection => 類別保護成員保護 (字串)。受保護成員的保護。
              • detailed => 類別保護成員詳細資訊 (雜湊)。關於受保護成員的詳細資訊。
                • doc => 類別保護成員詳細資訊文件 (文件)。受保護成員的詳細文件。
                • see => 類別保護成員參閱 (文件)。受保護成員的「另請參閱」文件。
              • kind => 類別保護成員類型 (字串)。受保護成員的類型(通常為「variable」)。
              • name => 類別保護成員名稱 (字串)。受保護成員的名稱。
              • type => 類別保護成員類型 (字串)。受保護成員的資料類型。
        • detailed => 類別詳細資訊 (雜湊)。關於類別的詳細資訊。
          • doc => 類別詳細資訊文件 (文件)。類別的詳細文件區塊。
        • protected_typedefs => 類別保護 typedef (雜湊)。有關類別中受保護 typedef 的資訊。
          • members => 類別保護 typedef 清單 (清單)。受保護 typedef 清單。
            • 類別保護 typedef (雜湊)。一個受保護的 typedef。
              • protection => 類別保護 typedef 保護 (字串)。受保護 typedef 的保護。
              • detailed => 類別保護 typedef 詳細資訊 (雜湊)。關於受保護 typedef 的詳細資訊。
                • doc => 類別保護 typedef 詳細資訊文件 (文件)。受保護 typedef 的詳細文件。
                • see => 類別保護 typedef 參閱 (文件)。受保護 typedef 的「另請參閱」文件。
              • kind => 類別保護 typedef 類型 (字串)。受保護 typedef 的類型(通常為「typedef」)。
              • name => 類別保護 typedef 名稱 (字串)。受保護 typedef 的名稱。
              • type => ClassProtectedTypedefType (字串)。受保護的 typedef 的資料類型。
        • 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 (雜湊)。類別中私有 typedef 的資訊。
          • members => ClassPrivateTypedefList (列表)。私有 typedef 列表。
            • ClassPrivateTypedef (雜湊)。一個私有 typedef。
              • protection => ClassPrivateTypedefProtection (字串)。私有 typedef 的保護層級。
              • detailed => ClassPrivateTypedefDetailed (雜湊)。關於私有 typedef 的詳細資訊。
                • doc => ClassPrivateTypedefDetailedDoc (文件)。關於私有 typedef 的詳細文件。
                • see => ClassPrivateTypedefSee (文件)。關於私有 typedef 的「另請參閱」文件。
              • kind => ClassPrivateTypedefKind (字串)。私有 typedef 的種類(通常為「typedef」)。
              • name => ClassPrivateTypedefName (字串)。私有 typedef 的名稱。
              • type => ClassPrivateTypedefType (字串)。私有 typedef 的資料類型。
        • 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 (雜湊)。類別中公用 typedef 的資訊。
          • members => ClassPublicTypedefList (列表)。公用 typedef 列表。
            • ClassPublicTypedef (雜湊)。一個公用 typedef。
              • protection => ClassPublicTypedefProtection (字串)。公用 typedef 的保護層級。
              • detailed => ClassPublicTypedefDetailed (雜湊)。關於公用 typedef 的詳細資訊。
                • doc => ClassPublicTypedefDetailedDoc (文件)。關於公用 typedef 的詳細文件。
                • see => ClassPublicTypedefSee (文件)。關於公用 typedef 的「另請參閱」文件。
              • kind => ClassPublicTypedefKind (字串)。公用 typedef 的種類(通常為「typedef」)。
              • name => ClassPublicTypedefName (字串)。公用 typedef 的名稱。
              • type => ClassPublicTypedefType (字串)。公用 typedef 的資料類型。
        • 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 (字串)。公用方法的種類(通常為「函式」)。
              • 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)。此參數文件區塊的文件。
                • doc => FileFunctionDetailedDoc (doc)。函式的詳細文件。
                • see => FileFunctionSee (doc)。函式的「另請參閱」文件。
                • return => FileFunctionReturn (doc)。關於函式回傳值的文件。
              • kind => FileFunctionKind (字串)。函式的種類 (通常為 "function")。
              • name => FileFunctionName (字串)。函式的名稱。
              • type => FileFunctionType (字串)。函式回傳的資料型態。
              • static => FileFunctionStatic (字串)。函式是否為靜態 (static)。
        • name => FileName (字串)。檔案的名稱。
        • variables => FileVariables (雜湊)。關於檔案中變數的資訊。
          • members => FileVariableList (列表)。變數列表。
            • FileVariable (雜湊)。一個變數。
              • protection => FileVariableProtection (字串)。變數的保護層級。
              • detailed => FileVariableDetailed (雜湊)。關於變數的詳細資訊。
                • doc => FileVariableDetailedDoc (doc)。變數的詳細文件。
                • see => FileVariableSee (doc)。變數的「另請參閱」文件。
              • kind => FileVariableKind (字串)。變數的種類 (通常為 "variable")。
              • name => FileVariableName (字串)。變數的名稱。
              • type => FileVariableType (字串)。變數的資料型態。
        • typedefs => FileTypedefs (雜湊)。關於檔案中 typedef 的資訊。
          • members => FileTypedefList (列表)。typedef 列表。
            • FileTypedef (雜湊)。一個 typedef。
              • protection => FileTypedefProtection (字串)。typedef 的保護層級。
              • detailed => FileTypedefDetailed (雜湊)。關於 typedef 的詳細資訊。
                • doc => FileTypedefDetailedDoc (doc)。typedef 的詳細文件。
                • see => FileTypedefSee (doc)。typedef 的「另請參閱」文件。
              • kind => FileTypedefKind (字串)。typedef 的種類 (通常為 "typedef")。
              • name => FileTypedefName (字串)。typedef 的名稱。
              • type => FileTypedefType (字串)。typedef 的資料型態。

前往下一節或返回索引