w3m

おもむろに、HTMLのエンジンが欲しくなったので、「よーしここはGeckoでも使うべ」とか思ったんだけど、やっぱGeckoは大きいしなぁ…と、思って、w3mにした。HTMLのパースさえしてくれれば十分なんだよね。だったら最初にw3mの名前を思い出すべきだったんだけど、記憶から消えてた感じだった。駄目だなぁ…

#include <stdio.h>
#include "fm.h"

int
main(int argc, char **argv)
{
  Buffer *buf;
  AnchorList *al;
  int i;
  Line *l;
  Str s;

  w3m_init_rc();
  buf = loadGeneralFile( argv[1], NULL, NO_REFERER, 0, NULL );
  al = buf->href;

  for ( i=0; i<al->nanchor; i++ ) {  // リンクを表示
    puts( al->anchors[i].url );
  }

  for ( l=buf->topLine; l; l=l->next ) { // 本体を表示
    char *s = conv_to_system( l->lineBuf );
    puts( s );
  }

  return 0;
}

これで、w3m -dumpと同じようなことが出来ます。オマケでサイト内のリンクも表示。これぐらいできれば十分か。
む。思ったよりバイナリサイズ大きくなるな…。1MB近い。


パッチ
パッチ作ったらその大半がconfigureで埋まっててアレだったので、configure削除してます。パッチを当てたあとにautoconfしてください。
autoconfが2.5以上じゃないといけないことに気付かずに時間かかったのは色んな罠だ。


まず、w3m_init_rcで初期化。
で、loadGeneralFileで読み込み。必要なことは大体ここでやってくれる。で、Buffer型の物が返ってくるので、あとはそれをいじるだけ。Buffer型についてはfm.hを参照のこと。libw3m.cのCOLS、LINESを変更すれば幅、高さを変更。あとはあんまりわからない。