\input texinfo	@c -*-texinfo-*-
@setfilename ../info/ISO2022
@settitle ISO2022

@titlepage
@sp 6
@center @titlefont{ISO2022}
@sp 4
@center Version 2.0
@sp 5
@center Ken'ichi HANDA
@center handa@@etl.go.jp
@page

@end titlepage

@node Top, , , (mule)
@section ISO2022

This documents describes briefly ISO2022 encoding mechanism.

Since the following description is intended to be understood easily,
some parts are NOT ACCURATE.  For the thorough understanding, please
refer to the original document of ISO2022.

Character sets (charset) are classified into the following
four categories, 94 charset, 96 charset, 94x94 charset, and
96x96 charset according to the number of characters of
charset.

@table @asis
@item 94-charset
 ASCII(B), left(J) and right(I) half of JISX0201, ...
@item 96-charset
 Latin-1(A), Latin-2(B), Latin-3(C), ...
@item 94x94-charset
 GB2312(A), JISX0208(B), KSC5601(C), ...
@item 96x96-charset
 none for the moment
@end table

The character in parenthesis after the name of each charset
is the final character <F>, which can be regarded as
identifiers of the charsets.  ECMA allocates <F> to each
charset.  <F> is in the range of 0x30..0x7F, but 0x30..0x3F
are only for private use.

Note: ECMA = European Computer Manufacturers Association

There are four registers of charsets, called G0 thru G3.
You can designate (or assign) any charset to one of these
registers.

A code area (one byte) is divided into 4 areas, C0, GL, C1,
and GR, and GL and GR are the places where each register of
charset is invoked.
	C0: 0x00 - 0x1F
	GL: 0x20 - 0x7F
	C1: 0x80 - 0x9F
	GR: 0xA0 - 0xFF
Usually, at the initial state, G0 is invoked into GL, and G1
is invoked into GR.

ISO2022 distinguishes 7-bit environment and 8-bit
environment.  In 7-bit environment, only C0 and GL is used.

Designation is done by escape sequences of the form:
	ESC [I] I <F>
where 'I' is an intermediate characters (0x20 .. 0x2F).  The
meaning of intermediate characters are:
	$ [0x24]: indicate multiple byte charsets (94x94 or 96x96)
	( [0x28]: designate to G0 a 94-charset whose final char is <F>.
	) [0x29]: designate to G1 a 94-charset whose final char is <F>.
	* [0x2A]: designate to G2 a 94-charset whose final char is <F>.
	+ [0x2B]: designate to G3 a 94-charset whose final char is <F>.
	- [0x2D]: designate to G1 a 96-charset whose final char is <F>.
	. [0x2E]: designate to G2 a 96-charset whose final char is <F>.
	/ [0x2F]: designate to G3 a 96-charset whose final char is <F>.
The following rule is not allowed in ISO220 but can be used
in Mule.
	, [0x2C]: designate to G0 a 96-charset whose final char is <F>.

Here are examples of designations.
	ESC ( B : designate ASCII to G0
	ESC - A : designate Latin-1 to G1
	ESC $ ( A or ESC $ A : designate GB2312 to G0
	ESC $ ( B or ESC $ B : designate JISX0208 to G0
	ESC $ ) C : designates KSC5601 to G1

To use a charset designated to G2 or G3, and to use a
charset designated to G1 in 7-bit environment, you must
explicitly invoke G1, G2, or G3 into GL.  There are two
types of invocation, Locking Shift (forever) and Single
Shift (one character only).

Locking Shift is done as follows:
	SI or LS0: invoke G0 into GL
	SO or LS1: invoke G1 into GL
	LS2: invoke G2 into GL
	LS3: invoke G3 into GL
	LS1R: invoke G1 into GR
	LS2R: invoke G2 into GR
	LS3R: invoke G3 into GR

Single Shift is done as follows:
	SS2 or ESC N: invoke G2 into GL
	SS3 or ESC O: invoke G3 into GL

You may realize that there are a lot of ways for encoding
multilingual text along ISO2022.  Now in the world, there
exist many coding systems such as X's Compound Text,
Japanese JUNET code, and so called EUC [Extended UNIX Code],
all of these are the variants of ISO2022.

In Mule, we characterized ISO2022 by the following attributes:
	1. Initial designation to G0 thru G3.
	2. Allow designation of short form for Japanese and Chinese.
	3. Should we designate ASCII to G0 before control characters?
	4. Should we designate ASCII to G0 at the end of line?
	5. 7-bit environment or 8-bit environment.
	6. Use Locking Shift or not.
And the following two are only for Japanese:
	7. Use ASCII or JIS0201-1976-Roman.
	8. Use JISX0208-1983 or JISX0208-1976.
By specifying these attributes, you can create any variant
of ISO2022.

I'll give you several examples.

*junet* -- Coding system used in JUNET.
	1. G0 <- ASCII, G1..3 <- never used
	2. Yes.
	3. Yes.
	4. Yes.
	5. 7-bit environment
	6. No.
	7. Use ASCII
	8. Use JISX0208-1983

*ctext* -- Compound Text
	1. G0 <- ASCII, G1 <- Latin-1, G2,3 <- never used
	2. No.
	3. No.
	4. Yes.
	5. 8-bit environment
	6. No.
	7. Use ASCII
	8. Use JISX0208-1983

*euc-china* -- Chinese EUC.  Although many people call this
as "GB encoding", the name may cause misunderstanding.
	1. G0 <- ASCII, G1 <- GB2312, G2,3 <- never used
	2. No.
	3. Yes.
	4. Yes.
	5. 8-bit environment
	6. No.
	7. Use ASCII
	8. Use JISX0208-1983

*korean-mail* -- Coding system used in Korean network.
	1. G0 <- ASCII, G1 <- KSC5601, G2,3 <- never used
	2. No.
	3. Yes.
	4. Yes.
	5. 7-bit environment
	6. Yes.
	7. No.
	8. No.

Mule creates all these coding systems by default.
