
----------------------------
less-382-iso262-ext03 パッチ
----------------------------

less-382-iso262 以降の更新がないようなので、勝手に UTF-8拡張したもので
す。とりあえず個人的に使い易いようにしているだけなので、かなりいい加減
な実装になっています。

普通に UTF-8 使用者は lv とか最新版の lessとか使えば良いのではないかと
思いますが、less の機能と UTF-8 以外の EUCや SJISや  ISO-2022 多言語化
と自動判別したい人向けの特殊実装ということでご容赦ください。

あと linux/unix 環境でしかコンパイルして試していないので、その他の環境
では、そのままでは動かないと思います。OS依存な部分は多くはないと思うの
でヘッダーファイルや変数の宣言や Makefile を手直しすれば動くかもしれま
せん。

以下は主な変更点の覚え書きです。
----------------------------------------------------------------------
ext01.patch

1. 文字コード UTF-8 への対応

元の jam-less (iso262) パッチでは、元となった less-382 が UTF-8 の実装
が不完全で中途半端な扱いになっており、きちんと動いていませんでした。こ
の ext パッチにより暫定的な UTF-8 への対応を行いました。

  1.1 出力文字コード

出力文字コードとして "utf8" と "utf8j"を使えるようにしました。"utf8"は
ユニコードに定義のある全文字を出力しますが、"utf8j" は JISにある文字の
みを文字コード UTF-8で出力し、それ以外の文字は未定義な文字として扱いま
す。日本語のフォントしか持っていない場合や、読めない文字やユニコード特
殊文字により端末表示が崩れるの防ぎたい場合に使用してください。

入力中にある未定義のユニコード文字は <U+XXXX> の形式で出力されます。こ
の形式は環境変数 LESSUTFBINFMT で変更できます(最新の less-443 と多分、
互換になっているはず)。

  1.2 入力文字コード

入力文字コードとして "utf8" を追加し、また入力文字コードに "japanese"
を指定した場合の自動判定に UTF-8 を追加しました。例えば環境変数にて、

    JLESSCHARSET="japanese-utf8" 

と指定した場合には、日本語(SJIS, EUC-JP, UTF8, ISO-2022)の文字コードを
自動判別して、UTF-8 で出力します。自動判別は UTF-8 優先になっています。
コードの判断を間違える場合は以下の @ や -Zによる切り換えを利用ください。

  1.3 文字コード切り換え

"@" キーによる文字コードの切り換えも UTF-8に対応しています。また -Z オ
プションによる優先文字コードの切り換えにも UTF-8 対応させました。

  1.4 内部文字コード

内部文字コードは今までの jam-less(iso262) パッチから変更しておらず、今
まで通り ISO 2022 形式の文字集合になっています。つまり UTF-8を内部的に
一旦 JIS X 0208などに変換して保持し出力の際にもう一度 UTF-8 に戻すとい
うようなことをやっています。JIS や ISO 8859 に変換できなかった文字につ
いては UTF8 形式のまま内部に保持しています。

  1.5 ユニコードの文字幅問題

過去の日本語の端末や端末エミュレータ(ktermなど)では、94文字、 96文字の
文字セットはASCIIの文字幅(いわゆる半角)、 94×94文字コードはその倍の幅
(いわゆる全角)で表示することが、デファクトスタンダードになっていました。

ユニコードも互換性のために固定ピッチにした際の文字幅が規定されています
が、ユニコードでは文字のユニファイがされていたり、過去の文字コードとの
変換表が固定されておらずOSやアプリによってバラバラだったりするので、ユ
ニコードに変換すると文字幅が変わるということが発生します。

このパッチは過去との互換性を重視するため、UTF8からその他の文字コードに
変換した場合に合わせて文字幅を選択します。変換の優先順位の通号から JIS
の 94×94文字集合に変換できる文字は全角で、ASCII やISO 8859 に変換でき
る場合には半角文字として扱います。JISにも ISO 8859にも変換できない文字
の場合にはユニコードの文字幅を使用します。

  1.6 その他のユニコードの対応

このパッチはユニコードによる完全な国際化対応ではなくて、あくまで日本語
文字集合の UTF-8による符号化のみに対応したものと考えてください。日本語
以外は ISO 8859 の文字にしか対応できおらず、CJK 対応ですらありません。
(中国、韓国、台湾の文字集合には未対応)。

ユニコードにきちんと対応するためには、合字(combining)、 アラビア文字な
どの右から左へ書く書式(RtoL)などの特殊な形式に対応する必要がありますが、
このパッチでは、その辺も全く考慮していません。JIS X 0213 (第3水準)の文
字との変換に必要な一部の合字のみ変換時に特殊処理をしています。

