« 2008年7月 | トップページ | 2008年9月 »

2008年8月

2008年8月19日 (火)

OpenTypeレイアウトへの道(5)・・・GSUBテーブル

ということで、やっとGSUBテーブルに突入。

GSUBテーブルはフォントでサポートされる様々なスクリプトや言語システムを表すためのグリフ置換(Glyph Substitution)の情報を定義するテーブルであり、様々な言語システムでグリフ置換が必須である。

GSUBテーブルはScriptListFeatureListLookupListへのオフセットを定義するGSUBヘッダーで始まり、GSUBヘッダーの構造は次のようになる。

GSUBヘッダー
名前 説明
Fixed Version バージョン番号
Offset(USHORT) ScriptList ScriptListへのGSUBテーブルの先頭からのオフセット
Offset(USHORT) FeatureList FeatureListへのGSUBテーブルの先頭からのオフセット
Offset(USHORT) LookupList LookupListへのGSUBテーブルの先頭からのオフセット

また、前回説明したが、Lookupテーブルは1つ以上のLookupサブテーブルによって定義され、ルックアップタイプによってそのLookupサブテーブルの構造が違うが、グリフ置換でサポートされているルックアップタイプは次のようになる。

ルックアップタイプ
タイプ 説明
1 単独置換(Single Substitution) 1つのグリフを他の1つのグリフで置き換える
2 複数置換(Multiple Substitution) 1つのグリフを複数のグリフで置き換える
3 代替置換(Alternate Substitution) 1つのグリフを複数のグリフの内の1つのグリフで置き換える
4 合字置換(Ligature Substitution) 複数のグリフを1つのグリフで置き換える
5 文脈依存置換(Contexual Substitution) 1つ以上のグリフを文脈に応じて置き換える
6 連鎖型文脈依存置換(Chaining Contexual Substitution) 1つ以上のグリフを連鎖文脈に応じて置き換える
7 拡張置換(Extension Substitution) 他の置換のための拡張メカニズム
8 逆順連鎖型文脈依存単独置換(Reverse Chaining Contexual Single Substitution)
9以上 予約済み 将来の使用

ルックアップタイプ1の単独置換は1つのグリフを他の1つのグリフに置き換える置換で、例えば、縦書きために横書きのグリフを縦書きのグリフを置き換えたりするために使われる。ルックアップタイプ2の複数置換は、1つのグリフを複数のグリフに置き換える置換で、合字分解などで使われる(例えば、合字のグリフ"fi"を"f"と"i"の2つのグリフに置き換える等)。ルックアップタイプ4の合字置換は、複数のグリフを1つのグリフに置き換える置換である(例えば、"f"と"i"の二つのグリフを"fi"という単一のグリフに置き換える等)。ルックアップタイプ7の拡張置換は、他の置換のための拡張メカニズムで、通常のLookupサブテーブルは16ビット(USHORT)のオフセット位置に格納されるが、32ビットのオフセット位置に格納するために使われる。

各ルックアップタイプのLookupサブテーブルの構造だが、ここでは、ルックアップタイプ1の単独置換のLookupサブテーブルの構造だけを見てみる。ルックアップタイプ1の単独置換のLookupサブテーブルのフォーマットは2つあり、その構造はそれぞれ次のようになる。

ルックアップタイプ1(単独置換) フォーマット1
名前 説明
USHORT SubstFormat フォーマット識別子=1
Offset(USHORT) Coverage CoverageテーブルへのLookupサブテーブルの先頭からのオフセット
USHORT DeltaGlyphID グリフインデックスのデルタ値

単独置換フォーマット1は出力グリフのグリフインデックスを計算して求めるのだが、出力グリフのグリフインデックスを求めるには、定数のデルタ値(DeltaGlyphID)を入力グリフのグリフインデックスに加算する。Coverageはグリフ置換を適用するグリフを定義するCoverageテーブルへのオフセットである。

ルックアップタイプ1(単独置換) フォーマット2
名前 説明
USHORT SubstFormat フォーマット識別子=2
Offset(USHORT) Coverage CoverageテーブルへのLookupサブテーブルの先頭からのオフセット
USHORT GlyphCount Subsitutes配列内のグリフインデックスの数
GlyphID(USHORT) Substitutes[GlyphCount] Substitutes配列(カバレッジインデックス順)

単独置換フォーマット2はフォーマット1より融通の利くフォーマットであるが、より多くのスペースを必要とする。

ということで、実際にフォントを解析してみるのだが、まずは、前回のMSゴシックのGSUBテーブルのLookupListの解析結果を再掲載する。

Lookupmsgothic

このインデックス0のルックアップはkana->JAN言語システム内で定義されている縦書きのためのvertフィーチャーで使われているルックアップであるが、今回の説明を踏まえて、そのルックアップタイプが1(単独置換)であることも分かる。また、Lookupサブテーブルは1つである。

次にこのLookupサブテーブルの中身を見てみる。

Gsub_1

