<English version of this document>

多符号化方式対応拡張w3mの設定


初期化の流れ

素のw3m (以下w3mと表記し、 実行ファイルの名前も同じものと仮定します) では

の順に各種の設定が読み込まれ、 後で指定したものが前のものを上書きします。

多符号化方式対応の亜種 (以下w3mmeeと表記し、 実行ファイルの名前も同じものと仮定します) の場合は、 符号化方式の自動判別の範囲、 使用端末で使える符号化方式、 符号化方式の変換方法、 各言語に対応したメッセージ、 etc. を指定するために少し(?)複雑な手順を踏むことになります。

まず環境変数「W3MLANG」 (設定されていなければ「LANG」) の値を読み、 アルファベットをすべて小文字に変換後、 それが

言語コード+"_"(アンダースコア)+国コード+"."(ピリオド)+符号化方式コード
という形をしているものとみなして、 それぞれのコードに分解します。 例えば値が「ja_JP.UTF-8」だとすると という値を得ます。

上で得られた文字列から

  1. $LIB_DIR/w3mconfig
  2. $LIB_DIR/w3mconfig.言語コード
  3. $LIB_DIR/w3mconfig_国コード
  4. $LIB_DIR/w3mconfig.符号化方式コード
  5. $LIB_DIR/w3mconfig.言語コード_国コード
  6. $LIB_DIR/w3mconfig.言語コード.符号化方式コード
  7. $LIB_DIR/w3mconfig_国コード.符号化方式コード
  8. $LIB_DIR/w3mconfig.言語コード_国コード.符号化方式コード
というファイル群を (もしあれば) この順に読み込み、 w3mと同じ形式の設定ファイルとして解釈します。

さらに

  1. $LIB_DIR/w3mmessages
  2. $LIB_DIR/w3mmessages.言語コード
  3. $LIB_DIR/w3mmessages_国コード
  4. $LIB_DIR/w3mmessages.符号化方式コード
  5. $LIB_DIR/w3mmessages.言語コード_国コード
  6. $LIB_DIR/w3mmessages.言語コード.符号化方式コード
  7. $LIB_DIR/w3mmessages_国コード.符号化方式コード
  8. $LIB_DIR/w3mmessages.言語コード_国コード.符号化方式コード
というファイル群を (もしあれば) この順に読み込み、 オプション設定パネルの説明文を再設定します。 ただしコメントの設定に関係する行は
オプション名+"="(等号)+説明文
という形をしたもののみで、 他の行は無視されます。 また等号の前後・行頭・行末の空白文字は取り除かれます。

さらに

$HOME/.w3mmee/config

各ユーザ用のオプション設定ファイル、 形式は$LIB_DIR/w3mconfig*達と同じ、

$HOME/.w3mmee/messages

各ユーザ用のオプション設定パネルの説明文設定ファイル、 形式は$LIB_DIR/w3mmessages*達と同じ、

を読み込み解釈します。


localeのcodeset名とMIMEのcharset名の対応

この節の内容はw3mmeeがgettextを使うようにビルドされている場合のみ有効です。

gettext()の戻り値が非US-ASCII文字を含む場合、 そのような文字の符号化方式は内部用のものに変換する必要があります。 gettext()は現localeのcodeset名に基いて出力の符号化方式を決めますが、 w3mmeeはMIMEのcharset名を使っています。 不幸にしてある符号化方式のlocaleシステムにおけるcodeset名とMIMEのcharset名は同じとは限らないので、 w3mmeeはそれらの対応表を必要とします。

w3mmeeには既にそのような対応表が組み込まれていますが、 組み込みのものでは不十分なこともあり得ます。 そのような場合以下の2つのファイル

  1. $LIB_DIR/locale2mime
  2. $HOME/.w3mmee/locale2mime
によって、 追加の対応表をw3mmeeに与えることができます。 これらのファイルの各行は
MIMEのcharset名+"="(等号)+言語指定[+","(コンマ)+…]
という形をしていなければなりません。 "="や","の前後には空白があっても構いません。 言語指定は
言語コード+"_"+国コード+"."+codeset名
という形の文字列で、 言語コード、 "_"+国コード、 または"."+codeset名、 のうち1個または2個が省略されていても構いません。


