Presentation is loading. Please wait.

Presentation is loading. Please wait.

ドキュメントジェネレータ doclink 設計メモ

Similar presentations


Presentation on theme: "ドキュメントジェネレータ doclink 設計メモ"— Presentation transcript:

1 ドキュメントジェネレータ doclink 設計メモ
長谷川啓

2 プリプロセッサから受け取る情報 struct macro_t { }; vector<macro_t> macros;
string m_name; // マクロ名 file_t m_def; // 定義位置 vector<file_t> m_refed; // 参照位置 }; vector<macro_t> macros; マクロ定義は同一ヘッダーに書けば複数の入力ファイルで重複する その場合は参照位置のみが増大する 稀に同一のマクロ名が異なるファイルで定義されることもある

3 docgen.dll から受け取る情報(1) 構造体等 struct tag_t { };
string m_name; // タグ名 file_t m_decl; // 宣言位置 vector<pair<string, file_t> > m_refed; // 参照位置 (函数名) }; vector<tag_t> tags; マクロと異なる点 多重定義はエラー コンパイラフロントエンドによりエラーになる doclink でのこのエラーの扱いは実装におまかせ

4 docgen.dll から受け取る情報(2) Typedef 名 struct type_t { };
string m_name; // typedef 名 file_t m_def; // 定義位置 vector<file_t> m_refed; // 参照位置 }; vector<type_t> types; 構造体等と異なる点 参照位置 ファイル名と行番号のみ

5 docgen.dll から受け取る情報(3) 変数 struct var_t { }; vector<var_t> vars;
string m_name; // 変数名 file_t m_def; // 定義位置 vector<file_t> m_decls; // 宣言位置 vector<pair<string, file_t> > m_refed; // 参照位置(函数名, 変数名) }; vector<var_t> vars; マクロや構造体等と異なる点 宣言位置がある 宣言が先行し、定義が後にくることが一般的だが、定義が先のこともある。 多重定義はエラー リンカーによりエラーになるが、doclink で検出することも可能

6 docgen.dll から受け取る情報(4) 函数 struct func_t { };
string m_name; // 変数名 file_t m_def; // 定義位置 vector<file_t> m_decls; // 宣言位置 vector<pair<string, file_t> > m_refed; // 参照位置(函数名, 変数名) vector<pair<string, file_t> > m_call; // 呼び出し vector<pair<int, file_t> > m_vertices; // グラフの頂点 vector<pair<int,int> > m_edges; // グラフの辺 }; vector<func_t> funcs; 変数と異なる点 グラフ

7 定義やコメント doclink に渡されるのは名前、ファイル名、行番号のみ プログラムテキストをどのように拾うかは doclink 依存

8 ドキュメントのテキスト テキストのフォントは固定の等幅フォントを仮定する(簡単のため) テキストの占める領域 文字列 フォント
出力する文書の種類 から決定される

9 マクロ、構造体等、Typedef 名、変数、函数の流れグラフ以外
表は TeX の tabular 環境を使うと比較的簡単

10 函数の流れグラフ TeX の picture 環境でまずは実現 300 × 550 pt の領域 基本ブロックは 1 ページ当たり 6 個
基本ブロックの配置 基本ブロックの番号によってのみ決まる

11 相関図 struct tree { }; vector<tree*> result;
string m_text; // テキスト(函数名) pair<int, int> m_point; // テキストの座標 enum box_t { NONE, UNDER, DASH, FRAME } m_box; // 枠 vector<tree*> m_children; }; vector<tree*> result; calc(result); // ページに収まるように(独自の)座標を計算 for (auto& t : result) conv(t); // 例えば TeX の座標に変換 for (const auto& t : figs) draw(t); // ここでは計算結果を出力するだけにする

12 相関図(2) 座標変換の意味 いきなり出力することができない これは TeX の座標系の左上が (0,0) でも同じこと
\begin{picture}(300,550)(0,0) ^^^^^^^^ そもそもここが不明 \put(0, 550){\framebox{main}} ^^^ ここも不明 ... \end{picture} これは TeX の座標系の左上が (0,0) でも同じこと


Download ppt "ドキュメントジェネレータ doclink 設計メモ"

Similar presentations


Ads by Google