2003-09-28 Shinji KONO

b encoded ISO-8859-1 MIME

MIME のencoding を信用するようにした方がいいかも...

2002-10-06  Rei FURUKAWA  <furukawa@tcp-ip.or.jp>

	* INSTALL, INSTALL.j, make_test.pl を追加

2002-10-04  Rei FURUKAWA  <furukawa@tcp-ip.or.jp>

	* 入力文字コードが確定する前に h_conv を抜ける場合の
	判定精度を上げた

2002-09-29  Rei FURUKAWA  <furukawa@tcp-ip.or.jp>

	* デフォルトの出力コード選択を config.h に移動
	* SunOS の cc でコンパイルできるようにした
	* -OW をやめて、代わりに --overwrite にした
	* [sw]_iconv から変換部分を別関数に分離した



Date: Thu Sep 26 23:12:03 JST 2002

SourceForge のCVSに登録しました。

cvs -d:pserver:anonymous@cvs.sourceforge.jp:/cvsroot/nkf login 

cvs -z3 -d:pserver:anonymous@cvs.sourceforge.jp:/cvsroot/nkf co nkf-2

Subject: Re: nkf 2.0
From:    kono@ie.u-ryukyu.ac.jp (Shinji KONO)
Date:    Tue, 24 Sep 2002 23:18:54 +0900
Content-ID: <5196.1032877134.1@insigna.ie.u-ryukyu.ac.jp>

河野 真治@琉球大情報工学です。

utf のtable のチェックだけど、やっぱり、落ちまくるので、
一通り、直しました。変なコードの入っている文書は結構多い...

ついでにUTF16も付けました。
    -W16 -w16
みたいにしました。
自動検出はしないけどね。

なんか、Mac OS XのiCal がUTF16を要求するので...
これはiCalのバグでしょうね。


Subject: nkf 2.0
From:    Rei FURUKAWA <furukawa@tcp-ip.or.jp>
Date:    Mon, 16 Sep 2002 06:47:39 +0900

古川です。

河野さんの 2.0 に、こちらでの変更点をマージしました。

http://www01.tcp-ip.or.jp/~furukawa/nkf-utf8/nkf_utf8-2002.09.15.tar.bz2

バグ修正も含むので、是非見ていただけたら、と思います。


2.0 からの変更点は、以下の通りです。

[1] 仕様の有効/無効を切り替える #define を、nkf.c の中ではなく、
 config.h に置くようにしました


[2] UTF8_SUPPORT を UTF8_INPUT_ENABLE と UTF8_OUTPUT_ENABLE に
分けました。これにより、utf-8 出力機能の不要な人は、そちらだけ
を無効にすることができます。


[3] 入力文字コードをオプションで指定した場合には、そのコード
から全く遷移しないようにしました。

v1.92 では、-S などを指定していても、途中で自動判定に戻ること
がありましたが、それを止めました。


[4] 先日の河野さんの、
kono> hconv の中で、igetcしちゃってるみたいだけど、そうすると、
kono> そのigetcに JISの最初のESCが、あったりすると、困るんだよね。

という御指摘に従い、h_conv で ESC を見つけたら、ループから抜ける
ようにしました。


[5] --cap-input, --url-input オプションを新設しました。これにより、
    http://google.com/search?q=%8C%9F%8D%F5
といった入力から
    http://google.com/search?q=検索
を出力するようなことができます。


[6] --no-output, --debug オプション
主にチェック用ですが、2 つ組み合わせると、
    % nkf --no-output --debug hogehoge.txt
    Shift_JIS
のように判定した文字コードが stderr に表示されます。


[7] utf8tbl.c の修正
初期の頃のテーブルには、いくつかの記号で不具合がありました。
こちらでの修正を反映させました。


[8] ロングオプションのバグを修正しました。これは、先日もお伝え
しました通りです。


[9] LSC-C 試食版での動作確認をしました。その際、コンパイルが通ら
なかった部分があったので、修正しました。 (試食版では UTF8 は使え
ませんが)

また、MS-DOS でも OVERWRITE が 動くようにしました。


[10] OVERWRITE のテンポラリファイルを元ファイルと同じディレクトリ
に作るようにしました。

カレントディレクトリに作った場合、
    ファイルシステムをまたぐ rename になる可能性がある
    カレントディレクトリが書き込み禁止だとオープンできない
のが理由です。


-------------------------------------------------------------
それと、2.0 についていくつか思ったことがあります。

[1] 2.0 では -OW で overwrite となっていますが、これはあまり
よくないように思います。

それは、他の文字コードの -OE, -OS などは、「-O と -E (-S)」と
いう意味で使えるのに、-OW だけが「上書き」になってしまうのは、
直交性という点で混乱しそうだからです。

