diff options
Diffstat (limited to 'doc-jp/STORY.html')
-rw-r--r-- | doc-jp/STORY.html | 295 |
1 files changed, 149 insertions, 146 deletions
diff --git a/doc-jp/STORY.html b/doc-jp/STORY.html index c261b47..7f78106 100644 --- a/doc-jp/STORY.html +++ b/doc-jp/STORY.html @@ -1,190 +1,193 @@ <html> <head> -<title>w3mの開発について</title> +<title>w3m冴ゃ</title> </head> <body> -<h1>w3mの開発について</h1> +<h1>w3m冴ゃ</h1> <div align=right> 1999/2/18<br> -1999/3/8改訂<br> -伊藤 彰則<br> +1999/3/8壕<br> +篌 綵医<br> aito@fw.ipsj.or.jp </div> -<h2>はじめに</h2> -w3mは,WWWに対応したページャ/ブラウザで,テキストベースで動く. -w3mに最も近いアプリケーションとして,有名なテキストベースブラウザ -<a href="http://www.lynx.browser.org/">Lynx</a>がある.しかし,w3mには -Lynxにないいくつかの特徴がある.例えば, +<h2></h2> +w3m鐚WWW絲上若吾/吟э鴻若鴻у鐚 +w3m菴≪宴若激с潟鐚鴻若鴻 +<a href="http://www.lynx.browser.org/">Lynx</a>鐚鐚w3m +Lynxゃ劫彰鐚箴逸 <UL> -<LI>tableがレンダリングできる. -<LI>frameがレンダリングできる(frameをtableに変換して表示するだけ). -<LI>標準入力を読んで表示することができる. -(最近のLynx では,こんな風にして標準入力から文書を読むことができる -そうです: +<LI>table潟潟違с鐚 +<LI>frame潟潟違с(frametable紊茵腓冴)鐚 +<LI>罔羣ュ茯ц;腓冴с鐚 +(菴Lynx с鐚蘂罔羣ュ吾茯с +с鐚 <pre> lynx /dev/fd/0 < file </pre> -うん,Linuxでは確かに動くようです.) -<LI>軽くて小さい.stripした後のw3mのバイナリサイズは,Sparcの場合で -260KByte弱である(version beta-990217現在). -ちなみにLynxのバイナリは 1.8MB以上ある. +鐚Linuxс腆冴с鐚) +<LI>荵純絨鐚strip緇w3mゃ泣ゃ冴鐚Sparc翫 +260KByte綣宴с(version beta-990217憜)鐚 +<帥Lynxゃ 1.8MB篁ヤ鐚 </UL> -などだ.もちろん,Lynx は優れたブラウザで,w3mにない多くの機能を -持っている.Lynxにあってw3mにない機能は,例えば +鐚<鐚Lynx 吟эw3m紊罘純 +c鐚Lynxcw3m罘純鐚箴 <UL> -<LI>Cookie対応. -<LI>豊富なオプション設定. -<LI>多国語対応. +<LI>Cookie絲上鐚 +<LI>莟絲激с活┃絎鐚 +<LI>紊処絲上鐚 </UL> -などなど.Lynx には豊富なドキュメントもあり,一方w3mにはほとんどまともな -ドキュメントがない.ドキュメントは今後の課題だ. +鐚Lynx 莟絲ャ<潟鐚筝w3m祉障 +ャ<潟鐚ャ<潟篁緇茯臥鐚 <P> -というわけで,w3mは既存のブラウザ(Netscapeはもちろん,Lynxも)を代替 -するものでは<strong>ない</strong>.それではw3mは何のためにあるのか? -それは,日常的に「ちょっと」 web を使うためだ.専用線で接続された環境で, -「ちょっとwebを見に行きたい」とき,Netscapeを立ちあげるのはイライラする. -Lynxも立ちあがるのにちょっと間がある. -その点,w3mは一瞬で立ちあがり,マシンにほとんど負担をかけない. -そこで情報を見て,もっと詳細に見たいときに,はじめて他のブラウザを使う -のだ.もっとも私の場合,ほとんどはw3mだけで十分なのだが. +эw3m√(Netscape<鐚Lynx)篁f +с<strong></strong>鐚сw3m篏鐚 +鐚ュ幻<c web 篏帥鐚絨膩ф・膓医э +<cweb荀茵鐚Netscape腴<ゃゃ鐚 +Lynx腴<<c鐚 +刻w3m筝х<鐚激潟祉莢鐚 +ф宴荀鐚c荅括完荀鐚篁吟篏帥 +鐚c腱翫鐚祉w3mу鐚 -<h2>w3mの誕生</h2> +<h2>w3m茯</h2> <P> -w3m の前身は,fm -というページャ(moreやlessの親戚)だった.fmが書かれたのは1991年以前 -(記録していなかったので正確な日付はわからない)で,当時まだWWWは -一般的ではなかった(存在しなかったかも).その当時「ブラウザ」といえば,lessなどの -ファイルを見るツールのことを指していた. +w3m 荳鐚fm +若吾(moreless荀)c鐚fm吾1991綛岩札 +(荐蚊cфg∈ヤ)э綵障WWW +筝сc(絖c)鐚綵吟逸less +<ゃ荀若鐚 <P> -fm は,当時私が書いていた -研究用のプログラムをデバッグするために書いたものだ.プログラムの状態 -をトレースするため,プログラムの内部状態を延々とファイルにダンプし, -それを見ながらデバッグをしていた.ある時点での内部状態を1行にプリント -していたため,そのファイルは1行が数百文字あった.それをmoreやlessで -見ると,行が折り返されるため,何が何だかわからなくなってしまうのだった. -そこで私は,行を折り返さないページャであるfmを書いた.物理的な1行は -画面の上でも1行で,画面からはみ出した部分を見るには,画面全体をずらす -という設計にした.当時私は80x24の画面を使っていたので,fm はデバッグ -にとても役立った. +fm 鐚綵腱吾 +腥句違違吾鐚違倶 +若鴻鐚違倶綮吟<ゃ潟鐚 +荀違鐚鴻с倶1茵潟 +鐚<ゃ1茵亥丈絖c鐚moreless +荀鐚茵菴鐚篏篏c障c鐚 +х鐚茵菴若吾cсfm吾鐚1茵 +脂≪筝с1茵э脂≪水冴荀鐚脂√篏 +荐荐鐚綵腱80x24脂≪篏帥cэfm +綵合c鐚 <P> -そのうち,私もWWWの存在を知って使いはじめた.当時使っていたブラウザは, -XMosaic と Chimera だった.特に Chimera は軽いので愛用していた. -興味があったので HTML と HTTP の勉強をしてみたが,案外簡単なので, -これなら自分でもブラウザが書けるのではないかと思った.当時のHTTPは -GOPHERプロトコルに毛が生えた程度で,非常に簡単なものだった.また, -HTML は 2.0 で,行の折り返しと箇条書きがほとんど全てだった. -そこで,fm にちょっと手を入れて,WWWブラウザを作ってみた.これがw3mだった. -ちなみに,w3m は WWW-wo-Miru (日本語だ)の略で,fm (File-wo-Miru)に -倣った.最初に w3m を書いたのは,1995年初頭だったと思う. +¥腱WWW絖ャc篏帥鐚綵篏帥c吟鐚 +XMosaic Chimera c鐚鴻 Chimera 荵純ф鐚 +潟c HTML HTTP 綣激帥鐚罅紊膂≦э +с吟吾сc鐚綵HTTP +GOPHER潟罸腮綺э絽吾膂≦c鐚障鐚 +HTML 2.0 э茵菴膊≧吾祉c鐚 +эfm <cャ鐚WWW吟篏c帥鐚w3mc鐚 +<帥鐚w3m WWW-wo-Miru (ユ茯)ャэfm (File-wo-Miru) +cc鐚 w3m 吾鐚1995綛翫c鐚 -<h2>w3mの没落と再生</h2> +<h2>w3m羃∴純</h2> <p> -それ以来,ずっと私は w3m を「ページャ」として使っていた.ファイルや -電子メール,マニュアルなどを読むときに,lessの代わりにしていたのだ. -w3mでwebを見ることも時々あったが,その後 w3m で正常に見られないページが -多くなった(その多くはtableを使っていた)こともあって,webブラウザと -してはほとんど使わなくなっていた.一度 table のレンダリングを検討 -したことがあったが,難しいので放ってあった. +篁ユワc腱 w3m 若吾c篏帥c鐚<ゃ +糸<若鐚ャ≪茯鐚less篁c鐚 +w3mweb荀c鐚緇 w3m фe幻荀若吾 +紊c(紊table篏帥c)c鐚web吟 +祉篏帥c鐚筝綺 table 潟潟違罎荐 +c鐚cф障cc鐚 <P> -もう一度 w3m に手を入れる気になったのは,1998年のことだ.動機は2つあった. -その当時,私は客員研究員としてボストン大学に滞在しており,多少時間に余裕があった -ことが一つ.もう一つは,研究日誌を HTML で書いていて,結果をどうしても表に -したくなったためだ.それまでは表を <pre>..</pre>で書いていたのだが, -plain textで表を作るのがわずらわしくて仕方なかった.とうとう我慢できなくなって -<table>タグを使ったが,そうすると今度は Netscape を使わないと日誌が -見られなくなってしまった.そこで,w3m で table の -レンダリングができるようにしようと試みた. +筝綺 w3m ャ羂c鐚1998綛眼鐚罘2ゃc鐚 +綵鐚腱絎√∞腥九<鴻喝ぇ絖羯鐚紊絨篏茖c +筝わ筝ゃ鐚腥倶ヨ HTML ф吾鐚腟茵 +c鐚障с茵 <pre>..</pre>ф吾鐚 +plain textц;篏篁鴻c鐚≪сc +<table>帥違篏帥c鐚篁綺 Netscape 篏帥ヨ +荀c障c鐚эw3m table +潟潟違с荅帥鐚 <P> -私としては,それほど複雑でない表を見ることができれば十分だった.ところが, -半端にtableに対応した結果,画面のレイアウトにtableを使っているページの -表示がぐちゃぐちゃになってしまった.結局,「表が見られて」「その他のページ -もそこそこに見られる」ようにするためには,tableの表示が完璧に近くなければ -ならないのだった.茨の道だ. +腱鐚祉茲с茵荀с医c鐚鐚 +腴table絲上腟鐚脂≪ゃ≪table篏帥c若吾 +茵腓冴<<c障c鐚腟絮鐚茵荀篁若 +荀鐚table茵腓冴絎с菴 +c鐚鐚 <P> -結局,結構時間がかかったが,何とか -実用になるものができたと思う.table の実装に気をよくして,次に form を実装 -した.これで,w3mはほぼ実用になるブラウザとして生まれ変わったのだ. +腟絮鐚腟罕c鐚篏 +絎с鐚table 絎茖羂鐚罨< form 絎茖 +鐚эw3m祉弱吟障紊c鐚 -<h2>w3mでのtableのレンダリングアルゴリズム</h2> +<h2>w3mсtable潟潟違≪眼冴</h2> -HTMLのtableのレンダリングは結構難しい.LaTeX の tabular のように, -「表の各列の幅を指定するか,さもなければ必要な最大の幅を取る」 -というのなら話は簡単なのだが,HTMLのtableは「画面に適当に収まるように」 -列の幅を設定して,表の内容を適当に折りかえさなければならない. -幅の決定をいいかげんにすると,非常に表が見づらくなってしまう. -また,tableは入れ子にできるので,それが話を一層ややこしくしている. -そこで,w3mでは次のようなアルゴリズムで幅を決定している. +HTMLtable潟潟違腟罕c鐚LaTeX tabular 鐚 +茵綛絎鐚医荀紊с綛 +荅宴膂≦鐚HTMLtable脂≪綵障 +綛荐絎鐚茵絎鴻綵違鐚 +綛羆阪鐚絽吾茵荀ャc障鐚 +障鐚tableャ絖сэ荅宴筝絮ゃ鐚 +эw3mс罨<≪眼冴у羆阪鐚 <OL> -<LI>まず,各列の内容の最大幅と最小幅を求める.最大幅というのは, -もしいくらでも広い幅が取れたとしたら,最大何桁になるかというもの -だ.一般的には,<BR>や<P>で区切られた段落の長さになる. -最小幅は,それより列の幅が狭いと内容が詰められないという限界の幅 -である.表の内容が日本語だけの場合には最小幅は常に2であり, -internationalization という単語が含まれていれば最小幅は20 -である.また,表の中に<pre>..</pre>があった場合, -その一行の長さの最大値が最小幅になる. -<LI>もし,WIDTH属性で列の幅が指定してあれば,列の幅をその値で固定 -する.ただし,その幅が最小幅よりも小さければ,列の幅を最小幅で固定する. -<LI>列の最大幅(または固定幅)を合計して,画面の幅よりも広いかどうかを調べる. -もし合計が画面に収まるなら,その値を各列の幅として使う. -<LI>もし合計が画面に収まらなければ,次のようにして幅を決定する. +<LI>障鐚絎鴻紊у絨鎶羆鐚紊у鐚 +с綺綛鐚紊т罅 +鐚筝鐚<BR><P>у阪罧笈純激鐚 +絨鎶鐚綛絎鴻荅違綛 +с鐚茵絎鴻ユ茯翫絨鎶絽吾2с鐚 +internationalization 茯障井絨鎶20 +с鐚障鐚茵筝<pre>..</pre>c翫鐚 +筝茵激紊уゃ絨鎶鐚 +<LI>鐚WIDTH絮су綛絎逸綛ゃу阪 +鐚鐚綛絨鎶絨逸綛絨鎶у阪鐚 +<LI>紊у(障阪綛)荐鐚脂≪綛綺茯帥鴻鐚 +荐脂≪障鐚ゃ綛篏帥鐚 +<LI>荐脂≪障逸罨<綛羆阪鐚 <OL> -<LI>画面の幅から,幅が固定された列の幅の合計を引く.これを W とする. -<LI>幅が固定されていない列に対して,各列の最大幅の対数に比例して W を配分する. -<LI>もし配分された幅が最小幅よりも小さければ,その列の幅を最小幅で固定し, -幅の配分をやり直す. +<LI>脂≪綛鐚綛阪綛荐綣鐚 W 鐚 +<LI>綛阪絲障鐚紊у絲丈違罸箴 W 鐚 +<LI>綛絨鎶絨逸綛絨鎶у阪鐚 +綛眼鐚 </OL> </OL> -幅の配分を最大幅の対数に比例させているが,これでいいのかどうか検討を要する. -ただし,最大幅そのものに比例させると悲惨なことになる.table を画面レイアウト -に使っていた場合,ある列に長い文章があると,その列が画面の幅のほとんどを使って -しまうからだ.対数じゃなくて n 乗根でもいいかもしれない. +綛紊у絲丈違罸箴鐚с罎荐荀鐚 +鐚紊у罸箴我鐚table 脂≪ゃ≪ +篏帥c翫鐚激腴鐚脂≪綛祉篏帥c +障鐚絲丈違 n 箙鴻с鐚 <P> -上記のアルゴリズムでは,画面の幅が既知であることが前提になっている.ところが, -これでは困る場合がある.どういう場合かというと,表が入れ子になっている場合だ. -外側の表の列幅がわからないと内側の表がレンダリングできないが,内側の表を -レンダリングしてみないと外側の表の幅が決定できないという矛盾に陥る.WIDTH属性 -が指定してあれば問題はないのだが,そうでない場合には,結局 -「内側の表の幅は,外側の表の幅の0.8倍」で決め打ちしてしまうことにした. -ほとんどの場合はこれで問題ないが,ある表の中に表を入れ子にして2つ並べると, -外側の表が必ず画面をはみだしてしまうようになった.もし厳密にこれを画面に収め -ようとすると,一旦レンダリングして全体の幅を調べたあと,幅を設定しなおして -もう一度レンダリングするという過程を収束するまで繰り返さなければならない. -Netscapeは,多分これをやっているのだろう. +筝荐≪眼冴с鐚脂≪綛∝ャсc鐚鐚 +с違翫鐚翫鐚茵ャ絖c翫鐚 +紊眼茵綛眼茵潟潟違с鐚眼茵 +潟潟違帥紊眼茵綛羆阪с障ャ鐚WIDTH絮 +絎医馹鐚с翫鐚腟絮 +眼茵綛鐚紊眼茵綛0.8ф浦<障鐚 +祉翫у馹鐚茵筝茵ャ絖2や研鴻鐚 +紊眼茵綽脂≪帥障c鐚ウ絲脂≪ +鐚筝潟潟違篏綛茯帥鴻鐚綛荐絎 +筝綺潟潟違腮障х弘菴違鐚 +Netscape鐚紊c鐚 -<h2>利用したライブラリ</h2> +<h2>ゃ</h2> -w3m は, +w3m 鐚 <a href="http://www.hpl.hp.com/personal/Hans_Boehm/gc/">Boehm GC</a> -というライブラリを利用している.これは私が書いたものではないが, -コンパイル時の便宜を考えて配布パッケージに含めている. -なお,libwww は使っていない. +ゃ鐚腱吾с鐚 +潟潟ゃ箴水絽宴若吾鐚 <P> -Boehm GCは,Cから使えるガベージコレクタだ.table を実装したあたりにこれを -使いはじめたのだが,非常に快適だった.GCなしでは,w3mにtableやformを実装 -する根性が私にあったかどうか疑わしい.Boehm GCの利用については,「 +# Boehm GC w3m-0.4.2 篁ラ宴若吾障障 +<P> +鐚libwww 篏帥c鐚 +<P> +Boehm GC鐚C篏帥若吾潟帥鐚table 絎茖 +篏帥鐚絽吾綽c鐚GCс鐚w3mtableform絎茖 +号с腱c鐚Boehm GCゃ鐚 <a href="http://homepage2.nifty.com/aito/gc/gc.html"> -Boehm GCを使おう</a>」という文章を書いたので,それも見ていただけると良い -と思う. +Boehm GC篏帥</a>腴吾э荀 +鐚 <P> -beta-990304より前のバージョンでは, -<a href="http://home.cern.ch/~orel/libftp/libftp/libftp.html">LIBFTP</a>と -いうライブラリを使っていた. -libftp を使った理由は,FTPプロトコルが HTTP に比べて面倒だったためだ. -しかし,ライセンスの問題がありそうだということなので,同等の関数(のサブセット) -を自前で書いてしまった. +beta-990304若吾с潟с鐚 +<a href="http://home.cern.ch/~orel/libftp/libftp/libftp.html">LIBFTP</a> +ゃ篏帥c鐚 +libftp 篏帥c宴鐚FTP潟 HTTP 罸鴻√c鐚 +鐚ゃ祉潟鴻馹э膈∽(泣祉) +ф吾障c鐚 <P> -ちなみに,w3mはUNIXの正規表現ライブラリと curses ライブラリを使っていない. -どちらも自前の関数群だ.これらを自前で用意した理由は,fmを書いた当時, -日本語の通るまともでフリーな正規表現とcursesのライブラリがなかったためだ. -現在ではどちらも存在するし,他のライブラリを使った方が速そうなのだが, -面倒なので現在までこの実装を引きずっている. +<帥鐚w3mUNIX罩h頫憗ゃ curses ゃ篏帥c鐚 +<∽亥召鐚х宴鐚fm吾綵鐚 +ユ茯障с若罩h頫憗cursesゃc鐚 +憜с<絖鐚篁ゃ篏帥c鴻鐚 +√х憜障с絎茖綣c鐚 -<h2>今後の予定</h2> +<h2>篁緇篋絎</h2> -...ない.w3mは軽快さが売りなので,あまり機能を満載してしまうとw3m独自の -良さが失われるからだ.とはいっても,まだバグが多いので,それらのfixは -していきたいと思っている. +...鐚w3m荵遵辱紕蚊э障罘純羣莠障w3m +紊宴鐚c鐚障違紊эfix +c鐚 </body> </html> |