« OpenTypeレイアウトへの道 | トップページ | OpenTypeレイアウトへの道(3)・・・FeatureList »

2008年7月21日 (月)

OpenTypeレイアウトへの道(2)・・・ScriptList

前回の続きであるが、OpenTypeレイアウトテーブルは複雑でどういう順番で書いていけばいいのか悩むsad

で、今回は前回を踏まえて、GSUB、GPOSテーブルで使われる共通のテーブル構成について。ちなみに、GSUBテーブルはグリフ置換のためのテーブル、GPOSテーブルはグリフの位置を正しく決定(ポジショニング)するためのテーブルである。GSUB、GPOSテーブルは、それぞれそのヘッダーにScriptListFeatureListLookupListへのオフセットを持っているのだが、まずは、これら3つの構造から。

まずは、ScriptListについて。

OpenTypeフォントは、様々なスクリプトのグリフをレンダリングするために使われる1つ以上のグリフのグループを持てるのだが、それらはScriptListで定義される。

ScriptListの構造は次のようになる。

ScriptList
名前 説明
USHORT ScriptCount Scriptレコードの数
ScriptRecord ScriptRecords[ScriptCount] Scriptレコードの配列(タグのアルファベット順)

ScriptCountはScriptレコードの数を表し、ScriptRecordsはScriptレコードの配列である。

Scriptレコードの構造は次のようになる。

Scriptレコード
名前 説明
Tag ScriptTag スクリプトタグ
Offset(USHORT) Script ScriptテーブルへのScriptListの先頭からのオフセット

ScriptTagは前回説明した通り4バイトの印字可能なASCII文字で構成されるスクリプトを表す識別子である。ScriptはScriptテーブルへのオフセットである。

Scriptテーブルは、スクリプト内の言語システムを定義し、その構造は次のようになる。

Scriptテーブル
名前 説明
Offset(USHORT) DefaultLangSys デフォルトのLangSysテーブルへのScriptテーブルの先頭からのオフセットまたはNULL
USHORT LangSysCount LangSysレコードの数
LangSysRecord LangSysRecords[LangSysCount] LangSysレコードの配列(タグのアルファベット順)

DefaultLangSysは、スクリプト内のデフォルトの振る舞いを調整するLangSysテーブルへのオフセットを表す。LangSysCount、LangSysRecordsはそれぞれLangSysレコードの数とその配列である。

LangSysレコードの構造は次のようになる。

LangSysレコード
名前 説明
Tag LangSysTag 言語システムタグ
Offset(USHORT) LangSys LangSysテーブルへのScriptテーブルの先頭からのオフセット

LangSysレコードはScriptレコードと似た構成になっており、LangSysTagは言語システムタグ、LangSysはLangSysテーブルへのオフセットを表す。

LangSysテーブルは、前回の言語システムの説明の通り、言語システムで使用するフィーチャーを定義し、その構造は次のようになる。

LangSysテーブル
名前 説明
Offset(USHORT) LookupOrder NULL
USHORT ReqFeatureIndex 必須フィーチャーのフィーチャーインデックス、または、0xFFFF(必須フィーチャーがない場合)
USHORT FeatureCount フィーチャーの数(必須フィーチャーは除く)
USHORT FeatureIndices[FeatureCount] フィーチャーのフィーチャーインデックスの配列

ReqFeatureIndexは、言語システムの必須フィーチャーのインデックスを表し、FeatureCountは言語システムのフィーチャーの数を表し、FeatureIndicesはフィーチャーインデックスの配列である。ちなみに、それぞれのフィーチャーはまだ、説明していないFeatureListで定義されるが、上記のフィーチャーインデックスを使って言語システムのそれぞれのフィーチャーにアクセスされる。

以上を踏まえるとスクリプト、言語システム、フィーチャーの概念的な関係は次の図のようになる。

Script_langsys_feat

次回以降、残りのFeatureList、LookupListを順に見ていこうと思うが、ここらへんは具体的に実際のフォントでの解析結果も示したほうが分かりやすいのであるが、何せT2Analayzerの開発の方が追い付かないbearing。というより、解析するプログラムはだいたい出来てるのだが、GUIをどうするかで悩んでいる。

追記:一応、GUIをこしらえたので、実際にScriptListを解析してみる。まずは、お馴染みのMS ゴシック(MSGOTHIC.TTF)のGSUBテーブルのScriptListから。

Scriptmsgothic

上の画像より、kanaスクリプトが定義され、その中に、JAN言語システムが定義されているのが分かる。また、JAN言語システム内にフィーチャーインデックス0のフィーチャーが定義されている。フィーチャーはFeatureListで定義されているので、フィーチャーインデックス0のフィーチャーがどんなフィーチャーであるかは、FeatureListを解析してみないと分からない。

次は、Tahomaフォント(tahoma.TTF)のGSUBテーブルのScriptList。

Scripttahoma

上の画像よりarabスクリプトが定義されている。その中に言語システムは明示的に定義されていないので、テキスト処理クライアントで利用する場合は、デフォルトの言語システムを利用することになる。そして、そのタグなしのデフォルトの言語システム内に、フィーチャーインデックスがそれぞれ0、1、2、3、4の5つのフィーチャーが定義されているのが分かる。

« OpenTypeレイアウトへの道 | トップページ | OpenTypeレイアウトへの道(3)・・・FeatureList »

フォント」カテゴリの記事

コメント

コメントを書く

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

トラックバック

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

この記事へのトラックバック一覧です: OpenTypeレイアウトへの道(2)・・・ScriptList:

« OpenTypeレイアウトへの道 | トップページ | OpenTypeレイアウトへの道(3)・・・FeatureList »

自作ソフトウェア

無料ブログはココログ

メモ