私としては、-R のような別の文字を使うか、または、--overwrite
や --replace のようにロングオプションだけにしてしまうほうが、
不意に元ファイルを書き換えてしまう危険が少ないと思います。


[2] nkf.shar では、あらかじめ NKF.mod/ を作っておかないと、
エラーになってしまいます。まず mkdir するようになっていた方が
よいのではないかと思います。

具体的な修正方法は、私には分かりません。すみません。


[3] アーカイブの中に NKF.mod/Makefile が含まれていますが、これ
は、一般的な環境では必要ないと思います。


-- 
Rei FURUKAWA 
furukawa@tcp-ip.or.jp


Subject: Re: nkf 1.9 MIME-Q decode
From:    kohno@mercury.nikon.co.jp
Date:    Tue, 10 Sep 2002 11:49:48 +0900 (JST)

 河野＠ニコンです。

> Message-ID: <5075.1031469723@insigna.ie.u-ryukyu.ac.jp>, kono@insigna.ie.u-ry
ukyu.ac.jp wrote
> > nkf 1.9.2 の Q-decode のことについて教えてください。
> ようやっと直した版を作りました。

 ありがとうございます。
＃　ver 2.0 になったんですね。

> 時間があればチェックしてみて下さい。

 とりあえずコンパイルして、以前うまくいかなかった '?=3D' を
確かめました。

 当方には（まだ）SunOS4 のマシンが２台あるので、こちらでも
コンパイルしてみました。
 以下のパッチをあてるとコンパイルできますので、
お礼を兼ねてご報告とさせていただきます。

＃　このパッチで HP/UX 10.20, 11.00 の OS 付属の cc でコンパイルできました。



Subject: nkf + utf8
From:    Rei FURUKAWA <furukawa@tcp-ip.or.jp>
Date:    Wed, 21 Aug 2002 03:53:15 +0900

Namazu project の古川と申します。

# 以前 (2000 年 12 月)、nkf 1.92 のバグ報告をした者です。

namazu ML で、「utf-8 のファイルを検索できないか」という話題が
出て、

    nkf が utf-8 を euc-jp に変換できるようになれば、入れ換え
    るだけで (Namazu 側で何もしなくても) 自然と扱えるようにな
    る (もちろん、日本語限定ですが)

と思い、試しに nkf を utf-8 対応にしてみました。

    http://www01.tcp-ip.or.jp/~furukawa/nkf_utf8/

に置いています。utf-8 のファイルを入力すると、自動判別して変換
できるようになっています。(utf-7 や utf-16 などには対応してい
ません)

.SS "kono@csl.sony.co.jp (Shinji Kono) による変更。"


