claws-mail/libkcc
Alfons Hoogervorst c8723927c5 removed
2001-04-23 22:06:36 +00:00
..
.cvsignore removed Makefile.in 2001-04-23 21:58:59 +00:00
buffer.c Imported version 1.0 2001-04-19 12:21:46 +00:00
check.c Imported version 1.0 2001-04-19 12:21:46 +00:00
compare.c Imported version 1.0 2001-04-19 12:21:46 +00:00
dec.c Imported version 1.0 2001-04-19 12:21:46 +00:00
euc.c Imported version 1.0 2001-04-19 12:21:46 +00:00
filter.c Imported version 1.0 2001-04-19 12:21:46 +00:00
getstr.c Imported version 1.0 2001-04-19 12:21:46 +00:00
guess.c Imported version 1.0 2001-04-19 12:21:46 +00:00
jis.c Imported version 1.0 2001-04-19 12:21:46 +00:00
kcc.h Imported version 1.0 2001-04-19 12:21:46 +00:00
libkcc.h Imported version 1.0 2001-04-19 12:21:46 +00:00
Makefile.am Imported version 1.0 2001-04-19 12:21:46 +00:00
Makefile.std Imported version 1.0 2001-04-19 12:21:46 +00:00
out.c Imported version 1.0 2001-04-19 12:21:46 +00:00
outchar.c Imported version 1.0 2001-04-19 12:21:46 +00:00
outsjis.c Imported version 1.0 2001-04-19 12:21:46 +00:00
README Imported version 1.0 2001-04-19 12:21:46 +00:00
ROUTINE Imported version 1.0 2001-04-19 12:21:46 +00:00
setfunc.c Imported version 1.0 2001-04-19 12:21:46 +00:00
showcode.c Imported version 1.0 2001-04-19 12:21:46 +00:00
sjis.c Imported version 1.0 2001-04-19 12:21:46 +00:00
test.c Imported version 1.0 2001-04-19 12:21:46 +00:00
test_check.c Imported version 1.0 2001-04-19 12:21:46 +00:00
test_file Imported version 1.0 2001-04-19 12:21:46 +00:00
test_file.sjis Imported version 1.0 2001-04-19 12:21:46 +00:00
test_filter.c Imported version 1.0 2001-04-19 12:21:46 +00:00
testfile Imported version 1.0 2001-04-19 12:21:46 +00:00

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

************************************************
libkcc README
************************************************
1999-04-20

これは、kcc-2.3 を、lib 化したものです。
ライセンスは、元の kcc-2.3 が GPL2 ですので、それに従います。

まだ kcc の全ての引数は使用できませんが、ま、とりあえずバージョンということで。

--------------------------
1. 使いかた(関数の説明)
--------------------------
漢字コード判定を行う関数と、漢字変換を行う関数の二つを用意しました。

コード判定:
 unsigned KCC_check(char *s, int extend);

変換: KCC_filter()
 int KCC_filter(char *ddd, char *outcode_name, char *sss, char *incode_name, int extend, int zenkaku, int gaiji);

--------------------------
1-1. コード判定関数
--------------------------
unsigned KCC_check(char *s, int extend);

コードを調べたい 文字列(char * 型)を 第1引数に与えると、コードが返ります

  code = KCC_check(s,0);

第二引数の `int extend' は、 0 か 1 です。普通、0 を与えておけばよいです
  1  オリジナルの kcc -x と同様の動きをするはず
  0  通常はこちらを指定しておけばよいでしょう

返される値は、次のようになっています
--------------------------
1-2. コードの番号
--------------------------
#define BINARY          0x100
#define ASCII           0x00

#define NONASCII        0x01    /* non-ASCII character */
#define JIS             0x02    /* JIS */
#define ESCI            0x04    /* "ESC(I" */
#define ASSUME          0x08    /* assumed EUC (or DEC) */
#define EUC             0x10
#define DEC             0x20
#define SJIS            0x40
#define JIS8            0x80    /* 8-bit JIS */
#define BIT8            (EUC | DEC | SJIS | JIS8)

--------------------------
1-3. 漢字変換関数
--------------------------
 int KCC_filter(char *ddd, char *outcode_name, char *sss, char *incode_name
                                         , int extend, int zenkaku, int gaiji);

変換したい文字列 (char *) 型 を sss
変換後の文字列 (char *) 型 を ddd
とします。

返り値は漢字コード(1-2) が返りますが、
失敗すると -1 が返ります。
0 が返る場合は ASCII だという事に注意してください。

例:
i = KCC_filter(d, "EUC", s, "AUTO", 0,0,0);


!注意:
  ddd は変換文字を納めるに充分な領域があらかじめとっていなければなりません。
  この関数は、strcpy みたいなもので、sss を変換したものを、ddd のオーバーフローを
  チェックする事無く、 ddd に順次コピーしていくのです!


outcode_name, incode_name は、漢字のコードの指定です。
  outcode_name 出力コードを指定
  incode_name 入力コードを指定

コードは、以下の "文字" で、指定します。
  漢字コード:	文字:	説明
  -----------------------------------------------------------------
  EUC		"EUC"	euc
  SJIS		"SJIS"	sjis
  JIS 8bit	"JIS8"	8 bit JIS
  JIS		"JIS"	jis
  JIS ESCI	"JISI"	jis で、ESC(I を使用しているもの

  自動判別	"AUTO"	incode_name にのみ有効。コードを自動判別する

  JIS, JISI, JIS8 だけは、次の特別な指定を行う事ができます。
  これは、outcode_name にのみ有効なオプションで、
  オリジナルの kcc の kcc -j[B@+][BJH] 指定と同じになります

  JIS[B@+][BJH]
  JISI[B@+][BJH]
  JIS8[B@+][BJH]

   第一
    B: 第1次漢字表示
    @: 第2次漢字表示
    +: 第3次漢字表示
   第二
    B: 英数は ASCII 指定
    J: 英数は JIS ローマ字指定
    H: 英数は スウェーデン
  -----------------------------------------------------------------
    

第5引数の `int extend' は、 0 か 1 です。普通、0 を与えておけばよいです
  1  オリジナルの kcc -x と同様の動きをするはず
  0  通常はこちらを指定しておけばよいでしょう

第6引数の `int zenkaku' は、 0 か 1 です。普通、0 を与えておけばよいです
  1  オリジナルの kcc -z と同様の動きをするはず
  0  通常はこちらを指定しておけばよいでしょう

第7引数の `int gaiji' は、 0 か 1 です。普通、0 を与えておけばよいです
  1  オリジナルの kcc -n と同様の動きをするはず
  0  通常はこちらを指定しておけばよいでしょう

--------------------------
2. Make
--------------------------
edit Makefile
shell> make
shell> ls libkcc.a

--------------------------
3. インストール
--------------------------
shell> make install

インストールされるのは、libkcc.a と kcc.h だけです

--------------------------
4. TODO
--------------------------
1. gcc -Wall でいっぱいウォーニング
2. オリジナルの kcc.c を複数のファイルにわけたのは、私の趣味ですが、
   おかげで、関数の引数が多くなってしまいました。
   遅くなる?
3. 渡された文字列の処理がちょっとやぼったいです。
   危険な部分があるかもしれません。(euc.c,jis.c,sjis.c,dec.c)
4. 半角文字を全角にしたいけど...
5. たぶんあるだろう bug fix

以上、どなたか達者な方、よろしく。

--------------------------
5. 例
--------------------------
test.c, test_check.c, test_filter.c があります

make test
make test_filer
make test_check

--------------------------
--------------------------

takeshi@SoftAgency.co.jp
http://www.softagency.co.jp/mysql/

************************************************
オリジナルの README
************************************************

kccは自動判別機能つき漢字コードフィルターです。

【説明】

    日本語EUC7ビットJIS8ビットJISシフトJISが扱えます。

    「半角かな」にも対応しています。

    詳しくは日本語オンラインマニュアルで見て下さい。

【インストール】

	$ make install

    でmakeとインストールが行われます。

	$ make install.man

    で,日本語マニュアルのインストールが行われます。
    日本語マニュアルのサブディレクトリーがjapaneseでないときには

	$ make JMANDIR=ja.JP_EUC install.man

    などとしてください。


