Doxygenは様々なレベルのカスタマイズを提供します。微調整のセクションでは、出力の見た目を微調整したい場合の対処法について説明しています。レイアウトのセクションでは、ページ上の特定の情報を並べ替えたり非表示にしたりする方法について説明しています。XML出力のセクションでは、Doxygenによって生成されたXML出力に基づいて、必要な出力を生成する方法について説明しています。
次のサブセクションでは、少しの労力で調整できるいくつかの側面について説明します。
HTML出力の全体的な色を変更するために、Doxygenは3つのオプションを提供しています。
それぞれ、色の色相、彩度、ガンマ補正を変更します。
便宜上、GUIフロントエンドのDoxywizardには、これらのオプションの値を変更した場合の出力をリアルタイムで確認できるコントロールがあります。
デフォルトでは、Doxygenはページ全体にわたるタイトル領域を表示し、その下に各HTMLページの左側にナビゲーションツリーをサイドバーとして配置します。
これはDoxyfileの以下の設定に対応します。
YESYESNO
サイドバーをページ全体の高さに広げるには、次のようにします。
YESYESYES
ナビゲーションツリーを、各HTMLページの上部にあるタブに置き換えることもできます。これは以下の設定に対応します。
NONO
または、両方のナビゲーション形式を使用することもできます。
NOYESNO
これはサイドバーが全高にわたる場合でも機能します。
NOYESYES
外部インデックスをすでに使用している場合(つまり、GENERATE_HTMLHELP、GENERATE_ECLIPSEHELP、GENERATE_QHP、またはGENERATE_DOCSETのいずれかのオプションを有効にしている場合)、次のようにすべてのインデックスを無効にすることもできます。
YESNO
HTML出力をよりインタラクティブにするために、Doxygenはデフォルトで無効になっているいくつかのオプションを提供しています。
svgに設定すると、DoxygenはユーザーがズームやパンできるSVG画像を生成します(これは画像のサイズが特定のサイズを超えた場合にのみ発生します)。HTML出力のフォントや色、マージン、その他の見た目を詳細に調整するには、異なるカスケーディングスタイルシートを作成できます。また、Doxygenに各HTMLページにカスタムヘッダーとフッターを使用させることもできます。例えば、出力をウェブサイトの残りの部分で使用されているスタイルに合わせる場合などです。
これを行うには、まずDoxygenを次のように実行します。
doxygen -w html header.html footer.html customdoxygen.css
これにより、3つのファイルが作成されます。
これらのファイルを編集し、設定ファイルから参照する必要があります。
header.htmlfooter.htmlmy_customdoxygen.cssカスタムヘッダー内で使用できるメタコマンドの詳細については、HTML_HEADERタグのドキュメントを参照してください。
場合によっては、出力の構造を変更したいことがあります。そのような場合、別のスタイルシートやカスタムヘッダー、フッターは役に立ちません。
Doxygenが提供する解決策はレイアウトファイルです。これを変更することで、Doxygenが表示する情報、その順序、そしてある程度の表示方法を制御できます。レイアウトファイルはXMLファイルです。
デフォルトのレイアウトは、以下のコマンドを使用してDoxygenによって生成できます。
doxygen -l
オプションでレイアウトファイル名を指定できます。省略された場合はDoxygenLayout.xmlが使用されます。
次のステップは、設定ファイルでレイアウトファイルに言及することです(LAYOUT_FILEも参照)。
LAYOUT_FILE = DoxygenLayout.xml
レイアウトを変更するには、レイアウトファイルを編集するだけです。
ファイルのトップレベル構造は次のようになります。
<doxygenlayout version="1.0">
<navindex>
...
</navindex>
<class>
...
</class>
<namespace>
...
</namespace>
<concept>
...
</concept>
<file>
...
</file>
<group>
...
</group>
<directory>
...
</directory>
</doxygenlayout>
XMLファイルのルート要素はdoxygenlayoutで、versionという名前の属性を持ちます。これは将来、下位互換性のない変更に対応するために使用されます。
navindex要素によって識別される最初のセクションは、各HTMLページの上部に表示されるナビゲーションタブのレイアウトを表します。GENERATE_TREEVIEWが有効な場合、同時にナビゲーションツリー内の項目も制御します。各タブは、XMLファイルのtab要素で表されます。
visible属性をnoに設定することで、タブを非表示にできます。また、title属性の値として指定することで、タブのデフォルトのタイトルを上書きすることもできます。タイトルフィールドが空の文字列(デフォルト)の場合、Doxygenは適切な言語固有のタイトルを埋め込みます。
XMLファイルのnavindex要素内でタブ要素を移動することでタブの順序を変更したり、ツリー構造を変更したりすることもできます。ただし、type属性の値は変更しないでください。サポートされているのは固定された種類の型のみで、それぞれが特定のインデックスへのリンクを表します。
「user」という名前の型を使用してカスタムタブを追加することもできます。以下は、www.google.comを指す「Google」というタイトルのタブを追加する方法の例です。
<navindex>
...
<tab type="user" url="http://www.google.com" title="Google"/>
...
</navindex>
URLフィールドは相対URLでも構いません。URLが@refで始まる場合、リンクはクラス、関数、グループ、関連ページなどの文書化されたエンティティを指します。@pageを使用してmypageというラベルでページを定義したとすると、このページへの「My Page」というラベルのタブは次のようになります。
<navindex>
...
<tab type="user" url="@ref mypage" title="My Page"/>
...
</navindex>
「usergroup」という型のタブを使用して、タブをカスタムグループにまとめることもできます。以下の例では、上記のタブを「My Group」というタイトルのユーザー定義グループに入れています。
<navindex>
...
<tab type="usergroup" title="My Group">
<tab type="user" url="http://www.google.com" title="Google"/>
<tab type="user" url="@ref mypage" title="My Page"/>
</tab>
...
</navindex>
グループは階層を形成するためにネストできます。
デフォルトでは、ナビゲーションツリーのユーザーグループエントリは、グループの内容を含むランディングページへのリンクです。url属性を使用して、<tab>要素と同様に別のページにリンクしたり、url="[none]"を使用してリンクを禁止したりできます。つまり、
<tab type="usergroup" title="Group without link" url="[none]"> ... </tab>
navindexの後の要素は、Doxygenによって生成される様々なページのレイアウトを表します。
class要素は、ドキュメント化されたクラス、構造体、共用体、インターフェースに対して生成されるすべてのページのレイアウトを表します。namespace要素は、ドキュメント化された名前空間(およびJavaパッケージ)に対して生成されるすべてのページのレイアウトを表します。concept要素は、ドキュメント化されたコンセプトに対して生成されるすべてのページのレイアウトを表します。module要素は、ドキュメント化されたC++モジュールに対して生成されるすべてのページのレイアウトを表します。file要素は、ドキュメント化されたファイルに対して生成されるすべてのページのレイアウトを表します。group要素は、ドキュメント化されたグループ(またはトピック)に対して生成されるすべてのページのレイアウトを表します。directory要素は、ドキュメント化されたディレクトリに対して生成されるすべてのページのレイアウトを表します。上記のページ要素内の各XML要素は、特定の情報の一部を表します。一部のピースは各タイプのページに表示できますが、他のピースは特定のタイプのページに固有です。Doxygenは、XMLファイルに表示される順序でピースをリストします。
各ページで以下の一般的な要素が可能です。
briefdescription detaileddescription directoryページを除く各ページで以下の汎用要素が可能です。
authorsection conceptページを除く各ページで以下の汎用要素が可能です。
memberdecl conceptおよびmoduleページを除く各ページで以下の汎用要素が可能です。
memberdef memberdecl要素と同様に、この要素にもいくつかの可能な子要素があります。classページには以下の固有の要素があります。
includes inheritancegraph collaborationgraph allmemberslink usedfiles conceptページには以下の固有の要素があります。
includes definition fileページには以下の固有の要素があります。
includes includegraph includedbygraph sourcelink moduleページには、このモジュールからエクスポートされるモジュールを表す特定のexportedmodules要素があります。
groupページには、グループ間の依存関係を示すグラフを表す特定のgroupgraph要素があります。
同様に、directoryページには、ディレクトリ内のファイルの#include関係に基づいて、ディレクトリ間の依存関係を示すグラフを表す特定のdirectorygraph要素があります。
一部の要素にはvisible属性があり、この属性の値をnoに設定することで、生成された出力からそのフラグメントを非表示にすることができます。設定オプションの値を使用して可視性を決定することもできます。その場合、オプション名の前にドル記号を付けます。例:
... <includes visible="$SHOW_INCLUDE_FILES"/> ...
これは主に下位互換性のために追加されました。visible属性はDoxygenへのヒントにすぎないことに注意してください。特定のピースに関連する情報がない場合、たとえyesに設定されていても省略されます(つまり、空のセクションは生成されません)。
すべての要素にレイアウトファイルにvisible属性が表示されているわけではありませんが、この属性はとにかく使用できます(デフォルトはvisible="yes"です)。
一部の要素にはtitle属性があります。この属性は、Doxygenがそのピースのヘッダーとして使用するタイトルをカスタマイズするために使用できます。
Doxygenバージョン1.13.1以降およびレイアウトバージョン2.0以降、Doxygenはユーザー定義のレイアウトファイルで欠落している要素にデフォルト値を挿入することに注意してください。これにより、新しい要素を導入しても、ユーザー定義のレイアウトファイルを更新してそれらを表示する必要がなくなります。古いDoxygenまたはレイアウトバージョンでは、欠落している要素は非表示として扱われます。
上記の2つの方法でも十分な柔軟性が得られない場合、Doxygenによって生成されたXML出力をベースとして、好きな出力を生成することもできます。これを行うには、GENERATE_XMLをYESに設定します。
XML出力は、Doxygenによって抽出されたすべての項目を詳細な他のXMLファイルへの参照とともにリストするindex.xmlという名前のインデックスファイルで構成されます。インデックスの構造は、スキーマファイルindex.xsdで記述されています。他のすべてのXMLファイルは、compound.xsdという名前のスキーマファイルで記述されています。大きなXMLファイルを1つにしたい場合は、XSLTファイルcombine.xsltを使用してインデックスと他のファイルを結合できます。
ファイルを解析するには任意のXMLパーサーを使用できます。または、Doxygenのソース配布のaddon/doxmlparserディレクトリにあるものを使用することもできます。パーサーのインターフェースについては、addon/doxmlparser/doxmlparser/index.pyとaddon/doxmlparser/doxmlparser/compound.pyを参照してください(これはgeneratedDSによって生成され、templates/xmlにあるXMLスキーマファイルindex.xsdとcompound.xsdに従っています)。例については、addon/doxmlparser/examplesを参照してください。
doxmlparserを使用する利点は、インデックスファイルのみをメモリに読み込み、その後、インデックスを介して暗黙的に読み込むXMLファイルのみを読み込むことができることです。その結果、すべてのXMLファイルを1つの大きなDOMツリーとして読み込むとメモリに収まらないような非常に大規模なプロジェクトでも機能します。
Doxygen XML出力をPythonから使用して、Sphinxドキュメントジェネレーターと連携させる例については、Breatheプロジェクトを参照してください。