文字符号化に関する設定項目

以下は多符号化方式対応拡張により増えたオプションのうち、 文字の符号化に関するものの一覧です。

mylang 文字列

言語を指定します。 今のところは、 符号化方式の自動判別の範囲を限定するためだけに使われています。

例えば

mylang cjk
と指定すると、 charset指定のない文書の符号化方式を の中から自動判別しようと試みます。

mylang_charset 文字列

自動判別に失敗した場合に想定する符号化方式を指定します。

tty_charset 文字列

端末の符号化方式を指定します。 端末への出力時以外に、 formへの入力の符号化方式もこのオプションの値で指定されるものと一致するものとして扱われます。

tty_initial_charset 文字列

このオプションは使用しないことを推奨します。 かわりに tty_initial_input_charsettty_initial_output_charset を使って下さい。

tty_initial_input_charset 文字列

tty_charsetで指定する符号化方式がISO 2022の部分集合の場合、 端末からの入力ストリームの中間バッファの初期状態をこのオプションで指定する符号化方式のものに変更できます。

tty_initial_output_charset 文字列

tty_charsetで指定する符号化方式がISO 2022の部分集合の場合、 端末への出力ストリームの中間バッファの初期状態をこのオプションで指定する符号化方式のものに変更できます。

tty_input_converters 文字列

html文書のフォームへの入力の符号化方式・文字セットを入力時にどのように変換するかを指定します。

多符号化方式対応拡張 に使われる サポートライブラリ についての詳しい知識があり、 かつ特殊な使い方をするのでない限り、 指定しないほうが無難です。

tty_output_converters 文字列

端末への出力時の符号化方式・文字セットの変換のしかたを指定します。

多符号化方式対応拡張 に使われる サポートライブラリ についての詳しい知識があり、 かつ特殊な使い方をするのでない限り、 指定しないほうが無難です。

tty_fallback_converters 文字列

端末がそのままでは表示できず、 代替文字列も指定されていない文字に適用される変換を指定します。

多符号化方式対応拡張 に使われる サポートライブラリ についての詳しい知識があり、 かつ特殊な使い方をするのでない限り、 指定しないほうが無難です。

input_charset 文字列

charset指定の無い文書の符号化方式を指定します。 このオプションが指定されると、 自動判別は行われません。

input_converters 文字列

ネットワークやローカルファイルからの入力時の符号化方式の変換の仕方を指定します。

多符号化方式対応拡張 に使われる サポートライブラリ についての詳しい知識があり、 かつ特殊な使い方をするのでない限り、 指定しないほうが無難です。

output_charset 文字列

charset指定も無く、 自動判別にも失敗した場合に想定する符号化方式を指定します。

html文書に入力フォームがある場合に、 アクションに対する引数はその文書の符号化方式に変換後に渡されるので、 その場合はこのオプションの設定の影響を受けます。 今のところ、 これ以外の用途はありません。

output_converters 文字列

ネットワークやローカルファイルへの出力時の符号化方式の変換の仕方を指定します。

多符号化方式対応拡張 に使われる サポートライブラリ についての詳しい知識があり、 かつ特殊な使い方をするのでない限り、 指定しないほうが無難です。

process_charset 文字列

ブックマーク登録スクリプトへの引数等、 他のプロセスに渡す文字列の符号化方式を指定します。

「文字列」は以下のような2通りの形式の指定のどちらかを空白で区切って並べたものです:

<sep1>+正規表現+<sep2>+<charset>
または
<charset>
空白で区切られたトークンの最初の文字が非alphanumericならば最初の形式として扱われ、 それ以外の場合は2番目の形式としてみなされます。 最初の形式において、 もし<sep1>が「(」、「{」、「[」、「<」、または「^」ならば、 <sep2>はそれぞれれ「)」、「}」、「]」、「>」、または「$」でなければなりません。 <sep1>と<sep2>は、 「^」と「$」の対の場合のみ正規表現の一部として扱われます。 第2の形式は
「^.*$」+<charset>
の省略形です。

