w3m のページ

(English version)

w3m伊藤彰則氏作の ページャ兼テキストベースの WWW ブラウザで, 次のような特徴を持っていま す.


News

2001/3/30

しばらく更新してませんでしたが, この間に w3m-0.2.0 とそのバグフィ クス版 w3m-0.2.1 があいついでリリースされました. このページでまとめていた修正はほぼ全て含まれています.
w3m-0.1.11-pre 以降, 機能面だけでなく, 速度や安全面でも多数の修正 が行なわれていますので, ほぼ全ての w3m ユーザにとって導入する価値 があると思います.

2000/12/1

坂本さんの御指摘により, w3m には内部タグを悪用する事により外から ローカルファイルにアクセス可能になるという, セキュリティ上大きな問題 がある事が分かりました. w3m-0.1.11-pre-kokb22.patch.gz にはこの修正が含まれています.

2000/10/5 以前


岡部克也's パッチ

w3m に対する改良パッチです.
w3m-dev/w3m-dev-en ML で収集したものに, 私個人の改良(?)を加えています.

パッチ パッチの改良点
w3m-0.1.11-pre-kokb23.patch.gz

w3m-0.1.11-pre-kokb22_23.patch

簡易 UTF-8 版:

w3m-0111-utf8-kokb23.patch.gz

w3m-0111-utf8-kokb22_23.patch

更新日: 2000/12/13

以下のパッチをマージしています:
[w3m-dev 01432], [w3m-dev 01443], [w3m-dev 01449], [w3m-dev 01450], [w3m-dev 01456], [w3m-dev 01457], [w3m-dev 01471], [w3m-dev 01473], [w3m-dev 01476], [w3m-dev 01478], [w3m-dev 01479], [w3m-dev 01487], [w3m-dev 01488], [w3m-dev 01489], [w3m-dev 01490], [w3m-dev 01491], [w3m-dev 01493], [w3m-dev 01494], [w3m-dev 01497], [w3m-dev 01498].

今回は前回に引き続きセキュリティ問題の修正が行なわれました.
また, 2バイト文字やコントロール文字 (ナル文字を含む) の扱いを改善しま した (ナル文字を含むパターンでの検索はまだできません).

詳細は, HISTORY.kokb を御覧ください.

w3m-0.1.11-pre-kokb22.patch.gz

w3m-0.1.11-pre-kokb21_22.patch

簡易 UTF-8 版:

w3m-0111-utf8-kokb22.patch.gz

w3m-0111-utf8-kokb21_22.patch

更新日: 2000/12/1

以下のパッチをマージしています:
[w3m-dev 01397], [w3m-dev 01401], [w3m-dev 01406], [w3m-dev 01411], [w3m-dev 01415], [w3m-dev 01425], [w3m-dev-en 00301].

今回は HTML のレンダリングの高速化のための変更が主です.
また, News で触れたように, 内部タグを悪用する事に より外からローカルファイルにアクセス可能になるという問題がある事が分かっ たので, 修正が行なわれました.

19:20 (JST) 頃, [w3m-dev 01430] で幾つか問題が報告されましたので, 修正したもので差し替えました.

詳細は, HISTORY.kokb を御覧ください.

w3m-0.1.11-pre-kokb20_21.patch

簡易 UTF-8 版:

w3m-0111-utf8-kokb20_21.patch

更新日: 2000/11/24

以下のパッチをマージしています:
[w3m-dev 01383], [w3m-dev 01384], [w3m-dev 01385].

w3m-dev ML で簡易 UTF-8 版の致命的なバグが報告されましたので, 早速改訂版を作りました. 今回は差分のみとします.

w3m-0.1.11-pre-kokb20.patch.gz

w3m-0.1.11-pre-kokb19_20.patch

簡易 UTF-8 版:

w3m-0111-utf8-kokb20.patch.gz

w3m-0111-utf8-kokb19_20.patch

更新日: 2000/11/22

以下のパッチをマージしています:
[w3m-dev 01336], [w3m-dev 01338], [w3m-dev 01342], [w3m-dev 01343], [w3m-dev 01344], [w3m-dev 01345], [w3m-dev 01354], [w3m-dev 01364], [w3m-dev 01365], [w3m-dev 01366], [w3m-dev 01368], [w3m-dev 01372].

加えて, 高速化を目的として, ファイル入力ルーチン等, かなりの部分に手を 入れましたので, 動作に不安定な所があるかもしれません.

詳細は, HISTORY.kokb を御覧ください.

w3m-0.1.11-pre-kokb19.patch.gz

w3m-0.1.11-pre-kokb18_19.patch

簡易 UTF-8 版:

w3m-0111-utf8-kokb19.patch.gz

w3m-0111-utf8-kokb18_19.patch

更新日: 2000/11/8

以下のパッチをマージしています:
[w3m-dev 01294], [w3m-dev 01295], [w3m-dev 01297], [w3m-dev 01298], [w3m-dev 01299], [w3m-dev 01310], [w3m-dev 01313], [w3m-dev 01327], [w3m-dev 01331].
また Jan Nieuwenhuizen 氏の menu-search.patch をマージしました. 詳細は, HISTORY.kokb を御覧ください.
w3m-0.1.11-pre-kokb18.patch.gz

