言語依存データの外部ファイル化について考える その3
バイナリファイル化について検討しました。
基本的には現在 Qt Brynhildr が内部的に持っている情報をそのままバイナリファイルとして出力したものになります。次回からはなんにも考えず、このファイルを読み込めばよいことになります。ただし、最低限の内容チェックは必要ですけど。
暫定ですが拡張子はこんな感じ。
テキスト形式: Japanese.lng
バイナリ形式: Japanese.lngx
以下書きかけのドキュメントから。
==========================================================================================
[バイナリ形式]
==========================================================================================
起動時に解析結果をバイナリ化し、次回以降はこのバイナリファイルを読み込む。
ただし、テキスト形式が更新されていた場合は再解析し、バイナリファイルも更新する。
このバイナリファイルは基本的にインストールされているマシンでのみ有効とする。
つまり、他のプラットフォームにバイナリファイルをコピーしてはならない。
(データアライン、バイトオーダーはプラットフォームに依存するため)
以下の3つのパートから成る。
1) LFHeader
ファイルヘッダー情報と言語情報フェーズ([Geneal]セクション)の情報を含む。
2) Keys Entries (* keynum)
Eventconverter::KeyEventのデータをkeynum個分を含む。
3) SoftKeys Entrise (* softkeynum)
SoftwareKeyboard::KeyTopInfoのデータをsoftkeynum個分を含む。
------------------------------------------------------------------------------------------
1) LFHeader
------------------------------------------------------------------------------------------
typedef struct {
// File Header
char magic[4]; // file magic
char padding[4]; // padding
int spec; // SpecVersion
int size; // file size
int keynum; // Keys Entry Num
int softkeynum; // SoftKeys Entry Num
// [General] Section
char name[64]; // Name strings
char author[64]; // Author strings
} LFHeader;
-- ファイルヘッダー --
magic : ファイルマジック ("LF00") : 暫定
spac : SpecVersionの値
size : バイナリファイルのトータルサイズ
keynum : 物理キーボード定義フェーズの情報のエントリ数
softkeynum : ソフトウェア・キーボード定義フェーズの情報のエントリ数
-- [Geneal]セクションの情報 --
name : [Geneal]セクションのNameの値(文字列)
author : [Geneal]セクションのAuthorの値(文字列)
------------------------------------------------------------------------------------------
2) Keys Entries (* keynum)
------------------------------------------------------------------------------------------
物理キーボード定義フェーズの情報を解析した結果をバイナリ形式で保持する。
プラットフォーム指定を解決済みのデータとなるためプラットフォーム指定の情報はこれには含まれない。
------------------------------------------------------------------------------------------
3) SoftKeys Entrise (* softkeynum)
------------------------------------------------------------------------------------------
ソフトウェア・キーボード定義フェーズの情報を解析した結果をバイナリ形式で保持する。
------------------------- ここまで ------------------------------------------
テキスト形式を解析する機能の実装はもう少し時間がかかるので、先にバイナリ形式ファイルを読み込むところを作っておこうと思います。
起動時に特定のフォルダに存在する .lngx ファイルをすべてチェックして、選択可能なキーボードタイプのリストを構成し、「サーバに接続」ダイアログで選択可能とする、という流れですね。
現在ソースコード中にハードコーディングしている言語依存情報をファイルに出力させるコードを暫定で入れて、手動でテスト用のバイナリファイル(Japanese,lngxとUS.lngx)を作成しました。
これを使って実装を進めようと思います。
私の環境で Japanese.lngx は3160バイト、US.lngx は3124バイトです。
(追記)
手動で作ったテスト用バイナリが間違えていました。
文字列データを保存していた Qstring (のポインタ) をそのまま保存していたので、文字列データをちゃんと保存するように変更し、作り直しました。少しサイズが増えて、それぞれ3964バイト/3928バイトとなりました。
« 言語依存データの外部ファイル化について考える その2 | トップページ | Brynhildr 「2.2.5」 がリリースされました »
« 言語依存データの外部ファイル化について考える その2 | トップページ | Brynhildr 「2.2.5」 がリリースされました »
コメント