Re: Type1 と xdvi

名前: anonymouse
日時: 2006-10-12 13:51:54
IPアドレス: 66.226.79.*

>>45429 > チベット語パッケージのある作者は上のような文字の組み合せを > Perl で,別の作者は tfm でリガチャを駆使して処理をしています。 > > TrueType用チベット語インプッドメソッドがあれば,Windows > ユーザーとしては嬉しいのですが。Mac OS ではチベット語が > 使えるとか。 Uniscribeを利用したWindowsアプリケーション、Pangoを利用した Gnomeアプリケーション、Qt3(Qt4)の国際化機能を利用したKDE アプリケーションなどでは、発音する順序に文字を入力すれば、 各文字は適切な位置に再配置され、合字も正しく処理されて表示 されます。Brahmi文字起源のチベット文字システムで使用される、 文字の種類はそれほど膨大ではありませんから、キーマップさえ あれば、インプッドメソッドは必要ありません。 とは言え、文字を発音する順序と書き表す順序は、一般に一致 しませんし、コンテクストによって、個別の文字の形は大きく 変化しますから、当該文字の表記法に通じていない人間が 『キーマップの表を見ながら打つ』のはかなり困難*です。ちなみに Thai文字とLao文字は例外的に、文字を書き表す順序に入力します。 これは当然、発音する順序とは異なります。 ただし、上が正しく機能するには、使用されるフォントがOpenType のGSUB, GPOSテーブルを実装した物でなければいけません。 少し技術的ですが、一般にOpenTypeでユニコード文字列を表示する 仕組みは、 1/論理的順序の文字列を水平方向に表示順に並べ替える。 この段階で各文字をフォント内の対応するグリフに置き換えます。 2/各グリフを必要ならばコンテクストに合った適切なグリフに置き換える。 この段階で各グリフをそのメトリックに従い配置します。 3/コンテクストに従い、グリフの配置を調整する。 の三段階を踏みます。 1/はユニコードの規格に定められている規則に従います。この中には、 右から左にかかれるアラビア文字やヘブライ文字を逆順に並べ替える 作業も含まれますし、Brahmi文字起源の文字のように、発音順と表記順が 一致しない文字の並べ替えも含まれます。 2/はフォント内のGSUBテーブルの情報に基づいて行われます。 この中には合字(リガチャー)の処理も、縦書き用句読点括弧類の処理も、 漢字の異体字切替えも含まれます。ついでに言っておくと、日本語OpenType フォントで、例えば、dligフィーチャーを有効にすると、ミリが㍉に置き換え られたり、afrcフィーチャーで5/11がCID9861に置き換えられたりもします。 XeTeXでdligフィーチャーを使う場合は文字列を\hbox{}に入れて下さい。 3/はフォント内のGPOSテーブルの情報に基づいて行われます。 この中には、欧文のカーニング、和文の詰め組、タイ語の声調符号の 配置などが含まれます。Nastaleeq体のアラビア文字のように、斜めに 表記されるフォントも、この段階の処理を使って実装されています。 文字をグリフに置き換える前に並べ替える、以上の仕組みは南インド系の 文字や、クメール文字など、単一の母音が文字に書くと分裂して子音群を 挟み込んだりする表記法を取り扱うには、徒に複雑な処理を必要とし、 不利な点もありますが、今後はこれが標準的な処理法になると思われます。 チベット文字の話に戻ると、1/は必要ないので、2/と3/を実装した フォントを作成すれば、現代の一般的なアプリケーションで、使用 できるようになります。そこで、既存のチベット文字フォントを 覗いてみると、縦に文字を積み重ねる処理は2/のGSUB内のリガチャー として実装されているようです。つまり、予め組み合わせた大量の グリフをデザインしてフォント内に格納しています。しかし、 ウメフォントのデザインを拝見した限りでは、3/のGPOS内の配置 情報を用いて母音符号の位置調整をした方がよさそうに見えます。 blwm, abvm, distフィーチャーを使えば、おそらく、正しく表示 されるでしょう。 Mac OSのAATでは上で説明したような文字レイアウトに関する情報は すべて、GXフォント内のmort/morxテーブルに格納する事になって います。システムは表記法に関する何の予備知識も持たずに、フォント の提供する規則をただ単純に実行し、文字を配置します。 時間がないので、書き忘れた事もありそうですが、又後程。

この書き込みへの返事:

お名前
題名 
メッセージ(タグは <a href="...">...</a> だけ使えます。適宜改行を入れてください)