2012年5月8日火曜日

フォント構成ファイル

Java 2 プラットフォームでは、すべての実装でのサポートが求められる 5 つの論理フォント名 (Serif、SansSerif、Monospaced、Dialog、DialogInput) が定義されています。これらの論理フォント名は、実装に依存した方法で、物理フォントにマップされます。

Sun の J2SE Runtime Environment では、論理フォント名から物理フォントへのマッピングにフォント構成ファイルが使用されます。ホストオペレーティングシステムのバージョンに応じて、異なるマッピングをサポートする複数のファイルが存在します。ファイルの位置は、JRE のインストール先の lib ディレクトリです。ユーザは フォント構成ファイルを変更したり新規に作成したりすることで、特定のシステム設定に応じてマッピングを調整できます。ただし、この操作により JRE が変更されること、そして Sun は変更後の JRE をサポートしないことに注意してください。

フォント構成ファイルには 2 つの形式があります。プロパティ形式と、バイナリ形式です。プロパティ形式については、このドキュメントで詳しく説明します。この形式は、ユーザ定義の構成のために使用できます。バイナリ形式については、ドキュメントが用意されておらず、JRE の事前定義済みの構成に対してのみ使用されます。参照用に、それらの構成に対応するプロパティ形式のファイルが、「.properties.src」という拡張子のファイルとして用意されています。

フォント構成ファイルは実装に依存しています。Java 2 プラットフォームの実装すべてでこのファイルが使用されるわけではありません。また、その内容と形式はランタイムおよびリリースにより異なります。このドキュメントでは、Sun の J2SE Runtime Environment バージョン 5.0 で使用される形式について説明します。

  1. フォント構成ファイルのロード
  2. フォント構成ファイル内で使用される名前
  3. すべてのプラットフォームに共通のプロパティ
  4. Windows 用のプロパティ
  5. Solaris および Linux 用のプロパティ


フォント構成ファイルのロード

ホストオペレーティングシステムに適したフォント構成ファイルを検索するために、次の情報が使用されます。

  • JavaHome - JRE のディレクトリ。java.home システムプロパティで指定される
  • OS - オペレーティングシステムの種類を識別する文字列
    • Windows では、982000MeXP2003
    • Solaris では空白
    • Linux では、SunRed HatTurboSuSE
  • Version - オペレーティングシステムのバージョンを識別する文字列

ランタイムでは、次のファイルのうち、最初に見つかったものが使用されます。

	JavaHome/lib/fontconfig.OS.Version.properties  	JavaHome/lib/fontconfig.OS.Version.bfc  	JavaHome/lib/fontconfig.OS.properties  	JavaHome/lib/fontconfig.OS.bfc  	JavaHome/lib/fontconfig.Version.properties  	JavaHome/lib/fontconfig.Version.bfc  	JavaHome/lib/fontconfig.properties  	JavaHome/lib/fontconfig.bfc

「.properties」という拡張子のファイルは、Properties クラスで指定されるプロパティファイルと見なされ、そのクラスによってロードされます。その拡張子のないファイルは、バイナリ形式と見なされます。


フォント構成ファイル内で使用される名前

