Show page source of tkhtml #100752

= Tkhtml と Visual C++ 2008 用ビルドバッチ
== はじめに
[http://tkhtml.tcl.tk/index.html Tkhtml]は、tcltk で html を表示するための拡張です。
他のライブラリ同様、Visual Studio 2008でビルドしたかったので、
ビルド用のバッチファイルを作成してみました。

== Tkhtml  のライセンス
BSDライセンスです。詳しくは配布物のソースをご参照下さい。

== 配布物
 * [http://sourceforge.jp/downloads/users/4/4758/tkhtml3-alpha-16.tar.gz Tkhtmlソース] - 2014/6/15 に配布元から取得したソースと同一のものです。(バーション 3-alpha-16)
 * [http://sourceforge.jp/downloads/users/4/4757/mk_batch.zip ビルド用バッチファイル] - Tkhtmlソースと同じ階層になるように(Tkhtmlのsrcディレクトリと同じ位置にwinディレクトリが来るように)展開し、コマンドライン引数に 「Release x86」 と追記して Visual Studio 2008 コマンドプロンプトから実行することでビルドとインストールを実施します。「Release x64」 とすることで64bitモードでもビルドできます。

== image コマンドについて
下記のように書くことで、表示しているhtmlを画像ファイルとして保存できるようになっているようです。
{{{
 html .h
 ...
 set img [.h image];
 $img write hoge.gif -format gif;
}}};
ただし、何故かWindowsでは使えないようにしてあります(Windowsで実施すると、TclTkがフリーズしてしまいます)。
ソースを確認すると、htmlimage.c の1044行目以降にあるWindowsとそれ以外での場合わけが該当する箇所のようです。
1044行目の #ifndef WIN32 を #if 1 と書き換えて再ビルドしてみたところ、Windows でも画像の保存ができましたが
この状態だと、ディスプレイに表示できるウィンドウサイズよりも内容の方が大きい場合、画像が欠けてしまうようです。
さらに htmldraw.c の3320~3321行をコメントアウトすることで、欠ける現象も回避できました。
htmlimage.c の一部
{{{
...
1039: * Side effects:
1040: *     None.
1041: *
1042: *---------------------------------------------------------------------------
1043: */
1044:#if 1 /* この行には #ifndef Win32 と書いてあったが、これを #if 1 に書き換える */
1045:#include <X11/Xutil.h>
1046:Tcl_Obj *HtmlXImageToImage(pTree, pXImage, w, h)
1047:    HtmlTree *pTree;
1048:    XImage *pXImage;
1049:    int w;
1050:    int h;
1051:{
...
}}};

htmldraw.c の一部
{{{
...
3317:    w = pTree->canvas.right;
3318:    h = pTree->canvas.bottom;
3319:    Tk_MakeWindowExist(pTree->tkwin);
3320:    /* w = Tk_Width(pTree->tkwin); // この行と
3321:       h = Tk_Height(pTree->tkwin);// この行をコメントアウト        */
3322:    assert(w >= 0 && h >= 0);
3323:    if (w>0 && h>0) {
...
}}};

これでうまく動くように見えますが、わざわざWindowsのときだけ場合分けしてあるのには
何か理由があるかもしれません。この修正を適用する場合はその点をご留意下さい。


== 参考サイト
 * http://tkhtml.tcl.tk/index.html Tkhtml配布元