プロセス名が与えられると、 正規表現との照合が順に試され、 最初に照合に成功した表現に対応する<charset>が採用されます。

tty_character_conversion 文字範囲 代替文字列

端末が受け付けない文字を指定します。 代替文字列が指定されていないか、 「NLLL」(カギカッコは除く、すべて大文字)という文字列の場合、 その文字そのものが出力されます。 代替文字列が「REJECT」(カギカッコは除く、すべて大文字)以外の文字列の場合、 その文字列が出力されます。 これ以外の場合、 tty_character_replacement で代替文字列のデフォルトが指定されていればその文字列が出力されます。 これも指定されていない場合は「?」(クエスチョンマーク)が出力されます。

このオプションは複数設定可です。 文字範囲に包含関係がある場合、 範囲の狭いほうが採用されます。 包含関係が無くかつ重複する場合、 重複部分だけ後で指定したもので上書きされます。

tty_character_replacement 文字列

端末が受け付けない文字の代替文字列のデフォルトを指定します。

view_buf 文字列

マウスを使わないバッファ (configureでマウスサポートを外したバイナリの場合も含む) での表示中のドキュメントを表わすメッセージ用のフォーマット文字列を指定します。

view_buf_with_mouse 文字列

マウスを使うバッファでの表示中のドキュメントを表わすメッセージ用のフォーマット文字列を指定します。

omitted 文字列

長いURLの途中を省略して表示する場合の、 省略した部分の代替文字列を指定します。

ul_marks 文字列

<ul>の各項目の先頭に現われる文字列群を、 ","(コンマ)で区切って指定します。

ul_type_disc 文字列

<ul>のtype属性をdiscにした場合の、 各項目の先頭に現われる文字列を指定します。

ul_type_circle 文字列

<ul>のtype属性をcircleにした場合の、 各項目の先頭に現われる文字列を指定します。

ul_type_square 文字列

<ul>のtype属性をsquareにした場合の、 各項目の先頭に現われる文字列を指定します。

small_img_alt 文字列

小さい画像用の代替テキストを指定します。

hr_rule 文字列

<hr>に使われる文字を指定します。

menu_frame 文字列

メニューの枠に使う文字を、 左上隅から出発して、 左から右、 上から下の順に、 ","(コンマ)で区切って指定します。

rule 文字列

テーブルの枠や境界に使う文字を指定します。 中心、 左端、 上端、 左上隅、 右端、 縦棒、 右上隅、 下端、 左下隅、 水平線、 右下隅の順に、 ","(コンマ)で区切って指定します。

rule_bold 文字列

テーブルの枠や境界を太くする時に使う文字を指定します。 中心、 左端、 上端、 左上隅、 右端、 縦棒、 右上隅、 下端、 左下隅、 水平線、 右下隅の順に、 ","(コンマ)で区切って指定します。

message_about_config_save 文字列

オプション設定パネルに、 「OK」ボタンを押して終了した場合に結果を$HOME/.w3mmee/configに保存するかどうか、 を指定する項目が増えています。 その項目の説明文を指定します。

charset_cname 文字列

非標準なcharset名の標準名を指定します。 指定の仕方は

標準名+"="(等号)+charset名のリスト
で、 「charset名のリスト」はcharset名を","(コンマ)で区切って並べたものです。 等号やコンマの前後に空白を入れてはいけません。 またcharset文字中のアルファベットの大文字・小文字は区別されません。

例えば「charset=SHIFT-JIS」などという指定のあるページが存在しますが、 これを「charset=Shift_JIS」と指定してあるのと同等に表示するためには、

charset_cname shift_jis=shift-jis
という指定を設定ファイルのどこかに追加します。

このオプションは複数指定が可能で、 等号の左辺の重複したものがある場合は、 後の指定が前の指定を上書きします。

unicode_width 文字列

Unicode中の文字を端末に表示した時の幅の表の名前を指定します。 指定可能なものは以下のとおりです (アルファベットの大文字・小文字の違いは無視されます)。

