[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
backend and emacs-w3m (was: display version for w3m-0.2.1)
>> On 26 Mar 2001 22:18:01 +0900
>> "須藤" == suto@ks-and-ks.ne.jp (Kiyokazu SUTO) said as follows:
坂本> で、-backend なんですが w3m.el はそちらが本線なのでしょうか?
須藤> 今の実装は-dump_head+-dump_source+-halfdumpという組み合わせを使って
須藤> ますね。
現実装は
(1) コンテンツのヘッダを得るために w3m -dump_head を実行し、
(2) コンテンツのソースを得るために w3m -dump_source を実行し、
(3) レンダリングするために w3m -T text/html -halfdump を実行する
という3段階の手順を踏んでいます。
須藤> この実装や土屋さんのオリジナルのbackend patchの問題点が
須藤> [emacs-w3m:00218]にリストされています。
この [emacs-w3m:00218] は、なるべく w3m 本体の修正を少なくすることを主
眼として書かれています。ですから、本格的・汎用的な backend mode を定義
するということであれば、少し話は変わってくるでしょう。
須藤> このうち幾つかはw3m側で対処しないとどうしようもない
その通りです。
須藤> いずれはw3を再発明するようなことになるんじゃないかと思います。
W3 の再発明と言うほど大げさな再実装は必要ありませんが、それでもかなり
の量の再実装が必要になることは確かです。
したがって、w3m-0.2.0 が登場するまでは、最小限度の backend patch を作
成して、それを emacs-w3m とともに配布するつもりでした。しかし、backend
patch が公式に採用されたことによって、状況は大幅に変わったと思います。
坂本> 私がしぶっていた理由の一つは、
...
坂本> w3m.el の動作を知らなくても w3m-dev 側でメンテできる状態になるまでは
坂本> (基本的なプロトコルが固まるまでは) w3m.el 側で開発をして欲しかった。
基本的なプロトコルについては、HTTP をモデルにした通常のサーバークライ
アントモデルが妥当なのではないかと考えています。
この際ですから、私が backend mode の理想形として持っているイメージを叩
き台として文書化してみました。皆さんのご意見をお願いします。
(要点その1) 上位層の必要とする情報を欠落させない。
(要点その2) backend protocol によって出力される中間標準形式をきちんと
確定する。その基本は現時点の -halfdump の出力だが、以下の
点に留意して規格化する。
(a) 文書のヘッダをきちんと出力する。
(b) form の処理に必要な情報をきちんと出力する。
(c) 出力文字コードを指定できるようにする。指定された文字コード
で表現できない文字については、HTML 規格にのっとった文字実
体参照または内部タグで表現する。
(要点その3) 須藤さんの作成されたパッチの w3m-urgent-message による出力
を解析するのは上位層の負担が大きいため、レスポンスコードに
よって表現するようにする。つまり、w3m -backend が擬似的な
HTTP server のように振る舞うようにする。
必要となることが予想されるコマンドは、おおよそ次の通り。
■ HEAD <URI>
指定された URI のヘッダ文字列を出力として返す。ただし、redirect さ
れた場合は、その redirect 先を付加して返す。
例:
C: HEAD http://pine.kuee.kyoto-u.ac.jp/member/tsuchiya/emacs-w3m/
S: 200 OK
S: Date: Sun, 25 Mar 2001 16:46:11 GMT
S: Server: Apache/1.3.14 (Unix) Debian/GNU
S: Last-Modified: Sat, 24 Feb 2001 20:45:12 GMT
S: ETag: "27283-1002-3a981d58"
S: Accept-Ranges: bytes
S: Content-Length: 4098
S: Connection: close
S: Content-Type: text/html; charset=iso-2022-jp
S: w3m-location: http://namazu.org/~tsuchiya/emacs-w3m/
S:
(最後の空行はヘッダ文字列の終端を表すために必要。なお、C: はクライ
アントの出力、S: は backend の出力)
■ GET [options] <URI>
指定された URI を標準中間形式に変換した結果を出力として返す。ただ
し、ヘッダもきちんと出力する。
options:
-post POST メソッドで request を行う [*]
-target TARGET それぞれ POST メソッドで request を行
-charset CHARSET う場合の引数を指定する
-enctype ENCTYPE
-body BODY
-boundary BOUNDARY
-length LEN
[*] POST コマンドを別に持つ、という解もありだと思う。どちらが
良いのか曖昧だが、後段の SOURCE コマンドとの統一性を考えると、
-post というオプションで実現しておく方が良いような気がする。
例:
C: GET http://namazu.org/~tsuchiya/emacs-w3m/
S: 200 OK
S: Date: Sun, 25 Mar 2001 16:46:11 GMT
S: Server: Apache/1.3.14 (Unix)
S: Last-Modified: Sat, 24 Feb 2001 20:45:12 GMT
S: ETag: "27283-1002-3a981d58"
S: Accept-Ranges: bytes
S: Content-Length: 4098
S: Connection: close
S: Content-Type: text/html; charset=iso-2022-jp
S: w3m-location: http://namazu.org/~tsuchiya/emacs-w3m/
S: w3m-content-length: 2000
S: w3m-content-type: text/html
S: w3m-content-charset: iso-2022-jp
S:
S: <pre>
S: ここには標準中間形式が入る
S: </pre>
(ヘッダ文字列の直後の空行は、ヘッダと本文を区切るために必要。
w3m-content-length は中間標準形式に変換後のコンテンツのバイト長を
与えるヘッダ)
認証が必要な場合の例:
C: GET http://foo/bar/
S: 301 Username Required
C: username
S: 302 Password Required
C: password
S: 200 OK
[以下略]
■ SOURCE [options] <URI>
GET コマンドとほとんど同じだが、中間標準形式への変換を行わず、文書
のソースをそのまま出力する(実際には、GET コマンドは SOURCE コマン
ドによって得られた文字列を中間表現形式に変換するように実装されるべ
き)。
例:
C: GET http://namazu.org/~tsuchiya/emacs-w3m/
S: 200 OK
S: Date: Sun, 25 Mar 2001 16:46:11 GMT
S: Server: Apache/1.3.14 (Unix)
S: Last-Modified: Sat, 24 Feb 2001 20:45:12 GMT
S: ETag: "27283-1002-3a981d58"
S: Accept-Ranges: bytes
S: Content-Length: 4098
S: Connection: close
S: Content-Type: text/html; charset=iso-2022-jp
S: w3m-location: http://namazu.org/~tsuchiya/emacs-w3m/
S:
S: <body>
S: 元々の形
S: </body>
■ DATA
入力されたテキストを HTML として解釈して中間表現形式に直す。
例:
C: DATA
C: Content-Length: 40
C:
C: <html><body>This is sample</body><html>
S: 200 OK
S: Content-Length: 43
S:
S: <pre>
S: This is sample
S: </pre><title></title>
■ SET <variable> <value>
■ SHOW <variable>
各種の変数(column, rc_dir, http-proxy その他)を操作する。
例:
C: SET solumn 80
S: 200 OK column=80
C: SHOW column
S: 200 OK column=80
■ QUIT
バックエンドを終了する。
--
土屋 雅稔 ( TSUCHIYA Masatoshi )
http://www-nagao.kuee.kyoto-u.ac.jp/member/tsuchiya/
;; 今週は学会のため返事は大変遅くなります