Java プラットフォームでは、すべての実装でサポートが求められる 5 つの論理フォント名 (Serif、SansSerif、Monospaced、Dialog、DialogInput) が定義されています。論理フォント名は、実装に依存した方法で、物理フォントにマッピングされます。
Sun の Java SE Runtime Environment では、論理フォント名から物理フォントへのマッピングにフォント構成ファイルが使用されます。ホストオペレーティングシステムのバージョンに応じて、異なるマッピングをサポートする複数のファイルが存在します。ファイルの位置は、JRE のインストール先の lib ディレクトリです。ユーザーはフォント構成ファイルを変更したり新規に作成したりすることで、特定のシステム設定に応じてマッピングを調整できます。ただし、この操作により JRE が変更されること、そして Sun は変更後の JRE をサポートしないことに注意してください。
フォント構成ファイルには 2 つの形式があります。プロパティー形式と、バイナリ形式です。プロパティー形式については、このドキュメントで詳しく説明します。この形式は、ユーザー定義の構成のために使用できます。バイナリ形式については、ドキュメントが用意されておらず、JRE の事前定義済みの構成に対してのみ使用されます。参照用に、それらの構成に対応するプロパティー形式のファイルが、「.properties.src」という拡張子のファイルとして用意されています。
フォント構成ファイルは実装に依存しています。Java プラットフォームのすべての実装でこのファイルが使用されるわけではありません。また、その内容と形式は実行環境やリリースの違いによって異なります。このドキュメントでは、Sun の Java SE Runtime Environment バージョン 6 で使用される形式について説明します。
ホストオペレーティングシステムに適したフォント構成ファイルを検索するために、次の情報が使用されます。
"98"
、"2000"
、"Me"
、"XP"
、"2003"
。"Sun"
、"RedHat"
、"Turbo"
、"SuSE"
。ランタイムでは、次のファイルのうち、最初に見つかったものが使用されます。
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
クラスで指定されるプロパティーファイルと見なされ、そのクラスによってロードされます。その拡張子のないファイルは、バイナリ形式と見なされます。
フォント構成ファイル全体で、さまざまな名前が使用されます。
serif
、sansserif
、monospaced
、dialog
、および dialoginput
のいずれか。フォント構成ファイルでは、これらの名前はすべて小文字で記述される。plain
、bold
、italic
、および bolditalic
のいずれか。この場合も、すべて小文字で表される。"Courier New"
や "\uad74\ub9bc"
のようなフォントフェース名。"-monotype-times new roman-regular-r---*-%d-*-*-p-*-iso8859-1"
のような xlfd 名。"%d"
はフォントサイズを示し、実際のフォントサイズが実行時に挿入される。java.nio.charset.Charset.defaultCharset().name()
により返される名前。バージョンプロパティーは、フォント構成の形式のバージョンを識別するものです。このドキュメントで規定しているのは、バージョン 1 です。
完全なプロパティーの形式は次のとおりです。
version=1
コンポーネントフォントのマッピングのプロパティーでは、特定の文字サブセットの文字を、特定のスタイルの特定の論理フォントでレンダリングするときに使用する物理フォントを指定します。
キーの形式は次のとおりです。
allfonts.
CharacterSubsetName LogicalFontName.
StyleName.
CharacterSubsetName
第 1 の形式は、論理フォントやスタイルとは無関係に、同じフォントを文字サブセットに使用する場合に利用します。この場合、フォントレンダリングエンジンは、アルゴリズム的にスタイルをフォントに適用します。第 2 の形式は、異なる論理フォントおよびスタイルごとに、別々の物理フォントを文字サブセットに使用する場合に利用します。この形式では、論理フォントとスタイルの組み合わせそれぞれについてプロパティーを指定する必要があるため、1 つの文字サブセットに対して 20 のプロパティーを指定することになります。ある文字サブセットに対して第 1 の形式のプロパティーが指定されている場合、同じ文字サブセットに対して第 2 の形式のプロパティーが指定されていても無視されます。
指定する値は、前のセクションで説明した、プラットフォームのフォント名です。
各種フォントによってサポートされる文字サブセットは重複することが多いので、文字をレンダリングする際に使用するフォントの順序を定義するために、別の検索順序プロパティーを使用します。
Java ランタイムでは、5 つの論理フォントの検索順序を判別するために sequence プロパティーが使用されます。ただし、フォント構成ファイルでは、エンコーディング、言語、国の特定の組み合わせに対してプロパティーを指定できます。その場合、ランタイムでは、各論理フォントの sequence プロパティーを参照して順序が判別されます。
キーの形式は次のとおりです。
sequence.allfonts
.Encoding.Language.Countrysequence.
LogicalFontName.Encoding.Language.Countrysequence.allfonts
.Encoding.Languagesequence.
LogicalFontName.Encoding.Languagesequence.allfonts
.Encodingsequence.
LogicalFontName.Encodingsequence.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 では、プラットフォーム固有のプロパティーはありません。ただし、検索順序の指定に使用する、特別な形式の文字サブセット名があります。「alphabetic」という文字サブセット名に、そのサブセットに関連付ける文字エンコーディングを示す接尾辞を付けることができます。
alphabetic
alphabetic/default
alphabetic/1252
この情報は、AWT でのみ使用され、2D では使用されません。「/default」という接尾辞を指定すると、この文字サブセットに対するコンポーネントフォントの使用が、デフォルトエンコーディングの文字セットに限定されます。また、「/1252」という接尾辞を指定すると、Windows-1252 文字セットに限定されます。コンポーネントフォントのマッピングと除外範囲にアクセスするには、文字エンコーディングの接尾辞を省略します。これ以外のすべての文字サブセットについて、AWT の文字エンコーディングは、Java ランタイムによって内部的に判別されます。
AWT テキストコンポーネントは、テキストのレンダリングを Motif ベースのピアに依存しているため、ほかの AWT コンポーネントや 2D と同じプラットフォームフォントを常に使用することができません。これらのコンポーネント用にコンポーネントフォントを検索する際には、追加のキーが認識されます。このケースで参照されるキーの一式は、次のとおりです。
allfonts.
CharacterSubsetName.motif
LogicalFontName.
StyleName.
CharacterSubsetName.motif allfonts.
CharacterSubsetNameLogicalFontName
.
StyleName.
CharacterSubsetName
AWT フォントパスプロパティーでは、X11 サーバーフォントパスに追加する必要のあるプラットフォームディレクトリを指定します。キーの形式は次のとおりです。
awtfontpath.CharacterSubsetName
値の形式は次のとおりです。
AWTFontPathValue:
Directory
Directory :
AWTFontPathValue
指定するディレクトリは、有効な X11 フォントディレクトリであることが必要です。Java ランタイムは、検索順序の参照で見つかる主検索順序に含まれるすべての文字サブセットのディレクトリが、確実に X11 フォントパスに組み込まれるようにします。実装では、同じエンコーディング、言語、国が設定されている特定の環境について、すべての論理フォントが同じ一式の文字サブセットを使用することを前提としています。