バージョン1.2.18以降、Doxygenは「Perlモジュール出力形式」と呼ぶ新しい出力形式を生成できるようになりました。これは、Doxygenのソースを修正することなく、新しいカスタマイズされた出力を生成するために使用できる中間形式として設計されました。したがって、その目的はDoxygenによって生成できるXML出力形式と似ています。XML出力形式の方がより標準的ですが、Perlモジュール出力形式は、おそらくよりシンプルで使いやすいでしょう。
Perlモジュール出力形式は現在まだ実験段階であり、将来のバージョンで互換性のない変更が行われる可能性がありますが、これはあまり起こりそうにありません。また、他のDoxygenバックエンドのいくつかの機能が不足しています。しかし、Perlモジュールベースのジェネレーターが示しているように、すでに有用な出力を生成するために使用できます。
PerlモジュールバックエンドまたはPerlモジュールベースのジェネレーターで見つかったバグや問題は、Doxygenイシュートラッカーに報告してください。提案も歓迎します(参照: バグの報告方法)。
DoxyfileでGENERATE_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モジュールベースのジェネレーターが含まれます、以下を参照)、または独自のカスタマイズされたジェネレーターを作成することができます。Perlの知識があればそれほど難しくないはずであり、これがDoxygenにPerlモジュールバックエンドを含める主な目的です。これを行う方法の詳細は、以下を参照してください。
Perlモジュールベースのジェネレーターは、現在かなり実験的で不完全ですが、それでも便利に感じるかもしれません。ファイル内およびクラス内の関数、typedef、変数のドキュメントを生成でき、
マクロを再定義することでかなりカスタマイズできます。ただし、これを行う方法に関するドキュメントはまだありません。
DoxyfileでPERLMOD_LATEXタグを`YES`に設定すると、出力ディレクトリのperlmod/サブディレクトリにいくつかの追加ファイルの作成が有効になります。これらのファイルには、pdflatexおよびlatexを使用して、Perlモジュール出力からそれぞれPDFおよびDVI出力を生成するために必要なPerlスクリプトとコードが含まれています。これらのファイルの利用を自動化するためのルールも、doxyrules.makeおよびMakefileに追加されます。
追加で生成されるファイルは以下のとおりです。
doxylatex.pl: このPerlスクリプトは、DoxyDocs.pmとDoxyModel.pmを使用して、コードからアクセス可能な形式でドキュメントを含む
ファイルであるdoxydocs.texを生成します。このファイルは直接LaTeX処理できません。
doxyformat.tex: このファイルには、doxydocs.texからのドキュメントを、LaTeX処理されてユーザーに提示されるのに適したテキストに変換する
コードが含まれています。
doxylatex-template.pl: このPerlスクリプトは、DoxyModel.pmを使用して、いくつかのマクロのデフォルト値を定義するファイルであるdoxytemplate.texを生成します。doxyformat.texはdoxytemplate.texをインクルードし、いくつかのマクロを明示的に定義する必要をなくします。
doxylatex.tex: これは、いくつかのパッケージをロードし、doxyformat.texとdoxydocs.texをインクルードする非常にシンプルなドキュメントです。このドキュメントは、doxyrules.makeに追加されたルールにより、PDFおよびDVIドキュメントを生成するために
処理されます。
これを試すには、latex、pdflatex、およびdoxylatex.texで使用されるパッケージがインストールされている必要があります。
以下のコマンドを使用して、Doxyfileを最新バージョンに更新してください。
doxygen -u Doxyfile
DoxyfileでGENERATE_PERLMODおよびPERLMOD_LATEXタグの両方を`YES`に設定してください。
Doxyfileに対してDoxygenを実行してください
doxygen Doxyfile
出力ディレクトリにperlmod/サブディレクトリが出現しているはずです。perlmod/サブディレクトリに入り、以下を実行してください
make pdf
これにより、ドキュメントがPDF形式で含まれるdoxylatex.pdfが生成されるはずです。
以下を実行してください
make dvi
これにより、ドキュメントがDVI形式で含まれるdoxylatex.dviが生成されるはずです。
Doxygenによって生成されたPerlモジュールドキュメントは、DoxyDocs.pmに保存されます。これは、変数$doxydocsへの代入と、通常Perlモジュールの最後にある慣習的な1;ステートメントの2つのステートメントのみを含む非常にシンプルなPerlモジュールです。
ドキュメントは変数$doxydocsに保存されており、DoxyDocs.pmを使用するPerlスクリプトによってアクセスできます。
$doxydocsは、文字列、ハッシュ、リストの3種類のノードで構成されるツリー状の構造を含んでいます。
Strings (文字列): これらは通常のPerl文字列です。任意の長さで、任意の文字を含むことができます。そのセマンティクスは、ツリー内の位置によって異なります。このタイプのノードには子ノードがありません。
Hashes (ハッシュ): これらは無名Perlハッシュへの参照です。ハッシュは複数のフィールドを持つことができ、それぞれ異なるキーを持ちます。ハッシュフィールドの値は、文字列、ハッシュ、またはリストである可能性があり、そのセマンティクスはハッシュフィールドのキーとツリー内のハッシュの位置に依存します。ハッシュフィールドの値がノードの子ノードになります。
Lists (リスト): これらは無名Perlリストへの参照です。リストは不定数の要素を持ち、それらがノードの子ノードとなります。各要素は同じ型(文字列、ハッシュ、リスト)と同じセマンティクスを持ち、ツリー内のリストの位置によって異なります。
ご覧のとおり、$doxydocsに含まれるドキュメントは、シンプルなPerlスクリプトで処理する上で特別な障害は何もありません。
DoxyDocs.pmに含まれるドキュメントを、ドキュメントツリーの各ノードのセマンティクスを考慮することなく処理することに関心があるかもしれません。この目的のために、DoxygenはDoxyModel.pmファイルを生成します。このファイルには、ドキュメントツリー内の各ノードの型と子ノードを記述するデータ構造が含まれています。
このセクションの残りの部分はまだ執筆されていませんが、その間にDoxygenによって生成されたPerlスクリプト(doxylatex.plやdoxytemplate-latex.plなど)を見て、DoxyModel.pmの使い方のヒントを得ることができます。
これは、DoxyDocs.pmにおけるドキュメントツリーの構造の説明です。以下のリストの各項目は、ツリー内のノードを記述しており、説明の形式は以下のとおりです
ここで
「key =>」の部分は、親ノードがハッシュの場合にのみ表示されます。「key」はこのノードのキーです。
「名前」は、DoxyModel.pmで定義されているノードの一意の名前です。
「(型)」はノードの型です: 文字列ノードの場合は「string」、ハッシュノードの場合は「hash」、リストノードの場合は「list」、ドキュメントサブツリーの場合は「doc」です。ドキュメントサブツリーの構造はまだどこにも記述されていませんが、例えばdoxylatex.plを見て、その処理方法を確認することができます。
ドキュメントツリー内の各ノードの意味は以下のとおりです