フォント構成ファイル全体で、さまざまな名前が使用されます。

  • LogicalFontName - 5 つの論理フォント名 serifsansserifmonospaceddialog、および dialoginput のいずれか。フォント構成ファイルでは、これらの名前はすべて小文字で記述される
  • StyleName - 4 つの標準フォントスタイル plainbolditalic、および bolditalic のいずれか。これらの名前も、すべて小文字で記述される
  • PlatformFontName - プラットフォームで一般的に使用される形式の物理フォント名
    • Windows では、Courier New  \uad74\ub9bc のようなフォントフェース名
    • Solaris および Linux では、-monotype-times new roman-regular-r---*-%d-*-*-p-*-iso8859-1 のような xlfd 名。%d はフォントサイズを示し、実際のフォントサイズが実行時に挿入される
  • CharacterSubsetName - 特定のコンポーネントフォントでレンダリングできる Unicode 文字セットのサブセット名。Windows に対して事前に定義されている名前は、alphabetic、arabic、chinese-ms936、chinese-gb18030、chinese-ms950、chinese-hkscs、cyrillic-iso8859-5、cyrillic-cp1251、cyrillic-koi8-r、devanagari、dingbats、greek、hebrew、japanese、korean、latin、symbol、thai です。Solaris および Linux に対して事前に定義されている名前は、arabic、chinese-gb2312、chinese-gbk、chinese-gb18030-0、chinese-gb18030-1、chinese-cns11643-1、chinese-cns11643-2、chinese-cns11643-3、chinese-big5、chinese-hkscs、cyrillic、devanagari、dingbats、greek、hebrew、japanese-x0201、japanese-x0208、japanese-x0212、korean、korean-johab、latin-1、latin-2、latin-4、latin-5、latin-7、latin-9、symbol、thai です。フォント構成ファイルでは、追加の文字サブセットを識別するために、サブセット名を追加して定義することができます。
  • Encoding - デフォルトエンコーディングの正準名。java.nio.charset.Charset.defaultCharset().name() により返される名前
  • Language - 初期のデフォルトロケールの言語
  • Country - 初期のデフォルトロケールの国名


すべてのプラットフォームに共通のプロパティ

バージョンプロパティ

バージョンプロパティは、フォント構成の形式のバージョンを識別するものです。このドキュメントで規定しているのは、バージョン 1 です。

完全なプロパティの形式は次のとおりです。

version=1

コンポーネントフォントのマッピング

コンポーネントフォントのマッピングのプロパティでは、特定の文字サブセットの文字を、特定のスタイルの特定の論理フォントでレンダリングするときに使用する物理フォントを指定します。

キーの形式は次のとおりです。

	allfonts.CharacterSubsetName  	LogicalFontName.StyleName.CharacterSubsetName

第 1 の形式は、論理フォントやスタイルとは無関係に、同じフォントを文字サブセットに使用する場合に利用します。この場合、フォントレンダリングエンジンは、アルゴリズム的にスタイルをフォントに適用します。第 2 の形式は、異なる論理フォントおよびスタイルごとに、別々の物理フォントを文字サブセットに使用する場合に利用します。この形式では、論理フォントとスタイルの組み合わせそれぞれについてプロパティを指定する必要があるため、1 つの文字サブセットに対して 20 のプロパティを指定することになります。ある文字サブセットに対して第 1 の形式のプロパティが指定されている場合、同じ文字サブセットに対して第 2 の形式のプロパティが指定されていても無視されます。

指定する値は、前の項で説明した、プラットフォームのフォント名です。

各種のフォントによってサポートされる文字サブセットは重なることが多いので、文字をレンダリングする際に使用するフォントの順序を定義するために、異なる sequence プロパティを使用します。

検索順序

Java ランタイムでは、5 つの論理フォントの検索順序を判別するために sequence プロパティが使用されます。ただし、フォント構成ファイルでは、エンコーディング、言語、国の特定の組み合わせに対してプロパティを指定できます。その場合、ランタイムでは、各論理フォントの sequence プロパティを参照して順序が判別されます。

キーの形式は次のとおりです。

	sequence.allfonts.Encoding.Language.Country  	sequence.LogicalFontName.Encoding.Language.Country  	sequence.allfonts.Encoding.Language  	sequence.LogicalFontName.Encoding.Language  	sequence.allfonts.Encoding  	sequence.LogicalFontName.Encoding  	sequence.allfonts  	sequence.LogicalFontName

allfonts の形式は、5 つの論理フォントすべてに対して順序を使用する場合に利用します。論理フォント名を指定する形式は、異なる論理フォントに対し異なる順序を使用する場合に利用します。

各論理フォントについて、Java ランタイムでは、上記のキーのうち最初に登場するプロパティ値が使用されます。このプロパティにより、論理フォントの主検索順序が決まります。

このファイルでは、1 つの代替検索順序を定義することもできます。代替 sequence プロパティのキーの形式は次のとおりです。

	sequence.fallback

すべての sequence プロパティの値は、次の形式で指定します。

SearchSequenceValue:  	CharacterSubsetName  	CharacterSubsetName , SearchSequenceValue