xterm
xterm-147に組込まれているものと同じ幅になります。 それ以降の版のxtermでは違っているかも知れません。
EastAsianWidth_AmbiguousToNarrow、eaw_a2n
UAX #11に準じますが、 Ambiguousとされている文字の幅を1とした表です。
EastAsianWidth_AmbiguousToWide、eaw_a2w
UAX #11に準じますが、 Ambiguousとされている文字の幅を2とした表です。


文字符号化に関係無い設定項目

文字の符号化とはまったく関係無いけれども、 パッチがオリジナルに採用されなかったり、 須藤が移植をサボっていたり、 等の理由でw3mmeeのみが認識するオプションの一覧です。

accept_encoding  <encoding name> <media type> <argv[0]> <path to command>

HTTPヘッダフィール"content-encoding"の値<encoding name>, MIMEタイプ <media type>, および<encoding name>で示される符号化方式で符号化された内容を復号するフィルタプログラムを結びつけます。 このオプションが正しく機能するようにするためには、 さらに$HOME/.mime.types

<media type> 拡張子
のような行を付け加えて、 <media type>と適当なファイル拡張子を結びつける必要があります。

このオプションは複数指定可で、 おなじ<encoding name>を持つオプションが2つ以上指定された場合、 最後の指定が採用されます。

language_extension 文字列

ファイルの言語を表わす拡張子のコンマ区切りのリストを指定します。

複数の拡張子を持つファイルのcontent typeを推測するとき、 このオプションにリストされた拡張子は判断の材料から除外されます。

search_across_lines 真偽値

正規表現の検索時に行を跨ぐ検索を行うかどうかを指定します。

concurrent 数値

文書をロードするためのプロセス数の最大値を指定します。

concurrent_per_server 数値

文書をロードするためのプロセス数のサーバ毎の最大値を指定します。

follow_redirection 数値

何回までリダイレクトに従うかを指定します。

request_header 文字列

HTTPリクエストヘッダに加えるヘッダを指定します。 以下のヘッダ

Host, Pragma, Cache-Control, Content-Length

は常にw3mmeeが値を決め、 オプションによる指定は無視されます。 以下のヘッダ

UserArgent, Accept, Accept-Encoding, Accept-Language

のオプションによる指定が無い場合、 w3mmeeが他の情報から適切な値を与えます。 以下のヘッダ

Content-Type, Referer

は、 他に与えるべき適当な値が無いときにのみ、 オプションにより指定した値が与えられます。 以下のヘッダ

Cookie, Cookie2

はコンパイル時の設定やコマンドライン、 あるいはオプション設定パネルで、 w3mmeeがcookieを扱わないようになっている時のみこのオプションによる値が採用され、 それ以外はオプションの指定を無視し、 w3mmeeが値を決めます。

このオプションは複数指定可で、 おなじヘッダ名に対する指定が2つ以上指定された場合、 最後の指定が採用されます。

http_version 文字列

HTTPリクエストのバージョンを指定します。 指定可能な値は"1.1"または"1.0"(ただし2重引用符を除く)です. 他の値が指定された場合警告無しに無視され、 バージョンとしては"1.1"が使われます。

anchor_num_style 文字列

文書のレンダリング結果をダンプする際のアンカーの表示の仕方を指定します。 この文字列と文書中のリンク一覧中の番号がsprintfに渡されます。 従ってこの文字列中にはsprintf用の変換指定子「%d」が丁度1個含まれていなければなりません。

img_num_style 文字列

文書のレンダリング結果をダンプする際のイメージの表示の仕方を指定します。 この文字列と文書中のリンク一覧中の番号がsprintfに渡されます。 従ってこの文字列中にはsprintf用の変換指定子「%d」が丁度1個含まれていなければなりません。

label_withinpage_style 文字列

文書のレンダリング結果をダンプする際の、 同一文書内のラベルへのリンクに付加する行番号と桁の表示の仕方を指定します。 この文字列と行番号と桁がsprintfに渡されます。 従ってこの文字列中にはsprintf用の変換指定子「%d」が丁度2個含まれていなければなりません。

link_num_url 文字列

文書のレンダリング結果をダンプする際に、 その文書のURLがこの文字列であるものとして扱われます。

