« 2007年11月 | トップページ | 2008年2月 »

2008年1月

2008年1月31日 (木)

ScriptGetPropertiesの続き

前回の続きである。

前回はScriptGetPropertiesよって、グローバルスクリプトプロパティテーブル内の各スクリプトの属性を列挙したが、今回は、各Unicodeコードポイントにどのスクリプトが割り当てられているかを調べてみる。これは単純にScriptItemizeによって得られた実行単位のSCRIPT_ANALYSIS構造体のeScriptメンバを調べただけである。

実行結果はこんな感じに。

Scprops2_1

上の画像から、例えば、コードポイントがU+3000~U+D7FFの文字には、12というスクリプトインデックスのスクリプトが割り当てられているがわかる。ちなみに、この範囲には日本語のひらがながなどが含まれているが、前回作成したプログラムからスクリプトインデックスが12というスクリプトの属性を見ると、

Scprops2_2

fComplex=falseと、コンプレックスシェーピングが必要ないことが分かる。前にも書いたがここらへんはUniscribeのバージョンによって変わるので注意を。

で先ほどのコードポイントとスクリプトインデックスの対応をよく見ると、

Scprops2_3

3088など有効な範囲外のスクリプトインデックスが割り当てられているコードポイントがいくつかある。上の例のU+0621~U+065Fはアラビア文字のブロックの一部で、自分のバージョンのUniscribeではサポートされていない文字だからなのか、はたまた、前後に他の文字が必要で通常単独では存在しない文字(今回は、便宜上、1コードポイントづつScriptItemizeを呼び出した)だからなのかは調べていないから分からないが、グローバルスクリプトテーブルにアクセスする時に、ScriptItemizeによって分割される実行単位のスクリプトインデックス(eScript)の範囲をチェックした方が無難そうである。ちなみに、有効なスクリプトインデックスの範囲は、MSDNのヘルプによると、0~piNumScripts-1(piNumScriptsはScriptGetPropertiesの第2パラメータで返される値)である。

せっかくなので、作ったプログラムをダウンロードできるようにしておいた。プログラムはここのGetStringProps.zip。作ったプログラムはこんな感じ。

Scprops2_4

2008年1月29日 (火)

ScriptGetProperties

最近、寒い。寒くて集中する必要がある作業に集中できん。というより、そういう事は避けていた・・・

今回はScriptGetProperties。Uniscribeでは、まず、テキストをScriptItemizeでシェーピングエンジンの変わり目や読む方向の変わり目などで、実行単位(ラン)に分割して処理するが、この分割された実行単位のスクリプトに関する情報にScriptGetPropertiesというAPIを使ってアクセスできる。

具体的には、ScriptGetPropertiesでスクリプトに関する情報が格納されたグローバルスクリプトプロパティテーブル(Global Script Properties Table)へのポインタが返されるが、これと、各実行単位のSCRIPT_ANALYSIS構造体のeScriptメンバに格納されているスクリプトインデックスを使って実行単位のスクリプトの情報にアクセスできる。

で、今回はScrigetGetPropertiesだけを使って、グローバルスクリプトテーブル内の各スクリプトの属性(SCRIPT_PROPERTIES構造体)を表示させてみた。こんな感じに・・

Scprops1_2

言語IDの列はSCRIPT_PROPERTIES.langidメンバをわかり易く表示してある。この列はそのスクリプトで使われる言語を表す。複数の言語で使われるスクリプトの場合、その主な?言語が返される。fComplexメンバはそのスクリプトがComplex Shapingを必要とするかを表す。細かいことはMSDNを参照ということで・・

ちなみに、上の画像は自分のWindows2000の環境上で実行したものであるが、自分のWindows2000上では、計53種類のスクリプトが返された。

で、同じプログラムをWindowsXP SP2上で実行してみる。、

Scprops2

上の画像のように、計74種類のスクリプトが返された。LANG_MONGORIANなどモンゴル語??系のスクプリトが追加されていることもわかる。各スクリプトのスクリプトインデックスやUnicodeコードポイントの範囲などは、Uniscribeのバージョンアップで変わったりするので、公開はされておらず、不定であるので注意を。

« 2007年11月 | トップページ | 2008年2月 »

自作ソフトウェア

無料ブログはココログ

メモ