Perlモジュール出力

バージョン1.2.18以降、Doxygenは「Perlモジュール出力形式」と呼ぶ新しい出力形式を生成できるようになりました。これは、Doxygenのソースコードを変更することなく、新しいカスタマイズされた出力を生成するために使用できる中間形式として設計されました。したがって、その目的は、Doxygenで生成できるXML出力形式と似ています。XML出力形式はより標準的ですが、Perlモジュール出力形式はよりシンプルで使いやすい可能性があります。

Perlモジュール出力形式は現在まだ実験段階であり、将来のバージョンで互換性のない変更が行われる可能性がありますが、その可能性は低いと思われます。また、他のDoxygenバックエンドの一部の機能も欠けています。しかし、Perlモジュールベースの{\LaTeX}ジェネレータが示すように、すでに有用な出力を生成できます。

PerlモジュールバックエンドまたはPerlモジュールベースの{\LaTeX}ジェネレータで発見されたバグや問題は、Doxygenイシュートラッカーに報告してください。提案も歓迎します(参照:バグを報告する方法)。

使用方法

DoxyfileGENERATE_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}マクロを再定義することでかなりカスタマイズできます。ただし、これを行う方法に関するドキュメントはまだありません。

DoxyfilePERLMOD_LATEXタグをYESに設定すると、出力ディレクトリのperlmod/サブディレクトリに追加のファイルが作成されます。これらのファイルには、それぞれpdflatexlatexを使用して、Perlモジュール出力からPDFとDVI出力を生成するために必要なPerlスクリプトと{\LaTeX}コードが含まれています。これらのファイルの使用を自動化するためのルールもdoxyrules.makeMakefileに追加されます。

追加で生成されるファイルは次のとおりです。

  • doxylatex.pl: このPerlスクリプトは、DoxyDocs.pmDoxyModel.pmを使用して、doxydocs.texを生成します。これは、{\LaTeX}コードからアクセスできる形式でドキュメントを含む{\TeX}ファイルです。このファイルは直接LaTeX処理できません。

  • doxyformat.tex: このファイルには、doxydocs.texからのドキュメントを、{\LaTeX}で処理してユーザーに提示するのに適した{\LaTeX}テキストに変換する{\LaTeX}コードが含まれています。

  • doxylatex-template.pl: このPerlスクリプトは、DoxyModel.pmを使用して、一部のマクロのデフォルト値を定義する{\TeX}ファイルであるdoxytemplate.texを生成します。doxytemplate.texは、一部のマクロを明示的に定義する必要を避けるためにdoxyformat.texによってインクルードされます。

  • doxylatex.tex: これは、いくつかのパッケージをロードし、doxyformat.texdoxydocs.texをインクルードする非常にシンプルな{\LaTeX}ドキュメントです。このドキュメントは、doxyrules.makeに追加されたルールによってPDFおよびDVIドキュメントを生成するために{\LaTeX}処理されます。

PDFおよびDVI出力の作成

これを試すには、latexpdflatex、およびdoxylatex.texで使用されるパッケージがインストールされている必要があります。

  1. を使用してDoxyfileを最新バージョンに更新します

    doxygen -u Doxyfile

  2. DoxyfileGENERATE_PERLMODPERLMOD_LATEXタグの両方をYESに設定します。

  3. DoxyfileでDoxygenを実行します

    doxygen Doxyfile

  4. 出力ディレクトリにperlmod/サブディレクトリが出現しているはずです。perlmod/サブディレクトリに入り、実行します。

    make pdf

    これにより、ドキュメントがPDF形式で含まれるdoxylatex.pdfが生成されるはずです。

  5. 実行します

    make dvi

    これにより、ドキュメントがDVI形式で含まれるdoxylatex.dviが生成されるはずです。

ドキュメント形式。

Doxygenによって生成されるPerlモジュールドキュメントはDoxyDocs.pmに格納されます。これは非常にシンプルなPerlモジュールで、2つのステートメントのみを含みます。変数$doxydocsへの代入と、通常Perlモジュールを終了する慣例的な1;ステートメントです。
ドキュメントは変数$doxydocsに格納され、DoxyDocs.pmを使用するPerlスクリプトからアクセスできます。

$doxydocsには、文字列、ハッシュ、リストの3種類のノードからなるツリー状の構造が含まれています。

  • 文字列: これらは通常のPerl文字列です。任意の長さで任意の文字を含めることができます。その意味はツリー内の場所によって異なります。このタイプのノードには子ノードがありません。

  • ハッシュ: これらは匿名Perlハッシュへの参照です。ハッシュは複数のフィールドを持つことができ、それぞれ異なるキーを持っています。ハッシュフィールドの値は文字列、ハッシュ、またはリストのいずれかであり、その意味はハッシュフィールドのキーとツリー内のハッシュの位置によって異なります。ハッシュフィールドの値はノードの子です。

  • リスト: これらは匿名Perlリストへの参照です。リストには未定義数の要素があり、それがノードの子です。各要素は同じ型(文字列、ハッシュ、またはリスト)を持ち、ツリー内のリストの位置によって同じ意味を持ちます。

ご覧のとおり、$doxydocsに含まれるドキュメントは、シンプルなPerlスクリプトで処理する上で特別な障害は提示しません。

データ構造

ドキュメントツリーの各ノードのセマンティクスを考慮することなく、DoxyDocs.pmに含まれるドキュメントを処理することに興味があるかもしれません。この目的のために、DoxygenはDoxyModel.pmファイルを生成します。このファイルには、ドキュメントツリー内の各ノードの型と子を記述するデータ構造が含まれています。

このセクションの残りの部分はまだ記述されていませんが、その間にDoxygenによって生成されたPerlスクリプト(doxylatex.pldoxytemplate-latex.plなど)を見て、DoxyModel.pmの使用方法を理解することができます。

Perlモジュールツリーノード

Perlモジュール出力形式のドキュメントツリー内のノード。

これは、DoxyDocs.pmにおけるドキュメントツリーの構造の説明です。以下のリストの各項目はツリー内のノードを記述し、説明の形式は次のとおりです。

  • [ key => ] Name (type). 内容の説明。

ここで

  • "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のデータ型。

次のセクションに進むか、インデックスに戻ります。