scroll_amount 数値

カーソル移動コマンドの結果カーソルが画面外に移動してしまう場合、 「数値」行または桁だけ画面がスクロールします。

mailcap_entry 文字列

優先度最大のmailcapエントリを指定します。 外部ビューワを一時的に変更するために使われることを想定したオプションです。

このタイプのオプションは複数回現れても構いません。

browsecap_entry 文字列

優先度最大のbrowsecapエントリを指定します。 外部ブラウザを一時的に変更するために使われることを想定したオプションです。

このタイプのオプションは複数回現れても構いません。

wrap_line 真偽値

Plain text中の画面の幅に納まらない行を、 折り返して表示するかどうかを指定します。

line_truncated 文字

画面の幅に納まらない行が、 切り詰めて表示されていることを示す文字を指定します。

line_continued 文字

画面の幅に納まらない行が、 折り返して表示されていることを示す文字を指定します。

preload_image 真偽値

実際に表示する前に画像をロードしておくかどうかを指定します。

img_valign 位置

インライン画像の縦方向のアラインメントのデフォルトを指定します。 「位置」は D ("default"を表わします)、 T ("top"を表わします)、 M ("middle"を表わします)、 または B ("bottom"を表わします)、 のいずれかでなければなりません。 DB とほとんど同じですが、 小さな画像に対して少々違いが出ます。

table_valign 位置

テーブル中の縦方向のアラインメントのデフォルトを指定します。 「位置」は T ("top"を表わします)、 M ("middle"を表わします)、 または B ("bottom"を表わします)、 のいずれかでなければなりません。

when_redirected 振舞い

GETでもHEADでもないメソッドのHTTPリクエストが、 HTTPレスポンスコード301または302によってリダイレクトされたときの振舞いを指定します。 「振舞い」は

0
常に元のメソッドでリダイレクトに従う、
1
常にGETメソッドでリダイレクトに従う、
2
常にリダイレクトを無視する、
3
実行時に問い合わせる、
のいずれかでなければなりません。

frame_color 色

フレームの境界の色を指定します。

auto_pixel_per_char 真偽値

文字幅を自動設定してよいかどうかを指定します。

auto_pixel_per_line 真偽値

一行の高さを自動設定してよいかどうかを指定します。

try_extensions 文字列

ファイル拡張子のコンマ区切りのリストを指定します。 w3mmeeはローカルファイルのオープンに失敗した時、 ここにリストした拡張子をファイル名に追加して再度オープンを試みます。

拡張子として「*」(アステリスク)が指定されると、 その場所にファイルの符号化方式に対応する拡張子のコンマ区切のリストが展開されます (デフォルトでは「.Z,.bz2,.gz」、 accept_encodingオプションの項を見て下さい).

edit_remote_source 真偽値

リモートページのキャッシュされたソースを編集可能にするかどうかを指定します。

remove_traling_spaces 真偽値

レンダリング結果の各行の行末の空白を削除するかどうかを指定します。


mailcapエントリの文字列展開の拡張

w3mmeeは、 mailcapエントリの文字列展開において、 以下の追加の%-エスケープを認識します。

%h

URLのホスト部。

%p

URLのポート部。

%u

URL全体。

%{<test>?<yes>:<no>}

まず「%<test>」の展開を試みます。 <test>の先頭に「%」が挿入されることに注意して下さい。 展開が実際に行われる場合 (展開結果が空文字列の場合も含みます)、 <yes>が処理されます。 展開に失敗する場合は<no>が処理されます。 <yes>が省略された場合、 省略された場所に<test>があるかのように扱います。 <no>が省略されかつ<test>の展開に失敗する場合は、 この%-エスケープ全体が空文字列で置き換えられます。


browsecap -- External browser capability file

w3mmeeはURLのscheme部によって外部ブラウザを自動的に決定する仕掛を持っています。 外部ブラウザとschemeの対応は"browsecap"ファイルによって与えられます。 w3mmeeは

  1. $LIB_DIR/browsecap
  2. $HOME/.w3mmee/browsecap
の2つのファイルを読(むことを試)み、 "mailcap"に対するのと同様のやりかたで対応表を作ります。

