Perlモジュール出力

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

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

PerlモジュールバックエンドまたはPerlモジュールベースの{\LaTeX}ジェネレータで見つかったバグや問題をDoxygen issue trackerに報告してください。提案も歓迎します(バグ報告の方法も参照してください)。

使用法

GENERATE_PERLMODタグがDoxyfileで有効になっている場合、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}マクロを再定義することで大幅にカスタマイズできます。ただし、これを行う方法に関するドキュメントはまだありません。

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

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

  • doxylatex.pl: このPerlスクリプトはDoxyDocs.pmDoxyModel.pmを使用して、{\LaTeX}コードでアクセスできる形式でドキュメントを含む{\TeX}ファイルであるdoxydocs.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. GENERATE_PERLMODタグとPERLMOD_LATEXタグの両方をDoxyfileYESに設定します。

  3. DoxyfileでDoxygenを実行します

    doxygen Doxyfile

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

    make pdf

    これにより、PDF形式のドキュメントを含むdoxylatex.pdfが生成されます。

  5. 実行

    make dvi

    これにより、DVI形式のドキュメントを含むdoxylatex.dviが生成されます。

ドキュメント形式。

Doxygenによって生成されたPerlモジュールドキュメントは、DoxyDocs.pmに格納されます。これは、変数$doxydocsへの代入と、通常Perlモジュールの最後に記述される慣例的な1;ステートメントの2つのステートメントのみを含む非常にシンプルなPerlモジュールです。
ドキュメントは変数$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 => ] 名前 (タイプ)。コンテンツの説明。

ここで

  • 「key =>」部分は、親ノードがハッシュの場合にのみ表示されます。「key」はこのノードのキーです。

  • 「名前」は、DoxyModel.pmで定義されたノードの一意の名前です。

  • 「(タイプ)」は、ノードのタイプです。文字列ノードの場合は「string」、ハッシュノードの場合は「hash」、リストノードの場合は「list」、ドキュメントサブツリーの場合は「doc」です。ドキュメントサブツリーの構造はまだどこにも記述されていませんが、たとえば、doxylatex.plを見て、それを処理する方法を確認できます。

