出力のカスタマイズ

Doxygenは様々なレベルのカスタマイズ機能を提供します。細かな調整のセクションでは、出力の外観を微調整したい場合の対処法について説明しています。レイアウトのセクションでは、ページ上の特定の情報を並べ替えたり非表示にしたりする方法を示しています。XML出力のセクションでは、Doxygenが生成するXML出力に基づいて、必要な出力を生成する方法を示しています。

細かな調整

次のサブセクションでは、少ない労力で調整できるいくつかの側面について説明します。

全体的な色

HTML出力の全体的な色を変更するために、Doxygenは3つのオプションを提供します

それぞれ色の色相、彩度、ガンマ補正を変更するためのものです。

利便性のため、GUIフロントエンドのDoxywizardには、これらのオプションの値を変更した際の出力への影響をリアルタイムで確認できるコントロールがあります。

ナビゲーション

デフォルトでは、Doxygenはページの全幅にわたるタイトル領域と、各HTMLページの左側にサイドバーとしてナビゲーションツリーがあるコンテンツを表示します。

これはDoxyfileの以下の設定に対応します

サイドバーをページの全高にわたるようにするには、以下を使用します。

また、以下の設定に対応する形で、ナビゲーションツリーを各HTMLページ上部のタブに置き換えることもできます

あるいは両方の形式のナビゲーションを持つこともできます

これはサイドバーが全高にわたる場合でも機能します

既に外部インデックスを使用している場合(つまり、以下のオプションのいずれかを有効にしている場合:GENERATE_HTMLHELPGENERATE_ECLIPSEHELPGENERATE_QHP、またはGENERATE_DOCSET)、このようにすべてのインデックスを無効にすることもできます

動的コンテンツ

HTML出力をよりインタラクティブにするために、Doxygenはデフォルトで無効になっているいくつかのオプションを提供します

  • HTML_DYNAMIC_SECTIONSを有効にすると、DoxygenはデフォルトでHTML内の特定のコンテンツ(グラフなど)を非表示にし、読者が要求に応じてこれらのセクションを展開できるようにします。
  • HAVE_DOTINTERACTIVE_SVGを有効にし、同時にDOT_IMAGE_FORMATsvgに設定すると、DoxygenはユーザーがズームやパンできるSVG画像を生成するようになります(これは画像サイズが特定のサイズを超えた場合にのみ発生します)。

ヘッダー、フッター、スタイルシートの変更

HTML出力のフォントや色、マージン、その他のルック&フィールに関する詳細を調整するには、別のカスケーディングスタイルシートを作成できます。Doxygenに生成される各HTMLページにカスタムヘッダーとフッターを使用させることもでき、例えばウェブサイトの他の部分で使用されているスタイルに合わせることができます。

これを行うには、まずDoxygenを次のように実行します

doxygen -w html header.html footer.html customdoxygen.css

これにより3つのファイルが作成されます

  • header.htmlは、Doxygenが通常HTMLページの開始に使用するHTMLフラグメントです。このフラグメントがbodyタグで終わり、$wordという形式のいくつかのコマンドを含んでいることに注意してください。これらはDoxygenによって動的に置換されます。
  • footer.htmlは、Doxygenが通常HTMLページの終了に使用するHTMLフラグメントです。ここでも特殊なコマンドを使用できます。このファイルには、www.doxygen.orgへのリンクと、bodyおよびhtmlの終了タグが含まれています。
  • customdoxygen.cssはDoxygenが使用するデフォルトのカスケーディングスタイルシートです。このファイルの内容を確認し、好きな設定を別のスタイルシートに記述し、それらの追加ファイルをHTML_EXTRA_STYLESHEETを介して参照することで、一部の設定を上書きすることのみが推奨されます。

これらのファイルを編集し、設定ファイルから参照する必要があります。

注記
HTML_STYLESHEETの使用は、Doxygenの新しいバージョンへのアップグレードを困難にするため、もはや推奨されません。代わりにHTML_EXTRA_STYLESHEETを使用してください。

カスタムヘッダー内で使用できるメタコマンドの詳細については、HTML_HEADERタグのドキュメントを参照してください。

