βリリース前の準備など

必要事項


・IVS(異体字セレクタ)への対応準備
・EBCDICへの対応準備

どちらも、将来的な対応事項ですが、DLLの仕様を後から変更しないで済むように、事前に基本対応を済ませておきます。


異体字セレクタ


内部コードはMIXTUREという構造体です。
1文字に対して、異体字セレクタがあれば、親文字とIVSがセットでアプリケーションに返され、それを再度DLLに与えて他の符号にします。

既存処理だと、Unicode領域に2文字以上入っていると処理を放棄するところがあったりしますが(手抜き)、このような場合のために、DLL共通サブルーチン内に「異体字セレクタの削除」の関数を用意しました。

シフトJISなどが特に該当しますが、異体字セレクタがあってもあらかじめ削除することで、処理を変えることなく、親文字に対する符号が出力されるようにしておきました。


TRON 8/9面→IVS含むUnicode


基本仕様


上の試験のために手作業で簡単な変換表を作って、8-2121などで簡単な試験をしました。

基本仕様は次の通り。
・大漢和辭典→Unicodeの並びは、内部用検字番号(後述)順
・TRON→内部用検字番号 は、別途変換表を使う


内部用検字番号

  1 - 49964 大漢和辭典 検字番号
 50001 - 50804 補巻番号 補1~補804
 60001 - 60514 ダッシュ付き 登場順に1~514


処理方法


TRONコードからシリアル値を求め、ここから内部用検字番号を算出し、ここから変換表を参照してUnicodeとIVSを得る。

(1) TRONコード→シリアル値は、標準的手法で1~48,400を求める。
(2) シリアル値→内部用検字番号は表を使う。
  ダッシュ無しは1~、ダッシュ付きは60001~ になるので、次のような表を使う。


// serial internal num
{ 1, 1 }, // 00001-0 ... 00150-0
// 00151 欠番
{ 151, 152 }, // 00152-0 ... 00462-0
{ 463, 60001 }, // 00462-1
{ 464, 463 }, // 00463-0 ... 00628-0
{ 630, 60002 }, // 00628-1
{ 631, 629 }, // 00629-0
{ 632, 60003 }, // 00629-1
{ 633, 630 }, // 00630-0 ... 00927-0


  将来的にTSVから機械的に出力できれば楽そうですが、ロジック書くのが面倒そうなので、TSVの編集と並行してこちらも手作業で作成中。


(3) 内部用検字番号→Unicodeも表を使う。

手作業なので10番まで。いずれは、プログラムで一気に作成されるはず。


/* +0/+5 +1/+6 +2/+7 +3/+8 +4/+9 */
0x4E00+V10, 0x4E01+V10, 0x4E02+V10, 0x20000, // 00000
0x311C , 0x4E03+V10, 0x4E04+V10, 0x4E05+V10, 0x20001 // 00005


V10はIVS-17のこと。Vの後の数字は16進数。
IVSが無い場合は1文字のみ出し、IVSがあればIVSを足して2文字で出す。


こんな感じですが、一応動作しているようです。

この辺の処理はデバッグモードのみで有効にしてあるため、今のところリリースモードでは無効。




EBCDIC


EBCDICは符号体系が全く違います。
内部はISO/IEC 2022を前提とした環境となっているので、次のようにしました。

・EBCDICかどうかのフラグ
・上のフラグが立っていれば、0x00-0x3fと0xffをC0、0x40-0xfeをG0の文字集合として認識

初期設定なども、それを前提としてCCSを設定します。
これで、内部を大幅に変えることなく、フラグ一つでつじつま合わせ可能となりました。

またこれに伴い、改行「NEL」に対応する機能も追加。
EBCDICの標準はNELであり、CRでもLFでもないため。

改行変換機能も、以下のようなラインナップに変更。
 無変換 (標準)
 改行削除
 CR
 CRLF
 LF
 NEL

EBCDICで改行 NEL(0x15) を読み込ませると、他と同様にフラグが立てられる。
Unicodeその他ISO系の符号では、無変換の場合は U+0085 が出力される。オプションで LF を指定すれば、入力された NEL は LF に変換される。

EBCDIC系の変換で概ね困るのはこの改行あたりと思われますが、その辺も適当に処理します。
ちなみに、EBCDIC系で出力する際であっても、オプションで CRLF と指定すれば、指定通りの出力になります。基本的な動作はISO系と変わらないので。
同様に、EBCDIC系からの入力のCRLFもきちんと処理されます。

2009/02/27(金)15:22 |Comments(0) |Trackback(0)

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

▲ページトップ

コメント

コメントの投稿

大漢和辭典 変換表 3月1日 報告 ホーム 大漢和辭典 変換表 2月25日 報告
トラックバック

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

カレンダー

09 | 2017/10 | 11
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