« ScriptGetProperties | トップページ | OpenTypeフォント »

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

« ScriptGetProperties | トップページ | OpenTypeフォント »

Windows」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1497665/39651803

この記事へのトラックバック一覧です: ScriptGetPropertiesの続き:

« ScriptGetProperties | トップページ | OpenTypeフォント »

自作ソフトウェア

無料ブログはココログ

メモ