« Uniscribeの概要 | トップページ | Vista用仮想PC »

2007年6月 6日 (水)

Uniscribeの概要(2)

前回の続きである。

今回は実行単位(ラン)について書いてみる。Uniscribeは様々なスクリプトを処理するために、複数のシェーピングエンジンを用意しているが、ScriptItemizeはテキストをシェーピングエンジンの変わり目または読む方向の変わり目によってテキストを実行単位に分割する。Microsoftのタイポグラフィのサイトによると、少なくとも以下の10個のスクリプトエンジンが存在する???ようである。

  1. Standard Scripts
  2. Arabic Script
  3. Korean Hangul Script
  4. Hebrew Script
  5. Indic Scripts
  6. Khmer Script
  7. Lao Script
  8. Syriac Script
  9. Thaana Script
  10. Thai Script

スクリプトによって最低限必要な言語処理は変わると思うが、前回例に出した、アラビアスクリプトでどのような言語処理が走るか覗いてみる。

上記のサイトによると、以下のような処理が行われるそうである。

Uniscribeoverview2_1_2

ちなみに、前回、アラビア語では、文字の位置によって字形が変わる文字があると書いたが、その形式を

  • 単独形(isolated form)
  • 語頭形(initial form)
  • 語中形(medial form)
  • 語末形(final form)

と呼ぶ。

これらのアラビアスクリプトに必要な言語処理のグリフ置換を行っているのが、最初に示した図の1-bから1-eである。もちろん、日本語にこれらの処理は必要ない。ところで、日本語の処理にはどのスクリプトエンジンが使われるのだろうか??lol

また、標準Win32APIでグリフインデックスを直接処理する時と同様、フォントリンクなどは働かないので、ScriptShapeで欠損グリフが発生した時に、代替フォントを使って表示する必要があれば、自前で実装する必要がある。が、どうもExtTextOutやUniscribeのScriptString系のAPI内部で具体的にどのように代替フォントを探してるか知るよしもないので、それらのAPIと全く同じ結果を得ようとするのが大変らしい・・・

« Uniscribeの概要 | トップページ | Vista用仮想PC »

Windows」カテゴリの記事

コメント

コメントを書く

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

トラックバック

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

この記事へのトラックバック一覧です: Uniscribeの概要(2):

« Uniscribeの概要 | トップページ | Vista用仮想PC »

自作ソフトウェア

無料ブログはココログ

メモ