ドキュメントツリー内の各ノードの意味は次のとおりです。

  • Root (hash)。ルートノード。
    • classes => Classes (list)。ドキュメント化されたクラス。
      • Class (hash)。ドキュメント化されたクラス。
        • protected_members => ClassProtectedMembers (hash)。クラス内のprotectedメンバに関する情報。
          • members => ClassProtectedMemberList (list)。protectedメンバリスト。
            • ClassProtectedMember (hash)。protectedメンバ。
              • protection => ClassProtectedMemberProtection (string)。protectedメンバの保護。
              • detailed => ClassProtectedMemberDetailed (hash)。protectedメンバに関する詳細情報。
                • doc => ClassProtectedMemberDetailedDoc (doc)。protectedメンバの詳細ドキュメント。
                • see => ClassProtectedMemberSee (doc)。protectedメンバの「参照」ドキュメント。
              • kind => ClassProtectedMemberKind (string)。protectedメンバの種類(通常は「変数」)。
              • name => ClassProtectedMemberName (string)。protectedメンバの名前。
              • type => ClassProtectedMemberType (string)。protectedメンバのデータ型。
        • detailed => ClassDetailed (hash)。クラスに関する詳細情報。
          • doc => ClassDetailedDoc (doc)。クラスの詳細ドキュメントブロック。
        • protected_typedefs => ClassProtectedTypedefs (hash)。クラス内のprotected typedefに関する情報。
          • members => ClassProtectedTypedefList (list)。protected typedefリスト。
            • ClassProtectedTypedef (hash)。protected typedef。
              • protection => ClassProtectedTypedefProtection (string)。protected typedefの保護。
              • detailed => ClassProtectedTypedefDetailed (hash)。protected typedefに関する詳細情報。
                • doc => ClassProtectedTypedefDetailedDoc (doc)。protected typedefの詳細ドキュメント。
                • see => ClassProtectedTypedefSee (doc)。protected typedefの「参照」ドキュメント。
              • kind => ClassProtectedTypedefKind (string)。protected typedefの種類(通常は「typedef」)。
              • name => ClassProtectedTypedefName (string)。protected typedefの名前。
              • type => ClassProtectedTypedefType (string)。protected typedefのデータ型。
        • name => ClassName (string)。クラスの名前。
        • private_members => ClassPrivateMembers (hash)。クラス内のprivateメンバに関する情報。
          • members => ClassPrivateMemberList (list)。privateメンバリスト。
            • ClassPrivateMember (hash)。privateメンバ。
              • protection => ClassPrivateMemberProtection (string)。privateメンバの保護。
              • detailed => ClassPrivateMemberDetailed (hash)。privateメンバに関する詳細情報。
                • doc => ClassPrivateMemberDetailedDoc (doc)。privateメンバの詳細ドキュメント。
                • see => ClassPrivateMemberSee (doc)。privateメンバの「参照」ドキュメント。
              • kind => ClassPrivateMemberKind (string)。privateメンバの種類(通常は「変数」)。
              • name => ClassPrivateMemberName (string)。privateメンバの名前。
              • type => ClassPrivateMemberType (string)。privateメンバのデータ型。
        • private_typedefs => ClassPrivateTypedefs (hash)。クラス内のprivate typedefに関する情報。
          • members => ClassPrivateTypedefList (list)。private typedefリスト。
            • ClassPrivateTypedef (hash)。private typedef。
              • protection => ClassPrivateTypedefProtection (string)。private typedefの保護。
              • detailed => ClassPrivateTypedefDetailed (hash)。private typedefに関する詳細情報。
                • doc => ClassPrivateTypedefDetailedDoc (doc)。private typedefの詳細ドキュメント。
                • see => ClassPrivateTypedefSee (doc)。private typedefの「参照」ドキュメント。
              • kind => ClassPrivateTypedefKind (string)。private typedefの種類(通常は「typedef」)。
              • name => ClassPrivateTypedefName (string)。private typedefの名前。
              • type => ClassPrivateTypedefType (string)。private typedefのデータ型。
        • protected_methods => ClassProtectedMethods (hash)。クラス内のprotectedメソッドに関する情報。
          • members => ClassProtectedMethodList (list)。protectedメソッドリスト。
            • ClassProtectedMethod (hash)。protectedメソッド。
              • parameters => ClassProtectedMethodParams (list)。protectedメソッドのパラメータのリスト。
                • ClassProtectedMethodParam (hash)。protectedメソッドのパラメータ。
                  • declaration_name => ClassProtectedMethodParamName (string)。パラメータの名前。
                  • type => ClassProtectedMethodParamType (string)。パラメータのデータ型。
              • protection => ClassProtectedMethodProtection (string)。protectedメソッドの保護。
              • virtualness => ClassProtectedMethodVirtualness (string)。protectedメソッドの仮想性。
              • detailed => ClassProtectedMethodDetailed (hash)。protectedメソッドに関する詳細情報。
                • params => ClassProtectedMethodPDBlocks (list)。protectedメソッドのパラメータドキュメントブロックのリスト。
                  • ClassProtectedMethodPDBlock (hash)。protectedメソッドのパラメータドキュメントブロック。
                    • parameters => ClassProtectedMethodPDParams (list)。このパラメータドキュメントブロックのパラメータリスト。
                      • ClassProtectedMethodPDParam (hash)。このドキュメントブロックでドキュメント化されたパラメータ。
                        • name => ClassProtectedMethodPDParamName (string)。パラメータの名前。
                    • doc => ClassProtectedMethodPDDoc (doc)。このパラメータドキュメントブロックのドキュメント。
                • doc => ClassProtectedMethodDetailedDoc (doc)。protectedメソッドの詳細ドキュメント。
                • see => ClassProtectedMethodSee (doc)。protectedメソッドの「参照」ドキュメント。
                • return => ClassProtectedMethodReturn (doc)。protectedメソッドの戻り値に関するドキュメント。
              • kind => ClassProtectedMethodKind (string)。protectedメソッドの種類(通常は「関数」)。
              • name => ClassProtectedMethodName (string)。protectedメソッドの名前。
              • type => ClassProtectedMethodType (string)。protectedメソッドによって返されるデータ型。
              • static => ClassProtectedMethodStatic (string)。protectedメソッドが静的かどうか。
        • public_typedefs => ClassPublicTypedefs (hash)。クラス内のpublic typedefに関する情報。
          • members => ClassPublicTypedefList (list)。public typedefリスト。
            • ClassPublicTypedef (hash)。public typedef。
              • protection => ClassPublicTypedefProtection (string)。public typedefの保護。
              • detailed => ClassPublicTypedefDetailed (hash)。public typedefに関する詳細情報。
                • doc => ClassPublicTypedefDetailedDoc (doc)。public typedefの詳細ドキュメント。
                • see => ClassPublicTypedefSee (doc)。public typedefの「参照」ドキュメント。
              • kind => ClassPublicTypedefKind (string)。public typedefの種類(通常は「typedef」)。
              • name => ClassPublicTypedefName (string)。public typedefの名前。
              • type => ClassPublicTypedefType (string)。public typedefのデータ型。
        • public_members => ClassPublicMembers (hash)。クラス内のpublicメンバに関する情報。
          • members => ClassPublicMemberList (list)。publicメンバリスト。
            • ClassPublicMember (hash)。publicメンバ。
              • protection => ClassPublicMemberProtection (string)。publicメンバの保護。
              • detailed => ClassPublicMemberDetailed (hash)。publicメンバに関する詳細情報。
                • doc => ClassPublicMemberDetailedDoc (doc)。publicメンバの詳細ドキュメント。
                • see => ClassPublicMemberSee (doc)。publicメンバの「参照」ドキュメント。
              • kind => ClassPublicMemberKind (string)。publicメンバの種類(通常は「変数」)。
              • name => ClassPublicMemberName (string)。publicメンバの名前。
              • type => ClassPublicMemberType (string)。publicメンバのデータ型。
        • private_methods => ClassPrivateMethods (hash)。クラス内のprivateメソッドに関する情報。
          • members => ClassPrivateMethodList (list)。privateメソッドリスト。
            • ClassPrivateMethod (hash)。privateメソッド。
              • parameters => ClassPrivateMethodParams (list)。privateメソッドのパラメータのリスト。
                • ClassPrivateMethodParam (hash)。privateメソッドのパラメータ。
                  • declaration_name => ClassPrivateMethodParamName (string)。パラメータの名前。
                  • type => ClassPrivateMethodParamType (string)。パラメータのデータ型。
              • protection => ClassPrivateMethodProtection (string)。privateメソッドの保護。
              • virtualness => ClassPrivateMethodVirtualness (string)。privateメソッドの仮想性。
              • detailed => ClassPrivateMethodDetailed (hash)。privateメソッドに関する詳細情報。
                • params => ClassPrivateMethodPDBlocks (list)。privateメソッドのパラメータドキュメントブロックのリスト。
                  • ClassPrivateMethodPDBlock (hash)。privateメソッドのパラメータドキュメントブロック。
                    • parameters => ClassPrivateMethodPDParams (list)。このパラメータドキュメントブロックのパラメータリスト。
                      • ClassPrivateMethodPDParam (hash)。このドキュメントブロックでドキュメント化されたパラメータ。
                        • name => ClassPrivateMethodPDParamName (string)。パラメータの名前。
                    • doc => ClassPrivateMethodPDDoc (doc)。このパラメータドキュメントブロックのドキュメント。
                • doc => ClassPrivateMethodDetailedDoc (doc)。privateメソッドの詳細ドキュメント。
                • see => ClassPrivateMethodSee (doc)。privateメソッドの「参照」ドキュメント。
                • return => ClassPrivateMethodReturn (doc)。privateメソッドの戻り値に関するドキュメント。
              • kind => ClassPrivateMethodKind (string)。privateメソッドの種類(通常は「関数」)。
              • name => ClassPrivateMethodName (string)。privateメソッドの名前。
              • type => ClassPrivateMethodType (string)。privateメソッドによって返されるデータ型。
              • static => ClassPrivateMethodStatic (string)。privateメソッドが静的かどうか。
        • public_methods => ClassPublicMethods (hash)。クラス内のpublicメソッドに関する情報。
          • members => ClassPublicMethodList (list)。publicメソッドリスト。
            • ClassPublicMethod (hash)。publicメソッド。
              • parameters => ClassPublicMethodParams (list)。publicメソッドのパラメータのリスト。
                • ClassPublicMethodParam (hash)。publicメソッドのパラメータ。
                  • declaration_name => ClassPublicMethodParamName (string)。パラメータの名前。
                  • type => ClassPublicMethodParamType (string)。パラメータのデータ型。
              • protection => ClassPublicMethodProtection (string)。publicメソッドの保護。
              • virtualness => ClassPublicMethodVirtualness (string)。publicメソッドの仮想性。
              • detailed => ClassPublicMethodDetailed (hash)。publicメソッドに関する詳細情報。
                • params => ClassPublicMethodPDBlocks (list)。publicメソッドのパラメータドキュメントブロックのリスト。
                  • ClassPublicMethodPDBlock (hash)。publicメソッドのパラメータドキュメントブロック。
                    • parameters => ClassPublicMethodPDParams (list)。このパラメータドキュメントブロックのパラメータリスト。
                      • ClassPublicMethodPDParam (hash)。このドキュメントブロックでドキュメント化されたパラメータ。
                        • name => ClassPublicMethodPDParamName (string)。パラメータの名前。
                    • doc => ClassPublicMethodPDDoc (doc)。このパラメータドキュメントブロックのドキュメント。
                • doc => ClassPublicMethodDetailedDoc (doc)。publicメソッドの詳細ドキュメント。
                • see => ClassPublicMethodSee (doc)。publicメソッドの「参照」ドキュメント。
                • return => ClassPublicMethodReturn (doc)。publicメソッドの戻り値に関するドキュメント。
              • kind => ClassPublicMethodKind (string)。publicメソッドの種類(通常は「関数」)。
              • name => ClassPublicMethodName (string)。publicメソッドの名前。
              • type => ClassPublicMethodType (string)。publicメソッドによって返されるデータ型。
              • static => ClassPublicMethodStatic (string)。publicメソッドが静的かどうか。
    • 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)。関数の種類(通常は「関数」)。
              • 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)。変数の種類(通常は「変数」)。
              • 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のデータ型。

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