ファイルフォーマットも"mailcap"ファイルと同じです。 ただし各エントリの最初の要素は

<scheme>+「/」(スラッシュ)+<method>
という形でなければなりません。 また<method>としてサポートされているのは今のところ「post」、「get」、または「download」です。 <method>部にワイルドカードとして「*」(アステリスク)を指定することも可能です。 <method>部が「post」になる場合、 CGIプログラムに渡されるべき引数がそのまま、 マッチした外部ブラウザの標準入力になります。

もしURLがquery stringを含んでいて、 そのquery stringが「<word>=<value>」という要素を含んでいる場合、 「%{<word>}」という形の%-エスケープは「<value>」に展開されます。 さらに「%?」という%-エスケープはquery string全体 (ただし最初の「?」は除く) に展開されます.

browsecap機能は、 バッファのソース、 バッファの表示イメージ、 form要素のtype=textなinputコントロール, またはform要素のtextareaコントロール, の編集用エディタを決めるためにも使われます。 browsecapエントリのうち、 最初の要素が、 それぞれ 「x-w3m-edit/buffer」、 「x-w3m-edit/screen」、 「x-w3m-edit/inputtext」、 または「x-w3m-edit/textarea」 のものが該当するものです。

w3mmeeのmailcapおよびbrowsecapエントリの解析ルーチンは、 「x-w3m-internal」、 「x-w3m-cgioutput」、 「x-w3m-match=正規表現」、 および「x-w3m-nc-match=正規表現」というフラグを認識します。

「x-w3m-internal」のセットされたエントリは、 上記の編集用エディタの決定のような、 内部用途だけに制限されます。 エディタ用のエントリにはこのフラグを付けることをおすすめします。

「x-w3m-cgioutput」がセットされている場合、 そのエントリから決まるプログラムはCGIプログラムとして扱われます。 すなわち、 プログラムを呼び出す前に各種の環境変数が設定され、 プログラムの出力の最初の空行の前の行達がHTTPの応答ヘッダとして解析されます。

「x-w3m-match=『正規表現』」および「x-w3m-nc-match=『正規表現』」はbrowsecapの中でのみ認識されます。 これらのフラグはお互いに排他的で、 1つのエントリに両方が指定された場合、 後のもののみが有効になります。 どちらかのフラグが指定された場合、 URL全体と『正規表現』が照合され (「x-w3m-nc-match=『正規表現』」の場合はアルファベットの大文字小文字は区別されません)、 照合が成功した場合のみ、 そのエントリが採用されます。 もし「test=…」フラグも指定されていた場合、 結果の論理積がエントリを採用するかどうかに使われます。


文字範囲の表し方

tty_accept_charactertty_reject_character の最初の引数としてUnicode中の文字を与える場合は、

"U+"+Unicodeの16進表記
または
"U+"+範囲の始点のUnicodeの16進表記+"-"+終点のUnicodeの16進表記
と表記します。 Unicode以外の文字を与える場合
"I+"+その文字の内部表現
または
"I+"+範囲の始点文字の内部表現+"-"+終点文字の内部表現
と表記します。

「Unicode以外の文字の内部表現」とは以下のようなものです。 まず (ISO 2022の分類に基いて) 文字セットの種類から

という整数Sを決めます。

次に94セット・96セット・94x94セットの場合は、 ISO 2022方式の符号化でその文字セットを指示する時に使う終端バイトをFとします。 ただし追加の中間バイト(2/1)を必要とする94セットの場合は終端バイトに0x40を加えたものをFとします。 非ISO 2022文字セットの場合は、 サポートライブラリがその文字セットの識別用に使う (今のところ文書化されていない) たかだか8ビットの整数をFとします。

最後にその文字セットに収容可能なコードポイントを順にならべて、 0から始まる番号をつけます。 その番号をCとします。

以上のSFCの16進表記を「+」(プラス符号)で区切って並べたものが「内部表現」です。

FCは省略可能で、 始点文字として指定されたときは可能な範囲の最小値、 終点文字として指定されたときは可能な範囲の最大値、 が省略時の値として使われます。