主 sequence プロパティでは、必須フォントの文字サブセット名を指定します。AWT および 2D のフォントレンダリングではどちらも、これらのフォントが使用されます。代替 sequence プロパティでは、オプションフォントの文字サブセット名を指定します。これらのフォントはすべての論理フォントについて使用されますが、2D のフォントレンダリングの場合だけです。実行時環境では、Lucida Sans Regular フォントが 2D レンダリング用の代替フォントとして自動的に追加されます (まだ指定されていない場合)。また、ランタイムに lib/fonts/fallback ディレクトリが存在し、そのディレクトリに有効な TrueType フォントまたは Type 1 フォントが含まれている場合は、それらのフォントが 2D レンダリング用の代替フォントとして自動的に追加されます。Windows では、システム EUDC (End User Defined Characters) フォントが Windows に登録されている場合、そのフォントも 2D レンダリング用の代替フォントとして自動的に追加されます。

sequence プロパティにより、特定の文字をレンダリングするために、コンポーネントフォントをどのような順序で使用するかが決まります。たとえば、次のようなプロパティを指定したとします。

sequence.monospaced=japanese,alphabetic  sequence.fallback=korean  monospaced.plain.alphabetic=Arial  monospaced.plain.japanese=MSGothic  monospaced.plain.korean=Gulim

ランタイムでは、まず、MSGothic フォントを使用して文字をレンダリングしようとします。そのフォントがその文字のグリフを提供していない場合は、Arial フォントを試します。2D レンダリングでは、さらに、Gulim フォントと Lucida Sans Regular フォントのほか、ランタイムの lib/fonts/fallback ディレクトリにある TrueType フォントまたは Type 1 フォントも試します。Windows 上での 2D レンダリングでは、システム EUDC フォントが Windows に登録されている場合、最後にその EUDC フォントも試します。

文字列を参照せずに論理フォントのフォントメトリックスを計算する場合には、必須フォントだけが考慮に入れられます。たとえば、上記のプロパティ設定の場合であれば、FontMetrics.getMaxDescent メソッドは MSGothic フォントと Arial フォントに基づいて結果を返します。Gulim フォントと Lucida Sans フォントは考慮に入れられません。このため、ボタンなど、単純なユーザインタフェース要素 (フォントメトリックに基づいて要素のサイズが計算されることがある) は、その要素が通常は使用しないコンポーネントフォントを含む拡張リストから影響を受けることはありません。一方、テキストコンポーネントでは、通常実際に表示するテキストに基づいてメトリックを計算するため、正しい結果が得られます。

5 つの論理フォントについてランタイムが取得する sequence プロパティは、同じ文字サブセットを列挙している必要がありますが、文字セット列挙する順序は異なっていてもかまいません。

除外範囲

除外範囲プロパティでは、特定の文字サブセットに対応するフォントによるレンダリングの対象から除外する Unicode 文字の範囲を指定します。このプロパティは、(パフォーマンス上の理由などで) 多数の文字をサポートしているフォントを早い検索順位に置く必要があるが、そのフォントがサポートしている文字の一部を別のフォントで描画する必要がある場合に使用します。このプロパティはオプションで、指定できるのは文字サブセットあたり 1 つまでです。

キーの形式は次のとおりです。

	exclusion.CharacterSubsetName

値の形式は次のとおりです。

ExclusionRangeValue:  	Range  	Range , ExclusionRangeValue     Range:  	Char - Char     Char:  	HexDigit HexDigit HexDigit HexDigit  	HexDigit HexDigit HexDigit HexDigit HexDigit HexDigit

Char は、Unicode 文字を 16 進数として表現したものです。

プロポーショナルフォント

プロポーショナルフォントプロパティでは、同じフォントのプロポーショナル版と非プロポーショナル版の関係を記述します。このプロパティは、GraphicsEnvironment.preferProportionalFonts メソッドで指定する設定を実装するために使用されます。

キーの形式は次のとおりです。

	proportional.PlatformFontName

プラットフォームフォント名に含まれている空白文字は、下線 (「_」) に置き換える必要があります。