注記
スタイルシートをHTML出力ディレクトリに配置しないでください。ソースファイルとして扱ってください。Doxygenがそれをコピーします。
カスタムヘッダーで画像やその他の外部コンテンツを使用する場合、これらがHTML出力ディレクトリに配置されるように自分で確認する必要があります。例えば、Doxygenを実行してから画像を成果物にコピーするスクリプトを作成するなどです。
警告
ヘッダーとフッターの構造は、Doxygenの新しいバージョンにアップグレードすると変更される可能性があるため、カスタムヘッダーまたはフッターを使用している場合、アップグレード後に有効な出力を生成できなくなる可能性があります。

ページのレイアウトの変更

場合によっては、出力の構造を変更したいことがあるかもしれません。そのような場合、異なるスタイルシートやカスタムヘッダー、フッターは役に立ちません。

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」のタイプを使用してカスタムタブを追加することもできます。以下は、「Google」というタイトルのタブをwww.google.comにポイントするように追加する方法を示す例です

  <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>

グループは階層を形成するようにネストできます。

デフォルトでは、ナビゲーションツリーのユーザーグループエントリは、グループの内容を持つランディングページへのリンクです。<tab>要素と同様に、url属性を使用して別のページにリンクしたり、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
ページの著者セクションを表します(manページでのみ使用)。これはmanページ用の独立したセクションで、次のようなテキストが含まれます: Generated automatically by Doxygen for My Project from the source code. これは、詳細な説明の中に著者段落を生成するDoxygenコマンド\author\authorsと混同すべきではありません。

conceptページを除く各ページで可能な汎用要素は以下の通りです

memberdecl
ページ上のメンバーの概要(メンバー宣言)を表します。この要素は、メンバーリストのタイプごとに子要素を持ちます。可能な子要素はドキュメントに詳細には記載されていませんが、要素名はその要素が表すメンバーのタイプをよく示しているはずです。

conceptおよびmoduleページを除く各ページで可能な汎用要素は以下の通りです

memberdef
ページ上の詳細なメンバーリスト(メンバー定義)を表します。memberdecl要素と同様に、この要素もいくつかの可能な子要素を持ちます。

classページには以下の特定の要素があります

includes
このクラスの定義を取得するために必要なインクルードファイルを表します。
inheritancegraph
クラスの継承関係を表します。なお、CLASS_GRAPHオプションは、継承関係が基底クラスと派生クラスのリストであるか、グラフであるかを決定します。
collaborationgraph
クラスのコラボレーショングラフを表します。
allmemberslink
クラスの全メンバーリストへのリンクを表します。
usedfiles
クラスのドキュメントが抽出されたファイルのリストを表します。

conceptページには以下の特定の要素があります

includes
このクラスの定義を取得するために必要なインクルードファイルを表します。
definition
コンセプトの定義を表します

fileページには以下の特定の要素があります

includes
このファイルに含まれる#include文のリストを表します。
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またはレイアウトバージョンでは、不足している要素は非表示として扱われます。

XML出力の利用

上記2つの方法でも十分な柔軟性が得られない場合は、Doxygenが生成するXML出力を基盤として、好みの出力を生成することもできます。これを行うには、GENERATE_XMLYESに設定します。

XML出力は、Doxygenによって抽出されたすべての項目を詳細な他のXMLファイルへの参照とともにリストするindex.xmlという名前のインデックスファイルで構成されます。インデックスの構造はスキーマファイルindex.xsdによって記述されます。他のすべてのXMLファイルはcompound.xsdという名前のスキーマファイルによって記述されます。1つの大きなXMLファイルを好む場合は、XSLTファイルcombine.xsltを使用してインデックスと他のファイルを結合できます。

任意のXMLパーサーを使用してファイルを解析するか、Doxygenのソース配布のaddon/doxmlparserディレクトリにあるパーサーを使用できます(これはgeneratedDSによって生成され、templates/xmlにあるXMLスキーマファイルindex.xsdcompound.xsdに従います)。パーサーのインターフェースについてはaddon/doxmlparser/doxmlparser/index.pyaddon/doxmlparser/doxmlparser/compound.pyを参照してください。例についてはaddon/doxmlparser/examplesを参照してください。

doxmlparserを使用する利点は、インデックスファイルのみをメモリに読み込み、その後、インデックスを介して暗黙的にロードするXMLファイルのみを読み込むことができる点です。その結果、すべてのXMLファイルを1つの大きなDOMツリーとして読み込むとメモリに収まらないような非常に大規模なプロジェクトでも機能します。

PythonからDoxygen XML出力を利用してSphinxドキュメントジェネレーターと連携させる例については、Breatheプロジェクトを参照してください。

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