ISO/IEC 2022エスケープシーケンス処理と内部管理法

エスケープシーケンス


ISO/IEC 2022は、エスケープシーケンスで指示し、ロッキングシフトで呼出して使う。
これが基本です。
ロッキングシフトについては、大抵は、あらかじめシフトされているものとする、ということで省略されています。
ISO-2022-JPなどは、規格として、この省略まわりが定められております。


さて、ISO/IEC 2022には、文字集合の指示のために使うエスケープシーケンスは、全部で次の種類が存在します。

最長は7バイトにもなります。

凡例
Fp = 3/0~3/15
Ft = 4/0~7/14


■94 1バイト系

 ESC|02/08~11|Fp
 ESC|02/08~11|Ft
 ESC|02/08~11|02/01~03|Fp
 ESC|02/08~11|02/01~03|Ft
 ESC|02/08~11|02/01~03|02/00~15|Fp
 ESC|02/08~11|02/01~03|02/00~15|Ft
 ESC|02/08~11|02/00|Ft
 ESC|02/08~11|02/00|02/01~03|Ft
 ESC|02/08~11|02/00|02/01~03|02/00~15|Ft

■96 1バイト系

 ESC|02/12~15|Fp
 ESC|02/12~15|Ft
 ESC|02/12~15|02/01~03|Fp
 ESC|02/12~15|02/01~03|Ft
 ESC|02/12~15|02/01~03|02/00~15|Fp
 ESC|02/12~15|02/01~03|02/00~15|Ft
 ESC|02/12~15|02/00|Ft
 ESC|02/12~15|02/00|02/01~03|Ft
 ESC|02/12~15|02/00|02/01~03|02/00~15|Ft

■94 複数バイト系

 ESC|02/04|02/08~11|Fp
 ESC|02/04|02/08~11|Ft
 ESC|02/04|02/08~11|02/01~03|Fp
 ESC|02/04|02/08~11|02/01~03|Ft
 ESC|02/04|02/08~11|02/01~03|02/00~15|Fp
 ESC|02/04|02/08~11|02/01~03|02/00~15|Ft
 ESC|02/04|02/08~11|02/00|Ft
 ESC|02/04|02/08~11|02/00|02/01~03|Ft
 ESC|02/04|02/08~11|02/00|02/01~03|02/00~15|Ft

■96 複数バイト系

 ESC|02/04|02/12~15|Fp
 ESC|02/04|02/12~15|Ft
 ESC|02/04|02/12~15|02/01~03|Fp
 ESC|02/04|02/12~15|02/01~03|Ft
 ESC|02/04|02/12~15|02/01~03|02/00~15|Fp
 ESC|02/04|02/12~15|02/01~03|02/00~15|Ft
 ESC|02/04|02/12~15|02/00|Ft
 ESC|02/04|02/12~15|02/00|02/01~03|Ft
 ESC|02/04|02/12~15|02/00|02/01~03|02/00~15|Ft

■DOCS
 ESC|02/05|F
 ESC|02/05|02/15|F


この符号に先行してIRRが付く事もある。


 ESC|02/06|04/00|ESC|02/04|02/08~11|Ft



一応、現在の実装では、上の全パターンに対応し、適切なCCS-IDを振るよう処理を作ったはず。

実際には、更に長くIバイトが続くエラー文字列があることも想定し、10バイト程度まではIを読み飛ばす処理を加えてあります。


補足1 DRCS


指示機能中間バイトの直後に現われる02/00は、SELECT-DRCS指示子といいます。

JIS X 0202の14.4.2によると、SELECT-DRCS指示子を挿入することでDRCSが使える。
同、参考1によると、終端文字は4/0から63個、とのことなので、4/0~7/14が範囲。
つまりFtのみが想定されていると思われます。
FにFpを用いた場合については記載がなく、未定義です。
開発中の実装は、とりあえずFpもFtも区別せず3/0~7/14の範囲で終端バイトが利用可能になっています。


補足2 DOCS


DOCSについては、15.4.1に「必要ならば、1バイト以上の中間バイト」という記述がある。

現時点では詳細な仕様について明言されていませんが、理論上、こんな符号列が発生しうる。

 ESC|02/05|02/01~03|F
 ESC|02/05|02/01~03|02/00~15|F
 ESC|02/05|02/15|02/01~03|F
 ESC|02/05|02/15|02/01~03|02/00~15|F

今のところ、このような符号があること自体、実装は想定していない。

