2011年11月10日

doxygenでjavaソースコードからドキュメント作成

Rubyにもありますが,プログラムコードにコメントを書いておいて,それをドキュメント生成ツールにかければ,わりときれいなAPI仕様書もどきが作れるというもの.


java ではjavadoc なるものがあり,これを使ったところ,あっさりきれいなHTMLファイルが作成され,クリックで該当のクラスやメンバに飛べたりするのは便利だなぁとjava 初心者の私は思ったりしました.


で,欲が出るのが人間.

これだけきれいなものをPDFファイルにして,配布用をつくりたいなぁと思いました.でも,PDFファイルにする方法がわからない.


で,グーグル先生に聞いたところ,情報はあるのですがちょっといまいち.


doclet を使えばいいらしいのだけど,日本語に対応していないとか,対応する方法も書かれているのだけど,ちょっと試した感じ,エラーを吐いて動いてくれなかったり.

そんななか,ソースコードからドキュメントを起こしてくれるdoxygen というツールの存在を知る.
このツールは,java 以外のプログラムでも使えるし,覚えておいて損はないかも.
そんな期待をしつつ,試して,結構予想外にも苦戦したけど,うまくいったのでそのメモ.


苦戦したのは,Windows環境だからかもしれない.以下の情報は,Windowsユーザ向けです.


■1.まず,doxygen のインストール.

http://www.stack.nl/~dimitri/doxygen/download.html#latestsrc

■2.Texのインストール(windows版)

参考サイト:
http://mail2.nara-edu.ac.jp/~asait/latex/tex.htm
http://w32tex.org/index-ja.html


プラグインもいれないとうまく動かないかもしれない.
自分は,2,3回インストールを繰り返したら気づいたらmake が通るようになってて苦労しました…

そして,よくわかってなくて申し訳ないのですが,make が通るようになった理由は以下の作業のおかげかも.

参考サイト:
・Windows上でDoxygenのPDF形式出力

http://orion.bluememe.jp/2011/01/windowsdoxygenpdf.html



上記サイトに従って,listings, xcolor, mediabb.sty をc:\w32tex\share\texmf-local\tex\latex以下にインストールした.

また,makeをかけると,いくつかファイルがないと怒られた.なので,Googleで調べて,以下のファイルをダウンロード・該当フォルダ(C:\w32tex\share\texmf-local\tex\latex)に置きました.


・book.cls
・TS1cmr.fd



Doxyfileファイルには,
LATEX_CMD_NAME ="platex -kanji=utf8"

を追加.



The error message is that you need to provide a definition with
\DeclareInputText or \DeclareInputMath before using this key.


Doxyfile は,utf-8 で保存しておかないと,日本語が化けます.上記エラーの原因でした.


doxygen コマンドを実行した後は,latex/Makefileの編集.

del を rm -rf に変更.

参考にしたサイト:
・揮発性のメモ
http://d.hatena.ne.jp/iww/20080511



! Package inputenc Error: Unicode char \u8:...


このエラーのでる原因が分からないので,コマンドラインで少しずつ試してみた.


% doxygen -g
% doxygen
% cd latex
% platex test.tex
% dvipdfmx test.dvi



上記の流れで,doxygen から,latex ファイルを作り,latex ファイルをPDFに変換する作業をコマンドラインで試したらうまく出力されたのでツール自体に問題はないと判断した.

これでPDFができたので,よしとしたいのだけど,やっぱりmake だけでも作りたいなぁと思う気持ちがあり,ひたすらトライ&テスト

コマンドラインでの操作は参考サイトが参考になりました.
http://d.hatena.ne.jp/elwoodblues/20090706/1246876177



G:\sample>epstopdf latex\classnetbeans__proces...hoge.eps
epstopdf ($Id: epstopdf.pl 18319 2010-05-17 1
!!! Error: Writing to gs failed, signal 127


make で色々試したが,どうしてもこれが消えない..

諦めて,epstopdf.pl のファイルの処理を眺めることにする.このファイルは以下にある.

C:\w32tex\share\texmf\scripts\tetex

修正したファイルは添付します.

epstopdf.pl
これでできるようになったー.ふぅ.

このpl ファイルの修正差分はこんな感じ.

gs コマンドを強制的にWindows版のgswin32c を使用するようにしたのと,TMPFILEの作成に失敗しているようだったので,直にWindows特有のPATHを指定しています.自分は,g:ドライブを持っているので,"g:\hoge.txt"と言った感じで.ファイル作成・ファイルハンドルをOUTPUTファイルとして渡しています.

kpsewhich のパスを変えてるけど,この理由は覚えてません…なんでだろ…


--- org/test.pl 2011-11-06 09:15:52.569555000 +0900
+++ mod/test.pl 2011-11-06 09:17:58.525488000 +0900
@@ -162,9 +162,11 @@

my $on_windows = $^O =~ /^MSWin/;
my $on_windows_or_cygwin = $on_windows || $^O eq "cygwin";
+my $on_windows_or_cygwin = "cygwin";

### ghostscript command name
my $GS = $on_windows ? "gswin32c" : "gs";
+my $GS = "gswin32c";

### restricted mode
my $restricted = 0;
@@ -261,8 +263,11 @@
use File::Basename;
my $mydirname = dirname $0;
# $mydirname is the location of the Perl script
- $kpsewhich = "$mydirname/../../../bin/win32/$kpsewhich";
- $GS = "$mydirname/../../../tlpkg/tlgs/bin/$GS";
+ # for W32TeX
+ $kpsewhich = "$mydirname/../../../../bin/$kpsewhich";
+ # $kpsewhich = "$mydirname/../../../bin/win32/$kpsewhich";
+ # disable the next line in W32TeX
+ # $GS = "$mydirname/../../../tlpkg/tlgs/bin/$GS";
}
debug "kpsewhich command: $kpsewhich";

@@ -350,8 +355,6 @@
push @GS, "-r$::opt_res" if $::opt_res;
$resmsg= $::opt_res ? $::opt_res : "[use gs default]";
push @GS, "-dAutoRotatePages=/$::opt_autorotate" if $::opt_autorotate;
-$rotmsg = $::opt_autorotate ? $::opt_autorotate : "[use gs default]";
-# \label{val_autorotate}
error "Invalid value for autorotate: '$::opt_autorotate' "
. "(use 'All', 'None' or 'PageByPage')."
if ($::opt_autorotate and
@@ -397,15 +400,25 @@
### open output file
my $outname; # used in error message at end
my $tmp_filename; # temporary file for windows
+my $tmp_filename = "g:\\hoge.txt"; # temporary file for windows
my $OUT; # filehandle for output (GS pipe or temporary file)
+#my $dir;
+#use POSIX qw(tmpnam);
+#use File::Temp qw/ tempfile tempdir /;
use File::Temp 'tempfile';
+
+my $FH;
+open ($FH, ">g:\\hoge.txt");
+
+
if ($::opt_gs) {
if (! $on_windows_or_cygwin) { # list piped open works
push @GS, qw(- -c quit);
debug "Ghostscript pipe:", join(' ', @GS);
open($OUT, '|-', @GS) or error "Cannot open Ghostscript for piped input";
} else { # use a temporary file on Windows/Cygwin.
- ($OUT, $tmp_filename) = tempfile(UNLINK => 1);
+ #($OUT, $tmp_filename) = tempfile(UNLINK => 1);
+ $OUT = $FH;
debug "Using temporary file '$tmp_filename'";
}
$outname = $GS;


posted by maplewine at 22:39| Comment(0) | TrackBack(0) | Computer | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック