home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 1996 February
/
VPR9602A.ISO
/
fwindows
/
archive
/
tmedt090.lzh
/
TOOLD101.LZH
/
MAN.LZH
/
YAKC.MAN
< prev
Wrap
Text File
|
1994-11-20
|
11KB
|
204 lines
YAKC(1) Reference Manual YAKC(1)
NAME
yakc - もう1つの漢字コード変換フィルタ(Yet Another Kanji Convert
er)
SYNTAX
yakc [-i eujmstf] [-o eujmstf] [-9@JclnNk874P] [FILES...]
用語
ここでいう「いわゆるJISコード」とは、ISO-2022に基づく日本語文字セ
ットの拡張法のサブセットで、漢字・補助漢字および英数文字セットは
G0に指示してGLに呼び出し、JIS 1バイト仮名文字はG0に指示してGLに呼
び出すか、G1に指示してGLあるいはGRに呼び出すことによって使う方法
を指す。ネットワークニュースfjなどで使われるISO-2022-JPや、1バイ
ト仮名文字を使う場合の「7ビットJIS」「8ビットJIS」などは全てこれ
に含まれる。
また、「EUC」とはここでは「日本語EUC」(UJIS)のことを指すものとす
る。「MS漢字コード」は「シフトJIS」の正式名称である。
DESCRIPTION
yakc は、漢字コードの変換を行うフィルタである。同種のものは既にい
くつもあるので、「もう1つの~」ということでyakc と名乗っている。
yakc は基本的に、ISO 2022に基づいた文字コード体系のうち日本語にか
かわる部分(いわゆるJISコード、及びEUCを含む)あるいはMS漢字コード
を入力とし、いわゆるJISコード、EUC、MS漢字コードのいずれかを出力
とすることができる。日本語文字以外(中国語、ハングル、ラテン文字な
ど)はサポートしていない。また、日本語文字を表すためのコードであっ
ても、ISO 2022に定められていないものはサポートしていない(EBCDICを
日本語拡張したものとか、DECコード、Unicodeなど)。例外として、MS漢
字コードといわゆるNEC漢字コードだけはサポートしている。
漢字コード変換プログラムは数多く出回っているが、中には文字コード
の規格に関する正確な理解を伴わずに、速さのみを売り物にして作られ
た粗雑なものなども見られる。本プログラムはスピード重視のインプリ
メントではない(最近の版のnkfと速度面ではほぼ同等)が、文字コード規
格の解釈を正確に行えることを目指して作成したものである。ISO 2022
に定められた文字コード拡張法を、状態遷移で素直にインプリメントし
ているので、改造しやすく、サポートする文字セットを増やす場合や、
作者に文字コードに関する誤解があってそれを正す場合などにも、容易
に対処できる。ハードの速度向上が急激な現在、ソフトのレベルで高々
数倍程度の速度向上にこだわる理由はないという判断も、本インプリメ
ントが速度を重視しない一つの理由である。
FILESが1つ以上指定されている場合、yakc はファイルを順に読んで、引
数の指定によって漢字コードの変換を行い、標準出力に書き出す。ファ
イル名が「-」と指定されている場合と、FILESが指定されなかった場合
にはyakc は標準入力を読む。
入力・出力の文字コードは以下のようなオプションで指定する。
-i eujmstf: 入力の文字コードの指定。例えば「-i mtf」のように指定
する。e, あるいはuを指定するとEUC、jを指定すると7・8ビットJI
S、m, sを指定するとMS漢字コードとなる。また、以上のいずれも指
定されない場合、自動判別を行う。ISO-2022-JP、およびCompound
Textの日本語は、入力をEUCと指定しても7・8ビットJISと指定して
も認識される。tは入力をテキストモードで読む(^Z以下、およびCR
を読み捨てる)指定、fは入力のバッファリングを行わない指定であ
り、この2つは文字コード指定とは独立に行える。
入力をEUCと指定した場合、初期状態は、G0に英数文字(ASCIIかJIS
ローマ字、但しyakcは両者を区別しない。BUGS参照)、G1にJIS漢字
(78, 83, 90年版は区別しない)、G2にJIS仮名、G3にJIS補助漢字が
指示され、GLにG0、GRにG1が呼び出された状態となる。7・8ビット
JISを指定した場合の初期状態は、G1にJIS仮名、G2にJIS漢字が指示
されること以外は上と同じである。EUCとISO-2022-JPが混在した入
力を扱いたければ、入力をEUCと指定すること(7・8ビットJISを指定
したのでは、EUCの漢字が仮名に化けてしまう)。yakcの入力コード
自動判別機構は、このようなケースも考慮して判定を行う。
-o eujmstf: 出力の文字コードの指定。例えば「-o etf」のように指定
する。eあるいはuを指定するとEUC、jを指定するといわゆるJIS、m,
sを指定するとMS漢字コードを選ぶ。いずれも指定されない場合、
デフォルトとしてDOSでは出力コードはMS漢字コード、UNIXではEUC
になる。
出力をいわゆるJISと指定した場合、デフォルトでは英数文字はASC
II、漢字はJIS83年版、1バイト仮名の出力はESC ( IによってG0に指
示するやり方で行う。また、出力の初期状態ではG0に英数文字、G1
にJIS仮名が指示され、GLにG0、GRにG1が呼び出されているものと仮
定し、それらを実際に呼び出したり指示したりするシーケンスや、
アナウンサシーケンスなどは一切出力しないので、出力はISO-2022
-JPプラス「ESC ( Iによる1バイト仮名のG0への指示」プラス「ESC
$ ( Dによる補助仮名のG0への指示」の範囲内だけで行われる。
tは出力をテキストモードにする(LFコードが来たらCR LFとして出力
する)指定、fは出力のバッファリングを行わない指定であり、この
2つは文字コード指定とは独立に行える。
入力文字コードがMS漢字コード以外と指定された場合に、入力中でyakc
が理解する文字コード切り換えシーケンスは以下の通りである。
ESC ( BかJかH : G0に英数文字セットを指示する。yakcは現在のところ
ASCIIとJISローマ字を区別しないので、BとJのどちらでも同じ意味
になる。ESC ( Hは本来「スウェーデン名前文字」をG0に指示するシ
ーケンスであり、日本語とは関係ないが、これをJISローマ字のG0へ
の指示とする規格の誤解がまかり通っているため、yakcでも特にこ
れを英数文字セットの指示シーケンスとしてサポートしている。
ESC ) BかJかH : 同様に、G1に英数文字セットを指示する。
ESC * BかJかH : G2に英数文字セットを指示する。
ESC + BかJかH : G3に英数文字セットを指示する。
ESC $ ( @かB : G0にJIS漢字を指示する。yakcは現在のところJIS 78年
版漢字と83年版とを区別しないので、@とBのどちらでも同じ意味に
なる。「ESC $ @かB」でも受け付ける。
ESC $ ) @かB : G1にJIS漢字を指示する。
ESC $ * @かB : G2にJIS漢字を指示する。
ESC $ + @かB : G3にJIS漢字を指示する。
ESC ( I : G0にJIS 1バイト仮名を指示する。
ESC ) I : G1にJIS 1バイト仮名を指示する。
ESC * I : G2にJIS 1バイト仮名を指示する。
ESC + I : G3にJIS 1バイト仮名を指示する。
ESC $ ( D : G0にJIS補助漢字を指示する。
ESC $ ) D : G1にJIS補助漢字を指示する。
ESC $ * D : G2にJIS補助漢字を指示する。
ESC $ + D : G3にJIS補助漢字を指示する。
ESC & @ : 無視する。これによって、ESC & @ ESC $ B がG0へのJIS漢字
の指示シーケンスとして扱われることになる。この6バイトは本来J
IS 90年版漢字の指示用シーケンスなのだが、yakcはJIS漢字の83・
78・90年版を全く区別していないので、ESC & @ はあってもなくて
も同じである。
SI(0xf) : G0をGLに呼び出す。
SO(0xe) : G1をGLに呼び出す。
ESC n : G2をGLに呼び出す。
ESC o : G3をGLに呼び出す。
ESC ~ : G1をGRに呼び出す。
ESC } : G2をGRに呼び出す。
ESC | : G3をGRに呼び出す。
SS2(0x8e)あるいはESC Nあるいは0x19: 次の1文字に限りG2を呼び出す。
SS3(0x8f)あるいはESC O : 次の1文字に限りG3を呼び出す。
ESC K : JIS漢字をG0に指示するシーケンスとして扱う。但しこれは規格
にはない。NECがサポートしていたシーケンスである。
ESC H : 英数文字をG0に指示するシーケンスとして扱う。これも規格に
はなく、NECがサポートしていたシーケンスである。
上記の他、次のようなコマンド行オプションも理解する。
-9: 出力がいわゆるJISコードの場合、漢字をJIS90年版にする。
-@: 出力がいわゆるJISコードの場合、漢字をJIS78年版(旧版)にする。
デフォルトは83年版。
-J: 出力がいわゆるJISコードの場合、英数文字をJISローマ字にする。
デフォルトはASCII。
-c: -8 -4 -kと同じ。つまり、-oj -cと指定すると出力はCompound tex
tとなる。
-l: 出力がいわゆるJISコードの場合に、改行文字や改頁文字を出力する
とき、デフォルトでは一旦、GLに英数文字セットが呼び出された状
態に移行してから行うが、このオプションを指定するとそうしない。
-n: 改行・改頁文字の代わりに空白・タブ文字について、-lと同様のこ
とを行う。
-N: 改行・改頁、空白・タブ以外のコントロール文字について、-lと同
様のことを行う。
-k: 出力がいわゆるJISコードの場合に、G1に最初からJIS仮名が指示さ
れているという仮定を置かない。よって、7・8ビットJISで1バイト
仮名を出力しようとする時、その前にG1にJIS仮名を指示するシーケ
ンスを出力する。
-8: 出力がいわゆるJISコードの場合に、JIS仮名を出力するとき、8ビッ
トコードで出力する。
-7: 出力がいわゆるJISコードの場合に、JIS仮名を出力するとき、SI,
SOを用いて7ビットコードで出力する。
-4: 出力がいわゆるJISコードの場合に、JIS漢字を指示するシーケンス
を、「ESC $ @かB」ではなく「ESC $ ( @かB」の4バイトにする。
-P: 出力がいわゆるJISコードと指定されている場合に、漢字を指示する
シーケンスの代わりにESC K、英数文字を指示するシーケンスの代わ
りにESC Hを使い、JIS仮名の出力には8ビットコードを使う。これに
よって出力は「NEC漢字コード」になる。
ワイルドカード、間接引数も利用可能である。
SEE ALSO
wild(5), setarg(5)
BUGS
yakcは、入力全体が1種類の文字コードで表現されているとして扱うため、
入力が行ごとに文字コードが違っていたり、1番目の入力ファイルと2番
目の入力ファイルの文字コードが違っていたりというような入力は、正
しく扱えない。但し、EUCとISO-2022-JPのように、1種類の文字コードの、
異なる2つのサブセットとして理解できるものの場合は、混在は可能であ
る。
入力の文字コード判別は、最初にESC(但しその次に'['が続かないもの),
SI, SO, 8ビットコードのいずれかが現れたところ以後、最大1024バイ
トを読んで行う(但しEOFが現れたらそこまでで判定する。ファイルを跨
って文字コードの判別を行うことはできない)。判定不能な場合、例えば
1024バイト読んでもEUCかMS漢字コードか区別できなかったような場合で
も、どちらかに適当に判断して変換してしまう。
現在のインプリメントでは、入力中のASCIIとJISローマ字、JIS漢字の8
3年版と78年版と90年版の区別は保存しない。たとえ入出力ともJISコー
ドであっても、内部で英数文字をASCIIかJISローマ字のいずれかに、漢
字をJIS83かJIS78(あるいはオプション指定でJIS90)のいずれかに統一し
てから出力してしまう。