w3m-0.1.11-pre-kokb17_18.patch

更新日: 2000/10/30

w3m 0.1.11-pre からの差分と w3m-0.1.11-pre-kokb17.patch.gz からの差分です. 今回は, 試験的に坂本さんの簡易 UTF-8 パッチをマージしたものも作って みました. w3m-0111-utf8-kokb18.patch.gz

以下のパッチをマージしています:
[w3m-dev 01247], [w3m-dev 01258], [w3m-dev 01263], [w3m-dev 01269], [w3m-dev 01273], [w3m-dev 01274], [w3m-dev 01275], [w3m-dev 01276], [w3m-dev 01277], [w3m-dev 01280], [w3m-dev 01284], [w3m-dev 01285], [w3m-dev 01286], [w3m-dev 01291].
詳細は, HISTORY.kokb を御覧ください.

w3m-0.1.11-pre-kokb17.patch.gz

w3m-0.1.11-pre-kokb16_17.patch

更新日: 2000/10/24

w3m 0.1.11-pre からの差分と w3m-0.1.11-pre-kokb16.patch.gz からの差分です (14:05 頃, とんでもないミスが見付かったので差し替えました).

クッキーに対して, 非互換性の問題への対処と, 設定の細分化を行ないました. また, 文字幅も設定可能になりました. これらの修正は Ambrose Li [EDP] 氏の cookie.patch および Felix Rosencrantz 氏の [w3m-dev-en 00222] を含んでいます.
また, 以下のパッチをマージしています:
[w3m-dev 00990], [w3m-dev 01192], [w3m-dev 01193], [w3m-dev 01206], [w3m-dev 01208], [w3m-dev 01209], [w3m-dev 01211], [w3m-dev 01214], [w3m-dev 01216], [w3m-dev 01217].
詳細は, HISTORY.kokb を御覧ください.

w3m-0.1.11-pre-kokb16.patch.gz

w3m-0.1.11-pre-kokb15_16.patch

更新日: 2000/10/13

w3m 0.1.11-pre からの差分と w3m-0.1.11-pre-kokb15.patch.gz からの差分です.
以下のパッチをマージしています:
[w3m-dev 00928], [w3m-dev 01145], [w3m-dev 01150], [w3m-dev 01155], [w3m-dev 01156], [w3m-dev 01158], [w3m-dev 01164], [w3m-dev 01166], [w3m-dev 01170], [w3m-dev 01171].
詳細は, HISTORY.kokb を御覧ください.
w3m-0.1.11-pre-kokb15.patch.gz

w3m-0.1.11-pre-kokb13_15.patch

更新日: 2000/10/9

w3m 0.1.11-pre からの差分と w3m-0.1.11-pre-kokb13.patch.gz からの差分になってます.
このパッチでは, 圧縮ファイルの伸長時に無駄なプロセスを生成しないようにしました. また [w3m-dev 00971], [w3m-dev 00972], [w3m-dev 01129], [w3m-dev 01130], [w3m-dev 01131], [w3m-dev 01135], [w3m-dev 01134], [w3m-dev 01139], [w3m-dev 01142], [w3m-dev 01143] のパッチをマージしました.
w3m-0.1.11-pre-kokb13_14.patch

更新日: 2000/10/7

w3m-0.1.11-pre-kokb13.patch.gz に対するパッチです.
主な改良点は,
  • [w3m-dev 01125] で指摘された問題の修正.
  • テンポラリファイルの扱いの改善.
  • mailcap の edit= を解釈するようにした.
  • 圧縮ファイルの伸長中にシグナルが発生したとき落ちる問題の修正.
です. また, [w3m-dev 00930], [w3m-dev 00972] のパッチをマージしています.
w3m-0.1.11-pre-kokb13.patch.gz

更新日: 2000/10/5

10/5 までの私のパッチをまとめたものです.
w3m 0.1.11-pre に対するパッチになってます.
主な改良点は,
  • table ジオメトリ計算の改良.
    縦方向のセル間の空白の制御を出来るようにした.
  • mailcap の取り扱いの改良.
です. それ以外に w3m-dev/w3m-dev-en ML で個人的に収集したパッチが, 含まれ ています.


その他のパッチ

w3m-dev/w3m-dev-en ML に投稿されたパッチを集めてみました. 私家版にマージしたものは, 除いています.

パッチ 説明
pipebuf.patch 現在のバッファの内容をパイプを介してコマンドに渡し, そのコマンドの出力 をバッファに表示します.

作者: aito@ei5sun.yz.yamagata-u.ac.jp

linein.patch linein-fix.patch ファイル名入力時の行編集機能を拡張します. 二つ目はバグフィクスです.
詳細は [w3m-dev 00976].

作者: Nobutaka SEKITANI
Tsutomu Okada (岡田 勉)
このパッチは, w3m-0.1.11-pre-kokb22.patch.gz でマージされました.

send-head.patch w3m の実行中にも HTTP ヘッダを送れるようにします.

作者: OMAE, jun