オリジナルの less の新しいバージョンでは、もう少し広い UTF-8の機能に対
応して、どんどん改良されているようなので、ユニコードを本格的に使いたい
場合には、そちらを試してみると良いかもしれません。

----------------------------------------------------------------------
2. japanese83 入力形式の変更

入力形式に "japanese83" を指定した場合に、1983年以前の文字コードのみ有
効にするように変更しました。過去のisoパッチでは名前に反して JIS X 0213
の一面の文字も利用可能となっていました。変更により日本語のメールに使用
できる(ISO-2022-JP)文字のみを指定できるようになっています。

過去の "japanese83" に相当する文字セットを "japanesep1" という名前で指
定できるようにしておきました。古い端末エミュレータのフォントを入れ換え
て拡張しているような場合などにはこちら使用ください。

----------------------------------------------------------------------
3. G1 のデフォルトの変更

今まで入力に iso8 (ISO-2022の 8bit 形式)を指定した場合には、デフォルト
で 8 bit部分(GR/G1)には ISO-8859-1 が指定された ctext 形式でしたが、エ
スケープ・シーケンスまたは環境変数 JLESSPLANESETで指定されていない限り
未指定に変更しました。

合わせて入力に japanese を指定した場合の自動判定に iso8 も追加していま
す。

----------------------------------------------------------------------
4. ISO 8859 文字コードの追加

今までは iso パッチでは ISO_8859-1 から ISO_8859-9 までの文字コードに
対応していましたが、ISO-8859-10,11,13,14,15,16 への対応を追加しました。

----------------------------------------------------------------------
5. JLESSCHARSET, LANG の大文字/小文字

JLESSCHARSET や LANG の文字列比較をする時に大文字/小文字を無視するよう
にしました。

----------------------------------------------------------------------
6. 検索機能の修正

複数文字集合に対応した正規表現ライブラリがない場合には、ASCII 以外の文
字を検索しようとした際には、自動的に正規表現検索が OFFになるよう変更し
ました。

検索の際に JIS X 0213、JIS X 0212 の文字についてもユニファイの対象にな
るように拡張しました。

その他、一部の検索時のバグを修正しました。

----------------------------------------------------------------------
7. xz 対応

lesspipe を使用しない場合でも .xz ファイルの内容を確認できるように機能
追加をしておきました。

----------------------------------------------------------------------
8. その他バグの修正

オリジナルの less の最新版(less-443)からバグフィックっぽい修正をバック
ポートしました。きちんとテストしてないので変なことになっているかもしれ
ません。

======================================================================
ext02.patch

1. CP932 への対応

なんというか Shift_JISX0213なんて見たことない。普通 CP932(Windows_31J)
じゃないの？ という圧力に負けて対応を入れました。UTF8 対応と同じで、か
なり暫定的な実装になっています。

  1.1 出力文字コード指定

出力文字コードとして "cp932" を指定できるにしました。

  1.2 入力文字コード

入力文字コードとして "cp932"と "japanesecp932" を指定できるにしました。
japanesecp932 を指定すると入力を CP932, EUC-JISX0213, UTF8から自動判別
します。CP932 と Shift_JISX0213 は簡単には自動判別できないので、入力に
"japanese" を指定した場合には Shift_JISX0213 で、"japanesecp932"を指定
を指定した場合には CP932 で解釈を試みます。

2. ユニコード文字幅の変更

環境変数 JLESSUTFWIDTH を指定することにより、ユニコード文字の文字幅を
変更できるようにしました。
  normal  ユニコード規格の通常文字幅を使用します。
  cjk     ユニコード規格のCJK文字幅を使用します。
  ja      CJK に加えて JIS X 0213 の文字も全角文字とみなします。

入力文字コードに japaneseや japanesecp932 を指定した場合には、入力が
UTF-8 の場合でも 内部的に ISO2022形式で保持するため、JISの 94x94 集合
に変換可能な文字は上記の設定にかかわらず全角文字として扱われます。

======================================================================
ext03.patch

1. 互換マッピングの追加

Emacs-23 がJIS C 6226-1978(いわゆる旧JIS)の文字について Unicode への変
換に際して JIS X 0208 とは異なるマッピングを使用しているため、これらの
うち JIS X 0213 に対応がなく未定義になる文字を、互換マッピングで包含す
る文字へ変換するようにした。

2. バグの修正

未定義のユニコード文字が正しいコード番号で表示されなくなっていたバグを
修正した。

JIS X 0213 から UTF-8 へ変換する際のバグを修正した。

このファイルの文字コードを UTF-8 から EUC-JP に変更した。

----------------------------------------------------------------------
以上