値の形式は次のとおりです。

	PlatformFontName

値の指定では、空白文字は元のまま残します。

各プロパティは、値として指定したフォントがキーに指定したフォントのプロポーショナル版であることと、キーに指定したフォントが値として指定したフォントの非プロポーショナル版であることを示します。

フォントファイル名

フォントファイル名のプロパティは、フォント構成ファイルで使用される物理フォントを格納しているファイルの名前を指定します。Windows では、すべての物理フォントについてファイル名の指定が必須です。Solaris および Linux では、すべての物理フォントについてファイル名の指定が推奨されています。

キーの形式は次のとおりです。

	filename.PlatformFontName

プラットフォームフォント名に含まれている空白文字は、下線 (「_」) に置き換える必要があります。

値は、フォントを格納しているファイルのファイル名です。Windows では、単純なファイル名を指定します。そのため、ランタイムでは、まずランタイムのlib/fonts ディレクトリから各ファイルが検索され、次に Windows のフォントディレクトリから検索されます。Solaris および Linux では、絶対パス名 (実行時環境の lib/fonts ディレクトリを表す「$JRE_LIB_FONTS」を先頭に置く) を指定するか、xlfd 名を指定します。

追加のフォントパス

Java ランタイムでは、ランタイムの lib/fonts ディレクトリや、Windows のフォントフォルダなど、フォントファイルが格納されているいくつかのディレクトリを自動的に判別できます。このフォントパスに追加するため、追加のディレクトリを指定することができます。

キーの形式は次のとおりです。

	appendedfontpath

値の形式は次のとおりです。

AppendedFontPathValue:  	Directory  	Directory PathSeparator AppendedFontPathValue

パス区切り文字は、プラットフォームに依存する java.io.File.pathSeparator の値です。


Windows 用のプロパティ

Windows では、プラットフォーム固有のプロパティはありません。ただし、検索順序の指定に使用する、特別な形式の文字サブセット名があります。「alphabetic」という文字サブセット名に、そのサブセットに関連付ける文字エンコーディングを示す接尾辞を付けることができます。

	alphabetic  	alphabetic/default  	alphabetic/1252

この情報は、AWT でのみ使用され、2D では使用されません。「/default」という接尾辞を指定すると、この文字サブセットに対するコンポーネントフォントの使用が、デフォルトエンコーディングの文字セットに限定されます。また、「/1252」という接尾辞を指定すると、Windows-1252 文字セットに限定されます。コンポーネントフォントのマッピングと除外範囲にアクセスするには、文字エンコーディングの接尾辞を省略します。これ以外のすべての文字サブセットについて、AWT の文字エンコーディングは、Java ランタイムによって内部的に判別されます。


Solaris および Linux 用のプロパティ

Motif コンポーネントフォントのマッピング

AWT テキストコンポーネントは、テキストのレンダリングを Motif ベースのピアに依存しているため、他の AWT コンポーネントや 2D と同じプラットフォームフォントを常に使用することができません。これらのコンポーネント用にコンポーネントフォントを検索する際には、追加のキーが認識されます。このケースで参照されるキーの一式は、次のとおりです。

	allfonts.CharacterSubsetName.motif  	LogicalFontName.StyleName.CharacterSubsetName.motif  	allfonts.CharacterSubsetName  	LogicalFontName.StyleName.CharacterSubsetName

AWT の X11 フォントパス

AWT フォントパスプロパティでは、X11 サーバフォントパスに追加する必要のあるプラットフォームディレクトリを指定します。キーの形式は次のとおりです。

	awtfontpath.CharacterSubsetName

値の形式は次のとおりです。

AWTFontPathValue:  	Directory  	Directory : AWTFontPathValue

指定するディレクトリは、有効な X11 フォントディレクトリであることが必要です。Java ランタイムは、検索順序の参照で見つかる主検索順序に含まれるすべての文字サブセットのディレクトリが、確実に X11 フォントパスに組み込まれるようにします。実装では、同じエンコーディング、言語、国が設定されている特定の環境について、すべての論理フォントが同じ一式の文字サブセットを使用することを前提としています。

0 件のコメント:

コメントを投稿