上の画像より、例えばグリフインデックス1941のグリフのエントリがCoverageテーブルに含まれている(カバレッジインデックスは42)ので、このグリフはグリフ置換の対象になるが、このグリフがグリフ置換によって、グリフインデックス19641のグリフに置換されることも分かる(Substitutes配列のインデックス42のエントリ)。

次にこれらグリフインデックス1941、19641のグリフをglyfテーブルで見ると、

Gsub_2

Gsub_3

句点「。」のグリフであるのだが、以上を踏まえると、

vertフィーチャーによって横書きの句点のグリフが縦書きの句点のグリフに置換されるように定義されていることが分かる。

Tahomaフォントはややこしいので省略・・・

最後に、T2FAnalyzerの方も最新版をアップロードしてあるのだが、現状、ルックアップタイプ1~4までのLookupサブテーブルにしか対応していないdespair。内部的にすべてのルックアップタイプのサブテーブルを解析しているのだが、GUIの方がまだ・・というより、しばらく他の事やろう。ははは。

2008年8月11日 (月)

T2FAnalyzer怒涛のアップデート

TrueType/OpenTypeフォント解析ツールT2FAnalyzerを再びアップデートしました。

前回の予定通りグリッドを置き換えました。合わせて、1024*768ピクセルの解像度の環境でも切れることなく表示される?ようレイアウトを調整しました。

T2fv1001_1

グリッドでフィルタ、特定の列で並べ替えが可能になりました。

T2fv1001_2

上の画像はglyfテーブルでグリフインデックス([Index]列)が1000未満のグリフに絞って表示しているところです。以前は、フィルタや並べ替えが出来なかったので、特定のグリフインデックスのグリフを表示するのが大変でしたdespair

インクリメンタルサーチもできます。例えば、グリフインデックスが1513のグリフを表示したい時、キーボードから1、5、1・・と順にタイプすると、インクリメンタルサーチが動作します。

T2fv1001_3

上の画像からはわかりづらいですが、「1153」の周りが黒で表示されています。

ほとんどのグリッドを置き換えたのですが、操作は全く同じです。インクリメンタルサーチは例外はありますが、基本的に[Index]列に対して動作します。

GSUBテーブルのLookupサブテーブルのGUIのレイアウトを設計したのですが、またもや、失敗しました。ははは。

使用していたコントロール(GUIの部品)をほとんど置き換えたので燃え尽きましたwobbly

2008年8月 6日 (水)

フォント解析ツールT2FAnalyzerアップデート

True/OpenTypeフォント解析ツールT2FAnalyzerをバージョンアップしました。バージョン管理しっかりやってないのでやった方がいいのかも・・bearing。ヘルプファイルも、更新履歴のファイルもないし・・・

主な変更はGUIを変更し、より使いやすくしました。メインメニューとドッキング可能なウィンドウを導入しました。これで、解像度の低い環境でも大丈夫wink?今のところ、1280*1024ドット以上の解像度が推奨です。1280*1024ドットより低い解像度の環境だと表示項目の多いテーブルだと下の方が切れますbearing

画面はこんな感じです。

T2fana_1

元々、メインのフォントの解析するプログラムの開発が終わった後に、GUIを変更しようとしてたのですが、一部分だけ先に変更しておきました。GUI変更の第1段階という感じですかね。予定の第2段階ですが、これも前から計画にあったのですが、現在のT2FAnalyzerで使われてるグリッドで自由にソートや特定のキーワードなどで検索できず、ちょっと使いずらいなぁーと思ってたので、自分の他のソフトであるDBXInspectorで使われてるグリッドに変更しようと思ってます。これです。

T2fana_2

まぁ、予定なのでいつになるかは分かりませんが。作り途中のGSUBテーブルの解析の方も終わらせないといけないし・・

2008年8月 3日 (日)

V1.1.12リリース

V1.1.12をリリースしました。

残ってた「ロールバック情報」ウィンドウを追加しました(まだ、SGAが残ってますが・・・)。ロールバックセグメント(UNDO)の情報が表示されます。

V1112_1

V1112_2

DBA_ROLLBACK_SEGSV$ROLLSTATビューの内容が表示されます。

以上ですが、次リリース以降で、コード補完の表示内容を変えようと思ってます。現在、パッケージのファンクションやプロシージャの表示で次の画像のように引数のリストが表示されていますが、引数のリストは表示しないようにし、単純に名前だけ表示するように変更しようと思います。

V1112_3

コード補完時に引数のリストを見て補完する項目を決定してる人はほとんどいないと思いますので(他にも理由がありますが・・)。合わせて、引数のリストの表示を廃止するので、オーバロードされた(同名の)プロシージャやファクンションも複数表示するのではなく、1つだけ表示するように変更しようと思います。

パラーメータ表示時は現状のままの予定です。つまり、オーバーロードされたファウンクションまたはプロシージャの数だけ引数のリストの候補が表示されます。

V1112_4

« 2008年7月 | トップページ | 2008年9月 »

自作ソフトウェア

無料ブログはココログ

メモ