title: Browser author: Kazuhiro Yoshida mailto: moriq.kazuhiro@nifty.ne.jp %href:browser.pi% is Pi source.(ShiftJIS) 1.WWW Browser を作る 1.1.World Wide Web WWW は情報伝達の仕組みであると同時に,ブラウザのご先祖さまにあたるソフトウェアでもあった。今のブラウザと異なるのは, WWW はいつでもリンクを埋め込めるエディタでもあったということだ。私はこの意味での WWW を Ruby/Xlib を用いて作ってみようと思う。 1.1.HTML ブラウザを作るためには HTML を解析できないといけない。私は学者ではないので規格にはあまりこだわらずにいく。とは言っても,元来 HTML は簡単に書けるものなのである。解析も容易にできる。タグとそれに囲まれるテキストに分けることができれば,あとはテキストにタグ情報を付加すればよい。 1.1.Struct 文書を解析できたとしよう。この情報を使ってウィンドウに描画していくわけだが,全情報を一画面に収めることができないことを考えておこう。ここで問題になるのは * 解析した情報をどのように保存しておくのか。 * 表示範囲に相当する情報をどのように集めるのか。 ということである。スクロールするごとに初めから解析をやり直すことは効率の面から言って望ましくない。そのため,解析情報をいったん保存しなければならない。そして,表示の段階で,範囲に相当する情報を検索しなければならない。 HTML のテキストは画面幅に合わせて自由に改行される。この動的な表示をどのように実装すればいいだろうか。テキストの描画開始位置は一意に決まるものとすると,画面サイズに合わせて改行,つまり,文字列をいったん切り,次の描画位置を行の高さだけずらす。このとき,レイアウト指定の影響も受けることに注意しよう。 このように描画位置を決めるとすれば,描画位置は以前の描画に依存する。また,画面幅にも依存する。つまり,描いてみないと分からないということであり,スクロールとは別に,画面サイズの変更を考える必要がある。画面サイズの変更によって,レイアウトが変わる。文書解析情報とはべつにレイアウト情報を持つことになる。