************************************************
オリジナルの kcc.jman を catman にしたもの
************************************************



KCC(L)                                                     KCC(L)


名名前前
       kcc - 自動判別機能つき漢字コード変換

形形式式
       kkcccc [ --_I_Occhhnnvvxxzz ] [ --bb _b_u_f_s_i_z_e ] [ _f_i_l_e ] ...

機機能能説説明明
       kkcccc は,指定した _f_i_l_e を順番に読み込み,漢字コードを変換し
       て標準出力に出力するフィルターです。ファイルの指定がないと
       き, あるいはファイル名として -- が指定されたときには標準入
       力から読み込みます。入出力の漢字コードはオプションで指定し
       ますが,入力コードを指定しないとファイルごとの自動判別にな
       ります。

       使える漢字コードは JIS7 ビットおよび 8 ビット),シフ ト
       JISEUCDEC  です。入力コードはEUCDEC あるいはシフト
       JIS のいずれかと 7 ビット JIS との組み合せに限り,混在が可
       能です。JIS の半角仮名は SSII/SSOOEESSCC((II ともに認識されます。

オオププシショョンン
       --_O
       --_I_O    _I で入力漢字コードを_O で出力漢字コードを指定し ま
              す。 入 力 コードの指定がないときには自動判別に,ま
              た,どちらも指定しないとき出力コードは 7 ビット JIS
              になります。

              入力コードを指定する _I は以下のうちの 1 つです。

                 ee      EUC7 ビット JIS 混在可)
                 dd      DEC7 ビット JIS 混在可)
                 ss      シフト JIS7 ビット JIS 混在可)
                 jj77 または kk
                        7 ビット JIS
                 88      8 ビット JIS

              出力コードを指定する _O は以下のうちの 1 つです。

                 ee      EUC
                 dd      DEC
                 ss      シフト JIS
                 jj_X_Y または 77_X_Y
                        7 ビット JISSSII/SSOO による JIS 仮名指示)
                 kk_X_Y    7 ビット JISEESSCC((II による JIS 仮名指示)
                 88_X_Y    8 ビット JIS

              _O  中の _X_Y でJIS コード出力でのエスケープシークェ
              ンスが指定できます。省略すると BBJJ とみなされま す。
              なお,補助漢字指定は EESSCC$$((DD で固定です。

                 _X      漢字指定
                      BB      EESSCC$$BB第 2 次規格漢字指示)
                      @@      EESSCC$$@@(第 1 次規格漢字指示)
                      ++      EESSCC&&@@EESSCC$$BB第 3 次規格漢字指示)
                 _Y      英数字指定



Y. Tonooka                1992年11月19日                        1





KCC(L)                                                     KCC(L)


                      BB      EESSCC((BBASCII 指示)
                      JJ      EESSCC((JJJIS ローマ字指示)
                      HH      EESSCC((HHスウェーデン名前用文字指示

       --vv     入力コードの判別結果を標準エラー出力に出力します。

       --xx     拡 張モード。入力コードの自動判別で,外字や拡張文字
              領域EUC の外字・未定義の半角仮名・制御文字 C1  の
              各領域,およびシフト JIS の拡張文字領域)を認識しま
              す。DEC と EUC との判別はこのモードでのみ,なされま
              す。

       --zz     縮 小モード。入力コードの自動判別で半角仮名を認識し
              ません7 ビット JIS を除く)。半角仮名を含ま な い
              ファ イルの場合,これを指定すると判別の確度が高まり
              ます。

       --hh     半角仮名を DEC に変換すると全角のカタカナに変換され
              ま すが,このオプションを指定するとひらがなになりま
              す。

       --nn     外字・拡張文字・補助漢字領域を“□”に,半角仮名 の
              未定義領域を半角の“・”に変換します。

       --bb _b_u_f_s_i_z_e
              入 力の判別がつかないあいだ入力をためておくバッファ
              ーの大きさを指定します。省略時は 8k バイトです。

       --cc     変換を行わず,入力コードの種類だけを調べ,結果を 標
              準 出 力 に出力します。通常の自動判別の場合とは異な
              り,ファイルは最後まで調べられます。ただし,途中 で
              コ ード体系に矛盾が見つかった場合には読み込みを中断
              し“data”と表示します。--xx--zz 以外のオプションは無
              効になります。

使使用用例例
       %% kkcccc --ee _f_i_l_e
              入力コード自動判別で出力コードは EUC

       %% kkcccc --ssjj _f_i_l_e_1 _f_i_l_e_2
              シフト JIS のファイル 2 つを JIS へ変換し連結

       %% _c_o_m_m_a_n_d || kkcccc --kk++JJ
              _c_o_m_m_a_n_d 出力を JISJIS 第 3 次規格漢字指示JIS ロ
              ーマ字指示EESSCC((II による JIS 仮名指示)へ

       %% kkcccc --cc _f_i_l_e
              _f_i_l_e のコードを判別する(変換は行わない)

補補足足説説明明
       入力コードの自動判別は通常の文書においてはほぼ確実に行えま
       すが,以下のような問題を含んでいます。

       7  ビット JIS はエスケープシークェンスによるモード切り替え



Y. Tonooka                1992年11月19日                        2





KCC(L)                                                     KCC(L)


       によっていて確実に判別されます。EUC と DEC は根本的には 同
       じものです(以下 EUC 系と呼ぶ。一方8 ビット JIS の半角
       仮名はシフト JIS の半角仮名と同じです(同シフト JIS 系)。
       と ころが,共に 8 ビットコードである EUC 系とシフト JIS 系
       は,領域が広く重なっていて背反しています。つまり,コードの
       自動判定の問題点はこの 2 つの判別にあります。

       EUC  系/シフト JIS 系の判別は行単位で行い,「シフト JIS 系
       でない」あるいは「EUC 系でない」と分かった時点で確定としま
       す。どちらにも矛盾する行が最初に現れたときには“data”扱い
       になり,出力内容は保証されません。

       最初に 8 ビットの漢字コードが現れてから EUC 系/シフト  JIS
       系の判別がつくまでは,変換を保留し,入力をバッファーにため
       ておきますが,これがいっぱいになると EUC 系であると決め つ
       けて変換を強行します。根拠は以下のとおりです。通常の漢字入
       りの文書は JIS 非漢字か JIS 第 1 水準の漢字をまず含んで い
       る と考えられますが,シフト JIS の場合,これらの文字は一部
       を除いて EUC 系の領域とは重なっていないため,確実に判別 さ
       れ ます。つまり,判別できないときには EUC である可能性が高
       いわけです。

       8 ビット JIS で,半角仮名が必ず偶数個連続して現れている と
       き はEUC  の漢字であると誤認されてしまうので注意が必要で
       す。

       入力が半角仮名を含まないときには --zz オプションの縮小モード
       を利用すると判別の確度が高まります。これは重なる領域が JIS
       第 2 水準漢字内に限定されるからです。

       シフト JIS の拡張領域・EUC の外字領域・EUC の制御文 字  C1
       の領域・EUC の半角仮名の未定義領域は,自動判別の認識対象に
       は入らないので,これらを含む入力では誤った判別がなされてし
       ま い ます。このときは --xx オプションで拡張モードを指定する
       か,入力コードを明示的に指定してください。

関関連連項項目目
       ccaatt(1)

そそのの他他
       通常,外字・拡張文字・補助漢字領域はそれぞれの対応する領域
       に 投影されます。ただし,シフト JIS への変換で拡張文字領域
       からはみ出す文字は16 進で FCFC になります。 EUC  と  DEC
       の 制 御 文字領域 C1 は, JIS へ変換する場合はそのままです
       が,シフト JIS への場合には削除されます。また,半角仮名 の
       未 定義領域は,シフト JIS に変換すると,半角の“・”に置き
       換えられます。半角仮名を DEC に変換すると全角の仮名に変 換
       されます。

       JIS コード出力の場合,改行・タブ・抹消などの制御文字や空白
       (半角)は,英数字モードで出力されます。

       入力コードの自動判別を誤った場合,また,それぞれの文字セッ
       トに未定義の文字が入力された場合,出力がどうなるかは不定で



Y. Tonooka                1992年11月19日                        3





KCC(L)                                                     KCC(L)


       す。
























































Y. Tonooka                1992年11月19日                        4