なお、DOCSの終端バイトの範囲については規定がない。
4/0から始まっているので、Ft、つまり04/00~07/14の範囲と考えて差し支えないと思う。

Fp相当の終端バイトで、ISO/IEC 2022ではない独自のプライベートな符号が使えるのかどうかは、記述がないので不明。



制御機能集合の指示


14.2.1によると、C0/C1への指示/呼出でもIRRが使える。また、終端文字にFpがある事も14.1で示唆されています。

14.1の「参考」には、以下のようにある
「Fバイト(及び存在するならば、Iバイト)の割当ては、上に示す六つの型の一連の終端バイトから得る。その結果、指示機能は、特定の符号要素として適切な型の集合を指示することだけができる」

意味がサッパリ分からないが、FやIは、文字と制御も考え方は同じ、と受け取れる。とするなら、いろいろなオプションが想定され、「想定される符号列」は、以下のようになる。

最初に言い訳だけしておきますが、これが本当に全て規格上実在するかどうかは、私にも良く分かりません。

■C0

 ESC|02/01|Ft
 ESC|02/01|Fp
 ESC|02/01|02/01~03|Ft
 ESC|02/01|02/01~03|Fp
 ESC|02/01|02/01~03|02/00~15|Ft
 ESC|02/01|02/01~03|02/00~15|Fp

■C1

 ESC|02/02|Ft
 ESC|02/02|Fp
 ESC|02/02|02/01~03|Ft
 ESC|02/02|02/01~03|Fp
 ESC|02/02|02/01~03|02/00~15|Ft
 ESC|02/02|02/01~03|02/00~15|Fp

規格書には記載されていないので、恐らく無いとは思いますが、もし万が一C0/C1でもSELECT-DRCS指示子が使えたりすると、さらにカオスな世界になりますね。
まぁ、必要ないんで、そんな機能は今後も不要ですが。




CCS-ID


内部処理について、少しだけ説明しておきます。

内部では、CES-IDとCCS-ID、各32ビットで一意になるように附番されています。

G0~G3、C0、C1に何が指示されているのか、を内部で管理するために、この64ビットの値を使用しているわけです。


CCS-IDは、32ビットの中に、概ね次のような情報を含めています。

・長さ等の情報(4ビット)
 ・1バイト94
 ・1バイト96
 ・複数バイト94^n (2/4を伴うもの)
 ・複数バイト96^n (2/4を伴うもの)
 ・DOCS (2/5を伴うもの)
 ・その他 (ISO/IEC 2022ではない符号管理用)

・集合種別(4ビット)
 ・通常
 ・DRCS (2/0を伴うもの)
 ・戻らないDOCS (DOCSのみ、2/15を伴うもの)

・中間バイト(8ビット)
 ・02/01
 ・02/02
 ・02/03
 ・02/01 02/00~15
 ・02/02 02/00~15
 ・02/03 02/00~15

・終端バイト(8ビット)

・改訂版の識別(8ビット)
 ・IRRの情報(なければ0、あれば1~63)


Unicode系の文字集合などは、その他として、別の附番体系を採用しています。

こんな感じで扱えば、ISO/IEC 2022の文字集合を数値として内部管理できると考えています。

2009/01/18(日)21:49 |Comments(0) |Trackback(0)

製造開発 | プログラミング | コンピュータ | [編集]

▲ページトップ

コメント

コメントの投稿

ARIB STD-B24 ホーム DRCSまわりのシーケンス
トラックバック

この記事にトラックバックする(FC2ブログユーザー)
▲ページトップ

カレンダー

07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -

プロフィール

miraicorp

Author:miraicorp
未来情報産業(株) 社長

主として「ICカードこれひとつ」や「文字、文字コード」処理、時々C++などについて記述しています。

twitterツイッター

管理用

検索フォーム

お知らせ

コメント等お気軽にどうぞ。

気に入ったら拍手して頂けると、今後の記事を書く際の参考や励みになります。

■お仕事を募集しております
ソフトウェア製造の仕事や、原稿執筆の仕事などを随時受け付けております。
お気軽にご相談下さい

■初めての方へ
こまごまと更新しているため、他にも関連する記事があるかもしれません。
「月別アーカイブ」「検索フォーム」「カテゴリ」などをお試し下さい。
トップページはこちら

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

広告枠

メール

メールはこちら

リンク

このブログをリンクに追加する

RSSリンクの表示

QRコード

QR