X0201仮名(いわゆる半角かな)はデフォルトでX0208(全角仮名)に変換される。
ただし、 Shift_JIS のX0201仮名
はデフォルトではEUCだと解釈されてしまう。これが望ましくない時には -S や
- -X などのフラグを使えば良い。-Xを指定すると一旦確定した Shift_JIS から
EUCに移行することはない。ESC-(-Iによる X0201は常に認識される。SI/SO
SSOは、-lが指定されていなければX0201と解釈する。

MIME decodeは、ISO-2022-JPのbase64と、ISO-8859-1の16進encodeのみ
decodeする。 MIME decodeは、単純な改行や空白は安全に読み飛ばされる。
ということは、 MIME decode中の空白は保存されない。変換は可逆ではない。
lessやrnで行が分割された時は、 Terminalによって異なる ESC-[-K などが挿入
されるので、完全にはdecode できない。-mN では、チェックが緩いので
decodeできる場合もある。
ISO-8859-1 出力はJIS コード出力としか両立しない。

Fold 機能はfmtと異なり行頭の空白を無視する。禁則処理はあるが指定された
長さ+10で強制改行する。-f60-10 などとすると強制改行の余地(fold-margin)
を調整できる。-f40-0とすると禁則処理なしとなる。

X0201仮名はrot47されない。

.SS nkf 1.6 "kono@ie.u-ryukyu.ac.jp (Shinji Kono) による変更。"

 -B のlevelを0,1,2 に増やした。MIMEのbase64, Q-Encodingを解読する
機能を付けた。ヘッダなどは解読しないので、Encodeされた部分だけを
通す必要がある。 -mB は、nkf1.5と違う動きをするので、-B -m とすること。

.SS nkf 1.6.1

-Z1 でX0208間隔->ASCII spaceの変換をおこなう。
-Z2 でX0208間隔->ASCII space 2個の変換をおこなう。


.SS nkf 1.7

ESC-$-(-B などにも対応するようになった。

copy right の非営利の条件が不要になった。使用時の問い合わせも不要。

Perl Extension として使えるようになった。

.SS nkf 1.9

MIME エンコードの機能時でも、コード変換されしまうので注意。
base64 エンコードでは改行時に先頭に空白が付くのでメールヘッダ
に使用できる。

コード変換モジュールは、サブルーチンを継続によって接続する
形式となった。複数の変換を自由に接続できるようになった。

      getc <-- iconv --> oconv --> other conversion --> putc

という形で、順に呼び出される。


長いオプション名を許すようになった。
    --mac
    --jis
    --unix
など。

.SS
UTF-8 サポートについて

furukawa@tcp-ip.or.jp による。

従来の nkf と同様に、nkf -e として起動すると、自動判別で
UTF-8 と判定されれば、そのまま euc-jp に変換される。


オプションで、文字コードを指定できる。

    -w   出力を utf-8 に指定します
    -W   入力を utf-8 と仮定します

特に自動判別、コード混在、エラー処理系には判定を失敗することがある。


  -Z3 オプションの新設
        X0208 の '＞', '＜', '”', '＆'  をそれぞれ
        '&gt;', '&lt;', '&quot;', '&amp;' に変換します

.SS nkf 2.0


newline を保存する folding -F。fmtに近い動作をする。


folding のマージン。-f60-0 などと、0にすると禁
則せずに、強制的にfoldingする。携帯にメールを送るときに使う。


nkf -f40-0
などとしてメールを 40 文字づつ切り出して、
「Subject 160 文字目から 199 文字目まで」
「本文    200 文字目から 239 文字目まで」
とする。


MIME関係


fixed mime mode ( -mQ ) で =? で Q-encode が抜けてしまうバグの修正。


Q encode の Soft Wrap に対応。


MIME encode のWrapでは、先頭に一文字の空白挿入。
した。あA の MIME 変換は、A を含んで変換しないといけ
ないが、対応していない。RFCには反した動作だが、
encoded word 間のwhite spaceは無視される。
nkf_test.pl では、MIMEの空白を削除してから比較している。


non-strict mime -MN では、空白、改行をまたいで、base64 encoding
を解読する。これで、スクリーンからcut&pasteで
デコードすることも可能。止まらない可能性あり。


その他


nkf_test.pl のバグチェックを増やした。
test が失敗したときにdiffを取るようにした。
make_test.pl でテスト作成可能。


Perl moduleで、\\0を含む文字列も変換できるようになった。
Perl XSでの文字列の長さの扱いを修正。

NKFをNKF.modにしたので、Mac OS X でMakeでコンパイル化。


rot13が1.9で動かなくなっていたのを修正。


-Z の間隔やおかしな変換の修正


hiragana/katakana 変換ができるようになりました。
   -h1   --hiragana カタカナ->ひらがな
   -h2   --katakana ひらがな->カタカナ
   -h3   --katakana-hiragana カタカナ<->ひらがな

--overwrite で、引数のファイルを直接、置き換えることができます。

.SS nkf 2.0.4


Shift_JIS の FAxx-FCxx について、普通の式では euc に変換できませんが、CP932 で同値な文字に読み換えて変換します。この動作を無効にするには、--no-cp932 をつけてください。


perl module に
   nkf_continue     オプション、自動判別の状態などを引き継いで変換
   inputcode        自動判別結果の文字コードを返す
を追加しました。


--numchar-input オプションを新設
    mhonarc など、日本語を UTF-16 の &#....; のパターンで出力するものを変換します。


--exec-in, --exec-out オプションを新設 (config.h で EXEC_IO を define してコンパイルした時のみ有効)

    nkf -e --exec-in cmd args...
    とやると、cmd の出力を nkf の入力とします。

    nkf -e --exec-out cmd args...
    とやると、nkf の出力を cmd の入力とします。


.SS nkf 2.0.5


--cp932inv というオプションをつけると Shift_JIS への変換の際、EDxx-EFxx については、
CP932 で同値な FAxx-FCxx の文字に変換します。


--guess または -g というオプションをつけると自動判別の結果を出力します。


--prefix= というオプションをつけると、EUC-JP から Shift_JIS への変換の際、2 バイト目
に現れた文字の前にエスケープ文字をつけることができます。
引数の 1 文字目がエスケープ文字、2文字目以降にエスケープされるべき文字を指定します。

例えば、

--prefix=\$@ とすると、Shift_JIS の 2 文字目に $, @ が来たら、その前に \ が挿入されます
--prefix=@@ とすると、Shift_JIS の 2 文字目に @ が来たら、その前に @ が挿入されます


-w8, -w16B, -w16L, -W8, -W16B, -W16L というオプションを追加しました。


--ms-ucs-map というオプションを付けると、
MicrosoftのUCSマッピング互換の変換を行います。

.SS nkf 2.0.6


=item B<ひらがなカタカナ変換のドキュメント>

ひらがなカタカナ変換のドキュメントが逆になっていたので、これを修正しました。
正しいドキュメントは以下の通りです。
   -h1   --hiragana カタカナ->ひらがな
   -h2   --katakana ひらがな->カタカナ
   -h3   --katakana-hiragana カタカナ<->ひらがな


=item B<--no-best-fit-chars オプションの追加>

Unicode からの変換の際に、往復安全性が確保されない文字の変換を行いません。
Unicode から Unicode の変換の際に -x と共に指定すると、
nkf を UTF 形式の変換に用いることができます。
（逆に言えば、これを指定しないと一部の文字が保存されません）

パスに関わる文字列を変換する際には、このオプションを指定することを強く推奨します。


=item B<--in-place[=SUFFIX] オプションの追加>

タイムスタンプを保持する --overwrite に対し、
タイムスタンプを更新する --in-place オプションを追加しました。


=item B<fallback オプションの追加>

--fb-{skip, html, xml, perl, java, subchar} オプションを追加しました。
Unicode から Shift_JIS, EUC-JP, ISO-2022-JP に変換する際に、
変換できなかった文字をどう扱うかを指定できます。


=item B<--ic --oc オプションの追加>

--ic=<input codeset> --oc=<output codeset> オプションを追加しました。
Shift_JIS, CP932, EUC-JP, CP51932, eucJP-ms, ISO-2022-JP,
UTF-8N (UTF-8), UTF-8-BOM,
UTF-16BE, UTF-16BE-BOM(UTF-16), UTF-16LE, UTF-16LE-BOM
入力には UTF8-MAC も指定することができます。


=item B<マッピングの追加、変更>

JIS 系の文字コードと Unicode との対応を定義することにしました。
これらから Unicode への decode は、
定義されている範囲での変換が正しく行われる事を保障します。
定義されていない範囲での変換は保障しません。
Unicode からの encode は、定義されている範囲での変換が正しく行われる事を保障し、
定義されていない範囲での変換はエラーとなり（fallback 可能）、
Unicode として不正な文字はスキップされる事を保障します。


その他、"Q" encodingのデコードやfold-margin等のバグを修正。

.SS nkf 2.0.7

* CP51932 の文字が fallback されないのを修正。
* gcc 以外でコンパイルできないのを修正。
* ANSI C 化.
* MIME encode の改行周りのバグを修正。
* -t2MB でバイナリファイルも base64 できるようになった。

.SS nkf 2.0.8

* --guess で改行コードを表示

.SS nkf 2.0.9

-Z4 オプションを追加しました。JIS X 0208 カタカナを JIS X 0201 カタカナに変換します。(つまりカタカナの全角半角変換)

-g=0, -g=1, --guess=0, --guess=1 オプションを追加しました。改行コードの推測を行います。

コンパイルオプションをいくつか追加しました。詳細は config.h をご覧ください。

その他のバグフィックスを行いました。詳細はgit のログをご覧ください。

ライセンス変更を、独自ライセンスから zlib ライセンスに変更しました。事実上の許諾条件は変わらないため、ライセンス確認の手間の削減がメリットだと思われます。

バージョン管理システムを CVS から git に変更。

.SS nkf 2.1.0

Makefile に install という target を追加

8bit JIS 内のいわゆる半角カナを解釈するようにした

Perl モジュールが作成できなかったのを修正

-Z1 と -Z2 が -Z0 の効果を持ってなかったのを修正

UTF-16 と UTF-32 の読み込み指定が出来ていなかったのを修正

UTF-32 で BOM を出力していなかったのを修正

4 バイト UTF-8 の guess と出力ができなかったのを修正

.SS nkf 2.1.1

Shift_JIS の alias に MS_Kanji を追加

eucJP-ms と eucJP-ascii がいわゆる半角カナを全角に変換していたのを修正

CP50220 がいわゆる半角カナを全角に変換していなかったのを修正

その他のバグ修正

.SS nkf 2.1.2

Q-encoded UTF-8 のデコードが壊れていたのを修正 [nkf-bug:55125]

.SS nkf 2.1.3

NKF_python をマージした
http://sourceforge.jp/ticket/browse.php?group_id=248&tid=27841

guess オプションの強化
http://sourceforge.jp/ticket/browse.php?group_id=248&tid=26325
http://sourceforge.jp/ticket/browse.php?group_id=248&tid=26325

その他バグの修正
http://sourceforge.jp/projects/nkf/scm/git/nkf/