w3m-3.diff html2ps 等によって, バッファの内容を印刷するのに便利な機能を追加します.
詳細は [w3m-dev-en 00239].

作者: Johannes Zellner

その他, 坂本 浩則さんが i18n 化パッチおよび簡易 UTF-8 対応パッチを w3m の改良 で, 須藤 清一さんが w3mへの多 符号化対応パッチを w3mへの多 符号化対応パッチ で, 所協 助さん が OS/2 サポートパッチを w3m for OS/2 で公開されていますので, 興味のある方はそれぞれのページを参照ください.


w3m の table のレンダリングアルゴリズム

w3mの開発について」 には, あ伊藤さんによる w3m の table のレンダ リングアルゴリズムの解説があります.
# 私が w3m に手を入れるようになったのは, この解説がきっかけでした.

現在の版では (といっても一年以上前からですが), ここに挙げられている問 題点を改善するために改良が加えられてます.

以下の文章は, 本家に取り入れられるまで非公式版として公開していたものに 対して書かれたものに修正を加えたものです.
また, 前掲のあ伊藤さんの bit の記事 にも詳しく書か れています.

最小二乗法による table のセル幅の決定方法について

table のセル幅を決めるために使用可能な情報として
1)<table> や <td> の width 属性値.
2)セルの最大幅 (ワードラップせずに表示可能なセル幅の最 小値).
3)セルの最小幅.
4)画面の幅.
等があります. これらの情報は互いに矛盾する場合もあるため, これらの情報をどう使うかで, table の外観は違ったものになります.
このパッチでは table のセル幅を決定するのに最小二乗法を用いています.
この方法を使うと, 重みを調節するだけでアルゴリズムを変更すること無く, 上に 挙げたようなセルの幅情報の優先度を自由に変更することができます.

以下にその手順を示します:

  • i カラム目のセルの幅を x_i として, m カラム目から m+n カラム目までのセル 幅の合計を a に束縛したい場合

    (x_m+x_{m+1}+...x_{m+n} - a)^2/b^2

    という項を χ^2 に加えていきます (関数: correct_table_matrix). 後はこの χ^2 が最小になる x_i を見付けるだけです. ようするに, b が小さい程セル幅が a に固定され易いようにしているのです.
    幅を絶対値でなく, 全幅に対する相対値で指定したい場合は a の変わりに

    a = r (x_1 + x_2 + …)

    で導入される相対幅 r を使います (関数: correct_table_matrix2).

  • a (または r) としては,
    1)<td> タグの width 属性値 (このとき n は colspan 属性値),
    2)table 全体の幅指定値 (n は全カラム数),
    2')もし width 属性値が指定されていない場合は, 代わりに画面幅 (入 れ子になった table では, その table のあるセルの幅) を利用す る.
    3)それぞれのセルの最大幅の対数比 (n は 1).
    等を使っています. 現在, 優先度は 1), 2), 2'), 3) の順で低くなります.
  • セル幅の計算結果がセルの最小幅より小さい場合は, これらの値にセル幅を強 制するように χ^2 を修正して (関数: check_table_width), 計算をやり直し ています.
  • これで幅情報の優先度を自由に設定することができます. カラム数が多いときの計算量とメモリ使用量の増加が問題になるかもしれません が, 今まで使った感じでは体感できる程顕著ではないようです.

入れ子になった table の扱い (2000/10/8 追加)

あ伊藤さんの解説にもあるように, セルの中に table が存在する場合, セル の最小幅, 最大幅を正確に求めるには面倒な繰り返し計算が必要になります. そこで, 次のようなステップによって, 計算を簡略化しています.
  1. 始めに子の table の最大幅 (table 内のすべてのセルが最大になって いるときの table 幅), 最小幅 (table 内のすべてのセルが最小になってい るときの table 幅) をあらかじめ大雑把に見積もっておきます. その計算を 行なっているのが, maximum_table_width および, minimum_table_width (実体は get_table_width という一つの関数) です.
    もし, table やセルに width 属性があり, それが minimum_table_width で計算したよりも大きくなる場合は, その値を table の最小幅とします.
  2. もし, table の最大幅と最小幅が, それぞれセルの最大幅と最小幅より大きけ れば, セルの最大幅と最小幅を更新します.
  3. 最小二乗法を使って親の table のセル幅を計算した後, その幅を元に子の table をレンダリングします (関数: renderCoTable).
    その結果, セル幅よりこの table の幅が大きくなってしまったとき, セル幅 をtable 幅に更新します.
  4. 全ての子のレンダリングが終了したら, 親の table をレンダリングします.

問題点

子の table の最大幅, 最小幅の見積りにおいて, table の中で相対値 によってカラム幅を指定している場合は考慮していません (考慮して計算する くらいなら, おそらくレンダリングを繰り返した方が楽でしょう).
したがって, 例えば table の中に width=50% のような幅指定がある場合等で は, 期待通りに表示されない場合があるかもしれません.

クッキーサポートについて

SSL サポートについて

mailcap サポートについて


リンク

ホームページの リンク セクションを御覧 ください.


連絡先: okabek@guitar.ocn.ne.jp