五郎の入り口に戻る日付:1998/2/5目次に戻るDocBrowerさてなんとなくではあるが、とりあえず「練習」のリンク集はそれなりに完成した。ここでようやく本題である「Javaで作った文書閲覧ソフト」のほうにとりかかろうかと思うのだが。リンク集を作ってJavaでなにができるかはなんとなくわかった。やっかいなHTMLを読み込んで、解析する方法も(これは結構自信がないが)とりあえずできた。閲覧の対象になる文章のほうも結構完成してきて、何をどのように閲覧すればよいかなんとなくわかってきた。従ってなんとなく概念設計はできたようなものである。次にいくつかキーとなる部分をざっとあたってみる必要がある。するといくつか思いうかぶ要素がある。アプレットにするか、それともアプリケーションにするか?アプレットにした方が実行は楽だろう。閲覧の度に読み込むのでは遅くてしょうがないかもしれない(実際どの程度のプログラムになるか検討がつかない)おまけにものの本によれば、アプレットでは、新しいウィンドウを開く際に、ブラウザ側の制限が多きいかもしれない。一つのウィンドウだけで自由な閲覧を行うのは難しいかもしれない。アプリケーションにすればそれらの問題は解決する。環境でJavaアプリケーションを実行する環境がそんなに整っているのだろうか?それを考えれば当面アプレットで考えるべきだろう。行間指定ができ、リンクをもたせられるるテキストエリアの作成これが難関である。質問一覧にも書いたことであるが、なんといってもつまった文字を読むのは疲れる。いまのところHTMLで行間を指定する方法はないようだ。なるとなんとかそういうテキストエリアを作成する必要がある。このテキストからはリンクをもたせることができなくてはならない。ないとリンクのスパゲッティとなっている私の文書を読むことは難しいからだ。文章が自由に行間を指定して閲覧でき、かつリンクが存在している部分にカーソルを持っていくか、あるいはクリックするとリンク先が参照できる、そういったテキストエリアがほしい。上記の問題が解決すれば、先は長いがなんとか形になりそうな気がする。2番目の問題は解決がややこしそうだ。インターネットをあさってみたが、どうも該当するソフトウェアは見つからない。いちから自分で作るとなると結構なお仕事となりそうだ。腰を据えて探してみるか。それからの進行状況は。まことにのろのろしている。ある日私の頭に啓示のような考えが浮かんだ。TextAreaはなにが難しいといって、文字の入力ができることが難しいに違いない。今回私が作ろうとしているのは閲覧ソフトだから、難しいところを避けて通れる。なんとかなるかもしれない。それからCanvasにdrawStringで文字を表示する、というシンプルな構成で進みだいした。なんとか表示はフォントのサイズと行間を指定して行えるようになった。(予想したこととはいいながら)いろいろとややこしい文章をきちんと行をおりかえし、かつページを区切って表示するのはとても面倒な仕事であることがわかった。表示だけでこんなに難しいんだから、編集とかを含めたらどれほど大変なのだろう。(これまたあたりまえのことだが)エディタを作る人に尊敬の念をささげた。プロフェッショナルならともかく、なかにはフリーウェアやシェアウェアでエディタを作る人まで結構たくさんこの世の中には存在するのである。環境による結果の違いに私は悩まされることになった。表示する行がちゃんとおさまるか?という判定にFontMetrics.fontWidthという関数を使っている。ところが1バイト文字と2バイト文字が混ざっていると「時々」fontWidthはまともな値を返さないのである。これが「時々」というところがみそで、まともな値を返すこともあるからややこしい。上記のバグはMRJ2.0の場合である。ExplorerのMicrosoftのJavaの環境でトライしてみた。今度は見事に行の折り返しが表示される。今度はなぜか行末に妙なキャラクターが表示される、という症状に悩まされることになる。不思議なことにこのキャラクターがどこからきているのかわからない。"teikade"という文字列を、あれこれ操作したあとでdrawStringで表示しようとすると、teikade>>(>>のところは変なキャラクター)が表示される。ところがそのStringと"teikade"をequals()で比較すると「全く同じだ」という答えを返してくるのである。そこで私はまたもや「こそくな」解決策をとることになった。しょうがないから例のキャラクターが表示されるいちをCanvasと同じ色で塗りつぶすことにしたのである。これに関連していくつかのバグも発見できたが。これでは対応できないケースもあることがわかった。